ZGlmZiAtLWdpdCBhLy5hcHB2ZXlvci55bWwgYi8uYXBwdmV5b3IueW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZTE4MjQKLS0tIC9kZXYvbnVsbAorKysgYi8uYXBwdmV5b3IueW1sCkBAIC0wLDAgKzEsMTA5IEBACit2ZXJzaW9uOiAne2J1aWxkfScKKworY2xvbmVfZGVwdGg6IDUKKworbWF0cml4OgorICBmYXN0X2ZpbmlzaDogdHJ1ZQorCitpbnN0YWxsOgorICAtIGNpbnN0IHdpbmZsZXhiaXNvbgorICAtIHdpbl9mbGV4IC0tdmVyc2lvbgorICAtIHdpbl9iaXNvbiAtLXZlcnNpb24KKyAgLSBhcHB2ZXlvciBEb3dubG9hZEZpbGUgaHR0cHM6Ly93d3cud2lucGNhcC5vcmcvaW5zdGFsbC9iaW4vV3BkUGFja180XzFfMi56aXAKKyAgLSA3eiB4IC5cV3BkUGFja180XzFfMi56aXAgLW9jOlxwcm9qZWN0c1xsaWJwY2FwXFdpbjMyCisgIC0gYXBwdmV5b3IgRG93bmxvYWRGaWxlIGh0dHBzOi8vbm1hcC5vcmcvbnBjYXAvZGlzdC9ucGNhcC1zZGstMS4wNS56aXAKKyAgLSA3eiB4IC5cbnBjYXAtc2RrLTEuMDUuemlwIC1vYzpccHJvamVjdHNcbGlicGNhcFxXaW4zMlxucGNhcC1zZGstMS4wNQorICAtIGFwcHZleW9yIERvd25sb2FkRmlsZSBodHRwczovL3N1cHBvcnQucml2ZXJiZWQuY29tL2Jpbi9zdXBwb3J0L2Rvd25sb2FkP3NpZD1sM3ZrM2V1NjQ5dXNndTNyajYwdW5janFxdSAtRmlsZU5hbWUgQWlyUGNhcF9EZXZwYWNrLnppcAorICAtIDd6IHggLlxBaXJQY2FwX0RldnBhY2suemlwIC1vYzpccHJvamVjdHNcbGlicGNhcFxXaW4zMgorCitlbnZpcm9ubWVudDoKKyAgbWF0cml4OgorICAgIC0gQVBQVkVZT1JfQlVJTERfV09SS0VSX0lNQUdFOiBWaXN1YWwgU3R1ZGlvIDIwMTUKKyAgICAgIEdFTkVSQVRPUjogIk1pbkdXIE1ha2VmaWxlcyIKKyAgICAgIFNESzogV3BkUGFjaworICAgICAgQUlSUENBUDogLURESVNBQkxFX0FJUlBDQVA9WUVTCisgICAgICBNSU5HV19ST09UOiBDOlxtaW5ndy13NjRceDg2XzY0LTguMS4wLXBvc2l4LXNlaC1ydF92Ni1yZXYwCisgICAgLSBBUFBWRVlPUl9CVUlMRF9XT1JLRVJfSU1BR0U6IFZpc3VhbCBTdHVkaW8gMjAxNQorICAgICAgR0VORVJBVE9SOiAiTWluR1cgTWFrZWZpbGVzIgorICAgICAgU0RLOiBucGNhcC1zZGstMS4wNQorICAgICAgQUlSUENBUDogLURESVNBQkxFX0FJUlBDQVA9WUVTCisgICAgICBNSU5HV19ST09UOiBDOlxtaW5ndy13NjRceDg2XzY0LTguMS4wLXBvc2l4LXNlaC1ydF92Ni1yZXYwCisgICAgLSBBUFBWRVlPUl9CVUlMRF9XT1JLRVJfSU1BR0U6IFZpc3VhbCBTdHVkaW8gMjAxNQorICAgICAgR0VORVJBVE9SOiAiVmlzdWFsIFN0dWRpbyAxNCAyMDE1IgorICAgICAgU0RLOiBXcGRQYWNrCisgICAgICBBSVJQQ0FQOiAtRERJU0FCTEVfQUlSUENBUD1ZRVMKKyAgICAtIEFQUFZFWU9SX0JVSUxEX1dPUktFUl9JTUFHRTogVmlzdWFsIFN0dWRpbyAyMDE1CisgICAgICBHRU5FUkFUT1I6ICJWaXN1YWwgU3R1ZGlvIDE0IDIwMTUgV2luNjQiCisgICAgICBTREs6IFdwZFBhY2sKKyAgICAgIEFJUlBDQVA6IC1ERElTQUJMRV9BSVJQQ0FQPVlFUworICAgIC0gQVBQVkVZT1JfQlVJTERfV09SS0VSX0lNQUdFOiBWaXN1YWwgU3R1ZGlvIDIwMTUKKyAgICAgIEdFTkVSQVRPUjogIlZpc3VhbCBTdHVkaW8gMTQgMjAxNSIKKyAgICAgIFNESzogbnBjYXAtc2RrLTEuMDUKKyAgICAtIEFQUFZFWU9SX0JVSUxEX1dPUktFUl9JTUFHRTogVmlzdWFsIFN0dWRpbyAyMDE1CisgICAgICBHRU5FUkFUT1I6ICJWaXN1YWwgU3R1ZGlvIDE0IDIwMTUgV2luNjQiCisgICAgICBTREs6IG5wY2FwLXNkay0xLjA1CisgICAgICBBSVJQQ0FQOiAtRERJU0FCTEVfQUlSUENBUD1ZRVMKKyAgICAtIEFQUFZFWU9SX0JVSUxEX1dPUktFUl9JTUFHRTogVmlzdWFsIFN0dWRpbyAyMDE3CisgICAgICBHRU5FUkFUT1I6ICJWaXN1YWwgU3R1ZGlvIDE1IDIwMTciCisgICAgICBTREs6IFdwZFBhY2sKKyAgICAtIEFQUFZFWU9SX0JVSUxEX1dPUktFUl9JTUFHRTogVmlzdWFsIFN0dWRpbyAyMDE3CisgICAgICBHRU5FUkFUT1I6ICJWaXN1YWwgU3R1ZGlvIDE1IDIwMTcgV2luNjQiCisgICAgICBTREs6IFdwZFBhY2sKKyAgICAgIEFJUlBDQVA6IC1ERElTQUJMRV9BSVJQQ0FQPVlFUworICAgIC0gQVBQVkVZT1JfQlVJTERfV09SS0VSX0lNQUdFOiBWaXN1YWwgU3R1ZGlvIDIwMTcKKyAgICAgIEdFTkVSQVRPUjogIlZpc3VhbCBTdHVkaW8gMTUgMjAxNyIKKyAgICAgIFNESzogbnBjYXAtc2RrLTEuMDUKKyAgICAgIEFJUlBDQVA6IC1ERElTQUJMRV9BSVJQQ0FQPVlFUworICAgIC0gQVBQVkVZT1JfQlVJTERfV09SS0VSX0lNQUdFOiBWaXN1YWwgU3R1ZGlvIDIwMTcKKyAgICAgIEdFTkVSQVRPUjogIlZpc3VhbCBTdHVkaW8gMTUgMjAxNyBXaW42NCIKKyAgICAgIFNESzogbnBjYXAtc2RrLTEuMDUKKyAgICAgIEFJUlBDQVA6IC1ERElTQUJMRV9BSVJQQ0FQPVlFUworICAgIC0gQVBQVkVZT1JfQlVJTERfV09SS0VSX0lNQUdFOiBWaXN1YWwgU3R1ZGlvIDIwMTcKKyAgICAgIEdFTkVSQVRPUjogIlZpc3VhbCBTdHVkaW8gMTUgMjAxNyBXaW42NCIKKyAgICAgIFNESzogbnBjYXAtc2RrLTEuMDUKKyAgICAgIEFJUlBDQVA6IC1ERElTQUJMRV9BSVJQQ0FQPU5PCisgICAgLSBBUFBWRVlPUl9CVUlMRF9XT1JLRVJfSU1BR0U6IFZpc3VhbCBTdHVkaW8gMjAxOQorICAgICAgR0VORVJBVE9SOiAiVmlzdWFsIFN0dWRpbyAxNiAyMDE5IgorICAgICAgUExBVEZPUk06IFdpbjMyCisgICAgICBTREs6IFdwZFBhY2sKKyAgICAgIEFJUlBDQVA6IC1ERElTQUJMRV9BSVJQQ0FQPVlFUworICAgIC0gQVBQVkVZT1JfQlVJTERfV09SS0VSX0lNQUdFOiBWaXN1YWwgU3R1ZGlvIDIwMTkKKyAgICAgIEdFTkVSQVRPUjogIlZpc3VhbCBTdHVkaW8gMTYgMjAxOSIKKyAgICAgIFBMQVRGT1JNOiB4NjQKKyAgICAgIFNESzogV3BkUGFjaworICAgICAgQUlSUENBUDogLURESVNBQkxFX0FJUlBDQVA9WUVTCisgICAgLSBBUFBWRVlPUl9CVUlMRF9XT1JLRVJfSU1BR0U6IFZpc3VhbCBTdHVkaW8gMjAxOQorICAgICAgR0VORVJBVE9SOiAiVmlzdWFsIFN0dWRpbyAxNiAyMDE5IgorICAgICAgUExBVEZPUk06IFdpbjMyCisgICAgICBTREs6IG5wY2FwLXNkay0xLjA1CisgICAgICBBSVJQQ0FQOiAtRERJU0FCTEVfQUlSUENBUD1ZRVMKKyAgICAtIEFQUFZFWU9SX0JVSUxEX1dPUktFUl9JTUFHRTogVmlzdWFsIFN0dWRpbyAyMDE5CisgICAgICBHRU5FUkFUT1I6ICJWaXN1YWwgU3R1ZGlvIDE2IDIwMTkiCisgICAgICBQTEFURk9STTogeDY0CisgICAgICBTREs6IG5wY2FwLXNkay0xLjA1CisgICAgICBBSVJQQ0FQOiAtRERJU0FCTEVfQUlSUENBUD1ZRVMKKyAgICAtIEFQUFZFWU9SX0JVSUxEX1dPUktFUl9JTUFHRTogVmlzdWFsIFN0dWRpbyAyMDE5CisgICAgICBHRU5FUkFUT1I6ICJWaXN1YWwgU3R1ZGlvIDE2IDIwMTkiCisgICAgICBQTEFURk9STTogeDY0CisgICAgICBTREs6IG5wY2FwLXNkay0xLjA1CisgICAgICBBSVJQQ0FQOiAtRERJU0FCTEVfQUlSUENBUD1OTworCitidWlsZF9zY3JpcHQ6CisgICMKKyAgIyBBcHB2ZXlvciBkZWZhdWx0cyB0byBjbWQuZXhlLCBzbyB1c2UgY21kLmV4ZSBzeW50YXguCisgICMKKyAgLSB0eXBlIE5VTCA+LmRldmVsCisgIC0gbWQgYnVpbGQKKyAgLSBjZCBidWlsZAorICAjIFJlbW92ZSB0aGUgZGVmYXVsdCBNaW5HVyBwYXRoCisgIC0gaWYgIiVHRU5FUkFUT1IlIj09Ik1pbkdXIE1ha2VmaWxlcyIgc2V0IFBBVEg9JVBBVEg6QzpcTWluR1dcYmluOz0lCisgICMgQWRkIHRoZSBzcGVjaWZpZWQgTWluR1cgcGF0aAorICAtIGlmICIlR0VORVJBVE9SJSI9PSJNaW5HVyBNYWtlZmlsZXMiIHNldCBQQVRIPSVNSU5HV19ST09UJVxtaW5ndzY0XGJpbjslUEFUSCUKKyAgIyBSZW1vdmUgdGhlIHBhdGggdG8gR2l0LCBzbyB0aGF0IHdlIGRvbid0IHBpY2sgdXAgaXRzIHNoLmV4ZSwgYXMKKyAgIyB0aGF0IGJyZWFrcyBNaW5HVyBidWlsZHMgLSBDTWFrZSBjaGVja3MgZm9yIHRoYXQgYW5kIGZhaWxzIGluIHRoZQorICAjIGNvbmZpZ3VyYXRpb24gc3RhZ2UKKyAgLSBpZiAiJUdFTkVSQVRPUiUiPT0iTWluR1cgTWFrZWZpbGVzIiBzZXQgUEFUSD0lUEFUSDpDOlxQcm9ncmFtIEZpbGVzXEdpdFx1c3JcYmluOz0lCisgIC0gaWYgTk9UIERFRklORUQgUExBVEZPUk0gIGNtYWtlICVBSVJQQ0FQJSAtRFBhY2tldF9ST09UPWM6XHByb2plY3RzXGxpYnBjYXBcV2luMzJcJVNESyUgLUciJUdFTkVSQVRPUiUiIC1EUGFja2V0X1JPT1Q9YzpccHJvamVjdHNcbGlicGNhcFxXaW4zMlwlU0RLJSAtRFBhY2tldF9ST09UPWM6XHByb2plY3RzXGxpYnBjYXBcV2luMzJcJVNESyUgLUciJUdFTkVSQVRPUiUiIC1EQWlyUGNhcF9ST09UPWM6XHByb2plY3RzXGxpYnBjYXBcV2luMzJcQWlycGNhcF9EZXZwYWNrIC1HIiVHRU5FUkFUT1IlIiAuLgorICAtIGlmIERFRklORUQgUExBVEZPUk0gY21ha2UgJUFJUlBDQVAlIC1EUGFja2V0X1JPT1Q9YzpccHJvamVjdHNcbGlicGNhcFxXaW4zMlwlU0RLJSAtRyIlR0VORVJBVE9SJSIgLURQYWNrZXRfUk9PVD1jOlxwcm9qZWN0c1xsaWJwY2FwXFdpbjMyXCVTREslIC1EUGFja2V0X1JPT1Q9YzpccHJvamVjdHNcbGlicGNhcFxXaW4zMlwlU0RLJSAtRyIlR0VORVJBVE9SJSIgLURBaXJQY2FwX1JPT1Q9YzpccHJvamVjdHNcbGlicGNhcFxXaW4zMlxBaXJwY2FwX0RldnBhY2sgLUciJUdFTkVSQVRPUiUiIC1BICVQTEFURk9STSUgLi4KKyAgLSBpZiBOT1QgIiVHRU5FUkFUT1IlIj09Ik1pbkdXIE1ha2VmaWxlcyIgbXNidWlsZCAvbSAvbm9sb2dvIC9wOkNvbmZpZ3VyYXRpb249UmVsZWFzZSBwY2FwLnNsbgorICAtIGlmICIlR0VORVJBVE9SJSI9PSJNaW5HVyBNYWtlZmlsZXMiIG1pbmd3MzItbWFrZQpkaWZmIC0tZ2l0IGEvLmNpcnJ1cy55bWwgYi8uY2lycnVzLnltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjcxZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvLmNpcnJ1cy55bWwKQEAgLTAsMCArMSwyNSBAQAorIyBUaGUgaW50ZXJuYWwgZ2l0IGNsaWVudCByZWFkcyBDSVJSVVNfQ0xPTkVfREVQVEguCitlbnY6CisgIENJUlJVU19DTE9ORV9ERVBUSDogMworICBNQVhKT0JTOiAyCisgIElHTk9SRV9PU1ZFUlNJT046IHllcworCit0YXNrOgorICBmcmVlYnNkX2luc3RhbmNlOgorICAgIGltYWdlX2ZhbWlseTogJElNQUdFX0ZBTUlMWQorICBlbnY6CisgICAgbWF0cml4OgorICAgICAgLSBJTUFHRV9GQU1JTFk6IGZyZWVic2QtMTEtNAorICAgICAgLSBJTUFHRV9GQU1JTFk6IGZyZWVic2QtMTItMgorICAgICAgLSBJTUFHRV9GQU1JTFk6IGZyZWVic2QtMTMtMC1zbmFwCisgIHNjcmlwdDoKKyAgICAtIGZyZWVic2QtdmVyc2lvbgorICAgIC0gcGtnIGluc3RhbGwgLXF5IGF1dG9jb25mCisgICAgLSB0b3VjaCAuZGV2ZWwKKyAgICAtIC4vY29uZmlndXJlIC0tZW5hYmxlLXJlbW90ZSAtLXByZWZpeD0vdG1wCisgICAgLSBtYWtlIC1zIGFsbAorICAgIC0gbWFrZSAtcyB0ZXN0cHJvZ3MKKyAgICAtIG1ha2UgaW5zdGFsbAorICAgIC0gbWFrZSByZWxlYXNldGFyCisgICAgLSB0ZXN0cHJvZ3MvZmluZGFsbGRldnN0ZXN0CisKZGlmZiAtLWdpdCBhLy5naXRhdHRyaWJ1dGVzIGIvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmZjE5ZQotLS0gL2Rldi9udWxsCisrKyBiLy5naXRhdHRyaWJ1dGVzCkBAIC0wLDAgKzEsNSBAQAorIyBBdXRvIGRldGVjdCB0ZXh0IGZpbGVzIGFuZCBwZXJmb3JtIExGIG5vcm1hbGl6YXRpb24KKyogdGV4dD1hdXRvCisKKyMgdGhpbmdzIHRoYXQgb25seSBtYWtlIHNlbnNlIG9uIGdpdGh1Yi5jb20KKy5naXRodWIgZXhwb3J0LWlnbm9yZQpkaWZmIC0tZ2l0IGEvLm1haWxtYXAgYi8ubWFpbG1hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjU0NzM5Ci0tLSAvZGV2L251bGwKKysrIGIvLm1haWxtYXAKQEAgLTAsMCArMSwyOCBAQAorQXNzYXIgV2VzdGVybHVuZCA8YXNzYXJAc2ljcy5zZT4gYXNzYXIgPGFzc2FyPgorQmlsbCBGZW5uZXIgPGZlbm5lckBnbWFpbC5jb20+IGZlbm5lciA8ZmVubmVyPgorRGVuaXMgT3ZzaWVua28gPGRlbmlzQG92c2llbmtvLmluZm8+IDxpbmZyYXN0YXRpb25AeWFuZGV4LnJ1PgorRnJhbmNvaXMtWGF2aWVyIExlIEJhaWwgPGRldmVsLmZ4LmxlYmFpbEBvcmFuZ2UuZnI+IGZ4bGIgPGZ4LmxlYmFpbEB5YWhvby5jb20+CitGcmFuY29pcy1YYXZpZXIgTGUgQmFpbCA8ZGV2ZWwuZngubGViYWlsQG9yYW5nZS5mcj4gPGZ4LmxlYmFpbEB5YWhvby5jb20+CitGdWx2aW8gUmlzc28gPHJpc3NvQHBvbGl0by5pdD4gcmlzc28gPHJpc3NvPgorR2lhbmx1Y2EgVmFyZW5uaSA8Z2lhbmx1Y2EudmFyZW5uaUBnbWFpbC5jb20+IGdpYW5sdWNhIDxnaWFubHVjYT4KK0d1eSBIYXJyaXMgPGdoYXJyaXNAc29uaWMubmV0PiA8Z2hhcnJpc0Bsb2NhbGhvc3QubG9jYWxkb21haW4+CitHdXkgSGFycmlzIDxnaGFycmlzQHNvbmljLm5ldD4gPGdoYXJyaXNAc3RldmUubG9jYWw+CitHdXkgSGFycmlzIDxnaGFycmlzQHNvbmljLm5ldD4gPGdoYXJyaXNAdWJ1OS0xMC4obm9uZSk+CitHdXkgSGFycmlzIDxnaGFycmlzQHNvbmljLm5ldD4gPGd1eUBhbHVtLm1pdC5lZHU+CitHdXkgSGFycmlzIDxnaGFycmlzQHNvbmljLm5ldD4gR3V5IChDb3JlIE9TKSBIYXJyaXMgPGdoYXJyaXNAZ2hhcnJpcy5hcHBsZS5jb20+CitHdXkgSGFycmlzIDxnaGFycmlzQHNvbmljLm5ldD4gZ3V5IDxndXk+CitIYW5uZXMgR3JlZGxlciA8aGFubmVzQGdyZWRsZXIuYXQ+IGhhbm5lcyA8aGFubmVzPgorSGFubmVzIEdyZWRsZXIgPGhhbm5lc0BncmVkbGVyLmF0PiA8aGFubmVzQGp1bmlwZXIubmV0PgorSnVuLWljaGlybyBpdG9qdW4gSGFnaW5vIDxpdG9qdW5AaWlqbGFiLm5ldD4gaXRvanVuIDxpdG9qdW4+CitLZW4gSG9ybnN0ZWluIDxrZW5oQGNtZi5ucmwubmF2eS5taWw+IGtlbmggPGtlbmg+CitMb3JpcyBEZWdpb2FubmkgPGxvcmlzQG5ldGdyb3VwLXNlcnYucG9saXRvLml0PiBsb3JpcyA8bG9yaXM+CitNaWNoYWVsIFJpY2hhcmRzb24gPG1jckBzYW5kZWxtYW4uY2E+IDxtY3JAY3JlZGlsLm9yZz4KK01pY2hhZWwgUmljaGFyZHNvbiA8bWNyQHNhbmRlbG1hbi5jYT4gPG1jckBmaW5lcG9pbnQuY29tPgorTWljaGFlbCBSaWNoYXJkc29uIDxtY3JAc2FuZGVsbWFuLmNhPiBtY3IgPG1jcj4KK01pY2hhZWwgUmljaGFyZHNvbiA8bWNyQHNhbmRlbG1hbi5jYT4gPG1jckBzYW5kZWxtYW4ub3R0YXdhLm9uLmNhPgorTWljaGFlbCBSaWNoYXJkc29uIDxtY3JAc2FuZGVsbWFuLmNhPiA8bWNyQHRjcGR1bXAub3JnPgorU3RlcGhlbiBEb25uZWxseSA8c3RlcGhlbi5kb25uZWxseUBlbXVsZXguY29tPiA8c2ZkQG56aG1sd2tzMDAzMy4obm9uZSk+CitTdGVwaGVuIERvbm5lbGx5IDxzdGVwaGVuLmRvbm5lbGx5QGVtdWxleC5jb20+IHNmZCA8c3RlcGhlbi5kb25uZWxseUBlbXVsZXguY29tPgorU3RlcGhlbiBEb25uZWxseSA8c3RlcGhlbi5kb25uZWxseUBlbXVsZXguY29tPiBzZmQgPHN0ZXBoZW4uZG9ubmVsbHlAZW5kYWNlLmNvbT4KK1N0ZXBoZW4gRG9ubmVsbHkgPHN0ZXBoZW4uZG9ubmVsbHlAZW11bGV4LmNvbT4gPHN0ZXBoZW4uZG9ubmVsbHlAZW5kYWNlLmNvbT4KK1RvcnN0ZW4gTGFuZHNjaG9mZiA8dC5sYW5kc2Nob2ZmQGdteC5uZXQ+IHRvcnN0ZW4gPHRvcnN0ZW4+CmRpZmYgLS1naXQgYS8udHJhdmlzLWNvdmVyaXR5LXNjYW4tYnVpbGQuc2ggYi8udHJhdmlzLWNvdmVyaXR5LXNjYW4tYnVpbGQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkyZGFjMQotLS0gL2Rldi9udWxsCisrKyBiLy50cmF2aXMtY292ZXJpdHktc2Nhbi1idWlsZC5zaApAQCAtMCwwICsxLDExNiBAQAorIyEvYmluL3NoCisKK3NldCAtZQorCisjIEVudmlyb25tZW50IGNoZWNrCitlY2hvIC1lICJcMDMzWzMzOzFtTm90ZTogQ09WRVJJVFlfU0NBTl9QUk9KRUNUX05BTUUgYW5kIENPVkVSSVRZX1NDQU5fVE9LRU4gYXJlIGF2YWlsYWJsZSBvbiBQcm9qZWN0IFNldHRpbmdzIHBhZ2Ugb24gc2Nhbi5jb3Zlcml0eS5jb21cMDMzWzBtIgorWyAteiAiJENPVkVSSVRZX1NDQU5fUFJPSkVDVF9OQU1FIiBdICYmIGVjaG8gIkVSUk9SOiBDT1ZFUklUWV9TQ0FOX1BST0pFQ1RfTkFNRSBtdXN0IGJlIHNldCIgJiYgZXhpdCAxCisjWyAteiAiJENPVkVSSVRZX1NDQU5fTk9USUZJQ0FUSU9OX0VNQUlMIiBdICYmIGVjaG8gIkVSUk9SOiBDT1ZFUklUWV9TQ0FOX05PVElGSUNBVElPTl9FTUFJTCBtdXN0IGJlIHNldCIgJiYgZXhpdCAxCitbIC16ICIkQ09WRVJJVFlfU0NBTl9CUkFOQ0hfUEFUVEVSTiIgXSAmJiBlY2hvICJFUlJPUjogQ09WRVJJVFlfU0NBTl9CUkFOQ0hfUEFUVEVSTiBtdXN0IGJlIHNldCIgJiYgZXhpdCAxCitbIC16ICIkQ09WRVJJVFlfU0NBTl9CVUlMRF9DT01NQU5EIiBdICYmIGVjaG8gIkVSUk9SOiBDT1ZFUklUWV9TQ0FOX0JVSUxEX0NPTU1BTkQgbXVzdCBiZSBzZXQiICYmIGV4aXQgMQorWyAteiAiJENPVkVSSVRZX1NDQU5fVE9LRU4iIF0gJiYgZWNobyAiRVJST1I6IENPVkVSSVRZX1NDQU5fVE9LRU4gbXVzdCBiZSBzZXQiICYmIGV4aXQgMQorCitQTEFURk9STT1gdW5hbWVgCitUT09MX0FSQ0hJVkU9L3RtcC9jb3YtYW5hbHlzaXMtJHtQTEFURk9STX0udGd6CitUT09MX1VSTD1odHRwczovL3NjYW4uY292ZXJpdHkuY29tL2Rvd25sb2FkL2N4eC8ke1BMQVRGT1JNfQorVE9PTF9CQVNFPS90bXAvY292ZXJpdHktc2Nhbi1hbmFseXNpcworVVBMT0FEX1VSTD0iaHR0cHM6Ly9zY2FuLmNvdmVyaXR5LmNvbS9idWlsZHMiCitTQ0FOX1VSTD0iaHR0cHM6Ly9zY2FuLmNvdmVyaXR5LmNvbSIKKworIyBWZXJpZnkgQ292ZXJpdHkgU2NhbiBydW4gY29uZGl0aW9uCitDT1ZFUklUWV9TQ0FOX1JVTl9DT05ESVRJT049JHtjb3Zlcml0eV9zY2FuX3J1bl9jb25kaXRpb246LXRydWV9CitlY2hvIC1uZSAiXDAzM1szMzsxbVRlc3RpbmcgJyR7Q09WRVJJVFlfU0NBTl9SVU5fQ09ORElUSU9OfScgY29uZGl0aW9uLi4uICIKK2lmIGV2YWwgWyAkQ09WRVJJVFlfU0NBTl9SVU5fQ09ORElUSU9OIF07IHRoZW4KKyAgZWNobyAtZSAiVHJ1ZS5cMDMzWzBtIgorZWxzZQorICBlY2hvIC1lICJGYWxzZS4gRXhpdC5cMDMzWzBtIgorICBleGl0IDAKK2ZpCisKKyMgRG8gbm90IHJ1biBvbiBwdWxsIHJlcXVlc3RzCitpZiBbICIke1RSQVZJU19QVUxMX1JFUVVFU1R9IiA9ICJ0cnVlIiBdOyB0aGVuCisgIGVjaG8gLWUgIlwwMzNbMzM7MW1JTkZPOiBTa2lwcGluZyBDb3Zlcml0eSBBbmFseXNpczogYnJhbmNoIGlzIGEgcHVsbCByZXF1ZXN0LlwwMzNbMG0iCisgIGV4aXQgMAorZmkKKworIyBWZXJpZnkgdGhpcyBicmFuY2ggc2hvdWxkIHJ1bgorSVNfQ09WRVJJVFlfU0NBTl9CUkFOQ0g9YHJ1YnkgLWUgInB1dHMgJyR7VFJBVklTX0JSQU5DSH0nID1+IC9cXEEkQ09WRVJJVFlfU0NBTl9CUkFOQ0hfUEFUVEVSTlxcei8gPyAxIDogMCJgCitpZiBbICIkSVNfQ09WRVJJVFlfU0NBTl9CUkFOQ0giID0gIjEiIF07IHRoZW4KKyAgZWNobyAtZSAiXDAzM1szMzsxbUNvdmVyaXR5IFNjYW4gY29uZmlndXJlZCB0byBydW4gb24gYnJhbmNoICR7VFJBVklTX0JSQU5DSH1cMDMzWzBtIgorZWxzZQorICBlY2hvIC1lICJcMDMzWzMzOzFtQ292ZXJpdHkgU2NhbiBOT1QgY29uZmlndXJlZCB0byBydW4gb24gYnJhbmNoICR7VFJBVklTX0JSQU5DSH1cMDMzWzBtIgorICBleGl0IDEKK2ZpCisKKyMgVmVyaWZ5IHVwbG9hZCBpcyBwZXJtaXR0ZWQKK0FVVEhfUkVTPWBjdXJsIC1zIC0tZm9ybSBwcm9qZWN0PSIkQ09WRVJJVFlfU0NBTl9QUk9KRUNUX05BTUUiIC0tZm9ybSB0b2tlbj0iJENPVkVSSVRZX1NDQU5fVE9LRU4iICRTQ0FOX1VSTC9hcGkvdXBsb2FkX3Blcm1pdHRlZGAKK2lmIFsgIiRBVVRIX1JFUyIgPSAiQWNjZXNzIGRlbmllZCIgXTsgdGhlbgorICBlY2hvIC1lICJcMDMzWzMzOzFtQ292ZXJpdHkgU2NhbiBBUEkgYWNjZXNzIGRlbmllZC4gQ2hlY2sgQ09WRVJJVFlfU0NBTl9QUk9KRUNUX05BTUUgYW5kIENPVkVSSVRZX1NDQU5fVE9LRU4uXDAzM1swbSIKKyAgZXhpdCAxCitlbHNlCisgIEFVVEg9YGVjaG8gJEFVVEhfUkVTIHwgcnVieSAtZSAicmVxdWlyZSAncnVieWdlbXMnOyByZXF1aXJlICdqc29uJzsgcHV0cyBKU09OW1NURElOLnJlYWRdWyd1cGxvYWRfcGVybWl0dGVkJ10iYAorICBpZiBbICIkQVVUSCIgPSAidHJ1ZSIgXTsgdGhlbgorICAgIGVjaG8gLWUgIlwwMzNbMzM7MW1Db3Zlcml0eSBTY2FuIGFuYWx5c2lzIGF1dGhvcml6ZWQgcGVyIHF1b3RhLlwwMzNbMG0iCisgIGVsc2UKKyAgICBXSEVOPWBlY2hvICRBVVRIX1JFUyB8IHJ1YnkgLWUgInJlcXVpcmUgJ3J1YnlnZW1zJzsgcmVxdWlyZSAnanNvbic7IHB1dHMgSlNPTltTVERJTi5yZWFkXVsnbmV4dF91cGxvYWRfcGVybWl0dGVkX2F0J10iYAorICAgIGVjaG8gLWUgIlwwMzNbMzM7MW1Db3Zlcml0eSBTY2FuIGFuYWx5c2lzIE5PVCBhdXRob3JpemVkIHVudGlsICRXSEVOLlwwMzNbMG0iCisgICAgZXhpdCAwCisgIGZpCitmaQorCitpZiBbICEgLWQgJFRPT0xfQkFTRSBdOyB0aGVuCisgICMgRG93bmxvYWQgQ292ZXJpdHkgU2NhbiBBbmFseXNpcyBUb29sCisgIGlmIFsgISAtZSAkVE9PTF9BUkNISVZFIF07IHRoZW4KKyAgICBlY2hvIC1lICJcMDMzWzMzOzFtRG93bmxvYWRpbmcgQ292ZXJpdHkgU2NhbiBBbmFseXNpcyBUb29sLi4uXDAzM1swbSIKKyAgICB3Z2V0IC1udiAtTyAkVE9PTF9BUkNISVZFICRUT09MX1VSTCAtLXBvc3QtZGF0YSAicHJvamVjdD0kQ09WRVJJVFlfU0NBTl9QUk9KRUNUX05BTUUmdG9rZW49JENPVkVSSVRZX1NDQU5fVE9LRU4iCisgIGZpCisKKyAgIyBFeHRyYWN0IENvdmVyaXR5IFNjYW4gQW5hbHlzaXMgVG9vbAorICBlY2hvIC1lICJcMDMzWzMzOzFtRXh0cmFjdGluZyBDb3Zlcml0eSBTY2FuIEFuYWx5c2lzIFRvb2wuLi5cMDMzWzBtIgorICBta2RpciAtcCAkVE9PTF9CQVNFCisgIHB1c2hkICRUT09MX0JBU0UKKyAgdGFyIHh6ZiAkVE9PTF9BUkNISVZFCisgIHBvcGQKK2ZpCisKK1RPT0xfRElSPWBmaW5kICRUT09MX0JBU0UgLXR5cGUgZCAtbmFtZSAnY292LWFuYWx5c2lzKidgCitleHBvcnQgUEFUSD0kVE9PTF9ESVIvYmluOiRQQVRICisKKyMgQnVpbGQKK2VjaG8gLWUgIlwwMzNbMzM7MW1SdW5uaW5nIENvdmVyaXR5IFNjYW4gQW5hbHlzaXMgVG9vbC4uLlwwMzNbMG0iCitDT1ZfQlVJTERfT1BUSU9OUz0iIgorI0NPVl9CVUlMRF9PUFRJT05TPSItLXJldHVybi1lbWl0LWZhaWx1cmVzIDggLS1wYXJzZS1lcnJvci10aHJlc2hvbGQgODUiCitSRVNVTFRTX0RJUj0iY292LWludCIKK2V2YWwgIiR7Q09WRVJJVFlfU0NBTl9CVUlMRF9DT01NQU5EX1BSRVBFTkR9IgorQ09WRVJJVFlfVU5TVVBQT1JURUQ9MSBjb3YtYnVpbGQgLS1kaXIgJFJFU1VMVFNfRElSICRDT1ZfQlVJTERfT1BUSU9OUyAkQ09WRVJJVFlfU0NBTl9CVUlMRF9DT01NQU5ECitjb3YtaW1wb3J0LXNjbSAtLWRpciAkUkVTVUxUU19ESVIgLS1zY20gZ2l0IC0tbG9nICRSRVNVTFRTX0RJUi9zY21fbG9nLnR4dCAyPiYxCisKKyMgVXBsb2FkIHJlc3VsdHMKK2VjaG8gLWUgIlwwMzNbMzM7MW1UYXJyaW5nIENvdmVyaXR5IFNjYW4gQW5hbHlzaXMgcmVzdWx0cy4uLlwwMzNbMG0iCitSRVNVTFRTX0FSQ0hJVkU9YW5hbHlzaXMtcmVzdWx0cy50Z3oKK3RhciBjemYgJFJFU1VMVFNfQVJDSElWRSAkUkVTVUxUU19ESVIKK1NIQT1gZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQURgCitWRVJTSU9OX1NIQT0kKGNhdCBWRVJTSU9OKSMkU0hBCisKKyMgVmVyaWZ5IENvdmVyaXR5IFNjYW4gc2NyaXB0IHRlc3QgbW9kZQoraWYgWyAiJGNvdmVyaXR5X3NjYW5fc2NyaXB0X3Rlc3RfbW9kZSIgPSB0cnVlIF07IHRoZW4KKyAgZWNobyAtZSAiXDAzM1szMzsxbUNvdmVyaXR5IFNjYW4gY29uZmlndXJlZCBpbiBzY3JpcHQgdGVzdCBtb2RlLiBFeGl0LlwwMzNbMG0iCisgIGV4aXQgMAorZmkKKworZWNobyAtZSAiXDAzM1szMzsxbVVwbG9hZGluZyBDb3Zlcml0eSBTY2FuIEFuYWx5c2lzIHJlc3VsdHMuLi5cMDMzWzBtIgorcmVzcG9uc2U9JChjdXJsIFwKKyAgLS1zaWxlbnQgLS13cml0ZS1vdXQgIlxuJXtodHRwX2NvZGV9XG4iIFwKKyAgLS1mb3JtIHByb2plY3Q9JENPVkVSSVRZX1NDQU5fUFJPSkVDVF9OQU1FIFwKKyAgLS1mb3JtIHRva2VuPSRDT1ZFUklUWV9TQ0FOX1RPS0VOIFwKKyAgLS1mb3JtIGVtYWlsPWJsYWNraG9sZUBibGFja2hvbGUuaW8gXAorICAtLWZvcm0gZmlsZT1AJFJFU1VMVFNfQVJDSElWRSBcCisgIC0tZm9ybSB2ZXJzaW9uPSRTSEEgXAorICAtLWZvcm0gZGVzY3JpcHRpb249IiRWRVJTSU9OX1NIQSIgXAorICAkVVBMT0FEX1VSTCkKK3N0YXR1c19jb2RlPSQoZWNobyAiJHJlc3BvbnNlIiB8IHNlZCAtbiAnJHAnKQoraWYgWyAiJHN0YXR1c19jb2RlIiAhPSAiMjAxIiBdOyB0aGVuCisgIFRFWFQ9JChlY2hvICIkcmVzcG9uc2UiIHwgc2VkICckZCcpCisgIGVjaG8gLWUgIlwwMzNbMzM7MW1Db3Zlcml0eSBTY2FuIHVwbG9hZCBmYWlsZWQ6ICRURVhULlwwMzNbMG0iCisgIGV4aXQgMQorZmkKZGlmZiAtLWdpdCBhLy50cmF2aXMueW1sIGIvLnRyYXZpcy55bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg0MGE2NgotLS0gL2Rldi9udWxsCisrKyBiLy50cmF2aXMueW1sCkBAIC0wLDAgKzEsMTM1IEBACitsYW5ndWFnZTogYworCisjCisjIFRyeSBidWlsZGluZyBvbiB0aGVzZSA0IGFyY2hpdGVjdHVyZXM7IGFsbCBhcmUgNjQtYml0LCBhbmQgYWxsIGJ1dAorIyAiczM5MHgiLCBhL2svYSB6L0FyY2hpdGVjdHVyZSwgYXJlIGxpdHRsZS1lbmRpYW4uCisjCithcmNoOgorICAtIGFtZDY0CisgIC0gcHBjNjRsZQorICAtIHMzOTB4CisgIC0gYXJtNjQKKworb3M6CisgIC0gbGludXgKKyAgLSBvc3gKKworZGlzdDogYmlvbmljCisKK2NvbXBpbGVyOgorICAtIGdjYworICAtIGNsYW5nCisKKyMKKyMgTGludXggcnVucyBvbiBhbGwgb2YgdGhlIGFyY2hpdGVjdHVyZXMgbGlzdGVkIGFib3ZlOyBtYWNPUyBjdXJyZW50bHkKKyMgcnVucyBvbmx5IG9uIDY0LWJpdCB4ODYsIGFsdGhvdWdoIHRoZSBTcGFjZXNoaXBvbG9naXN0cyBhcmUgYWxsIGluIGEKKyMgdGl6enkgYWJvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIEFybS1iYXNlZCBNYWNzLiAgU3VwcHJlc3MgdGhlIG1hY09TCisjIGJ1aWxkcyB0aGF0IGRvbid0IHdvcmsuCisjCisjIEluIGFkZGl0aW9uLCB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIG1hY09TLCBBcHBsZSBzaGlwcyBhICJnY2MiIHRoYXQncworIyBqdXN0IGFub3RoZXIgZnJvbnQgZW5kIHRvIENsYW5nLCBwcmVzdW1hYmx5IGZvciBiYWNrd2FyZHMKKyMgY29tcGF0aWJpbGl0eSB3aXRoIGJ1aWxkIHNjcmlwdHMgZXRjLiB0aGF0IGV4cGVjdCB0aGUgY29tcGlsZXIgdG8gYmUKKyMgImdjYyIsIHNvIGRvbid0IGJvdGhlciBkb2luZyAiZ2NjIiBidWlsZHMgb24gbWFjT1MuCisjCitqb2JzOgorICBleGNsdWRlOgorICAtIGFyY2g6IHBwYzY0bGUKKyAgICBvczogb3N4CisgIC0gYXJjaDogczM5MHgKKyAgICBvczogb3N4CisgIC0gYXJjaDogYXJtNjQKKyAgICBvczogb3N4CisgIC0gY29tcGlsZXI6IGdjYworICAgIG9zOiBvc3gKKworY2FjaGU6IGNjYWNoZQorCitlbnY6CisgIGdsb2JhbDoKKyAgICAjIGVuY3J5cHRlZCBDT1ZFUklUWV9TQ0FOX1RPS0VOIGZyb20KKyAgICAjIGh0dHBzOi8vc2Nhbi5jb3Zlcml0eS5jb20vcHJvamVjdHMvPHByb2plY3RfaWQ+L3N1Ym1pdF9idWlsZD90YWI9dHJhdmlzX2NpCisgICAgLSBzZWN1cmU6ICJTd05jZWsrSTRsTVZjbmI1RUdHbU5tNmxqV042Qy9tblh6QnI4MmE1ckVRTkt4QW9KZmR2dlBwS0lwMGlFZmc1ajBQdFlsY1JIb0lEeVZaLzZRTS9XRXcwd3JpbzlaMGNpbzloa09TNmtWOGcyUW91WGZub050S0o1bk5zbzdVRDJHUEo5K00wR0lSMUdaMEVkdnhyODFzSGxOQWtwVkt5ZFlHQndDSU1HeWc9IgorICAgICMgQ292ZXJpdHkgcnVuIGNvbmRpdGlvbiAoYXZvaWQgbWF0cml4IG11bHRpcGxlIHJ1bnMpLCBuZWVkIGN1c3RvbWl6ZWQKKyAgICAjIGJ1aWxkIHNjcmlwdC4gTmVlZCBhbiB1cGRhdGUgaWYgbmV3IG1hdHJpeCBjYXNlcy4KKyAgICAtIGNvdmVyaXR5X3NjYW5fcnVuX2NvbmRpdGlvbj0nIiRUUkFWSVNfQ1BVX0FSQ0giID0gYW1kNjQgLWEgIiRUUkFWSVNfT1NfTkFNRSIgPSBsaW51eCAtYSAiJENDIiA9IGdjYyAtYSAiJFJFTU9URSIgPSBlbmFibGUgLWEgIiRDTUFLRSIgPSBubycKKyAgICAjIENvdmVyaXR5IHNjcmlwdCB0ZXN0IG1vZGUgKGlmIHRydWUgbm8gdXBsb2FkaW5nLCBhdm9pZCByZWFjaGluZyB0aGUgcXVvdGEpCisgICAgIyB1c3VhbCBwcm9jZXNzaW5nOiBmYWxzZS4KKyAgICAtIGNvdmVyaXR5X3NjYW5fc2NyaXB0X3Rlc3RfbW9kZT1mYWxzZQorICAgIC0gTUFLRUZMQUdTPSctaiAyJyAjIFRyYXZpcyBDSSBWTXMgY29tZSB3aXRoIDIgY29yZXMKKyAgbWF0cml4OgorICAgIC0gUkVNT1RFPWRpc2FibGUgQ01BS0U9bm8KKyAgICAtIEVOQUJMRV9SRU1PVEU9IiIgQ01BS0U9eWVzCisgICAgLSBSRU1PVEU9ZW5hYmxlIENNQUtFPW5vCisgICAgLSBFTkFCTEVfUkVNT1RFPSItREVOQUJMRV9SRU1PVEU9T04iIENNQUtFPXllcworCittYXRyaXg6CisgIGZhc3RfZmluaXNoOiB0cnVlCisKK2FkZG9uczoKKyAgY292ZXJpdHlfc2NhbjoKKyAgICAjIGN1c3RvbWl6ZWQgYnVpbGQgc2NyaXB0IFVSTAorICAgICMgVFJBVklTX1JFUE9fU0xVRzogb3duZXJfbmFtZS9yZXBvX25hbWUgb2YgcmVwb3NpdG9yeSBjdXJyZW50bHkgYmVpbmcgYnVpbHQKKyAgICAjIFRSQVZJU19CUkFOQ0g6IG5hbWUgb2YgdGhlIGJyYW5jaCBjdXJyZW50bHkgYmVpbmcgYnVpbHQKKyAgICBidWlsZF9zY3JpcHRfdXJsOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vJFRSQVZJU19SRVBPX1NMVUcvJFRSQVZJU19CUkFOQ0gvLnRyYXZpcy1jb3Zlcml0eS1zY2FuLWJ1aWxkLnNoCisgICAgIyBwcm9qZWN0IG1ldGFkYXRhCisgICAgcHJvamVjdDoKKyAgICAgIG5hbWU6ICRUUkFWSVNfUkVQT19TTFVHCisgICAgIyBXaGVyZSBlbWFpbCBub3RpZmljYXRpb24gb2YgYnVpbGQgYW5hbHlzaXMgcmVzdWx0cyB3aWxsIGJlIHNlbnQKKyAgICAjbm90aWZpY2F0aW9uX2VtYWlsOiB0Y3BkdW1wLXdvcmtlcnNAbGlzdHMudGNwZHVtcC5vcmcKKyAgICAjIENvbW1hbmRzIHRvIHByZXBhcmUgZm9yIGJ1aWxkX2NvbW1hbmQKKyAgICBidWlsZF9jb21tYW5kX3ByZXBlbmQ6IC4vY29uZmlndXJlIC0tZW5hYmxlLXJlbW90ZQorICAgICMgVGhpcyBjb21tYW5kIHdpbGwgYmUgYWRkZWQgYXMgYW4gYXJndW1lbnQgdG8gImNvdi1idWlsZCIgdG8gY29tcGlsZQorICAgICMgdGhlIHByb2plY3QgZm9yIGFuYWx5c2lzCisgICAgYnVpbGRfY29tbWFuZDogbWFrZQorICAgICMgUGF0dGVybiB0byBtYXRjaCBzZWxlY3RpbmcgYnJhbmNoZXMgdGhhdCB3aWxsIHJ1biBhbmFseXNpcworICAgIGJyYW5jaF9wYXR0ZXJuOiBjb3Zlcml0eV9zY2FuCisgIGFwdDoKKyAgICBwYWNrYWdlczoKKyAgICAgIC0gbGliZGJ1cy0xLWRldgorICAgICAgLSBsaWJibHVldG9vdGgtZGV2CisgICAgICAtIGxpYm5sLWdlbmwtMy1kZXYKKyAgICAgIC0gbGliaWJ2ZXJicy1kZXYKKworZ2l0OgorICBxdWlldDogdHJ1ZQorICBkZXB0aDogMworCitiZWZvcmVfaW5zdGFsbDoKKyAgLSB1bmFtZSAtYQorICAtIGRhdGUKKyAgLSBpZiBbICIkVFJBVklTX09TX05BTUUiID0gbGludXggXTsgdGhlbiBhcHQgbGlzdCAtLWluc3RhbGxlZCAnbGliKi1kZXYnOyBmaQorCitpbnN0YWxsOgorCitiZWZvcmVfc2NyaXB0OgorCitzY3JpcHQ6CisgIC0gaWYgWyAiJENPVkVSSVRZX1NDQU5fQlJBTkNIIiA9IDEgXTsgdGhlbiBlY2hvICJDb3Zlcml0eSBidWlsZCAtIG5vdGhpbmcgbW9yZSB0byBkbyI7IGV4aXQgMDsgZmkKKyAgLSB0b3VjaCAuZGV2ZWwgY29uZmlndXJlCisgIC0gaWYgWyAiJENNQUtFIiA9IG5vIF07IHRoZW4gZWNobyAnJCAuL2NvbmZpZ3VyZSBbLi4uXScgJiYgZWNobyB0cmF2aXNfZm9sZDpzdGFydDpzY3JpcHQuY29uZmlndXJlOyBmaQorICAtIGlmIFsgIiRDTUFLRSIgPSBubyBdOyB0aGVuIC4vY29uZmlndXJlIC0tcHJlZml4PS90bXAgIi0tJHtSRU1PVEV9LXJlbW90ZSI7IGZpCisgIC0gaWYgWyAiJENNQUtFIiA9IG5vIF07IHRoZW4gZWNobyAtbiB0cmF2aXNfZm9sZDplbmQ6c2NyaXB0LmNvbmZpZ3VyZTsgZmkKKyAgLSBpZiBbICIkQ01BS0UiID0geWVzIF07IHRoZW4gbWtkaXIgYnVpbGQ7IGZpCisgIC0gaWYgWyAiJENNQUtFIiA9IHllcyBdOyB0aGVuIGNkIGJ1aWxkOyBmaQorICAtIGlmIFsgIiRDTUFLRSIgPSB5ZXMgXTsgdGhlbiBlY2hvIHRyYXZpc19mb2xkOnN0YXJ0OnNjcmlwdC5jbWFrZTsgZmkKKyAgLSBpZiBbICIkQ01BS0UiID0geWVzIF07IHRoZW4gY21ha2UgLURDTUFLRV9JTlNUQUxMX1BSRUZJWD0vdG1wICRFTkFCTEVfUkVNT1RFIC4uOyBmaQorICAtIGlmIFsgIiRDTUFLRSIgPSB5ZXMgXTsgdGhlbiBlY2hvIC1uIHRyYXZpc19mb2xkOmVuZDpzY3JpcHQuY21ha2U7IGZpCisgIC0gbWFrZSAtcworICAtIG1ha2UgLXMgdGVzdHByb2dzCisgIC0gZWNobyAnJCBtYWtlIGluc3RhbGwgWy4uLl0nICYmIGVjaG8gdHJhdmlzX2ZvbGQ6c3RhcnQ6c2NyaXB0Lm1ha2VfaW5zdGFsbAorICAtIFBBVEg9JFBBVEggbWFrZSBpbnN0YWxsCisgIC0gZWNobyAtbiB0cmF2aXNfZm9sZDplbmQ6c2NyaXB0Lm1ha2VfaW5zdGFsbAorICAtIGlmIFsgIiRDTUFLRSIgPSBubyBdOyB0aGVuIHRlc3Rwcm9ncy9maW5kYWxsZGV2c3Rlc3Q7IGZpCisgIC0gaWYgWyAiJENNQUtFIiA9IHllcyBdOyB0aGVuIHJ1bi9maW5kYWxsZGV2c3Rlc3Q7IGZpCisgIC0gaWYgWyAiJENNQUtFIiA9IG5vIF07IHRoZW4gbWFrZSByZWxlYXNldGFyOyBmaQorICAtIGVjaG8gJyQgY2F0IE1ha2VmaWxlIFsuLi5dJzsgZWNobyB0cmF2aXNfZm9sZDpzdGFydDpzY3JpcHQuY2F0X21ha2VmaWxlCisgIC0gaWYgWyAiJENNQUtFIiA9IG5vIF07IHRoZW4gY2F0IE1ha2VmaWxlIHwgc2VkIC1uICcxLC9ETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBta2RlcCB1c2VzIGl0L3AnOyBmaQorICAtIGlmIFsgIiRDTUFLRSIgPSB5ZXMgXTsgdGhlbiBjYXQgTWFrZWZpbGU7IGZpCisgIC0gZWNobyAtbiB0cmF2aXNfZm9sZDplbmQ6c2NyaXB0LmNhdF9tYWtlZmlsZQorICAtIGVjaG8gJyQgY2F0IGNvbmZpZy5oJzsgZWNobyB0cmF2aXNfZm9sZDpzdGFydDpzY3JpcHQuY2F0X2NvbmZpZ19oCisgIC0gY2F0IGNvbmZpZy5oCisgIC0gZWNobyAtbiB0cmF2aXNfZm9sZDplbmQ6c2NyaXB0LmNhdF9jb25maWdfaAorICAtIGlmIFsgIiRDTUFLRSIgPSBubyBdOyB0aGVuIGVjaG8gJyQgY2F0IGNvbmZpZy5sb2cnOyBlY2hvIHRyYXZpc19mb2xkOnN0YXJ0OnNjcmlwdC5jYXRfY29uZmlnX2xvZzsgZmkKKyAgLSBpZiBbICIkQ01BS0UiID0gbm8gXTsgdGhlbiBjYXQgY29uZmlnLmxvZzsgZmkKKyAgLSBpZiBbICIkQ01BS0UiID0gbm8gXTsgdGhlbiBlY2hvIC1uIHRyYXZpc19mb2xkOmVuZDpzY3JpcHQuY2F0X2NvbmZpZ19sb2c7IGZpCisgIC0gaWYgWyAiJFRSQVZJU19PU19OQU1FIiA9IG9zeCBdOyB0aGVuIHNsZWVwIDEwOyBmaQpkaWZmIC0tZ2l0IGEvQW5kcm9pZC5icCBiL0FuZHJvaWQuYnAKaW5kZXggZWIwZWExMC4uZTNhN2ExYiAxMDA2NDQKLS0tIGEvQW5kcm9pZC5icAorKysgYi9BbmRyb2lkLmJwCkBAIC0xLDE2ICsxLDIxIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KK3BhY2thZ2UgeworICAgIGRlZmF1bHRfYXBwbGljYWJsZV9saWNlbnNlczogWyJleHRlcm5hbF9saWJwY2FwX2xpY2Vuc2UiXSwKK30KKworbGljZW5zZSB7CisgICAgbmFtZTogImV4dGVybmFsX2xpYnBjYXBfbGljZW5zZSIsCisgICAgdmlzaWJpbGl0eTogWyI6X19zdWJwYWNrYWdlc19fIl0sCisgICAgbGljZW5zZV9raW5kczogWworICAgICAgICAiU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMCIsCisgICAgICAgICJTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1CU0QiLAorICAgICAgICAiU1BEWC1saWNlbnNlLWlkZW50aWZpZXItSVNDIiwKKyAgICAgICAgIlNQRFgtbGljZW5zZS1pZGVudGlmaWVyLU1JVCIsCisgICAgXSwKKyAgICBsaWNlbnNlX3RleHQ6IFsKKyAgICAgICAgIkxJQ0VOU0UiLAorICAgICAgICAiTk9USUNFIiwKKyAgICBdLAorfQogCiBjY19kZWZhdWx0cyB7CiAgICAgbmFtZTogImxpYnBjYXBfZGVmYXVsdHMiLApAQCAtNjUsNiArNzAsMTEgQEAKICAgICBdLAogCiAgICAgdGFyZ2V0OiB7CisgICAgICAgIGxpbnV4OiB7CisgICAgICAgICAgICBzcmNzOiBbCisgICAgICAgICAgICAgICAgIm1pc3Npbmcvc3RybGNweS5jIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgIH0sCiAgICAgICAgIGRhcndpbjogewogICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsCiAgICAgICAgIH0sCmRpZmYgLS1naXQgYS9DSEFOR0VTIGIvQ0hBTkdFUwppbmRleCA0NjA3ZjE0Li40ZGQzMGYxIDEwMDY0NAotLS0gYS9DSEFOR0VTCisrKyBiL0NIQU5HRVMKQEAgLTEsMyArMSwxODMgQEAKK1R1ZXNkYXksIERlY2VtYmVyIDI5LCAyMDIwCisgIFN1bW1hcnkgZm9yIDEuMTAuMCBsaWJwY2FwIHJlbGVhc2UKKyAgICBSZXF1aXJlLCBhbmQgYXNzdW1lLCBzb21lIGxldmVsIG9mIEM5OSBzdXBwb3J0IGluIHRoZSBDIGNvbXBpbGVyCisgICAgUmVxdWlyZSBWaXN1YWwgU3R1ZGlvIDIwMTUgb3IgbGF0ZXIgaWYgdXNpbmcgVmlzdWFsIFN0dWRpbworICAgIEFkZCBzdXBwb3J0IGZvciBjYXB0dXJpbmcgb24gRFBESyBkZXZpY2VzCisgICAgcnBjYXA6IHN1cHBvcnQgcnBjYXAtb3Zlci1UTFMKKyAgICBXaW5kb3dzOiByZXBvcnQgdGhlIHN5c3RlbSBlcnJvciBmb3IgUGFja2V0U2V0SHdGaWx0ZXIoKSBmYWlsdXJlcworICAgIExhYmVsIG1vc3QgQVBJcyBieSB0aGUgZmlyc3QgcmVsZWFzZSBpbiB3aGljaCB0aGV5J3JlIGF2YWlsYWJsZQorICAgIEFkZCBzdXBwb3J0IGZvciBnZXR0aW5nIGFuZCBzZXR0aW5nIHBhY2tldCB0aW1lIHN0YW1wIHR5cGVzCisgICAgICAgIHdpdGggTnBjYXAKKyAgICBBZGQgcGNhcF9pbml0KCksIGFuZCBhZGQgc3VwcG9ydCBmb3IgVVRGLTggc3RyaW5ncywgaW5jbHVkaW5nIGVycm9yCisgICAgICAgIG1lc3NhZ2VzLCBvbiBXaW5kb3dzCisgICAgSW1wcm92ZSBtYW4gcGFnZXMsIGluY2x1ZGluZyBhZGRpbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3RlcworICAgIEZpeCBjb25maWd1cmUgc2NyaXB0IGlzc3VlcywgaW5jbHVkaW5nIHdpdGggbGlibmwgb24gTGludXgKKyAgICBGaXggQ01ha2UgaXNzdWVzCisgICAgU3F1ZWxjaCBjb21wbGFpbnRzIGZyb20gQmlzb24gYWJvdXQgIiVkZWZpbmUgYXBpLnB1cmUiIGJlaW5nCisgICAgICAgIGRlcHJlY2F0ZWQKKyAgICBGaXggc29tZSBtZW1vcnkgbGVha3MsIGluY2x1ZGluZyBpbiBwY2FwX2NvbXBpbGUoKQorICAgIExpbnV4OiBoYW5kbGUgc3lzdGVtcyB3aXRob3V0IEFGX0lORVQgb3IgQUZfVU5JWCBzb2NrZXQgc3VwcG9ydAorICAgIENhdGNoIGludmFsaWQgSVB2NCBhZGRyZXNzZXMgaW4gZmlsdGVycworICAgIEFJWDogZml4IGxvYWRpbmcgb2YgQlBGIGtlcm5lbCBleHRlbnNpb24KKyAgICBycGNhcGQ6IGZpeCBjb3JlIGR1bXBzIHdpdGggaW52YWxpZCBjb25maWd1cmF0aW9uIGZpbGUKKyAgICBTaG93IHNwZWNpYWwgTGludXggQlBGIG9mZnNldHMgc3ltYm9saWNhbGx5IGluIGJwZl9pbWFnZSgpIGFuZAorICAgICAgICBicGZfZHVtcCgpCisgICAgQWRkIHNvbWUgb3ZlcmZsb3cgY2hlY2tzIGluIHRoZSBvcHRpbWl6ZXIKKyAgICBBZGQgcGNhcF9kYXRhbGlua192YWxfdG9fZGVzY3JpcHRpb25fb3JfZGx0KCkKKyAgICBXaW5kb3dzOiBtYWtlIHRoZSBzbmFwc2hvdCBsZW5ndGggd29yayBldmVuIGlmIHBjYXBfc2V0ZmlsdGVyKCkKKyAgICAgICAgaXNuJ3QgY2FsbGVkCisgICAgTGludXg6IGdldCByaWQgb2YgV2lyZWxlc3MgRXh0ZW5zaW9ucyBmb3IgdHVybmluZyBtb25pdG9yIG1vZGUgb24KKyAgICBIYW5kbGUgdGhlIHBjYXAgcHJpdmF0ZSBkYXRhIGluIGEgZmFzaGlvbiB0aGF0IG1ha2VzIGZld2VyCisgICAgICAgYXNzdW1wdGlvbnMgYWJvdXQgbWVtb3J5IGxheW91dHMgKG1pZ2h0IGZpeCBHaXRIdWIgaXNzdWUgIzk0MAorICAgICAgIG9uIEFSTSkKKyAgICBGaXggInVua25vd24gZXRoZXIgcHJvdG8gJ2FhcnAnIgorICAgIEZpeCBzb21lIGlzc3VlcyBmb3VuZCBieSBjcHBjaGVjay4KKyAgICBMaW51eDogcHJvcGVyIG1lbW9yeSBzeW5jIGZvciBQQUNLRVRfTU1BUCAobWF5IHByZXZlbnQgR2l0SHViIGlzc3VlCisgICAgICAgICM4OTgpCisgICAgUmVtb3ZlIHVuZG9jdW1lbnRlZCBhbmQgcmF0aGVyIG9sZCAiZXRoZXIgcHJvdG8iIHByb3RvY29scworICAgIEZpeCBzb21lIHRocmVhZCBzYWZldHkgaXNzdWVzCisgICAgV2luZG93czogYWRkIHBjYXBfaGFuZGxlKCksIGFuZCBkZXByZWNhdGUgcGNhcF9maWxlbm8oKQorICAgIEFpclBjYXA6IGFkZCBBaXJQY2FwIHN1cHBvcnQgaW4gYSBtb2R1bGUsIHJhdGhlciB0aGFuIHVzaW5nCisgICAgICAgIFdpblBjYXAvTnBjYXAncyBzdXBwb3J0IGZvciBpdAorICAgIExpbnV4OiBkcm9wIHN1cHBvcnQgZm9yIGxpYm5sIDEgYW5kIDIuCisgICAgTGludXg6IFJlcXVpcmUgUEZfUEFDS0VUIHN1cHBvcnQsIGFuZCBrZXJuZWwgMi42LjI3IG9yIGxhdGVyCisgICAgQWRkIERMVF9MSU5VWF9TTEwyCisgICAgQWRkIGEgbmV3IGZpbHRlciAiaWZpbmRleCIgZm9yIERMVF9MSU5VWF9TTEwyIGZpbGVzIGFuZCBsaXZlCisgICAgICAgIExpbnV4IGNhcHR1cmVzCisgICAgb3B0aW1pemVyOiBhZGQgYSBoYWNrIHRvIHRyeSB0byBjYXRjaCBjZXJ0YWluIG9wdGltaXplciBsb29wcworICAgICAgICAoc2hvdWxkIHByZXZlbnQgR2l0SHViIGlzc3VlICMxMTIpCisgICAgUHJvYmUgQ09ORklHVVJBVElPTiBkZXNjcmlwdG9yIG9mIGNvbm5lY3RlZCBVU0IgZGV2aWNlcworICAgIG1hY09TOiBjb3BlIHdpdGggZ2V0dGluZyBFUFdST0ZGIGZyb20gU0lPQ0dJRk1FRElBCisgICAgTGludXg6IHJldHVybiBlcnJvciBvbiBpbnRlcmZhY2UgZ29pbmcgYXdheSwgYnV0IG5vdCBpZiBpdCBqdXN0IHdlbnQKKyAgICAgICAgZG93bgorICAgIFdpbmRvd3M6IGZpeCBjb21waWxhdGlvbiBvbiBDeWd3aW4vTVNZUworICAgIExpbnV4OiBzZXQgc29ja2V0IHByb3RvY29sIG9ubHkgYWZ0ZXIgcGFja2V0IHJpbmcgY29uZmlndXJlZCwKKyAgICAgICAgcmVkdWNpbmcgYm9ndXMgcGFja2V0IGRyb3AgcmVwb3J0cworICAgIHBjYXBfZmluZGFsbGRldnMoKTogZG9uJ3Qgc29ydCBpbnRlcmZhY2VzIGJ5IHVuaXQgbnVtYmVyCisgICAgTGludXg6IGdldCBpZmRyb3Agc3RhdHMgZnJvbSBzeXNmcy4KKyAgICBGaXggdmFyaW91cyBzZWN1cml0eSBpc3N1ZXMgcmVwb3J0ZWQgYnkgQ2hhcmxlcyBTbWl0aCBhdCBUYW5naWJsZQorICAgICAgICBTZWN1cml0eQorICAgIEZpeCB2YXJpb3VzIHNlY3VyaXR5IGlzc3VlcyByZXBvcnRlZCBieSBJbmNsdWRlIFNlY3VyaXR5CisgICAgcnBjYXBkOiBvbiBVTipYLCBkb24ndCB0ZWxsIHRoZSBjbGllbnQgd2h5IGF1dGhlbnRpY2F0aW9uIGZhaWxlZAorICAgIExpbnV4OiB3aGVuIGFkanVzdGluZyBCUEYgcHJvZ3JhbXMsIGRvIG5vdCBzdWJ0cmFjdCB0aGUKKyAgICAgICAgU0xMWzJdX0hEUl9MRU4gaWYgdGhlIGxvY2F0aW9uIGlzIG5lZ2F0aXZlIChzcGVjaWFsIG1ldGFkYXRhCisgICAgICAgIG9mZnNldCkKKyAgICBQcmVzZXJ2ZSByZWZlcmVuY2VzIHRvIG1ldGFkYXRhIHdoZW4gYWRqdXN0aW5nIHRoZSBwcm9ncmFtOworICAgICAgICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RoZS10Y3BkdW1wLWdyb3VwL3RjcGR1bXAvaXNzdWVzLzQ4MCNpc3N1ZWNvbW1lbnQtNDg2ODI3Mjc4CisgICAgQWx3YXlzIHJldHVybiBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHRpbWUtc3RhbXAgdHlwZXMsIGV2ZW4gaWYgb25seQorICAgICAgICBob3N0IHRpbWUgc3RhbXBzIGFyZSBzdXBwb3J0ZWQKKyAgICBMaW51eDogd2l0aCBhIHRpbWVvdXQgb2YgemVybywgd2FpdCBpbmRlZmluaXRlbHkKKyAgICBMaW51eDogY2xlYW4gdXAgc3VwcG9ydCBmb3Igc29tZSBub24tR05VIGxpYmMgQyBsaWJyYXJpZXMKKyAgICBJbmNyZWFzZSB0aGUgbWF4aW11bSBzbmFwbGVuIGZvciBMSU5LVFlQRV9VU0JQQ0FQL0RMVF9VU0JQQ0FQCisgICAgRml4IGhhbmRsaW5nIG9mIHNvbWUgaW9jdGxzIHRoYXQgZmFpbCB3aXRoICJwZXJtaXNzaW9uIGRlbmllZCIgZXZlbgorICAgICAgICB3aGVuIHRoZSBpb2N0bCBpc24ndCBzdXBwb3J0ZWQgYXQgYWxsCisgICAgQWRkZWQgc3VwcG9ydCBmb3IgSUNNUHY2IHR5cGVzIDEtNCBhcyB0b2tlbnMgaW4gZmlsdGVycworICAgIFdpbmRvd3M6IFJlcG9ydCBQQ0FQX0VSUk9SX05PX1NVQ0hfREVWSUNFIGZvciBhIG5vbi1leGlzdGVudCBkZXZpY2UKKyAgICBXaW5kb3dzOiByZXR1cm4gYW4gYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZSBmb3IgZGV2aWNlIHJlbW92ZWQgb3IKKyAgICAgICAgZGV2aWNlIHVudXNhYmxlIGR1ZSB0byBhIHN1c3BlbmQvcmVzdW1lCisgICAgQlBGOiB0cmVhdCBib3RoIEVOWElPIChldmVyeWJvZHkgYnV0IE9wZW5CU0QpIGFuZCBFSU8gKE9wZW5CU0QpIGFzCisgICAgICAgIG1lYW5pbmcgInRoZSBpbnRlcmZhY2Ugd2FzIHJlbW92ZWQiCisgICAgQlBGOiByZXBvcnQgInRoZSBpbnRlcmZhY2UgZGlzYXBwZWFyZWQiLCBub3QgInRoZSBpbnRlcmZhY2Ugd2VudAorICAgICAgICBkb3duIiwgaWYgdGhlIGludGVyZmFjZSB3YXMgcmVtb3ZlZCBkdXJpbmcgYSBjYXB0dXJlCisgICAgTGludXgsIFdpbmRvd3M6IHJlcG9ydCBhIHdhcm5pbmcgZm9yIHVua25vd24gbGluay1sYXllciBoZWFkZXIgdHlwZXMKKyAgICBDcmVhdGUgdGhlIGZpbGUgaW4gcGNhcF9kdW1wX29wZW5fYXBwZW5kKCkgaWYgaXQgZG9lc24ndCBleGlzdAorICAgIExpbnV4LCBOUEY6IGhhdmUgcGNhcF9icmVha2xvb3AoKSBmb3JjaWJseSBicmVhayBvdXQgb2YgYSBzbGVlcGluZworICAgICAgICBjYXB0dXJlIGxvb3AKKyAgICBSZXBvcnQgdGhlIERMVCBkZXNjcmlwdGlvbiBpbiBlcnJvciBtZXNzYWdlcworICAgIExpbnV4OiBBZGQgc3VwcG9ydCBmb3IgRFNBIGRhdGEgbGluayB0eXBlcworICAgIExpbnV4IFVTQjogdXNlIHRoZSBzbmFwc2hvdCBsZW5ndGggdG8gc2V0IHRoZSBidWZmZXIgc2l6ZSwgYW5kIHNldAorICAgICAgICB0aGUgbGVuIGZpZWxkIHRvIHJlZmxlY3QgdGhlIGxlbmd0aCBpbiB0aGUgVVJCIChHaXRIdWIgaXNzdWUKKyAgICAgICAgIzgwOCkKKyAgICBycGNhcGQ6IGFsbG93IHJwY2FwZCB0byByZWJpbmQgbW9yZSByYXBpZGx5IChHaXRIdWIgaXNzdWUgIzc2NSkKKyAgICBXaW5kb3dzOiBjbGVhbiB1cCBidWlsZGluZyBETEwKKyAgICBGaXggY29tcGlsYXRpb24gb2YgcGNhcC10Yy5jCisgICAgQWRkIEhhaWt1IHBjYXAgaW1wbGVtZW50YXRpb24KKyAgICBXaW5kb3dzOiBoYW5kbGUgQ1JUIG1pc21hdGNoIGZvciBwY2FwX2R1bXBfZm9wZW4oKQorICAgIFdpbmRvd3M6IG1hcCBOZGlzTWVkaXVtV2lyZWxlc3NXYW4gdG8gRExUX1JBVworICAgIHJwY2FwOiBhZGQgc29tZSBuZXcgYXV0aGVudGljYXRpb24gbGlicGNhcCBlcnJvciBjb2RlcyBmb3IKKyAgICAgICAgc3BlY2lmaWMgZXJyb3JzCisgICAgcnBjYXA6IHJlZG8gcHJvdG9jb2wgdmVyc2lvbiBuZWdvdGlhdGlvbiB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIG9sZAorICAgICAgICBzZXJ2ZXJzIChpdCBzdGlsbCB3b3JrcyB3aXRoIHNlcnZlcnMgdXNpbmcgdGhlIG9sZCBuZWdvdGlhdGlvbiwKKyAgICAgICAgYXMgd2VsbCBhcyBzZXJ2ZXJzIG5vdCBzdXBwb3J0aW5nIG5lZ290aWF0aW9uKQorICAgIHJwY2FwOiBlcnJvciBoYW5kbGluZyBjbGVhbnVwcworICAgIHJwY2FwZDogZml4IHNvbWUgaW5ldGQgaXNzdWVzCisgICAgRG9uJ3QgYXNzdW1lIEFSTSBzdXBwb3J0cyB1bmFsaWduZWQgYWNjZXNzZXMKKyAgICBSZW1vdmUgKHVudXNlZCkgU0lUQSBzdXBwb3J0IGhlcmUuCisgICAgQ29ycmVjdGx5IGhhbmRsZSBwY2FwbmcgY2FwdHVyZXMgd2l0aCBtb3JlIHRoYW4gb25lIElEQiB3aXRoIGEKKyAgICAgICAgc25zcHNob3QgbGVuZ3RoIGdyZWF0ZXIgdGhhbiB0aGUgc3VwcG9ydGVkIG1heGltdW0KKworU3VuZGF5LCBKdWx5IDIyLCAyMDE4CisgIFN1bW1hcnkgZm9yIDEuOS4xIGxpYnBjYXAgcmVsZWFzZQorICAgIE1lbnRpb24gcGNhcF9nZXRfcmVxdWlyZWRfc2VsZWN0X3RpbWVvdXQoKSBpbiB0aGUgbWFpbiBwY2FwIG1hbiBwYWdlCisgICAgRml4IHBjYXAtdXNiLWxpbnV4LmMgYnVpbGQgb24gc3lzdGVtcyB3aXRoIG11c2wKKyAgICBGaXggYXNzb3J0ZWQgbWFuIHBhZ2UgYW5kIG90aGVyIGRvY3VtZW50YXRpb24gaXNzdWVzCisgICAgUGx1ZyBhc3NvcnRlZCBtZW1vcnkgbGVha3MKKyAgICBEb2N1bWVudGF0aW9uIGNoYW5nZXMgdG8gdXNlIGh0dHBzOgorICAgIENoYW5nZXMgdG8gaG93IHRpbWUgc3RhbXAgY2FsY3VsYXRpb25zIGFyZSBkb25lCisgICAgTG90cyBvZiB0d2Vha3MgdG8gbWFrZSBuZXdlciBjb21waWxlcnMgaGFwcGllciBhbmQgd2FybmluZy1mcmVlIGFuZAorICAgICAgICB0byBmaXggaW5zdGFuY2VzIG9mIEMgdW5kZWZpbmVkIGJlaGF2aW9yCisgICAgV2FybiBpZiBBQ19QUk9HX0NDX0M5OSBjYW4ndCBlbmFibGUgQzk5IHN1cHBvcnQKKyAgICBSZW5hbWUgcGNhcF9zZXRfcHJvdG9jb2woKSB0byAgcGNhcF9zZXRfcHJvdG9jb2xfbGludXgoKS4KKyAgICBBbGlnbiBwY2FwX3QgcHJpdmF0ZSBkYXRhIG9uIGFuIDgtYnl0ZSBib3VuZGFyeS4KKyAgICBGaXggdmFyaW91cyBlcnJvciBtZXNzYWdlcworICAgIFVzZSA2NC1iaXQgY2xlYW4gQVBJIGluIGRhZ19maW5kYWxsZGV2cygpCisgICAgRml4IGNsZWFuaW5nIHVwIGFmdGVyIHNvbWUgZXJyb3JzCisgICAgV29yayBhcm91bmQgc29tZSBldGh0b29sIGlvY3RsIGJ1Z3MgaW4gbmV3ZXIgTGludXgga2VybmVscyAoR2l0SHViCisgICAgICAgIGlzc3VlICM2ODkpCisgICAgQWRkIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHNlY3Rpb25zIHRvIHNvbWUgbWFuIHBhZ2VzIChHaXRIdWIgaXNzdWUKKyAgICAgICAgIzc0NSkKKyAgICBGaXggYXV0b3Rvb2wgY29uZmlndXJhdGlvbiBvbiBBSVggYW5kIG1hY09TCisgICAgRG9uJ3QgZXhwb3J0IGJwZl9maWx0ZXJfd2l0aF9hdXhfZGF0YSgpIG9yIHN0cnVjdCBicGZfYXV4X2RhdGE7CisgICAgICAgIHRoZXkncmUgaW50ZXJuYWwtb25seSBhbmQgc3ViamVjdCB0byBjaGFuZ2UKKyAgICBGaXggcGNhcG5nIGJsb2NrIHNpemUgY2hlY2tpbmcKKyAgICBPbiBtYWNPUywgZG9uJ3QgYnVpbGQgcnBjYXBkIG9yIHRlc3QgcHJvZ3JhbXMgYW55IGZhdHRlciB0aGFuIHRoZXkKKyAgICAgICAgbmVlZCB0byBiZQorICAgIEZpeCByZWFkaW5nIG9mIGNhcHR1cmUgc3RhdGlzdGljcyBmb3IgTGludXggVVNCCisgICAgRml4IHBhY2tldCBzaXplIHZhbHVlcyBmb3IgTGludXggVVNCIHBhY2tldHMgKEdpdEh1YiBpc3N1ZSAjODA4KQorICAgIENoZWNrIG9ubHkgVklEIGluIFZMQU4gdGVzdCBpbiBmaWx0ZXJzcyAoR2l0SHViIGlzc3VlICM0NjEpCisgICAgRml4IHBjYXBfbGlzdF9kYXRhbGlua3Mgb24gODAyLjExIGRldmljZXMgb24gbWFjT1MKKyAgICBGaXggb3ZlcmZsb3dzIHdpdGggdmVyeSBsYXJnZSBzbmFwc2hvdCBsZW5ndGggaW4gcGNhcCBmaWxlCisgICAgSW1wcm92ZSBwYXJzaW5nIG9mIHJwY2FwZCBjb25maWd1cmF0aW9uIGZpbGUgKEdpdEh1YiBpc3N1ZSAjNzY3KQorICAgIEhhbmRsZSBzeXN0ZW1zIHdpdGhvdXQgc3RybGNweSgpIG9yIHN0cmxjYXQoKSBiZXR0ZXIKKyAgICBGaXggY3Jhc2hlcyBhbmQgb3RoZXIgZXJyb3JzIHdpdGggaW52YWxpZCBmaWx0ZXIgZXhwcmVzc2lvbnMKKyAgICBGaXggdXNlIG9mIHVuaW5pdGlhbGl6ZWQgZmlsZSBkZXNjcmlwdG9yIGluIHJlbW90ZSBjYXB0dXJlCisgICAgRml4IHNvbWUgQ01ha2UgaXNzdWVzCisgICAgRml4IHNvbWUgZGl2aWRlLWJ5LXplcm8gaXNzdWVzIHdpdGggdGhlIGZpbHRlciBjb21waWxlcgorICAgIFdvcmsgYXJvdW5kIGEgR05VIGxpYmMgYnVnIGluIHBjYXBfbmFtZXRvbmV0YWRkcigpCisgICAgQWRkIHN1cHBvcnQgZm9yIERMVF9MSU5VWF9TTEwyCisgICAgRml4IGhhbmRsaW5nIG9mIHRoZSBwYWNrZXQtY291bnQgYXJndW1lbnQgZm9yIE15cmljb20gU05GIGRldmljZXMKKyAgICBGaXggLS1kaXNhYmxlLXJkbWEgaW4gY29uZmlndXJlIHNjcmlwdCAoR2l0SHViIGlzc3VlICM3ODIpCisgICAgRml4IGNvbXBpbGF0aW9uIG9mIFR1cmJvQ2FwIHN1cHBvcnQgKEdpdEh1YiBpc3N1ZSAjNzY0KQorICAgIENvbnN0aWZ5IGZpcnN0IGFyZ3VtZW50IHRvIHBjYXBfZmluZGFsbGRldnNfZXgoKQorICAgIEZpeCBhIG51bWJlciBvZiBpc3N1ZXMgd2hlbiBydW5uaW5nIHJwY2FwZCBhcyBhbiBpbmV0ZC1zdHlsZSBkYWVtb24KKyAgICBGaXggQ01ha2UgaXNzdWVzIHdpdGggRC1CdXMgbGlicmFyaWVzCisgICAgSW4gcnBjYXBkLCBjbGVhbiB1cCB0ZXJtaW5hdGlvbiBvZiBhIGNhcHR1cmUgc2Vzc2lvbgorICAgIFJlZG8gcmVtb3RlIGNhcHR1cmUgcHJvdG9jb2wgbmVnb3RpYXRpb24KKyAgICBJbiBycGNhcGQsIHJlcG9ydCB0aGUgc2FtZSBlcnJvciBmb3IgImludmFsaWQgdXNlciBuYW1lIiBhbmQKKyAgICAgICAgImludmFsaWQgcGFzc3dvcmQiLCB0byBtYWtlIGJydXRlLWZvcmNpbmcgaGFyZGVyCisgICAgRm9yIHJlbW90ZSBjYXB0dXJlcywgYWRkIGFuIGVycm9yIGNvZGUgZm9yICJ0aGUgc2VydmVyIHJlcXVpcmVzIFRMUyIKKyAgICBGaXggcGNhcF9kdW1wX2ZvcGVuKCkgb24gV2luZG93cyB0byBhdm9pZCBjbGFzaGVzIGJldHdlZW4KKyAgICAgICAge1dpbixOfVBjYXAgYW5kIGFwcGxpY2F0aW9uIEMgcnVudGltZXMKKyAgICBGaXggZXhwb3J0aW5nIG9mIGZ1bmN0aW9ucyBmcm9tIFdpbmRvd3MgRExMcyAoR2l0SHViIGlzc3VlICM4MTApCisgICAgRml4IGJ1aWxkaW5nIGFzIHBhcnQgb2YgTnBjYXAKKyAgICBBbGxvdyBycGNhcGQgdG8gcmViaW5kIG1vcmUgcmFwaWRseQorICAgIEZpeCBidWlsZGluZyBzaGFyZWQgbGlicGNhcCBsaWJyYXJ5IG9uIG1pZGlwaXggKG1pZGlwaXgub3JnKQorICAgIEZpeCBoYWNrIHRvIGRldGVjdCBVVEYtMTZMRSBhZGFwdGVyIG5hbWVzIG9uIFdpbmRvd3Mgbm90IHRvIGdvIHBhc3QKKyAgICAgICAgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCisgICAgRml4IGhhbmRsaW5nIG9mICJ3aXJlbGVzcyBXQU4iIChtb2JpbGUgcGhvbmUgbmV0d29yayBtb2RlbXMpIG9uCisgICAgICAgIFdpbmRvd3Mgd2l0aCBXaW5QY2FwL05wY2FwIChHaXRIdWIgaXNzdWUgIzgyNCkKKyAgICBIYXZlIHBjYXBfZHVtcF9vcGVuX2FwcGVuZCgpIGNyZWF0ZSB0aGUgZHVtcCBmaWxlIGlmIGl0IGRvZXNuJ3QKKyAgICAgICAgZXhpc3RzIChHaXRIdWIgaXNzdWUgIzI0NykKKyAgICBGaXggdGhlIG1heG11bSBzbmFwc2hvdCBsZW5ndGggZm9yIERMVF9VU0JQQ0FQCisgICAgVXNlIC1mUElDIHdoZW4gYnVpbGRpbmcgZm9yIDY0LWJpdCBTUEFSQyBvbiBMaW51eCAoR2l0SHViIGlzc3VlICM4MzcpCisgICAgRml4IENNYWtlIDY0LWJpdCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb24gc29tZSBMaW51eAorICAgICAgICBkaXN0cmlidXRpb25zCisgICAgQm9vc3QgdGhlIFRQQUNLRVRfVjMgdGltZW91dCB0byB0aGUgbWF4aW11bSBpZiBhIHRpbWVvdXQgb2YgMCB3YXMKKyAgICAgICAgc3BlY2lmaWVkCisgICAgRml2ZSBDVkUtMjAxOS0xNTE2MSwgQ1ZFLTIwMTktMTUxNjIsIENWRS0yMDE5LTE1MTYzLCBDVkUtMjAxOS0xNTE2NCwgQ1ZFLTIwMTktMTUxNjUKKyAgICBGaXhlcyBmb3IgQ1ZFLTIwMTgtMTYzMDEsIGVycm9ycyBpbiBwY2FwbmcgcmVhZGluZy4KKyAgICBQQ0FQTkcgcmVhZGVyIGFwcGxpZXMgc29tZSBzYW5pdHkgY2hlY2tzIGJlZm9yZSBkb2luZyBtYWxsb2MoKS4KKwogU3VuZGF5LCBKdW5lIDI0LCAyMDE4LCBieSBtY3JAc2FuZGVsbWFuLmNhCiAgIFN1bW1hcnkgZm9yIDEuOS4wIGxpYnBjYXAgcmVsZWFzZQogICAgIEFkZGVkIHRlc3Rpbmcgc3lzdGVtIHRvIGxpYnBjYXAsIGluZGVwZW5kZW50IG9mIHRjcGR1bXAKQEAgLTIxLDcgKzIwMSw3IEBACiAgICAgTWFrZSBWTEFOIGZpbHRlciBoYW5kbGUgYm90aCBtZXRhZGF0YSBhbmQgaW5saW5lIHRhZ3MKICAgICBELUJ1cyBjYXB0dXJlcyBjYW4gbm93IGJlIHVwIHRvIDEyOE1CIGluIHNpemUKICAgICBBZGRlZCBMT1JBVEFQIERMVCB2YWx1ZQotICAgIEFkZGVkIERMVF9WU09DSyBmb3IgaHR0cDovL3FlbXUtcHJvamVjdC5vcmcvRmVhdHVyZXMvVmlydGlvVnNvY2sKKyAgICBBZGRlZCBETFRfVlNPQ0sgZm9yIGh0dHBzOi8vcWVtdS1wcm9qZWN0Lm9yZy9GZWF0dXJlcy9WaXJ0aW9Wc29jawogICAgIHByb2JlX2RldmljZXMoKSBmaXhlcyBub3QgdG8gb3ZlcnJ1biBidWZmZXIgZm9yIG5hbWUgb2YgZGV2aWNlCiAgICAgQWRkIGxpbnV4LXNwZWNpZmljIHBjYXBfc2V0X3Byb3RvY29sX2xpbnV4KCkgdG8gYWxsb3cgc3BlY2lmeWluZyBhIHNwZWNpZmljIGNhcHR1cmUgcHJvdG9jb2wuCiAgICAgUkRNQSBzbmlmZmluZyBzdXBwb3J0IGZvciBwY2FwCkBAIC0yMDMsNyArMzgzLDcgQEAKIAkgICAgdGhhbiB0aGUgbWNyIHJlcG9zaXRvcnkKIAlDaGVja3MgYWRkZWQgZm9yIG1hbGxvYygpL3JlYWxsb2MoKS9ldGMuIGZhaWx1cmVzCiAJRml4ZWQgYnVpbGQgb24gU29sYXJpcyAxMQotCVN1cHBvcnQgZmlsdGVyaW5nIGZpbHRlcmluZyBFMSBTUzcgdHJhZmZpYyBvbiBNVFAyIGxheWVyIEFubmV4IEEKKwlTdXBwb3J0IGZpbHRlcmluZyBFMSBTUzcgdHJhZmZpYyBvbiBNVFAyIGxheWVyIEFubmV4IEEKIAlVc2UgImxuIC1zIiB0byBsaW5rIG1hbiBwYWdlcyBieSBkZWZhdWx0CiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBnZXR0aW5nIG5hbm9zZWNvbmQtcmVzb2x1dGlvbiB0aW1lIHN0YW1wcyB3aGVuCiAJICAgIGNhcHR1cmluZyBhbmQgcmVhZGluZyBjYXB0dXJlIGZpbGVzCkBAIC0yNjQsNyArNDQ0LDcgQEAKIEZyaWRheSAgRGVjZW1iZXIgOSwgMjAxMS4gIGd1eUBhbHVtLm1pdC5lZHUuCiBTdW1tYXJ5IGZvciAxLjIuMSBsaWJwY2FwIHJlbGVhc2UKIAlVcGRhdGUgUkVBRE1FIGZpbGUuCi0JRml4IHR5cG9lcyBpbiBSRUFETUUubGludXggZmlsZS4KKwlGaXggdHlwb3MgaW4gUkVBRE1FLmxpbnV4IGZpbGUuCiAJQ2xlYW4gdXAgc29tZSBjb21waWxlciB3YXJuaW5ncy4KIAlGaXggTGludXggY29tcGlsZSBwcm9ibGVtcyBhbmQgdGVzdHMgZm9yIGV0aHRvb2wuaC4KIAlUcmVhdCBEZWJpYW4va0ZyZWVCU0QgYW5kIEdOVS9IdXJkIGFzIHN5c3RlbXMgd2l0aCBHTlUKQEAgLTI5Nyw3ICs0NzcsNyBAQAogICAgICAgICBOb3RlZCByZWFsIG5hdHVyZSBvZiBMSU5LVFlQRV9BUkNORVQuCiAgICAgICAgIEFkZCBhIGxpbmstbGF5ZXIgdHlwZSBmb3IgRFZCLUNJLgogICAgICAgICBGaXggY29uZmlndXJlLXNjcmlwdCBkaXNjb3Zlcnkgb2YgVkxBTiBhY2NlbGVyYXRpb24gc3VwcG9ydC4KLSAgICAgICAgIHNlZSBodHRwOi8vbmV0b3B0aW1pemVyLmJsb2dzcG90LmNvbS8yMDEwLzA5L3RjcGR1bXAtdnMtdmxhbi10YWdzLmh0bWwKKyAgICAgICAgIHNlZSBodHRwczovL25ldG9wdGltaXplci5ibG9nc3BvdC5jb20vMjAxMC8wOS90Y3BkdW1wLXZzLXZsYW4tdGFncy5odG1sCiAgICAgICAgIExpbnV4LCBIUC1VWCwgQUlYLCBOZXRCU0QgYW5kIE9wZW5CU0QgY29tcGlsYXRpb24vY29uZmxpY3QgZml4ZXMuCiAgICAgICAgIFByb3RlY3QgYWdhaW5zdCBpbmNsdWRpbmcgQUlYIDUueCdzIDxuZXQvYnBmLmg+IGhhdmluZyBiZWVuIGluY2x1ZGVkLgogICAgICAgICBBZGQgRExUX0RCVVMsIGZvciByYXcgRC1CdXMgbWVzc2FnZXMuCkBAIC00OTYsNyArNjc2LDcgQEAKIAkgYmVnaW5uaW5nK2xpbmstbGF5ZXIKIAlBZGQgRExUL0xJTktUWVBFIGZvciBjYXJyeWluZyBGUkYuMTYgTXVsdGktbGluayBGcmFtZSBSZWxheQogCUZpeCBhbGxvY2F0aW9uIG9mIGJ1ZmZlciBmb3IgbGlzdCBvZiBsaW5rLWxheWVyIHR5cGVzCi0JQWRkZWQgYSBuZXcgRExUIGFuZCBMSU5LVFlQRSB2YWx1ZSBmb3IgQVJJTkMgNjUzIEludGVycGFydGl0aW9uIENvbW11bmNhdGlvbiBNZXNzYWdlcworCUFkZGVkIGEgbmV3IERMVCBhbmQgTElOS1RZUEUgdmFsdWUgZm9yIEFSSU5DIDY1MyBJbnRlcnBhcnRpdGlvbiBDb21tdW5pY2F0aW9uIE1lc3NhZ2VzCiAJRml4ZWQgYSB0eXBvIGluIGEgRExUIHZhbHVlOiBpdCBzaG91bGQgc3RhcnQgd2l0aCBETFRfIGFuZCBub3QgTElOS1RZUEVfCiAJUmVkZWZpbmVkIERMVF9DQU4yMEIgYW5kIExJTktUWVBFX0NBTjIwQiBhcyAjMTkwIChhcyB0aGlzIGlzIHRoZSByaWdodCB2YWx1ZSBmb3IgQ0FOKS4KIAlBZGRlZCBkZWZpbml0aW9uIGZvciBETFRfQTQyOSBhbmQgTElOS1RZUEVfQTQyOSBhcyAjMTg0LgpAQCAtNjEwLDcgKzc5MCw3IEBACiAKIAlIZWFkZXIgZmlsZXMgZml4ZWQgdG8gYWxsb3cgdXNlIGluIEMrKyBwcm9ncmFtcy4KIAotCVJlbW92ZWQgZGVwZW5kYW5jeSBvbiBuYXRpdmUgaGVhZGVycyBmb3IgcGFja2V0IGxheW91dC4KKwlSZW1vdmVkIGRlcGVuZGVuY3kgb24gbmF0aXZlIGhlYWRlcnMgZm9yIHBhY2tldCBsYXlvdXQuCiAJUmVtb3ZlZCBMaW51eCBzcGVjaWZpYyBoZWFkZXJzIHRoYXQgd2VyZSBzaGlwcGVkLgogCiAJU2VjdXJpdHkgZml4ZXM6IFN0cmNweSByZXBsYWNlZCB3aXRoIHN0cmxjcHksIHNwcmludGYgcmVwbGFjZWQKQEAgLTc0OCw3ICs5MjgsNyBAQAogCiB2MC4yLjEgU3VuIEp1bCAxNCAwMzowMjoyNiBQRFQgMTk5NgogCi0tIEZpeGVzIGZvciBIUC1VWCAxMC4gVGhhbmtzIGluIHBhcnQgdG8gdG8gVGhvbWFzIFdvbGZyYW0KKy0gRml4ZXMgZm9yIEhQLVVYIDEwLiBUaGFua3MgaW4gcGFydCB0byBUaG9tYXMgV29sZnJhbQogICAod29sZkBwcnoudHUtYmVybGluLmRlKSBhbmQgUmljayBKb25lcyAocmFqQGhwaXNyZHEuY3VwLmhwLmNvbSkKIAogLSBBZGRlZCBzdXBwb3J0IGZvciBTSU5JWC4gVGhhbmtzIHRvIEFuZHJlaiBCb3JzZW5rb3cKZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VMaXN0cy50eHQKaW5kZXggOTA1YmE2MS4uNTBiZjE3MSAxMDA2NDQKLS0tIGEvQ01ha2VMaXN0cy50eHQKKysrIGIvQ01ha2VMaXN0cy50eHQKQEAgLTEsNCArMSwxMSBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC42KQoraWYoV0lOMzIpCisgICAgIworICAgICMgV2UgbmVlZCAzLjEyIG9yIGxhdGVyLCBzbyB0aGF0IHdlIGNhbiBzZXQgcG9saWN5IENNUDAwNzQ7IHNlZQorICAgICMgYmVsb3cuCisgICAgY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTIpCitlbHNlKFdJTjMyKQorICAgIGNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguNikKK2VuZGlmKFdJTjMyKQogCiAjCiAjIEFwcGxlIGRvZXNuJ3QgYnVpbGQgd2l0aCBhbiBpbnN0YWxsX25hbWUgc3RhcnRpbmcgd2l0aCBAcnBhdGgsIGFuZApAQCAtOSw0NCArMTYsMzQgQEAKICAgICBjbWFrZV9wb2xpY3koU0VUIENNUDAwNDIgT0xEKQogZW5kaWYoKQogCi1zZXQoQ01BS0VfTU9EVUxFX1BBVEggJHtDTUFLRV9TT1VSQ0VfRElSfS9jbWFrZS9Nb2R1bGVzKQorIworIyBTcXVlbGNoIG5vaXNlIGFib3V0IHF1b3RlZCBzdHJpbmdzIGluIGlmKCkgc3RhdGVtZW50cy4KKyMgV0UgS05PVyBXSEFUIFdFJ1JFIERPSU5HLCBXRSdSRSBET0lORyBFVkVSWVRISU5HIFRIRSBXQVkgVEhBVCBORVdFUgorIyBWRVJTSU9OUyBPRiBDTUFLRSBFWFBFQ1QgQlkgREVGQVVMVCwgRE9OJ1QgV0FTVEUgT1VSIFRJTUUgV0lUSCBOT0lTRS4KKyMKK2lmKFBPTElDWSBDTVAwMDU0KQorICAgIGNtYWtlX3BvbGljeShTRVQgQ01QMDA1NCBORVcpCitlbmRpZigpCisKKyMKKyMgV2Ugd2FudCBmaW5kX2ZpbGUoKSBhbmQgZmluZF9saWJyYXJ5KCkgdG8gaG9ub3Ige3BhY2thZ2VuYW1lfV9ST09ULAorIyBhcyB0aGF0IGFwcGVhcnMgdG8gYmUgdGhlIG9ubHkgd2F5LCB3aXRoIHRoZSBWaXN1YWwgU3R1ZGlvIDIwMTkgSURFCisjIGFuZCBpdHMgQ01ha2Ugc3VwcG9ydCwgdG8gdGVsbCBDTWFrZSB3aGVyZSB0byBsb29rIGZvciB0aGUgTnBjYXAKKyMgb3IgV2luUGNhcCBTREsuCisjCitpZihQT0xJQ1kgQ01QMDA3NCkKKyAgICBjbWFrZV9wb2xpY3koU0VUIENNUDAwNzQgTkVXKQorZW5kaWYoKQorCitzZXQoQ01BS0VfTU9EVUxFX1BBVEggJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2NtYWtlL01vZHVsZXMpCiAKIHByb2plY3QocGNhcCkKIAotIwotIyBUcnkgdG8gZW5hYmxlIGFzIG1hbnkgQzk5IGZlYXR1cmVzIGFzIHdlIGNhbi4KLSMgQXQgbWluaW11bSwgd2Ugd2FudCBDKysvQzk5LXN0eWxlIC8vIGNvbW1lbnRzLgotIwotIyBOZXdlciB2ZXJzaW9ucyBvZiBjb21waWxlcnMgbWlnaHQgZGVmYXVsdCB0byBzdXBwb3J0aW5nIEM5OSwgYnV0IG9sZGVyCi0jIHZlcnNpb25zIG1heSByZXF1aXJlIGEgc3BlY2lhbCBmbGFnLgotIwotIyBQcmlvciB0byBDTWFrZSAzLjEsIHNldHRpbmcgQ01BS0VfQ19TVEFOREFSRCB3aWxsIG5vdCBoYXZlIGFueSBlZmZlY3QsCi0jIHNvLCB1bmxlc3MgYW5kIHVudGlsIHdlIHJlcXVpcmUgQ01ha2UgMy4xIG9yIGxhdGVyLCB3ZSBoYXZlIHRvIGRvIGl0Ci0jIG91cnNlbHZlcyBvbiBwcmUtMy4xIENNYWtlLCBzbyB3ZSBqdXN0IGRvIGl0IG91cnNlbHZlcyBvbiBhbGwgdmVyc2lvbnMKLSMgb2YgQ01ha2UuCi0jCi0jIE5vdGU6IHdpdGggQ01ha2UgMy4xIHRocm91Z2ggMy41LCB0aGUgb25seSBjb21waWxlcnMgZm9yIHdoaWNoIENNYWtlCi0jIGhhbmRsZXMgQ01BS0VfQ19TVEFOREFSRCBhcmUgR0NDIGFuZCBDbGFuZy4gIDMuNiBhZGRzIHN1cHBvcnQgb25seQotIyBmb3IgSW50ZWwgQzsgMy45IGFkZHMgc3VwcG9ydCBmb3IgUEdJIEMsIFN1biBDLCBhbmQgSUJNIFhMIEMsIGFuZAotIyAzLjEwIGFkZHMgc3VwcG9ydCBmb3IgQ3JheSBDIGFuZCBJQVIgQywgYnV0IG5vIHZlcnNpb24gb2YgQ01ha2UgaGFzCi0jIHN1cHBvcnQgZm9yIEhQIEMuICBUaGVyZWZvcmUsIGV2ZW4gaWYgd2UgdXNlIENNQUtFX0NfU1RBTkRBUkQgd2l0aAotIyBjb21waWxlcnMgZm9yIHdoaWNoIENNYWtlIHN1cHBvcnRzIGl0LCB3ZSBtYXkgc3RpbGwgaGF2ZSB0byBkbyBpdAotIyBvdXJzZWx2ZXMgb24gb3RoZXIgY29tcGlsZXJzLgotIwotIyBTZWUgdGhlIENNYWtlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBDTUFLRV88TEFORz5fQ09NUElMRVJfSUQgdmFyaWFibGVzCi0jIGZvciBhIGxpc3Qgb2YgY29tcGlsZXIgSURzLgotIwotIyBXZSBkb24ndCB3b3JyeSBhYm91dCBNU1ZDOyBpdCBkb2Vzbid0IGhhdmUgc3VjaCBhIGZsYWcgLSBlaXRoZXIgaXQKLSMgZG9lc24ndCBzdXBwb3J0IHRoZSBDOTkgZmVhdHVyZXMgd2UgbmVlZCBhdCBhbGwsIG9yIGl0IHN1cHBvcnRzIHRoZW0KLSMgcmVnYXJkbGVzcyBvZiB0aGUgY29tcGlsZXIgZmxhZy4KLSMKLSMgWFhYIC0gdGhpcyBqdXN0IHRlc3RzIHdoZXRoZXIgdGhlIG9wdGlvbiB3b3JrcyBhbmQgYWRkcyBpdCBpZiBpdCBkb2VzLgotIyBXZSBkb24ndCB0ZXN0IHdoZXRoZXIgaXQncyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gZ2V0IHRoZSBDOTkgZmVhdHVyZXMKLSMgdGhhdCB3ZSB1c2U7IGlmIHdlIGV2ZXIgaGF2ZSBhIHVzZXIgd2hvIHRyaWVzIHRvIGNvbXBpbGUgd2l0aCBhIGNvbXBpbGVyCi0jIHRoYXQgY2FuJ3QgYmUgbWFkZSB0byBzdXBwb3J0IHRob3NlIGZlYXR1cmVzLCB3ZSBjYW4gYWRkIGEgdGVzdCB0byBtYWtlCi0jIHN1cmUgd2UgYWN0dWFsbHkgKmhhdmUqIEM5OSBzdXBwb3J0LgotIwogaW5jbHVkZShDaGVja0NDb21waWxlckZsYWcpCisKKyMKKyMgRm9yIGNoZWNraW5nIGlmIGEgY29tcGlsZXIgZmxhZyB3b3JrcyBhbmQgYWRkaW5nIGl0IGlmIGl0IGRvZXMuCisjCiBtYWNybyhjaGVja19hbmRfYWRkX2NvbXBpbGVyX29wdGlvbiBfb3B0aW9uKQogICAgIG1lc3NhZ2UoU1RBVFVTICJDaGVja2luZyBDIGNvbXBpbGVyIGZsYWcgJHtfb3B0aW9ufSIpCiAgICAgc3RyaW5nKFJFUExBQ0UgIj0iICItIiBfdGVtcF9vcHRpb25fdmFyaWFibGUgJHtfb3B0aW9ufSkKQEAgLTU3LDIzICs1NCwxMDMgQEAKICAgICBlbmRpZigpCiBlbmRtYWNybygpCiAKKyMKKyMgSWYgd2UncmUgYnVpbGRpbmcgd2l0aCBWaXN1YWwgU3R1ZGlvLCB3ZSByZXF1aXJlIFZpc3VhbCBTdHVkaW8gMjAxNSwKKyMgaW4gb3JkZXIgdG8gZ2V0IHN1ZmZpY2llbnQgQzk5IGNvbXBhdGliaWxpdHkuICBDaGVjayBmb3IgdGhhdC4KKyMKKyMgSWYgbm90LCB0cnkgdGhlIGFwcHJvcHJpYXRlIGZsYWcgZm9yIHRoZSBjb21waWxlciB0byBlbmFibGUgQzk5CisjIGZlYXR1cmVzLgorIwogc2V0KENfQURESVRJT05BTF9GTEFHUyAiIikKLWlmKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiR05VIiBPUgotICAgQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJDbGFuZyIpCi0gICAgY2hlY2tfYW5kX2FkZF9jb21waWxlcl9vcHRpb24oIi1zdGQ9Z251OTkiKQotZWxzZWlmKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiWEwiKQoraWYoTVNWQykKKyAgICBpZihNU1ZDX1ZFUlNJT04gTEVTUyAxOTAwKQorICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJWaXN1YWwgU3R1ZGlvIDIwMTUgb3IgbGF0ZXIgaXMgcmVxdWlyZWQiKQorICAgIGVuZGlmKCkKKwogICAgICMKLSAgICAjIFdlIHdhbnQgc3VwcG9ydCBmb3IgZXh0ZW5zaW9ucyBwaWNrZWQgdXAgZm9yIEdOVSBDIGNvbXBhdGliaWxpdHksCi0gICAgIyBzbyB3ZSB1c2UgLXFsYW5nbHZsPWV4dGM5OS4KKyAgICAjIFRyZWF0IHNvdXJjZSBmaWxlcyBhcyBiZWluZyBpbiBVVEYtOCB3aXRoIE1TVkMgaWYgaXQncyBub3QgdXNpbmcKKyAgICAjIHRoZSBDbGFuZyBmcm9udCBlbmQuCisgICAgIyBXZSBhc3N1bWUgdGhhdCBVVEYtOCBzb3VyY2UgaXMgT0sgd2l0aCBvdGhlciBjb21waWxlcnMgYW5kIHdpdGgKKyAgICAjIE1TVkMgaWYgaXQncyB1c2luZyB0aGUgQ2xhbmcgZnJvbnQgZW5kLgogICAgICMKLSAgICBjaGVja19hbmRfYWRkX2NvbXBpbGVyX29wdGlvbigiLXFsYW5nbHZsPWV4dGM5OSIpCi1lbHNlaWYoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJIUCIpCi0gICAgY2hlY2tfYW5kX2FkZF9jb21waWxlcl9vcHRpb24oIi1BQzk5IikKLWVsc2VpZihDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIlN1biIpCi0gICAgY2hlY2tfYW5kX2FkZF9jb21waWxlcl9vcHRpb24oIi14Yzk5IikKLWVsc2VpZihDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIkludGVsIikKLSAgICBjaGVja19hbmRfYWRkX2NvbXBpbGVyX29wdGlvbigiLWM5OSIpCi1lbmRpZigpCisgICAgaWYoTk9UICR7Q01BS0VfQ19DT01QSUxFUn0gTUFUQ0hFUyAiY2xhbmcqIikKKyAgICAgICAgc2V0KENfQURESVRJT05BTF9GTEFHUyAiJHtDX0FERElUSU9OQUxfRkxBR1N9IC91dGYtOCIpCisgICAgZW5kaWYoTk9UICR7Q01BS0VfQ19DT01QSUxFUn0gTUFUQ0hFUyAiY2xhbmcqIikKK2Vsc2UoTVNWQykKKyAgICAjCisgICAgIyBGb3IgY2hlY2tpbmcgaWYgYSBjb21waWxlciBmbGFnIHdvcmtzLCBmYWlsaW5nIGlmIGl0IGRvZXNuJ3QsCisgICAgIyBhbmQgYWRkaW5nIGl0IG90aGVyd2lzZS4KKyAgICAjCisgICAgbWFjcm8ocmVxdWlyZV9hbmRfYWRkX2NvbXBpbGVyX29wdGlvbiBfb3B0aW9uKQorICAgICAgICBtZXNzYWdlKFNUQVRVUyAiQ2hlY2tpbmcgQyBjb21waWxlciBmbGFnICR7X29wdGlvbn0iKQorICAgICAgICBzdHJpbmcoUkVQTEFDRSAiPSIgIi0iIF90ZW1wX29wdGlvbl92YXJpYWJsZSAke19vcHRpb259KQorICAgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiXi0iICIiIF9vcHRpb25fdmFyaWFibGUgJHtfdGVtcF9vcHRpb25fdmFyaWFibGV9KQorICAgICAgICBjaGVja19jX2NvbXBpbGVyX2ZsYWcoIiR7X29wdGlvbn0iICR7X29wdGlvbl92YXJpYWJsZX0pCisgICAgICAgIGlmKCR7JHtfb3B0aW9uX3ZhcmlhYmxlfX0pCisgICAgICAgICAgICBzZXQoQ19BRERJVElPTkFMX0ZMQUdTICIke0NfQURESVRJT05BTF9GTEFHU30gJHtfb3B0aW9ufSIpCisgICAgICAgIGVsc2UoKQorICAgICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiQzk5IHN1cHBvcnQgaXMgcmVxdWlyZWQsIGJ1dCB0aGUgY29tcGlsZXIgZG9lc24ndCBzdXBwb3J0IGEgY29tcGlsZXIgZmxhZyB0byBlbmFibGUgaXQiKQorICAgICAgICBlbmRpZigpCisgICAgZW5kbWFjcm8oKQorCisgICAgIworICAgICMgVHJ5IHRvIGVuYWJsZSBhcyBtYW55IEM5OSBmZWF0dXJlcyBhcyB3ZSBjYW4uCisgICAgIyBBdCBtaW5pbXVtLCB3ZSB3YW50IEMrKy9DOTktc3R5bGUgLy8gY29tbWVudHMuCisgICAgIworICAgICMgTmV3ZXIgdmVyc2lvbnMgb2YgY29tcGlsZXJzIG1pZ2h0IGRlZmF1bHQgdG8gc3VwcG9ydGluZyBDOTksIGJ1dAorICAgICMgb2xkZXIgdmVyc2lvbnMgbWF5IHJlcXVpcmUgYSBzcGVjaWFsIGZsYWcuCisgICAgIworICAgICMgUHJpb3IgdG8gQ01ha2UgMy4xLCBzZXR0aW5nIENNQUtFX0NfU1RBTkRBUkQgd2lsbCBub3QgaGF2ZSBhbnkgZWZmZWN0LAorICAgICMgc28sIHVubGVzcyBhbmQgdW50aWwgd2UgcmVxdWlyZSBDTWFrZSAzLjEgb3IgbGF0ZXIsIHdlIGhhdmUgdG8gZG8gaXQKKyAgICAjIG91cnNlbHZlcyBvbiBwcmUtMy4xIENNYWtlLCBzbyB3ZSBqdXN0IGRvIGl0IG91cnNlbHZlcyBvbiBhbGwgdmVyc2lvbnMKKyAgICAjIG9mIENNYWtlLgorICAgICMKKyAgICAjIE5vdGU6IHdpdGggQ01ha2UgMy4xIHRocm91Z2ggMy41LCB0aGUgb25seSBjb21waWxlcnMgZm9yIHdoaWNoIENNYWtlCisgICAgIyBoYW5kbGVzIENNQUtFX0NfU1RBTkRBUkQgYXJlIEdDQyBhbmQgQ2xhbmcuICAzLjYgYWRkcyBzdXBwb3J0IG9ubHkKKyAgICAjIGZvciBJbnRlbCBDOyAzLjkgYWRkcyBzdXBwb3J0IGZvciBQR0kgQywgU3VuIEMsIGFuZCBJQk0gWEwgQywgYW5kCisgICAgIyAzLjEwIGFkZHMgc3VwcG9ydCBmb3IgQ3JheSBDIGFuZCBJQVIgQywgYnV0IG5vIHZlcnNpb24gb2YgQ01ha2UgaGFzCisgICAgIyBzdXBwb3J0IGZvciBIUCBDLiAgVGhlcmVmb3JlLCBldmVuIGlmIHdlIHVzZSBDTUFLRV9DX1NUQU5EQVJEIHdpdGgKKyAgICAjIGNvbXBpbGVycyBmb3Igd2hpY2ggQ01ha2Ugc3VwcG9ydHMgaXQsIHdlIG1heSBzdGlsbCBoYXZlIHRvIGRvIGl0CisgICAgIyBvdXJzZWx2ZXMgb24gb3RoZXIgY29tcGlsZXJzLgorICAgICMKKyAgICAjIFNlZSB0aGUgQ01ha2UgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIENNQUtFXzxMQU5HPl9DT01QSUxFUl9JRCB2YXJpYWJsZXMKKyAgICAjIGZvciBhIGxpc3Qgb2YgY29tcGlsZXIgSURzLgorICAgICMKKyAgICAjIFhYWCAtIHRoaXMganVzdCB0ZXN0cyB3aGV0aGVyIHRoZSBvcHRpb24gd29ya3MsIGZhaWxzIGlmIGl0IGRvZXNuJ3QsCisgICAgIyBhbmQgYWRkcyBpdCBpZiBpdCBkb2VzLiAgV2UgZG9uJ3QgdGVzdCB3aGV0aGVyIGl0J3MgbmVjZXNzYXJ5IGluIG9yZGVyCisgICAgIyB0byBnZXQgdGhlIEM5OSBmZWF0dXJlcyB0aGF0IHdlIHVzZSwgb3Igd2hldGhlciwgaWYgaXQncyB1c2VkLCBpdAorICAgICMgZW5hYmxlcyBhbGwgdGhlIGZlYXR1cmVzIHRoYXQgd2UgcmVxdWlyZS4KKyAgICAjCisgICAgaWYoQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJHTlUiIE9SCisgICAgICAgQ01BS0VfQ19DT01QSUxFUl9JRCBNQVRDSEVTICJDbGFuZyIpCisgICAgICAgIHJlcXVpcmVfYW5kX2FkZF9jb21waWxlcl9vcHRpb24oIi1zdGQ9Z251OTkiKQorICAgIGVsc2VpZihDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIlhMIikKKyAgICAgICAgIworICAgICAgICAjIFdlIHdhbnQgc3VwcG9ydCBmb3IgZXh0ZW5zaW9ucyBwaWNrZWQgdXAgZm9yIEdOVSBDIGNvbXBhdGliaWxpdHksCisgICAgICAgICMgc28gd2UgdXNlIC1xbGFuZ2x2bD1leHRjOTkuCisgICAgICAgICMKKyAgICAgICAgcmVxdWlyZV9hbmRfYWRkX2NvbXBpbGVyX29wdGlvbigiLXFsYW5nbHZsPWV4dGM5OSIpCisgICAgZWxzZWlmKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiSFAiKQorICAgICAgICByZXF1aXJlX2FuZF9hZGRfY29tcGlsZXJfb3B0aW9uKCItQUM5OSIpCisgICAgZWxzZWlmKENNQUtFX0NfQ09NUElMRVJfSUQgTUFUQ0hFUyAiU3VuIikKKyAgICAgICAgcmVxdWlyZV9hbmRfYWRkX2NvbXBpbGVyX29wdGlvbigiLXhjOTkiKQorICAgIGVsc2VpZihDTUFLRV9DX0NPTVBJTEVSX0lEIE1BVENIRVMgIkludGVsIikKKyAgICAgICAgcmVxdWlyZV9hbmRfYWRkX2NvbXBpbGVyX29wdGlvbigiLWM5OSIpCisgICAgZW5kaWYoKQorZW5kaWYoTVNWQykKKworIworIyBJZiB3ZSdyZSBidWlsZGluZyB3aXRoIE1pbkdXLCB3ZSBuZWVkIHRvIHNwZWNpZnkgX1dJTjMyX1dJTk5UIGFzCisjIDB4MDYwMCAoIk5UIDYuMCIsIGEvay9hIFZpc3RhL1dpbmRvd3MgU2VydmVyIDIwMDgpIGluIG9yZGVyIHRvCisjIGdldCB0aGUgZnVsbCBJUHY2IEFQSSwgaW5jbHVkaW5nIGluZXRfbnRvcCgpLgorIworIyBOT1RFOiBwY2FwIGRvZXMgKk5PVCogd29yayB3aXRoIG1zdmNydC5kbGw7IGl0IG11c3QgbGluayB3aXRoCisjIGEgbmV3ZXIgdmVyc2lvbiBvZiB0aGUgQyBsaWJyYXJ5LCBpLmUuIFZpc3VhbCBTdHVkaW8gMjAxNSBvcgorIyBsYXRlciwgYXMgaXQgZGVwZW5kcyBvbiBDOTkgZmVhdHVyZXMgaW50cm9kdWNlZCBpbiBWUyAyMDE1LgorIworaWYoTUlOR1cpCisgICAgYWRkX2RlZmluaXRpb25zKC1EX1dJTjMyX1dJTk5UPTB4MDYwMCkKK2VuZGlmKE1JTkdXKQogCiAjCiAjIEJ1aWxkIGFsbCBydW50aW1lcyBpbiB0aGUgdG9wLWxldmVsIGJpbmFyeSBkaXJlY3Rvcnk7IHRoYXQgd2F5LApAQCAtMTA3LDkgKzE4NCwxMiBAQAogZW5kaWYoV0lOMzIpCiBvcHRpb24oQlVJTERfU0hBUkVEX0xJQlMgIkJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiIE9OKQogaWYoV0lOMzIpCi0gICAgc2V0KFBBQ0tFVF9ETExfRElSICIiIENBQ0hFIFBBVEggIlBhdGggdG8gZGlyZWN0b3J5IHdpdGggaW5jbHVkZSBhbmQgbGliIHN1YmRpcmVjdG9yaWVzIGZvciBwYWNrZXQuZGxsIikKKyAgICBzZXQoUGFja2V0X1JPT1QgIiIgQ0FDSEUgUEFUSCAiUGF0aCB0byBkaXJlY3Rvcnkgd2l0aCBpbmNsdWRlIGFuZCBsaWIgc3ViZGlyZWN0b3JpZXMgZm9yIHBhY2tldC5kbGwiKQorICAgIHNldChBaXJQY2FwX1JPT1QgIiIgQ0FDSEUgUEFUSCAiUGF0aCB0byBkaXJlY3Rvcnkgd2l0aCBpbmNsdWRlIGFuZCBsaWIgc3ViZGlyZWN0b3JpZXMgZm9yIGFpcnBjYXAuZGxsIikKIGVuZGlmKFdJTjMyKQogCitvcHRpb24oRU5BQkxFX1BST0ZJTElORyAiRW5hYmxlIGNvZGUgcHJvZmlsaW5nIiBPRkYpCisKICMgVG8gcGFjaWZ5IHRob3NlIHdobyBoYXRlIHRoZSBwcm90b2NoYWluIGluc3RydWN0aW9uCiBvcHRpb24oTk9fUFJPVE9DSEFJTiAiRGlzYWJsZSBwcm90b2NoYWluIGluc3RydWN0aW9uIiBPRkYpCiAKQEAgLTEzMSw5MyArMjExLDE5IEBACiBlbmRpZihXSU4zMikKIAogaWYoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkxpbnV4IikKLSAgICBvcHRpb24oUENBUF9TVVBQT1JUX1BBQ0tFVF9SSU5HICJFbmFibGUgTGludXggcGFja2V0IHJpbmcgc3VwcG9ydCIgT04pCiAgICAgb3B0aW9uKEJVSUxEX1dJVEhfTElCTkwgIkJ1aWxkIHdpdGggbGlibmwiIE9OKQogZW5kaWYoKQogCiAjCi0jIEJ5IGRlZmF1bHQsIGJ1aWxkIHVuaXZlcnNhbCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBzZXQgb2YgYXJjaGl0ZWN0dXJlcwotIyBmb3IgdGhlIE9TIG9uIHdoaWNoIHdlJ3JlIGRvaW5nIHRoZSBidWlsZC4KLSMKLWlmKEFQUExFIEFORCAiJHtDTUFLRV9PU1hfQVJDSElURUNUVVJFU30iIFNUUkVRVUFMICIiKQotICAgICMKLSAgICAjIEdldCB0aGUgbWFqb3IgdmVyc2lvbiBvZiBEYXJ3aW4uCi0gICAgIwotICAgIHN0cmluZyhSRUdFWCBNQVRDSCAiXihbMC05XSspIiBTWVNURU1fVkVSU0lPTl9NQUpPUiAiJHtDTUFLRV9TWVNURU1fVkVSU0lPTn0iKQotCi0gICAgaWYoU1lTVEVNX1ZFUlNJT05fTUFKT1IgTEVTUyA4KQotICAgICAgICAjCi0gICAgICAgICMgUHJlLVRpZ2VyLiAgQnVpbGQgb25seSBmb3IgMzItYml0IFBvd2VyUEMuCi0gICAgICAgICMKLSAgICAgICAgc2V0KENNQUtFX09TWF9BUkNISVRFQ1RVUkVTICJwcGMiKQotICAgIGVsc2VpZihTWVNURU1fVkVSU0lPTl9NQUpPUiBFUVVBTCA4KQotICAgICAgICAjCi0gICAgICAgICMgVGlnZXIuICBJcyB0aGlzIHByaW9yIHRvLCBvciB3aXRoLCBJbnRlbCBzdXBwb3J0PwotICAgICAgICAjCi0gICAgICAgICMgR2V0IHRoZSBtaW5vciB2ZXJzaW9uIG9mIERhcndpbi4KLSAgICAgICAgIwotICAgICAgICBzdHJpbmcoUkVQTEFDRSAiJHtTWVNURU1fVkVSU0lPTl9NQUpPUn0uIiAiIiBTWVNURU1fTUlOT1JfQU5EX1BBVENIX1ZFUlNJT04gJHtDTUFLRV9TWVNURU1fVkVSU0lPTn0pCi0gICAgICAgIHN0cmluZyhSRUdFWCBNQVRDSCAiXihbMC05XSspIiBTWVNURU1fVkVSU0lPTl9NSU5PUiAiJHtTWVNURU1fTUlOT1JfQU5EX1BBVENIX1ZFUlNJT059IikKLSAgICAgICAgaWYoU1lTVEVNX1ZFUlNJT05fTUlOT1IgTEVTUyA0KQotICAgICAgICAgICAgIwotICAgICAgICAgICAgIyBQcmlvciB0byBJbnRlbCBzdXBwb3J0LiAgQnVpbGQgZm9yIDMyLWJpdAotICAgICAgICAgICAgIyBQb3dlclBDIGFuZCA2NC1iaXQgUG93ZXJQQywgd2l0aCAzMi1iaXQgUG93ZXJQQwotICAgICAgICAgICAgIyBmaXJzdC4gIChJJ20gZ3Vlc3NpbmcgdGhhdCdzIHdoYXQgQXBwbGUgZG9lcy4pCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICBzZXQoQ01BS0VfT1NYX0FSQ0hJVEVDVFVSRVMgInBwYztwcGM2NCIpCi0gICAgICAgIGVsc2VpZihTWVNURU1fVkVSU0lPTl9NSU5PUiBMRVNTIDcpCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICAjIFdpdGggSW50ZWwgc3VwcG9ydCBidXQgcHJpb3IgdG8geDg2LTY0IHN1cHBvcnQuCi0gICAgICAgICAgICAjIEJ1aWxkIGZvciAzMi1iaXQgUG93ZXJQQywgNjQtYml0IFBvd2VyUEMsIGFuZCB4ODYsCi0gICAgICAgICAgICAjIHdpdGggMzItYml0IFBvd2VyUEMgZmlyc3QuCi0gICAgICAgICAgICAjIChJJ20gZ3Vlc3NpbmcgdGhhdCdzIHdoYXQgQXBwbGUgZG9lcy4pCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICBzZXQoQ01BS0VfT1NYX0FSQ0hJVEVDVFVSRVMgInBwYztwcGM2NDtpMzg2IikKLSAgICAgICAgZWxzZSgpCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICAjIFdpdGggSW50ZWwgc3VwcG9ydCBpbmNsdWRpbmcgeDg2LTY0IHN1cHBvcnQuCi0gICAgICAgICAgICAjIEJ1aWxkIGZvciAzMi1iaXQgUG93ZXJQQywgNjQtYml0IFBvd2VyUEMsIHg4NiwKLSAgICAgICAgICAgICMgYW5kIHg4Ni02NCwgd2l0aCAzMi1iaXQgUG93ZXJQQyBmaXJzdC4KLSAgICAgICAgICAgICMgKEknbSBndWVzc2luZyB0aGF0J3Mgd2hhdCBBcHBsZSBkb2VzLikKLSAgICAgICAgICAgICMKLSAgICAgICAgICAgIHNldChDTUFLRV9PU1hfQVJDSElURUNUVVJFUyAicHBjO3BwYzY0O2kzODY7eDg2XzY0IikKLSAgICAgICAgZW5kaWYoKQotICAgIGVsc2VpZihTWVNURU1fVkVSU0lPTl9NQUpPUiBFUVVBTCA5KQotICAgICAgICAjCi0gICAgICAgICMgTGVvcGFyZC4gIEJ1aWxkIGZvciAzMi1iaXQgUG93ZXJQQywgNjQtYml0Ci0gICAgICAgICMgUG93ZXJQQywgeDg2LCBhbmQgeDg2LTY0LCB3aXRoIDMyLWJpdCBQb3dlclBDCi0gICAgICAgICMgZmlyc3QuICAoVGhhdCdzIHdoYXQgQXBwbGUgZG9lcy4pCi0gICAgICAgICMKLSAgICAgICAgc2V0KENNQUtFX09TWF9BUkNISVRFQ1RVUkVTICJwcGM7cHBjNjQ7aTM4Njt4ODZfNjQiKQotICAgIGVsc2VpZihTWVNURU1fVkVSU0lPTl9NQUpPUiBFUVVBTCAxMCkKLSAgICAgICAgIwotICAgICAgICAjIFNub3cgTGVvcGFyZC4gIEJ1aWxkIGZvciB4ODYtNjQsIHg4NiwgYW5kCi0gICAgICAgICMgMzItYml0IFBvd2VyUEMsIHdpdGggeDg2LTY0IGZpcnN0LiAgKFRoYXQncwotICAgICAgICAjIHdoYXQgQXBwbGUgZG9lcywgZXZlbiB0aG91Z2ggU25vdyBMZW9wYXJkCi0gICAgICAgICMgZG9lc24ndCBydW4gb24gUFBDLCBzbyBQUEMgbGlicGNhcCBydW5zIHVuZGVyCi0gICAgICAgICMgUm9zZXR0YSwgYW5kIFJvc2V0dGEgZG9lc24ndCBzdXBwb3J0IEJQRgotICAgICAgICAjIGlvY3Rscywgc28gUFBDIHByb2dyYW1zIGNhbid0IGRvIGxpdmUKLSAgICAgICAgIyBjYXB0dXJlcy4pCi0gICAgICAgICMKLSAgICAgICAgc2V0KENNQUtFX09TWF9BUkNISVRFQ1RVUkVTICJ4ODZfNjQ7aTM4NjtwcGMiKQotICAgIGVsc2UoKQotICAgICAgICAjCi0gICAgICAgICMgUG9zdC1Tbm93IExlb3BhcmQuICBCdWlsZCBmb3IgeDg2LTY0IGFuZAotICAgICAgICAjIHg4Niwgd2l0aCB4ODYtNjQgZmlyc3QuICAoVGhhdCdzIHByb2JhYmx5IHdoYXQKLSAgICAgICAgIyBBcHBsZSBkb2VzLCBnaXZlbiB0aGF0IFJvc2V0dGEgaXMgZ29uZS4pCi0gICAgICAgICMgWFhYIC0gdXBkYXRlIGlmIGFuZCB3aGVuIEFwcGxlIGRyb3BzIHN1cHBvcnQKLSAgICAgICAgIyBmb3IgMzItYml0IHg4NiBjb2RlLgotICAgICAgICAjCi0gICAgICAgIHNldChDTUFLRV9PU1hfQVJDSElURUNUVVJFUyAieDg2XzY0O2kzODYiKQotICAgIGVuZGlmKCkKLWVuZGlmKCkKLQotIwogIyBBZGRpdGlvbmFsIGNhcHR1cmUgbW9kdWxlcy4KICMKLW9wdGlvbihESVNBQkxFX1VTQiAiRGlzYWJsZSBVU0Igc25pZmZpbmcgc3VwcG9ydCIgT0ZGKQoraWYoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkxpbnV4IikKKyAgICBvcHRpb24oRElTQUJMRV9MSU5VWF9VU0JNT04gIkRpc2FibGUgTGludXggdXNibW9uIFVTQiBzbmlmZmluZyBzdXBwb3J0IiBPRkYpCitlbmRpZigpCiBvcHRpb24oRElTQUJMRV9CTFVFVE9PVEggIkRpc2FibGUgQmx1ZXRvb3RoIHNuaWZmaW5nIHN1cHBvcnQiIE9GRikKIG9wdGlvbihESVNBQkxFX05FVE1BUCAiRGlzYWJsZSBuZXRtYXAgc3VwcG9ydCIgT0ZGKQorb3B0aW9uKERJU0FCTEVfRFBESyAiRGlzYWJsZSBEUERLIHN1cHBvcnQiIE9GRikKKwogIwogIyBXZSBkb24ndCBzdXBwb3J0IEQtQnVzIHNuaWZmaW5nIG9uIG1hY09TOyBzZWUKICMKQEAgLTIzMyw3ICsyMzksNyBAQAogb3B0aW9uKERJU0FCTEVfREFHICJEaXNhYmxlIEVuZGFjZSBEQUcgY2FyZCBzdXBwb3J0IiBPRkYpCiAKIG9wdGlvbihESVNBQkxFX1NFUFRFTCAiRGlzYWJsZSBTZXB0ZWwgY2FyZCBzdXBwb3J0IiBPRkYpCi1zZXQoU0VQVEVMX1JPT1QgIiR7Q01BS0VfU09VUkNFX0RJUn0vLi4vc2VwdGVsIiBDQUNIRSBQQVRIICJQYXRoIHRvIGRpcmVjdG9yeSB3aXRoIGluY2x1ZGUgYW5kIGxpYiBzdWJkaXJlY3RvcmllcyBmb3IgU2VwdGVsIEFQSSIpCitzZXQoU0VQVEVMX1JPT1QgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8uLi9zZXB0ZWwiIENBQ0hFIFBBVEggIlBhdGggdG8gZGlyZWN0b3J5IHdpdGggaW5jbHVkZSBhbmQgbGliIHN1YmRpcmVjdG9yaWVzIGZvciBTZXB0ZWwgQVBJIikKIAogb3B0aW9uKERJU0FCTEVfU05GICJEaXNhYmxlIE15cmljb20gU05GIHN1cHBvcnQiIE9GRikKIApAQCAtMjg5LDYgKzI5NSw3IEBACiAKIGluY2x1ZGUoQ2hlY2tGdW5jdGlvbkV4aXN0cykKIGluY2x1ZGUoQ01ha2VQdXNoQ2hlY2tTdGF0ZSkKK2luY2x1ZGUoQ2hlY2tTeW1ib2xFeGlzdHMpCiAKIGlmKFdJTjMyKQogCkBAIC0zMDcsOSArMzE0LDE4IEBACiAgICAgICAgIGNtYWtlX3B1c2hfY2hlY2tfc3RhdGUoKQogICAgICAgICBzZXQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTICR7UEFDS0VUX0xJQlJBUklFU30pCiAgICAgICAgIGNoZWNrX2Z1bmN0aW9uX2V4aXN0cyhQYWNrZXRJc0xvb3BiYWNrQWRhcHRlciBIQVZFX1BBQ0tFVF9JU19MT09QQkFDS19BREFQVEVSKQorICAgICAgICBjaGVja19mdW5jdGlvbl9leGlzdHMoUGFja2V0R2V0VGltZXN0YW1wTW9kZXMgSEFWRV9QQUNLRVRfR0VUX1RJTUVTVEFNUF9NT0RFUykKICAgICAgICAgY21ha2VfcG9wX2NoZWNrX3N0YXRlKCkKICAgICBlbmRpZihQQUNLRVRfRk9VTkQpCiAKKyAgICBtZXNzYWdlKFNUQVRVUyAiY2hlY2tpbmcgZm9yIE5wY2FwJ3MgdmVyc2lvbi5oIikKKyAgICBjaGVja19zeW1ib2xfZXhpc3RzKFdJTlBDQVBfUFJPRFVDVF9OQU1FICIuLi8uLi92ZXJzaW9uLmgiIEhBVkVfVkVSU0lPTl9IKQorICAgIGlmKEhBVkVfVkVSU0lPTl9IKQorICAgICAgICBtZXNzYWdlKFNUQVRVUyAiSEFWRSB2ZXJzaW9uLmgiKQorICAgIGVsc2UoSEFWRV9WRVJTSU9OX0gpCisgICAgICAgIG1lc3NhZ2UoU1RBVFVTICJNSVNTSU5HIHZlcnNpb24uaCIpCisgICAgZW5kaWYoSEFWRV9WRVJTSU9OX0gpCisKIGVuZGlmKFdJTjMyKQogCiBpZihNU1ZDKQpAQCAtMzQ0LDYgKzM2MCwxMSBAQAogaW5jbHVkZShDaGVja1R5cGVTaXplKQogCiAjCisjIFRlc3RzIGFyZSBhIGJpdCBleHBlbnNpdmUgd2l0aCBWaXN1YWwgU3R1ZGlvIG9uIFdpbmRvd3MsIHNvLCBvbgorIyBXaW5kb3dzLCB3ZSBza2lwIHRlc3RzIGZvciBVTipYLW9ubHkgaGVhZGVycyBhbmQgZnVuY3Rpb25zLgorIworCisjCiAjIEhlYWRlciBmaWxlcy4KICMKIGNoZWNrX2luY2x1ZGVfZmlsZShpbnR0eXBlcy5oIEhBVkVfSU5UVFlQRVNfSCkKQEAgLTM1Nyw5ICszNzgsNyBAQAogICAgIGNoZWNrX2luY2x1ZGVfZmlsZShzeXMvaW9jY29tLmggSEFWRV9TWVNfSU9DQ09NX0gpCiAgICAgY2hlY2tfaW5jbHVkZV9maWxlKHN5cy9zb2NraW8uaCBIQVZFX1NZU19TT0NLSU9fSCkKICAgICBjaGVja19pbmNsdWRlX2ZpbGUoc3lzL3NlbGVjdC5oIEhBVkVfU1lTX1NFTEVDVF9IKQotZW5kaWYoTk9UIFdJTjMyKQotY2hlY2tfaW5jbHVkZV9maWxlKGxpbWl0cy5oIEhBVkVfTElNSVRTX0gpCi1pZihOT1QgV0lOMzIpCisKICAgICBjaGVja19pbmNsdWRlX2ZpbGUobmV0cGFja2V0L3BhY2tldC5oIEhBVkVfTkVUUEFDS0VUX1BBQ0tFVF9IKQogICAgIGNoZWNrX2luY2x1ZGVfZmlsZXMoInN5cy90eXBlcy5oO3N5cy9zb2NrZXQuaDtuZXQvaWYuaDtuZXQvcGZ2YXIuaCIgSEFWRV9ORVRfUEZWQVJfSCkKICAgICBpZihIQVZFX05FVF9QRlZBUl9IKQpAQCAtMzgxLDEzICs0MDAsNiBAQAogICAgICAgICAgICAgSEFWRV9QRl9OQVRfVEhST1VHSF9QRl9OT1JEUikKICAgICBlbmRpZihIQVZFX05FVF9QRlZBUl9IKQogICAgIGNoZWNrX2luY2x1ZGVfZmlsZShuZXRpbmV0L2lmX2V0aGVyLmggSEFWRV9ORVRJTkVUX0lGX0VUSEVSX0gpCi0gICAgaWYoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIkxpbnV4IikKLSAgICAgICAgY2hlY2tfaW5jbHVkZV9maWxlKGxpbnV4L3NvY2tpb3MuaCBIQVZFX0xJTlVYX1NPQ0tJT1NfSCkKLSAgICAgICAgIwotICAgICAgICAjIGxpbnV4L2lmX2JvbmRpbmcuaCByZXF1aXJlcyBzeXMvc29ja2V0LmguCi0gICAgICAgICMKLSAgICAgICAgY2hlY2tfaW5jbHVkZV9maWxlcygic3lzL3NvY2tldC5oO2xpbnV4L2lmX2JvbmRpbmcuaCIgSEFWRV9MSU5VWF9JRl9CT05ESU5HX0gpCi0gICAgZW5kaWYoKQogZW5kaWYoTk9UIFdJTjMyKQogCiAjCkBAIC0zOTUsMTIgKzQwNyw1OCBAQAogIwogY2hlY2tfZnVuY3Rpb25fZXhpc3RzKHN0cmVycm9yIEhBVkVfU1RSRVJST1IpCiBjaGVja19mdW5jdGlvbl9leGlzdHMoc3RyZXJyb3JfciBIQVZFX1NUUkVSUk9SX1IpCi1jaGVja19mdW5jdGlvbl9leGlzdHMoc3RyZXJyb3JfcyBIQVZFX1NUUkVSUk9SX1MpCitpZihIQVZFX1NUUkVSUk9SX1IpCisgICAgIworICAgICMgV2UgaGF2ZSBzdHJlcnJvcl9yOyBpZiB3ZSBkZWZpbmUgX0dOVV9TT1VSQ0UsIGlzIGl0IGEKKyAgICAjIFBPU0lYLWNvbXBsaWFudCBzdHJlcnJvcl9yKCkgb3IgYSBHTlUgc3RyZXJyb3JfcigpPworICAgICMKKyAgICBjaGVja19jX3NvdXJjZV9jb21waWxlcygKKyIjZGVmaW5lIF9HTlVfU09VUkNFCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIERlZmluZSBpdCBHTlUtc3R5bGU7IHRoYXQgd2lsbCBjYXVzZSBhbiBlcnJvciBpZiBpdCdzIG5vdCBHTlUtc3R5bGUgKi8KK2V4dGVybiBjaGFyICpzdHJlcnJvcl9yKGludCwgY2hhciAqLCBzaXplX3QpOworCitpbnQKK21haW4odm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKyIKKyAgICAgICAgICAgIEhBVkVfR05VX1NUUkVSUk9SX1IpCisgICAgaWYoTk9UIEhBVkVfR05VX1NUUkVSUk9SX1IpCisgICAgICAgIHNldChIQVZFX1BPU0lYX1NUUkVSUk9SX1IgWUVTKQorICAgIGVuZGlmKE5PVCBIQVZFX0dOVV9TVFJFUlJPUl9SKQorZWxzZShIQVZFX1NUUkVSUk9SX1IpCisgICAgIworICAgICMgV2UgZG9uJ3QgaGF2ZSBzdHJlcnJvcl9yOyBkbyB3ZSBoYXZlIF93Y3NlcnJvcl9zPworICAgICMKKyAgICBjaGVja19mdW5jdGlvbl9leGlzdHMoX3djc2Vycm9yX3MgSEFWRV9fV0NTRVJST1JfUykKK2VuZGlmKEhBVkVfU1RSRVJST1JfUikKKworIworIyBNYWtlIHN1cmUgd2UgaGF2ZSB2c25wcmludGYoKSBhbmQgc25wcmludGYoKTsgd2UgcmVxdWlyZSB0aGVtLgorIyBXZSB1c2UgY2hlY2tfc3ltYm9sX2V4aXN0cygpLCBhcyB0aGV5IGFyZW4ndCBuZWNlc3NhcmlseSBleHRlcm5hbAorIyBmdW5jdGlvbnMgLSBpbiBWaXN1YWwgU3R1ZGlvLCBmb3IgZXhhbXBsZSwgdGhleSdyZSBpbmxpbmUgZnVuY3Rpb25zCisjIGNhbGxpbmcgYSBjb21tb24gZXh0ZXJuYWwgZnVuY3Rpb24uCisjCitjaGVja19zeW1ib2xfZXhpc3RzKHZzbnByaW50ZiAic3RkaW8uaCIgSEFWRV9WU05QUklOVEYpCitpZihOT1QgSEFWRV9WU05QUklOVEYpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAidnNucHJpbnRmKCkgaXMgcmVxdWlyZWQgYnV0IHdhc24ndCBmb3VuZCIpCitlbmRpZihOT1QgSEFWRV9WU05QUklOVEYpCitjaGVja19zeW1ib2xfZXhpc3RzKHNucHJpbnRmICJzdGRpby5oIiBIQVZFX1NOUFJJTlRGKQoraWYoTk9UIEhBVkVfU05QUklOVEYpCisgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAic25wcmludGYoKSBpcyByZXF1aXJlZCBidXQgd2Fzbid0IGZvdW5kIikKK2VuZGlmKCkKKwogY2hlY2tfZnVuY3Rpb25fZXhpc3RzKHN0cmxjcHkgSEFWRV9TVFJMQ1BZKQogY2hlY2tfZnVuY3Rpb25fZXhpc3RzKHN0cmxjYXQgSEFWRV9TVFJMQ0FUKQotY2hlY2tfZnVuY3Rpb25fZXhpc3RzKHNucHJpbnRmIEhBVkVfU05QUklOVEYpCi1jaGVja19mdW5jdGlvbl9leGlzdHModnNucHJpbnRmIEhBVkVfVlNOUFJJTlRGKQorY2hlY2tfZnVuY3Rpb25fZXhpc3RzKGFzcHJpbnRmIEhBVkVfQVNQUklOVEYpCitjaGVja19mdW5jdGlvbl9leGlzdHModmFzcHJpbnRmIEhBVkVfVkFTUFJJTlRGKQogY2hlY2tfZnVuY3Rpb25fZXhpc3RzKHN0cnRva19yIEhBVkVfU1RSVE9LX1IpCitpZihOT1QgV0lOMzIpCisgICAgY2hlY2tfZnVuY3Rpb25fZXhpc3RzKHZzeXNsb2cgSEFWRV9WU1lTTE9HKQorZW5kaWYoKQogCiAjCiAjIFRoZXNlIHRlc3RzIGFyZSBmb3IgbmV0d29yayBhcHBsaWNhdGlvbnMgdGhhdCBuZWVkIHNvY2tldCBmdW5jdGlvbnMKQEAgLTQyOSw3ICs0ODcsNiBAQAogIwogc2V0KFBDQVBfTElOS19MSUJSQVJJRVMgIiIpCiBpbmNsdWRlKENoZWNrTGlicmFyeUV4aXN0cykKLWluY2x1ZGUoQ2hlY2tTeW1ib2xFeGlzdHMpCiBpZihXSU4zMikKICAgICAjCiAgICAgIyBXZSBuZWVkIHdpbnNvY2syLmggYW5kIHdzMnRjcGlwLmguCkBAIC00NjUsMTAgKzUyMiwxOCBAQAogICAgICAgICAgICAgIwogICAgICAgICAgICAgc2V0KFBDQVBfTElOS19MSUJSQVJJRVMgc29ja2V0IG5zbCAke1BDQVBfTElOS19MSUJSQVJJRVN9KQogICAgICAgICBlbHNlKExJQlNPQ0tFVF9IQVNfR0VUQUREUklORk8pCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICAjIFdlIGRpZG4ndCBmaW5kIGl0LgotICAgICAgICAgICAgIwotICAgICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiZ2V0YWRkcmluZm8gaXMgcmVxdWlyZWQsIGJ1dCB3YXNuJ3QgZm91bmQiKQorICAgICAgICAgICAgY2hlY2tfbGlicmFyeV9leGlzdHMobmV0d29yayBnZXRhZGRyaW5mbyAiIiBMSUJORVRXT1JLX0hBU19HRVRBRERSSU5GTykKKyAgICAgICAgICAgIGlmKExJQk5FVFdPUktfSEFTX0dFVEFERFJJTkZPKQorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIE9LLCB3ZSBmb3VuZCBpdCBpbiBsaWJuZXR3b3JrIChIYWlrdSkuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgIHNldChQQ0FQX0xJTktfTElCUkFSSUVTIG5ldHdvcmsgJHtQQ0FQX0xJTktfTElCUkFSSUVTfSkKKyAgICAgICAgICAgIGVsc2UoTElCTkVUV09SS19IQVNfR0VUQUREUklORk8pCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgV2UgZGlkbid0IGZpbmQgaXQuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgImdldGFkZHJpbmZvIGlzIHJlcXVpcmVkLCBidXQgd2Fzbid0IGZvdW5kIikKKyAgICAgICAgICAgIGVuZGlmKExJQk5FVFdPUktfSEFTX0dFVEFERFJJTkZPKQogICAgICAgICBlbmRpZihMSUJTT0NLRVRfSEFTX0dFVEFERFJJTkZPKQogCiAgICAgICAgICMKQEAgLTg0NCw2ICs5MDksMTI1IEBACiAgIGVuZGlmKE5PVCBDTUFLRV9VU0VfUFRIUkVBRFNfSU5JVCkKIGVuZGlmKE5PVCBXSU4zMikKIAoraWYoRU5BQkxFX1BST0ZJTElORykKKyAgICBpZihOT1QgTVNWQykKKyAgICAgICAgc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gLXBnIikKKyAgICAgICAgc2V0KENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC1wZyIpCisgICAgZW5kaWYoKQorZW5kaWYoKQorCisjCisjIEJhc2VkIG9uCisjCisjICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9jb21tb25tYXJrL2NtYXJrL2Jsb2IvbWFzdGVyL0ZpbmRBc2FuLmNtYWtlCisjCisjIFRoZSBNSVQgTGljZW5zZSAoTUlUKQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMgTWF0dGhldyBBcnNlbmF1bHQKKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorIyBUSEUgU09GVFdBUkUuCisjCisjIFRlc3QgaWYgdGhlIGVhY2ggb2YgdGhlIHNhbml0aXplcnMgaW4gdGhlIEVOQUJMRV9TQU5JVElaRVJTIGxpc3QgYXJlCisjIHN1cHBvcnRlZCBieSB0aGUgY29tcGlsZXIsIGFuZCwgaWYgc28sIGFkZHMgdGhlIGFwcHJvcHJpYXRlIGZsYWdzIHRvCisjIENNQUtFX0NfRkxBR1MsIENNQUtFX0NYWF9GTEFHUywgYW5kIFNBTklUSVpFUl9GTEFHUy4gIElmIG5vdCwgaXQgZmFpbHMuCisjCisjIERvIHRoaXMgbGFzdCwgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIHByZXZlbnQgY29uZmlndXJhdGlvbiBvbiBMaW51eAorIyBmcm9tIHNvbWVob3cgZGVjaWRpbmcgaXQgZG9lc24ndCBuZWVkIC1scHRocmVhZCB3aGVuIGJ1aWxkaW5nIHJwY2FwZAorIyAoaXQgZG9lcyByZXF1aXJlIGl0LCBidXQgc29tZWhvdywgaW4gc29tZSBteXN0ZXJpb3VzIGZhc2hpb24gdGhhdCBubworIyBvYnZpb3VzIENNYWtlIGRlYnVnZ2luZyBmbGFnIHJldmVhbHMsIGl0IGRvZXNuJ3QgcmVhbGl6ZSB0aGF0IGlmIHdlCisjIHR1cm4gc2FuaXRpemVyIHN0dWZmIG9uKS4KKyMKK3NldChTQU5JVElaRVJfRkxBR1MgIiIpCitmb3JlYWNoKHNhbml0aXplciBJTiBMSVNUUyBFTkFCTEVfU0FOSVRJWkVSUykKKyAgICAjIFNldCAtV2Vycm9yIHRvIGNhdGNoICJhcmd1bWVudCB1bnVzZWQgZHVyaW5nIGNvbXBpbGF0aW9uIiB3YXJuaW5ncworCisgICAgbWVzc2FnZShTVEFUVVMgIkNoZWNraW5nIHNhbml0aXplciAke3Nhbml0aXplcn0iKQorICAgIHNldChzYW5pdGl6ZXJfdmFyaWFibGUgInNhbml0aXplXyR7c2FuaXRpemVyfSIpCisgICAgc2V0KENNQUtFX1JFUVVJUkVEX0ZMQUdTICItV2Vycm9yIC1mc2FuaXRpemU9JHtzYW5pdGl6ZXJ9IikKKyAgICBjaGVja19jX2NvbXBpbGVyX2ZsYWcoIi1mc2FuaXRpemU9JHtzYW5pdGl6ZXJ9IiAke3Nhbml0aXplcl92YXJpYWJsZX0pCisgICAgaWYoJHske3Nhbml0aXplcl92YXJpYWJsZX19KQorICAgICAgICBzZXQoU0FOSVRJWkVSX0ZMQUdTICIke1NBTklUSVpFUl9GTEFHU30gLWZzYW5pdGl6ZT0ke3Nhbml0aXplcn0iKQorICAgICAgICBtZXNzYWdlKFNUQVRVUyAiJHtzYW5pdGl6ZXJ9IHNhbml0aXplciBzdXBwb3J0ZWQgdXNpbmcgLWZzYW5pdGl6ZXI9JHtzYW5pdGl6ZXJ9IikKKyAgICBlbHNlKCkKKyAgICAgICAgIworICAgICAgICAjIFRyeSB0aGUgdmVyc2lvbnMgc3VwcG9ydGVkIHByaW9yIHRvIENsYW5nIDMuMi4KKyAgICAgICAgIyBJZiB0aGUgc2FuaXRpemVyIGlzICJhZGRyZXNzIiwgdHJ5IC1mc2FuaXRpemUtYWRkcmVzcy4KKyAgICAgICAgIyBJZiBpdCdzICJ1bmRlZmluZWQiLCB0cnkgLWZjYXRjaC11bmRlZmluZWQtYmVoYXZpb3IuCisgICAgICAgICMgT3RoZXJ3aXNlLCBnaXZlIHVwLgorICAgICAgICAjCisgICAgICAgIHNldChzYW5pdGl6ZXJfdmFyaWFibGUgIk9MRF8ke3Nhbml0aXplcl92YXJpYWJsZX0iKQorICAgICAgICBpZiAoIiR7c2FuaXRpemVyfSIgU1RSRVFVQUwgImFkZHJlc3MiKQorICAgICAgICAgICAgc2V0KENNQUtFX1JFUVVJUkVEX0ZMQUdTICItV2Vycm9yIC1mc2FuaXRpemUtYWRkcmVzcyIpCisgICAgICAgICAgICBjaGVja19jX2NvbXBpbGVyX2ZsYWcoIi1mc2FuaXRpemUtYWRkcmVzcyIgJHtzYW5pdGl6ZXJfdmFyaWFibGV9KQorICAgICAgICAgICAgaWYoJHske3Nhbml0aXplcl92YXJpYWJsZX19KQorICAgICAgICAgICAgICAgIHNldChTQU5JVElaRVJfRkxBR1MgIiR7U0FOSVRJWkVSX0ZMQUdTfSAtZnNhbml0aXplLWFkZHJlc3MiKQorICAgICAgICAgICAgICAgIG1lc3NhZ2UoU1RBVFVTICIke3Nhbml0aXplcn0gc2FuaXRpemVyIHN1cHBvcnRlZCB1c2luZyAtZnNhbml0aXplLWFkZHJlc3MiKQorICAgICAgICAgICAgZWxzZSgpCisgICAgICAgICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiJHtzYW5pdGl6ZXJ9IGlzbid0IGEgc3VwcG9ydGVkIHNhbml0aXplciIpCisgICAgICAgICAgICBlbmRpZigpCisgICAgICAgIGVsc2VpZigiJHtzYW5pdGl6ZXJ9IiBTVFJFUVVBTCAidW5kZWZpbmVkIikKKyAgICAgICAgICAgIHNldChDTUFLRV9SRVFVSVJFRF9GTEFHUyAiLVdlcnJvciAtZmNhdGNoLXVuZGVmaW5lZC1iZWhhdmlvciIpCisgICAgICAgICAgICBjaGVja19jX2NvbXBpbGVyX2ZsYWcoIi1mY2F0Y2gtdW5kZWZpbmVkLWJlaGF2aW9yIiAke3Nhbml0aXplcl92YXJpYWJsZX0pCisgICAgICAgICAgICBpZigkeyR7c2FuaXRpemVyX3ZhcmlhYmxlfX0pCisgICAgICAgICAgICAgICAgc2V0KFNBTklUSVpFUl9GTEFHUyAiJHtTQU5JVElaRVJfRkxBR1N9IC1mY2F0Y2gtdW5kZWZpbmVkLWJlaGF2aW9yIikKKyAgICAgICAgICAgICAgICBtZXNzYWdlKFNUQVRVUyAiJHtzYW5pdGl6ZXJ9IHNhbml0aXplciBzdXBwb3J0ZWQgdXNpbmcgY2F0Y2gtdW5kZWZpbmVkLWJlaGF2aW9yIikKKyAgICAgICAgICAgIGVsc2UoKQorICAgICAgICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIiR7c2FuaXRpemVyfSBpc24ndCBhIHN1cHBvcnRlZCBzYW5pdGl6ZXIiKQorICAgICAgICAgICAgZW5kaWYoKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIiR7c2FuaXRpemVyfSBpc24ndCBhIHN1cHBvcnRlZCBzYW5pdGl6ZXIiKQorICAgICAgICBlbmRpZigpCisgICAgZW5kaWYoKQorCisgICAgdW5zZXQoQ01BS0VfUkVRVUlSRURfRkxBR1MpCitlbmRmb3JlYWNoKCkKKworaWYoTk9UICIke1NBTklUSVpFUl9GTEFHU30iIFNUUkVRVUFMICIiKQorICBzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAtTzEgLWcgJHtTQU5JVElaRVJfRkxBR1N9IC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIC1mbm8tb3B0aW1pemUtc2libGluZy1jYWxscyIpCisgIHNldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtTzEgLWcgJHtTQU5JVElaRVJfRkxBR1N9IC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIC1mbm8tb3B0aW1pemUtc2libGluZy1jYWxscyIpCitlbmRpZigpCisKKyMKKyMgT3BlblNTTC9saWJyZXNzbC4KKyMKK2ZpbmRfcGFja2FnZShPcGVuU1NMKQoraWYoT1BFTlNTTF9GT1VORCkKKyAgIworICAjIFdlIGhhdmUgT3BlblNTTC4KKyAgIworICBpbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTSAke09QRU5TU0xfSU5DTFVERV9ESVJ9KQorICBzZXQoUENBUF9MSU5LX0xJQlJBUklFUyAke1BDQVBfTElOS19MSUJSQVJJRVN9ICR7T1BFTlNTTF9MSUJSQVJJRVN9KQorICBzZXQoSEFWRV9PUEVOU1NMIFlFUykKK2VuZGlmKE9QRU5TU0xfRk9VTkQpCisKKyMKKyMgQWRkaXRpb25hbCBsaW5rZXIgZmxhZ3MuCisjCitzZXQoTElOS0VSX0ZMQUdTICIke1NBTklUSVpFUl9GTEFHU30iKQoraWYoRU5BQkxFX1BST0ZJTElORykKKyAgICBpZihNU1ZDKQorICAgICAgICBzZXQoTElOS0VSX0ZMQUdTICIgL1BST0ZJTEUiKQorICAgIGVsc2UoKQorICAgICAgICBzZXQoTElOS0VSX0ZMQUdTICIgLXBnIikKKyAgICBlbmRpZigpCitlbmRpZigpCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIElucHV0IGZpbGVzCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtODY1LDExICsxMDQ5LDI1IEBACiApCiAKIGlmKFdJTjMyKQotICAgIHNldChQUk9KRUNUX1NPVVJDRV9MSVNUX0MgJHtQUk9KRUNUX1NPVVJDRV9MSVNUX0N9IG1pc3Npbmcvd2luX3NucHJpbnRmLmMpCisgICAgIworICAgICMgV2UgYWRkIHRoZSBjaGFyYWN0ZXIgc2V0IGNvbnZlcnNpb24gcm91dGluZXM7IHRoZXkncmUgV2luZG93cy1vbmx5CisgICAgIyBmb3Igbm93LgorICAgICMKKyAgICAjIFdlIGFzc3VtZSB3ZSBkb24ndCBoYXZlIGFzcHJpbnRmKCksIGFuZCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uCisgICAgIyB0aGF0IHVzZXMgX3ZzY3ByaW50ZigpIHRvIGRldGVybWluZSBob3cgYmlnIHRoZSBzdHJpbmcgbmVlZHMgdG8gYmUuCisgICAgIworICAgIHNldChQUk9KRUNUX1NPVVJDRV9MSVNUX0MgJHtQUk9KRUNUX1NPVVJDRV9MSVNUX0N9CisgICAgICAgIGNoYXJjb252LmMgbWlzc2luZy93aW5fYXNwcmludGYuYykKIGVsc2UoKQotICAgIGlmKE5PVCBIQVZFX1NOUFJJTlRGKQotICAgICAgICBzZXQoUFJPSkVDVF9TT1VSQ0VfTElTVF9DICR7UFJPSkVDVF9TT1VSQ0VfTElTVF9DfSBtaXNzaW5nL3NucHJpbnRmLmMpCi0gICAgZW5kaWYoTk9UIEhBVkVfU05QUklOVEYpCisgICAgaWYoTk9UIEhBVkVfQVNQUklOVEYpCisgICAgICAgIHNldChQUk9KRUNUX1NPVVJDRV9MSVNUX0MgJHtQUk9KRUNUX1NPVVJDRV9MSVNUX0N9IG1pc3NpbmcvYXNwcmludGYuYykKKyAgICBlbmRpZigpCisgICAgaWYoTk9UIEhBVkVfU1RSTENBVCkKKyAgICAgICAgc2V0KFBST0pFQ1RfU09VUkNFX0xJU1RfQyAke1BST0pFQ1RfU09VUkNFX0xJU1RfQ30gbWlzc2luZy9zdHJsY2F0LmMpCisgICAgZW5kaWYoTk9UIEhBVkVfU1RSTENBVCkKKyAgICBpZihOT1QgSEFWRV9TVFJMQ1BZKQorICAgICAgICBzZXQoUFJPSkVDVF9TT1VSQ0VfTElTVF9DICR7UFJPSkVDVF9TT1VSQ0VfTElTVF9DfSBtaXNzaW5nL3N0cmxjcHkuYykKKyAgICBlbmRpZihOT1QgSEFWRV9TVFJMQ1BZKQogICAgIGlmKE5PVCBIQVZFX1NUUlRPS19SKQogICAgICAgICBzZXQoUFJPSkVDVF9TT1VSQ0VfTElTVF9DICR7UFJPSkVDVF9TT1VSQ0VfTElTVF9DfSBtaXNzaW5nL3N0cnRva19yLmMpCiAgICAgZW5kaWYoTk9UIEhBVkVfU1RSVE9LX1IpCkBAIC05MzEsMTMgKzExMjksMTYgQEAKICAgICAgICAgICAgICMgYXMgaXQncyBhIExpbnV4LCBpdCBzaG91bGQgdXNlIHBhY2tldCBzb2NrZXRzLAogICAgICAgICAgICAgIyBpbnN0ZWFkLgogICAgICAgICAgICAgIwotICAgICAgICAgICAgIwogICAgICAgICAgICAgIyBXZSBuZWVkOgogICAgICAgICAgICAgIwogICAgICAgICAgICAgIyAgc3lzL3R5cGVzLmgsIGJlY2F1c2UgRnJlZUJTRCAxMCdzIG5ldC9icGYuaAogICAgICAgICAgICAgIyAgcmVxdWlyZXMgdGhhdCB2YXJpb3VzIEJTRC1zdHlsZSBpbnRlZ2VyIHR5cGVzCiAgICAgICAgICAgICAjICBiZSBkZWZpbmVkOwogICAgICAgICAgICAgIworICAgICAgICAgICAgIyAgc3lzL3RpbWUuaCwgYmVjYXVzZSBBSVggNS4yIGFuZCA1LjMncyBuZXQvYnBmLmgKKyAgICAgICAgICAgICMgIGRvZXNuJ3QgaW5jbHVkZSBpdCBidXQgZG9lcyB1c2Ugc3RydWN0IHRpbWV2YWwKKyAgICAgICAgICAgICMgIGluIGlvY3RsIGRlZmluaXRpb25zOworICAgICAgICAgICAgIwogICAgICAgICAgICAgIyAgc3lzL2lvY3RsLmggYW5kLCBpZiB3ZSBoYXZlIGl0LCBzeXMvaW9jY29tLmgsCiAgICAgICAgICAgICAjICBiZWNhdXNlIG5ldC9icGYuaCBkZWZpbmVzIGlvY3RsczsKICAgICAgICAgICAgICMKQEAgLTk1Miw5ICsxMTUzLDkgQEAKICAgICAgICAgICAgICMgb2YgdGhvc2UgaGVhZGVycyBpdHNlbGYuCiAgICAgICAgICAgICAjCiAgICAgICAgICAgICBpZihIQVZFX1NZU19JT0NDT01fSCkKLSAgICAgICAgICAgICAgICBjaGVja19zeW1ib2xfZXhpc3RzKEJJT0NTRVRJRiAic3lzL3R5cGVzLmg7c3lzL2lvY3RsLmg7c3lzL3NvY2tldC5oO3N5cy9pb2Njb20uaDtuZXQvYnBmLmg7bmV0L2lmLmgiIEJQRl9IX0RFRklORVNfQklPQ1NFVElGKQorICAgICAgICAgICAgICAgIGNoZWNrX3N5bWJvbF9leGlzdHMoQklPQ1NFVElGICJzeXMvdHlwZXMuaDtzeXMvdGltZS5oO3N5cy9pb2N0bC5oO3N5cy9zb2NrZXQuaDtzeXMvaW9jY29tLmg7bmV0L2JwZi5oO25ldC9pZi5oIiBCUEZfSF9ERUZJTkVTX0JJT0NTRVRJRikKICAgICAgICAgICAgIGVsc2UoSEFWRV9TWVNfSU9DQ09NX0gpCi0gICAgICAgICAgICAgICAgY2hlY2tfc3ltYm9sX2V4aXN0cyhCSU9DU0VUSUYgInN5cy90eXBlcy5oO3N5cy9pb2N0bC5oO3N5cy9zb2NrZXQuaDtuZXQvYnBmLmg7bmV0L2lmLmgiIEJQRl9IX0RFRklORVNfQklPQ1NFVElGKQorICAgICAgICAgICAgICAgIGNoZWNrX3N5bWJvbF9leGlzdHMoQklPQ1NFVElGICJzeXMvdHlwZXMuaDtzeXMvdGltZS5oO3N5cy9pb2N0bC5oO3N5cy9zb2NrZXQuaDtuZXQvYnBmLmg7bmV0L2lmLmgiIEJQRl9IX0RFRklORVNfQklPQ1NFVElGKQogICAgICAgICAgICAgZW5kaWYoSEFWRV9TWVNfSU9DQ09NX0gpCiAgICAgICAgIGVuZGlmKEhBVkVfTkVUX0JQRl9IKQogICAgICAgICBjaGVja19pbmNsdWRlX2ZpbGUobmV0L3BmaWx0LmggSEFWRV9ORVRfUEZJTFRfSCkKQEAgLTk2NCw2ICsxMTY1LDcgQEAKICAgICAgICAgY2hlY2tfaW5jbHVkZV9maWxlKGxpbnV4L3NvY2tldC5oIEhBVkVfTElOVVhfU09DS0VUX0gpCiAgICAgICAgIGNoZWNrX2luY2x1ZGVfZmlsZShuZXQvcmF3LmggSEFWRV9ORVRfUkFXX0gpCiAgICAgICAgIGNoZWNrX2luY2x1ZGVfZmlsZShzeXMvZGxwaS5oIEhBVkVfU1lTX0RMUElfSCkKKyAgICAgICAgY2hlY2tfaW5jbHVkZV9maWxlKGNvbmZpZy9IYWlrdUNvbmZpZy5oIEhBVkVfQ09ORklHX0hBSUtVQ09ORklHX0gpCiAKICAgICAgICAgaWYoQlBGX0hfREVGSU5FU19CSU9DU0VUSUYpCiAgICAgICAgICAgICAjCkBAIC0xMDA3LDYgKzEyMDksMTEgQEAKICAgICAgICAgICAgICMgRExQSSBvbiBwcmUtU29sYXJpcyAxMSBTdW5PUyA1LCBIUC1VWCwgcG9zc2libHkgb3RoZXJzLgogICAgICAgICAgICAgIwogICAgICAgICAgICAgc2V0KFBDQVBfVFlQRSBkbHBpKQorICAgICAgICBlbHNlaWYoSEFWRV9DT05GSUdfSEFJS1VDT05GSUdfSCkKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgSGFpa3UuCisgICAgICAgICAgICAjCisgICAgICAgICAgICBzZXQoUENBUF9UWVBFIGhhaWt1KQogICAgICAgICBlbHNlKCkKICAgICAgICAgICAgICMKICAgICAgICAgICAgICMgTm90aGluZyB3ZSBzdXBwb3J0LgpAQCAtMTAxNywxOCArMTIyNCwyMCBAQAogZW5kaWYoV0lOMzIpCiBtZXNzYWdlKFNUQVRVUyAiUGFja2V0IGNhcHR1cmUgbWVjaGFuaXNtIHR5cGU6ICR7UENBUF9UWVBFfSIpCiAKK2ZpbmRfcGFja2FnZShQa2dDb25maWcgUVVJRVQpCisKICMKICMgRG8gY2FwdHVyZS1tZWNoYW5pc20tZGVwZW5kZW50IHRlc3RzLgogIwogaWYoV0lOMzIpCiAgICAgaWYoUENBUF9UWVBFIFNUUkVRVUFMICJucGYiKQogICAgICAgICAjCi0gICAgICAgICMgTGluayB3aXRoIHBhY2tldC5kbGwgYmVmb3JlIFdpblNvY2syLgorICAgICAgICAjIExpbmsgd2l0aCBwYWNrZXQuZGxsIGJlZm9yZSBXaW5zb2NrMi4KICAgICAgICAgIwogICAgICAgICBzZXQoUENBUF9MSU5LX0xJQlJBUklFUyAke1BBQ0tFVF9MSUJSQVJJRVN9ICR7UENBUF9MSU5LX0xJQlJBUklFU30pCiAgICAgZWxzZWlmKFBDQVBfVFlQRSBTVFJFUVVBTCAibnVsbCIpCiAgICAgZWxzZSgpCi0gICAgICAgIG1lc3NhZ2UoRVJST1IgIiR7UENBUF9UWVBFfSBpcyBub3QgYSB2YWxpZCBwY2FwIHR5cGUiKQorICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICIke1BDQVBfVFlQRX0gaXMgbm90IGEgdmFsaWQgcGNhcCB0eXBlIikKICAgICBlbmRpZigpCiBlbHNlKFdJTjMyKQogICAgIGlmKFBDQVBfVFlQRSBTVFJFUVVBTCAiZGxwaSIpCkBAIC0xMDg4LDcwICsxMjk3LDM0IEBACiAKICAgICAgICAgIwogICAgICAgICAjIERvIHdlIGhhdmUgbGlibmw/CisgICAgICAgICMgV2Ugb25seSB3YW50IHZlcnNpb24gMy4gIFZlcnNpb24gMiB3YXMsIGFwcGFyZW50bHksCisgICAgICAgICMgc2hvcnQtbGl2ZWQsIGFuZCB2ZXJzaW9uIDEgaXMgc291cmNlIGFuZCBiaW5hcnkKKyAgICAgICAgIyBpbmNvbXBhdGlibGUgd2l0aCB2ZXJzaW9uIDMsIGFuZCBpdCBhcHBlYXJzIHRoYXQsCisgICAgICAgICMgdGhlc2UgZGF5cywgZXZlcnlib2R5J3MgdXNpbmcgdmVyc2lvbiAzLiAgV2UncmUKKyAgICAgICAgIyBub3Qgc3VwcG9ydGluZyBvbGRlciB2ZXJzaW9ucyBvZiB0aGUgTGludXgga2VybmVsOworICAgICAgICAjIGxldCdzIGRyb3Agc3VwcG9ydCBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgbGlibmwsIHRvby4KICAgICAgICAgIwogICAgICAgICBpZihCVUlMRF9XSVRIX0xJQk5MKQotICAgICAgICAgICAgIwotICAgICAgICAgICAgIyBUcnkgbGlibmwgMy54IGZpcnN0LgotICAgICAgICAgICAgIwotICAgICAgICAgICAgY21ha2VfcHVzaF9jaGVja19zdGF0ZSgpCi0gICAgICAgICAgICBzZXQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTIG5sLTMpCi0gICAgICAgICAgICBjaGVja19mdW5jdGlvbl9leGlzdHMobmxfc29ja2V0X2FsbG9jIEhBVkVfTElCTkwpCi0gICAgICAgICAgICBjbWFrZV9wb3BfY2hlY2tfc3RhdGUoKQotICAgICAgICAgICAgaWYoSEFWRV9MSUJOTCkKLSAgICAgICAgICAgICAgICAjCi0gICAgICAgICAgICAgICAgIyBZZXMsIHdlIGhhdmUgbGlibmwgMy54LgotICAgICAgICAgICAgICAgICMKLSAgICAgICAgICAgICAgICBzZXQoUENBUF9MSU5LX0xJQlJBUklFUyBubC1nZW5sLTMgbmwtMyAke1BDQVBfTElOS19MSUJSQVJJRVN9KQotICAgICAgICAgICAgICAgIHNldChIQVZFX0xJQk5MXzNfeCBPTikKLSAgICAgICAgICAgICAgICBzZXQoSEFWRV9MSUJOTF9OTEUgT04pCi0gICAgICAgICAgICAgICAgc2V0KEhBVkVfTElCTkxfU09DS0VUUyBPTikKLSAgICAgICAgICAgICAgICBpbmNsdWRlX2RpcmVjdG9yaWVzKCIvdXNyL2luY2x1ZGUvbGlibmwzIikKKyAgICAgICAgICAgIHBrZ19jaGVja19tb2R1bGVzKExJQk5MIGxpYm5sLTMuMCkKKyAgICAgICAgICAgIGlmKExJQk5MX0ZPVU5EKQorICAgICAgICAgICAgICAgIHNldChQQ0FQX0xJTktfTElCUkFSSUVTICR7TElCTkxfTElCUkFSSUVTfSAke1BDQVBfTElOS19MSUJSQVJJRVN9KQogICAgICAgICAgICAgZWxzZSgpCi0gICAgICAgICAgICAgICAgIwotICAgICAgICAgICAgICAgICMgVHJ5IGxpYm5sIDIueC4KLSAgICAgICAgICAgICAgICAjCiAgICAgICAgICAgICAgICAgY21ha2VfcHVzaF9jaGVja19zdGF0ZSgpCi0gICAgICAgICAgICAgICAgc2V0KENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyBubCkKKyAgICAgICAgICAgICAgICBzZXQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTIG5sLTMpCiAgICAgICAgICAgICAgICAgY2hlY2tfZnVuY3Rpb25fZXhpc3RzKG5sX3NvY2tldF9hbGxvYyBIQVZFX0xJQk5MKQogICAgICAgICAgICAgICAgIGNtYWtlX3BvcF9jaGVja19zdGF0ZSgpCiAgICAgICAgICAgICAgICAgaWYoSEFWRV9MSUJOTCkKICAgICAgICAgICAgICAgICAgICAgIwotICAgICAgICAgICAgICAgICAgICAjIFllcywgd2UgaGF2ZSBsaWJubCAyLnguCisgICAgICAgICAgICAgICAgICAgICMgWWVzLCB3ZSBoYXZlIGxpYm5sIDMueC4KICAgICAgICAgICAgICAgICAgICAgIwotICAgICAgICAgICAgICAgICAgICBzZXQoUENBUF9MSU5LX0xJQlJBUklFUyBubC1nZW5sIG5sICR7UENBUF9MSU5LX0xJQlJBUklFU30pCi0gICAgICAgICAgICAgICAgICAgIHNldChIQVZFX0xJQk5MXzJfeCBPTikKLSAgICAgICAgICAgICAgICAgICAgc2V0KEhBVkVfTElCTkxfTkxFIE9OKQotICAgICAgICAgICAgICAgICAgICBzZXQoSEFWRV9MSUJOTF9TT0NLRVRTIE9OKQotICAgICAgICAgICAgICAgIGVsc2UoKQotICAgICAgICAgICAgICAgICAgICAjCi0gICAgICAgICAgICAgICAgICAgICMgTm8sIHdlIGRvbid0OyBkbyB3ZSBoYXZlIGxpYm5sIDEueD8KLSAgICAgICAgICAgICAgICAgICAgIwotICAgICAgICAgICAgICAgICAgICBjbWFrZV9wdXNoX2NoZWNrX3N0YXRlKCkKLSAgICAgICAgICAgICAgICAgICAgc2V0KENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUyBubCkKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tfZnVuY3Rpb25fZXhpc3RzKG5sX2hhbmRsZV9hbGxvYyBIQVZFX0xJQk5MKQotICAgICAgICAgICAgICAgICAgICBjbWFrZV9wb3BfY2hlY2tfc3RhdGUoKQotICAgICAgICAgICAgICAgICAgICBpZihIQVZFX0xJQk5MKQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFBDQVBfTElOS19MSUJSQVJJRVMgbmwgJHtQQ0FQX0xJTktfTElCUkFSSUVTfSkKLSAgICAgICAgICAgICAgICAgICAgZW5kaWYoKQorICAgICAgICAgICAgICAgICAgICBzZXQoUENBUF9MSU5LX0xJQlJBUklFUyBubC1nZW5sLTMgbmwtMyAke1BDQVBfTElOS19MSUJSQVJJRVN9KQorICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX2RpcmVjdG9yaWVzKCIvdXNyL2luY2x1ZGUvbGlibmwzIikKICAgICAgICAgICAgICAgICBlbmRpZigpCiAgICAgICAgICAgICBlbmRpZigpCisgICAgICAgIGVsc2UoKQorICAgICAgICAgICAgdW5zZXQoSEFWRV9MSUJOTCBDQUNIRSkgIyBjaGVja19mdW5jdGlvbl9leGlzdHMgc3RvcmVzIHJlc3VsdHMgaW4gY2FjaGUKICAgICAgICAgZW5kaWYoKQogCi0gICAgICAgIGNoZWNrX2luY2x1ZGVfZmlsZShsaW51eC9ldGh0b29sLmggSEFWRV9MSU5VWF9FVEhUT09MX0gpCi0KLSAgICAgICAgIwotICAgICAgICAjIENoZWNrcyB0byBzZWUgaWYgdHBhY2tldF9zdGF0cyBpcyBkZWZpbmVkIGluIGxpbnV4L2lmX3BhY2tldC5oCi0gICAgICAgICMgSWYgc28gdGhlbiBwY2FwLWxpbnV4LmMgY2FuIHVzZSB0aGlzIHRvIHJlcG9ydCBwcm9wZXIgc3RhdGlzdGljcy4KLSAgICAgICAgIwotICAgICAgICAjIFhYWCAtIHRoZXJlJ3Mgbm8gY2hlY2tfdHlwZSgpIG1hY3JvIHRoYXQncyBsaWtlIGNoZWNrX3R5cGVfc2l6ZSgpCi0gICAgICAgICMgZXhjZXB0IHRoYXQgaXQgb25seSBjaGVja3MgZm9yIHRoZSBleGlzdGVuY2Ugb2YgdGhlIHN0cnVjdHVyZSB0eXBlLAotICAgICAgICAjIHNvIHdlIHVzZSBjaGVja190eXBlX3NpemUoKSBhbmQgaWdub3JlIHRoZSBzaXplLgotICAgICAgICAjCi0gICAgICAgIGNtYWtlX3B1c2hfY2hlY2tfc3RhdGUoKQotICAgICAgICBzZXQoQ01BS0VfRVhUUkFfSU5DTFVERV9GSUxFUyBsaW51eC9pZl9wYWNrZXQuaCkKLSAgICAgICAgY2hlY2tfdHlwZV9zaXplKCJzdHJ1Y3QgdHBhY2tldF9zdGF0cyIgU1RSVUNUX1RQQUNLRVRfU1RBVFMpCi0gICAgICAgIGNtYWtlX3BvcF9jaGVja19zdGF0ZSgpCi0KICAgICAgICAgY2hlY2tfc3RydWN0X2hhc19tZW1iZXIoInN0cnVjdCB0cGFja2V0X2F1eGRhdGEiIHRwX3ZsYW5fdGNpIGxpbnV4L2lmX3BhY2tldC5oIEhBVkVfU1RSVUNUX1RQQUNLRVRfQVVYREFUQV9UUF9WTEFOX1RDSSkKICAgICBlbHNlaWYoUENBUF9UWVBFIFNUUkVRVUFMICJicGYiKQogICAgICAgICAjCkBAIC0xMTc1LDEzICsxMzQ4LDIzIEBACiAgICAgICAgICAgICBjaGVja190eXBlX3NpemUoInN0cnVjdCBCUEZfVElNRVZBTCIgU1RSVUNUX0JQRl9USU1FVkFMKQogICAgICAgICBlbmRpZigpCiAgICAgICAgIGNtYWtlX3BvcF9jaGVja19zdGF0ZSgpCisgICAgZWxzZWlmKFBDQVBfVFlQRSBTVFJFUVVBTCAiaGFpa3UiKQorICAgICAgICAjCisgICAgICAgICMgQ2hlY2sgZm9yIHNvbWUgaGVhZGVycyBqdXN0IGluIGNhc2UuCisgICAgICAgICMKKyAgICAgICAgY2hlY2tfaW5jbHVkZV9maWxlcygibmV0L2lmLmg7bmV0L2lmX2RsLmg7bmV0L2lmX3R5cGVzLmgiIEhBVkVfTkVUX0lGX1RZUEVTX0gpCisgICAgICAgIHNldChQQ0FQX1NSQyBwY2FwLSR7UENBUF9UWVBFfS5jcHApCiAgICAgZWxzZWlmKFBDQVBfVFlQRSBTVFJFUVVBTCAibnVsbCIpCiAgICAgZWxzZSgpCiAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIiR7UENBUF9UWVBFfSBpcyBub3QgYSB2YWxpZCBwY2FwIHR5cGUiKQogICAgIGVuZGlmKCkKIGVuZGlmKFdJTjMyKQogCi1zZXQoUFJPSkVDVF9TT1VSQ0VfTElTVF9DICR7UFJPSkVDVF9TT1VSQ0VfTElTVF9DfSBwY2FwLSR7UENBUF9UWVBFfS5jKQoraWYoTk9UIERFRklORUQgUENBUF9TUkMpCitzZXQoUENBUF9TUkMgcGNhcC0ke1BDQVBfVFlQRX0uYykKK2VuZGlmKCkKKworc2V0KFBST0pFQ1RfU09VUkNFX0xJU1RfQyAke1BST0pFQ1RfU09VUkNFX0xJU1RfQ30gJHtQQ0FQX1NSQ30pCiAKICMKICMgTm93IGZpZ3VyZSBvdXQgaG93IHdlIGdldCBhIGxpc3Qgb2YgaW50ZXJmYWNlcyBhbmQgYWRkcmVzc2VzLApAQCAtMTI4NywxMSArMTQ3MCwxMyBAQAogIyBDaGVjayBmb3IgYWRkaXRpb25hbCBuYXRpdmUgc25pZmZpbmcgY2FwYWJpbGl0aWVzLgogIwogCi0jIENoZWNrIGZvciBVU0Igc25pZmZpbmcgc3VwcG9ydCBvbiBMaW51eC4KLSMgT24gRnJlZUJTRCwgaXQgdXNlcyBCUEYsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgc3BlY2lhbCBoZXJlLgotaWYoTk9UIERJU0FCTEVfVVNCKQotICAgIGlmKENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJMaW51eCIpCi0gICAgICAgIHNldChQQ0FQX1NVUFBPUlRfVVNCIFRSVUUpCisjCisjIFZhcmlvdXMgTGludXgtc3BlY2lmaWMgbWVjaGFuaXNtcy4KKyMKK2lmKENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJMaW51eCIpCisgICAgIyBDaGVjayBmb3IgdXNibW9uIFVTQiBzbmlmZmluZyBzdXBwb3J0LgorICAgIGlmKE5PVCBESVNBQkxFX0xJTlVYX1VTQk1PTikKKyAgICAgICAgc2V0KFBDQVBfU1VQUE9SVF9MSU5VWF9VU0JNT04gVFJVRSkKICAgICAgICAgc2V0KFBST0pFQ1RfU09VUkNFX0xJU1RfQyAke1BST0pFQ1RfU09VUkNFX0xJU1RfQ30gcGNhcC11c2ItbGludXguYykKICAgICAgICAgc2V0KExJTlVYX1VTQl9NT05fREVWIC9kZXYvdXNibW9uKQogICAgICAgICAjCkBAIC0xMzIxLDEwICsxNTA2LDkgQEAKICAgICAgICAgICAgIGVuZGlmKEhBVkVfTElOVVhfQ09NUElMRVJfSCkKICAgICAgICAgZW5kaWYoKQogICAgIGVuZGlmKCkKLWVuZGlmKCkKIAotIyBDaGVjayBmb3IgbmV0ZmlsdGVyIHNuaWZmaW5nIHN1cHBvcnQuCi1pZihDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiTGludXgiKQorICAgICMKKyAgICAjIENoZWNrIGZvciBuZXRmaWx0ZXIgc25pZmZpbmcgc3VwcG9ydC4KICAgICAjCiAgICAgIyBMaWZlJ3MgdG9vIHNob3J0IHRvIGRlYWwgd2l0aCB0cnlpbmcgdG8gZ2V0IHRoaXMgdG8gY29tcGlsZQogICAgICMgaWYgeW91IGRvbid0IGdldCB0aGUgcmlnaHQgdHlwZXMgZGVmaW5lZCB3aXRoCkBAIC0xMzgwLDYgKzE1NjQsNDggQEAKICAgICBlbmRpZihQQ0FQX1NVUFBPUlRfTkVUTUFQKQogZW5kaWYoKQogCisjIENoZWNrIGZvciBEUERLIHNuaWZmaW5nIHN1cHBvcnQKK2lmKE5PVCBESVNBQkxFX0RQREspCisgICAgZmluZF9wYWNrYWdlKGRwZGspCisgICAgaWYoZHBka19GT1VORCkKKyAgICAgICAgIworICAgICAgICAjIFdlIGluY2x1ZGUgcnRlX2J1cy5oLCBhbmQgb2xkZXIgdmVyc2lvbnMgb2YgRFBESyBkaWRuJ3QgaGF2ZQorICAgICAgICAjIGl0LCBzbyBjaGVjayBmb3IgaXQuCisgICAgICAgICMKKyAgICAgICAgIyBBbHNvLCB3ZSBjYWxsIHJ0ZV9ldGhfZGV2X2NvdW50X2F2YWlsKCksIGFuZCBvbGRlciB2ZXJzaW9ucworICAgICAgICAjIG9mIERQREsgZGlkbid0IGhhdmUgaXQsIHNvIGNoZWNrIGZvciBpdC4KKyAgICAgICAgIworICAgICAgICBjbWFrZV9wdXNoX2NoZWNrX3N0YXRlKCkKKyAgICAgICAgc2V0KENNQUtFX1JFUVVJUkVEX0lOQ0xVREVTICR7ZHBka19JTkNMVURFX0RJUlN9KQorICAgICAgICBjaGVja19pbmNsdWRlX2ZpbGUocnRlX2J1cy5oIEhBVkVfUlRFX0JVU19IKQorICAgICAgICBzZXQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTICR7ZHBka19MSUJSQVJJRVN9KQorICAgICAgICBjaGVja19mdW5jdGlvbl9leGlzdHMocnRlX2V0aF9kZXZfY291bnRfYXZhaWwgSEFWRV9SVEVfRVRIX0RFVl9DT1VOVF9BVkFJTCkKKyAgICAgICAgY21ha2VfcG9wX2NoZWNrX3N0YXRlKCkKKyAgICAgICAgaWYoSEFWRV9SVEVfQlVTX0ggQU5EIEhBVkVfUlRFX0VUSF9ERVZfQ09VTlRfQVZBSUwpCisgICAgICAgICAgICBzZXQoRFBES19DX0ZMQUdTICItbWFyY2g9bmF0aXZlIikKKyAgICAgICAgICAgIHNldChEUERLX0xJQiBkcGRrIHJ0IG0gbnVtYSBkbCkKKyAgICAgICAgICAgIHNldChDTUFLRV9DX0ZMQUdTICR7Q01BS0VfQ19GTEFHU30gJHtEUERLX0NfRkxBR1N9KQorICAgICAgICAgICAgaW5jbHVkZV9kaXJlY3RvcmllcyhBRlRFUiAke2RwZGtfSU5DTFVERV9ESVJTfSkKKyAgICAgICAgICAgIGxpbmtfZGlyZWN0b3JpZXMoQUZURVIgJHtkcGRrX0xJQlJBUklFU30pCisgICAgICAgICAgICBzZXQoUENBUF9MSU5LX0xJQlJBUklFUyAke1BDQVBfTElOS19MSUJSQVJJRVN9ICR7ZHBka19MSUJSQVJJRVN9KQorICAgICAgICAgICAgc2V0KFBST0pFQ1RfU09VUkNFX0xJU1RfQyAke1BST0pFQ1RfU09VUkNFX0xJU1RfQ30gcGNhcC1kcGRrLmMpCisgICAgICAgICAgICBzZXQoUENBUF9TVVBQT1JUX0RQREsgVFJVRSkKKworICAgICAgICAgICAgIworICAgICAgICAgICAgIyBDaGVjayB3aGV0aGVyIHRoZSBydGVfZXRoZXIuaCBmaWxlIGRlZmluZXMKKyAgICAgICAgICAgICMgc3RydWN0IGV0aGVyX2FkZHIgb3Igc3RydWN0IHJ0ZV9ldGhlcl9hZGRyLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyAoIkFQSSBjb21wYXRpYmlsaXR5PyAgVGhhdCdzIGZvciBsb3NlcnMhIikKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIGNtYWtlX3B1c2hfY2hlY2tfc3RhdGUoKQorICAgICAgICAgICAgc2V0KENNQUtFX1JFUVVJUkVEX0lOQ0xVREVTICR7ZHBka19JTkNMVURFX0RJUlN9KQorICAgICAgICAgICAgc2V0KENNQUtFX0VYVFJBX0lOQ0xVREVfRklMRVMgcnRlX2V0aGVyLmgpCisgICAgICAgICAgICBjaGVja190eXBlX3NpemUoInN0cnVjdCBydGVfZXRoZXJfYWRkciIgU1RSVUNUX1JURV9FVEhFUl9BRERSKQorICAgICAgICAgICAgY21ha2VfcG9wX2NoZWNrX3N0YXRlKCkKKyAgICAgICAgZW5kaWYoKQorICAgIGVuZGlmKCkKK2VuZGlmKCkKKwogIyBDaGVjayBmb3IgQmx1ZXRvb3RoIHNuaWZmaW5nIHN1cHBvcnQKIGlmKE5PVCBESVNBQkxFX0JMVUVUT09USCkKICAgICBpZihDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiTGludXgiKQpAQCAtMTQxOCw5ICsxNjQ0LDExIEBACiAgICAgICAgICAgICBlbmRpZihIQVZFX1NUUlVDVF9TT0NLQUREUl9IQ0lfSENJX0NIQU5ORUwpCiAgICAgICAgIGVuZGlmKEhBVkVfQkxVRVRPT1RIX0JMVUVUT09USF9IKQogICAgIGVuZGlmKCkKK2Vsc2UoKQorICAgIHVuc2V0KFBDQVBfU1VQUE9SVF9CVF9NT05JVE9SIENBQ0hFKQogZW5kaWYoKQogCi0jIENoZWNrIGZvciBCbHVldG9vdGggc25pZmZpbmcgc3VwcG9ydAorIyBDaGVjayBmb3IgRC1CdXMgc25pZmZpbmcgc3VwcG9ydAogaWYoTk9UIERJU0FCTEVfREJVUykKICAgICAjCiAgICAgIyBXZSBkb24ndCBzdXBwb3J0IEQtQnVzIHNuaWZmaW5nIG9uIG1hY09TOyBzZWUKQEAgLTE0MzAsMTMgKzE2NTgsMzMgQEAKICAgICBpZihBUFBMRSkKICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiRHVlIHRvIGZyZWVkZXNrdG9wLm9yZyBidWcgNzQwMjksIEQtQnVzIGNhcHR1cmUgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlIG9uIG1hY09TIikKICAgICBlbmRpZihBUFBMRSkKLSAgICBpbmNsdWRlKEZpbmRQa2dDb25maWcpCiAgICAgcGtnX2NoZWNrX21vZHVsZXMoREJVUyBkYnVzLTEpCiAgICAgaWYoREJVU19GT1VORCkKICAgICAgICAgc2V0KFBDQVBfU1VQUE9SVF9EQlVTIFRSVUUpCiAgICAgICAgIHNldChQUk9KRUNUX1NPVVJDRV9MSVNUX0MgJHtQUk9KRUNUX1NPVVJDRV9MSVNUX0N9IHBjYXAtZGJ1cy5jKQogICAgICAgICBpbmNsdWRlX2RpcmVjdG9yaWVzKCR7REJVU19JTkNMVURFX0RJUlN9KQotICAgICAgICBzZXQoUENBUF9MSU5LX0xJQlJBUklFUyAke1BDQVBfTElOS19MSUJSQVJJRVN9ICR7REJVU19MSUJSQVJJRVN9KQorCisgICAgICAgICMKKyAgICAgICAgIyBUaGlzICJoZWxwZnVsbHkiIHN1cHBsaWVzIERCVVNfTElCUkFSSUVTIGFzIGEgYnVuY2ggb2YKKyAgICAgICAgIyBsaWJyYXJ5IG5hbWVzIC0gbm90IHBhdGhzIC0gYW5kIERCVVNfTElCUkFSWV9ESVJTIGFzCisgICAgICAgICMgYSBidW5jaCBvZiBkaXJlY3Rvcmllcy4KKyAgICAgICAgIworICAgICAgICAjIENNYWtlICpyZWFsbHkqIGRvZXNuJ3QgbGlrZSB0aGUgbm90aW9uIG9mIHNwZWNpZnlpbmcgImhlcmUgYXJlCisgICAgICAgICMgdGhlIGRpcmVjdG9yaWVzIGluIHdoaWNoIHRvIGxvb2sgZm9yIGxpYnJhcmllcyIgZXhjZXB0IGluCisgICAgICAgICMgZmluZF9saWJyYXJ5KCkgY2FsbHM7IGl0ICpyZWFsbHkqIHByZWZlcnMgdXNpbmcgZnVsbCBwYXRocyB0bworICAgICAgICAjIGxpYnJhcnkgZmlsZXMsIHJhdGhlciB0aGFuIGxpYnJhcnkgbmFtZXMuCisgICAgICAgICMKKyAgICAgICAgIyBGaW5kIHRoZSBsaWJyYXJpZXMgYW5kIGFkZCB0aGVpciBmdWxsIHBhdGhzLgorICAgICAgICAjCisgICAgICAgIHNldChEQlVTX0xJQlJBUllfRlVMTFBBVEhTKQorICAgICAgICBmb3JlYWNoKF9saWIgSU4gTElTVFMgREJVU19MSUJSQVJJRVMpCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRyeSB0byBmaW5kIHRoaXMgbGlicmFyeSwgc28gd2UgZ2V0IGl0cyBmdWxsIHBhdGguCisgICAgICAgICAgICAjCisgICAgICAgICAgICBmaW5kX2xpYnJhcnkoX2xpYmZ1bGxwYXRoICR7X2xpYn0gSElOVFMgJHtEQlVTX0xJQlJBUllfRElSU30pCisgICAgICAgICAgICBsaXN0KEFQUEVORCBEQlVTX0xJQlJBUllfRlVMTFBBVEhTICR7X2xpYmZ1bGxwYXRofSkKKyAgICAgICAgZW5kZm9yZWFjaCgpCisgICAgICAgIHNldChQQ0FQX0xJTktfTElCUkFSSUVTICR7UENBUF9MSU5LX0xJQlJBUklFU30gJHtEQlVTX0xJQlJBUllfRlVMTFBBVEhTfSkKICAgICBlbmRpZihEQlVTX0ZPVU5EKQogZW5kaWYoTk9UIERJU0FCTEVfREJVUykKIApAQCAtMTU0NCw2ICsxNzkyLDI3IEBACiAgICAgZW5kaWYoKQogZW5kaWYoKQogCisjIENoZWNrIGZvciBSaXZlcmJlZCBBaXJQY2FwIHN1cHBvcnQuCitpZihOT1QgRElTQUJMRV9BSVJQQ0FQKQorICAgICMKKyAgICAjIFRyeSB0byBmaW5kIHRoZSBBaXJQY2FwIGhlYWRlciBmaWxlIGFuZCBsaWJyYXJ5LgorICAgICMKKyAgICBmaW5kX3BhY2thZ2UoQWlyUGNhcCkKKworICAgICMKKyAgICAjIERpZCB3ZSBzdWNjZWVkPworICAgICMKKyAgICBpZihBSVJQQ0FQX0ZPVU5EKQorICAgICAgICAjCisgICAgICAgICMgWWVzLgorICAgICAgICAjCisgICAgICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoQUZURVIgJHtBSVJQQ0FQX0lOQ0xVREVfRElSU30pCisgICAgICAgIHNldChQUk9KRUNUX1NPVVJDRV9MSVNUX0MgJHtQUk9KRUNUX1NPVVJDRV9MSVNUX0N9IHBjYXAtYWlycGNhcC5jKQorICAgICAgICBzZXQoSEFWRV9BSVJQQ0FQX0FQSSBUUlVFKQorICAgICAgICBzZXQoUENBUF9MSU5LX0xJQlJBUklFUyAke1BDQVBfTElOS19MSUJSQVJJRVN9ICR7QUlSUENBUF9MSUJSQVJJRVN9KQorICAgIGVuZGlmKCkKK2VuZGlmKCkKKwogIyBDaGVjayBmb3IgUml2ZXJiZWQgVHVyYm9DYXAgc3VwcG9ydC4KIGlmKE5PVCBESVNBQkxFX1RDKQogICAgICMKQEAgLTE1NjEsNyArMTgzMCw3IEBACiAgICAgICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoQUZURVIgJHtUQ19JTkNMVURFX0RJUlN9KQogICAgICAgICBzZXQoUFJPSkVDVF9TT1VSQ0VfTElTVF9DICR7UFJPSkVDVF9TT1VSQ0VfTElTVF9DfSBwY2FwLXRjLmMpCiAgICAgICAgIHNldChIQVZFX1RDX0FQSSBUUlVFKQotICAgICAgICBzZXQoUENBUF9MSU5LX0xJQlJBUklFUyAiJHtQQ0FQX0xJTktfTElCUkFSSUVTfSAke1RDX0xJQlJBUklFU30gJHtDTUFLRV9VU0VfUFRIUkVBRFNfSU5JVH0gc3RkYysrIikKKyAgICAgICAgc2V0KFBDQVBfTElOS19MSUJSQVJJRVMgJHtQQ0FQX0xJTktfTElCUkFSSUVTfSAke1RDX0xJQlJBUklFU30gJHtDTUFLRV9VU0VfUFRIUkVBRFNfSU5JVH0gc3RkYysrKQogICAgIGVuZGlmKCkKIGVuZGlmKCkKIApAQCAtMTU4MiwxMiArMTg1MSwxMiBAQAogICAgICMgdGhlIGNoZWNrLgogICAgICMKICAgICBjbWFrZV9wdXNoX2NoZWNrX3N0YXRlKCkKLSAgICBzZXQoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgJHtDTUFLRV9TT1VSQ0VfRElSfSkKKyAgICBzZXQoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9KQogICAgIGNoZWNrX3N0cnVjdF9oYXNfbWVtYmVyKCJzdHJ1Y3QgbXNnaGRyIiBtc2dfY29udHJvbCAiZnRtYWNyb3MuaDtzeXMvc29ja2V0LmgiIEhBVkVfU1RSVUNUX01TR0hEUl9NU0dfQ09OVFJPTCkKICAgICBjaGVja19zdHJ1Y3RfaGFzX21lbWJlcigic3RydWN0IG1zZ2hkciIgbXNnX2ZsYWdzICJmdG1hY3Jvcy5oO3N5cy9zb2NrZXQuaCIgSEFWRV9TVFJVQ1RfTVNHSERSX01TR19GTEFHUykKICAgICBjbWFrZV9wb3BfY2hlY2tfc3RhdGUoKQogICAgIHNldChQUk9KRUNUX1NPVVJDRV9MSVNUX0MgJHtQUk9KRUNUX1NPVVJDRV9MSVNUX0N9Ci0gICAgICAgIHBjYXAtbmV3LmMgcGNhcC1ycGNhcC5jIHJwY2FwLXByb3RvY29sLmMgc29ja3V0aWxzLmMpCisgICAgICAgIHBjYXAtbmV3LmMgcGNhcC1ycGNhcC5jIHJwY2FwLXByb3RvY29sLmMgc29ja3V0aWxzLmMgc3NsdXRpbHMuYykKIGVuZGlmKEVOQUJMRV9SRU1PVEUpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTE1OTcsNyArMTg2Niw3IEBACiAjCiAjIENoZWNrIGFuZCBhZGQgd2FybmluZyBvcHRpb25zIGlmIHdlIGhhdmUgYSAuZGV2ZWwgZmlsZS4KICMKLWlmKEVYSVNUUyAke0NNQUtFX1NPVVJDRV9ESVJ9Ly5kZXZlbCBPUiBFWElTVFMgJHtDTUFLRV9CSU5BUllfRElSfS8uZGV2ZWwpCitpZihFWElTVFMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9Ly5kZXZlbCBPUiBFWElTVFMgJHtDTUFLRV9CSU5BUllfRElSfS8uZGV2ZWwpCiAgICAgIwogICAgICMgV2FybmluZyBvcHRpb25zLgogICAgICMKQEAgLTE2NTYsNiArMTkyNSwyMCBAQAogICAgICAgICAjIHN0cnVjdHVyZSBtZW1iZXJzLgogICAgICAgICAjCiAgICAgICAgIGNoZWNrX2FuZF9hZGRfY29tcGlsZXJfb3B0aW9uKC13ZDQ4MjApCisgICAgICAgICMKKyAgICAgICAgIyBXZSBkbyAqbm90KiBjYXJlIGFib3V0IGV2ZXJ5IHNpbmdsZSBwbGFjZSB0aGUgY29tcGlsZXIgd291bGQKKyAgICAgICAgIyBoYXZlIGluc2VydGVkIFNwZWN0cmUgbWl0aWdhdGlvbiBpZiBvbmx5IHdlIGhhZCB0b2xkIGl0IHRvCisgICAgICAgICMgZG8gc28gd2l0aCAvUXNwZWN0cmUuICBNYXliZSBpdCdzIHdvcnRoIGl0LCBhcyB0aGF0J3MgaW4KKyAgICAgICAgIyBCaXNvbi1nZW5lcmF0ZWQgY29kZSB0aGF0IHdlIGRvbid0IGNvbnRyb2wuCisgICAgICAgICMKKyAgICAgICAgIyBYWFggLSBhZGQgL1FzcGVjdHJlIGlmIHRoYXQgaXMgcmVhbGx5IHdvcnRoIGRvaW5nLgorICAgICAgICAjCisgICAgICAgIGNoZWNrX2FuZF9hZGRfY29tcGlsZXJfb3B0aW9uKC13ZDUwNDUpCisKKyAgICAgICAgIworICAgICAgICAjIFRyZWF0IGFsbCAocmVtYWluaW5nKSB3YXJuaW5ncyBhcyBlcnJvcnMuCisgICAgICAgICMKKyAgICAgICAgY2hlY2tfYW5kX2FkZF9jb21waWxlcl9vcHRpb24oLVdYKQogICAgIGVsc2UoKQogICAgICAgICAjCiAgICAgICAgICMgT3RoZXIgY29tcGlsZXJzLCBpbmNsdWRpbmcgTVNWQyB3aXRoIGEgQ2xhbmcgZnJvbnQgZW5kIGFuZApAQCAtMTY2MywyMSArMTk0NiwyMyBAQAogICAgICAgICAjIHRoZXkgbWlnaHQgc3VwcG9ydCBHQ0Mtc3R5bGUgLVcgb3B0aW9ucy4KICAgICAgICAgIwogICAgICAgICBjaGVja19hbmRfYWRkX2NvbXBpbGVyX29wdGlvbigtV2FsbCkKLSAgICAgICAgY2hlY2tfYW5kX2FkZF9jb21waWxlcl9vcHRpb24oLVdzaWduLWNvbXBhcmUpCi0gICAgICAgIGNoZWNrX2FuZF9hZGRfY29tcGlsZXJfb3B0aW9uKC1XbWlzc2luZy1wcm90b3R5cGVzKQotICAgICAgICBjaGVja19hbmRfYWRkX2NvbXBpbGVyX29wdGlvbigtV3N0cmljdC1wcm90b3R5cGVzKQotICAgICAgICBjaGVja19hbmRfYWRkX2NvbXBpbGVyX29wdGlvbigtV3NoYWRvdykKLSAgICAgICAgY2hlY2tfYW5kX2FkZF9jb21waWxlcl9vcHRpb24oLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQpCi0gICAgICAgIGNoZWNrX2FuZF9hZGRfY29tcGlsZXJfb3B0aW9uKC1XdXNlZC1idXQtbWFya2VkLXVudXNlZCkKLSAgICAgICAgY2hlY2tfYW5kX2FkZF9jb21waWxlcl9vcHRpb24oLVdkb2N1bWVudGF0aW9uKQogICAgICAgICBjaGVja19hbmRfYWRkX2NvbXBpbGVyX29wdGlvbigtV2NvbW1hKQotICAgICAgICBjaGVja19hbmRfYWRkX2NvbXBpbGVyX29wdGlvbigtV21pc3Npbmctbm9yZXR1cm4pCiAgICAgICAgICMgV2FybnMgYWJvdXQgc2FmZWd1YXJkcyBhZGRlZCBpbiBjYXNlIHRoZSBlbnVtcyBhcmUgZXh0ZW5kZWQKICAgICAgICAgIyBjaGVja19hbmRfYWRkX2NvbXBpbGVyX29wdGlvbigtV2NvdmVyZWQtc3dpdGNoLWRlZmF1bHQpCi0gICAgICAgIGNoZWNrX2FuZF9hZGRfY29tcGlsZXJfb3B0aW9uKC1XbWlzc2luZy12YXJpYWJsZS1kZWNsYXJhdGlvbnMpCi0gICAgICAgIGNoZWNrX2FuZF9hZGRfY29tcGlsZXJfb3B0aW9uKC1XdW51c2VkLXBhcmFtZXRlcikKKyAgICAgICAgY2hlY2tfYW5kX2FkZF9jb21waWxlcl9vcHRpb24oLVdkb2N1bWVudGF0aW9uKQogICAgICAgICBjaGVja19hbmRfYWRkX2NvbXBpbGVyX29wdGlvbigtV2Zvcm1hdC1ub25saXRlcmFsKQorICAgICAgICBjaGVja19hbmRfYWRkX2NvbXBpbGVyX29wdGlvbigtV21pc3Npbmctbm9yZXR1cm4pCisgICAgICAgIGNoZWNrX2FuZF9hZGRfY29tcGlsZXJfb3B0aW9uKC1XbWlzc2luZy1wcm90b3R5cGVzKQorICAgICAgICBjaGVja19hbmRfYWRkX2NvbXBpbGVyX29wdGlvbigtV21pc3NpbmctdmFyaWFibGUtZGVjbGFyYXRpb25zKQorICAgICAgICBjaGVja19hbmRfYWRkX2NvbXBpbGVyX29wdGlvbigtV3BvaW50ZXItYXJpdGgpCisgICAgICAgIGNoZWNrX2FuZF9hZGRfY29tcGlsZXJfb3B0aW9uKC1XcG9pbnRlci1zaWduKQorICAgICAgICBjaGVja19hbmRfYWRkX2NvbXBpbGVyX29wdGlvbigtV3NoYWRvdykKKyAgICAgICAgY2hlY2tfYW5kX2FkZF9jb21waWxlcl9vcHRpb24oLVdzaWduLWNvbXBhcmUpCisgICAgICAgIGNoZWNrX2FuZF9hZGRfY29tcGlsZXJfb3B0aW9uKC1Xc2hvcnRlbi02NC10by0zMikKKyAgICAgICAgY2hlY2tfYW5kX2FkZF9jb21waWxlcl9vcHRpb24oLVdzdHJpY3QtcHJvdG90eXBlcykKICAgICAgICAgY2hlY2tfYW5kX2FkZF9jb21waWxlcl9vcHRpb24oLVd1bnJlYWNoYWJsZS1jb2RlKQorICAgICAgICBjaGVja19hbmRfYWRkX2NvbXBpbGVyX29wdGlvbigtV3VudXNlZC1wYXJhbWV0ZXIpCisgICAgICAgIGNoZWNrX2FuZF9hZGRfY29tcGlsZXJfb3B0aW9uKC1XdXNlZC1idXQtbWFya2VkLXVudXNlZCkKICAgICBlbmRpZigpCiBlbmRpZigpCiAKQEAgLTE3NzQsNiArMjA1OSwyNyBAQAogaWYoWUFDQ19FWEVDVVRBQkxFIFNUUkVRVUFMICJZQUNDX0VYRUNVVEFCTEUtTk9URk9VTkQiKQogICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIk5laXRoZXIgYmlzb24gbm9yIHdpbl9iaXNvbiBub3IgYnlhY2Mgbm9yIHlhY2Mgd2FzIGZvdW5kLiIpCiBlbmRpZigpCisKK2lmKFlBQ0NfRVhFQ1VUQUJMRSBNQVRDSEVTICJieWFjYyIgT1IgWUFDQ19FWEVDVVRBQkxFIE1BVENIRVMgInlhY2MiKQorICAgICMKKyAgICAjIEJlcmtlbGV5IFlBQ0MgZG9lc24ndCBzdXBwb3J0ICIlZGVmaW5lIGFwaS5wdXJlIiwgc28gdXNlCisgICAgIyAiJXB1cmUtcGFyc2VyIi4KKyAgICAjCisgICAgc2V0KFJFRU5UUkFOVF9QQVJTRVIgIiVwdXJlLXBhcnNlciIpCitlbHNlKCkKKyAgICAjCisgICAgIyBCaXNvbiBwcmlvciB0byAyLjQoLjEpIGRvZXNuJ3Qgc3VwcG9ydCAiJWRlZmluZSBhcGkucHVyZSIsIHNvIHVzZQorICAgICMgIiVwdXJlLXBhcnNlciIuCisgICAgIworICAgIGV4ZWN1dGVfcHJvY2VzcyhDT01NQU5EICR7WUFDQ19FWEVDVVRBQkxFfSAtViBPVVRQVVRfVkFSSUFCTEUgYmlzb25fZnVsbF92ZXJzaW9uKQorICAgIHN0cmluZyhSRUdFWCBNQVRDSCAiWzEtOV1bMC05XSpbLl1bMS05XVswLTldKiIgYmlzb25fbWFqb3JfbWlub3IgJHtiaXNvbl9mdWxsX3ZlcnNpb259KQorICAgIGlmIChiaXNvbl9tYWpvcl9taW5vciBWRVJTSU9OX0xFU1MgIjIuNCIpCisgICAgICAgIHNldChSRUVOVFJBTlRfUEFSU0VSICIlcHVyZS1wYXJzZXIiKQorICAgIGVsc2UoKQorICAgICAgICBzZXQoUkVFTlRSQU5UX1BBUlNFUiAiJWRlZmluZSBhcGkucHVyZSIpCisgICAgZW5kaWYoKQorZW5kaWYoKQorCiBtZXNzYWdlKFNUQVRVUyAiUGFyc2VyIGdlbmVyYXRvcjogJHtZQUNDX0VYRUNVVEFCTEV9IikKIAogIwpAQCAtMTc4Nyw5ICsyMDkzLDkgQEAKIGVuZGlmKCkKIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICBPVVRQVVQgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2dyYW1tYXIuYyAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vZ3JhbW1hci5oCi0gICAgU09VUkNFICR7cGNhcF9TT1VSQ0VfRElSfS9ncmFtbWFyLnkKLSAgICBDT01NQU5EICR7WUFDQ19FWEVDVVRBQkxFfSAke1lBQ0NfQ09NUEFUSUJJTElUWV9GTEFHfSAtcCBwY2FwXyAtbyAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vZ3JhbW1hci5jIC1kICR7cGNhcF9TT1VSQ0VfRElSfS9ncmFtbWFyLnkKLSAgICBERVBFTkRTICR7cGNhcF9TT1VSQ0VfRElSfS9ncmFtbWFyLnkKKyAgICBTT1VSQ0UgJHtwY2FwX0JJTkFSWV9ESVJ9L2dyYW1tYXIueQorICAgIENPTU1BTkQgJHtZQUNDX0VYRUNVVEFCTEV9ICR7WUFDQ19DT01QQVRJQklMSVRZX0ZMQUd9IC1wIHBjYXBfIC1vICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9ncmFtbWFyLmMgLWQgJHtwY2FwX0JJTkFSWV9ESVJ9L2dyYW1tYXIueQorICAgIERFUEVORFMgJHtwY2FwX0JJTkFSWV9ESVJ9L2dyYW1tYXIueQogKQogCiAjCkBAIC0xODA4LDEwICsyMTE0LDEyIEBACiAKICMKICMgQXNzdW1lLCBieSBkZWZhdWx0LCBubyBzdXBwb3J0IGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBWNy9CU0QKLSMgY29udmVudGlvbiBmb3IgbWFuIHBhZ2VzIChmaWxlIGZvcm1hdHMgaW4gc2VjdGlvbiA1LCBtaXNjZWxsYW5lb3VzCi0jIGluZm8gaW4gc2VjdGlvbiA3LCBhZG1pbmlzdHJhdGl2ZSBjb21tYW5kcyBhbmQgZGFlbW9ucyBpbiBzZWN0aW9uIDgpLgorIyBjb252ZW50aW9uIGZvciBtYW4gcGFnZXMgKGRldmljZXMgaW4gc2VjdGlvbiA0LCBmaWxlIGZvcm1hdHMgaW4KKyMgc2VjdGlvbiA1LCBtaXNjZWxsYW5lb3VzIGluZm8gaW4gc2VjdGlvbiA3LCBhZG1pbmlzdHJhdGl2ZSBjb21tYW5kcworIyBhbmQgZGFlbW9ucyBpbiBzZWN0aW9uIDgpLiAgSW5kaXZpZHVhbCBjYXNlcyBjYW4gb3ZlcnJpZGUgdGhpcy4KICMgSW5kaXZpZHVhbCBjYXNlcyBjYW4gb3ZlcnJpZGUgdGhpcy4KICMKK3NldChNQU5fREVWSUNFUyA0KQogc2V0KE1BTl9GSUxFX0ZPUk1BVFMgNSkKIHNldChNQU5fTUlTQ19JTkZPIDcpCiBzZXQoTUFOX0FETUlOX0NPTU1BTkRTIDgpCkBAIC0xODY5LDYgKzIxNzcsNyBAQAogICAgICMKICAgICBzZXQoTUFOX0ZJTEVfRk9STUFUUyA0KQogICAgIHNldChNQU5fTUlTQ19JTkZPIDUpCisgICAgc2V0KE1BTl9ERVZJQ0VTIDcpCiBlbHNlaWYoQ01BS0VfU1lTVEVNX05BTUUgU1RSRVFVQUwgIlN1bk9TIiBBTkQgQ01BS0VfU1lTVEVNX1ZFUlNJT04gTUFUQ0hFUyAiNVsuXVswLTkuXSoiKQogICAgICMKICAgICAjIFN1bk9TIDUueC4KQEAgLTE4OTIsNyArMjIwMSwxMyBAQAogICAgICAgICBzZXQoTUFOX0FETUlOX0NPTU1BTkRTIDFtKQogICAgICAgICBzZXQoTUFOX0ZJTEVfRk9STUFUUyA0KQogICAgICAgICBzZXQoTUFOX01JU0NfSU5GTyA1KQorICAgICAgICBzZXQoTUFOX0RFVklDRVMgN0QpCiAgICAgZW5kaWYoKQorZWxzZWlmKENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJIYWlrdSIpCisgICAgIworICAgICMgSGFpa3UgbmVlZHMgX0JTRF9TT1VSQ0UgZm9yIHRoZSBfSU8qIG1hY3JvcyBiZWNhdXNlIGl0IGRvZXNuJ3QgdXNlIHRoZW0uCisgICAgIworICAgIGFkZF9kZWZpbml0aW9ucygtRF9CU0RfU09VUkNFKQogZW5kaWYoKQogCiBzb3VyY2VfZ3JvdXAoIlNvdXJjZSBGaWxlcyIgRklMRVMgJHtQUk9KRUNUX1NPVVJDRV9MSVNUX0N9KQpAQCAtMTkyMyw3ICsyMjM4LDcgQEAKICMKICMgU2VlCiAjCi0jICBodHRwOi8vcHVibGljLmtpdHdhcmUuY29tL3BpcGVybWFpbC9jbWFrZS8yMDEzLUF1Z3VzdC8wNTU1MTAuaHRtbAorIyAgaHR0cHM6Ly9wdWJsaWMua2l0d2FyZS5jb20vcGlwZXJtYWlsL2NtYWtlLzIwMTMtQXVndXN0LzA1NTUxMC5odG1sCiAjCiBhZGRfY3VzdG9tX3RhcmdldChTZXJpYWxpemVUYXJnZXQKICAgICBERVBFTkRTCkBAIC0xOTQ0LDYgKzIyNTksMjAgQEAKICAgICBhZGRfZGVwZW5kZW5jaWVzKCR7TElCUkFSWV9OQU1FfSBTZXJpYWxpemVUYXJnZXQpCiAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7TElCUkFSWV9OQU1FfSBQUk9QRVJUSUVTCiAgICAgICAgIENPTVBJTEVfREVGSU5JVElPTlMgQlVJTERJTkdfUENBUCkKKyAgICAjCisgICAgIyBObyBtYXR0ZXIgd2hhdCB0aGUgbGlicmFyeSBpcyBjYWxsZWQgLSBpdCBtaWdodCBiZSBjYWxsZWQgIndwY2FwIgorICAgICMgaW4gYSBXaW5kb3dzIGJ1aWxkIC0gdGhlIHN5bWJvbCB0byBkZWZpbmUgdG8gaW5kaWNhdGUgdGhhdCB3ZSdyZQorICAgICMgYnVpbGRpbmcgdGhlIGxpYnJhcnksIHJhdGhlciB0aGFuIGEgcHJvZ3JhbSB1c2luZyB0aGUgbGlicmFyeSwKKyAgICAjIGFuZCB0aHVzIHRoYXQgd2UncmUgZXhwb3J0aW5nIGZ1bmN0aW9ucyBkZWZpbmVkIGluIG91ciBwdWJsaWMKKyAgICAjIGhlYWRlciBmaWxlcywgcmF0aGVyIHRoYW4gaW1wb3J0aW5nIHRob3NlIGZ1bmN0aW9ucywgaXMKKyAgICAjIHBjYXBfRVhQT1JUUy4KKyAgICAjCisgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7TElCUkFSWV9OQU1FfSBQUk9QRVJUSUVTCisgICAgICAgIERFRklORV9TWU1CT0wgcGNhcF9FWFBPUlRTKQorICAgIGlmKE5PVCAiJHtMSU5LRVJfRkxBR1N9IiBTVFJFUVVBTCAiIikKKyAgICAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7TElCUkFSWV9OQU1FfSBQUk9QRVJUSUVTCisgICAgICAgICAgICBMSU5LX0ZMQUdTICIke0xJTktFUl9GTEFHU30iKQorICAgIGVuZGlmKCkKIGVuZGlmKEJVSUxEX1NIQVJFRF9MSUJTKQogCiBhZGRfbGlicmFyeSgke0xJQlJBUllfTkFNRX1fc3RhdGljIFNUQVRJQwpAQCAtMjAyMCw2ICsyMzQ5LDEzMCBAQAogICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke0xJQlJBUllfTkFNRX1fc3RhdGljIFBST1BFUlRJRVMgQ09NUElMRV9GTEFHUyAke0NfQURESVRJT05BTF9GTEFHU30pCiBlbmRpZigpCiAKKyMKKyMgT24gbWFjT1MsIGJ1aWxkIGxpYnBjYXAgZm9yIHRoZSBhcHByb3ByaWF0ZSBhcmNoaXRlY3R1cmVzLCBpZgorIyBDTUFLRV9PU1hfQVJDSElURUNUVVJFUyBpc24ndCBzZXQgKGlmIGl0IGlzLCBsZXQgdGhhdCBjb250cm9sCisjIHRoZSBhcmNoaXRlY3R1cmVzIGZvciB3aGljaCB0byBidWlsZCBpdCkuCisjCitpZihBUFBMRSBBTkQgIiR7Q01BS0VfT1NYX0FSQ0hJVEVDVFVSRVN9IiBTVFJFUVVBTCAiIikKKyAgICAjCisgICAgIyBHZXQgdGhlIG1ham9yIHZlcnNpb24gb2YgRGFyd2luLgorICAgICMKKyAgICBzdHJpbmcoUkVHRVggTUFUQ0ggIl4oWzAtOV0rKSIgU1lTVEVNX1ZFUlNJT05fTUFKT1IgIiR7Q01BS0VfU1lTVEVNX1ZFUlNJT059IikKKworICAgIGlmKFNZU1RFTV9WRVJTSU9OX01BSk9SIExFU1MgOCkKKyAgICAgICAgIworICAgICAgICAjIFByZS1UaWdlci4gIEJ1aWxkIG9ubHkgZm9yIDMyLWJpdCBQb3dlclBDLgorICAgICAgICAjCisgICAgICAgIHNldChPU1hfTElCUkFSWV9BUkNISVRFQ1RVUkVTICJwcGMiKQorICAgIGVsc2VpZihTWVNURU1fVkVSU0lPTl9NQUpPUiBFUVVBTCA4KQorICAgICAgICAjCisgICAgICAgICMgVGlnZXIuICBJcyB0aGlzIHByaW9yIHRvLCBvciB3aXRoLCBJbnRlbCBzdXBwb3J0PworICAgICAgICAjCisgICAgICAgICMgR2V0IHRoZSBtaW5vciB2ZXJzaW9uIG9mIERhcndpbi4KKyAgICAgICAgIworICAgICAgICBzdHJpbmcoUkVQTEFDRSAiJHtTWVNURU1fVkVSU0lPTl9NQUpPUn0uIiAiIiBTWVNURU1fTUlOT1JfQU5EX1BBVENIX1ZFUlNJT04gJHtDTUFLRV9TWVNURU1fVkVSU0lPTn0pCisgICAgICAgIHN0cmluZyhSRUdFWCBNQVRDSCAiXihbMC05XSspIiBTWVNURU1fVkVSU0lPTl9NSU5PUiAiJHtTWVNURU1fTUlOT1JfQU5EX1BBVENIX1ZFUlNJT059IikKKyAgICAgICAgaWYoU1lTVEVNX1ZFUlNJT05fTUlOT1IgTEVTUyA0KQorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBQcmlvciB0byBJbnRlbCBzdXBwb3J0LiAgQnVpbGQgZm9yIDMyLWJpdAorICAgICAgICAgICAgIyBQb3dlclBDIGFuZCA2NC1iaXQgUG93ZXJQQywgd2l0aCAzMi1iaXQgUG93ZXJQQworICAgICAgICAgICAgIyBmaXJzdC4gIChJJ20gZ3Vlc3NpbmcgdGhhdCdzIHdoYXQgQXBwbGUgZG9lcy4pCisgICAgICAgICAgICAjCisgICAgICAgICAgICBzZXQoT1NYX0xJQlJBUllfQVJDSElURUNUVVJFUyAicHBjO3BwYzY0IikKKyAgICAgICAgZWxzZWlmKFNZU1RFTV9WRVJTSU9OX01JTk9SIExFU1MgNykKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgV2l0aCBJbnRlbCBzdXBwb3J0IGJ1dCBwcmlvciB0byB4ODYtNjQgc3VwcG9ydC4KKyAgICAgICAgICAgICMgQnVpbGQgZm9yIDMyLWJpdCBQb3dlclBDLCA2NC1iaXQgUG93ZXJQQywgYW5kIDMyLWJpdCB4ODYsCisgICAgICAgICAgICAjIHdpdGggMzItYml0IFBvd2VyUEMgZmlyc3QuCisgICAgICAgICAgICAjIChJJ20gZ3Vlc3NpbmcgdGhhdCdzIHdoYXQgQXBwbGUgZG9lcy4pCisgICAgICAgICAgICAjCisgICAgICAgICAgICBzZXQoT1NYX0xJQlJBUllfQVJDSElURUNUVVJFUyAicHBjO3BwYzY0O2kzODYiKQorICAgICAgICBlbHNlKCkKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgV2l0aCBJbnRlbCBzdXBwb3J0IGluY2x1ZGluZyB4ODYtNjQgc3VwcG9ydC4KKyAgICAgICAgICAgICMgQnVpbGQgZm9yIDMyLWJpdCBQb3dlclBDLCA2NC1iaXQgUG93ZXJQQywgMzItYml0IHg4NiwKKyAgICAgICAgICAgICMgYW5kIHg4Ni02NCwgd2l0aCAzMi1iaXQgUG93ZXJQQyBmaXJzdC4KKyAgICAgICAgICAgICMgKEknbSBndWVzc2luZyB0aGF0J3Mgd2hhdCBBcHBsZSBkb2VzLikKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIHNldChPU1hfTElCUkFSWV9BUkNISVRFQ1RVUkVTICJwcGM7cHBjNjQ7aTM4Njt4ODZfNjQiKQorICAgICAgICBlbmRpZigpCisgICAgZWxzZWlmKFNZU1RFTV9WRVJTSU9OX01BSk9SIEVRVUFMIDkpCisgICAgICAgICMKKyAgICAgICAgIyBMZW9wYXJkLiAgQnVpbGQgZm9yIDMyLWJpdCBQb3dlclBDLCA2NC1iaXQKKyAgICAgICAgIyBQb3dlclBDLCAzMi1iaXQgeDg2LCBhbmQgeDg2LTY0LCB3aXRoIDMyLWJpdCBQb3dlclBDCisgICAgICAgICMgZmlyc3QuICAoVGhhdCdzIHdoYXQgQXBwbGUgZG9lcy4pCisgICAgICAgICMKKyAgICAgICAgc2V0KE9TWF9MSUJSQVJZX0FSQ0hJVEVDVFVSRVMgInBwYztwcGM2NDtpMzg2O3g4Nl82NCIpCisgICAgZWxzZWlmKFNZU1RFTV9WRVJTSU9OX01BSk9SIEVRVUFMIDEwKQorICAgICAgICAjCisgICAgICAgICMgU25vdyBMZW9wYXJkLiAgQnVpbGQgZm9yIHg4Ni02NCwgMzItYml0IHg4NiwgYW5kCisgICAgICAgICMgMzItYml0IFBvd2VyUEMsIHdpdGggeDg2LTY0IGZpcnN0LiAgKFRoYXQncworICAgICAgICAjIHdoYXQgQXBwbGUgZG9lcywgZXZlbiB0aG91Z2ggU25vdyBMZW9wYXJkCisgICAgICAgICMgZG9lc24ndCBydW4gb24gUFBDLCBzbyBQUEMgbGlicGNhcCBydW5zIHVuZGVyCisgICAgICAgICMgUm9zZXR0YSwgYW5kIFJvc2V0dGEgZG9lc24ndCBzdXBwb3J0IEJQRgorICAgICAgICAjIGlvY3Rscywgc28gUFBDIHByb2dyYW1zIGNhbid0IGRvIGxpdmUKKyAgICAgICAgIyBjYXB0dXJlcy4pCisgICAgICAgICMKKyAgICAgICAgc2V0KE9TWF9MSUJSQVJZX0FSQ0hJVEVDVFVSRVMgIng4Nl82NDtpMzg2O3BwYyIpCisgICAgZWxzZSgpCisgICAgICAgICMKKyAgICAgICAgIyBQb3N0LVNub3cgTGVvcGFyZC4gIEJ1aWxkIGZvciB4ODYtNjQgYW5kIDMyLWJpdCB4ODYsCisgICAgICAgICMgd2l0aCB4ODYtNjQgZmlyc3QuICAoVGhhdCdzIHdoYXQgQXBwbGUgZG9lcykKKyAgICAgICAgIyBYWFggLSB1cGRhdGUgaWYgYW5kIHdoZW4gQXBwbGUgZHJvcHMgc3VwcG9ydAorICAgICAgICAjIGZvciAzMi1iaXQgeDg2IGNvZGUgYW5kIGlmIGFuZCB3aGVuIEFwcGxlIGFkZHMKKyAgICAgICAgIyBBUk0tYmFzZWQgTWFjcy4gIChZb3UncmUgb24geW91ciBvd24gZm9yIGlPUyBldGMuKQorICAgICAgICAjCisgICAgICAgICMgRmlyc3QsIGNoZWNrIHdoZXRoZXIgd2UncmUgYnVpbGRpbmcgd2l0aCBPcGVuU1NMLgorICAgICAgICAjIElmIHNvLCBkb24ndCBib3RoZXIgdHJ5aW5nIHRvIGJ1aWxkIGZhdC4KKyAgICAgICAgIworICAgICAgICBpZihIQVZFX09QRU5TU0wpCisgICAgICAgICAgc2V0KFg4Nl8zMl9CSVRfU1VQUE9SVEVEIE5PKQorICAgICAgICAgIHNldChPU1hfTElCUkFSWV9BUkNISVRFQ1RVUkVTICJ4ODZfNjQiKQorICAgICAgICAgIG1lc3NhZ2UoV0FSTklORyAiV2UncmUgYXNzdW1pbmcgdGhlIE9wZW5TU0wgbGlicmFyaWVzIGFyZSA2NC1iaXQgb25seSwgc28gd2UncmUgbm90IGNvbXBpbGluZyBmb3IgMzItYml0IHg4NiIpCisgICAgICAgIGVsc2UoKQorICAgICAgICAgICMKKyAgICAgICAgICAjIE5vdywgY2hlY2sgd2hldGhlciB3ZSAqY2FuKiBidWlsZCBmb3IgaTM4Ni4KKyAgICAgICAgICAjCisgICAgICAgICAgY21ha2VfcHVzaF9jaGVja19zdGF0ZSgpCisgICAgICAgICAgc2V0KENNQUtFX1JFUVVJUkVEX0ZMQUdTICItYXJjaCBpMzg2IikKKyAgICAgICAgICBjaGVja19jX3NvdXJjZV9jb21waWxlcygKKyJpbnQKK21haW4odm9pZCkKK3sKKyAgICByZXR1cm4gMDsKK30KKyIKKyAgICAgICAgICAgICAgICAgICBYODZfMzJfQklUX1NVUFBPUlRFRCkKKyAgICAgICAgICBjbWFrZV9wb3BfY2hlY2tfc3RhdGUoKQorICAgICAgICAgIGlmKFg4Nl8zMl9CSVRfU1VQUE9SVEVEKQorICAgICAgICAgICAgICBzZXQoT1NYX0xJQlJBUllfQVJDSElURUNUVVJFUyAieDg2XzY0O2kzODYiKQorICAgICAgICAgIGVsc2UoKQorICAgICAgICAgICAgICBzZXQoT1NYX0xJQlJBUllfQVJDSElURUNUVVJFUyAieDg2XzY0IikKKyAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAjIFdlIGNhbid0IGJ1aWxkIGZhdDsgc3VnZ2VzdCB0aGF0IHRoZSB1c2VyIGluc3RhbGwgdGhlCisgICAgICAgICAgICAgICMgL3Vzci9pbmNsdWRlIGhlYWRlcnMgaWYgdGhleSB3YW50IHRvIGJ1aWxkIGZhdC4KKyAgICAgICAgICAgICAgIworICAgICAgICAgICAgICBpZihTWVNURU1fVkVSU0lPTl9NQUpPUiBMRVNTIDE4KQorICAgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgIyBQcmUtTW9qYXZlOyB0aGUgY29tbWFuZC1saW5lIHRvb2xzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvCisgICAgICAgICAgICAgICAgICAjIGVuYWJsZSAzMi1iaXQgeDg2IGJ1aWxkcy4KKyAgICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgIG1lc3NhZ2UoV0FSTklORyAiQ29tcGlsaW5nIGZvciAzMi1iaXQgeDg2IGdpdmVzIGFuIGVycm9yOyB0cnkgaW5zdGFsbGluZyB0aGUgY29tbWFuZC1saW5lIHRvb2xzIikKKyAgICAgICAgICAgICAgZWxzZSgpCisgICAgICAgICAgICAgICAgICBtZXNzYWdlKFdBUk5JTkcgIkNvbXBpbGluZyBmb3IgMzItYml0IHg4NiBnaXZlcyBhbiBlcnJvcjsgdHJ5IGluc3RhbGxpbmcgdGhlIGNvbW1hbmQtbGluZSB0b29scyBhbmQsIGFmdGVyIHRoYXQsIGluc3RhbGxpbmcgdGhlIC91c3IvaW5jbHVkZSBoZWFkZXJzIGZyb20gdGhlIC9MaWJyYXJ5L0RldmVsb3Blci9Db21tYW5kTGluZVRvb2xzL1BhY2thZ2VzL21hY09TX1NES19oZWFkZXJzX2Zvcl9tYWNPU18xMC4xNC5wa2cgcGFja2FnZSIpCisgICAgICAgICAgICAgIGVuZGlmKCkKKyAgICAgICAgICBlbmRpZigpCisgICAgICAgIGVuZGlmKCkKKyAgICBlbmRpZigpCisgICAgaWYoQlVJTERfU0hBUkVEX0xJQlMpCisgICAgICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke0xJQlJBUllfTkFNRX0gUFJPUEVSVElFUworICAgICAgICAgICAgT1NYX0FSQ0hJVEVDVFVSRVMgIiR7T1NYX0xJQlJBUllfQVJDSElURUNUVVJFU30iKQorICAgIGVuZGlmKEJVSUxEX1NIQVJFRF9MSUJTKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcygke0xJQlJBUllfTkFNRX1fc3RhdGljIFBST1BFUlRJRVMKKyAgICAgICAgT1NYX0FSQ0hJVEVDVFVSRVMgIiR7T1NYX0xJQlJBUllfQVJDSElURUNUVVJFU30iKQorZW5kaWYoKQorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBXcml0ZSBvdXQgdGhlIGNvbmZpZy5oIGZpbGUKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0yMDI3LDYgKzI0ODAsMTIgQEAKIGNvbmZpZ3VyZV9maWxlKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9jbWFrZWNvbmZpZy5oLmluICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9jb25maWcuaCkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgV3JpdGUgb3V0IHRoZSBncmFtbWFyLnkgZmlsZQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY29uZmlndXJlX2ZpbGUoJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2dyYW1tYXIueS5pbiAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vZ3JhbW1hci55IEBPTkxZKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBJbnN0YWxsIHBjYXAgbGlicmFyeSwgaW5jbHVkZSBmaWxlcywgYW5kIG1hbiBwYWdlcwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApAQCAtMjA0MSwxMiArMjUwMCwxMSBAQAogCiBmdW5jdGlvbihpbnN0YWxsX21hbnBhZ2Vfc3ltbGluayBTT1VSQ0UgVEFSR0VUIE1BTkRJUikKICAgICBpZihNSU5HVykKLSAgICAgICAgZmluZF9wcm9ncmFtKExJTktfRVhFQ1VUQUJMRSBsbikKLSAgICAgICAgICAgIGlmKExJTktfRVhFQ1VUQUJMRSkKLSAgICAgICAgICAgICAgICBzZXQoTElOS19DT01NQU5EICJcIiR7TElOS19FWEVDVVRBQkxFfVwiIFwiLXNcIiBcIiR7U09VUkNFfVwiIFwiJHtUQVJHRVR9XCIiKQotICAgICAgICAgICAgZWxzZShMSU5LX0VYRUNVVEFCTEUpCi0gICAgICAgICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAibG4gKGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L3V0aWxpdGllcy9sbi5odG1sKSBub3QgZm91bmQuIikKLSAgICAgICAgICAgIGVuZGlmKExJTktfRVhFQ1VUQUJMRSkKKyAgICAgICAgIworICAgICAgICAjIElmIHdlIGhhdmVuJ3QgZm91bmQgYW4gbG4gZXhlY3V0YWJsZSB3aXRoIE1pbkdXLCB3ZSBkb24ndCB0cnkKKyAgICAgICAgIyBnZW5lcmF0aW5nIGFuZCBpbnN0YWxsaW5nIHRoZSBtYW4gcGFnZXMsIHNvIGlmIHdlIGdldCBoZXJlLAorICAgICAgICAjIHdlJ3ZlIGZvdW5kIHRoYXQgZXhlY3V0YWJsZS4KKyAgICAgICAgc2V0KExJTktfQ09NTUFORCAiXCIke0xJTktfRVhFQ1VUQUJMRX1cIiBcIi1zXCIgXCIke1NPVVJDRX1cIiBcIiR7VEFSR0VUfVwiIikKICAgICBlbHNlKE1JTkdXKQogICAgICAgICBzZXQoTElOS19DT01NQU5EICJcIiR7Q01BS0VfQ09NTUFORH1cIiBcIi1FXCIgXCJjcmVhdGVfc3ltbGlua1wiIFwiJHtTT1VSQ0V9XCIgXCIke1RBUkdFVH1cIiIpCiAgICAgZW5kaWYoTUlOR1cpCkBAIC0yMDc5LDYgKzI1MzcsNyBAQAogICAgIHBjYXBfbGlzdF90c3RhbXBfdHlwZXMuM3BjYXAuaW4KICAgICBwY2FwX29wZW5fZGVhZC4zcGNhcC5pbgogICAgIHBjYXBfb3Blbl9vZmZsaW5lLjNwY2FwLmluCisgICAgcGNhcF9zZXRfaW1tZWRpYXRlX21vZGUuM3BjYXAuaW4KICAgICBwY2FwX3NldF90c3RhbXBfcHJlY2lzaW9uLjNwY2FwLmluCiAgICAgcGNhcF9zZXRfdHN0YW1wX3R5cGUuM3BjYXAuaW4KICkKQEAgLTIxMDIsNiArMjU2MSw3IEBACiAgICAgcGNhcF9nZXRfcmVxdWlyZWRfc2VsZWN0X3RpbWVvdXQuM3BjYXAKICAgICBwY2FwX2dldF9zZWxlY3RhYmxlX2ZkLjNwY2FwCiAgICAgcGNhcF9nZXRlcnIuM3BjYXAKKyAgICBwY2FwX2luaXQuM3BjYXAKICAgICBwY2FwX2luamVjdC4zcGNhcAogICAgIHBjYXBfaXNfc3dhcHBlZC4zcGNhcAogICAgIHBjYXBfbGliX3ZlcnNpb24uM3BjYXAKQEAgLTIxMTQsNyArMjU3NCw2IEBACiAgICAgcGNhcF9vcGVuX2xpdmUuM3BjYXAKICAgICBwY2FwX3NldF9idWZmZXJfc2l6ZS4zcGNhcAogICAgIHBjYXBfc2V0X2RhdGFsaW5rLjNwY2FwCi0gICAgcGNhcF9zZXRfaW1tZWRpYXRlX21vZGUuM3BjYXAKICAgICBwY2FwX3NldF9wcm9taXNjLjNwY2FwCiAgICAgcGNhcF9zZXRfcHJvdG9jb2xfbGludXguM3BjYXAKICAgICBwY2FwX3NldF9yZm1vbi4zcGNhcApAQCAtMjE0NCwxOSArMjYwMywxOSBAQAogaWYoV0lOMzIpCiAgICAgaWYoTVNWQyBBTkQgQ01BS0VfU0laRU9GX1ZPSURfUCBFUVVBTCA4KQogICAgICAgICAjCi0gICAgICAgICMgSW5zdGFsbCA2NC1iaXQgY29kZSBidWlsdCB3aXRoIE1TVkMgaW4gdGhlIGFtZDY0IHN1YmRpcmVjdG9yaWVzLAorICAgICAgICAjIEluc3RhbGwgNjQtYml0IGNvZGUgYnVpbHQgd2l0aCBNU1ZDIGluIHRoZSB4NjQgc3ViZGlyZWN0b3JpZXMsCiAgICAgICAgICMgYXMgdGhhdCdzIHdoZXJlIGl0IGV4cGVjdHMgaXQgdG8gYmUuCiAgICAgICAgICMKICAgICAgICAgaW5zdGFsbChUQVJHRVRTICR7TElCUkFSWV9OQU1FfSAke0xJQlJBUllfTkFNRV9TVEFUSUN9Ci0gICAgICAgICAgICAgICAgUlVOVElNRSBERVNUSU5BVElPTiBiaW4vYW1kNjQKLSAgICAgICAgICAgICAgICBMSUJSQVJZIERFU1RJTkFUSU9OIGxpYi9hbWQ2NAotICAgICAgICAgICAgICAgIEFSQ0hJVkUgREVTVElOQVRJT04gbGliL2FtZDY0KQorICAgICAgICAgICAgICAgIFJVTlRJTUUgREVTVElOQVRJT04gYmluL3g2NAorICAgICAgICAgICAgICAgIExJQlJBUlkgREVTVElOQVRJT04gbGliL3g2NAorICAgICAgICAgICAgICAgIEFSQ0hJVkUgREVTVElOQVRJT04gbGliL3g2NCkKICAgICAgICAgaWYoTk9UIE1JTkdXKQogICAgICAgICAgICAgaW5zdGFsbChGSUxFUyAkPFRBUkdFVF9GSUxFX0RJUjoke0xJQlJBUllfTkFNRV9TVEFUSUN9Pi8ke0xJQlJBUllfTkFNRV9TVEFUSUN9LnBkYgotICAgICAgICAgICAgICAgICAgICBERVNUSU5BVElPTiBiaW4vYW1kNjQgT1BUSU9OQUwpCisgICAgICAgICAgICAgICAgICAgIERFU1RJTkFUSU9OIGJpbi94NjQgT1BUSU9OQUwpCiAgICAgICAgICAgICBpZihCVUlMRF9TSEFSRURfTElCUykKICAgICAgICAgICAgICAgICBpbnN0YWxsKEZJTEVTICQ8VEFSR0VUX1BEQl9GSUxFOiR7TElCUkFSWV9OQU1FfT4KLSAgICAgICAgICAgICAgICAgICAgICAgIERFU1RJTkFUSU9OIGJpbi9hbWQ2NCBPUFRJT05BTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIERFU1RJTkFUSU9OIGJpbi94NjQgT1BUSU9OQUwpCiAgICAgICAgICAgICBlbmRpZihCVUlMRF9TSEFSRURfTElCUykKICAgICAgICAgZW5kaWYoTk9UIE1JTkdXKQogICAgIGVsc2UoTVNWQyBBTkQgQ01BS0VfU0laRU9GX1ZPSURfUCBFUVVBTCA4KQpAQCAtMjE3OSw3ICsyNjM4LDcgQEAKICAgICAgICAgZW5kaWYoTk9UIE1JTkdXKQogICAgIGVuZGlmKE1TVkMgQU5EIENNQUtFX1NJWkVPRl9WT0lEX1AgRVFVQUwgOCkKIGVsc2UoV0lOMzIpCi0gICAgaW5zdGFsbChUQVJHRVRTICR7TElCUkFSWV9OQU1FfSAke0xJQlJBUllfTkFNRV9TVEFUSUN9IERFU1RJTkFUSU9OIGxpYikKKyAgICBpbnN0YWxsKFRBUkdFVFMgJHtMSUJSQVJZX05BTUV9ICR7TElCUkFSWV9OQU1FX1NUQVRJQ30gREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX0ZVTExfTElCRElSfSkKIGVuZGlmKFdJTjMyKQogCiBpbnN0YWxsKERJUkVDVE9SWSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vcGNhcC8gREVTVElOQVRJT04gaW5jbHVkZS9wY2FwKQpAQCAtMjE5NCw3ICsyNjUzLDcgQEAKICAgICBzZXQocHJlZml4ICR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9KQogICAgIHNldChleGVjX3ByZWZpeCAiXCR7cHJlZml4fSIpCiAgICAgc2V0KGluY2x1ZGVkaXIgIlwke3ByZWZpeH0vaW5jbHVkZSIpCi0gICAgc2V0KGxpYmRpciAiXCR7ZXhlY19wcmVmaXh9L2xpYiIpCisgICAgc2V0KGxpYmRpciAiXCR7ZXhlY19wcmVmaXh9LyR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9IikKICAgICBpZihDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiRnJlZUJTRCIgT1IKICAgICAgICBDTUFLRV9TWVNURU1fTkFNRSBTVFJFUVVBTCAiTmV0QlNEIiBPUgogICAgICAgIENNQUtFX1NZU1RFTV9OQU1FIFNUUkVRVUFMICJPcGVuQlNEIiBPUgpAQCAtMjIyNSw4ICsyNjg0LDggQEAKICAgICBmb3JlYWNoKExJQiAke1BDQVBfTElOS19MSUJSQVJJRVN9KQogICAgICAgICBzZXQoTElCUyAiJHtMSUJTfSAtbCR7TElCfSIpCiAgICAgZW5kZm9yZWFjaChMSUIpCi0gICAgY29uZmlndXJlX2ZpbGUoJHtDTUFLRV9TT1VSQ0VfRElSfS9wY2FwLWNvbmZpZy5pbiAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcGNhcC1jb25maWcgQE9OTFkpCi0gICAgY29uZmlndXJlX2ZpbGUoJHtDTUFLRV9TT1VSQ0VfRElSfS9saWJwY2FwLnBjLmluICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9saWJwY2FwLnBjIEBPTkxZKQorICAgIGNvbmZpZ3VyZV9maWxlKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wY2FwLWNvbmZpZy5pbiAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcGNhcC1jb25maWcgQE9OTFkpCisgICAgY29uZmlndXJlX2ZpbGUoJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2xpYnBjYXAucGMuaW4gJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2xpYnBjYXAucGMgQE9OTFkpCiAgICAgaW5zdGFsbChQUk9HUkFNUyAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vcGNhcC1jb25maWcgREVTVElOQVRJT04gYmluKQogICAgIGluc3RhbGwoRklMRVMgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2xpYnBjYXAucGMgREVTVElOQVRJT04gbGliL3BrZ2NvbmZpZykKIApAQCAtMjIzNiw1NCArMjY5NSw2NCBAQAogICAgICMgRm9yIGVhY2ggc2VjdGlvbiBvZiB0aGUgbWFudWFsIGZvciB3aGljaCB3ZSBoYXZlIG1hbiBwYWdlcwogICAgICMgdGhhdCByZXF1aXJlIG1hY3JvIGV4cGFuc2lvbiwgZG8gdGhlIGV4cGFuc2lvbi4KICAgICAjCi0gICAgc2V0KE1BTjEgIiIpCi0gICAgZm9yZWFjaChNQU5QQUdFICR7TUFOMV9OT0VYUEFORH0pCi0gICAgICAgIHNldChNQU4xICR7TUFOMX0gJHtDTUFLRV9TT1VSQ0VfRElSfS8ke01BTlBBR0V9KQotICAgIGVuZGZvcmVhY2goTUFOUEFHRSkKLSAgICBpbnN0YWxsKEZJTEVTICR7TUFOMX0gREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMSkKKyAgICAjIElmIHRoaXMgaXMgTWluR1csIG1heWJlIHdlIGhhdmUgYSBVTipYLXN0eWxlIGxuIGNvbW1hbmQgYW5kCisgICAgIyBtYXliZSB3ZSBkb24ndC4gIChObywgd2UgZG8gKk5PVCogcmVxdWlyZSBNU1lTISkgIElmIHdlIGRvbid0CisgICAgIyBoYXZlIGl0LCBkb24ndCBkbyB0aGUgbWFuIHBhZ2VzLgorICAgICMKKyAgICBpZihNSU5HVykKKyAgICAgICAgZmluZF9wcm9ncmFtKExJTktfRVhFQ1VUQUJMRSBsbikKKyAgICBlbmRpZihNSU5HVykKKyAgICBpZihVTklYIE9SIChNSU5HVyBBTkQgTElOS19FWEVDVVRBQkxFKSkKKyAgICAgICAgc2V0KE1BTjEgIiIpCisgICAgICAgIGZvcmVhY2goTUFOUEFHRSAke01BTjFfTk9FWFBBTkR9KQorICAgICAgICAgICAgc2V0KE1BTjEgJHtNQU4xfSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vJHtNQU5QQUdFfSkKKyAgICAgICAgZW5kZm9yZWFjaChNQU5QQUdFKQorICAgICAgICBpbnN0YWxsKEZJTEVTICR7TUFOMX0gREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMSkKIAotICAgIHNldChNQU4zUENBUCAiIikKLSAgICBmb3JlYWNoKE1BTlBBR0UgJHtNQU4zUENBUF9OT0VYUEFORH0pCi0gICAgICAgIHNldChNQU4zUENBUCAke01BTjNQQ0FQfSAke0NNQUtFX1NPVVJDRV9ESVJ9LyR7TUFOUEFHRX0pCi0gICAgZW5kZm9yZWFjaChNQU5QQUdFKQotICAgIGZvcmVhY2goVEVNUExBVEVfTUFOUEFHRSAke01BTjNQQ0FQX0VYUEFORH0pCi0gICAgICAgIHN0cmluZyhSRVBMQUNFICIuaW4iICIiIE1BTlBBR0UgJHtURU1QTEFURV9NQU5QQUdFfSkKLSAgICAgICAgY29uZmlndXJlX2ZpbGUoJHtDTUFLRV9TT1VSQ0VfRElSfS8ke1RFTVBMQVRFX01BTlBBR0V9ICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8ke01BTlBBR0V9IEBPTkxZKQotICAgICAgICBzZXQoTUFOM1BDQVAgJHtNQU4zUENBUH0gJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7TUFOUEFHRX0pCi0gICAgZW5kZm9yZWFjaChURU1QTEFURV9NQU5QQUdFKQotICAgIGluc3RhbGwoRklMRVMgJHtNQU4zUENBUH0gREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMykKLSAgICBpbnN0YWxsX21hbnBhZ2Vfc3ltbGluayhwY2FwX2RhdGFsaW5rX3ZhbF90b19uYW1lLjNwY2FwIHBjYXBfZGF0YWxpbmtfdmFsX3RvX2Rlc2NyaXB0aW9uLjNwY2FwICR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjMpCi0gICAgaW5zdGFsbF9tYW5wYWdlX3N5bWxpbmsocGNhcF9kdW1wX29wZW4uM3BjYXAgcGNhcF9kdW1wX2ZvcGVuLjNwY2FwICR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjMpCi0gICAgaW5zdGFsbF9tYW5wYWdlX3N5bWxpbmsocGNhcF9maW5kYWxsZGV2cy4zcGNhcCBwY2FwX2ZyZWVhbGxkZXZzLjNwY2FwICR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjMpCi0gICAgaW5zdGFsbF9tYW5wYWdlX3N5bWxpbmsocGNhcF9nZXRlcnIuM3BjYXAgcGNhcF9wZXJyb3IuM3BjYXAgJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMykKLSAgICBpbnN0YWxsX21hbnBhZ2Vfc3ltbGluayhwY2FwX2luamVjdC4zcGNhcCBwY2FwX3NlbmRwYWNrZXQuM3BjYXAgJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMykKLSAgICBpbnN0YWxsX21hbnBhZ2Vfc3ltbGluayhwY2FwX2xpc3RfZGF0YWxpbmtzLjNwY2FwIHBjYXBfZnJlZV9kYXRhbGlua3MuM3BjYXAgJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMykKLSAgICBpbnN0YWxsX21hbnBhZ2Vfc3ltbGluayhwY2FwX2xpc3RfdHN0YW1wX3R5cGVzLjNwY2FwIHBjYXBfZnJlZV90c3RhbXBfdHlwZXMuM3BjYXAgJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMykKLSAgICBpbnN0YWxsX21hbnBhZ2Vfc3ltbGluayhwY2FwX2xvb3AuM3BjYXAgcGNhcF9kaXNwYXRjaC4zcGNhcCAke0NNQUtFX0lOU1RBTExfTUFORElSfS9tYW4zKQotICAgIGluc3RhbGxfbWFucGFnZV9zeW1saW5rKHBjYXBfbWFqb3JfdmVyc2lvbi4zcGNhcCBwY2FwX21pbm9yX3ZlcnNpb24uM3BjYXAgJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMykKLSAgICBpbnN0YWxsX21hbnBhZ2Vfc3ltbGluayhwY2FwX25leHRfZXguM3BjYXAgcGNhcF9uZXh0LjNwY2FwICR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjMpCi0gICAgaW5zdGFsbF9tYW5wYWdlX3N5bWxpbmsocGNhcF9vcGVuX2RlYWQuM3BjYXAgcGNhcF9vcGVuX2RlYWRfd2l0aF90c3RhbXBfcHJlY2lzaW9uLjNwY2FwICR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjMpCi0gICAgaW5zdGFsbF9tYW5wYWdlX3N5bWxpbmsocGNhcF9vcGVuX29mZmxpbmUuM3BjYXAgcGNhcF9vcGVuX29mZmxpbmVfd2l0aF90c3RhbXBfcHJlY2lzaW9uLjNwY2FwICR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjMpCi0gICAgaW5zdGFsbF9tYW5wYWdlX3N5bWxpbmsocGNhcF9vcGVuX29mZmxpbmUuM3BjYXAgcGNhcF9mb3Blbl9vZmZsaW5lLjNwY2FwICR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjMpCi0gICAgaW5zdGFsbF9tYW5wYWdlX3N5bWxpbmsocGNhcF9vcGVuX29mZmxpbmUuM3BjYXAgcGNhcF9mb3Blbl9vZmZsaW5lX3dpdGhfdHN0YW1wX3ByZWNpc2lvbi4zcGNhcCAke0NNQUtFX0lOU1RBTExfTUFORElSfS9tYW4zKQotICAgIGluc3RhbGxfbWFucGFnZV9zeW1saW5rKHBjYXBfdHN0YW1wX3R5cGVfdmFsX3RvX25hbWUuM3BjYXAgcGNhcF90c3RhbXBfdHlwZV92YWxfdG9fZGVzY3JpcHRpb24uM3BjYXAgJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMykKLSAgICBpbnN0YWxsX21hbnBhZ2Vfc3ltbGluayhwY2FwX3NldG5vbmJsb2NrLjNwY2FwIHBjYXBfZ2V0bm9uYmxvY2suM3BjYXAgJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMykKKyAgICAgICAgc2V0KE1BTjNQQ0FQICIiKQorICAgICAgICBmb3JlYWNoKE1BTlBBR0UgJHtNQU4zUENBUF9OT0VYUEFORH0pCisgICAgICAgICAgICBzZXQoTUFOM1BDQVAgJHtNQU4zUENBUH0gJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9LyR7TUFOUEFHRX0pCisgICAgICAgIGVuZGZvcmVhY2goTUFOUEFHRSkKKyAgICAgICAgZm9yZWFjaChURU1QTEFURV9NQU5QQUdFICR7TUFOM1BDQVBfRVhQQU5EfSkKKyAgICAgICAgICAgIHN0cmluZyhSRVBMQUNFICIuaW4iICIiIE1BTlBBR0UgJHtURU1QTEFURV9NQU5QQUdFfSkKKyAgICAgICAgICAgIGNvbmZpZ3VyZV9maWxlKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke1RFTVBMQVRFX01BTlBBR0V9ICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8ke01BTlBBR0V9IEBPTkxZKQorICAgICAgICAgICAgc2V0KE1BTjNQQ0FQICR7TUFOM1BDQVB9ICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8ke01BTlBBR0V9KQorICAgICAgICBlbmRmb3JlYWNoKFRFTVBMQVRFX01BTlBBR0UpCisgICAgICAgIGluc3RhbGwoRklMRVMgJHtNQU4zUENBUH0gREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMykKKyAgICAgICAgaW5zdGFsbF9tYW5wYWdlX3N5bWxpbmsocGNhcF9kYXRhbGlua192YWxfdG9fbmFtZS4zcGNhcCBwY2FwX2RhdGFsaW5rX3ZhbF90b19kZXNjcmlwdGlvbi4zcGNhcCAke0NNQUtFX0lOU1RBTExfTUFORElSfS9tYW4zKQorICAgICAgICBpbnN0YWxsX21hbnBhZ2Vfc3ltbGluayhwY2FwX2RhdGFsaW5rX3ZhbF90b19uYW1lLjNwY2FwIHBjYXBfZGF0YWxpbmtfdmFsX3RvX2Rlc2NyaXB0aW9uX29yX2RsdC4zcGNhcCAke0NNQUtFX0lOU1RBTExfTUFORElSfS9tYW4zKQorICAgICAgICBpbnN0YWxsX21hbnBhZ2Vfc3ltbGluayhwY2FwX2R1bXBfb3Blbi4zcGNhcCBwY2FwX2R1bXBfZm9wZW4uM3BjYXAgJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMykKKyAgICAgICAgaW5zdGFsbF9tYW5wYWdlX3N5bWxpbmsocGNhcF9maW5kYWxsZGV2cy4zcGNhcCBwY2FwX2ZyZWVhbGxkZXZzLjNwY2FwICR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjMpCisgICAgICAgIGluc3RhbGxfbWFucGFnZV9zeW1saW5rKHBjYXBfZ2V0ZXJyLjNwY2FwIHBjYXBfcGVycm9yLjNwY2FwICR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjMpCisgICAgICAgIGluc3RhbGxfbWFucGFnZV9zeW1saW5rKHBjYXBfaW5qZWN0LjNwY2FwIHBjYXBfc2VuZHBhY2tldC4zcGNhcCAke0NNQUtFX0lOU1RBTExfTUFORElSfS9tYW4zKQorICAgICAgICBpbnN0YWxsX21hbnBhZ2Vfc3ltbGluayhwY2FwX2xpc3RfZGF0YWxpbmtzLjNwY2FwIHBjYXBfZnJlZV9kYXRhbGlua3MuM3BjYXAgJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMykKKyAgICAgICAgaW5zdGFsbF9tYW5wYWdlX3N5bWxpbmsocGNhcF9saXN0X3RzdGFtcF90eXBlcy4zcGNhcCBwY2FwX2ZyZWVfdHN0YW1wX3R5cGVzLjNwY2FwICR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjMpCisgICAgICAgIGluc3RhbGxfbWFucGFnZV9zeW1saW5rKHBjYXBfbG9vcC4zcGNhcCBwY2FwX2Rpc3BhdGNoLjNwY2FwICR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjMpCisgICAgICAgIGluc3RhbGxfbWFucGFnZV9zeW1saW5rKHBjYXBfbWFqb3JfdmVyc2lvbi4zcGNhcCBwY2FwX21pbm9yX3ZlcnNpb24uM3BjYXAgJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMykKKyAgICAgICAgaW5zdGFsbF9tYW5wYWdlX3N5bWxpbmsocGNhcF9uZXh0X2V4LjNwY2FwIHBjYXBfbmV4dC4zcGNhcCAke0NNQUtFX0lOU1RBTExfTUFORElSfS9tYW4zKQorICAgICAgICBpbnN0YWxsX21hbnBhZ2Vfc3ltbGluayhwY2FwX29wZW5fZGVhZC4zcGNhcCBwY2FwX29wZW5fZGVhZF93aXRoX3RzdGFtcF9wcmVjaXNpb24uM3BjYXAgJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMykKKyAgICAgICAgaW5zdGFsbF9tYW5wYWdlX3N5bWxpbmsocGNhcF9vcGVuX29mZmxpbmUuM3BjYXAgcGNhcF9vcGVuX29mZmxpbmVfd2l0aF90c3RhbXBfcHJlY2lzaW9uLjNwY2FwICR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjMpCisgICAgICAgIGluc3RhbGxfbWFucGFnZV9zeW1saW5rKHBjYXBfb3Blbl9vZmZsaW5lLjNwY2FwIHBjYXBfZm9wZW5fb2ZmbGluZS4zcGNhcCAke0NNQUtFX0lOU1RBTExfTUFORElSfS9tYW4zKQorICAgICAgICBpbnN0YWxsX21hbnBhZ2Vfc3ltbGluayhwY2FwX29wZW5fb2ZmbGluZS4zcGNhcCBwY2FwX2ZvcGVuX29mZmxpbmVfd2l0aF90c3RhbXBfcHJlY2lzaW9uLjNwY2FwICR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjMpCisgICAgICAgIGluc3RhbGxfbWFucGFnZV9zeW1saW5rKHBjYXBfdHN0YW1wX3R5cGVfdmFsX3RvX25hbWUuM3BjYXAgcGNhcF90c3RhbXBfdHlwZV92YWxfdG9fZGVzY3JpcHRpb24uM3BjYXAgJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuMykKKyAgICAgICAgaW5zdGFsbF9tYW5wYWdlX3N5bWxpbmsocGNhcF9zZXRub25ibG9jay4zcGNhcCBwY2FwX2dldG5vbmJsb2NrLjNwY2FwICR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbjMpCiAKLSAgICBzZXQoTUFORklMRSAiIikKLSAgICBmb3JlYWNoKFRFTVBMQVRFX01BTlBBR0UgJHtNQU5GSUxFX0VYUEFORH0pCi0gICAgICAgIHN0cmluZyhSRVBMQUNFICIubWFuZmlsZS5pbiIgIi4ke01BTl9GSUxFX0ZPUk1BVFN9IiBNQU5QQUdFICR7VEVNUExBVEVfTUFOUEFHRX0pCi0gICAgICAgIGNvbmZpZ3VyZV9maWxlKCR7Q01BS0VfU09VUkNFX0RJUn0vJHtURU1QTEFURV9NQU5QQUdFfSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vJHtNQU5QQUdFfSBAT05MWSkKLSAgICAgICAgc2V0KE1BTkZJTEUgJHtNQU5GSUxFfSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vJHtNQU5QQUdFfSkKLSAgICBlbmRmb3JlYWNoKFRFTVBMQVRFX01BTlBBR0UpCi0gICAgaW5zdGFsbChGSUxFUyAke01BTkZJTEV9IERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbiR7TUFOX0ZJTEVfRk9STUFUU30pCisgICAgICAgIHNldChNQU5GSUxFICIiKQorICAgICAgICBmb3JlYWNoKFRFTVBMQVRFX01BTlBBR0UgJHtNQU5GSUxFX0VYUEFORH0pCisgICAgICAgICAgICBzdHJpbmcoUkVQTEFDRSAiLm1hbmZpbGUuaW4iICIuJHtNQU5fRklMRV9GT1JNQVRTfSIgTUFOUEFHRSAke1RFTVBMQVRFX01BTlBBR0V9KQorICAgICAgICAgICAgY29uZmlndXJlX2ZpbGUoJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9LyR7VEVNUExBVEVfTUFOUEFHRX0gJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7TUFOUEFHRX0gQE9OTFkpCisgICAgICAgICAgICBzZXQoTUFORklMRSAke01BTkZJTEV9ICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8ke01BTlBBR0V9KQorICAgICAgICBlbmRmb3JlYWNoKFRFTVBMQVRFX01BTlBBR0UpCisgICAgICAgIGluc3RhbGwoRklMRVMgJHtNQU5GSUxFfSBERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfTUFORElSfS9tYW4ke01BTl9GSUxFX0ZPUk1BVFN9KQogCi0gICAgc2V0KE1BTk1JU0MgIiIpCi0gICAgZm9yZWFjaChURU1QTEFURV9NQU5QQUdFICR7TUFOTUlTQ19FWFBBTkR9KQotICAgICAgICBzdHJpbmcoUkVQTEFDRSAiLm1hbm1pc2MuaW4iICIuJHtNQU5fTUlTQ19JTkZPfSIgTUFOUEFHRSAke1RFTVBMQVRFX01BTlBBR0V9KQotICAgICAgICBjb25maWd1cmVfZmlsZSgke0NNQUtFX1NPVVJDRV9ESVJ9LyR7VEVNUExBVEVfTUFOUEFHRX0gJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7TUFOUEFHRX0gQE9OTFkpCi0gICAgICAgIHNldChNQU5NSVNDICR7TUFOTUlTQ30gJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7TUFOUEFHRX0pCi0gICAgZW5kZm9yZWFjaChURU1QTEFURV9NQU5QQUdFKQotICAgIGluc3RhbGwoRklMRVMgJHtNQU5NSVNDfSBERVNUSU5BVElPTiAke0NNQUtFX0lOU1RBTExfTUFORElSfS9tYW4ke01BTl9NSVNDX0lORk99KQorICAgICAgICBzZXQoTUFOTUlTQyAiIikKKyAgICAgICAgZm9yZWFjaChURU1QTEFURV9NQU5QQUdFICR7TUFOTUlTQ19FWFBBTkR9KQorICAgICAgICAgICAgc3RyaW5nKFJFUExBQ0UgIi5tYW5taXNjLmluIiAiLiR7TUFOX01JU0NfSU5GT30iIE1BTlBBR0UgJHtURU1QTEFURV9NQU5QQUdFfSkKKyAgICAgICAgICAgIGNvbmZpZ3VyZV9maWxlKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke1RFTVBMQVRFX01BTlBBR0V9ICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS8ke01BTlBBR0V9IEBPTkxZKQorICAgICAgICAgICAgc2V0KE1BTk1JU0MgJHtNQU5NSVNDfSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vJHtNQU5QQUdFfSkKKyAgICAgICAgZW5kZm9yZWFjaChURU1QTEFURV9NQU5QQUdFKQorICAgICAgICBpbnN0YWxsKEZJTEVTICR7TUFOTUlTQ30gREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuJHtNQU5fTUlTQ19JTkZPfSkKKyAgICBlbmRpZihVTklYIE9SIChNSU5HVyBBTkQgTElOS19FWEVDVVRBQkxFKSkKIGVuZGlmKE5PVCBNU1ZDKQogCiAjIHVuaW5zdGFsbCB0YXJnZXQKZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IDhiN2U3Y2UuLmQwMWU4MzIgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMywyOSArMyw0MiBAQAogVGhlIGN1cnJlbnQgbWFpbnRhaW5lcnMgKGluIGFscGhhYmV0aWNhbCBvcmRlcik6CiAgICAgRGVuaXMgT3ZzaWVua28gICAgICAgICAgICAgICAgPGRlbmlzIGF0IG92c2llbmtvIGRvdCBpbmZvPgogICAgIEZyYW5jb2lzLVhhdmllciBMZSBCYWlsICAgICAgIDxkZXZlbCBkb3QgZnggZG90IGxlYmFpbCBhdCBvcmFuZ2UgZG90IGZyPgotICAgIEd1eSBIYXJyaXMgICAgICAgICAgICAgICAgICAgIDxndXkgYXQgYWx1bSBkb3QgbWl0IGRvdCBlZHU+CisgICAgR3V5IEhhcnJpcyAgICAgICAgICAgICAgICAgICAgPGdoYXJyaXMgYXQgc29uaWMgZG90IG5ldD4KICAgICBNaWNoYWVsIFJpY2hhcmRzb24gICAgICAgICAgICA8bWNyIGF0IHNhbmRlbG1hbiBkb3Qgb3R0YXdhIGRvdCBvbiBkb3QgY2E+CiAKIEFkZGl0aW9uYWwgcGVvcGxlIHdobyBoYXZlIGNvbnRyaWJ1dGVkIHBhdGNoZXMgKGluIGFscGhhYmV0aWNhbCBvcmRlcik6CisgICAgQWRyaWFuIEJ1ZGF1ICAgICAgICAgICAgICAgICAgPGFkYnVkYXUgYXQgYml0ZGVmZW5kZXIgZG90IGNvbT4KICAgICBBa29zIFZhbmRyYSAgICAgICAgICAgICAgICAgICA8YXhvczg4IGF0IGdtYWlsIGRvdCBjb20+CiAgICAgQWxhbiBCYXdkZW4gICAgICAgICAgICAgICAgICAgPEFsYW4gYXQgTENTIGRvdCBNSVQgZG90IEVEVT4KICAgICBBbGJlcnQgQ2hpbiAgICAgICAgICAgICAgICAgICA8Y2hpbmEgYXQgdGhld3JpdHRlbndvcmQgZG90IGNvbT4KKyAgICBBbGV4YW5kZXIgR2FsYW5pbiAgICAgICAgICAgICA8YWwgYXQgZ2FsYW5pbiBkb3Qgbm5vdiBkb3QgcnU+CiAgICAgQWxleGFuZGVyICdMZW8nIEJlcmdvbHRoICAgICAgPExlbyBkb3QgQmVyZ29sdGggYXQgd3Utd2llbiBkb3QgYWMgZG90IGF0PgogICAgIEFsZXhleSBLdXpuZXRzb3YgICAgICAgICAgICAgIDxrdXpuZXQgYXQgbXMyIGRvdCBpbnIgZG90IGFjIGRvdCBydT4KKyAgICBBbGV4IFNtaXRoICAgICAgICAgICAgICAgICAgICA8NDQzMjI1MDMrTWFkQWxleFVLIGF0IHVzZXJzIGRvdCBub3JlcGx5IGRvdCBnaXRodWIgZG90IGNvbT4KKyAgICBBbGZyZWRvIEFsdmFyZXogRmVybmFuZGV6ICAgICA8YWxmcmVkb2FsdmFyZXplcm5hbmRleiBhdCBnbWFpbCBkb3QgY29tPgogICAgIEFsaSBBYmR1bGthZGlyICAgICAgICAgICAgICAgIDxhdXRvc3RhcnQgZG90IGluaSBhdCBnbWFpbCBkb3QgY29tPgogICAgIEFsb24gQmFyLUxldiAgICAgICAgICAgICAgICAgIDxhbG9uYmwgYXQgc291cmNlZm9yZ2UgZG90IG5ldD4KKyAgICBBbmRlcnMgQnJvbWFuICAgICAgICAgICAgICAgICA8YW5kZXJzIGRvdCBicm9tYW4gYXQgZXJpY3Nzb24gZG90IGNvbT4KICAgICBBbmRyZXMgUGVyZXJhICAgICAgICAgICAgICAgICA8YW5kcmVzIGRvdCBwIGF0IHpvaG8gZG90IGNvbT4KICAgICBBbmRyZXcgQnJvd24gICAgICAgICAgICAgICAgICA8YXRhdGF0IGF0IGF0YXRkb3QgZG90IG5ldD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YW5keS0xIGF0IHNvdXJjZWZvcmdlIGRvdCBuZXQ+CiAgICAgQW5pIFNpbmhhICAgICAgICAgICAgICAgICAgICAgPGFuaSBhdCBhcmlzdGFuZXR3b3JrcyBkb3QgY29tPgorICAgIEFudGhvbnkgS2lyYnkgICAgICAgICAgICAgICAgIDxBbnRob255IGRvdCBLaXJieSBhdCBub21pbmV0IGRvdCB1az4KICAgICBBbnR0aSBLYW50ZWUgICAgICAgICAgICAgICAgICA8cG9va2EgYXQgbmV0YnNkIGRvdCBvcmc+CiAgICAgQXJpZW4gVmlqbiAgICAgICAgICAgICAgICAgICAgPGFyaWVudmlqbiBhdCBzb3VyY2Vmb3JnZSBkb3QgbmV0PgogICAgIEFya2FkaXVzeiBNaXNraWV3aWN6ICAgICAgICAgIDxtaXNpZWsgYXQgcGxkIGRvdCBvcmcgZG90IHBsPgogICAgIEFybWFuZG8gTC4gQ2FybyBKci4gICAgICAgICAgIDxhY2FybyBhdCBtYWlsIGRvdCBlZWNpcyBkb3QgdWRlbCBkb3QgZWR1PgogICAgIEFzc2FyIFdlc3Rlcmx1bmQgICAgICAgICAgICAgIDxhc3NhciBhdCBzaWNzIGRvdCBzZT4KKyAgICBBdHptIFdhdGFuYWJlICAgICAgICAgICAgICAgICA8YXR6bSBhdCBhdHptIGRvdCBvcmc+CisgICAgQmFwdGlzdGUgUGV1Z25leiAgICAgICAgICAgICAgPGJhcHRpc3RlIGRvdCBwZXVnbmV6IGF0IGNlYSBkb3QgZnI+CisgICAgQmFydWNoIFNpYWNoICAgICAgICAgICAgICAgICAgPGJhcnVjaCBhdCB0a29zIGRvdCBjbyBkb3QgaWw+CiAgICAgQmlsbCBQYXJrZXIgICAgICAgICAgICAgICAgICAgPHdwMDI4NTUgYXQgZ21haWwgZG90IGNvbT4KKyAgICBibGF6ZWFibGUgICAgICAgICAgICAgICAgICAgICA8YmxhemVhYmxlIGF0IGJsYXplYWJsZSBkb3QgZXU+CisgICAgYmxlYWRlciAgICAgICAgICAgICAgICAgICAgICAgPGJsZWFkZXIgYXQgcmF0b25sYW5kIGRvdCBvcmc+CiAgICAgQnJlbnQgQ29vayAgICAgICAgICAgICAgICAgICAgPGJyZW50IGF0IGJvdW5kYXJ5IGRvdCBjb20+CiAgICAgQnJpYW4gR2luc2JhY2ggICAgICAgICAgICAgICAgPGdpbnNiYWNoIGF0IGNyYXkgZG90IGNvbT4KKyAgICBCLiBTY290dCBNaWNoZWwgICAgICAgICAgICAgICA8c2Nvb3RlciBkb3QgcGhkIGF0IGdtYWlsIGRvdCBjb20+CisgICAgQ2VkcmljIENlbGxpZXIgICAgICAgICAgICAgICAgPHJpeGVkIGF0IGhhcHB5bGVwdGljIGRvdCBvcmc+CiAgICAgQ2hhcmxlcyBNLiBIYW5udW0gICAgICAgICAgICAgPG15Y3JvZnQgYXQgbmV0YnNkIGRvdCBvcmc+CiAgICAgQ2hyaXMgRy4gRGVtZXRyaW91ICAgICAgICAgICAgPGNnZCBhdCBuZXRic2QgZG90IG9yZz4KICAgICBDaHJpcyBMaWdodGZvb3QgICAgICAgICAgICAgICA8Y3dybCBhdCB1c2VycyBkb3Qgc291cmNlZm9yZ2UgZG90IG5ldD4KQEAgLTM0LDE1ICs0NywyMiBAQAogICAgIENocmlzdGlhbiBCZWxsICAgICAgICAgICAgICAgIDxjc2JlbGwgYXQgbXlyaSBkb3QgY29tPgogICAgIENocmlzdGlhbiBQZXJvbiAgICAgICAgICAgICAgIDxjc2pwIGF0IGZyZWVic2QgZG90IG9yZz4KICAgICBDaHJpc3RpYW4gU3ZlbnNzb24gICAgICAgICAgICA8Ymx1ZSBhdCBjbWQgZG90IG51PgorICAgIENocmlzdG9waGVyIEsgTGVlICAgICAgICAgICAgIDxjaHJpc3RvcGhlciBkb3QgbGVlIGF0IGNzcGkgZG90IGNvbT4KKyAgICBEYW5pZWwgQm9ya21hbm4gICAgICAgICAgICAgICA8ZGJvcmttYW4gYXQgcmVkaGF0IGRvdCBjb20+CiAgICAgRGFuaWVsZSBPcmxhbmRpICAgICAgICAgICAgICAgPGRhbmllbGUgYXQgb3JsYW5kaSBkb3QgY29tPgorICAgIERhbmllbCBMdWJsaW4gICAgICAgICAgICAgICAgIDxkYW5pZWwgYXQgbHVibGluIGRvdCBzZT4KKyAgICBEYW5pZWwgTWlsbGVyICAgICAgICAgICAgICAgICA8ZG1pbGxlciBhdCBubWFwIGRvdCBvcmc+CisgICAgRGFyaW8gTG9tYmFyZG8gICAgICAgICAgICAgICAgPGxvbWF0byBhdCBnbWFpbCBkb3QgY29tPgogICAgIERhcnJlbiBMaW0gICAgICAgICAgICAgICAgICAgIDxkYXJyZW4gZG90IGxpbSBhdCBlbmRhY2UgZG90IGNvbT4KICAgICBEYXJyZW4gUmVlZCAgICAgICAgICAgICAgICAgICA8ZGFycmVuciBhdCBzdW4gZG90IGNvbT4KKyAgICBEYXZlIEJhcmFjaCAgICAgICAgICAgICAgICAgICA8ZGF2ZSBhdCBiYXJhY2hzIGRvdCBuZXQ+CiAgICAgRGF2aWQgQ2xhcmsgICAgICAgICAgICAgICAgICAgPGRhdmlkIGRvdCBjbGFyayBhdCBkYXRhc29mdCBkb3QgY29tPgogICAgIERhdmlkIEthZWxibGluZyAgICAgICAgICAgICAgIDxkcmsgYXQgc2dpIGRvdCBjb20+CiAgICAgRGF2aWQgV2FyZCAgICAgICAgICAgICAgICAgICAgPGRhdmlkIGRvdCB3YXJkIGF0IGxsIGRvdCBtaXQgZG90IGVkdT4KICAgICBEYXZpZCBZb3VuZyAgICAgICAgICAgICAgICAgICA8ZHlvdW5nIGF0IG9qY3RlY2ggZG90IGNvbT4KICAgICBEZWFuIEdhdWRldCAgICAgICAgICAgICAgICAgICA8ZGVhbiBhdCBhcmN0aWMgZG90IG9yZz4KICAgICBkaHJ1diAgICAgICAgICAgICAgICAgICAgICAgICA8cnNyaXZhdCBhdCBzb3VyY2Vmb3JnZSBkb3QgbmV0PgorICAgIERteXRybyBPdmRpaWVua28gICAgICAgICAgICAgIDxkbWl0cml5IGRvdCBvdmRpZW5rbyBhdCBnbWFpbCBkb3QgY29tPgogICAgIERvbiBFYnJpZ2h0ICAgICAgICAgICAgICAgICAgIDxEb24gZG90IEVicmlnaHQgYXQgY29tcHV3YXJlIGRvdCBjb20+CiAgICAgRHVnIFNvbmcgICAgICAgICAgICAgICAgICAgICAgPGR1Z3NvbmcgYXQgbW9ua2V5IGRvdCBvcmc+CiAgICAgRHVzdGluIFNwaWN1enphICAgICAgICAgICAgICAgPGR1c3RpbiBhdCB2aXJ0dWFscm9hZHNpZGUgZG90IGNvbT4KQEAgLTUwLDggKzcwLDEyIEBACiAgICAgRWR3YXJkIFNoZWxkcmFrZSAgICAgICAgICAgICAgPGVqczE5MjAgYXQgc291cmNlZm9yZ2UgZG90IG5ldD4KICAgICBFcmljIEFuZGVyc29uICAgICAgICAgICAgICAgICA8YW5kZXJzZSBhdCBocGwgZG90IGhwIGRvdCBjb20+CiAgICAgRXJpayBkZSBDYXN0cm8gTG9wbyAgICAgICAgICAgPGVyaWsgZG90IGRlIGRvdCBjYXN0cm8gZG90IGxvcG8gYXQgc2Vuc29yeW5ldHdvcmtzIGRvdCBjb20+CisgICAgRmVkb3IgU2FraGFyb3YgICAgICAgICAgICAgICAgPGZlZG9yIGRvdCBzYWtoYXJvdiBhdCBnbWFpbCBkb3QgY29tPgorICAgIEZlbGl4IEphbmRhICAgICAgICAgICAgICAgICAgIDxmZWxpeCBkb3QgamFuZGEgYXQgcG9zdGVvIGRvdCBkZT4KICAgICBGZWxpeCBPYmVuaHViZXIgICAgICAgICAgICAgICA8ZmVsaXggYXQgb2Jlbmh1YmVyIGRvdCBkZT4KICAgICBGbG9yZW50IERyb3VpbiAgICAgICAgICAgICAgICA8RmxvcmVudCBkb3QgRHJvdWluIGF0IGFsY2F0ZWwtbHVjZW50IGRvdCBmcj4KKyAgICBGbG9yaWFuIEZhaW5lbGxpICAgICAgICAgICAgICA8ZiBkb3QgZmFpbmVsbGkgYXQgZ21haWwgZG90IGNvbT4KKyAgICBGcmFuw6dvaXMgUmV2b2wgICAgICAgICAgICAgICAgPHJldm9sIGF0IGZyZWUgZG90IGZyPgogICAgIEZyYW56IFNjaGFlZmVyICAgICAgICAgICAgICAgIDxzY2hhZWZlciBhdCBtb25kIGRvdCBhdD4KICAgICBmcmVkZXJpY2ggICAgICAgICAgICAgICAgICAgICA8ZnJlZGVyaWNoIGF0IHNvdXJjZWZvcmdlIGRvdCBuZXQ+CiAgICAgRnVsa28gSGV3ICAgICAgICAgICAgICAgICAgICAgPGZ1bGtvIGRvdCBoZXcgYXQgZ21haWwgZG90IGNvbT4KQEAgLTU5LDYgKzgzLDcgQEAKICAgICBHYWJvciBUYXRhcmthICAgICAgICAgICAgICAgICA8Z2Fib3IgZG90IHRhdGFya2EgYXQgZXJpY3Nzb24gZG90IGNvbT4KICAgICBHYXJyZXR0IENvb3BlciAgICAgICAgICAgICAgICA8eWFiZXJhdW5leWEgYXQgc291cmNlZm9yZ2UgZG90IG5ldD4KICAgICBHZW9yZ2UgTmV2aWxsZS1OZWlsICAgICAgICAgICA8Z25uIGF0IGZyZWVic2QgZG90IG9yZz4KKyAgICBHZXJhbGQgQ29tYnMgICAgICAgICAgICAgICAgICA8Z2VyYWxkIGF0IHppbmcgZG90IG9yZz4KICAgICBHZXJhcmQgR2FyY2lhICAgICAgICAgICAgICAgICA8bm91Ym9oIGF0IGdtYWlsIGRvdCBjb20+CiAgICAgR2lhbmx1Y2EgVmFyZW5uaSAgICAgICAgICAgICAgPGdpYW5sdWNhIGRvdCB2YXJlbm5pIGF0IGdtYWlsIGRvdCBjb20+CiAgICAgR2lsYmVydCBIb3llayAgICAgICAgICAgICAgICAgPGdpbF9ob3llayBhdCBob3RtYWlsIGRvdCBjb20+CkBAIC03MSw0NyArOTYsNjQgQEAKICAgICBHdXN0YXZvIFphY2FyaWFzICAgICAgICAgICAgICA8Z3VzdGF2byBhdCB6YWNhcmlhcyBkb3QgY29tIGRvdCBhcj4KICAgICBIYWdlbiBQYXVsIFBmZWlmZXIgICAgICAgICAgICA8aGFnZW4gYXQgamF1dSBkb3QgbmV0PgogICAgIEhlbnJpIERvcmVhdSAgICAgICAgICAgICAgICAgIDxoZG9yZWF1IGF0IHNvdXJjZWZvcmdlIGRvdCBuZXQ+CisgICAgSGlyb2FraSBLQVdBSSAgICAgICAgICAgICAgICAgPGthd2FpIGF0IHN0cmF0b3NwaGVyZSBkb3QgY28gZG90IGpwPgogICAgIEh5dW5nIFNpayBZb29uICAgICAgICAgICAgICAgIDxoc3luIGF0IGtyIGRvdCBpYm0gZG90IGNvbT4KICAgICBJZ29yIEtocmlzdG9waG9yb3YgICAgICAgICAgICA8aWdvciBhdCBhdGRvdCBkb3Qgb3JnPgorICAgIEpha3ViIFNpdG5pY2tpICAgICAgICAgICAgICAgIDxqc2l0bmlja2kgYXQgZ21haWwgZG90IGNvbT4KICAgICBKYWt1YiBaYXdhZHpraSAgICAgICAgICAgICAgICA8ZGFya2phbWVzIGF0IGRhcmtqYW1lcyBkb3QgcGw+CisgICAgSmFtZXMgS28gICAgICAgICAgICAgICAgICAgICAgPGpjayBhdCBleGVnaW4gZG90IGNvbT4KICAgICBKYW4tUGhpbGlwIFZlbGRlcnMgICAgICAgICAgICA8anB2IGF0IHZlbGRlcnNqZXMgZG90IG5ldD4KICAgICBKYXNvbiBSLiBUaG9ycGUgICAgICAgICAgICAgICA8dGhvcnBlaiBhdCBuZXRic2QgZG90IG9yZz4KICAgICBKYXZpZXIgQWNoaXJpY2EgICAgICAgICAgICAgICA8YWNoaXJpY2EgYXQgdHRkIGRvdCBuZXQ+CiAgICAgSmVhbi1Mb3VpcyBDaGFydG9uICAgICAgICAgICAgPEplYW4tTG91aXMgZG90IENIQVJUT04gYXQgb2lraWFsb2cgZG90IGNvbT4KICAgICBKZWFuIFRvdXJyaWxoZXMgICAgICAgICAgICAgICA8anQgYXQgaHBsIGRvdCBocCBkb3QgY29tPgogICAgIEplZmZlcnNvbiBPZ2F0YSAgICAgICAgICAgICAgIDxqb2dhdGEgYXQgbm9kYyBkb3Qgbm9hYSBkb3QgZ292PgorICAgIEplcm9tZSBEdXZhbCAgICAgICAgICAgICAgICAgIDxqZXJvbWUgZG90IGR1dmFsIGF0IGdtYWlsIGRvdCBjb20+CiAgICAgSmVzcGVyIERhbmdhYXJkIEJyb3VlciAgICAgICAgPGhhd2sgYXQgY29teCBkb3QgZGs+CiAgICAgSmVzcGVyIFBldGVyc29uICAgICAgICAgICAgICAgPGplc3BlciBhdCBlbmRhY2UgZG90IGNvbT4KICAgICBKZXNzZSBHcm9zcyAgICAgICAgICAgICAgICAgICA8amVzc2UgYXQgbmljaXJhIGRvdCBjb20+CisgICAgSkhBICAgICAgICAgICAgICAgICAgICAgICAgICAgPGpvbiBkb3QgYW5kZXJzb24gYXQgb3JhY2xlIGRvdCBjb20+CisgICAgamluZ3l1IHlhbmcgICAgICAgICAgICAgICAgICAgPGppbmdsZXlhbmcgYXQgdXNlcnMgZG90IG5vcmVwbHkgZG90IGdpdGh1YiBkb3QgY29tPgogICAgIEppcmkgU2xhYnkgICAgICAgICAgICAgICAgICAgIDxqaXJpc2xhYnkgYXQgZ21haWwgZG90IGNvbT4KKyAgICBKb8OjbyBWYWx2ZXJkZSAgICAgICAgICAgICAgICAgPGpvYW8gZG90IHZhbHZlcmRlIGF0IHRlY25pY28gZG90IHVsaXNib2EgZG90IHB0PgogICAgIEpvZXJnIE1heWVyICAgICAgICAgICAgICAgICAgIDxqbWF5ZXIgYXQgbG9wbG9mIGRvdCBkZT4KICAgICBKb2huIEJhbmtpZXIgICAgICAgICAgICAgICAgICA8amJhbmtpZXIgYXQgcmFpbmZpbml0eSBkb3QgY29tPgogICAgIEpvbiBMaW5kZ3JlbiAgICAgICAgICAgICAgICAgIDxqb25sIGF0IHl1Ynl1YiBkb3QgbmV0PgogICAgIEpvbiBTbWlybCAgICAgICAgICAgICAgICAgICAgIDxqb25zbWlybCBhdCBnbWFpbCBkb3QgY29tPgogICAgIEpvcmdlIEJvbmNvbXB0ZSBbRFRJMl0gICAgICAgIDxqb3JnZSBhdCBkdGkyIGRvdCBuZXQ+CisgICAganJvbWFuciAgICAgICAgICAgICAgICAgICAgICAgPGpyb21hbnIgYXQgaG90bWFpbCBkb3QgY29tPgogICAgIEp1ZXJnZW4gU2Nob2Vud2FlbGRlciAgICAgICAgIDxzY2hvZW53IGF0IGliciBkb3QgY3MgZG90IHR1LWJzIGRvdCBkZT4KICAgICBKdWxpZW4gTW91dGluaG8gICAgICAgICAgICAgICA8anVsbSBhdCBzYXZpbmVzIGRvdCBhbHBlcyBkb3QgZnIgZG90IGV1IGRvdCBvcmc+CiAgICAgSnVuZy11ayBLaW0gICAgICAgICAgICAgICAgICAgPGpraW0gYXQgRnJlZUJTRCBkb3Qgb3JnPgogICAgIEthenVzaGkgU3VneW8gICAgICAgICAgICAgICAgIDxzdWd5byBhdCBwYiBkb3QganAgZG90IG5lYyBkb3QgY29tPgorICAgIEtldmluIEJvdWxhaW4gICAgICAgICAgICAgICAgIDxrZXZpbiBkb3QgYm91bGFpbiBhdCBzZWN1cmFjdGl2ZSBkb3QgbmV0PgogICAgIEtsYXVzIEtsZWluICAgICAgICAgICAgICAgICAgIDxrbGVpbmsgYXQgbmV0YnNkIGRvdCBvcmc+CiAgICAgS29yeW4gR3JhbnQgICAgICAgICAgICAgICAgICAgPGtvcnluIGF0IGVuZGFjZSBkb3QgY29tPgogICAgIEtyaXMgS2F0dGVyam9obiAgICAgICAgICAgICAgIDxrYXR0ZXJqb2huIGF0IGdtYWlsIGRvdCBjb20+CiAgICAgS3J6eXN6dG9mIEhhbGFzYSAgICAgICAgICAgICAgPGtoYyBhdCBwbSBkb3Qgd2F3IGRvdCBwbD4KICAgICBMZW5uZXJ0IEJ1eXRlbmhlayAgICAgICAgICAgICA8YnV5dGVuaCBhdCB3YW50c3RvZmx5IGRvdCBvcmc+CisgICAgbGl4aWFveWFuICAgICAgICAgICAgICAgICAgICAgPGxpeGlhb3lhbiBhdCBnb29nbGUgZG90IGNvbT4KICAgICBMb3JlbnpvIENhdmFsbGFybyAgICAgICAgICAgICA8c3VsbGl2YW4gYXQgc2lrdXJlenphIGRvdCBvcmc+CiAgICAgTG9yaXMgRGVnaW9hbm5pICAgICAgICAgICAgICAgPGxvcmlzIGF0IG5ldGdyb3VwLXNlcnYgZG90IHBvbGl0byBkb3QgaXQ+CiAgICAgTG92ZSBIw7ZybnF1aXN0LcOFc3RyYW5kICAgICAgICA8bGhhIGF0IHN0YWNrZW4gZG90IGt0aCBkb3Qgc2U+CiAgICAgTHVpcyBNYXJ0aW5HYXJjaWEgICAgICAgICAgICAgPGx1aXMgZG90IG1nYXJjIGF0IGdtYWlsIGRvdCBjb20+CisgICAgbHh5ICAgICAgICAgICAgICAgICAgICAgICAgICAgPDM5MTg2MTczNyBhdCBxcSBkb3QgY29tPgogICAgIE1hY2llaiBXLiBSb3p5Y2tpICAgICAgICAgICAgIDxtYWNybyBhdCBkczIgZG90IHBnIGRvdCBnZGEgZG90IHBsPgogICAgIE1hbnNvdXIgQmVoYWJhZGkgICAgICAgICAgICAgIDxtYW5zb3VyIGF0IG94cGxvdCBkb3QgY29tPgogICAgIE1hcmN1cyBGZWxpcGUgUGVyZWlyYSAgICAgICAgIDxtYXJjdXMgYXQgdGFzayBkb3QgY29tIGRvdCBicj4KKyAgICBNYXJpbyBKLiBSdWdpZXJvICAgICAgICAgICAgICA8bXJ1Z2llcm8gYXQgZ21haWwgZG90IGNvbT4KICAgICBNYXJrIEMuIEJyb3duICAgICAgICAgICAgICAgICA8bWJyb3duIGF0IGhwIGRvdCBjb20+CiAgICAgTWFyayBKb2huc3RvbiAgICAgICAgICAgICAgICAgPG1hcmtqZGIgYXQgZ21haWwgZG90IGNvbT4KKyAgICBNYXJrIE1hcnNoYWxsICAgICAgICAgICAgICAgICA8bWFyayBkb3QgbWFyc2hhbGwgYXQgb21pY3JvbmVuZXJneSBkb3QgY29tPgogICAgIE1hcmsgUGl6em9sYXRvICAgICAgICAgICAgICAgIDxMaXN0LXRjcGR1bXAtd29ya2VycyBhdCBzdWJzY3JpcHRpb25zIGRvdCBwaXp6b2xhdG8gZG90IG5ldD4KICAgICBNYXJrdXMgTWF5ZXIgICAgICAgICAgICAgICAgICA8bWFya3VzX21heWVyIGF0IHNvdXJjZWZvcmdlIGRvdCBuZXQ+CiAgICAgTWFydGluIEh1c2VtYW5uICAgICAgICAgICAgICAgPG1hcnRpbiBhdCBuZXRic2QgZG90IG9yZz4KICAgICBNw6FydG9uIE7DqW1ldGggICAgICAgICAgICAgICAgIDxubTEyNyBhdCBmcmVlbWFpbCBkb3QgaHU+CisgICAgTWF0dCBFYXRvbiAgICAgICAgICAgICAgICAgICAgPGFnbm9zdGljZGV2IGF0IGdtYWlsIGRvdCBjb20+CiAgICAgTWF0dGhldyBMdWNraWUgICAgICAgICAgICAgICAgPG1qbCBhdCBsdWNraWUgZG90IG9yZyBkb3Qgbno+CisgICAgTWF0dGhpYXMgSGFubmlnICAgICAgICAgICAgICAgPG1hdHRoaWFzIGF0IGhhbm5pZyBkb3QgY2M+CisgICAgTWF0d2V5IFYuIEtvcm5pbG92ICAgICAgICAgICAgPG1hdHdleSBkb3Qga29ybmlsb3YgYXQgZ21haWwgZG90IGNvbT4KKyAgICBtYXhpY2U4ICAgICAgICAgICAgICAgICAgICAgICA8dGhpbmthYml0IGRvdCB1a2ltIGF0IGdtYWlsIGRvdCBjb20+CiAgICAgTWF4IExhaWVyICAgICAgICAgICAgICAgICAgICAgPG1heCBhdCBsb3ZlMnBhcnR5IGRvdCBuZXQ+CiAgICAgTWljaGFsIEt1YmVjZWsgICAgICAgICAgICAgICAgPG1rdWJlY2VrIGF0IHN1c2UgZG90IGN6PgogICAgIE1pY2hhbCBMYWJlZHpraSAgICAgICAgICAgICAgIDxtaWNoYWwgZG90IGxhYmVkemtpIGF0IHRpZXRvIGRvdCBjb20+CkBAIC0xMTksMjUgKzE2MSwzNiBAQAogICAgIE1pa2UgRnJ5c2luZ2VyICAgICAgICAgICAgICAgIDx2YXBpZXIgYXQgZ21haWwgZG90IGNvbT4KICAgICBNaWtlIEtlcnNoYXcgICAgICAgICAgICAgICAgICA8ZHJhZ29ybiBhdCBraXNtZXR3aXJlbGVzcyBkb3QgbmV0PgogICAgIE1pa2UgV2lhY2VrICAgICAgICAgICAgICAgICAgIDxtaWtlIGF0IGlyb290IGRvdCBuZXQ+CisgICAgTWlsb3N6IEthbmlld3NraSAgICAgICAgICAgICAgPG1pbG9zeiBkb3Qga2FuaWV3c2tpIGF0IGdtYWlsIGRvdCBjb20+CiAgICAgTWlyb3NsYXYgTGljaHZhciAgICAgICAgICAgICAgPG1saWNodmFyIGF0IHJlZGhhdCBkb3QgY29tPgogICAgIE1vbnJvZSBXaWxsaWFtcyAgICAgICAgICAgICAgIDxtb25yb2UgYXQgcG9ib3ggZG90IGNvbT4KKyAgICBNeXJpY29tIEhlbHAgICAgICAgICAgICAgICAgICA8bXlyaSBhdCB1c2VycyBkb3Qgbm9yZXBseSBkb3QgZ2l0aHViIGRvdCBjb20+CisgICAgTmFuIFhpYW8gICAgICAgICAgICAgICAgICAgICAgPG5hbiBhdCBjaGluYWR0cmFjZSBkb3Qgb3JnPgorICAgIE5pY2sgS2Vsc2V5ICAgICAgICAgICAgICAgICAgIDxuaWNrayBhdCBzaWxpY29uZHVzdCBkb3QgY29tPgogICAgIE5pY29sYXMgRGFkZSAgICAgICAgICAgICAgICAgIDxuZGFkZSBhdCBuc2QgZG90IGR5bmRucyBkb3Qgb3JnPgogICAgIE5pa28gRGVsYXJpY2ggICAgICAgICAgICAgICAgIDxuaWtvIGRvdCBkZWxhcmljaCBhdCBnbWFpbCBkb3QgY29tPgogICAgIE4uIExlaXRlbiAgICAgICAgICAgICAgICAgICAgIDxubGVpdGVuIGF0IHNvdXJjZWZvcmdlIGRvdCBuZXQ+CisgICAgbm5wb3N0ZXIgICAgICAgICAgICAgICAgICAgICAgPG5ucG9zdGVyIGF0IHVzZXJzIGRvdCBub3JlcGx5IGRvdCBnaXRodWIgZG90IGNvbT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bnZlcmNhbW0gYXQgc291cmNlZm9yZ2UgZG90IG5ldD4KICAgICBPY3RhdmlhbiBDZXJuYSAgICAgICAgICAgICAgICA8dGF2eSBhdCB5bGFicyBkb3QgY29tPgogICAgIE9sYWYgS2lyY2ggICAgICAgICAgICAgICAgICAgIDxva2lyIGF0IGNhbGRlcmEgZG90IGRlPgogICAgIE9sbGllIFdpbGQgICAgICAgICAgICAgICAgICAgIDxhYXcgYXQgdXNlcnMgZG90IHNvdXJjZWZvcmdlIGRvdCBuZXQ+CisgICAgT25kxZllaiBIb8WhZWsgICAgICAgICAgICAgICAgICA8b25kcmEgZG90IGhvc2VrIGF0IGdtYWlsIGRvdCBjb20+CiAgICAgT25ubyB2YW4gZGVyIExpbmRlbiAgICAgICAgICAgPG9ubm8gYXQgc2ltcGxleCBkb3Qgbmw+Ci0gICAgUGFvbG8gQWJlbmkgICAgICAgICAgICAgICAgICAgPHBhb2xvIGRvdCBhYmVuaSBhdCBlbWFpbCBkb3QgaXQ+IGFuZCByZWRoYXQgZG90IGNvbQorICAgIE9yZ2FkIFNoYW5laCAgICAgICAgICAgICAgICAgIDxvcmdhZCBkb3Qgc2hhbmVoIGF0IGF1ZGlvY29kZXMgZG90IGNvbT4KKyAgICDDmHJqYW4gTWFsZGUgICAgICAgICAgICAgICAgICAgPHJlZCBhdCBmb3hpIGRvdCBtZT4KKyAgICBQYW9sbyBBYmVuaSAgICAgICAgICAgICAgICAgICA8cGFiZW5pIGF0IHJlZGhhdCBkb3QgY29tPgogICAgIFBhdHJpY2sgTWFyaWUgICAgICAgICAgICAgICAgIDxteWNyb2Z0IGF0IHZpcmdhcmlhIGRvdCBvcmc+CiAgICAgUGF0cmljayBNY0hhcmR5ICAgICAgICAgICAgICAgPGthYmVyIGF0IHRyYXNoIG5vdCBuZXQ+CiAgICAgUGF1bCBNdW5kdCAgICAgICAgICAgICAgICAgICAgPGxldGhhbCBhdCBsaW51eC1zaCBkb3Qgb3JnPgogICAgIFBhdmVsIEthbmtvdnNreSAgICAgICAgICAgICAgIDxrYW4gYXQgZGNpdCBkb3QgY3o+CisgICAgUGF3ZWwgQnJ6ZXppbnNraSAgICAgICAgICAgICAgPHBhd2VsIGRvdCBicnplemluc2tpIGF0IGhhcm1hbiBkb3QgY29tPgogICAgIFBhd2VsIFBva3J5d2thICAgICAgICAgICAgICAgIDxwdWJsaWNwcCBhdCBnbWFpbCBkb3QgY29tPgogICAgIFBldGVyIEZhbGVzICAgICAgICAgICAgICAgICAgIDxwZXRlciBhdCBmYWxlcy1sb3JlbnogZG90IG5ldD4KICAgICBQZXRlciBKZXJlbXkgICAgICAgICAgICAgICAgICA8cGV0ZXIgZG90IGplcmVteSBhdCBhbGNhdGVsIGRvdCBjb20gZG90IGF1PgogICAgIFBldGVyIFZvbGtvdiAgICAgICAgICAgICAgICAgIDxwdmEgYXQgZ2VudG9vIGRvdCBvcmc+CisgICAgUGV0ciBWb3JlbCAgICAgICAgICAgICAgICAgICAgPHB2b3JlbCBhdCBzdXNlIGRvdCBjej4KKyAgICBQaGlsaXBwZSBBbnRvaW5lICAgICAgICAgICAgICA8Y29udGFjdCBhdCBjYXRlbmFjeWJlciBkb3QgZnI+CiAgICAgUGhpbCBXb29kICAgICAgICAgICAgICAgICAgICAgPGNwdyBhdCBsYW5sIGRvdCBnb3Y+CiAgICAgUmFmYWwgTWFzemtvd3NraSAgICAgICAgICAgICAgPHJ6bSBhdCBpY20gZG90IGVkdSBkb3QgcGw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJjYi1pc2lzIGF0IHVzZXJzIGRvdCBzb3VyY2Vmb3JnZSBkb3QgbmV0PgpAQCAtMTQ1LDkgKzE5OCw5IEBACiAgICAgUmljayBKb25lcyAgICAgICAgICAgICAgICAgICAgPHJhaiBhdCBjdXAgZG90IGhwIGRvdCBjb20+CiAgICAgUm9iZXJ0IEVkbW9uZHMgICAgICAgICAgICAgICAgPHN0dS00MiBhdCBzb3VyY2Vmb3JnZSBkb3QgbmV0PgogICAgIFJvYmVydG8gTWFyaWFuaSAgICAgICAgICAgICAgIDxqZWxvdC10Y3BkdW1wIGF0IGplbG90IGRvdCBpdD4KLSAgICBSb25neGkgTGkgICAgICAgICAgICAgICAgICAgICA8cm9uZ3hpIGRvdCBsaSBhdCBjaGFpdGluIGRvdCBjb20+CiAgICAgUm9sYW5kIERyZWllciAgICAgICAgICAgICAgICAgPHJvbGFuZCBhdCBwdXJlc3RvcmFnZSBkb3QgY29tPgogICAgIFJvbWFpbiBGcmFuY29pc2UgICAgICAgICAgICAgIDxyZnJhbmNvaXNlIGF0IGRlYmlhbiBkb3Qgb3JnPgorICAgIFJvbmd4aSBMaSAgICAgICAgICAgICAgICAgICAgIDxyb25neGkgZG90IGxpIGF0IGNoYWl0aW4gZG90IGNvbT4KICAgICBTYWd1biBTaGFreWEgICAgICAgICAgICAgICAgICA8c2FndW4gZG90IHNoYWt5YSBhdCBzdW4gZG90IGNvbT4KICAgICBTY290dCBCYXJyb24gICAgICAgICAgICAgICAgICA8c2IxMjU0OTkgYXQgb2hpb3UgZG90IGVkdT4KICAgICBTY290dCBHaWZmb3JkICAgICAgICAgICAgICAgICA8c2dpZmZvcmQgYXQgdGlyIGRvdCBjb20+CkBAIC0xNTYsMjIgKzIwOSwzNyBAQAogICAgIFNlYmFzdGllbiBSb3kgICAgICAgICAgICAgICAgIDxTZWJhc3RpZW4gZG90IFJveSBhdCBTdW4gZG90IENPTT4KICAgICBTZXBoZXJvc2EgWmllaGF1ICAgICAgICAgICAgICA8c2VwaGVyb3NhIGF0IGdtYWlsIGRvdCBjb20+CiAgICAgU2hhdW4gQ2xvd2VzICAgICAgICAgICAgICAgICAgPGRlbGl1cyBhdCBwcm9nc29jIGRvdCB1dHMgZG90IGVkdSBkb3QgYXU+CisgICAgc29sb2ZveCAgICAgICAgICAgICAgICAgICAgICAgPHdlbnNnMTAwIGF0IHNpbmEgZG90IGNvbT4KICAgICBTb2xvbW9uIFBlYWNoeSAgICAgICAgICAgICAgICA8cGl6emEgYXQgc2hhZnRuZXQgZG90IG9yZz4KICAgICBTdGVmYW4gSHVkc29uICAgICAgICAgICAgICAgICA8aHVkc29uIGF0IG1iYXkgZG90IG5ldD4KICAgICBTdGVwaGVuIERvbm5lbGx5ICAgICAgICAgICAgICA8c3RlcGhlbiBhdCBlbmRhY2UgZG90IGNvbT4KKyAgICBTdGV2ZSBLYXJnICAgICAgICAgICAgICAgICAgICA8c2thcmcgYXQgdXNlcnMgZG90IHNvdXJjZWZvcmdlIGRvdCBuZXQ+CisgICAgc3R1YmJmZWwgICAgICAgICAgICAgICAgICAgICAgPHN0dWJiZmVsIGF0IGdtYWlsIGRvdCBjb20+CiAgICAgVGFrYXNoaSBZYW1hbW90byAgICAgICAgICAgICAgPHlhbXQgYXQgbXdkIGRvdCBiaWdsb2JlIGRvdCBuZSBkb3QganA+CiAgICAgVGFuYWthIFNoaW4teWEgICAgICAgICAgICAgICAgPHpzdGFuYWthIGF0IGFyY2hlciBkb3QgbGl2ZWRvb3IgZG90IGNvbT4KKyAgICBUaG9tYXMgSGFiZXRzICAgICAgICAgICAgICAgICA8aGFiZXRzIGF0IGdvb2dsZSBkb3QgY29tPgorICAgIFRob21hcyBQZXRhenpvbmkgICAgICAgICAgICAgIDx0aG9tYXMgZG90IHBldGF6em9uaSBhdCBmcmVlLWVsZWN0cm9ucyBkb3QgY29tPgogICAgIFRvYmlhcyBQb3NjaHdhdHRhICAgICAgICAgICAgIDxwb3NjaCBhdCBzb3VyY2Vmb3JnZSBkb3QgbmV0PgorICAgIFRvbWFzeiBNb8WEICAgICAgICAgICAgICAgICAgICA8ZGVzb3dpbiBhdCBnbWFpbCBkb3QgY29tPgorICAgIFRvbW15IEJlYWRsZSAgICAgICAgICAgICAgICAgIDx0YmVhZGxlIGF0IGFyYm9yIGRvdCBuZXQ+CiAgICAgVG9ueSBMaSAgICAgICAgICAgICAgICAgICAgICAgPHRsaSBhdCBwcm9ja2V0IGRvdCBjb20+CiAgICAgVG9yc3RlbiBMYW5kc2Nob2ZmICAgICAgICAgICAgPHRvcnN0ZW4gYXQgZGViaWFuIGRvdCBvcmc+CisgICAgVHltb3RldXN6IEJsYXplamN6eWsgICAgICAgICAgPHR5bW90ZXVzeiBkb3QgYmxhemVqY3p5ayBhdCBpbnRlbCBkb3QgY29tPgogICAgIFVucyBMaWRlciAgICAgICAgICAgICAgICAgICAgIDx1bnNsaWRlciBhdCBtaXJhbmRhIGRvdCBvcmc+CiAgICAgVXdlIEdpcmxpY2ggICAgICAgICAgICAgICAgICAgPFV3ZSBkb3QgR2lybGljaCBhdCBwaGlsb3N5cyBkb3QgZGU+CisgICAgVml0YWx5IExhdnJvdiAgICAgICAgICAgICAgICAgPHZlbDIxcmlwbiBhdCBnbWFpbCBkb3QgY29tPgorICAgIFZpdmllbiBEaWRlbG90ICAgICAgICAgICAgICAgIDx2aXZpZW4gZG90IGRpZGVsb3QgYXQgZ21haWwgZG90IGNvbT4KKyAgICBWbGFkaW1pciBHbGFka292ICAgICAgICAgICAgICA8dm92a29zIGF0IGdtYWlsIGRvdCBjb20+CisgICAgVmxhZGltaXIgTWFyZWsgICAgICAgICAgICAgICAgPHZsbWFyZWsgYXQgdm9sbnkgZG90IGN6PgorICAgIFdhbHRlciBTY2hlbGwgICAgICAgICAgICAgICAgIDx3YWx0ZXJzY2hlbGwgYXQgdXNlcnMgZG90IG5vcmVwbHkgZG90IGdpdGh1YiBkb3QgY29tPgogICAgIFdlc2xleSBTaGllbGRzICAgICAgICAgICAgICAgIDx3eHMgYXQgRnJlZUJTRCBkb3Qgb3JnPgogICAgIFhpYW5qaWUgWmhhbmcgICAgICAgICAgICAgICAgIDx4emhhbmcgYXQgY3VwIGRvdCBocCBkb3QgY29tPgogICAgIFhpbiBMaSAgICAgICAgICAgICAgICAgICAgICAgIDxkZWxwaGlqIGF0IEZyZWVCU0QgZG90IG9yZz4KICAgICBYdWUgSmlhbmcgUWluZyAgICAgICAgICAgICAgICA8eHVlamlhbnFpbmcgYXQgc3Rhci1uZXQgZG90IGNuPgorICAgIFlhbmcgTHVvICAgICAgICAgICAgICAgICAgICAgIDxoc2x1b3l6IGF0IHFxIGRvdCBjb20+CiAgICAgWWVuIFllbiBMaW0KICAgICBZb2FubiBWYW5kb29yc2VsYWVyZSAgICAgICAgICA8eW9hbm4gYXQgcHJlbHVkZS1pZHMgZG90IG9yZz4KKyAgICBZb2dlc2ggUHJhc2FkICAgICAgICAgICAgICAgICA8eW9nZXNoIGRvdCBwcmFzYWQgYXQgcm9ja3dlbGxjb2xsaW5zIGRvdCBjb20+CiAgICAgWXZhbiBWYW5odWxsZWJ1cyAgICAgICAgICAgICAgPHZhbmh1IGF0IHNvdXJjZWZvcmdlIGRvdCBuZXQ+CiAKIFRoZSBvcmlnaW5hbCBMQkwgY3JldzoKZGlmZiAtLWdpdCBhL0lOU1RBTEwubWQgYi9JTlNUQUxMLm1kCmluZGV4IDk2Yzg3YTIuLmJhOGI4ZjkgMTAwNjQ0Ci0tLSBhL0lOU1RBTEwubWQKKysrIGIvSU5TVEFMTC5tZApAQCAtNDEsOCArNDEsOCBAQAogY29tcGF0aWJsZSB3aXRoIHRoZW0gKGlmIGFueSBleGlzdCksIHRvIGJ1aWxkIGxpYnBjYXAuICBUaGUgY29uZmlndXJlCiBzY3JpcHQgd2lsbCBhYm9ydCBpZiB0aGVyZSBpc24ndCBhbnkgc3VjaCBwcm9ncmFtLiAgSWYgeW91IGRvbid0IGhhdmUKIGFueSBzdWNoIHByb2dyYW0sIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgQmlzb24gY2FuIGJlIGZvdW5kIGF0Ci1odHRwOi8vZnRwLmdudS5vcmcvZ251L2Jpc29uLyBhbmQgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBCZXJrZWxleSBZQUNDCi1jYW4gYmUgZm91bmQgYXQgaHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L2J5YWNjLy4KK2h0dHBzOi8vZnRwLmdudS5vcmcvZ251L2Jpc29uLyBhbmQgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBCZXJrZWxleSBZQUNDCitjYW4gYmUgZm91bmQgYXQgaHR0cHM6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9ieWFjYy8uCiAKIFNvbWV0aW1lcyB0aGUgc3RvY2sgQyBjb21waWxlciBkb2VzIG5vdCBpbnRlcmFjdCB3ZWxsIHdpdGggRmxleCBhbmQKIEJpc29uLiBUaGUgbGlzdCBvZiBwcm9ibGVtcyBpbmNsdWRlcyB1bmRlZmluZWQgcmVmZXJlbmNlcyBmb3IgYWxsb2NhLgpAQCAtMTg4LDcgKzE4OCw3IEBACiByZWxlYXNlLiBJdCBpcyBrbm93biB0byBjb21waWxlIGFuZCBydW4gb24gU0lOSVgtWS9OIDUuNDIgd2l0aCB0aGUgQy1EUwogVjEuMCBvciBWMS4xIGNvbXBpbGVyLiBCdXQgbm90ZSB0aGF0IGluIHNvbWUgcmVsZWFzZXMgb2YgU0lOSVgsIHlhY2MKIGVtaXRzIGluY29ycmVjdCBjb2RlOyBpZiBncmFtbWFyLnkgZmFpbHMgdG8gY29tcGlsZSwgY2hhbmdlIGV2ZXJ5Ci1vY2N1cmVuY2Ugb2Y6CitvY2N1cnJlbmNlIG9mOgogCiAJI2lmZGVmIFlZREVCVUcKIApAQCAtMjA2LDcgKzIwNiw3IEBACiBuZXR3b3JrIHRyYWZmaWMuICBTQ08gZG8gbm90IGFwcGVhciB0byBwcm92aWRlIHRjcGR1bXAgYmluYXJpZXMgZm9yCiBPcGVuU2VydmVyIDUgb3IgT3BlblNlcnZlciA2IGFzIHBhcnQgb2YgU0NPIFNrdW5rd2FyZToKIAotCWh0dHA6Ly93d3cuc2NvLmNvbS9za3Vua3dhcmUvCisgIGh0dHA6Ly93d3cuc2NvLmNvbS9za3Vua3dhcmUvCiAKIElmIHlvdSB1c2UgVW5peFdhcmUsIHlvdSBtaWdodCBiZSBhYmxlIHRvIGJ1aWxkIGxpYnBjYXAgZnJvbSB0aGlzCiByZWxlYXNlLCBvciB5b3UgbWlnaHQgbm90LiAgV2UgZG8gbm90IGhhdmUgYSBtYWNoaW5lIHJ1bm5pbmcgVW5peFdhcmUsCkBAIC0yMjEsNyArMjIxLDcgQEAKIGhpZ2hlciBpcyByZWNvbW1lbmRlZCAoMS4xNCBpcyBrbm93biB0byBjYXVzZSBwcm9ibGVtcyAxLjE2IGlzIGtub3duIHRvCiB3b3JrKS4gRWl0aGVyIHBpY2sgdXAgYSBjdXJyZW50IHZlcnNpb24gZnJvbToKIAotCWh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvYmlzb24vCisgIGh0dHBzOi8vZnRwLmdudS5vcmcvZ251L2Jpc29uLwogCiBvciBoYWNrIGFyb3VuZCBpdCBieSBpbnNlcnRpbmcgdGhlIGxpbmVzOgogCkBAIC0yNDgsMTA2ICsyNDgsMTA0IEBACiAKIEZJTEVTCiAtLS0tLQotQ0hBTkdFUwkJLSBkZXNjcmlwdGlvbiBvZiBkaWZmZXJlbmNlcyBiZXR3ZWVuIHJlbGVhc2VzCi1DaG1vZEJQRi8qCS0gbWFjT1Mgc3RhcnR1cCBpdGVtIHRvIHNldCBvd25lcnNoaXAgYW5kIHBlcm1pc3Npb25zCi0JCSAgb24gL2Rldi9icGYqCi1DTWFrZUxpc3RzLnR4dAktIENNYWtlIGZpbGUKLUNPTlRSSUJVVElORwktIGd1aWRlbGluZXMgZm9yIGNvbnRyaWJ1dGluZwotQ1JFRElUUwkJLSBwZW9wbGUgdGhhdCBoYXZlIGhlbHBlZCBsaWJwY2FwIGFsb25nCi1JTlNUQUxMLm1kCS0gdGhpcyBmaWxlCi1MSUNFTlNFCQktIHRoZSBsaWNlbnNlIHVuZGVyIHdoaWNoIHRjcGR1bXAgaXMgZGlzdHJpYnV0ZWQKLU1ha2VmaWxlLmluCS0gY29tcGlsYXRpb24gcnVsZXMgKGlucHV0IHRvIHRoZSBjb25maWd1cmUgc2NyaXB0KQotUkVBRE1FLm1kCS0gZGVzY3JpcHRpb24gb2YgZGlzdHJpYnV0aW9uCi1kb2MvUkVBRE1FLmFpeAktIG5vdGVzIG9uIHVzaW5nIGxpYnBjYXAgb24gQUlYCi1kb2MvUkVBRE1FLmRhZwktIG5vdGVzIG9uIHVzaW5nIGxpYnBjYXAgdG8gY2FwdHVyZSBvbiBFbmRhY2UgREFHIGRldmljZXMKLWRvYy9SRUFETUUuaHB1eAktIG5vdGVzIG9uIHVzaW5nIGxpYnBjYXAgb24gSFAtVVgKLWRvYy9SRUFETUUubGludXgubWQgLSBub3RlcyBvbiB1c2luZyBsaWJwY2FwIG9uIExpbnV4Ci1kb2MvUkVBRE1FLm1hY29zCS0gbm90ZXMgb24gdXNpbmcgbGlicGNhcCBvbiBtYWNPUwotZG9jL1JFQURNRS5zZXB0ZWwgICAtIG5vdGVzIG9uIHVzaW5nIGxpYnBjYXAgdG8gY2FwdHVyZSBvbiBJbnRlbC9TZXB0ZWwgZGV2aWNlcwotZG9jL1JFQURNRS5zaXRhCS0gbm90ZXMgb24gdXNpbmcgbGlicGNhcCB0byBjYXB0dXJlIG9uIFNJVEEgZGV2aWNlcwotZG9jL1JFQURNRS50cnU2NAktIG5vdGVzIG9uIHVzaW5nIGxpYnBjYXAgb24gRGlnaXRhbC9UcnU2NCBVTklYCi1kb2MvUkVBRE1FLldpbjMyCS0gbm90ZXMgb24gdXNpbmcgbGlicGNhcCBvbiBXaW4zMiBzeXN0ZW1zICh3aXRoIFdpblBjYXApCi1WRVJTSU9OCQktIHZlcnNpb24gb2YgdGhpcyByZWxlYXNlCi1hY2NvbmZpZy5oCS0gc3VwcG9ydCBmb3IgcG9zdC0yLjEzIGF1dG9jb25mCi1hY2xvY2FsLm00CS0gYXV0b2NvbmYgbWFjcm9zCi1hcmNuZXQuaAktIEFSQ05FVCBkZWZpbml0aW9ucwotYXRtdW5pMzEuaAktIEFUTSBRLjI5MzEgZGVmaW5pdGlvbnMKLWJwZi9uZXQJCS0gY29weSBvZiBicGZfZmlsdGVyLmMKLWJwZl9kdW1wLmMJLSBCUEYgcHJvZ3JhbSBwcmludGluZyByb3V0aW5lcwotYnBmX2ZpbHRlci5jCS0gc3ltbGluayB0byBicGYvbmV0L2JwZl9maWx0ZXIuYwotYnBmX2ltYWdlLmMJLSBCUEYgZGlzYXNzZW1ibHkgcm91dGluZQotY29uZmlnLmd1ZXNzCS0gYXV0b2NvbmYgc3VwcG9ydAotY29uZmlnLmguaW4JLSBhdXRvY29uZiBpbnB1dAotY29uZmlnLnN1YgktIGF1dG9jb25mIHN1cHBvcnQKLWNvbmZpZ3VyZQktIGNvbmZpZ3VyZSBzY3JpcHQgKHJ1biB0aGlzIGZpcnN0KQotY29uZmlndXJlLmFjCS0gY29uZmlndXJlIHNjcmlwdCBzb3VyY2UKLWRscGlzdWJzLmMJLSBETFBJLXJlbGF0ZWQgZnVuY3Rpb25zIGZvciBwY2FwLWRscGkuYyBhbmQgcGNhcC1saWJkbHBpLmMKLWRscGlzdWJzLmgJLSBETFBJLXJlbGF0ZWQgZnVuY3Rpb24gZGVjbGFyYXRpb25zCi1ldGhlcmVudC5jCS0gL2V0Yy9ldGhlcnMgc3VwcG9ydCByb3V0aW5lcwotZXRoZXJ0eXBlLmgJLSBFdGhlcm5ldCBwcm90b2NvbCB0eXBlcyBhbmQgbmFtZXMgZGVmaW5pdGlvbnMKLWZhZC1nZXRhZC5jCS0gcGNhcF9maW5kYWxsZGV2cygpIGZvciBzeXN0ZW1zIHdpdGggZ2V0aWZhZGRycygpCi1mYWQtZ2lmYy5jCS0gcGNhcF9maW5kYWxsZGV2cygpIGZvciBzeXN0ZW1zIHdpdGggb25seSBTSU9DR0lGTElTVAotZmFkLWdsaWZjLmMJLSBwY2FwX2ZpbmRhbGxkZXZzKCkgZm9yIHN5c3RlbXMgd2l0aCBTSU9DR0xJRkNPTkYKLWZpbHRlcnRlc3QuYwktIHRlc3QgcHJvZ3JhbSBmb3IgQlBGIGNvbXBpbGVyCi1maW5kYWxsZGV2c3Rlc3QuYyAtIHRlc3QgcHJvZ3JhbSBmb3IgcGNhcF9maW5kYWxsZGV2cygpCi1nZW5jb2RlLmMJLSBCUEYgY29kZSBnZW5lcmF0aW9uIHJvdXRpbmVzCi1nZW5jb2RlLmgJLSBCUEYgY29kZSBnZW5lcmF0aW9uIGRlZmluaXRpb25zCi1ncmFtbWFyLnkJLSBmaWx0ZXIgc3RyaW5nIGdyYW1tYXIKLWllZWU4MDIxMS5oCS0gODAyLjExIGRlZmluaXRpb25zCi1pbnN0YWxsLXNoCS0gQlNEIHN0eWxlIGluc3RhbGwgc2NyaXB0Ci1sYmwvb3MtKi5oCS0gT1MtZGVwZW5kZW50IGRlZmluZXMgYW5kIHByb3RvdHlwZXMKLWxsYy5oCQktIDgwMi4yIExMQyBTQVAgZGVmaW5pdGlvbnMKLW1pc3NpbmcvKgktIHJlcGxhY2VtZW50cyBmb3IgbWlzc2luZyBsaWJyYXJ5IGZ1bmN0aW9ucwotbWtkZXAJCS0gY29uc3RydWN0IE1ha2VmaWxlIGRlcGVuZGVuY3kgbGlzdAotbXNkb3MvKgkJLSBkcml2ZXJzIGZvciBNUy1ET1MgY2FwdHVyZSBzdXBwb3J0Ci1uYW1ldG9hZGRyLmMJLSBob3N0bmFtZSB0byBhZGRyZXNzIHJvdXRpbmVzCi1ubHBpZC5oCQktIE9TSSBuZXR3b3JrIGxheWVyIHByb3RvY29sIGlkZW50aWZpZXIgZGVmaW5pdGlvbnMKLW5ldAkJLSBzeW1saW5rIHRvIGJwZi9uZXQKLW9wdGltaXplLmMJLSBCUEYgb3B0aW1pemF0aW9uIHJvdXRpbmVzCi1wY2FwL2JsdWV0b290aC5oIC0gcHVibGljIGRlZmluaXRpb24gb2YgRExUX0JMVUVUT09USF9IQ0lfSDRfV0lUSF9QSERSIGhlYWRlcgotcGNhcC9icGYuaAktIEJQRiBkZWZpbml0aW9ucwotcGNhcC9uYW1lZGIuaAktIHB1YmxpYyBsaWJwY2FwIG5hbWUgZGF0YWJhc2UgZGVmaW5pdGlvbnMKLXBjYXAvcGNhcC5oCS0gcHVibGljIGxpYnBjYXAgZGVmaW5pdGlvbnMKLXBjYXAvc2xsLmgJLSBwdWJsaWMgZGVmaW5pdGlvbiBvZiBETFRfTElOVVhfU0xMIGhlYWRlcgotcGNhcC91c2IuaAktIHB1YmxpYyBkZWZpbml0aW9uIG9mIERMVF9VU0IgaGVhZGVyCi1wY2FwLWJwZi5jCS0gQlNEIFBhY2tldCBGaWx0ZXIgc3VwcG9ydAotcGNhcC1icGYuaAktIGhlYWRlciBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKLXBjYXAtYnQtbGludXguYwktIEJsdWV0b290aCBjYXB0dXJlIHN1cHBvcnQgZm9yIExpbnV4Ci1wY2FwLWJ0LWxpbnV4LmgJLSBCbHVldG9vdGggY2FwdHVyZSBzdXBwb3J0IGZvciBMaW51eAotcGNhcC1kYWcuYwktIEVuZGFjZSBEQUcgZGV2aWNlIGNhcHR1cmUgc3VwcG9ydAotcGNhcC1kYWcuaAktIEVuZGFjZSBEQUcgZGV2aWNlIGNhcHR1cmUgc3VwcG9ydAotcGNhcC1kbHBpLmMJLSBEYXRhIExpbmsgUHJvdmlkZXIgSW50ZXJmYWNlIHN1cHBvcnQKLXBjYXAtZG9zLmMJLSBNUy1ET1MgY2FwdHVyZSBzdXBwb3J0Ci1wY2FwLWRvcy5oCS0gaGVhZGVycyBmb3IgTVMtRE9TIGNhcHR1cmUgc3VwcG9ydAotcGNhcC1lbmV0LmMJLSBlbmV0IHN1cHBvcnQKLXBjYXAtaW50LmgJLSBpbnRlcm5hbCBsaWJwY2FwIGRlZmluaXRpb25zCi1wY2FwLWxpYmRscGkuYwktIERhdGEgTGluayBQcm92aWRlciBJbnRlcmZhY2Ugc3VwcG9ydCBmb3Igc3lzdGVtcyB3aXRoIGxpYmRscGkKLXBjYXAtbGludXguYwktIExpbnV4IHBhY2tldCBzb2NrZXQgc3VwcG9ydAotcGNhcC1uYW1lZGIuaAktIGhlYWRlciBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKLXBjYXAtbml0LmMJLSBTdW5PUyBOZXR3b3JrIEludGVyZmFjZSBUYXAgc3VwcG9ydAotcGNhcC1uaXQuaAktIFN1bk9TIE5ldHdvcmsgSW50ZXJmYWNlIFRhcCBkZWZpbml0aW9ucwotcGNhcC1ucGYuYwktIFdpblBjYXAgY2FwdHVyZSBzdXBwb3J0Ci1wY2FwLW51bGwuYwktIGR1bW15IG1vbml0b3Igc3VwcG9ydCAoYWxsb3dzIG9mZmxpbmUgdXNlIG9mIGxpYnBjYXApCi1wY2FwLXBmLmMJLSBVbHRyaXggYW5kIERpZ2l0YWwvVHJ1NjQgVU5JWCBQYWNrZXQgRmlsdGVyIHN1cHBvcnQKLXBjYXAtcGYuaAktIFVsdHJpeCBhbmQgRGlnaXRhbC9UcnU2NCBVTklYIFBhY2tldCBGaWx0ZXIgZGVmaW5pdGlvbnMKLXBjYXAtc2VwdGVsLmMgICAtIEludGVsL1NlcHRlbCBkZXZpY2UgY2FwdHVyZSBzdXBwb3J0Ci1wY2FwLXNlcHRlbC5oICAgLSBJbnRlbC9TZXB0ZWwgZGV2aWNlIGNhcHR1cmUgc3VwcG9ydAotcGNhcC1zaXRhLmMJLSBTSVRBIGRldmljZSBjYXB0dXJlIHN1cHBvcnQKLXBjYXAtc2l0YS5oCS0gU0lUQSBkZXZpY2UgY2FwdHVyZSBzdXBwb3J0Ci1wY2FwLXNpdGEuaHRtbAktIFNJVEEgZGV2aWNlIGNhcHR1cmUgZG9jdW1lbnRhdGlvbgotcGNhcC1zdGRpbmMuaAktIGluY2x1ZGVzIGFuZCAjZGVmaW5lcyBmb3IgY29tcGlsaW5nIG9uIFdpbjMyIHN5c3RlbXMKLXBjYXAtc25pdC5jCS0gU3VuT1MgNC54IFNUUkVBTVMtYmFzZWQgTmV0d29yayBJbnRlcmZhY2UgVGFwIHN1cHBvcnQKLXBjYXAtc25vb3AuYwktIElSSVggU25vb3AgbmV0d29yayBtb25pdG9yaW5nIHN1cHBvcnQKLXBjYXAtdXNiLWxpbnV4LmMgLSBVU0IgY2FwdHVyZSBzdXBwb3J0IGZvciBMaW51eAotcGNhcC11c2ItbGludXguaCAtIFVTQiBjYXB0dXJlIHN1cHBvcnQgZm9yIExpbnV4Ci1wY2FwLjNwY2FwCS0gbWFudWFsIGVudHJ5IGZvciB0aGUgbGlicmFyeQotcGNhcC5jCQktIHBjYXAgdXRpbGl0eSByb3V0aW5lcwotcGNhcC5oCQktIGhlYWRlciBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKLXBjYXBfKi4zcGNhcAktIG1hbnVhbCBlbnRyaWVzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucwotcGNhcC1maWx0ZXIuNAktIG1hbnVhbCBlbnRyeSBmb3IgZmlsdGVyIHN5bnRheAotcGNhcC1saW5rdHlwZS40CS0gbWFudWFsIGVudHJ5IGZvciBsaW5rLWxheWVyIGhlYWRlciB0eXBlcwotcHBwLmgJCS0gUG9pbnQgdG8gUG9pbnQgUHJvdG9jb2wgZGVmaW5pdGlvbnMKLXNhdmVmaWxlLmMJLSBvZmZsaW5lIHN1cHBvcnQKLXNjYW5uZXIubAktIGZpbHRlciBzdHJpbmcgc2Nhbm5lcgotc3VuYXRtcG9zLmgJLSBkZWZpbml0aW9ucyBmb3IgU3VuQVRNIGNhcHR1cmluZwotV2luMzIJCS0gaGVhZGVycyBhbmQgcm91dGluZXMgZm9yIGJ1aWxkaW5nIG9uIFdpbjMyIHN5c3RlbXMKKwlDSEFOR0VTCQkgICAgLSBkZXNjcmlwdGlvbiBvZiBkaWZmZXJlbmNlcyBiZXR3ZWVuIHJlbGVhc2VzCisJQ2htb2RCUEYvKgkgICAgLSBtYWNPUyBzdGFydHVwIGl0ZW0gdG8gc2V0IG93bmVyc2hpcCBhbmQgcGVybWlzc2lvbnMgb24gL2Rldi9icGYqCisJQ01ha2VMaXN0cy50eHQJICAgIC0gQ01ha2UgZmlsZQorCUNPTlRSSUJVVElORy5tZAkgICAgLSBndWlkZWxpbmVzIGZvciBjb250cmlidXRpbmcKKwlDUkVESVRTCQkgICAgLSBwZW9wbGUgdGhhdCBoYXZlIGhlbHBlZCBsaWJwY2FwIGFsb25nCisJSU5TVEFMTC5tZAkgICAgLSB0aGlzIGZpbGUKKwlMSUNFTlNFCQkgICAgLSB0aGUgbGljZW5zZSB1bmRlciB3aGljaCB0Y3BkdW1wIGlzIGRpc3RyaWJ1dGVkCisJTWFrZWZpbGUuaW4JICAgIC0gY29tcGlsYXRpb24gcnVsZXMgKGlucHV0IHRvIHRoZSBjb25maWd1cmUgc2NyaXB0KQorCVJFQURNRS5tZAkgICAgLSBkZXNjcmlwdGlvbiBvZiBkaXN0cmlidXRpb24KKwlkb2MvUkVBRE1FLmFpeAkgICAgLSBub3RlcyBvbiB1c2luZyBsaWJwY2FwIG9uIEFJWAorCWRvYy9SRUFETUUuZGFnCSAgICAtIG5vdGVzIG9uIHVzaW5nIGxpYnBjYXAgdG8gY2FwdHVyZSBvbiBFbmRhY2UgREFHIGRldmljZXMKKwlkb2MvUkVBRE1FLmhwdXgJICAgIC0gbm90ZXMgb24gdXNpbmcgbGlicGNhcCBvbiBIUC1VWAorCWRvYy9SRUFETUUubGludXgubWQgLSBub3RlcyBvbiB1c2luZyBsaWJwY2FwIG9uIExpbnV4CisJZG9jL1JFQURNRS5tYWNvcyAgICAtIG5vdGVzIG9uIHVzaW5nIGxpYnBjYXAgb24gbWFjT1MKKwlkb2MvUkVBRE1FLnNlcHRlbCAgIC0gbm90ZXMgb24gdXNpbmcgbGlicGNhcCB0byBjYXB0dXJlIG9uIEludGVsL1NlcHRlbCBkZXZpY2VzCisJZG9jL1JFQURNRS5zaXRhCSAgICAtIG5vdGVzIG9uIHVzaW5nIGxpYnBjYXAgdG8gY2FwdHVyZSBvbiBTSVRBIGRldmljZXMKKwlkb2MvUkVBRE1FLnRydTY0ICAgIC0gbm90ZXMgb24gdXNpbmcgbGlicGNhcCBvbiBEaWdpdGFsL1RydTY0IFVOSVgKKwlkb2MvUkVBRE1FLldpbjMyLm1kIC0gbm90ZXMgb24gdXNpbmcgbGlicGNhcCBvbiBXaW4zMiBzeXN0ZW1zICh3aXRoIE5wY2FwKQorCVZFUlNJT04JCSAgICAtIHZlcnNpb24gb2YgdGhpcyByZWxlYXNlCisJYWNjb25maWcuaAkgICAgLSBzdXBwb3J0IGZvciBwb3N0LTIuMTMgYXV0b2NvbmYKKwlhY2xvY2FsLm00CSAgICAtIGF1dG9jb25mIG1hY3JvcworCWFyY25ldC5oCSAgICAtIEFSQ05FVCBkZWZpbml0aW9ucworCWF0bXVuaTMxLmgJICAgIC0gQVRNIFEuMjkzMSBkZWZpbml0aW9ucworCWJwZl9kdW1wLmMJICAgIC0gQlBGIHByb2dyYW0gcHJpbnRpbmcgcm91dGluZXMKKwlicGZfZmlsdGVyLmMJICAgIC0gQlBGIGZpbHRlcmluZyByb3V0aW5lcworCWJwZl9pbWFnZS5jCSAgICAtIEJQRiBkaXNhc3NlbWJseSByb3V0aW5lCisJY29uZmlnLmd1ZXNzCSAgICAtIGF1dG9jb25mIHN1cHBvcnQKKwljb25maWcuaC5pbgkgICAgLSBhdXRvY29uZiBpbnB1dAorCWNvbmZpZy5zdWIJICAgIC0gYXV0b2NvbmYgc3VwcG9ydAorCWNvbmZpZ3VyZQkgICAgLSBjb25maWd1cmUgc2NyaXB0IChydW4gdGhpcyBmaXJzdCkKKwljb25maWd1cmUuYWMJICAgIC0gY29uZmlndXJlIHNjcmlwdCBzb3VyY2UKKwlkbHBpc3Vicy5jCSAgICAtIERMUEktcmVsYXRlZCBmdW5jdGlvbnMgZm9yIHBjYXAtZGxwaS5jIGFuZCBwY2FwLWxpYmRscGkuYworCWRscGlzdWJzLmgJICAgIC0gRExQSS1yZWxhdGVkIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworCWV0aGVyZW50LmMJICAgIC0gL2V0Yy9ldGhlcnMgc3VwcG9ydCByb3V0aW5lcworCWV0aGVydHlwZS5oCSAgICAtIEV0aGVybmV0IHByb3RvY29sIHR5cGVzIGFuZCBuYW1lcyBkZWZpbml0aW9ucworCWZhZC1nZXRhZC5jCSAgICAtIHBjYXBfZmluZGFsbGRldnMoKSBmb3Igc3lzdGVtcyB3aXRoIGdldGlmYWRkcnMoKQorCWZhZC1naWZjLmMJICAgIC0gcGNhcF9maW5kYWxsZGV2cygpIGZvciBzeXN0ZW1zIHdpdGggb25seSBTSU9DR0lGTElTVAorCWZhZC1nbGlmYy5jCSAgICAtIHBjYXBfZmluZGFsbGRldnMoKSBmb3Igc3lzdGVtcyB3aXRoIFNJT0NHTElGQ09ORgorCWZpbHRlcnRlc3QuYwkgICAgLSB0ZXN0IHByb2dyYW0gZm9yIEJQRiBjb21waWxlcgorCWZpbmRhbGxkZXZzdGVzdC5jICAgLSB0ZXN0IHByb2dyYW0gZm9yIHBjYXBfZmluZGFsbGRldnMoKQorCWdlbmNvZGUuYwkgICAgLSBCUEYgY29kZSBnZW5lcmF0aW9uIHJvdXRpbmVzCisJZ2VuY29kZS5oCSAgICAtIEJQRiBjb2RlIGdlbmVyYXRpb24gZGVmaW5pdGlvbnMKKwlncmFtbWFyLnkJICAgIC0gZmlsdGVyIHN0cmluZyBncmFtbWFyCisJaWVlZTgwMjExLmgJICAgIC0gODAyLjExIGRlZmluaXRpb25zCisJaW5zdGFsbC1zaAkgICAgLSBCU0Qgc3R5bGUgaW5zdGFsbCBzY3JpcHQKKwlsYmwvb3MtKi5oCSAgICAtIE9TLWRlcGVuZGVudCBkZWZpbmVzIGFuZCBwcm90b3R5cGVzCisJbGxjLmgJCSAgICAtIDgwMi4yIExMQyBTQVAgZGVmaW5pdGlvbnMKKwltaXNzaW5nLyoJICAgIC0gcmVwbGFjZW1lbnRzIGZvciBtaXNzaW5nIGxpYnJhcnkgZnVuY3Rpb25zCisJbWtkZXAJCSAgICAtIGNvbnN0cnVjdCBNYWtlZmlsZSBkZXBlbmRlbmN5IGxpc3QKKwltc2Rvcy8qCQkgICAgLSBkcml2ZXJzIGZvciBNUy1ET1MgY2FwdHVyZSBzdXBwb3J0CisJbmFtZXRvYWRkci5jCSAgICAtIGhvc3RuYW1lIHRvIGFkZHJlc3Mgcm91dGluZXMKKwlubHBpZC5oCQkgICAgLSBPU0kgbmV0d29yayBsYXllciBwcm90b2NvbCBpZGVudGlmaWVyIGRlZmluaXRpb25zCisJbmV0CQkgICAgLSBzeW1saW5rIHRvIGJwZi9uZXQKKwlvcHRpbWl6ZS5jCSAgICAtIEJQRiBvcHRpbWl6YXRpb24gcm91dGluZXMKKwlwY2FwL2JsdWV0b290aC5oICAgIC0gcHVibGljIGRlZmluaXRpb24gb2YgRExUX0JMVUVUT09USF9IQ0lfSDRfV0lUSF9QSERSIGhlYWRlcgorCXBjYXAvYnBmLmgJICAgIC0gQlBGIGRlZmluaXRpb25zCisJcGNhcC9uYW1lZGIuaAkgICAgLSBwdWJsaWMgbGlicGNhcCBuYW1lIGRhdGFiYXNlIGRlZmluaXRpb25zCisJcGNhcC9wY2FwLmgJICAgIC0gcHVibGljIGxpYnBjYXAgZGVmaW5pdGlvbnMKKwlwY2FwL3NsbC5oCSAgICAtIHB1YmxpYyBkZWZpbml0aW9ucyBvZiBETFRfTElOVVhfU0xMIGFuZCBETFRfTElOVVhfU0xMMiBoZWFkZXJzCisJcGNhcC91c2IuaAkgICAgLSBwdWJsaWMgZGVmaW5pdGlvbiBvZiBETFRfVVNCIGhlYWRlcgorCXBjYXAtYnBmLmMJICAgIC0gQlNEIFBhY2tldCBGaWx0ZXIgc3VwcG9ydAorCXBjYXAtYnBmLmgJICAgIC0gaGVhZGVyIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorCXBjYXAtYnQtbGludXguYwkgICAgLSBCbHVldG9vdGggY2FwdHVyZSBzdXBwb3J0IGZvciBMaW51eAorCXBjYXAtYnQtbGludXguaAkgICAgLSBCbHVldG9vdGggY2FwdHVyZSBzdXBwb3J0IGZvciBMaW51eAorCXBjYXAtZGFnLmMJICAgIC0gRW5kYWNlIERBRyBkZXZpY2UgY2FwdHVyZSBzdXBwb3J0CisJcGNhcC1kYWcuaAkgICAgLSBFbmRhY2UgREFHIGRldmljZSBjYXB0dXJlIHN1cHBvcnQKKwlwY2FwLWRscGkuYwkgICAgLSBEYXRhIExpbmsgUHJvdmlkZXIgSW50ZXJmYWNlIHN1cHBvcnQKKwlwY2FwLWRvcy5jCSAgICAtIE1TLURPUyBjYXB0dXJlIHN1cHBvcnQKKwlwY2FwLWRvcy5oCSAgICAtIGhlYWRlcnMgZm9yIE1TLURPUyBjYXB0dXJlIHN1cHBvcnQKKwlwY2FwLWVuZXQuYwkgICAgLSBlbmV0IHN1cHBvcnQKKwlwY2FwLWludC5oCSAgICAtIGludGVybmFsIGxpYnBjYXAgZGVmaW5pdGlvbnMKKwlwY2FwLWxpYmRscGkuYwkgICAgLSBEYXRhIExpbmsgUHJvdmlkZXIgSW50ZXJmYWNlIHN1cHBvcnQgZm9yIHN5c3RlbXMgd2l0aCBsaWJkbHBpCisJcGNhcC1saW51eC5jCSAgICAtIExpbnV4IHBhY2tldCBzb2NrZXQgc3VwcG9ydAorCXBjYXAtbmFtZWRiLmgJICAgIC0gaGVhZGVyIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorCXBjYXAtbml0LmMJICAgIC0gU3VuT1MgTmV0d29yayBJbnRlcmZhY2UgVGFwIHN1cHBvcnQKKwlwY2FwLW5pdC5oCSAgICAtIFN1bk9TIE5ldHdvcmsgSW50ZXJmYWNlIFRhcCBkZWZpbml0aW9ucworCXBjYXAtbnBmLmMJICAgIC0gTnBjYXAgY2FwdHVyZSBzdXBwb3J0CisJcGNhcC1udWxsLmMJICAgIC0gZHVtbXkgbW9uaXRvciBzdXBwb3J0IChhbGxvd3Mgb2ZmbGluZSB1c2Ugb2YgbGlicGNhcCkKKwlwY2FwLXBmLmMJICAgIC0gVWx0cml4IGFuZCBEaWdpdGFsL1RydTY0IFVOSVggUGFja2V0IEZpbHRlciBzdXBwb3J0CisJcGNhcC1wZi5oCSAgICAtIFVsdHJpeCBhbmQgRGlnaXRhbC9UcnU2NCBVTklYIFBhY2tldCBGaWx0ZXIgZGVmaW5pdGlvbnMKKwlwY2FwLXNlcHRlbC5jICAgICAgIC0gSW50ZWwvU2VwdGVsIGRldmljZSBjYXB0dXJlIHN1cHBvcnQKKwlwY2FwLXNlcHRlbC5oICAgICAgIC0gSW50ZWwvU2VwdGVsIGRldmljZSBjYXB0dXJlIHN1cHBvcnQKKwlwY2FwLXNpdGEuYwkgICAgLSBTSVRBIGRldmljZSBjYXB0dXJlIHN1cHBvcnQKKwlwY2FwLXNpdGEuaAkgICAgLSBTSVRBIGRldmljZSBjYXB0dXJlIHN1cHBvcnQKKwlwY2FwLXNpdGEuaHRtbAkgICAgLSBTSVRBIGRldmljZSBjYXB0dXJlIGRvY3VtZW50YXRpb24KKwlwY2FwLXN0ZGluYy5oCSAgICAtIGluY2x1ZGVzIGFuZCAjZGVmaW5lcyBmb3IgY29tcGlsaW5nIG9uIFdpbjMyIHN5c3RlbXMKKwlwY2FwLXNuaXQuYwkgICAgLSBTdW5PUyA0LnggU1RSRUFNUy1iYXNlZCBOZXR3b3JrIEludGVyZmFjZSBUYXAgc3VwcG9ydAorCXBjYXAtc25vb3AuYwkgICAgLSBJUklYIFNub29wIG5ldHdvcmsgbW9uaXRvcmluZyBzdXBwb3J0CisJcGNhcC11c2ItbGludXguYyAgICAtIFVTQiBjYXB0dXJlIHN1cHBvcnQgZm9yIExpbnV4CisJcGNhcC11c2ItbGludXguaCAgICAtIFVTQiBjYXB0dXJlIHN1cHBvcnQgZm9yIExpbnV4CisJcGNhcC4zcGNhcAkgICAgLSBtYW51YWwgZW50cnkgZm9yIHRoZSBsaWJyYXJ5CisJcGNhcC5jCQkgICAgLSBwY2FwIHV0aWxpdHkgcm91dGluZXMKKwlwY2FwLmgJCSAgICAtIGhlYWRlciBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKwlwY2FwXyouM3BjYXAJICAgIC0gbWFudWFsIGVudHJpZXMgZm9yIGxpYnJhcnkgZnVuY3Rpb25zCisJcGNhcC1maWx0ZXIuNAkgICAgLSBtYW51YWwgZW50cnkgZm9yIGZpbHRlciBzeW50YXgKKwlwY2FwLWxpbmt0eXBlLjQJICAgIC0gbWFudWFsIGVudHJ5IGZvciBsaW5rLWxheWVyIGhlYWRlciB0eXBlcworCXBwcC5oCQkgICAgLSBQb2ludCB0byBQb2ludCBQcm90b2NvbCBkZWZpbml0aW9ucworCXNhdmVmaWxlLmMJICAgIC0gb2ZmbGluZSBzdXBwb3J0CisJc2Nhbm5lci5sCSAgICAtIGZpbHRlciBzdHJpbmcgc2Nhbm5lcgorCXN1bmF0bXBvcy5oCSAgICAtIGRlZmluaXRpb25zIGZvciBTdW5BVE0gY2FwdHVyaW5nCisJV2luMzIJCSAgICAtIGhlYWRlcnMgYW5kIHJvdXRpbmVzIGZvciBidWlsZGluZyBvbiBXaW4zMiBzeXN0ZW1zCmRpZmYgLS1naXQgYS9NRVRBREFUQSBiL01FVEFEQVRBCmluZGV4IDM2ZjIxYzMuLjViNmJiYWUgMTAwNjQ0Ci0tLSBhL01FVEFEQVRBCisrKyBiL01FVEFEQVRBCkBAIC03LDEyICs3LDEzIEBACiAgIH0KICAgdXJsIHsKICAgICB0eXBlOiBBUkNISVZFCi0gICAgdmFsdWU6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlLXRjcGR1bXAtZ3JvdXAvbGlicGNhcC9hcmNoaXZlL2xpYnBjYXAtMS45LjAudGFyLmd6IgorICAgIHZhbHVlOiAiaHR0cHM6Ly9naXRodWIuY29tL3RoZS10Y3BkdW1wLWdyb3VwL2xpYnBjYXAvYXJjaGl2ZS9saWJwY2FwLTEuMTAuMC50YXIuZ3oiCiAgIH0KLSAgdmVyc2lvbjogImxpYmNhcC0xLjkuMCIKKyAgdmVyc2lvbjogImxpYnBjYXAtMS4xMC4wIgorICBsaWNlbnNlX3R5cGU6IE5PVElDRQogICBsYXN0X3VwZ3JhZGVfZGF0ZSB7Ci0gICAgeWVhcjogMjAxOAotICAgIG1vbnRoOiA3Ci0gICAgZGF5OiAyMgorICAgIHllYXI6IDIwMjEKKyAgICBtb250aDogMQorICAgIGRheTogNQogICB9CiB9CmRpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCmluZGV4IGRmZjc1ZWMuLmQ4Yjg1MDcgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLmluCisrKyBiL01ha2VmaWxlLmluCkBAIC0zOCw2ICszOCw3IEBACiAKICMgVlBBVEgKIHNyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACiBWUEFUSCA9IEBzcmNkaXJACiAKICMKQEAgLTY5LDcgKzcwLDggQEAKIEVYVFJBX05FVFdPUktfTElCUz1ARVhUUkFfTkVUV09SS19MSUJTQAogCiAjIFN0YW5kYXJkIENGTEFHUyBmb3IgYnVpbGRpbmcgbWVtYmVycyBvZiBhIHNoYXJlZCBsaWJyYXJ5Ci1GVUxMX0NGTEFHUyA9ICQoQ0NPUFQpICQoU0hMSUJfQ0NPUFQpICQoSU5DTFMpICQoREVGUykgJChDRkxBR1MpCitGVUxMX0NGTEFHUyA9ICQoQ0NPUFQpIEBWX0xJQl9DQ09QVF9GQVRAICQoU0hMSUJfQ0NPUFQpICQoSU5DTFMpICQoREVGUykgJChDRkxBR1MpCitDWFhGTEFHUyA9ICQoQ0NPUFQpIEBWX0xJQl9DQ09QVF9GQVRAICQoU0hMSUJfQ0NPUFQpICQoSU5DTFMpICQoREVGUykgJChDRkxBR1MpCiAKIElOU1RBTEwgPSBASU5TVEFMTEAKIElOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACkBAIC04NiwyMSArODgsMjkgQEAKIAlAcm0gLWYgJEAKIAkkKENDKSAkKEZVTExfQ0ZMQUdTKSAtYyAkKHNyY2RpcikvJCouYwogCi1QU1JDID0JcGNhcC1AVl9QQ0FQQC5jIEBVU0JfU1JDQCBAQlRfU1JDQCBAQlRfTU9OSVRPUl9TUkNAIEBORVRGSUxURVJfU1JDQCBAREJVU19TUkNAIEBORVRNQVBfU1JDQCBAUkRNQV9TUkNACi1GU1JDID0gIEBWX0ZJTkRBTExERVZTQAotU1NSQyA9ICBAU1NSQ0AKLUNTUkMgPQlwY2FwLmMgZ2VuY29kZS5jIG9wdGltaXplLmMgbmFtZXRvYWRkci5jIGV0aGVyZW50LmMgXAotCWZtdHV0aWxzLmMgXAotCXNhdmVmaWxlLmMgc2YtcGNhcC5jIHNmLXBjYXBuZy5jIHBjYXAtY29tbW9uLmMgXAotCWJwZl9pbWFnZS5jIGJwZl9maWx0ZXIuYyBicGZfZHVtcC5jCi1HRU5TUkMgPSBzY2FubmVyLmMgZ3JhbW1hci5jCitQTEFURk9STV9DX1NSQyA9CUBQTEFURk9STV9DX1NSQ0AKK1BMQVRGT1JNX0NYWF9TUkMgPQlAUExBVEZPUk1fQ1hYX1NSQ0AKK01PRFVMRV9DX1NSQyA9CQlATU9EVUxFX0NfU1JDQAorUkVNT1RFX0NfU1JDID0JCUBSRU1PVEVfQ19TUkNACitDT01NT05fQ19TUkMgPQlwY2FwLmMgZ2VuY29kZS5jIG9wdGltaXplLmMgbmFtZXRvYWRkci5jIGV0aGVyZW50LmMgXAorCQlmbXR1dGlscy5jIFwKKwkJc2F2ZWZpbGUuYyBzZi1wY2FwLmMgc2YtcGNhcG5nLmMgcGNhcC1jb21tb24uYyBcCisJCWJwZl9pbWFnZS5jIGJwZl9maWx0ZXIuYyBicGZfZHVtcC5jCitHRU5FUkFURURfQ19TUkMgPSBzY2FubmVyLmMgZ3JhbW1hci5jCiBMSUJPQkpTID0gQExJQk9CSlNACiAKLVNSQyA9CSQoUFNSQykgJChGU1JDKSAkKENTUkMpICQoU1NSQykgJChHRU5TUkMpCitTUkMgPQkkKFBMQVRGT1JNX0NfU1JDKSAkKFBMQVRGT1JNX0NYWF9TUkMpIFwKKwkkKE1PRFVMRV9DX1NSQykgJChSRU1PVEVfQ19TUkMpICQoQ09NTU9OX0NfU1JDKSBcCisJJChHRU5FUkFURURfQ19TUkMpCiAKICMgV2Ugd291bGQgbGlrZSB0byBzYXkgIk9CSiA9ICQoU1JDOi5jPS5vKSIgYnV0IFVsdHJpeCdzIG1ha2UgY2Fubm90Ci0jIGhhY2sgdGhlIGV4dHJhIGluZGlyZWN0aW9uCi1PQkogPQkkKFBTUkM6LmM9Lm8pICQoRlNSQzouYz0ubykgJChDU1JDOi5jPS5vKSAkKFNTUkM6LmM9Lm8pICQoR0VOU1JDOi5jPS5vKSAkKExJQk9CSlMpCisjIGhhY2sgdGhlIGV4dHJhIGluZGlyZWN0aW9uLCBhbmQgd2UgaGF2ZSB0byBoYW5kbGUgUExBVEZPUk1fQ1hYX1NSQworIyBkaWZmZXJlbnRseSBmcm9tIHRoZSBkZWZpbmVzIGZvciBDIHNvdXJjZQorT0JKID0JJChQTEFURk9STV9DX1NSQzouYz0ubykgJChQTEFURk9STV9DWFhfU1JDOi5jcHA9Lm8pIFwKKwkkKE1PRFVMRV9DX1NSQzouYz0ubykgJChSRU1PVEVfQ19TUkM6LmM9Lm8pICQoQ09NTU9OX0NfU1JDOi5jPS5vKSBcCisJJChHRU5FUkFURURfQ19TUkM6LmM9Lm8pIFwKKwkkKExJQk9CSlMpCisKIFBVQkhEUiA9IFwKIAlwY2FwLmggXAogCXBjYXAtYnBmLmggXApAQCAtMTE3LDYgKzEyNyw3IEBACiAJcGNhcC9uZmxvZy5oIFwKIAlwY2FwL3BjYXAuaCBcCiAJcGNhcC9zbGwuaCBcCisJcGNhcC9zb2NrZXQuaCBcCiAJcGNhcC92bGFuLmggXAogCXBjYXAvdXNiLmgKIApAQCAtMTUzLDcgKzE2NCw3IEBACiAJJChTUkMpICQoSERSKQogCiBDTEVBTkZJTEVTID0gJChPQkopIGxpYnBjYXAuYSBsaWJwY2FwLnNvLmBjYXQgJChzcmNkaXIpL1ZFUlNJT05gIFwKLQkkKFBST0cpLWBjYXQgJChzcmNkaXIpL1ZFUlNJT05gLnRhci5neiAkKEdFTlNSQykgJChHRU5IRFIpIFwKKwkkKFBST0cpLWBjYXQgJChzcmNkaXIpL1ZFUlNJT05gLnRhci5neiAkKEdFTkVSQVRFRF9DX1NSQykgJChHRU5IRFIpIFwKIAlsZXgueXkuYyBwY2FwLWNvbmZpZyBsaWJwY2FwLnBjCiAKIE1BTjEgPSBwY2FwLWNvbmZpZy4xCkBAIC0xNjgsNiArMTc5LDcgQEAKIAlwY2FwX2xpc3RfdHN0YW1wX3R5cGVzLjNwY2FwLmluIFwKIAlwY2FwX29wZW5fZGVhZC4zcGNhcC5pbiBcCiAJcGNhcF9vcGVuX29mZmxpbmUuM3BjYXAuaW4gXAorCXBjYXBfc2V0X2ltbWVkaWF0ZV9tb2RlLjNwY2FwLmluIFwKIAlwY2FwX3NldF90c3RhbXBfcHJlY2lzaW9uLjNwY2FwLmluIFwKIAlwY2FwX3NldF90c3RhbXBfdHlwZS4zcGNhcC5pbgogCkBAIC0xOTEsNiArMjAzLDcgQEAKIAlwY2FwX2dldF9yZXF1aXJlZF9zZWxlY3RfdGltZW91dC4zcGNhcCBcCiAJcGNhcF9nZXRfc2VsZWN0YWJsZV9mZC4zcGNhcCBcCiAJcGNhcF9nZXRlcnIuM3BjYXAgXAorCXBjYXBfaW5pdC4zcGNhcCBcCiAJcGNhcF9pbmplY3QuM3BjYXAgXAogCXBjYXBfaXNfc3dhcHBlZC4zcGNhcCBcCiAJcGNhcF9saWJfdmVyc2lvbi4zcGNhcCBcCkBAIC0yMDMsNyArMjE2LDYgQEAKIAlwY2FwX29wZW5fbGl2ZS4zcGNhcCBcCiAJcGNhcF9zZXRfYnVmZmVyX3NpemUuM3BjYXAgXAogCXBjYXBfc2V0X2RhdGFsaW5rLjNwY2FwIFwKLQlwY2FwX3NldF9pbW1lZGlhdGVfbW9kZS4zcGNhcCBcCiAJcGNhcF9zZXRfcHJvbWlzYy4zcGNhcCBcCiAJcGNhcF9zZXRfcHJvdG9jb2xfbGludXguM3BjYXAgXAogCXBjYXBfc2V0X3JmbW9uLjNwY2FwIFwKQEAgLTI0NSwxMCArMjU3LDEzIEBACiAJVE9ETyBcCiAJVkVSU0lPTiBcCiAJYWNsb2NhbC5tNCBcCisJY2hhcmNvbnYuYyBcCisJY2hhcmNvbnYuaCBcCiAJY2htb2RfYnBmIFwKIAljbWFrZV91bmluc3RhbGwuY21ha2UuaW4gXAogCWNtYWtlY29uZmlnLmguaW4gXAogCWNtYWtlL01vZHVsZXMvRmluZERBRy5jbWFrZSBcCisJY21ha2UvTW9kdWxlcy9GaW5kZHBkay5jbWFrZSBcCiAJY21ha2UvTW9kdWxlcy9GaW5kRnNlZWtvLmNtYWtlIFwKIAljbWFrZS9Nb2R1bGVzL0ZpbmRMRlMuY21ha2UgXAogCWNtYWtlL01vZHVsZXMvRmluZFBhY2tldC5jbWFrZSBcCkBAIC0yNjUsNyArMjgwLDcgQEAKIAlmYWQtZ2V0YWQuYyBcCiAJZmFkLWdpZmMuYyBcCiAJZmFkLWdsaWZjLmMgXAotCWdyYW1tYXIueSBcCisJZ3JhbW1hci55LmluIFwKIAlpbnN0YWxsLXNoIFwKIAlsYmwvb3MtYWl4NC5oIFwKIAlsYmwvb3MtYWl4Ny5oIFwKQEAgLTI3NiwxMSArMjkxLDEzIEBACiAJbGJsL29zLXN1bm9zNC5oIFwKIAlsYmwvb3MtdWx0cml4NC5oIFwKIAlsaWJwY2FwLnBjLmluIFwKKwltaXNzaW5nL2FzcHJpbnRmLmMgXAogCW1pc3NpbmcvZ2V0b3B0LmMgXAogCW1pc3NpbmcvZ2V0b3B0LmggXAotCW1pc3Npbmcvc25wcmludGYuYyBcCisJbWlzc2luZy9zdHJsY2F0LmMgXAorCW1pc3Npbmcvc3RybGNweS5jIFwKIAltaXNzaW5nL3N0cnRva19yLmMgXAotCW1pc3Npbmcvd2luX3NucHJpbnRmLmMgXAorCW1pc3Npbmcvd2luX2FzcHJpbnRmLmMgXAogCW1rZGVwIFwKIAltc2Rvcy9iaW4yYy5jIFwKIAltc2Rvcy9tYWtlZmlsZSBcCkBAIC0yOTMsNiArMzEwLDggQEAKIAltc2Rvcy9yZWFkbWUuZG9zIFwKIAlub21rZGVwIFwKIAlvcmcudGNwZHVtcC5jaG1vZF9icGYucGxpc3QgXAorCXBjYXAtYWlycGNhcC5jIFwKKwlwY2FwLWFpcnBjYXAuaCBcCiAJcGNhcC1icGYuYyBcCiAJcGNhcC1idC1saW51eC5jIFwKIAlwY2FwLWJ0LWxpbnV4LmggXApAQCAtMzA3LDcgKzMyNiwxMCBAQAogCXBjYXAtZGxwaS5jIFwKIAlwY2FwLWRvcy5jIFwKIAlwY2FwLWRvcy5oIFwKKwlwY2FwLWRwZGsuYyBcCisJcGNhcC1kcGRrLmggXAogCXBjYXAtZW5ldC5jIFwKKwlwY2FwLWhhaWt1LmNwcCBcCiAJcGNhcC1pbnQuaCBcCiAJcGNhcC1saWJkbHBpLmMgXAogCXBjYXAtbGludXguYyBcCkBAIC0zNDcsMTIgKzM2OSwxMyBAQAogCXJwY2FwZC9maWxlY29uZi5jIFwKIAlycGNhcGQvZmlsZWNvbmYuaCBcCiAJcnBjYXBkL2xvZy5oIFwKLQlycGNhcGQvbG9nLXN0ZGVyci5jIFwKKwlycGNhcGQvbG9nLmMgXAogCXJwY2FwZC9vcmcudGNwZHVtcC5ycGNhcGQucGxpc3QgXAogCXJwY2FwZC9ycGNhcGQuYyBcCiAJcnBjYXBkL3JwY2FwZC5oIFwKIAlycGNhcGQvcnBjYXBkLmluZXRkLmNvbmYgXAogCXJwY2FwZC9ycGNhcGQubWFuYWRtaW4uaW4gXAorCXJwY2FwZC9ycGNhcGQtY29uZmlnLm1hbmZpbGUuaW4gXAogCXJwY2FwZC9ycGNhcGQucmMgXAogCXJwY2FwZC9ycGNhcGQuc29ja2V0IFwKIAlycGNhcGQvcnBjYXBkLnhpbmV0ZC5jb25mIFwKQEAgLTM2MSw2ICszODQsOCBAQAogCXJwY2FwZC93aW4zMi1zdmMuaCBcCiAJc29ja3V0aWxzLmMgXAogCXNvY2t1dGlscy5oIFwKKwlzc2x1dGlscy5jIFwKKwlzc2x1dGlscy5oIFwKIAlzY2FubmVyLmwgXAogCXRlc3Rwcm9ncy9DTWFrZUxpc3RzLnR4dCBcCiAJdGVzdHByb2dzL01ha2VmaWxlLmluIFwKQEAgLTM2OCwxMiArMzkzLDIzIEBACiAJdGVzdHByb2dzL2NhcHR1cmV0ZXN0LmMgXAogCXRlc3Rwcm9ncy9maWx0ZXJ0ZXN0LmMgXAogCXRlc3Rwcm9ncy9maW5kYWxsZGV2c3Rlc3QuYyBcCisJdGVzdHByb2dzL2ZpbmRhbGxkZXZzdGVzdC1wZXJmLmMgXAorCXRlc3Rwcm9ncy9mdXp6L0NNYWtlTGlzdHMudHh0IFwKKwl0ZXN0cHJvZ3MvZnV6ei9mdXp6X2JvdGguYyBcCisJdGVzdHByb2dzL2Z1enovZnV6el9ib3RoLm9wdGlvbnMgXAorCXRlc3Rwcm9ncy9mdXp6L2Z1enpfZmlsdGVyLmMgXAorCXRlc3Rwcm9ncy9mdXp6L2Z1enpfZmlsdGVyLm9wdGlvbnMgXAorCXRlc3Rwcm9ncy9mdXp6L2Z1enpfcGNhcC5jIFwKKwl0ZXN0cHJvZ3MvZnV6ei9mdXp6X3BjYXAub3B0aW9ucyBcCisJdGVzdHByb2dzL2Z1enovb25lZmlsZS5jIFwKIAl0ZXN0cHJvZ3Mvb3BlbnRlc3QuYyBcCiAJdGVzdHByb2dzL3JlYWN0aXZhdGV0ZXN0LmMgXAogCXRlc3Rwcm9ncy9zZWxwb2xsdGVzdC5jIFwKIAl0ZXN0cHJvZ3MvdGhyZWFkc2lnbmFsdGVzdC5jIFwKIAl0ZXN0cHJvZ3MvdW5peC5oIFwKIAl0ZXN0cHJvZ3MvdmFsZ3JpbmR0ZXN0LmMgXAorCXRlc3Rwcm9ncy92aXNvcHRzLnB5IFwKKwl0ZXN0cHJvZ3Mvd3JpdGVjYXB0ZXN0LmMgXAogCXRlc3RzL3NoYi1vcHRpb24tdG9vLWxvbmcucGNhcG5nIFwKIAlXaW4zMi9Qcmovd3BjYXAuc2xuIFwKIAlXaW4zMi9Qcmovd3BjYXAudmN4cHJvaiBcCkBAIC00MTcsNyArNDUzLDcgQEAKIAlNQUpPUl9WRVI9QTsgXAogCUNPTVBBVF9WRVI9MTsgXAogCUNVUlJFTlRfVkVSPWBzZWQgJ3MvW14wLTkuXS4qJCQvLycgJChzcmNkaXIpL1ZFUlNJT05gOyBcCi0JJChDQykgLWR5bmFtaWNsaWIgLXVuZGVmaW5lZCBlcnJvciAkKExERkxBR1MpIFwKKwkkKENDKSAtZHluYW1pY2xpYiAtdW5kZWZpbmVkIGVycm9yICQoTERGTEFHUykgQFZfTElCX0xERkxBR1NfRkFUQCBcCiAJICAgIC1vIGxpYnBjYXAuJCRWRVIuZHlsaWIgJChPQkopICQoQURETE9CSlMpICQoTElCUykgXAogCSAgICAtaW5zdGFsbF9uYW1lICQobGliZGlyKS9saWJwY2FwLiQkTUFKT1JfVkVSLmR5bGliIFwKIAkgICAgLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkJENPTVBBVF9WRVIgXApAQCAtNDc0LDcgKzUxMCwyNiBAQAogc2Nhbm5lci5vOiBzY2FubmVyLmMgZ3JhbW1hci5oCiAJJChDQykgJChGVUxMX0NGTEFHUykgLWMgc2Nhbm5lci5jCiAKLWdyYW1tYXIuYzogJChzcmNkaXIpL2dyYW1tYXIueQorIworIyBHZW5lcmF0ZSB0aGUgZ3JhbW1hci55IGZpbGUuCisjCisjIFNvbWUgTWFrZXMsIGUuZy4gQUlYIE1ha2UgYW5kIFNvbGFyaXMgTWFrZSwgY2FuJ3QgaGFuZGxlICItLWZpbGU9JEAudG1wOiQ8IjsKKyMgZm9yIGV4YW1wbGUsIHRoZSBTb2xhcmlzIDkgbWFrZSBtYW4gcGFnZSBzYXlzCisjCisjCUJlY2F1c2UgbWFrZSBhc3NpZ25zICQ8IGFuZCAkKiBhcyBpdCB3b3VsZCBmb3IgaW1wbGljaXQgcnVsZXMKKyMJKGFjY29yZGluZyB0byB0aGUgc3VmZml4ZXMgbGlzdCBhbmQgdGhlIGRpcmVjdG9yeSBjb250ZW50cyksCisjCXRoZXkgbWF5IGJlIHVucmVsaWFibGUgd2hlbiB1c2VkIHdpdGhpbiBleHBsaWNpdCB0YXJnZXQgZW50cmllcy4KKyMKKyMgYW5kIHRoaXMgaXMgYW4gZXhwbGljaXQgdGFyZ2V0IGVudHJ5LgorIworIyBUaGVyZWZvcmUsIGluc3RlYWQgb2YgdXNpbmcgJDwsIHdlIGV4cGxpY2l0bHkgcHV0IGluICQoc3JjZGlyKS9saWJwY2FwLnBjLmluLgorIworZ3JhbW1hci55OiAkKHNyY2RpcikvZ3JhbW1hci55LmluIC4vY29uZmlnLnN0YXR1cworCUBybSAtZiAkQCAkQC50bXAKKwkuL2NvbmZpZy5zdGF0dXMgLS1maWxlPSRALnRtcDokKHNyY2RpcikvZ3JhbW1hci55LmluCisJbXYgJEAudG1wICRACisKK2dyYW1tYXIuYzogZ3JhbW1hci55CiAJJChZQUNDKSAtcCBwY2FwXyAtbyBncmFtbWFyLmMgLWQgJDwKIGdyYW1tYXIuaDogZ3JhbW1hci5jCiAjIyBSZWNvdmVyIGZyb20gdGhlIHJlbW92YWwgb2YgJEAKQEAgLTQ4OSw5ICs1NDQsMTggQEAKIGdlbmNvZGUubzogJChzcmNkaXIpL2dlbmNvZGUuYyBncmFtbWFyLmggc2Nhbm5lci5oCiAJJChDQykgJChGVUxMX0NGTEFHUykgLWMgJChzcmNkaXIpL2dlbmNvZGUuYwogCithc3ByaW50Zi5vOiAkKHNyY2RpcikvbWlzc2luZy9hc3ByaW50Zi5jCisJJChDQykgJChGVUxMX0NGTEFHUykgLW8gJEAgLWMgJChzcmNkaXIpL21pc3NpbmcvYXNwcmludGYuYworCiBzbnByaW50Zi5vOiAkKHNyY2RpcikvbWlzc2luZy9zbnByaW50Zi5jCiAJJChDQykgJChGVUxMX0NGTEFHUykgLW8gJEAgLWMgJChzcmNkaXIpL21pc3Npbmcvc25wcmludGYuYwogCitzdHJsY2F0Lm86ICQoc3JjZGlyKS9taXNzaW5nL3N0cmxjYXQuYworCSQoQ0MpICQoRlVMTF9DRkxBR1MpIC1vICRAIC1jICQoc3JjZGlyKS9taXNzaW5nL3N0cmxjYXQuYworCitzdHJsY3B5Lm86ICQoc3JjZGlyKS9taXNzaW5nL3N0cmxjcHkuYworCSQoQ0MpICQoRlVMTF9DRkxBR1MpIC1vICRAIC1jICQoc3JjZGlyKS9taXNzaW5nL3N0cmxjcHkuYworCiBzdHJ0b2tfci5vOiAkKHNyY2RpcikvbWlzc2luZy9zdHJ0b2tfci5jCiAJJChDQykgJChGVUxMX0NGTEFHUykgLW8gJEAgLWMgJChzcmNkaXIpL21pc3Npbmcvc3RydG9rX3IuYwogCkBAIC01MTMsNyArNTc3LDYgQEAKIAlAcm0gLWYgJEAgJEAudG1wCiAJLi9jb25maWcuc3RhdHVzIC0tZmlsZT0kQC50bXA6JChzcmNkaXIpL2xpYnBjYXAucGMuaW4KIAltdiAkQC50bXAgJEAKLQljaG1vZCBhK3ggJEAKIAogIwogIyBHZW5lcmF0ZSB0aGUgcGNhcC1jb25maWcgc2NyaXB0LiAgU2VlIGFib3ZlLgpAQCAtNTc1LDYgKzYzOCw5IEBACiAJcm0gLWYgcGNhcF9kYXRhbGlua192YWxfdG9fZGVzY3JpcHRpb24uM3BjYXAgJiYgXAogCSQoTE5fUykgcGNhcF9kYXRhbGlua192YWxfdG9fbmFtZS4zcGNhcCBcCiAJCSBwY2FwX2RhdGFsaW5rX3ZhbF90b19kZXNjcmlwdGlvbi4zcGNhcCAmJiBcCisJcm0gLWYgcGNhcF9kYXRhbGlua192YWxfdG9fZGVzY3JpcHRpb25fb3JfZGx0LjNwY2FwICYmIFwKKwkkKExOX1MpIHBjYXBfZGF0YWxpbmtfdmFsX3RvX25hbWUuM3BjYXAgXAorCQkgcGNhcF9kYXRhbGlua192YWxfdG9fZGVzY3JpcHRpb25fb3JfZGx0LjNwY2FwICYmIFwKIAlybSAtZiBwY2FwX2R1bXBfZm9wZW4uM3BjYXAgJiYgXAogCSQoTE5fUykgcGNhcF9kdW1wX29wZW4uM3BjYXAgcGNhcF9kdW1wX2ZvcGVuLjNwY2FwICYmIFwKIAlybSAtZiBwY2FwX2ZyZWVhbGxkZXZzLjNwY2FwICYmIFwKQEAgLTY3Nyw2ICs3NDMsNyBAQAogCWZvciBpIGluICQoTUFOM1BDQVApOyBkbyBcCiAJCXJtIC1mICQoREVTVERJUikkKG1hbmRpcikvbWFuMy8kJGk7IGRvbmUKIAlybSAtZiAkKERFU1RESVIpJChtYW5kaXIpL21hbjMvcGNhcF9kYXRhbGlua192YWxfdG9fZGVzY3JpcHRpb24uM3BjYXAKKwlybSAtZiAkKERFU1RESVIpJChtYW5kaXIpL21hbjMvcGNhcF9kYXRhbGlua192YWxfdG9fZGVzY3JpcHRpb25fb3JfZGx0LjNwY2FwCiAJcm0gLWYgJChERVNURElSKSQobWFuZGlyKS9tYW4zL3BjYXBfZHVtcF9mb3Blbi4zcGNhcAogCXJtIC1mICQoREVTVERJUikkKG1hbmRpcikvbWFuMy9wY2FwX2ZyZWVhbGxkZXZzLjNwY2FwCiAJcm0gLWYgJChERVNURElSKSQobWFuZGlyKS9tYW4zL3BjYXBfcGVycm9yLjNwY2FwCkBAIC03MjcsNyArNzk0LDcgQEAKIAljZCB0ZXN0cHJvZ3M7ICQoTUFLRSkgY2xlYW4KIAogZGlzdGNsZWFuOiBjbGVhbgotCXJtIC1mIE1ha2VmaWxlIGNvbmZpZy5jYWNoZSBjb25maWcubG9nIGNvbmZpZy5zdGF0dXMgXAorCXJtIC1mIE1ha2VmaWxlIGdyYW1tYXIueSBjb25maWcuY2FjaGUgY29uZmlnLmxvZyBjb25maWcuc3RhdHVzIFwKIAkgICAgY29uZmlnLmggZ251Yy5oIG5ldCBvcy1wcm90by5oIGxpYnBjYXAucGMgXAogCSAgICBwY2FwLWNvbmZpZyBzdGFtcC1oIHN0YW1wLWguaW4KIAlybSAtZiAkKE1BTjNQQ0FQX0VYUEFORDouaW49KSAkKE1BTkZJTEU6LmluPSkgJChNQU5NSVNDOi5pbj0pCkBAIC03NDIsMTUgKzgwOSwyMyBAQAogCWN0YWdzIC13dGQgJChUQUdGSUxFUykKIAogcmVsZWFzZXRhcjoKLQlAY3dkPWBwd2RgIDsgZGlyPWBiYXNlbmFtZSAkJGN3ZGAgOyBuYW1lPSQoUFJPRyktYGNhdCBWRVJTSU9OYCA7IFwKKwlAYXV0b3JlY29uZiAtZjsgXAorCW5hbWU9JChQUk9HKS1gY2F0IFZFUlNJT05gIDsgXAogCSAgIG1rZGlyICQkbmFtZTsgXAotCSAgIHRhciAtYyAtLWV4Y2x1ZGU9Jyp+JyAtZiAtICQoQ1NSQykgJChIRFIpICQoTUFOMSkgJChNQU4zUENBUF9FWFBBTkQpIFwKLQkgICAgICAkKE1BTjNQQ0FQX05PRVhQQU5EKSAkKE1BTkZJTEUpICQoTUFOTUlTQykgJChFWFRSQV9ESVNUKSB8IFwKKwkgICB0YXIgLWMgLS1leGNsdWRlPScqficgLWYgLSAkKENPTU1PTl9DX1NSQykgJChIRFIpICQoTUFOMSkgXAorCSAgICAgICQoTUFOM1BDQVBfRVhQQU5EKSAkKE1BTjNQQ0FQX05PRVhQQU5EKSAkKE1BTkZJTEUpIFwKKwkgICAgICAkKE1BTk1JU0MpICQoRVhUUkFfRElTVCkgfCBcCiAJICAgICAgKGNkICQkbmFtZTsgdGFyIHhmIC0pOyBcCiAJICAgdGFyIC1jIC16IC1mICQkbmFtZS50YXIuZ3ogJCRuYW1lOyBcCiAJICAgcm0gLXJmICQkbmFtZQogCi1kZXBlbmQ6CSQoR0VOU1JDKSAkKEdFTkhEUikKLQkkKE1LREVQKSAtYyAiJChDQykiIC1tICIkKERFUEVOREVOQ1lfQ0ZMQUcpIiAkKENGTEFHUykgJChERUZTKSAkKElOQ0xTKSAkKFNSQykKK3JjMSByYzIgcmMzIHJjNCByYzU6CisJQFZFUj1gY2F0ICQoc3JjZGlyKS9WRVJTSU9OYDsgXAorCXNlZCAtaSAicy8kJFZFUi8kJHtWRVJ9JEAvIiBWRVJTSU9OIDsgXAorCW1ha2UgcmVsZWFzZXRhcjsgXAorCWdpdCBjaGVja291dCBWRVJTSU9OCisKK2RlcGVuZDoJJChHRU5FUkFURURfQ19TUkMpICQoR0VOSERSKQorCSQoTUtERVApIC1jICIkKENDKSIgLW0gIiQoREVQRU5ERU5DWV9DRkxBRykiIC1zICIkKHNyY2RpcikiICQoQ0ZMQUdTKSAkKERFRlMpICQoSU5DTFMpICQoU1JDKQogCWNkIHJwY2FwZDsgJChNQUtFKSBkZXBlbmQKIAljZCB0ZXN0cHJvZ3M7ICQoTUFLRSkgZGVwZW5kCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKaW5kZXggNzhjYzNjNC4uMWUzYTI0NSAxMDA2NDQKLS0tIGEvUkVBRE1FLm1kCisrKyBiL1JFQURNRS5tZApAQCAtMSwyMyArMSwzMSBAQAotVG8gcmVwb3J0IGEgc2VjdXJpdHkgaXNzdWUgcGxlYXNlIHNlbmQgYW4gZS1tYWlsIHRvIHNlY3VyaXR5QHRjcGR1bXAub3JnLgotCi1UbyByZXBvcnQgYnVncyBhbmQgb3RoZXIgcHJvYmxlbXMsIGNvbnRyaWJ1dGUgcGF0Y2hlcywgcmVxdWVzdCBhCi1mZWF0dXJlLCBwcm92aWRlIGdlbmVyaWMgZmVlZGJhY2sgZXRjIHBsZWFzZSBzZWUgdGhlIGZpbGUKLVtDT05UUklCVVRJTkddKENPTlRSSUJVVElORy5tZCkgaW4gdGhlIGxpYnBjYXAgc291cmNlIHRyZWUgcm9vdC4KLQotVGhlIGRpcmVjdG9yeSBkb2MvIGhhcyBSRUFETUUgZmlsZXMgYWJvdXQgc3BlY2lmaWMgb3BlcmF0aW5nIHN5c3RlbXMgYW5kCi1vcHRpb25zLgotCiBMSUJQQ0FQIDEueC55Ci1Ob3cgbWFpbnRhaW5lZCBieSAiVGhlIFRjcGR1bXAgR3JvdXAiCi1odHRwczovL3d3dy50Y3BkdW1wLm9yZworPT09PT09PT09PT09PQogCi1Bbm9ueW1vdXMgR2l0IGlzIGF2YWlsYWJsZSB2aWE6Ci0gICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS90aGUtdGNwZHVtcC1ncm91cC9saWJwY2FwLmdpdAorWyFbQnVpbGQgU3RhdHVzXShodHRwczovL3RyYXZpcy1jaS5vcmcvdGhlLXRjcGR1bXAtZ3JvdXAvdGNwZHVtcC5zdmc/YnJhbmNoPW1hc3RlcildKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy90aGUtdGNwZHVtcC1ncm91cC9saWJwY2FwKQorCitbIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vY2kuYXBwdmV5b3IuY29tL2FwaS9wcm9qZWN0cy9zdGF0dXMvZ2l0aHViL3RoZS10Y3BkdW1wLWdyb3VwL3RjcGR1bXA/YnJhbmNoPW1hc3RlciZzdmc9dHJ1ZSldKGh0dHBzOi8vY2kuYXBwdmV5b3IuY29tL3Byb2plY3QvZ3V5aGFycmlzL2xpYnBjYXApCisKK05vdyBtYWludGFpbmVkIGJ5ICJUaGUgVGNwZHVtcCBHcm91cCIKKworICBodHRwczovL3d3dy50Y3BkdW1wLm9yZwogCiBmb3JtZXJseSBmcm9tIAlMYXdyZW5jZSBCZXJrZWxleSBOYXRpb25hbCBMYWJvcmF0b3J5CiAJCU5ldHdvcmsgUmVzZWFyY2ggR3JvdXAgPGxpYnBjYXBAZWUubGJsLmdvdj4KIAkJZnRwOi8vZnRwLmVlLmxibC5nb3Yvb2xkL2xpYnBjYXAtMC40YTcudGFyLloKIAorVG8gcmVwb3J0IGEgc2VjdXJpdHkgaXNzdWUgcGxlYXNlIHNlbmQgYW4gZS1tYWlsIHRvIHNlY3VyaXR5QHRjcGR1bXAub3JnLgorCitUbyByZXBvcnQgYnVncyBhbmQgb3RoZXIgcHJvYmxlbXMsIGNvbnRyaWJ1dGUgcGF0Y2hlcywgcmVxdWVzdCBhCitmZWF0dXJlLCBwcm92aWRlIGdlbmVyaWMgZmVlZGJhY2sgZXRjIHBsZWFzZSBzZWUgdGhlIGZpbGUKK1tDT05UUklCVVRJTkcubWRdKENPTlRSSUJVVElORy5tZCkgaW4gdGhlIGxpYnBjYXAgc291cmNlIHRyZWUgcm9vdC4KKworVGhlIGRpcmVjdG9yeSBkb2MvIGhhcyBSRUFETUUgZmlsZXMgYWJvdXQgc3BlY2lmaWMgb3BlcmF0aW5nIHN5c3RlbXMgYW5kCitvcHRpb25zLgorCitBbm9ueW1vdXMgR2l0IGlzIGF2YWlsYWJsZSB2aWE6CisKKyAgaHR0cHM6Ly9naXRodWIuY29tL3RoZS10Y3BkdW1wLWdyb3VwL2xpYnBjYXAuZ2l0CisKIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHNvdXJjZSBjb2RlIGZvciBsaWJwY2FwLCBhIHN5c3RlbS1pbmRlcGVuZGVudAogaW50ZXJmYWNlIGZvciB1c2VyLWxldmVsIHBhY2tldCBjYXB0dXJlLiAgbGlicGNhcCBwcm92aWRlcyBhIHBvcnRhYmxlCiBmcmFtZXdvcmsgZm9yIGxvdy1sZXZlbCBuZXR3b3JrIG1vbml0b3JpbmcuICBBcHBsaWNhdGlvbnMgaW5jbHVkZQpAQCAtMzksMTkgKzQ3LDE1IEBACiBVc2VyLWxldmVsIFBhY2tldCBDYXB0dXJlJycuICBBIGNvbXByZXNzZWQgUG9zdFNjcmlwdCB2ZXJzaW9uIGNhbiBiZQogZm91bmQgYXQKIAotCWZ0cDovL2Z0cC5lZS5sYmwuZ292L3BhcGVycy9icGYtdXNlbml4OTMucHMuWgotCi1vcgotCi0JaHR0cHM6Ly93d3cudGNwZHVtcC5vcmcvcGFwZXJzL2JwZi11c2VuaXg5My5wcy5aCisgIGh0dHBzOi8vd3d3LnRjcGR1bXAub3JnL3BhcGVycy9icGYtdXNlbml4OTMucHMuWgogCiBhbmQgYSBnemlwcGVkIHZlcnNpb24gY2FuIGJlIGZvdW5kIGF0CiAKLQlodHRwczovL3d3dy50Y3BkdW1wLm9yZy9wYXBlcnMvYnBmLXVzZW5peDkzLnBzLmd6CisgIGh0dHBzOi8vd3d3LnRjcGR1bXAub3JnL3BhcGVycy9icGYtdXNlbml4OTMucHMuZ3oKIAogQSBQREYgdmVyc2lvbiBjYW4gYmUgZm91bmQgYXQKIAotCWh0dHBzOi8vd3d3LnRjcGR1bXAub3JnL3BhcGVycy9icGYtdXNlbml4OTMucGRmCisgIGh0dHBzOi8vd3d3LnRjcGR1bXAub3JnL3BhcGVycy9icGYtdXNlbml4OTMucGRmCiAKIEFsdGhvdWdoIG1vc3QgcGFja2V0IGNhcHR1cmUgaW50ZXJmYWNlcyBzdXBwb3J0IGluLWtlcm5lbCBmaWx0ZXJpbmcsCiBsaWJwY2FwIHV0aWxpemVzIGluLWtlcm5lbCBmaWx0ZXJpbmcgb25seSBmb3IgdGhlIEJQRiBpbnRlcmZhY2UuCkBAIC02OCw3ICs3Miw3IEBACiB1dGlsaXplcykuICBBbHNvLCB5b3UgY2FuIGFkZCBCUEYgZmlsdGVyIHN1cHBvcnQgdG8gVWx0cml4IHVzaW5nIHRoZQoga2VybmVsIHNvdXJjZSBhbmQvb3Igb2JqZWN0IHBhdGNoZXMgYXZhaWxhYmxlIGluOgogCi0JaHR0cHM6Ly93d3cudGNwZHVtcC5vcmcvb3RoZXIvYnBmZXh0NDIudGFyLloKKyAgaHR0cHM6Ly93d3cudGNwZHVtcC5vcmcvb3RoZXIvYnBmZXh0NDIudGFyLloKIAogTGludXggaGFzIGEgbnVtYmVyIG9mIEJQRiBiYXNlZCBzeXN0ZW1zLCBhbmQgbGlicGNhcCBkb2VzIG5vdCBzdXBwb3J0CiBhbnkgb2YgdGhlIGVCUEYgbWVjaGFuaXNtcyBhcyB5ZXQsIGFsdGhvdWdoIGl0IHN1cHBvcnRzIG1hbnkgb2YgdGhlCkBAIC04Nyw3ICs5MSwzIEBACiBXZSd2ZSBiZWVuIG1haW50YWluaW5nIGJpbmFyeSBjb21wYXRpYmlsaXR5IGJldHdlZW4gbGlicGNhcCByZWxlYXNlcyBmb3IKIHF1aXRlIGEgd2hpbGU7IHRoZXJlJ3Mgbm8gcmVhc29uIHRvIHRpZSBhIGJpbmFyeSBsaW5rZWQgd2l0aCBsaWJwY2FwIHRvCiBhIHBhcnRpY3VsYXIgcmVsZWFzZSBvZiBsaWJwY2FwLgotCi1DdXJyZW50IHZlcnNpb25zIGNhbiBiZSBmb3VuZCBhdCBodHRwczovL3d3dy50Y3BkdW1wLm9yZy4KLQotIC0gVGhlIFRDUGR1bXAgZ3JvdXAKZGlmZiAtLWdpdCBhL1ZFUlNJT04gYi9WRVJTSU9OCmluZGV4IGY4ZTIzM2IuLjgxYzg3MWQgMTAwNjQ0Ci0tLSBhL1ZFUlNJT04KKysrIGIvVkVSU0lPTgpAQCAtMSArMSBAQAotMS45LjAKKzEuMTAuMApkaWZmIC0tZ2l0IGEvV2luMzIvUHJqL3dwY2FwLnZjeHByb2ouZmlsdGVycyBiL1dpbjMyL1Byai93cGNhcC52Y3hwcm9qLmZpbHRlcnMKaW5kZXggNmUwNmNjYi4uODc5YmIwNSAxMDA2NDQKLS0tIGEvV2luMzIvUHJqL3dwY2FwLnZjeHByb2ouZmlsdGVycworKysgYi9XaW4zMi9Qcmovd3BjYXAudmN4cHJvai5maWx0ZXJzCkBAIC0xLDUgKzEsNSBAQAog77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cHM6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CiAgIDxJdGVtR3JvdXA+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlxicGZfZHVtcC5jIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CmRpZmYgLS1naXQgYS9hY2xvY2FsLm00IGIvYWNsb2NhbC5tNAppbmRleCBhYzE2M2Q0Li43ODY0MjNiIDEwMDY0NAotLS0gYS9hY2xvY2FsLm00CisrKyBiL2FjbG9jYWwubTQKQEAgLTI3MSw3ICsyNzEsNyBAQAogZG5sIHNldCwgYW5kIGRvbid0IGFkZCB0aGUgZmxhZyB0byB0aGUgZmlyc3QgYXJndW1lbnQgaWYgdGhlIGNvbXBpbGUKIGRubCBmYWlsczsgdGhpcyBpcyBmb3Igd2FybmluZyBvcHRpb25zIGNhdXNlIHByb2JsZW1zIHRoYXQgY2FuJ3QgYmUKIGRubCB3b3JrZWQgYXJvdW5kLiAgSWYgYSB0aGlyZCBhcmd1bWVudCBpcyBzdXBwbGllZCwgYSBmb3VydGggYXJndW1lbnQKLWRubCBzaG91bGQgYWxzbyBiZSBzdXBwbGllZDsgaXQncyBhIG1lc3NhZ2UgZGVzcmliaW5nIHdoYXQgdGhlIHRlc3QKK2RubCBzaG91bGQgYWxzbyBiZSBzdXBwbGllZDsgaXQncyBhIG1lc3NhZ2UgZGVzY3JpYmluZyB3aGF0IHRoZSB0ZXN0CiBkbmwgcHJvZ3JhbSBpcyBjaGVja2luZy4KIGRubAogQUNfREVGVU4oQUNfTEJMX0NIRUNLX0NPTVBJTEVSX09QVCwKQEAgLTQyNSwxNCArNDI1LDE0IEBACiAJCWlmIEFDX1JVTl9MT0coW2V2YWwgIiRDQyAkYWNfbGJsX2RlcGVuZGVuY3lfZmxhZyBjb25mdGVzdC5jID4vZGV2L251bGwgMj4mMSJdKTsgdGhlbgogCQkJQUNfTVNHX1JFU1VMVChbeWVzLCB3aXRoICRhY19sYmxfZGVwZW5kZW5jeV9mbGFnXSkKIAkJCURFUEVOREVOQ1lfQ0ZMQUc9IiRhY19sYmxfZGVwZW5kZW5jeV9mbGFnIgotCQkJTUtERVA9JyR7c3JjZGlyfS9ta2RlcCcKKwkJCU1LREVQPScke3RvcF9zcmNkaXJ9L21rZGVwJwogCQllbHNlCiAJCQlBQ19NU0dfUkVTVUxUKFtub10pCiAJCQkjCiAJCQkjIFdlIGNhbid0IHJ1biBta2RlcCwgc28gaGF2ZSAibWFrZSBkZXBlbmQiIGRvCiAJCQkjIG5vdGhpbmcuCiAJCQkjCi0JCQlNS0RFUD0nJHtzcmNkaXJ9L25vbWtkZXAnCisJCQlNS0RFUD0nJHt0b3Bfc3JjZGlyfS9ub21rZGVwJwogCQlmaQogCQlybSAtcmYgY29uZnRlc3QqCiAJZWxzZQpAQCAtNDQxLDcgKzQ0MSw3IEBACiAJCSMgV2UgY2FuJ3QgcnVuIG1rZGVwLCBzbyBoYXZlICJtYWtlIGRlcGVuZCIgZG8KIAkJIyBub3RoaW5nLgogCQkjCi0JCU1LREVQPScke3NyY2Rpcn0vbm9ta2RlcCcKKwkJTUtERVA9JyR7dG9wX3NyY2Rpcn0vbm9ta2RlcCcKIAlmaQogCUFDX1NVQlNUKERFUEVOREVOQ1lfQ0ZMQUcpCiAJQUNfU1VCU1QoTUtERVApCkBAIC00ODQsOCArNDg0LDggQEAKIAkgICAgYWl4KikKIAkJICAgIDs7CiAKLQkgICAgZnJlZWJzZCp8bmV0YnNkKnxvcGVuYnNkKnxkcmFnb25mbHkqfGxpbnV4Knxvc2YqKQotCSAgICAJICAgICMKKwkgICAgZnJlZWJzZCp8bmV0YnNkKnxvcGVuYnNkKnxkcmFnb25mbHkqfGxpbnV4Knxvc2YqfGhhaWt1KnxtaWRpcGl4KikKKwkJICAgICMKIAkJICAgICMgUGxhdGZvcm1zIHdoZXJlIHRoZSBsaW5rZXIgaXMgdGhlIEdOVSBsaW5rZXIKIAkJICAgICMgb3IgYWNjZXB0cyBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGxpa2UKIAkJICAgICMgdGhvc2UgdGhlIEdOVSBsaW5rZXIgYWNjZXB0cy4KQEAgLTUwMSw3ICs1MDEsNyBAQAogCQkgICAgc3BhcmM2NCopCiAJCQljYXNlICIkaG9zdF9vcyIgaW4KIAotCQkJZnJlZWJzZCp8b3BlbmJzZCopCisJCQlmcmVlYnNkKnxvcGVuYnNkKnxsaW51eCopCiAJCQkgICAgUElDX09QVD0tZlBJQwogCQkJICAgIDs7CiAJCQllc2FjCkBAIC01MTQsNyArNTE0LDcgQEAKIAogCSAgICBocHV4KikKIAkJICAgIFZfU0hMSUJfQ0NPUFQ9IiRWX1NITElCX0NDT1BUIC1mcGljIgotCSAgICAJICAgICMKKwkJICAgICMKIAkJICAgICMgWFhYIC0gdGhpcyBhc3N1bWVzIEdDQyBpcyB1c2luZyB0aGUgSFAgbGlua2VyLAogCQkgICAgIyByYXRoZXIgdGhhbiB0aGUgR05VIGxpbmtlciwgYW5kIHRoYXQgdGhlICIraCIKIAkJICAgICMgb3B0aW9uIGlzIHVzZWQgb24gYWxsIEhQLVVYIHBsYXRmb3JtcywgYm90aCAuc2wKQEAgLTUyMiw3ICs1MjIsNyBAQAogCQkgICAgIwogCQkgICAgVl9TT05BTUVfT1BUPSItV2wsK2gsIgogCQkgICAgIwotCQkgICAgIyBCeSBkZWZhdWx0LCBkaXJlY3RvcmllcyBzcGVjaWZlZCB3aXRoIC1MCisJCSAgICAjIEJ5IGRlZmF1bHQsIGRpcmVjdG9yaWVzIHNwZWNpZmllZCB3aXRoIC1MCiAJCSAgICAjIGFyZSBhZGRlZCB0byB0aGUgcnVuLXRpbWUgc2VhcmNoIHBhdGgsIHNvCiAJCSAgICAjIHdlIGRvbid0IGFkZCB0aGVtIGluIHBjYXAtY29uZmlnLgogCQkgICAgIwpAQCAtNTgzLDE0ICs1ODMsMTQgQEAKIAkJICAgIFZfU0hMSUJfT1BUPSItYiIKIAkJICAgIFZfU09OQU1FX09QVD0iK2ggIgogCQkgICAgIwotCQkgICAgIyBCeSBkZWZhdWx0LCBkaXJlY3RvcmllcyBzcGVjaWZlZCB3aXRoIC1MCisJCSAgICAjIEJ5IGRlZmF1bHQsIGRpcmVjdG9yaWVzIHNwZWNpZmllZCB3aXRoIC1MCiAJCSAgICAjIGFyZSBhZGRlZCB0byB0aGUgcnVuLXRpbWUgc2VhcmNoIHBhdGgsIHNvCiAJCSAgICAjIHdlIGRvbid0IGFkZCB0aGVtIGluIHBjYXAtY29uZmlnLgogCQkgICAgIwogCQkgICAgOzsKIAogCSAgICBvc2YqKQotCSAgICAJICAgICMKKwkJICAgICMKIAkJICAgICMgUHJlc3VtZWQgdG8gYmUgREVDIE9TRi8xLCBEaWdpdGFsIFVOSVgsIG9yCiAJCSAgICAjIFRydTY0IFVOSVguCiAJCSAgICAjCkBAIC03NTMsMTA2ICs3NTMsNiBAQAogICAgIF0pCiAKIGRubAotZG5sIENoZWNrcyB0byBzZWUgaWYgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3NlcyBmYWlsCi1kbmwKLWRubCB1c2FnZToKLWRubAotZG5sCUFDX0xCTF9VTkFMSUdORURfQUNDRVNTCi1kbmwKLWRubCByZXN1bHRzOgotZG5sCi1kbmwJTEJMX0FMSUdOIChERUZJTkVEKQotZG5sCi1BQ19ERUZVTihBQ19MQkxfVU5BTElHTkVEX0FDQ0VTUywKLSAgICBbQUNfTVNHX0NIRUNLSU5HKGlmIHVuYWxpZ25lZCBhY2Nlc3NlcyBmYWlsKQotICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfdW5hbGlnbmVkX2ZhaWwsCi0JW2Nhc2UgIiRob3N0X2NwdSIgaW4KLQotCSMKLQkjIFRoZXNlIGFyZSBDUFUgdHlwZXMgd2hlcmU6Ci0JIwotCSMJdGhlIENQVSBmYXVsdHMgb24gYW4gdW5hbGlnbmVkIGFjY2VzcywgYnV0IGF0IGxlYXN0IHNvbWUKLQkjCU9TZXMgdGhhdCBzdXBwb3J0IHRoYXQgQ1BVIGNhdGNoIHRoZSBmYXVsdCBhbmQgc2ltdWxhdGUKLQkjCXRoZSB1bmFsaWduZWQgYWNjZXNzIChlLmcuLCBBbHBoYS97RGlnaXRhbCxUcnU2NH0gVU5JWCkgLQotCSMJdGhlIHNpbXVsYXRpb24gaXMgc2xvdywgc28gd2UgZG9uJ3Qgd2FudCB0byB1c2UgaXQ7Ci0JIwotCSMJdGhlIENQVSwgSSBpbmZlciAoZnJvbSB0aGUgb2xkCi0JIwotCSMgWFhYOiBzaG91bGQgYWxzbyBjaGVjayB0aGF0IHRoZXkgZG9uJ3QgZG8gd2VpcmQgdGhpbmdzIChsaWtlIG9uIGFybSkKLQkjCi0JIwljb21tZW50KSBkb2Vzbid0IGZhdWx0IG9uIHVuYWxpZ25lZCBhY2Nlc3NlcywgYnV0IGRvZXNuJ3QKLQkjCWRvIGEgbm9ybWFsIHVuYWxpZ25lZCBmZXRjaCwgZWl0aGVyIChlLmcuLCBwcmVzdW1hYmx5LCBBUk0pOwotCSMKLQkjCWZvciB3aGF0ZXZlciByZWFzb24sIHRoZSB0ZXN0IHByb2dyYW0gZG9lc24ndCB3b3JrCi0JIwkodGhpcyBoYXMgYmVlbiBjbGFpbWVkIHRvIGJlIHRoZSBjYXNlIGZvciBzZXZlcmFsIG9mIHRob3NlCi0JIwlDUFVzIC0gSSBkb24ndCBrbm93IHdoYXQgdGhlIHByb2JsZW0gaXM7IHRoZSBwcm9ibGVtCi0JIwl3YXMgcmVwb3J0ZWQgYXMgInRoZSB0ZXN0IHByb2dyYW0gZHVtcHMgY29yZSIgZm9yIFN1cGVySCwKLQkjCWJ1dCB0aGF0J3Mgd2hhdCB0aGUgdGVzdCBwcm9ncmFtIGlzICpzdXBwb3NlZCogdG8gZG8gLQotCSMJaXQgZHVtcHMgY29yZSBiZWZvcmUgaXQgd3JpdGVzIGFueXRoaW5nLCBzbyB0aGUgdGVzdAotCSMJZm9yIGFuIGVtcHR5IG91dHB1dCBmaWxlIHNob3VsZCBmaW5kIGFuIGVtcHR5IG91dHB1dAotCSMJZmlsZSBhbmQgY29uY2x1ZGUgdGhhdCB1bmFsaWduZWQgYWNjZXNzZXMgZG9uJ3Qgd29yaykuCi0JIwotCSMgVGhpcyBydW4tdGltZSB0ZXN0IHdvbid0IHdvcmsgaWYgeW91J3JlIGNyb3NzLWNvbXBpbGluZywgc28KLQkjIGluIG9yZGVyIHRvIHN1cHBvcnQgY3Jvc3MtY29tcGlsaW5nIGZvciBhIHBhcnRpY3VsYXIgQ1BVLAotCSMgd2UgaGF2ZSB0byB3aXJlIGluIHRoZSBsaXN0IG9mIENQVSB0eXBlcyBhbnl3YXksIGFzIGZhciBhcwotCSMgSSBrbm93LCBzbyBwZXJoYXBzIHdlIHNob3VsZCBqdXN0IGhhdmUgYSBzZXQgb2YgQ1BVcyBvbgotCSMgd2hpY2ggd2Uga25vdyBpdCBkb2Vzbid0IHdvcmssIGEgc2V0IG9mIENQVXMgb24gd2hpY2ggd2UKLQkjIGtub3cgaXQgZG9lcyB3b3JrLCBhbmQgaGF2ZSB0aGUgc2NyaXB0IGp1c3QgZmFpbCBvbiBvdGhlcgotCSMgY3B1IHR5cGVzIGFuZCB1cGRhdGUgaXQgd2hlbiBzdWNoIGEgZmFpbHVyZSBvY2N1cnMuCi0JIwotCWFscGhhKnxhcm0qfGJmaW4qfGhwKnxtaXBzKnxzaCp8c3BhcmMqfGlhNjR8bnYxKQotCQlhY19jdl9sYmxfdW5hbGlnbmVkX2ZhaWw9eWVzCi0JCTs7Ci0KLQkqKQotCQljYXQgPmNvbmZ0ZXN0LmMgPDxFT0YKLSMJCWluY2x1ZGUgPHN5cy90eXBlcy5oPgotIwkJaW5jbHVkZSA8c3lzL3dhaXQuaD4KLSMJCWluY2x1ZGUgPHN0ZGlvLmg+Ci0JCXVuc2lnbmVkIGNoYXIgYVtbNV1dID0geyAxLCAyLCAzLCA0LCA1IH07Ci0JCW1haW4oKSB7Ci0JCXVuc2lnbmVkIGludCBpOwotCQlwaWRfdCBwaWQ7Ci0JCWludCBzdGF0dXM7Ci0JCS8qIGF2b2lkICJjb3JlIGR1bXBlZCIgbWVzc2FnZSAqLwotCQlwaWQgPSBmb3JrKCk7Ci0JCWlmIChwaWQgPCAgMCkKLQkJCWV4aXQoMik7Ci0JCWlmIChwaWQgPiAwKSB7Ci0JCQkvKiBwYXJlbnQgKi8KLQkJCXBpZCA9IHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKTsKLQkJCWlmIChwaWQgPCAwKQotCQkJCWV4aXQoMyk7Ci0JCQlleGl0KCFXSUZFWElURUQoc3RhdHVzKSk7Ci0JCX0KLQkJLyogY2hpbGQgKi8KLQkJaSA9ICoodW5zaWduZWQgaW50ICopJmFbWzFdXTsKLQkJcHJpbnRmKCIlZFxuIiwgaSk7Ci0JCWV4aXQoMCk7Ci0JCX0KLUVPRgotCQkke0NDLWNjfSAtbyBjb25mdGVzdCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBcCi0JCSAgICBjb25mdGVzdC5jICRMSUJTID4vZGV2L251bGwgMj4mMQotCQlpZiB0ZXN0ICEgLXggY29uZnRlc3QgOyB0aGVuCi0JCQlkbmwgZmFpbGVkIHRvIGNvbXBpbGUgZm9yIHNvbWUgcmVhc29uCi0JCQlhY19jdl9sYmxfdW5hbGlnbmVkX2ZhaWw9eWVzCi0JCWVsc2UKLQkJCS4vY29uZnRlc3QgPmNvbmZ0ZXN0Lm91dAotCQkJaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0Lm91dCA7IHRoZW4KLQkJCQlhY19jdl9sYmxfdW5hbGlnbmVkX2ZhaWw9eWVzCi0JCQllbHNlCi0JCQkJYWNfY3ZfbGJsX3VuYWxpZ25lZF9mYWlsPW5vCi0JCQlmaQotCQlmaQotCQlybSAtZiAtciBjb25mdGVzdCogY29yZSBjb3JlLmNvbmZ0ZXN0Ci0JCTs7Ci0JZXNhY10pCi0gICAgQUNfTVNHX1JFU1VMVCgkYWNfY3ZfbGJsX3VuYWxpZ25lZF9mYWlsKQotICAgIGlmIHRlc3QgJGFjX2N2X2xibF91bmFsaWduZWRfZmFpbCA9IHllcyA7IHRoZW4KLQkgICAgQUNfREVGSU5FKExCTF9BTElHTiwxLFtpZiB1bmFsaWduZWQgYWNjZXNzIGZhaWxzXSkKLSAgICBmaV0pCi0KLWRubAogZG5sIElmIHRoZSBmaWxlIC5kZXZlbCBleGlzdHM6CiBkbmwJQWRkIHNvbWUgd2FybmluZyBmbGFncyBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlbQogZG5sCUlmIGFuIG9zIHByb3RvdHlwZSBpbmNsdWRlIGV4aXN0cywgc3ltbGluayBvcy1wcm90by5oIHRvIGl0CkBAIC04NzgsMjIgKzc3OCwyNCBAQAogCSAgICAjCiAJICAgIGlmIHRlc3QgIiRhY19sYmxfY2NfZG9udF90cnlfZ2NjX2Rhc2hXIiAhPSB5ZXM7IHRoZW4KIAkJICAgIEFDX0xCTF9DSEVDS19VTktOT1dOX1dBUk5JTkdfT1BUSU9OX0VSUk9SKCkKKwkJICAgIEFDX0xCTF9DSEVDS19DT01QSUxFUl9PUFQoJDEsIC1XKQogCQkgICAgQUNfTEJMX0NIRUNLX0NPTVBJTEVSX09QVCgkMSwgLVdhbGwpCi0JCSAgICBBQ19MQkxfQ0hFQ0tfQ09NUElMRVJfT1BUKCQxLCAtV3NpZ24tY29tcGFyZSkKLQkJICAgIEFDX0xCTF9DSEVDS19DT01QSUxFUl9PUFQoJDEsIC1XbWlzc2luZy1wcm90b3R5cGVzKQotCQkgICAgQUNfTEJMX0NIRUNLX0NPTVBJTEVSX09QVCgkMSwgLVdzdHJpY3QtcHJvdG90eXBlcykKLQkJICAgIEFDX0xCTF9DSEVDS19DT01QSUxFUl9PUFQoJDEsIC1Xc2hhZG93KQotCQkgICAgQUNfTEJMX0NIRUNLX0NPTVBJTEVSX09QVCgkMSwgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQpCi0JCSAgICBBQ19MQkxfQ0hFQ0tfQ09NUElMRVJfT1BUKCQxLCAtV3VzZWQtYnV0LW1hcmtlZC11bnVzZWQpCi0JCSAgICBBQ19MQkxfQ0hFQ0tfQ09NUElMRVJfT1BUKCQxLCAtV2RvY3VtZW50YXRpb24pCiAJCSAgICBBQ19MQkxfQ0hFQ0tfQ09NUElMRVJfT1BUKCQxLCAtV2NvbW1hKQorCQkgICAgQUNfTEJMX0NIRUNLX0NPTVBJTEVSX09QVCgkMSwgLVdkb2N1bWVudGF0aW9uKQorCQkgICAgQUNfTEJMX0NIRUNLX0NPTVBJTEVSX09QVCgkMSwgLVdmb3JtYXQtbm9ubGl0ZXJhbCkKIAkJICAgIEFDX0xCTF9DSEVDS19DT01QSUxFUl9PUFQoJDEsIC1XbWlzc2luZy1ub3JldHVybikKKwkJICAgIEFDX0xCTF9DSEVDS19DT01QSUxFUl9PUFQoJDEsIC1XbWlzc2luZy1wcm90b3R5cGVzKQorCQkgICAgQUNfTEJMX0NIRUNLX0NPTVBJTEVSX09QVCgkMSwgLVdtaXNzaW5nLXZhcmlhYmxlLWRlY2xhcmF0aW9ucykKKwkJICAgIEFDX0xCTF9DSEVDS19DT01QSUxFUl9PUFQoJDEsIC1XcG9pbnRlci1hcml0aCkKKwkJICAgIEFDX0xCTF9DSEVDS19DT01QSUxFUl9PUFQoJDEsIC1XcG9pbnRlci1zaWduKQorCQkgICAgQUNfTEJMX0NIRUNLX0NPTVBJTEVSX09QVCgkMSwgLVdzaGFkb3cpCisJCSAgICBBQ19MQkxfQ0hFQ0tfQ09NUElMRVJfT1BUKCQxLCAtV3NpZ24tY29tcGFyZSkKKwkJICAgIEFDX0xCTF9DSEVDS19DT01QSUxFUl9PUFQoJDEsIC1Xc3RyaWN0LXByb3RvdHlwZXMpCisJCSAgICBBQ19MQkxfQ0hFQ0tfQ09NUElMRVJfT1BUKCQxLCAtV3VudXNlZC1wYXJhbWV0ZXIpCisJCSAgICBBQ19MQkxfQ0hFQ0tfQ09NUElMRVJfT1BUKCQxLCAtV3VzZWQtYnV0LW1hcmtlZC11bnVzZWQpCiAJCSAgICAjIFdhcm5zIGFib3V0IHNhZmVndWFyZHMgYWRkZWQgaW4gY2FzZSB0aGUgZW51bXMgYXJlCiAJCSAgICAjIGV4dGVuZGVkCiAJCSAgICAjIEFDX0xCTF9DSEVDS19DT01QSUxFUl9PUFQoJDEsIC1XY292ZXJlZC1zd2l0Y2gtZGVmYXVsdCkKLQkJICAgIEFDX0xCTF9DSEVDS19DT01QSUxFUl9PUFQoJDEsIC1XbWlzc2luZy12YXJpYWJsZS1kZWNsYXJhdGlvbnMpCi0JCSAgICBBQ19MQkxfQ0hFQ0tfQ09NUElMRVJfT1BUKCQxLCAtV3VudXNlZC1wYXJhbWV0ZXIpCi0JCSAgICBBQ19MQkxfQ0hFQ0tfQ09NUElMRVJfT1BUKCQxLCAtV2Zvcm1hdC1ub25saXRlcmFsKQogCQkgICAgIwogCQkgICAgIyBUaGlzIGNhbiBjYXVzZSBwcm9ibGVtcyB3aXRoIG50b2hzKCksIG50b2hsKCksCiAJCSAgICAjIGh0b25zKCksIGFuZCBodG9ubCgpIG9uIHNvbWUgcGxhdGZvcm1zLCBzdWNoCkBAIC05MjksNiArODMxLDcgQEAKIH0KIAkJICAgICAgXSwKIAkJICAgICAgW2dlbmVyYXRlcyB3YXJuaW5ncyBmcm9tIG50b2hzKCldKQorCQkgICAgQUNfTEJMX0NIRUNLX0NPTVBJTEVSX09QVCgkMSwgLVdzaG9ydGVuLTY0LXRvLTMyKQogCSAgICBmaQogCSAgICBBQ19MQkxfQ0hFQ0tfREVQRU5ERU5DWV9HRU5FUkFUSU9OX09QVCgpCiAJICAgICMKQEAgLTEwNTUsMTAgKzk1OCwxOSBAQAogCSAgICBMSUJTPSItbHNvY2tldCAtbG5zbCAkTElCUyIKIAldLAogCVsKLQkgICAgIwotCSAgICAjIFdlIGRpZG4ndCBmaW5kIGl0LgotCSAgICAjCi0JICAgIEFDX01TR19FUlJPUihbZ2V0YWRkcmluZm8gaXMgcmVxdWlyZWQsIGJ1dCB3YXNuJ3QgZm91bmRdKQorCQlBQ19DSEVDS19MSUIobmV0d29yaywgZ2V0YWRkcmluZm8sCisJCVsKKwkJICAgICMKKwkJICAgICMgT0ssIHdlIGZvdW5kIGl0IGluIGxpYm5ldHdvcmsgb24gSGFpa3UuCisJCSAgICAjCisJCSAgICBMSUJTPSItbG5ldHdvcmsgJExJQlMiCisJCV0sCisJCVsKKwkJICAgICMKKwkJICAgICMgV2UgZGlkbid0IGZpbmQgaXQuCisJCSAgICAjCisJCSAgICBBQ19NU0dfRVJST1IoW2dldGFkZHJpbmZvIGlzIHJlcXVpcmVkLCBidXQgd2Fzbid0IGZvdW5kXSkKKwkJXSkKIAldLCAtbG5zbCkKIAogCSMKQEAgLTEwNzYsMyArOTg4LDI4MSBAQAogICAgICMgRExQSSBuZWVkcyBwdXRtc2cgdW5kZXIgSFBVWCBzbyB0ZXN0IGZvciAtbHN0ciB3aGlsZSB3ZSdyZSBhdCBpdAogICAgIEFDX1NFQVJDSF9MSUJTKHB1dG1zZywgc3RyKQogXSkKKworbTRfaWZuZGVmKFtBQ19DT05GSUdfTUFDUk9fRElSU10sIFttNF9kZWZ1bihbX0FNX0NPTkZJR19NQUNST19ESVJTXSwgW10pbTRfZGVmdW4oW0FDX0NPTkZJR19NQUNST19ESVJTXSwgW19BTV9DT05GSUdfTUFDUk9fRElSUygkQCldKV0pCitkbmwgcGtnLm00IC0gTWFjcm9zIHRvIGxvY2F0ZSBhbmQgdXRpbGlzZSBwa2ctY29uZmlnLiAgIC0qLSBBdXRvY29uZiAtKi0KK2RubCBzZXJpYWwgMTEgKHBrZy1jb25maWctMC4yOSkKK2RubAorZG5sIENvcHlyaWdodCDCqSAyMDA0IFNjb3R0IEphbWVzIFJlbW5hbnQgPHNjb3R0QG5ldHNwbGl0LmNvbT4uCitkbmwgQ29weXJpZ2h0IMKpIDIwMTItMjAxNSBEYW4gTmljaG9sc29uIDxkYm4ubGlzdHNAZ21haWwuY29tPgorZG5sCitkbmwgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorZG5sIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCitkbmwgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitkbmwgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK2RubCBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKK2RubCAwMjExMS0xMzA3LCBVU0EuCitkbmwKK2RubCBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CitkbmwgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCitkbmwgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0CitkbmwgcHJvZ3JhbS4KKworZG5sIFBLR19QUkVSRVEoTUlOLVZFUlNJT04pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTaW5jZTogMC4yOQorZG5sCitkbmwgVmVyaWZ5IHRoYXQgdGhlIHZlcnNpb24gb2YgdGhlIHBrZy1jb25maWcgbWFjcm9zIGFyZSBhdCBsZWFzdAorZG5sIE1JTi1WRVJTSU9OLiBVbmxpa2UgUEtHX1BST0dfUEtHX0NPTkZJRywgd2hpY2ggY2hlY2tzIHRoZSB1c2VyJ3MKK2RubCBpbnN0YWxsZWQgdmVyc2lvbiBvZiBwa2ctY29uZmlnLCB0aGlzIGNoZWNrcyB0aGUgZGV2ZWxvcGVyJ3MgdmVyc2lvbgorZG5sIG9mIHBrZy5tNCB3aGVuIGdlbmVyYXRpbmcgY29uZmlndXJlLgorZG5sCitkbmwgVG8gZW5zdXJlIHRoYXQgdGhpcyBtYWNybyBpcyBkZWZpbmVkLCBhbHNvIGFkZDoKK2RubCBtNF9pZm5kZWYoW1BLR19QUkVSRVFdLAorZG5sICAgICBbbTRfZmF0YWwoW211c3QgaW5zdGFsbCBwa2ctY29uZmlnIDAuMjkgb3IgbGF0ZXIgYmVmb3JlIHJ1bm5pbmcgYXV0b2NvbmYvYXV0b2dlbl0pXSkKK2RubAorZG5sIFNlZSB0aGUgIlNpbmNlIiBjb21tZW50IGZvciBlYWNoIG1hY3JvIHlvdSB1c2UgdG8gc2VlIHdoYXQgdmVyc2lvbgorZG5sIG9mIHRoZSBtYWNyb3MgeW91IHJlcXVpcmUuCittNF9kZWZ1bihbUEtHX1BSRVJFUV0sCitbbTRfZGVmaW5lKFtQS0dfTUFDUk9TX1ZFUlNJT05dLCBbMC4yOV0pCittNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUoUEtHX01BQ1JPU19WRVJTSU9OLCBbJDFdKSwgLTEsCisgICAgW200X2ZhdGFsKFtwa2cubTQgdmVyc2lvbiAkMSBvciBoaWdoZXIgaXMgcmVxdWlyZWQgYnV0IF1QS0dfTUFDUk9TX1ZFUlNJT05bIGZvdW5kXSldKQorXSlkbmwgUEtHX1BSRVJFUQorCitkbmwgUEtHX1BST0dfUEtHX0NPTkZJRyhbTUlOLVZFUlNJT05dKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTaW5jZTogMC4xNgorZG5sCitkbmwgU2VhcmNoIGZvciB0aGUgcGtnLWNvbmZpZyB0b29sIGFuZCBzZXQgdGhlIFBLR19DT05GSUcgdmFyaWFibGUgdG8KK2RubCBmaXJzdCBmb3VuZCBpbiB0aGUgcGF0aC4gQ2hlY2tzIHRoYXQgdGhlIHZlcnNpb24gb2YgcGtnLWNvbmZpZyBmb3VuZAorZG5sIGlzIGF0IGxlYXN0IE1JTi1WRVJTSU9OLiBJZiBNSU4tVkVSU0lPTiBpcyBub3Qgc3BlY2lmaWVkLCAwLjkuMCBpcworZG5sIHVzZWQgc2luY2UgdGhhdCdzIHRoZSBmaXJzdCB2ZXJzaW9uIHdoZXJlIG1vc3QgY3VycmVudCBmZWF0dXJlcyBvZgorZG5sIHBrZy1jb25maWcgZXhpc3RlZC4KK0FDX0RFRlVOKFtQS0dfUFJPR19QS0dfQ09ORklHXSwKK1ttNF9wYXR0ZXJuX2ZvcmJpZChbXl8/UEtHX1tBLVpfXSskXSkKK200X3BhdHRlcm5fYWxsb3coW15QS0dfQ09ORklHKF8oUEFUSHxMSUJESVJ8U1lTUk9PVF9ESVJ8QUxMT1dfU1lTVEVNXyhDRkxBR1N8TElCUykpKT8kXSkKK200X3BhdHRlcm5fYWxsb3coW15QS0dfQ09ORklHXyhESVNBQkxFX1VOSU5TVEFMTEVEfFRPUF9CVUlMRF9ESVJ8REVCVUdfU1BFVykkXSkKK0FDX0FSR19WQVIoW1BLR19DT05GSUddLCBbcGF0aCB0byBwa2ctY29uZmlnIHV0aWxpdHldKQorQUNfQVJHX1ZBUihbUEtHX0NPTkZJR19QQVRIXSwgW2RpcmVjdG9yaWVzIHRvIGFkZCB0byBwa2ctY29uZmlnJ3Mgc2VhcmNoIHBhdGhdKQorQUNfQVJHX1ZBUihbUEtHX0NPTkZJR19MSUJESVJdLCBbcGF0aCBvdmVycmlkaW5nIHBrZy1jb25maWcncyBidWlsdC1pbiBzZWFyY2ggcGF0aF0pCisKK2lmIHRlc3QgIngkYWNfY3ZfZW52X1BLR19DT05GSUdfc2V0IiAhPSAieHNldCI7IHRoZW4KKwlBQ19QQVRIX1RPT0woW1BLR19DT05GSUddLCBbcGtnLWNvbmZpZ10pCitmaQoraWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisJX3BrZ19taW5fdmVyc2lvbj1tNF9kZWZhdWx0KFskMV0sIFswLjkuMF0pCisJQUNfTVNHX0NIRUNLSU5HKFtwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb25dKQorCWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbjsgdGhlbgorCQlBQ19NU0dfUkVTVUxUKFt5ZXNdKQorCWVsc2UKKwkJQUNfTVNHX1JFU1VMVChbbm9dKQorCQlQS0dfQ09ORklHPSIiCisJZmkKK2ZpW11kbmwKK10pZG5sIFBLR19QUk9HX1BLR19DT05GSUcKKworZG5sIFBLR19DSEVDS19FWElTVFMoTU9EVUxFUywgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2luY2U6IDAuMTgKK2RubAorZG5sIENoZWNrIHRvIHNlZSB3aGV0aGVyIGEgcGFydGljdWxhciBzZXQgb2YgbW9kdWxlcyBleGlzdHMuIFNpbWlsYXIgdG8KK2RubCBQS0dfQ0hFQ0tfTU9EVUxFUygpLCBidXQgZG9lcyBub3Qgc2V0IHZhcmlhYmxlcyBvciBwcmludCBlcnJvcnMuCitkbmwKK2RubCBQbGVhc2UgcmVtZW1iZXIgdGhhdCBtNCBleHBhbmRzIEFDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKQorZG5sIG9ubHkgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2UgaW4gY29uZmlndXJlLmFjLCBzbyBpZiB0aGUgZmlyc3QgcGxhY2UKK2RubCBpdCdzIGNhbGxlZCBtaWdodCBiZSBza2lwcGVkIChzdWNoIGFzIGlmIGl0IGlzIHdpdGhpbiBhbiAiaWYiLCB5b3UKK2RubCBoYXZlIHRvIGNhbGwgUEtHX0NIRUNLX0VYSVNUUyBtYW51YWxseQorQUNfREVGVU4oW1BLR19DSEVDS19FWElTVFNdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKWRubAoraWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICBBQ19SVU5fTE9HKFskUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAiJDEiXSk7IHRoZW4KKyAgbTRfZGVmYXVsdChbJDJdLCBbOl0pCittNF9pZnZhbG4oWyQzXSwgW2Vsc2UKKyAgJDNdKWRubAorZmldKQorCitkbmwgX1BLR19DT05GSUcoW1ZBUklBQkxFXSwgW0NPTU1BTkRdLCBbTU9EVUxFU10pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgSW50ZXJuYWwgd3JhcHBlciBjYWxsaW5nIHBrZy1jb25maWcgdmlhIFBLR19DT05GSUcgYW5kIHNldHRpbmcKK2RubCBwa2dfZmFpbGVkIGJhc2VkIG9uIHRoZSByZXN1bHQuCittNF9kZWZpbmUoW19QS0dfQ09ORklHXSwKK1tpZiB0ZXN0IC1uICIkJDEiOyB0aGVuCisgICAgcGtnX2N2X1tdJDE9IiQkMSIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIFBLR19DSEVDS19FWElTVFMoWyQzXSwKKyAgICAgICAgICAgICAgICAgICAgIFtwa2dfY3ZfW10kMT1gJFBLR19DT05GSUcgLS1bXSQyICIkMyIgMj4vZGV2L251bGxgCisJCSAgICAgIHRlc3QgIngkPyIgIT0gIngwIiAmJiBwa2dfZmFpbGVkPXllcyBdLAorCQkgICAgIFtwa2dfZmFpbGVkPXllc10pCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmlbXWRubAorXSlkbmwgX1BLR19DT05GSUcKKworZG5sIF9QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRAorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIEludGVybmFsIGNoZWNrIHRvIHNlZSBpZiBwa2ctY29uZmlnIHN1cHBvcnRzIHNob3J0IGVycm9ycy4KK0FDX0RFRlVOKFtfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURURdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKQoraWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcworZWxzZQorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KK2ZpW11kbmwKK10pZG5sIF9QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRAorCisKK2RubCBQS0dfQ0hFQ0tfTU9EVUxFUyhWQVJJQUJMRS1QUkVGSVgsIE1PRFVMRVMsIFtBQ1RJT04tSUYtRk9VTkRdLAorZG5sICAgW0FDVElPTi1JRi1OT1QtRk9VTkRdKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2luY2U6IDAuNC4wCitkbmwKK2RubCBOb3RlIHRoYXQgaWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGUgZmlyc3QgY2FsbCB0bworZG5sIFBLR19DSEVDS19NT0RVTEVTIG1pZ2h0IG5vdCBoYXBwZW4sIHlvdSBzaG91bGQgYmUgc3VyZSB0byBpbmNsdWRlIGFuCitkbmwgZXhwbGljaXQgY2FsbCB0byBQS0dfUFJPR19QS0dfQ09ORklHIGluIHlvdXIgY29uZmlndXJlLmFjCitBQ19ERUZVTihbUEtHX0NIRUNLX01PRFVMRVNdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKWRubAorQUNfQVJHX1ZBUihbJDFdW19DRkxBR1NdLCBbQyBjb21waWxlciBmbGFncyBmb3IgJDEsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZ10pZG5sCitBQ19BUkdfVkFSKFskMV1bX0xJQlNdLCBbbGlua2VyIGZsYWdzIGZvciAkMSwgb3ZlcnJpZGluZyBwa2ctY29uZmlnXSlkbmwKKworcGtnX2ZhaWxlZD1ubworQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQorCitfUEtHX0NPTkZJRyhbJDFdW19DRkxBR1NdLCBbY2ZsYWdzXSwgWyQyXSkKK19QS0dfQ09ORklHKFskMV1bX0xJQlNdLCBbbGlic10sIFskMl0pCisKK200X2RlZmluZShbX1BLR19URVhUXSwgW0FsdGVybmF0aXZlbHksIHlvdSBtYXkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgJDFbXV9DRkxBR1MKK2FuZCAkMVtdX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuXSkKKworaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHllczsgdGhlbgorICAgCUFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECisgICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgorCSAgICAgICAgJDFbXV9QS0dfRVJST1JTPWAkUEtHX0NPTkZJRyAtLXNob3J0LWVycm9ycyAtLXByaW50LWVycm9ycyAtLWNmbGFncyAtLWxpYnMgIiQyIiAyPiYxYAorICAgICAgICBlbHNlCisJICAgICAgICAkMVtdX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tcHJpbnQtZXJyb3JzIC0tY2ZsYWdzIC0tbGlicyAiJDIiIDI+JjFgCisgICAgICAgIGZpCisJIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCisJZWNobyAiJCQxW11fUEtHX0VSUk9SUyIgPiZBU19NRVNTQUdFX0xPR19GRAorCisJbTRfZGVmYXVsdChbJDRdLCBbQUNfTVNHX0VSUk9SKAorW1BhY2thZ2UgcmVxdWlyZW1lbnRzICgkMikgd2VyZSBub3QgbWV0OgorCiskJDFfUEtHX0VSUk9SUworCitDb25zaWRlciBhZGp1c3RpbmcgdGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiB5b3UKK2luc3RhbGxlZCBzb2Z0d2FyZSBpbiBhIG5vbi1zdGFuZGFyZCBwcmVmaXguCisKK19QS0dfVEVYVF0pW11kbmwKKyAgICAgICAgXSkKK2VsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KKyAgICAgCUFDX01TR19SRVNVTFQoW25vXSkKKwltNF9kZWZhdWx0KFskNF0sIFtBQ19NU0dfRkFJTFVSRSgKK1tUaGUgcGtnLWNvbmZpZyBzY3JpcHQgY291bGQgbm90IGJlIGZvdW5kIG9yIGlzIHRvbyBvbGQuICBNYWtlIHN1cmUgaXQKK2lzIGluIHlvdXIgUEFUSCBvciBzZXQgdGhlIFBLR19DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGZ1bGwKK3BhdGggdG8gcGtnLWNvbmZpZy4KKworX1BLR19URVhUCisKK1RvIGdldCBwa2ctY29uZmlnLCBzZWUgPGh0dHBzOi8vcGtnLWNvbmZpZy5mcmVlZGVza3RvcC5vcmcvPi5dKVtdZG5sCisgICAgICAgIF0pCitlbHNlCisJJDFbXV9DRkxBR1M9JHBrZ19jdl9bXSQxW11fQ0ZMQUdTCisJJDFbXV9MSUJTPSRwa2dfY3ZfW10kMVtdX0xJQlMKKyAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKwkkMworZmlbXWRubAorXSlkbmwgUEtHX0NIRUNLX01PRFVMRVMKKworCitkbmwgUEtHX0NIRUNLX01PRFVMRVNfU1RBVElDKFZBUklBQkxFLVBSRUZJWCwgTU9EVUxFUywgW0FDVElPTi1JRi1GT1VORF0sCitkbmwgICBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2luY2U6IDAuMjkKK2RubAorZG5sIENoZWNrcyBmb3IgZXhpc3RlbmNlIG9mIE1PRFVMRVMgYW5kIGdhdGhlcnMgaXRzIGJ1aWxkIGZsYWdzIHdpdGgKK2RubCBzdGF0aWMgbGlicmFyaWVzIGVuYWJsZWQuIFNldHMgVkFSSUFCTEUtUFJFRklYX0NGTEFHUyBmcm9tIC0tY2ZsYWdzCitkbmwgYW5kIFZBUklBQkxFLVBSRUZJWF9MSUJTIGZyb20gLS1saWJzLgorZG5sCitkbmwgTm90ZSB0aGF0IGlmIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhlIGZpcnN0IGNhbGwgdG8KK2RubCBQS0dfQ0hFQ0tfTU9EVUxFU19TVEFUSUMgbWlnaHQgbm90IGhhcHBlbiwgeW91IHNob3VsZCBiZSBzdXJlIHRvCitkbmwgaW5jbHVkZSBhbiBleHBsaWNpdCBjYWxsIHRvIFBLR19QUk9HX1BLR19DT05GSUcgaW4geW91cgorZG5sIGNvbmZpZ3VyZS5hYy4KK0FDX0RFRlVOKFtQS0dfQ0hFQ0tfTU9EVUxFU19TVEFUSUNdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKWRubAorX3NhdmVfUEtHX0NPTkZJRz0kUEtHX0NPTkZJRworUEtHX0NPTkZJRz0iJFBLR19DT05GSUcgLS1zdGF0aWMiCitQS0dfQ0hFQ0tfTU9EVUxFUygkQCkKK1BLR19DT05GSUc9JF9zYXZlX1BLR19DT05GSUdbXWRubAorXSlkbmwgUEtHX0NIRUNLX01PRFVMRVNfU1RBVElDCisKKworZG5sIFBLR19JTlNUQUxMRElSKFtESVJFQ1RPUlldKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTaW5jZTogMC4yNworZG5sCitkbmwgU3Vic3RpdHV0ZXMgdGhlIHZhcmlhYmxlIHBrZ2NvbmZpZ2RpciBhcyB0aGUgbG9jYXRpb24gd2hlcmUgYSBtb2R1bGUKK2RubCBzaG91bGQgaW5zdGFsbCBwa2ctY29uZmlnIC5wYyBmaWxlcy4gQnkgZGVmYXVsdCB0aGUgZGlyZWN0b3J5IGlzCitkbmwgJGxpYmRpci9wa2djb25maWcsIGJ1dCB0aGUgZGVmYXVsdCBjYW4gYmUgY2hhbmdlZCBieSBwYXNzaW5nCitkbmwgRElSRUNUT1JZLiBUaGUgdXNlciBjYW4gb3ZlcnJpZGUgdGhyb3VnaCB0aGUgLS13aXRoLXBrZ2NvbmZpZ2RpcgorZG5sIHBhcmFtZXRlci4KK0FDX0RFRlVOKFtQS0dfSU5TVEFMTERJUl0sCitbbTRfcHVzaGRlZihbcGtnX2RlZmF1bHRdLCBbbTRfZGVmYXVsdChbJDFdLCBbJyR7bGliZGlyfS9wa2djb25maWcnXSldKQorbTRfcHVzaGRlZihbcGtnX2Rlc2NyaXB0aW9uXSwKKyAgICBbcGtnLWNvbmZpZyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IEA8OkBdcGtnX2RlZmF1bHRbQDo+QF0pCitBQ19BUkdfV0lUSChbcGtnY29uZmlnZGlyXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1wa2djb25maWdkaXJdLCBwa2dfZGVzY3JpcHRpb24pXSwsCisgICAgW3dpdGhfcGtnY29uZmlnZGlyPV1wa2dfZGVmYXVsdCkKK0FDX1NVQlNUKFtwa2djb25maWdkaXJdLCBbJHdpdGhfcGtnY29uZmlnZGlyXSkKK200X3BvcGRlZihbcGtnX2RlZmF1bHRdKQorbTRfcG9wZGVmKFtwa2dfZGVzY3JpcHRpb25dKQorXSlkbmwgUEtHX0lOU1RBTExESVIKKworCitkbmwgUEtHX05PQVJDSF9JTlNUQUxMRElSKFtESVJFQ1RPUlldKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2luY2U6IDAuMjcKK2RubAorZG5sIFN1YnN0aXR1dGVzIHRoZSB2YXJpYWJsZSBub2FyY2hfcGtnY29uZmlnZGlyIGFzIHRoZSBsb2NhdGlvbiB3aGVyZSBhCitkbmwgbW9kdWxlIHNob3VsZCBpbnN0YWxsIGFyY2gtaW5kZXBlbmRlbnQgcGtnLWNvbmZpZyAucGMgZmlsZXMuIEJ5CitkbmwgZGVmYXVsdCB0aGUgZGlyZWN0b3J5IGlzICRkYXRhZGlyL3BrZ2NvbmZpZywgYnV0IHRoZSBkZWZhdWx0IGNhbiBiZQorZG5sIGNoYW5nZWQgYnkgcGFzc2luZyBESVJFQ1RPUlkuIFRoZSB1c2VyIGNhbiBvdmVycmlkZSB0aHJvdWdoIHRoZQorZG5sIC0td2l0aC1ub2FyY2gtcGtnY29uZmlnZGlyIHBhcmFtZXRlci4KK0FDX0RFRlVOKFtQS0dfTk9BUkNIX0lOU1RBTExESVJdLAorW200X3B1c2hkZWYoW3BrZ19kZWZhdWx0XSwgW200X2RlZmF1bHQoWyQxXSwgWycke2RhdGFkaXJ9L3BrZ2NvbmZpZyddKV0pCittNF9wdXNoZGVmKFtwa2dfZGVzY3JpcHRpb25dLAorICAgIFtwa2ctY29uZmlnIGFyY2gtaW5kZXBlbmRlbnQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBAPDpAXXBrZ19kZWZhdWx0W0A6PkBdKQorQUNfQVJHX1dJVEgoW25vYXJjaC1wa2djb25maWdkaXJdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLW5vYXJjaC1wa2djb25maWdkaXJdLCBwa2dfZGVzY3JpcHRpb24pXSwsCisgICAgW3dpdGhfbm9hcmNoX3BrZ2NvbmZpZ2Rpcj1dcGtnX2RlZmF1bHQpCitBQ19TVUJTVChbbm9hcmNoX3BrZ2NvbmZpZ2Rpcl0sIFskd2l0aF9ub2FyY2hfcGtnY29uZmlnZGlyXSkKK200X3BvcGRlZihbcGtnX2RlZmF1bHRdKQorbTRfcG9wZGVmKFtwa2dfZGVzY3JpcHRpb25dKQorXSlkbmwgUEtHX05PQVJDSF9JTlNUQUxMRElSCisKKworZG5sIFBLR19DSEVDS19WQVIoVkFSSUFCTEUsIE1PRFVMRSwgQ09ORklHLVZBUklBQkxFLAorZG5sIFtBQ1RJT04tSUYtRk9VTkRdLCBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNpbmNlOiAwLjI4CitkbmwKK2RubCBSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIHRoZSBwa2ctY29uZmlnIHZhcmlhYmxlIGZvciB0aGUgZ2l2ZW4gbW9kdWxlLgorQUNfREVGVU4oW1BLR19DSEVDS19WQVJdLAorW0FDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKWRubAorQUNfQVJHX1ZBUihbJDFdLCBbdmFsdWUgb2YgJDMgZm9yICQyLCBvdmVycmlkaW5nIHBrZy1jb25maWddKWRubAorCitfUEtHX0NPTkZJRyhbJDFdLCBbdmFyaWFibGU9Il1bJDNdWyJdLCBbJDJdKQorQVNfVkFSX0NPUFkoWyQxXSwgW3BrZ19jdl9dWyQxXSkKKworQVNfVkFSX0lGKFskMV0sIFsiIl0sIFskNV0sIFskNF0pZG5sCitdKWRubCBQS0dfQ0hFQ0tfVkFSCisKZGlmZiAtLWdpdCBhL2F0bXVuaTMxLmggYi9hdG11bmkzMS5oCmluZGV4IDBmODU0MzAuLjdkNGYyNzAgMTAwNjQ0Ci0tLSBhL2F0bXVuaTMxLmgKKysrIGIvYXRtdW5pMzEuaApAQCAtNzYsNyArNzYsNyBAQAogI2RlZmluZSBQUk9UT19QT1MgICAgICAgMAkvKiBvZmZzZXQgb2YgcHJvdG9jb2wgZGlzY3JpbWluYXRvciAqLwogI2RlZmluZSBDQUxMX1JFRl9QT1MgICAgMgkvKiBvZmZzZXQgb2YgY2FsbCByZWZlcmVuY2UgdmFsdWUgKi8KICNkZWZpbmUgTVNHX1RZUEVfUE9TICAgIDUJLyogb2Zmc2V0IG9mIG1lc3NhZ2UgdHlwZSAqLwotI2RlZmluZSBNU0dfTEVOX1BPUyAgICAgNwkvKiBvZmZzZXQgb2YgbWVzYWdlIGxlbmd0aCAqLworI2RlZmluZSBNU0dfTEVOX1BPUyAgICAgNwkvKiBvZmZzZXQgb2YgbWVzc2FnZSBsZW5ndGggKi8KICNkZWZpbmUgSUVfQkVHSU5fUE9TICAgIDkJLyogb2Zmc2V0IG9mIGZpcnN0IGluZm9ybWF0aW9uIGVsZW1lbnQgKi8KIAogLyogZm9ybWF0IG9mIHNpZ25hbGxpbmcgbWVzc2FnZXMgKi8KZGlmZiAtLWdpdCBhL2JwZl9maWx0ZXIuYyBiL2JwZl9maWx0ZXIuYwppbmRleCA2MTVlZDNmLi4yMmQyNTU4IDEwMDY0NAotLS0gYS9icGZfZmlsdGVyLmMKKysrIGIvYnBmX2ZpbHRlci5jCkBAIC00NCw2ICs0NCwxMSBAQAogCiAjaW5jbHVkZSA8cGNhcC9wY2FwLWludHR5cGVzLmg+CiAjaW5jbHVkZSAicGNhcC10eXBlcy5oIgorI2luY2x1ZGUgImV4dHJhY3QuaCIKKyNpbmNsdWRlICJkaWFnLWNvbnRyb2wuaCIKKworI2RlZmluZSBFWFRSQUNUX1NIT1JUCUVYVFJBQ1RfQkVfVV8yCisjZGVmaW5lIEVYVFJBQ1RfTE9ORwlFWFRSQUNUX0JFX1VfNAogCiAjaWZuZGVmIF9XSU4zMgogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgpAQCAtNTEsNDYgKzU2LDEwIEBACiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNlbmRpZiAvKiBfV0lOMzIgKi8KIAotI2luY2x1ZGUgPHBjYXAvYnBmLmg+CisjaW5jbHVkZSA8cGNhcC1pbnQuaD4KIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCi0jZGVmaW5lIGludDMyIGJwZl9pbnQzMgotI2RlZmluZSB1X2ludDMyIGJwZl91X2ludDMyCi0KLSNpZm5kZWYgTEJMX0FMSUdOCi0vKgotICogWFhYIC0gSUEtNjQ/ICBJZiBub3QsIHRoaXMgcHJvYmFibHkgd29uJ3Qgd29yayBvbiBXaW42NCBJQS02NAotICogc3lzdGVtcywgdW5sZXNzIExCTF9BTElHTiBpcyBkZWZpbmVkIGVsc2V3aGVyZSBmb3IgdGhlbS4KLSAqIFhYWCAtIFN1cGVySD8gIElmIG5vdCwgdGhpcyBwcm9iYWJseSB3b24ndCB3b3JrIG9uIFdpbkNFIFN1cGVySAotICogc3lzdGVtcywgdW5sZXNzIExCTF9BTElHTiBpcyBkZWZpbmVkIGVsc2V3aGVyZSBmb3IgdGhlbS4KLSAqLwotI2lmIGRlZmluZWQoc3BhcmMpIHx8IGRlZmluZWQoX19zcGFyY19fKSB8fCBkZWZpbmVkKG1pcHMpIHx8IFwKLSAgICBkZWZpbmVkKGlibTAzMikgfHwgZGVmaW5lZChfX2FscGhhKSB8fCBkZWZpbmVkKF9faHB1eCkgfHwgXAotICAgIGRlZmluZWQoX19hcm1fXykKLSNkZWZpbmUgTEJMX0FMSUdOCi0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIExCTF9BTElHTgotI2lmbmRlZiBfV0lOMzIKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBFWFRSQUNUX1NIT1JUKHApCSgodV9zaG9ydCludG9ocygqKHVfc2hvcnQgKilwKSkKLSNkZWZpbmUgRVhUUkFDVF9MT05HKHApCQkobnRvaGwoKih1X2ludDMyICopcCkpCi0jZWxzZQotI2RlZmluZSBFWFRSQUNUX1NIT1JUKHApXAotCSgodV9zaG9ydClcCi0JCSgodV9zaG9ydCkqKCh1X2NoYXIgKilwKzApPDw4fFwKLQkJICh1X3Nob3J0KSooKHVfY2hhciAqKXArMSk8PDApKQotI2RlZmluZSBFWFRSQUNUX0xPTkcocClcCi0JCSgodV9pbnQzMikqKCh1X2NoYXIgKilwKzApPDwyNHxcCi0JCSAodV9pbnQzMikqKCh1X2NoYXIgKilwKzEpPDwxNnxcCi0JCSAodV9pbnQzMikqKCh1X2NoYXIgKilwKzIpPDw4fFwKLQkJICh1X2ludDMyKSooKHVfY2hhciAqKXArMyk8PDApCi0jZW5kaWYKLQogI2lmZGVmIF9fbGludXhfXwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfcGFja2V0Lmg+CkBAIC0xMTUsMTMgKzg0LDE5IEBACiAgKgogICogVGhhbmtzIHRvIEFuaSBTaW5oYSA8YW5pQGFyaXN0YS5jb20+IGZvciBwcm92aWRpbmcgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbgogICovCisjaWYgZGVmaW5lZChTS0ZfQURfVkxBTl9UQUdfUFJFU0VOVCkKIHVfaW50Ci1icGZfZmlsdGVyX3dpdGhfYXV4X2RhdGEoY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYywgY29uc3QgdV9jaGFyICpwLAorcGNhcF9maWx0ZXJfd2l0aF9hdXhfZGF0YShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBjLCBjb25zdCB1X2NoYXIgKnAsCiAgICAgdV9pbnQgd2lyZWxlbiwgdV9pbnQgYnVmbGVuLCBjb25zdCBzdHJ1Y3QgYnBmX2F1eF9kYXRhICphdXhfZGF0YSkKKyNlbHNlCit1X2ludAorcGNhcF9maWx0ZXJfd2l0aF9hdXhfZGF0YShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBjLCBjb25zdCB1X2NoYXIgKnAsCisgICAgdV9pbnQgd2lyZWxlbiwgdV9pbnQgYnVmbGVuLCBjb25zdCBzdHJ1Y3QgYnBmX2F1eF9kYXRhICphdXhfZGF0YSBfVV8pCisjZW5kaWYKIHsKLQlyZWdpc3RlciB1X2ludDMyIEEsIFg7CisJcmVnaXN0ZXIgdWludDMyX3QgQSwgWDsKIAlyZWdpc3RlciBicGZfdV9pbnQzMiBrOwotCXVfaW50MzIgbWVtW0JQRl9NRU1XT1JEU107CisJdWludDMyX3QgbWVtW0JQRl9NRU1XT1JEU107CiAKIAlpZiAocGMgPT0gMCkKIAkJLyoKQEAgLTE2MCw2ICsxMzUsMTMgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWNhc2UgQlBGX0xEfEJQRl9CfEJQRl9BQlM6CisJCQkvKgorCQkJICogWWVzLCB3ZSBrbm93LCB0aGlzIHN3aXRjaCBkb2Vzbid0IGRvCisJCQkgKiBhbnl0aGluZyB1bmxlc3Mgd2UncmUgYnVpbGRpbmcgZm9yCisJCQkgKiBhIExpbnV4IGtlcm5lbCB3aXRoIHJlbW92ZWQgVkxBTgorCQkJICogdGFncyBhdmFpbGFibGUgYXMgbWV0YS1kYXRhLgorCQkJICovCitESUFHX09GRl9ERUZBVUxUX09OTFlfU1dJVENICiAJCQlzd2l0Y2ggKHBjLT5rKSB7CiAKICNpZiBkZWZpbmVkKFNLRl9BRF9WTEFOX1RBR19QUkVTRU5UKQpAQCAtMTgzLDYgKzE2NSw3IEBACiAJCQkJQSA9IHBba107CiAJCQkJYnJlYWs7CiAJCQl9CitESUFHX09OX0RFRkFVTFRfT05MWV9TV0lUQ0gKIAkJCWNvbnRpbnVlOwogCiAJCWNhc2UgQlBGX0xEfEJQRl9XfEJQRl9MRU46CkBAIC0zMjgsMTEgKzMxMSwxNyBAQAogCQkJY29udGludWU7CiAKIAkJY2FzZSBCUEZfQUxVfEJQRl9MU0h8QlBGX1g6Ci0JCQlBIDw8PSBYOworCQkJaWYgKFggPCAzMikKKwkJCQlBIDw8PSBYOworCQkJZWxzZQorCQkJCUEgPSAwOwogCQkJY29udGludWU7CiAKIAkJY2FzZSBCUEZfQUxVfEJQRl9SU0h8QlBGX1g6Ci0JCQlBID4+PSBYOworCQkJaWYgKFggPCAzMikKKwkJCQlBID4+PSBYOworCQkJZWxzZQorCQkJCUEgPSAwOwogCQkJY29udGludWU7CiAKIAkJY2FzZSBCUEZfQUxVfEJQRl9BRER8QlBGX0s6CkBAIC0zNzgsMTAgKzM2NywxMyBAQAogCQljYXNlIEJQRl9BTFV8QlBGX05FRzoKIAkJCS8qCiAJCQkgKiBNb3N0IEJQRiBhcml0aG1ldGljIGlzIHVuc2lnbmVkLCBidXQgbmVnYXRpb24KLQkJCSAqIGNhbid0IGJlIHVuc2lnbmVkOyB0aHJvdyBzb21lIGNhc3RzIHRvCi0JCQkgKiBzcGVjaWZ5IHdoYXQgd2UncmUgdHJ5aW5nIHRvIGRvLgorCQkJICogY2FuJ3QgYmUgdW5zaWduZWQ7IHJlc3BlY2lmeSBpdCBhcyBzdWJ0cmFjdGluZworCQkJICogdGhlIGFjY3VtdWxhdG9yIGZyb20gMFUsIHNvIHRoYXQgMSkgd2UgZG9uJ3QKKwkJCSAqIGdldCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBuZWdhdGluZyBhbiB1bnNpZ25lZAorCQkJICogdmFsdWUgYW5kIDIpIGRvbid0IGdldCBVQlNhbiB3YXJuaW5ncyBhYm91dAorCQkJICogdGhlIHJlc3VsdCBvZiBuZWdhdGluZyAweDgwMDAwMDAwIGJlaW5nIHVuZGVmaW5lZC4KIAkJCSAqLwotCQkJQSA9ICh1X2ludDMyKSgtKGludDMyKUEpOworCQkJQSA9ICgwVSAtIEEpOwogCQkJY29udGludWU7CiAKIAkJY2FzZSBCUEZfTUlTQ3xCUEZfVEFYOgpAQCAtMzk2LDEzICszODgsMTIgQEAKIH0KIAogdV9pbnQKLWJwZl9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYywgY29uc3QgdV9jaGFyICpwLCB1X2ludCB3aXJlbGVuLAorcGNhcF9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICpwYywgY29uc3QgdV9jaGFyICpwLCB1X2ludCB3aXJlbGVuLAogICAgIHVfaW50IGJ1ZmxlbikKIHsKLQlyZXR1cm4gYnBmX2ZpbHRlcl93aXRoX2F1eF9kYXRhKHBjLCBwLCB3aXJlbGVuLCBidWZsZW4sIE5VTEwpOworCXJldHVybiBwY2FwX2ZpbHRlcl93aXRoX2F1eF9kYXRhKHBjLCBwLCB3aXJlbGVuLCBidWZsZW4sIE5VTEwpOwogfQogCi0KIC8qCiAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgJ2Zjb2RlJyBpcyBhIHZhbGlkIGZpbHRlciBwcm9ncmFtLgogICogVGhlIGNvbnN0cmFpbnRzIGFyZSB0aGF0IGVhY2gganVtcCBiZSBmb3J3YXJkIGFuZCB0byBhIHZhbGlkCkBAIC00MTUsNyArNDA2LDcgQEAKICAqIE90aGVyd2lzZSwgYSBib2d1cyBwcm9ncmFtIGNvdWxkIGVhc2lseSBjcmFzaCB0aGUgc3lzdGVtLgogICovCiBpbnQKLWJwZl92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmYsIGludCBsZW4pCitwY2FwX3ZhbGlkYXRlX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmYsIGludCBsZW4pCiB7CiAJdV9pbnQgaSwgZnJvbTsKIAljb25zdCBzdHJ1Y3QgYnBmX2luc24gKnA7CkBAIC01MzcsMyArNTI4LDE5IEBACiAJfQogCXJldHVybiBCUEZfQ0xBU1MoZltsZW4gLSAxXS5jb2RlKSA9PSBCUEZfUkVUOwogfQorCisvKgorICogRXhwb3J0ZWQgYmVjYXVzZSBvbGRlciB2ZXJzaW9ucyBvZiBsaWJwY2FwIGV4cG9ydGVkIHRoZW0uCisgKi8KK3VfaW50CiticGZfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcGMsIGNvbnN0IHVfY2hhciAqcCwgdV9pbnQgd2lyZWxlbiwKKyAgICB1X2ludCBidWZsZW4pCit7CisJcmV0dXJuIHBjYXBfZmlsdGVyKHBjLCBwLCB3aXJlbGVuLCBidWZsZW4pOworfQorCitpbnQKK2JwZl92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmYsIGludCBsZW4pCit7CisJcmV0dXJuIHBjYXBfdmFsaWRhdGVfZmlsdGVyKGYsIGxlbik7Cit9CmRpZmYgLS1naXQgYS9icGZfaW1hZ2UuYyBiL2JwZl9pbWFnZS5jCmluZGV4IGFiNDFkMWUuLmU0OGM3NmQgMTAwNjQ0Ci0tLSBhL2JwZl9pbWFnZS5jCisrKyBiL2JwZl9pbWFnZS5jCkBAIC0yOCwxMiArMjgsMTA0IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAorI2lmZGVmIF9fbGludXhfXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaWZfcGFja2V0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlsdGVyLmg+CisKKy8qCisgKiBXZSB3YW50IG91ciB2ZXJzaW9ucyBvZiB0aGVzZSAjZGVmaW5lcywgbm90IExpbnV4J3MgdmVyc2lvbi4KKyAqIChUaGUgdHdvIHNob3VsZCBiZSB0aGUgc2FtZTsgaWYgbm90LCB3ZSBoYXZlIGEgcHJvYmxlbTsgYWxsIEJQRgorICogaW1wbGVtZW50YXRpb25zICpzaG91bGQqIGJlIHNvdXJjZS1jb21wYXRpYmxlIHN1cGVyc2V0cyBvZiBvdXJzLikKKyAqLworI3VuZGVmIEJQRl9TVE1UCisjdW5kZWYgQlBGX0pVTVAKKyNlbmRpZgorCiAjaW5jbHVkZSAicGNhcC1pbnQuaCIKIAogI2lmZGVmIEhBVkVfT1NfUFJPVE9fSAogI2luY2x1ZGUgIm9zLXByb3RvLmgiCiAjZW5kaWYKIAorI2lmZGVmIFNLRl9BRF9PRkYKKy8qCisgKiBTeW1ib2xpYyBuYW1lcyBmb3Igb2Zmc2V0cyB0aGF0IHJlZmVyIHRvIHRoZSBzcGVjaWFsIExpbnV4IEJQRiBsb2NhdGlvbnMuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpvZmZzZXRzW1NLRl9BRF9NQVhdID0geworI2lmZGVmIFNLRl9BRF9QUk9UT0NPTAorCVtTS0ZfQURfUFJPVE9DT0xdID0gInByb3RvIiwKKyNlbmRpZgorI2lmZGVmIFNLRl9BRF9QS1RUWVBFCisJW1NLRl9BRF9QS1RUWVBFXSA9ICJ0eXBlIiwKKyNlbmRpZgorI2lmZGVmIFNLRl9BRF9JRklOREVYCisJW1NLRl9BRF9JRklOREVYXSA9ICJpZmlkeCIsCisjZW5kaWYKKyNpZmRlZiBTS0ZfQURfTkxBVFRSCisJW1NLRl9BRF9OTEFUVFJdID0gIm5sYSIsCisjZW5kaWYKKyNpZmRlZiBTS0ZfQURfTkxBVFRSX05FU1QKKwlbU0tGX0FEX05MQVRUUl9ORVNUXSA9ICJubGFuIiwKKyNlbmRpZgorI2lmZGVmIFNLRl9BRF9NQVJLCisJW1NLRl9BRF9NQVJLXSA9ICJtYXJrIiwKKyNlbmRpZgorI2lmZGVmIFNLRl9BRF9RVUVVRQorCVtTS0ZfQURfUVVFVUVdID0gInF1ZXVlIiwKKyNlbmRpZgorI2lmZGVmIFNLRl9BRF9IQVRZUEUKKwlbU0tGX0FEX0hBVFlQRV0gPSAiaGF0eXBlIiwKKyNlbmRpZgorI2lmZGVmIFNLRl9BRF9SWEhBU0gKKwlbU0tGX0FEX1JYSEFTSF0gPSAicnhoYXNoIiwKKyNlbmRpZgorI2lmZGVmIFNLRl9BRF9DUFUKKwlbU0tGX0FEX0NQVV0gPSAiY3B1IiwKKyNlbmRpZgorI2lmZGVmIFNLRl9BRF9BTFVfWE9SX1gKKwlbU0tGX0FEX0FMVV9YT1JfWF0gPSAieG9yX3giLAorI2VuZGlmCisjaWZkZWYgU0tGX0FEX1ZMQU5fVEFHCisJW1NLRl9BRF9WTEFOX1RBR10gPSAidmxhbl90Y2kiLAorI2VuZGlmCisjaWZkZWYgU0tGX0FEX1ZMQU5fVEFHX1BSRVNFTlQKKwlbU0tGX0FEX1ZMQU5fVEFHX1BSRVNFTlRdID0gInZsYW5wIiwKKyNlbmRpZgorI2lmZGVmIFNLRl9BRF9QQVlfT0ZGU0VUCisJW1NLRl9BRF9QQVlfT0ZGU0VUXSA9ICJwb2ZmIiwKKyNlbmRpZgorI2lmZGVmIFNLRl9BRF9SQU5ET00KKwlbU0tGX0FEX1JBTkRPTV0gPSAicmFuZG9tIiwKKyNlbmRpZgorI2lmZGVmIFNLRl9BRF9WTEFOX1RQSUQKKwlbU0tGX0FEX1ZMQU5fVFBJRF0gPSAidmxhbl90cGlkIgorI2VuZGlmCit9OworI2VuZGlmCisKK3N0YXRpYyB2b2lkCiticGZfcHJpbnRfYWJzX2xvYWRfb3BlcmFuZChjaGFyICpidWYsIHNpemVfdCBidWZzaXplLCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnApCit7CisjaWZkZWYgU0tGX0FEX09GRgorCWNvbnN0IGNoYXIgKnN5bTsKKworCS8qCisJICogSXQncyBhbiBhYnNvbHV0ZSBsb2FkLgorCSAqIElzIHRoZSBvZmZzZXQgYSBzcGVjaWFsIExpbnV4IG9mZnNldCB0aGF0IHdlIGtub3cgYWJvdXQ/CisJICovCisJaWYgKHAtPmsgPj0gKGJwZl91X2ludDMyKVNLRl9BRF9PRkYgJiYKKwkgICAgcC0+ayA8IChicGZfdV9pbnQzMikoU0tGX0FEX09GRiArIFNLRl9BRF9NQVgpICYmCisJICAgIChzeW0gPSBvZmZzZXRzW3AtPmsgLSAoYnBmX3VfaW50MzIpU0tGX0FEX09GRl0pICE9IE5VTEwpIHsKKwkJLyoKKwkJICogWWVzLiAgUHJpbnQgdGhlIG9mZnNldCBzeW1ib2xpY2FsbHkuCisJCSAqLworCQkodm9pZClzbnByaW50ZihidWYsIGJ1ZnNpemUsICJbJXNdIiwgc3ltKTsKKwl9IGVsc2UKKyNlbmRpZgorCQkodm9pZClzbnByaW50ZihidWYsIGJ1ZnNpemUsICJbJWRdIiwgcC0+ayk7Cit9CisKIGNoYXIgKgogYnBmX2ltYWdlKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqcCwgaW50IG4pCiB7CkBAIC00NiwxMyArMTM4LDEzIEBACiAKIAlkZWZhdWx0OgogCQlvcCA9ICJ1bmltcCI7Ci0JCSh2b2lkKXBjYXBfc25wcmludGYob3BlcmFuZF9idWYsIHNpemVvZiBvcGVyYW5kX2J1ZiwgIjB4JXgiLCBwLT5jb2RlKTsKKwkJKHZvaWQpc25wcmludGYob3BlcmFuZF9idWYsIHNpemVvZiBvcGVyYW5kX2J1ZiwgIjB4JXgiLCBwLT5jb2RlKTsKIAkJb3BlcmFuZCA9IG9wZXJhbmRfYnVmOwogCQlicmVhazsKIAogCWNhc2UgQlBGX1JFVHxCUEZfSzoKIAkJb3AgPSAicmV0IjsKLQkJKHZvaWQpcGNhcF9zbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiIyVkIiwgcC0+ayk7CisJCSh2b2lkKXNucHJpbnRmKG9wZXJhbmRfYnVmLCBzaXplb2Ygb3BlcmFuZF9idWYsICIjJWQiLCBwLT5rKTsKIAkJb3BlcmFuZCA9IG9wZXJhbmRfYnVmOwogCQlicmVhazsKIApAQCAtNjMsMTkgKzE1NSwxOSBAQAogCiAJY2FzZSBCUEZfTER8QlBGX1d8QlBGX0FCUzoKIAkJb3AgPSAibGQiOwotCQkodm9pZClwY2FwX3NucHJpbnRmKG9wZXJhbmRfYnVmLCBzaXplb2Ygb3BlcmFuZF9idWYsICJbJWRdIiwgcC0+ayk7CisJCWJwZl9wcmludF9hYnNfbG9hZF9vcGVyYW5kKG9wZXJhbmRfYnVmLCBzaXplb2Ygb3BlcmFuZF9idWYsIHApOwogCQlvcGVyYW5kID0gb3BlcmFuZF9idWY7CiAJCWJyZWFrOwogCiAJY2FzZSBCUEZfTER8QlBGX0h8QlBGX0FCUzoKIAkJb3AgPSAibGRoIjsKLQkJKHZvaWQpcGNhcF9zbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiWyVkXSIsIHAtPmspOworCQlicGZfcHJpbnRfYWJzX2xvYWRfb3BlcmFuZChvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCBwKTsKIAkJb3BlcmFuZCA9IG9wZXJhbmRfYnVmOwogCQlicmVhazsKIAogCWNhc2UgQlBGX0xEfEJQRl9CfEJQRl9BQlM6CiAJCW9wID0gImxkYiI7Ci0JCSh2b2lkKXBjYXBfc25wcmludGYob3BlcmFuZF9idWYsIHNpemVvZiBvcGVyYW5kX2J1ZiwgIlslZF0iLCBwLT5rKTsKKwkJYnBmX3ByaW50X2Fic19sb2FkX29wZXJhbmQob3BlcmFuZF9idWYsIHNpemVvZiBvcGVyYW5kX2J1ZiwgcCk7CiAJCW9wZXJhbmQgPSBvcGVyYW5kX2J1ZjsKIAkJYnJlYWs7CiAKQEAgLTg2LDkxICsxNzgsOTEgQEAKIAogCWNhc2UgQlBGX0xEfEJQRl9XfEJQRl9JTkQ6CiAJCW9wID0gImxkIjsKLQkJKHZvaWQpcGNhcF9zbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiW3ggKyAlZF0iLCBwLT5rKTsKKwkJKHZvaWQpc25wcmludGYob3BlcmFuZF9idWYsIHNpemVvZiBvcGVyYW5kX2J1ZiwgIlt4ICsgJWRdIiwgcC0+ayk7CiAJCW9wZXJhbmQgPSBvcGVyYW5kX2J1ZjsKIAkJYnJlYWs7CiAKIAljYXNlIEJQRl9MRHxCUEZfSHxCUEZfSU5EOgogCQlvcCA9ICJsZGgiOwotCQkodm9pZClwY2FwX3NucHJpbnRmKG9wZXJhbmRfYnVmLCBzaXplb2Ygb3BlcmFuZF9idWYsICJbeCArICVkXSIsIHAtPmspOworCQkodm9pZClzbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiW3ggKyAlZF0iLCBwLT5rKTsKIAkJb3BlcmFuZCA9IG9wZXJhbmRfYnVmOwogCQlicmVhazsKIAogCWNhc2UgQlBGX0xEfEJQRl9CfEJQRl9JTkQ6CiAJCW9wID0gImxkYiI7Ci0JCSh2b2lkKXBjYXBfc25wcmludGYob3BlcmFuZF9idWYsIHNpemVvZiBvcGVyYW5kX2J1ZiwgIlt4ICsgJWRdIiwgcC0+ayk7CisJCSh2b2lkKXNucHJpbnRmKG9wZXJhbmRfYnVmLCBzaXplb2Ygb3BlcmFuZF9idWYsICJbeCArICVkXSIsIHAtPmspOwogCQlvcGVyYW5kID0gb3BlcmFuZF9idWY7CiAJCWJyZWFrOwogCiAJY2FzZSBCUEZfTER8QlBGX0lNTToKIAkJb3AgPSAibGQiOwotCQkodm9pZClwY2FwX3NucHJpbnRmKG9wZXJhbmRfYnVmLCBzaXplb2Ygb3BlcmFuZF9idWYsICIjMHgleCIsIHAtPmspOworCQkodm9pZClzbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiIzB4JXgiLCBwLT5rKTsKIAkJb3BlcmFuZCA9IG9wZXJhbmRfYnVmOwogCQlicmVhazsKIAogCWNhc2UgQlBGX0xEWHxCUEZfSU1NOgogCQlvcCA9ICJsZHgiOwotCQkodm9pZClwY2FwX3NucHJpbnRmKG9wZXJhbmRfYnVmLCBzaXplb2Ygb3BlcmFuZF9idWYsICIjMHgleCIsIHAtPmspOworCQkodm9pZClzbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiIzB4JXgiLCBwLT5rKTsKIAkJb3BlcmFuZCA9IG9wZXJhbmRfYnVmOwogCQlicmVhazsKIAogCWNhc2UgQlBGX0xEWHxCUEZfTVNIfEJQRl9COgogCQlvcCA9ICJsZHhiIjsKLQkJKHZvaWQpcGNhcF9zbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiNCooWyVkXSYweGYpIiwgcC0+ayk7CisJCSh2b2lkKXNucHJpbnRmKG9wZXJhbmRfYnVmLCBzaXplb2Ygb3BlcmFuZF9idWYsICI0KihbJWRdJjB4ZikiLCBwLT5rKTsKIAkJb3BlcmFuZCA9IG9wZXJhbmRfYnVmOwogCQlicmVhazsKIAogCWNhc2UgQlBGX0xEfEJQRl9NRU06CiAJCW9wID0gImxkIjsKLQkJKHZvaWQpcGNhcF9zbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiTVslZF0iLCBwLT5rKTsKKwkJKHZvaWQpc25wcmludGYob3BlcmFuZF9idWYsIHNpemVvZiBvcGVyYW5kX2J1ZiwgIk1bJWRdIiwgcC0+ayk7CiAJCW9wZXJhbmQgPSBvcGVyYW5kX2J1ZjsKIAkJYnJlYWs7CiAKIAljYXNlIEJQRl9MRFh8QlBGX01FTToKIAkJb3AgPSAibGR4IjsKLQkJKHZvaWQpcGNhcF9zbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiTVslZF0iLCBwLT5rKTsKKwkJKHZvaWQpc25wcmludGYob3BlcmFuZF9idWYsIHNpemVvZiBvcGVyYW5kX2J1ZiwgIk1bJWRdIiwgcC0+ayk7CiAJCW9wZXJhbmQgPSBvcGVyYW5kX2J1ZjsKIAkJYnJlYWs7CiAKIAljYXNlIEJQRl9TVDoKIAkJb3AgPSAic3QiOwotCQkodm9pZClwY2FwX3NucHJpbnRmKG9wZXJhbmRfYnVmLCBzaXplb2Ygb3BlcmFuZF9idWYsICJNWyVkXSIsIHAtPmspOworCQkodm9pZClzbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiTVslZF0iLCBwLT5rKTsKIAkJb3BlcmFuZCA9IG9wZXJhbmRfYnVmOwogCQlicmVhazsKIAogCWNhc2UgQlBGX1NUWDoKIAkJb3AgPSAic3R4IjsKLQkJKHZvaWQpcGNhcF9zbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiTVslZF0iLCBwLT5rKTsKKwkJKHZvaWQpc25wcmludGYob3BlcmFuZF9idWYsIHNpemVvZiBvcGVyYW5kX2J1ZiwgIk1bJWRdIiwgcC0+ayk7CiAJCW9wZXJhbmQgPSBvcGVyYW5kX2J1ZjsKIAkJYnJlYWs7CiAKIAljYXNlIEJQRl9KTVB8QlBGX0pBOgogCQlvcCA9ICJqYSI7Ci0JCSh2b2lkKXBjYXBfc25wcmludGYob3BlcmFuZF9idWYsIHNpemVvZiBvcGVyYW5kX2J1ZiwgIiVkIiwgbiArIDEgKyBwLT5rKTsKKwkJKHZvaWQpc25wcmludGYob3BlcmFuZF9idWYsIHNpemVvZiBvcGVyYW5kX2J1ZiwgIiVkIiwgbiArIDEgKyBwLT5rKTsKIAkJb3BlcmFuZCA9IG9wZXJhbmRfYnVmOwogCQlicmVhazsKIAogCWNhc2UgQlBGX0pNUHxCUEZfSkdUfEJQRl9LOgogCQlvcCA9ICJqZ3QiOwotCQkodm9pZClwY2FwX3NucHJpbnRmKG9wZXJhbmRfYnVmLCBzaXplb2Ygb3BlcmFuZF9idWYsICIjMHgleCIsIHAtPmspOworCQkodm9pZClzbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiIzB4JXgiLCBwLT5rKTsKIAkJb3BlcmFuZCA9IG9wZXJhbmRfYnVmOwogCQlicmVhazsKIAogCWNhc2UgQlBGX0pNUHxCUEZfSkdFfEJQRl9LOgogCQlvcCA9ICJqZ2UiOwotCQkodm9pZClwY2FwX3NucHJpbnRmKG9wZXJhbmRfYnVmLCBzaXplb2Ygb3BlcmFuZF9idWYsICIjMHgleCIsIHAtPmspOworCQkodm9pZClzbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiIzB4JXgiLCBwLT5rKTsKIAkJb3BlcmFuZCA9IG9wZXJhbmRfYnVmOwogCQlicmVhazsKIAogCWNhc2UgQlBGX0pNUHxCUEZfSkVRfEJQRl9LOgogCQlvcCA9ICJqZXEiOwotCQkodm9pZClwY2FwX3NucHJpbnRmKG9wZXJhbmRfYnVmLCBzaXplb2Ygb3BlcmFuZF9idWYsICIjMHgleCIsIHAtPmspOworCQkodm9pZClzbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiIzB4JXgiLCBwLT5rKTsKIAkJb3BlcmFuZCA9IG9wZXJhbmRfYnVmOwogCQlicmVhazsKIAogCWNhc2UgQlBGX0pNUHxCUEZfSlNFVHxCUEZfSzoKIAkJb3AgPSAianNldCI7Ci0JCSh2b2lkKXBjYXBfc25wcmludGYob3BlcmFuZF9idWYsIHNpemVvZiBvcGVyYW5kX2J1ZiwgIiMweCV4IiwgcC0+ayk7CisJCSh2b2lkKXNucHJpbnRmKG9wZXJhbmRfYnVmLCBzaXplb2Ygb3BlcmFuZF9idWYsICIjMHgleCIsIHAtPmspOwogCQlvcGVyYW5kID0gb3BlcmFuZF9idWY7CiAJCWJyZWFrOwogCkBAIC0yNDYsNjEgKzMzOCw2MSBAQAogCiAJY2FzZSBCUEZfQUxVfEJQRl9BRER8QlBGX0s6CiAJCW9wID0gImFkZCI7Ci0JCSh2b2lkKXBjYXBfc25wcmludGYob3BlcmFuZF9idWYsIHNpemVvZiBvcGVyYW5kX2J1ZiwgIiMlZCIsIHAtPmspOworCQkodm9pZClzbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiIyVkIiwgcC0+ayk7CiAJCW9wZXJhbmQgPSBvcGVyYW5kX2J1ZjsKIAkJYnJlYWs7CiAKIAljYXNlIEJQRl9BTFV8QlBGX1NVQnxCUEZfSzoKIAkJb3AgPSAic3ViIjsKLQkJKHZvaWQpcGNhcF9zbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiIyVkIiwgcC0+ayk7CisJCSh2b2lkKXNucHJpbnRmKG9wZXJhbmRfYnVmLCBzaXplb2Ygb3BlcmFuZF9idWYsICIjJWQiLCBwLT5rKTsKIAkJb3BlcmFuZCA9IG9wZXJhbmRfYnVmOwogCQlicmVhazsKIAogCWNhc2UgQlBGX0FMVXxCUEZfTVVMfEJQRl9LOgogCQlvcCA9ICJtdWwiOwotCQkodm9pZClwY2FwX3NucHJpbnRmKG9wZXJhbmRfYnVmLCBzaXplb2Ygb3BlcmFuZF9idWYsICIjJWQiLCBwLT5rKTsKKwkJKHZvaWQpc25wcmludGYob3BlcmFuZF9idWYsIHNpemVvZiBvcGVyYW5kX2J1ZiwgIiMlZCIsIHAtPmspOwogCQlvcGVyYW5kID0gb3BlcmFuZF9idWY7CiAJCWJyZWFrOwogCiAJY2FzZSBCUEZfQUxVfEJQRl9ESVZ8QlBGX0s6CiAJCW9wID0gImRpdiI7Ci0JCSh2b2lkKXBjYXBfc25wcmludGYob3BlcmFuZF9idWYsIHNpemVvZiBvcGVyYW5kX2J1ZiwgIiMlZCIsIHAtPmspOworCQkodm9pZClzbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiIyVkIiwgcC0+ayk7CiAJCW9wZXJhbmQgPSBvcGVyYW5kX2J1ZjsKIAkJYnJlYWs7CiAKIAljYXNlIEJQRl9BTFV8QlBGX01PRHxCUEZfSzoKIAkJb3AgPSAibW9kIjsKLQkJKHZvaWQpcGNhcF9zbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiIyVkIiwgcC0+ayk7CisJCSh2b2lkKXNucHJpbnRmKG9wZXJhbmRfYnVmLCBzaXplb2Ygb3BlcmFuZF9idWYsICIjJWQiLCBwLT5rKTsKIAkJb3BlcmFuZCA9IG9wZXJhbmRfYnVmOwogCQlicmVhazsKIAogCWNhc2UgQlBGX0FMVXxCUEZfQU5EfEJQRl9LOgogCQlvcCA9ICJhbmQiOwotCQkodm9pZClwY2FwX3NucHJpbnRmKG9wZXJhbmRfYnVmLCBzaXplb2Ygb3BlcmFuZF9idWYsICIjMHgleCIsIHAtPmspOworCQkodm9pZClzbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiIzB4JXgiLCBwLT5rKTsKIAkJb3BlcmFuZCA9IG9wZXJhbmRfYnVmOwogCQlicmVhazsKIAogCWNhc2UgQlBGX0FMVXxCUEZfT1J8QlBGX0s6CiAJCW9wID0gIm9yIjsKLQkJKHZvaWQpcGNhcF9zbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiIzB4JXgiLCBwLT5rKTsKKwkJKHZvaWQpc25wcmludGYob3BlcmFuZF9idWYsIHNpemVvZiBvcGVyYW5kX2J1ZiwgIiMweCV4IiwgcC0+ayk7CiAJCW9wZXJhbmQgPSBvcGVyYW5kX2J1ZjsKIAkJYnJlYWs7CiAKIAljYXNlIEJQRl9BTFV8QlBGX1hPUnxCUEZfSzoKIAkJb3AgPSAieG9yIjsKLQkJKHZvaWQpcGNhcF9zbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiIzB4JXgiLCBwLT5rKTsKKwkJKHZvaWQpc25wcmludGYob3BlcmFuZF9idWYsIHNpemVvZiBvcGVyYW5kX2J1ZiwgIiMweCV4IiwgcC0+ayk7CiAJCW9wZXJhbmQgPSBvcGVyYW5kX2J1ZjsKIAkJYnJlYWs7CiAKIAljYXNlIEJQRl9BTFV8QlBGX0xTSHxCUEZfSzoKIAkJb3AgPSAibHNoIjsKLQkJKHZvaWQpcGNhcF9zbnByaW50ZihvcGVyYW5kX2J1Ziwgc2l6ZW9mIG9wZXJhbmRfYnVmLCAiIyVkIiwgcC0+ayk7CisJCSh2b2lkKXNucHJpbnRmKG9wZXJhbmRfYnVmLCBzaXplb2Ygb3BlcmFuZF9idWYsICIjJWQiLCBwLT5rKTsKIAkJb3BlcmFuZCA9IG9wZXJhbmRfYnVmOwogCQlicmVhazsKIAogCWNhc2UgQlBGX0FMVXxCUEZfUlNIfEJQRl9LOgogCQlvcCA9ICJyc2giOwotCQkodm9pZClwY2FwX3NucHJpbnRmKG9wZXJhbmRfYnVmLCBzaXplb2Ygb3BlcmFuZF9idWYsICIjJWQiLCBwLT5rKTsKKwkJKHZvaWQpc25wcmludGYob3BlcmFuZF9idWYsIHNpemVvZiBvcGVyYW5kX2J1ZiwgIiMlZCIsIHAtPmspOwogCQlvcGVyYW5kID0gb3BlcmFuZF9idWY7CiAJCWJyZWFrOwogCkBAIC0zMjAsMTEgKzQxMiwxMSBAQAogCQlicmVhazsKIAl9CiAJaWYgKEJQRl9DTEFTUyhwLT5jb2RlKSA9PSBCUEZfSk1QICYmIEJQRl9PUChwLT5jb2RlKSAhPSBCUEZfSkEpIHsKLQkJKHZvaWQpcGNhcF9zbnByaW50ZihpbWFnZSwgc2l6ZW9mIGltYWdlLAorCQkodm9pZClzbnByaW50ZihpbWFnZSwgc2l6ZW9mIGltYWdlLAogCQkJICAgICAgIiglMDNkKSAlLThzICUtMTZzIGp0ICVkXHRqZiAlZCIsCiAJCQkgICAgICBuLCBvcCwgb3BlcmFuZCwgbiArIDEgKyBwLT5qdCwgbiArIDEgKyBwLT5qZik7CiAJfSBlbHNlIHsKLQkJKHZvaWQpcGNhcF9zbnByaW50ZihpbWFnZSwgc2l6ZW9mIGltYWdlLAorCQkodm9pZClzbnByaW50ZihpbWFnZSwgc2l6ZW9mIGltYWdlLAogCQkJICAgICAgIiglMDNkKSAlLThzICVzIiwKIAkJCSAgICAgIG4sIG9wLCBvcGVyYW5kKTsKIAl9CmRpZmYgLS1naXQgYS9jaGFyY29udi5jIGIvY2hhcmNvbnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWRlNTcyCi0tLSAvZGV2L251bGwKKysrIGIvY2hhcmNvbnYuYwpAQCAtMCwwICsxLDIxNiBAQAorLyogLSotIE1vZGU6IGM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogMTsgYy1iYXNpYy1vZmZzZXQ6IDg7IC0qLSAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIENvbXB1dGVyIFN5c3RlbXMKKyAqCUVuZ2luZWVyaW5nIEdyb3VwIGF0IExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciBvZiB0aGUgTGFib3JhdG9yeSBtYXkgYmUgdXNlZAorICogICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZmRlZiBfV0lOMzIKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8cGNhcC9wY2FwLmg+CS8qIE5lZWRlZCBmb3IgUENBUF9FUlJCVUZfU0laRSAqLworCisjaW5jbHVkZSAiY2hhcmNvbnYuaCIKKword2NoYXJfdCAqCitjcF90b191dGZfMTZsZShVSU5UIGNvZGVwYWdlLCBjb25zdCBjaGFyICpjcF9zdHJpbmcsIERXT1JEIGZsYWdzKQoreworCWludCB1dGYxNmxlX2xlbjsKKwl3Y2hhcl90ICp1dGYxNmxlX3N0cmluZzsKKworCS8qCisJICogTWFwIGZyb20gdGhlIHNwZWNpZmllZCBjb2RlIHBhZ2UgdG8gVVRGLTE2TEUuCisJICogRmlyc3QsIGZpbmQgb3V0IGhvdyBiaWcgYSBidWZmZXIgd2UnbGwgbmVlZC4KKwkgKi8KKwl1dGYxNmxlX2xlbiA9IE11bHRpQnl0ZVRvV2lkZUNoYXIoY29kZXBhZ2UsIGZsYWdzLCBjcF9zdHJpbmcsIC0xLAorCSAgICBOVUxMLCAwKTsKKwlpZiAodXRmMTZsZV9sZW4gPT0gMCkgeworCQkvKgorCQkgKiBFcnJvci4gIEZhaWwgd2l0aCBFSU5WQUwuCisJCSAqLworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwkvKgorCSAqIE5vdyBhdHRlbXB0IHRvIGFsbG9jYXRlIGEgYnVmZmVyIGZvciB0aGF0LgorCSAqLworCXV0ZjE2bGVfc3RyaW5nID0gbWFsbG9jKHV0ZjE2bGVfbGVuICogc2l6ZW9mICh3Y2hhcl90KSk7CisJaWYgKHV0ZjE2bGVfc3RyaW5nID09IE5VTEwpIHsKKwkJLyoKKwkJICogTm90IGVub3VnaCBtZW1vcnk7IGFzc3VtZSBlcnJubyBoYXMgYmVlbgorCQkgKiBzZXQsIGFuZCBmYWlsLgorCQkgKi8KKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwkvKgorCSAqIE5vdyBjb252ZXJ0LgorCSAqLworCXV0ZjE2bGVfbGVuID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihjb2RlcGFnZSwgZmxhZ3MsIGNwX3N0cmluZywgLTEsCisJICAgIHV0ZjE2bGVfc3RyaW5nLCB1dGYxNmxlX2xlbik7CisJaWYgKHV0ZjE2bGVfbGVuID09IDApIHsKKwkJLyoKKwkJICogRXJyb3IuICBGYWlsIHdpdGggRUlOVkFMLgorCQkgKiBYWFggLSBzaG91bGQgdGhpcyBldmVyIGhhcHBlbiwgZ2l2ZW4gdGhhdAorCQkgKiB3ZSBhbHJlYWR5IHJhbiB0aGUgc3RyaW5nIHRocm91Z2gKKwkJICogTXVsdGlCeXRlVG9XaWRlQ2hhcigpIHRvIGZpbmQgb3V0IGhvdyBiaWcKKwkJICogYSBidWZmZXIgd2UgbmVlZGVkPworCQkgKi8KKwkJZnJlZSh1dGYxNmxlX3N0cmluZyk7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlyZXR1cm4gKHV0ZjE2bGVfc3RyaW5nKTsKK30KKworY2hhciAqCit1dGZfMTZsZV90b19jcChVSU5UIGNvZGVwYWdlLCBjb25zdCB3Y2hhcl90ICp1dGYxNmxlX3N0cmluZykKK3sKKwlpbnQgY3BfbGVuOworCWNoYXIgKmNwX3N0cmluZzsKKworCS8qCisJICogTWFwIGZyb20gVVRGLTE2TEUgdG8gdGhlIHNwZWNpZmllZCBjb2RlIHBhZ2UuCisJICogRmlyc3QsIGZpbmQgb3V0IGhvdyBiaWcgYSBidWZmZXIgd2UnbGwgbmVlZC4KKwkgKiBXZSBjb252ZXJ0IGNvbXBvc2l0ZSBjaGFyYWN0ZXJzIHRvIHByZWNvbXBvc2VkIGNoYXJhY3RlcnMsCisJICogYXMgdGhhdCdzIHdoYXQgV2luZG93cyBleHBlY3RzLgorCSAqLworCWNwX2xlbiA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoY29kZXBhZ2UsIFdDX0NPTVBPU0lURUNIRUNLLAorCSAgICB1dGYxNmxlX3N0cmluZywgLTEsIE5VTEwsIDAsIE5VTEwsIE5VTEwpOworCWlmIChjcF9sZW4gPT0gMCkgeworCQkvKgorCQkgKiBFcnJvci4gIEZhaWwgd2l0aCBFSU5WQUwuCisJCSAqLworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwkvKgorCSAqIE5vdyBhdHRlbXB0IHRvIGFsbG9jYXRlIGEgYnVmZmVyIGZvciB0aGF0LgorCSAqLworCWNwX3N0cmluZyA9IG1hbGxvYyhjcF9sZW4gKiBzaXplb2YgKGNoYXIpKTsKKwlpZiAoY3Bfc3RyaW5nID09IE5VTEwpIHsKKwkJLyoKKwkJICogTm90IGVub3VnaCBtZW1vcnk7IGFzc3VtZSBlcnJubyBoYXMgYmVlbgorCQkgKiBzZXQsIGFuZCBmYWlsLgorCQkgKi8KKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwkvKgorCSAqIE5vdyBjb252ZXJ0LgorCSAqLworCWNwX2xlbiA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoY29kZXBhZ2UsIFdDX0NPTVBPU0lURUNIRUNLLAorCSAgICB1dGYxNmxlX3N0cmluZywgLTEsIGNwX3N0cmluZywgY3BfbGVuLCBOVUxMLCBOVUxMKTsKKwlpZiAoY3BfbGVuID09IDApIHsKKwkJLyoKKwkJICogRXJyb3IuICBGYWlsIHdpdGggRUlOVkFMLgorCQkgKiBYWFggLSBzaG91bGQgdGhpcyBldmVyIGhhcHBlbiwgZ2l2ZW4gdGhhdAorCQkgKiB3ZSBhbHJlYWR5IHJhbiB0aGUgc3RyaW5nIHRocm91Z2gKKwkJICogV2lkZUNoYXJUb011bHRpQnl0ZSgpIHRvIGZpbmQgb3V0IGhvdyBiaWcKKwkJICogYSBidWZmZXIgd2UgbmVlZGVkPworCQkgKi8KKwkJZnJlZShjcF9zdHJpbmcpOworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJcmV0dXJuIChjcF9zdHJpbmcpOworfQorCisvKgorICogQ29udmVydCBhbiBlcnJvciBtZXNzYWdlIHN0cmluZyBmcm9tIFVURi04IHRvIHRoZSBsb2NhbCBjb2RlIHBhZ2UsIGFzCisgKiBiZXN0IHdlIGNhbi4KKyAqCisgKiBUaGUgYnVmZmVyIGlzIGFzc3VtZWQgdG8gYmUgUENBUF9FUlJCVUZfU0laRSBieXRlcyBsb25nOyB3ZSB0cnVuY2F0ZQorICogaWYgaXQgZG9lc24ndCBmaXQuCisgKi8KK3ZvaWQKK3V0Zl84X3RvX2FjcF90cnVuY2F0ZWQoY2hhciAqZXJyYnVmKQoreworCXdjaGFyX3QgKnV0Zl8xNl9lcnJidWY7CisJaW50IHJldHZhbDsKKwlEV09SRCBlcnI7CisKKwkvKgorCSAqIERvIHRoaXMgYnkgY29udmVydGluZyB0byBVVEYtMTZMRSBhbmQgdGhlbiB0byB0aGUgbG9jYWwKKwkgKiBjb2RlIHBhZ2UuICBUaGF0IG1lYW5zIHdlIGdldCB0byB1c2UgTWljcm9zb2Z0J3MKKwkgKiBjb252ZXJzaW9uIHJvdXRpbmVzLCByYXRoZXIgdGhhbiBoYXZpbmcgdG8gdW5kZXJzdGFuZAorCSAqIGFsbCB0aGUgY29kZSBwYWdlcyBvdXJzZWx2ZXMsICphbmQqIHRoYXQgdGhpcyByb3V0aW5lCisJICogY2FuIGNvbnZlcnQgaW4gcGxhY2UuCisJICovCisKKwkvKgorCSAqIE1hcCBmcm9tIFVURi04IHRvIFVURi0xNkxFLgorCSAqIEZpcnN0LCBmaW5kIG91dCBob3cgYmlnIGEgYnVmZmVyIHdlJ2xsIG5lZWQuCisJICogQ29udmVydCBhbnkgaW52YWxpZCBjaGFyYWN0ZXJzIHRvIFJFUExBQ0VNRU5UIENIQVJBQ1RFUi4KKwkgKi8KKwl1dGZfMTZfZXJyYnVmID0gY3BfdG9fdXRmXzE2bGUoQ1BfVVRGOCwgZXJyYnVmLCAwKTsKKwlpZiAodXRmXzE2X2VycmJ1ZiA9PSBOVUxMKSB7CisJCS8qCisJCSAqIEVycm9yLiAgR2l2ZSB1cC4KKwkJICovCisJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJICAgICJDYW4ndCBjb252ZXJ0IGVycm9yIHN0cmluZyB0byB0aGUgbG9jYWwgY29kZSBwYWdlIik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIE5vdywgY29udmVydCB0aGF0IHRvIHRoZSBsb2NhbCBjb2RlIHBhZ2UuCisJICogVXNlIHRoZSBjdXJyZW50IHRocmVhZCdzIGNvZGUgcGFnZS4gIEZvciB1bmNvbnZlcnRhYmxlCisJICogY2hhcmFjdGVycywgbGV0IGl0IHBpY2sgdGhlICJiZXN0IGZpdCIgY2hhcmFjdGVyLgorCSAqCisJICogWFhYIC0gd2UnZCBsaWtlIHNvbWUgd2F5IHRvIGRvIHdoYXQgdXRmXzE2bGVfdG9fdXRmXzhfdHJ1bmNhdGVkKCkKKwkgKiBkb2VzIGlmIHRoZSBidWZmZXIgaXNuJ3QgYmlnIGVub3VnaCwgYnV0IHdlIGRvbid0IHdhbnQgdG8gaGF2ZQorCSAqIHRvIGhhbmRsZSBhbGwgbG9jYWwgY29kZSBwYWdlcyBvdXJzZWx2ZXM7IGRvaW5nIHNvIHJlcXVpcmVzCisJICoga25vd2xlZGdlIG9mIGFsbCB0aG9zZSBjb2RlIHBhZ2VzLCBpbmNsdWRpbmcga25vd2xlZGdlIG9mIGhvdworCSAqIGNoYXJhY3RlcnMgYXJlIGZvcm1lZCBpbiB0aG9lIGNvZGUgcGFnZXMgc28gdGhhdCB3ZSBjYW4gYXZvaWQKKwkgKiBjdXR0aW5nIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgaW50byBwaWVjZXMuCisJICoKKwkgKiBDb252ZXJ0aW5nIHRvIGFuIHVuLXRydW5jYXRlZCBzdHJpbmcgdXNpbmcgV2luZG93cyBBUElzLCBhbmQKKwkgKiB0aGVuIGNvcHlpbmcgdG8gdGhlIGJ1ZmZlciwgc3RpbGwgcmVxdWlyZXMga25vd2xlZGdlIG9mIGhvdworCSAqIGNoYXJhY3RlcnMgYXJlIGZvcm1lZCBpbiB0aGUgdGFyZ2V0IGNvZGUgcGFnZS4KKwkgKi8KKwlyZXR2YWwgPSBXaWRlQ2hhclRvTXVsdGlCeXRlKENQX1RIUkVBRF9BQ1AsIDAsIHV0Zl8xNl9lcnJidWYsIC0xLAorCSAgICBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsIE5VTEwsIE5VTEwpOworCWlmIChyZXR2YWwgPT0gMCkgeworCQllcnIgPSBHZXRMYXN0RXJyb3IoKTsKKwkJZnJlZSh1dGZfMTZfZXJyYnVmKTsKKwkJaWYgKGVyciA9PSBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSKQorCQkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJICAgICJUaGUgZXJyb3Igc3RyaW5nLCBpbiB0aGUgbG9jYWwgY29kZSBwYWdlLCBkaWRuJ3QgZml0IGluIHRoZSBidWZmZXIiKTsKKwkJZWxzZQorCQkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJICAgICJDYW4ndCBjb252ZXJ0IGVycm9yIHN0cmluZyB0byB0aGUgbG9jYWwgY29kZSBwYWdlIik7CisJCXJldHVybjsKKwl9CisJZnJlZSh1dGZfMTZfZXJyYnVmKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2hhcmNvbnYuaCBiL2NoYXJjb252LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM3ZDQyNAotLS0gL2Rldi9udWxsCisrKyBiL2NoYXJjb252LmgKQEAgLTAsMCArMSw0NCBAQAorLyogLSotIE1vZGU6IGM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogMTsgYy1iYXNpYy1vZmZzZXQ6IDg7IC0qLSAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIENvbXB1dGVyIFN5c3RlbXMKKyAqCUVuZ2luZWVyaW5nIEdyb3VwIGF0IExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciBvZiB0aGUgTGFib3JhdG9yeSBtYXkgYmUgdXNlZAorICogICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgY2hhcm9udl9oCisjZGVmaW5lIGNoYXJvbnZfaAorCisjaWZkZWYgX1dJTjMyCitleHRlcm4gd2NoYXJfdCAqY3BfdG9fdXRmXzE2bGUoVUlOVCBjb2RlcGFnZSwgY29uc3QgY2hhciAqY3Bfc3RyaW5nLCBEV09SRCBmbGFncyk7CitleHRlcm4gY2hhciAqdXRmXzE2bGVfdG9fY3AoVUlOVCBjb2RlcGFnZSwgY29uc3Qgd2NoYXJfdCAqdXRmMTZsZV9zdHJpbmcpOworZXh0ZXJuIHZvaWQgdXRmXzhfdG9fYWNwX3RydW5jYXRlZChjaGFyICopOworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY21ha2UvTW9kdWxlcy9GaW5kQWlyUGNhcC5jbWFrZSBiL2NtYWtlL01vZHVsZXMvRmluZEFpclBjYXAuY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE5OGY3MAotLS0gL2Rldi9udWxsCisrKyBiL2NtYWtlL01vZHVsZXMvRmluZEFpclBjYXAuY21ha2UKQEAgLTAsMCArMSw2OSBAQAorIworIyBGaW5kQWlyUGNhcAorIyA9PT09PT09PT09CisjCisjIEZpbmQgdGhlIEFpclBjYXAgbGlicmFyeSBhbmQgaW5jbHVkZSBmaWxlcy4KKyMKKyMgVGhpcyBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKyMKKyMgQUlSUENBUF9JTkNMVURFX0RJUiAgICAgLSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBhaXJwY2FwLmguCisjCisjIEFJUlBDQVBfTElCUkFSWSAgICAgICAgIC0gcmVsYXRpdmUgb3IgYWJzb2x1dGUgcGF0aCB0byB0aGUgQWlyUGNhcCBsaWJyYXJ5IHRvCisjICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rIHdpdGguIEFuIGFic29sdXRlIHBhdGggaXMgd2lsbCBiZSB1c2VkIGlmIHRoZQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgQWlyUGNhcCBsaWJyYXJ5IGlzIG5vdCBsb2NhdGVkIGluIHRoZSBjb21waWxlcidzCisjICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IHNlYXJjaCBwYXRoLgorCisjIEFJUlBDQVBfRk9VTkQgICAgICAgICAgIC0gVFJVRSBpZiB0aGUgQWlyUGNhcCBsaWJyYXJ5ICphbmQqIGhlYWRlciBhcmUgZm91bmQuCisjCisjIEhpbnRzIGFuZCBCYWNrd2FyZCBDb21wYXRpYmlsaXR5CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFRvIHRlbGwgdGhpcyBtb2R1bGUgd2hlcmUgdG8gbG9vaywgYSB1c2VyIG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCisjIEFpclBjYXBfUk9PVCB0byBwb2ludCBjbWFrZSB0byB0aGUgKnJvb3QqIG9mIGEgZGlyZWN0b3J5IHdpdGggaW5jbHVkZSBhbmQKKyMgbGliIHN1YmRpcmVjdG9yaWVzIGZvciBhaXJwY2FwLmRsbCAoZS5nIEFpcnBjYXBfRGV2cGFjaykuCisjIEFsdGVybmF0aXZlbHksIEFpclBjYXBfUk9PVCBtYXkgYWxzbyBiZSBzZXQgZnJvbSB0aGUgQ01ha2UgY29tbWFuZAorIyBsaW5lIG9yIEdVSSAoZS5nIGNtYWtlIC1EQWlyUGNhcF9ST09UPUM6XHBhdGhcdG9cYWlycGNhcF9zZGsgWy4uLl0pCisjCisKKyMgVGhlIDY0LWJpdCBhaXJwY2FwLmxpYiBpcyBsb2NhdGVkIHVuZGVyIC94NjQKK2lmKENNQUtFX1NJWkVPRl9WT0lEX1AgRVFVQUwgOCkKKyAgIworICAjIEZvciB0aGUgV2luUGNhcCBhbmQgTnBjYXAgU0RLcywgdGhlIExpYiBzdWJkaXJlY3Rvcnkgb2YgdGhlIHRvcC1sZXZlbAorICAjIGRpcmVjdG9yeSBjb250YWlucyAzMi1iaXQgbGlicmFyaWVzOyB0aGUgNjQtYml0IGxpYnJhcmllcyBhcmUgaW4gdGhlCisgICMgTGliL3g2NCBkaXJlY3RvcnkuCisgICMKKyAgIyBUaGUgb25seSB3YXkgdG8gKkZPUkNFKiBDTWFrZSB0byBsb29rIGluIHRoZSBMaWIveDY0IGRpcmVjdG9yeQorICAjIHdpdGhvdXQgc2VhcmNoaW5nIGluIHRoZSBMaWIgZGlyZWN0b3J5IGZpcnN0IGFwcGVhcnMgdG8gYmUgdG8gc2V0CisgICMgQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUgdG8gIng2NCIuCisgICMKKyAgIyBJbiBuZXdlciB2ZXJzaW9ucyBvZiBDTWFrZSwgQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUgaXMgc2V0IGFjY29yZGluZyB0bworICAjIHRoZSBsYW5ndWFnZSwgZS5nLiwgQ01BS0VfPExBTkc+X0xJQlJBUllfQVJDSElURUNUVVJFLiBTbywgc2V0IHRoZSBuZXcKKyAgIyB2YXJpYWJsZSwgQ01BS0VfQ19MSUJSQVJZX0FSQ0hJVEVDVFVSRSwgc28gdGhhdCBDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRQorICAjIGluaGVyaXRzIHRoZSBjb3JyZWN0IHZhbHVlLgorICAjCisgIHNldChDTUFLRV9DX0xJQlJBUllfQVJDSElURUNUVVJFICJ4NjQiKQorICBzZXQoQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUgIng2NCIpCitlbmRpZigpCisKKyMgRmluZCB0aGUgaGVhZGVyCitmaW5kX3BhdGgoQUlSUENBUF9JTkNMVURFX0RJUiBhaXJwY2FwLmgKKyAgUEFUSF9TVUZGSVhFUyBpbmNsdWRlCispCisKKyMgRmluZCB0aGUgbGlicmFyeQorZmluZF9saWJyYXJ5KEFJUlBDQVBfTElCUkFSWQorICBOQU1FUyBhaXJwY2FwCispCisKKyMgU2V0IEFJUlBDQVBfRk9VTkQgdG8gVFJVRSBpZiBBSVJQQ0FQX0lOQ0xVREVfRElSIGFuZCBBSVJQQ0FQX0xJQlJBUlkgYXJlIFRSVUUuCitpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKEFJUlBDQVAKKyAgREVGQVVMVF9NU0cKKyAgQUlSUENBUF9JTkNMVURFX0RJUgorICBBSVJQQ0FQX0xJQlJBUlkKKykKKworbWFya19hc19hZHZhbmNlZChBSVJQQ0FQX0lOQ0xVREVfRElSIEFJUlBDQVBfTElCUkFSWSkKKworc2V0KEFJUlBDQVBfSU5DTFVERV9ESVJTICR7QUlSUENBUF9JTkNMVURFX0RJUn0pCitzZXQoQUlSUENBUF9MSUJSQVJJRVMgJHtBSVJQQ0FQX0xJQlJBUll9KQpkaWZmIC0tZ2l0IGEvY21ha2UvTW9kdWxlcy9GaW5kUGFja2V0LmNtYWtlIGIvY21ha2UvTW9kdWxlcy9GaW5kUGFja2V0LmNtYWtlCmluZGV4IDEzMTFjZGIuLjkwMGM4ZTMgMTAwNjQ0Ci0tLSBhL2NtYWtlL01vZHVsZXMvRmluZFBhY2tldC5jbWFrZQorKysgYi9jbWFrZS9Nb2R1bGVzL0ZpbmRQYWNrZXQuY21ha2UKQEAgLTMzLDggKzMzLDcgQEAKICMgUEFDS0VUX0xJQlJBUlkgICAgICAgICAtIHJlbGF0aXZlIG9yIGFic29sdXRlIHBhdGggdG8gdGhlIFBhY2tldCBsaWJyYXJ5IHRvCiAjICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rIHdpdGguIEFuIGFic29sdXRlIHBhdGggaXMgd2lsbCBiZSB1c2VkIGlmIHRoZQogIyAgICAgICAgICAgICAgICAgICAgICAgICAgUGFja2V0IGxpYnJhcnkgaXMgbm90IGxvY2F0ZWQgaW4gdGhlIGNvbXBpbGVyJ3MKLSMgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgc2VhcmNoIHBhdGguIFNlZSBlLmcuIFBBQ0tFVF9ETExfRElSCi0jICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBiZWxvdy4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgc2VhcmNoIHBhdGguCiAKICMgUEFDS0VUX0ZPVU5EICAgICAgICAgICAtIFRSVUUgaWYgdGhlIFBhY2tldCBsaWJyYXJ5ICphbmQqIGhlYWRlciBhcmUgZm91bmQuCiAjCkBAIC00MiwyOSArNDEsNDAgQEAKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMKICMgVG8gdGVsbCB0aGlzIG1vZHVsZSB3aGVyZSB0byBsb29rLCBhIHVzZXIgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKLSMgUEFDS0VUX0RMTF9ESVIgdG8gcG9pbnQgY21ha2UgdG8gdGhlICpyb290KiBvZiBhIGRpcmVjdG9yeSB3aXRoIGluY2x1ZGUgYW5kCi0jIGxpYiBzdWJkaXJlY3RvcmllcyBmb3IgcGFja2V0LmRsbCAoZS5nIFdwZFBhY2svbnBjYXAtc2RrKS4KLSMgQWx0ZXJuYXRpdmVseSwgUEFDS0VUX0RMTF9ESVIgbWF5IGFsc28gYmUgc2V0IGZyb20gY21ha2UgY29tbWFuZCBsaW5lIG9yIEdVSQotIyAoZS5nIGNtYWtlIC1EUEFDS0VUX0RMTF9ESVI9L3BhdGgvdG8vcGFja2V0IFsuLi5dKQorIyBQYWNrZXRfUk9PVCB0byBwb2ludCBjbWFrZSB0byB0aGUgKnJvb3QqIG9mIGEgZGlyZWN0b3J5IHdpdGggaW5jbHVkZSBhbmQKKyMgbGliIHN1YmRpcmVjdG9yaWVzIGZvciBwYWNrZXQuZGxsIChlLmcgV3BkUGFjayBvciBucGNhcC1zZGspLgorIyBBbHRlcm5hdGl2ZWx5LCBQYWNrZXRfUk9PVCBtYXkgYWxzbyBiZSBzZXQgZnJvbSBjbWFrZSBjb21tYW5kIGxpbmUgb3IgR1VJCisjIChlLmcgY21ha2UgLURQYWNrZXRfUk9PVD1DOlxwYXRoXHRvXHBhY2tldCBbLi4uXSkKICMKIAogIyBUaGUgNjQtYml0IFBhY2tldC5saWIgaXMgbG9jYXRlZCB1bmRlciAveDY0Ci1zZXQoNjRCSVRfU1VCRElSICIiKQogaWYoQ01BS0VfU0laRU9GX1ZPSURfUCBFUVVBTCA4KQotICBzZXQoNjRCSVRfU1VCRElSICIveDY0IikKKyAgIworICAjIEZvciB0aGUgV2luUGNhcCBhbmQgTnBjYXAgU0RLcywgdGhlIExpYiBzdWJkaXJlY3Rvcnkgb2YgdGhlIHRvcC1sZXZlbAorICAjIGRpcmVjdG9yeSBjb250YWlucyAzMi1iaXQgbGlicmFyaWVzOyB0aGUgNjQtYml0IGxpYnJhcmllcyBhcmUgaW4gdGhlCisgICMgTGliL3g2NCBkaXJlY3RvcnkuCisgICMKKyAgIyBUaGUgb25seSB3YXkgdG8gKkZPUkNFKiBDTWFrZSB0byBsb29rIGluIHRoZSBMaWIveDY0IGRpcmVjdG9yeQorICAjIHdpdGhvdXQgc2VhcmNoaW5nIGluIHRoZSBMaWIgZGlyZWN0b3J5IGZpcnN0IGFwcGVhcnMgdG8gYmUgdG8gc2V0CisgICMgQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUgdG8gIng2NCIuCisgICMKKyAgIyBJbiBuZXdlciB2ZXJzaW9ucyBvZiBDTWFrZSwgQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUgaXMgc2V0IGFjY29yZGluZyB0bworICAjIHRoZSBsYW5ndWFnZSwgZS5nLiwgQ01BS0VfPExBTkc+X0xJQlJBUllfQVJDSElURUNUVVJFLiBTbywgc2V0IHRoZSBuZXcKKyAgIyB2YXJpYWJsZSwgQ01BS0VfQ19MSUJSQVJZX0FSQ0hJVEVDVFVSRSwgc28gdGhhdCBDTUFLRV9MSUJSQVJZX0FSQ0hJVEVDVFVSRQorICAjIGluaGVyaXRzIHRoZSBjb3JyZWN0IHZhbHVlLgorICAjCisgIHNldChDTUFLRV9DX0xJQlJBUllfQVJDSElURUNUVVJFICJ4NjQiKQorICBzZXQoQ01BS0VfTElCUkFSWV9BUkNISVRFQ1RVUkUgIng2NCIpCiBlbmRpZigpCiAKICMgRmluZCB0aGUgaGVhZGVyCiBmaW5kX3BhdGgoUEFDS0VUX0lOQ0xVREVfRElSIFBhY2tldDMyLmgKLSAgSElOVFMgIiR7UEFDS0VUX0RMTF9ESVJ9IiBFTlYgUEFDS0VUX0RMTF9ESVIKICAgUEFUSF9TVUZGSVhFUyBpbmNsdWRlIEluY2x1ZGUKICkKIAogIyBGaW5kIHRoZSBsaWJyYXJ5CiBmaW5kX2xpYnJhcnkoUEFDS0VUX0xJQlJBUlkKICAgTkFNRVMgUGFja2V0IHBhY2tldAotICBISU5UUyAiJHtQQUNLRVRfRExMX0RJUn0iIEVOViBQQUNLRVRfRExMX0RJUgotICBQQVRIX1NVRkZJWEVTIExpYiR7NjRCSVRfU1VCRElSfSBsaWIkezY0QklUX1NVQkRJUn0KICkKIAogIyBTZXQgUEFDS0VUX0ZPVU5EIHRvIFRSVUUgaWYgUEFDS0VUX0lOQ0xVREVfRElSIGFuZCBQQUNLRVRfTElCUkFSWSBhcmUgVFJVRS4KZGlmZiAtLWdpdCBhL2NtYWtlL01vZHVsZXMvRmluZGRwZGsuY21ha2UgYi9jbWFrZS9Nb2R1bGVzL0ZpbmRkcGRrLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZWFmZDkKLS0tIC9kZXYvbnVsbAorKysgYi9jbWFrZS9Nb2R1bGVzL0ZpbmRkcGRrLmNtYWtlCkBAIC0wLDAgKzEsMTIzIEBACisjIFRyeSB0byBmaW5kIGRwZGsKKyMKKyMgT25jZSBkb25lLCB0aGlzIHdpbGwgZGVmaW5lCisjCisjIGRwZGtfRk9VTkQKKyMgZHBka19JTkNMVURFX0RJUlMKKyMgZHBka19MSUJSQVJJRVMKKworaWYoUEtHX0NPTkZJR19GT1VORCkKKyAgcGtnX2NoZWNrX21vZHVsZXMoZHBkayBRVUlFVCBsaWJkcGRrKQorZW5kaWYoKQorbWVzc2FnZShTVEFUVVMgIkV4ZWN1dGluZyBGaW5kZHBkayIpCitpZihOT1QgZHBka19JTkNMVURFX0RJUlMpCisgIG1lc3NhZ2UoU1RBVFVTICJFeGVjdXRpbmcgZmluZF9wYXRoIikKKyAgZmluZF9wYXRoKGRwZGtfY29uZmlnX0lOQ0xVREVfRElSIHJ0ZV9jb25maWcuaAorICAgIEhJTlRTCisgICAgICBFTlYgRFBES19ESVIKKyAgICBQQVRIX1NVRkZJWEVTCisgICAgICBkcGRrCisgICAgICBpbmNsdWRlCispCisgIGZpbmRfcGF0aChkcGRrX2NvbW1vbl9JTkNMVURFX0RJUiBydGVfY29tbW9uLmgKKyAgICBISU5UUworICAgICAgRU5DIERQREtfRElSCisgICAgUEFUSF9TVUZGSVhFUworICAgICAgZHBkaworICAgICAgaW5jbHVkZQorKQorICBzZXQoZHBka19JTkNMVURFX0RJUlMgIiR7ZHBka19jb25maWdfSU5DTFVERV9ESVJ9IikKKyAgaWYoTk9UIGRwZGtfY29uZmlnX0lOQ0xVREVfRElSIEVRVUFMIGRwZGtfY29tbW9uX0lOQ0xVREVfRElSKQorICAgIGxpc3QoQVBQRU5EIGRwZGtfSU5DTFVERV9ESVJTICIke2RwZGtfY29tbW9uX0lOQ0xVREVfRElSfSIpCisgIGVuZGlmKCkKKworICBzZXQoY29tcG9uZW50cworICAgIGJ1c19wY2kKKyAgICBjbWRsaW5lCisgICAgZWFsCisgICAgZXRoZGV2CisgICAgaGFzaAorICAgIGt2YXJncworICAgIG1idWYKKyAgICBtZW1wb29sCisgICAgbWVtcG9vbF9yaW5nCisgICAgbWVtcG9vbF9zdGFjaworICAgIHBjaQorICAgIHBtZF9hZl9wYWNrZXQKKyAgICBwbWRfYm9uZAorICAgIHBtZF9pNDBlCisgICAgcG1kX2l4Z2JlCisgICAgcG1kX21seDUKKyAgICBwbWRfcmluZworICAgIHBtZF92bXhuZXQzX3VpbworICAgIHJpbmcpCisKKyAgc2V0KGRwZGtfTElCUkFSSUVTKQorCisgIGZvcmVhY2goYyAke2NvbXBvbmVudHN9KQorICAgIGZpbmRfbGlicmFyeShEUERLX3J0ZV8ke2N9X0xJQlJBUlkgcnRlXyR7Y30KKyAgICAgIEhJTlRTCisgICAgICAgIEVOViBEUERLX0RJUgorICAgICAgICAke2RwZGtfTElCUkFSWV9ESVJTfQorICAgICAgUEFUSF9TVUZGSVhFUyBsaWIpCisgICAgaWYoRFBES19ydGVfJHtjfV9MSUJSQVJZKQorICAgICAgc2V0KGRwZGtfbGliIGRwZGs6OiR7Y30pCisgICAgICBpZiAoTk9UIFRBUkdFVCAke2RwZGtfbGlifSkKKyAgICAgICAgYWRkX2xpYnJhcnkoJHtkcGRrX2xpYn0gVU5LTk9XTiBJTVBPUlRFRCkKKyAgICAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7ZHBka19saWJ9IFBST1BFUlRJRVMKKyAgICAgICAgICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtkcGRrX0lOQ0xVREVfRElSU30iCisgICAgICAgICAgSU1QT1JURURfTE9DQVRJT04gIiR7RFBES19ydGVfJHtjfV9MSUJSQVJZfSIpCisgICAgICAgIGlmKGMgU1RSRVFVQUwgcG1kX21seDUpCisgICAgICAgICAgZmluZF9wYWNrYWdlKHZlcmJzIFFVSUVUKQorICAgICAgICAgIGlmKHZlcmJzX0ZPVU5EKQorICAgICAgICAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7ZHBka19saWJ9IElOVEVSRkFDRSBJQlZlcmJzOjp2ZXJicykKKyAgICAgICAgICBlbmRpZigpCisgICAgICAgIGVuZGlmKCkKKyAgICAgIGVuZGlmKCkKKyAgICAgIGxpc3QoQVBQRU5EIGRwZGtfTElCUkFSSUVTICR7ZHBka19saWJ9KQorICAgIGVuZGlmKCkKKyAgZW5kZm9yZWFjaCgpCisKKyAgIworICAjIFdoZXJlIHRoZSBoZWNrIGRpZCB0aGlzIGxpc3QgY29tZSBmcm9tPyAgbGliZHBkayBvbiBVYnVudHUgMjAuMDQsCisgICMgZm9yIGV4YW1wbGUsIGRvZXNuJ3QgZXZlbiAqaGF2ZSogLWxkcGRrOyB0aGF0J3Mgd2h5IHdlIGdvIHdpdGgKKyAgIyBwa2ctY29uZmlnLCBpbiB0aGUgaG9wZXMgdGhhdCBpdCBwcm92aWRlcyBhIGNvcnJlY3Qgc2V0IG9mIGZsYWdzCisgICMgZm9yIHRoaXMgdGFuZ2xlZCBtZXNzLgorICAjCisgIGxpc3QoQVBQRU5EIGRwZGtfTElCUkFSSUVTIGRwZGsgcnQgbSBudW1vIGRsKQorZW5kaWYoKQorCittYXJrX2FzX2FkdmFuY2VkKGRwZGtfSU5DTFVERV9ESVJTICR7ZHBka19MSUJSQVJJRVN9KQorCitpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorZmluZF9wYWNrYWdlX2hhbmRsZV9zdGFuZGFyZF9hcmdzKGRwZGsgREVGQVVMVF9NU0cKKyAgZHBka19JTkNMVURFX0RJUlMKKyAgZHBka19MSUJSQVJJRVMpCisKK2lmKGRwZGtfRk9VTkQpCisgIGlmKE5PVCBUQVJHRVQgZHBkazo6Y2ZsYWdzKQorICAgICBpZihDTUFLRV9TWVNURU1fUFJPQ0VTU09SIE1BVENIRVMgImFtZDY0fHg4Nl82NHxBTUQ2NCIpCisgICAgICBzZXQocnRlX2NmbGFncyAiLW1hcmNoPWNvcmUyIikKKyAgICBlbHNlaWYoQ01BS0VfU1lTVEVNX1BST0NFU1NPUiBNQVRDSEVTICJhcm18QVJNIikKKyAgICAgIHNldChydGVfY2ZsYWdzICItbWFyY2g9YXJtdjctYSIpCisgICAgZWxzZWlmKENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgTUFUQ0hFUyAiYWFyY2g2NHxBQVJDSDY0IikKKyAgICAgIHNldChydGVfY2ZsYWdzICItbWFyY2g9YXJtdjgtYStjcmMiKQorICAgIGVuZGlmKCkKKyAgICBhZGRfbGlicmFyeShkcGRrOjpjZmxhZ3MgSU5URVJGQUNFIElNUE9SVEVEKQorICAgIGlmIChydGVfY2ZsYWdzKQorICAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGRwZGs6OmNmbGFncyBQUk9QRVJUSUVTCisgICAgICAgIElOVEVSRkFDRV9DT01QSUxFX09QVElPTlMgIiR7cnRlX2NmbGFnc30iKQorICAgIGVuZGlmKCkKKyAgZW5kaWYoKQorCisgIGlmKE5PVCBUQVJHRVQgZHBkazo6ZHBkaykKKyAgICBhZGRfbGlicmFyeShkcGRrOjpkcGRrIElOVEVSRkFDRSBJTVBPUlRFRCkKKyAgICBmaW5kX3BhY2thZ2UoVGhyZWFkcyBRVUlFVCkKKyAgICBsaXN0KEFQUEVORCBkcGRrX0xJQlJBUklFUworICAgICAgVGhyZWFkczo6VGhyZWFkcworICAgICAgZHBkazo6Y2ZsYWdzKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhkcGRrOjpkcGRrIFBST1BFUlRJRVMKKyAgICAgIElOVEVSRkFDRV9MSU5LX0xJQlJBUklFUyAiJHtkcGRrX0xJQlJBUklFU30iCisgICAgICBJTlRFUkZBQ0VfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtkcGRrX0lOQ0xVREVfRElSU30iKQorICBlbmRpZigpCitlbmRpZigpCmRpZmYgLS1naXQgYS9jbWFrZWNvbmZpZy5oLmluIGIvY21ha2Vjb25maWcuaC5pbgppbmRleCA2NzYwY2VjLi4xOTIyMDljIDEwMDY0NAotLS0gYS9jbWFrZWNvbmZpZy5oLmluCisrKyBiL2NtYWtlY29uZmlnLmguaW4KQEAgLTE1LDYgKzE1LDE1IEBACiAvKiBkZWZpbmUgaWYgd2UgaGF2ZSB0aGUgQUlYIGdldHByb3RvYnluYW1lX3IoKSAqLwogI2NtYWtlZGVmaW5lIEhBVkVfQUlYX0dFVFBST1RPQllOQU1FX1IgMQogCisvKiBkZWZpbmUgaWYgeW91IGhhdmUgdGhlIEFpclBjYXAgQVBJICovCisjY21ha2VkZWZpbmUgSEFWRV9BSVJQQ0FQX0FQSSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYXNwcmludGYnIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfQVNQUklOVEYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGNvbmZpZy9IYWlrdUNvbmZpZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0NPTkZJR19IQUlLVUNPTkZJR19IIDEKKwogLyogZGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBEQUcgQVBJICovCiAjY21ha2VkZWZpbmUgSEFWRV9EQUdfQVBJIDEKIApAQCAtNDgsNiArNTcsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRzcG5hbScgZnVuY3Rpb24uICovCiAjY21ha2VkZWZpbmUgSEFWRV9HRVRTUE5BTSAxCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgR05VLXN0eWxlIGBzdHJlcnJvcl9yJyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX0dOVV9TVFJFUlJPUl9SIDEKKwogLyogb24gSFAtVVggMTAuMjAgb3IgbGF0ZXIgKi8KICNjbWFrZWRlZmluZSBIQVZFX0hQVVgxMF8yMF9PUl9MQVRFUiAxCiAKQEAgLTYzLDQ1ICs3NSwyMSBAQAogLyogaWYgbGlibmwgZXhpc3RzICovCiAjY21ha2VkZWZpbmUgSEFWRV9MSUJOTCAxCiAKLS8qIGlmIGxpYm5sIGV4aXN0cyBhbmQgaXMgdmVyc2lvbiAyLnggKi8KLSNjbWFrZWRlZmluZSBIQVZFX0xJQk5MXzJfeCAxCi0KLS8qIGlmIGxpYm5sIGV4aXN0cyBhbmQgaXMgdmVyc2lvbiAzLnggKi8KLSNjbWFrZWRlZmluZSBIQVZFX0xJQk5MXzNfeCAxCi0KLS8qIGxpYm5sIGhhcyBOTEVfRkFJTFVSRSAqLwotI2NtYWtlZGVmaW5lIEhBVkVfTElCTkxfTkxFIDEKLQotLyogbGlibmwgaGFzIG5ldy1zdHlsZSBzb2NrZXQgYXBpICovCi0jY21ha2VkZWZpbmUgSEFWRV9MSUJOTF9TT0NLRVRTIDEKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW1pdHMuaD4gaGVhZGVyIGZpbGUuICovCi0jY21ha2VkZWZpbmUgSEFWRV9MSU1JVFNfSCAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvY29tcGlsZXIuaD4gaGVhZGVyIGZpbGUuICovCiAjY21ha2VkZWZpbmUgSEFWRV9MSU5VWF9DT01QSUxFUl9IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9ldGh0b29sLmg+IGhlYWRlciBmaWxlLiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfTElOVVhfRVRIVE9PTF9IIDEKLQogLyogZGVmaW5lIGlmIHdlIGhhdmUgdGhlIExpbnV4IGdldG5ldGJ5bmFtZV9yKCkgKi8KICNjbWFrZWRlZmluZSBIQVZFX0xJTlVYX0dFVE5FVEJZTkFNRV9SIDEKIAogLyogZGVmaW5lIGlmIHdlIGhhdmUgdGhlIExpbnV4IGdldHByb3RvYnluYW1lX3IoKSAqLwogI2NtYWtlZGVmaW5lIEhBVkVfTElOVVhfR0VUUFJPVE9CWU5BTUVfUiAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvaWZfYm9uZGluZy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNjbWFrZWRlZmluZSBIQVZFX0xJTlVYX0lGX0JPTkRJTkdfSCAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvbmV0X3RzdGFtcC5oPiBoZWFkZXIgZmlsZS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX0xJTlVYX05FVF9UU1RBTVBfSCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfTElOVVhfU09DS0VUX0ggMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L3NvY2tpb3MuaD4gaGVhZGVyIGZpbGUuICovCi0jY21ha2VkZWZpbmUgSEFWRV9MSU5VWF9TT0NLSU9TX0ggMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L3VzYmRldmljZV9mcy5oPiBoZWFkZXIgZmlsZS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX0xJTlVYX1VTQkRFVklDRV9GU19IIDEKIApAQCAtMTM1LDEyICsxMjMsMjEgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0L3Jhdy5oPiBoZWFkZXIgZmlsZS4gKi8KICNjbWFrZWRlZmluZSBIQVZFX05FVF9SQVdfSCAxCiAKKy8qIFVzZSBPcGVuU1NMICovCisjY21ha2VkZWZpbmUgSEFWRV9PUEVOU1NMIDEKKwogLyogaWYgdGhlcmUncyBhbiBvc19wcm90by5oIGZvciB0aGlzIHBsYXRmb3JtLCB0byB1c2UgYWRkaXRpb25hbCBwcm90b3R5cGVzICovCiAjY21ha2VkZWZpbmUgSEFWRV9PU19QUk9UT19IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgUGFja2V0MzIgQVBJIChXaW5QY2FwIE5QRiBkcml2ZXIpIGlzIGF2YWlsYWJsZSAqLworLyogRGVmaW5lIHRvIDEgaWYgUGFja2V0MzIgQVBJIChOcGNhcCBkcml2ZXIpIGlzIGF2YWlsYWJsZSAqLwogI2NtYWtlZGVmaW5lIEhBVkVfUEFDS0VUMzIgMQogCisvKiBEZWZpbmUgdG8gMSBpZiBOUGNhcCdzIHZlcnNpb24uaCBpcyBhdmFpbGFibGUgKi8KKyNjbWFrZWRlZmluZSBIQVZFX1ZFUlNJT05fSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGEgUE9TSVgtc3R5bGUgYHN0cmVycm9yX3InIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfUE9TSVhfU1RSRVJST1JfUiAxCisKIC8qIGRlZmluZSBpZiBuZXQvcGZ2YXIuaCBkZWZpbmVzIFBGX05BVCB0aHJvdWdoIFBGX05PUkRSICovCiAjY21ha2VkZWZpbmUgSEFWRV9QRl9OQVRfVEhST1VHSF9QRl9OT1JEUiAxCiAKQEAgLTE3NCwxMiArMTcxLDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZXJyb3InIGZ1bmN0aW9uLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfU1RSRVJST1IgMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmVycm9yX3InIGZ1bmN0aW9uLiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfU1RSRVJST1JfUiAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZXJyb3JfcycgZnVuY3Rpb24uICovCi0jY21ha2VkZWZpbmUgSEFWRV9TVFJFUlJPUl9TIDEKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKIApAQCAtMjA3LDYgKzE5OCw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiBgbXNnX2ZsYWdzJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IG1zZ2hkcicuICovCiAjY21ha2VkZWZpbmUgSEFWRV9TVFJVQ1RfTVNHSERSX01TR19GTEFHUyAxCiAKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBzdHJ1Y3QgcnRlX2V0aGVyX2FkZHInLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfU1RSVUNUX1JURV9FVEhFUl9BRERSIDEKKwogLyogRGVmaW5lIHRvIDEgaWYgYGhjaV9jaGFubmVsJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHNvY2thZGRyX2hjaScuICovCiAjY21ha2VkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfSENJX0hDSV9DSEFOTkVMIDEKIApAQCAtMjE5LDkgKzIxMyw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiBgdHBfdmxhbl90Y2knIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgdHBhY2tldF9hdXhkYXRhJy4gKi8KICNjbWFrZWRlZmluZSBIQVZFX1NUUlVDVF9UUEFDS0VUX0FVWERBVEFfVFBfVkxBTl9UQ0kgMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgc3RydWN0IHRwYWNrZXRfc3RhdHMnLiAqLwotI2NtYWtlZGVmaW5lIEhBVkVfU1RSVUNUX1RQQUNLRVRfU1RBVFMgMQotCiAvKiBEZWZpbmUgdG8gMSBpZiBgYlJlcXVlc3RUeXBlJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0CiAgICB1c2JkZXZmc19jdHJsdHJhbnNmZXInLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfU1RSVUNUX1VTQkRFVkZTX0NUUkxUUkFOU0ZFUl9CUkVRVUVTVFRZUEUgMQpAQCAtMjU2LDE4ICsyNDcsMjcgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLwogI2NtYWtlZGVmaW5lIEhBVkVfVU5JU1REX0ggMQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHZhc3ByaW50ZicgZnVuY3Rpb24uICovCisjY21ha2VkZWZpbmUgSEFWRV9WQVNQUklOVEYgMQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHZzbnByaW50ZicgZnVuY3Rpb24uICovCiAjY21ha2VkZWZpbmUgSEFWRV9WU05QUklOVEYgMQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHZzeXNsb2cnIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfVlNZU0xPRyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX3djc2Vycm9yX3MnIGZ1bmN0aW9uLiAqLworI2NtYWtlZGVmaW5lIEhBVkVfX1dDU0VSUk9SX1MgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYFBhY2tldEdldFRpbWVzdGFtcE1vZGVzJyBmdW5jdGlvbi4gKi8KKyNjbWFrZWRlZmluZSBIQVZFX1BBQ0tFVF9HRVRfVElNRVNUQU1QX01PREVTIDEKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBQYWNrZXRJc0xvb3BiYWNrQWRhcHRlcicgZnVuY3Rpb24uICovCiAjY21ha2VkZWZpbmUgSEFWRV9QQUNLRVRfSVNfTE9PUEJBQ0tfQURBUFRFUiAxCiAKIC8qIElQdjYgKi8KICNjbWFrZWRlZmluZSBJTkVUNiAxCiAKLS8qIGlmIHVuYWxpZ25lZCBhY2Nlc3MgZmFpbHMgKi8KLSNjbWFrZWRlZmluZSBMQkxfQUxJR04gMQotCiAvKiBwYXRoIGZvciBkZXZpY2UgZm9yIFVTQiBzbmlmZmluZyAqLwogI2NtYWtlZGVmaW5lIExJTlVYX1VTQl9NT05fREVWICJATElOVVhfVVNCX01PTl9ERVZAIgogCkBAIC0yODYsNyArMjg2LDcgQEAKIC8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLwogI2NtYWtlZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUIDEKIAotLyogRGVmaW5lIHRvIHRoZSBETEwtcHJlZmVycmVkIHZlcnNpb24gc3RyaW5nIG9mIG9mIHRoaXMgcGFja2FnZS4gKi8KKy8qIERlZmluZSB0byB0aGUgRExMLXByZWZlcnJlZCB2ZXJzaW9uIHN0cmluZyBvZiB0aGlzIHBhY2thZ2UuICovCiAjY21ha2VkZWZpbmUgUEFDS0FHRV9WRVJTSU9OX0RMTCBAUEFDS0FHRV9WRVJTSU9OX0RMTEAKIAogLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLwpAQCAtMzEzLDI0ICszMTMsMjEgQEAKIC8qIHN1cHBvcnQgRC1CdXMgc25pZmZpbmcgKi8KICNjbWFrZWRlZmluZSBQQ0FQX1NVUFBPUlRfREJVUyAxCiAKKy8qIHRhcmdldCBob3N0IHN1cHBvcnRzIERQREsgKi8KKyNjbWFrZWRlZmluZSBQQ0FQX1NVUFBPUlRfRFBESyAxCisKKy8qIHRhcmdldCBob3N0IHN1cHBvcnRzIExpbnV4IHVzYm1vbiBmb3IgVVNCIHNuaWZmaW5nICovCisjY21ha2VkZWZpbmUgUENBUF9TVVBQT1JUX0xJTlVYX1VTQk1PTiAxCisKIC8qIHRhcmdldCBob3N0IHN1cHBvcnRzIG5ldGZpbHRlciBzbmlmZmluZyAqLwogI2NtYWtlZGVmaW5lIFBDQVBfU1VQUE9SVF9ORVRGSUxURVIgMQogCiAvKiB0YXJnZXQgaG9zdCBzdXBwb3J0cyBuZXRtYXAgKi8KICNjbWFrZWRlZmluZSBQQ0FQX1NVUFBPUlRfTkVUTUFQIDEKIAotLyogdXNlIHBhY2tldCByaW5nIGNhcHR1cmUgc3VwcG9ydCBvbiBMaW51eCBpZiBhdmFpbGFibGUgKi8KLSNjbWFrZWRlZmluZSBQQ0FQX1NVUFBPUlRfUEFDS0VUX1JJTkcgMQotCiAvKiB0YXJnZXQgaG9zdCBzdXBwb3J0cyBSRE1BIHNuaWZmaW5nICovCiAjY21ha2VkZWZpbmUgUENBUF9TVVBQT1JUX1JETUFTTklGRiAxCiAKLS8qIHRhcmdldCBob3N0IHN1cHBvcnRzIFVTQiBzbmlmZmluZyAqLwotI2NtYWtlZGVmaW5lIFBDQVBfU1VQUE9SVF9VU0IgMQotCi0vKiBpbmNsdWRlIEFDTiBzdXBwb3J0ICovCi0jY21ha2VkZWZpbmUgU0lUQSAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLwogI2NtYWtlZGVmaW5lIFNURENfSEVBREVSUyAxCiAKZGlmZiAtLWdpdCBhL2NvbmZpZy5ndWVzcyBiL2NvbmZpZy5ndWVzcwppbmRleCAyYjc5ZjZkLi43Zjc0ODE3IDEwMDc1NQotLS0gYS9jb25maWcuZ3Vlc3MKKysrIGIvY29uZmlnLmd1ZXNzCkBAIC0xLDggKzEsOCBAQAogIyEgL2Jpbi9zaAogIyBBdHRlbXB0IHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lLgotIyAgIENvcHlyaWdodCAxOTkyLTIwMTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgQ29weXJpZ2h0IDE5OTItMjAyMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotdGltZXN0YW1wPScyMDE4LTA3LTA2JwordGltZXN0YW1wPScyMDIwLTEyLTIyJwogCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yNywxMiArMjcsMTIgQEAKICMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyOyBtYWludGFpbmVkIHNpbmNlIDIwMDAgYnkgQmVuIEVsbGlzdG9uLgogIwogIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3JpcHQgZnJvbToKLSMgaHR0cHM6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuZ3Vlc3MKKyMgaHR0cHM6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L2NvbmZpZy5naXQvcGxhaW4vY29uZmlnLmd1ZXNzCiAjCiAjIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LgogCiAKLW1lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorbWU9JChlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnKQogCiB1c2FnZT0iXAogVXNhZ2U6ICQwIFtPUFRJT05dCkBAIC01MCw3ICs1MCw3IEBACiBHTlUgY29uZmlnLmd1ZXNzICgkdGltZXN0YW1wKQogCiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCi1Db3B5cmlnaHQgMTk5Mi0yMDE4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorQ29weXJpZ2h0IDE5OTItMjAyMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKQEAgLTg0LDggKzg0LDYgQEAKICAgZXhpdCAxCiBmaQogCi10cmFwICdleGl0IDEnIDEgMiAxNQotCiAjIENDX0ZPUl9CVUlMRCAtLSBjb21waWxlciB1c2VkIGJ5IHRoaXMgc2NyaXB0LiBOb3RlIHRoYXQgdGhlIHVzZSBvZiBhCiAjIGNvbXBpbGVyIHRvIGFpZCBpbiBzeXN0ZW0gZGV0ZWN0aW9uIGlzIGRpc2NvdXJhZ2VkIGFzIGl0IHJlcXVpcmVzCiAjIHRlbXBvcmFyeSBmaWxlcyB0byBiZSBjcmVhdGVkIGFuZCwgYXMgeW91IGNhbiBzZWUgYmVsb3csIGl0IGlzIGEKQEAgLTk2LDY2ICs5NCw4MiBAQAogCiAjIFBvcnRhYmxlIHRtcCBkaXJlY3RvcnkgY3JlYXRpb24gaW5zcGlyZWQgYnkgdGhlIEF1dG9jb25mIHRlYW0uCiAKLXNldF9jY19mb3JfYnVpbGQ9JwotdHJhcCAiZXhpdGNvZGU9XCQ/OyAocm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGwpICYmIGV4aXQgXCRleGl0Y29kZSIgMCA7Ci10cmFwICJybSAtZiBcJHRtcGZpbGVzIDI+L2Rldi9udWxsOyBybWRpciBcJHRtcCAyPi9kZXYvbnVsbDsgZXhpdCAxIiAxIDIgMTMgMTUgOwotOiAke1RNUERJUj0vdG1wfSA7Ci0geyB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kICIkVE1QRElSL2NnWFhYWFhYIikgMj4vZGV2L251bGxgICYmIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiIDsgfSB8fAotIHsgdGVzdCAtbiAiJFJBTkRPTSIgJiYgdG1wPSRUTVBESVIvY2ckJC0kUkFORE9NICYmICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCAyPi9kZXYvbnVsbCkgOyB9IHx8Ci0geyB0bXA9JFRNUERJUi9jZy0kJCAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXAgMj4vZGV2L251bGwpICYmIGVjaG8gIldhcm5pbmc6IGNyZWF0aW5nIGluc2VjdXJlIHRlbXAgZGlyZWN0b3J5IiA+JjIgOyB9IHx8Ci0geyBlY2hvICIkbWU6IGNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluICRUTVBESVIiID4mMiA7IGV4aXQgMSA7IH0gOwotZHVtbXk9JHRtcC9kdW1teSA7Ci10bXBmaWxlcz0iJGR1bW15LmMgJGR1bW15Lm8gJGR1bW15LnJlbCAkZHVtbXkiIDsKLWNhc2UgJHtDQ19GT1JfQlVJTEQtfSwke0hPU1RfQ0MtfSwke0NDLX0gaW4KLSAsLCkgICAgZWNobyAiaW50IHg7IiA+ICIkZHVtbXkuYyIgOwotCWZvciBjIGluIGNjIGdjYyBjODkgYzk5IDsgZG8KLQkgIGlmICgkYyAtYyAtbyAiJGR1bW15Lm8iICIkZHVtbXkuYyIpID4vZGV2L251bGwgMj4mMSA7IHRoZW4KLQkgICAgIENDX0ZPUl9CVUlMRD0iJGMiOyBicmVhayA7Ci0JICBmaSA7Ci0JZG9uZSA7Ci0JaWYgdGVzdCB4IiRDQ19GT1JfQlVJTEQiID0geCA7IHRoZW4KLQkgIENDX0ZPUl9CVUlMRD1ub19jb21waWxlcl9mb3VuZCA7Ci0JZmkKLQk7OwotICwsKikgICBDQ19GT1JfQlVJTEQ9JENDIDs7Ci0gLCosKikgIENDX0ZPUl9CVUlMRD0kSE9TVF9DQyA7OwotZXNhYyA7IHNldF9jY19mb3JfYnVpbGQ9IDsnCit0bXA9CisjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIxNzIKK3RyYXAgJ3Rlc3QgLXogIiR0bXAiIHx8IHJtIC1mciAiJHRtcCInIDAgMSAyIDEzIDE1CisKK3NldF9jY19mb3JfYnVpbGQoKSB7CisgICAgIyBwcmV2ZW50IG11bHRpcGxlIGNhbGxzIGlmICR0bXAgaXMgYWxyZWFkeSBzZXQKKyAgICB0ZXN0ICIkdG1wIiAmJiByZXR1cm4gMAorICAgIDogIiR7VE1QRElSPS90bXB9IgorICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjAzOQorICAgIHsgdG1wPSQoICh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kICIkVE1QRElSL2NnWFhYWFhYIikgMj4vZGV2L251bGwpICYmIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiIDsgfSB8fAorCXsgdGVzdCAtbiAiJFJBTkRPTSIgJiYgdG1wPSRUTVBESVIvY2ckJC0kUkFORE9NICYmICh1bWFzayAwNzcgJiYgbWtkaXIgIiR0bXAiIDI+L2Rldi9udWxsKSA7IH0gfHwKKwl7IHRtcD0kVE1QRElSL2NnLSQkICYmICh1bWFzayAwNzcgJiYgbWtkaXIgIiR0bXAiIDI+L2Rldi9udWxsKSAmJiBlY2hvICJXYXJuaW5nOiBjcmVhdGluZyBpbnNlY3VyZSB0ZW1wIGRpcmVjdG9yeSIgPiYyIDsgfSB8fAorCXsgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAkVE1QRElSIiA+JjIgOyBleGl0IDEgOyB9CisgICAgZHVtbXk9JHRtcC9kdW1teQorICAgIGNhc2UgJHtDQ19GT1JfQlVJTEQtfSwke0hPU1RfQ0MtfSwke0NDLX0gaW4KKwksLCkgICAgZWNobyAiaW50IHg7IiA+ICIkZHVtbXkuYyIKKwkgICAgICAgZm9yIGRyaXZlciBpbiBjYyBnY2MgYzg5IGM5OSA7IGRvCisJCSAgIGlmICgkZHJpdmVyIC1jIC1vICIkZHVtbXkubyIgIiRkdW1teS5jIikgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCQkgICAgICAgQ0NfRk9SX0JVSUxEPSIkZHJpdmVyIgorCQkgICAgICAgYnJlYWsKKwkJICAgZmkKKwkgICAgICAgZG9uZQorCSAgICAgICBpZiB0ZXN0IHgiJENDX0ZPUl9CVUlMRCIgPSB4IDsgdGhlbgorCQkgICBDQ19GT1JfQlVJTEQ9bm9fY29tcGlsZXJfZm91bmQKKwkgICAgICAgZmkKKwkgICAgICAgOzsKKwksLCopICAgQ0NfRk9SX0JVSUxEPSRDQyA7OworCSwqLCopICBDQ19GT1JfQlVJTEQ9JEhPU1RfQ0MgOzsKKyAgICBlc2FjCit9CiAKICMgVGhpcyBpcyBuZWVkZWQgdG8gZmluZCB1bmFtZSBvbiBhIFB5cmFtaWQgT1N4IHdoZW4gcnVuIGluIHRoZSBCU0QgdW5pdmVyc2UuCiAjIChnaGF6aUBub2MucnV0Z2Vycy5lZHUgMTk5NC0wOC0yNCkKLWlmICh0ZXN0IC1mIC8uYXR0YmluL3VuYW1lKSA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCitpZiB0ZXN0IC1mIC8uYXR0YmluL3VuYW1lIDsgdGhlbgogCVBBVEg9JFBBVEg6Ly5hdHRiaW4gOyBleHBvcnQgUEFUSAogZmkKIAotVU5BTUVfTUFDSElORT1gKHVuYW1lIC1tKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfTUFDSElORT11bmtub3duCi1VTkFNRV9SRUxFQVNFPWAodW5hbWUgLXIpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9SRUxFQVNFPXVua25vd24KLVVOQU1FX1NZU1RFTT1gKHVuYW1lIC1zKSAyPi9kZXYvbnVsbGAgIHx8IFVOQU1FX1NZU1RFTT11bmtub3duCi1VTkFNRV9WRVJTSU9OPWAodW5hbWUgLXYpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9WRVJTSU9OPXVua25vd24KK1VOQU1FX01BQ0hJTkU9JCggKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCkgfHwgVU5BTUVfTUFDSElORT11bmtub3duCitVTkFNRV9SRUxFQVNFPSQoICh1bmFtZSAtcikgMj4vZGV2L251bGwpIHx8IFVOQU1FX1JFTEVBU0U9dW5rbm93bgorVU5BTUVfU1lTVEVNPSQoICh1bmFtZSAtcykgMj4vZGV2L251bGwpIHx8IFVOQU1FX1NZU1RFTT11bmtub3duCitVTkFNRV9WRVJTSU9OPSQoICh1bmFtZSAtdikgMj4vZGV2L251bGwpIHx8IFVOQU1FX1ZFUlNJT049dW5rbm93bgogCiBjYXNlICIkVU5BTUVfU1lTVEVNIiBpbgogTGludXh8R05VfEdOVS8qKQotCSMgSWYgdGhlIHN5c3RlbSBsYWNrcyBhIGNvbXBpbGVyLCB0aGVuIGp1c3QgcGljayBnbGliYy4KLQkjIFdlIGNvdWxkIHByb2JhYmx5IHRyeSBoYXJkZXIuCi0JTElCQz1nbnUKKwlMSUJDPXVua25vd24KIAotCWV2YWwgIiRzZXRfY2NfZm9yX2J1aWxkIgorCXNldF9jY19mb3JfYnVpbGQKIAljYXQgPDwtRU9GID4gIiRkdW1teS5jIgogCSNpbmNsdWRlIDxmZWF0dXJlcy5oPgogCSNpZiBkZWZpbmVkKF9fVUNMSUJDX18pCiAJTElCQz11Y2xpYmMKIAkjZWxpZiBkZWZpbmVkKF9fZGlldGxpYmNfXykKIAlMSUJDPWRpZXRsaWJjCi0JI2Vsc2UKKwkjZWxpZiBkZWZpbmVkKF9fR0xJQkNfXykKIAlMSUJDPWdudQorCSNlbHNlCisJI2luY2x1ZGUgPHN0ZGFyZy5oPgorCS8qIEZpcnN0IGhldXJpc3RpYyB0byBkZXRlY3QgbXVzbCBsaWJjLiAgKi8KKwkjaWZkZWYgX19ERUZJTkVEX3ZhX2xpc3QKKwlMSUJDPW11c2wKKwkjZW5kaWYKIAkjZW5kaWYKIAlFT0YKLQlldmFsICJgJENDX0ZPUl9CVUlMRCAtRSAiJGR1bW15LmMiIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkxJQkMnIHwgc2VkICdzLCAsLGcnYCIKKwlldmFsICIkKCRDQ19GT1JfQlVJTEQgLUUgIiRkdW1teS5jIiAyPi9kZXYvbnVsbCB8IGdyZXAgJ15MSUJDJyB8IHNlZCAncywgLCxnJykiCiAKLQkjIElmIGxkZCBleGlzdHMsIHVzZSBpdCB0byBkZXRlY3QgbXVzbCBsaWJjLgotCWlmIGNvbW1hbmQgLXYgbGRkID4vZGV2L251bGwgJiYgXAotCQlsZGQgLS12ZXJzaW9uIDI+JjEgfCBncmVwIC1xIF5tdXNsCi0JdGhlbgotCSAgICBMSUJDPW11c2wKKwkjIFNlY29uZCBoZXVyaXN0aWMgdG8gZGV0ZWN0IG11c2wgbGliYy4KKwlpZiBbICIkTElCQyIgPSB1bmtub3duIF0gJiYKKwkgICBjb21tYW5kIC12IGxkZCA+L2Rldi9udWxsICYmCisJICAgbGRkIC0tdmVyc2lvbiAyPiYxIHwgZ3JlcCAtcSBebXVzbDsgdGhlbgorCQlMSUJDPW11c2wKKwlmaQorCisJIyBJZiB0aGUgc3lzdGVtIGxhY2tzIGEgY29tcGlsZXIsIHRoZW4ganVzdCBwaWNrIGdsaWJjLgorCSMgV2UgY291bGQgcHJvYmFibHkgdHJ5IGhhcmRlci4KKwlpZiBbICIkTElCQyIgPSB1bmtub3duIF07IHRoZW4KKwkJTElCQz1nbnUKIAlmaQogCTs7CiBlc2FjCkBAIC0xNzUsMTkgKzE4OSwyMCBAQAogCSMgTm90ZTogTmV0QlNEIGRvZXNuJ3QgcGFydGljdWxhcmx5IGNhcmUgYWJvdXQgdGhlIHZlbmRvcgogCSMgcG9ydGlvbiBvZiB0aGUgbmFtZS4gIFdlIGFsd2F5cyBzZXQgaXQgdG8gInVua25vd24iLgogCXN5c2N0bD0ic3lzY3RsIC1uIGh3Lm1hY2hpbmVfYXJjaCIKLQlVTkFNRV9NQUNISU5FX0FSQ0g9YCh1bmFtZSAtcCAyPi9kZXYvbnVsbCB8fCBcCisJVU5BTUVfTUFDSElORV9BUkNIPSQoICh1bmFtZSAtcCAyPi9kZXYvbnVsbCB8fCBcCiAJICAgICIvc2Jpbi8kc3lzY3RsIiAyPi9kZXYvbnVsbCB8fCBcCiAJICAgICIvdXNyL3NiaW4vJHN5c2N0bCIgMj4vZGV2L251bGwgfHwgXAotCSAgICBlY2hvIHVua25vd24pYAorCSAgICBlY2hvIHVua25vd24pKQogCWNhc2UgIiRVTkFNRV9NQUNISU5FX0FSQ0giIGluCisJICAgIGFhcmNoNjRlYikgbWFjaGluZT1hYXJjaDY0X2JlLXVua25vd24gOzsKIAkgICAgYXJtZWIpIG1hY2hpbmU9YXJtZWItdW5rbm93biA7OwogCSAgICBhcm0qKSBtYWNoaW5lPWFybS11bmtub3duIDs7CiAJICAgIHNoM2VsKSBtYWNoaW5lPXNobC11bmtub3duIDs7CiAJICAgIHNoM2ViKSBtYWNoaW5lPXNoLXVua25vd24gOzsKIAkgICAgc2g1ZWwpIG1hY2hpbmU9c2g1bGUtdW5rbm93biA7OwogCSAgICBlYXJtdiopCi0JCWFyY2g9YGVjaG8gIiRVTkFNRV9NQUNISU5FX0FSQ0giIHwgc2VkIC1lICdzLF5lXChhcm12WzAtOV1cKS4qJCxcMSwnYAotCQllbmRpYW49YGVjaG8gIiRVTkFNRV9NQUNISU5FX0FSQ0giIHwgc2VkIC1uZSAncyxeLipcKGViXCkkLFwxLHAnYAorCQlhcmNoPSQoZWNobyAiJFVOQU1FX01BQ0hJTkVfQVJDSCIgfCBzZWQgLWUgJ3MsXmVcKGFybXZbMC05XVwpLiokLFwxLCcpCisJCWVuZGlhbj0kKGVjaG8gIiRVTkFNRV9NQUNISU5FX0FSQ0giIHwgc2VkIC1uZSAncyxeLipcKGViXCkkLFwxLHAnKQogCQltYWNoaW5lPSIke2FyY2h9JHtlbmRpYW59Ii11bmtub3duCiAJCTs7CiAJICAgICopIG1hY2hpbmU9IiRVTkFNRV9NQUNISU5FX0FSQ0giLXVua25vd24gOzsKQEAgLTE5OSw3ICsyMTQsNyBAQAogCQlvcz1uZXRic2RlbGYKIAkJOzsKIAkgICAgYXJtKnxpMzg2fG02OGt8bnMzMmt8c2gzKnxzcGFyY3x2YXgpCi0JCWV2YWwgIiRzZXRfY2NfZm9yX2J1aWxkIgorCQlzZXRfY2NfZm9yX2J1aWxkCiAJCWlmIGVjaG8gX19FTEZfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCiAJCQl8IGdyZXAgLXEgX19FTEZfXwogCQl0aGVuCkBAIC0yMTgsNyArMjMzLDcgQEAKIAljYXNlICIkVU5BTUVfTUFDSElORV9BUkNIIiBpbgogCSAgICBlYXJtKikKIAkJZXhwcj0ncy9eZWFybXZbMC05XS8tZWFiaS87cy9lYiQvLycKLQkJYWJpPWBlY2hvICIkVU5BTUVfTUFDSElORV9BUkNIIiB8IHNlZCAtZSAiJGV4cHIiYAorCQlhYmk9JChlY2hvICIkVU5BTUVfTUFDSElORV9BUkNIIiB8IHNlZCAtZSAiJGV4cHIiKQogCQk7OwogCWVzYWMKIAkjIFRoZSBPUyByZWxlYXNlCkBAIC0yMzEsNyArMjQ2LDcgQEAKIAkJcmVsZWFzZT0nLWdudScKIAkJOzsKIAkgICAgKikKLQkJcmVsZWFzZT1gZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzL1stX10uKi8vJyB8IGN1dCAtZC4gLWYxLDJgCisJCXJlbGVhc2U9JChlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvWy1fXS4qLy8nIHwgY3V0IC1kLiAtZjEsMikKIAkJOzsKIAllc2FjCiAJIyBTaW5jZSBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU06CkBAIC0yNDAsMTUgKzI1NSwxNSBAQAogCWVjaG8gIiRtYWNoaW5lLSR7b3N9JHtyZWxlYXNlfSR7YWJpLX0iCiAJZXhpdCA7OwogICAgICo6Qml0cmlnOio6KikKLQlVTkFNRV9NQUNISU5FX0FSQ0g9YGFyY2ggfCBzZWQgJ3MvQml0cmlnLi8vJ2AKKwlVTkFNRV9NQUNISU5FX0FSQ0g9JChhcmNoIHwgc2VkICdzL0JpdHJpZy4vLycpCiAJZWNobyAiJFVOQU1FX01BQ0hJTkVfQVJDSCItdW5rbm93bi1iaXRyaWciJFVOQU1FX1JFTEVBU0UiCiAJZXhpdCA7OwogICAgICo6T3BlbkJTRDoqOiopCi0JVU5BTUVfTUFDSElORV9BUkNIPWBhcmNoIHwgc2VkICdzL09wZW5CU0QuLy8nYAorCVVOQU1FX01BQ0hJTkVfQVJDSD0kKGFyY2ggfCBzZWQgJ3MvT3BlbkJTRC4vLycpCiAJZWNobyAiJFVOQU1FX01BQ0hJTkVfQVJDSCItdW5rbm93bi1vcGVuYnNkIiRVTkFNRV9SRUxFQVNFIgogCWV4aXQgOzsKICAgICAqOkxpYmVydHlCU0Q6KjoqKQotCVVOQU1FX01BQ0hJTkVfQVJDSD1gYXJjaCB8IHNlZCAncy9eLipCU0RcLi8vJ2AKKwlVTkFNRV9NQUNISU5FX0FSQ0g9JChhcmNoIHwgc2VkICdzL14uKkJTRFwuLy8nKQogCWVjaG8gIiRVTkFNRV9NQUNISU5FX0FSQ0giLXVua25vd24tbGliZXJ0eWJzZCIkVU5BTUVfUkVMRUFTRSIKIAlleGl0IDs7CiAgICAgKjpNaWRuaWdodEJTRDoqOiopCkBAIC0yNjAsNiArMjc1LDkgQEAKICAgICAqOlNvbGlkQlNEOio6KikKIAllY2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi1zb2xpZGJzZCIkVU5BTUVfUkVMRUFTRSIKIAlleGl0IDs7CisgICAgKjpPUzEwODoqOiopCisJZWNobyAiJFVOQU1FX01BQ0hJTkUiLXVua25vd24tb3MxMDhfIiRVTkFNRV9SRUxFQVNFIgorCWV4aXQgOzsKICAgICBtYWNwcGM6TWlyQlNEOio6KikKIAllY2hvIHBvd2VycGMtdW5rbm93bi1taXJic2QiJFVOQU1FX1JFTEVBU0UiCiAJZXhpdCA7OwpAQCAtMjY5LDI2ICsyODcsMjkgQEAKICAgICAqOlNvcnRpeDoqOiopCiAJZWNobyAiJFVOQU1FX01BQ0hJTkUiLXVua25vd24tc29ydGl4CiAJZXhpdCA7OworICAgICo6VHdpenpsZXI6KjoqKQorCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLXR3aXp6bGVyCisJZXhpdCA7OwogICAgICo6UmVkb3g6KjoqKQogCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLXJlZG94CiAJZXhpdCA7OwogICAgIG1pcHM6T1NGMToqLiopCi0gICAgICAgIGVjaG8gbWlwcy1kZWMtb3NmMQotICAgICAgICBleGl0IDs7CisJZWNobyBtaXBzLWRlYy1vc2YxCisJZXhpdCA7OwogICAgIGFscGhhOk9TRjE6KjoqKQogCWNhc2UgJFVOQU1FX1JFTEVBU0UgaW4KIAkqNC4wKQotCQlVTkFNRV9SRUxFQVNFPWAvdXNyL3NiaW4vc2l6ZXIgLXYgfCBhd2sgJ3twcmludCAkM30nYAorCQlVTkFNRV9SRUxFQVNFPSQoL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDN9JykKIAkJOzsKIAkqNS4qKQotCQlVTkFNRV9SRUxFQVNFPWAvdXNyL3NiaW4vc2l6ZXIgLXYgfCBhd2sgJ3twcmludCAkNH0nYAorCQlVTkFNRV9SRUxFQVNFPSQoL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDR9JykKIAkJOzsKIAllc2FjCiAJIyBBY2NvcmRpbmcgdG8gQ29tcGFxLCAvdXNyL3NiaW4vcHNyaW5mbyBoYXMgYmVlbiBhdmFpbGFibGUgb24KIAkjIE9TRi8xIGFuZCBUcnU2NCBzeXN0ZW1zIHByb2R1Y2VkIHNpbmNlIDE5OTUuICBJIGhvcGUgdGhhdAogCSMgY292ZXJzIG1vc3Qgc3lzdGVtcyBydW5uaW5nIHRvZGF5LiAgVGhpcyBjb2RlIHBpcGVzIHRoZSBDUFUKIAkjIHR5cGVzIHRocm91Z2ggaGVhZCAtbiAxLCBzbyB3ZSBvbmx5IGRldGVjdCB0aGUgdHlwZSBvZiBDUFUgMC4KLQlBTFBIQV9DUFVfVFlQRT1gL3Vzci9zYmluL3BzcmluZm8gLXYgfCBzZWQgLW4gLWUgJ3MvXiAgVGhlIGFscGhhIFwoLipcKSBwcm9jZXNzb3IuKiQvXDEvcCcgfCBoZWFkIC1uIDFgCisJQUxQSEFfQ1BVX1RZUEU9JCgvdXNyL3NiaW4vcHNyaW5mbyAtdiB8IHNlZCAtbiAtZSAncy9eICBUaGUgYWxwaGEgXCguKlwpIHByb2Nlc3Nvci4qJC9cMS9wJyB8IGhlYWQgLW4gMSkKIAljYXNlICIkQUxQSEFfQ1BVX1RZUEUiIGluCiAJICAgICJFVjQgKDIxMDY0KSIpCiAJCVVOQU1FX01BQ0hJTkU9YWxwaGEgOzsKQEAgLTMyNiw3ICszNDcsNyBAQAogCSMgQSBUbi5uIHZlcnNpb24gaXMgYSByZWxlYXNlZCBmaWVsZCB0ZXN0IHZlcnNpb24uCiAJIyBBIFhuLm4gdmVyc2lvbiBpcyBhbiB1bnJlbGVhc2VkIGV4cGVyaW1lbnRhbCBiYXNlbGV2ZWwuCiAJIyAxLjIgdXNlcyAiMS4yIiBmb3IgdW5hbWUgLXIuCi0JZWNobyAiJFVOQU1FX01BQ0hJTkUiLWRlYy1vc2YiYGVjaG8gIiRVTkFNRV9SRUxFQVNFIiB8IHNlZCAtZSAncy9eW1BWVFhdLy8nIHwgdHIgQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpgIgorCWVjaG8gIiRVTkFNRV9NQUNISU5FIi1kZWMtb3NmIiQoZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzL15bUFZUWF0vLycgfCB0ciBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eikiCiAJIyBSZXNldCBFWElUIHRyYXAgYmVmb3JlIGV4aXRpbmcgdG8gYXZvaWQgc3B1cmlvdXMgbm9uLXplcm8gZXhpdCBjb2RlLgogCWV4aXRjb2RlPSQ/CiAJdHJhcCAnJyAwCkBAIC0zNjAsNyArMzgxLDcgQEAKIAlleGl0IDs7CiAgICAgUHlyYW1pZCo6T1N4KjoqOiogfCBNSVMqOk9TeCo6KjoqIHwgTUlTKjpTTVBfREMtT1N4KjoqOiopCiAJIyBha2VlQHdwZGlzMDMud3BhZmIuYWYubWlsIChFYXJsZSBGLiBBa2UpIGNvbnRyaWJ1dGVkIE1JUyBhbmQgTklMRS4KLQlpZiB0ZXN0ICJgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsYCIgPSBhdHQgOyB0aGVuCisJaWYgdGVzdCAiJCggKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsKSIgPSBhdHQgOyB0aGVuCiAJCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN5c3YzCiAJZWxzZQogCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1ic2QKQEAgLTM3MywyOCArMzk0LDI4IEBACiAJZWNobyBzcGFyYy1pY2wtbng2CiAJZXhpdCA7OwogICAgIERSUz82MDAwOlVOSVhfU1Y6NC4yKjo3KiB8IERSUz82MDAwOmlzaXM6NC4yKjo3KikKLQljYXNlIGAvdXNyL2Jpbi91bmFtZSAtcGAgaW4KKwljYXNlICQoL3Vzci9iaW4vdW5hbWUgLXApIGluCiAJICAgIHNwYXJjKSBlY2hvIHNwYXJjLWljbC1ueDc7IGV4aXQgOzsKIAllc2FjIDs7CiAgICAgczM5MHg6U3VuT1M6KjoqKQotCWVjaG8gIiRVTkFNRV9NQUNISU5FIi1pYm0tc29sYXJpczIiYGVjaG8gIiRVTkFNRV9SRUxFQVNFIiB8IHNlZCAtZSAncy9bXi5dKi8vJ2AiCisJZWNobyAiJFVOQU1FX01BQ0hJTkUiLWlibS1zb2xhcmlzMiIkKGVjaG8gIiRVTkFNRV9SRUxFQVNFIiB8IHNlZCAtZSAncy9bXi5dKi8vJykiCiAJZXhpdCA7OwogICAgIHN1bjRIOlN1bk9TOjUuKjoqKQotCWVjaG8gc3BhcmMtaGFsLXNvbGFyaXMyImBlY2hvICIkVU5BTUVfUkVMRUFTRSJ8c2VkIC1lICdzL1teLl0qLy8nYCIKKwllY2hvIHNwYXJjLWhhbC1zb2xhcmlzMiIkKGVjaG8gIiRVTkFNRV9SRUxFQVNFInxzZWQgLWUgJ3MvW14uXSovLycpIgogCWV4aXQgOzsKICAgICBzdW40KjpTdW5PUzo1Lio6KiB8IHRhZHBvbGUqOlN1bk9TOjUuKjoqKQotCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMyImBlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvW14uXSovLydgIgorCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMyIiQoZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzL1teLl0qLy8nKSIKIAlleGl0IDs7CiAgICAgaTg2cGM6QXVyb3JhVVg6NS4qOiogfCBpODZ4ZW46QXVyb3JhVVg6NS4qOiopCiAJZWNobyBpMzg2LXBjLWF1cm9yYXV4IiRVTkFNRV9SRUxFQVNFIgogCWV4aXQgOzsKICAgICBpODZwYzpTdW5PUzo1Lio6KiB8IGk4NnhlbjpTdW5PUzo1Lio6KikKLQlldmFsICIkc2V0X2NjX2Zvcl9idWlsZCIKKwlzZXRfY2NfZm9yX2J1aWxkCiAJU1VOX0FSQ0g9aTM4NgogCSMgSWYgdGhlcmUgaXMgYSBjb21waWxlciwgc2VlIGlmIGl0IGlzIGNvbmZpZ3VyZWQgZm9yIDY0LWJpdCBvYmplY3RzLgogCSMgTm90ZSB0aGF0IHRoZSBTdW4gY2MgZG9lcyBub3QgdHVybiBfX0xQNjRfXyBpbnRvIDEgbGlrZSBnY2MgZG9lcy4KIAkjIFRoaXMgdGVzdCB3b3JrcyBmb3IgYm90aCBjb21waWxlcnMuCi0JaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gbm9fY29tcGlsZXJfZm91bmQgXTsgdGhlbgorCWlmIHRlc3QgIiRDQ19GT1JfQlVJTEQiICE9IG5vX2NvbXBpbGVyX2ZvdW5kOyB0aGVuCiAJICAgIGlmIChlY2hvICcjaWZkZWYgX19hbWQ2NCc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCiAJCShDQ09QVFM9IiIgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKIAkJZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKQEAgLTQwMiwzMCArNDIzLDMwIEBACiAJCVNVTl9BUkNIPXg4Nl82NAogCSAgICBmaQogCWZpCi0JZWNobyAiJFNVTl9BUkNIIi1wYy1zb2xhcmlzMiJgZWNobyAiJFVOQU1FX1JFTEVBU0UifHNlZCAtZSAncy9bXi5dKi8vJ2AiCisJZWNobyAiJFNVTl9BUkNIIi1wYy1zb2xhcmlzMiIkKGVjaG8gIiRVTkFNRV9SRUxFQVNFInxzZWQgLWUgJ3MvW14uXSovLycpIgogCWV4aXQgOzsKICAgICBzdW40KjpTdW5PUzo2KjoqKQogCSMgQWNjb3JkaW5nIHRvIGNvbmZpZy5zdWIsIHRoaXMgaXMgdGhlIHByb3BlciB3YXkgdG8gY2Fub25pY2FsaXplCiAJIyBTdW5PUzYuICBIYXJkIHRvIGd1ZXNzIGV4YWN0bHkgd2hhdCBTdW5PUzYgd2lsbCBiZSBsaWtlLCBidXQKIAkjIGl0J3MgbGlrZWx5IHRvIGJlIG1vcmUgbGlrZSBTb2xhcmlzIHRoYW4gU3VuT1M0LgotCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMzImBlY2hvICIkVU5BTUVfUkVMRUFTRSJ8c2VkIC1lICdzL1teLl0qLy8nYCIKKwllY2hvIHNwYXJjLXN1bi1zb2xhcmlzMyIkKGVjaG8gIiRVTkFNRV9SRUxFQVNFInxzZWQgLWUgJ3MvW14uXSovLycpIgogCWV4aXQgOzsKICAgICBzdW40KjpTdW5PUzoqOiopCi0JY2FzZSAiYC91c3IvYmluL2FyY2ggLWtgIiBpbgorCWNhc2UgIiQoL3Vzci9iaW4vYXJjaCAtaykiIGluCiAJICAgIFNlcmllcyp8UzQqKQotCQlVTkFNRV9SRUxFQVNFPWB1bmFtZSAtdmAKKwkJVU5BTUVfUkVMRUFTRT0kKHVuYW1lIC12KQogCQk7OwogCWVzYWMKIAkjIEphcGFuZXNlIExhbmd1YWdlIHZlcnNpb25zIGhhdmUgYSB2ZXJzaW9uIG51bWJlciBsaWtlIGA0LjEuMy1KTCcuCi0JZWNobyBzcGFyYy1zdW4tc3Vub3MiYGVjaG8gIiRVTkFNRV9SRUxFQVNFInxzZWQgLWUgJ3MvLS9fLydgIgorCWVjaG8gc3BhcmMtc3VuLXN1bm9zIiQoZWNobyAiJFVOQU1FX1JFTEVBU0UifHNlZCAtZSAncy8tL18vJykiCiAJZXhpdCA7OwogICAgIHN1bjMqOlN1bk9TOio6KikKIAllY2hvIG02OGstc3VuLXN1bm9zIiRVTkFNRV9SRUxFQVNFIgogCWV4aXQgOzsKICAgICBzdW4qOio6NC4yQlNEOiopCi0JVU5BTUVfUkVMRUFTRT1gKHNlZCAxcSAvZXRjL21vdGQgfCBhd2sgJ3twcmludCBzdWJzdHIoJDUsMSwzKX0nKSAyPi9kZXYvbnVsbGAKKwlVTkFNRV9SRUxFQVNFPSQoIChzZWQgMXEgL2V0Yy9tb3RkIHwgYXdrICd7cHJpbnQgc3Vic3RyKCQ1LDEsMyl9JykgMj4vZGV2L251bGwpCiAJdGVzdCAieCRVTkFNRV9SRUxFQVNFIiA9IHggJiYgVU5BTUVfUkVMRUFTRT0zCi0JY2FzZSAiYC9iaW4vYXJjaGAiIGluCisJY2FzZSAiJCgvYmluL2FyY2gpIiBpbgogCSAgICBzdW4zKQogCQllY2hvIG02OGstc3VuLXN1bm9zIiRVTkFNRV9SRUxFQVNFIgogCQk7OwpAQCAtNDgyLDcgKzUwMyw3IEBACiAJZWNobyBjbGlwcGVyLWludGVyZ3JhcGgtY2xpeCIkVU5BTUVfUkVMRUFTRSIKIAlleGl0IDs7CiAgICAgbWlwczoqOio6VU1JUFMgfCBtaXBzOio6KjpSSVNDb3MpCi0JZXZhbCAiJHNldF9jY19mb3JfYnVpbGQiCisJc2V0X2NjX2Zvcl9idWlsZAogCXNlZCAncy9eCS8vJyA8PCBFT0YgPiAiJGR1bW15LmMiCiAjaWZkZWYgX19jcGx1c3BsdXMKICNpbmNsdWRlIDxzdGRpby5oPiAgLyogZm9yIHByaW50ZigpIHByb3RvdHlwZSAqLwpAQCAtNTA1LDggKzUyNiw4IEBACiAJfQogRU9GCiAJJENDX0ZPUl9CVUlMRCAtbyAiJGR1bW15IiAiJGR1bW15LmMiICYmCi0JICBkdW1teWFyZz1gZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1uICdzL1woWzAtOV0qXCkuKi9cMS9wJ2AgJiYKLQkgIFNZU1RFTV9OQU1FPWAiJGR1bW15IiAiJGR1bW15YXJnImAgJiYKKwkgIGR1bW15YXJnPSQoZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1uICdzL1woWzAtOV0qXCkuKi9cMS9wJykgJiYKKwkgIFNZU1RFTV9OQU1FPSQoIiRkdW1teSIgIiRkdW1teWFyZyIpICYmCiAJICAgIHsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQogCWVjaG8gbWlwcy1taXBzLXJpc2NvcyIkVU5BTUVfUkVMRUFTRSIKIAlleGl0IDs7CkBAIC01MzMsMTEgKzU1NCwxMSBAQAogCWV4aXQgOzsKICAgICBBVmlpT046ZGd1eDoqOiopCiAJIyBERy9VWCByZXR1cm5zIEFWaWlPTiBmb3IgYWxsIGFyY2hpdGVjdHVyZXMKLQlVTkFNRV9QUk9DRVNTT1I9YC91c3IvYmluL3VuYW1lIC1wYAotCWlmIFsgIiRVTkFNRV9QUk9DRVNTT1IiID0gbWM4ODEwMCBdIHx8IFsgIiRVTkFNRV9QUk9DRVNTT1IiID0gbWM4ODExMCBdCisJVU5BTUVfUFJPQ0VTU09SPSQoL3Vzci9iaW4vdW5hbWUgLXApCisJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSBtYzg4MTAwIHx8IHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gbWM4ODExMAogCXRoZW4KLQkgICAgaWYgWyAiJFRBUkdFVF9CSU5BUllfSU5URVJGQUNFInggPSBtODhrZGd1eGVsZnggXSB8fCBcCi0JICAgICAgIFsgIiRUQVJHRVRfQklOQVJZX0lOVEVSRkFDRSJ4ID0geCBdCisJICAgIGlmIHRlc3QgIiRUQVJHRVRfQklOQVJZX0lOVEVSRkFDRSJ4ID0gbTg4a2RndXhlbGZ4IHx8IFwKKwkgICAgICAgdGVzdCAiJFRBUkdFVF9CSU5BUllfSU5URVJGQUNFInggPSB4CiAJICAgIHRoZW4KIAkJZWNobyBtODhrLWRnLWRndXgiJFVOQU1FX1JFTEVBU0UiCiAJICAgIGVsc2UKQEAgLTU2MSwxNyArNTgyLDE3IEBACiAJZWNobyBtNjhrLXRla3Ryb25peC1ic2QKIAlleGl0IDs7CiAgICAgKjpJUklYKjoqOiopCi0JZWNobyBtaXBzLXNnaS1pcml4ImBlY2hvICIkVU5BTUVfUkVMRUFTRSJ8c2VkIC1lICdzLy0vXy9nJ2AiCisJZWNobyBtaXBzLXNnaS1pcml4IiQoZWNobyAiJFVOQU1FX1JFTEVBU0UifHNlZCAtZSAncy8tL18vZycpIgogCWV4aXQgOzsKICAgICA/Pz8/Pz8/PzpBSVg/OlsxMl0uMToyKSAgICMgQUlYIDIuMi4xIG9yIEFJWCAyLjEuMSBpcyBSVC9QQyBBSVguCiAJZWNobyByb21wLWlibS1haXggICAgICMgdW5hbWUgLW0gZ2l2ZXMgYW4gOCBoZXgtY29kZSBDUFUgaWQKLQlleGl0IDs7ICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQ6IGVjaG8gIidgdW5hbWUgLXNgJyIgZ2l2ZXMgJ0FJWCAnCisJZXhpdCA7OyAgICAgICAgICAgICAgICMgTm90ZSB0aGF0OiBlY2hvICInJCh1bmFtZSAtcyknIiBnaXZlcyAnQUlYICcKICAgICBpKjg2OkFJWDoqOiopCiAJZWNobyBpMzg2LWlibS1haXgKIAlleGl0IDs7CiAgICAgaWE2NDpBSVg6KjoqKQotCWlmIFsgLXggL3Vzci9iaW4vb3NsZXZlbCBdIDsgdGhlbgotCQlJQk1fUkVWPWAvdXNyL2Jpbi9vc2xldmVsYAorCWlmIHRlc3QgLXggL3Vzci9iaW4vb3NsZXZlbCA7IHRoZW4KKwkJSUJNX1JFVj0kKC91c3IvYmluL29zbGV2ZWwpCiAJZWxzZQogCQlJQk1fUkVWPSIkVU5BTUVfVkVSU0lPTi4kVU5BTUVfUkVMRUFTRSIKIAlmaQpAQCAtNTc5LDcgKzYwMCw3IEBACiAJZXhpdCA7OwogICAgICo6QUlYOjI6MykKIAlpZiBncmVwIGJvczMyNSAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkJZXZhbCAiJHNldF9jY19mb3JfYnVpbGQiCisJCXNldF9jY19mb3JfYnVpbGQKIAkJc2VkICdzL14JCS8vJyA8PCBFT0YgPiAiJGR1bW15LmMiCiAJCSNpbmNsdWRlIDxzeXMvc3lzdGVtY2ZnLmg+CiAKQEAgLTU5MSw3ICs2MTIsNyBAQAogCQkJZXhpdCgwKTsKIAkJCX0KIEVPRgotCQlpZiAkQ0NfRk9SX0JVSUxEIC1vICIkZHVtbXkiICIkZHVtbXkuYyIgJiYgU1lTVEVNX05BTUU9YCIkZHVtbXkiYAorCQlpZiAkQ0NfRk9SX0JVSUxEIC1vICIkZHVtbXkiICIkZHVtbXkuYyIgJiYgU1lTVEVNX05BTUU9JCgiJGR1bW15IikKIAkJdGhlbgogCQkJZWNobyAiJFNZU1RFTV9OQU1FIgogCQllbHNlCkBAIC02MDQsMTUgKzYyNSwxNSBAQAogCWZpCiAJZXhpdCA7OwogICAgICo6QUlYOio6WzQ1NjddKQotCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nYAorCUlCTV9DUFVfSUQ9JCgvdXNyL3NiaW4vbHNkZXYgLUMgLWMgcHJvY2Vzc29yIC1TIGF2YWlsYWJsZSB8IHNlZCAxcSB8IGF3ayAneyBwcmludCAkMSB9JykKIAlpZiAvdXNyL3NiaW4vbHNhdHRyIC1FbCAiJElCTV9DUFVfSUQiIHwgZ3JlcCAnIFBPV0VSJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KIAkJSUJNX0FSQ0g9cnM2MDAwCiAJZWxzZQogCQlJQk1fQVJDSD1wb3dlcnBjCiAJZmkKLQlpZiBbIC14IC91c3IvYmluL2xzbHBwIF0gOyB0aGVuCi0JCUlCTV9SRVY9YC91c3IvYmluL2xzbHBwIC1McWMgYm9zLnJ0ZS5saWJjIHwKLQkJCSAgIGF3ayAtRjogJ3sgcHJpbnQgJDMgfScgfCBzZWQgcy9bMC05XSokLzAvYAorCWlmIHRlc3QgLXggL3Vzci9iaW4vbHNscHAgOyB0aGVuCisJCUlCTV9SRVY9JCgvdXNyL2Jpbi9sc2xwcCAtTHFjIGJvcy5ydGUubGliYyB8CisJCQkgICBhd2sgLUY6ICd7IHByaW50ICQzIH0nIHwgc2VkIHMvWzAtOV0qJC8wLykKIAllbHNlCiAJCUlCTV9SRVY9IiRVTkFNRV9WRVJTSU9OLiRVTkFNRV9SRUxFQVNFIgogCWZpCkBAIC02NDAsMTQgKzY2MSwxNCBAQAogCWVjaG8gbTY4ay1ocC1ic2Q0LjQKIAlleGl0IDs7CiAgICAgOTAwMC9bMzQ2NzhdPz86SFAtVVg6KjoqKQotCUhQVVhfUkVWPWBlY2hvICIkVU5BTUVfUkVMRUFTRSJ8c2VkIC1lICdzL1teLl0qLlswQl0qLy8nYAorCUhQVVhfUkVWPSQoZWNobyAiJFVOQU1FX1JFTEVBU0UifHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJykKIAljYXNlICIkVU5BTUVfTUFDSElORSIgaW4KIAkgICAgOTAwMC8zMT8pICAgICAgICAgICAgSFBfQVJDSD1tNjgwMDAgOzsKIAkgICAgOTAwMC9bMzRdPz8pICAgICAgICAgSFBfQVJDSD1tNjhrIDs7CiAJICAgIDkwMDAvWzY3OF1bMC05XVswLTldKQotCQlpZiBbIC14IC91c3IvYmluL2dldGNvbmYgXTsgdGhlbgotCQkgICAgc2NfY3B1X3ZlcnNpb249YC91c3IvYmluL2dldGNvbmYgU0NfQ1BVX1ZFUlNJT04gMj4vZGV2L251bGxgCi0JCSAgICBzY19rZXJuZWxfYml0cz1gL3Vzci9iaW4vZ2V0Y29uZiBTQ19LRVJORUxfQklUUyAyPi9kZXYvbnVsbGAKKwkJaWYgdGVzdCAteCAvdXNyL2Jpbi9nZXRjb25mOyB0aGVuCisJCSAgICBzY19jcHVfdmVyc2lvbj0kKC91c3IvYmluL2dldGNvbmYgU0NfQ1BVX1ZFUlNJT04gMj4vZGV2L251bGwpCisJCSAgICBzY19rZXJuZWxfYml0cz0kKC91c3IvYmluL2dldGNvbmYgU0NfS0VSTkVMX0JJVFMgMj4vZGV2L251bGwpCiAJCSAgICBjYXNlICIkc2NfY3B1X3ZlcnNpb24iIGluCiAJCSAgICAgIDUyMykgSFBfQVJDSD1ocHBhMS4wIDs7ICMgQ1BVX1BBX1JJU0MxXzAKIAkJICAgICAgNTI4KSBIUF9BUkNIPWhwcGExLjEgOzsgIyBDUFVfUEFfUklTQzFfMQpAQCAtNjU5LDggKzY4MCw4IEBACiAJCQllc2FjIDs7CiAJCSAgICBlc2FjCiAJCWZpCi0JCWlmIFsgIiRIUF9BUkNIIiA9ICIiIF07IHRoZW4KLQkJICAgIGV2YWwgIiRzZXRfY2NfZm9yX2J1aWxkIgorCQlpZiB0ZXN0ICIkSFBfQVJDSCIgPSAiIjsgdGhlbgorCQkgICAgc2V0X2NjX2Zvcl9idWlsZAogCQkgICAgc2VkICdzL14JCS8vJyA8PCBFT0YgPiAiJGR1bW15LmMiCiAKIAkJI2RlZmluZSBfSFBVWF9TT1VSQ0UKQEAgLTY5NCwxMyArNzE1LDEzIEBACiAJCSAgICBleGl0ICgwKTsKIAkJfQogRU9GCi0JCSAgICAoQ0NPUFRTPSIiICRDQ19GT1JfQlVJTEQgLW8gIiRkdW1teSIgIiRkdW1teS5jIiAyPi9kZXYvbnVsbCkgJiYgSFBfQVJDSD1gIiRkdW1teSJgCisJCSAgICAoQ0NPUFRTPSIiICRDQ19GT1JfQlVJTEQgLW8gIiRkdW1teSIgIiRkdW1teS5jIiAyPi9kZXYvbnVsbCkgJiYgSFBfQVJDSD0kKCIkZHVtbXkiKQogCQkgICAgdGVzdCAteiAiJEhQX0FSQ0giICYmIEhQX0FSQ0g9aHBwYQogCQlmaSA7OwogCWVzYWMKLQlpZiBbICIkSFBfQVJDSCIgPSBocHBhMi4wdyBdCisJaWYgdGVzdCAiJEhQX0FSQ0giID0gaHBwYTIuMHcKIAl0aGVuCi0JICAgIGV2YWwgIiRzZXRfY2NfZm9yX2J1aWxkIgorCSAgICBzZXRfY2NfZm9yX2J1aWxkCiAKIAkgICAgIyBocHBhMi4wdy1ocC1ocHV4KiBoYXMgYSA2NC1iaXQga2VybmVsIGFuZCBhIGNvbXBpbGVyIGdlbmVyYXRpbmcKIAkgICAgIyAzMi1iaXQgY29kZS4gIGhwcGE2NC1ocC1ocHV4KiBoYXMgdGhlIHNhbWUga2VybmVsIGFuZCBhIGNvbXBpbGVyCkBAIC03MjIsMTEgKzc0MywxMSBAQAogCWVjaG8gIiRIUF9BUkNIIi1ocC1ocHV4IiRIUFVYX1JFViIKIAlleGl0IDs7CiAgICAgaWE2NDpIUC1VWDoqOiopCi0JSFBVWF9SRVY9YGVjaG8gIiRVTkFNRV9SRUxFQVNFInxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJSFBVWF9SRVY9JChlY2hvICIkVU5BTUVfUkVMRUFTRSJ8c2VkIC1lICdzL1teLl0qLlswQl0qLy8nKQogCWVjaG8gaWE2NC1ocC1ocHV4IiRIUFVYX1JFViIKIAlleGl0IDs7CiAgICAgMzA1MCo6SEktVVg6KjoqKQotCWV2YWwgIiRzZXRfY2NfZm9yX2J1aWxkIgorCXNldF9jY19mb3JfYnVpbGQKIAlzZWQgJ3MvXgkvLycgPDwgRU9GID4gIiRkdW1teS5jIgogCSNpbmNsdWRlIDx1bmlzdGQuaD4KIAlpbnQKQEAgLTc1Miw3ICs3NzMsNyBAQAogCSAgZXhpdCAoMCk7CiAJfQogRU9GCi0JJENDX0ZPUl9CVUlMRCAtbyAiJGR1bW15IiAiJGR1bW15LmMiICYmIFNZU1RFTV9OQU1FPWAiJGR1bW15ImAgJiYKKwkkQ0NfRk9SX0JVSUxEIC1vICIkZHVtbXkiICIkZHVtbXkuYyIgJiYgU1lTVEVNX05BTUU9JCgiJGR1bW15IikgJiYKIAkJeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CiAJZWNobyB1bmtub3duLWhpdGFjaGktaGl1eHdlMgogCWV4aXQgOzsKQEAgLTc3Miw3ICs3OTMsNyBAQAogCWVjaG8gaHBwYTEuMC1ocC1vc2YKIAlleGl0IDs7CiAgICAgaSo4NjpPU0YxOio6KikKLQlpZiBbIC14IC91c3Ivc2Jpbi9zeXN2ZXJzaW9uIF0gOyB0aGVuCisJaWYgdGVzdCAteCAvdXNyL3NiaW4vc3lzdmVyc2lvbiA7IHRoZW4KIAkgICAgZWNobyAiJFVOQU1FX01BQ0hJTkUiLXVua25vd24tb3NmMW1rCiAJZWxzZQogCSAgICBlY2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi1vc2YxCkBAIC04MjEsMTQgKzg0MiwxNCBAQAogCWVjaG8gY3JheW52LWNyYXktdW5pY29zbXAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKIAlleGl0IDs7CiAgICAgRjMwWzAxXTpVTklYX1N5c3RlbV9WOio6KiB8IEY3MDA6VU5JWF9TeXN0ZW1fVjoqOiopCi0JRlVKSVRTVV9QUk9DPWB1bmFtZSAtbSB8IHRyIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6YAotCUZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IHwgc2VkIC1lICdzL1wvLy8nYAotCUZVSklUU1VfUkVMPWBlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvIC9fLydgCisJRlVKSVRTVV9QUk9DPSQodW5hbWUgLW0gfCB0ciBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eikKKwlGVUpJVFNVX1NZUz0kKHVuYW1lIC1wIHwgdHIgQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogfCBzZWQgLWUgJ3MvXC8vLycpCisJRlVKSVRTVV9SRUw9JChlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvIC9fLycpCiAJZWNobyAiJHtGVUpJVFNVX1BST0N9LWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKIAlleGl0IDs7CiAgICAgNTAwMDpVTklYX1N5c3RlbV9WOjQuKjoqKQotCUZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyIEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IHwgc2VkIC1lICdzL1wvLy8nYAotCUZVSklUU1VfUkVMPWBlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCB0ciBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiB8IHNlZCAtZSAncy8gL18vJ2AKKwlGVUpJVFNVX1NZUz0kKHVuYW1lIC1wIHwgdHIgQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogfCBzZWQgLWUgJ3MvXC8vLycpCisJRlVKSVRTVV9SRUw9JChlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCB0ciBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiB8IHNlZCAtZSAncy8gL18vJykKIAllY2hvICJzcGFyYy1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCiAJZXhpdCA7OwogICAgIGkqODY6QlNELzM4NjoqOiogfCBpKjg2OkJTRC9PUzoqOiogfCAqOkFzY2VuZFwgRW1iZWRkZWQvT1M6KjoqKQpAQCAtODQwLDE1ICs4NjEsMjYgQEAKICAgICAqOkJTRC9PUzoqOiopCiAJZWNobyAiJFVOQU1FX01BQ0hJTkUiLXVua25vd24tYnNkaSIkVU5BTUVfUkVMRUFTRSIKIAlleGl0IDs7CisgICAgYXJtOkZyZWVCU0Q6KjoqKQorCVVOQU1FX1BST0NFU1NPUj0kKHVuYW1lIC1wKQorCXNldF9jY19mb3JfYnVpbGQKKwlpZiBlY2hvIF9fQVJNX1BDU19WRlAgfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCSAgICB8IGdyZXAgLXEgX19BUk1fUENTX1ZGUAorCXRoZW4KKwkgICAgZWNobyAiJHtVTkFNRV9QUk9DRVNTT1J9Ii11bmtub3duLWZyZWVic2QiJChlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJykiLWdudWVhYmkKKwllbHNlCisJICAgIGVjaG8gIiR7VU5BTUVfUFJPQ0VTU09SfSItdW5rbm93bi1mcmVlYnNkIiQoZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLycpIi1nbnVlYWJpaGYKKwlmaQorCWV4aXQgOzsKICAgICAqOkZyZWVCU0Q6KjoqKQotCVVOQU1FX1BST0NFU1NPUj1gL3Vzci9iaW4vdW5hbWUgLXBgCisJVU5BTUVfUFJPQ0VTU09SPSQoL3Vzci9iaW4vdW5hbWUgLXApCiAJY2FzZSAiJFVOQU1FX1BST0NFU1NPUiIgaW4KIAkgICAgYW1kNjQpCiAJCVVOQU1FX1BST0NFU1NPUj14ODZfNjQgOzsKIAkgICAgaTM4NikKIAkJVU5BTUVfUFJPQ0VTU09SPWk1ODYgOzsKIAllc2FjCi0JZWNobyAiJFVOQU1FX1BST0NFU1NPUiItdW5rbm93bi1mcmVlYnNkImBlY2hvICIkVU5BTUVfUkVMRUFTRSJ8c2VkIC1lICdzL1stKF0uKi8vJ2AiCisJZWNobyAiJFVOQU1FX1BST0NFU1NPUiItdW5rbm93bi1mcmVlYnNkIiQoZWNobyAiJFVOQU1FX1JFTEVBU0UifHNlZCAtZSAncy9bLShdLiovLycpIgogCWV4aXQgOzsKICAgICBpKjpDWUdXSU4qOiopCiAJZWNobyAiJFVOQU1FX01BQ0hJTkUiLXBjLWN5Z3dpbgpAQCAtODgxLDE4ICs5MTMsMTggQEAKIAllY2hvICIkVU5BTUVfTUFDSElORSItcGMtdXdpbgogCWV4aXQgOzsKICAgICBhbWQ2NDpDWUdXSU4qOio6KiB8IHg4Nl82NDpDWUdXSU4qOio6KikKLQllY2hvIHg4Nl82NC11bmtub3duLWN5Z3dpbgorCWVjaG8geDg2XzY0LXBjLWN5Z3dpbgogCWV4aXQgOzsKICAgICBwcmVwKjpTdW5PUzo1Lio6KikKLQllY2hvIHBvd2VycGNsZS11bmtub3duLXNvbGFyaXMyImBlY2hvICIkVU5BTUVfUkVMRUFTRSJ8c2VkIC1lICdzL1teLl0qLy8nYCIKKwllY2hvIHBvd2VycGNsZS11bmtub3duLXNvbGFyaXMyIiQoZWNobyAiJFVOQU1FX1JFTEVBU0UifHNlZCAtZSAncy9bXi5dKi8vJykiCiAJZXhpdCA7OwogICAgICo6R05VOio6KikKIAkjIHRoZSBHTlUgc3lzdGVtCi0JZWNobyAiYGVjaG8gIiRVTkFNRV9NQUNISU5FInxzZWQgLWUgJ3MsWy0vXS4qJCwsJ2AtdW5rbm93bi0kTElCQ2BlY2hvICIkVU5BTUVfUkVMRUFTRSJ8c2VkIC1lICdzLC8uKiQsLCdgIgorCWVjaG8gIiQoZWNobyAiJFVOQU1FX01BQ0hJTkUifHNlZCAtZSAncyxbLS9dLiokLCwnKS11bmtub3duLSRMSUJDJChlY2hvICIkVU5BTUVfUkVMRUFTRSJ8c2VkIC1lICdzLC8uKiQsLCcpIgogCWV4aXQgOzsKICAgICAqOkdOVS8qOio6KikKIAkjIG90aGVyIHN5c3RlbXMgd2l0aCBHTlUgbGliYyBhbmQgdXNlcmxhbmQKLQllY2hvICIkVU5BTUVfTUFDSElORS11bmtub3duLWBlY2hvICIkVU5BTUVfU1lTVEVNIiB8IHNlZCAncyxeW14vXSovLCwnIHwgdHIgIls6dXBwZXI6XSIgIls6bG93ZXI6XSJgYGVjaG8gIiRVTkFNRV9SRUxFQVNFInxzZWQgLWUgJ3MvWy0oXS4qLy8nYC0kTElCQyIKKwllY2hvICIkVU5BTUVfTUFDSElORS11bmtub3duLSQoZWNobyAiJFVOQU1FX1NZU1RFTSIgfCBzZWQgJ3MsXlteL10qLywsJyB8IHRyICJbOnVwcGVyOl0iICJbOmxvd2VyOl0iKSQoZWNobyAiJFVOQU1FX1JFTEVBU0UifHNlZCAtZSAncy9bLShdLiovLycpLSRMSUJDIgogCWV4aXQgOzsKICAgICAqOk1pbml4Oio6KikKIAllY2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi1taW5peApAQCAtOTA1LDcgKzkzNyw3IEBACiAJZWNobyAiJFVOQU1FX01BQ0hJTkUiLXVua25vd24tbGludXgtIiRMSUJDIgogCWV4aXQgOzsKICAgICBhbHBoYTpMaW51eDoqOiopCi0JY2FzZSBgc2VkIC1uICcvXmNwdSBtb2RlbC9zL14uKjogXCguKlwpL1wxL3AnIDwgL3Byb2MvY3B1aW5mb2AgaW4KKwljYXNlICQoc2VkIC1uICcvXmNwdSBtb2RlbC9zL14uKjogXCguKlwpL1wxL3AnIC9wcm9jL2NwdWluZm8gMj4vZGV2L251bGwpIGluCiAJICBFVjUpICAgVU5BTUVfTUFDSElORT1hbHBoYWV2NSA7OwogCSAgRVY1NikgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjU2IDs7CiAJICBQQ0E1NikgVU5BTUVfTUFDSElORT1hbHBoYXBjYTU2IDs7CkBAIC05MjIsNyArOTU0LDcgQEAKIAllY2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi1saW51eC0iJExJQkMiCiAJZXhpdCA7OwogICAgIGFybSo6TGludXg6KjoqKQotCWV2YWwgIiRzZXRfY2NfZm9yX2J1aWxkIgorCXNldF9jY19mb3JfYnVpbGQKIAlpZiBlY2hvIF9fQVJNX0VBQklfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCiAJICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KIAl0aGVuCkBAIC05NjQsNiArOTk2LDkgQEAKICAgICBrMW9tOkxpbnV4Oio6KikKIAllY2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi1saW51eC0iJExJQkMiCiAJZXhpdCA7OworICAgIGxvb25nYXJjaDMyOkxpbnV4Oio6KiB8IGxvb25nYXJjaDY0OkxpbnV4Oio6KiB8IGxvb25nYXJjaHgzMjpMaW51eDoqOiopCisJZWNobyAiJFVOQU1FX01BQ0hJTkUiLXVua25vd24tbGludXgtIiRMSUJDIgorCWV4aXQgOzsKICAgICBtMzJyKjpMaW51eDoqOiopCiAJZWNobyAiJFVOQU1FX01BQ0hJTkUiLXVua25vd24tbGludXgtIiRMSUJDIgogCWV4aXQgOzsKQEAgLTk3MSwyMyArMTAwNiw1MSBAQAogCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLWxpbnV4LSIkTElCQyIKIAlleGl0IDs7CiAgICAgbWlwczpMaW51eDoqOiogfCBtaXBzNjQ6TGludXg6KjoqKQotCWV2YWwgIiRzZXRfY2NfZm9yX2J1aWxkIgorCXNldF9jY19mb3JfYnVpbGQKKwlJU19HTElCQz0wCisJdGVzdCB4IiR7TElCQ30iID0geGdudSAmJiBJU19HTElCQz0xCiAJc2VkICdzL14JLy8nIDw8IEVPRiA+ICIkZHVtbXkuYyIKIAkjdW5kZWYgQ1BVCi0JI3VuZGVmICR7VU5BTUVfTUFDSElORX0KLQkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfWVsCisJI3VuZGVmIG1pcHMKKwkjdW5kZWYgbWlwc2VsCisJI3VuZGVmIG1pcHM2NAorCSN1bmRlZiBtaXBzNjRlbAorCSNpZiAke0lTX0dMSUJDfSAmJiBkZWZpbmVkKF9BQkk2NCkKKwlMSUJDQUJJPWdudWFiaTY0CisJI2Vsc2UKKwkjaWYgJHtJU19HTElCQ30gJiYgZGVmaW5lZChfQUJJTjMyKQorCUxJQkNBQkk9Z251YWJpbjMyCisJI2Vsc2UKKwlMSUJDQUJJPSR7TElCQ30KKwkjZW5kaWYKKwkjZW5kaWYKKworCSNpZiAke0lTX0dMSUJDfSAmJiBkZWZpbmVkKF9fbWlwczY0KSAmJiBkZWZpbmVkKF9fbWlwc19pc2FfcmV2KSAmJiBfX21pcHNfaXNhX3Jldj49NgorCUNQVT1taXBzaXNhNjRyNgorCSNlbHNlCisJI2lmICR7SVNfR0xJQkN9ICYmICFkZWZpbmVkKF9fbWlwczY0KSAmJiBkZWZpbmVkKF9fbWlwc19pc2FfcmV2KSAmJiBfX21pcHNfaXNhX3Jldj49NgorCUNQVT1taXBzaXNhMzJyNgorCSNlbHNlCisJI2lmIGRlZmluZWQoX19taXBzNjQpCisJQ1BVPW1pcHM2NAorCSNlbHNlCisJQ1BVPW1pcHMKKwkjZW5kaWYKKwkjZW5kaWYKKwkjZW5kaWYKKwogCSNpZiBkZWZpbmVkKF9fTUlQU0VMX18pIHx8IGRlZmluZWQoX19NSVBTRUwpIHx8IGRlZmluZWQoX01JUFNFTCkgfHwgZGVmaW5lZChNSVBTRUwpCi0JQ1BVPSR7VU5BTUVfTUFDSElORX1lbAorCU1JUFNfRU5ESUFOPWVsCiAJI2Vsc2UKIAkjaWYgZGVmaW5lZChfX01JUFNFQl9fKSB8fCBkZWZpbmVkKF9fTUlQU0VCKSB8fCBkZWZpbmVkKF9NSVBTRUIpIHx8IGRlZmluZWQoTUlQU0VCKQotCUNQVT0ke1VOQU1FX01BQ0hJTkV9CisJTUlQU19FTkRJQU49CiAJI2Vsc2UKLQlDUFU9CisJTUlQU19FTkRJQU49CiAJI2VuZGlmCiAJI2VuZGlmCiBFT0YKLQlldmFsICJgJENDX0ZPUl9CVUlMRCAtRSAiJGR1bW15LmMiIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkNQVSdgIgotCXRlc3QgIngkQ1BVIiAhPSB4ICYmIHsgZWNobyAiJENQVS11bmtub3duLWxpbnV4LSRMSUJDIjsgZXhpdDsgfQorCWV2YWwgIiQoJENDX0ZPUl9CVUlMRCAtRSAiJGR1bW15LmMiIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkNQVVx8Xk1JUFNfRU5ESUFOXHxeTElCQ0FCSScpIgorCXRlc3QgIngkQ1BVIiAhPSB4ICYmIHsgZWNobyAiJENQVSR7TUlQU19FTkRJQU59LXVua25vd24tbGludXgtJExJQkNBQkkiOyBleGl0OyB9CiAJOzsKICAgICBtaXBzNjRlbDpMaW51eDoqOiopCiAJZWNobyAiJFVOQU1FX01BQ0hJTkUiLXVua25vd24tbGludXgtIiRMSUJDIgpAQCAtMTAwNiw3ICsxMDY5LDcgQEAKIAlleGl0IDs7CiAgICAgcGFyaXNjOkxpbnV4Oio6KiB8IGhwcGE6TGludXg6KjoqKQogCSMgTG9vayBmb3IgQ1BVIGxldmVsCi0JY2FzZSBgZ3JlcCAnXmNwdVteYS16XSo6JyAvcHJvYy9jcHVpbmZvIDI+L2Rldi9udWxsIHwgY3V0IC1kJyAnIC1mMmAgaW4KKwljYXNlICQoZ3JlcCAnXmNwdVteYS16XSo6JyAvcHJvYy9jcHVpbmZvIDI+L2Rldi9udWxsIHwgY3V0IC1kJyAnIC1mMikgaW4KIAkgIFBBNyopIGVjaG8gaHBwYTEuMS11bmtub3duLWxpbnV4LSIkTElCQyIgOzsKIAkgIFBBOCopIGVjaG8gaHBwYTIuMC11bmtub3duLWxpbnV4LSIkTElCQyIgOzsKIAkgICopICAgIGVjaG8gaHBwYS11bmtub3duLWxpbnV4LSIkTElCQyIgOzsKQEAgLTEwNDYsNyArMTEwOSwxNyBAQAogCWVjaG8gIiRVTkFNRV9NQUNISU5FIi1kZWMtbGludXgtIiRMSUJDIgogCWV4aXQgOzsKICAgICB4ODZfNjQ6TGludXg6KjoqKQotCWVjaG8gIiRVTkFNRV9NQUNISU5FIi1wYy1saW51eC0iJExJQkMiCisJc2V0X2NjX2Zvcl9idWlsZAorCUxJQkNBQkk9JExJQkMKKwlpZiB0ZXN0ICIkQ0NfRk9SX0JVSUxEIiAhPSBub19jb21waWxlcl9mb3VuZDsgdGhlbgorCSAgICBpZiAoZWNobyAnI2lmZGVmIF9fSUxQMzJfXyc7IGVjaG8gSVNfWDMyOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJKENDT1BUUz0iIiAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAorCQlncmVwIElTX1gzMiA+L2Rldi9udWxsCisJICAgIHRoZW4KKwkJTElCQ0FCST0iJExJQkMieDMyCisJICAgIGZpCisJZmkKKwllY2hvICIkVU5BTUVfTUFDSElORSItcGMtbGludXgtIiRMSUJDQUJJIgogCWV4aXQgOzsKICAgICB4dGVuc2EqOkxpbnV4Oio6KikKIAllY2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi1saW51eC0iJExJQkMiCkBAIC0xMDg2LDcgKzExNTksNyBAQAogCWVjaG8gIiRVTkFNRV9NQUNISU5FIi1wYy1tc2Rvc2RqZ3BwCiAJZXhpdCA7OwogICAgIGkqODY6Kjo0Lio6KikKLQlVTkFNRV9SRUw9YGVjaG8gIiRVTkFNRV9SRUxFQVNFIiB8IHNlZCAncy9cL01QJC8vJ2AKKwlVTkFNRV9SRUw9JChlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgJ3MvXC9NUCQvLycpCiAJaWYgZ3JlcCBOb3ZlbGwgL3Vzci9pbmNsdWRlL2xpbmsuaCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCiAJCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bml2ZWwtc3lzdiIkVU5BTUVfUkVMIgogCWVsc2UKQEAgLTEwOTUsMTkgKzExNjgsMTkgQEAKIAlleGl0IDs7CiAgICAgaSo4NjoqOjU6WzY3OF0qKQogCSMgVW5peFdhcmUgNy54LCBPcGVuVU5JWCBhbmQgT3BlblNlcnZlciA2LgotCWNhc2UgYC9iaW4vdW5hbWUgLVggfCBncmVwICJeTWFjaGluZSJgIGluCisJY2FzZSAkKC9iaW4vdW5hbWUgLVggfCBncmVwICJeTWFjaGluZSIpIGluCiAJICAgICo0ODYqKQkgICAgIFVOQU1FX01BQ0hJTkU9aTQ4NiA7OwogCSAgICAqUGVudGl1bSkJICAgICBVTkFNRV9NQUNISU5FPWk1ODYgOzsKIAkgICAgKlBlbnQqfCpDZWxlcm9uKSBVTkFNRV9NQUNISU5FPWk2ODYgOzsKIAllc2FjCi0JZWNobyAiJFVOQU1FX01BQ0hJTkUtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfSR7VU5BTUVfU1lTVEVNfXskVU5BTUVfVkVSU0lPTn0iCisJZWNobyAiJFVOQU1FX01BQ0hJTkUtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfSR7VU5BTUVfU1lTVEVNfSR7VU5BTUVfVkVSU0lPTn0iCiAJZXhpdCA7OwogICAgIGkqODY6KjozLjI6KikKIAlpZiB0ZXN0IC1mIC91c3Ivb3B0aW9ucy9jYi5uYW1lOyB0aGVuCi0JCVVOQU1FX1JFTD1gc2VkIC1uICdzLy4qVmVyc2lvbiAvL3AnIDwvdXNyL29wdGlvbnMvY2IubmFtZWAKKwkJVU5BTUVfUkVMPSQoc2VkIC1uICdzLy4qVmVyc2lvbiAvL3AnIDwvdXNyL29wdGlvbnMvY2IubmFtZSkKIAkJZWNobyAiJFVOQU1FX01BQ0hJTkUiLXBjLWlzYyIkVU5BTUVfUkVMIgogCWVsaWYgL2Jpbi91bmFtZSAtWCAyPi9kZXYvbnVsbCA+L2Rldi9udWxsIDsgdGhlbgotCQlVTkFNRV9SRUw9YCgvYmluL3VuYW1lIC1YfGdyZXAgUmVsZWFzZXxzZWQgLWUgJ3MvLio9IC8vJylgCisJCVVOQU1FX1JFTD0kKCAoL2Jpbi91bmFtZSAtWHxncmVwIFJlbGVhc2V8c2VkIC1lICdzLy4qPSAvLycpKQogCQkoL2Jpbi91bmFtZSAtWHxncmVwIGk4MDQ4NiA+L2Rldi9udWxsKSAmJiBVTkFNRV9NQUNISU5FPWk0ODYKIAkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0nID4vZGV2L251bGwpIFwKIAkJCSYmIFVOQU1FX01BQ0hJTkU9aTU4NgpAQCAtMTE1Nyw3ICsxMjMwLDcgQEAKICAgICAzWzM0NV0/PzoqOjQuMDozLjAgfCAzWzM0XT8/QToqOjQuMDozLjAgfCAzWzM0XT8/LCo6Kjo0LjA6My4wIHwgM1szNF0/Py8qOio6NC4wOjMuMCB8IDQ0MDA6Kjo0LjA6My4wIHwgNDg1MDoqOjQuMDozLjAgfCBTS0E0MDoqOjQuMDozLjAgfCBTRFMyOio6NC4wOjMuMCB8IFNIRzI6Kjo0LjA6My4wIHwgUzc1MDEqOio6NC4wOjMuMCkKIAlPU19SRUw9JycKIAl0ZXN0IC1yIC9ldGMvLnJlbGlkIFwKLQkmJiBPU19SRUw9LmBzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkYAorCSYmIE9TX1JFTD0uJChzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkKQogCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAogCSAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMiJE9TX1JFTCI7IGV4aXQ7IH0KIAkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIGVudGl1bSA+L2Rldi9udWxsIFwKQEAgLTExNjgsNyArMTI0MSw3IEBACiAgICAgTkNSKjoqOjQuMjoqIHwgTVBSQVMqOio6NC4yOiopCiAJT1NfUkVMPScuMycKIAl0ZXN0IC1yIC9ldGMvLnJlbGlkIFwKLQkgICAgJiYgT1NfUkVMPS5gc2VkIC1uICdzL1teIF0qIFteIF0qIFwoWzAtOV1bMC05XVwpLiovXDEvcCcgPCAvZXRjLy5yZWxpZGAKKwkgICAgJiYgT1NfUkVMPS4kKHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWQpCiAJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCiAJICAgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zIiRPU19SRUwiOyBleGl0OyB9CiAJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCkBAIC0xMjAxLDcgKzEyNzQsNyBAQAogCWV4aXQgOzsKICAgICAqOlNJTklYLSo6KjoqKQogCWlmIHVuYW1lIC1wIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCi0JCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCisJCVVOQU1FX01BQ0hJTkU9JCggKHVuYW1lIC1wKSAyPi9kZXYvbnVsbCkKIAkJZWNobyAiJFVOQU1FX01BQ0hJTkUiLXNuaS1zeXN2NAogCWVsc2UKIAkJZWNobyBuczMyay1zbmktc3lzdgpAQCAtMTIzNSw3ICsxMzA4LDcgQEAKIAllY2hvIG1pcHMtc29ueS1uZXdzb3M2CiAJZXhpdCA7OwogICAgIFJbMzRdMDAwOipTeXN0ZW1fVio6KjoqIHwgUjQwMDA6VU5JWF9TWVNWOio6KiB8IFIqMDAwOlVOSVhfU1Y6KjoqKQotCWlmIFsgLWQgL3Vzci9uZWMgXTsgdGhlbgorCWlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KIAkJZWNobyBtaXBzLW5lYy1zeXN2IiRVTkFNRV9SRUxFQVNFIgogCWVsc2UKIAkJZWNobyBtaXBzLXVua25vd24tc3lzdiIkVU5BTUVfUkVMRUFTRSIKQEAgLTEyODMsNDQgKzEzNTYsNDggQEAKICAgICAqOlJoYXBzb2R5Oio6KikKIAllY2hvICIkVU5BTUVfTUFDSElORSItYXBwbGUtcmhhcHNvZHkiJFVOQU1FX1JFTEVBU0UiCiAJZXhpdCA7OworICAgIGFybTY0OkRhcndpbjoqOiopCisJZWNobyBhYXJjaDY0LWFwcGxlLWRhcndpbiIkVU5BTUVfUkVMRUFTRSIKKwlleGl0IDs7CiAgICAgKjpEYXJ3aW46KjoqKQotCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgIHx8IFVOQU1FX1BST0NFU1NPUj11bmtub3duCi0JZXZhbCAiJHNldF9jY19mb3JfYnVpbGQiCi0JaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSB1bmtub3duIDsgdGhlbgotCSAgICBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYworCVVOQU1FX1BST0NFU1NPUj0kKHVuYW1lIC1wKQorCWNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgorCSAgICB1bmtub3duKSBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYyA7OworCWVzYWMKKwlpZiBjb21tYW5kIC12IHhjb2RlLXNlbGVjdCA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwgJiYgXAorCQkhIHhjb2RlLXNlbGVjdCAtLXByaW50LXBhdGggPiAvZGV2L251bGwgMj4gL2Rldi9udWxsIDsgdGhlbgorCSAgICAjIEF2b2lkIGV4ZWN1dGluZyBjYyBpZiB0aGVyZSBpcyBubyB0b29sY2hhaW4gaW5zdGFsbGVkIGFzCisJICAgICMgY2Mgd2lsbCBiZSBhIHN0dWIgdGhhdCBwdXRzIHVwIGEgZ3JhcGhpY2FsIGFsZXJ0CisJICAgICMgcHJvbXB0aW5nIHRoZSB1c2VyIHRvIGluc3RhbGwgZGV2ZWxvcGVyIHRvb2xzLgorCSAgICBDQ19GT1JfQlVJTEQ9bm9fY29tcGlsZXJfZm91bmQKKwllbHNlCisJICAgIHNldF9jY19mb3JfYnVpbGQKIAlmaQotCWlmIHRlc3QgImBlY2hvICIkVU5BTUVfUkVMRUFTRSIgfCBzZWQgLWUgJ3MvXC4uKi8vJ2AiIC1sZSAxMCA7IHRoZW4KLQkgICAgaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gbm9fY29tcGlsZXJfZm91bmQgXTsgdGhlbgotCQlpZiAoZWNobyAnI2lmZGVmIF9fTFA2NF9fJzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKLQkJICAgICAgIChDQ09QVFM9IiIgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKLQkJICAgICAgIGdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCi0JCXRoZW4KLQkJICAgIGNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgotCQkJaTM4NikgVU5BTUVfUFJPQ0VTU09SPXg4Nl82NCA7OwotCQkJcG93ZXJwYykgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGM2NCA7OwotCQkgICAgZXNhYwotCQlmaQotCQkjIE9uIDEwLjQtMTAuNiBvbmUgbWlnaHQgY29tcGlsZSBmb3IgUG93ZXJQQyB2aWEgZ2NjIC1hcmNoIHBwYwotCQlpZiAoZWNobyAnI2lmZGVmIF9fUE9XRVJQQ19fJzsgZWNobyBJU19QUEM7IGVjaG8gJyNlbmRpZicpIHwgXAotCQkgICAgICAgKENDT1BUUz0iIiAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAotCQkgICAgICAgZ3JlcCBJU19QUEMgPi9kZXYvbnVsbAotCQl0aGVuCi0JCSAgICBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYwotCQlmaQorCWlmIHRlc3QgIiRDQ19GT1JfQlVJTEQiICE9IG5vX2NvbXBpbGVyX2ZvdW5kOyB0aGVuCisJICAgIGlmIChlY2hvICcjaWZkZWYgX19MUDY0X18nOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAorCQkgICAoQ0NPUFRTPSIiICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCSAgIGdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJICAgIHRoZW4KKwkJY2FzZSAkVU5BTUVfUFJPQ0VTU09SIGluCisJCSAgICBpMzg2KSBVTkFNRV9QUk9DRVNTT1I9eDg2XzY0IDs7CisJCSAgICBwb3dlcnBjKSBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYzY0IDs7CisJCWVzYWMKKwkgICAgZmkKKwkgICAgIyBPbiAxMC40LTEwLjYgb25lIG1pZ2h0IGNvbXBpbGUgZm9yIFBvd2VyUEMgdmlhIGdjYyAtYXJjaCBwcGMKKwkgICAgaWYgKGVjaG8gJyNpZmRlZiBfX1BPV0VSUENfXyc7IGVjaG8gSVNfUFBDOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJICAgKENDT1BUUz0iIiAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAorCQkgICBncmVwIElTX1BQQyA+L2Rldi9udWxsCisJICAgIHRoZW4KKwkJVU5BTUVfUFJPQ0VTU09SPXBvd2VycGMKIAkgICAgZmkKIAllbGlmIHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gaTM4NiA7IHRoZW4KLQkgICAgIyBBdm9pZCBleGVjdXRpbmcgY2Mgb24gT1MgWCAxMC45LCBhcyBpdCBzaGlwcyB3aXRoIGEgc3R1YgotCSAgICAjIHRoYXQgcHV0cyB1cCBhIGdyYXBoaWNhbCBhbGVydCBwcm9tcHRpbmcgdG8gaW5zdGFsbAotCSAgICAjIGRldmVsb3BlciB0b29scy4gIEFueSBzeXN0ZW0gcnVubmluZyBNYWMgT1MgWCAxMC43IG9yCi0JICAgICMgbGF0ZXIgKERhcndpbiAxMSBhbmQgbGF0ZXIpIGlzIHJlcXVpcmVkIHRvIGhhdmUgYSA2NC1iaXQKLQkgICAgIyBwcm9jZXNzb3IuIFRoaXMgaXMgbm90IHRydWUgb2YgdGhlIEFSTSB2ZXJzaW9uIG9mIERhcndpbgotCSAgICAjIHRoYXQgQXBwbGUgdXNlcyBpbiBwb3J0YWJsZSBkZXZpY2VzLgotCSAgICBVTkFNRV9QUk9DRVNTT1I9eDg2XzY0CisJICAgICMgdW5hbWUgLW0gcmV0dXJucyBpMzg2IG9yIHg4Nl82NAorCSAgICBVTkFNRV9QUk9DRVNTT1I9JFVOQU1FX01BQ0hJTkUKIAlmaQogCWVjaG8gIiRVTkFNRV9QUk9DRVNTT1IiLWFwcGxlLWRhcndpbiIkVU5BTUVfUkVMRUFTRSIKIAlleGl0IDs7CiAgICAgKjpwcm9jbnRvKjoqOiogfCAqOlFOWDpbMDEyMzQ1Njc4OV0qOiopCi0JVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAKKwlVTkFNRV9QUk9DRVNTT1I9JCh1bmFtZSAtcCkKIAlpZiB0ZXN0ICIkVU5BTUVfUFJPQ0VTU09SIiA9IHg4NjsgdGhlbgogCQlVTkFNRV9QUk9DRVNTT1I9aTM4NgogCQlVTkFNRV9NQUNISU5FPXBjCkBAIC0xMzU4LDYgKzE0MzUsNyBAQAogCSMgInVuYW1lIC1tIiBpcyBub3QgY29uc2lzdGVudCwgc28gdXNlICRjcHV0eXBlIGluc3RlYWQuIDM4NgogCSMgaXMgY29udmVydGVkIHRvIGkzODYgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgeDg2CiAJIyBvcGVyYXRpbmcgc3lzdGVtcy4KKwkjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIxNTQKIAlpZiB0ZXN0ICIkY3B1dHlwZSIgPSAzODY7IHRoZW4KIAkgICAgVU5BTUVfTUFDSElORT1pMzg2CiAJZWxzZQpAQCAtMTM4NywxMCArMTQ2NSwxMCBAQAogCWVjaG8gbWlwcy1zZWktc2VpdXgiJFVOQU1FX1JFTEVBU0UiCiAJZXhpdCA7OwogICAgICo6RHJhZ29uRmx5Oio6KikKLQllY2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi1kcmFnb25mbHkiYGVjaG8gIiRVTkFNRV9SRUxFQVNFInxzZWQgLWUgJ3MvWy0oXS4qLy8nYCIKKwllY2hvICIkVU5BTUVfTUFDSElORSItdW5rbm93bi1kcmFnb25mbHkiJChlY2hvICIkVU5BTUVfUkVMRUFTRSJ8c2VkIC1lICdzL1stKF0uKi8vJykiCiAJZXhpdCA7OwogICAgICo6KlZNUzoqOiopCi0JVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKwlVTkFNRV9NQUNISU5FPSQoICh1bmFtZSAtcCkgMj4vZGV2L251bGwpCiAJY2FzZSAiJFVOQU1FX01BQ0hJTkUiIGluCiAJICAgIEEqKSBlY2hvIGFscGhhLWRlYy12bXMgOyBleGl0IDs7CiAJICAgIEkqKSBlY2hvIGlhNjQtZGVjLXZtcyA7IGV4aXQgOzsKQEAgLTE0MDAsNyArMTQ3OCw3IEBACiAJZWNobyBpMzg2LXBjLXhlbml4CiAJZXhpdCA7OwogICAgIGkqODY6c2t5b3M6KjoqKQotCWVjaG8gIiRVTkFNRV9NQUNISU5FIi1wYy1za3lvcyJgZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzLyAuKiQvLydgIgorCWVjaG8gIiRVTkFNRV9NQUNISU5FIi1wYy1za3lvcyIkKGVjaG8gIiRVTkFNRV9SRUxFQVNFIiB8IHNlZCAtZSAncy8gLiokLy8nKSIKIAlleGl0IDs7CiAgICAgaSo4NjpyZG9zOio6KikKIAllY2hvICIkVU5BTUVfTUFDSElORSItcGMtcmRvcwpAQCAtMTQxNCw4ICsxNDkyLDE0OCBAQAogICAgIGFtZDY0OklzaWxvblwgT25lRlM6KjoqKQogCWVjaG8geDg2XzY0LXVua25vd24tb25lZnMKIAlleGl0IDs7CisgICAgKjpVbmxlYXNoZWQ6KjoqKQorCWVjaG8gIiRVTkFNRV9NQUNISU5FIi11bmtub3duLXVubGVhc2hlZCIkVU5BTUVfUkVMRUFTRSIKKwlleGl0IDs7CiBlc2FjCiAKKyMgTm8gdW5hbWUgY29tbWFuZCBvciB1bmFtZSBvdXRwdXQgbm90IHJlY29nbml6ZWQuCitzZXRfY2NfZm9yX2J1aWxkCitjYXQgPiAiJGR1bW15LmMiIDw8RU9GCisjaWZkZWYgX1NFUVVFTlRfCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQodWx0cml4KSB8fCBkZWZpbmVkKF91bHRyaXgpIHx8IGRlZmluZWQoX191bHRyaXgpIHx8IGRlZmluZWQoX191bHRyaXhfXykKKyNpZiBkZWZpbmVkICh2YXgpIHx8IGRlZmluZWQgKF9fdmF4KSB8fCBkZWZpbmVkIChfX3ZheF9fKSB8fCBkZWZpbmVkKG1pcHMpIHx8IGRlZmluZWQoX19taXBzKSB8fCBkZWZpbmVkKF9fbWlwc19fKSB8fCBkZWZpbmVkKE1JUFMpIHx8IGRlZmluZWQoX19NSVBTX18pCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaWYgZGVmaW5lZChfU0laRV9UXykgfHwgZGVmaW5lZChTSUdMT1NUKQorI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCittYWluICgpCit7CisjaWYgZGVmaW5lZCAoc29ueSkKKyNpZiBkZWZpbmVkIChNSVBTRUIpCisgIC8qIEJGRCB3YW50cyAiYnNkIiBpbnN0ZWFkIG9mICJuZXdzb3MiLiAgUGVyaGFwcyBCRkQgc2hvdWxkIGJlIGNoYW5nZWQsCisgICAgIEkgZG9uJ3Qga25vdy4uLi4gICovCisgIHByaW50ZiAoIm1pcHMtc29ueS1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisgIHByaW50ZiAoIm02OGstc29ueS1uZXdzb3Mlc1xuIiwKKyNpZmRlZiBORVdTT1M0CisgICI0IgorI2Vsc2UKKyAgIiIKKyNlbmRpZgorICApOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChOZVhUKQorI2lmICFkZWZpbmVkIChfX0FSQ0hJVEVDVFVSRV9fKQorI2RlZmluZSBfX0FSQ0hJVEVDVFVSRV9fICJtNjhrIgorI2VuZGlmCisgIGludCB2ZXJzaW9uOworICB2ZXJzaW9uPSQoIChob3N0aW5mbyB8IHNlZCAtbiAncy8uKk5lWFQgTWFjaCBcKFswLTldKlwpLiovXDEvcCcpIDI+L2Rldi9udWxsKTsKKyAgaWYgKHZlcnNpb24gPCA0KQorICAgIHByaW50ZiAoIiVzLW5leHQtbmV4dHN0ZXAlZFxuIiwgX19BUkNISVRFQ1RVUkVfXywgdmVyc2lvbik7CisgIGVsc2UKKyAgICBwcmludGYgKCIlcy1uZXh0LW9wZW5zdGVwJWRcbiIsIF9fQVJDSElURUNUVVJFX18sIHZlcnNpb24pOworICBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoTVVMVElNQVgpIHx8IGRlZmluZWQgKG4xNikKKyNpZiBkZWZpbmVkIChVTUFYVikKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLXN5c3ZcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisjaWYgZGVmaW5lZCAoQ01VKQorICBwcmludGYgKCJuczMyay1lbmNvcmUtbWFjaFxuIik7IGV4aXQgKDApOworI2Vsc2UKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX18zODZCU0RfXykKKyAgcHJpbnRmICgiaTM4Ni1wYy1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoc2VxdWVudCkKKyNpZiBkZWZpbmVkIChpMzg2KQorICBwcmludGYgKCJpMzg2LXNlcXVlbnQtZHluaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2lmIGRlZmluZWQgKG5zMzIwMDApCisgIHByaW50ZiAoIm5zMzJrLXNlcXVlbnQtZHluaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfU0VRVUVOVF8pCisgIHN0cnVjdCB1dHNuYW1lIHVuOworCisgIHVuYW1lKCZ1bik7CisgIGlmIChzdHJuY21wKHVuLnZlcnNpb24sICJWMiIsIDIpID09IDApIHsKKyAgICBwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4MlxuIik7IGV4aXQgKDApOworICB9CisgIGlmIChzdHJuY21wKHVuLnZlcnNpb24sICJWMSIsIDIpID09IDApIHsgLyogWFhYIGlzIFYxIGNvcnJlY3Q/ICovCisgICAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eDFcbiIpOyBleGl0ICgwKTsKKyAgfQorICBwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKHZheCkKKyNpZiAhZGVmaW5lZCAodWx0cml4KQorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2lmIGRlZmluZWQgKEJTRCkKKyNpZiBCU0QgPT0gNDMKKyAgcHJpbnRmICgidmF4LWRlYy1ic2Q0LjNcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisjaWYgQlNEID09IDE5OTAwNgorICBwcmludGYgKCJ2YXgtZGVjLWJzZDQuM3Jlbm9cbiIpOyBleGl0ICgwKTsKKyNlbHNlCisgIHByaW50ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgorI2Vsc2UKKyAgcHJpbnRmICgidmF4LWRlYy1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2Vsc2UKKyNpZiBkZWZpbmVkKF9TSVpFX1RfKSB8fCBkZWZpbmVkKFNJR0xPU1QpCisgIHN0cnVjdCB1dHNuYW1lIHVuOworICB1bmFtZSAoJnVuKTsKKyAgcHJpbnRmICgidmF4LWRlYy11bHRyaXglc1xuIiwgdW4ucmVsZWFzZSk7IGV4aXQgKDApOworI2Vsc2UKKyAgcHJpbnRmICgidmF4LWRlYy11bHRyaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKHVsdHJpeCkgfHwgZGVmaW5lZChfdWx0cml4KSB8fCBkZWZpbmVkKF9fdWx0cml4KSB8fCBkZWZpbmVkKF9fdWx0cml4X18pCisjaWYgZGVmaW5lZChtaXBzKSB8fCBkZWZpbmVkKF9fbWlwcykgfHwgZGVmaW5lZChfX21pcHNfXykgfHwgZGVmaW5lZChNSVBTKSB8fCBkZWZpbmVkKF9fTUlQU19fKQorI2lmIGRlZmluZWQoX1NJWkVfVF8pIHx8IGRlZmluZWQoU0lHTE9TVCkKKyAgc3RydWN0IHV0c25hbWUgKnVuOworICB1bmFtZSAoJnVuKTsKKyAgcHJpbnRmICgibWlwcy1kZWMtdWx0cml4JXNcbiIsIHVuLnJlbGVhc2UpOyBleGl0ICgwKTsKKyNlbHNlCisgIHByaW50ZiAoIm1pcHMtZGVjLXVsdHJpeFxuIik7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoYWxsaWFudCkgJiYgZGVmaW5lZCAoaTg2MCkKKyAgcHJpbnRmICgiaTg2MC1hbGxpYW50LWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyAgZXhpdCAoMSk7Cit9CitFT0YKKworJENDX0ZPUl9CVUlMRCAtbyAiJGR1bW15IiAiJGR1bW15LmMiIDI+L2Rldi9udWxsICYmIFNZU1RFTV9OQU1FPSQoJGR1bW15KSAmJgorCXsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCisjIEFwb2xsb3MgcHV0IHRoZSBzeXN0ZW0gdHlwZSBpbiB0aGUgZW52aXJvbm1lbnQuCit0ZXN0IC1kIC91c3IvYXBvbGxvICYmIHsgZWNobyAiJElTUC1hcG9sbG8tJFNZU1RZUEUiOyBleGl0OyB9CisKIGVjaG8gIiQwOiB1bmFibGUgdG8gZ3Vlc3Mgc3lzdGVtIHR5cGUiID4mMgogCiBjYXNlICIkVU5BTUVfTUFDSElORTokVU5BTUVfU1lTVEVNIiBpbgpAQCAtMTQzNSw5ICsxNjUzLDE1IEBACiBvcGVyYXRpbmcgc3lzdGVtIHlvdSBhcmUgdXNpbmcuIElmIHlvdXIgc2NyaXB0IGlzIG9sZCwgb3ZlcndyaXRlICphbGwqCiBjb3BpZXMgb2YgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9ucyBmcm9tOgogCi0gIGh0dHBzOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLmd1ZXNzCisgIGh0dHBzOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9jb25maWcuZ2l0L3BsYWluL2NvbmZpZy5ndWVzcwogYW5kCi0gIGh0dHBzOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLnN1YgorICBodHRwczovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvY29uZmlnLmdpdC9wbGFpbi9jb25maWcuc3ViCitFT0YKKworeWVhcj0kKGVjaG8gJHRpbWVzdGFtcCB8IHNlZCAncywtLiosLCcpCisjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIwMDMKK2lmIHRlc3QgIiQoZXhwciAiJChkYXRlICslWSkiIC0gIiR5ZWFyIikiIC1sdCAzIDsgdGhlbgorICAgY2F0ID4mMiA8PEVPRgogCiBJZiAkMCBoYXMgYWxyZWFkeSBiZWVuIHVwZGF0ZWQsIHNlbmQgdGhlIGZvbGxvd2luZyBkYXRhIGFuZCBhbnkKIGluZm9ybWF0aW9uIHlvdSB0aGluayBtaWdodCBiZSBwZXJ0aW5lbnQgdG8gY29uZmlnLXBhdGNoZXNAZ251Lm9yZyB0bwpAQCAtMTQ0NSwyNiArMTY2OSwyNyBAQAogCiBjb25maWcuZ3Vlc3MgdGltZXN0YW1wID0gJHRpbWVzdGFtcAogCi11bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKLXVuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAotdW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCi11bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1tID0gJCggKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd24pCit1bmFtZSAtciA9ICQoICh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duKQordW5hbWUgLXMgPSAkKCAodW5hbWUgLXMpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bikKK3VuYW1lIC12ID0gJCggKHVuYW1lIC12KSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd24pCiAKLS91c3IvYmluL3VuYW1lIC1wID0gYCgvdXNyL2Jpbi91bmFtZSAtcCkgMj4vZGV2L251bGxgCi0vYmluL3VuYW1lIC1YICAgICA9IGAoL2Jpbi91bmFtZSAtWCkgMj4vZGV2L251bGxgCisvdXNyL2Jpbi91bmFtZSAtcCA9ICQoICgvdXNyL2Jpbi91bmFtZSAtcCkgMj4vZGV2L251bGwpCisvYmluL3VuYW1lIC1YICAgICA9ICQoICgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbCkKIAotaG9zdGluZm8gICAgICAgICAgICAgICA9IGAoaG9zdGluZm8pIDI+L2Rldi9udWxsYAotL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGxgCi0vdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbGAKLS9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGxgCi0vdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbGAKLS91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsYAoraG9zdGluZm8gICAgICAgICAgICAgICA9ICQoIChob3N0aW5mbykgMj4vZGV2L251bGwpCisvYmluL3VuaXZlcnNlICAgICAgICAgID0gJCggKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsKQorL3Vzci9iaW4vYXJjaCAtayAgICAgICA9ICQoICgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbCkKKy9iaW4vYXJjaCAgICAgICAgICAgICAgPSAkKCAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbCkKKy91c3IvYmluL29zbGV2ZWwgICAgICAgPSAkKCAoL3Vzci9iaW4vb3NsZXZlbCkgMj4vZGV2L251bGwpCisvdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gJCggKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsKQogCiBVTkFNRV9NQUNISU5FID0gIiRVTkFNRV9NQUNISU5FIgogVU5BTUVfUkVMRUFTRSA9ICIkVU5BTUVfUkVMRUFTRSIKIFVOQU1FX1NZU1RFTSAgPSAiJFVOQU1FX1NZU1RFTSIKIFVOQU1FX1ZFUlNJT04gPSAiJFVOQU1FX1ZFUlNJT04iCiBFT0YKK2ZpCiAKIGV4aXQgMQogCmRpZmYgLS1naXQgYS9jb25maWcuaCBiL2NvbmZpZy5oCmluZGV4IDRiYWUyZWMuLmFhMjNjNmEgMTAwNjQ0Ci0tLSBhL2NvbmZpZy5oCisrKyBiL2NvbmZpZy5oCkBAIC0xNiw2ICsxNiw5IEBACiAvKiBkZWZpbmUgaWYgd2UgaGF2ZSB0aGUgQUlYIGdldHByb3RvYnluYW1lX3IoKSAqLwogLyogI3VuZGVmIEhBVkVfQUlYX0dFVFBST1RPQllOQU1FX1IgKi8KIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhc3ByaW50ZicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQVNQUklOVEYgMQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRhZ2FwaS5oPiBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX0RBR0FQSV9IICovCiAKQEAgLTU1LDYgKzU4LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0c3BuYW0nIGZ1bmN0aW9uLiAqLwogLyogI3VuZGVmIEhBVkVfR0VUU1BOQU0gKi8KIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSBHTlUtc3R5bGUgYHN0cmVycm9yX3InIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dOVV9TVFJFUlJPUl9SIC8qKi8KKwogLyogb24gSFAtVVggMTAuMjAgb3IgbGF0ZXIgKi8KIC8qICN1bmRlZiBIQVZFX0hQVVgxMF8yMF9PUl9MQVRFUiAqLwogCkBAIC0xNTEsNiArMTU3LDkgQEAKIC8qIGRlZmluZSBpZiBuZXQvcGZ2YXIuaCBkZWZpbmVzIFBGX05BVCB0aHJvdWdoIFBGX05PUkRSICovCiAvKiAjdW5kZWYgSEFWRV9QRl9OQVRfVEhST1VHSF9QRl9OT1JEUiAqLwogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIFBPU0lYLXN0eWxlIGBzdHJlcnJvcl9yJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QT1NJWF9TVFJFUlJPUl9SIDEKKwogLyogZGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBTZXB0ZWwgQVBJICovCiAvKiAjdW5kZWYgSEFWRV9TRVBURUxfQVBJICovCiAKQEAgLTE4MSw5ICsxOTAsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJlcnJvcicgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfU1RSRVJST1IgMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmVycm9yX3InIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NUUkVSUk9SX1IgMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmVycm9yX3MnIGZ1bmN0aW9uLiAqLwogLyogI3VuZGVmIEhBVkVfU1RSRVJST1JfUyAqLwogCkBAIC0yNjcsOSArMjczLDE1IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9VTklTVERfSCAxCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdmFzcHJpbnRmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9WQVNQUklOVEYgMQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHZzbnByaW50ZicgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfVlNOUFJJTlRGIDEKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB2c3lzbG9nJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9WU1lTTE9HIDEKKwogLyogSVB2NiAqLwogI2RlZmluZSBJTkVUNiAxCiAKQEAgLTI5OCw3ICszMTAsNyBAQAogI2RlZmluZSBQQUNLQUdFX05BTUUgInBjYXAiCiAKIC8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgInBjYXAgMS45LjAtUFJFLUdJVCIKKyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgInBjYXAgMS45LjEiCiAKIC8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KICNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICJwY2FwIgpAQCAtMzA3LDcgKzMxOSw3IEBACiAjZGVmaW5lIFBBQ0tBR0VfVVJMICIiCiAKIC8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCi0jZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiMS45LjAtUFJFLUdJVCIKKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIxLjkuMSIKIAogLyogdGFyZ2V0IGhvc3Qgc3VwcG9ydHMgQmx1ZXRvb3RoIHNuaWZmaW5nICovCiAvKiAjdW5kZWYgUENBUF9TVVBQT1JUX0JUICovCmRpZmYgLS1naXQgYS9jb25maWcuaC5pbiBiL2NvbmZpZy5oLmluCmluZGV4IGIxYTIwYTQuLjAwNjE4YWUgMTAwNjQ0Ci0tLSBhL2NvbmZpZy5oLmluCisrKyBiL2NvbmZpZy5oLmluCkBAIC0xNSw2ICsxNSwxMiBAQAogLyogZGVmaW5lIGlmIHdlIGhhdmUgdGhlIEFJWCBnZXRwcm90b2J5bmFtZV9yKCkgKi8KICN1bmRlZiBIQVZFX0FJWF9HRVRQUk9UT0JZTkFNRV9SCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYXNwcmludGYnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfQVNQUklOVEYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxjb25maWcvSGFpa3VDb25maWcuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9DT05GSUdfSEFJS1VDT05GSUdfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRhZ2FwaS5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0RBR0FQSV9ICiAKQEAgLTU0LDYgKzYwLDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0c3BuYW0nIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfR0VUU1BOQU0KIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSBHTlUtc3R5bGUgYHN0cmVycm9yX3InIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR05VX1NUUkVSUk9SX1IKKwogLyogb24gSFAtVVggMTAuMjAgb3IgbGF0ZXIgKi8KICN1bmRlZiBIQVZFX0hQVVgxMF8yMF9PUl9MQVRFUgogCkBAIC03Miw0NSArODEsMjEgQEAKIC8qIGlmIGxpYm5sIGV4aXN0cyAqLwogI3VuZGVmIEhBVkVfTElCTkwKIAotLyogaWYgbGlibmwgZXhpc3RzIGFuZCBpcyB2ZXJzaW9uIDIueCAqLwotI3VuZGVmIEhBVkVfTElCTkxfMl94Ci0KLS8qIGlmIGxpYm5sIGV4aXN0cyBhbmQgaXMgdmVyc2lvbiAzLnggKi8KLSN1bmRlZiBIQVZFX0xJQk5MXzNfeAotCi0vKiBsaWJubCBoYXMgTkxFX0ZBSUxVUkUgKi8KLSN1bmRlZiBIQVZFX0xJQk5MX05MRQotCi0vKiBsaWJubCBoYXMgbmV3LXN0eWxlIHNvY2tldCBhcGkgKi8KLSN1bmRlZiBIQVZFX0xJQk5MX1NPQ0tFVFMKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW1pdHMuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9MSU1JVFNfSAotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2NvbXBpbGVyLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTElOVVhfQ09NUElMRVJfSAogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2V0aHRvb2wuaD4gaGVhZGVyIGZpbGUuICovCi0jdW5kZWYgSEFWRV9MSU5VWF9FVEhUT09MX0gKLQogLyogZGVmaW5lIGlmIHdlIGhhdmUgdGhlIExpbnV4IGdldG5ldGJ5bmFtZV9yKCkgKi8KICN1bmRlZiBIQVZFX0xJTlVYX0dFVE5FVEJZTkFNRV9SCiAKIC8qIGRlZmluZSBpZiB3ZSBoYXZlIHRoZSBMaW51eCBnZXRwcm90b2J5bmFtZV9yKCkgKi8KICN1bmRlZiBIQVZFX0xJTlVYX0dFVFBST1RPQllOQU1FX1IKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9pZl9ib25kaW5nLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfTElOVVhfSUZfQk9ORElOR19ICi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvbmV0X3RzdGFtcC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0xJTlVYX05FVF9UU1RBTVBfSAogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L3NvY2tldC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0xJTlVYX1NPQ0tFVF9ICiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvc29ja2lvcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX0xJTlVYX1NPQ0tJT1NfSAotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L3VzYmRldmljZV9mcy5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0xJTlVYX1VTQkRFVklDRV9GU19ICiAKQEAgLTEyOSw5ICsxMTQsMTggQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0L2VuZXQuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9ORVRfRU5FVF9ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0L2lmX2RsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkVUX0lGX0RMX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXQvaWYuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ORVRfSUZfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldC9pZl9tZWRpYS5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX05FVF9JRl9NRURJQV9ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0L2lmX3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkVUX0lGX1RZUEVTX0gKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXQvbml0Lmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTkVUX05JVF9ICiAKQEAgLTE0NCwyMSArMTM4LDI0IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldC9yYXcuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9ORVRfUkFXX0gKIAorLyogVXNlIE9wZW5TU0wgKi8KKyN1bmRlZiBIQVZFX09QRU5TU0wKKwogLyogaWYgdGhlcmUncyBhbiBvc19wcm90by5oIGZvciB0aGlzIHBsYXRmb3JtLCB0byB1c2UgYWRkaXRpb25hbCBwcm90b3R5cGVzICovCiAjdW5kZWYgSEFWRV9PU19QUk9UT19ICiAKIC8qIGRlZmluZSBpZiBuZXQvcGZ2YXIuaCBkZWZpbmVzIFBGX05BVCB0aHJvdWdoIFBGX05PUkRSICovCiAjdW5kZWYgSEFWRV9QRl9OQVRfVEhST1VHSF9QRl9OT1JEUgogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBhIFBPU0lYLXN0eWxlIGBzdHJlcnJvcl9yJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1BPU0lYX1NUUkVSUk9SX1IKKwogLyogZGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBTZXB0ZWwgQVBJICovCiAjdW5kZWYgSEFWRV9TRVBURUxfQVBJCiAKIC8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0aGUgTXlyaWNvbSBTTkYgQVBJICovCiAjdW5kZWYgSEFWRV9TTkZfQVBJCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc25wcmludGYnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfU05QUklOVEYKLQogLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHNvY2tsZW5fdCcuICovCiAjdW5kZWYgSEFWRV9TT0NLTEVOX1QKIApAQCAtMTgwLDEyICsxNzcsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJlcnJvcicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9TVFJFUlJPUgogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmVycm9yX3InIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfU1RSRVJST1JfUgotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmVycm9yX3MnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfU1RSRVJST1JfUwotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9TVFJJTkdTX0gKIApAQCAtMjEzLDYgKzIwNCw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiBgbXNnX2ZsYWdzJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IG1zZ2hkcicuICovCiAjdW5kZWYgSEFWRV9TVFJVQ1RfTVNHSERSX01TR19GTEFHUwogCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgc3RydWN0IHJ0ZV9ldGhlcl9hZGRyJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9SVEVfRVRIRVJfQUREUgorCiAvKiBEZWZpbmUgdG8gMSBpZiBgaGNpX2NoYW5uZWwnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc29ja2FkZHJfaGNpJy4gKi8KICN1bmRlZiBIQVZFX1NUUlVDVF9TT0NLQUREUl9IQ0lfSENJX0NIQU5ORUwKIApAQCAtMjI1LDkgKzIxOSw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiBgdHBfdmxhbl90Y2knIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgdHBhY2tldF9hdXhkYXRhJy4gKi8KICN1bmRlZiBIQVZFX1NUUlVDVF9UUEFDS0VUX0FVWERBVEFfVFBfVkxBTl9UQ0kKIAotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHN0cnVjdCB0cGFja2V0X3N0YXRzJy4gKi8KLSN1bmRlZiBIQVZFX1NUUlVDVF9UUEFDS0VUX1NUQVRTCi0KIC8qIERlZmluZSB0byAxIGlmIGBiUmVxdWVzdFR5cGUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QKICAgIHVzYmRldmZzX2N0cmx0cmFuc2ZlcicuICovCiAjdW5kZWYgSEFWRV9TVFJVQ1RfVVNCREVWRlNfQ1RSTFRSQU5TRkVSX0JSRVFVRVNUVFlQRQpAQCAtMjYyLDE1ICsyNTMsMTggQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfVU5JU1REX0gKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB2c25wcmludGYnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfVlNOUFJJTlRGCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHZhc3ByaW50ZicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9WQVNQUklOVEYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB2c3lzbG9nJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1ZTWVNMT0cKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfd2NzZXJyb3JfcycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9fV0NTRVJST1JfUwogCiAvKiBJUHY2ICovCiAjdW5kZWYgSU5FVDYKIAotLyogaWYgdW5hbGlnbmVkIGFjY2VzcyBmYWlscyAqLwotI3VuZGVmIExCTF9BTElHTgotCiAvKiBwYXRoIGZvciBkZXZpY2UgZm9yIFVTQiBzbmlmZmluZyAqLwogI3VuZGVmIExJTlVYX1VTQl9NT05fREVWCiAKQEAgLTMxMywyNCArMzA3LDIxIEBACiAvKiBzdXBwb3J0IEQtQnVzIHNuaWZmaW5nICovCiAjdW5kZWYgUENBUF9TVVBQT1JUX0RCVVMKIAorLyogdGFyZ2V0IGhvc3Qgc3VwcG9ydHMgRFBESyAqLworI3VuZGVmIFBDQVBfU1VQUE9SVF9EUERLCisKKy8qIHRhcmdldCBob3N0IHN1cHBvcnRzIExpbnV4IHVzYm1vbiBmb3IgVVNCIHNuaWZmaW5nICovCisjdW5kZWYgUENBUF9TVVBQT1JUX0xJTlVYX1VTQk1PTgorCiAvKiB0YXJnZXQgaG9zdCBzdXBwb3J0cyBuZXRmaWx0ZXIgc25pZmZpbmcgKi8KICN1bmRlZiBQQ0FQX1NVUFBPUlRfTkVURklMVEVSCiAKIC8qIHRhcmdldCBob3N0IHN1cHBvcnRzIG5ldG1hcCAqLwogI3VuZGVmIFBDQVBfU1VQUE9SVF9ORVRNQVAKIAotLyogdXNlIHBhY2tldCByaW5nIGNhcHR1cmUgc3VwcG9ydCBvbiBMaW51eCBpZiBhdmFpbGFibGUgKi8KLSN1bmRlZiBQQ0FQX1NVUFBPUlRfUEFDS0VUX1JJTkcKLQogLyogdGFyZ2V0IGhvc3Qgc3VwcG9ydHMgUkRNQSBzbmlmZmluZyAqLwogI3VuZGVmIFBDQVBfU1VQUE9SVF9SRE1BU05JRkYKIAotLyogdGFyZ2V0IGhvc3Qgc3VwcG9ydHMgVVNCIHNuaWZmaW5nICovCi0jdW5kZWYgUENBUF9TVVBQT1JUX1VTQgotCi0vKiBpbmNsdWRlIEFDTiBzdXBwb3J0ICovCi0jdW5kZWYgU0lUQQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KICN1bmRlZiBTVERDX0hFQURFUlMKIApkaWZmIC0tZ2l0IGEvY29uZmlnLnN1YiBiL2NvbmZpZy5zdWIKaW5kZXggYzk1YWNjNi4uOTBiYjhhZSAxMDA3NTUKLS0tIGEvY29uZmlnLnN1YgorKysgYi9jb25maWcuc3ViCkBAIC0xLDggKzEsOCBAQAogIyEgL2Jpbi9zaAogIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCi0jICAgQ29weXJpZ2h0IDE5OTItMjAxOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBDb3B5cmlnaHQgMTk5Mi0yMDIwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi10aW1lc3RhbXA9JzIwMTgtMDctMDMnCit0aW1lc3RhbXA9JzIwMjAtMTItMjInCiAKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTMzLDcgKzMzLDcgQEAKICMgT3RoZXJ3aXNlLCB3ZSBwcmludCB0aGUgY2Fub25pY2FsIGNvbmZpZyB0eXBlIG9uIHN0ZG91dCBhbmQgc3VjY2VlZC4KIAogIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3JpcHQgZnJvbToKLSMgaHR0cHM6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViCisjIGh0dHBzOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9jb25maWcuZ2l0L3BsYWluL2NvbmZpZy5zdWIKIAogIyBUaGlzIGZpbGUgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHNhbWUgZm9yIGFsbCBHTlUgcGFja2FnZXMKICMgYW5kIHJlY29nbml6ZSBhbGwgdGhlIENQVSB0eXBlcywgc3lzdGVtIHR5cGVzIGFuZCBhbGlhc2VzCkBAIC01MCw3ICs1MCw3IEBACiAjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQogIyBJdCBpcyB3cm9uZyB0byBlY2hvIGFueSBvdGhlciB0eXBlIG9mIHNwZWNpZmljYXRpb24uCiAKLW1lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorbWU9JChlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnKQogCiB1c2FnZT0iXAogVXNhZ2U6ICQwIFtPUFRJT05dIENQVS1NRlItT1BTWVMgb3IgQUxJQVMKQEAgLTY3LDcgKzY3LDcgQEAKIHZlcnNpb249IlwKIEdOVSBjb25maWcuc3ViICgkdGltZXN0YW1wKQogCi1Db3B5cmlnaHQgMTk5Mi0yMDE4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorQ29weXJpZ2h0IDE5OTItMjAyMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKQEAgLTg5LDcgKzg5LDcgQEAKICAgICAtICkJIyBVc2Ugc3RkaW4gYXMgaW5wdXQuCiAgICAgICAgYnJlYWsgOzsKICAgICAtKiApCi0gICAgICAgZWNobyAiJG1lOiBpbnZhbGlkIG9wdGlvbiAkMSRoZWxwIgorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIgPiYyCiAgICAgICAgZXhpdCAxIDs7CiAKICAgICAqbG9jYWwqKQpAQCAtMTExLDcgKzExMSw4IEBACiBlc2FjCiAKICMgU3BsaXQgZmllbGRzIG9mIGNvbmZpZ3VyYXRpb24gdHlwZQotSUZTPSItIiByZWFkIC1yIGZpZWxkMSBmaWVsZDIgZmllbGQzIGZpZWxkNCA8PEVPRgorIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMTYyCitJRlM9Ii0iIHJlYWQgZmllbGQxIGZpZWxkMiBmaWVsZDMgZmllbGQ0IDw8RU9GCiAkMQogRU9GCiAKQEAgLTEyMyw1NSArMTI0LDY0IEBACiAJCTs7CiAJKi0qLSotKikKIAkJYmFzaWNfbWFjaGluZT0kZmllbGQxLSRmaWVsZDIKLQkJb3M9JGZpZWxkMy0kZmllbGQ0CisJCWJhc2ljX29zPSRmaWVsZDMtJGZpZWxkNAogCQk7OwogCSotKi0qKQogCQkjIEFtYmlndW91cyB3aGV0aGVyIENPTVBBTlkgaXMgcHJlc2VudCwgb3Igc2tpcHBlZCBhbmQgS0VSTkVMLU9TIGlzIHR3bwogCQkjIHBhcnRzCiAJCW1heWJlX29zPSRmaWVsZDItJGZpZWxkMwogCQljYXNlICRtYXliZV9vcyBpbgotCQkJbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtYW5kcm9pZCogfCBsaW51eC1kaWV0bGliYyBcCi0JCQl8IGxpbnV4LW5ld2xpYiogfCBsaW51eC1tdXNsKiB8IGxpbnV4LXVjbGliYyogfCB1Y2xpbnV4LXVjbGliYyogXAorCQkJbnRvLXFueCogfCBsaW51eC0qIHwgdWNsaW51eC11Y2xpYmMqIFwKIAkJCXwgdWNsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIFwKIAkJCXwgbmV0YnNkKi1lYWJpKiB8IGtvcGVuc29sYXJpcyotZ251KiB8IGNsb3VkYWJpKi1lYWJpKiBcCiAJCQl8IHN0b3JtLWNoYW9zKiB8IG9zMi1lbXgqIHwgcnRtay1ub3ZhKikKIAkJCQliYXNpY19tYWNoaW5lPSRmaWVsZDEKLQkJCQlvcz0kbWF5YmVfb3MKKwkJCQliYXNpY19vcz0kbWF5YmVfb3MKIAkJCQk7OwogCQkJYW5kcm9pZC1saW51eCkKIAkJCQliYXNpY19tYWNoaW5lPSRmaWVsZDEtdW5rbm93bgotCQkJCW9zPWxpbnV4LWFuZHJvaWQKKwkJCQliYXNpY19vcz1saW51eC1hbmRyb2lkCiAJCQkJOzsKIAkJCSopCiAJCQkJYmFzaWNfbWFjaGluZT0kZmllbGQxLSRmaWVsZDIKLQkJCQlvcz0kZmllbGQzCisJCQkJYmFzaWNfb3M9JGZpZWxkMwogCQkJCTs7CiAJCWVzYWMKIAkJOzsKIAkqLSopCi0JCSMgU2Vjb25kIGNvbXBvbmVudCBpcyB1c3VhbGx5LCBidXQgbm90IGFsd2F5cyB0aGUgT1MKLQkJY2FzZSAkZmllbGQyIGluCi0JCQkjIFByZXZlbnQgZm9sbG93aW5nIGNsYXVzZSBmcm9tIGhhbmRsaW5nIHRoaXMgdmFsaWQgb3MKLQkJCXN1bipvcyopCi0JCQkJYmFzaWNfbWFjaGluZT0kZmllbGQxCi0JCQkJb3M9JGZpZWxkMgorCQkjIEEgbG9uZSBjb25maWcgd2UgaGFwcGVuIHRvIG1hdGNoIG5vdCBmaXR0aW5nIGFueSBwYXR0ZXJuCisJCWNhc2UgJGZpZWxkMS0kZmllbGQyIGluCisJCQlkZWNzdGF0aW9uLTMxMDApCisJCQkJYmFzaWNfbWFjaGluZT1taXBzLWRlYworCQkJCWJhc2ljX29zPQogCQkJCTs7Ci0JCQkjIE1hbnVmYWN0dXJlcnMKLQkJCWRlYyogfCBtaXBzKiB8IHNlcXVlbnQqIHwgZW5jb3JlKiB8IHBjNTMyKiB8IHNnaSogfCBzb255KiBcCi0JCQl8IGF0dCogfCA3MzAwKiB8IDMzMDAqIHwgZGVsdGEqIHwgbW90b3JvbGEqIHwgc3VuWzIzNF0qIFwKLQkJCXwgdW5pY29tKiB8IGlibSogfCBuZXh0IHwgaHAgfCBpc2kqIHwgYXBvbGxvIHwgYWx0b3MqIFwKLQkJCXwgY29udmVyZ2VudCogfCBuY3IqIHwgbmV3cyB8IDMyKiB8IDM2MDAqIHwgMzEwMCogfCBoaXRhY2hpKiBcCi0JCQl8IGNbMTIzXSogfCBjb252ZXgqIHwgc3VuIHwgY3JkcyB8IG9tcm9uKiB8IGRnIHwgdWx0cmEgfCB0dGkqIFwKLQkJCXwgaGFycmlzIHwgZG9scGhpbiB8IGhpZ2hsZXZlbCB8IGdvdWxkIHwgY2JtIHwgbnMgfCBtYXNzY29tcCBcCi0JCQl8IGFwcGxlIHwgYXhpcyB8IGtudXRoIHwgY3JheSB8IG1pY3JvYmxhemUqIFwKLQkJCXwgc2ltIHwgY2lzY28gfCBva2kgfCB3ZWMgfCB3cnMgfCB3aW5ib25kKQotCQkJCWJhc2ljX21hY2hpbmU9JGZpZWxkMS0kZmllbGQyCi0JCQkJb3M9Ci0JCQkJOzsKLQkJCSopCi0JCQkJYmFzaWNfbWFjaGluZT0kZmllbGQxCi0JCQkJb3M9JGZpZWxkMgotCQkJCTs7CisJCQkqLSopCisJCQkJIyBTZWNvbmQgY29tcG9uZW50IGlzIHVzdWFsbHksIGJ1dCBub3QgYWx3YXlzIHRoZSBPUworCQkJCWNhc2UgJGZpZWxkMiBpbgorCQkJCQkjIFByZXZlbnQgZm9sbG93aW5nIGNsYXVzZSBmcm9tIGhhbmRsaW5nIHRoaXMgdmFsaWQgb3MKKwkJCQkJc3VuKm9zKikKKwkJCQkJCWJhc2ljX21hY2hpbmU9JGZpZWxkMQorCQkJCQkJYmFzaWNfb3M9JGZpZWxkMgorCQkJCQkJOzsKKwkJCQkJIyBNYW51ZmFjdHVyZXJzCisJCQkJCWRlYyogfCBtaXBzKiB8IHNlcXVlbnQqIHwgZW5jb3JlKiB8IHBjNTMzKiB8IHNnaSogfCBzb255KiBcCisJCQkJCXwgYXR0KiB8IDczMDAqIHwgMzMwMCogfCBkZWx0YSogfCBtb3Rvcm9sYSogfCBzdW5bMjM0XSogXAorCQkJCQl8IHVuaWNvbSogfCBpYm0qIHwgbmV4dCB8IGhwIHwgaXNpKiB8IGFwb2xsbyB8IGFsdG9zKiBcCisJCQkJCXwgY29udmVyZ2VudCogfCBuY3IqIHwgbmV3cyB8IDMyKiB8IDM2MDAqIHwgMzEwMCogXAorCQkJCQl8IGhpdGFjaGkqIHwgY1sxMjNdKiB8IGNvbnZleCogfCBzdW4gfCBjcmRzIHwgb21yb24qIHwgZGcgXAorCQkJCQl8IHVsdHJhIHwgdHRpKiB8IGhhcnJpcyB8IGRvbHBoaW4gfCBoaWdobGV2ZWwgfCBnb3VsZCBcCisJCQkJCXwgY2JtIHwgbnMgfCBtYXNzY29tcCB8IGFwcGxlIHwgYXhpcyB8IGtudXRoIHwgY3JheSBcCisJCQkJCXwgbWljcm9ibGF6ZSogfCBzaW0gfCBjaXNjbyBcCisJCQkJCXwgb2tpIHwgd2VjIHwgd3JzIHwgd2luYm9uZCkKKwkJCQkJCWJhc2ljX21hY2hpbmU9JGZpZWxkMS0kZmllbGQyCisJCQkJCQliYXNpY19vcz0KKwkJCQkJCTs7CisJCQkJCSopCisJCQkJCQliYXNpY19tYWNoaW5lPSRmaWVsZDEKKwkJCQkJCWJhc2ljX29zPSRmaWVsZDIKKwkJCQkJCTs7CisJCQkJZXNhYworCQkJOzsKIAkJZXNhYwogCQk7OwogCSopCkBAIC0xODAsMTEwNSArMTkwLDEwODkgQEAKIAkJY2FzZSAkZmllbGQxIGluCiAJCQkzODZic2QpCiAJCQkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCi0JCQkJb3M9YnNkCisJCQkJYmFzaWNfb3M9YnNkCiAJCQkJOzsKIAkJCWEyOWtoaWYpCiAJCQkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAotCQkJCW9zPXVkaQorCQkJCWJhc2ljX29zPXVkaQogCQkJCTs7CiAJCQlhZG9iZTY4aykKIAkJCQliYXNpY19tYWNoaW5lPW02ODAxMC1hZG9iZQotCQkJCW9zPXNjb3V0CisJCQkJYmFzaWNfb3M9c2NvdXQKKwkJCQk7OworCQkJYWxsaWFudCkKKwkJCQliYXNpY19tYWNoaW5lPWZ4ODAtYWxsaWFudAorCQkJCWJhc2ljX29zPQorCQkJCTs7CisJCQlhbHRvcyB8IGFsdG9zMzA2OCkKKwkJCQliYXNpY19tYWNoaW5lPW02OGstYWx0b3MKKwkJCQliYXNpY19vcz0KIAkJCQk7OwogCQkJYW0yOWspCiAJCQkJYmFzaWNfbWFjaGluZT1hMjlrLW5vbmUKLQkJCQlvcz1ic2QKKwkJCQliYXNpY19vcz1ic2QKIAkJCQk7OwogCQkJYW1kYWhsKQogCQkJCWJhc2ljX21hY2hpbmU9NTgwLWFtZGFobAotCQkJCW9zPXN5c3YKKwkJCQliYXNpY19vcz1zeXN2CisJCQkJOzsKKwkJCWFtaWdhKQorCQkJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCQkJYmFzaWNfb3M9CiAJCQkJOzsKIAkJCWFtaWdhb3MgfCBhbWlnYWRvcykKIAkJCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgotCQkJCW9zPWFtaWdhb3MKKwkJCQliYXNpY19vcz1hbWlnYW9zCiAJCQkJOzsKIAkJCWFtaWdhdW5peCB8IGFtaXgpCiAJCQkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KLQkJCQlvcz1zeXN2NAorCQkJCWJhc2ljX29zPXN5c3Y0CiAJCQkJOzsKIAkJCWFwb2xsbzY4KQogCQkJCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KLQkJCQlvcz1zeXN2CisJCQkJYmFzaWNfb3M9c3lzdgogCQkJCTs7CiAJCQlhcG9sbG82OGJzZCkKIAkJCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCi0JCQkJb3M9YnNkCisJCQkJYmFzaWNfb3M9YnNkCiAJCQkJOzsKIAkJCWFyb3MpCiAJCQkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCi0JCQkJb3M9YXJvcworCQkJCWJhc2ljX29zPWFyb3MKIAkJCQk7OwogCQkJYXV4KQogCQkJCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQotCQkJCW9zPWF1eAorCQkJCWJhc2ljX29zPWF1eAogCQkJCTs7CiAJCQliYWxhbmNlKQogCQkJCWJhc2ljX21hY2hpbmU9bnMzMmstc2VxdWVudAotCQkJCW9zPWR5bml4CisJCQkJYmFzaWNfb3M9ZHluaXgKIAkJCQk7OwogCQkJYmxhY2tmaW4pCiAJCQkJYmFzaWNfbWFjaGluZT1iZmluLXVua25vd24KLQkJCQlvcz1saW51eAorCQkJCWJhc2ljX29zPWxpbnV4CiAJCQkJOzsKIAkJCWNlZ2NjKQogCQkJCWJhc2ljX21hY2hpbmU9YXJtLXVua25vd24KLQkJCQlvcz1jZWdjYworCQkJCWJhc2ljX29zPWNlZ2NjCisJCQkJOzsKKwkJCWNvbnZleC1jMSkKKwkJCQliYXNpY19tYWNoaW5lPWMxLWNvbnZleAorCQkJCWJhc2ljX29zPWJzZAorCQkJCTs7CisJCQljb252ZXgtYzIpCisJCQkJYmFzaWNfbWFjaGluZT1jMi1jb252ZXgKKwkJCQliYXNpY19vcz1ic2QKKwkJCQk7OworCQkJY29udmV4LWMzMikKKwkJCQliYXNpY19tYWNoaW5lPWMzMi1jb252ZXgKKwkJCQliYXNpY19vcz1ic2QKKwkJCQk7OworCQkJY29udmV4LWMzNCkKKwkJCQliYXNpY19tYWNoaW5lPWMzNC1jb252ZXgKKwkJCQliYXNpY19vcz1ic2QKKwkJCQk7OworCQkJY29udmV4LWMzOCkKKwkJCQliYXNpY19tYWNoaW5lPWMzOC1jb252ZXgKKwkJCQliYXNpY19vcz1ic2QKIAkJCQk7OwogCQkJY3JheSkKIAkJCQliYXNpY19tYWNoaW5lPWo5MC1jcmF5Ci0JCQkJb3M9dW5pY29zCisJCQkJYmFzaWNfb3M9dW5pY29zCiAJCQkJOzsKLQkJCWNyYXludikKLQkJCQliYXNpY19tYWNoaW5lPWNyYXludi1jcmF5Ci0JCQkJb3M9dW5pY29zbXAKKwkJCWNyZHMgfCB1bm9zKQorCQkJCWJhc2ljX21hY2hpbmU9bTY4ay1jcmRzCisJCQkJYmFzaWNfb3M9CisJCQkJOzsKKwkJCWRhMzApCisJCQkJYmFzaWNfbWFjaGluZT1tNjhrLWRhMzAKKwkJCQliYXNpY19vcz0KKwkJCQk7OworCQkJZGVjc3RhdGlvbiB8IHBtYXggfCBwbWluIHwgZGVjMzEwMCB8IGRlY3N0YXRuKQorCQkJCWJhc2ljX21hY2hpbmU9bWlwcy1kZWMKKwkJCQliYXNpY19vcz0KIAkJCQk7OwogCQkJZGVsdGE4OCkKIAkJCQliYXNpY19tYWNoaW5lPW04OGstbW90b3JvbGEKLQkJCQlvcz1zeXN2MworCQkJCWJhc2ljX29zPXN5c3YzCiAJCQkJOzsKIAkJCWRpY29zKQogCQkJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYwotCQkJCW9zPWRpY29zCisJCQkJYmFzaWNfb3M9ZGljb3MKIAkJCQk7OwogCQkJZGpncHApCiAJCQkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCi0JCQkJb3M9bXNkb3NkamdwcAorCQkJCWJhc2ljX29zPW1zZG9zZGpncHAKIAkJCQk7OwogCQkJZWJtb24yOWspCiAJCQkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAotCQkJCW9zPWVibW9uCisJCQkJYmFzaWNfb3M9ZWJtb24KIAkJCQk7OwogCQkJZXMxODAwIHwgT1NFNjhrIHwgb3NlNjhrIHwgb3NlIHwgT1NFKQogCQkJCWJhc2ljX21hY2hpbmU9bTY4ay1lcmljc3NvbgotCQkJCW9zPW9zZQorCQkJCWJhc2ljX29zPW9zZQogCQkJCTs7CiAJCQlnbWljcm8pCiAJCQkJYmFzaWNfbWFjaGluZT10cm9uLWdtaWNybwotCQkJCW9zPXN5c3YKKwkJCQliYXNpY19vcz1zeXN2CiAJCQkJOzsKIAkJCWdvMzIpCiAJCQkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCi0JCQkJb3M9Z28zMgorCQkJCWJhc2ljX29zPWdvMzIKIAkJCQk7OwogCQkJaDgzMDBobXMpCiAJCQkJYmFzaWNfbWFjaGluZT1oODMwMC1oaXRhY2hpCi0JCQkJb3M9aG1zCisJCQkJYmFzaWNfb3M9aG1zCiAJCQkJOzsKIAkJCWg4MzAweHJheSkKIAkJCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKLQkJCQlvcz14cmF5CisJCQkJYmFzaWNfb3M9eHJheQogCQkJCTs7CiAJCQloODUwMGhtcykKIAkJCQliYXNpY19tYWNoaW5lPWg4NTAwLWhpdGFjaGkKLQkJCQlvcz1obXMKKwkJCQliYXNpY19vcz1obXMKIAkJCQk7OwogCQkJaGFycmlzKQogCQkJCWJhc2ljX21hY2hpbmU9bTg4ay1oYXJyaXMKLQkJCQlvcz1zeXN2MworCQkJCWJhc2ljX29zPXN5c3YzCisJCQkJOzsKKwkJCWhwMzAwIHwgaHAzMDBocHV4KQorCQkJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQkJCWJhc2ljX29zPWhwdXgKIAkJCQk7OwogCQkJaHAzMDBic2QpCiAJCQkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCi0JCQkJb3M9YnNkCi0JCQkJOzsKLQkJCWhwMzAwaHB1eCkKLQkJCQliYXNpY19tYWNoaW5lPW02OGstaHAKLQkJCQlvcz1ocHV4CisJCQkJYmFzaWNfb3M9YnNkCiAJCQkJOzsKIAkJCWhwcGFvc2YpCiAJCQkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCi0JCQkJb3M9b3NmCisJCQkJYmFzaWNfb3M9b3NmCiAJCQkJOzsKIAkJCWhwcHJvKQogCQkJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAotCQkJCW9zPXByb2VsZgorCQkJCWJhc2ljX29zPXByb2VsZgogCQkJCTs7CiAJCQlpMzg2bWFjaCkKIAkJCQliYXNpY19tYWNoaW5lPWkzODYtbWFjaAotCQkJCW9zPW1hY2gKLQkJCQk7OwotCQkJdnN0YSkKLQkJCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgotCQkJCW9zPXZzdGEKKwkJCQliYXNpY19vcz1tYWNoCiAJCQkJOzsKIAkJCWlzaTY4IHwgaXNpKQogCQkJCWJhc2ljX21hY2hpbmU9bTY4ay1pc2kKLQkJCQlvcz1zeXN2CisJCQkJYmFzaWNfb3M9c3lzdgogCQkJCTs7CiAJCQltNjhrbm9tbXUpCiAJCQkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KLQkJCQlvcz1saW51eAorCQkJCWJhc2ljX29zPWxpbnV4CiAJCQkJOzsKIAkJCW1hZ251bSB8IG0zMjMwKQogCQkJCWJhc2ljX21hY2hpbmU9bWlwcy1taXBzCi0JCQkJb3M9c3lzdgorCQkJCWJhc2ljX29zPXN5c3YKIAkJCQk7OwogCQkJbWVybGluKQogCQkJCWJhc2ljX21hY2hpbmU9bnMzMmstdXRlawotCQkJCW9zPXN5c3YKKwkJCQliYXNpY19vcz1zeXN2CiAJCQkJOzsKIAkJCW1pbmd3NjQpCiAJCQkJYmFzaWNfbWFjaGluZT14ODZfNjQtcGMKLQkJCQlvcz1taW5ndzY0CisJCQkJYmFzaWNfb3M9bWluZ3c2NAogCQkJCTs7CiAJCQltaW5ndzMyKQogCQkJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYwotCQkJCW9zPW1pbmd3MzIKKwkJCQliYXNpY19vcz1taW5ndzMyCiAJCQkJOzsKIAkJCW1pbmd3MzJjZSkKIAkJCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCi0JCQkJb3M9bWluZ3czMmNlCisJCQkJYmFzaWNfb3M9bWluZ3czMmNlCiAJCQkJOzsKIAkJCW1vbml0b3IpCiAJCQkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4awotCQkJCW9zPWNvZmYKKwkJCQliYXNpY19vcz1jb2ZmCiAJCQkJOzsKIAkJCW1vcnBob3MpCiAJCQkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLXVua25vd24KLQkJCQlvcz1tb3JwaG9zCisJCQkJYmFzaWNfb3M9bW9ycGhvcwogCQkJCTs7CiAJCQltb3hpZWJveCkKIAkJCQliYXNpY19tYWNoaW5lPW1veGllLXVua25vd24KLQkJCQlvcz1tb3hpZWJveAorCQkJCWJhc2ljX29zPW1veGllYm94CiAJCQkJOzsKIAkJCW1zZG9zKQogCQkJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYwotCQkJCW9zPW1zZG9zCisJCQkJYmFzaWNfb3M9bXNkb3MKIAkJCQk7OwogCQkJbXN5cykKIAkJCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKLQkJCQlvcz1tc3lzCisJCQkJYmFzaWNfb3M9bXN5cwogCQkJCTs7CiAJCQltdnMpCiAJCQkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQotCQkJCW9zPW12cworCQkJCWJhc2ljX29zPW12cwogCQkJCTs7CiAJCQluYWNsKQogCQkJCWJhc2ljX21hY2hpbmU9bGUzMi11bmtub3duCi0JCQkJb3M9bmFjbAorCQkJCWJhc2ljX29zPW5hY2wKIAkJCQk7OwogCQkJbmNyMzAwMCkKIAkJCQliYXNpY19tYWNoaW5lPWk0ODYtbmNyCi0JCQkJb3M9c3lzdjQKKwkJCQliYXNpY19vcz1zeXN2NAogCQkJCTs7CiAJCQluZXRic2QzODYpCi0JCQkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KLQkJCQlvcz1uZXRic2QKKwkJCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJCQliYXNpY19vcz1uZXRic2QKIAkJCQk7OwogCQkJbmV0d2luZGVyKQogCQkJCWJhc2ljX21hY2hpbmU9YXJtdjRsLXJlYmVsCi0JCQkJb3M9bGludXgKKwkJCQliYXNpY19vcz1saW51eAogCQkJCTs7CiAJCQluZXdzIHwgbmV3czcwMCB8IG5ld3M4MDAgfCBuZXdzOTAwKQogCQkJCWJhc2ljX21hY2hpbmU9bTY4ay1zb255Ci0JCQkJb3M9bmV3c29zCisJCQkJYmFzaWNfb3M9bmV3c29zCiAJCQkJOzsKIAkJCW5ld3MxMDAwKQogCQkJCWJhc2ljX21hY2hpbmU9bTY4MDMwLXNvbnkKLQkJCQlvcz1uZXdzb3MKKwkJCQliYXNpY19vcz1uZXdzb3MKIAkJCQk7OwogCQkJbmVjdjcwKQogCQkJCWJhc2ljX21hY2hpbmU9djcwLW5lYwotCQkJCW9zPXN5c3YKKwkJCQliYXNpY19vcz1zeXN2CiAJCQkJOzsKIAkJCW5oMzAwMCkKIAkJCQliYXNpY19tYWNoaW5lPW02OGstaGFycmlzCi0JCQkJb3M9Y3h1eAorCQkJCWJhc2ljX29zPWN4dXgKIAkJCQk7OwogCQkJbmhbNDVdMDAwKQogCQkJCWJhc2ljX21hY2hpbmU9bTg4ay1oYXJyaXMKLQkJCQlvcz1jeHV4CisJCQkJYmFzaWNfb3M9Y3h1eAogCQkJCTs7CiAJCQluaW5keTk2MCkKIAkJCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKLQkJCQlvcz1uaW5keQorCQkJCWJhc2ljX29zPW5pbmR5CiAJCQkJOzsKIAkJCW1vbjk2MCkKIAkJCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKLQkJCQlvcz1tb245NjAKKwkJCQliYXNpY19vcz1tb245NjAKIAkJCQk7OwogCQkJbm9uc3RvcHV4KQogCQkJCWJhc2ljX21hY2hpbmU9bWlwcy1jb21wYXEKLQkJCQlvcz1ub25zdG9wdXgKKwkJCQliYXNpY19vcz1ub25zdG9wdXgKIAkJCQk7OwogCQkJb3M0MDApCiAJCQkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWlibQotCQkJCW9zPW9zNDAwCisJCQkJYmFzaWNfb3M9b3M0MDAKIAkJCQk7OwogCQkJT1NFNjgwMDAgfCBvc2U2ODAwMCkKIAkJCQliYXNpY19tYWNoaW5lPW02ODAwMC1lcmljc3NvbgotCQkJCW9zPW9zZQorCQkJCWJhc2ljX29zPW9zZQogCQkJCTs7CiAJCQlvczY4aykKIAkJCQliYXNpY19tYWNoaW5lPW02OGstbm9uZQotCQkJCW9zPW9zNjhrCisJCQkJYmFzaWNfb3M9b3M2OGsKIAkJCQk7OwogCQkJcGFyYWdvbikKIAkJCQliYXNpY19tYWNoaW5lPWk4NjAtaW50ZWwKLQkJCQlvcz1vc2YKKwkJCQliYXNpY19vcz1vc2YKIAkJCQk7OwogCQkJcGFyaXNjKQogCQkJCWJhc2ljX21hY2hpbmU9aHBwYS11bmtub3duCi0JCQkJb3M9bGludXgKKwkJCQliYXNpY19vcz1saW51eAorCQkJCTs7CisJCQlwc3ApCisJCQkJYmFzaWNfbWFjaGluZT1taXBzYWxsZWdyZXhlbC1zb255CisJCQkJYmFzaWNfb3M9cHNwCiAJCQkJOzsKIAkJCXB3MzIpCiAJCQkJYmFzaWNfbWFjaGluZT1pNTg2LXVua25vd24KLQkJCQlvcz1wdzMyCisJCQkJYmFzaWNfb3M9cHczMgogCQkJCTs7CiAJCQlyZG9zIHwgcmRvczY0KQogCQkJCWJhc2ljX21hY2hpbmU9eDg2XzY0LXBjCi0JCQkJb3M9cmRvcworCQkJCWJhc2ljX29zPXJkb3MKIAkJCQk7OwogCQkJcmRvczMyKQogCQkJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYwotCQkJCW9zPXJkb3MKKwkJCQliYXNpY19vcz1yZG9zCiAJCQkJOzsKIAkJCXJvbTY4aykKIAkJCQliYXNpY19tYWNoaW5lPW02OGstcm9tNjhrCi0JCQkJb3M9Y29mZgorCQkJCWJhc2ljX29zPWNvZmYKIAkJCQk7OwogCQkJc2EyOTIwMCkKIAkJCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCi0JCQkJb3M9dWRpCisJCQkJYmFzaWNfb3M9dWRpCiAJCQkJOzsKIAkJCXNlaSkKIAkJCQliYXNpY19tYWNoaW5lPW1pcHMtc2VpCi0JCQkJb3M9c2VpdXgKKwkJCQliYXNpY19vcz1zZWl1eAorCQkJCTs7CisJCQlzZXF1ZW50KQorCQkJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CisJCQkJYmFzaWNfb3M9CiAJCQkJOzsKIAkJCXNwczcpCiAJCQkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKLQkJCQlvcz1zeXN2MgorCQkJCWJhc2ljX29zPXN5c3YyCisJCQkJOzsKKwkJCXN0MjAwMCkKKwkJCQliYXNpY19tYWNoaW5lPW02OGstdGFuZGVtCisJCQkJYmFzaWNfb3M9CiAJCQkJOzsKIAkJCXN0cmF0dXMpCiAJCQkJYmFzaWNfbWFjaGluZT1pODYwLXN0cmF0dXMKLQkJCQlvcz1zeXN2NAorCQkJCWJhc2ljX29zPXN5c3Y0CisJCQkJOzsKKwkJCXN1bjIpCisJCQkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCQkJYmFzaWNfb3M9CiAJCQkJOzsKIAkJCXN1bjJvczMpCiAJCQkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCi0JCQkJb3M9c3Vub3MzCisJCQkJYmFzaWNfb3M9c3Vub3MzCiAJCQkJOzsKIAkJCXN1bjJvczQpCiAJCQkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCi0JCQkJb3M9c3Vub3M0CisJCQkJYmFzaWNfb3M9c3Vub3M0CisJCQkJOzsKKwkJCXN1bjMpCisJCQkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQkJCWJhc2ljX29zPQogCQkJCTs7CiAJCQlzdW4zb3MzKQogCQkJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KLQkJCQlvcz1zdW5vczMKKwkJCQliYXNpY19vcz1zdW5vczMKIAkJCQk7OwogCQkJc3VuM29zNCkKIAkJCQliYXNpY19tYWNoaW5lPW02OGstc3VuCi0JCQkJb3M9c3Vub3M0CisJCQkJYmFzaWNfb3M9c3Vub3M0CisJCQkJOzsKKwkJCXN1bjQpCisJCQkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJCQliYXNpY19vcz0KIAkJCQk7OwogCQkJc3VuNG9zMykKIAkJCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgotCQkJCW9zPXN1bm9zMworCQkJCWJhc2ljX29zPXN1bm9zMwogCQkJCTs7CiAJCQlzdW40b3M0KQogCQkJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCi0JCQkJb3M9c3Vub3M0CisJCQkJYmFzaWNfb3M9c3Vub3M0CiAJCQkJOzsKIAkJCXN1bjRzb2wyKQogCQkJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCi0JCQkJb3M9c29sYXJpczIKKwkJCQliYXNpY19vcz1zb2xhcmlzMgorCQkJCTs7CisJCQlzdW4zODYgfCBzdW4zODZpIHwgcm9hZHJ1bm5lcikKKwkJCQliYXNpY19tYWNoaW5lPWkzODYtc3VuCisJCQkJYmFzaWNfb3M9CiAJCQkJOzsKIAkJCXN2MSkKIAkJCQliYXNpY19tYWNoaW5lPXN2MS1jcmF5Ci0JCQkJb3M9dW5pY29zCisJCQkJYmFzaWNfb3M9dW5pY29zCiAJCQkJOzsKIAkJCXN5bW1ldHJ5KQogCQkJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50Ci0JCQkJb3M9ZHluaXgKKwkJCQliYXNpY19vcz1keW5peAogCQkJCTs7CiAJCQl0M2UpCiAJCQkJYmFzaWNfbWFjaGluZT1hbHBoYWV2NS1jcmF5Ci0JCQkJb3M9dW5pY29zCisJCQkJYmFzaWNfb3M9dW5pY29zCiAJCQkJOzsKIAkJCXQ5MCkKIAkJCQliYXNpY19tYWNoaW5lPXQ5MC1jcmF5Ci0JCQkJb3M9dW5pY29zCisJCQkJYmFzaWNfb3M9dW5pY29zCiAJCQkJOzsKIAkJCXRvYWQxKQogCQkJCWJhc2ljX21hY2hpbmU9cGRwMTAteGtsCi0JCQkJb3M9dG9wczIwCisJCQkJYmFzaWNfb3M9dG9wczIwCiAJCQkJOzsKIAkJCXRwZikKIAkJCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQotCQkJCW9zPXRwZgorCQkJCWJhc2ljX29zPXRwZgogCQkJCTs7CiAJCQl1ZGkyOWspCiAJCQkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAotCQkJCW9zPXVkaQorCQkJCWJhc2ljX29zPXVkaQogCQkJCTs7CiAJCQl1bHRyYTMpCiAJCQkJYmFzaWNfbWFjaGluZT1hMjlrLW55dQotCQkJCW9zPXN5bTEKKwkJCQliYXNpY19vcz1zeW0xCiAJCQkJOzsKIAkJCXY4MTAgfCBuZWN2ODEwKQogCQkJCWJhc2ljX21hY2hpbmU9djgxMC1uZWMKLQkJCQlvcz1ub25lCisJCQkJYmFzaWNfb3M9bm9uZQogCQkJCTs7CiAJCQl2YXh2KQogCQkJCWJhc2ljX21hY2hpbmU9dmF4LWRlYwotCQkJCW9zPXN5c3YKKwkJCQliYXNpY19vcz1zeXN2CiAJCQkJOzsKIAkJCXZtcykKIAkJCQliYXNpY19tYWNoaW5lPXZheC1kZWMKLQkJCQlvcz12bXMKKwkJCQliYXNpY19vcz12bXMKKwkJCQk7OworCQkJdnN0YSkKKwkJCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJCQliYXNpY19vcz12c3RhCiAJCQkJOzsKIAkJCXZ4d29ya3M5NjApCiAJCQkJYmFzaWNfbWFjaGluZT1pOTYwLXdycwotCQkJCW9zPXZ4d29ya3MKKwkJCQliYXNpY19vcz12eHdvcmtzCiAJCQkJOzsKIAkJCXZ4d29ya3M2OCkKIAkJCQliYXNpY19tYWNoaW5lPW02OGstd3JzCi0JCQkJb3M9dnh3b3JrcworCQkJCWJhc2ljX29zPXZ4d29ya3MKIAkJCQk7OwogCQkJdnh3b3JrczI5aykKIAkJCQliYXNpY19tYWNoaW5lPWEyOWstd3JzCi0JCQkJb3M9dnh3b3JrcworCQkJCWJhc2ljX29zPXZ4d29ya3MKIAkJCQk7OwogCQkJeGJveCkKIAkJCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKLQkJCQlvcz1taW5ndzMyCisJCQkJYmFzaWNfb3M9bWluZ3czMgogCQkJCTs7CiAJCQl5bXApCiAJCQkJYmFzaWNfbWFjaGluZT15bXAtY3JheQotCQkJCW9zPXVuaWNvcworCQkJCWJhc2ljX29zPXVuaWNvcwogCQkJCTs7CiAJCQkqKQogCQkJCWJhc2ljX21hY2hpbmU9JDEKLQkJCQlvcz0KKwkJCQliYXNpY19vcz0KIAkJCQk7OwogCQllc2FjCiAJCTs7CiBlc2FjCiAKLSMgRGVjb2RlIGFsaWFzZXMgZm9yIGNlcnRhaW4gQ1BVLUNPTVBBTlkgY29tYmluYXRpb25zLgorIyBEZWNvZGUgMS1jb21wb25lbnQgb3IgYWQtaG9jIGJhc2ljIG1hY2hpbmVzCiBjYXNlICRiYXNpY19tYWNoaW5lIGluCi0JIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNvbXBhbnkgbmFtZS4KLQkjIFNvbWUgYXJlIG9taXR0ZWQgaGVyZSBiZWNhdXNlIHRoZXkgaGF2ZSBzcGVjaWFsIG1lYW5pbmdzIGJlbG93LgotCTE3NTBhIHwgNTgwIFwKLQl8IGEyOWsgXAotCXwgYWFyY2g2NCB8IGFhcmNoNjRfYmUgXAotCXwgYWxwaGEgfCBhbHBoYWV2WzQtOF0gfCBhbHBoYWV2NTYgfCBhbHBoYWV2Nls3OF0gfCBhbHBoYXBjYTVbNjddIFwKLQl8IGFscGhhNjQgfCBhbHBoYTY0ZXZbNC04XSB8IGFscGhhNjRldjU2IHwgYWxwaGE2NGV2Nls3OF0gfCBhbHBoYTY0cGNhNVs2N10gXAotCXwgYW0zM18yLjAgXAotCXwgYXJjIHwgYXJjZWIgXAotCXwgYXJtIHwgYXJtW2JsXWUgfCBhcm1lW2xiXSB8IGFybXZbMi04XSB8IGFybXZbMy04XVtsYl0gfCBhcm12Nm0gfCBhcm12Wzc4XVthcm1dIFwKLQl8IGF2ciB8IGF2cjMyIFwKLQl8IGJhIFwKLQl8IGJlMzIgfCBiZTY0IFwKLQl8IGJmaW4gXAotCXwgYzR4IHwgYzgwNTEgfCBjbGlwcGVyIHwgY3NreSBcCi0JfCBkMTB2IHwgZDMwdiB8IGRseCB8IGRzcDE2eHggXAotCXwgZTJrIHwgZXBpcGhhbnkgXAotCXwgZmlkbyB8IGZyMzAgfCBmcnYgfCBmdDMyIFwKLQl8IGg4MzAwIHwgaDg1MDAgfCBocHBhIHwgaHBwYTEuWzAxXSB8IGhwcGEyLjAgfCBocHBhMi4wW253XSB8IGhwcGE2NCBcCi0JfCBoZXhhZ29uIFwKLQl8IGkzNzAgfCBpODYwIHwgaTk2MCB8IGlhMTYgfCBpYTY0IFwKLQl8IGlwMmsgfCBpcTIwMDAgXAotCXwgazFvbSBcCi0JfCBsZTMyIHwgbGU2NCBcCi0JfCBsbTMyIFwKLQl8IG0zMmMgfCBtMzJyIHwgbTMycmxlIHwgbTY4MDAwIHwgbTY4ayB8IG04OGsgXAotCXwgbWF4cSB8IG1iIHwgbWljcm9ibGF6ZSB8IG1pY3JvYmxhemVlbCB8IG1jb3JlIHwgbWVwIHwgbWV0YWcgXAotCXwgbWlwcyB8IG1pcHNiZSB8IG1pcHNlYiB8IG1pcHNlbCB8IG1pcHNsZSBcCi0JfCBtaXBzMTYgXAotCXwgbWlwczY0IHwgbWlwczY0ZWwgXAotCXwgbWlwczY0b2N0ZW9uIHwgbWlwczY0b2N0ZW9uZWwgXAotCXwgbWlwczY0b3Jpb24gfCBtaXBzNjRvcmlvbmVsIFwKLQl8IG1pcHM2NHI1OTAwIHwgbWlwczY0cjU5MDBlbCBcCi0JfCBtaXBzNjR2ciB8IG1pcHM2NHZyZWwgXAotCXwgbWlwczY0dnI0MTAwIHwgbWlwczY0dnI0MTAwZWwgXAotCXwgbWlwczY0dnI0MzAwIHwgbWlwczY0dnI0MzAwZWwgXAotCXwgbWlwczY0dnI1MDAwIHwgbWlwczY0dnI1MDAwZWwgXAotCXwgbWlwczY0dnI1OTAwIHwgbWlwczY0dnI1OTAwZWwgXAotCXwgbWlwc2lzYTMyIHwgbWlwc2lzYTMyZWwgXAotCXwgbWlwc2lzYTMycjIgfCBtaXBzaXNhMzJyMmVsIFwKLQl8IG1pcHNpc2EzMnI2IHwgbWlwc2lzYTMycjZlbCBcCi0JfCBtaXBzaXNhNjQgfCBtaXBzaXNhNjRlbCBcCi0JfCBtaXBzaXNhNjRyMiB8IG1pcHNpc2E2NHIyZWwgXAotCXwgbWlwc2lzYTY0cjYgfCBtaXBzaXNhNjRyNmVsIFwKLQl8IG1pcHNpc2E2NHNiMSB8IG1pcHNpc2E2NHNiMWVsIFwKLQl8IG1pcHNpc2E2NHNyNzFrIHwgbWlwc2lzYTY0c3I3MWtlbCBcCi0JfCBtaXBzcjU5MDAgfCBtaXBzcjU5MDBlbCBcCi0JfCBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwgXAotCXwgbW4xMDIwMCB8IG1uMTAzMDAgXAotCXwgbW94aWUgXAotCXwgbXQgXAotCXwgbXNwNDMwIFwKLQl8IG5kczMyIHwgbmRzMzJsZSB8IG5kczMyYmUgXAotCXwgbmZwIFwKLQl8IG5pb3MgfCBuaW9zMiB8IG5pb3MyZWIgfCBuaW9zMmVsIFwKLQl8IG5zMTZrIHwgbnMzMmsgXAotCXwgb3BlbjggfCBvcjFrIHwgb3Ixa25kIHwgb3IzMiBcCi0JfCBwZHAxMCB8IHBqIHwgcGpsIFwKLQl8IHBvd2VycGMgfCBwb3dlcnBjNjQgfCBwb3dlcnBjNjRsZSB8IHBvd2VycGNsZSBcCi0JfCBwcnUgXAotCXwgcHlyYW1pZCBcCi0JfCByaXNjdiB8IHJpc2N2MzIgfCByaXNjdjY0IFwKLQl8IHJsNzggfCByeCBcCi0JfCBzY29yZSBcCi0JfCBzaCB8IHNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzIzXWUgfCBzaFsyMzRdZWIgfCBzaGViIHwgc2hiZSB8IHNobGUgfCBzaFsxMjM0XWxlIHwgc2gzZWxlIFwKLQl8IHNoNjQgfCBzaDY0bGUgXAotCXwgc3BhcmMgfCBzcGFyYzY0IHwgc3BhcmM2NGIgfCBzcGFyYzY0diB8IHNwYXJjODZ4IHwgc3BhcmNsZXQgfCBzcGFyY2xpdGUgXAotCXwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiB8IHNwYXJjdjl2IFwKLQl8IHNwdSBcCi0JfCB0YWhvZSB8IHRpYzR4IHwgdGljNTR4IHwgdGljNTV4IHwgdGljNnggfCB0aWM4MCB8IHRyb24gXAotCXwgdWJpY29tMzIgXAotCXwgdjg1MCB8IHY4NTBlIHwgdjg1MGUxIHwgdjg1MGUyIHwgdjg1MGVzIHwgdjg1MGUydjMgXAotCXwgdmlzaXVtIFwKLQl8IHdhc20zMiBcCi0JfCB4ODYgfCB4YzE2eCB8IHhzdG9ybXkxNiB8IHh0ZW5zYSBcCi0JfCB6OGsgfCB6ODApCi0JCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCSMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgbWFudWZhY3R1cmVyIG9mIGNlcnRhaW4gQ1BVIHR5cGVzLiAgSXQgaXMgaW4KKwkjIHNvbWUgY2FzZXMgdGhlIG9ubHkgbWFudWZhY3R1cmVyLCBpbiBvdGhlcnMsIGl0IGlzIHRoZSBtb3N0IHBvcHVsYXIuCisJdzg5aykKKwkJY3B1PWhwcGExLjEKKwkJdmVuZG9yPXdpbmJvbmQKIAkJOzsKLQljNTR4KQotCQliYXNpY19tYWNoaW5lPXRpYzU0eC11bmtub3duCisJb3A1MG4pCisJCWNwdT1ocHBhMS4xCisJCXZlbmRvcj1va2kKIAkJOzsKLQljNTV4KQotCQliYXNpY19tYWNoaW5lPXRpYzU1eC11bmtub3duCisJb3A2MGMpCisJCWNwdT1ocHBhMS4xCisJCXZlbmRvcj1va2kKIAkJOzsKLQljNngpCi0JCWJhc2ljX21hY2hpbmU9dGljNngtdW5rbm93bgorCWlibSopCisJCWNwdT1pMzcwCisJCXZlbmRvcj1pYm0KIAkJOzsKLQlsZW9ufGxlb25bMy05XSkKLQkJYmFzaWNfbWFjaGluZT1zcGFyYy0kYmFzaWNfbWFjaGluZQorCW9yaW9uMTA1KQorCQljcHU9Y2xpcHBlcgorCQl2ZW5kb3I9aGlnaGxldmVsCiAJCTs7Ci0JbTY4MTEgfCBtNjhoYzExIHwgbTY4MTIgfCBtNjhoYzEyIHwgbTY4aGNzMTJ4IHwgbnZwdHggfCBwaWNvY2hpcCkKLQkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCi0JCW9zPSR7b3M6LW5vbmV9CisJbWFjIHwgbXB3IHwgbWFjLW1wdykKKwkJY3B1PW02OGsKKwkJdmVuZG9yPWFwcGxlCiAJCTs7Ci0JbTg4MTEwIHwgbTY4MFsxMjM0Nl0wIHwgbTY4Mz8yIHwgbTY4MzYwIHwgbTUyMDAgfCB2NzAgfCB3NjUpCi0JCTs7Ci0JbTlzMTJ6IHwgbTY4aGNzMTJ6IHwgaGNzMTJ6IHwgczEyeikKLQkJYmFzaWNfbWFjaGluZT1zMTJ6LXVua25vd24KLQkJb3M9JHtvczotbm9uZX0KLQkJOzsKLQltczEpCi0JCWJhc2ljX21hY2hpbmU9bXQtdW5rbm93bgotCQk7OwotCXN0cm9uZ2FybSB8IHRodW1iIHwgeHNjYWxlKQotCQliYXNpY19tYWNoaW5lPWFybS11bmtub3duCi0JCTs7Ci0JeGdhdGUpCi0JCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgotCQlvcz0ke29zOi1ub25lfQotCQk7OwotCXhzY2FsZWViKQotCQliYXNpY19tYWNoaW5lPWFybWViLXVua25vd24KKwlwbWFjIHwgcG1hYy1tcHcpCisJCWNwdT1wb3dlcnBjCisJCXZlbmRvcj1hcHBsZQogCQk7OwogCi0JeHNjYWxlZWwpCi0JCWJhc2ljX21hY2hpbmU9YXJtZWwtdW5rbm93bgotCQk7OwotCi0JIyBXZSB1c2UgYHBjJyByYXRoZXIgdGhhbiBgdW5rbm93bicKLQkjIGJlY2F1c2UgKDEpIHRoYXQncyB3aGF0IHRoZXkgbm9ybWFsbHkgYXJlLCBhbmQKLQkjICgyKSB0aGUgd29yZCAidW5rbm93biIgdGVuZHMgdG8gY29uZnVzZSBiZWdpbm5pbmcgdXNlcnMuCi0JaSo4NiB8IHg4Nl82NCkKLQkgIGJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtcGMKLQkgIDs7Ci0JIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRoIGNvbXBhbnkgbmFtZS4KLQk1ODAtKiBcCi0JfCBhMjlrLSogXAotCXwgYWFyY2g2NC0qIHwgYWFyY2g2NF9iZS0qIFwKLQl8IGFscGhhLSogfCBhbHBoYWV2WzQtOF0tKiB8IGFscGhhZXY1Ni0qIHwgYWxwaGFldjZbNzhdLSogXAotCXwgYWxwaGE2NC0qIHwgYWxwaGE2NGV2WzQtOF0tKiB8IGFscGhhNjRldjU2LSogfCBhbHBoYTY0ZXY2Wzc4XS0qIFwKLQl8IGFscGhhcGNhNVs2N10tKiB8IGFscGhhNjRwY2E1WzY3XS0qIHwgYXJjLSogfCBhcmNlYi0qIFwKLQl8IGFybS0qICB8IGFybWJlLSogfCBhcm1sZS0qIHwgYXJtZWItKiB8IGFybXYqLSogXAotCXwgYXZyLSogfCBhdnIzMi0qIFwKLQl8IGJhLSogXAotCXwgYmUzMi0qIHwgYmU2NC0qIFwKLQl8IGJmaW4tKiB8IGJzMjAwMC0qIFwKLQl8IGNbMTIzXSogfCBjMzAtKiB8IFtjanRdOTAtKiB8IGM0eC0qIFwKLQl8IGM4MDUxLSogfCBjbGlwcGVyLSogfCBjcmF5bnYtKiB8IGNza3ktKiB8IGN5ZHJhLSogXAotCXwgZDEwdi0qIHwgZDMwdi0qIHwgZGx4LSogXAotCXwgZTJrLSogfCBlbHhzaS0qIFwKLQl8IGYzMFswMV0tKiB8IGY3MDAtKiB8IGZpZG8tKiB8IGZyMzAtKiB8IGZydi0qIHwgZng4MC0qIFwKLQl8IGg4MzAwLSogfCBoODUwMC0qIFwKLQl8IGhwcGEtKiB8IGhwcGExLlswMV0tKiB8IGhwcGEyLjAtKiB8IGhwcGEyLjBbbnddLSogfCBocHBhNjQtKiBcCi0JfCBoZXhhZ29uLSogXAotCXwgaSo4Ni0qIHwgaTg2MC0qIHwgaTk2MC0qIHwgaWExNi0qIHwgaWE2NC0qIFwKLQl8IGlwMmstKiB8IGlxMjAwMC0qIFwKLQl8IGsxb20tKiBcCi0JfCBsZTMyLSogfCBsZTY0LSogXAotCXwgbG0zMi0qIFwKLQl8IG0zMmMtKiB8IG0zMnItKiB8IG0zMnJsZS0qIFwKLQl8IG02ODAwMC0qIHwgbTY4MFswMTIzNDZdMC0qIHwgbTY4MzYwLSogfCBtNjgzPzItKiB8IG02OGstKiBcCi0JfCBtODgxMTAtKiB8IG04OGstKiB8IG1heHEtKiB8IG1jb3JlLSogfCBtZXRhZy0qIFwKLQl8IG1pY3JvYmxhemUtKiB8IG1pY3JvYmxhemVlbC0qIFwKLQl8IG1pcHMtKiB8IG1pcHNiZS0qIHwgbWlwc2ViLSogfCBtaXBzZWwtKiB8IG1pcHNsZS0qIFwKLQl8IG1pcHMxNi0qIFwKLQl8IG1pcHM2NC0qIHwgbWlwczY0ZWwtKiBcCi0JfCBtaXBzNjRvY3Rlb24tKiB8IG1pcHM2NG9jdGVvbmVsLSogXAotCXwgbWlwczY0b3Jpb24tKiB8IG1pcHM2NG9yaW9uZWwtKiBcCi0JfCBtaXBzNjRyNTkwMC0qIHwgbWlwczY0cjU5MDBlbC0qIFwKLQl8IG1pcHM2NHZyLSogfCBtaXBzNjR2cmVsLSogXAotCXwgbWlwczY0dnI0MTAwLSogfCBtaXBzNjR2cjQxMDBlbC0qIFwKLQl8IG1pcHM2NHZyNDMwMC0qIHwgbWlwczY0dnI0MzAwZWwtKiBcCi0JfCBtaXBzNjR2cjUwMDAtKiB8IG1pcHM2NHZyNTAwMGVsLSogXAotCXwgbWlwczY0dnI1OTAwLSogfCBtaXBzNjR2cjU5MDBlbC0qIFwKLQl8IG1pcHNpc2EzMi0qIHwgbWlwc2lzYTMyZWwtKiBcCi0JfCBtaXBzaXNhMzJyMi0qIHwgbWlwc2lzYTMycjJlbC0qIFwKLQl8IG1pcHNpc2EzMnI2LSogfCBtaXBzaXNhMzJyNmVsLSogXAotCXwgbWlwc2lzYTY0LSogfCBtaXBzaXNhNjRlbC0qIFwKLQl8IG1pcHNpc2E2NHIyLSogfCBtaXBzaXNhNjRyMmVsLSogXAotCXwgbWlwc2lzYTY0cjYtKiB8IG1pcHNpc2E2NHI2ZWwtKiBcCi0JfCBtaXBzaXNhNjRzYjEtKiB8IG1pcHNpc2E2NHNiMWVsLSogXAotCXwgbWlwc2lzYTY0c3I3MWstKiB8IG1pcHNpc2E2NHNyNzFrZWwtKiBcCi0JfCBtaXBzcjU5MDAtKiB8IG1pcHNyNTkwMGVsLSogXAotCXwgbWlwc3R4MzktKiB8IG1pcHN0eDM5ZWwtKiBcCi0JfCBtbWl4LSogXAotCXwgbXQtKiBcCi0JfCBtc3A0MzAtKiBcCi0JfCBuZHMzMi0qIHwgbmRzMzJsZS0qIHwgbmRzMzJiZS0qIFwKLQl8IG5mcC0qIFwKLQl8IG5pb3MtKiB8IG5pb3MyLSogfCBuaW9zMmViLSogfCBuaW9zMmVsLSogXAotCXwgbm9uZS0qIHwgbnAxLSogfCBuczE2ay0qIHwgbnMzMmstKiBcCi0JfCBvcGVuOC0qIFwKLQl8IG9yMWsqLSogXAotCXwgb3Jpb24tKiBcCi0JfCBwZHAxMC0qIHwgcGRwMTEtKiB8IHBqLSogfCBwamwtKiB8IHBuLSogfCBwb3dlci0qIFwKLQl8IHBvd2VycGMtKiB8IHBvd2VycGM2NC0qIHwgcG93ZXJwYzY0bGUtKiB8IHBvd2VycGNsZS0qIFwKLQl8IHBydS0qIFwKLQl8IHB5cmFtaWQtKiBcCi0JfCByaXNjdi0qIHwgcmlzY3YzMi0qIHwgcmlzY3Y2NC0qIFwKLQl8IHJsNzgtKiB8IHJvbXAtKiB8IHJzNjAwMC0qIHwgcngtKiBcCi0JfCBzaC0qIHwgc2hbMTIzNF0tKiB8IHNoWzI0XWEtKiB8IHNoWzI0XWFlYi0qIHwgc2hbMjNdZS0qIHwgc2hbMzRdZWItKiB8IHNoZWItKiB8IHNoYmUtKiBcCi0JfCBzaGxlLSogfCBzaFsxMjM0XWxlLSogfCBzaDNlbGUtKiB8IHNoNjQtKiB8IHNoNjRsZS0qIFwKLQl8IHNwYXJjLSogfCBzcGFyYzY0LSogfCBzcGFyYzY0Yi0qIHwgc3BhcmM2NHYtKiB8IHNwYXJjODZ4LSogfCBzcGFyY2xldC0qIFwKLQl8IHNwYXJjbGl0ZS0qIFwKLQl8IHNwYXJjdjgtKiB8IHNwYXJjdjktKiB8IHNwYXJjdjliLSogfCBzcGFyY3Y5di0qIHwgc3YxLSogfCBzeCotKiBcCi0JfCB0YWhvZS0qIFwKLQl8IHRpYzMwLSogfCB0aWM0eC0qIHwgdGljNTR4LSogfCB0aWM1NXgtKiB8IHRpYzZ4LSogfCB0aWM4MC0qIFwKLQl8IHRpbGUqLSogXAotCXwgdHJvbi0qIFwKLQl8IHViaWNvbTMyLSogXAotCXwgdjg1MC0qIHwgdjg1MGUtKiB8IHY4NTBlMS0qIHwgdjg1MGVzLSogfCB2ODUwZTItKiB8IHY4NTBlMnYzLSogXAotCXwgdmF4LSogXAotCXwgdmlzaXVtLSogXAotCXwgd2FzbTMyLSogXAotCXwgd2UzMmstKiBcCi0JfCB4ODYtKiB8IHg4Nl82NC0qIHwgeGMxNngtKiB8IHhwczEwMC0qIFwKLQl8IHhzdG9ybXkxNi0qIHwgeHRlbnNhKi0qIFwKLQl8IHltcC0qIFwKLQl8IHo4ay0qIHwgejgwLSopCi0JCTs7Ci0JIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNvbXBhbnkgbmFtZSwgd2l0aCBnbG9iIG1hdGNoLgotCXh0ZW5zYSopCi0JCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgotCQk7OwogCSMgUmVjb2duaXplIHRoZSB2YXJpb3VzIG1hY2hpbmUgbmFtZXMgYW5kIGFsaWFzZXMgd2hpY2ggc3RhbmQKIAkjIGZvciBhIENQVSB0eXBlIGFuZCBhIGNvbXBhbnkgYW5kIHNvbWV0aW1lcyBldmVuIGFuIE9TLgogCTNiMSB8IDczMDAgfCA3MzAwLWF0dCB8IGF0dC03MzAwIHwgcGM3MzAwIHwgc2FmYXJpIHwgdW5peHBjKQotCQliYXNpY19tYWNoaW5lPW02ODAwMC1hdHQKKwkJY3B1PW02ODAwMAorCQl2ZW5kb3I9YXR0CiAJCTs7CiAJM2IqKQotCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAotCQk7OwotCWFiYWN1cykKLQkJYmFzaWNfbWFjaGluZT1hYmFjdXMtdW5rbm93bgotCQk7OwotCWFsbGlhbnQgfCBmeDgwKQotCQliYXNpY19tYWNoaW5lPWZ4ODAtYWxsaWFudAotCQk7OwotCWFsdG9zIHwgYWx0b3MzMDY4KQotCQliYXNpY19tYWNoaW5lPW02OGstYWx0b3MKLQkJOzsKLQlhbWQ2NCkKLQkJYmFzaWNfbWFjaGluZT14ODZfNjQtcGMKLQkJOzsKLQlhbWQ2NC0qKQotCQliYXNpY19tYWNoaW5lPXg4Nl82NC1gZWNobyAiJGJhc2ljX21hY2hpbmUiIHwgc2VkICdzL15bXi1dKi0vLydgCi0JCTs7Ci0JYW1pZ2EgfCBhbWlnYS0qKQotCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgotCQk7OwotCWFzbWpzKQotCQliYXNpY19tYWNoaW5lPWFzbWpzLXVua25vd24KLQkJOzsKLQlibGFja2Zpbi0qKQotCQliYXNpY19tYWNoaW5lPWJmaW4tYGVjaG8gIiRiYXNpY19tYWNoaW5lIiB8IHNlZCAncy9eW14tXSotLy8nYAotCQlvcz1saW51eAorCQljcHU9d2UzMmsKKwkJdmVuZG9yPWF0dAogCQk7OwogCWJsdWVnZW5lKikKLQkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWlibQotCQlvcz1jbmsKLQkJOzsKLQljNTR4LSopCi0JCWJhc2ljX21hY2hpbmU9dGljNTR4LWBlY2hvICIkYmFzaWNfbWFjaGluZSIgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJOzsKLQljNTV4LSopCi0JCWJhc2ljX21hY2hpbmU9dGljNTV4LWBlY2hvICIkYmFzaWNfbWFjaGluZSIgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJOzsKLQljNngtKikKLQkJYmFzaWNfbWFjaGluZT10aWM2eC1gZWNobyAiJGJhc2ljX21hY2hpbmUiIHwgc2VkICdzL15bXi1dKi0vLydgCi0JCTs7Ci0JYzkwKQotCQliYXNpY19tYWNoaW5lPWM5MC1jcmF5Ci0JCW9zPSR7b3M6LXVuaWNvc30KLQkJOzsKLQljb252ZXgtYzEpCi0JCWJhc2ljX21hY2hpbmU9YzEtY29udmV4Ci0JCW9zPWJzZAotCQk7OwotCWNvbnZleC1jMikKLQkJYmFzaWNfbWFjaGluZT1jMi1jb252ZXgKLQkJb3M9YnNkCi0JCTs7Ci0JY29udmV4LWMzMikKLQkJYmFzaWNfbWFjaGluZT1jMzItY29udmV4Ci0JCW9zPWJzZAotCQk7OwotCWNvbnZleC1jMzQpCi0JCWJhc2ljX21hY2hpbmU9YzM0LWNvbnZleAotCQlvcz1ic2QKLQkJOzsKLQljb252ZXgtYzM4KQotCQliYXNpY19tYWNoaW5lPWMzOC1jb252ZXgKLQkJb3M9YnNkCi0JCTs7Ci0JY3IxNiB8IGNyMTYtKikKLQkJYmFzaWNfbWFjaGluZT1jcjE2LXVua25vd24KLQkJb3M9JHtvczotZWxmfQotCQk7OwotCWNyZHMgfCB1bm9zKQotCQliYXNpY19tYWNoaW5lPW02OGstY3JkcwotCQk7OwotCWNyaXN2MzIgfCBjcmlzdjMyLSogfCBldHJheGZzKikKLQkJYmFzaWNfbWFjaGluZT1jcmlzdjMyLWF4aXMKLQkJOzsKLQljcmlzIHwgY3Jpcy0qIHwgZXRyYXgqKQotCQliYXNpY19tYWNoaW5lPWNyaXMtYXhpcwotCQk7OwotCWNyeCkKLQkJYmFzaWNfbWFjaGluZT1jcngtdW5rbm93bgotCQlvcz0ke29zOi1lbGZ9Ci0JCTs7Ci0JZGEzMCB8IGRhMzAtKikKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWRhMzAKLQkJOzsKLQlkZWNzdGF0aW9uIHwgZGVjc3RhdGlvbi0zMTAwIHwgcG1heCB8IHBtYXgtKiB8IHBtaW4gfCBkZWMzMTAwIHwgZGVjc3RhdG4pCi0JCWJhc2ljX21hY2hpbmU9bWlwcy1kZWMKKwkJY3B1PXBvd2VycGMKKwkJdmVuZG9yPWlibQorCQliYXNpY19vcz1jbmsKIAkJOzsKIAlkZWNzeXN0ZW0xMCogfCBkZWMxMCopCi0JCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCi0JCW9zPXRvcHMxMAorCQljcHU9cGRwMTAKKwkJdmVuZG9yPWRlYworCQliYXNpY19vcz10b3BzMTAKIAkJOzsKIAlkZWNzeXN0ZW0yMCogfCBkZWMyMCopCi0JCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCi0JCW9zPXRvcHMyMAorCQljcHU9cGRwMTAKKwkJdmVuZG9yPWRlYworCQliYXNpY19vcz10b3BzMjAKIAkJOzsKIAlkZWx0YSB8IDMzMDAgfCBtb3Rvcm9sYS0zMzAwIHwgbW90b3JvbGEtZGVsdGEgXAogCSAgICAgIHwgMzMwMC1tb3Rvcm9sYSB8IGRlbHRhLW1vdG9yb2xhKQotCQliYXNpY19tYWNoaW5lPW02OGstbW90b3JvbGEKLQkJOzsKLQlkcHgyMCB8IGRweDIwLSopCi0JCWJhc2ljX21hY2hpbmU9cnM2MDAwLWJ1bGwKLQkJb3M9JHtvczotYm9zeH0KKwkJY3B1PW02OGsKKwkJdmVuZG9yPW1vdG9yb2xhCiAJCTs7CiAJZHB4MiopCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1idWxsCi0JCW9zPXN5c3YzCi0JCTs7Ci0JZTUwMHZbMTJdKQotCQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgotCQlvcz0kb3Mic3BlIgotCQk7OwotCWU1MDB2WzEyXS0qKQotCQliYXNpY19tYWNoaW5lPXBvd2VycGMtYGVjaG8gIiRiYXNpY19tYWNoaW5lIiB8IHNlZCAncy9eW14tXSotLy8nYAotCQlvcz0kb3Mic3BlIgorCQljcHU9bTY4aworCQl2ZW5kb3I9YnVsbAorCQliYXNpY19vcz1zeXN2MwogCQk7OwogCWVuY29yZSB8IHVtYXggfCBtbWF4KQotCQliYXNpY19tYWNoaW5lPW5zMzJrLWVuY29yZQorCQljcHU9bnMzMmsKKwkJdmVuZG9yPWVuY29yZQogCQk7OwogCWVseHNpKQotCQliYXNpY19tYWNoaW5lPWVseHNpLWVseHNpCi0JCW9zPSR7b3M6LWJzZH0KKwkJY3B1PWVseHNpCisJCXZlbmRvcj1lbHhzaQorCQliYXNpY19vcz0ke2Jhc2ljX29zOi1ic2R9CiAJCTs7CiAJZngyODAwKQotCQliYXNpY19tYWNoaW5lPWk4NjAtYWxsaWFudAorCQljcHU9aTg2MAorCQl2ZW5kb3I9YWxsaWFudAogCQk7OwogCWdlbml4KQotCQliYXNpY19tYWNoaW5lPW5zMzJrLW5zCisJCWNwdT1uczMyaworCQl2ZW5kb3I9bnMKIAkJOzsKIAloMzA1MHIqIHwgaGl1eCopCi0JCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1oaXRhY2hpCi0JCW9zPWhpdXh3ZTIKLQkJOzsKLQlocDMwMC0qKQotCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJY3B1PWhwcGExLjEKKwkJdmVuZG9yPWhpdGFjaGkKKwkJYmFzaWNfb3M9aGl1eHdlMgogCQk7OwogCWhwM2s5WzAtOV1bMC05XSB8IGhwOVswLTldWzAtOV0pCi0JCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQljcHU9aHBwYTEuMAorCQl2ZW5kb3I9aHAKIAkJOzsKIAlocDlrMlswLTldWzAtOV0gfCBocDlrMzFbMC05XSkKLQkJYmFzaWNfbWFjaGluZT1tNjgwMDAtaHAKKwkJY3B1PW02ODAwMAorCQl2ZW5kb3I9aHAKIAkJOzsKIAlocDlrM1syLTldWzAtOV0pCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQljcHU9bTY4aworCQl2ZW5kb3I9aHAKIAkJOzsKIAlocDlrNlswLTldWzAtOV0gfCBocDZbMC05XVswLTldKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJY3B1PWhwcGExLjAKKwkJdmVuZG9yPWhwCiAJCTs7CiAJaHA5azdbMC03OV1bMC05XSB8IGhwN1swLTc5XVswLTldKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJY3B1PWhwcGExLjEKKwkJdmVuZG9yPWhwCiAJCTs7CiAJaHA5azc4WzAtOV0gfCBocDc4WzAtOV0pCiAJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCi0JCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQljcHU9aHBwYTEuMQorCQl2ZW5kb3I9aHAKIAkJOzsKIAlocDlrOFs2N10xIHwgaHA4WzY3XTEgfCBocDlrODBbMjRdIHwgaHA4MFsyNF0gfCBocDlrOFs3OF05IHwgaHA4Wzc4XTkgfCBocDlrODkzIHwgaHA4OTMpCiAJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCi0JCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQljcHU9aHBwYTEuMQorCQl2ZW5kb3I9aHAKIAkJOzsKIAlocDlrOFswLTldWzEzNjc5XSB8IGhwOFswLTldWzEzNjc5XSkKLQkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCWNwdT1ocHBhMS4xCisJCXZlbmRvcj1ocAogCQk7OwogCWhwOWs4WzAtOV1bMC05XSB8IGhwOFswLTldWzAtOV0pCi0JCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAotCQk7OwotCWkzNzAtaWJtKiB8IGlibSopCi0JCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KKwkJY3B1PWhwcGExLjAKKwkJdmVuZG9yPWhwCiAJCTs7CiAJaSo4NnYzMikKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAiJDEiIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKLQkJb3M9c3lzdjMyCisJCWNwdT0kKGVjaG8gIiQxIiB8IHNlZCAtZSAncy84Ni4qLzg2LycpCisJCXZlbmRvcj1wYworCQliYXNpY19vcz1zeXN2MzIKIAkJOzsKIAlpKjg2djQqKQotCQliYXNpY19tYWNoaW5lPWBlY2hvICIkMSIgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAotCQlvcz1zeXN2NAorCQljcHU9JChlY2hvICIkMSIgfCBzZWQgLWUgJ3MvODYuKi84Ni8nKQorCQl2ZW5kb3I9cGMKKwkJYmFzaWNfb3M9c3lzdjQKIAkJOzsKIAlpKjg2dikKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAiJDEiIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKLQkJb3M9c3lzdgorCQljcHU9JChlY2hvICIkMSIgfCBzZWQgLWUgJ3MvODYuKi84Ni8nKQorCQl2ZW5kb3I9cGMKKwkJYmFzaWNfb3M9c3lzdgogCQk7OwogCWkqODZzb2wyKQotCQliYXNpY19tYWNoaW5lPWBlY2hvICIkMSIgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAotCQlvcz1zb2xhcmlzMgorCQljcHU9JChlY2hvICIkMSIgfCBzZWQgLWUgJ3MvODYuKi84Ni8nKQorCQl2ZW5kb3I9cGMKKwkJYmFzaWNfb3M9c29sYXJpczIKIAkJOzsKIAlqOTAgfCBqOTAtY3JheSkKLQkJYmFzaWNfbWFjaGluZT1qOTAtY3JheQotCQlvcz0ke29zOi11bmljb3N9CisJCWNwdT1qOTAKKwkJdmVuZG9yPWNyYXkKKwkJYmFzaWNfb3M9JHtiYXNpY19vczotdW5pY29zfQogCQk7OwogCWlyaXMgfCBpcmlzNGQpCi0JCWJhc2ljX21hY2hpbmU9bWlwcy1zZ2kKLQkJY2FzZSAkb3MgaW4KKwkJY3B1PW1pcHMKKwkJdmVuZG9yPXNnaQorCQljYXNlICRiYXNpY19vcyBpbgogCQkgICAgaXJpeCopCiAJCQk7OwogCQkgICAgKikKLQkJCW9zPWlyaXg0CisJCQliYXNpY19vcz1pcml4NAogCQkJOzsKIAkJZXNhYwogCQk7OwotCWxlb24tKnxsZW9uWzMtOV0tKikKLQkJYmFzaWNfbWFjaGluZT1zcGFyYy1gZWNobyAiJGJhc2ljX21hY2hpbmUiIHwgc2VkICdzLy0uKi8vJ2AKLQkJOzsKLQltNjhrbm9tbXUtKikKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWBlY2hvICIkYmFzaWNfbWFjaGluZSIgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJb3M9bGludXgKLQkJOzsKLQltaWNyb2JsYXplKikKLQkJYmFzaWNfbWFjaGluZT1taWNyb2JsYXplLXhpbGlueAotCQk7OwogCW1pbmlmcmFtZSkKLQkJYmFzaWNfbWFjaGluZT1tNjgwMDAtY29udmVyZ2VudAorCQljcHU9bTY4MDAwCisJCXZlbmRvcj1jb252ZXJnZW50CiAJCTs7CiAJKm1pbnQgfCBtaW50WzAtOV0qIHwgKk1pTlQgfCAqTWlOVFswLTldKikKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWF0YXJpCi0JCW9zPW1pbnQKLQkJOzsKLQltaXBzMyotKikKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAiJGJhc2ljX21hY2hpbmUiIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYAotCQk7OwotCW1pcHMzKikKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAiJGJhc2ljX21hY2hpbmUiIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYC11bmtub3duCi0JCTs7Ci0JbXMxLSopCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gIiRiYXNpY19tYWNoaW5lIiB8IHNlZCAtZSAncy9tczEtL210LS8nYAorCQljcHU9bTY4aworCQl2ZW5kb3I9YXRhcmkKKwkJYmFzaWNfb3M9bWludAogCQk7OwogCW5ld3MtMzYwMCB8IHJpc2MtbmV3cykKLQkJYmFzaWNfbWFjaGluZT1taXBzLXNvbnkKLQkJb3M9bmV3c29zCisJCWNwdT1taXBzCisJCXZlbmRvcj1zb255CisJCWJhc2ljX29zPW5ld3NvcwogCQk7OwogCW5leHQgfCBtKi1uZXh0KQotCQliYXNpY19tYWNoaW5lPW02OGstbmV4dAotCQljYXNlICRvcyBpbgotCQkgICAgbmV4dHN0ZXAqICkKKwkJY3B1PW02OGsKKwkJdmVuZG9yPW5leHQKKwkJY2FzZSAkYmFzaWNfb3MgaW4KKwkJICAgIG9wZW5zdGVwKikKKwkJICAgICAgICA7OworCQkgICAgbmV4dHN0ZXAqKQogCQkJOzsKIAkJICAgIG5zMiopCi0JCSAgICAgIG9zPW5leHRzdGVwMgorCQkgICAgICBiYXNpY19vcz1uZXh0c3RlcDIKIAkJCTs7CiAJCSAgICAqKQotCQkgICAgICBvcz1uZXh0c3RlcDMKKwkJICAgICAgYmFzaWNfb3M9bmV4dHN0ZXAzCiAJCQk7OwogCQllc2FjCiAJCTs7CiAJbnAxKQotCQliYXNpY19tYWNoaW5lPW5wMS1nb3VsZAotCQk7OwotCW5lby10YW5kZW0pCi0JCWJhc2ljX21hY2hpbmU9bmVvLXRhbmRlbQotCQk7OwotCW5zZS10YW5kZW0pCi0JCWJhc2ljX21hY2hpbmU9bnNlLXRhbmRlbQotCQk7OwotCW5zci10YW5kZW0pCi0JCWJhc2ljX21hY2hpbmU9bnNyLXRhbmRlbQotCQk7OwotCW5zdi10YW5kZW0pCi0JCWJhc2ljX21hY2hpbmU9bnN2LXRhbmRlbQotCQk7OwotCW5zeC10YW5kZW0pCi0JCWJhc2ljX21hY2hpbmU9bnN4LXRhbmRlbQorCQljcHU9bnAxCisJCXZlbmRvcj1nb3VsZAogCQk7OwogCW9wNTBuLSogfCBvcDYwYy0qKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCi0JCW9zPXByb2VsZgotCQk7OwotCW9wZW5yaXNjIHwgb3BlbnJpc2MtKikKLQkJYmFzaWNfbWFjaGluZT1vcjMyLXVua25vd24KKwkJY3B1PWhwcGExLjEKKwkJdmVuZG9yPW9raQorCQliYXNpY19vcz1wcm9lbGYKIAkJOzsKIAlwYS1oaXRhY2hpKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQotCQlvcz1oaXV4d2UyCi0JCTs7Ci0JcGFyaXNjLSopCi0JCWJhc2ljX21hY2hpbmU9aHBwYS1gZWNobyAiJGJhc2ljX21hY2hpbmUiIHwgc2VkICdzL15bXi1dKi0vLydgCi0JCW9zPWxpbnV4CisJCWNwdT1ocHBhMS4xCisJCXZlbmRvcj1oaXRhY2hpCisJCWJhc2ljX29zPWhpdXh3ZTIKIAkJOzsKIAlwYmQpCi0JCWJhc2ljX21hY2hpbmU9c3BhcmMtdHRpCisJCWNwdT1zcGFyYworCQl2ZW5kb3I9dHRpCiAJCTs7CiAJcGJiKQotCQliYXNpY19tYWNoaW5lPW02OGstdHRpCisJCWNwdT1tNjhrCisJCXZlbmRvcj10dGkKIAkJOzsKLQlwYzUzMiB8IHBjNTMyLSopCi0JCWJhc2ljX21hY2hpbmU9bnMzMmstcGM1MzIKLQkJOzsKLQlwYzk4KQotCQliYXNpY19tYWNoaW5lPWkzODYtcGMKLQkJOzsKLQlwYzk4LSopCi0JCWJhc2ljX21hY2hpbmU9aTM4Ni1gZWNobyAiJGJhc2ljX21hY2hpbmUiIHwgc2VkICdzL15bXi1dKi0vLydgCi0JCTs7Ci0JcGVudGl1bSB8IHA1IHwgazUgfCBrNiB8IG5leGdlbiB8IHZpYWMzKQotCQliYXNpY19tYWNoaW5lPWk1ODYtcGMKLQkJOzsKLQlwZW50aXVtcHJvIHwgcDYgfCA2eDg2IHwgYXRobG9uIHwgYXRobG9uXyopCi0JCWJhc2ljX21hY2hpbmU9aTY4Ni1wYwotCQk7OwotCXBlbnRpdW1paSB8IHBlbnRpdW0yIHwgcGVudGl1bWlpaSB8IHBlbnRpdW0zKQotCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKLQkJOzsKLQlwZW50aXVtNCkKLQkJYmFzaWNfbWFjaGluZT1pNzg2LXBjCi0JCTs7Ci0JcGVudGl1bS0qIHwgcDUtKiB8IGs1LSogfCBrNi0qIHwgbmV4Z2VuLSogfCB2aWFjMy0qKQotCQliYXNpY19tYWNoaW5lPWk1ODYtYGVjaG8gIiRiYXNpY19tYWNoaW5lIiB8IHNlZCAncy9eW14tXSotLy8nYAotCQk7OwotCXBlbnRpdW1wcm8tKiB8IHA2LSogfCA2eDg2LSogfCBhdGhsb24tKikKLQkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICIkYmFzaWNfbWFjaGluZSIgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJOzsKLQlwZW50aXVtaWktKiB8IHBlbnRpdW0yLSogfCBwZW50aXVtaWlpLSogfCBwZW50aXVtMy0qKQotCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gIiRiYXNpY19tYWNoaW5lIiB8IHNlZCAncy9eW14tXSotLy8nYAotCQk7OwotCXBlbnRpdW00LSopCi0JCWJhc2ljX21hY2hpbmU9aTc4Ni1gZWNobyAiJGJhc2ljX21hY2hpbmUiIHwgc2VkICdzL15bXi1dKi0vLydgCisJcGM1MzIpCisJCWNwdT1uczMyaworCQl2ZW5kb3I9cGM1MzIKIAkJOzsKIAlwbikKLQkJYmFzaWNfbWFjaGluZT1wbi1nb3VsZAorCQljcHU9cG4KKwkJdmVuZG9yPWdvdWxkCiAJCTs7Ci0JcG93ZXIpCWJhc2ljX21hY2hpbmU9cG93ZXItaWJtCi0JCTs7Ci0JcHBjIHwgcHBjYmUpCWJhc2ljX21hY2hpbmU9cG93ZXJwYy11bmtub3duCi0JCTs7Ci0JcHBjLSogfCBwcGNiZS0qKQotCQliYXNpY19tYWNoaW5lPXBvd2VycGMtYGVjaG8gIiRiYXNpY19tYWNoaW5lIiB8IHNlZCAncy9eW14tXSotLy8nYAotCQk7OwotCXBwY2xlIHwgcG93ZXJwY2xpdHRsZSkKLQkJYmFzaWNfbWFjaGluZT1wb3dlcnBjbGUtdW5rbm93bgotCQk7OwotCXBwY2xlLSogfCBwb3dlcnBjbGl0dGxlLSopCi0JCWJhc2ljX21hY2hpbmU9cG93ZXJwY2xlLWBlY2hvICIkYmFzaWNfbWFjaGluZSIgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJOzsKLQlwcGM2NCkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtdW5rbm93bgotCQk7OwotCXBwYzY0LSopIGJhc2ljX21hY2hpbmU9cG93ZXJwYzY0LWBlY2hvICIkYmFzaWNfbWFjaGluZSIgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJOzsKLQlwcGM2NGxlIHwgcG93ZXJwYzY0bGl0dGxlKQotCQliYXNpY19tYWNoaW5lPXBvd2VycGM2NGxlLXVua25vd24KLQkJOzsKLQlwcGM2NGxlLSogfCBwb3dlcnBjNjRsaXR0bGUtKikKLQkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS1gZWNobyAiJGJhc2ljX21hY2hpbmUiIHwgc2VkICdzL15bXi1dKi0vLydgCisJcG93ZXIpCisJCWNwdT1wb3dlcgorCQl2ZW5kb3I9aWJtCiAJCTs7CiAJcHMyKQotCQliYXNpY19tYWNoaW5lPWkzODYtaWJtCisJCWNwdT1pMzg2CisJCXZlbmRvcj1pYm0KIAkJOzsKIAlybVs0Nl0wMCkKLQkJYmFzaWNfbWFjaGluZT1taXBzLXNpZW1lbnMKKwkJY3B1PW1pcHMKKwkJdmVuZG9yPXNpZW1lbnMKIAkJOzsKIAlydHBjIHwgcnRwYy0qKQotCQliYXNpY19tYWNoaW5lPXJvbXAtaWJtCi0JCTs7Ci0JczM5MCB8IHMzOTAtKikKLQkJYmFzaWNfbWFjaGluZT1zMzkwLWlibQotCQk7OwotCXMzOTB4IHwgczM5MHgtKikKLQkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KLQkJOzsKLQlzYjEpCi0JCWJhc2ljX21hY2hpbmU9bWlwc2lzYTY0c2IxLXVua25vd24KLQkJOzsKLQlzYjFlbCkKLQkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjFlbC11bmtub3duCisJCWNwdT1yb21wCisJCXZlbmRvcj1pYm0KIAkJOzsKIAlzZGUpCi0JCWJhc2ljX21hY2hpbmU9bWlwc2lzYTMyLXNkZQotCQlvcz0ke29zOi1lbGZ9Ci0JCTs7Ci0Jc2VxdWVudCkKLQkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKLQkJOzsKLQlzaDVlbCkKLQkJYmFzaWNfbWFjaGluZT1zaDVsZS11bmtub3duCisJCWNwdT1taXBzaXNhMzIKKwkJdmVuZG9yPXNkZQorCQliYXNpY19vcz0ke2Jhc2ljX29zOi1lbGZ9CiAJCTs7CiAJc2ltc28td3JzKQotCQliYXNpY19tYWNoaW5lPXNwYXJjbGl0ZS13cnMKLQkJb3M9dnh3b3JrcwotCQk7OwotCXNwdXIpCi0JCWJhc2ljX21hY2hpbmU9c3B1ci11bmtub3duCi0JCTs7Ci0Jc3QyMDAwKQotCQliYXNpY19tYWNoaW5lPW02OGstdGFuZGVtCi0JCTs7Ci0Jc3Ryb25nYXJtLSogfCB0aHVtYi0qKQotCQliYXNpY19tYWNoaW5lPWFybS1gZWNobyAiJGJhc2ljX21hY2hpbmUiIHwgc2VkICdzL15bXi1dKi0vLydgCi0JCTs7Ci0Jc3VuMikKLQkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCi0JCTs7Ci0Jc3VuMyB8IHN1bjMtKikKLQkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgotCQk7OwotCXN1bjQpCi0JCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCi0JCTs7Ci0Jc3VuMzg2IHwgc3VuMzg2aSB8IHJvYWRydW5uZXIpCi0JCWJhc2ljX21hY2hpbmU9aTM4Ni1zdW4KLQkJOzsKLQl0aWxlKikKLQkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCi0JCW9zPWxpbnV4LWdudQotCQk7OwotCXR4MzkpCi0JCWJhc2ljX21hY2hpbmU9bWlwc3R4MzktdW5rbm93bgotCQk7OwotCXR4MzllbCkKLQkJYmFzaWNfbWFjaGluZT1taXBzdHgzOWVsLXVua25vd24KKwkJY3B1PXNwYXJjbGl0ZQorCQl2ZW5kb3I9d3JzCisJCWJhc2ljX29zPXZ4d29ya3MKIAkJOzsKIAl0b3dlciB8IHRvd2VyLTMyKQotCQliYXNpY19tYWNoaW5lPW02OGstbmNyCisJCWNwdT1tNjhrCisJCXZlbmRvcj1uY3IKIAkJOzsKIAl2cHAqfHZ4fHZ4LSopCi0JCWJhc2ljX21hY2hpbmU9ZjMwMS1mdWppdHN1CisJCWNwdT1mMzAxCisJCXZlbmRvcj1mdWppdHN1CiAJCTs7Ci0JdzY1KikKLQkJYmFzaWNfbWFjaGluZT13NjUtd2RjCi0JCW9zPW5vbmUKKwl3NjUpCisJCWNwdT13NjUKKwkJdmVuZG9yPXdkYwogCQk7OwogCXc4OWstKikKLQkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLXdpbmJvbmQKLQkJb3M9cHJvZWxmCi0JCTs7Ci0JeDY0KQotCQliYXNpY19tYWNoaW5lPXg4Nl82NC1wYwotCQk7OwotCXhwcyB8IHhwczEwMCkKLQkJYmFzaWNfbWFjaGluZT14cHMxMDAtaG9uZXl3ZWxsCi0JCTs7Ci0JeHNjYWxlLSogfCB4c2NhbGVlW2JsXS0qKQotCQliYXNpY19tYWNoaW5lPWBlY2hvICIkYmFzaWNfbWFjaGluZSIgfCBzZWQgJ3MvXnhzY2FsZS9hcm0vJ2AKKwkJY3B1PWhwcGExLjEKKwkJdmVuZG9yPXdpbmJvbmQKKwkJYmFzaWNfb3M9cHJvZWxmCiAJCTs7CiAJbm9uZSkKLQkJYmFzaWNfbWFjaGluZT1ub25lLW5vbmUKLQkJb3M9JHtvczotbm9uZX0KKwkJY3B1PW5vbmUKKwkJdmVuZG9yPW5vbmUKKwkJOzsKKwlsZW9ufGxlb25bMy05XSkKKwkJY3B1PXNwYXJjCisJCXZlbmRvcj0kYmFzaWNfbWFjaGluZQorCQk7OworCWxlb24tKnxsZW9uWzMtOV0tKikKKwkJY3B1PXNwYXJjCisJCXZlbmRvcj0kKGVjaG8gIiRiYXNpY19tYWNoaW5lIiB8IHNlZCAncy8tLiovLycpCiAJCTs7CiAKLSMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgbWFudWZhY3R1cmVyIG9mIGNlcnRhaW4gQ1BVIHR5cGVzLiAgSXQgaXMgaW4KLSMgc29tZSBjYXNlcyB0aGUgb25seSBtYW51ZmFjdHVyZXIsIGluIG90aGVycywgaXQgaXMgdGhlIG1vc3QgcG9wdWxhci4KLQl3ODlrKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCSotKikKKwkJIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMTYyCisJCUlGUz0iLSIgcmVhZCBjcHUgdmVuZG9yIDw8RU9GCiskYmFzaWNfbWFjaGluZQorRU9GCiAJCTs7Ci0Jb3A1MG4pCi0JCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkjIFdlIHVzZSBgcGMnIHJhdGhlciB0aGFuIGB1bmtub3duJworCSMgYmVjYXVzZSAoMSkgdGhhdCdzIHdoYXQgdGhleSBub3JtYWxseSBhcmUsIGFuZAorCSMgKDIpIHRoZSB3b3JkICJ1bmtub3duIiB0ZW5kcyB0byBjb25mdXNlIGJlZ2lubmluZyB1c2Vycy4KKwlpKjg2IHwgeDg2XzY0KQorCQljcHU9JGJhc2ljX21hY2hpbmUKKwkJdmVuZG9yPXBjCiAJCTs7Ci0Jb3A2MGMpCi0JCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkjIFRoZXNlIHJ1bGVzIGFyZSBkdXBsaWNhdGVkIGZyb20gYmVsb3cgZm9yIHNha2Ugb2YgdGhlIHNwZWNpYWwgY2FzZSBhYm92ZTsKKwkjIGkuZS4gdGhpbmdzIHRoYXQgbm9ybWFsaXplZCB0byB4ODYgYXJjaGVzIHNob3VsZCBhbHNvIGRlZmF1bHQgdG8gInBjIgorCXBjOTgpCisJCWNwdT1pMzg2CisJCXZlbmRvcj1wYwogCQk7OwotCXJvbXApCi0JCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KKwl4NjQgfCBhbWQ2NCkKKwkJY3B1PXg4Nl82NAorCQl2ZW5kb3I9cGMKIAkJOzsKLQltbWl4KQotCQliYXNpY19tYWNoaW5lPW1taXgta251dGgKLQkJOzsKLQlyczYwMDApCi0JCWJhc2ljX21hY2hpbmU9cnM2MDAwLWlibQotCQk7OwotCXZheCkKLQkJYmFzaWNfbWFjaGluZT12YXgtZGVjCi0JCTs7Ci0JcGRwMTEpCi0JCWJhc2ljX21hY2hpbmU9cGRwMTEtZGVjCi0JCTs7Ci0Jd2UzMmspCi0JCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0Ci0JCTs7Ci0Jc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMzRdZWIgfCBzaFsxMjM0XWxlIHwgc2hbMjNdZWxlKQotCQliYXNpY19tYWNoaW5lPXNoLXVua25vd24KLQkJOzsKLQljeWRyYSkKLQkJYmFzaWNfbWFjaGluZT1jeWRyYS1jeWRyb21lCi0JCTs7Ci0Jb3Jpb24pCi0JCWJhc2ljX21hY2hpbmU9b3Jpb24taGlnaGxldmVsCi0JCTs7Ci0Jb3Jpb24xMDUpCi0JCWJhc2ljX21hY2hpbmU9Y2xpcHBlci1oaWdobGV2ZWwKLQkJOzsKLQltYWMgfCBtcHcgfCBtYWMtbXB3KQotCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKLQkJOzsKLQlwbWFjIHwgcG1hYy1tcHcpCi0JCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1hcHBsZQotCQk7OwotCSotdW5rbm93bikKLQkJIyBNYWtlIHN1cmUgdG8gbWF0Y2ggYW4gYWxyZWFkeS1jYW5vbmljYWxpemVkIG1hY2hpbmUgbmFtZS4KLQkJOzsKKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLgogCSopCi0JCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgIiQxIlwnOiBtYWNoaW5lIFxgIiRiYXNpY19tYWNoaW5lIlwnIG5vdCByZWNvZ25pemVkIDE+JjIKLQkJZXhpdCAxCisJCWNwdT0kYmFzaWNfbWFjaGluZQorCQl2ZW5kb3I9dW5rbm93bgorCQk7OworZXNhYworCit1bnNldCAtdiBiYXNpY19tYWNoaW5lCisKKyMgRGVjb2RlIGJhc2ljIG1hY2hpbmVzIGluIHRoZSBmdWxsIGFuZCBwcm9wZXIgQ1BVLUNvbXBhbnkgZm9ybS4KK2Nhc2UgJGNwdS0kdmVuZG9yIGluCisJIyBIZXJlIHdlIGhhbmRsZSB0aGUgZGVmYXVsdCBtYW51ZmFjdHVyZXIgb2YgY2VydGFpbiBDUFUgdHlwZXMgaW4gY2Fub25pY2FsIGZvcm0uIEl0IGlzIGluCisJIyBzb21lIGNhc2VzIHRoZSBvbmx5IG1hbnVmYWN0dXJlciwgaW4gb3RoZXJzLCBpdCBpcyB0aGUgbW9zdCBwb3B1bGFyLgorCWNyYXludi11bmtub3duKQorCQl2ZW5kb3I9Y3JheQorCQliYXNpY19vcz0ke2Jhc2ljX29zOi11bmljb3NtcH0KKwkJOzsKKwljOTAtdW5rbm93biB8IGM5MC1jcmF5KQorCQl2ZW5kb3I9Y3JheQorCQliYXNpY19vcz0ke0Jhc2ljX29zOi11bmljb3N9CisJCTs7CisJZng4MC11bmtub3duKQorCQl2ZW5kb3I9YWxsaWFudAorCQk7OworCXJvbXAtdW5rbm93bikKKwkJdmVuZG9yPWlibQorCQk7OworCW1taXgtdW5rbm93bikKKwkJdmVuZG9yPWtudXRoCisJCTs7CisJbWljcm9ibGF6ZS11bmtub3duIHwgbWljcm9ibGF6ZWVsLXVua25vd24pCisJCXZlbmRvcj14aWxpbngKKwkJOzsKKwlyczYwMDAtdW5rbm93bikKKwkJdmVuZG9yPWlibQorCQk7OworCXZheC11bmtub3duKQorCQl2ZW5kb3I9ZGVjCisJCTs7CisJcGRwMTEtdW5rbm93bikKKwkJdmVuZG9yPWRlYworCQk7OworCXdlMzJrLXVua25vd24pCisJCXZlbmRvcj1hdHQKKwkJOzsKKwljeWRyYS11bmtub3duKQorCQl2ZW5kb3I9Y3lkcm9tZQorCQk7OworCWkzNzAtaWJtKikKKwkJdmVuZG9yPWlibQorCQk7OworCW9yaW9uLXVua25vd24pCisJCXZlbmRvcj1oaWdobGV2ZWwKKwkJOzsKKwl4cHMtdW5rbm93biB8IHhwczEwMC11bmtub3duKQorCQljcHU9eHBzMTAwCisJCXZlbmRvcj1ob25leXdlbGwKKwkJOzsKKworCSMgSGVyZSB3ZSBub3JtYWxpemUgQ1BVIHR5cGVzIHdpdGggYSBtaXNzaW5nIG9yIG1hdGNoaW5nIHZlbmRvcgorCWRweDIwLXVua25vd24gfCBkcHgyMC1idWxsKQorCQljcHU9cnM2MDAwCisJCXZlbmRvcj1idWxsCisJCWJhc2ljX29zPSR7YmFzaWNfb3M6LWJvc3h9CisJCTs7CisKKwkjIEhlcmUgd2Ugbm9ybWFsaXplIENQVSB0eXBlcyBpcnJlc3BlY3RpdmUgb2YgdGhlIHZlbmRvcgorCWFtZDY0LSopCisJCWNwdT14ODZfNjQKKwkJOzsKKwlibGFja2Zpbi0qKQorCQljcHU9YmZpbgorCQliYXNpY19vcz1saW51eAorCQk7OworCWM1NHgtKikKKwkJY3B1PXRpYzU0eAorCQk7OworCWM1NXgtKikKKwkJY3B1PXRpYzU1eAorCQk7OworCWM2eC0qKQorCQljcHU9dGljNngKKwkJOzsKKwllNTAwdlsxMl0tKikKKwkJY3B1PXBvd2VycGMKKwkJYmFzaWNfb3M9JHtiYXNpY19vc30ic3BlIgorCQk7OworCW1pcHMzKi0qKQorCQljcHU9bWlwczY0CisJCTs7CisJbXMxLSopCisJCWNwdT1tdAorCQk7OworCW02OGtub21tdS0qKQorCQljcHU9bTY4aworCQliYXNpY19vcz1saW51eAorCQk7OworCW05czEyei0qIHwgbTY4aGNzMTJ6LSogfCBoY3MxMnotKiB8IHMxMnotKikKKwkJY3B1PXMxMnoKKwkJOzsKKwlvcGVucmlzYy0qKQorCQljcHU9b3IzMgorCQk7OworCXBhcmlzYy0qKQorCQljcHU9aHBwYQorCQliYXNpY19vcz1saW51eAorCQk7OworCXBlbnRpdW0tKiB8IHA1LSogfCBrNS0qIHwgazYtKiB8IG5leGdlbi0qIHwgdmlhYzMtKikKKwkJY3B1PWk1ODYKKwkJOzsKKwlwZW50aXVtcHJvLSogfCBwNi0qIHwgNng4Ni0qIHwgYXRobG9uLSogfCBhdGhhbG9uXyotKikKKwkJY3B1PWk2ODYKKwkJOzsKKwlwZW50aXVtaWktKiB8IHBlbnRpdW0yLSogfCBwZW50aXVtaWlpLSogfCBwZW50aXVtMy0qKQorCQljcHU9aTY4NgorCQk7OworCXBlbnRpdW00LSopCisJCWNwdT1pNzg2CisJCTs7CisJcGM5OC0qKQorCQljcHU9aTM4NgorCQk7OworCXBwYy0qIHwgcHBjYmUtKikKKwkJY3B1PXBvd2VycGMKKwkJOzsKKwlwcGNsZS0qIHwgcG93ZXJwY2xpdHRsZS0qKQorCQljcHU9cG93ZXJwY2xlCisJCTs7CisJcHBjNjQtKikKKwkJY3B1PXBvd2VycGM2NAorCQk7OworCXBwYzY0bGUtKiB8IHBvd2VycGM2NGxpdHRsZS0qKQorCQljcHU9cG93ZXJwYzY0bGUKKwkJOzsKKwlzYjEtKikKKwkJY3B1PW1pcHNpc2E2NHNiMQorCQk7OworCXNiMWVsLSopCisJCWNwdT1taXBzaXNhNjRzYjFlbAorCQk7OworCXNoNWVbbGJdLSopCisJCWNwdT0kKGVjaG8gIiRjcHUiIHwgc2VkICdzL15cKHNoLlwpZVwoLlwpJC9cMVwyZS8nKQorCQk7OworCXNwdXItKikKKwkJY3B1PXNwdXIKKwkJOzsKKwlzdHJvbmdhcm0tKiB8IHRodW1iLSopCisJCWNwdT1hcm0KKwkJOzsKKwl0eDM5LSopCisJCWNwdT1taXBzdHgzOQorCQk7OworCXR4MzllbC0qKQorCQljcHU9bWlwc3R4MzllbAorCQk7OworCXg2NC0qKQorCQljcHU9eDg2XzY0CisJCTs7CisJeHNjYWxlLSogfCB4c2NhbGVlW2JsXS0qKQorCQljcHU9JChlY2hvICIkY3B1IiB8IHNlZCAncy9eeHNjYWxlL2FybS8nKQorCQk7OworCWFybTY0LSopCisJCWNwdT1hYXJjaDY0CisJCTs7CisKKwkjIFJlY29nbml6ZSB0aGUgY2Fub25pY2FsIENQVSBUeXBlcyB0aGF0IGxpbWl0IGFuZC9vciBtb2RpZnkgdGhlCisJIyBjb21wYW55IG5hbWVzIHRoZXkgYXJlIHBhaXJlZCB3aXRoLgorCWNyMTYtKikKKwkJYmFzaWNfb3M9JHtiYXNpY19vczotZWxmfQorCQk7OworCWNyaXN2MzItKiB8IGV0cmF4ZnMqLSopCisJCWNwdT1jcmlzdjMyCisJCXZlbmRvcj1heGlzCisJCTs7CisJY3Jpcy0qIHwgZXRyYXgqLSopCisJCWNwdT1jcmlzCisJCXZlbmRvcj1heGlzCisJCTs7CisJY3J4LSopCisJCWJhc2ljX29zPSR7YmFzaWNfb3M6LWVsZn0KKwkJOzsKKwluZW8tdGFuZGVtKQorCQljcHU9bmVvCisJCXZlbmRvcj10YW5kZW0KKwkJOzsKKwluc2UtdGFuZGVtKQorCQljcHU9bnNlCisJCXZlbmRvcj10YW5kZW0KKwkJOzsKKwluc3ItdGFuZGVtKQorCQljcHU9bnNyCisJCXZlbmRvcj10YW5kZW0KKwkJOzsKKwluc3YtdGFuZGVtKQorCQljcHU9bnN2CisJCXZlbmRvcj10YW5kZW0KKwkJOzsKKwluc3gtdGFuZGVtKQorCQljcHU9bnN4CisJCXZlbmRvcj10YW5kZW0KKwkJOzsKKwltaXBzYWxsZWdyZXhlbC1zb255KQorCQljcHU9bWlwc2FsbGVncmV4ZWwKKwkJdmVuZG9yPXNvbnkKKwkJOzsKKwl0aWxlKi0qKQorCQliYXNpY19vcz0ke2Jhc2ljX29zOi1saW51eC1nbnV9CisJCTs7CisKKwkqKQorCQkjIFJlY29nbml6ZSB0aGUgY2Fub25pY2FsIENQVSB0eXBlcyB0aGF0IGFyZSBhbGxvd2VkIHdpdGggYW55CisJCSMgY29tcGFueSBuYW1lLgorCQljYXNlICRjcHUgaW4KKwkJCTE3NTBhIHwgNTgwIFwKKwkJCXwgYTI5ayBcCisJCQl8IGFhcmNoNjQgfCBhYXJjaDY0X2JlIFwKKwkJCXwgYWJhY3VzIFwKKwkJCXwgYWxwaGEgfCBhbHBoYWV2WzQtOF0gfCBhbHBoYWV2NTYgfCBhbHBoYWV2Nls3OF0gXAorCQkJfCBhbHBoYTY0IHwgYWxwaGE2NGV2WzQtOF0gfCBhbHBoYTY0ZXY1NiB8IGFscGhhNjRldjZbNzhdIFwKKwkJCXwgYWxwaGFwY2E1WzY3XSB8IGFscGhhNjRwY2E1WzY3XSBcCisJCQl8IGFtMzNfMi4wIFwKKwkJCXwgYW1kZ2NuIFwKKwkJCXwgYXJjIHwgYXJjZWIgXAorCQkJfCBhcm0gfCBhcm1bbGJdZSB8IGFybWVbbGJdIHwgYXJtdiogXAorCQkJfCBhdnIgfCBhdnIzMiBcCisJCQl8IGFzbWpzIFwKKwkJCXwgYmEgXAorCQkJfCBiZTMyIHwgYmU2NCBcCisJCQl8IGJmaW4gfCBicGYgfCBiczIwMDAgXAorCQkJfCBjWzEyM10qIHwgYzMwIHwgW2NqdF05MCB8IGM0eCBcCisJCQl8IGM4MDUxIHwgY2xpcHBlciB8IGNyYXludiB8IGNza3kgfCBjeWRyYSBcCisJCQl8IGQxMHYgfCBkMzB2IHwgZGx4IHwgZHNwMTZ4eCBcCisJCQl8IGUyayB8IGVseHNpIHwgZXBpcGhhbnkgXAorCQkJfCBmMzBbMDFdIHwgZjcwMCB8IGZpZG8gfCBmcjMwIHwgZnJ2IHwgZnQzMiB8IGZ4ODAgXAorCQkJfCBoODMwMCB8IGg4NTAwIFwKKwkJCXwgaHBwYSB8IGhwcGExLlswMV0gfCBocHBhMi4wIHwgaHBwYTIuMFtud10gfCBocHBhNjQgXAorCQkJfCBoZXhhZ29uIFwKKwkJCXwgaTM3MCB8IGkqODYgfCBpODYwIHwgaTk2MCB8IGlhMTYgfCBpYTY0IFwKKwkJCXwgaXAyayB8IGlxMjAwMCBcCisJCQl8IGsxb20gXAorCQkJfCBsZTMyIHwgbGU2NCBcCisJCQl8IGxtMzIgXAorCQkJfCBsb29uZ2FyY2gzMiB8IGxvb25nYXJjaDY0IHwgbG9vbmdhcmNoeDMyIFwKKwkJCXwgbTMyYyB8IG0zMnIgfCBtMzJybGUgXAorCQkJfCBtNTIwMCB8IG02ODAwMCB8IG02ODBbMDEyMzQ2XTAgfCBtNjgzNjAgfCBtNjgzPzIgfCBtNjhrIFwKKwkJCXwgbTY4MTEgfCBtNjhoYzExIHwgbTY4MTIgfCBtNjhoYzEyIHwgbTY4aGNzMTJ4IFwKKwkJCXwgbTg4MTEwIHwgbTg4ayB8IG1heHEgfCBtYiB8IG1jb3JlIHwgbWVwIHwgbWV0YWcgXAorCQkJfCBtaWNyb2JsYXplIHwgbWljcm9ibGF6ZWVsIFwKKwkJCXwgbWlwcyB8IG1pcHNiZSB8IG1pcHNlYiB8IG1pcHNlbCB8IG1pcHNsZSBcCisJCQl8IG1pcHMxNiBcCisJCQl8IG1pcHM2NCB8IG1pcHM2NGViIHwgbWlwczY0ZWwgXAorCQkJfCBtaXBzNjRvY3Rlb24gfCBtaXBzNjRvY3Rlb25lbCBcCisJCQl8IG1pcHM2NG9yaW9uIHwgbWlwczY0b3Jpb25lbCBcCisJCQl8IG1pcHM2NHI1OTAwIHwgbWlwczY0cjU5MDBlbCBcCisJCQl8IG1pcHM2NHZyIHwgbWlwczY0dnJlbCBcCisJCQl8IG1pcHM2NHZyNDEwMCB8IG1pcHM2NHZyNDEwMGVsIFwKKwkJCXwgbWlwczY0dnI0MzAwIHwgbWlwczY0dnI0MzAwZWwgXAorCQkJfCBtaXBzNjR2cjUwMDAgfCBtaXBzNjR2cjUwMDBlbCBcCisJCQl8IG1pcHM2NHZyNTkwMCB8IG1pcHM2NHZyNTkwMGVsIFwKKwkJCXwgbWlwc2lzYTMyIHwgbWlwc2lzYTMyZWwgXAorCQkJfCBtaXBzaXNhMzJyMiB8IG1pcHNpc2EzMnIyZWwgXAorCQkJfCBtaXBzaXNhMzJyNiB8IG1pcHNpc2EzMnI2ZWwgXAorCQkJfCBtaXBzaXNhNjQgfCBtaXBzaXNhNjRlbCBcCisJCQl8IG1pcHNpc2E2NHIyIHwgbWlwc2lzYTY0cjJlbCBcCisJCQl8IG1pcHNpc2E2NHI2IHwgbWlwc2lzYTY0cjZlbCBcCisJCQl8IG1pcHNpc2E2NHNiMSB8IG1pcHNpc2E2NHNiMWVsIFwKKwkJCXwgbWlwc2lzYTY0c3I3MWsgfCBtaXBzaXNhNjRzcjcxa2VsIFwKKwkJCXwgbWlwc3I1OTAwIHwgbWlwc3I1OTAwZWwgXAorCQkJfCBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwgXAorCQkJfCBtbWl4IFwKKwkJCXwgbW4xMDIwMCB8IG1uMTAzMDAgXAorCQkJfCBtb3hpZSBcCisJCQl8IG10IFwKKwkJCXwgbXNwNDMwIFwKKwkJCXwgbmRzMzIgfCBuZHMzMmxlIHwgbmRzMzJiZSBcCisJCQl8IG5mcCBcCisJCQl8IG5pb3MgfCBuaW9zMiB8IG5pb3MyZWIgfCBuaW9zMmVsIFwKKwkJCXwgbm9uZSB8IG5wMSB8IG5zMTZrIHwgbnMzMmsgfCBudnB0eCBcCisJCQl8IG9wZW44IFwKKwkJCXwgb3IxayogXAorCQkJfCBvcjMyIFwKKwkJCXwgb3Jpb24gXAorCQkJfCBwaWNvY2hpcCBcCisJCQl8IHBkcDEwIHwgcGRwMTEgfCBwaiB8IHBqbCB8IHBuIHwgcG93ZXIgXAorCQkJfCBwb3dlcnBjIHwgcG93ZXJwYzY0IHwgcG93ZXJwYzY0bGUgfCBwb3dlcnBjbGUgfCBwb3dlcnBjc3BlIFwKKwkJCXwgcHJ1IFwKKwkJCXwgcHlyYW1pZCBcCisJCQl8IHJpc2N2IHwgcmlzY3YzMiB8IHJpc2N2NjQgXAorCQkJfCBybDc4IHwgcm9tcCB8IHJzNjAwMCB8IHJ4IFwKKwkJCXwgczM5MCB8IHMzOTB4IFwKKwkJCXwgc2NvcmUgXAorCQkJfCBzaCB8IHNobCBcCisJCQl8IHNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlW2xiXSB8IHNoWzIzXWUgfCBzaGVbbGJdIHwgc2hbbGJdZSBcCisJCQl8IHNoWzEyMzRdZVtsYl0gfCAgc2hbMTIzNDVdW2xiXWUgfCBzaFsyM11lbGUgfCBzaDY0IHwgc2g2NGxlIFwKKwkJCXwgc3BhcmMgfCBzcGFyYzY0IHwgc3BhcmM2NGIgfCBzcGFyYzY0diB8IHNwYXJjODZ4IHwgc3BhcmNsZXQgXAorCQkJfCBzcGFyY2xpdGUgXAorCQkJfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYgfCBzdjEgfCBzeCogXAorCQkJfCBzcHUgXAorCQkJfCB0YWhvZSBcCisJCQl8IHRodW1idjcqIFwKKwkJCXwgdGljMzAgfCB0aWM0eCB8IHRpYzU0eCB8IHRpYzU1eCB8IHRpYzZ4IHwgdGljODAgXAorCQkJfCB0cm9uIFwKKwkJCXwgdWJpY29tMzIgXAorCQkJfCB2NzAgfCB2ODUwIHwgdjg1MGUgfCB2ODUwZTEgfCB2ODUwZXMgfCB2ODUwZTIgfCB2ODUwZTJ2MyBcCisJCQl8IHZheCBcCisJCQl8IHZpc2l1bSBcCisJCQl8IHc2NSBcCisJCQl8IHdhc20zMiB8IHdhc202NCBcCisJCQl8IHdlMzJrIFwKKwkJCXwgeDg2IHwgeDg2XzY0IHwgeGMxNnggfCB4Z2F0ZSB8IHhwczEwMCBcCisJCQl8IHhzdG9ybXkxNiB8IHh0ZW5zYSogXAorCQkJfCB5bXAgXAorCQkJfCB6OGsgfCB6ODApCisJCQkJOzsKKworCQkJKikKKwkJCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCIkMSJcJzogbWFjaGluZSBcYCIkY3B1LSR2ZW5kb3IiXCcgbm90IHJlY29nbml6ZWQgMT4mMgorCQkJCWV4aXQgMQorCQkJCTs7CisJCWVzYWMKIAkJOzsKIGVzYWMKIAogIyBIZXJlIHdlIGNhbm9uaWNhbGl6ZSBjZXJ0YWluIGFsaWFzZXMgZm9yIG1hbnVmYWN0dXJlcnMuCi1jYXNlICRiYXNpY19tYWNoaW5lIGluCi0JKi1kaWdpdGFsKikKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAiJGJhc2ljX21hY2hpbmUiIHwgc2VkICdzL2RpZ2l0YWwuKi9kZWMvJ2AKK2Nhc2UgJHZlbmRvciBpbgorCWRpZ2l0YWwqKQorCQl2ZW5kb3I9ZGVjCiAJCTs7Ci0JKi1jb21tb2RvcmUqKQotCQliYXNpY19tYWNoaW5lPWBlY2hvICIkYmFzaWNfbWFjaGluZSIgfCBzZWQgJ3MvY29tbW9kb3JlLiovY2JtLydgCisJY29tbW9kb3JlKikKKwkJdmVuZG9yPWNibQogCQk7OwogCSopCiAJCTs7CkBAIC0xMjg2LDggKzEyODAsNDcgQEAKIAogIyBEZWNvZGUgbWFudWZhY3R1cmVyLXNwZWNpZmljIGFsaWFzZXMgZm9yIGNlcnRhaW4gb3BlcmF0aW5nIHN5c3RlbXMuCiAKLWlmIFsgeCRvcyAhPSB4IF0KK2lmIHRlc3QgeCRiYXNpY19vcyAhPSB4CiB0aGVuCisKKyMgRmlyc3QgcmVjb2duaXplIHNvbWUgYWQtaG9jIGNhZXMsIG9yIHBlcmhhcHMgc3BsaXQga2VybmVsLW9zLCBvciBlbHNlIGp1c3QKKyMgc2V0IG9zLgorY2FzZSAkYmFzaWNfb3MgaW4KKwlnbnUvbGludXgqKQorCQlrZXJuZWw9bGludXgKKwkJb3M9JChlY2hvICRiYXNpY19vcyB8IHNlZCAtZSAnc3xnbnUvbGludXh8Z251fCcpCisJCTs7CisJb3MyLWVteCkKKwkJa2VybmVsPW9zMgorCQlvcz0kKGVjaG8gJGJhc2ljX29zIHwgc2VkIC1lICdzfG9zMi1lbXh8ZW14fCcpCisJCTs7CisJbnRvLXFueCopCisJCWtlcm5lbD1udG8KKwkJb3M9JChlY2hvICRiYXNpY19vcyB8IHNlZCAtZSAnc3xudG8tcW54fHFueHwnKQorCQk7OworCSotKikKKwkJIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMTYyCisJCUlGUz0iLSIgcmVhZCBrZXJuZWwgb3MgPDxFT0YKKyRiYXNpY19vcworRU9GCisJCTs7CisJIyBEZWZhdWx0IE9TIHdoZW4ganVzdCBrZXJuZWwgd2FzIHNwZWNpZmllZAorCW50byopCisJCWtlcm5lbD1udG8KKwkJb3M9JChlY2hvICRiYXNpY19vcyB8IHNlZCAtZSAnc3xudG98cW54fCcpCisJCTs7CisJbGludXgqKQorCQlrZXJuZWw9bGludXgKKwkJb3M9JChlY2hvICRiYXNpY19vcyB8IHNlZCAtZSAnc3xsaW51eHxnbnV8JykKKwkJOzsKKwkqKQorCQlrZXJuZWw9CisJCW9zPSRiYXNpY19vcworCQk7OworZXNhYworCisjIE5vdywgbm9ybWFsaXplIHRoZSBPUyAoa25vd2luZyB3ZSBqdXN0IGhhdmUgb25lIGNvbXBvbmVudCwgaXQncyBub3QgYSBrZXJuZWwsCisjIGV0Yy4pCiBjYXNlICRvcyBpbgogCSMgRmlyc3QgbWF0Y2ggc29tZSBzeXN0ZW0gdHlwZSBhbGlhc2VzIHRoYXQgbWlnaHQgZ2V0IGNvbmZ1c2VkCiAJIyB3aXRoIHZhbGlkIHN5c3RlbSB0eXBlcy4KQEAgLTEyOTksNyArMTMzMiw3IEBACiAJCW9zPWNuawogCQk7OwogCXNvbGFyaXMxIHwgc29sYXJpczEuKikKLQkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHNvbGFyaXMxfHN1bm9zNHwnYAorCQlvcz0kKGVjaG8gJG9zIHwgc2VkIC1lICdzfHNvbGFyaXMxfHN1bm9zNHwnKQogCQk7OwogCXNvbGFyaXMpCiAJCW9zPXNvbGFyaXMyCkBAIC0xMzA3LDkgKzEzNDAsNiBAQAogCXVuaXh3YXJlKikKIAkJb3M9c3lzdjQuMnV3CiAJCTs7Ci0JZ251L2xpbnV4KikKLQkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfGdudS9saW51eHxsaW51eC1nbnV8J2AKLQkJOzsKIAkjIGVzMTgwMCBpcyBoZXJlIHRvIGF2b2lkIGJlaW5nIG1hdGNoZWQgYnkgZXMqIChhIGRpZmZlcmVudCBPUykKIAllczE4MDAqKQogCQlvcz1vc2UKQEAgLTEzMzEsMTIgKzEzNjEsOSBAQAogCQlvcz1zY28zLjJ2NAogCQk7OwogCXNjbzMuMi5bNC05XSopCi0JCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAncy9zY28zLjIuL3NjbzMuMnYvJ2AKKwkJb3M9JChlY2hvICRvcyB8IHNlZCAtZSAncy9zY28zLjIuL3NjbzMuMnYvJykKIAkJOzsKLQlzY28zLjJ2WzQtOV0qIHwgc2NvNXY2KikKLQkJIyBEb24ndCBmb3JnZXQgdmVyc2lvbiBpZiBpdCBpcyAzLjJ2NCBvciBuZXdlci4KLQkJOzsKLQlzY291dCkKKwlzY28qdiogfCBzY291dCkKIAkJIyBEb24ndCBtYXRjaCBiZWxvdwogCQk7OwogCXNjbyopCkBAIC0xMzQ1LDc4ICsxMzcyLDI2IEBACiAJcHNvcyopCiAJCW9zPXBzb3MKIAkJOzsKLQkjIE5vdyBhY2NlcHQgdGhlIGJhc2ljIHN5c3RlbSB0eXBlcy4KLQkjIFRoZSBwb3J0YWJsZSBzeXN0ZW1zIGNvbWVzIGZpcnN0LgotCSMgRWFjaCBhbHRlcm5hdGl2ZSBNVVNUIGVuZCBpbiBhICogdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KLQkjIHN5c3YqIGlzIG5vdCBoZXJlIGJlY2F1c2UgaXQgY29tZXMgbGF0ZXIsIGFmdGVyIHN5c3ZyNC4KLQlnbnUqIHwgYnNkKiB8IG1hY2gqIHwgbWluaXgqIHwgZ2VuaXgqIHwgdWx0cml4KiB8IGlyaXgqIFwKLQkgICAgIHwgKnZtcyogfCBlc2l4KiB8IGFpeCogfCBjbmsqIHwgc3Vub3MgfCBzdW5vc1szNF0qXAotCSAgICAgfCBocHV4KiB8IHVub3MqIHwgb3NmKiB8IGx1bmEqIHwgZGd1eCogfCBhdXJvcmF1eCogfCBzb2xhcmlzKiBcCi0JICAgICB8IHN5bSogfCBrb3BlbnNvbGFyaXMqIHwgcGxhbjkqIFwKLQkgICAgIHwgYW1pZ2FvcyogfCBhbWlnYWRvcyogfCBtc2RvcyogfCBuZXdzb3MqIHwgdW5pY29zKiB8IGFvZiogXAotCSAgICAgfCBhb3MqIHwgYXJvcyogfCBjbG91ZGFiaSogfCBzb3J0aXgqIFwKLQkgICAgIHwgbmluZHkqIHwgdnhzaW0qIHwgdnh3b3JrcyogfCBlYm1vbiogfCBobXMqIHwgbXZzKiBcCi0JICAgICB8IGNsaXgqIHwgcmlzY29zKiB8IHVuaXBsdXMqIHwgaXJpcyogfCBydHUqIHwgeGVuaXgqIFwKLQkgICAgIHwga25ldGJzZCogfCBtaXJic2QqIHwgbmV0YnNkKiBcCi0JICAgICB8IGJpdHJpZyogfCBvcGVuYnNkKiB8IHNvbGlkYnNkKiB8IGxpYmVydHlic2QqIFwKLQkgICAgIHwgZWtrb2JzZCogfCBrZnJlZWJzZCogfCBmcmVlYnNkKiB8IHJpc2NpeCogfCBseW54b3MqIFwKLQkgICAgIHwgYm9zeCogfCBuZXh0c3RlcCogfCBjeHV4KiB8IGFvdXQqIHwgZWxmKiB8IG9hYmkqIFwKLQkgICAgIHwgcHR4KiB8IGNvZmYqIHwgZWNvZmYqIHwgd2lubnQqIHwgZG9tYWluKiB8IHZzdGEqIFwKLQkgICAgIHwgdWRpKiB8IGVhYmkqIHwgbGl0ZXMqIHwgaWVlZSogfCBnbzMyKiB8IGF1eCogfCBoY29zKiBcCi0JICAgICB8IGNob3J1c3JkYiogfCBjZWdjYyogfCBnbGlkaXgqIFwKLQkgICAgIHwgY3lnd2luKiB8IG1zeXMqIHwgcGUqIHwgbW9zcyogfCBwcm9lbGYqIHwgcnRlbXMqIFwKLQkgICAgIHwgbWlkaXBpeCogfCBtaW5ndzMyKiB8IG1pbmd3NjQqIHwgbGludXgtZ251KiB8IGxpbnV4LWFuZHJvaWQqIFwKLQkgICAgIHwgbGludXgtbmV3bGliKiB8IGxpbnV4LW11c2wqIHwgbGludXgtdWNsaWJjKiBcCi0JICAgICB8IHV4cHYqIHwgYmVvcyogfCBtcGVpeCogfCB1ZGsqIHwgbW94aWVib3gqIFwKLQkgICAgIHwgaW50ZXJpeCogfCB1d2luKiB8IG1rcyogfCByaGFwc29keSogfCBkYXJ3aW4qIFwKLQkgICAgIHwgb3BlbnN0ZXAqIHwgb3NraXQqIHwgY29uaXgqIHwgcHczMiogfCBub25zdG9wdXgqIFwKLQkgICAgIHwgc3Rvcm0tY2hhb3MqIHwgdG9wczEwKiB8IHRlbmV4KiB8IHRvcHMyMCogfCBpdHMqIFwKLQkgICAgIHwgb3MyKiB8IHZvcyogfCBwYWxtb3MqIHwgdWNsaW51eCogfCBudWNsZXVzKiBcCi0JICAgICB8IG1vcnBob3MqIHwgc3VwZXJ1eCogfCBydG1rKiB8IHdpbmRpc3MqIFwKLQkgICAgIHwgcG93ZXJtYXgqIHwgZG5peCogfCBueDYgfCBueDcgfCBzZWkqIHwgZHJhZ29uZmx5KiBcCi0JICAgICB8IHNreW9zKiB8IGhhaWt1KiB8IHJkb3MqIHwgdG9wcGVycyogfCBkcm9wcyogfCBlcyogXAotCSAgICAgfCBvbmVmcyogfCB0aXJ0b3MqIHwgcGhvZW5peCogfCBmdWNoc2lhKiB8IHJlZG94KiB8IGJtZSogXAotCSAgICAgfCBtaWRuaWdodGJzZCopCi0JIyBSZW1lbWJlciwgZWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgotCQk7OwogCXFueCopCi0JCWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KLQkJICAgIHg4Ni0qIHwgaSo4Ni0qKQotCQkJOzsKLQkJICAgICopCi0JCQlvcz1udG8tJG9zCi0JCQk7OwotCQllc2FjCisJCW9zPXFueAogCQk7OwogCWhpdXgqKQogCQlvcz1oaXV4d2UyCiAJCTs7Ci0JbnRvLXFueCopCi0JCTs7Ci0JbnRvKikKLQkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfG50b3xudG8tcW54fCdgCi0JCTs7Ci0Jc2ltIHwgeHJheSB8IG9zNjhrKiB8IHY4OHIqIFwKLQkgICAgfCB3aW5kb3dzKiB8IG9zeCB8IGFidWcgfCBuZXR3YXJlKiB8IG9zOSogXAotCSAgICB8IG1hY29zKiB8IG1wdyogfCBtYWdpYyogfCBtbWl4d2FyZSogfCBtb245NjAqIHwgbG5ld3MqKQotCQk7OwotCWxpbnV4LWRpZXRsaWJjKQotCQlvcz1saW51eC1kaWV0bGliYwotCQk7OwotCWxpbnV4KikKLQkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfGxpbnV4fGxpbnV4LWdudXwnYAotCQk7OwogCWx5bngqMTc4KQogCQlvcz1seW54b3MxNzgKIAkJOzsKIAlseW54KjUpCiAJCW9zPWx5bnhvczUKIAkJOzsKKwlseW54b3MqKQorCQkjIGRvbid0IGdldCBjYXVnaHQgdXAgaW4gbmV4dCB3aWxkY2FyZAorCQk7OwogCWx5bngqKQogCQlvcz1seW54b3MKIAkJOzsKLQltYWMqKQotCQlvcz1gZWNobyAiJG9zIiB8IHNlZCAtZSAnc3xtYWN8bWFjb3N8J2AKKwltYWNbMC05XSopCisJCW9zPSQoZWNobyAiJG9zIiB8IHNlZCAtZSAnc3xtYWN8bWFjb3N8JykKIAkJOzsKIAlvcGVuZWQqKQogCQlvcz1vcGVuZWRpdGlvbgpAQCAtMTQyNSwxMCArMTQwMCwxMCBAQAogCQlvcz1vczQwMAogCQk7OwogCXN1bm9zNSopCi0JCW9zPWBlY2hvICIkb3MiIHwgc2VkIC1lICdzfHN1bm9zNXxzb2xhcmlzMnwnYAorCQlvcz0kKGVjaG8gIiRvcyIgfCBzZWQgLWUgJ3N8c3Vub3M1fHNvbGFyaXMyfCcpCiAJCTs7CiAJc3Vub3M2KikKLQkJb3M9YGVjaG8gIiRvcyIgfCBzZWQgLWUgJ3N8c3Vub3M2fHNvbGFyaXMzfCdgCisJCW9zPSQoZWNobyAiJG9zIiB8IHNlZCAtZSAnc3xzdW5vczZ8c29sYXJpczN8JykKIAkJOzsKIAl3aW5jZSopCiAJCW9zPXdpbmNlCkBAIC0xNDYwLDEyICsxNDM1LDkgQEAKIAluczIpCiAJCW9zPW5leHRzdGVwMgogCQk7OwotCW5zayopCi0JCW9zPW5zawotCQk7OwogCSMgUHJlc2VydmUgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHNpbml4NS4KIAlzaW5peDUuKikKLQkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHNpbml4fHN5c3Z8J2AKKwkJb3M9JChlY2hvICRvcyB8IHNlZCAtZSAnc3xzaW5peHxzeXN2fCcpCiAJCTs7CiAJc2luaXgqKQogCQlvcz1zeXN2NApAQCAtMTQ4OCwxOCArMTQ2MCwxMiBAQAogCXN5c3ZyNCkKIAkJb3M9c3lzdjQKIAkJOzsKLQkjIFRoaXMgbXVzdCBjb21lIGFmdGVyIHN5c3ZyNC4KLQlzeXN2KikKLQkJOzsKIAlvc2UqKQogCQlvcz1vc2UKIAkJOzsKIAkqbWludCB8IG1pbnRbMC05XSogfCAqTWlOVCB8IE1pTlRbMC05XSopCiAJCW9zPW1pbnQKIAkJOzsKLQl6dm1vZSkKLQkJb3M9enZtb2UKLQkJOzsKIAlkaWNvcyopCiAJCW9zPWRpY29zCiAJCTs7CkBAIC0xNTA3LDcgKzE0NzMsNyBAQAogCQkjIFVudGlsIHJlYWwgbmVlZCBvZiBPUyBzcGVjaWZpYyBzdXBwb3J0IGZvcgogCQkjIHBhcnRpY3VsYXIgZmVhdHVyZXMgY29tZXMgdXAsIGJhcmUgbWV0YWwKIAkJIyBjb25maWd1cmF0aW9ucyBhcmUgcXVpdGUgZnVuY3Rpb25hbC4KLQkJY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCQljYXNlICRjcHUgaW4KIAkJICAgIGFybSopCiAJCQlvcz1lYWJpCiAJCQk7OwpAQCAtMTUxNiwxOSArMTQ4MiwxMSBAQAogCQkJOzsKIAkJZXNhYwogCQk7OwotCW5hY2wqKQotCQk7OwotCWlvcykKLQkJOzsKLQlub25lKQotCQk7OwotCSotZWFiaSkKLQkJOzsKIAkqKQotCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCIkMSJcJzogc3lzdGVtIFxgIiRvcyJcJyBub3QgcmVjb2duaXplZCAxPiYyCi0JCWV4aXQgMQorCQkjIE5vIG5vcm1hbGl6YXRpb24sIGJ1dCBub3QgbmVjZXNzYXJpbHkgYWNjZXB0ZWQsIHRoYXQgY29tZXMgYmVsb3cuCiAJCTs7CiBlc2FjCisKIGVsc2UKIAogIyBIZXJlIHdlIGhhbmRsZSB0aGUgZGVmYXVsdCBvcGVyYXRpbmcgc3lzdGVtcyB0aGF0IGNvbWUgd2l0aCB2YXJpb3VzIG1hY2hpbmVzLgpAQCAtMTU0MSw3ICsxNDk5LDggQEAKICMgd2lsbCBzaWduYWwgYW4gZXJyb3Igc2F5aW5nIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZwogIyBzeXN0ZW0sIGFuZCB3ZSdsbCBuZXZlciBnZXQgdG8gdGhpcyBwb2ludC4KIAotY2FzZSAkYmFzaWNfbWFjaGluZSBpbgora2VybmVsPQorY2FzZSAkY3B1LSR2ZW5kb3IgaW4KIAlzY29yZS0qKQogCQlvcz1lbGYKIAkJOzsKQEAgLTE1NTIsNyArMTUxMSw4IEBACiAJCW9zPXJpc2NpeDEuMgogCQk7OwogCWFybSotcmViZWwpCi0JCW9zPWxpbnV4CisJCWtlcm5lbD1saW51eAorCQlvcz1nbnUKIAkJOzsKIAlhcm0qLXNlbWkpCiAJCW9zPWFvdXQKQEAgLTE3MTgsODYgKzE2NzgsMTczIEBACiAJCW9zPW5vbmUKIAkJOzsKIGVzYWMKKwogZmkKIAotIyBIZXJlIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBrbm93IHRoZSBvcywgYW5kIHRoZSBDUFUgdHlwZSwgYnV0IG5vdCB0aGUKLSMgbWFudWZhY3R1cmVyLiAgV2UgcGljayB0aGUgbG9naWNhbCBtYW51ZmFjdHVyZXIuCi12ZW5kb3I9dW5rbm93bgotY2FzZSAkYmFzaWNfbWFjaGluZSBpbgotCSotdW5rbm93bikKLQkJY2FzZSAkb3MgaW4KLQkJCXJpc2NpeCopCi0JCQkJdmVuZG9yPWFjb3JuCi0JCQkJOzsKLQkJCXN1bm9zKikKLQkJCQl2ZW5kb3I9c3VuCi0JCQkJOzsKLQkJCWNuayp8LWFpeCopCi0JCQkJdmVuZG9yPWlibQotCQkJCTs7Ci0JCQliZW9zKikKLQkJCQl2ZW5kb3I9YmUKLQkJCQk7OwotCQkJaHB1eCopCi0JCQkJdmVuZG9yPWhwCi0JCQkJOzsKLQkJCW1wZWl4KikKLQkJCQl2ZW5kb3I9aHAKLQkJCQk7OwotCQkJaGl1eCopCi0JCQkJdmVuZG9yPWhpdGFjaGkKLQkJCQk7OwotCQkJdW5vcyopCi0JCQkJdmVuZG9yPWNyZHMKLQkJCQk7OwotCQkJZGd1eCopCi0JCQkJdmVuZG9yPWRnCi0JCQkJOzsKLQkJCWx1bmEqKQotCQkJCXZlbmRvcj1vbXJvbgotCQkJCTs7Ci0JCQlnZW5peCopCi0JCQkJdmVuZG9yPW5zCi0JCQkJOzsKLQkJCWNsaXgqKQotCQkJCXZlbmRvcj1pbnRlcmdyYXBoCi0JCQkJOzsKLQkJCW12cyogfCBvcGVuZWQqKQotCQkJCXZlbmRvcj1pYm0KLQkJCQk7OwotCQkJb3M0MDAqKQotCQkJCXZlbmRvcj1pYm0KLQkJCQk7OwotCQkJcHR4KikKLQkJCQl2ZW5kb3I9c2VxdWVudAotCQkJCTs7Ci0JCQl0cGYqKQotCQkJCXZlbmRvcj1pYm0KLQkJCQk7OwotCQkJdnhzaW0qIHwgdnh3b3JrcyogfCB3aW5kaXNzKikKLQkJCQl2ZW5kb3I9d3JzCi0JCQkJOzsKLQkJCWF1eCopCi0JCQkJdmVuZG9yPWFwcGxlCi0JCQkJOzsKLQkJCWhtcyopCi0JCQkJdmVuZG9yPWhpdGFjaGkKLQkJCQk7OwotCQkJbXB3KiB8IG1hY29zKikKLQkJCQl2ZW5kb3I9YXBwbGUKLQkJCQk7OwotCQkJKm1pbnQgfCBtaW50WzAtOV0qIHwgKk1pTlQgfCBNaU5UWzAtOV0qKQotCQkJCXZlbmRvcj1hdGFyaQotCQkJCTs7Ci0JCQl2b3MqKQotCQkJCXZlbmRvcj1zdHJhdHVzCi0JCQkJOzsKLQkJZXNhYwotCQliYXNpY19tYWNoaW5lPWBlY2hvICIkYmFzaWNfbWFjaGluZSIgfCBzZWQgInMvdW5rbm93bi8kdmVuZG9yLyJgCisjIE5vdywgdmFsaWRhdGUgb3VyIChwb3RlbnRpYWxseSBmaXhlZC11cCkgT1MuCitjYXNlICRvcyBpbgorCSMgU29tZXRpbWVzIHdlIGRvICJrZXJuZWwtYWJpIiwgc28gdGhvc2UgbmVlZCB0byBjb3VudCBhcyBPU2VzLgorCW11c2wqIHwgbmV3bGliKiB8IHVjbGliYyopCisJCTs7CisJIyBMaWtld2lzZSBmb3IgImtlcm5lbC1saWJjIgorCWVhYmkgfCBlYWJpaGYgfCBnbnVlYWJpIHwgZ251ZWFiaWhmKQorCQk7OworCSMgTm93IGFjY2VwdCB0aGUgYmFzaWMgc3lzdGVtIHR5cGVzLgorCSMgVGhlIHBvcnRhYmxlIHN5c3RlbXMgY29tZXMgZmlyc3QuCisJIyBFYWNoIGFsdGVybmF0aXZlIE1VU1QgZW5kIGluIGEgKiB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgorCWdudSogfCBhbmRyb2lkKiB8IGJzZCogfCBtYWNoKiB8IG1pbml4KiB8IGdlbml4KiB8IHVsdHJpeCogfCBpcml4KiBcCisJICAgICB8ICp2bXMqIHwgZXNpeCogfCBhaXgqIHwgY25rKiB8IHN1bm9zIHwgc3Vub3NbMzRdKiBcCisJICAgICB8IGhwdXgqIHwgdW5vcyogfCBvc2YqIHwgbHVuYSogfCBkZ3V4KiB8IGF1cm9yYXV4KiB8IHNvbGFyaXMqIFwKKwkgICAgIHwgc3ltKiB8ICBwbGFuOSogfCBwc3AqIHwgc2ltKiB8IHhyYXkqIHwgb3M2OGsqIHwgdjg4ciogXAorCSAgICAgfCBoaXV4KiB8IGFidWcgfCBuYWNsKiB8IG5ldHdhcmUqIHwgd2luZG93cyogXAorCSAgICAgfCBvczkqIHwgbWFjb3MqIHwgb3N4KiB8IGlvcyogXAorCSAgICAgfCBtcHcqIHwgbWFnaWMqIHwgbW1peHdhcmUqIHwgbW9uOTYwKiB8IGxuZXdzKiBcCisJICAgICB8IGFtaWdhb3MqIHwgYW1pZ2Fkb3MqIHwgbXNkb3MqIHwgbmV3c29zKiB8IHVuaWNvcyogfCBhb2YqIFwKKwkgICAgIHwgYW9zKiB8IGFyb3MqIHwgY2xvdWRhYmkqIHwgc29ydGl4KiB8IHR3aXp6bGVyKiBcCisJICAgICB8IG5pbmR5KiB8IHZ4c2ltKiB8IHZ4d29ya3MqIHwgZWJtb24qIHwgaG1zKiB8IG12cyogXAorCSAgICAgfCBjbGl4KiB8IHJpc2NvcyogfCB1bmlwbHVzKiB8IGlyaXMqIHwgaXNjKiB8IHJ0dSogfCB4ZW5peCogXAorCSAgICAgfCBtaXJic2QqIHwgbmV0YnNkKiB8IGRpY29zKiB8IG9wZW5lZGl0aW9uKiB8IG9zZSogXAorCSAgICAgfCBiaXRyaWcqIHwgb3BlbmJzZCogfCBzb2xpZGJzZCogfCBsaWJlcnR5YnNkKiB8IG9zMTA4KiBcCisJICAgICB8IGVra29ic2QqIHwgZnJlZWJzZCogfCByaXNjaXgqIHwgbHlueG9zKiB8IG9zNDAwKiBcCisJICAgICB8IGJvc3gqIHwgbmV4dHN0ZXAqIHwgY3h1eCogfCBhb3V0KiB8IGVsZiogfCBvYWJpKiBcCisJICAgICB8IHB0eCogfCBjb2ZmKiB8IGVjb2ZmKiB8IHdpbm50KiB8IGRvbWFpbiogfCB2c3RhKiBcCisJICAgICB8IHVkaSogfCBsaXRlcyogfCBpZWVlKiB8IGdvMzIqIHwgYXV4KiB8IGhjb3MqIFwKKwkgICAgIHwgY2hvcnVzcmRiKiB8IGNlZ2NjKiB8IGdsaWRpeCogXAorCSAgICAgfCBjeWd3aW4qIHwgbXN5cyogfCBwZSogfCBtb3NzKiB8IHByb2VsZiogfCBydGVtcyogXAorCSAgICAgfCBtaWRpcGl4KiB8IG1pbmd3MzIqIHwgbWluZ3c2NCogfCBtaW50KiBcCisJICAgICB8IHV4cHYqIHwgYmVvcyogfCBtcGVpeCogfCB1ZGsqIHwgbW94aWVib3gqIFwKKwkgICAgIHwgaW50ZXJpeCogfCB1d2luKiB8IG1rcyogfCByaGFwc29keSogfCBkYXJ3aW4qIFwKKwkgICAgIHwgb3BlbnN0ZXAqIHwgb3NraXQqIHwgY29uaXgqIHwgcHczMiogfCBub25zdG9wdXgqIFwKKwkgICAgIHwgc3Rvcm0tY2hhb3MqIHwgdG9wczEwKiB8IHRlbmV4KiB8IHRvcHMyMCogfCBpdHMqIFwKKwkgICAgIHwgb3MyKiB8IHZvcyogfCBwYWxtb3MqIHwgdWNsaW51eCogfCBudWNsZXVzKiB8IG1vcnBob3MqIFwKKwkgICAgIHwgc2NvdXQqIHwgc3VwZXJ1eCogfCBzeXN2KiB8IHJ0bWsqIHwgdHBmKiB8IHdpbmRpc3MqIFwKKwkgICAgIHwgcG93ZXJtYXgqIHwgZG5peCogfCBueDYgfCBueDcgfCBzZWkqIHwgZHJhZ29uZmx5KiBcCisJICAgICB8IHNreW9zKiB8IGhhaWt1KiB8IHJkb3MqIHwgdG9wcGVycyogfCBkcm9wcyogfCBlcyogXAorCSAgICAgfCBvbmVmcyogfCB0aXJ0b3MqIHwgcGhvZW5peCogfCBmdWNoc2lhKiB8IHJlZG94KiB8IGJtZSogXAorCSAgICAgfCBtaWRuaWdodGJzZCogfCBhbWRoc2EqIHwgdW5sZWFzaGVkKiB8IGVtc2NyaXB0ZW4qIHwgd2FzaSogXAorCSAgICAgfCBuc2sqIHwgcG93ZXJ1bml4KiB8IGdlbm9kZSogfCB6dm1vZSogfCBxbngqIHwgZW14KikKKwkJOzsKKwkjIFRoaXMgb25lIGlzIGV4dHJhIHN0cmljdCB3aXRoIGFsbG93ZWQgdmVyc2lvbnMKKwlzY28zLjJ2MiB8IHNjbzMuMnZbNC05XSogfCBzY281djYqKQorCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgorCQk7OworCW5vbmUpCisJCTs7CisJKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAiJDEiXCc6IE9TIFxgIiRvcyJcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQogCQk7OwogZXNhYwogCi1lY2hvICIkYmFzaWNfbWFjaGluZS0kb3MiCisjIEFzIGEgZmluYWwgc3RlcCBmb3IgT1MtcmVsYXRlZCB0aGluZ3MsIHZhbGlkYXRlIHRoZSBPUy1rZXJuZWwgY29tYmluYXRpb24KKyMgKGdpdmVuIGEgdmFsaWQgT1MpLCBpZiB0aGVyZSBpcyBhIGtlcm5lbC4KK2Nhc2UgJGtlcm5lbC0kb3MgaW4KKwlsaW51eC1nbnUqIHwgbGludXgtZGlldGxpYmMqIHwgbGludXgtYW5kcm9pZCogfCBsaW51eC1uZXdsaWIqIHwgbGludXgtbXVzbCogfCBsaW51eC11Y2xpYmMqICkKKwkJOzsKKwl1Y2xpbnV4LXVjbGliYyogKQorCQk7OworCS1kaWV0bGliYyogfCAtbmV3bGliKiB8IC1tdXNsKiB8IC11Y2xpYmMqICkKKwkJIyBUaGVzZSBhcmUganVzdCBsaWJjIGltcGxlbWVudGF0aW9ucywgbm90IGFjdHVhbCBPU2VzLCBhbmQgdGh1cworCQkjIHJlcXVpcmUgYSBrZXJuZWwuCisJCWVjaG8gIkludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxJzogbGliYyBcYCRvcycgbmVlZHMgZXhwbGljaXQga2VybmVsLiIgMT4mMgorCQlleGl0IDEKKwkJOzsKKwlrZnJlZWJzZCotZ251KiB8IGtvcGVuc29sYXJpcyotZ251KikKKwkJOzsKKwludG8tcW54KikKKwkJOzsKKwlvczItZW14KQorCQk7OworCSotZWFiaSogfCAqLWdudWVhYmkqKQorCQk7OworCS0qKQorCQkjIEJsYW5rIGtlcm5lbCB3aXRoIHJlYWwgT1MgaXMgYWx3YXlzIGZpbmUuCisJCTs7CisJKi0qKQorCQllY2hvICJJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMSc6IEtlcm5lbCBcYCRrZXJuZWwnIG5vdCBrbm93biB0byB3b3JrIHdpdGggT1MgXGAkb3MnLiIgMT4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBrbm93IHRoZSBvcywgYW5kIHRoZSBDUFUgdHlwZSwgYnV0IG5vdCB0aGUKKyMgbWFudWZhY3R1cmVyLiAgV2UgcGljayB0aGUgbG9naWNhbCBtYW51ZmFjdHVyZXIuCitjYXNlICR2ZW5kb3IgaW4KKwl1bmtub3duKQorCQljYXNlICRjcHUtJG9zIGluCisJCQkqLXJpc2NpeCopCisJCQkJdmVuZG9yPWFjb3JuCisJCQkJOzsKKwkJCSotc3Vub3MqKQorCQkJCXZlbmRvcj1zdW4KKwkJCQk7OworCQkJKi1jbmsqIHwgKi1haXgqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJKi1iZW9zKikKKwkJCQl2ZW5kb3I9YmUKKwkJCQk7OworCQkJKi1ocHV4KikKKwkJCQl2ZW5kb3I9aHAKKwkJCQk7OworCQkJKi1tcGVpeCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCSotaGl1eCopCisJCQkJdmVuZG9yPWhpdGFjaGkKKwkJCQk7OworCQkJKi11bm9zKikKKwkJCQl2ZW5kb3I9Y3JkcworCQkJCTs7CisJCQkqLWRndXgqKQorCQkJCXZlbmRvcj1kZworCQkJCTs7CisJCQkqLWx1bmEqKQorCQkJCXZlbmRvcj1vbXJvbgorCQkJCTs7CisJCQkqLWdlbml4KikKKwkJCQl2ZW5kb3I9bnMKKwkJCQk7OworCQkJKi1jbGl4KikKKwkJCQl2ZW5kb3I9aW50ZXJncmFwaAorCQkJCTs7CisJCQkqLW12cyogfCAqLW9wZW5lZCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQkqLW9zNDAwKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCXMzOTAtKiB8IHMzOTB4LSopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQkqLXB0eCopCisJCQkJdmVuZG9yPXNlcXVlbnQKKwkJCQk7OworCQkJKi10cGYqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJKi12eHNpbSogfCAqLXZ4d29ya3MqIHwgKi13aW5kaXNzKikKKwkJCQl2ZW5kb3I9d3JzCisJCQkJOzsKKwkJCSotYXV4KikKKwkJCQl2ZW5kb3I9YXBwbGUKKwkJCQk7OworCQkJKi1obXMqKQorCQkJCXZlbmRvcj1oaXRhY2hpCisJCQkJOzsKKwkJCSotbXB3KiB8ICotbWFjb3MqKQorCQkJCXZlbmRvcj1hcHBsZQorCQkJCTs7CisJCQkqLSptaW50IHwgKi1taW50WzAtOV0qIHwgKi0qTWlOVCB8ICotTWlOVFswLTldKikKKwkJCQl2ZW5kb3I9YXRhcmkKKwkJCQk7OworCQkJKi12b3MqKQorCQkJCXZlbmRvcj1zdHJhdHVzCisJCQkJOzsKKwkJZXNhYworCQk7OworZXNhYworCitlY2hvICIkY3B1LSR2ZW5kb3ItJHtrZXJuZWw6KyRrZXJuZWwtfSRvcyIKIGV4aXQKIAogIyBMb2NhbCB2YXJpYWJsZXM6CmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKaW5kZXggOWE4YzE1OC4uZmQ1NzIxOSAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisrKyBiL2NvbmZpZ3VyZQpAQCAtMSw2ICsxLDYgQEAKICMhIC9iaW4vc2gKICMgR3Vlc3MgdmFsdWVzIGZvciBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgY3JlYXRlIE1ha2VmaWxlcy4KLSMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5IGZvciBwY2FwIDEuOS4wLVBSRS1HSVQuCisjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSBmb3IgcGNhcCAxLjEwLjAuCiAjCiAjCiAjIENvcHlyaWdodCAoQykgMTk5Mi0xOTk2LCAxOTk4LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkBAIC01NzcsOCArNTc3LDggQEAKICMgSWRlbnRpdHkgb2YgdGhpcyBwYWNrYWdlLgogUEFDS0FHRV9OQU1FPSdwY2FwJwogUEFDS0FHRV9UQVJOQU1FPSdwY2FwJwotUEFDS0FHRV9WRVJTSU9OPScxLjkuMC1QUkUtR0lUJwotUEFDS0FHRV9TVFJJTkc9J3BjYXAgMS45LjAtUFJFLUdJVCcKK1BBQ0tBR0VfVkVSU0lPTj0nMS4xMC4wJworUEFDS0FHRV9TVFJJTkc9J3BjYXAgMS4xMC4wJwogUEFDS0FHRV9CVUdSRVBPUlQ9JycKIFBBQ0tBR0VfVVJMPScnCiAKQEAgLTYyMywyMCArNjIzLDEzIEBACiBJTlNUQUxMX0RBVEEKIElOU1RBTExfU0NSSVBUCiBJTlNUQUxMX1BST0dSQU0KLVJETUFfU1JDCiBQQ0FQX1NVUFBPUlRfUkRNQVNOSUZGCi1EQlVTX1NSQwogUENBUF9TVVBQT1JUX0RCVVMKLVBLR0NPTkZJRwotQlRfTU9OSVRPUl9TUkMKLUJUX1NSQwogUENBUF9TVVBQT1JUX0JUCi1ORVRNQVBfU1JDCitQQ0FQX1NVUFBPUlRfRFBESwogUENBUF9TVVBQT1JUX05FVE1BUAotTkVURklMVEVSX1NSQwogUENBUF9TVVBQT1JUX05FVEZJTFRFUgotVVNCX1NSQwotUENBUF9TVVBQT1JUX1VTQgorUENBUF9TVVBQT1JUX0xJTlVYX1VTQk1PTgogRVhUUkFfTkVUV09SS19MSUJTCiBSUENBUERfTElCUwogSU5TVEFMTF9SUENBUEQKQEAgLTY0NSw4ICs2MzgsMTIgQEAKIE1BTl9BRE1JTl9DT01NQU5EUwogTUFOX01JU0NfSU5GTwogTUFOX0ZJTEVfRk9STUFUUworTUFOX0RFVklDRVMKIERZRVhUCi1TU1JDCitSRU1PVEVfQ19TUkMKK01PRFVMRV9DX1NSQworUExBVEZPUk1fQ1hYX1NSQworUExBVEZPUk1fQ19TUkMKIEFERExBUkNISVZFT0JKUwogQURETE9CSlMKIFZfWUFDQwpAQCAtNjU1LDI4ICs2NTIsMzQgQEAKIFZfU0hMSUJfT1BUCiBWX1NITElCX0NNRAogVl9TSExJQl9DQ09QVAotVl9QQ0FQCiBWX0xFWAogVl9JTkNMUwotVl9GSU5EQUxMREVWUwogVl9ERUZTCitWX1BST0dfTERGTEFHU19GQVQKK1ZfUFJPR19DQ09QVF9GQVQKK1ZfTElCX0xERkxBR1NfRkFUCitWX0xJQl9DQ09QVF9GQVQKIFZfQ0NPUFQKIE1LREVQCiBERVBFTkRFTkNZX0NGTEFHCiBMTl9TCiBBUgogUkFOTElCCitSRUVOVFJBTlRfUEFSU0VSCiBZRkxBR1MKIFlBQ0MKIExFWExJQgogTEVYX09VVFBVVF9ST09UCiBMRVgKLVBDQVBfU1VQUE9SVF9QQUNLRVRfUklORworUEtHQ09ORklHCiBWQUxHUklORFRFU1RfU1JDCiBMSUJPQkpTCiBFR1JFUAogR1JFUAogQ1BQCithY19jdF9DWFgKK0NYWEZMQUdTCitDWFgKIE9CSkVYVAogRVhFRVhUCiBhY19jdF9DQwpAQCAtNzE2LDYgKzcxOSw3IEBACiBkb2NkaXIKIG9sZGluY2x1ZGVkaXIKIGluY2x1ZGVkaXIKK3J1bnN0YXRlZGlyCiBsb2NhbHN0YXRlZGlyCiBzaGFyZWRzdGF0ZWRpcgogc3lzY29uZmRpcgpAQCAtNzQxLDEwICs3NDUsOCBAQAogd2l0aF9nY2MKIGVuYWJsZV9sYXJnZWZpbGUKIGVuYWJsZV9wcm90b2NoYWluCi13aXRoX3NpdGEKIHdpdGhfcGNhcAogd2l0aF9saWJubAotZW5hYmxlX3BhY2tldF9yaW5nCiBlbmFibGVfaXB2Ngogd2l0aF9kYWcKIHdpdGhfZGFnX2luY2x1ZGVzCkBAIC03NjEsNiArNzYzLDcgQEAKIGVuYWJsZV9zaGFyZWQKIGVuYWJsZV91c2IKIGVuYWJsZV9uZXRtYXAKK3dpdGhfZHBkawogZW5hYmxlX2JsdWV0b290aAogZW5hYmxlX2RidXMKIGVuYWJsZV9yZG1hCkBAIC03NzMsNiArNzc2LDkgQEAKIExERkxBR1MKIExJQlMKIENQUEZMQUdTCitDWFgKK0NYWEZMQUdTCitDQ0MKIENQUAogWUFDQwogWUZMQUdTJwpAQCAtODE0LDYgKzgyMCw3IEBACiBzeXNjb25mZGlyPScke3ByZWZpeH0vZXRjJwogc2hhcmVkc3RhdGVkaXI9JyR7cHJlZml4fS9jb20nCiBsb2NhbHN0YXRlZGlyPScke3ByZWZpeH0vdmFyJworcnVuc3RhdGVkaXI9JyR7bG9jYWxzdGF0ZWRpcn0vcnVuJwogaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUnCiBvbGRpbmNsdWRlZGlyPScvdXNyL2luY2x1ZGUnCiBkb2NkaXI9JyR7ZGF0YXJvb3RkaXJ9L2RvYy8ke1BBQ0tBR0VfVEFSTkFNRX0nCkBAIC0xMDY2LDYgKzEwNzMsMTUgQEAKICAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCiAgICAgc2lsZW50PXllcyA7OwogCisgIC1ydW5zdGF0ZWRpciB8IC0tcnVuc3RhdGVkaXIgfCAtLXJ1bnN0YXRlZGkgfCAtLXJ1bnN0YXRlZCBcCisgIHwgLS1ydW5zdGF0ZSB8IC0tcnVuc3RhdCB8IC0tcnVuc3RhIHwgLS1ydW5zdCB8IC0tcnVucyBcCisgIHwgLS1ydW4gfCAtLXJ1IHwgLS1yKQorICAgIGFjX3ByZXY9cnVuc3RhdGVkaXIgOzsKKyAgLXJ1bnN0YXRlZGlyPSogfCAtLXJ1bnN0YXRlZGlyPSogfCAtLXJ1bnN0YXRlZGk9KiB8IC0tcnVuc3RhdGVkPSogXAorICB8IC0tcnVuc3RhdGU9KiB8IC0tcnVuc3RhdD0qIHwgLS1ydW5zdGE9KiB8IC0tcnVuc3Q9KiB8IC0tcnVucz0qIFwKKyAgfCAtLXJ1bj0qIHwgLS1ydT0qIHwgLS1yPSopCisgICAgcnVuc3RhdGVkaXI9JGFjX29wdGFyZyA7OworCiAgIC1zYmluZGlyIHwgLS1zYmluZGlyIHwgLS1zYmluZGkgfCAtLXNiaW5kIHwgLS1zYmluIHwgLS1zYmkgfCAtLXNiKQogICAgIGFjX3ByZXY9c2JpbmRpciA7OwogICAtc2JpbmRpcj0qIHwgLS1zYmluZGlyPSogfCAtLXNiaW5kaT0qIHwgLS1zYmluZD0qIHwgLS1zYmluPSogXApAQCAtMTIwMyw3ICsxMjE5LDcgQEAKIGZvciBhY192YXIgaW4JZXhlY19wcmVmaXggcHJlZml4IGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YXJvb3RkaXIgXAogCQlkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBpbmNsdWRlZGlyIFwKIAkJb2xkaW5jbHVkZWRpciBkb2NkaXIgaW5mb2RpciBodG1sZGlyIGR2aWRpciBwZGZkaXIgcHNkaXIgXAotCQlsaWJkaXIgbG9jYWxlZGlyIG1hbmRpcgorCQlsaWJkaXIgbG9jYWxlZGlyIG1hbmRpciBydW5zdGF0ZWRpcgogZG8KICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCiAgICMgUmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMuCkBAIC0xMzE2LDcgKzEzMzIsNyBAQAogICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgogICBjYXQgPDxfQUNFT0YKLVxgY29uZmlndXJlJyBjb25maWd1cmVzIHBjYXAgMS45LjAtUFJFLUdJVCB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCitcYGNvbmZpZ3VyZScgY29uZmlndXJlcyBwY2FwIDEuMTAuMCB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCiAKIFVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVkFSPVZBTFVFXS4uLgogCkBAIC0xMzU2LDYgKzEzNzIsNyBAQAogICAtLXN5c2NvbmZkaXI9RElSICAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KICAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICAgbW9kaWZpYWJsZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbUFJFRklYL2NvbV0KICAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvdmFyXQorICAtLXJ1bnN0YXRlZGlyPURJUiAgICAgICBtb2RpZmlhYmxlIHBlci1wcm9jZXNzIGRhdGEgW0xPQ0FMU1RBVEVESVIvcnVuXQogICAtLWxpYmRpcj1ESVIgICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQogICAtLWluY2x1ZGVkaXI9RElSICAgICAgICBDIGhlYWRlciBmaWxlcyBbUFJFRklYL2luY2x1ZGVdCiAgIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIFsvdXNyL2luY2x1ZGVdCkBAIC0xMzgyLDcgKzEzOTksNyBAQAogCiBpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgogICBjYXNlICRhY19pbml0X2hlbHAgaW4KLSAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIHBjYXAgMS45LjAtUFJFLUdJVDoiOzsKKyAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIHBjYXAgMS4xMC4wOiI7OwogICAgZXNhYwogICBjYXQgPDxcX0FDRU9GCiAKQEAgLTEzOTIsNyArMTQwOSw2IEBACiAgIC0tZW5hYmxlLUZFQVRVUkVbPUFSR10gIGluY2x1ZGUgRkVBVFVSRSBbQVJHPXllc10KICAgLS1kaXNhYmxlLWxhcmdlZmlsZSAgICAgb21pdCBzdXBwb3J0IGZvciBsYXJnZSBmaWxlcwogICAtLWRpc2FibGUtcHJvdG9jaGFpbiAgICBkaXNhYmxlIFwicHJvdG9jaGFpblwiIGluc24KLSAgLS1lbmFibGUtcGFja2V0LXJpbmcgICAgZW5hYmxlIHBhY2tldCByaW5nIHN1cHBvcnQgb24gTGludXggW2RlZmF1bHQ9eWVzXQogICAtLWVuYWJsZS1pcHY2ICAgICAgICAgICBidWlsZCBJUHY2LWNhcGFibGUgdmVyc2lvbiBbZGVmYXVsdD15ZXNdCiAgIC0tZW5hYmxlLXJlbW90ZSAgICAgICAgIGVuYWJsZSByZW1vdGUgcGFja2V0IGNhcHR1cmUgW2RlZmF1bHQ9bm9dCiAgIC0tZGlzYWJsZS1yZW1vdGUgICAgICAgIGRpc2FibGUgcmVtb3RlIHBhY2tldCBjYXB0dXJlCkBAIC0xNDAxLDggKzE0MTcsOCBAQAogICAtLWRpc2FibGUtdW5pdmVyc2FsICAgICBkb24ndCBidWlsZCB1bml2ZXJzYWwgb24gbWFjT1MKICAgLS1lbmFibGUtc2hhcmVkICAgICAgICAgYnVpbGQgc2hhcmVkIGxpYnJhcmllcyBbZGVmYXVsdD15ZXMsIGlmIHN1cHBvcnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlXQotICAtLWVuYWJsZS11c2IgICAgICAgICAgICBlbmFibGUgVVNCIGNhcHR1cmUgc3VwcG9ydCBbZGVmYXVsdD15ZXMsIGlmIHN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlXQorICAtLWVuYWJsZS11c2IgICAgICAgICAgICBlbmFibGUgTGludXggdXNibW9uIFVTQiBjYXB0dXJlIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHQ9eWVzLCBpZiBzdXBwb3J0IGF2YWlsYWJsZV0KICAgLS1lbmFibGUtbmV0bWFwICAgICAgICAgZW5hYmxlIG5ldG1hcCBzdXBwb3J0IFtkZWZhdWx0PXllcywgaWYgc3VwcG9ydAogICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVdCiAgIC0tZW5hYmxlLWJsdWV0b290aCAgICAgIGVuYWJsZSBCbHVldG9vdGggc3VwcG9ydCBbZGVmYXVsdD15ZXMsIGlmIHN1cHBvcnQKQEAgLTE0MTYsNyArMTQzMiw2IEBACiAgIC0td2l0aC1QQUNLQUdFWz1BUkddICAgIHVzZSBQQUNLQUdFIFtBUkc9eWVzXQogICAtLXdpdGhvdXQtUEFDS0FHRSAgICAgICBkbyBub3QgdXNlIFBBQ0tBR0UgKHNhbWUgYXMgLS13aXRoLVBBQ0tBR0U9bm8pCiAgIC0td2l0aG91dC1nY2MgICAgICAgICAgIGRvbid0IHVzZSBnY2MKLSAgLS13aXRoLXNpdGEgICAgICAgICAgICAgaW5jbHVkZSBTSVRBIHN1cHBvcnQKICAgLS13aXRoLXBjYXA9VFlQRSAgICAgICAgdXNlIHBhY2tldCBjYXB0dXJlIFRZUEUKICAgLS13aXRob3V0LWxpYm5sICAgICAgICAgZGlzYWJsZSBsaWJubCBzdXBwb3J0IFtkZWZhdWx0PXllcywgb24gTGludXgsIGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRdCkBAIC0xNDM3LDYgKzE0NTIsOCBAQAogICAtLXdpdGgtdHVyYm9jYXBbPURJUl0gICBpbmNsdWRlIFJpdmVyYmVkIFR1cmJvQ2FwIHN1cHBvcnQgKGxvY2F0ZWQgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5IERJUiwgaWYgc3VwcGxpZWQpLiBbZGVmYXVsdD15ZXMsIGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRdCisgIC0td2l0aC1kcGRrWz1ESVJdICAgICAgIGluY2x1ZGUgRFBESyBzdXBwb3J0IChsb2NhdGVkIGluIGRpcmVjdG9yeSBESVIsIGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBsaWVkKS4gW2RlZmF1bHQ9eWVzLCBpZiBwcmVzZW50XQogCiBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKICAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCkBAIC0xNDQ2LDYgKzE0NjMsOCBAQAogICBMSUJTICAgICAgICBsaWJyYXJpZXMgdG8gcGFzcyB0byB0aGUgbGlua2VyLCBlLmcuIC1sPGxpYnJhcnk+CiAgIENQUEZMQUdTICAgIChPYmplY3RpdmUpIEMvQysrIHByZXByb2Nlc3NvciBmbGFncywgZS5nLiAtSTxpbmNsdWRlIGRpcj4gaWYKICAgICAgICAgICAgICAgeW91IGhhdmUgaGVhZGVycyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8aW5jbHVkZSBkaXI+CisgIENYWCAgICAgICAgIEMrKyBjb21waWxlciBjb21tYW5kCisgIENYWEZMQUdTICAgIEMrKyBjb21waWxlciBmbGFncwogICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgogICBZQUNDICAgICAgICBUaGUgYFlldCBBbm90aGVyIENvbXBpbGVyIENvbXBpbGVyJyBpbXBsZW1lbnRhdGlvbiB0byB1c2UuCiAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIHRoZSBmaXJzdCBwcm9ncmFtIGZvdW5kIG91dCBvZjogYGJpc29uIC15JywgYGJ5YWNjJywKQEAgLTE1MjAsNyArMTUzOSw3IEBACiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIiAmJiBleGl0ICRhY19zdGF0dXMKIGlmICRhY19pbml0X3ZlcnNpb247IHRoZW4KICAgY2F0IDw8XF9BQ0VPRgotcGNhcCBjb25maWd1cmUgMS45LjAtUFJFLUdJVAorcGNhcCBjb25maWd1cmUgMS4xMC4wCiBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkKIAogQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgpAQCAtMTU3Miw2ICsxNTkxLDQ0IEBACiAKIH0gIyBhY19mbl9jX3RyeV9jb21waWxlCiAKKyMgYWNfZm5fY3h4X3RyeV9jb21waWxlIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBjb21waWxlIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2N4eF90cnlfY29tcGlsZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jeHhfdHJ5X2NvbXBpbGUKKwogIyBhY19mbl9jX3RyeV9saW5rIExJTkVOTwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCkBAIC0yMDQyLDcgKzIwOTksNyBAQAogVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKIHJ1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCiAKLUl0IHdhcyBjcmVhdGVkIGJ5IHBjYXAgJGFzX21lIDEuOS4wLVBSRS1HSVQsIHdoaWNoIHdhcworSXQgd2FzIGNyZWF0ZWQgYnkgcGNhcCAkYXNfbWUgMS4xMC4wLCB3aGljaCB3YXMKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgICQgJDAgJEAKQEAgLTI2MDcsOCArMjY2NCw5IEBACiAgICAgZmkKIAogIwotIyBUcnkgdG8gZW5hYmxlIGFzIG1hbnkgQzk5IGZlYXR1cmVzIGFzIHdlIGNhbi4KLSMgQXQgbWluaW11bSwgd2Ugd2FudCBDKysvQzk5LXN0eWxlIC8vIGNvbW1lbnRzLgorIyBXZSByZXF1aXJlIEM5OSBvciBsYXRlci4KKyMgVHJ5IHRvIGdldCBpdCwgd2hpY2ggbWF5IGludm9sdmUgYWRkaW5nIGNvbXBpbGVyIGZsYWdzOworIyBpZiB0aGF0IGZhaWxzLCBnaXZlIHVwLgogIwogYWNfZXh0PWMKIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCkBAIC0zNTc2LDYgKzM2MzQsMjc0IEBACiBmaQogCiAKK2lmIHRlc3QgIiRhY19jdl9wcm9nX2NjX2M5OSIgPSAibm8iOyB0aGVuCisJYXNfZm5fZXJyb3IgJD8gIlRoZSBDIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgQzk5IiAiJExJTkVOTyIgNQorZmkKK2Nhc2UgIiRob3N0X29zIiBpbgoraGFpa3UqKQorCSMKKwkjIEhhaWt1J3MgcGxhdGZvcm0gZmlsZSBpcyBpbiBDKysuCisJIworCWFjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CitpZiB0ZXN0IC16ICIkQ1hYIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkQ0NDIjsgdGhlbgorICAgIENYWD0kQ0NDCisgIGVsc2UKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbC5leGUgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ1hYPSIkQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ1hYPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDWFg9JGFjX2N2X3Byb2dfQ1hYCitpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENYWCIgPiY1CiskYXNfZWNobyAiJENYWCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJENYWCIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiRDWFgiOyB0aGVuCisgIGFjX2N0X0NYWD0kQ1hYCisgIGZvciBhY19wcm9nIGluIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbC5leGUgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19jdF9DWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0NYWD0kYWNfY3ZfcHJvZ19hY19jdF9DWFgKK2lmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ1hYIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ1hYIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0NYWCIgJiYgYnJlYWsKK2RvbmUKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0NYWCIgPSB4OyB0aGVuCisgICAgQ1hYPSJnKysiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQ1hYPSRhY19jdF9DWFgKKyAgZmkKK2ZpCisKKyAgZmkKK2ZpCisjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCiskYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQysrIGNvbXBpbGVyIHZlcnNpb24iID4mNQorc2V0IFggJGFjX2NvbXBpbGUKK2FjX2NvbXBpbGVyPSQyCitmb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCisgIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgc2VkICcxMGFcCisuLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCisgICAgICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorZG9uZQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2N4eF9jb21waWxlcl9nbnUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiBfX0dOVUNfXworICAgICAgIGNob2tlIG1lCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY29tcGlsZXJfZ251PXllcworZWxzZQorICBhY19jb21waWxlcl9nbnU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2FjX2N2X2N4eF9jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY2OyB9CitpZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KKyAgR1hYPXllcworZWxzZQorICBHWFg9CitmaQorYWNfdGVzdF9DWFhGTEFHUz0ke0NYWEZMQUdTK3NldH0KK2FjX3NhdmVfQ1hYRkxBR1M9JENYWEZMQUdTCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENYWCBhY2NlcHRzIC1nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENYWCBhY2NlcHRzIC1nLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfY3h4X2crOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19zYXZlX2N4eF93ZXJyb3JfZmxhZz0kYWNfY3h4X3dlcnJvcl9mbGFnCisgICBhY19jeHhfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9wcm9nX2N4eF9nPW5vCisgICBDWFhGTEFHUz0iLWciCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2N4eF9nPXllcworZWxzZQorICBDWFhGTEFHUz0iIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jeHhfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnCisJIENYWEZMQUdTPSItZyIKKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jeHhfZz15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWcKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY3h4X2ciID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2N4eF9nIiA+JjY7IH0KK2lmIHRlc3QgIiRhY190ZXN0X0NYWEZMQUdTIiA9IHNldDsgdGhlbgorICBDWFhGTEFHUz0kYWNfc2F2ZV9DWFhGTEFHUworZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2N4eF9nID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgQ1hYRkxBR1M9Ii1nIC1PMiIKKyAgZWxzZQorICAgIENYWEZMQUdTPSItZyIKKyAgZmkKK2Vsc2UKKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBDWFhGTEFHUz0iLU8yIgorICBlbHNlCisgICAgQ1hYRkxBR1M9CisgIGZpCitmaQorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisJOzsKK2VzYWMKKwogCiAKIApAQCAtMzk5Nyw4ICs0MzIzLDggQEAKIAkgICAgYWl4KikKIAkJICAgIDs7CiAKLQkgICAgZnJlZWJzZCp8bmV0YnNkKnxvcGVuYnNkKnxkcmFnb25mbHkqfGxpbnV4Knxvc2YqKQotCSAgICAJICAgICMKKwkgICAgZnJlZWJzZCp8bmV0YnNkKnxvcGVuYnNkKnxkcmFnb25mbHkqfGxpbnV4Knxvc2YqfGhhaWt1KnxtaWRpcGl4KikKKwkJICAgICMKIAkJICAgICMgUGxhdGZvcm1zIHdoZXJlIHRoZSBsaW5rZXIgaXMgdGhlIEdOVSBsaW5rZXIKIAkJICAgICMgb3IgYWNjZXB0cyBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGxpa2UKIAkJICAgICMgdGhvc2UgdGhlIEdOVSBsaW5rZXIgYWNjZXB0cy4KQEAgLTQwMTQsNyArNDM0MCw3IEBACiAJCSAgICBzcGFyYzY0KikKIAkJCWNhc2UgIiRob3N0X29zIiBpbgogCi0JCQlmcmVlYnNkKnxvcGVuYnNkKikKKwkJCWZyZWVic2QqfG9wZW5ic2QqfGxpbnV4KikKIAkJCSAgICBQSUNfT1BUPS1mUElDCiAJCQkgICAgOzsKIAkJCWVzYWMKQEAgLTQwMjcsNyArNDM1Myw3IEBACiAKIAkgICAgaHB1eCopCiAJCSAgICBWX1NITElCX0NDT1BUPSIkVl9TSExJQl9DQ09QVCAtZnBpYyIKLQkgICAgCSAgICAjCisJCSAgICAjCiAJCSAgICAjIFhYWCAtIHRoaXMgYXNzdW1lcyBHQ0MgaXMgdXNpbmcgdGhlIEhQIGxpbmtlciwKIAkJICAgICMgcmF0aGVyIHRoYW4gdGhlIEdOVSBsaW5rZXIsIGFuZCB0aGF0IHRoZSAiK2giCiAJCSAgICAjIG9wdGlvbiBpcyB1c2VkIG9uIGFsbCBIUC1VWCBwbGF0Zm9ybXMsIGJvdGggLnNsCkBAIC00MDM1LDcgKzQzNjEsNyBAQAogCQkgICAgIwogCQkgICAgVl9TT05BTUVfT1BUPSItV2wsK2gsIgogCQkgICAgIwotCQkgICAgIyBCeSBkZWZhdWx0LCBkaXJlY3RvcmllcyBzcGVjaWZlZCB3aXRoIC1MCisJCSAgICAjIEJ5IGRlZmF1bHQsIGRpcmVjdG9yaWVzIHNwZWNpZmllZCB3aXRoIC1MCiAJCSAgICAjIGFyZSBhZGRlZCB0byB0aGUgcnVuLXRpbWUgc2VhcmNoIHBhdGgsIHNvCiAJCSAgICAjIHdlIGRvbid0IGFkZCB0aGVtIGluIHBjYXAtY29uZmlnLgogCQkgICAgIwpAQCAtNDA5NiwxNCArNDQyMiwxNCBAQAogCQkgICAgVl9TSExJQl9PUFQ9Ii1iIgogCQkgICAgVl9TT05BTUVfT1BUPSIraCAiCiAJCSAgICAjCi0JCSAgICAjIEJ5IGRlZmF1bHQsIGRpcmVjdG9yaWVzIHNwZWNpZmVkIHdpdGggLUwKKwkJICAgICMgQnkgZGVmYXVsdCwgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIHdpdGggLUwKIAkJICAgICMgYXJlIGFkZGVkIHRvIHRoZSBydW4tdGltZSBzZWFyY2ggcGF0aCwgc28KIAkJICAgICMgd2UgZG9uJ3QgYWRkIHRoZW0gaW4gcGNhcC1jb25maWcuCiAJCSAgICAjCiAJCSAgICA7OwogCiAJICAgIG9zZiopCi0JICAgIAkgICAgIworCQkgICAgIwogCQkgICAgIyBQcmVzdW1lZCB0byBiZSBERUMgT1NGLzEsIERpZ2l0YWwgVU5JWCwgb3IKIAkJICAgICMgVHJ1NjQgVU5JWC4KIAkJICAgICMKQEAgLTQyMTQsNyArNDU0MCw3IEBACiAgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAogICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKICAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCi0jZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgoKG9mZl90KSAxIDw8IDMxKSA8PCAzMSkgLSAxICsgKCgob2ZmX3QpIDEgPDwgMzEpIDw8IDMxKSkKICAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCiAJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKIAkJICAgICAgPyAxIDogLTFdOwpAQCAtNDI2MCw3ICs0NTg2LDcgQEAKICAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCiAgICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycwogICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KLSNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorI2RlZmluZSBMQVJHRV9PRkZfVCAoKCgob2ZmX3QpIDEgPDwgMzEpIDw8IDMxKSAtIDEgKyAoKChvZmZfdCkgMSA8PCAzMSkgPDwgMzEpKQogICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKIAkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQogCQkgICAgICA/IDEgOiAtMV07CkBAIC00Mjg0LDcgKzQ2MTAsNyBAQAogICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKICAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCiAgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLwotI2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisjZGVmaW5lIExBUkdFX09GRl9UICgoKChvZmZfdCkgMSA8PCAzMSkgPDwgMzEpIC0gMSArICgoKG9mZl90KSAxIDw8IDMxKSA8PCAzMSkpCiAgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQogCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCiAJCSAgICAgID8gMSA6IC0xXTsKQEAgLTQzMjksNyArNDY1NSw3IEBACiAgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAogICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKICAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCi0jZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgoKG9mZl90KSAxIDw8IDMxKSA8PCAzMSkgLSAxICsgKCgob2ZmX3QpIDEgPDwgMzEpIDw8IDMxKSkKICAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCiAJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKIAkJICAgICAgPyAxIDogLTFdOwpAQCAtNDM1Myw3ICs0Njc5LDcgQEAKICAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCiAgICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycwogICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KLSNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorI2RlZmluZSBMQVJHRV9PRkZfVCAoKCgob2ZmX3QpIDEgPDwgMzEpIDw8IDMxKSAtIDEgKyAoKChvZmZfdCkgMSA8PCAzMSkgPDwgMzEpKQogICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKIAkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQogCQkgICAgICA/IDEgOiAtMV07CkBAIC00ODU1LDcgKzUxODEsNyBAQAogZG9uZQogCiAKLWZvciBhY19oZWFkZXIgaW4gc3lzL2lvY2NvbS5oIHN5cy9zb2NraW8uaCBsaW1pdHMuaAorZm9yIGFjX2hlYWRlciBpbiBzeXMvaW9jY29tLmggc3lzL3NvY2tpby5oCiBkbyA6CiAgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgpAQCAtNDkzMSwyNCArNTI1NywxMSBAQAogZmkKIAogY2FzZSAiJGhvc3Rfb3MiIGluCi1saW51eCp8dWNsaW51eCopCi0JZm9yIGFjX2hlYWRlciBpbiBsaW51eC9zb2NraW9zLmggbGludXgvaWZfYm9uZGluZy5oCi1kbyA6Ci0gIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pZi5oPgotCi0iCi1pZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQoraGFpa3UqKQorCSMKKwkjIEhhaWt1IG5lZWRzIF9CU0RfU09VUkNFIGZvciB0aGUgX0lPKiBtYWNyb3MgYmVjYXVzZSBpdCBkb2Vzbid0IHVzZSB0aGVtLgorCSMKKwlDRkxBR1M9IiRDRkxBR1MgLURfQlNEX1NPVVJDRSIKIAk7OwogZXNhYwogCkBAIC00OTk4LDIxICs1MzExLDExOCBAQAogCSAgICBmaQogICAgIGZpCiAKLWZvciBhY19mdW5jIGluIHN0cmVycm9yIHN0cmVycm9yX3Igc3RyZXJyb3JfcyBzdHJsY3B5IHN0cmxjYXQKK2ZvciBhY19mdW5jIGluIHN0cmVycm9yCiBkbyA6Ci0gIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgotaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdHJlcnJvciIgImFjX2N2X2Z1bmNfc3RyZXJyb3IiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc3RyZXJyb3IiID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKyNkZWZpbmUgSEFWRV9TVFJFUlJPUiAxCitfQUNFT0YKKworZmkKK2RvbmUKKworYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic3RyZXJyb3JfciIgImFjX2N2X2Z1bmNfc3RyZXJyb3JfciIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJlcnJvcl9yIiA9IHh5ZXM7IHRoZW4gOgorCisJIworCSMgV2UgaGF2ZSBzdHJlcnJvcl9yOyBpZiB3ZSBkZWZpbmUgX0dOVV9TT1VSQ0UsIGlzIGl0IGEKKwkjIFBPU0lYLWNvbXBsaWFudCBzdHJlcnJvcl9yKCkgb3IgYSBHTlUgc3RyZXJyb3JfcigpPworCSMKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RyZXJyb3JfciBpcyBHTlUtc3R5bGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzdHJlcnJvcl9yIGlzIEdOVS1zdHlsZS4uLiAiID4mNjsgfQorCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCQkjZGVmaW5lIF9HTlVfU09VUkNFCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIERlZmluZSBpdCBHTlUtc3R5bGU7IHRoYXQgd2lsbCBjYXVzZSBhbiBlcnJvciBpZiBpdCdzIG5vdCBHTlUtc3R5bGUgKi8KK2V4dGVybiBjaGFyICpzdHJlcnJvcl9yKGludCwgY2hhciAqLCBzaXplX3QpOworCitpbnQKK21haW4odm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworCSAgICAgICAgIyBHTlUtc3R5bGUKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HTlVfU1RSRVJST1JfUiAvKiovIiA+PmNvbmZkZWZzLmgKKworCitlbHNlCisKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfUE9TSVhfU1RSRVJST1JfUiAvKiovIiA+PmNvbmZkZWZzLmgKKworCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2Vsc2UKKworCSMKKwkjIFdlIGRvbid0IGhhdmUgc3RyZXJyb3JfcjsgZG8gd2UgaGF2ZSBfd2NzZXJyb3Jfcz8KKwkjCisJZm9yIGFjX2Z1bmMgaW4gX3djc2Vycm9yX3MKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiX3djc2Vycm9yX3MiICJhY19jdl9mdW5jX193Y3NlcnJvcl9zIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX193Y3NlcnJvcl9zIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfX1dDU0VSUk9SX1MgMQogX0FDRU9GCiAKIGZpCiBkb25lCiAKIAotbmVlZHNucHJpbnRmPW5vCi1mb3IgYWNfZnVuYyBpbiB2c25wcmludGYgc25wcmludGYKK2ZpCisKKworIworIyBUaGFua3MsIElCTSwgZm9yIG5vdCBwcm92aWRpbmcgdnN5c2xvZygpIGluIEFJWCEKKyMKK2ZvciBhY19mdW5jIGluIHZzeXNsb2cKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAidnN5c2xvZyIgImFjX2N2X2Z1bmNfdnN5c2xvZyIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY192c3lzbG9nIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfVlNZU0xPRyAxCitfQUNFT0YKKworZmkKK2RvbmUKKworCisjCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIHZzbnByaW50ZigpIGFuZCBzbnByaW50ZigpOyB3ZSByZXF1aXJlIHRoZW0uCisjCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJ2c25wcmludGYiICJhY19jdl9mdW5jX3ZzbnByaW50ZiIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY192c25wcmludGYiID0geHllczsgdGhlbiA6CisKK2Vsc2UKKyAgYXNfZm5fZXJyb3IgJD8gInZzbnByaW50ZigpIGlzIHJlcXVpcmVkIGJ1dCB3YXNuJ3QgZm91bmQiICIkTElORU5PIiA1CitmaQorCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzbnByaW50ZiIgImFjX2N2X2Z1bmNfc25wcmludGYiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc25wcmludGYiID0geHllczsgdGhlbiA6CisKK2Vsc2UKKyAgYXNfZm5fZXJyb3IgJD8gInNucHJpbnRmKCkgaXMgcmVxdWlyZWQgYnV0IHdhc24ndCBmb3VuZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworbmVlZGFzcHJpbnRmPW5vCitmb3IgYWNfZnVuYyBpbiB2YXNwcmludGYgYXNwcmludGYKIGRvIDoKICAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCiBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCkBAIC01MDIyLDE0ICs1NDMyLDYwIEBACiBfQUNFT0YKIAogZWxzZQotICBuZWVkc25wcmludGY9eWVzCisgIG5lZWRhc3ByaW50Zj15ZXMKIGZpCiBkb25lCiAKLWlmIHRlc3QgJG5lZWRzbnByaW50ZiA9IHllczsgdGhlbgoraWYgdGVzdCAkbmVlZGFzcHJpbnRmID0geWVzOyB0aGVuCiAJY2FzZSAiICRMSUJPQkpTICIgaW4KLSAgKiIgc25wcmludGYuJGFjX29iamV4dCAiKiApIDs7Ci0gICopIExJQk9CSlM9IiRMSUJPQkpTIHNucHJpbnRmLiRhY19vYmpleHQiCisgICoiIGFzcHJpbnRmLiRhY19vYmpleHQgIiogKSA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBhc3ByaW50Zi4kYWNfb2JqZXh0IgorIDs7Citlc2FjCisKK2ZpCisKK25lZWRzdHJsY2F0PW5vCitmb3IgYWNfZnVuYyBpbiBzdHJsY2F0CitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInN0cmxjYXQiICJhY19jdl9mdW5jX3N0cmxjYXQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc3RybGNhdCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUkxDQVQgMQorX0FDRU9GCisKK2Vsc2UKKyAgbmVlZHN0cmxjYXQ9eWVzCitmaQorZG9uZQorCitpZiB0ZXN0ICRuZWVkc3RybGNhdCA9IHllczsgdGhlbgorCWNhc2UgIiAkTElCT0JKUyAiIGluCisgICoiIHN0cmxjYXQuJGFjX29iamV4dCAiKiApIDs7CisgICopIExJQk9CSlM9IiRMSUJPQkpTIHN0cmxjYXQuJGFjX29iamV4dCIKKyA7OworZXNhYworCitmaQorCituZWVkc3RybGNweT1ubworZm9yIGFjX2Z1bmMgaW4gc3RybGNweQorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdHJsY3B5IiAiYWNfY3ZfZnVuY19zdHJsY3B5IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3N0cmxjcHkiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJMQ1BZIDEKK19BQ0VPRgorCitlbHNlCisgIG5lZWRzdHJsY3B5PXllcworZmkKK2RvbmUKKworaWYgdGVzdCAkbmVlZHN0cmxjcHkgPSB5ZXM7IHRoZW4KKwljYXNlICIgJExJQk9CSlMgIiBpbgorICAqIiBzdHJsY3B5LiRhY19vYmpleHQgIiogKSA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBzdHJsY3B5LiRhY19vYmpleHQiCiAgOzsKIGVzYWMKIApAQCAtNTE1NiwxMCArNTYxMiw1OCBAQAogCiBlbHNlCiAKLQkgICAgIwotCSAgICAjIFdlIGRpZG4ndCBmaW5kIGl0LgotCSAgICAjCi0JICAgIGFzX2ZuX2Vycm9yICQ/ICJnZXRhZGRyaW5mbyBpcyByZXF1aXJlZCwgYnV0IHdhc24ndCBmb3VuZCIgIiRMSU5FTk8iIDUKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ2V0YWRkcmluZm8gaW4gLWxuZXR3b3JrIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBnZXRhZGRyaW5mbyBpbiAtbG5ldHdvcmsuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX25ldHdvcmtfZ2V0YWRkcmluZm8rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbG5ldHdvcmsgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGdldGFkZHJpbmZvICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZ2V0YWRkcmluZm8gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX25ldHdvcmtfZ2V0YWRkcmluZm89eWVzCitlbHNlCisgIGFjX2N2X2xpYl9uZXR3b3JrX2dldGFkZHJpbmZvPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9uZXR3b3JrX2dldGFkZHJpbmZvIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX25ldHdvcmtfZ2V0YWRkcmluZm8iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfbmV0d29ya19nZXRhZGRyaW5mbyIgPSB4eWVzOyB0aGVuIDoKKworCQkgICAgIworCQkgICAgIyBPSywgd2UgZm91bmQgaXQgaW4gbGlibmV0d29yayBvbiBIYWlrdS4KKwkJICAgICMKKwkJICAgIExJQlM9Ii1sbmV0d29yayAkTElCUyIKKworZWxzZQorCisJCSAgICAjCisJCSAgICAjIFdlIGRpZG4ndCBmaW5kIGl0LgorCQkgICAgIworCQkgICAgYXNfZm5fZXJyb3IgJD8gImdldGFkZHJpbmZvIGlzIHJlcXVpcmVkLCBidXQgd2Fzbid0IGZvdW5kIiAiJExJTkVOTyIgNQorCitmaQorCiAKIGZpCiAKQEAgLTU5MDIsMjUgKzY0MDYsNiBAQAogIwogVkFMR1JJTkRURVNUX1NSQz0KIAotIwotIyBTSVRBIHN1cHBvcnQgaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggbmF0aXZlIGNhcHR1cmUgc3VwcG9ydDsKLSMgIi0td2l0aC1zaXRhIiBzZWxlY3RzIFNJVEEgc3VwcG9ydC4KLSMKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zaXRhIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9zaXRhK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgd2l0aHZhbD0kd2l0aF9zaXRhOwotCWlmIHRlc3QgISAieCR3aXRodmFsIiA9ICJ4bm8iIDsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBTSVRBIDEiID4+Y29uZmRlZnMuaAotCi0JCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogRW5hYmxpbmcgU0lUQSBBQ04gc3VwcG9ydCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBFbmFibGluZyBTSVRBIEFDTiBzdXBwb3J0IiA+JjY7fQotCQlWX1BDQVA9c2l0YQotCWZpCi0KLWVsc2UKLQogCiAjIENoZWNrIHdoZXRoZXIgLS13aXRoLXBjYXAgd2FzIGdpdmVuLgogaWYgdGVzdCAiJHt3aXRoX3BjYXArc2V0fSIgPSBzZXQ7IHRoZW4gOgpAQCAtNTk2Miw2ICs2NDQ3LDEwIEBACiAJCSMgIHJlcXVpcmVzIHRoYXQgdmFyaW91cyBCU0Qtc3R5bGUgaW50ZWdlciB0eXBlcwogCQkjICBiZSBkZWZpbmVkOwogCQkjCisJCSMgIHN5cy90aW1lLmgsIGJlY2F1c2UgQUlYIDUuMiBhbmQgNS4zJ3MgbmV0L2JwZi5oCisJCSMgIGRvZXNuJ3QgaW5jbHVkZSBpdCBidXQgZG9lcyB1c2Ugc3RydWN0IHRpbWV2YWwKKwkJIyAgaW4gaW9jdGwgZGVmaW5pdGlvbnM7CisJCSMKIAkJIyAgc3lzL2lvY3RsLmggYW5kLCBpZiB3ZSBoYXZlIGl0LCBzeXMvaW9jY29tLmgsCiAJCSMgIGJlY2F1c2UgbmV0L2JwZi5oIGRlZmluZXMgaW9jdGxzOwogCQkjCkBAIC01OTg0LDYgKzY0NzMsNyBAQAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaWZkZWYgSEFWRV9TWVNfSU9DQ09NX0gKQEAgLTYwNTAsNiArNjU0MCwxOCBAQAogCiBkb25lCiAKKwlmb3IgYWNfaGVhZGVyIGluIGNvbmZpZy9IYWlrdUNvbmZpZy5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJjb25maWcvSGFpa3VDb25maWcuaCIgImFjX2N2X2hlYWRlcl9jb25maWdfSGFpa3VDb25maWdfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfY29uZmlnX0hhaWt1Q29uZmlnX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9DT05GSUdfSEFJS1VDT05GSUdfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCiAKIAlpZiB0ZXN0ICIkYWNfY3ZfbGJsX2JwZl9oX2RlZmluZXNfYmlvY3NldGlmIiA9IHllczsgdGhlbgogCQkjCkBAIC02MDc1LDExICs2NTc3LDYgQEAKIAkJIyBObyBwcml6ZXMgZm9yIGd1ZXNzaW5nIHRoaXMgb25lLgogCQkjCiAJCVZfUENBUD1saW51eAotCi0JCSMKLQkJIyBYWFggLSB0aGlzIHdvbid0IHdvcmsgd2l0aCBvbGRlciBrZXJuZWxzIHRoYXQgaGF2ZQotCQkjIFNPQ0tfUEFDS0VUIHNvY2tldHMgYnV0IG5vdCBQRl9QQUNLRVQgc29ja2V0cy4KLQkJIwogCQlWQUxHUklORFRFU1RfU1JDPXZhbGdyaW5kdGVzdC5jCiAJZWxpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX25ldF9wZmlsdF9oIiA9IHllczsgdGhlbgogCSAgICAgICAgIwpAQCAtNjExMSw2ICs2NjA4LDExIEBACiAJCSMgRExQSSBvbiBwcmUtU29sYXJpcyAxMSBTdW5PUyA1LCBIUC1VWCwgcG9zc2libHkgb3RoZXJzLgogCQkjCiAJCVZfUENBUD1kbHBpCisJZWxpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX2NvbmZpZ19IYWlrdUNvbmZpZ19oIiA9IHllczsgdGhlbgorCQkjCisJCSMgSGFpa3UuCisJCSMKKwkJVl9QQ0FQPWhhaWt1CiAJZWxzZQogCQkjCiAJCSMgTm90aGluZyB3ZSBzdXBwb3J0LgpAQCAtNjEyOSwxNiArNjYzMSw1MyBAQAogCiAKICMKLSMgRG8gY2FwdHVyZS1tZWNoYW5pc20tZGVwZW5kZW50IHRlc3RzLgorIyBEbyB3ZSBoYXZlIHBrZy1jb25maWc/CisjCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHBrZy1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX1BLR0NPTkZJRys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRQS0dDT05GSUciOyB0aGVuCisgIGFjX2N2X3Byb2dfUEtHQ09ORklHPSIkUEtHQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfUEtHQ09ORklHPSJwa2ctY29uZmlnIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wcm9nX1BLR0NPTkZJRyIgJiYgYWNfY3ZfcHJvZ19QS0dDT05GSUc9Im5vIgorZmkKK2ZpCitQS0dDT05GSUc9JGFjX2N2X3Byb2dfUEtHQ09ORklHCitpZiB0ZXN0IC1uICIkUEtHQ09ORklHIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBLR0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJFBLR0NPTkZJRyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisKKyMKKyMgSGFuZGxlIGVhY2ggY2FwdHVyZSB0eXBlLgogIwogY2FzZSAiJFZfUENBUCIgaW4KIGRscGkpCiAJIwotCSMgTmVlZGVkIGZvciBjb21tb24gZnVuY3Rpb25zIHVzZWQgYnkgcGNhcC1bZGxwaSxsaWJkbHBpXS5jCi0JIwotIAlTU1JDPSJkbHBpc3Vicy5jIgotCi0JIwogCSMgQ2hlY2tzIGZvciBzb21lIGhlYWRlciBmaWxlcy4KIAkjCiAJZm9yIGFjX2hlYWRlciBpbiBzeXMvYnVmbW9kLmggc3lzL2RscGlfZXh0LmgKQEAgLTYxNjYsNyArNjcwNSw3IEBACiAJIyBBbHNvLCBkdWUgdG8gdGhlIGJ1ZyBhYm92ZSBhcHBsaWNhdGlvbnMgdGhhdCBsaW5rIHRvIGxpYnBjYXAgd2l0aAogCSMgbGliZGxwaSB3aWxsIGhhdmUgdG8gYWRkICItTC9saWIiIG9wdGlvbiB0byAiY29uZmlndXJlIi4KIAkjCi0Jc2F2ZWRfbGRmbGFncz0kTERGTEFHUworCXNhdmVfTERGTEFHUz0iJExERkxBR1MiCiAJTERGTEFHUz0iJExJQlMgLUwvbGliIgogCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRscGlfd2FsayBpbiAtbGRscGkiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRscGlfd2FsayBpbiAtbGRscGkuLi4gIiA+JjY7IH0KQEAgLTYyMDksMTQgKzY3NDgsMjggQEAKIAkJCUxJQlM9Ii1sZGxwaSAkTElCUyIKIAkJCVZfUENBUD1saWJkbHBpCiAKKwkJCSMKKwkJCSMgQ2FwdHVyZSBtb2R1bGUgcGx1cyBjb21tb24gY29kZSBuZWVkZWQgZm9yCisJCQkjIGNvbW1vbiBmdW5jdGlvbnMgdXNlZCBieSBwY2FwLVtkbHBpLGxpYmRscGldLmMKKwkJCSMKKwkJCVBMQVRGT1JNX0NfU1JDPSJwY2FwLWxpYmRscGkuYyBkbHBpc3Vicy5jIgorCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJQkRMUEkgMSIgPj5jb25mZGVmcy5oCiAKIAogZWxzZQotICBWX1BDQVA9ZGxwaQorCisJCQlWX1BDQVA9ZGxwaQorCisJCQkjCisJCQkjIENhcHR1cmUgbW9kdWxlIHBsdXMgY29tbW9uIGNvZGUgbmVlZGVkIGZvcgorCQkJIyBjb21tb24gZnVuY3Rpb25zIHVzZWQgYnkgcGNhcC1bZGxwaSxsaWJkbHBpXS5jCisJCQkjCisJCQlQTEFURk9STV9DX1NSQz0icGNhcC1kbHBpLmMgZGxwaXN1YnMuYyIKKwogZmkKIAotCUxERkxBR1M9JHNhdmVkX2xkZmxhZ3MKKwlMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgogCiAJIwogCSMgQ2hlY2tzIHdoZXRoZXIgPHN5cy9kbHBpLmg+IGlzIHVzYWJsZSwgdG8gY2F0Y2ggd2VpcmQgU0NPCkBAIC02Mjc4LDggKzY4MzEsNDQgQEAKIAogCTs7CiAKK2VuZXQpCisJIworCSMgQ2FwdHVyZSBtb2R1bGUKKwkjCisgCVBMQVRGT1JNX0NfU1JDPSJwY2FwLWVuZXQuYyIKKwk7OworCitoYWlrdSkKKwkjCisJIyBDYXB0dXJlIG1vZHVsZQorCSMKKyAJUExBVEZPUk1fQ1hYX1NSQz0icGNhcC1oYWlrdS5jcHAiCisKKwkjCisJIyBKdXN0IGZvciB0aGUgc2FrZSBvZiBpdC4KKwkjCisJZm9yIGFjX2hlYWRlciBpbiBuZXQvaWYuaCBuZXQvaWZfZGwuaCBuZXQvaWZfdHlwZXMuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisJOzsKKwogbGludXgpCiAJIworCSMgQ2FwdHVyZSBtb2R1bGUKKwkjCisgCVBMQVRGT1JNX0NfU1JDPSJwY2FwLWxpbnV4LmMiCisKKwkjCiAJIyBEbyB3ZSBoYXZlIHRoZSB3aXJlbGVzcyBleHRlbnNpb25zPwogCSMKIAlmb3IgYWNfaGVhZGVyIGluIGxpbnV4L3dpcmVsZXNzLmgKQEAgLTYzMDIsNiArNjg5MSwxMiBAQAogCiAJIwogCSMgRG8gd2UgaGF2ZSBsaWJubD8KKwkjIFdlIG9ubHkgd2FudCB2ZXJzaW9uIDMuICBWZXJzaW9uIDIgd2FzLCBhcHBhcmVudGx5LAorCSMgc2hvcnQtbGl2ZWQsIGFuZCB2ZXJzaW9uIDEgaXMgc291cmNlIGFuZCBiaW5hcnkKKwkjIGluY29tcGF0aWJsZSB3aXRoIHZlcnNpb24gMywgYW5kIGl0IGFwcGVhcnMgdGhhdCwKKwkjIHRoZXNlIGRheXMsIGV2ZXJ5Ym9keSdzIHVzaW5nIHZlcnNpb24gMy4gIFdlJ3JlCisJIyBub3Qgc3VwcG9ydGluZyBvbGRlciB2ZXJzaW9ucyBvZiB0aGUgTGludXgga2VybmVsOworCSMgbGV0J3MgZHJvcCBzdXBwb3J0IGZvciBvbGRlciB2ZXJzaW9ucyBvZiBsaWJubCwgdG9vLgogCSMKIAogIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJubCB3YXMgZ2l2ZW4uCkBAIC02MzEzLDI3ICs2OTA4LDUxIEBACiAKIAogCWlmIHRlc3QgeCR3aXRoX2xpYm5sICE9IHhubyA7IHRoZW4KLQkJaGF2ZV9hbnlfbmw9Im5vIgorCQlpZiB0ZXN0ICJ4JFBLR0NPTkZJRyIgIT0gInhubyI7IHRoZW4KKwkJCSMKKwkJCSMgV2UgaGF2ZSBwa2ctY29uZmlnOyBzZWUgaWYgd2UgaGF2ZSBsaWJubC1nZW5sLTMuMAorCQkJIyBhcyBhIHBhY2thZ2UuCisJCQkjCisJCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJubC1nZW5sLTMuMCB3aXRoIHBrZy1jb25maWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYm5sLWdlbmwtMy4wIHdpdGggcGtnLWNvbmZpZy4uLiAiID4mNjsgfQorCQkJaWYgIiRQS0dDT05GSUciIGxpYm5sLWdlbmwtMy4wOyB0aGVuCisJCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGZvdW5kIiA+JjUKKyRhc19lY2hvICJmb3VuZCIgPiY2OyB9CisJCQkJcGtnX2NvbmZpZ19mb3VuZF9saWJubD15ZXMKKwkJCQlsaWJubF9nZW5sX2NmbGFncz1gIiRQS0dDT05GSUciIC0tY2ZsYWdzIGxpYm5sLWdlbmwtMy4wYAorCQkJCVZfSU5DTFM9IiRWX0lOQ0xTICR7bGlibmxfZ2VubF9jZmxhZ3N9IgorCQkJCWxpYm5sX2dlbmxfbGlicz1gIiRQS0dDT05GSUciIC0tbGlicyBsaWJubC1nZW5sLTMuMGAKKwkJCQlMSUJTPSIke2xpYm5sX2dlbmxfbGlic30gJExJQlMiCiAKLSAgICAgICAgICAgICAgICBpbmNkaXI9LUkvdXNyL2luY2x1ZGUvbGlibmwzCi0gICAgICAgICAgICAgICAgbGlibmxkaXI9Ci0gICAgICAgICAgICAgICAgY2FzZSAiJHdpdGhfbGlibmwiIGluCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJQk5MIDEiID4+Y29uZmRlZnMuaAogCi0gICAgICAgICAgICAgICAgeWVzfGlmX2F2YWlsYWJsZSkKLSAgICAgICAgICAgICAgICAgIDs7CisJCQllbHNlCisJCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vdCBmb3VuZCIgPiY1CiskYXNfZWNobyAibm90IGZvdW5kIiA+JjY7IH0KKwkJCWZpCisJCWZpCiAKLSAgICAgICAgICAgICAgICAqKQotICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAkd2l0aHZhbDsgdGhlbgotICAgICAgICAgICAgICAgICAgICBsaWJubGRpcj0tTCR7d2l0aHZhbH0vbGliLy5saWJzCi0gICAgICAgICAgICAgICAgICAgIGluY2Rpcj0tSSR7d2l0aHZhbH0vaW5jbHVkZQotICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICAgZXNhYworCQlpZiB0ZXN0IHgkcGtnX2NvbmZpZ19mb3VuZF9saWJubCAhPSB4eWVzOyB0aGVuCisJCQkjCisJCQkjIE9LLCBlaXRoZXIgd2UgZG9uJ3QgaGF2ZSBwa2ctY29uZmlnIG9yIHRoZXJlCisJCQkjIHdhc24ndCBhIC5wYyBmaWxlIGZvciBpdDsgQ2hlY2sgZm9yIGl0IGRpcmVjdGx5LgorCQkJIworCQkJY2FzZSAiJHdpdGhfbGlibmwiIGluCiAKLQkJIwotCQkjIFRyeSBsaWJubCAzLnggZmlyc3QuCi0JCSMKLQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igbmxfc29ja2V0X2FsbG9jIGluIC1sbmwtMyIgPiY1CisJCQl5ZXN8aWZfYXZhaWxhYmxlKQorCQkJCWluY2Rpcj0tSS91c3IvaW5jbHVkZS9saWJubDMKKwkJCQlsaWJubGRpcj0KKwkJCQk7OworCisJCQkqKQorCQkJCWlmIHRlc3QgLWQgJHdpdGh2YWw7IHRoZW4KKwkJCQkJbGlibmxkaXI9LUwke3dpdGh2YWx9L2xpYgorCQkJCQlpbmNkaXI9LUkke3dpdGh2YWx9L2luY2x1ZGUKKwkJCQlmaQorCQkJCTs7CisJCQllc2FjCisKKwkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5sX3NvY2tldF9hbGxvYyBpbiAtbG5sLTMiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5sX3NvY2tldF9hbGxvYyBpbiAtbG5sLTMuLi4gIiA+JjY7IH0KIGlmICR7YWNfY3ZfbGliX25sXzNfbmxfc29ja2V0X2FsbG9jKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKQEAgLTYzNzEsMTk1ICs2OTkwLDMxIEBACiAkYXNfZWNobyAiJGFjX2N2X2xpYl9ubF8zX25sX3NvY2tldF9hbGxvYyIgPiY2OyB9CiBpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9ubF8zX25sX3NvY2tldF9hbGxvYyIgPSB4eWVzOyB0aGVuIDoKIAotCQkJIwotCQkJIyBZZXMsIHdlIGhhdmUgbGlibmwgMy54LgotCQkJIwotCQkJTElCUz0iJHtsaWJubGRpcn0gLWxubC1nZW5sLTMgLWxubC0zICRMSUJTIgorCQkJCSMKKwkJCQkjIFllcywgd2UgaGF2ZSBsaWJubCAzLnguCisJCQkJIworCQkJCUxJQlM9IiR7bGlibmxkaXJ9IC1sbmwtZ2VubC0zIC1sbmwtMyAkTElCUyIKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJOTCAxIiA+PmNvbmZkZWZzLmgKIAorCQkJCVZfSU5DTFM9IiRWX0lOQ0xTICR7aW5jZGlyfSIKIAotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJOTF8zX3ggMSIgPj5jb25mZGVmcy5oCi0KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJOTF9OTEUgMSIgPj5jb25mZGVmcy5oCi0KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJOTF9TT0NLRVRTIDEiID4+Y29uZmRlZnMuaAotCi0JCQlWX0lOQ0xTPSIkVl9JTkNMUyAke2luY2Rpcn0iCi0JCQloYXZlX2FueV9ubD0ieWVzIgotCi1maQotCi0KLQkJaWYgdGVzdCB4JGhhdmVfYW55X25sID0geG5vIDsgdGhlbgotCQkJIwotCQkJIyBUcnkgbGlibmwgMi54Ci0JCQkjCi0JCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBubF9zb2NrZXRfYWxsb2MgaW4gLWxubCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igbmxfc29ja2V0X2FsbG9jIGluIC1sbmwuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfbGliX25sX25sX3NvY2tldF9hbGxvYys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sbmwgICRMSUJTIgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIG5sX3NvY2tldF9hbGxvYyAoKTsKLWludAotbWFpbiAoKQotewotcmV0dXJuIG5sX3NvY2tldF9hbGxvYyAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfbmxfbmxfc29ja2V0X2FsbG9jPXllcwotZWxzZQotICBhY19jdl9saWJfbmxfbmxfc29ja2V0X2FsbG9jPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9ubF9ubF9zb2NrZXRfYWxsb2MiID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfbmxfbmxfc29ja2V0X2FsbG9jIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX25sX25sX3NvY2tldF9hbGxvYyIgPSB4eWVzOyB0aGVuIDoKIAogCQkJCSMKLQkJCQkjIFllcywgd2UgaGF2ZSBsaWJubCAyLnguCisJCQkJIyBObywgd2UgZG9uJ3QgaGF2ZSBsaWJubCBhdCBhbGwuCisJCQkJIyBGYWlsIGlmIHRoZSB1c2VyIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisJCQkJIyBpdC4KIAkJCQkjCi0JCQkJTElCUz0iJHtsaWJubGRpcn0gLWxubC1nZW5sIC1sbmwgJExJQlMiCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfTElCTkwgMSIgPj5jb25mZGVmcy5oCi0KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJOTF8yX3ggMSIgPj5jb25mZGVmcy5oCi0KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJOTF9OTEUgMSIgPj5jb25mZGVmcy5oCi0KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJOTF9TT0NLRVRTIDEiID4+Y29uZmRlZnMuaAotCi0JCQkJaGF2ZV9hbnlfbmw9InllcyIKKwkJCQlpZiB0ZXN0IHgkd2l0aF9saWJubCA9IHh5ZXMgOyB0aGVuCisJCQkJCWFzX2ZuX2Vycm9yICQ/ICJsaWJubCBzdXBwb3J0IHJlcXVlc3RlZCBidXQgbGlibmwgbm90IGZvdW5kIiAiJExJTkVOTyIgNQorCQkJCWZpCiAKIGZpCiAKIAkJZmkKLQotCQlpZiB0ZXN0IHgkaGF2ZV9hbnlfbmwgPSB4bm8gOyB0aGVuCi0JCQkjCi0JCQkjIE5vLCB3ZSBkb24ndDsgZG8gd2UgaGF2ZSBsaWJubCAxLng/Ci0JCQkjCi0JCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBubF9oYW5kbGVfYWxsb2MgaW4gLWxubCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgbmxfaGFuZGxlX2FsbG9jIGluIC1sbmwuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfbGliX25sX25sX2hhbmRsZV9hbGxvYys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sbmwgICRMSUJTIgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIG5sX2hhbmRsZV9hbGxvYyAoKTsKLWludAotbWFpbiAoKQotewotcmV0dXJuIG5sX2hhbmRsZV9hbGxvYyAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfbmxfbmxfaGFuZGxlX2FsbG9jPXllcwotZWxzZQotICBhY19jdl9saWJfbmxfbmxfaGFuZGxlX2FsbG9jPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9ubF9ubF9oYW5kbGVfYWxsb2MiID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfbmxfbmxfaGFuZGxlX2FsbG9jIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX25sX25sX2hhbmRsZV9hbGxvYyIgPSB4eWVzOyB0aGVuIDoKLQotCQkJCSMKLQkJCQkjIFllcy4KLQkJCQkjCi0JCQkJTElCUz0iJHtsaWJubGRpcn0gLWxubCAkTElCUyIKLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJOTCAxIiA+PmNvbmZkZWZzLmgKLQotCQkJCWhhdmVfYW55X25sPSJ5ZXMiCi0KLWZpCi0KLQkJZmkKLQotCQlpZiB0ZXN0IHgkaGF2ZV9hbnlfbmwgPSB4bm8gOyB0aGVuCi0JCQkjCi0JCQkjIE5vLCB3ZSBkb24ndCBoYXZlIGxpYm5sIGF0IGFsbC4KLQkJCSMKLQkJCWlmIHRlc3QgeCR3aXRoX2xpYm5sID0geHllcyA7IHRoZW4KLQkJCQlhc19mbl9lcnJvciAkPyAibGlibmwgc3VwcG9ydCByZXF1ZXN0ZWQgYnV0IGxpYm5sIG5vdCBmb3VuZCIgIiRMSU5FTk8iIDUKLQkJCWZpCi0JCWZpCiAJZmkKIAotCWZvciBhY19oZWFkZXIgaW4gbGludXgvZXRodG9vbC5oCi1kbyA6Ci0gIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJsaW51eC9ldGh0b29sLmgiICJhY19jdl9oZWFkZXJfbGludXhfZXRodG9vbF9oIiAiCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2xpbnV4X2V0aHRvb2xfaCIgPSB4eWVzOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0xJTlVYX0VUSFRPT0xfSCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0KLQkjCi0JIyBDaGVjayB0byBzZWUgaWYgc3RydWN0IHRwYWNrZXRfc3RhdHMgaXMgZGVmaW5lZCBpbgotCSMgPGxpbnV4L2lmX3BhY2tldC5oPi4gIElmIHNvLCB0aGVuIHBjYXAtbGludXguYyBjYW4gdXNlIHRoaXMKLQkjIHRvIHJlcG9ydCBwcm9wZXIgc3RhdGlzdGljcy4KLQkjCi0JIyAtU2NvdHQgQmFycm9uCi0JIwotCWFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInN0cnVjdCB0cGFja2V0X3N0YXRzIiAiYWNfY3ZfdHlwZV9zdHJ1Y3RfdHBhY2tldF9zdGF0cyIgIgotCQkjaW5jbHVkZSA8bGludXgvaWZfcGFja2V0Lmg+Ci0KLSIKLWlmIHRlc3QgIngkYWNfY3ZfdHlwZV9zdHJ1Y3RfdHBhY2tldF9zdGF0cyIgPSB4eWVzOyB0aGVuIDoKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1NUUlVDVF9UUEFDS0VUX1NUQVRTIDEKLV9BQ0VPRgotCi0KLWZpCi0KLQogCSMKIAkjIENoZWNrIHRvIHNlZSBpZiB0aGUgdHBhY2tldF9hdXhkYXRhIHN0cnVjdCBoYXMgYSB0cF92bGFuX3RjaSBtZW1iZXIuCiAJIwpAQCAtNjU4Niw2ICs3MDQxLDExIEBACiAKIGJwZikKIAkjCisJIyBDYXB0dXJlIG1vZHVsZQorCSMKKyAJUExBVEZPUk1fQ19TUkM9InBjYXAtYnBmLmMiCisKKwkjCiAJIyBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdGhlICpCU0Qtc3R5bGUgaW9jdGxzLgogCSMKIAlmb3IgYWNfaGVhZGVyIGluIG5ldC9pZl9tZWRpYS5oCkBAIC02NjI0LDEyICs3MDg0LDQ0IEBACiAKIAk7OwogCitwZikKKwkjCisJIyBDYXB0dXJlIG1vZHVsZQorCSMKKyAJUExBVEZPUk1fQ19TUkM9InBjYXAtcGYuYyIKKwk7OworCitzbml0KQorCSMKKwkjIENhcHR1cmUgbW9kdWxlCisJIworIAlQTEFURk9STV9DX1NSQz0icGNhcC1zbml0LmMiCisJOzsKKworc25vb3ApCisJIworCSMgQ2FwdHVyZSBtb2R1bGUKKwkjCisgCVBMQVRGT1JNX0NfU1JDPSJwY2FwLXNub29wLmMiCisJOzsKKwogZGFnKQogCSMKIAkjIC0td2l0aC1wY2FwPWRhZyBpcyB0aGUgb25seSB3YXkgdG8gZ2V0IGhlcmUsIGFuZCBpdCBtZWFucwogCSMgIkRBRyBzdXBwb3J0IGJ1dCBub3RoaW5nIGVsc2UiCiAJIwogCVZfREVGUz0iJFZfREVGUyAtRERBR19PTkxZIgorCVBMQVRGT1JNX0NfU1JDPSJwY2FwLWRhZy5jIgorCXh4eF9vbmx5PXllcworCTs7CisKK2RwZGspCisJIworCSMgLS13aXRoLXBjYXA9ZHBkayBpcyB0aGUgb25seSB3YXkgdG8gZ2V0IGhlcmUsIGFuZCBpdCBtZWFucworCSMgIkRQREsgc3VwcG9ydCBidXQgbm90aGluZyBlbHNlIgorCSMKKwlWX0RFRlM9IiRWX0RFRlMgLUREUERLX09OTFkiCisJUExBVEZPUk1fQ19TUkM9InBjYXAtZHBkay5jIgogCXh4eF9vbmx5PXllcwogCTs7CiAKQEAgLTY2MzksNiArNzEzMSw3IEBACiAJIyAiU2VwdGVsIHN1cHBvcnQgYnV0IG5vdGhpbmcgZWxzZSIKIAkjCiAJVl9ERUZTPSIkVl9ERUZTIC1EU0VQVEVMX09OTFkiCisJUExBVEZPUk1fQ19TUkM9InBjYXAtc2VwdGVsLmMiCiAJeHh4X29ubHk9eWVzCiAJOzsKIApAQCAtNjY0OCwxMCArNzE0MSwxNSBAQAogCSMgIlNORiBzdXBwb3J0IGJ1dCBub3RoaW5nIGVsc2UiCiAJIwogCVZfREVGUz0iJFZfREVGUyAtRFNORl9PTkxZIgorCVBMQVRGT1JNX0NfU1JDPSJwY2FwLXNuZi5jIgogCXh4eF9vbmx5PXllcwogCTs7CiAKIG51bGwpCisJIworCSMgQ2FwdHVyZSBtb2R1bGUKKwkjCisgCVBMQVRGT1JNX0NfU1JDPSJwY2FwLW51bGwuYyIKIAk7OwogCiAqKQpAQCAtNjY3NSw3ICs3MTczLDcgQEAKIAkJICAgICMgV2UgaGF2ZSB0aGUgaGVhZGVyLCBzbyB3ZSB1c2UgImdldGlmYWRkcnMoKSIgdG8KIAkJICAgICMgZ2V0IHRoZSBsaXN0IG9mIGludGVyZmFjZXMuCiAJCSAgICAjCi0JCSAgICBWX0ZJTkRBTExERVZTPWZhZC1nZXRhZC5jCisJCSAgICBQTEFURk9STV9DX1NSQz0iJFBMQVRGT1JNX0NfU1JDIGZhZC1nZXRhZC5jIgogCiBlbHNlCiAKQEAgLTY3NDQsMTggKzcyNDIsMTUgQEAKIAkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9sYmxfaGF2ZV9zaW9jZ2xpZmNvbmYiID4mNQogJGFzX2VjaG8gIiRhY19jdl9sYmxfaGF2ZV9zaW9jZ2xpZmNvbmYiID4mNjsgfQogCQlpZiB0ZXN0ICRhY19jdl9sYmxfaGF2ZV9zaW9jZ2xpZmNvbmYgPSB5ZXMgOyB0aGVuCi0JCQlWX0ZJTkRBTExERVZTPWZhZC1nbGlmYy5jCisJCQlQTEFURk9STV9DX1NSQz0iJFBMQVRGT1JNX0NfU1JDIGZhZC1nbGlmYy5jIgogCQllbHNlCi0JCQlWX0ZJTkRBTExERVZTPWZhZC1naWZjLmMKKwkJCVBMQVRGT1JNX0NfU1JDPSIkUExBVEZPUk1fQ19TUkMgZmFkLWdpZmMuYyIKIAkJZmkKIAogZmkKIAogZmkKIAotZmkKLQotCiBjYXNlICIkaG9zdF9vcyIgaW4KIGxpbnV4KikKIAlmb3IgYWNfaGVhZGVyIGluIGxpbnV4L25ldF90c3RhbXAuaApAQCAtNjc3NywyMSArNzI3Miw2IEBACiAJOzsKIGVzYWMKIAotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBhY2tldC1yaW5nIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3BhY2tldF9yaW5nK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfcGFja2V0X3Jpbmc7Ci1lbHNlCi0gIGVuYWJsZV9wYWNrZXRfcmluZz15ZXMKLWZpCi0KLQotaWYgdGVzdCAieCRlbmFibGVfcGFja2V0X3JpbmciICE9ICJ4bm8iIDsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBQQ0FQX1NVUFBPUlRfUEFDS0VUX1JJTkcgMSIgPj5jb25mZGVmcy5oCi0KLQotZmkKLQogIwogIyBDaGVjayBmb3Igc29ja2xlbl90LgogIwpAQCAtNjkwMSwxMCArNzM4MSwxNyBAQAogCiAJaWYgdGVzdCAteiAiJGRhZ19saWJfZGlyIjsgdGhlbgogCQlkYWdfbGliX2Rpcj0iJGRhZ19yb290L2xpYiIKKwkJIworCQkjIEhhbmRsZSBtdWx0aWFyY2ggc3lzdGVtcy4KKwkJIworCQlpZiB0ZXN0IC1kICIkZGFnX2xpYl9kaXIvJGhvc3QiCisJCXRoZW4KKwkJCWRhZ19saWJfZGlyPSIkZGFnX2xpYl9kaXIvJGhvc3QiCisJCWZpCiAJZmkKIAotCVZfSU5DTFM9IiRWX0lOQ0xTIC1JJGRhZ19pbmNsdWRlX2RpciIKLQorCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCUNGTEFHUz0iJENGTEFHUyAtSSRkYWdfaW5jbHVkZV9kaXIiCiAJZm9yIGFjX2hlYWRlciBpbiBkYWdhcGkuaAogZG8gOgogICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiZGFnYXBpLmgiICJhY19jdl9oZWFkZXJfZGFnYXBpX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKQEAgLTY5MjAsMTQgKzc0MDcsMTYgQEAKIAogCWlmIHRlc3QgIiRhY19jdl9oZWFkZXJfZGFnYXBpX2giID0geWVzOyB0aGVuCiAKKwkJVl9JTkNMUz0iJFZfSU5DTFMgLUkkZGFnX2luY2x1ZGVfZGlyIgorCiAJCWlmIHRlc3QgJFZfUENBUCAhPSBkYWcgOyB0aGVuCi0JCQkgU1NSQz0iJFNTUkMgcGNhcC1kYWcuYyIKKwkJCSBNT0RVTEVfQ19TUkM9IiRNT0RVTEVfQ19TUkMgcGNhcC1kYWcuYyIKIAkJZmkKIAogCQkjIENoZWNrIGZvciB2YXJpb3VzIERBRyBBUEkgZnVuY3Rpb25zLgogCQkjIERvbid0IG5lZWQgdG8gc2F2ZSBhbmQgcmVzdG9yZSBMSUJTIHRvIHByZXZlbnQgLWxkYWcgYmVpbmcKIAkJIyBpbmNsdWRlZCBpZiB0aGVyZSdzIGEgZm91bmQtYWN0aW9uIChhcmcgMykuCi0JCXNhdmVkX2xkZmxhZ3M9JExERkxBR1MKKwkJc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKIAkJTERGTEFHUz0iLUwkZGFnX2xpYl9kaXIiCiAJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRhZ19hdHRhY2hfc3RyZWFtIGluIC1sZGFnIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBkYWdfYXR0YWNoX3N0cmVhbSBpbiAtbGRhZy4uLiAiID4mNjsgfQpAQCAtNzEwNSw3ICs3NTk0LDcgQEAKIGZpCiAKIAotCQlMREZMQUdTPSRzYXZlZF9sZGZsYWdzCisJCUxERkxBR1M9IiRzYXZlX0xERkxBR1MiCiAKIAkJIwogCQkjIFdlIGFzc3VtZSB0aGF0IGlmIHdlIGhhdmUgbGliZGFnIHdlIGhhdmUgbGliZGFnY29uZiwKQEAgLTcxODQsMTAgKzc2NzMsMTEgQEAKIAkJZmkKIAogCQlpZiB0ZXN0ICIkd2FudF9kYWciID0geWVzOyB0aGVuCi0JICAgICAgICAJIyBVc2VyIHdhbnRlZCBEQUcgc3VwcG9ydCBidXQgd2UgY291bGRuJ3QgZmluZCBpdC4KKwkJCSMgVXNlciB3YW50ZWQgREFHIHN1cHBvcnQgYnV0IHdlIGNvdWxkbid0IGZpbmQgaXQuCiAJCQlhc19mbl9lcnJvciAkPyAiREFHIHN1cHBvcnQgcmVxdWVzdGVkIHdpdGggLS13aXRoLWRhZywgYnV0IHRoZSBEQUcgaGVhZGVycyB3ZXJlbid0IGZvdW5kIGF0ICRkYWdfaW5jbHVkZV9kaXI6IG1ha2Ugc3VyZSB0aGUgREFHIHN1cHBvcnQgaXMgaW5zdGFsbGVkLCBzcGVjaWZ5IGEgZGlmZmVyZW50IHBhdGggb3IgcGF0aHMgaWYgbmVjZXNzYXJ5LCBvciBkb24ndCByZXF1ZXN0IERBRyBzdXBwb3J0IiAiJExJTkVOTyIgNQogCQlmaQogCWZpCisJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCiBmaQogCiAKQEAgLTcyNTMsNyArNzc0Myw3IEBACiAJCUFERExBUkNISVZFT0JKUz0iJEFERExBUkNISVZFT0JKUyAkc2VwdGVsX3Rvb2xzX2Rpci9hc2NpaWJpbi5vICRzZXB0ZWxfdG9vbHNfZGlyL2JpdDJieXRlLm8gJHNlcHRlbF90b29sc19kaXIvY29uZmlybS5vICRzZXB0ZWxfdG9vbHNfZGlyL2ZtdG1zZy5vICRzZXB0ZWxfdG9vbHNfZGlyL2djdF91bml4Lm8gJHNlcHRlbF90b29sc19kaXIvaHF1ZXVlLm8gJHNlcHRlbF90b29sc19kaXIvaWRlbnQubyAkc2VwdGVsX3Rvb2xzX2Rpci9tZW0ubyAkc2VwdGVsX3Rvb2xzX2Rpci9wYWNrLm8gJHNlcHRlbF90b29sc19kaXIvcGFyc2UubyAkc2VwdGVsX3Rvb2xzX2Rpci9wb29sLm8gJHNlcHRlbF90b29sc19kaXIvc2Rsc2lnLm8gJHNlcHRlbF90b29sc19kaXIvc3RydG9udW0ubyAkc2VwdGVsX3Rvb2xzX2Rpci90aW1lci5vICRzZXB0ZWxfdG9vbHNfZGlyL3RyYWNlLm8iCiAKIAkJaWYgdGVzdCAiJFZfUENBUCIgIT0gc2VwdGVsIDsgdGhlbgotCQkJIFNTUkM9IiRTU1JDIHBjYXAtc2VwdGVsLmMiCisJCQkgTU9EVUxFX0NfU1JDPSIkTU9EVUxFX0NfU1JDIHBjYXAtc2VwdGVsLmMiCiAJCWZpCiAKIApAQCAtNzI3MCw3ICs3NzYwLDcgQEAKIAkJZmkKIAogCQlpZiB0ZXN0ICIkd2FudF9zZXB0ZWwiID0geWVzOyB0aGVuCi0JICAgICAgICAJIyBVc2VyIHdhbnRlZCBTZXB0ZWwgc3VwcG9ydCBidXQgd2UgY291bGRuJ3QgZmluZCBpdC4KKwkJCSMgVXNlciB3YW50ZWQgU2VwdGVsIHN1cHBvcnQgYnV0IHdlIGNvdWxkbid0IGZpbmQgaXQuCiAJCQlhc19mbl9lcnJvciAkPyAiU2VwdGVsIHN1cHBvcnQgcmVxdWVzdGVkIHdpdGggLS13aXRoLXNlcHRlbCwgYnV0IHRoZSBTZXB0ZWwgaGVhZGVycyB3ZXJlbid0IGZvdW5kIGF0ICRzZXB0ZWxfaW5jbHVkZV9kaXI6IG1ha2Ugc3VyZSB0aGUgU2VwdGVsIHN1cHBvcnQgaXMgaW5zdGFsbGVkLCBzcGVjaWZ5IGEgZGlmZmVyZW50IHBhdGggb3IgcGF0aHMgaWYgbmVjZXNzYXJ5LCBvciBkb24ndCByZXF1ZXN0IFNlcHRlbCBzdXBwb3J0IiAiJExJTkVOTyIgNQogCQlmaQogCWZpCkBAIC03MzU0LDExICs3ODQ0LDE4IEBACiAKIAlpZiB0ZXN0IC16ICIkc25mX2xpYl9kaXIiOyB0aGVuCiAJCXNuZl9saWJfZGlyPSIkc25mX3Jvb3QvbGliIgorCQkjCisJCSMgSGFuZGxlIG11bHRpYXJjaCBzeXN0ZW1zLgorCQkjCisJCWlmIHRlc3QgLWQgIiRzbmZfbGliX2Rpci8kaG9zdCIKKwkJdGhlbgorCQkJc25mX2xpYl9kaXI9IiRzbmZfbGliX2Rpci8kaG9zdCIKKwkJZmkKIAlmaQogCiAJaWYgdGVzdCAtZiAiJHNuZl9pbmNsdWRlX2Rpci9zbmYuaCI7IHRoZW4KIAkJIyBXZSBmb3VuZCBhIGhlYWRlcjsgbWFrZSBzdXJlIHdlIGNhbiBsaW5rIHdpdGggdGhlIGxpYnJhcnkKLQkJc2F2ZWRfbGRmbGFncz0kTERGTEFHUworCQlzYXZlX0xERkxBR1M9IiRMREZMQUdTIgogCQlMREZMQUdTPSIkTERGTEFHUyAtTCRzbmZfbGliX2RpciIKIAkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc25mX2luaXQgaW4gLWxzbmYiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNuZl9pbml0IGluIC1sc25mLi4uICIgPiY2OyB9CkBAIC03NDAwLDcgKzc4OTcsNyBAQAogICBhY19jdl9sYmxfc25mX2FwaT0ieWVzIgogZmkKIAotCQlMREZMQUdTPSIkc2F2ZWRfbGRmbGFncyIKKwkJTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKIAkJaWYgdGVzdCAiJGFjX2N2X2xibF9zbmZfYXBpIiA9IG5vOyB0aGVuCiAJCQlhc19mbl9lcnJvciAkPyAiU05GIEFQSSBjYW5ub3QgY29ycmVjdGx5IGJlIGxpbmtlZDsgY2hlY2sgY29uZmlnLmxvZyIgIiRMSU5FTk8iIDUKIAkJZmkKQEAgLTc0MTUsNyArNzkxMiw3IEBACiAJCUxERkxBR1M9IiRMREZMQUdTIC1MJHNuZl9saWJfZGlyIgogCiAJCWlmIHRlc3QgIiRWX1BDQVAiICE9IHNuZiA7IHRoZW4KLQkJCVNTUkM9IiRTU1JDIHBjYXAtc25mLmMiCisJCQlNT0RVTEVfQ19TUkM9IiRNT0RVTEVfQ19TUkMgcGNhcC1zbmYuYyIKIAkJZmkKIAogCkBAIC03NTEzLDcgKzgwMTAsNyBAQAogCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogCi0JCVNTUkM9IiRTU1JDIHBjYXAtdGMuYyIKKwkJTU9EVUxFX0NfU1JDPSIkTU9EVUxFX0NfU1JDIHBjYXAtdGMuYyIKIAkJVl9JTkNMUz0iJFZfSU5DTFMgJFRVUkJPQ0FQX0NGTEFHUyIKIAkJTElCUz0iJExJQlMgJFRVUkJPQ0FQX0xJQlMgLWxUY0FwaSAtbHB0aHJlYWQgLWxzdGRjKysiCiAKQEAgLTc1MjUsNyArODAyMiw3IEBACiAkYXNfZWNobyAibm8iID4mNjsgfQogCiAJCWlmIHRlc3QgIiR3YW50X3R1cmJvY2FwIiA9IHllczsgdGhlbgotCSAgICAgICAgCSMgVXNlciB3YW50ZWQgVHVyYm8gc3VwcG9ydCBidXQgd2UgY291bGRuJ3QgZmluZCBpdC4KKwkJCSMgVXNlciB3YW50ZWQgVHVyYm8gc3VwcG9ydCBidXQgd2UgY291bGRuJ3QgZmluZCBpdC4KIAkJCWFzX2ZuX2Vycm9yICQ/ICJUdXJib0NhcCBzdXBwb3J0IHJlcXVlc3RlZCB3aXRoIC0td2l0aC10dXJib2NhcCwgYnV0IHRoZSBUdXJib0NhcCBoZWFkZXJzIHdlcmVuJ3QgZm91bmQ6IG1ha2Ugc3VyZSB0aGUgVHVyYm9DYXAgc3VwcG9ydCBpcyBpbnN0YWxsZWQgb3IgZG9uJ3QgcmVxdWVzdCBUdXJib0NhcCBzdXBwb3J0IiAiJExJTkVOTyIgNQogCQlmaQogCWZpCkBAIC03NjY1LDEwICs4MTYyLDE0MiBAQAogZmkKIAogCisJIworCSMgT3B0aW9uYWxseSwgd2UgbWF5IHdhbnQgdG8gc3VwcG9ydCBTU0wuCisJIyBDaGVjayBmb3IgT3BlblNTTC9saWJyZXNzbC4KKwkjCisJIyBGaXJzdCwgdHJ5IGxvb2tpbmcgZm9yIGl0IGFzIGEgcmVndWxhciBzeXN0ZW0gbGlicmFyeS4KKwkjIE1ha2Ugc3VyZSB3ZSBjYW4gZmluZCBTU0xfbGlicmFyeV9pbml0KCkgdXNpbmcgdGhlCisJIyBzdGFuZGFyZCBoZWFkZXJzLCBqdXN0IGluIGNhc2Ugd2UncmUgcnVubmluZyBhIHZlcnNpb24KKwkjIG9mIG1hY09TIHRoYXQgc2hpcHMgd2l0aCB0aGUgT3BlblNTTCBsaWJyYXJ5IGJ1dCBub3QKKwkjIHRoZSBPcGVuU1NMIGhlYWRlcnMsIGFuZCBoYXZlIGFsc28gaW5zdGFsbGVkIGFub3RoZXIKKwkjIHZlcnNpb24gb2YgT3BlblNTTCB3aXRoIGhlYWRlcnMuCisJIworCXNhdmVfTElCUz0iJExJQlMiCisJTElCUz0iLWxzc2wgLWxjcnlwdG8iCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGhhdmUgYSBzeXN0ZW0gT3BlblNTTC9saWJyZXNzbCB0aGF0IHdlIGNhbiB1c2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBoYXZlIGEgc3lzdGVtIE9wZW5TU0wvbGlicmVzc2wgdGhhdCB3ZSBjYW4gdXNlLi4uICIgPiY2OyB9CisJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKworaW50CittYWluICgpCit7CisKK1NTTF9saWJyYXJ5X2luaXQoKTsKK3JldHVybiAwOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCQlIQVZFX09QRU5TU0w9eWVzCisJCU9QRU5TU0xfTElCUz0iLWxzc2wgLWxjcnlwdG8iCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwlMSUJTPSIkc2F2ZV9MSUJTIgorCisJIworCSMgSWYgd2UgZGlkbid0IGZpbmQgaXQsIGNoZWNrIGZvciBpdCB3aXRoIHBrZy1jb25maWcuCisJIworCWlmIHRlc3QgIngkSEFWRV9PUEVOU1NMIiAhPSAieHllcyI7IHRoZW4KKwkJaWYgdGVzdCAieCRQS0dDT05GSUciICE9ICJ4bm8iOyB0aGVuCisJCQkjCisJCQkjIFdlIGhhdmUgcGtnLWNvbmZpZzsgc2VlIGlmIHdlIGhhdmUgT3BlblNTTC8KKwkJCSMgbGlicmVzc2wgaW5zdGFsbGVkIGFzIGEgcGFja2FnZS4KKwkJCSMKKwkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIE9wZW5TU0wvbGlicmVzc2wgd2l0aCBwa2ctY29uZmlnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBPcGVuU1NML2xpYnJlc3NsIHdpdGggcGtnLWNvbmZpZy4uLiAiID4mNjsgfQorCQkJaWYgIiRQS0dDT05GSUciIG9wZW5zc2w7IHRoZW4KKwkJCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZm91bmQiID4mNQorJGFzX2VjaG8gImZvdW5kIiA+JjY7IH0KKwkJCQlIQVZFX09QRU5TU0w9eWVzCisJCQkJT1BFTlNTTF9DRkxBR1M9YCIkUEtHQ09ORklHIiAtLWNmbGFncyBvcGVuc3NsYAorCQkJCU9QRU5TU0xfTElCUz1gIiRQS0dDT05GSUciIC0tbGlicyBvcGVuc3NsYAorCQkJZWxzZQorCQkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub3QgZm91bmQiID4mNQorJGFzX2VjaG8gIm5vdCBmb3VuZCIgPiY2OyB9CisJCQlmaQorCQlmaQorCWZpCisKKwkjCisJIyBJZiB3ZSBkaWRuJ3QgZmluZCBpdCwgY2hlY2sgZm9yIGl0IHVuZGVyIC91c3IvbG9jYWwvb3B0L29wZW5zc2w7CisJIyB0aGF0J3Mgd2hlcmUgSG9tZWJyZXcgcHV0cyBpdCBvbiBtYWNPUy4gIEZlZWwgZnJlZSB0byBhZGQgb3RoZXIKKwkjIC1MIGRpcmVjdG9yaWVzIGFzIG5lY2Vzc2FyeTsgdGhlICJzeXN0ZW0gbGlicmFyeSIgY2hlY2sgc2hvdWxkCisJIyBhbHNvIGhhbmRsZSAiYWRkLW9uIGxpYnJhcnkgdW5kZXIgL3Vzci9sb2NhbCIsIHNvIHRoYXQgc2hvdWxkbid0CisJIyBiZSBuZWNlc3NhcnkgaGVyZS4KKwkjCisJaWYgdGVzdCAieCRIQVZFX09QRU5TU0wiICE9ICJ4eWVzIjsgdGhlbgorCQlzYXZlX0NGTEFHUz0iJENGTEFHUyIKKwkJc2F2ZV9MSUJTPSIkTElCUyIKKwkJQ0ZMQUdTPSIkQ0ZMQUdTIC1ML3Vzci9sb2NhbC9vcHQvb3BlbnNzbC9pbmNsdWRlIgorCQlMSUJTPSIkTElCUyAtTC91c3IvbG9jYWwvb3B0L29wZW5zc2wvbGliIC1sc3NsIC1sY3J5cHRvIgorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgaGF2ZSBPcGVuU1NML2xpYnJlc3NsIGluIC91c3IvbG9jYWwvb3B0IHRoYXQgd2UgY2FuIHVzZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGhhdmUgT3BlblNTTC9saWJyZXNzbCBpbiAvdXNyL2xvY2FsL29wdCB0aGF0IHdlIGNhbiB1c2UuLi4gIiA+JjY7IH0KKwkJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKworaW50CittYWluICgpCit7CisKK1NTTF9saWJyYXJ5X2luaXQoKTsKK3JldHVybiAwOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKwkJCUhBVkVfT1BFTlNTTD15ZXMKKwkJCU9QRU5TU0xfQ0ZMQUdTPSItSS91c3IvbG9jYWwvb3B0L29wZW5zc2wvaW5jbHVkZSIKKwkJCU9QRU5TU0xfTElCUz0iLUwvdXNyL2xvY2FsL29wdC9vcGVuc3NsL2xpYiAtbHNzbCAtbGNyeXB0byIKKworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCQlDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKwkJTElCUz0iJHNhdmVfTElCUyIKKwlmaQorCisJIworCSMgT0ssIGRpZCB3ZSBmaW5kIGl0PworCSMKKwlpZiB0ZXN0ICJ4JEhBVkVfT1BFTlNTTCIgPSAieHllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9PUEVOU1NMIDEiID4+Y29uZmRlZnMuaAorCisJCUNGTEFHUz0iJENGTEFHUyAkT1BFTlNTTF9DRkxBR1MiCisJCUxJQlM9IiRMSUJTICRPUEVOU1NMX0xJQlMiCisJZWxzZQorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IE9wZW5TU0wgbm90IGZvdW5kIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IE9wZW5TU0wgbm90IGZvdW5kIiA+JjY7fQorCWZpCisKIAogJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX1JFTU9URSAvKiovIiA+PmNvbmZkZWZzLmgKIAotCVNTUkM9IiRTU1JDIHBjYXAtbmV3LmMgcGNhcC1ycGNhcC5jIHJwY2FwLXByb3RvY29sLmMgc29ja3V0aWxzLmMiCisJUkVNT1RFX0NfU1JDPSIkUkVNT1RFX0NfU1JDIHBjYXAtbmV3LmMgcGNhcC1ycGNhcC5jIHJwY2FwLXByb3RvY29sLmMgc29ja3V0aWxzLmMgc3NsdXRpbHMuYyIKIAlCVUlMRF9SUENBUEQ9YnVpbGQtcnBjYXBkCiAJSU5TVEFMTF9SUENBUEQ9aW5zdGFsbC1ycGNhcGQKIAk7OwpAQCAtNzk0MiwzOCArODU3MSw3MCBAQAogdGVzdCAtbiAiJFlBQ0MiIHx8IFlBQ0M9InlhY2MiCiAKIAotIwotIyBNYWtlIHN1cmUgaXQgc3VwcG9ydHMgdGhlIC1wIGZsYWcgYW5kIHN1cHBvcnRzIHByb2Nlc3Npbmcgb3VyCi0jIGdyYW1tYXIueS4KLSMKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGNhcGFibGUgeWFjYy9iaXNvbiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgY2FwYWJsZSB5YWNjL2Jpc29uLi4uICIgPiY2OyB9CitjYXNlICIkWUFDQyIgaW4KKworKnlhY2MpCisJIworCSMgTWFrZSBzdXJlIHRoaXMgaXMgQmVya2VsZXkgWUFDQywgbm90IEFUJlQgWUFDQzsgdGhlIGxhdHRlcgorCSMgZG9lc24ndCBzdXBwb3J0IHJlZW50cmFudCBwYXJzZXJzLiAgUnVuIGl0IHdpdGggIi1WIjsKKwkjIHRoYXQgc3VjY2VlZHMgYW5kIHJlcG9ydHMgdGhlIHZlcnNpb24gbnVtYmVyIHdpdGgKKwkjIEJlcmtlbGV5IFlBQ0MsIGJ1dCB3aWxsIChwcm9iYWJseSkgZmFpbCB3aXRoIHZhcmlvdXMKKwkjIHZlbmRvciBmbGF2b3JzIG9mIEFUJlQgWUFDQy4KKwkjCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgY2FwYWJsZSB5YWNjIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBjYXBhYmxlIHlhY2MuLi4gIiA+JjY7IH0KIGlmICR7dGNwZHVtcF9jdl9jYXBhYmxlX3lhY2MrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiAkWUFDQyAtcCBwY2FwXyAtbyAvZGV2L251bGwgJHNyY2Rpci9ncmFtbWFyLnkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JICAgIHRjcGR1bXBfY3ZfY2FwYWJsZV95YWNjPXllcwotCWVsc2UKLQkgICAgdGNwZHVtcF9jdl9jYXBhYmxlX3lhY2M9aW5zdWZmaWNpZW50Ci0JZmkKKyAgaWYgJFlBQ0MgLVYgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCXRjcGR1bXBfY3ZfY2FwYWJsZV95YWNjPXllcworCSAgICBlbHNlCisJCXRjcGR1bXBfY3ZfY2FwYWJsZV95YWNjPWluc3VmZmljaWVudAorCSAgICBmaQogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkdGNwZHVtcF9jdl9jYXBhYmxlX3lhY2MiID4mNQogJGFzX2VjaG8gIiR0Y3BkdW1wX2N2X2NhcGFibGVfeWFjYyIgPiY2OyB9Ci1pZiB0ZXN0ICR0Y3BkdW1wX2N2X2NhcGFibGVfeWFjYyA9IGluc3VmZmljaWVudCA7IHRoZW4KLQlhc19mbl9lcnJvciAkPyAiJFlBQ0MgaXMgaW5zdWZmaWNpZW50IHRvIGNvbXBpbGUgbGlicGNhcC4KKwlpZiB0ZXN0ICR0Y3BkdW1wX2N2X2NhcGFibGVfeWFjYyA9IGluc3VmZmljaWVudCA7IHRoZW4KKwkgICAgYXNfZm5fZXJyb3IgJD8gIiRZQUNDIGlzIGluc3VmZmljaWVudCB0byBjb21waWxlIGxpYnBjYXAuCiAgbGlicGNhcCByZXF1aXJlcyBCaXNvbiwgYSBuZXdlciB2ZXJzaW9uIG9mIEJlcmtlbGV5IFlBQ0Mgd2l0aCBzdXBwb3J0CiAgZm9yIHJlZW50cmFudCBwYXJzZXJzLCBvciBhbm90aGVyIFlBQ0MgY29tcGF0aWJsZSB3aXRoIHRoZW0uIiAiJExJTkVOTyIgNQotZmkKKwlmaQorCisJIworCSMgQmVya2VsZXkgWUFDQyBkb2Vzbid0IHN1cHBvcnQgIiVkZWZpbmUgYXBpLnB1cmUiLCBzbyB1c2UKKwkjICIlcHVyZS1wYXJzZXIiLgorCSMKKwlSRUVOVFJBTlRfUEFSU0VSPSIlcHVyZS1wYXJzZXIiCisJOzsKKworKikKKwkjCisJIyBCaXNvbiBwcmlvciB0byAyLjQoLjEpIGRvZXNuJ3Qgc3VwcG9ydCAiJWRlZmluZSBhcGkucHVyZSIsIHNvIHVzZQorCSMgIiVwdXJlLXBhcnNlciIuCisJIworCWJpc29uX21ham9yX3ZlcnNpb249YCRZQUNDIC1WIHwgc2VkIC1uICdzLy4qIFwoWzEtOV1bMC05XSpcKVwuWzEtOV1bMC05Ll0qL1wxL3AnYAorCWJpc29uX21pbm9yX3ZlcnNpb249YCRZQUNDIC1WIHwgc2VkIC1uICdzLy4qIFsxLTldWzAtOV0qXC5cKFsxLTldWzAtOV0qXCkuKi9cMS9wJ2AKKwlpZiB0ZXN0ICIkYmlzb25fbWFqb3JfdmVyc2lvbiIgLWx0IDIgLW8gXAorCSAgICBcKCAiJGJpc29uX21ham9yX3ZlcnNpb24iIC1lcSAyIC1hICIkYmlzb25fbWFqb3JfdmVyc2lvbiIgLWx0IDQgXCkKKwl0aGVuCisJCVJFRU5UUkFOVF9QQVJTRVI9IiVwdXJlLXBhcnNlciIKKwllbHNlCisJCVJFRU5UUkFOVF9QQVJTRVI9IiVkZWZpbmUgYXBpLnB1cmUiCisJZmkKKwk7OworZXNhYworCiAKICMKICMgRG8gdmFyaW91cyBjaGVja3MgZm9yIHZhcmlvdXMgT1NlcyBhbmQgdmVyc2lvbnMgb2YgdGhvc2UgT1Nlcy4KICMKICMgQXNzdW1lLCBieSBkZWZhdWx0LCBubyBzdXBwb3J0IGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBWNy9CU0QKLSMgY29udmVudGlvbiBmb3IgbWFuIHBhZ2VzIChmaWxlIGZvcm1hdHMgaW4gc2VjdGlvbiA1LCBtaXNjZWxsYW5lb3VzCi0jIGluZm8gaW4gc2VjdGlvbiA3LCBhZG1pbmlzdHJhdGl2ZSBjb21tYW5kcyBhbmQgZGFlbW9ucyBpbiBzZWN0aW9uIDgpLgotIyBJbmRpdmlkdWFsIGNhc2VzIGNhbiBvdmVycmlkZSB0aGlzLgorIyBjb252ZW50aW9uIGZvciBtYW4gcGFnZXMgKGRldmljZXMgaW4gc2VjdGlvbiA0LCBmaWxlIGZvcm1hdHMgaW4KKyMgc2VjdGlvbiA1LCBtaXNjZWxsYW5lb3VzIGluZm8gaW4gc2VjdGlvbiA3LCBhZG1pbmlzdHJhdGl2ZSBjb21tYW5kcworIyBhbmQgZGFlbW9ucyBpbiBzZWN0aW9uIDgpLiAgSW5kaXZpZHVhbCBjYXNlcyBjYW4gb3ZlcnJpZGUgdGhpcy4KICMKIERZRVhUPSJub25lIgorTUFOX0RFVklDRVM9NAogTUFOX0ZJTEVfRk9STUFUUz01CiBNQU5fTUlTQ19JTkZPPTcKIE1BTl9BRE1JTl9DT01NQU5EUz04CkBAIC04MDM1LDc5ICs4Njk2LDE4MSBAQAogCWlmIHRlc3QgIiRlbmFibGVfdW5pdmVyc2FsIiAhPSAibm8iOyB0aGVuCiAJCWNhc2UgIiRob3N0X29zIiBpbgogCi0JCWRhcndpbjAtNy4qKQorCQlkYXJ3aW5bMC03XS4qKQogCQkJIwogCQkJIyBQcmUtVGlnZXIuICBCdWlsZCBvbmx5IGZvciAzMi1iaXQgUG93ZXJQQzsgbm8KIAkJCSMgbmVlZCBmb3IgYW55IHNwZWNpYWwgY29tcGlsZXIgb3IgbGlua2VyIGZsYWdzLgogCQkJIwogCQkJOzsKIAotCQlkYXJ3aW44LjAxMjMqKQorCQlkYXJ3aW44LlswMTIzXXxkYXJ3aW44LlswMTIzXS4qKQogCQkJIwotCQkJIyBUaWdlciwgcHJpb3IgdG8gSW50ZWwgc3VwcG9ydC4gIEJ1aWxkIGZvciAzMi1iaXQKLQkJCSMgUG93ZXJQQyBhbmQgNjQtYml0IFBvd2VyUEMsIHdpdGggMzItYml0IFBvd2VyUEMKLQkJCSMgZmlyc3QuICAoSSdtIGd1ZXNzaW5nIHRoYXQncyB3aGF0IEFwcGxlIGRvZXMuKQotCQkJIwotCQkJVl9DQ09QVD0iJFZfQ0NPUFQgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IgotCQkJTERGTEFHUz0iJExERkxBR1MgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IgotCQkJOzsKLQotCQlkYXJ3aW44LjQ1NiopCi0JCQkjCi0JCQkjIFRpZ2VyLCBzdWJzZXF1ZW50IHRvIEludGVsIHN1cHBvcnQgYnV0IHByaW9yIHRvCi0JCQkjIHg4Ni02NCBzdXBwb3J0LiAgQnVpbGQgZm9yIDMyLWJpdCBQb3dlclBDLCA2NC1iaXQKLQkJCSMgUG93ZXJQQywgYW5kIHg4Niwgd2l0aCAzMi1iaXQgUG93ZXJQQyBmaXJzdC4KKwkJCSMgVGlnZXIsIHByaW9yIHRvIEludGVsIHN1cHBvcnQuICBCdWlsZAorCQkJIyBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGZvciAzMi1iaXQgUG93ZXJQQworCQkJIyBhbmQgNjQtYml0IFBvd2VyUEMsIHdpdGggMzItYml0IFBvd2VyUEMgZmlyc3QuCiAJCQkjIChJJ20gZ3Vlc3NpbmcgdGhhdCdzIHdoYXQgQXBwbGUgZG9lcy4pCiAJCQkjCi0JCQlWX0NDT1BUPSIkVl9DQ09QVCAtYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggaTM4NiIKLQkJCUxERkxBR1M9IiRMREZMQUdTIC1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCBpMzg2IgorCQkJIyAoVGhlIGRvdWJsZSBicmFja2V0cyBhcmUgbmVlZGVkIGJlY2F1c2UKKwkJCSMgYXV0b3Rvb2xzL200IHVzZSBicmFja2V0cyBhcyBhIHF1b3RpbmcKKwkJCSMgY2hhcmFjdGVyOyB0aGUgZG91YmxlIGJyYWNrZXRzIHR1cm4gaW50bworCQkJIyBzaW5nbGUgYnJhY2tldHMgaW4gdGhlIGdlbmVyYXRlZCBjb25maWd1cmUKKwkJCSMgZmlsZS4pCisJCQkjCisJCQlWX0xJQl9DQ09QVF9GQVQ9Ii1hcmNoIHBwYyAtYXJjaCBwcGM2NCIKKwkJCVZfTElCX0xERkxBR1NfRkFUPSItYXJjaCBwcGMgLWFyY2ggcHBjNjQiCisJCQlWX1BST0dfQ0NPUFRfRkFUPSItYXJjaCBwcGMgLWFyY2ggcHBjNjQiCisJCQlWX1BST0dfTERGTEFHU19GQVQ9Ii1hcmNoIHBwYyAtYXJjaCBwcGM2NCIKKwkJCTs7CisKKwkJZGFyd2luOC5bNDU2XXxkYXJ3aW4uWzQ1Nl0uKikKKwkJCSMKKwkJCSMgVGlnZXIsIHN1YnNlcXVlbnQgdG8gSW50ZWwgc3VwcG9ydCBidXQgcHJpb3IKKwkJCSMgdG8geDg2LTY0IHN1cHBvcnQuICBCdWlsZCBsaWJyYXJpZXMgYW5kCisJCQkjIGV4ZWN1dGFibGVzIGZvciAzMi1iaXQgUG93ZXJQQywgNjQtYml0CisJCQkjIFBvd2VyUEMsIGFuZCAzMi1iaXQgeDg2LCB3aXRoIDMyLWJpdCBQb3dlclBDCisJCQkjIGZpcnN0LiAgKEknbSBndWVzc2luZyB0aGF0J3Mgd2hhdCBBcHBsZSBkb2VzLikKKwkJCSMKKwkJCSMgKFRoZSBkb3VibGUgYnJhY2tldHMgYXJlIG5lZWRlZCBiZWNhdXNlCisJCQkjIGF1dG90b29scy9tNCB1c2UgYnJhY2tldHMgYXMgYSBxdW90aW5nCisJCQkjIGNoYXJhY3RlcjsgdGhlIGRvdWJsZSBicmFja2V0cyB0dXJuIGludG8KKwkJCSMgc2luZ2xlIGJyYWNrZXRzIGluIHRoZSBnZW5lcmF0ZWQgY29uZmlndXJlCisJCQkjIGZpbGUuKQorCQkJIworCQkJVl9MSUJfQ0NPUFRfRkFUPSItYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggaTM4NiIKKwkJCVZfTElCX0xERkxBR1NfRkFUPSItYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggaTM4NiIKKwkJCVZfUFJPR19DQ09QVF9GQVQ9Ii1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCBpMzg2IgorCQkJVl9QUk9HX0xERkxBR1NfRkFUPSItYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggaTM4NiIKIAkJCTs7CiAKIAkJZGFyd2luOC4qKQogCQkJIwogCQkJIyBBbGwgb3RoZXIgVGlnZXIsIHNvIHN1YnNlcXVlbnQgdG8geDg2LTY0Ci0JCQkjIHN1cHBvcnQuIEJ1aWxkIGZvciAzMi1iaXQgUG93ZXJQQywgNjQtYml0Ci0JCQkjIFBvd2VyUEMsIHg4NiwgYW5kIHg4Ni02NCwgYW5kIHdpdGggMzItYml0IFBvd2VyUEMKLQkJCSMgZmlyc3QuICAoSSdtIGd1ZXNzaW5nIHRoYXQncyB3aGF0IEFwcGxlIGRvZXMuKQorCQkJIyBzdXBwb3J0LiAgQnVpbGQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBmb3IKKwkJCSMgMzItYml0IFBvd2VyUEMsIDY0LWJpdCBQb3dlclBDLCAzMi1iaXQgeDg2LAorCQkJIyBhbmQgeDg2LTY0LCB3aXRoIDMyLWJpdCBQb3dlclBDIGZpcnN0LiAgKEknbQorCQkJIyBndWVzc2luZyB0aGF0J3Mgd2hhdCBBcHBsZSBkb2VzLikKIAkJCSMKLQkJCVZfQ0NPUFQ9IiRWX0NDT1BUIC1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKLQkJCUxERkxBR1M9IiRMREZMQUdTIC1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKKwkJCVZfTElCX0NDT1BUX0ZBVD0iLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgorCQkJVl9MSUJfTERGTEFHU19GQVQ9Ii1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKKwkJCVZfUFJPR19DQ09QVF9GQVQ9Ii1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKKwkJCVZfUFJPR19MREZMQUdTX0ZBVD0iLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgogCQkJOzsKIAogCQlkYXJ3aW45LiopCiAJCQkjCi0JCQkjIExlb3BhcmQuICBCdWlsZCBmb3IgMzItYml0IFBvd2VyUEMsIDY0LWJpdAotCQkJIyBQb3dlclBDLCB4ODYsIGFuZCB4ODYtNjQsIHdpdGggMzItYml0IFBvd2VyUEMKLQkJCSMgZmlyc3QuICAoVGhhdCdzIHdoYXQgQXBwbGUgZG9lcy4pCisJCQkjIExlb3BhcmQuICBCdWlsZCBsaWJyYXJpZXMgZm9yIDMyLWJpdCBQb3dlclBDLAorCQkJIyA2NC1iaXQgUG93ZXJQQywgMzItYml0IHg4NiwgYW5kIHg4Ni02NCwgd2l0aAorCQkJIyAzMi1iaXQgUG93ZXJQQyBmaXJzdCwgYW5kIGJ1aWxkIGV4ZWN1dGFibGVzCisJCQkjIGZvciAzMi1iaXQgeDg2IGFuZCAzMi1iaXQgUG93ZXJQQywgd2l0aCAzMi1iaXQKKwkJCSMgeDg2IGZpcnN0LiAgKFRoYXQncyB3aGF0IEFwcGxlIGRvZXMuKQogCQkJIwotCQkJVl9DQ09QVD0iJFZfQ0NPUFQgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgotCQkJTERGTEFHUz0iJExERkxBR1MgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgorCQkJVl9MSUJfQ0NPUFRfRkFUPSItYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQiCisJCQlWX0xJQl9MREZMQUdTX0ZBVD0iLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgorCQkJVl9QUk9HX0NDT1BUX0ZBVD0iLWFyY2ggaTM4NiAtYXJjaCBwcGMiCisJCQlWX1BST0dfTERGTEFHU19GQVQ9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIgogCQkJOzsKIAogCQlkYXJ3aW4xMC4qKQogCQkJIwotCQkJIyBTbm93IExlb3BhcmQuICBCdWlsZCBmb3IgeDg2LTY0LCB4ODYsIGFuZAotCQkJIyAzMi1iaXQgUG93ZXJQQywgd2l0aCB4ODYtNjQgZmlyc3QuICAoVGhhdCdzCi0JCQkjIHdoYXQgQXBwbGUgZG9lcywgZXZlbiB0aG91Z2ggU25vdyBMZW9wYXJkCi0JCQkjIGRvZXNuJ3QgcnVuIG9uIFBQQywgc28gUFBDIGxpYnBjYXAgcnVucyB1bmRlcgotCQkJIyBSb3NldHRhLCBhbmQgUm9zZXR0YSBkb2Vzbid0IHN1cHBvcnQgQlBGCi0JCQkjIGlvY3Rscywgc28gUFBDIHByb2dyYW1zIGNhbid0IGRvIGxpdmUKLQkJCSMgY2FwdHVyZXMuKQorCQkJIyBTbm93IExlb3BhcmQuICBCdWlsZCBsaWJyYXJpZXMgZm9yIHg4Ni02NCwKKwkJCSMgMzItYml0IHg4NiwgYW5kIDMyLWJpdCBQb3dlclBDLCB3aXRoIHg4Ni02NAorCQkJIyBmaXJzdCwgYW5kIGJ1aWxkIGV4ZWN1dGFibGVzIGZvciB4ODYtNjQgYW5kCisJCQkjIDMyLWJpdCB4ODYsIHdpdGggeDg2LTY0IGZpcnN0LiAgKFRoYXQncyB3aGF0CisJCQkjIEFwcGxlIGRvZXMsIGV2ZW4gdGhvdWdoIFNub3cgTGVvcGFyZCBkb2Vzbid0CisJCQkjIHJ1biBvbiBQUEMsIHNvIFBQQyBsaWJwY2FwIHJ1bnMgdW5kZXIgUm9zZXR0YSwKKwkJCSMgYW5kIFJvc2V0dGEgZG9lc24ndCBzdXBwb3J0IEJQRiBpb2N0bHMsIHNvIFBQQworCQkJIyBwcm9ncmFtcyBjYW4ndCBkbyBsaXZlIGNhcHR1cmVzLikKIAkJCSMKLQkJCVZfQ0NPUFQ9IiRWX0NDT1BUIC1hcmNoIHg4Nl82NCAtYXJjaCBpMzg2IC1hcmNoIHBwYyIKLQkJCUxERkxBR1M9IiRMREZMQUdTIC1hcmNoIHg4Nl82NCAtYXJjaCBpMzg2IC1hcmNoIHBwYyIKKwkJCVZfTElCX0NDT1BUX0ZBVD0iLWFyY2ggeDg2XzY0IC1hcmNoIGkzODYgLWFyY2ggcHBjIgorCQkJVl9MSUJfTERGTEFHU19GQVQ9Ii1hcmNoIHg4Nl82NCAtYXJjaCBpMzg2IC1hcmNoIHBwYyIKKwkJCVZfUFJPR19DQ09QVF9GQVQ9Ii1hcmNoIHg4Nl82NCAtYXJjaCBpMzg2IgorCQkJVl9QUk9HX0xERkxBR1NfRkFUPSItYXJjaCB4ODZfNjQgLWFyY2ggaTM4NiIKIAkJCTs7CiAKIAkJZGFyd2luKikKIAkJCSMKLQkJCSMgUG9zdC1Tbm93IExlb3BhcmQuICBCdWlsZCBmb3IgeDg2LTY0IGFuZAotCQkJIyB4ODYsIHdpdGggeDg2LTY0IGZpcnN0LiAgKFRoYXQncyBwcm9iYWJseSB3aGF0Ci0JCQkjIEFwcGxlIGRvZXMsIGdpdmVuIHRoYXQgUm9zZXR0YSBpcyBnb25lLikKKwkJCSMgUG9zdC1Tbm93IExlb3BhcmQuICBCdWlsZCBsaWJyYXJpZXMgZm9yIHg4Ni02NAorCQkJIyBhbmQgMzItYml0IHg4Niwgd2l0aCB4ODYtNjQgZmlyc3QsIGFuZCBidWlsZAorCQkJIyBleGVjdXRhYmxlcyBvbmx5IGZvciB4ODYtNjQuICAoVGhhdCdzIHdoYXQKKwkJCSMgQXBwbGUgZG9lcy4pICBUaGlzIHJlcXVpcmVzIG5vIHNwZWNpYWwgZmxhZ3MKKwkJCSMgZm9yIHByb2dyYW1zLgogCQkJIyBYWFggLSB1cGRhdGUgaWYgYW5kIHdoZW4gQXBwbGUgZHJvcHMgc3VwcG9ydAotCQkJIyBmb3IgMzItYml0IHg4NiBjb2RlLgorCQkJIyBmb3IgMzItYml0IHg4NiBjb2RlIGFuZCBpZiBhbmQgd2hlbiBBcHBsZSBhZGRzCisJCQkjIEFSTS1iYXNlZCBNYWNzLiAgKFlvdSdyZSBvbiB5b3VyIG93biBmb3IgaU9TCisJCQkjIGV0Yy4pCiAJCQkjCi0JCQlWX0NDT1BUPSIkVl9DQ09QVCAtYXJjaCB4ODZfNjQgLWFyY2ggaTM4NiIKLQkJCUxERkxBR1M9IiRMREZMQUdTIC1hcmNoIHg4Nl82NCAtYXJjaCBpMzg2IgorCQkJIyBYWFggLSBjaGVjayB3aGV0aGVyIHdlICpjYW4qIGJ1aWxkIGZvcgorCQkJIyBpMzg2IGFuZCwgaWYgbm90LCBzdWdnZXN0IHRoYXQgdGhlIHVzZXIKKwkJCSMgaW5zdGFsbCB0aGUgL3Vzci9pbmNsdWRlIGhlYWRlcnMgaWYgdGhleQorCQkJIyB3YW50IHRvIGJ1aWxkIGZhdC4KKwkJCSMKKwkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBidWlsZGluZyBmb3IgMzItYml0IHg4NiBpcyBzdXBwb3J0ZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBidWlsZGluZyBmb3IgMzItYml0IHg4NiBpcyBzdXBwb3J0ZWQuLi4gIiA+JjY7IH0KKwkJCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCQkJQ0ZMQUdTPSIkQ0ZMQUdTIC1hcmNoIGkzODYiCisJCQljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworCQkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisJCQkJVl9MSUJfQ0NPUFRfRkFUPSItYXJjaCB4ODZfNjQiCisJCQkJVl9MSUJfTERGTEFHU19GQVQ9Ii1hcmNoIHg4Nl82NCIKKworCQkJCSMKKwkJCQkjIE9wZW5TU0wgaW5zdGFsbGF0aW9uIG9uIG1hY09TIHNlZW1zCisJCQkJIyB0byBpbnN0YWxsIG9ubHkgdGhlIGxpYnMgZm9yIDY0LWJpdAorCQkJCSMgeDg2IC0gYXQgbGVhc3QgdGhhdCdzIHdoYXQgQnJldyBkb2VzOgorCQkJCSMgb25seSBjb25maWd1cmUgMzItYml0IGJ1aWxkcyBpZiB3ZQorCQkJCSMgZG9uJ3QgaGF2ZSBPcGVuU1NMLgorCQkJCSMKKwkJCQlpZiB0ZXN0ICIkSEFWRV9PUEVOU1NMIiAhPSB5ZXM7IHRoZW4KKwkJCQkJVl9MSUJfQ0NPUFRfRkFUPSIkVl9MSUJfQ0NPUFRfRkFUIC1hcmNoIGkzODYiCisJCQkJCVZfTElCX0xERkxBR1NfRkFUPSIkVl9MSUJfTERGTEFHU19GQVQgLWFyY2ggaTM4NiIKKwkJCQlmaQorCitlbHNlCisKKwkJCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwkJCQlWX0xJQl9DQ09QVF9GQVQ9Ii1hcmNoIHg4Nl82NCIKKwkJCQlWX0xJQl9MREZMQUdTX0ZBVD0iLWFyY2ggeDg2XzY0IgorCQkJCWNhc2UgIiRob3N0X29zIiBpbgorCisJCQkJZGFyd2luMTguKikKKwkJCQkJIworCQkJCQkjIE1vamF2ZTsgeW91IG5lZWQgdG8gaW5zdGFsbCB0aGUKKwkJCQkJIyAvdXNyL2luY2x1ZGUgaGVhZGVycyB0byBnZXQKKwkJCQkJIyAzMi1iaXQgeDg2IGJ1aWxkcyB0byB3b3JrLgorCQkJCQkjCisJCQkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogQ29tcGlsaW5nIGZvciAzMi1iaXQgeDg2IGdpdmVzIGFuIGVycm9yOyB0cnkgaW5zdGFsbGluZyB0aGUgY29tbWFuZC1saW5lIHRvb2xzIGFuZCwgYWZ0ZXIgdGhhdCwgaW5zdGFsbGluZyB0aGUgL3Vzci9pbmNsdWRlIGhlYWRlcnMgZnJvbSB0aGUgL0xpYnJhcnkvRGV2ZWxvcGVyL0NvbW1hbmRMaW5lVG9vbHMvUGFja2FnZXMvbWFjT1NfU0RLX2hlYWRlcnNfZm9yX21hY09TXzEwLjE0LnBrZyBwYWNrYWdlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IENvbXBpbGluZyBmb3IgMzItYml0IHg4NiBnaXZlcyBhbiBlcnJvcjsgdHJ5IGluc3RhbGxpbmcgdGhlIGNvbW1hbmQtbGluZSB0b29scyBhbmQsIGFmdGVyIHRoYXQsIGluc3RhbGxpbmcgdGhlIC91c3IvaW5jbHVkZSBoZWFkZXJzIGZyb20gdGhlIC9MaWJyYXJ5L0RldmVsb3Blci9Db21tYW5kTGluZVRvb2xzL1BhY2thZ2VzL21hY09TX1NES19oZWFkZXJzX2Zvcl9tYWNPU18xMC4xNC5wa2cgcGFja2FnZSIgPiYyO30KKwkJCQkJOzsKKworCQkJCSopCisJCQkJCSMKKwkJCQkJIyBQcmUtTW9qYXZlOyB0aGUgY29tbWFuZC1saW5lCisJCQkJCSMgdG9vbHMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8KKwkJCQkJIyBlbmFibGUgMzItYml0IHg4NiBidWlsZHMuCisJCQkJCSMKKwkJCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBDb21waWxpbmcgZm9yIDMyLWJpdCB4ODYgZ2l2ZXMgYW4gZXJyb3I7IHRyeSBpbnN0YWxsaW5nIHRoZSBjb21tYW5kLWxpbmUgdG9vbHMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogQ29tcGlsaW5nIGZvciAzMi1iaXQgeDg2IGdpdmVzIGFuIGVycm9yOyB0cnkgaW5zdGFsbGluZyB0aGUgY29tbWFuZC1saW5lIHRvb2xzIiA+JjI7fQorCQkJCQk7OworCQkJCWVzYWMKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisJCQlDRkxBR1M9IiRzYXZlX0NGTEFHUyIKIAkJCTs7CiAJCWVzYWMKIAlmaQpAQCAtODE3OSw3ICs4OTQyLDcgQEAKIAlNQU5fTUlTQ19JTkZPPTUKIAk7OwogCi1saW51eCp8ZnJlZWJzZCp8bmV0YnNkKnxvcGVuYnNkKnxkcmFnb25mbHkqfGtmcmVlYnNkKnxnbnUqKQorbGludXgqfGZyZWVic2QqfG5ldGJzZCp8b3BlbmJzZCp8ZHJhZ29uZmx5KnxrZnJlZWJzZCp8Z251KnxoYWlrdSp8bWlkaXBpeCopCiAJRFlFWFQ9InNvIgogCiAJIwpAQCAtODIwMiw2ICs4OTY1LDcgQEAKIAkjCiAJTUFOX0ZJTEVfRk9STUFUUz00CiAJTUFOX01JU0NfSU5GTz01CisJTUFOX0RFVklDRVM9NwogCTs7CiAKIHNpbml4KikKQEAgLTgyNjcsNiArOTAzMSw3IEBACiAJCU1BTl9BRE1JTl9DT01NQU5EUz0xbQogCQlNQU5fRklMRV9GT1JNQVRTPTQKIAkJTUFOX01JU0NfSU5GTz01CisJCU1BTl9ERVZJQ0VTPTdECiAJZXNhYwogCTs7CiBlc2FjCkBAIC04NTIyLDYgKzkyODcsODggQEAKIAlDRkxBR1M9IiRzYXZlX0NGTEFHUyIKIAogCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVcgb3B0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtVyBvcHRpb24uLi4gIiA+JjY7IH0KKwlzYXZlX0NGTEFHUz0iJENGTEFHUyIKKwlpZiBleHByICJ4LVciIDogIngtVy4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgJGFjX2xibF91bmtub3duX3dhcm5pbmdfb3B0aW9uX2Vycm9yIC1XIgorCWVsaWYgZXhwciAieC1XIiA6ICJ4LWYuKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVciCisJZWxpZiBleHByICJ4LVciIDogIngtbS4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtVyIKKwllbHNlCisJICAgIENGTEFHUz0iJENGTEFHUyAtVyIKKwlmaQorCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CityZXR1cm4gMAorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKwkJY2FuX2FkZF90b19jZmxhZ3M9eWVzCisJCSMKKwkJIyBUaGUgY29tcGlsZSBzdXBwb3J0cyB0aGlzOyBkbyB3ZSBoYXZlIHNvbWUgQyBjb2RlIGZvcgorCQkjIHdoaWNoIHRoZSB3YXJuaW5nIHNob3VsZCAqbm90KiBhcHBlYXI/CisJCSMgV2UgdGVzdCB0aGUgZm91cnRoIGFyZ3VtZW50IGJlY2F1c2UgdGhlIHRoaXJkIGFyZ3VtZW50CisJCSMgY291bGQgY29udGFpbiBxdW90ZXMsIGJyZWFraW5nIHRoZSB0ZXN0LgorCQkjCisJCWlmIHRlc3QgIngiICE9ICJ4IgorCQl0aGVuCisJCSAgICBDRkxBR1M9IiRDRkxBR1MgJGFjX2xibF9jY19mb3JjZV93YXJuaW5nX2Vycm9ycyIKKwkJICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAtVyAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtVyAuLi4gIiA+JjY7IH0KKwkJICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKwkJCSMKKwkJCSMgTm90IGEgcHJvYmxlbS4KKwkJCSMKKwkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitlbHNlCisKKwkJCSMKKwkJCSMgQSBwcm9ibGVtLgorCQkJIworCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKwkJCWNhbl9hZGRfdG9fY2ZsYWdzPW5vCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwkJZmkKKwkJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisJCWlmIHRlc3QgeCIkY2FuX2FkZF90b19jZmxhZ3MiID0gInh5ZXMiCisJCXRoZW4KKwkJICAgIFZfQ0NPUFQ9IiRWX0NDT1BUIC1XIgorCQlmaQorCitlbHNlCisKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisJCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKKwogCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1XYWxsIG9wdGlvbiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVdhbGwgb3B0aW9uLi4uICIgPiY2OyB9CiAJc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCkBAIC04NjA0LDU4MCArOTQ1MSw2IEBACiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIAogCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVdzaWduLWNvbXBhcmUgb3B0aW9uIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV3NpZ24tY29tcGFyZSBvcHRpb24uLi4gIiA+JjY7IH0KLQlzYXZlX0NGTEFHUz0iJENGTEFHUyIKLQlpZiBleHByICJ4LVdzaWduLWNvbXBhcmUiIDogIngtVy4qIiA+L2Rldi9udWxsCi0JdGhlbgotCSAgICBDRkxBR1M9IiRDRkxBR1MgJGFjX2xibF91bmtub3duX3dhcm5pbmdfb3B0aW9uX2Vycm9yIC1Xc2lnbi1jb21wYXJlIgotCWVsaWYgZXhwciAieC1Xc2lnbi1jb21wYXJlIiA6ICJ4LWYuKiIgPi9kZXYvbnVsbAotCXRoZW4KLQkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdzaWduLWNvbXBhcmUiCi0JZWxpZiBleHByICJ4LVdzaWduLWNvbXBhcmUiIDogIngtbS4qIiA+L2Rldi9udWxsCi0JdGhlbgotCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV3NpZ24tY29tcGFyZSIKLQllbHNlCi0JICAgIENGTEFHUz0iJENGTEFHUyAtV3NpZ24tY29tcGFyZSIKLQlmaQotCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gMAotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQkJY2FuX2FkZF90b19jZmxhZ3M9eWVzCi0JCSMKLQkJIyBUaGUgY29tcGlsZSBzdXBwb3J0cyB0aGlzOyBkbyB3ZSBoYXZlIHNvbWUgQyBjb2RlIGZvcgotCQkjIHdoaWNoIHRoZSB3YXJuaW5nIHNob3VsZCAqbm90KiBhcHBlYXI/Ci0JCSMgV2UgdGVzdCB0aGUgZm91cnRoIGFyZ3VtZW50IGJlY2F1c2UgdGhlIHRoaXJkIGFyZ3VtZW50Ci0JCSMgY291bGQgY29udGFpbiBxdW90ZXMsIGJyZWFraW5nIHRoZSB0ZXN0LgotCQkjCi0JCWlmIHRlc3QgIngiICE9ICJ4IgotCQl0aGVuCi0JCSAgICBDRkxBR1M9IiRDRkxBR1MgJGFjX2xibF9jY19mb3JjZV93YXJuaW5nX2Vycm9ycyIKLQkJICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAtV3NpZ24tY29tcGFyZSAiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtV3NpZ24tY29tcGFyZSAuLi4gIiA+JjY7IH0KLQkJICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLQkJCSMKLQkJCSMgTm90IGEgcHJvYmxlbS4KLQkJCSMKLQkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi1lbHNlCi0KLQkJCSMKLQkJCSMgQSBwcm9ibGVtLgotCQkJIwotCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQkJCWNhbl9hZGRfdG9fY2ZsYWdzPW5vCi0KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQkJZmkKLQkJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCi0JCWlmIHRlc3QgeCIkY2FuX2FkZF90b19jZmxhZ3MiID0gInh5ZXMiCi0JCXRoZW4KLQkJICAgIFZfQ0NPUFQ9IiRWX0NDT1BUIC1Xc2lnbi1jb21wYXJlIgotCQlmaQotCi1lbHNlCi0KLQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0JCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgotCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1XbWlzc2luZy1wcm90b3R5cGVzIG9wdGlvbiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVdtaXNzaW5nLXByb3RvdHlwZXMgb3B0aW9uLi4uICIgPiY2OyB9Ci0Jc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0JaWYgZXhwciAieC1XbWlzc2luZy1wcm90b3R5cGVzIiA6ICJ4LVcuKiIgPi9kZXYvbnVsbAotCXRoZW4KLQkgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRhY19sYmxfdW5rbm93bl93YXJuaW5nX29wdGlvbl9lcnJvciAtV21pc3NpbmctcHJvdG90eXBlcyIKLQllbGlmIGV4cHIgIngtV21pc3NpbmctcHJvdG90eXBlcyIgOiAieC1mLioiID4vZGV2L251bGwKLQl0aGVuCi0JICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1XbWlzc2luZy1wcm90b3R5cGVzIgotCWVsaWYgZXhwciAieC1XbWlzc2luZy1wcm90b3R5cGVzIiA6ICJ4LW0uKiIgPi9kZXYvbnVsbAotCXRoZW4KLQkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdtaXNzaW5nLXByb3RvdHlwZXMiCi0JZWxzZQotCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdtaXNzaW5nLXByb3RvdHlwZXMiCi0JZmkKLQljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIDAKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotCi0JCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0JCWNhbl9hZGRfdG9fY2ZsYWdzPXllcwotCQkjCi0JCSMgVGhlIGNvbXBpbGUgc3VwcG9ydHMgdGhpczsgZG8gd2UgaGF2ZSBzb21lIEMgY29kZSBmb3IKLQkJIyB3aGljaCB0aGUgd2FybmluZyBzaG91bGQgKm5vdCogYXBwZWFyPwotCQkjIFdlIHRlc3QgdGhlIGZvdXJ0aCBhcmd1bWVudCBiZWNhdXNlIHRoZSB0aGlyZCBhcmd1bWVudAotCQkjIGNvdWxkIGNvbnRhaW4gcXVvdGVzLCBicmVha2luZyB0aGUgdGVzdC4KLQkJIwotCQlpZiB0ZXN0ICJ4IiAhPSAieCIKLQkJdGhlbgotCQkgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRhY19sYmxfY2NfZm9yY2Vfd2FybmluZ19lcnJvcnMiCi0JCSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgLVdtaXNzaW5nLXByb3RvdHlwZXMgIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLVdtaXNzaW5nLXByb3RvdHlwZXMgLi4uICIgPiY2OyB9Ci0JCSAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotCi0JCQkjCi0JCQkjIE5vdCBhIHByb2JsZW0uCi0JCQkjCi0JCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQotZWxzZQotCi0JCQkjCi0JCQkjIEEgcHJvYmxlbS4KLQkJCSMKLQkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0JCQljYW5fYWRkX3RvX2NmbGFncz1ubwotCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0JCWZpCi0JCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgotCQlpZiB0ZXN0IHgiJGNhbl9hZGRfdG9fY2ZsYWdzIiA9ICJ4eWVzIgotCQl0aGVuCi0JCSAgICBWX0NDT1BUPSIkVl9DQ09QVCAtV21pc3NpbmctcHJvdG90eXBlcyIKLQkJZmkKLQotZWxzZQotCi0JCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCQlDRkxBR1M9IiRzYXZlX0NGTEFHUyIKLQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV3N0cmljdC1wcm90b3R5cGVzIG9wdGlvbiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVdzdHJpY3QtcHJvdG90eXBlcyBvcHRpb24uLi4gIiA+JjY7IH0KLQlzYXZlX0NGTEFHUz0iJENGTEFHUyIKLQlpZiBleHByICJ4LVdzdHJpY3QtcHJvdG90eXBlcyIgOiAieC1XLioiID4vZGV2L251bGwKLQl0aGVuCi0JICAgIENGTEFHUz0iJENGTEFHUyAkYWNfbGJsX3Vua25vd25fd2FybmluZ19vcHRpb25fZXJyb3IgLVdzdHJpY3QtcHJvdG90eXBlcyIKLQllbGlmIGV4cHIgIngtV3N0cmljdC1wcm90b3R5cGVzIiA6ICJ4LWYuKiIgPi9kZXYvbnVsbAotCXRoZW4KLQkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdzdHJpY3QtcHJvdG90eXBlcyIKLQllbGlmIGV4cHIgIngtV3N0cmljdC1wcm90b3R5cGVzIiA6ICJ4LW0uKiIgPi9kZXYvbnVsbAotCXRoZW4KLQkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdzdHJpY3QtcHJvdG90eXBlcyIKLQllbHNlCi0JICAgIENGTEFHUz0iJENGTEFHUyAtV3N0cmljdC1wcm90b3R5cGVzIgotCWZpCi0JY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiAwCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLQotCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCQljYW5fYWRkX3RvX2NmbGFncz15ZXMKLQkJIwotCQkjIFRoZSBjb21waWxlIHN1cHBvcnRzIHRoaXM7IGRvIHdlIGhhdmUgc29tZSBDIGNvZGUgZm9yCi0JCSMgd2hpY2ggdGhlIHdhcm5pbmcgc2hvdWxkICpub3QqIGFwcGVhcj8KLQkJIyBXZSB0ZXN0IHRoZSBmb3VydGggYXJndW1lbnQgYmVjYXVzZSB0aGUgdGhpcmQgYXJndW1lbnQKLQkJIyBjb3VsZCBjb250YWluIHF1b3RlcywgYnJlYWtpbmcgdGhlIHRlc3QuCi0JCSMKLQkJaWYgdGVzdCAieCIgIT0gIngiCi0JCXRoZW4KLQkJICAgIENGTEFHUz0iJENGTEFHUyAkYWNfbGJsX2NjX2ZvcmNlX3dhcm5pbmdfZXJyb3JzIgotCQkgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1Xc3RyaWN0LXByb3RvdHlwZXMgIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLVdzdHJpY3QtcHJvdG90eXBlcyAuLi4gIiA+JjY7IH0KLQkJICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLQkJCSMKLQkJCSMgTm90IGEgcHJvYmxlbS4KLQkJCSMKLQkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi1lbHNlCi0KLQkJCSMKLQkJCSMgQSBwcm9ibGVtLgotCQkJIwotCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQkJCWNhbl9hZGRfdG9fY2ZsYWdzPW5vCi0KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQkJZmkKLQkJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCi0JCWlmIHRlc3QgeCIkY2FuX2FkZF90b19jZmxhZ3MiID0gInh5ZXMiCi0JCXRoZW4KLQkJICAgIFZfQ0NPUFQ9IiRWX0NDT1BUIC1Xc3RyaWN0LXByb3RvdHlwZXMiCi0JCWZpCi0KLWVsc2UKLQotCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQkJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCi0KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVdzaGFkb3cgb3B0aW9uIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV3NoYWRvdyBvcHRpb24uLi4gIiA+JjY7IH0KLQlzYXZlX0NGTEFHUz0iJENGTEFHUyIKLQlpZiBleHByICJ4LVdzaGFkb3ciIDogIngtVy4qIiA+L2Rldi9udWxsCi0JdGhlbgotCSAgICBDRkxBR1M9IiRDRkxBR1MgJGFjX2xibF91bmtub3duX3dhcm5pbmdfb3B0aW9uX2Vycm9yIC1Xc2hhZG93IgotCWVsaWYgZXhwciAieC1Xc2hhZG93IiA6ICJ4LWYuKiIgPi9kZXYvbnVsbAotCXRoZW4KLQkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdzaGFkb3ciCi0JZWxpZiBleHByICJ4LVdzaGFkb3ciIDogIngtbS4qIiA+L2Rldi9udWxsCi0JdGhlbgotCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV3NoYWRvdyIKLQllbHNlCi0JICAgIENGTEFHUz0iJENGTEFHUyAtV3NoYWRvdyIKLQlmaQotCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gMAotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQkJY2FuX2FkZF90b19jZmxhZ3M9eWVzCi0JCSMKLQkJIyBUaGUgY29tcGlsZSBzdXBwb3J0cyB0aGlzOyBkbyB3ZSBoYXZlIHNvbWUgQyBjb2RlIGZvcgotCQkjIHdoaWNoIHRoZSB3YXJuaW5nIHNob3VsZCAqbm90KiBhcHBlYXI/Ci0JCSMgV2UgdGVzdCB0aGUgZm91cnRoIGFyZ3VtZW50IGJlY2F1c2UgdGhlIHRoaXJkIGFyZ3VtZW50Ci0JCSMgY291bGQgY29udGFpbiBxdW90ZXMsIGJyZWFraW5nIHRoZSB0ZXN0LgotCQkjCi0JCWlmIHRlc3QgIngiICE9ICJ4IgotCQl0aGVuCi0JCSAgICBDRkxBR1M9IiRDRkxBR1MgJGFjX2xibF9jY19mb3JjZV93YXJuaW5nX2Vycm9ycyIKLQkJICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAtV3NoYWRvdyAiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtV3NoYWRvdyAuLi4gIiA+JjY7IH0KLQkJICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLQkJCSMKLQkJCSMgTm90IGEgcHJvYmxlbS4KLQkJCSMKLQkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi1lbHNlCi0KLQkJCSMKLQkJCSMgQSBwcm9ibGVtLgotCQkJIwotCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQkJCWNhbl9hZGRfdG9fY2ZsYWdzPW5vCi0KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQkJZmkKLQkJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCi0JCWlmIHRlc3QgeCIkY2FuX2FkZF90b19jZmxhZ3MiID0gInh5ZXMiCi0JCXRoZW4KLQkJICAgIFZfQ0NPUFQ9IiRWX0NDT1BUIC1Xc2hhZG93IgotCQlmaQotCi1lbHNlCi0KLQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0JCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgotCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IG9wdGlvbiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgb3B0aW9uLi4uICIgPiY2OyB9Ci0Jc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0JaWYgZXhwciAieC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IiA6ICJ4LVcuKiIgPi9kZXYvbnVsbAotCXRoZW4KLQkgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRhY19sYmxfdW5rbm93bl93YXJuaW5nX29wdGlvbl9lcnJvciAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKLQllbGlmIGV4cHIgIngtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIgOiAieC1mLioiID4vZGV2L251bGwKLQl0aGVuCi0JICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IgotCWVsaWYgZXhwciAieC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IiA6ICJ4LW0uKiIgPi9kZXYvbnVsbAotCXRoZW4KLQkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiCi0JZWxzZQotCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiCi0JZmkKLQljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIDAKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotCi0JCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0JCWNhbl9hZGRfdG9fY2ZsYWdzPXllcwotCQkjCi0JCSMgVGhlIGNvbXBpbGUgc3VwcG9ydHMgdGhpczsgZG8gd2UgaGF2ZSBzb21lIEMgY29kZSBmb3IKLQkJIyB3aGljaCB0aGUgd2FybmluZyBzaG91bGQgKm5vdCogYXBwZWFyPwotCQkjIFdlIHRlc3QgdGhlIGZvdXJ0aCBhcmd1bWVudCBiZWNhdXNlIHRoZSB0aGlyZCBhcmd1bWVudAotCQkjIGNvdWxkIGNvbnRhaW4gcXVvdGVzLCBicmVha2luZyB0aGUgdGVzdC4KLQkJIwotCQlpZiB0ZXN0ICJ4IiAhPSAieCIKLQkJdGhlbgotCQkgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRhY19sYmxfY2NfZm9yY2Vfd2FybmluZ19lcnJvcnMiCi0JCSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgLi4uICIgPiY2OyB9Ci0JCSAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotCi0JCQkjCi0JCQkjIE5vdCBhIHByb2JsZW0uCi0JCQkjCi0JCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQotZWxzZQotCi0JCQkjCi0JCQkjIEEgcHJvYmxlbS4KLQkJCSMKLQkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0JCQljYW5fYWRkX3RvX2NmbGFncz1ubwotCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0JCWZpCi0JCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgotCQlpZiB0ZXN0IHgiJGNhbl9hZGRfdG9fY2ZsYWdzIiA9ICJ4eWVzIgotCQl0aGVuCi0JCSAgICBWX0NDT1BUPSIkVl9DQ09QVCAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKLQkJZmkKLQotZWxzZQotCi0JCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCQlDRkxBR1M9IiRzYXZlX0NGTEFHUyIKLQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV3VzZWQtYnV0LW1hcmtlZC11bnVzZWQgb3B0aW9uIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV3VzZWQtYnV0LW1hcmtlZC11bnVzZWQgb3B0aW9uLi4uICIgPiY2OyB9Ci0Jc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0JaWYgZXhwciAieC1XdXNlZC1idXQtbWFya2VkLXVudXNlZCIgOiAieC1XLioiID4vZGV2L251bGwKLQl0aGVuCi0JICAgIENGTEFHUz0iJENGTEFHUyAkYWNfbGJsX3Vua25vd25fd2FybmluZ19vcHRpb25fZXJyb3IgLVd1c2VkLWJ1dC1tYXJrZWQtdW51c2VkIgotCWVsaWYgZXhwciAieC1XdXNlZC1idXQtbWFya2VkLXVudXNlZCIgOiAieC1mLioiID4vZGV2L251bGwKLQl0aGVuCi0JICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1XdXNlZC1idXQtbWFya2VkLXVudXNlZCIKLQllbGlmIGV4cHIgIngtV3VzZWQtYnV0LW1hcmtlZC11bnVzZWQiIDogIngtbS4qIiA+L2Rldi9udWxsCi0JdGhlbgotCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV3VzZWQtYnV0LW1hcmtlZC11bnVzZWQiCi0JZWxzZQotCSAgICBDRkxBR1M9IiRDRkxBR1MgLVd1c2VkLWJ1dC1tYXJrZWQtdW51c2VkIgotCWZpCi0JY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiAwCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLQotCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCQljYW5fYWRkX3RvX2NmbGFncz15ZXMKLQkJIwotCQkjIFRoZSBjb21waWxlIHN1cHBvcnRzIHRoaXM7IGRvIHdlIGhhdmUgc29tZSBDIGNvZGUgZm9yCi0JCSMgd2hpY2ggdGhlIHdhcm5pbmcgc2hvdWxkICpub3QqIGFwcGVhcj8KLQkJIyBXZSB0ZXN0IHRoZSBmb3VydGggYXJndW1lbnQgYmVjYXVzZSB0aGUgdGhpcmQgYXJndW1lbnQKLQkJIyBjb3VsZCBjb250YWluIHF1b3RlcywgYnJlYWtpbmcgdGhlIHRlc3QuCi0JCSMKLQkJaWYgdGVzdCAieCIgIT0gIngiCi0JCXRoZW4KLQkJICAgIENGTEFHUz0iJENGTEFHUyAkYWNfbGJsX2NjX2ZvcmNlX3dhcm5pbmdfZXJyb3JzIgotCQkgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1XdXNlZC1idXQtbWFya2VkLXVudXNlZCAiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtV3VzZWQtYnV0LW1hcmtlZC11bnVzZWQgLi4uICIgPiY2OyB9Ci0JCSAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotCi0JCQkjCi0JCQkjIE5vdCBhIHByb2JsZW0uCi0JCQkjCi0JCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQotZWxzZQotCi0JCQkjCi0JCQkjIEEgcHJvYmxlbS4KLQkJCSMKLQkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0JCQljYW5fYWRkX3RvX2NmbGFncz1ubwotCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0JCWZpCi0JCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgotCQlpZiB0ZXN0IHgiJGNhbl9hZGRfdG9fY2ZsYWdzIiA9ICJ4eWVzIgotCQl0aGVuCi0JCSAgICBWX0NDT1BUPSIkVl9DQ09QVCAtV3VzZWQtYnV0LW1hcmtlZC11bnVzZWQiCi0JCWZpCi0KLWVsc2UKLQotCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQkJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCi0KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVdkb2N1bWVudGF0aW9uIG9wdGlvbiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVdkb2N1bWVudGF0aW9uIG9wdGlvbi4uLiAiID4mNjsgfQotCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotCWlmIGV4cHIgIngtV2RvY3VtZW50YXRpb24iIDogIngtVy4qIiA+L2Rldi9udWxsCi0JdGhlbgotCSAgICBDRkxBR1M9IiRDRkxBR1MgJGFjX2xibF91bmtub3duX3dhcm5pbmdfb3B0aW9uX2Vycm9yIC1XZG9jdW1lbnRhdGlvbiIKLQllbGlmIGV4cHIgIngtV2RvY3VtZW50YXRpb24iIDogIngtZi4qIiA+L2Rldi9udWxsCi0JdGhlbgotCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV2RvY3VtZW50YXRpb24iCi0JZWxpZiBleHByICJ4LVdkb2N1bWVudGF0aW9uIiA6ICJ4LW0uKiIgPi9kZXYvbnVsbAotCXRoZW4KLQkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdkb2N1bWVudGF0aW9uIgotCWVsc2UKLQkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZG9jdW1lbnRhdGlvbiIKLQlmaQotCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gMAotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQkJY2FuX2FkZF90b19jZmxhZ3M9eWVzCi0JCSMKLQkJIyBUaGUgY29tcGlsZSBzdXBwb3J0cyB0aGlzOyBkbyB3ZSBoYXZlIHNvbWUgQyBjb2RlIGZvcgotCQkjIHdoaWNoIHRoZSB3YXJuaW5nIHNob3VsZCAqbm90KiBhcHBlYXI/Ci0JCSMgV2UgdGVzdCB0aGUgZm91cnRoIGFyZ3VtZW50IGJlY2F1c2UgdGhlIHRoaXJkIGFyZ3VtZW50Ci0JCSMgY291bGQgY29udGFpbiBxdW90ZXMsIGJyZWFraW5nIHRoZSB0ZXN0LgotCQkjCi0JCWlmIHRlc3QgIngiICE9ICJ4IgotCQl0aGVuCi0JCSAgICBDRkxBR1M9IiRDRkxBR1MgJGFjX2xibF9jY19mb3JjZV93YXJuaW5nX2Vycm9ycyIKLQkJICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAtV2RvY3VtZW50YXRpb24gIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLVdkb2N1bWVudGF0aW9uIC4uLiAiID4mNjsgfQotCQkgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLQotCQkJIwotCQkJIyBOb3QgYSBwcm9ibGVtLgotCQkJIwotCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0KLWVsc2UKLQotCQkJIwotCQkJIyBBIHByb2JsZW0uCi0JCQkjCi0JCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCQkJY2FuX2FkZF90b19jZmxhZ3M9bm8KLQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCQlmaQotCQlDRkxBR1M9IiRzYXZlX0NGTEFHUyIKLQkJaWYgdGVzdCB4IiRjYW5fYWRkX3RvX2NmbGFncyIgPSAieHllcyIKLQkJdGhlbgotCQkgICAgVl9DQ09QVD0iJFZfQ0NPUFQgLVdkb2N1bWVudGF0aW9uIgotCQlmaQotCi1lbHNlCi0KLQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0JCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgotCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLQogCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1XY29tbWEgb3B0aW9uIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV2NvbW1hIG9wdGlvbi4uLiAiID4mNjsgfQogCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgpAQCAtOTI2MCw2ICs5NTMzLDE3MCBAQAogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiAKIAorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1XZG9jdW1lbnRhdGlvbiBvcHRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1XZG9jdW1lbnRhdGlvbiBvcHRpb24uLi4gIiA+JjY7IH0KKwlzYXZlX0NGTEFHUz0iJENGTEFHUyIKKwlpZiBleHByICJ4LVdkb2N1bWVudGF0aW9uIiA6ICJ4LVcuKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRhY19sYmxfdW5rbm93bl93YXJuaW5nX29wdGlvbl9lcnJvciAtV2RvY3VtZW50YXRpb24iCisJZWxpZiBleHByICJ4LVdkb2N1bWVudGF0aW9uIiA6ICJ4LWYuKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdkb2N1bWVudGF0aW9uIgorCWVsaWYgZXhwciAieC1XZG9jdW1lbnRhdGlvbiIgOiAieC1tLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1XZG9jdW1lbnRhdGlvbiIKKwllbHNlCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2RvY3VtZW50YXRpb24iCisJZmkKKwljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIDAKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisJCWNhbl9hZGRfdG9fY2ZsYWdzPXllcworCQkjCisJCSMgVGhlIGNvbXBpbGUgc3VwcG9ydHMgdGhpczsgZG8gd2UgaGF2ZSBzb21lIEMgY29kZSBmb3IKKwkJIyB3aGljaCB0aGUgd2FybmluZyBzaG91bGQgKm5vdCogYXBwZWFyPworCQkjIFdlIHRlc3QgdGhlIGZvdXJ0aCBhcmd1bWVudCBiZWNhdXNlIHRoZSB0aGlyZCBhcmd1bWVudAorCQkjIGNvdWxkIGNvbnRhaW4gcXVvdGVzLCBicmVha2luZyB0aGUgdGVzdC4KKwkJIworCQlpZiB0ZXN0ICJ4IiAhPSAieCIKKwkJdGhlbgorCQkgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRhY19sYmxfY2NfZm9yY2Vfd2FybmluZ19lcnJvcnMiCisJCSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgLVdkb2N1bWVudGF0aW9uICIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC1XZG9jdW1lbnRhdGlvbiAuLi4gIiA+JjY7IH0KKwkJICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKwkJCSMKKwkJCSMgTm90IGEgcHJvYmxlbS4KKwkJCSMKKwkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitlbHNlCisKKwkJCSMKKwkJCSMgQSBwcm9ibGVtLgorCQkJIworCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKwkJCWNhbl9hZGRfdG9fY2ZsYWdzPW5vCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwkJZmkKKwkJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisJCWlmIHRlc3QgeCIkY2FuX2FkZF90b19jZmxhZ3MiID0gInh5ZXMiCisJCXRoZW4KKwkJICAgIFZfQ0NPUFQ9IiRWX0NDT1BUIC1XZG9jdW1lbnRhdGlvbiIKKwkJZmkKKworZWxzZQorCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCQlDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV2Zvcm1hdC1ub25saXRlcmFsIG9wdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVdmb3JtYXQtbm9ubGl0ZXJhbCBvcHRpb24uLi4gIiA+JjY7IH0KKwlzYXZlX0NGTEFHUz0iJENGTEFHUyIKKwlpZiBleHByICJ4LVdmb3JtYXQtbm9ubGl0ZXJhbCIgOiAieC1XLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAkYWNfbGJsX3Vua25vd25fd2FybmluZ19vcHRpb25fZXJyb3IgLVdmb3JtYXQtbm9ubGl0ZXJhbCIKKwllbGlmIGV4cHIgIngtV2Zvcm1hdC1ub25saXRlcmFsIiA6ICJ4LWYuKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdmb3JtYXQtbm9ubGl0ZXJhbCIKKwllbGlmIGV4cHIgIngtV2Zvcm1hdC1ub25saXRlcmFsIiA6ICJ4LW0uKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdmb3JtYXQtbm9ubGl0ZXJhbCIKKwllbHNlCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2Zvcm1hdC1ub25saXRlcmFsIgorCWZpCisJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAwCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCQljYW5fYWRkX3RvX2NmbGFncz15ZXMKKwkJIworCQkjIFRoZSBjb21waWxlIHN1cHBvcnRzIHRoaXM7IGRvIHdlIGhhdmUgc29tZSBDIGNvZGUgZm9yCisJCSMgd2hpY2ggdGhlIHdhcm5pbmcgc2hvdWxkICpub3QqIGFwcGVhcj8KKwkJIyBXZSB0ZXN0IHRoZSBmb3VydGggYXJndW1lbnQgYmVjYXVzZSB0aGUgdGhpcmQgYXJndW1lbnQKKwkJIyBjb3VsZCBjb250YWluIHF1b3RlcywgYnJlYWtpbmcgdGhlIHRlc3QuCisJCSMKKwkJaWYgdGVzdCAieCIgIT0gIngiCisJCXRoZW4KKwkJICAgIENGTEFHUz0iJENGTEFHUyAkYWNfbGJsX2NjX2ZvcmNlX3dhcm5pbmdfZXJyb3JzIgorCQkgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1XZm9ybWF0LW5vbmxpdGVyYWwgIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLVdmb3JtYXQtbm9ubGl0ZXJhbCAuLi4gIiA+JjY7IH0KKwkJICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKwkJCSMKKwkJCSMgTm90IGEgcHJvYmxlbS4KKwkJCSMKKwkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitlbHNlCisKKwkJCSMKKwkJCSMgQSBwcm9ibGVtLgorCQkJIworCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKwkJCWNhbl9hZGRfdG9fY2ZsYWdzPW5vCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwkJZmkKKwkJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisJCWlmIHRlc3QgeCIkY2FuX2FkZF90b19jZmxhZ3MiID0gInh5ZXMiCisJCXRoZW4KKwkJICAgIFZfQ0NPUFQ9IiRWX0NDT1BUIC1XZm9ybWF0LW5vbmxpdGVyYWwiCisJCWZpCisKK2Vsc2UKKworCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwkJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworCiAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVdtaXNzaW5nLW5vcmV0dXJuIG9wdGlvbiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVdtaXNzaW5nLW5vcmV0dXJuIG9wdGlvbi4uLiAiID4mNjsgfQogCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgpAQCAtOTM0MSw5ICs5Nzc4LDg4IEBACiBmaQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiAKLQkJICAgICMgV2FybnMgYWJvdXQgc2FmZWd1YXJkcyBhZGRlZCBpbiBjYXNlIHRoZSBlbnVtcyBhcmUKLQkJICAgICMgZXh0ZW5kZWQKLQkJICAgICMgQUNfTEJMX0NIRUNLX0NPTVBJTEVSX09QVChWX0NDT1BULCAtV2NvdmVyZWQtc3dpdGNoLWRlZmF1bHQpCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV21pc3NpbmctcHJvdG90eXBlcyBvcHRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1XbWlzc2luZy1wcm90b3R5cGVzIG9wdGlvbi4uLiAiID4mNjsgfQorCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCWlmIGV4cHIgIngtV21pc3NpbmctcHJvdG90eXBlcyIgOiAieC1XLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAkYWNfbGJsX3Vua25vd25fd2FybmluZ19vcHRpb25fZXJyb3IgLVdtaXNzaW5nLXByb3RvdHlwZXMiCisJZWxpZiBleHByICJ4LVdtaXNzaW5nLXByb3RvdHlwZXMiIDogIngtZi4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV21pc3NpbmctcHJvdG90eXBlcyIKKwllbGlmIGV4cHIgIngtV21pc3NpbmctcHJvdG90eXBlcyIgOiAieC1tLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1XbWlzc2luZy1wcm90b3R5cGVzIgorCWVsc2UKKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XbWlzc2luZy1wcm90b3R5cGVzIgorCWZpCisJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAwCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCQljYW5fYWRkX3RvX2NmbGFncz15ZXMKKwkJIworCQkjIFRoZSBjb21waWxlIHN1cHBvcnRzIHRoaXM7IGRvIHdlIGhhdmUgc29tZSBDIGNvZGUgZm9yCisJCSMgd2hpY2ggdGhlIHdhcm5pbmcgc2hvdWxkICpub3QqIGFwcGVhcj8KKwkJIyBXZSB0ZXN0IHRoZSBmb3VydGggYXJndW1lbnQgYmVjYXVzZSB0aGUgdGhpcmQgYXJndW1lbnQKKwkJIyBjb3VsZCBjb250YWluIHF1b3RlcywgYnJlYWtpbmcgdGhlIHRlc3QuCisJCSMKKwkJaWYgdGVzdCAieCIgIT0gIngiCisJCXRoZW4KKwkJICAgIENGTEFHUz0iJENGTEFHUyAkYWNfbGJsX2NjX2ZvcmNlX3dhcm5pbmdfZXJyb3JzIgorCQkgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1XbWlzc2luZy1wcm90b3R5cGVzICIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC1XbWlzc2luZy1wcm90b3R5cGVzIC4uLiAiID4mNjsgfQorCQkgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworCQkJIworCQkJIyBOb3QgYSBwcm9ibGVtLgorCQkJIworCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKK2Vsc2UKKworCQkJIworCQkJIyBBIHByb2JsZW0uCisJCQkjCisJCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCQkJY2FuX2FkZF90b19jZmxhZ3M9bm8KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQlmaQorCQlDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKwkJaWYgdGVzdCB4IiRjYW5fYWRkX3RvX2NmbGFncyIgPSAieHllcyIKKwkJdGhlbgorCQkgICAgVl9DQ09QVD0iJFZfQ0NPUFQgLVdtaXNzaW5nLXByb3RvdHlwZXMiCisJCWZpCisKK2Vsc2UKKworCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwkJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwogCiAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVdtaXNzaW5nLXZhcmlhYmxlLWRlY2xhcmF0aW9ucyBvcHRpb24iID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1XbWlzc2luZy12YXJpYWJsZS1kZWNsYXJhdGlvbnMgb3B0aW9uLi4uICIgPiY2OyB9CkBAIC05NDI3LDYgKzk5NDMsNDE2IEBACiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIAogCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVdwb2ludGVyLWFyaXRoIG9wdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVdwb2ludGVyLWFyaXRoIG9wdGlvbi4uLiAiID4mNjsgfQorCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCWlmIGV4cHIgIngtV3BvaW50ZXItYXJpdGgiIDogIngtVy4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgJGFjX2xibF91bmtub3duX3dhcm5pbmdfb3B0aW9uX2Vycm9yIC1XcG9pbnRlci1hcml0aCIKKwllbGlmIGV4cHIgIngtV3BvaW50ZXItYXJpdGgiIDogIngtZi4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV3BvaW50ZXItYXJpdGgiCisJZWxpZiBleHByICJ4LVdwb2ludGVyLWFyaXRoIiA6ICJ4LW0uKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdwb2ludGVyLWFyaXRoIgorCWVsc2UKKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XcG9pbnRlci1hcml0aCIKKwlmaQorCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CityZXR1cm4gMAorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKwkJY2FuX2FkZF90b19jZmxhZ3M9eWVzCisJCSMKKwkJIyBUaGUgY29tcGlsZSBzdXBwb3J0cyB0aGlzOyBkbyB3ZSBoYXZlIHNvbWUgQyBjb2RlIGZvcgorCQkjIHdoaWNoIHRoZSB3YXJuaW5nIHNob3VsZCAqbm90KiBhcHBlYXI/CisJCSMgV2UgdGVzdCB0aGUgZm91cnRoIGFyZ3VtZW50IGJlY2F1c2UgdGhlIHRoaXJkIGFyZ3VtZW50CisJCSMgY291bGQgY29udGFpbiBxdW90ZXMsIGJyZWFraW5nIHRoZSB0ZXN0LgorCQkjCisJCWlmIHRlc3QgIngiICE9ICJ4IgorCQl0aGVuCisJCSAgICBDRkxBR1M9IiRDRkxBR1MgJGFjX2xibF9jY19mb3JjZV93YXJuaW5nX2Vycm9ycyIKKwkJICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAtV3BvaW50ZXItYXJpdGggIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLVdwb2ludGVyLWFyaXRoIC4uLiAiID4mNjsgfQorCQkgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworCQkJIworCQkJIyBOb3QgYSBwcm9ibGVtLgorCQkJIworCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKK2Vsc2UKKworCQkJIworCQkJIyBBIHByb2JsZW0uCisJCQkjCisJCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCQkJY2FuX2FkZF90b19jZmxhZ3M9bm8KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQlmaQorCQlDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKwkJaWYgdGVzdCB4IiRjYW5fYWRkX3RvX2NmbGFncyIgPSAieHllcyIKKwkJdGhlbgorCQkgICAgVl9DQ09QVD0iJFZfQ0NPUFQgLVdwb2ludGVyLWFyaXRoIgorCQlmaQorCitlbHNlCisKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisJCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKKworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1XcG9pbnRlci1zaWduIG9wdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVdwb2ludGVyLXNpZ24gb3B0aW9uLi4uICIgPiY2OyB9CisJc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJaWYgZXhwciAieC1XcG9pbnRlci1zaWduIiA6ICJ4LVcuKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRhY19sYmxfdW5rbm93bl93YXJuaW5nX29wdGlvbl9lcnJvciAtV3BvaW50ZXItc2lnbiIKKwllbGlmIGV4cHIgIngtV3BvaW50ZXItc2lnbiIgOiAieC1mLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1XcG9pbnRlci1zaWduIgorCWVsaWYgZXhwciAieC1XcG9pbnRlci1zaWduIiA6ICJ4LW0uKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdwb2ludGVyLXNpZ24iCisJZWxzZQorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdwb2ludGVyLXNpZ24iCisJZmkKKwljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIDAKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisJCWNhbl9hZGRfdG9fY2ZsYWdzPXllcworCQkjCisJCSMgVGhlIGNvbXBpbGUgc3VwcG9ydHMgdGhpczsgZG8gd2UgaGF2ZSBzb21lIEMgY29kZSBmb3IKKwkJIyB3aGljaCB0aGUgd2FybmluZyBzaG91bGQgKm5vdCogYXBwZWFyPworCQkjIFdlIHRlc3QgdGhlIGZvdXJ0aCBhcmd1bWVudCBiZWNhdXNlIHRoZSB0aGlyZCBhcmd1bWVudAorCQkjIGNvdWxkIGNvbnRhaW4gcXVvdGVzLCBicmVha2luZyB0aGUgdGVzdC4KKwkJIworCQlpZiB0ZXN0ICJ4IiAhPSAieCIKKwkJdGhlbgorCQkgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRhY19sYmxfY2NfZm9yY2Vfd2FybmluZ19lcnJvcnMiCisJCSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgLVdwb2ludGVyLXNpZ24gIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLVdwb2ludGVyLXNpZ24gLi4uICIgPiY2OyB9CisJCSAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisJCQkjCisJCQkjIE5vdCBhIHByb2JsZW0uCisJCQkjCisJCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworZWxzZQorCisJCQkjCisJCQkjIEEgcHJvYmxlbS4KKwkJCSMKKwkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisJCQljYW5fYWRkX3RvX2NmbGFncz1ubworCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisJCWZpCisJCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCQlpZiB0ZXN0IHgiJGNhbl9hZGRfdG9fY2ZsYWdzIiA9ICJ4eWVzIgorCQl0aGVuCisJCSAgICBWX0NDT1BUPSIkVl9DQ09QVCAtV3BvaW50ZXItc2lnbiIKKwkJZmkKKworZWxzZQorCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCQlDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV3NoYWRvdyBvcHRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1Xc2hhZG93IG9wdGlvbi4uLiAiID4mNjsgfQorCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCWlmIGV4cHIgIngtV3NoYWRvdyIgOiAieC1XLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAkYWNfbGJsX3Vua25vd25fd2FybmluZ19vcHRpb25fZXJyb3IgLVdzaGFkb3ciCisJZWxpZiBleHByICJ4LVdzaGFkb3ciIDogIngtZi4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV3NoYWRvdyIKKwllbGlmIGV4cHIgIngtV3NoYWRvdyIgOiAieC1tLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1Xc2hhZG93IgorCWVsc2UKKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1Xc2hhZG93IgorCWZpCisJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAwCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCQljYW5fYWRkX3RvX2NmbGFncz15ZXMKKwkJIworCQkjIFRoZSBjb21waWxlIHN1cHBvcnRzIHRoaXM7IGRvIHdlIGhhdmUgc29tZSBDIGNvZGUgZm9yCisJCSMgd2hpY2ggdGhlIHdhcm5pbmcgc2hvdWxkICpub3QqIGFwcGVhcj8KKwkJIyBXZSB0ZXN0IHRoZSBmb3VydGggYXJndW1lbnQgYmVjYXVzZSB0aGUgdGhpcmQgYXJndW1lbnQKKwkJIyBjb3VsZCBjb250YWluIHF1b3RlcywgYnJlYWtpbmcgdGhlIHRlc3QuCisJCSMKKwkJaWYgdGVzdCAieCIgIT0gIngiCisJCXRoZW4KKwkJICAgIENGTEFHUz0iJENGTEFHUyAkYWNfbGJsX2NjX2ZvcmNlX3dhcm5pbmdfZXJyb3JzIgorCQkgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1Xc2hhZG93ICIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC1Xc2hhZG93IC4uLiAiID4mNjsgfQorCQkgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworCQkJIworCQkJIyBOb3QgYSBwcm9ibGVtLgorCQkJIworCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKK2Vsc2UKKworCQkJIworCQkJIyBBIHByb2JsZW0uCisJCQkjCisJCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCQkJY2FuX2FkZF90b19jZmxhZ3M9bm8KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQlmaQorCQlDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKwkJaWYgdGVzdCB4IiRjYW5fYWRkX3RvX2NmbGFncyIgPSAieHllcyIKKwkJdGhlbgorCQkgICAgVl9DQ09QVD0iJFZfQ0NPUFQgLVdzaGFkb3ciCisJCWZpCisKK2Vsc2UKKworCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwkJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVdzaWduLWNvbXBhcmUgb3B0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV3NpZ24tY29tcGFyZSBvcHRpb24uLi4gIiA+JjY7IH0KKwlzYXZlX0NGTEFHUz0iJENGTEFHUyIKKwlpZiBleHByICJ4LVdzaWduLWNvbXBhcmUiIDogIngtVy4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgJGFjX2xibF91bmtub3duX3dhcm5pbmdfb3B0aW9uX2Vycm9yIC1Xc2lnbi1jb21wYXJlIgorCWVsaWYgZXhwciAieC1Xc2lnbi1jb21wYXJlIiA6ICJ4LWYuKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdzaWduLWNvbXBhcmUiCisJZWxpZiBleHByICJ4LVdzaWduLWNvbXBhcmUiIDogIngtbS4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV3NpZ24tY29tcGFyZSIKKwllbHNlCisJICAgIENGTEFHUz0iJENGTEFHUyAtV3NpZ24tY29tcGFyZSIKKwlmaQorCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CityZXR1cm4gMAorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKwkJY2FuX2FkZF90b19jZmxhZ3M9eWVzCisJCSMKKwkJIyBUaGUgY29tcGlsZSBzdXBwb3J0cyB0aGlzOyBkbyB3ZSBoYXZlIHNvbWUgQyBjb2RlIGZvcgorCQkjIHdoaWNoIHRoZSB3YXJuaW5nIHNob3VsZCAqbm90KiBhcHBlYXI/CisJCSMgV2UgdGVzdCB0aGUgZm91cnRoIGFyZ3VtZW50IGJlY2F1c2UgdGhlIHRoaXJkIGFyZ3VtZW50CisJCSMgY291bGQgY29udGFpbiBxdW90ZXMsIGJyZWFraW5nIHRoZSB0ZXN0LgorCQkjCisJCWlmIHRlc3QgIngiICE9ICJ4IgorCQl0aGVuCisJCSAgICBDRkxBR1M9IiRDRkxBR1MgJGFjX2xibF9jY19mb3JjZV93YXJuaW5nX2Vycm9ycyIKKwkJICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAtV3NpZ24tY29tcGFyZSAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtV3NpZ24tY29tcGFyZSAuLi4gIiA+JjY7IH0KKwkJICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKwkJCSMKKwkJCSMgTm90IGEgcHJvYmxlbS4KKwkJCSMKKwkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCitlbHNlCisKKwkJCSMKKwkJCSMgQSBwcm9ibGVtLgorCQkJIworCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKwkJCWNhbl9hZGRfdG9fY2ZsYWdzPW5vCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwkJZmkKKwkJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisJCWlmIHRlc3QgeCIkY2FuX2FkZF90b19jZmxhZ3MiID0gInh5ZXMiCisJCXRoZW4KKwkJICAgIFZfQ0NPUFQ9IiRWX0NDT1BUIC1Xc2lnbi1jb21wYXJlIgorCQlmaQorCitlbHNlCisKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisJCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKKworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1Xc3RyaWN0LXByb3RvdHlwZXMgb3B0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV3N0cmljdC1wcm90b3R5cGVzIG9wdGlvbi4uLiAiID4mNjsgfQorCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCWlmIGV4cHIgIngtV3N0cmljdC1wcm90b3R5cGVzIiA6ICJ4LVcuKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRhY19sYmxfdW5rbm93bl93YXJuaW5nX29wdGlvbl9lcnJvciAtV3N0cmljdC1wcm90b3R5cGVzIgorCWVsaWYgZXhwciAieC1Xc3RyaWN0LXByb3RvdHlwZXMiIDogIngtZi4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV3N0cmljdC1wcm90b3R5cGVzIgorCWVsaWYgZXhwciAieC1Xc3RyaWN0LXByb3RvdHlwZXMiIDogIngtbS4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV3N0cmljdC1wcm90b3R5cGVzIgorCWVsc2UKKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1Xc3RyaWN0LXByb3RvdHlwZXMiCisJZmkKKwljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIDAKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisJCWNhbl9hZGRfdG9fY2ZsYWdzPXllcworCQkjCisJCSMgVGhlIGNvbXBpbGUgc3VwcG9ydHMgdGhpczsgZG8gd2UgaGF2ZSBzb21lIEMgY29kZSBmb3IKKwkJIyB3aGljaCB0aGUgd2FybmluZyBzaG91bGQgKm5vdCogYXBwZWFyPworCQkjIFdlIHRlc3QgdGhlIGZvdXJ0aCBhcmd1bWVudCBiZWNhdXNlIHRoZSB0aGlyZCBhcmd1bWVudAorCQkjIGNvdWxkIGNvbnRhaW4gcXVvdGVzLCBicmVha2luZyB0aGUgdGVzdC4KKwkJIworCQlpZiB0ZXN0ICJ4IiAhPSAieCIKKwkJdGhlbgorCQkgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRhY19sYmxfY2NfZm9yY2Vfd2FybmluZ19lcnJvcnMiCisJCSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgLVdzdHJpY3QtcHJvdG90eXBlcyAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtV3N0cmljdC1wcm90b3R5cGVzIC4uLiAiID4mNjsgfQorCQkgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworCQkJIworCQkJIyBOb3QgYSBwcm9ibGVtLgorCQkJIworCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisKK2Vsc2UKKworCQkJIworCQkJIyBBIHByb2JsZW0uCisJCQkjCisJCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCQkJY2FuX2FkZF90b19jZmxhZ3M9bm8KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQlmaQorCQlDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKwkJaWYgdGVzdCB4IiRjYW5fYWRkX3RvX2NmbGFncyIgPSAieHllcyIKKwkJdGhlbgorCQkgICAgVl9DQ09QVD0iJFZfQ0NPUFQgLVdzdHJpY3QtcHJvdG90eXBlcyIKKwkJZmkKKworZWxzZQorCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCQlDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCisKIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV3VudXNlZC1wYXJhbWV0ZXIgb3B0aW9uIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV3VudXNlZC1wYXJhbWV0ZXIgb3B0aW9uLi4uICIgPiY2OyB9CiAJc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCkBAIC05NTA5LDIwICsxMDQzNSwyMCBAQAogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiAKIAotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1XZm9ybWF0LW5vbmxpdGVyYWwgb3B0aW9uIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV2Zvcm1hdC1ub25saXRlcmFsIG9wdGlvbi4uLiAiID4mNjsgfQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1XdXNlZC1idXQtbWFya2VkLXVudXNlZCBvcHRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1XdXNlZC1idXQtbWFya2VkLXVudXNlZCBvcHRpb24uLi4gIiA+JjY7IH0KIAlzYXZlX0NGTEFHUz0iJENGTEFHUyIKLQlpZiBleHByICJ4LVdmb3JtYXQtbm9ubGl0ZXJhbCIgOiAieC1XLioiID4vZGV2L251bGwKKwlpZiBleHByICJ4LVd1c2VkLWJ1dC1tYXJrZWQtdW51c2VkIiA6ICJ4LVcuKiIgPi9kZXYvbnVsbAogCXRoZW4KLQkgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRhY19sYmxfdW5rbm93bl93YXJuaW5nX29wdGlvbl9lcnJvciAtV2Zvcm1hdC1ub25saXRlcmFsIgotCWVsaWYgZXhwciAieC1XZm9ybWF0LW5vbmxpdGVyYWwiIDogIngtZi4qIiA+L2Rldi9udWxsCisJICAgIENGTEFHUz0iJENGTEFHUyAkYWNfbGJsX3Vua25vd25fd2FybmluZ19vcHRpb25fZXJyb3IgLVd1c2VkLWJ1dC1tYXJrZWQtdW51c2VkIgorCWVsaWYgZXhwciAieC1XdXNlZC1idXQtbWFya2VkLXVudXNlZCIgOiAieC1mLioiID4vZGV2L251bGwKIAl0aGVuCi0JICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1XZm9ybWF0LW5vbmxpdGVyYWwiCi0JZWxpZiBleHByICJ4LVdmb3JtYXQtbm9ubGl0ZXJhbCIgOiAieC1tLioiID4vZGV2L251bGwKKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVd1c2VkLWJ1dC1tYXJrZWQtdW51c2VkIgorCWVsaWYgZXhwciAieC1XdXNlZC1idXQtbWFya2VkLXVudXNlZCIgOiAieC1tLioiID4vZGV2L251bGwKIAl0aGVuCi0JICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1XZm9ybWF0LW5vbmxpdGVyYWwiCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1XdXNlZC1idXQtbWFya2VkLXVudXNlZCIKIAllbHNlCi0JICAgIENGTEFHUz0iJENGTEFHUyAtV2Zvcm1hdC1ub25saXRlcmFsIgorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVd1c2VkLWJ1dC1tYXJrZWQtdW51c2VkIgogCWZpCiAJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwpAQCAtOTU0OSw4ICsxMDQ3NSw4IEBACiAJCWlmIHRlc3QgIngiICE9ICJ4IgogCQl0aGVuCiAJCSAgICBDRkxBR1M9IiRDRkxBR1MgJGFjX2xibF9jY19mb3JjZV93YXJuaW5nX2Vycm9ycyIKLQkJICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAtV2Zvcm1hdC1ub25saXRlcmFsICIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC1XZm9ybWF0LW5vbmxpdGVyYWwgLi4uICIgPiY2OyB9CisJCSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgLVd1c2VkLWJ1dC1tYXJrZWQtdW51c2VkICIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC1XdXNlZC1idXQtbWFya2VkLXVudXNlZCAuLi4gIiA+JjY7IH0KIAkJICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIApAQCAtOTU3OCw3ICsxMDUwNCw3IEBACiAJCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgogCQlpZiB0ZXN0IHgiJGNhbl9hZGRfdG9fY2ZsYWdzIiA9ICJ4eWVzIgogCQl0aGVuCi0JCSAgICBWX0NDT1BUPSIkVl9DQ09QVCAtV2Zvcm1hdC1ub25saXRlcmFsIgorCQkgICAgVl9DQ09QVD0iJFZfQ0NPUFQgLVd1c2VkLWJ1dC1tYXJrZWQtdW51c2VkIgogCQlmaQogCiBlbHNlCkBAIC05NTkwLDYgKzEwNTE2LDkgQEAKIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIAorCQkgICAgIyBXYXJucyBhYm91dCBzYWZlZ3VhcmRzIGFkZGVkIGluIGNhc2UgdGhlIGVudW1zIGFyZQorCQkgICAgIyBleHRlbmRlZAorCQkgICAgIyBBQ19MQkxfQ0hFQ0tfQ09NUElMRVJfT1BUKFZfQ0NPUFQsIC1XY292ZXJlZC1zd2l0Y2gtZGVmYXVsdCkKIAkJICAgICMKIAkJICAgICMgVGhpcyBjYW4gY2F1c2UgcHJvYmxlbXMgd2l0aCBudG9ocygpLCBudG9obCgpLAogCQkgICAgIyBodG9ucygpLCBhbmQgaHRvbmwoKSBvbiBzb21lIHBsYXRmb3Jtcywgc3VjaApAQCAtOTcwMyw2ICsxMDYzMiw4OCBAQAogZmkKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV3Nob3J0ZW4tNjQtdG8tMzIgb3B0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV3Nob3J0ZW4tNjQtdG8tMzIgb3B0aW9uLi4uICIgPiY2OyB9CisJc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJaWYgZXhwciAieC1Xc2hvcnRlbi02NC10by0zMiIgOiAieC1XLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAkYWNfbGJsX3Vua25vd25fd2FybmluZ19vcHRpb25fZXJyb3IgLVdzaG9ydGVuLTY0LXRvLTMyIgorCWVsaWYgZXhwciAieC1Xc2hvcnRlbi02NC10by0zMiIgOiAieC1mLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1Xc2hvcnRlbi02NC10by0zMiIKKwllbGlmIGV4cHIgIngtV3Nob3J0ZW4tNjQtdG8tMzIiIDogIngtbS4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV3Nob3J0ZW4tNjQtdG8tMzIiCisJZWxzZQorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdzaG9ydGVuLTY0LXRvLTMyIgorCWZpCisJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAwCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCQljYW5fYWRkX3RvX2NmbGFncz15ZXMKKwkJIworCQkjIFRoZSBjb21waWxlIHN1cHBvcnRzIHRoaXM7IGRvIHdlIGhhdmUgc29tZSBDIGNvZGUgZm9yCisJCSMgd2hpY2ggdGhlIHdhcm5pbmcgc2hvdWxkICpub3QqIGFwcGVhcj8KKwkJIyBXZSB0ZXN0IHRoZSBmb3VydGggYXJndW1lbnQgYmVjYXVzZSB0aGUgdGhpcmQgYXJndW1lbnQKKwkJIyBjb3VsZCBjb250YWluIHF1b3RlcywgYnJlYWtpbmcgdGhlIHRlc3QuCisJCSMKKwkJaWYgdGVzdCAieCIgIT0gIngiCisJCXRoZW4KKwkJICAgIENGTEFHUz0iJENGTEFHUyAkYWNfbGJsX2NjX2ZvcmNlX3dhcm5pbmdfZXJyb3JzIgorCQkgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC1Xc2hvcnRlbi02NC10by0zMiAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAtV3Nob3J0ZW4tNjQtdG8tMzIgLi4uICIgPiY2OyB9CisJCSAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisJCQkjCisJCQkjIE5vdCBhIHByb2JsZW0uCisJCQkjCisJCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworZWxzZQorCisJCQkjCisJCQkjIEEgcHJvYmxlbS4KKwkJCSMKKwkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisJCQljYW5fYWRkX3RvX2NmbGFncz1ubworCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisJCWZpCisJCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCQlpZiB0ZXN0IHgiJGNhbl9hZGRfdG9fY2ZsYWdzIiA9ICJ4eWVzIgorCQl0aGVuCisJCSAgICBWX0NDT1BUPSIkVl9DQ09QVCAtV3Nob3J0ZW4tNjQtdG8tMzIiCisJCWZpCisKK2Vsc2UKKworCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwkJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwogCSAgICBmaQogCiAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyBnZW5lcmF0aW5nIGRlcGVuZGVuY2llcyIgPiY1CkBAIC05NzgzLDcgKzEwNzk0LDcgQEAKIAkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMsIHdpdGggJGFjX2xibF9kZXBlbmRlbmN5X2ZsYWciID4mNQogJGFzX2VjaG8gInllcywgd2l0aCAkYWNfbGJsX2RlcGVuZGVuY3lfZmxhZyIgPiY2OyB9CiAJCQlERVBFTkRFTkNZX0NGTEFHPSIkYWNfbGJsX2RlcGVuZGVuY3lfZmxhZyIKLQkJCU1LREVQPScke3NyY2Rpcn0vbWtkZXAnCisJCQlNS0RFUD0nJHt0b3Bfc3JjZGlyfS9ta2RlcCcKIAkJZWxzZQogCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKICRhc19lY2hvICJubyIgPiY2OyB9CkBAIC05NzkxLDcgKzEwODAyLDcgQEAKIAkJCSMgV2UgY2FuJ3QgcnVuIG1rZGVwLCBzbyBoYXZlICJtYWtlIGRlcGVuZCIgZG8KIAkJCSMgbm90aGluZy4KIAkJCSMKLQkJCU1LREVQPScke3NyY2Rpcn0vbm9ta2RlcCcKKwkJCU1LREVQPScke3RvcF9zcmNkaXJ9L25vbWtkZXAnCiAJCWZpCiAJCXJtIC1yZiBjb25mdGVzdCoKIAllbHNlCkBAIC05ODAxLDcgKzEwODEyLDcgQEAKIAkJIyBXZSBjYW4ndCBydW4gbWtkZXAsIHNvIGhhdmUgIm1ha2UgZGVwZW5kIiBkbwogCQkjIG5vdGhpbmcuCiAJCSMKLQkJTUtERVA9JyR7c3JjZGlyfS9ub21rZGVwJworCQlNS0RFUD0nJHt0b3Bfc3JjZGlyfS9ub21rZGVwJwogCWZpCiAKIApAQCAtOTg5MCwxMDAgKzEwOTAxLDYgQEAKIGZpCiAKIAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB1bmFsaWduZWQgYWNjZXNzZXMgZmFpbCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBpZiB1bmFsaWduZWQgYWNjZXNzZXMgZmFpbC4uLiAiID4mNjsgfQotICAgIGlmICR7YWNfY3ZfbGJsX3VuYWxpZ25lZF9mYWlsKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2FzZSAiJGhvc3RfY3B1IiBpbgotCi0JIwotCSMgVGhlc2UgYXJlIENQVSB0eXBlcyB3aGVyZToKLQkjCi0JIwl0aGUgQ1BVIGZhdWx0cyBvbiBhbiB1bmFsaWduZWQgYWNjZXNzLCBidXQgYXQgbGVhc3Qgc29tZQotCSMJT1NlcyB0aGF0IHN1cHBvcnQgdGhhdCBDUFUgY2F0Y2ggdGhlIGZhdWx0IGFuZCBzaW11bGF0ZQotCSMJdGhlIHVuYWxpZ25lZCBhY2Nlc3MgKGUuZy4sIEFscGhhL3tEaWdpdGFsLFRydTY0fSBVTklYKSAtCi0JIwl0aGUgc2ltdWxhdGlvbiBpcyBzbG93LCBzbyB3ZSBkb24ndCB3YW50IHRvIHVzZSBpdDsKLQkjCi0JIwl0aGUgQ1BVLCBJIGluZmVyIChmcm9tIHRoZSBvbGQKLQkjCi0JIyBYWFg6IHNob3VsZCBhbHNvIGNoZWNrIHRoYXQgdGhleSBkb24ndCBkbyB3ZWlyZCB0aGluZ3MgKGxpa2Ugb24gYXJtKQotCSMKLQkjCWNvbW1lbnQpIGRvZXNuJ3QgZmF1bHQgb24gdW5hbGlnbmVkIGFjY2Vzc2VzLCBidXQgZG9lc24ndAotCSMJZG8gYSBub3JtYWwgdW5hbGlnbmVkIGZldGNoLCBlaXRoZXIgKGUuZy4sIHByZXN1bWFibHksIEFSTSk7Ci0JIwotCSMJZm9yIHdoYXRldmVyIHJlYXNvbiwgdGhlIHRlc3QgcHJvZ3JhbSBkb2Vzbid0IHdvcmsKLQkjCSh0aGlzIGhhcyBiZWVuIGNsYWltZWQgdG8gYmUgdGhlIGNhc2UgZm9yIHNldmVyYWwgb2YgdGhvc2UKLQkjCUNQVXMgLSBJIGRvbid0IGtub3cgd2hhdCB0aGUgcHJvYmxlbSBpczsgdGhlIHByb2JsZW0KLQkjCXdhcyByZXBvcnRlZCBhcyAidGhlIHRlc3QgcHJvZ3JhbSBkdW1wcyBjb3JlIiBmb3IgU3VwZXJILAotCSMJYnV0IHRoYXQncyB3aGF0IHRoZSB0ZXN0IHByb2dyYW0gaXMgKnN1cHBvc2VkKiB0byBkbyAtCi0JIwlpdCBkdW1wcyBjb3JlIGJlZm9yZSBpdCB3cml0ZXMgYW55dGhpbmcsIHNvIHRoZSB0ZXN0Ci0JIwlmb3IgYW4gZW1wdHkgb3V0cHV0IGZpbGUgc2hvdWxkIGZpbmQgYW4gZW1wdHkgb3V0cHV0Ci0JIwlmaWxlIGFuZCBjb25jbHVkZSB0aGF0IHVuYWxpZ25lZCBhY2Nlc3NlcyBkb24ndCB3b3JrKS4KLQkjCi0JIyBUaGlzIHJ1bi10aW1lIHRlc3Qgd29uJ3Qgd29yayBpZiB5b3UncmUgY3Jvc3MtY29tcGlsaW5nLCBzbwotCSMgaW4gb3JkZXIgdG8gc3VwcG9ydCBjcm9zcy1jb21waWxpbmcgZm9yIGEgcGFydGljdWxhciBDUFUsCi0JIyB3ZSBoYXZlIHRvIHdpcmUgaW4gdGhlIGxpc3Qgb2YgQ1BVIHR5cGVzIGFueXdheSwgYXMgZmFyIGFzCi0JIyBJIGtub3csIHNvIHBlcmhhcHMgd2Ugc2hvdWxkIGp1c3QgaGF2ZSBhIHNldCBvZiBDUFVzIG9uCi0JIyB3aGljaCB3ZSBrbm93IGl0IGRvZXNuJ3Qgd29yaywgYSBzZXQgb2YgQ1BVcyBvbiB3aGljaCB3ZQotCSMga25vdyBpdCBkb2VzIHdvcmssIGFuZCBoYXZlIHRoZSBzY3JpcHQganVzdCBmYWlsIG9uIG90aGVyCi0JIyBjcHUgdHlwZXMgYW5kIHVwZGF0ZSBpdCB3aGVuIHN1Y2ggYSBmYWlsdXJlIG9jY3Vycy4KLQkjCi0JYWxwaGEqfGFybSp8YmZpbip8aHAqfG1pcHMqfHNoKnxzcGFyYyp8aWE2NHxudjEpCi0JCWFjX2N2X2xibF91bmFsaWduZWRfZmFpbD15ZXMKLQkJOzsKLQotCSopCi0JCWNhdCA+Y29uZnRlc3QuYyA8PEVPRgotIwkJaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jCQlpbmNsdWRlIDxzeXMvd2FpdC5oPgotIwkJaW5jbHVkZSA8c3RkaW8uaD4KLQkJdW5zaWduZWQgY2hhciBhWzVdID0geyAxLCAyLCAzLCA0LCA1IH07Ci0JCW1haW4oKSB7Ci0JCXVuc2lnbmVkIGludCBpOwotCQlwaWRfdCBwaWQ7Ci0JCWludCBzdGF0dXM7Ci0JCS8qIGF2b2lkICJjb3JlIGR1bXBlZCIgbWVzc2FnZSAqLwotCQlwaWQgPSBmb3JrKCk7Ci0JCWlmIChwaWQgPCAgMCkKLQkJCWV4aXQoMik7Ci0JCWlmIChwaWQgPiAwKSB7Ci0JCQkvKiBwYXJlbnQgKi8KLQkJCXBpZCA9IHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKTsKLQkJCWlmIChwaWQgPCAwKQotCQkJCWV4aXQoMyk7Ci0JCQlleGl0KCFXSUZFWElURUQoc3RhdHVzKSk7Ci0JCX0KLQkJLyogY2hpbGQgKi8KLQkJaSA9ICoodW5zaWduZWQgaW50ICopJmFbMV07Ci0JCXByaW50ZigiJWRcbiIsIGkpOwotCQlleGl0KDApOwotCQl9Ci1FT0YKLQkJJHtDQy1jY30gLW8gY29uZnRlc3QgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgXAotCQkgICAgY29uZnRlc3QuYyAkTElCUyA+L2Rldi9udWxsIDI+JjEKLQkJaWYgdGVzdCAhIC14IGNvbmZ0ZXN0IDsgdGhlbgotCQkJCQkJYWNfY3ZfbGJsX3VuYWxpZ25lZF9mYWlsPXllcwotCQllbHNlCi0JCQkuL2NvbmZ0ZXN0ID5jb25mdGVzdC5vdXQKLQkJCWlmIHRlc3QgISAtcyBjb25mdGVzdC5vdXQgOyB0aGVuCi0JCQkJYWNfY3ZfbGJsX3VuYWxpZ25lZF9mYWlsPXllcwotCQkJZWxzZQotCQkJCWFjX2N2X2xibF91bmFsaWduZWRfZmFpbD1ubwotCQkJZmkKLQkJZmkKLQkJcm0gLWYgLXIgY29uZnRlc3QqIGNvcmUgY29yZS5jb25mdGVzdAotCQk7OwotCWVzYWMKLWZpCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xibF91bmFsaWduZWRfZmFpbCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xibF91bmFsaWduZWRfZmFpbCIgPiY2OyB9Ci0gICAgaWYgdGVzdCAkYWNfY3ZfbGJsX3VuYWxpZ25lZF9mYWlsID0geWVzIDsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBMQkxfQUxJR04gMSIgPj5jb25mZGVmcy5oCi0KLSAgICBmaQogCiAKIApAQCAtMTAwMTAsNiArMTA5MjcsMTQgQEAKIAogCiAKKworCisKKworCisjCisjIFZhcmlvdXMgTGludXgtc3BlY2lmaWMgbWVjaGFuaXNtcy4KKyMKICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS11c2Igd2FzIGdpdmVuLgogaWYgdGVzdCAiJHtlbmFibGVfdXNiK3NldH0iID0gc2V0OyB0aGVuIDoKICAgZW5hYmxldmFsPSRlbmFibGVfdXNiOwpAQCAtMTAwMTgsMzkgKzEwOTQzLDM4IEBACiBmaQogCiAKLWlmIHRlc3QgInh4eF9vbmx5IiA9IHllczsgdGhlbgotCSMgVXNlciByZXF1ZXN0ZWQgc29tZXRoaW5nLWVsc2Utb25seSBwY2FwLCBzbyB0aGV5IGRvbid0Ci0JIyB3YW50IFVTQiBzdXBwb3J0LgotCWVuYWJsZV91c2I9bm8KLWZpCisjCisjIElmIHNvbWVib2R5IHJlcXVlc3RlZCBhbiBYWFgtb25seSBwY2FwLCB0aGF0IGRvZXNuJ3QgaW5jbHVkZQorIyBhZGRpdGlvbmFsIG1lY2hhbmlzbXMuCisjCitpZiB0ZXN0ICJ4eHhfb25seSIgIT0geWVzOyB0aGVuCisgIGNhc2UgIiRob3N0X29zIiBpbgorICBsaW51eCopCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIExpbnV4IHVzYm1vbiBVU0Igc25pZmZpbmcgc3VwcG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgTGludXggdXNibW9uIFVTQiBzbmlmZmluZyBzdXBwb3J0Li4uICIgPiY2OyB9CisgICAgaWYgdGVzdCAieCRlbmFibGVfdXNiIiAhPSAieG5vIiA7IHRoZW4KIAotaWYgdGVzdCAieCRlbmFibGVfdXNiIiAhPSAieG5vIiA7IHRoZW4KLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFVTQiBzbmlmZmluZyBzdXBwb3J0IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBVU0Igc25pZmZpbmcgc3VwcG9ydC4uLiAiID4mNjsgfQotICAgY2FzZSAiJGhvc3Rfb3MiIGluCi0gICBsaW51eCopCiskYXNfZWNobyAiI2RlZmluZSBQQ0FQX1NVUFBPUlRfTElOVVhfVVNCTU9OIDEiID4+Y29uZmRlZnMuaAogCi0kYXNfZWNobyAiI2RlZmluZSBQQ0FQX1NVUFBPUlRfVVNCIDEiID4+Y29uZmRlZnMuaAotCi0JVVNCX1NSQz1wY2FwLXVzYi1saW51eC5jCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICAgICBNT0RVTEVfQ19TUkM9IiRNT0RVTEVfQ19TUkMgcGNhcC11c2ItbGludXguYyIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0JYWNfdXNiX2Rldl9uYW1lPWB1ZGV2aW5mbyAtcSBuYW1lIC1wIC9zeXMvY2xhc3MvdXNiX2RldmljZS91c2Jtb24gMj4vZGV2L251bGxgCi0JaWYgdGVzdCAkPyAtbmUgMCA7IHRoZW4KLQkgIGFjX3VzYl9kZXZfbmFtZT0idXNibW9uIgotCWZpCisgICAgICBhY191c2JfZGV2X25hbWU9YHVkZXZpbmZvIC1xIG5hbWUgLXAgL3N5cy9jbGFzcy91c2JfZGV2aWNlL3VzYm1vbiAyPi9kZXYvbnVsbGAKKyAgICAgIGlmIHRlc3QgJD8gLW5lIDAgOyB0aGVuCisgICAgICAgIGFjX3VzYl9kZXZfbmFtZT0idXNibW9uIgorICAgICAgZmkKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBMSU5VWF9VU0JfTU9OX0RFViAiL2Rldi8kYWNfdXNiX2Rldl9uYW1lIgogX0FDRU9GCiAKLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IERldmljZSBmb3IgVVNCIHNuaWZmaW5nIGlzIC9kZXYvJGFjX3VzYl9kZXZfbmFtZSIgPiY1CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IERldmljZSBmb3IgVVNCIHNuaWZmaW5nIGlzIC9kZXYvJGFjX3VzYl9kZXZfbmFtZSIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiBEZXZpY2UgZm9yIFVTQiBzbmlmZmluZyBpcyAvZGV2LyRhY191c2JfZGV2X25hbWUiID4mNjt9Ci0JIwotCSMgRG8gd2UgaGF2ZSBhIHZlcnNpb24gb2YgPGxpbnV4L2NvbXBpbGVyLmg+IGF2YWlsYWJsZT8KLQkjIElmIHNvLCB3ZSBtaWdodCBuZWVkIGl0IGZvciA8bGludXgvdXNiZGV2aWNlX2ZzLmg+LgotCSMKLQlmb3IgYWNfaGVhZGVyIGluIGxpbnV4L2NvbXBpbGVyLmgKKyAgICAgICMKKyAgICAgICMgRG8gd2UgaGF2ZSBhIHZlcnNpb24gb2YgPGxpbnV4L2NvbXBpbGVyLmg+IGF2YWlsYWJsZT8KKyAgICAgICMgSWYgc28sIHdlIG1pZ2h0IG5lZWQgaXQgZm9yIDxsaW51eC91c2JkZXZpY2VfZnMuaD4uCisgICAgICAjCisgICAgICBmb3IgYWNfaGVhZGVyIGluIGxpbnV4L2NvbXBpbGVyLmgKIGRvIDoKICAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImxpbnV4L2NvbXBpbGVyLmgiICJhY19jdl9oZWFkZXJfbGludXhfY29tcGlsZXJfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgogaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbGludXhfY29tcGlsZXJfaCIgPSB4eWVzOyB0aGVuIDoKQEAgLTEwMDYyLDExICsxMDk4NiwxMSBAQAogCiBkb25lCiAKLQlpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX2xpbnV4X2NvbXBpbGVyX2giID0geWVzOyB0aGVuCi0JICAjCi0JICAjIFllcyAtIGluY2x1ZGUgaXQgd2hlbiB0ZXN0aW5nIGZvciA8bGludXgvdXNiZGV2aWNlX2ZzLmg+LgotCSAgIwotCSAgZm9yIGFjX2hlYWRlciBpbiBsaW51eC91c2JkZXZpY2VfZnMuaAorICAgICAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9saW51eF9jb21waWxlcl9oIiA9IHllczsgdGhlbgorICAgICAgICAjCisgICAgICAgICMgWWVzIC0gaW5jbHVkZSBpdCB3aGVuIHRlc3RpbmcgZm9yIDxsaW51eC91c2JkZXZpY2VfZnMuaD4uCisgICAgICAgICMKKyAgICAgICAgZm9yIGFjX2hlYWRlciBpbiBsaW51eC91c2JkZXZpY2VfZnMuaAogZG8gOgogICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAibGludXgvdXNiZGV2aWNlX2ZzLmgiICJhY19jdl9oZWFkZXJfbGludXhfdXNiZGV2aWNlX2ZzX2giICIjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICIKQEAgLTEwMDc5LDggKzExMDAzLDggQEAKIAogZG9uZQogCi0JZWxzZQotCSAgZm9yIGFjX2hlYWRlciBpbiBsaW51eC91c2JkZXZpY2VfZnMuaAorICAgICAgZWxzZQorICAgICAgICBmb3IgYWNfaGVhZGVyIGluIGxpbnV4L3VzYmRldmljZV9mcy5oCiBkbyA6CiAgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJsaW51eC91c2JkZXZpY2VfZnMuaCIgImFjX2N2X2hlYWRlcl9saW51eF91c2JkZXZpY2VfZnNfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgogaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbGludXhfdXNiZGV2aWNlX2ZzX2giID0geHllczsgdGhlbiA6CkBAIC0xMDA5MiwyMCArMTEwMTYsMjAgQEAKIAogZG9uZQogCi0JZmkKLQlpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX2xpbnV4X3VzYmRldmljZV9mc19oIiA9IHllczsgdGhlbgotCSAgIwotCSAgIyBPSywgZG9lcyBpdCBkZWZpbmUgYlJlcXVlc3RUeXBlPyAgT2xkZXIgdmVyc2lvbnMgb2YgdGhlIGtlcm5lbAotCSAgIyBkZWZpbmUgZmllbGRzIHdpdGggbmFtZXMgbGlrZSAicmVxdWVzdHR5cGUsICJyZXF1ZXN0IiwgYW5kCi0JICAjICJ2YWx1ZSIsIHJhdGhlciB0aGFuICJiUmVxdWVzdFR5cGUiLCAiYlJlcXVlc3QiLCBhbmQKLQkgICMgIndWYWx1ZSIuCi0JICAjCi0JICBhY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCB1c2JkZXZmc19jdHJsdHJhbnNmZXIiICJiUmVxdWVzdFR5cGUiICJhY19jdl9tZW1iZXJfc3RydWN0X3VzYmRldmZzX2N0cmx0cmFuc2Zlcl9iUmVxdWVzdFR5cGUiICIKLQkJICAkYWNfaW5jbHVkZXNfZGVmYXVsdAotCQkgICNpZmRlZiBIQVZFX0xJTlVYX0NPTVBJTEVSX0gKLQkJICAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQkJICAjZW5kaWYKLQkJICAjaW5jbHVkZSA8bGludXgvdXNiZGV2aWNlX2ZzLmg+CisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9saW51eF91c2JkZXZpY2VfZnNfaCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgIworICAgICAgICAjIE9LLCBkb2VzIGl0IGRlZmluZSBiUmVxdWVzdFR5cGU/ICBPbGRlciB2ZXJzaW9ucyBvZiB0aGUga2VybmVsCisgICAgICAgICMgZGVmaW5lIGZpZWxkcyB3aXRoIG5hbWVzIGxpa2UgInJlcXVlc3R0eXBlLCAicmVxdWVzdCIsIGFuZAorICAgICAgICAjICJ2YWx1ZSIsIHJhdGhlciB0aGFuICJiUmVxdWVzdFR5cGUiLCAiYlJlcXVlc3QiLCBhbmQKKyAgICAgICAgIyAid1ZhbHVlIi4KKyAgICAgICAgIworICAgICAgICBhY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCB1c2JkZXZmc19jdHJsdHJhbnNmZXIiICJiUmVxdWVzdFR5cGUiICJhY19jdl9tZW1iZXJfc3RydWN0X3VzYmRldmZzX2N0cmx0cmFuc2Zlcl9iUmVxdWVzdFR5cGUiICIKKyAgICAgICAgICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisgICAgICAgICAgICAjaWZkZWYgSEFWRV9MSU5VWF9DT01QSUxFUl9ICisgICAgICAgICAgICAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgI2luY2x1ZGUgPGxpbnV4L3VzYmRldmljZV9mcy5oPgogCiAiCiBpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXNiZGV2ZnNfY3RybHRyYW5zZmVyX2JSZXF1ZXN0VHlwZSIgPSB4eWVzOyB0aGVuIDoKQEAgLTEwMTE3LDQ0ICsxMTA0MSwyMyBAQAogCiBmaQogCi0JZmkKLQk7OwotICAgIGZyZWVic2QqKQotCSMKLQkjIFRoaXMganVzdCB1c2VzIEJQRiBpbiBGcmVlQlNEIDguNCBhbmQgbGF0ZXI7IHdlIGRvbid0IG5lZWQKLQkjIHRvIGNoZWNrIGZvciBhbnl0aGluZyBzcGVjaWFsIGZvciBjYXB0dXJpbmcuCi0JIwotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMsIGluIEZyZWVCU0QgOC40IGFuZCBsYXRlciIgPiY1Ci0kYXNfZWNobyAieWVzLCBpbiBGcmVlQlNEIDguNCBhbmQgbGF0ZXIiID4mNjsgfQotCTs7Ci0KLSAgICAqKQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiAkYXNfZWNobyAibm8iID4mNjsgfQotCTs7Ci1lc2FjCi1maQorICAgIGZpCiAKLQotCi1pZiB0ZXN0ICJ4eHhfb25seSIgIT0geWVzOyB0aGVuCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBwbGF0Zm9ybSBjb3VsZCBzdXBwb3J0IG5ldGZpbHRlciBzbmlmZmluZyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBwbGF0Zm9ybSBjb3VsZCBzdXBwb3J0IG5ldGZpbHRlciBzbmlmZmluZy4uLiAiID4mNjsgfQotCWNhc2UgIiRob3N0X29zIiBpbgotCWxpbnV4KikKLQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQkJIwotCQkjIExpZmUncyB0b28gc2hvcnQgdG8gZGVhbCB3aXRoIHRyeWluZyB0byBnZXQgdGhpcyB0byBjb21waWxlCi0JCSMgaWYgeW91IGRvbid0IGdldCB0aGUgcmlnaHQgdHlwZXMgZGVmaW5lZCB3aXRoCi0JCSMgX19LRVJORUxfU1RSSUNUX05BTUVTIGdldHRpbmcgZGVmaW5lZCBieSBzb21lIG90aGVyIGluY2x1ZGUuCi0JCSMKLQkJIyBDaGVjayB3aGV0aGVyIHRoZSBpbmNsdWRlcyBKdXN0IFdvcmsuICBJZiBub3QsIGRvbid0IHR1cm4gb24KLQkJIyBuZXRmaWx0ZXIgc3VwcG9ydC4KLQkJIwotCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgY2FuIGNvbXBpbGUgdGhlIG5ldGZpbHRlciBzdXBwb3J0IiA+JjUKKyAgICAjCisgICAgIyBMaWZlJ3MgdG9vIHNob3J0IHRvIGRlYWwgd2l0aCB0cnlpbmcgdG8gZ2V0IHRoaXMgdG8gY29tcGlsZQorICAgICMgaWYgeW91IGRvbid0IGdldCB0aGUgcmlnaHQgdHlwZXMgZGVmaW5lZCB3aXRoCisgICAgIyBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMgZ2V0dGluZyBkZWZpbmVkIGJ5IHNvbWUgb3RoZXIgaW5jbHVkZS4KKyAgICAjCisgICAgIyBDaGVjayB3aGV0aGVyIHRoZSBpbmNsdWRlcyBKdXN0IFdvcmsuICBJZiBub3QsIGRvbid0IHR1cm4gb24KKyAgICAjIG5ldGZpbHRlciBzdXBwb3J0LgorICAgICMKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgY2FuIGNvbXBpbGUgdGhlIG5ldGZpbHRlciBzdXBwb3J0IiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgY2FuIGNvbXBpbGUgdGhlIG5ldGZpbHRlciBzdXBwb3J0Li4uICIgPiY2OyB9Ci0JCWlmICR7YWNfY3ZfbmV0ZmlsdGVyX2Nhbl9jb21waWxlKzp9IGZhbHNlOyB0aGVuIDoKKyAgICBpZiAke2FjX2N2X25ldGZpbHRlcl9jYW5fY29tcGlsZSs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKQEAgLTEwMTg2LDIwICsxMTA4OSwxNiBAQAogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQogCi0JCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbmV0ZmlsdGVyX2Nhbl9jb21waWxlIiA+JjUKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X25ldGZpbHRlcl9jYW5fY29tcGlsZSIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X25ldGZpbHRlcl9jYW5fY29tcGlsZSIgPiY2OyB9Ci0JCWlmIHRlc3QgJGFjX2N2X25ldGZpbHRlcl9jYW5fY29tcGlsZSA9IHllcyA7IHRoZW4KKyAgICBpZiB0ZXN0ICRhY19jdl9uZXRmaWx0ZXJfY2FuX2NvbXBpbGUgPSB5ZXMgOyB0aGVuCiAKICRhc19lY2hvICIjZGVmaW5lIFBDQVBfU1VQUE9SVF9ORVRGSUxURVIgMSIgPj5jb25mZGVmcy5oCiAKLQkJICBORVRGSUxURVJfU1JDPXBjYXAtbmV0ZmlsdGVyLWxpbnV4LmMKLQkJZmkKLQkJOzsKLQkqKQotCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQkJOzsKLQllc2FjCisgICAgICBNT0RVTEVfQ19TUkM9IiRNT0RVTEVfQ19TUkMgcGNhcC1uZXRmaWx0ZXItbGludXguYyIKKyAgICBmaQorICAgIDs7CisgIGVzYWMKIGZpCiAKIApAQCAtMTAyNTIsMTAgKzExMTUxLDI5NCBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBQQ0FQX1NVUFBPUlRfTkVUTUFQIDEiID4+Y29uZmRlZnMuaAogCi0JICAgIE5FVE1BUF9TUkM9cGNhcC1uZXRtYXAuYworCSAgICBNT0RVTEVfQ19TUkM9IiRNT0RVTEVfQ19TUkMgcGNhcC1uZXRtYXAuYyIKIAlmaQogCitmaQogCisjIENoZWNrIGZvciBEUERLIHN1cHBvcnQuCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZHBkayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZHBkaytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZHBkazsKKwlpZiB0ZXN0ICIkd2l0aHZhbCIgPSBubworCXRoZW4KKwkJIyBVc2VyIGRvZXNuJ3Qgd2FudCBEUERLIHN1cHBvcnQuCisJCXdhbnRfZHBkaz1ubworCWVsaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzCisJdGhlbgorCQkjIFVzZXIgd2FudHMgRFBESyBzdXBwb3J0IGJ1dCBoYXNuJ3Qgc3BlY2lmaWVkIGEgZGlyZWN0b3J5LgorCQl3YW50X2RwZGs9eWVzCisJZWxzZQorCQkjIFVzZXIgd2FudHMgRFBESyBzdXBwb3J0IGFuZCBoYXMgc3BlY2lmaWVkIGEgZGlyZWN0b3J5LAorCQkjIHNvIHVzZSB0aGUgcHJvdmlkZWQgdmFsdWUuCisJCXdhbnRfZHBkaz15ZXMKKwkJZHBka19kaXI9JHdpdGh2YWwKKwlmaQorCitlbHNlCisKKwlpZiB0ZXN0ICIkVl9QQ0FQIiA9IGRwZGs7IHRoZW4KKwkJIyBVc2VyIHJlcXVlc3RlZCBEUERLLW9ubHkgbGlicGNhcCwgc28gd2UnZCBiZXR0ZXIgaGF2ZQorCQkjIHRoZSBEUERLIEFQSS4KKwkJd2FudF9kcGRrPXllcworCWVsaWYgdGVzdCAieHh4X29ubHkiID0geWVzOyB0aGVuCisJCSMgVXNlciByZXF1ZXN0ZWQgc29tZXRoaW5nLWVsc2Utb25seSBwY2FwLCBzbyB0aGV5IGRvbid0CisJCSMgd2FudCBEUERLIHN1cHBvcnQuCisJCXdhbnRfZHBkaz1ubworCWVsc2UKKwkJIworCQkjIFVzZSBEUERLIEFQSSBpZiBwcmVzZW50LCBvdGhlcndpc2UgZG9uJ3QKKwkJIworCQl3YW50X2RwZGs9aWZwcmVzZW50CisJZmkKKworZmkKKworCitpZiB0ZXN0ICIkd2FudF9kcGRrIiAhPSBubzsgdGhlbgorCWlmIHRlc3QgIngkUEtHQ09ORklHIiAhPSAieG5vIgorCXRoZW4KKwkJIworCQkjIFdlIGhhdmUgcGtnLWNvbmZpZzsgc2VlIGlmIHdlIGhhdmUgRFBESyBpbnN0YWxsZWQKKwkJIyBhcyBhIHBhY2thZ2UuCisJCSMKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgRFBESyB3aXRoIHBrZy1jb25maWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIERQREsgd2l0aCBwa2ctY29uZmlnLi4uICIgPiY2OyB9CisJCWlmICIkUEtHQ09ORklHIiBsaWJkcGRrCisJCXRoZW4KKwkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBmb3VuZCIgPiY1CiskYXNfZWNobyAiZm91bmQiID4mNjsgfQorCQkJZm91bmRfZHBka193aXRoX3BrZ19jb25maWc9eWVzCisJCQlEUERLX0NGTEFHUz1gIiRQS0dDT05GSUciIC0tY2ZsYWdzIGxpYmRwZGtgCisJCQlEUERLX0xERkxBR1M9YCIkUEtHQ09ORklHIiAtLWxpYnMgbGliZHBka2AKKwkJZWxzZQorCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vdCBmb3VuZCIgPiY1CiskYXNfZWNobyAibm90IGZvdW5kIiA+JjY7IH0KKwkJZmkKKwlmaQorCisJIworCSMgSWYgd2UgZGlkbid0IGZpbmQgaXQgd2l0aCBwa2ctY29uZmlnLCB0cnkgY2hlY2tpbmcgZm9yCisJIyBpdCBtYW51YWxseS4KKwkjCisJaWYgdGVzdCAieCRmb3VuZF9kcGRrX3dpdGhfcGtnX2NvbmZpZyIgIT0gInh5ZXMiCisJdGhlbgorCQlpZiB0ZXN0IC16ICIkZHBka19kaXIiOyB0aGVuCisJCQkjCisJCQkjIFRoZSB1c2VyIGRpZG4ndCBzcGVjaWZ5IGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcKKwkJCSMgdGhlIERQREsgaGVhZGVycyBhbmQgbGlicmFyaWVzLiAgSWYgd2UgZmluZAorCQkJIyBhIC91c3IvbG9jYWwvaW5jbHVkZS9kcGRrIGRpcmVjdG9yeSwgYXNzdW1lCisJCQkjIGl0J3MgL3Vzci9sb2NhbCwgb3RoZXJ3aXNlIGFzc3VtZSBpdCdzIC91c3IuCisJCQkjCisJCQlpZiB0ZXN0IC1kICIvdXNyL2xvY2FsL2luY2x1ZGUvZHBkayI7IHRoZW4KKwkJCQlkcGRrX2Rpcj0iL3Vzci9sb2NhbCIKKwkJCWVsc2UKKwkJCQlkcGRrX2Rpcj0iL3VzciIKKwkJCWZpCisJCWZpCisJCSMKKwkJIyBUaGUgY29udmVudGlvbiBhcHBlYXJzIHRvIGJlIHRoYXQgMSkgdGhlcmUncyBhICJkcGRrIgorCQkjIHN1YmRpcmVjdG9yeSBvZiB0aGUgaW5jbHVkZSBkaXJlY3RvcnksIGNvbnRhaW5pbmcgRFBESworCQkjIGhlYWRlcnMgKGF0IGxlYXN0IGluIHRoZSBpbnN0YWxsYXRpb24gb24gVWJ1bnR1IHdpdGgKKwkJIyB0aGUgc3lzdGVtIERQREsgcGFja2FnZXMpIGFuZCAyKSBpbmNsdWRlcyBvZiBEUERLCisJCSMgaGVhZGVycyBkb24ndCB1c2UgImRwZGsve2hlYWRlcn0iIChhdCBsZWFzdCBmcm9tIHRoZQorCQkjIHdheSB0aGUgRFBESyBkb2N1bWVudGF0aW9uIGlzIHdyaXR0ZW4pLgorCQkjCisJCSMgU28gd2UgYWRkICIvZHBkayIgdG8gdGhlIGluY2x1ZGUgZGlyZWN0b3J5LCBhbmQgYWx3YXlzCisJCSMgYWRkIHRoYXQgdG8gdGhlIGxpc3Qgb2YgaW5jbHVkZSBkaXJlY3RvcmllcyB0byBzZWFyY2guCisJCSMKKwkJZHBka19pbmNfZGlyPSIkZHBka19kaXIvaW5jbHVkZS9kcGRrIgorCQlkcGRrX2luY19mbGFncz0iLUkkZHBka19pbmNfZGlyIgorCQlkcGRrX2xpYl9kaXI9IiRkcGRrX2Rpci9saWIiCisJCSMKKwkJIyBIYW5kbGUgbXVsdGlhcmNoIHN5c3RlbXMuCisJCSMKKwkJIyBTdGVwIDE6IHJ1biB0aGUgQyBjb21waWxlciB3aXRoIHRoZSAtZHVtcG1hY2hpbmUgb3B0aW9uOworCQkjIGlmIGl0IHN1Y2NlZWRzLCB0aGUgb3V0cHV0IHdvdWxkIGJlIHRoZSBtdWx0aWFyY2ggZGlyZWN0b3J5CisJCSMgbmFtZSBpZiB5b3VyIHN5c3RlbSBoYXMgbXVsdGlhcmNoIGRpcmVjdG9yaWVzLgorCQkjCisJCW11bHRpYXJjaF9kaXI9YCRDQyAtZHVtcG1hY2hpbmUgMj4vZGV2L251bGxgCisJCWlmIHRlc3QgISAteiAiJG11bHRpYXJjaF9kaXIiCisJCXRoZW4KKwkJCSMKKwkJCSMgT0ssIHdlIGhhdmUgYSBtdWx0aWFyY2ggZGlyZWN0b3J5LgorCQkJIworCQkJIyBOb3cgZGVhbCB3aXRoIGluY2x1ZGVzLiAgT24gVWJ1bnR1IDIwLjA0LCBmb3IKKwkJCSMgZXhhbXBsZSwgd2UgaGF2ZSAvdXNyL2luY2x1ZGUvZHBkayAqYW5kKgorCQkJIyAvdXNyL2luY2x1ZGUvJG11bHRpYXJjaF9kaXIvZHBkaywgYW5kIG11c3QKKwkJCSMgc2VhcmNoIGJvdGguCisJCQkjCisJCQlpZiB0ZXN0IC1kICIkZHBka19kaXIvaW5jbHVkZS8kbXVsdGlhcmNoX2Rpci9kcGRrIgorCQkJdGhlbgorCQkJCWRwZGtfaW5jX2ZsYWdzPSItSSRkcGRrX2Rpci9pbmNsdWRlLyRtdWx0aWFyY2hfZGlyL2RwZGsgJGRwZGtfaW5jX2ZsYWdzIgorCQkJZmkKKworCQkJIworCQkJIyBOb3cgZGVhbCB3aXRoIGxpYnJhcmllcy4KKwkJCSMKKwkJCWlmIHRlc3QgLWQgIiRkcGRrX2xpYl9kaXIvJG11bHRpYXJjaF9kaXIiCisJCQl0aGVuCisJCQkJZHBka19saWJfZGlyPSIkZHBka19saWJfZGlyLyRtdWx0aWFyY2hfZGlyIgorCQkJZmkKKwkJZmkKKwkJRFBES19NQUNISU5FX0NGTEFHUz0iLW1hcmNoPW5hdGl2ZSIKKwkJRFBES19DRkxBR1M9IiREUERLX01BQ0hJTkVfQ0ZMQUdTICRkcGRrX2luY19mbGFncyIKKwkJRFBES19MREZMQUdTPSItTCRkcGRrX2xpYl9kaXIgLWxkcGRrIC1scnQgLWxtIC1sbnVtYSAtbGRsIC1wdGhyZWFkIgorCWZpCisKKwlzYXZlX0NGTEFHUz0iJENGTEFHUyIKKwlzYXZlX0xJQlM9IiRMSUJTIgorCXNhdmVfTERGTEFHUz0iJExERkxBR1MiCisJQ0ZMQUdTPSIkQ0ZMQUdTICREUERLX0NGTEFHUyIKKwlMSUJTPSIkTElCUyAkRFBES19MREZMQUdTIgorCUxERkxBR1M9IiRMREZMQUdTICREUERLX0xERkxBR1MiCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgY2FuIGNvbXBpbGUgdGhlIERQREsgc3VwcG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGNhbiBjb21waWxlIHRoZSBEUERLIHN1cHBvcnQuLi4gIiA+JjY7IH0KKwlpZiAke2FjX2N2X2RwZGtfY2FuX2NvbXBpbGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyRhY19pbmNsdWRlc19kZWZhdWx0CisjaW5jbHVkZSA8cnRlX2NvbW1vbi5oPgoraW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9kcGRrX2Nhbl9jb21waWxlPXllcworZWxzZQorICBhY19jdl9kcGRrX2Nhbl9jb21waWxlPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9kcGRrX2Nhbl9jb21waWxlIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZHBka19jYW5fY29tcGlsZSIgPiY2OyB9CisKKwkjCisJIyBXZSBpbmNsdWRlIHJ0ZV9idXMuaCwgYW5kIG9sZGVyIHZlcnNpb25zIG9mIERQREsKKwkjIGRpZG4ndCBoYXZlIGl0LCBzbyBjaGVjayBmb3IgaXQuCisJIworCWlmIHRlc3QgIiRhY19jdl9kcGRrX2Nhbl9jb21waWxlIiA9IHllczsgdGhlbgorCQkjCisJCSMgVGhpcyBydW5zIHRoZSBwcmVwcm9jZXNzb3IsIHNvIG1ha2Ugc3VyZSBpdAorCQkjIGxvb2tzIGluIHRoZSBEUERLIGRpcmVjdG9yaWVzLiAgSW5zdGVhZCBvZgorCQkjIGluY2x1ZGluZyBkcGRrL1hYWC5oLCB3ZSBpbmNsdWRlIGp1c3QgWFhYLmgKKwkJIyBhbmQgYXNzdW1lIERQREtfQ0ZMQUdTIGlzIHRoZSBkaXJlY3RvcnkKKwkJIyBjb250YWluaW5nIHRoZSBEUERLIGhlYWRlcnMgKHRoYXQncyBob3cKKwkJIyBwa2ctY29uZmlnIHNldHMgaXQsIGF0IGxlYXN0IG9uIFVidW50dSksCisJCSMgc28ganVzdCBsb29raW5nIHVuZGVyIC91c3IvaW5jbHVkZSB3b24ndAorCQkjIGZpbmQgaXQuCisJCSMKKwkJc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorCQlDUFBGTEFHUz0iJENQUEZMQUdTICREUERLX0NGTEFHUyIKKwkJYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInJ0ZV9idXMuaCIgImFjX2N2X2hlYWRlcl9ydGVfYnVzX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3J0ZV9idXNfaCIgPSB4eWVzOyB0aGVuIDoKKworZmkKKworCisJCUNQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKKwlmaQorCisJIworCSMgV2UgY2FsbCBydGVfZXRoX2Rldl9jb3VudF9hdmFpbCgpLCBhbmQgb2xkZXIgdmVyc2lvbnMKKwkjIG9mIERQREsgZGlkbid0IGhhdmUgaXQsIHNvIGNoZWNrIGZvciBpdC4KKwkjCisJaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9ydGVfYnVzX2giID0geWVzOyB0aGVuCisJCWFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInJ0ZV9ldGhfZGV2X2NvdW50X2F2YWlsIiAiYWNfY3ZfZnVuY19ydGVfZXRoX2Rldl9jb3VudF9hdmFpbCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19ydGVfZXRoX2Rldl9jb3VudF9hdmFpbCIgPSB4eWVzOyB0aGVuIDoKKworZmkKKworCWZpCisKKwlDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKwlMSUJTPSIkc2F2ZV9MSUJTIgorCUxERkxBR1M9IiRzYXZlX0xERkxBR1MiCisKKwlpZiB0ZXN0ICIkYWNfY3ZfZnVuY19ydGVfZXRoX2Rldl9jb3VudF9hdmFpbCIgPSB5ZXM7IHRoZW4KKwkJQ0ZMQUdTPSIkQ0ZMQUdTICREUERLX0NGTEFHUyIKKwkJTElCUz0iJExJQlMgJERQREtfTERGTEFHUyIKKwkJTERGTEFHUz0iJExERkxBR1MgJERQREtfTERGTEFHUyIKKwkJVl9JTkNMUz0iJFZfSU5DTFMgJERQREtfQ0ZMQUdTIgorCiskYXNfZWNobyAiI2RlZmluZSBQQ0FQX1NVUFBPUlRfRFBESyAxIiA+PmNvbmZkZWZzLmgKKworCQlpZiB0ZXN0ICRWX1BDQVAgIT0gZHBkayA7IHRoZW4KKwkJCU1PRFVMRV9DX1NSQz0iJE1PRFVMRV9DX1NSQyBwY2FwLWRwZGsuYyIKKwkJZmkKKworCQkjCisJCSMgQ2hlY2sgd2hldGhlciB0aGUgcnRlX2V0aGVyLmggZmlsZSBkZWZpbmVzCisJCSMgc3RydWN0IGV0aGVyX2FkZHIgb3Igc3RydWN0IHJ0ZV9ldGhlcl9hZGRyLgorCQkjCisJCSMgKCJBUEkgY29tcGF0aWJpbGl0eT8gIFRoYXQncyBmb3IgbG9zZXJzISIpCisJCSMKKwkJYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAic3RydWN0IHJ0ZV9ldGhlcl9hZGRyIiAiYWNfY3ZfdHlwZV9zdHJ1Y3RfcnRlX2V0aGVyX2FkZHIiICIKKwkJCSNpbmNsdWRlIDxydGVfZXRoZXIuaD4KKworIgoraWYgdGVzdCAieCRhY19jdl90eXBlX3N0cnVjdF9ydGVfZXRoZXJfYWRkciIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9SVEVfRVRIRVJfQUREUiAxCitfQUNFT0YKKworCitmaQorCisJZWxzZQorCQlpZiB0ZXN0ICIkVl9QQ0FQIiA9IGRwZGs7IHRoZW4KKwkJCSMgVXNlciByZXF1ZXN0ZWQgRFBESy1vbmx5IGNhcHR1cmUgc3VwcG9ydCwgYnV0CisJCQkjIHdlIGNvdWxkbid0IHRoZSBEUERLIEFQSSBzdXBwb3J0IGF0IGFsbCwgb3Igd2UKKwkJCSMgZm91bmQgaXQgYnV0IGl0IHdhc24ndCBhIHN1ZmZpY2llbnRseSByZWNlbnQKKwkJCSMgdmVyc2lvbi4KKwkJCWlmIHRlc3QgIiRhY19jdl9kcGRrX2Nhbl9jb21waWxlIiAhPSB5ZXM7IHRoZW4KKwkJCQkjCisJCQkJIyBDb3VsZG4ndCBldmVuIGZpbmQgdGhlIGhlYWRlcnMuCisJCQkJIworCQkJCWFzX2ZuX2Vycm9yICQ/ICJEUERLIHN1cHBvcnQgcmVxdWVzdGVkIHdpdGggLS13aXRoLXBjYXA9ZHBkaywgYnV0IHRoZSBEUERLIGhlYWRlcnMgd2VyZW4ndCBmb3VuZCBhdCAkZHBka19pbmNfZGlyOiBtYWtlIHN1cmUgdGhlIERQREsgc3VwcG9ydCBpcyBpbnN0YWxsZWQsIHNwZWNpZnkgYSBkaWZmZXJlbnQgcGF0aCBvciBwYXRocyBpZiBuZWNlc3NhcnksIG9yIGRvbid0IHJlcXVlc3QgRFBESyBzdXBwb3J0IiAiJExJTkVOTyIgNQorCQkJZWxzZQorCQkJCSMKKwkJCQkjIEZvdW5kIHRoZSBoZWFkZXJzLCBidXQgd2UgY291bGRuJ3QgZmluZAorCQkJCSMgcnRlX2J1cy5oIG9yIHJ0ZV9ldGhfZGV2X2NvdW50X2F2YWlsKCksCisJCQkJIyB3ZSBkb24ndCBoYXZlIGEgc3VmZmljaWVudGx5IHJlY2VudAorCQkJCSMgdmVyc2lvbiBvZiBEUERLLgorCQkJCSMKKwkJCQlhc19mbl9lcnJvciAkPyAiRFBESyBzdXBwb3J0IHJlcXVlc3RlZCB3aXRoIC0td2l0aC1wY2FwPWRwZGssIGJ1dCB3ZSByZXF1aXJlIERQREsgMTgueCBvciBsYXRlcjsgaW5zdGFsbCBhIG5ld2VyIHZlcnNpb24gb2YgRFBESywgb3IgZG9uJ3QgcmVxdWVzdCBEUERLIHN1cHBvcnQiICIkTElORU5PIiA1CisJCQlmaQorCQlmaQorCisJCWlmIHRlc3QgIiR3YW50X2RwZGsiID0geWVzOyB0aGVuCisJCQkjIFVzZXIgcmVxdWVzdGVkIERQREstb25seSBjYXB0dXJlIHN1cHBvcnQsIGJ1dAorCQkJIyB3ZSBjb3VsZG4ndCB0aGUgRFBESyBBUEkgc3VwcG9ydCBhdCBhbGwsIG9yIHdlCisJCQkjIGZvdW5kIGl0IGJ1dCBpdCB3YXNuJ3QgYSBzdWZmaWNpZW50bHkgcmVjZW50CisJCQkjIHZlcnNpb24uCisJCQlpZiB0ZXN0ICIkYWNfY3ZfZHBka19jYW5fY29tcGlsZSIgIT0geWVzOyB0aGVuCisJCQkJIworCQkJCSMgQ291bGRuJ3QgZXZlbiBmaW5kIHRoZSBoZWFkZXJzLgorCQkJCSMKKwkJCQlhc19mbl9lcnJvciAkPyAiRFBESyBzdXBwb3J0IHJlcXVlc3RlZCB3aXRoIC0td2l0aC1wY2FwPWRwZGssIGJ1dCB0aGUgRFBESyBoZWFkZXJzIHdlcmVuJ3QgZm91bmQgYXQgJGRwZGtfaW5jX2RpcjogbWFrZSBzdXJlIHRoZSBEUERLIHN1cHBvcnQgaXMgaW5zdGFsbGVkLCBzcGVjaWZ5IGEgZGlmZmVyZW50IHBhdGggb3IgcGF0aHMgaWYgbmVjZXNzYXJ5LCBvciBkb24ndCByZXF1ZXN0IERQREsgc3VwcG9ydCIgIiRMSU5FTk8iIDUKKwkJCWVsc2UKKwkJCQkjCisJCQkJIyBGb3VuZCB0aGUgaGVhZGVycywgYnV0IHdlIGNvdWxkbid0IGZpbmQKKwkJCQkjIHJ0ZV9idXMuaCBvciBydGVfZXRoX2Rldl9jb3VudF9hdmFpbCgpLAorCQkJCSMgd2UgZG9uJ3QgaGF2ZSBhIHN1ZmZpY2llbnRseSByZWNlbnQKKwkJCQkjIHZlcnNpb24gb2YgRFBESy4KKwkJCQkjCisJCQkJYXNfZm5fZXJyb3IgJD8gIkRQREsgc3VwcG9ydCByZXF1ZXN0ZWQgd2l0aCAtLXdpdGgtcGNhcD1kcGRrLCBidXQgd2UgcmVxdWlyZSBEUERLIDE4Lnggb3IgbGF0ZXI6IGluc3RhbGwgYSBuZXdlciB2ZXJzaW9uIG9mIERQREssIG9yIGRvbid0IHJlcXVlc3QgRFBESyBzdXBwb3J0IiAiJExJTkVOTyIgNQorCQkJZmkKKwkJZmkKKwlmaQogZmkKIAogCkBAIC0xMDI4Niw3ICsxMTQ2OSw3IEBACiAKICRhc19lY2hvICIjZGVmaW5lIFBDQVBfU1VQUE9SVF9CVCAxIiA+PmNvbmZkZWZzLmgKIAotCQkJQlRfU1JDPXBjYXAtYnQtbGludXguYworCQkJTU9EVUxFX0NfU1JDPSIkTU9EVUxFX0NfU1JDIHBjYXAtYnQtbGludXguYyIKIAkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogQmx1ZXRvb3RoIHNuaWZmaW5nIGlzIHN1cHBvcnRlZCIgPiY1CiAkYXNfZWNobyAiJGFzX21lOiBCbHVldG9vdGggc25pZmZpbmcgaXMgc3VwcG9ydGVkIiA+JjY7fQogCQkJYWNfbGJsX2JsdWV0b290aF9hdmFpbGFibGU9eWVzCkBAIC0xMDMzOCw3ICsxMTUyMSw3IEBACiAKICRhc19lY2hvICIjZGVmaW5lIFBDQVBfU1VQUE9SVF9CVF9NT05JVE9SIC8qKi8iID4+Y29uZmRlZnMuaAogCi0JCQkJCSAgICBCVF9NT05JVE9SX1NSQz1wY2FwLWJ0LW1vbml0b3ItbGludXguYworCQkJCQkgICAgTU9EVUxFX0NfU1JDPSIkTU9EVUxFX0NfU1JDIHBjYXAtYnQtbW9uaXRvci1saW51eC5jIgogCiBlbHNlCiAKQEAgLTEwMzgwLDggKzExNTYzLDYgQEAKIAkJOzsKIAllc2FjCiAKLQotCiBmaQogCiAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGJ1cyB3YXMgZ2l2ZW4uCkBAIC0xMDQzMSw0NCArMTE2MTIsNiBAQAogZmkKIAogaWYgdGVzdCAieCRlbmFibGVfZGJ1cyIgIT0gInhubyI7IHRoZW4KLQkjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHBrZy1jb25maWc7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX1BLR0NPTkZJRys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRQS0dDT05GSUciOyB0aGVuCi0gIGFjX2N2X3Byb2dfUEtHQ09ORklHPSIkUEtHQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfUEtHQ09ORklHPSJwa2ctY29uZmlnIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi0gIHRlc3QgLXogIiRhY19jdl9wcm9nX1BLR0NPTkZJRyIgJiYgYWNfY3ZfcHJvZ19QS0dDT05GSUc9Im5vIgotZmkKLWZpCi1QS0dDT05GSUc9JGFjX2N2X3Byb2dfUEtHQ09ORklHCi1pZiB0ZXN0IC1uICIkUEtHQ09ORklHIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBLR0NPTkZJRyIgPiY1Ci0kYXNfZWNobyAiJFBLR0NPTkZJRyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCiAJaWYgdGVzdCAieCRQS0dDT05GSUciICE9ICJ4bm8iOyB0aGVuCiAJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEQtQnVzIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBELUJ1cy4uLiAiID4mNjsgfQpAQCAtMTA1MDYsNyArMTE2NDksNyBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBQQ0FQX1NVUFBPUlRfREJVUyAxIiA+PmNvbmZkZWZzLmgKIAotCQkJCURCVVNfU1JDPXBjYXAtZGJ1cy5jCisJCQkJTU9EVUxFX0NfU1JDPSIkTU9EVUxFX0NfU1JDIHBjYXAtZGJ1cy5jIgogCQkJCVZfSU5DTFM9IiRWX0lOQ0xTICREQlVTX0NGTEFHUyIKIAogZWxzZQpAQCAtMTA1MzEsMjQgKzExNjc0LDIzIEBACiAJCWZpCiAJZmkKIAotCiBmaQogCiAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcmRtYSB3YXMgZ2l2ZW4uCiBpZiB0ZXN0ICIke2VuYWJsZV9yZG1hK3NldH0iID0gc2V0OyB0aGVuIDoKICAgZW5hYmxldmFsPSRlbmFibGVfcmRtYTsKIGVsc2UKLSAgZW5hYmxlX3JkbWFzbmlmZj1pZmF2YWlsYWJsZQorICBlbmFibGVfcmRtYT1pZmF2YWlsYWJsZQogZmkKIAogCiBpZiB0ZXN0ICJ4eHhfb25seSIgPSB5ZXM7IHRoZW4KIAkjIFVzZXIgcmVxdWVzdGVkIHNvbWV0aGluZy1lbHNlLW9ubHkgcGNhcCwgc28gdGhleSBkb24ndAogCSMgd2FudCBSRE1BIHN1cHBvcnQuCi0JZW5hYmxlX3JkbWFzbmlmZj1ubworCWVuYWJsZV9yZG1hPW5vCiBmaQogCi1pZiB0ZXN0ICJ4JGVuYWJsZV9yZG1hc25pZmYiICE9ICJ4bm8iOyB0aGVuCitpZiB0ZXN0ICJ4JGVuYWJsZV9yZG1hIiAhPSAieG5vIjsgdGhlbgogCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGlidl9nZXRfZGV2aWNlX2xpc3QgaW4gLWxpYnZlcmJzIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBpYnZfZ2V0X2RldmljZV9saXN0IGluIC1saWJ2ZXJicy4uLiAiID4mNjsgfQogaWYgJHthY19jdl9saWJfaWJ2ZXJic19pYnZfZ2V0X2RldmljZV9saXN0Kzp9IGZhbHNlOyB0aGVuIDoKQEAgLTEwNjI2LDcgKzExNzY4LDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgUENBUF9TVVBQT1JUX1JETUFTTklGRiAvKiovIiA+PmNvbmZkZWZzLmgKIAotCQkJCQlSRE1BX1NSQz1wY2FwLXJkbWFzbmlmZi5jCisJCQkJCU1PRFVMRV9DX1NSQz0iJE1PRFVMRV9DX1NSQyBwY2FwLXJkbWFzbmlmZi5jIgogCQkJCQlMSUJTPSItbGlidmVyYnMgJExJQlMiCiAKIGVsc2UKQEAgLTEwNjQ2LDcgKzExNzg4LDYgQEAKIGZpCiAKIAotCiBmaQogCiAjIEZpbmQgYSBnb29kIGluc3RhbGwgcHJvZ3JhbS4gIFdlIHByZWZlciBhIEMgcHJvZ3JhbSAoZmFzdGVyKSwKQEAgLTEwNzQ4LDcgKzExODg5LDcgQEAKIAogYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGRlZmF1bHQtMSIKIAotYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1ha2VmaWxlIHBjYXAtZmlsdGVyLm1hbm1pc2MgcGNhcC1saW5rdHlwZS5tYW5taXNjIHBjYXAtdHN0YW1wLm1hbm1pc2MgcGNhcC1zYXZlZmlsZS5tYW5maWxlIHBjYXAuM3BjYXAgcGNhcF9jb21waWxlLjNwY2FwIHBjYXBfZGF0YWxpbmsuM3BjYXAgcGNhcF9kdW1wX29wZW4uM3BjYXAgcGNhcF9nZXRfdHN0YW1wX3ByZWNpc2lvbi4zcGNhcCBwY2FwX2xpc3RfZGF0YWxpbmtzLjNwY2FwIHBjYXBfbGlzdF90c3RhbXBfdHlwZXMuM3BjYXAgcGNhcF9vcGVuX2RlYWQuM3BjYXAgcGNhcF9vcGVuX29mZmxpbmUuM3BjYXAgcGNhcF9zZXRfdHN0YW1wX3ByZWNpc2lvbi4zcGNhcCBwY2FwX3NldF90c3RhbXBfdHlwZS4zcGNhcCBycGNhcGQvTWFrZWZpbGUgcnBjYXBkL3JwY2FwZC5tYW5hZG1pbiB0ZXN0cHJvZ3MvTWFrZWZpbGUiCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGUgZ3JhbW1hci55IHBjYXAtZmlsdGVyLm1hbm1pc2MgcGNhcC1saW5rdHlwZS5tYW5taXNjIHBjYXAtdHN0YW1wLm1hbm1pc2MgcGNhcC1zYXZlZmlsZS5tYW5maWxlIHBjYXAuM3BjYXAgcGNhcF9jb21waWxlLjNwY2FwIHBjYXBfZGF0YWxpbmsuM3BjYXAgcGNhcF9kdW1wX29wZW4uM3BjYXAgcGNhcF9nZXRfdHN0YW1wX3ByZWNpc2lvbi4zcGNhcCBwY2FwX2xpc3RfZGF0YWxpbmtzLjNwY2FwIHBjYXBfbGlzdF90c3RhbXBfdHlwZXMuM3BjYXAgcGNhcF9vcGVuX2RlYWQuM3BjYXAgcGNhcF9vcGVuX29mZmxpbmUuM3BjYXAgcGNhcF9zZXRfaW1tZWRpYXRlX21vZGUuM3BjYXAgcGNhcF9zZXRfdHN0YW1wX3ByZWNpc2lvbi4zcGNhcCBwY2FwX3NldF90c3RhbXBfdHlwZS4zcGNhcCBycGNhcGQvTWFrZWZpbGUgcnBjYXBkL3JwY2FwZC5tYW5hZG1pbiBycGNhcGQvcnBjYXBkLWNvbmZpZy5tYW5maWxlIHRlc3Rwcm9ncy9NYWtlZmlsZSIKIAogY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCiAjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKQEAgLTExMjU2LDcgKzEyMzk3LDcgQEAKICMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgogIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4KIGFjX2xvZz0iCi1UaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IHBjYXAgJGFzX21lIDEuOS4wLVBSRS1HSVQsIHdoaWNoIHdhcworVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBwY2FwICRhc19tZSAxLjEwLjAsIHdoaWNoIHdhcwogZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCiAKICAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUwpAQCAtMTEzMjIsNyArMTI0NjMsNyBAQAogY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiBhY19jc19jb25maWc9ImAkYXNfZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9eIC8vOyBzL1tcXCIiXGBcJF0vXFxcXCYvZydgIgogYWNfY3NfdmVyc2lvbj0iXFwKLXBjYXAgY29uZmlnLnN0YXR1cyAxLjkuMC1QUkUtR0lUCitwY2FwIGNvbmZpZy5zdGF0dXMgMS4xMC4wCiBjb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjksCiAgIHdpdGggb3B0aW9ucyBcXCJcJGFjX2NzX2NvbmZpZ1xcIgogCkBAIC0xMTQ1Miw2ICsxMjU5Myw3IEBACiAgICAgImNvbmZpZy5oIikgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyBjb25maWcuaCIgOzsKICAgICAiZGVmYXVsdC0xIikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIGRlZmF1bHQtMSIgOzsKICAgICAiTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUiIDs7CisgICAgImdyYW1tYXIueSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBncmFtbWFyLnkiIDs7CiAgICAgInBjYXAtZmlsdGVyLm1hbm1pc2MiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGNhcC1maWx0ZXIubWFubWlzYyIgOzsKICAgICAicGNhcC1saW5rdHlwZS5tYW5taXNjIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHBjYXAtbGlua3R5cGUubWFubWlzYyIgOzsKICAgICAicGNhcC10c3RhbXAubWFubWlzYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwY2FwLXRzdGFtcC5tYW5taXNjIiA7OwpAQCAtMTE0NjUsMTAgKzEyNjA3LDEyIEBACiAgICAgInBjYXBfbGlzdF90c3RhbXBfdHlwZXMuM3BjYXAiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGNhcF9saXN0X3RzdGFtcF90eXBlcy4zcGNhcCIgOzsKICAgICAicGNhcF9vcGVuX2RlYWQuM3BjYXAiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGNhcF9vcGVuX2RlYWQuM3BjYXAiIDs7CiAgICAgInBjYXBfb3Blbl9vZmZsaW5lLjNwY2FwIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHBjYXBfb3Blbl9vZmZsaW5lLjNwY2FwIiA7OworICAgICJwY2FwX3NldF9pbW1lZGlhdGVfbW9kZS4zcGNhcCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwY2FwX3NldF9pbW1lZGlhdGVfbW9kZS4zcGNhcCIgOzsKICAgICAicGNhcF9zZXRfdHN0YW1wX3ByZWNpc2lvbi4zcGNhcCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwY2FwX3NldF90c3RhbXBfcHJlY2lzaW9uLjNwY2FwIiA7OwogICAgICJwY2FwX3NldF90c3RhbXBfdHlwZS4zcGNhcCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBwY2FwX3NldF90c3RhbXBfdHlwZS4zcGNhcCIgOzsKICAgICAicnBjYXBkL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHJwY2FwZC9NYWtlZmlsZSIgOzsKICAgICAicnBjYXBkL3JwY2FwZC5tYW5hZG1pbiIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBycGNhcGQvcnBjYXBkLm1hbmFkbWluIiA7OworICAgICJycGNhcGQvcnBjYXBkLWNvbmZpZy5tYW5maWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHJwY2FwZC9ycGNhcGQtY29uZmlnLm1hbmZpbGUiIDs7CiAgICAgInRlc3Rwcm9ncy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cHJvZ3MvTWFrZWZpbGUiIDs7CiAKICAgKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgYXJndW1lbnQ6IFxgJGFjX2NvbmZpZ190YXJnZXQnIiAiJExJTkVOTyIgNTs7CmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggZWZmNmViOC4uMmFkMjhiYiAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtOCw3ICs4LDcgQEAKICMKICMgU2VlCiAjCi0jCWh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvY29uZmlnL1JFQURNRQorIwlodHRwczovL2Z0cC5nbnUub3JnL2dudS9jb25maWcvUkVBRE1FCiAjCiAjIGZvciB0aGUgVVJMcyB0byB1c2UgdG8gZmV0Y2ggbmV3IHZlcnNpb25zIG9mIGNvbmZpZy5ndWVzcyBhbmQKICMgY29uZmlnLnN1Yi4KQEAgLTI0LDEwICsyNCwyMyBAQAogCiBBQ19MQkxfQ19JTklUX0JFRk9SRV9DQyhWX0NDT1BULCBWX0lOQ0xTKQogIwotIyBUcnkgdG8gZW5hYmxlIGFzIG1hbnkgQzk5IGZlYXR1cmVzIGFzIHdlIGNhbi4KLSMgQXQgbWluaW11bSwgd2Ugd2FudCBDKysvQzk5LXN0eWxlIC8vIGNvbW1lbnRzLgorIyBXZSByZXF1aXJlIEM5OSBvciBsYXRlci4KKyMgVHJ5IHRvIGdldCBpdCwgd2hpY2ggbWF5IGludm9sdmUgYWRkaW5nIGNvbXBpbGVyIGZsYWdzOworIyBpZiB0aGF0IGZhaWxzLCBnaXZlIHVwLgogIwogQUNfUFJPR19DQ19DOTkKK2lmIHRlc3QgIiRhY19jdl9wcm9nX2NjX2M5OSIgPSAibm8iOyB0aGVuCisJQUNfTVNHX0VSUk9SKFtUaGUgQyBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IEM5OV0pCitmaQorY2FzZSAiJGhvc3Rfb3MiIGluCitoYWlrdSopCisJIworCSMgSGFpa3UncyBwbGF0Zm9ybSBmaWxlIGlzIGluIEMrKy4KKwkjCisJQUNfUFJPR19DWFgKKwk7OworZXNhYworCiBBQ19MQkxfQ19JTklUKFZfQ0NPUFQsIFZfSU5DTFMpCiBBQ19MQkxfU0hMSUJTX0lOSVQKIEFDX0xCTF9DX0lOTElORQpAQCAtNDcsNyArNjAsNyBAQAogZG5sIGFuZCBzZXQgIkhBVkVfU1lTX0lPQ0NPTV9IIiBpZiB3ZSBoYXZlIGl0LCBvdGhlcndpc2UKIGRubCAiQUNfTEJMX0ZJWElOQ0xVREVTIiB3b3VsZG4ndCB3b3JrIG9uIHNvbWUgcGxhdGZvcm1zIHN1Y2ggYXMgU29sYXJpcy4KIGRubAotQUNfQ0hFQ0tfSEVBREVSUyhzeXMvaW9jY29tLmggc3lzL3NvY2tpby5oIGxpbWl0cy5oKQorQUNfQ0hFQ0tfSEVBREVSUyhzeXMvaW9jY29tLmggc3lzL3NvY2tpby5oKQogQUNfQ0hFQ0tfSEVBREVSUyhuZXRwYWNrZXQvcGFja2V0LmgpCiBBQ19DSEVDS19IRUFERVJTKG5ldC9wZnZhci5oLCAsICwgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CkBAIC03MiwyNCArODUsOTEgQEAKIGZpCiAKIGNhc2UgIiRob3N0X29zIiBpbgotbGludXgqfHVjbGludXgqKQotCUFDX0NIRUNLX0hFQURFUlMobGludXgvc29ja2lvcy5oIGxpbnV4L2lmX2JvbmRpbmcuaCwsLAotCVsKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaWYuaD4KLQldKQoraGFpa3UqKQorCSMKKwkjIEhhaWt1IG5lZWRzIF9CU0RfU09VUkNFIGZvciB0aGUgX0lPKiBtYWNyb3MgYmVjYXVzZSBpdCBkb2Vzbid0IHVzZSB0aGVtLgorCSMKKwlDRkxBR1M9IiRDRkxBR1MgLURfQlNEX1NPVVJDRSIKIAk7OwogZXNhYwogCiBBQ19MQkxfRklYSU5DTFVERVMKIAotQUNfQ0hFQ0tfRlVOQ1Moc3RyZXJyb3Igc3RyZXJyb3JfciBzdHJlcnJvcl9zIHN0cmxjcHkgc3RybGNhdCkKK0FDX0NIRUNLX0ZVTkNTKHN0cmVycm9yKQorQUNfQ0hFQ0tfRlVOQyhzdHJlcnJvcl9yLAorICAgIFsKKwkjCisJIyBXZSBoYXZlIHN0cmVycm9yX3I7IGlmIHdlIGRlZmluZSBfR05VX1NPVVJDRSwgaXMgaXQgYQorCSMgUE9TSVgtY29tcGxpYW50IHN0cmVycm9yX3IoKSBvciBhIEdOVSBzdHJlcnJvcl9yKCk/CisJIworCUFDX01TR19DSEVDS0lORyh3aGV0aGVyIHN0cmVycm9yX3IgaXMgR05VLXN0eWxlKQorCUFDX0NPTVBJTEVfSUZFTFNFKAorCSAgICBbCisJCUFDX0xBTkdfU09VUkNFKAorI2RlZmluZSBfR05VX1NPVVJDRQorI2luY2x1ZGUgPHN0cmluZy5oPgogCi1uZWVkc25wcmludGY9bm8KLUFDX0NIRUNLX0ZVTkNTKHZzbnByaW50ZiBzbnByaW50ZiwsCi0JW25lZWRzbnByaW50Zj15ZXNdKQotaWYgdGVzdCAkbmVlZHNucHJpbnRmID0geWVzOyB0aGVuCi0JQUNfTElCT0JKKFtzbnByaW50Zl0pCisvKiBEZWZpbmUgaXQgR05VLXN0eWxlOyB0aGF0IHdpbGwgY2F1c2UgYW4gZXJyb3IgaWYgaXQncyBub3QgR05VLXN0eWxlICovCitleHRlcm4gY2hhciAqc3RyZXJyb3JfcihpbnQsIGNoYXIgKiwgc2l6ZV90KTsKKworaW50CittYWluKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CispCisJICAgIF0sCisJICAgIFsKKwkgICAgICAgICMgR05VLXN0eWxlCisJCUFDX01TR19SRVNVTFQoeWVzKQorCQlBQ19ERUZJTkUoSEFWRV9HTlVfU1RSRVJST1JfUiwsCisJCSAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSBHTlUtc3R5bGUgYHN0cmVycm9yX3InIGZ1bmN0aW9uLl0pCisJICAgIF0sCisJICAgIFsKKwkJQUNfTVNHX1JFU1VMVChubykKKwkJQUNfREVGSU5FKEhBVkVfUE9TSVhfU1RSRVJST1JfUiwsCisJCSAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYSBQT1NJWC1zdHlsZSBgc3RyZXJyb3JfcicgZnVuY3Rpb24uXSkKKwkgICAgXSkKKyAgICBdLAorICAgIFsKKwkjCisJIyBXZSBkb24ndCBoYXZlIHN0cmVycm9yX3I7IGRvIHdlIGhhdmUgX3djc2Vycm9yX3M/CisJIworCUFDX0NIRUNLX0ZVTkNTKF93Y3NlcnJvcl9zKQorICAgIF0pCisKKyMKKyMgVGhhbmtzLCBJQk0sIGZvciBub3QgcHJvdmlkaW5nIHZzeXNsb2coKSBpbiBBSVghCisjCitBQ19DSEVDS19GVU5DUyh2c3lzbG9nKQorCisjCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIHZzbnByaW50ZigpIGFuZCBzbnByaW50ZigpOyB3ZSByZXF1aXJlIHRoZW0uCisjCitBQ19DSEVDS19GVU5DKHZzbnByaW50ZiwsCisgICAgQUNfTVNHX0VSUk9SKFt2c25wcmludGYoKSBpcyByZXF1aXJlZCBidXQgd2Fzbid0IGZvdW5kXSkpCitBQ19DSEVDS19GVU5DKHNucHJpbnRmLCwKKyAgICBBQ19NU0dfRVJST1IoW3NucHJpbnRmKCkgaXMgcmVxdWlyZWQgYnV0IHdhc24ndCBmb3VuZF0pKQorCituZWVkYXNwcmludGY9bm8KK0FDX0NIRUNLX0ZVTkNTKHZhc3ByaW50ZiBhc3ByaW50ZiwsCisJW25lZWRhc3ByaW50Zj15ZXNdKQoraWYgdGVzdCAkbmVlZGFzcHJpbnRmID0geWVzOyB0aGVuCisJQUNfTElCT0JKKFthc3ByaW50Zl0pCitmaQorCituZWVkc3RybGNhdD1ubworQUNfQ0hFQ0tfRlVOQ1Moc3RybGNhdCwsCisJW25lZWRzdHJsY2F0PXllc10pCitpZiB0ZXN0ICRuZWVkc3RybGNhdCA9IHllczsgdGhlbgorCUFDX0xJQk9CSihbc3RybGNhdF0pCitmaQorCituZWVkc3RybGNweT1ubworQUNfQ0hFQ0tfRlVOQ1Moc3RybGNweSwsCisJW25lZWRzdHJsY3B5PXllc10pCitpZiB0ZXN0ICRuZWVkc3RybGNweSA9IHllczsgdGhlbgorCUFDX0xJQk9CSihbc3RybGNweV0pCiBmaQogCiBuZWVkc3RydG9rX3I9bm8KQEAgLTUxMCwyMCArNTkwLDYgQEAKICMKIFZBTEdSSU5EVEVTVF9TUkM9CiAKLSMKLSMgU0lUQSBzdXBwb3J0IGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIG5hdGl2ZSBjYXB0dXJlIHN1cHBvcnQ7Ci0jICItLXdpdGgtc2l0YSIgc2VsZWN0cyBTSVRBIHN1cHBvcnQuCi0jCi1BQ19BUkdfV0lUSChzaXRhLAotQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1zaXRhXSxbaW5jbHVkZSBTSVRBIHN1cHBvcnRdKSwKLVsKLQlpZiB0ZXN0ICEgIngkd2l0aHZhbCIgPSAieG5vIiA7IHRoZW4KLQkJQUNfREVGSU5FKFNJVEEsMSxbaW5jbHVkZSBBQ04gc3VwcG9ydF0pCi0JCUFDX01TR19OT1RJQ0UoRW5hYmxpbmcgU0lUQSBBQ04gc3VwcG9ydCkKLQkJVl9QQ0FQPXNpdGEKLQlmaQotXSwKLVsKIEFDX0FSR19XSVRIKHBjYXAsCiBBQ19IRUxQX1NUUklORyhbLS13aXRoLXBjYXA9VFlQRV0sW3VzZSBwYWNrZXQgY2FwdHVyZSBUWVBFXSkpCiBpZiB0ZXN0ICEgLXogIiR3aXRoX3BjYXAiIDsgdGhlbgpAQCAtNTUwLDYgKzYxNiwxMCBAQAogCQkjICByZXF1aXJlcyB0aGF0IHZhcmlvdXMgQlNELXN0eWxlIGludGVnZXIgdHlwZXMKIAkJIyAgYmUgZGVmaW5lZDsKIAkJIworCQkjICBzeXMvdGltZS5oLCBiZWNhdXNlIEFJWCA1LjIgYW5kIDUuMydzIG5ldC9icGYuaAorCQkjICBkb2Vzbid0IGluY2x1ZGUgaXQgYnV0IGRvZXMgdXNlIHN0cnVjdCB0aW1ldmFsCisJCSMgIGluIGlvY3RsIGRlZmluaXRpb25zOworCQkjCiAJCSMgIHN5cy9pb2N0bC5oIGFuZCwgaWYgd2UgaGF2ZSBpdCwgc3lzL2lvY2NvbS5oLAogCQkjICBiZWNhdXNlIG5ldC9icGYuaCBkZWZpbmVzIGlvY3RsczsKIAkJIwpAQCAtNTY4LDYgKzYzOCw3IEBACiAJCQlBQ19UUllfQ09NUElMRSgKIFsKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpZmRlZiBIQVZFX1NZU19JT0NDT01fSApAQCAtNTg0LDYgKzY1NSw3IEBACiAJQUNfQ0hFQ0tfSEVBREVSUyhuZXQvcGZpbHQuaCBuZXQvZW5ldC5oKQogCUFDX0NIRUNLX0hFQURFUlMobmV0L25pdC5oIHN5cy9uZXQvbml0LmgpCiAJQUNfQ0hFQ0tfSEVBREVSUyhsaW51eC9zb2NrZXQuaCBuZXQvcmF3Lmggc3lzL2RscGkuaCkKKwlBQ19DSEVDS19IRUFERVJTKGNvbmZpZy9IYWlrdUNvbmZpZy5oKQogCiAJaWYgdGVzdCAiJGFjX2N2X2xibF9icGZfaF9kZWZpbmVzX2Jpb2NzZXRpZiIgPSB5ZXM7IHRoZW4KIAkJIwpAQCAtNjA5LDExICs2ODEsNiBAQAogCQkjIE5vIHByaXplcyBmb3IgZ3Vlc3NpbmcgdGhpcyBvbmUuCiAJCSMKIAkJVl9QQ0FQPWxpbnV4Ci0KLQkJIwotCQkjIFhYWCAtIHRoaXMgd29uJ3Qgd29yayB3aXRoIG9sZGVyIGtlcm5lbHMgdGhhdCBoYXZlCi0JCSMgU09DS19QQUNLRVQgc29ja2V0cyBidXQgbm90IFBGX1BBQ0tFVCBzb2NrZXRzLgotCQkjCiAJCVZBTEdSSU5EVEVTVF9TUkM9dmFsZ3JpbmR0ZXN0LmMKIAllbGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfbmV0X3BmaWx0X2giID0geWVzOyB0aGVuCiAJICAgICAgICAjCkBAIC02NDUsNiArNzEyLDExIEBACiAJCSMgRExQSSBvbiBwcmUtU29sYXJpcyAxMSBTdW5PUyA1LCBIUC1VWCwgcG9zc2libHkgb3RoZXJzLgogCQkjCiAJCVZfUENBUD1kbHBpCisJZWxpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX2NvbmZpZ19IYWlrdUNvbmZpZ19oIiA9IHllczsgdGhlbgorCQkjCisJCSMgSGFpa3UuCisJCSMKKwkJVl9QQ0FQPWhhaWt1CiAJZWxzZQogCQkjCiAJCSMgTm90aGluZyB3ZSBzdXBwb3J0LgpAQCAtNjU5LDE2ICs3MzEsMTYgQEAKIEFDX1NVQlNUKFZBTEdSSU5EVEVTVF9TUkMpCiAKICMKLSMgRG8gY2FwdHVyZS1tZWNoYW5pc20tZGVwZW5kZW50IHRlc3RzLgorIyBEbyB3ZSBoYXZlIHBrZy1jb25maWc/CisjCitBQ19DSEVDS19QUk9HKFtQS0dDT05GSUddLCBbcGtnLWNvbmZpZ10sIFtwa2ctY29uZmlnXSwgW25vXSkKKworIworIyBIYW5kbGUgZWFjaCBjYXB0dXJlIHR5cGUuCiAjCiBjYXNlICIkVl9QQ0FQIiBpbgogZGxwaSkKIAkjCi0JIyBOZWVkZWQgZm9yIGNvbW1vbiBmdW5jdGlvbnMgdXNlZCBieSBwY2FwLVtkbHBpLGxpYmRscGldLmMKLQkjCi0gCVNTUkM9ImRscGlzdWJzLmMiCi0KLQkjCiAJIyBDaGVja3MgZm9yIHNvbWUgaGVhZGVyIGZpbGVzLgogCSMKIAlBQ19DSEVDS19IRUFERVJTKHN5cy9idWZtb2QuaCBzeXMvZGxwaV9leHQuaCkKQEAgLTY4NCwxNiArNzU2LDMwIEBACiAJIyBBbHNvLCBkdWUgdG8gdGhlIGJ1ZyBhYm92ZSBhcHBsaWNhdGlvbnMgdGhhdCBsaW5rIHRvIGxpYnBjYXAgd2l0aAogCSMgbGliZGxwaSB3aWxsIGhhdmUgdG8gYWRkICItTC9saWIiIG9wdGlvbiB0byAiY29uZmlndXJlIi4KIAkjCi0Jc2F2ZWRfbGRmbGFncz0kTERGTEFHUworCXNhdmVfTERGTEFHUz0iJExERkxBR1MiCiAJTERGTEFHUz0iJExJQlMgLUwvbGliIgogCUFDX0NIRUNLX0xJQihkbHBpLCBkbHBpX3dhbGssCiAJCVsKIAkJCUxJQlM9Ii1sZGxwaSAkTElCUyIKIAkJCVZfUENBUD1saWJkbHBpCisKKwkJCSMKKwkJCSMgQ2FwdHVyZSBtb2R1bGUgcGx1cyBjb21tb24gY29kZSBuZWVkZWQgZm9yCisJCQkjIGNvbW1vbiBmdW5jdGlvbnMgdXNlZCBieSBwY2FwLVtkbHBpLGxpYmRscGldLmMKKwkJCSMKKwkJCVBMQVRGT1JNX0NfU1JDPSJwY2FwLWxpYmRscGkuYyBkbHBpc3Vicy5jIgogCQkJQUNfREVGSU5FKEhBVkVfTElCRExQSSwxLFtpZiBsaWJkbHBpIGV4aXN0c10pCiAJCV0sCi0JCVZfUENBUD1kbHBpKQotCUxERkxBR1M9JHNhdmVkX2xkZmxhZ3MKKwkJWworCQkJVl9QQ0FQPWRscGkKKworCQkJIworCQkJIyBDYXB0dXJlIG1vZHVsZSBwbHVzIGNvbW1vbiBjb2RlIG5lZWRlZCBmb3IKKwkJCSMgY29tbW9uIGZ1bmN0aW9ucyB1c2VkIGJ5IHBjYXAtW2RscGksbGliZGxwaV0uYworCQkJIworCQkJUExBVEZPUk1fQ19TUkM9InBjYXAtZGxwaS5jIGRscGlzdWJzLmMiCisJCV0pCisJTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKIAogCSMKIAkjIENoZWNrcyB3aGV0aGVyIDxzeXMvZGxwaS5oPiBpcyB1c2FibGUsIHRvIGNhdGNoIHdlaXJkIFNDTwpAQCAtNzI4LDggKzgxNCwzMiBAQAogCSAgICBdKQogCTs7CiAKK2VuZXQpCisJIworCSMgQ2FwdHVyZSBtb2R1bGUKKwkjCisgCVBMQVRGT1JNX0NfU1JDPSJwY2FwLWVuZXQuYyIKKwk7OworCitoYWlrdSkKKwkjCisJIyBDYXB0dXJlIG1vZHVsZQorCSMKKyAJUExBVEZPUk1fQ1hYX1NSQz0icGNhcC1oYWlrdS5jcHAiCisKKwkjCisJIyBKdXN0IGZvciB0aGUgc2FrZSBvZiBpdC4KKwkjCisJQUNfQ0hFQ0tfSEVBREVSUyhuZXQvaWYuaCBuZXQvaWZfZGwuaCBuZXQvaWZfdHlwZXMuaCkKKwk7OworCiBsaW51eCkKIAkjCisJIyBDYXB0dXJlIG1vZHVsZQorCSMKKyAJUExBVEZPUk1fQ19TUkM9InBjYXAtbGludXguYyIKKworCSMKIAkjIERvIHdlIGhhdmUgdGhlIHdpcmVsZXNzIGV4dGVuc2lvbnM/CiAJIwogCUFDX0NIRUNLX0hFQURFUlMobGludXgvd2lyZWxlc3MuaCwgW10sIFtdLApAQCAtNzQxLDEwNyArODUxLDc4IEBACiAKIAkjCiAJIyBEbyB3ZSBoYXZlIGxpYm5sPworCSMgV2Ugb25seSB3YW50IHZlcnNpb24gMy4gIFZlcnNpb24gMiB3YXMsIGFwcGFyZW50bHksCisJIyBzaG9ydC1saXZlZCwgYW5kIHZlcnNpb24gMSBpcyBzb3VyY2UgYW5kIGJpbmFyeQorCSMgaW5jb21wYXRpYmxlIHdpdGggdmVyc2lvbiAzLCBhbmQgaXQgYXBwZWFycyB0aGF0LAorCSMgdGhlc2UgZGF5cywgZXZlcnlib2R5J3MgdXNpbmcgdmVyc2lvbiAzLiAgV2UncmUKKwkjIG5vdCBzdXBwb3J0aW5nIG9sZGVyIHZlcnNpb25zIG9mIHRoZSBMaW51eCBrZXJuZWw7CisJIyBsZXQncyBkcm9wIHN1cHBvcnQgZm9yIG9sZGVyIHZlcnNpb25zIG9mIGxpYm5sLCB0b28uCiAJIwogCUFDX0FSR19XSVRIKGxpYm5sLAogCUFDX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtbGlibmxdLFtkaXNhYmxlIGxpYm5sIHN1cHBvcnQgQDw6QGRlZmF1bHQ9eWVzLCBvbiBMaW51eCwgaWYgcHJlc2VudEA6PkBdKSwKIAkJd2l0aF9saWJubD0kd2l0aHZhbCx3aXRoX2xpYm5sPWlmX2F2YWlsYWJsZSkKIAogCWlmIHRlc3QgeCR3aXRoX2xpYm5sICE9IHhubyA7IHRoZW4KLQkJaGF2ZV9hbnlfbmw9Im5vIgotCi0gICAgICAgICAgICAgICAgaW5jZGlyPS1JL3Vzci9pbmNsdWRlL2xpYm5sMwotICAgICAgICAgICAgICAgIGxpYm5sZGlyPQotICAgICAgICAgICAgICAgIGNhc2UgIiR3aXRoX2xpYm5sIiBpbgotCi0gICAgICAgICAgICAgICAgeWVzfGlmX2F2YWlsYWJsZSkKLSAgICAgICAgICAgICAgICAgIDs7Ci0KLSAgICAgICAgICAgICAgICAqKQotICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAkd2l0aHZhbDsgdGhlbgotICAgICAgICAgICAgICAgICAgICBsaWJubGRpcj0tTCR7d2l0aHZhbH0vbGliLy5saWJzCi0gICAgICAgICAgICAgICAgICAgIGluY2Rpcj0tSSR7d2l0aHZhbH0vaW5jbHVkZQotICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICAgZXNhYwotCi0JCSMKLQkJIyBUcnkgbGlibmwgMy54IGZpcnN0LgotCQkjCi0JCUFDX0NIRUNLX0xJQihubC0zLCBubF9zb2NrZXRfYWxsb2MsCi0JCVsKKwkJaWYgdGVzdCAieCRQS0dDT05GSUciICE9ICJ4bm8iOyB0aGVuCiAJCQkjCi0JCQkjIFllcywgd2UgaGF2ZSBsaWJubCAzLnguCisJCQkjIFdlIGhhdmUgcGtnLWNvbmZpZzsgc2VlIGlmIHdlIGhhdmUgbGlibmwtZ2VubC0zLjAKKwkJCSMgYXMgYSBwYWNrYWdlLgogCQkJIwotCQkJTElCUz0iJHtsaWJubGRpcn0gLWxubC1nZW5sLTMgLWxubC0zICRMSUJTIgotCQkJQUNfREVGSU5FKEhBVkVfTElCTkwsMSxbaWYgbGlibmwgZXhpc3RzXSkKLQkJCUFDX0RFRklORShIQVZFX0xJQk5MXzNfeCwxLFtpZiBsaWJubCBleGlzdHMgYW5kIGlzIHZlcnNpb24gMy54XSkKLQkJCUFDX0RFRklORShIQVZFX0xJQk5MX05MRSwxLFtsaWJubCBoYXMgTkxFX0ZBSUxVUkVdKQotCQkJQUNfREVGSU5FKEhBVkVfTElCTkxfU09DS0VUUywxLFtsaWJubCBoYXMgbmV3LXN0eWxlIHNvY2tldCBhcGldKQotCQkJVl9JTkNMUz0iJFZfSU5DTFMgJHtpbmNkaXJ9IgotCQkJaGF2ZV9hbnlfbmw9InllcyIKLQkJXSxbXSwgJHtpbmNkaXJ9ICR7bGlibmxkaXJ9IC1sbmwtZ2VubC0zIC1sbmwtMyApCi0KLQkJaWYgdGVzdCB4JGhhdmVfYW55X25sID0geG5vIDsgdGhlbgotCQkJIwotCQkJIyBUcnkgbGlibmwgMi54Ci0JCQkjCi0JCQlBQ19DSEVDS19MSUIobmwsIG5sX3NvY2tldF9hbGxvYywKLQkJCVsKLQkJCQkjCi0JCQkJIyBZZXMsIHdlIGhhdmUgbGlibmwgMi54LgotCQkJCSMKLQkJCQlMSUJTPSIke2xpYm5sZGlyfSAtbG5sLWdlbmwgLWxubCAkTElCUyIKKwkJCUFDX01TR19DSEVDS0lORyhbZm9yIGxpYm5sLWdlbmwtMy4wIHdpdGggcGtnLWNvbmZpZ10pCisJCQlpZiAiJFBLR0NPTkZJRyIgbGlibmwtZ2VubC0zLjA7IHRoZW4KKwkJCQlBQ19NU0dfUkVTVUxUKFtmb3VuZF0pCisJCQkJcGtnX2NvbmZpZ19mb3VuZF9saWJubD15ZXMKKwkJCQlsaWJubF9nZW5sX2NmbGFncz1gIiRQS0dDT05GSUciIC0tY2ZsYWdzIGxpYm5sLWdlbmwtMy4wYAorCQkJCVZfSU5DTFM9IiRWX0lOQ0xTICR7bGlibmxfZ2VubF9jZmxhZ3N9IgorCQkJCWxpYm5sX2dlbmxfbGlicz1gIiRQS0dDT05GSUciIC0tbGlicyBsaWJubC1nZW5sLTMuMGAKKwkJCQlMSUJTPSIke2xpYm5sX2dlbmxfbGlic30gJExJQlMiCiAJCQkJQUNfREVGSU5FKEhBVkVfTElCTkwsMSxbaWYgbGlibmwgZXhpc3RzXSkKLQkJCQlBQ19ERUZJTkUoSEFWRV9MSUJOTF8yX3gsMSxbaWYgbGlibmwgZXhpc3RzIGFuZCBpcyB2ZXJzaW9uIDIueF0pCi0JCQkJQUNfREVGSU5FKEhBVkVfTElCTkxfTkxFLDEsW2xpYm5sIGhhcyBOTEVfRkFJTFVSRV0pCi0JCQkJQUNfREVGSU5FKEhBVkVfTElCTkxfU09DS0VUUywxLFtsaWJubCBoYXMgbmV3LXN0eWxlIHNvY2tldCBhcGldKQotCQkJCWhhdmVfYW55X25sPSJ5ZXMiCi0JCQldKQotCQlmaQotCi0JCWlmIHRlc3QgeCRoYXZlX2FueV9ubCA9IHhubyA7IHRoZW4KLQkJCSMKLQkJCSMgTm8sIHdlIGRvbid0OyBkbyB3ZSBoYXZlIGxpYm5sIDEueD8KLQkJCSMKLQkJCUFDX0NIRUNLX0xJQihubCwgbmxfaGFuZGxlX2FsbG9jLAotCQkJWwotCQkJCSMKLQkJCQkjIFllcy4KLQkJCQkjCi0JCQkJTElCUz0iJHtsaWJubGRpcn0gLWxubCAkTElCUyIKLQkJCQlBQ19ERUZJTkUoSEFWRV9MSUJOTCwxLFtpZiBsaWJubCBleGlzdHNdKQotCQkJCWhhdmVfYW55X25sPSJ5ZXMiCi0JCQldKQotCQlmaQotCi0JCWlmIHRlc3QgeCRoYXZlX2FueV9ubCA9IHhubyA7IHRoZW4KLQkJCSMKLQkJCSMgTm8sIHdlIGRvbid0IGhhdmUgbGlibmwgYXQgYWxsLgotCQkJIwotCQkJaWYgdGVzdCB4JHdpdGhfbGlibmwgPSB4eWVzIDsgdGhlbgotCQkJCUFDX01TR19FUlJPUihbbGlibmwgc3VwcG9ydCByZXF1ZXN0ZWQgYnV0IGxpYm5sIG5vdCBmb3VuZF0pCisJCQllbHNlCisJCQkJQUNfTVNHX1JFU1VMVChbbm90IGZvdW5kXSkKIAkJCWZpCiAJCWZpCisKKwkJaWYgdGVzdCB4JHBrZ19jb25maWdfZm91bmRfbGlibmwgIT0geHllczsgdGhlbgorCQkJIworCQkJIyBPSywgZWl0aGVyIHdlIGRvbid0IGhhdmUgcGtnLWNvbmZpZyBvciB0aGVyZQorCQkJIyB3YXNuJ3QgYSAucGMgZmlsZSBmb3IgaXQ7IENoZWNrIGZvciBpdCBkaXJlY3RseS4KKwkJCSMKKwkJCWNhc2UgIiR3aXRoX2xpYm5sIiBpbgorCisJCQl5ZXN8aWZfYXZhaWxhYmxlKQorCQkJCWluY2Rpcj0tSS91c3IvaW5jbHVkZS9saWJubDMKKwkJCQlsaWJubGRpcj0KKwkJCQk7OworCisJCQkqKQorCQkJCWlmIHRlc3QgLWQgJHdpdGh2YWw7IHRoZW4KKwkJCQkJbGlibmxkaXI9LUwke3dpdGh2YWx9L2xpYgorCQkJCQlpbmNkaXI9LUkke3dpdGh2YWx9L2luY2x1ZGUKKwkJCQlmaQorCQkJCTs7CisJCQllc2FjCisKKwkJCUFDX0NIRUNLX0xJQihubC0zLCBubF9zb2NrZXRfYWxsb2MsCisJCQlbCisJCQkJIworCQkJCSMgWWVzLCB3ZSBoYXZlIGxpYm5sIDMueC4KKwkJCQkjCisJCQkJTElCUz0iJHtsaWJubGRpcn0gLWxubC1nZW5sLTMgLWxubC0zICRMSUJTIgorCQkJCUFDX0RFRklORShIQVZFX0xJQk5MLDEsW2lmIGxpYm5sIGV4aXN0c10pCisJCQkJVl9JTkNMUz0iJFZfSU5DTFMgJHtpbmNkaXJ9IgorCQkJXSxbCisJCQkJIworCQkJCSMgTm8sIHdlIGRvbid0IGhhdmUgbGlibmwgYXQgYWxsLgorCQkJCSMgRmFpbCBpZiB0aGUgdXNlciBleHBsaWNpdGx5IHJlcXVlc3RlZAorCQkJCSMgaXQuCisJCQkJIworCQkJCWlmIHRlc3QgeCR3aXRoX2xpYm5sID0geHllcyA7IHRoZW4KKwkJCQkJQUNfTVNHX0VSUk9SKFtsaWJubCBzdXBwb3J0IHJlcXVlc3RlZCBidXQgbGlibmwgbm90IGZvdW5kXSkKKwkJCQlmaQorCQkJXSwgJHtpbmNkaXJ9ICR7bGlibmxkaXJ9IC1sbmwtZ2VubC0zIC1sbmwtMyApCisJCWZpCiAJZmkKIAotCUFDX0NIRUNLX0hFQURFUlMobGludXgvZXRodG9vbC5oLCwsCi0JICAgIFsKLUFDX0lOQ0xVREVTX0RFRkFVTFQKLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCSAgICBdKQotCi0JIwotCSMgQ2hlY2sgdG8gc2VlIGlmIHN0cnVjdCB0cGFja2V0X3N0YXRzIGlzIGRlZmluZWQgaW4KLQkjIDxsaW51eC9pZl9wYWNrZXQuaD4uICBJZiBzbywgdGhlbiBwY2FwLWxpbnV4LmMgY2FuIHVzZSB0aGlzCi0JIyB0byByZXBvcnQgcHJvcGVyIHN0YXRpc3RpY3MuCi0JIwotCSMgLVNjb3R0IEJhcnJvbgotCSMKLQlBQ19DSEVDS19UWVBFUyhzdHJ1Y3QgdHBhY2tldF9zdGF0cywsLAotCSAgICBbCi0JCSNpbmNsdWRlIDxsaW51eC9pZl9wYWNrZXQuaD4KLQkgICAgXSkKLQogCSMKIAkjIENoZWNrIHRvIHNlZSBpZiB0aGUgdHBhY2tldF9hdXhkYXRhIHN0cnVjdCBoYXMgYSB0cF92bGFuX3RjaSBtZW1iZXIuCiAJIwpAQCAtODU5LDYgKzk0MCwxMSBAQAogCiBicGYpCiAJIworCSMgQ2FwdHVyZSBtb2R1bGUKKwkjCisgCVBMQVRGT1JNX0NfU1JDPSJwY2FwLWJwZi5jIgorCisJIwogCSMgQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRoZSAqQlNELXN0eWxlIGlvY3Rscy4KIAkjCiAJQUNfQ0hFQ0tfSEVBREVSUyhuZXQvaWZfbWVkaWEuaCkKQEAgLTg3NywxMiArOTYzLDQ0IEBACiAJICAgIF0pCiAJOzsKIAorcGYpCisJIworCSMgQ2FwdHVyZSBtb2R1bGUKKwkjCisgCVBMQVRGT1JNX0NfU1JDPSJwY2FwLXBmLmMiCisJOzsKKworc25pdCkKKwkjCisJIyBDYXB0dXJlIG1vZHVsZQorCSMKKyAJUExBVEZPUk1fQ19TUkM9InBjYXAtc25pdC5jIgorCTs7CisKK3Nub29wKQorCSMKKwkjIENhcHR1cmUgbW9kdWxlCisJIworIAlQTEFURk9STV9DX1NSQz0icGNhcC1zbm9vcC5jIgorCTs7CisKIGRhZykKIAkjCiAJIyAtLXdpdGgtcGNhcD1kYWcgaXMgdGhlIG9ubHkgd2F5IHRvIGdldCBoZXJlLCBhbmQgaXQgbWVhbnMKIAkjICJEQUcgc3VwcG9ydCBidXQgbm90aGluZyBlbHNlIgogCSMKIAlWX0RFRlM9IiRWX0RFRlMgLUREQUdfT05MWSIKKwlQTEFURk9STV9DX1NSQz0icGNhcC1kYWcuYyIKKwl4eHhfb25seT15ZXMKKwk7OworCitkcGRrKQorCSMKKwkjIC0td2l0aC1wY2FwPWRwZGsgaXMgdGhlIG9ubHkgd2F5IHRvIGdldCBoZXJlLCBhbmQgaXQgbWVhbnMKKwkjICJEUERLIHN1cHBvcnQgYnV0IG5vdGhpbmcgZWxzZSIKKwkjCisJVl9ERUZTPSIkVl9ERUZTIC1ERFBES19PTkxZIgorCVBMQVRGT1JNX0NfU1JDPSJwY2FwLWRwZGsuYyIKIAl4eHhfb25seT15ZXMKIAk7OwogCkBAIC04OTIsNiArMTAxMCw3IEBACiAJIyAiU2VwdGVsIHN1cHBvcnQgYnV0IG5vdGhpbmcgZWxzZSIKIAkjCiAJVl9ERUZTPSIkVl9ERUZTIC1EU0VQVEVMX09OTFkiCisJUExBVEZPUk1fQ19TUkM9InBjYXAtc2VwdGVsLmMiCiAJeHh4X29ubHk9eWVzCiAJOzsKIApAQCAtOTAxLDEwICsxMDIwLDE1IEBACiAJIyAiU05GIHN1cHBvcnQgYnV0IG5vdGhpbmcgZWxzZSIKIAkjCiAJVl9ERUZTPSIkVl9ERUZTIC1EU05GX09OTFkiCisJUExBVEZPUk1fQ19TUkM9InBjYXAtc25mLmMiCiAJeHh4X29ubHk9eWVzCiAJOzsKIAogbnVsbCkKKwkjCisJIyBDYXB0dXJlIG1vZHVsZQorCSMKKyAJUExBVEZPUk1fQ19TUkM9InBjYXAtbnVsbC5jIgogCTs7CiAKICopCkBAIC05MjksNyArMTA1Myw3IEBACiAJCSAgICAjIFdlIGhhdmUgdGhlIGhlYWRlciwgc28gd2UgdXNlICJnZXRpZmFkZHJzKCkiIHRvCiAJCSAgICAjIGdldCB0aGUgbGlzdCBvZiBpbnRlcmZhY2VzLgogCQkgICAgIwotCQkgICAgVl9GSU5EQUxMREVWUz1mYWQtZ2V0YWQuYworCQkgICAgUExBVEZPUk1fQ19TUkM9IiRQTEFURk9STV9DX1NSQyBmYWQtZ2V0YWQuYyIKIAkJXSxbCiAJCSAgICAjCiAJCSAgICAjIFdlIGRvbid0IGhhdmUgdGhlIGhlYWRlciAtIGdpdmUgdXAuCkBAIC05NzMsMTMgKzEwOTcsMTIgQEAKIAkJCWFjX2N2X2xibF9oYXZlX3Npb2NnbGlmY29uZj1ubykpCiAJCUFDX01TR19SRVNVTFQoJGFjX2N2X2xibF9oYXZlX3Npb2NnbGlmY29uZikKIAkJaWYgdGVzdCAkYWNfY3ZfbGJsX2hhdmVfc2lvY2dsaWZjb25mID0geWVzIDsgdGhlbgotCQkJVl9GSU5EQUxMREVWUz1mYWQtZ2xpZmMuYworCQkJUExBVEZPUk1fQ19TUkM9IiRQTEFURk9STV9DX1NSQyBmYWQtZ2xpZmMuYyIKIAkJZWxzZQotCQkJVl9GSU5EQUxMREVWUz1mYWQtZ2lmYy5jCisJCQlQTEFURk9STV9DX1NSQz0iJFBMQVRGT1JNX0NfU1JDIGZhZC1naWZjLmMiCiAJCWZpCiAJXSkKIGZpCi1dKQogCiBkbmwgY2hlY2sgZm9yIGhhcmR3YXJlIHRpbWVzdGFtcCBzdXBwb3J0CiBjYXNlICIkaG9zdF9vcyIgaW4KQEAgLTk5MSwxNSArMTExNCw2IEBACiAJOzsKIGVzYWMKIAotQUNfQVJHX0VOQUJMRShbcGFja2V0LXJpbmddLAotW0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wYWNrZXQtcmluZ10sW2VuYWJsZSBwYWNrZXQgcmluZyBzdXBwb3J0IG9uIExpbnV4IEA8OkBkZWZhdWx0PXllc0A6PkBdKV0sCi0sZW5hYmxlX3BhY2tldF9yaW5nPXllcykKLQotaWYgdGVzdCAieCRlbmFibGVfcGFja2V0X3JpbmciICE9ICJ4bm8iIDsgdGhlbgotCUFDX0RFRklORShQQ0FQX1NVUFBPUlRfUEFDS0VUX1JJTkcsIDEsIFt1c2UgcGFja2V0IHJpbmcgY2FwdHVyZSBzdXBwb3J0IG9uIExpbnV4IGlmIGF2YWlsYWJsZV0pCi0JQUNfU1VCU1QoUENBUF9TVVBQT1JUX1BBQ0tFVF9SSU5HKQotZmkKLQogIwogIyBDaGVjayBmb3Igc29ja2xlbl90LgogIwpAQCAtMTA4NCwyMiArMTE5OCwzMSBAQAogCiAJaWYgdGVzdCAteiAiJGRhZ19saWJfZGlyIjsgdGhlbgogCQlkYWdfbGliX2Rpcj0iJGRhZ19yb290L2xpYiIKKwkJIworCQkjIEhhbmRsZSBtdWx0aWFyY2ggc3lzdGVtcy4KKwkJIworCQlpZiB0ZXN0IC1kICIkZGFnX2xpYl9kaXIvJGhvc3QiCisJCXRoZW4KKwkJCWRhZ19saWJfZGlyPSIkZGFnX2xpYl9kaXIvJGhvc3QiCisJCWZpCiAJZmkKIAotCVZfSU5DTFM9IiRWX0lOQ0xTIC1JJGRhZ19pbmNsdWRlX2RpciIKLQorCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCUNGTEFHUz0iJENGTEFHUyAtSSRkYWdfaW5jbHVkZV9kaXIiCiAJQUNfQ0hFQ0tfSEVBREVSUyhbZGFnYXBpLmhdKQogCiAJaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9kYWdhcGlfaCIgPSB5ZXM7IHRoZW4KIAorCQlWX0lOQ0xTPSIkVl9JTkNMUyAtSSRkYWdfaW5jbHVkZV9kaXIiCisKIAkJaWYgdGVzdCAkVl9QQ0FQICE9IGRhZyA7IHRoZW4KLQkJCSBTU1JDPSIkU1NSQyBwY2FwLWRhZy5jIgorCQkJIE1PRFVMRV9DX1NSQz0iJE1PRFVMRV9DX1NSQyBwY2FwLWRhZy5jIgogCQlmaQogCiAJCSMgQ2hlY2sgZm9yIHZhcmlvdXMgREFHIEFQSSBmdW5jdGlvbnMuCiAJCSMgRG9uJ3QgbmVlZCB0byBzYXZlIGFuZCByZXN0b3JlIExJQlMgdG8gcHJldmVudCAtbGRhZyBiZWluZwogCQkjIGluY2x1ZGVkIGlmIHRoZXJlJ3MgYSBmb3VuZC1hY3Rpb24gKGFyZyAzKS4KLQkJc2F2ZWRfbGRmbGFncz0kTERGTEFHUworCQlzYXZlX0xERkxBR1M9IiRMREZMQUdTIgogCQlMREZMQUdTPSItTCRkYWdfbGliX2RpciIKIAkJQUNfQ0hFQ0tfTElCKFtkYWddLCBbZGFnX2F0dGFjaF9zdHJlYW1dLAogCQkgICAgW10sCkBAIC0xMTEwLDcgKzEyMzMsNyBAQAogCQlBQ19DSEVDS19MSUIoW2RhZ10sW2RhZ19nZXRfc3RyZWFtX2VyZl90eXBlc10sIFsKIAkJCUFDX0RFRklORShIQVZFX0RBR19HRVRfU1RSRUFNX0VSRl9UWVBFUywgMSwgW2RlZmluZSBpZiB5b3UgaGF2ZSBkYWdfZ2V0X3N0cmVhbV9lcmZfdHlwZXMoKV0pXSkKIAotCQlMREZMQUdTPSRzYXZlZF9sZGZsYWdzCisJCUxERkxBR1M9IiRzYXZlX0xERkxBR1MiCiAKIAkJIwogCQkjIFdlIGFzc3VtZSB0aGF0IGlmIHdlIGhhdmUgbGliZGFnIHdlIGhhdmUgbGliZGFnY29uZiwKQEAgLTExNDIsMTAgKzEyNjUsMTEgQEAKIAkJZmkKIAogCQlpZiB0ZXN0ICIkd2FudF9kYWciID0geWVzOyB0aGVuCi0JICAgICAgICAJIyBVc2VyIHdhbnRlZCBEQUcgc3VwcG9ydCBidXQgd2UgY291bGRuJ3QgZmluZCBpdC4KKwkJCSMgVXNlciB3YW50ZWQgREFHIHN1cHBvcnQgYnV0IHdlIGNvdWxkbid0IGZpbmQgaXQuCiAJCQlBQ19NU0dfRVJST1IoW0RBRyBzdXBwb3J0IHJlcXVlc3RlZCB3aXRoIC0td2l0aC1kYWcsIGJ1dCB0aGUgREFHIGhlYWRlcnMgd2VyZW4ndCBmb3VuZCBhdCAkZGFnX2luY2x1ZGVfZGlyOiBtYWtlIHN1cmUgdGhlIERBRyBzdXBwb3J0IGlzIGluc3RhbGxlZCwgc3BlY2lmeSBhIGRpZmZlcmVudCBwYXRoIG9yIHBhdGhzIGlmIG5lY2Vzc2FyeSwgb3IgZG9uJ3QgcmVxdWVzdCBEQUcgc3VwcG9ydF0pCiAJCWZpCiAJZmkKKwlDRkxBR1M9IiRzYXZlX0NGTEFHUyIKIGZpCiAKIEFDX0FSR19XSVRIKHNlcHRlbCwKQEAgLTEyMDQsNyArMTMyOCw3IEBACiAJCUFERExBUkNISVZFT0JKUz0iJEFERExBUkNISVZFT0JKUyAkc2VwdGVsX3Rvb2xzX2Rpci9hc2NpaWJpbi5vICRzZXB0ZWxfdG9vbHNfZGlyL2JpdDJieXRlLm8gJHNlcHRlbF90b29sc19kaXIvY29uZmlybS5vICRzZXB0ZWxfdG9vbHNfZGlyL2ZtdG1zZy5vICRzZXB0ZWxfdG9vbHNfZGlyL2djdF91bml4Lm8gJHNlcHRlbF90b29sc19kaXIvaHF1ZXVlLm8gJHNlcHRlbF90b29sc19kaXIvaWRlbnQubyAkc2VwdGVsX3Rvb2xzX2Rpci9tZW0ubyAkc2VwdGVsX3Rvb2xzX2Rpci9wYWNrLm8gJHNlcHRlbF90b29sc19kaXIvcGFyc2UubyAkc2VwdGVsX3Rvb2xzX2Rpci9wb29sLm8gJHNlcHRlbF90b29sc19kaXIvc2Rsc2lnLm8gJHNlcHRlbF90b29sc19kaXIvc3RydG9udW0ubyAkc2VwdGVsX3Rvb2xzX2Rpci90aW1lci5vICRzZXB0ZWxfdG9vbHNfZGlyL3RyYWNlLm8iCiAKIAkJaWYgdGVzdCAiJFZfUENBUCIgIT0gc2VwdGVsIDsgdGhlbgotCQkJIFNTUkM9IiRTU1JDIHBjYXAtc2VwdGVsLmMiCisJCQkgTU9EVUxFX0NfU1JDPSIkTU9EVUxFX0NfU1JDIHBjYXAtc2VwdGVsLmMiCiAJCWZpCiAKIAkJQUNfREVGSU5FKEhBVkVfU0VQVEVMX0FQSSwgMSwgW2RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgU2VwdGVsIEFQSV0pCkBAIC0xMjE4LDcgKzEzNDIsNyBAQAogCQlmaQogCiAJCWlmIHRlc3QgIiR3YW50X3NlcHRlbCIgPSB5ZXM7IHRoZW4KLQkgICAgICAgIAkjIFVzZXIgd2FudGVkIFNlcHRlbCBzdXBwb3J0IGJ1dCB3ZSBjb3VsZG4ndCBmaW5kIGl0LgorCQkJIyBVc2VyIHdhbnRlZCBTZXB0ZWwgc3VwcG9ydCBidXQgd2UgY291bGRuJ3QgZmluZCBpdC4KIAkJCUFDX01TR19FUlJPUihbU2VwdGVsIHN1cHBvcnQgcmVxdWVzdGVkIHdpdGggLS13aXRoLXNlcHRlbCwgYnV0IHRoZSBTZXB0ZWwgaGVhZGVycyB3ZXJlbid0IGZvdW5kIGF0ICRzZXB0ZWxfaW5jbHVkZV9kaXI6IG1ha2Ugc3VyZSB0aGUgU2VwdGVsIHN1cHBvcnQgaXMgaW5zdGFsbGVkLCBzcGVjaWZ5IGEgZGlmZmVyZW50IHBhdGggb3IgcGF0aHMgaWYgbmVjZXNzYXJ5LCBvciBkb24ndCByZXF1ZXN0IFNlcHRlbCBzdXBwb3J0XSkKIAkJZmkKIAlmaQpAQCAtMTI5MCwxNCArMTQxNCwyMSBAQAogCiAJaWYgdGVzdCAteiAiJHNuZl9saWJfZGlyIjsgdGhlbgogCQlzbmZfbGliX2Rpcj0iJHNuZl9yb290L2xpYiIKKwkJIworCQkjIEhhbmRsZSBtdWx0aWFyY2ggc3lzdGVtcy4KKwkJIworCQlpZiB0ZXN0IC1kICIkc25mX2xpYl9kaXIvJGhvc3QiCisJCXRoZW4KKwkJCXNuZl9saWJfZGlyPSIkc25mX2xpYl9kaXIvJGhvc3QiCisJCWZpCiAJZmkKIAogCWlmIHRlc3QgLWYgIiRzbmZfaW5jbHVkZV9kaXIvc25mLmgiOyB0aGVuCiAJCSMgV2UgZm91bmQgYSBoZWFkZXI7IG1ha2Ugc3VyZSB3ZSBjYW4gbGluayB3aXRoIHRoZSBsaWJyYXJ5Ci0JCXNhdmVkX2xkZmxhZ3M9JExERkxBR1MKKwkJc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKIAkJTERGTEFHUz0iJExERkxBR1MgLUwkc25mX2xpYl9kaXIiCiAJCUFDX0NIRUNLX0xJQihbc25mXSwgW3NuZl9pbml0XSwgW2FjX2N2X2xibF9zbmZfYXBpPSJ5ZXMiXSkKLQkJTERGTEFHUz0iJHNhdmVkX2xkZmxhZ3MiCisJCUxERkxBR1M9IiRzYXZlX0xERkxBR1MiCiAJCWlmIHRlc3QgIiRhY19jdl9sYmxfc25mX2FwaSIgPSBubzsgdGhlbgogCQkJQUNfTVNHX0VSUk9SKFNORiBBUEkgY2Fubm90IGNvcnJlY3RseSBiZSBsaW5rZWQ7IGNoZWNrIGNvbmZpZy5sb2cpCiAJCWZpCkBAIC0xMzExLDcgKzE0NDIsNyBAQAogCQlMREZMQUdTPSIkTERGTEFHUyAtTCRzbmZfbGliX2RpciIKIAogCQlpZiB0ZXN0ICIkVl9QQ0FQIiAhPSBzbmYgOyB0aGVuCi0JCQlTU1JDPSIkU1NSQyBwY2FwLXNuZi5jIgorCQkJTU9EVUxFX0NfU1JDPSIkTU9EVUxFX0NfU1JDIHBjYXAtc25mLmMiCiAJCWZpCiAKIAkJQUNfREVGSU5FKEhBVkVfU05GX0FQSSwgMSwgW2RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgTXlyaWNvbSBTTkYgQVBJXSkKQEAgLTEzODgsNyArMTUxOSw3IEBACiAJaWYgdGVzdCAkYWNfY3ZfbGJsX3R1cmJvY2FwX2FwaSA9IHllczsgdGhlbgogCQlBQ19NU0dfUkVTVUxUKHllcykKIAotCQlTU1JDPSIkU1NSQyBwY2FwLXRjLmMiCisJCU1PRFVMRV9DX1NSQz0iJE1PRFVMRV9DX1NSQyBwY2FwLXRjLmMiCiAJCVZfSU5DTFM9IiRWX0lOQ0xTICRUVVJCT0NBUF9DRkxBR1MiCiAJCUxJQlM9IiRMSUJTICRUVVJCT0NBUF9MSUJTIC1sVGNBcGkgLWxwdGhyZWFkIC1sc3RkYysrIgogCkBAIC0xMzk3LDcgKzE1MjgsNyBAQAogCQlBQ19NU0dfUkVTVUxUKG5vKQogCiAJCWlmIHRlc3QgIiR3YW50X3R1cmJvY2FwIiA9IHllczsgdGhlbgotCSAgICAgICAgCSMgVXNlciB3YW50ZWQgVHVyYm8gc3VwcG9ydCBidXQgd2UgY291bGRuJ3QgZmluZCBpdC4KKwkJCSMgVXNlciB3YW50ZWQgVHVyYm8gc3VwcG9ydCBidXQgd2UgY291bGRuJ3QgZmluZCBpdC4KIAkJCUFDX01TR19FUlJPUihbVHVyYm9DYXAgc3VwcG9ydCByZXF1ZXN0ZWQgd2l0aCAtLXdpdGgtdHVyYm9jYXAsIGJ1dCB0aGUgVHVyYm9DYXAgaGVhZGVycyB3ZXJlbid0IGZvdW5kOiBtYWtlIHN1cmUgdGhlIFR1cmJvQ2FwIHN1cHBvcnQgaXMgaW5zdGFsbGVkIG9yIGRvbid0IHJlcXVlc3QgVHVyYm9DYXAgc3VwcG9ydF0pCiAJCWZpCiAJZmkKQEAgLTE0NjMsOSArMTU5NCwxMDMgQEAKIAkJI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KIAkgICAgXSkKIAorCSMKKwkjIE9wdGlvbmFsbHksIHdlIG1heSB3YW50IHRvIHN1cHBvcnQgU1NMLgorCSMgQ2hlY2sgZm9yIE9wZW5TU0wvbGlicmVzc2wuCisJIworCSMgRmlyc3QsIHRyeSBsb29raW5nIGZvciBpdCBhcyBhIHJlZ3VsYXIgc3lzdGVtIGxpYnJhcnkuCisJIyBNYWtlIHN1cmUgd2UgY2FuIGZpbmQgU1NMX2xpYnJhcnlfaW5pdCgpIHVzaW5nIHRoZQorCSMgc3RhbmRhcmQgaGVhZGVycywganVzdCBpbiBjYXNlIHdlJ3JlIHJ1bm5pbmcgYSB2ZXJzaW9uCisJIyBvZiBtYWNPUyB0aGF0IHNoaXBzIHdpdGggdGhlIE9wZW5TU0wgbGlicmFyeSBidXQgbm90CisJIyB0aGUgT3BlblNTTCBoZWFkZXJzLCBhbmQgaGF2ZSBhbHNvIGluc3RhbGxlZCBhbm90aGVyCisJIyB2ZXJzaW9uIG9mIE9wZW5TU0wgd2l0aCBoZWFkZXJzLgorCSMKKwlzYXZlX0xJQlM9IiRMSUJTIgorCUxJQlM9Ii1sc3NsIC1sY3J5cHRvIgorCUFDX01TR19DSEVDS0lORyh3aGV0aGVyIHdlIGhhdmUgYSBzeXN0ZW0gT3BlblNTTC9saWJyZXNzbCB0aGF0IHdlIGNhbiB1c2UpCisJQUNfVFJZX0xJTksoCisJICAgIFsKKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorCSAgICBdLAorCSAgICBbCitTU0xfbGlicmFyeV9pbml0KCk7CityZXR1cm4gMDsKKwkgICAgXSwKKwkgICAgWworCQlBQ19NU0dfUkVTVUxUKHllcykKKwkJSEFWRV9PUEVOU1NMPXllcworCQlPUEVOU1NMX0xJQlM9Ii1sc3NsIC1sY3J5cHRvIgorCSAgICBdLAorCSAgICBBQ19NU0dfUkVTVUxUKG5vKSkKKwlMSUJTPSIkc2F2ZV9MSUJTIgorCisJIworCSMgSWYgd2UgZGlkbid0IGZpbmQgaXQsIGNoZWNrIGZvciBpdCB3aXRoIHBrZy1jb25maWcuCisJIworCWlmIHRlc3QgIngkSEFWRV9PUEVOU1NMIiAhPSAieHllcyI7IHRoZW4KKwkJaWYgdGVzdCAieCRQS0dDT05GSUciICE9ICJ4bm8iOyB0aGVuCisJCQkjCisJCQkjIFdlIGhhdmUgcGtnLWNvbmZpZzsgc2VlIGlmIHdlIGhhdmUgT3BlblNTTC8KKwkJCSMgbGlicmVzc2wgaW5zdGFsbGVkIGFzIGEgcGFja2FnZS4KKwkJCSMKKwkJCUFDX01TR19DSEVDS0lORyhbZm9yIE9wZW5TU0wvbGlicmVzc2wgd2l0aCBwa2ctY29uZmlnXSkKKwkJCWlmICIkUEtHQ09ORklHIiBvcGVuc3NsOyB0aGVuCisJCQkJQUNfTVNHX1JFU1VMVChbZm91bmRdKQorCQkJCUhBVkVfT1BFTlNTTD15ZXMKKwkJCQlPUEVOU1NMX0NGTEFHUz1gIiRQS0dDT05GSUciIC0tY2ZsYWdzIG9wZW5zc2xgCisJCQkJT1BFTlNTTF9MSUJTPWAiJFBLR0NPTkZJRyIgLS1saWJzIG9wZW5zc2xgCisJCQllbHNlCisJCQkJQUNfTVNHX1JFU1VMVChbbm90IGZvdW5kXSkKKwkJCWZpCisJCWZpCisJZmkKKworCSMKKwkjIElmIHdlIGRpZG4ndCBmaW5kIGl0LCBjaGVjayBmb3IgaXQgdW5kZXIgL3Vzci9sb2NhbC9vcHQvb3BlbnNzbDsKKwkjIHRoYXQncyB3aGVyZSBIb21lYnJldyBwdXRzIGl0IG9uIG1hY09TLiAgRmVlbCBmcmVlIHRvIGFkZCBvdGhlcgorCSMgLUwgZGlyZWN0b3JpZXMgYXMgbmVjZXNzYXJ5OyB0aGUgInN5c3RlbSBsaWJyYXJ5IiBjaGVjayBzaG91bGQKKwkjIGFsc28gaGFuZGxlICJhZGQtb24gbGlicmFyeSB1bmRlciAvdXNyL2xvY2FsIiwgc28gdGhhdCBzaG91bGRuJ3QKKwkjIGJlIG5lY2Vzc2FyeSBoZXJlLgorCSMKKwlpZiB0ZXN0ICJ4JEhBVkVfT1BFTlNTTCIgIT0gInh5ZXMiOyB0aGVuCisJCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCQlzYXZlX0xJQlM9IiRMSUJTIgorCQlDRkxBR1M9IiRDRkxBR1MgLUwvdXNyL2xvY2FsL29wdC9vcGVuc3NsL2luY2x1ZGUiCisJCUxJQlM9IiRMSUJTIC1ML3Vzci9sb2NhbC9vcHQvb3BlbnNzbC9saWIgLWxzc2wgLWxjcnlwdG8iCisJCUFDX01TR19DSEVDS0lORyh3aGV0aGVyIHdlIGhhdmUgT3BlblNTTC9saWJyZXNzbCBpbiAvdXNyL2xvY2FsL29wdCB0aGF0IHdlIGNhbiB1c2UpCisJCUFDX1RSWV9MSU5LKAorCQkgICAgWworI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisJCSAgICBdLAorCQkgICAgWworU1NMX2xpYnJhcnlfaW5pdCgpOworcmV0dXJuIDA7CisJCSAgICBdLAorCQkgICAgWworCQkJQUNfTVNHX1JFU1VMVCh5ZXMpCisJCQlIQVZFX09QRU5TU0w9eWVzCisJCQlPUEVOU1NMX0NGTEFHUz0iLUkvdXNyL2xvY2FsL29wdC9vcGVuc3NsL2luY2x1ZGUiCisJCQlPUEVOU1NMX0xJQlM9Ii1ML3Vzci9sb2NhbC9vcHQvb3BlbnNzbC9saWIgLWxzc2wgLWxjcnlwdG8iCisJCSAgICBdLAorCQkgICAgQUNfTVNHX1JFU1VMVChubykpCisJCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCQlMSUJTPSIkc2F2ZV9MSUJTIgorCWZpCisKKwkjCisJIyBPSywgZGlkIHdlIGZpbmQgaXQ/CisJIworCWlmIHRlc3QgIngkSEFWRV9PUEVOU1NMIiA9ICJ4eWVzIjsgdGhlbgorCQlBQ19ERUZJTkUoW0hBVkVfT1BFTlNTTF0sIFsxXSwgW1VzZSBPcGVuU1NMXSkKKwkJQ0ZMQUdTPSIkQ0ZMQUdTICRPUEVOU1NMX0NGTEFHUyIKKwkJTElCUz0iJExJQlMgJE9QRU5TU0xfTElCUyIKKwllbHNlCisJCUFDX01TR19OT1RJQ0UoT3BlblNTTCBub3QgZm91bmQpCisJZmkKKwogCUFDX0RFRklORShFTkFCTEVfUkVNT1RFLCwKIAkgICAgW0RlZmluZSB0byAxIGlmIHJlbW90ZSBwYWNrZXQgY2FwdHVyZSBpcyB0byBiZSBzdXBwb3J0ZWRdKQotCVNTUkM9IiRTU1JDIHBjYXAtbmV3LmMgcGNhcC1ycGNhcC5jIHJwY2FwLXByb3RvY29sLmMgc29ja3V0aWxzLmMiCisJUkVNT1RFX0NfU1JDPSIkUkVNT1RFX0NfU1JDIHBjYXAtbmV3LmMgcGNhcC1ycGNhcC5jIHJwY2FwLXByb3RvY29sLmMgc29ja3V0aWxzLmMgc3NsdXRpbHMuYyIKIAlCVUlMRF9SUENBUEQ9YnVpbGQtcnBjYXBkCiAJSU5TVEFMTF9SUENBUEQ9aW5zdGFsbC1ycGNhcGQKIAk7OwpAQCAtMTUxNywzMSArMTc0Miw2MyBAQAogIwogQUNfUFJPR19ZQUNDCiAKLSMKLSMgTWFrZSBzdXJlIGl0IHN1cHBvcnRzIHRoZSAtcCBmbGFnIGFuZCBzdXBwb3J0cyBwcm9jZXNzaW5nIG91cgotIyBncmFtbWFyLnkuCi0jCi1BQ19DQUNIRV9DSEVDSyhbZm9yIGNhcGFibGUgeWFjYy9iaXNvbl0sIHRjcGR1bXBfY3ZfY2FwYWJsZV95YWNjLAotCWlmICRZQUNDIC1wIHBjYXBfIC1vIC9kZXYvbnVsbCAkc3JjZGlyL2dyYW1tYXIueSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkgICAgdGNwZHVtcF9jdl9jYXBhYmxlX3lhY2M9eWVzCi0JZWxzZQotCSAgICB0Y3BkdW1wX2N2X2NhcGFibGVfeWFjYz1pbnN1ZmZpY2llbnQKLQlmaSkKLWlmIHRlc3QgJHRjcGR1bXBfY3ZfY2FwYWJsZV95YWNjID0gaW5zdWZmaWNpZW50IDsgdGhlbgotCUFDX01TR19FUlJPUihbJFlBQ0MgaXMgaW5zdWZmaWNpZW50IHRvIGNvbXBpbGUgbGlicGNhcC4KK2Nhc2UgIiRZQUNDIiBpbgorCisqeWFjYykKKwkjCisJIyBNYWtlIHN1cmUgdGhpcyBpcyBCZXJrZWxleSBZQUNDLCBub3QgQVQmVCBZQUNDOyB0aGUgbGF0dGVyCisJIyBkb2Vzbid0IHN1cHBvcnQgcmVlbnRyYW50IHBhcnNlcnMuICBSdW4gaXQgd2l0aCAiLVYiOworCSMgdGhhdCBzdWNjZWVkcyBhbmQgcmVwb3J0cyB0aGUgdmVyc2lvbiBudW1iZXIgd2l0aAorCSMgQmVya2VsZXkgWUFDQywgYnV0IHdpbGwgKHByb2JhYmx5KSBmYWlsIHdpdGggdmFyaW91cworCSMgdmVuZG9yIGZsYXZvcnMgb2YgQVQmVCBZQUNDLgorCSMKKwlBQ19DQUNIRV9DSEVDSyhbZm9yIGNhcGFibGUgeWFjY10sIHRjcGR1bXBfY3ZfY2FwYWJsZV95YWNjLAorCSAgICBpZiAkWUFDQyAtViA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJdGNwZHVtcF9jdl9jYXBhYmxlX3lhY2M9eWVzCisJICAgIGVsc2UKKwkJdGNwZHVtcF9jdl9jYXBhYmxlX3lhY2M9aW5zdWZmaWNpZW50CisJICAgIGZpKQorCWlmIHRlc3QgJHRjcGR1bXBfY3ZfY2FwYWJsZV95YWNjID0gaW5zdWZmaWNpZW50IDsgdGhlbgorCSAgICBBQ19NU0dfRVJST1IoWyRZQUNDIGlzIGluc3VmZmljaWVudCB0byBjb21waWxlIGxpYnBjYXAuCiAgbGlicGNhcCByZXF1aXJlcyBCaXNvbiwgYSBuZXdlciB2ZXJzaW9uIG9mIEJlcmtlbGV5IFlBQ0Mgd2l0aCBzdXBwb3J0CiAgZm9yIHJlZW50cmFudCBwYXJzZXJzLCBvciBhbm90aGVyIFlBQ0MgY29tcGF0aWJsZSB3aXRoIHRoZW0uXSkKLWZpCisJZmkKKworCSMKKwkjIEJlcmtlbGV5IFlBQ0MgZG9lc24ndCBzdXBwb3J0ICIlZGVmaW5lIGFwaS5wdXJlIiwgc28gdXNlCisJIyAiJXB1cmUtcGFyc2VyIi4KKwkjCisJUkVFTlRSQU5UX1BBUlNFUj0iJXB1cmUtcGFyc2VyIgorCTs7CisKKyopCisJIworCSMgQmlzb24gcHJpb3IgdG8gMi40KC4xKSBkb2Vzbid0IHN1cHBvcnQgIiVkZWZpbmUgYXBpLnB1cmUiLCBzbyB1c2UKKwkjICIlcHVyZS1wYXJzZXIiLgorCSMKKwliaXNvbl9tYWpvcl92ZXJzaW9uPWAkWUFDQyAtViB8IHNlZCAtbiAncy8uKiBcKEA8OkAxLTlAOj5AQDw6QDAtOUA6PkAqXClcLkA8OkAxLTlAOj5AQDw6QDAtOS5AOj5AKi9cMS9wJ2AKKwliaXNvbl9taW5vcl92ZXJzaW9uPWAkWUFDQyAtViB8IHNlZCAtbiAncy8uKiBAPDpAMS05QDo+QEA8OkAwLTlAOj5AKlwuXChAPDpAMS05QDo+QEA8OkAwLTlAOj5AKlwpLiovXDEvcCdgCisJaWYgdGVzdCAiJGJpc29uX21ham9yX3ZlcnNpb24iIC1sdCAyIC1vIFwKKwkgICAgXCggIiRiaXNvbl9tYWpvcl92ZXJzaW9uIiAtZXEgMiAtYSAiJGJpc29uX21ham9yX3ZlcnNpb24iIC1sdCA0IFwpCisJdGhlbgorCQlSRUVOVFJBTlRfUEFSU0VSPSIlcHVyZS1wYXJzZXIiCisJZWxzZQorCQlSRUVOVFJBTlRfUEFSU0VSPSIlZGVmaW5lIGFwaS5wdXJlIgorCWZpCisJOzsKK2VzYWMKK0FDX1NVQlNUKFJFRU5UUkFOVF9QQVJTRVIpCiAKICMKICMgRG8gdmFyaW91cyBjaGVja3MgZm9yIHZhcmlvdXMgT1NlcyBhbmQgdmVyc2lvbnMgb2YgdGhvc2UgT1Nlcy4KICMKICMgQXNzdW1lLCBieSBkZWZhdWx0LCBubyBzdXBwb3J0IGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBWNy9CU0QKLSMgY29udmVudGlvbiBmb3IgbWFuIHBhZ2VzIChmaWxlIGZvcm1hdHMgaW4gc2VjdGlvbiA1LCBtaXNjZWxsYW5lb3VzCi0jIGluZm8gaW4gc2VjdGlvbiA3LCBhZG1pbmlzdHJhdGl2ZSBjb21tYW5kcyBhbmQgZGFlbW9ucyBpbiBzZWN0aW9uIDgpLgotIyBJbmRpdmlkdWFsIGNhc2VzIGNhbiBvdmVycmlkZSB0aGlzLgorIyBjb252ZW50aW9uIGZvciBtYW4gcGFnZXMgKGRldmljZXMgaW4gc2VjdGlvbiA0LCBmaWxlIGZvcm1hdHMgaW4KKyMgc2VjdGlvbiA1LCBtaXNjZWxsYW5lb3VzIGluZm8gaW4gc2VjdGlvbiA3LCBhZG1pbmlzdHJhdGl2ZSBjb21tYW5kcworIyBhbmQgZGFlbW9ucyBpbiBzZWN0aW9uIDgpLiAgSW5kaXZpZHVhbCBjYXNlcyBjYW4gb3ZlcnJpZGUgdGhpcy4KICMKIERZRVhUPSJub25lIgorTUFOX0RFVklDRVM9NAogTUFOX0ZJTEVfRk9STUFUUz01CiBNQU5fTUlTQ19JTkZPPTcKIE1BTl9BRE1JTl9DT01NQU5EUz04CkBAIC0xNTk3LDc5ICsxODU0LDE2MyBAQAogCWlmIHRlc3QgIiRlbmFibGVfdW5pdmVyc2FsIiAhPSAibm8iOyB0aGVuCiAJCWNhc2UgIiRob3N0X29zIiBpbgogCi0JCWRhcndpblswLTddLiopCisJCWRhcndpbltbMC03XV0uKikKIAkJCSMKIAkJCSMgUHJlLVRpZ2VyLiAgQnVpbGQgb25seSBmb3IgMzItYml0IFBvd2VyUEM7IG5vCiAJCQkjIG5lZWQgZm9yIGFueSBzcGVjaWFsIGNvbXBpbGVyIG9yIGxpbmtlciBmbGFncy4KIAkJCSMKIAkJCTs7CiAKLQkJZGFyd2luOC5bMDEyM10qKQorCQlkYXJ3aW44LltbMDEyM11dfGRhcndpbjguW1swMTIzXV0uKikKIAkJCSMKLQkJCSMgVGlnZXIsIHByaW9yIHRvIEludGVsIHN1cHBvcnQuICBCdWlsZCBmb3IgMzItYml0Ci0JCQkjIFBvd2VyUEMgYW5kIDY0LWJpdCBQb3dlclBDLCB3aXRoIDMyLWJpdCBQb3dlclBDCi0JCQkjIGZpcnN0LiAgKEknbSBndWVzc2luZyB0aGF0J3Mgd2hhdCBBcHBsZSBkb2VzLikKLQkJCSMKLQkJCVZfQ0NPUFQ9IiRWX0NDT1BUIC1hcmNoIHBwYyAtYXJjaCBwcGM2NCIKLQkJCUxERkxBR1M9IiRMREZMQUdTIC1hcmNoIHBwYyAtYXJjaCBwcGM2NCIKLQkJCTs7Ci0KLQkJZGFyd2luOC5bNDU2XSopCi0JCQkjCi0JCQkjIFRpZ2VyLCBzdWJzZXF1ZW50IHRvIEludGVsIHN1cHBvcnQgYnV0IHByaW9yIHRvCi0JCQkjIHg4Ni02NCBzdXBwb3J0LiAgQnVpbGQgZm9yIDMyLWJpdCBQb3dlclBDLCA2NC1iaXQKLQkJCSMgUG93ZXJQQywgYW5kIHg4Niwgd2l0aCAzMi1iaXQgUG93ZXJQQyBmaXJzdC4KKwkJCSMgVGlnZXIsIHByaW9yIHRvIEludGVsIHN1cHBvcnQuICBCdWlsZAorCQkJIyBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGZvciAzMi1iaXQgUG93ZXJQQworCQkJIyBhbmQgNjQtYml0IFBvd2VyUEMsIHdpdGggMzItYml0IFBvd2VyUEMgZmlyc3QuCiAJCQkjIChJJ20gZ3Vlc3NpbmcgdGhhdCdzIHdoYXQgQXBwbGUgZG9lcy4pCiAJCQkjCi0JCQlWX0NDT1BUPSIkVl9DQ09QVCAtYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggaTM4NiIKLQkJCUxERkxBR1M9IiRMREZMQUdTIC1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCBpMzg2IgorCQkJIyAoVGhlIGRvdWJsZSBicmFja2V0cyBhcmUgbmVlZGVkIGJlY2F1c2UKKwkJCSMgYXV0b3Rvb2xzL200IHVzZSBicmFja2V0cyBhcyBhIHF1b3RpbmcKKwkJCSMgY2hhcmFjdGVyOyB0aGUgZG91YmxlIGJyYWNrZXRzIHR1cm4gaW50bworCQkJIyBzaW5nbGUgYnJhY2tldHMgaW4gdGhlIGdlbmVyYXRlZCBjb25maWd1cmUKKwkJCSMgZmlsZS4pCisJCQkjCisJCQlWX0xJQl9DQ09QVF9GQVQ9Ii1hcmNoIHBwYyAtYXJjaCBwcGM2NCIKKwkJCVZfTElCX0xERkxBR1NfRkFUPSItYXJjaCBwcGMgLWFyY2ggcHBjNjQiCisJCQlWX1BST0dfQ0NPUFRfRkFUPSItYXJjaCBwcGMgLWFyY2ggcHBjNjQiCisJCQlWX1BST0dfTERGTEFHU19GQVQ9Ii1hcmNoIHBwYyAtYXJjaCBwcGM2NCIKKwkJCTs7CisKKwkJZGFyd2luOC5bWzQ1Nl1dfGRhcndpbi5bWzQ1Nl1dLiopCisJCQkjCisJCQkjIFRpZ2VyLCBzdWJzZXF1ZW50IHRvIEludGVsIHN1cHBvcnQgYnV0IHByaW9yCisJCQkjIHRvIHg4Ni02NCBzdXBwb3J0LiAgQnVpbGQgbGlicmFyaWVzIGFuZAorCQkJIyBleGVjdXRhYmxlcyBmb3IgMzItYml0IFBvd2VyUEMsIDY0LWJpdAorCQkJIyBQb3dlclBDLCBhbmQgMzItYml0IHg4Niwgd2l0aCAzMi1iaXQgUG93ZXJQQworCQkJIyBmaXJzdC4gIChJJ20gZ3Vlc3NpbmcgdGhhdCdzIHdoYXQgQXBwbGUgZG9lcy4pCisJCQkjCisJCQkjIChUaGUgZG91YmxlIGJyYWNrZXRzIGFyZSBuZWVkZWQgYmVjYXVzZQorCQkJIyBhdXRvdG9vbHMvbTQgdXNlIGJyYWNrZXRzIGFzIGEgcXVvdGluZworCQkJIyBjaGFyYWN0ZXI7IHRoZSBkb3VibGUgYnJhY2tldHMgdHVybiBpbnRvCisJCQkjIHNpbmdsZSBicmFja2V0cyBpbiB0aGUgZ2VuZXJhdGVkIGNvbmZpZ3VyZQorCQkJIyBmaWxlLikKKwkJCSMKKwkJCVZfTElCX0NDT1BUX0ZBVD0iLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIGkzODYiCisJCQlWX0xJQl9MREZMQUdTX0ZBVD0iLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIGkzODYiCisJCQlWX1BST0dfQ0NPUFRfRkFUPSItYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggaTM4NiIKKwkJCVZfUFJPR19MREZMQUdTX0ZBVD0iLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIGkzODYiCiAJCQk7OwogCiAJCWRhcndpbjguKikKIAkJCSMKIAkJCSMgQWxsIG90aGVyIFRpZ2VyLCBzbyBzdWJzZXF1ZW50IHRvIHg4Ni02NAotCQkJIyBzdXBwb3J0LiBCdWlsZCBmb3IgMzItYml0IFBvd2VyUEMsIDY0LWJpdAotCQkJIyBQb3dlclBDLCB4ODYsIGFuZCB4ODYtNjQsIGFuZCB3aXRoIDMyLWJpdCBQb3dlclBDCi0JCQkjIGZpcnN0LiAgKEknbSBndWVzc2luZyB0aGF0J3Mgd2hhdCBBcHBsZSBkb2VzLikKKwkJCSMgc3VwcG9ydC4gIEJ1aWxkIGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgZm9yCisJCQkjIDMyLWJpdCBQb3dlclBDLCA2NC1iaXQgUG93ZXJQQywgMzItYml0IHg4NiwKKwkJCSMgYW5kIHg4Ni02NCwgd2l0aCAzMi1iaXQgUG93ZXJQQyBmaXJzdC4gIChJJ20KKwkJCSMgZ3Vlc3NpbmcgdGhhdCdzIHdoYXQgQXBwbGUgZG9lcy4pCiAJCQkjCi0JCQlWX0NDT1BUPSIkVl9DQ09QVCAtYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQiCi0JCQlMREZMQUdTPSIkTERGTEFHUyAtYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQiCisJCQlWX0xJQl9DQ09QVF9GQVQ9Ii1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKKwkJCVZfTElCX0xERkxBR1NfRkFUPSItYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQiCisJCQlWX1BST0dfQ0NPUFRfRkFUPSItYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQiCisJCQlWX1BST0dfTERGTEFHU19GQVQ9Ii1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKIAkJCTs7CiAKIAkJZGFyd2luOS4qKQogCQkJIwotCQkJIyBMZW9wYXJkLiAgQnVpbGQgZm9yIDMyLWJpdCBQb3dlclBDLCA2NC1iaXQKLQkJCSMgUG93ZXJQQywgeDg2LCBhbmQgeDg2LTY0LCB3aXRoIDMyLWJpdCBQb3dlclBDCi0JCQkjIGZpcnN0LiAgKFRoYXQncyB3aGF0IEFwcGxlIGRvZXMuKQorCQkJIyBMZW9wYXJkLiAgQnVpbGQgbGlicmFyaWVzIGZvciAzMi1iaXQgUG93ZXJQQywKKwkJCSMgNjQtYml0IFBvd2VyUEMsIDMyLWJpdCB4ODYsIGFuZCB4ODYtNjQsIHdpdGgKKwkJCSMgMzItYml0IFBvd2VyUEMgZmlyc3QsIGFuZCBidWlsZCBleGVjdXRhYmxlcworCQkJIyBmb3IgMzItYml0IHg4NiBhbmQgMzItYml0IFBvd2VyUEMsIHdpdGggMzItYml0CisJCQkjIHg4NiBmaXJzdC4gIChUaGF0J3Mgd2hhdCBBcHBsZSBkb2VzLikKIAkJCSMKLQkJCVZfQ0NPUFQ9IiRWX0NDT1BUIC1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKLQkJCUxERkxBR1M9IiRMREZMQUdTIC1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKKwkJCVZfTElCX0NDT1BUX0ZBVD0iLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgorCQkJVl9MSUJfTERGTEFHU19GQVQ9Ii1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKKwkJCVZfUFJPR19DQ09QVF9GQVQ9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIgorCQkJVl9QUk9HX0xERkxBR1NfRkFUPSItYXJjaCBpMzg2IC1hcmNoIHBwYyIKIAkJCTs7CiAKIAkJZGFyd2luMTAuKikKIAkJCSMKLQkJCSMgU25vdyBMZW9wYXJkLiAgQnVpbGQgZm9yIHg4Ni02NCwgeDg2LCBhbmQKLQkJCSMgMzItYml0IFBvd2VyUEMsIHdpdGggeDg2LTY0IGZpcnN0LiAgKFRoYXQncwotCQkJIyB3aGF0IEFwcGxlIGRvZXMsIGV2ZW4gdGhvdWdoIFNub3cgTGVvcGFyZAotCQkJIyBkb2Vzbid0IHJ1biBvbiBQUEMsIHNvIFBQQyBsaWJwY2FwIHJ1bnMgdW5kZXIKLQkJCSMgUm9zZXR0YSwgYW5kIFJvc2V0dGEgZG9lc24ndCBzdXBwb3J0IEJQRgotCQkJIyBpb2N0bHMsIHNvIFBQQyBwcm9ncmFtcyBjYW4ndCBkbyBsaXZlCi0JCQkjIGNhcHR1cmVzLikKKwkJCSMgU25vdyBMZW9wYXJkLiAgQnVpbGQgbGlicmFyaWVzIGZvciB4ODYtNjQsCisJCQkjIDMyLWJpdCB4ODYsIGFuZCAzMi1iaXQgUG93ZXJQQywgd2l0aCB4ODYtNjQKKwkJCSMgZmlyc3QsIGFuZCBidWlsZCBleGVjdXRhYmxlcyBmb3IgeDg2LTY0IGFuZAorCQkJIyAzMi1iaXQgeDg2LCB3aXRoIHg4Ni02NCBmaXJzdC4gIChUaGF0J3Mgd2hhdAorCQkJIyBBcHBsZSBkb2VzLCBldmVuIHRob3VnaCBTbm93IExlb3BhcmQgZG9lc24ndAorCQkJIyBydW4gb24gUFBDLCBzbyBQUEMgbGlicGNhcCBydW5zIHVuZGVyIFJvc2V0dGEsCisJCQkjIGFuZCBSb3NldHRhIGRvZXNuJ3Qgc3VwcG9ydCBCUEYgaW9jdGxzLCBzbyBQUEMKKwkJCSMgcHJvZ3JhbXMgY2FuJ3QgZG8gbGl2ZSBjYXB0dXJlcy4pCiAJCQkjCi0JCQlWX0NDT1BUPSIkVl9DQ09QVCAtYXJjaCB4ODZfNjQgLWFyY2ggaTM4NiAtYXJjaCBwcGMiCi0JCQlMREZMQUdTPSIkTERGTEFHUyAtYXJjaCB4ODZfNjQgLWFyY2ggaTM4NiAtYXJjaCBwcGMiCisJCQlWX0xJQl9DQ09QVF9GQVQ9Ii1hcmNoIHg4Nl82NCAtYXJjaCBpMzg2IC1hcmNoIHBwYyIKKwkJCVZfTElCX0xERkxBR1NfRkFUPSItYXJjaCB4ODZfNjQgLWFyY2ggaTM4NiAtYXJjaCBwcGMiCisJCQlWX1BST0dfQ0NPUFRfRkFUPSItYXJjaCB4ODZfNjQgLWFyY2ggaTM4NiIKKwkJCVZfUFJPR19MREZMQUdTX0ZBVD0iLWFyY2ggeDg2XzY0IC1hcmNoIGkzODYiCiAJCQk7OwogCiAJCWRhcndpbiopCiAJCQkjCi0JCQkjIFBvc3QtU25vdyBMZW9wYXJkLiAgQnVpbGQgZm9yIHg4Ni02NCBhbmQKLQkJCSMgeDg2LCB3aXRoIHg4Ni02NCBmaXJzdC4gIChUaGF0J3MgcHJvYmFibHkgd2hhdAotCQkJIyBBcHBsZSBkb2VzLCBnaXZlbiB0aGF0IFJvc2V0dGEgaXMgZ29uZS4pCisJCQkjIFBvc3QtU25vdyBMZW9wYXJkLiAgQnVpbGQgbGlicmFyaWVzIGZvciB4ODYtNjQKKwkJCSMgYW5kIDMyLWJpdCB4ODYsIHdpdGggeDg2LTY0IGZpcnN0LCBhbmQgYnVpbGQKKwkJCSMgZXhlY3V0YWJsZXMgb25seSBmb3IgeDg2LTY0LiAgKFRoYXQncyB3aGF0CisJCQkjIEFwcGxlIGRvZXMuKSAgVGhpcyByZXF1aXJlcyBubyBzcGVjaWFsIGZsYWdzCisJCQkjIGZvciBwcm9ncmFtcy4KIAkJCSMgWFhYIC0gdXBkYXRlIGlmIGFuZCB3aGVuIEFwcGxlIGRyb3BzIHN1cHBvcnQKLQkJCSMgZm9yIDMyLWJpdCB4ODYgY29kZS4KKwkJCSMgZm9yIDMyLWJpdCB4ODYgY29kZSBhbmQgaWYgYW5kIHdoZW4gQXBwbGUgYWRkcworCQkJIyBBUk0tYmFzZWQgTWFjcy4gIChZb3UncmUgb24geW91ciBvd24gZm9yIGlPUworCQkJIyBldGMuKQogCQkJIwotCQkJVl9DQ09QVD0iJFZfQ0NPUFQgLWFyY2ggeDg2XzY0IC1hcmNoIGkzODYiCi0JCQlMREZMQUdTPSIkTERGTEFHUyAtYXJjaCB4ODZfNjQgLWFyY2ggaTM4NiIKKwkJCSMgWFhYIC0gY2hlY2sgd2hldGhlciB3ZSAqY2FuKiBidWlsZCBmb3IKKwkJCSMgaTM4NiBhbmQsIGlmIG5vdCwgc3VnZ2VzdCB0aGF0IHRoZSB1c2VyCisJCQkjIGluc3RhbGwgdGhlIC91c3IvaW5jbHVkZSBoZWFkZXJzIGlmIHRoZXkKKwkJCSMgd2FudCB0byBidWlsZCBmYXQuCisJCQkjCisJCQlBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBidWlsZGluZyBmb3IgMzItYml0IHg4NiBpcyBzdXBwb3J0ZWQpCisJCQlzYXZlX0NGTEFHUz0iJENGTEFHUyIKKwkJCUNGTEFHUz0iJENGTEFHUyAtYXJjaCBpMzg2IgorCQkJQUNfVFJZX0xJTksoCisJCQkgICAgW10sCisJCQkgICAgW3JldHVybiAwO10sCisJCQkgICAgWworCQkJCUFDX01TR19SRVNVTFQoeWVzKQorCQkJCVZfTElCX0NDT1BUX0ZBVD0iLWFyY2ggeDg2XzY0IgorCQkJCVZfTElCX0xERkxBR1NfRkFUPSItYXJjaCB4ODZfNjQiCisKKwkJCQkjCisJCQkJIyBPcGVuU1NMIGluc3RhbGxhdGlvbiBvbiBtYWNPUyBzZWVtcworCQkJCSMgdG8gaW5zdGFsbCBvbmx5IHRoZSBsaWJzIGZvciA2NC1iaXQKKwkJCQkjIHg4NiAtIGF0IGxlYXN0IHRoYXQncyB3aGF0IEJyZXcgZG9lczoKKwkJCQkjIG9ubHkgY29uZmlndXJlIDMyLWJpdCBidWlsZHMgaWYgd2UKKwkJCQkjIGRvbid0IGhhdmUgT3BlblNTTC4KKwkJCQkjCisJCQkJaWYgdGVzdCAiJEhBVkVfT1BFTlNTTCIgIT0geWVzOyB0aGVuCisJCQkJCVZfTElCX0NDT1BUX0ZBVD0iJFZfTElCX0NDT1BUX0ZBVCAtYXJjaCBpMzg2IgorCQkJCQlWX0xJQl9MREZMQUdTX0ZBVD0iJFZfTElCX0xERkxBR1NfRkFUIC1hcmNoIGkzODYiCisJCQkJZmkKKwkJCSAgICBdLAorCQkJICAgIFsKKwkJCQlBQ19NU0dfUkVTVUxUKG5vKQorCQkJCVZfTElCX0NDT1BUX0ZBVD0iLWFyY2ggeDg2XzY0IgorCQkJCVZfTElCX0xERkxBR1NfRkFUPSItYXJjaCB4ODZfNjQiCisJCQkJY2FzZSAiJGhvc3Rfb3MiIGluCisKKwkJCQlkYXJ3aW4xOC4qKQorCQkJCQkjCisJCQkJCSMgTW9qYXZlOyB5b3UgbmVlZCB0byBpbnN0YWxsIHRoZQorCQkJCQkjIC91c3IvaW5jbHVkZSBoZWFkZXJzIHRvIGdldAorCQkJCQkjIDMyLWJpdCB4ODYgYnVpbGRzIHRvIHdvcmsuCisJCQkJCSMKKwkJCQkJQUNfTVNHX1dBUk4oW0NvbXBpbGluZyBmb3IgMzItYml0IHg4NiBnaXZlcyBhbiBlcnJvcjsgdHJ5IGluc3RhbGxpbmcgdGhlIGNvbW1hbmQtbGluZSB0b29scyBhbmQsIGFmdGVyIHRoYXQsIGluc3RhbGxpbmcgdGhlIC91c3IvaW5jbHVkZSBoZWFkZXJzIGZyb20gdGhlIC9MaWJyYXJ5L0RldmVsb3Blci9Db21tYW5kTGluZVRvb2xzL1BhY2thZ2VzL21hY09TX1NES19oZWFkZXJzX2Zvcl9tYWNPU18xMC4xNC5wa2cgcGFja2FnZV0pCisJCQkJCTs7CisKKwkJCQkqKQorCQkJCQkjCisJCQkJCSMgUHJlLU1vamF2ZTsgdGhlIGNvbW1hbmQtbGluZQorCQkJCQkjIHRvb2xzIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvCisJCQkJCSMgZW5hYmxlIDMyLWJpdCB4ODYgYnVpbGRzLgorCQkJCQkjCisJCQkJCUFDX01TR19XQVJOKFtDb21waWxpbmcgZm9yIDMyLWJpdCB4ODYgZ2l2ZXMgYW4gZXJyb3I7IHRyeSBpbnN0YWxsaW5nIHRoZSBjb21tYW5kLWxpbmUgdG9vbHNdKQorCQkJCQk7OworCQkJCWVzYWMKKwkJCSAgICBdKQorCQkJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCiAJCQk7OwogCQllc2FjCiAJZmkKQEAgLTE3NDMsNyArMjA4NCw3IEBACiAJTUFOX01JU0NfSU5GTz01CiAJOzsKIAotbGludXgqfGZyZWVic2QqfG5ldGJzZCp8b3BlbmJzZCp8ZHJhZ29uZmx5KnxrZnJlZWJzZCp8Z251KikKK2xpbnV4KnxmcmVlYnNkKnxuZXRic2QqfG9wZW5ic2QqfGRyYWdvbmZseSp8a2ZyZWVic2QqfGdudSp8aGFpa3UqfG1pZGlwaXgqKQogCURZRVhUPSJzbyIKIAogCSMKQEAgLTE3NjYsNiArMjEwNyw3IEBACiAJIwogCU1BTl9GSUxFX0ZPUk1BVFM9NAogCU1BTl9NSVNDX0lORk89NQorCU1BTl9ERVZJQ0VTPTcKIAk7OwogCiBzaW5peCopCkBAIC0xODA5LDYgKzIxNTEsNyBAQAogCQlNQU5fQURNSU5fQ09NTUFORFM9MW0KIAkJTUFOX0ZJTEVfRk9STUFUUz00CiAJCU1BTl9NSVNDX0lORk89NQorCQlNQU5fREVWSUNFUz03RAogCWVzYWMKIAk7OwogZXNhYwpAQCAtMTg2MSwxNCArMjIwNCwxNCBAQAogCSNpbmNsdWRlIDxzeXMvZGxwaV9leHQuaD4KICAgICBdKQogCi1BQ19MQkxfVU5BTElHTkVEX0FDQ0VTUwotCiBBQ19TVUJTVChWX0NDT1BUKQorQUNfU1VCU1QoVl9MSUJfQ0NPUFRfRkFUKQorQUNfU1VCU1QoVl9MSUJfTERGTEFHU19GQVQpCitBQ19TVUJTVChWX1BST0dfQ0NPUFRfRkFUKQorQUNfU1VCU1QoVl9QUk9HX0xERkxBR1NfRkFUKQogQUNfU1VCU1QoVl9ERUZTKQotQUNfU1VCU1QoVl9GSU5EQUxMREVWUykKIEFDX1NVQlNUKFZfSU5DTFMpCiBBQ19TVUJTVChWX0xFWCkKLUFDX1NVQlNUKFZfUENBUCkKIEFDX1NVQlNUKFZfU0hMSUJfQ0NPUFQpCiBBQ19TVUJTVChWX1NITElCX0NNRCkKIEFDX1NVQlNUKFZfU0hMSUJfT1BUKQpAQCAtMTg3Nyw4ICsyMjIwLDEyIEBACiBBQ19TVUJTVChWX1lBQ0MpCiBBQ19TVUJTVChBRERMT0JKUykKIEFDX1NVQlNUKEFERExBUkNISVZFT0JKUykKLUFDX1NVQlNUKFNTUkMpCitBQ19TVUJTVChQTEFURk9STV9DX1NSQykKK0FDX1NVQlNUKFBMQVRGT1JNX0NYWF9TUkMpCitBQ19TVUJTVChNT0RVTEVfQ19TUkMpCitBQ19TVUJTVChSRU1PVEVfQ19TUkMpCiBBQ19TVUJTVChEWUVYVCkKK0FDX1NVQlNUKE1BTl9ERVZJQ0VTKQogQUNfU1VCU1QoTUFOX0ZJTEVfRk9STUFUUykKIEFDX1NVQlNUKE1BTl9NSVNDX0lORk8pCiBBQ19TVUJTVChNQU5fQURNSU5fQ09NTUFORFMpCkBAIC0xODg4LDk0ICsyMjM1LDc3IEBACiBBQ19TVUJTVChSUENBUERfTElCUykKIEFDX1NVQlNUKEVYVFJBX05FVFdPUktfTElCUykKIAorIworIyBWYXJpb3VzIExpbnV4LXNwZWNpZmljIG1lY2hhbmlzbXMuCisjCiBBQ19BUkdfRU5BQkxFKFt1c2JdLAotW0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS11c2JdLFtlbmFibGUgVVNCIGNhcHR1cmUgc3VwcG9ydCBAPDpAZGVmYXVsdD15ZXMsIGlmIHN1cHBvcnQgYXZhaWxhYmxlQDo+QF0pXSwKK1tBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdXNiXSxbZW5hYmxlIExpbnV4IHVzYm1vbiBVU0IgY2FwdHVyZSBzdXBwb3J0IEA8OkBkZWZhdWx0PXllcywgaWYgc3VwcG9ydCBhdmFpbGFibGVAOj5AXSldLAogICAgIFtdLAogICAgIFtlbmFibGVfdXNiPXllc10pCiAKLWlmIHRlc3QgInh4eF9vbmx5IiA9IHllczsgdGhlbgotCSMgVXNlciByZXF1ZXN0ZWQgc29tZXRoaW5nLWVsc2Utb25seSBwY2FwLCBzbyB0aGV5IGRvbid0Ci0JIyB3YW50IFVTQiBzdXBwb3J0LgotCWVuYWJsZV91c2I9bm8KLWZpCi0KLWlmIHRlc3QgIngkZW5hYmxlX3VzYiIgIT0gInhubyIgOyB0aGVuCi0gICBkbmwgY2hlY2sgZm9yIFVTQiBzbmlmZmluZyBzdXBwb3J0Ci0gICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIFVTQiBzbmlmZmluZyBzdXBwb3J0KQotICAgY2FzZSAiJGhvc3Rfb3MiIGluCi0gICBsaW51eCopCi0JQUNfREVGSU5FKFBDQVBfU1VQUE9SVF9VU0IsIDEsIFt0YXJnZXQgaG9zdCBzdXBwb3J0cyBVU0Igc25pZmZpbmddKQotCVVTQl9TUkM9cGNhcC11c2ItbGludXguYwotCUFDX01TR19SRVNVTFQoeWVzKQotCWFjX3VzYl9kZXZfbmFtZT1gdWRldmluZm8gLXEgbmFtZSAtcCAvc3lzL2NsYXNzL3VzYl9kZXZpY2UvdXNibW9uIDI+L2Rldi9udWxsYAotCWlmIHRlc3QgJD8gLW5lIDAgOyB0aGVuCi0JICBhY191c2JfZGV2X25hbWU9InVzYm1vbiIKLQlmaQotCUFDX0RFRklORV9VTlFVT1RFRChMSU5VWF9VU0JfTU9OX0RFViwgIi9kZXYvJGFjX3VzYl9kZXZfbmFtZSIsIFtwYXRoIGZvciBkZXZpY2UgZm9yIFVTQiBzbmlmZmluZ10pCi0JQUNfTVNHX05PVElDRShEZXZpY2UgZm9yIFVTQiBzbmlmZmluZyBpcyAvZGV2LyRhY191c2JfZGV2X25hbWUpCi0JIwotCSMgRG8gd2UgaGF2ZSBhIHZlcnNpb24gb2YgPGxpbnV4L2NvbXBpbGVyLmg+IGF2YWlsYWJsZT8KLQkjIElmIHNvLCB3ZSBtaWdodCBuZWVkIGl0IGZvciA8bGludXgvdXNiZGV2aWNlX2ZzLmg+LgotCSMKLQlBQ19DSEVDS19IRUFERVJTKGxpbnV4L2NvbXBpbGVyLmgpCi0JaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9saW51eF9jb21waWxlcl9oIiA9IHllczsgdGhlbgotCSAgIwotCSAgIyBZZXMgLSBpbmNsdWRlIGl0IHdoZW4gdGVzdGluZyBmb3IgPGxpbnV4L3VzYmRldmljZV9mcy5oPi4KLQkgICMKLQkgIEFDX0NIRUNLX0hFQURFUlMobGludXgvdXNiZGV2aWNlX2ZzLmgsLCxbI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+XSkKLQllbHNlCi0JICBBQ19DSEVDS19IRUFERVJTKGxpbnV4L3VzYmRldmljZV9mcy5oKQotCWZpCi0JaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9saW51eF91c2JkZXZpY2VfZnNfaCIgPSB5ZXM7IHRoZW4KLQkgICMKLQkgICMgT0ssIGRvZXMgaXQgZGVmaW5lIGJSZXF1ZXN0VHlwZT8gIE9sZGVyIHZlcnNpb25zIG9mIHRoZSBrZXJuZWwKLQkgICMgZGVmaW5lIGZpZWxkcyB3aXRoIG5hbWVzIGxpa2UgInJlcXVlc3R0eXBlLCAicmVxdWVzdCIsIGFuZAotCSAgIyAidmFsdWUiLCByYXRoZXIgdGhhbiAiYlJlcXVlc3RUeXBlIiwgImJSZXF1ZXN0IiwgYW5kCi0JICAjICJ3VmFsdWUiLgotCSAgIwotCSAgQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHVzYmRldmZzX2N0cmx0cmFuc2Zlci5iUmVxdWVzdFR5cGVdLCwsCi0JICAgICAgWwotCQkgIEFDX0lOQ0xVREVTX0RFRkFVTFQKLQkJICAjaWZkZWYgSEFWRV9MSU5VWF9DT01QSUxFUl9ICi0JCSAgI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0JCSAgI2VuZGlmCi0JCSAgI2luY2x1ZGUgPGxpbnV4L3VzYmRldmljZV9mcy5oPgotCSAgICAgIF0pCi0JZmkKLQk7OwotICAgIGZyZWVic2QqKQotCSMKLQkjIFRoaXMganVzdCB1c2VzIEJQRiBpbiBGcmVlQlNEIDguNCBhbmQgbGF0ZXI7IHdlIGRvbid0IG5lZWQKLQkjIHRvIGNoZWNrIGZvciBhbnl0aGluZyBzcGVjaWFsIGZvciBjYXB0dXJpbmcuCi0JIwotCUFDX01TR19SRVNVTFQoW3llcywgaW4gRnJlZUJTRCA4LjQgYW5kIGxhdGVyXSkKLQk7OwotCi0gICAgKikKLQlBQ19NU0dfUkVTVUxUKG5vKQotCTs7Ci1lc2FjCi1maQotQUNfU1VCU1QoUENBUF9TVVBQT1JUX1VTQikKLUFDX1NVQlNUKFVTQl9TUkMpCi0KLWRubCBjaGVjayBmb3IgbmV0ZmlsdGVyIHNuaWZmaW5nIHN1cHBvcnQKKyMKKyMgSWYgc29tZWJvZHkgcmVxdWVzdGVkIGFuIFhYWC1vbmx5IHBjYXAsIHRoYXQgZG9lc24ndCBpbmNsdWRlCisjIGFkZGl0aW9uYWwgbWVjaGFuaXNtcy4KKyMKIGlmIHRlc3QgInh4eF9vbmx5IiAhPSB5ZXM7IHRoZW4KLQlBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciB0aGUgcGxhdGZvcm0gY291bGQgc3VwcG9ydCBuZXRmaWx0ZXIgc25pZmZpbmcpCi0JY2FzZSAiJGhvc3Rfb3MiIGluCi0JbGludXgqKQotCQlBQ19NU0dfUkVTVUxUKHllcykKLQkJIwotCQkjIExpZmUncyB0b28gc2hvcnQgdG8gZGVhbCB3aXRoIHRyeWluZyB0byBnZXQgdGhpcyB0byBjb21waWxlCi0JCSMgaWYgeW91IGRvbid0IGdldCB0aGUgcmlnaHQgdHlwZXMgZGVmaW5lZCB3aXRoCi0JCSMgX19LRVJORUxfU1RSSUNUX05BTUVTIGdldHRpbmcgZGVmaW5lZCBieSBzb21lIG90aGVyIGluY2x1ZGUuCi0JCSMKLQkJIyBDaGVjayB3aGV0aGVyIHRoZSBpbmNsdWRlcyBKdXN0IFdvcmsuICBJZiBub3QsIGRvbid0IHR1cm4gb24KLQkJIyBuZXRmaWx0ZXIgc3VwcG9ydC4KLQkJIwotCQlBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciB3ZSBjYW4gY29tcGlsZSB0aGUgbmV0ZmlsdGVyIHN1cHBvcnQpCi0JCUFDX0NBQ0hFX1ZBTChhY19jdl9uZXRmaWx0ZXJfY2FuX2NvbXBpbGUsCi0JCSAgQUNfVFJZX0NPTVBJTEUoWworICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgbGludXgqKQorICAgIGRubCBjaGVjayBmb3IgVVNCIHNuaWZmaW5nIHN1cHBvcnQKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIExpbnV4IHVzYm1vbiBVU0Igc25pZmZpbmcgc3VwcG9ydCkKKyAgICBpZiB0ZXN0ICJ4JGVuYWJsZV91c2IiICE9ICJ4bm8iIDsgdGhlbgorICAgICAgQUNfREVGSU5FKFBDQVBfU1VQUE9SVF9MSU5VWF9VU0JNT04sIDEsIFt0YXJnZXQgaG9zdCBzdXBwb3J0cyBMaW51eCB1c2Jtb24gZm9yIFVTQiBzbmlmZmluZ10pCisgICAgICBNT0RVTEVfQ19TUkM9IiRNT0RVTEVfQ19TUkMgcGNhcC11c2ItbGludXguYyIKKyAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgYWNfdXNiX2Rldl9uYW1lPWB1ZGV2aW5mbyAtcSBuYW1lIC1wIC9zeXMvY2xhc3MvdXNiX2RldmljZS91c2Jtb24gMj4vZGV2L251bGxgCisgICAgICBpZiB0ZXN0ICQ/IC1uZSAwIDsgdGhlbgorICAgICAgICBhY191c2JfZGV2X25hbWU9InVzYm1vbiIKKyAgICAgIGZpCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoTElOVVhfVVNCX01PTl9ERVYsICIvZGV2LyRhY191c2JfZGV2X25hbWUiLCBbcGF0aCBmb3IgZGV2aWNlIGZvciBVU0Igc25pZmZpbmddKQorICAgICAgQUNfTVNHX05PVElDRShEZXZpY2UgZm9yIFVTQiBzbmlmZmluZyBpcyAvZGV2LyRhY191c2JfZGV2X25hbWUpCisgICAgICAjCisgICAgICAjIERvIHdlIGhhdmUgYSB2ZXJzaW9uIG9mIDxsaW51eC9jb21waWxlci5oPiBhdmFpbGFibGU/CisgICAgICAjIElmIHNvLCB3ZSBtaWdodCBuZWVkIGl0IGZvciA8bGludXgvdXNiZGV2aWNlX2ZzLmg+LgorICAgICAgIworICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhsaW51eC9jb21waWxlci5oKQorICAgICAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9saW51eF9jb21waWxlcl9oIiA9IHllczsgdGhlbgorICAgICAgICAjCisgICAgICAgICMgWWVzIC0gaW5jbHVkZSBpdCB3aGVuIHRlc3RpbmcgZm9yIDxsaW51eC91c2JkZXZpY2VfZnMuaD4uCisgICAgICAgICMKKyAgICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhsaW51eC91c2JkZXZpY2VfZnMuaCwsLFsjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD5dKQorICAgICAgZWxzZQorICAgICAgICBBQ19DSEVDS19IRUFERVJTKGxpbnV4L3VzYmRldmljZV9mcy5oKQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfbGludXhfdXNiZGV2aWNlX2ZzX2giID0geWVzOyB0aGVuCisgICAgICAgICMKKyAgICAgICAgIyBPSywgZG9lcyBpdCBkZWZpbmUgYlJlcXVlc3RUeXBlPyAgT2xkZXIgdmVyc2lvbnMgb2YgdGhlIGtlcm5lbAorICAgICAgICAjIGRlZmluZSBmaWVsZHMgd2l0aCBuYW1lcyBsaWtlICJyZXF1ZXN0dHlwZSwgInJlcXVlc3QiLCBhbmQKKyAgICAgICAgIyAidmFsdWUiLCByYXRoZXIgdGhhbiAiYlJlcXVlc3RUeXBlIiwgImJSZXF1ZXN0IiwgYW5kCisgICAgICAgICMgIndWYWx1ZSIuCisgICAgICAgICMKKyAgICAgICAgQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHVzYmRldmZzX2N0cmx0cmFuc2Zlci5iUmVxdWVzdFR5cGVdLCwsCisgICAgICAgICAgWworICAgICAgICAgICAgQUNfSU5DTFVERVNfREVGQVVMVAorICAgICAgICAgICAgI2lmZGVmIEhBVkVfTElOVVhfQ09NUElMRVJfSAorICAgICAgICAgICAgI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICNpbmNsdWRlIDxsaW51eC91c2JkZXZpY2VfZnMuaD4KKyAgICAgICAgICBdKQorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgIGZpCisKKyAgICAjCisgICAgIyBMaWZlJ3MgdG9vIHNob3J0IHRvIGRlYWwgd2l0aCB0cnlpbmcgdG8gZ2V0IHRoaXMgdG8gY29tcGlsZQorICAgICMgaWYgeW91IGRvbid0IGdldCB0aGUgcmlnaHQgdHlwZXMgZGVmaW5lZCB3aXRoCisgICAgIyBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMgZ2V0dGluZyBkZWZpbmVkIGJ5IHNvbWUgb3RoZXIgaW5jbHVkZS4KKyAgICAjCisgICAgIyBDaGVjayB3aGV0aGVyIHRoZSBpbmNsdWRlcyBKdXN0IFdvcmsuICBJZiBub3QsIGRvbid0IHR1cm4gb24KKyAgICAjIG5ldGZpbHRlciBzdXBwb3J0LgorICAgICMKKyAgICBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciB3ZSBjYW4gY29tcGlsZSB0aGUgbmV0ZmlsdGVyIHN1cHBvcnQpCisgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X25ldGZpbHRlcl9jYW5fY29tcGlsZSwKKyAgICAgIEFDX1RSWV9DT01QSUxFKFsKIEFDX0lOQ0xVREVTX0RFRkFVTFQKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgpAQCAtMTk4NiwyMyArMjMxNiwyMCBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuaD5dLAotCQkgICAgW10sCi0JCSAgICBhY19jdl9uZXRmaWx0ZXJfY2FuX2NvbXBpbGU9eWVzLAotCQkgICAgYWNfY3ZfbmV0ZmlsdGVyX2Nhbl9jb21waWxlPW5vKSkKLQkJQUNfTVNHX1JFU1VMVCgkYWNfY3ZfbmV0ZmlsdGVyX2Nhbl9jb21waWxlKQotCQlpZiB0ZXN0ICRhY19jdl9uZXRmaWx0ZXJfY2FuX2NvbXBpbGUgPSB5ZXMgOyB0aGVuCi0JCSAgQUNfREVGSU5FKFBDQVBfU1VQUE9SVF9ORVRGSUxURVIsIDEsCi0JCSAgICBbdGFyZ2V0IGhvc3Qgc3VwcG9ydHMgbmV0ZmlsdGVyIHNuaWZmaW5nXSkKLQkJICBORVRGSUxURVJfU1JDPXBjYXAtbmV0ZmlsdGVyLWxpbnV4LmMKLQkJZmkKLQkJOzsKLQkqKQotCQlBQ19NU0dfUkVTVUxUKG5vKQotCQk7OwotCWVzYWMKKyAgICAgICAgW10sCisgICAgICAgIGFjX2N2X25ldGZpbHRlcl9jYW5fY29tcGlsZT15ZXMsCisgICAgICAgIGFjX2N2X25ldGZpbHRlcl9jYW5fY29tcGlsZT1ubykpCisgICAgQUNfTVNHX1JFU1VMVCgkYWNfY3ZfbmV0ZmlsdGVyX2Nhbl9jb21waWxlKQorICAgIGlmIHRlc3QgJGFjX2N2X25ldGZpbHRlcl9jYW5fY29tcGlsZSA9IHllcyA7IHRoZW4KKyAgICAgIEFDX0RFRklORShQQ0FQX1NVUFBPUlRfTkVURklMVEVSLCAxLAorICAgICAgICBbdGFyZ2V0IGhvc3Qgc3VwcG9ydHMgbmV0ZmlsdGVyIHNuaWZmaW5nXSkKKyAgICAgIE1PRFVMRV9DX1NSQz0iJE1PRFVMRV9DX1NSQyBwY2FwLW5ldGZpbHRlci1saW51eC5jIgorICAgIGZpCisgICAgOzsKKyAgZXNhYwogZmkKK0FDX1NVQlNUKFBDQVBfU1VQUE9SVF9MSU5VWF9VU0JNT04pCiBBQ19TVUJTVChQQ0FQX1NVUFBPUlRfTkVURklMVEVSKQotQUNfU1VCU1QoTkVURklMVEVSX1NSQykKIAogQUNfQVJHX0VOQUJMRShbbmV0bWFwXSwKIFtBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbmV0bWFwXSxbZW5hYmxlIG5ldG1hcCBzdXBwb3J0IEA8OkBkZWZhdWx0PXllcywgaWYgc3VwcG9ydCBhdmFpbGFibGVAOj5AXSldLApAQCAtMjAyOSwxMiArMjM1NiwyNDkgQEAKIAlpZiB0ZXN0ICRhY19jdl9uZXRfbmV0bWFwX3VzZXJfY2FuX2NvbXBpbGUgPSB5ZXMgOyB0aGVuCiAJICBBQ19ERUZJTkUoUENBUF9TVVBQT1JUX05FVE1BUCwgMSwKIAkgICAgW3RhcmdldCBob3N0IHN1cHBvcnRzIG5ldG1hcF0pCi0JICAgIE5FVE1BUF9TUkM9cGNhcC1uZXRtYXAuYworCSAgICBNT0RVTEVfQ19TUkM9IiRNT0RVTEVfQ19TUkMgcGNhcC1uZXRtYXAuYyIKIAlmaQogCUFDX1NVQlNUKFBDQVBfU1VQUE9SVF9ORVRNQVApCi0JQUNfU1VCU1QoTkVUTUFQX1NSQykKIGZpCiAKKyMgQ2hlY2sgZm9yIERQREsgc3VwcG9ydC4KK0FDX0FSR19XSVRIKFtkcGRrXSwKK0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtZHBka0A8OkA9RElSQDo+QF0sW2luY2x1ZGUgRFBESyBzdXBwb3J0IChsb2NhdGVkIGluIGRpcmVjdG9yeSBESVIsIGlmIHN1cHBsaWVkKS4gIEA8OkBkZWZhdWx0PXllcywgaWYgcHJlc2VudEA6PkBdKSwKK1sKKwlpZiB0ZXN0ICIkd2l0aHZhbCIgPSBubworCXRoZW4KKwkJIyBVc2VyIGRvZXNuJ3Qgd2FudCBEUERLIHN1cHBvcnQuCisJCXdhbnRfZHBkaz1ubworCWVsaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzCisJdGhlbgorCQkjIFVzZXIgd2FudHMgRFBESyBzdXBwb3J0IGJ1dCBoYXNuJ3Qgc3BlY2lmaWVkIGEgZGlyZWN0b3J5LgorCQl3YW50X2RwZGs9eWVzCisJZWxzZQorCQkjIFVzZXIgd2FudHMgRFBESyBzdXBwb3J0IGFuZCBoYXMgc3BlY2lmaWVkIGEgZGlyZWN0b3J5LAorCQkjIHNvIHVzZSB0aGUgcHJvdmlkZWQgdmFsdWUuCisJCXdhbnRfZHBkaz15ZXMKKwkJZHBka19kaXI9JHdpdGh2YWwKKwlmaQorXSxbCisJaWYgdGVzdCAiJFZfUENBUCIgPSBkcGRrOyB0aGVuCisJCSMgVXNlciByZXF1ZXN0ZWQgRFBESy1vbmx5IGxpYnBjYXAsIHNvIHdlJ2QgYmV0dGVyIGhhdmUKKwkJIyB0aGUgRFBESyBBUEkuCisJCXdhbnRfZHBkaz15ZXMKKwllbGlmIHRlc3QgInh4eF9vbmx5IiA9IHllczsgdGhlbgorCQkjIFVzZXIgcmVxdWVzdGVkIHNvbWV0aGluZy1lbHNlLW9ubHkgcGNhcCwgc28gdGhleSBkb24ndAorCQkjIHdhbnQgRFBESyBzdXBwb3J0LgorCQl3YW50X2RwZGs9bm8KKwllbHNlCisJCSMKKwkJIyBVc2UgRFBESyBBUEkgaWYgcHJlc2VudCwgb3RoZXJ3aXNlIGRvbid0CisJCSMKKwkJd2FudF9kcGRrPWlmcHJlc2VudAorCWZpCitdKQorCitpZiB0ZXN0ICIkd2FudF9kcGRrIiAhPSBubzsgdGhlbgorCWlmIHRlc3QgIngkUEtHQ09ORklHIiAhPSAieG5vIgorCXRoZW4KKwkJIworCQkjIFdlIGhhdmUgcGtnLWNvbmZpZzsgc2VlIGlmIHdlIGhhdmUgRFBESyBpbnN0YWxsZWQKKwkJIyBhcyBhIHBhY2thZ2UuCisJCSMKKwkJQUNfTVNHX0NIRUNLSU5HKFtmb3IgRFBESyB3aXRoIHBrZy1jb25maWddKQorCQlpZiAiJFBLR0NPTkZJRyIgbGliZHBkaworCQl0aGVuCisJCQlBQ19NU0dfUkVTVUxUKFtmb3VuZF0pCisJCQlmb3VuZF9kcGRrX3dpdGhfcGtnX2NvbmZpZz15ZXMKKwkJCURQREtfQ0ZMQUdTPWAiJFBLR0NPTkZJRyIgLS1jZmxhZ3MgbGliZHBka2AKKwkJCURQREtfTERGTEFHUz1gIiRQS0dDT05GSUciIC0tbGlicyBsaWJkcGRrYAorCQllbHNlCisJCQlBQ19NU0dfUkVTVUxUKFtub3QgZm91bmRdKQorCQlmaQorCWZpCisKKwkjCisJIyBJZiB3ZSBkaWRuJ3QgZmluZCBpdCB3aXRoIHBrZy1jb25maWcsIHRyeSBjaGVja2luZyBmb3IKKwkjIGl0IG1hbnVhbGx5LgorCSMKKwlpZiB0ZXN0ICJ4JGZvdW5kX2RwZGtfd2l0aF9wa2dfY29uZmlnIiAhPSAieHllcyIKKwl0aGVuCisJCWlmIHRlc3QgLXogIiRkcGRrX2RpciI7IHRoZW4KKwkJCSMKKwkJCSMgVGhlIHVzZXIgZGlkbid0IHNwZWNpZnkgYSBkaXJlY3RvcnkgY29udGFpbmluZworCQkJIyB0aGUgRFBESyBoZWFkZXJzIGFuZCBsaWJyYXJpZXMuICBJZiB3ZSBmaW5kCisJCQkjIGEgL3Vzci9sb2NhbC9pbmNsdWRlL2RwZGsgZGlyZWN0b3J5LCBhc3N1bWUKKwkJCSMgaXQncyAvdXNyL2xvY2FsLCBvdGhlcndpc2UgYXNzdW1lIGl0J3MgL3Vzci4KKwkJCSMKKwkJCWlmIHRlc3QgLWQgIi91c3IvbG9jYWwvaW5jbHVkZS9kcGRrIjsgdGhlbgorCQkJCWRwZGtfZGlyPSIvdXNyL2xvY2FsIgorCQkJZWxzZQorCQkJCWRwZGtfZGlyPSIvdXNyIgorCQkJZmkKKwkJZmkKKwkJIworCQkjIFRoZSBjb252ZW50aW9uIGFwcGVhcnMgdG8gYmUgdGhhdCAxKSB0aGVyZSdzIGEgImRwZGsiCisJCSMgc3ViZGlyZWN0b3J5IG9mIHRoZSBpbmNsdWRlIGRpcmVjdG9yeSwgY29udGFpbmluZyBEUERLCisJCSMgaGVhZGVycyAoYXQgbGVhc3QgaW4gdGhlIGluc3RhbGxhdGlvbiBvbiBVYnVudHUgd2l0aAorCQkjIHRoZSBzeXN0ZW0gRFBESyBwYWNrYWdlcykgYW5kIDIpIGluY2x1ZGVzIG9mIERQREsKKwkJIyBoZWFkZXJzIGRvbid0IHVzZSAiZHBkay97aGVhZGVyfSIgKGF0IGxlYXN0IGZyb20gdGhlCisJCSMgd2F5IHRoZSBEUERLIGRvY3VtZW50YXRpb24gaXMgd3JpdHRlbikuCisJCSMKKwkJIyBTbyB3ZSBhZGQgIi9kcGRrIiB0byB0aGUgaW5jbHVkZSBkaXJlY3RvcnksIGFuZCBhbHdheXMKKwkJIyBhZGQgdGhhdCB0byB0aGUgbGlzdCBvZiBpbmNsdWRlIGRpcmVjdG9yaWVzIHRvIHNlYXJjaC4KKwkJIworCQlkcGRrX2luY19kaXI9IiRkcGRrX2Rpci9pbmNsdWRlL2RwZGsiCisJCWRwZGtfaW5jX2ZsYWdzPSItSSRkcGRrX2luY19kaXIiCisJCWRwZGtfbGliX2Rpcj0iJGRwZGtfZGlyL2xpYiIKKwkJIworCQkjIEhhbmRsZSBtdWx0aWFyY2ggc3lzdGVtcy4KKwkJIworCQkjIFN0ZXAgMTogcnVuIHRoZSBDIGNvbXBpbGVyIHdpdGggdGhlIC1kdW1wbWFjaGluZSBvcHRpb247CisJCSMgaWYgaXQgc3VjY2VlZHMsIHRoZSBvdXRwdXQgd291bGQgYmUgdGhlIG11bHRpYXJjaCBkaXJlY3RvcnkKKwkJIyBuYW1lIGlmIHlvdXIgc3lzdGVtIGhhcyBtdWx0aWFyY2ggZGlyZWN0b3JpZXMuCisJCSMKKwkJbXVsdGlhcmNoX2Rpcj1gJENDIC1kdW1wbWFjaGluZSAyPi9kZXYvbnVsbGAKKwkJaWYgdGVzdCAhIC16ICIkbXVsdGlhcmNoX2RpciIKKwkJdGhlbgorCQkJIworCQkJIyBPSywgd2UgaGF2ZSBhIG11bHRpYXJjaCBkaXJlY3RvcnkuCisJCQkjCisJCQkjIE5vdyBkZWFsIHdpdGggaW5jbHVkZXMuICBPbiBVYnVudHUgMjAuMDQsIGZvcgorCQkJIyBleGFtcGxlLCB3ZSBoYXZlIC91c3IvaW5jbHVkZS9kcGRrICphbmQqCisJCQkjIC91c3IvaW5jbHVkZS8kbXVsdGlhcmNoX2Rpci9kcGRrLCBhbmQgbXVzdAorCQkJIyBzZWFyY2ggYm90aC4KKwkJCSMKKwkJCWlmIHRlc3QgLWQgIiRkcGRrX2Rpci9pbmNsdWRlLyRtdWx0aWFyY2hfZGlyL2RwZGsiCisJCQl0aGVuCisJCQkJZHBka19pbmNfZmxhZ3M9Ii1JJGRwZGtfZGlyL2luY2x1ZGUvJG11bHRpYXJjaF9kaXIvZHBkayAkZHBka19pbmNfZmxhZ3MiCisJCQlmaQorCisJCQkjCisJCQkjIE5vdyBkZWFsIHdpdGggbGlicmFyaWVzLgorCQkJIworCQkJaWYgdGVzdCAtZCAiJGRwZGtfbGliX2Rpci8kbXVsdGlhcmNoX2RpciIKKwkJCXRoZW4KKwkJCQlkcGRrX2xpYl9kaXI9IiRkcGRrX2xpYl9kaXIvJG11bHRpYXJjaF9kaXIiCisJCQlmaQorCQlmaQorCQlEUERLX01BQ0hJTkVfQ0ZMQUdTPSItbWFyY2g9bmF0aXZlIgorCQlEUERLX0NGTEFHUz0iJERQREtfTUFDSElORV9DRkxBR1MgJGRwZGtfaW5jX2ZsYWdzIgorCQlEUERLX0xERkxBR1M9Ii1MJGRwZGtfbGliX2RpciAtbGRwZGsgLWxydCAtbG0gLWxudW1hIC1sZGwgLXB0aHJlYWQiCisJZmkKKworCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCXNhdmVfTElCUz0iJExJQlMiCisJc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKwlDRkxBR1M9IiRDRkxBR1MgJERQREtfQ0ZMQUdTIgorCUxJQlM9IiRMSUJTICREUERLX0xERkxBR1MiCisJTERGTEFHUz0iJExERkxBR1MgJERQREtfTERGTEFHUyIKKworCUFDX01TR19DSEVDS0lORyh3aGV0aGVyIHdlIGNhbiBjb21waWxlIHRoZSBEUERLIHN1cHBvcnQpCisJQUNfQ0FDSEVfVkFMKGFjX2N2X2RwZGtfY2FuX2NvbXBpbGUsCisJQUNfVFJZX0NPTVBJTEUoWworQUNfSU5DTFVERVNfREVGQVVMVAorI2luY2x1ZGUgPHJ0ZV9jb21tb24uaD5dLAorCSAgICBbXSwKKwkgICAgYWNfY3ZfZHBka19jYW5fY29tcGlsZT15ZXMsCisJICAgIGFjX2N2X2RwZGtfY2FuX2NvbXBpbGU9bm8pKQorCUFDX01TR19SRVNVTFQoJGFjX2N2X2RwZGtfY2FuX2NvbXBpbGUpCisKKwkjCisJIyBXZSBpbmNsdWRlIHJ0ZV9idXMuaCwgYW5kIG9sZGVyIHZlcnNpb25zIG9mIERQREsKKwkjIGRpZG4ndCBoYXZlIGl0LCBzbyBjaGVjayBmb3IgaXQuCisJIworCWlmIHRlc3QgIiRhY19jdl9kcGRrX2Nhbl9jb21waWxlIiA9IHllczsgdGhlbgorCQkjCisJCSMgVGhpcyBydW5zIHRoZSBwcmVwcm9jZXNzb3IsIHNvIG1ha2Ugc3VyZSBpdAorCQkjIGxvb2tzIGluIHRoZSBEUERLIGRpcmVjdG9yaWVzLiAgSW5zdGVhZCBvZgorCQkjIGluY2x1ZGluZyBkcGRrL1hYWC5oLCB3ZSBpbmNsdWRlIGp1c3QgWFhYLmgKKwkJIyBhbmQgYXNzdW1lIERQREtfQ0ZMQUdTIGlzIHRoZSBkaXJlY3RvcnkKKwkJIyBjb250YWluaW5nIHRoZSBEUERLIGhlYWRlcnMgKHRoYXQncyBob3cKKwkJIyBwa2ctY29uZmlnIHNldHMgaXQsIGF0IGxlYXN0IG9uIFVidW50dSksCisJCSMgc28ganVzdCBsb29raW5nIHVuZGVyIC91c3IvaW5jbHVkZSB3b24ndAorCQkjIGZpbmQgaXQuCisJCSMKKwkJc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorCQlDUFBGTEFHUz0iJENQUEZMQUdTICREUERLX0NGTEFHUyIKKwkJQUNfQ0hFQ0tfSEVBREVSKHJ0ZV9idXMuaCkKKwkJQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgorCWZpCisKKwkjCisJIyBXZSBjYWxsIHJ0ZV9ldGhfZGV2X2NvdW50X2F2YWlsKCksIGFuZCBvbGRlciB2ZXJzaW9ucworCSMgb2YgRFBESyBkaWRuJ3QgaGF2ZSBpdCwgc28gY2hlY2sgZm9yIGl0LgorCSMKKwlpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3J0ZV9idXNfaCIgPSB5ZXM7IHRoZW4KKwkJQUNfQ0hFQ0tfRlVOQyhydGVfZXRoX2Rldl9jb3VudF9hdmFpbCkKKwlmaQorCisJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisJTElCUz0iJHNhdmVfTElCUyIKKwlMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorCisJaWYgdGVzdCAiJGFjX2N2X2Z1bmNfcnRlX2V0aF9kZXZfY291bnRfYXZhaWwiID0geWVzOyB0aGVuCisJCUNGTEFHUz0iJENGTEFHUyAkRFBES19DRkxBR1MiCisJCUxJQlM9IiRMSUJTICREUERLX0xERkxBR1MiCisJCUxERkxBR1M9IiRMREZMQUdTICREUERLX0xERkxBR1MiCisJCVZfSU5DTFM9IiRWX0lOQ0xTICREUERLX0NGTEFHUyIKKwkJQUNfREVGSU5FKFBDQVBfU1VQUE9SVF9EUERLLCAxLCBbdGFyZ2V0IGhvc3Qgc3VwcG9ydHMgRFBES10pCisJCWlmIHRlc3QgJFZfUENBUCAhPSBkcGRrIDsgdGhlbgorCQkJTU9EVUxFX0NfU1JDPSIkTU9EVUxFX0NfU1JDIHBjYXAtZHBkay5jIgorCQlmaQorCisJCSMKKwkJIyBDaGVjayB3aGV0aGVyIHRoZSBydGVfZXRoZXIuaCBmaWxlIGRlZmluZXMKKwkJIyBzdHJ1Y3QgZXRoZXJfYWRkciBvciBzdHJ1Y3QgcnRlX2V0aGVyX2FkZHIuCisJCSMKKwkJIyAoIkFQSSBjb21wYXRpYmlsaXR5PyAgVGhhdCdzIGZvciBsb3NlcnMhIikKKwkJIworCQlBQ19DSEVDS19UWVBFUyhzdHJ1Y3QgcnRlX2V0aGVyX2FkZHIsLCwKKwkJICAgIFsKKwkJCSNpbmNsdWRlIDxydGVfZXRoZXIuaD4KKwkJICAgIF0pCisJZWxzZQorCQlpZiB0ZXN0ICIkVl9QQ0FQIiA9IGRwZGs7IHRoZW4KKwkJCSMgVXNlciByZXF1ZXN0ZWQgRFBESy1vbmx5IGNhcHR1cmUgc3VwcG9ydCwgYnV0CisJCQkjIHdlIGNvdWxkbid0IHRoZSBEUERLIEFQSSBzdXBwb3J0IGF0IGFsbCwgb3Igd2UKKwkJCSMgZm91bmQgaXQgYnV0IGl0IHdhc24ndCBhIHN1ZmZpY2llbnRseSByZWNlbnQKKwkJCSMgdmVyc2lvbi4KKwkJCWlmIHRlc3QgIiRhY19jdl9kcGRrX2Nhbl9jb21waWxlIiAhPSB5ZXM7IHRoZW4KKwkJCQkjCisJCQkJIyBDb3VsZG4ndCBldmVuIGZpbmQgdGhlIGhlYWRlcnMuCisJCQkJIworCQkJCUFDX01TR19FUlJPUihbRFBESyBzdXBwb3J0IHJlcXVlc3RlZCB3aXRoIC0td2l0aC1wY2FwPWRwZGssIGJ1dCB0aGUgRFBESyBoZWFkZXJzIHdlcmVuJ3QgZm91bmQgYXQgJGRwZGtfaW5jX2RpcjogbWFrZSBzdXJlIHRoZSBEUERLIHN1cHBvcnQgaXMgaW5zdGFsbGVkLCBzcGVjaWZ5IGEgZGlmZmVyZW50IHBhdGggb3IgcGF0aHMgaWYgbmVjZXNzYXJ5LCBvciBkb24ndCByZXF1ZXN0IERQREsgc3VwcG9ydF0pCisJCQllbHNlCisJCQkJIworCQkJCSMgRm91bmQgdGhlIGhlYWRlcnMsIGJ1dCB3ZSBjb3VsZG4ndCBmaW5kCisJCQkJIyBydGVfYnVzLmggb3IgcnRlX2V0aF9kZXZfY291bnRfYXZhaWwoKSwKKwkJCQkjIHdlIGRvbid0IGhhdmUgYSBzdWZmaWNpZW50bHkgcmVjZW50CisJCQkJIyB2ZXJzaW9uIG9mIERQREsuCisJCQkJIworCQkJCUFDX01TR19FUlJPUihbRFBESyBzdXBwb3J0IHJlcXVlc3RlZCB3aXRoIC0td2l0aC1wY2FwPWRwZGssIGJ1dCB3ZSByZXF1aXJlIERQREsgMTgueCBvciBsYXRlcjsgaW5zdGFsbCBhIG5ld2VyIHZlcnNpb24gb2YgRFBESywgb3IgZG9uJ3QgcmVxdWVzdCBEUERLIHN1cHBvcnRdKQorCQkJZmkKKwkJZmkKKworCQlpZiB0ZXN0ICIkd2FudF9kcGRrIiA9IHllczsgdGhlbgorCQkJIyBVc2VyIHJlcXVlc3RlZCBEUERLLW9ubHkgY2FwdHVyZSBzdXBwb3J0LCBidXQKKwkJCSMgd2UgY291bGRuJ3QgdGhlIERQREsgQVBJIHN1cHBvcnQgYXQgYWxsLCBvciB3ZQorCQkJIyBmb3VuZCBpdCBidXQgaXQgd2Fzbid0IGEgc3VmZmljaWVudGx5IHJlY2VudAorCQkJIyB2ZXJzaW9uLgorCQkJaWYgdGVzdCAiJGFjX2N2X2RwZGtfY2FuX2NvbXBpbGUiICE9IHllczsgdGhlbgorCQkJCSMKKwkJCQkjIENvdWxkbid0IGV2ZW4gZmluZCB0aGUgaGVhZGVycy4KKwkJCQkjCisJCQkJQUNfTVNHX0VSUk9SKFtEUERLIHN1cHBvcnQgcmVxdWVzdGVkIHdpdGggLS13aXRoLXBjYXA9ZHBkaywgYnV0IHRoZSBEUERLIGhlYWRlcnMgd2VyZW4ndCBmb3VuZCBhdCAkZHBka19pbmNfZGlyOiBtYWtlIHN1cmUgdGhlIERQREsgc3VwcG9ydCBpcyBpbnN0YWxsZWQsIHNwZWNpZnkgYSBkaWZmZXJlbnQgcGF0aCBvciBwYXRocyBpZiBuZWNlc3NhcnksIG9yIGRvbid0IHJlcXVlc3QgRFBESyBzdXBwb3J0XSkKKwkJCWVsc2UKKwkJCQkjCisJCQkJIyBGb3VuZCB0aGUgaGVhZGVycywgYnV0IHdlIGNvdWxkbid0IGZpbmQKKwkJCQkjIHJ0ZV9idXMuaCBvciBydGVfZXRoX2Rldl9jb3VudF9hdmFpbCgpLAorCQkJCSMgd2UgZG9uJ3QgaGF2ZSBhIHN1ZmZpY2llbnRseSByZWNlbnQKKwkJCQkjIHZlcnNpb24gb2YgRFBESy4KKwkJCQkjCisJCQkJQUNfTVNHX0VSUk9SKFtEUERLIHN1cHBvcnQgcmVxdWVzdGVkIHdpdGggLS13aXRoLXBjYXA9ZHBkaywgYnV0IHdlIHJlcXVpcmUgRFBESyAxOC54IG9yIGxhdGVyOiBpbnN0YWxsIGEgbmV3ZXIgdmVyc2lvbiBvZiBEUERLLCBvciBkb24ndCByZXF1ZXN0IERQREsgc3VwcG9ydF0pCisJCQlmaQorCQlmaQorCWZpCitmaQorQUNfU1VCU1QoUENBUF9TVVBQT1JUX0RQREspCiAKIEFDX0FSR19FTkFCTEUoW2JsdWV0b290aF0sCiBbQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWJsdWV0b290aF0sW2VuYWJsZSBCbHVldG9vdGggc3VwcG9ydCBAPDpAZGVmYXVsdD15ZXMsIGlmIHN1cHBvcnQgYXZhaWxhYmxlQDo+QF0pXSwKQEAgLTIwNTgsNyArMjYyMiw3IEBACiAJCQkjIHNuaWZmaW5nLgogCQkJIwogCQkJQUNfREVGSU5FKFBDQVBfU1VQUE9SVF9CVCwgMSwgW3RhcmdldCBob3N0IHN1cHBvcnRzIEJsdWV0b290aCBzbmlmZmluZ10pCi0JCQlCVF9TUkM9cGNhcC1idC1saW51eC5jCisJCQlNT0RVTEVfQ19TUkM9IiRNT0RVTEVfQ19TUkMgcGNhcC1idC1saW51eC5jIgogCQkJQUNfTVNHX05PVElDRShCbHVldG9vdGggc25pZmZpbmcgaXMgc3VwcG9ydGVkKQogCQkJYWNfbGJsX2JsdWV0b290aF9hdmFpbGFibGU9eWVzCiAKQEAgLTIwODUsNyArMjY0OSw3IEBACiAJCQkJCSAgICBBQ19NU0dfUkVTVUxUKHllcykKIAkJCQkJICAgIEFDX0RFRklORShQQ0FQX1NVUFBPUlRfQlRfTU9OSVRPUiwsCiAJCQkJCSAgICAgIFt0YXJnZXQgaG9zdCBzdXBwb3J0cyBCbHVldG9vdGggTW9uaXRvcl0pCi0JCQkJCSAgICBCVF9NT05JVE9SX1NSQz1wY2FwLWJ0LW1vbml0b3ItbGludXguYworCQkJCQkgICAgTU9EVUxFX0NfU1JDPSIkTU9EVUxFX0NfU1JDIHBjYXAtYnQtbW9uaXRvci1saW51eC5jIgogCQkJCQldLAogCQkJCQlbCiAJCQkJCSAgICBBQ19NU0dfUkVTVUxUKG5vKQpAQCAtMjExNyw4ICsyNjgxLDYgQEAKIAkJOzsKIAllc2FjCiAJQUNfU1VCU1QoUENBUF9TVVBQT1JUX0JUKQotCUFDX1NVQlNUKEJUX1NSQykKLQlBQ19TVUJTVChCVF9NT05JVE9SX1NSQykKIGZpCiAKIEFDX0FSR19FTkFCTEUoW2RidXNdLApAQCAtMjE2NSw3ICsyNzI3LDYgQEAKIGZpCiAKIGlmIHRlc3QgIngkZW5hYmxlX2RidXMiICE9ICJ4bm8iOyB0aGVuCi0JQUNfQ0hFQ0tfUFJPRyhbUEtHQ09ORklHXSwgW3BrZy1jb25maWddLCBbcGtnLWNvbmZpZ10sIFtub10pCiAJaWYgdGVzdCAieCRQS0dDT05GSUciICE9ICJ4bm8iOyB0aGVuCiAJCUFDX01TR19DSEVDS0lORyhbZm9yIEQtQnVzXSkKIAkJaWYgIiRQS0dDT05GSUciIGRidXMtMTsgdGhlbgpAQCAtMjE4OCw3ICsyNzQ5LDcgQEAKIAkJCSAgICBbCiAJCQkJQUNfTVNHX1JFU1VMVChbeWVzXSkKIAkJCQlBQ19ERUZJTkUoUENBUF9TVVBQT1JUX0RCVVMsIDEsIFtzdXBwb3J0IEQtQnVzIHNuaWZmaW5nXSkKLQkJCQlEQlVTX1NSQz1wY2FwLWRidXMuYworCQkJCU1PRFVMRV9DX1NSQz0iJE1PRFVMRV9DX1NSQyBwY2FwLWRidXMuYyIKIAkJCQlWX0lOQ0xTPSIkVl9JTkNMUyAkREJVU19DRkxBR1MiCiAJCQkgICAgXSwKIAkJCSAgICBbCkBAIC0yMjA3LDIxICsyNzY4LDIwIEBACiAJCWZpCiAJZmkKIAlBQ19TVUJTVChQQ0FQX1NVUFBPUlRfREJVUykKLQlBQ19TVUJTVChEQlVTX1NSQykKIGZpCiAKIEFDX0FSR19FTkFCTEUoW3JkbWFdLAogW0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1yZG1hXSxbZW5hYmxlIFJETUEgY2FwdHVyZSBzdXBwb3J0IEA8OkBkZWZhdWx0PXllcywgaWYgc3VwcG9ydCBhdmFpbGFibGVAOj5AXSldLAogICAgIFtdLAotICAgIFtlbmFibGVfcmRtYXNuaWZmPWlmYXZhaWxhYmxlXSkKKyAgICBbZW5hYmxlX3JkbWE9aWZhdmFpbGFibGVdKQogCiBpZiB0ZXN0ICJ4eHhfb25seSIgPSB5ZXM7IHRoZW4KIAkjIFVzZXIgcmVxdWVzdGVkIHNvbWV0aGluZy1lbHNlLW9ubHkgcGNhcCwgc28gdGhleSBkb24ndAogCSMgd2FudCBSRE1BIHN1cHBvcnQuCi0JZW5hYmxlX3JkbWFzbmlmZj1ubworCWVuYWJsZV9yZG1hPW5vCiBmaQogCi1pZiB0ZXN0ICJ4JGVuYWJsZV9yZG1hc25pZmYiICE9ICJ4bm8iOyB0aGVuCitpZiB0ZXN0ICJ4JGVuYWJsZV9yZG1hIiAhPSAieG5vIjsgdGhlbgogCUFDX0NIRUNLX0xJQihpYnZlcmJzLCBpYnZfZ2V0X2RldmljZV9saXN0LCBbCiAJCUFDX0NIRUNLX0hFQURFUihpbmZpbmliYW5kL3ZlcmJzLmgsIFsKIAkJCSMKQEAgLTIyNDcsNyArMjgwNyw3IEBACiAJCQkJWwogCQkJCQlBQ19NU0dfUkVTVUxUKFt5ZXNdKQogCQkJCQlBQ19ERUZJTkUoUENBUF9TVVBQT1JUX1JETUFTTklGRiwgLCBbdGFyZ2V0IGhvc3Qgc3VwcG9ydHMgUkRNQSBzbmlmZmluZ10pCi0JCQkJCVJETUFfU1JDPXBjYXAtcmRtYXNuaWZmLmMKKwkJCQkJTU9EVUxFX0NfU1JDPSIkTU9EVUxFX0NfU1JDIHBjYXAtcmRtYXNuaWZmLmMiCiAJCQkJCUxJQlM9Ii1saWJ2ZXJicyAkTElCUyIKIAkJCQldLAogCQkJCVsKQEAgLTIyNTcsNyArMjgxNyw2IEBACiAJCV0pCiAJXSkKIAlBQ19TVUJTVChQQ0FQX1NVUFBPUlRfUkRNQVNOSUZGKQotCUFDX1NVQlNUKFJETUFfU1JDKQogZmkKIAogQUNfUFJPR19JTlNUQUxMCkBAIC0yMjY5LDEyICsyODI4LDEzIEBACiAJY2F0ICRzcmNkaXIvTWFrZWZpbGUtZGV2ZWwtYWRkcyA+PiBNYWtlZmlsZQogCW1ha2UgZGVwZW5kCiBmaV0pCi1BQ19PVVRQVVQoTWFrZWZpbGUgcGNhcC1maWx0ZXIubWFubWlzYyBwY2FwLWxpbmt0eXBlLm1hbm1pc2MKK0FDX09VVFBVVChNYWtlZmlsZSBncmFtbWFyLnkgcGNhcC1maWx0ZXIubWFubWlzYyBwY2FwLWxpbmt0eXBlLm1hbm1pc2MKIAlwY2FwLXRzdGFtcC5tYW5taXNjIHBjYXAtc2F2ZWZpbGUubWFuZmlsZSBwY2FwLjNwY2FwCiAJcGNhcF9jb21waWxlLjNwY2FwIHBjYXBfZGF0YWxpbmsuM3BjYXAgcGNhcF9kdW1wX29wZW4uM3BjYXAKIAlwY2FwX2dldF90c3RhbXBfcHJlY2lzaW9uLjNwY2FwIHBjYXBfbGlzdF9kYXRhbGlua3MuM3BjYXAKIAlwY2FwX2xpc3RfdHN0YW1wX3R5cGVzLjNwY2FwIHBjYXBfb3Blbl9kZWFkLjNwY2FwCi0JcGNhcF9vcGVuX29mZmxpbmUuM3BjYXAgcGNhcF9zZXRfdHN0YW1wX3ByZWNpc2lvbi4zcGNhcAotCXBjYXBfc2V0X3RzdGFtcF90eXBlLjNwY2FwIHJwY2FwZC9NYWtlZmlsZSBycGNhcGQvcnBjYXBkLm1hbmFkbWluCisJcGNhcF9vcGVuX29mZmxpbmUuM3BjYXAgcGNhcF9zZXRfaW1tZWRpYXRlX21vZGUuM3BjYXAKKwlwY2FwX3NldF90c3RhbXBfcHJlY2lzaW9uLjNwY2FwIHBjYXBfc2V0X3RzdGFtcF90eXBlLjNwY2FwCisJcnBjYXBkL01ha2VmaWxlIHJwY2FwZC9ycGNhcGQubWFuYWRtaW4gcnBjYXBkL3JwY2FwZC1jb25maWcubWFuZmlsZQogCXRlc3Rwcm9ncy9NYWtlZmlsZSkKIGV4aXQgMApkaWZmIC0tZ2l0IGEvZGlhZy1jb250cm9sLmggYi9kaWFnLWNvbnRyb2wuaAppbmRleCBjZmM1ODFiLi40N2QzMWI5IDEwMDY0NAotLS0gYS9kaWFnLWNvbnRyb2wuaAorKysgYi9kaWFnLWNvbnRyb2wuaApAQCAtNDgsNyArNDgsNDMgQEAKICNlbmRpZgogCiAvKgotICogU3VwcHJlc3MgRmxleCB3YXJuaW5ncy4KKyAqIFN1cHByZXNzICJlbnVtIHZhbHVlIG5vdCBleHBsaWNpdGx5IGhhbmRsZWQgaW4gc3dpdGNoIiB3YXJuaW5ncy4KKyAqIFdlIG1heSBoYXZlIHRvIGJ1aWxkIG9uIG11bHRpcGxlIGRpZmZlcmVudCBXaW5kb3dzIFNES3MsIHNvIHdlCisgKiBtYXkgbm90IGJlIGFibGUgdG8gaW5jbHVkZSBhbGwgZW51bSB2YWx1ZXMgaW4gYSBzd2l0Y2gsIGFzIHRoZXkKKyAqIHdvbid0IG5lY2Vzc2FyaWx5IGJlIGRlZmluZWQgb24gYWxsIHRoZSBTREtzLCBhbmQsIHVubGlrZQorICogI2RlZmluZXMsIHRoZXJlJ3Mgbm8gZWFzeSB3YXkgdG8gdGVzdCB3aGV0aGVyIGEgZ2l2ZW4gZW51bSBoYXMKKyAqIGEgZ2l2ZW4gdmFsdWUuICBJdCAqY291bGQqIGJlIGRvbmUgYnkgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgb3IKKyAqIENNYWtlIHRlc3RzLgorICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgI2RlZmluZSBESUFHX09GRl9FTlVNX1NXSVRDSCBcCisgICAgX19wcmFnbWEod2FybmluZyhwdXNoKSkgXAorICAgIF9fcHJhZ21hKHdhcm5pbmcoZGlzYWJsZTo0MDYxKSkKKyAgI2RlZmluZSBESUFHX09OX0VOVU1fU1dJVENIIFwKKyAgICBfX3ByYWdtYSh3YXJuaW5nKHBvcCkpCisjZWxzZQorICAjZGVmaW5lIERJQUdfT0ZGX0VOVU1fU1dJVENICisgICNkZWZpbmUgRElBR19PTl9FTlVNX1NXSVRDSAorI2VuZGlmCisKKy8qCisgKiBTdXBwcmVzcyAic3dpdGNoIHN0YXRlbWVudCBoYXMgb25seSBhIGRlZmF1bHQgY2FzZSIgd2FybmluZ3MuCisgKiBUaGVyZSdzIGEgc3dpdGNoIGluIGJwZl9maWx0ZXIuYyB0aGF0IG9ubHkgaGFzIGFkZGl0aW9uYWwKKyAqIGNhc2VzIG9uIExpbnV4LgorICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgI2RlZmluZSBESUFHX09GRl9ERUZBVUxUX09OTFlfU1dJVENIIFwKKyAgICBfX3ByYWdtYSh3YXJuaW5nKHB1c2gpKSBcCisgICAgX19wcmFnbWEod2FybmluZyhkaXNhYmxlOjQwNjUpKQorICAjZGVmaW5lIERJQUdfT05fREVGQVVMVF9PTkxZX1NXSVRDSCBcCisgICAgX19wcmFnbWEod2FybmluZyhwb3ApKQorI2Vsc2UKKyAgI2RlZmluZSBESUFHX09GRl9ERUZBVUxUX09OTFlfU1dJVENICisgICNkZWZpbmUgRElBR19PTl9ERUZBVUxUX09OTFlfU1dJVENICisjZW5kaWYKKworLyoKKyAqIFN1cHByZXNzIEZsZXgsIG5hcnJvd2luZywgYW5kIGRlcHJlY2F0aW9uIHdhcm5pbmdzLgogICovCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKICAgLyoKQEAgLTY0LDcgKzEwMCwyNyBAQAogICAgIF9fcHJhZ21hKHdhcm5pbmcoZGlzYWJsZTo0MjQyKSkgXAogICAgIF9fcHJhZ21hKHdhcm5pbmcoZGlzYWJsZTo0MjQ0KSkgXAogICAgIF9fcHJhZ21hKHdhcm5pbmcoZGlzYWJsZTo0NzAyKSkKLSAgI2RlZmluZSBESUFHX09OX0ZMRVggIF9fcHJhZ21hKHdhcm5pbmcocG9wKSkKKyAgI2RlZmluZSBESUFHX09OX0ZMRVggXAorICAgIF9fcHJhZ21hKHdhcm5pbmcocG9wKSkKKworICAvKgorICAgKiBTdXBwcmVzcyBuYXJyb3dpbmcgd2FybmluZ3MuCisgICAqLworICAjZGVmaW5lIERJQUdfT0ZGX05BUlJPV0lORyBcCisgICAgX19wcmFnbWEod2FybmluZyhwdXNoKSkgXAorICAgIF9fcHJhZ21hKHdhcm5pbmcoZGlzYWJsZTo0MjQyKSkgXAorICAgIF9fcHJhZ21hKHdhcm5pbmcoZGlzYWJsZTo0MzExKSkKKyAgI2RlZmluZSBESUFHX09OX05BUlJPV0lORyBcCisgICAgX19wcmFnbWEod2FybmluZyhwb3ApKQorCisgIC8qCisgICAqIFN1cHByZXNzIGRlcHJlY2F0aW9uIHdhcm5pbmdzLgorICAgKi8KKyAgI2RlZmluZSBESUFHX09GRl9ERVBSRUNBVElPTiBcCisgICAgX19wcmFnbWEod2FybmluZyhwdXNoKSkgXAorICAgIF9fcHJhZ21hKHdhcm5pbmcoZGlzYWJsZTo0OTk2KSkKKyAgI2RlZmluZSBESUFHX09OX0RFUFJFQ0FUSU9OIFwKKyAgICBfX3ByYWdtYSh3YXJuaW5nKHBvcCkpCiAjZWxpZiBQQ0FQX0lTX0FUX0xFQVNUX0NMQU5HX1ZFUlNJT04oMiw4KQogICAvKgogICAgKiBUaGlzIGlzIENsYW5nIDIuOCBvciBsYXRlcjsgd2UgY2FuIHVzZSAiY2xhbmcgZGlhZ25vc3RpYwpAQCAtNzksMTEgKzEzNSwzMSBAQAogICAgIFBDQVBfRE9fUFJBR01BKGNsYW5nIGRpYWdub3N0aWMgcHVzaCkgXAogICAgIFBDQVBfRE9fUFJBR01BKGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdzaWduLWNvbXBhcmUiKSBcCiAgICAgUENBUF9ET19QUkFHTUEoY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RvY3VtZW50YXRpb24iKSBcCisgICAgUENBUF9ET19QUkFHTUEoY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Nob3J0ZW4tNjQtdG8tMzIiKSBcCiAgICAgUENBUF9ET19QUkFHTUEoY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9yZXR1cm4iKSBcCiAgICAgUENBUF9ET19QUkFHTUEoY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1wYXJhbWV0ZXIiKSBcCiAgICAgUENBUF9ET19QUkFHTUEoY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VucmVhY2hhYmxlLWNvZGUiKQogICAjZGVmaW5lIERJQUdfT05fRkxFWCBcCiAgICAgUENBUF9ET19QUkFHTUEoY2xhbmcgZGlhZ25vc3RpYyBwb3ApCisKKyAgLyoKKyAgICogU3VwcHJlc3MgdGhlIG9ubHkgbmFycm93aW5nIHdhcm5pbmdzIHlvdSBnZXQgZnJvbSBDbGFuZy4KKyAgICovCisgICNkZWZpbmUgRElBR19PRkZfTkFSUk9XSU5HIFwKKyAgICBQQ0FQX0RPX1BSQUdNQShjbGFuZyBkaWFnbm9zdGljIHB1c2gpIFwKKyAgICBQQ0FQX0RPX1BSQUdNQShjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc2hvcnRlbi02NC10by0zMiIpCisKKyAgI2RlZmluZSBESUFHX09OX05BUlJPV0lORyBcCisgICAgUENBUF9ET19QUkFHTUEoY2xhbmcgZGlhZ25vc3RpYyBwb3ApCisKKyAgLyoKKyAgICogU3VwcHJlc3MgZGVwcmVjYXRpb24gd2FybmluZ3MuCisgICAqLworICAjZGVmaW5lIERJQUdfT0ZGX0RFUFJFQ0FUSU9OIFwKKyAgICBQQ0FQX0RPX1BSQUdNQShjbGFuZyBkaWFnbm9zdGljIHB1c2gpIFwKKyAgICBQQ0FQX0RPX1BSQUdNQShjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiKQorICAjZGVmaW5lIERJQUdfT05fREVQUkVDQVRJT04gXAorICAgIFBDQVBfRE9fUFJBR01BKGNsYW5nIGRpYWdub3N0aWMgcG9wKQogI2VsaWYgUENBUF9JU19BVF9MRUFTVF9HTlVDX1ZFUlNJT04oNCw2KQogICAvKgogICAgKiBUaGlzIGlzIEdDQyA0LjYgb3IgbGF0ZXIsIG9yIGEgY29tcGlsZXIgY2xhaW1pbmcgdG8gYmUgdGhhdC4KQEAgLTk3LDYgKzE3MywyMSBAQAogICAgIFBDQVBfRE9fUFJBR01BKEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5yZWFjaGFibGUtY29kZSIpCiAgICNkZWZpbmUgRElBR19PTl9GTEVYIFwKICAgICBQQ0FQX0RPX1BSQUdNQShHQ0MgZGlhZ25vc3RpYyBwb3ApCisKKyAgLyoKKyAgICogR0NDIGN1cnJlbnRseSBkb2Vzbid0IGlzc3VlIGFueSBuYXJyb3dpbmcgd2FybmluZ3MuCisgICAqLworICAjZGVmaW5lIERJQUdfT0ZGX05BUlJPV0lORworICAjZGVmaW5lIERJQUdfT05fTkFSUk9XSU5HCisKKyAgLyoKKyAgICogU3VwcHJlc3MgZGVwcmVjYXRpb24gd2FybmluZ3MuCisgICAqLworICAjZGVmaW5lIERJQUdfT0ZGX0RFUFJFQ0FUSU9OIFwKKyAgICBQQ0FQX0RPX1BSQUdNQShHQ0MgZGlhZ25vc3RpYyBwdXNoKSBcCisgICAgUENBUF9ET19QUkFHTUEoR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIpCisgICNkZWZpbmUgRElBR19PTl9ERVBSRUNBVElPTiBcCisgICAgUENBUF9ET19QUkFHTUEoR0NDIGRpYWdub3N0aWMgcG9wKQogI2Vsc2UKICAgLyoKICAgICogTmVpdGhlciBWaXN1YWwgU3R1ZGlvLCBub3IgQ2xhbmcgMi44IG9yIGxhdGVyLCBub3IgR0NDIDQuNiBvciBsYXRlcgpAQCAtMTA1LDYgKzE5NiwxMCBAQAogICAgKi8KICAgI2RlZmluZSBESUFHX09GRl9GTEVYCiAgICNkZWZpbmUgRElBR19PTl9GTEVYCisgICNkZWZpbmUgRElBR19PRkZfTkFSUk9XSU5HCisgICNkZWZpbmUgRElBR19PTl9OQVJST1dJTkcKKyAgI2RlZmluZSBESUFHX09GRl9ERVBSRUNBVElPTgorICAjZGVmaW5lIERJQUdfT05fREVQUkVDQVRJT04KICNlbmRpZgogCiAjaWZkZWYgWVlCWUFDQwpAQCAtMTI3LDkyICsyMjIsNzUgQEAKICAgI2lmIGRlZmluZWQoX01TQ19WRVIpCiAgICAgLyoKICAgICAgKiBUaGlzIGlzIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvOyB3ZSBjYW4gdXNlCi0gICAgICogX19wcmFnbWEod2FybmluZyhkaXNhYmxlOlhYWFgpKSBhbmQgX19wcmFnbWEod2FybmluZyhwdXNoL3BvcCkpLgorICAgICAqIF9fcHJhZ21hKHdhcm5pbmcoZGlzYWJsZTpYWFhYKSkuCiAgICAgICovCiAgICAgI2RlZmluZSBESUFHX09GRl9CSVNPTl9CWUFDQyBcCi0gICAgICBfX3ByYWdtYSh3YXJuaW5nKHB1c2gpKSBcCiAgICAgICBfX3ByYWdtYSh3YXJuaW5nKGRpc2FibGU6NDcwMikpCi0gICAgI2RlZmluZSBESUFHX09OX0JJU09OX0JZQUNDICBfX3ByYWdtYSh3YXJuaW5nKHBvcCkpCiAgICNlbGlmIFBDQVBfSVNfQVRfTEVBU1RfQ0xBTkdfVkVSU0lPTigyLDgpCiAgICAgLyoKICAgICAgKiBUaGlzIGlzIENsYW5nIDIuOCBvciBsYXRlcjsgd2UgY2FuIHVzZSAiY2xhbmcgZGlhZ25vc3RpYwotICAgICAqIGlnbm9yZWQgLVd4eHgiIGFuZCAiY2xhbmcgZGlhZ25vc3RpYyBwdXNoL3BvcCIuCisgICAgICogaWdub3JlZCAtV3h4eCIuCiAgICAgICovCiAgICAgI2RlZmluZSBESUFHX09GRl9CSVNPTl9CWUFDQyBcCi0gICAgICBQQ0FQX0RPX1BSQUdNQShjbGFuZyBkaWFnbm9zdGljIHB1c2gpIFwKICAgICAgIFBDQVBfRE9fUFJBR01BKGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdzaGFkb3ciKSBcCiAgICAgICBQQ0FQX0RPX1BSQUdNQShjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5yZWFjaGFibGUtY29kZSIpCi0gICAgI2RlZmluZSBESUFHX09OX0JJU09OX0JZQUNDIFwKLSAgICAgIFBDQVBfRE9fUFJBR01BKGNsYW5nIGRpYWdub3N0aWMgcG9wKQogICAjZWxpZiBQQ0FQX0lTX0FUX0xFQVNUX0dOVUNfVkVSU0lPTig0LDYpCiAgICAgLyoKICAgICAgKiBUaGlzIGlzIEdDQyA0LjYgb3IgbGF0ZXIsIG9yIGEgY29tcGlsZXIgY2xhaW1pbmcgdG8gYmUgdGhhdC4KLSAgICAgKiBXZSBjYW4gdXNlICJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIC1XeHh4IiAoaW50cm9kdWNlZCBpbiA0LjIpCi0gICAgICogYW5kICJHQ0MgZGlhZ25vc3RpYyBwdXNoL3BvcCIgKGludHJvZHVjZWQgaW4gNC42KS4KKyAgICAgKiBXZSBjYW4gdXNlICJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIC1XeHh4IiAoaW50cm9kdWNlZCBpbiA0LjIsCisgICAgICogYnV0IGl0IG1heSBub3QgYWN0dWFsbHkgd29yayB2ZXJ5IHdlbGwgcHJpb3IgdG8gNC42KS4KICAgICAgKi8KICAgICAjZGVmaW5lIERJQUdfT0ZGX0JJU09OX0JZQUNDIFwKLSAgICAgIFBDQVBfRE9fUFJBR01BKEdDQyBkaWFnbm9zdGljIHB1c2gpIFwKICAgICAgIFBDQVBfRE9fUFJBR01BKEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xc2hhZG93IikgXAogICAgICAgUENBUF9ET19QUkFHTUEoR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnJlYWNoYWJsZS1jb2RlIikKLSAgICAjZGVmaW5lIERJQUdfT05fQklTT05fQllBQ0MgXAotICAgICAgUENBUF9ET19QUkFHTUEoR0NDIGRpYWdub3N0aWMgcG9wKQogICAjZWxzZQogICAgIC8qCiAgICAgICogTmVpdGhlciBDbGFuZyAyLjggb3IgbGF0ZXIgbm9yIEdDQyA0LjYgb3IgbGF0ZXIgb3IgYSBjb21waWxlcgogICAgICAqIGNsYWltaW5nIHRvIGJlIHRoYXQ7IHRoZXJlJ3Mgbm90aGluZyB3ZSBrbm93IG9mIHRoYXQgd2UgY2FuIGRvLgogICAgICAqLwogICAgICNkZWZpbmUgRElBR19PRkZfQklTT05fQllBQ0MKLSAgICAjZGVmaW5lIERJQUdfT05fQklTT05fQllBQ0MKICAgI2VuZGlmCiAjZWxzZQogICAvKgogICAgKiBCaXNvbi4KICAgICoKLSAgICogVGhlIGdlbmVyYXRlZCBjb2RlIG1heSBoYXZlIGZ1bmN0aW9ucyB3aXRoIHVucmVhY2hhYmxlIGNvZGUsIHNvCi0gICAqIHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IHRob3NlLgorICAgKiBUaGUgZ2VuZXJhdGVkIGNvZGUgbWF5IGhhdmUgZnVuY3Rpb25zIHdpdGggdW5yZWFjaGFibGUgY29kZSBhbmQKKyAgICogc3dpdGNoZXMgd2l0aCBvbmx5IGEgZGVmYXVsdCBjYXNlLCBzbyBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCB0aG9zZS4KICAgICovCiAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKQogICAgIC8qCiAgICAgICogVGhpcyBpcyBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbzsgd2UgY2FuIHVzZQotICAgICAqIF9fcHJhZ21hKHdhcm5pbmcoZGlzYWJsZTpYWFhYKSkgYW5kIF9fcHJhZ21hKHdhcm5pbmcocHVzaC9wb3ApKS4KKyAgICAgKiBfX3ByYWdtYSh3YXJuaW5nKGRpc2FibGU6WFhYWCkpLgogICAgICAqCiAgICAgICogU3VwcHJlc3Mgc29tZSAvV2FsbCB3YXJuaW5ncy4KICAgICAgKi8KICAgICAjZGVmaW5lIERJQUdfT0ZGX0JJU09OX0JZQUNDIFwKLSAgICAgIF9fcHJhZ21hKHdhcm5pbmcocHVzaCkpIFwKKyAgICAgIF9fcHJhZ21hKHdhcm5pbmcoZGlzYWJsZTo0MDY1KSkgXAogICAgICAgX19wcmFnbWEod2FybmluZyhkaXNhYmxlOjQxMjcpKSBcCiAgICAgICBfX3ByYWdtYSh3YXJuaW5nKGRpc2FibGU6NDI0MikpIFwKICAgICAgIF9fcHJhZ21hKHdhcm5pbmcoZGlzYWJsZTo0MjQ0KSkgXAogICAgICAgX19wcmFnbWEod2FybmluZyhkaXNhYmxlOjQ3MDIpKQotICAgICNkZWZpbmUgRElBR19PTl9CSVNPTl9CWUFDQyAgX19wcmFnbWEod2FybmluZyhwb3ApKQogICAjZWxpZiBQQ0FQX0lTX0FUX0xFQVNUX0NMQU5HX1ZFUlNJT04oMiw4KQogICAgIC8qCiAgICAgICogVGhpcyBpcyBDbGFuZyAyLjggb3IgbGF0ZXI7IHdlIGNhbiB1c2UgImNsYW5nIGRpYWdub3N0aWMKLSAgICAgKiBpZ25vcmVkIC1XeHh4IiBhbmQgImNsYW5nIGRpYWdub3N0aWMgcHVzaC9wb3AiLgorICAgICAqIGlnbm9yZWQgLVd4eHgiLgogICAgICAqLwogICAgICNkZWZpbmUgRElBR19PRkZfQklTT05fQllBQ0MgXAotICAgICAgUENBUF9ET19QUkFHTUEoY2xhbmcgZGlhZ25vc3RpYyBwdXNoKSBcCiAgICAgICBQQ0FQX0RPX1BSQUdNQShjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5yZWFjaGFibGUtY29kZSIpCi0gICAgI2RlZmluZSBESUFHX09OX0JJU09OX0JZQUNDIFwKLSAgICAgIFBDQVBfRE9fUFJBR01BKGNsYW5nIGRpYWdub3N0aWMgcG9wKQogICAjZWxpZiBQQ0FQX0lTX0FUX0xFQVNUX0dOVUNfVkVSU0lPTig0LDYpCiAgICAgLyoKICAgICAgKiBUaGlzIGlzIEdDQyA0LjYgb3IgbGF0ZXIsIG9yIGEgY29tcGlsZXIgY2xhaW1pbmcgdG8gYmUgdGhhdC4KLSAgICAgKiBXZSBjYW4gdXNlICJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIC1XeHh4IiAoaW50cm9kdWNlZCBpbiA0LjIpCi0gICAgICogYW5kICJHQ0MgZGlhZ25vc3RpYyBwdXNoL3BvcCIgKGludHJvZHVjZWQgaW4gNC42KS4KKyAgICAgKiBXZSBjYW4gdXNlICJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIC1XeHh4IiAoaW50cm9kdWNlZCBpbiA0LjIsCisgICAgICogYnV0IGl0IG1heSBub3QgYWN0dWFsbHkgd29yayB2ZXJ5IHdlbGwgcHJpb3IgdG8gNC42KS4KICAgICAgKi8KICAgICAjZGVmaW5lIERJQUdfT0ZGX0JJU09OX0JZQUNDIFwKLSAgICAgIFBDQVBfRE9fUFJBR01BKEdDQyBkaWFnbm9zdGljIHB1c2gpIFwKICAgICAgIFBDQVBfRE9fUFJBR01BKEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5yZWFjaGFibGUtY29kZSIpCi0gICAgI2RlZmluZSBESUFHX09OX0JJU09OX0JZQUNDIFwKLSAgICAgIFBDQVBfRE9fUFJBR01BKEdDQyBkaWFnbm9zdGljIHBvcCkKICAgI2Vsc2UKICAgICAvKgogICAgICAqIE5laXRoZXIgQ2xhbmcgMi44IG9yIGxhdGVyIG5vciBHQ0MgNC42IG9yIGxhdGVyIG9yIGEgY29tcGlsZXIKICAgICAgKiBjbGFpbWluZyB0byBiZSB0aGF0OyB0aGVyZSdzIG5vdGhpbmcgd2Uga25vdyBvZiB0aGF0IHdlIGNhbiBkby4KICAgICAgKi8KICAgICAjZGVmaW5lIERJQUdfT0ZGX0JJU09OX0JZQUNDCi0gICAgI2RlZmluZSBESUFHX09OX0JJU09OX0JZQUNDCiAgICNlbmRpZgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RscGlzdWJzLmMgYi9kbHBpc3Vicy5jCmluZGV4IDVmNmU0MWEuLjJlZjA5MzEgMTAwNjQ0Ci0tLSBhL2RscGlzdWJzLmMKKysrIGIvZGxwaXN1YnMuYwpAQCAtMTE0LDYgKzExNCwyMCBAQAogfQogCiAvKgorICogRG9lcyB0aGUgcHJvY2Vzc29yIGZvciB3aGljaCB3ZSdyZSBjb21waWxpbmcgdGhpcyBzdXBwb3J0IGFsaWduZWQgbG9hZHM/CisgKi8KKyNpZiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9fWDg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfTV9YNjQpKSB8fCBcCisgICAgKGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfTV9BUk0pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pKSB8fCBcCisgICAgKGRlZmluZWQoX19tNjhrX18pICYmICghZGVmaW5lZChfX21jNjgwMDBfXykgJiYgIWRlZmluZWQoX19tYzY4MDEwX18pKSkgfHwgXAorICAgIChkZWZpbmVkKF9fcHBjX18pIHx8IGRlZmluZWQoX19wcGM2NF9fKSB8fCBkZWZpbmVkKF9NX1BQQykgfHwgZGVmaW5lZChfQVJDSF9QUEMpIHx8IGRlZmluZWQoX0FSQ0hfUFBDNjQpKSB8fCBcCisgICAgKGRlZmluZWQoX19zMzkwX18pIHx8IGRlZmluZWQoX19zMzkweF9fKSB8fCBkZWZpbmVkKF9femFyY2hfXykpCisgICAgLyogWWVzLCBpdCBkb2VzLiAqLworI2Vsc2UKKyAgICAvKiBObywgaXQgZG9lc24ndC4gKi8KKyAgICAjZGVmaW5lIFJFUVVJUkVfQUxJR05NRU5UCisjZW5kaWYKKworLyoKICAqIExvb3AgdGhyb3VnaCB0aGUgcGFja2V0cyBhbmQgY2FsbCB0aGUgY2FsbGJhY2sgZm9yIGVhY2ggcGFja2V0LgogICogUmV0dXJuIHRoZSBudW1iZXIgb2YgcGFja2V0cyByZWFkLgogICovCkBAIC0xMjcsNyArMTQxLDcgQEAKIAlzdHJ1Y3QgcGNhcF9wa3RoZHIgcGt0aGRyOwogI2lmZGVmIEhBVkVfU1lTX0JVRk1PRF9ICiAJc3RydWN0IHNiX2hkciAqc2JwOwotI2lmZGVmIExCTF9BTElHTgorI2lmZGVmIFJFUVVJUkVfQUxJR05NRU5UCiAJc3RydWN0IHNiX2hkciBzYmhkcjsKICNlbmRpZgogI2VuZGlmCkBAIC0xNTcsNyArMTcxLDcgQEAKIAkJCQlyZXR1cm4gKG4pOwogCQkJfQogCQl9Ci0jaWZkZWYgTEJMX0FMSUdOCisjaWZkZWYgUkVRVUlSRV9BTElHTk1FTlQKIAkJaWYgKChsb25nKWJ1ZnAgJiAzKSB7CiAJCQlzYnAgPSAmc2JoZHI7CiAJCQltZW1jcHkoc2JwLCBidWZwLCBzaXplb2YoKnNicCkpOwpAQCAtMTc2LDcgKzE5MCw3IEBACiAJCWJ1ZnAgKz0gY2FwbGVuOwogI2VuZGlmCiAJCSsrcGQtPnN0YXQucHNfcmVjdjsKLQkJaWYgKGJwZl9maWx0ZXIocC0+ZmNvZGUuYmZfaW5zbnMsIHBrLCBvcmlnbGVuLCBjYXBsZW4pKSB7CisJCWlmIChwY2FwX2ZpbHRlcihwLT5mY29kZS5iZl9pbnNucywgcGssIG9yaWdsZW4sIGNhcGxlbikpIHsKICNpZmRlZiBIQVZFX1NZU19CVUZNT0RfSAogCQkJcGt0aGRyLnRzLnR2X3NlYyA9IHNicC0+c2JoX3RpbWVzdGFtcC50dl9zZWM7CiAJCQlwa3RoZHIudHMudHZfdXNlYyA9IHNicC0+c2JoX3RpbWVzdGFtcC50dl91c2VjOwpAQCAtMjc1LDcgKzI4OSw3IEBACiAJCSAqIFhYWCAtIERMX0lQTkVUIGRldmljZXMgZGVmYXVsdCB0byAicmF3IElQIiByYXRoZXIgdGhhbgogCQkgKiAiSVBORVQgaGVhZGVyIjsgc2VlCiAJCSAqCi0JCSAqICAgIGh0dHA6Ly9zZWNsaXN0cy5vcmcvdGNwZHVtcC8yMDA5L3ExLzIwMgorCQkgKiAgICBodHRwczovL3NlY2xpc3RzLm9yZy90Y3BkdW1wLzIwMDkvcTEvMjAyCiAJCSAqCiAJCSAqIFdlJ2QgaGF2ZSB0byBkbyBETF9JT0NfSVBORVRfSU5GTyB0byBlbmFibGUgZ2V0dGluZwogCQkgKiB0aGUgSVBORVQgaGVhZGVyLgpAQCAtMjg2LDcgKzMwMCw3IEBACiAjZW5kaWYKIAogCWRlZmF1bHQ6Ci0JCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAidW5rbm93biBtYWN0eXBlIDB4JXgiLAorCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJ1bmtub3duIG1hY3R5cGUgMHgleCIsCiAJCSAgICBtYWN0eXBlKTsKIAkJcmV0diA9IC0xOwogCX0KZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUuV2luMzIgYi9kb2MvUkVBRE1FLldpbjMyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTQyZGFiLi4wMDAwMDAwCi0tLSBhL2RvYy9SRUFETUUuV2luMzIKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi1VbmRlciBXaW4zMiwgbGlicGNhcCBpcyBpbnRlZ3JhdGVkIGluIHRoZSBXaW5QY2FwIHBhY2tldCBjYXB0dXJlIHN5c3RlbS4KLVdpblBjYXAgcHJvdmlkZXMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3MgbGlicGNhcCB0byBjYXB0dXJlIHRoZSBwYWNrZXRzCi11bmRlciBXaW5kb3dzIDk1LCBXaW5kb3dzIDk4LCBXaW5kb3dzIE1FLCBXaW5kb3dzIE5UIDQsIFdpbmRvd3MgMjAwMAotYW5kIFdpbmRvd3MgWFAuCi1XaW5QY2FwIGJpbmFyaWVzIGFuZCBzb3VyY2UgY29kZSBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3dpbnBjYXAucG9saXRvLml0OgotdGhleSBpbmNsdWRlIGFsc28gYSBkZXZlbG9wZXIncyBwYWNrIHdpdGggYWxsIHRoZSBuZWNlc3NhcnkgdG8gY29tcGlsZQotbGlicGNhcC1iYXNlZCBhcHBsaWNhdGlvbnMgdW5kZXIgV2luZG93cy4KLQotSG93IHRvIGNvbXBpbGUgbGlicGNhcCB3aXRoIFZpc3VhbCBTdHVkaW8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUluIG9yZGVyIHRvIGNvbXBpbGUgbGlicGNhcCB5b3Ugd2lsbCBuZWVkOgotCi0tIHZlcnNpb24gNiAob3IgaGlnaGVyKSBvZiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbwotLSBUaGUgTm92ZW1iZXIgMjAwMSAob3IgbGF0ZXIpIGVkaXRpb24gb2YgTWljcm9zb2Z0IFBsYXRmb3JtCi1Tb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKFNESyksIHRoYXQgY29udGFpbnMgc29tZSBuZWNlc3NhcnkgaW5jbHVkZXMKLWZvciBJUHY2IHN1cHBvcnQuIFlvdSBjYW4gZG93bmxvYWQgaXQgZnJvbSBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vc2RrCi0tIHRoZSBsYXRlc3QgV2luUGNhcCBzb3VyY2VzIGZyb20gaHR0cDovL3dpbnBjYXAucG9saXRvLml0L2luc3RhbGwKLQotVGhlIFdpblBjYXAgc291cmNlIGNvZGUgYWxyZWFkeSBjb250YWlucyBhIHJlY2VudCAodXN1YWxseSB0aGUgbGF0ZXN0Ci1zdGFibGUpIHZlcnNpb24gb2YgbGlicGNhcC4gSWYgeW91IG5lZWQgdG8gY29tcGlsZSBhIGRpZmZlcmVudCBvbmUsCi1zaW1wbHkgZG93bmxvYWQgaXQgZnJvbSB3d3cudGNwZHVtcC5vcmcgYW5kIGNvcHkgdGhlIHNvdXJjZXMgaW4gdGhlCi13aW5wY2FwXHdwY2FwXGxpYnBjYXAgZm9sZGVyIG9mIHRoZSBXaW5QY2FwIGRpc3RyaWJ1dGlvbi4gSWYgeW91IHdhbnQgdG8KLWNvbXBpbGUgYSBsaWJwY2FwIHNvdXJjZSByZXRyaWV2ZWQgZnJvbSB0aGUgdGNwZHVtcC5vcmcgR2l0LCB5b3Ugd2lsbAotaGF2ZSB0byBjcmVhdGUgdGhlIHNjYW5uZXIgYW5kIHRoZSBncmFtbWFyIGJ5IGhhbmQgKHdpdGggbGV4IGFuZCB5YWNjKQotb3Igd2l0aCB0aGUgY3lnbnVzIG1ha2VmaWxlLCBzaW5jZSBUaGUgVmlzdWFsIFN0dWRpbyBwcm9qZWN0IGlzIG5vdCBhYmxlCi10byBidWlsZCB0aGVtLgotCi1PcGVuIHRoZSBwcm9qZWN0IGZpbGUgd2lucGNhcFx3cGNhcFxwcmpcd3BjYXAuZHN3IHdpdGggVmlzdWFsIFN0dWRpbyBhbmQKLWJ1aWxkIHdwY2FwLmRsbC4gd3BjYXAubGliLCB0aGUgbGlicmFyeSBmaWxlIHRvIGxpbmsgd2l0aCB0aGUgYXBwbGljYXRpb25zLAotd2lsbCBiZSBnZW5lcmF0ZWQgaW4gd2lucGNhcFx3cGNhcFxsaWJcLiB3cGNhcC5kbGwgd2lsbCBiZSBnZW5lcmF0ZWQgaW4KLXdpbnBjYXBcd3BjYXBccHJqXHJlbGVhc2Ugb3Igd2lucGNhcFx3cGNhcFxwcmpcZGVidWcgZGVwZW5kaW5nIG9uIHRoZSB0eXBlCi1vZiBiaW5hcnkgdGhhdCBpcyBiZWluZyBjcmVhdGVkLgotCi1Ib3cgdG8gY29tcGlsZSBsaWJwY2FwIHdpdGggQ3lnbnVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRvIGJ1aWxkIHdwY2FwLmRsbCwgY2QgdG8gdGhlIGRpcmVjdG9yeSBXUENBUC9QUkogb2YgdGhlIFdpblBjYXAgc291cmNlIGNvZGUKLWRpc3RyaWJ1dGlvbiBhbmQgdHlwZSAibWFrZSIuIGxpYndwY2FwLmEsIHRoZSBsaWJyYXJ5IGZpbGUgdG8gbGluayB3aXRoIHRoZQotYXBwbGljYXRpb25zLCB3aWxsIGJlIGdlbmVyYXRlZCBpbiB3aW5wY2FwXHdwY2FwXGxpYlwuIHdwY2FwLmRsbCB3aWxsIGJlCi1nZW5lcmF0ZWQgaW4gd2lucGNhcFx3cGNhcFxwcmouCi0KLVJlbWVtYmVyLCB5b3UgQ0FOTk9UIHVzZSB0aGUgTVNWQy1nZW5lcmF0ZWQgLmxpYiBmaWxlcyB3aXRoIGdjYywgdXNlCi1saWJ3cGNhcC5hIGluc3RlYWQuCi0KLSJtYWtlIGluc3RhbGwiIGluc3RhbGxzIHdwY2FwLmRsbCBpbiB0aGUgV2luZG93cyBzeXN0ZW0gZm9sZGVyLgpkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5XaW4zMi5tZCBiL2RvYy9SRUFETUUuV2luMzIubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI2Zjg5YgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9SRUFETUUuV2luMzIubWQKQEAgLTAsMCArMSwxOTggQEAKK0J1aWxkaW5nIGxpYnBjYXAgb24gV2luZG93cyB3aXRoIFZpc3VhbCBTdHVkaW8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVW5saWtlIHRoZSBVTipYZXMgb24gd2hpY2ggbGlicGNhcCBjYW4gY2FwdHVyZSBuZXR3b3JrIHRyYWZmaWMsIFdpbmRvd3MKK2hhcyBubyBuZXR3b3JrIHRyYWZmaWMgY2FwdHVyZSBtZWNoYW5pc20gdGhhdCBsaWJwY2FwIGNhbiB1c2UuCitUaGVyZWZvcmUsIGxpYnBjYXAgcmVxdWlyZXMgYSBkcml2ZXIsIGFuZCBhIGxpYnJhcnkgdG8gYWNjZXNzIHRoZQorZHJpdmVyLCBwcm92aWRlZCBieSB0aGUgTnBjYXAgb3IgV2luUGNhcCBwcm9qZWN0cy4KKworVGhvc2UgcHJvamVjdHMgaW5jbHVkZSB2ZXJzaW9ucyBvZiBsaWJwY2FwIGJ1aWx0IHRvIHVzZSB0aGF0IGRyaXZlciBhbmQKK2xpYnJhcnk7IHRoZXNlIGluc3RydWN0aW9ucyBhcmUgZm9yIHBlb3BsZSB3aG8gd2FudCB0byBidWlsZCBsaWJwY2FwCitzb3VyY2UgcmVsZWFzZXMsIG9yIGxpYnBjYXAgZnJvbSB0aGUgR2l0IHJlcG9zaXRvcnksIGFzIGEgcmVwbGFjZW1lbnQKK2ZvciB0aGUgdmVyc2lvbiBwcm92aWRlZCB3aXRoIE5wY2FwIG9yIFdpblBjYXAuCisKK05wY2FwIGFuZCBXaW5QY2FwIFNESworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIG9yZGVyIHRvIGJ1aWxkIGxpYnBjYXAsIHlvdSB3aWxsIG5lZWQgdG8gZG93bmxvYWQgTnBjYXAgYW5kIGl0cworc29mdHdhcmUgZGV2ZWxvcG1lbnQga2l0IChTREspIG9yIFdpblBjYXAgYW5kIGl0cyBzb2Z0d2FyZSBkZXZlbG9wbWVudAora2l0LgorCitOcGNhcCBpcyBjdXJyZW50bHkgYmVpbmcgZGV2ZWxvcGVkIGFuZCBtYWludGFpbmVkLCBhbmQgb2ZmZXJzIG1hbnkKK2FkZGl0aW9uYWwgY2FwYWJpbGl0aWVzIHRoYXQgV2luUGNhcCBkb2VzIG5vdC4KKworV2luUGNhcCBpcyBubyBsb25nZXIgYmVpbmcgZGV2ZWxvcGVkIG9yIG1haW50YWluZWQ7IGl0IHNob3VsZCBiZSB1c2VkCitvbmx5IGlmIHRoZXJlIGlzIHNvbWUgb3RoZXIgcmVxdWlyZW1lbnQgdG8gdXNlIGl0IHJhdGhlciB0aGFuIE5wY2FwLAorc3VjaCBhcyBhIHJlcXVpcmVtZW50IHRvIHN1cHBvcnQgdmVyc2lvbnMgb2YgV2luZG93cyBlYXJsaWVyIHRoYW4KK1dpbmRvd3MgVmlzdGEsIHdoaWNoIGlzIHRoZSBlYXJsaWVzdCB2ZXJzaW9uIHN1cHBvcnRlZCBieSBOcGNhcC4KKworTnBjYXAgYW5kIGl0cyBTREsgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBpdHMgaG9tZSBwYWdlOgorCisgIGh0dHBzOi8vbnBjYXAub3JnCisKK1RoZSBTREsgaXMgYSBaSVAgYXJjaGl2ZTsgY3JlYXRlIGEgZm9sZGVyIG9uIHlvdXIgQzogZHJpdmUsIGUuZy4KK0M6XG5wY2FwLXNkaywgYW5kIHB1dCB0aGUgY29udGVudHMgb2YgdGhlIFpJUCBhcmNoaXZlIGludG8gdGhhdCBmb2xkZXIuCisKK1RoZSBXaW5QY2FwIGluc3RhbGxlciBjYW4gYmUgZG93bmxvYWRlZCBmcm9tCisKKyAgaHR0cHM6Ly93d3cud2lucGNhcC5vcmcvaW5zdGFsbC9kZWZhdWx0Lmh0bQorCithbmQgdGhlIFdpblBjYXAgRGV2ZWxvcGVyJ3MgS2l0IGNhbiBiZSBkb3dubG9hZGVkIGZyb20KKworICBodHRwczovL3d3dy53aW5wY2FwLm9yZy9kZXZlbC5odG0KKworUmVxdWlyZWQgYnVpbGQgdG9vbHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBEZXZlbG9wZXIncyBLaXQgaXMgYSBaSVAgYXJjaGl2ZTsgaXQgY29udGFpbnMgYSBmb2xkZXIgbmFtZWQKK1dwZFBhY2ssIHdoaWNoIHlvdSBzaG91bGQgcGxhY2Ugb24geW91ciBDOiBkcml2ZSwgZS5nLiBDOlxXcGRQYWNrLgorCitCdWlsZGluZyBsaWJwY2FwIG9uIFdpbmRvd3MgcmVxdWlyZXMgVmlzdWFsIFN0dWRpbyAyMDE1IG9yIGxhdGVyLiAgVGhlCitDb21tdW5pdHkgRWRpdGlvbiBvZiBWaXN1YWwgU3R1ZGlvIGNhbiBiZSBkb3dubG9hZGVkIGF0IG5vIGNvc3QgZnJvbQorCisgIGh0dHBzOi8vdmlzdWFsc3R1ZGlvLm1pY3Jvc29mdC5jb20KKworQWRkaXRpb25hbCB0b29scyBhcmUgYWxzbyByZXF1aXJlZC4gIENob2NvbGF0ZXkgaXMgYSBwYWNrYWdlIG1hbmFnZXIgZm9yCitXaW5kb3dzIHdpdGggd2hpY2ggdGhvc2UgdG9vbHMsIGFuZCBvdGhlciB0b29scywgY2FuIGJlIGluc3RhbGxlZDsgaXQKK2NhbiBiZSBkb3dubG9hZGVkIGZyb20KKworICBodHRwczovL2Nob2NvbGF0ZXkub3JnCisKK0l0IGlzIGEgY29tbWFuZC1saW5lIHRvb2w7IGEgR1VJIHRvb2wsIENob2NvbGF0ZXkgR1VJLCBpcyBwcm92aWRlZCBhcyBhCitDaG9jb2xhdGV5IHBhY2thZ2UsIHdoaWNoIGNhbiBiZSBpbnN0YWxsZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lOgorCisJY2hvY28gaW5zdGFsbCBjaG9jb2xhdGV5Z3VpCisKK0ZvciBjb252ZW5pZW5jZSwgdGhlICJjaG9jbyBpbnN0YWxsIiBjb21tYW5kIGNhbiBiZSBydW4gd2l0aCB0aGUgIi15IgorZmxhZywgZm9yY2luZyBpdCB0byBhdXRvbWF0aWNhbGx5IGFuc3dlciBhbGwgcXVlc3Rpb25zIGFza2VkIG9mIHRoZSB1c2VyCit3aXRoICJ5ZXMiOgorCisJY2hvY28gaW5zdGFsbCAteSBjaG9jb2xhdGV5Z3VpCisKK1RoZSByZXF1aXJlZCB0b29scyBhcmU6CisKKyMjIyBDTWFrZSAjIyMKKworbGlicGNhcCBkb2VzIG5vdCBwcm92aWRlIHN1cHBvcnRlZCBwcm9qZWN0IGZpbGVzIGZvciBWaXN1YWwgU3R1ZGlvCisodGhlcmUgYXJlIGN1cnJlbnRseSB1bnN1cHBvcnRlZCBwcm9qZWN0IGZpbGVzIHByb3ZpZGVkLCBidXQgd2UgZG8gbm90CitndWFyYW50ZWUgdGhhdCB0aGV5IHdpbGwgd29yayBvciB0aGF0IHdlIHdpbGwgY29udGludWUgdG8gcHJvdmlkZSB0aGVtKS4KK0l0IGRvZXMgcHJvdmlkZSBmaWxlcyBmb3IgQ01ha2UsIHdoaWNoIGlzIGEgY3Jvc3MtcGxhdGZvcm0gdG9vbCB0aGF0CitydW5zIG9uIFVOKlhlcyBhbmQgb24gV2luZG93cyBhbmQgdGhhdCBjYW4gZ2VuZXJhdGUgcHJvamVjdCBmaWxlcyBmb3IKK1VOKlggTWFrZSwgdGhlIE5pbmphIGJ1aWxkIHN5c3RlbSwgYW5kIFZpc3VhbCBTdHVkaW8sIGFtb25nIG90aGVyIGJ1aWxkCitzeXN0ZW1zLgorCitWaXN1YWwgU3R1ZGlvIDIwMTUgZG9lcyBub3QgcHJvdmlkZSBDTWFrZTsgYW4gaW5zdGFsbGVyIGNhbiBiZQorZG93bmxvYWRlZCBmcm9tCisKKyAgaHR0cHM6Ly9jbWFrZS5vcmcvZG93bmxvYWQvCisKK1doZW4geW91IHJ1biB0aGUgaW5zdGFsbGVyLCB5b3Ugc2hvdWxkIGNob29zZSB0byBhZGQgQ01ha2UgdG8gdGhlIHN5c3RlbQorUEFUSCBmb3IgYWxsIHVzZXJzIGFuZCB0byBjcmVhdGUgdGhlIGRlc2t0b3AgaWNvbi4KKworQ01ha2UgY2FuIGFsc28gYmUgaW5zdGFsbGVkIGFzIHRoZSBDaG9jb2xhdGV5IHBhY2thZ2UgImNtYWtlIjoKKworCWNob2NvIGluc3RhbGwgLXkgY21ha2UKKworVmlzdWFsIFN0dWRpbyAyMDE3IGFuZCBsYXRlciBwcm92aWRlIENNYWtlLCBzbyB5b3Ugd2lsbCBub3QgbmVlZCB0bworaW5zdGFsbCBDTWFrZSBpZiB5b3UgaGF2ZSBpbnN0YWxsZWQgVmlzdWFsIFN0dWRpbyAyMDE3IG9yIGxhdGVyLiAgVGhleQoraW5jbHVkZSBidWlsdC1pbiBzdXBwb3J0IGZvciBDTWFrZS1iYXNlZCBwcm9qZWN0czoKKworICBodHRwczovL2RldmJsb2dzLm1pY3Jvc29mdC5jb20vY3BwYmxvZy9jbWFrZS1zdXBwb3J0LWluLXZpc3VhbC1zdHVkaW8vCisKK0ZvciBWaXN1YWwgU3R1ZGlvIDIwMTcsIG1ha2Ugc3VyZSAiVmlzdWFsIEMrKyB0b29scyBmb3IgQ01ha2UiIGlzCitpbnN0YWxsZWQ7IGZvciBWaXN1YWwgU3R1ZGlvIDIwMTksIG1ha2Ugc3VyZSAiQysrIENNYWtlIHRvb2xzIGZvcgorV2luZG93cyIgaXMgaW50YWxsZWQuCisKKyMjIyB3aW5mbGV4Ymlzb24gIyMjCisKK2xpYnBjYXAgdXNlcyB0aGUgRmxleCBsZXhpY2FsLWFuYWx5emVyIGdlbmVyYXRvciBhbmQgdGhlIEJpc29uIG9yCitCZXJrZWxleSBZQUNDIHBhcnNlciBnZW5lcmF0b3JzIHRvIGdlbmVyYXRlIHRoZSBwYXJzZXIgZm9yIGZpbHRlcgorZXhwcmVzc2lvbnMuICBXaW5kb3dzIHZlcnNpb25zIG9mIEZsZXggYW5kIEJpc29uIGNhbiBiZSBkb3dubG9hZGVkIGZyb20KKworICBodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy93aW5mbGV4Ymlzb24vCisKK1RoZSBkb3dubG9hZGVkIGZpbGUgaXMgYSBaSVAgYXJjaGl2ZTsgY3JlYXRlIGEgZm9sZGVyIG9uIHlvdXIgQzogZHJpdmUsCitlLmcuIEM6XFByb2dyYW0gRmlsZXNcd2luZmxleGJpc29uLCBhbmQgcHV0IHRoZSBjb250ZW50cyBvZiB0aGUgWklQCithcmNoaXZlIGludG8gdGhhdCBmb2xkZXIuICBUaGVuIGFkZCB0aGF0IGZvbGRlciB0byB0aGUgc3lzdGVtIFBBVEgKK2Vudmlyb25tZW50IHZhcmlhYmxlLgorCitHaXQKKy0tLQorCitBbiBvcHRpb25hbCB0b29sLCByZXF1aXJlZCBvbmx5IGlmIHlvdSB3aWxsIGJlIGJ1aWxkaW5nIGZyb20gYSBHaXQKK3JlcG9zaXRvcnkgcmF0aGVyIHRoYW4gZnJvbSBhIHJlbGVhc2Ugc291cmNlIHRhcmJhbGwsIGlzIEdpdC4gIEdpdCBpcworcHJvdmlkZWQgYXMgYW4gb3B0aW9uYWwgaW5zdGFsbGF0aW9uIGNvbXBvbmVudCwgIkdpdCBmb3IgV2luZG93cyIsIHdpdGgKK1Zpc3VhbCBTdHVkaW8gMjAxNyBhbmQgbGF0ZXIuCisKK0J1aWxkaW5nIGZyb20gdGhlIFZpc3VhbCBTdHVkaW8gR1VJCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIyMgVmlzdWFsIFN0dWRpbyAyMDE3ICMjIworCitPcGVuIHRoZSBmb2xkZXIgY29udGFpbmluZyB0aGUgbGlicGNhcCBzb3VyY2Ugd2l0aCBPcGVuID4gRm9sZGVyLgorVmlzdWFsIFN0dWRpbyB3aWxsIHJ1biBDTWFrZTsgaG93ZXZlciwgeW91IHdpbGwgbmVlZCB0byBpbmRpY2F0ZSB3aGVyZQordGhlIE5wY2FwIG9yIFdpblBjYXAgU0RLIGlzIGluc3RhbGxlZC4KKworVG8gZG8gdGhpcywgZ28gdG8gUHJvamVjdCA+ICJDaGFuZ2UgQ01ha2UgU2V0dGluZ3MiID4gcGNhcCBhbmQ6CisKK0Nob29zZSB3aGljaCBjb25maWd1cmF0aW9uIHR5cGUgdG8gYnVpbGQsIGlmIHlvdSBkb24ndCB3YW50IHRoZSBkZWZhdWx0CitEZWJ1ZyBidWlsZC4KKworSW4gdGhlIENNYWtlU2V0dGluZ3MuanNvbiB0YWIsIGNoYW5nZSBjbWFrZUNvbW1hbmRBcmdzIHRvIGluY2x1ZGUKKworCS1EUGFja2V0X1JPT1Q9e3BhdGgtdG8tc2RrfQorCit3aGVyZSB7cGF0aC10by1zZGt9IGlzIHRoZSBwYXRoIG9mIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgTnBjYXAgb3IKK1dpblBjYXAgU0RLLiAgTm90ZSB0aGF0IGJhY2tzbGFzaGVzIGluIHRoZSBwYXRoIG11c3QgYmUgc3BlY2lmaWVkIGFzIHR3bworYmFja3NsYXNoZXMuCisKK1NhdmUgdGhlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3aXRoIEZpbGUgPiAiU2F2ZSBDTWFrZVNldHRpbmdzLmpzb24iIG9yCit3aXRoIGNvbnRyb2wtUy4KKworVmlzdWFsIFN0dWRpbyB3aWxsIHRoZW4gcmUtcnVuIENNYWtlLiAgSWYgdGhhdCBjb21wbGV0ZXMgd2l0aG91dCBlcnJvcnMsCit5b3UgY2FuIGJ1aWxkIHdpdGggQ01ha2UgPiAiQnVpbGQgQWxsIi4KKworIyMjIFZpc3VhbCBTdHVkaW8gMjAxOSAjIyMKKworT3BlbiB0aGUgZm9sZGVyIGNvbnRhaW5pbmcgdGhlIGxpYnBjYXAgc291cmNlIHdpdGggT3BlbiA+IEZvbGRlci4KK1Zpc3VhbCBTdHVkaW8gd2lsbCBydW4gQ01ha2U7IGhvd2V2ZXIsIHlvdSB3aWxsIG5lZWQgdG8gaW5kaWNhdGUgd2hlcmUKK3RoZSBOcGNhcCBvciBXaW5QY2FwIFNESyBpcyBpbnN0YWxsZWQuCisKK1RvIGRvIHRoaXMsIGdvIHRvIFByb2plY3QgPiAiQ01ha2UgU2V0dGluZ3MgZm9yIHBjYXAiIGFuZDoKKworQ2hvb3NlIHdoaWNoIGNvbmZpZ3VyYXRpb24gdHlwZSB0byBidWlsZCwgaWYgeW91IGRvbid0IHdhbnQgdGhlIGRlZmF1bHQKK0RlYnVnIGJ1aWxkLgorCitTY3JvbGwgZG93biB0byAiQ21ha2UgdmFyaWFibGVzIGFuZCBjYWNoZSIsIHNjcm9sbCB0aHJvdWdoIHRoZSBsaXN0Citsb29raW5nIGZvciB0aGUgZW50cnkgZm9yIFBhY2tldF9ST09ULCBhbmQgZWl0aGVyIHR5cGUgaW4gdGhlIHBhdGggb2YKK3RoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgTnBjYXAgb3IgV2luUGNhcCBTREsgb3IgdXNlIHRoZSAiQnJvd3NlLi4uIgorYnV0dG9uIHRvIGJyb3dzZSBmb3IgdGhhdCBkaXJlY3RvcnkuCisKK1NhdmUgdGhlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3aXRoIEZpbGUgPiAiU2F2ZSBDTWFrZVNldHRpbmdzLmpzb24iIG9yCit3aXRoIGNvbnRyb2wtUy4KKworVmlzdWFsIFN0dWRpbyB3aWxsIHRoZW4gcmUtcnVuIENNYWtlLiAgSWYgdGhhdCBjb21wbGV0ZXMgd2l0aG91dCBlcnJvcnMsCit5b3UgY2FuIGJ1aWxkIHdpdGggQnVpbGQgPiAiQnVpbGQgQWxsIi4KKworQnVpbGRpbmcgZnJvbSB0aGUgY29tbWFuZCBsaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3RhcnQgdGhlIGFwcHJvcHJpYXRlIE5hdGl2ZSBUb29scyBjb21tYW5kIGxpbmUgcHJvbXB0LgorCitDaGFuZ2UgdG8gdGhlIGRpcmVjdG9yeSBpbnRvIHdoaWNoIHlvdSB3YW50IHRvIGJ1aWxkIGxpYnBjYXAsIHBvc3NpYmx5CithZnRlciBjcmVhdGluZyBpdCBmaXJzdC4gIE9uZSBjaG9pY2UgaXMgdG8gY3JlYXRlIGl0IGFzIGEgc3ViZGlyZWN0b3J5CitvZiB0aGUgbGlicGNhcCBzb3VyY2UgZGlyZWN0b3J5LgorCitSdW4gdGhlIGNvbW1hbmQKKworCWNtYWtlICItRFBhY2tldF9ST09UPXtwYXRoLXRvLXNka30iIHtwYXRoLXRvLWxpYnBjYXAtc291cmNlfQorCit3aGVyZSB7cGF0aC10by1zZGt9IGlzIHRoZSBwYXRoIG9mIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgTnBjYXAgb3IKK1dpblBjYXAgU0RLIGFuZCB7cGF0aC10by1saWJwY2FwLXNvdXJjZX0gaXMgdGhlIHBhdGhuYW1lIG9mIHRoZQordG9wLWxldmVsIHNvdXJjZSBkaXJlY3RvcnkgZm9yIGxpYnBjYXAuCisKK1J1biB0aGUgY29tbWFuZAorCisJbXNidWlsZC9tIHBjYXAuc2xuCisKK3RvIGNvbXBpbGUgbGlicGNhcC4KZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUuYWl4IGIvZG9jL1JFQURNRS5haXgKaW5kZXggOTJlNTEzZi4uOWU5YTIzZCAxMDA2NDQKLS0tIGEvZG9jL1JFQURNRS5haXgKKysrIGIvZG9jL1JFQURNRS5haXgKQEAgLTI3LDcgKzI3LDcgQEAKICAgICBJZiB5b3UgZml4IHRoZSBwcm9ibGVtcyB5b3Vyc2VsZiwgcGxlYXNlIHN1Ym1pdCBhIHBhdGNoIGJ5IGZvcmtpbmcKICAgICB0aGUgYnJhbmNoIGF0CiAKLQlodHRwczovL2dpdGh1Yi5jb20vdGhlLXRjcGR1bXAtZ3JvdXAvbGlicGNhcC9pc3N1ZXMKKwlodHRwczovL2dpdGh1Yi5jb20vdGhlLXRjcGR1bXAtZ3JvdXAvbGlicGNhcC90cmVlL21hc3RlcgogCiAgICAgYW5kIGlzc3VpbmcgYSBwdWxsIHJlcXVlc3QsIHNvIHdlIGNhbiBpbmNvcnBvcmF0ZSB0aGUgZml4ZXMgaW50byB0aGUKICAgICBuZXh0IHJlbGVhc2UuCmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLmNhcHR1cmUtbW9kdWxlIGIvZG9jL1JFQURNRS5jYXB0dXJlLW1vZHVsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTNlYWYzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jL1JFQURNRS5jYXB0dXJlLW1vZHVsZQpAQCAtMCwwICsxLDM1MyBAQAorCQkgICAgSG93IHRvIHdyaXRlIGEgbGlicGNhcCBtb2R1bGUKKworV0FSTklORzogdGhpcyBkb2N1bWVudCBkZXNjcmliZXMgYW4gdW5zdGFibGUgaW50ZXJmYWNlOyBmdXR1cmUgcmVsZWFzZXMKK29mIGxpYnBjYXAgbWF5LCBhbmQgc29tZSBwcm9iYWJseSB3aWxsLCBjaGFuZ2UgdGhlIGludGVyZmFjZSBpbiBhbgoraW5jb21wYXRpYmxlIGZhc2hpb24uICBJZiB5b3Ugc3VibWl0IHlvdXIgbW9kdWxlIHRvIHRoZSBsaWJwY2FwCitkZXZlbG9wZXJzIGZvciBpbmNsdXNpb24gaW4gbGlicGNhcCwgbm90IG9ubHkgZG9lcyB0aGF0IG1ha2UgaXQgbW9yZQorbGlrZWx5IHRoYXQgaXQgd2lsbCBiZSBhdmFpbGFibGUgaW4gdGhlIGxpYnBjYXAgcHJvdmlkZWQgYnkgb3BlcmF0aW5nCitzeXN0ZW0gdmVuZG9ycyAoc3VjaCBhcyBMaW51eCBkaXN0cmlidXRpb25zKSwgYnV0IGl0IGFsc28gbWVhbnMgdGhhdCB3ZQord2lsbCBhdHRlbXB0IHRvIHVwZGF0ZSBpdCB0byBoYW5kbGUgZnV0dXJlIGNoYW5nZXMgdG8gdGhpcyBpbnRlcmZhY2UuCitJZiB3ZSBhZGQgbmV3IGNhcGFiaWxpdGllcywgd2UgbWF5IGhhdmUgdG8gYXNrIHlvdSBob3cgdG8gcHJvdmlkZSB0aG9zZQorYWRkaXRpb25hbCBjYXBhYmlsaXRpZXMgaWYgeW91J3JlIHVzaW5nIGFuIHVuZGVybHlpbmcgbWVjaGFuaXNtIGZvcgord2hpY2ggd2UgaGF2ZSBuZWl0aGVyIHRoZSBzb3VyY2UgY29kZSBub3IgdGhlIGRvY3VtZW50YXRpb24uCisKK05PVEU6IHRoaXMgZG9jdW1lbnQgYXNzdW1lcyBmYW1pbGlhcml0eSB3aXRoIHRoZSBlbnRpcmUgbGlicGNhcCBBUEkuCisKK1RPRE86IG1vcmUgcm91dGluZXMsIG1vcmUgc3R1ZmYgdGhhdCB0aGUgYWN0aXZhdGUgcm91dGluZSBoYXMgdG8gZG8KKyhzdWNoIGFzIHNldHRpbmcgdGhlIGxpc3Qgb2YgRExUX3MpLCBjb252ZXJ0IHRvIE1hcmtkb3duPworCitPbiBMaW51eCwgKkJTRCwgbWFjT1MsIFNvbGFyaXMsIEFJWCwgSFAtVVgsIElSSVgsIGFuZCBUcnU2NCBVTklYLAorTGlicGNhcCBzdXBwb3J0cyBjYXB0dXJpbmcgb24gbmV0d29yayBpbnRlcmZhY2VzIGFzIHN1cHBvcnRlZCBieSB0aGUKK29wZXJhdGluZyBzeXN0ZW0gbmV0d29ya2luZyBzdGFjaywgdXNpbmcgdGhlIG5hdGl2ZSBwYWNrZXQgY2FwdHVyZQorbWVjaGFuaXNtIHByb3ZpZGVkIGJ5IHRoZSBPUy4gIE9uIFdpbmRvd3MsIGl0IHN1cHBvcnRzIGl0IHdpdGggdGhlIGhlbHAKK29mIHRoZSBkcml2ZXIgYW5kIGxpYnJhcnkgc3VwcGxpZWQgYnkgV2luUGNhcCBhbmQgTnBjYXAuCisKK0luIGFkZGl0aW9uLCBpdCBhbHNvIHN1cHBvcnRzIGNhcHR1cmluZyBvbiBvdGhlciB0eXBlcyBvZiBkZXZpY2VzLCBzdWNoCithczoKKworCXNwZWNpYWxpemVkIGNhcHR1cmUgY2FyZHMsIHN1Y2ggYXMgRW5kYWNlIERBRyBjYXJkczsKKworCW5ldHdvcmsgYWRhcHRlcnMgdGhhdCBwcm92aWRlIHNwZWNpYWwgaGlnaC1wZXJmb3JtYW5jZSBjb2RlCisJcGF0aHMsIHN1Y2ggYXMgQ1NQSSBNeXJpY29tIGFkYXB0ZXJzOworCisJYnVzZXMgc3VjaCBhcyBVU0I7CisKKwlzb2Z0d2FyZSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIHN1Y2ggYXMgRC1CdXMgYW5kIExpbnV4IG5ldGxpbms7CisKKwlldGMuLgorCitTdXBwb3J0IGZvciB0aG9zZSBkZXZpY2VzIGlzIHByb3ZpZGVkIGJ5IG1vZHVsZXMgY29tcGlsZWQgaW50byBsaWJwY2FwLgorCitJZiB5b3Ugd2FudCB0byBhZGQgc3VjaCBhIG1vZHVsZSwgeW91IHdvdWxkIGZpcnN0IGhhdmUgdG8gY2hlY2sgdGhlIGxpc3QKK29mIGxpbmstbGF5ZXIgaGVhZGVyIHR5cGVzIHN1cHBvcnRlZCBieSBsaWJwY2FwLCB0byBzZWUgaWYgb25lIG9mIHRob3NlCit3b3VsZCBiZSBzdWZmaWNpZW50IGZvciB5b3VyIGRldmljZS4gIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIGxpc3QKK2NhbiBiZSBmb3VuZCBhdAorCisJaHR0cHM6Ly93d3cudGNwZHVtcC5vcmcvbGlua3R5cGVzLmh0bWwKKworSWYgbm9uZSBvZiB0aG9zZSB3b3VsZCB3b3JrIGZvciB5b3VyIGRldmljZSwgcGxlYXNlIHJlYWQKK2RvYy9ETFRfQUxMT0NBVEVfSE9XVE8ubWQgYW5kIHRoZSBpbnRyb2R1Y3RvcnkgcGFyYWdyYXBocyBvbiB0aGUgV2ViCitwYWdlIG1lbnRpb25lZCBhYm92ZSwgYW5kIHRoZW4gc2VuZCBhIHJlcXVlc3QgZm9yIHRoZSBuZXcgbGluay1sYXllcgoraGVhZGVyIHR5cGUgdG8gdGNwZHVtcC13b3JrZXJzQGxpc3RzLnRjcGR1bXAub3JnLgorCitPbmNlIHlvdSBoYXZlIGEgbGluay1sYXllciBoZWFkZXIgdHlwZSB2YWx1ZSBvciB2YWx1ZXMgdGhhdCB5b3UgY2FuIHVzZSwKK3lvdSBjYW4gYWRkIG5ldyBtb2R1bGUuCisKK1RoZSBtb2R1bGUgc2hvdWxkIGJlIGEgQyBzb3VyY2UgZmlsZSwgd2l0aCBhIG5hbWUgb2YgdGhlIGZvcm0KK3BjYXAte01PRH0uYywgd2hlcmUge01PRH0gaXMgYSBuYW1lIGFwcHJvcHJpYXRlIGZvciB5b3VyIGRldmljZTsgZm9yCitleGFtcGxlLCB0aGUgc3VwcG9ydCBmb3IgREFHIGNhcmRzIGlzIGluIHBjYXAtZGFnLmMsIGFuZCB0aGUgc3VwcG9ydCBmb3IKK2NhcHR1cmluZyBVU0IgdHJhZmZpYyBvbiBMaW51eCBpcyBwY2FwLXVzYi1saW51eC5jLgorCitZb3VyIG1vZHVsZSBpcyBhc3N1bWVkIHRvIHN1cHBvcnQgb25lIG9yIG1vcmUgbmFtZWQgZGV2aWNlcy4gIFRoZSBuYW1lcworc2hvdWxkIGJlIHJlbGF0aXZlbHkgc2hvcnQgbmFtZXMsIGNvbnRhaW5pbmcgb25seSBsb3dlci1jYXNlCithbHBoYW51bWVyaWMgY2hhcmFjdGVycywgY29uc2lzdGluZyBvZiBhIHByZWZpeCB0aGF0IGVuZHMgd2l0aCBhbgorYWxwaGFiZXRpYyBjaGFyYWN0ZXIgYW5kLCBpZiB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBkZXZpY2UgaW5zdGFuY2UsCitwb3NzaWJseSBmb2xsb3dlZCBieSBhIG51bWVyaWNhbCBkZXZpY2UgSUQsIHN1Y2ggYXMgIm15ZGV2aWNlIiBvcgorIm15ZGV2aWNlMCIvIm15ZGV2aWNlMSIvLi4uLiAgSWYgeW91IGhhdmUgbW9yZSB0aGFuIG9uZSB0eXBlIG9mIGRldmljZQordGhhdCB5b3UgY2FuIHN1cHBvcnQsIHlvdSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHByZWZpeCwgZWFjaCBvZiB3aGljaAorY2FuIGJlIGZvbGxvd2VkIGJ5IGEgbnVtZXJpY2FsIGRldmljZSBJRC4KKworVGhlIHR3byBleHBvcnRlZCBmdW5jdGlvbnMgdGhhdCB5b3VyIG1vZHVsZSBtdXN0IHByb3ZpZGUgYXJlIHJvdXRpbmVzIHRvCitwcm92aWRlIGEgbGlzdCBvZiBkZXZpY2UgaW5zdGFuY2VzIGFuZCBhIHByb2dyYW0gdG8gaW5pdGlhbGl6ZSBhCitjcmVhdGVkLWJ1dC1ub3QtYWN0aXZhdGVkIHBjYXBfdCBmb3IgYW4gaW5zdGFuY2Ugb2Ygb25lIG9mIHlvdXIgZGV2aWNlcy4KKworVGhlICJsaXN0IG9mIGRldmljZSBpbnN0YW5jZXMiIHJvdXRpbmUgdGFrZXMsIGFzIGFyZ3VtZW50czoKKworCWEgcG9pbnRlciB0byBhIHBjYXBfaWZfbGlzdF90OworCisJYSBwb2ludGVyIHRvIGFuIGVycm9yIG1lc3NhZ2UgYnVmZmVyLgorCitUaGUgZXJyb3IgbWVzc2FnZSBidWZmZXIgbWF5IGJlIGFzc3VtZWQgdG8gYmUgUENBUF9FUlJCVUZfU0laRSBieXRlcworbGFyZ2UsIGJ1dCBtdXN0IG5vdCBiZSBhc3N1bWVkIHRvIGJlIGxhcmdlci4gIEJ5IGNvbnZlbnRpb24sIHRoZSByb3V0aW5lCit0eXBpY2FsbHkgaGFzIGEgbmFtZSBjb250YWluaW5nICJmaW5kYWxsZGV2cyIuCisKK1RoZSByb3V0aW5lIHNob3VsZCBhdHRlbXB0IHRvIGRldGVybWluZSB3aGF0IGRldmljZSBpbnN0YW5jZXMgYXJlCithdmFpbGFibGUgYW5kIGFkZCB0aGVtIHRvIHRoZSBsaXN0IHBvaW50ZWQgdG8gYnkgdGhlIGZpcnN0IGFyZ3VtZW50OwordGhpcyBtYXkgYmUgaW1wb3NzaWJsZSBmb3Igc29tZSBtb2R1bGVzLCBidXQsIGZvciB0aG9zZSBtb2R1bGVzLCBpdCBtYXkKK2JlIGRpZmZpY3VsdCB0byBjYXB0dXJlIG9uIHRoZSBkZXZpY2VzIHVzaW5nIFdpcmVoc2hhcmsgKGFsdGhvdWdoIGl0CitzaG91bGQgYmUgcG9zc2libGUgdG8gY2FwdHVyZSBvbiB0aGVtIHVzaW5nIHRjcGR1bXAsIFRTaGFyaywgb3Igb3RoZXIKK3Byb2dyYW1zIHRoYXQgdGFrZSBhIGRldmljZSBuYW1lIG9uIHRoZSBjb21tYW5kIGxpbmUpLCBzbyB3ZSByZWNvbW1lbmQKK3RoYXQgeW91ciByb3V0aW5lIHByb3ZpZGUgdGhlIGxpc3Qgb2YgZGV2aWNlcyBpZiBwb3NzaWJsZS4gIElmIGl0CitjYW5ub3QsIGl0IHNob3VsZCBqdXN0IGltbWVkaWF0ZWx5IHJldHVybiAwLgorCitUaGUgcm91dGluZSBzaG91bGQgYWRkIGRldmljZXMgdG8gdGhlIGxpc3QgYnkgY2FsbGluZyB0aGUgYWRkX2RldigpCityb3V0aW5lIGluIGxpYnBjYXAsIGRlY2xhcmVkIGluIHRoZSBwY2FwLWludC5oIGhlYWRlci4gIEl0IHRha2VzLCBhcworYXJndW1lbnRzOgorCisJdGhlIHBvaW50ZXIgdG8gdGhlIHBjYXBfaWZfbGlzdF90IHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUKKwlyb3V0aW5lOworCisJdGhlIGRldmljZSBuYW1lLCBhcyBkZXNjcmliZWQgYWJvdmU7CisKKwlhIDMyLWJpdCB3b3JkIG9mIGZsYWdzLCBhcyBwcm92aWRlZCBieSBwY2FwX2ZpbmRhbGxkZXZzKCk7CisKKwlhIHRleHQgZGVzY3JpcHRpb24gb2YgdGhlIGRldmljZSwgb3IgTlVMTCBpZiB0aGVyZSBpcyBubworCWRlc2NyaXB0aW9uOworCisJdGhlIGVycm9yIG1lc3NhZ2UgYnVmZmVyIHBvaW50ZXIgcHJvdmlkZWQgdG8gdGhlIHJvdXRpbmUuCisKK2FkZF9kZXYoKSB3aWxsLCBpZiBpdCBzdWNjZWVkcywgcmV0dXJuIGEgcG9pbnRlciB0byBhIHBjYXBfaWZfdCB0aGF0IHdhcworYWRkZWQgdG8gdGhlIGxpc3Qgb2YgZGV2aWNlcy4gIElmIGl0IGZhaWxzLCBpdCB3aWxsIHJldHVybiBOVUxMOyBpbiB0aGlzCitjYXNlLCB0aGUgZXJyb3IgbWVzc2FnZSBidWZmZXIgaGFzIGJlZW4gZmlsbGVkIGluIHdpdGggYW4gZXJyb3Igc3RyaW5nLAorYW5kIHlvdXIgcm91dGluZSBtdXN0IHJldHVybiAtMSB0byBpbmRpY2F0ZSB0aGUgZXJyb3IuCisKK0lmIHlvdXIgcm91dGluZSBzdWNjZWVkcywgaXQgbXVzdCByZXR1cm4gMC4gIElmIGl0IGZhaWxzLCBpdCBtdXN0IGZpbGwKK2luIHRoZSBlcnJvciBtZXNzYWdlIGJ1ZmZlciB3aXRoIGFuIGVycm9yIHN0cmluZyBhbmQgcmV0dXJuIC0xLgorCitUaGUgImluaXRpYWxpemUgdGhlIHBjYXBfdCIgcm91dGluZSB0YWtlcywgYXMgYXJndW1lbnRzOgorCisJYSBwb2ludGVyIHRvIGEgZGV2aWNlIG5hbWU7CisKKwlhIHBvaW50ZXIgdG8gYW4gZXJyb3IgbWVzc2FnZSBidWZmZXI7CisKKwlhIHBvaW50ZXIgdG8gYW4gaW50LgorCitJdCByZXR1cm5zIGEgcG9pbnRlciB0byBhIHBjYXBfdC4KKworWW91ciBtb2R1bGUgd2lsbCBwcm9iYWJseSBuZWVkLCBmb3IgZWFjaCBwY2FwX3QgZm9yIGFuIG9wZW5lZCBkZXZpY2UsIGEKK3ByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgdG8gbWFpbnRhaW4gaXRzIG93biBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3BlbmVkCitkZXZpY2UuICBUaGVzZSBzaG91bGQgYmUgYWxsb2NhdGVkIHBlciBvcGVuZWQgaW5zdGFuY2UsIG5vdCBwZXIgZGV2aWNlOworaWYsIGZvciBleGFtcGxlLCBteWRldmljZTAgY2FuIGJlIGNhcHR1cmVkIG9uIGJ5IG1vcmUgdGhhbiBvbmUgcHJvZ3JhbQorYXQgdGhlIHNhbWUgdGltZSwgdGhlcmUgd2lsbCBiZSBtb3JlIHRoYW4gb25lIHBjYXBfdCBvcGVuZWQgZm9yCitteWRldmljZTAsIGFuZCBzbyB0aGVyZSB3aWxsIGJlIHNlcGFyYXRlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIGZvcgorZWFjaCBwY2FwX3QuICBJZiB5b3UgbmVlZCB0byBtYWludGFpbiBwZXItZGV2aWNlLCByYXRoZXIgdGhhbiBwZXItb3BlbmVkCitpbnN0YW5jZSBpbmZvcm1hdGlvbiwgeW91IHdpbGwgaGF2ZSB0byBtYWludGFpbiB0aGF0IHlvdXJzZWxmLgorCitUaGUgcm91dGluZSBzaG91bGQgZmlyc3QgY2hlY2sgdGhlIGRldmljZSB0byBzZWUgd2hldGhlciBpdCBsb29rcyBsaWtlIGEKK2RldmljZSB0aGF0IHRoaXMgbW9kdWxlIHdvdWxkIGhhbmRsZTsgZm9yIGV4YW1wbGUsIGl0IHNob3VsZCBiZWdpbiB3aXRoCitvbmUgb2YgdGhlIGRldmljZSBuYW1lIHByZWZpeGVzIGZvciB5b3VyIG1vZHVsZSBhbmQsIGlmIHlvdXIgZGV2aWNlcworaGF2ZSBpbnN0YW5jZSBudW1iZXJzLCBiZSBmb2xsb3dlZCBieSBhIG51bWJlci4gIElmIGl0IGlzIG5vdCBvbmUgb2YKK3Rob3NlIGRldmljZXMsIHlvdSBtdXN0IHNldCB0aGUgaW50ZWdlciBwb2ludGVkIHRvIGJ5IHRoZSB0aGlyZAorYXJndW1lbnQgdG8gMCwgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIGlzICpub3QqIG9uZSBvZiB0aGUgZGV2aWNlcyBmb3IKK3lvdXIgbW9kdWxlLCBhbmQgcmV0dXJuIE5VTEwuCisKK0lmIGl0ICppcyogb25lIG9mIHRob3NlIGRldmljZXMsIGl0IHNob3VsZCBjYWxsIHBjYXBfY3JlYXRlX2NvbW1vbiwKK3Bhc3NpbmcgdG8gaXQgdGhlIGVycm9yIG1lc3NhZ2UgYnVmZmVyIGFzIHRoZSBmaXJzdCBhcmd1bWVudCBhbmQgdGhlCitzaXplIG9mIHRoZSBwZXItb3BlbmVkIGluc3RhbmNlIGRhdGEgc3RydWN0dXJlIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQuCitJZiBpdCBmYWlscywgaXQgd2lsbCByZXR1cm4gTlVMTDsgeW91IG11c3QgcmV0dXJuIE5VTEwgaW4gdGhpcyBjYXNlLgorCitJZiBpdCBzdWNjZWVkcywgdGhlIHBjYXBfdCBwb2ludGVkIHRvIGJ5IHRoZSByZXR1cm4gdmFsdWUgaGFzIGJlZW4KK3BhcnRpYWxseSBpbml0aWFsaXplZCwgYnV0IHlvdSB3aWxsIG5lZWQgdG8gY29tcGxldGUgdGhlIHByb2Nlc3MuICBJdAoraGFzIGEgInByaXYiIG1lbWJlciwgd2hpY2ggaXMgYSB2b2lkICogdGhhdCBwb2ludHMgdG8gdGhlIHByaXZhdGUgZGF0YQorc3RydWN0dXJlIGF0dGFjaGVkIHRvIGl0OyB0aGF0IHN0cnVjdHVyZSBoYXMgYmVlbiBpbml0aWFsaXplZCB0byB6ZXJvZXMuCisKK1doYXQgeW91IG5lZWQgdG8gc2V0IGFyZSBzb21lIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIHlvdXIgcm91dGluZXMgdG8KK2hhbmRsZSBjZXJ0YWluIG9wZXJhdGlvbnM6CisKKwlhY3RpdmF0ZV9vcAorCQl0aGUgcm91dGluZSBjYWxsZWQgd2hlbiBwY2FwX2FjdGl2YXRlKCkgaXMgZG9uZSBvbiB0aGUKKwkJcGNhcF90CisKKwljYW5fc2V0X3JmbW9uX29wCisJCXRoZSByb3V0aW5lIGNhbGxlZCB3aGVuIHBjYXBfY2FuX3NldF9yZm1vbigpIGlzIGRvbmUgb24KKwkJdGhlIHBjYXBfdCAtIGlmIHlvdXIgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCA4MDIuMTEKKwkJbW9uaXRvciBtb2RlLCB5b3UgY2FuIGxlYXZlIHRoaXMgYXMgaW5pdGlhbGl6ZWQgYnkKKwkJcGNhcF9jcmVhdGVfY29tbW9uKCksIGFzIHRoYXQgcm91dGluZSB3aWxsIHJldHVybiAibm8sCisJCW1vbml0b3IgbW9kZSBpc24ndCBzdXBwb3J0ZWQiLgorCitPbmNlIHlvdSd2ZSBzZXQgdGhlIGFjdGl2YXRlX29wIGFuZCwgaWYgbmVjZXNzYXJ5LCB0aGUgY2FuX3NldF9yZm1vbl9vcCwKK3lvdSBtdXN0IHJldHVybiB0aGUgcGNhcF90ICogdGhhdCB3YXMgcmV0dXJuZWQgdG8geW91LgorCitZb3VyIGFjdGl2YXRlIHJvdXRpbmUgdGFrZXMsIGFzIGFuIGFyZ3VtZW50LCBhIHBvaW50ZXIgdG8gdGhlIHBjYXBfdAorYmVpbmcgYWN0aXZhdGVkLCBhbmQgcmV0dXJucyBhbiBpbnQuCisKK1RoZSBwZXJhbWV0ZXJzIHNldCBmb3IgdGhlIGRldmljZSBpbiB0aGUgcGNhcF9jcmVhdGUoKSBjYWxsLCBhbmQgYWZ0ZXIKK3RoYXQgY2FsbCgpLCBhcmUgbW9zdGx5IGluIHRoZSBvcHQgbWVtYmVyIG9mIHRoZSBwY2FwX3Q6CisKKwlkZXZpY2UKKwkJdGhlIG5hbWUgb2YgdGhlIGRldmljZQorCisJdGltZW91dAorCQl0aGUgYnVmZmVyaW5nIHRpbWVvdXQsIGluIG1pbGxpc2Vjb25kcworCisJYnVmZmVyX3NpemUKKwkJdGhlIGJ1ZmZlciBzaXplIHRvIHVzZQorCisJcHJvbWlzYworCQkxIGlmIHByb21pc2N1b3VzIG1vZGUgaXMgdG8gYmUgdXNlZCwgMCBvdGhlcndpc2UKKworCXJmbW9uCisJCTEgaWYgbW9uaXRvciBtb2RlIGlzIHRvIGJlIHVzZWQsIDAgb3RoZXJ3aXNlCisKKwlpbW1lZGlhdGUKKwkJMSBpZiB0aGUgZGV2aWNlIHNob3VsZCBiZSBpbiBpbW1lZGlhdGUgbW9kZSwgMCBvdGhlcndpc2UKKworCW5vbmJsb2NrCisJCTEgaWYgdGhlIGRldmljZSBzaG91bGQgYmUgaW4gbm9uLWJsb2NraW5nIG1vZGUsIDAKKwkJb3RoZXJ3aXNlCisKKwl0c3RhbXBfdHlwZQorCQl0aGUgdHlwZSBvZiB0aW1lIHN0YW1wIHRvIHN1cHBseQorCisJdHN0YW1wX3ByZWNpc2lvbgorCQl0aGUgdGltZSBzdGFtcCBwcmVjaXNpb24gdG8gc3VwcGx5CisKK1RoZSBzbmFwc2hvdCBtZW1iZXIgb2YgdGhlIHBjYXBfdCBzdHJ1Y3R1cmUgd2lsbCBjb250YWluIHRoZSBzbmFwc2hvdAorbGVuZ3RoIHRvIGJlIHVzZWQuCisKK1lvdXIgcm91dGluZSBzaG91bGQgYXR0ZW1wdCB0byBzZXQgdXAgdGhlIGRldmljZSBmb3IgY2FwdHVyaW5nLiAgSWYgaXQKK2ZhaWxzLCBpdCBtdXN0IHJldHVybiBhbiBlcnJvciBpbmRpY2F0aW9uIHdoaWNoIGlzIG9uZSBvZiB0aGUgUENBUF9FUlJPUgordmFsdWVzLiAgRm9yIFBDQVBfRVJST1IsIGl0IG11c3QgYWxzbyBzZXQgdGhlIGVycmJ1ZiBtZW1iZXIgb2YgdGhlCitwY2FwX3QgdG8gYW4gZXJyb3Igc3RyaW5nLiAgRm9yIFBDQVBfRVJST1JfTk9fU1VDSF9ERVZJQ0UgYW5kCitQQ0FQX0VSUk9SX1BFUk1fREVOSUVELCBpdCBtYXkgc2V0IGl0IHRvIGFuIGVycm9yIHN0cmluZyBwcm92aWRpbmcKK2FkZGl0aW9uYWwgaW5mb3JtYXRpb24gdGhhdCBtYXkgYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcsIG9yIG1heSBqdXN0CitsZWF2ZSBpdCBhcyBhIG51bGwgc3RyaW5nLgorCitJZiBpdCBzdWNjZWVkcywgaXQgbXVzdCBzZXQgY2VydGFpbiBmdW5jdGlvbiBwb2ludGVycyBpbiB0aGUgcGNhcF90CitzdHJ1Y3R1cmU6CisKKwlyZWFkX29wCisJCWNhbGxlZCB3aGVuZXZlciBwYWNrZXRzIGFyZSB0byBiZSByZWFkCisKKwlpbmplY3Rfb3AKKwkJY2FsbGVkIHdoZW5ldmVyIHBhY2tldHMgYXJlIHRvIGJlIGluamVjdGVkCisKKwlzZXRmaWx0ZXJfb3AKKwkJY2FsbGVkIHdoZW5ldmVyIHBjYXBfc2V0ZmlsdGVyKCkgaXMgY2FsbGVkCisKKwlzZXRkaXJlY3Rpb25fb3AKKwkJY2FsbGVkIHdoZW5ldmVyIHBjYXBfc2V0ZGlyZWN0aW9uKCkgaXMgY2FsbGVkCisKKwlzZXRfZGF0YWxpbmtfb3AKKwkJY2FsbGVkIHdobmV2ZXIgcGNhcF9zZXRfZGF0YWxpbmsoKSBpcyBjYWxsZWQKKworCWdldG5vbmJsb2NrX29wCisJCWNhbGxlZCB3aGVuZXZlciBwY2FwX2dldG5vbmJsb2NrKCkgaXMgY2FsbGVkCisKKwlzZXRub25ibG9ja19vcAorCQljYWxsZWQgd2hlbmV2ZXIgcGNhcF9zZXRub25ibG9jaygpIGlzIGNhbGxlZAorCisJc3RhdHNfb3AKKwkJY2FsbGVkIHdoZW5ldmVyIHBjYXBfc3RhdHMoKSBpcyBjYWxsZWQKKworCWNsZWFudXBfb3AKKwkJY2FsbGVkIGlmIHRoZSBhY3RpdmF0ZSByb3V0aW5lIGZhaWxzIG9yIHBjYXBfY2xvc2UoKSBpcworCQljYWxsZWQKKworYW5kIG11c3QgYWxzbyBzZXQgdGhlIGxpbmt0eXBlIG1lbWJlciB0byB0aGUgRExUXyB2YWx1ZSBmb3IgdGhlIGRldmljZS4KKworT24gVU4qWGVzLCBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzIHdhaXRpbmcgZm9yIHBhY2tldHMgdG8gYXJyaXZlIHdpdGgKK3NlbGVjdCgpL3BvbGwoKS9lcG9sbCgpL2txdWV1ZXMgZXRjLiwgaXQgc2hvdWxkIHNldCB0aGUgc2VsZWN0YWJsZV9mZAorbWVtYmVyIG9mIHRoZSBzdHJ1Y3R1cmUgdG8gdGhlIGRlc2NyaXB0b3IgeW91IHdvdWxkIHVzZSB3aXRoIHRob3NlCitjYWxscy4gIElmIGl0IGRvZXMgbm90LCB0aGVuLCBpZiB0aGF0J3MgYmVjYXVzZSB0aGUgZGV2aWNlIHBvbGxzIGZvcgorcGFja2V0cyByYXRoZXIgdGhhbiByZWNlaXZpbmcgaW50ZXJydXB0cyBvciBvdGhlciBzaWduYWxzIHdoZW4gcGFja2V0cworYXJyaXZlLCBpdCBzaG91bGQgaGF2ZSBhIHN0cnVjdCB0aW1ldmFsIGluIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlLAorc2V0IHRoZSB2YWx1ZSBvZiB0aGF0IHN0cnVjdCB0aW1ldmFsIHRvIHRoZSBwb2xsIHRpbWVvdXQsIGFuZCBzZXQgdGhlCityZXF1aXJlZF9zZWxlY3RfdGltZW91dCBtZW1iZXIgb2YgdGhlIHBjYXBfdCB0byBwb2ludCB0byB0aGUgc3RydWN0Cit0aW1ldmFsLgorCitUaGUgcmVhZF9vcCByb3V0aW5lIGlzIGNhbGxlZCB3aGVuIHBjYXBfZGlzcGF0Y2goKSwgcGNhcF9sb29wKCksCitwY2FwX25leHQoKSwgb3IgcGNhcF9uZXh0X2V4KCkgaXMgY2FsbGVkLiAgSXQgaXMgcGFzc2VkIHRoZSBzYW1lCithcmd1bWVudHMgYXMgcGNhcF9kaXNwYXRjaCgpIGlzIGNhbGxlZC4KKworVGhlIHJvdXRpbmUgc2hvdWxkIGZpcnN0IGNoZWNrIGlmIHRoZSBicmVha19sb29wIG1lbWJlciBvZiB0aGUgcGNhcF90IGlzCitub24temVybyBhbmQsIGlmIHNvLCBzZXQgdGhhdCBtZW1iZXIgdG8gemVybyBhbmQgcmV0dXJuCitQQ0FQX0VSUk9SX0JSRUFLLgorCitUaGVuLCBpZiB0aGUgcGNhcF90IGlzIGluIGJsb2NraW5nIG1vZGUgKGFzIG9wcG9zZWQgdG8gbm9uLWJsb2NraW5nCittb2RlKSwgYW5kIHRoZXJlIGFyZSBubyBwYWNrZXRzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSB0byBiZSBwYXNzZWQgdG8KK3RoZSBjYWxsYmFjaywgaXQgc2hvdWxkIGJsb2NrIHdhaXRpbmcgZm9yIHBhY2tldHMgdG8gYXJyaXZlLCB1c2luZyB0aGUKK2J1ZmZlcmluZyB0aW1lb3V0LCBmaXJzdCwgYW5kIHJlYWQgcGFja2V0cyBmcm9tIHRoZSBkZXZpY2UgaWYgbmVjZXNzYXJ5LgorCitUaGVuIGl0IHNob3VsZCBsb29wIHRocm91Z2ggdGhlIGF2YWlsYWJsZSBwYWNrZXRzLCBjYWxsaW5nIHRoZSBjYWxsYmFjaworcm91dGluZSBmb3IgZWFjaCBwYWNrZXQ6CisKKwlJZiB0aGUgUEFDS0VUX0NPVU5UX0lTX1VOTElNSVRFRCgpIG1hY3JvIGV2YWx1YXRlcyB0byB0cnVlIHdoZW4KKwlwYXNzZWQgdGhlIHBhY2tldCBjb3VudCBhcmd1bWVudCwgdGhlIGxvb3Agc2hvdWxkIGNvbnRpbnVlIHVudGlsCisJdGhlcmUgYXJlIG5vIG1vcmUgcGFja2V0cyBpbW1lZGlhdGVseSBhdmFpbGFibGUgb3IgdGhlCisJYnJlYWtfbG9vcCBtZW1iZXIgb2YgdGhlIHBjYXBfdCBpcyBub24temVyby4gIElmIHRoZSBicmVha19sb29wCisJbWVtYmVyIGlzIGZvdW50IHRvIGJlIG5vbi16ZXJvLCBpdCBzaG91bGQgc2V0IHRoYXQgbWVtYmVyIHRvCisJemVybyBhbmQgcmV0dXJuIFBDQVBfRVJST1JfQlJFQUsuCisKKwlJZiBpdCBkb2Vzbid0IGV2YWx1YXQgdG8gdHJ1ZSwgdGhlbiB0aGUgbG9vcCBzaG91bGQgYWxzbworCXRlcm1pbmF0ZSBpZiB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBwYWNrZXRzIGhhdmUgYmVlbiBkZWxpdmVyZWQKKwl0byB0aGUgY2FsbGJhY2suCisKK05vdGUgdGhhdCB0aGVyZSBpcyAqTk8qIHJlcXVpcmVtZW50IHRoYXQgdGhlIHBhY2tldCBoZWFkZXIgb3IgZGF0YQorcHJvdmlkZWQgdG8gdGhlIGNhbGxiYWNrIHJlbWFpbiBhdmFpbGFibGUsIG9yIHZhbGlkLCBhZnRlciB0aGUgY2FsbGJhY2sKK3JvdXRpbmUgcmV0dXJuczsgaWYgdGhlIGNhbGxiYWNrIG5lZWRzIHRvIHNhdmUgdGhlIGRhdGEgZm9yIG90aGVyIGNvZGUKK3RvIHVzZSwgaXQgbXVzdCBtYWtlIGEgY29weSBvZiB0aGF0IGRhdGEuICBUaGlzIG1lYW5zIHRoYXQgdGhlIG1vZHVsZSBpcworZnJlZSB0bywgZm9yIGV4YW1wbGUsIG92ZXJ3cml0ZSB0aGUgYnVmZmVyIGludG8gd2hpY2ggaXQgcmVhZCB0aGUKK3BhY2tldCwgb3IgcmVsZWFzZSBiYWNrIHRvIHRoZSBrZXJuZWwgYSBwYWNrZXQgaW4gYSBtZW1vcnktbWFwcGVkCitidWZmZXIgc2hhcmVkIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgdXNlcmxhbmQsIGFmdGVyIHRoZSBjYWxsYmFjaworcmV0dXJucy4KKworSWYgYW4gZXJyb3Igb2NjdXJzIHdoZW4gcmVhZGluZyBwYWNrZXRzIGZyb20gdGhlIGRldmljZSwgaXQgbXVzdCBzZXQgdGhlCitlcnJidWYgbWVtYmVyIG9mIHRoZSBwY2FwX3QgdG8gYW4gZXJyb3Igc3RyaW5nIGFuZCByZXR1cm4gUENBUF9FUlJPUi4KKworSWYgbm8gZXJyb3Igb2NjdXJzLCBpdCBtdXN0IHJldHVybiB0aGUgbnVtYmVyIG9mIHBhY2tldHMgdGhhdCB3ZXJlCitzdXBwbGllZCB0byB0aGUgY2FsbGJhY2sgcm91dGluZS4KKworVGhlIGluamVjdCByb3V0aW5lIGlzIHBhc3NlZCBhIHBvaW50ZXIgdG8gdGhlIHBjYXBfdCwgYSBidWZmZXIKK2NvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBwYWNrZXQgdG8gaW5qZWN0LCBhbmQgdGhlIG51bWJlciBvZiBieXRlcworaW4gdGhlIHBhY2tldC4gIElmIHRoZSBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IHBhY2tldCBpbmplY3Rpb24sIHRoZQorcm91dGluZSBtdXN0IHNldCB0aGUgZXJyYnVmIG1lbWJlciBvZiB0aGUgcGNhcF90IHRvIGEgbWVzc2FnZSBpbmRpY2F0aW5nCit0aGF0IHBhY2tldCBpbmplY3Rpb24gaXNuJ3Qgc3VwcG9ydGVkIGFuZCByZXR1cm4gUENBUF9FUlJPUi4gIE90aGVyd2lzZSwKK2l0IHNob3VsZCBhdHRlbXB0IHRvIGluamVjdCB0aGUgcGFja2V0OyBpZiB0aGUgYXR0ZW1wdCBmYWlscywgaXQgbXVzdAorc2V0IHRoZSBlcnJidWYgbWVtYmVyIG9mIHRoZSBwY2FwX3QgdG8gYW4gZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJuCitQQ0FQX0VSUk9SLiAgT3RoZXJ3aXNlLCBpdCBzaG91bGQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW5qZWN0ZWQuCisKK1RoZSBzZXRmaWx0ZXIgcm91dGluZSBpcyBwYXNzZWQgYSBwb2ludGVyIHRvIHRoZSBwY2FwX3QgYW5kIGEgcG9pbnRlcgordG8gYSBzdHJ1Y3QgYnBmX3Byb2dyYW0gY29udGFpbmluZyBhIEJQRiBwcm9ncmFtIHRvIGJlIHVzZWQgYXMgYSBmaWx0ZXIuCitJZiB0aGUgbWVjaGFuaXNtIHVzZWQgYnkgeW91ciBtb2R1bGUgY2FuIHBlcmZvcm0gZmlsdGVyaW5nIHdpdGggYSBCUEYKK3Byb2dyYW0sIGl0IHdvdWxkIGF0dGVtcHQgdG8gc2V0IHRoYXQgZmlsdGVyIHRvIHRoZSBzcGVjaWZpZWQgcHJvZ3JhbS4KKworSWYgdGhhdCBmYWlsZWQgYmVjYXVzZSB0aGUgcHJvZ3JhbSB3YXMgdG9vIGxhcmdlLCBvciB1c2VkIEJQRiBmZWF0dXJlcworbm90IHN1cHBvcnRlZCBieSB0aGF0IG1lY2hhbmlzbSwgdGhlIG1vZHVsZSBzaG91bGQgZmFsbCBiYWNrIG9uCitmaWx0ZXJpbmcgaW4gdXNlcmxhbmQgYnkgc2F2aW5nIGEgY29weSBvZiB0aGUgZmlsdGVyIHdpdGggYSBjYWxsIHRvCitpbnN0YWxsX2JwZl9wcm9ncmFtKCksIHNldHRpbmcgYSBmbGFnIGluIHRoZSBwcml2YXRlIGRhdGEgaW5zdHJ1Y3R1cmUKK2luZGljYXRpbmcgdGhhdCBmaWx0ZXJpbmcgaXMgYmVpbmcgZG9uZSBieSB0aGUgbW9kdWxlIGFuZCwgaW4gdGhlIHJlYWQKK3JvdXRpbmUncyBtYWluIGxvb3AsIGNoZWNraW5nIHRoZSBmbGFnIGFuZCwgaWYgaXQncyBzZXQsIGNhbGxpbmcKK3BjYXBfZmlsdGVyKCksIHBhc3NpbmcgaXQgdGhlIGZjb2RlLmJmX2luc25zIG1lbWJlciBvZiB0aGUgcGNhcF90LCB0aGUKK3JhdyBwYWNrZXQgZGF0YSwgdGhlIG9uLXRoZS13aXJlIGxlbmd0aCBvZiB0aGUgcGFja2V0LCBhbmQgdGhlIGNhcHR1cmVkCitsZW5ndGggb2YgdGhlIHBhY2tldCwgYW5kIG9ubHkgcGFzc2luZyB0aGUgcGFja2V0IHRvIHRoZSBjYWxsYmFjaworcm91dGluZSwgYW5kIGNvdW50aW5nIGl0LCBpZiBwY2FwX2ZpbHRlcigpIHJldHVybnMgYSBub24temVybyB2YWx1ZS4KKyhJZiB0aGUgZmxhZyBpcyBub3Qgc2V0LCBhbGwgcGFja2V0cyBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaworcm91dGluZSBhbmQgY291bnRlZCwgYXMgdGhlIGZpbHRlcmluZyBpcyBiZWluZyBkb25lIGJ5IHRoZSBtZWNoYW5pc20KK3VzZWQgYnkgdGhlIG1vZHVsZS4pICBJZiBpbnN0YWxsX2JwZl9wcm9ncmFtKCkgcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlLAordGhlIHJvdXRpbmUgc2hvdWxkIHJldHVybiBQQ0FQX0VSUk9SLgorCitJZiB0aGUgYXR0ZW1wdCB0byBzZXQgdGhlIGZpbHRlciBmYWlsZWQgZm9yIGFueSBvdGhlciByZWFzb24sIHRoZQorcm91dGluZSBtdXN0IHNldCB0aGUgZXJyYnVmIG1lbWJlciBvZiB0aGUgcGNhcF90IHRvIGFuIGVycm9yIG1lc3NhZ2UgYW5kCityZXR1cm4gUENBUF9FUlJPUi4KKworSWYgdGhlIGF0dGVtcHQgdG8gc2V0IHRoZSBmaWx0ZXIgc3VjY2VlZGVkLCBvciBpdCBmYWlsZWQgYmVjYXVzZSB0aGUKK21lY2hhbmlzbSB1c2VkIGJ5IHRoZSBtb2R1bGUgcmVqZWN0ZWQgaXQgYW5kIHRoZSBjYWxsIHRvCitpbnN0YWxsX2JwZl9wcm9ncmFtKCkgc3VjY2VlZGVkLCB0aGUgcm91dGluZSBzaG91bGQgcmV0dXJuIDAuCisKK0lmIHRoZSBtZWNoYW5pc20gdGhlIG1vZHVsZSB1c2VzIGRvZXNuJ3Qgc3VwcG9ydCBmaWx0ZXJpbmcsIHRoZSBwb2ludGVyCit0byB0aGUgc2V0ZmlsdGVyIHJvdXRpbmUgY2FuIGp1c3QgYmUgc2V0IHRvIHBvaW50IHRvCitpbnN0YWxsX2JwZl9wcm9ncmFtOyB0aGUgbW9kdWxlIGRvZXMgbm90IG5lZWQgYSByb3V0aW5lIG9mIGl0cyBvd24gdG8KK2hhbmRsZSB0aGF0LgorCitUaGUgc2V0ZGlyZWN0aW9uIHJvdXRpbmUgaXMgcGFzc2VkIGEgcG9pbnRlciB0byB0aGUgcGNhcF90IGFuZCBhCitwY2FwX2RpcmVjdGlvbl90IGluZGljYXRpbmcgd2hpY2ggcGFja2V0IGRpcmVjdGlvbnMgc2hvdWxkIGJlIGFjY2VwdGVkLgorSWYgdGhlIG1vZHVsZSBjYW4ndCBhcnJhbmdlIHRvIGhhbmRsZSBvbmx5IGluY29taW5nIHBhY2tldHMgb3Igb25seQorb3V0Z29pbmcgcGFja2V0cywgaXQgY2FuIHNldCB0aGUgcG9pbnRlciB0byB0aGUgc2V0ZGlyZWN0aW9uIHJvdXRpbmUgdG8KK05VTEwsIGFuZCBjYWxscyB0byBwY2FwX3NldGRpcmVjdGlvbigpIHdpbGwgZmFpbCB3aXRoIGFuIGVycm9yIG1lc3NhZ2UKK2luZGljYXRpbmcgdGhhdCBzZXR0aW5nIHRoZSBkaXJlY3Rpb24gaXNuJ3Qgc3VwcG9ydGVkLgorCitYWFggZGVzY3JpYmUgc2V0X2RhdGFsaW5rLCBpbmNsdWRpbmcgd2hhdCB0aGUgYWN0aXZhdGUgcm91dGluZSBoYXMgdG8gZG8KK1hYWAorCitYWFggZGVzY3JpYmUgdGhlIHJlc3Qgb2YgdGhlIHJvdXRpbmVzIFhYWApkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5kYWcgYi9kb2MvUkVBRE1FLmRhZwppbmRleCBhY2NhZTdjLi4xMzMzMmM2IDEwMDY0NAotLS0gYS9kb2MvUkVBRE1FLmRhZworKysgYi9kb2MvUkVBRE1FLmRhZwpAQCAtMSwxMSArMSwxMSBAQAogCiBUaGUgZm9sbG93aW5nIGluc3RydWN0aW9ucyBhcHBseSBpZiB5b3UgaGF2ZSBhIExpbnV4IG9yIEZyZWVCU0QgcGxhdGZvcm0gYW5kCiB3YW50IGxpYnBjYXAgdG8gc3VwcG9ydCB0aGUgREFHIHJhbmdlIG9mIHBhc3NpdmUgbmV0d29yayBtb25pdG9yaW5nIGNhcmRzIGZyb20KLUVuZGFjZSAoaHR0cDovL3d3dy5lbmRhY2UuY29tLCBzZWUgYmVsb3cgZm9yIGZ1cnRoZXIgY29udGFjdCBkZXRhaWxzKS4KK0VuZGFjZSAoaHR0cHM6Ly93d3cuZW5kYWNlLmNvbSwgc2VlIGJlbG93IGZvciBmdXJ0aGVyIGNvbnRhY3QgZGV0YWlscykuCiAKIDEpIEluc3RhbGwgYW5kIGJ1aWxkIHRoZSBEQUcgc29mdHdhcmUgZGlzdHJpYnV0aW9uIGJ5IGZvbGxvd2luZyB0aGUKIGluc3RydWN0aW9ucyBzdXBwbGllZCB3aXRoIHRoYXQgcGFja2FnZS4gQ3VycmVudCBFbmRhY2UgY3VzdG9tZXJzIGNhbiBkb3dubG9hZAotdGhlIERBRyBzb2Z0d2FyZSBkaXN0aWJ1dGlvbiBmcm9tIGh0dHBzOi8vd3d3LmVuZGFjZS5jb20KK3RoZSBEQUcgc29mdHdhcmUgZGlzdHJpYnV0aW9uIGZyb20gaHR0cHM6Ly93d3cuZW5kYWNlLmNvbQogCiAyKSBDb25maWd1cmUgbGliY2FwLiBUbyBhbGxvdyB0aGUgJ2NvbmZpZ3VyZScgc2NyaXB0IHRvIGxvY2F0ZSB0aGUgREFHCiBzb2Z0d2FyZSBkaXN0cmlidXRpb24gdXNlIHRoZSAnLS13aXRoLWRhZycgb3B0aW9uOgpAQCAtODgsNyArODgsNyBAQAogYXMgZGFnMC4gVGhlc2UgYXJlIHZpc2libGUgdmlhIHBjYXBfZmluZGFsbGRldnMoKS4KIAogbGlicGNhcCBub3cgZG9lcyBOT1Qgc2V0IHRoZSBjYXJkJ3MgaGFyZHdhcmUgc25hcGxlbiAoc2xlbikuIFRoaXMgbXVzdCBub3cgYmUKLXNldCB1c2luZyB0aGUgYXBwcm9wcmlhdGUgREFHIGNvbmlndXJhdGlvbiBwcm9ncmFtLCBlLmcuIGRhZ3RocmVlLCBkYWdmb3VyLAorc2V0IHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBEQUcgY29uZmlndXJhdGlvbiBwcm9ncmFtLCBlLmcuIGRhZ3RocmVlLCBkYWdmb3VyLAogZGFnc2l4LCBkYWdjb25maWcuIFRoaXMgaXMgYmVjYXVzZSB0aGUgc25hcGxlbiBpcyBjdXJyZW50bHkgc2hhcmVkIGJldHdlZW4KIGFsbCBvZiB0aGUgc3RyZWFtcy4gSW4gZnV0dXJlIHRoaXMgbWF5IGNoYW5nZSBpZiBwZXItc3RyZWFtIHNsZW4gaXMKIGltcGxlbWVudGVkLgpAQCAtMTE3LDYgKzExNyw2IEBACiAKIFBsZWFzZSBhbHNvIHZpc2l0IG91ciBXZWIgc2l0ZSBhdDoKIAotICAgICAgICBodHRwOi8vd3d3LmVuZGFjZS5jb20vCisgICAgICAgIGh0dHBzOi8vd3d3LmVuZGFjZS5jb20vCiAKIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEVuZGFjZSBEQUcgY2FyZHMgY29udGFjdCA8c2FsZXNAZW5kYWNlLmNvbT4uCmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLmhwdXggYi9kb2MvUkVBRE1FLmhwdXgKaW5kZXggNjVlY2ZmOS4uYjk5NWVlZSAxMDA2NDQKLS0tIGEvZG9jL1JFQURNRS5ocHV4CisrKyBiL2RvYy9SRUFETUUuaHB1eApAQCAtOCw3ICs4LDcgQEAKIGFibGUgdG8gc2VlIHBhY2tldHMgc2VudCBmcm9tIHRoZSBtYWNoaW5lIG9uIHdoaWNoIHRoZXkncmUgcnVubmluZy4KIFNvbWUgYXJ0aWNsZXMgb24gZ3JvdXBzLmdvb2dsZS5jb20gZGlzY3Vzc2luZyB0aGlzIGFyZToKIAotCWh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cHM/c2VsbT04MmxkM3YlMjQ4MGklMjQxJTQwbWFtZW5jaGkuenJ6LlRVLUJlcmxpbi5ERQorCWh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXBzP3NlbG09ODJsZDN2JTI0ODBpJTI0MSU0MG1hbWVuY2hpLnpyei5UVS1CZXJsaW4uREUKIAogd2hpY2ggc2F5czoKIApAQCAtNjksNyArNjksNyBAQAogCiBhbmQKIAotCWh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cHM/c2VsbT0zOEFBOTczRS45NkJFN0RGNyU0MGNjLnVpdC5ubworCWh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXBzP3NlbG09MzhBQTk3M0UuOTZCRTdERjclNDBjYy51aXQubm8KIAogd2hpY2ggc2F5czoKIApAQCAtMTE4LDcgKzExOCw3IEBACiAKIEFub3RoZXIgcG9zdGluZzoKIAotCWh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cHM/c2VsbT03ZDZndm4lMjRiMyUyNDElNDBvY2Vhbi5jdXAuaHAuY29tCisJaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cHM/c2VsbT03ZDZndm4lMjRiMyUyNDElNDBvY2Vhbi5jdXAuaHAuY29tCiAKIGluZGljYXRlcyB0aGF0IHlvdSBuZWVkIHRvIGluc3RhbGwgdGhlIG9wdGlvbmFsIFNUUkVBTVMgcHJvZHVjdCB0byBkbwogY2FwdHVyZXMgb24gSFAtVVggOS54OgpAQCAtMTU5LDcgKzE1OSw3IEBACiAJICAgb2YgYW4gaW50ZXJmYWNlCiAJQTogWW91IG5lZWQgdG8gZ2V0IFBITkVfMjA4OTIsUEhORV8yMDcyNSBhbmQgUEhDT18xMDk0NyAob3IKIAkgICBuZXdlciwgdGhpcyBpcyBhcyBvZiA0LjQuMDApIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiAgVGhlbiB5b3UgY2FuCi0JICAgZW5hYmxlIHRoZSBmZWF0dXJlIGFzIGRlc2NpYmVkIGJlbG93OgorCSAgIGVuYWJsZSB0aGUgZmVhdHVyZSBhcyBkZXNjcmliZWQgYmVsb3c6CiAKIAlQYXRjaCBOYW1lOiBQSE5FXzIwODkyCiAJUGF0Y2ggRGVzY3JpcHRpb246IHM3MDAgMTAuMjAgUENJIDEwMEJhc2UtVCBjdW11bGF0aXZlIHBhdGNoCmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLmxpbnV4Lm1kIGIvZG9jL1JFQURNRS5saW51eC5tZAppbmRleCBmZmNiOTI4Li4xNDNkZmY2IDEwMDY0NAotLS0gYS9kb2MvUkVBRE1FLmxpbnV4Lm1kCisrKyBiL2RvYy9SRUFETUUubGludXgubWQKQEAgLTEsNzMgKzEsOCBAQAotSW4gb3JkZXIgZm9yIGxpYnBjYXAgdG8gYmUgYWJsZSB0byBjYXB0dXJlIHBhY2tldHMgb24gYSBMaW51eCBzeXN0ZW0sCi10aGUgInBhY2tldCIgcHJvdG9jb2wgbXVzdCBiZSBzdXBwb3J0ZWQgYnkgeW91ciBrZXJuZWwuICBJZiBpdCBpcyBub3QsCi15b3UgbWF5IGdldCBlcnJvciBtZXNzYWdlcyBzdWNoIGFzCitDdXJyZW50bHksIGxpYnBjYXAgc3VwcG9ydHMgcGFja2V0IGNhcHR1cmluZyBvbiBMaW51eCAyLjYuMjcgYW5kIGxhdGVyOworZWFybGllciB2ZXJzaW9ucyBhcmUgbm90IHN1cHBvcnRlZC4KIAotCW1vZHByb2JlOiBjYW4ndCBsb2NhdGUgbW9kdWxlIG5ldC1wZi0xNwotCi1pbiAiL3Zhci9hZG0vbWVzc2FnZXMiLCBvciBtYXkgZ2V0IG1lc3NhZ2VzIHN1Y2ggYXMKLQotCXNvY2tldDogQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbAotCi1mcm9tIGFwcGxpY2F0aW9ucyB1c2luZyBsaWJwY2FwLgotCi1Zb3UgbXVzdCBjb25maWd1cmUgdGhlIGtlcm5lbCB3aXRoIHRoZSBDT05GSUdfUEFDS0VUIG9wdGlvbiBmb3IgdGhpcwotcHJvdG9jb2w7IHRoZSBmb2xsb3dpbmcgbm90ZSBpcyBmcm9tIHRoZSBMaW51eCAiQ29uZmlndXJlLmhlbHAiIGZpbGUgZm9yCi10aGUgMi4wWy54XSBrZXJuZWw6Ci0KLQlQYWNrZXQgc29ja2V0Ci0JQ09ORklHX1BBQ0tFVAotCSAgVGhlIFBhY2tldCBwcm90b2NvbCBpcyB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB3aGljaCBjb21tdW5pY2F0ZQotCSAgZGlyZWN0bHkgd2l0aCBuZXR3b3JrIGRldmljZXMgd2l0aG91dCBhbiBpbnRlcm1lZGlhdGUgbmV0d29yawotCSAgcHJvdG9jb2wgaW1wbGVtZW50ZWQgaW4gdGhlIGtlcm5lbCwgZS5nLiB0Y3BkdW1wLiBJZiB5b3Ugd2FudCB0aGVtCi0JICB0byB3b3JrLCBjaG9vc2UgWS4KLQotCSAgVGhpcyBkcml2ZXIgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUgY2FsbGVkIGFmX3BhY2tldC5vICggPQotCSAgY29kZSB3aGljaCBjYW4gYmUgaW5zZXJ0ZWQgaW4gYW5kIHJlbW92ZWQgZnJvbSB0aGUgcnVubmluZyBrZXJuZWwKLQkgIHdoZW5ldmVyIHlvdSB3YW50KS4gSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgc2F5IE0KLQkgIGhlcmUgYW5kIHJlYWQgRG9jdW1lbnRhdGlvbi9tb2R1bGVzLnR4dDsgaWYgeW91IHVzZSBtb2Rwcm9iZSBvcgotCSAga21vZCwgeW91IG1heSBhbHNvIHdhbnQgdG8gYWRkICJhbGlhcyBuZXQtcGYtMTcgYWZfcGFja2V0IiB0bwotCSAgL2V0Yy9tb2R1bGVzLmNvbmYuCi0KLWFuZCB0aGUgbm90ZSBmb3IgdGhlIDIuMlsueF0ga2VybmVsIHNheXM6Ci0KLQlQYWNrZXQgc29ja2V0Ci0JQ09ORklHX1BBQ0tFVAotCSAgVGhlIFBhY2tldCBwcm90b2NvbCBpcyB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB3aGljaCBjb21tdW5pY2F0ZQotCSAgZGlyZWN0bHkgd2l0aCBuZXR3b3JrIGRldmljZXMgd2l0aG91dCBhbiBpbnRlcm1lZGlhdGUgbmV0d29yawotCSAgcHJvdG9jb2wgaW1wbGVtZW50ZWQgaW4gdGhlIGtlcm5lbCwgZS5nLiB0Y3BkdW1wLiBJZiB5b3Ugd2FudCB0aGVtCi0JICB0byB3b3JrLCBjaG9vc2UgWS4gVGhpcyBkcml2ZXIgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUgY2FsbGVkCi0JICBhZl9wYWNrZXQubyAoID0gY29kZSB3aGljaCBjYW4gYmUgaW5zZXJ0ZWQgaW4gYW5kIHJlbW92ZWQgZnJvbSB0aGUKLQkgIHJ1bm5pbmcga2VybmVsIHdoZW5ldmVyIHlvdSB3YW50KS4gSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhCi0JICBtb2R1bGUsIHNheSBNIGhlcmUgYW5kIHJlYWQgRG9jdW1lbnRhdGlvbi9tb2R1bGVzLnR4dC4gIFlvdSB3aWxsCi0JICBuZWVkIHRvIGFkZCAnYWxpYXMgbmV0LXBmLTE3IGFmX3BhY2tldCcgdG8geW91ciAvZXRjL2NvbmYubW9kdWxlcwotCSAgZmlsZSBmb3IgdGhlIG1vZHVsZSB2ZXJzaW9uIHRvIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHkuICBJZiB1bnN1cmUsCi0JICBzYXkgWS4KLQotSW4gYWRkaXRpb24sIHRoZXJlIGlzIGFuIG9wdGlvbiB0aGF0LCBpbiAyLjIgYW5kIGxhdGVyIGtlcm5lbHMsIHdpbGwKLWFsbG93IHBhY2tldCBjYXB0dXJlIGZpbHRlcnMgc3BlY2lmaWVkIHRvIHByb2dyYW1zIHN1Y2ggYXMgdGNwZHVtcCB0byBiZQotZXhlY3V0ZWQgaW4gdGhlIGtlcm5lbCwgc28gdGhhdCBwYWNrZXRzIHRoYXQgZG9uJ3QgcGFzcyB0aGUgZmlsdGVyIHdvbid0Ci1iZSBjb3BpZWQgZnJvbSB0aGUga2VybmVsIHRvIHRoZSBwcm9ncmFtLCByYXRoZXIgdGhhbiBoYXZpbmcgYWxsIHBhY2tldHMKLWNvcGllZCB0byB0aGUgcHJvZ3JhbSBhbmQgbGlicGNhcCBkb2luZyB0aGUgZmlsdGVyaW5nIGluIHVzZXIgbW9kZS4KLQotQ29weWluZyBwYWNrZXRzIGZyb20gdGhlIGtlcm5lbCB0byB0aGUgcHJvZ3JhbSBjb25zdW1lcyBhIHNpZ25pZmljYW50Ci1hbW91bnQgb2YgQ1BVLCBzbyBmaWx0ZXJpbmcgaW4gdGhlIGtlcm5lbCBjYW4gcmVkdWNlIHRoZSBvdmVyaGVhZCBvZgotY2FwdHVyaW5nIHBhY2tldHMgaWYgYSBmaWx0ZXIgaGFzIGJlZW4gc3BlY2lmaWVkIHRoYXQgZGlzY2FyZHMgYQotc2lnbmlmaWNhbnQgbnVtYmVyIG9mIHBhY2tldHMuICAoSWYgbm8gZmlsdGVyIGlzIHNwZWNpZmllZCwgaXQgbWFrZXMgbm8KLWRpZmZlcmVuY2Ugd2hldGhlciB0aGUgZmlsdGVyaW5nIGlzbid0IHBlcmZvcm1lZCBpbiB0aGUga2VybmVsIG9yIGlzbid0Ci1wZXJmb3JtZWQgaW4gdXNlciBtb2RlLiA6LSkpCi0KLVRoZSBvcHRpb24gZm9yIHRoaXMgaXMgdGhlIENPTkZJR19GSUxURVIgb3B0aW9uOyB0aGUgIkNvbmZpZ3VyZS5oZWxwIgotZmlsZSBzYXlzOgotCi0JU29ja2V0IGZpbHRlcmluZwotCUNPTkZJR19GSUxURVIKLQkgIFRoZSBMaW51eCBTb2NrZXQgRmlsdGVyIGlzIGRlcml2ZWQgZnJvbSB0aGUgQmVya2VsZXkgUGFja2V0IEZpbHRlci4KLQkgIElmIHlvdSBzYXkgWSBoZXJlLCB1c2VyLXNwYWNlIHByb2dyYW1zIGNhbiBhdHRhY2ggYSBmaWx0ZXIgdG8gYW55Ci0JICBzb2NrZXQgYW5kIHRoZXJlYnkgdGVsbCB0aGUga2VybmVsIHRoYXQgaXQgc2hvdWxkIGFsbG93IG9yIGRpc2FsbG93Ci0JICBjZXJ0YWluIHR5cGVzIG9mIGRhdGEgdG8gZ2V0IHRocm91Z2ggdGhlIHNvY2tldC4gTGludXggU29ja2V0Ci0JICBGaWx0ZXJpbmcgd29ya3Mgb24gYWxsIHNvY2tldCB0eXBlcyBleGNlcHQgVENQIGZvciBub3cuIFNlZSB0aGUgdGV4dAotCSAgZmlsZSBsaW51eC9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZmlsdGVyLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQkgIElmIHVuc3VyZSwgc2F5IE4uCitZb3UgbXVzdCBjb25maWd1cmUgMi4yNi54IGtlcm5lbHMgd2l0aCB0aGUgQ09ORklHX1BBQ0tFVF9NTUFQIG9wdGlvbiBmb3IKK3RoaXMgcHJvdG9jb2wuICAzLnggYW5kIGxhdGVyIGtlcm5lbHMgZG8gbm90IHJlcXVpcmUgdGhhdC4KIAogTm90ZSB0aGF0LCBieSBkZWZhdWx0LCBsaWJwY2FwIHdpbGwsIGlmIGxpYm5sIGlzIHByZXNlbnQsIGJ1aWxkIHdpdGggaXQ7CiBpdCB1c2VzIGxpYm5sIHRvIHN1cHBvcnQgbW9uaXRvciBtb2RlIG9uIG1hYzgwMjExIGRldmljZXMuICBUaGVyZSBpcyBhCkBAIC05NCwxMyArMjksNiBAQAogU3RhdGlzdGljcyByZXBvcnRlZCBieSBwY2FwIGFyZSBwbGF0Zm9ybSBzcGVjaWZpYy4gIFRoZSBzdGF0aXN0aWNzCiByZXBvcnRlZCBieSBwY2FwX3N0YXRzIG9uIExpbnV4IGFyZSBhcyBmb2xsb3dzOgogCi0yLjIueAotPT09PT0KLXBzX3JlY3YgICBOdW1iZXIgb2YgcGFja2V0cyB0aGF0IHdlcmUgYWNjZXB0ZWQgYnkgdGhlIHBjYXAgZmlsdGVyCi1wc19kcm9wICAgQWx3YXlzIDAsIHRoaXMgc3RhdGlzdGljIGlzIG5vdCBnYXRoZXJkIG9uIHRoaXMgcGxhdGZvcm0KLQotMi40LngKLT09PT09CiBwc19yZWN2ICAgTnVtYmVyIG9mIHBhY2tldHMgdGhhdCB3ZXJlIGFjY2VwdGVkIGJ5IHRoZSBwY2FwIGZpbHRlcgogcHNfZHJvcCAgIE51bWJlciBvZiBwYWNrZXRzIHRoYXQgaGFkIHBhc3NlZCBmaWx0ZXJpbmcgYnV0IHdlcmUgbm90CiAgICAgICAgICAgcGFzc2VkIG9uIHRvIHBjYXAgZHVlIHRvIHRoaW5ncyBsaWtlIGJ1ZmZlciBzaG9ydGFnZSwgZXRjLgpkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5zZXB0ZWwgYi9kb2MvUkVBRE1FLnNlcHRlbAppbmRleCBmYTJjMGM5Li4yMDNlYzFhIDEwMDY0NAotLS0gYS9kb2MvUkVBRE1FLnNlcHRlbAorKysgYi9kb2MvUkVBRE1FLnNlcHRlbApAQCAtMSw2ICsxLDYgQEAKIFRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb25zIGFwcGx5IGlmIHlvdSBoYXZlIGEgTGludXggcGxhdGZvcm0gYW5kIHdhbnQKIGxpYnBjYXAgdG8gc3VwcG9ydCB0aGUgU2VwdGVsIHJhbmdlIG9mIHBhc3NpdmUgbmV0d29yayBtb25pdG9yaW5nIGNhcmRzCi1mcm9tIEludGVsIChodHRwOi8vd3d3LmludGVsLmNvbSkKK2Zyb20gSW50ZWwgKGh0dHBzOi8vd3d3LmludGVsLmNvbSkKIAogMSkgSW5zdGFsbCBhbmQgYnVpbGQgdGhlIFNlcHRlbCBzb2Z0d2FyZSBkaXN0cmlidXRpb24gYnkgZm9sbG93aW5nIHRoZQogaW5zdHJ1Y3Rpb25zIHN1cHBsaWVkIHdpdGggdGhhdCBwYWNrYWdlLgpkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5zaXRhIGIvZG9jL1JFQURNRS5zaXRhCmluZGV4IDVhNjU4MjIuLjM3MDAzZjUgMTAwNjQ0Ci0tLSBhL2RvYy9SRUFETUUuc2l0YQorKysgYi9kb2MvUkVBRE1FLnNpdGEKQEAgLTEsNiArMSwxMyBAQAorTk9URTogdGhpcyBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZDsgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZG9lc24ndAorc3VwcG9ydCAtLXdpdGgtc2l0YSwgYW5kIENNYWtlIGRvZXNuJ3Qgc3VwcG9ydCBlbmFibGluZyBTSVRBIEFDTgorc3VwcG9ydC4gIFRoZSBjb2RlIGN1cnJlbnRseSBkb2VzIG5vdCBjb21waWxlOyBpdCBzaG91bGQgcmVhbGx5IGJlCitpbXBsZW1lbnRlZCBhcyBhbiBhZGRpdGlvbmFsIHJlbW90ZSBjYXB0dXJlIG1lY2hhbmlzbSwgdXNpbmcgYSBVUkwsCityYXRoZXIgdGhhbiBhcyBhIHNlcGFyYXRlIHZlcnNpb24gb2YgbGlicGNhcCB0aGF0IHN1cHBvcnRzIG9ubHkgdGhlIEFDTgorcHJvZHVjdCwgYnV0IHRoZSBpbmZyYXN0cnVjdHVyZSBmb3IgdGhhdCBpc24ndCB5ZXQgYXZhaWxhYmxlLgorCiBUaGUgZm9sbG93aW5nIGluc3RydWN0aW9ucyBhcHBseSBpZiB5b3UgaGF2ZSBhIExpbnV4IHBsYXRmb3JtIGFuZCB3YW50CiBsaWJwY2FwIHRvIHN1cHBvcnQgdGhlICdBQ04nIFdBTi9MQU4gcm91dGVyIHByb2R1Y3QgZnJvbSBTSVRBCi0oaHR0cDovL3d3dy5zaXRhLmFlcm8pCisoaHR0cHM6Ly93d3cuc2l0YS5hZXJvKQogCiBUaGlzIG1pZ2h0IGFsc28gd29yayBvbiBub24tTGludXggVW5peC1jb21wYXRpYmxlIHBsYXRmb3JtcywgYnV0IHRoYXQKIGhhcyBub3QgYmVlbiB0ZXN0ZWQuCkBAIC0xMiw3ICsxOSw3IEBACiBjYXB0dXJlIHBhY2tldHMgZnJvbSBhIFNJVEEgQUNOIGRldmljZSAoYW5kIHBvdGVudGlhbGx5IG90aGVycykuCiAKIFRvIGVuYWJsZSBpdHMgc3VwcG9ydCB5b3UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGhhcwotYSBjb3JyZWN0IGNvbmZpZ3VyZS5hYyBmaWxlOyB0aGF0IGNhbiBiZSBjcmVhdGVkIGlmIG5lY2Nlc3NheSBieQorYSBjb3JyZWN0IGNvbmZpZ3VyZS5hYyBmaWxlOyB0aGF0IGNhbiBiZSBjcmVhdGVkIGlmIG5lY2Vzc2FyeSBieQogdXNpbmcgdGhlIG5vcm1hbCBhdXRvY29uZiBwcm9jZWR1cmUgb2Y6CiAKIGFjbG9jYWwKZGlmZiAtLWdpdCBhL2V0aGVyZW50LmMgYi9ldGhlcmVudC5jCmluZGV4IDVmNDk5NjEuLjY5ZGE5YTUgMTAwNjQ0Ci0tLSBhL2V0aGVyZW50LmMKKysrIGIvZXRoZXJlbnQuYwpAQCAtMjUsNyArMjUsNiBAQAogCiAjaW5jbHVkZSA8cGNhcC10eXBlcy5oPgogCi0jaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxtZW1vcnkuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtNDUsMTQgKzQ0LDE4IEBACiBzdGF0aWMgaW5saW5lIHVfY2hhcgogeGR0b2kodV9jaGFyIGMpCiB7Ci0JaWYgKGlzZGlnaXQoYykpCisJaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKQogCQlyZXR1cm4gKHVfY2hhcikoYyAtICcwJyk7Ci0JZWxzZSBpZiAoaXNsb3dlcihjKSkKKwllbHNlIGlmIChjID49ICdhJyAmJiBjIDw9ICdmJykKIAkJcmV0dXJuICh1X2NoYXIpKGMgLSAnYScgKyAxMCk7CiAJZWxzZQogCQlyZXR1cm4gKHVfY2hhcikoYyAtICdBJyArIDEwKTsKIH0KIAorLyoKKyAqIFNraXAgbGluZWFyIHdoaXRlIHNwYWNlIChzcGFjZSBhbmQgdGFiKSBhbmQgYW55IENScyBiZWZvcmUgTEYuCisgKiBTdG9wIHdoZW4gd2UgaGl0IGEgbm9uLXdoaXRlLXNwYWNlIGNoYXJhY3RlciBvciBhbiBlbmQtb2YtbGluZSBMRi4KKyAqLwogc3RhdGljIGlubGluZSBpbnQKIHNraXBfc3BhY2UoRklMRSAqZikKIHsKQEAgLTYwLDcgKzYzLDcgQEAKIAogCWRvIHsKIAkJYyA9IGdldGMoZik7Ci0JfSB3aGlsZSAoaXNzcGFjZShjKSAmJiBjICE9ICdcbicpOworCX0gd2hpbGUgKGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09ICdccicpOwogCiAJcmV0dXJuIGM7CiB9CkBAIC05Nyw3ICsxMDAsNyBAQAogCiAJCS8qIElmIHRoaXMgaXMgYSBjb21tZW50LCBvciBmaXJzdCB0aGluZyBvbiBsaW5lCiAJCSAgIGNhbm5vdCBiZSBFdGhlcm5ldCBhZGRyZXNzLCBza2lwIHRoZSBsaW5lLiAqLwotCQlpZiAoIWlzeGRpZ2l0KGMpKSB7CisJCWlmICghUENBUF9JU1hESUdJVChjKSkgewogCQkJYyA9IHNraXBfbGluZShmcCk7CiAJCQlpZiAoYyA9PSBFT0YpCiAJCQkJcmV0dXJuIChOVUxMKTsKQEAgLTExMCw3ICsxMTMsNyBAQAogCQkJYyA9IGdldGMoZnApOwogCQkJaWYgKGMgPT0gRU9GKQogCQkJCXJldHVybiAoTlVMTCk7Ci0JCQlpZiAoaXN4ZGlnaXQoYykpIHsKKwkJCWlmIChQQ0FQX0lTWERJR0lUKGMpKSB7CiAJCQkJZCA8PD0gNDsKIAkJCQlkIHw9IHhkdG9pKCh1X2NoYXIpYyk7CiAJCQkJYyA9IGdldGMoZnApOwpAQCAtMTI2LDcgKzEyOSw3IEBACiAJCX0KIAogCQkvKiBNdXN0IGJlIHdoaXRlc3BhY2UgKi8KLQkJaWYgKCFpc3NwYWNlKGMpKSB7CisJCWlmIChjICE9ICcgJyAmJiBjICE9ICdcdCcgJiYgYyAhPSAnXHInICYmIGMgIT0gJ1xuJykgewogCQkJYyA9IHNraXBfbGluZShmcCk7CiAJCQlpZiAoYyA9PSBFT0YpCiAJCQkJcmV0dXJuIChOVUxMKTsKQEAgLTE1Niw3ICsxNTksOCBAQAogCQkJYyA9IGdldGMoZnApOwogCQkJaWYgKGMgPT0gRU9GKQogCQkJCXJldHVybiAoTlVMTCk7Ci0JCX0gd2hpbGUgKCFpc3NwYWNlKGMpICYmIC0tbmFtZXNpemUgIT0gMCk7CisJCX0gd2hpbGUgKGMgIT0gJyAnICYmIGMgIT0gJ1x0JyAmJiBjICE9ICdccicgJiYgYyAhPSAnXG4nCisJCSAgICAmJiAtLW5hbWVzaXplICE9IDApOwogCQkqYnAgPSAnXDAnOwogCiAJCS8qIEVhdCB0cmFpbGluZyBqdW5rICovCmRpZmYgLS1naXQgYS9ldGhlcnR5cGUuaCBiL2V0aGVydHlwZS5oCmluZGV4IDUxZjYzMDguLmUzNGUwN2IgMTAwNjQ0Ci0tLSBhL2V0aGVydHlwZS5oCisrKyBiL2V0aGVydHlwZS5oCkBAIC0zMiw1OCArMzIsNTggQEAKICAqLwogCiAjaWZuZGVmIEVUSEVSVFlQRV9QVVAKLSNkZWZpbmUJRVRIRVJUWVBFX1BVUAkJMHgwMjAwCS8qIFBVUCBwcm90b2NvbCAqLworI2RlZmluZSBFVEhFUlRZUEVfUFVQCQkweDAyMDAJLyogUFVQIHByb3RvY29sICovCiAjZW5kaWYKICNpZm5kZWYgRVRIRVJUWVBFX0lQCi0jZGVmaW5lCUVUSEVSVFlQRV9JUAkJMHgwODAwCS8qIElQIHByb3RvY29sICovCisjZGVmaW5lIEVUSEVSVFlQRV9JUAkJMHgwODAwCS8qIElQIHByb3RvY29sICovCiAjZW5kaWYKICNpZm5kZWYgRVRIRVJUWVBFX0FSUAogI2RlZmluZSBFVEhFUlRZUEVfQVJQCQkweDA4MDYJLyogQWRkci4gcmVzb2x1dGlvbiBwcm90b2NvbCAqLwogI2VuZGlmCi0jaWZuZGVmIEVUSEVSVFlQRV9SRVZBUlAKLSNkZWZpbmUgRVRIRVJUWVBFX1JFVkFSUAkweDgwMzUJLyogcmV2ZXJzZSBBZGRyLiByZXNvbHV0aW9uIHByb3RvY29sICovCi0jZW5kaWYKICNpZm5kZWYgRVRIRVJUWVBFX05TCiAjZGVmaW5lIEVUSEVSVFlQRV9OUwkJMHgwNjAwCiAjZW5kaWYKICNpZm5kZWYJRVRIRVJUWVBFX1NQUklURQotI2RlZmluZQlFVEhFUlRZUEVfU1BSSVRFCTB4MDUwMAorI2RlZmluZSBFVEhFUlRZUEVfU1BSSVRFCTB4MDUwMAogI2VuZGlmCiAjaWZuZGVmIEVUSEVSVFlQRV9UUkFJTAogI2RlZmluZSBFVEhFUlRZUEVfVFJBSUwJCTB4MTAwMAogI2VuZGlmCiAjaWZuZGVmCUVUSEVSVFlQRV9NT1BETAotI2RlZmluZQlFVEhFUlRZUEVfTU9QREwJCTB4NjAwMQorI2RlZmluZSBFVEhFUlRZUEVfTU9QREwJCTB4NjAwMQogI2VuZGlmCiAjaWZuZGVmCUVUSEVSVFlQRV9NT1BSQwotI2RlZmluZQlFVEhFUlRZUEVfTU9QUkMJCTB4NjAwMgorI2RlZmluZSBFVEhFUlRZUEVfTU9QUkMJCTB4NjAwMgogI2VuZGlmCiAjaWZuZGVmCUVUSEVSVFlQRV9ETgotI2RlZmluZQlFVEhFUlRZUEVfRE4JCTB4NjAwMworI2RlZmluZSBFVEhFUlRZUEVfRE4JCTB4NjAwMwogI2VuZGlmCiAjaWZuZGVmCUVUSEVSVFlQRV9MQVQKLSNkZWZpbmUJRVRIRVJUWVBFX0xBVAkJMHg2MDA0CisjZGVmaW5lIEVUSEVSVFlQRV9MQVQJCTB4NjAwNAogI2VuZGlmCiAjaWZuZGVmIEVUSEVSVFlQRV9TQ0EKICNkZWZpbmUgRVRIRVJUWVBFX1NDQQkJMHg2MDA3CiAjZW5kaWYKKyNpZm5kZWYgRVRIRVJUWVBFX1RFQgorI2RlZmluZSBFVEhFUlRZUEVfVEVCCQkweDY1NTgKKyNlbmRpZgogI2lmbmRlZiBFVEhFUlRZUEVfUkVWQVJQCi0jZGVmaW5lIEVUSEVSVFlQRV9SRVZBUlAJMHg4MDM1CisjZGVmaW5lIEVUSEVSVFlQRV9SRVZBUlAJMHg4MDM1CS8qIHJldmVyc2UgQWRkci4gcmVzb2x1dGlvbiBwcm90b2NvbCAqLwogI2VuZGlmCiAjaWZuZGVmCUVUSEVSVFlQRV9MQU5CUklER0UKLSNkZWZpbmUJRVRIRVJUWVBFX0xBTkJSSURHRQkweDgwMzgKKyNkZWZpbmUgRVRIRVJUWVBFX0xBTkJSSURHRQkweDgwMzgKICNlbmRpZgogI2lmbmRlZglFVEhFUlRZUEVfREVDRE5TCi0jZGVmaW5lCUVUSEVSVFlQRV9ERUNETlMJMHg4MDNjCisjZGVmaW5lIEVUSEVSVFlQRV9ERUNETlMJMHg4MDNjCiAjZW5kaWYKICNpZm5kZWYJRVRIRVJUWVBFX0RFQ0RUUwotI2RlZmluZQlFVEhFUlRZUEVfREVDRFRTCTB4ODAzZQorI2RlZmluZSBFVEhFUlRZUEVfREVDRFRTCTB4ODAzZQogI2VuZGlmCiAjaWZuZGVmCUVUSEVSVFlQRV9WRVhQCi0jZGVmaW5lCUVUSEVSVFlQRV9WRVhQCQkweDgwNWIKKyNkZWZpbmUgRVRIRVJUWVBFX1ZFWFAJCTB4ODA1YgogI2VuZGlmCiAjaWZuZGVmCUVUSEVSVFlQRV9WUFJPRAotI2RlZmluZQlFVEhFUlRZUEVfVlBST0QJCTB4ODA1YworI2RlZmluZSBFVEhFUlRZUEVfVlBST0QJCTB4ODA1YwogI2VuZGlmCiAjaWZuZGVmIEVUSEVSVFlQRV9BVEFMSwogI2RlZmluZSBFVEhFUlRZUEVfQVRBTEsJCTB4ODA5YgpAQCAtMTAxLDEwICsxMDEsMTAgQEAKICNkZWZpbmUgRVRIRVJUWVBFX0lQVjYJCTB4ODZkZAogI2VuZGlmCiAjaWZuZGVmIEVUSEVSVFlQRV9NUExTCi0jZGVmaW5lIEVUSEVSVFlQRV9NUExTICAgICAgICAgIDB4ODg0NworI2RlZmluZSBFVEhFUlRZUEVfTVBMUwkJMHg4ODQ3CiAjZW5kaWYKICNpZm5kZWYgRVRIRVJUWVBFX01QTFNfTVVMVEkKLSNkZWZpbmUgRVRIRVJUWVBFX01QTFNfTVVMVEkgICAgMHg4ODQ4CisjZGVmaW5lIEVUSEVSVFlQRV9NUExTX01VTFRJCTB4ODg0OAogI2VuZGlmCiAjaWZuZGVmIEVUSEVSVFlQRV9QUFBPRUQKICNkZWZpbmUgRVRIRVJUWVBFX1BQUE9FRAkweDg4NjMKQEAgLTExNiw3ICsxMTYsNyBAQAogI2RlZmluZSBFVEhFUlRZUEVfODAyMUFECTB4ODhhOAogI2VuZGlmCiAjaWZuZGVmCUVUSEVSVFlQRV9MT09QQkFDSwotI2RlZmluZQlFVEhFUlRZUEVfTE9PUEJBQ0sJMHg5MDAwCisjZGVmaW5lIEVUSEVSVFlQRV9MT09QQkFDSwkweDkwMDAKICNlbmRpZgogI2lmbmRlZiBFVEhFUlRZUEVfODAyMVFJTlEKICNkZWZpbmUgRVRIRVJUWVBFXzgwMjFRSU5RCTB4OTEwMApkaWZmIC0tZ2l0IGEvZXh0cmFjdC5oIGIvZXh0cmFjdC5oCmluZGV4IGFhM2ZmOTkuLmU3NzZhOWUgMTAwNjQ0Ci0tLSBhL2V4dHJhY3QuaAorKysgYi9leHRyYWN0LmgKQEAgLTI1LDE1ICsyNSw5NCBAQAogCiAjaW5jbHVkZSA8cGNhcC9wY2FwLWludHR5cGVzLmg+CiAjaW5jbHVkZSA8cGNhcC9jb21waWxlci10ZXN0cy5oPgorI2luY2x1ZGUgInBvcnRhYmlsaXR5LmgiCiAKIC8qCi0gKiBNYWNyb3MgdG8gZXh0cmFjdCBwb3NzaWJseS11bmFsaWduZWQgYmlnLWVuZGlhbiBpbnRlZ3JhbCB2YWx1ZXMuCisgKiBJZiB3ZSBoYXZlIHZlcnNpb25zIG9mIEdDQyBvciBDbGFuZyB0aGF0IHN1cHBvcnQgYW4gX19hdHRyaWJ1dGVfXworICogdG8gc2F5ICJpZiB3ZSdyZSBidWlsZGluZyB3aXRoIHVuc2lnbmVkIGJlaGF2aW9yIHNhbml0aXphdGlvbiwKKyAqIGRvbid0IGNvbXBsYWluIGFib3V0IHVuZGVmaW5lZCBiZWhhdmlvciBpbiB0aGlzIGZ1bmN0aW9uIiwgd2UKKyAqIGxhYmVsIHRoZXNlIGZ1bmN0aW9ucyB3aXRoIHRoYXQgYXR0cmlidXRlIC0gd2UgKmtub3cqIGl0J3MgdW5kZWZpbmVkCisgKiBpbiB0aGUgQyBzdGFuZGFyZCwgYnV0IHdlICphbHNvKiBrbm93IGl0IGRvZXMgd2hhdCB3ZSB3YW50IHdpdGgKKyAqIHRoZSBJU0Egd2UncmUgdGFyZ2V0aW5nIGFuZCB0aGUgY29tcGlsZXIgd2UncmUgdXNpbmcuCisgKgorICogRm9yIEdDQyA0LjkuMCBhbmQgbGF0ZXIsIHdlIHVzZSBfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZV91bmRlZmluZWQpKTsKKyAqIHByZS01LjAgR0NDIGRvZXNuJ3QgaGF2ZSBfX2hhc19hdHRyaWJ1dGUsIGFuZCBJJ20gbm90IHN1cmUgd2hldGhlcgorICogR0NDIG9yIENsYW5nIGZpcnN0IGhhZCBfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZShYWFgpKS4KKyAqCisgKiBGb3IgQ2xhbmcsIHdlIGNoZWNrIGZvciBfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZShYWFgpKSB3aXRoCisgKiBfX2hhc19hdHRyaWJ1dGUsIGFzIHRoZXJlIGFyZSB2ZXJzaW9ucyBvZiBDbGFuZyB0aGF0IHN1cHBvcnQKKyAqIF9fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJ1bmRlZmluZWQiKSkgYnV0IGRvbid0IHN1cHBvcnQKKyAqIF9fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplX3VuZGVmaW5lZCkpLgorICoKKyAqIFdlIGRlZmluZSB0aGlzIGhlcmUsIHJhdGhlciB0aGFuIGluIGZ1bmNhdHRycy5oLCBiZWNhdXNlIHdlCisgKiBvbmx5IHdhbnQgaXQgdXNlZCBoZXJlLCB3ZSBkb24ndCB3YW50IGl0IHRvIGJlIGJyb2FkbHkgdXNlZC4KKyAqIChBbnkgcHJpbnRlciB3aWxsIGdldCB0aGlzIGRlZmluZWQsIGJ1dCB0aGlzIHNob3VsZCBhdCBsZWFzdAorICogbWFrZSBpdCBoYXJkZXIgZm9yIHBlb3BsZSB0byBmaW5kLikKICAqLwotI2lmZGVmIExCTF9BTElHTgorI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoX19HTlVDX18gKiAxMDAgKyBfX0dOVUNfTUlOT1JfXykgPj0gNDA5KQorI2RlZmluZSBVTkFMSUdORURfT0sJX19hdHRyaWJ1dGVfXygobm9fc2FuaXRpemVfdW5kZWZpbmVkKSkKKyNlbGlmIF9faGFzX2F0dHJpYnV0ZShub19zYW5pdGl6ZSkKKyNkZWZpbmUgVU5BTElHTkVEX09LCV9fYXR0cmlidXRlX18oKG5vX3Nhbml0aXplKCJ1bmRlZmluZWQiKSkpCisjZWxzZQorI2RlZmluZSBVTkFMSUdORURfT0sKKyNlbmRpZgorCisjaWYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX01fSVg4NikgfHwgZGVmaW5lZChfX1g4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX01fWDY0KSkgfHwgXAorICAgIChkZWZpbmVkKF9fbTY4a19fKSAmJiAoIWRlZmluZWQoX19tYzY4MDAwX18pICYmICFkZWZpbmVkKF9fbWM2ODAxMF9fKSkpIHx8IFwKKyAgICAoZGVmaW5lZChfX3BwY19fKSB8fCBkZWZpbmVkKF9fcHBjNjRfXykgfHwgZGVmaW5lZChfTV9QUEMpIHx8IGRlZmluZWQoX0FSQ0hfUFBDKSB8fCBkZWZpbmVkKF9BUkNIX1BQQzY0KSkgfHwgXAorICAgIChkZWZpbmVkKF9fczM5MF9fKSB8fCBkZWZpbmVkKF9fczM5MHhfXykgfHwgZGVmaW5lZChfX3phcmNoX18pKQogLyoKLSAqIFRoZSBwcm9jZXNzb3IgZG9lc24ndCBuYXRpdmVseSBoYW5kbGUgdW5hbGlnbmVkIGxvYWRzLgorICogVGhlIHByb2Nlc3NvciBuYXRpdmVseSBoYW5kbGVzIHVuYWxpZ25lZCBsb2Fkcywgc28gd2UgY2FuIGp1c3QKKyAqIGNhc3QgdGhlIHBvaW50ZXIgYW5kIGZldGNoIHRocm91Z2ggaXQuCisgKgorICogWFhYIC0gYXJlIHRob3NlIGFsbCB0aGUgeDg2IHRlc3RzIHdlIG5lZWQ/CisgKiBYWFggLSBhcmUgdGhvc2UgdGhlIG9ubHkgNjhrIHRlc3RzIHdlIG5lZWQgbm90IHRvIGdlbmVyYXRlZAorICogdW5hbGlnbmVkIGFjY2Vzc2VzIGlmIHRoZSB0YXJnZXQgaXMgdGhlIDY4MDAwIG9yIDY4MDEwPworICogWFhYIC0gYXJlIHRoZXJlIGFueSB0ZXN0cyB3ZSBkb24ndCBuZWVkLCBiZWNhdXNlIHNvbWUgZGVmaW5pdGlvbnMgYXJlIGZvcgorICogY29tcGlsZXJzIHRoYXQgYWxzbyBwcmVkZWZpbmUgdGhlIEdDQyBzeW1ib2xzPworICogWFhYIC0gZG8gd2UgbmVlZCB0byB0ZXN0IGZvciBib3RoIDMyLWJpdCBhbmQgNjQtYml0IHZlcnNpb25zIG9mIHRob3NlCisgKiBhcmNoaXRlY3R1cmVzIGluIGFsbCBjYXNlcz8KICAqLwotI2lmIFBDQVBfSVNfQVRfTEVBU1RfR05VQ19WRVJTSU9OKDIsMCkgJiYgXAorVU5BTElHTkVEX09LIHN0YXRpYyBpbmxpbmUgdWludDE2X3QKK0VYVFJBQ1RfQkVfVV8yKGNvbnN0IHZvaWQgKnApCit7CisJcmV0dXJuICgodWludDE2X3QpbnRvaHMoKihjb25zdCB1aW50MTZfdCAqKShwKSkpOworfQorCitVTkFMSUdORURfT0sgc3RhdGljIGlubGluZSBpbnQxNl90CitFWFRSQUNUX0JFX1NfMihjb25zdCB2b2lkICpwKQoreworCXJldHVybiAoKGludDE2X3QpbnRvaHMoKihjb25zdCBpbnQxNl90ICopKHApKSk7Cit9CisKK1VOQUxJR05FRF9PSyBzdGF0aWMgaW5saW5lIHVpbnQzMl90CitFWFRSQUNUX0JFX1VfNChjb25zdCB2b2lkICpwKQoreworCXJldHVybiAoKHVpbnQzMl90KW50b2hsKCooY29uc3QgdWludDMyX3QgKikocCkpKTsKK30KKworVU5BTElHTkVEX09LIHN0YXRpYyBpbmxpbmUgaW50MzJfdAorRVhUUkFDVF9CRV9TXzQoY29uc3Qgdm9pZCAqcCkKK3sKKwlyZXR1cm4gKChpbnQzMl90KW50b2hsKCooY29uc3QgaW50MzJfdCAqKShwKSkpOworfQorCitVTkFMSUdORURfT0sgc3RhdGljIGlubGluZSB1aW50NjRfdAorRVhUUkFDVF9CRV9VXzgoY29uc3Qgdm9pZCAqcCkKK3sKKwlyZXR1cm4gKCh1aW50NjRfdCkoKCh1aW50NjRfdCludG9obCgqKChjb25zdCB1aW50MzJfdCAqKShwKSArIDApKSkgPDwgMzIgfAorCQkoKHVpbnQ2NF90KW50b2hsKCooKGNvbnN0IHVpbnQzMl90ICopKHApICsgMSkpKSA8PCAwKSk7CisKK30KKworVU5BTElHTkVEX09LIHN0YXRpYyBpbmxpbmUgaW50NjRfdAorRVhUUkFDVF9CRV9TXzgoY29uc3Qgdm9pZCAqcCkKK3sKKwlyZXR1cm4gKChpbnQ2NF90KSgoKGludDY0X3QpbnRvaGwoKigoY29uc3QgdWludDMyX3QgKikocCkgKyAwKSkpIDw8IDMyIHwKKwkJKCh1aW50NjRfdCludG9obCgqKChjb25zdCB1aW50MzJfdCAqKShwKSArIDEpKSkgPDwgMCkpOworCit9CisjZWxpZiBQQ0FQX0lTX0FUX0xFQVNUX0dOVUNfVkVSU0lPTigyLDApICYmIFwKICAgICAoZGVmaW5lZChfX2FscGhhKSB8fCBkZWZpbmVkKF9fYWxwaGFfXykgfHwgXAogICAgICBkZWZpbmVkKF9fbWlwcykgfHwgZGVmaW5lZChfX21pcHNfXykpCiAvKgpAQCAtNTIsNyArMTMxLDcgQEAKICAqCiAgKiBXZSBkbyB0aGlzIGluIGNhc2UgdGhlIGNvbXBpbGVyIGNhbiBnZW5lcmF0ZSBjb2RlIHVzaW5nIHRob3NlCiAgKiBpbnN0cnVjdGlvbnMgdG8gZG8gYW4gdW5hbGlnbmVkIGxvYWQgYW5kIHBhc3Mgc3R1ZmYgdG8gIm50b2hzKCkiIG9yCi0gKiAibnRvaGwoKSIsIHdoaWNoIG1pZ2h0IGJlIGJldHRlciB0aGFuIHRoYW4gdGhlIGNvZGUgdG8gZmV0Y2ggdGhlCisgKiAibnRvaGwoKSIsIHdoaWNoIG1pZ2h0IGJlIGJldHRlciB0aGFuIHRoZSBjb2RlIHRvIGZldGNoIHRoZQogICogYnl0ZXMgb25lIGF0IGEgdGltZSBhbmQgYXNzZW1ibGUgdGhlbS4gIChUaGF0IG1pZ2h0IG5vdCBiZSB0aGUKICAqIGNhc2Ugb24gYSBsaXR0bGUtZW5kaWFuIHBsYXRmb3JtLCBzdWNoIGFzIERFQydzIE1JUFMgbWFjaGluZXMgYW5kCiAgKiBBbHBoYSBtYWNoaW5lcywgd2hlcmUgIm50b2hzKCkiIGFuZCAibnRvaGwoKSIgbWlnaHQgbm90IGJlIGRvbmUKQEAgLTkzLDQ1ICsxNzIsOTAgQEAKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdW5hbGlnbmVkX3VpbnQxNl90OwogCiB0eXBlZGVmIHN0cnVjdCB7CisJaW50MTZfdAkJdmFsOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB1bmFsaWduZWRfaW50MTZfdDsKKwordHlwZWRlZiBzdHJ1Y3QgewogCXVpbnQzMl90CXZhbDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdW5hbGlnbmVkX3VpbnQzMl90OwogCi1zdGF0aWMgaW5saW5lIHVpbnQxNl90Ci1FWFRSQUNUXzE2QklUUyhjb25zdCB2b2lkICpwKQordHlwZWRlZiBzdHJ1Y3QgeworCWludDMyX3QJCXZhbDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdW5hbGlnbmVkX2ludDMyX3Q7CisKK1VOQUxJR05FRF9PSyBzdGF0aWMgaW5saW5lIHVpbnQxNl90CitFWFRSQUNUX0JFX1VfMihjb25zdCB2b2lkICpwKQogewogCXJldHVybiAoKHVpbnQxNl90KW50b2hzKCgoY29uc3QgdW5hbGlnbmVkX3VpbnQxNl90ICopKHApKS0+dmFsKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdWludDMyX3QKLUVYVFJBQ1RfMzJCSVRTKGNvbnN0IHZvaWQgKnApCitVTkFMSUdORURfT0sgc3RhdGljIGlubGluZSBpbnQxNl90CitFWFRSQUNUX0JFX1NfMihjb25zdCB2b2lkICpwKQoreworCXJldHVybiAoKGludDE2X3QpbnRvaHMoKChjb25zdCB1bmFsaWduZWRfaW50MTZfdCAqKShwKSktPnZhbCkpOworfQorCitVTkFMSUdORURfT0sgc3RhdGljIGlubGluZSB1aW50MzJfdAorRVhUUkFDVF9CRV9VXzQoY29uc3Qgdm9pZCAqcCkKIHsKIAlyZXR1cm4gKCh1aW50MzJfdCludG9obCgoKGNvbnN0IHVuYWxpZ25lZF91aW50MzJfdCAqKShwKSktPnZhbCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHVpbnQ2NF90Ci1FWFRSQUNUXzY0QklUUyhjb25zdCB2b2lkICpwKQorVU5BTElHTkVEX09LIHN0YXRpYyBpbmxpbmUgaW50MzJfdAorRVhUUkFDVF9CRV9TXzQoY29uc3Qgdm9pZCAqcCkKIHsKLQlyZXR1cm4gKCh1aW50NjRfdCkoKCh1aW50NjRfdCludG9obCgoKGNvbnN0IHVuYWxpZ25lZF91aW50MzJfdCAqKShwKSArIDApLT52YWwpKSA8PCAzMiB8IFwKKwlyZXR1cm4gKChpbnQzMl90KW50b2hsKCgoY29uc3QgdW5hbGlnbmVkX2ludDMyX3QgKikocCkpLT52YWwpKTsKK30KKworVU5BTElHTkVEX09LIHN0YXRpYyBpbmxpbmUgdWludDY0X3QKK0VYVFJBQ1RfQkVfVV84KGNvbnN0IHZvaWQgKnApCit7CisJcmV0dXJuICgodWludDY0X3QpKCgodWludDY0X3QpbnRvaGwoKChjb25zdCB1bmFsaWduZWRfdWludDMyX3QgKikocCkgKyAwKS0+dmFsKSkgPDwgMzIgfAogCQkoKHVpbnQ2NF90KW50b2hsKCgoY29uc3QgdW5hbGlnbmVkX3VpbnQzMl90ICopKHApICsgMSktPnZhbCkpIDw8IDApKTsKIH0KIAotI2Vsc2UgLyogaGF2ZSB0byBkbyBpdCBhIGJ5dGUgYXQgYSB0aW1lICovCitVTkFMSUdORURfT0sgc3RhdGljIGlubGluZSBpbnQ2NF90CitFWFRSQUNUX0JFX1NfOChjb25zdCB2b2lkICpwKQoreworCXJldHVybiAoKGludDY0X3QpKCgodWludDY0X3QpbnRvaGwoKChjb25zdCB1bmFsaWduZWRfdWludDMyX3QgKikocCkgKyAwKS0+dmFsKSkgPDwgMzIgfAorCQkoKHVpbnQ2NF90KW50b2hsKCgoY29uc3QgdW5hbGlnbmVkX3VpbnQzMl90ICopKHApICsgMSktPnZhbCkpIDw8IDApKTsKK30KKyNlbHNlCiAvKgotICogVGhpcyBpc24ndCBhIEdDQy1jb21wYXRpYmxlIGNvbXBpbGVyLCB3ZSBkb24ndCBoYXZlIF9fYXR0cmlidXRlX18sCisgKiBUaGlzIGFyY2hpdGVjdHVyZSBkb2Vzbid0IG5hdGl2ZWx5IHN1cHBvcnQgdW5hbGlnbmVkIGxvYWRzLCBhbmQgZWl0aGVyCisgKiB0aGlzIGlzbid0IGEgR0NDLWNvbXBhdGlibGUgY29tcGlsZXIsIHdlIGRvbid0IGhhdmUgX19hdHRyaWJ1dGVfXywKICAqIG9yIHdlIGRvIGJ1dCB3ZSBkb24ndCBrbm93IG9mIGFueSBiZXR0ZXIgd2F5IHdpdGggdGhpcyBpbnN0cnVjdGlvbgogICogc2V0IHRvIGRvIHVuYWxpZ25lZCBsb2Fkcywgc28gZG8gdW5hbGlnbmVkIGxvYWRzIG9mIGJpZy1lbmRpYW4KICAqIHF1YW50aXRpZXMgdGhlIGhhcmQgd2F5IC0gZmV0Y2ggdGhlIGJ5dGVzIG9uZSBhdCBhIHRpbWUgYW5kCiAgKiBhc3NlbWJsZSB0aGVtLgorICoKKyAqIFhYWCAtIEFSTSBpcyBhIHNwZWNpYWwgY2FzZS4gIEFSTXYxIHRocm91Z2ggQVJNdjUgZGlkbid0IHN1cHBvcnkKKyAqIHVuYWxpZ25lZCBsb2FkczsgQVJNdjYgYW5kIGxhdGVyIHN1cHBvcnQgaXQgKmJ1dCogaGF2ZSBhIGJpdCBpbgorICogdGhlIHN5c3RlbSBjb250cm9sIHJlZ2lzdGVyIHRoYXQgdGhlIE9TIGNhbiBzZXQgYW5kIHRoYXQgY2F1c2VzCisgKiB1bmFsaWduZWQgbG9hZHMgdG8gZmF1bHQgcmF0aGVyIHRoYW4gc3VjY2VlZGluZy4KKyAqCisgKiBBdCBsZWFzdCBzb21lIE9TZXMgbWF5IHNldCB0aGF0IGZsYWcsIHNvIHdlIGRvICpub3QqIHRyZWF0IEFSTQorICogYXMgc3VwcG9ydGluZyB1bmFsaWduZWQgbG9hZHMuICBJZiB5b3VyIE9TIHN1cHBvcnRzIHRoZW0gb24gQVJNLAorICogYW5kIHlvdSB3YW50IHRvIHVzZSB0aGVtLCBwbGVhc2UgdXBkYXRlIHRoZSB0ZXN0cyBpbiB0aGUgI2lmIGFib3ZlCisgKiB0byBjaGVjayBmb3IgQVJNICphbmQqIGZvciB5b3VyIE9TLgogICovCi0jZGVmaW5lIEVYVFJBQ1RfMTZCSVRTKHApIFwKKyNkZWZpbmUgRVhUUkFDVF9CRV9VXzIocCkgXAogCSgodWludDE2X3QpKCgodWludDE2X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAwKSkgPDwgOCkgfCBcCiAJICAgICAgICAgICAgKCh1aW50MTZfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDEpKSA8PCAwKSkpCi0jZGVmaW5lIEVYVFJBQ1RfMzJCSVRTKHApIFwKKyNkZWZpbmUgRVhUUkFDVF9CRV9TXzIocCkgXAorCSgoaW50MTZfdCkoKCh1aW50MTZfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDApKSA8PCA4KSB8IFwKKwkgICAgICAgICAgICgodWludDE2X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAxKSkgPDwgMCkpKQorI2RlZmluZSBFWFRSQUNUX0JFX1VfNChwKSBcCiAJKCh1aW50MzJfdCkoKCh1aW50MzJfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDApKSA8PCAyNCkgfCBcCiAJICAgICAgICAgICAgKCh1aW50MzJfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDEpKSA8PCAxNikgfCBcCiAJICAgICAgICAgICAgKCh1aW50MzJfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDIpKSA8PCA4KSB8IFwKIAkgICAgICAgICAgICAoKHVpbnQzMl90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMykpIDw8IDApKSkKLSNkZWZpbmUgRVhUUkFDVF82NEJJVFMocCkgXAorI2RlZmluZSBFWFRSQUNUX0JFX1NfNChwKSBcCisJKChpbnQzMl90KSgoKHVpbnQzMl90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMCkpIDw8IDI0KSB8IFwKKwkgICAgICAgICAgICgodWludDMyX3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAxKSkgPDwgMTYpIHwgXAorCSAgICAgICAgICAgKCh1aW50MzJfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDIpKSA8PCA4KSB8IFwKKwkgICAgICAgICAgICgodWludDMyX3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAzKSkgPDwgMCkpKQorI2RlZmluZSBFWFRSQUNUX0JFX1VfOChwKSBcCiAJKCh1aW50NjRfdCkoKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDApKSA8PCA1NikgfCBcCiAJICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDEpKSA8PCA0OCkgfCBcCiAJICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDIpKSA8PCA0MCkgfCBcCkBAIC0xNDAsNDcgKzI2NCw2NyBAQAogCSAgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyA1KSkgPDwgMTYpIHwgXAogCSAgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyA2KSkgPDwgOCkgfCBcCiAJICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDcpKSA8PCAwKSkpCi0jZW5kaWYgLyogbXVzdCBzcGVjaWFsLWNhc2UgdW5hbGlnbmVkIGFjY2Vzc2VzICovCi0jZWxzZSAvKiBMQkxfQUxJR04gKi8KKyNkZWZpbmUgRVhUUkFDVF9CRV9TXzgocCkgXAorCSgoaW50NjRfdCkoKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDApKSA8PCA1NikgfCBcCisJICAgICAgICAgICAoKHVpbnQ2NF90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMSkpIDw8IDQ4KSB8IFwKKwkgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAyKSkgPDwgNDApIHwgXAorCSAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDMpKSA8PCAzMikgfCBcCisJICAgICAgICAgICAoKHVpbnQ2NF90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgNCkpIDw8IDI0KSB8IFwKKwkgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyA1KSkgPDwgMTYpIHwgXAorCSAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDYpKSA8PCA4KSB8IFwKKwkgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyA3KSkgPDwgMCkpKQorCiAvKgotICogVGhlIHByb2Nlc3NvciBuYXRpdmVseSBoYW5kbGVzIHVuYWxpZ25lZCBsb2Fkcywgc28gd2UgY2FuIGp1c3QKLSAqIGNhc3QgdGhlIHBvaW50ZXIgYW5kIGZldGNoIHRocm91Z2ggaXQuCisgKiBFeHRyYWN0IGFuIElQdjQgYWRkcmVzcywgd2hpY2ggaXMgaW4gbmV0d29yayBieXRlIG9yZGVyLCBhbmQgbm90CisgKiBuZWNlc3NhcmlseSBhbGlnbmVkLCBhbmQgcHJvdmlkZSB0aGUgcmVzdWx0IGluIGhvc3QgYnl0ZSBvcmRlci4KICAqLwotc3RhdGljIGlubGluZSB1aW50MTZfdAotRVhUUkFDVF8xNkJJVFMoY29uc3Qgdm9pZCAqcCkKLXsKLQlyZXR1cm4gKCh1aW50MTZfdCludG9ocygqKGNvbnN0IHVpbnQxNl90ICopKHApKSk7Ci19CisjZGVmaW5lIEVYVFJBQ1RfSVBWNF9UT19IT1NUX09SREVSKHApIFwKKwkoKHVpbnQzMl90KSgoKHVpbnQzMl90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMCkpIDw8IDI0KSB8IFwKKwkgICAgICAgICAgICAoKHVpbnQzMl90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMSkpIDw8IDE2KSB8IFwKKwkgICAgICAgICAgICAoKHVpbnQzMl90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMikpIDw8IDgpIHwgXAorCSAgICAgICAgICAgICgodWludDMyX3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAzKSkgPDwgMCkpKQorI2VuZGlmIC8qIHVuYWxpZ25lZCBhY2Nlc3MgY2hlY2tzICovCiAKLXN0YXRpYyBpbmxpbmUgdWludDMyX3QKLUVYVFJBQ1RfMzJCSVRTKGNvbnN0IHZvaWQgKnApCi17Ci0JcmV0dXJuICgodWludDMyX3QpbnRvaGwoKihjb25zdCB1aW50MzJfdCAqKShwKSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQ2NF90Ci1FWFRSQUNUXzY0QklUUyhjb25zdCB2b2lkICpwKQotewotCXJldHVybiAoKHVpbnQ2NF90KSgoKHVpbnQ2NF90KW50b2hsKCooKGNvbnN0IHVpbnQzMl90ICopKHApICsgMCkpKSA8PCAzMiB8IFwKLQkJKCh1aW50NjRfdCludG9obCgqKChjb25zdCB1aW50MzJfdCAqKShwKSArIDEpKSkgPDwgMCkpOwotCi19Ci0KLSNlbmRpZiAvKiBMQkxfQUxJR04gKi8KLQotI2RlZmluZSBFWFRSQUNUXzI0QklUUyhwKSBcCisvKgorICogTm9uLXBvd2VyLW9mLTIgc2l6ZXMuCisgKi8KKyNkZWZpbmUgRVhUUkFDVF9CRV9VXzMocCkgXAogCSgodWludDMyX3QpKCgodWludDMyX3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAwKSkgPDwgMTYpIHwgXAogCSAgICAgICAgICAgICgodWludDMyX3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAxKSkgPDwgOCkgfCBcCiAJICAgICAgICAgICAgKCh1aW50MzJfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDIpKSA8PCAwKSkpCiAKLSNkZWZpbmUgRVhUUkFDVF80MEJJVFMocCkgXAorI2RlZmluZSBFWFRSQUNUX0JFX1NfMyhwKSBcCisJKCgoKigoY29uc3QgdWludDhfdCAqKShwKSArIDApKSAmIDB4ODApID8gXAorCSAgKChpbnQzMl90KSgoKHVpbnQzMl90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMCkpIDw8IDE2KSB8IFwKKwkgICAgICAgICAgICAgKCh1aW50MzJfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDEpKSA8PCA4KSB8IFwKKwkgICAgICAgICAgICAgKCh1aW50MzJfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDIpKSA8PCAwKSkpIDogXAorCSAgKChpbnQzMl90KSgweEZGMDAwMDAwVSB8IFwKKwkgICAgICAgICAgICAgKCh1aW50MzJfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDApKSA8PCAxNikgfCBcCisJICAgICAgICAgICAgICgodWludDMyX3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAxKSkgPDwgOCkgfCBcCisJICAgICAgICAgICAgICgodWludDMyX3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAyKSkgPDwgMCkpKSkKKworI2RlZmluZSBFWFRSQUNUX0JFX1VfNShwKSBcCiAJKCh1aW50NjRfdCkoKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDApKSA8PCAzMikgfCBcCiAJICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDEpKSA8PCAyNCkgfCBcCiAJICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDIpKSA8PCAxNikgfCBcCiAJICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDMpKSA8PCA4KSB8IFwKIAkgICAgICAgICAgICAoKHVpbnQ2NF90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgNCkpIDw8IDApKSkKIAotI2RlZmluZSBFWFRSQUNUXzQ4QklUUyhwKSBcCisjZGVmaW5lIEVYVFJBQ1RfQkVfU181KHApIFwKKwkoKCgqKChjb25zdCB1aW50OF90ICopKHApICsgMCkpICYgMHg4MCkgPyBcCisJICAoKGludDY0X3QpKCgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAwKSkgPDwgMzIpIHwgXAorCSAgICAgICAgICAgICAoKHVpbnQ2NF90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMSkpIDw8IDI0KSB8IFwKKwkgICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDIpKSA8PCAxNikgfCBcCisJICAgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAzKSkgPDwgOCkgfCBcCisJICAgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyA0KSkgPDwgMCkpKSA6IFwKKwkgICgoaW50NjRfdCkoSU5UNjRfVF9DT05TVEFOVCgweEZGRkZGRjAwMDAwMDAwMDBVKSB8IFwKKwkgICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDApKSA8PCAzMikgfCBcCisJICAgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAxKSkgPDwgMjQpIHwgXAorCSAgICAgICAgICAgICAoKHVpbnQ2NF90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMikpIDw8IDE2KSB8IFwKKwkgICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDMpKSA8PCA4KSB8IFwKKwkgICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDQpKSA8PCAwKSkpKQorCisjZGVmaW5lIEVYVFJBQ1RfQkVfVV82KHApIFwKIAkoKHVpbnQ2NF90KSgoKHVpbnQ2NF90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMCkpIDw8IDQwKSB8IFwKIAkgICAgICAgICAgICAoKHVpbnQ2NF90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMSkpIDw8IDMyKSB8IFwKIAkgICAgICAgICAgICAoKHVpbnQ2NF90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMikpIDw8IDI0KSB8IFwKQEAgLTE4OCw3ICszMzIsMjMgQEAKIAkgICAgICAgICAgICAoKHVpbnQ2NF90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgNCkpIDw8IDgpIHwgXAogCSAgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyA1KSkgPDwgMCkpKQogCi0jZGVmaW5lIEVYVFJBQ1RfNTZCSVRTKHApIFwKKyNkZWZpbmUgRVhUUkFDVF9CRV9TXzYocCkgXAorCSgoKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAwKSkgJiAweDgwKSA/IFwKKwkgICAoKGludDY0X3QpKCgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAwKSkgPDwgNDApIHwgXAorCSAgICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDEpKSA8PCAzMikgfCBcCisJICAgICAgICAgICAgICAoKHVpbnQ2NF90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMikpIDw8IDI0KSB8IFwKKwkgICAgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAzKSkgPDwgMTYpIHwgXAorCSAgICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDQpKSA8PCA4KSB8IFwKKwkgICAgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyA1KSkgPDwgMCkpKSA6IFwKKwkgICgoaW50NjRfdCkoSU5UNjRfVF9DT05TVEFOVCgweEZGRkZGRkZGMDAwMDAwMDBVKSB8IFwKKwkgICAgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAwKSkgPDwgNDApIHwgXAorCSAgICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDEpKSA8PCAzMikgfCBcCisJICAgICAgICAgICAgICAoKHVpbnQ2NF90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMikpIDw8IDI0KSB8IFwKKwkgICAgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAzKSkgPDwgMTYpIHwgXAorCSAgICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDQpKSA8PCA4KSB8IFwKKwkgICAgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyA1KSkgPDwgMCkpKSkKKworI2RlZmluZSBFWFRSQUNUX0JFX1VfNyhwKSBcCiAJKCh1aW50NjRfdCkoKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDApKSA8PCA0OCkgfCBcCiAJICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDEpKSA8PCA0MCkgfCBcCiAJICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDIpKSA8PCAzMikgfCBcCkBAIC0xOTcsMjQgKzM1Nyw1MyBAQAogCSAgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyA1KSkgPDwgOCkgfCBcCiAJICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDYpKSA8PCAwKSkpCiAKKyNkZWZpbmUgRVhUUkFDVF9CRV9TXzcocCkgXAorCSgoKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAwKSkgJiAweDgwKSA/IFwKKwkgICgoaW50NjRfdCkoKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDApKSA8PCA0OCkgfCBcCisJICAgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAxKSkgPDwgNDApIHwgXAorCSAgICAgICAgICAgICAoKHVpbnQ2NF90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMikpIDw8IDMyKSB8IFwKKwkgICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDMpKSA8PCAyNCkgfCBcCisJICAgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyA0KSkgPDwgMTYpIHwgXAorCSAgICAgICAgICAgICAoKHVpbnQ2NF90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgNSkpIDw8IDgpIHwgXAorCSAgICAgICAgICAgICAoKHVpbnQ2NF90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgNikpIDw8IDApKSkgOiBcCisJICAgICgoaW50NjRfdCkoSU5UNjRfVF9DT05TVEFOVCgweEZGRkZGRkZGRkYwMDAwMDBVKSB8IFwKKwkgICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDApKSA8PCA0OCkgfCBcCisJICAgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAxKSkgPDwgNDApIHwgXAorCSAgICAgICAgICAgICAoKHVpbnQ2NF90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMikpIDw8IDMyKSB8IFwKKwkgICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDMpKSA8PCAyNCkgfCBcCisJICAgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyA0KSkgPDwgMTYpIHwgXAorCSAgICAgICAgICAgICAoKHVpbnQ2NF90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgNSkpIDw8IDgpIHwgXAorCSAgICAgICAgICAgICAoKHVpbnQ2NF90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgNikpIDw8IDApKSkpCisKIC8qCiAgKiBNYWNyb3MgdG8gZXh0cmFjdCBwb3NzaWJseS11bmFsaWduZWQgbGl0dGxlLWVuZGlhbiBpbnRlZ3JhbCB2YWx1ZXMuCiAgKiBYWFggLSBkbyBsb2FkcyBvbiBsaXR0bGUtZW5kaWFuIG1hY2hpbmVzIHRoYXQgc3VwcG9ydCB1bmFsaWduZWQgbG9hZHM/CiAgKi8KLSNkZWZpbmUgRVhUUkFDVF9MRV84QklUUyhwKSAoKihwKSkKLSNkZWZpbmUgRVhUUkFDVF9MRV8xNkJJVFMocCkgXAorI2RlZmluZSBFWFRSQUNUX0xFX1VfMihwKSBcCiAJKCh1aW50MTZfdCkoKCh1aW50MTZfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDEpKSA8PCA4KSB8IFwKIAkgICAgICAgICAgICAoKHVpbnQxNl90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMCkpIDw8IDApKSkKLSNkZWZpbmUgRVhUUkFDVF9MRV8zMkJJVFMocCkgXAorI2RlZmluZSBFWFRSQUNUX0xFX1NfMihwKSBcCisJKChpbnQxNl90KSgoKHVpbnQxNl90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMSkpIDw8IDgpIHwgXAorCSAgICAgICAgICAgKCh1aW50MTZfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDApKSA8PCAwKSkpCisjZGVmaW5lIEVYVFJBQ1RfTEVfVV80KHApIFwKIAkoKHVpbnQzMl90KSgoKHVpbnQzMl90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMykpIDw8IDI0KSB8IFwKIAkgICAgICAgICAgICAoKHVpbnQzMl90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMikpIDw8IDE2KSB8IFwKIAkgICAgICAgICAgICAoKHVpbnQzMl90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMSkpIDw8IDgpIHwgXAogCSAgICAgICAgICAgICgodWludDMyX3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAwKSkgPDwgMCkpKQotI2RlZmluZSBFWFRSQUNUX0xFXzI0QklUUyhwKSBcCisjZGVmaW5lIEVYVFJBQ1RfTEVfU180KHApIFwKKwkoKGludDMyX3QpKCgodWludDMyX3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAzKSkgPDwgMjQpIHwgXAorCSAgICAgICAgICAgKCh1aW50MzJfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDIpKSA8PCAxNikgfCBcCisJICAgICAgICAgICAoKHVpbnQzMl90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMSkpIDw8IDgpIHwgXAorCSAgICAgICAgICAgKCh1aW50MzJfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDApKSA8PCAwKSkpCisjZGVmaW5lIEVYVFJBQ1RfTEVfVV8zKHApIFwKIAkoKHVpbnQzMl90KSgoKHVpbnQzMl90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMikpIDw8IDE2KSB8IFwKIAkgICAgICAgICAgICAoKHVpbnQzMl90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMSkpIDw8IDgpIHwgXAogCSAgICAgICAgICAgICgodWludDMyX3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAwKSkgPDwgMCkpKQotI2RlZmluZSBFWFRSQUNUX0xFXzY0QklUUyhwKSBcCisjZGVmaW5lIEVYVFJBQ1RfTEVfU18zKHApIFwKKwkoKGludDMyX3QpKCgodWludDMyX3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAyKSkgPDwgMTYpIHwgXAorCSAgICAgICAgICAgKCh1aW50MzJfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDEpKSA8PCA4KSB8IFwKKwkgICAgICAgICAgICgodWludDMyX3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAwKSkgPDwgMCkpKQorI2RlZmluZSBFWFRSQUNUX0xFX1VfOChwKSBcCiAJKCh1aW50NjRfdCkoKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDcpKSA8PCA1NikgfCBcCiAJICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDYpKSA8PCA0OCkgfCBcCiAJICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDUpKSA8PCA0MCkgfCBcCkBAIC0yMjMsMyArNDEyLDEyIEBACiAJICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDIpKSA8PCAxNikgfCBcCiAJICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDEpKSA8PCA4KSB8IFwKIAkgICAgICAgICAgICAoKHVpbnQ2NF90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMCkpIDw8IDApKSkKKyNkZWZpbmUgRVhUUkFDVF9MRV9TXzgocCkgXAorCSgoaW50NjRfdCkoKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDcpKSA8PCA1NikgfCBcCisJICAgICAgICAgICAoKHVpbnQ2NF90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgNikpIDw8IDQ4KSB8IFwKKwkgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyA1KSkgPDwgNDApIHwgXAorCSAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDQpKSA8PCAzMikgfCBcCisJICAgICAgICAgICAoKHVpbnQ2NF90KSgqKChjb25zdCB1aW50OF90ICopKHApICsgMykpIDw8IDI0KSB8IFwKKwkgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAyKSkgPDwgMTYpIHwgXAorCSAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDEpKSA8PCA4KSB8IFwKKwkgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAwKSkgPDwgMCkpKQpkaWZmIC0tZ2l0IGEvZmFkLWdldGFkLmMgYi9mYWQtZ2V0YWQuYwppbmRleCA1MjM2ZmJiLi5iYThmOTc1IDEwMDY0NAotLS0gYS9mYWQtZ2V0YWQuYworKysgYi9mYWQtZ2V0YWQuYwpAQCAtNDIsNyArNDIsNiBAQAogCiAjaW5jbHVkZSA8bmV0L2lmLmg+CiAKLSNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTE5MCw3ICsxODksNyBAQAogCQkJICogV2UgaGF2ZSBhICI6IjsgaXMgaXQgZm9sbG93ZWQgYnkgYSBudW1iZXI/CiAJCQkgKi8KIAkJCXEgPSBwICsgMTsKLQkJCXdoaWxlIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpxKSkKKwkJCXdoaWxlIChQQ0FQX0lTRElHSVQoKnEpKQogCQkJCXErKzsKIAkJCWlmICgqcSA9PSAnXDAnKSB7CiAJCQkJLyoKZGlmZiAtLWdpdCBhL2ZhZC1naWZjLmMgYi9mYWQtZ2lmYy5jCmluZGV4IDZiMTYxMjcuLjg5NDA4NzYgMTAwNjQ0Ci0tLSBhL2ZhZC1naWZjLmMKKysrIGIvZmFkLWdpZmMuYwpAQCAtNDksMTkgKzQ5LDEzIEBACiAjaW5jbHVkZSA8bmV0L2lmLmg+CiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogCi0jaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPG1lbW9yeS5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpZmRlZiBIQVZFX0xJTUlUU19ICiAjaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotI2RlZmluZSBJTlRfTUFYCQkyMTQ3NDgzNjQ3Ci0jZW5kaWYKIAogI2luY2x1ZGUgInBjYXAtaW50LmgiCiAKQEAgLTE3OCw3ICsxNzIsNyBAQAogCQkgKiBEb24ndCBsZXQgdGhlIGJ1ZmZlciBzaXplIGdldCBiaWdnZXIgdGhhbiBJTlRfTUFYLgogCQkgKi8KIAkJaWYgKGJ1Zl9zaXplID4gSU5UX01BWCkgewotCQkJKHZvaWQpcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkodm9pZClzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgICAgImludGVyZmFjZSBpbmZvcm1hdGlvbiByZXF1aXJlcyBtb3JlIHRoYW4gJXUgYnl0ZXMiLAogCQkJICAgIElOVF9NQVgpOwogCQkJKHZvaWQpY2xvc2UoZmQpOwpAQCAtMzk5LDcgKzM5Myw3IEBACiAJCQkgKiBXZSBoYXZlIGEgIjoiOyBpcyBpdCBmb2xsb3dlZCBieSBhIG51bWJlcj8KIAkJCSAqLwogCQkJcSA9IHAgKyAxOwotCQkJd2hpbGUgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKnEpKQorCQkJd2hpbGUgKFBDQVBfSVNESUdJVCgqcSkpCiAJCQkJcSsrOwogCQkJaWYgKCpxID09ICdcMCcpIHsKIAkJCQkvKgpkaWZmIC0tZ2l0IGEvZmFkLWdsaWZjLmMgYi9mYWQtZ2xpZmMuYwppbmRleCBmMjJmNTZkLi42YjI3NWViIDEwMDY0NAotLS0gYS9mYWQtZ2xpZmMuYworKysgYi9mYWQtZ2xpZmMuYwpAQCAtNTAsNyArNTAsNiBAQAogI2luY2x1ZGUgPG5ldC9pZi5oPgogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KIAotI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxtZW1vcnkuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMzExLDcgKzMxMCw3IEBACiAJCQkgKiBXZSBoYXZlIGEgIjoiOyBpcyBpdCBmb2xsb3dlZCBieSBhIG51bWJlcj8KIAkJCSAqLwogCQkJcSA9IHAgKyAxOwotCQkJd2hpbGUgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKnEpKQorCQkJd2hpbGUgKFBDQVBfSVNESUdJVCgqcSkpCiAJCQkJcSsrOwogCQkJaWYgKCpxID09ICdcMCcpIHsKIAkJCQkvKgpkaWZmIC0tZ2l0IGEvZm10dXRpbHMuYyBiL2ZtdHV0aWxzLmMKaW5kZXggZjFhODkwNy4uNWM3ZGRhZCAxMDA2NDQKLS0tIGEvZm10dXRpbHMuYworKysgYi9mbXR1dGlscy5jCkBAIC00NywxMiArNDcsMjIwIEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KIAotI2luY2x1ZGUgPHBjYXAvcGNhcC5oPgorI2luY2x1ZGUgInBjYXAtaW50LmgiCiAKICNpbmNsdWRlICJwb3J0YWJpbGl0eS5oIgogCiAjaW5jbHVkZSAiZm10dXRpbHMuaCIKIAorI2lmZGVmIF9XSU4zMgorI2luY2x1ZGUgImNoYXJjb252LmgiCisjZW5kaWYKKworLyoKKyAqIFNldCB0aGUgZW5jb2RpbmcuCisgKi8KKyNpZmRlZiBfV0lOMzIKKy8qCisgKiBUcnVlIGlmIHdlIHNob3VvbGQgdXNlIFVURi04LgorICovCitzdGF0aWMgaW50IHVzZV91dGZfODsKKwordm9pZAorcGNhcF9mbXRfc2V0X2VuY29kaW5nKHVuc2lnbmVkIGludCBvcHRzKQoreworCWlmIChvcHRzID09IFBDQVBfQ0hBUl9FTkNfVVRGXzgpCisJCXVzZV91dGZfOCA9IDE7Cit9CisjZWxzZQordm9pZAorcGNhcF9mbXRfc2V0X2VuY29kaW5nKHVuc2lnbmVkIGludCBvcHRzIF9VXykKK3sKKwkvKgorCSAqIE5vdGhpbmcgdG8gZG8gaGVyZS4KKwkgKi8KK30KKyNlbmRpZgorCisjaWZkZWYgX1dJTjMyCisvKgorICogQ29udmVydCBhIG51bGwtdGVybWluYXRlZCBVVEYtMTZMRSBzdHJpbmcgdG8gVVRGLTgsIHB1dHRpbmcgaXQgaW50bworICogYSBidWZmZXIgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZCBsb2NhdGlvbiBhbmQgc3RvcHBpbmcgaWYgd2UgZ28KKyAqIHBhc3QgdGhlIHNwZWNpZmllZCBzaXplLiAgVGhpcyB3aWxsIG9ubHkgcHV0IG91dCBjb21wbGV0ZSBVVEYtOAorICogc2VxdWVuY2VzLgorICoKKyAqIFdlIGRvIHRoaXMgb3Vyc2VsdmVzIGJlY2F1c2UgTWljcm9zb2Z0IGRvZXNuJ3Qgb2ZmZXIgYSAiY29udmVydCBhbmQKKyAqIHN0b3AgYXQgYSBVVEYtOCBjaGFyYWN0ZXIgYm91bmRhcnkgaWYgd2UgcnVuIG91dCBvZiBzcGFjZSIgcm91dGluZS4KKyAqLworI2RlZmluZSBJU19MRUFESU5HX1NVUlJPR0FURShjKSBcCisJKChjKSA+PSAweGQ4MDAgJiYgKGMpIDwgMHhkYzAwKQorI2RlZmluZSBJU19UUkFJTElOR19TVVJST0dBVEUoYykgXAorCSgoYykgPj0gMHhkYzAwICYmIChjKSA8IDB4ZTAwMCkKKyNkZWZpbmUgU1VSUk9HQVRFX1ZBTFVFKGxlYWRpbmcsIHRyYWlsaW5nKSBcCisJKCgoKChsZWFkaW5nKSAtIDB4ZDgwMCkgPDwgMTApIHwgKCh0cmFpbGluZykgLSAweGRjMDApKSArIDB4MTAwMDApCisjZGVmaW5lIFJFUExBQ0VNRU5UX0NIQVJBQ1RFUgkweDBGRkZECisKK3N0YXRpYyBjaGFyICoKK3V0Zl8xNmxlX3RvX3V0Zl84X3RydW5jYXRlZChjb25zdCB3Y2hhcl90ICp1dGZfMTYsIGNoYXIgKnV0Zl84LAorICAgIHNpemVfdCB1dGZfOF9sZW4pCit7CisJd2NoYXJfdCBjLCBjMjsKKwl1aW50MzJfdCB1YzsKKworCWlmICh1dGZfOF9sZW4gPT0gMCkgeworCQkvKgorCQkgKiBOb3QgZXZlbiBlbm91Z2ggcm9vbSBmb3IgYSB0cmFpbGluZyAnXDAnLgorCQkgKiBEb24ndCBwdXQgYW55dGhpbmcgaW50byB0aGUgYnVmZmVyLgorCQkgKi8KKwkJcmV0dXJuICh1dGZfOCk7CisJfQorCisJd2hpbGUgKChjID0gKnV0Zl8xNisrKSAhPSAnXDAnKSB7CisJCWlmIChJU19MRUFESU5HX1NVUlJPR0FURShjKSkgeworCQkJLyoKKwkJCSAqIExlYWRpbmcgc3Vycm9nYXRlLiAgTXVzdCBiZSBmb2xsb3dlZCBieQorCQkJICogYSB0cmFpbGluZyBzdXJyb2dhdGUuCisJCQkgKi8KKwkJCWMyID0gKnV0Zl8xNjsKKwkJCWlmIChjMiA9PSAnXDAnKSB7CisJCQkJLyoKKwkJCQkgKiBPb3BzLCBzdHJpbmcgZW5kcyB3aXRoIGEgbGVhZAorCQkJCSAqIHN1cnJvZ2F0ZS4gIFRyeSB0byBkcm9wIGluCisJCQkJICogYSBSRVBMQUNFTUVOVCBDSEFSQUNURVIsIGFuZAorCQkJCSAqIGRvbid0IG1vdmUgdGhlIHN0cmluZyBwb2ludGVyLAorCQkJCSAqIHNvIG9uIHRoZSBuZXh0IHRyaXAgdGhyb3VnaAorCQkJCSAqIHRoZSBsb29wIHdlIGdyYWIgdGhlIHRlcm1pbmF0aW5nCisJCQkJICogJ1wwJyBhbmQgcXVpdC4KKwkJCQkgKi8KKwkJCQl1YyA9IFJFUExBQ0VNRU5UX0NIQVJBQ1RFUjsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBPSywgd2UgY2FuIGNvbnN1bWUgdGhpcyAyLW9jdGV0CisJCQkJICogdmFsdWUuCisJCQkJICovCisJCQkJdXRmXzE2Kys7CisJCQkJaWYgKElTX1RSQUlMSU5HX1NVUlJPR0FURShjMikpIHsKKwkJCQkJLyoKKwkJCQkJICogVHJhaWxpbmcgc3Vycm9nYXRlLgorCQkJCQkgKiBUaGlzIGNhbGN1bGF0aW9uIHdpbGwsCisJCQkJCSAqIGZvciBjIGJlaW5nIGEgbGVhZGluZworCQkJCQkgKiBzdXJyb2dhdGUgYW5kIGMyIGJlaW5nCisJCQkJCSAqIGEgdHJhaWxpbmcgc3Vycm9nYXRlLAorCQkJCQkgKiBwcm9kdWNlIGEgdmFsdWUgYmV0d2VlbgorCQkJCQkgKiAweDEwMDAwMCBhbmQgMHgxMGZmZmYsCisJCQkJCSAqIHNvIGl0J3MgYWx3YXlzIGdvaW5nIHRvIGJlCisJCQkJCSAqIGEgdmFsaWQgVW5pY29kZSBjb2RlIHBvaW50LgorCQkJCQkgKi8KKwkJCQkJdWMgPSBTVVJST0dBVEVfVkFMVUUoYywgYzIpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qCisJCQkJCSAqIE5vdCBhIHRyYWlsaW5nIHN1cnJvYWdlOworCQkJCQkgKiB0cnkgdG8gZHJvcCBpbiBhCisJCQkJCSAqIFJFUExBQ0VNRU5UIENIQVJBQ1RFUi4KKwkJCQkJICovCisJCQkJCXVjID0gUkVQTEFDRU1FTlRfQ0hBUkFDVEVSOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBOb3QgYSBsZWFkaW5nIHN1cnJvZ2F0ZS4KKwkJCSAqLworCQkJaWYgKElTX1RSQUlMSU5HX1NVUlJPR0FURShjKSkgeworCQkJCS8qCisJCQkJICogVHJhaWxpbmcgc3Vycm9nYXRlIHdpdGhvdXQKKwkJCQkgKiBhIHByZWNlZGluZyBsZWFkaW5nIHN1cnJvZ2F0ZS4KKwkJCQkgKiBUcnkgdG8gZHJvcCBpbiBhIFJFUExBQ0VNRU5UCisJCQkJICogQ0hBUkFDVEVSLgorCQkJCSAqLworCQkJCXVjID0gUkVQTEFDRU1FTlRfQ0hBUkFDVEVSOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIFRoaXMgaXMgYSB2YWxpZCBCTVAgY2hhcmFjdGVyOworCQkJCSAqIGRyb3AgaXQgaW4uCisJCQkJICovCisJCQkJdWMgPSBjOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogT0ssIHVjIGlzIGEgdmFsaWQgVW5pY29kZSBjaGFyYWN0ZXI7IGhvdworCQkgKiBtYW55IGJ5dGVzIHdvcnRoIG9mIFVURi04IGRvZXMgaXQgcmVxdWlyZT8KKwkJICovCisJCWlmICh1YyA8IDB4MDA4MCkgeworCQkJLyogMSBieXRlLiAqLworCQkJaWYgKHV0Zl84X2xlbiA8IDIpIHsKKwkJCQkvKgorCQkJCSAqIE5vdCBlbm91Z2ggcm9vbSBmb3IgdGhhdCBieXRlCisJCQkJICogcGx1cyBhIHRyYWlsaW5nICdcMCcuCisJCQkJICovCisJCQkJYnJlYWs7CisJCQl9CisJCQkqdXRmXzgrKyA9IChjaGFyKXVjOworCQkJdXRmXzhfbGVuLS07CisJCX0gZWxzZSBpZiAodWMgPCAweDA4MDApIHsKKwkJCS8qIDIgYnl0ZXMuICovCisJCQlpZiAodXRmXzhfbGVuIDwgMykgeworCQkJCS8qCisJCQkJICogTm90IGVub3VnaCByb29tIGZvciB0aG9zZSBieXRlcworCQkJCSAqIHBsdXMgYSB0cmFpbGluZyAnXDAnLgorCQkJCSAqLworCQkJCWJyZWFrOworCQkJfQorCQkJKnV0Zl84KysgPSAoKHVjID4+IDYpICYgMHgzRikgfCAweEMwOworCQkJKnV0Zl84KysgPSAoKHVjID4+IDApICYgMHgzRikgfCAweDgwOworCQkJdXRmXzhfbGVuIC09IDI7CisJCX0gZWxzZSBpZiAodWMgPCAweDAxMDAwMCkgeworCQkJLyogMyBieXRlcy4gKi8KKwkJCWlmICh1dGZfOF9sZW4gPCA0KSB7CisJCQkJLyoKKwkJCQkgKiBOb3QgZW5vdWdoIHJvb20gZm9yIHRob3NlIGJ5dGVzCisJCQkJICogcGx1cyBhIHRyYWlsaW5nICdcMCcuCisJCQkJICovCisJCQkJYnJlYWs7CisJCQl9CisJCQkqdXRmXzgrKyA9ICgodWMgPj4gMTIpICYgMHgwRikgfCAweEUwOworCQkJKnV0Zl84KysgPSAoKHVjID4+IDYpICYgMHgzRikgfCAweDgwOworCQkJKnV0Zl84KysgPSAoKHVjID4+IDApICYgMHgzRikgfCAweDgwOworCQkJdXRmXzhfbGVuIC09IDM7CisJCX0gZWxzZSB7CisJCQkvKiA0IGJ5dGVzLiAqLworCQkJaWYgKHV0Zl84X2xlbiA8IDUpIHsKKwkJCQkvKgorCQkJCSAqIE5vdCBlbm91Z2ggcm9vbSBmb3IgdGhvc2UgYnl0ZXMKKwkJCQkgKiBwbHVzIGEgdHJhaWxpbmcgJ1wwJy4KKwkJCQkgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCSp1dGZfOCsrID0gKCh1YyA+PiAxOCkgJiAweDAzKSB8IDB4RjA7CisJCQkqdXRmXzgrKyA9ICgodWMgPj4gMTIpICYgMHgzRikgfCAweDgwOworCQkJKnV0Zl84KysgPSAoKHVjID4+IDYpICYgMHgzRikgfCAweDgwOworCQkJKnV0Zl84KysgPSAoKHVjID4+IDApICYgMHgzRikgfCAweDgwOworCQkJdXRmXzhfbGVuIC09IDM7CisJCX0KKwl9CisKKwkvKgorCSAqIE9LLCB3ZSBoYXZlIGVub3VnaCByb29tIGZvciAoYXQgbGVhc3QpIGEgdHJhaWxpbmcgJ1wwJy4KKwkgKiAoV2Ugc3RhcnRlZCBvdXQgd2l0aCBlbm91Z2ggcm9vbSwgdGhhbmtzIHRvIHRoZSB0ZXN0CisJICogZm9yIGEgemVyby1sZW5ndGggYnVmZmVyIGF0IHRoZSBiZWdpbm5pbmcsIGFuZCBpZgorCSAqIHRoZXJlIHdhc24ndCBlbm91Z2ggcm9vbSBmb3IgYW55IGNoYXJhY3RlciB3ZSB3YW50ZWQKKwkgKiB0byBwdXQgaW50byB0aGUgYnVmZmVyICpwbHVzKiBhIHRyYWlsaW5nICdcMCcsCisJICogd2UnZCBoYXZlIHF1aXQgYmVmb3JlIHB1dHRpbmcgaXQgaW50byB0aGUgYnVmZmVyLAorCSAqIGFuZCB0aHVzIHdvdWxkIGhhdmUgbGVmdCBlbm91Z2ggcm9vbSBmb3IgdGhlIHRyYWlsaW5nCisJICogJ1wwJy4pCisJICoKKwkgKiBEcm9wIGl0IGluLgorCSAqLworCSp1dGZfOCA9ICdcMCc7CisKKwkvKgorCSAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRlcm1pbmF0aW5nICdcMCcsIGluIGNhc2Ugd2UKKwkgKiB3YW50IHRvIGRyb3Agc29tZXRoaW5nIGluIGFmdGVyIHRoYXQuCisJICovCisJcmV0dXJuICh1dGZfOCk7Cit9CisjZW5kaWYgLyogX1dJTjMyICovCisKIC8qCiAgKiBHZW5lcmF0ZSBhbiBlcnJvciBtZXNzYWdlIGJhc2VkIG9uIGEgZm9ybWF0LCBhcmd1bWVudHMsIGFuZCBhbgogICogZXJybm8sIHdpdGggYSBtZXNzYWdlIGZvciB0aGUgZXJybm8gYWZ0ZXIgdGhlIGZvcm1hdHRlZCBvdXRwdXQuCkBAIC02NSwxNCArMjczLDEyMCBAQAogCXNpemVfdCBtc2dsZW47CiAJY2hhciAqcDsKIAlzaXplX3QgZXJyYnVmbGVuX3JlbWFpbmluZzsKLSNpZiBkZWZpbmVkKEhBVkVfU1RSRVJST1JfUykKLQllcnJub190IGVycjsKLSNlbGlmIGRlZmluZWQoSEFWRV9TVFJFUlJPUl9SKQotCWludCBlcnI7Ci0jZW5kaWYKIAogCXZhX3N0YXJ0KGFwLCBmbXQpOwotCXBjYXBfdnNucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLCBmbXQsIGFwKTsKKwl2c25wcmludGYoZXJyYnVmLCBlcnJidWZsZW4sIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJbXNnbGVuID0gc3RybGVuKGVycmJ1Zik7CisKKwkvKgorCSAqIERvIHdlIGhhdmUgZW5vdWdoIHNwYWNlIHRvIGFwcGVuZCAiOiAiPworCSAqIEluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgJ1wwJywgdGhhdCdzIDMgYnl0ZXMuCisJICovCisJaWYgKG1zZ2xlbiArIDMgPiBlcnJidWZsZW4pIHsKKwkJLyogTm8gLSBqdXN0IGdpdmUgdGhlbSB3aGF0IHdlJ3ZlIHByb2R1Y2VkLiAqLworCQlyZXR1cm47CisJfQorCXAgPSBlcnJidWYgKyBtc2dsZW47CisJZXJyYnVmbGVuX3JlbWFpbmluZyA9IGVycmJ1ZmxlbiAtIG1zZ2xlbjsKKwkqcCsrID0gJzonOworCSpwKysgPSAnICc7CisJKnAgPSAnXDAnOworCWVycmJ1Zmxlbl9yZW1haW5pbmcgLT0gMjsKKworCS8qCisJICogTm93IGFwcGVuZCB0aGUgc3RyaW5nIGZvciB0aGUgZXJyb3IgY29kZS4KKwkgKi8KKyNpZiBkZWZpbmVkKEhBVkVfX1dDU0VSUk9SX1MpCisJLyoKKwkgKiBXZSBoYXZlIGEgV2luZG93cy1zdHlsZSBfd2NzZXJyb3JfcygpLgorCSAqIEdlbmVyYXRlIGEgVVRGLTE2TEUgZXJyb3IgbWVzc2FnZS4KKwkgKi8KKwl3Y2hhcl90IHV0Zl8xNl9lcnJidWZbUENBUF9FUlJCVUZfU0laRV07CisJZXJybm9fdCBlcnIgPSBfd2NzZXJyb3Jfcyh1dGZfMTZfZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCBlcnJudW0pOworCWlmIChlcnIgIT0gMCkgeworCQkvKgorCQkgKiBJdCBkb2Vzbid0IGFwcGVhciB0byBiZSBkb2N1bWVudGVkIGFueXdoZXJlIG9idmlvdXMKKwkJICogd2hhdCB0aGUgZXJyb3IgcmV0dXJucyBmcm9tIF93Y3NlcnJvcl9zKCkuCisJCSAqLworCQlzbnByaW50ZihwLCBlcnJidWZsZW5fcmVtYWluaW5nLCAiRXJyb3IgJWQiLCBlcnJudW0pOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBOb3cgY29udmVydCBpdCBmcm9tIFVURi0xNkxFIHRvIFVURi04LCBkcm9wcGluZyBpdCBpbiB0aGUKKwkgKiByZW1haW5pbmcgc3BhY2UgaW4gdGhlIGJ1ZmZlciwgYW5kIHRydW5jYXRpbmcgaXQgLSBjbGVhbmx5LAorCSAqIG9uIGEgVVRGLTggY2hhcmFjdGVyIGJvdW5kYXJ5IC0gaWYgaXQgZG9lc24ndCBmaXQuCisJICovCisJdXRmXzE2bGVfdG9fdXRmXzhfdHJ1bmNhdGVkKHV0Zl8xNl9lcnJidWYsIHAsIGVycmJ1Zmxlbl9yZW1haW5pbmcpOworCisJLyoKKwkgKiBOb3csIGlmIHdlJ3JlIG5vdCBpbiBVVEYtOCBtb2RlLCBjb252ZXJ0IGVycmJ1ZiB0byB0aGUKKwkgKiBsb2NhbCBjb2RlIHBhZ2UuCisJICovCisJaWYgKCF1c2VfdXRmXzgpCisJCXV0Zl84X3RvX2FjcF90cnVuY2F0ZWQoZXJyYnVmKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9HTlVfU1RSRVJST1JfUikKKwkvKgorCSAqIFdlIGhhdmUgYSBHTlUtc3R5bGUgc3RyZXJyb3JfcigpLCB3aGljaCBpcyAqbm90KiBndWFyYW50ZWVkIHRvCisJICogZG8gYW55dGhpbmcgdG8gdGhlIGJ1ZmZlciBoYW5kZWQgdG8gaXQsIGFuZCB3aGljaCByZXR1cm5zIGEKKwkgKiBwb2ludGVyIHRvIHRoZSBlcnJvciBzdHJpbmcsIHdoaWNoIG1heSBvciBtYXkgbm90IGJlIGluCisJICogdGhlIGJ1ZmZlci4KKwkgKgorCSAqIEl0IGlzLCBob3dldmVyLCBndWFyYW50ZWVkIHRvIHN1Y2NlZWQuCisJICovCisJY2hhciBzdHJlcnJvcl9idWZbUENBUF9FUlJCVUZfU0laRV07CisJY2hhciAqZXJyc3RyaW5nID0gc3RyZXJyb3JfcihlcnJudW0sIHN0cmVycm9yX2J1ZiwgUENBUF9FUlJCVUZfU0laRSk7CisJc25wcmludGYocCwgZXJyYnVmbGVuX3JlbWFpbmluZywgIiVzIiwgZXJyc3RyaW5nKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9QT1NJWF9TVFJFUlJPUl9SKQorCS8qCisJICogV2UgaGF2ZSBhIFBPU0lYLXN0eWxlIHN0cmVycm9yX3IoKSwgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBmaWxsCisJICogaW4gdGhlIGJ1ZmZlciwgYnV0IGlzIG5vdCBndWFyYW50ZWVkIHRvIHN1Y2NlZWQuCisJICovCisJaW50IGVyciA9IHN0cmVycm9yX3IoZXJybnVtLCBwLCBlcnJidWZsZW5fcmVtYWluaW5nKTsKKwlpZiAoZXJyID09IEVJTlZBTCkgeworCQkvKgorCQkgKiBVTklYIDAzIHNheXMgdGhpcyBpc24ndCBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYQorCQkgKiBmYWxsYmFjayBlcnJvciBtZXNzYWdlLgorCQkgKi8KKwkJc25wcmludGYocCwgZXJyYnVmbGVuX3JlbWFpbmluZywgIlVua25vd24gZXJyb3I6ICVkIiwKKwkJICAgIGVycm51bSk7CisJfSBlbHNlIGlmIChlcnIgPT0gRVJBTkdFKSB7CisJCS8qCisJCSAqIFVOSVggMDMgc2F5cyB0aGlzIGlzbid0IGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhCisJCSAqIGZhbGxiYWNrIGVycm9yIG1lc3NhZ2UuCisJCSAqLworCQlzbnByaW50ZihwLCBlcnJidWZsZW5fcmVtYWluaW5nLAorCQkgICAgIk1lc3NhZ2UgZm9yIGVycm9yICVkIGlzIHRvbyBsb25nIiwgZXJybnVtKTsKKwl9CisjZWxzZQorCS8qCisJICogV2UgaGF2ZSBuZWl0aGVyIF93Y3NlcnJvcl9zKCkgbm9yIHN0cmVycm9yX3IoKSwgc28gd2UncmUKKwkgKiBzdHVjayB3aXRoIHVzaW5nIHBjYXBfc3RyZXJyb3IoKS4KKwkgKi8KKwlzbnByaW50ZihwLCBlcnJidWZsZW5fcmVtYWluaW5nLCAiJXMiLCBwY2FwX3N0cmVycm9yKGVycm51bSkpOworI2VuZGlmCit9CisKKyNpZmRlZiBfV0lOMzIKKy8qCisgKiBHZW5lcmF0ZSBhbiBlcnJvciBtZXNzYWdlIGJhc2VkIG9uIGEgZm9ybWF0LCBhcmd1bWVudHMsIGFuZCBhCisgKiBXaW4zMiBlcnJvciwgd2l0aCBhIG1lc3NhZ2UgZm9yIHRoZSBXaW4zMiBlcnJvciBhZnRlciB0aGUgZm9ybWF0dGVkIG91dHB1dC4KKyAqLwordm9pZAorcGNhcF9mbXRfZXJybXNnX2Zvcl93aW4zMl9lcnIoY2hhciAqZXJyYnVmLCBzaXplX3QgZXJyYnVmbGVuLCBEV09SRCBlcnJudW0sCisgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlzaXplX3QgbXNnbGVuOworCWNoYXIgKnA7CisJc2l6ZV90IGVycmJ1Zmxlbl9yZW1haW5pbmc7CisJRFdPUkQgcmV0dmFsOworCXdjaGFyX3QgdXRmXzE2X2VycmJ1ZltQQ0FQX0VSUkJVRl9TSVpFXTsKKwlzaXplX3QgdXRmXzhfbGVuOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdnNucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLCBmbXQsIGFwKTsKIAl2YV9lbmQoYXApOwogCW1zZ2xlbiA9IHN0cmxlbihlcnJidWYpOwogCkBAIC05NCwzOCArNDA4LDUzIEBACiAKIAkvKgogCSAqIE5vdyBhcHBlbmQgdGhlIHN0cmluZyBmb3IgdGhlIGVycm9yIGNvZGUuCisJICoKKwkgKiBYWFggLSB3aGF0IGxhbmd1YWdlIElEIHRvIHVzZT8KKwkgKgorCSAqIEZvciBVTipYZXMsIHBjYXBfc3RyZXJyb3IoKSBtYXkgb3IgbWF5IG5vdCByZXR1cm4gbG9jYWxpemVkCisJICogc3RyaW5ncy4KKwkgKgorCSAqIFdlIGN1cnJlbnRseSBkb24ndCBoYXZlIGxvY2FsaXplZCBtZXNzYWdlcyBmb3IgbGlicGNhcCwgYnV0CisJICogd2UgbWlnaHQgd2FudCB0byBkbyBzby4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBtb3N0IG9mIHRoZXNlCisJICogbWVzc2FnZXMgYXJlIGdvaW5nIHRvIGJlIHJlYWQgYnkgbGlicGNhcCBkZXZlbG9wZXJzIGFuZAorCSAqIHBlcmhhcHMgYnkgZGV2ZWxvcGVycyBvZiBsaWJwY2FwLWJhc2VkIGFwcGxpY2F0aW9ucywgRW5nbGlzaAorCSAqIG1pZ2h0IGJlIGEgYmV0dGVyIGNob2ljZSwgc28gdGhlIGRldmVsb3BlciBkb2Vzbid0IGhhdmUgdG8KKwkgKiBnZXQgdGhlIG1lc3NhZ2UgdHJhbnNsYXRlZCBpZiBpdCdzIGluIGEgbGFuZ3VhZ2UgdGhleSBkb24ndAorCSAqIGhhcHBlbiB0byB1bmRlcnN0YW5kLgogCSAqLwotI2lmIGRlZmluZWQoSEFWRV9TVFJFUlJPUl9TKQotCWVyciA9IHN0cmVycm9yX3MocCwgZXJyYnVmbGVuX3JlbWFpbmluZywgZXJybnVtKTsKLQlpZiAoZXJyICE9IDApIHsKKwlyZXR2YWwgPSBGb3JtYXRNZXNzYWdlVyhGT1JNQVRfTUVTU0FHRV9GUk9NX1NZU1RFTXxGT1JNQVRfTUVTU0FHRV9JR05PUkVfSU5TRVJUU3xGT1JNQVRfTUVTU0FHRV9NQVhfV0lEVEhfTUFTSywKKwkgICAgTlVMTCwgZXJybnVtLCBNQUtFTEFOR0lEKExBTkdfTkVVVFJBTCwgU1VCTEFOR19ERUZBVUxUKSwKKwkgICAgdXRmXzE2X2VycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgTlVMTCk7CisJaWYgKHJldHZhbCA9PSAwKSB7CiAJCS8qCi0JCSAqIEl0IGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGRvY3VtZW50ZWQgYW55d2hlcmUgb2J2aW91cwotCQkgKiB3aGF0IHRoZSBlcnJvciByZXR1cm5zIGZyb20gc3RyZXJyb3JfcygpLgorCQkgKiBGYWlsZWQuCiAJCSAqLwotCQlwY2FwX3NucHJpbnRmKHAsIGVycmJ1Zmxlbl9yZW1haW5pbmcsICJFcnJvciAlZCIsIGVycm51bSk7CisJCXNucHJpbnRmKHAsIGVycmJ1Zmxlbl9yZW1haW5pbmcsCisJCSAgICAiQ291bGRuJ3QgZ2V0IGVycm9yIG1lc3NhZ2UgZm9yIGVycm9yICglbHUpIiwgZXJybnVtKTsKKwkJcmV0dXJuOwogCX0KLSNlbGlmIGRlZmluZWQoSEFWRV9TVFJFUlJPUl9SKQotCWVyciA9IHN0cmVycm9yX3IoZXJybnVtLCBwLCBlcnJidWZsZW5fcmVtYWluaW5nKTsKLQlpZiAoZXJyID09IEVJTlZBTCkgewotCQkvKgotCQkgKiBVTklYIDAzIHNheXMgdGhpcyBpc24ndCBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYQotCQkgKiBmYWxsYmFjayBlcnJvciBtZXNzYWdlLgotCQkgKi8KLQkJcGNhcF9zbnByaW50ZihwLCBlcnJidWZsZW5fcmVtYWluaW5nLCAiVW5rbm93biBlcnJvcjogJWQiLAotCQkgICAgZXJybnVtKTsKLQl9IGVsc2UgaWYgKGVyciA9PSBFUkFOR0UpIHsKLQkJLyoKLQkJICogVU5JWCAwMyBzYXlzIHRoaXMgaXNuJ3QgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEKLQkJICogZmFsbGJhY2sgZXJyb3IgbWVzc2FnZS4KLQkJICovCi0JCXBjYXBfc25wcmludGYocCwgZXJyYnVmbGVuX3JlbWFpbmluZywKLQkJICAgICJNZXNzYWdlIGZvciBlcnJvciAlZCBpcyB0b28gbG9uZyIsIGVycm51bSk7Ci0JfQotI2Vsc2UKKwogCS8qCi0JICogV2UgaGF2ZSBuZWl0aGVyIHN0cmVycm9yX3MoKSBub3Igc3RyZXJyb3JfcigpLCBzbyB3ZSdyZQotCSAqIHN0dWNrIHdpdGggdXNpbmcgcGNhcF9zdHJlcnJvcigpLgorCSAqIE5vdyBjb252ZXJ0IGl0IGZyb20gVVRGLTE2TEUgdG8gVVRGLTguCiAJICovCi0JcGNhcF9zbnByaW50ZihwLCBlcnJidWZsZW5fcmVtYWluaW5nLCAiJXMiLCBwY2FwX3N0cmVycm9yKGVycm51bSkpOwotI2VuZGlmCisJcCA9IHV0Zl8xNmxlX3RvX3V0Zl84X3RydW5jYXRlZCh1dGZfMTZfZXJyYnVmLCBwLCBlcnJidWZsZW5fcmVtYWluaW5nKTsKKworCS8qCisJICogTm93IGFwcGVuZCB0aGUgZXJyb3IgbnVtYmVyLCBpZiBpdCBmaXRzLgorCSAqLworCXV0Zl84X2xlbiA9IHAgLSBlcnJidWY7CisJZXJyYnVmbGVuX3JlbWFpbmluZyAtPSB1dGZfOF9sZW47CisJaWYgKHV0Zl84X2xlbiA9PSAwKSB7CisJCS8qIFRoZSBtZXNzYWdlIHdhcyBlbXB0eS4gKi8KKwkJc25wcmludGYocCwgZXJyYnVmbGVuX3JlbWFpbmluZywgIiglbHUpIiwgZXJybnVtKTsKKwl9IGVsc2UKKwkJc25wcmludGYocCwgZXJyYnVmbGVuX3JlbWFpbmluZywgIiAoJWx1KSIsIGVycm51bSk7CisKKwkvKgorCSAqIE5vdywgaWYgd2UncmUgbm90IGluIFVURi04IG1vZGUsIGNvbnZlcnQgZXJyYnVmIHRvIHRoZQorCSAqIGxvY2FsIGNvZGUgcGFnZS4KKwkgKi8KKwlpZiAoIXVzZV91dGZfOCkKKwkJdXRmXzhfdG9fYWNwX3RydW5jYXRlZChlcnJidWYpOwogfQorI2VuZGlmCmRpZmYgLS1naXQgYS9mbXR1dGlscy5oIGIvZm10dXRpbHMuaAppbmRleCA2MmM3OGZkLi5iYTBmNjZjIDEwMDY0NAotLS0gYS9mbXR1dGlscy5oCisrKyBiL2ZtdHV0aWxzLmgKQEAgLTQwLDkgKzQwLDE2IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCit2b2lkCXBjYXBfZm10X3NldF9lbmNvZGluZyh1bnNpZ25lZCBpbnQpOworCiB2b2lkCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oY2hhciAqLCBzaXplX3QsIGludCwKICAgICBQQ0FQX0ZPUk1BVF9TVFJJTkcoY29uc3QgY2hhciAqKSwgLi4uKSBQQ0FQX1BSSU5URkxJS0UoNCwgNSk7CiAKKyNpZmRlZiBfV0lOMzIKK3ZvaWQJcGNhcF9mbXRfZXJybXNnX2Zvcl93aW4zMl9lcnIoY2hhciAqLCBzaXplX3QsIERXT1JELAorICAgIFBDQVBfRk9STUFUX1NUUklORyhjb25zdCBjaGFyICopLCAuLi4pIFBDQVBfUFJJTlRGTElLRSg0LCA1KTsKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnRtYWNyb3MuaCBiL2Z0bWFjcm9zLmgKaW5kZXggZGU4ZGE5OC4uM2ZhZmFiOCAxMDA2NDQKLS0tIGEvZnRtYWNyb3MuaAorKysgYi9mdG1hY3Jvcy5oCkBAIC04MywyMiArODMsMjAgQEAKICAgICogbGVhc3Qgd2l0aCBIUCdzIEMgY29tcGlsZXI7IGhvcGVmdWxseSBkb2luZyBzbyB3b24ndCBtYWtlIGl0CiAgICAqICpub3QqIHdvcmsgd2l0aCAqdW4qLXRocmVhZGVkIGNvZGUuCiAgICAqLwotI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQobGludXgpIHx8IGRlZmluZWQoX19saW51eCkKKyNlbHNlCiAgIC8qCi0gICAqIFdlIGNhbid0IHR1cm4gX0dOVV9TT1VSQ0Ugb24gYmVjYXVzZSBzb21lIHZlcnNpb25zIG9mIEdOVSBMaWJjCi0gICAqIHdpbGwgZ2l2ZSB0aGUgR05VIHZlcnNpb24gb2Ygc3RyZXJyb3JfcigpLCB3aGljaCByZXR1cm5zIGEKLSAgICogc3RyaW5nIHBvaW50ZXIgYW5kIGRvZXNuJ3QgbmVjZXNzYXJpbHkgZmlsbCBpbiB0aGUgYnVmZmVyLAotICAgKiByYXRoZXIgdGhhbiB0aGUgc3RhbmRhcmQgdmVyc2lvbiBvZiBzdHJlcnJvcl9yKCksIHdoaWNoCi0gICAqIHJldHVybnMgMCBvciBhbiBlcnJubyBhbmQgYWx3YXlzIGZpbGxzIGluIHRoZSBidWZmZXIuICBXZQotICAgKiByZXF1aXJlIGJvdGggb2YgdGhlIGxhdHRlciBiZWhhdmlvcnMuCisgICAqIFR1cm4gb24gX0dOVV9TT1VSQ0UgdG8gZ2V0IGV2ZXJ5dGhpbmcgR05VIGxpYmMgaGFzIHRvIG9mZmVyLAorICAgKiBpbmNsdWRpbmcgYXNwcmludGYoKSwgaWYgd2UncmUgdXNpbmcgR05VIGxpYmMuCiAgICAqCi0gICAqIFNvIHdlIHRyeSB0dXJuaW5nIGV2ZXJ5dGhpbmcgZWxzZSBvbiB0aGF0IHdlIGNhbi4gIFRoaXMgaW5jbHVkZXMKLSAgICogZGVmaW5pbmcgX1hPUEVOX1NPVVJDRSBhcyA2MDAsIGJlY2F1c2Ugd2Ugd2FudCB0byBmb3JjZSBjcnlwdCgpCi0gICAqIHRvIGJlIGRlY2xhcmVkIG9uIHN5c3RlbXMgdGhhdCB1c2UgR05VIGxpYmMsIHN1Y2ggYXMgbW9zdCBMaW51eAotICAgKiBkaXN0cmlidXRpb25zLgorICAgKiBVbmZvcnR1bmF0ZWx5LCBvbmUgdGhpbmcgaXQgaGFzIHRvIG9mZmVyIGlzIGEgc3RyZXJyb3JfcigpCisgICAqIHRoYXQncyBub3QgUE9TSVgtY29tcGxpYW50LCBidXQgd2UgZGVhbCB3aXRoIHRoYXQgaW4KKyAgICogcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubygpLgorICAgKgorICAgKiBXZSBkb24ndCBsaW1pdCB0aGlzIHRvLCBmb3IgZXhhbXBsZSwgTGludXggYW5kIEN5Z3dpbiwgYmVjYXVzZQorICAgKiB0aGlzIG1pZ2h0LCBmb3IgZXhhbXBsZSwgYmUgR05VL0hVUkQgb3Igb25lIG9mIERlYmlhbidzIGtGcmVlQlNECisgICAqIE9TZXMgKCJHTlUvRnJlZUJTRCIpLgogICAgKi8KLSAgI2RlZmluZSBfUE9TSVhfQ19TT1VSQ0UgMjAwODA5TAotICAjZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNjAwCisgICNkZWZpbmUgX0dOVV9TT1VSQ0UKIAogICAvKgogICAgKiBXZSB0dXJuIG9uIGJvdGggX0RFRkFVTFRfU09VUkNFIGFuZCBfQlNEX1NPVVJDRSB0byB0cnkgdG8gZ2V0CmRpZmYgLS1naXQgYS9nZW5jb2RlLmMgYi9nZW5jb2RlLmMKaW5kZXggOTU5YTU2ZS4uMjk3ODg1OSAxMDA2NDQKLS0tIGEvZ2VuY29kZS5jCisrKyBiL2dlbmNvZGUuYwpAQCAtNTAsNiArNTAsOCBAQAogCiAjaW5jbHVkZSAicGNhcC1pbnQuaCIKIAorI2luY2x1ZGUgImV4dHJhY3QuaCIKKwogI2luY2x1ZGUgImV0aGVydHlwZS5oIgogI2luY2x1ZGUgIm5scGlkLmgiCiAjaW5jbHVkZSAibGxjLmgiCkBAIC02NSw3ICs2Nyw3IEBACiAjaW5jbHVkZSAiZ3JhbW1hci5oIgogI2luY2x1ZGUgInNjYW5uZXIuaCIKIAotI2lmIGRlZmluZWQobGludXgpICYmIGRlZmluZWQoUEZfUEFDS0VUKSAmJiBkZWZpbmVkKFNPX0FUVEFDSF9GSUxURVIpCisjaWYgZGVmaW5lZChsaW51eCkKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3BhY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbHRlci5oPgpAQCAtMTM3LDEwICsxMzksNiBAQAogCiAjZGVmaW5lIEVUSEVSTVRVCTE1MDAKIAotI2lmbmRlZiBFVEhFUlRZUEVfVEVCCi0jZGVmaW5lIEVUSEVSVFlQRV9URUIgMHg2NTU4Ci0jZW5kaWYKLQogI2lmbmRlZiBJUFBST1RPX0hPUE9QVFMKICNkZWZpbmUgSVBQUk9UT19IT1BPUFRTIDAKICNlbmRpZgpAQCAtMjQ2LDYgKzI0NCw3IEBACiBzdHJ1Y3QgX2NvbXBpbGVyX3N0YXRlIHsKIAlqbXBfYnVmIHRvcF9jdHg7CiAJcGNhcF90ICpicGZfcGNhcDsKKwlpbnQgZXJyb3Jfc2V0OwogCiAJc3RydWN0IGljb2RlIGljOwogCkBAIC0yNzcsNiArMjc2LDEzIEBACiAJc3RydWN0IGFkZHJpbmZvICphaTsKIAogCS8qCisJICogQW5vdGhlciB0aGluZyB0aGF0J3MgYWxsb2NhdGVkIGlzIHRoZSByZXN1bHQgb2YgcGNhcF9ldGhlcl9hdG9uKCk7CisJICogaXQgbXVzdCBiZSBmcmVlZCB3aXRoIGZyZWUoKS4gIFRoaXMgdmFyaWFibGUgcG9pbnRzIHRvIGFueQorCSAqIGFkZHJlc3MgdGhhdCB3b3VsZCBuZWVkIHRvIGJlIGZyZWVkLgorCSAqLworCXVfY2hhciAqZTsKKworCS8qCiAJICogVmFyaW91cyBjb2RlIGNvbnN0cnVjdHMgbmVlZCB0byBrbm93IHRoZSBsYXlvdXQgb2YgdGhlIHBhY2tldC4KIAkgKiBUaGVzZSB2YWx1ZXMgZ2l2ZSB0aGUgbmVjZXNzYXJ5IG9mZnNldHMgZnJvbSB0aGUgYmVnaW5uaW5nCiAJICogb2YgdGhlIHBhY2tldCBkYXRhLgpAQCAtNDE3LDM1ICs0MjMsNjEgQEAKIAlpbnQgY3VyX2NodW5rOwogfTsKIAotdm9pZCBQQ0FQX05PUkVUVVJOCi1icGZfc3ludGF4X2Vycm9yKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgY29uc3QgY2hhciAqbXNnKQorLyoKKyAqIEZvciB1c2UgYnkgcm91dGluZXMgb3V0c2lkZSB0aGlzIGZpbGUuCisgKi8KKy8qIFZBUkFSR1MgKi8KK3ZvaWQKK2JwZl9zZXRfZXJyb3IoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKLQlicGZfZXJyb3IoY3N0YXRlLCAic3ludGF4IGVycm9yIGluIGZpbHRlciBleHByZXNzaW9uOiAlcyIsIG1zZyk7Ci0JLyogTk9UUkVBQ0hFRCAqLworCXZhX2xpc3QgYXA7CisKKwkvKgorCSAqIElmIHdlJ3ZlIGFscmVhZHkgc2V0IGFuIGVycm9yLCBkb24ndCBvdmVycmlkZSBpdC4KKwkgKiBUaGUgbGV4aWNhbCBhbmFseXplciByZXBvcnRzIHNvbWUgZXJyb3JzIGJ5IHNldHRpbmcKKwkgKiB0aGUgZXJyb3IgYW5kIHRoZW4gcmV0dXJuaW5nIGEgTEVYX0VSUk9SIHRva2VuLCB3aGljaAorCSAqIGlzIG5vdCByZWNvZ25pemVkIGJ5IGFueSBncmFtbWFyIHJ1bGUsIGFuZCB0aHVzIGZvcmNlcworCSAqIHRoZSBwYXJzZSB0byBzdG9wLiAgV2UgZG9uJ3Qgd2FudCB0aGUgZXJyb3IgcmVwb3J0ZWQKKwkgKiBieSB0aGUgbGV4aWNhbCBhbmFseXplciB0byBiZSBvdmVyd3JpdHRlbiBieSB0aGUgc3ludGF4CisJICogZXJyb3IuCisJICovCisJaWYgKCFjc3RhdGUtPmVycm9yX3NldCkgeworCQl2YV9zdGFydChhcCwgZm10KTsKKwkJKHZvaWQpdnNucHJpbnRmKGNzdGF0ZS0+YnBmX3BjYXAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJICAgIGZtdCwgYXApOworCQl2YV9lbmQoYXApOworCQljc3RhdGUtPmVycm9yX3NldCA9IDE7CisJfQogfQogCisvKgorICogRm9yIHVzZSAqT05MWSogaW4gcm91dGluZXMgaW4gdGhpcyBmaWxlLgorICovCitzdGF0aWMgdm9pZCBQQ0FQX05PUkVUVVJOIGJwZl9lcnJvcihjb21waWxlcl9zdGF0ZV90ICosIGNvbnN0IGNoYXIgKiwgLi4uKQorICAgIFBDQVBfUFJJTlRGTElLRSgyLCAzKTsKKwogLyogVkFSQVJHUyAqLwotdm9pZCBQQ0FQX05PUkVUVVJOCitzdGF0aWMgdm9pZCBQQ0FQX05PUkVUVVJOCiBicGZfZXJyb3IoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFwOwogCiAJdmFfc3RhcnQoYXAsIGZtdCk7Ci0JaWYgKGNzdGF0ZS0+YnBmX3BjYXAgIT0gTlVMTCkKLQkJKHZvaWQpcGNhcF92c25wcmludGYocGNhcF9nZXRlcnIoY3N0YXRlLT5icGZfcGNhcCksCi0JCSAgICBQQ0FQX0VSUkJVRl9TSVpFLCBmbXQsIGFwKTsKKwkodm9pZCl2c25wcmludGYoY3N0YXRlLT5icGZfcGNhcC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCSAgICBmbXQsIGFwKTsKIAl2YV9lbmQoYXApOwogCWxvbmdqbXAoY3N0YXRlLT50b3BfY3R4LCAxKTsKLQkvKiBOT1RSRUFDSEVEICovCisJLypOT1RSRUFDSEVEKi8KIH0KIAotc3RhdGljIHZvaWQgaW5pdF9saW5rdHlwZShjb21waWxlcl9zdGF0ZV90ICosIHBjYXBfdCAqKTsKK3N0YXRpYyBpbnQgaW5pdF9saW5rdHlwZShjb21waWxlcl9zdGF0ZV90ICosIHBjYXBfdCAqKTsKIAogc3RhdGljIHZvaWQgaW5pdF9yZWdzKGNvbXBpbGVyX3N0YXRlX3QgKik7CiBzdGF0aWMgaW50IGFsbG9jX3JlZyhjb21waWxlcl9zdGF0ZV90ICopOwogc3RhdGljIHZvaWQgZnJlZV9yZWcoY29tcGlsZXJfc3RhdGVfdCAqLCBpbnQpOwogCiBzdGF0aWMgdm9pZCBpbml0Y2h1bmtzKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSk7CitzdGF0aWMgdm9pZCAqbmV3Y2h1bmtfbm9sb25nam1wKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgc2l6ZV90KTsKIHN0YXRpYyB2b2lkICpuZXdjaHVuayhjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIHNpemVfdCk7CiBzdGF0aWMgdm9pZCBmcmVlY2h1bmtzKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSk7CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBibG9jayAqbmV3X2Jsb2NrKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgaW50KTsKQEAgLTQ1NiwyMSArNDg4LDIxIEBACiBzdGF0aWMgdm9pZCBiYWNrcGF0Y2goc3RydWN0IGJsb2NrICosIHN0cnVjdCBibG9jayAqKTsKIHN0YXRpYyB2b2lkIG1lcmdlKHN0cnVjdCBibG9jayAqLCBzdHJ1Y3QgYmxvY2sgKik7CiBzdGF0aWMgc3RydWN0IGJsb2NrICpnZW5fY21wKGNvbXBpbGVyX3N0YXRlX3QgKiwgZW51bSBlX29mZnJlbCwgdV9pbnQsCi0gICAgdV9pbnQsIGJwZl9pbnQzMik7CisgICAgdV9pbnQsIGJwZl91X2ludDMyKTsKIHN0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9jbXBfZ3QoY29tcGlsZXJfc3RhdGVfdCAqLCBlbnVtIGVfb2ZmcmVsLCB1X2ludCwKLSAgICB1X2ludCwgYnBmX2ludDMyKTsKKyAgICB1X2ludCwgYnBmX3VfaW50MzIpOwogc3RhdGljIHN0cnVjdCBibG9jayAqZ2VuX2NtcF9nZShjb21waWxlcl9zdGF0ZV90ICosIGVudW0gZV9vZmZyZWwsIHVfaW50LAotICAgIHVfaW50LCBicGZfaW50MzIpOworICAgIHVfaW50LCBicGZfdV9pbnQzMik7CiBzdGF0aWMgc3RydWN0IGJsb2NrICpnZW5fY21wX2x0KGNvbXBpbGVyX3N0YXRlX3QgKiwgZW51bSBlX29mZnJlbCwgdV9pbnQsCi0gICAgdV9pbnQsIGJwZl9pbnQzMik7CisgICAgdV9pbnQsIGJwZl91X2ludDMyKTsKIHN0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9jbXBfbGUoY29tcGlsZXJfc3RhdGVfdCAqLCBlbnVtIGVfb2ZmcmVsLCB1X2ludCwKLSAgICB1X2ludCwgYnBmX2ludDMyKTsKKyAgICB1X2ludCwgYnBmX3VfaW50MzIpOwogc3RhdGljIHN0cnVjdCBibG9jayAqZ2VuX21jbXAoY29tcGlsZXJfc3RhdGVfdCAqLCBlbnVtIGVfb2ZmcmVsLCB1X2ludCwKLSAgICB1X2ludCwgYnBmX2ludDMyLCBicGZfdV9pbnQzMik7CisgICAgdV9pbnQsIGJwZl91X2ludDMyLCBicGZfdV9pbnQzMik7CiBzdGF0aWMgc3RydWN0IGJsb2NrICpnZW5fYmNtcChjb21waWxlcl9zdGF0ZV90ICosIGVudW0gZV9vZmZyZWwsIHVfaW50LAogICAgIHVfaW50LCBjb25zdCB1X2NoYXIgKik7Ci1zdGF0aWMgc3RydWN0IGJsb2NrICpnZW5fbmNtcChjb21waWxlcl9zdGF0ZV90ICosIGVudW0gZV9vZmZyZWwsIGJwZl91X2ludDMyLAotICAgIGJwZl91X2ludDMyLCBicGZfdV9pbnQzMiwgYnBmX3VfaW50MzIsIGludCwgYnBmX2ludDMyKTsKK3N0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9uY21wKGNvbXBpbGVyX3N0YXRlX3QgKiwgZW51bSBlX29mZnJlbCwgdV9pbnQsCisgICAgdV9pbnQsIGJwZl91X2ludDMyLCBpbnQsIGludCwgYnBmX3VfaW50MzIpOwogc3RhdGljIHN0cnVjdCBzbGlzdCAqZ2VuX2xvYWRfYWJzb2Zmc2V0cmVsKGNvbXBpbGVyX3N0YXRlX3QgKiwgYnBmX2Fic19vZmZzZXQgKiwKICAgICB1X2ludCwgdV9pbnQpOwogc3RhdGljIHN0cnVjdCBzbGlzdCAqZ2VuX2xvYWRfYShjb21waWxlcl9zdGF0ZV90ICosIGVudW0gZV9vZmZyZWwsIHVfaW50LApAQCAtNDc5LDkgKzUxMSw5IEBACiBzdGF0aWMgc3RydWN0IGJsb2NrICpnZW5fdW5jb25kKGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50KTsKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJsb2NrICpnZW5fdHJ1ZShjb21waWxlcl9zdGF0ZV90ICopOwogc3RhdGljIGlubGluZSBzdHJ1Y3QgYmxvY2sgKmdlbl9mYWxzZShjb21waWxlcl9zdGF0ZV90ICopOwotc3RhdGljIHN0cnVjdCBibG9jayAqZ2VuX2V0aGVyX2xpbmt0eXBlKGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50KTsKLXN0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9pcG5ldF9saW5rdHlwZShjb21waWxlcl9zdGF0ZV90ICosIGludCk7Ci1zdGF0aWMgc3RydWN0IGJsb2NrICpnZW5fbGludXhfc2xsX2xpbmt0eXBlKGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50KTsKK3N0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9ldGhlcl9saW5rdHlwZShjb21waWxlcl9zdGF0ZV90ICosIGJwZl91X2ludDMyKTsKK3N0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9pcG5ldF9saW5rdHlwZShjb21waWxlcl9zdGF0ZV90ICosIGJwZl91X2ludDMyKTsKK3N0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9saW51eF9zbGxfbGlua3R5cGUoY29tcGlsZXJfc3RhdGVfdCAqLCBicGZfdV9pbnQzMik7CiBzdGF0aWMgc3RydWN0IHNsaXN0ICpnZW5fbG9hZF9wcmlzbV9sbHByZWZpeGxlbihjb21waWxlcl9zdGF0ZV90ICopOwogc3RhdGljIHN0cnVjdCBzbGlzdCAqZ2VuX2xvYWRfYXZzX2xscHJlZml4bGVuKGNvbXBpbGVyX3N0YXRlX3QgKik7CiBzdGF0aWMgc3RydWN0IHNsaXN0ICpnZW5fbG9hZF9yYWRpb3RhcF9sbHByZWZpeGxlbihjb21waWxlcl9zdGF0ZV90ICopOwpAQCAtNDg5LDE1ICs1MjEsMTUgQEAKIHN0YXRpYyB2b2lkIGluc2VydF9jb21wdXRlX3Zsb2Zmc2V0cyhjb21waWxlcl9zdGF0ZV90ICosIHN0cnVjdCBibG9jayAqKTsKIHN0YXRpYyBzdHJ1Y3Qgc2xpc3QgKmdlbl9hYnNfb2Zmc2V0X3ZhcnBhcnQoY29tcGlsZXJfc3RhdGVfdCAqLAogICAgIGJwZl9hYnNfb2Zmc2V0ICopOwotc3RhdGljIGludCBldGhlcnR5cGVfdG9fcHBwdHlwZShpbnQpOwotc3RhdGljIHN0cnVjdCBibG9jayAqZ2VuX2xpbmt0eXBlKGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50KTsKK3N0YXRpYyBicGZfdV9pbnQzMiBldGhlcnR5cGVfdG9fcHBwdHlwZShicGZfdV9pbnQzMik7CitzdGF0aWMgc3RydWN0IGJsb2NrICpnZW5fbGlua3R5cGUoY29tcGlsZXJfc3RhdGVfdCAqLCBicGZfdV9pbnQzMik7CiBzdGF0aWMgc3RydWN0IGJsb2NrICpnZW5fc25hcChjb21waWxlcl9zdGF0ZV90ICosIGJwZl91X2ludDMyLCBicGZfdV9pbnQzMik7Ci1zdGF0aWMgc3RydWN0IGJsb2NrICpnZW5fbGxjX2xpbmt0eXBlKGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50KTsKK3N0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9sbGNfbGlua3R5cGUoY29tcGlsZXJfc3RhdGVfdCAqLCBicGZfdV9pbnQzMik7CiBzdGF0aWMgc3RydWN0IGJsb2NrICpnZW5faG9zdG9wKGNvbXBpbGVyX3N0YXRlX3QgKiwgYnBmX3VfaW50MzIsIGJwZl91X2ludDMyLAotICAgIGludCwgaW50LCB1X2ludCwgdV9pbnQpOworICAgIGludCwgYnBmX3VfaW50MzIsIHVfaW50LCB1X2ludCk7CiAjaWZkZWYgSU5FVDYKIHN0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9ob3N0b3A2KGNvbXBpbGVyX3N0YXRlX3QgKiwgc3RydWN0IGluNl9hZGRyICosCi0gICAgc3RydWN0IGluNl9hZGRyICosIGludCwgaW50LCB1X2ludCwgdV9pbnQpOworICAgIHN0cnVjdCBpbjZfYWRkciAqLCBpbnQsIGJwZl91X2ludDMyLCB1X2ludCwgdV9pbnQpOwogI2VuZGlmCiBzdGF0aWMgc3RydWN0IGJsb2NrICpnZW5fYWhvc3RvcChjb21waWxlcl9zdGF0ZV90ICosIGNvbnN0IHVfY2hhciAqLCBpbnQpOwogc3RhdGljIHN0cnVjdCBibG9jayAqZ2VuX2Vob3N0b3AoY29tcGlsZXJfc3RhdGVfdCAqLCBjb25zdCB1X2NoYXIgKiwgaW50KTsKQEAgLTUwNiw3ICs1MzgsNyBAQAogc3RhdGljIHN0cnVjdCBibG9jayAqZ2VuX3dsYW5ob3N0b3AoY29tcGlsZXJfc3RhdGVfdCAqLCBjb25zdCB1X2NoYXIgKiwgaW50KTsKIHN0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9pcGZjaG9zdG9wKGNvbXBpbGVyX3N0YXRlX3QgKiwgY29uc3QgdV9jaGFyICosIGludCk7CiBzdGF0aWMgc3RydWN0IGJsb2NrICpnZW5fZG5ob3N0b3AoY29tcGlsZXJfc3RhdGVfdCAqLCBicGZfdV9pbnQzMiwgaW50KTsKLXN0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9tcGxzX2xpbmt0eXBlKGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50KTsKK3N0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9tcGxzX2xpbmt0eXBlKGNvbXBpbGVyX3N0YXRlX3QgKiwgYnBmX3VfaW50MzIpOwogc3RhdGljIHN0cnVjdCBibG9jayAqZ2VuX2hvc3QoY29tcGlsZXJfc3RhdGVfdCAqLCBicGZfdV9pbnQzMiwgYnBmX3VfaW50MzIsCiAgICAgaW50LCBpbnQsIGludCk7CiAjaWZkZWYgSU5FVDYKQEAgLTUxOCwyMyArNTUwLDI1IEBACiAgICAgc3RydWN0IGFkZHJpbmZvICosIGludCwgaW50KTsKICNlbmRpZgogc3RhdGljIHN0cnVjdCBibG9jayAqZ2VuX2lwZnJhZyhjb21waWxlcl9zdGF0ZV90ICopOwotc3RhdGljIHN0cnVjdCBibG9jayAqZ2VuX3BvcnRhdG9tKGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50LCBicGZfaW50MzIpOwotc3RhdGljIHN0cnVjdCBibG9jayAqZ2VuX3BvcnRyYW5nZWF0b20oY29tcGlsZXJfc3RhdGVfdCAqLCBpbnQsIGJwZl9pbnQzMiwKLSAgICBicGZfaW50MzIpOwotc3RhdGljIHN0cnVjdCBibG9jayAqZ2VuX3BvcnRhdG9tNihjb21waWxlcl9zdGF0ZV90ICosIGludCwgYnBmX2ludDMyKTsKLXN0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9wb3J0cmFuZ2VhdG9tNihjb21waWxlcl9zdGF0ZV90ICosIGludCwgYnBmX2ludDMyLAotICAgIGJwZl9pbnQzMik7Ci1zdHJ1Y3QgYmxvY2sgKmdlbl9wb3J0b3AoY29tcGlsZXJfc3RhdGVfdCAqLCBpbnQsIGludCwgaW50KTsKLXN0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9wb3J0KGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50LCBpbnQsIGludCk7Ci1zdHJ1Y3QgYmxvY2sgKmdlbl9wb3J0cmFuZ2VvcChjb21waWxlcl9zdGF0ZV90ICosIGludCwgaW50LCBpbnQsIGludCk7Ci1zdGF0aWMgc3RydWN0IGJsb2NrICpnZW5fcG9ydHJhbmdlKGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50LCBpbnQsIGludCwgaW50KTsKLXN0cnVjdCBibG9jayAqZ2VuX3BvcnRvcDYoY29tcGlsZXJfc3RhdGVfdCAqLCBpbnQsIGludCwgaW50KTsKLXN0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9wb3J0Nihjb21waWxlcl9zdGF0ZV90ICosIGludCwgaW50LCBpbnQpOwotc3RydWN0IGJsb2NrICpnZW5fcG9ydHJhbmdlb3A2KGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50LCBpbnQsIGludCwgaW50KTsKLXN0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9wb3J0cmFuZ2U2KGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50LCBpbnQsIGludCwgaW50KTsKK3N0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9wb3J0YXRvbShjb21waWxlcl9zdGF0ZV90ICosIGludCwgYnBmX3VfaW50MzIpOworc3RhdGljIHN0cnVjdCBibG9jayAqZ2VuX3BvcnRyYW5nZWF0b20oY29tcGlsZXJfc3RhdGVfdCAqLCB1X2ludCwgYnBmX3VfaW50MzIsCisgICAgYnBmX3VfaW50MzIpOworc3RhdGljIHN0cnVjdCBibG9jayAqZ2VuX3BvcnRhdG9tNihjb21waWxlcl9zdGF0ZV90ICosIGludCwgYnBmX3VfaW50MzIpOworc3RhdGljIHN0cnVjdCBibG9jayAqZ2VuX3BvcnRyYW5nZWF0b202KGNvbXBpbGVyX3N0YXRlX3QgKiwgdV9pbnQsIGJwZl91X2ludDMyLAorICAgIGJwZl91X2ludDMyKTsKK3N0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9wb3J0b3AoY29tcGlsZXJfc3RhdGVfdCAqLCB1X2ludCwgdV9pbnQsIGludCk7CitzdGF0aWMgc3RydWN0IGJsb2NrICpnZW5fcG9ydChjb21waWxlcl9zdGF0ZV90ICosIHVfaW50LCBpbnQsIGludCk7CitzdGF0aWMgc3RydWN0IGJsb2NrICpnZW5fcG9ydHJhbmdlb3AoY29tcGlsZXJfc3RhdGVfdCAqLCB1X2ludCwgdV9pbnQsCisgICAgYnBmX3VfaW50MzIsIGludCk7CitzdGF0aWMgc3RydWN0IGJsb2NrICpnZW5fcG9ydHJhbmdlKGNvbXBpbGVyX3N0YXRlX3QgKiwgdV9pbnQsIHVfaW50LCBpbnQsIGludCk7CitzdHJ1Y3QgYmxvY2sgKmdlbl9wb3J0b3A2KGNvbXBpbGVyX3N0YXRlX3QgKiwgdV9pbnQsIHVfaW50LCBpbnQpOworc3RhdGljIHN0cnVjdCBibG9jayAqZ2VuX3BvcnQ2KGNvbXBpbGVyX3N0YXRlX3QgKiwgdV9pbnQsIGludCwgaW50KTsKK3N0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9wb3J0cmFuZ2VvcDYoY29tcGlsZXJfc3RhdGVfdCAqLCB1X2ludCwgdV9pbnQsCisgICAgYnBmX3VfaW50MzIsIGludCk7CitzdGF0aWMgc3RydWN0IGJsb2NrICpnZW5fcG9ydHJhbmdlNihjb21waWxlcl9zdGF0ZV90ICosIHVfaW50LCB1X2ludCwgaW50LCBpbnQpOwogc3RhdGljIGludCBsb29rdXBfcHJvdG8oY29tcGlsZXJfc3RhdGVfdCAqLCBjb25zdCBjaGFyICosIGludCk7Ci1zdGF0aWMgc3RydWN0IGJsb2NrICpnZW5fcHJvdG9jaGFpbihjb21waWxlcl9zdGF0ZV90ICosIGludCwgaW50LCBpbnQpOwotc3RhdGljIHN0cnVjdCBibG9jayAqZ2VuX3Byb3RvKGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50LCBpbnQsIGludCk7CitzdGF0aWMgc3RydWN0IGJsb2NrICpnZW5fcHJvdG9jaGFpbihjb21waWxlcl9zdGF0ZV90ICosIGJwZl91X2ludDMyLCBpbnQpOworc3RhdGljIHN0cnVjdCBibG9jayAqZ2VuX3Byb3RvKGNvbXBpbGVyX3N0YXRlX3QgKiwgYnBmX3VfaW50MzIsIGludCwgaW50KTsKIHN0YXRpYyBzdHJ1Y3Qgc2xpc3QgKnhmZXJfdG9feChjb21waWxlcl9zdGF0ZV90ICosIHN0cnVjdCBhcnRoICopOwogc3RhdGljIHN0cnVjdCBzbGlzdCAqeGZlcl90b19hKGNvbXBpbGVyX3N0YXRlX3QgKiwgc3RydWN0IGFydGggKik7CiBzdGF0aWMgc3RydWN0IGJsb2NrICpnZW5fbWFjX211bHRpY2FzdChjb21waWxlcl9zdGF0ZV90ICosIGludCk7CkBAIC01NDMsNiArNTc3LDkgQEAKIHN0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9nZW5ldmVfbGxfY2hlY2soY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlKTsKIAogc3RhdGljIHN0cnVjdCBibG9jayAqZ2VuX3BwaV9kbHRfY2hlY2soY29tcGlsZXJfc3RhdGVfdCAqKTsKK3N0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9hdG1maWVsZF9jb2RlX2ludGVybmFsKGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50LAorICAgIGJwZl91X2ludDMyLCBpbnQsIGludCk7CitzdGF0aWMgc3RydWN0IGJsb2NrICpnZW5fYXRtdHlwZV9sbGMoY29tcGlsZXJfc3RhdGVfdCAqKTsKIHN0YXRpYyBzdHJ1Y3QgYmxvY2sgKmdlbl9tc2dfYWJicmV2KGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50IHR5cGUpOwogCiBzdGF0aWMgdm9pZApAQCAtNTU4LDcgKzU5NSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkICoKLW5ld2NodW5rKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgc2l6ZV90IG4pCituZXdjaHVua19ub2xvbmdqbXAoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBzaXplX3QgbikKIHsKIAlzdHJ1Y3QgY2h1bmsgKmNwOwogCWludCBrOwpAQCAtNTc2LDIxICs2MTMsNDAgQEAKIAlpZiAobiA+IGNwLT5uX2xlZnQpIHsKIAkJKytjcDsKIAkJayA9ICsrY3N0YXRlLT5jdXJfY2h1bms7Ci0JCWlmIChrID49IE5DSFVOS1MpCi0JCQlicGZfZXJyb3IoY3N0YXRlLCAib3V0IG9mIG1lbW9yeSIpOworCQlpZiAoayA+PSBOQ0hVTktTKSB7CisJCQlicGZfc2V0X2Vycm9yKGNzdGF0ZSwgIm91dCBvZiBtZW1vcnkiKTsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KIAkJc2l6ZSA9IENIVU5LMFNJWkUgPDwgazsKIAkJY3AtPm0gPSAodm9pZCAqKW1hbGxvYyhzaXplKTsKLQkJaWYgKGNwLT5tID09IE5VTEwpCi0JCQlicGZfZXJyb3IoY3N0YXRlLCAib3V0IG9mIG1lbW9yeSIpOworCQlpZiAoY3AtPm0gPT0gTlVMTCkgeworCQkJYnBmX3NldF9lcnJvcihjc3RhdGUsICJvdXQgb2YgbWVtb3J5Iik7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CiAJCW1lbXNldCgoY2hhciAqKWNwLT5tLCAwLCBzaXplKTsKIAkJY3AtPm5fbGVmdCA9IHNpemU7Ci0JCWlmIChuID4gc2l6ZSkKLQkJCWJwZl9lcnJvcihjc3RhdGUsICJvdXQgb2YgbWVtb3J5Iik7CisJCWlmIChuID4gc2l6ZSkgeworCQkJYnBmX3NldF9lcnJvcihjc3RhdGUsICJvdXQgb2YgbWVtb3J5Iik7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CiAJfQogCWNwLT5uX2xlZnQgLT0gbjsKIAlyZXR1cm4gKHZvaWQgKikoKGNoYXIgKiljcC0+bSArIGNwLT5uX2xlZnQpOwogfQogCitzdGF0aWMgdm9pZCAqCituZXdjaHVuayhjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIHNpemVfdCBuKQoreworCXZvaWQgKnA7CisKKwlwID0gbmV3Y2h1bmtfbm9sb25nam1wKGNzdGF0ZSwgbik7CisJaWYgKHAgPT0gTlVMTCkgeworCQlsb25nam1wKGNzdGF0ZS0+dG9wX2N0eCwgMSk7CisJCS8qTk9UUkVBQ0hFRCovCisJfQorCXJldHVybiAocCk7Cit9CisKIHN0YXRpYyB2b2lkCiBmcmVlY2h1bmtzKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSkKIHsKQEAgLTYwMywxNCArNjU5LDE5IEBACiAKIC8qCiAgKiBBIHN0cmR1cCB3aG9zZSBhbGxvY2F0aW9ucyBhcmUgZnJlZWQgYWZ0ZXIgY29kZSBnZW5lcmF0aW9uIGlzIG92ZXIuCisgKiBUaGlzIGlzIHVzZWQgYnkgdGhlIGxleGljYWwgYW5hbHl6ZXIsIHNvIGl0IGNhbid0IGxvbmdqbXA7IGl0IGp1c3QKKyAqIHJldHVybnMgTlVMTCBvbiBhbiBhbGxvY2F0aW9uIGVycm9yLCBhbmQgdGhlIGNhbGxlcnMgbXVzdCBjaGVjaworICogZm9yIGl0LgogICovCiBjaGFyICoKIHNkdXAoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBjb25zdCBjaGFyICpzKQogewogCXNpemVfdCBuID0gc3RybGVuKHMpICsgMTsKLQljaGFyICpjcCA9IG5ld2NodW5rKGNzdGF0ZSwgbik7CisJY2hhciAqY3AgPSBuZXdjaHVua19ub2xvbmdqbXAoY3N0YXRlLCBuKTsKIAotCXN0cmxjcHkoY3AsIHMsIG4pOworCWlmIChjcCA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCXBjYXBfc3RybGNweShjcCwgcywgbik7CiAJcmV0dXJuIChjcCk7CiB9CiAKQEAgLTY2Miw3ICs3MjMsNyBAQAogCWNvbXBpbGVyX3N0YXRlX3QgY3N0YXRlOwogCWNvbnN0IGNoYXIgKiB2b2xhdGlsZSB4YnVmID0gYnVmOwogCXl5c2Nhbl90IHNjYW5uZXIgPSBOVUxMOwotCVlZX0JVRkZFUl9TVEFURSBpbl9idWZmZXIgPSBOVUxMOworCXZvbGF0aWxlIFlZX0JVRkZFUl9TVEFURSBpbl9idWZmZXIgPSBOVUxMOwogCXVfaW50IGxlbjsKIAlpbnQgIHJjOwogCkBAIC02NzEsNyArNzMyLDcgQEAKIAkgKiBsaW5rLWxheWVyIHR5cGUsIHNvIHdlIGNhbid0IHVzZSBpdC4KIAkgKi8KIAlpZiAoIXAtPmFjdGl2YXRlZCkgewotCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkgICAgIm5vdC15ZXQtYWN0aXZhdGVkIHBjYXBfdCBwYXNzZWQgdG8gcGNhcF9jb21waWxlIik7CiAJCXJldHVybiAoLTEpOwogCX0KQEAgLTY5Nyw3ICs3NTgsNyBAQAogCSAqIGZpbHRlciBmb3IgdGhpcyBwY2FwX3Q7IHdlIG1pZ2h0IGJlIHJ1bm5pbmcgaXQgZnJvbSB1c2VybGFuZAogCSAqIG9uIGNhcHR1cmVkIHBhY2tldHMgdG8gZG8gcGFja2V0IGNsYXNzaWZpY2F0aW9uLiAgV2UgcmVhbGx5CiAJICogbmVlZCBhIGJldHRlciB3YXkgb2YgaGFuZGxpbmcgdGhpcywgYnV0IHRoaXMgaXMgYWxsIHRoYXQKLQkgKiB0aGUgV2luUGNhcCBjb2RlIGRpZC4KKwkgKiB0aGUgV2luUGNhcCByZW1vdGUgY2FwdHVyZSBjb2RlIGRpZC4KIAkgKi8KIAlpZiAocC0+c2F2ZV9jdXJyZW50X2ZpbHRlcl9vcCAhPSBOVUxMKQogCQkocC0+c2F2ZV9jdXJyZW50X2ZpbHRlcl9vcCkocCwgYnVmKTsKQEAgLTcwOCwyNSArNzY5LDE4IEBACiAjaWZkZWYgSU5FVDYKIAljc3RhdGUuYWkgPSBOVUxMOwogI2VuZGlmCisJY3N0YXRlLmUgPSBOVUxMOwogCWNzdGF0ZS5pYy5yb290ID0gTlVMTDsKIAljc3RhdGUuaWMuY3VyX21hcmsgPSAwOwogCWNzdGF0ZS5icGZfcGNhcCA9IHA7CisJY3N0YXRlLmVycm9yX3NldCA9IDA7CiAJaW5pdF9yZWdzKCZjc3RhdGUpOwogCi0JaWYgKHNldGptcChjc3RhdGUudG9wX2N0eCkpIHsKLSNpZmRlZiBJTkVUNgotCQlpZiAoY3N0YXRlLmFpICE9IE5VTEwpCi0JCQlmcmVlYWRkcmluZm8oY3N0YXRlLmFpKTsKLSNlbmRpZgotCQlyYyA9IC0xOwotCQlnb3RvIHF1aXQ7Ci0JfQotCiAJY3N0YXRlLm5ldG1hc2sgPSBtYXNrOwogCiAJY3N0YXRlLnNuYXBsZW4gPSBwY2FwX3NuYXBzaG90KHApOwogCWlmIChjc3RhdGUuc25hcGxlbiA9PSAwKSB7Ci0JCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgInNuYXBsZW4gb2YgMCByZWplY3RzIGFsbCBwYWNrZXRzIik7CiAJCXJjID0gLTE7CiAJCWdvdG8gcXVpdDsKQEAgLTc0MywxOSArNzk3LDUzIEBACiAJICovCiAJcGNhcF9zZXRfZXh0cmEoJmNzdGF0ZSwgc2Nhbm5lcik7CiAKLQlpbml0X2xpbmt0eXBlKCZjc3RhdGUsIHApOwotCSh2b2lkKXBjYXBfcGFyc2Uoc2Nhbm5lciwgJmNzdGF0ZSk7CisJaWYgKGluaXRfbGlua3R5cGUoJmNzdGF0ZSwgcCkgPT0gLTEpIHsKKwkJcmMgPSAtMTsKKwkJZ290byBxdWl0OworCX0KKwlpZiAocGNhcF9wYXJzZShzY2FubmVyLCAmY3N0YXRlKSAhPSAwKSB7CisjaWZkZWYgSU5FVDYKKwkJaWYgKGNzdGF0ZS5haSAhPSBOVUxMKQorCQkJZnJlZWFkZHJpbmZvKGNzdGF0ZS5haSk7CisjZW5kaWYKKwkJaWYgKGNzdGF0ZS5lICE9IE5VTEwpCisJCQlmcmVlKGNzdGF0ZS5lKTsKKwkJcmMgPSAtMTsKKwkJZ290byBxdWl0OworCX0KIAotCWlmIChjc3RhdGUuaWMucm9vdCA9PSBOVUxMKQorCWlmIChjc3RhdGUuaWMucm9vdCA9PSBOVUxMKSB7CisJCS8qCisJCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSBnZW5fcmV0YmxrKCkuCisJCSAqLworCQlpZiAoc2V0am1wKGNzdGF0ZS50b3BfY3R4KSkgeworCQkJcmMgPSAtMTsKKwkJCWdvdG8gcXVpdDsKKwkJfQogCQljc3RhdGUuaWMucm9vdCA9IGdlbl9yZXRibGsoJmNzdGF0ZSwgY3N0YXRlLnNuYXBsZW4pOworCX0KIAogCWlmIChvcHRpbWl6ZSAmJiAhY3N0YXRlLm5vX29wdGltaXplKSB7Ci0JCWJwZl9vcHRpbWl6ZSgmY3N0YXRlLCAmY3N0YXRlLmljKTsKKwkJaWYgKGJwZl9vcHRpbWl6ZSgmY3N0YXRlLmljLCBwLT5lcnJidWYpID09IC0xKSB7CisJCQkvKiBGYWlsdXJlICovCisJCQlyYyA9IC0xOworCQkJZ290byBxdWl0OworCQl9CiAJCWlmIChjc3RhdGUuaWMucm9vdCA9PSBOVUxMIHx8Ci0JCSAgICAoY3N0YXRlLmljLnJvb3QtPnMuY29kZSA9PSAoQlBGX1JFVHxCUEZfSykgJiYgY3N0YXRlLmljLnJvb3QtPnMuayA9PSAwKSkKLQkJCWJwZl9lcnJvcigmY3N0YXRlLCAiZXhwcmVzc2lvbiByZWplY3RzIGFsbCBwYWNrZXRzIik7CisJCSAgICAoY3N0YXRlLmljLnJvb3QtPnMuY29kZSA9PSAoQlBGX1JFVHxCUEZfSykgJiYgY3N0YXRlLmljLnJvb3QtPnMuayA9PSAwKSkgeworCQkJKHZvaWQpc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJICAgICJleHByZXNzaW9uIHJlamVjdHMgYWxsIHBhY2tldHMiKTsKKwkJCXJjID0gLTE7CisJCQlnb3RvIHF1aXQ7CisJCX0KIAl9Ci0JcHJvZ3JhbS0+YmZfaW5zbnMgPSBpY29kZV90b19mY29kZSgmY3N0YXRlLCAmY3N0YXRlLmljLCBjc3RhdGUuaWMucm9vdCwgJmxlbik7CisJcHJvZ3JhbS0+YmZfaW5zbnMgPSBpY29kZV90b19mY29kZSgmY3N0YXRlLmljLAorCSAgICBjc3RhdGUuaWMucm9vdCwgJmxlbiwgcC0+ZXJyYnVmKTsKKwlpZiAocHJvZ3JhbS0+YmZfaW5zbnMgPT0gTlVMTCkgeworCQkvKiBGYWlsdXJlICovCisJCXJjID0gLTE7CisJCWdvdG8gcXVpdDsKKwl9CiAJcHJvZ3JhbS0+YmZfbGVuID0gbGVuOwogCiAJcmMgPSAwOyAgLyogV2UncmUgYWxsIG9rYXkgKi8KQEAgLTg1MSwxMiArOTM5LDE5IEBACiAJKnAgPSBiMTsKIH0KIAotdm9pZAoraW50CiBmaW5pc2hfcGFyc2UoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBzdHJ1Y3QgYmxvY2sgKnApCiB7CiAJc3RydWN0IGJsb2NrICpwcGlfZGx0X2NoZWNrOwogCiAJLyoKKwkgKiBDYXRjaCBlcnJvcnMgcmVwb3J0ZWQgYnkgdXMgYW5kIHJvdXRpbmVzIGJlbG93IHVzLCBhbmQgcmV0dXJuIC0xCisJICogb24gYW4gZXJyb3IuCisJICovCisJaWYgKHNldGptcChjc3RhdGUtPnRvcF9jdHgpKQorCQlyZXR1cm4gKC0xKTsKKworCS8qCiAJICogSW5zZXJ0IGJlZm9yZSB0aGUgc3RhdGVtZW50cyBvZiB0aGUgZmlyc3QgKHJvb3QpIGJsb2NrIGFueQogCSAqIHN0YXRlbWVudHMgbmVlZGVkIHRvIGxvYWQgdGhlIGxlbmd0aHMgb2YgYW55IHZhcmlhYmxlLWxlbmd0aAogCSAqIGhlYWRlcnMgaW50byByZWdpc3RlcnMuCkBAIC04OTgsNiArOTkzLDcgQEAKIAlwLT5zZW5zZSA9ICFwLT5zZW5zZTsKIAliYWNrcGF0Y2gocCwgZ2VuX3JldGJsayhjc3RhdGUsIDApKTsKIAljc3RhdGUtPmljLnJvb3QgPSBwLT5oZWFkOworCXJldHVybiAoMCk7CiB9CiAKIHZvaWQKQEAgLTkyOSw0MiArMTAyNSw0MiBAQAogCiBzdGF0aWMgc3RydWN0IGJsb2NrICoKIGdlbl9jbXAoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBlbnVtIGVfb2ZmcmVsIG9mZnJlbCwgdV9pbnQgb2Zmc2V0LAotICAgIHVfaW50IHNpemUsIGJwZl9pbnQzMiB2KQorICAgIHVfaW50IHNpemUsIGJwZl91X2ludDMyIHYpCiB7CiAJcmV0dXJuIGdlbl9uY21wKGNzdGF0ZSwgb2ZmcmVsLCBvZmZzZXQsIHNpemUsIDB4ZmZmZmZmZmYsIEJQRl9KRVEsIDAsIHYpOwogfQogCiBzdGF0aWMgc3RydWN0IGJsb2NrICoKIGdlbl9jbXBfZ3QoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBlbnVtIGVfb2ZmcmVsIG9mZnJlbCwgdV9pbnQgb2Zmc2V0LAotICAgIHVfaW50IHNpemUsIGJwZl9pbnQzMiB2KQorICAgIHVfaW50IHNpemUsIGJwZl91X2ludDMyIHYpCiB7CiAJcmV0dXJuIGdlbl9uY21wKGNzdGF0ZSwgb2ZmcmVsLCBvZmZzZXQsIHNpemUsIDB4ZmZmZmZmZmYsIEJQRl9KR1QsIDAsIHYpOwogfQogCiBzdGF0aWMgc3RydWN0IGJsb2NrICoKIGdlbl9jbXBfZ2UoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBlbnVtIGVfb2ZmcmVsIG9mZnJlbCwgdV9pbnQgb2Zmc2V0LAotICAgIHVfaW50IHNpemUsIGJwZl9pbnQzMiB2KQorICAgIHVfaW50IHNpemUsIGJwZl91X2ludDMyIHYpCiB7CiAJcmV0dXJuIGdlbl9uY21wKGNzdGF0ZSwgb2ZmcmVsLCBvZmZzZXQsIHNpemUsIDB4ZmZmZmZmZmYsIEJQRl9KR0UsIDAsIHYpOwogfQogCiBzdGF0aWMgc3RydWN0IGJsb2NrICoKIGdlbl9jbXBfbHQoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBlbnVtIGVfb2ZmcmVsIG9mZnJlbCwgdV9pbnQgb2Zmc2V0LAotICAgIHVfaW50IHNpemUsIGJwZl9pbnQzMiB2KQorICAgIHVfaW50IHNpemUsIGJwZl91X2ludDMyIHYpCiB7CiAJcmV0dXJuIGdlbl9uY21wKGNzdGF0ZSwgb2ZmcmVsLCBvZmZzZXQsIHNpemUsIDB4ZmZmZmZmZmYsIEJQRl9KR0UsIDEsIHYpOwogfQogCiBzdGF0aWMgc3RydWN0IGJsb2NrICoKIGdlbl9jbXBfbGUoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBlbnVtIGVfb2ZmcmVsIG9mZnJlbCwgdV9pbnQgb2Zmc2V0LAotICAgIHVfaW50IHNpemUsIGJwZl9pbnQzMiB2KQorICAgIHVfaW50IHNpemUsIGJwZl91X2ludDMyIHYpCiB7CiAJcmV0dXJuIGdlbl9uY21wKGNzdGF0ZSwgb2ZmcmVsLCBvZmZzZXQsIHNpemUsIDB4ZmZmZmZmZmYsIEJQRl9KR1QsIDEsIHYpOwogfQogCiBzdGF0aWMgc3RydWN0IGJsb2NrICoKIGdlbl9tY21wKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgZW51bSBlX29mZnJlbCBvZmZyZWwsIHVfaW50IG9mZnNldCwKLSAgICB1X2ludCBzaXplLCBicGZfaW50MzIgdiwgYnBmX3VfaW50MzIgbWFzaykKKyAgICB1X2ludCBzaXplLCBicGZfdV9pbnQzMiB2LCBicGZfdV9pbnQzMiBtYXNrKQogewogCXJldHVybiBnZW5fbmNtcChjc3RhdGUsIG9mZnJlbCwgb2Zmc2V0LCBzaXplLCBtYXNrLCBCUEZfSkVRLCAwLCB2KTsKIH0KQEAgLTk3OCwxMCArMTA3NCw5IEBACiAJYiA9IE5VTEw7CiAJd2hpbGUgKHNpemUgPj0gNCkgewogCQlyZWdpc3RlciBjb25zdCB1X2NoYXIgKnAgPSAmdltzaXplIC0gNF07Ci0JCWJwZl9pbnQzMiB3ID0gKChicGZfaW50MzIpcFswXSA8PCAyNCkgfAotCQkgICAgKChicGZfaW50MzIpcFsxXSA8PCAxNikgfCAoKGJwZl9pbnQzMilwWzJdIDw8IDgpIHwgcFszXTsKIAotCQl0bXAgPSBnZW5fY21wKGNzdGF0ZSwgb2ZmcmVsLCBvZmZzZXQgKyBzaXplIC0gNCwgQlBGX1csIHcpOworCQl0bXAgPSBnZW5fY21wKGNzdGF0ZSwgb2ZmcmVsLCBvZmZzZXQgKyBzaXplIC0gNCwgQlBGX1csCisJCSAgICBFWFRSQUNUX0JFX1VfNChwKSk7CiAJCWlmIChiICE9IE5VTEwpCiAJCQlnZW5fYW5kKGIsIHRtcCk7CiAJCWIgPSB0bXA7CkBAIC05ODksMTYgKzEwODQsMTYgQEAKIAl9CiAJd2hpbGUgKHNpemUgPj0gMikgewogCQlyZWdpc3RlciBjb25zdCB1X2NoYXIgKnAgPSAmdltzaXplIC0gMl07Ci0JCWJwZl9pbnQzMiB3ID0gKChicGZfaW50MzIpcFswXSA8PCA4KSB8IHBbMV07CiAKLQkJdG1wID0gZ2VuX2NtcChjc3RhdGUsIG9mZnJlbCwgb2Zmc2V0ICsgc2l6ZSAtIDIsIEJQRl9ILCB3KTsKKwkJdG1wID0gZ2VuX2NtcChjc3RhdGUsIG9mZnJlbCwgb2Zmc2V0ICsgc2l6ZSAtIDIsIEJQRl9ILAorCQkgICAgRVhUUkFDVF9CRV9VXzIocCkpOwogCQlpZiAoYiAhPSBOVUxMKQogCQkJZ2VuX2FuZChiLCB0bXApOwogCQliID0gdG1wOwogCQlzaXplIC09IDI7CiAJfQogCWlmIChzaXplID4gMCkgewotCQl0bXAgPSBnZW5fY21wKGNzdGF0ZSwgb2ZmcmVsLCBvZmZzZXQsIEJQRl9CLCAoYnBmX2ludDMyKXZbMF0pOworCQl0bXAgPSBnZW5fY21wKGNzdGF0ZSwgb2ZmcmVsLCBvZmZzZXQsIEJQRl9CLCB2WzBdKTsKIAkJaWYgKGIgIT0gTlVMTCkKIAkJCWdlbl9hbmQoYiwgdG1wKTsKIAkJYiA9IHRtcDsKQEAgLTEwMTMsOSArMTEwOCw5IEBACiAgKiBzaG91bGQgdGVzdCB0aGUgb3Bwb3NpdGUgb2YgImp0eXBlIi4KICAqLwogc3RhdGljIHN0cnVjdCBibG9jayAqCi1nZW5fbmNtcChjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGVudW0gZV9vZmZyZWwgb2ZmcmVsLCBicGZfdV9pbnQzMiBvZmZzZXQsCi0gICAgYnBmX3VfaW50MzIgc2l6ZSwgYnBmX3VfaW50MzIgbWFzaywgYnBmX3VfaW50MzIganR5cGUsIGludCByZXZlcnNlLAotICAgIGJwZl9pbnQzMiB2KQorZ2VuX25jbXAoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBlbnVtIGVfb2ZmcmVsIG9mZnJlbCwgdV9pbnQgb2Zmc2V0LAorICAgIHVfaW50IHNpemUsIGJwZl91X2ludDMyIG1hc2ssIGludCBqdHlwZSwgaW50IHJldmVyc2UsCisgICAgYnBmX3VfaW50MzIgdikKIHsKIAlzdHJ1Y3Qgc2xpc3QgKnMsICpzMjsKIAlzdHJ1Y3QgYmxvY2sgKmI7CkBAIC0xMDM2LDcgKzExMzEsNyBAQAogCXJldHVybiBiOwogfQogCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogaW5pdF9saW5rdHlwZShjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIHBjYXBfdCAqcCkKIHsKIAljc3RhdGUtPnBjYXBfZmRkaXBhZCA9IHAtPmZkZGlwYWQ7CkBAIC0xMjQxLDYgKzEzMzYsNyBAQAogCQljc3RhdGUtPm9mZl9saW5raGRyLmlzX3ZhcmlhYmxlID0gMTsKIAkJLyogRmFsbCB0aHJvdWdoLCA4MDIuMTEgZG9lc24ndCBoYXZlIGEgdmFyaWFibGUgbGluawogCQkgKiBwcmVmaXggYnV0IGlzIG90aGVyd2lzZSB0aGUgc2FtZS4gKi8KKwkJLyogRkFMTFRIUk9VR0ggKi8KIAogCWNhc2UgRExUX0lFRUU4MDJfMTE6CiAJCS8qCkBAIC0xMzMwLDEzICsxNDI2LDIwIEBACiAJCWNzdGF0ZS0+b2ZmX25sX25vc25hcCA9IDA7CS8qIG5vIDgwMi4yIExMQyAqLwogCQlicmVhazsKIAotCWNhc2UgRExUX0xJTlVYX1NMTDoJLyogZmFrZSBoZWFkZXIgZm9yIExpbnV4IGNvb2tlZCBzb2NrZXQgKi8KKwljYXNlIERMVF9MSU5VWF9TTEw6CS8qIGZha2UgaGVhZGVyIGZvciBMaW51eCBjb29rZWQgc29ja2V0IHYxICovCiAJCWNzdGF0ZS0+b2ZmX2xpbmt0eXBlLmNvbnN0YW50X3BhcnQgPSAxNDsKIAkJY3N0YXRlLT5vZmZfbGlua3BsLmNvbnN0YW50X3BhcnQgPSAxNjsKIAkJY3N0YXRlLT5vZmZfbmwgPSAwOwogCQljc3RhdGUtPm9mZl9ubF9ub3NuYXAgPSAwOwkvKiBubyA4MDIuMiBMTEMgKi8KIAkJYnJlYWs7CiAKKwljYXNlIERMVF9MSU5VWF9TTEwyOgkvKiBmYWtlIGhlYWRlciBmb3IgTGludXggY29va2VkIHNvY2tldCB2MiAqLworCQljc3RhdGUtPm9mZl9saW5rdHlwZS5jb25zdGFudF9wYXJ0ID0gMDsKKwkJY3N0YXRlLT5vZmZfbGlua3BsLmNvbnN0YW50X3BhcnQgPSAyMDsKKwkJY3N0YXRlLT5vZmZfbmwgPSAwOworCQljc3RhdGUtPm9mZl9ubF9ub3NuYXAgPSAwOwkvKiBubyA4MDIuMiBMTEMgKi8KKwkJYnJlYWs7CisKIAljYXNlIERMVF9MVEFMSzoKIAkJLyoKIAkJICogTG9jYWxUYWxrIGRvZXMgaGF2ZSBhIDEtYnl0ZSB0eXBlIGZpZWxkIGluIHRoZSBMTEFQIGhlYWRlciwKQEAgLTE2MTIsMTIgKzE3MTUsMTQgQEAKIAkJCWNzdGF0ZS0+b2ZmX25sID0gT0ZGU0VUX05PVF9TRVQ7CiAJCQljc3RhdGUtPm9mZl9ubF9ub3NuYXAgPSBPRkZTRVRfTk9UX1NFVDsKIAkJfSBlbHNlIHsKLQkJCWJwZl9lcnJvcihjc3RhdGUsICJ1bmtub3duIGRhdGEgbGluayB0eXBlICVkIiwgY3N0YXRlLT5saW5rdHlwZSk7CisJCQlicGZfc2V0X2Vycm9yKGNzdGF0ZSwgInVua25vd24gZGF0YSBsaW5rIHR5cGUgJWQiLCBjc3RhdGUtPmxpbmt0eXBlKTsKKwkJCXJldHVybiAoLTEpOwogCQl9CiAJCWJyZWFrOwogCX0KIAogCWNzdGF0ZS0+b2ZmX291dGVybW9zdGxpbmtoZHIgPSBjc3RhdGUtPm9mZl9wcmV2bGlua2hkciA9IGNzdGF0ZS0+b2ZmX2xpbmtoZHI7CisJcmV0dXJuICgwKTsKIH0KIAogLyoKQEAgLTE2NjksNiArMTc3NCwxOSBAQAogewogCXN0cnVjdCBzbGlzdCAqcywgKnMyOwogCisJLyoKKwkgKiBTcXVlbGNoIHdhcm5pbmdzIGZyb20gY29tcGlsZXJzIHRoYXQgKmRvbid0KiBhc3N1bWUgdGhhdAorCSAqIG9mZnJlbCBhbHdheXMgaGFzIGEgdmFsaWQgZW51bSB2YWx1ZSBhbmQgdGhlcmVmb3JlIGRvbid0CisJICogYXNzdW1lIHRoYXQgd2UnbGwgYWx3YXlzIGdvIHRocm91Z2ggb25lIG9mIHRoZSBjYXNlIGFybXMuCisJICoKKwkgKiBJZiB3ZSBoYXZlIGEgZGVmYXVsdCBjYXNlLCBjb21waWxlcnMgdGhhdCAqZG8qIGFzc3VtZSB0aGF0CisJICogd2lsbCB0aGVuIGNvbXBsYWluIGFib3V0IHRoZSBkZWZhdWx0IGNhc2UgY29kZSBiZWluZworCSAqIHVucmVhY2hhYmxlLgorCSAqCisJICogRGFtbmVkIGlmIHlvdSBkbywgZGFtbmVkIGlmIHlvdSBkb24ndC4KKwkgKi8KKwlzID0gTlVMTDsKKwogCXN3aXRjaCAob2ZmcmVsKSB7CiAKIAljYXNlIE9SX1BBQ0tFVDoKQEAgLTE3MzIsMTAgKzE4NTAsNiBAQAogCWNhc2UgT1JfVFJBTl9JUFY2OgogCQlzID0gZ2VuX2xvYWRfYWJzb2Zmc2V0cmVsKGNzdGF0ZSwgJmNzdGF0ZS0+b2ZmX2xpbmtwbCwgY3N0YXRlLT5vZmZfbmwgKyA0MCArIG9mZnNldCwgc2l6ZSk7CiAJCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYWJvcnQoKTsKLQkJLyogTk9UUkVBQ0hFRCAqLwogCX0KIAlyZXR1cm4gczsKIH0KQEAgLTE4NDQsMTEgKzE5NTgsMTEgQEAKICAqIHRoZSBhcHByb3ByaWF0ZSB0ZXN0LgogICovCiBzdGF0aWMgc3RydWN0IGJsb2NrICoKLWdlbl9ldGhlcl9saW5rdHlwZShjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBwcm90bykKK2dlbl9ldGhlcl9saW5rdHlwZShjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGJwZl91X2ludDMyIGxsX3Byb3RvKQogewogCXN0cnVjdCBibG9jayAqYjAsICpiMTsKIAotCXN3aXRjaCAocHJvdG8pIHsKKwlzd2l0Y2ggKGxsX3Byb3RvKSB7CiAKIAljYXNlIExMQ1NBUF9JU09OUzoKIAljYXNlIExMQ1NBUF9JUDoKQEAgLTE4NjcsOCArMTk4MSw3IEBACiAJCSAqLwogCQliMCA9IGdlbl9jbXBfZ3QoY3N0YXRlLCBPUl9MSU5LVFlQRSwgMCwgQlBGX0gsIEVUSEVSTVRVKTsKIAkJZ2VuX25vdChiMCk7Ci0JCWIxID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xMQywgMCwgQlBGX0gsIChicGZfaW50MzIpCi0JCQkgICAgICgocHJvdG8gPDwgOCkgfCBwcm90bykpOworCQliMSA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MTEMsIDAsIEJQRl9ILCAobGxfcHJvdG8gPDwgOCkgfCBsbF9wcm90byk7CiAJCWdlbl9hbmQoYjAsIGIxKTsKIAkJcmV0dXJuIGIxOwogCkBAIC0xOTA1LDggKzIwMTgsOCBAQAogCQkgKiBUaGlzIGdlbmVyYXRlcyBjb2RlIHRvIGNoZWNrIGJvdGggZm9yIHRoZQogCQkgKiBJUFggTFNBUCAoRXRoZXJuZXRfODAyLjIpIGFuZCBmb3IgRXRoZXJuZXRfODAyLjMuCiAJCSAqLwotCQliMCA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MTEMsIDAsIEJQRl9CLCAoYnBmX2ludDMyKUxMQ1NBUF9JUFgpOwotCQliMSA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MTEMsIDAsIEJQRl9ILCAoYnBmX2ludDMyKTB4RkZGRik7CisJCWIwID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xMQywgMCwgQlBGX0IsIExMQ1NBUF9JUFgpOworCQliMSA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MTEMsIDAsIEJQRl9ILCAweEZGRkYpOwogCQlnZW5fb3IoYjAsIGIxKTsKIAogCQkvKgpAQCAtMTkzNiw3ICsyMDQ5LDcgQEAKIAkJICogZG8gdGhhdCBiZWZvcmUgY2hlY2tpbmcgZm9yIHRoZSBvdGhlciBmcmFtZQogCQkgKiB0eXBlcy4KIAkJICovCi0JCWIwID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktUWVBFLCAwLCBCUEZfSCwgKGJwZl9pbnQzMilFVEhFUlRZUEVfSVBYKTsKKwkJYjAgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS1RZUEUsIDAsIEJQRl9ILCBFVEhFUlRZUEVfSVBYKTsKIAkJZ2VuX29yKGIwLCBiMSk7CiAJCXJldHVybiBiMTsKIApAQCAtMTk2Niw5ICsyMDc5LDkgQEAKIAkJICogMHgwMDAwMDAgKGVuY2Fwc3VsYXRlZCBFdGhlcm5ldCkgYW5kIGEgcHJvdG9jb2wKIAkJICogdHlwZSBvZiBFVEhFUlRZUEVfQUFSUCAoQXBwbGV0YWxrIEFSUCkuCiAJCSAqLwotCQlpZiAocHJvdG8gPT0gRVRIRVJUWVBFX0FUQUxLKQorCQlpZiAobGxfcHJvdG8gPT0gRVRIRVJUWVBFX0FUQUxLKQogCQkJYjEgPSBnZW5fc25hcChjc3RhdGUsIDB4MDgwMDA3LCBFVEhFUlRZUEVfQVRBTEspOwotCQllbHNlCS8qIHByb3RvID09IEVUSEVSVFlQRV9BQVJQICovCisJCWVsc2UJLyogbGxfcHJvdG8gPT0gRVRIRVJUWVBFX0FBUlAgKi8KIAkJCWIxID0gZ2VuX3NuYXAoY3N0YXRlLCAweDAwMDAwMCwgRVRIRVJUWVBFX0FBUlApOwogCQlnZW5fYW5kKGIwLCBiMSk7CiAKQEAgLTE5NzcsMTMgKzIwOTAsMTMgQEAKIAkJICogcGhhc2UgMT8pOyB3ZSBqdXN0IGNoZWNrIGZvciB0aGUgRXRoZXJuZXQKIAkJICogcHJvdG9jb2wgdHlwZS4KIAkJICovCi0JCWIwID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktUWVBFLCAwLCBCUEZfSCwgKGJwZl9pbnQzMilwcm90byk7CisJCWIwID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktUWVBFLCAwLCBCUEZfSCwgbGxfcHJvdG8pOwogCiAJCWdlbl9vcihiMCwgYjEpOwogCQlyZXR1cm4gYjE7CiAKIAlkZWZhdWx0OgotCQlpZiAocHJvdG8gPD0gRVRIRVJNVFUpIHsKKwkJaWYgKGxsX3Byb3RvIDw9IEVUSEVSTVRVKSB7CiAJCQkvKgogCQkJICogVGhpcyBpcyBhbiBMTEMgU0FQIHZhbHVlLCBzbyB0aGUgZnJhbWVzCiAJCQkgKiB0aGF0IG1hdGNoIHdvdWxkIGJlIDgwMi4yIGZyYW1lcy4KQEAgLTE5OTQsNyArMjEwNyw3IEBACiAJCQkgKi8KIAkJCWIwID0gZ2VuX2NtcF9ndChjc3RhdGUsIE9SX0xJTktUWVBFLCAwLCBCUEZfSCwgRVRIRVJNVFUpOwogCQkJZ2VuX25vdChiMCk7Ci0JCQliMSA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LVFlQRSwgMiwgQlBGX0IsIChicGZfaW50MzIpcHJvdG8pOworCQkJYjEgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS1RZUEUsIDIsIEJQRl9CLCBsbF9wcm90byk7CiAJCQlnZW5fYW5kKGIwLCBiMSk7CiAJCQlyZXR1cm4gYjE7CiAJCX0gZWxzZSB7CkBAIC0yMDAzLDE4ICsyMTE2LDE3IEBACiAJCQkgKiB0aGUgbGVuZ3RoL3R5cGUgZmllbGQgd2l0aCBpdCAoaWYKIAkJCSAqIHRoZSBmcmFtZSBpcyBhbiA4MDIuMiBmcmFtZSwgdGhlIGxlbmd0aAogCQkJICogZmllbGQgd2lsbCBiZSA8PSBFVEhFUk1UVSwgYW5kLCBhcwotCQkJICogInByb3RvIiBpcyA+IEVUSEVSTVRVLCB0aGlzIHRlc3QKKwkJCSAqICJsbF9wcm90byIgaXMgPiBFVEhFUk1UVSwgdGhpcyB0ZXN0CiAJCQkgKiB3aWxsIGZhaWwgYW5kIHRoZSBmcmFtZSB3b24ndCBtYXRjaCwKIAkJCSAqIHdoaWNoIGlzIHdoYXQgd2Ugd2FudCkuCiAJCQkgKi8KLQkJCXJldHVybiBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS1RZUEUsIDAsIEJQRl9ILAotCQkJICAgIChicGZfaW50MzIpcHJvdG8pOworCQkJcmV0dXJuIGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LVFlQRSwgMCwgQlBGX0gsIGxsX3Byb3RvKTsKIAkJfQogCX0KIH0KIAogc3RhdGljIHN0cnVjdCBibG9jayAqCi1nZW5fbG9vcGJhY2tfbGlua3R5cGUoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgcHJvdG8pCitnZW5fbG9vcGJhY2tfbGlua3R5cGUoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBicGZfdV9pbnQzMiBsbF9wcm90bykKIHsKIAkvKgogCSAqIEZvciBETFRfTlVMTCwgdGhlIGxpbmstbGF5ZXIgaGVhZGVyIGlzIGEgMzItYml0IHdvcmQKQEAgLTIwNDIsMTAgKzIxNTQsMTAgQEAKIAkJICogY29kZSB0byBjb21wYXJlIGFnYWluc3QgdGhlIHJlc3VsdC4KIAkJICovCiAJCWlmIChjc3RhdGUtPmJwZl9wY2FwLT5yZmlsZSAhPSBOVUxMICYmIGNzdGF0ZS0+YnBmX3BjYXAtPnN3YXBwZWQpCi0JCQlwcm90byA9IFNXQVBMT05HKHByb3RvKTsKLQkJcHJvdG8gPSBodG9ubChwcm90byk7CisJCQlsbF9wcm90byA9IFNXQVBMT05HKGxsX3Byb3RvKTsKKwkJbGxfcHJvdG8gPSBodG9ubChsbF9wcm90byk7CiAJfQotCXJldHVybiAoZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktIRFIsIDAsIEJQRl9XLCAoYnBmX2ludDMyKXByb3RvKSk7CisJcmV0dXJuIChnZW5fY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgMCwgQlBGX1csIGxsX3Byb3RvKSk7CiB9CiAKIC8qCkBAIC0yMDUzLDE4ICsyMTY1LDE3IEBACiAgKiBvciBJUHY2IHRoZW4gd2UgaGF2ZSBhbiBlcnJvci4KICAqLwogc3RhdGljIHN0cnVjdCBibG9jayAqCi1nZW5faXBuZXRfbGlua3R5cGUoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgcHJvdG8pCitnZW5faXBuZXRfbGlua3R5cGUoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBicGZfdV9pbnQzMiBsbF9wcm90bykKIHsKLQlzd2l0Y2ggKHByb3RvKSB7CisJc3dpdGNoIChsbF9wcm90bykgewogCiAJY2FzZSBFVEhFUlRZUEVfSVA6Ci0JCXJldHVybiBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS1RZUEUsIDAsIEJQRl9CLCAoYnBmX2ludDMyKUlQSF9BRl9JTkVUKTsKLQkJLyogTk9UUkVBQ0hFRCAqLworCQlyZXR1cm4gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktUWVBFLCAwLCBCUEZfQiwgSVBIX0FGX0lORVQpOworCQkvKk5PVFJFQUNIRUQqLwogCiAJY2FzZSBFVEhFUlRZUEVfSVBWNjoKLQkJcmV0dXJuIGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LVFlQRSwgMCwgQlBGX0IsCi0JCSAgICAoYnBmX2ludDMyKUlQSF9BRl9JTkVUNik7Ci0JCS8qIE5PVFJFQUNIRUQgKi8KKwkJcmV0dXJuIGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LVFlQRSwgMCwgQlBGX0IsIElQSF9BRl9JTkVUNik7CisJCS8qTk9UUkVBQ0hFRCovCiAKIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTIwNzYsMTcgKzIxODcsMTcgQEAKIC8qCiAgKiBHZW5lcmF0ZSBjb2RlIHRvIG1hdGNoIGEgcGFydGljdWxhciBwYWNrZXQgdHlwZS4KICAqCi0gKiAicHJvdG8iIGlzIGFuIEV0aGVybmV0IHR5cGUgdmFsdWUsIGlmID4gRVRIRVJNVFUsIG9yIGFuIExMQyBTQVAKKyAqICJsbF9wcm90byIgaXMgYW4gRXRoZXJuZXQgdHlwZSB2YWx1ZSwgaWYgPiBFVEhFUk1UVSwgb3IgYW4gTExDIFNBUAogICogdmFsdWUsIGlmIDw9IEVUSEVSTVRVLiAgV2UgdXNlIHRoYXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8KICAqIG1hdGNoIHRoZSB0eXBlIGZpZWxkIG9yIHRvIGNoZWNrIHRoZSB0eXBlIGZpZWxkIGZvciB0aGUgc3BlY2lhbAogICogTElOVVhfU0xMX1BfODAyXzIgdmFsdWUgYW5kIHRoZW4gZG8gdGhlIGFwcHJvcHJpYXRlIHRlc3QuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYmxvY2sgKgotZ2VuX2xpbnV4X3NsbF9saW5rdHlwZShjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBwcm90bykKK2dlbl9saW51eF9zbGxfbGlua3R5cGUoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBicGZfdV9pbnQzMiBsbF9wcm90bykKIHsKIAlzdHJ1Y3QgYmxvY2sgKmIwLCAqYjE7CiAKLQlzd2l0Y2ggKHByb3RvKSB7CisJc3dpdGNoIChsbF9wcm90bykgewogCiAJY2FzZSBMTENTQVBfSVNPTlM6CiAJY2FzZSBMTENTQVBfSVA6CkBAIC0yMTA0LDggKzIyMTUsNyBAQAogCQkgKiAoaS5lLiwgb3RoZXIgU0FQIHZhbHVlcyk/CiAJCSAqLwogCQliMCA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LVFlQRSwgMCwgQlBGX0gsIExJTlVYX1NMTF9QXzgwMl8yKTsKLQkJYjEgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTExDLCAwLCBCUEZfSCwgKGJwZl9pbnQzMikKLQkJCSAgICAgKChwcm90byA8PCA4KSB8IHByb3RvKSk7CisJCWIxID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xMQywgMCwgQlBGX0gsIChsbF9wcm90byA8PCA4KSB8IGxsX3Byb3RvKTsKIAkJZ2VuX2FuZChiMCwgYjEpOwogCQlyZXR1cm4gYjE7CiAKQEAgLTIxMzUsNyArMjI0NSw3IEBACiAJCSAqIHRoZW4gcHV0IGEgY2hlY2sgZm9yIExJTlVYX1NMTF9QXzgwMl8yIGZyYW1lcwogCQkgKiBiZWZvcmUgaXQuCiAJCSAqLwotCQliMCA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MTEMsIDAsIEJQRl9CLCAoYnBmX2ludDMyKUxMQ1NBUF9JUFgpOworCQliMCA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MTEMsIDAsIEJQRl9CLCBMTENTQVBfSVBYKTsKIAkJYjEgPSBnZW5fc25hcChjc3RhdGUsIDB4MDAwMDAwLCBFVEhFUlRZUEVfSVBYKTsKIAkJZ2VuX29yKGIwLCBiMSk7CiAJCWIwID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktUWVBFLCAwLCBCUEZfSCwgTElOVVhfU0xMX1BfODAyXzIpOwpAQCAtMjE1Myw3ICsyMjYzLDcgQEAKIAkJICogZG8gdGhhdCBiZWZvcmUgY2hlY2tpbmcgZm9yIHRoZSBvdGhlciBmcmFtZQogCQkgKiB0eXBlcy4KIAkJICovCi0JCWIwID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktUWVBFLCAwLCBCUEZfSCwgKGJwZl9pbnQzMilFVEhFUlRZUEVfSVBYKTsKKwkJYjAgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS1RZUEUsIDAsIEJQRl9ILCBFVEhFUlRZUEVfSVBYKTsKIAkJZ2VuX29yKGIwLCBiMSk7CiAJCXJldHVybiBiMTsKIApAQCAtMjE4Miw5ICsyMjkyLDkgQEAKIAkJICogMHgwMDAwMDAgKGVuY2Fwc3VsYXRlZCBFdGhlcm5ldCkgYW5kIGEgcHJvdG9jb2wKIAkJICogdHlwZSBvZiBFVEhFUlRZUEVfQUFSUCAoQXBwbGV0YWxrIEFSUCkuCiAJCSAqLwotCQlpZiAocHJvdG8gPT0gRVRIRVJUWVBFX0FUQUxLKQorCQlpZiAobGxfcHJvdG8gPT0gRVRIRVJUWVBFX0FUQUxLKQogCQkJYjEgPSBnZW5fc25hcChjc3RhdGUsIDB4MDgwMDA3LCBFVEhFUlRZUEVfQVRBTEspOwotCQllbHNlCS8qIHByb3RvID09IEVUSEVSVFlQRV9BQVJQICovCisJCWVsc2UJLyogbGxfcHJvdG8gPT0gRVRIRVJUWVBFX0FBUlAgKi8KIAkJCWIxID0gZ2VuX3NuYXAoY3N0YXRlLCAweDAwMDAwMCwgRVRIRVJUWVBFX0FBUlApOwogCQlnZW5fYW5kKGIwLCBiMSk7CiAKQEAgLTIxOTMsMTMgKzIzMDMsMTMgQEAKIAkJICogcGhhc2UgMT8pOyB3ZSBqdXN0IGNoZWNrIGZvciB0aGUgRXRoZXJuZXQKIAkJICogcHJvdG9jb2wgdHlwZS4KIAkJICovCi0JCWIwID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktUWVBFLCAwLCBCUEZfSCwgKGJwZl9pbnQzMilwcm90byk7CisJCWIwID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktUWVBFLCAwLCBCUEZfSCwgbGxfcHJvdG8pOwogCiAJCWdlbl9vcihiMCwgYjEpOwogCQlyZXR1cm4gYjE7CiAKIAlkZWZhdWx0OgotCQlpZiAocHJvdG8gPD0gRVRIRVJNVFUpIHsKKwkJaWYgKGxsX3Byb3RvIDw9IEVUSEVSTVRVKSB7CiAJCQkvKgogCQkJICogVGhpcyBpcyBhbiBMTEMgU0FQIHZhbHVlLCBzbyB0aGUgZnJhbWVzCiAJCQkgKiB0aGF0IG1hdGNoIHdvdWxkIGJlIDgwMi4yIGZyYW1lcy4KQEAgLTIyMDksNyArMjMxOSw3IEBACiAJCQkgKi8KIAkJCWIwID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktUWVBFLCAwLCBCUEZfSCwgTElOVVhfU0xMX1BfODAyXzIpOwogCQkJYjEgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgY3N0YXRlLT5vZmZfbGlua3BsLmNvbnN0YW50X3BhcnQsIEJQRl9CLAotCQkJICAgICAoYnBmX2ludDMyKXByb3RvKTsKKwkJCSAgICAgbGxfcHJvdG8pOwogCQkJZ2VuX2FuZChiMCwgYjEpOwogCQkJcmV0dXJuIGIxOwogCQl9IGVsc2UgewpAQCAtMjIxOCwxMSArMjMyOCwxMSBAQAogCQkJICogdGhlIGxlbmd0aC90eXBlIGZpZWxkIHdpdGggaXQgKGlmCiAJCQkgKiB0aGUgZnJhbWUgaXMgYW4gODAyLjIgZnJhbWUsIHRoZSBsZW5ndGgKIAkJCSAqIGZpZWxkIHdpbGwgYmUgPD0gRVRIRVJNVFUsIGFuZCwgYXMKLQkJCSAqICJwcm90byIgaXMgPiBFVEhFUk1UVSwgdGhpcyB0ZXN0CisJCQkgKiAibGxfcHJvdG8iIGlzID4gRVRIRVJNVFUsIHRoaXMgdGVzdAogCQkJICogd2lsbCBmYWlsIGFuZCB0aGUgZnJhbWUgd29uJ3QgbWF0Y2gsCiAJCQkgKiB3aGljaCBpcyB3aGF0IHdlIHdhbnQpLgogCQkJICovCi0JCQlyZXR1cm4gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktUWVBFLCAwLCBCUEZfSCwgKGJwZl9pbnQzMilwcm90byk7CisJCQlyZXR1cm4gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktUWVBFLCAwLCBCUEZfSCwgbGxfcHJvdG8pOwogCQl9CiAJfQogfQpAQCAtMjczNiw3ICsyODQ2LDcgQEAKIAkJczItPnMuayA9IDM7CiAJCXNhcHBlbmQocywgczIpOwogCQlzMiA9IG5ld19zdG10KGNzdGF0ZSwgQlBGX0FMVXxCUEZfQU5EfEJQRl9JTU0pOwotCQlzMi0+cy5rID0gfjM7CisJCXMyLT5zLmsgPSAoYnBmX3VfaW50MzIpfjM7CiAJCXNhcHBlbmQocywgczIpOwogCQlzMiA9IG5ld19zdG10KGNzdGF0ZSwgQlBGX1NUKTsKIAkJczItPnMuayA9IGNzdGF0ZS0+b2ZmX2xpbmtwbC5yZWc7CkBAIC0yODE3LDcgKzI5MjcsNyBAQAogCX0KIAogCS8qCi0JICogSWYgdGhlcmUgdGhlcmUgaXMgbm8gaW5pdGlhbGl6YXRpb24geWV0IGFuZCB3ZSBuZWVkIHZhcmlhYmxlCisJICogSWYgdGhlcmUgaXMgbm8gaW5pdGlhbGl6YXRpb24geWV0IGFuZCB3ZSBuZWVkIHZhcmlhYmxlCiAJICogbGVuZ3RoIG9mZnNldHMgZm9yIFZMQU4sIGluaXRpYWxpemUgdGhlbSB0byB6ZXJvCiAJICovCiAJaWYgKHMgPT0gTlVMTCAmJiBjc3RhdGUtPmlzX3ZsYW5fdmxvZmZzZXQpIHsKQEAgLTI5MjMsMzMgKzMwMzMsMzMgQEAKIC8qCiAgKiBNYXAgYW4gRXRoZXJuZXQgdHlwZSB0byB0aGUgZXF1aXZhbGVudCBQUFAgdHlwZS4KICAqLwotc3RhdGljIGludAotZXRoZXJ0eXBlX3RvX3BwcHR5cGUoaW50IHByb3RvKQorc3RhdGljIGJwZl91X2ludDMyCitldGhlcnR5cGVfdG9fcHBwdHlwZShicGZfdV9pbnQzMiBsbF9wcm90bykKIHsKLQlzd2l0Y2ggKHByb3RvKSB7CisJc3dpdGNoIChsbF9wcm90bykgewogCiAJY2FzZSBFVEhFUlRZUEVfSVA6Ci0JCXByb3RvID0gUFBQX0lQOworCQlsbF9wcm90byA9IFBQUF9JUDsKIAkJYnJlYWs7CiAKIAljYXNlIEVUSEVSVFlQRV9JUFY2OgotCQlwcm90byA9IFBQUF9JUFY2OworCQlsbF9wcm90byA9IFBQUF9JUFY2OwogCQlicmVhazsKIAogCWNhc2UgRVRIRVJUWVBFX0ROOgotCQlwcm90byA9IFBQUF9ERUNORVQ7CisJCWxsX3Byb3RvID0gUFBQX0RFQ05FVDsKIAkJYnJlYWs7CiAKIAljYXNlIEVUSEVSVFlQRV9BVEFMSzoKLQkJcHJvdG8gPSBQUFBfQVBQTEU7CisJCWxsX3Byb3RvID0gUFBQX0FQUExFOwogCQlicmVhazsKIAogCWNhc2UgRVRIRVJUWVBFX05TOgotCQlwcm90byA9IFBQUF9OUzsKKwkJbGxfcHJvdG8gPSBQUFBfTlM7CiAJCWJyZWFrOwogCiAJY2FzZSBMTENTQVBfSVNPTlM6Ci0JCXByb3RvID0gUFBQX09TSTsKKwkJbGxfcHJvdG8gPSBQUFBfT1NJOwogCQlicmVhazsKIAogCWNhc2UgTExDU0FQXzgwMjFEOgpAQCAtMjk1OCwxNCArMzA2OCwxNCBAQAogCQkgKiBvdmVyIFBQUCBhcmUgU3Bhbm5pbmcgVHJlZSBQcm90b2NvbAogCQkgKiBCcmlkZ2luZyBQRFVzLgogCQkgKi8KLQkJcHJvdG8gPSBQUFBfQlJQRFU7CisJCWxsX3Byb3RvID0gUFBQX0JSUERVOwogCQlicmVhazsKIAogCWNhc2UgTExDU0FQX0lQWDoKLQkJcHJvdG8gPSBQUFBfSVBYOworCQlsbF9wcm90byA9IFBQUF9JUFg7CiAJCWJyZWFrOwogCX0KLQlyZXR1cm4gKHByb3RvKTsKKwlyZXR1cm4gKGxsX3Byb3RvKTsKIH0KIAogLyoKQEAgLTMwMjEsMjkgKzMxMzEsMTQgQEAKICAqIHZhbHVlLCBpZiA8PSBFVEhFUk1UVS4KICAqLwogc3RhdGljIHN0cnVjdCBibG9jayAqCi1nZW5fbGlua3R5cGUoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgcHJvdG8pCitnZW5fbGlua3R5cGUoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBicGZfdV9pbnQzMiBsbF9wcm90bykKIHsKIAlzdHJ1Y3QgYmxvY2sgKmIwLCAqYjEsICpiMjsKIAljb25zdCBjaGFyICpkZXNjcmlwdGlvbjsKIAogCS8qIGFyZSB3ZSBjaGVja2luZyBNUExTLWVuY2Fwc3VsYXRlZCBwYWNrZXRzPyAqLwotCWlmIChjc3RhdGUtPmxhYmVsX3N0YWNrX2RlcHRoID4gMCkgewotCQlzd2l0Y2ggKHByb3RvKSB7Ci0JCWNhc2UgRVRIRVJUWVBFX0lQOgotCQljYXNlIFBQUF9JUDoKLQkJCS8qIEZJWE1FIGFkZCBvdGhlciBMMyBwcm90byBJRHMgKi8KLQkJCXJldHVybiBnZW5fbXBsc19saW5rdHlwZShjc3RhdGUsIFFfSVApOwotCi0JCWNhc2UgRVRIRVJUWVBFX0lQVjY6Ci0JCWNhc2UgUFBQX0lQVjY6Ci0JCQkvKiBGSVhNRSBhZGQgb3RoZXIgTDMgcHJvdG8gSURzICovCi0JCQlyZXR1cm4gZ2VuX21wbHNfbGlua3R5cGUoY3N0YXRlLCBRX0lQVjYpOwotCi0JCWRlZmF1bHQ6Ci0JCQlicGZfZXJyb3IoY3N0YXRlLCAidW5zdXBwb3J0ZWQgcHJvdG9jb2wgb3ZlciBtcGxzIik7Ci0JCQkvKiBOT1RSRUFDSEVEICovCi0JCX0KLQl9CisJaWYgKGNzdGF0ZS0+bGFiZWxfc3RhY2tfZGVwdGggPiAwKQorCQlyZXR1cm4gZ2VuX21wbHNfbGlua3R5cGUoY3N0YXRlLCBsbF9wcm90byk7CiAKIAlzd2l0Y2ggKGNzdGF0ZS0+bGlua3R5cGUpIHsKIApAQCAtMzA1NywyNiArMzE1MiwyMyBAQAogCQllbHNlCiAJCQliMCA9IE5VTEw7CiAKLQkJYjEgPSBnZW5fZXRoZXJfbGlua3R5cGUoY3N0YXRlLCBwcm90byk7CisJCWIxID0gZ2VuX2V0aGVyX2xpbmt0eXBlKGNzdGF0ZSwgbGxfcHJvdG8pOwogCQlpZiAoYjAgIT0gTlVMTCkKIAkJCWdlbl9hbmQoYjAsIGIxKTsKIAkJcmV0dXJuIGIxOwogCQkvKk5PVFJFQUNIRUQqLwotCQlicmVhazsKIAogCWNhc2UgRExUX0NfSERMQzoKLQkJc3dpdGNoIChwcm90bykgeworCQlzd2l0Y2ggKGxsX3Byb3RvKSB7CiAKIAkJY2FzZSBMTENTQVBfSVNPTlM6Ci0JCQlwcm90byA9IChwcm90byA8PCA4IHwgTExDU0FQX0lTT05TKTsKKwkJCWxsX3Byb3RvID0gKGxsX3Byb3RvIDw8IDggfCBMTENTQVBfSVNPTlMpOwogCQkJLyogZmFsbCB0aHJvdWdoICovCiAKIAkJZGVmYXVsdDoKLQkJCXJldHVybiBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS1RZUEUsIDAsIEJQRl9ILCAoYnBmX2ludDMyKXByb3RvKTsKKwkJCXJldHVybiBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS1RZUEUsIDAsIEJQRl9ILCBsbF9wcm90byk7CiAJCQkvKk5PVFJFQUNIRUQqLwotCQkJYnJlYWs7CiAJCX0KLQkJYnJlYWs7CiAKIAljYXNlIERMVF9JRUVFODAyXzExOgogCWNhc2UgRExUX1BSSVNNX0hFQURFUjoKQEAgLTMwOTEsMzQgKzMxODMsMzAgQEAKIAkJLyoKIAkJICogTm93IGNoZWNrIGZvciB0aGUgc3BlY2lmaWVkIGxpbmstbGF5ZXIgdHlwZS4KIAkJICovCi0JCWIxID0gZ2VuX2xsY19saW5rdHlwZShjc3RhdGUsIHByb3RvKTsKKwkJYjEgPSBnZW5fbGxjX2xpbmt0eXBlKGNzdGF0ZSwgbGxfcHJvdG8pOwogCQlnZW5fYW5kKGIwLCBiMSk7CiAJCXJldHVybiBiMTsKIAkJLypOT1RSRUFDSEVEKi8KLQkJYnJlYWs7CiAKIAljYXNlIERMVF9GRERJOgogCQkvKgogCQkgKiBYWFggLSBjaGVjayBmb3IgTExDIGZyYW1lcy4KIAkJICovCi0JCXJldHVybiBnZW5fbGxjX2xpbmt0eXBlKGNzdGF0ZSwgcHJvdG8pOworCQlyZXR1cm4gZ2VuX2xsY19saW5rdHlwZShjc3RhdGUsIGxsX3Byb3RvKTsKIAkJLypOT1RSRUFDSEVEKi8KLQkJYnJlYWs7CiAKIAljYXNlIERMVF9JRUVFODAyOgogCQkvKgogCQkgKiBYWFggLSBjaGVjayBmb3IgTExDIFBEVXMsIGFzIHBlciBJRUVFIDgwMi41LgogCQkgKi8KLQkJcmV0dXJuIGdlbl9sbGNfbGlua3R5cGUoY3N0YXRlLCBwcm90byk7CisJCXJldHVybiBnZW5fbGxjX2xpbmt0eXBlKGNzdGF0ZSwgbGxfcHJvdG8pOwogCQkvKk5PVFJFQUNIRUQqLwotCQlicmVhazsKIAogCWNhc2UgRExUX0FUTV9SRkMxNDgzOgogCWNhc2UgRExUX0FUTV9DTElQOgogCWNhc2UgRExUX0lQX09WRVJfRkM6Ci0JCXJldHVybiBnZW5fbGxjX2xpbmt0eXBlKGNzdGF0ZSwgcHJvdG8pOworCQlyZXR1cm4gZ2VuX2xsY19saW5rdHlwZShjc3RhdGUsIGxsX3Byb3RvKTsKIAkJLypOT1RSRUFDSEVEKi8KLQkJYnJlYWs7CiAKIAljYXNlIERMVF9TVU5BVE06CiAJCS8qCkBAIC0zMTI4LDE3ICszMjE2LDE1IEBACiAJCSAqCiAJCSAqIENoZWNrIGZvciBMTEMgZW5jYXBzdWxhdGlvbiBhbmQgdGhlbiBjaGVjayB0aGUgcHJvdG9jb2wuCiAJCSAqLwotCQliMCA9IGdlbl9hdG1maWVsZF9jb2RlKGNzdGF0ZSwgQV9QUk9UT1RZUEUsIFBUX0xMQywgQlBGX0pFUSwgMCk7Ci0JCWIxID0gZ2VuX2xsY19saW5rdHlwZShjc3RhdGUsIHByb3RvKTsKKwkJYjAgPSBnZW5fYXRtZmllbGRfY29kZV9pbnRlcm5hbChjc3RhdGUsIEFfUFJPVE9UWVBFLCBQVF9MTEMsIEJQRl9KRVEsIDApOworCQliMSA9IGdlbl9sbGNfbGlua3R5cGUoY3N0YXRlLCBsbF9wcm90byk7CiAJCWdlbl9hbmQoYjAsIGIxKTsKIAkJcmV0dXJuIGIxOwogCQkvKk5PVFJFQUNIRUQqLwotCQlicmVhazsKIAogCWNhc2UgRExUX0xJTlVYX1NMTDoKLQkJcmV0dXJuIGdlbl9saW51eF9zbGxfbGlua3R5cGUoY3N0YXRlLCBwcm90byk7CisJCXJldHVybiBnZW5fbGludXhfc2xsX2xpbmt0eXBlKGNzdGF0ZSwgbGxfcHJvdG8pOwogCQkvKk5PVFJFQUNIRUQqLwotCQlicmVhazsKIAogCWNhc2UgRExUX1NMSVA6CiAJY2FzZSBETFRfU0xJUF9CU0RPUzoKQEAgLTMxNTAsNyArMzIzNiw3IEBACiAJCSAqIFhYWCAtIGZvciBJUHY0LCBjaGVjayBmb3IgYSB2ZXJzaW9uIG51bWJlciBvZiA0LCBhbmQsCiAJCSAqIGZvciBJUHY2LCBjaGVjayBmb3IgYSB2ZXJzaW9uIG51bWJlciBvZiA2PwogCQkgKi8KLQkJc3dpdGNoIChwcm90bykgeworCQlzd2l0Y2ggKGxsX3Byb3RvKSB7CiAKIAkJY2FzZSBFVEhFUlRZUEVfSVA6CiAJCQkvKiBDaGVjayBmb3IgYSB2ZXJzaW9uIG51bWJlciBvZiA0LiAqLwpAQCAtMzE2NCwzMSArMzI1MCwyOCBAQAogCQkJcmV0dXJuIGdlbl9mYWxzZShjc3RhdGUpOwkvKiBhbHdheXMgZmFsc2UgKi8KIAkJfQogCQkvKk5PVFJFQUNIRUQqLwotCQlicmVhazsKIAogCWNhc2UgRExUX0lQVjQ6CiAJCS8qCiAJCSAqIFJhdyBJUHY0LCBzbyBubyB0eXBlIGZpZWxkLgogCQkgKi8KLQkJaWYgKHByb3RvID09IEVUSEVSVFlQRV9JUCkKKwkJaWYgKGxsX3Byb3RvID09IEVUSEVSVFlQRV9JUCkKIAkJCXJldHVybiBnZW5fdHJ1ZShjc3RhdGUpOwkvKiBhbHdheXMgdHJ1ZSAqLwogCiAJCS8qIENoZWNraW5nIGZvciBzb21ldGhpbmcgb3RoZXIgdGhhbiBJUHY0OyBhbHdheXMgZmFsc2UgKi8KIAkJcmV0dXJuIGdlbl9mYWxzZShjc3RhdGUpOwogCQkvKk5PVFJFQUNIRUQqLwotCQlicmVhazsKIAogCWNhc2UgRExUX0lQVjY6CiAJCS8qCiAJCSAqIFJhdyBJUHY2LCBzbyBubyB0eXBlIGZpZWxkLgogCQkgKi8KLQkJaWYgKHByb3RvID09IEVUSEVSVFlQRV9JUFY2KQorCQlpZiAobGxfcHJvdG8gPT0gRVRIRVJUWVBFX0lQVjYpCiAJCQlyZXR1cm4gZ2VuX3RydWUoY3N0YXRlKTsJLyogYWx3YXlzIHRydWUgKi8KIAogCQkvKiBDaGVja2luZyBmb3Igc29tZXRoaW5nIG90aGVyIHRoYW4gSVB2NjsgYWx3YXlzIGZhbHNlICovCiAJCXJldHVybiBnZW5fZmFsc2UoY3N0YXRlKTsKIAkJLypOT1RSRUFDSEVEKi8KLQkJYnJlYWs7CiAKIAljYXNlIERMVF9QUFA6CiAJY2FzZSBETFRfUFBQX1BQUEQ6CkBAIC0zMTk4LDE3ICszMjgxLDE2IEBACiAJCSAqIFdlIHVzZSBFdGhlcm5ldCBwcm90b2NvbCB0eXBlcyBpbnNpZGUgbGlicGNhcDsKIAkJICogbWFwIHRoZW0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgUFBQIHByb3RvY29sIHR5cGVzLgogCQkgKi8KLQkJcHJvdG8gPSBldGhlcnR5cGVfdG9fcHBwdHlwZShwcm90byk7Ci0JCXJldHVybiBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS1RZUEUsIDAsIEJQRl9ILCAoYnBmX2ludDMyKXByb3RvKTsKKwkJcmV0dXJuIGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LVFlQRSwgMCwgQlBGX0gsCisJCSAgICBldGhlcnR5cGVfdG9fcHBwdHlwZShsbF9wcm90bykpOwogCQkvKk5PVFJFQUNIRUQqLwotCQlicmVhazsKIAogCWNhc2UgRExUX1BQUF9CU0RPUzoKIAkJLyoKIAkJICogV2UgdXNlIEV0aGVybmV0IHByb3RvY29sIHR5cGVzIGluc2lkZSBsaWJwY2FwOwogCQkgKiBtYXAgdGhlbSB0byB0aGUgY29ycmVzcG9uZGluZyBQUFAgcHJvdG9jb2wgdHlwZXMuCiAJCSAqLwotCQlzd2l0Y2ggKHByb3RvKSB7CisJCXN3aXRjaCAobGxfcHJvdG8pIHsKIAogCQljYXNlIEVUSEVSVFlQRV9JUDoKIAkJCS8qCkBAIC0zMjIzLDE3ICszMzA1LDE1IEBACiAJCQlyZXR1cm4gYjA7CiAKIAkJZGVmYXVsdDoKLQkJCXByb3RvID0gZXRoZXJ0eXBlX3RvX3BwcHR5cGUocHJvdG8pOwogCQkJcmV0dXJuIGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LVFlQRSwgMCwgQlBGX0gsCi0JCQkJKGJwZl9pbnQzMilwcm90byk7CisJCQkgICAgZXRoZXJ0eXBlX3RvX3BwcHR5cGUobGxfcHJvdG8pKTsKIAkJfQogCQkvKk5PVFJFQUNIRUQqLwotCQlicmVhazsKIAogCWNhc2UgRExUX05VTEw6CiAJY2FzZSBETFRfTE9PUDoKIAljYXNlIERMVF9FTkM6Ci0JCXN3aXRjaCAocHJvdG8pIHsKKwkJc3dpdGNoIChsbF9wcm90bykgewogCiAJCWNhc2UgRVRIRVJUWVBFX0lQOgogCQkJcmV0dXJuIChnZW5fbG9vcGJhY2tfbGlua3R5cGUoY3N0YXRlLCBBRl9JTkVUKSk7CkBAIC0zMzE0LDE2ICszMzk0LDE1IEBACiAJCSAqIGFmIGZpZWxkIGlzIGhvc3QgYnl0ZSBvcmRlciBpbiBjb250cmFzdCB0byB0aGUgcmVzdCBvZgogCQkgKiB0aGUgcGFja2V0LgogCQkgKi8KLQkJaWYgKHByb3RvID09IEVUSEVSVFlQRV9JUCkKKwkJaWYgKGxsX3Byb3RvID09IEVUSEVSVFlQRV9JUCkKIAkJCXJldHVybiAoZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktIRFIsIG9mZnNldG9mKHN0cnVjdCBwZmxvZ2hkciwgYWYpLAotCQkJICAgIEJQRl9CLCAoYnBmX2ludDMyKUFGX0lORVQpKTsKLQkJZWxzZSBpZiAocHJvdG8gPT0gRVRIRVJUWVBFX0lQVjYpCisJCQkgICAgQlBGX0IsIEFGX0lORVQpKTsKKwkJZWxzZSBpZiAobGxfcHJvdG8gPT0gRVRIRVJUWVBFX0lQVjYpCiAJCQlyZXR1cm4gKGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LSERSLCBvZmZzZXRvZihzdHJ1Y3QgcGZsb2doZHIsIGFmKSwKLQkJCSAgICBCUEZfQiwgKGJwZl9pbnQzMilBRl9JTkVUNikpOworCQkJICAgIEJQRl9CLCBBRl9JTkVUNikpOwogCQllbHNlCiAJCQlyZXR1cm4gZ2VuX2ZhbHNlKGNzdGF0ZSk7CiAJCS8qTk9UUkVBQ0hFRCovCi0JCWJyZWFrOwogI2VuZGlmIC8qIEhBVkVfTkVUX1BGVkFSX0ggKi8KIAogCWNhc2UgRExUX0FSQ05FVDoKQEAgLTMzMzIsNTggKzM0MTEsNTYgQEAKIAkJICogWFhYIHNob3VsZCB3ZSBjaGVjayBmb3IgZmlyc3QgZnJhZ21lbnQgaWYgdGhlIHByb3RvY29sCiAJCSAqIHVzZXMgUEhEUz8KIAkJICovCi0JCXN3aXRjaCAocHJvdG8pIHsKKwkJc3dpdGNoIChsbF9wcm90bykgewogCiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gZ2VuX2ZhbHNlKGNzdGF0ZSk7CiAKIAkJY2FzZSBFVEhFUlRZUEVfSVBWNjoKIAkJCXJldHVybiAoZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktUWVBFLCAwLCBCUEZfQiwKLQkJCQkoYnBmX2ludDMyKUFSQ1RZUEVfSU5FVDYpKTsKKwkJCQlBUkNUWVBFX0lORVQ2KSk7CiAKIAkJY2FzZSBFVEhFUlRZUEVfSVA6CiAJCQliMCA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LVFlQRSwgMCwgQlBGX0IsCi0JCQkJICAgICAoYnBmX2ludDMyKUFSQ1RZUEVfSVApOworCQkJICAgIEFSQ1RZUEVfSVApOwogCQkJYjEgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS1RZUEUsIDAsIEJQRl9CLAotCQkJCSAgICAgKGJwZl9pbnQzMilBUkNUWVBFX0lQX09MRCk7CisJCQkgICAgQVJDVFlQRV9JUF9PTEQpOwogCQkJZ2VuX29yKGIwLCBiMSk7CiAJCQlyZXR1cm4gKGIxKTsKIAogCQljYXNlIEVUSEVSVFlQRV9BUlA6CiAJCQliMCA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LVFlQRSwgMCwgQlBGX0IsCi0JCQkJICAgICAoYnBmX2ludDMyKUFSQ1RZUEVfQVJQKTsKKwkJCSAgICBBUkNUWVBFX0FSUCk7CiAJCQliMSA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LVFlQRSwgMCwgQlBGX0IsCi0JCQkJICAgICAoYnBmX2ludDMyKUFSQ1RZUEVfQVJQX09MRCk7CisJCQkgICAgQVJDVFlQRV9BUlBfT0xEKTsKIAkJCWdlbl9vcihiMCwgYjEpOwogCQkJcmV0dXJuIChiMSk7CiAKIAkJY2FzZSBFVEhFUlRZUEVfUkVWQVJQOgogCQkJcmV0dXJuIChnZW5fY21wKGNzdGF0ZSwgT1JfTElOS1RZUEUsIDAsIEJQRl9CLAotCQkJCQkoYnBmX2ludDMyKUFSQ1RZUEVfUkVWQVJQKSk7CisJCQkgICAgQVJDVFlQRV9SRVZBUlApKTsKIAogCQljYXNlIEVUSEVSVFlQRV9BVEFMSzoKIAkJCXJldHVybiAoZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktUWVBFLCAwLCBCUEZfQiwKLQkJCQkJKGJwZl9pbnQzMilBUkNUWVBFX0FUQUxLKSk7CisJCQkgICAgQVJDVFlQRV9BVEFMSykpOwogCQl9CiAJCS8qTk9UUkVBQ0hFRCovCi0JCWJyZWFrOwogCiAJY2FzZSBETFRfTFRBTEs6Ci0JCXN3aXRjaCAocHJvdG8pIHsKKwkJc3dpdGNoIChsbF9wcm90bykgewogCQljYXNlIEVUSEVSVFlQRV9BVEFMSzoKIAkJCXJldHVybiBnZW5fdHJ1ZShjc3RhdGUpOwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIGdlbl9mYWxzZShjc3RhdGUpOwogCQl9CiAJCS8qTk9UUkVBQ0hFRCovCi0JCWJyZWFrOwogCiAJY2FzZSBETFRfRlJFTEFZOgogCQkvKgogCQkgKiBYWFggLSBhc3N1bWVzIGEgMi1ieXRlIEZyYW1lIFJlbGF5IGhlYWRlciB3aXRoCiAJCSAqIERMQ0kgYW5kIGZsYWdzLiAgV2hhdCBpZiB0aGUgYWRkcmVzcyBpcyBsb25nZXI/CiAJCSAqLwotCQlzd2l0Y2ggKHByb3RvKSB7CisJCXN3aXRjaCAobGxfcHJvdG8pIHsKIAogCQljYXNlIEVUSEVSVFlQRV9JUDoKIAkJCS8qCkBAIC0zNDIwLDcgKzM0OTcsNiBAQAogCQkJcmV0dXJuIGdlbl9mYWxzZShjc3RhdGUpOwogCQl9CiAJCS8qTk9UUkVBQ0hFRCovCi0JCWJyZWFrOwogCiAJY2FzZSBETFRfTUZSOgogCQlicGZfZXJyb3IoY3N0YXRlLCAiTXVsdGktbGluayBGcmFtZSBSZWxheSBsaW5rLWxheWVyIHR5cGUgZmlsdGVyaW5nIG5vdCBpbXBsZW1lbnRlZCIpOwpAQCAtMzQ2MSw3ICszNTM3LDcgQEAKIAkJcmV0dXJuIGdlbl9tY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgMCwgQlBGX1csIDB4NTVGRjAwMDAsIDB4ZmZmZjAwMDApOwogCiAJY2FzZSBETFRfSVBORVQ6Ci0JCXJldHVybiBnZW5faXBuZXRfbGlua3R5cGUoY3N0YXRlLCBwcm90byk7CisJCXJldHVybiBnZW5faXBuZXRfbGlua3R5cGUoY3N0YXRlLCBsbF9wcm90byk7CiAKIAljYXNlIERMVF9MSU5VWF9JUkRBOgogCQlicGZfZXJyb3IoY3N0YXRlLCAiSXJEQSBsaW5rLWxheWVyIHR5cGUgZmlsdGVyaW5nIG5vdCBpbXBsZW1lbnRlZCIpOwpAQCAtMzUwMCw2ICszNTc2LDcgQEAKIAljYXNlIERMVF9JRUVFODAyXzE1XzRfTElOVVg6CiAJY2FzZSBETFRfSUVFRTgwMl8xNV80X05PTkFTS19QSFk6CiAJY2FzZSBETFRfSUVFRTgwMl8xNV80X05PRkNTOgorCWNhc2UgRExUX0lFRUU4MDJfMTVfNF9UQVA6CiAJCWJwZl9lcnJvcihjc3RhdGUsICJJRUVFIDgwMi4xNS40IGxpbmstbGF5ZXIgdHlwZSBmaWx0ZXJpbmcgbm90IGltcGxlbWVudGVkIik7CiAKIAljYXNlIERMVF9JRUVFODAyXzE2X01BQ19DUFNfUkFESU86CkBAIC0zNTExLDcgKzM1ODgsOCBAQAogCWNhc2UgRExUX1JBSUYxOgogCQlicGZfZXJyb3IoY3N0YXRlLCAiUkFJRjEgbGluay1sYXllciB0eXBlIGZpbHRlcmluZyBub3QgaW1wbGVtZW50ZWQiKTsKIAotCWNhc2UgRExUX0lQTUI6CisJY2FzZSBETFRfSVBNQl9LT05UUk9OOgorCWNhc2UgRExUX0lQTUJfTElOVVg6CiAJCWJwZl9lcnJvcihjc3RhdGUsICJJUE1CIGxpbmstbGF5ZXIgdHlwZSBmaWx0ZXJpbmcgbm90IGltcGxlbWVudGVkIik7CiAKIAljYXNlIERMVF9BWDI1X0tJU1M6CkBAIC0zNTM3LDIxICszNjE1LDE3IEBACiAJCQkgKiBpdCdzIG5vdCwgaXQgbmVlZHMgdG8gYmUgaGFuZGxlZCBzcGVjaWFsbHkKIAkJCSAqIGFib3ZlLikKIAkJCSAqLwotCQkJcmV0dXJuIGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LVFlQRSwgMCwgQlBGX0gsIChicGZfaW50MzIpcHJvdG8pOworCQkJcmV0dXJuIGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LVFlQRSwgMCwgQlBGX0gsIGxsX3Byb3RvKTsKKwkJCS8qTk9UUkVBQ0hFRCAqLwogCQl9IGVsc2UgewogCQkJLyoKIAkJCSAqIE5vOyByZXBvcnQgYW4gZXJyb3IuCiAJCQkgKi8KLQkJCWRlc2NyaXB0aW9uID0gcGNhcF9kYXRhbGlua192YWxfdG9fZGVzY3JpcHRpb24oY3N0YXRlLT5saW5rdHlwZSk7Ci0JCQlpZiAoZGVzY3JpcHRpb24gIT0gTlVMTCkgewotCQkJCWJwZl9lcnJvcihjc3RhdGUsICIlcyBsaW5rLWxheWVyIHR5cGUgZmlsdGVyaW5nIG5vdCBpbXBsZW1lbnRlZCIsCi0JCQkJICAgIGRlc2NyaXB0aW9uKTsKLQkJCX0gZWxzZSB7Ci0JCQkJYnBmX2Vycm9yKGNzdGF0ZSwgIkRMVCAldSBsaW5rLWxheWVyIHR5cGUgZmlsdGVyaW5nIG5vdCBpbXBsZW1lbnRlZCIsCi0JCQkJICAgIGNzdGF0ZS0+bGlua3R5cGUpOwotCQkJfQorCQkJZGVzY3JpcHRpb24gPSBwY2FwX2RhdGFsaW5rX3ZhbF90b19kZXNjcmlwdGlvbl9vcl9kbHQoY3N0YXRlLT5saW5rdHlwZSk7CisJCQlicGZfZXJyb3IoY3N0YXRlLCAiJXMgbGluay1sYXllciB0eXBlIGZpbHRlcmluZyBub3QgaW1wbGVtZW50ZWQiLAorCQkJICAgIGRlc2NyaXB0aW9uKTsKKwkJCS8qTk9UUkVBQ0hFRCAqLwogCQl9Ci0JCWJyZWFrOwogCX0KIH0KIApAQCAtMzU4MSw4ICszNjU1LDggQEAKIC8qCiAgKiBHZW5lcmF0ZSBjb2RlIHRvIG1hdGNoIGZyYW1lcyB3aXRoIGFuIExMQyBoZWFkZXIuCiAgKi8KLXN0cnVjdCBibG9jayAqCi1nZW5fbGxjKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSkKK3N0YXRpYyBzdHJ1Y3QgYmxvY2sgKgorZ2VuX2xsY19pbnRlcm5hbChjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUpCiB7CiAJc3RydWN0IGJsb2NrICpiMCwgKmIxOwogCkBAIC0zNjAwLDcgKzM2NzQsNyBAQAogCQkgKiBOb3cgY2hlY2sgZm9yIHRoZSBwdXJwb3J0ZWQgRFNBUCBhbmQgU1NBUCBub3QgYmVpbmcKIAkJICogMHhGRiwgdG8gcnVsZSBvdXQgTmV0V2FyZS1vdmVyLTgwMi4zLgogCQkgKi8KLQkJYjEgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTExDLCAwLCBCUEZfSCwgKGJwZl9pbnQzMikweEZGRkYpOworCQliMSA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MTEMsIDAsIEJQRl9ILCAweEZGRkYpOwogCQlnZW5fbm90KGIxKTsKIAkJZ2VuX2FuZChiMCwgYjEpOwogCQlyZXR1cm4gYjE7CkBAIC0zNjA5LDcgKzM2ODMsNyBAQAogCQkvKgogCQkgKiBXZSBjaGVjayBmb3IgTExDIHRyYWZmaWMuCiAJCSAqLwotCQliMCA9IGdlbl9hdG10eXBlX2FiYnJldihjc3RhdGUsIEFfTExDKTsKKwkJYjAgPSBnZW5fYXRtdHlwZV9sbGMoY3N0YXRlKTsKIAkJcmV0dXJuIGIwOwogCiAJY2FzZSBETFRfSUVFRTgwMjoJLyogVG9rZW4gUmluZyAqLwpAQCAtMzY0NywyMSArMzcyMSw0MiBAQAogCQlyZXR1cm4gYjA7CiAKIAlkZWZhdWx0OgotCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2xsYycgbm90IHN1cHBvcnRlZCBmb3IgbGlua3R5cGUgJWQiLCBjc3RhdGUtPmxpbmt0eXBlKTsKLQkJLyogTk9UUkVBQ0hFRCAqLworCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2xsYycgbm90IHN1cHBvcnRlZCBmb3IgJXMiLAorCQkJICBwY2FwX2RhdGFsaW5rX3ZhbF90b19kZXNjcmlwdGlvbl9vcl9kbHQoY3N0YXRlLT5saW5rdHlwZSkpOworCQkvKk5PVFJFQUNIRUQqLwogCX0KIH0KIAogc3RydWN0IGJsb2NrICoKK2dlbl9sbGMoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlKQoreworCS8qCisJICogQ2F0Y2ggZXJyb3JzIHJlcG9ydGVkIGJ5IHVzIGFuZCByb3V0aW5lcyBiZWxvdyB1cywgYW5kIHJldHVybiBOVUxMCisJICogb24gYW4gZXJyb3IuCisJICovCisJaWYgKHNldGptcChjc3RhdGUtPnRvcF9jdHgpKQorCQlyZXR1cm4gKE5VTEwpOworCisJcmV0dXJuIGdlbl9sbGNfaW50ZXJuYWwoY3N0YXRlKTsKK30KKworc3RydWN0IGJsb2NrICoKIGdlbl9sbGNfaShjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUpCiB7CiAJc3RydWN0IGJsb2NrICpiMCwgKmIxOwogCXN0cnVjdCBzbGlzdCAqczsKIAogCS8qCisJICogQ2F0Y2ggZXJyb3JzIHJlcG9ydGVkIGJ5IHVzIGFuZCByb3V0aW5lcyBiZWxvdyB1cywgYW5kIHJldHVybiBOVUxMCisJICogb24gYW4gZXJyb3IuCisJICovCisJaWYgKHNldGptcChjc3RhdGUtPnRvcF9jdHgpKQorCQlyZXR1cm4gKE5VTEwpOworCisJLyoKIAkgKiBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gTExDIGZyYW1lLgogCSAqLwotCWIwID0gZ2VuX2xsYyhjc3RhdGUpOworCWIwID0gZ2VuX2xsY19pbnRlcm5hbChjc3RhdGUpOwogCiAJLyoKIAkgKiBMb2FkIHRoZSBjb250cm9sIGJ5dGUgYW5kIHRlc3QgdGhlIGxvdy1vcmRlciBiaXQ7IGl0IG11c3QKQEAgLTM2ODIsOSArMzc3NywxNiBAQAogCXN0cnVjdCBibG9jayAqYjAsICpiMTsKIAogCS8qCisJICogQ2F0Y2ggZXJyb3JzIHJlcG9ydGVkIGJ5IHVzIGFuZCByb3V0aW5lcyBiZWxvdyB1cywgYW5kIHJldHVybiBOVUxMCisJICogb24gYW4gZXJyb3IuCisJICovCisJaWYgKHNldGptcChjc3RhdGUtPnRvcF9jdHgpKQorCQlyZXR1cm4gKE5VTEwpOworCisJLyoKIAkgKiBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gTExDIGZyYW1lLgogCSAqLwotCWIwID0gZ2VuX2xsYyhjc3RhdGUpOworCWIwID0gZ2VuX2xsY19pbnRlcm5hbChjc3RhdGUpOwogCiAJLyoKIAkgKiBOb3cgY29tcGFyZSB0aGUgbG93LW9yZGVyIDIgYml0IG9mIHRoZSBjb250cm9sIGJ5dGUgYWdhaW5zdApAQCAtMzcwMSw5ICszODAzLDE2IEBACiAJc3RydWN0IGJsb2NrICpiMCwgKmIxOwogCiAJLyoKKwkgKiBDYXRjaCBlcnJvcnMgcmVwb3J0ZWQgYnkgdXMgYW5kIHJvdXRpbmVzIGJlbG93IHVzLCBhbmQgcmV0dXJuIE5VTEwKKwkgKiBvbiBhbiBlcnJvci4KKwkgKi8KKwlpZiAoc2V0am1wKGNzdGF0ZS0+dG9wX2N0eCkpCisJCXJldHVybiAoTlVMTCk7CisKKwkvKgogCSAqIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBMTEMgZnJhbWUuCiAJICovCi0JYjAgPSBnZW5fbGxjKGNzdGF0ZSk7CisJYjAgPSBnZW5fbGxjX2ludGVybmFsKGNzdGF0ZSk7CiAKIAkvKgogCSAqIE5vdyBjb21wYXJlIHRoZSBsb3ctb3JkZXIgMiBiaXQgb2YgdGhlIGNvbnRyb2wgYnl0ZSBhZ2FpbnN0CkBAIC0zNzIwLDkgKzM4MjksMTYgQEAKIAlzdHJ1Y3QgYmxvY2sgKmIwLCAqYjE7CiAKIAkvKgorCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSB1cyBhbmQgcm91dGluZXMgYmVsb3cgdXMsIGFuZCByZXR1cm4gTlVMTAorCSAqIG9uIGFuIGVycm9yLgorCSAqLworCWlmIChzZXRqbXAoY3N0YXRlLT50b3BfY3R4KSkKKwkJcmV0dXJuIChOVUxMKTsKKworCS8qCiAJICogQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIExMQyBmcmFtZS4KIAkgKi8KLQliMCA9IGdlbl9sbGMoY3N0YXRlKTsKKwliMCA9IGdlbl9sbGNfaW50ZXJuYWwoY3N0YXRlKTsKIAogCS8qCiAJICogTm93IGNoZWNrIGZvciBhbiBTIGZyYW1lIHdpdGggdGhlIGFwcHJvcHJpYXRlIHR5cGUuCkBAIC0zNzM4LDkgKzM4NTQsMTYgQEAKIAlzdHJ1Y3QgYmxvY2sgKmIwLCAqYjE7CiAKIAkvKgorCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSB1cyBhbmQgcm91dGluZXMgYmVsb3cgdXMsIGFuZCByZXR1cm4gTlVMTAorCSAqIG9uIGFuIGVycm9yLgorCSAqLworCWlmIChzZXRqbXAoY3N0YXRlLT50b3BfY3R4KSkKKwkJcmV0dXJuIChOVUxMKTsKKworCS8qCiAJICogQ2hlY2sgd2hldGhlciB0aGlzIGlzIGFuIExMQyBmcmFtZS4KIAkgKi8KLQliMCA9IGdlbl9sbGMoY3N0YXRlKTsKKwliMCA9IGdlbl9sbGNfaW50ZXJuYWwoY3N0YXRlKTsKIAogCS8qCiAJICogTm93IGNoZWNrIGZvciBhIFUgZnJhbWUgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdHlwZS4KQEAgLTM3NjMsMTIgKzM4ODYsMTIgQEAKICAqIHByb3RvY29sIElEIGluIGEgU05BUCBoZWFkZXIuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYmxvY2sgKgotZ2VuX2xsY19saW5rdHlwZShjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBwcm90bykKK2dlbl9sbGNfbGlua3R5cGUoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBicGZfdV9pbnQzMiBsbF9wcm90bykKIHsKIAkvKgogCSAqIFhYWCAtIGhhbmRsZSB0b2tlbi1yaW5nIHZhcmlhYmxlLWxlbmd0aCBoZWFkZXIuCiAJICovCi0Jc3dpdGNoIChwcm90bykgeworCXN3aXRjaCAobGxfcHJvdG8pIHsKIAogCWNhc2UgTExDU0FQX0lQOgogCWNhc2UgTExDU0FQX0lTT05TOgpAQCAtMzc3OSwxNSArMzkwMiwxNCBAQAogCQkgKiBEU0FQLCBhcyB3ZSBkbyBmb3Igb3RoZXIgU0FQIHZhbHVlcz8KIAkJICovCiAJCXJldHVybiBnZW5fY21wKGNzdGF0ZSwgT1JfTExDLCAwLCBCUEZfSCwgKGJwZl91X2ludDMyKQotCQkJICAgICAoKHByb3RvIDw8IDgpIHwgcHJvdG8pKTsKKwkJCSAgICAgKChsbF9wcm90byA8PCA4KSB8IGxsX3Byb3RvKSk7CiAKIAljYXNlIExMQ1NBUF9JUFg6CiAJCS8qCiAJCSAqIFhYWCAtIGFyZSB0aGVyZSBldmVyIFNOQVAgZnJhbWVzIGZvciBJUFggb24KIAkJICogbm9uLUV0aGVybmV0IDgwMi54IG5ldHdvcmtzPwogCQkgKi8KLQkJcmV0dXJuIGdlbl9jbXAoY3N0YXRlLCBPUl9MTEMsIDAsIEJQRl9CLAotCQkgICAgKGJwZl9pbnQzMilMTENTQVBfSVBYKTsKKwkJcmV0dXJuIGdlbl9jbXAoY3N0YXRlLCBPUl9MTEMsIDAsIEJQRl9CLCBMTENTQVBfSVBYKTsKIAogCWNhc2UgRVRIRVJUWVBFX0FUQUxLOgogCQkvKgpAQCAtMzgwNiwxMiArMzkyOCwxMiBAQAogCQkgKiBYWFggLSB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrIGZvciBJUFggODAyLjMKIAkJICogaGVyZSwgYnV0IHNob3VsZCB3ZSBjaGVjayBmb3IgdGhlIElQWCBFdGhlcnR5cGU/CiAJCSAqLwotCQlpZiAocHJvdG8gPD0gRVRIRVJNVFUpIHsKKwkJaWYgKGxsX3Byb3RvIDw9IEVUSEVSTVRVKSB7CiAJCQkvKgogCQkJICogVGhpcyBpcyBhbiBMTEMgU0FQIHZhbHVlLCBzbyBjaGVjawogCQkJICogdGhlIERTQVAuCiAJCQkgKi8KLQkJCXJldHVybiBnZW5fY21wKGNzdGF0ZSwgT1JfTExDLCAwLCBCUEZfQiwgKGJwZl9pbnQzMilwcm90byk7CisJCQlyZXR1cm4gZ2VuX2NtcChjc3RhdGUsIE9SX0xMQywgMCwgQlBGX0IsIGxsX3Byb3RvKTsKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBUaGlzIGlzIGFuIEV0aGVybmV0IHR5cGU7IHdlIGFzc3VtZSB0aGF0IGl0J3MKQEAgLTM4MjYsMjAgKzM5NDgsMjAgQEAKIAkJCSAqIG9yZ2FuaXphdGlvbiBjb2RlIG9mIDB4MDAwMDAwIChlbmNhcHN1bGF0ZWQKIAkJCSAqIEV0aGVybmV0KSwgd2UnZCBkbwogCQkJICoKLQkJCSAqCXJldHVybiBnZW5fc25hcChjc3RhdGUsIDB4MDAwMDAwLCBwcm90byk7CisJCQkgKglyZXR1cm4gZ2VuX3NuYXAoY3N0YXRlLCAweDAwMDAwMCwgbGxfcHJvdG8pOwogCQkJICoKIAkJCSAqIGhlcmU7IGZvciBub3csIHdlIGRvbid0LCBhcyBwZXIgdGhlIGFib3ZlLgogCQkJICogSSBkb24ndCBrbm93IHdoZXRoZXIgaXQncyB3b3J0aCB0aGUgZXh0cmEgQ1BVCiAJCQkgKiB0aW1lIHRvIGRvIHRoZSByaWdodCBjaGVjayBvciBub3QuCiAJCQkgKi8KLQkJCXJldHVybiBnZW5fY21wKGNzdGF0ZSwgT1JfTExDLCA2LCBCUEZfSCwgKGJwZl9pbnQzMilwcm90byk7CisJCQlyZXR1cm4gZ2VuX2NtcChjc3RhdGUsIE9SX0xMQywgNiwgQlBGX0gsIGxsX3Byb3RvKTsKIAkJfQogCX0KIH0KIAogc3RhdGljIHN0cnVjdCBibG9jayAqCiBnZW5faG9zdG9wKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgYnBmX3VfaW50MzIgYWRkciwgYnBmX3VfaW50MzIgbWFzaywKLSAgICBpbnQgZGlyLCBpbnQgcHJvdG8sIHVfaW50IHNyY19vZmYsIHVfaW50IGRzdF9vZmYpCisgICAgaW50IGRpciwgYnBmX3VfaW50MzIgbGxfcHJvdG8sIHVfaW50IHNyY19vZmYsIHVfaW50IGRzdF9vZmYpCiB7CiAJc3RydWN0IGJsb2NrICpiMCwgKmIxOwogCXVfaW50IG9mZnNldDsKQEAgLTM4NTUsNDcgKzM5NzcsNDggQEAKIAkJYnJlYWs7CiAKIAljYXNlIFFfQU5EOgotCQliMCA9IGdlbl9ob3N0b3AoY3N0YXRlLCBhZGRyLCBtYXNrLCBRX1NSQywgcHJvdG8sIHNyY19vZmYsIGRzdF9vZmYpOwotCQliMSA9IGdlbl9ob3N0b3AoY3N0YXRlLCBhZGRyLCBtYXNrLCBRX0RTVCwgcHJvdG8sIHNyY19vZmYsIGRzdF9vZmYpOworCQliMCA9IGdlbl9ob3N0b3AoY3N0YXRlLCBhZGRyLCBtYXNrLCBRX1NSQywgbGxfcHJvdG8sIHNyY19vZmYsIGRzdF9vZmYpOworCQliMSA9IGdlbl9ob3N0b3AoY3N0YXRlLCBhZGRyLCBtYXNrLCBRX0RTVCwgbGxfcHJvdG8sIHNyY19vZmYsIGRzdF9vZmYpOwogCQlnZW5fYW5kKGIwLCBiMSk7CiAJCXJldHVybiBiMTsKIAotCWNhc2UgUV9PUjoKIAljYXNlIFFfREVGQVVMVDoKLQkJYjAgPSBnZW5faG9zdG9wKGNzdGF0ZSwgYWRkciwgbWFzaywgUV9TUkMsIHByb3RvLCBzcmNfb2ZmLCBkc3Rfb2ZmKTsKLQkJYjEgPSBnZW5faG9zdG9wKGNzdGF0ZSwgYWRkciwgbWFzaywgUV9EU1QsIHByb3RvLCBzcmNfb2ZmLCBkc3Rfb2ZmKTsKKwljYXNlIFFfT1I6CisJCWIwID0gZ2VuX2hvc3RvcChjc3RhdGUsIGFkZHIsIG1hc2ssIFFfU1JDLCBsbF9wcm90bywgc3JjX29mZiwgZHN0X29mZik7CisJCWIxID0gZ2VuX2hvc3RvcChjc3RhdGUsIGFkZHIsIG1hc2ssIFFfRFNULCBsbF9wcm90bywgc3JjX29mZiwgZHN0X29mZik7CiAJCWdlbl9vcihiMCwgYjEpOwogCQlyZXR1cm4gYjE7CiAKIAljYXNlIFFfQUREUjE6CiAJCWJwZl9lcnJvcihjc3RhdGUsICInYWRkcjEnIGFuZCAnYWRkcmVzczEnIGFyZSBub3QgdmFsaWQgcXVhbGlmaWVycyBmb3IgYWRkcmVzc2VzIG90aGVyIHRoYW4gODAyLjExIE1BQyBhZGRyZXNzZXMiKTsKLQkJYnJlYWs7CisJCS8qTk9UUkVBQ0hFRCovCiAKIAljYXNlIFFfQUREUjI6CiAJCWJwZl9lcnJvcihjc3RhdGUsICInYWRkcjInIGFuZCAnYWRkcmVzczInIGFyZSBub3QgdmFsaWQgcXVhbGlmaWVycyBmb3IgYWRkcmVzc2VzIG90aGVyIHRoYW4gODAyLjExIE1BQyBhZGRyZXNzZXMiKTsKLQkJYnJlYWs7CisJCS8qTk9UUkVBQ0hFRCovCiAKIAljYXNlIFFfQUREUjM6CiAJCWJwZl9lcnJvcihjc3RhdGUsICInYWRkcjMnIGFuZCAnYWRkcmVzczMnIGFyZSBub3QgdmFsaWQgcXVhbGlmaWVycyBmb3IgYWRkcmVzc2VzIG90aGVyIHRoYW4gODAyLjExIE1BQyBhZGRyZXNzZXMiKTsKLQkJYnJlYWs7CisJCS8qTk9UUkVBQ0hFRCovCiAKIAljYXNlIFFfQUREUjQ6CiAJCWJwZl9lcnJvcihjc3RhdGUsICInYWRkcjQnIGFuZCAnYWRkcmVzczQnIGFyZSBub3QgdmFsaWQgcXVhbGlmaWVycyBmb3IgYWRkcmVzc2VzIG90aGVyIHRoYW4gODAyLjExIE1BQyBhZGRyZXNzZXMiKTsKLQkJYnJlYWs7CisJCS8qTk9UUkVBQ0hFRCovCiAKIAljYXNlIFFfUkE6CiAJCWJwZl9lcnJvcihjc3RhdGUsICIncmEnIGlzIG5vdCBhIHZhbGlkIHF1YWxpZmllciBmb3IgYWRkcmVzc2VzIG90aGVyIHRoYW4gODAyLjExIE1BQyBhZGRyZXNzZXMiKTsKLQkJYnJlYWs7CisJCS8qTk9UUkVBQ0hFRCovCiAKIAljYXNlIFFfVEE6CiAJCWJwZl9lcnJvcihjc3RhdGUsICIndGEnIGlzIG5vdCBhIHZhbGlkIHF1YWxpZmllciBmb3IgYWRkcmVzc2VzIG90aGVyIHRoYW4gODAyLjExIE1BQyBhZGRyZXNzZXMiKTsKLQkJYnJlYWs7CisJCS8qTk9UUkVBQ0hFRCovCiAKIAlkZWZhdWx0OgogCQlhYm9ydCgpOworCQkvKk5PVFJFQUNIRUQqLwogCX0KLQliMCA9IGdlbl9saW5rdHlwZShjc3RhdGUsIHByb3RvKTsKLQliMSA9IGdlbl9tY21wKGNzdGF0ZSwgT1JfTElOS1BMLCBvZmZzZXQsIEJQRl9XLCAoYnBmX2ludDMyKWFkZHIsIG1hc2spOworCWIwID0gZ2VuX2xpbmt0eXBlKGNzdGF0ZSwgbGxfcHJvdG8pOworCWIxID0gZ2VuX21jbXAoY3N0YXRlLCBPUl9MSU5LUEwsIG9mZnNldCwgQlBGX1csIGFkZHIsIG1hc2spOwogCWdlbl9hbmQoYjAsIGIxKTsKIAlyZXR1cm4gYjE7CiB9CkBAIC0zOTAzLDcgKzQwMjYsOCBAQAogI2lmZGVmIElORVQ2CiBzdGF0aWMgc3RydWN0IGJsb2NrICoKIGdlbl9ob3N0b3A2KGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgc3RydWN0IGluNl9hZGRyICphZGRyLAotICAgIHN0cnVjdCBpbjZfYWRkciAqbWFzaywgaW50IGRpciwgaW50IHByb3RvLCB1X2ludCBzcmNfb2ZmLCB1X2ludCBkc3Rfb2ZmKQorICAgIHN0cnVjdCBpbjZfYWRkciAqbWFzaywgaW50IGRpciwgYnBmX3VfaW50MzIgbGxfcHJvdG8sIHVfaW50IHNyY19vZmYsCisgICAgdV9pbnQgZHN0X29mZikKIHsKIAlzdHJ1Y3QgYmxvY2sgKmIwLCAqYjE7CiAJdV9pbnQgb2Zmc2V0OwpAQCAtMzkyMCw0NCArNDA0NCw0NSBAQAogCQlicmVhazsKIAogCWNhc2UgUV9BTkQ6Ci0JCWIwID0gZ2VuX2hvc3RvcDYoY3N0YXRlLCBhZGRyLCBtYXNrLCBRX1NSQywgcHJvdG8sIHNyY19vZmYsIGRzdF9vZmYpOwotCQliMSA9IGdlbl9ob3N0b3A2KGNzdGF0ZSwgYWRkciwgbWFzaywgUV9EU1QsIHByb3RvLCBzcmNfb2ZmLCBkc3Rfb2ZmKTsKKwkJYjAgPSBnZW5faG9zdG9wNihjc3RhdGUsIGFkZHIsIG1hc2ssIFFfU1JDLCBsbF9wcm90bywgc3JjX29mZiwgZHN0X29mZik7CisJCWIxID0gZ2VuX2hvc3RvcDYoY3N0YXRlLCBhZGRyLCBtYXNrLCBRX0RTVCwgbGxfcHJvdG8sIHNyY19vZmYsIGRzdF9vZmYpOwogCQlnZW5fYW5kKGIwLCBiMSk7CiAJCXJldHVybiBiMTsKIAotCWNhc2UgUV9PUjoKIAljYXNlIFFfREVGQVVMVDoKLQkJYjAgPSBnZW5faG9zdG9wNihjc3RhdGUsIGFkZHIsIG1hc2ssIFFfU1JDLCBwcm90bywgc3JjX29mZiwgZHN0X29mZik7Ci0JCWIxID0gZ2VuX2hvc3RvcDYoY3N0YXRlLCBhZGRyLCBtYXNrLCBRX0RTVCwgcHJvdG8sIHNyY19vZmYsIGRzdF9vZmYpOworCWNhc2UgUV9PUjoKKwkJYjAgPSBnZW5faG9zdG9wNihjc3RhdGUsIGFkZHIsIG1hc2ssIFFfU1JDLCBsbF9wcm90bywgc3JjX29mZiwgZHN0X29mZik7CisJCWIxID0gZ2VuX2hvc3RvcDYoY3N0YXRlLCBhZGRyLCBtYXNrLCBRX0RTVCwgbGxfcHJvdG8sIHNyY19vZmYsIGRzdF9vZmYpOwogCQlnZW5fb3IoYjAsIGIxKTsKIAkJcmV0dXJuIGIxOwogCiAJY2FzZSBRX0FERFIxOgogCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2FkZHIxJyBhbmQgJ2FkZHJlc3MxJyBhcmUgbm90IHZhbGlkIHF1YWxpZmllcnMgZm9yIGFkZHJlc3NlcyBvdGhlciB0aGFuIDgwMi4xMSBNQUMgYWRkcmVzc2VzIik7Ci0JCWJyZWFrOworCQkvKk5PVFJFQUNIRUQqLwogCiAJY2FzZSBRX0FERFIyOgogCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2FkZHIyJyBhbmQgJ2FkZHJlc3MyJyBhcmUgbm90IHZhbGlkIHF1YWxpZmllcnMgZm9yIGFkZHJlc3NlcyBvdGhlciB0aGFuIDgwMi4xMSBNQUMgYWRkcmVzc2VzIik7Ci0JCWJyZWFrOworCQkvKk5PVFJFQUNIRUQqLwogCiAJY2FzZSBRX0FERFIzOgogCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2FkZHIzJyBhbmQgJ2FkZHJlc3MzJyBhcmUgbm90IHZhbGlkIHF1YWxpZmllcnMgZm9yIGFkZHJlc3NlcyBvdGhlciB0aGFuIDgwMi4xMSBNQUMgYWRkcmVzc2VzIik7Ci0JCWJyZWFrOworCQkvKk5PVFJFQUNIRUQqLwogCiAJY2FzZSBRX0FERFI0OgogCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2FkZHI0JyBhbmQgJ2FkZHJlc3M0JyBhcmUgbm90IHZhbGlkIHF1YWxpZmllcnMgZm9yIGFkZHJlc3NlcyBvdGhlciB0aGFuIDgwMi4xMSBNQUMgYWRkcmVzc2VzIik7Ci0JCWJyZWFrOworCQkvKk5PVFJFQUNIRUQqLwogCiAJY2FzZSBRX1JBOgogCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3JhJyBpcyBub3QgYSB2YWxpZCBxdWFsaWZpZXIgZm9yIGFkZHJlc3NlcyBvdGhlciB0aGFuIDgwMi4xMSBNQUMgYWRkcmVzc2VzIik7Ci0JCWJyZWFrOworCQkvKk5PVFJFQUNIRUQqLwogCiAJY2FzZSBRX1RBOgogCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3RhJyBpcyBub3QgYSB2YWxpZCBxdWFsaWZpZXIgZm9yIGFkZHJlc3NlcyBvdGhlciB0aGFuIDgwMi4xMSBNQUMgYWRkcmVzc2VzIik7Ci0JCWJyZWFrOworCQkvKk5PVFJFQUNIRUQqLwogCiAJZGVmYXVsdDoKIAkJYWJvcnQoKTsKKwkJLypOT1RSRUFDSEVEKi8KIAl9CiAJLyogdGhpcyBvcmRlciBpcyBpbXBvcnRhbnQgKi8KIAlhID0gKHVpbnQzMl90ICopYWRkcjsKQEAgLTM5NjksNyArNDA5NCw3IEBACiAJZ2VuX2FuZChiMCwgYjEpOwogCWIwID0gZ2VuX21jbXAoY3N0YXRlLCBPUl9MSU5LUEwsIG9mZnNldCArIDAsIEJQRl9XLCBudG9obChhWzBdKSwgbnRvaGwobVswXSkpOwogCWdlbl9hbmQoYjAsIGIxKTsKLQliMCA9IGdlbl9saW5rdHlwZShjc3RhdGUsIHByb3RvKTsKKwliMCA9IGdlbl9saW5rdHlwZShjc3RhdGUsIGxsX3Byb3RvKTsKIAlnZW5fYW5kKGIwLCBiMSk7CiAJcmV0dXJuIGIxOwogfQpAQCAtNDAwMiwzMCArNDEyNywzMCBAQAogCiAJY2FzZSBRX0FERFIxOgogCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2FkZHIxJyBhbmQgJ2FkZHJlc3MxJyBhcmUgb25seSBzdXBwb3J0ZWQgb24gODAyLjExIHdpdGggODAyLjExIGhlYWRlcnMiKTsKLQkJYnJlYWs7CisJCS8qTk9UUkVBQ0hFRCovCiAKIAljYXNlIFFfQUREUjI6CiAJCWJwZl9lcnJvcihjc3RhdGUsICInYWRkcjInIGFuZCAnYWRkcmVzczInIGFyZSBvbmx5IHN1cHBvcnRlZCBvbiA4MDIuMTEgd2l0aCA4MDIuMTEgaGVhZGVycyIpOwotCQlicmVhazsKKwkJLypOT1RSRUFDSEVEKi8KIAogCWNhc2UgUV9BRERSMzoKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgIidhZGRyMycgYW5kICdhZGRyZXNzMycgYXJlIG9ubHkgc3VwcG9ydGVkIG9uIDgwMi4xMSB3aXRoIDgwMi4xMSBoZWFkZXJzIik7Ci0JCWJyZWFrOworCQkvKk5PVFJFQUNIRUQqLwogCiAJY2FzZSBRX0FERFI0OgogCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2FkZHI0JyBhbmQgJ2FkZHJlc3M0JyBhcmUgb25seSBzdXBwb3J0ZWQgb24gODAyLjExIHdpdGggODAyLjExIGhlYWRlcnMiKTsKLQkJYnJlYWs7CisJCS8qTk9UUkVBQ0hFRCovCiAKIAljYXNlIFFfUkE6CiAJCWJwZl9lcnJvcihjc3RhdGUsICIncmEnIGlzIG9ubHkgc3VwcG9ydGVkIG9uIDgwMi4xMSB3aXRoIDgwMi4xMSBoZWFkZXJzIik7Ci0JCWJyZWFrOworCQkvKk5PVFJFQUNIRUQqLwogCiAJY2FzZSBRX1RBOgogCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3RhJyBpcyBvbmx5IHN1cHBvcnRlZCBvbiA4MDIuMTEgd2l0aCA4MDIuMTEgaGVhZGVycyIpOwotCQlicmVhazsKKwkJLypOT1RSRUFDSEVEKi8KIAl9CiAJYWJvcnQoKTsKLQkvKiBOT1RSRUFDSEVEICovCisJLypOT1RSRUFDSEVEKi8KIH0KIAogLyoKQEAgLTQwNTgsMzAgKzQxODMsMzAgQEAKIAogCWNhc2UgUV9BRERSMToKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgIidhZGRyMScgYW5kICdhZGRyZXNzMScgYXJlIG9ubHkgc3VwcG9ydGVkIG9uIDgwMi4xMSIpOwotCQlicmVhazsKKwkJLypOT1RSRUFDSEVEKi8KIAogCWNhc2UgUV9BRERSMjoKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgIidhZGRyMicgYW5kICdhZGRyZXNzMicgYXJlIG9ubHkgc3VwcG9ydGVkIG9uIDgwMi4xMSIpOwotCQlicmVhazsKKwkJLypOT1RSRUFDSEVEKi8KIAogCWNhc2UgUV9BRERSMzoKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgIidhZGRyMycgYW5kICdhZGRyZXNzMycgYXJlIG9ubHkgc3VwcG9ydGVkIG9uIDgwMi4xMSIpOwotCQlicmVhazsKKwkJLypOT1RSRUFDSEVEKi8KIAogCWNhc2UgUV9BRERSNDoKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgIidhZGRyNCcgYW5kICdhZGRyZXNzNCcgYXJlIG9ubHkgc3VwcG9ydGVkIG9uIDgwMi4xMSIpOwotCQlicmVhazsKKwkJLypOT1RSRUFDSEVEKi8KIAogCWNhc2UgUV9SQToKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgIidyYScgaXMgb25seSBzdXBwb3J0ZWQgb24gODAyLjExIik7Ci0JCWJyZWFrOworCQkvKk5PVFJFQUNIRUQqLwogCiAJY2FzZSBRX1RBOgogCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3RhJyBpcyBvbmx5IHN1cHBvcnRlZCBvbiA4MDIuMTEiKTsKLQkJYnJlYWs7CisJCS8qTk9UUkVBQ0hFRCovCiAJfQogCWFib3J0KCk7Ci0JLyogTk9UUkVBQ0hFRCAqLworCS8qTk9UUkVBQ0hFRCovCiB9CiAKIC8qCkBAIC00MTE0LDMwICs0MjM5LDMwIEBACiAKIAljYXNlIFFfQUREUjE6CiAJCWJwZl9lcnJvcihjc3RhdGUsICInYWRkcjEnIGFuZCAnYWRkcmVzczEnIGFyZSBvbmx5IHN1cHBvcnRlZCBvbiA4MDIuMTEiKTsKLQkJYnJlYWs7CisJCS8qTk9UUkVBQ0hFRCovCiAKIAljYXNlIFFfQUREUjI6CiAJCWJwZl9lcnJvcihjc3RhdGUsICInYWRkcjInIGFuZCAnYWRkcmVzczInIGFyZSBvbmx5IHN1cHBvcnRlZCBvbiA4MDIuMTEiKTsKLQkJYnJlYWs7CisJCS8qTk9UUkVBQ0hFRCovCiAKIAljYXNlIFFfQUREUjM6CiAJCWJwZl9lcnJvcihjc3RhdGUsICInYWRkcjMnIGFuZCAnYWRkcmVzczMnIGFyZSBvbmx5IHN1cHBvcnRlZCBvbiA4MDIuMTEiKTsKLQkJYnJlYWs7CisJCS8qTk9UUkVBQ0hFRCovCiAKIAljYXNlIFFfQUREUjQ6CiAJCWJwZl9lcnJvcihjc3RhdGUsICInYWRkcjQnIGFuZCAnYWRkcmVzczQnIGFyZSBvbmx5IHN1cHBvcnRlZCBvbiA4MDIuMTEiKTsKLQkJYnJlYWs7CisJCS8qTk9UUkVBQ0hFRCovCiAKIAljYXNlIFFfUkE6CiAJCWJwZl9lcnJvcihjc3RhdGUsICIncmEnIGlzIG9ubHkgc3VwcG9ydGVkIG9uIDgwMi4xMSIpOwotCQlicmVhazsKKwkJLypOT1RSRUFDSEVEKi8KIAogCWNhc2UgUV9UQToKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgIid0YScgaXMgb25seSBzdXBwb3J0ZWQgb24gODAyLjExIik7Ci0JCWJyZWFrOworCQkvKk5PVFJFQUNIRUQqLwogCX0KIAlhYm9ydCgpOwotCS8qIE5PVFJFQUNIRUQgKi8KKwkvKk5PVFJFQUNIRUQqLwogfQogCiAvKgpAQCAtNDQyNiw2ICs0NTUxLDY4IEBACiAJCWdlbl9hbmQoYjEsIGIwKTsKIAkJcmV0dXJuIGIwOwogCisJY2FzZSBRX0FORDoKKwkJYjAgPSBnZW5fd2xhbmhvc3RvcChjc3RhdGUsIGVhZGRyLCBRX1NSQyk7CisJCWIxID0gZ2VuX3dsYW5ob3N0b3AoY3N0YXRlLCBlYWRkciwgUV9EU1QpOworCQlnZW5fYW5kKGIwLCBiMSk7CisJCXJldHVybiBiMTsKKworCWNhc2UgUV9ERUZBVUxUOgorCWNhc2UgUV9PUjoKKwkJYjAgPSBnZW5fd2xhbmhvc3RvcChjc3RhdGUsIGVhZGRyLCBRX1NSQyk7CisJCWIxID0gZ2VuX3dsYW5ob3N0b3AoY3N0YXRlLCBlYWRkciwgUV9EU1QpOworCQlnZW5fb3IoYjAsIGIxKTsKKwkJcmV0dXJuIGIxOworCisJLyoKKwkgKiBYWFggLSBhZGQgQlNTSUQga2V5d29yZD8KKwkgKi8KKwljYXNlIFFfQUREUjE6CisJCXJldHVybiAoZ2VuX2JjbXAoY3N0YXRlLCBPUl9MSU5LSERSLCA0LCA2LCBlYWRkcikpOworCisJY2FzZSBRX0FERFIyOgorCQkvKgorCQkgKiBOb3QgcHJlc2VudCBpbiBDVFMgb3IgQUNLIGNvbnRyb2wgZnJhbWVzLgorCQkgKi8KKwkJYjAgPSBnZW5fbWNtcChjc3RhdGUsIE9SX0xJTktIRFIsIDAsIEJQRl9CLCBJRUVFODAyMTFfRkMwX1RZUEVfQ1RMLAorCQkJSUVFRTgwMjExX0ZDMF9UWVBFX01BU0spOworCQlnZW5fbm90KGIwKTsKKwkJYjEgPSBnZW5fbWNtcChjc3RhdGUsIE9SX0xJTktIRFIsIDAsIEJQRl9CLCBJRUVFODAyMTFfRkMwX1NVQlRZUEVfQ1RTLAorCQkJSUVFRTgwMjExX0ZDMF9TVUJUWVBFX01BU0spOworCQlnZW5fbm90KGIxKTsKKwkJYjIgPSBnZW5fbWNtcChjc3RhdGUsIE9SX0xJTktIRFIsIDAsIEJQRl9CLCBJRUVFODAyMTFfRkMwX1NVQlRZUEVfQUNLLAorCQkJSUVFRTgwMjExX0ZDMF9TVUJUWVBFX01BU0spOworCQlnZW5fbm90KGIyKTsKKwkJZ2VuX2FuZChiMSwgYjIpOworCQlnZW5fb3IoYjAsIGIyKTsKKwkJYjEgPSBnZW5fYmNtcChjc3RhdGUsIE9SX0xJTktIRFIsIDEwLCA2LCBlYWRkcik7CisJCWdlbl9hbmQoYjIsIGIxKTsKKwkJcmV0dXJuIGIxOworCisJY2FzZSBRX0FERFIzOgorCQkvKgorCQkgKiBOb3QgcHJlc2VudCBpbiBjb250cm9sIGZyYW1lcy4KKwkJICovCisJCWIwID0gZ2VuX21jbXAoY3N0YXRlLCBPUl9MSU5LSERSLCAwLCBCUEZfQiwgSUVFRTgwMjExX0ZDMF9UWVBFX0NUTCwKKwkJCUlFRUU4MDIxMV9GQzBfVFlQRV9NQVNLKTsKKwkJZ2VuX25vdChiMCk7CisJCWIxID0gZ2VuX2JjbXAoY3N0YXRlLCBPUl9MSU5LSERSLCAxNiwgNiwgZWFkZHIpOworCQlnZW5fYW5kKGIwLCBiMSk7CisJCXJldHVybiBiMTsKKworCWNhc2UgUV9BRERSNDoKKwkJLyoKKwkJICogUHJlc2VudCBvbmx5IGlmIHRoZSBkaXJlY3Rpb24gbWFzayBoYXMgYm90aCAiRnJvbSBEUyIKKwkJICogYW5kICJUbyBEUyIgc2V0LiAgTmVpdGhlciBjb250cm9sIGZyYW1lcyBub3IgbWFuYWdlbWVudAorCQkgKiBmcmFtZXMgc2hvdWxkIGhhdmUgYm90aCBvZiB0aG9zZSBzZXQsIHNvIHdlIGRvbid0CisJCSAqIGNoZWNrIHRoZSBmcmFtZSB0eXBlLgorCQkgKi8KKwkJYjAgPSBnZW5fbWNtcChjc3RhdGUsIE9SX0xJTktIRFIsIDEsIEJQRl9CLAorCQkJSUVFRTgwMjExX0ZDMV9ESVJfRFNUT0RTLCBJRUVFODAyMTFfRkMxX0RJUl9NQVNLKTsKKwkJYjEgPSBnZW5fYmNtcChjc3RhdGUsIE9SX0xJTktIRFIsIDI0LCA2LCBlYWRkcik7CisJCWdlbl9hbmQoYjAsIGIxKTsKKwkJcmV0dXJuIGIxOworCiAJY2FzZSBRX1JBOgogCQkvKgogCQkgKiBOb3QgcHJlc2VudCBpbiBtYW5hZ2VtZW50IGZyYW1lczsgYWRkcjEgaW4gb3RoZXIKQEAgLTQ0OTYsNzEgKzQ2ODMsOSBAQAogCQliMSA9IGdlbl9iY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgMTAsIDYsIGVhZGRyKTsKIAkJZ2VuX2FuZChiMiwgYjEpOwogCQlyZXR1cm4gYjE7Ci0KLQkvKgotCSAqIFhYWCAtIGFkZCBCU1NJRCBrZXl3b3JkPwotCSAqLwotCWNhc2UgUV9BRERSMToKLQkJcmV0dXJuIChnZW5fYmNtcChjc3RhdGUsIE9SX0xJTktIRFIsIDQsIDYsIGVhZGRyKSk7Ci0KLQljYXNlIFFfQUREUjI6Ci0JCS8qCi0JCSAqIE5vdCBwcmVzZW50IGluIENUUyBvciBBQ0sgY29udHJvbCBmcmFtZXMuCi0JCSAqLwotCQliMCA9IGdlbl9tY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgMCwgQlBGX0IsIElFRUU4MDIxMV9GQzBfVFlQRV9DVEwsCi0JCQlJRUVFODAyMTFfRkMwX1RZUEVfTUFTSyk7Ci0JCWdlbl9ub3QoYjApOwotCQliMSA9IGdlbl9tY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgMCwgQlBGX0IsIElFRUU4MDIxMV9GQzBfU1VCVFlQRV9DVFMsCi0JCQlJRUVFODAyMTFfRkMwX1NVQlRZUEVfTUFTSyk7Ci0JCWdlbl9ub3QoYjEpOwotCQliMiA9IGdlbl9tY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgMCwgQlBGX0IsIElFRUU4MDIxMV9GQzBfU1VCVFlQRV9BQ0ssCi0JCQlJRUVFODAyMTFfRkMwX1NVQlRZUEVfTUFTSyk7Ci0JCWdlbl9ub3QoYjIpOwotCQlnZW5fYW5kKGIxLCBiMik7Ci0JCWdlbl9vcihiMCwgYjIpOwotCQliMSA9IGdlbl9iY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgMTAsIDYsIGVhZGRyKTsKLQkJZ2VuX2FuZChiMiwgYjEpOwotCQlyZXR1cm4gYjE7Ci0KLQljYXNlIFFfQUREUjM6Ci0JCS8qCi0JCSAqIE5vdCBwcmVzZW50IGluIGNvbnRyb2wgZnJhbWVzLgotCQkgKi8KLQkJYjAgPSBnZW5fbWNtcChjc3RhdGUsIE9SX0xJTktIRFIsIDAsIEJQRl9CLCBJRUVFODAyMTFfRkMwX1RZUEVfQ1RMLAotCQkJSUVFRTgwMjExX0ZDMF9UWVBFX01BU0spOwotCQlnZW5fbm90KGIwKTsKLQkJYjEgPSBnZW5fYmNtcChjc3RhdGUsIE9SX0xJTktIRFIsIDE2LCA2LCBlYWRkcik7Ci0JCWdlbl9hbmQoYjAsIGIxKTsKLQkJcmV0dXJuIGIxOwotCi0JY2FzZSBRX0FERFI0OgotCQkvKgotCQkgKiBQcmVzZW50IG9ubHkgaWYgdGhlIGRpcmVjdGlvbiBtYXNrIGhhcyBib3RoICJGcm9tIERTIgotCQkgKiBhbmQgIlRvIERTIiBzZXQuICBOZWl0aGVyIGNvbnRyb2wgZnJhbWVzIG5vciBtYW5hZ2VtZW50Ci0JCSAqIGZyYW1lcyBzaG91bGQgaGF2ZSBib3RoIG9mIHRob3NlIHNldCwgc28gd2UgZG9uJ3QKLQkJICogY2hlY2sgdGhlIGZyYW1lIHR5cGUuCi0JCSAqLwotCQliMCA9IGdlbl9tY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgMSwgQlBGX0IsCi0JCQlJRUVFODAyMTFfRkMxX0RJUl9EU1RPRFMsIElFRUU4MDIxMV9GQzFfRElSX01BU0spOwotCQliMSA9IGdlbl9iY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgMjQsIDYsIGVhZGRyKTsKLQkJZ2VuX2FuZChiMCwgYjEpOwotCQlyZXR1cm4gYjE7Ci0KLQljYXNlIFFfQU5EOgotCQliMCA9IGdlbl93bGFuaG9zdG9wKGNzdGF0ZSwgZWFkZHIsIFFfU1JDKTsKLQkJYjEgPSBnZW5fd2xhbmhvc3RvcChjc3RhdGUsIGVhZGRyLCBRX0RTVCk7Ci0JCWdlbl9hbmQoYjAsIGIxKTsKLQkJcmV0dXJuIGIxOwotCi0JY2FzZSBRX0RFRkFVTFQ6Ci0JY2FzZSBRX09SOgotCQliMCA9IGdlbl93bGFuaG9zdG9wKGNzdGF0ZSwgZWFkZHIsIFFfU1JDKTsKLQkJYjEgPSBnZW5fd2xhbmhvc3RvcChjc3RhdGUsIGVhZGRyLCBRX0RTVCk7Ci0JCWdlbl9vcihiMCwgYjEpOwotCQlyZXR1cm4gYjE7CiAJfQogCWFib3J0KCk7Ci0JLyogTk9UUkVBQ0hFRCAqLworCS8qTk9UUkVBQ0hFRCovCiB9CiAKIC8qCkBAIC00NTk1LDMwICs0NzIwLDMwIEBACiAKIAljYXNlIFFfQUREUjE6CiAJCWJwZl9lcnJvcihjc3RhdGUsICInYWRkcjEnIGFuZCAnYWRkcmVzczEnIGFyZSBvbmx5IHN1cHBvcnRlZCBvbiA4MDIuMTEiKTsKLQkJYnJlYWs7CisJCS8qTk9UUkVBQ0hFRCovCiAKIAljYXNlIFFfQUREUjI6CiAJCWJwZl9lcnJvcihjc3RhdGUsICInYWRkcjInIGFuZCAnYWRkcmVzczInIGFyZSBvbmx5IHN1cHBvcnRlZCBvbiA4MDIuMTEiKTsKLQkJYnJlYWs7CisJCS8qTk9UUkVBQ0hFRCovCiAKIAljYXNlIFFfQUREUjM6CiAJCWJwZl9lcnJvcihjc3RhdGUsICInYWRkcjMnIGFuZCAnYWRkcmVzczMnIGFyZSBvbmx5IHN1cHBvcnRlZCBvbiA4MDIuMTEiKTsKLQkJYnJlYWs7CisJCS8qTk9UUkVBQ0hFRCovCiAKIAljYXNlIFFfQUREUjQ6CiAJCWJwZl9lcnJvcihjc3RhdGUsICInYWRkcjQnIGFuZCAnYWRkcmVzczQnIGFyZSBvbmx5IHN1cHBvcnRlZCBvbiA4MDIuMTEiKTsKLQkJYnJlYWs7CisJCS8qTk9UUkVBQ0hFRCovCiAKIAljYXNlIFFfUkE6CiAJCWJwZl9lcnJvcihjc3RhdGUsICIncmEnIGlzIG9ubHkgc3VwcG9ydGVkIG9uIDgwMi4xMSIpOwotCQlicmVhazsKKwkJLypOT1RSRUFDSEVEKi8KIAogCWNhc2UgUV9UQToKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgIid0YScgaXMgb25seSBzdXBwb3J0ZWQgb24gODAyLjExIik7Ci0JCWJyZWFrOworCQkvKk5PVFJFQUNIRUQqLwogCX0KIAlhYm9ydCgpOwotCS8qIE5PVFJFQUNIRUQgKi8KKwkvKk5PVFJFQUNIRUQqLwogfQogCiAvKgpAQCAtNDY2NSw0MSArNDc5MCw2OCBAQAogCQlnZW5fYW5kKGIwLCBiMSk7CiAJCXJldHVybiBiMTsKIAotCWNhc2UgUV9PUjoKIAljYXNlIFFfREVGQVVMVDoKKwljYXNlIFFfT1I6CiAJCS8qIEluZWZmaWNpZW50IGJlY2F1c2Ugd2UgZG8gb3VyIENhbHZpbmJhbGwgZGFuY2UgdHdpY2UgKi8KIAkJYjAgPSBnZW5fZG5ob3N0b3AoY3N0YXRlLCBhZGRyLCBRX1NSQyk7CiAJCWIxID0gZ2VuX2RuaG9zdG9wKGNzdGF0ZSwgYWRkciwgUV9EU1QpOwogCQlnZW5fb3IoYjAsIGIxKTsKIAkJcmV0dXJuIGIxOwogCi0JY2FzZSBRX0lTTzoKLQkJYnBmX2Vycm9yKGNzdGF0ZSwgIklTTyBob3N0IGZpbHRlcmluZyBub3QgaW1wbGVtZW50ZWQiKTsKKwljYXNlIFFfQUREUjE6CisJCWJwZl9lcnJvcihjc3RhdGUsICInYWRkcjEnIGFuZCAnYWRkcmVzczEnIGFyZSBub3QgdmFsaWQgcXVhbGlmaWVycyBmb3IgYWRkcmVzc2VzIG90aGVyIHRoYW4gODAyLjExIE1BQyBhZGRyZXNzZXMiKTsKKwkJLypOT1RSRUFDSEVEKi8KKworCWNhc2UgUV9BRERSMjoKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidhZGRyMicgYW5kICdhZGRyZXNzMicgYXJlIG5vdCB2YWxpZCBxdWFsaWZpZXJzIGZvciBhZGRyZXNzZXMgb3RoZXIgdGhhbiA4MDIuMTEgTUFDIGFkZHJlc3NlcyIpOworCQkvKk5PVFJFQUNIRUQqLworCisJY2FzZSBRX0FERFIzOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2FkZHIzJyBhbmQgJ2FkZHJlc3MzJyBhcmUgbm90IHZhbGlkIHF1YWxpZmllcnMgZm9yIGFkZHJlc3NlcyBvdGhlciB0aGFuIDgwMi4xMSBNQUMgYWRkcmVzc2VzIik7CisJCS8qTk9UUkVBQ0hFRCovCisKKwljYXNlIFFfQUREUjQ6CisJCWJwZl9lcnJvcihjc3RhdGUsICInYWRkcjQnIGFuZCAnYWRkcmVzczQnIGFyZSBub3QgdmFsaWQgcXVhbGlmaWVycyBmb3IgYWRkcmVzc2VzIG90aGVyIHRoYW4gODAyLjExIE1BQyBhZGRyZXNzZXMiKTsKKwkJLypOT1RSRUFDSEVEKi8KKworCWNhc2UgUV9SQToKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidyYScgaXMgbm90IGEgdmFsaWQgcXVhbGlmaWVyIGZvciBhZGRyZXNzZXMgb3RoZXIgdGhhbiA4MDIuMTEgTUFDIGFkZHJlc3NlcyIpOworCQkvKk5PVFJFQUNIRUQqLworCisJY2FzZSBRX1RBOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3RhJyBpcyBub3QgYSB2YWxpZCBxdWFsaWZpZXIgZm9yIGFkZHJlc3NlcyBvdGhlciB0aGFuIDgwMi4xMSBNQUMgYWRkcmVzc2VzIik7CisJCS8qTk9UUkVBQ0hFRCovCiAKIAlkZWZhdWx0OgogCQlhYm9ydCgpOworCQkvKk5PVFJFQUNIRUQqLwogCX0KIAliMCA9IGdlbl9saW5rdHlwZShjc3RhdGUsIEVUSEVSVFlQRV9ETik7CiAJLyogQ2hlY2sgZm9yIHBhZCA9IDEsIGxvbmcgaGVhZGVyIGNhc2UgKi8KIAl0bXAgPSBnZW5fbWNtcChjc3RhdGUsIE9SX0xJTktQTCwgMiwgQlBGX0gsCi0JICAgIChicGZfaW50MzIpbnRvaHMoMHgwNjgxKSwgKGJwZl9pbnQzMiludG9ocygweDA3RkYpKTsKKwkgICAgKGJwZl91X2ludDMyKW50b2hzKDB4MDY4MSksIChicGZfdV9pbnQzMiludG9ocygweDA3RkYpKTsKIAliMSA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LUEwsIDIgKyAxICsgb2Zmc2V0X2xoLAotCSAgICBCUEZfSCwgKGJwZl9pbnQzMiludG9ocygodV9zaG9ydClhZGRyKSk7CisJICAgIEJQRl9ILCAoYnBmX3VfaW50MzIpbnRvaHMoKHVfc2hvcnQpYWRkcikpOwogCWdlbl9hbmQodG1wLCBiMSk7CiAJLyogQ2hlY2sgZm9yIHBhZCA9IDAsIGxvbmcgaGVhZGVyIGNhc2UgKi8KLQl0bXAgPSBnZW5fbWNtcChjc3RhdGUsIE9SX0xJTktQTCwgMiwgQlBGX0IsIChicGZfaW50MzIpMHgwNiwgKGJwZl9pbnQzMikweDcpOwotCWIyID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktQTCwgMiArIG9mZnNldF9saCwgQlBGX0gsIChicGZfaW50MzIpbnRvaHMoKHVfc2hvcnQpYWRkcikpOworCXRtcCA9IGdlbl9tY21wKGNzdGF0ZSwgT1JfTElOS1BMLCAyLCBCUEZfQiwgKGJwZl91X2ludDMyKTB4MDYsCisJICAgIChicGZfdV9pbnQzMikweDcpOworCWIyID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktQTCwgMiArIG9mZnNldF9saCwgQlBGX0gsCisJICAgIChicGZfdV9pbnQzMiludG9ocygodV9zaG9ydClhZGRyKSk7CiAJZ2VuX2FuZCh0bXAsIGIyKTsKIAlnZW5fb3IoYjIsIGIxKTsKIAkvKiBDaGVjayBmb3IgcGFkID0gMSwgc2hvcnQgaGVhZGVyIGNhc2UgKi8KIAl0bXAgPSBnZW5fbWNtcChjc3RhdGUsIE9SX0xJTktQTCwgMiwgQlBGX0gsCi0JICAgIChicGZfaW50MzIpbnRvaHMoMHgwMjgxKSwgKGJwZl9pbnQzMiludG9ocygweDA3RkYpKTsKLQliMiA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LUEwsIDIgKyAxICsgb2Zmc2V0X3NoLCBCUEZfSCwgKGJwZl9pbnQzMiludG9ocygodV9zaG9ydClhZGRyKSk7CisJICAgIChicGZfdV9pbnQzMiludG9ocygweDAyODEpLCAoYnBmX3VfaW50MzIpbnRvaHMoMHgwN0ZGKSk7CisJYjIgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS1BMLCAyICsgMSArIG9mZnNldF9zaCwgQlBGX0gsCisJICAgIChicGZfdV9pbnQzMiludG9ocygodV9zaG9ydClhZGRyKSk7CiAJZ2VuX2FuZCh0bXAsIGIyKTsKIAlnZW5fb3IoYjIsIGIxKTsKIAkvKiBDaGVjayBmb3IgcGFkID0gMCwgc2hvcnQgaGVhZGVyIGNhc2UgKi8KLQl0bXAgPSBnZW5fbWNtcChjc3RhdGUsIE9SX0xJTktQTCwgMiwgQlBGX0IsIChicGZfaW50MzIpMHgwMiwgKGJwZl9pbnQzMikweDcpOwotCWIyID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktQTCwgMiArIG9mZnNldF9zaCwgQlBGX0gsIChicGZfaW50MzIpbnRvaHMoKHVfc2hvcnQpYWRkcikpOworCXRtcCA9IGdlbl9tY21wKGNzdGF0ZSwgT1JfTElOS1BMLCAyLCBCUEZfQiwgKGJwZl91X2ludDMyKTB4MDIsCisJICAgIChicGZfdV9pbnQzMikweDcpOworCWIyID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktQTCwgMiArIG9mZnNldF9zaCwgQlBGX0gsCisJICAgIChicGZfdV9pbnQzMiludG9ocygodV9zaG9ydClhZGRyKSk7CiAJZ2VuX2FuZCh0bXAsIGIyKTsKIAlnZW5fb3IoYjIsIGIxKTsKIApAQCAtNDcxNCwxMyArNDg2NiwxMyBAQAogICogZmllbGQgaW4gdGhlIElQIGhlYWRlci4KICAqLwogc3RhdGljIHN0cnVjdCBibG9jayAqCi1nZW5fbXBsc19saW5rdHlwZShjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBwcm90bykKK2dlbl9tcGxzX2xpbmt0eXBlKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgYnBmX3VfaW50MzIgbGxfcHJvdG8pCiB7CiAJc3RydWN0IGJsb2NrICpiMCwgKmIxOwogCi0gICAgICAgIHN3aXRjaCAocHJvdG8pIHsKKyAgICAgICAgc3dpdGNoIChsbF9wcm90bykgewogCi0gICAgICAgIGNhc2UgUV9JUDoKKyAgICAgICAgY2FzZSBFVEhFUlRZUEVfSVA6CiAgICAgICAgICAgICAgICAgLyogbWF0Y2ggdGhlIGJvdHRvbS1vZi1zdGFjayBiaXQgKi8KICAgICAgICAgICAgICAgICBiMCA9IGdlbl9tY21wKGNzdGF0ZSwgT1JfTElOS1BMLCAodV9pbnQpLTIsIEJQRl9CLCAweDAxLCAweDAxKTsKICAgICAgICAgICAgICAgICAvKiBtYXRjaCB0aGUgSVB2NCB2ZXJzaW9uIG51bWJlciAqLwpAQCAtNDcyOCw3ICs0ODgwLDcgQEAKICAgICAgICAgICAgICAgICBnZW5fYW5kKGIwLCBiMSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGIxOwogCi0gICAgICAgY2FzZSBRX0lQVjY6CisgICAgICAgIGNhc2UgRVRIRVJUWVBFX0lQVjY6CiAgICAgICAgICAgICAgICAgLyogbWF0Y2ggdGhlIGJvdHRvbS1vZi1zdGFjayBiaXQgKi8KICAgICAgICAgICAgICAgICBiMCA9IGdlbl9tY21wKGNzdGF0ZSwgT1JfTElOS1BMLCAodV9pbnQpLTIsIEJQRl9CLCAweDAxLCAweDAxKTsKICAgICAgICAgICAgICAgICAvKiBtYXRjaCB0aGUgSVB2NCB2ZXJzaW9uIG51bWJlciAqLwpAQCAtNDczNiw4ICs0ODg4LDEwIEBACiAgICAgICAgICAgICAgICAgZ2VuX2FuZChiMCwgYjEpOwogICAgICAgICAgICAgICAgIHJldHVybiBiMTsKIAotICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYWJvcnQoKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgIC8qIEZJWE1FIGFkZCBvdGhlciBMMyBwcm90byBJRHMgKi8KKyAgICAgICAgICAgICAgIGJwZl9lcnJvcihjc3RhdGUsICJ1bnN1cHBvcnRlZCBwcm90b2NvbCBvdmVyIG1wbHMiKTsKKyAgICAgICAgICAgICAgIC8qTk9UUkVBQ0hFRCovCiAgICAgICAgIH0KIH0KIApAQCAtNDc2OSw2ICs0OTIzLDkgQEAKIAkJfQogCQlyZXR1cm4gYjA7CiAKKwljYXNlIFFfTElOSzoKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgImxpbmstbGF5ZXIgbW9kaWZpZXIgYXBwbGllZCB0byAlcyIsIHR5cGVzdHIpOworCiAJY2FzZSBRX0lQOgogCQlyZXR1cm4gZ2VuX2hvc3RvcChjc3RhdGUsIGFkZHIsIG1hc2ssIGRpciwgRVRIRVJUWVBFX0lQLCAxMiwgMTYpOwogCkBAIC00Nzc4LDEyICs0OTM1LDEyIEBACiAJY2FzZSBRX0FSUDoKIAkJcmV0dXJuIGdlbl9ob3N0b3AoY3N0YXRlLCBhZGRyLCBtYXNrLCBkaXIsIEVUSEVSVFlQRV9BUlAsIDE0LCAyNCk7CiAKLQljYXNlIFFfVENQOgotCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3RjcCcgbW9kaWZpZXIgYXBwbGllZCB0byAlcyIsIHR5cGVzdHIpOwotCiAJY2FzZSBRX1NDVFA6CiAJCWJwZl9lcnJvcihjc3RhdGUsICInc2N0cCcgbW9kaWZpZXIgYXBwbGllZCB0byAlcyIsIHR5cGVzdHIpOwogCisJY2FzZSBRX1RDUDoKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIid0Y3AnIG1vZGlmaWVyIGFwcGxpZWQgdG8gJXMiLCB0eXBlc3RyKTsKKwogCWNhc2UgUV9VRFA6CiAJCWJwZl9lcnJvcihjc3RhdGUsICIndWRwJyBtb2RpZmllciBhcHBsaWVkIHRvICVzIiwgdHlwZXN0cik7CiAKQEAgLTQ3OTYsMzYgKzQ5NTMsMjQgQEAKIAljYXNlIFFfSUdSUDoKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgIidpZ3JwJyBtb2RpZmllciBhcHBsaWVkIHRvICVzIiwgdHlwZXN0cik7CiAKLQljYXNlIFFfUElNOgotCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3BpbScgbW9kaWZpZXIgYXBwbGllZCB0byAlcyIsIHR5cGVzdHIpOwotCi0JY2FzZSBRX1ZSUlA6Ci0JCWJwZl9lcnJvcihjc3RhdGUsICIndnJycCcgbW9kaWZpZXIgYXBwbGllZCB0byAlcyIsIHR5cGVzdHIpOwotCi0JY2FzZSBRX0NBUlA6Ci0JCWJwZl9lcnJvcihjc3RhdGUsICInY2FycCcgbW9kaWZpZXIgYXBwbGllZCB0byAlcyIsIHR5cGVzdHIpOwotCiAJY2FzZSBRX0FUQUxLOgotCQlicGZfZXJyb3IoY3N0YXRlLCAiQVRBTEsgaG9zdCBmaWx0ZXJpbmcgbm90IGltcGxlbWVudGVkIik7Ci0KLQljYXNlIFFfQUFSUDoKLQkJYnBmX2Vycm9yKGNzdGF0ZSwgIkFBUlAgaG9zdCBmaWx0ZXJpbmcgbm90IGltcGxlbWVudGVkIik7CisJCWJwZl9lcnJvcihjc3RhdGUsICJBcHBsZVRhbGsgaG9zdCBmaWx0ZXJpbmcgbm90IGltcGxlbWVudGVkIik7CiAKIAljYXNlIFFfREVDTkVUOgogCQlyZXR1cm4gZ2VuX2RuaG9zdG9wKGNzdGF0ZSwgYWRkciwgZGlyKTsKIAotCWNhc2UgUV9TQ0E6Ci0JCWJwZl9lcnJvcihjc3RhdGUsICJTQ0EgaG9zdCBmaWx0ZXJpbmcgbm90IGltcGxlbWVudGVkIik7Ci0KIAljYXNlIFFfTEFUOgogCQlicGZfZXJyb3IoY3N0YXRlLCAiTEFUIGhvc3QgZmlsdGVyaW5nIG5vdCBpbXBsZW1lbnRlZCIpOwogCi0JY2FzZSBRX01PUERMOgotCQlicGZfZXJyb3IoY3N0YXRlLCAiTU9QREwgaG9zdCBmaWx0ZXJpbmcgbm90IGltcGxlbWVudGVkIik7CisJY2FzZSBRX1NDQToKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIlNDQSBob3N0IGZpbHRlcmluZyBub3QgaW1wbGVtZW50ZWQiKTsKIAogCWNhc2UgUV9NT1BSQzoKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgIk1PUFJDIGhvc3QgZmlsdGVyaW5nIG5vdCBpbXBsZW1lbnRlZCIpOwogCisJY2FzZSBRX01PUERMOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiTU9QREwgaG9zdCBmaWx0ZXJpbmcgbm90IGltcGxlbWVudGVkIik7CisKIAljYXNlIFFfSVBWNjoKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgIidpcDYnIG1vZGlmaWVyIGFwcGxpZWQgdG8gaXAgaG9zdCIpOwogCkBAIC00ODM4LDYgKzQ5ODMsMTUgQEAKIAljYXNlIFFfRVNQOgogCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2VzcCcgbW9kaWZpZXIgYXBwbGllZCB0byAlcyIsIHR5cGVzdHIpOwogCisJY2FzZSBRX1BJTToKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidwaW0nIG1vZGlmaWVyIGFwcGxpZWQgdG8gJXMiLCB0eXBlc3RyKTsKKworCWNhc2UgUV9WUlJQOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3ZycnAnIG1vZGlmaWVyIGFwcGxpZWQgdG8gJXMiLCB0eXBlc3RyKTsKKworCWNhc2UgUV9BQVJQOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiQUFSUCBob3N0IGZpbHRlcmluZyBub3QgaW1wbGVtZW50ZWQiKTsKKwogCWNhc2UgUV9JU086CiAJCWJwZl9lcnJvcihjc3RhdGUsICJJU08gaG9zdCBmaWx0ZXJpbmcgbm90IGltcGxlbWVudGVkIik7CiAKQEAgLTQ4NTksMTMgKzUwMTMsMzcgQEAKIAljYXNlIFFfTkVUQkVVSToKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgIiduZXRiZXVpJyBtb2RpZmllciBhcHBsaWVkIHRvICVzIiwgdHlwZXN0cik7CiAKKwljYXNlIFFfSVNJU19MMToKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidsMScgbW9kaWZpZXIgYXBwbGllZCB0byAlcyIsIHR5cGVzdHIpOworCisJY2FzZSBRX0lTSVNfTDI6CisJCWJwZl9lcnJvcihjc3RhdGUsICInbDInIG1vZGlmaWVyIGFwcGxpZWQgdG8gJXMiLCB0eXBlc3RyKTsKKworCWNhc2UgUV9JU0lTX0lJSDoKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidpaWgnIG1vZGlmaWVyIGFwcGxpZWQgdG8gJXMiLCB0eXBlc3RyKTsKKworCWNhc2UgUV9JU0lTX1NOUDoKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidzbnAnIG1vZGlmaWVyIGFwcGxpZWQgdG8gJXMiLCB0eXBlc3RyKTsKKworCWNhc2UgUV9JU0lTX0NTTlA6CisJCWJwZl9lcnJvcihjc3RhdGUsICInY3NucCcgbW9kaWZpZXIgYXBwbGllZCB0byAlcyIsIHR5cGVzdHIpOworCisJY2FzZSBRX0lTSVNfUFNOUDoKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidwc25wJyBtb2RpZmllciBhcHBsaWVkIHRvICVzIiwgdHlwZXN0cik7CisKKwljYXNlIFFfSVNJU19MU1A6CisJCWJwZl9lcnJvcihjc3RhdGUsICInbHNwJyBtb2RpZmllciBhcHBsaWVkIHRvICVzIiwgdHlwZXN0cik7CisKIAljYXNlIFFfUkFESU86CiAJCWJwZl9lcnJvcihjc3RhdGUsICIncmFkaW8nIG1vZGlmaWVyIGFwcGxpZWQgdG8gJXMiLCB0eXBlc3RyKTsKIAorCWNhc2UgUV9DQVJQOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2NhcnAnIG1vZGlmaWVyIGFwcGxpZWQgdG8gJXMiLCB0eXBlc3RyKTsKKwogCWRlZmF1bHQ6CiAJCWFib3J0KCk7CiAJfQotCS8qIE5PVFJFQUNIRUQgKi8KKwkvKk5PVFJFQUNIRUQqLwogfQogCiAjaWZkZWYgSU5FVDYKQEAgLTQ4OTgsOTMgKzUwNzYsMTE0IEBACiAJCWJwZl9lcnJvcihjc3RhdGUsICInYXJwJyBtb2RpZmllciBhcHBsaWVkIHRvIGlwNiAlcyIsIHR5cGVzdHIpOwogCiAJY2FzZSBRX1NDVFA6Ci0JCWJwZl9lcnJvcihjc3RhdGUsICInc2N0cCcgbW9kaWZpZXIgYXBwbGllZCB0byAlcyIsIHR5cGVzdHIpOworCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3NjdHAnIG1vZGlmaWVyIGFwcGxpZWQgdG8gaXA2ICVzIiwgdHlwZXN0cik7CiAKIAljYXNlIFFfVENQOgotCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3RjcCcgbW9kaWZpZXIgYXBwbGllZCB0byAlcyIsIHR5cGVzdHIpOworCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3RjcCcgbW9kaWZpZXIgYXBwbGllZCB0byBpcDYgJXMiLCB0eXBlc3RyKTsKIAogCWNhc2UgUV9VRFA6Ci0JCWJwZl9lcnJvcihjc3RhdGUsICIndWRwJyBtb2RpZmllciBhcHBsaWVkIHRvICVzIiwgdHlwZXN0cik7CisJCWJwZl9lcnJvcihjc3RhdGUsICIndWRwJyBtb2RpZmllciBhcHBsaWVkIHRvIGlwNiAlcyIsIHR5cGVzdHIpOwogCiAJY2FzZSBRX0lDTVA6Ci0JCWJwZl9lcnJvcihjc3RhdGUsICInaWNtcCcgbW9kaWZpZXIgYXBwbGllZCB0byAlcyIsIHR5cGVzdHIpOworCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2ljbXAnIG1vZGlmaWVyIGFwcGxpZWQgdG8gaXA2ICVzIiwgdHlwZXN0cik7CiAKIAljYXNlIFFfSUdNUDoKLQkJYnBmX2Vycm9yKGNzdGF0ZSwgIidpZ21wJyBtb2RpZmllciBhcHBsaWVkIHRvICVzIiwgdHlwZXN0cik7CisJCWJwZl9lcnJvcihjc3RhdGUsICInaWdtcCcgbW9kaWZpZXIgYXBwbGllZCB0byBpcDYgJXMiLCB0eXBlc3RyKTsKIAogCWNhc2UgUV9JR1JQOgotCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2lncnAnIG1vZGlmaWVyIGFwcGxpZWQgdG8gJXMiLCB0eXBlc3RyKTsKLQotCWNhc2UgUV9QSU06Ci0JCWJwZl9lcnJvcihjc3RhdGUsICIncGltJyBtb2RpZmllciBhcHBsaWVkIHRvICVzIiwgdHlwZXN0cik7Ci0KLQljYXNlIFFfVlJSUDoKLQkJYnBmX2Vycm9yKGNzdGF0ZSwgIid2cnJwJyBtb2RpZmllciBhcHBsaWVkIHRvICVzIiwgdHlwZXN0cik7Ci0KLQljYXNlIFFfQ0FSUDoKLQkJYnBmX2Vycm9yKGNzdGF0ZSwgIidjYXJwJyBtb2RpZmllciBhcHBsaWVkIHRvICVzIiwgdHlwZXN0cik7CisJCWJwZl9lcnJvcihjc3RhdGUsICInaWdycCcgbW9kaWZpZXIgYXBwbGllZCB0byBpcDYgJXMiLCB0eXBlc3RyKTsKIAogCWNhc2UgUV9BVEFMSzoKLQkJYnBmX2Vycm9yKGNzdGF0ZSwgIkFUQUxLIGhvc3QgZmlsdGVyaW5nIG5vdCBpbXBsZW1lbnRlZCIpOwotCi0JY2FzZSBRX0FBUlA6Ci0JCWJwZl9lcnJvcihjc3RhdGUsICJBQVJQIGhvc3QgZmlsdGVyaW5nIG5vdCBpbXBsZW1lbnRlZCIpOworCQlicGZfZXJyb3IoY3N0YXRlLCAiQXBwbGVUYWxrIG1vZGlmaWVyIGFwcGxpZWQgdG8gaXA2ICVzIiwgdHlwZXN0cik7CiAKIAljYXNlIFFfREVDTkVUOgogCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2RlY25ldCcgbW9kaWZpZXIgYXBwbGllZCB0byBpcDYgJXMiLCB0eXBlc3RyKTsKIAotCWNhc2UgUV9TQ0E6Ci0JCWJwZl9lcnJvcihjc3RhdGUsICJTQ0EgaG9zdCBmaWx0ZXJpbmcgbm90IGltcGxlbWVudGVkIik7Ci0KIAljYXNlIFFfTEFUOgotCQlicGZfZXJyb3IoY3N0YXRlLCAiTEFUIGhvc3QgZmlsdGVyaW5nIG5vdCBpbXBsZW1lbnRlZCIpOworCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2xhdCcgbW9kaWZpZXIgYXBwbGllZCB0byBpcDYgJXMiLCB0eXBlc3RyKTsKIAotCWNhc2UgUV9NT1BETDoKLQkJYnBmX2Vycm9yKGNzdGF0ZSwgIk1PUERMIGhvc3QgZmlsdGVyaW5nIG5vdCBpbXBsZW1lbnRlZCIpOworCWNhc2UgUV9TQ0E6CisJCWJwZl9lcnJvcihjc3RhdGUsICInc2NhJyBtb2RpZmllciBhcHBsaWVkIHRvIGlwNiAlcyIsIHR5cGVzdHIpOwogCiAJY2FzZSBRX01PUFJDOgotCQlicGZfZXJyb3IoY3N0YXRlLCAiTU9QUkMgaG9zdCBmaWx0ZXJpbmcgbm90IGltcGxlbWVudGVkIik7CisJCWJwZl9lcnJvcihjc3RhdGUsICInbW9wcmMnIG1vZGlmaWVyIGFwcGxpZWQgdG8gaXA2ICVzIiwgdHlwZXN0cik7CisKKwljYXNlIFFfTU9QREw6CisJCWJwZl9lcnJvcihjc3RhdGUsICInbW9wZGwnIG1vZGlmaWVyIGFwcGxpZWQgdG8gaXA2ICVzIiwgdHlwZXN0cik7CiAKIAljYXNlIFFfSVBWNjoKIAkJcmV0dXJuIGdlbl9ob3N0b3A2KGNzdGF0ZSwgYWRkciwgbWFzaywgZGlyLCBFVEhFUlRZUEVfSVBWNiwgOCwgMjQpOwogCiAJY2FzZSBRX0lDTVBWNjoKLQkJYnBmX2Vycm9yKGNzdGF0ZSwgIidpY21wNicgbW9kaWZpZXIgYXBwbGllZCB0byAlcyIsIHR5cGVzdHIpOworCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2ljbXA2JyBtb2RpZmllciBhcHBsaWVkIHRvIGlwNiAlcyIsIHR5cGVzdHIpOwogCiAJY2FzZSBRX0FIOgotCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2FoJyBtb2RpZmllciBhcHBsaWVkIHRvICVzIiwgdHlwZXN0cik7CisJCWJwZl9lcnJvcihjc3RhdGUsICInYWgnIG1vZGlmaWVyIGFwcGxpZWQgdG8gaXA2ICVzIiwgdHlwZXN0cik7CiAKIAljYXNlIFFfRVNQOgotCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2VzcCcgbW9kaWZpZXIgYXBwbGllZCB0byAlcyIsIHR5cGVzdHIpOworCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2VzcCcgbW9kaWZpZXIgYXBwbGllZCB0byBpcDYgJXMiLCB0eXBlc3RyKTsKKworCWNhc2UgUV9QSU06CisJCWJwZl9lcnJvcihjc3RhdGUsICIncGltJyBtb2RpZmllciBhcHBsaWVkIHRvIGlwNiAlcyIsIHR5cGVzdHIpOworCisJY2FzZSBRX1ZSUlA6CisJCWJwZl9lcnJvcihjc3RhdGUsICIndnJycCcgbW9kaWZpZXIgYXBwbGllZCB0byBpcDYgJXMiLCB0eXBlc3RyKTsKKworCWNhc2UgUV9BQVJQOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2FhcnAnIG1vZGlmaWVyIGFwcGxpZWQgdG8gaXA2ICVzIiwgdHlwZXN0cik7CiAKIAljYXNlIFFfSVNPOgotCQlicGZfZXJyb3IoY3N0YXRlLCAiSVNPIGhvc3QgZmlsdGVyaW5nIG5vdCBpbXBsZW1lbnRlZCIpOworCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2lzbycgbW9kaWZpZXIgYXBwbGllZCB0byBpcDYgJXMiLCB0eXBlc3RyKTsKIAogCWNhc2UgUV9FU0lTOgotCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2VzaXMnIG1vZGlmaWVyIGFwcGxpZWQgdG8gJXMiLCB0eXBlc3RyKTsKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidlc2lzJyBtb2RpZmllciBhcHBsaWVkIHRvIGlwNiAlcyIsIHR5cGVzdHIpOwogCiAJY2FzZSBRX0lTSVM6Ci0JCWJwZl9lcnJvcihjc3RhdGUsICInaXNpcycgbW9kaWZpZXIgYXBwbGllZCB0byAlcyIsIHR5cGVzdHIpOworCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2lzaXMnIG1vZGlmaWVyIGFwcGxpZWQgdG8gaXA2ICVzIiwgdHlwZXN0cik7CiAKIAljYXNlIFFfQ0xOUDoKLQkJYnBmX2Vycm9yKGNzdGF0ZSwgIidjbG5wJyBtb2RpZmllciBhcHBsaWVkIHRvICVzIiwgdHlwZXN0cik7CisJCWJwZl9lcnJvcihjc3RhdGUsICInY2xucCcgbW9kaWZpZXIgYXBwbGllZCB0byBpcDYgJXMiLCB0eXBlc3RyKTsKIAogCWNhc2UgUV9TVFA6Ci0JCWJwZl9lcnJvcihjc3RhdGUsICInc3RwJyBtb2RpZmllciBhcHBsaWVkIHRvICVzIiwgdHlwZXN0cik7CisJCWJwZl9lcnJvcihjc3RhdGUsICInc3RwJyBtb2RpZmllciBhcHBsaWVkIHRvIGlwNiAlcyIsIHR5cGVzdHIpOwogCiAJY2FzZSBRX0lQWDoKLQkJYnBmX2Vycm9yKGNzdGF0ZSwgIklQWCBob3N0IGZpbHRlcmluZyBub3QgaW1wbGVtZW50ZWQiKTsKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidpcHgnIG1vZGlmaWVyIGFwcGxpZWQgdG8gaXA2ICVzIiwgdHlwZXN0cik7CiAKIAljYXNlIFFfTkVUQkVVSToKLQkJYnBmX2Vycm9yKGNzdGF0ZSwgIiduZXRiZXVpJyBtb2RpZmllciBhcHBsaWVkIHRvICVzIiwgdHlwZXN0cik7CisJCWJwZl9lcnJvcihjc3RhdGUsICInbmV0YmV1aScgbW9kaWZpZXIgYXBwbGllZCB0byBpcDYgJXMiLCB0eXBlc3RyKTsKKworCWNhc2UgUV9JU0lTX0wxOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2wxJyBtb2RpZmllciBhcHBsaWVkIHRvIGlwNiAlcyIsIHR5cGVzdHIpOworCisJY2FzZSBRX0lTSVNfTDI6CisJCWJwZl9lcnJvcihjc3RhdGUsICInbDInIG1vZGlmaWVyIGFwcGxpZWQgdG8gaXA2ICVzIiwgdHlwZXN0cik7CisKKwljYXNlIFFfSVNJU19JSUg6CisJCWJwZl9lcnJvcihjc3RhdGUsICInaWloJyBtb2RpZmllciBhcHBsaWVkIHRvIGlwNiAlcyIsIHR5cGVzdHIpOworCisJY2FzZSBRX0lTSVNfU05QOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3NucCcgbW9kaWZpZXIgYXBwbGllZCB0byBpcDYgJXMiLCB0eXBlc3RyKTsKKworCWNhc2UgUV9JU0lTX0NTTlA6CisJCWJwZl9lcnJvcihjc3RhdGUsICInY3NucCcgbW9kaWZpZXIgYXBwbGllZCB0byBpcDYgJXMiLCB0eXBlc3RyKTsKKworCWNhc2UgUV9JU0lTX1BTTlA6CisJCWJwZl9lcnJvcihjc3RhdGUsICIncHNucCcgbW9kaWZpZXIgYXBwbGllZCB0byBpcDYgJXMiLCB0eXBlc3RyKTsKKworCWNhc2UgUV9JU0lTX0xTUDoKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidsc3AnIG1vZGlmaWVyIGFwcGxpZWQgdG8gaXA2ICVzIiwgdHlwZXN0cik7CiAKIAljYXNlIFFfUkFESU86Ci0JCWJwZl9lcnJvcihjc3RhdGUsICIncmFkaW8nIG1vZGlmaWVyIGFwcGxpZWQgdG8gJXMiLCB0eXBlc3RyKTsKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidyYWRpbycgbW9kaWZpZXIgYXBwbGllZCB0byBpcDYgJXMiLCB0eXBlc3RyKTsKKworCWNhc2UgUV9DQVJQOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2NhcnAnIG1vZGlmaWVyIGFwcGxpZWQgdG8gaXA2ICVzIiwgdHlwZXN0cik7CiAKIAlkZWZhdWx0OgogCQlhYm9ydCgpOwogCX0KLQkvKiBOT1RSRUFDSEVEICovCisJLypOT1RSRUFDSEVEKi8KIH0KICNlbmRpZgogCkBAIC01MDkxLDEyICs1MjkwLDEyIEBACiAJCXJldHVybiBiMTsKIAl9CiAJYnBmX2Vycm9yKGNzdGF0ZSwgImlsbGVnYWwgbW9kaWZpZXIgb2YgJ2dhdGV3YXknIik7Ci0JLyogTk9UUkVBQ0hFRCAqLworCS8qTk9UUkVBQ0hFRCovCiB9CiAjZW5kaWYKIAotc3RydWN0IGJsb2NrICoKLWdlbl9wcm90b19hYmJyZXYoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgcHJvdG8pCitzdGF0aWMgc3RydWN0IGJsb2NrICoKK2dlbl9wcm90b19hYmJyZXZfaW50ZXJuYWwoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgcHJvdG8pCiB7CiAJc3RydWN0IGJsb2NrICpiMDsKIAlzdHJ1Y3QgYmxvY2sgKmIxOwpAQCAtNTMzNSw2ICs1NTM0LDE5IEBACiAJcmV0dXJuIGIxOwogfQogCitzdHJ1Y3QgYmxvY2sgKgorZ2VuX3Byb3RvX2FiYnJldihjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBwcm90bykKK3sKKwkvKgorCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSB1cyBhbmQgcm91dGluZXMgYmVsb3cgdXMsIGFuZCByZXR1cm4gTlVMTAorCSAqIG9uIGFuIGVycm9yLgorCSAqLworCWlmIChzZXRqbXAoY3N0YXRlLT50b3BfY3R4KSkKKwkJcmV0dXJuIChOVUxMKTsKKworCXJldHVybiBnZW5fcHJvdG9fYWJicmV2X2ludGVybmFsKGNzdGF0ZSwgcHJvdG8pOworfQorCiBzdGF0aWMgc3RydWN0IGJsb2NrICoKIGdlbl9pcGZyYWcoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlKQogewpAQCAtNTM2MSw1MSArNTU3Myw3NiBAQAogICogaGVhZGVycykuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYmxvY2sgKgotZ2VuX3BvcnRhdG9tKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgaW50IG9mZiwgYnBmX2ludDMyIHYpCitnZW5fcG9ydGF0b20oY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgb2ZmLCBicGZfdV9pbnQzMiB2KQogewogCXJldHVybiBnZW5fY21wKGNzdGF0ZSwgT1JfVFJBTl9JUFY0LCBvZmYsIEJQRl9ILCB2KTsKIH0KIAogc3RhdGljIHN0cnVjdCBibG9jayAqCi1nZW5fcG9ydGF0b202KGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgaW50IG9mZiwgYnBmX2ludDMyIHYpCitnZW5fcG9ydGF0b202KGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgaW50IG9mZiwgYnBmX3VfaW50MzIgdikKIHsKIAlyZXR1cm4gZ2VuX2NtcChjc3RhdGUsIE9SX1RSQU5fSVBWNiwgb2ZmLCBCUEZfSCwgdik7CiB9CiAKLXN0cnVjdCBibG9jayAqCi1nZW5fcG9ydG9wKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgaW50IHBvcnQsIGludCBwcm90bywgaW50IGRpcikKK3N0YXRpYyBzdHJ1Y3QgYmxvY2sgKgorZ2VuX3BvcnRvcChjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIHVfaW50IHBvcnQsIHVfaW50IHByb3RvLCBpbnQgZGlyKQogewogCXN0cnVjdCBibG9jayAqYjAsICpiMSwgKnRtcDsKIAogCS8qIGlwIHByb3RvICdwcm90bycgYW5kIG5vdCBhIGZyYWdtZW50IG90aGVyIHRoYW4gdGhlIGZpcnN0IGZyYWdtZW50ICovCi0JdG1wID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktQTCwgOSwgQlBGX0IsIChicGZfaW50MzIpcHJvdG8pOworCXRtcCA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LUEwsIDksIEJQRl9CLCBwcm90byk7CiAJYjAgPSBnZW5faXBmcmFnKGNzdGF0ZSk7CiAJZ2VuX2FuZCh0bXAsIGIwKTsKIAogCXN3aXRjaCAoZGlyKSB7CiAJY2FzZSBRX1NSQzoKLQkJYjEgPSBnZW5fcG9ydGF0b20oY3N0YXRlLCAwLCAoYnBmX2ludDMyKXBvcnQpOworCQliMSA9IGdlbl9wb3J0YXRvbShjc3RhdGUsIDAsIHBvcnQpOwogCQlicmVhazsKIAogCWNhc2UgUV9EU1Q6Ci0JCWIxID0gZ2VuX3BvcnRhdG9tKGNzdGF0ZSwgMiwgKGJwZl9pbnQzMilwb3J0KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFFfT1I6Ci0JY2FzZSBRX0RFRkFVTFQ6Ci0JCXRtcCA9IGdlbl9wb3J0YXRvbShjc3RhdGUsIDAsIChicGZfaW50MzIpcG9ydCk7Ci0JCWIxID0gZ2VuX3BvcnRhdG9tKGNzdGF0ZSwgMiwgKGJwZl9pbnQzMilwb3J0KTsKLQkJZ2VuX29yKHRtcCwgYjEpOworCQliMSA9IGdlbl9wb3J0YXRvbShjc3RhdGUsIDIsIHBvcnQpOwogCQlicmVhazsKIAogCWNhc2UgUV9BTkQ6Ci0JCXRtcCA9IGdlbl9wb3J0YXRvbShjc3RhdGUsIDAsIChicGZfaW50MzIpcG9ydCk7Ci0JCWIxID0gZ2VuX3BvcnRhdG9tKGNzdGF0ZSwgMiwgKGJwZl9pbnQzMilwb3J0KTsKKwkJdG1wID0gZ2VuX3BvcnRhdG9tKGNzdGF0ZSwgMCwgcG9ydCk7CisJCWIxID0gZ2VuX3BvcnRhdG9tKGNzdGF0ZSwgMiwgcG9ydCk7CiAJCWdlbl9hbmQodG1wLCBiMSk7CiAJCWJyZWFrOwogCisJY2FzZSBRX0RFRkFVTFQ6CisJY2FzZSBRX09SOgorCQl0bXAgPSBnZW5fcG9ydGF0b20oY3N0YXRlLCAwLCBwb3J0KTsKKwkJYjEgPSBnZW5fcG9ydGF0b20oY3N0YXRlLCAyLCBwb3J0KTsKKwkJZ2VuX29yKHRtcCwgYjEpOworCQlicmVhazsKKworCWNhc2UgUV9BRERSMToKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidhZGRyMScgYW5kICdhZGRyZXNzMScgYXJlIG5vdCB2YWxpZCBxdWFsaWZpZXJzIGZvciBwb3J0cyIpOworCQkvKk5PVFJFQUNIRUQqLworCisJY2FzZSBRX0FERFIyOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2FkZHIyJyBhbmQgJ2FkZHJlc3MyJyBhcmUgbm90IHZhbGlkIHF1YWxpZmllcnMgZm9yIHBvcnRzIik7CisJCS8qTk9UUkVBQ0hFRCovCisKKwljYXNlIFFfQUREUjM6CisJCWJwZl9lcnJvcihjc3RhdGUsICInYWRkcjMnIGFuZCAnYWRkcmVzczMnIGFyZSBub3QgdmFsaWQgcXVhbGlmaWVycyBmb3IgcG9ydHMiKTsKKwkJLypOT1RSRUFDSEVEKi8KKworCWNhc2UgUV9BRERSNDoKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidhZGRyNCcgYW5kICdhZGRyZXNzNCcgYXJlIG5vdCB2YWxpZCBxdWFsaWZpZXJzIGZvciBwb3J0cyIpOworCQkvKk5PVFJFQUNIRUQqLworCisJY2FzZSBRX1JBOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3JhJyBpcyBub3QgYSB2YWxpZCBxdWFsaWZpZXIgZm9yIHBvcnRzIik7CisJCS8qTk9UUkVBQ0hFRCovCisKKwljYXNlIFFfVEE6CisJCWJwZl9lcnJvcihjc3RhdGUsICIndGEnIGlzIG5vdCBhIHZhbGlkIHF1YWxpZmllciBmb3IgcG9ydHMiKTsKKwkJLypOT1RSRUFDSEVEKi8KKwogCWRlZmF1bHQ6CiAJCWFib3J0KCk7CisJCS8qTk9UUkVBQ0hFRCovCiAJfQogCWdlbl9hbmQoYjAsIGIxKTsKIApAQCAtNTQxMyw3ICs1NjUwLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBibG9jayAqCi1nZW5fcG9ydChjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBwb3J0LCBpbnQgaXBfcHJvdG8sIGludCBkaXIpCitnZW5fcG9ydChjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIHVfaW50IHBvcnQsIGludCBpcF9wcm90bywgaW50IGRpcikKIHsKIAlzdHJ1Y3QgYmxvY2sgKmIwLCAqYjEsICp0bXA7CiAKQEAgLTU0NDAsNyArNTY3Nyw3IEBACiAJY2FzZSBJUFBST1RPX1VEUDoKIAljYXNlIElQUFJPVE9fVENQOgogCWNhc2UgSVBQUk9UT19TQ1RQOgotCQliMSA9IGdlbl9wb3J0b3AoY3N0YXRlLCBwb3J0LCBpcF9wcm90bywgZGlyKTsKKwkJYjEgPSBnZW5fcG9ydG9wKGNzdGF0ZSwgcG9ydCwgKHVfaW50KWlwX3Byb3RvLCBkaXIpOwogCQlicmVhazsKIAogCWNhc2UgUFJPVE9fVU5ERUY6CkBAIC01NDU5LDM2ICs1Njk2LDM2IEBACiB9CiAKIHN0cnVjdCBibG9jayAqCi1nZW5fcG9ydG9wNihjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBwb3J0LCBpbnQgcHJvdG8sIGludCBkaXIpCitnZW5fcG9ydG9wNihjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIHVfaW50IHBvcnQsIHVfaW50IHByb3RvLCBpbnQgZGlyKQogewogCXN0cnVjdCBibG9jayAqYjAsICpiMSwgKnRtcDsKIAogCS8qIGlwNiBwcm90byAncHJvdG8nICovCiAJLyogWFhYIC0gY2F0Y2ggdGhlIGZpcnN0IGZyYWdtZW50IG9mIGEgZnJhZ21lbnRlZCBwYWNrZXQ/ICovCi0JYjAgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS1BMLCA2LCBCUEZfQiwgKGJwZl9pbnQzMilwcm90byk7CisJYjAgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS1BMLCA2LCBCUEZfQiwgcHJvdG8pOwogCiAJc3dpdGNoIChkaXIpIHsKIAljYXNlIFFfU1JDOgotCQliMSA9IGdlbl9wb3J0YXRvbTYoY3N0YXRlLCAwLCAoYnBmX2ludDMyKXBvcnQpOworCQliMSA9IGdlbl9wb3J0YXRvbTYoY3N0YXRlLCAwLCBwb3J0KTsKIAkJYnJlYWs7CiAKIAljYXNlIFFfRFNUOgotCQliMSA9IGdlbl9wb3J0YXRvbTYoY3N0YXRlLCAyLCAoYnBmX2ludDMyKXBvcnQpOwotCQlicmVhazsKLQotCWNhc2UgUV9PUjoKLQljYXNlIFFfREVGQVVMVDoKLQkJdG1wID0gZ2VuX3BvcnRhdG9tNihjc3RhdGUsIDAsIChicGZfaW50MzIpcG9ydCk7Ci0JCWIxID0gZ2VuX3BvcnRhdG9tNihjc3RhdGUsIDIsIChicGZfaW50MzIpcG9ydCk7Ci0JCWdlbl9vcih0bXAsIGIxKTsKKwkJYjEgPSBnZW5fcG9ydGF0b202KGNzdGF0ZSwgMiwgcG9ydCk7CiAJCWJyZWFrOwogCiAJY2FzZSBRX0FORDoKLQkJdG1wID0gZ2VuX3BvcnRhdG9tNihjc3RhdGUsIDAsIChicGZfaW50MzIpcG9ydCk7Ci0JCWIxID0gZ2VuX3BvcnRhdG9tNihjc3RhdGUsIDIsIChicGZfaW50MzIpcG9ydCk7CisJCXRtcCA9IGdlbl9wb3J0YXRvbTYoY3N0YXRlLCAwLCBwb3J0KTsKKwkJYjEgPSBnZW5fcG9ydGF0b202KGNzdGF0ZSwgMiwgcG9ydCk7CiAJCWdlbl9hbmQodG1wLCBiMSk7CiAJCWJyZWFrOwogCisJY2FzZSBRX0RFRkFVTFQ6CisJY2FzZSBRX09SOgorCQl0bXAgPSBnZW5fcG9ydGF0b202KGNzdGF0ZSwgMCwgcG9ydCk7CisJCWIxID0gZ2VuX3BvcnRhdG9tNihjc3RhdGUsIDIsIHBvcnQpOworCQlnZW5fb3IodG1wLCBiMSk7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJYWJvcnQoKTsKIAl9CkBAIC01NDk4LDcgKzU3MzUsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGJsb2NrICoKLWdlbl9wb3J0Nihjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBwb3J0LCBpbnQgaXBfcHJvdG8sIGludCBkaXIpCitnZW5fcG9ydDYoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCB1X2ludCBwb3J0LCBpbnQgaXBfcHJvdG8sIGludCBkaXIpCiB7CiAJc3RydWN0IGJsb2NrICpiMCwgKmIxLCAqdG1wOwogCkBAIC01NTA5LDcgKzU3NDYsNyBAQAogCWNhc2UgSVBQUk9UT19VRFA6CiAJY2FzZSBJUFBST1RPX1RDUDoKIAljYXNlIElQUFJPVE9fU0NUUDoKLQkJYjEgPSBnZW5fcG9ydG9wNihjc3RhdGUsIHBvcnQsIGlwX3Byb3RvLCBkaXIpOworCQliMSA9IGdlbl9wb3J0b3A2KGNzdGF0ZSwgcG9ydCwgKHVfaW50KWlwX3Byb3RvLCBkaXIpOwogCQlicmVhazsKIAogCWNhc2UgUFJPVE9fVU5ERUY6CkBAIC01NTI5LDggKzU3NjYsOCBAQAogCiAvKiBnZW5fcG9ydHJhbmdlIGNvZGUgKi8KIHN0YXRpYyBzdHJ1Y3QgYmxvY2sgKgotZ2VuX3BvcnRyYW5nZWF0b20oY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgb2ZmLCBicGZfaW50MzIgdjEsCi0gICAgYnBmX2ludDMyIHYyKQorZ2VuX3BvcnRyYW5nZWF0b20oY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCB1X2ludCBvZmYsIGJwZl91X2ludDMyIHYxLAorICAgIGJwZl91X2ludDMyIHYyKQogewogCXN0cnVjdCBibG9jayAqYjEsICpiMjsKIApAQCAtNTUzOCw3ICs1Nzc1LDcgQEAKIAkJLyoKIAkJICogUmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIHBvcnRzLCBzbyB2MSBpcyB0aGUgbG93ZXIgb25lLgogCQkgKi8KLQkJYnBmX2ludDMyIHZ0ZW1wOworCQlicGZfdV9pbnQzMiB2dGVtcDsKIAogCQl2dGVtcCA9IHYxOwogCQl2MSA9IHYyOwpAQCAtNTU1Myw0MSArNTc5MCw2NiBAQAogCXJldHVybiBiMjsKIH0KIAotc3RydWN0IGJsb2NrICoKLWdlbl9wb3J0cmFuZ2VvcChjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBwb3J0MSwgaW50IHBvcnQyLCBpbnQgcHJvdG8sCi0gICAgaW50IGRpcikKK3N0YXRpYyBzdHJ1Y3QgYmxvY2sgKgorZ2VuX3BvcnRyYW5nZW9wKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgdV9pbnQgcG9ydDEsIHVfaW50IHBvcnQyLAorICAgIGJwZl91X2ludDMyIHByb3RvLCBpbnQgZGlyKQogewogCXN0cnVjdCBibG9jayAqYjAsICpiMSwgKnRtcDsKIAogCS8qIGlwIHByb3RvICdwcm90bycgYW5kIG5vdCBhIGZyYWdtZW50IG90aGVyIHRoYW4gdGhlIGZpcnN0IGZyYWdtZW50ICovCi0JdG1wID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktQTCwgOSwgQlBGX0IsIChicGZfaW50MzIpcHJvdG8pOworCXRtcCA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LUEwsIDksIEJQRl9CLCBwcm90byk7CiAJYjAgPSBnZW5faXBmcmFnKGNzdGF0ZSk7CiAJZ2VuX2FuZCh0bXAsIGIwKTsKIAogCXN3aXRjaCAoZGlyKSB7CiAJY2FzZSBRX1NSQzoKLQkJYjEgPSBnZW5fcG9ydHJhbmdlYXRvbShjc3RhdGUsIDAsIChicGZfaW50MzIpcG9ydDEsIChicGZfaW50MzIpcG9ydDIpOworCQliMSA9IGdlbl9wb3J0cmFuZ2VhdG9tKGNzdGF0ZSwgMCwgcG9ydDEsIHBvcnQyKTsKIAkJYnJlYWs7CiAKIAljYXNlIFFfRFNUOgotCQliMSA9IGdlbl9wb3J0cmFuZ2VhdG9tKGNzdGF0ZSwgMiwgKGJwZl9pbnQzMilwb3J0MSwgKGJwZl9pbnQzMilwb3J0Mik7Ci0JCWJyZWFrOwotCi0JY2FzZSBRX09SOgotCWNhc2UgUV9ERUZBVUxUOgotCQl0bXAgPSBnZW5fcG9ydHJhbmdlYXRvbShjc3RhdGUsIDAsIChicGZfaW50MzIpcG9ydDEsIChicGZfaW50MzIpcG9ydDIpOwotCQliMSA9IGdlbl9wb3J0cmFuZ2VhdG9tKGNzdGF0ZSwgMiwgKGJwZl9pbnQzMilwb3J0MSwgKGJwZl9pbnQzMilwb3J0Mik7Ci0JCWdlbl9vcih0bXAsIGIxKTsKKwkJYjEgPSBnZW5fcG9ydHJhbmdlYXRvbShjc3RhdGUsIDIsIHBvcnQxLCBwb3J0Mik7CiAJCWJyZWFrOwogCiAJY2FzZSBRX0FORDoKLQkJdG1wID0gZ2VuX3BvcnRyYW5nZWF0b20oY3N0YXRlLCAwLCAoYnBmX2ludDMyKXBvcnQxLCAoYnBmX2ludDMyKXBvcnQyKTsKLQkJYjEgPSBnZW5fcG9ydHJhbmdlYXRvbShjc3RhdGUsIDIsIChicGZfaW50MzIpcG9ydDEsIChicGZfaW50MzIpcG9ydDIpOworCQl0bXAgPSBnZW5fcG9ydHJhbmdlYXRvbShjc3RhdGUsIDAsIHBvcnQxLCBwb3J0Mik7CisJCWIxID0gZ2VuX3BvcnRyYW5nZWF0b20oY3N0YXRlLCAyLCBwb3J0MSwgcG9ydDIpOwogCQlnZW5fYW5kKHRtcCwgYjEpOwogCQlicmVhazsKIAorCWNhc2UgUV9ERUZBVUxUOgorCWNhc2UgUV9PUjoKKwkJdG1wID0gZ2VuX3BvcnRyYW5nZWF0b20oY3N0YXRlLCAwLCBwb3J0MSwgcG9ydDIpOworCQliMSA9IGdlbl9wb3J0cmFuZ2VhdG9tKGNzdGF0ZSwgMiwgcG9ydDEsIHBvcnQyKTsKKwkJZ2VuX29yKHRtcCwgYjEpOworCQlicmVhazsKKworCWNhc2UgUV9BRERSMToKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidhZGRyMScgYW5kICdhZGRyZXNzMScgYXJlIG5vdCB2YWxpZCBxdWFsaWZpZXJzIGZvciBwb3J0IHJhbmdlcyIpOworCQkvKk5PVFJFQUNIRUQqLworCisJY2FzZSBRX0FERFIyOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2FkZHIyJyBhbmQgJ2FkZHJlc3MyJyBhcmUgbm90IHZhbGlkIHF1YWxpZmllcnMgZm9yIHBvcnQgcmFuZ2VzIik7CisJCS8qTk9UUkVBQ0hFRCovCisKKwljYXNlIFFfQUREUjM6CisJCWJwZl9lcnJvcihjc3RhdGUsICInYWRkcjMnIGFuZCAnYWRkcmVzczMnIGFyZSBub3QgdmFsaWQgcXVhbGlmaWVycyBmb3IgcG9ydCByYW5nZXMiKTsKKwkJLypOT1RSRUFDSEVEKi8KKworCWNhc2UgUV9BRERSNDoKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidhZGRyNCcgYW5kICdhZGRyZXNzNCcgYXJlIG5vdCB2YWxpZCBxdWFsaWZpZXJzIGZvciBwb3J0IHJhbmdlcyIpOworCQkvKk5PVFJFQUNIRUQqLworCisJY2FzZSBRX1JBOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3JhJyBpcyBub3QgYSB2YWxpZCBxdWFsaWZpZXIgZm9yIHBvcnQgcmFuZ2VzIik7CisJCS8qTk9UUkVBQ0hFRCovCisKKwljYXNlIFFfVEE6CisJCWJwZl9lcnJvcihjc3RhdGUsICIndGEnIGlzIG5vdCBhIHZhbGlkIHF1YWxpZmllciBmb3IgcG9ydCByYW5nZXMiKTsKKwkJLypOT1RSRUFDSEVEKi8KKwogCWRlZmF1bHQ6CiAJCWFib3J0KCk7CisJCS8qTk9UUkVBQ0hFRCovCiAJfQogCWdlbl9hbmQoYjAsIGIxKTsKIApAQCAtNTU5NSw3ICs1ODU3LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBibG9jayAqCi1nZW5fcG9ydHJhbmdlKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgaW50IHBvcnQxLCBpbnQgcG9ydDIsIGludCBpcF9wcm90bywKK2dlbl9wb3J0cmFuZ2UoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCB1X2ludCBwb3J0MSwgdV9pbnQgcG9ydDIsIGludCBpcF9wcm90bywKICAgICBpbnQgZGlyKQogewogCXN0cnVjdCBibG9jayAqYjAsICpiMSwgKnRtcDsKQEAgLTU2MDcsNyArNTg2OSw4IEBACiAJY2FzZSBJUFBST1RPX1VEUDoKIAljYXNlIElQUFJPVE9fVENQOgogCWNhc2UgSVBQUk9UT19TQ1RQOgotCQliMSA9IGdlbl9wb3J0cmFuZ2VvcChjc3RhdGUsIHBvcnQxLCBwb3J0MiwgaXBfcHJvdG8sIGRpcik7CisJCWIxID0gZ2VuX3BvcnRyYW5nZW9wKGNzdGF0ZSwgcG9ydDEsIHBvcnQyLCAoYnBmX3VfaW50MzIpaXBfcHJvdG8sCisJCSAgICBkaXIpOwogCQlicmVhazsKIAogCWNhc2UgUFJPVE9fVU5ERUY6CkBAIC01NjI2LDggKzU4ODksOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGJsb2NrICoKLWdlbl9wb3J0cmFuZ2VhdG9tNihjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBvZmYsIGJwZl9pbnQzMiB2MSwKLSAgICBicGZfaW50MzIgdjIpCitnZW5fcG9ydHJhbmdlYXRvbTYoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCB1X2ludCBvZmYsIGJwZl91X2ludDMyIHYxLAorICAgIGJwZl91X2ludDMyIHYyKQogewogCXN0cnVjdCBibG9jayAqYjEsICpiMjsKIApAQCAtNTYzNSw3ICs1ODk4LDcgQEAKIAkJLyoKIAkJICogUmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIHBvcnRzLCBzbyB2MSBpcyB0aGUgbG93ZXIgb25lLgogCQkgKi8KLQkJYnBmX2ludDMyIHZ0ZW1wOworCQlicGZfdV9pbnQzMiB2dGVtcDsKIAogCQl2dGVtcCA9IHYxOwogCQl2MSA9IHYyOwpAQCAtNTY1MCwzOCArNTkxMywzOCBAQAogCXJldHVybiBiMjsKIH0KIAotc3RydWN0IGJsb2NrICoKLWdlbl9wb3J0cmFuZ2VvcDYoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgcG9ydDEsIGludCBwb3J0MiwgaW50IHByb3RvLAotICAgIGludCBkaXIpCitzdGF0aWMgc3RydWN0IGJsb2NrICoKK2dlbl9wb3J0cmFuZ2VvcDYoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCB1X2ludCBwb3J0MSwgdV9pbnQgcG9ydDIsCisgICAgYnBmX3VfaW50MzIgcHJvdG8sIGludCBkaXIpCiB7CiAJc3RydWN0IGJsb2NrICpiMCwgKmIxLCAqdG1wOwogCiAJLyogaXA2IHByb3RvICdwcm90bycgKi8KIAkvKiBYWFggLSBjYXRjaCB0aGUgZmlyc3QgZnJhZ21lbnQgb2YgYSBmcmFnbWVudGVkIHBhY2tldD8gKi8KLQliMCA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LUEwsIDYsIEJQRl9CLCAoYnBmX2ludDMyKXByb3RvKTsKKwliMCA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LUEwsIDYsIEJQRl9CLCBwcm90byk7CiAKIAlzd2l0Y2ggKGRpcikgewogCWNhc2UgUV9TUkM6Ci0JCWIxID0gZ2VuX3BvcnRyYW5nZWF0b202KGNzdGF0ZSwgMCwgKGJwZl9pbnQzMilwb3J0MSwgKGJwZl9pbnQzMilwb3J0Mik7CisJCWIxID0gZ2VuX3BvcnRyYW5nZWF0b202KGNzdGF0ZSwgMCwgcG9ydDEsIHBvcnQyKTsKIAkJYnJlYWs7CiAKIAljYXNlIFFfRFNUOgotCQliMSA9IGdlbl9wb3J0cmFuZ2VhdG9tNihjc3RhdGUsIDIsIChicGZfaW50MzIpcG9ydDEsIChicGZfaW50MzIpcG9ydDIpOwotCQlicmVhazsKLQotCWNhc2UgUV9PUjoKLQljYXNlIFFfREVGQVVMVDoKLQkJdG1wID0gZ2VuX3BvcnRyYW5nZWF0b202KGNzdGF0ZSwgMCwgKGJwZl9pbnQzMilwb3J0MSwgKGJwZl9pbnQzMilwb3J0Mik7Ci0JCWIxID0gZ2VuX3BvcnRyYW5nZWF0b202KGNzdGF0ZSwgMiwgKGJwZl9pbnQzMilwb3J0MSwgKGJwZl9pbnQzMilwb3J0Mik7Ci0JCWdlbl9vcih0bXAsIGIxKTsKKwkJYjEgPSBnZW5fcG9ydHJhbmdlYXRvbTYoY3N0YXRlLCAyLCBwb3J0MSwgcG9ydDIpOwogCQlicmVhazsKIAogCWNhc2UgUV9BTkQ6Ci0JCXRtcCA9IGdlbl9wb3J0cmFuZ2VhdG9tNihjc3RhdGUsIDAsIChicGZfaW50MzIpcG9ydDEsIChicGZfaW50MzIpcG9ydDIpOwotCQliMSA9IGdlbl9wb3J0cmFuZ2VhdG9tNihjc3RhdGUsIDIsIChicGZfaW50MzIpcG9ydDEsIChicGZfaW50MzIpcG9ydDIpOworCQl0bXAgPSBnZW5fcG9ydHJhbmdlYXRvbTYoY3N0YXRlLCAwLCBwb3J0MSwgcG9ydDIpOworCQliMSA9IGdlbl9wb3J0cmFuZ2VhdG9tNihjc3RhdGUsIDIsIHBvcnQxLCBwb3J0Mik7CiAJCWdlbl9hbmQodG1wLCBiMSk7CiAJCWJyZWFrOwogCisJY2FzZSBRX0RFRkFVTFQ6CisJY2FzZSBRX09SOgorCQl0bXAgPSBnZW5fcG9ydHJhbmdlYXRvbTYoY3N0YXRlLCAwLCBwb3J0MSwgcG9ydDIpOworCQliMSA9IGdlbl9wb3J0cmFuZ2VhdG9tNihjc3RhdGUsIDIsIHBvcnQxLCBwb3J0Mik7CisJCWdlbl9vcih0bXAsIGIxKTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlhYm9ydCgpOwogCX0KQEAgLTU2OTEsNyArNTk1NCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYmxvY2sgKgotZ2VuX3BvcnRyYW5nZTYoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgcG9ydDEsIGludCBwb3J0MiwgaW50IGlwX3Byb3RvLAorZ2VuX3BvcnRyYW5nZTYoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCB1X2ludCBwb3J0MSwgdV9pbnQgcG9ydDIsIGludCBpcF9wcm90bywKICAgICBpbnQgZGlyKQogewogCXN0cnVjdCBibG9jayAqYjAsICpiMSwgKnRtcDsKQEAgLTU3MDMsNyArNTk2Niw4IEBACiAJY2FzZSBJUFBST1RPX1VEUDoKIAljYXNlIElQUFJPVE9fVENQOgogCWNhc2UgSVBQUk9UT19TQ1RQOgotCQliMSA9IGdlbl9wb3J0cmFuZ2VvcDYoY3N0YXRlLCBwb3J0MSwgcG9ydDIsIGlwX3Byb3RvLCBkaXIpOworCQliMSA9IGdlbl9wb3J0cmFuZ2VvcDYoY3N0YXRlLCBwb3J0MSwgcG9ydDIsIChicGZfdV9pbnQzMilpcF9wcm90bywKKwkJICAgIGRpcik7CiAJCWJyZWFrOwogCiAJY2FzZSBQUk9UT19VTkRFRjoKQEAgLTU3NzMsMTAgKzYwMzcsMTAgQEAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGJsb2NrICoKLWdlbl9wcm90b2NoYWluKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgaW50IHYsIGludCBwcm90bywgaW50IGRpcikKK2dlbl9wcm90b2NoYWluKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgYnBmX3VfaW50MzIgdiwgaW50IHByb3RvKQogewogI2lmZGVmIE5PX1BST1RPQ0hBSU4KLQlyZXR1cm4gZ2VuX3Byb3RvKGNzdGF0ZSwgdiwgcHJvdG8sIGRpcik7CisJcmV0dXJuIGdlbl9wcm90byhjc3RhdGUsIHYsIHByb3RvKTsKICNlbHNlCiAJc3RydWN0IGJsb2NrICpiMCwgKmI7CiAJc3RydWN0IHNsaXN0ICpzWzEwMF07CkBAIC01NzkzLDggKzYwNTcsOCBAQAogCWNhc2UgUV9JUFY2OgogCQlicmVhazsKIAljYXNlIFFfREVGQVVMVDoKLQkJYjAgPSBnZW5fcHJvdG9jaGFpbihjc3RhdGUsIHYsIFFfSVAsIGRpcik7Ci0JCWIgPSBnZW5fcHJvdG9jaGFpbihjc3RhdGUsIHYsIFFfSVBWNiwgZGlyKTsKKwkJYjAgPSBnZW5fcHJvdG9jaGFpbihjc3RhdGUsIHYsIFFfSVApOworCQliID0gZ2VuX3Byb3RvY2hhaW4oY3N0YXRlLCB2LCBRX0lQVjYpOwogCQlnZW5fb3IoYjAsIGIpOwogCQlyZXR1cm4gYjsKIAlkZWZhdWx0OgpAQCAtNjA5OSw3ICs2MzYzLDcgQEAKICAqIGFnYWluc3QgUV9JUCBhbmQgUV9JUFY2LgogICovCiBzdGF0aWMgc3RydWN0IGJsb2NrICoKLWdlbl9wcm90byhjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCB2LCBpbnQgcHJvdG8sIGludCBkaXIpCitnZW5fcHJvdG8oY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBicGZfdV9pbnQzMiB2LCBpbnQgcHJvdG8sIGludCBkaXIpCiB7CiAJc3RydWN0IGJsb2NrICpiMCwgKmIxOwogI2lmbmRlZiBDSEFTRV9DSEFJTgpAQCAtNjExNiw2ICs2MzgwLDkgQEAKIAkJZ2VuX29yKGIwLCBiMSk7CiAJCXJldHVybiBiMTsKIAorCWNhc2UgUV9MSU5LOgorCQlyZXR1cm4gZ2VuX2xpbmt0eXBlKGNzdGF0ZSwgdik7CisKIAljYXNlIFFfSVA6CiAJCS8qCiAJCSAqIEZvciBGRERJLCBSRkMgMTE4OCBzYXlzIHRoYXQgU05BUCBlbmNhcHN1bGF0aW9uIGlzIHVzZWQsCkBAIC02MTM0LDEzICs2NDAxLDExMSBAQAogCQkgKi8KIAkJYjAgPSBnZW5fbGlua3R5cGUoY3N0YXRlLCBFVEhFUlRZUEVfSVApOwogI2lmbmRlZiBDSEFTRV9DSEFJTgotCQliMSA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LUEwsIDksIEJQRl9CLCAoYnBmX2ludDMyKXYpOworCQliMSA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LUEwsIDksIEJQRl9CLCB2KTsKICNlbHNlCiAJCWIxID0gZ2VuX3Byb3RvY2hhaW4oY3N0YXRlLCB2LCBRX0lQKTsKICNlbmRpZgogCQlnZW5fYW5kKGIwLCBiMSk7CiAJCXJldHVybiBiMTsKIAorCWNhc2UgUV9BUlA6CisJCWJwZl9lcnJvcihjc3RhdGUsICJhcnAgZG9lcyBub3QgZW5jYXBzdWxhdGUgYW5vdGhlciBwcm90b2NvbCIpOworCQkvKk5PVFJFQUNIRUQqLworCisJY2FzZSBRX1JBUlA6CisJCWJwZl9lcnJvcihjc3RhdGUsICJyYXJwIGRvZXMgbm90IGVuY2Fwc3VsYXRlIGFub3RoZXIgcHJvdG9jb2wiKTsKKwkJLypOT1RSRUFDSEVEKi8KKworCWNhc2UgUV9TQ1RQOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3NjdHAgcHJvdG8nIGlzIGJvZ3VzIik7CisJCS8qTk9UUkVBQ0hFRCovCisKKwljYXNlIFFfVENQOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3RjcCBwcm90bycgaXMgYm9ndXMiKTsKKwkJLypOT1RSRUFDSEVEKi8KKworCWNhc2UgUV9VRFA6CisJCWJwZl9lcnJvcihjc3RhdGUsICIndWRwIHByb3RvJyBpcyBib2d1cyIpOworCQkvKk5PVFJFQUNIRUQqLworCisJY2FzZSBRX0lDTVA6CisJCWJwZl9lcnJvcihjc3RhdGUsICInaWNtcCBwcm90bycgaXMgYm9ndXMiKTsKKwkJLypOT1RSRUFDSEVEKi8KKworCWNhc2UgUV9JR01QOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2lnbXAgcHJvdG8nIGlzIGJvZ3VzIik7CisJCS8qTk9UUkVBQ0hFRCovCisKKwljYXNlIFFfSUdSUDoKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidpZ3JwIHByb3RvJyBpcyBib2d1cyIpOworCQkvKk5PVFJFQUNIRUQqLworCisJY2FzZSBRX0FUQUxLOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiQXBwbGVUYWxrIGVuY2Fwc3VsYXRpb24gaXMgbm90IHNwZWNpZmlhYmxlIik7CisJCS8qTk9UUkVBQ0hFRCovCisKKwljYXNlIFFfREVDTkVUOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiREVDTkVUIGVuY2Fwc3VsYXRpb24gaXMgbm90IHNwZWNpZmlhYmxlIik7CisJCS8qTk9UUkVBQ0hFRCovCisKKwljYXNlIFFfTEFUOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiTEFUIGRvZXMgbm90IGVuY2Fwc3VsYXRlIGFub3RoZXIgcHJvdG9jb2wiKTsKKwkJLypOT1RSRUFDSEVEKi8KKworCWNhc2UgUV9TQ0E6CisJCWJwZl9lcnJvcihjc3RhdGUsICJTQ0EgZG9lcyBub3QgZW5jYXBzdWxhdGUgYW5vdGhlciBwcm90b2NvbCIpOworCQkvKk5PVFJFQUNIRUQqLworCisJY2FzZSBRX01PUFJDOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiTU9QUkMgZG9lcyBub3QgZW5jYXBzdWxhdGUgYW5vdGhlciBwcm90b2NvbCIpOworCQkvKk5PVFJFQUNIRUQqLworCisJY2FzZSBRX01PUERMOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiTU9QREwgZG9lcyBub3QgZW5jYXBzdWxhdGUgYW5vdGhlciBwcm90b2NvbCIpOworCQkvKk5PVFJFQUNIRUQqLworCisJY2FzZSBRX0lQVjY6CisJCWIwID0gZ2VuX2xpbmt0eXBlKGNzdGF0ZSwgRVRIRVJUWVBFX0lQVjYpOworI2lmbmRlZiBDSEFTRV9DSEFJTgorCQkvKgorCQkgKiBBbHNvIGNoZWNrIGZvciBhIGZyYWdtZW50IGhlYWRlciBiZWZvcmUgdGhlIGZpbmFsCisJCSAqIGhlYWRlci4KKwkJICovCisJCWIyID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktQTCwgNiwgQlBGX0IsIElQUFJPVE9fRlJBR01FTlQpOworCQliMSA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LUEwsIDQwLCBCUEZfQiwgdik7CisJCWdlbl9hbmQoYjIsIGIxKTsKKwkJYjIgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS1BMLCA2LCBCUEZfQiwgdik7CisJCWdlbl9vcihiMiwgYjEpOworI2Vsc2UKKwkJYjEgPSBnZW5fcHJvdG9jaGFpbihjc3RhdGUsIHYsIFFfSVBWNik7CisjZW5kaWYKKwkJZ2VuX2FuZChiMCwgYjEpOworCQlyZXR1cm4gYjE7CisKKwljYXNlIFFfSUNNUFY2OgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2ljbXA2IHByb3RvJyBpcyBib2d1cyIpOworCQkvKk5PVFJFQUNIRUQqLworCisJY2FzZSBRX0FIOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2FoIHByb3RvJyBpcyBib2d1cyIpOworCQkvKk5PVFJFQUNIRUQqLworCisJY2FzZSBRX0VTUDoKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidlc3AgcHJvdG8nIGlzIGJvZ3VzIik7CisJCS8qTk9UUkVBQ0hFRCovCisKKwljYXNlIFFfUElNOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3BpbSBwcm90bycgaXMgYm9ndXMiKTsKKwkJLypOT1RSRUFDSEVEKi8KKworCWNhc2UgUV9WUlJQOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3ZycnAgcHJvdG8nIGlzIGJvZ3VzIik7CisJCS8qTk9UUkVBQ0hFRCovCisKKwljYXNlIFFfQUFSUDoKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidhYXJwIHByb3RvJyBpcyBib2d1cyIpOworCQkvKk5PVFJFQUNIRUQqLworCiAJY2FzZSBRX0lTTzoKIAkJc3dpdGNoIChjc3RhdGUtPmxpbmt0eXBlKSB7CiAKQEAgLTYxNjUsNyArNjUzMCw2IEBACiAJCQkgKi8KIAkJCXJldHVybiBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgMiwgQlBGX0gsICgweDAzPDw4KSB8IHYpOwogCQkJLypOT1RSRUFDSEVEKi8KLQkJCWJyZWFrOwogCiAJCWNhc2UgRExUX0NfSERMQzoKIAkJCS8qCkBAIC02MTc0LDE0MiArNjUzOCw4OCBAQAogCQkJICovCiAJCQliMCA9IGdlbl9saW5rdHlwZShjc3RhdGUsIExMQ1NBUF9JU09OUzw8OCB8IExMQ1NBUF9JU09OUyk7CiAJCQkvKiBPU0kgaW4gQy1IRExDIGlzIHN0dWZmZWQgd2l0aCBhIGZ1ZGdlIGJ5dGUgKi8KLQkJCWIxID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktQTF9OT1NOQVAsIDEsIEJQRl9CLCAobG9uZyl2KTsKKwkJCWIxID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktQTF9OT1NOQVAsIDEsIEJQRl9CLCB2KTsKIAkJCWdlbl9hbmQoYjAsIGIxKTsKIAkJCXJldHVybiBiMTsKIAogCQlkZWZhdWx0OgogCQkJYjAgPSBnZW5fbGlua3R5cGUoY3N0YXRlLCBMTENTQVBfSVNPTlMpOwotCQkJYjEgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS1BMX05PU05BUCwgMCwgQlBGX0IsIChsb25nKXYpOworCQkJYjEgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS1BMX05PU05BUCwgMCwgQlBGX0IsIHYpOwogCQkJZ2VuX2FuZChiMCwgYjEpOwogCQkJcmV0dXJuIGIxOwogCQl9CiAKKwljYXNlIFFfRVNJUzoKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidlc2lzIHByb3RvJyBpcyBib2d1cyIpOworCQkvKk5PVFJFQUNIRUQqLworCiAJY2FzZSBRX0lTSVM6CiAJCWIwID0gZ2VuX3Byb3RvKGNzdGF0ZSwgSVNPMTA1ODlfSVNJUywgUV9JU08sIFFfREVGQVVMVCk7CiAJCS8qCiAJCSAqIDQgaXMgdGhlIG9mZnNldCBvZiB0aGUgUERVIHR5cGUgcmVsYXRpdmUgdG8gdGhlIElTLUlTCiAJCSAqIGhlYWRlci4KIAkJICovCi0JCWIxID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktQTF9OT1NOQVAsIDQsIEJQRl9CLCAobG9uZyl2KTsKKwkJYjEgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS1BMX05PU05BUCwgNCwgQlBGX0IsIHYpOwogCQlnZW5fYW5kKGIwLCBiMSk7CiAJCXJldHVybiBiMTsKIAotCWNhc2UgUV9BUlA6Ci0JCWJwZl9lcnJvcihjc3RhdGUsICJhcnAgZG9lcyBub3QgZW5jYXBzdWxhdGUgYW5vdGhlciBwcm90b2NvbCIpOwotCQkvKiBOT1RSRUFDSEVEICovCi0KLQljYXNlIFFfUkFSUDoKLQkJYnBmX2Vycm9yKGNzdGF0ZSwgInJhcnAgZG9lcyBub3QgZW5jYXBzdWxhdGUgYW5vdGhlciBwcm90b2NvbCIpOwotCQkvKiBOT1RSRUFDSEVEICovCi0KLQljYXNlIFFfQVRBTEs6Ci0JCWJwZl9lcnJvcihjc3RhdGUsICJhdGFsayBlbmNhcHN1bGF0aW9uIGlzIG5vdCBzcGVjaWZpYWJsZSIpOwotCQkvKiBOT1RSRUFDSEVEICovCi0KLQljYXNlIFFfREVDTkVUOgotCQlicGZfZXJyb3IoY3N0YXRlLCAiZGVjbmV0IGVuY2Fwc3VsYXRpb24gaXMgbm90IHNwZWNpZmlhYmxlIik7Ci0JCS8qIE5PVFJFQUNIRUQgKi8KLQotCWNhc2UgUV9TQ0E6Ci0JCWJwZl9lcnJvcihjc3RhdGUsICJzY2EgZG9lcyBub3QgZW5jYXBzdWxhdGUgYW5vdGhlciBwcm90b2NvbCIpOwotCQkvKiBOT1RSRUFDSEVEICovCi0KLQljYXNlIFFfTEFUOgotCQlicGZfZXJyb3IoY3N0YXRlLCAibGF0IGRvZXMgbm90IGVuY2Fwc3VsYXRlIGFub3RoZXIgcHJvdG9jb2wiKTsKLQkJLyogTk9UUkVBQ0hFRCAqLwotCi0JY2FzZSBRX01PUFJDOgotCQlicGZfZXJyb3IoY3N0YXRlLCAibW9wcmMgZG9lcyBub3QgZW5jYXBzdWxhdGUgYW5vdGhlciBwcm90b2NvbCIpOwotCQkvKiBOT1RSRUFDSEVEICovCi0KLQljYXNlIFFfTU9QREw6Ci0JCWJwZl9lcnJvcihjc3RhdGUsICJtb3BkbCBkb2VzIG5vdCBlbmNhcHN1bGF0ZSBhbm90aGVyIHByb3RvY29sIik7Ci0JCS8qIE5PVFJFQUNIRUQgKi8KLQotCWNhc2UgUV9MSU5LOgotCQlyZXR1cm4gZ2VuX2xpbmt0eXBlKGNzdGF0ZSwgdik7Ci0KLQljYXNlIFFfVURQOgotCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3VkcCBwcm90bycgaXMgYm9ndXMiKTsKLQkJLyogTk9UUkVBQ0hFRCAqLwotCi0JY2FzZSBRX1RDUDoKLQkJYnBmX2Vycm9yKGNzdGF0ZSwgIid0Y3AgcHJvdG8nIGlzIGJvZ3VzIik7Ci0JCS8qIE5PVFJFQUNIRUQgKi8KLQotCWNhc2UgUV9TQ1RQOgotCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3NjdHAgcHJvdG8nIGlzIGJvZ3VzIik7Ci0JCS8qIE5PVFJFQUNIRUQgKi8KLQotCWNhc2UgUV9JQ01QOgotCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2ljbXAgcHJvdG8nIGlzIGJvZ3VzIik7Ci0JCS8qIE5PVFJFQUNIRUQgKi8KLQotCWNhc2UgUV9JR01QOgotCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2lnbXAgcHJvdG8nIGlzIGJvZ3VzIik7Ci0JCS8qIE5PVFJFQUNIRUQgKi8KLQotCWNhc2UgUV9JR1JQOgotCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2lncnAgcHJvdG8nIGlzIGJvZ3VzIik7Ci0JCS8qIE5PVFJFQUNIRUQgKi8KLQotCWNhc2UgUV9QSU06Ci0JCWJwZl9lcnJvcihjc3RhdGUsICIncGltIHByb3RvJyBpcyBib2d1cyIpOwotCQkvKiBOT1RSRUFDSEVEICovCi0KLQljYXNlIFFfVlJSUDoKLQkJYnBmX2Vycm9yKGNzdGF0ZSwgIid2cnJwIHByb3RvJyBpcyBib2d1cyIpOwotCQkvKiBOT1RSRUFDSEVEICovCi0KLQljYXNlIFFfQ0FSUDoKLQkJYnBmX2Vycm9yKGNzdGF0ZSwgIidjYXJwIHByb3RvJyBpcyBib2d1cyIpOwotCQkvKiBOT1RSRUFDSEVEICovCi0KLQljYXNlIFFfSVBWNjoKLQkJYjAgPSBnZW5fbGlua3R5cGUoY3N0YXRlLCBFVEhFUlRZUEVfSVBWNik7Ci0jaWZuZGVmIENIQVNFX0NIQUlOCi0JCS8qCi0JCSAqIEFsc28gY2hlY2sgZm9yIGEgZnJhZ21lbnQgaGVhZGVyIGJlZm9yZSB0aGUgZmluYWwKLQkJICogaGVhZGVyLgotCQkgKi8KLQkJYjIgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS1BMLCA2LCBCUEZfQiwgSVBQUk9UT19GUkFHTUVOVCk7Ci0JCWIxID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktQTCwgNDAsIEJQRl9CLCAoYnBmX2ludDMyKXYpOwotCQlnZW5fYW5kKGIyLCBiMSk7Ci0JCWIyID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktQTCwgNiwgQlBGX0IsIChicGZfaW50MzIpdik7Ci0JCWdlbl9vcihiMiwgYjEpOwotI2Vsc2UKLQkJYjEgPSBnZW5fcHJvdG9jaGFpbihjc3RhdGUsIHYsIFFfSVBWNik7Ci0jZW5kaWYKLQkJZ2VuX2FuZChiMCwgYjEpOwotCQlyZXR1cm4gYjE7Ci0KLQljYXNlIFFfSUNNUFY2OgotCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2ljbXA2IHByb3RvJyBpcyBib2d1cyIpOwotCi0JY2FzZSBRX0FIOgotCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2FoIHByb3RvJyBpcyBib2d1cyIpOwotCi0JY2FzZSBRX0VTUDoKLQkJYnBmX2Vycm9yKGNzdGF0ZSwgIidhaCBwcm90bycgaXMgYm9ndXMiKTsKKwljYXNlIFFfQ0xOUDoKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidjbG5wIHByb3RvJyBpcyBub3Qgc3VwcG9ydGVkIik7CisJCS8qTk9UUkVBQ0hFRCovCiAKIAljYXNlIFFfU1RQOgogCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3N0cCBwcm90bycgaXMgYm9ndXMiKTsKKwkJLypOT1RSRUFDSEVEKi8KIAogCWNhc2UgUV9JUFg6CiAJCWJwZl9lcnJvcihjc3RhdGUsICInaXB4IHByb3RvJyBpcyBib2d1cyIpOworCQkvKk5PVFJFQUNIRUQqLwogCiAJY2FzZSBRX05FVEJFVUk6CiAJCWJwZl9lcnJvcihjc3RhdGUsICInbmV0YmV1aSBwcm90bycgaXMgYm9ndXMiKTsKKwkJLypOT1RSRUFDSEVEKi8KKworCWNhc2UgUV9JU0lTX0wxOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2wxIHByb3RvJyBpcyBib2d1cyIpOworCQkvKk5PVFJFQUNIRUQqLworCisJY2FzZSBRX0lTSVNfTDI6CisJCWJwZl9lcnJvcihjc3RhdGUsICInbDIgcHJvdG8nIGlzIGJvZ3VzIik7CisJCS8qTk9UUkVBQ0hFRCovCisKKwljYXNlIFFfSVNJU19JSUg6CisJCWJwZl9lcnJvcihjc3RhdGUsICInaWloIHByb3RvJyBpcyBib2d1cyIpOworCQkvKk5PVFJFQUNIRUQqLworCisJY2FzZSBRX0lTSVNfU05QOgorCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3NucCBwcm90bycgaXMgYm9ndXMiKTsKKwkJLypOT1RSRUFDSEVEKi8KKworCWNhc2UgUV9JU0lTX0NTTlA6CisJCWJwZl9lcnJvcihjc3RhdGUsICInY3NucCBwcm90bycgaXMgYm9ndXMiKTsKKwkJLypOT1RSRUFDSEVEKi8KKworCWNhc2UgUV9JU0lTX1BTTlA6CisJCWJwZl9lcnJvcihjc3RhdGUsICIncHNucCBwcm90bycgaXMgYm9ndXMiKTsKKwkJLypOT1RSRUFDSEVEKi8KKworCWNhc2UgUV9JU0lTX0xTUDoKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidsc3AgcHJvdG8nIGlzIGJvZ3VzIik7CisJCS8qTk9UUkVBQ0hFRCovCiAKIAljYXNlIFFfUkFESU86CiAJCWJwZl9lcnJvcihjc3RhdGUsICIncmFkaW8gcHJvdG8nIGlzIGJvZ3VzIik7CisJCS8qTk9UUkVBQ0hFRCovCisKKwljYXNlIFFfQ0FSUDoKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIidjYXJwIHByb3RvJyBpcyBib2d1cyIpOworCQkvKk5PVFJFQUNIRUQqLwogCiAJZGVmYXVsdDoKIAkJYWJvcnQoKTsKLQkJLyogTk9UUkVBQ0hFRCAqLworCQkvKk5PVFJFQUNIRUQqLwogCX0KLQkvKiBOT1RSRUFDSEVEICovCisJLypOT1RSRUFDSEVEKi8KIH0KIAogc3RydWN0IGJsb2NrICoKQEAgLTYzMzEsNiArNjY0MSwxMyBAQAogCWludCBwb3J0LCByZWFsX3Byb3RvOwogCWludCBwb3J0MSwgcG9ydDI7CiAKKwkvKgorCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSB1cyBhbmQgcm91dGluZXMgYmVsb3cgdXMsIGFuZCByZXR1cm4gTlVMTAorCSAqIG9uIGFuIGVycm9yLgorCSAqLworCWlmIChzZXRqbXAoY3N0YXRlLT50b3BfY3R4KSkKKwkJcmV0dXJuIChOVUxMKTsKKwogCXN3aXRjaCAocS5hZGRyKSB7CiAKIAljYXNlIFFfTkVUOgpAQCAtNjYwMywzMSArNjkyMCw0MiBAQAogCWNhc2UgUV9QUk9UT0NIQUlOOgogCQlyZWFsX3Byb3RvID0gbG9va3VwX3Byb3RvKGNzdGF0ZSwgbmFtZSwgcHJvdG8pOwogCQlpZiAocmVhbF9wcm90byA+PSAwKQotCQkJcmV0dXJuIGdlbl9wcm90b2NoYWluKGNzdGF0ZSwgcmVhbF9wcm90bywgcHJvdG8sIGRpcik7CisJCQlyZXR1cm4gZ2VuX3Byb3RvY2hhaW4oY3N0YXRlLCByZWFsX3Byb3RvLCBwcm90byk7CiAJCWVsc2UKIAkJCWJwZl9lcnJvcihjc3RhdGUsICJ1bmtub3duIHByb3RvY29sOiAlcyIsIG5hbWUpOwogCiAJY2FzZSBRX1VOREVGOgogCQlzeW50YXgoY3N0YXRlKTsKLQkJLyogTk9UUkVBQ0hFRCAqLworCQkvKk5PVFJFQUNIRUQqLwogCX0KIAlhYm9ydCgpOwotCS8qIE5PVFJFQUNIRUQgKi8KKwkvKk5PVFJFQUNIRUQqLwogfQogCiBzdHJ1Y3QgYmxvY2sgKgogZ2VuX21jb2RlKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLAotICAgIHVuc2lnbmVkIGludCBtYXNrbGVuLCBzdHJ1Y3QgcXVhbCBxKQorICAgIGJwZl91X2ludDMyIG1hc2tsZW4sIHN0cnVjdCBxdWFsIHEpCiB7CiAJcmVnaXN0ZXIgaW50IG5sZW4sIG1sZW47CiAJYnBmX3VfaW50MzIgbiwgbTsKIAorCS8qCisJICogQ2F0Y2ggZXJyb3JzIHJlcG9ydGVkIGJ5IHVzIGFuZCByb3V0aW5lcyBiZWxvdyB1cywgYW5kIHJldHVybiBOVUxMCisJICogb24gYW4gZXJyb3IuCisJICovCisJaWYgKHNldGptcChjc3RhdGUtPnRvcF9jdHgpKQorCQlyZXR1cm4gKE5VTEwpOworCiAJbmxlbiA9IF9fcGNhcF9hdG9pbihzMSwgJm4pOworCWlmIChubGVuIDwgMCkKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgImludmFsaWQgSVB2NCBhZGRyZXNzICclcyciLCBzMSk7CiAJLyogUHJvbW90ZSBzaG9ydCBpcGFkZHIgKi8KIAluIDw8PSAzMiAtIG5sZW47CiAKIAlpZiAoczIgIT0gTlVMTCkgewogCQltbGVuID0gX19wY2FwX2F0b2luKHMyLCAmbSk7CisJCWlmIChtbGVuIDwgMCkKKwkJCWJwZl9lcnJvcihjc3RhdGUsICJpbnZhbGlkIElQdjQgYWRkcmVzcyAnJXMnIiwgczIpOwogCQkvKiBQcm9tb3RlIHNob3J0IGlwYWRkciAqLwogCQltIDw8PSAzMiAtIG1sZW47CiAJCWlmICgobiAmIH5tKSAhPSAwKQpAQCAtNjY1NywyNyArNjk4NSwzOSBAQAogCiAJZGVmYXVsdDoKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgIk1hc2sgc3ludGF4IGZvciBuZXR3b3JrcyBvbmx5Iik7Ci0JCS8qIE5PVFJFQUNIRUQgKi8KKwkJLypOT1RSRUFDSEVEKi8KIAl9Ci0JLyogTk9UUkVBQ0hFRCAqLworCS8qTk9UUkVBQ0hFRCovCiB9CiAKIHN0cnVjdCBibG9jayAqCiBnZW5fbmNvZGUoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBjb25zdCBjaGFyICpzLCBicGZfdV9pbnQzMiB2LCBzdHJ1Y3QgcXVhbCBxKQogewogCWJwZl91X2ludDMyIG1hc2s7Ci0JaW50IHByb3RvID0gcS5wcm90bzsKLQlpbnQgZGlyID0gcS5kaXI7CisJaW50IHByb3RvOworCWludCBkaXI7CiAJcmVnaXN0ZXIgaW50IHZsZW47CiAKKwkvKgorCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSB1cyBhbmQgcm91dGluZXMgYmVsb3cgdXMsIGFuZCByZXR1cm4gTlVMTAorCSAqIG9uIGFuIGVycm9yLgorCSAqLworCWlmIChzZXRqbXAoY3N0YXRlLT50b3BfY3R4KSkKKwkJcmV0dXJuIChOVUxMKTsKKworCXByb3RvID0gcS5wcm90bzsKKwlkaXIgPSBxLmRpcjsKIAlpZiAocyA9PSBOVUxMKQogCQl2bGVuID0gMzI7CiAJZWxzZSBpZiAocS5wcm90byA9PSBRX0RFQ05FVCkgewogCQl2bGVuID0gX19wY2FwX2F0b2RuKHMsICZ2KTsKIAkJaWYgKHZsZW4gPT0gMCkKIAkJCWJwZl9lcnJvcihjc3RhdGUsICJtYWxmb3JtZWQgZGVjbmV0IGFkZHJlc3MgJyVzJyIsIHMpOwotCX0gZWxzZQorCX0gZWxzZSB7CiAJCXZsZW4gPSBfX3BjYXBfYXRvaW4ocywgJnYpOworCQlpZiAodmxlbiA8IDApCisJCQlicGZfZXJyb3IoY3N0YXRlLCAiaW52YWxpZCBJUHY0IGFkZHJlc3MgJyVzJyIsIHMpOworCX0KIAogCXN3aXRjaCAocS5hZGRyKSB7CiAKQEAgLTY3MjEsOCArNzA2MSw4IEBACiAKIAkgICAgewogCQlzdHJ1Y3QgYmxvY2sgKmI7Ci0JCWIgPSBnZW5fcG9ydChjc3RhdGUsIChpbnQpdiwgcHJvdG8sIGRpcik7Ci0JCWdlbl9vcihnZW5fcG9ydDYoY3N0YXRlLCAoaW50KXYsIHByb3RvLCBkaXIpLCBiKTsKKwkJYiA9IGdlbl9wb3J0KGNzdGF0ZSwgdiwgcHJvdG8sIGRpcik7CisJCWdlbl9vcihnZW5fcG9ydDYoY3N0YXRlLCB2LCBwcm90bywgZGlyKSwgYik7CiAJCXJldHVybiBiOwogCSAgICB9CiAKQEAgLTY3NDMsMzYgKzcwODMsMzYgQEAKIAogCSAgICB7CiAJCXN0cnVjdCBibG9jayAqYjsKLQkJYiA9IGdlbl9wb3J0cmFuZ2UoY3N0YXRlLCAoaW50KXYsIChpbnQpdiwgcHJvdG8sIGRpcik7Ci0JCWdlbl9vcihnZW5fcG9ydHJhbmdlNihjc3RhdGUsIChpbnQpdiwgKGludCl2LCBwcm90bywgZGlyKSwgYik7CisJCWIgPSBnZW5fcG9ydHJhbmdlKGNzdGF0ZSwgdiwgdiwgcHJvdG8sIGRpcik7CisJCWdlbl9vcihnZW5fcG9ydHJhbmdlNihjc3RhdGUsIHYsIHYsIHByb3RvLCBkaXIpLCBiKTsKIAkJcmV0dXJuIGI7CiAJICAgIH0KIAogCWNhc2UgUV9HQVRFV0FZOgogCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2dhdGV3YXknIHJlcXVpcmVzIGEgbmFtZSIpOwotCQkvKiBOT1RSRUFDSEVEICovCisJCS8qTk9UUkVBQ0hFRCovCiAKIAljYXNlIFFfUFJPVE86Ci0JCXJldHVybiBnZW5fcHJvdG8oY3N0YXRlLCAoaW50KXYsIHByb3RvLCBkaXIpOworCQlyZXR1cm4gZ2VuX3Byb3RvKGNzdGF0ZSwgdiwgcHJvdG8sIGRpcik7CiAKIAljYXNlIFFfUFJPVE9DSEFJTjoKLQkJcmV0dXJuIGdlbl9wcm90b2NoYWluKGNzdGF0ZSwgKGludCl2LCBwcm90bywgZGlyKTsKKwkJcmV0dXJuIGdlbl9wcm90b2NoYWluKGNzdGF0ZSwgdiwgcHJvdG8pOwogCiAJY2FzZSBRX1VOREVGOgogCQlzeW50YXgoY3N0YXRlKTsKLQkJLyogTk9UUkVBQ0hFRCAqLworCQkvKk5PVFJFQUNIRUQqLwogCiAJZGVmYXVsdDoKIAkJYWJvcnQoKTsKLQkJLyogTk9UUkVBQ0hFRCAqLworCQkvKk5PVFJFQUNIRUQqLwogCX0KLQkvKiBOT1RSRUFDSEVEICovCisJLypOT1RSRUFDSEVEKi8KIH0KIAogI2lmZGVmIElORVQ2CiBzdHJ1Y3QgYmxvY2sgKgogZ2VuX21jb2RlNihjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwKLSAgICB1bnNpZ25lZCBpbnQgbWFza2xlbiwgc3RydWN0IHF1YWwgcSkKKyAgICBicGZfdV9pbnQzMiBtYXNrbGVuLCBzdHJ1Y3QgcXVhbCBxKQogewogCXN0cnVjdCBhZGRyaW5mbyAqcmVzOwogCXN0cnVjdCBpbjZfYWRkciAqYWRkcjsKQEAgLTY3ODAsNiArNzEyMCwxMyBAQAogCXN0cnVjdCBibG9jayAqYjsKIAl1aW50MzJfdCAqYSwgKm07CiAKKwkvKgorCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSB1cyBhbmQgcm91dGluZXMgYmVsb3cgdXMsIGFuZCByZXR1cm4gTlVMTAorCSAqIG9uIGFuIGVycm9yLgorCSAqLworCWlmIChzZXRqbXAoY3N0YXRlLT50b3BfY3R4KSkKKwkJcmV0dXJuIChOVUxMKTsKKwogCWlmIChzMikKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgIm5vIG1hc2sgJXMgc3VwcG9ydGVkIiwgczIpOwogCkBAIC02NzkxLDEwICs3MTM4LDEwIEBACiAJCWJwZl9lcnJvcihjc3RhdGUsICIlcyByZXNvbHZlZCB0byBtdWx0aXBsZSBhZGRyZXNzIiwgczEpOwogCWFkZHIgPSAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopcmVzLT5haV9hZGRyKS0+c2luNl9hZGRyOwogCi0JaWYgKHNpemVvZihtYXNrKSAqIDggPCBtYXNrbGVuKQotCQlicGZfZXJyb3IoY3N0YXRlLCAibWFzayBsZW5ndGggbXVzdCBiZSA8PSAldSIsICh1bnNpZ25lZCBpbnQpKHNpemVvZihtYXNrKSAqIDgpKTsKKwlpZiAobWFza2xlbiA+IHNpemVvZihtYXNrLnM2X2FkZHIpICogOCkKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIm1hc2sgbGVuZ3RoIG11c3QgYmUgPD0gJXUiLCAodW5zaWduZWQgaW50KShzaXplb2YobWFzay5zNl9hZGRyKSAqIDgpKTsKIAltZW1zZXQoJm1hc2ssIDAsIHNpemVvZihtYXNrKSk7Ci0JbWVtc2V0KCZtYXNrLCAweGZmLCBtYXNrbGVuIC8gOCk7CisJbWVtc2V0KCZtYXNrLnM2X2FkZHIsIDB4ZmYsIG1hc2tsZW4gLyA4KTsKIAlpZiAobWFza2xlbiAlIDgpIHsKIAkJbWFzay5zNl9hZGRyW21hc2tsZW4gLyA4XSA9CiAJCQkoMHhmZiA8PCAoOCAtIG1hc2tsZW4gJSA4KSkgJiAweGZmOwpAQCAtNjgyMyw0NSArNzE3MCw2NCBAQAogCiAJZGVmYXVsdDoKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgImludmFsaWQgcXVhbGlmaWVyIGFnYWluc3QgSVB2NiBhZGRyZXNzIik7Ci0JCS8qIE5PVFJFQUNIRUQgKi8KKwkJLypOT1RSRUFDSEVEKi8KIAl9CiB9CiAjZW5kaWYgLypJTkVUNiovCiAKIHN0cnVjdCBibG9jayAqCi1nZW5fZWNvZGUoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBjb25zdCB1X2NoYXIgKmVhZGRyLCBzdHJ1Y3QgcXVhbCBxKQorZ2VuX2Vjb2RlKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgY29uc3QgY2hhciAqcywgc3RydWN0IHF1YWwgcSkKIHsKIAlzdHJ1Y3QgYmxvY2sgKmIsICp0bXA7CiAKKwkvKgorCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSB1cyBhbmQgcm91dGluZXMgYmVsb3cgdXMsIGFuZCByZXR1cm4gTlVMTAorCSAqIG9uIGFuIGVycm9yLgorCSAqLworCWlmIChzZXRqbXAoY3N0YXRlLT50b3BfY3R4KSkKKwkJcmV0dXJuIChOVUxMKTsKKwogCWlmICgocS5hZGRyID09IFFfSE9TVCB8fCBxLmFkZHIgPT0gUV9ERUZBVUxUKSAmJiBxLnByb3RvID09IFFfTElOSykgeworCQljc3RhdGUtPmUgPSBwY2FwX2V0aGVyX2F0b24ocyk7CisJCWlmIChjc3RhdGUtPmUgPT0gTlVMTCkKKwkJCWJwZl9lcnJvcihjc3RhdGUsICJtYWxsb2MiKTsKIAkJc3dpdGNoIChjc3RhdGUtPmxpbmt0eXBlKSB7CiAJCWNhc2UgRExUX0VOMTBNQjoKIAkJY2FzZSBETFRfTkVUQU5BTFlaRVI6CiAJCWNhc2UgRExUX05FVEFOQUxZWkVSX1RSQU5TUEFSRU5UOgogCQkJdG1wID0gZ2VuX3ByZXZsaW5raGRyX2NoZWNrKGNzdGF0ZSk7Ci0JCQliID0gZ2VuX2Vob3N0b3AoY3N0YXRlLCBlYWRkciwgKGludClxLmRpcik7CisJCQliID0gZ2VuX2Vob3N0b3AoY3N0YXRlLCBjc3RhdGUtPmUsIChpbnQpcS5kaXIpOwogCQkJaWYgKHRtcCAhPSBOVUxMKQogCQkJCWdlbl9hbmQodG1wLCBiKTsKLQkJCXJldHVybiBiOworCQkJYnJlYWs7CiAJCWNhc2UgRExUX0ZEREk6Ci0JCQlyZXR1cm4gZ2VuX2Zob3N0b3AoY3N0YXRlLCBlYWRkciwgKGludClxLmRpcik7CisJCQliID0gZ2VuX2Zob3N0b3AoY3N0YXRlLCBjc3RhdGUtPmUsIChpbnQpcS5kaXIpOworCQkJYnJlYWs7CiAJCWNhc2UgRExUX0lFRUU4MDI6Ci0JCQlyZXR1cm4gZ2VuX3Rob3N0b3AoY3N0YXRlLCBlYWRkciwgKGludClxLmRpcik7CisJCQliID0gZ2VuX3Rob3N0b3AoY3N0YXRlLCBjc3RhdGUtPmUsIChpbnQpcS5kaXIpOworCQkJYnJlYWs7CiAJCWNhc2UgRExUX0lFRUU4MDJfMTE6CiAJCWNhc2UgRExUX1BSSVNNX0hFQURFUjoKIAkJY2FzZSBETFRfSUVFRTgwMl8xMV9SQURJT19BVlM6CiAJCWNhc2UgRExUX0lFRUU4MDJfMTFfUkFESU86CiAJCWNhc2UgRExUX1BQSToKLQkJCXJldHVybiBnZW5fd2xhbmhvc3RvcChjc3RhdGUsIGVhZGRyLCAoaW50KXEuZGlyKTsKLQkJY2FzZSBETFRfSVBfT1ZFUl9GQzoKLQkJCXJldHVybiBnZW5faXBmY2hvc3RvcChjc3RhdGUsIGVhZGRyLCAoaW50KXEuZGlyKTsKLQkJZGVmYXVsdDoKLQkJCWJwZl9lcnJvcihjc3RhdGUsICJldGhlcm5ldCBhZGRyZXNzZXMgc3VwcG9ydGVkIG9ubHkgb24gZXRoZXJuZXQvRkRESS90b2tlbiByaW5nLzgwMi4xMS9BVE0gTEFORS9GaWJyZSBDaGFubmVsIik7CisJCQliID0gZ2VuX3dsYW5ob3N0b3AoY3N0YXRlLCBjc3RhdGUtPmUsIChpbnQpcS5kaXIpOwogCQkJYnJlYWs7CisJCWNhc2UgRExUX0lQX09WRVJfRkM6CisJCQliID0gZ2VuX2lwZmNob3N0b3AoY3N0YXRlLCBjc3RhdGUtPmUsIChpbnQpcS5kaXIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlmcmVlKGNzdGF0ZS0+ZSk7CisJCQljc3RhdGUtPmUgPSBOVUxMOworCQkJYnBmX2Vycm9yKGNzdGF0ZSwgImV0aGVybmV0IGFkZHJlc3NlcyBzdXBwb3J0ZWQgb25seSBvbiBldGhlcm5ldC9GRERJL3Rva2VuIHJpbmcvODAyLjExL0FUTSBMQU5FL0ZpYnJlIENoYW5uZWwiKTsKKwkJCS8qTk9UUkVBQ0hFRCovCiAJCX0KKwkJZnJlZShjc3RhdGUtPmUpOworCQljc3RhdGUtPmUgPSBOVUxMOworCQlyZXR1cm4gKGIpOwogCX0KIAlicGZfZXJyb3IoY3N0YXRlLCAiZXRoZXJuZXQgYWRkcmVzcyB1c2VkIGluIG5vbi1ldGhlciBleHByZXNzaW9uIik7Ci0JLyogTk9UUkVBQ0hFRCAqLworCS8qTk9UUkVBQ0hFRCovCiB9CiAKIHZvaWQKQEAgLTY5MDMsOSArNzI2OSwxMSBAQAogICogKDEsIDIsIG9yIDQpIGF0IHRoYXQgb2Zmc2V0IGludG8gdGhhdCByZWdpc3RlciwgbWFraW5nIGl0IHRoZSByZWdpc3RlcgogICogZm9yICJpbmRleCIuCiAgKi8KLXN0cnVjdCBhcnRoICoKLWdlbl9sb2FkKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgaW50IHByb3RvLCBzdHJ1Y3QgYXJ0aCAqaW5zdCwgaW50IHNpemUpCitzdGF0aWMgc3RydWN0IGFydGggKgorZ2VuX2xvYWRfaW50ZXJuYWwoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgcHJvdG8sIHN0cnVjdCBhcnRoICppbnN0LAorICAgIGJwZl91X2ludDMyIHNpemUpCiB7CisJaW50IHNpemVfY29kZTsKIAlzdHJ1Y3Qgc2xpc3QgKnMsICp0bXA7CiAJc3RydWN0IGJsb2NrICpiOwogCWludCByZWdubyA9IGFsbG9jX3JlZyhjc3RhdGUpOwpAQCAtNjkxNSwxNyArNzI4MywxOCBAQAogCiAJZGVmYXVsdDoKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgImRhdGEgc2l6ZSBtdXN0IGJlIDEsIDIsIG9yIDQiKTsKKwkJLypOT1RSRUFDSEVEKi8KIAogCWNhc2UgMToKLQkJc2l6ZSA9IEJQRl9COworCQlzaXplX2NvZGUgPSBCUEZfQjsKIAkJYnJlYWs7CiAKIAljYXNlIDI6Ci0JCXNpemUgPSBCUEZfSDsKKwkJc2l6ZV9jb2RlID0gQlBGX0g7CiAJCWJyZWFrOwogCiAJY2FzZSA0OgotCQlzaXplID0gQlBGX1c7CisJCXNpemVfY29kZSA9IEJQRl9XOwogCQlicmVhazsKIAl9CiAJc3dpdGNoIChwcm90bykgewpAQCAtNjk1Miw3ICs3MzIxLDcgQEAKIAkJLyoKIAkJICogTG9hZCB0aGUgaXRlbSBhdCB0aGF0IG9mZnNldC4KIAkJICovCi0JCXRtcCA9IG5ld19zdG10KGNzdGF0ZSwgQlBGX0xEfEJQRl9JTkR8c2l6ZSk7CisJCXRtcCA9IG5ld19zdG10KGNzdGF0ZSwgQlBGX0xEfEJQRl9JTkR8c2l6ZV9jb2RlKTsKIAkJc2FwcGVuZChzLCB0bXApOwogCQlzYXBwZW5kKGluc3QtPnMsIHMpOwogCQlicmVhazsKQEAgLTY5OTQsNyArNzM2Myw3IEBACiAJCSAqIHZhcmlhYmxlLWxlbmd0aDsgdGhhdCBoZWFkZXIgbGVuZ3RoIGlzIHdoYXQgd2UgcHV0CiAJCSAqIGludG8gdGhlIFggcmVnaXN0ZXIgYW5kIHRoZW4gYWRkZWQgdG8gdGhlIGluZGV4KS4KIAkJICovCi0JCXRtcCA9IG5ld19zdG10KGNzdGF0ZSwgQlBGX0xEfEJQRl9JTkR8c2l6ZSk7CisJCXRtcCA9IG5ld19zdG10KGNzdGF0ZSwgQlBGX0xEfEJQRl9JTkR8c2l6ZV9jb2RlKTsKIAkJdG1wLT5zLmsgPSBjc3RhdGUtPm9mZl9saW5raGRyLmNvbnN0YW50X3BhcnQ7CiAJCXNhcHBlbmQocywgdG1wKTsKIAkJc2FwcGVuZChpbnN0LT5zLCBzKTsKQEAgLTcwNDEsNyArNzQxMCw3IEBACiAJCSAqIHBheWxvYWQsIGFuZCB0aGUgY29uc3RhbnQgcGFydCBvZiB0aGUgb2Zmc2V0IG9mIHRoZQogCQkgKiBzdGFydCBvZiB0aGUgbGluay1sYXllciBwYXlsb2FkLgogCQkgKi8KLQkJdG1wID0gbmV3X3N0bXQoY3N0YXRlLCBCUEZfTER8QlBGX0lORHxzaXplKTsKKwkJdG1wID0gbmV3X3N0bXQoY3N0YXRlLCBCUEZfTER8QlBGX0lORHxzaXplX2NvZGUpOwogCQl0bXAtPnMuayA9IGNzdGF0ZS0+b2ZmX2xpbmtwbC5jb25zdGFudF9wYXJ0ICsgY3N0YXRlLT5vZmZfbmw7CiAJCXNhcHBlbmQocywgdG1wKTsKIAkJc2FwcGVuZChpbnN0LT5zLCBzKTsKQEAgLTcwNTAsNyArNzQxOSw3IEBACiAJCSAqIERvIHRoZSBjb21wdXRhdGlvbiBvbmx5IGlmIHRoZSBwYWNrZXQgY29udGFpbnMKIAkJICogdGhlIHByb3RvY29sIGluIHF1ZXN0aW9uLgogCQkgKi8KLQkJYiA9IGdlbl9wcm90b19hYmJyZXYoY3N0YXRlLCBwcm90byk7CisJCWIgPSBnZW5fcHJvdG9fYWJicmV2X2ludGVybmFsKGNzdGF0ZSwgcHJvdG8pOwogCQlpZiAoaW5zdC0+YikKIAkJCWdlbl9hbmQoaW5zdC0+YiwgYik7CiAJCWluc3QtPmIgPSBiOwpAQCAtNzA5OCw3ICs3NDY3LDcgQEAKIAkJc2FwcGVuZChzLCB4ZmVyX3RvX2EoY3N0YXRlLCBpbnN0KSk7CiAJCXNhcHBlbmQocywgbmV3X3N0bXQoY3N0YXRlLCBCUEZfQUxVfEJQRl9BRER8QlBGX1gpKTsKIAkJc2FwcGVuZChzLCBuZXdfc3RtdChjc3RhdGUsIEJQRl9NSVNDfEJQRl9UQVgpKTsKLQkJc2FwcGVuZChzLCB0bXAgPSBuZXdfc3RtdChjc3RhdGUsIEJQRl9MRHxCUEZfSU5EfHNpemUpKTsKKwkJc2FwcGVuZChzLCB0bXAgPSBuZXdfc3RtdChjc3RhdGUsIEJQRl9MRHxCUEZfSU5EfHNpemVfY29kZSkpOwogCQl0bXAtPnMuayA9IGNzdGF0ZS0+b2ZmX2xpbmtwbC5jb25zdGFudF9wYXJ0ICsgY3N0YXRlLT5vZmZfbmw7CiAJCXNhcHBlbmQoaW5zdC0+cywgcyk7CiAKQEAgLTcxMDgsMTAgKzc0NzcsMTAgQEAKIAkJICogaWYgdGhpcyBpcyBhbiBJUCBkYXRhZ3JhbSBhbmQgaXMgdGhlIGZpcnN0IG9yCiAJCSAqIG9ubHkgZnJhZ21lbnQgb2YgdGhhdCBkYXRhZ3JhbS4KIAkJICovCi0JCWdlbl9hbmQoZ2VuX3Byb3RvX2FiYnJldihjc3RhdGUsIHByb3RvKSwgYiA9IGdlbl9pcGZyYWcoY3N0YXRlKSk7CisJCWdlbl9hbmQoZ2VuX3Byb3RvX2FiYnJldl9pbnRlcm5hbChjc3RhdGUsIHByb3RvKSwgYiA9IGdlbl9pcGZyYWcoY3N0YXRlKSk7CiAJCWlmIChpbnN0LT5iKQogCQkJZ2VuX2FuZChpbnN0LT5iLCBiKTsKLQkJZ2VuX2FuZChnZW5fcHJvdG9fYWJicmV2KGNzdGF0ZSwgUV9JUCksIGIpOworCQlnZW5fYW5kKGdlbl9wcm90b19hYmJyZXZfaW50ZXJuYWwoY3N0YXRlLCBRX0lQKSwgYik7CiAJCWluc3QtPmIgPSBiOwogCQlicmVhazsKIAljYXNlIFFfSUNNUFY2OgpAQCAtNzExOSw3ICs3NDg4LDcgQEAKICAgICAgICAgKiBEbyB0aGUgY29tcHV0YXRpb24gb25seSBpZiB0aGUgcGFja2V0IGNvbnRhaW5zCiAgICAgICAgICogdGhlIHByb3RvY29sIGluIHF1ZXN0aW9uLgogICAgICAgICAqLwotICAgICAgICBiID0gZ2VuX3Byb3RvX2FiYnJldihjc3RhdGUsIFFfSVBWNik7CisgICAgICAgIGIgPSBnZW5fcHJvdG9fYWJicmV2X2ludGVybmFsKGNzdGF0ZSwgUV9JUFY2KTsKICAgICAgICAgaWYgKGluc3QtPmIpIHsKICAgICAgICAgICAgIGdlbl9hbmQoaW5zdC0+YiwgYik7CiAgICAgICAgIH0KQEAgLTcxNjAsNyArNzUyOSw3IEBACiAgICAgICAgICogcGF5bG9hZCwgYW5kIHRoZSBjb25zdGFudCBwYXJ0IG9mIHRoZSBvZmZzZXQgb2YgdGhlCiAgICAgICAgICogc3RhcnQgb2YgdGhlIGxpbmstbGF5ZXIgcGF5bG9hZC4KICAgICAgICAgKi8KLSAgICAgICAgdG1wID0gbmV3X3N0bXQoY3N0YXRlLCBCUEZfTER8QlBGX0lORHxzaXplKTsKKyAgICAgICAgdG1wID0gbmV3X3N0bXQoY3N0YXRlLCBCUEZfTER8QlBGX0lORHxzaXplX2NvZGUpOwogICAgICAgICB0bXAtPnMuayA9IGNzdGF0ZS0+b2ZmX2xpbmtwbC5jb25zdGFudF9wYXJ0ICsgY3N0YXRlLT5vZmZfbmwgKyA0MDsKIAogICAgICAgICBzYXBwZW5kKHMsIHRtcCk7CkBAIC03MTc2LDggKzc1NDUsMjIgQEAKIAlyZXR1cm4gaW5zdDsKIH0KIAotc3RydWN0IGJsb2NrICoKLWdlbl9yZWxhdGlvbihjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBjb2RlLCBzdHJ1Y3QgYXJ0aCAqYTAsCitzdHJ1Y3QgYXJ0aCAqCitnZW5fbG9hZChjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBwcm90bywgc3RydWN0IGFydGggKmluc3QsCisgICAgYnBmX3VfaW50MzIgc2l6ZSkKK3sKKwkvKgorCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSB1cyBhbmQgcm91dGluZXMgYmVsb3cgdXMsIGFuZCByZXR1cm4gTlVMTAorCSAqIG9uIGFuIGVycm9yLgorCSAqLworCWlmIChzZXRqbXAoY3N0YXRlLT50b3BfY3R4KSkKKwkJcmV0dXJuIChOVUxMKTsKKworCXJldHVybiBnZW5fbG9hZF9pbnRlcm5hbChjc3RhdGUsIHByb3RvLCBpbnN0LCBzaXplKTsKK30KKworc3RhdGljIHN0cnVjdCBibG9jayAqCitnZW5fcmVsYXRpb25faW50ZXJuYWwoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgY29kZSwgc3RydWN0IGFydGggKmEwLAogICAgIHN0cnVjdCBhcnRoICphMSwgaW50IHJldmVyc2VkKQogewogCXN0cnVjdCBzbGlzdCAqczAsICpzMSwgKnMyOwpAQCAtNzIyMCwxMyArNzYwMywzNiBAQAogCXJldHVybiBiOwogfQogCitzdHJ1Y3QgYmxvY2sgKgorZ2VuX3JlbGF0aW9uKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgaW50IGNvZGUsIHN0cnVjdCBhcnRoICphMCwKKyAgICBzdHJ1Y3QgYXJ0aCAqYTEsIGludCByZXZlcnNlZCkKK3sKKwkvKgorCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSB1cyBhbmQgcm91dGluZXMgYmVsb3cgdXMsIGFuZCByZXR1cm4gTlVMTAorCSAqIG9uIGFuIGVycm9yLgorCSAqLworCWlmIChzZXRqbXAoY3N0YXRlLT50b3BfY3R4KSkKKwkJcmV0dXJuIChOVUxMKTsKKworCXJldHVybiBnZW5fcmVsYXRpb25faW50ZXJuYWwoY3N0YXRlLCBjb2RlLCBhMCwgYTEsIHJldmVyc2VkKTsKK30KKwogc3RydWN0IGFydGggKgogZ2VuX2xvYWRsZW4oY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlKQogewotCWludCByZWdubyA9IGFsbG9jX3JlZyhjc3RhdGUpOwotCXN0cnVjdCBhcnRoICphID0gKHN0cnVjdCBhcnRoICopbmV3Y2h1bmsoY3N0YXRlLCBzaXplb2YoKmEpKTsKKwlpbnQgcmVnbm87CisJc3RydWN0IGFydGggKmE7CiAJc3RydWN0IHNsaXN0ICpzOwogCisJLyoKKwkgKiBDYXRjaCBlcnJvcnMgcmVwb3J0ZWQgYnkgdXMgYW5kIHJvdXRpbmVzIGJlbG93IHVzLCBhbmQgcmV0dXJuIE5VTEwKKwkgKiBvbiBhbiBlcnJvci4KKwkgKi8KKwlpZiAoc2V0am1wKGNzdGF0ZS0+dG9wX2N0eCkpCisJCXJldHVybiAoTlVMTCk7CisKKwlyZWdubyA9IGFsbG9jX3JlZyhjc3RhdGUpOworCWEgPSAoc3RydWN0IGFydGggKiluZXdjaHVuayhjc3RhdGUsIHNpemVvZigqYSkpOwogCXMgPSBuZXdfc3RtdChjc3RhdGUsIEJQRl9MRHxCUEZfTEVOKTsKIAlzLT5uZXh0ID0gbmV3X3N0bXQoY3N0YXRlLCBCUEZfU1QpOwogCXMtPm5leHQtPnMuayA9IHJlZ25vOwpAQCAtNzIzNiw4ICs3NjQyLDggQEAKIAlyZXR1cm4gYTsKIH0KIAotc3RydWN0IGFydGggKgotZ2VuX2xvYWRpKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgaW50IHZhbCkKK3N0YXRpYyBzdHJ1Y3QgYXJ0aCAqCitnZW5fbG9hZGlfaW50ZXJuYWwoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBicGZfdV9pbnQzMiB2YWwpCiB7CiAJc3RydWN0IGFydGggKmE7CiAJc3RydWN0IHNsaXN0ICpzOwpAQCAtNzI1OCwxMCArNzY2NCwzNiBAQAogfQogCiBzdHJ1Y3QgYXJ0aCAqCi1nZW5fbmVnKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgc3RydWN0IGFydGggKmEpCitnZW5fbG9hZGkoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBicGZfdV9pbnQzMiB2YWwpCiB7CisJLyoKKwkgKiBDYXRjaCBlcnJvcnMgcmVwb3J0ZWQgYnkgdXMgYW5kIHJvdXRpbmVzIGJlbG93IHVzLCBhbmQgcmV0dXJuIE5VTEwKKwkgKiBvbiBhbiBlcnJvci4KKwkgKi8KKwlpZiAoc2V0am1wKGNzdGF0ZS0+dG9wX2N0eCkpCisJCXJldHVybiAoTlVMTCk7CisKKwlyZXR1cm4gZ2VuX2xvYWRpX2ludGVybmFsKGNzdGF0ZSwgdmFsKTsKK30KKworLyoKKyAqIFRoZSBhX2FyZyBkYW5jZSBpcyB0byBhdm9pZCBhbm5veWluZyB3aGluaW5nIGJ5IGNvbXBpbGVycyB0aGF0CisgKiBhIG1pZ2h0IGJlIGNsb2JiZXJlZCBieSBsb25nam1wIC0geWVhaCwgaXQgbWlnaHQsIGJ1dCAqV0hPIENBUkVTKj8KKyAqIEl0J3Mgbm90ICp1c2VkKiBhZnRlciBzZXRqbXAgcmV0dXJucy4KKyAqLworc3RydWN0IGFydGggKgorZ2VuX25lZyhjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIHN0cnVjdCBhcnRoICphX2FyZykKK3sKKwlzdHJ1Y3QgYXJ0aCAqYSA9IGFfYXJnOwogCXN0cnVjdCBzbGlzdCAqczsKIAorCS8qCisJICogQ2F0Y2ggZXJyb3JzIHJlcG9ydGVkIGJ5IHVzIGFuZCByb3V0aW5lcyBiZWxvdyB1cywgYW5kIHJldHVybiBOVUxMCisJICogb24gYW4gZXJyb3IuCisJICovCisJaWYgKHNldGptcChjc3RhdGUtPnRvcF9jdHgpKQorCQlyZXR1cm4gKE5VTEwpOworCiAJcyA9IHhmZXJfdG9fYShjc3RhdGUsIGEpOwogCXNhcHBlbmQoYS0+cywgcyk7CiAJcyA9IG5ld19zdG10KGNzdGF0ZSwgQlBGX0FMVXxCUEZfTkVHKTsKQEAgLTcyNzQsMTUgKzc3MDYsMzEgQEAKIAlyZXR1cm4gYTsKIH0KIAorLyoKKyAqIFRoZSBhMF9hcmcgZGFuY2UgaXMgdG8gYXZvaWQgYW5ub3lpbmcgd2hpbmluZyBieSBjb21waWxlcnMgdGhhdAorICogYTAgbWlnaHQgYmUgY2xvYmJlcmVkIGJ5IGxvbmdqbXAgLSB5ZWFoLCBpdCBtaWdodCwgYnV0ICpXSE8gQ0FSRVMqPworICogSXQncyBub3QgKnVzZWQqIGFmdGVyIHNldGptcCByZXR1cm5zLgorICovCiBzdHJ1Y3QgYXJ0aCAqCi1nZW5fYXJ0aChjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBjb2RlLCBzdHJ1Y3QgYXJ0aCAqYTAsCitnZW5fYXJ0aChjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBjb2RlLCBzdHJ1Y3QgYXJ0aCAqYTBfYXJnLAogICAgIHN0cnVjdCBhcnRoICphMSkKIHsKKwlzdHJ1Y3QgYXJ0aCAqYTAgPSBhMF9hcmc7CiAJc3RydWN0IHNsaXN0ICpzMCwgKnMxLCAqczI7CiAKIAkvKgorCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSB1cyBhbmQgcm91dGluZXMgYmVsb3cgdXMsIGFuZCByZXR1cm4gTlVMTAorCSAqIG9uIGFuIGVycm9yLgorCSAqLworCWlmIChzZXRqbXAoY3N0YXRlLT50b3BfY3R4KSkKKwkJcmV0dXJuIChOVUxMKTsKKworCS8qCiAJICogRGlzYWxsb3cgZGl2aXNpb24gYnksIG9yIG1vZHVsdXMgYnksIHplcm87IHdlIGRvIHRoaXMgaGVyZQogCSAqIHNvIHRoYXQgaXQgZ2V0cyBkb25lIGV2ZW4gaWYgdGhlIG9wdGltaXplciBpcyBkaXNhYmxlZC4KKwkgKgorCSAqIEFsc28gZGlzYWxsb3cgc2hpZnRzIGJ5IGEgdmFsdWUgZ3JlYXRlciB0aGFuIDMxOyB3ZSBkbyB0aGlzCisJICogaGVyZSwgZm9yIHRoZSBzYW1lIHJlYXNvbi4KIAkgKi8KIAlpZiAoY29kZSA9PSBCUEZfRElWKSB7CiAJCWlmIChhMS0+cy0+cy5jb2RlID09IChCUEZfTER8QlBGX0lNTSkgJiYgYTEtPnMtPnMuayA9PSAwKQpAQCAtNzI5MCw2ICs3NzM4LDkgQEAKIAl9IGVsc2UgaWYgKGNvZGUgPT0gQlBGX01PRCkgewogCQlpZiAoYTEtPnMtPnMuY29kZSA9PSAoQlBGX0xEfEJQRl9JTU0pICYmIGExLT5zLT5zLmsgPT0gMCkKIAkJCWJwZl9lcnJvcihjc3RhdGUsICJtb2R1bHVzIGJ5IHplcm8iKTsKKwl9IGVsc2UgaWYgKGNvZGUgPT0gQlBGX0xTSCB8fCBjb2RlID09IEJQRl9SU0gpIHsKKwkJaWYgKGExLT5zLT5zLmNvZGUgPT0gKEJQRl9MRHxCUEZfSU1NKSAmJiBhMS0+cy0+cy5rID4gMzEpCisJCQlicGZfZXJyb3IoY3N0YXRlLCAic2hpZnQgYnkgbW9yZSB0aGFuIDMxIGJpdHMiKTsKIAl9CiAJczAgPSB4ZmVyX3RvX3goY3N0YXRlLCBhMSk7CiAJczEgPSB4ZmVyX3RvX2EoY3N0YXRlLCBhMCk7CkBAIC03MzM3LDcgKzc3ODgsNyBAQAogCQl9CiAJfQogCWJwZl9lcnJvcihjc3RhdGUsICJ0b28gbWFueSByZWdpc3RlcnMgbmVlZGVkIHRvIGV2YWx1YXRlIGV4cHJlc3Npb24iKTsKLQkvKiBOT1RSRUFDSEVEICovCisJLypOT1RSRUFDSEVEKi8KIH0KIAogLyoKQEAgLTczNjcsNiArNzgxOCwxMyBAQAogc3RydWN0IGJsb2NrICoKIGdlbl9ncmVhdGVyKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgaW50IG4pCiB7CisJLyoKKwkgKiBDYXRjaCBlcnJvcnMgcmVwb3J0ZWQgYnkgdXMgYW5kIHJvdXRpbmVzIGJlbG93IHVzLCBhbmQgcmV0dXJuIE5VTEwKKwkgKiBvbiBhbiBlcnJvci4KKwkgKi8KKwlpZiAoc2V0am1wKGNzdGF0ZS0+dG9wX2N0eCkpCisJCXJldHVybiAoTlVMTCk7CisKIAlyZXR1cm4gZ2VuX2xlbihjc3RhdGUsIEJQRl9KR0UsIG4pOwogfQogCkBAIC03Mzc4LDYgKzc4MzYsMTMgQEAKIHsKIAlzdHJ1Y3QgYmxvY2sgKmI7CiAKKwkvKgorCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSB1cyBhbmQgcm91dGluZXMgYmVsb3cgdXMsIGFuZCByZXR1cm4gTlVMTAorCSAqIG9uIGFuIGVycm9yLgorCSAqLworCWlmIChzZXRqbXAoY3N0YXRlLT50b3BfY3R4KSkKKwkJcmV0dXJuIChOVUxMKTsKKwogCWIgPSBnZW5fbGVuKGNzdGF0ZSwgQlBGX0pHVCwgbik7CiAJZ2VuX25vdChiKTsKIApAQCAtNzM5NSwyNCArNzg2MCwzMSBAQAogICogd291bGQgZ2VuZXJhdGUgY29kZSBhcHByb3ByaWF0ZSB0byB0aGUgcmFkaW8gaGVhZGVyIGluIHF1ZXN0aW9uLgogICovCiBzdHJ1Y3QgYmxvY2sgKgotZ2VuX2J5dGVvcChjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBvcCwgaW50IGlkeCwgaW50IHZhbCkKK2dlbl9ieXRlb3AoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgb3AsIGludCBpZHgsIGJwZl91X2ludDMyIHZhbCkKIHsKIAlzdHJ1Y3QgYmxvY2sgKmI7CiAJc3RydWN0IHNsaXN0ICpzOwogCisJLyoKKwkgKiBDYXRjaCBlcnJvcnMgcmVwb3J0ZWQgYnkgdXMgYW5kIHJvdXRpbmVzIGJlbG93IHVzLCBhbmQgcmV0dXJuIE5VTEwKKwkgKiBvbiBhbiBlcnJvci4KKwkgKi8KKwlpZiAoc2V0am1wKGNzdGF0ZS0+dG9wX2N0eCkpCisJCXJldHVybiAoTlVMTCk7CisKIAlzd2l0Y2ggKG9wKSB7CiAJZGVmYXVsdDoKIAkJYWJvcnQoKTsKIAogCWNhc2UgJz0nOgotCQlyZXR1cm4gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktIRFIsICh1X2ludClpZHgsIEJQRl9CLCAoYnBmX2ludDMyKXZhbCk7CisJCXJldHVybiBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgKHVfaW50KWlkeCwgQlBGX0IsIHZhbCk7CiAKIAljYXNlICc8JzoKLQkJYiA9IGdlbl9jbXBfbHQoY3N0YXRlLCBPUl9MSU5LSERSLCAodV9pbnQpaWR4LCBCUEZfQiwgKGJwZl9pbnQzMil2YWwpOworCQliID0gZ2VuX2NtcF9sdChjc3RhdGUsIE9SX0xJTktIRFIsICh1X2ludClpZHgsIEJQRl9CLCB2YWwpOwogCQlyZXR1cm4gYjsKIAogCWNhc2UgJz4nOgotCQliID0gZ2VuX2NtcF9ndChjc3RhdGUsIE9SX0xJTktIRFIsICh1X2ludClpZHgsIEJQRl9CLCAoYnBmX2ludDMyKXZhbCk7CisJCWIgPSBnZW5fY21wX2d0KGNzdGF0ZSwgT1JfTElOS0hEUiwgKHVfaW50KWlkeCwgQlBGX0IsIHZhbCk7CiAJCXJldHVybiBiOwogCiAJY2FzZSAnfCc6CkBAIC03NDQwLDYgKzc5MTIsMTMgQEAKIAlzdHJ1Y3QgYmxvY2sgKmIwLCAqYjEsICpiMjsKIAlzdGF0aWMgY29uc3QgdV9jaGFyIGVicm9hZGNhc3RbXSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwogCisJLyoKKwkgKiBDYXRjaCBlcnJvcnMgcmVwb3J0ZWQgYnkgdXMgYW5kIHJvdXRpbmVzIGJlbG93IHVzLCBhbmQgcmV0dXJuIE5VTEwKKwkgKiBvbiBhbiBlcnJvci4KKwkgKi8KKwlpZiAoc2V0am1wKGNzdGF0ZS0+dG9wX2N0eCkpCisJCXJldHVybiAoTlVMTCk7CisKIAlzd2l0Y2ggKHByb3RvKSB7CiAKIAljYXNlIFFfREVGQVVMVDoKQEAgLTc0NzEsNyArNzk1MCw3IEBACiAJCWRlZmF1bHQ6CiAJCQlicGZfZXJyb3IoY3N0YXRlLCAibm90IGEgYnJvYWRjYXN0IGxpbmsiKTsKIAkJfQotCQlicmVhazsKKyAJCS8qTk9UUkVBQ0hFRCovCiAKIAljYXNlIFFfSVA6CiAJCS8qCkBAIC03NDgzLDE1ICs3OTYyLDE1IEBACiAJCQlicGZfZXJyb3IoY3N0YXRlLCAibmV0bWFzayBub3Qga25vd24sIHNvICdpcCBicm9hZGNhc3QnIG5vdCBzdXBwb3J0ZWQiKTsKIAkJYjAgPSBnZW5fbGlua3R5cGUoY3N0YXRlLCBFVEhFUlRZUEVfSVApOwogCQlob3N0bWFzayA9IH5jc3RhdGUtPm5ldG1hc2s7Ci0JCWIxID0gZ2VuX21jbXAoY3N0YXRlLCBPUl9MSU5LUEwsIDE2LCBCUEZfVywgKGJwZl9pbnQzMikwLCBob3N0bWFzayk7CisJCWIxID0gZ2VuX21jbXAoY3N0YXRlLCBPUl9MSU5LUEwsIDE2LCBCUEZfVywgMCwgaG9zdG1hc2spOwogCQliMiA9IGdlbl9tY21wKGNzdGF0ZSwgT1JfTElOS1BMLCAxNiwgQlBGX1csCi0JCQkgICAgICAoYnBmX2ludDMyKSh+MCAmIGhvc3RtYXNrKSwgaG9zdG1hc2spOworCQkJICAgICAgfjAgJiBob3N0bWFzaywgaG9zdG1hc2spOwogCQlnZW5fb3IoYjEsIGIyKTsKIAkJZ2VuX2FuZChiMCwgYjIpOwogCQlyZXR1cm4gYjI7CiAJfQogCWJwZl9lcnJvcihjc3RhdGUsICJvbmx5IGxpbmstbGF5ZXIvSVAgYnJvYWRjYXN0IGZpbHRlcnMgc3VwcG9ydGVkIik7Ci0JLyogTk9UUkVBQ0hFRCAqLworCS8qTk9UUkVBQ0hFRCovCiB9CiAKIC8qCkBAIC03NTE4LDYgKzc5OTcsMTMgQEAKIAlyZWdpc3RlciBzdHJ1Y3QgYmxvY2sgKmIwLCAqYjEsICpiMjsKIAlyZWdpc3RlciBzdHJ1Y3Qgc2xpc3QgKnM7CiAKKwkvKgorCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSB1cyBhbmQgcm91dGluZXMgYmVsb3cgdXMsIGFuZCByZXR1cm4gTlVMTAorCSAqIG9uIGFuIGVycm9yLgorCSAqLworCWlmIChzZXRqbXAoY3N0YXRlLT50b3BfY3R4KSkKKwkJcmV0dXJuIChOVUxMKTsKKwogCXN3aXRjaCAocHJvdG8pIHsKIAogCWNhc2UgUV9ERUZBVUxUOgpAQCAtNzY3NSwxOCArODE2MSw2NSBAQAogCiAJY2FzZSBRX0lQOgogCQliMCA9IGdlbl9saW5rdHlwZShjc3RhdGUsIEVUSEVSVFlQRV9JUCk7Ci0JCWIxID0gZ2VuX2NtcF9nZShjc3RhdGUsIE9SX0xJTktQTCwgMTYsIEJQRl9CLCAoYnBmX2ludDMyKTIyNCk7CisJCWIxID0gZ2VuX2NtcF9nZShjc3RhdGUsIE9SX0xJTktQTCwgMTYsIEJQRl9CLCAyMjQpOwogCQlnZW5fYW5kKGIwLCBiMSk7CiAJCXJldHVybiBiMTsKIAogCWNhc2UgUV9JUFY2OgogCQliMCA9IGdlbl9saW5rdHlwZShjc3RhdGUsIEVUSEVSVFlQRV9JUFY2KTsKLQkJYjEgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS1BMLCAyNCwgQlBGX0IsIChicGZfaW50MzIpMjU1KTsKKwkJYjEgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS1BMLCAyNCwgQlBGX0IsIDI1NSk7CiAJCWdlbl9hbmQoYjAsIGIxKTsKIAkJcmV0dXJuIGIxOwogCX0KIAlicGZfZXJyb3IoY3N0YXRlLCAibGluay1sYXllciBtdWx0aWNhc3QgZmlsdGVycyBzdXBwb3J0ZWQgb25seSBvbiBldGhlcm5ldC9GRERJL3Rva2VuIHJpbmcvQVJDTkVULzgwMi4xMS9BVE0gTEFORS9GaWJyZSBDaGFubmVsIik7Ci0JLyogTk9UUkVBQ0hFRCAqLworCS8qTk9UUkVBQ0hFRCovCit9CisKK3N0cnVjdCBibG9jayAqCitnZW5faWZpbmRleChjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBpZmluZGV4KQoreworCXJlZ2lzdGVyIHN0cnVjdCBibG9jayAqYjA7CisKKwkvKgorCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSB1cyBhbmQgcm91dGluZXMgYmVsb3cgdXMsIGFuZCByZXR1cm4gTlVMTAorCSAqIG9uIGFuIGVycm9yLgorCSAqLworCWlmIChzZXRqbXAoY3N0YXRlLT50b3BfY3R4KSkKKwkJcmV0dXJuIChOVUxMKTsKKworCS8qCisJICogT25seSBzb21lIGRhdGEgbGluayB0eXBlcyBzdXBwb3J0IGlmaW5kZXggcXVhbGlmaWVycy4KKwkgKi8KKwlzd2l0Y2ggKGNzdGF0ZS0+bGlua3R5cGUpIHsKKwljYXNlIERMVF9MSU5VWF9TTEwyOgorCQkvKiBtYXRjaCBwYWNrZXRzIG9uIHRoaXMgaW50ZXJmYWNlICovCisJCWIwID0gZ2VuX2NtcChjc3RhdGUsIE9SX0xJTktIRFIsIDQsIEJQRl9XLCBpZmluZGV4KTsKKwkJYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisjaWYgZGVmaW5lZChsaW51eCkKKwkJLyoKKwkJICogVGhpcyBpcyBMaW51eDsgd2UgcmVxdWlyZSBQRl9QQUNLRVQgc3VwcG9ydC4KKwkJICogSWYgdGhpcyBpcyBhICpsaXZlKiBjYXB0dXJlLCB3ZSBjYW4gbG9vayBhdAorCQkgKiBzcGVjaWFsIG1ldGEtZGF0YSBpbiB0aGUgZmlsdGVyIGV4cHJlc3Npb247CisJCSAqIGlmIGl0J3MgYSBzYXZlZmlsZSwgd2UgY2FuJ3QuCisJCSAqLworCQlpZiAoY3N0YXRlLT5icGZfcGNhcC0+cmZpbGUgIT0gTlVMTCkgeworCQkJLyogV2UgaGF2ZSBhIEZJTEUgKiwgc28gdGhpcyBpcyBhIHNhdmVmaWxlICovCisJCQlicGZfZXJyb3IoY3N0YXRlLCAiaWZpbmRleCBub3Qgc3VwcG9ydGVkIG9uICVzIHdoZW4gcmVhZGluZyBzYXZlZmlsZXMiLAorCQkJICAgIHBjYXBfZGF0YWxpbmtfdmFsX3RvX2Rlc2NyaXB0aW9uX29yX2RsdChjc3RhdGUtPmxpbmt0eXBlKSk7CisJCQliMCA9IE5VTEw7CisJCQkvKk5PVFJFQUNIRUQqLworCQl9CisJCS8qIG1hdGNoIGlmaW5kZXggKi8KKwkJYjAgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgU0tGX0FEX09GRiArIFNLRl9BRF9JRklOREVYLCBCUEZfVywKKwkJICAgICAgICAgICAgIGlmaW5kZXgpOworI2Vsc2UgLyogZGVmaW5lZChsaW51eCkgKi8KKwkJYnBmX2Vycm9yKGNzdGF0ZSwgImlmaW5kZXggbm90IHN1cHBvcnRlZCBvbiAlcyIsCisJCSAgICBwY2FwX2RhdGFsaW5rX3ZhbF90b19kZXNjcmlwdGlvbl9vcl9kbHQoY3N0YXRlLT5saW5rdHlwZSkpOworCQkvKk5PVFJFQUNIRUQqLworI2VuZGlmIC8qIGRlZmluZWQobGludXgpICovCisJfQorCXJldHVybiAoYjApOwogfQogCiAvKgpAQCAtNzcwNCwxMyArODIzNywyMCBAQAogCXJlZ2lzdGVyIHN0cnVjdCBibG9jayAqYjA7CiAKIAkvKgorCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSB1cyBhbmQgcm91dGluZXMgYmVsb3cgdXMsIGFuZCByZXR1cm4gTlVMTAorCSAqIG9uIGFuIGVycm9yLgorCSAqLworCWlmIChzZXRqbXAoY3N0YXRlLT50b3BfY3R4KSkKKwkJcmV0dXJuIChOVUxMKTsKKworCS8qCiAJICogT25seSBzb21lIGRhdGEgbGluayB0eXBlcyBzdXBwb3J0IGluYm91bmQvb3V0Ym91bmQgcXVhbGlmaWVycy4KIAkgKi8KIAlzd2l0Y2ggKGNzdGF0ZS0+bGlua3R5cGUpIHsKIAljYXNlIERMVF9TTElQOgotCQliMCA9IGdlbl9yZWxhdGlvbihjc3RhdGUsIEJQRl9KRVEsCi0JCQkgIGdlbl9sb2FkKGNzdGF0ZSwgUV9MSU5LLCBnZW5fbG9hZGkoY3N0YXRlLCAwKSwgMSksCi0JCQkgIGdlbl9sb2FkaShjc3RhdGUsIDApLAorCQliMCA9IGdlbl9yZWxhdGlvbl9pbnRlcm5hbChjc3RhdGUsIEJQRl9KRVEsCisJCQkgIGdlbl9sb2FkX2ludGVybmFsKGNzdGF0ZSwgUV9MSU5LLCBnZW5fbG9hZGlfaW50ZXJuYWwoY3N0YXRlLCAwKSwgMSksCisJCQkgIGdlbl9sb2FkaV9pbnRlcm5hbChjc3RhdGUsIDApLAogCQkJICBkaXIpOwogCQlicmVhazsKIApAQCAtNzczMywxMCArODI3MywxOSBAQAogCQl9CiAJCWJyZWFrOwogCisJY2FzZSBETFRfTElOVVhfU0xMMjoKKwkJLyogbWF0Y2ggb3V0Z29pbmcgcGFja2V0cyAqLworCQliMCA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LSERSLCAxMCwgQlBGX0IsIExJTlVYX1NMTF9PVVRHT0lORyk7CisJCWlmICghZGlyKSB7CisJCQkvKiB0byBmaWx0ZXIgb24gaW5ib3VuZCB0cmFmZmljLCBpbnZlcnQgdGhlIG1hdGNoICovCisJCQlnZW5fbm90KGIwKTsKKwkJfQorCQlicmVhazsKKwogI2lmZGVmIEhBVkVfTkVUX1BGVkFSX0gKIAljYXNlIERMVF9QRkxPRzoKIAkJYjAgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgb2Zmc2V0b2Yoc3RydWN0IHBmbG9naGRyLCBkaXIpLCBCUEZfQiwKLQkJICAgIChicGZfaW50MzIpKChkaXIgPT0gMCkgPyBQRl9JTiA6IFBGX09VVCkpOworCQkgICAgKChkaXIgPT0gMCkgPyBQRl9JTiA6IFBGX09VVCkpOwogCQlicmVhazsKICNlbmRpZgogCkBAIC03ODAwLDE5ICs4MzQ5LDE4IEBACiAJCSAqIHdpdGggbmV3ZXIgY2FwdHVyZSBBUElzLCBhbGxvd2luZyBpdCB0byBiZSBzYXZlZAogCQkgKiBpbiBwY2FwbmcgZmlsZXMuCiAJCSAqLwotI2lmIGRlZmluZWQobGludXgpICYmIGRlZmluZWQoUEZfUEFDS0VUKSAmJiBkZWZpbmVkKFNPX0FUVEFDSF9GSUxURVIpCisjaWYgZGVmaW5lZChsaW51eCkKIAkJLyoKLQkJICogVGhpcyBpcyBMaW51eCB3aXRoIFBGX1BBQ0tFVCBzdXBwb3J0LgorCQkgKiBUaGlzIGlzIExpbnV4OyB3ZSByZXF1aXJlIFBGX1BBQ0tFVCBzdXBwb3J0LgogCQkgKiBJZiB0aGlzIGlzIGEgKmxpdmUqIGNhcHR1cmUsIHdlIGNhbiBsb29rIGF0CiAJCSAqIHNwZWNpYWwgbWV0YS1kYXRhIGluIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbjsKIAkJICogaWYgaXQncyBhIHNhdmVmaWxlLCB3ZSBjYW4ndC4KIAkJICovCiAJCWlmIChjc3RhdGUtPmJwZl9wY2FwLT5yZmlsZSAhPSBOVUxMKSB7CiAJCQkvKiBXZSBoYXZlIGEgRklMRSAqLCBzbyB0aGlzIGlzIGEgc2F2ZWZpbGUgKi8KLQkJCWJwZl9lcnJvcihjc3RhdGUsICJpbmJvdW5kL291dGJvdW5kIG5vdCBzdXBwb3J0ZWQgb24gbGlua3R5cGUgJWQgd2hlbiByZWFkaW5nIHNhdmVmaWxlcyIsCi0JCQkgICAgY3N0YXRlLT5saW5rdHlwZSk7Ci0JCQliMCA9IE5VTEw7Ci0JCQkvKiBOT1RSRUFDSEVEICovCisJCQlicGZfZXJyb3IoY3N0YXRlLCAiaW5ib3VuZC9vdXRib3VuZCBub3Qgc3VwcG9ydGVkIG9uICVzIHdoZW4gcmVhZGluZyBzYXZlZmlsZXMiLAorCQkJICAgIHBjYXBfZGF0YWxpbmtfdmFsX3RvX2Rlc2NyaXB0aW9uX29yX2RsdChjc3RhdGUtPmxpbmt0eXBlKSk7CisJCQkvKk5PVFJFQUNIRUQqLwogCQl9CiAJCS8qIG1hdGNoIG91dGdvaW5nIHBhY2tldHMgKi8KIAkJYjAgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgU0tGX0FEX09GRiArIFNLRl9BRF9QS1RUWVBFLCBCUEZfSCwKQEAgLTc4MjEsMTEgKzgzNjksMTEgQEAKIAkJCS8qIHRvIGZpbHRlciBvbiBpbmJvdW5kIHRyYWZmaWMsIGludmVydCB0aGUgbWF0Y2ggKi8KIAkJCWdlbl9ub3QoYjApOwogCQl9Ci0jZWxzZSAvKiBkZWZpbmVkKGxpbnV4KSAmJiBkZWZpbmVkKFBGX1BBQ0tFVCkgJiYgZGVmaW5lZChTT19BVFRBQ0hfRklMVEVSKSAqLwotCQlicGZfZXJyb3IoY3N0YXRlLCAiaW5ib3VuZC9vdXRib3VuZCBub3Qgc3VwcG9ydGVkIG9uIGxpbmt0eXBlICVkIiwKLQkJICAgIGNzdGF0ZS0+bGlua3R5cGUpOwotCQkvKiBOT1RSRUFDSEVEICovCi0jZW5kaWYgLyogZGVmaW5lZChsaW51eCkgJiYgZGVmaW5lZChQRl9QQUNLRVQpICYmIGRlZmluZWQoU09fQVRUQUNIX0ZJTFRFUikgKi8KKyNlbHNlIC8qIGRlZmluZWQobGludXgpICovCisJCWJwZl9lcnJvcihjc3RhdGUsICJpbmJvdW5kL291dGJvdW5kIG5vdCBzdXBwb3J0ZWQgb24gJXMiLAorCQkgICAgcGNhcF9kYXRhbGlua192YWxfdG9fZGVzY3JpcHRpb25fb3JfZGx0KGNzdGF0ZS0+bGlua3R5cGUpKTsKKwkJLypOT1RSRUFDSEVEKi8KKyNlbmRpZiAvKiBkZWZpbmVkKGxpbnV4KSAqLwogCX0KIAlyZXR1cm4gKGIwKTsKIH0KQEAgLTc4MzgsMTggKzgzODYsMjYgQEAKIAlzdHJ1Y3QgYmxvY2sgKmIwOwogCXVfaW50IGxlbiwgb2ZmOwogCisJLyoKKwkgKiBDYXRjaCBlcnJvcnMgcmVwb3J0ZWQgYnkgdXMgYW5kIHJvdXRpbmVzIGJlbG93IHVzLCBhbmQgcmV0dXJuIE5VTEwKKwkgKiBvbiBhbiBlcnJvci4KKwkgKi8KKwlpZiAoc2V0am1wKGNzdGF0ZS0+dG9wX2N0eCkpCisJCXJldHVybiAoTlVMTCk7CisKIAlpZiAoY3N0YXRlLT5saW5rdHlwZSAhPSBETFRfUEZMT0cpIHsKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgImlmbmFtZSBzdXBwb3J0ZWQgb25seSBvbiBQRiBsaW5rdHlwZSIpOwotCQkvKiBOT1RSRUFDSEVEICovCisJCS8qTk9UUkVBQ0hFRCovCiAJfQogCWxlbiA9IHNpemVvZigoKHN0cnVjdCBwZmxvZ2hkciAqKTApLT5pZm5hbWUpOwogCW9mZiA9IG9mZnNldG9mKHN0cnVjdCBwZmxvZ2hkciwgaWZuYW1lKTsKIAlpZiAoc3RybGVuKGlmbmFtZSkgPj0gbGVuKSB7CiAJCWJwZl9lcnJvcihjc3RhdGUsICJpZm5hbWUgaW50ZXJmYWNlIG5hbWVzIGNhbiBvbmx5IGJlICVkIGNoYXJhY3RlcnMiLAogCQkgICAgbGVuLTEpOwotCQkvKiBOT1RSRUFDSEVEICovCisJCS8qTk9UUkVBQ0hFRCovCiAJfQotCWIwID0gZ2VuX2JjbXAoY3N0YXRlLCBPUl9MSU5LSERSLCBvZmYsIHN0cmxlbihpZm5hbWUpLCAoY29uc3QgdV9jaGFyICopaWZuYW1lKTsKKwliMCA9IGdlbl9iY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgb2ZmLCAodV9pbnQpc3RybGVuKGlmbmFtZSksCisJICAgIChjb25zdCB1X2NoYXIgKilpZm5hbWUpOwogCXJldHVybiAoYjApOwogfQogCkBAIC03ODU5LDE5ICs4NDE1LDI2IEBACiB7CiAJc3RydWN0IGJsb2NrICpiMDsKIAorCS8qCisJICogQ2F0Y2ggZXJyb3JzIHJlcG9ydGVkIGJ5IHVzIGFuZCByb3V0aW5lcyBiZWxvdyB1cywgYW5kIHJldHVybiBOVUxMCisJICogb24gYW4gZXJyb3IuCisJICovCisJaWYgKHNldGptcChjc3RhdGUtPnRvcF9jdHgpKQorCQlyZXR1cm4gKE5VTEwpOworCiAJaWYgKGNzdGF0ZS0+bGlua3R5cGUgIT0gRExUX1BGTE9HKSB7CiAJCWJwZl9lcnJvcihjc3RhdGUsICJydWxlc2V0IHN1cHBvcnRlZCBvbmx5IG9uIFBGIGxpbmt0eXBlIik7Ci0JCS8qIE5PVFJFQUNIRUQgKi8KKwkJLypOT1RSRUFDSEVEKi8KIAl9CiAKIAlpZiAoc3RybGVuKHJ1bGVzZXQpID49IHNpemVvZigoKHN0cnVjdCBwZmxvZ2hkciAqKTApLT5ydWxlc2V0KSkgewogCQlicGZfZXJyb3IoY3N0YXRlLCAicnVsZXNldCBuYW1lcyBjYW4gb25seSBiZSAlbGQgY2hhcmFjdGVycyIsCiAJCSAgICAobG9uZykoc2l6ZW9mKCgoc3RydWN0IHBmbG9naGRyICopMCktPnJ1bGVzZXQpIC0gMSkpOwotCQkvKiBOT1RSRUFDSEVEICovCisJCS8qTk9UUkVBQ0hFRCovCiAJfQogCiAJYjAgPSBnZW5fYmNtcChjc3RhdGUsIE9SX0xJTktIRFIsIG9mZnNldG9mKHN0cnVjdCBwZmxvZ2hkciwgcnVsZXNldCksCi0JICAgIHN0cmxlbihydWxlc2V0KSwgKGNvbnN0IHVfY2hhciAqKXJ1bGVzZXQpOworCSAgICAodV9pbnQpc3RybGVuKHJ1bGVzZXQpLCAoY29uc3QgdV9jaGFyICopcnVsZXNldCk7CiAJcmV0dXJuIChiMCk7CiB9CiAKQEAgLTc4ODEsMTMgKzg0NDQsMjAgQEAKIHsKIAlzdHJ1Y3QgYmxvY2sgKmIwOwogCisJLyoKKwkgKiBDYXRjaCBlcnJvcnMgcmVwb3J0ZWQgYnkgdXMgYW5kIHJvdXRpbmVzIGJlbG93IHVzLCBhbmQgcmV0dXJuIE5VTEwKKwkgKiBvbiBhbiBlcnJvci4KKwkgKi8KKwlpZiAoc2V0am1wKGNzdGF0ZS0+dG9wX2N0eCkpCisJCXJldHVybiAoTlVMTCk7CisKIAlpZiAoY3N0YXRlLT5saW5rdHlwZSAhPSBETFRfUEZMT0cpIHsKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgInJuciBzdXBwb3J0ZWQgb25seSBvbiBQRiBsaW5rdHlwZSIpOwotCQkvKiBOT1RSRUFDSEVEICovCisJCS8qTk9UUkVBQ0hFRCovCiAJfQogCiAJYjAgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgb2Zmc2V0b2Yoc3RydWN0IHBmbG9naGRyLCBydWxlbnIpLCBCUEZfVywKLQkJIChicGZfaW50MzIpcm5yKTsKKwkJIChicGZfdV9pbnQzMilybnIpOwogCXJldHVybiAoYjApOwogfQogCkBAIC03ODk3LDEzICs4NDY3LDIwIEBACiB7CiAJc3RydWN0IGJsb2NrICpiMDsKIAorCS8qCisJICogQ2F0Y2ggZXJyb3JzIHJlcG9ydGVkIGJ5IHVzIGFuZCByb3V0aW5lcyBiZWxvdyB1cywgYW5kIHJldHVybiBOVUxMCisJICogb24gYW4gZXJyb3IuCisJICovCisJaWYgKHNldGptcChjc3RhdGUtPnRvcF9jdHgpKQorCQlyZXR1cm4gKE5VTEwpOworCiAJaWYgKGNzdGF0ZS0+bGlua3R5cGUgIT0gRExUX1BGTE9HKSB7CiAJCWJwZl9lcnJvcihjc3RhdGUsICJzcm5yIHN1cHBvcnRlZCBvbmx5IG9uIFBGIGxpbmt0eXBlIik7Ci0JCS8qIE5PVFJFQUNIRUQgKi8KKwkJLypOT1RSRUFDSEVEKi8KIAl9CiAKIAliMCA9IGdlbl9jbXAoY3N0YXRlLCBPUl9MSU5LSERSLCBvZmZzZXRvZihzdHJ1Y3QgcGZsb2doZHIsIHN1YnJ1bGVuciksIEJQRl9XLAotCSAgICAoYnBmX2ludDMyKXNybnIpOworCSAgICAoYnBmX3VfaW50MzIpc3Jucik7CiAJcmV0dXJuIChiMCk7CiB9CiAKQEAgLTc5MTMsMTMgKzg0OTAsMjAgQEAKIHsKIAlzdHJ1Y3QgYmxvY2sgKmIwOwogCisJLyoKKwkgKiBDYXRjaCBlcnJvcnMgcmVwb3J0ZWQgYnkgdXMgYW5kIHJvdXRpbmVzIGJlbG93IHVzLCBhbmQgcmV0dXJuIE5VTEwKKwkgKiBvbiBhbiBlcnJvci4KKwkgKi8KKwlpZiAoc2V0am1wKGNzdGF0ZS0+dG9wX2N0eCkpCisJCXJldHVybiAoTlVMTCk7CisKIAlpZiAoY3N0YXRlLT5saW5rdHlwZSAhPSBETFRfUEZMT0cpIHsKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgInJlYXNvbiBzdXBwb3J0ZWQgb25seSBvbiBQRiBsaW5rdHlwZSIpOwotCQkvKiBOT1RSRUFDSEVEICovCisJCS8qTk9UUkVBQ0hFRCovCiAJfQogCiAJYjAgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgb2Zmc2V0b2Yoc3RydWN0IHBmbG9naGRyLCByZWFzb24pLCBCUEZfQiwKLQkgICAgKGJwZl9pbnQzMilyZWFzb24pOworCSAgICAoYnBmX3VfaW50MzIpcmVhc29uKTsKIAlyZXR1cm4gKGIwKTsKIH0KIApAQCAtNzkyOSw4OCArODUxMywxNTAgQEAKIHsKIAlzdHJ1Y3QgYmxvY2sgKmIwOwogCisJLyoKKwkgKiBDYXRjaCBlcnJvcnMgcmVwb3J0ZWQgYnkgdXMgYW5kIHJvdXRpbmVzIGJlbG93IHVzLCBhbmQgcmV0dXJuIE5VTEwKKwkgKiBvbiBhbiBlcnJvci4KKwkgKi8KKwlpZiAoc2V0am1wKGNzdGF0ZS0+dG9wX2N0eCkpCisJCXJldHVybiAoTlVMTCk7CisKIAlpZiAoY3N0YXRlLT5saW5rdHlwZSAhPSBETFRfUEZMT0cpIHsKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgImFjdGlvbiBzdXBwb3J0ZWQgb25seSBvbiBQRiBsaW5rdHlwZSIpOwotCQkvKiBOT1RSRUFDSEVEICovCisJCS8qTk9UUkVBQ0hFRCovCiAJfQogCiAJYjAgPSBnZW5fY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgb2Zmc2V0b2Yoc3RydWN0IHBmbG9naGRyLCBhY3Rpb24pLCBCUEZfQiwKLQkgICAgKGJwZl9pbnQzMilhY3Rpb24pOworCSAgICAoYnBmX3VfaW50MzIpYWN0aW9uKTsKIAlyZXR1cm4gKGIwKTsKIH0KICNlbHNlIC8qICFIQVZFX05FVF9QRlZBUl9IICovCiBzdHJ1Y3QgYmxvY2sgKgogZ2VuX3BmX2lmbmFtZShjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGNvbnN0IGNoYXIgKmlmbmFtZSBfVV8pCiB7CisJLyoKKwkgKiBDYXRjaCBlcnJvcnMgcmVwb3J0ZWQgYnkgdXMgYW5kIHJvdXRpbmVzIGJlbG93IHVzLCBhbmQgcmV0dXJuIE5VTEwKKwkgKiBvbiBhbiBlcnJvci4KKwkgKi8KKwlpZiAoc2V0am1wKGNzdGF0ZS0+dG9wX2N0eCkpCisJCXJldHVybiAoTlVMTCk7CisKIAlicGZfZXJyb3IoY3N0YXRlLCAibGlicGNhcCB3YXMgY29tcGlsZWQgd2l0aG91dCBwZiBzdXBwb3J0Iik7Ci0JLyogTk9UUkVBQ0hFRCAqLworCS8qTk9UUkVBQ0hFRCovCiB9CiAKIHN0cnVjdCBibG9jayAqCiBnZW5fcGZfcnVsZXNldChjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGNoYXIgKnJ1bGVzZXQgX1VfKQogeworCS8qCisJICogQ2F0Y2ggZXJyb3JzIHJlcG9ydGVkIGJ5IHVzIGFuZCByb3V0aW5lcyBiZWxvdyB1cywgYW5kIHJldHVybiBOVUxMCisJICogb24gYW4gZXJyb3IuCisJICovCisJaWYgKHNldGptcChjc3RhdGUtPnRvcF9jdHgpKQorCQlyZXR1cm4gKE5VTEwpOworCiAJYnBmX2Vycm9yKGNzdGF0ZSwgImxpYnBjYXAgd2FzIGNvbXBpbGVkIG9uIGEgbWFjaGluZSB3aXRob3V0IHBmIHN1cHBvcnQiKTsKLQkvKiBOT1RSRUFDSEVEICovCisJLypOT1RSRUFDSEVEKi8KIH0KIAogc3RydWN0IGJsb2NrICoKIGdlbl9wZl9ybnIoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgcm5yIF9VXykKIHsKKwkvKgorCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSB1cyBhbmQgcm91dGluZXMgYmVsb3cgdXMsIGFuZCByZXR1cm4gTlVMTAorCSAqIG9uIGFuIGVycm9yLgorCSAqLworCWlmIChzZXRqbXAoY3N0YXRlLT50b3BfY3R4KSkKKwkJcmV0dXJuIChOVUxMKTsKKwogCWJwZl9lcnJvcihjc3RhdGUsICJsaWJwY2FwIHdhcyBjb21waWxlZCBvbiBhIG1hY2hpbmUgd2l0aG91dCBwZiBzdXBwb3J0Iik7Ci0JLyogTk9UUkVBQ0hFRCAqLworCS8qTk9UUkVBQ0hFRCovCiB9CiAKIHN0cnVjdCBibG9jayAqCiBnZW5fcGZfc3Jucihjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBzcm5yIF9VXykKIHsKKwkvKgorCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSB1cyBhbmQgcm91dGluZXMgYmVsb3cgdXMsIGFuZCByZXR1cm4gTlVMTAorCSAqIG9uIGFuIGVycm9yLgorCSAqLworCWlmIChzZXRqbXAoY3N0YXRlLT50b3BfY3R4KSkKKwkJcmV0dXJuIChOVUxMKTsKKwogCWJwZl9lcnJvcihjc3RhdGUsICJsaWJwY2FwIHdhcyBjb21waWxlZCBvbiBhIG1hY2hpbmUgd2l0aG91dCBwZiBzdXBwb3J0Iik7Ci0JLyogTk9UUkVBQ0hFRCAqLworCS8qTk9UUkVBQ0hFRCovCiB9CiAKIHN0cnVjdCBibG9jayAqCiBnZW5fcGZfcmVhc29uKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgaW50IHJlYXNvbiBfVV8pCiB7CisJLyoKKwkgKiBDYXRjaCBlcnJvcnMgcmVwb3J0ZWQgYnkgdXMgYW5kIHJvdXRpbmVzIGJlbG93IHVzLCBhbmQgcmV0dXJuIE5VTEwKKwkgKiBvbiBhbiBlcnJvci4KKwkgKi8KKwlpZiAoc2V0am1wKGNzdGF0ZS0+dG9wX2N0eCkpCisJCXJldHVybiAoTlVMTCk7CisKIAlicGZfZXJyb3IoY3N0YXRlLCAibGlicGNhcCB3YXMgY29tcGlsZWQgb24gYSBtYWNoaW5lIHdpdGhvdXQgcGYgc3VwcG9ydCIpOwotCS8qIE5PVFJFQUNIRUQgKi8KKwkvKk5PVFJFQUNIRUQqLwogfQogCiBzdHJ1Y3QgYmxvY2sgKgogZ2VuX3BmX2FjdGlvbihjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBhY3Rpb24gX1VfKQogeworCS8qCisJICogQ2F0Y2ggZXJyb3JzIHJlcG9ydGVkIGJ5IHVzIGFuZCByb3V0aW5lcyBiZWxvdyB1cywgYW5kIHJldHVybiBOVUxMCisJICogb24gYW4gZXJyb3IuCisJICovCisJaWYgKHNldGptcChjc3RhdGUtPnRvcF9jdHgpKQorCQlyZXR1cm4gKE5VTEwpOworCiAJYnBmX2Vycm9yKGNzdGF0ZSwgImxpYnBjYXAgd2FzIGNvbXBpbGVkIG9uIGEgbWFjaGluZSB3aXRob3V0IHBmIHN1cHBvcnQiKTsKLQkvKiBOT1RSRUFDSEVEICovCisJLypOT1RSRUFDSEVEKi8KIH0KICNlbmRpZiAvKiBIQVZFX05FVF9QRlZBUl9IICovCiAKIC8qIElFRUUgODAyLjExIHdpcmVsZXNzIGhlYWRlciAqLwogc3RydWN0IGJsb2NrICoKLWdlbl9wODAyMTFfdHlwZShjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCB0eXBlLCBpbnQgbWFzaykKK2dlbl9wODAyMTFfdHlwZShjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGJwZl91X2ludDMyIHR5cGUsIGJwZl91X2ludDMyIG1hc2spCiB7CiAJc3RydWN0IGJsb2NrICpiMDsKIAorCS8qCisJICogQ2F0Y2ggZXJyb3JzIHJlcG9ydGVkIGJ5IHVzIGFuZCByb3V0aW5lcyBiZWxvdyB1cywgYW5kIHJldHVybiBOVUxMCisJICogb24gYW4gZXJyb3IuCisJICovCisJaWYgKHNldGptcChjc3RhdGUtPnRvcF9jdHgpKQorCQlyZXR1cm4gKE5VTEwpOworCiAJc3dpdGNoIChjc3RhdGUtPmxpbmt0eXBlKSB7CiAKIAljYXNlIERMVF9JRUVFODAyXzExOgogCWNhc2UgRExUX1BSSVNNX0hFQURFUjoKIAljYXNlIERMVF9JRUVFODAyXzExX1JBRElPX0FWUzoKIAljYXNlIERMVF9JRUVFODAyXzExX1JBRElPOgotCQliMCA9IGdlbl9tY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgMCwgQlBGX0IsIChicGZfaW50MzIpdHlwZSwKLQkJICAgIChicGZfaW50MzIpbWFzayk7CisJCWIwID0gZ2VuX21jbXAoY3N0YXRlLCBPUl9MSU5LSERSLCAwLCBCUEZfQiwgdHlwZSwgbWFzayk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgIjgwMi4xMSBsaW5rLWxheWVyIHR5cGVzIHN1cHBvcnRlZCBvbmx5IG9uIDgwMi4xMSIpOwotCQkvKiBOT1RSRUFDSEVEICovCisJCS8qTk9UUkVBQ0hFRCovCiAJfQogCiAJcmV0dXJuIChiMCk7CiB9CiAKIHN0cnVjdCBibG9jayAqCi1nZW5fcDgwMjExX2ZjZGlyKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgaW50IGZjZGlyKQorZ2VuX3A4MDIxMV9mY2Rpcihjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGJwZl91X2ludDMyIGZjZGlyKQogewogCXN0cnVjdCBibG9jayAqYjA7CiAKKwkvKgorCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSB1cyBhbmQgcm91dGluZXMgYmVsb3cgdXMsIGFuZCByZXR1cm4gTlVMTAorCSAqIG9uIGFuIGVycm9yLgorCSAqLworCWlmIChzZXRqbXAoY3N0YXRlLT50b3BfY3R4KSkKKwkJcmV0dXJuIChOVUxMKTsKKwogCXN3aXRjaCAoY3N0YXRlLT5saW5rdHlwZSkgewogCiAJY2FzZSBETFRfSUVFRTgwMl8xMToKQEAgLTgwMjEsMzQgKzg2NjcsNDcgQEAKIAogCWRlZmF1bHQ6CiAJCWJwZl9lcnJvcihjc3RhdGUsICJmcmFtZSBkaXJlY3Rpb24gc3VwcG9ydGVkIG9ubHkgd2l0aCA4MDIuMTEgaGVhZGVycyIpOwotCQkvKiBOT1RSRUFDSEVEICovCisJCS8qTk9UUkVBQ0hFRCovCiAJfQogCi0JYjAgPSBnZW5fbWNtcChjc3RhdGUsIE9SX0xJTktIRFIsIDEsIEJQRl9CLCAoYnBmX2ludDMyKWZjZGlyLAotCQkoYnBmX3VfaW50MzIpSUVFRTgwMjExX0ZDMV9ESVJfTUFTSyk7CisJYjAgPSBnZW5fbWNtcChjc3RhdGUsIE9SX0xJTktIRFIsIDEsIEJQRl9CLCBmY2RpciwKKwkgICAgSUVFRTgwMjExX0ZDMV9ESVJfTUFTSyk7CiAKIAlyZXR1cm4gKGIwKTsKIH0KIAogc3RydWN0IGJsb2NrICoKLWdlbl9hY29kZShjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGNvbnN0IHVfY2hhciAqZWFkZHIsIHN0cnVjdCBxdWFsIHEpCitnZW5fYWNvZGUoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBjb25zdCBjaGFyICpzLCBzdHJ1Y3QgcXVhbCBxKQogeworCXN0cnVjdCBibG9jayAqYjsKKworCS8qCisJICogQ2F0Y2ggZXJyb3JzIHJlcG9ydGVkIGJ5IHVzIGFuZCByb3V0aW5lcyBiZWxvdyB1cywgYW5kIHJldHVybiBOVUxMCisJICogb24gYW4gZXJyb3IuCisJICovCisJaWYgKHNldGptcChjc3RhdGUtPnRvcF9jdHgpKQorCQlyZXR1cm4gKE5VTEwpOworCiAJc3dpdGNoIChjc3RhdGUtPmxpbmt0eXBlKSB7CiAKIAljYXNlIERMVF9BUkNORVQ6CiAJY2FzZSBETFRfQVJDTkVUX0xJTlVYOgogCQlpZiAoKHEuYWRkciA9PSBRX0hPU1QgfHwgcS5hZGRyID09IFFfREVGQVVMVCkgJiYKLQkJICAgIHEucHJvdG8gPT0gUV9MSU5LKQotCQkJcmV0dXJuIChnZW5fYWhvc3RvcChjc3RhdGUsIGVhZGRyLCAoaW50KXEuZGlyKSk7Ci0JCWVsc2UgeworCQkgICAgcS5wcm90byA9PSBRX0xJTkspIHsKKwkJCWNzdGF0ZS0+ZSA9IHBjYXBfZXRoZXJfYXRvbihzKTsKKwkJCWlmIChjc3RhdGUtPmUgPT0gTlVMTCkKKwkJCQlicGZfZXJyb3IoY3N0YXRlLCAibWFsbG9jIik7CisJCQliID0gZ2VuX2Fob3N0b3AoY3N0YXRlLCBjc3RhdGUtPmUsIChpbnQpcS5kaXIpOworCQkJZnJlZShjc3RhdGUtPmUpOworCQkJY3N0YXRlLT5lID0gTlVMTDsKKwkJCXJldHVybiAoYik7CisJCX0gZWxzZQogCQkJYnBmX2Vycm9yKGNzdGF0ZSwgIkFSQ25ldCBhZGRyZXNzIHVzZWQgaW4gbm9uLWFyYyBleHByZXNzaW9uIik7Ci0JCQkvKiBOT1RSRUFDSEVEICovCi0JCX0KLQkJYnJlYWs7CisgCQkvKk5PVFJFQUNIRUQqLwogCiAJZGVmYXVsdDoKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgImFpZCBzdXBwb3J0ZWQgb25seSBvbiBBUkNuZXQiKTsKLQkJLyogTk9UUkVBQ0hFRCAqLworCQkvKk5PVFJFQUNIRUQqLwogCX0KIH0KIApAQCAtODA4MCwzMCArODczOSwzMCBAQAogCiAJY2FzZSBRX0FERFIxOgogCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2FkZHIxJyBhbmQgJ2FkZHJlc3MxJyBhcmUgb25seSBzdXBwb3J0ZWQgb24gODAyLjExIik7Ci0JCWJyZWFrOworIAkJLypOT1RSRUFDSEVEKi8KIAogCWNhc2UgUV9BRERSMjoKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgIidhZGRyMicgYW5kICdhZGRyZXNzMicgYXJlIG9ubHkgc3VwcG9ydGVkIG9uIDgwMi4xMSIpOwotCQlicmVhazsKKyAJCS8qTk9UUkVBQ0hFRCovCiAKIAljYXNlIFFfQUREUjM6CiAJCWJwZl9lcnJvcihjc3RhdGUsICInYWRkcjMnIGFuZCAnYWRkcmVzczMnIGFyZSBvbmx5IHN1cHBvcnRlZCBvbiA4MDIuMTEiKTsKLQkJYnJlYWs7CisgCQkvKk5PVFJFQUNIRUQqLwogCiAJY2FzZSBRX0FERFI0OgogCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2FkZHI0JyBhbmQgJ2FkZHJlc3M0JyBhcmUgb25seSBzdXBwb3J0ZWQgb24gODAyLjExIik7Ci0JCWJyZWFrOworIAkJLypOT1RSRUFDSEVEKi8KIAogCWNhc2UgUV9SQToKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgIidyYScgaXMgb25seSBzdXBwb3J0ZWQgb24gODAyLjExIik7Ci0JCWJyZWFrOworIAkJLypOT1RSRUFDSEVEKi8KIAogCWNhc2UgUV9UQToKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgIid0YScgaXMgb25seSBzdXBwb3J0ZWQgb24gODAyLjExIik7Ci0JCWJyZWFrOworIAkJLypOT1RSRUFDSEVEKi8KIAl9CiAJYWJvcnQoKTsKLQkvKiBOT1RSRUFDSEVEICovCisJLypOT1RSRUFDSEVEKi8KIH0KIAogc3RhdGljIHN0cnVjdCBibG9jayAqCkBAIC04MTIzLDE5ICs4NzgyLDI0IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYmxvY2sgKgotZ2VuX3ZsYW5fdmlkX3Rlc3QoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgdmxhbl9udW0pCitnZW5fdmxhbl92aWRfdGVzdChjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGJwZl91X2ludDMyIHZsYW5fbnVtKQogewotCXJldHVybiBnZW5fbWNtcChjc3RhdGUsIE9SX0xJTktQTCwgMCwgQlBGX0gsIChicGZfaW50MzIpdmxhbl9udW0sIDB4MGZmZik7CisJaWYgKHZsYW5fbnVtID4gMHgwZmZmKSB7CisJCWJwZl9lcnJvcihjc3RhdGUsICJWTEFOIHRhZyAldSBncmVhdGVyIHRoYW4gbWF4aW11bSAldSIsCisJCSAgICB2bGFuX251bSwgMHgwZmZmKTsKKwl9CisJcmV0dXJuIGdlbl9tY21wKGNzdGF0ZSwgT1JfTElOS1BMLCAwLCBCUEZfSCwgdmxhbl9udW0sIDB4MGZmZik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYmxvY2sgKgotZ2VuX3ZsYW5fbm9fYnBmX2V4dGVuc2lvbnMoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgdmxhbl9udW0pCitnZW5fdmxhbl9ub19icGZfZXh0ZW5zaW9ucyhjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGJwZl91X2ludDMyIHZsYW5fbnVtLAorICAgIGludCBoYXNfdmxhbl90YWcpCiB7CiAJc3RydWN0IGJsb2NrICpiMCwgKmIxOwogCiAJYjAgPSBnZW5fdmxhbl90cGlkX3Rlc3QoY3N0YXRlKTsKIAotCWlmICh2bGFuX251bSA+PSAwKSB7CisJaWYgKGhhc192bGFuX3RhZykgewogCQliMSA9IGdlbl92bGFuX3ZpZF90ZXN0KGNzdGF0ZSwgdmxhbl9udW0pOwogCQlnZW5fYW5kKGIwLCBiMSk7CiAJCWIwID0gYjE7CkBAIC04MTU0LDcgKzg4MTgsOCBAQAogI2lmIGRlZmluZWQoU0tGX0FEX1ZMQU5fVEFHX1BSRVNFTlQpCiAvKiBhZGQgdiB0byB2YXJpYWJsZSBwYXJ0IG9mIG9mZiAqLwogc3RhdGljIHZvaWQKLWdlbl92bGFuX3Zsb2Zmc2V0X2FkZChjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGJwZl9hYnNfb2Zmc2V0ICpvZmYsIGludCB2LCBzdHJ1Y3Qgc2xpc3QgKnMpCitnZW5fdmxhbl92bG9mZnNldF9hZGQoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBicGZfYWJzX29mZnNldCAqb2ZmLAorICAgIGJwZl91X2ludDMyIHYsIHN0cnVjdCBzbGlzdCAqcykKIHsKIAlzdHJ1Y3Qgc2xpc3QgKnMyOwogCkBAIC04MjE4LDEyICs4ODgzLDE1IEBACiAJc2FwcGVuZChzLCBzMik7CiAJc2plcS0+cy5qdCA9IHMyOwogCi0JLyoganVtcCB0byB0aGUgdGVzdCBpbiBiX3ZpZCAoYnlwYXNzIGxvYWRpbmcgVklEIGZyb20gcGFja2V0IGRhdGEpICovCisJLyogSnVtcCB0byB0aGUgdGVzdCBpbiBiX3ZpZC4gV2UgbmVlZCB0byBqdW1wIG9uZSBpbnN0cnVjdGlvbiBiZWZvcmUKKwkgKiB0aGUgZW5kIG9mIHRoZSBiX3ZpZCBibG9jayBzbyB0aGF0IHdlIG9ubHkgc2tpcCBsb2FkaW5nIHRoZSBUQ0kKKwkgKiBmcm9tIHBhY2tldCBkYXRhIGFuZCBub3QgdGhlICdhbmQnIGluc3RydWN0aW9uIGV4dHJhY3RnaW5nIFZJRC4KKwkgKi8KIAljbnQgPSAwOwogCWZvciAoczIgPSBiX3ZpZC0+c3RtdHM7IHMyOyBzMiA9IHMyLT5uZXh0KQogCQljbnQrKzsKIAlzMiA9IG5ld19zdG10KGNzdGF0ZSwgSk1QKEJQRl9KQSkpOwotCXMyLT5zLmsgPSBjbnQ7CisJczItPnMuayA9IGNudCAtIDE7CiAJc2FwcGVuZChzLCBzMik7CiAKIAkvKiBpbnNlcnQgb3VyIHN0YXRlbWVudHMgYXQgdGhlIGJlZ2lubmluZyBvZiBiX3ZpZCAqLwpAQCAtODI0MCw3ICs4OTA4LDggQEAKICAqIHVwZGF0ZSB2YXJpYWJsZSBwYXJ0IG9mIHRoZSBvZmZzZXRzCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYmxvY2sgKgotZ2VuX3ZsYW5fYnBmX2V4dGVuc2lvbnMoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgdmxhbl9udW0pCitnZW5fdmxhbl9icGZfZXh0ZW5zaW9ucyhjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGJwZl91X2ludDMyIHZsYW5fbnVtLAorICAgIGludCBoYXNfdmxhbl90YWcpCiB7CiAgICAgICAgIHN0cnVjdCBibG9jayAqYjAsICpiX3RwaWQsICpiX3ZpZCA9IE5VTEw7CiAgICAgICAgIHN0cnVjdCBzbGlzdCAqczsKQEAgLTgyNTYsNyArODkyNSw3IEBACiAKIAkvKgogCSAqIFRoaXMgaXMgdHJpY2t5LiBXZSBuZWVkIHRvIGluc2VydCB0aGUgc3RhdGVtZW50cyB1cGRhdGluZyB2YXJpYWJsZQotCSAqIHBhcnRzIG9mIG9mZnNldHMgYmVmb3JlIHRoZSB0aGUgdHJhZGl0aW9uYWwgVFBJRCBhbmQgVklEIHRlc3RzIHNvCisJICogcGFydHMgb2Ygb2Zmc2V0cyBiZWZvcmUgdGhlIHRyYWRpdGlvbmFsIFRQSUQgYW5kIFZJRCB0ZXN0cyBzbwogCSAqIHRoYXQgdGhleSBhcmUgY2FsbGVkIHdoZW5ldmVyIFNLRl9BRF9WTEFOX1RBR19QUkVTRU5UIGZhaWxzIGJ1dAogCSAqIHdlIGRvIG5vdCB3YW50IHRoaXMgdXBkYXRlIHRvIGFmZmVjdCB0aG9zZSBjaGVja3MuIFRoYXQncyB3aHkgd2UKIAkgKiBnZW5lcmF0ZSBib3RoIHRlc3QgYmxvY2tzIGZpcnN0IGFuZCBpbnNlcnQgdGhlIHN0YXRlbWVudHMgdXBkYXRpbmcKQEAgLTgyNjUsMTQgKzg5MzQsMTQgQEAKIAkgKiBmdW5jdGlvbiBidXQgZ2VuX3ZsYW5fYnBmX2V4dGVuc2lvbnMoKSBpc24ndCBjYWxsZWQgaW4gdGhhdCBjYXNlLgogCSAqLwogCWJfdHBpZCA9IGdlbl92bGFuX3RwaWRfdGVzdChjc3RhdGUpOwotCWlmICh2bGFuX251bSA+PSAwKQorCWlmIChoYXNfdmxhbl90YWcpCiAJCWJfdmlkID0gZ2VuX3ZsYW5fdmlkX3Rlc3QoY3N0YXRlLCB2bGFuX251bSk7CiAKIAlnZW5fdmxhbl9wYXRjaF90cGlkX3Rlc3QoY3N0YXRlLCBiX3RwaWQpOwogCWdlbl9vcihiMCwgYl90cGlkKTsKIAliMCA9IGJfdHBpZDsKIAotCWlmICh2bGFuX251bSA+PSAwKSB7CisJaWYgKGhhc192bGFuX3RhZykgewogCQlnZW5fdmxhbl9wYXRjaF92aWRfdGVzdChjc3RhdGUsIGJfdmlkKTsKIAkJZ2VuX2FuZChiMCwgYl92aWQpOwogCQliMCA9IGJfdmlkOwpAQCAtODI4NiwxMCArODk1NSwxNyBAQAogICogc3VwcG9ydCBJRUVFIDgwMi4xUSBWTEFOIHRydW5rIG92ZXIgZXRoZXJuZXQKICAqLwogc3RydWN0IGJsb2NrICoKLWdlbl92bGFuKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgaW50IHZsYW5fbnVtKQorZ2VuX3ZsYW4oY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBicGZfdV9pbnQzMiB2bGFuX251bSwgaW50IGhhc192bGFuX3RhZykKIHsKIAlzdHJ1Y3QJYmxvY2sJKmIwOwogCisJLyoKKwkgKiBDYXRjaCBlcnJvcnMgcmVwb3J0ZWQgYnkgdXMgYW5kIHJvdXRpbmVzIGJlbG93IHVzLCBhbmQgcmV0dXJuIE5VTEwKKwkgKiBvbiBhbiBlcnJvci4KKwkgKi8KKwlpZiAoc2V0am1wKGNzdGF0ZS0+dG9wX2N0eCkpCisJCXJldHVybiAoTlVMTCk7CisKIAkvKiBjYW4ndCBjaGVjayBmb3IgVkxBTi1lbmNhcHN1bGF0ZWQgcGFja2V0cyBpbnNpZGUgTVBMUyAqLwogCWlmIChjc3RhdGUtPmxhYmVsX3N0YWNrX2RlcHRoID4gMCkKIAkJYnBmX2Vycm9yKGNzdGF0ZSwgIm5vIFZMQU4gbWF0Y2ggYWZ0ZXIgTVBMUyIpOwpAQCAtODM0MCwyNCArOTAxNiwyNyBAQAogCQkJICogRG8gd2UgbmVlZCBzcGVjaWFsIFZMQU4gaGFuZGxpbmc/CiAJCQkgKi8KIAkJCWlmIChjc3RhdGUtPmJwZl9wY2FwLT5icGZfY29kZWdlbl9mbGFncyAmIEJQRl9TUEVDSUFMX1ZMQU5fSEFORExJTkcpCi0JCQkJYjAgPSBnZW5fdmxhbl9icGZfZXh0ZW5zaW9ucyhjc3RhdGUsIHZsYW5fbnVtKTsKKwkJCQliMCA9IGdlbl92bGFuX2JwZl9leHRlbnNpb25zKGNzdGF0ZSwgdmxhbl9udW0sCisJCQkJICAgIGhhc192bGFuX3RhZyk7CiAJCQllbHNlCi0JCQkJYjAgPSBnZW5fdmxhbl9ub19icGZfZXh0ZW5zaW9ucyhjc3RhdGUsIHZsYW5fbnVtKTsKKwkJCQliMCA9IGdlbl92bGFuX25vX2JwZl9leHRlbnNpb25zKGNzdGF0ZSwKKwkJCQkgICAgdmxhbl9udW0sIGhhc192bGFuX3RhZyk7CiAJCX0gZWxzZQogI2VuZGlmCi0JCQliMCA9IGdlbl92bGFuX25vX2JwZl9leHRlbnNpb25zKGNzdGF0ZSwgdmxhbl9udW0pOworCQkJYjAgPSBnZW5fdmxhbl9ub19icGZfZXh0ZW5zaW9ucyhjc3RhdGUsIHZsYW5fbnVtLAorCQkJICAgIGhhc192bGFuX3RhZyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKIAljYXNlIERMVF9JRUVFODAyXzExOgogCWNhc2UgRExUX1BSSVNNX0hFQURFUjoKIAljYXNlIERMVF9JRUVFODAyXzExX1JBRElPX0FWUzoKIAljYXNlIERMVF9JRUVFODAyXzExX1JBRElPOgotCQliMCA9IGdlbl92bGFuX25vX2JwZl9leHRlbnNpb25zKGNzdGF0ZSwgdmxhbl9udW0pOworCQliMCA9IGdlbl92bGFuX25vX2JwZl9leHRlbnNpb25zKGNzdGF0ZSwgdmxhbl9udW0sIGhhc192bGFuX3RhZyk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJYnBmX2Vycm9yKGNzdGF0ZSwgIm5vIFZMQU4gc3VwcG9ydCBmb3IgZGF0YSBsaW5rIHR5cGUgJWQiLAotCQkgICAgICBjc3RhdGUtPmxpbmt0eXBlKTsKKwkJYnBmX2Vycm9yKGNzdGF0ZSwgIm5vIFZMQU4gc3VwcG9ydCBmb3IgJXMiLAorCQkgICAgICBwY2FwX2RhdGFsaW5rX3ZhbF90b19kZXNjcmlwdGlvbl9vcl9kbHQoY3N0YXRlLT5saW5rdHlwZSkpOwogCQkvKk5PVFJFQUNIRUQqLwogCX0KIApAQCAtODM2OCwxMiArOTA0NywyNSBAQAogCiAvKgogICogc3VwcG9ydCBmb3IgTVBMUworICoKKyAqIFRoZSBsYWJlbF9udW1fYXJnIGRhbmNlIGlzIHRvIGF2b2lkIGFubm95aW5nIHdoaW5pbmcgYnkgY29tcGlsZXJzIHRoYXQKKyAqIGxhYmVsX251bSBtaWdodCBiZSBjbG9iYmVyZWQgYnkgbG9uZ2ptcCAtIHllYWgsIGl0IG1pZ2h0LCBidXQgKldITyBDQVJFUyo/CisgKiBJdCdzIG5vdCAqdXNlZCogYWZ0ZXIgc2V0am1wIHJldHVybnMuCiAgKi8KIHN0cnVjdCBibG9jayAqCi1nZW5fbXBscyhjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBsYWJlbF9udW0pCitnZW5fbXBscyhjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGJwZl91X2ludDMyIGxhYmVsX251bV9hcmcsCisgICAgaW50IGhhc19sYWJlbF9udW0pCiB7CisJdm9sYXRpbGUgYnBmX3VfaW50MzIgbGFiZWxfbnVtID0gbGFiZWxfbnVtX2FyZzsKIAlzdHJ1Y3QJYmxvY2sJKmIwLCAqYjE7CiAKKwkvKgorCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSB1cyBhbmQgcm91dGluZXMgYmVsb3cgdXMsIGFuZCByZXR1cm4gTlVMTAorCSAqIG9uIGFuIGVycm9yLgorCSAqLworCWlmIChzZXRqbXAoY3N0YXRlLT50b3BfY3R4KSkKKwkJcmV0dXJuIChOVUxMKTsKKwogICAgICAgICBpZiAoY3N0YXRlLT5sYWJlbF9zdGFja19kZXB0aCA+IDApIHsKICAgICAgICAgICAgIC8qIGp1c3QgbWF0Y2ggdGhlIGJvdHRvbS1vZi1zdGFjayBiaXQgY2xlYXIgKi8KICAgICAgICAgICAgIGIwID0gZ2VuX21jbXAoY3N0YXRlLCBPUl9QUkVWTVBMU0hEUiwgMiwgQlBGX0IsIDAsIDB4MDEpOwpAQCAtODQwMCwxNyArOTA5MiwyMCBAQAogICAgICAgICAgICAgICAgICAgICAgKiBsZWF2ZSBpdCBmb3Igbm93ICovCiAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJwZl9lcnJvcihjc3RhdGUsICJubyBNUExTIHN1cHBvcnQgZm9yIGRhdGEgbGluayB0eXBlICVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY3N0YXRlLT5saW5rdHlwZSk7CisgICAgICAgICAgICAgICAgICAgIGJwZl9lcnJvcihjc3RhdGUsICJubyBNUExTIHN1cHBvcnQgZm9yICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGNhcF9kYXRhbGlua192YWxfdG9fZGVzY3JpcHRpb25fb3JfZGx0KGNzdGF0ZS0+bGlua3R5cGUpKTsKICAgICAgICAgICAgICAgICAgICAgLypOT1RSRUFDSEVEKi8KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogCS8qIElmIGEgc3BlY2lmaWMgTVBMUyBsYWJlbCBpcyByZXF1ZXN0ZWQsIGNoZWNrIGl0ICovCi0JaWYgKGxhYmVsX251bSA+PSAwKSB7CisJaWYgKGhhc19sYWJlbF9udW0pIHsKKwkJaWYgKGxhYmVsX251bSA+IDB4RkZGRkYpIHsKKwkJCWJwZl9lcnJvcihjc3RhdGUsICJNUExTIGxhYmVsICV1IGdyZWF0ZXIgdGhhbiBtYXhpbXVtICV1IiwKKwkJCSAgICBsYWJlbF9udW0sIDB4RkZGRkYpOworCQl9CiAJCWxhYmVsX251bSA9IGxhYmVsX251bSA8PCAxMjsgLyogbGFiZWwgaXMgc2hpZnRlZCAxMiBiaXRzIG9uIHRoZSB3aXJlICovCi0JCWIxID0gZ2VuX21jbXAoY3N0YXRlLCBPUl9MSU5LUEwsIDAsIEJQRl9XLCAoYnBmX2ludDMyKWxhYmVsX251bSwKKwkJYjEgPSBnZW5fbWNtcChjc3RhdGUsIE9SX0xJTktQTCwgMCwgQlBGX1csIGxhYmVsX251bSwKIAkJICAgIDB4ZmZmZmYwMDApOyAvKiBvbmx5IGNvbXBhcmUgdGhlIGZpcnN0IDIwIGJpdHMgKi8KIAkJZ2VuX2FuZChiMCwgYjEpOwogCQliMCA9IGIxOwpAQCAtODQ0MiwyNCArOTEzNyw0MSBAQAogc3RydWN0IGJsb2NrICoKIGdlbl9wcHBvZWQoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlKQogeworCS8qCisJICogQ2F0Y2ggZXJyb3JzIHJlcG9ydGVkIGJ5IHVzIGFuZCByb3V0aW5lcyBiZWxvdyB1cywgYW5kIHJldHVybiBOVUxMCisJICogb24gYW4gZXJyb3IuCisJICovCisJaWYgKHNldGptcChjc3RhdGUtPnRvcF9jdHgpKQorCQlyZXR1cm4gKE5VTEwpOworCiAJLyogY2hlY2sgZm9yIFBQUG9FIGRpc2NvdmVyeSAqLwotCXJldHVybiBnZW5fbGlua3R5cGUoY3N0YXRlLCAoYnBmX2ludDMyKUVUSEVSVFlQRV9QUFBPRUQpOworCXJldHVybiBnZW5fbGlua3R5cGUoY3N0YXRlLCBFVEhFUlRZUEVfUFBQT0VEKTsKIH0KIAogc3RydWN0IGJsb2NrICoKLWdlbl9wcHBvZXMoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgc2Vzc19udW0pCitnZW5fcHBwb2VzKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgYnBmX3VfaW50MzIgc2Vzc19udW0sIGludCBoYXNfc2Vzc19udW0pCiB7CiAJc3RydWN0IGJsb2NrICpiMCwgKmIxOwogCiAJLyoKKwkgKiBDYXRjaCBlcnJvcnMgcmVwb3J0ZWQgYnkgdXMgYW5kIHJvdXRpbmVzIGJlbG93IHVzLCBhbmQgcmV0dXJuIE5VTEwKKwkgKiBvbiBhbiBlcnJvci4KKwkgKi8KKwlpZiAoc2V0am1wKGNzdGF0ZS0+dG9wX2N0eCkpCisJCXJldHVybiAoTlVMTCk7CisKKwkvKgogCSAqIFRlc3QgYWdhaW5zdCB0aGUgUFBQb0Ugc2Vzc2lvbiBsaW5rLWxheWVyIHR5cGUuCiAJICovCi0JYjAgPSBnZW5fbGlua3R5cGUoY3N0YXRlLCAoYnBmX2ludDMyKUVUSEVSVFlQRV9QUFBPRVMpOworCWIwID0gZ2VuX2xpbmt0eXBlKGNzdGF0ZSwgRVRIRVJUWVBFX1BQUE9FUyk7CiAKIAkvKiBJZiBhIHNwZWNpZmljIHNlc3Npb24gaXMgcmVxdWVzdGVkLCBjaGVjayBQUFBvRSBzZXNzaW9uIGlkICovCi0JaWYgKHNlc3NfbnVtID49IDApIHsKLQkJYjEgPSBnZW5fbWNtcChjc3RhdGUsIE9SX0xJTktQTCwgMCwgQlBGX1csCi0JCSAgICAoYnBmX2ludDMyKXNlc3NfbnVtLCAweDAwMDBmZmZmKTsKKwlpZiAoaGFzX3Nlc3NfbnVtKSB7CisJCWlmIChzZXNzX251bSA+IDB4MDAwMGZmZmYpIHsKKwkJCWJwZl9lcnJvcihjc3RhdGUsICJQUFBvRSBzZXNzaW9uIG51bWJlciAldSBncmVhdGVyIHRoYW4gbWF4aW11bSAldSIsCisJCQkgICAgc2Vzc19udW0sIDB4MDAwMGZmZmYpOworCQl9CisJCWIxID0gZ2VuX21jbXAoY3N0YXRlLCBPUl9MSU5LUEwsIDAsIEJQRl9XLCBzZXNzX251bSwgMHgwMDAwZmZmZik7CiAJCWdlbl9hbmQoYjAsIGIxKTsKIAkJYjAgPSBiMTsKIAl9CkBAIC04NDY5LDI5ICs5MTgxLDggQEAKIAkgKiB0aGUgUFBQIHBhY2tldCwgYW5kIG5vdGUgdGhhdCB0aGlzIGlzIFBQUG9FIHJhdGhlciB0aGFuCiAJICogcmF3IFBQUC4KIAkgKgotCSAqIFhYWCAtIHRoaXMgaXMgYSBiaXQgb2YgYSBrbHVkZ2UuICBJZiB3ZSB3ZXJlIHRvIHNwbGl0IHRoZQotCSAqIGNvbXBpbGVyIGludG8gYSBwYXJzZXIgdGhhdCBwYXJzZXMgYW4gZXhwcmVzc2lvbiBhbmQKLQkgKiBnZW5lcmF0ZXMgYW4gZXhwcmVzc2lvbiB0cmVlLCBhbmQgYSBjb2RlIGdlbmVyYXRvciB0aGF0Ci0JICogdGFrZXMgYW4gZXhwcmVzc2lvbiB0cmVlICh3aGljaCBjb3VsZCBjb21lIGZyb20gb3VyCi0JICogcGFyc2VyIG9yIGZyb20gc29tZSBvdGhlciBwYXJzZXIpIGFuZCBnZW5lcmF0ZXMgQlBGIGNvZGUsCi0JICogd2UgY291bGQgcGVyaGFwcyBtYWtlIHRoZSBvZmZzZXRzIHBhcmFtZXRlcnMgb2Ygcm91dGluZXMKLQkgKiBhbmQsIGluIHRoZSBoYW5kbGVyIGZvciBhbiAiQU5EIiBub2RlLCBwYXNzIHRvIHN1Ym5vZGVzCi0JICogb3RoZXIgdGhhbiB0aGUgUFBQb0Ugbm9kZSB0aGUgYWRqdXN0ZWQgb2Zmc2V0cy4KLQkgKgotCSAqIFRoaXMgd291bGQgbWVhbiB0aGF0ICJwcHBvZXMiIHdvdWxkLCBpbnN0ZWFkIG9mIGNoYW5naW5nIHRoZQotCSAqIGJlaGF2aW9yIG9mICphbGwqIHRlc3RzIGFmdGVyIGl0LCBjaGFuZ2Ugb25seSB0aGUgYmVoYXZpb3IKLQkgKiBvZiB0ZXN0cyBBTkRlZCB3aXRoIGl0LiAgVGhhdCB3b3VsZCBjaGFuZ2UgdGhlIGRvY3VtZW50ZWQKLQkgKiBzZW1hbnRpY3Mgb2YgInBwcG9lcyIsIHdoaWNoIG1pZ2h0IGJyZWFrIHNvbWUgZXhwcmVzc2lvbnMuCi0JICogSG93ZXZlciwgaXQgd291bGQgbWVhbiB0aGF0ICIocHBwb2VzIGFuZCBpcCkgb3IgaXAiIHdvdWxkIGNoZWNrCi0JICogYm90aCBmb3IgVkxBTi1lbmNhcHN1bGF0ZWQgSVAgYW5kIElQLW92ZXItRXRoZXJuZXQsIHJhdGhlciB0aGFuCi0JICogY2hlY2tpbmcgb25seSBmb3IgVkxBTi1lbmNhcHN1bGF0ZWQgSVAsIHNvIHRoYXQgY291bGQgc3RpbGwKLQkgKiBiZSBjb25zaWRlcmVkIHdvcnRoIGRvaW5nOyBpdCB3b3VsZG4ndCBicmVhayBleHByZXNzaW9ucwotCSAqIHRoYXQgYXJlIG9mIHRoZSBmb3JtICJwcHBvZXMgYW5kIC4uLiIgd2hpY2ggSSBzdXNwZWN0IGFyZSB0aGUKLQkgKiBtb3N0IGNvbW1vbiBleHByZXNzaW9ucyBpbnZvbHZpbmcgInBwcG9lcyIuICAicHBwb2VzIG9yIC4uLiIKLQkgKiBkb2Vzbid0IG5lY2Vzc2FyaWx5IGRvIHdoYXQgdGhlIHVzZXIgd291bGQgcmVhbGx5IHdhbnQsIG5vdywKLQkgKiBhcyBhbGwgdGhlICJvciAuLi4iIHRlc3RzIHdvdWxkIGJlIGRvbmUgYXNzdW1pbmcgUFBQb0UsIGV2ZW4KLQkgKiB0aG91Z2ggdGhlICJvciIgY291bGQgYmUgdmlld2VkIGFzIG1lYW5pbmcgIm9yLCBpZiB0aGlzIGlzbid0Ci0JICogYSBQUFBvRSBwYWNrZXQuLi4iLgorCSAqIFhYWCAtIHRoaXMgaXMgYSBiaXQgb2YgYSBrbHVkZ2UuICBTZWUgdGhlIGNvbW1lbnRzIGluCisJICogZ2VuX3ZsYW4oKS4KIAkgKgogCSAqIFRoZSAibmV0d29yay1sYXllciIgcHJvdG9jb2wgaXMgUFBQb0UsIHdoaWNoIGhhcyBhIDYtYnl0ZQogCSAqIFBQUG9FIGhlYWRlciwgZm9sbG93ZWQgYnkgYSBQUFAgcGFja2V0LgpAQCAtODUyMCw4ICs5MjExLDggQEAKICAqIHNwZWNpZmllZC4gUGFyYW1ldGVyaXplZCB0byBoYW5kbGUgYm90aCBJUHY0IGFuZCBJUHY2LiAqLwogc3RhdGljIHN0cnVjdCBibG9jayAqCiBnZW5fZ2VuZXZlX2NoZWNrKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwKLSAgICBzdHJ1Y3QgYmxvY2sgKigqZ2VuX3BvcnRmbikoY29tcGlsZXJfc3RhdGVfdCAqLCBpbnQsIGludCwgaW50KSwKLSAgICBlbnVtIGVfb2ZmcmVsIG9mZnJlbCwgaW50IHZuaSkKKyAgICBzdHJ1Y3QgYmxvY2sgKigqZ2VuX3BvcnRmbikoY29tcGlsZXJfc3RhdGVfdCAqLCB1X2ludCwgaW50LCBpbnQpLAorICAgIGVudW0gZV9vZmZyZWwgb2ZmcmVsLCBicGZfdV9pbnQzMiB2bmksIGludCBoYXNfdm5pKQogewogCXN0cnVjdCBibG9jayAqYjAsICpiMTsKIApAQCAtODUzMCwxNCArOTIyMSwxNyBAQAogCS8qIENoZWNrIHRoYXQgd2UgYXJlIG9wZXJhdGluZyBvbiB2ZXJzaW9uIDAuIE90aGVyd2lzZSwgd2UKIAkgKiBjYW4ndCBkZWNvZGUgdGhlIHJlc3Qgb2YgdGhlIGZpZWxkcy4gVGhlIHZlcnNpb24gaXMgMiBiaXRzCiAJICogaW4gdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIEdlbmV2ZSBoZWFkZXIuICovCi0JYjEgPSBnZW5fbWNtcChjc3RhdGUsIG9mZnJlbCwgOCwgQlBGX0IsIChicGZfaW50MzIpMCwgMHhjMCk7CisJYjEgPSBnZW5fbWNtcChjc3RhdGUsIG9mZnJlbCwgOCwgQlBGX0IsIDAsIDB4YzApOwogCWdlbl9hbmQoYjAsIGIxKTsKIAliMCA9IGIxOwogCi0JaWYgKHZuaSA+PSAwKSB7CisJaWYgKGhhc192bmkpIHsKKwkJaWYgKHZuaSA+IDB4ZmZmZmZmKSB7CisJCQlicGZfZXJyb3IoY3N0YXRlLCAiR2VuZXZlIFZOSSAldSBncmVhdGVyIHRoYW4gbWF4aW11bSAldSIsCisJCQkgICAgdm5pLCAweGZmZmZmZik7CisJCX0KIAkJdm5pIDw8PSA4OyAvKiBWTkkgaXMgaW4gdGhlIHVwcGVyIDMgYnl0ZXMgKi8KLQkJYjEgPSBnZW5fbWNtcChjc3RhdGUsIG9mZnJlbCwgMTIsIEJQRl9XLCAoYnBmX2ludDMyKXZuaSwKLQkJCSAgICAgIDB4ZmZmZmZmMDApOworCQliMSA9IGdlbl9tY21wKGNzdGF0ZSwgb2ZmcmVsLCAxMiwgQlBGX1csIHZuaSwgMHhmZmZmZmYwMCk7CiAJCWdlbl9hbmQoYjAsIGIxKTsKIAkJYjAgPSBiMTsKIAl9CkBAIC04NTUxLDEyICs5MjQ1LDEyIEBACiAgKiAgIG5lZWRlZCkgaW50byByZWdpc3RlciBBIHRvIGJlIHVzZWQgbGF0ZXIgdG8gY29tcHV0ZQogICogICB0aGUgaW5uZXIgcGFja2V0IG9mZnNldHMuICovCiBzdGF0aWMgc3RydWN0IGJsb2NrICoKLWdlbl9nZW5ldmU0KGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgaW50IHZuaSkKK2dlbl9nZW5ldmU0KGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgYnBmX3VfaW50MzIgdm5pLCBpbnQgaGFzX3ZuaSkKIHsKIAlzdHJ1Y3QgYmxvY2sgKmIwLCAqYjE7CiAJc3RydWN0IHNsaXN0ICpzLCAqczE7CiAKLQliMCA9IGdlbl9nZW5ldmVfY2hlY2soY3N0YXRlLCBnZW5fcG9ydCwgT1JfVFJBTl9JUFY0LCB2bmkpOworCWIwID0gZ2VuX2dlbmV2ZV9jaGVjayhjc3RhdGUsIGdlbl9wb3J0LCBPUl9UUkFOX0lQVjQsIHZuaSwgaGFzX3ZuaSk7CiAKIAkvKiBMb2FkIHRoZSBJUCBoZWFkZXIgbGVuZ3RoIGludG8gQS4gKi8KIAlzID0gZ2VuX2xvYWR4X2lwaGRybGVuKGNzdGF0ZSk7CkBAIC04NTc3LDEyICs5MjcxLDEyIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYmxvY2sgKgotZ2VuX2dlbmV2ZTYoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgdm5pKQorZ2VuX2dlbmV2ZTYoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBicGZfdV9pbnQzMiB2bmksIGludCBoYXNfdm5pKQogewogCXN0cnVjdCBibG9jayAqYjAsICpiMTsKIAlzdHJ1Y3Qgc2xpc3QgKnMsICpzMTsKIAotCWIwID0gZ2VuX2dlbmV2ZV9jaGVjayhjc3RhdGUsIGdlbl9wb3J0NiwgT1JfVFJBTl9JUFY2LCB2bmkpOworCWIwID0gZ2VuX2dlbmV2ZV9jaGVjayhjc3RhdGUsIGdlbl9wb3J0NiwgT1JfVFJBTl9JUFY2LCB2bmksIGhhc192bmkpOwogCiAJLyogTG9hZCB0aGUgSVAgaGVhZGVyIGxlbmd0aC4gV2UgbmVlZCB0byBhY2NvdW50IGZvciBhCiAJICogdmFyaWFibGUgbGVuZ3RoIGxpbmsgcHJlZml4IGlmIHRoZXJlIGlzIG9uZS4gKi8KQEAgLTg3NTUsMTMgKzk0NDksMjAgQEAKIAogLyogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgYSBHZW5ldmUgcGFja2V0LiAqLwogc3RydWN0IGJsb2NrICoKLWdlbl9nZW5ldmUoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgdm5pKQorZ2VuX2dlbmV2ZShjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGJwZl91X2ludDMyIHZuaSwgaW50IGhhc192bmkpCiB7CiAJc3RydWN0IGJsb2NrICpiMCwgKmIxOwogCXN0cnVjdCBzbGlzdCAqczsKIAotCWIwID0gZ2VuX2dlbmV2ZTQoY3N0YXRlLCB2bmkpOwotCWIxID0gZ2VuX2dlbmV2ZTYoY3N0YXRlLCB2bmkpOworCS8qCisJICogQ2F0Y2ggZXJyb3JzIHJlcG9ydGVkIGJ5IHVzIGFuZCByb3V0aW5lcyBiZWxvdyB1cywgYW5kIHJldHVybiBOVUxMCisJICogb24gYW4gZXJyb3IuCisJICovCisJaWYgKHNldGptcChjc3RhdGUtPnRvcF9jdHgpKQorCQlyZXR1cm4gKE5VTEwpOworCisJYjAgPSBnZW5fZ2VuZXZlNChjc3RhdGUsIHZuaSwgaGFzX3ZuaSk7CisJYjEgPSBnZW5fZ2VuZXZlNihjc3RhdGUsIHZuaSwgaGFzX3ZuaSk7CiAKIAlnZW5fb3IoYjAsIGIxKTsKIAliMCA9IGIxOwpAQCAtODgxMSw5ICs5NTEyLDkgQEAKIAlyZXR1cm4gYjA7CiB9CiAKLXN0cnVjdCBibG9jayAqCi1nZW5fYXRtZmllbGRfY29kZShjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBhdG1maWVsZCwgYnBmX2ludDMyIGp2YWx1ZSwKLSAgICBicGZfdV9pbnQzMiBqdHlwZSwgaW50IHJldmVyc2UpCitzdGF0aWMgc3RydWN0IGJsb2NrICoKK2dlbl9hdG1maWVsZF9jb2RlX2ludGVybmFsKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgaW50IGF0bWZpZWxkLAorICAgIGJwZl91X2ludDMyIGp2YWx1ZSwgaW50IGp0eXBlLCBpbnQgcmV2ZXJzZSkKIHsKIAlzdHJ1Y3QgYmxvY2sgKmIwOwogCkBAIC04ODI0LDggKzk1MjUsOCBAQAogCQkJYnBmX2Vycm9yKGNzdGF0ZSwgIid2cGknIHN1cHBvcnRlZCBvbmx5IG9uIHJhdyBBVE0iKTsKIAkJaWYgKGNzdGF0ZS0+b2ZmX3ZwaSA9PSBPRkZTRVRfTk9UX1NFVCkKIAkJCWFib3J0KCk7Ci0JCWIwID0gZ2VuX25jbXAoY3N0YXRlLCBPUl9MSU5LSERSLCBjc3RhdGUtPm9mZl92cGksIEJQRl9CLCAweGZmZmZmZmZmLCBqdHlwZSwKLQkJICAgIHJldmVyc2UsIGp2YWx1ZSk7CisJCWIwID0gZ2VuX25jbXAoY3N0YXRlLCBPUl9MSU5LSERSLCBjc3RhdGUtPm9mZl92cGksIEJQRl9CLAorCQkgICAgMHhmZmZmZmZmZlUsIGp0eXBlLCByZXZlcnNlLCBqdmFsdWUpOwogCQlicmVhazsKIAogCWNhc2UgQV9WQ0k6CkBAIC04ODMzLDIyICs5NTM0LDIyIEBACiAJCQlicGZfZXJyb3IoY3N0YXRlLCAiJ3ZjaScgc3VwcG9ydGVkIG9ubHkgb24gcmF3IEFUTSIpOwogCQlpZiAoY3N0YXRlLT5vZmZfdmNpID09IE9GRlNFVF9OT1RfU0VUKQogCQkJYWJvcnQoKTsKLQkJYjAgPSBnZW5fbmNtcChjc3RhdGUsIE9SX0xJTktIRFIsIGNzdGF0ZS0+b2ZmX3ZjaSwgQlBGX0gsIDB4ZmZmZmZmZmYsIGp0eXBlLAotCQkgICAgcmV2ZXJzZSwganZhbHVlKTsKKwkJYjAgPSBnZW5fbmNtcChjc3RhdGUsIE9SX0xJTktIRFIsIGNzdGF0ZS0+b2ZmX3ZjaSwgQlBGX0gsCisJCSAgICAweGZmZmZmZmZmVSwganR5cGUsIHJldmVyc2UsIGp2YWx1ZSk7CiAJCWJyZWFrOwogCiAJY2FzZSBBX1BST1RPVFlQRToKIAkJaWYgKGNzdGF0ZS0+b2ZmX3Byb3RvID09IE9GRlNFVF9OT1RfU0VUKQogCQkJYWJvcnQoKTsJLyogWFhYIC0gdGhpcyBpc24ndCBvbiBGcmVlQlNEICovCi0JCWIwID0gZ2VuX25jbXAoY3N0YXRlLCBPUl9MSU5LSERSLCBjc3RhdGUtPm9mZl9wcm90bywgQlBGX0IsIDB4MGYsIGp0eXBlLAotCQkgICAgcmV2ZXJzZSwganZhbHVlKTsKKwkJYjAgPSBnZW5fbmNtcChjc3RhdGUsIE9SX0xJTktIRFIsIGNzdGF0ZS0+b2ZmX3Byb3RvLCBCUEZfQiwKKwkJICAgIDB4MGZVLCBqdHlwZSwgcmV2ZXJzZSwganZhbHVlKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFfTVNHVFlQRToKIAkJaWYgKGNzdGF0ZS0+b2ZmX3BheWxvYWQgPT0gT0ZGU0VUX05PVF9TRVQpCiAJCQlhYm9ydCgpOwogCQliMCA9IGdlbl9uY21wKGNzdGF0ZSwgT1JfTElOS0hEUiwgY3N0YXRlLT5vZmZfcGF5bG9hZCArIE1TR19UWVBFX1BPUywgQlBGX0IsCi0JCSAgICAweGZmZmZmZmZmLCBqdHlwZSwgcmV2ZXJzZSwganZhbHVlKTsKKwkJICAgIDB4ZmZmZmZmZmZVLCBqdHlwZSwgcmV2ZXJzZSwganZhbHVlKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFfQ0FMTFJFRlRZUEU6CkBAIC04ODU2LDggKzk1NTcsOCBAQAogCQkJYnBmX2Vycm9yKGNzdGF0ZSwgIidjYWxscmVmJyBzdXBwb3J0ZWQgb25seSBvbiByYXcgQVRNIik7CiAJCWlmIChjc3RhdGUtPm9mZl9wcm90byA9PSBPRkZTRVRfTk9UX1NFVCkKIAkJCWFib3J0KCk7Ci0JCWIwID0gZ2VuX25jbXAoY3N0YXRlLCBPUl9MSU5LSERSLCBjc3RhdGUtPm9mZl9wcm90bywgQlBGX0IsIDB4ZmZmZmZmZmYsCi0JCSAgICBqdHlwZSwgcmV2ZXJzZSwganZhbHVlKTsKKwkJYjAgPSBnZW5fbmNtcChjc3RhdGUsIE9SX0xJTktIRFIsIGNzdGF0ZS0+b2ZmX3Byb3RvLCBCUEZfQiwKKwkJICAgIDB4ZmZmZmZmZmZVLCBqdHlwZSwgcmV2ZXJzZSwganZhbHVlKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtODg2NiwyOCArOTU2Nyw4MCBAQAogCXJldHVybiBiMDsKIH0KIAorc3RhdGljIHN0cnVjdCBibG9jayAqCitnZW5fYXRtdHlwZV9tZXRhYyhjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUpCit7CisJc3RydWN0IGJsb2NrICpiMCwgKmIxOworCisJYjAgPSBnZW5fYXRtZmllbGRfY29kZV9pbnRlcm5hbChjc3RhdGUsIEFfVlBJLCAwLCBCUEZfSkVRLCAwKTsKKwliMSA9IGdlbl9hdG1maWVsZF9jb2RlX2ludGVybmFsKGNzdGF0ZSwgQV9WQ0ksIDEsIEJQRl9KRVEsIDApOworCWdlbl9hbmQoYjAsIGIxKTsKKwlyZXR1cm4gYjE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmxvY2sgKgorZ2VuX2F0bXR5cGVfc2MoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlKQoreworCXN0cnVjdCBibG9jayAqYjAsICpiMTsKKworCWIwID0gZ2VuX2F0bWZpZWxkX2NvZGVfaW50ZXJuYWwoY3N0YXRlLCBBX1ZQSSwgMCwgQlBGX0pFUSwgMCk7CisJYjEgPSBnZW5fYXRtZmllbGRfY29kZV9pbnRlcm5hbChjc3RhdGUsIEFfVkNJLCA1LCBCUEZfSkVRLCAwKTsKKwlnZW5fYW5kKGIwLCBiMSk7CisJcmV0dXJuIGIxOworfQorCitzdGF0aWMgc3RydWN0IGJsb2NrICoKK2dlbl9hdG10eXBlX2xsYyhjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUpCit7CisJc3RydWN0IGJsb2NrICpiMDsKKworCWIwID0gZ2VuX2F0bWZpZWxkX2NvZGVfaW50ZXJuYWwoY3N0YXRlLCBBX1BST1RPVFlQRSwgUFRfTExDLCBCUEZfSkVRLCAwKTsKKwljc3RhdGUtPmxpbmt0eXBlID0gY3N0YXRlLT5wcmV2bGlua3R5cGU7CisJcmV0dXJuIGIwOworfQorCitzdHJ1Y3QgYmxvY2sgKgorZ2VuX2F0bWZpZWxkX2NvZGUoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgYXRtZmllbGQsCisgICAgYnBmX3VfaW50MzIganZhbHVlLCBpbnQganR5cGUsIGludCByZXZlcnNlKQoreworCS8qCisJICogQ2F0Y2ggZXJyb3JzIHJlcG9ydGVkIGJ5IHVzIGFuZCByb3V0aW5lcyBiZWxvdyB1cywgYW5kIHJldHVybiBOVUxMCisJICogb24gYW4gZXJyb3IuCisJICovCisJaWYgKHNldGptcChjc3RhdGUtPnRvcF9jdHgpKQorCQlyZXR1cm4gKE5VTEwpOworCisJcmV0dXJuIGdlbl9hdG1maWVsZF9jb2RlX2ludGVybmFsKGNzdGF0ZSwgYXRtZmllbGQsIGp2YWx1ZSwganR5cGUsCisJICAgIHJldmVyc2UpOworfQorCiBzdHJ1Y3QgYmxvY2sgKgogZ2VuX2F0bXR5cGVfYWJicmV2KGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgaW50IHR5cGUpCiB7CiAJc3RydWN0IGJsb2NrICpiMCwgKmIxOwogCisJLyoKKwkgKiBDYXRjaCBlcnJvcnMgcmVwb3J0ZWQgYnkgdXMgYW5kIHJvdXRpbmVzIGJlbG93IHVzLCBhbmQgcmV0dXJuIE5VTEwKKwkgKiBvbiBhbiBlcnJvci4KKwkgKi8KKwlpZiAoc2V0am1wKGNzdGF0ZS0+dG9wX2N0eCkpCisJCXJldHVybiAoTlVMTCk7CisKIAlzd2l0Y2ggKHR5cGUpIHsKIAogCWNhc2UgQV9NRVRBQzoKIAkJLyogR2V0IGFsbCBwYWNrZXRzIGluIE1ldGEgc2lnbmFsbGluZyBDaXJjdWl0ICovCiAJCWlmICghY3N0YXRlLT5pc19hdG0pCiAJCQlicGZfZXJyb3IoY3N0YXRlLCAiJ21ldGFjJyBzdXBwb3J0ZWQgb25seSBvbiByYXcgQVRNIik7Ci0JCWIwID0gZ2VuX2F0bWZpZWxkX2NvZGUoY3N0YXRlLCBBX1ZQSSwgMCwgQlBGX0pFUSwgMCk7Ci0JCWIxID0gZ2VuX2F0bWZpZWxkX2NvZGUoY3N0YXRlLCBBX1ZDSSwgMSwgQlBGX0pFUSwgMCk7Ci0JCWdlbl9hbmQoYjAsIGIxKTsKKwkJYjEgPSBnZW5fYXRtdHlwZV9tZXRhYyhjc3RhdGUpOwogCQlicmVhazsKIAogCWNhc2UgQV9CQ0M6CiAJCS8qIEdldCBhbGwgcGFja2V0cyBpbiBCcm9hZGNhc3QgQ2lyY3VpdCovCiAJCWlmICghY3N0YXRlLT5pc19hdG0pCiAJCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2JjYycgc3VwcG9ydGVkIG9ubHkgb24gcmF3IEFUTSIpOwotCQliMCA9IGdlbl9hdG1maWVsZF9jb2RlKGNzdGF0ZSwgQV9WUEksIDAsIEJQRl9KRVEsIDApOwotCQliMSA9IGdlbl9hdG1maWVsZF9jb2RlKGNzdGF0ZSwgQV9WQ0ksIDIsIEJQRl9KRVEsIDApOworCQliMCA9IGdlbl9hdG1maWVsZF9jb2RlX2ludGVybmFsKGNzdGF0ZSwgQV9WUEksIDAsIEJQRl9KRVEsIDApOworCQliMSA9IGdlbl9hdG1maWVsZF9jb2RlX2ludGVybmFsKGNzdGF0ZSwgQV9WQ0ksIDIsIEJQRl9KRVEsIDApOwogCQlnZW5fYW5kKGIwLCBiMSk7CiAJCWJyZWFrOwogCkBAIC04ODk1LDggKzk2NDgsOCBAQAogCQkvKiBHZXQgYWxsIGNlbGxzIGluIFNlZ21lbnQgT0FNIEY0IGNpcmN1aXQqLwogCQlpZiAoIWNzdGF0ZS0+aXNfYXRtKQogCQkJYnBmX2Vycm9yKGNzdGF0ZSwgIidvYW00c2MnIHN1cHBvcnRlZCBvbmx5IG9uIHJhdyBBVE0iKTsKLQkJYjAgPSBnZW5fYXRtZmllbGRfY29kZShjc3RhdGUsIEFfVlBJLCAwLCBCUEZfSkVRLCAwKTsKLQkJYjEgPSBnZW5fYXRtZmllbGRfY29kZShjc3RhdGUsIEFfVkNJLCAzLCBCUEZfSkVRLCAwKTsKKwkJYjAgPSBnZW5fYXRtZmllbGRfY29kZV9pbnRlcm5hbChjc3RhdGUsIEFfVlBJLCAwLCBCUEZfSkVRLCAwKTsKKwkJYjEgPSBnZW5fYXRtZmllbGRfY29kZV9pbnRlcm5hbChjc3RhdGUsIEFfVkNJLCAzLCBCUEZfSkVRLCAwKTsKIAkJZ2VuX2FuZChiMCwgYjEpOwogCQlicmVhazsKIApAQCAtODkwNCw4ICs5NjU3LDggQEAKIAkJLyogR2V0IGFsbCBjZWxscyBpbiBFbmQtdG8tRW5kIE9BTSBGNCBDaXJjdWl0Ki8KIAkJaWYgKCFjc3RhdGUtPmlzX2F0bSkKIAkJCWJwZl9lcnJvcihjc3RhdGUsICInb2FtNGVjJyBzdXBwb3J0ZWQgb25seSBvbiByYXcgQVRNIik7Ci0JCWIwID0gZ2VuX2F0bWZpZWxkX2NvZGUoY3N0YXRlLCBBX1ZQSSwgMCwgQlBGX0pFUSwgMCk7Ci0JCWIxID0gZ2VuX2F0bWZpZWxkX2NvZGUoY3N0YXRlLCBBX1ZDSSwgNCwgQlBGX0pFUSwgMCk7CisJCWIwID0gZ2VuX2F0bWZpZWxkX2NvZGVfaW50ZXJuYWwoY3N0YXRlLCBBX1ZQSSwgMCwgQlBGX0pFUSwgMCk7CisJCWIxID0gZ2VuX2F0bWZpZWxkX2NvZGVfaW50ZXJuYWwoY3N0YXRlLCBBX1ZDSSwgNCwgQlBGX0pFUSwgMCk7CiAJCWdlbl9hbmQoYjAsIGIxKTsKIAkJYnJlYWs7CiAKQEAgLTg5MTMsMTcgKzk2NjYsMTUgQEAKIAkJLyogIEdldCBhbGwgcGFja2V0cyBpbiBjb25uZWN0aW9uIFNpZ25hbGxpbmcgQ2lyY3VpdCAqLwogCQlpZiAoIWNzdGF0ZS0+aXNfYXRtKQogCQkJYnBmX2Vycm9yKGNzdGF0ZSwgIidzYycgc3VwcG9ydGVkIG9ubHkgb24gcmF3IEFUTSIpOwotCQliMCA9IGdlbl9hdG1maWVsZF9jb2RlKGNzdGF0ZSwgQV9WUEksIDAsIEJQRl9KRVEsIDApOwotCQliMSA9IGdlbl9hdG1maWVsZF9jb2RlKGNzdGF0ZSwgQV9WQ0ksIDUsIEJQRl9KRVEsIDApOwotCQlnZW5fYW5kKGIwLCBiMSk7CisJCWIxID0gZ2VuX2F0bXR5cGVfc2MoY3N0YXRlKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFfSUxNSUM6CiAJCS8qIEdldCBhbGwgcGFja2V0cyBpbiBJTE1JIENpcmN1aXQgKi8KIAkJaWYgKCFjc3RhdGUtPmlzX2F0bSkKIAkJCWJwZl9lcnJvcihjc3RhdGUsICInaWxtaWMnIHN1cHBvcnRlZCBvbmx5IG9uIHJhdyBBVE0iKTsKLQkJYjAgPSBnZW5fYXRtZmllbGRfY29kZShjc3RhdGUsIEFfVlBJLCAwLCBCUEZfSkVRLCAwKTsKLQkJYjEgPSBnZW5fYXRtZmllbGRfY29kZShjc3RhdGUsIEFfVkNJLCAxNiwgQlBGX0pFUSwgMCk7CisJCWIwID0gZ2VuX2F0bWZpZWxkX2NvZGVfaW50ZXJuYWwoY3N0YXRlLCBBX1ZQSSwgMCwgQlBGX0pFUSwgMCk7CisJCWIxID0gZ2VuX2F0bWZpZWxkX2NvZGVfaW50ZXJuYWwoY3N0YXRlLCBBX1ZDSSwgMTYsIEJQRl9KRVEsIDApOwogCQlnZW5fYW5kKGIwLCBiMSk7CiAJCWJyZWFrOwogCkBAIC04OTMxLDcgKzk2ODIsNyBAQAogCQkvKiBHZXQgYWxsIExBTkUgcGFja2V0cyAqLwogCQlpZiAoIWNzdGF0ZS0+aXNfYXRtKQogCQkJYnBmX2Vycm9yKGNzdGF0ZSwgIidsYW5lJyBzdXBwb3J0ZWQgb25seSBvbiByYXcgQVRNIik7Ci0JCWIxID0gZ2VuX2F0bWZpZWxkX2NvZGUoY3N0YXRlLCBBX1BST1RPVFlQRSwgUFRfTEFORSwgQlBGX0pFUSwgMCk7CisJCWIxID0gZ2VuX2F0bWZpZWxkX2NvZGVfaW50ZXJuYWwoY3N0YXRlLCBBX1BST1RPVFlQRSwgUFRfTEFORSwgQlBGX0pFUSwgMCk7CiAKIAkJLyoKIAkJICogQXJyYW5nZSB0aGF0IGFsbCBzdWJzZXF1ZW50IHRlc3RzIGFzc3VtZSBMQU5FCkBAIC04OTU0LDggKzk3MDUsNyBAQAogCQkvKiBHZXQgYWxsIExMQy1lbmNhcHN1bGF0ZWQgcGFja2V0cyAqLwogCQlpZiAoIWNzdGF0ZS0+aXNfYXRtKQogCQkJYnBmX2Vycm9yKGNzdGF0ZSwgIidsbGMnIHN1cHBvcnRlZCBvbmx5IG9uIHJhdyBBVE0iKTsKLQkJYjEgPSBnZW5fYXRtZmllbGRfY29kZShjc3RhdGUsIEFfUFJPVE9UWVBFLCBQVF9MTEMsIEJQRl9KRVEsIDApOwotCQljc3RhdGUtPmxpbmt0eXBlID0gY3N0YXRlLT5wcmV2bGlua3R5cGU7CisJCWIxID0gZ2VuX2F0bXR5cGVfbGxjKGNzdGF0ZSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTg5NzYsNiArOTcyNiwxMyBAQAogewogCXN0cnVjdCBibG9jayAqYjAsICpiMTsKIAorCS8qCisJICogQ2F0Y2ggZXJyb3JzIHJlcG9ydGVkIGJ5IHVzIGFuZCByb3V0aW5lcyBiZWxvdyB1cywgYW5kIHJldHVybiBOVUxMCisJICogb24gYW4gZXJyb3IuCisJICovCisJaWYgKHNldGptcChjc3RhdGUtPnRvcF9jdHgpKQorCQlyZXR1cm4gKE5VTEwpOworCiAJc3dpdGNoICh0eXBlKSB7CiAKIAljYXNlIE1fRklTVToKQEAgLTg5ODQsNyArOTc0MSw4IEBACiAJCSAgICAgKGNzdGF0ZS0+bGlua3R5cGUgIT0gRExUX01UUDJfV0lUSF9QSERSKSApCiAJCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2Zpc3UnIHN1cHBvcnRlZCBvbmx5IG9uIE1UUDIiKTsKIAkJLyogZ2VuX25jbXAoY3N0YXRlLCBvZmZyZWwsIG9mZnNldCwgc2l6ZSwgbWFzaywganR5cGUsIHJldmVyc2UsIHZhbHVlKSAqLwotCQliMCA9IGdlbl9uY21wKGNzdGF0ZSwgT1JfUEFDS0VULCBjc3RhdGUtPm9mZl9saSwgQlBGX0IsIDB4M2YsIEJQRl9KRVEsIDAsIDApOworCQliMCA9IGdlbl9uY21wKGNzdGF0ZSwgT1JfUEFDS0VULCBjc3RhdGUtPm9mZl9saSwgQlBGX0IsCisJCSAgICAweDNmVSwgQlBGX0pFUSwgMCwgMFUpOwogCQlicmVhazsKIAogCWNhc2UgTV9MU1NVOgpAQCAtODk5Miw4ICs5NzUwLDEwIEBACiAJCSAgICAgKGNzdGF0ZS0+bGlua3R5cGUgIT0gRExUX0VSRikgJiYKIAkJICAgICAoY3N0YXRlLT5saW5rdHlwZSAhPSBETFRfTVRQMl9XSVRIX1BIRFIpICkKIAkJCWJwZl9lcnJvcihjc3RhdGUsICInbHNzdScgc3VwcG9ydGVkIG9ubHkgb24gTVRQMiIpOwotCQliMCA9IGdlbl9uY21wKGNzdGF0ZSwgT1JfUEFDS0VULCBjc3RhdGUtPm9mZl9saSwgQlBGX0IsIDB4M2YsIEJQRl9KR1QsIDEsIDIpOwotCQliMSA9IGdlbl9uY21wKGNzdGF0ZSwgT1JfUEFDS0VULCBjc3RhdGUtPm9mZl9saSwgQlBGX0IsIDB4M2YsIEJQRl9KR1QsIDAsIDApOworCQliMCA9IGdlbl9uY21wKGNzdGF0ZSwgT1JfUEFDS0VULCBjc3RhdGUtPm9mZl9saSwgQlBGX0IsCisJCSAgICAweDNmVSwgQlBGX0pHVCwgMSwgMlUpOworCQliMSA9IGdlbl9uY21wKGNzdGF0ZSwgT1JfUEFDS0VULCBjc3RhdGUtPm9mZl9saSwgQlBGX0IsCisJCSAgICAweDNmVSwgQlBGX0pHVCwgMCwgMFUpOwogCQlnZW5fYW5kKGIxLCBiMCk7CiAJCWJyZWFrOwogCkBAIC05MDAyLDcgKzk3NjIsOCBAQAogCQkgICAgIChjc3RhdGUtPmxpbmt0eXBlICE9IERMVF9FUkYpICYmCiAJCSAgICAgKGNzdGF0ZS0+bGlua3R5cGUgIT0gRExUX01UUDJfV0lUSF9QSERSKSApCiAJCQlicGZfZXJyb3IoY3N0YXRlLCAiJ21zdScgc3VwcG9ydGVkIG9ubHkgb24gTVRQMiIpOwotCQliMCA9IGdlbl9uY21wKGNzdGF0ZSwgT1JfUEFDS0VULCBjc3RhdGUtPm9mZl9saSwgQlBGX0IsIDB4M2YsIEJQRl9KR1QsIDAsIDIpOworCQliMCA9IGdlbl9uY21wKGNzdGF0ZSwgT1JfUEFDS0VULCBjc3RhdGUtPm9mZl9saSwgQlBGX0IsCisJCSAgICAweDNmVSwgQlBGX0pHVCwgMCwgMlUpOwogCQlicmVhazsKIAogCWNhc2UgTUhfRklTVToKQEAgLTkwMTEsNyArOTc3Miw4IEBACiAJCSAgICAgKGNzdGF0ZS0+bGlua3R5cGUgIT0gRExUX01UUDJfV0lUSF9QSERSKSApCiAJCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2hmaXN1JyBzdXBwb3J0ZWQgb25seSBvbiBNVFAyX0hTTCIpOwogCQkvKiBnZW5fbmNtcChjc3RhdGUsIG9mZnJlbCwgb2Zmc2V0LCBzaXplLCBtYXNrLCBqdHlwZSwgcmV2ZXJzZSwgdmFsdWUpICovCi0JCWIwID0gZ2VuX25jbXAoY3N0YXRlLCBPUl9QQUNLRVQsIGNzdGF0ZS0+b2ZmX2xpX2hzbCwgQlBGX0gsIDB4ZmY4MCwgQlBGX0pFUSwgMCwgMCk7CisJCWIwID0gZ2VuX25jbXAoY3N0YXRlLCBPUl9QQUNLRVQsIGNzdGF0ZS0+b2ZmX2xpX2hzbCwgQlBGX0gsCisJCSAgICAweGZmODBVLCBCUEZfSkVRLCAwLCAwVSk7CiAJCWJyZWFrOwogCiAJY2FzZSBNSF9MU1NVOgpAQCAtOTAxOSw4ICs5NzgxLDEwIEBACiAJCSAgICAgKGNzdGF0ZS0+bGlua3R5cGUgIT0gRExUX0VSRikgJiYKIAkJICAgICAoY3N0YXRlLT5saW5rdHlwZSAhPSBETFRfTVRQMl9XSVRIX1BIRFIpICkKIAkJCWJwZl9lcnJvcihjc3RhdGUsICInaGxzc3UnIHN1cHBvcnRlZCBvbmx5IG9uIE1UUDJfSFNMIik7Ci0JCWIwID0gZ2VuX25jbXAoY3N0YXRlLCBPUl9QQUNLRVQsIGNzdGF0ZS0+b2ZmX2xpX2hzbCwgQlBGX0gsIDB4ZmY4MCwgQlBGX0pHVCwgMSwgMHgwMTAwKTsKLQkJYjEgPSBnZW5fbmNtcChjc3RhdGUsIE9SX1BBQ0tFVCwgY3N0YXRlLT5vZmZfbGlfaHNsLCBCUEZfSCwgMHhmZjgwLCBCUEZfSkdULCAwLCAwKTsKKwkJYjAgPSBnZW5fbmNtcChjc3RhdGUsIE9SX1BBQ0tFVCwgY3N0YXRlLT5vZmZfbGlfaHNsLCBCUEZfSCwKKwkJICAgIDB4ZmY4MFUsIEJQRl9KR1QsIDEsIDB4MDEwMFUpOworCQliMSA9IGdlbl9uY21wKGNzdGF0ZSwgT1JfUEFDS0VULCBjc3RhdGUtPm9mZl9saV9oc2wsIEJQRl9ILAorCQkgICAgMHhmZjgwVSwgQlBGX0pHVCwgMCwgMFUpOwogCQlnZW5fYW5kKGIxLCBiMCk7CiAJCWJyZWFrOwogCkBAIC05MDI5LDcgKzk3OTMsOCBAQAogCQkgICAgIChjc3RhdGUtPmxpbmt0eXBlICE9IERMVF9FUkYpICYmCiAJCSAgICAgKGNzdGF0ZS0+bGlua3R5cGUgIT0gRExUX01UUDJfV0lUSF9QSERSKSApCiAJCQlicGZfZXJyb3IoY3N0YXRlLCAiJ2htc3UnIHN1cHBvcnRlZCBvbmx5IG9uIE1UUDJfSFNMIik7Ci0JCWIwID0gZ2VuX25jbXAoY3N0YXRlLCBPUl9QQUNLRVQsIGNzdGF0ZS0+b2ZmX2xpX2hzbCwgQlBGX0gsIDB4ZmY4MCwgQlBGX0pHVCwgMCwgMHgwMTAwKTsKKwkJYjAgPSBnZW5fbmNtcChjc3RhdGUsIE9SX1BBQ0tFVCwgY3N0YXRlLT5vZmZfbGlfaHNsLCBCUEZfSCwKKwkJICAgIDB4ZmY4MFUsIEJQRl9KR1QsIDAsIDB4MDEwMFUpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC05MDM4LDE3ICs5ODAzLDM0IEBACiAJcmV0dXJuIGIwOwogfQogCisvKgorICogVGhlIGp2YWx1ZV9hcmcgZGFuY2UgaXMgdG8gYXZvaWQgYW5ub3lpbmcgd2hpbmluZyBieSBjb21waWxlcnMgdGhhdAorICoganZhbHVlIG1pZ2h0IGJlIGNsb2JiZXJlZCBieSBsb25nam1wIC0geWVhaCwgaXQgbWlnaHQsIGJ1dCAqV0hPIENBUkVTKj8KKyAqIEl0J3Mgbm90ICp1c2VkKiBhZnRlciBzZXRqbXAgcmV0dXJucy4KKyAqLwogc3RydWN0IGJsb2NrICoKLWdlbl9tdHAzZmllbGRfY29kZShjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGludCBtdHAzZmllbGQsIGJwZl91X2ludDMyIGp2YWx1ZSwKLSAgICBicGZfdV9pbnQzMiBqdHlwZSwgaW50IHJldmVyc2UpCitnZW5fbXRwM2ZpZWxkX2NvZGUoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBpbnQgbXRwM2ZpZWxkLAorICAgIGJwZl91X2ludDMyIGp2YWx1ZV9hcmcsIGludCBqdHlwZSwgaW50IHJldmVyc2UpCiB7CisJdm9sYXRpbGUgYnBmX3VfaW50MzIganZhbHVlID0ganZhbHVlX2FyZzsKIAlzdHJ1Y3QgYmxvY2sgKmIwOwogCWJwZl91X2ludDMyIHZhbDEgLCB2YWwyICwgdmFsMzsKLQl1X2ludCBuZXdvZmZfc2lvID0gY3N0YXRlLT5vZmZfc2lvOwotCXVfaW50IG5ld29mZl9vcGMgPSBjc3RhdGUtPm9mZl9vcGM7Ci0JdV9pbnQgbmV3b2ZmX2RwYyA9IGNzdGF0ZS0+b2ZmX2RwYzsKLQl1X2ludCBuZXdvZmZfc2xzID0gY3N0YXRlLT5vZmZfc2xzOworCXVfaW50IG5ld29mZl9zaW87CisJdV9pbnQgbmV3b2ZmX29wYzsKKwl1X2ludCBuZXdvZmZfZHBjOworCXVfaW50IG5ld29mZl9zbHM7CiAKKwkvKgorCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSB1cyBhbmQgcm91dGluZXMgYmVsb3cgdXMsIGFuZCByZXR1cm4gTlVMTAorCSAqIG9uIGFuIGVycm9yLgorCSAqLworCWlmIChzZXRqbXAoY3N0YXRlLT50b3BfY3R4KSkKKwkJcmV0dXJuIChOVUxMKTsKKworCW5ld29mZl9zaW8gPSBjc3RhdGUtPm9mZl9zaW87CisJbmV3b2ZmX29wYyA9IGNzdGF0ZS0+b2ZmX29wYzsKKwluZXdvZmZfZHBjID0gY3N0YXRlLT5vZmZfZHBjOworCW5ld29mZl9zbHMgPSBjc3RhdGUtPm9mZl9zbHM7CiAJc3dpdGNoIChtdHAzZmllbGQpIHsKIAogCWNhc2UgTUhfU0lPOgpAQCAtOTA2MiwxMiArOTg0NCwxNCBAQAogCQlpZihqdmFsdWUgPiAyNTUpCiAJCSAgICAgICAgYnBmX2Vycm9yKGNzdGF0ZSwgInNpbyB2YWx1ZSAldSB0b28gYmlnOyBtYXggdmFsdWUgPSAyNTUiLAogCQkgICAgICAgICAgICBqdmFsdWUpOwotCQliMCA9IGdlbl9uY21wKGNzdGF0ZSwgT1JfUEFDS0VULCBuZXdvZmZfc2lvLCBCUEZfQiwgMHhmZmZmZmZmZiwKLQkJICAgICh1X2ludClqdHlwZSwgcmV2ZXJzZSwgKHVfaW50KWp2YWx1ZSk7CisJCWIwID0gZ2VuX25jbXAoY3N0YXRlLCBPUl9QQUNLRVQsIG5ld29mZl9zaW8sIEJQRl9CLCAweGZmZmZmZmZmVSwKKwkJICAgIGp0eXBlLCByZXZlcnNlLCBqdmFsdWUpOwogCQlicmVhazsKIAogCWNhc2UgTUhfT1BDOgotCQluZXdvZmZfb3BjKz0zOworCQluZXdvZmZfb3BjICs9IDM7CisKKwkJLyogRkFMTFRIUk9VR0ggKi8KICAgICAgICAgY2FzZSBNX09QQzoKIAkgICAgICAgIGlmIChjc3RhdGUtPm9mZl9vcGMgPT0gT0ZGU0VUX05PVF9TRVQpCiAJCQlicGZfZXJyb3IoY3N0YXRlLCAiJ29wYycgc3VwcG9ydGVkIG9ubHkgb24gU1M3Iik7CkBAIC05MDg0LDggKzk4NjgsOCBAQAogCQl2YWwzID0ganZhbHVlICYgMHgwMDAwMDAwMzsKIAkJdmFsMyA9IHZhbDMgPDwyMjsKIAkJanZhbHVlID0gdmFsMSArIHZhbDIgKyB2YWwzOwotCQliMCA9IGdlbl9uY21wKGNzdGF0ZSwgT1JfUEFDS0VULCBuZXdvZmZfb3BjLCBCUEZfVywgMHgwMGMwZmYwZiwKLQkJICAgICh1X2ludClqdHlwZSwgcmV2ZXJzZSwgKHVfaW50KWp2YWx1ZSk7CisJCWIwID0gZ2VuX25jbXAoY3N0YXRlLCBPUl9QQUNLRVQsIG5ld29mZl9vcGMsIEJQRl9XLCAweDAwYzBmZjBmVSwKKwkJICAgIGp0eXBlLCByZXZlcnNlLCBqdmFsdWUpOwogCQlicmVhazsKIAogCWNhc2UgTUhfRFBDOgpAQCAtOTEwNiwxMiArOTg5MCwxNCBAQAogCQl2YWwyID0ganZhbHVlICYgMHgwMDAwM2YwMDsKIAkJdmFsMiA9IHZhbDIgPDwgODsKIAkJanZhbHVlID0gdmFsMSArIHZhbDI7Ci0JCWIwID0gZ2VuX25jbXAoY3N0YXRlLCBPUl9QQUNLRVQsIG5ld29mZl9kcGMsIEJQRl9XLCAweGZmM2YwMDAwLAotCQkgICAgKHVfaW50KWp0eXBlLCByZXZlcnNlLCAodV9pbnQpanZhbHVlKTsKKwkJYjAgPSBnZW5fbmNtcChjc3RhdGUsIE9SX1BBQ0tFVCwgbmV3b2ZmX2RwYywgQlBGX1csIDB4ZmYzZjAwMDBVLAorCQkgICAganR5cGUsIHJldmVyc2UsIGp2YWx1ZSk7CiAJCWJyZWFrOwogCiAJY2FzZSBNSF9TTFM6Ci0JICBuZXdvZmZfc2xzKz0zOworCQluZXdvZmZfc2xzICs9IDM7CisJCS8qIEZBTExUSFJPVUdIICovCisKIAljYXNlIE1fU0xTOgogCSAgICAgICAgaWYgKGNzdGF0ZS0+b2ZmX3NscyA9PSBPRkZTRVRfTk9UX1NFVCkKIAkJCWJwZl9lcnJvcihjc3RhdGUsICInc2xzJyBzdXBwb3J0ZWQgb25seSBvbiBTUzciKTsKQEAgLTkxMjIsOCArOTkwOCw4IEBACiAJCS8qIHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gaXMgbWFkZSB0byBjb252ZXJ0IGp2YWx1ZQogCQkgKiB0byB0aGUgZm9ybWUgdXNlZCB0byB3cml0ZSBzbHMgaW4gYW4gc3M3IG1lc3NhZ2UqLwogCQlqdmFsdWUgPSBqdmFsdWUgPDwgNDsKLQkJYjAgPSBnZW5fbmNtcChjc3RhdGUsIE9SX1BBQ0tFVCwgbmV3b2ZmX3NscywgQlBGX0IsIDB4ZjAsCi0JCSAgICAodV9pbnQpanR5cGUscmV2ZXJzZSwgKHVfaW50KWp2YWx1ZSk7CisJCWIwID0gZ2VuX25jbXAoY3N0YXRlLCBPUl9QQUNLRVQsIG5ld29mZl9zbHMsIEJQRl9CLCAweGYwVSwKKwkJICAgIGp0eXBlLCByZXZlcnNlLCBqdmFsdWUpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC05MTQ0LDI3ICs5OTMwLDI3IEBACiAJc3dpdGNoICh0eXBlKSB7CiAKIAljYXNlIEFfU0VUVVA6Ci0JCWIxID0gZ2VuX2F0bWZpZWxkX2NvZGUoY3N0YXRlLCBBX01TR1RZUEUsIFNFVFVQLCBCUEZfSkVRLCAwKTsKKwkJYjEgPSBnZW5fYXRtZmllbGRfY29kZV9pbnRlcm5hbChjc3RhdGUsIEFfTVNHVFlQRSwgU0VUVVAsIEJQRl9KRVEsIDApOwogCQlicmVhazsKIAogCWNhc2UgQV9DQUxMUFJPQ0VFRDoKLQkJYjEgPSBnZW5fYXRtZmllbGRfY29kZShjc3RhdGUsIEFfTVNHVFlQRSwgQ0FMTF9QUk9DRUVELCBCUEZfSkVRLCAwKTsKKwkJYjEgPSBnZW5fYXRtZmllbGRfY29kZV9pbnRlcm5hbChjc3RhdGUsIEFfTVNHVFlQRSwgQ0FMTF9QUk9DRUVELCBCUEZfSkVRLCAwKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFfQ09OTkVDVDoKLQkJYjEgPSBnZW5fYXRtZmllbGRfY29kZShjc3RhdGUsIEFfTVNHVFlQRSwgQ09OTkVDVCwgQlBGX0pFUSwgMCk7CisJCWIxID0gZ2VuX2F0bWZpZWxkX2NvZGVfaW50ZXJuYWwoY3N0YXRlLCBBX01TR1RZUEUsIENPTk5FQ1QsIEJQRl9KRVEsIDApOwogCQlicmVhazsKIAogCWNhc2UgQV9DT05ORUNUQUNLOgotCQliMSA9IGdlbl9hdG1maWVsZF9jb2RlKGNzdGF0ZSwgQV9NU0dUWVBFLCBDT05ORUNUX0FDSywgQlBGX0pFUSwgMCk7CisJCWIxID0gZ2VuX2F0bWZpZWxkX2NvZGVfaW50ZXJuYWwoY3N0YXRlLCBBX01TR1RZUEUsIENPTk5FQ1RfQUNLLCBCUEZfSkVRLCAwKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFfUkVMRUFTRToKLQkJYjEgPSBnZW5fYXRtZmllbGRfY29kZShjc3RhdGUsIEFfTVNHVFlQRSwgUkVMRUFTRSwgQlBGX0pFUSwgMCk7CisJCWIxID0gZ2VuX2F0bWZpZWxkX2NvZGVfaW50ZXJuYWwoY3N0YXRlLCBBX01TR1RZUEUsIFJFTEVBU0UsIEJQRl9KRVEsIDApOwogCQlicmVhazsKIAogCWNhc2UgQV9SRUxFQVNFX0RPTkU6Ci0JCWIxID0gZ2VuX2F0bWZpZWxkX2NvZGUoY3N0YXRlLCBBX01TR1RZUEUsIFJFTEVBU0VfRE9ORSwgQlBGX0pFUSwgMCk7CisJCWIxID0gZ2VuX2F0bWZpZWxkX2NvZGVfaW50ZXJuYWwoY3N0YXRlLCBBX01TR1RZUEUsIFJFTEVBU0VfRE9ORSwgQlBGX0pFUSwgMCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTkxNzgsMjIgKzk5NjQsMzQgQEAKIHsKIAlzdHJ1Y3QgYmxvY2sgKmIwLCAqYjE7CiAKKwkvKgorCSAqIENhdGNoIGVycm9ycyByZXBvcnRlZCBieSB1cyBhbmQgcm91dGluZXMgYmVsb3cgdXMsIGFuZCByZXR1cm4gTlVMTAorCSAqIG9uIGFuIGVycm9yLgorCSAqLworCWlmIChzZXRqbXAoY3N0YXRlLT50b3BfY3R4KSkKKwkJcmV0dXJuIChOVUxMKTsKKwogCXN3aXRjaCAodHlwZSkgewogCiAJY2FzZSBBX09BTToKIAkJaWYgKCFjc3RhdGUtPmlzX2F0bSkKIAkJCWJwZl9lcnJvcihjc3RhdGUsICInb2FtJyBzdXBwb3J0ZWQgb25seSBvbiByYXcgQVRNIik7Ci0JCWIxID0gZ2VuX2F0bW11bHRpX2FiYnJldihjc3RhdGUsIEFfT0FNRjQpOworCQkvKiBPQU0gRjQgdHlwZSAqLworCQliMCA9IGdlbl9hdG1maWVsZF9jb2RlX2ludGVybmFsKGNzdGF0ZSwgQV9WQ0ksIDMsIEJQRl9KRVEsIDApOworCQliMSA9IGdlbl9hdG1maWVsZF9jb2RlX2ludGVybmFsKGNzdGF0ZSwgQV9WQ0ksIDQsIEJQRl9KRVEsIDApOworCQlnZW5fb3IoYjAsIGIxKTsKKwkJYjAgPSBnZW5fYXRtZmllbGRfY29kZV9pbnRlcm5hbChjc3RhdGUsIEFfVlBJLCAwLCBCUEZfSkVRLCAwKTsKKwkJZ2VuX2FuZChiMCwgYjEpOwogCQlicmVhazsKIAogCWNhc2UgQV9PQU1GNDoKIAkJaWYgKCFjc3RhdGUtPmlzX2F0bSkKIAkJCWJwZl9lcnJvcihjc3RhdGUsICInb2FtZjQnIHN1cHBvcnRlZCBvbmx5IG9uIHJhdyBBVE0iKTsKIAkJLyogT0FNIEY0IHR5cGUgKi8KLQkJYjAgPSBnZW5fYXRtZmllbGRfY29kZShjc3RhdGUsIEFfVkNJLCAzLCBCUEZfSkVRLCAwKTsKLQkJYjEgPSBnZW5fYXRtZmllbGRfY29kZShjc3RhdGUsIEFfVkNJLCA0LCBCUEZfSkVRLCAwKTsKKwkJYjAgPSBnZW5fYXRtZmllbGRfY29kZV9pbnRlcm5hbChjc3RhdGUsIEFfVkNJLCAzLCBCUEZfSkVRLCAwKTsKKwkJYjEgPSBnZW5fYXRtZmllbGRfY29kZV9pbnRlcm5hbChjc3RhdGUsIEFfVkNJLCA0LCBCUEZfSkVRLCAwKTsKIAkJZ2VuX29yKGIwLCBiMSk7Ci0JCWIwID0gZ2VuX2F0bWZpZWxkX2NvZGUoY3N0YXRlLCBBX1ZQSSwgMCwgQlBGX0pFUSwgMCk7CisJCWIwID0gZ2VuX2F0bWZpZWxkX2NvZGVfaW50ZXJuYWwoY3N0YXRlLCBBX1ZQSSwgMCwgQlBGX0pFUSwgMCk7CiAJCWdlbl9hbmQoYjAsIGIxKTsKIAkJYnJlYWs7CiAKQEAgLTkyMTUsNyArMTAwMTMsNyBAQAogCQlnZW5fb3IoYjAsIGIxKTsKIAkJYjAgPSBnZW5fbXNnX2FiYnJldihjc3RhdGUsIEFfUkVMRUFTRV9ET05FKTsKIAkJZ2VuX29yKGIwLCBiMSk7Ci0JCWIwID0gZ2VuX2F0bXR5cGVfYWJicmV2KGNzdGF0ZSwgQV9TQyk7CisJCWIwID0gZ2VuX2F0bXR5cGVfc2MoY3N0YXRlKTsKIAkJZ2VuX2FuZChiMCwgYjEpOwogCQlicmVhazsKIApAQCAtOTIzMSw3ICsxMDAyOSw3IEBACiAJCWdlbl9vcihiMCwgYjEpOwogCQliMCA9IGdlbl9tc2dfYWJicmV2KGNzdGF0ZSwgQV9SRUxFQVNFX0RPTkUpOwogCQlnZW5fb3IoYjAsIGIxKTsKLQkJYjAgPSBnZW5fYXRtdHlwZV9hYmJyZXYoY3N0YXRlLCBBX01FVEFDKTsKKwkJYjAgPSBnZW5fYXRtdHlwZV9tZXRhYyhjc3RhdGUpOwogCQlnZW5fYW5kKGIwLCBiMSk7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9nZW5jb2RlLmggYi9nZW5jb2RlLmgKaW5kZXggODhkZWY1YS4uMDUzZTg1ZiAxMDA2NDQKLS0tIGEvZ2VuY29kZS5oCisrKyBiL2dlbmNvZGUuaApAQCAtMTEzLDE2ICsxMTMsMTQgQEAKICNkZWZpbmUgUV9JU0lTX0wyICAgICAgIDMyCiAvKiBQRFUgdHlwZXMgKi8KICNkZWZpbmUgUV9JU0lTX0lJSCAgICAgIDMzCi0jZGVmaW5lIFFfSVNJU19MQU5fSUlIICAzNAotI2RlZmluZSBRX0lTSVNfUFRQX0lJSCAgMzUKLSNkZWZpbmUgUV9JU0lTX1NOUCAgICAgIDM2Ci0jZGVmaW5lIFFfSVNJU19DU05QICAgICAzNwotI2RlZmluZSBRX0lTSVNfUFNOUCAgICAgMzgKLSNkZWZpbmUgUV9JU0lTX0xTUCAgICAgIDM5CisjZGVmaW5lIFFfSVNJU19TTlAgICAgICAzNAorI2RlZmluZSBRX0lTSVNfQ1NOUCAgICAgMzUKKyNkZWZpbmUgUV9JU0lTX1BTTlAgICAgIDM2CisjZGVmaW5lIFFfSVNJU19MU1AgICAgICAzNwogCi0jZGVmaW5lIFFfUkFESU8JCTQwCisjZGVmaW5lIFFfUkFESU8JCTM4CiAKLSNkZWZpbmUgUV9DQVJQCQk0MQorI2RlZmluZSBRX0NBUlAJCTM5CiAKIC8qIERpcmVjdGlvbmFsIHF1YWxpZmllcnMuICovCiAKQEAgLTIwMiwxMSArMjAwLDE0IEBACiAKIHN0cnVjdCBzbGlzdDsKIAorLyoKKyAqIEEgc2luZ2xlIHN0YXRlbWVudCwgY29ycmVzcG9uZGluZyB0byBhbiBpbnN0cnVjdGlvbiBpbiBhIGJsb2NrLgorICovCiBzdHJ1Y3Qgc3RtdCB7Ci0JaW50IGNvZGU7Ci0Jc3RydWN0IHNsaXN0ICpqdDsJLypvbmx5IGZvciByZWxhdGl2ZSBqdW1wIGluIGJsb2NrKi8KLQlzdHJ1Y3Qgc2xpc3QgKmpmOwkvKm9ubHkgZm9yIHJlbGF0aXZlIGp1bXAgaW4gYmxvY2sqLwotCWJwZl9pbnQzMiBrOworCWludCBjb2RlOwkJLyogb3Bjb2RlICovCisJc3RydWN0IHNsaXN0ICpqdDsJLyogb25seSBmb3IgcmVsYXRpdmUganVtcCBpbiBibG9jayAqLworCXN0cnVjdCBzbGlzdCAqamY7CS8qIG9ubHkgZm9yIHJlbGF0aXZlIGp1bXAgaW4gYmxvY2sgKi8KKwlicGZfdV9pbnQzMiBrOwkJLyogayBmaWVsZCAqLwogfTsKIAogc3RydWN0IHNsaXN0IHsKQEAgLTIzMywxNyArMjM0LDI3IEBACiAgKi8KICNkZWZpbmUgTl9BVE9NUyAoQlBGX01FTVdPUkRTKzIpCiAKKy8qCisgKiBDb250cm9sIGZsb3cgZ3JhcGggb2YgYSBwcm9ncmFtLgorICogVGhpcyBjb3JyZXNwb25kcyB0byBhbiBlZGdlIGluIHRoZSBDRkcuCisgKiBJdCdzIGEgZGlyZWN0ZWQgZ3JhcGgsIHNvIGFuIGVkZ2UgaGFzIGEgcHJlZGVjZXNzb3IgYW5kIGEgc3VjY2Vzc29yLgorICovCiBzdHJ1Y3QgZWRnZSB7Ci0JaW50IGlkOwotCWludCBjb2RlOworCXVfaW50IGlkOworCWludCBjb2RlOwkJLyogb3Bjb2RlIGZvciBicmFuY2ggY29ycmVzcG9uZGluZyB0byB0aGlzIGVkZ2UgKi8KIAl1c2V0IGVkb207Ci0Jc3RydWN0IGJsb2NrICpzdWNjOwotCXN0cnVjdCBibG9jayAqcHJlZDsKKwlzdHJ1Y3QgYmxvY2sgKnN1Y2M7CS8qIHN1Y2Nlc3NvciB2ZXJ0ZXggKi8KKwlzdHJ1Y3QgYmxvY2sgKnByZWQ7CS8qIHByZWRlY2Vzc29yIHZlcnRleCAqLwogCXN0cnVjdCBlZGdlICpuZXh0OwkvKiBsaW5rIGxpc3Qgb2YgaW5jb21pbmcgZWRnZXMgZm9yIGEgbm9kZSAqLwogfTsKIAorLyoKKyAqIEEgYmxvY2sgaXMgYSB2ZXJ0ZXggaW4gdGhlIENGRy4KKyAqIEl0IGhhcyBhIGxpc3Qgb2Ygc3RhdGVtZW50cywgd2l0aCB0aGUgZmluYWwgc3RhdGVtZW50IGJlaW5nIGEKKyAqIGJyYW5jaCB0byBzdWNjZXNzb3IgYmxvY2tzLgorICovCiBzdHJ1Y3QgYmxvY2sgewotCWludCBpZDsKKwl1X2ludCBpZDsKIAlzdHJ1Y3Qgc2xpc3QgKnN0bXRzOwkvKiBzaWRlIGVmZmVjdCBzdG10cyAqLwogCXN0cnVjdCBzdG10IHM7CQkvKiBicmFuY2ggc3RtdCAqLwogCWludCBtYXJrOwpAQCAtMjUyLDE4ICsyNjMsMTggQEAKIAlpbnQgbGV2ZWw7CiAJaW50IG9mZnNldDsKIAlpbnQgc2Vuc2U7Ci0Jc3RydWN0IGVkZ2UgZXQ7Ci0Jc3RydWN0IGVkZ2UgZWY7CisJc3RydWN0IGVkZ2UgZXQ7CQkvKiBlZGdlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGp0IGJyYW5jaCAqLworCXN0cnVjdCBlZGdlIGVmOwkJLyogZWRnZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBqZiBicmFuY2ggKi8KIAlzdHJ1Y3QgYmxvY2sgKmhlYWQ7CiAJc3RydWN0IGJsb2NrICpsaW5rOwkvKiBsaW5rIGZpZWxkIHVzZWQgYnkgb3B0aW1pemVyICovCiAJdXNldCBkb207CiAJdXNldCBjbG9zdXJlOwotCXN0cnVjdCBlZGdlICppbl9lZGdlczsKKwlzdHJ1Y3QgZWRnZSAqaW5fZWRnZXM7CS8qIGZpcnN0IGVkZ2UgaW4gdGhlIHNldCAobGlua2VkIGxpc3QpIG9mIGVkZ2VzIHdpdGggdGhpcyBhcyBhIHN1Y2Nlc3NvciAqLwogCWF0b21zZXQgZGVmLCBraWxsOwogCWF0b21zZXQgaW5fdXNlOwogCWF0b21zZXQgb3V0X3VzZTsKLQlpbnQgb3ZhbDsKLQlpbnQgdmFsW05fQVRPTVNdOworCWludCBvdmFsOwkJLyogdmFsdWUgSUQgZm9yIHZhbHVlIHRlc3RlZCBpbiBicmFuY2ggc3RtdCAqLworCWJwZl91X2ludDMyIHZhbFtOX0FUT01TXTsKIH07CiAKIC8qCkBAIC0yODgsOCArMjk5LDggQEAKIAogdHlwZWRlZiBzdHJ1Y3QgX2NvbXBpbGVyX3N0YXRlIGNvbXBpbGVyX3N0YXRlX3Q7CiAKLXN0cnVjdCBhcnRoICpnZW5fbG9hZGkoY29tcGlsZXJfc3RhdGVfdCAqLCBpbnQpOwotc3RydWN0IGFydGggKmdlbl9sb2FkKGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50LCBzdHJ1Y3QgYXJ0aCAqLCBpbnQpOworc3RydWN0IGFydGggKmdlbl9sb2FkaShjb21waWxlcl9zdGF0ZV90ICosIGJwZl91X2ludDMyKTsKK3N0cnVjdCBhcnRoICpnZW5fbG9hZChjb21waWxlcl9zdGF0ZV90ICosIGludCwgc3RydWN0IGFydGggKiwgYnBmX3VfaW50MzIpOwogc3RydWN0IGFydGggKmdlbl9sb2FkbGVuKGNvbXBpbGVyX3N0YXRlX3QgKik7CiBzdHJ1Y3QgYXJ0aCAqZ2VuX25lZyhjb21waWxlcl9zdGF0ZV90ICosIHN0cnVjdCBhcnRoICopOwogc3RydWN0IGFydGggKmdlbl9hcnRoKGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50LCBzdHJ1Y3QgYXJ0aCAqLCBzdHJ1Y3QgYXJ0aCAqKTsKQEAgLTI5OSwxMyArMzEwLDEzIEBACiB2b2lkIGdlbl9ub3Qoc3RydWN0IGJsb2NrICopOwogCiBzdHJ1Y3QgYmxvY2sgKmdlbl9zY29kZShjb21waWxlcl9zdGF0ZV90ICosIGNvbnN0IGNoYXIgKiwgc3RydWN0IHF1YWwpOwotc3RydWN0IGJsb2NrICpnZW5fZWNvZGUoY29tcGlsZXJfc3RhdGVfdCAqLCBjb25zdCB1X2NoYXIgKiwgc3RydWN0IHF1YWwpOwotc3RydWN0IGJsb2NrICpnZW5fYWNvZGUoY29tcGlsZXJfc3RhdGVfdCAqLCBjb25zdCB1X2NoYXIgKiwgc3RydWN0IHF1YWwpOworc3RydWN0IGJsb2NrICpnZW5fZWNvZGUoY29tcGlsZXJfc3RhdGVfdCAqLCBjb25zdCBjaGFyICosIHN0cnVjdCBxdWFsKTsKK3N0cnVjdCBibG9jayAqZ2VuX2Fjb2RlKGNvbXBpbGVyX3N0YXRlX3QgKiwgY29uc3QgY2hhciAqLCBzdHJ1Y3QgcXVhbCk7CiBzdHJ1Y3QgYmxvY2sgKmdlbl9tY29kZShjb21waWxlcl9zdGF0ZV90ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAotICAgIHVuc2lnbmVkIGludCwgc3RydWN0IHF1YWwpOworICAgIGJwZl91X2ludDMyLCBzdHJ1Y3QgcXVhbCk7CiAjaWZkZWYgSU5FVDYKIHN0cnVjdCBibG9jayAqZ2VuX21jb2RlNihjb21waWxlcl9zdGF0ZV90ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAotICAgIHVuc2lnbmVkIGludCwgc3RydWN0IHF1YWwpOworICAgIGJwZl91X2ludDMyLCBzdHJ1Y3QgcXVhbCk7CiAjZW5kaWYKIHN0cnVjdCBibG9jayAqZ2VuX25jb2RlKGNvbXBpbGVyX3N0YXRlX3QgKiwgY29uc3QgY2hhciAqLCBicGZfdV9pbnQzMiwKICAgICBzdHJ1Y3QgcXVhbCk7CkBAIC0zMTQsOSArMzI1LDEwIEBACiAgICAgc3RydWN0IGFydGggKiwgaW50KTsKIHN0cnVjdCBibG9jayAqZ2VuX2xlc3MoY29tcGlsZXJfc3RhdGVfdCAqLCBpbnQpOwogc3RydWN0IGJsb2NrICpnZW5fZ3JlYXRlcihjb21waWxlcl9zdGF0ZV90ICosIGludCk7Ci1zdHJ1Y3QgYmxvY2sgKmdlbl9ieXRlb3AoY29tcGlsZXJfc3RhdGVfdCAqLCBpbnQsIGludCwgaW50KTsKK3N0cnVjdCBibG9jayAqZ2VuX2J5dGVvcChjb21waWxlcl9zdGF0ZV90ICosIGludCwgaW50LCBicGZfdV9pbnQzMik7CiBzdHJ1Y3QgYmxvY2sgKmdlbl9icm9hZGNhc3QoY29tcGlsZXJfc3RhdGVfdCAqLCBpbnQpOwogc3RydWN0IGJsb2NrICpnZW5fbXVsdGljYXN0KGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50KTsKK3N0cnVjdCBibG9jayAqZ2VuX2lmaW5kZXgoY29tcGlsZXJfc3RhdGVfdCAqLCBpbnQpOwogc3RydWN0IGJsb2NrICpnZW5faW5ib3VuZChjb21waWxlcl9zdGF0ZV90ICosIGludCk7CiAKIHN0cnVjdCBibG9jayAqZ2VuX2xsYyhjb21waWxlcl9zdGF0ZV90ICopOwpAQCAtMzI2LDUwICszMzgsMzIgQEAKIHN0cnVjdCBibG9jayAqZ2VuX2xsY19zX3N1YnR5cGUoY29tcGlsZXJfc3RhdGVfdCAqLCBicGZfdV9pbnQzMik7CiBzdHJ1Y3QgYmxvY2sgKmdlbl9sbGNfdV9zdWJ0eXBlKGNvbXBpbGVyX3N0YXRlX3QgKiwgYnBmX3VfaW50MzIpOwogCi1zdHJ1Y3QgYmxvY2sgKmdlbl92bGFuKGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50KTsKLXN0cnVjdCBibG9jayAqZ2VuX21wbHMoY29tcGlsZXJfc3RhdGVfdCAqLCBpbnQpOworc3RydWN0IGJsb2NrICpnZW5fdmxhbihjb21waWxlcl9zdGF0ZV90ICosIGJwZl91X2ludDMyLCBpbnQpOworc3RydWN0IGJsb2NrICpnZW5fbXBscyhjb21waWxlcl9zdGF0ZV90ICosIGJwZl91X2ludDMyLCBpbnQpOwogCiBzdHJ1Y3QgYmxvY2sgKmdlbl9wcHBvZWQoY29tcGlsZXJfc3RhdGVfdCAqKTsKLXN0cnVjdCBibG9jayAqZ2VuX3BwcG9lcyhjb21waWxlcl9zdGF0ZV90ICosIGludCk7CitzdHJ1Y3QgYmxvY2sgKmdlbl9wcHBvZXMoY29tcGlsZXJfc3RhdGVfdCAqLCBicGZfdV9pbnQzMiwgaW50KTsKIAotc3RydWN0IGJsb2NrICpnZW5fZ2VuZXZlKGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50KTsKK3N0cnVjdCBibG9jayAqZ2VuX2dlbmV2ZShjb21waWxlcl9zdGF0ZV90ICosIGJwZl91X2ludDMyLCBpbnQpOwogCi1zdHJ1Y3QgYmxvY2sgKmdlbl9hdG1maWVsZF9jb2RlKGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50LCBicGZfaW50MzIsCi0gICAgYnBmX3VfaW50MzIsIGludCk7Ci1zdHJ1Y3QgYmxvY2sgKmdlbl9hdG10eXBlX2FiYnJldihjb21waWxlcl9zdGF0ZV90ICosIGludCB0eXBlKTsKLXN0cnVjdCBibG9jayAqZ2VuX2F0bW11bHRpX2FiYnJldihjb21waWxlcl9zdGF0ZV90ICosIGludCB0eXBlKTsKK3N0cnVjdCBibG9jayAqZ2VuX2F0bWZpZWxkX2NvZGUoY29tcGlsZXJfc3RhdGVfdCAqLCBpbnQsIGJwZl91X2ludDMyLAorICAgIGludCwgaW50KTsKK3N0cnVjdCBibG9jayAqZ2VuX2F0bXR5cGVfYWJicmV2KGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50KTsKK3N0cnVjdCBibG9jayAqZ2VuX2F0bW11bHRpX2FiYnJldihjb21waWxlcl9zdGF0ZV90ICosIGludCk7CiAKLXN0cnVjdCBibG9jayAqZ2VuX210cDJ0eXBlX2FiYnJldihjb21waWxlcl9zdGF0ZV90ICosIGludCB0eXBlKTsKK3N0cnVjdCBibG9jayAqZ2VuX210cDJ0eXBlX2FiYnJldihjb21waWxlcl9zdGF0ZV90ICosIGludCk7CiBzdHJ1Y3QgYmxvY2sgKmdlbl9tdHAzZmllbGRfY29kZShjb21waWxlcl9zdGF0ZV90ICosIGludCwgYnBmX3VfaW50MzIsCi0gICAgYnBmX3VfaW50MzIsIGludCk7CisgICAgaW50LCBpbnQpOwogCi0jaWZuZGVmIEhBVkVfTkVUX1BGVkFSX0gKLVBDQVBfTk9SRVRVUk4KLSNlbmRpZgogc3RydWN0IGJsb2NrICpnZW5fcGZfaWZuYW1lKGNvbXBpbGVyX3N0YXRlX3QgKiwgY29uc3QgY2hhciAqKTsKLSNpZm5kZWYgSEFWRV9ORVRfUEZWQVJfSAotUENBUF9OT1JFVFVSTgotI2VuZGlmCiBzdHJ1Y3QgYmxvY2sgKmdlbl9wZl9ybnIoY29tcGlsZXJfc3RhdGVfdCAqLCBpbnQpOwotI2lmbmRlZiBIQVZFX05FVF9QRlZBUl9ICi1QQ0FQX05PUkVUVVJOCi0jZW5kaWYKIHN0cnVjdCBibG9jayAqZ2VuX3BmX3NybnIoY29tcGlsZXJfc3RhdGVfdCAqLCBpbnQpOwotI2lmbmRlZiBIQVZFX05FVF9QRlZBUl9ICi1QQ0FQX05PUkVUVVJOCi0jZW5kaWYKIHN0cnVjdCBibG9jayAqZ2VuX3BmX3J1bGVzZXQoY29tcGlsZXJfc3RhdGVfdCAqLCBjaGFyICopOwotI2lmbmRlZiBIQVZFX05FVF9QRlZBUl9ICi1QQ0FQX05PUkVUVVJOCi0jZW5kaWYKIHN0cnVjdCBibG9jayAqZ2VuX3BmX3JlYXNvbihjb21waWxlcl9zdGF0ZV90ICosIGludCk7Ci0jaWZuZGVmIEhBVkVfTkVUX1BGVkFSX0gKLVBDQVBfTk9SRVRVUk4KLSNlbmRpZgogc3RydWN0IGJsb2NrICpnZW5fcGZfYWN0aW9uKGNvbXBpbGVyX3N0YXRlX3QgKiwgaW50KTsKIAotc3RydWN0IGJsb2NrICpnZW5fcDgwMjExX3R5cGUoY29tcGlsZXJfc3RhdGVfdCAqLCBpbnQsIGludCk7Ci1zdHJ1Y3QgYmxvY2sgKmdlbl9wODAyMTFfZmNkaXIoY29tcGlsZXJfc3RhdGVfdCAqLCBpbnQpOworc3RydWN0IGJsb2NrICpnZW5fcDgwMjExX3R5cGUoY29tcGlsZXJfc3RhdGVfdCAqLCBicGZfdV9pbnQzMiwgYnBmX3VfaW50MzIpOworc3RydWN0IGJsb2NrICpnZW5fcDgwMjExX2ZjZGlyKGNvbXBpbGVyX3N0YXRlX3QgKiwgYnBmX3VfaW50MzIpOwogCiAvKgogICogUmVwcmVzZW50YXRpb24gb2YgYSBwcm9ncmFtIGFzIGEgdHJlZSBvZiBibG9ja3MsIHBsdXMgY3VycmVudCBtYXJrLgpAQCAtMzg2LDE2ICszODAsMTUgQEAKIAlpbnQgY3VyX21hcms7CiB9OwogCi12b2lkIGJwZl9vcHRpbWl6ZShjb21waWxlcl9zdGF0ZV90ICosIHN0cnVjdCBpY29kZSAqaWMpOwotdm9pZCBQQ0FQX05PUkVUVVJOIGJwZl9zeW50YXhfZXJyb3IoY29tcGlsZXJfc3RhdGVfdCAqLCBjb25zdCBjaGFyICopOwotdm9pZCBQQ0FQX05PUkVUVVJOIGJwZl9lcnJvcihjb21waWxlcl9zdGF0ZV90ICosIGNvbnN0IGNoYXIgKiwgLi4uKQoraW50IGJwZl9vcHRpbWl6ZShzdHJ1Y3QgaWNvZGUgKiwgY2hhciAqKTsKK3ZvaWQgYnBmX3NldF9lcnJvcihjb21waWxlcl9zdGF0ZV90ICosIGNvbnN0IGNoYXIgKiwgLi4uKQogICAgIFBDQVBfUFJJTlRGTElLRSgyLCAzKTsKIAotdm9pZCBmaW5pc2hfcGFyc2UoY29tcGlsZXJfc3RhdGVfdCAqLCBzdHJ1Y3QgYmxvY2sgKik7CitpbnQgZmluaXNoX3BhcnNlKGNvbXBpbGVyX3N0YXRlX3QgKiwgc3RydWN0IGJsb2NrICopOwogY2hhciAqc2R1cChjb21waWxlcl9zdGF0ZV90ICosIGNvbnN0IGNoYXIgKik7CiAKLXN0cnVjdCBicGZfaW5zbiAqaWNvZGVfdG9fZmNvZGUoY29tcGlsZXJfc3RhdGVfdCAqLCBzdHJ1Y3QgaWNvZGUgKiwKLSAgICBzdHJ1Y3QgYmxvY2sgKiwgdV9pbnQgKik7CitzdHJ1Y3QgYnBmX2luc24gKmljb2RlX3RvX2Zjb2RlKHN0cnVjdCBpY29kZSAqLCBzdHJ1Y3QgYmxvY2sgKiwgdV9pbnQgKiwKKyAgICBjaGFyICopOwogdm9pZCBzYXBwZW5kKHN0cnVjdCBzbGlzdCAqLCBzdHJ1Y3Qgc2xpc3QgKik7CiAKIC8qCmRpZmYgLS1naXQgYS9ncmFtbWFyLmMgYi9ncmFtbWFyLmMKaW5kZXggMmJlNzYwYi4uZjc2OTdlMiAxMDA2NDQKLS0tIGEvZ3JhbW1hci5jCisrKyBiL2dyYW1tYXIuYwpAQCAtMSw4ICsxLDkgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAzLjAuNC4gICovCisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMy41LjEuICAqLwogCiAvKiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwogCi0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxNSwgMjAxOC0yMDIwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4KIAogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC00MCwxMSArNDEsMTQgQEAKICAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9OCiAgICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8KIAorLyogVW5kb2N1bWVudGVkIG1hY3JvcywgZXNwZWNpYWxseSB0aG9zZSB3aG9zZSBuYW1lIHN0YXJ0IHdpdGggWVlfLAorICAgYXJlIHByaXZhdGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gIERvIG5vdCByZWx5IG9uIHRoZW0uICAqLworCiAvKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLwogI2RlZmluZSBZWUJJU09OIDEKIAogLyogQmlzb24gdmVyc2lvbi4gICovCi0jZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMy4wLjQiCisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMy41LjEiCiAKIC8qIFNrZWxldG9uIG5hbWUuICAqLwogI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKQEAgLTY2LDkgKzcwLDggQEAKICNkZWZpbmUgeXlkZWJ1ZyAgICAgICAgIHBjYXBfZGVidWcKICNkZWZpbmUgeXluZXJycyAgICAgICAgIHBjYXBfbmVycnMKIAotCi0vKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KLSNsaW5lIDI2ICJncmFtbWFyLnkiIC8qIHlhY2MuYzozMzkgICovCisvKiBGaXJzdCBwYXJ0IG9mIHVzZXIgcHJvbG9ndWUuICAqLworI2xpbmUgMjYgImdyYW1tYXIueSIKIAogLyoKICAqIENvcHlyaWdodCAoYykgMTk4OCwgMTk4OSwgMTk5MCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NgpAQCAtMjYyLDEzICsyNjUsMTIgQEAKIAlyZXR1cm4gKC0xKTsKIH0KIAotc3RhdGljIHN0cnVjdCBxdWFsIHFlcnIgPSB7IFFfVU5ERUYsIFFfVU5ERUYsIFFfVU5ERUYsIFFfVU5ERUYgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcXVhbCBxZXJyID0geyBRX1VOREVGLCBRX1VOREVGLCBRX1VOREVGLCBRX1VOREVGIH07CiAKLXN0YXRpYyBQQ0FQX05PUkVUVVJOX0RFRiB2b2lkCitzdGF0aWMgdm9pZAogeXllcnJvcih2b2lkICp5eXNjYW5uZXIgX1VfLCBjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGNvbnN0IGNoYXIgKm1zZykKIHsKLQlicGZfc3ludGF4X2Vycm9yKGNzdGF0ZSwgbXNnKTsKLQkvKiBOT1RSRUFDSEVEICovCisJYnBmX3NldF9lcnJvcihjc3RhdGUsICJjYW4ndCBwYXJzZSBmaWx0ZXIgZXhwcmVzc2lvbjogJXMiLCBtc2cpOwogfQogCiAjaWZkZWYgSEFWRV9ORVRfUEZWQVJfSApAQCAtMjgyLDggKzI4NCw4IEBACiAJCWlmIChwY2FwX3N0cmNhc2VjbXAocmVhc29uLCByZWFzb25zW2ldKSA9PSAwKQogCQkJcmV0dXJuIChpKTsKIAl9Ci0JYnBmX2Vycm9yKGNzdGF0ZSwgInVua25vd24gUEYgcmVhc29uIik7Ci0JLypOT1RSRUFDSEVEKi8KKwlicGZfc2V0X2Vycm9yKGNzdGF0ZSwgInVua25vd24gUEYgcmVhc29uIik7CisJcmV0dXJuICgtMSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTMwNiwzNSArMzA4LDU0IEBACiAJCXJldHVybiAoUEZfTk9SRFIpOwogI2VuZGlmCiAJZWxzZSB7Ci0JCWJwZl9lcnJvcihjc3RhdGUsICJ1bmtub3duIFBGIGFjdGlvbiIpOwotCQkvKk5PVFJFQUNIRUQqLworCQlicGZfc2V0X2Vycm9yKGNzdGF0ZSwgInVua25vd24gUEYgYWN0aW9uIik7CisJCXJldHVybiAoLTEpOwogCX0KIH0KICNlbHNlIC8qICFIQVZFX05FVF9QRlZBUl9IICovCi1zdGF0aWMgUENBUF9OT1JFVFVSTl9ERUYgaW50CitzdGF0aWMgaW50CiBwZnJlYXNvbl90b19udW0oY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBjb25zdCBjaGFyICpyZWFzb24gX1VfKQogewotCWJwZl9lcnJvcihjc3RhdGUsICJsaWJwY2FwIHdhcyBjb21waWxlZCBvbiBhIG1hY2hpbmUgd2l0aG91dCBwZiBzdXBwb3J0Iik7Ci0JLypOT1RSRUFDSEVEKi8KKwlicGZfc2V0X2Vycm9yKGNzdGF0ZSwgImxpYnBjYXAgd2FzIGNvbXBpbGVkIG9uIGEgbWFjaGluZSB3aXRob3V0IHBmIHN1cHBvcnQiKTsKKwlyZXR1cm4gKC0xKTsKIH0KIAotc3RhdGljIFBDQVBfTk9SRVRVUk5fREVGIGludAorc3RhdGljIGludAogcGZhY3Rpb25fdG9fbnVtKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgY29uc3QgY2hhciAqYWN0aW9uIF9VXykKIHsKLQlicGZfZXJyb3IoY3N0YXRlLCAibGlicGNhcCB3YXMgY29tcGlsZWQgb24gYSBtYWNoaW5lIHdpdGhvdXQgcGYgc3VwcG9ydCIpOwotCS8qTk9UUkVBQ0hFRCovCisJYnBmX3NldF9lcnJvcihjc3RhdGUsICJsaWJwY2FwIHdhcyBjb21waWxlZCBvbiBhIG1hY2hpbmUgd2l0aG91dCBwZiBzdXBwb3J0Iik7CisJcmV0dXJuICgtMSk7CiB9CiAjZW5kaWYgLyogSEFWRV9ORVRfUEZWQVJfSCAqLwogCisvKgorICogRm9yIGNhbGxzIHRoYXQgbWlnaHQgcmV0dXJuIGFuICJhbiBlcnJvciBvY2N1cnJlZCIgdmFsdWUuCisgKi8KKyNkZWZpbmUgQ0hFQ0tfSU5UX1ZBTCh2YWwpCWlmICh2YWwgPT0gLTEpIFlZQUJPUlQKKyNkZWZpbmUgQ0hFQ0tfUFRSX1ZBTCh2YWwpCWlmICh2YWwgPT0gTlVMTCkgWVlBQk9SVAorCiBESUFHX09GRl9CSVNPTl9CWUFDQwogCi0jbGluZSAzMzIgImdyYW1tYXIuYyIgLyogeWFjYy5jOjMzOSAgKi8KKyNsaW5lIDM0MCAiZ3JhbW1hci5jIgogCi0jIGlmbmRlZiBZWV9OVUxMUFRSCi0jICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIDIwMTEwM0wgPD0gX19jcGx1c3BsdXMKLSMgICBkZWZpbmUgWVlfTlVMTFBUUiBudWxscHRyCisjIGlmbmRlZiBZWV9DQVNUCisjICBpZmRlZiBfX2NwbHVzcGx1cworIyAgIGRlZmluZSBZWV9DQVNUKFR5cGUsIFZhbCkgc3RhdGljX2Nhc3Q8VHlwZT4gKFZhbCkKKyMgICBkZWZpbmUgWVlfUkVJTlRFUlBSRVRfQ0FTVChUeXBlLCBWYWwpIHJlaW50ZXJwcmV0X2Nhc3Q8VHlwZT4gKFZhbCkKICMgIGVsc2UKLSMgICBkZWZpbmUgWVlfTlVMTFBUUiAwCisjICAgZGVmaW5lIFlZX0NBU1QoVHlwZSwgVmFsKSAoKFR5cGUpIChWYWwpKQorIyAgIGRlZmluZSBZWV9SRUlOVEVSUFJFVF9DQVNUKFR5cGUsIFZhbCkgKChUeXBlKSAoVmFsKSkKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmbmRlZiBZWV9OVUxMUFRSCisjICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzCisjICAgaWYgMjAxMTAzTCA8PSBfX2NwbHVzcGx1cworIyAgICBkZWZpbmUgWVlfTlVMTFBUUiBudWxscHRyCisjICAgZWxzZQorIyAgICBkZWZpbmUgWVlfTlVMTFBUUiAwCisjICAgZW5kaWYKKyMgIGVsc2UKKyMgICBkZWZpbmUgWVlfTlVMTFBUUiAoKHZvaWQqKTApCiAjICBlbmRpZgogIyBlbmRpZgogCkBAIC0zNDYsOCArMzY3LDggQEAKICMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCiAjZW5kaWYKIAotLyogSW4gYSBmdXR1cmUgcmVsZWFzZSBvZiBCaXNvbiwgdGhpcyBzZWN0aW9uIHdpbGwgYmUgcmVwbGFjZWQKLSAgIGJ5ICNpbmNsdWRlICJncmFtbWFyLmgiLiAgKi8KKy8qIFVzZSBhcGkuaGVhZGVyLmluY2x1ZGUgdG8gI2luY2x1ZGUgdGhpcyBoZWFkZXIKKyAgIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgaXQgaGVyZS4gICovCiAjaWZuZGVmIFlZX1BDQVBfR1JBTU1BUl9IX0lOQ0xVREVECiAjIGRlZmluZSBZWV9QQ0FQX0dSQU1NQVJfSF9JTkNMVURFRAogLyogRGVidWcgdHJhY2VzLiAgKi8KQEAgLTQ3OSw5ICs1MDAsMTAgQEAKICAgICBIT1BDID0gMzcxLAogICAgIEhEUEMgPSAzNzIsCiAgICAgSFNMUyA9IDM3MywKLSAgICBPUiA9IDM3NCwKLSAgICBBTkQgPSAzNzUsCi0gICAgVU1JTlVTID0gMzc2CisgICAgTEVYX0VSUk9SID0gMzc0LAorICAgIE9SID0gMzc1LAorICAgIEFORCA9IDM3NiwKKyAgICBVTUlOVVMgPSAzNzcKICAgfTsKICNlbmRpZgogLyogVG9rZW5zLiAgKi8KQEAgLTYwMSwyMCArNjIzLDE5IEBACiAjZGVmaW5lIEhPUEMgMzcxCiAjZGVmaW5lIEhEUEMgMzcyCiAjZGVmaW5lIEhTTFMgMzczCi0jZGVmaW5lIE9SIDM3NAotI2RlZmluZSBBTkQgMzc1Ci0jZGVmaW5lIFVNSU5VUyAzNzYKKyNkZWZpbmUgTEVYX0VSUk9SIDM3NAorI2RlZmluZSBPUiAzNzUKKyNkZWZpbmUgQU5EIDM3NgorI2RlZmluZSBVTUlOVVMgMzc3CiAKIC8qIFZhbHVlIHR5cGUuICAqLwogI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECi0KIHVuaW9uIFlZU1RZUEUKIHsKLSNsaW5lIDI4NiAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MzU1ICAqLworI2xpbmUgMjkxICJncmFtbWFyLnkiCiAKIAlpbnQgaTsKIAlicGZfdV9pbnQzMiBoOwotCXVfY2hhciAqZTsKIAljaGFyICpzOwogCXN0cnVjdCBzdG10ICpzdG10OwogCXN0cnVjdCBhcnRoICphOwpAQCAtNjI2LDkgKzY0Nyw5IEBACiAJfSBibGs7CiAJc3RydWN0IGJsb2NrICpyYmxrOwogCi0jbGluZSA2MzAgImdyYW1tYXIuYyIgLyogeWFjYy5jOjM1NSAgKi8KLX07CisjbGluZSA2NTEgImdyYW1tYXIuYyIKIAorfTsKIHR5cGVkZWYgdW5pb24gWVlTVFlQRSBZWVNUWVBFOwogIyBkZWZpbmUgWVlTVFlQRV9JU19UUklWSUFMIDEKICMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQpAQCAtNjQwLDM2ICs2NjEsODEgQEAKIAogI2VuZGlmIC8qICFZWV9QQ0FQX0dSQU1NQVJfSF9JTkNMVURFRCAgKi8KIAotLyogQ29weSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwogCi0jbGluZSA2NDYgImdyYW1tYXIuYyIgLyogeWFjYy5jOjM1OCAgKi8KIAogI2lmZGVmIHNob3J0CiAjIHVuZGVmIHNob3J0CiAjZW5kaWYKIAotI2lmZGVmIFlZVFlQRV9VSU5UOAotdHlwZWRlZiBZWVRZUEVfVUlOVDggeXl0eXBlX3VpbnQ4OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgY2hhciB5eXR5cGVfdWludDg7CisvKiBPbiBjb21waWxlcnMgdGhhdCBkbyBub3QgZGVmaW5lIF9fUFRSRElGRl9NQVhfXyBldGMuLCBtYWtlIHN1cmUKKyAgIDxsaW1pdHMuaD4gYW5kIChpZiBhdmFpbGFibGUpIDxzdGRpbnQuaD4gYXJlIGluY2x1ZGVkCisgICBzbyB0aGF0IHRoZSBjb2RlIGNhbiBjaG9vc2UgaW50ZWdlciB0eXBlcyBvZiBhIGdvb2Qgd2lkdGguICAqLworCisjaWZuZGVmIF9fUFRSRElGRl9NQVhfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyBpZiBkZWZpbmVkIF9fU1REQ19WRVJTSU9OX18gJiYgMTk5OTAxIDw9IF9fU1REQ19WRVJTSU9OX18KKyMgIGluY2x1ZGUgPHN0ZGludC5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZpbmUgWVlfU1RESU5UX0gKKyMgZW5kaWYKICNlbmRpZgogCi0jaWZkZWYgWVlUWVBFX0lOVDgKLXR5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBlX2ludDg7CisvKiBOYXJyb3cgdHlwZXMgdGhhdCBwcm9tb3RlIHRvIGEgc2lnbmVkIHR5cGUgYW5kIHRoYXQgY2FuIHJlcHJlc2VudCBhCisgICBzaWduZWQgb3IgdW5zaWduZWQgaW50ZWdlciBvZiBhdCBsZWFzdCBOIGJpdHMuICBJbiB0YWJsZXMgdGhleSBjYW4KKyAgIHNhdmUgc3BhY2UgYW5kIGRlY3JlYXNlIGNhY2hlIHByZXNzdXJlLiAgUHJvbW90aW5nIHRvIGEgc2lnbmVkIHR5cGUKKyAgIGhlbHBzIGF2b2lkIGJ1Z3MgaW4gaW50ZWdlciBhcml0aG1ldGljLiAgKi8KKworI2lmZGVmIF9fSU5UX0xFQVNUOF9NQVhfXwordHlwZWRlZiBfX0lOVF9MRUFTVDhfVFlQRV9fIHl5dHlwZV9pbnQ4OworI2VsaWYgZGVmaW5lZCBZWV9TVERJTlRfSAordHlwZWRlZiBpbnRfbGVhc3Q4X3QgeXl0eXBlX2ludDg7CiAjZWxzZQogdHlwZWRlZiBzaWduZWQgY2hhciB5eXR5cGVfaW50ODsKICNlbmRpZgogCi0jaWZkZWYgWVlUWVBFX1VJTlQxNgotdHlwZWRlZiBZWVRZUEVfVUlOVDE2IHl5dHlwZV91aW50MTY7CisjaWZkZWYgX19JTlRfTEVBU1QxNl9NQVhfXwordHlwZWRlZiBfX0lOVF9MRUFTVDE2X1RZUEVfXyB5eXR5cGVfaW50MTY7CisjZWxpZiBkZWZpbmVkIFlZX1NURElOVF9ICit0eXBlZGVmIGludF9sZWFzdDE2X3QgeXl0eXBlX2ludDE2OwogI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHl5dHlwZV91aW50MTY7Cit0eXBlZGVmIHNob3J0IHl5dHlwZV9pbnQxNjsKICNlbmRpZgogCi0jaWZkZWYgWVlUWVBFX0lOVDE2Ci10eXBlZGVmIFlZVFlQRV9JTlQxNiB5eXR5cGVfaW50MTY7CisjaWYgZGVmaW5lZCBfX1VJTlRfTEVBU1Q4X01BWF9fICYmIF9fVUlOVF9MRUFTVDhfTUFYX18gPD0gX19JTlRfTUFYX18KK3R5cGVkZWYgX19VSU5UX0xFQVNUOF9UWVBFX18geXl0eXBlX3VpbnQ4OworI2VsaWYgKCFkZWZpbmVkIF9fVUlOVF9MRUFTVDhfTUFYX18gJiYgZGVmaW5lZCBZWV9TVERJTlRfSCBcCisgICAgICAgJiYgVUlOVF9MRUFTVDhfTUFYIDw9IElOVF9NQVgpCit0eXBlZGVmIHVpbnRfbGVhc3Q4X3QgeXl0eXBlX3VpbnQ4OworI2VsaWYgIWRlZmluZWQgX19VSU5UX0xFQVNUOF9NQVhfXyAmJiBVQ0hBUl9NQVggPD0gSU5UX01BWAordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsKICNlbHNlCi10eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7Cit0eXBlZGVmIHNob3J0IHl5dHlwZV91aW50ODsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfX1VJTlRfTEVBU1QxNl9NQVhfXyAmJiBfX1VJTlRfTEVBU1QxNl9NQVhfXyA8PSBfX0lOVF9NQVhfXwordHlwZWRlZiBfX1VJTlRfTEVBU1QxNl9UWVBFX18geXl0eXBlX3VpbnQxNjsKKyNlbGlmICghZGVmaW5lZCBfX1VJTlRfTEVBU1QxNl9NQVhfXyAmJiBkZWZpbmVkIFlZX1NURElOVF9IIFwKKyAgICAgICAmJiBVSU5UX0xFQVNUMTZfTUFYIDw9IElOVF9NQVgpCit0eXBlZGVmIHVpbnRfbGVhc3QxNl90IHl5dHlwZV91aW50MTY7CisjZWxpZiAhZGVmaW5lZCBfX1VJTlRfTEVBU1QxNl9NQVhfXyAmJiBVU0hSVF9NQVggPD0gSU5UX01BWAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB5eXR5cGVfdWludDE2OworI2Vsc2UKK3R5cGVkZWYgaW50IHl5dHlwZV91aW50MTY7CisjZW5kaWYKKworI2lmbmRlZiBZWVBUUkRJRkZfVAorIyBpZiBkZWZpbmVkIF9fUFRSRElGRl9UWVBFX18gJiYgZGVmaW5lZCBfX1BUUkRJRkZfTUFYX18KKyMgIGRlZmluZSBZWVBUUkRJRkZfVCBfX1BUUkRJRkZfVFlQRV9fCisjICBkZWZpbmUgWVlQVFJESUZGX01BWElNVU0gX19QVFJESUZGX01BWF9fCisjIGVsaWYgZGVmaW5lZCBQVFJESUZGX01BWAorIyAgaWZuZGVmIHB0cmRpZmZfdAorIyAgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICBlbmRpZgorIyAgZGVmaW5lIFlZUFRSRElGRl9UIHB0cmRpZmZfdAorIyAgZGVmaW5lIFlZUFRSRElGRl9NQVhJTVVNIFBUUkRJRkZfTUFYCisjIGVsc2UKKyMgIGRlZmluZSBZWVBUUkRJRkZfVCBsb25nCisjICBkZWZpbmUgWVlQVFJESUZGX01BWElNVU0gTE9OR19NQVgKKyMgZW5kaWYKICNlbmRpZgogCiAjaWZuZGVmIFlZU0laRV9UCkBAIC02NzcsMTUgKzc0MywyNyBAQAogIyAgZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18KICMgZWxpZiBkZWZpbmVkIHNpemVfdAogIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdAotIyBlbGlmICEgZGVmaW5lZCBZWVNJWkVfVAorIyBlbGlmIGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiAxOTk5MDEgPD0gX19TVERDX1ZFUlNJT05fXwogIyAgaW5jbHVkZSA8c3RkZGVmLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KICMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKICMgZWxzZQotIyAgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAorIyAgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkCiAjIGVuZGlmCiAjZW5kaWYKIAotI2RlZmluZSBZWVNJWkVfTUFYSU1VTSAoKFlZU0laRV9UKSAtMSkKKyNkZWZpbmUgWVlTSVpFX01BWElNVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBZWV9DQVNUIChZWVBUUkRJRkZfVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIChZWVBUUkRJRkZfTUFYSU1VTSA8IFlZX0NBU1QgKFlZU0laRV9ULCAtMSkgIFwKKyAgICAgICAgICAgID8gWVlQVFJESUZGX01BWElNVU0gICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgOiBZWV9DQVNUIChZWVNJWkVfVCwgLTEpKSkKKworI2RlZmluZSBZWVNJWkVPRihYKSBZWV9DQVNUIChZWVBUUkRJRkZfVCwgc2l6ZW9mIChYKSkKKworLyogU3RvcmVkIHN0YXRlIG51bWJlcnMgKHVzZWQgZm9yIHN0YWNrcykuICovCit0eXBlZGVmIHl5dHlwZV9pbnQxNiB5eV9zdGF0ZV90OworCisvKiBTdGF0ZSBudW1iZXJzIGluIGNvbXB1dGF0aW9ucy4gICovCit0eXBlZGVmIGludCB5eV9zdGF0ZV9mYXN0X3Q7CiAKICNpZm5kZWYgWVlfCiAjIGlmIGRlZmluZWQgWVlFTkFCTEVfTkxTICYmIFlZRU5BQkxFX05MUwpAQCAtNjk5LDMwICs3NzcsMTkgQEAKICMgZW5kaWYKICNlbmRpZgogCi0jaWZuZGVmIFlZX0FUVFJJQlVURQotIyBpZiAoZGVmaW5lZCBfX0dOVUNfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgJiYgKDIgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gMiAmJiA5NiA8PSBfX0dOVUNfTUlOT1JfXykpKSAgXAotICAgICB8fCBkZWZpbmVkIF9fU1VOUFJPX0MgJiYgMHg1MTEwIDw9IF9fU1VOUFJPX0MKLSMgIGRlZmluZSBZWV9BVFRSSUJVVEUoU3BlYykgX19hdHRyaWJ1dGVfXyhTcGVjKQorI2lmbmRlZiBZWV9BVFRSSUJVVEVfUFVSRQorIyBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDIgPCBfX0dOVUNfXyArICg5NiA8PSBfX0dOVUNfTUlOT1JfXykKKyMgIGRlZmluZSBZWV9BVFRSSUJVVEVfUFVSRSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQogIyBlbHNlCi0jICBkZWZpbmUgWVlfQVRUUklCVVRFKFNwZWMpIC8qIGVtcHR5ICovCisjICBkZWZpbmUgWVlfQVRUUklCVVRFX1BVUkUKICMgZW5kaWYKICNlbmRpZgogCi0jaWZuZGVmIFlZX0FUVFJJQlVURV9QVVJFCi0jIGRlZmluZSBZWV9BVFRSSUJVVEVfUFVSRSAgIFlZX0FUVFJJQlVURSAoKF9fcHVyZV9fKSkKLSNlbmRpZgotCiAjaWZuZGVmIFlZX0FUVFJJQlVURV9VTlVTRUQKLSMgZGVmaW5lIFlZX0FUVFJJQlVURV9VTlVTRUQgWVlfQVRUUklCVVRFICgoX191bnVzZWRfXykpCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkIF9Ob3JldHVybiBcCi0gICAgICYmICghZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fIHx8IF9fU1REQ19WRVJTSU9OX18gPCAyMDExMTIpCi0jIGlmIGRlZmluZWQgX01TQ19WRVIgJiYgMTIwMCA8PSBfTVNDX1ZFUgotIyAgZGVmaW5lIF9Ob3JldHVybiBfX2RlY2xzcGVjIChub3JldHVybikKKyMgaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAyIDwgX19HTlVDX18gKyAoNyA8PSBfX0dOVUNfTUlOT1JfXykKKyMgIGRlZmluZSBZWV9BVFRSSUJVVEVfVU5VU0VEIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKICMgZWxzZQotIyAgZGVmaW5lIF9Ob3JldHVybiBZWV9BVFRSSUJVVEUgKChfX25vcmV0dXJuX18pKQorIyAgZGVmaW5lIFlZX0FUVFJJQlVURV9VTlVTRUQKICMgZW5kaWYKICNlbmRpZgogCkBAIC03MzMsMTMgKzgwMCwxMyBAQAogIyBkZWZpbmUgWVlVU0UoRSkgLyogZW1wdHkgKi8KICNlbmRpZgogCi0jaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiA0MDcgPD0gX19HTlVDX18gKiAxMDAgKyBfX0dOVUNfTUlOT1JfXworI2lmIGRlZmluZWQgX19HTlVDX18gJiYgISBkZWZpbmVkIF9fSUNDICYmIDQwNyA8PSBfX0dOVUNfXyAqIDEwMCArIF9fR05VQ19NSU5PUl9fCiAvKiBTdXBwcmVzcyBhbiBpbmNvcnJlY3QgZGlhZ25vc3RpYyBhYm91dCB5eWx2YWwgYmVpbmcgdW5pbml0aWFsaXplZC4gICovCi0jIGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTiBcCi0gICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHB1c2giKSBcCi0gICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3VuaW5pdGlhbGl6ZWRcIiIpXAorIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwdXNoIikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVd1bmluaXRpYWxpemVkXCIiKSAgICAgICAgICAgICAgXAogICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdtYXliZS11bmluaXRpYWxpemVkXCIiKQotIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5EIFwKKyMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORCAgICAgIFwKICAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgcG9wIikKICNlbHNlCiAjIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSBWYWx1ZQpAQCAtNzUyLDYgKzgxOSwyMCBAQAogIyBkZWZpbmUgWVlfSU5JVElBTF9WQUxVRShWYWx1ZSkgLyogTm90aGluZy4gKi8KICNlbmRpZgogCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIF9fR05VQ19fICYmICEgZGVmaW5lZCBfX0lDQyAmJiA2IDw9IF9fR05VQ19fCisjIGRlZmluZSBZWV9JR05PUkVfVVNFTEVTU19DQVNUX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIHB1c2giKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3VzZWxlc3MtY2FzdFwiIikKKyMgZGVmaW5lIFlZX0lHTk9SRV9VU0VMRVNTX0NBU1RfRU5EICAgICAgICAgICAgXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwb3AiKQorI2VuZGlmCisjaWZuZGVmIFlZX0lHTk9SRV9VU0VMRVNTX0NBU1RfQkVHSU4KKyMgZGVmaW5lIFlZX0lHTk9SRV9VU0VMRVNTX0NBU1RfQkVHSU4KKyMgZGVmaW5lIFlZX0lHTk9SRV9VU0VMRVNTX0NBU1RfRU5ECisjZW5kaWYKKworCisjZGVmaW5lIFlZX0FTU0VSVChFKSAoKHZvaWQpICgwICYmIChFKSkpCiAKICNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UKIApAQCAtODI4LDE3ICs5MDksMTcgQEAKIC8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwogdW5pb24geXlhbGxvYwogewotICB5eXR5cGVfaW50MTYgeXlzc19hbGxvYzsKKyAgeXlfc3RhdGVfdCB5eXNzX2FsbG9jOwogICBZWVNUWVBFIHl5dnNfYWxsb2M7CiB9OwogCiAvKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLwotIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCisjIGRlZmluZSBZWVNUQUNLX0dBUF9NQVhJTVVNIChZWVNJWkVPRiAodW5pb24geXlhbGxvYykgLSAxKQogCiAvKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgKICAgIE4gZWxlbWVudHMuICAqLwogIyBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCi0gICAgICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNUWVBFKSkgXAorICAgICAoKE4pICogKFlZU0laRU9GICh5eV9zdGF0ZV90KSArIFlZU0laRU9GIChZWVNUWVBFKSkgXAogICAgICAgKyBZWVNUQUNLX0dBUF9NQVhJTVVNKQogCiAjIGRlZmluZSBZWUNPUFlfTkVFREVEIDEKQEAgLTg1MSwxMSArOTMyLDExIEBACiAjIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBTdGFjaykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFlZU0laRV9UIHl5bmV3Ynl0ZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFlZUFRSRElGRl9UIHl5bmV3Ynl0ZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIFlZQ09QWSAoJnl5cHRyLT5TdGFja19hbGxvYywgU3RhY2ssIHl5c2l6ZSk7ICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIFN0YWNrID0gJnl5cHRyLT5TdGFja19hbGxvYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKLSAgICAgICAgeXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogWVlTSVpFT0YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCisgICAgICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBZWVNJWkVPRiAoKnl5cHRyKTsgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgd2hpbGUgKDApCiAKQEAgLTg2NywxMiArOTQ4LDEyIEBACiAjIGlmbmRlZiBZWUNPUFkKICMgIGlmIGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9fR05VQ19fCiAjICAgZGVmaW5lIFlZQ09QWShEc3QsIFNyYywgQ291bnQpIFwKLSAgICAgIF9fYnVpbHRpbl9tZW1jcHkgKERzdCwgU3JjLCAoQ291bnQpICogc2l6ZW9mICgqKFNyYykpKQorICAgICAgX19idWlsdGluX21lbWNweSAoRHN0LCBTcmMsIFlZX0NBU1QgKFlZU0laRV9ULCAoQ291bnQpKSAqIHNpemVvZiAoKihTcmMpKSkKICMgIGVsc2UKICMgICBkZWZpbmUgWVlDT1BZKERzdCwgU3JjLCBDb3VudCkgICAgICAgICAgICAgIFwKICAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBZWVNJWkVfVCB5eWk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBZWVBUUkRJRkZfVCB5eWk7ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKSAgIFwKICAgICAgICAgICAgIChEc3QpW3l5aV0gPSAoU3JjKVt5eWldOyAgICAgICAgICAgIFwKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTg4NCwxMCArOTY1LDEwIEBACiAvKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3RhdGUuICAqLwogI2RlZmluZSBZWUZJTkFMICAzCiAvKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KLSNkZWZpbmUgWVlMQVNUICAgNzg4CisjZGVmaW5lIFlZTEFTVCAgIDc3NQogCiAvKiBZWU5UT0tFTlMgLS0gTnVtYmVyIG9mIHRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTlRPS0VOUyAgMTM5CisjZGVmaW5lIFlZTlRPS0VOUyAgMTQwCiAvKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCiAjZGVmaW5lIFlZTk5UUyAgNDcKIC8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCkBAIC04OTUsMzEgKzk3NiwzMiBAQAogLyogWVlOU1RBVEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLwogI2RlZmluZSBZWU5TVEFURVMgIDI5NAogCi0vKiBZWVRSQU5TTEFURVtZWVhdIC0tIFN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWVggYXMgcmV0dXJuZWQKLSAgIGJ5IHl5bGV4LCB3aXRoIG91dC1vZi1ib3VuZHMgY2hlY2tpbmcuICAqLwogI2RlZmluZSBZWVVOREVGVE9LICAyCi0jZGVmaW5lIFlZTUFYVVRPSyAgIDM3NgorI2RlZmluZSBZWU1BWFVUT0sgICAzNzcKIAorCisvKiBZWVRSQU5TTEFURShUT0tFTi1OVU0pIC0tIFN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBUT0tFTi1OVU0KKyAgIGFzIHJldHVybmVkIGJ5IHl5bGV4LCB3aXRoIG91dC1vZi1ib3VuZHMgY2hlY2tpbmcuICAqLwogI2RlZmluZSBZWVRSQU5TTEFURShZWVgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCisgICgwIDw9IChZWVgpICYmIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQogCiAvKiBZWVRSQU5TTEFURVtUT0tFTi1OVU1dIC0tIFN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBUT0tFTi1OVU0KLSAgIGFzIHJldHVybmVkIGJ5IHl5bGV4LCB3aXRob3V0IG91dC1vZi1ib3VuZHMgY2hlY2tpbmcuICAqLworICAgYXMgcmV0dXJuZWQgYnkgeXlsZXguICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtdID0KIHsKICAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCiAgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgMTIxLCAgICAgMiwgICAgIDIsICAgICAyLCAgIDEzNywgICAxMjMsICAgICAyLAotICAgICAxMzAsICAgMTI5LCAgIDEyNiwgICAxMjQsICAgICAyLCAgIDEyNSwgICAgIDIsICAgMTI3LCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgMTM2LCAgICAgMiwKLSAgICAgMTMzLCAgIDEzMiwgICAxMzEsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAxMjIsICAgICAyLCAgICAgMiwgICAgIDIsICAgMTM4LCAgIDEyNCwgICAgIDIsCisgICAgIDEzMSwgICAxMzAsICAgMTI3LCAgIDEyNSwgICAgIDIsICAgMTI2LCAgICAgMiwgICAxMjgsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAxMzcsICAgICAyLAorICAgICAxMzQsICAgMTMzLCAgIDEzMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCiAgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgMTM0LCAgICAgMiwgICAxMzUsICAgMTM4LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAxMzUsICAgICAyLCAgIDEzNiwgICAxMzksICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAxMjIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgIDEyMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAogICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCiAgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKICAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLApAQCAtOTQ0LDM2ICsxMDI2LDM2IEBACiAgICAgICA4NSwgICAgODYsICAgIDg3LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICA5NCwKICAgICAgIDk1LCAgICA5NiwgICAgOTcsICAgIDk4LCAgICA5OSwgICAxMDAsICAgMTAxLCAgIDEwMiwgICAxMDMsICAgMTA0LAogICAgICAxMDUsICAgMTA2LCAgIDEwNywgICAxMDgsICAgMTA5LCAgIDExMCwgICAxMTEsICAgMTEyLCAgIDExMywgICAxMTQsCi0gICAgIDExNSwgICAxMTYsICAgMTE3LCAgIDExOCwgICAxMTksICAgMTIwLCAgIDEyOAorICAgICAxMTUsICAgMTE2LCAgIDExNywgICAxMTgsICAgMTE5LCAgIDEyMCwgICAxMjEsICAgMTI5CiB9OwogCiAjaWYgWVlERUJVRwogICAvKiBZWVJMSU5FW1lZTl0gLS0gU291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxpbmVbXSA9CitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cmxpbmVbXSA9CiB7Ci0gICAgICAgMCwgICAzNjAsICAgMzYwLCAgIDM2NCwgICAzNjYsICAgMzY4LCAgIDM2OSwgICAzNzAsICAgMzcxLCAgIDM3MiwKLSAgICAgMzc0LCAgIDM3NiwgICAzNzgsICAgMzc5LCAgIDM4MSwgICAzODMsICAgMzg0LCAgIDM4NiwgICAzODgsICAgNDAxLAotICAgICA0MTAsICAgNDE5LCAgIDQyOCwgICA0MzcsICAgNDM5LCAgIDQ0MSwgICA0NDMsICAgNDQ0LCAgIDQ0NSwgICA0NDcsCi0gICAgIDQ0OSwgICA0NTEsICAgNDUyLCAgIDQ1NCwgICA0NTUsICAgNDU2LCAgIDQ1NywgICA0NTgsICAgNDU5LCAgIDQ2MSwKLSAgICAgNDYyLCAgIDQ2MywgICA0NjQsICAgNDY2LCAgIDQ2OCwgICA0NjksICAgNDcwLCAgIDQ3MSwgICA0NzIsICAgNDczLAotICAgICA0NzYsICAgNDc3LCAgIDQ4MCwgICA0ODEsICAgNDgyLCAgIDQ4MywgICA0ODQsICAgNDg1LCAgIDQ4NiwgICA0ODcsCi0gICAgIDQ4OCwgICA0ODksICAgNDkwLCAgIDQ5MSwgICA0OTQsICAgNDk1LCAgIDQ5NiwgICA0OTcsICAgNTAwLCAgIDUwMiwKLSAgICAgNTAzLCAgIDUwNCwgICA1MDUsICAgNTA2LCAgIDUwNywgICA1MDgsICAgNTA5LCAgIDUxMCwgICA1MTEsICAgNTEyLAotICAgICA1MTMsICAgNTE0LCAgIDUxNSwgICA1MTYsICAgNTE3LCAgIDUxOCwgICA1MTksICAgNTIwLCAgIDUyMSwgICA1MjIsCi0gICAgIDUyMywgICA1MjQsICAgNTI1LCAgIDUyNiwgICA1MjcsICAgNTI4LCAgIDUyOSwgICA1MzAsICAgNTMxLCAgIDUzMiwKLSAgICAgNTMzLCAgIDUzNCwgICA1MzUsICAgNTM2LCAgIDUzNywgICA1MzgsICAgNTM5LCAgIDU0MCwgICA1NDIsICAgNTQzLAotICAgICA1NDQsICAgNTQ1LCAgIDU0NiwgICA1NDcsICAgNTQ4LCAgIDU0OSwgICA1NTAsICAgNTUxLCAgIDU1MiwgICA1NTMsCi0gICAgIDU1NCwgICA1NTUsICAgNTU2LCAgIDU1NywgICA1NTgsICAgNTU5LCAgIDU2MCwgICA1NjMsICAgNTY0LCAgIDU2NSwKLSAgICAgNTY2LCAgIDU2NywgICA1NjgsICAgNTcxLCAgIDU3NiwgICA1NzksICAgNTgzLCAgIDU4NiwgICA1ODcsICAgNTkzLAotICAgICA1OTQsICAgNjE0LCAgIDYzMCwgICA2MzEsICAgNjUyLCAgIDY1NSwgICA2NTYsICAgNjY5LCAgIDY3MCwgICA2NzMsCi0gICAgIDY3NiwgICA2NzcsICAgNjc4LCAgIDY4MCwgICA2ODEsICAgNjgyLCAgIDY4NCwgICA2ODUsICAgNjg3LCAgIDY4OCwKLSAgICAgNjg5LCAgIDY5MCwgICA2OTEsICAgNjkyLCAgIDY5MywgICA2OTQsICAgNjk1LCAgIDY5NiwgICA2OTcsICAgNjk4LAotICAgICA2OTksICAgNzAwLCAgIDcwMSwgICA3MDMsICAgNzA0LCAgIDcwNSwgICA3MDYsICAgNzA3LCAgIDcwOSwgICA3MTAsCi0gICAgIDcxMiwgICA3MTMsICAgNzE0LCAgIDcxNSwgICA3MTYsICAgNzE3LCAgIDcxOCwgICA3MjAsICAgNzIxLCAgIDcyMiwKLSAgICAgNzIzLCAgIDcyNiwgICA3MjcsICAgNzI5LCAgIDczMCwgICA3MzEsICAgNzMyLCAgIDczNCwgICA3NDEsICAgNzQyLAotICAgICA3NDUsICAgNzQ2LCAgIDc0NywgICA3NDgsICAgNzQ5LCAgIDc1MCwgICA3NTMsICAgNzU0LCAgIDc1NSwgICA3NTYsCi0gICAgIDc1NywgICA3NTgsICAgNzU5LCAgIDc2MCwgICA3NjIsICAgNzYzLCAgIDc2NCwgICA3NjUsICAgNzY3LCAgIDc4MCwKLSAgICAgNzgxCisgICAgICAgMCwgICAzNjIsICAgMzYyLCAgIDM2NiwgICAzNjgsICAgMzcwLCAgIDM3MSwgICAzNzIsICAgMzczLCAgIDM3NCwKKyAgICAgMzc2LCAgIDM3OCwgICAzODAsICAgMzgxLCAgIDM4MywgICAzODUsICAgMzg2LCAgIDM4OCwgICAzOTAsICAgNDA5LAorICAgICA0MjAsICAgNDMxLCAgIDQzMiwgICA0MzMsICAgNDM1LCAgIDQzNywgICA0MzksICAgNDQwLCAgIDQ0MSwgICA0NDMsCisgICAgIDQ0NSwgICA0NDcsICAgNDQ4LCAgIDQ1MCwgICA0NTEsICAgNDUyLCAgIDQ1MywgICA0NTQsICAgNDYyLCAgIDQ2NCwKKyAgICAgNDY1LCAgIDQ2NiwgICA0NjcsICAgNDY5LCAgIDQ3MSwgICA0NzIsICAgNDczLCAgIDQ3NCwgICA0NzUsICAgNDc2LAorICAgICA0NzksICAgNDgwLCAgIDQ4MywgICA0ODQsICAgNDg1LCAgIDQ4NiwgICA0ODcsICAgNDg4LCAgIDQ4OSwgICA0OTAsCisgICAgIDQ5MSwgICA0OTIsICAgNDkzLCAgIDQ5NCwgICA0OTcsICAgNDk4LCAgIDQ5OSwgICA1MDAsICAgNTAzLCAgIDUwNSwKKyAgICAgNTA2LCAgIDUwNywgICA1MDgsICAgNTA5LCAgIDUxMCwgICA1MTEsICAgNTEyLCAgIDUxMywgICA1MTQsICAgNTE1LAorICAgICA1MTYsICAgNTE3LCAgIDUxOCwgICA1MTksICAgNTIwLCAgIDUyMSwgICA1MjIsICAgNTIzLCAgIDUyNCwgICA1MjUsCisgICAgIDUyNiwgICA1MjcsICAgNTI4LCAgIDUyOSwgICA1MzAsICAgNTMxLCAgIDUzMiwgICA1MzMsICAgNTM0LCAgIDUzNSwKKyAgICAgNTM2LCAgIDUzNywgICA1MzgsICAgNTM5LCAgIDU0MCwgICA1NDEsICAgNTQyLCAgIDU0MywgICA1NDUsICAgNTQ2LAorICAgICA1NDcsICAgNTQ4LCAgIDU0OSwgICA1NTAsICAgNTUxLCAgIDU1MiwgICA1NTMsICAgNTU0LCAgIDU1NSwgICA1NTYsCisgICAgIDU1NywgICA1NTgsICAgNTU5LCAgIDU2MCwgICA1NjEsICAgNTYyLCAgIDU2MywgICA1NjYsICAgNTY3LCAgIDU2OCwKKyAgICAgNTY5LCAgIDU3MCwgICA1NzEsICAgNTc0LCAgIDU3OSwgICA1ODIsICAgNTg2LCAgIDU4OSwgICA1OTAsICAgNTk5LAorICAgICA2MDAsICAgNjIzLCAgIDY0MCwgICA2NDEsICAgNjY1LCAgIDY2OCwgICA2NjksICAgNjg1LCAgIDY4NiwgICA2ODksCisgICAgIDY5MiwgICA2OTMsICAgNjk0LCAgIDY5NiwgICA2OTcsICAgNjk4LCAgIDcwMCwgICA3MDEsICAgNzAzLCAgIDcwNCwKKyAgICAgNzA1LCAgIDcwNiwgICA3MDcsICAgNzA4LCAgIDcwOSwgICA3MTAsICAgNzExLCAgIDcxMiwgICA3MTMsICAgNzE0LAorICAgICA3MTUsICAgNzE2LCAgIDcxNywgICA3MTksICAgNzIwLCAgIDcyMSwgICA3MjIsICAgNzIzLCAgIDcyNSwgICA3MjYsCisgICAgIDcyOCwgICA3MjksICAgNzMwLCAgIDczMSwgICA3MzIsICAgNzMzLCAgIDczNCwgICA3MzYsICAgNzM3LCAgIDczOCwKKyAgICAgNzM5LCAgIDc0MiwgICA3NDMsICAgNzQ1LCAgIDc0NiwgICA3NDcsICAgNzQ4LCAgIDc1MCwgICA3NTcsICAgNzU4LAorICAgICA3NjEsICAgNzYyLCAgIDc2MywgICA3NjQsICAgNzY1LCAgIDc2NiwgICA3NjksICAgNzcwLCAgIDc3MSwgICA3NzIsCisgICAgIDc3MywgICA3NzQsICAgNzc1LCAgIDc3NiwgICA3NzgsICAgNzc5LCAgIDc4MCwgICA3ODEsICAgNzgzLCAgIDc5NiwKKyAgICAgNzk3CiB9OwogI2VuZGlmCiAKQEAgLTk5NiwyMyArMTA3OCwyMyBAQAogICAiTkVUQkVVSSIsICJMQU5FIiwgIkxMQyIsICJNRVRBQyIsICJCQ0MiLCAiU0MiLCAiSUxNSUMiLCAiT0FNRjRFQyIsCiAgICJPQU1GNFNDIiwgIk9BTSIsICJPQU1GNCIsICJDT05ORUNUTVNHIiwgIk1FVEFDT05ORUNUIiwgIlZQSSIsICJWQ0kiLAogICAiUkFESU8iLCAiRklTVSIsICJMU1NVIiwgIk1TVSIsICJIRklTVSIsICJITFNTVSIsICJITVNVIiwgIlNJTyIsICJPUEMiLAotICAiRFBDIiwgIlNMUyIsICJIU0lPIiwgIkhPUEMiLCAiSERQQyIsICJIU0xTIiwgIk9SIiwgIkFORCIsICInISciLCAiJ3wnIiwKLSAgIicmJyIsICInKyciLCAiJy0nIiwgIicqJyIsICInLyciLCAiVU1JTlVTIiwgIicpJyIsICInKCciLCAiJz4nIiwgIic9JyIsCi0gICInPCciLCAiJ1snIiwgIiddJyIsICInOiciLCAiJyUnIiwgIideJyIsICIkYWNjZXB0IiwgInByb2ciLCAibnVsbCIsCi0gICJleHByIiwgImFuZCIsICJvciIsICJpZCIsICJuaWQiLCAibm90IiwgInBhcmVuIiwgInBpZCIsICJxaWQiLCAidGVybSIsCi0gICJoZWFkIiwgInJ0ZXJtIiwgInBxdWFsIiwgImRxdWFsIiwgImFxdWFsIiwgIm5kYXF1YWwiLCAicG5hbWUiLCAib3RoZXIiLAotICAicGZ2YXIiLCAicDgwMjExIiwgInR5cGUiLCAic3VidHlwZSIsICJ0eXBlX3N1YnR5cGUiLCAicGxsYyIsICJkaXIiLAotICAicmVhc29uIiwgImFjdGlvbiIsICJyZWxvcCIsICJpcmVsb3AiLCAiYXJ0aCIsICJuYXJ0aCIsICJieXRlb3AiLCAicG51bSIsCi0gICJhdG10eXBlIiwgImF0bW11bHRpdHlwZSIsICJhdG1maWVsZCIsICJhdG12YWx1ZSIsICJhdG1maWVsZHZhbHVlIiwKLSAgImF0bWxpc3R2YWx1ZSIsICJtdHAydHlwZSIsICJtdHAzZmllbGQiLCAibXRwM3ZhbHVlIiwgIm10cDNmaWVsZHZhbHVlIiwKLSAgIm10cDNsaXN0dmFsdWUiLCBZWV9OVUxMUFRSCisgICJEUEMiLCAiU0xTIiwgIkhTSU8iLCAiSE9QQyIsICJIRFBDIiwgIkhTTFMiLCAiTEVYX0VSUk9SIiwgIk9SIiwgIkFORCIsCisgICInISciLCAiJ3wnIiwgIicmJyIsICInKyciLCAiJy0nIiwgIicqJyIsICInLyciLCAiVU1JTlVTIiwgIicpJyIsICInKCciLAorICAiJz4nIiwgIic9JyIsICInPCciLCAiJ1snIiwgIiddJyIsICInOiciLCAiJyUnIiwgIideJyIsICIkYWNjZXB0IiwKKyAgInByb2ciLCAibnVsbCIsICJleHByIiwgImFuZCIsICJvciIsICJpZCIsICJuaWQiLCAibm90IiwgInBhcmVuIiwgInBpZCIsCisgICJxaWQiLCAidGVybSIsICJoZWFkIiwgInJ0ZXJtIiwgInBxdWFsIiwgImRxdWFsIiwgImFxdWFsIiwgIm5kYXF1YWwiLAorICAicG5hbWUiLCAib3RoZXIiLCAicGZ2YXIiLCAicDgwMjExIiwgInR5cGUiLCAic3VidHlwZSIsICJ0eXBlX3N1YnR5cGUiLAorICAicGxsYyIsICJkaXIiLCAicmVhc29uIiwgImFjdGlvbiIsICJyZWxvcCIsICJpcmVsb3AiLCAiYXJ0aCIsICJuYXJ0aCIsCisgICJieXRlb3AiLCAicG51bSIsICJhdG10eXBlIiwgImF0bW11bHRpdHlwZSIsICJhdG1maWVsZCIsICJhdG12YWx1ZSIsCisgICJhdG1maWVsZHZhbHVlIiwgImF0bWxpc3R2YWx1ZSIsICJtdHAydHlwZSIsICJtdHAzZmllbGQiLCAibXRwM3ZhbHVlIiwKKyAgIm10cDNmaWVsZHZhbHVlIiwgIm10cDNsaXN0dmFsdWUiLCBZWV9OVUxMUFRSCiB9OwogI2VuZGlmCiAKICMgaWZkZWYgWVlQUklOVAogLyogWVlUT0tOVU1bTlVNXSAtLSAoRXh0ZXJuYWwpIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIHRoZQogICAgKGludGVybmFsKSBzeW1ib2wgbnVtYmVyIE5VTSAod2hpY2ggbXVzdCBiZSB0aGF0IG9mIGEgdG9rZW4pLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQorc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXRva251bVtdID0KIHsKICAgICAgICAwLCAgIDI1NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAyNjAsICAgMjYxLCAgIDI2MiwgICAyNjMsICAgMjY0LAogICAgICAyNjUsICAgMjY2LCAgIDI2NywgICAyNjgsICAgMjY5LCAgIDI3MCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAyNzQsCkBAIC0xMDI2LDU1ICsxMTA4LDU1IEBACiAgICAgIDM0NSwgICAzNDYsICAgMzQ3LCAgIDM0OCwgICAzNDksICAgMzUwLCAgIDM1MSwgICAzNTIsICAgMzUzLCAgIDM1NCwKICAgICAgMzU1LCAgIDM1NiwgICAzNTcsICAgMzU4LCAgIDM1OSwgICAzNjAsICAgMzYxLCAgIDM2MiwgICAzNjMsICAgMzY0LAogICAgICAzNjUsICAgMzY2LCAgIDM2NywgICAzNjgsICAgMzY5LCAgIDM3MCwgICAzNzEsICAgMzcyLCAgIDM3MywgICAzNzQsCi0gICAgIDM3NSwgICAgMzMsICAgMTI0LCAgICAzOCwgICAgNDMsICAgIDQ1LCAgICA0MiwgICAgNDcsICAgMzc2LCAgICA0MSwKLSAgICAgIDQwLCAgICA2MiwgICAgNjEsICAgIDYwLCAgICA5MSwgICAgOTMsICAgIDU4LCAgICAzNywgICAgOTQKKyAgICAgMzc1LCAgIDM3NiwgICAgMzMsICAgMTI0LCAgICAzOCwgICAgNDMsICAgIDQ1LCAgICA0MiwgICAgNDcsICAgMzc3LAorICAgICAgNDEsICAgIDQwLCAgICA2MiwgICAgNjEsICAgIDYwLCAgICA5MSwgICAgOTMsICAgIDU4LCAgICAzNywgICAgOTQKIH07CiAjIGVuZGlmCiAKLSNkZWZpbmUgWVlQQUNUX05JTkYgLTIxNgorI2RlZmluZSBZWVBBQ1RfTklORiAoLTIxNikKIAotI2RlZmluZSB5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdChZeXN0YXRlKSBcCi0gICghISgoWXlzdGF0ZSkgPT0gKC0yMTYpKSkKKyNkZWZpbmUgeXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQoWXluKSBcCisgICgoWXluKSA9PSBZWVBBQ1RfTklORikKIAotI2RlZmluZSBZWVRBQkxFX05JTkYgLTQyCisjZGVmaW5lIFlZVEFCTEVfTklORiAoLTQyKQogCi0jZGVmaW5lIHl5dGFibGVfdmFsdWVfaXNfZXJyb3IoWXl0YWJsZV92YWx1ZSkgXAorI2RlZmluZSB5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yKFl5bikgXAogICAwCiAKICAgLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCiAgICAgIFNUQVRFLU5VTS4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGFjdFtdID0KIHsKLSAgICAtMjE2LCAgICAyNCwgICAyNTcsICAtMjE2LCAgICAgMCwgICAgMTIsICAgIDE3LCAgLTIxNiwgIC0yMTYsICAtMjE2LAorICAgIC0yMTYsICAgIDMyLCAgIDI1NywgIC0yMTYsICAgIC0xLCAgICAxMiwgICAgMjgsICAtMjE2LCAgLTIxNiwgIC0yMTYsCiAgICAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwKLSAgICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAgIDE2LAotICAgICAgMjUsICAgIDI5LCAgICA3MiwgICAtMTgsICAgIDU1LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsCi0gICAgLTIxNiwgICAtMjUsICAgLTI1LCAgLTIxNiwgICAtMjUsICAgLTI1LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwKKyAgICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAgIDI1LAorICAgICAgMzcsICAgIDMxLCAgICA0MywgICAtMjUsICAgIDQ4LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsCisgICAgLTIxNiwgICAtMzYsICAgLTM2LCAgLTIxNiwgICAtMzYsICAgLTM2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwKICAgICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LAogICAgIC0yMTYsICAgLTI0LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsCiAgICAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwKICAgICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LAotICAgICA2MDQsICAtMjE2LCAgIC0zMCwgICA0ODksICAgNDg5LCAgLTIxNiwgICAxMjUsICAtMjE2LCAgIDczNCwgICAgIDMsCi0gICAgLTIxNiwgIC0yMTYsICAtMjE2LCAgIDE4MywgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAgIC01LCAgLTIxNiwKLSAgICAgIDM5LCAgLTIxNiwgIC0yMTYsICAgLTU0LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LAotICAgIC0yMTYsICAtMjE2LCAgLTIxNiwgICAtMjUsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsCi0gICAgIDYwNCwgICAtMTYsICAtMTA4LCAgLTIxNiwgIC0yMTYsICAgMzczLCAgIDM3MywgIC0yMTYsICAtMTAzLCAgIC0xMCwKLSAgICAgICAyLCAgLTIxNiwgIC0yMTYsICAgIC03LCAgICAxMSwgIC0yMTYsICAtMjE2LCAgLTIxNiwgICAxMjUsICAgMTI1LAotICAgIC0yMTYsICAgIC0zLCAgICAyMSwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsCi0gICAgLTIxNiwgIC0yMTYsICAgLTEyLCAgICA3NywgICAgLTksICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwKLSAgICAtMjE2LCAgICA3OCwgIC0yMTYsICAtMjE2LCAgLTIxNiwgICA2MDQsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAgNjA0LAotICAgICA2MDQsICAgNjA0LCAgIDYwNCwgICA2MDQsICAgNjA0LCAgIDYwNCwgICA2MDQsICAtMjE2LCAgLTIxNiwgIC0yMTYsCi0gICAgIDYwNCwgICA2MDQsICAgNjA0LCAgIDYwNCwgIC0yMTYsICAgMTExLCAgIDExMywgICAxMTQsICAtMjE2LCAgLTIxNiwKLSAgICAtMjE2LCAgIDExNSwgICAxMjQsICAgMTI2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LAotICAgIC0yMTYsICAgMTMxLCAgICAgMiwgICA1NzUsICAtMjE2LCAgIDM3MywgICAzNzMsICAtMjE2LCAgICAxMCwgIC0yMTYsCi0gICAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgICAxMTIsICAgMTM3LCAgIDEzOCwgIC0yMTYsICAtMjE2LCAgICA0NywKLSAgICAgLTMwLCAgICAgMiwgICAxNzMsICAgMTc2LCAgIDE3OCwgICAxODYsICAtMjE2LCAgLTIxNiwgICAxNDMsICAtMjE2LAotICAgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgIDEyNywgICAtNjQsICAgLTY0LCAgIDU4MCwgICA1OTgsCi0gICAgLTEwNCwgIC0xMDQsICAtMTA4LCAgLTEwOCwgICA1NzUsICAgNTc1LCAgIDU3NSwgICA1NzUsICAtMjE2LCAgIC05OCwKLSAgICAtMjE2LCAgLTIxNiwgIC0yMTYsICAgLTQ3LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgIC00OSwgIC0yMTYsICAtMjE2LAotICAgIC0yMTYsICAtMjE2LCAgIDEyNSwgICAxMjUsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgICAtMSwgIC0yMTYsCi0gICAgIDE1NiwgIC0yMTYsICAgMTExLCAgLTIxNiwgICAxMTUsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwKLSAgICAgIDU5LCAgLTIxNiwgIC0yMTYsICAtMjE2CisgICAgIDYwNywgIC0yMTYsICAgIDU0LCAgIDQ5MSwgICA0OTEsICAtMjE2LCAgIC0zNCwgIC0yMTYsICAgNzIxLCAgICAgMiwKKyAgICAtMjE2LCAgLTIxNiwgIC0yMTYsICAgMTA1LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgICAgMTcsICAtMjE2LAorICAgICAgMjEsICAtMjE2LCAgLTIxNiwgICAgMzMsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsCisgICAgLTIxNiwgIC0yMTYsICAtMjE2LCAgIC0zNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwKKyAgICAgNjA3LCAgICAgNiwgICAgMzgsICAtMjE2LCAgLTIxNiwgICAzNzQsICAgMzc0LCAgLTIxNiwgIC0xMDAsICAgLTIwLAorICAgICAgMjksICAtMjE2LCAgLTIxNiwgICAgMTEsICAgICA4LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgIC0zNCwgICAtMzQsCisgICAgLTIxNiwgICAgNjAsICAgIDY1LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwKKyAgICAtMjE2LCAgLTIxNiwgICAgLTYsICAgMTA5LCAgICAgMSwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LAorICAgIC0yMTYsICAgIDgwLCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgIDYwNywgIC0yMTYsICAtMjE2LCAgLTIxNiwgICA2MDcsCisgICAgIDYwNywgICA2MDcsICAgNjA3LCAgIDYwNywgICA2MDcsICAgNjA3LCAgIDYwNywgIC0yMTYsICAtMjE2LCAgLTIxNiwKKyAgICAgNjA3LCAgIDYwNywgICA2MDcsICAgNjA3LCAgLTIxNiwgICAxMjcsICAgMTM1LCAgIDE0NywgIC0yMTYsICAtMjE2LAorICAgIC0yMTYsICAgMTU2LCAgIDE1NywgICAxNTgsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsCisgICAgLTIxNiwgICAxNTksICAgIDI5LCAgIDE4MSwgIC0yMTYsICAgMzc0LCAgIDM3NCwgIC0yMTYsICAgIDEwLCAgLTIxNiwKKyAgICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgIDEzNiwgICAxNjEsICAgMTYyLCAgLTIxNiwgIC0yMTYsICAgIDc0LAorICAgICAgNTQsICAgIDI5LCAgIDIwMSwgICAyMDIsICAgMjA0LCAgIDIwNSwgIC0yMTYsICAtMjE2LCAgIDE2MywgIC0yMTYsCisgICAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAgIDY0LCAgIC01NiwgICAtNTYsICAgNTc4LCAgIDU4MiwKKyAgICAgLTc3LCAgIC03NywgICAgMzgsICAgIDM4LCAgIDE4MSwgICAxODEsICAgMTgxLCAgIDE4MSwgIC0yMTYsICAgLTk3LAorICAgIC0yMTYsICAtMjE2LCAgLTIxNiwgICAtODMsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAgLTU0LCAgLTIxNiwgIC0yMTYsCisgICAgLTIxNiwgIC0yMTYsICAgLTM0LCAgIC0zNCwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAgICA0LCAgLTIxNiwKKyAgICAgMTcyLCAgLTIxNiwgICAxMjcsICAtMjE2LCAgIDE1NiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LAorICAgICAgNzUsICAtMjE2LCAgLTIxNiwgIC0yMTYKIH07CiAKICAgLyogWVlERUZBQ1RbU1RBVEUtTlVNXSAtLSBEZWZhdWx0IHJlZHVjdGlvbiBudW1iZXIgaW4gc3RhdGUgU1RBVEUtTlVNLgpAQCAtMTExNywxMSArMTE5OSwxMSBAQAogICAvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBnb3RvW10gPQogewotICAgIC0yMTYsICAtMjE2LCAgLTIxNiwgICAxOTMsICAgLTM0LCAgLTIxNSwgICAtOTAsICAtMTM1LCAgICAgNywgICAgLTIsCi0gICAgLTIxNiwgIC0yMTYsICAgLTgwLCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgICAgMjYsICAtMjE2LCAgICAgOSwKKyAgICAtMjE2LCAgLTIxNiwgIC0yMTYsICAgMjEwLCAgIC0xNSwgIC0yMTUsICAgLTkwLCAgLTEzNSwgICAgIDcsICAgIC0yLAorICAgIC0yMTYsICAtMjE2LCAgIC04MCwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAgIDQ1LCAgLTIxNiwgICAgIDksCiAgICAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTIxNiwKLSAgICAgLTQzLCAgICAgNSwgICAtMjYsICAgLTkyLCAgLTIxNiwgICAtMzcsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LAotICAgIC0xNzUsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTE3NCwgIC0yMTYKKyAgICAgIDUwLCAgICA2MywgICAtNjYsICAgLTc4LCAgLTIxNiwgICAtMzcsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LAorICAgIC0xNzgsICAtMjE2LCAgLTIxNiwgIC0yMTYsICAtMjE2LCAgLTE3OSwgIC0yMTYKIH07CiAKICAgLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLwpAQCAtMTEzOSwxNzUgKzEyMjEsMTczIEBACiAgICAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5dGFibGVbXSA9CiB7Ci0gICAgICA5NCwgICAyMjQsICAgMTM5LCAgIC00MSwgICAxMjQsICAgMTI1LCAgIDE0NiwgICAxMjYsICAgMTI3LCAgICA5MywKLSAgICAgLTEzLCAgICA5OSwgICAgMjYsICAgMTM3LCAgIDIyOCwgICAyNzMsICAgMTMzLCAgIDEzNCwgICAxMjgsICAgMTE4LAotICAgICAyNTgsICAgMTMzLCAgIDE4NSwgICAxODYsICAgICAzLCAgIDIzNiwgICAyMjEsICAgMjYyLCAgIDI0MSwgICAxOTAsCi0gICAgIDE5MSwgICAyODEsICAgMTk0LCAgIDE5MCwgICAxOTEsICAgMTI5LCAgIDI4NywgICAxMTEsICAgMTM5LCAgIDEyMywKLSAgICAgMTIzLCAgIDExOSwgICAxMjMsICAgMTIzLCAgIDI4MiwgICAyMTQsICAgMjE5LCAgIDIzNywgICAyODQsICAgMTEyLAotICAgICAyNDIsICAgMTc2LCAgIDE3NywgICAxNzgsICAgMTEzLCAgIDIxNywgICAyMjAsICAgMTQwLCAgIDI4OCwgICAxNTAsCi0gICAgIDE4MywgICAxODQsICAgMTg1LCAgIDE4NiwgICAxMzIsICAgMTk2LCAgIDExNiwgICAyMDIsICAgMjA2LCAgIDIwNywKLSAgICAgLTI5LCAgIC0yOSwgICAxMzMsICAgMTkwLCAgIDE5MSwgICAxMTQsICAgMjAwLCAgIDIwOCwgICAyMDksICAgMjEwLAotICAgICAyMjMsICAgMjI4LCAgIDI4MywgICAxNTMsICAgMTE1LCAgIDE1NSwgICAyMTIsICAgMTU2LCAgIDE1NywgICAxMzMsCi0gICAgIDEzNCwgICAgOTQsICAgIDk0LCAgIDE0MCwgICAxNDksICAgMTc2LCAgIDE3NywgICAxNzgsICAgMjE4LCAgIDIxOCwKLSAgICAgIDkzLCAgICA5MywgICAgOTksICAgIDk5LCAgIDIxMywgICAgOTEsICAgMTk1LCAgIDI5MSwgICAyMDEsICAgMTE3LAotICAgICAyOTIsICAgMTUwLCAgIDIzMSwgICAxOTcsICAgMTIxLCAgIDIwMywgICAyMzIsICAgMjMzLCAgIDE3NSwgICAyMjIsCi0gICAgIDIyNSwgICAxMjMsICAgLTQxLCAgIC00MSwgICAxMzksICAgIDkxLCAgIDE4NywgICAxODgsICAgMTg5LCAgIC0xMywKLSAgICAgLTEzLCAgIDIyMywgICAtNDEsICAgMjE2LCAgIDIxNiwgICAxMzcsICAgMjM5LCAgIDE3NSwgICAyMjYsICAgLTEzLAotICAgICAyMzQsICAgMjM1LCAgIDIxNSwgICAyMTUsICAgIDk5LCAgICA5OSwgICAxNDksICAgMTIzLCAgIDE5NCwgICAyNDUsCi0gICAgIDI2MCwgICAyNjEsICAgMjAwLCAgIDI0NiwgICAyNDcsICAgMjQ4LCAgIDI0OSwgICAyNTAsICAgMjUxLCAgIDI1MiwKLSAgICAgMjUzLCAgIDI2NCwgICAgMjYsICAgMjY1LCAgIDI1NCwgICAyNTUsICAgMjU2LCAgIDI1NywgICAyNjYsICAgIDkxLAotICAgICAxODcsICAgMTg4LCAgIDE4OSwgICAyNjgsICAgMjY5LCAgIDI3MCwgICAyNzEsICAgMjc0LCAgIDIxOCwgICAyNjcsCi0gICAgIDI3NSwgICAyNzYsICAgMjg1LCAgIDI4NiwgICAxNDEsICAgMTQyLCAgIDE0MywgICAxNDQsICAgMTQ1LCAgIDI3NywKLSAgICAgMjc4LCAgIDE3OSwgICAxODAsICAgMjkwLCAgIDI5MywgICAgOTIsICAgMjcyLCAgIDI0NCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgIDIxNiwgICAgOTQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAyMTUsICAgMjE1LCAgICA5OSwgICAgOTksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE1MCwgICAxNTAsICAgICAwLCAgICAgMCwgICAxNzYsCi0gICAgIDE3NywgICAxNzgsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA4OSwgICAxNzksICAgMTgwLCAgIDE4MSwKLSAgICAgMTgyLCAgIDE4MywgICAxODQsICAgMTg1LCAgIDE4NiwgICAgOTEsICAgICAwLCAgICAtMywgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgIDI3OSwgICAyODAsICAgMTkwLCAgIDE5MSwgICAgIDAsICAgICAwLCAgICAgNCwgICAgIDUsCisgICAgICA5NCwgICAgMjYsICAgLTQxLCAgICAyNiwgICAxMjQsICAgMTI1LCAgIDE0NiwgICAxMjYsICAgMTI3LCAgICA5MywKKyAgICAgLTEzLCAgICA5OSwgICAxMTgsICAgMTM3LCAgIDIyOCwgICAyNzMsICAgMTM5LCAgIDI1OCwgICAxMjgsICAgMjI0LAorICAgICAxMzMsICAgMTM0LCAgIDI2MiwgICAxMzMsICAgMTMyLCAgIDE0MSwgICAxNDIsICAgMTQzLCAgIDE0NCwgICAxNDUsCisgICAgIDIyMSwgICAyMzYsICAgICAzLCAgIDI4MSwgICAxMTksICAgMTI5LCAgIDExMSwgICAxMzMsICAgMjQxLCAgIDEyMywKKyAgICAgMTIzLCAgIDI4NywgICAxMjMsICAgMTIzLCAgIDI4MiwgICAyMTQsICAgMjE5LCAgIDI4MywgICAyODQsICAgMTEyLAorICAgICAxODUsICAgMTg2LCAgIDEzOSwgICAyMzcsICAgMTk0LCAgIDIxNywgICAyMjAsICAgMTQwLCAgIDIwMCwgICAxNTAsCisgICAgIDI0MiwgICAxOTAsICAgMTkxLCAgIDI4OCwgICAyMTMsICAgMTEzLCAgIC0yOSwgICAtMjksICAgMTE2LCAgIDE4MywKKyAgICAgMTg0LCAgIDE4NSwgICAxODYsICAgMTc2LCAgIDE3NywgICAxNzgsICAgMjIzLCAgIDE3NiwgICAxNzcsICAgMTc4LAorICAgICAxMTcsICAgMjI4LCAgIDE5MCwgICAxOTEsICAgMTE0LCAgIDE1MywgICAyMTIsICAgMTU1LCAgICA4OSwgICAxNTYsCisgICAgIDE1NywgICAgOTQsICAgIDk0LCAgIDE0MCwgICAxNDksICAgIDkxLCAgIDExNSwgICAgOTEsICAgMjE4LCAgIDIxOCwKKyAgICAgIDkzLCAgICA5MywgICAgOTksICAgIDk5LCAgIDI5MSwgICAyOTIsICAgMTk1LCAgIDEyMSwgICAyMDEsICAgMjQ1LAorICAgICAyMjIsICAgMTUwLCAgIDIzMSwgICAyNDYsICAgMjQ3LCAgIDI0OCwgICAyNDksICAgMjUwLCAgIDI1MSwgICAyNTIsCisgICAgIDI1MywgICAxMjMsICAgLTQxLCAgIC00MSwgICAyNTQsICAgMjU1LCAgIDI1NiwgICAyNTcsICAgMTc5LCAgIDE4MCwKKyAgICAgLTEzLCAgIC0xMywgICAtNDEsICAgMjE2LCAgIDIxNiwgICAxMzcsICAgMjI2LCAgIDE3NSwgICAxMzksICAgMjI1LAorICAgICAtMTMsICAgMTc1LCAgIDIxNSwgICAyMTUsICAgIDk5LCAgICA5OSwgICAxNDksICAgMTIzLCAgICA5MSwgICAxODcsCisgICAgIDE4OCwgICAxODksICAgIDkxLCAgIDE4NywgICAxODgsICAgMTg5LCAgIDIwNiwgICAyMDcsICAgMTk2LCAgIDIyMywKKyAgICAgMjAyLCAgIDE3NiwgICAxNzcsICAgMTc4LCAgIDE5NCwgICAyMDgsICAgMjA5LCAgIDIxMCwgICAyMzksICAgMTc5LAorICAgICAxODAsICAgMTk3LCAgIDI2MCwgICAyMDMsICAgMTMzLCAgIDEzNCwgICAxOTAsICAgMTkxLCAgIDIxOCwgICAyNjcsCisgICAgIDIzMiwgICAyMzMsICAgMjg1LCAgIDI4NiwgICAyNjEsICAgMjM0LCAgIDIzNSwgICAxODEsICAgMTgyLCAgIDE4MywKKyAgICAgMTg0LCAgIDE4NSwgICAxODYsICAgMjAwLCAgIDI2NCwgICAyNjUsICAgMjY2LCAgIDI2OCwgICAyNjksICAgMjcwLAorICAgICAyNzksICAgMjgwLCAgIDE5MCwgICAxOTEsICAgMjcxLCAgIDI3NCwgICAyNzUsICAgMjc2LCAgIDI3NywgICAyOTAsCisgICAgIDI3OCwgICAyOTMsICAgIDkyLCAgIDIxNiwgICAgOTQsICAgMjcyLCAgIDI0NCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAyMTUsICAgMjE1LCAgICA5OSwgICAgOTksICAgICAwLCAgICAgMCwgICAxODEsICAgMTgyLAorICAgICAxODMsICAgMTg0LCAgIDE4NSwgICAxODYsICAgICAwLCAgIDE1MCwgICAxNTAsICAgMTg3LCAgIDE4OCwgICAxODksCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5MCwgICAxOTEsICAgMTc5LCAgIDE4MCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAtMywgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgNCwgICAgIDUsCiAgICAgIDE0OSwgICAxNDksICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywKICAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAogICAgICAgMjQsICAgIDI1LCAgICAgMCwgICAgIDAsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCi0gICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAgMCwgICAgIDAsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0LCAgIDE4NSwKLSAgICAgMTg2LCAgICAgMCwgICAgMzUsICAgICAwLCAgIDE4NywgICAxODgsICAgMTg5LCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAxOTAsICAgMTkxLCAgICAgMCwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsCisgICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAgMCwgICAxODEsICAgMTgyLCAgIDE4MywgICAxODQsICAgMTg1LCAgIDE4NiwKKyAgICAgICAwLCAgICAgMCwgICAgMzUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTkwLAorICAgICAxOTEsICAgICAwLCAgICAgMCwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsCiAgICAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwKICAgICAgIDUzLCAgICA1NCwgICAgNTUsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLAogICAgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsCiAgICAgICA3MywgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICA4MiwKLSAgICAgIDgzLCAgICA4NCwgICAgODUsICAgIDg2LCAgICA4NywgICAgODgsICAgICAwLCAgICAgMCwgICAgODksICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICA5MCwgICAgIDAsICAgICA0LCAgICAgNSwgICAgIDAsICAgIDkxLCAgICAgNiwgICAgIDcsCi0gICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywKLSAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgIDAsICAgICAwLAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDM1LCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAxNDQsICAgMTQ1LCAgICAgMCwgICAgIDAsICAgIDM2LAotICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCi0gICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICA1NiwKLSAgICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LAotICAgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgNzYsCi0gICAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDgyLCAgICA4MywgICAgODQsICAgIDg1LCAgICA4NiwKLSAgICAgIDg3LCAgICA4OCwgICAgIDAsICAgICAwLCAgICA4OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTAsICAgICAwLAotICAgICAgIDQsICAgICA1LCAgICAgMCwgICAgOTEsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCi0gICAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwKLSAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAgMCwgICAgIDAsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAotICAgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsCi0gICAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwKLSAgICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLAotICAgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsCi0gICAgICA4MSwgICAgODIsICAgIDgzLCAgICA4NCwgICAgODUsICAgIDg2LCAgICA4NywgICAgODgsICAgICAwLCAgICAgMCwKLSAgICAgIDg5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDkxLAorICAgICAgODMsICAgIDg0LCAgICA4NSwgICAgODYsICAgIDg3LCAgICA4OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgODksCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5MCwgICAgIDAsICAgICA0LCAgICAgNSwgICAgIDAsICAgIDkxLCAgICAgNiwKICAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAotICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAxNzksCi0gICAgIDE4MCwgICAgMjYsICAgICAwLCAgICAgMCwgICAxNzksICAgMTgwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgICAwLAorICAgICAgIDAsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsCiAgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzNSwKLSAgICAgICAwLCAgICAgMCwgICAxNzksICAgMTgwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwgICAxNDIsICAgMTQzLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwKKyAgICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LAogICAgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsCi0gICAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAxODEsICAgMTgyLCAgIDE4MywKLSAgICAgMTg0LCAgIDE4NSwgICAxODYsICAgMTgyLCAgIDE4MywgICAxODQsICAgMTg1LCAgIDE4NiwgICAgNzQsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgIDE5MCwgICAxOTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTkwLCAgIDE5MSwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgMTgzLCAgIDE4NCwgICAxODUsICAgMTg2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5MCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5MSwgICAxOTAsICAgMTkxLCAgIDE1MSwgICAxNTIsICAgMTUzLAotICAgICAxNTQsICAgMTU1LCAgICAgMCwgICAxNTYsICAgMTU3LCAgICAgMCwgICAgIDAsICAgMTU4LCAgIDE1OSwgICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwKKyAgICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LAorICAgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgODIsICAgIDgzLCAgICA4NCwgICAgODUsCisgICAgICA4NiwgICAgODcsICAgIDg4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA4OSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgIDkwLCAgICAgMCwgICAgIDQsICAgICA1LCAgICAgMCwgICAgOTEsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksCisgICAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAgMCwgICAgIDAsICAgIDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzUsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzYsICAgIDM3LCAgICAzOCwKKyAgICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAorICAgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIDU2LCAgICA1NywgICAgNTgsCisgICAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwKKyAgICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LAorICAgICAgNzksICAgIDgwLCAgICA4MSwgICAgODIsICAgIDgzLCAgICA4NCwgICAgODUsICAgIDg2LCAgICA4NywgICAgODgsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICA4OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgOTEsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgMTc5LCAgIDE4MCwgICAgMjYsICAgICAwLCAgIDE3OSwgICAxODAsICAgICAwLCAgICAgMCwKICAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNjAsCi0gICAgIDE2MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgMTYyLCAgIDE2MywgICAxNjQsICAgMTY1LCAgIDE2NiwgICAxNjcsICAgMTY4LCAgIDE2OSwgICAxNzAKKyAgICAgICAwLCAgICAgMCwgICAgMzUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwKKyAgICAgIDUzLCAgICA1NCwgICAgNTUsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDE4MiwgICAxODMsICAgMTg0LCAgIDE4NSwgICAxODYsICAgMTgzLCAgIDE4NCwgICAxODUsCisgICAgIDE4NiwgICAgNzQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5MCwgICAxOTEsICAgICAwLCAgICAgMCwKKyAgICAgMTkwLCAgIDE5MSwgICAgIDAsICAgICAwLCAgIDE1MSwgICAxNTIsICAgMTUzLCAgIDE1NCwgICAxNTUsICAgICAwLAorICAgICAxNTYsICAgMTU3LCAgICAgMCwgICAgOTAsICAgMTU4LCAgIDE1OSwgICAgIDAsICAgICAwLCAgICA5MSwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTYwLCAgIDE2MSwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTYyLCAgIDE2MywgICAxNjQsCisgICAgIDE2NSwgICAxNjYsICAgMTY3LCAgIDE2OCwgICAxNjksICAgMTcwCiB9OwogCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5Y2hlY2tbXSA9CiB7Ci0gICAgICAgMiwgICAgIDgsICAgIDk0LCAgICAgMCwgICAgNDEsICAgIDQyLCAgICA5NiwgICAgNDQsICAgIDQ1LCAgICAgMiwKLSAgICAgICAwLCAgICAgMiwgICAgMzcsICAgIDkzLCAgIDE0OSwgICAyMzAsICAgMTE5LCAgIDEyMCwgICAgNDIsICAgIDM3LAotICAgICAxOTUsICAgMTE5LCAgIDEyNiwgICAxMjcsICAgICAwLCAgICAzNywgICAxMjksICAgMjAxLCAgICAzNywgICAxMzcsCi0gICAgIDEzOCwgICAxMjksICAgIDM3LCAgIDEzNywgICAxMzgsICAgIDU5LCAgICAzNywgICAgMzcsICAgMTMwLCAgICA0MSwKLSAgICAgIDQyLCAgICA1OSwgICAgNDQsICAgIDQ1LCAgIDI1OSwgICAxMzUsICAgMTM2LCAgICA1OSwgICAyNjMsICAgIDM3LAotICAgICAgNTksICAgIDU2LCAgICA1NywgICAgNTgsICAgIDM3LCAgIDEzNSwgICAxMzYsICAgIDk0LCAgICA1OSwgICAgOTYsCi0gICAgIDEyNCwgICAxMjUsICAgMTI2LCAgIDEyNywgICAgOTAsICAgMTA4LCAgICAzNywgICAxMTAsICAgMTIyLCAgIDEyMywKLSAgICAgMTE5LCAgIDEyMCwgICAxMTksICAgMTM3LCAgIDEzOCwgICAgNTksICAgIDM3LCAgIDEzMSwgICAxMzIsICAgMTMzLAotICAgICAxMjksICAgMjE2LCAgIDEyOSwgICAgIDUsICAgIDU5LCAgICAgNywgICAxMjMsICAgICA5LCAgICAxMCwgICAxMTksCi0gICAgIDEyMCwgICAgOTMsICAgIDk0LCAgIDEzMCwgICAgOTYsICAgIDU2LCAgICA1NywgICAgNTgsICAgMTM1LCAgIDEzNiwKLSAgICAgIDkzLCAgICA5NCwgICAgOTMsICAgIDk0LCAgIDEzMCwgICAxMzAsICAgMTA4LCAgIDI4MiwgICAxMTAsICAgIDM3LAotICAgICAyODQsICAgMTQ4LCAgIDE0OSwgICAxMDgsICAgIDU5LCAgIDExMCwgICAxMTksICAgMTIwLCAgIDEzNCwgICAxMjksCi0gICAgIDEyNywgICAxMjMsICAgMTE5LCAgIDEyMCwgICAyMTYsICAgMTMwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgIDExOSwKLSAgICAgMTIwLCAgIDEyOSwgICAxMjksICAgMTM1LCAgIDEzNiwgICAyMTUsICAgIDU5LCAgIDEzNCwgICAxMjcsICAgMTI5LAotICAgICAxMTksICAgMTIwLCAgIDEzNSwgICAxMzYsICAgMTM1LCAgIDEzNiwgICAxNDgsICAgMTQ5LCAgICAzNywgICAxNzUsCi0gICAgICAzNywgICAgMzcsICAgIDM3LCAgIDE3OSwgICAxODAsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0LCAgIDE4NSwKLSAgICAgMTg2LCAgICAzNywgICAgMzcsICAgIDM3LCAgIDE5MCwgICAxOTEsICAgMTkyLCAgIDE5MywgICAgMzcsICAgMTMwLAotICAgICAxMzEsICAgMTMyLCAgIDEzMywgICAgNjEsICAgIDM3LCAgICAzNywgICAxMjksICAgICA0LCAgIDIxNSwgICAyMTYsCi0gICAgICAgNCwgICAgIDMsICAgMjcyLCAgIDI3MywgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICAgMywKLSAgICAgIDQ3LCAgICA2NCwgICAgNjUsICAgIDM3LCAgIDEzNSwgICAgIDIsICAgMjMwLCAgIDE3MSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgIDIxNSwgICAyMTYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAyMTUsICAgMjE2LCAgIDIxNSwgICAyMTYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDI3MiwgICAyNzMsICAgIC0xLCAgICAtMSwgICAgNTYsCi0gICAgICA1NywgICAgNTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEyMSwgICAgNjQsICAgIDY1LCAgIDEyMiwKLSAgICAgMTIzLCAgIDEyNCwgICAxMjUsICAgMTI2LCAgIDEyNywgICAxMzAsICAgIC0xLCAgICAgMCwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgIDEzNSwgICAxMzYsICAgMTM3LCAgIDEzOCwgICAgLTEsICAgIC0xLCAgICAxMSwgICAgMTIsCisgICAgICAgMiwgICAgMzcsICAgICAwLCAgICAzNywgICAgNDEsICAgIDQyLCAgICA5NiwgICAgNDQsICAgIDQ1LCAgICAgMiwKKyAgICAgICAwLCAgICAgMiwgICAgMzcsICAgIDkzLCAgIDE0OSwgICAyMzAsICAgIDk0LCAgIDE5NSwgICAgNDIsICAgICA4LAorICAgICAxMjAsICAgMTIxLCAgIDIwMSwgICAxMjAsICAgIDkwLCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsCisgICAgIDEzMCwgICAgMzcsICAgICAwLCAgIDEzMCwgICAgNTksICAgIDU5LCAgICAzNywgICAxMjAsICAgIDM3LCAgICA0MSwKKyAgICAgIDQyLCAgICAzNywgICAgNDQsICAgIDQ1LCAgIDI1OSwgICAxMzUsICAgMTM2LCAgIDEzMCwgICAyNjMsICAgIDM3LAorICAgICAxMjcsICAgMTI4LCAgIDEzMCwgICAgNTksICAgIDM3LCAgIDEzNSwgICAxMzYsICAgIDk0LCAgICAzNywgICAgOTYsCisgICAgICA1OSwgICAxMzgsICAgMTM5LCAgICA1OSwgICAxMzAsICAgIDM3LCAgIDEyMCwgICAxMjEsICAgIDM3LCAgIDEyNSwKKyAgICAgMTI2LCAgIDEyNywgICAxMjgsICAgIDU2LCAgICA1NywgICAgNTgsICAgMTMwLCAgICA1NiwgICAgNTcsICAgIDU4LAorICAgICAgMzcsICAgMjE2LCAgIDEzOCwgICAxMzksICAgIDU5LCAgICAgNSwgICAxMjMsICAgICA3LCAgIDEyMiwgICAgIDksCisgICAgICAxMCwgICAgOTMsICAgIDk0LCAgIDEzMCwgICAgOTYsICAgMTMxLCAgICA1OSwgICAxMzEsICAgMTM1LCAgIDEzNiwKKyAgICAgIDkzLCAgICA5NCwgICAgOTMsICAgIDk0LCAgIDI4MiwgICAyODQsICAgMTA4LCAgICA1OSwgICAxMTAsICAgMTc1LAorICAgICAxMzAsICAgMTQ4LCAgIDE0OSwgICAxNzksICAgMTgwLCAgIDE4MSwgICAxODIsICAgMTgzLCAgIDE4NCwgICAxODUsCisgICAgIDE4NiwgICAxMjMsICAgMTIwLCAgIDEyMSwgICAxOTAsICAgMTkxLCAgIDE5MiwgICAxOTMsICAgIDY0LCAgICA2NSwKKyAgICAgMTIwLCAgIDEyMSwgICAxMzAsICAgMTM1LCAgIDEzNiwgICAyMTUsICAgMTI4LCAgIDEzNSwgICAyMTYsICAgMTI4LAorICAgICAxMzAsICAgMTM1LCAgIDEzNSwgICAxMzYsICAgMTM1LCAgIDEzNiwgICAxNDgsICAgMTQ5LCAgIDEzMSwgICAxMzIsCisgICAgIDEzMywgICAxMzQsICAgMTMxLCAgIDEzMiwgICAxMzMsICAgMTM0LCAgIDEyMywgICAxMjQsICAgMTA4LCAgIDEzMCwKKyAgICAgMTEwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICAzNywgICAxMzIsICAgMTMzLCAgIDEzNCwgICAgNTksICAgIDY0LAorICAgICAgNjUsICAgMTA4LCAgICAzNywgICAxMTAsICAgMTIwLCAgIDEyMSwgICAxMzgsICAgMTM5LCAgIDIxNSwgICAyMTYsCisgICAgIDEyMCwgICAxMjEsICAgMjcyLCAgIDI3MywgICAgMzcsICAgMTIwLCAgIDEyMSwgICAxMjMsICAgMTI0LCAgIDEyNSwKKyAgICAgMTI2LCAgIDEyNywgICAxMjgsICAgIDM3LCAgICAzNywgICAgMzcsICAgIDM3LCAgICA2MSwgICAgMzcsICAgIDM3LAorICAgICAxMzYsICAgMTM3LCAgIDEzOCwgICAxMzksICAgMTMwLCAgICAgNCwgICAgIDQsICAgICAzLCAgICAgMywgICAgMzcsCisgICAgICA0NywgICAxMzYsICAgICAyLCAgIDIxNSwgICAyMTYsICAgMjMwLCAgIDE3MSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAyMTUsICAgMjE2LCAgIDIxNSwgICAyMTYsICAgIC0xLCAgICAtMSwgICAxMjMsICAgMTI0LAorICAgICAxMjUsICAgMTI2LCAgIDEyNywgICAxMjgsICAgIC0xLCAgIDI3MiwgICAyNzMsICAgMTMyLCAgIDEzMywgICAxMzQsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEzOCwgICAxMzksICAgIDY0LCAgICA2NSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMCwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMSwgICAgMTIsCiAgICAgIDI3MiwgICAyNzMsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKICAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAogICAgICAgMzMsICAgIDM0LCAgICAtMSwgICAgLTEsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsCi0gICAgICA0MywgICAgNDQsICAgIDQ1LCAgICAtMSwgICAgLTEsICAgMTIyLCAgIDEyMywgICAxMjQsICAgMTI1LCAgIDEyNiwKLSAgICAgMTI3LCAgICAtMSwgICAgNTUsICAgIC0xLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAxMzcsICAgMTM4LCAgICAtMSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsCisgICAgICA0MywgICAgNDQsICAgIDQ1LCAgICAtMSwgICAxMjMsICAgMTI0LCAgIDEyNSwgICAxMjYsICAgMTI3LCAgIDEyOCwKKyAgICAgIC0xLCAgICAtMSwgICAgNTUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTM4LAorICAgICAxMzksICAgIC0xLCAgICAtMSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIsCiAgICAgICA3MywgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICA4MiwKICAgICAgIDgzLCAgICA4NCwgICAgODUsICAgIDg2LCAgICA4NywgICAgODgsICAgIDg5LCAgICA5MCwgICAgOTEsICAgIDkyLAogICAgICAgOTMsICAgIDk0LCAgICA5NSwgICAgOTYsICAgIDk3LCAgICA5OCwgICAgOTksICAgMTAwLCAgIDEwMSwgICAxMDIsCiAgICAgIDEwMywgICAxMDQsICAgMTA1LCAgIDEwNiwgICAxMDcsICAgMTA4LCAgIDEwOSwgICAxMTAsICAgMTExLCAgIDExMiwKLSAgICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LCAgIDExNywgICAxMTgsICAgIC0xLCAgICAtMSwgICAxMjEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgIDEyNSwgICAgLTEsICAgIDExLCAgICAxMiwgICAgLTEsICAgMTMwLCAgICAxNSwgICAgMTYsCi0gICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgLTEsICAgIC0xLAotICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU1LCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICAtMSwgICAgLTEsICAgIDY2LAotICAgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgNzYsCi0gICAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDgyLCAgICA4MywgICAgODQsICAgIDg1LCAgICA4NiwKLSAgICAgIDg3LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICA5NCwgICAgOTUsICAgIDk2LAotICAgICAgOTcsICAgIDk4LCAgICA5OSwgICAxMDAsICAgMTAxLCAgIDEwMiwgICAxMDMsICAgMTA0LCAgIDEwNSwgICAxMDYsCi0gICAgIDEwNywgICAxMDgsICAgMTA5LCAgIDExMCwgICAxMTEsICAgMTEyLCAgIDExMywgICAxMTQsICAgMTE1LCAgIDExNiwKLSAgICAgMTE3LCAgIDExOCwgICAgLTEsICAgIC0xLCAgIDEyMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMjUsICAgIC0xLAotICAgICAgMTEsICAgIDEyLCAgICAtMSwgICAxMzAsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKLSAgICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAtMSwgICAgLTEsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAotICAgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLAotICAgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsCi0gICAgICA4MSwgICAgODIsICAgIDgzLCAgICA4NCwgICAgODUsICAgIDg2LCAgICA4NywgICAgODgsICAgIDg5LCAgICA5MCwKLSAgICAgIDkxLCAgICA5MiwgICAgOTMsICAgIDk0LCAgICA5NSwgICAgOTYsICAgIDk3LCAgICA5OCwgICAgOTksICAgMTAwLAotICAgICAxMDEsICAgMTAyLCAgIDEwMywgICAxMDQsICAgMTA1LCAgIDEwNiwgICAxMDcsICAgMTA4LCAgIDEwOSwgICAxMTAsCi0gICAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LCAgIDExNywgICAxMTgsICAgIC0xLCAgICAtMSwKLSAgICAgMTIxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEyNSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTMwLAorICAgICAxMTMsICAgMTE0LCAgIDExNSwgICAxMTYsICAgMTE3LCAgIDExOCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMjIsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEyNiwgICAgLTEsICAgIDExLCAgICAxMiwgICAgLTEsICAgMTMxLCAgICAxNSwKICAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgNjQsCi0gICAgICA2NSwgICAgMzcsICAgIC0xLCAgICAtMSwgICAgNjQsICAgIDY1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIC0xLAorICAgICAgLTEsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsCiAgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NSwKLSAgICAgIC0xLCAgICAtMSwgICAgNjQsICAgIDY1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIC0xLCAgICAtMSwKKyAgICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LAogICAgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgODIsICAgIDgzLCAgICA4NCwgICAgODUsCi0gICAgICA4NiwgICAgODcsICAgIDg4LCAgICA4OSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMjIsICAgMTIzLCAgIDEyNCwKLSAgICAgMTI1LCAgIDEyNiwgICAxMjcsICAgMTIzLCAgIDEyNCwgICAxMjUsICAgMTI2LCAgIDEyNywgICAxMDQsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgIDEzNywgICAxMzgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTM3LCAgIDEzOCwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgMTI0LCAgIDEyNSwgICAxMjYsICAgMTI3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEyNSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEzMCwgICAxMzcsICAgMTM4LCAgICAgMywgICAgIDQsICAgICA1LAotICAgICAgIDYsICAgICA3LCAgICAtMSwgICAgIDksICAgIDEwLCAgICAtMSwgICAgLTEsICAgIDEzLCAgICAxNCwgICAgLTEsCisgICAgICA4NiwgICAgODcsICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDkxLCAgICA5MiwgICAgOTMsICAgIDk0LCAgICA5NSwKKyAgICAgIDk2LCAgICA5NywgICAgOTgsICAgIDk5LCAgIDEwMCwgICAxMDEsICAgMTAyLCAgIDEwMywgICAxMDQsICAgMTA1LAorICAgICAxMDYsICAgMTA3LCAgIDEwOCwgICAxMDksICAgMTEwLCAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsCisgICAgIDExNiwgICAxMTcsICAgMTE4LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEyMiwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgMTI2LCAgICAtMSwgICAgMTEsICAgIDEyLCAgICAtMSwgICAxMzEsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCisgICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAtMSwgICAgLTEsICAgIDM3LCAgICAzOCwKKyAgICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTUsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjYsICAgIDY3LCAgICA2OCwKKyAgICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LAorICAgICAgNzksICAgIDgwLCAgICA4MSwgICAgODIsICAgIDgzLCAgICA4NCwgICAgODUsICAgIDg2LCAgICA4NywgICAgODgsCisgICAgICA4OSwgICAgOTAsICAgIDkxLCAgICA5MiwgICAgOTMsICAgIDk0LCAgICA5NSwgICAgOTYsICAgIDk3LCAgICA5OCwKKyAgICAgIDk5LCAgIDEwMCwgICAxMDEsICAgMTAyLCAgIDEwMywgICAxMDQsICAgMTA1LCAgIDEwNiwgICAxMDcsICAgMTA4LAorICAgICAxMDksICAgMTEwLCAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LCAgIDExNywgICAxMTgsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEyMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMjYsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAxMzEsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAorICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgICAzMywgICAgMzQsICAgIDY0LCAgICA2NSwgICAgMzcsICAgIC0xLCAgICA2NCwgICAgNjUsICAgIC0xLCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzUsCi0gICAgICAzNiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQKKyAgICAgIC0xLCAgICAtMSwgICAgNTUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICA4MiwKKyAgICAgIDgzLCAgICA4NCwgICAgODUsICAgIDg2LCAgICA4NywgICAgODgsICAgIDg5LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgIDEyNCwgICAxMjUsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI1LCAgIDEyNiwgICAxMjcsCisgICAgIDEyOCwgICAxMDQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEzOCwgICAxMzksICAgIC0xLCAgICAtMSwKKyAgICAgMTM4LCAgIDEzOSwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgIC0xLAorICAgICAgIDksICAgIDEwLCAgICAtMSwgICAxMjYsICAgIDEzLCAgICAxNCwgICAgLTEsICAgIC0xLCAgIDEzMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM1LCAgICAzNiwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ2LCAgICA0NywgICAgNDgsCisgICAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0CiB9OwogCiAgIC8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCiAgICAgIHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9CiB7Ci0gICAgICAgMCwgICAxNDAsICAgMTQxLCAgICAgMCwgICAgMTEsICAgIDEyLCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgICAwLCAgIDE0MSwgICAxNDIsICAgICAwLCAgICAxMSwgICAgMTIsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAogICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCiAgICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKICAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNTUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LApAQCAtMTMxNSw2MCArMTM5NSw2MCBAQAogICAgICAgODAsICAgIDgxLCAgICA4MiwgICAgODMsICAgIDg0LCAgICA4NSwgICAgODYsICAgIDg3LCAgICA4OCwgICAgODksCiAgICAgICA5MCwgICAgOTEsICAgIDkyLCAgICA5MywgICAgOTQsICAgIDk1LCAgICA5NiwgICAgOTcsICAgIDk4LCAgICA5OSwKICAgICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMTAzLCAgIDEwNCwgICAxMDUsICAgMTA2LCAgIDEwNywgICAxMDgsICAgMTA5LAotICAgICAxMTAsICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0LCAgIDExNSwgICAxMTYsICAgMTE3LCAgIDExOCwgICAxMjEsCi0gICAgIDEyNSwgICAxMzAsICAgMTQyLCAgIDE0NywgICAxNDgsICAgMTUxLCAgIDE1MiwgICAxNTMsICAgMTU0LCAgIDE1OCwKLSAgICAgMTU5LCAgIDE2MCwgICAxNjUsICAgMTcxLCAgIDE3MiwgICAxNzQsICAgMTc1LCAgIDE3NiwgICAxNzcsICAgMTgxLAotICAgICAxODIsICAgIDM3LCAgICAzNywgICAgMzcsICAgIDU5LCAgICA1OSwgICAgMzcsICAgIDM3LCAgICAzNywgICAgNTksCi0gICAgIDE2NywgICAgNTksICAgMTY4LCAgIDE0OCwgICAxNzQsICAgMTc0LCAgIDE3NCwgICAxNzQsICAgIDQyLCAgICA1OSwKLSAgICAgMTQ4LCAgIDE1OCwgICAxNzEsICAgMTE5LCAgIDEyMCwgICAxNDMsICAgMTQ0LCAgIDE1MSwgICAxNDIsICAgMTcyLAotICAgICAxNzQsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAxNDUsICAgMTQ2LCAgIDE0NywgICAxNDgsCi0gICAgIDE3NCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOSwgICAgMTAsICAgIDEzLCAgICAxNCwKKyAgICAgMTEwLCAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LCAgIDExNywgICAxMTgsICAgMTIyLAorICAgICAxMjYsICAgMTMxLCAgIDE0MywgICAxNDgsICAgMTQ5LCAgIDE1MiwgICAxNTMsICAgMTU0LCAgIDE1NSwgICAxNTksCisgICAgIDE2MCwgICAxNjEsICAgMTY2LCAgIDE3MiwgICAxNzMsICAgMTc1LCAgIDE3NiwgICAxNzcsICAgMTc4LCAgIDE4MiwKKyAgICAgMTgzLCAgICAzNywgICAgMzcsICAgIDM3LCAgICA1OSwgICAgNTksICAgIDM3LCAgICAzNywgICAgMzcsICAgIDU5LAorICAgICAxNjgsICAgIDU5LCAgIDE2OSwgICAxNDksICAgMTc1LCAgIDE3NSwgICAxNzUsICAgMTc1LCAgICA0MiwgICAgNTksCisgICAgIDE0OSwgICAxNTksICAgMTcyLCAgIDEyMCwgICAxMjEsICAgMTQ0LCAgIDE0NSwgICAxNTIsICAgMTQzLCAgIDE3MywKKyAgICAgMTc1LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgMTQ2LCAgIDE0NywgICAxNDgsICAgMTQ5LAorICAgICAxNzUsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDksICAgIDEwLCAgICAxMywgICAgMTQsCiAgICAgICAzNSwgICAgMzYsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywKLSAgICAgIDU0LCAgIDE1NSwgICAxNTYsICAgMTU3LCAgIDE2MSwgICAxMzQsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDY0LAotICAgICAgNjUsICAgMTIyLCAgIDEyMywgICAxMjQsICAgMTI1LCAgIDEyNiwgICAxMjcsICAgMTMxLCAgIDEzMiwgICAxMzMsCi0gICAgIDEzNywgICAxMzgsICAgMTY5LCAgIDE3MCwgICAgMzcsICAgMTQ4LCAgIDE2OSwgICAxNzAsICAgMTc4LCAgIDE3OSwKLSAgICAgIDM3LCAgIDE0OCwgICAxNjksICAgMTcwLCAgIDE4MywgICAxODQsICAgMTIyLCAgIDEyMywgICAxMzEsICAgMTMyLAotICAgICAxMzMsICAgMTczLCAgIDE3NCwgICAxNzEsICAgMTQ1LCAgIDE0NywgICAxNDgsICAgMTUxLCAgIDE3NCwgICAxNDUsCi0gICAgIDE1MSwgICAxMjksICAgMTI5LCAgIDEyOSwgICAgIDgsICAgMTI3LCAgIDEyNywgICAxNDUsICAgMTQ2LCAgIDE0OSwKLSAgICAgMTUwLCAgIDE3NCwgICAxMTksICAgMTIwLCAgIDExOSwgICAxMjAsICAgIDM3LCAgICA1OSwgICAxNjIsICAgIDU5LAotICAgICAxNjQsICAgIDM3LCAgICA1OSwgICAxNjYsICAgMTU2LCAgIDE3MSwgICAxNzEsICAgMTcxLCAgIDE3MSwgICAxNzEsCi0gICAgIDE3MSwgICAxNzEsICAgMTcxLCAgIDE3MSwgICAxNzEsICAgMTcxLCAgIDE3MSwgICAxNzEsICAgMTc5LCAgIDE4MCwKLSAgICAgIDM3LCAgICAzNywgICAxODQsICAgMTg1LCAgICAzNywgICAgMzcsICAgIDM3LCAgIDE3NCwgICAgNjEsICAgIDM3LAotICAgICAgMzcsICAgMTI5LCAgIDE0MywgICAxNDQsICAgICA0LCAgICAgNCwgICAgIDMsICAgICAzLCAgICA0NywgICAxMzUsCi0gICAgIDEzNiwgICAxMjksICAgMTQ0LCAgIDEyOSwgICAxNDQsICAgMTQ1LCAgIDE0NSwgICAgMzcsICAgIDU5LCAgIDE2MywKLSAgICAgIDM3LCAgIDE3OSwgICAxODQsICAgMTM1CisgICAgICA1NCwgICAxNTYsICAgMTU3LCAgIDE1OCwgICAxNjIsICAgMTM1LCAgICA1NiwgICAgNTcsICAgIDU4LCAgICA2NCwKKyAgICAgIDY1LCAgIDEyMywgICAxMjQsICAgMTI1LCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEzMiwgICAxMzMsICAgMTM0LAorICAgICAxMzgsICAgMTM5LCAgIDE3MCwgICAxNzEsICAgIDM3LCAgIDE0OSwgICAxNzAsICAgMTcxLCAgIDE3OSwgICAxODAsCisgICAgICAzNywgICAxNDksICAgMTcwLCAgIDE3MSwgICAxODQsICAgMTg1LCAgIDEyMywgICAxMjQsICAgMTMyLCAgIDEzMywKKyAgICAgMTM0LCAgIDE3NCwgICAxNzUsICAgMTcyLCAgIDE0NiwgICAxNDgsICAgMTQ5LCAgIDE1MiwgICAxNzUsICAgMTQ2LAorICAgICAxNTIsICAgMTMwLCAgIDEzMCwgICAxMzAsICAgICA4LCAgIDEyOCwgICAxMjgsICAgMTQ2LCAgIDE0NywgICAxNTAsCisgICAgIDE1MSwgICAxNzUsICAgMTIwLCAgIDEyMSwgICAxMjAsICAgMTIxLCAgICAzNywgICAgNTksICAgMTYzLCAgICA1OSwKKyAgICAgMTY1LCAgICAzNywgICAgNTksICAgMTY3LCAgIDE1NywgICAxNzIsICAgMTcyLCAgIDE3MiwgICAxNzIsICAgMTcyLAorICAgICAxNzIsICAgMTcyLCAgIDE3MiwgICAxNzIsICAgMTcyLCAgIDE3MiwgICAxNzIsICAgMTcyLCAgIDE4MCwgICAxODEsCisgICAgICAzNywgICAgMzcsICAgMTg1LCAgIDE4NiwgICAgMzcsICAgIDM3LCAgICAzNywgICAxNzUsICAgIDYxLCAgICAzNywKKyAgICAgIDM3LCAgIDEzMCwgICAxNDQsICAgMTQ1LCAgICAgNCwgICAgIDQsICAgICAzLCAgICAgMywgICAgNDcsICAgMTM2LAorICAgICAxMzcsICAgMTMwLCAgIDE0NSwgICAxMzAsICAgMTQ1LCAgIDE0NiwgICAxNDYsICAgIDM3LCAgICA1OSwgICAxNjQsCisgICAgICAzNywgICAxODAsICAgMTg1LCAgIDEzNgogfTsKIAogICAvKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMVtdID0KIHsKLSAgICAgICAwLCAgIDEzOSwgICAxNDAsICAgMTQwLCAgIDE0MSwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLAotICAgICAxNDMsICAgMTQ0LCAgIDE0NSwgICAxNDUsICAgMTQ1LCAgIDE0NiwgICAxNDYsICAgMTQ2LCAgIDE0NiwgICAxNDYsCi0gICAgIDE0NiwgICAxNDYsICAgMTQ2LCAgIDE0NiwgICAxNDcsICAgMTQ4LCAgIDE0OSwgICAxNDksICAgMTQ5LCAgIDE1MCwKLSAgICAgMTUwLCAgIDE1MSwgICAxNTEsICAgMTUyLCAgIDE1MiwgICAxNTIsICAgMTUyLCAgIDE1MiwgICAxNTIsICAgMTUzLAotICAgICAxNTMsICAgMTUzLCAgIDE1MywgICAxNTMsICAgMTUzLCAgIDE1MywgICAxNTMsICAgMTUzLCAgIDE1MywgICAxNTMsCi0gICAgIDE1NCwgICAxNTQsICAgMTU1LCAgIDE1NSwgICAxNTUsICAgMTU1LCAgIDE1NSwgICAxNTUsICAgMTU1LCAgIDE1NSwKLSAgICAgMTU1LCAgIDE1NSwgICAxNTUsICAgMTU1LCAgIDE1NiwgICAxNTYsICAgMTU2LCAgIDE1NiwgICAxNTcsICAgMTU4LAotICAgICAxNTgsICAgMTU4LCAgIDE1OCwgICAxNTgsICAgMTU4LCAgIDE1OCwgICAxNTgsICAgMTU4LCAgIDE1OCwgICAxNTgsCi0gICAgIDE1OCwgICAxNTgsICAgMTU4LCAgIDE1OCwgICAxNTgsICAgMTU4LCAgIDE1OCwgICAxNTgsICAgMTU4LCAgIDE1OCwKLSAgICAgMTU4LCAgIDE1OCwgICAxNTgsICAgMTU4LCAgIDE1OCwgICAxNTgsICAgMTU4LCAgIDE1OCwgICAxNTgsICAgMTU4LAotICAgICAxNTgsICAgMTU4LCAgIDE1OCwgICAxNTgsICAgMTU4LCAgIDE1OCwgICAxNTgsICAgMTU4LCAgIDE1OSwgICAxNTksCisgICAgICAgMCwgICAxNDAsICAgMTQxLCAgIDE0MSwgICAxNDIsICAgMTQzLCAgIDE0MywgICAxNDMsICAgMTQzLCAgIDE0MywKKyAgICAgMTQ0LCAgIDE0NSwgICAxNDYsICAgMTQ2LCAgIDE0NiwgICAxNDcsICAgMTQ3LCAgIDE0NywgICAxNDcsICAgMTQ3LAorICAgICAxNDcsICAgMTQ3LCAgIDE0NywgICAxNDcsICAgMTQ4LCAgIDE0OSwgICAxNTAsICAgMTUwLCAgIDE1MCwgICAxNTEsCisgICAgIDE1MSwgICAxNTIsICAgMTUyLCAgIDE1MywgICAxNTMsICAgMTUzLCAgIDE1MywgICAxNTMsICAgMTUzLCAgIDE1NCwKKyAgICAgMTU0LCAgIDE1NCwgICAxNTQsICAgMTU0LCAgIDE1NCwgICAxNTQsICAgMTU0LCAgIDE1NCwgICAxNTQsICAgMTU0LAorICAgICAxNTUsICAgMTU1LCAgIDE1NiwgICAxNTYsICAgMTU2LCAgIDE1NiwgICAxNTYsICAgMTU2LCAgIDE1NiwgICAxNTYsCisgICAgIDE1NiwgICAxNTYsICAgMTU2LCAgIDE1NiwgICAxNTcsICAgMTU3LCAgIDE1NywgICAxNTcsICAgMTU4LCAgIDE1OSwKICAgICAgMTU5LCAgIDE1OSwgICAxNTksICAgMTU5LCAgIDE1OSwgICAxNTksICAgMTU5LCAgIDE1OSwgICAxNTksICAgMTU5LAotICAgICAxNTksICAgMTU5LCAgIDE1OSwgICAxNTksICAgMTU5LCAgIDE1OSwgICAxNTksICAgMTYwLCAgIDE2MCwgICAxNjAsCi0gICAgIDE2MCwgICAxNjAsICAgMTYwLCAgIDE2MSwgICAxNjEsICAgMTYxLCAgIDE2MSwgICAxNjIsICAgMTYyLCAgIDE2MywKLSAgICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY1LCAgIDE2NSwgICAxNjYsICAgMTY2LCAgIDE2NywgICAxNjcsICAgMTY4LAotICAgICAxNjksICAgMTY5LCAgIDE2OSwgICAxNzAsICAgMTcwLCAgIDE3MCwgICAxNzEsICAgMTcxLCAgIDE3MiwgICAxNzIsCi0gICAgIDE3MiwgICAxNzIsICAgMTcyLCAgIDE3MiwgICAxNzIsICAgMTcyLCAgIDE3MiwgICAxNzIsICAgMTcyLCAgIDE3MiwKLSAgICAgMTcyLCAgIDE3MiwgICAxNzIsICAgMTczLCAgIDE3MywgICAxNzMsICAgMTczLCAgIDE3MywgICAxNzQsICAgMTc0LAotICAgICAxNzUsICAgMTc1LCAgIDE3NSwgICAxNzUsICAgMTc1LCAgIDE3NSwgICAxNzUsICAgMTc2LCAgIDE3NiwgICAxNzYsCi0gICAgIDE3NiwgICAxNzcsICAgMTc3LCAgIDE3OCwgICAxNzgsICAgMTc4LCAgIDE3OCwgICAxNzksICAgMTgwLCAgIDE4MCwKLSAgICAgMTgxLCAgIDE4MSwgICAxODEsICAgMTgxLCAgIDE4MSwgICAxODEsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLAotICAgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgzLCAgIDE4MywgICAxODMsICAgMTgzLCAgIDE4NCwgICAxODUsCi0gICAgIDE4NQorICAgICAxNTksICAgMTU5LCAgIDE1OSwgICAxNTksICAgMTU5LCAgIDE1OSwgICAxNTksICAgMTU5LCAgIDE1OSwgICAxNTksCisgICAgIDE1OSwgICAxNTksICAgMTU5LCAgIDE1OSwgICAxNTksICAgMTU5LCAgIDE1OSwgICAxNTksICAgMTU5LCAgIDE1OSwKKyAgICAgMTU5LCAgIDE1OSwgICAxNTksICAgMTU5LCAgIDE1OSwgICAxNTksICAgMTU5LCAgIDE1OSwgICAxNjAsICAgMTYwLAorICAgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsCisgICAgIDE2MCwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjEsICAgMTYxLCAgIDE2MSwKKyAgICAgMTYxLCAgIDE2MSwgICAxNjEsICAgMTYyLCAgIDE2MiwgICAxNjIsICAgMTYyLCAgIDE2MywgICAxNjMsICAgMTY0LAorICAgICAxNjQsICAgMTY1LCAgIDE2NiwgICAxNjYsICAgMTY2LCAgIDE2NywgICAxNjcsICAgMTY4LCAgIDE2OCwgICAxNjksCisgICAgIDE3MCwgICAxNzAsICAgMTcwLCAgIDE3MSwgICAxNzEsICAgMTcxLCAgIDE3MiwgICAxNzIsICAgMTczLCAgIDE3MywKKyAgICAgMTczLCAgIDE3MywgICAxNzMsICAgMTczLCAgIDE3MywgICAxNzMsICAgMTczLCAgIDE3MywgICAxNzMsICAgMTczLAorICAgICAxNzMsICAgMTczLCAgIDE3MywgICAxNzQsICAgMTc0LCAgIDE3NCwgICAxNzQsICAgMTc0LCAgIDE3NSwgICAxNzUsCisgICAgIDE3NiwgICAxNzYsICAgMTc2LCAgIDE3NiwgICAxNzYsICAgMTc2LCAgIDE3NiwgICAxNzcsICAgMTc3LCAgIDE3NywKKyAgICAgMTc3LCAgIDE3OCwgICAxNzgsICAgMTc5LCAgIDE3OSwgICAxNzksICAgMTc5LCAgIDE4MCwgICAxODEsICAgMTgxLAorICAgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODMsICAgMTgzLCAgIDE4MywgICAxODMsCisgICAgIDE4MywgICAxODMsICAgMTgzLCAgIDE4MywgICAxODQsICAgMTg0LCAgIDE4NCwgICAxODQsICAgMTg1LCAgIDE4NiwKKyAgICAgMTg2CiB9OwogCiAgIC8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMltdID0KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5eXIyW10gPQogewogICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAwLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsCiAgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMywgICAgIDMsICAgICAxLCAgICAgMywKQEAgLTE0MDgsMjIgKzE0ODgsMjIgQEAKIAogI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCiAKLSNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1kbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXljaGFyID09IFlZRU1QVFkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eWNoYXIgPSAoVG9rZW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXlsdmFsID0gKFZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIFlZUE9QU1RBQ0sgKHl5bGVuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eXN0YXRlID0gKnl5c3NwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZ290byB5eWJhY2t1cDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5ZXJyb3IgKHl5c2Nhbm5lciwgY3N0YXRlLCBZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKLSAgICAgIFlZRVJST1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotd2hpbGUgKDApCisjZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5Y2hhciA9IChUb2tlbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5bHZhbCA9IChWYWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFlZUE9QU1RBQ0sgKHl5bGVuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5c3RhdGUgPSAqeXlzc3A7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGdvdG8geXliYWNrdXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5ZXJyb3IgKHl5c2Nhbm5lciwgY3N0YXRlLCBZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKKyAgICAgICAgWVlFUlJPUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgd2hpbGUgKDApCiAKIC8qIEVycm9yIHRva2VuIG51bWJlciAqLwogI2RlZmluZSBZWVRFUlJPUiAgICAgICAgMQpAQCAtMTQ2MywzOSArMTU0Myw0MSBAQAogfSB3aGlsZSAoMCkKIAogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFByaW50IHRoaXMgc3ltYm9sJ3MgdmFsdWUgb24gWVlPVVRQVVQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCdzIHZhbHVlIG9uIFlZTy4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIHZvaWQgKnl5c2Nhbm5lciwgY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlKQoreXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW8sIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgdm9pZCAqeXlzY2FubmVyLCBjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUpCiB7Ci0gIEZJTEUgKnl5byA9IHl5b3V0cHV0OwotICBZWVVTRSAoeXlvKTsKKyAgRklMRSAqeXlvdXRwdXQgPSB5eW87CisgIFlZVVNFICh5eW91dHB1dCk7CiAgIFlZVVNFICh5eXNjYW5uZXIpOwogICBZWVVTRSAoY3N0YXRlKTsKICAgaWYgKCF5eXZhbHVlcCkKICAgICByZXR1cm47CiAjIGlmZGVmIFlZUFJJTlQKICAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykKLSAgICBZWVBSSU5UICh5eW91dHB1dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKKyAgICBZWVBSSU5UICh5eW8sIHl5dG9rbnVtW3l5dHlwZV0sICp5eXZhbHVlcCk7CiAjIGVuZGlmCisgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCiAgIFlZVVNFICh5eXR5cGUpOworICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKIH0KIAogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyB2b2lkCi15eV9zeW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIHZvaWQgKnl5c2Nhbm5lciwgY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlKQoreXlfc3ltYm9sX3ByaW50IChGSUxFICp5eW8sIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgdm9pZCAqeXlzY2FubmVyLCBjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUpCiB7Ci0gIFlZRlBSSU5URiAoeXlvdXRwdXQsICIlcyAlcyAoIiwKKyAgWVlGUFJJTlRGICh5eW8sICIlcyAlcyAoIiwKICAgICAgICAgICAgICB5eXR5cGUgPCBZWU5UT0tFTlMgPyAidG9rZW4iIDogIm50ZXJtIiwgeXl0bmFtZVt5eXR5cGVdKTsKIAotICB5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCB5eXNjYW5uZXIsIGNzdGF0ZSk7Ci0gIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7CisgIHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvLCB5eXR5cGUsIHl5dmFsdWVwLCB5eXNjYW5uZXIsIGNzdGF0ZSk7CisgIFlZRlBSSU5URiAoeXlvLCAiKSIpOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KQEAgLTE1MDQsNyArMTU4Niw3IEBACiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIHZvaWQKLXl5X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKnl5Ym90dG9tLCB5eXR5cGVfaW50MTYgKnl5dG9wKQoreXlfc3RhY2tfcHJpbnQgKHl5X3N0YXRlX3QgKnl5Ym90dG9tLCB5eV9zdGF0ZV90ICp5eXRvcCkKIHsKICAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKICAgZm9yICg7IHl5Ym90dG9tIDw9IHl5dG9wOyB5eWJvdHRvbSsrKQpAQCAtMTUyNywyMCArMTYwOSwyMCBAQAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyB2b2lkCi15eV9yZWR1Y2VfcHJpbnQgKHl5dHlwZV9pbnQxNiAqeXlzc3AsIFlZU1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlLCB2b2lkICp5eXNjYW5uZXIsIGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSkKK3l5X3JlZHVjZV9wcmludCAoeXlfc3RhdGVfdCAqeXlzc3AsIFlZU1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlLCB2b2lkICp5eXNjYW5uZXIsIGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSkKIHsKLSAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07CisgIGludCB5eWxubyA9IHl5cmxpbmVbeXlydWxlXTsKICAgaW50IHl5bnJocyA9IHl5cjJbeXlydWxlXTsKICAgaW50IHl5aTsKLSAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChsaW5lICVsdSk6XG4iLAorICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWQpOlxuIiwKICAgICAgICAgICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7CiAgIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLwogICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCiAgICAgewogICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKICAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgICB5eXN0b3NbeXlzc3BbeXlpICsgMSAtIHl5bnJoc11dLAotICAgICAgICAgICAgICAgICAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgeXlzdG9zWyt5eXNzcFt5eWkgKyAxIC0geXlucmhzXV0sCisgICAgICAgICAgICAgICAgICAgICAgICZ5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHl5c2Nhbm5lciwgY3N0YXRlKTsKICAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKICAgICB9CkBAIC0xNTg0LDEzICsxNjY2LDEzIEBACiAKICMgaWZuZGVmIHl5c3RybGVuCiAjICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSAotIyAgIGRlZmluZSB5eXN0cmxlbiBzdHJsZW4KKyMgICBkZWZpbmUgeXlzdHJsZW4oUykgKFlZX0NBU1QgKFlZUFRSRElGRl9ULCBzdHJsZW4gKFMpKSkKICMgIGVsc2UKIC8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8KLXN0YXRpYyBZWVNJWkVfVAorc3RhdGljIFlZUFRSRElGRl9UCiB5eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCiB7Ci0gIFlZU0laRV9UIHl5bGVuOworICBZWVBUUkRJRkZfVCB5eWxlbjsKICAgZm9yICh5eWxlbiA9IDA7IHl5c3RyW3l5bGVuXTsgeXlsZW4rKykKICAgICBjb250aW51ZTsKICAgcmV0dXJuIHl5bGVuOwpAQCAtMTYyNiwxMiArMTcwOCwxMiBAQAogICAgYmFja3NsYXNoLWJhY2tzbGFzaCkuICBZWVNUUiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBpcwogICAgbnVsbCwgZG8gbm90IGNvcHk7IGluc3RlYWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdoYXQgdGhlIHJlc3VsdAogICAgd291bGQgaGF2ZSBiZWVuLiAgKi8KLXN0YXRpYyBZWVNJWkVfVAorc3RhdGljIFlZUFRSRElGRl9UCiB5eXRuYW1lcnIgKGNoYXIgKnl5cmVzLCBjb25zdCBjaGFyICp5eXN0cikKIHsKICAgaWYgKCp5eXN0ciA9PSAnIicpCiAgICAgewotICAgICAgWVlTSVpFX1QgeXluID0gMDsKKyAgICAgIFlZUFRSRElGRl9UIHl5biA9IDA7CiAgICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsKIAogICAgICAgZm9yICg7OykKQEAgLTE2NDQsNyArMTcyNiwxMCBAQAogICAgICAgICAgIGNhc2UgJ1xcJzoKICAgICAgICAgICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKICAgICAgICAgICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwotICAgICAgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZ290byBhcHBlbmQ7CisKKyAgICAgICAgICBhcHBlbmQ6CiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmICh5eXJlcykKICAgICAgICAgICAgICAgeXlyZXNbeXluXSA9ICp5eXA7CkBAIC0xNjU5LDEwICsxNzQ0LDEwIEBACiAgICAgZG9fbm90X3N0cmlwX3F1b3RlczogOwogICAgIH0KIAotICBpZiAoISB5eXJlcykKKyAgaWYgKHl5cmVzKQorICAgIHJldHVybiB5eXN0cGNweSAoeXlyZXMsIHl5c3RyKSAtIHl5cmVzOworICBlbHNlCiAgICAgcmV0dXJuIHl5c3RybGVuICh5eXN0cik7Ci0KLSAgcmV0dXJuIHl5c3RwY3B5ICh5eXJlcywgeXlzdHIpIC0geXlyZXM7CiB9CiAjIGVuZGlmCiAKQEAgLTE2NzUsMTkgKzE3NjAsMTkgQEAKICAgICpZWU1TR19BTExPQyB0byB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIGJ5dGVzLiAgUmV0dXJuIDIgaWYgdGhlCiAgICByZXF1aXJlZCBudW1iZXIgb2YgYnl0ZXMgaXMgdG9vIGxhcmdlIHRvIHN0b3JlLiAgKi8KIHN0YXRpYyBpbnQKLXl5c3ludGF4X2Vycm9yIChZWVNJWkVfVCAqeXltc2dfYWxsb2MsIGNoYXIgKip5eW1zZywKLSAgICAgICAgICAgICAgICB5eXR5cGVfaW50MTYgKnl5c3NwLCBpbnQgeXl0b2tlbikKK3l5c3ludGF4X2Vycm9yIChZWVBUUkRJRkZfVCAqeXltc2dfYWxsb2MsIGNoYXIgKip5eW1zZywKKyAgICAgICAgICAgICAgICB5eV9zdGF0ZV90ICp5eXNzcCwgaW50IHl5dG9rZW4pCiB7Ci0gIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKFlZX05VTExQVFIsIHl5dG5hbWVbeXl0b2tlbl0pOwotICBZWVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOwogICBlbnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9IDUgfTsKICAgLyogSW50ZXJuYXRpb25hbGl6ZWQgZm9ybWF0IHN0cmluZy4gKi8KICAgY29uc3QgY2hhciAqeXlmb3JtYXQgPSBZWV9OVUxMUFRSOwotICAvKiBBcmd1bWVudHMgb2YgeXlmb3JtYXQuICovCisgIC8qIEFyZ3VtZW50cyBvZiB5eWZvcm1hdDogcmVwb3J0ZWQgdG9rZW5zIChvbmUgZm9yIHRoZSAidW5leHBlY3RlZCIsCisgICAgIG9uZSBwZXIgImV4cGVjdGVkIikuICovCiAgIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU1dOwotICAvKiBOdW1iZXIgb2YgcmVwb3J0ZWQgdG9rZW5zIChvbmUgZm9yIHRoZSAidW5leHBlY3RlZCIsIG9uZSBwZXIKLSAgICAgImV4cGVjdGVkIikuICovCisgIC8qIEFjdHVhbCBzaXplIG9mIFlZQVJHLiAqLwogICBpbnQgeXljb3VudCA9IDA7CisgIC8qIEN1bXVsYXRlZCBsZW5ndGhzIG9mIFlZQVJHLiAgKi8KKyAgWVlQVFJESUZGX1QgeXlzaXplID0gMDsKIAogICAvKiBUaGVyZSBhcmUgbWFueSBwb3NzaWJpbGl0aWVzIGhlcmUgdG8gY29uc2lkZXI6CiAgICAgIC0gSWYgdGhpcyBzdGF0ZSBpcyBhIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLCB0aGVuCkBAIC0xNzE0LDcgKzE3OTksOSBAQAogICAqLwogICBpZiAoeXl0b2tlbiAhPSBZWUVNUFRZKQogICAgIHsKLSAgICAgIGludCB5eW4gPSB5eXBhY3RbKnl5c3NwXTsKKyAgICAgIGludCB5eW4gPSB5eXBhY3RbKyp5eXNzcF07CisgICAgICBZWVBUUkRJRkZfVCB5eXNpemUwID0geXl0bmFtZXJyIChZWV9OVUxMUFRSLCB5eXRuYW1lW3l5dG9rZW5dKTsKKyAgICAgIHl5c2l6ZSA9IHl5c2l6ZTA7CiAgICAgICB5eWFyZ1t5eWNvdW50KytdID0geXl0bmFtZVt5eXRva2VuXTsKICAgICAgIGlmICgheXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQgKHl5bikpCiAgICAgICAgIHsKQEAgLTE3MzksMTEgKzE4MjYsMTIgQEAKICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB5eWFyZ1t5eWNvdW50KytdID0geXl0bmFtZVt5eXhdOwogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIFlZU0laRV9UIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKFlZX05VTExQVFIsIHl5dG5hbWVbeXl4XSk7Ci0gICAgICAgICAgICAgICAgICBpZiAoISAoeXlzaXplIDw9IHl5c2l6ZTEKLSAgICAgICAgICAgICAgICAgICAgICAgICAmJiB5eXNpemUxIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCisgICAgICAgICAgICAgICAgICBZWVBUUkRJRkZfVCB5eXNpemUxCisgICAgICAgICAgICAgICAgICAgID0geXlzaXplICsgeXl0bmFtZXJyIChZWV9OVUxMUFRSLCB5eXRuYW1lW3l5eF0pOworICAgICAgICAgICAgICAgICAgaWYgKHl5c2l6ZSA8PSB5eXNpemUxICYmIHl5c2l6ZTEgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKQorICAgICAgICAgICAgICAgICAgICB5eXNpemUgPSB5eXNpemUxOworICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjsKLSAgICAgICAgICAgICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3NTUsNiArMTg0Myw3IEBACiAgICAgICBjYXNlIE46ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgeXlmb3JtYXQgPSBTOyAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgYnJlYWsKKyAgICBkZWZhdWx0OiAvKiBBdm9pZCBjb21waWxlciB3YXJuaW5ncy4gKi8KICAgICAgIFlZQ0FTRV8oMCwgWVlfKCJzeW50YXggZXJyb3IiKSk7CiAgICAgICBZWUNBU0VfKDEsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIikpOwogICAgICAgWVlDQVNFXygyLCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIikpOwpAQCAtMTc2NSwxMCArMTg1NCwxMyBAQAogICAgIH0KIAogICB7Ci0gICAgWVlTSVpFX1QgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWZvcm1hdCk7Ci0gICAgaWYgKCEgKHl5c2l6ZSA8PSB5eXNpemUxICYmIHl5c2l6ZTEgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKyAgICAvKiBEb24ndCBjb3VudCB0aGUgIiVzInMgaW4gdGhlIGZpbmFsIHNpemUsIGJ1dCByZXNlcnZlIHJvb20gZm9yCisgICAgICAgdGhlIHRlcm1pbmF0b3IuICAqLworICAgIFlZUFRSRElGRl9UIHl5c2l6ZTEgPSB5eXNpemUgKyAoeXlzdHJsZW4gKHl5Zm9ybWF0KSAtIDIgKiB5eWNvdW50KSArIDE7CisgICAgaWYgKHl5c2l6ZSA8PSB5eXNpemUxICYmIHl5c2l6ZTEgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKQorICAgICAgeXlzaXplID0geXlzaXplMTsKKyAgICBlbHNlCiAgICAgICByZXR1cm4gMjsKLSAgICB5eXNpemUgPSB5eXNpemUxOwogICB9CiAKICAgaWYgKCp5eW1zZ19hbGxvYyA8IHl5c2l6ZSkKQEAgLTE3OTQsOCArMTg4Niw4IEBACiAgICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgIHl5cCsrOwotICAgICAgICAgIHl5Zm9ybWF0Kys7CisgICAgICAgICAgKyt5eXA7CisgICAgICAgICAgKyt5eWZvcm1hdDsKICAgICAgICAgfQogICB9CiAgIHJldHVybiAwOwpAQCAtMTg0NCw3ICsxOTM2LDcgQEAKICAgICAvKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLwogICAgIGludCB5eW5lcnJzOwogCi0gICAgaW50IHl5c3RhdGU7CisgICAgeXlfc3RhdGVfZmFzdF90IHl5c3RhdGU7CiAgICAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCiAgICAgaW50IHl5ZXJyc3RhdHVzOwogCkBAIC0xODU2LDE2ICsxOTQ4LDE2IEBACiAgICAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCiAKICAgICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLwotICAgIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07Ci0gICAgeXl0eXBlX2ludDE2ICp5eXNzOwotICAgIHl5dHlwZV9pbnQxNiAqeXlzc3A7CisgICAgeXlfc3RhdGVfdCB5eXNzYVtZWUlOSVRERVBUSF07CisgICAgeXlfc3RhdGVfdCAqeXlzczsKKyAgICB5eV9zdGF0ZV90ICp5eXNzcDsKIAogICAgIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCiAgICAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07CiAgICAgWVlTVFlQRSAqeXl2czsKICAgICBZWVNUWVBFICp5eXZzcDsKIAotICAgIFlZU0laRV9UIHl5c3RhY2tzaXplOworICAgIFlZUFRSRElGRl9UIHl5c3RhY2tzaXplOwogCiAgIGludCB5eW47CiAgIGludCB5eXJlc3VsdDsKQEAgLTE4NzksNyArMTk3MSw3IEBACiAgIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUuICAqLwogICBjaGFyIHl5bXNnYnVmWzEyOF07CiAgIGNoYXIgKnl5bXNnID0geXltc2didWY7Ci0gIFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworICBZWVBUUkRJRkZfVCB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKICNlbmRpZgogCiAjZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3AgLT0gKE4pLCB5eXNzcCAtPSAoTikpCkBAIC0xOTAwLDQ2ICsxOTkyLDU0IEBACiAgIHl5Y2hhciA9IFlZRU1QVFk7IC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCiAgIGdvdG8geXlzZXRzdGF0ZTsKIAorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAorfCB5eW5ld3N0YXRlIC0tIHB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5c3RhdGUuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSB5eW5ld3N0YXRlOgoreXluZXdzdGF0ZToKICAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKICAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiAgU28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCiAgIHl5c3NwKys7CiAKLSB5eXNldHN0YXRlOgotICAqeXlzc3AgPSB5eXN0YXRlOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eXNldHN0YXRlIC0tIHNldCBjdXJyZW50IHN0YXRlICh0aGUgdG9wIG9mIHRoZSBzdGFjaykgdG8geXlzdGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eXNldHN0YXRlOgorICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOworICBZWV9BU1NFUlQgKDAgPD0geXlzdGF0ZSAmJiB5eXN0YXRlIDwgWVlOU1RBVEVTKTsKKyAgWVlfSUdOT1JFX1VTRUxFU1NfQ0FTVF9CRUdJTgorICAqeXlzc3AgPSBZWV9DQVNUICh5eV9zdGF0ZV90LCB5eXN0YXRlKTsKKyAgWVlfSUdOT1JFX1VTRUxFU1NfQ0FTVF9FTkQKIAogICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKKyNpZiAhZGVmaW5lZCB5eW92ZXJmbG93ICYmICFkZWZpbmVkIFlZU1RBQ0tfUkVMT0NBVEUKKyAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworI2Vsc2UKICAgICB7CiAgICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGluIGVsZW1lbnRzLiAgKi8KLSAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3NwIC0geXlzcyArIDE7CisgICAgICBZWVBUUkRJRkZfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOwogCi0jaWZkZWYgeXlvdmVyZmxvdworIyBpZiBkZWZpbmVkIHl5b3ZlcmZsb3cKICAgICAgIHsKICAgICAgICAgLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgogICAgICAgICAgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCiAgICAgICAgICAgIG1lbW9yeS4gICovCisgICAgICAgIHl5X3N0YXRlX3QgKnl5c3MxID0geXlzczsKICAgICAgICAgWVlTVFlQRSAqeXl2czEgPSB5eXZzOwotICAgICAgICB5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKIAogICAgICAgICAvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKICAgICAgICAgICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQogICAgICAgICAgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0CiAgICAgICAgICAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLwogICAgICAgICB5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKLSAgICAgICAgICAgICAgICAgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCi0gICAgICAgICAgICAgICAgICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAorICAgICAgICAgICAgICAgICAgICAmeXlzczEsIHl5c2l6ZSAqIFlZU0laRU9GICgqeXlzc3ApLAorICAgICAgICAgICAgICAgICAgICAmeXl2czEsIHl5c2l6ZSAqIFlZU0laRU9GICgqeXl2c3ApLAogICAgICAgICAgICAgICAgICAgICAmeXlzdGFja3NpemUpOwotCiAgICAgICAgIHl5c3MgPSB5eXNzMTsKICAgICAgICAgeXl2cyA9IHl5dnMxOwogICAgICAgfQotI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLwotIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQotICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSMgZWxzZQorIyBlbHNlIC8qIGRlZmluZWQgWVlTVEFDS19SRUxPQ0FURSAqLwogICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCiAgICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKICAgICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKQEAgLTE5NDgsNDIgKzIwNDgsNDMgQEAKICAgICAgICAgeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOwogCiAgICAgICB7Ci0gICAgICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworICAgICAgICB5eV9zdGF0ZV90ICp5eXNzMSA9IHl5c3M7CiAgICAgICAgIHVuaW9uIHl5YWxsb2MgKnl5cHRyID0KLSAgICAgICAgICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOworICAgICAgICAgIFlZX0NBU1QgKHVuaW9uIHl5YWxsb2MgKiwKKyAgICAgICAgICAgICAgICAgICBZWVNUQUNLX0FMTE9DIChZWV9DQVNUIChZWVNJWkVfVCwgWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKSkpOwogICAgICAgICBpZiAoISB5eXB0cikKICAgICAgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwogICAgICAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXNzX2FsbG9jLCB5eXNzKTsKICAgICAgICAgWVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7Ci0jICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCisjIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKICAgICAgICAgaWYgKHl5c3MxICE9IHl5c3NhKQogICAgICAgICAgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwogICAgICAgfQogIyBlbmRpZgotI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KIAogICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKICAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7CiAKLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKLSAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKKyAgICAgIFlZX0lHTk9SRV9VU0VMRVNTX0NBU1RfQkVHSU4KKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsZFxuIiwKKyAgICAgICAgICAgICAgICAgIFlZX0NBU1QgKGxvbmcsIHl5c3RhY2tzaXplKSkpOworICAgICAgWVlfSUdOT1JFX1VTRUxFU1NfQ0FTVF9FTkQKIAogICAgICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCiAgICAgICAgIFlZQUJPUlQ7CiAgICAgfQotCi0gIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CisjZW5kaWYgLyogIWRlZmluZWQgeXlvdmVyZmxvdyAmJiAhZGVmaW5lZCBZWVNUQUNLX1JFTE9DQVRFICovCiAKICAgaWYgKHl5c3RhdGUgPT0gWVlGSU5BTCkKICAgICBZWUFDQ0VQVDsKIAogICBnb3RvIHl5YmFja3VwOwogCisKIC8qLS0tLS0tLS0tLS0uCiB8IHl5YmFja3VwLiAgfAogYC0tLS0tLS0tLS0tKi8KIHl5YmFja3VwOgotCiAgIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKICAgICAgbG9va2FoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KIApAQCAtMjAzMywxNSArMjEzNCwxMyBAQAogCiAgIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLwogICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOwotCi0gIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4uICAqLwotICB5eWNoYXIgPSBZWUVNUFRZOwotCiAgIHl5c3RhdGUgPSB5eW47CiAgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCiAgICorK3l5dnNwID0geXlsdmFsOwogICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKIAorICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuLiAgKi8KKyAgeXljaGFyID0gWVlFTVBUWTsKICAgZ290byB5eW5ld3N0YXRlOwogCiAKQEAgLTIwNTYsNyArMjE1NSw3IEBACiAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlyZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24uICB8Cit8IHl5cmVkdWNlIC0tIGRvIGEgcmVkdWN0aW9uLiAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHl5cmVkdWNlOgogICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLwpAQCAtMjA3Niw4NTIgKzIxNzUsODU3IEBACiAgIFlZX1JFRFVDRV9QUklOVCAoeXluKTsKICAgc3dpdGNoICh5eW4pCiAgICAgewotICAgICAgICBjYXNlIDI6Ci0jbGluZSAzNjEgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgewotCWZpbmlzaF9wYXJzZShjc3RhdGUsICh5eXZzcFswXS5ibGspLmIpOworICBjYXNlIDI6CisjbGluZSAzNjMgImdyYW1tYXIueSIKK3sKKwlDSEVDS19JTlRfVkFMKGZpbmlzaF9wYXJzZShjc3RhdGUsICh5eXZzcFswXS5ibGspLmIpKTsKIH0KLSNsaW5lIDIwODUgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSAyMTg0ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA0OgotI2xpbmUgMzY2ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmJsaykucSA9IHFlcnI7IH0KLSNsaW5lIDIwOTEgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSAzNjggImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuYmxrKS5xID0gcWVycjsgfQorI2xpbmUgMjE5MCAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgNjoKLSNsaW5lIDM2OSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7IGdlbl9hbmQoKHl5dnNwWy0yXS5ibGspLmIsICh5eXZzcFswXS5ibGspLmIpOyAoeXl2YWwuYmxrKSA9ICh5eXZzcFswXS5ibGspOyB9Ci0jbGluZSAyMDk3ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgMzcxICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ2VuX2FuZCgoeXl2c3BbLTJdLmJsaykuYiwgKHl5dnNwWzBdLmJsaykuYik7ICh5eXZhbC5ibGspID0gKHl5dnNwWzBdLmJsayk7IH0KKyNsaW5lIDIxOTYgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDc6Ci0jbGluZSAzNzAgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyBnZW5fYW5kKCh5eXZzcFstMl0uYmxrKS5iLCAoeXl2c3BbMF0uYmxrKS5iKTsgKHl5dmFsLmJsaykgPSAoeXl2c3BbMF0uYmxrKTsgfQotI2xpbmUgMjEwMyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDM3MiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdlbl9hbmQoKHl5dnNwWy0yXS5ibGspLmIsICh5eXZzcFswXS5ibGspLmIpOyAoeXl2YWwuYmxrKSA9ICh5eXZzcFswXS5ibGspOyB9CisjbGluZSAyMjAyICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA4OgotI2xpbmUgMzcxICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgZ2VuX29yKCh5eXZzcFstMl0uYmxrKS5iLCAoeXl2c3BbMF0uYmxrKS5iKTsgKHl5dmFsLmJsaykgPSAoeXl2c3BbMF0uYmxrKTsgfQotI2xpbmUgMjEwOSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDM3MyAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdlbl9vcigoeXl2c3BbLTJdLmJsaykuYiwgKHl5dnNwWzBdLmJsaykuYik7ICh5eXZhbC5ibGspID0gKHl5dnNwWzBdLmJsayk7IH0KKyNsaW5lIDIyMDggImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDk6Ci0jbGluZSAzNzIgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyBnZW5fb3IoKHl5dnNwWy0yXS5ibGspLmIsICh5eXZzcFswXS5ibGspLmIpOyAoeXl2YWwuYmxrKSA9ICh5eXZzcFswXS5ibGspOyB9Ci0jbGluZSAyMTE1ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgMzc0ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ2VuX29yKCh5eXZzcFstMl0uYmxrKS5iLCAoeXl2c3BbMF0uYmxrKS5iKTsgKHl5dmFsLmJsaykgPSAoeXl2c3BbMF0uYmxrKTsgfQorI2xpbmUgMjIxNCAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA6Ci0jbGluZSAzNzQgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuYmxrKSA9ICh5eXZzcFstMV0uYmxrKTsgfQotI2xpbmUgMjEyMSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDM3NiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5ibGspID0gKHl5dnNwWy0xXS5ibGspOyB9CisjbGluZSAyMjIwICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMToKLSNsaW5lIDM3NiAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5ibGspID0gKHl5dnNwWy0xXS5ibGspOyB9Ci0jbGluZSAyMTI3ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgMzc4ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmJsaykgPSAoeXl2c3BbLTFdLmJsayk7IH0KKyNsaW5lIDIyMjYgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDEzOgotI2xpbmUgMzc5ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmJsaykuYiA9IGdlbl9uY29kZShjc3RhdGUsIE5VTEwsIChicGZfdV9pbnQzMikoeXl2c3BbMF0uaSksCi0JCQkJCQkgICAoeXl2YWwuYmxrKS5xID0gKHl5dnNwWy0xXS5ibGspLnEpOyB9Ci0jbGluZSAyMTM0ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgMzgxICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLmJsaykuYiA9IGdlbl9uY29kZShjc3RhdGUsIE5VTEwsIChicGZfdV9pbnQzMikoeXl2c3BbMF0uaSksCisJCQkJCQkgICAoeXl2YWwuYmxrKS5xID0gKHl5dnNwWy0xXS5ibGspLnEpKSk7IH0KKyNsaW5lIDIyMzMgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE0OgotI2xpbmUgMzgxICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmJsaykgPSAoeXl2c3BbLTFdLmJsayk7IH0KLSNsaW5lIDIxNDAgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSAzODMgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuYmxrKSA9ICh5eXZzcFstMV0uYmxrKTsgfQorI2xpbmUgMjIzOSAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU6Ci0jbGluZSAzODMgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuYmxrKS5iID0gZ2VuX3Njb2RlKGNzdGF0ZSwgKHl5dnNwWzBdLnMpLCAoeXl2YWwuYmxrKS5xID0gKHl5dnNwWy0xXS5ibGspLnEpOyB9Ci0jbGluZSAyMTQ2ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgMzg1ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoeXl2c3BbMF0ucykpOyBDSEVDS19QVFJfVkFMKCgoeXl2YWwuYmxrKS5iID0gZ2VuX3Njb2RlKGNzdGF0ZSwgKHl5dnNwWzBdLnMpLCAoeXl2YWwuYmxrKS5xID0gKHl5dnNwWy0xXS5ibGspLnEpKSk7IH0KKyNsaW5lIDIyNDUgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE2OgotI2xpbmUgMzg0ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmJsaykuYiA9IGdlbl9tY29kZShjc3RhdGUsICh5eXZzcFstMl0ucyksIE5VTEwsICh5eXZzcFswXS5pKSwKLQkJCQkgICAgKHl5dmFsLmJsaykucSA9ICh5eXZzcFstM10uYmxrKS5xKTsgfQotI2xpbmUgMjE1MyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDM4NiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKHl5dnNwWy0yXS5zKSk7IENIRUNLX1BUUl9WQUwoKCh5eXZhbC5ibGspLmIgPSBnZW5fbWNvZGUoY3N0YXRlLCAoeXl2c3BbLTJdLnMpLCBOVUxMLCAoeXl2c3BbMF0uaSksCisJCQkJICAgICh5eXZhbC5ibGspLnEgPSAoeXl2c3BbLTNdLmJsaykucSkpKTsgfQorI2xpbmUgMjI1MiAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc6Ci0jbGluZSAzODYgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuYmxrKS5iID0gZ2VuX21jb2RlKGNzdGF0ZSwgKHl5dnNwWy0yXS5zKSwgKHl5dnNwWzBdLnMpLCAwLAotCQkJCSAgICAoeXl2YWwuYmxrKS5xID0gKHl5dnNwWy0zXS5ibGspLnEpOyB9Ci0jbGluZSAyMTYwICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgMzg4ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoeXl2c3BbLTJdLnMpKTsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLmJsaykuYiA9IGdlbl9tY29kZShjc3RhdGUsICh5eXZzcFstMl0ucyksICh5eXZzcFswXS5zKSwgMCwKKwkJCQkgICAgKHl5dmFsLmJsaykucSA9ICh5eXZzcFstM10uYmxrKS5xKSkpOyB9CisjbGluZSAyMjU5ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODoKLSNsaW5lIDM4OCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7CisjbGluZSAzOTAgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworCQkJCSAgQ0hFQ0tfUFRSX1ZBTCgoeXl2c3BbMF0ucykpOwogCQkJCSAgLyogRGVjaWRlIGhvdyB0byBwYXJzZSBISUQgYmFzZWQgb24gcHJvdG8gKi8KIAkJCQkgICh5eXZhbC5ibGspLnEgPSAoeXl2c3BbLTFdLmJsaykucTsKLQkJCQkgIGlmICgoeXl2YWwuYmxrKS5xLmFkZHIgPT0gUV9QT1JUKQotCQkJCSAgCWJwZl9lcnJvcihjc3RhdGUsICIncG9ydCcgbW9kaWZpZXIgYXBwbGllZCB0byBpcCBob3N0Iik7Ci0JCQkJICBlbHNlIGlmICgoeXl2YWwuYmxrKS5xLmFkZHIgPT0gUV9QT1JUUkFOR0UpCi0JCQkJICAJYnBmX2Vycm9yKGNzdGF0ZSwgIidwb3J0cmFuZ2UnIG1vZGlmaWVyIGFwcGxpZWQgdG8gaXAgaG9zdCIpOwotCQkJCSAgZWxzZSBpZiAoKHl5dmFsLmJsaykucS5hZGRyID09IFFfUFJPVE8pCi0JCQkJICAJYnBmX2Vycm9yKGNzdGF0ZSwgIidwcm90bycgbW9kaWZpZXIgYXBwbGllZCB0byBpcCBob3N0Iik7Ci0JCQkJICBlbHNlIGlmICgoeXl2YWwuYmxrKS5xLmFkZHIgPT0gUV9QUk9UT0NIQUlOKQotCQkJCSAgCWJwZl9lcnJvcihjc3RhdGUsICIncHJvdG9jaGFpbicgbW9kaWZpZXIgYXBwbGllZCB0byBpcCBob3N0Iik7Ci0JCQkJICAoeXl2YWwuYmxrKS5iID0gZ2VuX25jb2RlKGNzdGF0ZSwgKHl5dnNwWzBdLnMpLCAwLCAoeXl2YWwuYmxrKS5xKTsKKwkJCQkgIGlmICgoeXl2YWwuYmxrKS5xLmFkZHIgPT0gUV9QT1JUKSB7CisJCQkJICAJYnBmX3NldF9lcnJvcihjc3RhdGUsICIncG9ydCcgbW9kaWZpZXIgYXBwbGllZCB0byBpcCBob3N0Iik7CisJCQkJICAJWVlBQk9SVDsKKwkJCQkgIH0gZWxzZSBpZiAoKHl5dmFsLmJsaykucS5hZGRyID09IFFfUE9SVFJBTkdFKSB7CisJCQkJICAJYnBmX3NldF9lcnJvcihjc3RhdGUsICIncG9ydHJhbmdlJyBtb2RpZmllciBhcHBsaWVkIHRvIGlwIGhvc3QiKTsKKwkJCQkgIAlZWUFCT1JUOworCQkJCSAgfSBlbHNlIGlmICgoeXl2YWwuYmxrKS5xLmFkZHIgPT0gUV9QUk9UTykgeworCQkJCSAgCWJwZl9zZXRfZXJyb3IoY3N0YXRlLCAiJ3Byb3RvJyBtb2RpZmllciBhcHBsaWVkIHRvIGlwIGhvc3QiKTsKKwkJCQkgIAlZWUFCT1JUOworCQkJCSAgfSBlbHNlIGlmICgoeXl2YWwuYmxrKS5xLmFkZHIgPT0gUV9QUk9UT0NIQUlOKSB7CisJCQkJICAJYnBmX3NldF9lcnJvcihjc3RhdGUsICIncHJvdG9jaGFpbicgbW9kaWZpZXIgYXBwbGllZCB0byBpcCBob3N0Iik7CisJCQkJICAJWVlBQk9SVDsKKwkJCQkgIH0KKwkJCQkgIENIRUNLX1BUUl9WQUwoKCh5eXZhbC5ibGspLmIgPSBnZW5fbmNvZGUoY3N0YXRlLCAoeXl2c3BbMF0ucyksIDAsICh5eXZhbC5ibGspLnEpKSk7CiAJCQkJfQotI2xpbmUgMjE3OCAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDIyODMgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE5OgotI2xpbmUgNDAxICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsKKyNsaW5lIDQwOSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisJCQkJICBDSEVDS19QVFJfVkFMKCh5eXZzcFstMl0ucykpOwogI2lmZGVmIElORVQ2Ci0JCQkJICAoeXl2YWwuYmxrKS5iID0gZ2VuX21jb2RlNihjc3RhdGUsICh5eXZzcFstMl0ucyksIE5VTEwsICh5eXZzcFswXS5pKSwKLQkJCQkgICAgKHl5dmFsLmJsaykucSA9ICh5eXZzcFstM10uYmxrKS5xKTsKKwkJCQkgIENIRUNLX1BUUl9WQUwoKCh5eXZhbC5ibGspLmIgPSBnZW5fbWNvZGU2KGNzdGF0ZSwgKHl5dnNwWy0yXS5zKSwgTlVMTCwgKHl5dnNwWzBdLmkpLAorCQkJCSAgICAoeXl2YWwuYmxrKS5xID0gKHl5dnNwWy0zXS5ibGspLnEpKSk7CiAjZWxzZQotCQkJCSAgYnBmX2Vycm9yKGNzdGF0ZSwgIidpcDZhZGRyL3ByZWZpeGxlbicgbm90IHN1cHBvcnRlZCAiCisJCQkJICBicGZfc2V0X2Vycm9yKGNzdGF0ZSwgIidpcDZhZGRyL3ByZWZpeGxlbicgbm90IHN1cHBvcnRlZCAiCiAJCQkJCSJpbiB0aGlzIGNvbmZpZ3VyYXRpb24iKTsKKwkJCQkgIFlZQUJPUlQ7CiAjZW5kaWYgLypJTkVUNiovCiAJCQkJfQotI2xpbmUgMjE5MiAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDIyOTkgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDIwOgotI2xpbmUgNDEwICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsKKyNsaW5lIDQyMCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisJCQkJICBDSEVDS19QVFJfVkFMKCh5eXZzcFswXS5zKSk7CiAjaWZkZWYgSU5FVDYKLQkJCQkgICh5eXZhbC5ibGspLmIgPSBnZW5fbWNvZGU2KGNzdGF0ZSwgKHl5dnNwWzBdLnMpLCAwLCAxMjgsCi0JCQkJICAgICh5eXZhbC5ibGspLnEgPSAoeXl2c3BbLTFdLmJsaykucSk7CisJCQkJICBDSEVDS19QVFJfVkFMKCgoeXl2YWwuYmxrKS5iID0gZ2VuX21jb2RlNihjc3RhdGUsICh5eXZzcFswXS5zKSwgMCwgMTI4LAorCQkJCSAgICAoeXl2YWwuYmxrKS5xID0gKHl5dnNwWy0xXS5ibGspLnEpKSk7CiAjZWxzZQotCQkJCSAgYnBmX2Vycm9yKGNzdGF0ZSwgIidpcDZhZGRyJyBub3Qgc3VwcG9ydGVkICIKKwkJCQkgIGJwZl9zZXRfZXJyb3IoY3N0YXRlLCAiJ2lwNmFkZHInIG5vdCBzdXBwb3J0ZWQgIgogCQkJCQkiaW4gdGhpcyBjb25maWd1cmF0aW9uIik7CisJCQkJICBZWUFCT1JUOwogI2VuZGlmIC8qSU5FVDYqLwogCQkJCX0KLSNsaW5lIDIyMDYgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSAyMzE1ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMToKLSNsaW5lIDQxOSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7Ci0JCQkJICAoeXl2YWwuYmxrKS5iID0gZ2VuX2Vjb2RlKGNzdGF0ZSwgKHl5dnNwWzBdLmUpLCAoeXl2YWwuYmxrKS5xID0gKHl5dnNwWy0xXS5ibGspLnEpOwotCQkJCSAgLyoKLQkJCQkgICAqICQxIHdhcyBhbGxvY2F0ZWQgYnkgInBjYXBfZXRoZXJfYXRvbigpIiwKLQkJCQkgICAqIHNvIHdlIG11c3QgZnJlZSBpdCBub3cgdGhhdCB3ZSdyZSBkb25lCi0JCQkJICAgKiB3aXRoIGl0LgotCQkJCSAgICovCi0JCQkJICBmcmVlKCh5eXZzcFswXS5lKSk7Ci0JCQkJfQotI2xpbmUgMjIyMCAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDQzMSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKHl5dnNwWzBdLnMpKTsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLmJsaykuYiA9IGdlbl9lY29kZShjc3RhdGUsICh5eXZzcFswXS5zKSwgKHl5dmFsLmJsaykucSA9ICh5eXZzcFstMV0uYmxrKS5xKSkpOyB9CisjbGluZSAyMzIxICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMjoKLSNsaW5lIDQyOCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7Ci0JCQkJICAoeXl2YWwuYmxrKS5iID0gZ2VuX2Fjb2RlKGNzdGF0ZSwgKHl5dnNwWzBdLmUpLCAoeXl2YWwuYmxrKS5xID0gKHl5dnNwWy0xXS5ibGspLnEpOwotCQkJCSAgLyoKLQkJCQkgICAqICQxIHdhcyBhbGxvY2F0ZWQgYnkgInBjYXBfZXRoZXJfYXRvbigpIiwKLQkJCQkgICAqIHNvIHdlIG11c3QgZnJlZSBpdCBub3cgdGhhdCB3ZSdyZSBkb25lCi0JCQkJICAgKiB3aXRoIGl0LgotCQkJCSAgICovCi0JCQkJICBmcmVlKCh5eXZzcFswXS5lKSk7Ci0JCQkJfQotI2xpbmUgMjIzNCAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDQzMiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKHl5dnNwWzBdLnMpKTsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLmJsaykuYiA9IGdlbl9hY29kZShjc3RhdGUsICh5eXZzcFswXS5zKSwgKHl5dmFsLmJsaykucSA9ICh5eXZzcFstMV0uYmxrKS5xKSkpOyB9CisjbGluZSAyMzI3ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMzoKLSNsaW5lIDQzNyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7IGdlbl9ub3QoKHl5dnNwWzBdLmJsaykuYik7ICh5eXZhbC5ibGspID0gKHl5dnNwWzBdLmJsayk7IH0KLSNsaW5lIDIyNDAgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA0MzMgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnZW5fbm90KCh5eXZzcFswXS5ibGspLmIpOyAoeXl2YWwuYmxrKSA9ICh5eXZzcFswXS5ibGspOyB9CisjbGluZSAyMzMzICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyNDoKLSNsaW5lIDQzOSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5ibGspID0gKHl5dnNwWy0xXS5ibGspOyB9Ci0jbGluZSAyMjQ2ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNDM1ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmJsaykgPSAoeXl2c3BbLTFdLmJsayk7IH0KKyNsaW5lIDIzMzkgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDI1OgotI2xpbmUgNDQxICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmJsaykgPSAoeXl2c3BbLTFdLmJsayk7IH0KLSNsaW5lIDIyNTIgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA0MzcgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuYmxrKSA9ICh5eXZzcFstMV0uYmxrKTsgfQorI2xpbmUgMjM0NSAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjc6Ci0jbGluZSA0NDQgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyBnZW5fYW5kKCh5eXZzcFstMl0uYmxrKS5iLCAoeXl2c3BbMF0uYmxrKS5iKTsgKHl5dmFsLmJsaykgPSAoeXl2c3BbMF0uYmxrKTsgfQotI2xpbmUgMjI1OCAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDQ0MCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdlbl9hbmQoKHl5dnNwWy0yXS5ibGspLmIsICh5eXZzcFswXS5ibGspLmIpOyAoeXl2YWwuYmxrKSA9ICh5eXZzcFswXS5ibGspOyB9CisjbGluZSAyMzUxICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyODoKLSNsaW5lIDQ0NSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7IGdlbl9vcigoeXl2c3BbLTJdLmJsaykuYiwgKHl5dnNwWzBdLmJsaykuYik7ICh5eXZhbC5ibGspID0gKHl5dnNwWzBdLmJsayk7IH0KLSNsaW5lIDIyNjQgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA0NDEgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnZW5fb3IoKHl5dnNwWy0yXS5ibGspLmIsICh5eXZzcFswXS5ibGspLmIpOyAoeXl2YWwuYmxrKSA9ICh5eXZzcFswXS5ibGspOyB9CisjbGluZSAyMzU3ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyOToKLSNsaW5lIDQ0NyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5ibGspLmIgPSBnZW5fbmNvZGUoY3N0YXRlLCBOVUxMLCAoYnBmX3VfaW50MzIpKHl5dnNwWzBdLmkpLAotCQkJCQkJICAgKHl5dmFsLmJsaykucSA9ICh5eXZzcFstMV0uYmxrKS5xKTsgfQotI2xpbmUgMjI3MSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDQ0MyAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKCh5eXZhbC5ibGspLmIgPSBnZW5fbmNvZGUoY3N0YXRlLCBOVUxMLCAoYnBmX3VfaW50MzIpKHl5dnNwWzBdLmkpLAorCQkJCQkJICAgKHl5dmFsLmJsaykucSA9ICh5eXZzcFstMV0uYmxrKS5xKSkpOyB9CisjbGluZSAyMzY0ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMjoKLSNsaW5lIDQ1MiAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7IGdlbl9ub3QoKHl5dnNwWzBdLmJsaykuYik7ICh5eXZhbC5ibGspID0gKHl5dnNwWzBdLmJsayk7IH0KLSNsaW5lIDIyNzcgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA0NDggImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnZW5fbm90KCh5eXZzcFswXS5ibGspLmIpOyAoeXl2YWwuYmxrKSA9ICh5eXZzcFswXS5ibGspOyB9CisjbGluZSAyMzcwICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzMzoKLSNsaW5lIDQ1NCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7IFFTRVQoKHl5dmFsLmJsaykucSwgKHl5dnNwWy0yXS5pKSwgKHl5dnNwWy0xXS5pKSwgKHl5dnNwWzBdLmkpKTsgfQotI2xpbmUgMjI4MyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDQ1MCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFFTRVQoKHl5dmFsLmJsaykucSwgKHl5dnNwWy0yXS5pKSwgKHl5dnNwWy0xXS5pKSwgKHl5dnNwWzBdLmkpKTsgfQorI2xpbmUgMjM3NiAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMzQ6Ci0jbGluZSA0NTUgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyBRU0VUKCh5eXZhbC5ibGspLnEsICh5eXZzcFstMV0uaSksICh5eXZzcFswXS5pKSwgUV9ERUZBVUxUKTsgfQotI2xpbmUgMjI4OSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDQ1MSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFFTRVQoKHl5dmFsLmJsaykucSwgKHl5dnNwWy0xXS5pKSwgKHl5dnNwWzBdLmkpLCBRX0RFRkFVTFQpOyB9CisjbGluZSAyMzgyICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNToKLSNsaW5lIDQ1NiAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7IFFTRVQoKHl5dmFsLmJsaykucSwgKHl5dnNwWy0xXS5pKSwgUV9ERUZBVUxULCAoeXl2c3BbMF0uaSkpOyB9Ci0jbGluZSAyMjk1ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNDUyICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUVNFVCgoeXl2YWwuYmxrKS5xLCAoeXl2c3BbLTFdLmkpLCBRX0RFRkFVTFQsICh5eXZzcFswXS5pKSk7IH0KKyNsaW5lIDIzODggImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDM2OgotI2xpbmUgNDU3ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgUVNFVCgoeXl2YWwuYmxrKS5xLCAoeXl2c3BbLTFdLmkpLCBRX0RFRkFVTFQsIFFfUFJPVE8pOyB9Ci0jbGluZSAyMzAxICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNDUzICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgUVNFVCgoeXl2YWwuYmxrKS5xLCAoeXl2c3BbLTFdLmkpLCBRX0RFRkFVTFQsIFFfUFJPVE8pOyB9CisjbGluZSAyMzk0ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAzNzoKLSNsaW5lIDQ1OCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7IFFTRVQoKHl5dmFsLmJsaykucSwgKHl5dnNwWy0xXS5pKSwgUV9ERUZBVUxULCBRX1BST1RPQ0hBSU4pOyB9Ci0jbGluZSAyMzA3ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNDU0ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyNpZmRlZiBOT19QUk9UT0NIQUlOCisJCQkJICBicGZfc2V0X2Vycm9yKGNzdGF0ZSwgInByb3RvY2hhaW4gbm90IHN1cHBvcnRlZCIpOworCQkJCSAgWVlBQk9SVDsKKyNlbHNlCisJCQkJICBRU0VUKCh5eXZhbC5ibGspLnEsICh5eXZzcFstMV0uaSksIFFfREVGQVVMVCwgUV9QUk9UT0NIQUlOKTsKKyNlbmRpZgorCQkJCX0KKyNsaW5lIDI0MDcgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDM4OgotI2xpbmUgNDU5ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgUVNFVCgoeXl2YWwuYmxrKS5xLCAoeXl2c3BbLTFdLmkpLCBRX0RFRkFVTFQsICh5eXZzcFswXS5pKSk7IH0KLSNsaW5lIDIzMTMgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA0NjIgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBRU0VUKCh5eXZhbC5ibGspLnEsICh5eXZzcFstMV0uaSksIFFfREVGQVVMVCwgKHl5dnNwWzBdLmkpKTsgfQorI2xpbmUgMjQxMyAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMzk6Ci0jbGluZSA0NjEgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuYmxrKSA9ICh5eXZzcFswXS5ibGspOyB9Ci0jbGluZSAyMzE5ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNDY0ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmJsaykgPSAoeXl2c3BbMF0uYmxrKTsgfQorI2xpbmUgMjQxOSAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgNDA6Ci0jbGluZSA0NjIgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuYmxrKS5iID0gKHl5dnNwWy0xXS5ibGspLmI7ICh5eXZhbC5ibGspLnEgPSAoeXl2c3BbLTJdLmJsaykucTsgfQotI2xpbmUgMjMyNSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDQ2NSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5ibGspLmIgPSAoeXl2c3BbLTFdLmJsaykuYjsgKHl5dmFsLmJsaykucSA9ICh5eXZzcFstMl0uYmxrKS5xOyB9CisjbGluZSAyNDI1ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA0MToKLSNsaW5lIDQ2MyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5ibGspLmIgPSBnZW5fcHJvdG9fYWJicmV2KGNzdGF0ZSwgKHl5dnNwWzBdLmkpKTsgKHl5dmFsLmJsaykucSA9IHFlcnI7IH0KLSNsaW5lIDIzMzEgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA0NjYgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDSEVDS19QVFJfVkFMKCgoeXl2YWwuYmxrKS5iID0gZ2VuX3Byb3RvX2FiYnJldihjc3RhdGUsICh5eXZzcFswXS5pKSkpKTsgKHl5dmFsLmJsaykucSA9IHFlcnI7IH0KKyNsaW5lIDI0MzEgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDQyOgotI2xpbmUgNDY0ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmJsaykuYiA9IGdlbl9yZWxhdGlvbihjc3RhdGUsICh5eXZzcFstMV0uaSksICh5eXZzcFstMl0uYSksICh5eXZzcFswXS5hKSwgMCk7CisjbGluZSA0NjcgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDSEVDS19QVFJfVkFMKCgoeXl2YWwuYmxrKS5iID0gZ2VuX3JlbGF0aW9uKGNzdGF0ZSwgKHl5dnNwWy0xXS5pKSwgKHl5dnNwWy0yXS5hKSwgKHl5dnNwWzBdLmEpLCAwKSkpOwogCQkJCSAgKHl5dmFsLmJsaykucSA9IHFlcnI7IH0KLSNsaW5lIDIzMzggImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSAyNDM4ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA0MzoKLSNsaW5lIDQ2NiAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5ibGspLmIgPSBnZW5fcmVsYXRpb24oY3N0YXRlLCAoeXl2c3BbLTFdLmkpLCAoeXl2c3BbLTJdLmEpLCAoeXl2c3BbMF0uYSksIDEpOworI2xpbmUgNDY5ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLmJsaykuYiA9IGdlbl9yZWxhdGlvbihjc3RhdGUsICh5eXZzcFstMV0uaSksICh5eXZzcFstMl0uYSksICh5eXZzcFswXS5hKSwgMSkpKTsKIAkJCQkgICh5eXZhbC5ibGspLnEgPSBxZXJyOyB9Ci0jbGluZSAyMzQ1ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgMjQ0NSAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgNDQ6Ci0jbGluZSA0NjggImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuYmxrKS5iID0gKHl5dnNwWzBdLnJibGspOyAoeXl2YWwuYmxrKS5xID0gcWVycjsgfQotI2xpbmUgMjM1MSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDQ3MSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5ibGspLmIgPSAoeXl2c3BbMF0ucmJsayk7ICh5eXZhbC5ibGspLnEgPSBxZXJyOyB9CisjbGluZSAyNDUxICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA0NToKLSNsaW5lIDQ2OSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5ibGspLmIgPSBnZW5fYXRtdHlwZV9hYmJyZXYoY3N0YXRlLCAoeXl2c3BbMF0uaSkpOyAoeXl2YWwuYmxrKS5xID0gcWVycjsgfQotI2xpbmUgMjM1NyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDQ3MiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKCh5eXZhbC5ibGspLmIgPSBnZW5fYXRtdHlwZV9hYmJyZXYoY3N0YXRlLCAoeXl2c3BbMF0uaSkpKSk7ICh5eXZhbC5ibGspLnEgPSBxZXJyOyB9CisjbGluZSAyNDU3ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA0NjoKLSNsaW5lIDQ3MCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5ibGspLmIgPSBnZW5fYXRtbXVsdGlfYWJicmV2KGNzdGF0ZSwgKHl5dnNwWzBdLmkpKTsgKHl5dmFsLmJsaykucSA9IHFlcnI7IH0KLSNsaW5lIDIzNjMgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA0NzMgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDSEVDS19QVFJfVkFMKCgoeXl2YWwuYmxrKS5iID0gZ2VuX2F0bW11bHRpX2FiYnJldihjc3RhdGUsICh5eXZzcFswXS5pKSkpKTsgKHl5dmFsLmJsaykucSA9IHFlcnI7IH0KKyNsaW5lIDI0NjMgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDQ3OgotI2xpbmUgNDcxICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmJsaykuYiA9ICh5eXZzcFswXS5ibGspLmI7ICh5eXZhbC5ibGspLnEgPSBxZXJyOyB9Ci0jbGluZSAyMzY5ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNDc0ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmJsaykuYiA9ICh5eXZzcFswXS5ibGspLmI7ICh5eXZhbC5ibGspLnEgPSBxZXJyOyB9CisjbGluZSAyNDY5ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA0ODoKLSNsaW5lIDQ3MiAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5ibGspLmIgPSBnZW5fbXRwMnR5cGVfYWJicmV2KGNzdGF0ZSwgKHl5dnNwWzBdLmkpKTsgKHl5dmFsLmJsaykucSA9IHFlcnI7IH0KLSNsaW5lIDIzNzUgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA0NzUgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDSEVDS19QVFJfVkFMKCgoeXl2YWwuYmxrKS5iID0gZ2VuX210cDJ0eXBlX2FiYnJldihjc3RhdGUsICh5eXZzcFswXS5pKSkpKTsgKHl5dmFsLmJsaykucSA9IHFlcnI7IH0KKyNsaW5lIDI0NzUgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDQ5OgotI2xpbmUgNDczICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmJsaykuYiA9ICh5eXZzcFswXS5ibGspLmI7ICh5eXZhbC5ibGspLnEgPSBxZXJyOyB9Ci0jbGluZSAyMzgxICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNDc2ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmJsaykuYiA9ICh5eXZzcFswXS5ibGspLmI7ICh5eXZhbC5ibGspLnEgPSBxZXJyOyB9CisjbGluZSAyNDgxICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA1MToKLSNsaW5lIDQ3NyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfREVGQVVMVDsgfQotI2xpbmUgMjM4NyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDQ4MCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfREVGQVVMVDsgfQorI2xpbmUgMjQ4NyAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgNTI6Ci0jbGluZSA0ODAgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBRX1NSQzsgfQotI2xpbmUgMjM5MyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDQ4MyAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfU1JDOyB9CisjbGluZSAyNDkzICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA1MzoKLSNsaW5lIDQ4MSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfRFNUOyB9Ci0jbGluZSAyMzk5ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNDg0ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gUV9EU1Q7IH0KKyNsaW5lIDI0OTkgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDU0OgotI2xpbmUgNDgyICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gUV9PUjsgfQotI2xpbmUgMjQwNSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDQ4NSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfT1I7IH0KKyNsaW5lIDI1MDUgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDU1OgotI2xpbmUgNDgzICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gUV9PUjsgfQotI2xpbmUgMjQxMSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDQ4NiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfT1I7IH0KKyNsaW5lIDI1MTEgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDU2OgotI2xpbmUgNDg0ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gUV9BTkQ7IH0KLSNsaW5lIDI0MTcgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA0ODcgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX0FORDsgfQorI2xpbmUgMjUxNyAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgNTc6Ci0jbGluZSA0ODUgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBRX0FORDsgfQotI2xpbmUgMjQyMyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDQ4OCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfQU5EOyB9CisjbGluZSAyNTIzICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA1ODoKLSNsaW5lIDQ4NiAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfQUREUjE7IH0KLSNsaW5lIDI0MjkgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA0ODkgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX0FERFIxOyB9CisjbGluZSAyNTI5ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA1OToKLSNsaW5lIDQ4NyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfQUREUjI7IH0KLSNsaW5lIDI0MzUgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA0OTAgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX0FERFIyOyB9CisjbGluZSAyNTM1ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA2MDoKLSNsaW5lIDQ4OCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfQUREUjM7IH0KLSNsaW5lIDI0NDEgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA0OTEgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX0FERFIzOyB9CisjbGluZSAyNTQxICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA2MToKLSNsaW5lIDQ4OSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfQUREUjQ7IH0KLSNsaW5lIDI0NDcgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA0OTIgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX0FERFI0OyB9CisjbGluZSAyNTQ3ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA2MjoKLSNsaW5lIDQ5MCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfUkE7IH0KLSNsaW5lIDI0NTMgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA0OTMgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX1JBOyB9CisjbGluZSAyNTUzICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA2MzoKLSNsaW5lIDQ5MSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfVEE7IH0KLSNsaW5lIDI0NTkgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA0OTQgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX1RBOyB9CisjbGluZSAyNTU5ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA2NDoKLSNsaW5lIDQ5NCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfSE9TVDsgfQotI2xpbmUgMjQ2NSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDQ5NyAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfSE9TVDsgfQorI2xpbmUgMjU2NSAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgNjU6Ci0jbGluZSA0OTUgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBRX05FVDsgfQotI2xpbmUgMjQ3MSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDQ5OCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfTkVUOyB9CisjbGluZSAyNTcxICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA2NjoKLSNsaW5lIDQ5NiAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfUE9SVDsgfQotI2xpbmUgMjQ3NyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDQ5OSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfUE9SVDsgfQorI2xpbmUgMjU3NyAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgNjc6Ci0jbGluZSA0OTcgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBRX1BPUlRSQU5HRTsgfQotI2xpbmUgMjQ4MyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDUwMCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfUE9SVFJBTkdFOyB9CisjbGluZSAyNTgzICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA2ODoKLSNsaW5lIDUwMCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfR0FURVdBWTsgfQotI2xpbmUgMjQ4OSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDUwMyAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfR0FURVdBWTsgfQorI2xpbmUgMjU4OSAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgNjk6Ci0jbGluZSA1MDIgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBRX0xJTks7IH0KLSNsaW5lIDI0OTUgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1MDUgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX0xJTks7IH0KKyNsaW5lIDI1OTUgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDcwOgotI2xpbmUgNTAzICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gUV9JUDsgfQotI2xpbmUgMjUwMSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDUwNiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfSVA7IH0KKyNsaW5lIDI2MDEgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDcxOgotI2xpbmUgNTA0ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gUV9BUlA7IH0KLSNsaW5lIDI1MDcgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1MDcgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX0FSUDsgfQorI2xpbmUgMjYwNyAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgNzI6Ci0jbGluZSA1MDUgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBRX1JBUlA7IH0KLSNsaW5lIDI1MTMgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1MDggImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX1JBUlA7IH0KKyNsaW5lIDI2MTMgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDczOgotI2xpbmUgNTA2ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gUV9TQ1RQOyB9Ci0jbGluZSAyNTE5ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNTA5ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gUV9TQ1RQOyB9CisjbGluZSAyNjE5ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA3NDoKLSNsaW5lIDUwNyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfVENQOyB9Ci0jbGluZSAyNTI1ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNTEwICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gUV9UQ1A7IH0KKyNsaW5lIDI2MjUgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDc1OgotI2xpbmUgNTA4ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gUV9VRFA7IH0KLSNsaW5lIDI1MzEgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1MTEgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX1VEUDsgfQorI2xpbmUgMjYzMSAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgNzY6Ci0jbGluZSA1MDkgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBRX0lDTVA7IH0KLSNsaW5lIDI1MzcgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1MTIgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX0lDTVA7IH0KKyNsaW5lIDI2MzcgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDc3OgotI2xpbmUgNTEwICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gUV9JR01QOyB9Ci0jbGluZSAyNTQzICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNTEzICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gUV9JR01QOyB9CisjbGluZSAyNjQzICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA3ODoKLSNsaW5lIDUxMSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfSUdSUDsgfQotI2xpbmUgMjU0OSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDUxNCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfSUdSUDsgfQorI2xpbmUgMjY0OSAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgNzk6Ci0jbGluZSA1MTIgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBRX1BJTTsgfQotI2xpbmUgMjU1NSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDUxNSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfUElNOyB9CisjbGluZSAyNjU1ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA4MDoKLSNsaW5lIDUxMyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfVlJSUDsgfQotI2xpbmUgMjU2MSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDUxNiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfVlJSUDsgfQorI2xpbmUgMjY2MSAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgODE6Ci0jbGluZSA1MTQgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBRX0NBUlA7IH0KLSNsaW5lIDI1NjcgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1MTcgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX0NBUlA7IH0KKyNsaW5lIDI2NjcgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDgyOgotI2xpbmUgNTE1ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gUV9BVEFMSzsgfQotI2xpbmUgMjU3MyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDUxOCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfQVRBTEs7IH0KKyNsaW5lIDI2NzMgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDgzOgotI2xpbmUgNTE2ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gUV9BQVJQOyB9Ci0jbGluZSAyNTc5ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNTE5ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gUV9BQVJQOyB9CisjbGluZSAyNjc5ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA4NDoKLSNsaW5lIDUxNyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfREVDTkVUOyB9Ci0jbGluZSAyNTg1ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNTIwICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gUV9ERUNORVQ7IH0KKyNsaW5lIDI2ODUgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDg1OgotI2xpbmUgNTE4ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gUV9MQVQ7IH0KLSNsaW5lIDI1OTEgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1MjEgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX0xBVDsgfQorI2xpbmUgMjY5MSAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgODY6Ci0jbGluZSA1MTkgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBRX1NDQTsgfQotI2xpbmUgMjU5NyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDUyMiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfU0NBOyB9CisjbGluZSAyNjk3ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA4NzoKLSNsaW5lIDUyMCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfTU9QREw7IH0KLSNsaW5lIDI2MDMgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1MjMgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX01PUERMOyB9CisjbGluZSAyNzAzICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA4ODoKLSNsaW5lIDUyMSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfTU9QUkM7IH0KLSNsaW5lIDI2MDkgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1MjQgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX01PUFJDOyB9CisjbGluZSAyNzA5ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA4OToKLSNsaW5lIDUyMiAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfSVBWNjsgfQotI2xpbmUgMjYxNSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDUyNSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfSVBWNjsgfQorI2xpbmUgMjcxNSAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgOTA6Ci0jbGluZSA1MjMgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBRX0lDTVBWNjsgfQotI2xpbmUgMjYyMSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDUyNiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfSUNNUFY2OyB9CisjbGluZSAyNzIxICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MToKLSNsaW5lIDUyNCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfQUg7IH0KLSNsaW5lIDI2MjcgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1MjcgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX0FIOyB9CisjbGluZSAyNzI3ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA5MjoKLSNsaW5lIDUyNSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfRVNQOyB9Ci0jbGluZSAyNjMzICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNTI4ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gUV9FU1A7IH0KKyNsaW5lIDI3MzMgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDkzOgotI2xpbmUgNTI2ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gUV9JU087IH0KLSNsaW5lIDI2MzkgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1MjkgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX0lTTzsgfQorI2xpbmUgMjczOSAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgOTQ6Ci0jbGluZSA1MjcgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBRX0VTSVM7IH0KLSNsaW5lIDI2NDUgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1MzAgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX0VTSVM7IH0KKyNsaW5lIDI3NDUgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDk1OgotI2xpbmUgNTI4ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gUV9JU0lTOyB9Ci0jbGluZSAyNjUxICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNTMxICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gUV9JU0lTOyB9CisjbGluZSAyNzUxICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSA5NjoKLSNsaW5lIDUyOSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfSVNJU19MMTsgfQotI2xpbmUgMjY1NyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDUzMiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfSVNJU19MMTsgfQorI2xpbmUgMjc1NyAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgOTc6Ci0jbGluZSA1MzAgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBRX0lTSVNfTDI7IH0KLSNsaW5lIDI2NjMgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1MzMgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX0lTSVNfTDI7IH0KKyNsaW5lIDI3NjMgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDk4OgotI2xpbmUgNTMxICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gUV9JU0lTX0lJSDsgfQotI2xpbmUgMjY2OSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDUzNCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfSVNJU19JSUg7IH0KKyNsaW5lIDI3NjkgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDk5OgotI2xpbmUgNTMyICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gUV9JU0lTX0xTUDsgfQotI2xpbmUgMjY3NSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDUzNSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfSVNJU19MU1A7IH0KKyNsaW5lIDI3NzUgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDEwMDoKLSNsaW5lIDUzMyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfSVNJU19TTlA7IH0KLSNsaW5lIDI2ODEgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1MzYgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX0lTSVNfU05QOyB9CisjbGluZSAyNzgxICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDE6Ci0jbGluZSA1MzQgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBRX0lTSVNfUFNOUDsgfQotI2xpbmUgMjY4NyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDUzNyAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfSVNJU19QU05QOyB9CisjbGluZSAyNzg3ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDI6Ci0jbGluZSA1MzUgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBRX0lTSVNfQ1NOUDsgfQotI2xpbmUgMjY5MyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDUzOCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfSVNJU19DU05QOyB9CisjbGluZSAyNzkzICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDM6Ci0jbGluZSA1MzYgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBRX0NMTlA7IH0KLSNsaW5lIDI2OTkgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1MzkgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBRX0NMTlA7IH0KKyNsaW5lIDI3OTkgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDEwNDoKLSNsaW5lIDUzNyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfU1RQOyB9Ci0jbGluZSAyNzA1ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNTQwICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gUV9TVFA7IH0KKyNsaW5lIDI4MDUgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDEwNToKLSNsaW5lIDUzOCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfSVBYOyB9Ci0jbGluZSAyNzExICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNTQxICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gUV9JUFg7IH0KKyNsaW5lIDI4MTEgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDEwNjoKLSNsaW5lIDUzOSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IFFfTkVUQkVVSTsgfQotI2xpbmUgMjcxNyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDU0MiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfTkVUQkVVSTsgfQorI2xpbmUgMjgxNyAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA3OgotI2xpbmUgNTQwICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gUV9SQURJTzsgfQotI2xpbmUgMjcyMyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDU0MyAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IFFfUkFESU87IH0KKyNsaW5lIDI4MjMgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDEwODoKLSNsaW5lIDU0MiAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5yYmxrKSA9IGdlbl9icm9hZGNhc3QoY3N0YXRlLCAoeXl2c3BbLTFdLmkpKTsgfQotI2xpbmUgMjcyOSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDU0NSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKCh5eXZhbC5yYmxrKSA9IGdlbl9icm9hZGNhc3QoY3N0YXRlLCAoeXl2c3BbLTFdLmkpKSkpOyB9CisjbGluZSAyODI5ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMDk6Ci0jbGluZSA1NDMgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwucmJsaykgPSBnZW5fbXVsdGljYXN0KGNzdGF0ZSwgKHl5dnNwWy0xXS5pKSk7IH0KLSNsaW5lIDI3MzUgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1NDYgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDSEVDS19QVFJfVkFMKCgoeXl2YWwucmJsaykgPSBnZW5fbXVsdGljYXN0KGNzdGF0ZSwgKHl5dnNwWy0xXS5pKSkpKTsgfQorI2xpbmUgMjgzNSAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTEwOgotI2xpbmUgNTQ0ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLnJibGspID0gZ2VuX2xlc3MoY3N0YXRlLCAoeXl2c3BbMF0uaSkpOyB9Ci0jbGluZSAyNzQxICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNTQ3ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLnJibGspID0gZ2VuX2xlc3MoY3N0YXRlLCAoeXl2c3BbMF0uaSkpKSk7IH0KKyNsaW5lIDI4NDEgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDExMToKLSNsaW5lIDU0NSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5yYmxrKSA9IGdlbl9ncmVhdGVyKGNzdGF0ZSwgKHl5dnNwWzBdLmkpKTsgfQotI2xpbmUgMjc0NyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDU0OCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKCh5eXZhbC5yYmxrKSA9IGdlbl9ncmVhdGVyKGNzdGF0ZSwgKHl5dnNwWzBdLmkpKSkpOyB9CisjbGluZSAyODQ3ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMTI6Ci0jbGluZSA1NDYgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwucmJsaykgPSBnZW5fYnl0ZW9wKGNzdGF0ZSwgKHl5dnNwWy0xXS5pKSwgKHl5dnNwWy0yXS5pKSwgKHl5dnNwWzBdLmkpKTsgfQotI2xpbmUgMjc1MyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDU0OSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKCh5eXZhbC5yYmxrKSA9IGdlbl9ieXRlb3AoY3N0YXRlLCAoeXl2c3BbLTFdLmkpLCAoeXl2c3BbLTJdLmkpLCAoeXl2c3BbMF0uaSkpKSk7IH0KKyNsaW5lIDI4NTMgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDExMzoKLSNsaW5lIDU0NyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5yYmxrKSA9IGdlbl9pbmJvdW5kKGNzdGF0ZSwgMCk7IH0KLSNsaW5lIDI3NTkgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1NTAgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDSEVDS19QVFJfVkFMKCgoeXl2YWwucmJsaykgPSBnZW5faW5ib3VuZChjc3RhdGUsIDApKSk7IH0KKyNsaW5lIDI4NTkgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDExNDoKLSNsaW5lIDU0OCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5yYmxrKSA9IGdlbl9pbmJvdW5kKGNzdGF0ZSwgMSk7IH0KLSNsaW5lIDI3NjUgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1NTEgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDSEVDS19QVFJfVkFMKCgoeXl2YWwucmJsaykgPSBnZW5faW5ib3VuZChjc3RhdGUsIDEpKSk7IH0KKyNsaW5lIDI4NjUgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDExNToKLSNsaW5lIDU0OSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5yYmxrKSA9IGdlbl92bGFuKGNzdGF0ZSwgKHl5dnNwWzBdLmkpKTsgfQotI2xpbmUgMjc3MSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDU1MiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKCh5eXZhbC5yYmxrKSA9IGdlbl92bGFuKGNzdGF0ZSwgKGJwZl91X2ludDMyKSh5eXZzcFswXS5pKSwgMSkpKTsgfQorI2xpbmUgMjg3MSAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE2OgotI2xpbmUgNTUwICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLnJibGspID0gZ2VuX3ZsYW4oY3N0YXRlLCAtMSk7IH0KLSNsaW5lIDI3NzcgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1NTMgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDSEVDS19QVFJfVkFMKCgoeXl2YWwucmJsaykgPSBnZW5fdmxhbihjc3RhdGUsIDAsIDApKSk7IH0KKyNsaW5lIDI4NzcgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDExNzoKLSNsaW5lIDU1MSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5yYmxrKSA9IGdlbl9tcGxzKGNzdGF0ZSwgKHl5dnNwWzBdLmkpKTsgfQotI2xpbmUgMjc4MyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDU1NCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKCh5eXZhbC5yYmxrKSA9IGdlbl9tcGxzKGNzdGF0ZSwgKGJwZl91X2ludDMyKSh5eXZzcFswXS5pKSwgMSkpKTsgfQorI2xpbmUgMjg4MyAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE4OgotI2xpbmUgNTUyICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLnJibGspID0gZ2VuX21wbHMoY3N0YXRlLCAtMSk7IH0KLSNsaW5lIDI3ODkgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1NTUgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDSEVDS19QVFJfVkFMKCgoeXl2YWwucmJsaykgPSBnZW5fbXBscyhjc3RhdGUsIDAsIDApKSk7IH0KKyNsaW5lIDI4ODkgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDExOToKLSNsaW5lIDU1MyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5yYmxrKSA9IGdlbl9wcHBvZWQoY3N0YXRlKTsgfQotI2xpbmUgMjc5NSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDU1NiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKCh5eXZhbC5yYmxrKSA9IGdlbl9wcHBvZWQoY3N0YXRlKSkpOyB9CisjbGluZSAyODk1ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjA6Ci0jbGluZSA1NTQgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwucmJsaykgPSBnZW5fcHBwb2VzKGNzdGF0ZSwgKHl5dnNwWzBdLmkpKTsgfQotI2xpbmUgMjgwMSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDU1NyAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKCh5eXZhbC5yYmxrKSA9IGdlbl9wcHBvZXMoY3N0YXRlLCAoYnBmX3VfaW50MzIpKHl5dnNwWzBdLmkpLCAxKSkpOyB9CisjbGluZSAyOTAxICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjE6Ci0jbGluZSA1NTUgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwucmJsaykgPSBnZW5fcHBwb2VzKGNzdGF0ZSwgLTEpOyB9Ci0jbGluZSAyODA3ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNTU4ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLnJibGspID0gZ2VuX3BwcG9lcyhjc3RhdGUsIDAsIDApKSk7IH0KKyNsaW5lIDI5MDcgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDEyMjoKLSNsaW5lIDU1NiAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5yYmxrKSA9IGdlbl9nZW5ldmUoY3N0YXRlLCAoeXl2c3BbMF0uaSkpOyB9Ci0jbGluZSAyODEzICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNTU5ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLnJibGspID0gZ2VuX2dlbmV2ZShjc3RhdGUsIChicGZfdV9pbnQzMikoeXl2c3BbMF0uaSksIDEpKSk7IH0KKyNsaW5lIDI5MTMgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDEyMzoKLSNsaW5lIDU1NyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5yYmxrKSA9IGdlbl9nZW5ldmUoY3N0YXRlLCAtMSk7IH0KLSNsaW5lIDI4MTkgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1NjAgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDSEVDS19QVFJfVkFMKCgoeXl2YWwucmJsaykgPSBnZW5fZ2VuZXZlKGNzdGF0ZSwgMCwgMCkpKTsgfQorI2xpbmUgMjkxOSAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI0OgotI2xpbmUgNTU4ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLnJibGspID0gKHl5dnNwWzBdLnJibGspOyB9Ci0jbGluZSAyODI1ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNTYxICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLnJibGspID0gKHl5dnNwWzBdLnJibGspOyB9CisjbGluZSAyOTI1ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMjU6Ci0jbGluZSA1NTkgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwucmJsaykgPSAoeXl2c3BbMF0ucmJsayk7IH0KLSNsaW5lIDI4MzEgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1NjIgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwucmJsaykgPSAoeXl2c3BbMF0ucmJsayk7IH0KKyNsaW5lIDI5MzEgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDEyNjoKLSNsaW5lIDU2MCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5yYmxrKSA9ICh5eXZzcFswXS5yYmxrKTsgfQotI2xpbmUgMjgzNyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDU2MyAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5yYmxrKSA9ICh5eXZzcFswXS5yYmxrKTsgfQorI2xpbmUgMjkzNyAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI3OgotI2xpbmUgNTYzICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLnJibGspID0gZ2VuX3BmX2lmbmFtZShjc3RhdGUsICh5eXZzcFswXS5zKSk7IH0KLSNsaW5lIDI4NDMgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1NjYgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDSEVDS19QVFJfVkFMKCh5eXZzcFswXS5zKSk7IENIRUNLX1BUUl9WQUwoKCh5eXZhbC5yYmxrKSA9IGdlbl9wZl9pZm5hbWUoY3N0YXRlLCAoeXl2c3BbMF0ucykpKSk7IH0KKyNsaW5lIDI5NDMgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDEyODoKLSNsaW5lIDU2NCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5yYmxrKSA9IGdlbl9wZl9ydWxlc2V0KGNzdGF0ZSwgKHl5dnNwWzBdLnMpKTsgfQotI2xpbmUgMjg0OSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDU2NyAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKHl5dnNwWzBdLnMpKTsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLnJibGspID0gZ2VuX3BmX3J1bGVzZXQoY3N0YXRlLCAoeXl2c3BbMF0ucykpKSk7IH0KKyNsaW5lIDI5NDkgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDEyOToKLSNsaW5lIDU2NSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5yYmxrKSA9IGdlbl9wZl9ybnIoY3N0YXRlLCAoeXl2c3BbMF0uaSkpOyB9Ci0jbGluZSAyODU1ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNTY4ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLnJibGspID0gZ2VuX3BmX3Jucihjc3RhdGUsICh5eXZzcFswXS5pKSkpKTsgfQorI2xpbmUgMjk1NSAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTMwOgotI2xpbmUgNTY2ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLnJibGspID0gZ2VuX3BmX3NybnIoY3N0YXRlLCAoeXl2c3BbMF0uaSkpOyB9Ci0jbGluZSAyODYxICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNTY5ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLnJibGspID0gZ2VuX3BmX3NybnIoY3N0YXRlLCAoeXl2c3BbMF0uaSkpKSk7IH0KKyNsaW5lIDI5NjEgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDEzMToKLSNsaW5lIDU2NyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5yYmxrKSA9IGdlbl9wZl9yZWFzb24oY3N0YXRlLCAoeXl2c3BbMF0uaSkpOyB9Ci0jbGluZSAyODY3ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNTcwICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLnJibGspID0gZ2VuX3BmX3JlYXNvbihjc3RhdGUsICh5eXZzcFswXS5pKSkpKTsgfQorI2xpbmUgMjk2NyAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTMyOgotI2xpbmUgNTY4ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLnJibGspID0gZ2VuX3BmX2FjdGlvbihjc3RhdGUsICh5eXZzcFswXS5pKSk7IH0KLSNsaW5lIDI4NzMgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA1NzEgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDSEVDS19QVFJfVkFMKCgoeXl2YWwucmJsaykgPSBnZW5fcGZfYWN0aW9uKGNzdGF0ZSwgKHl5dnNwWzBdLmkpKSkpOyB9CisjbGluZSAyOTczICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzM6Ci0jbGluZSA1NzIgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwucmJsaykgPSBnZW5fcDgwMjExX3R5cGUoY3N0YXRlLCAoeXl2c3BbLTJdLmkpIHwgKHl5dnNwWzBdLmkpLAorI2xpbmUgNTc1ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLnJibGspID0gZ2VuX3A4MDIxMV90eXBlKGNzdGF0ZSwgKHl5dnNwWy0yXS5pKSB8ICh5eXZzcFswXS5pKSwKIAkJCQkJSUVFRTgwMjExX0ZDMF9UWVBFX01BU0sgfAotCQkJCQlJRUVFODAyMTFfRkMwX1NVQlRZUEVfTUFTSyk7CisJCQkJCUlFRUU4MDIxMV9GQzBfU1VCVFlQRV9NQVNLKSkpOwogCQkJCX0KLSNsaW5lIDI4ODIgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSAyOTgyICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzQ6Ci0jbGluZSA1NzYgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwucmJsaykgPSBnZW5fcDgwMjExX3R5cGUoY3N0YXRlLCAoeXl2c3BbMF0uaSksCi0JCQkJCUlFRUU4MDIxMV9GQzBfVFlQRV9NQVNLKTsKKyNsaW5lIDU3OSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKCh5eXZhbC5yYmxrKSA9IGdlbl9wODAyMTFfdHlwZShjc3RhdGUsICh5eXZzcFswXS5pKSwKKwkJCQkJSUVFRTgwMjExX0ZDMF9UWVBFX01BU0spKSk7CiAJCQkJfQotI2xpbmUgMjg5MCAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDI5OTAgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDEzNToKLSNsaW5lIDU3OSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5yYmxrKSA9IGdlbl9wODAyMTFfdHlwZShjc3RhdGUsICh5eXZzcFswXS5pKSwKKyNsaW5lIDU4MiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKCh5eXZhbC5yYmxrKSA9IGdlbl9wODAyMTFfdHlwZShjc3RhdGUsICh5eXZzcFswXS5pKSwKIAkJCQkJSUVFRTgwMjExX0ZDMF9UWVBFX01BU0sgfAotCQkJCQlJRUVFODAyMTFfRkMwX1NVQlRZUEVfTUFTSyk7CisJCQkJCUlFRUU4MDIxMV9GQzBfU1VCVFlQRV9NQVNLKSkpOwogCQkJCX0KLSNsaW5lIDI4OTkgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSAyOTk5ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzY6Ci0jbGluZSA1ODMgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwucmJsaykgPSBnZW5fcDgwMjExX2ZjZGlyKGNzdGF0ZSwgKHl5dnNwWzBdLmkpKTsgfQotI2xpbmUgMjkwNSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDU4NiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKCh5eXZhbC5yYmxrKSA9IGdlbl9wODAyMTFfZmNkaXIoY3N0YXRlLCAoeXl2c3BbMF0uaSkpKSk7IH0KKyNsaW5lIDMwMDUgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDEzODoKLSNsaW5lIDU4NyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IHN0cjJ0b2soKHl5dnNwWzBdLnMpLCBpZWVlODAyMTFfdHlwZXMpOwotCQkJCSAgaWYgKCh5eXZhbC5pKSA9PSAtMSkKLQkJCQkgIAlicGZfZXJyb3IoY3N0YXRlLCAidW5rbm93biA4MDIuMTEgdHlwZSBuYW1lIik7CisjbGluZSA1OTAgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDSEVDS19QVFJfVkFMKCh5eXZzcFswXS5zKSk7CisJCQkJICAoeXl2YWwuaSkgPSBzdHIydG9rKCh5eXZzcFswXS5zKSwgaWVlZTgwMjExX3R5cGVzKTsKKwkJCQkgIGlmICgoeXl2YWwuaSkgPT0gLTEpIHsKKwkJCQkgIAlicGZfc2V0X2Vycm9yKGNzdGF0ZSwgInVua25vd24gODAyLjExIHR5cGUgbmFtZSIpOworCQkJCSAgCVlZQUJPUlQ7CisJCQkJICB9CiAJCQkJfQotI2xpbmUgMjkxNCAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDMwMTcgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE0MDoKLSNsaW5lIDU5NCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7IGNvbnN0IHN0cnVjdCB0b2sgKnR5cGVzID0gTlVMTDsKKyNsaW5lIDYwMCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGNvbnN0IHN0cnVjdCB0b2sgKnR5cGVzID0gTlVMTDsKIAkJCQkgIGludCBpOworCQkJCSAgQ0hFQ0tfUFRSX1ZBTCgoeXl2c3BbMF0ucykpOwogCQkJCSAgZm9yIChpID0gMDs7IGkrKykgewogCQkJCSAgCWlmIChpZWVlODAyMTFfdHlwZV9zdWJ0eXBlc1tpXS50b2sgPT0gTlVMTCkgewogCQkJCSAgCQkvKiBSYW4gb3V0IG9mIHR5cGVzICovCi0JCQkJCQlicGZfZXJyb3IoY3N0YXRlLCAidW5rbm93biA4MDIuMTEgdHlwZSIpOwotCQkJCQkJYnJlYWs7CisJCQkJCQlicGZfc2V0X2Vycm9yKGNzdGF0ZSwgInVua25vd24gODAyLjExIHR5cGUiKTsKKwkJCQkJCVlZQUJPUlQ7CiAJCQkJCX0KIAkJCQkJaWYgKCh5eXZzcFsoLTEpIC0gKDEpXS5pKSA9PSBpZWVlODAyMTFfdHlwZV9zdWJ0eXBlc1tpXS50eXBlKSB7CiAJCQkJCQl0eXBlcyA9IGllZWU4MDIxMV90eXBlX3N1YnR5cGVzW2ldLnRvazsKQEAgLTI5MzAsMjAgKzMwMzQsMjMgQEAKIAkJCQkgIH0KIAogCQkJCSAgKHl5dmFsLmkpID0gc3RyMnRvaygoeXl2c3BbMF0ucyksIHR5cGVzKTsKLQkJCQkgIGlmICgoeXl2YWwuaSkgPT0gLTEpCi0JCQkJCWJwZl9lcnJvcihjc3RhdGUsICJ1bmtub3duIDgwMi4xMSBzdWJ0eXBlIG5hbWUiKTsKKwkJCQkgIGlmICgoeXl2YWwuaSkgPT0gLTEpIHsKKwkJCQkJYnBmX3NldF9lcnJvcihjc3RhdGUsICJ1bmtub3duIDgwMi4xMSBzdWJ0eXBlIG5hbWUiKTsKKwkJCQkJWVlBQk9SVDsKKwkJCQkgIH0KIAkJCQl9Ci0jbGluZSAyOTM3ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgMzA0MyAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQxOgotI2xpbmUgNjE0ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgaW50IGk7CisjbGluZSA2MjMgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpbnQgaTsKKwkJCQkgIENIRUNLX1BUUl9WQUwoKHl5dnNwWzBdLnMpKTsKIAkJCQkgIGZvciAoaSA9IDA7OyBpKyspIHsKIAkJCQkgIAlpZiAoaWVlZTgwMjExX3R5cGVfc3VidHlwZXNbaV0udG9rID09IE5VTEwpIHsKIAkJCQkgIAkJLyogUmFuIG91dCBvZiB0eXBlcyAqLwotCQkJCQkJYnBmX2Vycm9yKGNzdGF0ZSwgInVua25vd24gODAyLjExIHR5cGUgbmFtZSIpOwotCQkJCQkJYnJlYWs7CisJCQkJCQlicGZfc2V0X2Vycm9yKGNzdGF0ZSwgInVua25vd24gODAyLjExIHR5cGUgbmFtZSIpOworCQkJCQkJWVlBQk9SVDsKIAkJCQkJfQogCQkJCQkoeXl2YWwuaSkgPSBzdHIydG9rKCh5eXZzcFswXS5zKSwgaWVlZTgwMjExX3R5cGVfc3VidHlwZXNbaV0udG9rKTsKIAkJCQkJaWYgKCh5eXZhbC5pKSAhPSAtMSkgewpAQCAtMjk1Miw0OSArMzA1OSw1MyBAQAogCQkJCQl9CiAJCQkJICB9CiAJCQkJfQotI2xpbmUgMjk1NiAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDMwNjMgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE0MjoKLSNsaW5lIDYzMCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5yYmxrKSA9IGdlbl9sbGMoY3N0YXRlKTsgfQotI2xpbmUgMjk2MiAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDY0MCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKCh5eXZhbC5yYmxrKSA9IGdlbl9sbGMoY3N0YXRlKSkpOyB9CisjbGluZSAzMDY5ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDM6Ci0jbGluZSA2MzEgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyBpZiAocGNhcF9zdHJjYXNlY21wKCh5eXZzcFswXS5zKSwgImkiKSA9PSAwKQotCQkJCQkoeXl2YWwucmJsaykgPSBnZW5fbGxjX2koY3N0YXRlKTsKLQkJCQkgIGVsc2UgaWYgKHBjYXBfc3RyY2FzZWNtcCgoeXl2c3BbMF0ucyksICJzIikgPT0gMCkKLQkJCQkJKHl5dmFsLnJibGspID0gZ2VuX2xsY19zKGNzdGF0ZSk7Ci0JCQkJICBlbHNlIGlmIChwY2FwX3N0cmNhc2VjbXAoKHl5dnNwWzBdLnMpLCAidSIpID09IDApCi0JCQkJCSh5eXZhbC5yYmxrKSA9IGdlbl9sbGNfdShjc3RhdGUpOwotCQkJCSAgZWxzZSB7CisjbGluZSA2NDEgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDSEVDS19QVFJfVkFMKCh5eXZzcFswXS5zKSk7CisJCQkJICBpZiAocGNhcF9zdHJjYXNlY21wKCh5eXZzcFswXS5zKSwgImkiKSA9PSAwKSB7CisJCQkJCUNIRUNLX1BUUl9WQUwoKCh5eXZhbC5yYmxrKSA9IGdlbl9sbGNfaShjc3RhdGUpKSk7CisJCQkJICB9IGVsc2UgaWYgKHBjYXBfc3RyY2FzZWNtcCgoeXl2c3BbMF0ucyksICJzIikgPT0gMCkgeworCQkJCQlDSEVDS19QVFJfVkFMKCgoeXl2YWwucmJsaykgPSBnZW5fbGxjX3MoY3N0YXRlKSkpOworCQkJCSAgfSBlbHNlIGlmIChwY2FwX3N0cmNhc2VjbXAoKHl5dnNwWzBdLnMpLCAidSIpID09IDApIHsKKwkJCQkJQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLnJibGspID0gZ2VuX2xsY191KGNzdGF0ZSkpKTsKKwkJCQkgIH0gZWxzZSB7CiAJCQkJCWludCBzdWJ0eXBlOwogCiAJCQkJCXN1YnR5cGUgPSBzdHIydG9rKCh5eXZzcFswXS5zKSwgbGxjX3Nfc3VidHlwZXMpOwotCQkJCQlpZiAoc3VidHlwZSAhPSAtMSkKLQkJCQkJCSh5eXZhbC5yYmxrKSA9IGdlbl9sbGNfc19zdWJ0eXBlKGNzdGF0ZSwgc3VidHlwZSk7Ci0JCQkJCWVsc2UgeworCQkJCQlpZiAoc3VidHlwZSAhPSAtMSkgeworCQkJCQkJQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLnJibGspID0gZ2VuX2xsY19zX3N1YnR5cGUoY3N0YXRlLCBzdWJ0eXBlKSkpOworCQkJCQl9IGVsc2UgewogCQkJCQkJc3VidHlwZSA9IHN0cjJ0b2soKHl5dnNwWzBdLnMpLCBsbGNfdV9zdWJ0eXBlcyk7Ci0JCQkJCQlpZiAoc3VidHlwZSA9PSAtMSkKLQkJCQkJICAJCWJwZl9lcnJvcihjc3RhdGUsICJ1bmtub3duIExMQyB0eXBlIG5hbWUgXCIlc1wiIiwgKHl5dnNwWzBdLnMpKTsKLQkJCQkJCSh5eXZhbC5yYmxrKSA9IGdlbl9sbGNfdV9zdWJ0eXBlKGNzdGF0ZSwgc3VidHlwZSk7CisJCQkJCQlpZiAoc3VidHlwZSA9PSAtMSkgeworCQkJCQkgIAkJYnBmX3NldF9lcnJvcihjc3RhdGUsICJ1bmtub3duIExMQyB0eXBlIG5hbWUgXCIlc1wiIiwgKHl5dnNwWzBdLnMpKTsKKwkJCQkJICAJCVlZQUJPUlQ7CisJCQkJCSAgCX0KKwkJCQkJCUNIRUNLX1BUUl9WQUwoKCh5eXZhbC5yYmxrKSA9IGdlbl9sbGNfdV9zdWJ0eXBlKGNzdGF0ZSwgc3VidHlwZSkpKTsKIAkJCQkJfQogCQkJCSAgfQogCQkJCX0KLSNsaW5lIDI5ODcgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSAzMDk3ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDQ6Ci0jbGluZSA2NTIgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwucmJsaykgPSBnZW5fbGxjX3Nfc3VidHlwZShjc3RhdGUsIExMQ19STlIpOyB9Ci0jbGluZSAyOTkzICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNjY1ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLnJibGspID0gZ2VuX2xsY19zX3N1YnR5cGUoY3N0YXRlLCBMTENfUk5SKSkpOyB9CisjbGluZSAzMTAzICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDY6Ci0jbGluZSA2NTYgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyBpZiAocGNhcF9zdHJjYXNlY21wKCh5eXZzcFswXS5zKSwgIm5vZHMiKSA9PSAwKQorI2xpbmUgNjY5ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoeXl2c3BbMF0ucykpOworCQkJCSAgaWYgKHBjYXBfc3RyY2FzZWNtcCgoeXl2c3BbMF0ucyksICJub2RzIikgPT0gMCkKIAkJCQkJKHl5dmFsLmkpID0gSUVFRTgwMjExX0ZDMV9ESVJfTk9EUzsKIAkJCQkgIGVsc2UgaWYgKHBjYXBfc3RyY2FzZWNtcCgoeXl2c3BbMF0ucyksICJ0b2RzIikgPT0gMCkKIAkJCQkJKHl5dmFsLmkpID0gSUVFRTgwMjExX0ZDMV9ESVJfVE9EUzsKQEAgLTMwMDIsNDE2ICszMTEzLDQxOCBAQAogCQkJCQkoeXl2YWwuaSkgPSBJRUVFODAyMTFfRkMxX0RJUl9GUk9NRFM7CiAJCQkJICBlbHNlIGlmIChwY2FwX3N0cmNhc2VjbXAoKHl5dnNwWzBdLnMpLCAiZHN0b2RzIikgPT0gMCkKIAkJCQkJKHl5dmFsLmkpID0gSUVFRTgwMjExX0ZDMV9ESVJfRFNUT0RTOwotCQkJCSAgZWxzZQotCQkJCQlicGZfZXJyb3IoY3N0YXRlLCAidW5rbm93biA4MDIuMTEgZGlyZWN0aW9uIik7CisJCQkJICBlbHNlIHsKKwkJCQkJYnBmX3NldF9lcnJvcihjc3RhdGUsICJ1bmtub3duIDgwMi4xMSBkaXJlY3Rpb24iKTsKKwkJCQkJWVlBQk9SVDsKKwkJCQkgIH0KIAkJCQl9Ci0jbGluZSAzMDA5ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgMzEyMiAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTQ3OgotI2xpbmUgNjY5ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gKHl5dnNwWzBdLmkpOyB9Ci0jbGluZSAzMDE1ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNjg1ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gKHl5dnNwWzBdLmkpOyB9CisjbGluZSAzMTI4ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNDg6Ci0jbGluZSA2NzAgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBwZnJlYXNvbl90b19udW0oY3N0YXRlLCAoeXl2c3BbMF0ucykpOyB9Ci0jbGluZSAzMDIxICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNjg2ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoeXl2c3BbMF0ucykpOyBDSEVDS19JTlRfVkFMKCgoeXl2YWwuaSkgPSBwZnJlYXNvbl90b19udW0oY3N0YXRlLCAoeXl2c3BbMF0ucykpKSk7IH0KKyNsaW5lIDMxMzQgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE0OToKLSNsaW5lIDY3MyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IHBmYWN0aW9uX3RvX251bShjc3RhdGUsICh5eXZzcFswXS5zKSk7IH0KLSNsaW5lIDMwMjcgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA2ODkgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDSEVDS19QVFJfVkFMKCh5eXZzcFswXS5zKSk7IENIRUNLX0lOVF9WQUwoKCh5eXZhbC5pKSA9IHBmYWN0aW9uX3RvX251bShjc3RhdGUsICh5eXZzcFswXS5zKSkpKTsgfQorI2xpbmUgMzE0MCAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTUwOgotI2xpbmUgNjc2ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gQlBGX0pHVDsgfQotI2xpbmUgMzAzMyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDY5MiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IEJQRl9KR1Q7IH0KKyNsaW5lIDMxNDYgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE1MToKLSNsaW5lIDY3NyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IEJQRl9KR0U7IH0KLSNsaW5lIDMwMzkgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA2OTMgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBCUEZfSkdFOyB9CisjbGluZSAzMTUyICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNTI6Ci0jbGluZSA2NzggImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBCUEZfSkVROyB9Ci0jbGluZSAzMDQ1ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNjk0ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gQlBGX0pFUTsgfQorI2xpbmUgMzE1OCAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTUzOgotI2xpbmUgNjgwICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gQlBGX0pHVDsgfQotI2xpbmUgMzA1MSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDY5NiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IEJQRl9KR1Q7IH0KKyNsaW5lIDMxNjQgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE1NDoKLSNsaW5lIDY4MSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IEJQRl9KR0U7IH0KLSNsaW5lIDMwNTcgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA2OTcgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBCUEZfSkdFOyB9CisjbGluZSAzMTcwICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNTU6Ci0jbGluZSA2ODIgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBCUEZfSkVROyB9Ci0jbGluZSAzMDYzICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNjk4ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gQlBGX0pFUTsgfQorI2xpbmUgMzE3NiAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU2OgotI2xpbmUgNjg0ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmEpID0gZ2VuX2xvYWRpKGNzdGF0ZSwgKHl5dnNwWzBdLmkpKTsgfQotI2xpbmUgMzA2OSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDcwMCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKCh5eXZhbC5hKSA9IGdlbl9sb2FkaShjc3RhdGUsICh5eXZzcFswXS5pKSkpKTsgfQorI2xpbmUgMzE4MiAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTU4OgotI2xpbmUgNjg3ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmEpID0gZ2VuX2xvYWQoY3N0YXRlLCAoeXl2c3BbLTNdLmkpLCAoeXl2c3BbLTFdLmEpLCAxKTsgfQotI2xpbmUgMzA3NSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDcwMyAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLmEpID0gZ2VuX2xvYWQoY3N0YXRlLCAoeXl2c3BbLTNdLmkpLCAoeXl2c3BbLTFdLmEpLCAxKSkpOyB9CisjbGluZSAzMTg4ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNTk6Ci0jbGluZSA2ODggImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuYSkgPSBnZW5fbG9hZChjc3RhdGUsICh5eXZzcFstNV0uaSksICh5eXZzcFstM10uYSksICh5eXZzcFstMV0uaSkpOyB9Ci0jbGluZSAzMDgxICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNzA0ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDSEVDS19QVFJfVkFMKCgoeXl2YWwuYSkgPSBnZW5fbG9hZChjc3RhdGUsICh5eXZzcFstNV0uaSksICh5eXZzcFstM10uYSksICh5eXZzcFstMV0uaSkpKSk7IH0KKyNsaW5lIDMxOTQgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE2MDoKLSNsaW5lIDY4OSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5hKSA9IGdlbl9hcnRoKGNzdGF0ZSwgQlBGX0FERCwgKHl5dnNwWy0yXS5hKSwgKHl5dnNwWzBdLmEpKTsgfQotI2xpbmUgMzA4NyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDcwNSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLmEpID0gZ2VuX2FydGgoY3N0YXRlLCBCUEZfQURELCAoeXl2c3BbLTJdLmEpLCAoeXl2c3BbMF0uYSkpKSk7IH0KKyNsaW5lIDMyMDAgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE2MToKLSNsaW5lIDY5MCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5hKSA9IGdlbl9hcnRoKGNzdGF0ZSwgQlBGX1NVQiwgKHl5dnNwWy0yXS5hKSwgKHl5dnNwWzBdLmEpKTsgfQotI2xpbmUgMzA5MyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDcwNiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLmEpID0gZ2VuX2FydGgoY3N0YXRlLCBCUEZfU1VCLCAoeXl2c3BbLTJdLmEpLCAoeXl2c3BbMF0uYSkpKSk7IH0KKyNsaW5lIDMyMDYgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE2MjoKLSNsaW5lIDY5MSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5hKSA9IGdlbl9hcnRoKGNzdGF0ZSwgQlBGX01VTCwgKHl5dnNwWy0yXS5hKSwgKHl5dnNwWzBdLmEpKTsgfQotI2xpbmUgMzA5OSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDcwNyAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLmEpID0gZ2VuX2FydGgoY3N0YXRlLCBCUEZfTVVMLCAoeXl2c3BbLTJdLmEpLCAoeXl2c3BbMF0uYSkpKSk7IH0KKyNsaW5lIDMyMTIgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE2MzoKLSNsaW5lIDY5MiAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5hKSA9IGdlbl9hcnRoKGNzdGF0ZSwgQlBGX0RJViwgKHl5dnNwWy0yXS5hKSwgKHl5dnNwWzBdLmEpKTsgfQotI2xpbmUgMzEwNSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDcwOCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLmEpID0gZ2VuX2FydGgoY3N0YXRlLCBCUEZfRElWLCAoeXl2c3BbLTJdLmEpLCAoeXl2c3BbMF0uYSkpKSk7IH0KKyNsaW5lIDMyMTggImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE2NDoKLSNsaW5lIDY5MyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5hKSA9IGdlbl9hcnRoKGNzdGF0ZSwgQlBGX01PRCwgKHl5dnNwWy0yXS5hKSwgKHl5dnNwWzBdLmEpKTsgfQotI2xpbmUgMzExMSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDcwOSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLmEpID0gZ2VuX2FydGgoY3N0YXRlLCBCUEZfTU9ELCAoeXl2c3BbLTJdLmEpLCAoeXl2c3BbMF0uYSkpKSk7IH0KKyNsaW5lIDMyMjQgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE2NToKLSNsaW5lIDY5NCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5hKSA9IGdlbl9hcnRoKGNzdGF0ZSwgQlBGX0FORCwgKHl5dnNwWy0yXS5hKSwgKHl5dnNwWzBdLmEpKTsgfQotI2xpbmUgMzExNyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDcxMCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLmEpID0gZ2VuX2FydGgoY3N0YXRlLCBCUEZfQU5ELCAoeXl2c3BbLTJdLmEpLCAoeXl2c3BbMF0uYSkpKSk7IH0KKyNsaW5lIDMyMzAgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE2NjoKLSNsaW5lIDY5NSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5hKSA9IGdlbl9hcnRoKGNzdGF0ZSwgQlBGX09SLCAoeXl2c3BbLTJdLmEpLCAoeXl2c3BbMF0uYSkpOyB9Ci0jbGluZSAzMTIzICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNzExICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBDSEVDS19QVFJfVkFMKCgoeXl2YWwuYSkgPSBnZW5fYXJ0aChjc3RhdGUsIEJQRl9PUiwgKHl5dnNwWy0yXS5hKSwgKHl5dnNwWzBdLmEpKSkpOyB9CisjbGluZSAzMjM2ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjc6Ci0jbGluZSA2OTYgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuYSkgPSBnZW5fYXJ0aChjc3RhdGUsIEJQRl9YT1IsICh5eXZzcFstMl0uYSksICh5eXZzcFswXS5hKSk7IH0KLSNsaW5lIDMxMjkgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA3MTIgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKCh5eXZhbC5hKSA9IGdlbl9hcnRoKGNzdGF0ZSwgQlBGX1hPUiwgKHl5dnNwWy0yXS5hKSwgKHl5dnNwWzBdLmEpKSkpOyB9CisjbGluZSAzMjQyICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjg6Ci0jbGluZSA2OTcgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuYSkgPSBnZW5fYXJ0aChjc3RhdGUsIEJQRl9MU0gsICh5eXZzcFstMl0uYSksICh5eXZzcFswXS5hKSk7IH0KLSNsaW5lIDMxMzUgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA3MTMgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKCh5eXZhbC5hKSA9IGdlbl9hcnRoKGNzdGF0ZSwgQlBGX0xTSCwgKHl5dnNwWy0yXS5hKSwgKHl5dnNwWzBdLmEpKSkpOyB9CisjbGluZSAzMjQ4ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjk6Ci0jbGluZSA2OTggImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuYSkgPSBnZW5fYXJ0aChjc3RhdGUsIEJQRl9SU0gsICh5eXZzcFstMl0uYSksICh5eXZzcFswXS5hKSk7IH0KLSNsaW5lIDMxNDEgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA3MTQgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKCh5eXZhbC5hKSA9IGdlbl9hcnRoKGNzdGF0ZSwgQlBGX1JTSCwgKHl5dnNwWy0yXS5hKSwgKHl5dnNwWzBdLmEpKSkpOyB9CisjbGluZSAzMjU0ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzA6Ci0jbGluZSA2OTkgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuYSkgPSBnZW5fbmVnKGNzdGF0ZSwgKHl5dnNwWzBdLmEpKTsgfQotI2xpbmUgMzE0NyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDcxNSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLmEpID0gZ2VuX25lZyhjc3RhdGUsICh5eXZzcFswXS5hKSkpKTsgfQorI2xpbmUgMzI2MCAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTcxOgotI2xpbmUgNzAwICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmEpID0gKHl5dnNwWy0xXS5hKTsgfQotI2xpbmUgMzE1MyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDcxNiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmEpID0gKHl5dnNwWy0xXS5hKTsgfQorI2xpbmUgMzI2NiAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTcyOgotI2xpbmUgNzAxICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmEpID0gZ2VuX2xvYWRsZW4oY3N0YXRlKTsgfQotI2xpbmUgMzE1OSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDcxNyAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLmEpID0gZ2VuX2xvYWRsZW4oY3N0YXRlKSkpOyB9CisjbGluZSAzMjcyICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzM6Ci0jbGluZSA3MDMgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSAnJic7IH0KLSNsaW5lIDMxNjUgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA3MTkgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSAnJic7IH0KKyNsaW5lIDMyNzggImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE3NDoKLSNsaW5lIDcwNCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9ICd8JzsgfQotI2xpbmUgMzE3MSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDcyMCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9ICd8JzsgfQorI2xpbmUgMzI4NCAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc1OgotI2xpbmUgNzA1ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gJzwnOyB9Ci0jbGluZSAzMTc3ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNzIxICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gJzwnOyB9CisjbGluZSAzMjkwICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNzY6Ci0jbGluZSA3MDYgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSAnPic7IH0KLSNsaW5lIDMxODMgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA3MjIgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSAnPic7IH0KKyNsaW5lIDMyOTYgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE3NzoKLSNsaW5lIDcwNyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9ICc9JzsgfQotI2xpbmUgMzE4OSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDcyMyAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9ICc9JzsgfQorI2xpbmUgMzMwMiAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc5OgotI2xpbmUgNzEwICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gKHl5dnNwWy0xXS5pKTsgfQotI2xpbmUgMzE5NSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDcyNiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9ICh5eXZzcFstMV0uaSk7IH0KKyNsaW5lIDMzMDggImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE4MDoKLSNsaW5lIDcxMiAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IEFfTEFORTsgfQotI2xpbmUgMzIwMSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDcyOCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IEFfTEFORTsgfQorI2xpbmUgMzMxNCAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTgxOgotI2xpbmUgNzEzICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gQV9NRVRBQzsJfQotI2xpbmUgMzIwNyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDcyOSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IEFfTUVUQUM7CX0KKyNsaW5lIDMzMjAgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE4MjoKLSNsaW5lIDcxNCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IEFfQkNDOyB9Ci0jbGluZSAzMjEzICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNzMwICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gQV9CQ0M7IH0KKyNsaW5lIDMzMjYgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE4MzoKLSNsaW5lIDcxNSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IEFfT0FNRjRFQzsgfQotI2xpbmUgMzIxOSAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDczMSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IEFfT0FNRjRFQzsgfQorI2xpbmUgMzMzMiAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg0OgotI2xpbmUgNzE2ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gQV9PQU1GNFNDOyB9Ci0jbGluZSAzMjI1ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNzMyICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gQV9PQU1GNFNDOyB9CisjbGluZSAzMzM4ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODU6Ci0jbGluZSA3MTcgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBBX1NDOyB9Ci0jbGluZSAzMjMxICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNzMzICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gQV9TQzsgfQorI2xpbmUgMzM0NCAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTg2OgotI2xpbmUgNzE4ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gQV9JTE1JQzsgfQotI2xpbmUgMzIzNyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDczNCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5pKSA9IEFfSUxNSUM7IH0KKyNsaW5lIDMzNTAgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE4NzoKLSNsaW5lIDcyMCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IEFfT0FNOyB9Ci0jbGluZSAzMjQzICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNzM2ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gQV9PQU07IH0KKyNsaW5lIDMzNTYgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE4ODoKLSNsaW5lIDcyMSAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IEFfT0FNRjQ7IH0KLSNsaW5lIDMyNDkgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA3MzcgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBBX09BTUY0OyB9CisjbGluZSAzMzYyICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxODk6Ci0jbGluZSA3MjIgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBBX0NPTk5FQ1RNU0c7IH0KLSNsaW5lIDMyNTUgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA3MzggImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBBX0NPTk5FQ1RNU0c7IH0KKyNsaW5lIDMzNjggImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE5MDoKLSNsaW5lIDcyMyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IEFfTUVUQUNPTk5FQ1Q7IH0KLSNsaW5lIDMyNjEgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA3MzkgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBBX01FVEFDT05ORUNUOyB9CisjbGluZSAzMzc0ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTE6Ci0jbGluZSA3MjYgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuYmxrKS5hdG1maWVsZHR5cGUgPSBBX1ZQSTsgfQotI2xpbmUgMzI2NyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDc0MiAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5ibGspLmF0bWZpZWxkdHlwZSA9IEFfVlBJOyB9CisjbGluZSAzMzgwICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTI6Ci0jbGluZSA3MjcgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuYmxrKS5hdG1maWVsZHR5cGUgPSBBX1ZDSTsgfQotI2xpbmUgMzI3MyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDc0MyAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5ibGspLmF0bWZpZWxkdHlwZSA9IEFfVkNJOyB9CisjbGluZSAzMzg2ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTQ6Ci0jbGluZSA3MzAgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuYmxrKS5iID0gZ2VuX2F0bWZpZWxkX2NvZGUoY3N0YXRlLCAoeXl2c3BbLTJdLmJsaykuYXRtZmllbGR0eXBlLCAoYnBmX2ludDMyKSh5eXZzcFswXS5pKSwgKGJwZl91X2ludDMyKSh5eXZzcFstMV0uaSksIDApOyB9Ci0jbGluZSAzMjc5ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNzQ2ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLmJsaykuYiA9IGdlbl9hdG1maWVsZF9jb2RlKGNzdGF0ZSwgKHl5dnNwWy0yXS5ibGspLmF0bWZpZWxkdHlwZSwgKGJwZl9pbnQzMikoeXl2c3BbMF0uaSksIChicGZfdV9pbnQzMikoeXl2c3BbLTFdLmkpLCAwKSkpOyB9CisjbGluZSAzMzkyICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTU6Ci0jbGluZSA3MzEgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuYmxrKS5iID0gZ2VuX2F0bWZpZWxkX2NvZGUoY3N0YXRlLCAoeXl2c3BbLTJdLmJsaykuYXRtZmllbGR0eXBlLCAoYnBmX2ludDMyKSh5eXZzcFswXS5pKSwgKGJwZl91X2ludDMyKSh5eXZzcFstMV0uaSksIDEpOyB9Ci0jbGluZSAzMjg1ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNzQ3ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLmJsaykuYiA9IGdlbl9hdG1maWVsZF9jb2RlKGNzdGF0ZSwgKHl5dnNwWy0yXS5ibGspLmF0bWZpZWxkdHlwZSwgKGJwZl9pbnQzMikoeXl2c3BbMF0uaSksIChicGZfdV9pbnQzMikoeXl2c3BbLTFdLmkpLCAxKSkpOyB9CisjbGluZSAzMzk4ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAxOTY6Ci0jbGluZSA3MzIgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuYmxrKS5iID0gKHl5dnNwWy0xXS5ibGspLmI7ICh5eXZhbC5ibGspLnEgPSBxZXJyOyB9Ci0jbGluZSAzMjkxICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNzQ4ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5ibGspLmIgPSAoeXl2c3BbLTFdLmJsaykuYjsgKHl5dmFsLmJsaykucSA9IHFlcnI7IH0KKyNsaW5lIDM0MDQgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDE5NzoKLSNsaW5lIDczNCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7CisjbGluZSA3NTAgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICB7CiAJKHl5dmFsLmJsaykuYXRtZmllbGR0eXBlID0gKHl5dnNwWy0xXS5ibGspLmF0bWZpZWxkdHlwZTsKIAlpZiAoKHl5dmFsLmJsaykuYXRtZmllbGR0eXBlID09IEFfVlBJIHx8CiAJICAgICh5eXZhbC5ibGspLmF0bWZpZWxkdHlwZSA9PSBBX1ZDSSkKLQkJKHl5dmFsLmJsaykuYiA9IGdlbl9hdG1maWVsZF9jb2RlKGNzdGF0ZSwgKHl5dmFsLmJsaykuYXRtZmllbGR0eXBlLCAoYnBmX2ludDMyKSAoeXl2c3BbMF0uaSksIEJQRl9KRVEsIDApOworCQlDSEVDS19QVFJfVkFMKCgoeXl2YWwuYmxrKS5iID0gZ2VuX2F0bWZpZWxkX2NvZGUoY3N0YXRlLCAoeXl2YWwuYmxrKS5hdG1maWVsZHR5cGUsIChicGZfaW50MzIpICh5eXZzcFswXS5pKSwgQlBGX0pFUSwgMCkpKTsKIAl9Ci0jbGluZSAzMzAyICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgMzQxNSAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMTk5OgotI2xpbmUgNzQyICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgZ2VuX29yKCh5eXZzcFstMl0uYmxrKS5iLCAoeXl2c3BbMF0uYmxrKS5iKTsgKHl5dmFsLmJsaykgPSAoeXl2c3BbMF0uYmxrKTsgfQotI2xpbmUgMzMwOCAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDc1OCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ2VuX29yKCh5eXZzcFstMl0uYmxrKS5iLCAoeXl2c3BbMF0uYmxrKS5iKTsgKHl5dmFsLmJsaykgPSAoeXl2c3BbMF0uYmxrKTsgfQorI2xpbmUgMzQyMSAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjAwOgotI2xpbmUgNzQ1ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gTV9GSVNVOyB9Ci0jbGluZSAzMzE0ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNzYxICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gTV9GSVNVOyB9CisjbGluZSAzNDI3ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDE6Ci0jbGluZSA3NDYgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBNX0xTU1U7IH0KLSNsaW5lIDMzMjAgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA3NjIgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBNX0xTU1U7IH0KKyNsaW5lIDM0MzMgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDIwMjoKLSNsaW5lIDc0NyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IE1fTVNVOyB9Ci0jbGluZSAzMzI2ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNzYzICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gTV9NU1U7IH0KKyNsaW5lIDM0MzkgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDIwMzoKLSNsaW5lIDc0OCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5pKSA9IE1IX0ZJU1U7IH0KLSNsaW5lIDMzMzIgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA3NjQgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuaSkgPSBNSF9GSVNVOyB9CisjbGluZSAzNDQ1ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDQ6Ci0jbGluZSA3NDkgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuaSkgPSBNSF9MU1NVOyB9Ci0jbGluZSAzMzM4ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNzY1ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gTUhfTFNTVTsgfQorI2xpbmUgMzQ1MSAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjA1OgotI2xpbmUgNzUwICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmkpID0gTUhfTVNVOyB9Ci0jbGluZSAzMzQ0ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNzY2ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmkpID0gTUhfTVNVOyB9CisjbGluZSAzNDU3ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDY6Ci0jbGluZSA3NTMgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuYmxrKS5tdHAzZmllbGR0eXBlID0gTV9TSU87IH0KLSNsaW5lIDMzNTAgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA3NjkgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuYmxrKS5tdHAzZmllbGR0eXBlID0gTV9TSU87IH0KKyNsaW5lIDM0NjMgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDIwNzoKLSNsaW5lIDc1NCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5ibGspLm10cDNmaWVsZHR5cGUgPSBNX09QQzsgfQotI2xpbmUgMzM1NiAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDc3MCAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5ibGspLm10cDNmaWVsZHR5cGUgPSBNX09QQzsgfQorI2xpbmUgMzQ2OSAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjA4OgotI2xpbmUgNzU1ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmJsaykubXRwM2ZpZWxkdHlwZSA9IE1fRFBDOyB9Ci0jbGluZSAzMzYyICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNzcxICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmJsaykubXRwM2ZpZWxkdHlwZSA9IE1fRFBDOyB9CisjbGluZSAzNDc1ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMDk6Ci0jbGluZSA3NTYgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuYmxrKS5tdHAzZmllbGR0eXBlID0gTV9TTFM7IH0KLSNsaW5lIDMzNjggImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA3NzIgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuYmxrKS5tdHAzZmllbGR0eXBlID0gTV9TTFM7IH0KKyNsaW5lIDM0ODEgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDIxMDoKLSNsaW5lIDc1NyAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5ibGspLm10cDNmaWVsZHR5cGUgPSBNSF9TSU87IH0KLSNsaW5lIDMzNzQgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA3NzMgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuYmxrKS5tdHAzZmllbGR0eXBlID0gTUhfU0lPOyB9CisjbGluZSAzNDg3ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMTE6Ci0jbGluZSA3NTggImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuYmxrKS5tdHAzZmllbGR0eXBlID0gTUhfT1BDOyB9Ci0jbGluZSAzMzgwICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNzc0ICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmJsaykubXRwM2ZpZWxkdHlwZSA9IE1IX09QQzsgfQorI2xpbmUgMzQ5MyAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjEyOgotI2xpbmUgNzU5ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmJsaykubXRwM2ZpZWxkdHlwZSA9IE1IX0RQQzsgfQotI2xpbmUgMzM4NiAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDc3NSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICh5eXZhbC5ibGspLm10cDNmaWVsZHR5cGUgPSBNSF9EUEM7IH0KKyNsaW5lIDM0OTkgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDIxMzoKLSNsaW5lIDc2MCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5ibGspLm10cDNmaWVsZHR5cGUgPSBNSF9TTFM7IH0KLSNsaW5lIDMzOTIgImdyYW1tYXIuYyIgLyogeWFjYy5jOjE2NDYgICovCisjbGluZSA3NzYgImdyYW1tYXIueSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAoeXl2YWwuYmxrKS5tdHAzZmllbGR0eXBlID0gTUhfU0xTOyB9CisjbGluZSAzNTA1ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKICAgY2FzZSAyMTU6Ci0jbGluZSA3NjMgImdyYW1tYXIueSIgLyogeWFjYy5jOjE2NDYgICovCi0gICAgeyAoeXl2YWwuYmxrKS5iID0gZ2VuX210cDNmaWVsZF9jb2RlKGNzdGF0ZSwgKHl5dnNwWy0yXS5ibGspLm10cDNmaWVsZHR5cGUsICh1X2ludCkoeXl2c3BbMF0uaSksICh1X2ludCkoeXl2c3BbLTFdLmkpLCAwKTsgfQotI2xpbmUgMzM5OCAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDc3OSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IENIRUNLX1BUUl9WQUwoKCh5eXZhbC5ibGspLmIgPSBnZW5fbXRwM2ZpZWxkX2NvZGUoY3N0YXRlLCAoeXl2c3BbLTJdLmJsaykubXRwM2ZpZWxkdHlwZSwgKHVfaW50KSh5eXZzcFswXS5pKSwgKHVfaW50KSh5eXZzcFstMV0uaSksIDApKSk7IH0KKyNsaW5lIDM1MTEgImdyYW1tYXIuYyIKICAgICBicmVhazsKIAogICBjYXNlIDIxNjoKLSNsaW5lIDc2NCAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTY0NiAgKi8KLSAgICB7ICh5eXZhbC5ibGspLmIgPSBnZW5fbXRwM2ZpZWxkX2NvZGUoY3N0YXRlLCAoeXl2c3BbLTJdLmJsaykubXRwM2ZpZWxkdHlwZSwgKHVfaW50KSh5eXZzcFswXS5pKSwgKHVfaW50KSh5eXZzcFstMV0uaSksIDEpOyB9Ci0jbGluZSAzNDA0ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgNzgwICJncmFtbWFyLnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgQ0hFQ0tfUFRSX1ZBTCgoKHl5dmFsLmJsaykuYiA9IGdlbl9tdHAzZmllbGRfY29kZShjc3RhdGUsICh5eXZzcFstMl0uYmxrKS5tdHAzZmllbGR0eXBlLCAodV9pbnQpKHl5dnNwWzBdLmkpLCAodV9pbnQpKHl5dnNwWy0xXS5pKSwgMSkpKTsgfQorI2xpbmUgMzUxNyAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE3OgotI2xpbmUgNzY1ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgKHl5dmFsLmJsaykuYiA9ICh5eXZzcFstMV0uYmxrKS5iOyAoeXl2YWwuYmxrKS5xID0gcWVycjsgfQotI2xpbmUgMzQxMCAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDc4MSAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgKHl5dmFsLmJsaykuYiA9ICh5eXZzcFstMV0uYmxrKS5iOyAoeXl2YWwuYmxrKS5xID0gcWVycjsgfQorI2xpbmUgMzUyMyAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjE4OgotI2xpbmUgNzY3ICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsKKyNsaW5lIDc4MyAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICB7CiAJKHl5dmFsLmJsaykubXRwM2ZpZWxkdHlwZSA9ICh5eXZzcFstMV0uYmxrKS5tdHAzZmllbGR0eXBlOwogCWlmICgoeXl2YWwuYmxrKS5tdHAzZmllbGR0eXBlID09IE1fU0lPIHx8CiAJICAgICh5eXZhbC5ibGspLm10cDNmaWVsZHR5cGUgPT0gTV9PUEMgfHwKQEAgLTM0MjEsMTkgKzM1MzQsMjAgQEAKIAkgICAgKHl5dmFsLmJsaykubXRwM2ZpZWxkdHlwZSA9PSBNSF9PUEMgfHwKIAkgICAgKHl5dmFsLmJsaykubXRwM2ZpZWxkdHlwZSA9PSBNSF9EUEMgfHwKIAkgICAgKHl5dmFsLmJsaykubXRwM2ZpZWxkdHlwZSA9PSBNSF9TTFMpCi0JCSh5eXZhbC5ibGspLmIgPSBnZW5fbXRwM2ZpZWxkX2NvZGUoY3N0YXRlLCAoeXl2YWwuYmxrKS5tdHAzZmllbGR0eXBlLCAodV9pbnQpICh5eXZzcFswXS5pKSwgQlBGX0pFUSwgMCk7CisJCUNIRUNLX1BUUl9WQUwoKCh5eXZhbC5ibGspLmIgPSBnZW5fbXRwM2ZpZWxkX2NvZGUoY3N0YXRlLCAoeXl2YWwuYmxrKS5tdHAzZmllbGR0eXBlLCAodV9pbnQpICh5eXZzcFswXS5pKSwgQlBGX0pFUSwgMCkpKTsKIAl9Ci0jbGluZSAzNDI3ICJncmFtbWFyLmMiIC8qIHlhY2MuYzoxNjQ2ICAqLworI2xpbmUgMzU0MCAiZ3JhbW1hci5jIgogICAgIGJyZWFrOwogCiAgIGNhc2UgMjIwOgotI2xpbmUgNzgxICJncmFtbWFyLnkiIC8qIHlhY2MuYzoxNjQ2ICAqLwotICAgIHsgZ2VuX29yKCh5eXZzcFstMl0uYmxrKS5iLCAoeXl2c3BbMF0uYmxrKS5iKTsgKHl5dmFsLmJsaykgPSAoeXl2c3BbMF0uYmxrKTsgfQotI2xpbmUgMzQzMyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDc5NyAiZ3JhbW1hci55IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnZW5fb3IoKHl5dnNwWy0yXS5ibGspLmIsICh5eXZzcFswXS5ibGspLmIpOyAoeXl2YWwuYmxrKSA9ICh5eXZzcFswXS5ibGspOyB9CisjbGluZSAzNTQ2ICJncmFtbWFyLmMiCiAgICAgYnJlYWs7CiAKIAotI2xpbmUgMzQzNyAiZ3JhbW1hci5jIiAvKiB5YWNjLmM6MTY0NiAgKi8KKyNsaW5lIDM1NTAgImdyYW1tYXIuYyIKKwogICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgfQogICAvKiBVc2VyIHNlbWFudGljIGFjdGlvbnMgc29tZXRpbWVzIGFsdGVyIHl5Y2hhciwgYW5kIHRoYXQgcmVxdWlyZXMKQEAgLTM0NTgsMTQgKzM1NzIsMTMgQEAKICAgLyogTm93ICdzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKICAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCiAgICAgIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8KLQotICB5eW4gPSB5eXIxW3l5bl07Ci0KLSAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVE9LRU5TXSArICp5eXNzcDsKLSAgaWYgKDAgPD0geXlzdGF0ZSAmJiB5eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKLSAgICB5eXN0YXRlID0geXl0YWJsZVt5eXN0YXRlXTsKLSAgZWxzZQotICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVE9LRU5TXTsKKyAgeworICAgIGNvbnN0IGludCB5eWxocyA9IHl5cjFbeXluXSAtIFlZTlRPS0VOUzsKKyAgICBjb25zdCBpbnQgeXlpID0geXlwZ290b1t5eWxoc10gKyAqeXlzc3A7CisgICAgeXlzdGF0ZSA9ICgwIDw9IHl5aSAmJiB5eWkgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlpXSA9PSAqeXlzc3AKKyAgICAgICAgICAgICAgID8geXl0YWJsZVt5eWldCisgICAgICAgICAgICAgICA6IHl5ZGVmZ290b1t5eWxoc10pOworICB9CiAKICAgZ290byB5eW5ld3N0YXRlOwogCkBAIC0zNDk3LDcgKzM2MTAsNyBAQAogICAgICAgICAgIHsKICAgICAgICAgICAgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKICAgICAgICAgICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7Ci0gICAgICAgICAgICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5bXNnX2FsbG9jKTsKKyAgICAgICAgICAgIHl5bXNnID0gWVlfQ0FTVCAoY2hhciAqLCBZWVNUQUNLX0FMTE9DIChZWV9DQVNUIChZWVNJWkVfVCwgeXltc2dfYWxsb2MpKSk7CiAgICAgICAgICAgICBpZiAoIXl5bXNnKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgeXltc2cgPSB5eW1zZ2J1ZjsKQEAgLTM1NDgsMTIgKzM2NjEsMTAgQEAKIHwgeXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiB5eWVycm9ybGFiOgotCi0gIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMKLSAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNlcgotICAgICBjb2RlLiAgKi8KLSAgaWYgKC8qQ09OU1RDT05EKi8gMCkKLSAgICAgZ290byB5eWVycm9ybGFiOworICAvKiBQYWNpZnkgY29tcGlsZXJzIHdoZW4gdGhlIHVzZXIgY29kZSBuZXZlciBpbnZva2VzIFlZRVJST1IgYW5kIHRoZQorICAgICBsYWJlbCB5eWVycm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVzZXIgY29kZS4gICovCisgIGlmICgwKQorICAgIFlZRVJST1I7CiAKICAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hvc2UgYWN0aW9uIHRyaWdnZXJlZAogICAgICB0aGlzIFlZRVJST1IuICAqLwpAQCAtMzYxNSw2ICszNzI2LDcgQEAKICAgeXlyZXN1bHQgPSAwOwogICBnb3RvIHl5cmV0dXJuOwogCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IHl5YWJvcnRsYWIgLS0gWVlBQk9SVCBjb21lcyBoZXJlLiAgfAogYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTM2MjIsNiArMzczNCw3IEBACiAgIHl5cmVzdWx0ID0gMTsKICAgZ290byB5eXJldHVybjsKIAorCiAjaWYgIWRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KIHwgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKQEAgLTM2MzIsNiArMzc0NSwxMCBAQAogICAvKiBGYWxsIHRocm91Z2guICAqLwogI2VuZGlmCiAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlyZXR1cm4gLS0gcGFyc2luZyBpcyBmaW5pc2hlZCwgcmV0dXJuIHRoZSByZXN1bHQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogeXlyZXR1cm46CiAgIGlmICh5eWNoYXIgIT0gWVlFTVBUWSkKICAgICB7CkBAIC0zNjQ4LDcgKzM3NjUsNyBAQAogICB3aGlsZSAoeXlzc3AgIT0geXlzcykKICAgICB7CiAgICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogcG9wcGluZyIsCi0gICAgICAgICAgICAgICAgICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5c2Nhbm5lciwgY3N0YXRlKTsKKyAgICAgICAgICAgICAgICAgIHl5c3Rvc1srKnl5c3NwXSwgeXl2c3AsIHl5c2Nhbm5lciwgY3N0YXRlKTsKICAgICAgIFlZUE9QU1RBQ0sgKDEpOwogICAgIH0KICNpZm5kZWYgeXlvdmVyZmxvdwpAQCAtMzY2MSw1ICszNzc4LDUgQEAKICNlbmRpZgogICByZXR1cm4geXlyZXN1bHQ7CiB9Ci0jbGluZSA3ODMgImdyYW1tYXIueSIgLyogeWFjYy5jOjE5MDYgICovCisjbGluZSA3OTkgImdyYW1tYXIueSIKIApkaWZmIC0tZ2l0IGEvZ3JhbW1hci5oIGIvZ3JhbW1hci5oCmluZGV4IDI4NmNjNzkuLmI0Y2ZkMTkgMTAwNjQ0Ci0tLSBhL2dyYW1tYXIuaAorKysgYi9ncmFtbWFyLmgKQEAgLTEsOCArMSw5IEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMy4wLjQuICAqLworLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuNS4xLiAgKi8KIAogLyogQmlzb24gaW50ZXJmYWNlIGZvciBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCiAKLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDE1LCAyMDE4LTIwMjAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLgogCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTMwLDYgKzMxLDkgQEAKICAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KICAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8KIAorLyogVW5kb2N1bWVudGVkIG1hY3JvcywgZXNwZWNpYWxseSB0aG9zZSB3aG9zZSBuYW1lIHN0YXJ0IHdpdGggWVlfLAorICAgYXJlIHByaXZhdGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gIERvIG5vdCByZWx5IG9uIHRoZW0uICAqLworCiAjaWZuZGVmIFlZX1BDQVBfR1JBTU1BUl9IX0lOQ0xVREVECiAjIGRlZmluZSBZWV9QQ0FQX0dSQU1NQVJfSF9JTkNMVURFRAogLyogRGVidWcgdHJhY2VzLiAgKi8KQEAgLTE2MSw5ICsxNjUsMTAgQEAKICAgICBIT1BDID0gMzcxLAogICAgIEhEUEMgPSAzNzIsCiAgICAgSFNMUyA9IDM3MywKLSAgICBPUiA9IDM3NCwKLSAgICBBTkQgPSAzNzUsCi0gICAgVU1JTlVTID0gMzc2CisgICAgTEVYX0VSUk9SID0gMzc0LAorICAgIE9SID0gMzc1LAorICAgIEFORCA9IDM3NiwKKyAgICBVTUlOVVMgPSAzNzcKICAgfTsKICNlbmRpZgogLyogVG9rZW5zLiAgKi8KQEAgLTI4MywyMCArMjg4LDE5IEBACiAjZGVmaW5lIEhPUEMgMzcxCiAjZGVmaW5lIEhEUEMgMzcyCiAjZGVmaW5lIEhTTFMgMzczCi0jZGVmaW5lIE9SIDM3NAotI2RlZmluZSBBTkQgMzc1Ci0jZGVmaW5lIFVNSU5VUyAzNzYKKyNkZWZpbmUgTEVYX0VSUk9SIDM3NAorI2RlZmluZSBPUiAzNzUKKyNkZWZpbmUgQU5EIDM3NgorI2RlZmluZSBVTUlOVVMgMzc3CiAKIC8qIFZhbHVlIHR5cGUuICAqLwogI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECi0KIHVuaW9uIFlZU1RZUEUKIHsKLSNsaW5lIDI4NiAiZ3JhbW1hci55IiAvKiB5YWNjLmM6MTkwOSAgKi8KKyNsaW5lIDI5MSAiZ3JhbW1hci55IgogCiAJaW50IGk7CiAJYnBmX3VfaW50MzIgaDsKLQl1X2NoYXIgKmU7CiAJY2hhciAqczsKIAlzdHJ1Y3Qgc3RtdCAqc3RtdDsKIAlzdHJ1Y3QgYXJ0aCAqYTsKQEAgLTMwOCw5ICszMTIsOSBAQAogCX0gYmxrOwogCXN0cnVjdCBibG9jayAqcmJsazsKIAotI2xpbmUgMzEyICJncmFtbWFyLmgiIC8qIHlhY2MuYzoxOTA5ICAqLwotfTsKKyNsaW5lIDMxNiAiZ3JhbW1hci5oIgogCit9OwogdHlwZWRlZiB1bmlvbiBZWVNUWVBFIFlZU1RZUEU7CiAjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQogIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCmRpZmYgLS1naXQgYS9ncmFtbWFyLnkgYi9ncmFtbWFyLnkuaW4Kc2ltaWxhcml0eSBpbmRleCA2MSUKcmVuYW1lIGZyb20gZ3JhbW1hci55CnJlbmFtZSB0byBncmFtbWFyLnkuaW4KaW5kZXggYmU4MGUyYi4uZmU1NjUxNSAxMDA2NDQKLS0tIGEvZ3JhbW1hci55CisrKyBiL2dyYW1tYXIueS5pbgpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBXZSB3YW50IGEgcmVlbnRyYW50IHBhcnNlci4KICAqLwotJXB1cmUtcGFyc2VyCitAUkVFTlRSQU5UX1BBUlNFUkAKIAogLyoKICAqIFdlIGFsc28gd2FudCBhIHJlZW50cmFudCBzY2FubmVyLCBzbyB3ZSBoYXZlIHRvIHBhc3MgdGhlCkBAIC0xOSw2ICsxOSwyNyBAQAogJWxleC1wYXJhbSAgIHt2b2lkICp5eXNjYW5uZXJ9CiAKIC8qCisgKiBBY2NvcmRpbmcgdG8gYmlzb24gZG9jdW1lbnRhdGlvbiwgc2hpZnQvcmVkdWNlIGNvbmZsaWN0cyBhcmUgbm90IGFuIGlzc3VlCisgKiBpbiBtb3N0IHBhcnNlcnMgYXMgbG9uZyBhcyB0aGUgbnVtYmVyIGRvZXMgbm90IGV2b2x2ZSBvdmVyIHRpbWU6CisgKiBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2Jpc29uL21hbnVhbC9odG1sX25vZGUvRXhwZWN0LURlY2wuaHRtbAorICogU28sIGZvbGxvd2luZyB0aGUgYWR2aWNlIHVzZSAlZXhwZWN0IHRvIGNoZWNrIHRoZSBhbW91bnQgb2Ygc2hpZnQvcmVkdWNlCisgKiB3YXJuaW5ncy4KKyAqCisgKiBUaGlzIGRvZXNuJ3QgYXBwZWFyIHRvIHdvcmsgaW4gQmVya2VsZXkgWUFDQyAtIDEuOSAyMDE3MDcwOTsgaXQgc3RpbGwKKyAqIHdhcm5zIG9mIDM4IHNoaWZ0L3JlZHVjZSBjb25mbGljdHMuCisgKgorICogVGhlIEJlcmtlbGV5IFlBQ0MgZG9jdW1lbnRhdGlvbjoKKyAqCisgKiAgICBodHRwczovL2ludmlzaWJsZS1pc2xhbmQubmV0L2J5YWNjL21hbnBhZ2UveWFjYy5odG1sCisgKgorICogY2xhaW1zIHRoYXQgIkJpc29uJ3Mgc3VwcG9ydCBmb3IgIiVleHBlY3QiIGlzIGJyb2tlbiBpbiBtb3JlIHRoYW4gb25lCisgKiByZWxlYXNlLiIsIGJ1dCBkb2Vzbid0IGdpdmUgZGV0YWlscy4gIEhvcGVmdWxseSwgdGhhdCBvbmx5IG1lYW5zIHRoYXQKKyAqIHlvdSBnZXQgd2FybmluZ3MgZXZlbiBpZiB5b3UgaGF2ZSB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIHNoaWZ0L3JlZHVjZQorICogY29uZmxpY3RzLCBub3QgdGhhdCBhbnl0aGluZyBlbHNlIGZhaWxzLgorICovCislZXhwZWN0IDM4CisKKy8qCiAgKiBBbmQgd2UgbmVlZCB0byBwYXNzIHRoZSBjb21waWxlciBzdGF0ZSB0byB0aGUgc2Nhbm5lci4KICAqLwogJXBhcnNlLXBhcmFtIHsgY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlIH0KQEAgLTIxMCwxOSArMjMxLDI3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyB0b2tzW2ldLnMgIT0gTlVMTDsgaSsrKSB7Ci0JCWlmIChwY2FwX3N0cmNhc2VjbXAodG9rc1tpXS5zLCBzdHIpID09IDApCisJCWlmIChwY2FwX3N0cmNhc2VjbXAodG9rc1tpXS5zLCBzdHIpID09IDApIHsKKwkJCS8qCisJCQkgKiBKdXN0IGluIGNhc2Ugc29tZWJvZHkgaXMgdXNpbmcgdGhpcyB0bworCQkJICogZ2VuZXJhdGUgdmFsdWVzIG9mIC0xLzB4RkZGRkZGRkYuCisJCQkgKiBUaGF0IHdvbid0IHdvcmssIGFzIGl0J3MgaW5kaXN0aW5ndWlzaGFibGUKKwkJCSAqIGZyb20gYW4gZXJyb3IuCisJCQkgKi8KKwkJCWlmICh0b2tzW2ldLnYgPT0gLTEpCisJCQkJYWJvcnQoKTsKIAkJCXJldHVybiAodG9rc1tpXS52KTsKKwkJfQogCX0KIAlyZXR1cm4gKC0xKTsKIH0KIAotc3RhdGljIHN0cnVjdCBxdWFsIHFlcnIgPSB7IFFfVU5ERUYsIFFfVU5ERUYsIFFfVU5ERUYsIFFfVU5ERUYgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcXVhbCBxZXJyID0geyBRX1VOREVGLCBRX1VOREVGLCBRX1VOREVGLCBRX1VOREVGIH07CiAKLXN0YXRpYyBQQ0FQX05PUkVUVVJOX0RFRiB2b2lkCitzdGF0aWMgdm9pZAogeXllcnJvcih2b2lkICp5eXNjYW5uZXIgX1VfLCBjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGNvbnN0IGNoYXIgKm1zZykKIHsKLQlicGZfc3ludGF4X2Vycm9yKGNzdGF0ZSwgbXNnKTsKLQkvKiBOT1RSRUFDSEVEICovCisJYnBmX3NldF9lcnJvcihjc3RhdGUsICJjYW4ndCBwYXJzZSBmaWx0ZXIgZXhwcmVzc2lvbjogJXMiLCBtc2cpOwogfQogCiAjaWZkZWYgSEFWRV9ORVRfUEZWQVJfSApAQCAtMjM2LDggKzI2NSw4IEBACiAJCWlmIChwY2FwX3N0cmNhc2VjbXAocmVhc29uLCByZWFzb25zW2ldKSA9PSAwKQogCQkJcmV0dXJuIChpKTsKIAl9Ci0JYnBmX2Vycm9yKGNzdGF0ZSwgInVua25vd24gUEYgcmVhc29uIik7Ci0JLypOT1RSRUFDSEVEKi8KKwlicGZfc2V0X2Vycm9yKGNzdGF0ZSwgInVua25vd24gUEYgcmVhc29uIFwiJXNcIiIsIHJlYXNvbik7CisJcmV0dXJuICgtMSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTI2MCwzMyArMjg5LDM4IEBACiAJCXJldHVybiAoUEZfTk9SRFIpOwogI2VuZGlmCiAJZWxzZSB7Ci0JCWJwZl9lcnJvcihjc3RhdGUsICJ1bmtub3duIFBGIGFjdGlvbiIpOwotCQkvKk5PVFJFQUNIRUQqLworCQlicGZfc2V0X2Vycm9yKGNzdGF0ZSwgInVua25vd24gUEYgYWN0aW9uIFwiJXNcIiIsIGFjdGlvbik7CisJCXJldHVybiAoLTEpOwogCX0KIH0KICNlbHNlIC8qICFIQVZFX05FVF9QRlZBUl9IICovCi1zdGF0aWMgUENBUF9OT1JFVFVSTl9ERUYgaW50CitzdGF0aWMgaW50CiBwZnJlYXNvbl90b19udW0oY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBjb25zdCBjaGFyICpyZWFzb24gX1VfKQogewotCWJwZl9lcnJvcihjc3RhdGUsICJsaWJwY2FwIHdhcyBjb21waWxlZCBvbiBhIG1hY2hpbmUgd2l0aG91dCBwZiBzdXBwb3J0Iik7Ci0JLypOT1RSRUFDSEVEKi8KKwlicGZfc2V0X2Vycm9yKGNzdGF0ZSwgImxpYnBjYXAgd2FzIGNvbXBpbGVkIG9uIGEgbWFjaGluZSB3aXRob3V0IHBmIHN1cHBvcnQiKTsKKwlyZXR1cm4gKC0xKTsKIH0KIAotc3RhdGljIFBDQVBfTk9SRVRVUk5fREVGIGludAorc3RhdGljIGludAogcGZhY3Rpb25fdG9fbnVtKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgY29uc3QgY2hhciAqYWN0aW9uIF9VXykKIHsKLQlicGZfZXJyb3IoY3N0YXRlLCAibGlicGNhcCB3YXMgY29tcGlsZWQgb24gYSBtYWNoaW5lIHdpdGhvdXQgcGYgc3VwcG9ydCIpOwotCS8qTk9UUkVBQ0hFRCovCisJYnBmX3NldF9lcnJvcihjc3RhdGUsICJsaWJwY2FwIHdhcyBjb21waWxlZCBvbiBhIG1hY2hpbmUgd2l0aG91dCBwZiBzdXBwb3J0Iik7CisJcmV0dXJuICgtMSk7CiB9CiAjZW5kaWYgLyogSEFWRV9ORVRfUEZWQVJfSCAqLwogCisvKgorICogRm9yIGNhbGxzIHRoYXQgbWlnaHQgcmV0dXJuIGFuICJhbiBlcnJvciBvY2N1cnJlZCIgdmFsdWUuCisgKi8KKyNkZWZpbmUgQ0hFQ0tfSU5UX1ZBTCh2YWwpCWlmICh2YWwgPT0gLTEpIFlZQUJPUlQKKyNkZWZpbmUgQ0hFQ0tfUFRSX1ZBTCh2YWwpCWlmICh2YWwgPT0gTlVMTCkgWVlBQk9SVAorCiBESUFHX09GRl9CSVNPTl9CWUFDQwogJX0KIAogJXVuaW9uIHsKIAlpbnQgaTsKIAlicGZfdV9pbnQzMiBoOwotCXVfY2hhciAqZTsKIAljaGFyICpzOwogCXN0cnVjdCBzdG10ICpzdG10OwogCXN0cnVjdCBhcnRoICphOwpAQCAtMzAzLDcgKzMzNyw4IEBACiAldHlwZQk8YmxrPgloZWFkCiAldHlwZQk8aT4JcHF1YWwgZHF1YWwgYXF1YWwgbmRhcXVhbAogJXR5cGUJPGE+CWFydGggbmFydGgKLSV0eXBlCTxpPglieXRlb3AgcG5hbWUgcG51bSByZWxvcCBpcmVsb3AKKyV0eXBlCTxpPglieXRlb3AgcG5hbWUgcmVsb3AgaXJlbG9wCisldHlwZQk8aD4JcG51bQogJXR5cGUJPGJsaz4JYW5kIG9yIHBhcmVuIG5vdCBudWxsIHByb2cKICV0eXBlCTxyYmxrPglvdGhlciBwZnZhciBwODAyMTEgcGxsYwogJXR5cGUJPGk+CWF0bXR5cGUgYXRtbXVsdGl0eXBlCkBAIC0zMjAsNiArMzU1LDcgQEAKICV0b2tlbiAgQVRBTEsgQUFSUCBERUNORVQgTEFUIFNDQSBNT1BSQyBNT1BETAogJXRva2VuICBUS19CUk9BRENBU1QgVEtfTVVMVElDQVNUCiAldG9rZW4gIE5VTSBJTkJPVU5EIE9VVEJPVU5ECisldG9rZW4gIElGSU5ERVgKICV0b2tlbiAgUEZfSUZOQU1FIFBGX1JTRVQgUEZfUk5SIFBGX1NSTlIgUEZfUkVBU09OIFBGX0FDVElPTgogJXRva2VuCVRZUEUgU1VCVFlQRSBESVIgQUREUjEgQUREUjIgQUREUjMgQUREUjQgUkEgVEEKICV0b2tlbiAgTElOSwpAQCAtMzQwLDEzICszNzYsMTIgQEAKICV0b2tlbglSQURJTwogJXRva2VuCUZJU1UgTFNTVSBNU1UgSEZJU1UgSExTU1UgSE1TVQogJXRva2VuCVNJTyBPUEMgRFBDIFNMUyBIU0lPIEhPUEMgSERQQyBIU0xTCisldG9rZW4JTEVYX0VSUk9SCiAKLQotJXR5cGUJPHM+IElECi0ldHlwZQk8ZT4gRUlECi0ldHlwZQk8ZT4gQUlECisldHlwZQk8cz4gSUQgRUlEIEFJRAogJXR5cGUJPHM+IEhJRCBISUQ2Ci0ldHlwZQk8aT4gTlVNIGFjdGlvbiByZWFzb24gdHlwZSBzdWJ0eXBlIHR5cGVfc3VidHlwZSBkaXIKKyV0eXBlCTxoPiBOVU0KKyV0eXBlCTxpPiBhY3Rpb24gcmVhc29uIHR5cGUgc3VidHlwZSB0eXBlX3N1YnR5cGUgZGlyCiAKICVsZWZ0IE9SIEFORAogJW5vbmFzc29jICAnIScKQEAgLTM1OSw3ICszOTQsNyBAQAogJSUKIHByb2c6CSAgbnVsbCBleHByCiB7Ci0JZmluaXNoX3BhcnNlKGNzdGF0ZSwgJDIuYik7CisJQ0hFQ0tfSU5UX1ZBTChmaW5pc2hfcGFyc2UoY3N0YXRlLCAkMi5iKSk7CiB9CiAJfCBudWxsCiAJOwpAQCAtMzc2LDY0ICs0MTEsNTggQEAKIG9yOgkgIE9SCQkJeyAkJCA9ICQ8YmxrPjA7IH0KIAk7CiBpZDoJICBuaWQKLQl8IHBudW0JCQl7ICQkLmIgPSBnZW5fbmNvZGUoY3N0YXRlLCBOVUxMLCAoYnBmX3VfaW50MzIpJDEsCi0JCQkJCQkgICAkJC5xID0gJDxibGs+MC5xKTsgfQorCXwgcG51bQkJCXsgQ0hFQ0tfUFRSX1ZBTCgoJCQuYiA9IGdlbl9uY29kZShjc3RhdGUsIE5VTEwsICQxLAorCQkJCQkJICAgJCQucSA9ICQ8YmxrPjAucSkpKTsgfQogCXwgcGFyZW4gcGlkICcpJwkJeyAkJCA9ICQyOyB9CiAJOwotbmlkOgkgIElECQkJeyAkJC5iID0gZ2VuX3Njb2RlKGNzdGF0ZSwgJDEsICQkLnEgPSAkPGJsaz4wLnEpOyB9Ci0JfCBISUQgJy8nIE5VTQkJeyAkJC5iID0gZ2VuX21jb2RlKGNzdGF0ZSwgJDEsIE5VTEwsICQzLAotCQkJCSAgICAkJC5xID0gJDxibGs+MC5xKTsgfQotCXwgSElEIE5FVE1BU0sgSElECXsgJCQuYiA9IGdlbl9tY29kZShjc3RhdGUsICQxLCAkMywgMCwKLQkJCQkgICAgJCQucSA9ICQ8YmxrPjAucSk7IH0KK25pZDoJICBJRAkJCXsgQ0hFQ0tfUFRSX1ZBTCgkMSk7IENIRUNLX1BUUl9WQUwoKCQkLmIgPSBnZW5fc2NvZGUoY3N0YXRlLCAkMSwgJCQucSA9ICQ8YmxrPjAucSkpKTsgfQorCXwgSElEICcvJyBOVU0JCXsgQ0hFQ0tfUFRSX1ZBTCgkMSk7IENIRUNLX1BUUl9WQUwoKCQkLmIgPSBnZW5fbWNvZGUoY3N0YXRlLCAkMSwgTlVMTCwgJDMsCisJCQkJICAgICQkLnEgPSAkPGJsaz4wLnEpKSk7IH0KKwl8IEhJRCBORVRNQVNLIEhJRAl7IENIRUNLX1BUUl9WQUwoJDEpOyBDSEVDS19QVFJfVkFMKCgkJC5iID0gZ2VuX21jb2RlKGNzdGF0ZSwgJDEsICQzLCAwLAorCQkJCSAgICAkJC5xID0gJDxibGs+MC5xKSkpOyB9CiAJfCBISUQJCQl7CisJCQkJICBDSEVDS19QVFJfVkFMKCQxKTsKIAkJCQkgIC8qIERlY2lkZSBob3cgdG8gcGFyc2UgSElEIGJhc2VkIG9uIHByb3RvICovCiAJCQkJICAkJC5xID0gJDxibGs+MC5xOwotCQkJCSAgaWYgKCQkLnEuYWRkciA9PSBRX1BPUlQpCi0JCQkJICAJYnBmX2Vycm9yKGNzdGF0ZSwgIidwb3J0JyBtb2RpZmllciBhcHBsaWVkIHRvIGlwIGhvc3QiKTsKLQkJCQkgIGVsc2UgaWYgKCQkLnEuYWRkciA9PSBRX1BPUlRSQU5HRSkKLQkJCQkgIAlicGZfZXJyb3IoY3N0YXRlLCAiJ3BvcnRyYW5nZScgbW9kaWZpZXIgYXBwbGllZCB0byBpcCBob3N0Iik7Ci0JCQkJICBlbHNlIGlmICgkJC5xLmFkZHIgPT0gUV9QUk9UTykKLQkJCQkgIAlicGZfZXJyb3IoY3N0YXRlLCAiJ3Byb3RvJyBtb2RpZmllciBhcHBsaWVkIHRvIGlwIGhvc3QiKTsKLQkJCQkgIGVsc2UgaWYgKCQkLnEuYWRkciA9PSBRX1BST1RPQ0hBSU4pCi0JCQkJICAJYnBmX2Vycm9yKGNzdGF0ZSwgIidwcm90b2NoYWluJyBtb2RpZmllciBhcHBsaWVkIHRvIGlwIGhvc3QiKTsKLQkJCQkgICQkLmIgPSBnZW5fbmNvZGUoY3N0YXRlLCAkMSwgMCwgJCQucSk7CisJCQkJICBpZiAoJCQucS5hZGRyID09IFFfUE9SVCkgeworCQkJCQlicGZfc2V0X2Vycm9yKGNzdGF0ZSwgIidwb3J0JyBtb2RpZmllciBhcHBsaWVkIHRvIGlwIGhvc3QiKTsKKwkJCQkJWVlBQk9SVDsKKwkJCQkgIH0gZWxzZSBpZiAoJCQucS5hZGRyID09IFFfUE9SVFJBTkdFKSB7CisJCQkJCWJwZl9zZXRfZXJyb3IoY3N0YXRlLCAiJ3BvcnRyYW5nZScgbW9kaWZpZXIgYXBwbGllZCB0byBpcCBob3N0Iik7CisJCQkJCVlZQUJPUlQ7CisJCQkJICB9IGVsc2UgaWYgKCQkLnEuYWRkciA9PSBRX1BST1RPKSB7CisJCQkJCWJwZl9zZXRfZXJyb3IoY3N0YXRlLCAiJ3Byb3RvJyBtb2RpZmllciBhcHBsaWVkIHRvIGlwIGhvc3QiKTsKKwkJCQkJWVlBQk9SVDsKKwkJCQkgIH0gZWxzZSBpZiAoJCQucS5hZGRyID09IFFfUFJPVE9DSEFJTikgeworCQkJCQlicGZfc2V0X2Vycm9yKGNzdGF0ZSwgIidwcm90b2NoYWluJyBtb2RpZmllciBhcHBsaWVkIHRvIGlwIGhvc3QiKTsKKwkJCQkJWVlBQk9SVDsKKwkJCQkgIH0KKwkJCQkgIENIRUNLX1BUUl9WQUwoKCQkLmIgPSBnZW5fbmNvZGUoY3N0YXRlLCAkMSwgMCwgJCQucSkpKTsKIAkJCQl9CiAJfCBISUQ2ICcvJyBOVU0JCXsKKwkJCQkgIENIRUNLX1BUUl9WQUwoJDEpOwogI2lmZGVmIElORVQ2Ci0JCQkJICAkJC5iID0gZ2VuX21jb2RlNihjc3RhdGUsICQxLCBOVUxMLCAkMywKLQkJCQkgICAgJCQucSA9ICQ8YmxrPjAucSk7CisJCQkJICBDSEVDS19QVFJfVkFMKCgkJC5iID0gZ2VuX21jb2RlNihjc3RhdGUsICQxLCBOVUxMLCAkMywKKwkJCQkgICAgJCQucSA9ICQ8YmxrPjAucSkpKTsKICNlbHNlCi0JCQkJICBicGZfZXJyb3IoY3N0YXRlLCAiJ2lwNmFkZHIvcHJlZml4bGVuJyBub3Qgc3VwcG9ydGVkICIKKwkJCQkgIGJwZl9zZXRfZXJyb3IoY3N0YXRlLCAiJ2lwNmFkZHIvcHJlZml4bGVuJyBub3Qgc3VwcG9ydGVkICIKIAkJCQkJImluIHRoaXMgY29uZmlndXJhdGlvbiIpOworCQkJCSAgWVlBQk9SVDsKICNlbmRpZiAvKklORVQ2Ki8KIAkJCQl9CiAJfCBISUQ2CQkJeworCQkJCSAgQ0hFQ0tfUFRSX1ZBTCgkMSk7CiAjaWZkZWYgSU5FVDYKLQkJCQkgICQkLmIgPSBnZW5fbWNvZGU2KGNzdGF0ZSwgJDEsIDAsIDEyOCwKLQkJCQkgICAgJCQucSA9ICQ8YmxrPjAucSk7CisJCQkJICBDSEVDS19QVFJfVkFMKCgkJC5iID0gZ2VuX21jb2RlNihjc3RhdGUsICQxLCAwLCAxMjgsCisJCQkJICAgICQkLnEgPSAkPGJsaz4wLnEpKSk7CiAjZWxzZQotCQkJCSAgYnBmX2Vycm9yKGNzdGF0ZSwgIidpcDZhZGRyJyBub3Qgc3VwcG9ydGVkICIKKwkJCQkgIGJwZl9zZXRfZXJyb3IoY3N0YXRlLCAiJ2lwNmFkZHInIG5vdCBzdXBwb3J0ZWQgIgogCQkJCQkiaW4gdGhpcyBjb25maWd1cmF0aW9uIik7CisJCQkJICBZWUFCT1JUOwogI2VuZGlmIC8qSU5FVDYqLwogCQkJCX0KLQl8IEVJRAkJCXsKLQkJCQkgICQkLmIgPSBnZW5fZWNvZGUoY3N0YXRlLCAkMSwgJCQucSA9ICQ8YmxrPjAucSk7Ci0JCQkJICAvKgotCQkJCSAgICogJDEgd2FzIGFsbG9jYXRlZCBieSAicGNhcF9ldGhlcl9hdG9uKCkiLAotCQkJCSAgICogc28gd2UgbXVzdCBmcmVlIGl0IG5vdyB0aGF0IHdlJ3JlIGRvbmUKLQkJCQkgICAqIHdpdGggaXQuCi0JCQkJICAgKi8KLQkJCQkgIGZyZWUoJDEpOwotCQkJCX0KLQl8IEFJRAkJCXsKLQkJCQkgICQkLmIgPSBnZW5fYWNvZGUoY3N0YXRlLCAkMSwgJCQucSA9ICQ8YmxrPjAucSk7Ci0JCQkJICAvKgotCQkJCSAgICogJDEgd2FzIGFsbG9jYXRlZCBieSAicGNhcF9ldGhlcl9hdG9uKCkiLAotCQkJCSAgICogc28gd2UgbXVzdCBmcmVlIGl0IG5vdyB0aGF0IHdlJ3JlIGRvbmUKLQkJCQkgICAqIHdpdGggaXQuCi0JCQkJICAgKi8KLQkJCQkgIGZyZWUoJDEpOwotCQkJCX0KKwl8IEVJRAkJCXsgQ0hFQ0tfUFRSX1ZBTCgkMSk7IENIRUNLX1BUUl9WQUwoKCQkLmIgPSBnZW5fZWNvZGUoY3N0YXRlLCAkMSwgJCQucSA9ICQ8YmxrPjAucSkpKTsgfQorCXwgQUlECQkJeyBDSEVDS19QVFJfVkFMKCQxKTsgQ0hFQ0tfUFRSX1ZBTCgoJCQuYiA9IGdlbl9hY29kZShjc3RhdGUsICQxLCAkJC5xID0gJDxibGs+MC5xKSkpOyB9CiAJfCBub3QgaWQJCXsgZ2VuX25vdCgkMi5iKTsgJCQgPSAkMjsgfQogCTsKIG5vdDoJICAnIScJCQl7ICQkID0gJDxibGs+MDsgfQpAQCAtNDQ0LDggKzQ3Myw4IEBACiAJfCBxaWQgYW5kIGlkCQl7IGdlbl9hbmQoJDEuYiwgJDMuYik7ICQkID0gJDM7IH0KIAl8IHFpZCBvciBpZAkJeyBnZW5fb3IoJDEuYiwgJDMuYik7ICQkID0gJDM7IH0KIAk7Ci1xaWQ6CSAgcG51bQkJCXsgJCQuYiA9IGdlbl9uY29kZShjc3RhdGUsIE5VTEwsIChicGZfdV9pbnQzMikkMSwKLQkJCQkJCSAgICQkLnEgPSAkPGJsaz4wLnEpOyB9CitxaWQ6CSAgcG51bQkJCXsgQ0hFQ0tfUFRSX1ZBTCgoJCQuYiA9IGdlbl9uY29kZShjc3RhdGUsIE5VTEwsICQxLAorCQkJCQkJICAgJCQucSA9ICQ8YmxrPjAucSkpKTsgfQogCXwgcGlkCiAJOwogdGVybToJICBydGVybQpAQCAtNDU1LDIxICs0ODQsMjggQEAKIAl8IHBxdWFsIGRxdWFsCQl7IFFTRVQoJCQucSwgJDEsICQyLCBRX0RFRkFVTFQpOyB9CiAJfCBwcXVhbCBhcXVhbAkJeyBRU0VUKCQkLnEsICQxLCBRX0RFRkFVTFQsICQyKTsgfQogCXwgcHF1YWwgUFJPVE8JCXsgUVNFVCgkJC5xLCAkMSwgUV9ERUZBVUxULCBRX1BST1RPKTsgfQotCXwgcHF1YWwgUFJPVE9DSEFJTgl7IFFTRVQoJCQucSwgJDEsIFFfREVGQVVMVCwgUV9QUk9UT0NIQUlOKTsgfQorCXwgcHF1YWwgUFJPVE9DSEFJTgl7CisjaWZkZWYgTk9fUFJPVE9DSEFJTgorCQkJCSAgYnBmX3NldF9lcnJvcihjc3RhdGUsICJwcm90b2NoYWluIG5vdCBzdXBwb3J0ZWQiKTsKKwkJCQkgIFlZQUJPUlQ7CisjZWxzZQorCQkJCSAgUVNFVCgkJC5xLCAkMSwgUV9ERUZBVUxULCBRX1BST1RPQ0hBSU4pOworI2VuZGlmCisJCQkJfQogCXwgcHF1YWwgbmRhcXVhbAkJeyBRU0VUKCQkLnEsICQxLCBRX0RFRkFVTFQsICQyKTsgfQogCTsKIHJ0ZXJtOgkgIGhlYWQgaWQJCXsgJCQgPSAkMjsgfQogCXwgcGFyZW4gZXhwciAnKScJeyAkJC5iID0gJDIuYjsgJCQucSA9ICQxLnE7IH0KLQl8IHBuYW1lCQkJeyAkJC5iID0gZ2VuX3Byb3RvX2FiYnJldihjc3RhdGUsICQxKTsgJCQucSA9IHFlcnI7IH0KLQl8IGFydGggcmVsb3AgYXJ0aAl7ICQkLmIgPSBnZW5fcmVsYXRpb24oY3N0YXRlLCAkMiwgJDEsICQzLCAwKTsKKwl8IHBuYW1lCQkJeyBDSEVDS19QVFJfVkFMKCgkJC5iID0gZ2VuX3Byb3RvX2FiYnJldihjc3RhdGUsICQxKSkpOyAkJC5xID0gcWVycjsgfQorCXwgYXJ0aCByZWxvcCBhcnRoCXsgQ0hFQ0tfUFRSX1ZBTCgoJCQuYiA9IGdlbl9yZWxhdGlvbihjc3RhdGUsICQyLCAkMSwgJDMsIDApKSk7CiAJCQkJICAkJC5xID0gcWVycjsgfQotCXwgYXJ0aCBpcmVsb3AgYXJ0aAl7ICQkLmIgPSBnZW5fcmVsYXRpb24oY3N0YXRlLCAkMiwgJDEsICQzLCAxKTsKKwl8IGFydGggaXJlbG9wIGFydGgJeyBDSEVDS19QVFJfVkFMKCgkJC5iID0gZ2VuX3JlbGF0aW9uKGNzdGF0ZSwgJDIsICQxLCAkMywgMSkpKTsKIAkJCQkgICQkLnEgPSBxZXJyOyB9CiAJfCBvdGhlcgkJCXsgJCQuYiA9ICQxOyAkJC5xID0gcWVycjsgfQotCXwgYXRtdHlwZQkJeyAkJC5iID0gZ2VuX2F0bXR5cGVfYWJicmV2KGNzdGF0ZSwgJDEpOyAkJC5xID0gcWVycjsgfQotCXwgYXRtbXVsdGl0eXBlCQl7ICQkLmIgPSBnZW5fYXRtbXVsdGlfYWJicmV2KGNzdGF0ZSwgJDEpOyAkJC5xID0gcWVycjsgfQorCXwgYXRtdHlwZQkJeyBDSEVDS19QVFJfVkFMKCgkJC5iID0gZ2VuX2F0bXR5cGVfYWJicmV2KGNzdGF0ZSwgJDEpKSk7ICQkLnEgPSBxZXJyOyB9CisJfCBhdG1tdWx0aXR5cGUJCXsgQ0hFQ0tfUFRSX1ZBTCgoJCQuYiA9IGdlbl9hdG1tdWx0aV9hYmJyZXYoY3N0YXRlLCAkMSkpKTsgJCQucSA9IHFlcnI7IH0KIAl8IGF0bWZpZWxkIGF0bXZhbHVlCXsgJCQuYiA9ICQyLmI7ICQkLnEgPSBxZXJyOyB9Ci0JfCBtdHAydHlwZQkJeyAkJC5iID0gZ2VuX210cDJ0eXBlX2FiYnJldihjc3RhdGUsICQxKTsgJCQucSA9IHFlcnI7IH0KKwl8IG10cDJ0eXBlCQl7IENIRUNLX1BUUl9WQUwoKCQkLmIgPSBnZW5fbXRwMnR5cGVfYWJicmV2KGNzdGF0ZSwgJDEpKSk7ICQkLnEgPSBxZXJyOyB9CiAJfCBtdHAzZmllbGQgbXRwM3ZhbHVlCXsgJCQuYiA9ICQyLmI7ICQkLnEgPSBxZXJyOyB9CiAJOwogLyogcHJvdG9jb2wgbGV2ZWwgcXVhbGlmaWVycyAqLwpAQCAtNTExLDcgKzU0Nyw3IEBACiAJfCBJR1JQCQkJeyAkJCA9IFFfSUdSUDsgfQogCXwgUElNCQkJeyAkJCA9IFFfUElNOyB9CiAJfCBWUlJQCQkJeyAkJCA9IFFfVlJSUDsgfQotCXwgQ0FSUCAJCQl7ICQkID0gUV9DQVJQOyB9CisJfCBDQVJQCQkJeyAkJCA9IFFfQ0FSUDsgfQogCXwgQVRBTEsJCQl7ICQkID0gUV9BVEFMSzsgfQogCXwgQUFSUAkJCXsgJCQgPSBRX0FBUlA7IH0KIAl8IERFQ05FVAkJeyAkJCA9IFFfREVDTkVUOyB9CkBAIC01MzksODQgKzU3NSwxMDIgQEAKIAl8IE5FVEJFVUkJCXsgJCQgPSBRX05FVEJFVUk7IH0KIAl8IFJBRElPCQkJeyAkJCA9IFFfUkFESU87IH0KIAk7Ci1vdGhlcjoJICBwcXVhbCBUS19CUk9BRENBU1QJeyAkJCA9IGdlbl9icm9hZGNhc3QoY3N0YXRlLCAkMSk7IH0KLQl8IHBxdWFsIFRLX01VTFRJQ0FTVAl7ICQkID0gZ2VuX211bHRpY2FzdChjc3RhdGUsICQxKTsgfQotCXwgTEVTUyBOVU0JCXsgJCQgPSBnZW5fbGVzcyhjc3RhdGUsICQyKTsgfQotCXwgR1JFQVRFUiBOVU0JCXsgJCQgPSBnZW5fZ3JlYXRlcihjc3RhdGUsICQyKTsgfQotCXwgQ0JZVEUgTlVNIGJ5dGVvcCBOVU0JeyAkJCA9IGdlbl9ieXRlb3AoY3N0YXRlLCAkMywgJDIsICQ0KTsgfQotCXwgSU5CT1VORAkJeyAkJCA9IGdlbl9pbmJvdW5kKGNzdGF0ZSwgMCk7IH0KLQl8IE9VVEJPVU5ECQl7ICQkID0gZ2VuX2luYm91bmQoY3N0YXRlLCAxKTsgfQotCXwgVkxBTiBwbnVtCQl7ICQkID0gZ2VuX3ZsYW4oY3N0YXRlLCAkMik7IH0KLQl8IFZMQU4JCQl7ICQkID0gZ2VuX3ZsYW4oY3N0YXRlLCAtMSk7IH0KLQl8IE1QTFMgcG51bQkJeyAkJCA9IGdlbl9tcGxzKGNzdGF0ZSwgJDIpOyB9Ci0JfCBNUExTCQkJeyAkJCA9IGdlbl9tcGxzKGNzdGF0ZSwgLTEpOyB9Ci0JfCBQUFBPRUQJCXsgJCQgPSBnZW5fcHBwb2VkKGNzdGF0ZSk7IH0KLQl8IFBQUE9FUyBwbnVtCQl7ICQkID0gZ2VuX3BwcG9lcyhjc3RhdGUsICQyKTsgfQotCXwgUFBQT0VTCQl7ICQkID0gZ2VuX3BwcG9lcyhjc3RhdGUsIC0xKTsgfQotCXwgR0VORVZFIHBudW0JCXsgJCQgPSBnZW5fZ2VuZXZlKGNzdGF0ZSwgJDIpOyB9Ci0JfCBHRU5FVkUJCXsgJCQgPSBnZW5fZ2VuZXZlKGNzdGF0ZSwgLTEpOyB9CitvdGhlcjoJICBwcXVhbCBUS19CUk9BRENBU1QJeyBDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl9icm9hZGNhc3QoY3N0YXRlLCAkMSkpKTsgfQorCXwgcHF1YWwgVEtfTVVMVElDQVNUCXsgQ0hFQ0tfUFRSX1ZBTCgoJCQgPSBnZW5fbXVsdGljYXN0KGNzdGF0ZSwgJDEpKSk7IH0KKwl8IExFU1MgTlVNCQl7IENIRUNLX1BUUl9WQUwoKCQkID0gZ2VuX2xlc3MoY3N0YXRlLCAkMikpKTsgfQorCXwgR1JFQVRFUiBOVU0JCXsgQ0hFQ0tfUFRSX1ZBTCgoJCQgPSBnZW5fZ3JlYXRlcihjc3RhdGUsICQyKSkpOyB9CisJfCBDQllURSBOVU0gYnl0ZW9wIE5VTQl7IENIRUNLX1BUUl9WQUwoKCQkID0gZ2VuX2J5dGVvcChjc3RhdGUsICQzLCAkMiwgJDQpKSk7IH0KKwl8IElOQk9VTkQJCXsgQ0hFQ0tfUFRSX1ZBTCgoJCQgPSBnZW5faW5ib3VuZChjc3RhdGUsIDApKSk7IH0KKwl8IE9VVEJPVU5ECQl7IENIRUNLX1BUUl9WQUwoKCQkID0gZ2VuX2luYm91bmQoY3N0YXRlLCAxKSkpOyB9CisJfCBJRklOREVYIE5VTQkJeyBDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl9pZmluZGV4KGNzdGF0ZSwgJDIpKSk7IH0KKwl8IFZMQU4gcG51bQkJeyBDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl92bGFuKGNzdGF0ZSwgJDIsIDEpKSk7IH0KKwl8IFZMQU4JCQl7IENIRUNLX1BUUl9WQUwoKCQkID0gZ2VuX3ZsYW4oY3N0YXRlLCAwLCAwKSkpOyB9CisJfCBNUExTIHBudW0JCXsgQ0hFQ0tfUFRSX1ZBTCgoJCQgPSBnZW5fbXBscyhjc3RhdGUsICQyLCAxKSkpOyB9CisJfCBNUExTCQkJeyBDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl9tcGxzKGNzdGF0ZSwgMCwgMCkpKTsgfQorCXwgUFBQT0VECQl7IENIRUNLX1BUUl9WQUwoKCQkID0gZ2VuX3BwcG9lZChjc3RhdGUpKSk7IH0KKwl8IFBQUE9FUyBwbnVtCQl7IENIRUNLX1BUUl9WQUwoKCQkID0gZ2VuX3BwcG9lcyhjc3RhdGUsICQyLCAxKSkpOyB9CisJfCBQUFBPRVMJCXsgQ0hFQ0tfUFRSX1ZBTCgoJCQgPSBnZW5fcHBwb2VzKGNzdGF0ZSwgMCwgMCkpKTsgfQorCXwgR0VORVZFIHBudW0JCXsgQ0hFQ0tfUFRSX1ZBTCgoJCQgPSBnZW5fZ2VuZXZlKGNzdGF0ZSwgJDIsIDEpKSk7IH0KKwl8IEdFTkVWRQkJeyBDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl9nZW5ldmUoY3N0YXRlLCAwLCAwKSkpOyB9CiAJfCBwZnZhcgkJCXsgJCQgPSAkMTsgfQogCXwgcHF1YWwgcDgwMjExCQl7ICQkID0gJDI7IH0KIAl8IHBsbGMJCQl7ICQkID0gJDE7IH0KIAk7CiAKLXBmdmFyOgkgIFBGX0lGTkFNRSBJRAkJeyAkJCA9IGdlbl9wZl9pZm5hbWUoY3N0YXRlLCAkMik7IH0KLQl8IFBGX1JTRVQgSUQJCXsgJCQgPSBnZW5fcGZfcnVsZXNldChjc3RhdGUsICQyKTsgfQotCXwgUEZfUk5SIE5VTQkJeyAkJCA9IGdlbl9wZl9ybnIoY3N0YXRlLCAkMik7IH0KLQl8IFBGX1NSTlIgTlVNCQl7ICQkID0gZ2VuX3BmX3NybnIoY3N0YXRlLCAkMik7IH0KLQl8IFBGX1JFQVNPTiByZWFzb24JeyAkJCA9IGdlbl9wZl9yZWFzb24oY3N0YXRlLCAkMik7IH0KLQl8IFBGX0FDVElPTiBhY3Rpb24JeyAkJCA9IGdlbl9wZl9hY3Rpb24oY3N0YXRlLCAkMik7IH0KK3BmdmFyOgkgIFBGX0lGTkFNRSBJRAkJeyBDSEVDS19QVFJfVkFMKCQyKTsgQ0hFQ0tfUFRSX1ZBTCgoJCQgPSBnZW5fcGZfaWZuYW1lKGNzdGF0ZSwgJDIpKSk7IH0KKwl8IFBGX1JTRVQgSUQJCXsgQ0hFQ0tfUFRSX1ZBTCgkMik7IENIRUNLX1BUUl9WQUwoKCQkID0gZ2VuX3BmX3J1bGVzZXQoY3N0YXRlLCAkMikpKTsgfQorCXwgUEZfUk5SIE5VTQkJeyBDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl9wZl9ybnIoY3N0YXRlLCAkMikpKTsgfQorCXwgUEZfU1JOUiBOVU0JCXsgQ0hFQ0tfUFRSX1ZBTCgoJCQgPSBnZW5fcGZfc3Jucihjc3RhdGUsICQyKSkpOyB9CisJfCBQRl9SRUFTT04gcmVhc29uCXsgQ0hFQ0tfUFRSX1ZBTCgoJCQgPSBnZW5fcGZfcmVhc29uKGNzdGF0ZSwgJDIpKSk7IH0KKwl8IFBGX0FDVElPTiBhY3Rpb24JeyBDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl9wZl9hY3Rpb24oY3N0YXRlLCAkMikpKTsgfQogCTsKIAogcDgwMjExOiAgIFRZUEUgdHlwZSBTVUJUWVBFIHN1YnR5cGUKLQkJCQl7ICQkID0gZ2VuX3A4MDIxMV90eXBlKGNzdGF0ZSwgJDIgfCAkNCwKKwkJCQl7IENIRUNLX1BUUl9WQUwoKCQkID0gZ2VuX3A4MDIxMV90eXBlKGNzdGF0ZSwgJDIgfCAkNCwKIAkJCQkJSUVFRTgwMjExX0ZDMF9UWVBFX01BU0sgfAotCQkJCQlJRUVFODAyMTFfRkMwX1NVQlRZUEVfTUFTSyk7CisJCQkJCUlFRUU4MDIxMV9GQzBfU1VCVFlQRV9NQVNLKSkpOwogCQkJCX0KLQl8IFRZUEUgdHlwZQkJeyAkJCA9IGdlbl9wODAyMTFfdHlwZShjc3RhdGUsICQyLAotCQkJCQlJRUVFODAyMTFfRkMwX1RZUEVfTUFTSyk7CisJfCBUWVBFIHR5cGUJCXsgQ0hFQ0tfUFRSX1ZBTCgoJCQgPSBnZW5fcDgwMjExX3R5cGUoY3N0YXRlLCAkMiwKKwkJCQkJSUVFRTgwMjExX0ZDMF9UWVBFX01BU0spKSk7CiAJCQkJfQotCXwgU1VCVFlQRSB0eXBlX3N1YnR5cGUJeyAkJCA9IGdlbl9wODAyMTFfdHlwZShjc3RhdGUsICQyLAorCXwgU1VCVFlQRSB0eXBlX3N1YnR5cGUJeyBDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl9wODAyMTFfdHlwZShjc3RhdGUsICQyLAogCQkJCQlJRUVFODAyMTFfRkMwX1RZUEVfTUFTSyB8Ci0JCQkJCUlFRUU4MDIxMV9GQzBfU1VCVFlQRV9NQVNLKTsKKwkJCQkJSUVFRTgwMjExX0ZDMF9TVUJUWVBFX01BU0spKSk7CiAJCQkJfQotCXwgRElSIGRpcgkJeyAkJCA9IGdlbl9wODAyMTFfZmNkaXIoY3N0YXRlLCAkMik7IH0KKwl8IERJUiBkaXIJCXsgQ0hFQ0tfUFRSX1ZBTCgoJCQgPSBnZW5fcDgwMjExX2ZjZGlyKGNzdGF0ZSwgJDIpKSk7IH0KIAk7CiAKLXR5cGU6CSAgTlVNCi0JfCBJRAkJCXsgJCQgPSBzdHIydG9rKCQxLCBpZWVlODAyMTFfdHlwZXMpOwotCQkJCSAgaWYgKCQkID09IC0xKQotCQkJCSAgCWJwZl9lcnJvcihjc3RhdGUsICJ1bmtub3duIDgwMi4xMSB0eXBlIG5hbWUiKTsKK3R5cGU6CSAgTlVNCQkJeyBpZiAoKCQxICYgKH5JRUVFODAyMTFfRkMwX1RZUEVfTUFTSykpICE9IDApIHsKKwkJCQkJYnBmX3NldF9lcnJvcihjc3RhdGUsICJpbnZhbGlkIDgwMi4xMSB0eXBlIHZhbHVlIDB4JTAyeCIsICQxKTsKKwkJCQkJWVlBQk9SVDsKKwkJCQkgIH0KKwkJCQkgICQkID0gKGludCkkMTsKKwkJCQl9CisJfCBJRAkJCXsgQ0hFQ0tfUFRSX1ZBTCgkMSk7CisJCQkJICAkJCA9IHN0cjJ0b2soJDEsIGllZWU4MDIxMV90eXBlcyk7CisJCQkJICBpZiAoJCQgPT0gLTEpIHsKKwkJCQkJYnBmX3NldF9lcnJvcihjc3RhdGUsICJ1bmtub3duIDgwMi4xMSB0eXBlIG5hbWUgXCIlc1wiIiwgJDEpOworCQkJCQlZWUFCT1JUOworCQkJCSAgfQogCQkJCX0KIAk7CiAKLXN1YnR5cGU6ICBOVU0KK3N1YnR5cGU6ICBOVU0JCQl7IGlmICgoJDEgJiAofklFRUU4MDIxMV9GQzBfU1VCVFlQRV9NQVNLKSkgIT0gMCkgeworCQkJCQlicGZfc2V0X2Vycm9yKGNzdGF0ZSwgImludmFsaWQgODAyLjExIHN1YnR5cGUgdmFsdWUgMHglMDJ4IiwgJDEpOworCQkJCQlZWUFCT1JUOworCQkJCSAgfQorCQkJCSAgJCQgPSAoaW50KSQxOworCQkJCX0KIAl8IElECQkJeyBjb25zdCBzdHJ1Y3QgdG9rICp0eXBlcyA9IE5VTEw7CiAJCQkJICBpbnQgaTsKKwkJCQkgIENIRUNLX1BUUl9WQUwoJDEpOwogCQkJCSAgZm9yIChpID0gMDs7IGkrKykgewotCQkJCSAgCWlmIChpZWVlODAyMTFfdHlwZV9zdWJ0eXBlc1tpXS50b2sgPT0gTlVMTCkgewotCQkJCSAgCQkvKiBSYW4gb3V0IG9mIHR5cGVzICovCi0JCQkJCQlicGZfZXJyb3IoY3N0YXRlLCAidW5rbm93biA4MDIuMTEgdHlwZSIpOwotCQkJCQkJYnJlYWs7CisJCQkJCWlmIChpZWVlODAyMTFfdHlwZV9zdWJ0eXBlc1tpXS50b2sgPT0gTlVMTCkgeworCQkJCQkJLyogUmFuIG91dCBvZiB0eXBlcyAqLworCQkJCQkJYnBmX3NldF9lcnJvcihjc3RhdGUsICJ1bmtub3duIDgwMi4xMSB0eXBlIik7CisJCQkJCQlZWUFCT1JUOwogCQkJCQl9Ci0JCQkJCWlmICgkPGk+LTEgPT0gaWVlZTgwMjExX3R5cGVfc3VidHlwZXNbaV0udHlwZSkgeworCQkJCQlpZiAoLTEgPT0gaWVlZTgwMjExX3R5cGVfc3VidHlwZXNbaV0udHlwZSkgewogCQkJCQkJdHlwZXMgPSBpZWVlODAyMTFfdHlwZV9zdWJ0eXBlc1tpXS50b2s7CiAJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCSAgfQogCiAJCQkJICAkJCA9IHN0cjJ0b2soJDEsIHR5cGVzKTsKLQkJCQkgIGlmICgkJCA9PSAtMSkKLQkJCQkJYnBmX2Vycm9yKGNzdGF0ZSwgInVua25vd24gODAyLjExIHN1YnR5cGUgbmFtZSIpOworCQkJCSAgaWYgKCQkID09IC0xKSB7CisJCQkJCWJwZl9zZXRfZXJyb3IoY3N0YXRlLCAidW5rbm93biA4MDIuMTEgc3VidHlwZSBuYW1lIFwiJXNcIiIsICQxKTsKKwkJCQkJWVlBQk9SVDsKKwkJCQkgIH0KIAkJCQl9CiAJOwogCiB0eXBlX3N1YnR5cGU6CUlECQl7IGludCBpOworCQkJCSAgQ0hFQ0tfUFRSX1ZBTCgkMSk7CiAJCQkJICBmb3IgKGkgPSAwOzsgaSsrKSB7Ci0JCQkJICAJaWYgKGllZWU4MDIxMV90eXBlX3N1YnR5cGVzW2ldLnRvayA9PSBOVUxMKSB7Ci0JCQkJICAJCS8qIFJhbiBvdXQgb2YgdHlwZXMgKi8KLQkJCQkJCWJwZl9lcnJvcihjc3RhdGUsICJ1bmtub3duIDgwMi4xMSB0eXBlIG5hbWUiKTsKLQkJCQkJCWJyZWFrOworCQkJCQlpZiAoaWVlZTgwMjExX3R5cGVfc3VidHlwZXNbaV0udG9rID09IE5VTEwpIHsKKwkJCQkJCS8qIFJhbiBvdXQgb2YgdHlwZXMgKi8KKwkJCQkJCWJwZl9zZXRfZXJyb3IoY3N0YXRlLCAidW5rbm93biA4MDIuMTEgdHlwZSBuYW1lIik7CisJCQkJCQlZWUFCT1JUOwogCQkJCQl9CiAJCQkJCSQkID0gc3RyMnRvaygkMSwgaWVlZTgwMjExX3R5cGVfc3VidHlwZXNbaV0udG9rKTsKIAkJCQkJaWYgKCQkICE9IC0xKSB7CkBAIC02MjcsMzMgKzY4MSwzNyBAQAogCQkJCX0KIAkJOwogCi1wbGxjOglMTEMJCQl7ICQkID0gZ2VuX2xsYyhjc3RhdGUpOyB9Ci0JfCBMTEMgSUQJCXsgaWYgKHBjYXBfc3RyY2FzZWNtcCgkMiwgImkiKSA9PSAwKQotCQkJCQkkJCA9IGdlbl9sbGNfaShjc3RhdGUpOwotCQkJCSAgZWxzZSBpZiAocGNhcF9zdHJjYXNlY21wKCQyLCAicyIpID09IDApCi0JCQkJCSQkID0gZ2VuX2xsY19zKGNzdGF0ZSk7Ci0JCQkJICBlbHNlIGlmIChwY2FwX3N0cmNhc2VjbXAoJDIsICJ1IikgPT0gMCkKLQkJCQkJJCQgPSBnZW5fbGxjX3UoY3N0YXRlKTsKLQkJCQkgIGVsc2UgeworcGxsYzoJTExDCQkJeyBDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl9sbGMoY3N0YXRlKSkpOyB9CisJfCBMTEMgSUQJCXsgQ0hFQ0tfUFRSX1ZBTCgkMik7CisJCQkJICBpZiAocGNhcF9zdHJjYXNlY21wKCQyLCAiaSIpID09IDApIHsKKwkJCQkJQ0hFQ0tfUFRSX1ZBTCgoJCQgPSBnZW5fbGxjX2koY3N0YXRlKSkpOworCQkJCSAgfSBlbHNlIGlmIChwY2FwX3N0cmNhc2VjbXAoJDIsICJzIikgPT0gMCkgeworCQkJCQlDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl9sbGNfcyhjc3RhdGUpKSk7CisJCQkJICB9IGVsc2UgaWYgKHBjYXBfc3RyY2FzZWNtcCgkMiwgInUiKSA9PSAwKSB7CisJCQkJCUNIRUNLX1BUUl9WQUwoKCQkID0gZ2VuX2xsY191KGNzdGF0ZSkpKTsKKwkJCQkgIH0gZWxzZSB7CiAJCQkJCWludCBzdWJ0eXBlOwogCiAJCQkJCXN1YnR5cGUgPSBzdHIydG9rKCQyLCBsbGNfc19zdWJ0eXBlcyk7Ci0JCQkJCWlmIChzdWJ0eXBlICE9IC0xKQotCQkJCQkJJCQgPSBnZW5fbGxjX3Nfc3VidHlwZShjc3RhdGUsIHN1YnR5cGUpOwotCQkJCQllbHNlIHsKKwkJCQkJaWYgKHN1YnR5cGUgIT0gLTEpIHsKKwkJCQkJCUNIRUNLX1BUUl9WQUwoKCQkID0gZ2VuX2xsY19zX3N1YnR5cGUoY3N0YXRlLCBzdWJ0eXBlKSkpOworCQkJCQl9IGVsc2UgewogCQkJCQkJc3VidHlwZSA9IHN0cjJ0b2soJDIsIGxsY191X3N1YnR5cGVzKTsKLQkJCQkJCWlmIChzdWJ0eXBlID09IC0xKQotCQkJCQkgIAkJYnBmX2Vycm9yKGNzdGF0ZSwgInVua25vd24gTExDIHR5cGUgbmFtZSBcIiVzXCIiLCAkMik7Ci0JCQkJCQkkJCA9IGdlbl9sbGNfdV9zdWJ0eXBlKGNzdGF0ZSwgc3VidHlwZSk7CisJCQkJCQlpZiAoc3VidHlwZSA9PSAtMSkgeworCQkJCQkJCWJwZl9zZXRfZXJyb3IoY3N0YXRlLCAidW5rbm93biBMTEMgdHlwZSBuYW1lIFwiJXNcIiIsICQyKTsKKwkJCQkJCQlZWUFCT1JUOworCQkJCQkJfQorCQkJCQkJQ0hFQ0tfUFRSX1ZBTCgoJCQgPSBnZW5fbGxjX3Vfc3VidHlwZShjc3RhdGUsIHN1YnR5cGUpKSk7CiAJCQkJCX0KIAkJCQkgIH0KIAkJCQl9CiAJCQkJLyogc2lnaCwgInJuciIgaXMgYWxyZWFkeSBhIGtleXdvcmQgZm9yIFBGICovCi0JfCBMTEMgUEZfUk5SCQl7ICQkID0gZ2VuX2xsY19zX3N1YnR5cGUoY3N0YXRlLCBMTENfUk5SKTsgfQorCXwgTExDIFBGX1JOUgkJeyBDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl9sbGNfc19zdWJ0eXBlKGNzdGF0ZSwgTExDX1JOUikpKTsgfQogCTsKIAotZGlyOgkgIE5VTQotCXwgSUQJCQl7IGlmIChwY2FwX3N0cmNhc2VjbXAoJDEsICJub2RzIikgPT0gMCkKK2RpcjoJICBOVU0JCQl7ICQkID0gKGludCkkMTsgfQorCXwgSUQJCQl7IENIRUNLX1BUUl9WQUwoJDEpOworCQkJCSAgaWYgKHBjYXBfc3RyY2FzZWNtcCgkMSwgIm5vZHMiKSA9PSAwKQogCQkJCQkkJCA9IElFRUU4MDIxMV9GQzFfRElSX05PRFM7CiAJCQkJICBlbHNlIGlmIChwY2FwX3N0cmNhc2VjbXAoJDEsICJ0b2RzIikgPT0gMCkKIAkJCQkJJCQgPSBJRUVFODAyMTFfRkMxX0RJUl9UT0RTOwpAQCAtNjYxLDE2ICs3MTksMTggQEAKIAkJCQkJJCQgPSBJRUVFODAyMTFfRkMxX0RJUl9GUk9NRFM7CiAJCQkJICBlbHNlIGlmIChwY2FwX3N0cmNhc2VjbXAoJDEsICJkc3RvZHMiKSA9PSAwKQogCQkJCQkkJCA9IElFRUU4MDIxMV9GQzFfRElSX0RTVE9EUzsKLQkJCQkgIGVsc2UKLQkJCQkJYnBmX2Vycm9yKGNzdGF0ZSwgInVua25vd24gODAyLjExIGRpcmVjdGlvbiIpOworCQkJCSAgZWxzZSB7CisJCQkJCWJwZl9zZXRfZXJyb3IoY3N0YXRlLCAidW5rbm93biA4MDIuMTEgZGlyZWN0aW9uIik7CisJCQkJCVlZQUJPUlQ7CisJCQkJICB9CiAJCQkJfQogCTsKIAogcmVhc29uOgkgIE5VTQkJCXsgJCQgPSAkMTsgfQotCXwgSUQJCQl7ICQkID0gcGZyZWFzb25fdG9fbnVtKGNzdGF0ZSwgJDEpOyB9CisJfCBJRAkJCXsgQ0hFQ0tfUFRSX1ZBTCgkMSk7IENIRUNLX0lOVF9WQUwoKCQkID0gcGZyZWFzb25fdG9fbnVtKGNzdGF0ZSwgJDEpKSk7IH0KIAk7CiAKLWFjdGlvbjoJICBJRAkJCXsgJCQgPSBwZmFjdGlvbl90b19udW0oY3N0YXRlLCAkMSk7IH0KK2FjdGlvbjoJICBJRAkJCXsgQ0hFQ0tfUFRSX1ZBTCgkMSk7IENIRUNLX0lOVF9WQUwoKCQkID0gcGZhY3Rpb25fdG9fbnVtKGNzdGF0ZSwgJDEpKSk7IH0KIAk7CiAKIHJlbG9wOgkgICc+JwkJCXsgJCQgPSBCUEZfSkdUOyB9CkBAIC02ODEsMjQgKzc0MSwyNCBAQAogCXwgJzwnCQkJeyAkJCA9IEJQRl9KR0U7IH0KIAl8IE5FUQkJCXsgJCQgPSBCUEZfSkVROyB9CiAJOwotYXJ0aDoJICBwbnVtCQkJeyAkJCA9IGdlbl9sb2FkaShjc3RhdGUsICQxKTsgfQorYXJ0aDoJICBwbnVtCQkJeyBDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl9sb2FkaShjc3RhdGUsICQxKSkpOyB9CiAJfCBuYXJ0aAogCTsKLW5hcnRoOgkgIHBuYW1lICdbJyBhcnRoICddJwkJeyAkJCA9IGdlbl9sb2FkKGNzdGF0ZSwgJDEsICQzLCAxKTsgfQotCXwgcG5hbWUgJ1snIGFydGggJzonIE5VTSAnXScJeyAkJCA9IGdlbl9sb2FkKGNzdGF0ZSwgJDEsICQzLCAkNSk7IH0KLQl8IGFydGggJysnIGFydGgJCQl7ICQkID0gZ2VuX2FydGgoY3N0YXRlLCBCUEZfQURELCAkMSwgJDMpOyB9Ci0JfCBhcnRoICctJyBhcnRoCQkJeyAkJCA9IGdlbl9hcnRoKGNzdGF0ZSwgQlBGX1NVQiwgJDEsICQzKTsgfQotCXwgYXJ0aCAnKicgYXJ0aAkJCXsgJCQgPSBnZW5fYXJ0aChjc3RhdGUsIEJQRl9NVUwsICQxLCAkMyk7IH0KLQl8IGFydGggJy8nIGFydGgJCQl7ICQkID0gZ2VuX2FydGgoY3N0YXRlLCBCUEZfRElWLCAkMSwgJDMpOyB9Ci0JfCBhcnRoICclJyBhcnRoCQkJeyAkJCA9IGdlbl9hcnRoKGNzdGF0ZSwgQlBGX01PRCwgJDEsICQzKTsgfQotCXwgYXJ0aCAnJicgYXJ0aAkJCXsgJCQgPSBnZW5fYXJ0aChjc3RhdGUsIEJQRl9BTkQsICQxLCAkMyk7IH0KLQl8IGFydGggJ3wnIGFydGgJCQl7ICQkID0gZ2VuX2FydGgoY3N0YXRlLCBCUEZfT1IsICQxLCAkMyk7IH0KLQl8IGFydGggJ14nIGFydGgJCQl7ICQkID0gZ2VuX2FydGgoY3N0YXRlLCBCUEZfWE9SLCAkMSwgJDMpOyB9Ci0JfCBhcnRoIExTSCBhcnRoCQkJeyAkJCA9IGdlbl9hcnRoKGNzdGF0ZSwgQlBGX0xTSCwgJDEsICQzKTsgfQotCXwgYXJ0aCBSU0ggYXJ0aAkJCXsgJCQgPSBnZW5fYXJ0aChjc3RhdGUsIEJQRl9SU0gsICQxLCAkMyk7IH0KLQl8ICctJyBhcnRoICVwcmVjIFVNSU5VUwkJeyAkJCA9IGdlbl9uZWcoY3N0YXRlLCAkMik7IH0KK25hcnRoOgkgIHBuYW1lICdbJyBhcnRoICddJwkJeyBDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl9sb2FkKGNzdGF0ZSwgJDEsICQzLCAxKSkpOyB9CisJfCBwbmFtZSAnWycgYXJ0aCAnOicgTlVNICddJwl7IENIRUNLX1BUUl9WQUwoKCQkID0gZ2VuX2xvYWQoY3N0YXRlLCAkMSwgJDMsICQ1KSkpOyB9CisJfCBhcnRoICcrJyBhcnRoCQkJeyBDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl9hcnRoKGNzdGF0ZSwgQlBGX0FERCwgJDEsICQzKSkpOyB9CisJfCBhcnRoICctJyBhcnRoCQkJeyBDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl9hcnRoKGNzdGF0ZSwgQlBGX1NVQiwgJDEsICQzKSkpOyB9CisJfCBhcnRoICcqJyBhcnRoCQkJeyBDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl9hcnRoKGNzdGF0ZSwgQlBGX01VTCwgJDEsICQzKSkpOyB9CisJfCBhcnRoICcvJyBhcnRoCQkJeyBDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl9hcnRoKGNzdGF0ZSwgQlBGX0RJViwgJDEsICQzKSkpOyB9CisJfCBhcnRoICclJyBhcnRoCQkJeyBDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl9hcnRoKGNzdGF0ZSwgQlBGX01PRCwgJDEsICQzKSkpOyB9CisJfCBhcnRoICcmJyBhcnRoCQkJeyBDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl9hcnRoKGNzdGF0ZSwgQlBGX0FORCwgJDEsICQzKSkpOyB9CisJfCBhcnRoICd8JyBhcnRoCQkJeyBDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl9hcnRoKGNzdGF0ZSwgQlBGX09SLCAkMSwgJDMpKSk7IH0KKwl8IGFydGggJ14nIGFydGgJCQl7IENIRUNLX1BUUl9WQUwoKCQkID0gZ2VuX2FydGgoY3N0YXRlLCBCUEZfWE9SLCAkMSwgJDMpKSk7IH0KKwl8IGFydGggTFNIIGFydGgJCQl7IENIRUNLX1BUUl9WQUwoKCQkID0gZ2VuX2FydGgoY3N0YXRlLCBCUEZfTFNILCAkMSwgJDMpKSk7IH0KKwl8IGFydGggUlNIIGFydGgJCQl7IENIRUNLX1BUUl9WQUwoKCQkID0gZ2VuX2FydGgoY3N0YXRlLCBCUEZfUlNILCAkMSwgJDMpKSk7IH0KKwl8ICctJyBhcnRoICVwcmVjIFVNSU5VUwkJeyBDSEVDS19QVFJfVkFMKCgkJCA9IGdlbl9uZWcoY3N0YXRlLCAkMikpKTsgfQogCXwgcGFyZW4gbmFydGggJyknCQl7ICQkID0gJDI7IH0KLQl8IExFTgkJCQl7ICQkID0gZ2VuX2xvYWRsZW4oY3N0YXRlKTsgfQorCXwgTEVOCQkJCXsgQ0hFQ0tfUFRSX1ZBTCgoJCQgPSBnZW5fbG9hZGxlbihjc3RhdGUpKSk7IH0KIAk7CiBieXRlb3A6CSAgJyYnCQkJeyAkJCA9ICcmJzsgfQogCXwgJ3wnCQkJeyAkJCA9ICd8JzsgfQpAQCAtNzI3LDE1ICs3ODcsMTUgQEAKIAl8IFZDSQkJCXsgJCQuYXRtZmllbGR0eXBlID0gQV9WQ0k7IH0KIAk7CiBhdG12YWx1ZTogYXRtZmllbGR2YWx1ZQotCXwgcmVsb3AgTlVNCQl7ICQkLmIgPSBnZW5fYXRtZmllbGRfY29kZShjc3RhdGUsICQ8YmxrPjAuYXRtZmllbGR0eXBlLCAoYnBmX2ludDMyKSQyLCAoYnBmX3VfaW50MzIpJDEsIDApOyB9Ci0JfCBpcmVsb3AgTlVNCQl7ICQkLmIgPSBnZW5fYXRtZmllbGRfY29kZShjc3RhdGUsICQ8YmxrPjAuYXRtZmllbGR0eXBlLCAoYnBmX2ludDMyKSQyLCAoYnBmX3VfaW50MzIpJDEsIDEpOyB9CisJfCByZWxvcCBOVU0JCXsgQ0hFQ0tfUFRSX1ZBTCgoJCQuYiA9IGdlbl9hdG1maWVsZF9jb2RlKGNzdGF0ZSwgJDxibGs+MC5hdG1maWVsZHR5cGUsICQyLCAkMSwgMCkpKTsgfQorCXwgaXJlbG9wIE5VTQkJeyBDSEVDS19QVFJfVkFMKCgkJC5iID0gZ2VuX2F0bWZpZWxkX2NvZGUoY3N0YXRlLCAkPGJsaz4wLmF0bWZpZWxkdHlwZSwgJDIsICQxLCAxKSkpOyB9CiAJfCBwYXJlbiBhdG1saXN0dmFsdWUgJyknIHsgJCQuYiA9ICQyLmI7ICQkLnEgPSBxZXJyOyB9CiAJOwogYXRtZmllbGR2YWx1ZTogTlVNIHsKIAkkJC5hdG1maWVsZHR5cGUgPSAkPGJsaz4wLmF0bWZpZWxkdHlwZTsKIAlpZiAoJCQuYXRtZmllbGR0eXBlID09IEFfVlBJIHx8CiAJICAgICQkLmF0bWZpZWxkdHlwZSA9PSBBX1ZDSSkKLQkJJCQuYiA9IGdlbl9hdG1maWVsZF9jb2RlKGNzdGF0ZSwgJCQuYXRtZmllbGR0eXBlLCAoYnBmX2ludDMyKSAkMSwgQlBGX0pFUSwgMCk7CisJCUNIRUNLX1BUUl9WQUwoKCQkLmIgPSBnZW5fYXRtZmllbGRfY29kZShjc3RhdGUsICQkLmF0bWZpZWxkdHlwZSwgJDEsIEJQRl9KRVEsIDApKSk7CiAJfQogCTsKIGF0bWxpc3R2YWx1ZTogYXRtZmllbGR2YWx1ZQpAQCAtNzYwLDggKzgyMCw4IEBACiAJfCBIU0xTICAgICAgICAgICAgICAgICAgeyAkJC5tdHAzZmllbGR0eXBlID0gTUhfU0xTOyB9CiAJOwogbXRwM3ZhbHVlOiBtdHAzZmllbGR2YWx1ZQotCXwgcmVsb3AgTlVNCQl7ICQkLmIgPSBnZW5fbXRwM2ZpZWxkX2NvZGUoY3N0YXRlLCAkPGJsaz4wLm10cDNmaWVsZHR5cGUsICh1X2ludCkkMiwgKHVfaW50KSQxLCAwKTsgfQotCXwgaXJlbG9wIE5VTQkJeyAkJC5iID0gZ2VuX210cDNmaWVsZF9jb2RlKGNzdGF0ZSwgJDxibGs+MC5tdHAzZmllbGR0eXBlLCAodV9pbnQpJDIsICh1X2ludCkkMSwgMSk7IH0KKwl8IHJlbG9wIE5VTQkJeyBDSEVDS19QVFJfVkFMKCgkJC5iID0gZ2VuX210cDNmaWVsZF9jb2RlKGNzdGF0ZSwgJDxibGs+MC5tdHAzZmllbGR0eXBlLCAkMiwgJDEsIDApKSk7IH0KKwl8IGlyZWxvcCBOVU0JCXsgQ0hFQ0tfUFRSX1ZBTCgoJCQuYiA9IGdlbl9tdHAzZmllbGRfY29kZShjc3RhdGUsICQ8YmxrPjAubXRwM2ZpZWxkdHlwZSwgJDIsICQxLCAxKSkpOyB9CiAJfCBwYXJlbiBtdHAzbGlzdHZhbHVlICcpJyB7ICQkLmIgPSAkMi5iOyAkJC5xID0gcWVycjsgfQogCTsKIG10cDNmaWVsZHZhbHVlOiBOVU0gewpAQCAtNzc0LDcgKzgzNCw3IEBACiAJICAgICQkLm10cDNmaWVsZHR5cGUgPT0gTUhfT1BDIHx8CiAJICAgICQkLm10cDNmaWVsZHR5cGUgPT0gTUhfRFBDIHx8CiAJICAgICQkLm10cDNmaWVsZHR5cGUgPT0gTUhfU0xTKQotCQkkJC5iID0gZ2VuX210cDNmaWVsZF9jb2RlKGNzdGF0ZSwgJCQubXRwM2ZpZWxkdHlwZSwgKHVfaW50KSAkMSwgQlBGX0pFUSwgMCk7CisJCUNIRUNLX1BUUl9WQUwoKCQkLmIgPSBnZW5fbXRwM2ZpZWxkX2NvZGUoY3N0YXRlLCAkJC5tdHAzZmllbGR0eXBlLCAkMSwgQlBGX0pFUSwgMCkpKTsKIAl9CiAJOwogbXRwM2xpc3R2YWx1ZTogbXRwM2ZpZWxkdmFsdWUKZGlmZiAtLWdpdCBhL2xibC9vcy1vc2Y0LmggYi9sYmwvb3Mtb3NmNC5oCmluZGV4IDA1NWViODAuLmY0NjFlZWEgMTAwNjQ0Ci0tLSBhL2xibC9vcy1vc2Y0LmgKKysrIGIvbGJsL29zLW9zZjQuaApAQCAtMjAsNyArMjAsNyBAQAogICovCiAKIC8qIFByb3RvdHlwZXMgbWlzc2luZyBpbiBEaWdpdGFsIFVOSVggNC54ICovCi1pbnQJcGNhcF9zbnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pOwotaW50CXBjYXBfdnNucHJpbnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworaW50CXNucHJpbnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIC4uLik7CitpbnQJdnNucHJpbnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIHZhX2xpc3QpOwogaW50CXBmb3BlbihjaGFyICosIGludCk7CiAKZGlmZiAtLWdpdCBhL2xibC9vcy1vc2Y1LmggYi9sYmwvb3Mtb3NmNS5oCmluZGV4IDU0MjJmMTguLjUyYWIxNzUgMTAwNjQ0Ci0tLSBhL2xibC9vcy1vc2Y1LmgKKysrIGIvbGJsL29zLW9zZjUuaApAQCAtMjEsMTAgKzIxLDEwIEBACiAKIC8qCiAgKiBQcm90b3R5cGVzIG1pc3NpbmcgaW4gVHJ1NjQgVU5JWCA1LngKLSAqIFhYWCAtICJwY2FwX3NucHJpbnRmKCkiIGFuZCAicGNhcF92c25wcmludGYoKSIgYXJlbid0IG1pc3NpbmcsIGJ1dCB5b3UgaGF2ZSB0bworICogWFhYIC0gInNucHJpbnRmKCkiIGFuZCAidnNucHJpbnRmKCkiIGFyZW4ndCBtaXNzaW5nLCBidXQgeW91IGhhdmUgdG8KICAqICNkZWZpbmUgdGhlIHJpZ2h0IHZhbHVlIHRvIGdldCB0aGVtIGRlZmluZWQgYnkgPHN0ZGlvLmg+LgogICovCi1pbnQJcGNhcF9zbnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pOwotaW50CXBjYXBfdnNucHJpbnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworaW50CXNucHJpbnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIC4uLik7CitpbnQJdnNucHJpbnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIHZhX2xpc3QpOwogaW50CXBmb3BlbihjaGFyICosIGludCk7CiAKZGlmZiAtLWdpdCBhL2xibC9vcy1zb2xhcmlzMi5oIGIvbGJsL29zLXNvbGFyaXMyLmgKaW5kZXggYTU1NWY1ZS4uMjI5NDhiNCAxMDA2NDQKLS0tIGEvbGJsL29zLXNvbGFyaXMyLmgKKysrIGIvbGJsL29zLXNvbGFyaXMyLmgKQEAgLTIxLDQgKzIxLDQgQEAKIAogLyogUHJvdG90eXBlcyBtaXNzaW5nIGluIFN1bk9TIDUgKi8KIGNoYXIgICAgKnN0cmVycm9yKGludCk7Ci1pbnQJcGNhcF9zbnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pOworaW50CXNucHJpbnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIC4uLik7CmRpZmYgLS1naXQgYS9sYmwvb3Mtc3Vub3M0LmggYi9sYmwvb3Mtc3Vub3M0LmgKaW5kZXggNjM1M2ZiMC4uYWIwMzJlZiAxMDA2NDQKLS0tIGEvbGJsL29zLXN1bm9zNC5oCisrKyBiL2xibC9vcy1zdW5vczQuaApAQCAtMTU1LDcgKzE1NSw3IEBACiBzdHJ1Y3QJc2lndmVjOwogI2VuZGlmCiBpbnQJc2lndmVjKGludCwgc3RydWN0IHNpZ3ZlYyAqLCBzdHJ1Y3Qgc2lndmVjKik7Ci1pbnQJcGNhcF9zbnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCAuLi4pOworaW50CXNucHJpbnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIC4uLik7CiBpbnQJc29ja2V0KGludCwgaW50LCBpbnQpOwogaW50CXNvY2tldHBhaXIoaW50LCBpbnQsIGludCwgaW50ICopOwogaW50CXN5bWxpbmsoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpkaWZmIC0tZ2l0IGEvbWlzc2luZy9hc3ByaW50Zi5jIGIvbWlzc2luZy9hc3ByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYTU1ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9taXNzaW5nL2FzcHJpbnRmLmMKQEAgLTAsMCArMSwxMDEgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaW5jbHVkZSAicG9ydGFiaWxpdHkuaCIKKworLyoKKyAqIHZhc3ByaW50ZigpIGFuZCBhc3ByaW50ZigpIGZvciBwbGF0Zm9ybXMgd2l0aCBhIEM5OS1jb21wbGlhbnQKKyAqIHNucHJpbnRmKCkgLSBzbyB0aGF0LCBpZiB5b3UgZm9ybWF0IGludG8gYSAxLWJ5dGUgYnVmZmVyLCBpdAorICogd2lsbCByZXR1cm4gaG93IG1hbnkgY2hhcmFjdGVycyBpdCB3b3VsZCBoYXZlIHByb2R1Y2VkIGhhZAorICogaXQgYmVlbiBnaXZlbiBhbiBpbmZpbml0ZS1zaXplZCBidWZmZXIuCisgKi8KK2ludAorcGNhcF92YXNwcmludGYoY2hhciAqKnN0cnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQoreworCWNoYXIgYnVmOworCWludCBsZW47CisJc2l6ZV90IHN0cl9zaXplOworCWNoYXIgKnN0cjsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBYWFggLSB0aGUgQzk5IHN0YW5kYXJkIHNheXMsIGluIHNlY3Rpb24gNy4xOS42LjUgIlRoZXMKKwkgKiBucHJpbnRmIGZ1bmN0aW9uIjoKKwkgKgorCSAqICAgIFRoZSBzbnByaW50ZiBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGZwcmludGYsIGV4Y2VwdCB0aGF0CisJICogICAgdGhlIG91dHB1dCBpcyB3cml0dGVuIGludG8gYW4gYXJyYXkgKHNwZWNpZmllZCBieSBhcmd1bWVudCBzKQorCSAqICAgIHJhdGhlciB0aGFuIHRvIGEgc3RyZWFtLiAgSWYgbiBpcyB6ZXJvLCBub3RoaW5nIGlzIHdyaXR0ZW4sCisJICogICAgYW5kIHMgbWF5IGJlIGEgbnVsbCBwb2ludGVyLiAgT3RoZXJ3aXNlLCBvdXRwdXQgY2hhcmFjdGVycworCSAqICAgIGJleW9uZCB0aGUgbi0xc3QgYXJlIGRpc2NhcmRlZCByYXRoZXIgdGhhbiBiZWluZyB3cml0dGVuCisJICogICAgdG8gdGhlIGFycmF5LCBhbmQgYSBudWxsIGNoYXJhY3RlciBpcyB3cml0dGVuIGF0IHRoZSBlbmQKKwkgKiAgICBvZiB0aGUgY2hhcmFjdGVycyBhY3R1YWxseSB3cml0dGVuIGludG8gdGhlIGFycmF5LgorCSAqCisJICogICAgICAgIC4uLgorCSAqCisJICogICAgVGhlIHNucHJpbnRmIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQKKwkgKiAgICB3b3VsZCBoYXZlIGJlZW4gd3JpdHRlbiBoYWQgbiBiZWVuIHN1ZmZpY2llbnRseSBsYXJnZSwgbm90CisJICogICAgY291bnRpbmcgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyLCBvciBhIG5lZ2F0aXZlIHZhbHVlCisJICogICAgaWYgYW4gZW5jb2RpbmcgZXJyb3Igb2NjdXJyZWQuIFRodXMsIHRoZSBudWxsLXRlcm1pbmF0ZWQKKwkgKiAgICBvdXRwdXQgaGFzIGJlZW4gY29tcGxldGVseSB3cml0dGVuIGlmIGFuZCBvbmx5IGlmIHRoZSByZXR1cm5lZAorCSAqICAgIHZhbHVlIGlzIG5vbm5lZ2F0aXZlIGFuZCBsZXNzIHRoYW4gbi4KKwkgKgorCSAqIFRoYXQgZG9lc24ndCBtYWtlIGl0IGVudGlyZWx5IGNsZWFyIHdoZXRoZXIsIGlmIGEgbnVsbCBidWZmZXIKKwkgKiBwb2ludGVyIGFuZCBhIHplcm8gY291bnQgYXJlIHBhc3NlZCwgaXQgd2lsbCByZXR1cm4gdGhlIG51bWJlcgorCSAqIG9mIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gd3JpdHRlbiBoYWQgYSBidWZmZXIgYmVlbgorCSAqIHBhc3NlZC4KKwkgKgorCSAqIEFuZCwgZXZlbiBpZiBDOTkgKmRvZXMqLCBpbiBmYWN0LCBzYXkgaXQgaGFzIHRvIHdvcmssIGl0CisJICogZG9lc24ndCB3b3JrIGluIFNvbGFyaXMgOCwgZm9yIGV4YW1wbGUgLSBpdCByZXR1cm5zIC0xIGZvcgorCSAqIE5VTEwvMCwgYnV0IHJldHVybnMgdGhlIGNvcnJlY3QgY2hhcmFjdGVyIGNvdW50IGZvciBhIDEtYnl0ZQorCSAqIGJ1ZmZlci4KKwkgKgorCSAqIFNvIHdlIHBhc3MgYSBvbmUtY2hhcmFjdGVyIHBvaW50ZXIgaW4gb3JkZXIgdG8gZmluZCBvdXQgaG93CisJICogbWFueSBjaGFyYWN0ZXJzIHRoaXMgZm9ybWF0IGFuZCB0aG9zZSBhcmd1bWVudHMgd2lsbCBuZWVkCisJICogd2l0aG91dCBhY3R1YWxseSBnZW5lcmF0aW5nIGFueSBtb3JlIG9mIHRob3NlIGNoYXJhY3RlcnMKKwkgKiB0aGFuIHdlIG5lZWQuCisJICoKKwkgKiAoVGhlIGZhY3QgdGhhdCBpdCBtaWdodCBoYXBwZW4gdG8gd29yayB3aXRoIEdOVSBsaWJjIG9yIHdpdGgKKwkgKiB2YXJpb3VzIEJTRCBsaWJjcyBpcyBjb21wbGV0ZWx5IHVuaW50ZXJlc3RpbmcsIGFzIHRob3NlIHRlbmQKKwkgKiB0byBoYXZlIGFzcHJpbnRmKCkgYWxyZWFkeSBhbmQgdGh1cyBkb24ndCBldmVuICpuZWVkKiB0aGlzCisJICogY29kZTsgdGhpcyBpcyBmb3IgdXNlIGluIHRob3NlIFVOKlhlcyB0aGF0ICpkb24ndCogaGF2ZQorCSAqIGFzcHJpbnRmKCkuKQorCSAqLworCWxlbiA9IHZzbnByaW50ZigmYnVmLCBzaXplb2YgYnVmLCBmb3JtYXQsIGFyZ3MpOworCWlmIChsZW4gPT0gLTEpIHsKKwkJKnN0cnAgPSBOVUxMOworCQlyZXR1cm4gKC0xKTsKKwl9CisJc3RyX3NpemUgPSBsZW4gKyAxOworCXN0ciA9IG1hbGxvYyhzdHJfc2l6ZSk7CisJaWYgKHN0ciA9PSBOVUxMKSB7CisJCSpzdHJwID0gTlVMTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCXJldCA9IHZzbnByaW50ZihzdHIsIHN0cl9zaXplLCBmb3JtYXQsIGFyZ3MpOworCWlmIChyZXQgPT0gLTEpIHsKKwkJZnJlZShzdHIpOworCQkqc3RycCA9IE5VTEw7CisJCXJldHVybiAoLTEpOworCX0KKwkqc3RycCA9IHN0cjsKKwkvKgorCSAqIHZzbnByaW50ZigpIHNob3VsZG4ndCB0cnVuY2F0ZSB0aGUgc3RyaW5nLCBhcyB3ZSBoYXZlCisJICogYWxsb2NhdGVkIGEgYnVmZmVyIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBzdHJpbmcsIHNvIGl0cworCSAqIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4uCisJICovCisJcmV0dXJuIChyZXQpOworfQorCitpbnQKK3BjYXBfYXNwcmludGYoY2hhciAqKnN0cnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwlpbnQgcmV0OworCisJdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKwlyZXQgPSBwY2FwX3Zhc3ByaW50ZihzdHJwLCBmb3JtYXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gKHJldCk7Cit9CisKZGlmZiAtLWdpdCBhL21pc3NpbmcvZ2V0b3B0LmMgYi9taXNzaW5nL2dldG9wdC5jCmluZGV4IDdjODk3YzYuLmM1MzU3NzYgMTAwNjQ0Ci0tLSBhL21pc3NpbmcvZ2V0b3B0LmMKKysrIGIvbWlzc2luZy9nZXRvcHQuYwpAQCAtODAsOSArODAsMTggQEAKIAkJCXBsYWNlID0gRU1TRzsKIAkJCXJldHVybiAoLTEpOwogCQl9Ci0JfQkJCQkJLyogb3B0aW9uIGxldHRlciBva2F5PyAqLwotCWlmICgob3B0b3B0ID0gKGludCkqcGxhY2UrKykgPT0gKGludCknOicgfHwKLQkgICAgIShvbGkgPSBzdHJjaHIob3N0ciwgb3B0b3B0KSkpIHsKKwl9CisJb3B0b3B0ID0gKGludCkqcGxhY2UrKzsKKwlpZiAob3B0b3B0ID09IChpbnQpJzonKSB7CQkvKiBvcHRpb24gbGV0dGVyIG9rYXk/ICovCisJCWlmICghKnBsYWNlKQorCQkJKytvcHRpbmQ7CisJCWlmIChvcHRlcnIgJiYgKm9zdHIgIT0gJzonKQorCQkJKHZvaWQpZnByaW50ZihzdGRlcnIsCisJCQkgICAgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIiwgX19wcm9nbmFtZSwgb3B0b3B0KTsKKwkJcmV0dXJuIChCQURDSCk7CisJfQorCW9saSA9IHN0cmNocihvc3RyLCBvcHRvcHQpOworCWlmICghb2xpKSB7CiAJCS8qCiAJCSAqIGlmIHRoZSB1c2VyIGRpZG4ndCBzcGVjaWZ5ICctJyBhcyBhbiBvcHRpb24sCiAJCSAqIGFzc3VtZSBpdCBtZWFucyAtMS4KQEAgLTExNCw3ICsxMjMsNyBAQAogCQkJCSAgICBfX3Byb2duYW1lLCBvcHRvcHQpOwogCQkJcmV0dXJuIChCQURDSCk7CiAJCX0KLQkgCWVsc2UJCQkJLyogd2hpdGUgc3BhY2UgKi8KKwkJZWxzZQkJCQkvKiB3aGl0ZSBzcGFjZSAqLwogCQkJb3B0YXJnID0gbmFyZ3Zbb3B0aW5kXTsKIAkJcGxhY2UgPSBFTVNHOwogCQkrK29wdGluZDsKZGlmZiAtLWdpdCBhL21pc3Npbmcvc25wcmludGYuYyBiL21pc3Npbmcvc25wcmludGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTlmMGJkZi4uMDAwMDAwMAotLS0gYS9taXNzaW5nL3NucHJpbnRmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5NS0xOTk5IEt1bmdsaWdhIFRla25pc2thIEj2Z3Nrb2xhbgotICogKFJveWFsIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBTdG9ja2hvbG0sIFN3ZWRlbikuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgSW5zdGl0dXRlIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBJTlNUSVRVVEUgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBJTlNUSVRVVEUgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxwY2FwLWludC5oPgotCi1lbnVtIGZvcm1hdF9mbGFncyB7Ci0gICAgbWludXNfZmxhZyAgICAgPSAgMSwKLSAgICBwbHVzX2ZsYWcgICAgICA9ICAyLAotICAgIHNwYWNlX2ZsYWcgICAgID0gIDQsCi0gICAgYWx0ZXJuYXRlX2ZsYWcgPSAgOCwKLSAgICB6ZXJvX2ZsYWcgICAgICA9IDE2Ci19OwotCi0vKgotICogQ29tbW9uIHN0YXRlCi0gKi8KLQotc3RydWN0IHN0YXRlIHsKLSAgdW5zaWduZWQgY2hhciAqc3RyOwotICB1bnNpZ25lZCBjaGFyICpzOwotICB1bnNpZ25lZCBjaGFyICp0aGVlbmQ7Ci0gIHNpemVfdCBzejsKLSAgc2l6ZV90IG1heF9zejsKLSAgaW50ICgqYXBwZW5kX2NoYXIpKHN0cnVjdCBzdGF0ZSAqLCB1bnNpZ25lZCBjaGFyKTsKLSAgaW50ICgqcmVzZXJ2ZSkoc3RydWN0IHN0YXRlICosIHNpemVfdCk7Ci0gIC8qIFhYWCAtIG1ldGhvZHMgKi8KLX07Ci0KLSNpZm5kZWYgSEFWRV9WU05QUklOVEYKLXN0YXRpYyBpbnQKLXNuX3Jlc2VydmUgKHN0cnVjdCBzdGF0ZSAqc3RhdGUsIHNpemVfdCBuKQotewotICByZXR1cm4gc3RhdGUtPnMgKyBuID4gc3RhdGUtPnRoZWVuZDsKLX0KLQotc3RhdGljIGludAotc25fYXBwZW5kX2NoYXIgKHN0cnVjdCBzdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgYykKLXsKLSAgaWYgKHNuX3Jlc2VydmUgKHN0YXRlLCAxKSkgewotICAgIHJldHVybiAxOwotICB9IGVsc2UgewotICAgICpzdGF0ZS0+cysrID0gYzsKLSAgICByZXR1cm4gMDsKLSAgfQotfQotI2VuZGlmCi0KLSNpZiAwCi1zdGF0aWMgaW50Ci1hc19yZXNlcnZlIChzdHJ1Y3Qgc3RhdGUgKnN0YXRlLCBzaXplX3QgbikKLXsKLSAgaWYgKHN0YXRlLT5zICsgbiA+IHN0YXRlLT50aGVlbmQpIHsKLSAgICBpbnQgb2ZmID0gc3RhdGUtPnMgLSBzdGF0ZS0+c3RyOwotICAgIHVuc2lnbmVkIGNoYXIgKnRtcDsKLQotICAgIGlmIChzdGF0ZS0+bWF4X3N6ICYmIHN0YXRlLT5zeiA+PSBzdGF0ZS0+bWF4X3N6KQotICAgICAgcmV0dXJuIDE7Ci0KLSAgICBzdGF0ZS0+c3ogPSBtYXgoc3RhdGUtPnN6ICogMiwgc3RhdGUtPnN6ICsgbik7Ci0gICAgaWYgKHN0YXRlLT5tYXhfc3opCi0gICAgICBzdGF0ZS0+c3ogPSBtaW4oc3RhdGUtPnN6LCBzdGF0ZS0+bWF4X3N6KTsKLSAgICB0bXAgPSByZWFsbG9jIChzdGF0ZS0+c3RyLCBzdGF0ZS0+c3opOwotICAgIGlmICh0bXAgPT0gTlVMTCkKLSAgICAgIHJldHVybiAxOwotICAgIHN0YXRlLT5zdHIgPSB0bXA7Ci0gICAgc3RhdGUtPnMgPSBzdGF0ZS0+c3RyICsgb2ZmOwotICAgIHN0YXRlLT50aGVlbmQgPSBzdGF0ZS0+c3RyICsgc3RhdGUtPnN6IC0gMTsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotYXNfYXBwZW5kX2NoYXIgKHN0cnVjdCBzdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgYykKLXsKLSAgaWYoYXNfcmVzZXJ2ZSAoc3RhdGUsIDEpKQotICAgIHJldHVybiAxOwotICBlbHNlIHsKLSAgICAqc3RhdGUtPnMrKyA9IGM7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50Ci1hcHBlbmRfbnVtYmVyKHN0cnVjdCBzdGF0ZSAqc3RhdGUsCi0JICAgICAgdW5zaWduZWQgbG9uZyBudW0sIHVuc2lnbmVkIGJhc2UsIGNoYXIgKnJlcCwKLQkgICAgICBpbnQgd2lkdGgsIGludCBwcmVjLCBpbnQgZmxhZ3MsIGludCBtaW51c3ApCi17Ci0gIGludCBsZW4gPSAwOwotICBpbnQgaTsKLQotICAvKiBnaXZlbiBwcmVjaXNpb24sIGlnbm9yZSB6ZXJvIGZsYWcgKi8KLSAgaWYocHJlYyAhPSAtMSkKLSAgICBmbGFncyAmPSB+emVyb19mbGFnOwotICBlbHNlCi0gICAgcHJlYyA9IDE7Ci0gIC8qIHplcm8gdmFsdWUgd2l0aCB6ZXJvIHByZWNpc2lvbiAtPiAiIiAqLwotICBpZihwcmVjID09IDAgJiYgbnVtID09IDApCi0gICAgcmV0dXJuIDA7Ci0gIGRvewotICAgIGlmKCgqc3RhdGUtPmFwcGVuZF9jaGFyKShzdGF0ZSwgcmVwW251bSAlIGJhc2VdKSkKLSAgICAgIHJldHVybiAxOwotICAgIGxlbisrOwotICAgIG51bSAvPSBiYXNlOwotICB9d2hpbGUobnVtKTsKLSAgcHJlYyAtPSBsZW47Ci0gIC8qIHBhZCB3aXRoIHByZWMgemVyb3MgKi8KLSAgd2hpbGUocHJlYy0tID4gMCl7Ci0gICAgaWYoKCpzdGF0ZS0+YXBwZW5kX2NoYXIpKHN0YXRlLCAnMCcpKQotICAgICAgcmV0dXJuIDE7Ci0gICAgbGVuKys7Ci0gIH0KLSAgLyogYWRkIGxlbmd0aCBvZiBhbHRlcm5hdGUgcHJlZml4IChhZGRlZCBsYXRlcikgdG8gbGVuICovCi0gIGlmKGZsYWdzICYgYWx0ZXJuYXRlX2ZsYWcgJiYgKGJhc2UgPT0gMTYgfHwgYmFzZSA9PSA4KSkKLSAgICBsZW4gKz0gYmFzZSAvIDg7Ci0gIC8qIHBhZCB3aXRoIHplcm9zICovCi0gIGlmKGZsYWdzICYgemVyb19mbGFnKXsKLSAgICB3aWR0aCAtPSBsZW47Ci0gICAgaWYobWludXNwIHx8IChmbGFncyAmIHNwYWNlX2ZsYWcpIHx8IChmbGFncyAmIHBsdXNfZmxhZykpCi0gICAgICB3aWR0aC0tOwotICAgIHdoaWxlKHdpZHRoLS0gPiAwKXsKLSAgICAgIGlmKCgqc3RhdGUtPmFwcGVuZF9jaGFyKShzdGF0ZSwgJzAnKSkKLQlyZXR1cm4gMTsKLSAgICAgIGxlbisrOwotICAgIH0KLSAgfQotICAvKiBhZGQgYWx0ZXJuYXRlIHByZWZpeCAqLwotICBpZihmbGFncyAmIGFsdGVybmF0ZV9mbGFnICYmIChiYXNlID09IDE2IHx8IGJhc2UgPT0gOCkpewotICAgIGlmKGJhc2UgPT0gMTYpCi0gICAgICBpZigoKnN0YXRlLT5hcHBlbmRfY2hhcikoc3RhdGUsIHJlcFsxMF0gKyAyMykpIC8qIFhYWCAqLwotCXJldHVybiAxOwotICAgIGlmKCgqc3RhdGUtPmFwcGVuZF9jaGFyKShzdGF0ZSwgJzAnKSkKLSAgICAgIHJldHVybiAxOwotICB9Ci0gIC8qIGFkZCBzaWduICovCi0gIGlmKG1pbnVzcCl7Ci0gICAgaWYoKCpzdGF0ZS0+YXBwZW5kX2NoYXIpKHN0YXRlLCAnLScpKQotICAgICAgcmV0dXJuIDE7Ci0gICAgbGVuKys7Ci0gIH0gZWxzZSBpZihmbGFncyAmIHBsdXNfZmxhZykgewotICAgIGlmKCgqc3RhdGUtPmFwcGVuZF9jaGFyKShzdGF0ZSwgJysnKSkKLSAgICAgIHJldHVybiAxOwotICAgIGxlbisrOwotICB9IGVsc2UgaWYoZmxhZ3MgJiBzcGFjZV9mbGFnKSB7Ci0gICAgaWYoKCpzdGF0ZS0+YXBwZW5kX2NoYXIpKHN0YXRlLCAnICcpKQotICAgICAgcmV0dXJuIDE7Ci0gICAgbGVuKys7Ci0gIH0KLSAgaWYoZmxhZ3MgJiBtaW51c19mbGFnKQotICAgIC8qIHN3YXAgYmVmb3JlIHBhZGRpbmcgd2l0aCBzcGFjZXMgKi8KLSAgICBmb3IoaSA9IDA7IGkgPCBsZW4gLyAyOyBpKyspewotICAgICAgY2hhciBjID0gc3RhdGUtPnNbLWktMV07Ci0gICAgICBzdGF0ZS0+c1staS0xXSA9IHN0YXRlLT5zWy1sZW4raV07Ci0gICAgICBzdGF0ZS0+c1stbGVuK2ldID0gYzsKLSAgICB9Ci0gIHdpZHRoIC09IGxlbjsKLSAgd2hpbGUod2lkdGgtLSA+IDApewotICAgIGlmKCgqc3RhdGUtPmFwcGVuZF9jaGFyKShzdGF0ZSwgICcgJykpCi0gICAgICByZXR1cm4gMTsKLSAgICBsZW4rKzsKLSAgfQotICBpZighKGZsYWdzICYgbWludXNfZmxhZykpCi0gICAgLyogc3dhcCBhZnRlciBwYWRkaW5nIHdpdGggc3BhY2VzICovCi0gICAgZm9yKGkgPSAwOyBpIDwgbGVuIC8gMjsgaSsrKXsKLSAgICAgIGNoYXIgYyA9IHN0YXRlLT5zWy1pLTFdOwotICAgICAgc3RhdGUtPnNbLWktMV0gPSBzdGF0ZS0+c1stbGVuK2ldOwotICAgICAgc3RhdGUtPnNbLWxlbitpXSA9IGM7Ci0gICAgfQotCi0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1hcHBlbmRfc3RyaW5nIChzdHJ1Y3Qgc3RhdGUgKnN0YXRlLAotCSAgICAgICB1bnNpZ25lZCBjaGFyICphcmcsCi0JICAgICAgIGludCB3aWR0aCwKLQkgICAgICAgaW50IHByZWMsCi0JICAgICAgIGludCBmbGFncykKLXsKLSAgaWYocHJlYyAhPSAtMSkKLSAgICB3aWR0aCAtPSBwcmVjOwotICBlbHNlCi0gICAgd2lkdGggLT0gc3RybGVuKChjaGFyICopYXJnKTsKLSAgaWYoIShmbGFncyAmIG1pbnVzX2ZsYWcpKQotICAgIHdoaWxlKHdpZHRoLS0gPiAwKQotICAgICAgaWYoKCpzdGF0ZS0+YXBwZW5kX2NoYXIpIChzdGF0ZSwgJyAnKSkKLQlyZXR1cm4gMTsKLSAgaWYgKHByZWMgIT0gLTEpIHsKLSAgICB3aGlsZSAoKmFyZyAmJiBwcmVjLS0pCi0gICAgICBpZiAoKCpzdGF0ZS0+YXBwZW5kX2NoYXIpIChzdGF0ZSwgKmFyZysrKSkKLQlyZXR1cm4gMTsKLSAgfSBlbHNlIHsKLSAgICB3aGlsZSAoKmFyZykKLSAgICAgIGlmICgoKnN0YXRlLT5hcHBlbmRfY2hhcikgKHN0YXRlLCAqYXJnKyspKQotCXJldHVybiAxOwotICB9Ci0gIGlmKGZsYWdzICYgbWludXNfZmxhZykKLSAgICB3aGlsZSh3aWR0aC0tID4gMCkKLSAgICAgIGlmKCgqc3RhdGUtPmFwcGVuZF9jaGFyKSAoc3RhdGUsICcgJykpCi0JcmV0dXJuIDE7Ci0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1hcHBlbmRfY2hhcihzdHJ1Y3Qgc3RhdGUgKnN0YXRlLAotCSAgICB1bnNpZ25lZCBjaGFyIGFyZywKLQkgICAgaW50IHdpZHRoLAotCSAgICBpbnQgZmxhZ3MpCi17Ci0gIHdoaWxlKCEoZmxhZ3MgJiBtaW51c19mbGFnKSAmJiAtLXdpZHRoID4gMCkKLSAgICBpZigoKnN0YXRlLT5hcHBlbmRfY2hhcikgKHN0YXRlLCAnICcpKQotICAgICAgcmV0dXJuIDE7Ci0KLSAgaWYoKCpzdGF0ZS0+YXBwZW5kX2NoYXIpIChzdGF0ZSwgYXJnKSkKLSAgICByZXR1cm4gMTsKLSAgd2hpbGUoKGZsYWdzICYgbWludXNfZmxhZykgJiYgLS13aWR0aCA+IDApCi0gICAgaWYoKCpzdGF0ZS0+YXBwZW5kX2NoYXIpIChzdGF0ZSwgJyAnKSkKLSAgICAgIHJldHVybiAxOwotCi0gIHJldHVybiAwOwotfQotCi0vKgotICogVGhpcyBjYW4ndCBiZSBtYWRlIGludG8gYSBmdW5jdGlvbi4uLgotICovCi0KLSNkZWZpbmUgUEFSU0VfSU5UX0ZPUk1BVChyZXMsIGFyZywgdW5zaWcpIFwKLWlmIChsb25nX2ZsYWcpIFwKLSAgICAgcmVzID0gKHVuc2lnIGxvbmcpdmFfYXJnKGFyZywgdW5zaWcgbG9uZyk7IFwKLWVsc2UgaWYgKHNob3J0X2ZsYWcpIFwKLSAgICAgcmVzID0gKHVuc2lnIHNob3J0KXZhX2FyZyhhcmcsIHVuc2lnIGludCk7IFwKLWVsc2UgXAotICAgICByZXMgPSAodW5zaWcgaW50KXZhX2FyZyhhcmcsIHVuc2lnIGludCkKLQotLyoKLSAqIHp5eHByaW50ZiAtIHJldHVybiAwIG9yIC0xCi0gKi8KLQotc3RhdGljIGludAoteHl6cHJpbnRmIChzdHJ1Y3Qgc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICpjaGFyX2Zvcm1hdCwgdmFfbGlzdCBhcCkKLXsKLSAgY29uc3QgdW5zaWduZWQgY2hhciAqZm9ybWF0ID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiljaGFyX2Zvcm1hdDsKLSAgdW5zaWduZWQgY2hhciBjOwotCi0gIHdoaWxlKChjID0gKmZvcm1hdCsrKSkgewotICAgIGlmIChjID09ICclJykgewotICAgICAgaW50IGZsYWdzICAgICAgPSAwOwotICAgICAgaW50IHdpZHRoICAgICAgPSAwOwotICAgICAgaW50IHByZWMgICAgICAgPSAtMTsKLSAgICAgIGludCBsb25nX2ZsYWcgID0gMDsKLSAgICAgIGludCBzaG9ydF9mbGFnID0gMDsKLQotICAgICAgLyogZmxhZ3MgKi8KLSAgICAgIHdoaWxlKChjID0gKmZvcm1hdCsrKSl7Ci0JaWYoYyA9PSAnLScpCi0JICBmbGFncyB8PSBtaW51c19mbGFnOwotCWVsc2UgaWYoYyA9PSAnKycpCi0JICBmbGFncyB8PSBwbHVzX2ZsYWc7Ci0JZWxzZSBpZihjID09ICcgJykKLQkgIGZsYWdzIHw9IHNwYWNlX2ZsYWc7Ci0JZWxzZSBpZihjID09ICcjJykKLQkgIGZsYWdzIHw9IGFsdGVybmF0ZV9mbGFnOwotCWVsc2UgaWYoYyA9PSAnMCcpCi0JICBmbGFncyB8PSB6ZXJvX2ZsYWc7Ci0JZWxzZQotCSAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGlmKChmbGFncyAmIHNwYWNlX2ZsYWcpICYmIChmbGFncyAmIHBsdXNfZmxhZykpCi0JZmxhZ3MgXj0gc3BhY2VfZmxhZzsKLQotICAgICAgaWYoKGZsYWdzICYgbWludXNfZmxhZykgJiYgKGZsYWdzICYgemVyb19mbGFnKSkKLQlmbGFncyBePSB6ZXJvX2ZsYWc7Ci0KLSAgICAgIC8qIHdpZHRoICovCi0gICAgICBpZiAoaXNkaWdpdChjKSkKLQlkbyB7Ci0JICB3aWR0aCA9IHdpZHRoICogMTAgKyBjIC0gJzAnOwotCSAgYyA9ICpmb3JtYXQrKzsKLQl9IHdoaWxlKGlzZGlnaXQoYykpOwotICAgICAgZWxzZSBpZihjID09ICcqJykgewotCXdpZHRoID0gdmFfYXJnKGFwLCBpbnQpOwotCWMgPSAqZm9ybWF0Kys7Ci0gICAgICB9Ci0KLSAgICAgIC8qIHByZWNpc2lvbiAqLwotICAgICAgaWYgKGMgPT0gJy4nKSB7Ci0JcHJlYyA9IDA7Ci0JYyA9ICpmb3JtYXQrKzsKLQlpZiAoaXNkaWdpdChjKSkKLQkgIGRvIHsKLQkgICAgcHJlYyA9IHByZWMgKiAxMCArIGMgLSAnMCc7Ci0JICAgIGMgPSAqZm9ybWF0Kys7Ci0JICB9IHdoaWxlKGlzZGlnaXQoYykpOwotCWVsc2UgaWYgKGMgPT0gJyonKSB7Ci0JICBwcmVjID0gdmFfYXJnKGFwLCBpbnQpOwotCSAgYyA9ICpmb3JtYXQrKzsKLQl9Ci0gICAgICB9Ci0KLSAgICAgIC8qIHNpemUgKi8KLQotICAgICAgaWYgKGMgPT0gJ2gnKSB7Ci0Jc2hvcnRfZmxhZyA9IDE7Ci0JYyA9ICpmb3JtYXQrKzsKLSAgICAgIH0gZWxzZSBpZiAoYyA9PSAnbCcpIHsKLQlsb25nX2ZsYWcgPSAxOwotCWMgPSAqZm9ybWF0Kys7Ci0gICAgICB9Ci0KLSAgICAgIHN3aXRjaCAoYykgewotICAgICAgY2FzZSAnYycgOgotCWlmKGFwcGVuZF9jaGFyKHN0YXRlLCB2YV9hcmcoYXAsIGludCksIHdpZHRoLCBmbGFncykpCi0JICByZXR1cm4gLTE7Ci0JYnJlYWs7Ci0gICAgICBjYXNlICdzJyA6Ci0JaWYgKGFwcGVuZF9zdHJpbmcoc3RhdGUsCi0JCQkgIHZhX2FyZyhhcCwgdW5zaWduZWQgY2hhciopLAotCQkJICB3aWR0aCwKLQkJCSAgcHJlYywKLQkJCSAgZmxhZ3MpKQotCSAgcmV0dXJuIC0xOwotCWJyZWFrOwotICAgICAgY2FzZSAnZCcgOgotICAgICAgY2FzZSAnaScgOiB7Ci0JbG9uZyBhcmc7Ci0JdW5zaWduZWQgbG9uZyBudW07Ci0JaW50IG1pbnVzcCA9IDA7Ci0KLQlQQVJTRV9JTlRfRk9STUFUKGFyZywgYXAsIHNpZ25lZCk7Ci0KLQlpZiAoYXJnIDwgMCkgewotCSAgbWludXNwID0gMTsKLQkgIG51bSA9IC1hcmc7Ci0JfSBlbHNlCi0JICBudW0gPSBhcmc7Ci0KLQlpZiAoYXBwZW5kX251bWJlciAoc3RhdGUsIG51bSwgMTAsICIwMTIzNDU2Nzg5IiwKLQkJCSAgIHdpZHRoLCBwcmVjLCBmbGFncywgbWludXNwKSkKLQkgIHJldHVybiAtMTsKLQlicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgJ3UnIDogewotCXVuc2lnbmVkIGxvbmcgYXJnOwotCi0JUEFSU0VfSU5UX0ZPUk1BVChhcmcsIGFwLCB1bnNpZ25lZCk7Ci0KLQlpZiAoYXBwZW5kX251bWJlciAoc3RhdGUsIGFyZywgMTAsICIwMTIzNDU2Nzg5IiwKLQkJCSAgIHdpZHRoLCBwcmVjLCBmbGFncywgMCkpCi0JICByZXR1cm4gLTE7Ci0JYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlICdvJyA6IHsKLQl1bnNpZ25lZCBsb25nIGFyZzsKLQotCVBBUlNFX0lOVF9GT1JNQVQoYXJnLCBhcCwgdW5zaWduZWQpOwotCi0JaWYgKGFwcGVuZF9udW1iZXIgKHN0YXRlLCBhcmcsIDAxMCwgIjAxMjM0NTY3IiwKLQkJCSAgIHdpZHRoLCBwcmVjLCBmbGFncywgMCkpCi0JICByZXR1cm4gLTE7Ci0JYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlICd4JyA6IHsKLQl1bnNpZ25lZCBsb25nIGFyZzsKLQotCVBBUlNFX0lOVF9GT1JNQVQoYXJnLCBhcCwgdW5zaWduZWQpOwotCi0JaWYgKGFwcGVuZF9udW1iZXIgKHN0YXRlLCBhcmcsIDB4MTAsICIwMTIzNDU2Nzg5YWJjZGVmIiwKLQkJCSAgIHdpZHRoLCBwcmVjLCBmbGFncywgMCkpCi0JICByZXR1cm4gLTE7Ci0JYnJlYWs7Ci0gICAgICB9Ci0gICAgICBjYXNlICdYJyA6ewotCXVuc2lnbmVkIGxvbmcgYXJnOwotCi0JUEFSU0VfSU5UX0ZPUk1BVChhcmcsIGFwLCB1bnNpZ25lZCk7Ci0KLQlpZiAoYXBwZW5kX251bWJlciAoc3RhdGUsIGFyZywgMHgxMCwgIjAxMjM0NTY3ODlBQkNERUYiLAotCQkJICAgd2lkdGgsIHByZWMsIGZsYWdzLCAwKSkKLQkgIHJldHVybiAtMTsKLQlicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgJ3AnIDogewotCXVuc2lnbmVkIGxvbmcgYXJnID0gKHVuc2lnbmVkIGxvbmcpdmFfYXJnKGFwLCB2b2lkKik7Ci0KLQlpZiAoYXBwZW5kX251bWJlciAoc3RhdGUsIGFyZywgMHgxMCwgIjAxMjM0NTY3ODlBQkNERUYiLAotCQkJICAgd2lkdGgsIHByZWMsIGZsYWdzLCAwKSkKLQkgIHJldHVybiAtMTsKLQlicmVhazsKLSAgICAgIH0KLSAgICAgIGNhc2UgJ24nIDogewotCWludCAqYXJnID0gdmFfYXJnKGFwLCBpbnQqKTsKLQkqYXJnID0gc3RhdGUtPnMgLSBzdGF0ZS0+c3RyOwotCWJyZWFrOwotICAgICAgfQotICAgICAgY2FzZSAnXDAnIDoKLQkgIC0tZm9ybWF0OwotCSAgLyogRkFMTFRIUk9VR0ggKi8KLSAgICAgIGNhc2UgJyUnIDoKLQlpZiAoKCpzdGF0ZS0+YXBwZW5kX2NoYXIpKHN0YXRlLCBjKSkKLQkgIHJldHVybiAtMTsKLQlicmVhazsKLSAgICAgIGRlZmF1bHQgOgotCWlmICggICAoKnN0YXRlLT5hcHBlbmRfY2hhcikoc3RhdGUsICclJykKLQkgICAgfHwgKCpzdGF0ZS0+YXBwZW5kX2NoYXIpKHN0YXRlLCBjKSkKLQkgIHJldHVybiAtMTsKLQlicmVhazsKLSAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgIGlmICgoKnN0YXRlLT5hcHBlbmRfY2hhcikgKHN0YXRlLCBjKSkKLQlyZXR1cm4gLTE7Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLSNpZm5kZWYgSEFWRV9TTlBSSU5URgotaW50Ci1wY2FwX3NucHJpbnRmIChjaGFyICpzdHIsIHNpemVfdCBzeiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0gIHZhX2xpc3QgYXJnczsKLSAgaW50IHJldDsKLQotICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICByZXQgPSBwY2FwX3ZzbnByaW50ZiAoc3RyLCBzeiwgZm9ybWF0LCBhcmdzKTsKLQotI2lmZGVmIFBBUkFOT0lBCi0gIHsKLSAgICBpbnQgcmV0MjsKLSAgICBjaGFyICp0bXA7Ci0KLSAgICB0bXAgPSBtYWxsb2MgKHN6KTsKLSAgICBpZiAodG1wID09IE5VTEwpCi0gICAgICBhYm9ydCAoKTsKLQotICAgIHJldDIgPSBwY2FwX3ZzcHJpbnRmICh0bXAsIGZvcm1hdCwgYXJncyk7Ci0gICAgaWYgKHJldCAhPSByZXQyIHx8IHN0cmNtcChzdHIsIHRtcCkpCi0gICAgICBhYm9ydCAoKTsKLSAgICBmcmVlICh0bXApOwotICB9Ci0jZW5kaWYKLQotICB2YV9lbmQoYXJncyk7Ci0gIHJldHVybiByZXQ7Ci19Ci0jZW5kaWYKLQotI2lmIDAKLSNpZm5kZWYgSEFWRV9BU1BSSU5URgotaW50Ci1hc3ByaW50ZiAoY2hhciAqKnJldCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0gIHZhX2xpc3QgYXJnczsKLSAgaW50IHZhbDsKLQotICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICB2YWwgPSB2YXNwcmludGYgKHJldCwgZm9ybWF0LCBhcmdzKTsKLQotI2lmZGVmIFBBUkFOT0lBCi0gIHsKLSAgICBpbnQgcmV0MjsKLSAgICBjaGFyICp0bXA7Ci0gICAgdG1wID0gbWFsbG9jICh2YWwgKyAxKTsKLSAgICBpZiAodG1wID09IE5VTEwpCi0gICAgICBhYm9ydCAoKTsKLQotICAgIHJldDIgPSB2c3ByaW50ZiAodG1wLCBmb3JtYXQsIGFyZ3MpOwotICAgIGlmICh2YWwgIT0gcmV0MiB8fCBzdHJjbXAoKnJldCwgdG1wKSkKLSAgICAgIGFib3J0ICgpOwotICAgIGZyZWUgKHRtcCk7Ci0gIH0KLSNlbmRpZgotCi0gIHZhX2VuZChhcmdzKTsKLSAgcmV0dXJuIHZhbDsKLX0KLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfQVNOUFJJTlRGCi1pbnQKLXBjYXBfYXNucHJpbnRmIChjaGFyICoqcmV0LCBzaXplX3QgbWF4X3N6LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLSAgdmFfbGlzdCBhcmdzOwotICBpbnQgdmFsOwotCi0gIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Ci0gIHZhbCA9IHBjYXBfdmFzbnByaW50ZiAocmV0LCBtYXhfc3osIGZvcm1hdCwgYXJncyk7Ci0KLSNpZmRlZiBQQVJBTk9JQQotICB7Ci0gICAgaW50IHJldDI7Ci0gICAgY2hhciAqdG1wOwotICAgIHRtcCA9IG1hbGxvYyAodmFsICsgMSk7Ci0gICAgaWYgKHRtcCA9PSBOVUxMKQotICAgICAgYWJvcnQgKCk7Ci0KLSAgICByZXQyID0gcGNhcF92c3ByaW50ZiAodG1wLCBmb3JtYXQsIGFyZ3MpOwotICAgIGlmICh2YWwgIT0gcmV0MiB8fCBzdHJjbXAoKnJldCwgdG1wKSkKLSAgICAgIGFib3J0ICgpOwotICAgIGZyZWUgKHRtcCk7Ci0gIH0KLSNlbmRpZgotCi0gIHZhX2VuZChhcmdzKTsKLSAgcmV0dXJuIHZhbDsKLX0KLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfVkFTUFJJTlRGCi1pbnQKLXBjYXBfdmFzcHJpbnRmIChjaGFyICoqcmV0LCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKLXsKLSAgcmV0dXJuIHBjYXBfdmFzbnByaW50ZiAocmV0LCAwLCBmb3JtYXQsIGFyZ3MpOwotfQotI2VuZGlmCi0KLQotI2lmbmRlZiBIQVZFX1ZBU05QUklOVEYKLWludAotcGNhcF92YXNucHJpbnRmIChjaGFyICoqcmV0LCBzaXplX3QgbWF4X3N6LCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKLXsKLSAgaW50IHN0OwotICBzaXplX3QgbGVuOwotICBzdHJ1Y3Qgc3RhdGUgc3RhdGU7Ci0KLSAgc3RhdGUubWF4X3N6ID0gbWF4X3N6OwotICBzdGF0ZS5zeiAgICAgPSAxOwotICBzdGF0ZS5zdHIgICAgPSBtYWxsb2Moc3RhdGUuc3opOwotICBpZiAoc3RhdGUuc3RyID09IE5VTEwpIHsKLSAgICAqcmV0ID0gTlVMTDsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgc3RhdGUucyA9IHN0YXRlLnN0cjsKLSAgc3RhdGUudGhlZW5kID0gc3RhdGUucyArIHN0YXRlLnN6IC0gMTsKLSAgc3RhdGUuYXBwZW5kX2NoYXIgPSBhc19hcHBlbmRfY2hhcjsKLSAgc3RhdGUucmVzZXJ2ZSAgICAgPSBhc19yZXNlcnZlOwotCi0gIHN0ID0geHl6cHJpbnRmICgmc3RhdGUsIGZvcm1hdCwgYXJncyk7Ci0gIGlmIChzdCkgewotICAgIGZyZWUgKHN0YXRlLnN0cik7Ci0gICAgKnJldCA9IE5VTEw7Ci0gICAgcmV0dXJuIC0xOwotICB9IGVsc2UgewotICAgIGNoYXIgKnRtcDsKLQotICAgICpzdGF0ZS5zID0gJ1wwJzsKLSAgICBsZW4gPSBzdGF0ZS5zIC0gc3RhdGUuc3RyOwotICAgIHRtcCA9IHJlYWxsb2MgKHN0YXRlLnN0ciwgbGVuKzEpOwotICAgIGlmICh0bXAgPT0gTlVMTCkgewotICAgICAgZnJlZSAoc3RhdGUuc3RyKTsKLSAgICAgICpyZXQgPSBOVUxMOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICAqcmV0ID0gdG1wOwotICAgIHJldHVybiBsZW47Ci0gIH0KLX0KLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9WU05QUklOVEYKLWludAotcGNhcF92c25wcmludGYgKGNoYXIgKnN0ciwgc2l6ZV90IHN6LCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKLXsKLSAgc3RydWN0IHN0YXRlIHN0YXRlOwotICBpbnQgcmV0OwotICB1bnNpZ25lZCBjaGFyICp1c3RyID0gKHVuc2lnbmVkIGNoYXIgKilzdHI7Ci0KLSAgc3RhdGUubWF4X3N6ID0gMDsKLSAgc3RhdGUuc3ogICAgID0gc3o7Ci0gIHN0YXRlLnN0ciAgICA9IHVzdHI7Ci0gIHN0YXRlLnMgICAgICA9IHVzdHI7Ci0gIHN0YXRlLnRoZWVuZCA9IHVzdHIgKyBzeiAtIDE7Ci0gIHN0YXRlLmFwcGVuZF9jaGFyID0gc25fYXBwZW5kX2NoYXI7Ci0gIHN0YXRlLnJlc2VydmUgICAgID0gc25fcmVzZXJ2ZTsKLQotICByZXQgPSB4eXpwcmludGYgKCZzdGF0ZSwgZm9ybWF0LCBhcmdzKTsKLSAgKnN0YXRlLnMgPSAnXDAnOwotICBpZiAocmV0KQotICAgIHJldHVybiBzejsKLSAgZWxzZQotICAgIHJldHVybiBzdGF0ZS5zIC0gc3RhdGUuc3RyOwotfQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL21pc3Npbmcvc3RybGNhdC5jIGIvbWlzc2luZy9zdHJsY2F0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI3OGEzZAotLS0gL2Rldi9udWxsCisrKyBiL21pc3Npbmcvc3RybGNhdC5jCkBAIC0wLDAgKzEsNjEgQEAKKy8qCSRPcGVuQlNEOiBwY2FwX3N0cmxjYXQuYyx2IDEuMTUgMjAxNS8wMy8wMiAyMTo0MTowOCBtaWxsZXJ0IEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgsIDIwMTUgVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJwb3J0YWJpbGl0eS5oIgorCisvKgorICogQXBwZW5kcyBzcmMgdG8gc3RyaW5nIGRzdCBvZiBzaXplIGRzaXplICh1bmxpa2Ugc3RybmNhdCwgZHNpemUgaXMgdGhlCisgKiBmdWxsIHNpemUgb2YgZHN0LCBub3Qgc3BhY2UgbGVmdCkuICBBdCBtb3N0IGRzaXplLTEgY2hhcmFjdGVycworICogd2lsbCBiZSBjb3BpZWQuICBBbHdheXMgTlVMIHRlcm1pbmF0ZXMgKHVubGVzcyBkc2l6ZSA8PSBzdHJsZW4oZHN0KSkuCisgKiBSZXR1cm5zIHN0cmxlbihzcmMpICsgTUlOKGRzaXplLCBzdHJsZW4oaW5pdGlhbCBkc3QpKS4KKyAqIElmIHJldHZhbCA+PSBkc2l6ZSwgdHJ1bmNhdGlvbiBvY2N1cnJlZC4KKyAqLworc2l6ZV90CitwY2FwX3N0cmxjYXQoY2hhciAqIHJlc3RyaWN0IGRzdCwgY29uc3QgY2hhciAqIHJlc3RyaWN0IHNyYywgc2l6ZV90IGRzaXplKQoreworCWNvbnN0IGNoYXIgKm9kc3QgPSBkc3Q7CisJY29uc3QgY2hhciAqb3NyYyA9IHNyYzsKKwlzaXplX3QgbiA9IGRzaXplOworCXNpemVfdCBkbGVuOworCisJLyogRmluZCB0aGUgZW5kIG9mIGRzdCBhbmQgYWRqdXN0IGJ5dGVzIGxlZnQgYnV0IGRvbid0IGdvIHBhc3QgZW5kLiAqLworCXdoaWxlIChuLS0gIT0gMCAmJiAqZHN0ICE9ICdcMCcpCisJCWRzdCsrOworCWRsZW4gPSBkc3QgLSBvZHN0OworCW4gPSBkc2l6ZSAtIGRsZW47CisKKwlpZiAobi0tID09IDApCisJCXJldHVybihkbGVuICsgc3RybGVuKHNyYykpOworCXdoaWxlICgqc3JjICE9ICdcMCcpIHsKKwkJaWYgKG4gIT0gMCkgeworCQkJKmRzdCsrID0gKnNyYzsKKwkJCW4tLTsKKwkJfQorCQlzcmMrKzsKKwl9CisJKmRzdCA9ICdcMCc7CisKKwlyZXR1cm4oZGxlbiArIChzcmMgLSBvc3JjKSk7CS8qIGNvdW50IGRvZXMgbm90IGluY2x1ZGUgTlVMICovCit9CmRpZmYgLS1naXQgYS9taXNzaW5nL3N0cmxjcHkuYyBiL21pc3Npbmcvc3RybGNweS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NTJlMGQKLS0tIC9kZXYvbnVsbAorKysgYi9taXNzaW5nL3N0cmxjcHkuYwpAQCAtMCwwICsxLDU2IEBACisvKgkkT3BlbkJTRDogcGNhcF9zdHJsY3B5LmMsdiAxLjEyIDIwMTUvMDEvMTUgMDM6NTQ6MTIgbWlsbGVydCBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk4LCAyMDE1IFRvZGQgQy4gTWlsbGVyIDxUb2RkLk1pbGxlckBjb3VydGVzYW4uY29tPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAicG9ydGFiaWxpdHkuaCIKKworLyoKKyAqIENvcHkgc3RyaW5nIHNyYyB0byBidWZmZXIgZHN0IG9mIHNpemUgZHNpemUuICBBdCBtb3N0IGRzaXplLTEKKyAqIGNoYXJzIHdpbGwgYmUgY29waWVkLiAgQWx3YXlzIE5VTCB0ZXJtaW5hdGVzICh1bmxlc3MgZHNpemUgPT0gMCkuCisgKiBSZXR1cm5zIHN0cmxlbihzcmMpOyBpZiByZXR2YWwgPj0gZHNpemUsIHRydW5jYXRpb24gb2NjdXJyZWQuCisgKi8KK3NpemVfdAorcGNhcF9zdHJsY3B5KGNoYXIgKiByZXN0cmljdCBkc3QsIGNvbnN0IGNoYXIgKiByZXN0cmljdCBzcmMsIHNpemVfdCBkc2l6ZSkKK3sKKwljb25zdCBjaGFyICpvc3JjID0gc3JjOworCXNpemVfdCBubGVmdCA9IGRzaXplOworCisJLyogQ29weSBhcyBtYW55IGJ5dGVzIGFzIHdpbGwgZml0LiAqLworCWlmIChubGVmdCAhPSAwKSB7CisJCXdoaWxlICgtLW5sZWZ0ICE9IDApIHsKKwkJCWlmICgoKmRzdCsrID0gKnNyYysrKSA9PSAnXDAnKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJLyogTm90IGVub3VnaCByb29tIGluIGRzdCwgYWRkIE5VTCBhbmQgdHJhdmVyc2UgcmVzdCBvZiBzcmMuICovCisJaWYgKG5sZWZ0ID09IDApIHsKKwkJaWYgKGRzaXplICE9IDApCisJCQkqZHN0ID0gJ1wwJzsJCS8qIE5VTC10ZXJtaW5hdGUgZHN0ICovCisJCXdoaWxlICgqc3JjKyspCisJCQk7CisJfQorCisJcmV0dXJuKHNyYyAtIG9zcmMgLSAxKTsJLyogY291bnQgZG9lcyBub3QgaW5jbHVkZSBOVUwgKi8KK30KZGlmZiAtLWdpdCBhL21pc3Npbmcvd2luX2FzcHJpbnRmLmMgYi9taXNzaW5nL3dpbl9hc3ByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YmQxM2MKLS0tIC9kZXYvbnVsbAorKysgYi9taXNzaW5nL3dpbl9hc3ByaW50Zi5jCkBAIC0wLDAgKzEsNTEgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaW5jbHVkZSAicG9ydGFiaWxpdHkuaCIKKworaW50CitwY2FwX3Zhc3ByaW50ZihjaGFyICoqc3RycCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCit7CisJaW50IGxlbjsKKwlzaXplX3Qgc3RyX3NpemU7CisJY2hhciAqc3RyOworCWludCByZXQ7CisKKwlsZW4gPSBfdnNjcHJpbnRmKGZvcm1hdCwgYXJncyk7CisJaWYgKGxlbiA9PSAtMSkgeworCQkqc3RycCA9IE5VTEw7CisJCXJldHVybiAoLTEpOworCX0KKwlzdHJfc2l6ZSA9IGxlbiArIDE7CisJc3RyID0gbWFsbG9jKHN0cl9zaXplKTsKKwlpZiAoc3RyID09IE5VTEwpIHsKKwkJKnN0cnAgPSBOVUxMOworCQlyZXR1cm4gKC0xKTsKKwl9CisJcmV0ID0gdnNucHJpbnRmKHN0ciwgc3RyX3NpemUsIGZvcm1hdCwgYXJncyk7CisJaWYgKHJldCA9PSAtMSkgeworCQlmcmVlKHN0cik7CisJCSpzdHJwID0gTlVMTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCSpzdHJwID0gc3RyOworCS8qCisJICogdnNucHJpbnRmKCkgc2hvdWxkbid0IHRydW5jYXRlIHRoZSBzdHJpbmcsIGFzIHdlIGhhdmUKKwkgKiBhbGxvY2F0ZWQgYSBidWZmZXIgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHN0cmluZywgc28gaXRzCisJICogcmV0dXJuIHZhbHVlIHNob3VsZCBiZSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZC4KKwkgKi8KKwlyZXR1cm4gKHJldCk7Cit9CisKK2ludAorcGNhcF9hc3ByaW50ZihjaGFyICoqc3RycCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCWludCByZXQ7CisKKwl2YV9zdGFydChhcmdzLCBmb3JtYXQpOworCXJldCA9IHBjYXBfdmFzcHJpbnRmKHN0cnAsIGZvcm1hdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL21pc3Npbmcvd2luX3NucHJpbnRmLmMgYi9taXNzaW5nL3dpbl9zbnByaW50Zi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWE4ZWExLi4wMDAwMDAwCi0tLSBhL21pc3Npbmcvd2luX3NucHJpbnRmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLQotaW50Ci1wY2FwX3ZzbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBzdHJfc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IF92c25wcmludGZfcyhzdHIsIHN0cl9zaXplLCBfVFJVTkNBVEUsIGZvcm1hdCwgYXJncyk7Ci0KLQkvKgotCSAqIFhYWCAtIF92c25wcmludGYoKSBhbmQgX3NucHJpbnRmKCkgZG8gKm5vdCogZ3VhcmFudGVlCi0JICogdGhhdCBzdHIgaXMgbnVsbC10ZXJtaW5hdGVkLCBidXQgQzk5J3MgdnNucHJpbnRmKCkKLQkgKiBhbmQgc25wcmludGYoKSBkbywgYW5kIHdlIHdhbnQgdG8gb2ZmZXIgQzk5IGJlaGF2aW9yLAotCSAqIHNvIGZvcmNpYmx5IG51bGwtdGVybWluYXRlIHRoZSBzdHJpbmcuCi0JICovCi0Jc3RyW3N0cl9zaXplIC0gMV0gPSAnXDAnOwotCXJldHVybiAocmV0KTsKLX0KLQotaW50Ci1wY2FwX3NucHJpbnRmKGNoYXIgKnN0ciwgc2l6ZV90IHN0cl9zaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLQl2YV9saXN0IGFyZ3M7Ci0JaW50IHJldDsKLQotCXZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Ci0JcmV0ID0gcGNhcF92c25wcmludGYoc3RyLCBzdHJfc2l6ZSwgZm9ybWF0LCBhcmdzKTsKLQl2YV9lbmQoYXJncyk7Ci0JcmV0dXJuIChyZXQpOwotfQpkaWZmIC0tZ2l0IGEvbWtkZXAgYi9ta2RlcAppbmRleCAxNDg2YjE4Li42ZThkYmQ2IDEwMDc1NQotLS0gYS9ta2RlcAorKysgYi9ta2RlcApAQCAtMTYsNyArMTYsMTAgQEAKIE1BS0U9TWFrZWZpbGUJCQkjIGRlZmF1bHQgbWFrZWZpbGUgbmFtZSBpcyAiTWFrZWZpbGUiCiBDQz1jYwkJCQkjIGRlZmF1bHQgQyBjb21waWxlciBpcyAiY2MiCiBERVBFTkRFTkNZX0NGTEFHPS1NCQkjIGRlZmF1bHQgZGVwZW5kZW5jeS1nZW5lcmF0aW9uIGZsYWcgaXMgLU0KK1NPVVJDRV9ESVJFQ1RPUlk9LgkJIyBkZWZhdWx0IHNvdXJjZSBkaXJlY3RvcnkgaXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5CiAKKyMgTm8gY29tbWFuZC1saW5lIGZsYWdzIHNlZW4geWV0LgorZmxhZ3M9IiIKIHdoaWxlIDoKIAlkbyBjYXNlICIkMSIgaW4KIAkJIyAtYyBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIEMgY29tcGlsZXIKQEAgLTM5LDEzICs0MiwyOSBAQAogCQktcCkKIAkJCVNFRD0ncztcLm87OycKIAkJCXNoaWZ0IDs7CisKKwkJIyAtcyBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIHNvdXJjZSBkaXJlY3RvcnkKKwkJLXMpCisJCQlTT1VSQ0VfRElSRUNUT1JZPSQyCisJCQlzaGlmdDsgc2hpZnQgOzsKKworCQkjIC1pbmNsdWRlIHRha2VzIGFuIGFyZ3VtZW50CisJCS1pbmNsdWRlKQorCQkJZmxhZ3M9IiRmbGFncyAkMSAkMiIKKwkJCXNoaWZ0OyBzaGlmdCA7OworCisJCSMgb3RoZXIgY29tbWFuZC1saW5lIGZsYWcKKwkJLSopCisJCQlmbGFncz0iJGZsYWdzICQxIgorCQkJc2hpZnQgOzsKKwogCQkqKQogCQkJYnJlYWsgOzsKIAllc2FjCiBkb25lCiAKIGlmIFsgJCMgPSAwIF0gOyB0aGVuCi0JZWNobyAndXNhZ2U6IG1rZGVwIFstcF0gWy1jIGNjXSBbLWYgbWFrZWZpbGVdIFstbSBkZXBlbmRlbmN5LWNmbGFnXSBbZmxhZ3NdIGZpbGUgLi4uJworCWVjaG8gJ3VzYWdlOiBta2RlcCBbLXBdIFstYyBjY10gWy1mIG1ha2VmaWxlXSBbLW0gZGVwZW5kZW5jeS1jZmxhZ10gWy1zIHNvdXJjZS1kaXJlY3RvcnldIFtmbGFnc10gZmlsZSAuLi4nCiAJZXhpdCAxCiBmaQogCkBAIC03Niw4ICs5NSwxNyBAQAogIyBlZ3JlcCAnXiNpbmNsdWRlWyAJXSoiLioiJyAvZGV2L251bGwgJCogfAogIyBzZWQgLWUgJ3MvOlteIl0qIlwoW14iXSpcKSIuKi86IFwxLycgLWUgJ3MvXC5jLy5vLycgfAogCisjCisjIENvbnN0cnVjdCBhIGxpc3Qgb2Ygc291cmNlIGZpbGVzIHdpdGggcGF0aHMgcmVsYXRpdmUgdG8gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCisjCitzb3VyY2VzPSIiCitmb3Igc3JjZmlsZSBpbiAkKgorZG8KKwlzb3VyY2VzPSIkc291cmNlcyAkU09VUkNFX0RJUkVDVE9SWS8kc3JjZmlsZSIKK2RvbmUKKwogIyBYWFggdGhpcyBkb2Vzbid0IHdvcmsgd2l0aCB0aGluZ3MgbGlrZSAiLURERUNMV0FJVFNUQVRVUz11bmlvblwgd2FpdCIKLSRDQyAkREVQRU5ERU5DWV9DRkxBRyAkKiB8CiskQ0MgJERFUEVOREVOQ1lfQ0ZMQUcgJGZsYWdzICRzb3VyY2VzIHwKIHNlZCAiCiAJczsgXC4vOyA7ZwogCSRTRUQiIHwKZGlmZiAtLWdpdCBhL21zZG9zL3JlYWRtZS5kb3MgYi9tc2Rvcy9yZWFkbWUuZG9zCmluZGV4IGI5NTQ4M2YuLmVjMDU2ZGQgMTAwNjQ0Ci0tLSBhL21zZG9zL3JlYWRtZS5kb3MKKysrIGIvbXNkb3MvcmVhZG1lLmRvcwpAQCAtMjQsNyArMjQsNyBAQAogICBJZiB5b3UgZ290IHRoZSBsaWJwY2FwIGZyb20gdGhlIG9mZmljaWFsIHNpdGUgd3d3LnRjcGR1bXAsIHRoZW4gdGhhdAogICBkaXN0cmlidXRpb24gZG9lcyBOT1QgY29udGFpbiBhbnkgc291cmNlcyBmb3IgYnVpbGRpbmcgMzItYml0IGRyaXZlcnMuCiAgIEluc3RlYWQgZ2V0IHRoZSBmdWxsIHZlcnNpb24gYXQKLSAgICAgaHR0cDovL3d3dy53YXR0LTMyLm5ldC9wY2FwL2xpYnBjYXAuemlwCisgICAgIGh0dHBzOi8vd3d3LndhdHQtMzIubmV0L3BjYXAvbGlicGNhcC56aXAKIAogICBhbmQgc2V0ICJVU0VfMzJCSVRfRFJJVkVSUyA9IDEiIGluIG1zZG9zXGNvbW1vbi5kai4KIApAQCAtNTEsMTIgKzUxLDEyIEBACiAgICByZWNlaXZlIG5ldHdvcmsgZGF0YS4gSXQncyBtb3N0bHkgdXNlZCB0byBhY2Nlc3MgdGhlICdob3N0cycKICAgIGZpbGUgYW5kIG90aGVyIDxuZXRkYi5oPiBmZWF0dXJlcy4gR2V0ICd3YXR0MzJzKi56aXAnIGF0OgogCi0gICAgIGh0dHA6Ly93d3cud2F0dC0zMi5uZXQKKyAgICAgaHR0cHM6Ly93d3cud2F0dC0zMi5uZXQKIAogMi4gRXhjZXB0aW9uIGhhbmRsZXIgYW5kIGRpc2Fzc2VtYmVyIGxpYnJhcnkgKGxpYmV4Yy5hKSBpcyBuZWVkZWQgaWYKICAgICJVU0VfRVhDRVBUID0gMSIgaW4gY29tbW9uLmRqLiBBdmFpbGFibGUgYXQ6CiAKLSAgICAgaHR0cDovL3d3dy53YXR0LTMyLm5ldC9taXNjL2V4Y19keDA3LnppcAorICAgICBodHRwczovL3d3dy53YXR0LTMyLm5ldC9taXNjL2V4Y19keDA3LnppcAogCiAzLiBGbGV4ICYgQmlzb24gaXMgdXNlZCB0byBnZW5lcmF0ZSBwYXJzZXIgZm9yIHRoZSBmaWx0ZXIgaGFuZGxlcgogICAgcGNhcF9jb21waWxlOgpAQCAtNjUsNyArNjUsNyBAQAogCiA0LiBOQVNNIGFzc2VtYmxlciB2IDAuOTggb3IgbGF0ZXIgaXMgcmVxdWlyZWQgd2hlbiBidWlsZGluZyBkamdwcCBhbmQKICAgIFdhdGNvbSB0YXJnZXRzOgotICAgICBodHRwOi8vd3d3Lm5hc20udXMvCisgICAgIGh0dHBzOi8vd3d3Lm5hc20udXMvCiAKIDUuIHNlZCAoU3RyZWFtIEVkaXRvcikgaXMgcmVxdWlyZWQgZm9yIGRvaW5nIGBtYWtlIGRlcGVuZCcuCiAgICBJdCdzIGF2YWlsYWJsZSBhdDoKZGlmZiAtLWdpdCBhL25hbWV0b2FkZHIuYyBiL25hbWV0b2FkZHIuYwppbmRleCAxOTRmZjQ1Li5jOTQ0YWQzIDEwMDY0NAotLS0gYS9uYW1ldG9hZGRyLmMKKysrIGIvbmFtZXRvYWRkci5jCkBAIC0xMjcsNyArMTI3LDYgQEAKICAgI2luY2x1ZGUgPG5ldGRiLmg+CiAjZW5kaWYgLyogX1dJTjMyICovCiAKLSNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0xMzUsNiArMTM0LDggQEAKIAogI2luY2x1ZGUgInBjYXAtaW50LmgiCiAKKyNpbmNsdWRlICJkaWFnLWNvbnRyb2wuaCIKKwogI2luY2x1ZGUgImdlbmNvZGUuaCIKICNpbmNsdWRlIDxwY2FwL25hbWVkYi5oPgogI2luY2x1ZGUgIm5hbWV0b2FkZHIuaCIKQEAgLTE2Miw3ICsxNjMsMjMgQEAKIAlicGZfdV9pbnQzMiAqKnA7CiAJc3RydWN0IGhvc3RlbnQgKmhwOwogCisJLyoKKwkgKiBnZXRob3N0YnluYW1lKCkgaXMgZGVwcmVjYXRlZCBvbiBXaW5kb3dzLCBwZXJoYXBzIGJlY2F1c2UKKwkgKiBpdCdzIG5vdCB0aHJlYWQtc2FmZSwgb3IgYmVjYXVzZSBpdCBkb2Vzbid0IHN1cHBvcnQgSVB2NiwKKwkgKiBvciBib3RoLgorCSAqCisJICogV2UgZGVwcmVjYXRlIHBjYXBfbmFtZXRvYWRkcigpIG9uIGFsbCBwbGF0Zm9ybXMgYmVjYXVzZQorCSAqIGl0J3Mgbm90IHRocmVhZC1zYWZlOyB3ZSBzdXBwbHkgaXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LAorCSAqIHNvIHN1cHByZXNzIHRoZSBkZXByZWNhdGlvbiB3YXJuaW5nLiAgV2UgY291bGQsIEkgZ3Vlc3MsCisJICogdXNlIGdldGFkZHJpbmZvKCkgYW5kIGNvbnN0cnVjdCB0aGUgYXJyYXkgb3Vyc2VsdmVzLCBidXQKKwkgKiB0aGF0J3MgcHJvYmFibHkgbm90IHdvcnRoIHRoZSBlZmZvcnQsIGFzIHRoYXQgd291bGRuJ3QgbWFrZQorCSAqIHRoaXMgdGhyZWFkLXNhZmUgLSB3ZSBjYW4ndCBjaGFuZ2UgdGhlIEFQSSB0byByZXF1aXJlIHRoYXQKKwkgKiBvdXIgY2FsbGVyIGZyZWUgdGhlIGFkZHJlc3MgYXJyYXksIHNvIHdlIHN0aWxsIGhhdmUgdG8gcmV1c2UKKwkgKiBhIGxvY2FsIGFycmF5LgorCSAqLworRElBR19PRkZfREVQUkVDQVRJT04KIAlpZiAoKGhwID0gZ2V0aG9zdGJ5bmFtZShuYW1lKSkgIT0gTlVMTCkgeworRElBR19PTl9ERVBSRUNBVElPTgogI2lmbmRlZiBoX2FkZHIKIAkJaGxpc3RbMF0gPSAoYnBmX3VfaW50MzIgKilocC0+aF9hZGRyOwogCQlOVE9ITChocC0+aF9hZGRyKTsKQEAgLTIwMCwxMCArMjE3LDEwIEBACiAgKiAgWFhYIC0gbm90IGd1YXJhbnRlZWQgdG8gYmUgdGhyZWFkLXNhZmUhICBTZWUgYmVsb3cgZm9yIHBsYXRmb3JtcwogICogIG9uIHdoaWNoIGl0IGlzIHRocmVhZC1zYWZlIGFuZCBvbiB3aGljaCBpdCBpc24ndC4KICAqLworI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCiBicGZfdV9pbnQzMgotcGNhcF9uYW1ldG9uZXRhZGRyKGNvbnN0IGNoYXIgKm5hbWUpCitwY2FwX25hbWV0b25ldGFkZHIoY29uc3QgY2hhciAqbmFtZSBfVV8pCiB7Ci0jaWZkZWYgX1dJTjMyCiAJLyoKIAkgKiBUaGVyZSdzIG5vICJnZXRuZXRieW5hbWUoKSIgb24gV2luZG93cy4KIAkgKgpAQCAtMjE3LDcgKzIzNCwxMSBAQAogCSAqIG9mICpVTipYKiBtYWNoaW5lcy4pCiAJICovCiAJcmV0dXJuIDA7Ci0jZWxzZQorfQorI2Vsc2UgLyogX1dJTjMyICovCiticGZfdV9pbnQzMgorcGNhcF9uYW1ldG9uZXRhZGRyKGNvbnN0IGNoYXIgKm5hbWUpCit7CiAJLyoKIAkgKiBVTipYLgogCSAqLwpAQCAtMjMxLDcgKzI1MiwyMiBAQAogCWludCBoX2Vycm5vdmFsOwogCWludCBlcnI7CiAKLQllcnIgPSBnZXRuZXRieW5hbWVfcihuYW1lLCAmcmVzdWx0X2J1ZiwgYnVmLCBzaXplb2YgYnVmLCAmbnAsCisJLyoKKwkgKiBBcHBhcmVudGx5LCB0aGUgbWFuIHBhZ2UgYXQKKwkgKgorCSAqICAgIGh0dHA6Ly9tYW43Lm9yZy9saW51eC9tYW4tcGFnZXMvbWFuMy9nZXRuZXRieW5hbWVfci4zLmh0bWwKKwkgKgorCSAqIGxpZXMgd2hlbiBpdCBzYXlzCisJICoKKwkgKiAgICBJZiB0aGUgZnVuY3Rpb24gY2FsbCBzdWNjZXNzZnVsbHkgb2J0YWlucyBhIG5ldHdvcmsgcmVjb3JkLAorCSAqICAgIHRoZW4gKnJlc3VsdCBpcyBzZXQgcG9pbnRpbmcgdG8gcmVzdWx0X2J1Zjsgb3RoZXJ3aXNlLCAqcmVzdWx0CisJICogICAgaXMgc2V0IHRvIE5VTEwuCisJICoKKwkgKiBhbmQsIGluIGZhY3QsIGF0IGxlYXN0IGluIHNvbWUgdmVyc2lvbnMgb2YgR05VIGxpYmMsIGl0IGRvZXMKKwkgKiAqbm90KiBhbHdheXMgZ2V0IHNldCBpZiBnZXRuZXRieW5hbWVfcigpIHN1Y2NlZWRzLgorCSAqLworCW5wID0gTlVMTDsKKyAJZXJyID0gZ2V0bmV0YnluYW1lX3IobmFtZSwgJnJlc3VsdF9idWYsIGJ1Ziwgc2l6ZW9mIGJ1ZiwgJm5wLAogCSAgICAmaF9lcnJub3ZhbCk7CiAJaWYgKGVyciAhPSAwKSB7CiAJCS8qCkBAIC0yNzYsOCArMzEyLDggQEAKIAkJcmV0dXJuIG5wLT5uX25ldDsKIAllbHNlCiAJCXJldHVybiAwOwotI2VuZGlmIC8qIF9XSU4zMiAqLwogfQorI2VuZGlmIC8qIF9XSU4zMiAqLwogCiAvKgogICogQ29udmVydCBhIHBvcnQgbmFtZSB0byBpdHMgcG9ydCBhbmQgcHJvdG9jb2wgbnVtYmVycy4KQEAgLTU1NCwyOCArNTkwLDIwIEBACiAgKi8KIFBDQVBfQVBJIHN0cnVjdCBlcHJvdG8gZXByb3RvX2RiW107CiBQQ0FQX0FQSV9ERUYgc3RydWN0IGVwcm90byBlcHJvdG9fZGJbXSA9IHsKLQl7ICJwdXAiLCBFVEhFUlRZUEVfUFVQIH0sCi0JeyAieG5zIiwgRVRIRVJUWVBFX05TIH0sCisJeyAiYWFycCIsIEVUSEVSVFlQRV9BQVJQIH0sCisJeyAiYXJwIiwgRVRIRVJUWVBFX0FSUCB9LAorCXsgImF0YWxrIiwgRVRIRVJUWVBFX0FUQUxLIH0sCisJeyAiZGVjbmV0IiwgRVRIRVJUWVBFX0ROIH0sCiAJeyAiaXAiLCBFVEhFUlRZUEVfSVAgfSwKICNpZmRlZiBJTkVUNgogCXsgImlwNiIsIEVUSEVSVFlQRV9JUFY2IH0sCiAjZW5kaWYKLQl7ICJhcnAiLCBFVEhFUlRZUEVfQVJQIH0sCi0JeyAicmFycCIsIEVUSEVSVFlQRV9SRVZBUlAgfSwKLQl7ICJzcHJpdGUiLCBFVEhFUlRZUEVfU1BSSVRFIH0sCisJeyAibGF0IiwgRVRIRVJUWVBFX0xBVCB9LAorCXsgImxvb3BiYWNrIiwgRVRIRVJUWVBFX0xPT1BCQUNLIH0sCiAJeyAibW9wZGwiLCBFVEhFUlRZUEVfTU9QREwgfSwKIAl7ICJtb3ByYyIsIEVUSEVSVFlQRV9NT1BSQyB9LAotCXsgImRlY25ldCIsIEVUSEVSVFlQRV9ETiB9LAotCXsgImxhdCIsIEVUSEVSVFlQRV9MQVQgfSwKKwl7ICJyYXJwIiwgRVRIRVJUWVBFX1JFVkFSUCB9LAogCXsgInNjYSIsIEVUSEVSVFlQRV9TQ0EgfSwKLQl7ICJsYW5icmlkZ2UiLCBFVEhFUlRZUEVfTEFOQlJJREdFIH0sCi0JeyAidmV4cCIsIEVUSEVSVFlQRV9WRVhQIH0sCi0JeyAidnByb2QiLCBFVEhFUlRZUEVfVlBST0QgfSwKLQl7ICJhdGFsayIsIEVUSEVSVFlQRV9BVEFMSyB9LAotCXsgImF0YWxrYXJwIiwgRVRIRVJUWVBFX0FBUlAgfSwKLQl7ICJsb29wYmFjayIsIEVUSEVSVFlQRV9MT09QQkFDSyB9LAotCXsgImRlY2R0cyIsIEVUSEVSVFlQRV9ERUNEVFMgfSwKLQl7ICJkZWNkbnMiLCBFVEhFUlRZUEVfREVDRE5TIH0sCiAJeyAoY2hhciAqKTAsIDAgfQogfTsKIApAQCAtNjIwLDkgKzY0OCw5IEBACiBzdGF0aWMgaW5saW5lIHVfY2hhcgogeGR0b2kodV9jaGFyIGMpCiB7Ci0JaWYgKGlzZGlnaXQoYykpCisJaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKQogCQlyZXR1cm4gKHVfY2hhcikoYyAtICcwJyk7Ci0JZWxzZSBpZiAoaXNsb3dlcihjKSkKKwllbHNlIGlmIChjID49ICdhJyAmJiBjIDw9ICdmJykKIAkJcmV0dXJuICh1X2NoYXIpKGMgLSAnYScgKyAxMCk7CiAJZWxzZQogCQlyZXR1cm4gKHVfY2hhcikoYyAtICdBJyArIDEwKTsKQEAgLTYzOCw4ICs2NjYsMTUgQEAKIAlsZW4gPSAwOwogCWZvciAoOzspIHsKIAkJbiA9IDA7Ci0JCXdoaWxlICgqcyAmJiAqcyAhPSAnLicpCisJCXdoaWxlICgqcyAmJiAqcyAhPSAnLicpIHsKKwkJCWlmIChuID4gMjUpIHsKKwkJCQkvKiBUaGUgcmVzdWx0IHdpbGwgYmUgPiAyNTUgKi8KKwkJCQlyZXR1cm4gLTE7CisJCQl9CiAJCQluID0gbiAqIDEwICsgKnMrKyAtICcwJzsKKwkJfQorCQlpZiAobiA+IDI1NSkKKwkJCXJldHVybiAtMTsKIAkJKmFkZHIgPDw9IDg7CiAJCSphZGRyIHw9IG4gJiAweGZmOwogCQlsZW4gKz0gODsKQEAgLTY5NCw3ICs3MjksNyBAQAogCQlpZiAoKnMgPT0gJzonIHx8ICpzID09ICcuJyB8fCAqcyA9PSAnLScpCiAJCQlzICs9IDE7CiAJCWQgPSB4ZHRvaSgqcysrKTsKLQkJaWYgKGlzeGRpZ2l0KCh1bnNpZ25lZCBjaGFyKSpzKSkgeworCQlpZiAoUENBUF9JU1hESUdJVCgqcykpIHsKIAkJCWQgPDw9IDQ7CiAJCQlkIHw9IHhkdG9pKCpzKyspOwogCQl9CmRpZmYgLS1naXQgYS9vcHRpbWl6ZS5jIGIvb3B0aW1pemUuYwppbmRleCA3YzY0MjRiLi42MTBhMDMwIDEwMDY0NAotLS0gYS9vcHRpbWl6ZS5jCisrKyBiL29wdGltaXplLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPG1lbW9yeS5oPgorI2luY2x1ZGUgPHNldGptcC5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjaW5jbHVkZSA8ZXJybm8uaD4KQEAgLTEwMiw3ICsxMDMsNyBAQAogICogVGFrZXMgYSAzMi1iaXQgaW50ZWdlciBhcyBhbiBhcmd1bWVudC4KICAqCiAgKiBJZiBoYW5kZWQgYSBub24temVybyB2YWx1ZSwgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGxvd2VzdCBzZXQgYml0LAotICogY291bnRpbmcgdXB3YXJkcyBmcm8gemVyby4KKyAqIGNvdW50aW5nIHVwd2FyZHMgZnJvbSB6ZXJvLgogICoKICAqIElmIGhhbmRlZCB6ZXJvLCB0aGUgcmVzdWx0cyBhcmUgcGxhdGZvcm0tIGFuZCBjb21waWxlci1kZXBlbmRlbnQuCiAgKiBLZWVwIGl0IG91dCBvZiB0aGUgbGlnaHQsIGRvbid0IGdpdmUgaXQgYW55IHdhdGVyLCBkb24ndCBmZWVkIGl0CkBAIC0xMTQsNyArMTE1LDcgQEAKICAgLyoKICAgICogR0NDIDMuNCBhbmQgbGF0ZXI7IHdlIGhhdmUgX19idWlsdGluX2N0eigpLgogICAgKi8KLSAgI2RlZmluZSBsb3dlc3Rfc2V0X2JpdChtYXNrKSBfX2J1aWx0aW5fY3R6KG1hc2spCisgICNkZWZpbmUgbG93ZXN0X3NldF9iaXQobWFzaykgKCh1X2ludClfX2J1aWx0aW5fY3R6KG1hc2spKQogI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKICAgLyoKICAgICogVmlzdWFsIFN0dWRpbzsgd2Ugc3VwcG9ydCBvbmx5IDIwMDUgYW5kIGxhdGVyLCBzbyB1c2UKQEAgLTEyNiw3ICsxMjcsNyBAQAogI3ByYWdtYSBpbnRyaW5zaWMoX0JpdFNjYW5Gb3J3YXJkKQogI2VuZGlmCiAKLXN0YXRpYyBfX2ZvcmNlaW5saW5lIGludAorc3RhdGljIF9fZm9yY2VpbmxpbmUgdV9pbnQKIGxvd2VzdF9zZXRfYml0KGludCBtYXNrKQogewogCXVuc2lnbmVkIGxvbmcgYml0OwpAQCAtMTM2LDE1ICsxMzcsMTUgQEAKIAkgKiAoSXQncyBjdXJyZW50bHkgbm90LCBpbiBNU1ZDLCBldmVuIG9uIDY0LWJpdCBwbGF0Zm9ybXMsIGJ1dC4uLi4pCiAJICovCiAJaWYgKF9CaXRTY2FuRm9yd2FyZCgmYml0LCAodW5zaWduZWQgaW50KW1hc2spID09IDApCi0JCXJldHVybiAtMTsJLyogbWFzayBpcyB6ZXJvICovCi0JcmV0dXJuIChpbnQpYml0OworCQlhYm9ydCgpOwkvKiBtYXNrIGlzIHplcm8gKi8KKwlyZXR1cm4gKHVfaW50KWJpdDsKIH0KICNlbGlmIGRlZmluZWQoTVNET1MpICYmIGRlZmluZWQoX19ESkdQUF9fKQogICAvKgogICAgKiBNUy1ET1Mgd2l0aCBESkdQUCwgd2hpY2ggZGVjbGFyZXMgZmZzKCkgaW4gPHN0cmluZy5oPiwgd2hpY2gKICAgICogd2UndmUgYWxyZWFkeSBpbmNsdWRlZC4KICAgICovCi0gICNkZWZpbmUgbG93ZXN0X3NldF9iaXQobWFzaykJKGZmcygobWFzaykpIC0gMSkKKyAgI2RlZmluZSBsb3dlc3Rfc2V0X2JpdChtYXNrKQkoKHVfaW50KShmZnMoKG1hc2spKSAtIDEpKQogI2VsaWYgKGRlZmluZWQoTVNET1MpICYmIGRlZmluZWQoX19XQVRDT01DX18pKSB8fCBkZWZpbmVkKFNUUklOR1NfSF9ERUNMQVJFU19GRlMpCiAgIC8qCiAgICAqIE1TLURPUyB3aXRoIFdhdGNvbSBDLCB3aGljaCBoYXMgPHN0cmluZ3MuaD4gYW5kIGRlY2xhcmVzIGZmcygpIHRoZXJlLApAQCAtMTUyLDE4ICsxNTMsMTggQEAKICAgICogb2YgdGhlIFNpbmdsZSBVTklYIFNwZWNpZmljYXRpb24pLgogICAgKi8KICAgI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSAgI2RlZmluZSBsb3dlc3Rfc2V0X2JpdChtYXNrKQkoZmZzKChtYXNrKSkgLSAxKQorICAjZGVmaW5lIGxvd2VzdF9zZXRfYml0KG1hc2spCSh1X2ludCkoKGZmcygobWFzaykpIC0gMSkpCiAjZWxzZQogLyoKICAqIE5vbmUgb2YgdGhlIGFib3ZlLgogICogVXNlIGEgcGVyZmVjdC1oYXNoLWZ1bmN0aW9uLWJhc2VkIGZ1bmN0aW9uLgogICovCi1zdGF0aWMgaW50CitzdGF0aWMgdV9pbnQKIGxvd2VzdF9zZXRfYml0KGludCBtYXNrKQogewogCXVuc2lnbmVkIGludCB2ID0gKHVuc2lnbmVkIGludCltYXNrOwogCi0Jc3RhdGljIGNvbnN0IGludCBNdWx0aXBseURlQnJ1aWpuQml0UG9zaXRpb25bMzJdID0geworCXN0YXRpYyBjb25zdCB1X2ludCBNdWx0aXBseURlQnJ1aWpuQml0UG9zaXRpb25bMzJdID0gewogCQkwLCAxLCAyOCwgMiwgMjksIDE0LCAyNCwgMywgMzAsIDIyLCAyMCwgMTUsIDI1LCAxNywgNCwgOCwKIAkJMzEsIDI3LCAxMywgMjMsIDIxLCAxOSwgMTYsIDcsIDI2LCAxMiwgMTgsIDYsIDExLCA1LCAxMCwgOQogCX07CkBAIC0yMTIsMzggKzIxMyw2MSBAQAogICovCiBzdHJ1Y3QgdmFsbm9kZSB7CiAJaW50IGNvZGU7Ci0JaW50IHYwLCB2MTsKLQlpbnQgdmFsOworCWJwZl91X2ludDMyIHYwLCB2MTsKKwlpbnQgdmFsOwkJLyogdGhlIHZhbHVlIG51bWJlciAqLwogCXN0cnVjdCB2YWxub2RlICpuZXh0OwogfTsKIAogLyogSW50ZWdlciBjb25zdGFudHMgbWFwcGVkIHdpdGggdGhlIGxvYWQgaW1tZWRpYXRlIG9wY29kZS4gKi8KLSNkZWZpbmUgSyhpKSBGKG9wdF9zdGF0ZSwgQlBGX0xEfEJQRl9JTU18QlBGX1csIGksIDBMKQorI2RlZmluZSBLKGkpIEYob3B0X3N0YXRlLCBCUEZfTER8QlBGX0lNTXxCUEZfVywgaSwgMFUpCiAKIHN0cnVjdCB2bWFwaW5mbyB7CiAJaW50IGlzX2NvbnN0OwotCWJwZl9pbnQzMiBjb25zdF92YWw7CisJYnBmX3VfaW50MzIgY29uc3RfdmFsOwogfTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCS8qCisJICogUGxhY2UgdG8gbG9uZ2ptcCB0byBvbiBhbiBlcnJvci4KKwkgKi8KKwlqbXBfYnVmIHRvcF9jdHg7CisKKwkvKgorCSAqIFRoZSBidWZmZXIgaW50byB3aGljaCB0byBwdXQgZXJyb3IgbWVzc2FnZS4KKwkgKi8KKwljaGFyICplcnJidWY7CisKKwkvKgogCSAqIEEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IGZ1cnRoZXIgb3B0aW1pemF0aW9uIGlzIG5lZWRlZC4KIAkgKiBJdGVyYXRpdmUgcGFzc2VzIGFyZSBjb250aW51ZWQgdW50aWwgYSBnaXZlbiBwYXNzIHlpZWxkcyBubwotCSAqIGJyYW5jaCBtb3ZlbWVudC4KKwkgKiBjb2RlIHNpbXBsaWZpY2F0aW9uIG9yIGJyYW5jaCBtb3ZlbWVudC4KIAkgKi8KIAlpbnQgZG9uZTsKIAotCWludCBuX2Jsb2NrczsKKwkvKgorCSAqIFhYWCAtIGRldGVjdCBsb29wcyB0aGF0IGRvIG5vdGhpbmcgYnV0IHJlcGVhdGVkIEFORC9PUiBwdWxsdXBzCisJICogYW5kIGVkZ2UgbW92ZXMuCisJICogSWYgMTAwIHBhc3NlcyBpbiBhIHJvdyBkbyBub3RoaW5nIGJ1dCB0aGF0LCB0cmVhdCB0aGF0IGFzIGEKKwkgKiBzaWduIHRoYXQgd2UncmUgaW4gYSBsb29wIHRoYXQganVzdCBzaHVmZmxlcyBpbiBhIGN5Y2xlIGluCisJICogd2hpY2ggZWFjaCBwYXNzIGp1c3Qgc2h1ZmZsZXMgdGhlIGNvZGUgYW5kIHdlIGV2ZW50dWFsbHkKKwkgKiBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgY29uZmlndXJhdGlvbi4KKwkgKgorCSAqIFhYWCAtIHdlIG5lZWQgYSBub24taGV1cmlzdGljIHdheSBvZiBkZXRlY3RpbmcsIG9yIHByZXZlbnRpbmcsCisJICogc3VjaCBhIGN5Y2xlLgorCSAqLworCWludCBub25fYnJhbmNoX21vdmVtZW50X3BlcmZvcm1lZDsKKworCXVfaW50IG5fYmxvY2tzOwkJLyogbnVtYmVyIG9mIGJsb2NrcyBpbiB0aGUgQ0ZHOyBndWFyYW50ZWVkIHRvIGJlID4gMCwgYXMgaXQncyBhIFJFVCBpbnN0cnVjdGlvbiBhdCBhIG1pbmltdW0gKi8KIAlzdHJ1Y3QgYmxvY2sgKipibG9ja3M7Ci0JaW50IG5fZWRnZXM7CisJdV9pbnQgbl9lZGdlczsJCS8qIHR3aWNlIG5fYmxvY2tzLCBzbyBndWFyYW50ZWVkIHRvIGJlID4gMCAqLwogCXN0cnVjdCBlZGdlICoqZWRnZXM7CiAKIAkvKgogCSAqIEEgYml0IHZlY3RvciBzZXQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRvbWluYXRvcnMuCiAJICogV2Ugcm91bmQgdXAgdGhlIHNldCBzaXplIHRvIHRoZSBuZXh0IHBvd2VyIG9mIHR3by4KIAkgKi8KLQlpbnQgbm9kZXdvcmRzOwotCWludCBlZGdld29yZHM7CisJdV9pbnQgbm9kZXdvcmRzOwkvKiBudW1iZXIgb2YgMzItYml0IHdvcmRzIGZvciBhIGJpdCB2ZWN0b3Igb2YgIm51bWJlciBvZiBub2RlcyIgYml0czsgZ3VhcmFudGVlZCB0byBiZSA+IDAgKi8KKwl1X2ludCBlZGdld29yZHM7CS8qIG51bWJlciBvZiAzMi1iaXQgd29yZHMgZm9yIGEgYml0IHZlY3RvciBvZiAibnVtYmVyIG9mIGVkZ2VzIiBiaXRzOyBndWFyYW50ZWVkIHRvIGJlID4gMCAqLwogCXN0cnVjdCBibG9jayAqKmxldmVsczsKIAlicGZfdV9pbnQzMiAqc3BhY2U7CiAKQEAgLTI1Miw0OCArMjc2LDUxIEBACiAgKiBUcnVlIGlmIGEgaXMgaW4gdXNldCB7cH0KICAqLwogI2RlZmluZSBTRVRfTUVNQkVSKHAsIGEpIFwKLSgocClbKHVuc2lnbmVkKShhKSAvIEJJVFNfUEVSX1dPUkRdICYgKDEgPDwgKCh1bnNpZ25lZCkoYSkgJSBCSVRTX1BFUl9XT1JEKSkpCisoKHApWyh1bnNpZ25lZCkoYSkgLyBCSVRTX1BFUl9XT1JEXSAmICgoYnBmX3VfaW50MzIpMSA8PCAoKHVuc2lnbmVkKShhKSAlIEJJVFNfUEVSX1dPUkQpKSkKIAogLyoKICAqIEFkZCAnYScgdG8gdXNldCBwLgogICovCiAjZGVmaW5lIFNFVF9JTlNFUlQocCwgYSkgXAotKHApWyh1bnNpZ25lZCkoYSkgLyBCSVRTX1BFUl9XT1JEXSB8PSAoMSA8PCAoKHVuc2lnbmVkKShhKSAlIEJJVFNfUEVSX1dPUkQpKQorKHApWyh1bnNpZ25lZCkoYSkgLyBCSVRTX1BFUl9XT1JEXSB8PSAoKGJwZl91X2ludDMyKTEgPDwgKCh1bnNpZ25lZCkoYSkgJSBCSVRTX1BFUl9XT1JEKSkKIAogLyoKICAqIERlbGV0ZSAnYScgZnJvbSB1c2V0IHAuCiAgKi8KICNkZWZpbmUgU0VUX0RFTEVURShwLCBhKSBcCi0ocClbKHVuc2lnbmVkKShhKSAvIEJJVFNfUEVSX1dPUkRdICY9IH4oMSA8PCAoKHVuc2lnbmVkKShhKSAlIEJJVFNfUEVSX1dPUkQpKQorKHApWyh1bnNpZ25lZCkoYSkgLyBCSVRTX1BFUl9XT1JEXSAmPSB+KChicGZfdV9pbnQzMikxIDw8ICgodW5zaWduZWQpKGEpICUgQklUU19QRVJfV09SRCkpCiAKIC8qCiAgKiBhIDo9IGEgaW50ZXJzZWN0IGIKKyAqIG4gbXVzdCBiZSBndWFyYW50ZWVkIHRvIGJlID4gMAogICovCiAjZGVmaW5lIFNFVF9JTlRFUlNFQ1QoYSwgYiwgbilcCiB7XAogCXJlZ2lzdGVyIGJwZl91X2ludDMyICpfeCA9IGEsICpfeSA9IGI7XAotCXJlZ2lzdGVyIGludCBfbiA9IG47XAotCXdoaWxlICgtLV9uID49IDApICpfeCsrICY9ICpfeSsrO1wKKwlyZWdpc3RlciB1X2ludCBfbiA9IG47XAorCWRvICpfeCsrICY9ICpfeSsrOyB3aGlsZSAoLS1fbiAhPSAwKTtcCiB9CiAKIC8qCiAgKiBhIDo9IGEgLSBiCisgKiBuIG11c3QgYmUgZ3VhcmFudGVlZCB0byBiZSA+IDAKICAqLwogI2RlZmluZSBTRVRfU1VCVFJBQ1QoYSwgYiwgbilcCiB7XAogCXJlZ2lzdGVyIGJwZl91X2ludDMyICpfeCA9IGEsICpfeSA9IGI7XAotCXJlZ2lzdGVyIGludCBfbiA9IG47XAotCXdoaWxlICgtLV9uID49IDApICpfeCsrICY9fiAqX3krKztcCisJcmVnaXN0ZXIgdV9pbnQgX24gPSBuO1wKKwlkbyAqX3grKyAmPX4gKl95Kys7IHdoaWxlICgtLV9uICE9IDApO1wKIH0KIAogLyoKICAqIGEgOj0gYSB1bmlvbiBiCisgKiBuIG11c3QgYmUgZ3VhcmFudGVlZCB0byBiZSA+IDAKICAqLwogI2RlZmluZSBTRVRfVU5JT04oYSwgYiwgbilcCiB7XAogCXJlZ2lzdGVyIGJwZl91X2ludDMyICpfeCA9IGEsICpfeSA9IGI7XAotCXJlZ2lzdGVyIGludCBfbiA9IG47XAotCXdoaWxlICgtLV9uID49IDApICpfeCsrIHw9ICpfeSsrO1wKKwlyZWdpc3RlciB1X2ludCBfbiA9IG47XAorCWRvICpfeCsrIHw9ICpfeSsrOyB3aGlsZSAoLS1fbiAhPSAwKTtcCiB9CiAKIAl1c2V0IGFsbF9kb21fc2V0czsKQEAgLTMwMiw4ICszMjksOCBAQAogCiAjZGVmaW5lIE1PRFVMVVMgMjEzCiAJc3RydWN0IHZhbG5vZGUgKmhhc2h0YmxbTU9EVUxVU107Ci0JaW50IGN1cnZhbDsKLQlpbnQgbWF4dmFsOworCWJwZl91X2ludDMyIGN1cnZhbDsKKwlicGZfdV9pbnQzMiBtYXh2YWw7CiAKIAlzdHJ1Y3Qgdm1hcGluZm8gKnZtYXA7CiAJc3RydWN0IHZhbG5vZGUgKnZub2RlX2Jhc2U7CkBAIC0zMTIsNiArMzM5LDE2IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKIAkvKgorCSAqIFBsYWNlIHRvIGxvbmdqbXAgdG8gb24gYW4gZXJyb3IuCisJICovCisJam1wX2J1ZiB0b3BfY3R4OworCisJLyoKKwkgKiBUaGUgYnVmZmVyIGludG8gd2hpY2ggdG8gcHV0IGVycm9yIG1lc3NhZ2UuCisJICovCisJY2hhciAqZXJyYnVmOworCisJLyoKIAkgKiBTb21lIHBvaW50ZXJzIHVzZWQgdG8gY29udmVydCB0aGUgYmFzaWMgYmxvY2sgZm9ybSBvZiB0aGUgY29kZSwKIAkgKiBpbnRvIHRoZSBhcnJheSBmb3JtIHRoYXQgQlBGIHJlcXVpcmVzLiAgJ2ZzdGFydCcgd2lsbCBwb2ludCB0bwogCSAqIHRoZSBtYWxsb2MnZCBhcnJheSB3aGlsZSAnZnRhaWwnIGlzIHVzZWQgZHVyaW5nIHRoZSByZWN1cnNpdmUKQEAgLTMyMSwxNCArMzU4LDE2IEBACiAJc3RydWN0IGJwZl9pbnNuICpmdGFpbDsKIH0gY29udl9zdGF0ZV90OwogCi1zdGF0aWMgdm9pZCBvcHRfaW5pdChjb21waWxlcl9zdGF0ZV90ICosIG9wdF9zdGF0ZV90ICosIHN0cnVjdCBpY29kZSAqKTsKK3N0YXRpYyB2b2lkIG9wdF9pbml0KG9wdF9zdGF0ZV90ICosIHN0cnVjdCBpY29kZSAqKTsKIHN0YXRpYyB2b2lkIG9wdF9jbGVhbnVwKG9wdF9zdGF0ZV90ICopOworc3RhdGljIHZvaWQgUENBUF9OT1JFVFVSTiBvcHRfZXJyb3Iob3B0X3N0YXRlX3QgKiwgY29uc3QgY2hhciAqLCAuLi4pCisgICAgUENBUF9QUklOVEZMSUtFKDIsIDMpOwogCiBzdGF0aWMgdm9pZCBpbnRlcm5fYmxvY2tzKG9wdF9zdGF0ZV90ICosIHN0cnVjdCBpY29kZSAqKTsKIAogc3RhdGljIHZvaWQgZmluZF9pbmVkZ2VzKG9wdF9zdGF0ZV90ICosIHN0cnVjdCBibG9jayAqKTsKICNpZmRlZiBCREVCVUcKLXN0YXRpYyB2b2lkIG9wdF9kdW1wKGNvbXBpbGVyX3N0YXRlX3QgKiwgc3RydWN0IGljb2RlICopOworc3RhdGljIHZvaWQgb3B0X2R1bXAob3B0X3N0YXRlX3QgKiwgc3RydWN0IGljb2RlICopOwogI2VuZGlmCiAKICNpZm5kZWYgTUFYCkBAIC0zNzgsNyArNDE3LDggQEAKIHN0YXRpYyB2b2lkCiBmaW5kX2RvbShvcHRfc3RhdGVfdCAqb3B0X3N0YXRlLCBzdHJ1Y3QgYmxvY2sgKnJvb3QpCiB7Ci0JaW50IGk7CisJdV9pbnQgaTsKKwlpbnQgbGV2ZWw7CiAJc3RydWN0IGJsb2NrICpiOwogCWJwZl91X2ludDMyICp4OwogCkBAIC0zODYsMTYgKzQyNiwyMyBAQAogCSAqIEluaXRpYWxpemUgc2V0cyB0byBjb250YWluIGFsbCBub2Rlcy4KIAkgKi8KIAl4ID0gb3B0X3N0YXRlLT5hbGxfZG9tX3NldHM7CisJLyoKKwkgKiBJbiBvcHRfaW5pdCgpLCB3ZSd2ZSBtYWRlIHN1cmUgdGhlIHByb2R1Y3QgZG9lc24ndCBvdmVyZmxvdy4KKwkgKi8KIAlpID0gb3B0X3N0YXRlLT5uX2Jsb2NrcyAqIG9wdF9zdGF0ZS0+bm9kZXdvcmRzOwotCXdoaWxlICgtLWkgPj0gMCkKKwl3aGlsZSAoaSAhPSAwKSB7CisJCS0taTsKIAkJKngrKyA9IDB4RkZGRkZGRkZVOworCX0KIAkvKiBSb290IHN0YXJ0cyBvZmYgZW1wdHkuICovCi0JZm9yIChpID0gb3B0X3N0YXRlLT5ub2Rld29yZHM7IC0taSA+PSAwOykKKwlmb3IgKGkgPSBvcHRfc3RhdGUtPm5vZGV3b3JkczsgaSAhPSAwOykgeworCQktLWk7CiAJCXJvb3QtPmRvbVtpXSA9IDA7CisJfQogCiAJLyogcm9vdC0+bGV2ZWwgaXMgdGhlIGhpZ2hlc3QgbGV2ZWwgbm8gZm91bmQuICovCi0JZm9yIChpID0gcm9vdC0+bGV2ZWw7IGkgPj0gMDsgLS1pKSB7Ci0JCWZvciAoYiA9IG9wdF9zdGF0ZS0+bGV2ZWxzW2ldOyBiOyBiID0gYi0+bGluaykgeworCWZvciAobGV2ZWwgPSByb290LT5sZXZlbDsgbGV2ZWwgPj0gMDsgLS1sZXZlbCkgeworCQlmb3IgKGIgPSBvcHRfc3RhdGUtPmxldmVsc1tsZXZlbF07IGI7IGIgPSBiLT5saW5rKSB7CiAJCQlTRVRfSU5TRVJUKGItPmRvbSwgYi0+aWQpOwogCQkJaWYgKEpUKGIpID09IDApCiAJCQkJY29udGludWU7CkBAIC00MjIsMTkgKzQ2OSwyNSBAQAogc3RhdGljIHZvaWQKIGZpbmRfZWRvbShvcHRfc3RhdGVfdCAqb3B0X3N0YXRlLCBzdHJ1Y3QgYmxvY2sgKnJvb3QpCiB7Ci0JaW50IGk7CisJdV9pbnQgaTsKIAl1c2V0IHg7CisJaW50IGxldmVsOwogCXN0cnVjdCBibG9jayAqYjsKIAogCXggPSBvcHRfc3RhdGUtPmFsbF9lZGdlX3NldHM7Ci0JZm9yIChpID0gb3B0X3N0YXRlLT5uX2VkZ2VzICogb3B0X3N0YXRlLT5lZGdld29yZHM7IC0taSA+PSAwOyApCisJLyoKKwkgKiBJbiBvcHRfaW5pdCgpLCB3ZSd2ZSBtYWRlIHN1cmUgdGhlIHByb2R1Y3QgZG9lc24ndCBvdmVyZmxvdy4KKwkgKi8KKwlmb3IgKGkgPSBvcHRfc3RhdGUtPm5fZWRnZXMgKiBvcHRfc3RhdGUtPmVkZ2V3b3JkczsgaSAhPSAwOyApIHsKKwkJLS1pOwogCQl4W2ldID0gMHhGRkZGRkZGRlU7CisJfQogCiAJLyogcm9vdC0+bGV2ZWwgaXMgdGhlIGhpZ2hlc3QgbGV2ZWwgbm8gZm91bmQuICovCiAJbWVtc2V0KHJvb3QtPmV0LmVkb20sIDAsIG9wdF9zdGF0ZS0+ZWRnZXdvcmRzICogc2l6ZW9mKCoodXNldCkwKSk7CiAJbWVtc2V0KHJvb3QtPmVmLmVkb20sIDAsIG9wdF9zdGF0ZS0+ZWRnZXdvcmRzICogc2l6ZW9mKCoodXNldCkwKSk7Ci0JZm9yIChpID0gcm9vdC0+bGV2ZWw7IGkgPj0gMDsgLS1pKSB7Ci0JCWZvciAoYiA9IG9wdF9zdGF0ZS0+bGV2ZWxzW2ldOyBiICE9IDA7IGIgPSBiLT5saW5rKSB7CisJZm9yIChsZXZlbCA9IHJvb3QtPmxldmVsOyBsZXZlbCA+PSAwOyAtLWxldmVsKSB7CisJCWZvciAoYiA9IG9wdF9zdGF0ZS0+bGV2ZWxzW2xldmVsXTsgYiAhPSAwOyBiID0gYi0+bGluaykgewogCQkJcHJvcGVkb20ob3B0X3N0YXRlLCAmYi0+ZXQpOwogCQkJcHJvcGVkb20ob3B0X3N0YXRlLCAmYi0+ZWYpOwogCQl9CkBAIC00NTEsNyArNTA0LDcgQEAKIHN0YXRpYyB2b2lkCiBmaW5kX2Nsb3N1cmUob3B0X3N0YXRlX3QgKm9wdF9zdGF0ZSwgc3RydWN0IGJsb2NrICpyb290KQogewotCWludCBpOworCWludCBsZXZlbDsKIAlzdHJ1Y3QgYmxvY2sgKmI7CiAKIAkvKgpAQCAtNDYxLDggKzUxNCw4IEBACiAJICAgICAgb3B0X3N0YXRlLT5uX2Jsb2NrcyAqIG9wdF9zdGF0ZS0+bm9kZXdvcmRzICogc2l6ZW9mKCpvcHRfc3RhdGUtPmFsbF9jbG9zdXJlX3NldHMpKTsKIAogCS8qIHJvb3QtPmxldmVsIGlzIHRoZSBoaWdoZXN0IGxldmVsIG5vIGZvdW5kLiAqLwotCWZvciAoaSA9IHJvb3QtPmxldmVsOyBpID49IDA7IC0taSkgewotCQlmb3IgKGIgPSBvcHRfc3RhdGUtPmxldmVsc1tpXTsgYjsgYiA9IGItPmxpbmspIHsKKwlmb3IgKGxldmVsID0gcm9vdC0+bGV2ZWw7IGxldmVsID49IDA7IC0tbGV2ZWwpIHsKKwkJZm9yIChiID0gb3B0X3N0YXRlLT5sZXZlbHNbbGV2ZWxdOyBiOyBiID0gYi0+bGluaykgewogCQkJU0VUX0lOU0VSVChiLT5jbG9zdXJlLCBiLT5pZCk7CiAJCQlpZiAoSlQoYikgPT0gMCkKIAkJCQljb250aW51ZTsKQEAgLTQ3Myw4ICs1MjYsMTEgQEAKIH0KIAogLyoKLSAqIFJldHVybiB0aGUgcmVnaXN0ZXIgbnVtYmVyIHRoYXQgaXMgdXNlZCBieSBzLiAgSWYgQSBhbmQgWCBhcmUgYm90aAotICogdXNlZCwgcmV0dXJuIEFYX0FUT00uICBJZiBubyByZWdpc3RlciBpcyB1c2VkLCByZXR1cm4gLTEuCisgKiBSZXR1cm4gdGhlIHJlZ2lzdGVyIG51bWJlciB0aGF0IGlzIHVzZWQgYnkgcy4KKyAqCisgKiBSZXR1cm5zIEFUT01fQSBpZiBBIGlzIHVzZWQsIEFUT01fWCBpZiBYIGlzIHVzZWQsIEFYX0FUT00gaWYgYm90aCBBIGFuZCBYCisgKiBhcmUgdXNlZCwgdGhlIHNjcmF0Y2ggbWVtb3J5IGxvY2F0aW9uJ3MgbnVtYmVyIGlmIGEgc2NyYXRjaCBtZW1vcnkKKyAqIGxvY2F0aW9uIGlzIHVzZWQgKGUuZy4sIDAgZm9yIE1bMF0pLCBvciAtMSBpZiBub25lIG9mIHRob3NlIGFyZSB1c2VkLgogICoKICAqIFRoZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgcHJvYmFibHkgY2hhbmdlIHRvIGFuIGFycmF5IGFjY2Vzcy4KICAqLwpAQCAtNDk0LDggKzU1MCwxMiBAQAogCiAJY2FzZSBCUEZfTEQ6CiAJY2FzZSBCUEZfTERYOgorCQkvKgorCQkgKiBBcyB0aGVyZSBhcmUgZmV3ZXIgdGhhbiAyXjMxIG1lbW9yeSBsb2NhdGlvbnMsCisJCSAqIHMtPmsgc2hvdWxkIGJlIGNvbnZlcnRpYmxlIHRvIGludCB3aXRob3V0IHByb2JsZW1zLgorCQkgKi8KIAkJcmV0dXJuIChCUEZfTU9ERShjKSA9PSBCUEZfSU5EKSA/IFhfQVRPTSA6Ci0JCQkoQlBGX01PREUoYykgPT0gQlBGX01FTSkgPyBzLT5rIDogLTE7CisJCQkoQlBGX01PREUoYykgPT0gQlBGX01FTSkgPyAoaW50KXMtPmsgOiAtMTsKIAogCWNhc2UgQlBGX1NUOgogCQlyZXR1cm4gQV9BVE9NOwpAQCAtNjUzLDIxICs3MTMsNDAgQEAKIAltZW1zZXQoKGNoYXIgKilvcHRfc3RhdGUtPmhhc2h0YmwsIDAsIHNpemVvZiBvcHRfc3RhdGUtPmhhc2h0YmwpOwogfQogCi0vKiBCZWNhdXNlIHdlIHJlYWxseSBkb24ndCBoYXZlIGFuIElSLCB0aGlzIHN0dWZmIGlzIGEgbGl0dGxlIG1lc3N5LiAqLwotc3RhdGljIGludAotRihvcHRfc3RhdGVfdCAqb3B0X3N0YXRlLCBpbnQgY29kZSwgaW50IHYwLCBpbnQgdjEpCisvKgorICogQmVjYXVzZSB3ZSByZWFsbHkgZG9uJ3QgaGF2ZSBhbiBJUiwgdGhpcyBzdHVmZiBpcyBhIGxpdHRsZSBtZXNzeS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgbG9va3MgaW4gdGhlIHRhYmxlIG9mIGV4aXN0aW5nIHZhbHVlIG51bWJlciBmb3IgYSB2YWx1ZQorICogd2l0aCBnZW5lcmF0ZWQgZnJvbSBhbiBvcGVyYXRpb24gd2l0aCB0aGUgc3BlY2lmaWVkIG9wY29kZSBhbmQKKyAqIHRoZSBzcGVjaWZpZWQgdmFsdWVzLiAgSWYgaXQgZmluZHMgaXQsIGl0IHJldHVybnMgaXRzIHZhbHVlIG51bWJlciwKKyAqIG90aGVyd2lzZSBpdCBtYWtlcyBhIG5ldyBlbnRyeSBpbiB0aGUgdGFibGUgYW5kIHJldHVybnMgdGhlCisgKiB2YWx1ZSBudW1iZXIgb2YgdGhhdCBlbnRyeS4KKyAqLworc3RhdGljIGJwZl91X2ludDMyCitGKG9wdF9zdGF0ZV90ICpvcHRfc3RhdGUsIGludCBjb2RlLCBicGZfdV9pbnQzMiB2MCwgYnBmX3VfaW50MzIgdjEpCiB7CiAJdV9pbnQgaGFzaDsKLQlpbnQgdmFsOworCWJwZl91X2ludDMyIHZhbDsKIAlzdHJ1Y3QgdmFsbm9kZSAqcDsKIAotCWhhc2ggPSAodV9pbnQpY29kZSBeICgodV9pbnQpdjAgPDwgNCkgXiAoKHVfaW50KXYxIDw8IDgpOworCWhhc2ggPSAodV9pbnQpY29kZSBeICh2MCA8PCA0KSBeICh2MSA8PCA4KTsKIAloYXNoICU9IE1PRFVMVVM7CiAKIAlmb3IgKHAgPSBvcHRfc3RhdGUtPmhhc2h0YmxbaGFzaF07IHA7IHAgPSBwLT5uZXh0KQogCQlpZiAocC0+Y29kZSA9PSBjb2RlICYmIHAtPnYwID09IHYwICYmIHAtPnYxID09IHYxKQogCQkJcmV0dXJuIHAtPnZhbDsKIAorCS8qCisJICogTm90IGZvdW5kLiAgQWxsb2NhdGUgYSBuZXcgdmFsdWUsIGFuZCBhc3NpZ24gaXQgYSBuZXcKKwkgKiB2YWx1ZSBudW1iZXIuCisJICoKKwkgKiBvcHRfc3RhdGUtPmN1cnZhbCBzdGFydHMgb3V0IGFzIDAsIHdoaWNoIG1lYW5zIFZBTF9VTktOT1dOOyB3ZQorCSAqIGluY3JlbWVudCBpdCBiZWZvcmUgdXNpbmcgaXQgYXMgdGhlIG5ldyB2YWx1ZSBudW1iZXIsIHdoaWNoCisJICogbWVhbnMgd2UgbmV2ZXIgYXNzaWduIFZBTF9VTktOT1dOLgorCSAqCisJICogWFhYIC0gdW5sZXNzIHdlIG92ZXJmbG93LCBidXQgd2UgcHJvYmFibHkgd29uJ3QgaGF2ZSAyXjMyLTEKKwkgKiB2YWx1ZXM7IHdlIHRyZWF0IDMyIGJpdHMgYXMgZWZmZWN0aXZlbHkgaW5maW5pdGUuCisJICovCiAJdmFsID0gKytvcHRfc3RhdGUtPmN1cnZhbDsKIAlpZiAoQlBGX01PREUoY29kZSkgPT0gQlBGX0lNTSAmJgogCSAgICAoQlBGX0NMQVNTKGNvZGUpID09IEJQRl9MRCB8fCBCUEZfQ0xBU1MoY29kZSkgPT0gQlBGX0xEWCkpIHsKQEAgLTY4Niw3ICs3NjUsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLXZzdG9yZShzdHJ1Y3Qgc3RtdCAqcywgaW50ICp2YWxwLCBpbnQgbmV3dmFsLCBpbnQgYWx0ZXIpCit2c3RvcmUoc3RydWN0IHN0bXQgKnMsIGJwZl91X2ludDMyICp2YWxwLCBicGZfdV9pbnQzMiBuZXd2YWwsIGludCBhbHRlcikKIHsKIAlpZiAoYWx0ZXIgJiYgbmV3dmFsICE9IFZBTF9VTktOT1dOICYmICp2YWxwID09IG5ld3ZhbCkKIAkJcy0+Y29kZSA9IE5PUDsKQEAgLTY5OSw4ICs3NzgsNyBAQAogICogKFVuYXJ5IG9wZXJhdG9ycyBhcmUgaGFuZGxlZCBlbHNld2hlcmUuKQogICovCiBzdGF0aWMgdm9pZAotZm9sZF9vcChjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIG9wdF9zdGF0ZV90ICpvcHRfc3RhdGUsCi0gICAgc3RydWN0IHN0bXQgKnMsIGludCB2MCwgaW50IHYxKQorZm9sZF9vcChvcHRfc3RhdGVfdCAqb3B0X3N0YXRlLCBzdHJ1Y3Qgc3RtdCAqcywgYnBmX3VfaW50MzIgdjAsIGJwZl91X2ludDMyIHYxKQogewogCWJwZl91X2ludDMyIGEsIGI7CiAKQEAgLTcyMiwxMyArODAwLDEzIEBACiAKIAljYXNlIEJQRl9ESVY6CiAJCWlmIChiID09IDApCi0JCQlicGZfZXJyb3IoY3N0YXRlLCAiZGl2aXNpb24gYnkgemVybyIpOworCQkJb3B0X2Vycm9yKG9wdF9zdGF0ZSwgImRpdmlzaW9uIGJ5IHplcm8iKTsKIAkJYSAvPSBiOwogCQlicmVhazsKIAogCWNhc2UgQlBGX01PRDoKIAkJaWYgKGIgPT0gMCkKLQkJCWJwZl9lcnJvcihjc3RhdGUsICJtb2R1bHVzIGJ5IHplcm8iKTsKKwkJCW9wdF9lcnJvcihvcHRfc3RhdGUsICJtb2R1bHVzIGJ5IHplcm8iKTsKIAkJYSAlPSBiOwogCQlicmVhazsKIApAQCAtNzQ1LDExICs4MjMsMzkgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEJQRl9MU0g6Ci0JCWEgPDw9IGI7CisJCS8qCisJCSAqIEEgbGVmdCBzaGlmdCBvZiBtb3JlIHRoYW4gdGhlIHdpZHRoIG9mIHRoZSB0eXBlCisJCSAqIGlzIHVuZGVmaW5lZCBpbiBDOyB3ZSdsbCBqdXN0IHRyZWF0IGl0IGFzIHNoaWZ0aW5nCisJCSAqIGFsbCB0aGUgYml0cyBvdXQuCisJCSAqCisJCSAqIFhYWCAtIHRoZSBCUEYgaW50ZXJwcmV0ZXIgZG9lc24ndCBjaGVjayBmb3IgdGhpcywKKwkJICogc28gaXRzIGJlaGF2aW9yIGlzIGRlcGVuZGVudCBvbiB0aGUgYmVoYXZpb3Igb2YKKwkJICogdGhlIHByb2Nlc3NvciBvbiB3aGljaCBpdCdzIHJ1bm5pbmcuICBUaGVyZSBhcmUKKwkJICogcHJvY2Vzc29ycyBvbiB3aGljaCBpdCBzaGlmdHMgYWxsIHRoZSBiaXRzIG91dAorCQkgKiBhbmQgcHJvY2Vzc29ycyBvbiB3aGljaCBpdCBkb2VzIG5vIHNoaWZ0LgorCQkgKi8KKwkJaWYgKGIgPCAzMikKKwkJCWEgPDw9IGI7CisJCWVsc2UKKwkJCWEgPSAwOwogCQlicmVhazsKIAogCWNhc2UgQlBGX1JTSDoKLQkJYSA+Pj0gYjsKKwkJLyoKKwkJICogQSByaWdodCBzaGlmdCBvZiBtb3JlIHRoYW4gdGhlIHdpZHRoIG9mIHRoZSB0eXBlCisJCSAqIGlzIHVuZGVmaW5lZCBpbiBDOyB3ZSdsbCBqdXN0IHRyZWF0IGl0IGFzIHNoaWZ0aW5nCisJCSAqIGFsbCB0aGUgYml0cyBvdXQuCisJCSAqCisJCSAqIFhYWCAtIHRoZSBCUEYgaW50ZXJwcmV0ZXIgZG9lc24ndCBjaGVjayBmb3IgdGhpcywKKwkJICogc28gaXRzIGJlaGF2aW9yIGlzIGRlcGVuZGVudCBvbiB0aGUgYmVoYXZpb3Igb2YKKwkJICogdGhlIHByb2Nlc3NvciBvbiB3aGljaCBpdCdzIHJ1bm5pbmcuICBUaGVyZSBhcmUKKwkJICogcHJvY2Vzc29ycyBvbiB3aGljaCBpdCBzaGlmdHMgYWxsIHRoZSBiaXRzIG91dAorCQkgKiBhbmQgcHJvY2Vzc29ycyBvbiB3aGljaCBpdCBkb2VzIG5vIHNoaWZ0LgorCQkgKi8KKwkJaWYgKGIgPCAzMikKKwkJCWEgPj49IGI7CisJCWVsc2UKKwkJCWEgPSAwOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC03NTcsNiArODYzLDEwIEBACiAJfQogCXMtPmsgPSBhOwogCXMtPmNvZGUgPSBCUEZfTER8QlBGX0lNTTsKKwkvKgorCSAqIFhYWCAtIG9wdGltaXplciBsb29wIGRldGVjdGlvbi4KKwkgKi8KKwlvcHRfc3RhdGUtPm5vbl9icmFuY2hfbW92ZW1lbnRfcGVyZm9ybWVkID0gMTsKIAlvcHRfc3RhdGUtPmRvbmUgPSAwOwogfQogCkBAIC03ODIsNyArODkyLDcgQEAKIHsKIAlzdHJ1Y3Qgc2xpc3QgKnM7CiAJc3RydWN0IHNsaXN0ICpuZXh0LCAqbGFzdDsKLQlpbnQgdmFsOworCWJwZl91X2ludDMyIHZhbDsKIAogCXMgPSBiLT5zdG10czsKIAlpZiAocyA9PSAwKQpAQCAtODEzLDYgKzkyMywxMCBAQAogCQlpZiAocy0+cy5jb2RlID09IEJQRl9TVCAmJgogCQkgICAgbmV4dC0+cy5jb2RlID09IChCUEZfTERYfEJQRl9NRU0pICYmCiAJCSAgICBzLT5zLmsgPT0gbmV4dC0+cy5rKSB7CisJCQkvKgorCQkJICogWFhYIC0gb3B0aW1pemVyIGxvb3AgZGV0ZWN0aW9uLgorCQkJICovCisJCQlvcHRfc3RhdGUtPm5vbl9icmFuY2hfbW92ZW1lbnRfcGVyZm9ybWVkID0gMTsKIAkJCW9wdF9zdGF0ZS0+ZG9uZSA9IDA7CiAJCQluZXh0LT5zLmNvZGUgPSBCUEZfTUlTQ3xCUEZfVEFYOwogCQl9CkBAIC04MjQsNiArOTM4LDEwIEBACiAJCSAgICBuZXh0LT5zLmNvZGUgPT0gKEJQRl9NSVNDfEJQRl9UQVgpKSB7CiAJCQlzLT5zLmNvZGUgPSBCUEZfTERYfEJQRl9JTU07CiAJCQluZXh0LT5zLmNvZGUgPSBCUEZfTUlTQ3xCUEZfVFhBOworCQkJLyoKKwkJCSAqIFhYWCAtIG9wdGltaXplciBsb29wIGRldGVjdGlvbi4KKwkJCSAqLworCQkJb3B0X3N0YXRlLT5ub25fYnJhbmNoX21vdmVtZW50X3BlcmZvcm1lZCA9IDE7CiAJCQlvcHRfc3RhdGUtPmRvbmUgPSAwOwogCQl9CiAJCS8qCkBAIC05MDMsNiArMTAyMSwxMCBAQAogCQkJcy0+cy5jb2RlID0gTk9QOwogCQkJYWRkLT5zLmNvZGUgPSBOT1A7CiAJCQl0YXgtPnMuY29kZSA9IE5PUDsKKwkJCS8qCisJCQkgKiBYWFggLSBvcHRpbWl6ZXIgbG9vcCBkZXRlY3Rpb24uCisJCQkgKi8KKwkJCW9wdF9zdGF0ZS0+bm9uX2JyYW5jaF9tb3ZlbWVudF9wZXJmb3JtZWQgPSAxOwogCQkJb3B0X3N0YXRlLT5kb25lID0gMDsKIAkJfQogCX0KQEAgLTkxNSwxMCArMTAzNywxMCBAQAogCSAqLwogCWlmIChiLT5zLmNvZGUgPT0gKEJQRl9KTVB8QlBGX0pFUXxCUEZfSykgJiYKIAkgICAgIUFUT01FTEVNKGItPm91dF91c2UsIEFfQVRPTSkpIHsKLQkgICAgCS8qCi0JICAgIAkgKiBXZSBjYW4gb3B0aW1pemUgYXdheSBjZXJ0YWluIHN1YnRyYWN0aW9ucyBvZiB0aGUKLQkgICAgCSAqIFggcmVnaXN0ZXIuCi0JICAgIAkgKi8KKwkJLyoKKwkJICogV2UgY2FuIG9wdGltaXplIGF3YXkgY2VydGFpbiBzdWJ0cmFjdGlvbnMgb2YgdGhlCisJCSAqIFggcmVnaXN0ZXIuCisJCSAqLwogCQlpZiAobGFzdC0+cy5jb2RlID09IChCUEZfQUxVfEJQRl9TVUJ8QlBGX1gpKSB7CiAJCQl2YWwgPSBiLT52YWxbWF9BVE9NXTsKIAkJCWlmIChvcHRfc3RhdGUtPnZtYXBbdmFsXS5pc19jb25zdCkgewpAQCAtOTMzLDYgKzEwNTUsMTAgQEAKIAkJCQkgKi8KIAkJCQliLT5zLmsgKz0gb3B0X3N0YXRlLT52bWFwW3ZhbF0uY29uc3RfdmFsOwogCQkJCWxhc3QtPnMuY29kZSA9IE5PUDsKKwkJCQkvKgorCQkJCSAqIFhYWCAtIG9wdGltaXplciBsb29wIGRldGVjdGlvbi4KKwkJCQkgKi8KKwkJCQlvcHRfc3RhdGUtPm5vbl9icmFuY2hfbW92ZW1lbnRfcGVyZm9ybWVkID0gMTsKIAkJCQlvcHRfc3RhdGUtPmRvbmUgPSAwOwogCQkJfSBlbHNlIGlmIChiLT5zLmsgPT0gMCkgewogCQkJCS8qCkBAIC05NDYsNiArMTA3MiwxMCBAQAogCQkJCSAqLwogCQkJCWxhc3QtPnMuY29kZSA9IE5PUDsKIAkJCQliLT5zLmNvZGUgPSBCUEZfSk1QfEJQRl9KRVF8QlBGX1g7CisJCQkJLyoKKwkJCQkgKiBYWFggLSBvcHRpbWl6ZXIgbG9vcCBkZXRlY3Rpb24uCisJCQkJICovCisJCQkJb3B0X3N0YXRlLT5ub25fYnJhbmNoX21vdmVtZW50X3BlcmZvcm1lZCA9IDE7CiAJCQkJb3B0X3N0YXRlLT5kb25lID0gMDsKIAkJCX0KIAkJfQpAQCAtOTU4LDYgKzEwODgsMTAgQEAKIAkJZWxzZSBpZiAobGFzdC0+cy5jb2RlID09IChCUEZfQUxVfEJQRl9TVUJ8QlBGX0spKSB7CiAJCQlsYXN0LT5zLmNvZGUgPSBOT1A7CiAJCQliLT5zLmsgKz0gbGFzdC0+cy5rOworCQkJLyoKKwkJCSAqIFhYWCAtIG9wdGltaXplciBsb29wIGRldGVjdGlvbi4KKwkJCSAqLworCQkJb3B0X3N0YXRlLT5ub25fYnJhbmNoX21vdmVtZW50X3BlcmZvcm1lZCA9IDE7CiAJCQlvcHRfc3RhdGUtPmRvbmUgPSAwOwogCQl9CiAJCS8qCkBAIC05NzIsNiArMTEwNiwxMCBAQAogCQkJYi0+cy5rID0gbGFzdC0+cy5rOwogCQkJYi0+cy5jb2RlID0gQlBGX0pNUHxCUEZfS3xCUEZfSlNFVDsKIAkJCWxhc3QtPnMuY29kZSA9IE5PUDsKKwkJCS8qCisJCQkgKiBYWFggLSBvcHRpbWl6ZXIgbG9vcCBkZXRlY3Rpb24uCisJCQkgKi8KKwkJCW9wdF9zdGF0ZS0+bm9uX2JyYW5jaF9tb3ZlbWVudF9wZXJmb3JtZWQgPSAxOwogCQkJb3B0X3N0YXRlLT5kb25lID0gMDsKIAkJCW9wdF9ub3QoYik7CiAJCX0KQEAgLTk4Myw3ICsxMTIxLDcgQEAKIAlpZiAoYi0+cy5jb2RlID09IChCUEZfSk1QfEJQRl9LfEJQRl9KU0VUKSkgewogCQlpZiAoYi0+cy5rID09IDApCiAJCQlKVChiKSA9IEpGKGIpOwotCQlpZiAoKHVfaW50KWItPnMuayA9PSAweGZmZmZmZmZmVSkKKwkJaWYgKGItPnMuayA9PSAweGZmZmZmZmZmVSkKIAkJCUpGKGIpID0gSlQoYik7CiAJfQogCS8qCkBAIC05OTMsNyArMTEzMSw3IEBACiAJICovCiAJdmFsID0gYi0+dmFsW1hfQVRPTV07CiAJaWYgKG9wdF9zdGF0ZS0+dm1hcFt2YWxdLmlzX2NvbnN0ICYmIEJQRl9TUkMoYi0+cy5jb2RlKSA9PSBCUEZfWCkgewotCQlicGZfaW50MzIgdiA9IG9wdF9zdGF0ZS0+dm1hcFt2YWxdLmNvbnN0X3ZhbDsKKwkJYnBmX3VfaW50MzIgdiA9IG9wdF9zdGF0ZS0+dm1hcFt2YWxdLmNvbnN0X3ZhbDsKIAkJYi0+cy5jb2RlICY9IH5CUEZfWDsKIAkJYi0+cy5rID0gdjsKIAl9CkBAIC0xMDAzLDcgKzExNDEsNyBAQAogCSAqLwogCXZhbCA9IGItPnZhbFtBX0FUT01dOwogCWlmIChvcHRfc3RhdGUtPnZtYXBbdmFsXS5pc19jb25zdCAmJiBCUEZfU1JDKGItPnMuY29kZSkgPT0gQlBGX0spIHsKLQkJYnBmX2ludDMyIHYgPSBvcHRfc3RhdGUtPnZtYXBbdmFsXS5jb25zdF92YWw7CisJCWJwZl91X2ludDMyIHYgPSBvcHRfc3RhdGUtPnZtYXBbdmFsXS5jb25zdF92YWw7CiAJCXN3aXRjaCAoQlBGX09QKGItPnMuY29kZSkpIHsKIAogCQljYXNlIEJQRl9KRVE6CkBAIC0xMDExLDExICsxMTQ5LDExIEBACiAJCQlicmVhazsKIAogCQljYXNlIEJQRl9KR1Q6Ci0JCQl2ID0gKHVuc2lnbmVkKXYgPiAodW5zaWduZWQpYi0+cy5rOworCQkJdiA9IHYgPiBiLT5zLms7CiAJCQlicmVhazsKIAogCQljYXNlIEJQRl9KR0U6Ci0JCQl2ID0gKHVuc2lnbmVkKXYgPj0gKHVuc2lnbmVkKWItPnMuazsKKwkJCXYgPSB2ID49IGItPnMuazsKIAkJCWJyZWFrOwogCiAJCWNhc2UgQlBGX0pTRVQ6CkBAIC0xMDI1LDggKzExNjMsMTMgQEAKIAkJZGVmYXVsdDoKIAkJCWFib3J0KCk7CiAJCX0KLQkJaWYgKEpGKGIpICE9IEpUKGIpKQorCQlpZiAoSkYoYikgIT0gSlQoYikpIHsKKwkJCS8qCisJCQkgKiBYWFggLSBvcHRpbWl6ZXIgbG9vcCBkZXRlY3Rpb24uCisJCQkgKi8KKwkJCW9wdF9zdGF0ZS0+bm9uX2JyYW5jaF9tb3ZlbWVudF9wZXJmb3JtZWQgPSAxOwogCQkJb3B0X3N0YXRlLT5kb25lID0gMDsKKwkJfQogCQlpZiAodikKIAkJCUpGKGIpID0gSlQoYik7CiAJCWVsc2UKQEAgLTEwNDEsMTEgKzExODQsMTAgQEAKICAqIGV2YWx1YXRpb24gYW5kIGNvZGUgdHJhbnNmb3JtYXRpb25zIHdlcmVuJ3QgZm9sZGVkIHRvZ2V0aGVyLgogICovCiBzdGF0aWMgdm9pZAotb3B0X3N0bXQoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBvcHRfc3RhdGVfdCAqb3B0X3N0YXRlLAotICAgIHN0cnVjdCBzdG10ICpzLCBpbnQgdmFsW10sIGludCBhbHRlcikKK29wdF9zdG10KG9wdF9zdGF0ZV90ICpvcHRfc3RhdGUsIHN0cnVjdCBzdG10ICpzLCBicGZfdV9pbnQzMiB2YWxbXSwgaW50IGFsdGVyKQogewogCWludCBvcDsKLQlpbnQgdjsKKwlicGZfdV9pbnQzMiB2OwogCiAJc3dpdGNoIChzLT5jb2RlKSB7CiAKQEAgLTEwNjQsNiArMTIwNiwxMCBAQAogCQkJcy0+Y29kZSA9IEJQRl9MRHxCUEZfQUJTfEJQRl9TSVpFKHMtPmNvZGUpOwogCQkJcy0+ayArPSBvcHRfc3RhdGUtPnZtYXBbdl0uY29uc3RfdmFsOwogCQkJdiA9IEYob3B0X3N0YXRlLCBzLT5jb2RlLCBzLT5rLCAwTCk7CisJCQkvKgorCQkJICogWFhYIC0gb3B0aW1pemVyIGxvb3AgZGV0ZWN0aW9uLgorCQkJICovCisJCQlvcHRfc3RhdGUtPm5vbl9icmFuY2hfbW92ZW1lbnRfcGVyZm9ybWVkID0gMTsKIAkJCW9wdF9zdGF0ZS0+ZG9uZSA9IDA7CiAJCX0KIAkJZWxzZQpAQCAtMTA5NCw3ICsxMjQwLDIzIEBACiAJY2FzZSBCUEZfQUxVfEJQRl9ORUc6CiAJCWlmIChhbHRlciAmJiBvcHRfc3RhdGUtPnZtYXBbdmFsW0FfQVRPTV1dLmlzX2NvbnN0KSB7CiAJCQlzLT5jb2RlID0gQlBGX0xEfEJQRl9JTU07Ci0JCQlzLT5rID0gLW9wdF9zdGF0ZS0+dm1hcFt2YWxbQV9BVE9NXV0uY29uc3RfdmFsOworCQkJLyoKKwkJCSAqIERvIHRoaXMgbmVnYXRpb24gYXMgdW5zaWduZWQgYXJpdGhtZXRpYzsgdGhhdCdzCisJCQkgKiB3aGF0IG1vZGVybiBCUEYgZW5naW5lcyBkbywgYW5kIGl0IGd1YXJhbnRlZXMKKwkJCSAqIHRoYXQgYWxsIHBvc3NpYmxlIHZhbHVlcyBjYW4gYmUgbmVnYXRlZC4gIChZZWFoLAorCQkJICogbmVnYXRpbmcgMHg4MDAwMDAwMCwgdGhlIG1pbmltdW0gc2lnbmVkIDMyLWJpdAorCQkJICogdHdvJ3MtY29tcGxlbWVudCB2YWx1ZSwgcmVzdWx0cyBpbiAweDgwMDAwMDAwLAorCQkJICogc28gaXQncyBzdGlsbCBuZWdhdGl2ZSwgYnV0IHdlICpzaG91bGQqIGJlIGRvaW5nCisJCQkgKiBhbGwgdW5zaWduZWQgYXJpdGhtZXRpYyBoZXJlLCB0byBtYXRjaCB3aGF0CisJCQkgKiBtb2Rlcm4gQlBGIGVuZ2luZXMgZG8uKQorCQkJICoKKwkJCSAqIEV4cHJlc3MgaXQgYXMgMFUgLSAodW5zaWduZWQgdmFsdWUpIHNvIHRoYXQgd2UKKwkJCSAqIGRvbid0IGdldCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBuZWdhdGluZyBhbgorCQkJICogdW5zaWduZWQgdmFsdWUgYW5kIGRvbid0IGdldCBVQlNhbiB3YXJuaW5ncworCQkJICogYWJvdXQgdGhlIHJlc3VsdCBvZiBuZWdhdGluZyAweDgwMDAwMDAwIGJlaW5nCisJCQkgKiB1bmRlZmluZWQuCisJCQkgKi8KKwkJCXMtPmsgPSAwVSAtIG9wdF9zdGF0ZS0+dm1hcFt2YWxbQV9BVE9NXV0uY29uc3RfdmFsOwogCQkJdmFsW0FfQVRPTV0gPSBLKHMtPmspOwogCQl9CiAJCWVsc2UKQEAgLTExMTQsOSArMTI3NiwxNyBAQAogCQlvcCA9IEJQRl9PUChzLT5jb2RlKTsKIAkJaWYgKGFsdGVyKSB7CiAJCQlpZiAocy0+ayA9PSAwKSB7Ci0JCQkJLyogZG9uJ3Qgb3B0aW1pemUgYXdheSAic3ViICMwIgorCQkJCS8qCisJCQkJICogT3B0aW1pemUgb3BlcmF0aW9ucyB3aGVyZSB0aGUgY29uc3RhbnQKKwkJCQkgKiBpcyB6ZXJvLgorCQkJCSAqCisJCQkJICogRG9uJ3Qgb3B0aW1pemUgYXdheSAic3ViICMwIgogCQkJCSAqIGFzIGl0IG1heSBiZSBuZWVkZWQgbGF0ZXIgdG8KLQkJCQkgKiBmaXh1cCB0aGUgZ2VuZXJhdGVkIG1hdGggY29kZSAqLworCQkJCSAqIGZpeHVwIHRoZSBnZW5lcmF0ZWQgbWF0aCBjb2RlLgorCQkJCSAqCisJCQkJICogRmFpbCBpZiB3ZSdyZSBkaXZpZGluZyBieSB6ZXJvIG9yIHRha2luZworCQkJCSAqIGEgbW9kdWx1cyBieSB6ZXJvLgorCQkJCSAqLwogCQkJCWlmIChvcCA9PSBCUEZfQUREIHx8CiAJCQkJICAgIG9wID09IEJQRl9MU0ggfHwgb3AgPT0gQlBGX1JTSCB8fAogCQkJCSAgICBvcCA9PSBCUEZfT1IgfHwgb3AgPT0gQlBGX1hPUikgewpAQCAtMTEyOCw5ICsxMjk4LDE1IEBACiAJCQkJCXZhbFtBX0FUT01dID0gSyhzLT5rKTsKIAkJCQkJYnJlYWs7CiAJCQkJfQorCQkJCWlmIChvcCA9PSBCUEZfRElWKQorCQkJCQlvcHRfZXJyb3Iob3B0X3N0YXRlLAorCQkJCQkgICAgImRpdmlzaW9uIGJ5IHplcm8iKTsKKwkJCQlpZiAob3AgPT0gQlBGX01PRCkKKwkJCQkJb3B0X2Vycm9yKG9wdF9zdGF0ZSwKKwkJCQkJICAgICJtb2R1bHVzIGJ5IHplcm8iKTsKIAkJCX0KIAkJCWlmIChvcHRfc3RhdGUtPnZtYXBbdmFsW0FfQVRPTV1dLmlzX2NvbnN0KSB7Ci0JCQkJZm9sZF9vcChjc3RhdGUsIG9wdF9zdGF0ZSwgcywgdmFsW0FfQVRPTV0sIEsocy0+aykpOworCQkJCWZvbGRfb3Aob3B0X3N0YXRlLCBzLCB2YWxbQV9BVE9NXSwgSyhzLT5rKSk7CiAJCQkJdmFsW0FfQVRPTV0gPSBLKHMtPmspOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTE1MSwxMiArMTMyNywyMCBAQAogCQlvcCA9IEJQRl9PUChzLT5jb2RlKTsKIAkJaWYgKGFsdGVyICYmIG9wdF9zdGF0ZS0+dm1hcFt2YWxbWF9BVE9NXV0uaXNfY29uc3QpIHsKIAkJCWlmIChvcHRfc3RhdGUtPnZtYXBbdmFsW0FfQVRPTV1dLmlzX2NvbnN0KSB7Ci0JCQkJZm9sZF9vcChjc3RhdGUsIG9wdF9zdGF0ZSwgcywgdmFsW0FfQVRPTV0sIHZhbFtYX0FUT01dKTsKKwkJCQlmb2xkX29wKG9wdF9zdGF0ZSwgcywgdmFsW0FfQVRPTV0sIHZhbFtYX0FUT01dKTsKIAkJCQl2YWxbQV9BVE9NXSA9IEsocy0+ayk7CiAJCQl9CiAJCQllbHNlIHsKIAkJCQlzLT5jb2RlID0gQlBGX0FMVXxCUEZfS3xvcDsKIAkJCQlzLT5rID0gb3B0X3N0YXRlLT52bWFwW3ZhbFtYX0FUT01dXS5jb25zdF92YWw7CisJCQkJaWYgKChvcCA9PSBCUEZfTFNIIHx8IG9wID09IEJQRl9SU0gpICYmCisJCQkJICAgIHMtPmsgPiAzMSkKKwkJCQkJb3B0X2Vycm9yKG9wdF9zdGF0ZSwKKwkJCQkJICAgICJzaGlmdCBieSBtb3JlIHRoYW4gMzEgYml0cyIpOworCQkJCS8qCisJCQkJICogWFhYIC0gb3B0aW1pemVyIGxvb3AgZGV0ZWN0aW9uLgorCQkJCSAqLworCQkJCW9wdF9zdGF0ZS0+bm9uX2JyYW5jaF9tb3ZlbWVudF9wZXJmb3JtZWQgPSAxOwogCQkJCW9wdF9zdGF0ZS0+ZG9uZSA9IDA7CiAJCQkJdmFsW0FfQVRPTV0gPQogCQkJCQlGKG9wdF9zdGF0ZSwgcy0+Y29kZSwgdmFsW0FfQVRPTV0sIEsocy0+aykpOwpAQCAtMTIwMSw2ICsxMzg1LDEwIEBACiAJCWlmIChhbHRlciAmJiBvcHRfc3RhdGUtPnZtYXBbdl0uaXNfY29uc3QpIHsKIAkJCXMtPmNvZGUgPSBCUEZfTER8QlBGX0lNTTsKIAkJCXMtPmsgPSBvcHRfc3RhdGUtPnZtYXBbdl0uY29uc3RfdmFsOworCQkJLyoKKwkJCSAqIFhYWCAtIG9wdGltaXplciBsb29wIGRldGVjdGlvbi4KKwkJCSAqLworCQkJb3B0X3N0YXRlLT5ub25fYnJhbmNoX21vdmVtZW50X3BlcmZvcm1lZCA9IDE7CiAJCQlvcHRfc3RhdGUtPmRvbmUgPSAwOwogCQl9CiAJCXZzdG9yZShzLCAmdmFsW0FfQVRPTV0sIHYsIGFsdGVyKTsKQEAgLTEyMTUsNiArMTQwMywxMCBAQAogCQlpZiAoYWx0ZXIgJiYgb3B0X3N0YXRlLT52bWFwW3ZdLmlzX2NvbnN0KSB7CiAJCQlzLT5jb2RlID0gQlBGX0xEWHxCUEZfSU1NOwogCQkJcy0+ayA9IG9wdF9zdGF0ZS0+dm1hcFt2XS5jb25zdF92YWw7CisJCQkvKgorCQkJICogWFhYIC0gb3B0aW1pemVyIGxvb3AgZGV0ZWN0aW9uLgorCQkJICovCisJCQlvcHRfc3RhdGUtPm5vbl9icmFuY2hfbW92ZW1lbnRfcGVyZm9ybWVkID0gMTsKIAkJCW9wdF9zdGF0ZS0+ZG9uZSA9IDA7CiAJCX0KIAkJdnN0b3JlKHMsICZ2YWxbWF9BVE9NXSwgdiwgYWx0ZXIpOwpAQCAtMTI0Nyw2ICsxNDM5LDEwIEBACiAJYXRvbSA9IGF0b21kZWYocyk7CiAJaWYgKGF0b20gPj0gMCkgewogCQlpZiAobGFzdFthdG9tXSkgeworCQkJLyoKKwkJCSAqIFhYWCAtIG9wdGltaXplciBsb29wIGRldGVjdGlvbi4KKwkJCSAqLworCQkJb3B0X3N0YXRlLT5ub25fYnJhbmNoX21vdmVtZW50X3BlcmZvcm1lZCA9IDE7CiAJCQlvcHRfc3RhdGUtPmRvbmUgPSAwOwogCQkJbGFzdFthdG9tXS0+Y29kZSA9IE5PUDsKIAkJfQpAQCAtMTI3MCwxOCArMTQ2NiwyMSBAQAogCWZvciAoYXRvbSA9IDA7IGF0b20gPCBOX0FUT01TOyArK2F0b20pCiAJCWlmIChsYXN0W2F0b21dICYmICFBVE9NRUxFTShiLT5vdXRfdXNlLCBhdG9tKSkgewogCQkJbGFzdFthdG9tXS0+Y29kZSA9IE5PUDsKKwkJCS8qCisJCQkgKiBYWFggLSBvcHRpbWl6ZXIgbG9vcCBkZXRlY3Rpb24uCisJCQkgKi8KKwkJCW9wdF9zdGF0ZS0+bm9uX2JyYW5jaF9tb3ZlbWVudF9wZXJmb3JtZWQgPSAxOwogCQkJb3B0X3N0YXRlLT5kb25lID0gMDsKIAkJfQogfQogCiBzdGF0aWMgdm9pZAotb3B0X2Jsayhjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIG9wdF9zdGF0ZV90ICpvcHRfc3RhdGUsCi0gICAgc3RydWN0IGJsb2NrICpiLCBpbnQgZG9fc3RtdHMpCitvcHRfYmxrKG9wdF9zdGF0ZV90ICpvcHRfc3RhdGUsIHN0cnVjdCBibG9jayAqYiwgaW50IGRvX3N0bXRzKQogewogCXN0cnVjdCBzbGlzdCAqczsKIAlzdHJ1Y3QgZWRnZSAqcDsKIAlpbnQgaTsKLQlicGZfaW50MzIgYXZhbCwgeHZhbDsKKwlicGZfdV9pbnQzMiBhdmFsLCB4dmFsOwogCiAjaWYgMAogCWZvciAocyA9IGItPnN0bXRzOyBzICYmIHMtPm5leHQ7IHMgPSBzLT5uZXh0KQpAQCAtMTMyNiw3ICsxNTI1LDcgQEAKIAlhdmFsID0gYi0+dmFsW0FfQVRPTV07CiAJeHZhbCA9IGItPnZhbFtYX0FUT01dOwogCWZvciAocyA9IGItPnN0bXRzOyBzOyBzID0gcy0+bmV4dCkKLQkJb3B0X3N0bXQoY3N0YXRlLCBvcHRfc3RhdGUsICZzLT5zLCBiLT52YWwsIGRvX3N0bXRzKTsKKwkJb3B0X3N0bXQob3B0X3N0YXRlLCAmcy0+cywgYi0+dmFsLCBkb19zdG10cyk7CiAKIAkvKgogCSAqIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2U6IGlmIHdlIGRvbid0IHVzZSBhbnl0aGluZyBmcm9tIHRoaXMKQEAgLTEzMzQsNyArMTUzMywxMCBAQAogCSAqIHZhbHVlIHRoYXQgaXMgYWxyZWFkeSB0aGVyZSwgb3IgaWYgdGhpcyBibG9jayBpcyBhIHJldHVybiwKIAkgKiBlbGltaW5hdGUgYWxsIHRoZSBzdGF0ZW1lbnRzLgogCSAqCi0JICogWFhYIC0gd2hhdCBpZiBpdCBkb2VzIGEgc3RvcmU/CisJICogWFhYIC0gd2hhdCBpZiBpdCBkb2VzIGEgc3RvcmU/ICBQcmVzdW1hYmx5IHRoYXQgZmFsbHMgdW5kZXIKKwkgKiB0aGUgaGVhZGluZyBvZiAiaWYgd2UgZG9uJ3QgdXNlIGFueXRoaW5nIGZyb20gdGhpcyBibG9jayIsCisJICogaS5lLiwgaWYgd2UgdXNlIGFueSBtZW1vcnkgbG9jYXRpb24gc2V0IHRvIGEgZGlmZmVyZW50CisJICogdmFsdWUgYnkgdGhpcyBibG9jaywgdGhlbiB3ZSB1c2Ugc29tZXRoaW5nIGZyb20gdGhpcyBibG9jay4KIAkgKgogCSAqIFhYWCAtIHdoeSBkb2VzIGl0IG1hdHRlciB3aGV0aGVyIHdlIHVzZSBhbnl0aGluZyBmcm9tIHRoaXMKIAkgKiBibG9jaz8gIElmIHRoZSBhY2N1bXVsYXRvciBvciBpbmRleCByZWdpc3RlciBkb2Vzbid0IGNoYW5nZQpAQCAtMTM1OCw2ICsxNTYwLDEwIEBACiAJICAgICBCUEZfQ0xBU1MoYi0+cy5jb2RlKSA9PSBCUEZfUkVUKSkgewogCQlpZiAoYi0+c3RtdHMgIT0gMCkgewogCQkJYi0+c3RtdHMgPSAwOworCQkJLyoKKwkJCSAqIFhYWCAtIG9wdGltaXplciBsb29wIGRldGVjdGlvbi4KKwkJCSAqLworCQkJb3B0X3N0YXRlLT5ub25fYnJhbmNoX21vdmVtZW50X3BlcmZvcm1lZCA9IDE7CiAJCQlvcHRfc3RhdGUtPmRvbmUgPSAwOwogCQl9CiAJfSBlbHNlIHsKQEAgLTEzOTYsMTkgKzE2MDIsNDEgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIEdpdmVuIGEgYmxvY2sgdGhhdCBpcyB0aGUgc3VjY2Vzc29yIG9mIGFuIGVkZ2UsIGFuZCBhbiBlZGdlIHRoYXQKKyAqIGRvbWluYXRlcyB0aGF0IGVkZ2UsIHJldHVybiBlaXRoZXIgYSBwb2ludGVyIHRvIGEgY2hpbGQgb2YgdGhhdAorICogYmxvY2sgKGEgYmxvY2sgdG8gd2hpY2ggdGhhdCBibG9jayBqdW1wcykgaWYgdGhhdCBibG9jayBpcyBhCisgKiBjYW5kaWRhdGUgdG8gcmVwbGFjZSB0aGUgc3VjY2Vzc29yIG9mIHRoZSBsYXR0ZXIgZWRnZSBvciBOVUxMCisgKiBpZiBuZWl0aGVyIG9mIHRoZSBjaGlsZHJlbiBvZiB0aGUgZmlyc3QgYmxvY2sgYXJlIGNhbmRpZGF0ZXMuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgYmxvY2sgKgogZm9sZF9lZGdlKHN0cnVjdCBibG9jayAqY2hpbGQsIHN0cnVjdCBlZGdlICplcCkKIHsKIAlpbnQgc2Vuc2U7Ci0JaW50IGF2YWwwLCBhdmFsMSwgb3ZhbDAsIG92YWwxOworCWJwZl91X2ludDMyIGF2YWwwLCBhdmFsMSwgb3ZhbDAsIG92YWwxOwogCWludCBjb2RlID0gZXAtPmNvZGU7CiAKIAlpZiAoY29kZSA8IDApIHsKKwkJLyoKKwkJICogVGhpcyBlZGdlIGlzIGEgImJyYW5jaCBpZiBmYWxzZSIgZWRnZS4KKwkJICovCiAJCWNvZGUgPSAtY29kZTsKIAkJc2Vuc2UgPSAwOwotCX0gZWxzZQorCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoaXMgZWRnZSBpcyBhICJicmFuY2ggaWYgdHJ1ZSIgZWRnZS4KKwkJICovCiAJCXNlbnNlID0gMTsKKwl9CiAKKwkvKgorCSAqIElmIHRoZSBvcGNvZGUgZm9yIHRoZSBicmFuY2ggYXQgdGhlIGVuZCBvZiB0aGUgYmxvY2sgd2UKKwkgKiB3ZXJlIGhhbmRlZCBpc24ndCB0aGUgc2FtZSBhcyB0aGUgb3Bjb2RlIGZvciB0aGUgYnJhbmNoCisJICogdG8gd2hpY2ggdGhlIGVkZ2Ugd2Ugd2VyZSBoYW5kZWQgY29ycmVzcG9uZHMsIHRoZSB0ZXN0cworCSAqIGZvciB0aG9zZSBicmFuY2hlcyBhcmVuJ3QgdGVzdGluZyB0aGUgc2FtZSBjb25kaXRpb25zLAorCSAqIHNvIHRoZSBibG9ja3MgdG8gd2hpY2ggdGhlIGZpcnN0IGJsb2NrIGJyYW5jaGVzIGFyZW4ndAorCSAqIGNhbmRpZGF0ZXMgdG8gcmVwbGFjZSB0aGUgc3VjY2Vzc29yIG9mIHRoZSBlZGdlLgorCSAqLwogCWlmIChjaGlsZC0+cy5jb2RlICE9IGNvZGUpCiAJCXJldHVybiAwOwogCkBAIC0xNDE3LDEzICsxNjQ1LDIxIEBACiAJYXZhbDEgPSBlcC0+cHJlZC0+dmFsW0FfQVRPTV07CiAJb3ZhbDEgPSBlcC0+cHJlZC0+b3ZhbDsKIAorCS8qCisJICogSWYgdGhlIEEgcmVnaXN0ZXIgdmFsdWUgb24gZXhpdCBmcm9tIHRoZSBzdWNjZXNzb3IgYmxvY2sKKwkgKiBpc24ndCB0aGUgc2FtZSBhcyB0aGUgQSByZWdpc3RlciB2YWx1ZSBvbiBleGl0IGZyb20gdGhlCisJICogcHJlZGVjZXNzb3Igb2YgdGhlIGVkZ2UsIHRoZSBibG9ja3MgdG8gd2hpY2ggdGhlIGZpcnN0CisJICogYmxvY2sgYnJhbmNoZXMgYXJlbid0IGNhbmRpZGF0ZXMgdG8gcmVwbGFjZSB0aGUgc3VjY2Vzc29yCisJICogb2YgdGhlIGVkZ2UuCisJICovCiAJaWYgKGF2YWwwICE9IGF2YWwxKQogCQlyZXR1cm4gMDsKIAogCWlmIChvdmFsMCA9PSBvdmFsMSkKIAkJLyoKIAkJICogVGhlIG9wZXJhbmRzIG9mIHRoZSBicmFuY2ggaW5zdHJ1Y3Rpb25zIGFyZQotCQkgKiBpZGVudGljYWwsIHNvIHRoZSByZXN1bHQgaXMgdHJ1ZSBpZiBhIHRydWUKKwkJICogaWRlbnRpY2FsLCBzbyB0aGUgYnJhbmNoZXMgYXJlIHRlc3RpbmcgdGhlCisJCSAqIHNhbWUgY29uZGl0aW9uLCBhbmQgdGhlIHJlc3VsdCBpcyB0cnVlIGlmIGEgdHJ1ZQogCQkgKiBicmFuY2ggd2FzIHRha2VuIHRvIGdldCBoZXJlLCBvdGhlcndpc2UgZmFsc2UuCiAJCSAqLwogCQlyZXR1cm4gc2Vuc2UgPyBKVChjaGlsZCkgOiBKRihjaGlsZCk7CkBAIC0xNDQ4LDIxICsxNjg0LDU4IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBJZiB3ZSBjYW4gbWFrZSB0aGlzIGVkZ2UgZ28gZGlyZWN0bHkgdG8gYSBjaGlsZCBvZiB0aGUgZWRnZSdzIGN1cnJlbnQKKyAqIHN1Y2Nlc3NvciwgZG8gc28uCisgKi8KIHN0YXRpYyB2b2lkCiBvcHRfaihvcHRfc3RhdGVfdCAqb3B0X3N0YXRlLCBzdHJ1Y3QgZWRnZSAqZXApCiB7Ci0JcmVnaXN0ZXIgaW50IGksIGs7CisJcmVnaXN0ZXIgdV9pbnQgaSwgazsKIAlyZWdpc3RlciBzdHJ1Y3QgYmxvY2sgKnRhcmdldDsKIAorCS8qCisJICogRG9lcyB0aGlzIGVkZ2UgZ28gdG8gYSBibG9jayB3aGVyZSwgaWYgdGhlIHRlc3QKKwkgKiBhdCB0aGUgZW5kIG9mIGl0IHN1Y2NlZWRzLCBpdCBnb2VzIHRvIGEgYmxvY2sKKwkgKiB0aGF0J3MgYSBsZWFmIG5vZGUgb2YgdGhlIERBRywgaS5lLiBhIHJldHVybgorCSAqIHN0YXRlbWVudD8KKwkgKiBJZiBzbywgdGhlcmUncyBub3RoaW5nIHRvIG9wdGltaXplLgorCSAqLwogCWlmIChKVChlcC0+c3VjYykgPT0gMCkKIAkJcmV0dXJuOwogCisJLyoKKwkgKiBEb2VzIHRoaXMgZWRnZSBnbyB0byBhIGJsb2NrIHRoYXQgZ29lcywgaW4gdHVybiwgdG8KKwkgKiB0aGUgc2FtZSBibG9jayByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHRlc3QgYXQgdGhlCisJICogZW5kIHN1Y2NlZWRzIG9yIGZhaWxzPworCSAqLwogCWlmIChKVChlcC0+c3VjYykgPT0gSkYoZXAtPnN1Y2MpKSB7CiAJCS8qCiAJCSAqIENvbW1vbiBicmFuY2ggdGFyZ2V0cyBjYW4gYmUgZWxpbWluYXRlZCwgcHJvdmlkZWQKIAkJICogdGhlcmUgaXMgbm8gZGF0YSBkZXBlbmRlbmN5LgorCQkgKgorCQkgKiBDaGVjayB3aGV0aGVyIGFueSByZWdpc3RlciB1c2VkIG9uIGV4aXQgZnJvbSB0aGUKKwkJICogYmxvY2sgdG8gd2hpY2ggdGhlIHN1Y2Nlc3NvciBvZiB0aGlzIGVkZ2UgZ29lcworCQkgKiBoYXMgYSB2YWx1ZSBhdCB0aGF0IHBvaW50IHRoYXQncyBkaWZmZXJlbnQgZnJvbQorCQkgKiB0aGUgdmFsdWUgaXQgaGFzIG9uIGV4aXQgZnJvbSB0aGUgcHJlZGVjZXNzb3Igb2YKKwkJICogdGhpcyBlZGdlLiAgSWYgbm90LCB0aGUgcHJlZGVjZXNzb3Igb2YgdGhpcyBlZGdlCisJCSAqIGNhbiBqdXN0IGdvIHRvIHRoZSBibG9jayB0byB3aGljaCB0aGUgc3VjY2Vzc29yCisJCSAqIG9mIHRoaXMgZWRnZSBnb2VzLCBieXBhc3NpbmcgdGhlIHN1Y2Nlc3NvciBvZiB0aGlzCisJCSAqIGVkZ2UsIGFzIHRoZSBzdWNjZXNzb3Igb2YgdGhpcyBlZGdlIGlzbid0IGRvaW5nCisJCSAqIGFueSBjYWxjdWxhdGlvbnMgd2hvc2UgcmVzdWx0cyBhcmUgZGlmZmVyZW50CisJCSAqIGZyb20gd2hhdCB0aGUgYmxvY2tzIGJlZm9yZSBpdCBkaWQgYW5kIGlzbid0CisJCSAqIGRvaW5nIGFueSB0ZXN0cyB0aGUgcmVzdWx0cyBvZiB3aGljaCBtYXR0ZXIuCiAJCSAqLwotCQlpZiAoIXVzZV9jb25mbGljdChlcC0+cHJlZCwgZXAtPnN1Y2MtPmV0LnN1Y2MpKSB7CisJCWlmICghdXNlX2NvbmZsaWN0KGVwLT5wcmVkLCBKVChlcC0+c3VjYykpKSB7CisJCQkvKgorCQkJICogTm8sIHRoZXJlIGlzbid0LgorCQkJICogTWFrZSB0aGlzIGVkZ2UgZ28gdG8gdGhlIGJsb2NrIHRvCisJCQkgKiB3aGljaCB0aGUgc3VjY2Vzc29yIG9mIHRoYXQgZWRnZQorCQkJICogZ29lcy4KKwkJCSAqCisJCQkgKiBYWFggLSBvcHRpbWl6ZXIgbG9vcCBkZXRlY3Rpb24uCisJCQkgKi8KKwkJCW9wdF9zdGF0ZS0+bm9uX2JyYW5jaF9tb3ZlbWVudF9wZXJmb3JtZWQgPSAxOwogCQkJb3B0X3N0YXRlLT5kb25lID0gMDsKIAkJCWVwLT5zdWNjID0gSlQoZXAtPnN1Y2MpOwogCQl9CkBAIC0xNDc2LDE5ICsxNzQ5LDM4IEBACiAJICovCiAgdG9wOgogCWZvciAoaSA9IDA7IGkgPCBvcHRfc3RhdGUtPmVkZ2V3b3JkczsgKytpKSB7CisJCS8qIGkndGggd29yZCBpbiB0aGUgYml0c2V0IG9mIGRvbWluYXRvcnMgKi8KIAkJcmVnaXN0ZXIgYnBmX3VfaW50MzIgeCA9IGVwLT5lZG9tW2ldOwogCiAJCXdoaWxlICh4ICE9IDApIHsKKwkJCS8qIEZpbmQgdGhlIG5leHQgZG9taW5hdG9yIGluIHRoYXQgd29yZCBhbmQgbWFyayBpdCBhcyBmb3VuZCAqLwogCQkJayA9IGxvd2VzdF9zZXRfYml0KHgpOwotCQkJeCAmPX4gKDEgPDwgayk7CisJCQl4ICY9fiAoKGJwZl91X2ludDMyKTEgPDwgayk7CiAJCQlrICs9IGkgKiBCSVRTX1BFUl9XT1JEOwogCiAJCQl0YXJnZXQgPSBmb2xkX2VkZ2UoZXAtPnN1Y2MsIG9wdF9zdGF0ZS0+ZWRnZXNba10pOwogCQkJLyoKKwkJCSAqIFdlIGhhdmUgYSBjYW5kaWRhdGUgdG8gcmVwbGFjZSB0aGUgc3VjY2Vzc29yCisJCQkgKiBvZiBlcC4KKwkJCSAqCiAJCQkgKiBDaGVjayB0aGF0IHRoZXJlIGlzIG5vIGRhdGEgZGVwZW5kZW5jeSBiZXR3ZWVuCi0JCQkgKiBub2RlcyB0aGF0IHdpbGwgYmUgdmlvbGF0ZWQgaWYgd2UgbW92ZSB0aGUgZWRnZS4KKwkJCSAqIG5vZGVzIHRoYXQgd2lsbCBiZSB2aW9sYXRlZCBpZiB3ZSBtb3ZlIHRoZSBlZGdlOworCQkJICogaS5lLiwgaWYgYW55IHJlZ2lzdGVyIHVzZWQgb24gZXhpdCBmcm9tIHRoZQorCQkJICogY2FuZGlkYXRlIGhhcyBhIHZhbHVlIGF0IHRoYXQgcG9pbnQgZGlmZmVyZW50CisJCQkgKiBmcm9tIHRoZSB2YWx1ZSBpdCBoYXMgd2hlbiB3ZSBleGl0IHRoZQorCQkJICogcHJlZGVjZXNzb3Igb2YgdGhhdCBlZGdlLCB0aGVyZSdzIGEgZGF0YQorCQkJICogZGVwZW5kZW5jeSB0aGF0IHdpbGwgYmUgdmlvbGF0ZWQuCiAJCQkgKi8KIAkJCWlmICh0YXJnZXQgIT0gMCAmJiAhdXNlX2NvbmZsaWN0KGVwLT5wcmVkLCB0YXJnZXQpKSB7CisJCQkJLyoKKwkJCQkgKiBJdCdzIHNhZmUgdG8gcmVwbGFjZSB0aGUgc3VjY2Vzc29yIG9mCisJCQkJICogZXA7IGRvIHNvLCBhbmQgbm90ZSB0aGF0IHdlJ3ZlIG1hZGUKKwkJCQkgKiBhdCBsZWFzdCBvbmUgY2hhbmdlLgorCQkJCSAqCisJCQkJICogWFhYIC0gdGhpcyBpcyBvbmUgb2YgdGhlIG9wZXJhdGlvbnMgdGhhdAorCQkJCSAqIGhhcHBlbnMgd2hlbiB0aGUgb3B0aW1pemVyIGdldHMgaW50bworCQkJCSAqIG9uZSBvZiB0aG9zZSBpbmZpbml0ZSBsb29wcy4KKwkJCQkgKi8KIAkJCQlvcHRfc3RhdGUtPmRvbmUgPSAwOwogCQkJCWVwLT5zdWNjID0gdGFyZ2V0OwogCQkJCWlmIChKVCh0YXJnZXQpICE9IDApCkBAIC0xNTAyLDExICsxNzk0LDMwIEBACiAJfQogfQogCi0KKy8qCisgKiBYWFggLSBpcyB0aGlzLCBhbmQgYW5kX3B1bGx1cCgpLCB3aGF0J3MgZGVzY3JpYmVkIGluIHNlY3Rpb24gNi4xLjIKKyAqICJQcmVkaWNhdGUgQXNzZXJ0aW9uIFByb3BhZ2F0aW9uIiBpbiB0aGUgQlBGKyBwYXBlcj8KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBsb29rcyBhdCBibG9jayBkb21pbmF0b3JzLCBub3QgZWRnZSBkb21pbmF0b3JzLgorICogRG9uJ3QgdGhpbmsgc28uCisgKgorICogIkEgb3IgQiIgY29tcGlsZXMgaW50bworICoKKyAqICAgICAgICAgIEEKKyAqICAgICAgIHQgLyBcIGYKKyAqICAgICAgICAvICAgQgorICogICAgICAgLyB0IC8gXCBmCisgKiAgICAgIFwgICAvCisgKiAgICAgICBcIC8KKyAqICAgICAgICBYCisgKgorICoKKyAqLwogc3RhdGljIHZvaWQKIG9yX3B1bGx1cChvcHRfc3RhdGVfdCAqb3B0X3N0YXRlLCBzdHJ1Y3QgYmxvY2sgKmIpCiB7Ci0JaW50IHZhbCwgYXRfdG9wOworCWJwZl91X2ludDMyIHZhbDsKKwlpbnQgYXRfdG9wOwogCXN0cnVjdCBibG9jayAqcHVsbDsKIAlzdHJ1Y3QgYmxvY2sgKipkaWZmcCwgKipzYW1lcDsKIAlzdHJ1Y3QgZWRnZSAqZXA7CkBAIC0xNTI0LDM5ICsxODM1LDEwNiBAQAogCQlpZiAodmFsICE9IGVwLT5wcmVkLT52YWxbQV9BVE9NXSkKIAkJCXJldHVybjsKIAorCS8qCisJICogRm9yIHRoZSBmaXJzdCBlZGdlIGluIHRoZSBsaXN0IG9mIGVkZ2VzIGNvbWluZyBpbnRvIHRoaXMgYmxvY2ssCisJICogc2VlIHdoZXRoZXIgdGhlIHByZWRlY2Vzc29yIG9mIHRoYXQgZWRnZSBjb21lcyBoZXJlIHZpYSBhIHRydWUKKwkgKiBicmFuY2ggb3IgYSBmYWxzZSBicmFuY2guCisJICovCiAJaWYgKEpUKGItPmluX2VkZ2VzLT5wcmVkKSA9PSBiKQotCQlkaWZmcCA9ICZKVChiLT5pbl9lZGdlcy0+cHJlZCk7CisJCWRpZmZwID0gJkpUKGItPmluX2VkZ2VzLT5wcmVkKTsJLyoganQgKi8KIAllbHNlCi0JCWRpZmZwID0gJkpGKGItPmluX2VkZ2VzLT5wcmVkKTsKKwkJZGlmZnAgPSAmSkYoYi0+aW5fZWRnZXMtPnByZWQpOwkvKiBqZiAqLwogCisJLyoKKwkgKiBkaWZmcCBpcyBhIHBvaW50ZXIgdG8gYSBwb2ludGVyIHRvIHRoZSBibG9jay4KKwkgKgorCSAqIEdvIGRvd24gdGhlIGZhbHNlIGNoYWluIGxvb2tpbmcgYXMgZmFyIGFzIHlvdSBjYW4sCisJICogbWFraW5nIHN1cmUgdGhhdCBlYWNoIGp1bXAtY29tcGFyZSBpcyBkb2luZyB0aGUKKwkgKiBzYW1lIGFzIHRoZSBvcmlnaW5hbCBibG9jay4KKwkgKgorCSAqIElmIHlvdSByZWFjaCB0aGUgYm90dG9tIGJlZm9yZSB5b3UgcmVhY2ggYQorCSAqIGRpZmZlcmVudCBqdW1wLWNvbXBhcmUsIGp1c3QgZXhpdC4gIFRoZXJlJ3Mgbm90aGluZworCSAqIHRvIGRvIGhlcmUuICBYWFggLSBubywgdGhpcyB2ZXJzaW9uIGlzIGNoZWNraW5nIGZvcgorCSAqIHRoZSB2YWx1ZSBsZWF2aW5nIHRoZSBibG9jazsgdGhhdCdzIGZyb20gdGhlIEJQRisKKwkgKiBwdWxsdXAgcm91dGluZS4KKwkgKi8KIAlhdF90b3AgPSAxOwogCWZvciAoOzspIHsKKwkJLyoKKwkJICogRG9uZSBpZiB0aGF0J3Mgbm90IGdvaW5nIGFueXdoZXJlIFhYWAorCQkgKi8KIAkJaWYgKCpkaWZmcCA9PSAwKQogCQkJcmV0dXJuOwogCisJCS8qCisJCSAqIERvbmUgaWYgdGhhdCBwcmVkZWNlc3NvciBibGFoIGJsYWggYmxhaCBpc24ndAorCQkgKiBnb2luZyB0aGUgc2FtZSBwbGFjZSB3ZSdyZSBnb2luZyBYWFgKKwkJICoKKwkJICogRG9lcyB0aGUgdHJ1ZSBlZGdlIG9mIHRoaXMgYmxvY2sgcG9pbnQgdG8gdGhlIHNhbWUKKwkJICogbG9jYXRpb24gYXMgdGhlIHRydWUgZWRnZSBvZiBiPworCQkgKi8KIAkJaWYgKEpUKCpkaWZmcCkgIT0gSlQoYikpCiAJCQlyZXR1cm47CiAKKwkJLyoKKwkJICogRG9uZSBpZiB0aGlzIG5vZGUgaXNuJ3QgYSBkb21pbmF0b3Igb2YgdGhhdAorCQkgKiBub2RlIGJsYWggYmxhaCBibGFoIFhYWAorCQkgKgorCQkgKiBEb2VzIGIgZG9taW5hdGUgZGlmZnA/CisJCSAqLwogCQlpZiAoIVNFVF9NRU1CRVIoKCpkaWZmcCktPmRvbSwgYi0+aWQpKQogCQkJcmV0dXJuOwogCisJCS8qCisJCSAqIEJyZWFrIG91dCBvZiB0aGUgbG9vcCBpZiB0aGF0IG5vZGUncyB2YWx1ZSBvZiBBCisJCSAqIGlzbid0IHRoZSB2YWx1ZSBvZiBBIGFib3ZlIFhYWAorCQkgKi8KIAkJaWYgKCgqZGlmZnApLT52YWxbQV9BVE9NXSAhPSB2YWwpCiAJCQlicmVhazsKIAorCQkvKgorCQkgKiBHZXQgdGhlIEpGIGZvciB0aGF0IG5vZGUgWFhYCisJCSAqIEdvIGRvd24gdGhlIGZhbHNlIHBhdGguCisJCSAqLwogCQlkaWZmcCA9ICZKRigqZGlmZnApOwogCQlhdF90b3AgPSAwOwogCX0KKworCS8qCisJICogTm93IHRoYXQgd2UndmUgZm91bmQgYSBkaWZmZXJlbnQganVtcC1jb21wYXJlIGluIGEgY2hhaW4KKwkgKiBiZWxvdyBiLCBzZWFyY2ggZnVydGhlciBkb3duIHVudGlsIHdlIGZpbmQgYW5vdGhlcgorCSAqIGp1bXAtY29tcGFyZSB0aGF0IGxvb2tzIGF0IHRoZSBvcmlnaW5hbCB2YWx1ZS4gIFRoaXMKKwkgKiBqdW1wLWNvbXBhcmUgc2hvdWxkIGdldCBwdWxsZWQgdXAuICBYWFggYWdhaW4gd2UncmUKKwkgKiBjb21wYXJpbmcgdmFsdWVzIG5vdCBqdW1wLWNvbXBhcmVzLgorCSAqLwogCXNhbWVwID0gJkpGKCpkaWZmcCk7CiAJZm9yICg7OykgeworCQkvKgorCQkgKiBEb25lIGlmIHRoYXQncyBub3QgZ29pbmcgYW55d2hlcmUgWFhYCisJCSAqLwogCQlpZiAoKnNhbWVwID09IDApCiAJCQlyZXR1cm47CiAKKwkJLyoKKwkJICogRG9uZSBpZiB0aGF0IHByZWRlY2Vzc29yIGJsYWggYmxhaCBibGFoIGlzbid0CisJCSAqIGdvaW5nIHRoZSBzYW1lIHBsYWNlIHdlJ3JlIGdvaW5nIFhYWAorCQkgKi8KIAkJaWYgKEpUKCpzYW1lcCkgIT0gSlQoYikpCiAJCQlyZXR1cm47CiAKKwkJLyoKKwkJICogRG9uZSBpZiB0aGlzIG5vZGUgaXNuJ3QgYSBkb21pbmF0b3Igb2YgdGhhdAorCQkgKiBub2RlIGJsYWggYmxhaCBibGFoIFhYWAorCQkgKgorCQkgKiBEb2VzIGIgZG9taW5hdGUgc2FtZXA/CisJCSAqLwogCQlpZiAoIVNFVF9NRU1CRVIoKCpzYW1lcCktPmRvbSwgYi0+aWQpKQogCQkJcmV0dXJuOwogCisJCS8qCisJCSAqIEJyZWFrIG91dCBvZiB0aGUgbG9vcCBpZiB0aGF0IG5vZGUncyB2YWx1ZSBvZiBBCisJCSAqIGlzIHRoZSB2YWx1ZSBvZiBBIGFib3ZlIFhYWAorCQkgKi8KIAkJaWYgKCgqc2FtZXApLT52YWxbQV9BVE9NXSA9PSB2YWwpCiAJCQlicmVhazsKIApAQCAtMTU5MiwxMyArMTk3MCwxOCBAQAogCWVsc2UKIAkJKmRpZmZwID0gcHVsbDsKIAorCS8qCisJICogWFhYIC0gdGhpcyBpcyBvbmUgb2YgdGhlIG9wZXJhdGlvbnMgdGhhdCBoYXBwZW5zIHdoZW4gdGhlCisJICogb3B0aW1pemVyIGdldHMgaW50byBvbmUgb2YgdGhvc2UgaW5maW5pdGUgbG9vcHMuCisJICovCiAJb3B0X3N0YXRlLT5kb25lID0gMDsKIH0KIAogc3RhdGljIHZvaWQKIGFuZF9wdWxsdXAob3B0X3N0YXRlX3QgKm9wdF9zdGF0ZSwgc3RydWN0IGJsb2NrICpiKQogewotCWludCB2YWwsIGF0X3RvcDsKKwlicGZfdV9pbnQzMiB2YWw7CisJaW50IGF0X3RvcDsKIAlzdHJ1Y3QgYmxvY2sgKnB1bGw7CiAJc3RydWN0IGJsb2NrICoqZGlmZnAsICoqc2FtZXA7CiAJc3RydWN0IGVkZ2UgKmVwOwpAQCAtMTY4MywxMiArMjA2NiwxNSBAQAogCWVsc2UKIAkJKmRpZmZwID0gcHVsbDsKIAorCS8qCisJICogWFhYIC0gdGhpcyBpcyBvbmUgb2YgdGhlIG9wZXJhdGlvbnMgdGhhdCBoYXBwZW5zIHdoZW4gdGhlCisJICogb3B0aW1pemVyIGdldHMgaW50byBvbmUgb2YgdGhvc2UgaW5maW5pdGUgbG9vcHMuCisJICovCiAJb3B0X3N0YXRlLT5kb25lID0gMDsKIH0KIAogc3RhdGljIHZvaWQKLW9wdF9ibGtzKGNvbXBpbGVyX3N0YXRlX3QgKmNzdGF0ZSwgb3B0X3N0YXRlX3QgKm9wdF9zdGF0ZSwgc3RydWN0IGljb2RlICppYywKLSAgICBpbnQgZG9fc3RtdHMpCitvcHRfYmxrcyhvcHRfc3RhdGVfdCAqb3B0X3N0YXRlLCBzdHJ1Y3QgaWNvZGUgKmljLCBpbnQgZG9fc3RtdHMpCiB7CiAJaW50IGksIG1heGxldmVsOwogCXN0cnVjdCBibG9jayAqcDsKQEAgLTE2OTksMTUgKzIwODUsMjggQEAKIAlmaW5kX2luZWRnZXMob3B0X3N0YXRlLCBpYy0+cm9vdCk7CiAJZm9yIChpID0gbWF4bGV2ZWw7IGkgPj0gMDsgLS1pKQogCQlmb3IgKHAgPSBvcHRfc3RhdGUtPmxldmVsc1tpXTsgcDsgcCA9IHAtPmxpbmspCi0JCQlvcHRfYmxrKGNzdGF0ZSwgb3B0X3N0YXRlLCBwLCBkb19zdG10cyk7CisJCQlvcHRfYmxrKG9wdF9zdGF0ZSwgcCwgZG9fc3RtdHMpOwogCiAJaWYgKGRvX3N0bXRzKQogCQkvKgogCQkgKiBObyBwb2ludCB0cnlpbmcgdG8gbW92ZSBicmFuY2hlczsgaXQgY2FuJ3QgcG9zc2libHkKIAkJICogbWFrZSBhIGRpZmZlcmVuY2UgYXQgdGhpcyBwb2ludC4KKwkJICoKKwkJICogWFhYIC0gdGhpcyBtaWdodCBiZSBhZnRlciB3ZSBkZXRlY3QgYSBsb29wIHdoZXJlCisJCSAqIHdlIHdlcmUganVzdCBsb29waW5nIGluZmluaXRlbHkgbW92aW5nIGJyYW5jaGVzCisJCSAqIGluIHN1Y2ggYSBmYXNoaW9uIHRoYXQgd2Ugd2VudCB0aHJvdWdoIHR3byBvciBtb3JlCisJCSAqIHZlcnNpb25zIG9mIHRoZSBtYWNoaW5lIGNvZGUsIGV2ZW50dWFsbHkgcmV0dXJuaW5nCisJCSAqIHRvIHRoZSBmaXJzdCB2ZXJzaW9uLiAgKFdlJ3JlIHJlYWxseSBub3QgZG9pbmcgYQorCQkgKiBmdWxsIGxvb3AgZGV0ZWN0aW9uLCB3ZSdyZSBqdXN0IHRlc3RpbmcgZm9yIHR3bworCQkgKiBwYXNzZXMgaW4gYSByb3cgd2hlcmUgd2hlcmUgd2UgZG8gbm90aGluZyBidXQKKwkJICogbW92ZSBicmFuY2hlcy4pCiAJCSAqLwogCQlyZXR1cm47CiAKKwkvKgorCSAqIElzIHRoaXMgd2hhdCB0aGUgQlBGKyBwYXBlciBkZXNjcmliZXMgaW4gc2VjdGlvbnMgNi4xLjEsCisJICogNi4xLjIsIGFuZCA2LjEuMz8KKwkgKi8KIAlmb3IgKGkgPSAxOyBpIDw9IG1heGxldmVsOyArK2kpIHsKIAkJZm9yIChwID0gb3B0X3N0YXRlLT5sZXZlbHNbaV07IHA7IHAgPSBwLT5saW5rKSB7CiAJCQlvcHRfaihvcHRfc3RhdGUsICZwLT5ldCk7CkBAIC0xNzM0LDcgKzIxMzMsOCBAQAogc3RhdGljIHZvaWQKIGZpbmRfaW5lZGdlcyhvcHRfc3RhdGVfdCAqb3B0X3N0YXRlLCBzdHJ1Y3QgYmxvY2sgKnJvb3QpCiB7Ci0JaW50IGk7CisJdV9pbnQgaTsKKwlpbnQgbGV2ZWw7CiAJc3RydWN0IGJsb2NrICpiOwogCiAJZm9yIChpID0gMDsgaSA8IG9wdF9zdGF0ZS0+bl9ibG9ja3M7ICsraSkKQEAgLTE3NDQsOCArMjE0NCw4IEBACiAJICogVHJhdmVyc2UgdGhlIGdyYXBoLCBhZGRpbmcgZWFjaCBlZGdlIHRvIHRoZSBwcmVkZWNlc3NvcgogCSAqIGxpc3Qgb2YgaXRzIHN1Y2Nlc3NvcnMuICBTa2lwIHRoZSBsZWF2ZXMgKGkuZS4gbGV2ZWwgMCkuCiAJICovCi0JZm9yIChpID0gcm9vdC0+bGV2ZWw7IGkgPiAwOyAtLWkpIHsKLQkJZm9yIChiID0gb3B0X3N0YXRlLT5sZXZlbHNbaV07IGIgIT0gMDsgYiA9IGItPmxpbmspIHsKKwlmb3IgKGxldmVsID0gcm9vdC0+bGV2ZWw7IGxldmVsID4gMDsgLS1sZXZlbCkgeworCQlmb3IgKGIgPSBvcHRfc3RhdGUtPmxldmVsc1tsZXZlbF07IGIgIT0gMDsgYiA9IGItPmxpbmspIHsKIAkJCWxpbmtfaW5lZGdlKCZiLT5ldCwgSlQoYikpOwogCQkJbGlua19pbmVkZ2UoJmItPmVmLCBKRihiKSk7CiAJCX0KQEAgLTE3NzcsNTkgKzIxNzcsMTIwIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1vcHRfbG9vcChjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIG9wdF9zdGF0ZV90ICpvcHRfc3RhdGUsIHN0cnVjdCBpY29kZSAqaWMsCi0gICAgaW50IGRvX3N0bXRzKQorb3B0X2xvb3Aob3B0X3N0YXRlX3QgKm9wdF9zdGF0ZSwgc3RydWN0IGljb2RlICppYywgaW50IGRvX3N0bXRzKQogewogCiAjaWZkZWYgQkRFQlVHCiAJaWYgKHBjYXBfb3B0aW1pemVyX2RlYnVnID4gMSB8fCBwY2FwX3ByaW50X2RvdF9ncmFwaCkgewogCQlwcmludGYoIm9wdF9sb29wKHJvb3QsICVkKSBiZWdpblxuIiwgZG9fc3RtdHMpOwotCQlvcHRfZHVtcChjc3RhdGUsIGljKTsKKwkJb3B0X2R1bXAob3B0X3N0YXRlLCBpYyk7CiAJfQogI2VuZGlmCi0JZG8geworCisJLyoKKwkgKiBYWFggLSBvcHRpbWl6ZXIgbG9vcCBkZXRlY3Rpb24uCisJICovCisJaW50IGxvb3BfY291bnQgPSAwOworCWZvciAoOzspIHsKIAkJb3B0X3N0YXRlLT5kb25lID0gMTsKKwkJLyoKKwkJICogWFhYIC0gb3B0aW1pemVyIGxvb3AgZGV0ZWN0aW9uLgorCQkgKi8KKwkJb3B0X3N0YXRlLT5ub25fYnJhbmNoX21vdmVtZW50X3BlcmZvcm1lZCA9IDA7CiAJCWZpbmRfbGV2ZWxzKG9wdF9zdGF0ZSwgaWMpOwogCQlmaW5kX2RvbShvcHRfc3RhdGUsIGljLT5yb290KTsKIAkJZmluZF9jbG9zdXJlKG9wdF9zdGF0ZSwgaWMtPnJvb3QpOwogCQlmaW5kX3VkKG9wdF9zdGF0ZSwgaWMtPnJvb3QpOwogCQlmaW5kX2Vkb20ob3B0X3N0YXRlLCBpYy0+cm9vdCk7Ci0JCW9wdF9ibGtzKGNzdGF0ZSwgb3B0X3N0YXRlLCBpYywgZG9fc3RtdHMpOworCQlvcHRfYmxrcyhvcHRfc3RhdGUsIGljLCBkb19zdG10cyk7CiAjaWZkZWYgQkRFQlVHCiAJCWlmIChwY2FwX29wdGltaXplcl9kZWJ1ZyA+IDEgfHwgcGNhcF9wcmludF9kb3RfZ3JhcGgpIHsKIAkJCXByaW50Zigib3B0X2xvb3Aocm9vdCwgJWQpIGJvdHRvbSwgZG9uZT0lZFxuIiwgZG9fc3RtdHMsIG9wdF9zdGF0ZS0+ZG9uZSk7Ci0JCQlvcHRfZHVtcChjc3RhdGUsIGljKTsKKwkJCW9wdF9kdW1wKG9wdF9zdGF0ZSwgaWMpOwogCQl9CiAjZW5kaWYKLQl9IHdoaWxlICghb3B0X3N0YXRlLT5kb25lKTsKKworCQkvKgorCQkgKiBXYXMgYW55dGhpbmcgZG9uZSBpbiB0aGlzIG9wdGltaXplciBwYXNzPworCQkgKi8KKwkJaWYgKG9wdF9zdGF0ZS0+ZG9uZSkgeworCQkJLyoKKwkJCSAqIE5vLCBzbyB3ZSd2ZSByZWFjaGVkIGEgZml4ZWQgcG9pbnQuCisJCQkgKiBXZSdyZSBkb25lLgorCQkJICovCisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFhYWCAtIHdhcyBhbnl0aGluZyBkb25lIG90aGVyIHRoYW4gYnJhbmNoIG1vdmVtZW50CisJCSAqIGluIHRoaXMgcGFzcz8KKwkJICovCisJCWlmIChvcHRfc3RhdGUtPm5vbl9icmFuY2hfbW92ZW1lbnRfcGVyZm9ybWVkKSB7CisJCQkvKgorCQkJICogWWVzLiAgQ2xlYXIgYW55IGxvb3AtZGV0ZWN0aW9uIGNvdW50ZXI7CisJCQkgKiB3ZSdyZSBtYWtpbmcgc29tZSBmb3JtIG9mIHByb2dyZXNzIChhc3N1bWluZworCQkJICogd2UgY2FuJ3QgZ2V0IGludG8gYSBjeWNsZSBkb2luZyAqb3RoZXIqCisJCQkgKiBvcHRpbWl6YXRpb25zLi4uKS4KKwkJCSAqLworCQkJbG9vcF9jb3VudCA9IDA7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogTm8gLSBpbmNyZW1lbnQgdGhlIGNvdW50ZXIsIGFuZCBxdWl0IGlmCisJCQkgKiBpdCdzIHVwIHRvIDEwMC4KKwkJCSAqLworCQkJbG9vcF9jb3VudCsrOworCQkJaWYgKGxvb3BfY291bnQgPj0gMTAwKSB7CisJCQkJLyoKKwkJCQkgKiBXZSd2ZSBkb25lIG5vdGhpbmcgYnV0IGJyYW5jaCBtb3ZlbWVudAorCQkJCSAqIGZvciAxMDAgcGFzc2VzOyB3ZSdyZSBwcm9iYWJseQorCQkJCSAqIGluIGEgY3ljbGUgYW5kIHdpbGwgbmV2ZXIgcmVhY2ggYQorCQkJCSAqIGZpeGVkIHBvaW50LgorCQkJCSAqCisJCQkJICogWFhYIC0geWVzLCB3ZSByZWFsbHkgbmVlZCBhIG5vbi0KKwkJCQkgKiBoZXVyaXN0aWMgd2F5IG9mIGRldGVjdGluZyBhIGN5Y2xlLgorCQkJCSAqLworCQkJCW9wdF9zdGF0ZS0+ZG9uZSA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CiB9CiAKIC8qCiAgKiBPcHRpbWl6ZSB0aGUgZmlsdGVyIGNvZGUgaW4gaXRzIGRhZyByZXByZXNlbnRhdGlvbi4KKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgogICovCi12b2lkCi1icGZfb3B0aW1pemUoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBzdHJ1Y3QgaWNvZGUgKmljKQoraW50CiticGZfb3B0aW1pemUoc3RydWN0IGljb2RlICppYywgY2hhciAqZXJyYnVmKQogewogCW9wdF9zdGF0ZV90IG9wdF9zdGF0ZTsKIAotCW9wdF9pbml0KGNzdGF0ZSwgJm9wdF9zdGF0ZSwgaWMpOwotCW9wdF9sb29wKGNzdGF0ZSwgJm9wdF9zdGF0ZSwgaWMsIDApOwotCW9wdF9sb29wKGNzdGF0ZSwgJm9wdF9zdGF0ZSwgaWMsIDEpOworCW1lbXNldCgmb3B0X3N0YXRlLCAwLCBzaXplb2Yob3B0X3N0YXRlKSk7CisJb3B0X3N0YXRlLmVycmJ1ZiA9IGVycmJ1ZjsKKwlvcHRfc3RhdGUubm9uX2JyYW5jaF9tb3ZlbWVudF9wZXJmb3JtZWQgPSAwOworCWlmIChzZXRqbXAob3B0X3N0YXRlLnRvcF9jdHgpKSB7CisJCW9wdF9jbGVhbnVwKCZvcHRfc3RhdGUpOworCQlyZXR1cm4gLTE7CisJfQorCW9wdF9pbml0KCZvcHRfc3RhdGUsIGljKTsKKwlvcHRfbG9vcCgmb3B0X3N0YXRlLCBpYywgMCk7CisJb3B0X2xvb3AoJm9wdF9zdGF0ZSwgaWMsIDEpOwogCWludGVybl9ibG9ja3MoJm9wdF9zdGF0ZSwgaWMpOwogI2lmZGVmIEJERUJVRwogCWlmIChwY2FwX29wdGltaXplcl9kZWJ1ZyA+IDEgfHwgcGNhcF9wcmludF9kb3RfZ3JhcGgpIHsKIAkJcHJpbnRmKCJhZnRlciBpbnRlcm5fYmxvY2tzKClcbiIpOwotCQlvcHRfZHVtcChjc3RhdGUsIGljKTsKKwkJb3B0X2R1bXAoJm9wdF9zdGF0ZSwgaWMpOwogCX0KICNlbmRpZgogCW9wdF9yb290KCZpYy0+cm9vdCk7CiAjaWZkZWYgQkRFQlVHCiAJaWYgKHBjYXBfb3B0aW1pemVyX2RlYnVnID4gMSB8fCBwY2FwX3ByaW50X2RvdF9ncmFwaCkgewogCQlwcmludGYoImFmdGVyIG9wdF9yb290KClcbiIpOwotCQlvcHRfZHVtcChjc3RhdGUsIGljKTsKKwkJb3B0X2R1bXAoJm9wdF9zdGF0ZSwgaWMpOwogCX0KICNlbmRpZgogCW9wdF9jbGVhbnVwKCZvcHRfc3RhdGUpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTg5Myw3ICsyMzU0LDcgQEAKIGludGVybl9ibG9ja3Mob3B0X3N0YXRlX3QgKm9wdF9zdGF0ZSwgc3RydWN0IGljb2RlICppYykKIHsKIAlzdHJ1Y3QgYmxvY2sgKnA7Ci0JaW50IGksIGo7CisJdV9pbnQgaSwgajsKIAlpbnQgZG9uZTE7IC8qIGRvbid0IHNoYWRvdyBnbG9iYWwgKi8KICB0b3A6CiAJZG9uZTEgPSAxOwpAQCAtMTkwMiw3ICsyMzYzLDggQEAKIAogCW1hcmtfY29kZShpYyk7CiAKLQlmb3IgKGkgPSBvcHRfc3RhdGUtPm5fYmxvY2tzIC0gMTsgLS1pID49IDA7ICkgeworCWZvciAoaSA9IG9wdF9zdGF0ZS0+bl9ibG9ja3MgLSAxOyBpICE9IDA7ICkgeworCQktLWk7CiAJCWlmICghaXNNYXJrZWQoaWMsIG9wdF9zdGF0ZS0+YmxvY2tzW2ldKSkKIAkJCWNvbnRpbnVlOwogCQlmb3IgKGogPSBpICsgMTsgaiA8IG9wdF9zdGF0ZS0+bl9ibG9ja3M7ICsraikgewpAQCAtMTk0NCw2ICsyNDA2LDI0IEBACiB9CiAKIC8qCisgKiBGb3Igb3B0aW1pemVyIGVycm9ycy4KKyAqLworc3RhdGljIHZvaWQgUENBUF9OT1JFVFVSTgorb3B0X2Vycm9yKG9wdF9zdGF0ZV90ICpvcHRfc3RhdGUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwlpZiAob3B0X3N0YXRlLT5lcnJidWYgIT0gTlVMTCkgeworCQl2YV9zdGFydChhcCwgZm10KTsKKwkJKHZvaWQpdnNucHJpbnRmKG9wdF9zdGF0ZS0+ZXJyYnVmLAorCQkgICAgUENBUF9FUlJCVUZfU0laRSwgZm10LCBhcCk7CisJCXZhX2VuZChhcCk7CisJfQorCWxvbmdqbXAob3B0X3N0YXRlLT50b3BfY3R4LCAxKTsKKwkvKiBOT1RSRUFDSEVEICovCit9CisKKy8qCiAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBzdG10cyBpbiAncycuCiAgKi8KIHN0YXRpYyB1X2ludApAQCAtMTk3NywxMyArMjQ1NywxOSBAQAogc3RhdGljIHZvaWQKIG51bWJlcl9ibGtzX3Iob3B0X3N0YXRlX3QgKm9wdF9zdGF0ZSwgc3RydWN0IGljb2RlICppYywgc3RydWN0IGJsb2NrICpwKQogewotCWludCBuOworCXVfaW50IG47CiAKIAlpZiAocCA9PSAwIHx8IGlzTWFya2VkKGljLCBwKSkKIAkJcmV0dXJuOwogCiAJTWFyayhpYywgcCk7CiAJbiA9IG9wdF9zdGF0ZS0+bl9ibG9ja3MrKzsKKwlpZiAob3B0X3N0YXRlLT5uX2Jsb2NrcyA9PSAwKSB7CisJCS8qCisJCSAqIE92ZXJmbG93LgorCQkgKi8KKwkJb3B0X2Vycm9yKG9wdF9zdGF0ZSwgImZpbHRlciBpcyB0b28gY29tcGxleCB0byBvcHRpbWl6ZSIpOworCX0KIAlwLT5pZCA9IG47CiAJb3B0X3N0YXRlLT5ibG9ja3Nbbl0gPSBwOwogCkBAIC0yMDI3LDEwICsyNTEzLDEyIEBACiAgKiBmcm9tIHRoZSB0b3RhbCBudW1iZXIgb2YgYmxvY2tzIGFuZC9vciBzdGF0ZW1lbnRzLgogICovCiBzdGF0aWMgdm9pZAotb3B0X2luaXQoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBvcHRfc3RhdGVfdCAqb3B0X3N0YXRlLCBzdHJ1Y3QgaWNvZGUgKmljKQorb3B0X2luaXQob3B0X3N0YXRlX3QgKm9wdF9zdGF0ZSwgc3RydWN0IGljb2RlICppYykKIHsKIAlicGZfdV9pbnQzMiAqcDsKIAlpbnQgaSwgbiwgbWF4X3N0bXRzOworCXVfaW50IHByb2R1Y3Q7CisJc2l6ZV90IGJsb2NrX21lbXNpemUsIGVkZ2VfbWVtc2l6ZTsKIAogCS8qCiAJICogRmlyc3QsIGNvdW50IHRoZSBibG9ja3MsIHNvIHdlIGNhbiBtYWxsb2MgYW4gYXJyYXkgdG8gbWFwCkBAIC0yMDQwLDMxICsyNTI4LDk2IEBACiAJbiA9IGNvdW50X2Jsb2NrcyhpYywgaWMtPnJvb3QpOwogCW9wdF9zdGF0ZS0+YmxvY2tzID0gKHN0cnVjdCBibG9jayAqKiljYWxsb2Mobiwgc2l6ZW9mKCpvcHRfc3RhdGUtPmJsb2NrcykpOwogCWlmIChvcHRfc3RhdGUtPmJsb2NrcyA9PSBOVUxMKQotCQlicGZfZXJyb3IoY3N0YXRlLCAibWFsbG9jIik7CisJCW9wdF9lcnJvcihvcHRfc3RhdGUsICJtYWxsb2MiKTsKIAl1bk1hcmtBbGwoaWMpOwogCW9wdF9zdGF0ZS0+bl9ibG9ja3MgPSAwOwogCW51bWJlcl9ibGtzX3Iob3B0X3N0YXRlLCBpYywgaWMtPnJvb3QpOwogCisJLyoKKwkgKiBUaGlzICJzaG91bGQgbm90IGhhcHBlbiIuCisJICovCisJaWYgKG9wdF9zdGF0ZS0+bl9ibG9ja3MgPT0gMCkKKwkJb3B0X2Vycm9yKG9wdF9zdGF0ZSwgImZpbHRlciBoYXMgbm8gaW5zdHJ1Y3Rpb25zOyBwbGVhc2UgcmVwb3J0IHRoaXMgYXMgYSBsaWJwY2FwIGlzc3VlIik7CisKIAlvcHRfc3RhdGUtPm5fZWRnZXMgPSAyICogb3B0X3N0YXRlLT5uX2Jsb2NrczsKKwlpZiAoKG9wdF9zdGF0ZS0+bl9lZGdlcyAvIDIpICE9IG9wdF9zdGF0ZS0+bl9ibG9ja3MpIHsKKwkJLyoKKwkJICogT3ZlcmZsb3cuCisJCSAqLworCQlvcHRfZXJyb3Iob3B0X3N0YXRlLCAiZmlsdGVyIGlzIHRvbyBjb21wbGV4IHRvIG9wdGltaXplIik7CisJfQogCW9wdF9zdGF0ZS0+ZWRnZXMgPSAoc3RydWN0IGVkZ2UgKiopY2FsbG9jKG9wdF9zdGF0ZS0+bl9lZGdlcywgc2l6ZW9mKCpvcHRfc3RhdGUtPmVkZ2VzKSk7Ci0JaWYgKG9wdF9zdGF0ZS0+ZWRnZXMgPT0gTlVMTCkKLQkJYnBmX2Vycm9yKGNzdGF0ZSwgIm1hbGxvYyIpOworCWlmIChvcHRfc3RhdGUtPmVkZ2VzID09IE5VTEwpIHsKKwkJb3B0X2Vycm9yKG9wdF9zdGF0ZSwgIm1hbGxvYyIpOworCX0KIAogCS8qCiAJICogVGhlIG51bWJlciBvZiBsZXZlbHMgaXMgYm91bmRlZCBieSB0aGUgbnVtYmVyIG9mIG5vZGVzLgogCSAqLwogCW9wdF9zdGF0ZS0+bGV2ZWxzID0gKHN0cnVjdCBibG9jayAqKiljYWxsb2Mob3B0X3N0YXRlLT5uX2Jsb2Nrcywgc2l6ZW9mKCpvcHRfc3RhdGUtPmxldmVscykpOwotCWlmIChvcHRfc3RhdGUtPmxldmVscyA9PSBOVUxMKQotCQlicGZfZXJyb3IoY3N0YXRlLCAibWFsbG9jIik7CisJaWYgKG9wdF9zdGF0ZS0+bGV2ZWxzID09IE5VTEwpIHsKKwkJb3B0X2Vycm9yKG9wdF9zdGF0ZSwgIm1hbGxvYyIpOworCX0KIAotCW9wdF9zdGF0ZS0+ZWRnZXdvcmRzID0gb3B0X3N0YXRlLT5uX2VkZ2VzIC8gKDggKiBzaXplb2YoYnBmX3VfaW50MzIpKSArIDE7Ci0Jb3B0X3N0YXRlLT5ub2Rld29yZHMgPSBvcHRfc3RhdGUtPm5fYmxvY2tzIC8gKDggKiBzaXplb2YoYnBmX3VfaW50MzIpKSArIDE7CisJb3B0X3N0YXRlLT5lZGdld29yZHMgPSBvcHRfc3RhdGUtPm5fZWRnZXMgLyBCSVRTX1BFUl9XT1JEICsgMTsKKwlvcHRfc3RhdGUtPm5vZGV3b3JkcyA9IG9wdF9zdGF0ZS0+bl9ibG9ja3MgLyBCSVRTX1BFUl9XT1JEICsgMTsKKworCS8qCisJICogTWFrZSBzdXJlIG9wdF9zdGF0ZS0+bl9ibG9ja3MgKiBvcHRfc3RhdGUtPm5vZGV3b3JkcyBmaXRzCisJICogaW4gYSB1X2ludDsgd2UgdXNlIGl0IGFzIGEgdV9pbnQgbnVtYmVyLW9mLWl0ZXJhdGlvbnMKKwkgKiB2YWx1ZS4KKwkgKi8KKwlwcm9kdWN0ID0gb3B0X3N0YXRlLT5uX2Jsb2NrcyAqIG9wdF9zdGF0ZS0+bm9kZXdvcmRzOworCWlmICgocHJvZHVjdCAvIG9wdF9zdGF0ZS0+bl9ibG9ja3MpICE9IG9wdF9zdGF0ZS0+bm9kZXdvcmRzKSB7CisJCS8qCisJCSAqIFhYWCAtIGp1c3QgcHVudCBhbmQgZG9uJ3QgdHJ5IHRvIG9wdGltaXplPworCQkgKiBJbiBwcmFjdGljZSwgdGhpcyBpcyB1bmxpa2VseSB0byBoYXBwZW4gd2l0aAorCQkgKiBhIG5vcm1hbCBmaWx0ZXIuCisJCSAqLworCQlvcHRfZXJyb3Iob3B0X3N0YXRlLCAiZmlsdGVyIGlzIHRvbyBjb21wbGV4IHRvIG9wdGltaXplIik7CisJfQorCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIHRvdGFsIG1lbW9yeSByZXF1aXJlZCBmb3IgdGhhdCBkb2Vzbid0CisJICogb3ZlcmZsb3cuCisJICovCisJYmxvY2tfbWVtc2l6ZSA9IChzaXplX3QpMiAqIHByb2R1Y3QgKiBzaXplb2YoKm9wdF9zdGF0ZS0+c3BhY2UpOworCWlmICgoYmxvY2tfbWVtc2l6ZSAvIHByb2R1Y3QpICE9IDIgKiBzaXplb2YoKm9wdF9zdGF0ZS0+c3BhY2UpKSB7CisJCW9wdF9lcnJvcihvcHRfc3RhdGUsICJmaWx0ZXIgaXMgdG9vIGNvbXBsZXggdG8gb3B0aW1pemUiKTsKKwl9CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBvcHRfc3RhdGUtPm5fZWRnZXMgKiBvcHRfc3RhdGUtPmVkZ2V3b3JkcyBmaXRzCisJICogaW4gYSB1X2ludDsgd2UgdXNlIGl0IGFzIGEgdV9pbnQgbnVtYmVyLW9mLWl0ZXJhdGlvbnMKKwkgKiB2YWx1ZS4KKwkgKi8KKwlwcm9kdWN0ID0gb3B0X3N0YXRlLT5uX2VkZ2VzICogb3B0X3N0YXRlLT5lZGdld29yZHM7CisJaWYgKChwcm9kdWN0IC8gb3B0X3N0YXRlLT5uX2VkZ2VzKSAhPSBvcHRfc3RhdGUtPmVkZ2V3b3JkcykgeworCQlvcHRfZXJyb3Iob3B0X3N0YXRlLCAiZmlsdGVyIGlzIHRvbyBjb21wbGV4IHRvIG9wdGltaXplIik7CisJfQorCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIHRvdGFsIG1lbW9yeSByZXF1aXJlZCBmb3IgdGhhdCBkb2Vzbid0CisJICogb3ZlcmZsb3cuCisJICovCisJZWRnZV9tZW1zaXplID0gKHNpemVfdClwcm9kdWN0ICogc2l6ZW9mKCpvcHRfc3RhdGUtPnNwYWNlKTsKKwlpZiAoZWRnZV9tZW1zaXplIC8gcHJvZHVjdCAhPSBzaXplb2YoKm9wdF9zdGF0ZS0+c3BhY2UpKSB7CisJCW9wdF9lcnJvcihvcHRfc3RhdGUsICJmaWx0ZXIgaXMgdG9vIGNvbXBsZXggdG8gb3B0aW1pemUiKTsKKwl9CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgdG90YWwgbWVtb3J5IHJlcXVpcmVkIGZvciBib3RoIG9mIHRoZW0gZG9zbid0CisJICogb3ZlcmZsb3cuCisJICovCisJaWYgKGJsb2NrX21lbXNpemUgPiBTSVpFX01BWCAtIGVkZ2VfbWVtc2l6ZSkgeworCQlvcHRfZXJyb3Iob3B0X3N0YXRlLCAiZmlsdGVyIGlzIHRvbyBjb21wbGV4IHRvIG9wdGltaXplIik7CisJfQogCiAJLyogWFhYICovCi0Jb3B0X3N0YXRlLT5zcGFjZSA9IChicGZfdV9pbnQzMiAqKW1hbGxvYygyICogb3B0X3N0YXRlLT5uX2Jsb2NrcyAqIG9wdF9zdGF0ZS0+bm9kZXdvcmRzICogc2l6ZW9mKCpvcHRfc3RhdGUtPnNwYWNlKQotCQkJCSArIG9wdF9zdGF0ZS0+bl9lZGdlcyAqIG9wdF9zdGF0ZS0+ZWRnZXdvcmRzICogc2l6ZW9mKCpvcHRfc3RhdGUtPnNwYWNlKSk7Ci0JaWYgKG9wdF9zdGF0ZS0+c3BhY2UgPT0gTlVMTCkKLQkJYnBmX2Vycm9yKGNzdGF0ZSwgIm1hbGxvYyIpOworCW9wdF9zdGF0ZS0+c3BhY2UgPSAoYnBmX3VfaW50MzIgKiltYWxsb2MoYmxvY2tfbWVtc2l6ZSArIGVkZ2VfbWVtc2l6ZSk7CisJaWYgKG9wdF9zdGF0ZS0+c3BhY2UgPT0gTlVMTCkgeworCQlvcHRfZXJyb3Iob3B0X3N0YXRlLCAibWFsbG9jIik7CisJfQogCXAgPSBvcHRfc3RhdGUtPnNwYWNlOwogCW9wdF9zdGF0ZS0+YWxsX2RvbV9zZXRzID0gcDsKIAlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7CkBAIC0yMTAxLDkgKzI2NTQsMTMgQEAKIAkgKi8KIAlvcHRfc3RhdGUtPm1heHZhbCA9IDMgKiBtYXhfc3RtdHM7CiAJb3B0X3N0YXRlLT52bWFwID0gKHN0cnVjdCB2bWFwaW5mbyAqKWNhbGxvYyhvcHRfc3RhdGUtPm1heHZhbCwgc2l6ZW9mKCpvcHRfc3RhdGUtPnZtYXApKTsKKwlpZiAob3B0X3N0YXRlLT52bWFwID09IE5VTEwpIHsKKwkJb3B0X2Vycm9yKG9wdF9zdGF0ZSwgIm1hbGxvYyIpOworCX0KIAlvcHRfc3RhdGUtPnZub2RlX2Jhc2UgPSAoc3RydWN0IHZhbG5vZGUgKiljYWxsb2Mob3B0X3N0YXRlLT5tYXh2YWwsIHNpemVvZigqb3B0X3N0YXRlLT52bm9kZV9iYXNlKSk7Ci0JaWYgKG9wdF9zdGF0ZS0+dm1hcCA9PSBOVUxMIHx8IG9wdF9zdGF0ZS0+dm5vZGVfYmFzZSA9PSBOVUxMKQotCQlicGZfZXJyb3IoY3N0YXRlLCAibWFsbG9jIik7CisJaWYgKG9wdF9zdGF0ZS0+dm5vZGVfYmFzZSA9PSBOVUxMKSB7CisJCW9wdF9lcnJvcihvcHRfc3RhdGUsICJtYWxsb2MiKTsKKwl9CiB9CiAKIC8qCkBAIC0yMTE1LDYgKzI2NzIsOSBAQAogaW50IGJpZHNbTkJJRFNdOwogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIFBDQVBfTk9SRVRVUk4gY29udl9lcnJvcihjb252X3N0YXRlX3QgKiwgY29uc3QgY2hhciAqLCAuLi4pCisgICAgUENBUF9QUklOVEZMSUtFKDIsIDMpOworCiAvKgogICogUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwuICBSZXR1cm5zIGZhbHNlIGlmIGEgYnJhbmNoIGhhcwogICogYW4gb2Zmc2V0IHRoYXQgaXMgdG9vIGxhcmdlLiAgSWYgc28sIHdlIGhhdmUgbWFya2VkIHRoYXQKQEAgLTIxMjIsMjMgKzI2ODIsMjEgQEAKICAqIHByb3Blcmx5LgogICovCiBzdGF0aWMgaW50Ci1jb252ZXJ0X2NvZGVfcihjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIGNvbnZfc3RhdGVfdCAqY29udl9zdGF0ZSwKLSAgICBzdHJ1Y3QgaWNvZGUgKmljLCBzdHJ1Y3QgYmxvY2sgKnApCitjb252ZXJ0X2NvZGVfcihjb252X3N0YXRlX3QgKmNvbnZfc3RhdGUsIHN0cnVjdCBpY29kZSAqaWMsIHN0cnVjdCBibG9jayAqcCkKIHsKIAlzdHJ1Y3QgYnBmX2luc24gKmRzdDsKIAlzdHJ1Y3Qgc2xpc3QgKnNyYzsKIAl1X2ludCBzbGVuOwogCXVfaW50IG9mZjsKLQl1X2ludCBleHRyYWptcHM7CS8qIG51bWJlciBvZiBleHRyYSBqdW1wcyBpbnNlcnRlZCAqLwogCXN0cnVjdCBzbGlzdCAqKm9mZnNldCA9IE5VTEw7CiAKIAlpZiAocCA9PSAwIHx8IGlzTWFya2VkKGljLCBwKSkKIAkJcmV0dXJuICgxKTsKIAlNYXJrKGljLCBwKTsKIAotCWlmIChjb252ZXJ0X2NvZGVfcihjc3RhdGUsIGNvbnZfc3RhdGUsIGljLCBKRihwKSkgPT0gMCkKKwlpZiAoY29udmVydF9jb2RlX3IoY29udl9zdGF0ZSwgaWMsIEpGKHApKSA9PSAwKQogCQlyZXR1cm4gKDApOwotCWlmIChjb252ZXJ0X2NvZGVfcihjc3RhdGUsIGNvbnZfc3RhdGUsIGljLCBKVChwKSkgPT0gMCkKKwlpZiAoY29udmVydF9jb2RlX3IoY29udl9zdGF0ZSwgaWMsIEpUKHApKSA9PSAwKQogCQlyZXR1cm4gKDApOwogCiAJc2xlbiA9IHNsZW5ndGgocC0+c3RtdHMpOwpAQCAtMjE1MSw3ICsyNzA5LDcgQEAKIAlpZiAoc2xlbikgewogCQlvZmZzZXQgPSAoc3RydWN0IHNsaXN0ICoqKWNhbGxvYyhzbGVuLCBzaXplb2Yoc3RydWN0IHNsaXN0ICopKTsKIAkJaWYgKCFvZmZzZXQpIHsKLQkJCWJwZl9lcnJvcihjc3RhdGUsICJub3QgZW5vdWdoIGNvcmUiKTsKKwkJCWNvbnZfZXJyb3IoY29udl9zdGF0ZSwgIm5vdCBlbm91Z2ggY29yZSIpOwogCQkJLypOT1RSRUFDSEVEKi8KIAkJfQogCX0KQEAgLTIxNzUsNyArMjczMyw4IEBACiAJCWlmIChCUEZfQ0xBU1Moc3JjLT5zLmNvZGUpICE9IEJQRl9KTVAgfHwgc3JjLT5zLmNvZGUgPT0gKEJQRl9KTVB8QlBGX0pBKSkgewogI2lmIDAKIAkJCWlmIChzcmMtPnMuanQgfHwgc3JjLT5zLmpmKSB7Ci0JCQkJYnBmX2Vycm9yKGNzdGF0ZSwgImlsbGVnYWwgam1wIGRlc3RpbmF0aW9uIik7CisJCQkJZnJlZShvZmZzZXQpOworCQkJCWNvbnZfZXJyb3IoY29udl9zdGF0ZSwgImlsbGVnYWwgam1wIGRlc3RpbmF0aW9uIik7CiAJCQkJLypOT1RSRUFDSEVEKi8KIAkJCX0KICNlbmRpZgpAQCAtMjE5NSw3ICsyNzU0LDggQEAKICNlbmRpZgogCiAJCWlmICghc3JjLT5zLmp0IHx8ICFzcmMtPnMuamYpIHsKLQkJCWJwZl9lcnJvcihjc3RhdGUsIGxqZXJyLCAibm8gam1wIGRlc3RpbmF0aW9uIiwgb2ZmKTsKKwkJCWZyZWUob2Zmc2V0KTsKKwkJCWNvbnZfZXJyb3IoY29udl9zdGF0ZSwgbGplcnIsICJubyBqbXAgZGVzdGluYXRpb24iLCBvZmYpOwogCQkJLypOT1RSRUFDSEVEKi8KIAkJfQogCkBAIC0yMjAzLDEyICsyNzYzLDE0IEBACiAJCWZvciAoaSA9IDA7IGkgPCBzbGVuOyBpKyspIHsKIAkJCWlmIChvZmZzZXRbaV0gPT0gc3JjLT5zLmp0KSB7CiAJCQkJaWYgKGp0KSB7Ci0JCQkJCWJwZl9lcnJvcihjc3RhdGUsIGxqZXJyLCAibXVsdGlwbGUgbWF0Y2hlcyIsIG9mZik7CisJCQkJCWZyZWUob2Zmc2V0KTsKKwkJCQkJY29udl9lcnJvcihjb252X3N0YXRlLCBsamVyciwgIm11bHRpcGxlIG1hdGNoZXMiLCBvZmYpOwogCQkJCQkvKk5PVFJFQUNIRUQqLwogCQkJCX0KIAogCQkJCWlmIChpIC0gb2ZmIC0gMSA+PSAyNTYpIHsKLQkJCQkJYnBmX2Vycm9yKGNzdGF0ZSwgbGplcnIsICJvdXQtb2YtcmFuZ2UganVtcCIsIG9mZik7CisJCQkJCWZyZWUob2Zmc2V0KTsKKwkJCQkJY29udl9lcnJvcihjb252X3N0YXRlLCBsamVyciwgIm91dC1vZi1yYW5nZSBqdW1wIiwgb2ZmKTsKIAkJCQkJLypOT1RSRUFDSEVEKi8KIAkJCQl9CiAJCQkJZHN0LT5qdCA9ICh1X2NoYXIpKGkgLSBvZmYgLSAxKTsKQEAgLTIyMTYsMTEgKzI3NzgsMTMgQEAKIAkJCX0KIAkJCWlmIChvZmZzZXRbaV0gPT0gc3JjLT5zLmpmKSB7CiAJCQkJaWYgKGpmKSB7Ci0JCQkJCWJwZl9lcnJvcihjc3RhdGUsIGxqZXJyLCAibXVsdGlwbGUgbWF0Y2hlcyIsIG9mZik7CisJCQkJCWZyZWUob2Zmc2V0KTsKKwkJCQkJY29udl9lcnJvcihjb252X3N0YXRlLCBsamVyciwgIm11bHRpcGxlIG1hdGNoZXMiLCBvZmYpOwogCQkJCQkvKk5PVFJFQUNIRUQqLwogCQkJCX0KIAkJCQlpZiAoaSAtIG9mZiAtIDEgPj0gMjU2KSB7Ci0JCQkJCWJwZl9lcnJvcihjc3RhdGUsIGxqZXJyLCAib3V0LW9mLXJhbmdlIGp1bXAiLCBvZmYpOworCQkJCQlmcmVlKG9mZnNldCk7CisJCQkJCWNvbnZfZXJyb3IoY29udl9zdGF0ZSwgbGplcnIsICJvdXQtb2YtcmFuZ2UganVtcCIsIG9mZik7CiAJCQkJCS8qTk9UUkVBQ0hFRCovCiAJCQkJfQogCQkJCWRzdC0+amYgPSAodV9jaGFyKShpIC0gb2ZmIC0gMSk7CkBAIC0yMjI4LDcgKzI3OTIsOCBAQAogCQkJfQogCQl9CiAJCWlmICghanQgfHwgIWpmKSB7Ci0JCQlicGZfZXJyb3IoY3N0YXRlLCBsamVyciwgIm5vIGRlc3RpbmF0aW9uIGZvdW5kIiwgb2ZmKTsKKwkJCWZyZWUob2Zmc2V0KTsKKwkJCWNvbnZfZXJyb3IoY29udl9zdGF0ZSwgbGplcnIsICJubyBkZXN0aW5hdGlvbiBmb3VuZCIsIG9mZik7CiAJCQkvKk5PVFJFQUNIRUQqLwogCQl9CiAJICAgIH0KQEAgLTIyNDYsMjEgKzI4MTEsMTcgQEAKIAlkc3QtPmNvZGUgPSAodV9zaG9ydClwLT5zLmNvZGU7CiAJZHN0LT5rID0gcC0+cy5rOwogCWlmIChKVChwKSkgewotCQlleHRyYWptcHMgPSAwOworCQkvKiBudW1iZXIgb2YgZXh0cmEganVtcHMgaW5zZXJ0ZWQgKi8KKwkJdV9jaGFyIGV4dHJham1wcyA9IDA7CiAJCW9mZiA9IEpUKHApLT5vZmZzZXQgLSAocC0+b2Zmc2V0ICsgc2xlbikgLSAxOwogCQlpZiAob2ZmID49IDI1NikgewogCQkgICAgLyogb2Zmc2V0IHRvbyBsYXJnZSBmb3IgYnJhbmNoLCBtdXN0IGFkZCBhIGp1bXAgKi8KIAkJICAgIGlmIChwLT5sb25nanQgPT0gMCkgewotCQkgICAgCS8qIG1hcmsgdGhpcyBpbnN0cnVjdGlvbiBhbmQgcmV0cnkgKi8KKwkJCS8qIG1hcmsgdGhpcyBpbnN0cnVjdGlvbiBhbmQgcmV0cnkgKi8KIAkJCXAtPmxvbmdqdCsrOwogCQkJcmV0dXJuKDApOwogCQkgICAgfQotCQkgICAgLyogYnJhbmNoIGlmIFQgdG8gZm9sbG93aW5nIGp1bXAgKi8KLQkJICAgIGlmIChleHRyYWptcHMgPj0gMjU2KSB7Ci0JCQlicGZfZXJyb3IoY3N0YXRlLCAidG9vIG1hbnkgZXh0cmEganVtcHMiKTsKLQkJCS8qTk9UUkVBQ0hFRCovCi0JCSAgICB9Ci0JCSAgICBkc3QtPmp0ID0gKHVfY2hhcilleHRyYWptcHM7CisJCSAgICBkc3QtPmp0ID0gZXh0cmFqbXBzOwogCQkgICAgZXh0cmFqbXBzKys7CiAJCSAgICBkc3RbZXh0cmFqbXBzXS5jb2RlID0gQlBGX0pNUHxCUEZfSkE7CiAJCSAgICBkc3RbZXh0cmFqbXBzXS5rID0gb2ZmIC0gZXh0cmFqbXBzOwpAQCAtMjI3MSwxNyArMjgzMiwxMyBAQAogCQlpZiAob2ZmID49IDI1NikgewogCQkgICAgLyogb2Zmc2V0IHRvbyBsYXJnZSBmb3IgYnJhbmNoLCBtdXN0IGFkZCBhIGp1bXAgKi8KIAkJICAgIGlmIChwLT5sb25namYgPT0gMCkgewotCQkgICAgCS8qIG1hcmsgdGhpcyBpbnN0cnVjdGlvbiBhbmQgcmV0cnkgKi8KKwkJCS8qIG1hcmsgdGhpcyBpbnN0cnVjdGlvbiBhbmQgcmV0cnkgKi8KIAkJCXAtPmxvbmdqZisrOwogCQkJcmV0dXJuKDApOwogCQkgICAgfQogCQkgICAgLyogYnJhbmNoIGlmIEYgdG8gZm9sbG93aW5nIGp1bXAgKi8KIAkJICAgIC8qIGlmIHR3byBqdW1wcyBhcmUgaW5zZXJ0ZWQsIEYgZ29lcyB0byBzZWNvbmQgb25lICovCi0JCSAgICBpZiAoZXh0cmFqbXBzID49IDI1NikgewotCQkJYnBmX2Vycm9yKGNzdGF0ZSwgInRvbyBtYW55IGV4dHJhIGp1bXBzIik7Ci0JCQkvKk5PVFJFQUNIRUQqLwotCQkgICAgfQotCQkgICAgZHN0LT5qZiA9ICh1X2NoYXIpZXh0cmFqbXBzOworCQkgICAgZHN0LT5qZiA9IGV4dHJham1wczsKIAkJICAgIGV4dHJham1wcysrOwogCQkgICAgZHN0W2V4dHJham1wc10uY29kZSA9IEJQRl9KTVB8QlBGX0pBOwogCQkgICAgZHN0W2V4dHJham1wc10uayA9IG9mZiAtIGV4dHJham1wczsKQEAgLTIzMTIsMTMgKzI4NjksMjAgQEAKICAqIGRvbmUgd2l0aCB0aGUgZmlsdGVyIHByb2dyYW0uICBTZWUgdGhlIHBjYXAgbWFuIHBhZ2UuCiAgKi8KIHN0cnVjdCBicGZfaW5zbiAqCi1pY29kZV90b19mY29kZShjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIHN0cnVjdCBpY29kZSAqaWMsCi0gICAgc3RydWN0IGJsb2NrICpyb290LCB1X2ludCAqbGVucCkKK2ljb2RlX3RvX2Zjb2RlKHN0cnVjdCBpY29kZSAqaWMsIHN0cnVjdCBibG9jayAqcm9vdCwgdV9pbnQgKmxlbnAsCisgICAgY2hhciAqZXJyYnVmKQogewogCXVfaW50IG47CiAJc3RydWN0IGJwZl9pbnNuICpmcDsKIAljb252X3N0YXRlX3QgY29udl9zdGF0ZTsKIAorCWNvbnZfc3RhdGUuZnN0YXJ0ID0gTlVMTDsKKwljb252X3N0YXRlLmVycmJ1ZiA9IGVycmJ1ZjsKKwlpZiAoc2V0am1wKGNvbnZfc3RhdGUudG9wX2N0eCkgIT0gMCkgeworCQlmcmVlKGNvbnZfc3RhdGUuZnN0YXJ0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCiAJLyoKIAkgKiBMb29wIGRvaW5nIGNvbnZlcnRfY29kZV9yKCkgdW50aWwgbm8gYnJhbmNoZXMgcmVtYWluCiAJICogd2l0aCB0b28tbGFyZ2Ugb2Zmc2V0cy4KQEAgLTIzMjgsMTQgKzI4OTIsMTggQEAKIAkgICAgbiA9ICpsZW5wID0gY291bnRfc3RtdHMoaWMsIHJvb3QpOwogCiAJICAgIGZwID0gKHN0cnVjdCBicGZfaW5zbiAqKW1hbGxvYyhzaXplb2YoKmZwKSAqIG4pOwotCSAgICBpZiAoZnAgPT0gTlVMTCkKLQkJICAgIGJwZl9lcnJvcihjc3RhdGUsICJtYWxsb2MiKTsKKwkgICAgaWYgKGZwID09IE5VTEwpIHsKKwkJKHZvaWQpc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkgICAgIm1hbGxvYyIpOworCQlmcmVlKGZwKTsKKwkJcmV0dXJuIE5VTEw7CisJICAgIH0KIAkgICAgbWVtc2V0KChjaGFyICopZnAsIDAsIHNpemVvZigqZnApICogbik7CiAJICAgIGNvbnZfc3RhdGUuZnN0YXJ0ID0gZnA7CiAJICAgIGNvbnZfc3RhdGUuZnRhaWwgPSBmcCArIG47CiAKIAkgICAgdW5NYXJrQWxsKGljKTsKLQkgICAgaWYgKGNvbnZlcnRfY29kZV9yKGNzdGF0ZSwgJmNvbnZfc3RhdGUsIGljLCByb290KSkKKwkgICAgaWYgKGNvbnZlcnRfY29kZV9yKCZjb252X3N0YXRlLCBpYywgcm9vdCkpCiAJCWJyZWFrOwogCSAgICBmcmVlKGZwKTsKIAl9CkBAIC0yMzQ0LDYgKzI5MTIsMjIgQEAKIH0KIAogLyoKKyAqIEZvciBpY29udl90b19mY29udigpIGVycm9ycy4KKyAqLworc3RhdGljIHZvaWQgUENBUF9OT1JFVFVSTgorY29udl9lcnJvcihjb252X3N0YXRlX3QgKmNvbnZfc3RhdGUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwkodm9pZCl2c25wcmludGYoY29udl9zdGF0ZS0+ZXJyYnVmLAorCSAgICBQQ0FQX0VSUkJVRl9TSVpFLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCWxvbmdqbXAoY29udl9zdGF0ZS0+dG9wX2N0eCwgMSk7CisJLyogTk9UUkVBQ0hFRCAqLworfQorCisvKgogICogTWFrZSBhIGNvcHkgb2YgYSBCUEYgcHJvZ3JhbSBhbmQgcHV0IGl0IGluIHRoZSAiZmNvZGUiIG1lbWJlciBvZgogICogYSAicGNhcF90Ii4KICAqCkBAIC0yMzU5LDggKzI5NDMsOCBAQAogCS8qCiAJICogVmFsaWRhdGUgdGhlIHByb2dyYW0uCiAJICovCi0JaWYgKCFicGZfdmFsaWRhdGUoZnAtPmJmX2luc25zLCBmcC0+YmZfbGVuKSkgewotCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1Ziwgc2l6ZW9mKHAtPmVycmJ1ZiksCisJaWYgKCFwY2FwX3ZhbGlkYXRlX2ZpbHRlcihmcC0+YmZfaW5zbnMsIGZwLT5iZl9sZW4pKSB7CisJCXNucHJpbnRmKHAtPmVycmJ1Ziwgc2l6ZW9mKHAtPmVycmJ1ZiksCiAJCQkiQlBGIHByb2dyYW0gaXMgbm90IHZhbGlkIik7CiAJCXJldHVybiAoLTEpOwogCX0KQEAgLTIzOTcsNyArMjk4MSw3IEBACiAJaWNvdW50ID0gc2xlbmd0aChibG9jay0+c3RtdHMpICsgMSArIGJsb2NrLT5sb25nanQgKyBibG9jay0+bG9uZ2pmOwogCW5vZmZzZXQgPSBtaW4oYmxvY2stPm9mZnNldCArIGljb3VudCwgKGludClwcm9nLT5iZl9sZW4pOwogCi0JZnByaW50ZihvdXQsICJcdGJsb2NrJWQgW3NoYXBlPWVsbGlwc2UsIGlkPVwiYmxvY2stJWRcIiBsYWJlbD1cIkJMT0NLJWRcXG4iLCBibG9jay0+aWQsIGJsb2NrLT5pZCwgYmxvY2stPmlkKTsKKwlmcHJpbnRmKG91dCwgIlx0YmxvY2sldSBbc2hhcGU9ZWxsaXBzZSwgaWQ9XCJibG9jay0ldVwiIGxhYmVsPVwiQkxPQ0sldVxcbiIsIGJsb2NrLT5pZCwgYmxvY2stPmlkLCBibG9jay0+aWQpOwogCWZvciAoaSA9IGJsb2NrLT5vZmZzZXQ7IGkgPCBub2Zmc2V0OyBpKyspIHsKIAkJZnByaW50ZihvdXQsICJcXG4lcyIsIGJwZl9pbWFnZShwcm9nLT5iZl9pbnNucyArIGksIGkpKTsKIAl9CkBAIC0yNDI0LDkgKzMwMDgsOSBAQAogCU1hcmsoaWMsIGJsb2NrKTsKIAogCWlmIChKVChibG9jaykpIHsKLQkJZnByaW50ZihvdXQsICJcdFwiYmxvY2slZFwiOnNlIC0+IFwiYmxvY2slZFwiOm4gW2xhYmVsPVwiVFwiXTsgXG4iLAorCQlmcHJpbnRmKG91dCwgIlx0XCJibG9jayV1XCI6c2UgLT4gXCJibG9jayV1XCI6biBbbGFiZWw9XCJUXCJdOyBcbiIsCiAJCQkJYmxvY2stPmlkLCBKVChibG9jayktPmlkKTsKLQkJZnByaW50ZihvdXQsICJcdFwiYmxvY2slZFwiOnN3IC0+IFwiYmxvY2slZFwiOm4gW2xhYmVsPVwiRlwiXTsgXG4iLAorCQlmcHJpbnRmKG91dCwgIlx0XCJibG9jayV1XCI6c3cgLT4gXCJibG9jayV1XCI6biBbbGFiZWw9XCJGXCJdOyBcbiIsCiAJCQkgICBibG9jay0+aWQsIEpGKGJsb2NrKS0+aWQpOwogCX0KIAlkb3RfZHVtcF9lZGdlKGljLCBKVChibG9jayksIG91dCk7CkBAIC0yNDQ5LDE3ICszMDMzLDE5IEBACiAgICAgCSJibG9jazEiOnN3IC0+ICJibG9jazMiOm4gW2xhYmVsPSJGIl07CiAgICAgfQogICoKLSAqICBBZnRlciBpbnN0YWxsIGdyYXBodml6IG9uIGh0dHA6Ly93d3cuZ3JhcGh2aXoub3JnLywgc2F2ZSBpdCBhcyBicGYuZG90CisgKiAgQWZ0ZXIgaW5zdGFsbCBncmFwaHZpeiBvbiBodHRwczovL3d3dy5ncmFwaHZpei5vcmcvLCBzYXZlIGl0IGFzIGJwZi5kb3QKICAqICBhbmQgcnVuIGBkb3QgLVRwbmcgLU8gYnBmLmRvdCcgdG8gZHJhdyB0aGUgZ3JhcGguCiAgKi8KLXN0YXRpYyB2b2lkCi1kb3RfZHVtcChjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIHN0cnVjdCBpY29kZSAqaWMpCitzdGF0aWMgaW50Citkb3RfZHVtcChzdHJ1Y3QgaWNvZGUgKmljLCBjaGFyICplcnJidWYpCiB7CiAJc3RydWN0IGJwZl9wcm9ncmFtIGY7CiAJRklMRSAqb3V0ID0gc3Rkb3V0OwogCiAJbWVtc2V0KGJpZHMsIDAsIHNpemVvZiBiaWRzKTsKLQlmLmJmX2luc25zID0gaWNvZGVfdG9fZmNvZGUoY3N0YXRlLCBpYywgaWMtPnJvb3QsICZmLmJmX2xlbik7CisJZi5iZl9pbnNucyA9IGljb2RlX3RvX2Zjb2RlKGljLCBpYy0+cm9vdCwgJmYuYmZfbGVuLCBlcnJidWYpOworCWlmIChmLmJmX2luc25zID09IE5VTEwpCisJCXJldHVybiAtMTsKIAogCWZwcmludGYob3V0LCAiZGlncmFwaCBCUEYge1xuIik7CiAJdW5NYXJrQWxsKGljKTsKQEAgLTI0NjksMzAgKzMwNTUsMzkgQEAKIAlmcHJpbnRmKG91dCwgIn1cbiIpOwogCiAJZnJlZSgoY2hhciAqKWYuYmZfaW5zbnMpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZAotcGxhaW5fZHVtcChjb21waWxlcl9zdGF0ZV90ICpjc3RhdGUsIHN0cnVjdCBpY29kZSAqaWMpCitzdGF0aWMgaW50CitwbGFpbl9kdW1wKHN0cnVjdCBpY29kZSAqaWMsIGNoYXIgKmVycmJ1ZikKIHsKIAlzdHJ1Y3QgYnBmX3Byb2dyYW0gZjsKIAogCW1lbXNldChiaWRzLCAwLCBzaXplb2YgYmlkcyk7Ci0JZi5iZl9pbnNucyA9IGljb2RlX3RvX2Zjb2RlKGNzdGF0ZSwgaWMsIGljLT5yb290LCAmZi5iZl9sZW4pOworCWYuYmZfaW5zbnMgPSBpY29kZV90b19mY29kZShpYywgaWMtPnJvb3QsICZmLmJmX2xlbiwgZXJyYnVmKTsKKwlpZiAoZi5iZl9pbnNucyA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CiAJYnBmX2R1bXAoJmYsIDEpOwogCXB1dGNoYXIoJ1xuJyk7CiAJZnJlZSgoY2hhciAqKWYuYmZfaW5zbnMpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZAotb3B0X2R1bXAoY29tcGlsZXJfc3RhdGVfdCAqY3N0YXRlLCBzdHJ1Y3QgaWNvZGUgKmljKQorb3B0X2R1bXAob3B0X3N0YXRlX3QgKm9wdF9zdGF0ZSwgc3RydWN0IGljb2RlICppYykKIHsKKwlpbnQgc3RhdHVzOworCWNoYXIgZXJyYnVmW1BDQVBfRVJSQlVGX1NJWkVdOworCiAJLyoKIAkgKiBJZiB0aGUgQ0ZHLCBpbiBET1QgZm9ybWF0LCBpcyByZXF1ZXN0ZWQsIG91dHB1dCBpdCByYXRoZXIgdGhhbgogCSAqIHRoZSBjb2RlIHRoYXQgd291bGQgYmUgZ2VuZXJhdGVkIGZyb20gdGhhdCBncmFwaC4KIAkgKi8KIAlpZiAocGNhcF9wcmludF9kb3RfZ3JhcGgpCi0JCWRvdF9kdW1wKGNzdGF0ZSwgaWMpOworCQlzdGF0dXMgPSBkb3RfZHVtcChpYywgZXJyYnVmKTsKIAllbHNlCi0JCXBsYWluX2R1bXAoY3N0YXRlLCBpYyk7CisJCXN0YXR1cyA9IHBsYWluX2R1bXAoaWMsIGVycmJ1Zik7CisJaWYgKHN0YXR1cyA9PSAtMSkKKwkJb3B0X2Vycm9yKG9wdF9zdGF0ZSwgIm9wdF9kdW1wOiBpY29kZV90b19mY29kZSBmYWlsZWQ6ICVzIiwgZXJyYnVmKTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvb3JnLnRjcGR1bXAuY2htb2RfYnBmLnBsaXN0IGIvb3JnLnRjcGR1bXAuY2htb2RfYnBmLnBsaXN0CmluZGV4IDhhZDY4NTIuLmY2ZmRmZWMgMTAwNjQ0Ci0tLSBhL29yZy50Y3BkdW1wLmNobW9kX2JwZi5wbGlzdAorKysgYi9vcmcudGNwZHVtcC5jaG1vZF9icGYucGxpc3QKQEAgLTEsNSArMSw1IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUgQ29tcHV0ZXIvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Cis8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZSBDb21wdXRlci8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwczovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CiA8cGxpc3QgdmVyc2lvbj0iMS4wIj4KIDxkaWN0PgogCTxrZXk+TGFiZWw8L2tleT4KZGlmZiAtLWdpdCBhL3BjYXAtYWlycGNhcC5jIGIvcGNhcC1haXJwY2FwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAzZjIzYQotLS0gL2Rldi9udWxsCisrKyBiL3BjYXAtYWlycGNhcC5jCkBAIC0wLDAgKzEsMTA0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5OSAtIDIwMDUgTmV0R3JvdXAsIFBvbGl0ZWNuaWNvIGRpIFRvcmlubyAoSXRhbHkpCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgLSAyMDEwIENBQ0UgVGVjaG5vbG9naWVzLCBEYXZpcyAoQ2FsaWZvcm5pYSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgUG9saXRlY25pY28gZGkgVG9yaW5vLCBDQUNFIFRlY2hub2xvZ2llcworICogbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgKiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInBjYXAtaW50LmgiCisKKyNpbmNsdWRlIDxhaXJwY2FwLmg+CisKKyNpbmNsdWRlICJwY2FwLWFpcnBjYXAuaCIKKworLyogRGVmYXVsdCBzaXplIG9mIHRoZSBidWZmZXIgd2UgYWxsb2NhdGUgaW4gdXNlcmxhbmQuICovCisjZGVmaW5lCUFJUlBDQVBfREVGQVVMVF9VU0VSX0JVRkZFUl9TSVpFIDI1NjAwMAorCisvKiBEZWZhdWx0IHNpemUgb2YgdGhlIGJ1ZmZlciBmb3IgdGhlIEFpclBjYXAgYWRhcHRlci4gKi8KKyNkZWZpbmUJQUlSUENBUF9ERUZBVUxUX0tFUk5FTF9CVUZGRVJfU0laRSAxMDAwMDAwCisKKy8vCisvLyBXZSBsb2FkIHRoZSBBaXJQY2FwIERMTCBkeW5hbWljYWxseSwgc28gdGhhdCB0aGUgY29kZSB3aWxsCisvLyB3b3JrIHdoZXRoZXIgeW91IGhhdmUgaXQgaW5zdGFsbGVkIG9yIG5vdCwgYW5kIHRoZXJlIGRvbid0CisvLyBoYXZlIHRvIGJlIHR3byBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIGxpYnJhcnksIG9uZSBsaW5rZWQKKy8vIHRvIHRoZSBBaXJQY2FwIGxpYnJhcnkgYW5kIG9uZSBub3QgbGlua2VkIHRvIGl0LgorLy8KK3N0YXRpYyBwY2FwX2NvZGVfaGFuZGxlX3QgYWlycGNhcF9saWI7CisKK3R5cGVkZWYgUENIQVIgKCpBaXJwY2FwR2V0TGFzdEVycm9ySGFuZGxlcikoUEFpcnBjYXBIYW5kbGUpOwordHlwZWRlZiBCT09MICgqQWlycGNhcEdldERldmljZUxpc3RIYW5kbGVyKShQQWlycGNhcERldmljZURlc2NyaXB0aW9uICosIFBDSEFSKTsKK3R5cGVkZWYgVk9JRCAoKkFpcnBjYXBGcmVlRGV2aWNlTGlzdEhhbmRsZXIpKFBBaXJwY2FwRGV2aWNlRGVzY3JpcHRpb24pOwordHlwZWRlZiBQQWlycGNhcEhhbmRsZSAoKkFpcnBjYXBPcGVuSGFuZGxlcikoUENIQVIsIFBDSEFSKTsKK3R5cGVkZWYgVk9JRCAoKkFpcnBjYXBDbG9zZUhhbmRsZXIpKFBBaXJwY2FwSGFuZGxlKTsKK3R5cGVkZWYgQk9PTCAoKkFpcnBjYXBTZXREZXZpY2VNYWNGbGFnc0hhbmRsZXIpKFBBaXJwY2FwSGFuZGxlLCBVSU5UKTsKK3R5cGVkZWYgQk9PTCAoKkFpcnBjYXBTZXRMaW5rVHlwZUhhbmRsZXIpKFBBaXJwY2FwSGFuZGxlLCBBaXJwY2FwTGlua1R5cGUpOwordHlwZWRlZiBCT09MICgqQWlycGNhcEdldExpbmtUeXBlSGFuZGxlcikoUEFpcnBjYXBIYW5kbGUsIFBBaXJwY2FwTGlua1R5cGUpOwordHlwZWRlZiBCT09MICgqQWlycGNhcFNldEtlcm5lbEJ1ZmZlckhhbmRsZXIpKFBBaXJwY2FwSGFuZGxlLCBVSU5UKTsKK3R5cGVkZWYgQk9PTCAoKkFpcnBjYXBTZXRGaWx0ZXJIYW5kbGVyKShQQWlycGNhcEhhbmRsZSwgUFZPSUQsIFVJTlQpOwordHlwZWRlZiBCT09MICgqQWlycGNhcFNldE1pblRvQ29weUhhbmRsZXIpKFBBaXJwY2FwSGFuZGxlLCBVSU5UKTsKK3R5cGVkZWYgQk9PTCAoKkFpcnBjYXBHZXRSZWFkRXZlbnRIYW5kbGVyKShQQWlycGNhcEhhbmRsZSwgSEFORExFICopOwordHlwZWRlZiBCT09MICgqQWlycGNhcFJlYWRIYW5kbGVyKShQQWlycGNhcEhhbmRsZSwgUEJZVEUsIFVJTlQsIFBVSU5UKTsKK3R5cGVkZWYgQk9PTCAoKkFpcnBjYXBXcml0ZUhhbmRsZXIpKFBBaXJwY2FwSGFuZGxlLCBQQ0hBUiwgVUxPTkcpOwordHlwZWRlZiBCT09MICgqQWlycGNhcEdldFN0YXRzSGFuZGxlcikoUEFpcnBjYXBIYW5kbGUsIFBBaXJwY2FwU3RhdHMpOworCitzdGF0aWMgQWlycGNhcEdldExhc3RFcnJvckhhbmRsZXIgcF9BaXJwY2FwR2V0TGFzdEVycm9yOworc3RhdGljIEFpcnBjYXBHZXREZXZpY2VMaXN0SGFuZGxlciBwX0FpcnBjYXBHZXREZXZpY2VMaXN0Oworc3RhdGljIEFpcnBjYXBGcmVlRGV2aWNlTGlzdEhhbmRsZXIgcF9BaXJwY2FwRnJlZURldmljZUxpc3Q7CitzdGF0aWMgQWlycGNhcE9wZW5IYW5kbGVyIHBfQWlycGNhcE9wZW47CitzdGF0aWMgQWlycGNhcENsb3NlSGFuZGxlciBwX0FpcnBjYXBDbG9zZTsKK3N0YXRpYyBBaXJwY2FwU2V0RGV2aWNlTWFjRmxhZ3NIYW5kbGVyIHBfQWlycGNhcFNldERldmljZU1hY0ZsYWdzOworc3RhdGljIEFpcnBjYXBTZXRMaW5rVHlwZUhhbmRsZXIgcF9BaXJwY2FwU2V0TGlua1R5cGU7CitzdGF0aWMgQWlycGNhcEdldExpbmtUeXBlSGFuZGxlciBwX0FpcnBjYXBHZXRMaW5rVHlwZTsKK3N0YXRpYyBBaXJwY2FwU2V0S2VybmVsQnVmZmVySGFuZGxlciBwX0FpcnBjYXBTZXRLZXJuZWxCdWZmZXI7CitzdGF0aWMgQWlycGNhcFNldEZpbHRlckhhbmRsZXIgcF9BaXJwY2FwU2V0RmlsdGVyOworc3RhdGljIEFpcnBjYXBTZXRNaW5Ub0NvcHlIYW5kbGVyIHBfQWlycGNhcFNldE1pblRvQ29weTsKK3N0YXRpYyBBaXJwY2FwR2V0UmVhZEV2ZW50SGFuZGxlciBwX0FpcnBjYXBHZXRSZWFkRXZlbnQ7CitzdGF0aWMgQWlycGNhcFJlYWRIYW5kbGVyIHBfQWlycGNhcFJlYWQ7CitzdGF0aWMgQWlycGNhcFdyaXRlSGFuZGxlciBwX0FpcnBjYXBXcml0ZTsKK3N0YXRpYyBBaXJwY2FwR2V0U3RhdHNIYW5kbGVyIHBfQWlycGNhcEdldFN0YXRzOworCit0eXBlZGVmIGVudW0gTE9ORworeworCUFJUlBDQVBfQVBJX1VOTE9BREVEID0gMCwKKwlBSVJQQ0FQX0FQSV9MT0FERUQsCisJQUlSUENBUF9BUElfQ0FOTk9UX0xPQUQsCisJQUlSUENBUF9BUElfTE9BRElORworfSBBSVJQQ0FQX0FQSV9MT0FEX1NUQVRVUzsKKworc3RhdGljIEFJUlBDQVBfQVBJX0xPQURfU1RBVFVTCWFpcnBjYXBfbG9hZF9zdGF0dXM7CisKKy8qCisgKiBOT1RFOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYnkgdGhlIHBjYXAgZnVuY3Rpb25zIHRoYXQgY2FuCisgKiAgICAgICB0aGVvcmV0aWNhbGx5IGRlYWwgd2l0aCB0aGUgQWlyUGNhcCBsaWJyYXJ5IGZvciB0aGUgZmlyc3QgdGltZSwKKyAqICAgICAgIG5hbWVseSBsaXN0aW5nIHRoZSBhZGFwdGVycyBhbmQgY3JlYXRpbmcgYSBwY2FwX3QgZm9yIGFuIGFkYXB0ZXIuCisgKiAgICAgICBBbGwgdGhlIG90aGVyIG9uZXMgKGFjdGl2YXRlLCBjbG9zZSwgcmVhZCwgd3JpdGUsIHNldCBwYXJhbWV0ZXJzKQorICogICAgICAgd29yayBvbiBhIHBjYXBfdCBmb3IgYW4gQWlyUGNhcCBkZXZpY2UsIG1lYW5pbmcgd2UndmUgYWxyZWFkeQorICogICAgICAgY3JlYXRlZCB0aGUgcGNhcF90IGFuZCB0aHVzIGhhdmUgbG9hZGVkIHRoZSBmdW5jdGlvbnMsIHNvIHdlIGRvCisgKiAgICAgICBub3QgbmVlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBBSVJQQ0FQX0FQSV9MT0FEX1NUQVRVUworbG9hZF9haXJwY2FwX2Z1bmN0aW9ucyh2b2lkKQoreworCUFJUlBDQVBfQVBJX0xPQURfU1RBVFVTIGN1cnJlbnRfc3RhdHVzOworCisJLyoKKwkgKiBXZSBkb24ndCB1c2UgYSBtdXRleCBiZWNhdXNlIHRoZXJlJ3Mgbm8gcGxhY2UgdGhhdAorCSAqIHdlIGNhbiBndWFyYW50ZWUgd2UnbGwgYmUgY2FsbGVkIGJlZm9yZSBhbnkgdGhyZWFkcworCSAqIG90aGVyIHRoYW4gdGhlIG1haW4gdGhyZWFkIGV4aXN0cy4gIChGb3IgZXhhbXBsZSwKKwkgKiB0aGlzIG1pZ2h0IGJlIGEgc3RhdGljIGxpYnJhcnksIHNvIHdlIGNhbid0IGFycmFuZ2UKKwkgKiB0byBiZSBjYWxsZWQgYnkgRGxsTWFpbigpLCBhbmQgdGhlcmUncyBubyBndWFyYW50ZWUKKwkgKiB0aGF0IHRoZSBhcHBsaWNhdGlvbiBjYWxsZWQgcGNhcF9pbml0KCkgLSB3aGljaCBpcworCSAqIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBvbmx5IGZyb20gb25lIHRocmVhZCAtIHNvCisJICogd2UgY2FuJ3QgYXJyYW5nZSB0byBiZSBjYWxsZWQgZnJvbSBpdC4pCisJICoKKwkgKiBJZiBub2JvZHkncyB0cmllZCB0byBsb2FkIGl0IHlldCwgbWFyayBpdCBhcworCSAqIGxvYWRpbmc7IGluIGFueSBjYXNlLCByZXR1cm4gdGhlIHN0YXR1cyBiZWZvcmUKKwkgKiB3ZSBtb2RpZmllZCBpdC4KKwkgKi8KKwljdXJyZW50X3N0YXR1cyA9IEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKChMT05HICopJmFpcnBjYXBfbG9hZF9zdGF0dXMsCisJICAgIEFJUlBDQVBfQVBJX0xPQURJTkcsIEFJUlBDQVBfQVBJX1VOTE9BREVEKTsKKworCS8qCisJICogSWYgdGhlIHN0YXR1cyB3YXMgQUlSUENBUF9BUElfVU5MT0FERUQsIHdlJ3ZlIHNldCBpdAorCSAqIHRvIEFJUlBDQVBfQVBJX0xPQURJTkcsIGJlY2F1c2Ugd2UncmUgZ29pbmcgdG8gYmUKKwkgKiB0aGUgb25lcyB0byBsb2FkIHRoZSBsaWJyYXJ5IGJ1dCBjdXJyZW50X3N0YXR1cyBpcworCSAqIEFJUlBDQVBfQVBJX1VOTE9BREVELgorCSAqCisJICogaWYgaXQgd2FzIEFJUlBDQVBfQVBJX0xPQURJTkcsIG1lYW5pbmcgc29tZWJvZHkgZWxzZQorCSAqIHdhcyB0cnlpbmcgdG8gbG9hZCBpdCwgc3BpbiB1bnRpbCB0aGV5IGZpbmlzaCBhbmQKKwkgKiBzZXQgdGhlIHN0YXR1cyB0byBhIHZhbHVlIHJlZmxlY3Rpbmcgd2hldGhlciB0aGV5CisJICogc3VjY2VlZGVkLgorCSAqLworCXdoaWxlIChjdXJyZW50X3N0YXR1cyA9PSBBSVJQQ0FQX0FQSV9MT0FESU5HKSB7CisJCWN1cnJlbnRfc3RhdHVzID0gSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoKExPTkcqKSZhaXJwY2FwX2xvYWRfc3RhdHVzLAorCQkgICAgQUlSUENBUF9BUElfTE9BRElORywgQUlSUENBUF9BUElfTE9BRElORyk7CisJCVNsZWVwKDEwKTsKKwl9CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQsIGN1cnJlbnRfc3RhdHVzIGlzIGVpdGhlcjoKKwkgKgorCSAqCUFJUlBDQVBfQVBJX0xPQURFRCwgaW4gd2hpY2ggY2FzZSBhbm90aGVyIHRocmVhZAorCSAqCWxvYWRlZCB0aGUgbGlicmFyeSwgc28gd2UncmUgZG9uZTsKKwkgKgorCSAqCUFJUlBDQVBfQVBJX0NBTk5PVF9MT0FELCBpbiB3aGljaCBhbm90aGVyIHRocmVhZAorCSAqCXRyaWVkIGFuZCBmYWlsZWQgdG8gbG9hZCB0aGUgbGlicmFyeSwgc28gd2UncmUKKwkgKglkb25lIC0gd2Ugd29uJ3QgdHJ5IGl0IG91cnNlbHZlczsKKwkgKgorCSAqCUFJUlBDQVBfQVBJX0xPQURJTkcsIGluIHdoaWNoIGNhc2UgKndlJ3JlKiB0aGUKKwkgKglvbmVzIGxvYWRpbmcgaXQsIGFuZCBzaG91bGQgbm93IHRyeSB0byBkbyBzby4KKwkgKi8KKwlpZiAoY3VycmVudF9zdGF0dXMgID09IEFJUlBDQVBfQVBJX0xPQURFRCkKKwkJcmV0dXJuIEFJUlBDQVBfQVBJX0xPQURFRDsKKworCWlmIChjdXJyZW50X3N0YXR1cyA9PSBBSVJQQ0FQX0FQSV9DQU5OT1RfTE9BRCkKKwkJcmV0dXJuIEFJUlBDQVBfQVBJX0NBTk5PVF9MT0FEOworCisJLyoKKwkgKiBTdGFydCBvdXQgYXNzdW1pbmcgd2UgY2FuJ3QgbG9hZCBpdC4KKwkgKi8KKwljdXJyZW50X3N0YXR1cyA9IEFJUlBDQVBfQVBJX0NBTk5PVF9MT0FEOworCisJYWlycGNhcF9saWIgPSBwY2FwX2xvYWRfY29kZSgiYWlycGNhcC5kbGwiKTsKKwlpZiAoYWlycGNhcF9saWIgIT0gTlVMTCkgeworCQkvKgorCQkgKiBPSywgd2UndmUgbG9hZGVkIHRoZSBsaWJyYXJ5OyBub3cgdHJ5IHRvIGZpbmQgdGhlCisJCSAqIGZ1bmN0aW9ucyB3ZSBuZWVkIGluIGl0LgorCQkgKi8KKwkJcF9BaXJwY2FwR2V0TGFzdEVycm9yID0gKEFpcnBjYXBHZXRMYXN0RXJyb3JIYW5kbGVyKSBwY2FwX2ZpbmRfZnVuY3Rpb24oYWlycGNhcF9saWIsICJBaXJwY2FwR2V0TGFzdEVycm9yIik7CisJCXBfQWlycGNhcEdldERldmljZUxpc3QgPSAoQWlycGNhcEdldERldmljZUxpc3RIYW5kbGVyKSBwY2FwX2ZpbmRfZnVuY3Rpb24oYWlycGNhcF9saWIsICJBaXJwY2FwR2V0RGV2aWNlTGlzdCIpOworCQlwX0FpcnBjYXBGcmVlRGV2aWNlTGlzdCA9IChBaXJwY2FwRnJlZURldmljZUxpc3RIYW5kbGVyKSBwY2FwX2ZpbmRfZnVuY3Rpb24oYWlycGNhcF9saWIsICJBaXJwY2FwRnJlZURldmljZUxpc3QiKTsKKwkJcF9BaXJwY2FwT3BlbiA9IChBaXJwY2FwT3BlbkhhbmRsZXIpIHBjYXBfZmluZF9mdW5jdGlvbihhaXJwY2FwX2xpYiwgIkFpcnBjYXBPcGVuIik7CisJCXBfQWlycGNhcENsb3NlID0gKEFpcnBjYXBDbG9zZUhhbmRsZXIpIHBjYXBfZmluZF9mdW5jdGlvbihhaXJwY2FwX2xpYiwgIkFpcnBjYXBDbG9zZSIpOworCQlwX0FpcnBjYXBTZXREZXZpY2VNYWNGbGFncyA9IChBaXJwY2FwU2V0RGV2aWNlTWFjRmxhZ3NIYW5kbGVyKSBwY2FwX2ZpbmRfZnVuY3Rpb24oYWlycGNhcF9saWIsICJBaXJwY2FwU2V0RGV2aWNlTWFjRmxhZ3MiKTsKKwkJcF9BaXJwY2FwU2V0TGlua1R5cGUgPSAoQWlycGNhcFNldExpbmtUeXBlSGFuZGxlcikgcGNhcF9maW5kX2Z1bmN0aW9uKGFpcnBjYXBfbGliLCAiQWlycGNhcFNldExpbmtUeXBlIik7CisJCXBfQWlycGNhcEdldExpbmtUeXBlID0gKEFpcnBjYXBHZXRMaW5rVHlwZUhhbmRsZXIpIHBjYXBfZmluZF9mdW5jdGlvbihhaXJwY2FwX2xpYiwgIkFpcnBjYXBHZXRMaW5rVHlwZSIpOworCQlwX0FpcnBjYXBTZXRLZXJuZWxCdWZmZXIgPSAoQWlycGNhcFNldEtlcm5lbEJ1ZmZlckhhbmRsZXIpIHBjYXBfZmluZF9mdW5jdGlvbihhaXJwY2FwX2xpYiwgIkFpcnBjYXBTZXRLZXJuZWxCdWZmZXIiKTsKKwkJcF9BaXJwY2FwU2V0RmlsdGVyID0gKEFpcnBjYXBTZXRGaWx0ZXJIYW5kbGVyKSBwY2FwX2ZpbmRfZnVuY3Rpb24oYWlycGNhcF9saWIsICJBaXJwY2FwU2V0RmlsdGVyIik7CisJCXBfQWlycGNhcFNldE1pblRvQ29weSA9IChBaXJwY2FwU2V0TWluVG9Db3B5SGFuZGxlcikgcGNhcF9maW5kX2Z1bmN0aW9uKGFpcnBjYXBfbGliLCAiQWlycGNhcFNldE1pblRvQ29weSIpOworCQlwX0FpcnBjYXBHZXRSZWFkRXZlbnQgPSAoQWlycGNhcEdldFJlYWRFdmVudEhhbmRsZXIpIHBjYXBfZmluZF9mdW5jdGlvbihhaXJwY2FwX2xpYiwgIkFpcnBjYXBHZXRSZWFkRXZlbnQiKTsKKwkJcF9BaXJwY2FwUmVhZCA9IChBaXJwY2FwUmVhZEhhbmRsZXIpIHBjYXBfZmluZF9mdW5jdGlvbihhaXJwY2FwX2xpYiwgIkFpcnBjYXBSZWFkIik7CisJCXBfQWlycGNhcFdyaXRlID0gKEFpcnBjYXBXcml0ZUhhbmRsZXIpIHBjYXBfZmluZF9mdW5jdGlvbihhaXJwY2FwX2xpYiwgIkFpcnBjYXBXcml0ZSIpOworCQlwX0FpcnBjYXBHZXRTdGF0cyA9IChBaXJwY2FwR2V0U3RhdHNIYW5kbGVyKSBwY2FwX2ZpbmRfZnVuY3Rpb24oYWlycGNhcF9saWIsICJBaXJwY2FwR2V0U3RhdHMiKTsKKworCQkvLworCQkvLyBNYWtlIHN1cmUgdGhhdCB3ZSBmb3VuZCBldmVyeXRoaW5nCisJCS8vCisJCWlmIChwX0FpcnBjYXBHZXRMYXN0RXJyb3IgIT0gTlVMTCAmJgorCQkgICAgcF9BaXJwY2FwR2V0RGV2aWNlTGlzdCAhPSBOVUxMICYmCisJCSAgICBwX0FpcnBjYXBGcmVlRGV2aWNlTGlzdCAhPSBOVUxMICYmCisJCSAgICBwX0FpcnBjYXBPcGVuICE9IE5VTEwgJiYKKwkJICAgIHBfQWlycGNhcENsb3NlICE9IE5VTEwgJiYKKwkJICAgIHBfQWlycGNhcFNldERldmljZU1hY0ZsYWdzICE9IE5VTEwgJiYKKwkJICAgIHBfQWlycGNhcFNldExpbmtUeXBlICE9IE5VTEwgJiYKKwkJICAgIHBfQWlycGNhcEdldExpbmtUeXBlICE9IE5VTEwgJiYKKwkJICAgIHBfQWlycGNhcFNldEtlcm5lbEJ1ZmZlciAhPSBOVUxMICYmCisJCSAgICBwX0FpcnBjYXBTZXRGaWx0ZXIgIT0gTlVMTCAmJgorCQkgICAgcF9BaXJwY2FwU2V0TWluVG9Db3B5ICE9IE5VTEwgJiYKKwkJICAgIHBfQWlycGNhcEdldFJlYWRFdmVudCAhPSBOVUxMICYmCisJCSAgICBwX0FpcnBjYXBSZWFkICE9IE5VTEwgJiYKKwkJICAgIHBfQWlycGNhcFdyaXRlICE9IE5VTEwgJiYKKwkJICAgIHBfQWlycGNhcEdldFN0YXRzICE9IE5VTEwpIHsKKwkJCS8qCisJCQkgKiBXZSBoYXZlIGFsbCB3ZSBuZWVkLgorCQkJICovCisJCQljdXJyZW50X3N0YXR1cyA9IEFJUlBDQVBfQVBJX0xPQURFRDsKKwkJfQorCX0KKworCWlmIChjdXJyZW50X3N0YXR1cyAhPSBBSVJQQ0FQX0FQSV9MT0FERUQpIHsKKwkJLyoKKwkJICogV2UgZmFpbGVkOyBpZiB3ZSBmb3VuZCB0aGUgRExMLCBjbG9zZSB0aGUKKwkJICogaGFuZGxlIGZvciBpdC4KKwkJICovCisJCWlmIChhaXJwY2FwX2xpYiAhPSBOVUxMKSB7CisJCQlGcmVlTGlicmFyeShhaXJwY2FwX2xpYik7CisJCQlhaXJwY2FwX2xpYiA9IE5VTEw7CisJCX0KKwl9CisKKwkvKgorCSAqIE5vdyBzZXQgdGhlIHN0YXR1cyBhcHByb3ByaWF0ZWx5IC0gYW5kIGF0b21pY2FsbHkuCisJICovCisJSW50ZXJsb2NrZWRFeGNoYW5nZSgoTE9ORyAqKSZhaXJwY2FwX2xvYWRfc3RhdHVzLCBjdXJyZW50X3N0YXR1cyk7CisKKwlyZXR1cm4gY3VycmVudF9zdGF0dXM7Cit9CisKKy8qCisgKiBQcml2YXRlIGRhdGEgZm9yIGNhcHR1cmluZyBvbiBBaXJQY2FwIGRldmljZXMuCisgKi8KK3N0cnVjdCBwY2FwX2FpcnBjYXAgeworCVBBaXJwY2FwSGFuZGxlIGFkYXB0ZXI7CisJaW50IGZpbHRlcmluZ19pbl9rZXJuZWw7CisJaW50IG5vbmJsb2NrOworCWludCByZWFkX3RpbWVvdXQ7CisJSEFORExFIHJlYWRfZXZlbnQ7CisJc3RydWN0IHBjYXBfc3RhdCBzdGF0OworfTsKKworc3RhdGljIGludAorYWlycGNhcF9zZXRmaWx0ZXIocGNhcF90ICpwLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKmZwKQoreworCXN0cnVjdCBwY2FwX2FpcnBjYXAgKnBhID0gcC0+cHJpdjsKKworCWlmICghcF9BaXJwY2FwU2V0RmlsdGVyKHBhLT5hZGFwdGVyLCBmcC0+YmZfaW5zbnMsCisJICAgIGZwLT5iZl9sZW4gKiBzaXplb2Yoc3RydWN0IGJwZl9pbnNuKSkpIHsKKwkJLyoKKwkJICogS2VybmVsIGZpbHRlciBub3QgaW5zdGFsbGVkLgorCQkgKgorCQkgKiBYWFggLSB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdGhpcyBmYWlsZWQgYmVjYXVzZToKKwkJICoKKwkJICogIHRoZSBrZXJuZWwgcmVqZWN0ZWQgdGhlIGZpbHRlciBwcm9ncmFtIGFzIGludmFsaWQsCisJCSAqICBpbiB3aGljaCBjYXNlIHdlIHNob3VsZCBmYWxsIGJhY2sgb24gdXNlcmxhbmQKKwkJICogIGZpbHRlcmluZzsKKwkJICoKKwkJICogIHRoZSBrZXJuZWwgcmVqZWN0ZWQgdGhlIGZpbHRlciBwcm9ncmFtIGFzIHRvbyBiaWcsCisJCSAqICBpbiB3aGljaCBjYXNlIHdlIHNob3VsZCBhZ2FpbiBmYWxsIGJhY2sgb24KKwkJICogIHVzZXJsYW5kIGZpbHRlcmluZzsKKwkJICoKKwkJICogIHRoZXJlIHdhcyBzb21lIG90aGVyIHByb2JsZW0sIGluIHdoaWNoIGNhc2Ugd2UKKwkJICogIHNob3VsZCBwcm9iYWJseSByZXBvcnQgYW4gZXJyb3I7CisJCSAqCisJCSAqIFNvIHdlIGp1c3QgZmFsbCBiYWNrIG9uIHVzZXJsYW5kIGZpbHRlcmluZyBpbgorCQkgKiBhbGwgY2FzZXMuCisJCSAqLworCisJCS8qCisJCSAqIGluc3RhbGxfYnBmX3Byb2dyYW0oKSB2YWxpZGF0ZXMgdGhlIHByb2dyYW0uCisJCSAqCisJCSAqIFhYWCAtIHdoYXQgaWYgd2UgYWxyZWFkeSBoYXZlIGEgZmlsdGVyIGluIHRoZSBrZXJuZWw/CisJCSAqLworCQlpZiAoaW5zdGFsbF9icGZfcHJvZ3JhbShwLCBmcCkgPCAwKQorCQkJcmV0dXJuICgtMSk7CisJCXBhLT5maWx0ZXJpbmdfaW5fa2VybmVsID0gMDsJLyogZmlsdGVyaW5nIGluIHVzZXJsYW5kICovCisJCXJldHVybiAoMCk7CisJfQorCisJLyoKKwkgKiBJdCB3b3JrZWQuCisJICovCisJcGEtPmZpbHRlcmluZ19pbl9rZXJuZWwgPSAxOwkvKiBmaWx0ZXJpbmcgaW4gdGhlIGtlcm5lbCAqLworCisJLyoKKwkgKiBEaXNjYXJkIGFueSBwcmV2aW91c2x5LXJlY2VpdmVkIHBhY2tldHMsIGFzIHRoZXkgbWlnaHQgaGF2ZQorCSAqIHBhc3NlZCB3aGF0ZXZlciBmaWx0ZXIgd2FzIGZvcm1lcmx5IGluIGVmZmVjdCwgYnV0IG1pZ2h0CisJICogbm90IHBhc3MgdGhpcyBmaWx0ZXIgKEJJT0NTRVRGIGRpc2NhcmRzIHBhY2tldHMgYnVmZmVyZWQKKwkgKiBpbiB0aGUga2VybmVsLCBzbyB5b3UgY2FuIGxvc2UgcGFja2V0cyBpbiBhbnkgY2FzZSkuCisJICovCisJcC0+Y2MgPSAwOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2FpcnBjYXBfc2V0X2RhdGFsaW5rKHBjYXBfdCAqcCwgaW50IGRsdCkKK3sKKwlzdHJ1Y3QgcGNhcF9haXJwY2FwICpwYSA9IHAtPnByaXY7CisJQWlycGNhcExpbmtUeXBlIHR5cGU7CisKKwlzd2l0Y2ggKGRsdCkgeworCisJY2FzZSBETFRfSUVFRTgwMl8xMV9SQURJTzoKKwkJdHlwZSA9IEFJUlBDQVBfTFRfODAyXzExX1BMVVNfUkFESU87CisJCWJyZWFrOworCisJY2FzZSBETFRfUFBJOgorCQl0eXBlID0gQUlSUENBUF9MVF84MDJfMTFfUExVU19QUEk7CisJCWJyZWFrOworCisJY2FzZSBETFRfSUVFRTgwMl8xMToKKwkJdHlwZSA9IEFJUlBDQVBfTFRfODAyXzExOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIFRoaXMgY2FuJ3QgaGFwcGVuOyBqdXN0IHJldHVybi4gKi8KKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKCFwX0FpcnBjYXBTZXRMaW5rVHlwZShwYS0+YWRhcHRlciwgdHlwZSkpIHsKKwkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkgICAgIkFpcnBjYXBTZXRMaW5rVHlwZSgpIGZhaWxlZDogJXMiLAorCQkgICAgcF9BaXJwY2FwR2V0TGFzdEVycm9yKHBhLT5hZGFwdGVyKSk7CisJCXJldHVybiAoLTEpOworCX0KKwlwLT5saW5rdHlwZSA9IGRsdDsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CithaXJwY2FwX2dldG5vbmJsb2NrKHBjYXBfdCAqcCkKK3sKKwlzdHJ1Y3QgcGNhcF9haXJwY2FwICpwYSA9IHAtPnByaXY7CisKKwlyZXR1cm4gKHBhLT5ub25ibG9jayk7Cit9CisKK3N0YXRpYyBpbnQKK2FpcnBjYXBfc2V0bm9uYmxvY2socGNhcF90ICpwLCBpbnQgbm9uYmxvY2spCit7CisJc3RydWN0IHBjYXBfYWlycGNhcCAqcGEgPSBwLT5wcml2OworCWludCBuZXd0aW1lb3V0OworCisJaWYgKG5vbmJsb2NrKSB7CisJCS8qCisJCSAqIFNldCB0aGUgcGFja2V0IGJ1ZmZlciB0aW1lb3V0IHRvIC0xIGZvciBub24tYmxvY2tpbmcKKwkJICogbW9kZS4KKwkJICovCisJCW5ld3RpbWVvdXQgPSAtMTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBSZXN0b3JlIHRoZSB0aW1lb3V0IHNldCB3aGVuIHRoZSBkZXZpY2Ugd2FzIG9wZW5lZC4KKwkJICogKE5vdGUgdGhhdCB0aGlzIG1heSBiZSAtMSwgaW4gd2hpY2ggY2FzZSB3ZSdyZSBub3QKKwkJICogcmVhbGx5IGxlYXZpbmcgbm9uLWJsb2NraW5nIG1vZGUuICBIb3dldmVyLCBhbHRob3VnaAorCQkgKiB0aGUgdGltZW91dCBhcmd1bWVudCB0byBwY2FwX3NldF90aW1lb3V0KCkgYW5kCisJCSAqIHBjYXBfb3Blbl9saXZlKCkgaXMgYW4gaW50LCB5b3UncmUgbm90IHN1cHBvc2VkIHRvCisJCSAqIHN1cHBseSBhIG5lZ2F0aXZlIHZhbHVlLCBzbyB0aGF0ICJzaG91bGRuJ3QgaGFwcGVuIi4pCisJCSAqLworCQluZXd0aW1lb3V0ID0gcC0+b3B0LnRpbWVvdXQ7CisJfQorCXBhLT5yZWFkX3RpbWVvdXQgPSBuZXd0aW1lb3V0OworCXBhLT5ub25ibG9jayA9IChuZXd0aW1lb3V0ID09IC0xKTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CithaXJwY2FwX3N0YXRzKHBjYXBfdCAqcCwgc3RydWN0IHBjYXBfc3RhdCAqcHMpCit7CisJc3RydWN0IHBjYXBfYWlycGNhcCAqcGEgPSBwLT5wcml2OworCUFpcnBjYXBTdGF0cyB0YXM7CisKKwkvKgorCSAqIFRyeSB0byBnZXQgc3RhdGlzdGljcy4KKwkgKi8KKwlpZiAoIXBfQWlycGNhcEdldFN0YXRzKHBhLT5hZGFwdGVyLCAmdGFzKSkgeworCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICAiQWlycGNhcEdldFN0YXRzKCkgZmFpbGVkOiAlcyIsCisJCSAgICBwX0FpcnBjYXBHZXRMYXN0RXJyb3IocGEtPmFkYXB0ZXIpKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJcHMtPnBzX2Ryb3AgPSB0YXMuRHJvcHM7CisJcHMtPnBzX3JlY3YgPSB0YXMuUmVjdnM7CisJcHMtPnBzX2lmZHJvcCA9IHRhcy5JZkRyb3BzOworCisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIFdpbjMyLW9ubHkgcm91dGluZSBmb3IgZ2V0dGluZyBzdGF0aXN0aWNzLgorICoKKyAqIFRoaXMgd2F5IGlzIGRlZmluaXRlbHkgc2FmZXIgdGhhbiBwYXNzaW5nIHRoZSBwY2FwX3N0YXQgKiBmcm9tIHRoZSB1c2VybGFuZC4KKyAqIEluIGZhY3QsIHRoZXJlIGNvdWxkIGhhcHBlbiB0aGFuIHRoZSB1c2VyIGFsbG9jYXRlcyBhIHZhcmlhYmxlIHdoaWNoIGlzIG5vdAorICogYmlnIGVub3VnaCBmb3IgdGhlIG5ldyBzdHJ1Y3R1cmUsIGFuZCB0aGUgbGlicmFyeSB3aWxsIHdyaXRlIGluIGEgem9uZQorICogd2hpY2ggaXMgbm90IGFsbG9jYXRlZCB0byB0aGlzIHZhcmlhYmxlLgorICoKKyAqIEluIHRoaXMgd2F5LCB3ZSdyZSBwcmV0dHkgc3VyZSB3ZSBhcmUgd3JpdGluZyBvbiBtZW1vcnkgYWxsb2NhdGVkIHRvIHRoaXMKKyAqIHZhcmlhYmxlLgorICoKKyAqIFhYWCAtIGJ1dCB0aGlzIGlzIHRoZSB3cm9uZyB3YXkgdG8gaGFuZGxlIHN0YXRpc3RpY3MuICBJbnN0ZWFkLCB3ZSBzaG91bGQKKyAqIGhhdmUgYW4gQVBJIHRoYXQgcmV0dXJucyBkYXRhIGluIGEgZm9ybSBsaWtlIHRoZSBPcHRpb25zIHNlY3Rpb24gb2YgYQorICogcGNhcG5nIEludGVyZmFjZSBTdGF0aXN0aWNzIEJsb2NrOgorICoKKyAqICAgIGh0dHBzOi8veG1sMnJmYy50b29scy5pZXRmLm9yZy9jZ2ktYmluL3htbDJyZmMuY2dpP3VybD1odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vcGNhcG5nL3BjYXBuZy9tYXN0ZXIvZHJhZnQtdHVleGVuLW9wc2F3Zy1wY2FwbmcueG1sJm1vZGVBc0Zvcm1hdD1odG1sL2FzY2lpJnR5cGU9YXNjaWkjcmZjLnNlY3Rpb24uNC42CisgKgorICogd2hpY2ggd291bGQgbGV0IHVzIGFkZCBuZXcgc3RhdGlzdGljcyBzdHJhaWdodGZvcndhcmRseSBhbmQgaW5kaWNhdGUgd2hpY2gKKyAqIHN0YXRpc3RpY3Mgd2UgYXJlIGFuZCBhcmUgKm5vdCogcHJvdmlkaW5nLCByYXRoZXIgdGhhbiBoYXZpbmcgdG8gcHJvdmlkZQorICogcG9zc2libHktYm9ndXMgdmFsdWVzIGZvciBzdGF0aXN0aWNzIHdlIGNhbid0IHByb3ZpZGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNhcF9zdGF0ICoKK2FpcnBjYXBfc3RhdHNfZXgocGNhcF90ICpwLCBpbnQgKnBjYXBfc3RhdF9zaXplKQoreworCXN0cnVjdCBwY2FwX2FpcnBjYXAgKnBhID0gcC0+cHJpdjsKKwlBaXJwY2FwU3RhdHMgdGFzOworCisJKnBjYXBfc3RhdF9zaXplID0gc2l6ZW9mIChwLT5zdGF0KTsKKworCS8qCisJICogVHJ5IHRvIGdldCBzdGF0aXN0aWNzLgorCSAqLworCWlmICghcF9BaXJwY2FwR2V0U3RhdHMocGEtPmFkYXB0ZXIsICZ0YXMpKSB7CisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJICAgICJBaXJwY2FwR2V0U3RhdHMoKSBmYWlsZWQ6ICVzIiwKKwkJICAgIHBfQWlycGNhcEdldExhc3RFcnJvcihwYS0+YWRhcHRlcikpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCXAtPnN0YXQucHNfcmVjdiA9IHRhcy5SZWN2czsKKwlwLT5zdGF0LnBzX2Ryb3AgPSB0YXMuRHJvcHM7CisJcC0+c3RhdC5wc19pZmRyb3AgPSB0YXMuSWZEcm9wczsKKwkvKgorCSAqIEp1c3QgaW4gY2FzZSB0aGlzIGlzIGV2ZXIgY29tcGlsZWQgZm9yIGEgdGFyZ2V0IG90aGVyIHRoYW4KKwkgKiBXaW5kb3dzLCB3aGljaCBpcyBleHRyZW1lbHkgdW5saWtlbHkgYXQgYmVzdC4KKwkgKi8KKyNpZmRlZiBfV0lOMzIKKwlwLT5zdGF0LnBzX2NhcHQgPSB0YXMuQ2FwdDsKKyNlbmRpZgorCXJldHVybiAoJnAtPnN0YXQpOworfQorCisvKiBTZXQgdGhlIGRpbWVuc2lvbiBvZiB0aGUga2VybmVsLWxldmVsIGNhcHR1cmUgYnVmZmVyICovCitzdGF0aWMgaW50CithaXJwY2FwX3NldGJ1ZmYocGNhcF90ICpwLCBpbnQgZGltKQoreworCXN0cnVjdCBwY2FwX2FpcnBjYXAgKnBhID0gcC0+cHJpdjsKKworCWlmICghcF9BaXJwY2FwU2V0S2VybmVsQnVmZmVyKHBhLT5hZGFwdGVyLCBkaW0pKSB7CisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJICAgICJBaXJwY2FwU2V0S2VybmVsQnVmZmVyKCkgZmFpbGVkOiAlcyIsCisJCSAgICBwX0FpcnBjYXBHZXRMYXN0RXJyb3IocGEtPmFkYXB0ZXIpKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXJldHVybiAoMCk7Cit9CisKKy8qIFNldCB0aGUgZHJpdmVyIHdvcmtpbmcgbW9kZSAqLworc3RhdGljIGludAorYWlycGNhcF9zZXRtb2RlKHBjYXBfdCAqcCwgaW50IG1vZGUpCit7CisJIGlmIChtb2RlICE9IE1PREVfQ0FQVCkgeworCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICAiT25seSBNT0RFX0NBUFQgaXMgc3VwcG9ydGVkIG9uIGFuIEFpclBjYXAgYWRhcHRlciIpOworCQlyZXR1cm4gKC0xKTsKKwkgfQorCSByZXR1cm4gKDApOworfQorCisvKnNldCB0aGUgbWluaW11bSBhbW91bnQgb2YgZGF0YSB0aGF0IHdpbGwgcmVsZWFzZSBhIHJlYWQgY2FsbCovCitzdGF0aWMgaW50CithaXJwY2FwX3NldG1pbnRvY29weShwY2FwX3QgKnAsIGludCBzaXplKQoreworCXN0cnVjdCBwY2FwX2FpcnBjYXAgKnBhID0gcC0+cHJpdjsKKworCWlmICghcF9BaXJwY2FwU2V0TWluVG9Db3B5KHBhLT5hZGFwdGVyLCBzaXplKSkgeworCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICAiQWlycGNhcFNldE1pblRvQ29weSgpIGZhaWxlZDogJXMiLAorCQkgICAgcF9BaXJwY2FwR2V0TGFzdEVycm9yKHBhLT5hZGFwdGVyKSk7CisJCXJldHVybiAoLTEpOworCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgSEFORExFCithaXJwY2FwX2dldGV2ZW50KHBjYXBfdCAqcCkKK3sKKwlzdHJ1Y3QgcGNhcF9haXJwY2FwICpwYSA9IHAtPnByaXY7CisKKwlyZXR1cm4gKHBhLT5yZWFkX2V2ZW50KTsKK30KKworc3RhdGljIGludAorYWlycGNhcF9vaWRfZ2V0X3JlcXVlc3QocGNhcF90ICpwLCBicGZfdV9pbnQzMiBvaWQgX1VfLCB2b2lkICpkYXRhIF9VXywKKyAgICBzaXplX3QgKmxlbnAgX1VfKQoreworCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkgICAgIkdldHRpbmcgT0lEIHZhbHVlcyBpcyBub3Qgc3VwcG9ydGVkIG9uIGFuIEFpclBjYXAgYWRhcHRlciIpOworCXJldHVybiAoUENBUF9FUlJPUik7Cit9CisKK3N0YXRpYyBpbnQKK2FpcnBjYXBfb2lkX3NldF9yZXF1ZXN0KHBjYXBfdCAqcCwgYnBmX3VfaW50MzIgb2lkIF9VXywgY29uc3Qgdm9pZCAqZGF0YSBfVV8sCisgICAgc2l6ZV90ICpsZW5wIF9VXykKK3sKKwlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJICAgICJTZXR0aW5nIE9JRCB2YWx1ZXMgaXMgbm90IHN1cHBvcnRlZCBvbiBhbiBBaXJQY2FwIGFkYXB0ZXIiKTsKKwlyZXR1cm4gKFBDQVBfRVJST1IpOworfQorCitzdGF0aWMgdV9pbnQKK2FpcnBjYXBfc2VuZHF1ZXVlX3RyYW5zbWl0KHBjYXBfdCAqcCwgcGNhcF9zZW5kX3F1ZXVlICpxdWV1ZSBfVV8sIGludCBzeW5jIF9VXykKK3sKKwlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJICAgICJDYW5ub3QgcXVldWUgcGFja2V0cyBmb3IgdHJhbnNtaXNzaW9uIG9uIGFuIEFpclBjYXAgYWRhcHRlciIpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2FpcnBjYXBfc2V0dXNlcmJ1ZmZlcihwY2FwX3QgKnAsIGludCBzaXplKQoreworCXVuc2lnbmVkIGNoYXIgKm5ld19idWZmOworCisJaWYgKHNpemUgPD0gMCkgeworCQkvKiBCb2d1cyBwYXJhbWV0ZXIgKi8KKwkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkgICAgIkVycm9yOiBpbnZhbGlkIHNpemUgJWQiLHNpemUpOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwkvKiBBbGxvY2F0ZSB0aGUgYnVmZmVyICovCisJbmV3X2J1ZmYgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhzaXplb2YoY2hhcikqc2l6ZSk7CisKKwlpZiAoIW5ld19idWZmKSB7CisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJICAgICJFcnJvcjogbm90IGVub3VnaCBtZW1vcnkiKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJZnJlZShwLT5idWZmZXIpOworCisJcC0+YnVmZmVyID0gbmV3X2J1ZmY7CisJcC0+YnVmc2l6ZSA9IHNpemU7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CithaXJwY2FwX2xpdmVfZHVtcChwY2FwX3QgKnAsIGNoYXIgKmZpbGVuYW1lIF9VXywgaW50IG1heHNpemUgX1VfLAorICAgIGludCBtYXhwYWNrcyBfVV8pCit7CisJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCSAgICAiQWlyUGNhcCBhZGFwdGVycyBkb24ndCBzdXBwb3J0IGxpdmUgZHVtcCIpOworCXJldHVybiAoLTEpOworfQorCitzdGF0aWMgaW50CithaXJwY2FwX2xpdmVfZHVtcF9lbmRlZChwY2FwX3QgKnAsIGludCBzeW5jIF9VXykKK3sKKwlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJICAgICJBaXJQY2FwIGFkYXB0ZXJzIGRvbid0IHN1cHBvcnQgbGl2ZSBkdW1wIik7CisJcmV0dXJuICgtMSk7Cit9CisKK3N0YXRpYyBQQWlycGNhcEhhbmRsZQorYWlycGNhcF9nZXRfYWlycGNhcF9oYW5kbGUocGNhcF90ICpwKQoreworCXN0cnVjdCBwY2FwX2FpcnBjYXAgKnBhID0gcC0+cHJpdjsKKworCXJldHVybiAocGEtPmFkYXB0ZXIpOworfQorCitzdGF0aWMgaW50CithaXJwY2FwX3JlYWQocGNhcF90ICpwLCBpbnQgY250LCBwY2FwX2hhbmRsZXIgY2FsbGJhY2ssIHVfY2hhciAqdXNlcikKK3sKKwlzdHJ1Y3QgcGNhcF9haXJwY2FwICpwYSA9IHAtPnByaXY7CisJaW50IGNjOworCWludCBuOworCXJlZ2lzdGVyIHVfY2hhciAqYnAsICplcDsKKwlVSU5UIGJ5dGVzX3JlYWQ7CisJdV9jaGFyICpkYXRhcDsKKworCWNjID0gcC0+Y2M7CisJaWYgKGNjID09IDApIHsKKwkJLyoKKwkJICogSGFzICJwY2FwX2JyZWFrbG9vcCgpIiBiZWVuIGNhbGxlZD8KKwkJICovCisJCWlmIChwLT5icmVha19sb29wKSB7CisJCQkvKgorCQkJICogWWVzIC0gY2xlYXIgdGhlIGZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhhdCBpdAorCQkJICogaGFzLCBhbmQgcmV0dXJuIFBDQVBfRVJST1JfQlJFQUsgdG8gaW5kaWNhdGUKKwkJCSAqIHRoYXQgd2Ugd2VyZSB0b2xkIHRvIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KKwkJCSAqLworCQkJcC0+YnJlYWtfbG9vcCA9IDA7CisJCQlyZXR1cm4gKFBDQVBfRVJST1JfQlJFQUspOworCQl9CisKKwkJLy8KKwkJLy8gSWYgd2UncmUgbm90IGluIG5vbi1ibG9ja2luZyBtb2RlLCB3YWl0IGZvciBkYXRhIHRvCisJCS8vIGFycml2ZS4KKwkJLy8KKwkJaWYgKHBhLT5yZWFkX3RpbWVvdXQgIT0gLTEpIHsKKwkJCVdhaXRGb3JTaW5nbGVPYmplY3QocGEtPnJlYWRfZXZlbnQsCisJCQkgICAgKHBhLT5yZWFkX3RpbWVvdXQgPT0wICk/IElORklOSVRFOiBwYS0+cmVhZF90aW1lb3V0KTsKKwkJfQorCisJCS8vCisJCS8vIFJlYWQgdGhlIGRhdGEuCisJCS8vIHBfQWlycGNhcFJlYWQgZG9lc24ndCBibG9jay4KKwkJLy8KKwkJaWYgKCFwX0FpcnBjYXBSZWFkKHBhLT5hZGFwdGVyLCAoUEJZVEUpcC0+YnVmZmVyLAorCQkgICAgcC0+YnVmc2l6ZSwgJmJ5dGVzX3JlYWQpKSB7CisJCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkgICAgIkFpcnBjYXBSZWFkKCkgZmFpbGVkOiAlcyIsCisJCQkgICAgcF9BaXJwY2FwR2V0TGFzdEVycm9yKHBhLT5hZGFwdGVyKSk7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQljYyA9IGJ5dGVzX3JlYWQ7CisJCWJwID0gKHVfY2hhciAqKXAtPmJ1ZmZlcjsKKwl9IGVsc2UKKwkJYnAgPSBwLT5icDsKKworCS8qCisJICogTG9vcCB0aHJvdWdoIGVhY2ggcGFja2V0LgorCSAqLworI2RlZmluZSBiaHAgKChBaXJwY2FwQnBmSGVhZGVyICopYnApCisJbiA9IDA7CisJZXAgPSBicCArIGNjOworCWZvciAoOzspIHsKKwkJcmVnaXN0ZXIgdV9pbnQgY2FwbGVuLCBoZHJsZW47CisKKwkJLyoKKwkJICogSGFzICJwY2FwX2JyZWFrbG9vcCgpIiBiZWVuIGNhbGxlZD8KKwkJICogSWYgc28sIHJldHVybiBpbW1lZGlhdGVseSAtIGlmIHdlIGhhdmVuJ3QgcmVhZCBhbnkKKwkJICogcGFja2V0cywgY2xlYXIgdGhlIGZsYWcgYW5kIHJldHVybiBQQ0FQX0VSUk9SX0JSRUFLCisJCSAqIHRvIGluZGljYXRlIHRoYXQgd2Ugd2VyZSB0b2xkIHRvIGJyZWFrIG91dCBvZiB0aGUgbG9vcCwKKwkJICogb3RoZXJ3aXNlIGxlYXZlIHRoZSBmbGFnIHNldCwgc28gdGhhdCB0aGUgKm5leHQqIGNhbGwKKwkJICogd2lsbCBicmVhayBvdXQgb2YgdGhlIGxvb3Agd2l0aG91dCBoYXZpbmcgcmVhZCBhbnkKKwkJICogcGFja2V0cywgYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhY2tldHMgd2UndmUKKwkJICogcHJvY2Vzc2VkIHNvIGZhci4KKwkJICovCisJCWlmIChwLT5icmVha19sb29wKSB7CisJCQlpZiAobiA9PSAwKSB7CisJCQkJcC0+YnJlYWtfbG9vcCA9IDA7CisJCQkJcmV0dXJuIChQQ0FQX0VSUk9SX0JSRUFLKTsKKwkJCX0gZWxzZSB7CisJCQkJcC0+YnAgPSBicDsKKwkJCQlwLT5jYyA9IChpbnQpIChlcCAtIGJwKTsKKwkJCQlyZXR1cm4gKG4pOworCQkJfQorCQl9CisJCWlmIChicCA+PSBlcCkKKwkJCWJyZWFrOworCisJCWNhcGxlbiA9IGJocC0+Q2FwbGVuOworCQloZHJsZW4gPSBiaHAtPkhkcmxlbjsKKwkJZGF0YXAgPSBicCArIGhkcmxlbjsKKwkJLyoKKwkJICogU2hvcnQtY2lyY3VpdCBldmFsdWF0aW9uOiBpZiB1c2luZyBCUEYgZmlsdGVyCisJCSAqIGluIHRoZSBBaXJQY2FwIGFkYXB0ZXIsIG5vIG5lZWQgdG8gZG8gaXQgbm93IC0KKwkJICogd2UgYWxyZWFkeSBrbm93IHRoZSBwYWNrZXQgcGFzc2VkIHRoZSBmaWx0ZXIuCisJCSAqLworCQlpZiAocGEtPmZpbHRlcmluZ19pbl9rZXJuZWwgfHwKKwkJICAgIHAtPmZjb2RlLmJmX2luc25zID09IE5VTEwgfHwKKwkJICAgIHBjYXBfZmlsdGVyKHAtPmZjb2RlLmJmX2luc25zLCBkYXRhcCwgYmhwLT5PcmlnaW5hbGxlbiwgY2FwbGVuKSkgeworCQkJc3RydWN0IHBjYXBfcGt0aGRyIHBrdGhkcjsKKworCQkJcGt0aGRyLnRzLnR2X3NlYyA9IGJocC0+VHNTZWM7CisJCQlwa3RoZHIudHMudHZfdXNlYyA9IGJocC0+VHNVc2VjOworCQkJcGt0aGRyLmNhcGxlbiA9IGNhcGxlbjsKKwkJCXBrdGhkci5sZW4gPSBiaHAtPk9yaWdpbmFsbGVuOworCQkJKCpjYWxsYmFjaykodXNlciwgJnBrdGhkciwgZGF0YXApOworCQkJYnAgKz0gQUlSUENBUF9XT1JEQUxJR04oY2FwbGVuICsgaGRybGVuKTsKKwkJCWlmICgrK24gPj0gY250ICYmICFQQUNLRVRfQ09VTlRfSVNfVU5MSU1JVEVEKGNudCkpIHsKKwkJCQlwLT5icCA9IGJwOworCQkJCXAtPmNjID0gKGludCkoZXAgLSBicCk7CisJCQkJcmV0dXJuIChuKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBTa2lwIHRoaXMgcGFja2V0LgorCQkJICovCisJCQlicCArPSBBSVJQQ0FQX1dPUkRBTElHTihjYXBsZW4gKyBoZHJsZW4pOworCQl9CisJfQorI3VuZGVmIGJocAorCXAtPmNjID0gMDsKKwlyZXR1cm4gKG4pOworfQorCitzdGF0aWMgaW50CithaXJwY2FwX2luamVjdChwY2FwX3QgKnAsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IHNpemUpCit7CisJc3RydWN0IHBjYXBfYWlycGNhcCAqcGEgPSBwLT5wcml2OworCisJLyoKKwkgKiBYWFggLSB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIEFpcnBjYXBXcml0ZSgpICpzaG91bGQqIGhhdmUKKwkgKiBiZWVuIGRlY2xhcmVkIGFzIGEgY29uc3QgcG9pbnRlciAtIGEgd3JpdGUgZnVuY3Rpb24gdGhhdAorCSAqIHN0b21wcyBvbiB3aGF0IGl0IHdyaXRlcyBpcyAqZXh0cmVtZWx5KiBydWRlIC0gYnV0IHN1Y2gKKwkgKiBpcyBsaWZlLiAgV2UgYXNzdW1lIGl0IGlzLCBpbiBmYWN0LCBub3QgZ29pbmcgdG8gd3JpdGUgb24KKwkgKiBvdXIgYnVmZmVyLgorCSAqLworCWlmICghcF9BaXJwY2FwV3JpdGUocGEtPmFkYXB0ZXIsICh2b2lkICopYnVmLCBzaXplKSkgeworCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICAiQWlycGNhcFdyaXRlKCkgZmFpbGVkOiAlcyIsCisJCSAgICBwX0FpcnBjYXBHZXRMYXN0RXJyb3IocGEtPmFkYXB0ZXIpKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJLyoKKwkgKiBXZSBhc3N1bWUgaXQgYWxsIGdvdCBzZW50IGlmICJBaXJwY2FwV3JpdGUoKSIgc3VjY2VlZGVkLgorCSAqICJwY2FwX2luamVjdCgpIiBpcyBleHBlY3RlZCB0byByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcworCSAqIHNlbnQuCisJICovCisJcmV0dXJuIChzaXplKTsKK30KKworc3RhdGljIHZvaWQKK2FpcnBjYXBfY2xlYW51cChwY2FwX3QgKnApCit7CisJc3RydWN0IHBjYXBfYWlycGNhcCAqcGEgPSBwLT5wcml2OworCisJaWYgKHBhLT5hZGFwdGVyICE9IE5VTEwpIHsKKwkJcF9BaXJwY2FwQ2xvc2UocGEtPmFkYXB0ZXIpOworCQlwYS0+YWRhcHRlciA9IE5VTEw7CisJfQorCXBjYXBfY2xlYW51cF9saXZlX2NvbW1vbihwKTsKK30KKworc3RhdGljIHZvaWQKK2FpcnBjYXBfYnJlYWtsb29wKHBjYXBfdCAqcCkKK3sKKwlIQU5ETEUgcmVhZF9ldmVudDsKKworCXBjYXBfYnJlYWtsb29wX2NvbW1vbihwKTsKKwlzdHJ1Y3QgcGNhcF9haXJwY2FwICpwYSA9IHAtPnByaXY7CisKKwkvKiBYWFggLSB3aGF0IGlmIGVpdGhlciBvZiB0aGVzZSBmYWlsPyAqLworCS8qCisJICogWFhYIC0gd2lsbCBTZXRFdmVudCgpIGZvcmNlIGEgd2FrZXVwIGFuZCwgaWYgc28sIHdpbGwKKwkgKiB0aGUgQWlyUGNhcCByZWFkIGNvZGUgaGFuZGxlIHRoYXQgc2FuZWx5PworCSAqLworCWlmICghcF9BaXJwY2FwR2V0UmVhZEV2ZW50KHBhLT5hZGFwdGVyLCAmcmVhZF9ldmVudCkpCisJCXJldHVybjsKKwlTZXRFdmVudChyZWFkX2V2ZW50KTsKK30KKworc3RhdGljIGludAorYWlycGNhcF9hY3RpdmF0ZShwY2FwX3QgKnApCit7CisJc3RydWN0IHBjYXBfYWlycGNhcCAqcGEgPSBwLT5wcml2OworCWNoYXIgKmRldmljZSA9IHAtPm9wdC5kZXZpY2U7CisJY2hhciBhaXJwY2FwX2VycmJ1ZltBSVJQQ0FQX0VSUkJVRl9TSVpFXTsKKwlCT09MIHN0YXR1czsKKwlBaXJwY2FwTGlua1R5cGUgbGlua190eXBlOworCisJcGEtPmFkYXB0ZXIgPSBwX0FpcnBjYXBPcGVuKGRldmljZSwgYWlycGNhcF9lcnJidWYpOworCWlmIChwYS0+YWRhcHRlciA9PSBOVUxMKSB7CisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIiVzIiwgYWlycGNhcF9lcnJidWYpOworCQlyZXR1cm4gKFBDQVBfRVJST1IpOworCX0KKworCS8qCisJICogU2V0IG1vbml0b3IgbW9kZSBhcHByb3ByaWF0ZWx5LgorCSAqIEFsd2F5cyB0dXJuIG9mZiB0aGUgIkFDSyBmcmFtZXMgc2VudCB0byB0aGUgY2FyZCIgbW9kZS4KKwkgKi8KKwlpZiAocC0+b3B0LnJmbW9uKSB7CisJCXN0YXR1cyA9IHBfQWlycGNhcFNldERldmljZU1hY0ZsYWdzKHBhLT5hZGFwdGVyLAorCQkgICAgQUlSUENBUF9NRl9NT05JVE9SX01PREVfT04pOworCX0gZWxzZQorCQlzdGF0dXMgPSBwX0FpcnBjYXBTZXREZXZpY2VNYWNGbGFncyhwYS0+YWRhcHRlciwKKwkJICAgIEFJUlBDQVBfTUZfQUNLX0ZSQU1FU19PTik7CisJaWYgKCFzdGF0dXMpIHsKKwkJcF9BaXJwY2FwQ2xvc2UocGEtPmFkYXB0ZXIpOworCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICAiQWlycGNhcFNldERldmljZU1hY0ZsYWdzKCkgZmFpbGVkOiAlcyIsCisJCSAgICBwX0FpcnBjYXBHZXRMYXN0RXJyb3IocGEtPmFkYXB0ZXIpKTsKKwkJcmV0dXJuIChQQ0FQX0VSUk9SKTsKKwl9CisKKwkvKgorCSAqIFR1cm4gYSBuZWdhdGl2ZSBzbmFwc2hvdCB2YWx1ZSAoaW52YWxpZCksIGEgc25hcHNob3QgdmFsdWUgb2YKKwkgKiAwICh1bnNwZWNpZmllZCksIG9yIGEgdmFsdWUgYmlnZ2VyIHRoYW4gdGhlIG5vcm1hbCBtYXhpbXVtCisJICogdmFsdWUsIGludG8gdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZS4KKwkgKgorCSAqIElmIHNvbWUgYXBwbGljYXRpb24gcmVhbGx5ICpuZWVkcyogYSBiaWdnZXIgc25hcHNob3QKKwkgKiBsZW5ndGgsIHdlIHNob3VsZCBqdXN0IGluY3JlYXNlIE1BWElNVU1fU05BUExFTi4KKwkgKi8KKwlpZiAocC0+c25hcHNob3QgPD0gMCB8fCBwLT5zbmFwc2hvdCA+IE1BWElNVU1fU05BUExFTikKKwkJcC0+c25hcHNob3QgPSBNQVhJTVVNX1NOQVBMRU47CisKKwkvKgorCSAqIElmIHRoZSBidWZmZXIgc2l6ZSB3YXNuJ3QgZXhwbGljaXRseSBzZXQsIGRlZmF1bHQgdG8KKwkgKiBBSVJQQ0FQX0RFRkFVTFRfS0VSTkVMX0JVRkZFUl9TSVpFLgorCSAqLworCWlmIChwLT5vcHQuYnVmZmVyX3NpemUgPT0gMCkKKwkJcC0+b3B0LmJ1ZmZlcl9zaXplID0gQUlSUENBUF9ERUZBVUxUX0tFUk5FTF9CVUZGRVJfU0laRTsKKworCWlmICghcF9BaXJwY2FwU2V0S2VybmVsQnVmZmVyKHBhLT5hZGFwdGVyLCBwLT5vcHQuYnVmZmVyX3NpemUpKSB7CisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJICAgICJBaXJwY2FwU2V0S2VybmVsQnVmZmVyKCkgZmFpbGVkOiAlcyIsCisJCSAgICBwX0FpcnBjYXBHZXRMYXN0RXJyb3IocGEtPmFkYXB0ZXIpKTsKKwkJZ290byBiYWQ7CisJfQorCisJaWYoIXBfQWlycGNhcEdldFJlYWRFdmVudChwYS0+YWRhcHRlciwgJnBhLT5yZWFkX2V2ZW50KSkgeworCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICAiQWlycGNhcEdldFJlYWRFdmVudCgpIGZhaWxlZDogJXMiLAorCQkgICAgcF9BaXJwY2FwR2V0TGFzdEVycm9yKHBhLT5hZGFwdGVyKSk7CisJCWdvdG8gYmFkOworCX0KKworCS8qIFNldCB0aGUgYnVmZmVyIHNpemUgKi8KKwlwLT5idWZzaXplID0gQUlSUENBUF9ERUZBVUxUX1VTRVJfQlVGRkVSX1NJWkU7CisJcC0+YnVmZmVyID0gbWFsbG9jKHAtPmJ1ZnNpemUpOworCWlmIChwLT5idWZmZXIgPT0gTlVMTCkgeworCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJICAgIGVycm5vLCAibWFsbG9jIik7CisJCWdvdG8gYmFkOworCX0KKworCWlmIChwLT5vcHQuaW1tZWRpYXRlKSB7CisJCS8qIFRlbGwgdGhlIGRyaXZlciB0byBjb3B5IHRoZSBidWZmZXIgYXMgc29vbiBhcyBkYXRhIGFycml2ZXMuICovCisJCWlmICghcF9BaXJwY2FwU2V0TWluVG9Db3B5KHBhLT5hZGFwdGVyLCAwKSkgeworCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJICAgICJBaXJwY2FwU2V0TWluVG9Db3B5KCkgZmFpbGVkOiAlcyIsCisJCQkgICAgcF9BaXJwY2FwR2V0TGFzdEVycm9yKHBhLT5hZGFwdGVyKSk7CisJCQlnb3RvIGJhZDsKKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIFRlbGwgdGhlIGRyaXZlciB0byBjb3B5IHRoZSBidWZmZXIgb25seSBpZiBpdCBjb250YWlucworCQkgKiBhdCBsZWFzdCAxNksuCisJCSAqLworCQlpZiAoIXBfQWlycGNhcFNldE1pblRvQ29weShwYS0+YWRhcHRlciwgMTYwMDApKSB7CisJCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkgICAgIkFpcnBjYXBTZXRNaW5Ub0NvcHkoKSBmYWlsZWQ6ICVzIiwKKwkJCSAgICBwX0FpcnBjYXBHZXRMYXN0RXJyb3IocGEtPmFkYXB0ZXIpKTsKKwkJCWdvdG8gYmFkOworCQl9CisJfQorCisJLyoKKwkgKiBGaW5kIG91dCB3aGF0IHRoZSBkZWZhdWx0IGxpbmstbGF5ZXIgaGVhZGVyIHR5cGUgaXMsCisJICogYW5kIHNldCBwLT5kYXRhbGluayB0byB0aGF0LgorCSAqCisJICogV2UgZG9uJ3QgZm9yY2UgaXQgdG8gYW5vdGhlciB2YWx1ZSBiZWNhdXNlIHRoZXJlCisJICogbWlnaHQgYmUgc29tZSBwcm9ncmFtcyB1c2luZyBXaW5QY2FwL05wY2FwIHRoYXQsCisJICogd2hlbiBjYXB0dXJpbmcgb24gQWlyUGNhcCBkZXZpY2VzLCBhc3N1bWUgdGhlCisJICogZGVmYXVsdCB2YWx1ZSBzZXQgd2l0aCB0aGUgQWlyUGNhcCBjb25maWd1cmF0aW9uCisJICogcHJvZ3JhbSBpcyB3aGF0IHlvdSBnZXQuCisJICoKKwkgKiBUaGUgb3V0LW9mLXRoZS1ib3ggZGVmYXVsdCBhcHBlYXJzIHRvIGJlIHJhZGlvdGFwLgorCSAqLworCWlmICghcF9BaXJwY2FwR2V0TGlua1R5cGUocGEtPmFkYXB0ZXIsICZsaW5rX3R5cGUpKSB7CisJCS8qIFRoYXQgZmFpbGVkLiAqLworCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICAiQWlycGNhcEdldExpbmtUeXBlKCkgZmFpbGVkOiAlcyIsCisJCSAgICBwX0FpcnBjYXBHZXRMYXN0RXJyb3IocGEtPmFkYXB0ZXIpKTsKKwkJZ290byBiYWQ7CisJfQorCXN3aXRjaCAobGlua190eXBlKSB7CisKKwljYXNlIEFJUlBDQVBfTFRfODAyXzExX1BMVVNfUkFESU86CisJCXAtPmxpbmt0eXBlID0gRExUX0lFRUU4MDJfMTFfUkFESU87CisJCWJyZWFrOworCisJY2FzZSBBSVJQQ0FQX0xUXzgwMl8xMV9QTFVTX1BQSToKKwkJcC0+bGlua3R5cGUgPSBETFRfUFBJOworCQlicmVhazsKKworCWNhc2UgQUlSUENBUF9MVF84MDJfMTE6CisJCXAtPmxpbmt0eXBlID0gRExUX0lFRUU4MDJfMTE7CisJCWJyZWFrOworCisJY2FzZSBBSVJQQ0FQX0xUX1VOS05PV046CisJZGVmYXVsdDoKKwkJLyogT0ssIHdoYXQ/ICovCisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJICAgICJBaXJwY2FwR2V0TGlua1R5cGUoKSByZXR1cm5lZCB1bmtub3duIGxpbmsgdHlwZSAldSIsCisJCSAgICBsaW5rX3R5cGUpOworCQlnb3RvIGJhZDsKKwl9CisKKwkvKgorCSAqIE5vdyBwcm92aWRlIGEgbGlzdCBvZiBhbGwgdGhlIHN1cHBvcnRlZCB0eXBlczsgd2UKKwkgKiBhc3N1bWUgdGhleSBhbGwgd29yay4gIFdlIHB1dCByYWRpb3RhcCBhdCB0aGUgdG9wLAorCSAqIGZvbGxvd2VkIGJ5IFBQSSwgZm9sbG93ZWQgYnkgIm5vIHJhZGlvIG1ldGFkYXRhIi4KKwkgKi8KKwlwLT5kbHRfbGlzdCA9ICh1X2ludCAqKSBtYWxsb2Moc2l6ZW9mKHVfaW50KSAqIDMpOworCWlmIChwLT5kbHRfbGlzdCA9PSBOVUxMKQorCQlnb3RvIGJhZDsKKwlwLT5kbHRfbGlzdFswXSA9IERMVF9JRUVFODAyXzExX1JBRElPOworCXAtPmRsdF9saXN0WzFdID0gRExUX1BQSTsKKwlwLT5kbHRfbGlzdFsyXSA9IERMVF9JRUVFODAyXzExOworCXAtPmRsdF9jb3VudCA9IDM7CisKKwlwLT5yZWFkX29wID0gYWlycGNhcF9yZWFkOworCXAtPmluamVjdF9vcCA9IGFpcnBjYXBfaW5qZWN0OworCXAtPnNldGZpbHRlcl9vcCA9IGFpcnBjYXBfc2V0ZmlsdGVyOworCXAtPnNldGRpcmVjdGlvbl9vcCA9IE5VTEw7CS8qIE5vdCBpbXBsZW1lbnRlZC4gKi8KKwlwLT5zZXRfZGF0YWxpbmtfb3AgPSBhaXJwY2FwX3NldF9kYXRhbGluazsKKwlwLT5nZXRub25ibG9ja19vcCA9IGFpcnBjYXBfZ2V0bm9uYmxvY2s7CisJcC0+c2V0bm9uYmxvY2tfb3AgPSBhaXJwY2FwX3NldG5vbmJsb2NrOworCXAtPmJyZWFrbG9vcF9vcCA9IGFpcnBjYXBfYnJlYWtsb29wOworCXAtPnN0YXRzX29wID0gYWlycGNhcF9zdGF0czsKKwlwLT5zdGF0c19leF9vcCA9IGFpcnBjYXBfc3RhdHNfZXg7CisJcC0+c2V0YnVmZl9vcCA9IGFpcnBjYXBfc2V0YnVmZjsKKwlwLT5zZXRtb2RlX29wID0gYWlycGNhcF9zZXRtb2RlOworCXAtPnNldG1pbnRvY29weV9vcCA9IGFpcnBjYXBfc2V0bWludG9jb3B5OworCXAtPmdldGV2ZW50X29wID0gYWlycGNhcF9nZXRldmVudDsKKwlwLT5vaWRfZ2V0X3JlcXVlc3Rfb3AgPSBhaXJwY2FwX29pZF9nZXRfcmVxdWVzdDsKKwlwLT5vaWRfc2V0X3JlcXVlc3Rfb3AgPSBhaXJwY2FwX29pZF9zZXRfcmVxdWVzdDsKKwlwLT5zZW5kcXVldWVfdHJhbnNtaXRfb3AgPSBhaXJwY2FwX3NlbmRxdWV1ZV90cmFuc21pdDsKKwlwLT5zZXR1c2VyYnVmZmVyX29wID0gYWlycGNhcF9zZXR1c2VyYnVmZmVyOworCXAtPmxpdmVfZHVtcF9vcCA9IGFpcnBjYXBfbGl2ZV9kdW1wOworCXAtPmxpdmVfZHVtcF9lbmRlZF9vcCA9IGFpcnBjYXBfbGl2ZV9kdW1wX2VuZGVkOworCXAtPmdldF9haXJwY2FwX2hhbmRsZV9vcCA9IGFpcnBjYXBfZ2V0X2FpcnBjYXBfaGFuZGxlOworCXAtPmNsZWFudXBfb3AgPSBhaXJwY2FwX2NsZWFudXA7CisKKwlyZXR1cm4gKDApOworIGJhZDoKKwlhaXJwY2FwX2NsZWFudXAocCk7CisJcmV0dXJuIChQQ0FQX0VSUk9SKTsKK30KKworLyoKKyAqIE1vbml0b3IgbW9kZSBpcyBzdXBwb3J0ZWQuCisgKi8KK3N0YXRpYyBpbnQKK2FpcnBjYXBfY2FuX3NldF9yZm1vbihwY2FwX3QgKnApCit7CisJcmV0dXJuICgxKTsKK30KKworaW50CitkZXZpY2VfaXNfYWlycGNhcChjb25zdCBjaGFyICpkZXZpY2UsIGNoYXIgKmVidWYpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgYWlycGNhcF9wcmVmaXhbXSA9ICJcXFxcLlxcYWlycGNhcCI7CisKKwkvKgorCSAqIFdlIGRvbid0IGRldGVybWluZSB0aGlzIGJ5IGNhbGxpbmcgQWlycGNhcEdldERldmljZUxpc3QoKQorCSAqIGFuZCBsb29raW5nIGF0IHRoZSBsaXN0LCBhcyB0aGF0IGFwcGVhcnMgdG8gYmUgYSBjb3N0bHkKKwkgKiBvcGVyYXRpb24uCisJICoKKwkgKiBJbnN0ZWFkLCB3ZSBqdXN0IGNoZWNrIHdoZXRoZXIgaXQgYmVnaW5zIHdpdGggIlxcLlxhaXJwY2FwIi4KKwkgKi8KKwlpZiAoc3RybmNtcChkZXZpY2UsIGFpcnBjYXBfcHJlZml4LCBzaXplb2YgYWlycGNhcF9wcmVmaXggLSAxKSA9PSAwKSB7CisJCS8qCisJCSAqIFllcywgaXQncyBhbiBBaXJQY2FwIGRldmljZS4KKwkJICovCisJCXJldHVybiAoMSk7CisJfQorCisJLyoKKwkgKiBObywgaXQncyBub3QgYW4gQWlyUGNhcCBkZXZpY2UuCisJICovCisJcmV0dXJuICgwKTsKK30KKworcGNhcF90ICoKK2FpcnBjYXBfY3JlYXRlKGNvbnN0IGNoYXIgKmRldmljZSwgY2hhciAqZWJ1ZiwgaW50ICppc19vdXJzKQoreworCWludCByZXQ7CisJcGNhcF90ICpwOworCisJLyoKKwkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYmVmb3JlIHdlJ3ZlIHRyaWVkIGxvYWRpbmcgdGhlIGxpYnJhcnksCisJICogc28gZG8gc28gaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IHRyaWVkIHRvIGRvIHNvLgorCSAqLworCWlmIChsb2FkX2FpcnBjYXBfZnVuY3Rpb25zKCkgIT0gQUlSUENBUF9BUElfTE9BREVEKSB7CisJCXNucHJpbnRmKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJDb3VsZG4ndCBsb2FkIEFpclBjYXAgRExMXG4iKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwkvKgorCSAqIElzIHRoaXMgYW4gQWlyUGNhcCBkZXZpY2U/CisJICovCisJcmV0ID0gZGV2aWNlX2lzX2FpcnBjYXAoZGV2aWNlLCBlYnVmKTsKKwlpZiAocmV0ID09IDApIHsKKwkJLyogTm8uICovCisJCSppc19vdXJzID0gMDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwkvKgorCSAqIFllcy4KKwkgKi8KKwkqaXNfb3VycyA9IDE7CisJcCA9IFBDQVBfQ1JFQVRFX0NPTU1PTihlYnVmLCBzdHJ1Y3QgcGNhcF9haXJwY2FwKTsKKwlpZiAocCA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisJcC0+YWN0aXZhdGVfb3AgPSBhaXJwY2FwX2FjdGl2YXRlOworCXAtPmNhbl9zZXRfcmZtb25fb3AgPSBhaXJwY2FwX2Nhbl9zZXRfcmZtb247CisJcmV0dXJuIChwKTsKK30KKworLyoKKyAqIEFkZCBhbGwgQWlyUGNhcCBkZXZpY2VzLgorICovCitpbnQKK2FpcnBjYXBfZmluZGFsbGRldnMocGNhcF9pZl9saXN0X3QgKmRldmxpc3RwLCBjaGFyICplcnJidWYpCit7CisJQWlycGNhcERldmljZURlc2NyaXB0aW9uICphaXJwY2FwX2RldmljZXMsICphaXJwY2FwX2RldmljZTsKKwljaGFyIGFpcnBjYXBfZXJyYnVmW0FJUlBDQVBfRVJSQlVGX1NJWkVdOworCisJLyoKKwkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYmVmb3JlIHdlJ3ZlIHRyaWVkIGxvYWRpbmcgdGhlIGxpYnJhcnksCisJICogc28gZG8gc28gaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IHRyaWVkIHRvIGRvIHNvLgorCSAqLworCWlmIChsb2FkX2FpcnBjYXBfZnVuY3Rpb25zKCkgIT0gQUlSUENBUF9BUElfTE9BREVEKSB7CisJCS8qCisJCSAqIFhYWCAtIHVubGVzcyB0aGUgZXJyb3IgaXMgIm5vIHN1Y2ggRExMIiwgcmVwb3J0IHRoaXMKKwkJICogYXMgYW4gZXJyb3IgcmF0aGVyIHRoYW4gYXMgIm5vIEFpclBjYXAgZGV2aWNlcyI/CisJCSAqLworCQlyZXR1cm4gKDApOworCX0KKworCWlmICghcF9BaXJwY2FwR2V0RGV2aWNlTGlzdCgmYWlycGNhcF9kZXZpY2VzLCBhaXJwY2FwX2VycmJ1ZikpIHsKKwkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkgICAgIkFpcnBjYXBHZXREZXZpY2VMaXN0KCkgZmFpbGVkOiAlcyIsIGFpcnBjYXBfZXJyYnVmKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJZm9yIChhaXJwY2FwX2RldmljZSA9IGFpcnBjYXBfZGV2aWNlczsgYWlycGNhcF9kZXZpY2UgIT0gTlVMTDsKKwkgICAgYWlycGNhcF9kZXZpY2UgPSBhaXJwY2FwX2RldmljZS0+bmV4dCkgeworCQlpZiAoYWRkX2RldihkZXZsaXN0cCwgYWlycGNhcF9kZXZpY2UtPk5hbWUsIDAsCisJCSAgICBhaXJwY2FwX2RldmljZS0+RGVzY3JpcHRpb24sIGVycmJ1ZikgPT0gTlVMTCkgeworCQkJLyoKKwkJCSAqIEZhaWx1cmUuCisJCQkgKi8KKwkJCXBfQWlycGNhcEZyZWVEZXZpY2VMaXN0KGFpcnBjYXBfZGV2aWNlcyk7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCX0KKwlwX0FpcnBjYXBGcmVlRGV2aWNlTGlzdChhaXJwY2FwX2RldmljZXMpOworCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9wY2FwLWFpcnBjYXAuaCBiL3BjYXAtYWlycGNhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMTE2NGUKLS0tIC9kZXYvbnVsbAorKysgYi9wY2FwLWFpcnBjYXAuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAwNSBOZXRHcm91cCwgUG9saXRlY25pY28gZGkgVG9yaW5vIChJdGFseSkKKyAqIENvcHlyaWdodCAoYykgMjAwNSAtIDIwMTAgQ0FDRSBUZWNobm9sb2dpZXMsIERhdmlzIChDYWxpZm9ybmlhKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBQb2xpdGVjbmljbyBkaSBUb3Jpbm8sIENBQ0UgVGVjaG5vbG9naWVzCisgKiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KKyAqIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworcGNhcF90ICphaXJwY2FwX2NyZWF0ZShjb25zdCBjaGFyICosIGNoYXIgKiwgaW50ICopOworaW50IGFpcnBjYXBfZmluZGFsbGRldnMocGNhcF9pZl9saXN0X3QgKmRldmxpc3RwLCBjaGFyICplcnJidWYpOworaW50IGRldmljZV9pc19haXJwY2FwKGNvbnN0IGNoYXIgKmRldmljZSwgY2hhciAqZWJ1Zik7CmRpZmYgLS1naXQgYS9wY2FwLWJwZi5jIGIvcGNhcC1icGYuYwppbmRleCA2Y2UzODNiLi5mMGNjYjk2IDEwMDY0NAotLS0gYS9wY2FwLWJwZi5jCisrKyBiL3BjYXAtYnBmLmMKQEAgLTExNSw3ICsxMTUsNiBAQAogCiAjZW5kaWYgLyogX0FJWCAqLwogCi0jaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8bmV0ZGIuaD4KQEAgLTE1Myw3ICsxNTIsNyBAQAogCSAqIEFzIHRoZXJlIGlzIGEgaGVhZGVyIG9uIHRoZSBmcm9udCBzaXplIG9mIHRoZSBtbWFwJ2QgYnVmZmVyLCBvbmx5CiAJICogc29tZSBvZiB0aGUgYnVmZmVyIGlzIGV4cG9zZWQgdG8gbGlicGNhcCBhcyBhIHdob2xlIHZpYSBidWZzaXplOwogCSAqIHpidWZzaXplIGlzIHRoZSB0cnVlIHNpemUuICB6YnVmZmVyIHRyYWNrcyB0aGUgY3VycmVudCB6YnVmCi0JICogYXNzb2NhdGVkIHdpdGggYnVmZmVyIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgdG8gZGVjaWRlIHdoaWNoIHRoZQorCSAqIGFzc29jaWF0ZWQgd2l0aCBidWZmZXIgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCB0byBkZWNpZGUgd2hpY2ggdGhlCiAJICogbmV4dCBidWZmZXIgdG8gcmVhZCB3aWxsIGJlLgogCSAqLwogCXVfY2hhciAqemJ1ZjEsICp6YnVmMiwgKnpidWZmZXI7CkBAIC0yMDYsNyArMjA1LDcgQEAKICMgIGVuZGlmCiAKICMgIGlmIGRlZmluZWQoX19BUFBMRV9fKQotc3RhdGljIHZvaWQgcmVtb3ZlX2VuKHBjYXBfdCAqKTsKK3N0YXRpYyB2b2lkIHJlbW92ZV9ub25fODAyXzExKHBjYXBfdCAqKTsKIHN0YXRpYyB2b2lkIHJlbW92ZV84MDJfMTEocGNhcF90ICopOwogIyAgZW5kaWYKIApAQCAtMzEzLDcgKzMxMiw3IEBACiAJCSAgICBhdG9taWNfbG9hZF9hY3FfaW50KCZiemgtPmJ6aF9rZXJuZWxfZ2VuKSkgewogCQkJcGItPmJ6aCA9IGJ6aDsKIAkJCXBiLT56YnVmZmVyID0gKHVfY2hhciAqKXBiLT56YnVmMjsKLSAgCQkJcC0+YnVmZmVyID0gcGItPnpidWZmZXIgKyBzaXplb2YoKmJ6aCk7CisJCQlwLT5idWZmZXIgPSBwYi0+emJ1ZmZlciArIHNpemVvZigqYnpoKTsKIAkJCSpjYyA9IGJ6aC0+YnpoX2tlcm5lbF9sZW47CiAJCQlyZXR1cm4gKDEpOwogCQl9CkBAIC00NDUsNyArNDQ0LDcgQEAKIHsKIAlwY2FwX3QgKnA7CiAKLQlwID0gcGNhcF9jcmVhdGVfY29tbW9uKGVidWYsIHNpemVvZiAoc3RydWN0IHBjYXBfYnBmKSk7CisJcCA9IFBDQVBfQ1JFQVRFX0NPTU1PTihlYnVmLCBzdHJ1Y3QgcGNhcF9icGYpOwogCWlmIChwID09IE5VTEwpCiAJCXJldHVybiAoTlVMTCk7CiAKQEAgLTQ1Niw3ICs0NTUsNiBAQAogCSAqIFdlIGNsYWltIHRoYXQgd2Ugc3VwcG9ydCBtaWNyb3NlY29uZCBhbmQgbmFub3NlY29uZCB0aW1lCiAJICogc3RhbXBzLgogCSAqLwotCXAtPnRzdGFtcF9wcmVjaXNpb25fY291bnQgPSAyOwogCXAtPnRzdGFtcF9wcmVjaXNpb25fbGlzdCA9IG1hbGxvYygyICogc2l6ZW9mKHVfaW50KSk7CiAJaWYgKHAtPnRzdGFtcF9wcmVjaXNpb25fbGlzdCA9PSBOVUxMKSB7CiAJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgZXJybm8sCkBAIC00NjYsNiArNDY0LDcgQEAKIAl9CiAJcC0+dHN0YW1wX3ByZWNpc2lvbl9saXN0WzBdID0gUENBUF9UU1RBTVBfUFJFQ0lTSU9OX01JQ1JPOwogCXAtPnRzdGFtcF9wcmVjaXNpb25fbGlzdFsxXSA9IFBDQVBfVFNUQU1QX1BSRUNJU0lPTl9OQU5POworCXAtPnRzdGFtcF9wcmVjaXNpb25fY291bnQgPSAyOwogI2VuZGlmIC8qIEJJT0NTVFNUQU1QICovCiAJcmV0dXJuIChwKTsKIH0KQEAgLTUyMiw3ICs1MjEsNyBAQAogCQkgKiB0aGF0IGlzbid0IGluIHVzZS4KIAkJICovCiAJCWRvIHsKLQkJCSh2b2lkKXBjYXBfc25wcmludGYoZGV2aWNlLCBzaXplb2YoZGV2aWNlKSwgIi9kZXYvYnBmJWQiLCBuKyspOworCQkJKHZvaWQpc25wcmludGYoZGV2aWNlLCBzaXplb2YoZGV2aWNlKSwgIi9kZXYvYnBmJWQiLCBuKyspOwogCQkJLyoKIAkJCSAqIEluaXRpYWxseSB0cnkgYSByZWFkL3dyaXRlIG9wZW4gKHRvIGFsbG93IHRoZSBpbmplY3QKIAkJCSAqIG1ldGhvZCB0byB3b3JrKS4gIElmIHRoYXQgZmFpbHMgZHVlIHRvIHBlcm1pc3Npb24KQEAgLTU1Nyw3ICs1NTYsNyBAQAogCQkJCSAqIG1lYW5zIHdlIHByb2JhYmx5IGhhdmUgbm8gQlBGCiAJCQkJICogZGV2aWNlcy4KIAkJCQkgKi8KLQkJCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkJICAgICIodGhlcmUgYXJlIG5vIEJQRiBkZXZpY2VzKSIpOwogCQkJfSBlbHNlIHsKIAkJCQkvKgpAQCAtNTY2LDcgKzU2NSw3IEBACiAJCQkJICogZGV2aWNlcywgYnV0IGFsbCB0aGUgb25lcwogCQkJCSAqIHRoYXQgZXhpc3QgYXJlIGJ1c3kuCiAJCQkJICovCi0JCQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJCSAgICAiKGFsbCBCUEYgZGV2aWNlcyBhcmUgYnVzeSkiKTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNTk3LDYgKzU5NiwxMDIgQEAKIH0KIAogLyoKKyAqIEJpbmQgYSBuZXR3b3JrIGFkYXB0ZXIgdG8gYSBCUEYgZGV2aWNlLCBnaXZlbiBhIGRlc2NyaXB0b3IgZm9yIHRoZQorICogQlBGIGRldmljZSBhbmQgdGhlIG5hbWUgb2YgdGhlIG5ldHdvcmsgYWRhcHRlci4KKyAqCisgKiBVc2UgQklPQ1NFVExJRiBpZiBhdmFpbGFibGUgKG1lYW5pbmcgIm9uIFNvbGFyaXMiKSwgYXMgaXQgc3VwcG9ydHMKKyAqIGxvbmdlciBkZXZpY2UgbmFtZXMuCisgKgorICogSWYgdGhlIG5hbWUgaXMgbG9uZ2VyIHRoYW4gd2lsbCBmaXQsIHJldHVybiBQQ0FQX0VSUk9SX05PX1NVQ0hfREVWSUNFCisgKiBiZWZvcmUgdHJ5aW5nIHRvIGJpbmQgdGhlIGludGVyZmFjZSwgYXMgdGhlcmUgY2Fubm90IGJlIHN1Y2ggYSBkZXZpY2UuCisgKgorICogSWYgdGhlIGF0dGVtcHQgc3VjY2VlZHMsIHJldHVybiBCUEZfQklORF9TVUNDRUVERUQuCisgKgorICogSWYgdGhlIGF0dGVtcHQgZmFpbHM6CisgKgorICogICAgaWYgaXQgZmFpbHMgd2l0aCBFTlhJTywgcmV0dXJuIFBDQVBfRVJST1JfTk9fU1VDSF9ERVZJQ0UsIGFzCisgKiAgICB0aGUgZGV2aWNlIGRvZXNuJ3QgZXhpc3Q7CisgKgorICogICAgaWYgaXQgZmFpbHMgd2l0aCBFTkVURE9XTiwgcmV0dXJuIFBDQVBfRVJST1JfSUZBQ0VfTk9UX1VQLCBhcworICogICAgdGhlIGludGVyZmFjZSBleGlzdHMgYnV0IGlzbid0IHVwIGFuZCB0aGUgT1MgZG9lc24ndCBhbGxvdworICogICAgYmluZGluZyB0byBhbiBpbnRlcmZhY2UgdGhhdCBpc24ndCB1cDsKKyAqCisgKiAgICBpZiBpdCBmYWlscyB3aXRoIEVOT0JVRlMsIHJldHVybiBCUEZfQklORF9CVUZGRVJfVE9PX0JJRywgYW5kCisgKiAgICBmaWxsIGluIGFuIGVycm9yIG1lc3NhZ2UsIGFzIHRoZSBidWZmZXIgYmVpbmcgcmVxdWVzdGVkIGlzIHRvbworICogICAgbGFyZ2U7CisgKgorICogICAgb3RoZXJ3aXNlLCByZXR1cm4gUENBUF9FUlJPUiBhbmQgZmlsbCBpbiBhbiBlcnJvciBtZXNzYWdlLgorICovCisjZGVmaW5lIEJQRl9CSU5EX1NVQ0NFRURFRAkwCisjZGVmaW5lIEJQRl9CSU5EX0JVRkZFUl9UT09fQklHCTEKKworc3RhdGljIGludAorYnBmX2JpbmQoaW50IGZkLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICplcnJidWYpCit7CisJaW50IHN0YXR1czsKKyNpZmRlZiBMSUZOQU1TSVoKKwlzdHJ1Y3QgbGlmcmVxIGlmcjsKKworCWlmIChzdHJsZW4obmFtZSkgPj0gc2l6ZW9mKGlmci5saWZyX25hbWUpKSB7CisJCS8qIFRoZSBuYW1lIGlzIHRvbyBsb25nLCBzbyBpdCBjYW4ndCBwb3NzaWJseSBleGlzdC4gKi8KKwkJcmV0dXJuIChQQ0FQX0VSUk9SX05PX1NVQ0hfREVWSUNFKTsKKwl9CisJKHZvaWQpcGNhcF9zdHJsY3B5KGlmci5saWZyX25hbWUsIG5hbWUsIHNpemVvZihpZnIubGlmcl9uYW1lKSk7CisJc3RhdHVzID0gaW9jdGwoZmQsIEJJT0NTRVRMSUYsIChjYWRkcl90KSZpZnIpOworI2Vsc2UKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCisJaWYgKHN0cmxlbihuYW1lKSA+PSBzaXplb2YoaWZyLmlmcl9uYW1lKSkgeworCQkvKiBUaGUgbmFtZSBpcyB0b28gbG9uZywgc28gaXQgY2FuJ3QgcG9zc2libHkgZXhpc3QuICovCisJCXJldHVybiAoUENBUF9FUlJPUl9OT19TVUNIX0RFVklDRSk7CisJfQorCSh2b2lkKXBjYXBfc3RybGNweShpZnIuaWZyX25hbWUsIG5hbWUsIHNpemVvZihpZnIuaWZyX25hbWUpKTsKKwlzdGF0dXMgPSBpb2N0bChmZCwgQklPQ1NFVElGLCAoY2FkZHJfdCkmaWZyKTsKKyNlbmRpZgorCisJaWYgKHN0YXR1cyA8IDApIHsKKwkJc3dpdGNoIChlcnJubykgeworCisJCWNhc2UgRU5YSU86CisJCQkvKgorCQkJICogVGhlcmUncyBubyBzdWNoIGRldmljZS4KKwkJCSAqLworCQkJcmV0dXJuIChQQ0FQX0VSUk9SX05PX1NVQ0hfREVWSUNFKTsKKworCQljYXNlIEVORVRET1dOOgorCQkJLyoKKwkJCSAqIFJldHVybiBhICJuZXR3b3JrIGRvd24iIGluZGljYXRpb24sIHNvIHRoYXQKKwkJCSAqIHRoZSBhcHBsaWNhdGlvbiBjYW4gcmVwb3J0IHRoYXQgcmF0aGVyIHRoYW4KKwkJCSAqIHNheWluZyB3ZSBoYWQgYSBteXN0ZXJpb3VzIGZhaWx1cmUgYW5kCisJCQkgKiBzdWdnZXN0IHRoYXQgdGhleSByZXBvcnQgYSBwcm9ibGVtIHRvIHRoZQorCQkJICogbGlicGNhcCBkZXZlbG9wZXJzLgorCQkJICovCisJCQlyZXR1cm4gKFBDQVBfRVJST1JfSUZBQ0VfTk9UX1VQKTsKKworCQljYXNlIEVOT0JVRlM6CisJCQkvKgorCQkJICogVGhlIGJ1ZmZlciBzaXplIGlzIHRvbyBiaWcuCisJCQkgKiBSZXR1cm4gYSBzcGVjaWFsIGluZGljYXRpb24gc28gdGhhdCwgaWYgd2UncmUKKwkJCSAqIHRyeWluZyB0byBjcmFuayB0aGUgYnVmZmVyIHNpemUgZG93biwgd2Uga25vdworCQkJICogd2UgaGF2ZSB0byBjb250aW51ZTsgYWRkIGFuIGVycm9yIG1lc3NhZ2UgdGhhdAorCQkJICogdGVsbHMgdGhlIHVzZXIgd2hhdCBuZWVkcyB0byBiZSBmaXhlZC4KKwkJCSAqLworCQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkgICAgZXJybm8sICJUaGUgcmVxdWVzdGVkIGJ1ZmZlciBzaXplIGZvciAlcyBpcyB0b28gbGFyZ2UiLAorCQkJICAgIG5hbWUpOworCQkJcmV0dXJuIChCUEZfQklORF9CVUZGRVJfVE9PX0JJRyk7CisKKwkJZGVmYXVsdDoKKwkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJICAgIGVycm5vLCAiQmluZGluZyBpbnRlcmZhY2UgJXMgdG8gQlBGIGRldmljZSBmYWlsZWQiLAorCQkJICAgIG5hbWUpOworCQkJcmV0dXJuIChQQ0FQX0VSUk9SKTsKKwkJfQorCX0KKwlyZXR1cm4gKEJQRl9CSU5EX1NVQ0NFRURFRCk7Cit9CisKKy8qCiAgKiBPcGVuIGFuZCBiaW5kIHRvIGEgZGV2aWNlOyB1c2VkIGlmIHdlJ3JlIG5vdCBhY3R1YWxseSBnb2luZyB0byB1c2UKICAqIHRoZSBkZXZpY2UsIGJ1dCBhcmUganVzdCB0ZXN0aW5nIHdoZXRoZXIgaXQgY2FuIGJlIG9wZW5lZCwgb3Igb3BlbmluZwogICogaXQgdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IGl0LgpAQCAtNjA4LDcgKzcwMyw3IEBACiBicGZfb3Blbl9hbmRfYmluZChjb25zdCBjaGFyICpuYW1lLCBjaGFyICplcnJidWYpCiB7CiAJaW50IGZkOwotCXN0cnVjdCBpZnJlcSBpZnI7CisJaW50IHN0YXR1czsKIAogCS8qCiAJICogRmlyc3QsIG9wZW4gYSBCUEYgZGV2aWNlLgpAQCAtNjIwLDM0ICs3MTUsMTggQEAKIAkvKgogCSAqIE5vdyBiaW5kIHRvIHRoZSBkZXZpY2UuCiAJICovCi0JKHZvaWQpc3RybmNweShpZnIuaWZyX25hbWUsIG5hbWUsIHNpemVvZihpZnIuaWZyX25hbWUpKTsKLQlpZiAoaW9jdGwoZmQsIEJJT0NTRVRJRiwgKGNhZGRyX3QpJmlmcikgPCAwKSB7Ci0JCXN3aXRjaCAoZXJybm8pIHsKLQotCQljYXNlIEVOWElPOgorCXN0YXR1cyA9IGJwZl9iaW5kKGZkLCBuYW1lLCBlcnJidWYpOworCWlmIChzdGF0dXMgIT0gQlBGX0JJTkRfU1VDQ0VFREVEKSB7CisJCWNsb3NlKGZkKTsKKwkJaWYgKHN0YXR1cyA9PSBCUEZfQklORF9CVUZGRVJfVE9PX0JJRykgewogCQkJLyoKLQkJCSAqIFRoZXJlJ3Mgbm8gc3VjaCBkZXZpY2UuCisJCQkgKiBXZSBkaWRuJ3Qgc3BlY2lmeSBhIGJ1ZmZlciBzaXplLCBzbworCQkJICogdGhpcyAqcmVhbGx5KiBzaG91bGRuJ3QgZmFpbCBiZWNhdXNlCisJCQkgKiB0aGVyZSdzIG5vIGJ1ZmZlciBzcGFjZS4gIEZhaWwuCiAJCQkgKi8KLQkJCWNsb3NlKGZkKTsKLQkJCXJldHVybiAoUENBUF9FUlJPUl9OT19TVUNIX0RFVklDRSk7Ci0KLQkJY2FzZSBFTkVURE9XTjoKLQkJCS8qCi0JCQkgKiBSZXR1cm4gYSAibmV0d29yayBkb3duIiBpbmRpY2F0aW9uLCBzbyB0aGF0Ci0JCQkgKiB0aGUgYXBwbGljYXRpb24gY2FuIHJlcG9ydCB0aGF0IHJhdGhlciB0aGFuCi0JCQkgKiBzYXlpbmcgd2UgaGFkIGEgbXlzdGVyaW91cyBmYWlsdXJlIGFuZAotCQkJICogc3VnZ2VzdCB0aGF0IHRoZXkgcmVwb3J0IGEgcHJvYmxlbSB0byB0aGUKLQkJCSAqIGxpYnBjYXAgZGV2ZWxvcGVycy4KLQkJCSAqLwotCQkJY2xvc2UoZmQpOwotCQkJcmV0dXJuIChQQ0FQX0VSUk9SX0lGQUNFX05PVF9VUCk7Ci0KLQkJZGVmYXVsdDoKLQkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkJICAgIGVycm5vLCAiQklPQ1NFVElGOiAlcyIsIG5hbWUpOwotCQkJY2xvc2UoZmQpOwogCQkJcmV0dXJuIChQQ0FQX0VSUk9SKTsKIAkJfQorCQlyZXR1cm4gKHN0YXR1cyk7CiAJfQogCiAJLyoKQEAgLTY1Niw2ICs3MzUsNDcgQEAKIAlyZXR1cm4gKGZkKTsKIH0KIAorI2lmZGVmIF9fQVBQTEVfXworc3RhdGljIGludAorZGV2aWNlX2V4aXN0cyhpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKmVycmJ1ZikKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBpZnJlcSBpZnI7CisKKwlpZiAoc3RybGVuKG5hbWUpID49IHNpemVvZihpZnIuaWZyX25hbWUpKSB7CisJCS8qIFRoZSBuYW1lIGlzIHRvbyBsb25nLCBzbyBpdCBjYW4ndCBwb3NzaWJseSBleGlzdC4gKi8KKwkJcmV0dXJuIChQQ0FQX0VSUk9SX05PX1NVQ0hfREVWSUNFKTsKKwl9CisJKHZvaWQpcGNhcF9zdHJsY3B5KGlmci5pZnJfbmFtZSwgbmFtZSwgc2l6ZW9mKGlmci5pZnJfbmFtZSkpOworCXN0YXR1cyA9IGlvY3RsKGZkLCBTSU9DR0lGRkxBR1MsIChjYWRkcl90KSZpZnIpOworCisJaWYgKHN0YXR1cyA8IDApIHsKKwkJaWYgKGVycm5vID09IEVOWElPIHx8IGVycm5vID09IEVJTlZBTCkgeworCQkJLyoKKwkJCSAqIG1hY09TIGFuZCAqQlNEIHJldHVybiBvbmUgb2YgdGhvc2UgdHdvCisJCQkgKiBlcnJvcnMgaWYgdGhlIGRldmljZSBkb2Vzbid0IGV4aXN0LgorCQkJICogRG9uJ3QgZmlsbCBpbiBhbiBlcnJvciwgYXMgdGhpcyBpcworCQkJICogYW4gImV4cGVjdGVkIiBjb25kaXRpb24uCisJCQkgKi8KKwkJCXJldHVybiAoUENBUF9FUlJPUl9OT19TVUNIX0RFVklDRSk7CisJCX0KKworCQkvKgorCQkgKiBTb21lIG90aGVyIGVycm9yIC0gcHJvdmlkZSBhIG1lc3NhZ2UgZm9yIGl0LCBhcworCQkgKiBpdCdzICJ1bmV4cGVjdGVkIi4KKwkJICovCisJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCBlcnJubywKKwkJICAgICJDYW4ndCBnZXQgaW50ZXJmYWNlIGZsYWdzIG9uICVzIiwgbmFtZSk7CisJCXJldHVybiAoUENBUF9FUlJPUik7CisJfQorCisJLyoKKwkgKiBUaGUgZGV2aWNlIGV4aXN0cy4KKwkgKi8KKwlyZXR1cm4gKDApOworfQorI2VuZGlmCisKICNpZmRlZiBCSU9DR0RMVExJU1QKIHN0YXRpYyBpbnQKIGdldF9kbHRfbGlzdChpbnQgZmQsIGludCB2LCBzdHJ1Y3QgYnBmX2RsdGxpc3QgKmJkbHAsIGNoYXIgKmVidWYpCkBAIC03MzcsMTUgKzg1NywxNSBAQAogfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKIHN0YXRpYyBpbnQKIHBjYXBfY2FuX3NldF9yZm1vbl9icGYocGNhcF90ICpwKQogewotI2lmIGRlZmluZWQoX19BUFBMRV9fKQogCXN0cnVjdCB1dHNuYW1lIG9zaW5mbzsKLQlzdHJ1Y3QgaWZyZXEgaWZyOwogCWludCBmZDsKICNpZmRlZiBCSU9DR0RMVExJU1QKIAlzdHJ1Y3QgYnBmX2RsdGxpc3QgYmRsOworCWludCBlcnI7CiAjZW5kaWYKIAogCS8qCkBAIC03ODMsNiArOTAzLDkgQEAKIAkJcmV0dXJuICgwKTsKIAl9CiAJaWYgKG9zaW5mby5yZWxlYXNlWzBdID09ICc4JyAmJiBvc2luZm8ucmVsZWFzZVsxXSA9PSAnLicpIHsKKwkJY2hhciAqd2x0X25hbWU7CisJCWludCBzdGF0dXM7CisKIAkJLyoKIAkJICogMTAuNCAoRGFyd2luIDgueCkuICBzL2VuL3dsdC8sIGFuZCBjaGVjawogCQkgKiB3aGV0aGVyIHRoZSBkZXZpY2UgZXhpc3RzLgpAQCAtNzk5LDE2ICs5MjIsMjQgQEAKIAkJCSAgICBlcnJubywgInNvY2tldCIpOwogCQkJcmV0dXJuIChQQ0FQX0VSUk9SKTsKIAkJfQotCQlzdHJsY3B5KGlmci5pZnJfbmFtZSwgIndsdCIsIHNpemVvZihpZnIuaWZyX25hbWUpKTsKLQkJc3RybGNhdChpZnIuaWZyX25hbWUsIHAtPm9wdC5kZXZpY2UgKyAyLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7Ci0JCWlmIChpb2N0bChmZCwgU0lPQ0dJRkZMQUdTLCAoY2hhciAqKSZpZnIpIDwgMCkgewotCQkJLyoKLQkJCSAqIE5vIHN1Y2ggZGV2aWNlPwotCQkJICovCisJCWlmIChwY2FwX2FzcHJpbnRmKCZ3bHRfbmFtZSwgIndsdCVzIiwgcC0+b3B0LmRldmljZSArIDIpID09IC0xKSB7CisJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCSAgICBlcnJubywgIm1hbGxvYyIpOwogCQkJY2xvc2UoZmQpOwotCQkJcmV0dXJuICgwKTsKKwkJCXJldHVybiAoUENBUF9FUlJPUik7CiAJCX0KKwkJc3RhdHVzID0gZGV2aWNlX2V4aXN0cyhmZCwgd2x0X25hbWUsIHAtPmVycmJ1Zik7CisJCWZyZWUod2x0X25hbWUpOwogCQljbG9zZShmZCk7CisJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJaWYgKHN0YXR1cyA9PSBQQ0FQX0VSUk9SX05PX1NVQ0hfREVWSUNFKQorCQkJCXJldHVybiAoMCk7CisKKwkJCS8qCisJCQkgKiBFcnJvci4KKwkJCSAqLworCQkJcmV0dXJuIChzdGF0dXMpOworCQl9CiAJCXJldHVybiAoMSk7CiAJfQogCkBAIC04MjcsMzQgKzk1OCwxOCBAQAogCS8qCiAJICogTm93IGJpbmQgdG8gdGhlIGRldmljZS4KIAkgKi8KLQkodm9pZClzdHJuY3B5KGlmci5pZnJfbmFtZSwgcC0+b3B0LmRldmljZSwgc2l6ZW9mKGlmci5pZnJfbmFtZSkpOwotCWlmIChpb2N0bChmZCwgQklPQ1NFVElGLCAoY2FkZHJfdCkmaWZyKSA8IDApIHsKLQkJc3dpdGNoIChlcnJubykgewotCi0JCWNhc2UgRU5YSU86CisJZXJyID0gYnBmX2JpbmQoZmQsIHAtPm9wdC5kZXZpY2UsIHAtPmVycmJ1Zik7CisJaWYgKGVyciAhPSBCUEZfQklORF9TVUNDRUVERUQpIHsKKwkJY2xvc2UoZmQpOworCQlpZiAoZXJyID09IEJQRl9CSU5EX0JVRkZFUl9UT09fQklHKSB7CiAJCQkvKgotCQkJICogVGhlcmUncyBubyBzdWNoIGRldmljZS4KKwkJCSAqIFdlIGRpZG4ndCBzcGVjaWZ5IGEgYnVmZmVyIHNpemUsIHNvCisJCQkgKiB0aGlzICpyZWFsbHkqIHNob3VsZG4ndCBmYWlsIGJlY2F1c2UKKwkJCSAqIHRoZXJlJ3Mgbm8gYnVmZmVyIHNwYWNlLiAgRmFpbC4KIAkJCSAqLwotCQkJY2xvc2UoZmQpOwotCQkJcmV0dXJuIChQQ0FQX0VSUk9SX05PX1NVQ0hfREVWSUNFKTsKLQotCQljYXNlIEVORVRET1dOOgotCQkJLyoKLQkJCSAqIFJldHVybiBhICJuZXR3b3JrIGRvd24iIGluZGljYXRpb24sIHNvIHRoYXQKLQkJCSAqIHRoZSBhcHBsaWNhdGlvbiBjYW4gcmVwb3J0IHRoYXQgcmF0aGVyIHRoYW4KLQkJCSAqIHNheWluZyB3ZSBoYWQgYSBteXN0ZXJpb3VzIGZhaWx1cmUgYW5kCi0JCQkgKiBzdWdnZXN0IHRoYXQgdGhleSByZXBvcnQgYSBwcm9ibGVtIHRvIHRoZQotCQkJICogbGlicGNhcCBkZXZlbG9wZXJzLgotCQkJICovCi0JCQljbG9zZShmZCk7Ci0JCQlyZXR1cm4gKFBDQVBfRVJST1JfSUZBQ0VfTk9UX1VQKTsKLQotCQlkZWZhdWx0OgotCQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCi0JCQkgICAgZXJybm8sICJCSU9DU0VUSUY6ICVzIiwgcC0+b3B0LmRldmljZSk7Ci0JCQljbG9zZShmZCk7CiAJCQlyZXR1cm4gKFBDQVBfRVJST1IpOwogCQl9CisJCXJldHVybiAoZXJyKTsKIAl9CiAKIAkvKgpAQCAtODgwLDcgKzk5NSwxMSBAQAogCWNsb3NlKGZkKTsKICNlbmRpZiAvKiBCSU9DR0RMVExJU1QgKi8KIAlyZXR1cm4gKDApOworfQogI2VsaWYgZGVmaW5lZChIQVZFX0JTRF9JRUVFODAyMTEpCitzdGF0aWMgaW50CitwY2FwX2Nhbl9zZXRfcmZtb25fYnBmKHBjYXBfdCAqcCkKK3sKIAlpbnQgcmV0OwogCiAJcmV0ID0gbW9uaXRvcl9tb2RlKHAsIDApOwpAQCAtODg5LDEwICsxMDA4LDE0IEBACiAJaWYgKHJldCA9PSAwKQogCQlyZXR1cm4gKDEpOwkvKiBzdWNjZXNzICovCiAJcmV0dXJuIChyZXQpOwotI2Vsc2UKLQlyZXR1cm4gKDApOwotI2VuZGlmCiB9CisjZWxzZQorc3RhdGljIGludAorcGNhcF9jYW5fc2V0X3JmbW9uX2JwZihwY2FwX3QgKnAgX1VfKQoreworCXJldHVybiAoMCk7Cit9CisjZW5kaWYKIAogc3RhdGljIGludAogcGNhcF9zdGF0c19icGYocGNhcF90ICpwLCBzdHJ1Y3QgcGNhcF9zdGF0ICpwcykKQEAgLTk3NCw3ICsxMDk3LDcgQEAKIAkJfSBlbHNlCiAjZW5kaWYKIAkJewotCQkJY2MgPSByZWFkKHAtPmZkLCBwLT5idWZmZXIsIHAtPmJ1ZnNpemUpOworCQkJY2MgPSAoaW50KXJlYWQocC0+ZmQsIHAtPmJ1ZmZlciwgcC0+YnVmc2l6ZSk7CiAJCX0KIAkJaWYgKGNjIDwgMCkgewogCQkJLyogRG9uJ3QgY2hva2Ugd2hlbiB3ZSBnZXQgcHRyYWNlZCAqLwpAQCAtMTAxMiwxOCArMTEzNSwyMSBAQAogCQkJY2FzZSBFV09VTERCTE9DSzoKIAkJCQlyZXR1cm4gKDApOwogCi0JCQljYXNlIEVOWElPOgorCQkJY2FzZSBFTlhJTzoJLyogRnJlZUJTRCwgRHJhZ29uRmx5IEJTRCwgYW5kIERhcndpbiAqLworCQkJY2FzZSBFSU86CS8qIE9wZW5CU0QgKi8KKwkJCQkJLyogTmV0QlNEIGFwcGVhcnMgbm90IHRvIHJldHVybiBhbiBlcnJvciBpbiB0aGlzIGNhc2UgKi8KIAkJCQkvKgogCQkJCSAqIFRoZSBkZXZpY2Ugb24gd2hpY2ggd2UncmUgY2FwdHVyaW5nCiAJCQkJICogd2VudCBhd2F5LgogCQkJCSAqCiAJCQkJICogWFhYIC0gd2Ugc2hvdWxkIHJlYWxseSByZXR1cm4KLQkJCQkgKiBQQ0FQX0VSUk9SX0lGQUNFX05PVF9VUCwgYnV0Ci0JCQkJICogcGNhcF9kaXNwYXRjaCgpIGV0Yy4gYXJlbid0Ci0JCQkJICogZGVmaW5lZCB0byByZXR1ciB0aGF0LgorCQkJCSAqIGFuIGFwcHJvcHJpYXRlIGVycm9yIGZvciB0aGF0LAorCQkJCSAqIGJ1dCBwY2FwX2Rpc3BhdGNoKCkgZXRjLiBhcmVuJ3QKKwkJCQkgKiBkb2N1bWVudGVkIGFzIGhhdmluZyBlcnJvciByZXR1cm5zCisJCQkJICogb3RoZXIgdGhhbiBQQ0FQX0VSUk9SIG9yIFBDQVBfRVJST1JfQlJFQUsuCiAJCQkJICovCi0JCQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCi0JCQkJICAgICJUaGUgaW50ZXJmYWNlIHdlbnQgZG93biIpOworCQkJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQkgICAgIlRoZSBpbnRlcmZhY2UgZGlzYXBwZWFyZWQiKTsKIAkJCQlyZXR1cm4gKFBDQVBfRVJST1IpOwogCiAjaWYgZGVmaW5lZChzdW4pICYmICFkZWZpbmVkKEJTRCkgJiYgIWRlZmluZWQoX19zdnI0X18pICYmICFkZWZpbmVkKF9fU1ZSNCkKQEAgLTEwNzYsNyArMTIwMiw3IEBACiAJCSAqLwogCQlpZiAocC0+YnJlYWtfbG9vcCkgewogCQkJcC0+YnAgPSBicDsKLQkJCXAtPmNjID0gZXAgLSBicDsKKwkJCXAtPmNjID0gKGludCkoZXAgLSBicCk7CiAJCQkvKgogCQkJICogZXAgaXMgc2V0IGJhc2VkIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgcmVhZCgpLAogCQkJICogYnV0IHJlYWQoKSBmcm9tIGEgQlBGIGRldmljZSBkb2Vzbid0IG5lY2Vzc2FyaWx5CkBAIC0xMTE2LDcgKzEyNDIsNyBAQAogI2VuZGlmCiAJCSAqLwogCQlpZiAocGItPmZpbHRlcmluZ19pbl9rZXJuZWwgfHwKLQkJICAgIGJwZl9maWx0ZXIocC0+ZmNvZGUuYmZfaW5zbnMsIGRhdGFwLCBiaHAtPmJoX2RhdGFsZW4sIGNhcGxlbikpIHsKKwkJICAgIHBjYXBfZmlsdGVyKHAtPmZjb2RlLmJmX2luc25zLCBkYXRhcCwgYmhwLT5iaF9kYXRhbGVuLCBjYXBsZW4pKSB7CiAJCQlzdHJ1Y3QgcGNhcF9wa3RoZHIgcGt0aGRyOwogI2lmZGVmIEJJT0NTVFNUQU1QCiAJCQlzdHJ1Y3QgYmludGltZSBidDsKQEAgLTExNjYsNyArMTI5Miw3IEBACiAJCQlicCArPSBCUEZfV09SREFMSUdOKGNhcGxlbiArIGhkcmxlbik7CiAJCQlpZiAoKytuID49IGNudCAmJiAhUEFDS0VUX0NPVU5UX0lTX1VOTElNSVRFRChjbnQpKSB7CiAJCQkJcC0+YnAgPSBicDsKLQkJCQlwLT5jYyA9IGVwIC0gYnA7CisJCQkJcC0+Y2MgPSAoaW50KShlcCAtIGJwKTsKIAkJCQkvKgogCQkJCSAqIFNlZSBjb21tZW50IGFib3ZlIGFib3V0IHAtPmNjIDwgMC4KIAkJCQkgKi8KQEAgLTExODcsMTEgKzEzMTMsMTEgQEAKIH0KIAogc3RhdGljIGludAotcGNhcF9pbmplY3RfYnBmKHBjYXBfdCAqcCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3BjYXBfaW5qZWN0X2JwZihwY2FwX3QgKnAsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IHNpemUpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IHdyaXRlKHAtPmZkLCBidWYsIHNpemUpOworCXJldCA9IChpbnQpd3JpdGUocC0+ZmQsIGJ1Ziwgc2l6ZSk7CiAjaWZkZWYgX19BUFBMRV9fCiAJaWYgKHJldCA9PSAtMSAmJiBlcnJubyA9PSBFQUZOT1NVUFBPUlQpIHsKIAkJLyoKQEAgLTEyMjMsNyArMTM0OSw3IEBACiAJCS8qCiAJCSAqIE5vdyB0cnkgdGhlIHdyaXRlIGFnYWluLgogCQkgKi8KLQkJcmV0ID0gd3JpdGUocC0+ZmQsIGJ1Ziwgc2l6ZSk7CisJCXJldCA9IChpbnQpd3JpdGUocC0+ZmQsIGJ1Ziwgc2l6ZSk7CiAJfQogI2VuZGlmIC8qIF9fQVBQTEVfXyAqLwogCWlmIChyZXQgPT0gLTEpIHsKQEAgLTEyNDMsNyArMTM2OSw3IEBACiAJaWYgKG9kbV9pbml0aWFsaXplKCkgPT0gLTEpIHsKIAkJaWYgKG9kbV9lcnJfbXNnKG9kbWVycm5vLCAmZXJyc3RyKSA9PSAtMSkKIAkJCWVycnN0ciA9ICJVbmtub3duIGVycm9yIjsKLQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICJicGZfbG9hZDogb2RtX2luaXRpYWxpemUgZmFpbGVkOiAlcyIsCiAJCSAgICBlcnJzdHIpOwogCQlyZXR1cm4gKFBDQVBfRVJST1IpOwpAQCAtMTI1Miw3ICsxMzc4LDcgQEAKIAlpZiAoKG9kbWxvY2tpZCA9IG9kbV9sb2NrKCIvZXRjL29ianJlcG9zL2NvbmZpZ19sb2NrIiwgT0RNX1dBSVQpKSA9PSAtMSkgewogCQlpZiAob2RtX2Vycl9tc2cob2RtZXJybm8sICZlcnJzdHIpID09IC0xKQogCQkJZXJyc3RyID0gIlVua25vd24gZXJyb3IiOwotCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkgICAgImJwZl9sb2FkOiBvZG1fbG9jayBvZiAvZXRjL29ianJlcG9zL2NvbmZpZ19sb2NrIGZhaWxlZDogJXMiLAogCQkgICAgZXJyc3RyKTsKIAkJKHZvaWQpb2RtX3Rlcm1pbmF0ZSgpOwpAQCAtMTI3MSw3ICsxMzk3LDcgQEAKIAkJaWYgKGVycmJ1ZiAhPSBOVUxMKSB7CiAJCQlpZiAob2RtX2Vycl9tc2cob2RtZXJybm8sICZlcnJzdHIpID09IC0xKQogCQkJCWVycnN0ciA9ICJVbmtub3duIGVycm9yIjsKLQkJCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJICAgICJicGZfbG9hZDogb2RtX3VubG9jayBmYWlsZWQ6ICVzIiwKIAkJCSAgICBlcnJzdHIpOwogCQl9CkBAIC0xMjgyLDcgKzE0MDgsNyBAQAogCQlpZiAoZXJyYnVmICE9IE5VTEwpIHsKIAkJCWlmIChvZG1fZXJyX21zZyhvZG1lcnJubywgJmVycnN0cikgPT0gLTEpCiAJCQkJZXJyc3RyID0gIlVua25vd24gZXJyb3IiOwotCQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgICAgImJwZl9sb2FkOiBvZG1fdGVybWluYXRlIGZhaWxlZDogJXMiLAogCQkJICAgIGVycnN0cik7CiAJCX0KQEAgLTEzNDUsNyArMTQ3MSw3IEBACiAKIAlpZiAocmMgPT0gLTEgfHwgZ2V0bWFqb3Ioc2J1Zi5zdF9yZGV2KSAhPSBtYWpvcikgewogCQlmb3IgKGkgPSAwOyBpIDwgQlBGX01JTk9SUzsgaSsrKSB7Ci0JCQlwY2FwX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyVkIiwgQlBGX05PREUsIGkpOworCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzJWQiLCBCUEZfTk9ERSwgaSk7CiAJCQl1bmxpbmsoYnVmKTsKIAkJCWlmIChta25vZChidWYsIFNfSVJVU1IgfCBTX0lGQ0hSLCBkb21ha2VkZXYobWFqb3IsIGkpKSA9PSAtMSkgewogCQkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZXJyYnVmLApAQCAtMTM1OCw4ICsxNDg0LDggQEAKIAogCS8qIENoZWNrIGlmIHRoZSBkcml2ZXIgaXMgbG9hZGVkICovCiAJbWVtc2V0KCZjZmdfbGQsIDB4MCwgc2l6ZW9mKGNmZ19sZCkpOworCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy8lcyIsIERSSVZFUl9QQVRILCBCUEZfTkFNRSk7CiAJY2ZnX2xkLnBhdGggPSBidWY7Ci0JcGNhcF9zbnByaW50ZihjZmdfbGQucGF0aCwgc2l6ZW9mKGNmZ19sZC5wYXRoKSwgIiVzLyVzIiwgRFJJVkVSX1BBVEgsIEJQRl9OQU1FKTsKIAlpZiAoKHN5c2NvbmZpZyhTWVNfUVVFUllMT0FELCAodm9pZCAqKSZjZmdfbGQsIHNpemVvZihjZmdfbGQpKSA9PSAtMSkgfHwKIAkgICAgKGNmZ19sZC5rbWlkID09IDApKSB7CiAJCS8qIERyaXZlciBpc24ndCBsb2FkZWQsIGxvYWQgaXQgbm93ICovCkBAIC0xNDI2LDcgKzE1NTIsNyBAQAogCQkJCSAgICBzdHJlcnJvcihlcnJubykpOwogCQkJfSBlbHNlIHsKIAkJCQltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOwotCQkJCXN0cm5jcHkocmVxLmlmbV9uYW1lLCBwYi0+ZGV2aWNlLAorCQkJCXBjYXBfc3RybGNweShyZXEuaWZtX25hbWUsIHBiLT5kZXZpY2UsCiAJCQkJICAgIHNpemVvZihyZXEuaWZtX25hbWUpKTsKIAkJCQlpZiAoaW9jdGwoc29jaywgU0lPQ0dJRk1FRElBLCAmcmVxKSA8IDApIHsKIAkJCQkJZnByaW50ZihzdGRlcnIsCkBAIC0xNDQwLDcgKzE1NjYsNyBAQAogCQkJCQkJICogdHVybiBpdCBvZmYuCiAJCQkJCQkgKi8KIAkJCQkJCW1lbXNldCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7Ci0JCQkJCQkodm9pZClzdHJuY3B5KGlmci5pZnJfbmFtZSwKKwkJCQkJCSh2b2lkKXBjYXBfc3RybGNweShpZnIuaWZyX25hbWUsCiAJCQkJCQkgICAgcGItPmRldmljZSwKIAkJCQkJCSAgICBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CiAJCQkJCQlpZnIuaWZyX21lZGlhID0KQEAgLTE0NjksNyArMTU5NSw3IEBACiAKIAkJCQlzID0gc29ja2V0KEFGX0xPQ0FMLCBTT0NLX0RHUkFNLCAwKTsKIAkJCQlpZiAocyA+PSAwKSB7Ci0JCQkJCXN0cmxjcHkoaWZyLmlmcl9uYW1lLCBwYi0+ZGV2aWNlLAorCQkJCQlwY2FwX3N0cmxjcHkoaWZyLmlmcl9uYW1lLCBwYi0+ZGV2aWNlLAogCQkJCQkgICAgc2l6ZW9mKGlmci5pZnJfbmFtZSkpOwogCQkJCQlpb2N0bChzLCBTSU9DSUZERVNUUk9ZLCAmaWZyKTsKIAkJCQkJY2xvc2Uocyk7CkBAIC0xNTA4LDIwICsxNjM0LDE3IEBACiAJcGNhcF9jbGVhbnVwX2xpdmVfY29tbW9uKHApOwogfQogCisjaWZkZWYgX19BUFBMRV9fCiBzdGF0aWMgaW50CiBjaGVja19zZXRpZl9mYWlsdXJlKHBjYXBfdCAqcCwgaW50IGVycm9yKQogewotI2lmZGVmIF9fQVBQTEVfXwogCWludCBmZDsKLQlzdHJ1Y3QgaWZyZXEgaWZyOwogCWludCBlcnI7Ci0jZW5kaWYKIAotCWlmIChlcnJvciA9PSBFTlhJTykgeworCWlmIChlcnJvciA9PSBQQ0FQX0VSUk9SX05PX1NVQ0hfREVWSUNFKSB7CiAJCS8qCiAJCSAqIE5vIHN1Y2ggZGV2aWNlIGV4aXN0cy4KIAkJICovCi0jaWZkZWYgX19BUFBMRV9fCiAJCWlmIChwLT5vcHQucmZtb24gJiYgc3RybmNtcChwLT5vcHQuZGV2aWNlLCAid2x0IiwgMykgPT0gMCkgewogCQkJLyoKIAkJCSAqIE1vbml0b3IgbW9kZSB3YXMgcmVxdWVzdGVkLCBhbmQgd2UncmUgdHJ5aW5nCkBAIC0xNTMyLDMzICsxNjU1LDM4IEBACiAJCQkgKi8KIAkJCWZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApOwogCQkJaWYgKGZkICE9IC0xKSB7Ci0JCQkJc3RybGNweShpZnIuaWZyX25hbWUsICJlbiIsCi0JCQkJICAgIHNpemVvZihpZnIuaWZyX25hbWUpKTsKLQkJCQlzdHJsY2F0KGlmci5pZnJfbmFtZSwgcC0+b3B0LmRldmljZSArIDMsCi0JCQkJICAgIHNpemVvZihpZnIuaWZyX25hbWUpKTsKLQkJCQlpZiAoaW9jdGwoZmQsIFNJT0NHSUZGTEFHUywgKGNoYXIgKikmaWZyKSA8IDApIHsKKwkJCQljaGFyICplbl9uYW1lOworCisJCQkJaWYgKHBjYXBfYXNwcmludGYoJmVuX25hbWUsICJlbiVzIiwKKwkJCQkgICAgcC0+b3B0LmRldmljZSArIDMpID09IC0xKSB7CiAJCQkJCS8qCi0JCQkJCSAqIFdlIGFzc3VtZSB0aGlzIGZhaWxlZCBiZWNhdXNlCi0JCQkJCSAqIHRoZSB1bmRlcmx5aW5nIGRldmljZSBkb2Vzbid0Ci0JCQkJCSAqIGV4aXN0LgorCQkJCQkgKiBXZSBjYW4ndCBmaW5kIG91dCB3aGV0aGVyIHRoZXJlJ3MKKwkJCQkJICogYW4gdW5kZXJseWluZyAiZW5OIiBkZXZpY2UsIHNvCisJCQkJCSAqIGp1c3QgcmVwb3J0ICJubyBzdWNoIGRldmljZSIuCiAJCQkJCSAqLwotCQkJCQllcnIgPSBQQ0FQX0VSUk9SX05PX1NVQ0hfREVWSUNFOwogCQkJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKHAtPmVycmJ1ZiwKIAkJCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsIGVycm5vLAotCQkJCQkgICAgIlNJT0NHSUZGTEFHUyBvbiAlcyBmYWlsZWQiLAotCQkJCQkgICAgaWZyLmlmcl9uYW1lKTsKLQkJCQl9IGVsc2UgewotCQkJCQkvKgotCQkJCQkgKiBUaGUgdW5kZXJseWluZyAiZW5OIiBkZXZpY2UKLQkJCQkJICogZXhpc3RzLCBidXQgdGhlcmUncyBubwotCQkJCQkgKiBjb3JyZXNwb25kaW5nICJ3bHROIiBkZXZpY2U7Ci0JCQkJCSAqIHRoYXQgbWVhbnMgdGhhdCB0aGUgImVuTiIKLQkJCQkJICogZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydAotCQkJCQkgKiBtb25pdG9yIG1vZGUsIHByb2JhYmx5IGJlY2F1c2UKLQkJCQkJICogaXQncyBhbiBFdGhlcm5ldCBkZXZpY2UgcmF0aGVyCi0JCQkJCSAqIHRoYW4gYSB3aXJlbGVzcyBkZXZpY2UuCi0JCQkJCSAqLwotCQkJCQllcnIgPSBQQ0FQX0VSUk9SX1JGTU9OX05PVFNVUDsKKwkJCQkJICAgICJtYWxsb2MiKTsKKwkJCQkJY2xvc2UoZmQpOworCQkJCQlyZXR1cm4gKFBDQVBfRVJST1JfTk9fU1VDSF9ERVZJQ0UpOworCQkJCX0KKwkJCQllcnIgPSBkZXZpY2VfZXhpc3RzKGZkLCBlbl9uYW1lLCBwLT5lcnJidWYpOworCQkJCWZyZWUoZW5fbmFtZSk7CisJCQkJaWYgKGVyciAhPSAwKSB7CisJCQkJCWlmIChlcnIgPT0gUENBUF9FUlJPUl9OT19TVUNIX0RFVklDRSkgeworCQkJCQkJLyoKKwkJCQkJCSAqIFRoZSB1bmRlcmx5aW5nICJlbk4iIGRldmljZQorCQkJCQkJICogZXhpc3RzLCBidXQgdGhlcmUncyBubworCQkJCQkJICogY29ycmVzcG9uZGluZyAid2x0TiIgZGV2aWNlOworCQkJCQkJICogdGhhdCBtZWFucyB0aGF0IHRoZSAiZW5OIgorCQkJCQkJICogZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydAorCQkJCQkJICogbW9uaXRvciBtb2RlLCBwcm9iYWJseQorCQkJCQkJICogYmVjYXVzZSBpdCdzIGFuIEV0aGVybmV0CisJCQkJCQkgKiBkZXZpY2UgcmF0aGVyIHRoYW4gYQorCQkJCQkJICogd2lyZWxlc3MgZGV2aWNlLgorCQkJCQkJICovCisJCQkJCQllcnIgPSBQQ0FQX0VSUk9SX1JGTU9OX05PVFNVUDsKKwkJCQkJfQogCQkJCX0KIAkJCQljbG9zZShmZCk7CiAJCQl9IGVsc2UgewpAQCAtMTU3NCwzMiArMTcwMiwzMCBAQAogCQkJfQogCQkJcmV0dXJuIChlcnIpOwogCQl9Ci0jZW5kaWYKKwogCQkvKgogCQkgKiBObyBzdWNoIGRldmljZS4KIAkJICovCi0JCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8ocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkgICAgZXJybm8sICJCSU9DU0VUSUYgZmFpbGVkIik7CiAJCXJldHVybiAoUENBUF9FUlJPUl9OT19TVUNIX0RFVklDRSk7Ci0JfSBlbHNlIGlmIChlcnJubyA9PSBFTkVURE9XTikgewotCQkvKgotCQkgKiBSZXR1cm4gYSAibmV0d29yayBkb3duIiBpbmRpY2F0aW9uLCBzbyB0aGF0Ci0JCSAqIHRoZSBhcHBsaWNhdGlvbiBjYW4gcmVwb3J0IHRoYXQgcmF0aGVyIHRoYW4KLQkJICogc2F5aW5nIHdlIGhhZCBhIG15c3RlcmlvdXMgZmFpbHVyZSBhbmQKLQkJICogc3VnZ2VzdCB0aGF0IHRoZXkgcmVwb3J0IGEgcHJvYmxlbSB0byB0aGUKLQkJICogbGlicGNhcCBkZXZlbG9wZXJzLgotCQkgKi8KLQkJcmV0dXJuIChQQ0FQX0VSUk9SX0lGQUNFX05PVF9VUCk7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogU29tZSBvdGhlciBlcnJvcjsgZmlsbCBpbiB0aGUgZXJyb3Igc3RyaW5nLCBhbmQKLQkJICogcmV0dXJuIFBDQVBfRVJST1IuCi0JCSAqLwotCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJICAgIGVycm5vLCAiQklPQ1NFVElGOiAlcyIsIHAtPm9wdC5kZXZpY2UpOwotCQlyZXR1cm4gKFBDQVBfRVJST1IpOwogCX0KKworCS8qCisJICogSnVzdCByZXR1cm4gdGhlIGVycm9yIHN0YXR1czsgaXQncyB3aGF0IHdlIHdhbnQsIGFuZCwgaWYgaXQncworCSAqIFBDQVBfRVJST1IsIHRoZSBlcnJvciBzdHJpbmcgaGFzIGJlZW4gZmlsbGVkIGluLgorCSAqLworCXJldHVybiAoZXJyb3IpOwogfQorI2Vsc2UKK3N0YXRpYyBpbnQKK2NoZWNrX3NldGlmX2ZhaWx1cmUocGNhcF90ICpwIF9VXywgaW50IGVycm9yKQoreworCS8qCisJICogSnVzdCByZXR1cm4gdGhlIGVycm9yIHN0YXR1czsgaXQncyB3aGF0IHdlIHdhbnQsIGFuZCwgaWYgaXQncworCSAqIFBDQVBfRVJST1IsIHRoZSBlcnJvciBzdHJpbmcgaGFzIGJlZW4gZmlsbGVkIGluLgorCSAqLworCXJldHVybiAoZXJyb3IpOworfQorI2VuZGlmCiAKIC8qCiAgKiBEZWZhdWx0IGNhcHR1cmUgYnVmZmVyIHNpemUuCkBAIC0xNjI1LDE1ICsxNzUxLDkgQEAKIAlpbnQgcmV0djsKICNlbmRpZgogCWludCBmZDsKLSNpZmRlZiBMSUZOQU1TSVoKLQljaGFyICp6b25lc2VwOworI2lmIGRlZmluZWQoTElGTkFNU0laKSAmJiBkZWZpbmVkKFpPTkVOQU1FX01BWCkgJiYgZGVmaW5lZChsaWZyX3pvbmVpZCkKIAlzdHJ1Y3QgbGlmcmVxIGlmcjsKLQljaGFyICppZnJuYW1lID0gaWZyLmxpZnJfbmFtZTsKLQljb25zdCBzaXplX3QgaWZuYW1zaXogPSBzaXplb2YoaWZyLmxpZnJfbmFtZSk7Ci0jZWxzZQotCXN0cnVjdCBpZnJlcSBpZnI7Ci0JY2hhciAqaWZybmFtZSA9IGlmci5pZnJfbmFtZTsKLQljb25zdCBzaXplX3QgaWZuYW1zaXogPSBzaXplb2YoaWZyLmlmcl9uYW1lKTsKKwljaGFyICp6b25lc2VwOwogI2VuZGlmCiAJc3RydWN0IGJwZl92ZXJzaW9uIGJ2OwogI2lmZGVmIF9fQVBQTEVfXwpAQCAtMTY3NSw3ICsxNzk1LDcgQEAKIAl9CiAJaWYgKGJ2LmJ2X21ham9yICE9IEJQRl9NQUpPUl9WRVJTSU9OIHx8CiAJICAgIGJ2LmJ2X21pbm9yIDwgQlBGX01JTk9SX1ZFUlNJT04pIHsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICJrZXJuZWwgYnBmIGZpbHRlciBvdXQgb2YgZGF0ZSIpOwogCQlzdGF0dXMgPSBQQ0FQX0VSUk9SOwogCQlnb3RvIGJhZDsKQEAgLTE3MTUsMTMgKzE4MzUsMTMgQEAKIAkJY2hhciAqbG5hbWVwOwogCiAJCWlmIChpZnIubGlmcl96b25laWQgIT0gR0xPQkFMX1pPTkVJRCkgewotCQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgICAgInpvbmVuYW1lL2xpbmtuYW1lIG9ubHkgdmFsaWQgaW4gZ2xvYmFsIHpvbmUuIik7CiAJCQlzdGF0dXMgPSBQQ0FQX0VSUk9SOwogCQkJZ290byBiYWQ7CiAJCX0KIAkJem5hbWVsZW4gPSB6b25lc2VwIC0gcC0+b3B0LmRldmljZTsKLQkJKHZvaWQpIHN0cmxjcHkocGF0aF96bmFtZSwgcC0+b3B0LmRldmljZSwgem5hbWVsZW4gKyAxKTsKKwkJKHZvaWQpIHBjYXBfc3RybGNweShwYXRoX3puYW1lLCBwLT5vcHQuZGV2aWNlLCB6bmFtZWxlbiArIDEpOwogCQlpZnIubGlmcl96b25laWQgPSBnZXR6b25laWRieW5hbWUocGF0aF96bmFtZSk7CiAJCWlmIChpZnIubGlmcl96b25laWQgPT0gLTEpIHsKIAkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8ocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLApAQCAtMTc4NiwyNCArMTkwNiwxOSBAQAogCQkJCQkgKi8KIAkJCQkJc29ja2ZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApOwogCQkJCQlpZiAoc29ja2ZkICE9IC0xKSB7Ci0JCQkJCQlzdHJsY3B5KGlmcm5hbWUsCi0JCQkJCQkgICAgcC0+b3B0LmRldmljZSwgaWZuYW1zaXopOwotCQkJCQkJaWYgKGlvY3RsKHNvY2tmZCwgU0lPQ0dJRkZMQUdTLAotCQkJCQkJICAgIChjaGFyICopJmlmcikgPCAwKSB7CisJCQkJCQlzdGF0dXMgPSBkZXZpY2VfZXhpc3RzKHNvY2tmZCwKKwkJCQkJCSAgICBwLT5vcHQuZGV2aWNlLCBwLT5lcnJidWYpOworCQkJCQkJaWYgKHN0YXR1cyA9PSAwKSB7CiAJCQkJCQkJLyoKLQkJCQkJCQkgKiBXZSBhc3N1bWUgdGhpcwotCQkJCQkJCSAqIGZhaWxlZCBiZWNhdXNlCi0JCQkJCQkJICogdGhlIHVuZGVybHlpbmcKLQkJCQkJCQkgKiBkZXZpY2UgZG9lc24ndAotCQkJCQkJCSAqIGV4aXN0LgorCQkJCQkJCSAqIFRoZSBkZXZpY2UgZXhpc3RzLAorCQkJCQkJCSAqIGJ1dCBpdCdzIG5vdCBhbgorCQkJCQkJCSAqIGVuTiBkZXZpY2U7IHRoYXQKKwkJCQkJCQkgKiBtZWFucyBpdCBkb2Vzbid0CisJCQkJCQkJICogc3VwcG9ydCBtb25pdG9yCisJCQkJCQkJICogbW9kZS4KIAkJCQkJCQkgKi8KLQkJCQkJCQlzdGF0dXMgPSBQQ0FQX0VSUk9SX05PX1NVQ0hfREVWSUNFOwotCQkJCQkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8ocC0+ZXJyYnVmLAotCQkJCQkJCSAgICBQQ0FQX0VSUkJVRl9TSVpFLAotCQkJCQkJCSAgICBlcnJubywKLQkJCQkJCQkgICAgIlNJT0NHSUZGTEFHUyBmYWlsZWQiKTsKLQkJCQkJCX0gZWxzZQogCQkJCQkJCXN0YXR1cyA9IFBDQVBfRVJST1JfUkZNT05fTk9UU1VQOworCQkJCQkJfQogCQkJCQkJY2xvc2Uoc29ja2ZkKTsKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCS8qCkBAIC0xODU1LDYgKzE5NzAsNyBAQAogCQkJICogaXQgd2hlbiB0aGUgcGNhcF90IGlzIGNsb3NlZC4KIAkJCSAqLwogCQkJaW50IHM7CisJCQlzdHJ1Y3QgaWZyZXEgaWZyOwogCiAJCQkvKgogCQkJICogT3BlbiBhIHNvY2tldCB0byB1c2UgZm9yIGlvY3RscyB0bwpAQCAtMTg3OCw3ICsxOTk0LDcgQEAKIAkJCQkgKiAiYXRleGl0KCkiIGZhaWxlZDsgZG9uJ3QgY3JlYXRlIHRoZQogCQkJCSAqIGludGVyZmFjZSwganVzdCBnaXZlIHVwLgogCQkJCSAqLwotCQkJCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCQkgICAgICJhdGV4aXQgZmFpbGVkIik7CiAJCQkJY2xvc2Uocyk7CiAJCQkJc3RhdHVzID0gUENBUF9FUlJPUjsKQEAgLTE4ODgsMTAgKzIwMDQsMTAgQEAKIAkJCS8qCiAJCQkgKiBDcmVhdGUgdGhlIGludGVyZmFjZS4KIAkJCSAqLwotCQkJc3RybGNweShpZnIuaWZyX25hbWUsIHAtPm9wdC5kZXZpY2UsIHNpemVvZihpZnIuaWZyX25hbWUpKTsKKwkJCXBjYXBfc3RybGNweShpZnIuaWZyX25hbWUsIHAtPm9wdC5kZXZpY2UsIHNpemVvZihpZnIuaWZyX25hbWUpKTsKIAkJCWlmIChpb2N0bChzLCBTSU9DSUZDUkVBVEUyLCAmaWZyKSA8IDApIHsKIAkJCQlpZiAoZXJybm8gPT0gRUlOVkFMKSB7Ci0JCQkJCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkJCSAgICAiSW52YWxpZCBVU0IgYnVzIGludGVyZmFjZSAlcyIsCiAJCQkJCSAgICBwLT5vcHQuZGV2aWNlKTsKIAkJCQl9IGVsc2UgewpAQCAtMTk4MywxMSArMjA5OSwxOSBAQAogCQkJc3RhdHVzID0gUENBUF9FUlJPUjsKIAkJCWdvdG8gYmFkOwogCQl9Ci0JCSh2b2lkKXN0cm5jcHkoaWZybmFtZSwgcC0+b3B0LmRldmljZSwgaWZuYW1zaXopOwotCQlpZiAoaW9jdGwoZmQsIEJJT0NTRVRJRiwgKGNhZGRyX3QpJmlmcikgPCAwKSB7Ci0JCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJCSAgICBlcnJubywgIkJJT0NTRVRJRjogJXMiLCBwLT5vcHQuZGV2aWNlKTsKLQkJCXN0YXR1cyA9IFBDQVBfRVJST1I7CisJCXN0YXR1cyA9IGJwZl9iaW5kKGZkLCBwLT5vcHQuZGV2aWNlLCBpZm5hbXNpeiwgcC0+ZXJyYnVmKTsKKwkJaWYgKHN0YXR1cyAhPSBCUEZfQklORF9TVUNDRUVERUQpIHsKKwkJCWlmIChzdGF0dXMgPT0gQlBGX0JJTkRfQlVGRkVSX1RPT19CSUcpIHsKKwkJCQkvKgorCQkJCSAqIFRoZSByZXF1ZXN0ZWQgYnVmZmVyIHNpemUKKwkJCQkgKiBpcyB0b28gYmlnLiAgRmFpbC4KKwkJCQkgKgorCQkJCSAqIFhYWCAtIHNob3VsZCB3ZSBkbyB0aGUgImtlZXAgY3V0dGluZworCQkJCSAqIHRoZSBidWZmZXIgc2l6ZSBpbiBoYWxmIiBsb29wIGhlcmUgaWYKKwkJCQkgKiB3ZSdyZSB1c2luZyB0aGUgZGVmYXVsdCBidWZmZXIgc2l6ZT8KKwkJCQkgKi8KKwkJCQlzdGF0dXMgPSBQQ0FQX0VSUk9SOworCQkJfQogCQkJZ290byBiYWQ7CiAJCX0KIAkJdiA9IHBiLT56YnVmc2l6ZSAtIHNpemVvZihzdHJ1Y3QgYnBmX3pidWZfaGVhZGVyKTsKQEAgLTIwMTQsMTQgKzIxMzgsMjMgQEAKIAkJCS8qCiAJCQkgKiBOb3cgYmluZCB0byB0aGUgZGV2aWNlLgogCQkJICovCi0JCQkodm9pZClzdHJuY3B5KGlmcm5hbWUsIHAtPm9wdC5kZXZpY2UsIGlmbmFtc2l6KTsKLSNpZmRlZiBCSU9DU0VUTElGCi0JCQlpZiAoaW9jdGwoZmQsIEJJT0NTRVRMSUYsIChjYWRkcl90KSZpZnIpIDwgMCkKLSNlbHNlCi0JCQlpZiAoaW9jdGwoZmQsIEJJT0NTRVRJRiwgKGNhZGRyX3QpJmlmcikgPCAwKQotI2VuZGlmCi0JCQl7Ci0JCQkJc3RhdHVzID0gY2hlY2tfc2V0aWZfZmFpbHVyZShwLCBlcnJubyk7CisJCQlzdGF0dXMgPSBicGZfYmluZChmZCwgcC0+b3B0LmRldmljZSwgcC0+ZXJyYnVmKTsKKwkJCWlmIChzdGF0dXMgIT0gQlBGX0JJTkRfU1VDQ0VFREVEKSB7CisJCQkJaWYgKHN0YXR1cyA9PSBCUEZfQklORF9CVUZGRVJfVE9PX0JJRykgeworCQkJCQkvKgorCQkJCQkgKiBUaGUgcmVxdWVzdGVkIGJ1ZmZlciBzaXplCisJCQkJCSAqIGlzIHRvbyBiaWcuICBGYWlsLgorCQkJCQkgKi8KKwkJCQkJc3RhdHVzID0gUENBUF9FUlJPUjsKKwkJCQkJZ290byBiYWQ7CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBTcGVjaWFsIGNoZWNrcyBvbiBtYWNPUyB0byBkZWFsIHdpdGgKKwkJCQkgKiB0aGUgd2F5IG1vbml0b3IgbW9kZSB3YXMgZG9uZSBvbgorCQkJCSAqIDEwLjQgVGlnZXIuCisJCQkJICovCisJCQkJc3RhdHVzID0gY2hlY2tfc2V0aWZfZmFpbHVyZShwLCBzdGF0dXMpOwogCQkJCWdvdG8gYmFkOwogCQkJfQogCQl9IGVsc2UgewpAQCAtMjA0NywyMiArMjE4MCwzMCBAQAogCQkJCSAqLwogCQkJCSh2b2lkKSBpb2N0bChmZCwgQklPQ1NCTEVOLCAoY2FkZHJfdCkmdik7CiAKLQkJCQkodm9pZClzdHJuY3B5KGlmcm5hbWUsIHAtPm9wdC5kZXZpY2UsIGlmbmFtc2l6KTsKLSNpZmRlZiBCSU9DU0VUTElGCi0JCQkJaWYgKGlvY3RsKGZkLCBCSU9DU0VUTElGLCAoY2FkZHJfdCkmaWZyKSA+PSAwKQotI2Vsc2UKLQkJCQlpZiAoaW9jdGwoZmQsIEJJT0NTRVRJRiwgKGNhZGRyX3QpJmlmcikgPj0gMCkKLSNlbmRpZgorCQkJCXN0YXR1cyA9IGJwZl9iaW5kKGZkLCBwLT5vcHQuZGV2aWNlLCBwLT5lcnJidWYpOworCQkJCWlmIChzdGF0dXMgPT0gQlBGX0JJTkRfU1VDQ0VFREVEKQogCQkJCQlicmVhazsJLyogdGhhdCBzaXplIHdvcmtlZDsgd2UncmUgZG9uZSAqLwogCi0JCQkJaWYgKGVycm5vICE9IEVOT0JVRlMpIHsKLQkJCQkJc3RhdHVzID0gY2hlY2tfc2V0aWZfZmFpbHVyZShwLCBlcnJubyk7CisJCQkJLyoKKwkJCQkgKiBJZiB0aGUgYXR0ZW1wdCBmYWlsZWQgYmVjYXVzZSB0aGUKKwkJCQkgKiBidWZmZXIgd2FzIHRvbyBiaWcsIGN1dCB0aGUgYnVmZmVyCisJCQkJICogc2l6ZSBpbiBoYWxmIGFuZCB0cnkgYWdhaW4uCisJCQkJICoKKwkJCQkgKiBPdGhlcndpc2UsIGZhaWwuCisJCQkJICovCisJCQkJaWYgKGVycm5vICE9IEJQRl9CSU5EX0JVRkZFUl9UT09fQklHKSB7CisJCQkJCS8qCisJCQkJCSAqIFNwZWNpYWwgY2hlY2tzIG9uIG1hY09TIHRvIGRlYWwKKwkJCQkJICogd2l0aCB0aGUgd2F5IG1vbml0b3IgbW9kZSB3YXMKKwkJCQkJICogZG9uZSBvbiAxMC40IFRpZ2VyLgorCQkJCQkgKi8KKwkJCQkJc3RhdHVzID0gY2hlY2tfc2V0aWZfZmFpbHVyZShwLCBzdGF0dXMpOwogCQkJCQlnb3RvIGJhZDsKIAkJCQl9CiAJCQl9CiAKIAkJCWlmICh2ID09IDApIHsKLQkJCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkJICAgICJCSU9DU0JMRU46ICVzOiBObyBidWZmZXIgc2l6ZSB3b3JrZWQiLAogCQkJCSAgICBwLT5vcHQuZGV2aWNlKTsKIAkJCQlzdGF0dXMgPSBQQ0FQX0VSUk9SOwpAQCAtMjEwNiw3ICsyMjQ3LDcgQEAKIAkJLyoKIAkJICogV2UgZG9uJ3Qga25vdyB3aGF0IHRvIG1hcCB0aGlzIHRvIHlldC4KIAkJICovCi0JCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAidW5rbm93biBpbnRlcmZhY2UgdHlwZSAldSIsCisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgInVua25vd24gaW50ZXJmYWNlIHR5cGUgJXUiLAogCQkgICAgdik7CiAJCXN0YXR1cyA9IFBDQVBfRVJST1I7CiAJCWdvdG8gYmFkOwpAQCAtMjE2Niw5ICsyMzA3LDkgQEAKIAkgKiB3ZSB0cnkgdG8gc2VsZWN0IERMVF9JRUVFODAyXzExLgogCSAqLwogCWlmIChoYXZlX29zaW5mbykgewotCQlpZiAoaXNkaWdpdCgodW5zaWduZWQpb3NpbmZvLnJlbGVhc2VbMF0pICYmCisJCWlmIChQQ0FQX0lTRElHSVQoKHVuc2lnbmVkKW9zaW5mby5yZWxlYXNlWzBdKSAmJgogCQkgICAgIChvc2luZm8ucmVsZWFzZVswXSA9PSAnOScgfHwKLQkJICAgICBpc2RpZ2l0KCh1bnNpZ25lZClvc2luZm8ucmVsZWFzZVsxXSkpKSB7CisJCSAgICAgUENBUF9JU0RJR0lUKCh1bnNpZ25lZClvc2luZm8ucmVsZWFzZVsxXSkpKSB7CiAJCQkvKgogCQkJICogMTAuNSAoRGFyd2luIDkueCksIG9yIGxhdGVyLgogCQkJICovCkBAIC0yMTg3LDcgKzIzMjgsNyBAQAogCQkJCQkgKiBvZiBsaW5rLWxheWVyIHR5cGVzLCBhcyBzZWxlY3RpbmcKIAkJCQkJICogaXQgd2lsbCBrZWVwIG1vbml0b3IgbW9kZSBvZmYuCiAJCQkJCSAqLwotCQkJCQlyZW1vdmVfZW4ocCk7CisJCQkJCXJlbW92ZV9ub25fODAyXzExKHApOwogCiAJCQkJCS8qCiAJCQkJCSAqIElmIHRoZSBuZXcgbW9kZSB3ZSB3YW50IGlzbid0CkBAIC0yNDE4LDcgKzI1NTksNyBAQAogCQkvKgogCQkgKiBXZSBkb24ndCBzdXBwb3J0IGltbWVkaWF0ZSBtb2RlLiAgRmFpbC4KIAkJICovCi0JCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiSW1tZWRpYXRlIG1vZGUgbm90IHN1cHBvcnRlZCIpOworCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJJbW1lZGlhdGUgbW9kZSBub3Qgc3VwcG9ydGVkIik7CiAJCXN0YXR1cyA9IFBDQVBfRVJST1I7CiAJCWdvdG8gYmFkOwogCX0KQEAgLTI3NDUsMTUgKzI4ODYsNDAgQEAKIAkJcmV0dXJuICgtMSk7CiAJfQogCW1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7Ci0Jc3RybmNweShyZXEuaWZtX25hbWUsIG5hbWUsIHNpemVvZihyZXEuaWZtX25hbWUpKTsKKwlwY2FwX3N0cmxjcHkocmVxLmlmbV9uYW1lLCBuYW1lLCBzaXplb2YocmVxLmlmbV9uYW1lKSk7CiAJaWYgKGlvY3RsKHNvY2ssIFNJT0NHSUZNRURJQSwgJnJlcSkgPCAwKSB7CiAJCWlmIChlcnJubyA9PSBFT1BOT1RTVVBQIHx8IGVycm5vID09IEVJTlZBTCB8fCBlcnJubyA9PSBFTk9UVFkgfHwKLQkJICAgIGVycm5vID09IEVOT0RFVikgeworCQkgICAgZXJybm8gPT0gRU5PREVWIHx8IGVycm5vID09IEVQRVJNCisjaWZkZWYgRVBXUk9GRgorCQkgICAgfHwgZXJybm8gPT0gRVBXUk9GRgorI2VuZGlmCisJCSAgICApIHsKIAkJCS8qCiAJCQkgKiBOb3Qgc3VwcG9ydGVkLCBzbyB3ZSBjYW4ndCBwcm92aWRlIGFueQogCQkJICogYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4gIEFzc3VtZSB0aGF0CiAJCQkgKiB0aGlzIG1lYW5zIHRoYXQgImNvbm5lY3RlZCIgdnMuCiAJCQkgKiAiZGlzY29ubmVjdGVkIiBkb2Vzbid0IGFwcGx5LgorCQkJICoKKwkJCSAqIFRoZSBpb2N0bCByb3V0aW5lIGZvciBBcHBsZSdzIHBrdGFwIGRldmljZXMsCisJCQkgKiBhbm5veWluZ2x5LCBjaGVja3MgZm9yICJhcmUgeW91IHJvb3Q/IiBiZWZvcmUKKwkJCSAqIGNoZWNraW5nIHdoZXRoZXIgdGhlIGlvY3RsIGlzIHZhbGlkLCBzbyBpdAorCQkJICogcmV0dXJucyBFUEVSTSwgcmF0aGVyIHRoYW4gRU5PVFNVUCwgZm9yIHRoZQorCQkJICogaW52YWxpZCBTSU9DR0lGTUVESUEsIHVubGVzcyB5b3UncmUgcm9vdC4KKwkJCSAqIFNvLCBqdXN0IGFzIHdlIGRvIGZvciBzb21lIGV0aHRvb2wgaW9jdGxzCisJCQkgKiBvbiBMaW51eCwgd2hpY2ggbWFrZXMgdGhlIHNhbWUgbWlzdGFrZSwgd2UKKwkJCSAqIGFsc28gdHJlYXQgRVBFUk0gYXMgbWVhbmluZyAibm90IHN1cHBvcnRlZCIuCisJCQkgKgorCQkJICogQW5kIGl0IGFwcGVhcnMgdGhhdCBBcHBsZSdzIGxsdzAgZGV2aWNlLCB3aGljaAorCQkJICogYXBwZWFycyB0byBiZSBwYXJ0IG9mIHRoZSBTa3l3YWxrIHN1YnN5c3RlbToKKwkJCSAqCisJCQkgKiAgICBodHRwOi8vbmV3b3N4Ym9vay5jb20vYm9udXMvdm9sMWNoMTYuaHRtbAorCQkJICoKKwkJCSAqIGNhbiBzb21ldGltZXMgcmV0dXJuIEVQV1JPRkYgKCJEZXZpY2UgcG93ZXIKKwkJCSAqIGlzIG9mZiIpIGZvciB0aGF0IGlvY3RsLCBzbyB3ZSB0cmVhdCAqdGhhdCoKKwkJCSAqIGFzIGFub3RoZXIgaW5kaWNhdGlvbiB0aGF0IHdlIGNhbid0IGdldCBhCisJCQkgKiBjb25uZWN0aW9uIHN0YXR1cy4gIChJZiBpdCAqaXNuJ3QqICJwb3dlcmVkCisJCQkgKiBvZmYiLCBpdCdzIHJlcG9ydGVkIGFzIGEgd2lyZWxlc3MgZGV2aWNlLAorCQkJICogY29tcGxldGUgd2l0aCBhbiBhY3RpdmUvaW5hY3RpdmUgc3RhdGUuKQogCQkJICovCiAJCQkqZmxhZ3MgfD0gUENBUF9JRl9DT05ORUNUSU9OX1NUQVRVU19OT1RfQVBQTElDQUJMRTsKIAkJCWNsb3NlKHNvY2spOwpAQCAtMjg2Myw3ICszMDI5LDcgQEAKIAl9CiAKIAltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mIHJlcSk7Ci0Jc3RybmNweShyZXEuaWZtX25hbWUsIHAtPm9wdC5kZXZpY2UsIHNpemVvZiByZXEuaWZtX25hbWUpOworCXBjYXBfc3RybGNweShyZXEuaWZtX25hbWUsIHAtPm9wdC5kZXZpY2UsIHNpemVvZiByZXEuaWZtX25hbWUpOwogCiAJLyoKIAkgKiBGaW5kIG91dCBob3cgbWFueSBtZWRpYSB0eXBlcyB3ZSBoYXZlLgpAQCAtMjg5MCw3ICszMDU2LDcgQEAKIAogCQlkZWZhdWx0OgogCQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCi0JCQkgICAgZXJybm8sICJTSU9DR0lGTUVESUEgMSIpOworCQkJICAgIGVycm5vLCAiU0lPQ0dJRk1FRElBIik7CiAJCQljbG9zZShzb2NrKTsKIAkJCXJldHVybiAoUENBUF9FUlJPUik7CiAJCX0KQEAgLTI5NzMsNyArMzEzOSw3IEBACiAJCQkJcmV0dXJuIChQQ0FQX0VSUk9SKTsKIAkJCX0KIAkJCW1lbXNldCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7Ci0JCQkodm9pZClzdHJuY3B5KGlmci5pZnJfbmFtZSwgcC0+b3B0LmRldmljZSwKKwkJCSh2b2lkKXBjYXBfc3RybGNweShpZnIuaWZyX25hbWUsIHAtPm9wdC5kZXZpY2UsCiAJCQkgICAgc2l6ZW9mKGlmci5pZnJfbmFtZSkpOwogCQkJaWZyLmlmcl9tZWRpYSA9IHJlcS5pZm1fY3VycmVudCB8IElGTV9JRUVFODAyMTFfTU9OSVRPUjsKIAkJCWlmIChpb2N0bChzb2NrLCBTSU9DU0lGTUVESUEsICZpZnIpID09IC0xKSB7CkBAIC0zMDMyLDggKzMxOTgsMTIgQEAKIAkJCQluZXdfZGx0ID0gYmRscC0+YmZsX2xpc3RbaV07CiAJCQlicmVhazsKIAorI2lmZGVmIERMVF9QUklTTV9IRUFERVIKIAkJY2FzZSBETFRfUFJJU01fSEVBREVSOgorI2VuZGlmCisjaWZkZWYgRExUX0FJUk9ORVRfSEVBREVSCiAJCWNhc2UgRExUX0FJUk9ORVRfSEVBREVSOgorI2VuZGlmCiAJCWNhc2UgRExUX0lFRUU4MDJfMTFfUkFESU9fQVZTOgogCQkJLyoKIAkJCSAqIDgwMi4xMSB3aXRoIHJhZGlvLCBidXQgbm90IHJhZGlvdGFwLgpAQCAtMzA2OCwyNCArMzIzOCwyNSBAQAogCiAjaWYgZGVmaW5lZChfX0FQUExFX18pICYmIGRlZmluZWQoQklPQ0dETFRMSVNUKQogLyoKLSAqIFJlbW92ZSBETFRfRU4xME1CIGZyb20gdGhlIGxpc3Qgb2YgRExUXyB2YWx1ZXMsIGFzIHdlJ3JlIGluIG1vbml0b3IgbW9kZSwKLSAqIGFuZCBETFRfRU4xME1CIGlzbid0IHN1cHBvcnRlZCBpbiBtb25pdG9yIG1vZGUuCisgKiBSZW1vdmUgbm9uLTgwMi4xMSBoZWFkZXIgdHlwZXMgZnJvbSB0aGUgbGlzdCBvZiBETFRfIHZhbHVlcywgYXMgd2UncmUgaW4KKyAqIG1vbml0b3IgbW9kZSwgYW5kIHRob3NlIGhlYWRlciB0eXBlcyBhcmVuJ3Qgc3VwcG9ydGVkIGluIG1vbml0b3IgbW9kZS4KICAqLwogc3RhdGljIHZvaWQKLXJlbW92ZV9lbihwY2FwX3QgKnApCityZW1vdmVfbm9uXzgwMl8xMShwY2FwX3QgKnApCiB7CiAJaW50IGksIGo7CiAKIAkvKgotCSAqIFNjYW4gdGhlIGxpc3Qgb2YgRExUXyB2YWx1ZXMgYW5kIGRpc2NhcmQgRExUX0VOMTBNQi4KKwkgKiBTY2FuIHRoZSBsaXN0IG9mIERMVF8gdmFsdWVzIGFuZCBkaXNjYXJkIG5vbi04MDIuMTEgb25lcy4KIAkgKi8KIAlqID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgcC0+ZGx0X2NvdW50OyBpKyspIHsKIAkJc3dpdGNoIChwLT5kbHRfbGlzdFtpXSkgewogCiAJCWNhc2UgRExUX0VOMTBNQjoKKwkJY2FzZSBETFRfUkFXOgogCQkJLyoKLQkJCSAqIERvbid0IG9mZmVyIHRoaXMgb25lLgorCQkJICogTm90IDgwMi4xMS4gIERvbid0IG9mZmVyIHRoaXMgb25lLgogCQkJICovCiAJCQljb250aW51ZTsKIApAQCAtMzEyNywxMCArMzI5OCwxNyBAQAogCQlzd2l0Y2ggKHAtPmRsdF9saXN0W2ldKSB7CiAKIAkJY2FzZSBETFRfSUVFRTgwMl8xMToKKyNpZmRlZiBETFRfUFJJU01fSEVBREVSCiAJCWNhc2UgRExUX1BSSVNNX0hFQURFUjoKKyNlbmRpZgorI2lmZGVmIERMVF9BSVJPTkVUX0hFQURFUgogCQljYXNlIERMVF9BSVJPTkVUX0hFQURFUjoKKyNlbmRpZgogCQljYXNlIERMVF9JRUVFODAyXzExX1JBRElPOgogCQljYXNlIERMVF9JRUVFODAyXzExX1JBRElPX0FWUzoKKyNpZmRlZiBETFRfUFBJCisJCWNhc2UgRExUX1BQSToKKyNlbmRpZgogCQkJLyoKIAkJCSAqIDgwMi4xMS4gIERvbid0IG9mZmVyIHRoaXMgb25lLgogCQkJICovCkBAIC0zMjIyLDYxICszNDAwLDE4OCBAQAogICogU2V0IGRpcmVjdGlvbiBmbGFnOiBXaGljaCBwYWNrZXRzIGRvIHdlIGFjY2VwdCBvbiBhIGZvcndhcmRpbmcKICAqIHNpbmdsZSBkZXZpY2U/IElOLCBPVVQgb3IgYm90aD8KICAqLworI2lmIGRlZmluZWQoQklPQ1NESVJFQ1RJT04pCiBzdGF0aWMgaW50CiBwY2FwX3NldGRpcmVjdGlvbl9icGYocGNhcF90ICpwLCBwY2FwX2RpcmVjdGlvbl90IGQpCiB7Ci0jaWYgZGVmaW5lZChCSU9DU0RJUkVDVElPTikKIAl1X2ludCBkaXJlY3Rpb247Ci0KLQlkaXJlY3Rpb24gPSAoZCA9PSBQQ0FQX0RfSU4pID8gQlBGX0RfSU4gOgotCSAgICAoKGQgPT0gUENBUF9EX09VVCkgPyBCUEZfRF9PVVQgOiBCUEZfRF9JTk9VVCk7Ci0JaWYgKGlvY3RsKHAtPmZkLCBCSU9DU0RJUkVDVElPTiwgJmRpcmVjdGlvbikgPT0gLTEpIHsKLQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhwLT5lcnJidWYsIHNpemVvZihwLT5lcnJidWYpLAotCQkgICAgZXJybm8sICJDYW5ub3Qgc2V0IGRpcmVjdGlvbiB0byAlcyIsCi0JCSAgICAgICAgKGQgPT0gUENBUF9EX0lOKSA/ICJQQ0FQX0RfSU4iIDoKLQkJCSgoZCA9PSBQQ0FQX0RfT1VUKSA/ICJQQ0FQX0RfT1VUIiA6ICJQQ0FQX0RfSU5PVVQiKSk7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlyZXR1cm4gKDApOwotI2VsaWYgZGVmaW5lZChCSU9DU1NFRVNFTlQpCi0JdV9pbnQgc2Vlc2VudDsKKwljb25zdCBjaGFyICpkaXJlY3Rpb25fbmFtZTsKIAogCS8qCi0JICogV2UgZG9uJ3Qgc3VwcG9ydCBQQ0FQX0RfT1VULgorCSAqIEZyZWVCU0QgYW5kIE5ldEJTRC4KIAkgKi8KLQlpZiAoZCA9PSBQQ0FQX0RfT1VUKSB7Ci0JCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBzaXplb2YocC0+ZXJyYnVmKSwKLQkJICAgICJTZXR0aW5nIGRpcmVjdGlvbiB0byBQQ0FQX0RfT1VUIGlzIG5vdCBzdXBwb3J0ZWQgb24gQlBGIik7Ci0JCXJldHVybiAtMTsKKwlzd2l0Y2ggKGQpIHsKKworCWNhc2UgUENBUF9EX0lOOgorCQkvKgorCQkgKiBJbmNvbWluZywgYnV0IG5vdCBvdXRnb2luZywgc28gYWNjZXB0IG9ubHkKKwkJICogaW5jb21pbmcgcGFja2V0cy4KKwkJICovCisJCWRpcmVjdGlvbiA9IEJQRl9EX0lOOworCQlkaXJlY3Rpb25fbmFtZSA9ICJcImluY29taW5nIG9ubHlcIiI7CisJCWJyZWFrOworCisJY2FzZSBQQ0FQX0RfT1VUOgorCQkvKgorCQkgKiBPdXRnb2luZywgYnV0IG5vdCBpbmNvbWluZywgc28gYWNjZXB0IG9ubHkKKwkJICogb3V0Z29pbmcgcGFja2V0cy4KKwkJICovCisJCWRpcmVjdGlvbiA9IEJQRl9EX09VVDsKKwkJZGlyZWN0aW9uX25hbWUgPSAiXCJvdXRnb2luZyBvbmx5XCIiOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qCisJCSAqIEluY29taW5nIGFuZCBvdXRnb2luZywgc28gYWNjZXB0IGJvdGgKKwkJICogaW5jb21pbmcgYW5kIG91dGdvaW5nIHBhY2tldHMuCisJCSAqCisJCSAqIEl0J3MgZ3VhcmFudGVlZCwgYXQgdGhpcyBwb2ludCwgdGhhdCBkIGlzIGEgdmFsaWQKKwkJICogZGlyZWN0aW9uIHZhbHVlLCBzbyB3ZSBrbm93IHRoYXQgdGhpcyBpcyBQQ0FQX0RfSU5PVVQKKwkJICogaWYgaXQncyBub3QgUENBUF9EX0lOIG9yIFBDQVBfRF9PVVQuCisJCSAqLworCQlkaXJlY3Rpb24gPSBCUEZfRF9JTk9VVDsKKwkJZGlyZWN0aW9uX25hbWUgPSAiXCJpbmNvbWluZyBhbmQgb3V0Z29pbmdcIiI7CisJCWJyZWFrOwogCX0KIAotCXNlZXNlbnQgPSAoZCA9PSBQQ0FQX0RfSU5PVVQpOwotCWlmIChpb2N0bChwLT5mZCwgQklPQ1NTRUVTRU5ULCAmc2Vlc2VudCkgPT0gLTEpIHsKKwlpZiAoaW9jdGwocC0+ZmQsIEJJT0NTRElSRUNUSU9OLCAmZGlyZWN0aW9uKSA9PSAtMSkgewogCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKHAtPmVycmJ1Ziwgc2l6ZW9mKHAtPmVycmJ1ZiksCi0JCSAgICBlcnJubywgIkNhbm5vdCBzZXQgZGlyZWN0aW9uIHRvICVzIiwKLQkJICAgIChkID09IFBDQVBfRF9JTk9VVCkgPyAiUENBUF9EX0lOT1VUIiA6ICJQQ0FQX0RfSU4iKTsKKwkJICAgIGVycm5vLCAiQ2Fubm90IHNldCBkaXJlY3Rpb24gdG8gJXMiLCBkaXJlY3Rpb25fbmFtZSk7CiAJCXJldHVybiAoLTEpOwogCX0KIAlyZXR1cm4gKDApOwotI2Vsc2UKLQkodm9pZCkgcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIHNpemVvZihwLT5lcnJidWYpLAotCSAgICAiVGhpcyBzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IEJJT0NTU0VFU0VOVCwgc28gdGhlIGRpcmVjdGlvbiBjYW4ndCBiZSBzZXQiKTsKLQlyZXR1cm4gKC0xKTsKLSNlbmRpZgogfQorI2VsaWYgZGVmaW5lZChCSU9DU0RJUkZJTFQpCitzdGF0aWMgaW50CitwY2FwX3NldGRpcmVjdGlvbl9icGYocGNhcF90ICpwLCBwY2FwX2RpcmVjdGlvbl90IGQpCit7CisJdV9pbnQgZGlyZmlsdDsKKwljb25zdCBjaGFyICpkaXJlY3Rpb25fbmFtZTsKIAorCS8qCisJICogT3BlbkJTRDsgc2FtZSBmdW5jdGlvbmFsaXR5LCBkaWZmZXJlbnQgbmFtZXMsIGRpZmZlcmVudAorCSAqIHNlbWFudGljcyAodGhlIGZsYWdzIG1lYW4gIipkb24ndCogY2FwdHVyZSBwYWNrZXRzIGluCisJICogdGhhdCBkaXJlY3Rpb24iLCBub3QgIipjYXB0dXJlIG9ubHkqIHBhY2tldHMgaW4gdGhhdAorCSAqIGRpcmVjdGlvbiIpLgorCSAqLworCXN3aXRjaCAoZCkgeworCisJY2FzZSBQQ0FQX0RfSU46CisJCS8qCisJCSAqIEluY29taW5nLCBidXQgbm90IG91dGdvaW5nLCBzbyBmaWx0ZXIgb3V0CisJCSAqIG91dGdvaW5nIHBhY2tldHMuCisJCSAqLworCQlkaXJmaWx0ID0gQlBGX0RJUkVDVElPTl9PVVQ7CisJCWRpcmVjdGlvbl9uYW1lID0gIlwiaW5jb21pbmcgb25seVwiIjsKKwkJYnJlYWs7CisKKwljYXNlIFBDQVBfRF9PVVQ6CisJCS8qCisJCSAqIE91dGdvaW5nLCBidXQgbm90IGluY29taW5nLCBzbyBmaWx0ZXIgb3V0CisJCSAqIGluY29taW5nIHBhY2tldHMuCisJCSAqLworCQlkaXJmaWx0ID0gQlBGX0RJUkVDVElPTl9JTjsKKwkJZGlyZWN0aW9uX25hbWUgPSAiXCJvdXRnb2luZyBvbmx5XCIiOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qCisJCSAqIEluY29taW5nIGFuZCBvdXRnb2luZywgc28gZG9uJ3QgZmlsdGVyIG91dAorCQkgKiBhbnkgcGFja2V0cyBiYXNlZCBvbiBkaXJlY3Rpb24uCisJCSAqCisJCSAqIEl0J3MgZ3VhcmFudGVlZCwgYXQgdGhpcyBwb2ludCwgdGhhdCBkIGlzIGEgdmFsaWQKKwkJICogZGlyZWN0aW9uIHZhbHVlLCBzbyB3ZSBrbm93IHRoYXQgdGhpcyBpcyBQQ0FQX0RfSU5PVVQKKwkJICogaWYgaXQncyBub3QgUENBUF9EX0lOIG9yIFBDQVBfRF9PVVQuCisJCSAqLworCQlkaXJmaWx0ID0gMDsKKwkJZGlyZWN0aW9uX25hbWUgPSAiXCJpbmNvbWluZyBhbmQgb3V0Z29pbmdcIiI7CisJCWJyZWFrOworCX0KKwlpZiAoaW9jdGwocC0+ZmQsIEJJT0NTRElSRklMVCwgJmRpcmZpbHQpID09IC0xKSB7CisJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8ocC0+ZXJyYnVmLCBzaXplb2YocC0+ZXJyYnVmKSwKKwkJICAgIGVycm5vLCAiQ2Fubm90IHNldCBkaXJlY3Rpb24gdG8gJXMiLCBkaXJlY3Rpb25fbmFtZSk7CisJCXJldHVybiAoLTEpOworCX0KKwlyZXR1cm4gKDApOworfQorI2VsaWYgZGVmaW5lZChCSU9DU1NFRVNFTlQpCitzdGF0aWMgaW50CitwY2FwX3NldGRpcmVjdGlvbl9icGYocGNhcF90ICpwLCBwY2FwX2RpcmVjdGlvbl90IGQpCit7CisJdV9pbnQgc2Vlc2VudDsKKwljb25zdCBjaGFyICpkaXJlY3Rpb25fbmFtZTsKKworCS8qCisJICogT1Mgd2l0aCBqdXN0IEJJT0NTU0VFU0VOVC4KKwkgKi8KKwlzd2l0Y2ggKGQpIHsKKworCWNhc2UgUENBUF9EX0lOOgorCQkvKgorCQkgKiBJbmNvbWluZywgYnV0IG5vdCBvdXRnb2luZywgc28gd2UgZG9uJ3Qgd2FudCB0bworCQkgKiBzZWUgdHJhbnNtaXR0ZWQgcGFja2V0cy4KKwkJICovCisJCXNlZXNlbnQgPSAwOworCQlkaXJlY3Rpb25fbmFtZSA9ICJcImluY29taW5nIG9ubHlcIiI7CisJCWJyZWFrOworCisJY2FzZSBQQ0FQX0RfT1VUOgorCQkvKgorCQkgKiBPdXRnb2luZywgYnV0IG5vdCBpbmNvbWluZzsgd2UgY2FuJ3Qgc3BlY2lmeSB0aGF0LgorCQkgKi8KKwkJc25wcmludGYocC0+ZXJyYnVmLCBzaXplb2YocC0+ZXJyYnVmKSwKKwkJICAgICJTZXR0aW5nIGRpcmVjdGlvbiB0byBcIm91dGdvaW5nIG9ubHlcIiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZGV2aWNlIik7CisJCXJldHVybiAoLTEpOworCisJZGVmYXVsdDoKKwkJLyoKKwkJICogSW5jb21pbmcgYW5kIG91dGdvaW5nLCBzbyB3ZSB3YW50IHRvIHNlZSB0cmFuc21pdHRlZAorCQkgKiBwYWNrZXRzLgorCQkgKgorCQkgKiBJdCdzIGd1YXJhbnRlZWQsIGF0IHRoaXMgcG9pbnQsIHRoYXQgZCBpcyBhIHZhbGlkCisJCSAqIGRpcmVjdGlvbiB2YWx1ZSwgc28gd2Uga25vdyB0aGF0IHRoaXMgaXMgUENBUF9EX0lOT1VUCisJCSAqIGlmIGl0J3Mgbm90IFBDQVBfRF9JTiBvciBQQ0FQX0RfT1VULgorCQkgKi8KKwkJc2Vlc2VudCA9IDE7CisJCWRpcmVjdGlvbl9uYW1lID0gIlwiaW5jb21pbmcgYW5kIG91dGdvaW5nXCIiOworCQlicmVhazsKKwl9CisKKwlpZiAoaW9jdGwocC0+ZmQsIEJJT0NTU0VFU0VOVCwgJnNlZXNlbnQpID09IC0xKSB7CisJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8ocC0+ZXJyYnVmLCBzaXplb2YocC0+ZXJyYnVmKSwKKwkJICAgIGVycm5vLCAiQ2Fubm90IHNldCBkaXJlY3Rpb24gdG8gJXMiLCBkaXJlY3Rpb25fbmFtZSk7CisJCXJldHVybiAoLTEpOworCX0KKwlyZXR1cm4gKDApOworfQorI2Vsc2UKK3N0YXRpYyBpbnQKK3BjYXBfc2V0ZGlyZWN0aW9uX2JwZihwY2FwX3QgKnAsIHBjYXBfZGlyZWN0aW9uX3QgZCBfVV8pCit7CisJKHZvaWQpIHNucHJpbnRmKHAtPmVycmJ1Ziwgc2l6ZW9mKHAtPmVycmJ1ZiksCisJICAgICJTZXR0aW5nIGRpcmVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZGV2aWNlIik7CisJcmV0dXJuICgtMSk7Cit9CisjZW5kaWYKKworI2lmZGVmIEJJT0NTRExUCiBzdGF0aWMgaW50CiBwY2FwX3NldF9kYXRhbGlua19icGYocGNhcF90ICpwLCBpbnQgZGx0KQogewotI2lmZGVmIEJJT0NTRExUCiAJaWYgKGlvY3RsKHAtPmZkLCBCSU9DU0RMVCwgJmRsdCkgPT0gLTEpIHsKIAkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhwLT5lcnJidWYsIHNpemVvZihwLT5lcnJidWYpLAogCQkgICAgZXJybm8sICJDYW5ub3Qgc2V0IERMVCAlZCIsIGRsdCk7CiAJCXJldHVybiAoLTEpOwogCX0KLSNlbmRpZgogCXJldHVybiAoMCk7CiB9CisjZWxzZQorc3RhdGljIGludAorcGNhcF9zZXRfZGF0YWxpbmtfYnBmKHBjYXBfdCAqcCBfVV8sIGludCBkbHQgX1VfKQoreworCXJldHVybiAoMCk7Cit9CisjZW5kaWYKIAogLyoKICAqIFBsYXRmb3JtLXNwZWNpZmljIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvcGNhcC1idC1saW51eC5jIGIvcGNhcC1idC1saW51eC5jCmluZGV4IDA3ZWQxYzcuLjI5NjlmZjggMTAwNjQ0Ci0tLSBhL3BjYXAtYnQtbGludXguYworKysgYi9wY2FwLWJ0LWxpbnV4LmMKQEAgLTU4LDcgKzU4LDcgQEAKIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gKi8KIHN0YXRpYyBpbnQgYnRfYWN0aXZhdGUocGNhcF90ICopOwogc3RhdGljIGludCBidF9yZWFkX2xpbnV4KHBjYXBfdCAqLCBpbnQgLCBwY2FwX2hhbmRsZXIgLCB1X2NoYXIgKik7Ci1zdGF0aWMgaW50IGJ0X2luamVjdF9saW51eChwY2FwX3QgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOworc3RhdGljIGludCBidF9pbmplY3RfbGludXgocGNhcF90ICosIGNvbnN0IHZvaWQgKiwgaW50KTsKIHN0YXRpYyBpbnQgYnRfc2V0ZGlyZWN0aW9uX2xpbnV4KHBjYXBfdCAqLCBwY2FwX2RpcmVjdGlvbl90KTsKIHN0YXRpYyBpbnQgYnRfc3RhdHNfbGludXgocGNhcF90ICosIHN0cnVjdCBwY2FwX3N0YXQgKik7CiAKQEAgLTc0LDEzICs3NCwxNCBAQAogewogCXN0cnVjdCBoY2lfZGV2X2xpc3RfcmVxICpkZXZfbGlzdDsKIAlzdHJ1Y3QgaGNpX2Rldl9yZXEgKmRldl9yZXE7Ci0JaW50IGksIHNvY2s7CisJaW50IHNvY2s7CisJdW5zaWduZWQgaTsKIAlpbnQgcmV0ID0gMDsKIAogCXNvY2sgID0gc29ja2V0KEFGX0JMVUVUT09USCwgU09DS19SQVcsIEJUUFJPVE9fSENJKTsKIAlpZiAoc29jayA8IDApCiAJewotCQkvKiBpZiBibHVldG9vdGggaXMgbm90IHN1cHBvcnRlZCB0aGlzIHRoaXMgaXMgbm90IGZhdGFsKi8KKwkJLyogaWYgYmx1ZXRvb3RoIGlzIG5vdCBzdXBwb3J0ZWQgdGhpcyBpcyBub3QgZmF0YWwqLwogCQlpZiAoZXJybm8gPT0gRUFGTk9TVVBQT1JUKQogCQkJcmV0dXJuIDA7CiAJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZXJyX3N0ciwgUENBUF9FUlJCVUZfU0laRSwKQEAgLTkxLDcgKzkyLDcgQEAKIAlkZXZfbGlzdCA9IG1hbGxvYyhIQ0lfTUFYX0RFViAqIHNpemVvZigqZGV2X3JlcSkgKyBzaXplb2YoKmRldl9saXN0KSk7CiAJaWYgKCFkZXZfbGlzdCkKIAl7Ci0JCXBjYXBfc25wcmludGYoZXJyX3N0ciwgUENBUF9FUlJCVUZfU0laRSwgIkNhbid0IGFsbG9jYXRlICV6dSBieXRlcyBmb3IgQmx1ZXRvb3RoIGRldmljZSBsaXN0IiwKKwkJc25wcmludGYoZXJyX3N0ciwgUENBUF9FUlJCVUZfU0laRSwgIkNhbid0IGFsbG9jYXRlICV6dSBieXRlcyBmb3IgQmx1ZXRvb3RoIGRldmljZSBsaXN0IiwKIAkJCUhDSV9NQVhfREVWICogc2l6ZW9mKCpkZXZfcmVxKSArIHNpemVvZigqZGV2X2xpc3QpKTsKIAkJcmV0ID0gLTE7CiAJCWdvdG8gZG9uZTsKQEAgLTEwOSwxMCArMTEwLDEwIEBACiAKIAlkZXZfcmVxID0gZGV2X2xpc3QtPmRldl9yZXE7CiAJZm9yIChpID0gMDsgaSA8IGRldl9saXN0LT5kZXZfbnVtOyBpKyssIGRldl9yZXErKykgewotCQljaGFyIGRldl9uYW1lWzIwXSwgZGV2X2Rlc2NyWzMwXTsKKwkJY2hhciBkZXZfbmFtZVsyMF0sIGRldl9kZXNjcls0MF07CiAKLQkJcGNhcF9zbnByaW50ZihkZXZfbmFtZSwgMjAsIEJUX0lGQUNFIiVkIiwgZGV2X3JlcS0+ZGV2X2lkKTsKLQkJcGNhcF9zbnByaW50ZihkZXZfZGVzY3IsIDMwLCAiQmx1ZXRvb3RoIGFkYXB0ZXIgbnVtYmVyICVkIiwgaSk7CisJCXNucHJpbnRmKGRldl9uYW1lLCBzaXplb2YoZGV2X25hbWUpLCBCVF9JRkFDRSIldSIsIGRldl9yZXEtPmRldl9pZCk7CisJCXNucHJpbnRmKGRldl9kZXNjciwgc2l6ZW9mKGRldl9kZXNjciksICJCbHVldG9vdGggYWRhcHRlciBudW1iZXIgJXUiLCBpKTsKIAogCQkvKgogCQkgKiBCbHVldG9vdGggaXMgYSB3aXJlbGVzcyB0ZWNobm9sb2d5LgpAQCAtMTcyLDcgKzE3Myw3IEBACiAJLyogT0ssIGl0J3MgcHJvYmFibHkgb3Vycy4gKi8KIAkqaXNfb3VycyA9IDE7CiAKLQlwID0gcGNhcF9jcmVhdGVfY29tbW9uKGVidWYsIHNpemVvZiAoc3RydWN0IHBjYXBfYnQpKTsKKwlwID0gUENBUF9DUkVBVEVfQ09NTU9OKGVidWYsIHN0cnVjdCBwY2FwX2J0KTsKIAlpZiAocCA9PSBOVUxMKQogCQlyZXR1cm4gKE5VTEwpOwogCkBAIC0xOTMsNyArMTk0LDcgQEAKIAkvKiBnZXQgYnQgaW50ZXJmYWNlIGlkICovCiAJaWYgKHNzY2FuZihoYW5kbGUtPm9wdC5kZXZpY2UsIEJUX0lGQUNFIiVkIiwgJmRldl9pZCkgIT0gMSkKIAl7Ci0JCXBjYXBfc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCXNucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJIkNhbid0IGdldCBCbHVldG9vdGggZGV2aWNlIGluZGV4IGZyb20gJXMiLAogCQkJIGhhbmRsZS0+b3B0LmRldmljZSk7CiAJCXJldHVybiBQQ0FQX0VSUk9SOwpAQCAtMzQ1LDcgKzM0Niw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlwa3RoLmNhcGxlbiA9IHJldDsKKwlwa3RoLmNhcGxlbiA9IChicGZfdV9pbnQzMilyZXQ7CiAKIAkvKiBnZXQgZGlyZWN0aW9uIGFuZCB0aW1lc3RhbXAqLwogCWNtc2cgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOwpAQCAtMzYxLDE1ICszNjIsMjcgQEAKIAkJfQogCQljbXNnID0gQ01TR19OWFRIRFIoJm1zZywgY21zZyk7CiAJfQotCWlmICgoaW4gJiYgKGhhbmRsZS0+ZGlyZWN0aW9uID09IFBDQVBfRF9PVVQpKSB8fAotCQkJCSgoIWluKSAmJiAoaGFuZGxlLT5kaXJlY3Rpb24gPT0gUENBUF9EX0lOKSkpCi0JCXJldHVybiAwOworCXN3aXRjaCAoaGFuZGxlLT5kaXJlY3Rpb24pIHsKKworCWNhc2UgUENBUF9EX0lOOgorCQlpZiAoIWluKQorCQkJcmV0dXJuIDA7CisJCWJyZWFrOworCisJY2FzZSBQQ0FQX0RfT1VUOgorCQlpZiAoaW4pCisJCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiAKIAlidGhkci0+ZGlyZWN0aW9uID0gaHRvbmwoaW4gIT0gMCk7CiAJcGt0aC5jYXBsZW4rPXNpemVvZihwY2FwX2JsdWV0b290aF9oNF9oZWFkZXIpOwogCXBrdGgubGVuID0gcGt0aC5jYXBsZW47CiAJaWYgKGhhbmRsZS0+ZmNvZGUuYmZfaW5zbnMgPT0gTlVMTCB8fAotCSAgICBicGZfZmlsdGVyKGhhbmRsZS0+ZmNvZGUuYmZfaW5zbnMsIHBrdGQsIHBrdGgubGVuLCBwa3RoLmNhcGxlbikpIHsKKwkgICAgcGNhcF9maWx0ZXIoaGFuZGxlLT5mY29kZS5iZl9pbnNucywgcGt0ZCwgcGt0aC5sZW4sIHBrdGguY2FwbGVuKSkgewogCQljYWxsYmFjayh1c2VyLCAmcGt0aCwgcGt0ZCk7CiAJCXJldHVybiAxOwogCX0KQEAgLTM3NywxMCArMzkwLDEwIEBACiB9CiAKIHN0YXRpYyBpbnQKLWJ0X2luamVjdF9saW51eChwY2FwX3QgKmhhbmRsZSwgY29uc3Qgdm9pZCAqYnVmIF9VXywgc2l6ZV90IHNpemUgX1VfKQorYnRfaW5qZWN0X2xpbnV4KHBjYXBfdCAqaGFuZGxlLCBjb25zdCB2b2lkICpidWYgX1VfLCBpbnQgc2l6ZSBfVV8pCiB7Ci0JcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgImluamVjdCBub3Qgc3VwcG9ydGVkIG9uICIKLSAgICAJCSJibHVldG9vdGggZGV2aWNlcyIpOworCXNucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCSAgICAiUGFja2V0IGluamVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIEJsdWV0b290aCBkZXZpY2VzIik7CiAJcmV0dXJuICgtMSk7CiB9CiAKQEAgLTQxNyw2ICs0MzAsMTAgQEAKIHN0YXRpYyBpbnQKIGJ0X3NldGRpcmVjdGlvbl9saW51eChwY2FwX3QgKnAsIHBjYXBfZGlyZWN0aW9uX3QgZCkKIHsKKwkvKgorCSAqIEl0J3MgZ3VhcmFudGVlZCwgYXQgdGhpcyBwb2ludCwgdGhhdCBkIGlzIGEgdmFsaWQKKwkgKiBkaXJlY3Rpb24gdmFsdWUuCisJICovCiAJcC0+ZGlyZWN0aW9uID0gZDsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3BjYXAtYnQtbW9uaXRvci1saW51eC5jIGIvcGNhcC1idC1tb25pdG9yLWxpbnV4LmMKaW5kZXggYzIyMmMxMC4uYWQ0ZmMzNyAxMDA2NDQKLS0tIGEvcGNhcC1idC1tb25pdG9yLWxpbnV4LmMKKysrIGIvcGNhcC1idC1tb25pdG9yLWxpbnV4LmMKQEAgLTUwLDYgKzUwLDE0IEBACiAjZGVmaW5lIElOVEVSRkFDRV9OQU1FICJibHVldG9vdGgtbW9uaXRvciIKIAogLyoKKyAqIFByaXZhdGUgZGF0YS4KKyAqIEN1cnJlbnRseSBjb250YWlucyBub3RoaW5nLgorICovCitzdHJ1Y3QgcGNhcF9idF9tb25pdG9yIHsKKwlpbnQJZHVtbXk7Cit9OworCisvKgogICogRmllbGRzIGFuZCBhbGlnbm1lbnQgbXVzdCBtYXRjaCB0aGUgZGVjbGFyYXRpb24gaW4gdGhlIExpbnV4IGtlcm5lbCAzLjQrLgogICogU2VlIHN0cnVjdCBoY2lfbW9uX2hkciBpbiBpbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX21vbi5oLgogICovCkBAIC0xMjQsNyArMTMyLDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIHBrdGguY2FwbGVuID0gcmV0IC0gc2l6ZW9mKGhkcikgKyBzaXplb2YocGNhcF9ibHVldG9vdGhfbGludXhfbW9uaXRvcl9oZWFkZXIpOworICAgIHBrdGguY2FwbGVuID0gKGJwZl91X2ludDMyKShyZXQgLSBzaXplb2YoaGRyKSArIHNpemVvZihwY2FwX2JsdWV0b290aF9saW51eF9tb25pdG9yX2hlYWRlcikpOwogICAgIHBrdGgubGVuID0gcGt0aC5jYXBsZW47CiAKICAgICBmb3IgKGNtc2cgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbXNnICE9IE5VTEw7IGNtc2cgPSBDTVNHX05YVEhEUigmbXNnLCBjbXNnKSkgewpAQCAtMTM5LDcgKzE0Nyw3IEBACiAgICAgYnRoZHItPm9wY29kZSA9IGh0b25zKGhkci5vcGNvZGUpOwogCiAgICAgaWYgKGhhbmRsZS0+ZmNvZGUuYmZfaW5zbnMgPT0gTlVMTCB8fAotICAgICAgICBicGZfZmlsdGVyKGhhbmRsZS0+ZmNvZGUuYmZfaW5zbnMsIHBrdGQsIHBrdGgubGVuLCBwa3RoLmNhcGxlbikpIHsKKyAgICAgICAgcGNhcF9maWx0ZXIoaGFuZGxlLT5mY29kZS5iZl9pbnNucywgcGt0ZCwgcGt0aC5sZW4sIHBrdGguY2FwbGVuKSkgewogICAgICAgICBjYWxsYmFjayh1c2VyLCAmcGt0aCwgcGt0ZCk7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KQEAgLTE0NywyMCArMTU1LDE0IEBACiB9CiAKIHN0YXRpYyBpbnQKLWJ0X21vbml0b3JfaW5qZWN0KHBjYXBfdCAqaGFuZGxlLCBjb25zdCB2b2lkICpidWYgX1VfLCBzaXplX3Qgc2l6ZSBfVV8pCitidF9tb25pdG9yX2luamVjdChwY2FwX3QgKmhhbmRsZSwgY29uc3Qgdm9pZCAqYnVmIF9VXywgaW50IHNpemUgX1VfKQogewotICAgIHBjYXBfc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJpbmplY3Qgbm90IHN1cHBvcnRlZCB5ZXQiKTsKKyAgICBzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKyAgICAgICAgIlBhY2tldCBpbmplY3Rpb24gaXMgbm90IHN1cHBvcnRlZCB5ZXQgb24gQmx1ZXRvb3RoIG1vbml0b3IgZGV2aWNlcyIpOwogICAgIHJldHVybiAtMTsKIH0KIAogc3RhdGljIGludAotYnRfbW9uaXRvcl9zZXRkaXJlY3Rpb24ocGNhcF90ICpwLCBwY2FwX2RpcmVjdGlvbl90IGQpCi17Ci0gICAgcC0+ZGlyZWN0aW9uID0gZDsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAogYnRfbW9uaXRvcl9zdGF0cyhwY2FwX3QgKmhhbmRsZSBfVV8sIHN0cnVjdCBwY2FwX3N0YXQgKnN0YXRzKQogewogICAgIHN0YXRzLT5wc19yZWN2ID0gMDsKQEAgLTE5OSw3ICsyMDEsNyBAQAogICAgIGhhbmRsZS0+cmVhZF9vcCA9IGJ0X21vbml0b3JfcmVhZDsKICAgICBoYW5kbGUtPmluamVjdF9vcCA9IGJ0X21vbml0b3JfaW5qZWN0OwogICAgIGhhbmRsZS0+c2V0ZmlsdGVyX29wID0gaW5zdGFsbF9icGZfcHJvZ3JhbTsgLyogbm8ga2VybmVsIGZpbHRlcmluZyAqLwotICAgIGhhbmRsZS0+c2V0ZGlyZWN0aW9uX29wID0gYnRfbW9uaXRvcl9zZXRkaXJlY3Rpb247CisgICAgaGFuZGxlLT5zZXRkaXJlY3Rpb25fb3AgPSBOVUxMOyAvKiBOb3QgaW1wbGVtZW50ZWQgKi8KICAgICBoYW5kbGUtPnNldF9kYXRhbGlua19vcCA9IE5VTEw7IC8qIGNhbid0IGNoYW5nZSBkYXRhIGxpbmsgdHlwZSAqLwogICAgIGhhbmRsZS0+Z2V0bm9uYmxvY2tfb3AgPSBwY2FwX2dldG5vbmJsb2NrX2ZkOwogICAgIGhhbmRsZS0+c2V0bm9uYmxvY2tfb3AgPSBwY2FwX3NldG5vbmJsb2NrX2ZkOwpAQCAtMjYyLDcgKzI2NCw3IEBACiAgICAgfQogCiAgICAgKmlzX291cnMgPSAxOwotICAgIHAgPSBwY2FwX2NyZWF0ZV9jb21tb24oZWJ1ZiwgMCk7CisgICAgcCA9IFBDQVBfQ1JFQVRFX0NPTU1PTihlYnVmLCBzdHJ1Y3QgcGNhcF9idF9tb25pdG9yKTsKICAgICBpZiAocCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIApkaWZmIC0tZ2l0IGEvcGNhcC1jb21tb24uYyBiL3BjYXAtY29tbW9uLmMKaW5kZXggYjM3OWQ4Zi4uNTFkMDY2NiAxMDA2NDQKLS0tIGEvcGNhcC1jb21tb24uYworKysgYi9wY2FwLWNvbW1vbi5jCkBAIC0zMjYsNyArMzI2LDcgQEAKICAqIGlucHV0IHBhY2tldHMgc3VjaCBhcyBwb3J0IHNjYW5zLCBwYWNrZXRzIGZyb20gb2xkIGxvc3QgY29ubmVjdGlvbnMsCiAgKiBldGMuIHRvIGZvcmNlIHRoZSBjb25uZWN0aW9uIHRvIHN0YXkgdXApLgogICoKLSAqIFRoZSBmaXJzdCBieXRlIG9mIHRoZSBQUFAgaGVhZGVyICgweGZmMDMpIGlzIG1vZGlmaWVkIHRvIGFjY29tb2RhdGUKKyAqIFRoZSBmaXJzdCBieXRlIG9mIHRoZSBQUFAgaGVhZGVyICgweGZmMDMpIGlzIG1vZGlmaWVkIHRvIGFjY29tbW9kYXRlCiAgKiB0aGUgZGlyZWN0aW9uIC0gMHgwMCA9IElOLCAweDAxID0gT1VULgogICovCiAjZGVmaW5lIExJTktUWVBFX1BQUF9QUFBECTE2NgpAQCAtMzYxLDcgKzM2MSw3IEBACiAvKgogICogTGluayB0eXBlcyByZXF1ZXN0ZWQgYnkgR3JlZ29yIE1haWVyIDxncmVnb3JAZW5kYWNlLmNvbT4gb2YgRW5kYWNlCiAgKiBNZWFzdXJlbWVudCBTeXN0ZW1zLiAgVGhleSBhZGQgYW4gRVJGIGhlYWRlciAoc2VlCi0gKiBodHRwOi8vd3d3LmVuZGFjZS5jb20vc3VwcG9ydC9FbmRhY2VSZWNvcmRGb3JtYXQucGRmKSBpbiBmcm9udCBvZgorICogaHR0cHM6Ly93d3cuZW5kYWNlLmNvbS9zdXBwb3J0L0VuZGFjZVJlY29yZEZvcm1hdC5wZGYpIGluIGZyb250IG9mCiAgKiB0aGUgbGluay1sYXllciBoZWFkZXIuCiAgKi8KICNkZWZpbmUgTElOS1RZUEVfRVJGX0VUSAkxNzUJLyogRXRoZXJuZXQgKi8KQEAgLTQ5NSw3ICs0OTUsNyBAQAogCiAvKgogICogVmFyaW91cyBsaW5rLWxheWVyIHR5cGVzLCB3aXRoIGEgcHNldWRvLWhlYWRlciwgZm9yIFNJVEEKLSAqIChodHRwOi8vd3d3LnNpdGEuYWVyby8pOyByZXF1ZXN0ZWQgYnkgRnVsa28gSGV3IChmdWxrby5oZXdAZ21haWwuY29tKS4KKyAqIChodHRwczovL3d3dy5zaXRhLmFlcm8vKTsgcmVxdWVzdGVkIGJ5IEZ1bGtvIEhldyAoZnVsa28uaGV3QGdtYWlsLmNvbSkuCiAgKi8KICNkZWZpbmUgTElOS1RZUEVfU0lUQQkJMTk2CiAKQEAgLTUxNCwxMSArNTE0LDIwIEBACiAjZGVmaW5lIExJTktUWVBFX1JBSUYxCQkxOTgKIAogLyoKLSAqIElQTUIgcGFja2V0IGZvciBJUE1JLCBiZWdpbm5pbmcgd2l0aCB0aGUgSTJDIHNsYXZlIGFkZHJlc3MsIGZvbGxvd2VkCi0gKiBieSB0aGUgbmV0Rm4gYW5kIExVTiwgZXRjLi4gIFJlcXVlc3RlZCBieSBDaGFudGh5IFRvZXVuZwotICogPGNoYW50aHkudG9ldW5nQGNhLmtvbnRyb24uY29tPi4KKyAqIElQTUIgcGFja2V0IGZvciBJUE1JLCBiZWdpbm5pbmcgd2l0aCBhIDItYnl0ZSBoZWFkZXIsIGZvbGxvd2VkIGJ5CisgKiB0aGUgSTJDIHNsYXZlIGFkZHJlc3MsIGZvbGxvd2VkIGJ5IHRoZSBuZXRGbiBhbmQgTFVOLCBldGMuLgorICogUmVxdWVzdGVkIGJ5IENoYW50aHkgVG9ldW5nIDxjaGFudGh5LnRvZXVuZ0BjYS5rb250cm9uLmNvbT4uCisgKgorICogWFhYIC0gaXRzIERMVF8gdmFsdWUgdXNlZCB0byBiZSBjYWxsZWQgRExUX0lQTUIsIGJhY2sgd2hlbiB3ZSBnb3QgdGhlCisgKiBpbXByZXNzaW9uIGZyb20gdGhlIGVtYWlsIHRocmVhZCByZXF1ZXN0aW5nIGl0IHRoYXQgdGhlIHBhY2tldAorICogaGFkIG5vIGV4dHJhIDItYnl0ZSBoZWFkZXIuICBXZSd2ZSByZW5hbWVkIGl0OyBpZiBhbnlib2R5IHVzZWQKKyAqIERMVF9JUE1CIGFuZCBhc3N1bWVkIG5vIDItYnl0ZSBoZWFkZXIsIHRoaXMgd2lsbCBjYXVzZSB0aGUgY29tcGlsZQorICogdG8gZmFpbCwgYXQgd2hpY2ggcG9pbnQgd2UnbGwgaGF2ZSB0byBmaWd1cmUgb3V0IHdoYXQgdG8gZG8gYWJvdXQKKyAqIHRoZSB0d28gaGVhZGVyIHR5cGVzIHVzaW5nIHRoZSBzYW1lIERMVF8vTElOS1RZUEVfIHZhbHVlLiAgSWYgdGhhdAorICogZG9lc24ndCBoYXBwZW4sIHdlJ2xsIGFzc3VtZSBub2JvZHkgdXNlZCBpdCBhbmQgdGhhdCB0aGUgcmVkZWZpbml0aW9uCisgKiBpcyBzYWZlLgogICovCi0jZGVmaW5lIExJTktUWVBFX0lQTUIJCTE5OQorI2RlZmluZSBMSU5LVFlQRV9JUE1CX0tPTlRST04JMTk5CiAKIC8qCiAgKiBKdW5pcGVyLXByaXZhdGUgZGF0YSBsaW5rIHR5cGUsIGFzIHBlciByZXF1ZXN0IGZyb20KQEAgLTU1MCwxNCArNTU5LDMzIEBACiAjZGVmaW5lIExJTktUWVBFX0xBUEQJCTIwMwogCiAvKgotICogVmFyaWFudHMgb2YgdmFyaW91cyBsaW5rLWxheWVyIGhlYWRlcnMsIHdpdGggYSBvbmUtYnl0ZSBkaXJlY3Rpb24KLSAqIHBzZXVkby1oZWFkZXIgcHJlcGVuZGVkIC0gemVybyBtZWFucyAicmVjZWl2ZWQgYnkgdGhpcyBob3N0IiwKLSAqIG5vbi16ZXJvIChhbnkgbm9uLXplcm8gdmFsdWUpIG1lYW5zICJzZW50IGJ5IHRoaXMgaG9zdCIgLSBhcyBwZXIKLSAqIFdpbGwgQmFya2VyIDx3LmJhcmtlckB6ZW4uY28udWs+LgorICogUFBQLCB3aXRoIGEgb25lLWJ5dGUgZGlyZWN0aW9uIHBzZXVkby1oZWFkZXIgcHJlcGVuZGVkIC0gemVybyBtZWFucworICogInJlY2VpdmVkIGJ5IHRoaXMgaG9zdCIsIG5vbi16ZXJvIChhbnkgbm9uLXplcm8gdmFsdWUpIG1lYW5zICJzZW50IGJ5CisgKiB0aGlzIGhvc3QiIC0gYXMgcGVyIFdpbGwgQmFya2VyIDx3LmJhcmtlckB6ZW4uY28udWs+LgogICovCi0jZGVmaW5lIExJTktUWVBFX1BQUF9XSVRIX0RJUgkyMDQJLyogUFBQICovCisjZGVmaW5lIExJTktUWVBFX1BQUF9XSVRIX0RJUgkyMDQJLyogRG9uJ3QgY29uZnVzZSB3aXRoIExJTktUWVBFX1BQUF9QUFBEICovCisKKy8qCisgKiBDaXNjbyBIRExDLCB3aXRoIGEgb25lLWJ5dGUgZGlyZWN0aW9uIHBzZXVkby1oZWFkZXIgcHJlcGVuZGVkIC0gemVybworICogbWVhbnMgInJlY2VpdmVkIGJ5IHRoaXMgaG9zdCIsIG5vbi16ZXJvIChhbnkgbm9uLXplcm8gdmFsdWUpIG1lYW5zCisgKiAic2VudCBieSB0aGlzIGhvc3QiIC0gYXMgcGVyIFdpbGwgQmFya2VyIDx3LmJhcmtlckB6ZW4uY28udWs+LgorICovCiAjZGVmaW5lIExJTktUWVBFX0NfSERMQ19XSVRIX0RJUiAyMDUJLyogQ2lzY28gSERMQyAqLworCisvKgorICogRnJhbWUgUmVsYXksIHdpdGggYSBvbmUtYnl0ZSBkaXJlY3Rpb24gcHNldWRvLWhlYWRlciBwcmVwZW5kZWQgLSB6ZXJvCisgKiBtZWFucyAicmVjZWl2ZWQgYnkgdGhpcyBob3N0IiAoRENFIC0+IERURSksIG5vbi16ZXJvIChhbnkgbm9uLXplcm8KKyAqIHZhbHVlKSBtZWFucyAic2VudCBieSB0aGlzIGhvc3QiIChEVEUgLT4gRENFKSAtIGFzIHBlciBXaWxsIEJhcmtlcgorICogPHcuYmFya2VyQHplbi5jby51az4uCisgKi8KICNkZWZpbmUgTElOS1RZUEVfRlJFTEFZX1dJVEhfRElSIDIwNgkvKiBGcmFtZSBSZWxheSAqLworCisvKgorICogTEFQQiwgd2l0aCBhIG9uZS1ieXRlIGRpcmVjdGlvbiBwc2V1ZG8taGVhZGVyIHByZXBlbmRlZCAtIHplcm8gbWVhbnMKKyAqICJyZWNlaXZlZCBieSB0aGlzIGhvc3QiIChEQ0UgLT4gRFRFKSwgbm9uLXplcm8gKGFueSBub24temVybyB2YWx1ZSkKKyAqIG1lYW5zICJzZW50IGJ5IHRoaXMgaG9zdCIgKERURSAtPiBEQ0UpLSBhcyBwZXIgV2lsbCBCYXJrZXIKKyAqIDx3LmJhcmtlckB6ZW4uY28udWs+LgorICovCiAjZGVmaW5lIExJTktUWVBFX0xBUEJfV0lUSF9ESVIJMjA3CS8qIExBUEIgKi8KIAogLyoKQEAgLTU3OSw3ICs2MDcsNyBAQAogCiAvKgogICogTWVkaWEgT3JpZW50ZWQgU3lzdGVtcyBUcmFuc3BvcnQgKE1PU1QpIGJ1cyBmb3IgbXVsdGltZWRpYQotICogdHJhbnNwb3J0IC0gaHR0cDovL3d3dy5tb3N0Y29vcGVyYXRpb24uY29tLyAtIGFzIHJlcXVlc3RlZAorICogdHJhbnNwb3J0IC0gaHR0cHM6Ly93d3cubW9zdGNvb3BlcmF0aW9uLmNvbS8gLSBhcyByZXF1ZXN0ZWQKICAqIGJ5IEhhbm5lcyBLYWVsYmVyIDxoYW5uZXMua2FlbGJlckB4MmUuZGU+LgogICovCiAjZGVmaW5lIExJTktUWVBFX01PU1QJCTIxMQpAQCAtNzY1LDE2ICs3OTMsMTYgQEAKIC8qCiAgKiBSYXcgRC1CdXM6CiAgKgotICoJaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9kYnVzCisgKglodHRwczovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9kYnVzCiAgKgogICogbWVzc2FnZXM6CiAgKgotICoJaHR0cDovL2RidXMuZnJlZWRlc2t0b3Aub3JnL2RvYy9kYnVzLXNwZWNpZmljYXRpb24uaHRtbCNtZXNzYWdlLXByb3RvY29sLW1lc3NhZ2VzCisgKglodHRwczovL2RidXMuZnJlZWRlc2t0b3Aub3JnL2RvYy9kYnVzLXNwZWNpZmljYXRpb24uaHRtbCNtZXNzYWdlLXByb3RvY29sLW1lc3NhZ2VzCiAgKgogICogc3RhcnRpbmcgd2l0aCB0aGUgZW5kaWFubmVzcyBmbGFnLCBmb2xsb3dlZCBieSB0aGUgbWVzc2FnZSB0eXBlLCBldGMuLAogICogYnV0IHdpdGhvdXQgdGhlIGF1dGhlbnRpY2F0aW9uIGhhbmRzaGFrZSBiZWZvcmUgdGhlIG1lc3NhZ2Ugc2VxdWVuY2U6CiAgKgotICoJaHR0cDovL2RidXMuZnJlZWRlc2t0b3Aub3JnL2RvYy9kYnVzLXNwZWNpZmljYXRpb24uaHRtbCNhdXRoLXByb3RvY29sCisgKglodHRwczovL2RidXMuZnJlZWRlc2t0b3Aub3JnL2RvYy9kYnVzLXNwZWNpZmljYXRpb24uaHRtbCNhdXRoLXByb3RvY29sCiAgKgogICogUmVxdWVzdGVkIGJ5IE1hcnRpbiBWaWRuZXIgPG1hcnRpbkB2aWRuZXIubmV0Pi4KICAqLwpAQCAtNzkyLDcgKzgyMCw3IEBACiAgKiBEVkItQ0kgKERWQiBDb21tb24gSW50ZXJmYWNlIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gYSBQQyBDYXJkCiAgKiBtb2R1bGUgYW5kIGEgRFZCIHJlY2VpdmVyKS4gIFNlZQogICoKLSAqCWh0dHA6Ly93d3cua2Fpc2VyLmN4L3BjYXAtZHZiY2kuaHRtbAorICoJaHR0cHM6Ly93d3cua2Fpc2VyLmN4L3BjYXAtZHZiY2kuaHRtbAogICoKICAqIGZvciB0aGUgc3BlY2lmaWNhdGlvbi4KICAqCkBAIC05MTYsNyArOTQ0LDcgQEAKICAqCiAgKiBSZXF1ZXN0ZWQgYnkgQ2hyaXMgQm9udGplIDxjaHJpc19ib250amVAc2VsaW5jLmNvbT4uCiAgKi8KLSNkZWZpbmUgRExUX1JUQUNfU0VSSUFMCQkyNTAKKyNkZWZpbmUgTElOS1RZUEVfUlRBQ19TRVJJQUwJCTI1MAogCiAvKgogICogQmx1ZXRvb3RoIExvdyBFbmVyZ3kgYWlyIGludGVyZmFjZSBsaW5rLWxheWVyIHBhY2tldHMuCkBAIC0xMDUwLDkgKzEwNzgsOSBAQAogCiAvKgogICogcGVyOiBTdGVmYW5oYSBhdCBnbWFpbC5jb20gZm9yCi0gKiAgIGh0dHA6Ly9saXN0cy5zYW5kZWxtYW4uY2EvcGlwZXJtYWlsL3RjcGR1bXAtd29ya2Vycy8yMDE3LU1heS8wMDA3NzIuaHRtbAorICogICBodHRwczovL2xpc3RzLnNhbmRlbG1hbi5jYS9waXBlcm1haWwvdGNwZHVtcC13b3JrZXJzLzIwMTctTWF5LzAwMDc3Mi5odG1sCiAgKiBhbmQ6IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LmdpdC90cmVlL2luY2x1ZGUvdWFwaS9saW51eC92c29ja21vbi5oCi0gKiBmb3I6IGh0dHA6Ly9xZW11LXByb2plY3Qub3JnL0ZlYXR1cmVzL1ZpcnRpb1Zzb2NrCisgKiBmb3I6IGh0dHBzOi8vcWVtdS1wcm9qZWN0Lm9yZy9GZWF0dXJlcy9WaXJ0aW9Wc29jawogICovCiAjZGVmaW5lIExJTktUWVBFX1ZTT0NLICAgICAgICAgIDI3MQogCkBAIC0xMDY0LDcgKzEwOTIsNyBAQAogLyoKICAqIEV4Y2VudGlzIERPQ1NJUyAzLjEgUkYgc25pZmZlciAoWFJBLTMxKQogICogICBwZXI6IGJydW5vLnZlcnN0dXlmdCBhdCBleGNlbnRpcy5jb20KLSAqICAgICAgICBodHRwOi8vd3d3LnhyYTMxLmNvbS94cmEtaGVhZGVyCisgKiAgICAgICAgaHR0cHM6Ly93d3cueHJhMzEuY29tL3hyYS1oZWFkZXIKICAqLwogI2RlZmluZSBMSU5LVFlQRV9ET0NTSVMzMV9YUkEzMQkyNzMKIApAQCAtMTA3NiwxMiArMTEwNCw5NCBAQAogCiAvKgogICogRGlzcGxheVBvcnQgQVVYIGNoYW5uZWwgbW9uaXRvcmluZyBkYXRhIGFzIHNwZWNpZmllZCBieSBWRVNBCi0gKiBEaXNwbGF5UG9ydChEUCkgU3RhbmRhcmQgcHJlY2VlZGVkIGJ5IGEgcHNldWRvLWhlYWRlci4KKyAqIERpc3BsYXlQb3J0KERQKSBTdGFuZGFyZCBwcmVjZWRlZCBieSBhIHBzZXVkby1oZWFkZXIuCiAgKiAgICBwZXIgZGlyay5laWJhY2ggYXQgZ2RzeXMuY2MKICAqLwogI2RlZmluZSBMSU5LVFlQRV9ESVNQTEFZUE9SVF9BVVgJMjc1CiAKLSNkZWZpbmUgTElOS1RZUEVfTUFUQ0hJTkdfTUFYCTI3NQkJLyogaGlnaGVzdCB2YWx1ZSBpbiB0aGUgIm1hdGNoaW5nIiByYW5nZSAqLworLyoKKyAqIExpbnV4IGNvb2tlZCBzb2NrZXRzIHYyLgorICovCisjZGVmaW5lIExJTktUWVBFX0xJTlVYX1NMTDIJMjc2CisKKy8qCisgKiBTZXJjb3MgTW9uaXRvciwgcGVyIE1hbnVlbCBKYWNvYiA8bWFudWVsLmphY29iIGF0IHN0ZWluYmVpcy1zdGcuZGU+CisgKi8KKyNkZWZpbmUgTElOS1RZUEVfU0VSQ09TX01PTklUT1IgMjc3CisKKy8qCisgKiBPcGVuVml6c2xhIGh0dHA6Ly9vcGVudml6c2xhLm9yZyBpcyBvcGVuIHNvdXJjZSBVU0IgYW5hbHl6ZXIgaGFyZHdhcmUuCisgKiBJdCBjb25zaXN0cyBvZiBGUEdBIHdpdGggYXR0YWNoZWQgVVNCIHBoeSBhbmQgRlRESSBjaGlwIGZvciBzdHJlYW1pbmcKKyAqIHRoZSBkYXRhIHRvIHRoZSBob3N0IFBDLgorICoKKyAqIEN1cnJlbnQgT3BlblZpenNsYSBkYXRhIGVuY2Fwc3VsYXRpb24gZm9ybWF0IGlzIGRlc2NyaWJlZCBoZXJlOgorICogaHR0cHM6Ly9naXRodWIuY29tL21hdHdleS9saWJvcGVudml6c2xhL3dpa2kvT3BlblZpenNsYS1wcm90b2NvbC1kZXNjcmlwdGlvbgorICoKKyAqLworI2RlZmluZSBMSU5LVFlQRV9PUEVOVklaU0xBICAgICAyNzgKKworLyoKKyAqIFRoZSBFbGVrdHJvYml0IEhpZ2ggU3BlZWQgQ2FwdHVyZSBhbmQgUmVwbGF5IChFQkhTQ1IpIHByb3RvY29sIGlzIHByb2R1Y2VkCisgKiBieSBhIFBDSWUgQ2FyZCBmb3IgaW50ZXJmYWNpbmcgaGlnaCBzcGVlZCBhdXRvbW90aXZlIGludGVyZmFjZXMuCisgKgorICogVGhlIHNwZWNpZmljYXRpb24gZm9yIHRoaXMgZnJhbWUgZm9ybWF0IGNhbiBiZSBmb3VuZCBhdDoKKyAqICAgaHR0cHM6Ly93d3cuZWxla3Ryb2JpdC5jb20vZWJoc2NyCisgKgorICogZm9yIEd1ZW50ZXIuRWJlcm1hbm4gYXQgZWxla3Ryb2JpdC5jb20KKyAqCisgKi8KKyNkZWZpbmUgTElOS1RZUEVfRUJIU0NSCSAgICAgICAgMjc5CisKKy8qCisgKiBUaGUgaHR0cHM6Ly9mZC5pbyB2cHAgZ3JhcGggZGlzcGF0Y2ggdHJhY2VyIHByb2R1Y2VzIHBjYXAgdHJhY2UgZmlsZXMKKyAqIGluIHRoZSBmb3JtYXQgZG9jdW1lbnRlZCBoZXJlOgorICogaHR0cHM6Ly9mZGlvLXZwcC5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvZ2V0dGluZ3N0YXJ0ZWQvZGV2ZWxvcGVycy92bmV0Lmh0bWwjZ3JhcGgtZGlzcGF0Y2hlci1wY2FwLXRyYWNpbmcKKyAqLworI2RlZmluZSBMSU5LVFlQRV9WUFBfRElTUEFUQ0gJMjgwCisKKy8qCisgKiBCcm9hZGNvbSBFdGhlcm5ldCBzd2l0Y2hlcyAoUk9CTyBzd2l0Y2gpIDQgYnl0ZXMgcHJvcHJpZXRhcnkgdGFnZ2luZyBmb3JtYXQuCisgKi8KKyNkZWZpbmUgTElOS1RZUEVfRFNBX1RBR19CUkNNCTI4MQorI2RlZmluZSBMSU5LVFlQRV9EU0FfVEFHX0JSQ01fUFJFUEVORAkyODIKKworLyoKKyAqIElFRUUgODAyLjE1LjQgd2l0aCBwc2V1ZG8taGVhZGVyIGFuZCBvcHRpb25hbCBtZXRhLWRhdGEgVExWcywgUEhZIHBheWxvYWQKKyAqIGV4YWN0bHkgYXMgaXQgYXBwZWFycyBpbiB0aGUgc3BlYyAobm8gcGFkZGluZywgbm8gbm90aGluZyksIGFuZCBGQ1MgaWYKKyAqIHNwZWNpZmllZCBieSBGQ1MgVHlwZSBUTFY7ICByZXF1ZXN0ZWQgYnkgSmFtZXMgS28gPGpja0BleGVnaW4uY29tPi4KKyAqIFNwZWNpZmljYXRpb24gYXQgaHR0cHM6Ly9naXRodWIuY29tL2prY2tvL2llZWU4MDIuMTUuNC10YXAKKyAqLworI2RlZmluZSBMSU5LVFlQRV9JRUVFODAyXzE1XzRfVEFQICAgICAgIDI4MworCisvKgorICogTWFydmVsbCAoRXRoZXJ0eXBlKSBEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlIHByb3ByaWV0YXJ5IHRhZ2dpbmcgZm9ybWF0LgorICovCisjZGVmaW5lIExJTktUWVBFX0RTQV9UQUdfRFNBCTI4NAorI2RlZmluZSBMSU5LVFlQRV9EU0FfVEFHX0VEU0EJMjg1CisKKy8qCisgKiBQYXlsb2FkIG9mIGxhd2Z1bCBpbnRlcmNlcHQgcGFja2V0cyB1c2luZyB0aGUgRUxFRSBwcm90b2NvbDsKKyAqIGh0dHBzOi8vc29ja2V0LmhyL2RyYWZ0LWRmcmFudXNpYy1vcHNhd2ctZWxlZS0wMC54bWwKKyAqIGh0dHBzOi8veG1sMnJmYy50b29scy5pZXRmLm9yZy9jZ2ktYmluL3htbDJyZmMuY2dpP3VybD1odHRwczovL3NvY2tldC5oci9kcmFmdC1kZnJhbnVzaWMtb3BzYXdnLWVsZWUtMDAueG1sJm1vZGVBc0Zvcm1hdD1odG1sL2FzY2lpCisgKi8KKyNkZWZpbmUgTElOS1RZUEVfRUxFRQkJMjg2CisKKy8qCisgKiBTZXJpYWwgZnJhbWVzIHRyYW5zbWl0dGVkIGJldHdlZW4gYSBob3N0IGFuZCBhIFotV2F2ZSBjaGlwLgorICovCisjZGVmaW5lIExJTktUWVBFX1pfV0FWRV9TRVJJQUwJMjg3CisKKy8qCisgKiBVU0IgMi4wLCAxLjEsIGFuZCAxLjAgcGFja2V0cyBhcyB0cmFuc21pdHRlZCBvdmVyIHRoZSBjYWJsZS4KKyAqLworI2RlZmluZSBMSU5LVFlQRV9VU0JfMl8wCTI4OAorCisvKgorICogQVRTQyBMaW5rLUxheWVyIFByb3RvY29sIChBLzMzMCkgcGFja2V0cy4KKyAqLworI2RlZmluZSBMSU5LVFlQRV9BVFNDX0FMUAkyODkKKworI2RlZmluZSBMSU5LVFlQRV9NQVRDSElOR19NQVgJMjg5CQkvKiBoaWdoZXN0IHZhbHVlIGluIHRoZSAibWF0Y2hpbmciIHJhbmdlICovCiAKIC8qCiAgKiBUaGUgRExUXyBhbmQgTElOS1RZUEVfIHZhbHVlcyBpbiB0aGUgIm1hdGNoaW5nIiByYW5nZSBzaG91bGQgYmUgdGhlCkBAIC0xMTEwLDcgKzEyMjAsNyBAQAogCXsgRExUX0FSQ05FVCwJCUxJTktUWVBFX0FSQ05FVF9CU0QgfSwKIAl7IERMVF9TTElQLAkJTElOS1RZUEVfU0xJUCB9LAogCXsgRExUX1BQUCwJCUxJTktUWVBFX1BQUCB9LAotCXsgRExUX0ZEREksCSAJTElOS1RZUEVfRkRESSB9LAorCXsgRExUX0ZEREksCQlMSU5LVFlQRV9GRERJIH0sCiAJeyBETFRfU1lNQU5URUNfRklSRVdBTEwsIExJTktUWVBFX1NZTUFOVEVDX0ZJUkVXQUxMIH0sCiAKIAkvKgpAQCAtMTIxNCwxMSArMTMyNCwyMCBAQAogCQlyZXR1cm4gKERMVF9QS1RBUCk7CiAKIAkvKgotCSAqIEZvciBhbGwgb3RoZXIgdmFsdWVzIGluIHRoZSBtYXRjaGluZyByYW5nZSwgdGhlIExJTktUWVBFCi0JICogdmFsdWUgaXMgdGhlIHNhbWUgYXMgdGhlIERMVCB2YWx1ZS4KKwkgKiBGb3IgYWxsIG90aGVyIHZhbHVlcyBpbiB0aGUgbWF0Y2hpbmcgcmFuZ2UsIGV4Y2VwdCBmb3IKKwkgKiBMSU5LVFlQRV9BVE1fQ0xJUCwgdGhlIExJTktUWVBFIHZhbHVlIGlzIHRoZSBzYW1lIGFzCisJICogdGhlIERMVCB2YWx1ZS4KKwkgKgorCSAqIExJTktUWVBFX0FUTV9DTElQIGlzIGEgc3BlY2lhbCBjYXNlLiAgRExUX0FUTV9DTElQIGlzCisJICogbm90IG9uIGFsbCBwbGF0Zm9ybXMsIGJ1dCwgc28gZmFyLCB0aGVyZSBkb24ndCBhcHBlYXIKKwkgKiB0byBiZSBhbnkgcGxhdGZvcm1zIHRoYXQgZGVmaW5lIGl0IGFzIGFueXRoaW5nIG90aGVyCisJICogdGhhbiAxOTsgd2UgZGVmaW5lIExJTktUWVBFX0FUTV9DTElQIGFzIHNvbWV0aGluZworCSAqIG90aGVyIHRoYW4gMTksIGp1c3QgaW4gY2FzZS4gIFRoYXQgdmFsdWUgaXMgaW4gdGhlCisJICogbWF0Y2hpbmcgcmFuZ2UsIHNvIHdlIGhhdmUgdG8gY2hlY2sgZm9yIGl0LgogCSAqLwogCWlmIChsaW5rdHlwZSA+PSBMSU5LVFlQRV9NQVRDSElOR19NSU4gJiYKLQkgICAgbGlua3R5cGUgPD0gTElOS1RZUEVfTUFUQ0hJTkdfTUFYKQorCSAgICBsaW5rdHlwZSA8PSBMSU5LVFlQRV9NQVRDSElOR19NQVggJiYKKwkgICAgbGlua3R5cGUgIT0gTElOS1RZUEVfQVRNX0NMSVApCiAJCXJldHVybiAobGlua3R5cGUpOwogCiAJLyoKQEAgLTEyMzEsNyArMTM1MCw3IEBACiAKIAkvKgogCSAqIElmIHdlIGRvbid0IGhhdmUgYW4gZW50cnkgZm9yIHRoaXMgTElOS1RZUEUsIHJldHVybgotCSAqIHRoZSBsaW5rIHR5cGUgdmFsdWU7IGl0IG1heSBiZSBhIERMVCBmcm9tIGFuIG9sZGVyCisJICogdGhlIGxpbmsgdHlwZSB2YWx1ZTsgaXQgbWF5IGJlIGEgRExUIGZyb20gYW4gbmV3ZXIKIAkgKiB2ZXJzaW9uIG9mIGxpYnBjYXAuCiAJICovCiAJcmV0dXJuIGxpbmt0eXBlOwpAQCAtMTI0MCwxOCArMTM1OSwzNyBAQAogLyoKICAqIFJldHVybiB0aGUgbWF4aW11bSBzbmFwc2hvdCBsZW5ndGggZm9yIGEgZ2l2ZW4gRExUXyB2YWx1ZS4KICAqCi0gKiBGb3IgbW9zdCBsaW5rLWxheWVyIHR5cGVzLCB3ZSB1c2UgTUFYSU1VTV9TTkFQTEVOLCBidXQgZm9yIERMVF9EQlVTLAotICogdGhlIG1heGltdW0gaXMgMTM0MjE3NzI4LCBhcyBwZXIKKyAqIEZvciBtb3N0IGxpbmstbGF5ZXIgdHlwZXMsIHdlIHVzZSBNQVhJTVVNX1NOQVBMRU4uCisgKgorICogRm9yIERMVF9EQlVTLCB0aGUgbWF4aW11bSBpcyAxMjhNaUIsIGFzIHBlcgogICoKICAqICAgIGh0dHBzOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmcvZG9jL2RidXMtc3BlY2lmaWNhdGlvbi5odG1sI21lc3NhZ2UtcHJvdG9jb2wtbWVzc2FnZXMKKyAqCisgKiBGb3IgRExUX0VCSFNDUiwgdGhlIG1heGltdW0gaXMgOE1pQiwgYXMgcGVyCisgKgorICogICAgaHR0cHM6Ly93d3cuZWxla3Ryb2JpdC5jb20vZWJoc2NyCisgKgorICogRm9yIERMVF9VU0JQQ0FQLCB0aGUgbWF4aW11bSBpcyAxTWlCLCBhcyBwZXIKKyAqCisgKiAgICBodHRwczovL2J1Z3Mud2lyZXNoYXJrLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTU5ODUKICAqLwogdV9pbnQKIG1heF9zbmFwbGVuX2Zvcl9kbHQoaW50IGRsdCkKIHsKLQlpZiAoZGx0ID09IERMVF9EQlVTKQotCQlyZXR1cm4gMTM0MjE3NzI4OwotCWVsc2UKKwlzd2l0Y2ggKGRsdCkgeworCisJY2FzZSBETFRfREJVUzoKKwkJcmV0dXJuIDEyOCoxMDI0KjEwMjQ7CisKKwljYXNlIERMVF9FQkhTQ1I6CisJCXJldHVybiA4KjEwMjQqMTAyNDsKKworCWNhc2UgRExUX1VTQlBDQVA6CisJCXJldHVybiAxMDI0KjEwMjQ7CisKKwlkZWZhdWx0OgogCQlyZXR1cm4gTUFYSU1VTV9TTkFQTEVOOworCX0KIH0KIAogLyoKQEAgLTEyNzgsNyArMTQxNiw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlwcm90b2NvbCA9IEVYVFJBQ1RfMTZCSVRTKCZzaGRyLT5zbGxfcHJvdG9jb2wpOworCXByb3RvY29sID0gRVhUUkFDVF9CRV9VXzIoJnNoZHItPnNsbF9wcm90b2NvbCk7CiAJaWYgKHByb3RvY29sICE9IExJTlVYX1NMTF9QX0NBTiAmJiBwcm90b2NvbCAhPSBMSU5VWF9TTExfUF9DQU5GRCkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9wY2FwLWNvbmZpZy4xIGIvcGNhcC1jb25maWcuMQppbmRleCAwMzg4ZDBmLi5mZThkNzk5IDEwMDY0NAotLS0gYS9wY2FwLWNvbmZpZy4xCisrKyBiL3BjYXAtY29uZmlnLjEKQEAgLTY5LDQgKzY5LDQgQEAKIGZsYWcgY2F1c2VzIGl0IHRvIHdyaXRlIGZsYWdzIGFwcHJvcHJpYXRlIGZvciBjb21waWxpbmcgd2l0aCBhCiBzdGF0aWNhbGx5LWxpbmtlZCB2ZXJzaW9uIG9mIGxpYnBjYXAuCiAuU0ggIlNFRSBBTFNPIgotcGNhcCgzUENBUCkKKy5CUiBwY2FwICgzUENBUCkKZGlmZiAtLWdpdCBhL3BjYXAtZGFnLmMgYi9wY2FwLWRhZy5jCmluZGV4IDZiN2M3OTEuLmIyMDdkZDggMTAwNjQ0Ci0tLSBhL3BjYXAtZGFnLmMKKysrIGIvcGNhcC1kYWcuYwpAQCAtMSwxNCArMSw2IEBACiAvKgogICogcGNhcC1kYWcuYzogUGFja2V0IGNhcHR1cmUgaW50ZXJmYWNlIGZvciBFbmRhY2UgREFHIGNhcmRzLgogICoKLSAqIFRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgY29kZSBhdHRlbXB0cyB0byBtaW1pYyB0aGF0IG9mIHBjYXAtbGludXggYXMgbXVjaAotICogYXMgcG9zc2libGUuICBUaGlzIGNvZGUgaXMgY29tcGlsZWQgaW4gc2V2ZXJhbCBkaWZmZXJlbnQgd2F5cyBkZXBlbmRpbmcgb24KLSAqIHdoZXRoZXIgREFHX09OTFkgYW5kIEhBVkVfREFHX0FQSSBhcmUgZGVmaW5lZC4gIElmIEhBVkVfREFHX0FQSSBpcyBub3QKLSAqIGRlZmluZWQgaXQgc2hvdWxkIG5vdCBnZXQgY29tcGlsZWQgaW4sIG90aGVyd2lzZSBpZiBEQUdfT05MWSBpcyBkZWZpbmVkIHRoZW4KLSAqIHRoZSAnZGFnXycgZnVuY3Rpb24gY2FsbHMgYXJlIHJlbmFtZWQgdG8gJ3BjYXBfJyBlcXVpdmFsZW50cy4gIElmIERBR19PTkxZCi0gKiBpcyBub3QgZGVmaW5lZCB0aGVuIG5vdGhpbmcgaXMgYWx0ZXJlZCAtIHRoZSBkYWdfIGZ1bmN0aW9ucyB3aWxsIGJlCi0gKiBjYWxsZWQgYXMgcmVxdWlyZWQgZnJvbSB0aGVpciBwY2FwLWxpbnV4L2JwZiBlcXVpdmFsZW50cy4KLSAqCiAgKiBBdXRob3JzOiBSaWNoYXJkIExpdHRpbiwgU2VhbiBJcnZpbmUgKHtyaWNoYXJkLHNlYW59QHJlZWx0d28uY29tKQogICogTW9kaWZpY2F0aW9uczogSmVzcGVyIFBldGVyc29uCiAgKiAgICAgICAgICAgICAgICBLb3J5biBHcmFudApAQCAtMjcsNyArMTksNiBAQAogCiAjaW5jbHVkZSAicGNhcC1pbnQuaCIKIAotI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgpAQCAtMjE2LDcgKzIwNyw2IEBACiAjZGVmaW5lIGRhZ19zaXplX3QgdWludDMyX3QKICNlbmRpZgogCi1zdGF0aWMgaW50IGRhZ19zZXRmaWx0ZXIocGNhcF90ICpwLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKmZwKTsKIHN0YXRpYyBpbnQgZGFnX3N0YXRzKHBjYXBfdCAqcCwgc3RydWN0IHBjYXBfc3RhdCAqcHMpOwogc3RhdGljIGludCBkYWdfc2V0X2RhdGFsaW5rKHBjYXBfdCAqcCwgaW50IGRsdCk7CiBzdGF0aWMgaW50IGRhZ19nZXRfZGF0YWxpbmsocGNhcF90ICpwKTsKQEAgLTI1OCwxMiArMjQ4LDE4IEBACiAKIAlpZihwZC0+ZGFnX3JlZiAhPSBOVUxMKSB7CiAJCWRhZ19jb25maWdfZGlzcG9zZShwZC0+ZGFnX3JlZik7CisJCS8qCisJCSAqIE5vdGU6IHdlIGRvbid0IG5lZWQgdG8gY2FsbCBjbG9zZShwLT5mZCkgb3IKKwkJICogZGFnX2Nsb3NlKHAtPmZkKSwgYXMgZGFnX2NvbmZpZ19kaXNwb3NlKHBkLT5kYWdfcmVmKQorCQkgKiBkb2VzIHRoaXMuCisJCSAqCisJCSAqIFNldCBwLT5mZCB0byAtMSB0byBtYWtlIHN1cmUgdGhhdCdzIG5vdCBkb25lLgorCQkgKi8KIAkJcC0+ZmQgPSAtMTsKIAkJcGQtPmRhZ19yZWYgPSBOVUxMOwogCX0KIAlkZWxldGVfcGNhcF9kYWcocCk7CiAJcGNhcF9jbGVhbnVwX2xpdmVfY29tbW9uKHApOwotCS8qIE5vdGU6IGRvbid0IG5lZWQgdG8gY2FsbCBjbG9zZShwLT5mZCkgb3IgZGFnX2Nsb3NlKHAtPmZkKSBhcyBkYWdfY29uZmlnX2Rpc3Bvc2UocGQtPmRhZ19yZWYpIGRvZXMgdGhpcy4gKi8KIH0KIAogc3RhdGljIHZvaWQKQEAgLTMzNyw3ICszMzMsNyBAQAogLyoKICAqICBSZWFkIGF0IG1vc3QgbWF4X3BhY2tldHMgZnJvbSB0aGUgY2FwdHVyZSBzdHJlYW0gYW5kIGNhbGwgdGhlIGNhbGxiYWNrCiAgKiAgZm9yIGVhY2ggb2YgdGhlbS4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhY2tldHMgaGFuZGxlZCwgLTEgaWYgYW4KLSAqICBlcnJvciBvY2N1cmVkLCBvciAtMiBpZiB3ZSB3ZXJlIHRvbGQgdG8gYnJlYWsgb3V0IG9mIHRoZSBsb29wLgorICogIGVycm9yIG9jY3VycmVkLCBvciAtMiBpZiB3ZSB3ZXJlIHRvbGQgdG8gYnJlYWsgb3V0IG9mIHRoZSBsb29wLgogICovCiBzdGF0aWMgaW50CiBkYWdfcmVhZChwY2FwX3QgKnAsIGludCBjbnQsIHBjYXBfaGFuZGxlciBjYWxsYmFjaywgdV9jaGFyICp1c2VyKQpAQCAtNDIzLDcgKzQxOSw4IEBACiAJCXJsZW4gPSBudG9ocyhoZWFkZXItPnJsZW4pOwogCQlpZiAocmxlbiA8IGRhZ19yZWNvcmRfc2l6ZSkKIAkJewotCQkJc3RybmNweShwLT5lcnJidWYsICJkYWdfcmVhZDogcmVjb3JkIHRvbyBzbWFsbCIsIFBDQVBfRVJSQlVGX1NJWkUpOworCQkJcGNhcF9zdHJsY3B5KHAtPmVycmJ1ZiwgImRhZ19yZWFkOiByZWNvcmQgdG9vIHNtYWxsIiwKKwkJCSAgICBQQ0FQX0VSUkJVRl9TSVpFKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCQlwZC0+ZGFnX21lbV9ib3R0b20gKz0gcmxlbjsKQEAgLTY2Niw3ICs2NjMsNyBAQAogCQkJY2FwbGVuID0gcC0+c25hcHNob3Q7CiAKIAkJLyogUnVuIHRoZSBwYWNrZXQgZmlsdGVyIGlmIHRoZXJlIGlzIG9uZS4gKi8KLQkJaWYgKChwLT5mY29kZS5iZl9pbnNucyA9PSBOVUxMKSB8fCBicGZfZmlsdGVyKHAtPmZjb2RlLmJmX2luc25zLCBkcCwgcGFja2V0X2xlbiwgY2FwbGVuKSkgeworCQlpZiAoKHAtPmZjb2RlLmJmX2luc25zID09IE5VTEwpIHx8IHBjYXBfZmlsdGVyKHAtPmZjb2RlLmJmX2luc25zLCBkcCwgcGFja2V0X2xlbiwgY2FwbGVuKSkgewogCiAJCQkvKiBjb252ZXJ0IGJldHdlZW4gdGltZXN0YW1wIGZvcm1hdHMgKi8KIAkJCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgbG9uZyB0czsKQEAgLTcyMCw5ICs3MTcsOSBAQAogfQogCiBzdGF0aWMgaW50Ci1kYWdfaW5qZWN0KHBjYXBfdCAqcCwgY29uc3Qgdm9pZCAqYnVmIF9VXywgc2l6ZV90IHNpemUgX1VfKQorZGFnX2luamVjdChwY2FwX3QgKnAsIGNvbnN0IHZvaWQgKmJ1ZiBfVV8sIGludCBzaXplIF9VXykKIHsKLQlzdHJsY3B5KHAtPmVycmJ1ZiwgIlNlbmRpbmcgcGFja2V0cyBpc24ndCBzdXBwb3J0ZWQgb24gREFHIGNhcmRzIiwKKwlwY2FwX3N0cmxjcHkocC0+ZXJyYnVmLCAiU2VuZGluZyBwYWNrZXRzIGlzbid0IHN1cHBvcnRlZCBvbiBEQUcgY2FyZHMiLAogCSAgICBQQ0FQX0VSUkJVRl9TSVpFKTsKIAlyZXR1cm4gKC0xKTsKIH0KQEAgLTc0NiwxOCArNzQzLDIwIEBACiAJZGFnaW5mX3QqIGRhZ2luZjsKIAljaGFyICogbmV3RGV2ID0gTlVMTDsKIAljaGFyICogZGV2aWNlID0gcC0+b3B0LmRldmljZTsKKwlpbnQgcmV0OwogCWRhZ19zaXplX3QgbWluZGF0YTsKIAlzdHJ1Y3QgdGltZXZhbCBtYXh3YWl0OwogCXN0cnVjdCB0aW1ldmFsIHBvbGw7CiAKIAlpZiAoZGV2aWNlID09IE5VTEwpIHsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJkZXZpY2UgaXMgTlVMTCIpOwotCQlyZXR1cm4gLTE7CisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgImRldmljZSBpcyBOVUxMIik7CisJCXJldHVybiBQQ0FQX0VSUk9SOwogCX0KIAogCS8qIEluaXRpYWxpemUgc29tZSBjb21wb25lbnRzIG9mIHRoZSBwY2FwIHN0cnVjdHVyZS4gKi8KIAluZXdEZXYgPSAoY2hhciAqKW1hbGxvYyhzdHJsZW4oZGV2aWNlKSArIDE2KTsKIAlpZiAobmV3RGV2ID09IE5VTEwpIHsKKwkJcmV0ID0gUENBUF9FUlJPUjsKIAkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICBlcnJubywgIkNhbid0IGFsbG9jYXRlIHN0cmluZyBmb3IgZGV2aWNlIG5hbWUiKTsKIAkJZ290byBmYWlsOwpAQCAtNzY1LDYgKzc2NCwxMyBAQAogCiAJLyogUGFyc2UgaW5wdXQgbmFtZSB0byBnZXQgZGFnIGRldmljZSBhbmQgc3RyZWFtIG51bWJlciBpZiBwcm92aWRlZCAqLwogCWlmIChkYWdfcGFyc2VfbmFtZShkZXZpY2UsIG5ld0Rldiwgc3RybGVuKGRldmljZSkgKyAxNiwgJnBkLT5kYWdfc3RyZWFtKSA8IDApIHsKKwkJLyoKKwkJICogWFhYIC0gaXQnZCBiZSBuaWNlIGlmIHRoaXMgaW5kaWNhdGVkIHdoYXQgd2FzIHdyb25nCisJCSAqIHdpdGggdGhlIG5hbWUuICBEb2VzIHRoaXMgcmVsaWFibHkgc2V0IGVycm5vPworCQkgKiBTaG91bGQgdGhpcyByZXR1cm4gUENBUF9FUlJPUl9OT19TVUNIX0RFVklDRSBpbiBzb21lCisJCSAqIGNhc2VzPworCQkgKi8KKwkJcmV0ID0gUENBUF9FUlJPUjsKIAkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICBlcnJubywgImRhZ19wYXJzZV9uYW1lIik7CiAJCWdvdG8gZmFpbDsKQEAgLTc3MiwyNSArNzc4LDQwIEBACiAJZGV2aWNlID0gbmV3RGV2OwogCiAJaWYgKHBkLT5kYWdfc3RyZWFtJTIpIHsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJkYWdfcGFyc2VfbmFtZTogdHggKGV2ZW4gbnVtYmVyZWQpIHN0cmVhbXMgbm90IHN1cHBvcnRlZCBmb3IgY2FwdHVyZSIpOworCQlyZXQgPSBQQ0FQX0VSUk9SOworCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJkYWdfcGFyc2VfbmFtZTogdHggKGV2ZW4gbnVtYmVyZWQpIHN0cmVhbXMgbm90IHN1cHBvcnRlZCBmb3IgY2FwdHVyZSIpOwogCQlnb3RvIGZhaWw7CiAJfQogCiAJLyogc2V0dXAgZGV2aWNlIHBhcmFtZXRlcnMgKi8KIAlpZigocGQtPmRhZ19yZWYgPSBkYWdfY29uZmlnX2luaXQoKGNoYXIgKilkZXZpY2UpKSA9PSBOVUxMKSB7CisJCS8qCisJCSAqIFhYWCAtIGRvZXMgdGhpcyByZWxpYWJseSBzZXQgZXJybm8/CisJCSAqLworCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJcmV0ID0gUENBUF9FUlJPUl9OT19TVUNIX0RFVklDRTsKKwkJZWxzZSBpZiAoZXJybm8gPT0gRVBFUk0gfHwgZXJybm8gPT0gRUFDQ0VTKQorCQkJcmV0ID0gUENBUF9FUlJPUl9QRVJNX0RFTklFRDsKKwkJZWxzZQorCQkJcmV0ID0gUENBUF9FUlJPUjsKIAkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICBlcnJubywgImRhZ19jb25maWdfaW5pdCAlcyIsIGRldmljZSk7CiAJCWdvdG8gZmFpbDsKIAl9CiAKIAlpZigocC0+ZmQgPSBkYWdfY29uZmlnX2dldF9jYXJkX2ZkKHBkLT5kYWdfcmVmKSkgPCAwKSB7CisJCS8qCisJCSAqIFhYWCAtIGRvZXMgdGhpcyByZWxpYWJseSBzZXQgZXJybm8/CisJCSAqLworCQlyZXQgPSBQQ0FQX0VSUk9SOwogCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgIGVycm5vLCAiZGFnX2NvbmZpZ19nZXRfY2FyZF9mZCAlcyIsIGRldmljZSk7Ci0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsY2xvc2U7CiAJfQogCiAJLyogT3BlbiByZXF1ZXN0ZWQgc3RyZWFtLiBDYW4gZmFpbCBpZiBhbHJlYWR5IGxvY2tlZCBvciBvbiBlcnJvciAqLwogCWlmIChkYWdfYXR0YWNoX3N0cmVhbTY0KHAtPmZkLCBwZC0+ZGFnX3N0cmVhbSwgMCwgMCkgPCAwKSB7CisJCXJldCA9IFBDQVBfRVJST1I7CiAJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8ocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkgICAgZXJybm8sICJkYWdfYXR0YWNoX3N0cmVhbSIpOwogCQlnb3RvIGZhaWxjbG9zZTsKQEAgLTgwOSw2ICs4MzAsNyBAQAogCSAqLwogCWlmIChkYWdfZ2V0X3N0cmVhbV9wb2xsNjQocC0+ZmQsIHBkLT5kYWdfc3RyZWFtLAogCQkJCSZtaW5kYXRhLCAmbWF4d2FpdCwgJnBvbGwpIDwgMCkgeworCQlyZXQgPSBQQ0FQX0VSUk9SOwogCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgIGVycm5vLCAiZGFnX2dldF9zdHJlYW1fcG9sbCIpOwogCQlnb3RvIGZhaWxkZXRhY2g7CkBAIC04NTMsNiArODc1LDcgQEAKIAogCWlmIChkYWdfc2V0X3N0cmVhbV9wb2xsNjQocC0+ZmQsIHBkLT5kYWdfc3RyZWFtLAogCQkJCW1pbmRhdGEsICZtYXh3YWl0LCAmcG9sbCkgPCAwKSB7CisJCXJldCA9IFBDQVBfRVJST1I7CiAJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8ocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkgICAgZXJybm8sICJkYWdfc2V0X3N0cmVhbV9wb2xsIik7CiAJCWdvdG8gZmFpbGRldGFjaDsKQEAgLTg3NSw2ICs4OTgsNyBAQAogI2VuZGlmCiAKIAlpZihkYWdfc3RhcnRfc3RyZWFtKHAtPmZkLCBwZC0+ZGFnX3N0cmVhbSkgPCAwKSB7CisJCXJldCA9IFBDQVBfRVJST1I7CiAJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8ocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkgICAgZXJybm8sICJkYWdfc3RhcnRfc3RyZWFtICVzIiwgZGV2aWNlKTsKIAkJZ290byBmYWlsZGV0YWNoOwpAQCAtOTEwLDcgKzkzNCw4IEBACiAJCQlpZiAoKG4gPSBhdG9pKHMpKSA9PSAwIHx8IG4gPT0gMTYgfHwgbiA9PSAzMikgewogCQkJCXBkLT5kYWdfZmNzX2JpdHMgPSBuOwogCQkJfSBlbHNlIHsKLQkJCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQlyZXQgPSBQQ0FQX0VSUk9SOworCQkJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCQkJInBjYXBfYWN0aXZhdGUgJXM6IGJhZCBFUkZfRkNTX0JJVFMgdmFsdWUgKCVkKSBpbiBlbnZpcm9ubWVudCIsIGRldmljZSwgbik7CiAJCQkJZ290byBmYWlsc3RvcDsKIAkJCX0KQEAgLTkzMiwxMiArOTU3LDE1IEBACiAJcGQtPmRhZ190aW1lb3V0CT0gcC0+b3B0LnRpbWVvdXQ7CiAKIAlwLT5saW5rdHlwZSA9IC0xOwotCWlmIChkYWdfZ2V0X2RhdGFsaW5rKHApIDwgMCkKKwlpZiAoZGFnX2dldF9kYXRhbGluayhwKSA8IDApIHsKKwkJcmV0ID0gUENBUF9FUlJPUjsKIAkJZ290byBmYWlsc3RvcDsKKwl9CiAKIAlwLT5idWZzaXplID0gMDsKIAogCWlmIChuZXdfcGNhcF9kYWcocCkgPCAwKSB7CisJCXJldCA9IFBDQVBfRVJST1I7CiAJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8ocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkgICAgZXJybm8sICJuZXdfcGNhcF9kYWcgJXMiLCBkZXZpY2UpOwogCQlnb3RvIGZhaWxzdG9wOwpAQCAtOTU0LDcgKzk4Miw3IEBACiAKIAlwLT5yZWFkX29wID0gZGFnX3JlYWQ7CiAJcC0+aW5qZWN0X29wID0gZGFnX2luamVjdDsKLQlwLT5zZXRmaWx0ZXJfb3AgPSBkYWdfc2V0ZmlsdGVyOworCXAtPnNldGZpbHRlcl9vcCA9IGluc3RhbGxfYnBmX3Byb2dyYW07CiAJcC0+c2V0ZGlyZWN0aW9uX29wID0gTlVMTDsgLyogTm90IGltcGxlbWVudGVkLiovCiAJcC0+c2V0X2RhdGFsaW5rX29wID0gZGFnX3NldF9kYXRhbGluazsKIAlwLT5nZXRub25ibG9ja19vcCA9IHBjYXBfZ2V0bm9uYmxvY2tfZmQ7CkBAIC05NzcsNiArMTAwNSwxNCBAQAogCiBmYWlsY2xvc2U6CiAJZGFnX2NvbmZpZ19kaXNwb3NlKHBkLT5kYWdfcmVmKTsKKwkvKgorCSAqIE5vdGU6IHdlIGRvbid0IG5lZWQgdG8gY2FsbCBjbG9zZShwLT5mZCkgb3IgZGFnX2Nsb3NlKHAtPmZkKSwKKwkgKiBhcyBkYWdfY29uZmlnX2Rpc3Bvc2UocGQtPmRhZ19yZWYpIGRvZXMgdGhpcy4KKwkgKgorCSAqIFNldCBwLT5mZCB0byAtMSB0byBtYWtlIHN1cmUgdGhhdCdzIG5vdCBkb25lLgorCSAqLworCXAtPmZkID0gLTE7CisJcGQtPmRhZ19yZWYgPSBOVUxMOwogCWRlbGV0ZV9wY2FwX2RhZyhwKTsKIAogZmFpbDoKQEAgLTk4NSw3ICsxMDIxLDcgQEAKIAkJZnJlZSgoY2hhciAqKW5ld0Rldik7CiAJfQogCi0JcmV0dXJuIFBDQVBfRVJST1I7CisJcmV0dXJuIHJldDsKIH0KIAogcGNhcF90ICpkYWdfY3JlYXRlKGNvbnN0IGNoYXIgKmRldmljZSwgY2hhciAqZWJ1ZiwgaW50ICppc19vdXJzKQpAQCAtMTAzNSw3ICsxMDcxLDcgQEAKIAkvKiBPSywgaXQncyBwcm9iYWJseSBvdXJzLiAqLwogCSppc19vdXJzID0gMTsKIAotCXAgPSBwY2FwX2NyZWF0ZV9jb21tb24oZWJ1Ziwgc2l6ZW9mIChzdHJ1Y3QgcGNhcF9kYWcpKTsKKwlwID0gUENBUF9DUkVBVEVfQ09NTU9OKGVidWYsIHN0cnVjdCBwY2FwX2RhZyk7CiAJaWYgKHAgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTEwNDgsNyArMTA4NCw2IEBACiAJICogWFhYIE91ciBuYXRpdmUgcHJlY2lzaW9uIGlzIDJeLTMycywgYnV0IGxpYnBjYXAgZG9lc24ndCBzdXBwb3J0CiAJICogcG93ZXIgb2YgdHdvIHByZWNpc2lvbnMgeWV0LiBXZSBjYW4gY29udmVydCB0byBlaXRoZXIgTUlDUk8gb3IgTkFOTy4KIAkgKi8KLQlwLT50c3RhbXBfcHJlY2lzaW9uX2NvdW50ID0gMjsKIAlwLT50c3RhbXBfcHJlY2lzaW9uX2xpc3QgPSBtYWxsb2MoMiAqIHNpemVvZih1X2ludCkpOwogCWlmIChwLT50c3RhbXBfcHJlY2lzaW9uX2xpc3QgPT0gTlVMTCkgewogCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsCkBAIC0xMDU4LDYgKzEwOTMsNyBAQAogCX0KIAlwLT50c3RhbXBfcHJlY2lzaW9uX2xpc3RbMF0gPSBQQ0FQX1RTVEFNUF9QUkVDSVNJT05fTUlDUk87CiAJcC0+dHN0YW1wX3ByZWNpc2lvbl9saXN0WzFdID0gUENBUF9UU1RBTVBfUFJFQ0lTSU9OX05BTk87CisJcC0+dHN0YW1wX3ByZWNpc2lvbl9jb3VudCA9IDI7CiAJcmV0dXJuIHA7CiB9CiAKQEAgLTEwNzgsMTAgKzExMTQsMTAgQEAKIAkJLyogTm90ZSB0aGlzIGNvdW50ZXIgaXMgY2xlYXJlZCBhdCBzdGFydCBvZiBjYXB0dXJlIGFuZCB3aWxsIHdyYXAgYXQgVUlOVF9NQVguCiAJCSAqIFRoZSBhcHBsaWNhdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgcG9sbGluZyBwc19kcm9wIGZyZXF1ZW50bHkgZW5vdWdoCiAJCSAqIHRvIGRldGVjdCBlYWNoIHdyYXAgYW5kIGludGVncmF0ZSB0b3RhbCBkcm9wIHdpdGggYSB3aWRlciBjb3VudGVyICovCi0JCWlmICgoZGFnX2Vycm9yID0gZGFnX2NvbmZpZ19nZXRfdWludDMyX2F0dHJpYnV0ZV9leChwZC0+ZGFnX3JlZiwgcGQtPmRyb3BfYXR0ciwgJnN0cmVhbV9kcm9wKSA9PSBrRGFnRXJyTm9uZSkpIHsKKwkJaWYgKChkYWdfZXJyb3IgPSBkYWdfY29uZmlnX2dldF91aW50MzJfYXR0cmlidXRlX2V4KHBkLT5kYWdfcmVmLCBwZC0+ZHJvcF9hdHRyLCAmc3RyZWFtX2Ryb3ApKSA9PSBrRGFnRXJyTm9uZSkgewogCQkJcGQtPnN0YXQucHNfZHJvcCA9IHN0cmVhbV9kcm9wOwogCQl9IGVsc2UgewotCQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJyZWFkaW5nIHN0cmVhbSBkcm9wIGF0dHJpYnV0ZTogJXMiLAorCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAicmVhZGluZyBzdHJlYW0gZHJvcCBhdHRyaWJ1dGU6ICVzIiwKIAkJCQkgZGFnX2NvbmZpZ19zdHJlcnJvcihkYWdfZXJyb3IpKTsKIAkJCXJldHVybiAtMTsKIAkJfQpAQCAtMTEwOSwxMCArMTE0NSwxMCBAQAogCiAJLyogVHJ5IGFsbCB0aGUgREFHcyAwLURBR19NQVhfQk9BUkRTICovCiAJZm9yIChjID0gMDsgYyA8IERBR19NQVhfQk9BUkRTOyBjKyspIHsKLQkJcGNhcF9zbnByaW50ZihuYW1lLCAxMiwgImRhZyVkIiwgYyk7CisJCXNucHJpbnRmKG5hbWUsIDEyLCAiZGFnJWQiLCBjKTsKIAkJaWYgKC0xID09IGRhZ19wYXJzZV9uYW1lKG5hbWUsIGRhZ25hbWUsIERBR05BTUVfQlVGU0laRSwgJmRhZ3N0cmVhbSkpCiAJCXsKLQkJCSh2b2lkKSBwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCSh2b2lkKSBzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgICAgImRhZzogZGV2aWNlIG5hbWUgJXMgY2FuJ3QgYmUgcGFyc2VkIiwgbmFtZSk7CiAJCQlyZXR1cm4gKC0xKTsKIAkJfQpAQCAtMTEzNywxMCArMTE3MywxMCBAQAogCQkJfQogCQkJcnhzdHJlYW1zID0gZGFnX3J4X2dldF9zdHJlYW1fY291bnQoZGFnZmQpOwogCQkJZm9yKHN0cmVhbT0wO3N0cmVhbTxEQUdfU1RSRUFNX01BWDtzdHJlYW0rPTIpIHsKLQkJCQlpZiAoMCA9PSBkYWdfYXR0YWNoX3N0cmVhbShkYWdmZCwgc3RyZWFtLCAwLCAwKSkgeworCQkJCWlmICgwID09IGRhZ19hdHRhY2hfc3RyZWFtNjQoZGFnZmQsIHN0cmVhbSwgMCwgMCkpIHsKIAkJCQkJZGFnX2RldGFjaF9zdHJlYW0oZGFnZmQsIHN0cmVhbSk7CiAKLQkJCQkJcGNhcF9zbnByaW50ZihuYW1lLCAgMTAsICJkYWclZDolZCIsIGMsIHN0cmVhbSk7CisJCQkJCXNucHJpbnRmKG5hbWUsICAxMCwgImRhZyVkOiVkIiwgYywgc3RyZWFtKTsKIAkJCQkJaWYgKGFkZF9kZXYoZGV2bGlzdHAsIG5hbWUsIDAsIGRlc2NyaXB0aW9uLCBlcnJidWYpID09IE5VTEwpIHsKIAkJCQkJCS8qCiAJCQkJCQkgKiBGYWlsdXJlLgpAQCAtMTE2MSwzMCArMTE5Nyw2IEBACiAJcmV0dXJuICgwKTsKIH0KIAotLyoKLSAqIEluc3RhbGxzIHRoZSBnaXZlbiBicGYgZmlsdGVyIHByb2dyYW0gaW4gdGhlIGdpdmVuIHBjYXAgc3RydWN0dXJlLiAgVGhlcmUgaXMKLSAqIG5vIGF0dGVtcHQgdG8gc3RvcmUgdGhlIGZpbHRlciBpbiBrZXJuZWwgbWVtb3J5IGFzIHRoYXQgaXMgbm90IHN1cHBvcnRlZAotICogd2l0aCBEQUcgY2FyZHMuCi0gKi8KLXN0YXRpYyBpbnQKLWRhZ19zZXRmaWx0ZXIocGNhcF90ICpwLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKmZwKQotewotCWlmICghcCkKLQkJcmV0dXJuIC0xOwotCWlmICghZnApIHsKLQkJc3RybmNweShwLT5lcnJidWYsICJzZXRmaWx0ZXI6IE5vIGZpbHRlciBzcGVjaWZpZWQiLAotCQkJc2l6ZW9mKHAtPmVycmJ1ZikpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogTWFrZSBvdXIgcHJpdmF0ZSBjb3B5IG9mIHRoZSBmaWx0ZXIgKi8KLQotCWlmIChpbnN0YWxsX2JwZl9wcm9ncmFtKHAsIGZwKSA8IDApCi0JCXJldHVybiAtMTsKLQotCXJldHVybiAoMCk7Ci19Ci0KIHN0YXRpYyBpbnQKIGRhZ19zZXRfZGF0YWxpbmsocGNhcF90ICpwLCBpbnQgZGx0KQogewpAQCAtMTQxNCw3ICsxNDI2LDcgQEAKIHBjYXBfdCAqCiBwY2FwX2NyZWF0ZV9pbnRlcmZhY2UoY29uc3QgY2hhciAqZGV2aWNlLCBjaGFyICplcnJidWYpCiB7Ci0JcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCSAgICAiVGhpcyB2ZXJzaW9uIG9mIGxpYnBjYXAgb25seSBzdXBwb3J0cyBEQUcgY2FyZHMiKTsKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL3BjYXAtZGJ1cy5jIGIvcGNhcC1kYnVzLmMKaW5kZXggMTI1Mjk3NS4uNTA2ZjE1MCAxMDA2NDQKLS0tIGEvcGNhcC1kYnVzLmMKKysrIGIvcGNhcC1kYnVzLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAl3aGlsZSAoIW1lc3NhZ2UpIHsKIAkJLyogWFhYIGhhbmRsZS0+b3B0LnRpbWVvdXQgPSB0aW1lb3V0X21zOyAqLwogCQlpZiAoIWRidXNfY29ubmVjdGlvbl9yZWFkX3dyaXRlKGhhbmRsZXAtPmNvbm4sIDEwMCkpIHsKLQkJCXBjYXBfc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJDb25uZWN0aW9uIGNsb3NlZCIpOworCQkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJDb25uZWN0aW9uIGNsb3NlZCIpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAKQEAgLTgxLDcgKzgxLDcgQEAKIAl9CiAKIAlpZiAoZGJ1c19tZXNzYWdlX2lzX3NpZ25hbChtZXNzYWdlLCBEQlVTX0lOVEVSRkFDRV9MT0NBTCwgIkRpc2Nvbm5lY3RlZCIpKSB7Ci0JCXBjYXBfc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJEaXNjb25uZWN0ZWQiKTsKKwkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJEaXNjb25uZWN0ZWQiKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtOTEsNyArOTEsNyBAQAogCiAJCWdldHRpbWVvZmRheSgmcGt0aC50cywgTlVMTCk7CiAJCWlmIChoYW5kbGUtPmZjb2RlLmJmX2luc25zID09IE5VTEwgfHwKLQkJICAgIGJwZl9maWx0ZXIoaGFuZGxlLT5mY29kZS5iZl9pbnNucywgKHVfY2hhciAqKXJhd19tc2csIHBrdGgubGVuLCBwa3RoLmNhcGxlbikpIHsKKwkJICAgIHBjYXBfZmlsdGVyKGhhbmRsZS0+ZmNvZGUuYmZfaW5zbnMsICh1X2NoYXIgKilyYXdfbXNnLCBwa3RoLmxlbiwgcGt0aC5jYXBsZW4pKSB7CiAJCQloYW5kbGVwLT5wYWNrZXRzX3JlYWQrKzsKIAkJCWNhbGxiYWNrKHVzZXIsICZwa3RoLCAodV9jaGFyICopcmF3X21zZyk7CiAJCQljb3VudCsrOwpAQCAtMTAzLDcgKzEwMyw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWRidXNfd3JpdGUocGNhcF90ICpoYW5kbGUsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCitkYnVzX3dyaXRlKHBjYXBfdCAqaGFuZGxlLCBjb25zdCB2b2lkICpidWYsIGludCBzaXplKQogewogCS8qIFhYWCwgbm90IHRlc3RlZCAqLwogCXN0cnVjdCBwY2FwX2RidXMgKmhhbmRsZXAgPSBoYW5kbGUtPnByaXY7CkBAIC0xMTIsNyArMTEyLDcgQEAKIAlEQnVzTWVzc2FnZSAqbXNnOwogCiAJaWYgKCEobXNnID0gZGJ1c19tZXNzYWdlX2RlbWFyc2hhbChidWYsIHNpemUsICZlcnJvcikpKSB7Ci0JCXBjYXBfc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJkYnVzX21lc3NhZ2VfZGVtYXJzaGFsKCkgZmFpbGVkOiAlcyIsIGVycm9yLm1lc3NhZ2UpOworCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgImRidXNfbWVzc2FnZV9kZW1hcnNoYWwoKSBmYWlsZWQ6ICVzIiwgZXJyb3IubWVzc2FnZSk7CiAJCWRidXNfZXJyb3JfZnJlZSgmZXJyb3IpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTU0LDcgKzE1NCw3IEBACiBzdGF0aWMgaW50CiBkYnVzX2dldG5vbmJsb2NrKHBjYXBfdCAqcCkKIHsKLQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJICAgICJOb24tYmxvY2tpbmcgbW9kZSBpc24ndCBzdXBwb3J0ZWQgZm9yIGNhcHR1cmluZyBvbiBELUJ1cyIpOwogCXJldHVybiAoLTEpOwogfQpAQCAtMTYyLDcgKzE2Miw3IEBACiBzdGF0aWMgaW50CiBkYnVzX3NldG5vbmJsb2NrKHBjYXBfdCAqcCwgaW50IG5vbmJsb2NrIF9VXykKIHsKLQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJICAgICJOb24tYmxvY2tpbmcgbW9kZSBpc24ndCBzdXBwb3J0ZWQgZm9yIGNhcHR1cmluZyBvbiBELUJ1cyIpOwogCXJldHVybiAoLTEpOwogfQpAQCAtMTg5LDE0ICsxODksMTQgQEAKIAogCWlmIChzdHJjbXAoZGV2LCAiZGJ1cy1zeXN0ZW0iKSA9PSAwKSB7CiAJCWlmICghKGhhbmRsZXAtPmNvbm4gPSBkYnVzX2J1c19nZXQoREJVU19CVVNfU1lTVEVNLCAmZXJyb3IpKSkgewotCQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIkZhaWxlZCB0byBnZXQgc3lzdGVtIGJ1czogJXMiLCBlcnJvci5tZXNzYWdlKTsKKwkJCXNucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiRmFpbGVkIHRvIGdldCBzeXN0ZW0gYnVzOiAlcyIsIGVycm9yLm1lc3NhZ2UpOwogCQkJZGJ1c19lcnJvcl9mcmVlKCZlcnJvcik7CiAJCQlyZXR1cm4gUENBUF9FUlJPUjsKIAkJfQogCiAJfSBlbHNlIGlmIChzdHJjbXAoZGV2LCAiZGJ1cy1zZXNzaW9uIikgPT0gMCkgewogCQlpZiAoIShoYW5kbGVwLT5jb25uID0gZGJ1c19idXNfZ2V0KERCVVNfQlVTX1NFU1NJT04sICZlcnJvcikpKSB7Ci0JCQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiRmFpbGVkIHRvIGdldCBzZXNzaW9uIGJ1czogJXMiLCBlcnJvci5tZXNzYWdlKTsKKwkJCXNucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiRmFpbGVkIHRvIGdldCBzZXNzaW9uIGJ1czogJXMiLCBlcnJvci5tZXNzYWdlKTsKIAkJCWRidXNfZXJyb3JfZnJlZSgmZXJyb3IpOwogCQkJcmV0dXJuIFBDQVBfRVJST1I7CiAJCX0KQEAgLTIwNSwxOSArMjA1LDE5IEBACiAJCWNvbnN0IGNoYXIgKmFkZHIgPSBkZXYgKyA3OwogCiAJCWlmICghKGhhbmRsZXAtPmNvbm4gPSBkYnVzX2Nvbm5lY3Rpb25fb3BlbihhZGRyLCAmZXJyb3IpKSkgewotCQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIkZhaWxlZCB0byBvcGVuIGNvbm5lY3Rpb24gdG86ICVzOiAlcyIsIGFkZHIsIGVycm9yLm1lc3NhZ2UpOworCQkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJGYWlsZWQgdG8gb3BlbiBjb25uZWN0aW9uIHRvOiAlczogJXMiLCBhZGRyLCBlcnJvci5tZXNzYWdlKTsKIAkJCWRidXNfZXJyb3JfZnJlZSgmZXJyb3IpOwogCQkJcmV0dXJuIFBDQVBfRVJST1I7CiAJCX0KIAogCQlpZiAoIWRidXNfYnVzX3JlZ2lzdGVyKGhhbmRsZXAtPmNvbm4sICZlcnJvcikpIHsKLQkJCXBjYXBfc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJGYWlsZWQgdG8gcmVnaXN0ZXIgYnVzICVzOiAlc1xuIiwgYWRkciwgZXJyb3IubWVzc2FnZSk7CisJCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIkZhaWxlZCB0byByZWdpc3RlciBidXMgJXM6ICVzXG4iLCBhZGRyLCBlcnJvci5tZXNzYWdlKTsKIAkJCWRidXNfZXJyb3JfZnJlZSgmZXJyb3IpOwogCQkJcmV0dXJuIFBDQVBfRVJST1I7CiAJCX0KIAogCX0gZWxzZSB7Ci0JCXBjYXBfc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJDYW4ndCBnZXQgYnVzIGFkZHJlc3MgZnJvbSAlcyIsIGhhbmRsZS0+b3B0LmRldmljZSk7CisJCXNucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiQ2FuJ3QgZ2V0IGJ1cyBhZGRyZXNzIGZyb20gJXMiLCBoYW5kbGUtPm9wdC5kZXZpY2UpOwogCQlyZXR1cm4gUENBUF9FUlJPUjsKIAl9CiAKQEAgLTI4OSw3ICsyODksNyBAQAogCQkJLyogdHJ5IHdpdGhvdXQgZWF2ZXNkcm9wICovCiAJCQlkYnVzX2J1c19hZGRfbWF0Y2goaGFuZGxlcC0+Y29ubiwgcnVsZXNbaV0gKyBzdHJsZW4oRUFWRVNEUk9QUElOR19SVUxFKSwgJmVycm9yKTsKIAkJCWlmIChkYnVzX2Vycm9yX2lzX3NldCgmZXJyb3IpKSB7Ci0JCQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIkZhaWxlZCB0byBhZGQgYnVzIG1hdGNoOiAlc1xuIiwgZXJyb3IubWVzc2FnZSk7CisJCQkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJGYWlsZWQgdG8gYWRkIGJ1cyBtYXRjaDogJXNcbiIsIGVycm9yLm1lc3NhZ2UpOwogCQkJCWRidXNfZXJyb3JfZnJlZSgmZXJyb3IpOwogCQkJCWRidXNfY2xlYW51cChoYW5kbGUpOwogCQkJCXJldHVybiBQQ0FQX0VSUk9SOwpAQCAtMzE0LDcgKzMxNCw3IEBACiAJfQogCiAJKmlzX291cnMgPSAxOwotCXAgPSBwY2FwX2NyZWF0ZV9jb21tb24oZWJ1Ziwgc2l6ZW9mIChzdHJ1Y3QgcGNhcF9kYnVzKSk7CisJcCA9IFBDQVBfQ1JFQVRFX0NPTU1PTihlYnVmLCBzdHJ1Y3QgcGNhcF9kYnVzKTsKIAlpZiAocCA9PSBOVUxMKQogCQlyZXR1cm4gKE5VTEwpOwogCmRpZmYgLS1naXQgYS9wY2FwLWRscGkuYyBiL3BjYXAtZGxwaS5jCmluZGV4IDQzMDA1MWUuLjIwOGE2M2IgMTAwNjQ0Ci0tLSBhL3BjYXAtZGxwaS5jCisrKyBiL3BjYXAtZGxwaS5jCkBAIC05Niw3ICs5Niw2IEBACiAjaW5jbHVkZSA8bmV0L2lmLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPGN0eXBlLmg+CiAjaWZkZWYgSEFWRV9IUFVYOQogI2luY2x1ZGUgPG5saXN0Lmg+CiAjZW5kaWYKQEAgLTEwOCwxMiArMTA3LDcgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzdHJvcHRzLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpZmRlZiBIQVZFX0xJTUlUU19ICiAjaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotI2RlZmluZSBJTlRfTUFYCQkyMTQ3NDgzNjQ3Ci0jZW5kaWYKIAogI2luY2x1ZGUgInBjYXAtaW50LmgiCiAjaW5jbHVkZSAiZGxwaXN1YnMuaCIKQEAgLTI1Miw3ICsyNDYsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1wY2FwX2luamVjdF9kbHBpKHBjYXBfdCAqcCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3BjYXBfaW5qZWN0X2RscGkocGNhcF90ICpwLCBjb25zdCB2b2lkICpidWYsIGludCBzaXplKQogewogI2lmZGVmIERMX0hQX1JBV0RMUwogCXN0cnVjdCBwY2FwX2RscGkgKnBkID0gcC0+cHJpdjsKQEAgLTI2OCw3ICsyNjIsNyBAQAogCX0KICNlbGlmIGRlZmluZWQoRExfSFBfUkFXRExTKQogCWlmIChwZC0+c2VuZF9mZCA8IDApIHsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICJzZW5kOiBPdXRwdXQgRkQgY291bGRuJ3QgYmUgb3BlbmVkIik7CiAJCXJldHVybiAoLTEpOwogCX0KQEAgLTMwNyw3ICszMDEsNyBAQAogCSAqIGl0IHNob3VsZCBjaGVjayAicC0+bGlua3R5cGUiIGFuZCByZWplY3QgdGhlIHNlbmQgcmVxdWVzdCBpZgogCSAqIGl0J3MgYW55dGhpbmcgb3RoZXIgdGhhbiBETFRfRU4xME1CLgogCSAqLwotCXN0cmxjcHkocC0+ZXJyYnVmLCAic2VuZDogTm90IHN1cHBvcnRlZCBvbiB0aGlzIHZlcnNpb24gb2YgdGhpcyBPUyIsCisJcGNhcF9zdHJsY3B5KHAtPmVycmJ1ZiwgInNlbmQ6IE5vdCBzdXBwb3J0ZWQgb24gdGhpcyB2ZXJzaW9uIG9mIHRoaXMgT1MiLAogCSAgICBQQ0FQX0VSUkJVRl9TSVpFKTsKIAlyZXQgPSAtMTsKICNlbmRpZiAvKiByYXcgbW9kZSAqLwpAQCAtMzYzLDkgKzM1Nyw5IEBACiAJKi8KIAljcCA9IHN0cnJjaHIobmFtZSwgJy8nKTsKIAlpZiAoY3AgPT0gTlVMTCkKLQkJc3RybGNweShkbmFtZSwgbmFtZSwgc2l6ZW9mKGRuYW1lKSk7CisJCXBjYXBfc3RybGNweShkbmFtZSwgbmFtZSwgc2l6ZW9mKGRuYW1lKSk7CiAJZWxzZQotCQlzdHJsY3B5KGRuYW1lLCBjcCArIDEsIHNpemVvZihkbmFtZSkpOworCQlwY2FwX3N0cmxjcHkoZG5hbWUsIGNwICsgMSwgc2l6ZW9mKGRuYW1lKSk7CiAKIAkvKgogCSAqIFNwbGl0IHRoZSBkZXZpY2UgbmFtZSBpbnRvIGEgZGV2aWNlIHR5cGUgbmFtZSBhbmQgYSB1bml0IG51bWJlcjsKQEAgLTQxNSw5ICs0MDksOSBAQAogCSAqIGRldmljZSBuYW1lLgogCSAqLwogCWlmICgqbmFtZSA9PSAnLycpCi0JCXN0cmxjcHkoZG5hbWUsIG5hbWUsIHNpemVvZihkbmFtZSkpOworCQlwY2FwX3N0cmxjcHkoZG5hbWUsIG5hbWUsIHNpemVvZihkbmFtZSkpOwogCWVsc2UKLQkJcGNhcF9zbnByaW50ZihkbmFtZSwgc2l6ZW9mKGRuYW1lKSwgIiVzLyVzIiwgUENBUF9ERVZfUFJFRklYLAorCQlzbnByaW50ZihkbmFtZSwgc2l6ZW9mKGRuYW1lKSwgIiVzLyVzIiwgUENBUF9ERVZfUFJFRklYLAogCQkgICAgbmFtZSk7CiAKIAkvKgpAQCAtNDMyLDcgKzQyNiw3IEBACiAJICogTWFrZSBhIGNvcHkgb2YgdGhlIGRldmljZSBwYXRobmFtZSwgYW5kIHRoZW4gcmVtb3ZlIHRoZSB1bml0CiAJICogbnVtYmVyIGZyb20gdGhlIGRldmljZSBwYXRobmFtZS4KIAkgKi8KLQlzdHJsY3B5KGRuYW1lMiwgZG5hbWUsIHNpemVvZihkbmFtZSkpOworCXBjYXBfc3RybGNweShkbmFtZTIsIGRuYW1lLCBzaXplb2YoZG5hbWUpKTsKIAkqY3AgPSAnXDAnOwogCiAJLyogVHJ5IGRldmljZSB3aXRob3V0IHVuaXQgbnVtYmVyICovCkBAIC00NzUsNyArNDY5LDcgQEAKIAkJCQkgKiBpbnRlcmZhY2UgaXMganVzdCBhIHN5bXB0b20gb2YgdGhhdAogCQkJCSAqIGluYWJpbGl0eS4KIAkJCQkgKi8KLQkJCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkJICAgICIlczogTm8gRExQSSBkZXZpY2UgZm91bmQiLCBuYW1lKTsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGVycm5vID09IEVQRVJNIHx8IGVycm5vID09IEVBQ0NFUykKQEAgLTYzOSw3ICs2MzMsNyBAQAogCSoqLwogCWlmIChkbGJpbmRyZXEocC0+ZmQsIDAsIHAtPmVycmJ1ZikgPCAwIHx8CiAJICAgIGRsYmluZGFjayhwLT5mZCwgKGNoYXIgKilidWYsIHAtPmVycmJ1ZiwgTlVMTCkgPCAwKSB7Ci0JICAgIAlzdGF0dXMgPSBQQ0FQX0VSUk9SOworCQlzdGF0dXMgPSBQQ0FQX0VSUk9SOwogCQlnb3RvIGJhZDsKIAl9CiAjZW5kaWYgLyogQUlYIHZzLiBIUC1VWCB2cy4gb3RoZXIgKi8KQEAgLTc2Nyw3ICs3NjEsNyBAQAogCSovCiAJaWYgKGRsaW5mb3JlcShwLT5mZCwgcC0+ZXJyYnVmKSA8IDAgfHwKIAkgICAgZGxpbmZvYWNrKHAtPmZkLCAoY2hhciAqKWJ1ZiwgcC0+ZXJyYnVmKSA8IDApIHsKLQkgICAgCXN0YXR1cyA9IFBDQVBfRVJST1I7CisJCXN0YXR1cyA9IFBDQVBfRVJST1I7CiAJCWdvdG8gYmFkOwogCX0KIApAQCAtODA1LDcgKzc5OSw3IEBACiAJZ2V0X3JlbGVhc2UocmVsZWFzZSwgc2l6ZW9mIChyZWxlYXNlKSwgJm9zbWFqb3IsICZvc21pbm9yLCAmb3NtaWNybyk7CiAJaWYgKG9zbWFqb3IgPT0gNSAmJiAob3NtaW5vciA8PSAyIHx8IChvc21pbm9yID09IDMgJiYgb3NtaWNybyA8IDIpKSAmJgogCSAgICBnZXRlbnYoIkJVRk1PRF9GSVhFRCIpID09IE5VTEwpIHsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJIldBUk5JTkc6IGJ1Zm1vZCBpcyBicm9rZW4gaW4gU3VuT1MgJXM7IGlnbm9yaW5nIHNuYXBsZW4uIiwKIAkJICAgIHJlbGVhc2UpOwogCQlzcyA9IDA7CkBAIC04ODAsNyArODc0LDcgQEAKIAkgKi8KIAljcCA9IGRldmljZSArIHN0cmxlbihkZXZpY2UpIC0gMTsKIAlpZiAoKmNwIDwgJzAnIHx8ICpjcCA+ICc5JykgewotCQlwY2FwX3NucHJpbnRmKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsICIlcyBtaXNzaW5nIHVuaXQgbnVtYmVyIiwKKwkJc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIiVzIG1pc3NpbmcgdW5pdCBudW1iZXIiLAogCQkgICAgZGV2aWNlKTsKIAkJcmV0dXJuIChOVUxMKTsKIAl9CkBAIC04OTIsMTYgKzg4NiwxNiBAQAogCWVycm5vID0gMDsKIAl1bml0ID0gc3RydG9sKGNwLCAmZW9zLCAxMCk7CiAJaWYgKCplb3MgIT0gJ1wwJykgewotCQlwY2FwX3NucHJpbnRmKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsICIlcyBiYWQgdW5pdCBudW1iZXIiLCBkZXZpY2UpOworCQlzbnByaW50ZihlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiJXMgYmFkIHVuaXQgbnVtYmVyIiwgZGV2aWNlKTsKIAkJcmV0dXJuIChOVUxMKTsKIAl9CiAJaWYgKGVycm5vID09IEVSQU5HRSB8fCB1bml0ID4gSU5UX01BWCkgewotCQlwY2FwX3NucHJpbnRmKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsICIlcyB1bml0IG51bWJlciB0b28gbGFyZ2UiLAorCQlzbnByaW50ZihlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiJXMgdW5pdCBudW1iZXIgdG9vIGxhcmdlIiwKIAkJICAgIGRldmljZSk7CiAJCXJldHVybiAoTlVMTCk7CiAJfQogCWlmICh1bml0IDwgMCkgewotCQlwY2FwX3NucHJpbnRmKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsICIlcyB1bml0IG51bWJlciBpcyBuZWdhdGl2ZSIsCisJCXNucHJpbnRmKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsICIlcyB1bml0IG51bWJlciBpcyBuZWdhdGl2ZSIsCiAJCSAgICBkZXZpY2UpOwogCQlyZXR1cm4gKE5VTEwpOwogCX0KQEAgLTk2OCw3ICs5NjIsNyBAQAogCQkqZWJ1ZiA9ICdcMCc7CiAJCWhwc2FwKys7CiAJCWlmIChocHNhcCA+IDEwMCkgewotCQkJc3RybGNweShlYnVmLAorCQkJcGNhcF9zdHJsY3B5KGVidWYsCiAJCQkgICAgIkFsbCBTQVBzIGZyb20gMjIgdGhyb3VnaCAxMDAgYXJlIGluIHVzZSIsCiAJCQkgICAgUENBUF9FUlJCVUZfU0laRSk7CiAJCQlyZXR1cm4gKC0xKTsKQEAgLTExMTUsNyArMTEwOSw3IEBACiAJCXJldHVybiAoLTEpOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgYnVmLm51bml0czsgaSsrKSB7Ci0JCXBjYXBfc25wcmludGYoYmFuYW1lLCBzaXplb2YgYmFuYW1lLCAiYmEldSIsIGkpOworCQlzbnByaW50ZihiYW5hbWUsIHNpemVvZiBiYW5hbWUsICJiYSV1IiwgaSk7CiAJCS8qCiAJCSAqIFhYWCAtIGlzIHRoZXJlIGEgbm90aW9uIG9mICJ1cCIgYW5kICJydW5uaW5nIj8KIAkJICogQW5kIGlzIHRoZXJlIGEgd2F5IHRvIGRldGVybWluZSB3aGV0aGVyIHRoZQpAQCAtMTIwMiw3ICsxMTk2LDcgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlwY2FwX3NucHJpbnRmKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQlzbnByaW50ZihlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJICAgICJyZWN2X2FjazogJXM6ICVzIiwgd2hhdCwKIAkJCSAgICBkbHN0cmVycm9yKGVycm1zZ2J1Ziwgc2l6ZW9mIChlcnJtc2didWYpLCBkbHAtPmVycm9yX2Fjay5kbF9lcnJubykpOwogCQkJaWYgKGRscC0+ZXJyb3JfYWNrLmRsX2Vycm5vID09IERMX0JBRFBQQSkKQEAgLTEyMTQsMTQgKzEyMDgsMTQgQEAKIAkJcmV0dXJuIChQQ0FQX0VSUk9SKTsKIAogCWRlZmF1bHQ6Ci0JCXBjYXBfc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICJyZWN2X2FjazogJXM6IFVuZXhwZWN0ZWQgcHJpbWl0aXZlIGFjayAlcyIsCiAJCSAgICB3aGF0LCBkbHByaW0oZGxwcmltYnVmLCBzaXplb2YgKGRscHJpbWJ1ZiksIGRscC0+ZGxfcHJpbWl0aXZlKSk7CiAJCXJldHVybiAoUENBUF9FUlJPUik7CiAJfQogCiAJaWYgKGN0bC5sZW4gPCBzaXplKSB7Ci0JCXBjYXBfc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICJyZWN2X2FjazogJXM6IEFjayB0b28gc21hbGwgKCVkIDwgJWQpIiwKIAkJICAgIHdoYXQsIGN0bC5sZW4sIHNpemUpOwogCQlyZXR1cm4gKFBDQVBfRVJST1IpOwpAQCAtMTMzMiw3ICsxMzI2LDcgQEAKIAkJcmV0dXJuICgiUGVuZGluZyBvdXRzdGFuZGluZyBjb25uZWN0IGluZGljYXRpb25zIik7CiAKIAlkZWZhdWx0OgotCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgZXJyYnVmc2l6ZSwgIkVycm9yICUwMngiLCBkbF9lcnJubyk7CisJCXNucHJpbnRmKGVycmJ1ZiwgZXJyYnVmc2l6ZSwgIkVycm9yICUwMngiLCBkbF9lcnJubyk7CiAJCXJldHVybiAoZXJyYnVmKTsKIAl9CiB9CkBAIC0xNDI0LDcgKzE0MTgsNyBAQAogCQlyZXR1cm4gKCJETF9SRVNFVF9DT04iKTsKIAogCWRlZmF1bHQ6Ci0JCXBjYXBfc25wcmludGYocHJpbWJ1ZiwgcHJpbWJ1ZnNpemUsICJ1bmtub3duIHByaW1pdGl2ZSAweCV4IiwKKwkJc25wcmludGYocHJpbWJ1ZiwgcHJpbWJ1ZnNpemUsICJ1bmtub3duIHByaW1pdGl2ZSAweCV4IiwKIAkJICAgIHByaW0pOwogCQlyZXR1cm4gKHByaW1idWYpOwogCX0KQEAgLTE1NDcsMTEgKzE1NDEsMTEgQEAKIAkqbWlub3JwID0gMDsKIAkqbWljcm9wID0gMDsKIAlpZiAoc3lzaW5mbyhTSV9SRUxFQVNFLCBidWYsIGJ1ZnNpemUpIDwgMCkgewotCQlzdHJsY3B5KGJ1ZiwgIj8iLCBidWZzaXplKTsKKwkJcGNhcF9zdHJsY3B5KGJ1ZiwgIj8iLCBidWZzaXplKTsKIAkJcmV0dXJuOwogCX0KIAljcCA9IGJ1ZjsKLQlpZiAoIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkKKwlpZiAoIVBDQVBfSVNESUdJVCgodW5zaWduZWQgY2hhcikqY3ApKQogCQlyZXR1cm47CiAJKm1ham9ycCA9IHN0cnRvbChjcCwgJmNwLCAxMCk7CiAJaWYgKCpjcCsrICE9ICcuJykKQEAgLTE2NTEsMjEgKzE2NDUsMjEgQEAKIAkJcmV0dXJuIChQQ0FQX0VSUk9SKTsKIAl9CiAJaWYgKGN0bC5sZW4gPT0gLTEpIHsKLQkJcGNhcF9zbnByaW50ZihlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkgICAgImdldF9kbHBpX3BwYTogaHBwcGEgZ2V0bXNnOiBjb250cm9sIGJ1ZmZlciBoYXMgbm8gZGF0YSIpOwogCQlyZXR1cm4gKFBDQVBfRVJST1IpOwogCX0KIAogCWRscCA9IChkbF9ocF9wcGFfYWNrX3QgKiljdGwuYnVmOwogCWlmIChkbHAtPmRsX3ByaW1pdGl2ZSAhPSBETF9IUF9QUEFfQUNLKSB7Ci0JCXBjYXBfc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICJnZXRfZGxwaV9wcGE6IGhwcHBhIHVuZXhwZWN0ZWQgcHJpbWl0aXZlIGFjayAweCV4IiwKIAkJICAgIChicGZfdV9pbnQzMilkbHAtPmRsX3ByaW1pdGl2ZSk7CiAJCXJldHVybiAoUENBUF9FUlJPUik7CiAJfQogCiAJaWYgKChzaXplX3QpY3RsLmxlbiA8IERMX0hQX1BQQV9BQ0tfU0laRSkgewotCQlwY2FwX3NucHJpbnRmKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCXNucHJpbnRmKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICAiZ2V0X2RscGlfcHBhOiBocHBwYSBhY2sgdG9vIHNtYWxsICglZCA8ICVsdSkiLAogCQkgICAgIGN0bC5sZW4sICh1bnNpZ25lZCBsb25nKURMX0hQX1BQQV9BQ0tfU0laRSk7CiAJCXJldHVybiAoUENBUF9FUlJPUik7CkBAIC0xNjg4LDEyICsxNjgyLDEyIEBACiAJCXJldHVybiAoUENBUF9FUlJPUik7CiAJfQogCWlmIChjdGwubGVuID09IC0xKSB7Ci0JCXBjYXBfc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICJnZXRfZGxwaV9wcGE6IGhwcHBhIGdldG1zZzogY29udHJvbCBidWZmZXIgaGFzIG5vIGRhdGEiKTsKIAkJcmV0dXJuIChQQ0FQX0VSUk9SKTsKIAl9CiAJaWYgKCh1X2ludCljdGwubGVuIDwgZGxwLT5kbF9sZW5ndGgpIHsKLQkJcGNhcF9zbnByaW50ZihlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkgICAgImdldF9kbHBpX3BwYTogaHBwcGEgYWNrIHRvbyBzbWFsbCAoJWQgPCAlbHUpIiwKIAkJICAgIGN0bC5sZW4sICh1bnNpZ25lZCBsb25nKWRscC0+ZGxfbGVuZ3RoKTsKIAkJZnJlZShwcGFfZGF0YV9idWYpOwpAQCAtMTc1MCw3ICsxNzQ0LDcgQEAKIAkJICogZGV2aWNlIG51bWJlciBvZiBhIGRldmljZSB3aXRoIHRoZSBuYW1lICIvZGV2LzxkZXY+PHVuaXQ+IiwKIAkJICogaWYgc3VjaCBhIGRldmljZSBleGlzdHMsIGFzIHRoZSBvbGQgY29kZSBkaWQuCiAJCSAqLwotCQlwY2FwX3NucHJpbnRmKGRuYW1lLCBzaXplb2YoZG5hbWUpLCAiL2Rldi8lcyV1IiwgZGV2aWNlLCB1bml0KTsKKwkJc25wcmludGYoZG5hbWUsIHNpemVvZihkbmFtZSksICIvZGV2LyVzJXUiLCBkZXZpY2UsIHVuaXQpOwogCQlpZiAoc3RhdChkbmFtZSwgJnN0YXRidWYpIDwgMCkgewogCQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJICAgIGVycm5vLCAic3RhdDogJXMiLCBkbmFtZSk7CkBAIC0xNzY5LDEyICsxNzYzLDEyIEBACiAJCX0KIAl9CiAJaWYgKGkgPT0gYXAtPmRsX2NvdW50KSB7Ci0JCXBjYXBfc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICJjYW4ndCBmaW5kIC9kZXYvZGxwaSBQUEEgZm9yICVzJXUiLCBkZXZpY2UsIHVuaXQpOwogCQlyZXR1cm4gKFBDQVBfRVJST1JfTk9fU1VDSF9ERVZJQ0UpOwogCX0KIAlpZiAoaXAtPmRsX2hkd19zdGF0ZSA9PSBIRFdfREVBRCkgewotCQlwY2FwX3NucHJpbnRmKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCXNucHJpbnRmKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICAiJXMlZDogaGFyZHdhcmUgc3RhdGU6IERPV05cbiIsIGRldmljZSwgdW5pdCk7CiAJCWZyZWUocHBhX2RhdGFfYnVmKTsKIAkJcmV0dXJuIChQQ0FQX0VSUk9SKTsKQEAgLTE4MTMsMTMgKzE4MDcsMTMgQEAKIAlpZiAoY3AgIT0gTlVMTCkKIAkJaWZuYW1lID0gY3AgKyAxOwogCWlmIChubGlzdChwYXRoX3ZtdW5peCwgJm5sKSA8IDApIHsKLQkJcGNhcF9zbnByaW50ZihlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAibmxpc3QgJXMgZmFpbGVkIiwKKwkJc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIm5saXN0ICVzIGZhaWxlZCIsCiAJCSAgICBwYXRoX3ZtdW5peCk7CiAJCXJldHVybiAoUENBUF9FUlJPUik7CiAJfQogCWlmIChubFtOTF9JRk5FVF0ubl92YWx1ZSA9PSAwKSB7Ci0JCXBjYXBfc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJICAgICJjb3VsZCd0IGZpbmQgJXMga2VybmVsIHN5bWJvbCIsCisJCXNucHJpbnRmKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICAiY291bGRuJ3QgZmluZCAlcyBrZXJuZWwgc3ltYm9sIiwKIAkJICAgIG5sW05MX0lGTkVUXS5uX25hbWUpOwogCQlyZXR1cm4gKFBDQVBfRVJST1IpOwogCX0KQEAgLTE4NDksNyArMTg0Myw3IEBACiAJCX0KIAl9CiAKLQlwY2FwX3NucHJpbnRmKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJDYW4ndCBmaW5kICVzIiwgaWZuYW1lKTsKKwlzbnByaW50ZihlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiQ2FuJ3QgZmluZCAlcyIsIGlmbmFtZSk7CiAJcmV0dXJuIChQQ0FQX0VSUk9SX05PX1NVQ0hfREVWSUNFKTsKIH0KIApAQCAtMTg3MCw3ICsxODY0LDcgQEAKIAkJICAgIGVycm5vLCAicmVhZCIpOwogCQlyZXR1cm4gKC0xKTsKIAl9IGVsc2UgaWYgKGNjICE9IGxlbikgewotCQlwY2FwX3NucHJpbnRmKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJzaG9ydCByZWFkICglZCAhPSAlZCkiLCBjYywKKwkJc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgInNob3J0IHJlYWQgKCVkICE9ICVkKSIsIGNjLAogCQkgICAgbGVuKTsKIAkJcmV0dXJuICgtMSk7CiAJfQpAQCAtMTg4Niw3ICsxODgwLDcgQEAKIAlzdHJ1Y3QgcGNhcF9kbHBpICpwZDsKICNlbmRpZgogCi0JcCA9IHBjYXBfY3JlYXRlX2NvbW1vbihlYnVmLCBzaXplb2YgKHN0cnVjdCBwY2FwX2RscGkpKTsKKwlwID0gUENBUF9DUkVBVEVfQ09NTU9OKGVidWYsIHN0cnVjdCBwY2FwX2RscGkpOwogCWlmIChwID09IE5VTEwpCiAJCXJldHVybiAoTlVMTCk7CiAKZGlmZiAtLWdpdCBhL3BjYXAtZG9zLmMgYi9wY2FwLWRvcy5jCmluZGV4IGIxYjllY2QuLmNkZDYwZWEgMTAwNjQ0Ci0tLSBhL3BjYXAtZG9zLmMKKysrIGIvcGNhcC1kb3MuYwpAQCAtMTUzLDcgKzE1Myw3IEBACiB7CiAJcGNhcF90ICpwOwogCi0JcCA9IHBjYXBfY3JlYXRlX2NvbW1vbihlYnVmLCBzaXplb2YgKHN0cnVjdCBwY2FwX2RvcykpOworCXAgPSBQQ0FQX0NSRUFURV9DT01NT04oZWJ1Ziwgc3RydWN0IHBjYXBfZG9zKTsKIAlpZiAocCA9PSBOVUxMKQogCQlyZXR1cm4gKE5VTEwpOwogCkBAIC0yMTUsNyArMjE1LDcgQEAKICAgfQogICBlbHNlIGlmIChzdHJpY21wKGFjdGl2ZV9kZXYtPm5hbWUscGNhcC0+b3B0LmRldmljZSkpCiAgIHsKLSAgICBwY2FwX3NucHJpbnRmIChwY2FwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisgICAgc25wcmludGYgKHBjYXAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHVzZSBkaWZmZXJlbnQgZGV2aWNlcyBzaW11bHRhbmVvdXNseSAiCiAgICAgICAgICAgICAgICAgICAgIihgJXMnIHZzLiBgJXMnKSIsIGFjdGl2ZV9kZXYtPm5hbWUsIHBjYXAtPm9wdC5kZXZpY2UpOwogICAgIC8qIFhYWCAtIGZyZWUgcGNhcC0+YnVmZmVyPyAqLwpAQCAtMjgzLDcgKzI4Myw3IEBACiAgICAgICBwY2FwLmxlbiAgICA9IHJ4X2xlbjsKIAogICAgICAgaWYgKGNhbGxiYWNrICYmCi0gICAgICAgICAgKCFwLT5mY29kZS5iZl9pbnNucyB8fCBicGZfZmlsdGVyKHAtPmZjb2RlLmJmX2luc25zLCBwLT5idWZmZXIsIHBjYXAubGVuLCBwY2FwLmNhcGxlbikpKQorICAgICAgICAgICghcC0+ZmNvZGUuYmZfaW5zbnMgfHwgcGNhcF9maWx0ZXIocC0+ZmNvZGUuYmZfaW5zbnMsIHAtPmJ1ZmZlciwgcGNhcC5sZW4sIHBjYXAuY2FwbGVuKSkpCiAgICAgICB7CiAgICAgICAgIGZpbHRlcl9jb3VudCsrOwogCkBAIC00MTMsMTQgKzQxMywxNCBAQAogCiAgIGlmICghZGV2IHx8ICFkZXYtPmdldF9zdGF0cykKICAgewotICAgIHN0cmxjcHkgKHAtPmVycmJ1ZiwgImRldGFpbGVkIGRldmljZSBzdGF0aXN0aWNzIG5vdCBhdmFpbGFibGUiLAorICAgIHBjYXBfc3RybGNweSAocC0+ZXJyYnVmLCAiZGV0YWlsZWQgZGV2aWNlIHN0YXRpc3RpY3Mgbm90IGF2YWlsYWJsZSIsCiAgICAgICAgICAgICAgUENBUF9FUlJCVUZfU0laRSk7CiAgICAgcmV0dXJuICgtMSk7CiAgIH0KIAogICBpZiAoIXN0cm5pY21wKGRldi0+bmFtZSwicGt0IiwzKSkKICAgewotICAgIHN0cmxjcHkgKHAtPmVycmJ1ZiwgInBrdGRydnIgZG9lc24ndCBoYXZlIGRldGFpbGVkIHN0YXRpc3RpY3MiLAorICAgIHBjYXBfc3RybGNweSAocC0+ZXJyYnVmLCAicGt0ZHJ2ciBkb2Vzbid0IGhhdmUgZGV0YWlsZWQgc3RhdGlzdGljcyIsCiAgICAgICAgICAgICAgUENBUF9FUlJCVUZfU0laRSk7CiAgICAgcmV0dXJuICgtMSk7CiAgIH0KQEAgLTUzOSw3ICs1MzksNyBAQAogICAgICAgIG5ldCA9IElOX0NMQVNTQ19ORVQ7CiAgICAgZWxzZQogICAgIHsKLSAgICAgIHBjYXBfc25wcmludGYgKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgImluZXQgY2xhc3MgZm9yIDB4JWx4IHVua25vd24iLCBtYXNrKTsKKyAgICAgIHNucHJpbnRmIChlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJpbmV0IGNsYXNzIGZvciAweCVseCB1bmtub3duIiwgbWFzayk7CiAgICAgICByZXR1cm4gKC0xKTsKICAgICB9CiAgIH0KQEAgLTY2Nyw3ICs2NjcsNyBAQAogCiAgICAgICBpZiAoISgqZGV2LT5wcm9iZSkoZGV2KSkgICAgLyogY2FsbCB0aGUgeHhfcHJvYmUoKSBmdW5jdGlvbiAqLwogICAgICAgewotICAgICAgICBwY2FwX3NucHJpbnRmIChlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiZmFpbGVkIHRvIGRldGVjdCBkZXZpY2UgYCVzJyIsIGRldl9uYW1lKTsKKyAgICAgICAgc25wcmludGYgKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJmYWlsZWQgdG8gZGV0ZWN0IGRldmljZSBgJXMnIiwgZGV2X25hbWUpOwogICAgICAgICByZXR1cm4gKE5VTEwpOwogICAgICAgfQogICAgICAgcHJvYmVkX2RldiA9IGRldjsgIC8qIGRldmljZSBpcyBwcm9iZWQgb2theSBhbmQgbWF5IGJlIHVzZWQgKi8KQEAgLTY4OSw3ICs2ODksNyBAQAogCiAgICAgaWYgKCEoKmRldi0+b3BlbikoZGV2KSkKICAgICB7Ci0gICAgICBwY2FwX3NucHJpbnRmIChlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiZmFpbGVkIHRvIGFjdGl2YXRlIGRldmljZSBgJXMnIiwgZGV2X25hbWUpOworICAgICAgc25wcmludGYgKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJmYWlsZWQgdG8gYWN0aXZhdGUgZGV2aWNlIGAlcyciLCBkZXZfbmFtZSk7CiAgICAgICBpZiAocGt0SW5mby5lcnJvciAmJiAhc3RybmNtcChkZXYtPm5hbWUsInBrdCIsMykpCiAgICAgICB7CiAgICAgICAgIHN0cmNhdCAoZWJ1ZiwgIjogIik7CkBAIC02OTgsNyArNjk4LDcgQEAKICAgICAgIHJldHVybiAoTlVMTCk7CiAgICAgfQogCi0gICAgLyogU29tZSBkZXZpY2VzIG5lZWQgdGhpcyB0byBvcGVyYXRlIGluIHByb21pc2NvdXMgbW9kZQorICAgIC8qIFNvbWUgZGV2aWNlcyBuZWVkIHRoaXMgdG8gb3BlcmF0ZSBpbiBwcm9taXNjdW91cyBtb2RlCiAgICAgICovCiAgICAgaWYgKHByb21pc2MgJiYgZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QpCiAgICAgICAgKCpkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCkgKGRldik7CkBAIC03MTEsMTQgKzcxMSwxNCBAQAogICAgKi8KICAgaWYgKCFkZXYpCiAgIHsKLSAgICBwY2FwX3NucHJpbnRmIChlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiZGV2aWNlIGAlcycgbm90IHN1cHBvcnRlZCIsIGRldl9uYW1lKTsKKyAgICBzbnByaW50ZiAoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgImRldmljZSBgJXMnIG5vdCBzdXBwb3J0ZWQiLCBkZXZfbmFtZSk7CiAgICAgcmV0dXJuIChOVUxMKTsKICAgfQogCiBub3RfcHJvYmVkOgogICBpZiAoIXByb2JlZF9kZXYpCiAgIHsKLSAgICBwY2FwX3NucHJpbnRmIChlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiZGV2aWNlIGAlcycgbm90IHByb2JlZCIsIGRldl9uYW1lKTsKKyAgICBzbnByaW50ZiAoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgImRldmljZSBgJXMnIG5vdCBwcm9iZWQiLCBkZXZfbmFtZSk7CiAgICAgcmV0dXJuIChOVUxMKTsKICAgfQogICByZXR1cm4gKGRldik7CkBAIC05NDMsNyArOTQzLDcgQEAKIH0KIAogLyoKLSAqIFN1cHJlc3MgUFJJTlQgbWVzc2FnZSBmcm9tIFdhdHQtMzIncyBzb2NrX2luaXQoKQorICogU3VwcHJlc3MgUFJJTlQgbWVzc2FnZSBmcm9tIFdhdHQtMzIncyBzb2NrX2luaXQoKQogICovCiBzdGF0aWMgdm9pZCBudWxsX3ByaW50ICh2b2lkKSB7fQogCkBAIC0xMDA1LDcgKzEwMDUsNyBAQAogICB9CiAgIGVsc2UgaWYgKHJjICYmIHVzaW5nX3BrdGRydikKICAgewotICAgIHBjYXBfc25wcmludGYgKGVycl9idWYsIFBDQVBfRVJSQlVGX1NJWkUsICJzb2NrX2luaXQoKSBmYWlsZWQsIGNvZGUgJWQiLCByYyk7CisgICAgc25wcmludGYgKGVycl9idWYsIFBDQVBfRVJSQlVGX1NJWkUsICJzb2NrX2luaXQoKSBmYWlsZWQsIGNvZGUgJWQiLCByYyk7CiAgICAgcmV0dXJuICgwKTsKICAgfQogCkBAIC0xMDMxLDExICsxMDMxLDkgQEAKICAgcGNhcF9zYXZlLmxpbmt0eXBlICAgICAgID0gX2V0aF9nZXRfaHd0eXBlIChOVUxMLCBOVUxMKTsKICAgcGNhcF9zYXZlLnNuYXBzaG90ICAgICAgID0gTVRVID4gMCA/IE1UVSA6IEVUSF9NQVg7IC8qIGFzc3VtZSAxNTE0ICovCiAKLSNpZiAxCiAgIC8qIHByZXZlbnQgdXNlIG9mIHJlc29sdmUoKSBhbmQgcmVzb2x2ZV9pcCgpCiAgICAqLwogICBsYXN0X25hbWVzZXJ2ZXIgPSAwOwotI2VuZGlmCiAgIHJldHVybiAoMSk7CiB9CiAKZGlmZiAtLWdpdCBhL3BjYXAtZHBkay5jIGIvcGNhcC1kcGRrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY1YWJlNQotLS0gL2Rldi9udWxsCisrKyBiL3BjYXAtZHBkay5jCkBAIC0wLDAgKzEsMTA3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBqaW5nbGUgWUFORy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJ0FORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorRGF0ZTogRGVjIDE2LCAyMDE4CisKK0Rlc2NyaXB0aW9uOgorMS4gUGNhcC1kcGRrIHByb3ZpZGVzIGxpYnBjYXAgdGhlIGFiaWxpdHkgdG8gdXNlIERQREsgd2l0aCB0aGUgZGV2aWNlIG5hbWUgYXMgZHBkazp7cG9ydGlkfSwgc3VjaCBhcyBkcGRrOjAuCisyLiBEUERLIGlzIGEgc2V0IG9mIGxpYnJhcmllcyBhbmQgZHJpdmVycyBmb3IgZmFzdCBwYWNrZXQgcHJvY2Vzc2luZy4gKGh0dHBzOi8vd3d3LmRwZGsub3JnLykKKzMuIFRoZSB0ZXN0cHJvZ3MvY2FwdHVyZXRlc3QgcHJvdmlkZXMgNi40R2Jwcy84MDAsMDAwIHBwcyBvbiBJbnRlbCAxMC1HaWdhYml0IFg1NDAtQVQyIHdpdGggRFBESyAxOC4xMS4KKworTGltaXRhdGlvbnM6CisxLiBEUERLIHN1cHBvcnQgd2lsbCBiZSBvbiBpZiBEUERLIGlzIGF2YWlsYWJsZS4gUGxlYXNlIHNldCBESVIgZm9yIC0td2l0aC1kcGRrWz1ESVJdIHdpdGggLi9jb25maWd1cmUgb3IgLUREUERLX0RJUls9RElSXSB3aXRoIGNtYWtlIGlmIERQREsgaXMgaW5zdGFsbGVkIG1hbnVhbGx5LgorMi4gT25seSBzdXBwb3J0IGxpbmsgbGliZHBkay5zbyBkeW5hbWljYWxseSwgYmVjYXVzZSB0aGUgbGliZHBkay5hIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5LgorMy4gT25seSBzdXBwb3J0IHJlYWQgb3BlcmF0aW9uLCBhbmQgcGFja2V0IGluamVjdGlvbiBoYXMgbm90IGJlZW4gc3VwcG9ydGVkIHlldC4KKworVXNhZ2U6CisxLiBDb21waWxlIERQREsgYXMgc2hhcmVkIGxpYnJhcnkgYW5kIGluc3RhbGwuKGh0dHBzOi8vZ2l0aHViLmNvbS9EUERLL2RwZGsuZ2l0KQorCitZb3Ugc2hhbGwgbW9kaWZ5IHRoZSBmaWxlICRSVEVfU0RLLyRSVEVfVEFSR0VULy5jb25maWcgYW5kIHNldDoKK0NPTkZJR19SVEVfQlVJTERfU0hBUkVEX0xJQj15CitCeSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CitzZWQgLWkgJ3MvQ09ORklHX1JURV9CVUlMRF9TSEFSRURfTElCPW4vQ09ORklHX1JURV9CVUlMRF9TSEFSRURfTElCPXkvJyAkUlRFX1NESy8kUlRFX1RBUkdFVC8uY29uZmlnCisKKzIuIExhdW5jaCBsMmZ3ZCB0aGF0IGlzIG9uZSBvZiBEUERLIGV4YW1wbGVzIGNvcnJlY3RseSwgYW5kIGdldCBkZXZpY2UgaW5mb3JtYXRpb24uCisKK1lvdSBzaGFsbCBsZWFybiBob3cgdG8gYmluZCBuaWMgd2l0aCBEUERLLWNvbXBhdGlibGUgZHJpdmVyIGJ5ICRSVEVfU0RLL3VzZXJ0b29scy9kcGRrLWRldmJpbmQucHksIHN1Y2ggYXMgaWdiX3Vpby4KK0FuZCBlbmFibGUgaHVnZXBhZ2VzIGJ5IGRwZGstc2V0dXAuc2gKKworVGhlbiBsYXVuY2ggdGhlIGwyZndkIHdpdGggZHluYW1pYyBkaXJ2ZXIgc3VwcG9ydC4gRm9yIGV4YW1wbGU6CiskUlRFX1NESy9leGFtcGxlcy9sMmZ3ZC8kUlRFX1RBUkdFVC9sMmZ3ZCAtZGxpYnJ0ZV9wbWRfZTEwMDAuc28gLWRsaWJydGVfcG1kX2l4Z2JlLnNvIC1kbGlicnRlX21lbXBvb2xfcmluZy5zbyAtLSAtcCAweDEKKworMy4gQ29tcGlsZSBsaWJwY2FwIHdpdGggZHBkayBvcHRpb25zLgorCitJZiBEUERLIGhhcyBub3QgYmVlbiBmb3VuZCBhdXRvbWF0aWNhbGx5LCB5b3Ugc2hhbGwgZXhwb3J0IERQREsgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hpY2ggYXJlIHVzZWQgZm9yIGNvbXBpbGluZyBEUERLLiBBbmQgdGhlbiBwYXNzICRSVEVfU0RLLyRSVEVfVEFSR0VUIHRvIC0td2l0aC1kcGRrIG9yIC1ERFBES19ESVIKKworZXhwb3J0IFJURV9TREs9e3lvdXIgRFBESyBiYXNlIGRpcmVjdG9yeX0KK2V4cG9ydCBSVEVfVEFSR0VUPXt5b3VyIHRhcmdldCBuYW1lfQorCiszLjEgV2l0aCBjb25maWd1cmUKKworLi9jb25maWd1cmUgLS13aXRoLWRwZGs9JFJURV9TREsvJFJURV9UQVJHRVQgJiYgbWFrZSAtcyBhbGwgJiYgbWFrZSAtcyB0ZXN0cHJvZ3MgJiYgbWFrZSBpbnN0YWxsCisKKzMuMiBXaXRoIGNtYWtlCisKK21rZGlyIC1wIGJ1aWxkICYmIGNkIGJ1aWxkICYmIGNtYWtlIC1ERFBES19ESVI9JFJURV9TREsvJFJURV9UQVJHRVQgLi4vICYmIG1ha2UgLXMgYWxsICYmIG1ha2UgLXMgdGVzdHByb2dzICYmIG1ha2UgaW5zdGFsbAorCis0LiBMaW5rIHlvdXIgb3duIHByb2dyYW0gd2l0aCBsaWJwY2FwLCBhbmQgdXNlIERQREsgd2l0aCB0aGUgZGV2aWNlIG5hbWUgYXMgZHBkazp7cG9ydGlkfSwgc3VjaCBhcyBkcGRrOjAuCitBbmQgeW91IHNoYWxsIHNldCBEUERLIGNvbmZpZ3VyZSBvcHRpb25zIGJ5IGVudmlyb25tZW50IHZhcmlhYmxlIERQREtfQ0ZHCitGb3IgZXhhbXBsZSwgdGhlIHRlc3Rwcm9ncy9jYXB0dXJldGVzdCBjb3VsZCBiZSBsYW5jaGVkIGJ5OgorCitlbnYgRFBES19DRkc9Ii0tbG9nLWxldmVsPWRlYnVnIC1sMCAtZGxpYnJ0ZV9wbWRfZTEwMDAuc28gLWRsaWJydGVfcG1kX2l4Z2JlLnNvIC1kbGlicnRlX21lbXBvb2xfcmluZy5zbyIgLi9jYXB0dXJldGVzdCAtaSBkcGRrOjAKKyovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKy8vaGVhZGVyIGZvciBjYWxsaW5nIGRwZGsKKyNpbmNsdWRlIDxydGVfY29uZmlnLmg+CisjaW5jbHVkZSA8cnRlX2NvbW1vbi5oPgorI2luY2x1ZGUgPHJ0ZV9lcnJuby5oPgorI2luY2x1ZGUgPHJ0ZV9sb2cuaD4KKyNpbmNsdWRlIDxydGVfbWFsbG9jLmg+CisjaW5jbHVkZSA8cnRlX21lbW9yeS5oPgorI2luY2x1ZGUgPHJ0ZV9lYWwuaD4KKyNpbmNsdWRlIDxydGVfbGF1bmNoLmg+CisjaW5jbHVkZSA8cnRlX2F0b21pYy5oPgorI2luY2x1ZGUgPHJ0ZV9jeWNsZXMuaD4KKyNpbmNsdWRlIDxydGVfbGNvcmUuaD4KKyNpbmNsdWRlIDxydGVfcGVyX2xjb3JlLmg+CisjaW5jbHVkZSA8cnRlX2JyYW5jaF9wcmVkaWN0aW9uLmg+CisjaW5jbHVkZSA8cnRlX2ludGVycnVwdHMuaD4KKyNpbmNsdWRlIDxydGVfcmFuZG9tLmg+CisjaW5jbHVkZSA8cnRlX2RlYnVnLmg+CisjaW5jbHVkZSA8cnRlX2V0aGVyLmg+CisjaW5jbHVkZSA8cnRlX2V0aGRldi5oPgorI2luY2x1ZGUgPHJ0ZV9tZW1wb29sLmg+CisjaW5jbHVkZSA8cnRlX21idWYuaD4KKyNpbmNsdWRlIDxydGVfYnVzLmg+CisKKyNpbmNsdWRlICJwY2FwLWludC5oIgorI2luY2x1ZGUgInBjYXAtZHBkay5oIgorCisvKgorICogRGVhbCB3aXRoIEFQSSBjaGFuZ2VzIHRoYXQgYnJlYWsgc291cmNlIGNvbXBhdGliaWxpdHkuCisgKi8KKworI2lmZGVmIEhBVkVfU1RSVUNUX1JURV9FVEhFUl9BRERSCisjZGVmaW5lIEVUSEVSX0FERFJfVFlQRQlzdHJ1Y3QgcnRlX2V0aGVyX2FkZHIKKyNlbHNlCisjZGVmaW5lIEVUSEVSX0FERFJfVFlQRQlzdHJ1Y3QgZXRoZXJfYWRkcgorI2VuZGlmCisKKyNkZWZpbmUgRFBES19ERUZfTE9HX0xFViBSVEVfTE9HX0VSUgorLy8KKy8vIFRoaXMgaXMgc2V0IHRvIDAgaWYgd2UgaGF2ZW4ndCBpbml0aWFsaXplZCBEUERLIHlldCwgMSBpZiB3ZSd2ZQorLy8gc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIGl0LCBhIG5lZ2F0aXZlIHZhbHVlLCB3aGljaCBpcyB0aGUgbmVnYXRpdmUKKy8vIG9mIHRoZSBydGVfZXJybm8gZnJvbSBydGVfZWFsX2luaXQoKSwgaWYgd2UgdHJpZWQgdG8gaW5pdGlhbGl6ZSBpdAorLy8gYW5kIGdvdCBhbiBlcnJvci4KKy8vCitzdGF0aWMgaW50IGlzX2RwZGtfcHJlX2luaXRlZD0wOworI2RlZmluZSBEUERLX0xJQl9OQU1FICJsaWJwY2FwX2RwZGsiCisjZGVmaW5lIERQREtfREVTQyAiRGF0YSBQbGFuZSBEZXZlbG9wbWVudCBLaXQgKERQREspIEludGVyZmFjZSIKKyNkZWZpbmUgRFBES19FUlJfUEVSTV9NU0cgInBlcm1pc3Npb24gZGVuaWVkLCBEUERLIG5lZWRzIHJvb3QgcGVybWlzc2lvbiIKKyNkZWZpbmUgRFBES19BUkdDX01BWCA2NAorI2RlZmluZSBEUERLX0NGR19NQVhfTEVOIDEwMjQKKyNkZWZpbmUgRFBES19ERVZfTkFNRV9NQVggMzIKKyNkZWZpbmUgRFBES19ERVZfREVTQ19NQVggNTEyCisjZGVmaW5lIERQREtfQ0ZHX0VOVl9OQU1FICJEUERLX0NGRyIKKyNkZWZpbmUgRFBES19ERUZfTUlOX1NMRUVQX01TIDEKK3N0YXRpYyBjaGFyIGRwZGtfY2ZnX2J1ZltEUERLX0NGR19NQVhfTEVOXTsKKyNkZWZpbmUgRFBES19NQUNfQUREUl9TSVpFIDMyCisjZGVmaW5lIERQREtfREVGX01BQ19BRERSICIwMDowMDowMDowMDowMDowMCIKKyNkZWZpbmUgRFBES19QQ0lfQUREUl9TSVpFIDE2CisjZGVmaW5lIERQREtfREVGX0NGRyAiLS1sb2ctbGV2ZWw9ZXJyb3IgLWwwIC1kbGlicnRlX3BtZF9lMTAwMC5zbyAtZGxpYnJ0ZV9wbWRfaXhnYmUuc28gLWRsaWJydGVfbWVtcG9vbF9yaW5nLnNvIgorI2RlZmluZSBEUERLX1BSRUZJWCAiZHBkazoiCisjZGVmaW5lIERQREtfUE9SVElEX01BWCA2NTUzNVUKKyNkZWZpbmUgTUJVRl9QT09MX05BTUUgIm1idWZfcG9vbCIKKyNkZWZpbmUgRFBES19UWF9CVUZfTkFNRSAidHhfYnVmZmVyIgorLy9UaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBtYnVmIHBvb2wuCisjZGVmaW5lIERQREtfTkJfTUJVRlMgODE5MlUKKyNkZWZpbmUgTUVNUE9PTF9DQUNIRV9TSVpFIDI1NgorI2RlZmluZSBNQVhfUEtUX0JVUlNUIDMyCisvLyBDb25maWd1cmFibGUgbnVtYmVyIG9mIFJYL1RYIHJpbmcgZGVzY3JpcHRvcnMKKyNkZWZpbmUgUlRFX1RFU1RfUlhfREVTQ19ERUZBVUxUIDEwMjQKKyNkZWZpbmUgUlRFX1RFU1RfVFhfREVTQ19ERUZBVUxUIDEwMjQKKworc3RhdGljIHVpbnQxNl90IG5iX3J4ZCA9IFJURV9URVNUX1JYX0RFU0NfREVGQVVMVDsKK3N0YXRpYyB1aW50MTZfdCBuYl90eGQgPSBSVEVfVEVTVF9UWF9ERVNDX0RFRkFVTFQ7CisKKyNpZmRlZiBSVEVfRVRIRVJfTUFYX0pVTUJPX0ZSQU1FX0xFTgorI2RlZmluZSBSVEVfRVRIX1BDQVBfU05BUExFTiBSVEVfRVRIRVJfTUFYX0pVTUJPX0ZSQU1FX0xFTgorI2Vsc2UKKyNkZWZpbmUgUlRFX0VUSF9QQ0FQX1NOQVBMRU4gRVRIRVJfTUFYX0pVTUJPX0ZSQU1FX0xFTgorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcnRlX2V0aF9kZXZfdHhfYnVmZmVyICp0eF9idWZmZXI7CisKK3N0cnVjdCBkcGRrX3RzX2hlbHBlcnsKKwlzdHJ1Y3QgdGltZXZhbCBzdGFydF90aW1lOworCXVpbnQ2NF90IHN0YXJ0X2N5Y2xlczsKKwl1aW50NjRfdCBoejsKK307CitzdHJ1Y3QgcGNhcF9kcGRreworCXBjYXBfdCAqIG9yaWc7CisJdWludDE2X3QgcG9ydGlkOyAvLyBwb3J0aWQgb2YgRFBESworCWludCBtdXN0X2NsZWFyX3Byb21pc2M7CisJdWludDY0X3QgYnBmX2Ryb3A7CisJaW50IG5vbmJsb2NrOworCXN0cnVjdCB0aW1ldmFsIHJlcXVpcmVkX3NlbGVjdF90aW1lb3V0OworCXN0cnVjdCB0aW1ldmFsIHByZXZfdHM7CisJc3RydWN0IHJ0ZV9ldGhfc3RhdHMgcHJldl9zdGF0czsKKwlzdHJ1Y3QgdGltZXZhbCBjdXJyX3RzOworCXN0cnVjdCBydGVfZXRoX3N0YXRzIGN1cnJfc3RhdHM7CisJdWludDY0X3QgcHBzOworCXVpbnQ2NF90IGJwczsKKwlzdHJ1Y3QgcnRlX21lbXBvb2wgKiBwa3RtYnVmX3Bvb2w7CisJc3RydWN0IGRwZGtfdHNfaGVscGVyIHRzX2hlbHBlcjsKKwlFVEhFUl9BRERSX1RZUEUgZXRoX2FkZHI7CisJY2hhciBtYWNfYWRkcltEUERLX01BQ19BRERSX1NJWkVdOworCWNoYXIgcGNpX2FkZHJbRFBES19QQ0lfQUREUl9TSVpFXTsKKwl1bnNpZ25lZCBjaGFyIHBjYXBfdG1wX2J1ZltSVEVfRVRIX1BDQVBfU05BUExFTl07Cit9OworCitzdGF0aWMgc3RydWN0IHJ0ZV9ldGhfY29uZiBwb3J0X2NvbmYgPSB7CisJLnJ4bW9kZSA9IHsKKwkJLnNwbGl0X2hkcl9zaXplID0gMCwKKwl9LAorCS50eG1vZGUgPSB7CisJCS5tcV9tb2RlID0gRVRIX01RX1RYX05PTkUsCisJfSwKK307CisKK3N0YXRpYyB2b2lkCWRwZGtfZm10X2Vycm1zZ19mb3JfcnRlX2Vycm5vKGNoYXIgKiwgc2l6ZV90LCBpbnQsCisgICAgUENBUF9GT1JNQVRfU1RSSU5HKGNvbnN0IGNoYXIgKiksIC4uLikgUENBUF9QUklOVEZMSUtFKDQsIDUpOworCisvKgorICogR2VuZXJhdGUgYW4gZXJyb3IgbWVzc2FnZSBiYXNlZCBvbiBhIGZvcm1hdCwgYXJndW1lbnRzLCBhbmQgYW4KKyAqIHJ0ZV9lcnJubywgd2l0aCBhIG1lc3NhZ2UgZm9yIHRoZSBydGVfZXJybm8gYWZ0ZXIgdGhlIGZvcm1hdHRlZCBvdXRwdXQuCisgKi8KK3N0YXRpYyB2b2lkIGRwZGtfZm10X2Vycm1zZ19mb3JfcnRlX2Vycm5vKGNoYXIgKmVycmJ1Ziwgc2l6ZV90IGVycmJ1ZmxlbiwKKyAgICBpbnQgZXJybnVtLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXNpemVfdCBtc2dsZW47CisJY2hhciAqcDsKKwlzaXplX3QgZXJyYnVmbGVuX3JlbWFpbmluZzsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZzbnByaW50ZihlcnJidWYsIGVycmJ1ZmxlbiwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKwltc2dsZW4gPSBzdHJsZW4oZXJyYnVmKTsKKworCS8qCisJICogRG8gd2UgaGF2ZSBlbm91Z2ggc3BhY2UgdG8gYXBwZW5kICI6ICI/CisJICogSW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyAnXDAnLCB0aGF0J3MgMyBieXRlcy4KKwkgKi8KKwlpZiAobXNnbGVuICsgMyA+IGVycmJ1ZmxlbikgeworCQkvKiBObyAtIGp1c3QgZ2l2ZSB0aGVtIHdoYXQgd2UndmUgcHJvZHVjZWQuICovCisJCXJldHVybjsKKwl9CisJcCA9IGVycmJ1ZiArIG1zZ2xlbjsKKwllcnJidWZsZW5fcmVtYWluaW5nID0gZXJyYnVmbGVuIC0gbXNnbGVuOworCSpwKysgPSAnOic7CisJKnArKyA9ICcgJzsKKwkqcCA9ICdcMCc7CisJbXNnbGVuICs9IDI7CisJZXJyYnVmbGVuX3JlbWFpbmluZyAtPSAyOworCisJLyoKKwkgKiBOb3cgYXBwZW5kIHRoZSBzdHJpbmcgZm9yIHRoZSBlcnJvciBjb2RlLgorCSAqIHJ0ZV9zdHJlcnJvcigpIGlzIHRocmVhZC1zYWZlLCBhdCBsZWFzdCBhcyBvZiBkcGRrIDE4LjExLAorCSAqIHVubGlrZSBzdHJlcnJvcigpIC0gaXQgdXNlcyBzdHJlcnJvcl9yKCkgcmF0aGVyIHRoYW4gc3RyZXJyb3IoKQorCSAqIGZvciBVTipYIGVycm5vIHZhbHVlcywgYW5kIHByaW50cyB0byB3aGF0IEkgYXNzdW1lIGlzIGEgcGVyLXRocmVhZAorCSAqIGJ1ZmZlciAoYmFzZWQgb24gdGhlICJQRVJfTENPUkUiIGluICJSVEVfREVGSU5FX1BFUl9MQ09SRSIgdXNlZAorCSAqIHRvIGRlY2xhcmUgdGhlIGJ1ZmZlcnMgc3RhdGljYWxseSkgZm9yIERQREsgZXJyb3JzLgorCSAqLworCXNucHJpbnRmKHAsIGVycmJ1Zmxlbl9yZW1haW5pbmcsICIlcyIsIHJ0ZV9zdHJlcnJvcihlcnJudW0pKTsKK30KKworc3RhdGljIGludCBkcGRrX2luaXRfdGltZXIoc3RydWN0IHBjYXBfZHBkayAqcGQpeworCWdldHRpbWVvZmRheSgmKHBkLT50c19oZWxwZXIuc3RhcnRfdGltZSksTlVMTCk7CisJcGQtPnRzX2hlbHBlci5zdGFydF9jeWNsZXMgPSBydGVfZ2V0X3RpbWVyX2N5Y2xlcygpOworCXBkLT50c19oZWxwZXIuaHogPSBydGVfZ2V0X3RpbWVyX2h6KCk7CisJaWYgKHBkLT50c19oZWxwZXIuaHogPT0gMCl7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgY2FsY3VsYXRlX3RpbWVzdGFtcChzdHJ1Y3QgZHBka190c19oZWxwZXIgKmhlbHBlcixzdHJ1Y3QgdGltZXZhbCAqdHMpCit7CisJdWludDY0X3QgY3ljbGVzOworCS8vIGRlbHRhCisJc3RydWN0IHRpbWV2YWwgY3VyX3RpbWU7CisJY3ljbGVzID0gcnRlX2dldF90aW1lcl9jeWNsZXMoKSAtIGhlbHBlci0+c3RhcnRfY3ljbGVzOworCWN1cl90aW1lLnR2X3NlYyA9ICh0aW1lX3QpKGN5Y2xlcy9oZWxwZXItPmh6KTsKKwljdXJfdGltZS50dl91c2VjID0gKHN1c2Vjb25kc190KSgoY3ljbGVzJWhlbHBlci0+aHopKjFlNi9oZWxwZXItPmh6KTsKKwl0aW1lcmFkZCgmKGhlbHBlci0+c3RhcnRfdGltZSksICZjdXJfdGltZSwgdHMpOworfQorCitzdGF0aWMgdWludDMyX3QgZHBka19nYXRoZXJfZGF0YSh1bnNpZ25lZCBjaGFyICpkYXRhLCB1aW50MzJfdCBsZW4sIHN0cnVjdCBydGVfbWJ1ZiAqbWJ1ZikKK3sKKwl1aW50MzJfdCB0b3RhbF9sZW4gPSAwOworCXdoaWxlIChtYnVmICYmICh0b3RhbF9sZW4rbWJ1Zi0+ZGF0YV9sZW4pIDwgbGVuICl7CisJCXJ0ZV9tZW1jcHkoZGF0YSt0b3RhbF9sZW4sIHJ0ZV9wa3RtYnVmX210b2QobWJ1Zix2b2lkICopLG1idWYtPmRhdGFfbGVuKTsKKwkJdG90YWxfbGVuKz1tYnVmLT5kYXRhX2xlbjsKKwkJbWJ1Zj1tYnVmLT5uZXh0OworCX0KKwlyZXR1cm4gdG90YWxfbGVuOworfQorCisKK3N0YXRpYyBpbnQgZHBka19yZWFkX3dpdGhfdGltZW91dChwY2FwX3QgKnAsIHN0cnVjdCBydGVfbWJ1ZiAqKnBrdHNfYnVyc3QsIGNvbnN0IHVpbnQxNl90IGJ1cnN0X2NudCl7CisJc3RydWN0IHBjYXBfZHBkayAqcGQgPSAoc3RydWN0IHBjYXBfZHBkayopKHAtPnByaXYpOworCWludCBuYl9yeCA9IDA7CisJaW50IHRpbWVvdXRfbXMgPSBwLT5vcHQudGltZW91dDsKKwlpbnQgc2xlZXBfbXMgPSAwOworCWlmIChwZC0+bm9uYmxvY2speworCQkvLyBJbiBub24tYmxvY2tpbmcgbW9kZSwganVzdCByZWFkIG9uY2UsIG5vIG1hdHRlciBob3cgbWFueSBwYWNrZXRzIGFyZSBjYXB0dXJlZC4KKwkJbmJfcnggPSAoaW50KXJ0ZV9ldGhfcnhfYnVyc3QocGQtPnBvcnRpZCwgMCwgcGt0c19idXJzdCwgYnVyc3RfY250KTsKKwl9ZWxzZXsKKwkJLy8gSW4gYmxvY2tpbmcgbW9kZSwgcmVhZCBtYW55IHRpbWVzIHVudGlsIHBhY2tldHMgYXJlIGNhcHR1cmVkIG9yIHRpbWVvdXQgb3IgYnJlYWtfbG9vcCBpcyBzZXQuCisJCS8vIGlmIHRpbWVvdXRfbXMgPT0gMCwgaXQgbWF5IGJlIGJsb2NrZWQgZm9yZXZlci4KKwkJd2hpbGUgKHRpbWVvdXRfbXMgPT0gMCB8fCBzbGVlcF9tcyA8IHRpbWVvdXRfbXMpeworCQkJbmJfcnggPSAoaW50KXJ0ZV9ldGhfcnhfYnVyc3QocGQtPnBvcnRpZCwgMCwgcGt0c19idXJzdCwgYnVyc3RfY250KTsKKwkJCWlmIChuYl9yeCl7IC8vIGdvdCBwYWNrZXRzIHdpdGhpbiB0aW1lb3V0X21zCisJCQkJYnJlYWs7CisJCQl9ZWxzZXsgLy8gbm8gcGFja2V0IGFycml2ZXMgYXQgdGhpcyByb3VuZC4KKwkJCQlpZiAocC0+YnJlYWtfbG9vcCl7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQkvLyBzbGVlcCBmb3IgYSB2ZXJ5IHNob3J0IHdoaWxlLgorCQkJCS8vIGJsb2NrIHNsZWVwIGlzIHRoZSBvbmx5IGNob2ljZSwgc2luY2UgdXNsZWVwKCkgd2lsbCBpbXBhY3QgcGVyZm9ybWFuY2UgZHJhbWF0aWNhbGx5LgorCQkJCXJ0ZV9kZWxheV91c19ibG9jayhEUERLX0RFRl9NSU5fU0xFRVBfTVMqMTAwMCk7CisJCQkJc2xlZXBfbXMgKz0gRFBES19ERUZfTUlOX1NMRUVQX01TOworCQkJfQorCQl9CisJfQorCXJldHVybiBuYl9yeDsKK30KKworc3RhdGljIGludCBwY2FwX2RwZGtfZGlzcGF0Y2gocGNhcF90ICpwLCBpbnQgbWF4X2NudCwgcGNhcF9oYW5kbGVyIGNiLCB1X2NoYXIgKmNiX2FyZykKK3sKKwlzdHJ1Y3QgcGNhcF9kcGRrICpwZCA9IChzdHJ1Y3QgcGNhcF9kcGRrKikocC0+cHJpdik7CisJaW50IGJ1cnN0X2NudCA9IDA7CisJaW50IG5iX3J4ID0gMDsKKwlzdHJ1Y3QgcnRlX21idWYgKnBrdHNfYnVyc3RbTUFYX1BLVF9CVVJTVF07CisJc3RydWN0IHJ0ZV9tYnVmICptOworCXN0cnVjdCBwY2FwX3BrdGhkciBwY2FwX2hlYWRlcjsKKwkvLyBJbiBEUERLLCBwa3RfbGVuIGlzIHN1bSBvZiBsZW5ndGhzIGZvciBhbGwgc2VnbWVudHMuIEFuZCBkYXRhX2xlbiBpcyBmb3Igb25lIHNlZ21lbnQKKwl1aW50MzJfdCBwa3RfbGVuID0gMDsKKwl1aW50MzJfdCBjYXBsZW4gPSAwOworCXVfY2hhciAqYnAgPSBOVUxMOworCWludCBpPTA7CisJdW5zaWduZWQgaW50IGdhdGhlcl9sZW4gPTA7CisJaW50IHBrdF9jbnQgPSAwOworCXVfY2hhciAqbGFyZ2VfYnVmZmVyPU5VTEw7CisJaW50IHRpbWVvdXRfbXMgPSBwLT5vcHQudGltZW91dDsKKworCWlmICggIVBBQ0tFVF9DT1VOVF9JU19VTkxJTUlURUQobWF4X2NudCkgJiYgbWF4X2NudCA8IE1BWF9QS1RfQlVSU1QpeworCQlidXJzdF9jbnQgPSBtYXhfY250OworCX1lbHNleworCQlidXJzdF9jbnQgPSBNQVhfUEtUX0JVUlNUOworCX0KKworCXdoaWxlKCBQQUNLRVRfQ09VTlRfSVNfVU5MSU1JVEVEKG1heF9jbnQpIHx8IHBrdF9jbnQgPCBtYXhfY250KXsKKwkJaWYgKHAtPmJyZWFrX2xvb3ApeworCQkJcC0+YnJlYWtfbG9vcCA9IDA7CisJCQlyZXR1cm4gUENBUF9FUlJPUl9CUkVBSzsKKwkJfQorCQkvLyByZWFkIG9uY2UgaW4gbm9uLWJsb2NraW5nIG1vZGUsIG9yIHRyeSBtYW55IHRpbWVzIHdhaXRpbmcgZm9yIHRpbWVvdXRfbXMuCisJCS8vIGlmIHRpbWVvdXRfbXMgPT0gMCwgaXQgd2lsbCBiZSBibG9ja2VkIHVudGlsIG9uZSBwYWNrZXQgYXJyaXZlcyBvciBicmVha19sb29wIGlzIHNldC4KKwkJbmJfcnggPSBkcGRrX3JlYWRfd2l0aF90aW1lb3V0KHAsIHBrdHNfYnVyc3QsIGJ1cnN0X2NudCk7CisJCWlmIChuYl9yeCA9PSAwKXsKKwkJCWlmIChwZC0+bm9uYmxvY2speworCQkJCVJURV9MT0coREVCVUcsIFVTRVIxLCAiZHBkazogbm8gcGFja2V0cyBhdmFpbGFibGUgaW4gbm9uLWJsb2NraW5nIG1vZGUuXG4iKTsKKwkJCX1lbHNleworCQkJCWlmIChwLT5icmVha19sb29wKXsKKwkJCQkJUlRFX0xPRyhERUJVRywgVVNFUjEsICJkcGRrOiBubyBwYWNrZXRzIGF2YWlsYWJsZSBhbmQgYnJlYWtfbG9vcCBpcyBzZXQgaW4gYmxvY2tpbmcgbW9kZS5cbiIpOworCQkJCQlwLT5icmVha19sb29wID0gMDsKKwkJCQkJcmV0dXJuIFBDQVBfRVJST1JfQlJFQUs7CisKKwkJCQl9CisJCQkJUlRFX0xPRyhERUJVRywgVVNFUjEsICJkcGRrOiBubyBwYWNrZXRzIGF2YWlsYWJsZSBmb3IgdGltZW91dCAlZCBtcyBpbiBibG9ja2luZyBtb2RlLlxuIiwgdGltZW91dF9tcyk7CisJCQl9CisJCQkvLyBicmVhayBpZiBkcGRrIHJlYWRzIDAgcGFja2V0LCBubyBtYXR0ZXIgaW4gYmxvY2tpbmcodGltZW91dCkgb3Igbm9uLWJsb2NraW5nIG1vZGUuCisJCQlicmVhazsKKwkJfQorCQlwa3RfY250ICs9IG5iX3J4OworCQlmb3IgKCBpID0gMDsgaSA8IG5iX3J4OyBpKyspIHsKKwkJCW0gPSBwa3RzX2J1cnN0W2ldOworCQkJY2FsY3VsYXRlX3RpbWVzdGFtcCgmKHBkLT50c19oZWxwZXIpLCYocGNhcF9oZWFkZXIudHMpKTsKKwkJCXBrdF9sZW4gPSBydGVfcGt0bWJ1Zl9wa3RfbGVuKG0pOworCQkJLy8gY2FwbGVuID0gbWluKHBrdF9sZW4sIHAtPnNuYXBzaG90KTsKKwkJCS8vIGNhcGxlbiB3aWxsIG5vdCBiZSBjaGFuZ2VkLCBubyBtYXR0ZXIgaG93IGxvbmcgdGhlIHJ0ZV9wa3RtYnVmCisJCQljYXBsZW4gPSBwa3RfbGVuIDwgKHVpbnQzMl90KXAtPnNuYXBzaG90ID8gcGt0X2xlbjogKHVpbnQzMl90KXAtPnNuYXBzaG90OworCQkJcGNhcF9oZWFkZXIuY2FwbGVuID0gY2FwbGVuOworCQkJcGNhcF9oZWFkZXIubGVuID0gcGt0X2xlbjsKKwkJCS8vIHZvbGF0aWxlIHByZWZldGNoCisJCQlydGVfcHJlZmV0Y2gwKHJ0ZV9wa3RtYnVmX210b2QobSwgdm9pZCAqKSk7CisJCQlicCA9IE5VTEw7CisJCQlpZiAobS0+bmJfc2VncyA9PSAxKQorCQkJeworCQkJCWJwID0gcnRlX3BrdG1idWZfbXRvZChtLCB1X2NoYXIgKik7CisJCQl9ZWxzZXsKKwkJCQkvLyB1c2UgZmFzdCBidWZmZXIgcGNhcF90bXBfYnVmIGlmIHBrdF9sZW4gaXMgc21hbGwsIG5vIG5lZWQgdG8gY2FsbCBtYWxsb2MgYW5kIGZyZWUKKwkJCQlpZiAoIHBrdF9sZW4gPD0gUlRFX0VUSF9QQ0FQX1NOQVBMRU4pCisJCQkJeworCQkJCQlnYXRoZXJfbGVuID0gZHBka19nYXRoZXJfZGF0YShwZC0+cGNhcF90bXBfYnVmLCBSVEVfRVRIX1BDQVBfU05BUExFTiwgbSk7CisJCQkJCWJwID0gcGQtPnBjYXBfdG1wX2J1ZjsKKwkJCQl9ZWxzZXsKKwkJCQkJLy8gbmVlZCBjYWxsIGZyZWUgbGF0ZXIKKwkJCQkJbGFyZ2VfYnVmZmVyID0gKHVfY2hhciAqKW1hbGxvYyhjYXBsZW4qc2l6ZW9mKHVfY2hhcikpOworCQkJCQlnYXRoZXJfbGVuID0gZHBka19nYXRoZXJfZGF0YShsYXJnZV9idWZmZXIsIGNhcGxlbiwgbSk7CisJCQkJCWJwID0gbGFyZ2VfYnVmZmVyOworCQkJCX0KKworCQkJfQorCQkJaWYgKGJwKXsKKwkJCQlpZiAocC0+ZmNvZGUuYmZfaW5zbnM9PU5VTEwgfHwgcGNhcF9maWx0ZXIocC0+ZmNvZGUuYmZfaW5zbnMsIGJwLCBwY2FwX2hlYWRlci5sZW4sIHBjYXBfaGVhZGVyLmNhcGxlbikpeworCQkJCQljYihjYl9hcmcsICZwY2FwX2hlYWRlciwgYnApOworCQkJCX1lbHNleworCQkJCQlwZC0+YnBmX2Ryb3ArKzsKKwkJCQl9CisJCQl9CisJCQkvL2ZyZWUgYWxsIHBrdG1idWYKKwkJCXJ0ZV9wa3RtYnVmX2ZyZWUobSk7CisJCQlpZiAobGFyZ2VfYnVmZmVyKXsKKwkJCQlmcmVlKGxhcmdlX2J1ZmZlcik7CisJCQkJbGFyZ2VfYnVmZmVyPU5VTEw7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHBrdF9jbnQ7Cit9CisKK3N0YXRpYyBpbnQgcGNhcF9kcGRrX2luamVjdChwY2FwX3QgKnAsIGNvbnN0IHZvaWQgKmJ1ZiBfVV8sIGludCBzaXplIF9VXykKK3sKKwkvL25vdCBpbXBsZW1lbnRlZCB5ZXQKKwlwY2FwX3N0cmxjcHkocC0+ZXJyYnVmLAorCSAgICAiZHBkayBlcnJvcjogSW5qZWN0IGZ1bmN0aW9uIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZCB5ZXQiLAorCSAgICBQQ0FQX0VSUkJVRl9TSVpFKTsKKwlyZXR1cm4gUENBUF9FUlJPUjsKK30KKworc3RhdGljIHZvaWQgcGNhcF9kcGRrX2Nsb3NlKHBjYXBfdCAqcCkKK3sKKwlzdHJ1Y3QgcGNhcF9kcGRrICpwZCA9IHAtPnByaXY7CisJaWYgKHBkPT1OVUxMKQorCXsKKwkJcmV0dXJuOworCX0KKwlpZiAocGQtPm11c3RfY2xlYXJfcHJvbWlzYykKKwl7CisJCXJ0ZV9ldGhfcHJvbWlzY3VvdXNfZGlzYWJsZShwZC0+cG9ydGlkKTsKKwl9CisJcnRlX2V0aF9kZXZfc3RvcChwZC0+cG9ydGlkKTsKKwlydGVfZXRoX2Rldl9jbG9zZShwZC0+cG9ydGlkKTsKKwlwY2FwX2NsZWFudXBfbGl2ZV9jb21tb24ocCk7Cit9CisKK3N0YXRpYyB2b2lkIG5pY19zdGF0c19kaXNwbGF5KHN0cnVjdCBwY2FwX2RwZGsgKnBkKQoreworCXVpbnQxNl90IHBvcnRpZCA9IHBkLT5wb3J0aWQ7CisJc3RydWN0IHJ0ZV9ldGhfc3RhdHMgc3RhdHM7CisJcnRlX2V0aF9zdGF0c19nZXQocG9ydGlkLCAmc3RhdHMpOworCVJURV9MT0coSU5GTyxVU0VSMSwgInBvcnRpZDolZCwgUlgtcGFja2V0czogJS0xMCJQUkl1NjQiICBSWC1lcnJvcnM6ICAlLTEwIlBSSXU2NAorCSAgICAgICAiICBSWC1ieXRlczogICUtMTAiUFJJdTY0IiAgUlgtSW1pc3NlZDogICUtMTAiUFJJdTY0IlxuIiwgcG9ydGlkLCBzdGF0cy5pcGFja2V0cywgc3RhdHMuaWVycm9ycywKKwkgICAgICAgc3RhdHMuaWJ5dGVzLHN0YXRzLmltaXNzZWQpOworCVJURV9MT0coSU5GTyxVU0VSMSwgInBvcnRpZDolZCwgUlgtUFBTOiAlLTEwIlBSSXU2NCIgUlgtTWJwczogJS4ybGZcbiIsIHBvcnRpZCwgcGQtPnBwcywgcGQtPmJwcy8xZTZmICk7Cit9CisKK3N0YXRpYyBpbnQgcGNhcF9kcGRrX3N0YXRzKHBjYXBfdCAqcCwgc3RydWN0IHBjYXBfc3RhdCAqcHMpCit7CisJc3RydWN0IHBjYXBfZHBkayAqcGQgPSBwLT5wcml2OworCWNhbGN1bGF0ZV90aW1lc3RhbXAoJihwZC0+dHNfaGVscGVyKSwgJihwZC0+Y3Vycl90cykpOworCXJ0ZV9ldGhfc3RhdHNfZ2V0KHBkLT5wb3J0aWQsJihwZC0+Y3Vycl9zdGF0cykpOworCWlmIChwcyl7CisJCXBzLT5wc19yZWN2ID0gcGQtPmN1cnJfc3RhdHMuaXBhY2tldHM7CisJCXBzLT5wc19kcm9wID0gcGQtPmN1cnJfc3RhdHMuaWVycm9yczsKKwkJcHMtPnBzX2Ryb3AgKz0gcGQtPmJwZl9kcm9wOworCQlwcy0+cHNfaWZkcm9wID0gcGQtPmN1cnJfc3RhdHMuaW1pc3NlZDsKKwl9CisJdWludDY0X3QgZGVsdGFfcGt0ID0gcGQtPmN1cnJfc3RhdHMuaXBhY2tldHMgLSBwZC0+cHJldl9zdGF0cy5pcGFja2V0czsKKwlzdHJ1Y3QgdGltZXZhbCBkZWx0YV90bTsKKwl0aW1lcnN1YigmKHBkLT5jdXJyX3RzKSwmKHBkLT5wcmV2X3RzKSwgJmRlbHRhX3RtKTsKKwl1aW50NjRfdCBkZWx0YV91c2VjID0gZGVsdGFfdG0udHZfc2VjKjFlNitkZWx0YV90bS50dl91c2VjOworCXVpbnQ2NF90IGRlbHRhX2JpdCA9IChwZC0+Y3Vycl9zdGF0cy5pYnl0ZXMtcGQtPnByZXZfc3RhdHMuaWJ5dGVzKSo4OworCVJURV9MT0coREVCVUcsIFVTRVIxLCAiZGVsdGFfdXNlYzogJS0xMCJQUkl1NjQiIGRlbHRhX3BrdDogJS0xMCJQUkl1NjQiIGRlbHRhX2JpdDogJS0xMCJQUkl1NjQiXG4iLCBkZWx0YV91c2VjLCBkZWx0YV9wa3QsIGRlbHRhX2JpdCk7CisJcGQtPnBwcyA9ICh1aW50NjRfdCkoZGVsdGFfcGt0KjFlNmYvZGVsdGFfdXNlYyk7CisJcGQtPmJwcyA9ICh1aW50NjRfdCkoZGVsdGFfYml0KjFlNmYvZGVsdGFfdXNlYyk7CisJbmljX3N0YXRzX2Rpc3BsYXkocGQpOworCXBkLT5wcmV2X3N0YXRzID0gcGQtPmN1cnJfc3RhdHM7CisJcGQtPnByZXZfdHMgPSBwZC0+Y3Vycl90czsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2FwX2RwZGtfc2V0bm9uYmxvY2socGNhcF90ICpwLCBpbnQgbm9uYmxvY2speworCXN0cnVjdCBwY2FwX2RwZGsgKnBkID0gKHN0cnVjdCBwY2FwX2RwZGsqKShwLT5wcml2KTsKKwlwZC0+bm9uYmxvY2sgPSBub25ibG9jazsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2FwX2RwZGtfZ2V0bm9uYmxvY2socGNhcF90ICpwKXsKKwlzdHJ1Y3QgcGNhcF9kcGRrICpwZCA9IChzdHJ1Y3QgcGNhcF9kcGRrKikocC0+cHJpdik7CisJcmV0dXJuIHBkLT5ub25ibG9jazsKK30KK3N0YXRpYyBpbnQgY2hlY2tfbGlua19zdGF0dXModWludDE2X3QgcG9ydGlkLCBzdHJ1Y3QgcnRlX2V0aF9saW5rICpwbGluaykKK3sKKwkvLyB3YWl0IHVwIHRvIDkgc2Vjb25kcyB0byBnZXQgbGluayBzdGF0dXMKKwlydGVfZXRoX2xpbmtfZ2V0KHBvcnRpZCwgcGxpbmspOworCXJldHVybiBwbGluay0+bGlua19zdGF0dXMgPT0gRVRIX0xJTktfVVA7Cit9CitzdGF0aWMgdm9pZCBldGhfYWRkcl9zdHIoRVRIRVJfQUREUl9UWVBFICphZGRycCwgY2hhciogbWFjX3N0ciwgaW50IGxlbikKK3sKKwlpbnQgb2Zmc2V0PTA7CisJaWYgKGFkZHJwID09IE5VTEwpeworCQlzbnByaW50ZihtYWNfc3RyLCBsZW4tMSwgRFBES19ERUZfTUFDX0FERFIpOworCQlyZXR1cm47CisJfQorCWZvciAoaW50IGk9MDsgaTw2OyBpKyspCisJeworCQlpZiAob2Zmc2V0ID49IGxlbikKKwkJeyAvLyBidWZmZXIgb3ZlcmZsb3cKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoaT09MCkKKwkJeworCQkJc25wcmludGYobWFjX3N0citvZmZzZXQsIGxlbi0xLW9mZnNldCwgIiUwMlgiLGFkZHJwLT5hZGRyX2J5dGVzW2ldKTsKKwkJCW9mZnNldCs9MjsgLy8gRkYKKwkJfWVsc2V7CisJCQlzbnByaW50ZihtYWNfc3RyK29mZnNldCwgbGVuLTEtb2Zmc2V0LCAiOiUwMlgiLCBhZGRycC0+YWRkcl9ieXRlc1tpXSk7CisJCQlvZmZzZXQrPTM7IC8vIDpGRgorCQl9CisJfQorCXJldHVybjsKK30KKy8vIHJldHVybiBwb3J0aWQgYnkgZGV2aWNlIG5hbWUsIG90aGVyd2lzZSByZXR1cm4gLTEKK3N0YXRpYyB1aW50MTZfdCBwb3J0aWRfYnlfZGV2aWNlKGNoYXIgKiBkZXZpY2UpCit7CisJdWludDE2X3QgcmV0ID0gRFBES19QT1JUSURfTUFYOworCWludCBsZW4gPSBzdHJsZW4oZGV2aWNlKTsKKwlpbnQgcHJlZml4X2xlbiA9IHN0cmxlbihEUERLX1BSRUZJWCk7CisJdW5zaWduZWQgbG9uZyByZXRfdWwgPSAwTDsKKwljaGFyICpwRW5kOworCWlmIChsZW48PXByZWZpeF9sZW4gfHwgc3RybmNtcChkZXZpY2UsIERQREtfUFJFRklYLCBwcmVmaXhfbGVuKSkgLy8gY2hlY2sgcHJlZml4IGRwZGs6CisJeworCQlyZXR1cm4gcmV0OworCX0KKwkvL2NoZWNrIGFsbCBjaGFycyBhcmUgZGlnaXRhbAorCWZvciAoaW50IGk9cHJlZml4X2xlbjsgZGV2aWNlW2ldOyBpKyspeworCQlpZiAoZGV2aWNlW2ldPCcwJyB8fCBkZXZpY2VbaV0+JzknKXsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJcmV0X3VsID0gc3RydG91bCgmKGRldmljZVtwcmVmaXhfbGVuXSksICZwRW5kLCAxMCk7CisJaWYgKHBFbmQgPT0gJihkZXZpY2VbcHJlZml4X2xlbl0pIHx8ICpwRW5kICE9ICdcMCcpeworCQlyZXR1cm4gcmV0OworCX0KKwkvLyB0b28gbGFyZ2UgZm9yIHBvcnRpZAorCWlmIChyZXRfdWwgPj0gRFBES19QT1JUSURfTUFYKXsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gKHVpbnQxNl90KXJldF91bDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBhcnNlX2RwZGtfY2ZnKGNoYXIqIGRwZGtfY2ZnLGNoYXIqKiBkYXJndikKK3sKKwlpbnQgY250PTA7CisJbWVtc2V0KGRhcmd2LDAsc2l6ZW9mKGRhcmd2WzBdKSpEUERLX0FSR0NfTUFYKTsKKwkvL2N1cnJlbnQgcHJvY2VzcyBuYW1lCisJaW50IHNraXBfc3BhY2UgPSAxOworCWludCBpPTA7CisJUlRFX0xPRyhJTkZPLCBVU0VSMSwiZHBkayBjZmc6ICVzXG4iLGRwZGtfY2ZnKTsKKwkvLyBmaW5kIGZpcnN0IG5vbiBzcGFjZSBjaGFyCisJLy8gVGhlIGxhc3Qgb3B0IGlzIE5VTEwKKwlmb3IgKGk9MDtkcGRrX2NmZ1tpXSAmJiBjbnQ8RFBES19BUkdDX01BWC0xO2krKyl7CisJCWlmIChza2lwX3NwYWNlICYmIGRwZGtfY2ZnW2ldIT0nICcpeyAvLyBub3Qgc3BhY2UKKwkJCXNraXBfc3BhY2U9IXNraXBfc3BhY2U7IC8vIHNraXAgbm9ybWFsIGNoYXIKKwkJCWRhcmd2W2NudCsrXSA9IGRwZGtfY2ZnK2k7CisJCX0KKwkJaWYgKCFza2lwX3NwYWNlICYmIGRwZGtfY2ZnW2ldPT0nICcpeyAvLyBmaW50IGEgc3BhY2UKKwkJCWRwZGtfY2ZnW2ldPTB4MDA7IC8vIGVuZCBvZiB0aGlzIG9wdAorCQkJc2tpcF9zcGFjZT0hc2tpcF9zcGFjZTsgLy8gc2tpcCBzcGFjZSBjaGFyCisJCX0KKwl9CisJZGFyZ3ZbY250XT1OVUxMOworCXJldHVybiBjbnQ7Cit9CisKKy8vIG9ubHkgY2FsbGVkIG9uY2UKKy8vIFJldHVybnM6CisvLworLy8gICAgMSBvbiBzdWNjZXNzOworLy8KKy8vICAgIDAgaWYgInRoZSBFQUwgY2Fubm90IGluaXRpYWxpemUgb24gdGhpcyBzeXN0ZW0iLCB3aGljaCB3ZSB0cmVhdCBhcworLy8gICAgbWVhbmluZyAiRFBESyBpc24ndCBhdmFpbGFibGUiOworLy8KKy8vICAgIGEgUENBUF9FUlJPUl8gY29kZSBmb3Igb3RoZXIgZXJyb3JzLgorLy8KKy8vIElmIGVhY2Nlc3Nfbm90X2ZhdGFsIGlzIG5vbi16ZXJvLCB0cmVhdCAiYSBwZXJtaXNzaW9ucyBpc3N1ZSIgdGhlIHdheQorLy8gd2UgdHJlYXQgInRoZSBFQUwgY2Fubm90IGluaXRpYWxpemUgb24gdGhpcyBzeXN0ZW0iLiAgV2UgdXNlIHRoYXQKKy8vIHdoZW4gdHJ5aW5nIHRvIGZpbmQgRFBESyBkZXZpY2VzLCBhcyB3ZSBkb24ndCB3YW50IHRvIGZhaWwgdG8gcmV0dXJuCisvLyAqYW55KiBkZXZpY2VzIGp1c3QgYmVjYXVzZSB3ZSBjYW4ndCBzdXBwb3J0IERQREs7IHdoZW4gd2UncmUgdHJ5aW5nCisvLyB0byBvcGVuIGEgZGV2aWNlLCB3ZSBuZWVkIHRvIHJldHVybiBhIHBlcm1pc3Npb25zIGVycm9yIGluIHRoYXQgY2FzZS4KK3N0YXRpYyBpbnQgZHBka19wcmVfaW5pdChjaGFyICogZWJ1ZiwgaW50IGVhY2Nlc3Nfbm90X2ZhdGFsKQoreworCWludCBkYXJndl9jbnQ9MDsKKwljaGFyICpkYXJndltEUERLX0FSR0NfTUFYXTsKKwljaGFyICpwdHJfZHBka19jZmcgPSBOVUxMOworCWludCByZXQ7CisJLy8gZ2xvYmFsZSB2YXIKKwlpZiAoaXNfZHBka19wcmVfaW5pdGVkICE9IDApCisJeworCQkvLyBhbHJlYWR5IGluaXRlZDsgZGlkIHRoYXQgc3VjY2VlZD8KKwkJaWYgKGlzX2RwZGtfcHJlX2luaXRlZCA8IDApCisJCXsKKwkJCS8vIGZhaWxlZAorCQkJZ290byBlcnJvcjsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIHN1Y2NlZWRlZAorCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJLy8gaW5pdCBFQUwKKwlwdHJfZHBka19jZmcgPSBnZXRlbnYoRFBES19DRkdfRU5WX05BTUUpOworCS8vIHNldCBkZWZhdWx0IGxvZyBsZXZlbCB0byBkZWJ1ZworCXJ0ZV9sb2dfc2V0X2dsb2JhbF9sZXZlbChEUERLX0RFRl9MT0dfTEVWKTsKKwlpZiAocHRyX2RwZGtfY2ZnID09IE5VTEwpCisJeworCQlSVEVfTE9HKElORk8sVVNFUjEsImVudiAkRFBES19DRkcgaXMgdW5zZXQsIHNvIHVzaW5nIGRlZmF1bHQ6ICVzXG4iLERQREtfREVGX0NGRyk7CisJCXB0cl9kcGRrX2NmZyA9IERQREtfREVGX0NGRzsKKwl9CisJbWVtc2V0KGRwZGtfY2ZnX2J1ZiwwLHNpemVvZihkcGRrX2NmZ19idWYpKTsKKwlzbnByaW50ZihkcGRrX2NmZ19idWYsRFBES19DRkdfTUFYX0xFTi0xLCIlcyAlcyIsRFBES19MSUJfTkFNRSxwdHJfZHBka19jZmcpOworCWRhcmd2X2NudCA9IHBhcnNlX2RwZGtfY2ZnKGRwZGtfY2ZnX2J1ZixkYXJndik7CisJcmV0ID0gcnRlX2VhbF9pbml0KGRhcmd2X2NudCxkYXJndik7CisJaWYgKHJldCA9PSAtMSkKKwl7CisJCS8vIEluZGljYXRlIHRoYXQgd2UndmUgY2FsbGVkIHJ0ZV9lYWxfaW5pdCgpIGJ5IHNldHRpbmcKKwkJLy8gaXNfZHBka19wcmVfaW5pdGVkIHRvIHRoZSBuZWdhdGl2ZSBvZiB0aGUgZXJyb3IgY29kZSwKKwkJLy8gYW5kIHByb2Nlc3MgdGhlIGVycm9yLgorCQlpc19kcGRrX3ByZV9pbml0ZWQgPSAtcnRlX2Vycm5vOworCQlnb3RvIGVycm9yOworCX0KKwkvLyBpbml0IHN1Y2NlZWRlZCwgc28gd2UgZG8gbm90IG5lZWQgdG8gZG8gaXQgYWdhaW4gbGF0ZXIuCisJaXNfZHBka19wcmVfaW5pdGVkID0gMTsKKwlyZXR1cm4gMTsKKworZXJyb3I6CisJc3dpdGNoICgtaXNfZHBka19wcmVfaW5pdGVkKQorCXsKKwkJY2FzZSBFQUNDRVM6CisJCQkvLyBUaGlzICJpbmRpY2F0ZXMgYSBwZXJtaXNzaW9ucyBpc3N1ZS4iLgorCQkJUlRFX0xPRyhFUlIsIFVTRVIxLCAiJXNcbiIsIERQREtfRVJSX1BFUk1fTVNHKTsKKwkJCS8vIElmIHdlIHdlcmUgdG9sZCB0byB0cmVhdCB0aGlzIGFzIGp1c3QgbWVhbmluZworCQkJLy8gRFBESyBpc24ndCBhdmFpbGFibGUsIGRvIHNvLgorCQkJaWYgKGVhY2Nlc3Nfbm90X2ZhdGFsKQorCQkJCXJldHVybiAwOworCQkJLy8gT3RoZXJ3aXNlIHJlcG9ydCBhIGZhdGFsIGVycm9yLgorCQkJc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCSAgICAiRFBESyByZXF1aXJlcyB0aGF0IGl0IHJ1biBhcyByb290Iik7CisJCQlyZXR1cm4gUENBUF9FUlJPUl9QRVJNX0RFTklFRDsKKworCQljYXNlIEVBR0FJTjoKKwkJCS8vIFRoaXMgImluZGljYXRlcyBlaXRoZXIgYSBidXMgb3Igc3lzdGVtCisJCQkvLyByZXNvdXJjZSB3YXMgbm90IGF2YWlsYWJsZSwgc2V0dXAgbWF5CisJCQkvLyBiZSBhdHRlbXB0ZWQgYWdhaW4uIgorCQkJLy8gVGhlcmUncyBubyBzdWNoIGVycm9yIGluIHBjYXAsIHNvIEknbQorCQkJLy8gbm90IHN1cmUgd2hhdCB3ZSBzaG91bGQgZG8gaGVyZS4KKwkJCXNucHJpbnRmKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkgICAgIkJ1cyBvciBzeXN0ZW0gcmVzb3VyY2Ugd2FzIG5vdCBhdmFpbGFibGUiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgRUFMUkVBRFk6CisJCQkvLyBUaGlzICJpbmRpY2F0ZXMgdGhhdCB0aGUgcnRlX2VhbF9pbml0CisJCQkvLyBmdW5jdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCwgYW5kCisJCQkvLyBjYW5ub3QgYmUgY2FsbGVkIGFnYWluLiIKKwkJCS8vIFRoYXQncyBub3QgYW4gZXJyb3I7IHNldCB0aGUgIndlJ3ZlCisJCQkvLyBiZWVuIGhlcmUgYmVmb3JlIiBmbGFnIGFuZCByZXR1cm4KKwkJCS8vIHN1Y2Nlc3MuCisJCQlpc19kcGRrX3ByZV9pbml0ZWQgPSAxOworCQkJcmV0dXJuIDE7CisKKwkJY2FzZSBFRkFVTFQ6CisJCQkvLyBUaGlzICJpbmRpY2F0ZXMgdGhlIHRhaWxxIGNvbmZpZ3VyYXRpb24KKwkJCS8vIG5hbWUgd2FzIG5vdCBmb3VuZCBpbiBtZW1vcnkgY29uZmlndXJhdGlvbi4iCisJCQlzbnByaW50ZihlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJICAgICJUaGUgdGFpbHEgY29uZmlndXJhdGlvbiBuYW1lIHdhcyBub3QgZm91bmQgaW4gdGhlIG1lbW9yeSBjb25maWd1cmF0aW9uIik7CisJCQlyZXR1cm4gUENBUF9FUlJPUjsKKworCQljYXNlIEVJTlZBTDoKKwkJCS8vIFRoaXMgImluZGljYXRlcyBpbnZhbGlkIHBhcmFtZXRlcnMgd2VyZQorCQkJLy8gcGFzc2VkIGFzIGFyZ3YvYXJnYy4iICBUaG9zZSBjYW1lIGZyb20KKwkJCS8vIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisJCQlzbnByaW50ZihlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJICAgICJUaGUgY29uZmlndXJhdGlvbiBmaWxlIGhhcyBpbnZhbGlkIHBhcmFtZXRlcnMiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgRU5PTUVNOgorCQkJLy8gVGhpcyAiaW5kaWNhdGVzIGZhaWx1cmUgbGlrZWx5IGNhdXNlZCBieQorCQkJLy8gYW4gb3V0LW9mLW1lbW9yeSBjb25kaXRpb24uIgorCQkJc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCSAgICAiT3V0IG9mIG1lbW9yeSIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBFTk9ERVY6CisJCQkvLyBUaGlzICJpbmRpY2F0ZXMgbWVtb3J5IHNldHVwIGlzc3Vlcy4iCisJCQlzbnByaW50ZihlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJICAgICJBbiBlcnJvciBvY2N1cnJlZCBzZXR0aW5nIHVwIG1lbW9yeSIpOworCQkJYnJlYWs7CisKKwkJY2FzZSBFTk9UU1VQOgorCQkJLy8gVGhpcyAiaW5kaWNhdGVzIHRoYXQgdGhlIEVBTCBjYW5ub3QKKwkJCS8vIGluaXRpYWxpemUgb24gdGhpcyBzeXN0ZW0uIiAgV2UgdHJlYXQKKwkJCS8vIHRoYXQgYXMgbWVhbmluZyBEUERLIGlzbid0IGF2YWlsYWJsZQorCQkJLy8gb24gdGhpcyBtYWNoaW5lLCByYXRoZXIgdGhhbiBhcyBhCisJCQkvLyBmYXRhbCBlcnJvciwgYW5kIGxldCBvdXIgY2FsbGVyIGRlY2lkZQorCQkJLy8gd2hldGhlciB0aGF0J3MgYSBmYXRhbCBlcnJvciAoaWYgdHJ5aW5nCisJCQkvLyB0byBhY3RpdmF0ZSBhIERQREsgZGV2aWNlKSBvciBub3QgKGlmCisJCQkvLyB0cnlpbmcgdG8gZW51bWVyYXRlIGRldmljZXMpLgorCQkJcmV0dXJuIDA7CisKKwkJY2FzZSBFUFJPVE86CisJCQkvLyBUaGlzICJpbmRpY2F0ZXMgdGhhdCB0aGUgUENJIGJ1cyBpcworCQkJLy8gZWl0aGVyIG5vdCBwcmVzZW50LCBvciBpcyBub3QgcmVhZGFibGUKKwkJCS8vIGJ5IHRoZSBlYWwuIiAgRG9lcyAidGhlIFBDSSBidXMgaXMgbm90CisJCQkvLyBwcmVzZW50IiBtZWFuICJ0aGlzIG1hY2hpbmUgaGFzIG5vIFBDSQorCQkJLy8gYnVzIiwgd2hpY2ggc3RyaWtlcyBtZSBhcyBhICJub3QgYXZhaWxhYmxlIgorCQkJLy8gY2FzZT8gIElmIHNvLCBzaG91bGQgImlzIG5vdCByZWFkYWJsZSBieQorCQkJLy8gdGhlIEVBTCIgYWxzbyBzb21ldGhpbmcgd2Ugc2hvdWxkIHRyZWF0CisJCQkvLyBhcyBhICJub3QgYXZhaWxhYmxlIiBjYXNlPyAgSWYgbm90LCB3ZQorCQkJLy8gY2FuJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgdHdvLCBzbworCQkJLy8gd2UncmUgc3R1Y2suCisJCQlzbnByaW50ZihlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJICAgICJQQ0kgYnVzIGlzIG5vdCBwcmVzZW50IG9yIG5vdCByZWFkYWJsZSBieSB0aGUgRUFMIik7CisJCQlicmVhazsKKworCQljYXNlIEVOT0VYRUM6CisJCQkvLyBUaGlzICJpbmRpY2F0ZXMgdGhhdCBhIHNlcnZpY2UgY29yZQorCQkJLy8gZmFpbGVkIHRvIGxhdW5jaCBzdWNjZXNzZnVsbHkuIgorCQkJc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCSAgICAiQSBzZXJ2aWNlIGNvcmUgZmFpbGVkIHRvIGxhdW5jaCBzdWNjZXNzZnVsbHkiKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvLworCQkJLy8gVGhhdCdzIG5vdCBpbiB0aGUgbGlzdCBvZiBlcnJvcnMgaW4KKwkJCS8vIHRoZSBkb2N1bWVudGF0aW9uOyBsZXQgaXQgYmUgcmVwb3J0ZWQKKwkJCS8vIGFzIGFuIGVycm9yLgorCQkJLy8KKwkJCWRwZGtfZm10X2Vycm1zZ19mb3JfcnRlX2Vycm5vKGVidWYsCisJCQkgICAgUENBUF9FUlJCVUZfU0laRSwgLWlzX2RwZGtfcHJlX2luaXRlZCwKKwkJCSAgICAiZHBkayBlcnJvcjogZHBka19wcmVfaW5pdCBmYWlsZWQiKTsKKwkJCWJyZWFrOworCX0KKwkvLyBFcnJvci4KKwlyZXR1cm4gUENBUF9FUlJPUjsKK30KKworc3RhdGljIGludCBwY2FwX2RwZGtfYWN0aXZhdGUocGNhcF90ICpwKQoreworCXN0cnVjdCBwY2FwX2RwZGsgKnBkID0gcC0+cHJpdjsKKwlwZC0+b3JpZyA9IHA7CisJaW50IHJldCA9IFBDQVBfRVJST1I7CisJdWludDE2X3QgbmJfcG9ydHM9MDsKKwl1aW50MTZfdCBwb3J0aWQ9IERQREtfUE9SVElEX01BWDsKKwl1bnNpZ25lZCBuYl9tYnVmcyA9IERQREtfTkJfTUJVRlM7CisJc3RydWN0IHJ0ZV9ldGhfcnhjb25mIHJ4cV9jb25mOworCXN0cnVjdCBydGVfZXRoX3R4Y29uZiB0eHFfY29uZjsKKwlzdHJ1Y3QgcnRlX2V0aF9jb25mIGxvY2FsX3BvcnRfY29uZiA9IHBvcnRfY29uZjsKKwlzdHJ1Y3QgcnRlX2V0aF9kZXZfaW5mbyBkZXZfaW5mbzsKKwlpbnQgaXNfcG9ydF91cCA9IDA7CisJc3RydWN0IHJ0ZV9ldGhfbGluayBsaW5rOworCWRveworCQkvL2luaXQgRUFMOyBmYWlsIGlmIHdlIGhhdmUgaW5zdWZmaWNpZW50IHBlcm1pc3Npb24KKwkJY2hhciBkcGRrX3ByZV9pbml0X2VycmJ1ZltQQ0FQX0VSUkJVRl9TSVpFXTsKKwkJcmV0ID0gZHBka19wcmVfaW5pdChkcGRrX3ByZV9pbml0X2VycmJ1ZiwgMCk7CisJCWlmIChyZXQgPCAwKQorCQl7CisJCQkvLyBUaGlzIHJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBhbiBlcnJvci4KKwkJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCSAgICAiQ2FuJ3Qgb3BlbiBkZXZpY2UgJXM6ICVzIiwKKwkJCSAgICBwLT5vcHQuZGV2aWNlLCBkcGRrX3ByZV9pbml0X2VycmJ1Zik7CisJCQkvLyByZXQgaXMgc2V0IHRvIHRoZSBjb3JyZWN0IGVycm9yCisJCQlicmVhazsKKwkJfQorCQlpZiAocmV0ID09IDApCisJCXsKKwkJCS8vIFRoaXMgbWVhbnMgRFBESyBpc24ndCBhdmFpbGFibGUgb24gdGhpcyBtYWNoaW5lLgorCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJICAgICJDYW4ndCBvcGVuIGRldmljZSAlczogRFBESyBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgbWFjaGluZSIsCisJCQkgICAgcC0+b3B0LmRldmljZSk7CisJCQlyZXR1cm4gUENBUF9FUlJPUl9OT19TVUNIX0RFVklDRTsKKwkJfQorCisJCXJldCA9IGRwZGtfaW5pdF90aW1lcihwZCk7CisJCWlmIChyZXQ8MCkKKwkJeworCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJCSJkcGRrIGVycm9yOiBJbml0IHRpbWVyIGlzIHplcm8gd2l0aCBkZXZpY2UgJXMiLAorCQkJCXAtPm9wdC5kZXZpY2UpOworCQkJcmV0ID0gUENBUF9FUlJPUjsKKwkJCWJyZWFrOworCQl9CisKKwkJbmJfcG9ydHMgPSBydGVfZXRoX2Rldl9jb3VudF9hdmFpbCgpOworCQlpZiAobmJfcG9ydHMgPT0gMCkKKwkJeworCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJICAgICJkcGRrIGVycm9yOiBObyBFdGhlcm5ldCBwb3J0cyIpOworCQkJcmV0ID0gUENBUF9FUlJPUjsKKwkJCWJyZWFrOworCQl9CisKKwkJcG9ydGlkID0gcG9ydGlkX2J5X2RldmljZShwLT5vcHQuZGV2aWNlKTsKKwkJaWYgKHBvcnRpZCA9PSBEUERLX1BPUlRJRF9NQVgpeworCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJICAgICJkcGRrIGVycm9yOiBwb3J0aWQgaXMgaW52YWxpZC4gZGV2aWNlICVzIiwKKwkJCSAgICBwLT5vcHQuZGV2aWNlKTsKKwkJCXJldCA9IFBDQVBfRVJST1JfTk9fU1VDSF9ERVZJQ0U7CisJCQlicmVhazsKKwkJfQorCisJCXBkLT5wb3J0aWQgPSBwb3J0aWQ7CisKKwkJaWYgKHAtPnNuYXBzaG90IDw9IDAgfHwgcC0+c25hcHNob3QgPiBNQVhJTVVNX1NOQVBMRU4pCisJCXsKKwkJCXAtPnNuYXBzaG90ID0gTUFYSU1VTV9TTkFQTEVOOworCQl9CisJCS8vIGNyZWF0ZSB0aGUgbWJ1ZiBwb29sCisJCXBkLT5wa3RtYnVmX3Bvb2wgPSBydGVfcGt0bWJ1Zl9wb29sX2NyZWF0ZShNQlVGX1BPT0xfTkFNRSwgbmJfbWJ1ZnMsCisJCQlNRU1QT09MX0NBQ0hFX1NJWkUsIDAsIFJURV9NQlVGX0RFRkFVTFRfQlVGX1NJWkUsCisJCQlydGVfc29ja2V0X2lkKCkpOworCQlpZiAocGQtPnBrdG1idWZfcG9vbCA9PSBOVUxMKQorCQl7CisJCQlkcGRrX2ZtdF9lcnJtc2dfZm9yX3J0ZV9lcnJubyhwLT5lcnJidWYsCisJCQkgICAgUENBUF9FUlJCVUZfU0laRSwgcnRlX2Vycm5vLAorCQkJICAgICJkcGRrIGVycm9yOiBDYW5ub3QgaW5pdCBtYnVmIHBvb2wiKTsKKwkJCXJldCA9IFBDQVBfRVJST1I7CisJCQlicmVhazsKKwkJfQorCQkvLyBjb25maWcgZGV2CisJCXJ0ZV9ldGhfZGV2X2luZm9fZ2V0KHBvcnRpZCwgJmRldl9pbmZvKTsKKwkJaWYgKGRldl9pbmZvLnR4X29mZmxvYWRfY2FwYSAmIERFVl9UWF9PRkZMT0FEX01CVUZfRkFTVF9GUkVFKQorCQl7CisJCQlsb2NhbF9wb3J0X2NvbmYudHhtb2RlLm9mZmxvYWRzIHw9REVWX1RYX09GRkxPQURfTUJVRl9GQVNUX0ZSRUU7CisJCX0KKwkJLy8gb25seSBzdXBwb3J0IDEgcXVldWUKKwkJcmV0ID0gcnRlX2V0aF9kZXZfY29uZmlndXJlKHBvcnRpZCwgMSwgMSwgJmxvY2FsX3BvcnRfY29uZik7CisJCWlmIChyZXQgPCAwKQorCQl7CisJCQlkcGRrX2ZtdF9lcnJtc2dfZm9yX3J0ZV9lcnJubyhwLT5lcnJidWYsCisJCQkgICAgUENBUF9FUlJCVUZfU0laRSwgLXJldCwKKwkJCSAgICAiZHBkayBlcnJvcjogQ2Fubm90IGNvbmZpZ3VyZSBkZXZpY2U6IHBvcnQ9JXUiLAorCQkJICAgIHBvcnRpZCk7CisJCQlyZXQgPSBQQ0FQX0VSUk9SOworCQkJYnJlYWs7CisJCX0KKwkJLy8gYWRqdXN0IHJ4IHR4CisJCXJldCA9IHJ0ZV9ldGhfZGV2X2FkanVzdF9uYl9yeF90eF9kZXNjKHBvcnRpZCwgJm5iX3J4ZCwgJm5iX3R4ZCk7CisJCWlmIChyZXQgPCAwKQorCQl7CisJCQlkcGRrX2ZtdF9lcnJtc2dfZm9yX3J0ZV9lcnJubyhwLT5lcnJidWYsCisJCQkgICAgUENBUF9FUlJCVUZfU0laRSwgLXJldCwKKwkJCSAgICAiZHBkayBlcnJvcjogQ2Fubm90IGFkanVzdCBudW1iZXIgb2YgZGVzY3JpcHRvcnM6IHBvcnQ9JXUiLAorCQkJICAgIHBvcnRpZCk7CisJCQlyZXQgPSBQQ0FQX0VSUk9SOworCQkJYnJlYWs7CisJCX0KKwkJLy8gZ2V0IE1BQyBhZGRyCisJCXJ0ZV9ldGhfbWFjYWRkcl9nZXQocG9ydGlkLCAmKHBkLT5ldGhfYWRkcikpOworCQlldGhfYWRkcl9zdHIoJihwZC0+ZXRoX2FkZHIpLCBwZC0+bWFjX2FkZHIsIERQREtfTUFDX0FERFJfU0laRS0xKTsKKworCQkvLyBpbml0IG9uZSBSWCBxdWV1ZQorCQlyeHFfY29uZiA9IGRldl9pbmZvLmRlZmF1bHRfcnhjb25mOworCQlyeHFfY29uZi5vZmZsb2FkcyA9IGxvY2FsX3BvcnRfY29uZi5yeG1vZGUub2ZmbG9hZHM7CisJCXJldCA9IHJ0ZV9ldGhfcnhfcXVldWVfc2V0dXAocG9ydGlkLCAwLCBuYl9yeGQsCisJCQkJCSAgICAgcnRlX2V0aF9kZXZfc29ja2V0X2lkKHBvcnRpZCksCisJCQkJCSAgICAgJnJ4cV9jb25mLAorCQkJCQkgICAgIHBkLT5wa3RtYnVmX3Bvb2wpOworCQlpZiAocmV0IDwgMCkKKwkJeworCQkJZHBka19mbXRfZXJybXNnX2Zvcl9ydGVfZXJybm8ocC0+ZXJyYnVmLAorCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsIC1yZXQsCisJCQkgICAgImRwZGsgZXJyb3I6IHJ0ZV9ldGhfcnhfcXVldWVfc2V0dXA6cG9ydD0ldSIsCisJCQkgICAgcG9ydGlkKTsKKwkJCXJldCA9IFBDQVBfRVJST1I7CisJCQlicmVhazsKKwkJfQorCisJCS8vIGluaXQgb25lIFRYIHF1ZXVlCisJCXR4cV9jb25mID0gZGV2X2luZm8uZGVmYXVsdF90eGNvbmY7CisJCXR4cV9jb25mLm9mZmxvYWRzID0gbG9jYWxfcG9ydF9jb25mLnR4bW9kZS5vZmZsb2FkczsKKwkJcmV0ID0gcnRlX2V0aF90eF9xdWV1ZV9zZXR1cChwb3J0aWQsIDAsIG5iX3R4ZCwKKwkJCQlydGVfZXRoX2Rldl9zb2NrZXRfaWQocG9ydGlkKSwKKwkJCQkmdHhxX2NvbmYpOworCQlpZiAocmV0IDwgMCkKKwkJeworCQkJZHBka19mbXRfZXJybXNnX2Zvcl9ydGVfZXJybm8ocC0+ZXJyYnVmLAorCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsIC1yZXQsCisJCQkgICAgImRwZGsgZXJyb3I6IHJ0ZV9ldGhfdHhfcXVldWVfc2V0dXA6cG9ydD0ldSIsCisJCQkgICAgcG9ydGlkKTsKKwkJCXJldCA9IFBDQVBfRVJST1I7CisJCQlicmVhazsKKwkJfQorCQkvLyBJbml0aWFsaXplIFRYIGJ1ZmZlcnMKKwkJdHhfYnVmZmVyID0gcnRlX3ptYWxsb2Nfc29ja2V0KERQREtfVFhfQlVGX05BTUUsCisJCQkJUlRFX0VUSF9UWF9CVUZGRVJfU0laRShNQVhfUEtUX0JVUlNUKSwgMCwKKwkJCQlydGVfZXRoX2Rldl9zb2NrZXRfaWQocG9ydGlkKSk7CisJCWlmICh0eF9idWZmZXIgPT0gTlVMTCkKKwkJeworCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJICAgICJkcGRrIGVycm9yOiBDYW5ub3QgYWxsb2NhdGUgYnVmZmVyIGZvciB0eCBvbiBwb3J0ICV1IiwgcG9ydGlkKTsKKwkJCXJldCA9IFBDQVBfRVJST1I7CisJCQlicmVhazsKKwkJfQorCQlydGVfZXRoX3R4X2J1ZmZlcl9pbml0KHR4X2J1ZmZlciwgTUFYX1BLVF9CVVJTVCk7CisJCS8vIFN0YXJ0IGRldmljZQorCQlyZXQgPSBydGVfZXRoX2Rldl9zdGFydChwb3J0aWQpOworCQlpZiAocmV0IDwgMCkKKwkJeworCQkJZHBka19mbXRfZXJybXNnX2Zvcl9ydGVfZXJybm8ocC0+ZXJyYnVmLAorCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsIC1yZXQsCisJCQkgICAgImRwZGsgZXJyb3I6IHJ0ZV9ldGhfZGV2X3N0YXJ0OnBvcnQ9JXUiLAorCQkJICAgIHBvcnRpZCk7CisJCQlyZXQgPSBQQ0FQX0VSUk9SOworCQkJYnJlYWs7CisJCX0KKwkJLy8gc2V0IHByb21pc2N1b3VzIG1vZGUKKwkJaWYgKHAtPm9wdC5wcm9taXNjKXsKKwkJCXBkLT5tdXN0X2NsZWFyX3Byb21pc2M9MTsKKwkJCXJ0ZV9ldGhfcHJvbWlzY3VvdXNfZW5hYmxlKHBvcnRpZCk7CisJCX0KKwkJLy8gY2hlY2sgbGluayBzdGF0dXMKKwkJaXNfcG9ydF91cCA9IGNoZWNrX2xpbmtfc3RhdHVzKHBvcnRpZCwgJmxpbmspOworCQlpZiAoIWlzX3BvcnRfdXApeworCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJICAgICJkcGRrIGVycm9yOiBsaW5rIGlzIGRvd24sIHBvcnQ9JXUiLHBvcnRpZCk7CisJCQlyZXQgPSBQQ0FQX0VSUk9SX0lGQUNFX05PVF9VUDsKKwkJCWJyZWFrOworCQl9CisJCS8vIHJlc2V0IHN0YXRpc3RpY3MKKwkJcnRlX2V0aF9zdGF0c19yZXNldChwZC0+cG9ydGlkKTsKKwkJY2FsY3VsYXRlX3RpbWVzdGFtcCgmKHBkLT50c19oZWxwZXIpLCAmKHBkLT5wcmV2X3RzKSk7CisJCXJ0ZV9ldGhfc3RhdHNfZ2V0KHBkLT5wb3J0aWQsJihwZC0+cHJldl9zdGF0cykpOworCQkvLyBmb3JtYXQgcGNhcF90CisJCXBkLT5wb3J0aWQgPSBwb3J0aWQ7CisJCXAtPmZkID0gcGQtPnBvcnRpZDsKKwkJaWYgKHAtPnNuYXBzaG90IDw9MCB8fCBwLT5zbmFwc2hvdD4gTUFYSU1VTV9TTkFQTEVOKQorCQl7CisJCQlwLT5zbmFwc2hvdCA9IE1BWElNVU1fU05BUExFTjsKKwkJfQorCQlwLT5saW5rdHlwZSA9IERMVF9FTjEwTUI7IC8vIEV0aGVybmV0LCB0aGUgMTBNQiBpcyBoaXN0b3JpY2FsLgorCQlwLT5zZWxlY3RhYmxlX2ZkID0gcC0+ZmQ7CisJCXAtPnJlYWRfb3AgPSBwY2FwX2RwZGtfZGlzcGF0Y2g7CisJCXAtPmluamVjdF9vcCA9IHBjYXBfZHBka19pbmplY3Q7CisJCS8vIHVzaW5nIHBjYXBfZmlsdGVyIGN1cnJlbnRseSwgdGhvdWdoIERQREsgcHJvdmlkZXMgdGhlaXIgb3duIEJQRiBmdW5jdGlvbi4gQmVjYXVzZSBEUERLIEJQRiBuZWVkcyBsb2FkIGEgRUxGIGZpbGUgYXMgYSBmaWx0ZXIuCisJCXAtPnNldGZpbHRlcl9vcCA9IGluc3RhbGxfYnBmX3Byb2dyYW07CisJCXAtPnNldGRpcmVjdGlvbl9vcCA9IE5VTEw7CisJCXAtPnNldF9kYXRhbGlua19vcCA9IE5VTEw7CisJCXAtPmdldG5vbmJsb2NrX29wID0gcGNhcF9kcGRrX2dldG5vbmJsb2NrOworCQlwLT5zZXRub25ibG9ja19vcCA9IHBjYXBfZHBka19zZXRub25ibG9jazsKKwkJcC0+c3RhdHNfb3AgPSBwY2FwX2RwZGtfc3RhdHM7CisJCXAtPmNsZWFudXBfb3AgPSBwY2FwX2RwZGtfY2xvc2U7CisJCXAtPmJyZWFrbG9vcF9vcCA9IHBjYXBfYnJlYWtsb29wX2NvbW1vbjsKKwkJLy8gc2V0IGRlZmF1bHQgdGltZW91dAorCQlwZC0+cmVxdWlyZWRfc2VsZWN0X3RpbWVvdXQudHZfc2VjID0gMDsKKwkJcGQtPnJlcXVpcmVkX3NlbGVjdF90aW1lb3V0LnR2X3VzZWMgPSBEUERLX0RFRl9NSU5fU0xFRVBfTVMqMTAwMDsKKwkJcC0+cmVxdWlyZWRfc2VsZWN0X3RpbWVvdXQgPSAmcGQtPnJlcXVpcmVkX3NlbGVjdF90aW1lb3V0OworCQlyZXQgPSAwOyAvLyBPSworCX13aGlsZSgwKTsKKworCWlmIChyZXQgPD0gUENBUF9FUlJPUikgLy8gYWxsIGtpbmRzIG9mIGVycm9yIGNvZGUKKwl7CisJCXBjYXBfY2xlYW51cF9saXZlX2NvbW1vbihwKTsKKwl9ZWxzZXsKKwkJcnRlX2V0aF9kZXZfZ2V0X25hbWVfYnlfcG9ydChwb3J0aWQscGQtPnBjaV9hZGRyKTsKKwkJUlRFX0xPRyhJTkZPLCBVU0VSMSwiUG9ydCAlZCBkZXZpY2U6ICVzLCBNQUM6JXMsIFBDSTolc1xuIiwgcG9ydGlkLCBwLT5vcHQuZGV2aWNlLCBwZC0+bWFjX2FkZHIsIHBkLT5wY2lfYWRkcik7CisJCVJURV9MT0coSU5GTywgVVNFUjEsIlBvcnQgJWQgTGluayBVcC4gU3BlZWQgJXUgTWJwcyAtICVzXG4iLAorCQkJCQkJCXBvcnRpZCwgbGluay5saW5rX3NwZWVkLAorCQkJCQkobGluay5saW5rX2R1cGxleCA9PSBFVEhfTElOS19GVUxMX0RVUExFWCkgPworCQkJCQkJKCJmdWxsLWR1cGxleCIpIDogKCJoYWxmLWR1cGxleFxuIikpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvLyBkZXZpY2UgbmFtZSBmb3IgZHBkayBzaG91bGQgYmUgaW4gdGhlIGZvcm0gYXMgZHBkazpudW1iZXIsIHN1Y2ggYXMgZHBkazowCitwY2FwX3QgKiBwY2FwX2RwZGtfY3JlYXRlKGNvbnN0IGNoYXIgKmRldmljZSwgY2hhciAqZWJ1ZiwgaW50ICppc19vdXJzKQoreworCXBjYXBfdCAqcD1OVUxMOworCSppc19vdXJzID0gMDsKKworCSppc19vdXJzID0gIXN0cm5jbXAoZGV2aWNlLCAiZHBkazoiLCA1KTsKKwlpZiAoISAqaXNfb3VycykKKwkJcmV0dXJuIE5VTEw7CisJLy9tZW1zZXQgd2lsbCBoYXBwZW4KKwlwID0gUENBUF9DUkVBVEVfQ09NTU9OKGVidWYsIHN0cnVjdCBwY2FwX2RwZGspOworCisJaWYgKHAgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJcC0+YWN0aXZhdGVfb3AgPSBwY2FwX2RwZGtfYWN0aXZhdGU7CisJcmV0dXJuIHA7Cit9CisKK2ludCBwY2FwX2RwZGtfZmluZGFsbGRldnMocGNhcF9pZl9saXN0X3QgKmRldmxpc3RwLCBjaGFyICplYnVmKQoreworCWludCByZXQ9MDsKKwl1bnNpZ25lZCBpbnQgbmJfcG9ydHMgPSAwOworCWNoYXIgZHBka19uYW1lW0RQREtfREVWX05BTUVfTUFYXTsKKwljaGFyIGRwZGtfZGVzY1tEUERLX0RFVl9ERVNDX01BWF07CisJRVRIRVJfQUREUl9UWVBFIGV0aF9hZGRyOworCWNoYXIgbWFjX2FkZHJbRFBES19NQUNfQUREUl9TSVpFXTsKKwljaGFyIHBjaV9hZGRyW0RQREtfUENJX0FERFJfU0laRV07CisJZG97CisJCS8vIGluaXQgRUFMOyByZXR1cm4gIkRQREsgbm90IGF2YWlsYWJsZSIgaWYgd2UKKwkJLy8gaGF2ZSBpbnN1ZmZpY2llbnQgcGVybWlzc2lvbgorCQljaGFyIGRwZGtfcHJlX2luaXRfZXJyYnVmW1BDQVBfRVJSQlVGX1NJWkVdOworCQlyZXQgPSBkcGRrX3ByZV9pbml0KGRwZGtfcHJlX2luaXRfZXJyYnVmLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCXsKKwkJCS8vIFRoaXMgcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIG9uIGFuIGVycm9yLgorCQkJc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCSAgICAiQ2FuJ3QgbG9vayBmb3IgRFBESyBkZXZpY2VzOiAlcyIsCisJCQkgICAgZHBka19wcmVfaW5pdF9lcnJidWYpOworCQkJcmV0ID0gUENBUF9FUlJPUjsKKwkJCWJyZWFrOworCQl9CisJCWlmIChyZXQgPT0gMCkKKwkJeworCQkJLy8gVGhpcyBtZWFucyBEUERLIGlzbid0IGF2YWlsYWJsZSBvbiB0aGlzIG1hY2hpbmUuCisJCQkvLyBUaGF0IGp1c3QgbWVhbnMgImRvbid0IHJldHVybiBhbnkgZGV2aWNlcyIuCisJCQlicmVhazsKKwkJfQorCQluYl9wb3J0cyA9IHJ0ZV9ldGhfZGV2X2NvdW50X2F2YWlsKCk7CisJCWlmIChuYl9wb3J0cyA9PSAwKQorCQl7CisJCQkvLyBUaGF0IGp1c3QgbWVhbnMgImRvbid0IHJldHVybiBhbnkgZGV2aWNlcyIuCisJCQlyZXQgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPG5iX3BvcnRzOyBpKyspeworCQkJc25wcmludGYoZHBka19uYW1lLCBEUERLX0RFVl9OQU1FX01BWC0xLAorCQkJICAgICIlcyV1IiwgRFBES19QUkVGSVgsIGkpOworCQkJLy8gbWFjIGFkZHIKKwkJCXJ0ZV9ldGhfbWFjYWRkcl9nZXQoaSwgJmV0aF9hZGRyKTsKKwkJCWV0aF9hZGRyX3N0cigmZXRoX2FkZHIsbWFjX2FkZHIsRFBES19NQUNfQUREUl9TSVpFKTsKKwkJCS8vIFBDSSBhZGRyCisJCQlydGVfZXRoX2Rldl9nZXRfbmFtZV9ieV9wb3J0KGkscGNpX2FkZHIpOworCQkJc25wcmludGYoZHBka19kZXNjLERQREtfREVWX0RFU0NfTUFYLTEsIiVzICVzLCBNQUM6JXMsIFBDSTolcyIsIERQREtfREVTQywgZHBka19uYW1lLCBtYWNfYWRkciwgcGNpX2FkZHIpOworCQkJaWYgKGFkZF9kZXYoZGV2bGlzdHAsIGRwZGtfbmFtZSwgMCwgZHBka19kZXNjLCBlYnVmKT09TlVMTCl7CisJCQkJcmV0ID0gUENBUF9FUlJPUjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX13aGlsZSgwKTsKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgRFBES19PTkxZCisvKgorICogVGhpcyBsaWJwY2FwIGJ1aWxkIHN1cHBvcnRzIG9ubHkgRFBESywgbm90IHJlZ3VsYXIgbmV0d29yayBpbnRlcmZhY2VzLgorICovCisKKy8qCisgKiBUaGVyZSBhcmUgbm8gcmVndWxhciBpbnRlcmZhY2VzLCBqdXN0IERQREsgaW50ZXJmYWNlcy4KKyAqLworaW50CitwY2FwX3BsYXRmb3JtX2ZpbmRkZXZzKHBjYXBfaWZfbGlzdF90ICpkZXZsaXN0cCBfVV8sIGNoYXIgKmVycmJ1ZikKK3sKKwlyZXR1cm4gKDApOworfQorCisvKgorICogQXR0ZW1wdHMgdG8gb3BlbiBhIHJlZ3VsYXIgaW50ZXJmYWNlIGZhaWwuCisgKi8KK3BjYXBfdCAqCitwY2FwX2NyZWF0ZV9pbnRlcmZhY2UoY29uc3QgY2hhciAqZGV2aWNlLCBjaGFyICplcnJidWYpCit7CisJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCSAgICAiVGhpcyB2ZXJzaW9uIG9mIGxpYnBjYXAgb25seSBzdXBwb3J0cyBEUERLIik7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBMaWJwY2FwIHZlcnNpb24gc3RyaW5nLgorICovCitjb25zdCBjaGFyICoKK3BjYXBfbGliX3ZlcnNpb24odm9pZCkKK3sKKwlyZXR1cm4gKFBDQVBfVkVSU0lPTl9TVFJJTkcgIiAoRFBESy1vbmx5KSIpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9wY2FwLWRwZGsuaCBiL3BjYXAtZHBkay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NTliN2YKLS0tIC9kZXYvbnVsbAorKysgYi9wY2FwLWRwZGsuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IGppbmdsZSBZQU5HLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKK3BjYXBfdCAqcGNhcF9kcGRrX2NyZWF0ZShjb25zdCBjaGFyICosIGNoYXIgKiwgaW50ICopOworaW50IHBjYXBfZHBka19maW5kYWxsZGV2cyhwY2FwX2lmX2xpc3RfdCAqZGV2bGlzdHAsIGNoYXIgKmVycmJ1Zik7CmRpZmYgLS1naXQgYS9wY2FwLWVuZXQuYyBiL3BjYXAtZW5ldC5jCmluZGV4IGNkOGNkYmIuLjZmMDUxMmYgMTAwNjQ0Ci0tLSBhL3BjYXAtZW5ldC5jCisrKyBiL3BjYXAtZW5ldC5jCkBAIC03NSw3ICs3NSw3IEBACiAJCQlwaCA9IChzdHJ1Y3QgcGFja2V0X2hlYWRlciAqKWJwOwogCQkJY2FwbGVuID0gcGgtPnRhcC50aF93aXJlbGVuID4gc25hcGxlbiA/IHNuYXBsZW4gOiBwaC0+dGFwCiAudGhfd2lyZWxlbiA7Ci0JCQlpZiAoYnBmX2ZpbHRlcihmY29kZSwgKGNoYXIgKilwaC0+cGFja2V0LAorCQkJaWYgKHBjYXBfZmlsdGVyKGZjb2RlLCAoY2hhciAqKXBoLT5wYWNrZXQsCiAJCQkJCQlwaC0+dGFwLnRoX3dpcmVsZW4sIGNhcGxlbikpIHsKIAkJCQlpZiAoY250ID49IDAgJiYgLS1jbnQgPCAwKQogCQkJCQlnb3RvIG91dDsKQEAgLTg5LDcgKzg5LDcgQEAKIAkJfQogI2Vsc2UJLyogIUlCTVJUUEMgKi8KIAkJY2FwbGVuID0gY2MgPiBzbmFwbGVuID8gc25hcGxlbiA6IGNjIDsKLQkJaWYgKGJwZl9maWx0ZXIoZmNvZGUsIGJ1Zi5oZHIucGFja2V0LCBjYywgY2FwbGVuKSkgeworCQlpZiAocGNhcF9maWx0ZXIoZmNvZGUsIGJ1Zi5oZHIucGFja2V0LCBjYywgY2FwbGVuKSkgewogCQkJaWYgKGNudCA+PSAwICYmIC0tY250IDwgMCkKIAkJCQlnb3RvIG91dDsKIAkJCSgqcHJpbnRpdCkoYnVmLmhkci5wYWNrZXQsICZ0diwgY2MsIGNhcGxlbik7CmRpZmYgLS1naXQgYS9wY2FwLWZpbHRlci5tYW5taXNjIGIvcGNhcC1maWx0ZXIubWFubWlzYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU0ODY5MS4uMDAwMDAwMAotLS0gYS9wY2FwLWZpbHRlci5tYW5taXNjCisrKyAvZGV2L251bGwKQEAgLTEsMTA1MCArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAxOTg3LCAxOTg4LCAxOTg5LCAxOTkwLCAxOTkxLCAxOTkyLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3Ci0uXCIJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0OiAoMSkgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9ucwotLlwiIHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5LCAoMikKLS5cIiBkaXN0cmlidXRpb25zIGluY2x1ZGluZyBiaW5hcnkgY29kZSBpbmNsdWRlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAotLlwiIHRoaXMgcGFyYWdyYXBoIGluIGl0cyBlbnRpcmV0eSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvciBvdGhlciBtYXRlcmlhbHMKLS5cIiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24sIGFuZCAoMykgYWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nCi0uXCIgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLS5cIiBgYFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwKLS5cIiBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IGFuZCBpdHMgY29udHJpYnV0b3JzLicnIE5laXRoZXIgdGhlIG5hbWUgb2YKLS5cIiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZQotLlwiIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgotLlwiIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0uXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS5cIiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotLlwiCi0uVEggUENBUC1GSUxURVIgNyAiNSBOb3ZlbWJlciAyMDE3IgotLlNIIE5BTUUKLXBjYXAtZmlsdGVyIFwtIHBhY2tldCBmaWx0ZXIgc3ludGF4Ci0uYnIKLS5hZAotLlNIIERFU0NSSVBUSU9OCi0uTFAKLS5CIHBjYXBfY29tcGlsZSgpCi1pcyB1c2VkIHRvIGNvbXBpbGUgYSBzdHJpbmcgaW50byBhIGZpbHRlciBwcm9ncmFtLgotVGhlIHJlc3VsdGluZyBmaWx0ZXIgcHJvZ3JhbSBjYW4gdGhlbiBiZSBhcHBsaWVkIHRvCi1zb21lIHN0cmVhbSBvZiBwYWNrZXRzIHRvIGRldGVybWluZSB3aGljaCBwYWNrZXRzIHdpbGwgYmUgc3VwcGxpZWQgdG8KLS5CUiBwY2FwX2xvb3AoKSAsCi0uQlIgcGNhcF9kaXNwYXRjaCgpICwKLS5CUiBwY2FwX25leHQoKSAsCi1vcgotLkJSIHBjYXBfbmV4dF9leCgpIC4KLS5MUAotVGhlIFxmSWZpbHRlciBleHByZXNzaW9uXGZQIGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlCi0uSVIgcHJpbWl0aXZlcyAuCi1QcmltaXRpdmVzIHVzdWFsbHkgY29uc2lzdCBvZiBhbgotLkkgaWQKLShuYW1lIG9yIG51bWJlcikgcHJlY2VkZWQgYnkgb25lIG9yIG1vcmUgcXVhbGlmaWVycy4KLVRoZXJlIGFyZSB0aHJlZQotZGlmZmVyZW50IGtpbmRzIG9mIHF1YWxpZmllcjoKLS5JUCBcZkl0eXBlXGZQCi0uSSB0eXBlCi1xdWFsaWZpZXJzIHNheSB3aGF0IGtpbmQgb2YgdGhpbmcgdGhlIGlkIG5hbWUgb3IgbnVtYmVyIHJlZmVycyB0by4KLVBvc3NpYmxlIHR5cGVzIGFyZQotLkJSIGhvc3QgLAotLkIgbmV0ICwKLS5CIHBvcnQKLWFuZAotLkJSIHBvcnRyYW5nZSAuCi1FLmcuLCBgaG9zdCBmb28nLCBgbmV0IDEyOC4zJywgYHBvcnQgMjAnLCBgcG9ydHJhbmdlIDYwMDAtNjAwOCcuCi1JZiB0aGVyZSBpcyBubyB0eXBlCi1xdWFsaWZpZXIsCi0uQiBob3N0Ci1pcyBhc3N1bWVkLgotLklQIFxmSWRpclxmUAotLkkgZGlyCi1xdWFsaWZpZXJzIHNwZWNpZnkgYSBwYXJ0aWN1bGFyIHRyYW5zZmVyIGRpcmVjdGlvbiB0byBhbmQvb3IgZnJvbQotLklSIGlkIC4KLVBvc3NpYmxlIGRpcmVjdGlvbnMgYXJlCi0uQlIgc3JjICwKLS5CUiBkc3QgLAotLkJSICJzcmMgb3IgZHN0IiAsCi0uQlIgInNyYyBhbmQgZHN0IiAsCi0uQlIgcmEgLAotLkJSIHRhICwKLS5CUiBhZGRyMSAsCi0uQlIgYWRkcjIgLAotLkJSIGFkZHIzICwKLWFuZAotLkJSIGFkZHI0IC4KLUUuZy4sIGBzcmMgZm9vJywgYGRzdCBuZXQgMTI4LjMnLCBgc3JjIG9yIGRzdCBwb3J0IGZ0cC1kYXRhJy4KLUlmCi10aGVyZSBpcyBubyBkaXIgcXVhbGlmaWVyLAotLkIgInNyYyBvciBkc3QiCi1pcyBhc3N1bWVkLgotVGhlCi0uQlIgcmEgLAotLkJSIHRhICwKLS5CUiBhZGRyMSAsCi0uQlIgYWRkcjIgLAotLkJSIGFkZHIzICwKLWFuZAotLkIgYWRkcjQKLXF1YWxpZmllcnMgYXJlIG9ubHkgdmFsaWQgZm9yIElFRUUgODAyLjExIFdpcmVsZXNzIExBTiBsaW5rIGxheWVycy4KLUZvciBzb21lIGxpbmsgbGF5ZXJzLCBzdWNoIGFzIFNMSVAgYW5kIHRoZSBgYGNvb2tlZCcnIExpbnV4IGNhcHR1cmUgbW9kZQotdXNlZCBmb3IgdGhlIGBgYW55JycgZGV2aWNlIGFuZCBmb3Igc29tZSBvdGhlciBkZXZpY2UgdHlwZXMsIHRoZQotLkIgaW5ib3VuZAotYW5kCi0uQiBvdXRib3VuZAotcXVhbGlmaWVycyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgZGVzaXJlZCBkaXJlY3Rpb24uCi0uSVAgXGZJcHJvdG9cZlAKLS5JIHByb3RvCi1xdWFsaWZpZXJzIHJlc3RyaWN0IHRoZSBtYXRjaCB0byBhIHBhcnRpY3VsYXIgcHJvdG9jb2wuCi1Qb3NzaWJsZQotcHJvdG9zIGFyZToKLS5CUiBldGhlciAsCi0uQlIgZmRkaSAsCi0uQlIgdHIgLAotLkJSIHdsYW4gLAotLkJSIGlwICwKLS5CUiBpcDYgLAotLkJSIGFycCAsCi0uQlIgcmFycCAsCi0uQlIgZGVjbmV0ICwKLS5CIHRjcAotYW5kCi0uQlIgdWRwIC4KLUUuZy4sIGBldGhlciBzcmMgZm9vJywgYGFycCBuZXQgMTI4LjMnLCBgdGNwIHBvcnQgMjEnLCBgdWRwIHBvcnRyYW5nZQotNzAwMC03MDA5JywgYHdsYW4gYWRkcjIgMDoyOjM6NDo1OjYnLgotSWYgdGhlcmUgaXMKLW5vIHByb3RvIHF1YWxpZmllciwgYWxsIHByb3RvY29scyBjb25zaXN0ZW50IHdpdGggdGhlIHR5cGUgYXJlCi1hc3N1bWVkLgotRS5nLiwgYHNyYyBmb28nIG1lYW5zIGAoaXAgb3IgYXJwIG9yIHJhcnApIHNyYyBmb28nCi0oZXhjZXB0IHRoZSBsYXR0ZXIgaXMgbm90IGxlZ2FsIHN5bnRheCksIGBuZXQgYmFyJyBtZWFucyBgKGlwIG9yCi1hcnAgb3IgcmFycCkgbmV0IGJhcicgYW5kIGBwb3J0IDUzJyBtZWFucyBgKHRjcCBvciB1ZHApIHBvcnQgNTMnLgotLkxQCi1bYGZkZGknIGlzIGFjdHVhbGx5IGFuIGFsaWFzIGZvciBgZXRoZXInOyB0aGUgcGFyc2VyIHRyZWF0cyB0aGVtCi1pZGVudGljYWxseSBhcyBtZWFuaW5nIGBgdGhlIGRhdGEgbGluayBsZXZlbCB1c2VkIG9uIHRoZSBzcGVjaWZpZWQKLW5ldHdvcmsgaW50ZXJmYWNlLicnICBGRERJIGhlYWRlcnMgY29udGFpbiBFdGhlcm5ldC1saWtlIHNvdXJjZQotYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcywgYW5kIG9mdGVuIGNvbnRhaW4gRXRoZXJuZXQtbGlrZSBwYWNrZXQKLXR5cGVzLCBzbyB5b3UgY2FuIGZpbHRlciBvbiB0aGVzZSBGRERJIGZpZWxkcyBqdXN0IGFzIHdpdGggdGhlCi1hbmFsb2dvdXMgRXRoZXJuZXQgZmllbGRzLgotRkRESSBoZWFkZXJzIGFsc28gY29udGFpbiBvdGhlciBmaWVsZHMsCi1idXQgeW91IGNhbm5vdCBuYW1lIHRoZW0gZXhwbGljaXRseSBpbiBhIGZpbHRlciBleHByZXNzaW9uLgotLkxQCi1TaW1pbGFybHksIGB0cicgYW5kIGB3bGFuJyBhcmUgYWxpYXNlcyBmb3IgYGV0aGVyJzsgdGhlIHByZXZpb3VzCi1wYXJhZ3JhcGgncyBzdGF0ZW1lbnRzIGFib3V0IEZEREkgaGVhZGVycyBhbHNvIGFwcGx5IHRvIFRva2VuIFJpbmcKLWFuZCA4MDIuMTEgd2lyZWxlc3MgTEFOIGhlYWRlcnMuICBGb3IgODAyLjExIGhlYWRlcnMsIHRoZSBkZXN0aW5hdGlvbgotYWRkcmVzcyBpcyB0aGUgREEgZmllbGQgYW5kIHRoZSBzb3VyY2UgYWRkcmVzcyBpcyB0aGUgU0EgZmllbGQ7IHRoZQotQlNTSUQsIFJBLCBhbmQgVEEgZmllbGRzIGFyZW4ndCB0ZXN0ZWQuXQotLkxQCi1JbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUsIHRoZXJlIGFyZSBzb21lIHNwZWNpYWwgYHByaW1pdGl2ZScga2V5d29yZHMKLXRoYXQgZG9uJ3QgZm9sbG93IHRoZSBwYXR0ZXJuOgotLkJSIGdhdGV3YXkgLAotLkJSIGJyb2FkY2FzdCAsCi0uQlIgbGVzcyAsCi0uQiBncmVhdGVyCi1hbmQgYXJpdGhtZXRpYyBleHByZXNzaW9ucy4KLUFsbCBvZiB0aGVzZSBhcmUgZGVzY3JpYmVkIGJlbG93LgotLkxQCi1Nb3JlIGNvbXBsZXggZmlsdGVyIGV4cHJlc3Npb25zIGFyZSBidWlsdCB1cCBieSB1c2luZyB0aGUgd29yZHMKLS5CUiBhbmQgLAotLkIgb3IKLWFuZAotLkIgbm90Ci10byBjb21iaW5lIHByaW1pdGl2ZXMuCi1FLmcuLCBgaG9zdCBmb28gYW5kIG5vdCBwb3J0IGZ0cCBhbmQgbm90IHBvcnQgZnRwLWRhdGEnLgotVG8gc2F2ZSB0eXBpbmcsIGlkZW50aWNhbCBxdWFsaWZpZXIgbGlzdHMgY2FuIGJlIG9taXR0ZWQuCi1FLmcuLAotYHRjcCBkc3QgcG9ydCBmdHAgb3IgZnRwLWRhdGEgb3IgZG9tYWluJyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzCi1gdGNwIGRzdCBwb3J0IGZ0cCBvciB0Y3AgZHN0IHBvcnQgZnRwLWRhdGEgb3IgdGNwIGRzdCBwb3J0IGRvbWFpbicuCi0uTFAKLUFsbG93YWJsZSBwcmltaXRpdmVzIGFyZToKLS5JUCAiXGZCZHN0IGhvc3QgXGZJaG9zdFxmUiIKLVRydWUgaWYgdGhlIElQdjQvdjYgZGVzdGluYXRpb24gZmllbGQgb2YgdGhlIHBhY2tldCBpcyBcZklob3N0XGZQLAotd2hpY2ggbWF5IGJlIGVpdGhlciBhbiBhZGRyZXNzIG9yIGEgbmFtZS4KLS5JUCAiXGZCc3JjIGhvc3QgXGZJaG9zdFxmUiIKLVRydWUgaWYgdGhlIElQdjQvdjYgc291cmNlIGZpZWxkIG9mIHRoZSBwYWNrZXQgaXMgXGZJaG9zdFxmUC4KLS5JUCAiXGZCaG9zdCBcZklob3N0XGZQIgotVHJ1ZSBpZiBlaXRoZXIgdGhlIElQdjQvdjYgc291cmNlIG9yIGRlc3RpbmF0aW9uIG9mIHRoZSBwYWNrZXQgaXMgXGZJaG9zdFxmUC4KLS5JUAotQW55IG9mIHRoZSBhYm92ZSBob3N0IGV4cHJlc3Npb25zIGNhbiBiZSBwcmVwZW5kZWQgd2l0aCB0aGUga2V5d29yZHMsCi1cZkJpcFxmUCwgXGZCYXJwXGZQLCBcZkJyYXJwXGZQLCBvciBcZkJpcDZcZlAgYXMgaW46Ci0uaW4gKy41aQotLm5mCi1cZkJpcCBob3N0IFxmSWhvc3RcZlIKLS5maQotLmluIC0uNWkKLXdoaWNoIGlzIGVxdWl2YWxlbnQgdG86Ci0uaW4gKy41aQotLm5mCi1cZkJldGhlciBwcm90byBcZklcXGlwXGZCIGFuZCBob3N0IFxmSWhvc3RcZlIKLS5maQotLmluIC0uNWkKLUlmIFxmSWhvc3RcZlIgaXMgYSBuYW1lIHdpdGggbXVsdGlwbGUgSVAgYWRkcmVzc2VzLCBlYWNoIGFkZHJlc3Mgd2lsbAotYmUgY2hlY2tlZCBmb3IgYSBtYXRjaC4KLS5JUCAiXGZCZXRoZXIgZHN0IFxmSWVob3N0XGZQIgotVHJ1ZSBpZiB0aGUgRXRoZXJuZXQgZGVzdGluYXRpb24gYWRkcmVzcyBpcyBcZkllaG9zdFxmUC4KLVxmSUVob3N0XGZQCi1tYXkgYmUgZWl0aGVyIGEgbmFtZSBmcm9tIC9ldGMvZXRoZXJzIG9yIGEgbnVtZXJpY2FsIE1BQyBhZGRyZXNzIG9mIHRoZQotZm9ybSAieHg6eHg6eHg6eHg6eHg6eHgiLCAieHgueHgueHgueHgueHgueHgiLCAieHgteHgteHgteHgteHgteHgiLAotInh4eHgueHh4eC54eHh4IiwgInh4eHh4eHh4eHh4eCIsIG9yIHZhcmlvdXMgbWl4ZXMgb2YgJzonLCAnLicsIGFuZCAnLScsCi13aGVyZSBlYWNoICJ4IiBpcyBhIGhleCBkaWdpdCAoMC05LCBhLWYsIG9yIEEtRikuCi0uSVAgIlxmQmV0aGVyIHNyYyBcZkllaG9zdFxmUCIKLVRydWUgaWYgdGhlIEV0aGVybmV0IHNvdXJjZSBhZGRyZXNzIGlzIFxmSWVob3N0XGZQLgotLklQICJcZkJldGhlciBob3N0IFxmSWVob3N0XGZQIgotVHJ1ZSBpZiBlaXRoZXIgdGhlIEV0aGVybmV0IHNvdXJjZSBvciBkZXN0aW5hdGlvbiBhZGRyZXNzIGlzIFxmSWVob3N0XGZQLgotLklQICJcZkJnYXRld2F5XGZQIFxmSWhvc3RcZlAiCi1UcnVlIGlmIHRoZSBwYWNrZXQgdXNlZCBcZklob3N0XGZQIGFzIGEgZ2F0ZXdheS4KLUkuZS4sIHRoZSBFdGhlcm5ldAotc291cmNlIG9yIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2FzIFxmSWhvc3RcZlAgYnV0IG5laXRoZXIgdGhlIElQIHNvdXJjZQotbm9yIHRoZSBJUCBkZXN0aW5hdGlvbiB3YXMgXGZJaG9zdFxmUC4KLVxmSUhvc3RcZlAgbXVzdCBiZSBhIG5hbWUgYW5kCi1tdXN0IGJlIGZvdW5kIGJvdGggYnkgdGhlIG1hY2hpbmUncyBob3N0LW5hbWUtdG8tSVAtYWRkcmVzcyByZXNvbHV0aW9uCi1tZWNoYW5pc21zIChob3N0IG5hbWUgZmlsZSwgRE5TLCBOSVMsIGV0Yy4pIGFuZCBieSB0aGUgbWFjaGluZSdzCi1ob3N0LW5hbWUtdG8tRXRoZXJuZXQtYWRkcmVzcyByZXNvbHV0aW9uIG1lY2hhbmlzbSAoL2V0Yy9ldGhlcnMsIGV0Yy4pLgotKEFuIGVxdWl2YWxlbnQgZXhwcmVzc2lvbiBpcwotLmluICsuNWkKLS5uZgotXGZCZXRoZXIgaG9zdCBcZkllaG9zdCBcZkJhbmQgbm90IGhvc3QgXGZJaG9zdFxmUgotLmZpCi0uaW4gLS41aQotd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBlaXRoZXIgbmFtZXMgb3IgbnVtYmVycyBmb3IgXGZJaG9zdCAvIGVob3N0XGZQLikKLVRoaXMgc3ludGF4IGRvZXMgbm90IHdvcmsgaW4gSVB2Ni1lbmFibGVkIGNvbmZpZ3VyYXRpb24gYXQgdGhpcyBtb21lbnQuCi0uSVAgIlxmQmRzdCBuZXQgXGZJbmV0XGZSIgotVHJ1ZSBpZiB0aGUgSVB2NC92NiBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIHRoZSBwYWNrZXQgaGFzIGEgbmV0d29yawotbnVtYmVyIG9mIFxmSW5ldFxmUC4KLVxmSU5ldFxmUCBtYXkgYmUgZWl0aGVyIGEgbmFtZSBmcm9tIHRoZSBuZXR3b3JrcyBkYXRhYmFzZQotKC9ldGMvbmV0d29ya3MsIGV0Yy4pIG9yIGEgbmV0d29yayBudW1iZXIuCi1BbiBJUHY0IG5ldHdvcmsgbnVtYmVyIGNhbiBiZSB3cml0dGVuIGFzIGEgZG90dGVkIHF1YWQgKGUuZy4sIDE5Mi4xNjguMS4wKSwKLWRvdHRlZCB0cmlwbGUgKGUuZy4sIDE5Mi4xNjguMSksIGRvdHRlZCBwYWlyIChlLmcsIDE3Mi4xNiksIG9yIHNpbmdsZQotbnVtYmVyIChlLmcuLCAxMCk7IHRoZSBuZXRtYXNrIGlzIDI1NS4yNTUuMjU1LjI1NSBmb3IgYSBkb3R0ZWQgcXVhZAotKHdoaWNoIG1lYW5zIHRoYXQgaXQncyByZWFsbHkgYSBob3N0IG1hdGNoKSwgMjU1LjI1NS4yNTUuMCBmb3IgYSBkb3R0ZWQKLXRyaXBsZSwgMjU1LjI1NS4wLjAgZm9yIGEgZG90dGVkIHBhaXIsIG9yIDI1NS4wLjAuMCBmb3IgYSBzaW5nbGUgbnVtYmVyLgotQW4gSVB2NiBuZXR3b3JrIG51bWJlciBtdXN0IGJlIHdyaXR0ZW4gb3V0IGZ1bGx5OyB0aGUgbmV0bWFzayBpcwotZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmY6ZmYsIHNvIElQdjYgIm5ldHdvcmsiIG1hdGNoZXMgYXJlIHJlYWxseSBhbHdheXMKLWhvc3QgbWF0Y2hlcywgYW5kIGEgbmV0d29yayBtYXRjaCByZXF1aXJlcyBhIG5ldG1hc2sgbGVuZ3RoLgotLklQICJcZkJzcmMgbmV0IFxmSW5ldFxmUiIKLVRydWUgaWYgdGhlIElQdjQvdjYgc291cmNlIGFkZHJlc3Mgb2YgdGhlIHBhY2tldCBoYXMgYSBuZXR3b3JrCi1udW1iZXIgb2YgXGZJbmV0XGZQLgotLklQICJcZkJuZXQgXGZJbmV0XGZSIgotVHJ1ZSBpZiBlaXRoZXIgdGhlIElQdjQvdjYgc291cmNlIG9yIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgdGhlIHBhY2tldCBoYXMgYSBuZXR3b3JrCi1udW1iZXIgb2YgXGZJbmV0XGZQLgotLklQICJcZkJuZXQgXGZJbmV0XGZSIFxmQm1hc2sgXGZJbmV0bWFza1xmUiIKLVRydWUgaWYgdGhlIElQdjQgYWRkcmVzcyBtYXRjaGVzIFxmSW5ldFxmUiB3aXRoIHRoZSBzcGVjaWZpYyBcZkluZXRtYXNrXGZSLgotTWF5IGJlIHF1YWxpZmllZCB3aXRoIFxmQnNyY1xmUiBvciBcZkJkc3RcZlIuCi1Ob3RlIHRoYXQgdGhpcyBzeW50YXggaXMgbm90IHZhbGlkIGZvciBJUHY2IFxmSW5ldFxmUi4KLS5JUCAiXGZCbmV0IFxmSW5ldFxmUi9cZklsZW5cZlIiCi1UcnVlIGlmIHRoZSBJUHY0L3Y2IGFkZHJlc3MgbWF0Y2hlcyBcZkluZXRcZlIgd2l0aCBhIG5ldG1hc2sgXGZJbGVuXGZSCi1iaXRzIHdpZGUuCi1NYXkgYmUgcXVhbGlmaWVkIHdpdGggXGZCc3JjXGZSIG9yIFxmQmRzdFxmUi4KLS5JUCAiXGZCZHN0IHBvcnQgXGZJcG9ydFxmUiIKLVRydWUgaWYgdGhlIHBhY2tldCBpcyBpcC90Y3AsIGlwL3VkcCwgaXA2L3RjcCBvciBpcDYvdWRwIGFuZCBoYXMgYQotZGVzdGluYXRpb24gcG9ydCB2YWx1ZSBvZiBcZklwb3J0XGZQLgotVGhlIFxmSXBvcnRcZlAgY2FuIGJlIGEgbnVtYmVyIG9yIGEgbmFtZSB1c2VkIGluIC9ldGMvc2VydmljZXMgKHNlZQotLklSIHRjcCAoNFApCi1hbmQKLS5JUiB1ZHAgKDRQKSkuCi1JZiBhIG5hbWUgaXMgdXNlZCwgYm90aCB0aGUgcG9ydAotbnVtYmVyIGFuZCBwcm90b2NvbCBhcmUgY2hlY2tlZC4KLUlmIGEgbnVtYmVyIG9yIGFtYmlndW91cyBuYW1lIGlzIHVzZWQsCi1vbmx5IHRoZSBwb3J0IG51bWJlciBpcyBjaGVja2VkIChlLmcuLCBcZkJkc3QgcG9ydCA1MTNcZlIgd2lsbCBwcmludCBib3RoCi10Y3AvbG9naW4gdHJhZmZpYyBhbmQgdWRwL3dobyB0cmFmZmljLCBhbmQgXGZCcG9ydCBkb21haW5cZlIgd2lsbCBwcmludAotYm90aCB0Y3AvZG9tYWluIGFuZCB1ZHAvZG9tYWluIHRyYWZmaWMpLgotLklQICJcZkJzcmMgcG9ydCBcZklwb3J0XGZSIgotVHJ1ZSBpZiB0aGUgcGFja2V0IGhhcyBhIHNvdXJjZSBwb3J0IHZhbHVlIG9mIFxmSXBvcnRcZlAuCi0uSVAgIlxmQnBvcnQgXGZJcG9ydFxmUiIKLVRydWUgaWYgZWl0aGVyIHRoZSBzb3VyY2Ugb3IgZGVzdGluYXRpb24gcG9ydCBvZiB0aGUgcGFja2V0IGlzIFxmSXBvcnRcZlAuCi0uSVAgIlxmQmRzdCBwb3J0cmFuZ2UgXGZJcG9ydDFcZkItXGZJcG9ydDJcZlIiCi1UcnVlIGlmIHRoZSBwYWNrZXQgaXMgaXAvdGNwLCBpcC91ZHAsIGlwNi90Y3Agb3IgaXA2L3VkcCBhbmQgaGFzIGEKLWRlc3RpbmF0aW9uIHBvcnQgdmFsdWUgYmV0d2VlbiBcZklwb3J0MVxmUCBhbmQgXGZJcG9ydDJcZlAuCi0uSSBwb3J0MQotYW5kCi0uSSBwb3J0MgotYXJlIGludGVycHJldGVkIGluIHRoZSBzYW1lIGZhc2hpb24gYXMgdGhlCi0uSSBwb3J0Ci1wYXJhbWV0ZXIgZm9yCi0uQlIgcG9ydCAuCi0uSVAgIlxmQnNyYyBwb3J0cmFuZ2UgXGZJcG9ydDFcZkItXGZJcG9ydDJcZlIiCi1UcnVlIGlmIHRoZSBwYWNrZXQgaGFzIGEgc291cmNlIHBvcnQgdmFsdWUgYmV0d2VlbiBcZklwb3J0MVxmUCBhbmQKLVxmSXBvcnQyXGZQLgotLklQICJcZkJwb3J0cmFuZ2UgXGZJcG9ydDFcZkItXGZJcG9ydDJcZlIiCi1UcnVlIGlmIGVpdGhlciB0aGUgc291cmNlIG9yIGRlc3RpbmF0aW9uIHBvcnQgb2YgdGhlIHBhY2tldCBpcyBiZXR3ZWVuCi1cZklwb3J0MVxmUCBhbmQgXGZJcG9ydDJcZlAuCi0uSVAKLUFueSBvZiB0aGUgYWJvdmUgcG9ydCBvciBwb3J0IHJhbmdlIGV4cHJlc3Npb25zIGNhbiBiZSBwcmVwZW5kZWQgd2l0aAotdGhlIGtleXdvcmRzLCBcZkJ0Y3BcZlAgb3IgXGZCdWRwXGZQLCBhcyBpbjoKLS5pbiArLjVpCi0ubmYKLVxmQnRjcCBzcmMgcG9ydCBcZklwb3J0XGZSCi0uZmkKLS5pbiAtLjVpCi13aGljaCBtYXRjaGVzIG9ubHkgdGNwIHBhY2tldHMgd2hvc2Ugc291cmNlIHBvcnQgaXMgXGZJcG9ydFxmUC4KLS5JUCAiXGZCbGVzcyBcZklsZW5ndGhcZlIiCi1UcnVlIGlmIHRoZSBwYWNrZXQgaGFzIGEgbGVuZ3RoIGxlc3MgdGhhbiBvciBlcXVhbCB0byBcZklsZW5ndGhcZlAuCi1UaGlzIGlzIGVxdWl2YWxlbnQgdG86Ci0uaW4gKy41aQotLm5mCi1cZkJsZW4gPD0gXGZJbGVuZ3RoXGZQLgotLmZpCi0uaW4gLS41aQotLklQICJcZkJncmVhdGVyIFxmSWxlbmd0aFxmUiIKLVRydWUgaWYgdGhlIHBhY2tldCBoYXMgYSBsZW5ndGggZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFxmSWxlbmd0aFxmUC4KLVRoaXMgaXMgZXF1aXZhbGVudCB0bzoKLS5pbiArLjVpCi0ubmYKLVxmQmxlbiA+PSBcZklsZW5ndGhcZlAuCi0uZmkKLS5pbiAtLjVpCi0uSVAgIlxmQmlwIHByb3RvIFxmSXByb3RvY29sXGZSIgotVHJ1ZSBpZiB0aGUgcGFja2V0IGlzIGFuIElQdjQgcGFja2V0IChzZWUKLS5JUiBpcCAoNFApKQotb2YgcHJvdG9jb2wgdHlwZSBcZklwcm90b2NvbFxmUC4KLVxmSVByb3RvY29sXGZQIGNhbiBiZSBhIG51bWJlciBvciBvbmUgb2YgdGhlIG5hbWVzCi1cZkJpY21wXGZQLCBcZkJpY21wNlxmUCwgXGZCaWdtcFxmUCwgXGZCaWdycFxmUCwgXGZCcGltXGZQLCBcZkJhaFxmUCwKLVxmQmVzcFxmUCwgXGZCdnJycFxmUCwgXGZCdWRwXGZQLCBvciBcZkJ0Y3BcZlAuCi1Ob3RlIHRoYXQgdGhlIGlkZW50aWZpZXJzIFxmQnRjcFxmUCwgXGZCdWRwXGZQLCBhbmQgXGZCaWNtcFxmUCBhcmUgYWxzbwota2V5d29yZHMgYW5kIG11c3QgYmUgZXNjYXBlZCB2aWEgYmFja3NsYXNoIChcXCkuCi1Ob3RlIHRoYXQgdGhpcyBwcmltaXRpdmUgZG9lcyBub3QgY2hhc2UgdGhlIHByb3RvY29sIGhlYWRlciBjaGFpbi4KLS5JUCAiXGZCaXA2IHByb3RvIFxmSXByb3RvY29sXGZSIgotVHJ1ZSBpZiB0aGUgcGFja2V0IGlzIGFuIElQdjYgcGFja2V0IG9mIHByb3RvY29sIHR5cGUgXGZJcHJvdG9jb2xcZlAuCi1Ob3RlIHRoYXQgdGhpcyBwcmltaXRpdmUgZG9lcyBub3QgY2hhc2UgdGhlIHByb3RvY29sIGhlYWRlciBjaGFpbi4KLS5JUCAiXGZCcHJvdG8gXGZJcHJvdG9jb2xcZlIiCi1UcnVlIGlmIHRoZSBwYWNrZXQgaXMgYW4gSVB2NCBvciBJUHY2IHBhY2tldCBvZiBwcm90b2NvbCB0eXBlCi1cZklwcm90b2NvbFxmUC4gIE5vdGUgdGhhdCB0aGlzIHByaW1pdGl2ZSBkb2VzIG5vdCBjaGFzZSB0aGUgcHJvdG9jb2wKLWhlYWRlciBjaGFpbi4KLS5JUCAgIlxmQnRjcFxmUiwgXGZCdWRwXGZSLCBcZkJpY21wXGZSIgotQWJicmV2aWF0aW9ucyBmb3I6Ci0uaW4gKy41aQotLm5mCi1cZkJwcm90byBcZklwXGZSXGZCCi0uZmkKLS5pbiAtLjVpCi13aGVyZSBcZklwXGZSIGlzIG9uZSBvZiB0aGUgYWJvdmUgcHJvdG9jb2xzLgotLklQICJcZkJpcDYgcHJvdG9jaGFpbiBcZklwcm90b2NvbFxmUiIKLVRydWUgaWYgdGhlIHBhY2tldCBpcyBJUHY2IHBhY2tldCwKLWFuZCBjb250YWlucyBwcm90b2NvbCBoZWFkZXIgd2l0aCB0eXBlIFxmSXByb3RvY29sXGZSCi1pbiBpdHMgcHJvdG9jb2wgaGVhZGVyIGNoYWluLgotRm9yIGV4YW1wbGUsCi0uaW4gKy41aQotLm5mCi1cZkJpcDYgcHJvdG9jaGFpbiA2XGZSCi0uZmkKLS5pbiAtLjVpCi1tYXRjaGVzIGFueSBJUHY2IHBhY2tldCB3aXRoIFRDUCBwcm90b2NvbCBoZWFkZXIgaW4gdGhlIHByb3RvY29sIGhlYWRlciBjaGFpbi4KLVRoZSBwYWNrZXQgbWF5IGNvbnRhaW4sIGZvciBleGFtcGxlLAotYXV0aGVudGljYXRpb24gaGVhZGVyLCByb3V0aW5nIGhlYWRlciwgb3IgaG9wLWJ5LWhvcCBvcHRpb24gaGVhZGVyLAotYmV0d2VlbiBJUHY2IGhlYWRlciBhbmQgVENQIGhlYWRlci4KLVRoZSBCUEYgY29kZSBlbWl0dGVkIGJ5IHRoaXMgcHJpbWl0aXZlIGlzIGNvbXBsZXggYW5kCi1jYW5ub3QgYmUgb3B0aW1pemVkIGJ5IHRoZSBCUEYgb3B0aW1pemVyIGNvZGUsIGFuZCBpcyBub3Qgc3VwcG9ydGVkIGJ5Ci1maWx0ZXIgZW5naW5lcyBpbiB0aGUga2VybmVsLCBzbyB0aGlzIGNhbiBiZSBzb21ld2hhdCBzbG93LCBhbmQgbWF5Ci1jYXVzZSBtb3JlIHBhY2tldHMgdG8gYmUgZHJvcHBlZC4KLS5JUCAiXGZCaXAgcHJvdG9jaGFpbiBcZklwcm90b2NvbFxmUiIKLUVxdWl2YWxlbnQgdG8gXGZCaXA2IHByb3RvY2hhaW4gXGZJcHJvdG9jb2xcZlIsIGJ1dCB0aGlzIGlzIGZvciBJUHY0LgotLklQICJcZkJwcm90b2NoYWluIFxmSXByb3RvY29sXGZSIgotVHJ1ZSBpZiB0aGUgcGFja2V0IGlzIGFuIElQdjQgb3IgSVB2NiBwYWNrZXQgb2YgcHJvdG9jb2wgdHlwZQotXGZJcHJvdG9jb2xcZlAuICBOb3RlIHRoYXQgdGhpcyBwcmltaXRpdmUgY2hhc2VzIHRoZSBwcm90b2NvbAotaGVhZGVyIGNoYWluLgotLklQICJcZkJldGhlciBicm9hZGNhc3RcZlIiCi1UcnVlIGlmIHRoZSBwYWNrZXQgaXMgYW4gRXRoZXJuZXQgYnJvYWRjYXN0IHBhY2tldC4KLVRoZSBcZklldGhlclxmUAota2V5d29yZCBpcyBvcHRpb25hbC4KLS5JUCAiXGZCaXAgYnJvYWRjYXN0XGZSIgotVHJ1ZSBpZiB0aGUgcGFja2V0IGlzIGFuIElQdjQgYnJvYWRjYXN0IHBhY2tldC4KLUl0IGNoZWNrcyBmb3IgYm90aCB0aGUgYWxsLXplcm9lcyBhbmQgYWxsLW9uZXMgYnJvYWRjYXN0IGNvbnZlbnRpb25zLAotYW5kIGxvb2tzIHVwIHRoZSBzdWJuZXQgbWFzayBvbiB0aGUgaW50ZXJmYWNlIG9uIHdoaWNoIHRoZSBjYXB0dXJlIGlzCi1iZWluZyBkb25lLgotLklQCi1JZiB0aGUgc3VibmV0IG1hc2sgb2YgdGhlIGludGVyZmFjZSBvbiB3aGljaCB0aGUgY2FwdHVyZSBpcyBiZWluZyBkb25lCi1pcyBub3QgYXZhaWxhYmxlLCBlaXRoZXIgYmVjYXVzZSB0aGUgaW50ZXJmYWNlIG9uIHdoaWNoIGNhcHR1cmUgaXMgYmVpbmcKLWRvbmUgaGFzIG5vIG5ldG1hc2sgb3IgYmVjYXVzZSB0aGUgY2FwdHVyZSBpcyBiZWluZyBkb25lIG9uIHRoZSBMaW51eAotImFueSIgaW50ZXJmYWNlLCB3aGljaCBjYW4gY2FwdHVyZSBvbiBtb3JlIHRoYW4gb25lIGludGVyZmFjZSwgdGhpcwotY2hlY2sgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkuCi0uSVAgIlxmQmV0aGVyIG11bHRpY2FzdFxmUiIKLVRydWUgaWYgdGhlIHBhY2tldCBpcyBhbiBFdGhlcm5ldCBtdWx0aWNhc3QgcGFja2V0LgotVGhlIFxmQmV0aGVyXGZQCi1rZXl3b3JkIGlzIG9wdGlvbmFsLgotVGhpcyBpcyBzaG9ydGhhbmQgZm9yIGBcZkJldGhlclswXSAmIDEgIT0gMFxmUCcuCi0uSVAgIlxmQmlwIG11bHRpY2FzdFxmUiIKLVRydWUgaWYgdGhlIHBhY2tldCBpcyBhbiBJUHY0IG11bHRpY2FzdCBwYWNrZXQuCi0uSVAgIlxmQmlwNiBtdWx0aWNhc3RcZlIiCi1UcnVlIGlmIHRoZSBwYWNrZXQgaXMgYW4gSVB2NiBtdWx0aWNhc3QgcGFja2V0LgotLklQICAiXGZCZXRoZXIgcHJvdG8gXGZJcHJvdG9jb2xcZlIiCi1UcnVlIGlmIHRoZSBwYWNrZXQgaXMgb2YgZXRoZXIgdHlwZSBcZklwcm90b2NvbFxmUi4KLVxmSVByb3RvY29sXGZQIGNhbiBiZSBhIG51bWJlciBvciBvbmUgb2YgdGhlIG5hbWVzCi1cZkJpcFxmUCwgXGZCaXA2XGZQLCBcZkJhcnBcZlAsIFxmQnJhcnBcZlAsIFxmQmF0YWxrXGZQLCBcZkJhYXJwXGZQLAotXGZCZGVjbmV0XGZQLCBcZkJzY2FcZlAsIFxmQmxhdFxmUCwgXGZCbW9wZGxcZlAsIFxmQm1vcHJjXGZQLAotXGZCaXNvXGZQLCBcZkJzdHBcZlAsIFxmQmlweFxmUCwgb3IgXGZCbmV0YmV1aVxmUC4KLU5vdGUgdGhlc2UgaWRlbnRpZmllcnMgYXJlIGFsc28ga2V5d29yZHMKLWFuZCBtdXN0IGJlIGVzY2FwZWQgdmlhIGJhY2tzbGFzaCAoXFwpLgotLklQCi1bSW4gdGhlIGNhc2Ugb2YgRkRESSAoZS5nLiwgYFxmQmZkZGkgcHJvdG8gYXJwXGZSJyksIFRva2VuIFJpbmcKLShlLmcuLCBgXGZCdHIgcHJvdG8gYXJwXGZSJyksIGFuZCBJRUVFIDgwMi4xMSB3aXJlbGVzcyBMQU5TIChlLmcuLAotYFxmQndsYW4gcHJvdG8gYXJwXGZSJyksIGZvciBtb3N0IG9mIHRob3NlIHByb3RvY29scywgdGhlCi1wcm90b2NvbCBpZGVudGlmaWNhdGlvbiBjb21lcyBmcm9tIHRoZSA4MDIuMiBMb2dpY2FsIExpbmsgQ29udHJvbCAoTExDKQotaGVhZGVyLCB3aGljaCBpcyB1c3VhbGx5IGxheWVyZWQgb24gdG9wIG9mIHRoZSBGRERJLCBUb2tlbiBSaW5nLCBvcgotODAyLjExIGhlYWRlci4KLS5JUAotV2hlbiBmaWx0ZXJpbmcgZm9yIG1vc3QgcHJvdG9jb2wgaWRlbnRpZmllcnMgb24gRkRESSwgVG9rZW4gUmluZywgb3IKLTgwMi4xMSwgdGhlIGZpbHRlciBjaGVja3Mgb25seSB0aGUgcHJvdG9jb2wgSUQgZmllbGQgb2YgYW4gTExDIGhlYWRlcgotaW4gc28tY2FsbGVkIFNOQVAgZm9ybWF0IHdpdGggYW4gT3JnYW5pemF0aW9uYWwgVW5pdCBJZGVudGlmaWVyIChPVUkpIG9mCi0weDAwMDAwMCwgZm9yIGVuY2Fwc3VsYXRlZCBFdGhlcm5ldDsgaXQgZG9lc24ndCBjaGVjayB3aGV0aGVyIHRoZSBwYWNrZXQKLWlzIGluIFNOQVAgZm9ybWF0IHdpdGggYW4gT1VJIG9mIDB4MDAwMDAwLgotVGhlIGV4Y2VwdGlvbnMgYXJlOgotLlJTCi0uVFAKLVxmQmlzb1xmUAotdGhlIGZpbHRlciBjaGVja3MgdGhlIERTQVAgKERlc3RpbmF0aW9uIFNlcnZpY2UgQWNjZXNzIFBvaW50KSBhbmQKLVNTQVAgKFNvdXJjZSBTZXJ2aWNlIEFjY2VzcyBQb2ludCkgZmllbGRzIG9mIHRoZSBMTEMgaGVhZGVyOwotLlRQCi1cZkJzdHBcZlAgYW5kIFxmQm5ldGJldWlcZlAKLXRoZSBmaWx0ZXIgY2hlY2tzIHRoZSBEU0FQIG9mIHRoZSBMTEMgaGVhZGVyOwotLlRQCi1cZkJhdGFsa1xmUAotdGhlIGZpbHRlciBjaGVja3MgZm9yIGEgU05BUC1mb3JtYXQgcGFja2V0IHdpdGggYW4gT1VJIG9mIDB4MDgwMDA3Ci1hbmQgdGhlIEFwcGxlVGFsayBldHlwZS4KLS5SRQotLklQCi1JbiB0aGUgY2FzZSBvZiBFdGhlcm5ldCwgdGhlIGZpbHRlciBjaGVja3MgdGhlIEV0aGVybmV0IHR5cGUgZmllbGQKLWZvciBtb3N0IG9mIHRob3NlIHByb3RvY29scy4gIFRoZSBleGNlcHRpb25zIGFyZToKLS5SUwotLlRQCi1cZkJpc29cZlAsIFxmQnN0cFxmUCwgYW5kIFxmQm5ldGJldWlcZlAKLXRoZSBmaWx0ZXIgY2hlY2tzIGZvciBhbiA4MDIuMyBmcmFtZSBhbmQgdGhlbiBjaGVja3MgdGhlIExMQyBoZWFkZXIgYXMKLWl0IGRvZXMgZm9yIEZEREksIFRva2VuIFJpbmcsIGFuZCA4MDIuMTE7Ci0uVFAKLVxmQmF0YWxrXGZQCi10aGUgZmlsdGVyIGNoZWNrcyBib3RoIGZvciB0aGUgQXBwbGVUYWxrIGV0eXBlIGluIGFuIEV0aGVybmV0IGZyYW1lIGFuZAotZm9yIGEgU05BUC1mb3JtYXQgcGFja2V0IGFzIGl0IGRvZXMgZm9yIEZEREksIFRva2VuIFJpbmcsIGFuZCA4MDIuMTE7Ci0uVFAKLVxmQmFhcnBcZlAKLXRoZSBmaWx0ZXIgY2hlY2tzIGZvciB0aGUgQXBwbGVUYWxrIEFSUCBldHlwZSBpbiBlaXRoZXIgYW4gRXRoZXJuZXQKLWZyYW1lIG9yIGFuIDgwMi4yIFNOQVAgZnJhbWUgd2l0aCBhbiBPVUkgb2YgMHgwMDAwMDA7Ci0uVFAKLVxmQmlweFxmUAotdGhlIGZpbHRlciBjaGVja3MgZm9yIHRoZSBJUFggZXR5cGUgaW4gYW4gRXRoZXJuZXQgZnJhbWUsIHRoZSBJUFgKLURTQVAgaW4gdGhlIExMQyBoZWFkZXIsIHRoZSA4MDIuMy13aXRoLW5vLUxMQy1oZWFkZXIgZW5jYXBzdWxhdGlvbiBvZgotSVBYLCBhbmQgdGhlIElQWCBldHlwZSBpbiBhIFNOQVAgZnJhbWUuCi0uUkUKLS5JUCAiXGZCaXBcZlIsIFxmQmlwNlxmUiwgXGZCYXJwXGZSLCBcZkJyYXJwXGZSLCBcZkJhdGFsa1xmUiwgXGZCYWFycFxmUiwgXGZCZGVjbmV0XGZSLCBcZkJpc29cZlIsIFxmQnN0cFxmUiwgXGZCaXB4XGZSLCBcZkJuZXRiZXVpXGZQIgotQWJicmV2aWF0aW9ucyBmb3I6Ci0uaW4gKy41aQotLm5mCi1cZkJldGhlciBwcm90byBcZklwXGZSCi0uZmkKLS5pbiAtLjVpCi13aGVyZSBcZklwXGZSIGlzIG9uZSBvZiB0aGUgYWJvdmUgcHJvdG9jb2xzLgotLklQICJcZkJsYXRcZlIsIFxmQm1vcHJjXGZSLCBcZkJtb3BkbFxmUiIKLUFiYnJldmlhdGlvbnMgZm9yOgotLmluICsuNWkKLS5uZgotXGZCZXRoZXIgcHJvdG8gXGZJcFxmUgotLmZpCi0uaW4gLS41aQotd2hlcmUgXGZJcFxmUiBpcyBvbmUgb2YgdGhlIGFib3ZlIHByb3RvY29scy4KLU5vdGUgdGhhdCBub3QgYWxsIGFwcGxpY2F0aW9ucyB1c2luZwotLkJSIHBjYXAgKDNQQ0FQKQotY3VycmVudGx5IGtub3cgaG93IHRvIHBhcnNlIHRoZXNlIHByb3RvY29scy4KLS5JUCAiXGZCZGVjbmV0IHNyYyBcZklob3N0XGZSIgotVHJ1ZSBpZiB0aGUgREVDTkVUIHNvdXJjZSBhZGRyZXNzIGlzCi0uSVIgaG9zdCAsCi13aGljaCBtYXkgYmUgYW4gYWRkcmVzcyBvZiB0aGUgZm9ybSBgYDEwLjEyMycnLCBvciBhIERFQ05FVCBob3N0Ci1uYW1lLgotW0RFQ05FVCBob3N0IG5hbWUgc3VwcG9ydCBpcyBvbmx5IGF2YWlsYWJsZSBvbiBVTFRSSVggc3lzdGVtcwotdGhhdCBhcmUgY29uZmlndXJlZCB0byBydW4gREVDTkVULl0KLS5JUCAiXGZCZGVjbmV0IGRzdCBcZklob3N0XGZSIgotVHJ1ZSBpZiB0aGUgREVDTkVUIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMKLS5JUiBob3N0IC4KLS5JUCAiXGZCZGVjbmV0IGhvc3QgXGZJaG9zdFxmUiIKLVRydWUgaWYgZWl0aGVyIHRoZSBERUNORVQgc291cmNlIG9yIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMKLS5JUiBob3N0IC4KLS5JUCBcZkJsbGNcZlAKLVRydWUgaWYgdGhlIHBhY2tldCBoYXMgYW4gODAyLjIgTExDIGhlYWRlci4gIFRoaXMgaW5jbHVkZXM6Ci0uSVAKLUV0aGVybmV0IHBhY2tldHMgd2l0aCBhIGxlbmd0aCBmaWVsZCByYXRoZXIgdGhhbiBhIHR5cGUgZmllbGQgdGhhdAotYXJlbid0IHJhdyBOZXRXYXJlLW92ZXItODAyLjMgcGFja2V0czsKLS5JUAotSUVFRSA4MDIuMTEgZGF0YSBwYWNrZXRzOwotLklQCi1Ub2tlbiBSaW5nIHBhY2tldHMgKG5vIGNoZWNrIGlzIGRvbmUgZm9yIExMQyBmcmFtZXMpOwotLklQCi1GRERJIHBhY2tldHMgKG5vIGNoZWNrIGlzIGRvbmUgZm9yIExMQyBmcmFtZXMpOwotLklQCi1MTEMtZW5jYXBzdWxhdGVkIEFUTSBwYWNrZXRzLCBmb3IgU3VuQVRNIG9uIFNvbGFyaXMuCi0uSVAKLQotLklQICJcZkJsbGNcZlAgXEZpdHlwZVxmUiIKLVRydWUgaWYgdGhlIHBhY2tldCBoYXMgYW4gODAyLjIgTExDIGhlYWRlciBhbmQgaGFzIHRoZSBzcGVjaWZpZWQKLS5JUiB0eXBlIC4KLS5JIHR5cGUKLWNhbiBiZSBvbmUgb2Y6Ci0uUlMKLS5UUAotXGZCaVxmUgotSW5mb3JtYXRpb24gKEkpIFBEVXMKLS5UUAotXGZCc1xmUgotU3VwZXJ2aXNvcnkgKFMpIFBEVXMKLS5UUAotXGZCdVxmUgotVW5udW1iZXJlZCAoVSkgUERVcwotLlRQCi1cZkJyclxmUgotUmVjZWl2ZXIgUmVhZHkgKFJSKSBTIFBEVXMKLS5UUAotXGZCcm5yXGZSCi1SZWNlaXZlciBOb3QgUmVhZHkgKFJOUikgUyBQRFVzCi0uVFAKLVxmQnJlalxmUgotUmVqZWN0IChSRUopIFMgUERVcwotLlRQCi1cZkJ1aVxmUgotVW5udW1iZXJlZCBJbmZvcm1hdGlvbiAoVUkpIFUgUERVcwotLlRQCi1cZkJ1YVxmUgotVW5udW1iZXJlZCBBY2tub3dsZWRnbWVudCAoVUEpIFUgUERVcwotLlRQCi1cZkJkaXNjXGZSCi1EaXNjb25uZWN0IChESVNDKSBVIFBEVXMKLS5UUAotXGZCc2FibWVcZlIKLVNldCBBc3luY2hyb25vdXMgQmFsYW5jZWQgTW9kZSBFeHRlbmRlZCAoU0FCTUUpIFUgUERVcwotLlRQCi1cZkJ0ZXN0XGZSCi1UZXN0IChURVNUKSBVIFBEVXMKLS5UUAotXGZCeGlkXGZSCi1FeGNoYW5nZSBJZGVudGlmaWNhdGlvbiAoWElEKSBVIFBEVXMKLS5UUAotXGZCZnJtclxmUgotRnJhbWUgUmVqZWN0IChGUk1SKSBVIFBEVXMKLS5SRQotLklQICJcZkJpZm5hbWUgXGZJaW50ZXJmYWNlXGZSIgotVHJ1ZSBpZiB0aGUgcGFja2V0IHdhcyBsb2dnZWQgYXMgY29taW5nIGZyb20gdGhlIHNwZWNpZmllZCBpbnRlcmZhY2UgKGFwcGxpZXMKLW9ubHkgdG8gcGFja2V0cyBsb2dnZWQgYnkgT3BlbkJTRCdzIG9yIEZyZWVCU0QncwotLkJSIHBmICg0KSkuCi0uSVAgIlxmQm9uIFxmSWludGVyZmFjZVxmUiIKLVN5bm9ueW1vdXMgd2l0aCB0aGUKLS5CIGlmbmFtZQotbW9kaWZpZXIuCi0uSVAgIlxmQnJuciBcZkludW1cZlIiCi1UcnVlIGlmIHRoZSBwYWNrZXQgd2FzIGxvZ2dlZCBhcyBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIFBGIHJ1bGUgbnVtYmVyCi0oYXBwbGllcyBvbmx5IHRvIHBhY2tldHMgbG9nZ2VkIGJ5IE9wZW5CU0QncyBvciBGcmVlQlNEJ3MKLS5CUiBwZiAoNCkpLgotLklQICJcZkJydWxlbnVtIFxmSW51bVxmUiIKLVN5bm9ueW1vdXMgd2l0aCB0aGUKLS5CIHJucgotbW9kaWZpZXIuCi0uSVAgIlxmQnJlYXNvbiBcZkljb2RlXGZSIgotVHJ1ZSBpZiB0aGUgcGFja2V0IHdhcyBsb2dnZWQgd2l0aCB0aGUgc3BlY2lmaWVkIFBGIHJlYXNvbiBjb2RlLiAgVGhlIGtub3duCi1jb2RlcyBhcmU6Ci0uQlIgbWF0Y2ggLAotLkJSIGJhZC1vZmZzZXQgLAotLkJSIGZyYWdtZW50ICwKLS5CUiBzaG9ydCAsCi0uQlIgbm9ybWFsaXplICwKLWFuZAotLkIgbWVtb3J5Ci0oYXBwbGllcyBvbmx5IHRvIHBhY2tldHMgbG9nZ2VkIGJ5IE9wZW5CU0QncyBvciBGcmVlQlNEJ3MKLS5CUiBwZiAoNCkpLgotLklQICJcZkJyc2V0IFxmSW5hbWVcZlIiCi1UcnVlIGlmIHRoZSBwYWNrZXQgd2FzIGxvZ2dlZCBhcyBtYXRjaGluZyB0aGUgc3BlY2lmaWVkIFBGIHJ1bGVzZXQKLW5hbWUgb2YgYW4gYW5jaG9yZWQgcnVsZXNldCAoYXBwbGllcyBvbmx5IHRvIHBhY2tldHMgbG9nZ2VkIGJ5IE9wZW5CU0Qncwotb3IgRnJlZUJTRCdzCi0uQlIgcGYgKDQpKS4KLS5JUCAiXGZCcnVsZXNldCBcZkluYW1lXGZSIgotU3lub255bW91cyB3aXRoIHRoZQotLkIgcnNldAotbW9kaWZpZXIuCi0uSVAgIlxmQnNybnIgXGZJbnVtXGZSIgotVHJ1ZSBpZiB0aGUgcGFja2V0IHdhcyBsb2dnZWQgYXMgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBQRiBydWxlIG51bWJlcgotb2YgYW4gYW5jaG9yZWQgcnVsZXNldCAoYXBwbGllcyBvbmx5IHRvIHBhY2tldHMgbG9nZ2VkIGJ5IE9wZW5CU0QncyBvcgotRnJlZUJTRCdzCi0uQlIgcGYgKDQpKS4KLS5JUCAiXGZCc3VicnVsZW51bSBcZkludW1cZlIiCi1TeW5vbnltb3VzIHdpdGggdGhlCi0uQiBzcm5yCi1tb2RpZmllci4KLS5JUCAiXGZCYWN0aW9uIFxmSWFjdFxmUiIKLVRydWUgaWYgUEYgdG9vayB0aGUgc3BlY2lmaWVkIGFjdGlvbiB3aGVuIHRoZSBwYWNrZXQgd2FzIGxvZ2dlZC4gIEtub3duIGFjdGlvbnMKLWFyZToKLS5CIHBhc3MKLWFuZAotLkIgYmxvY2sKLWFuZCwgd2l0aCBsYXRlciB2ZXJzaW9ucyBvZgotLkJSIHBmICg0KSwKLS5CUiBuYXQgLAotLkJSIHJkciAsCi0uQiBiaW5hdAotYW5kCi0uQiBzY3J1YgotKGFwcGxpZXMgb25seSB0byBwYWNrZXRzIGxvZ2dlZCBieSBPcGVuQlNEJ3Mgb3IgRnJlZUJTRCdzCi0uQlIgcGYgKDQpKS4KLS5JUCAiXGZCd2xhbiByYSBcZkllaG9zdFxmUiIKLVRydWUgaWYgdGhlIElFRUUgODAyLjExIFJBIGlzCi0uSVIgZWhvc3QgLgotVGhlIFJBIGZpZWxkIGlzIHVzZWQgaW4gYWxsIGZyYW1lcyBleGNlcHQgZm9yIG1hbmFnZW1lbnQgZnJhbWVzLgotLklQICJcZkJ3bGFuIHRhIFxmSWVob3N0XGZSIgotVHJ1ZSBpZiB0aGUgSUVFRSA4MDIuMTEgVEEgaXMKLS5JUiBlaG9zdCAuCi1UaGUgVEEgZmllbGQgaXMgdXNlZCBpbiBhbGwgZnJhbWVzIGV4Y2VwdCBmb3IgbWFuYWdlbWVudCBmcmFtZXMgYW5kCi1DVFMgKENsZWFyIFRvIFNlbmQpIGFuZCBBQ0sgKEFja25vd2xlZGdtZW50KSBjb250cm9sIGZyYW1lcy4KLS5JUCAiXGZCd2xhbiBhZGRyMSBcZkllaG9zdFxmUiIKLVRydWUgaWYgdGhlIGZpcnN0IElFRUUgODAyLjExIGFkZHJlc3MgaXMKLS5JUiBlaG9zdCAuCi0uSVAgIlxmQndsYW4gYWRkcjIgXGZJZWhvc3RcZlIiCi1UcnVlIGlmIHRoZSBzZWNvbmQgSUVFRSA4MDIuMTEgYWRkcmVzcywgaWYgcHJlc2VudCwgaXMKLS5JUiBlaG9zdCAuCi1UaGUgc2Vjb25kIGFkZHJlc3MgZmllbGQgaXMgdXNlZCBpbiBhbGwgZnJhbWVzIGV4Y2VwdCBmb3IgQ1RTIChDbGVhciBUbwotU2VuZCkgYW5kIEFDSyAoQWNrbm93bGVkZ21lbnQpIGNvbnRyb2wgZnJhbWVzLgotLklQICJcZkJ3bGFuIGFkZHIzIFxmSWVob3N0XGZSIgotVHJ1ZSBpZiB0aGUgdGhpcmQgSUVFRSA4MDIuMTEgYWRkcmVzcywgaWYgcHJlc2VudCwgaXMKLS5JUiBlaG9zdCAuCi1UaGUgdGhpcmQgYWRkcmVzcyBmaWVsZCBpcyB1c2VkIGluIG1hbmFnZW1lbnQgYW5kIGRhdGEgZnJhbWVzLCBidXQgbm90Ci1pbiBjb250cm9sIGZyYW1lcy4KLS5JUCAiXGZCd2xhbiBhZGRyNCBcZkllaG9zdFxmUiIKLVRydWUgaWYgdGhlIGZvdXJ0aCBJRUVFIDgwMi4xMSBhZGRyZXNzLCBpZiBwcmVzZW50LCBpcwotLklSIGVob3N0IC4KLVRoZSBmb3VydGggYWRkcmVzcyBmaWVsZCBpcyBvbmx5IHVzZWQgZm9yCi1XRFMgKFdpcmVsZXNzIERpc3RyaWJ1dGlvbiBTeXN0ZW0pIGZyYW1lcy4KLS5JUCAiXGZCdHlwZSBcZkl3bGFuX3R5cGVcZlIiCi1UcnVlIGlmIHRoZSBJRUVFIDgwMi4xMSBmcmFtZSB0eXBlIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBcZkl3bGFuX3R5cGVcZlIuCi1WYWxpZCBcZkl3bGFuX3R5cGVcZlJzIGFyZToKLVxmQm1ndFxmUCwKLVxmQmN0bFxmUAotYW5kIFxmQmRhdGFcZlAuCi0uSVAgIlxmQnR5cGUgXGZJd2xhbl90eXBlIFxmQnN1YnR5cGUgXGZJd2xhbl9zdWJ0eXBlXGZSIgotVHJ1ZSBpZiB0aGUgSUVFRSA4MDIuMTEgZnJhbWUgdHlwZSBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgXGZJd2xhbl90eXBlXGZSCi1hbmQgZnJhbWUgc3VidHlwZSBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgXGZJd2xhbl9zdWJ0eXBlXGZSLgotLklQCi1JZiB0aGUgc3BlY2lmaWVkIFxmSXdsYW5fdHlwZVxmUiBpcyBcZkJtZ3RcZlAsCi10aGVuIHZhbGlkIFxmSXdsYW5fc3VidHlwZVxmUnMgYXJlOgotXGZCYXNzb2MtcmVxXGZQLAotXGZCYXNzb2MtcmVzcFxmUCwKLVxmQnJlYXNzb2MtcmVxXGZQLAotXGZCcmVhc3NvYy1yZXNwXGZQLAotXGZCcHJvYmUtcmVxXGZQLAotXGZCcHJvYmUtcmVzcFxmUCwKLVxmQmJlYWNvblxmUCwKLVxmQmF0aW1cZlAsCi1cZkJkaXNhc3NvY1xmUCwKLVxmQmF1dGhcZlAgYW5kCi1cZkJkZWF1dGhcZlAuCi0uSVAKLUlmIHRoZSBzcGVjaWZpZWQgXGZJd2xhbl90eXBlXGZSIGlzIFxmQmN0bFxmUCwKLXRoZW4gdmFsaWQgXGZJd2xhbl9zdWJ0eXBlXGZScyBhcmU6Ci1cZkJwcy1wb2xsXGZQLAotXGZCcnRzXGZQLAotXGZCY3RzXGZQLAotXGZCYWNrXGZQLAotXGZCY2YtZW5kXGZQIGFuZAotXGZCY2YtZW5kLWFja1xmUC4KLS5JUAotSWYgdGhlIHNwZWNpZmllZCBcZkl3bGFuX3R5cGVcZlIgaXMgXGZCZGF0YVxmUCwKLXRoZW4gdmFsaWQgXGZJd2xhbl9zdWJ0eXBlXGZScyBhcmU6Ci1cZkJkYXRhXGZQLAotXGZCZGF0YS1jZi1hY2tcZlAsCi1cZkJkYXRhLWNmLXBvbGxcZlAsCi1cZkJkYXRhLWNmLWFjay1wb2xsXGZQLAotXGZCbnVsbFxmUCwKLVxmQmNmLWFja1xmUCwKLVxmQmNmLXBvbGxcZlAsCi1cZkJjZi1hY2stcG9sbFxmUCwKLVxmQnFvcy1kYXRhXGZQLAotXGZCcW9zLWRhdGEtY2YtYWNrXGZQLAotXGZCcW9zLWRhdGEtY2YtcG9sbFxmUCwKLVxmQnFvcy1kYXRhLWNmLWFjay1wb2xsXGZQLAotXGZCcW9zXGZQLAotXGZCcW9zLWNmLXBvbGxcZlAgYW5kCi1cZkJxb3MtY2YtYWNrLXBvbGxcZlAuCi0uSVAgIlxmQnN1YnR5cGUgXGZJd2xhbl9zdWJ0eXBlXGZSIgotVHJ1ZSBpZiB0aGUgSUVFRSA4MDIuMTEgZnJhbWUgc3VidHlwZSBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgXGZJd2xhbl9zdWJ0eXBlXGZSCi1hbmQgZnJhbWUgaGFzIHRoZSB0eXBlIHRvIHdoaWNoIHRoZSBzcGVjaWZpZWQgXGZJd2xhbl9zdWJ0eXBlXGZSIGJlbG9uZ3MuCi0uSVAgIlxmQmRpciBcZklkaXJcZlIiCi1UcnVlIGlmIHRoZSBJRUVFIDgwMi4xMSBmcmFtZSBkaXJlY3Rpb24gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkCi0uSVIgZGlyIC4KLVZhbGlkIGRpcmVjdGlvbnMgYXJlOgotLkJSIG5vZHMgLAotLkJSIHRvZHMgLAotLkJSIGZyb21kcyAsCi0uQlIgZHN0b2RzICwKLW9yIGEgbnVtZXJpYyB2YWx1ZS4KLS5JUCAiXGZCdmxhbiBcZklbdmxhbl9pZF1cZlIiCi1UcnVlIGlmIHRoZSBwYWNrZXQgaXMgYW4gSUVFRSA4MDIuMVEgVkxBTiBwYWNrZXQuCi1JZiBcZklbdmxhbl9pZF1cZlIgaXMgc3BlY2lmaWVkLCBvbmx5IHRydWUgaWYgdGhlIHBhY2tldCBoYXMgdGhlIHNwZWNpZmllZAotXGZJdmxhbl9pZFxmUi4KLU5vdGUgdGhhdCB0aGUgZmlyc3QgXGZCdmxhblxmUiBrZXl3b3JkIGVuY291bnRlcmVkIGluIFxmSWV4cHJlc3Npb25cZlIKLWNoYW5nZXMgdGhlIGRlY29kaW5nIG9mZnNldHMgZm9yIHRoZSByZW1haW5kZXIgb2YgXGZJZXhwcmVzc2lvblxmUiBvbgotdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgcGFja2V0IGlzIGEgVkxBTiBwYWNrZXQuICBUaGUgXGZCdmxhbgotXGZJW3ZsYW5faWRdXGZSIGV4cHJlc3Npb24gbWF5IGJlIHVzZWQgbW9yZSB0aGFuIG9uY2UsIHRvIGZpbHRlciBvbiBWTEFOCi1oaWVyYXJjaGllcy4gIEVhY2ggdXNlIG9mIHRoYXQgZXhwcmVzc2lvbiBpbmNyZW1lbnRzIHRoZSBmaWx0ZXIgb2Zmc2V0cwotYnkgNC4KLS5JUAotRm9yIGV4YW1wbGU6Ci0uaW4gKy41aQotLm5mCi1cZkJ2bGFuIDEwMCAmJiB2bGFuIDIwMFxmUgotLmZpCi0uaW4gLS41aQotZmlsdGVycyBvbiBWTEFOIDIwMCBlbmNhcHN1bGF0ZWQgd2l0aGluIFZMQU4gMTAwLCBhbmQKLS5pbiArLjVpCi0ubmYKLVxmQnZsYW4gJiYgdmxhbiAzMDAgJiYgaXBcZlIKLS5maQotLmluIC0uNWkKLWZpbHRlcnMgSVB2NCBwcm90b2NvbHMgZW5jYXBzdWxhdGVkIGluIFZMQU4gMzAwIGVuY2Fwc3VsYXRlZCB3aXRoaW4gYW55Ci1oaWdoZXIgb3JkZXIgVkxBTi4KLS5JUCAiXGZCbXBscyBcZklbbGFiZWxfbnVtXVxmUiIKLVRydWUgaWYgdGhlIHBhY2tldCBpcyBhbiBNUExTIHBhY2tldC4KLUlmIFxmSVtsYWJlbF9udW1dXGZSIGlzIHNwZWNpZmllZCwgb25seSB0cnVlIGlzIHRoZSBwYWNrZXQgaGFzIHRoZSBzcGVjaWZpZWQKLVxmSWxhYmVsX251bVxmUi4KLU5vdGUgdGhhdCB0aGUgZmlyc3QgXGZCbXBsc1xmUiBrZXl3b3JkIGVuY291bnRlcmVkIGluIFxmSWV4cHJlc3Npb25cZlIKLWNoYW5nZXMgdGhlIGRlY29kaW5nIG9mZnNldHMgZm9yIHRoZSByZW1haW5kZXIgb2YgXGZJZXhwcmVzc2lvblxmUiBvbgotdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgcGFja2V0IGlzIGEgTVBMUy1lbmNhcHN1bGF0ZWQgSVAgcGFja2V0LiAgVGhlCi1cZkJtcGxzIFxmSVtsYWJlbF9udW1dXGZSIGV4cHJlc3Npb24gbWF5IGJlIHVzZWQgbW9yZSB0aGFuIG9uY2UsIHRvCi1maWx0ZXIgb24gTVBMUyBoaWVyYXJjaGllcy4gIEVhY2ggdXNlIG9mIHRoYXQgZXhwcmVzc2lvbiBpbmNyZW1lbnRzIHRoZQotZmlsdGVyIG9mZnNldHMgYnkgNC4KLS5JUAotRm9yIGV4YW1wbGU6Ci0uaW4gKy41aQotLm5mCi1cZkJtcGxzIDEwMDAwMCAmJiBtcGxzIDEwMjRcZlIKLS5maQotLmluIC0uNWkKLWZpbHRlcnMgcGFja2V0cyB3aXRoIGFuIG91dGVyIGxhYmVsIG9mIDEwMDAwMCBhbmQgYW4gaW5uZXIgbGFiZWwgb2YKLTEwMjQsIGFuZAotLmluICsuNWkKLS5uZgotXGZCbXBscyAmJiBtcGxzIDEwMjQgJiYgaG9zdCAxOTIuOS4yMDAuMVxmUgotLmZpCi0uaW4gLS41aQotZmlsdGVycyBwYWNrZXRzIHRvIG9yIGZyb20gMTkyLjkuMjAwLjEgd2l0aCBhbiBpbm5lciBsYWJlbCBvZiAxMDI0IGFuZAotYW55IG91dGVyIGxhYmVsLgotLklQIFxmQnBwcG9lZFxmUAotVHJ1ZSBpZiB0aGUgcGFja2V0IGlzIGEgUFBQLW92ZXItRXRoZXJuZXQgRGlzY292ZXJ5IHBhY2tldCAoRXRoZXJuZXQKLXR5cGUgMHg4ODYzKS4KLS5JUCAiXGZCcHBwb2VzIFxmSVtzZXNzaW9uX2lkXVxmUiIKLVRydWUgaWYgdGhlIHBhY2tldCBpcyBhIFBQUC1vdmVyLUV0aGVybmV0IFNlc3Npb24gcGFja2V0IChFdGhlcm5ldAotdHlwZSAweDg4NjQpLgotSWYgXGZJW3Nlc3Npb25faWRdXGZSIGlzIHNwZWNpZmllZCwgb25seSB0cnVlIGlmIHRoZSBwYWNrZXQgaGFzIHRoZSBzcGVjaWZpZWQKLVxmSXNlc3Npb25faWRcZlIuCi1Ob3RlIHRoYXQgdGhlIGZpcnN0IFxmQnBwcG9lc1xmUiBrZXl3b3JkIGVuY291bnRlcmVkIGluIFxmSWV4cHJlc3Npb25cZlIKLWNoYW5nZXMgdGhlIGRlY29kaW5nIG9mZnNldHMgZm9yIHRoZSByZW1haW5kZXIgb2YgXGZJZXhwcmVzc2lvblxmUiBvbgotdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgcGFja2V0IGlzIGEgUFBQb0Ugc2Vzc2lvbiBwYWNrZXQuCi0uSVAKLUZvciBleGFtcGxlOgotLmluICsuNWkKLS5uZgotXGZCcHBwb2VzIDB4MjcgJiYgaXBcZlIKLS5maQotLmluIC0uNWkKLWZpbHRlcnMgSVB2NCBwcm90b2NvbHMgZW5jYXBzdWxhdGVkIGluIFBQUG9FIHNlc3Npb24gaWQgMHgyNy4KLS5JUCAiXGZCZ2VuZXZlIFxmSVt2bmldXGZSIgotVHJ1ZSBpZiB0aGUgcGFja2V0IGlzIGEgR2VuZXZlIHBhY2tldCAoVURQIHBvcnQgNjA4MSkuIElmIFxmSVt2bmldXGZSCi1pcyBzcGVjaWZpZWQsIG9ubHkgdHJ1ZSBpZiB0aGUgcGFja2V0IGhhcyB0aGUgc3BlY2lmaWVkIFxmSXZuaVxmUi4KLU5vdGUgdGhhdCB3aGVuIHRoZSBcZkJnZW5ldmVcZlIga2V5d29yZCBpcyBlbmNvdW50ZXJlZCBpbgotXGZJZXhwcmVzc2lvblxmUiwgaXQgY2hhbmdlcyB0aGUgZGVjb2Rpbmcgb2Zmc2V0cyBmb3IgdGhlIHJlbWFpbmRlciBvZgotXGZJZXhwcmVzc2lvblxmUiBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBwYWNrZXQgaXMgYSBHZW5ldmUgcGFja2V0LgotLklQCi1Gb3IgZXhhbXBsZToKLS5pbiArLjVpCi0ubmYKLVxmQmdlbmV2ZSAweGIgJiYgaXBcZlIKLS5maQotLmluIC0uNWkKLWZpbHRlcnMgSVB2NCBwcm90b2NvbHMgZW5jYXBzdWxhdGVkIGluIEdlbmV2ZSB3aXRoIFZOSSAweGIuIFRoaXMgd2lsbAotbWF0Y2ggYm90aCBJUCBkaXJlY3RseSBlbmNhcHN1bGF0ZWQgaW4gR2VuZXZlIGFzIHdlbGwgYXMgSVAgY29udGFpbmVkCi1pbnNpZGUgYW4gRXRoZXJuZXQgZnJhbWUuCi0uSVAgIlxmQmlzbyBwcm90byBcZklwcm90b2NvbFxmUiIKLVRydWUgaWYgdGhlIHBhY2tldCBpcyBhbiBPU0kgcGFja2V0IG9mIHByb3RvY29sIHR5cGUgXGZJcHJvdG9jb2xcZlAuCi1cZklQcm90b2NvbFxmUCBjYW4gYmUgYSBudW1iZXIgb3Igb25lIG9mIHRoZSBuYW1lcwotXGZCY2xucFxmUCwgXGZCZXNpc1xmUCwgb3IgXGZCaXNpc1xmUC4KLS5JUCAiXGZCY2xucFxmUiwgXGZCZXNpc1xmUiwgXGZCaXNpc1xmUiIKLUFiYnJldmlhdGlvbnMgZm9yOgotLmluICsuNWkKLS5uZgotXGZCaXNvIHByb3RvIFxmSXBcZlIKLS5maQotLmluIC0uNWkKLXdoZXJlIFxmSXBcZlIgaXMgb25lIG9mIHRoZSBhYm92ZSBwcm90b2NvbHMuCi0uSVAgIlxmQmwxXGZSLCBcZkJsMlxmUiwgXGZCaWloXGZSLCBcZkJsc3BcZlIsIFxmQnNucFxmUiwgXGZCY3NucFxmUiwgXGZCcHNucFxmUiIKLUFiYnJldmlhdGlvbnMgZm9yIElTLUlTIFBEVSB0eXBlcy4KLS5JUCAiXGZCdnBpXGZQIFxmSW5cZlIiCi1UcnVlIGlmIHRoZSBwYWNrZXQgaXMgYW4gQVRNIHBhY2tldCwgZm9yIFN1bkFUTSBvbiBTb2xhcmlzLCB3aXRoIGEKLXZpcnR1YWwgcGF0aCBpZGVudGlmaWVyIG9mCi0uSVIgbiAuCi0uSVAgIlxmQnZjaVxmUCBcZkluXGZSIgotVHJ1ZSBpZiB0aGUgcGFja2V0IGlzIGFuIEFUTSBwYWNrZXQsIGZvciBTdW5BVE0gb24gU29sYXJpcywgd2l0aCBhCi12aXJ0dWFsIGNoYW5uZWwgaWRlbnRpZmllciBvZgotLklSIG4gLgotLklQIFxmQmxhbmVcZlAKLVRydWUgaWYgdGhlIHBhY2tldCBpcyBhbiBBVE0gcGFja2V0LCBmb3IgU3VuQVRNIG9uIFNvbGFyaXMsIGFuZCBpcwotYW4gQVRNIExBTkUgcGFja2V0LgotTm90ZSB0aGF0IHRoZSBmaXJzdCBcZkJsYW5lXGZSIGtleXdvcmQgZW5jb3VudGVyZWQgaW4gXGZJZXhwcmVzc2lvblxmUgotY2hhbmdlcyB0aGUgdGVzdHMgZG9uZSBpbiB0aGUgcmVtYWluZGVyIG9mIFxmSWV4cHJlc3Npb25cZlIKLW9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHBhY2tldCBpcyBlaXRoZXIgYSBMQU5FIGVtdWxhdGVkIEV0aGVybmV0Ci1wYWNrZXQgb3IgYSBMQU5FIExFIENvbnRyb2wgcGFja2V0LiAgSWYgXGZCbGFuZVxmUiBpc24ndCBzcGVjaWZpZWQsIHRoZQotdGVzdHMgYXJlIGRvbmUgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgcGFja2V0IGlzIGFuCi1MTEMtZW5jYXBzdWxhdGVkIHBhY2tldC4KLS5JUCBcZkJvYW1mNHNcZlAKLVRydWUgaWYgdGhlIHBhY2tldCBpcyBhbiBBVE0gcGFja2V0LCBmb3IgU3VuQVRNIG9uIFNvbGFyaXMsIGFuZCBpcwotYSBzZWdtZW50IE9BTSBGNCBmbG93IGNlbGwgKFZQST0wICYgVkNJPTMpLgotLklQIFxmQm9hbWY0ZVxmUAotVHJ1ZSBpZiB0aGUgcGFja2V0IGlzIGFuIEFUTSBwYWNrZXQsIGZvciBTdW5BVE0gb24gU29sYXJpcywgYW5kIGlzCi1hbiBlbmQtdG8tZW5kIE9BTSBGNCBmbG93IGNlbGwgKFZQST0wICYgVkNJPTQpLgotLklQIFxmQm9hbWY0XGZQCi1UcnVlIGlmIHRoZSBwYWNrZXQgaXMgYW4gQVRNIHBhY2tldCwgZm9yIFN1bkFUTSBvbiBTb2xhcmlzLCBhbmQgaXMKLWEgc2VnbWVudCBvciBlbmQtdG8tZW5kIE9BTSBGNCBmbG93IGNlbGwgKFZQST0wICYgKFZDST0zIHwgVkNJPTQpKS4KLS5JUCBcZkJvYW1cZlAKLVRydWUgaWYgdGhlIHBhY2tldCBpcyBhbiBBVE0gcGFja2V0LCBmb3IgU3VuQVRNIG9uIFNvbGFyaXMsIGFuZCBpcwotYSBzZWdtZW50IG9yIGVuZC10by1lbmQgT0FNIEY0IGZsb3cgY2VsbCAoVlBJPTAgJiAoVkNJPTMgfCBWQ0k9NCkpLgotLklQIFxmQm1ldGFjXGZQCi1UcnVlIGlmIHRoZSBwYWNrZXQgaXMgYW4gQVRNIHBhY2tldCwgZm9yIFN1bkFUTSBvbiBTb2xhcmlzLCBhbmQgaXMKLW9uIGEgbWV0YSBzaWduYWxpbmcgY2lyY3VpdCAoVlBJPTAgJiBWQ0k9MSkuCi0uSVAgXGZCYmNjXGZQCi1UcnVlIGlmIHRoZSBwYWNrZXQgaXMgYW4gQVRNIHBhY2tldCwgZm9yIFN1bkFUTSBvbiBTb2xhcmlzLCBhbmQgaXMKLW9uIGEgYnJvYWRjYXN0IHNpZ25hbGluZyBjaXJjdWl0IChWUEk9MCAmIFZDST0yKS4KLS5JUCBcZkJzY1xmUAotVHJ1ZSBpZiB0aGUgcGFja2V0IGlzIGFuIEFUTSBwYWNrZXQsIGZvciBTdW5BVE0gb24gU29sYXJpcywgYW5kIGlzCi1vbiBhIHNpZ25hbGluZyBjaXJjdWl0IChWUEk9MCAmIFZDST01KS4KLS5JUCBcZkJpbG1pY1xmUAotVHJ1ZSBpZiB0aGUgcGFja2V0IGlzIGFuIEFUTSBwYWNrZXQsIGZvciBTdW5BVE0gb24gU29sYXJpcywgYW5kIGlzCi1vbiBhbiBJTE1JIGNpcmN1aXQgKFZQST0wICYgVkNJPTE2KS4KLS5JUCBcZkJjb25uZWN0bXNnXGZQCi1UcnVlIGlmIHRoZSBwYWNrZXQgaXMgYW4gQVRNIHBhY2tldCwgZm9yIFN1bkFUTSBvbiBTb2xhcmlzLCBhbmQgaXMKLW9uIGEgc2lnbmFsaW5nIGNpcmN1aXQgYW5kIGlzIGEgUS4yOTMxIFNldHVwLCBDYWxsIFByb2NlZWRpbmcsIENvbm5lY3QsCi1Db25uZWN0IEFjaywgUmVsZWFzZSwgb3IgUmVsZWFzZSBEb25lIG1lc3NhZ2UuCi0uSVAgXGZCbWV0YWNvbm5lY3RcZlAKLVRydWUgaWYgdGhlIHBhY2tldCBpcyBhbiBBVE0gcGFja2V0LCBmb3IgU3VuQVRNIG9uIFNvbGFyaXMsIGFuZCBpcwotb24gYSBtZXRhIHNpZ25hbGluZyBjaXJjdWl0IGFuZCBpcyBhIFEuMjkzMSBTZXR1cCwgQ2FsbCBQcm9jZWVkaW5nLCBDb25uZWN0LAotUmVsZWFzZSwgb3IgUmVsZWFzZSBEb25lIG1lc3NhZ2UuCi0uSVAgICJcZklleHByIHJlbG9wIGV4cHJcZlIiCi1UcnVlIGlmIHRoZSByZWxhdGlvbiBob2xkcywgd2hlcmUgXGZJcmVsb3BcZlIgaXMgb25lIG9mID4sIDwsID49LCA8PSwgPSwKLSE9LCBhbmQgXGZJZXhwclxmUiBpcyBhbiBhcml0aG1ldGljIGV4cHJlc3Npb24gY29tcG9zZWQgb2YgaW50ZWdlcgotY29uc3RhbnRzIChleHByZXNzZWQgaW4gc3RhbmRhcmQgQyBzeW50YXgpLCB0aGUgbm9ybWFsIGJpbmFyeSBvcGVyYXRvcnMKLVsrLCAtLCAqLCAvLCAlLCAmLCB8LCBeLCA8PCwgPj5dLCBhIGxlbmd0aCBvcGVyYXRvciwgYW5kIHNwZWNpYWwgcGFja2V0IGRhdGEKLWFjY2Vzc29ycy4gIE5vdGUgdGhhdCBhbGwgY29tcGFyaXNvbnMgYXJlIHVuc2lnbmVkLCBzbyB0aGF0LCBmb3IgZXhhbXBsZSwKLTB4ODAwMDAwMDAgYW5kIDB4ZmZmZmZmZmYgYXJlID4gMC4KLS5JUAotVGhlICUgYW5kIF4gb3BlcmF0b3JzIGFyZSBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgZm9yIGZpbHRlcmluZyBpbiB0aGUKLWtlcm5lbCBvbiBMaW51eCB3aXRoIDMuNyBhbmQgbGF0ZXIga2VybmVsczsgb24gYWxsIG90aGVyIHN5c3RlbXMsIGlmCi10aG9zZSBvcGVyYXRvcnMgYXJlIHVzZWQsIGZpbHRlcmluZyB3aWxsIGJlIGRvbmUgaW4gdXNlciBtb2RlLCB3aGljaAotd2lsbCBpbmNyZWFzZSB0aGUgb3ZlcmhlYWQgb2YgY2FwdHVyaW5nIHBhY2tldHMgYW5kIG1heSBjYXVzZSBtb3JlCi1wYWNrZXRzIHRvIGJlIGRyb3BwZWQuCi0uSVAKLVRvIGFjY2VzcyBkYXRhIGluc2lkZSB0aGUgcGFja2V0LCB1c2UgdGhlIGZvbGxvd2luZyBzeW50YXg6Ci0uaW4gKy41aQotLm5mCi1cZklwcm90b1xmQiBbIFxmSWV4cHJcZkIgOiBcZklzaXplXGZCIF1cZlIKLS5maQotLmluIC0uNWkKLVxmSVByb3RvXGZSIGlzIG9uZSBvZiBcZkJldGhlciwgZmRkaSwgdHIsIHdsYW4sIHBwcCwgc2xpcCwgbGluaywKLWlwLCBhcnAsIHJhcnAsIHRjcCwgdWRwLCBpY21wLCBpcDZcZlIgb3IgXGZCcmFkaW9cZlIsIGFuZAotaW5kaWNhdGVzIHRoZSBwcm90b2NvbCBsYXllciBmb3IgdGhlIGluZGV4IG9wZXJhdGlvbi4KLShcZkJldGhlciwgZmRkaSwgd2xhbiwgdHIsIHBwcCwgc2xpcFxmUiBhbmQgXGZCbGlua1xmUiBhbGwgcmVmZXIgdG8gdGhlCi1saW5rIGxheWVyLiBcZkJyYWRpb1xmUiByZWZlcnMgdG8gdGhlICJyYWRpbyBoZWFkZXIiIGFkZGVkIHRvIHNvbWUKLTgwMi4xMSBjYXB0dXJlcy4pCi1Ob3RlIHRoYXQgXGZJdGNwLCB1ZHBcZlIgYW5kIG90aGVyIHVwcGVyLWxheWVyIHByb3RvY29sIHR5cGVzIG9ubHkKLWFwcGx5IHRvIElQdjQsIG5vdCBJUHY2ICh0aGlzIHdpbGwgYmUgZml4ZWQgaW4gdGhlIGZ1dHVyZSkuCi1UaGUgYnl0ZSBvZmZzZXQsIHJlbGF0aXZlIHRvIHRoZSBpbmRpY2F0ZWQgcHJvdG9jb2wgbGF5ZXIsIGlzCi1naXZlbiBieSBcZklleHByXGZSLgotXGZJU2l6ZVxmUiBpcyBvcHRpb25hbCBhbmQgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlCi1maWVsZCBvZiBpbnRlcmVzdDsgaXQgY2FuIGJlIGVpdGhlciBvbmUsIHR3bywgb3IgZm91ciwgYW5kIGRlZmF1bHRzIHRvIG9uZS4KLVRoZSBsZW5ndGggb3BlcmF0b3IsIGluZGljYXRlZCBieSB0aGUga2V5d29yZCBcZkJsZW5cZlAsIGdpdmVzIHRoZQotbGVuZ3RoIG9mIHRoZSBwYWNrZXQuCi0KLUZvciBleGFtcGxlLCBgXGZCZXRoZXJbMF0gJiAxICE9IDBcZlAnIGNhdGNoZXMgYWxsIG11bHRpY2FzdCB0cmFmZmljLgotVGhlIGV4cHJlc3Npb24gYFxmQmlwWzBdICYgMHhmICE9IDVcZlAnCi1jYXRjaGVzIGFsbCBJUHY0IHBhY2tldHMgd2l0aCBvcHRpb25zLgotVGhlIGV4cHJlc3Npb24KLWBcZkJpcFs2OjJdICYgMHgxZmZmID0gMFxmUCcKLWNhdGNoZXMgb25seSB1bmZyYWdtZW50ZWQgSVB2NCBkYXRhZ3JhbXMgYW5kIGZyYWcgemVybyBvZiBmcmFnbWVudGVkCi1JUHY0IGRhdGFncmFtcy4KLVRoaXMgY2hlY2sgaXMgaW1wbGljaXRseSBhcHBsaWVkIHRvIHRoZSBcZkJ0Y3BcZlAgYW5kIFxmQnVkcFxmUAotaW5kZXggb3BlcmF0aW9ucy4KLUZvciBpbnN0YW5jZSwgXGZCdGNwWzBdXGZQIGFsd2F5cyBtZWFucyB0aGUgZmlyc3QKLWJ5dGUgb2YgdGhlIFRDUCBcZkloZWFkZXJcZlAsIGFuZCBuZXZlciBtZWFucyB0aGUgZmlyc3QgYnl0ZSBvZiBhbgotaW50ZXJ2ZW5pbmcgZnJhZ21lbnQuCi0KLVNvbWUgb2Zmc2V0cyBhbmQgZmllbGQgdmFsdWVzIG1heSBiZSBleHByZXNzZWQgYXMgbmFtZXMgcmF0aGVyIHRoYW4KLWFzIG51bWVyaWMgdmFsdWVzLgotVGhlIGZvbGxvd2luZyBwcm90b2NvbCBoZWFkZXIgZmllbGQgb2Zmc2V0cyBhcmUKLWF2YWlsYWJsZTogXGZCaWNtcHR5cGVcZlAgKElDTVAgdHlwZSBmaWVsZCksIFxmQmljbXA2dHlwZSAoSUNNUCB2NiB0eXBlIGZpZWxkKQotXGZCaWNtcGNvZGVcZlAgKElDTVAgY29kZSBmaWVsZCksIFxmQmljbXA2Y29kZVxmUCAoSUNNUCB2NiBjb2RlIGZpZWxkKSwgYW5kCi1cZkJ0Y3BmbGFnc1xmUCAoVENQIGZsYWdzIGZpZWxkKS4KLQotVGhlIGZvbGxvd2luZyBJQ01QIHR5cGUgZmllbGQgdmFsdWVzIGFyZSBhdmFpbGFibGU6IFxmQmljbXAtZWNob3JlcGx5XGZQLAotXGZCaWNtcC11bnJlYWNoXGZQLCBcZkJpY21wLXNvdXJjZXF1ZW5jaFxmUCwgXGZCaWNtcC1yZWRpcmVjdFxmUCwKLVxmQmljbXAtZWNob1xmUCwgXGZCaWNtcC1yb3V0ZXJhZHZlcnRcZlAsIFxmQmljbXAtcm91dGVyc29saWNpdFxmUCwKLVxmQmljbXAtdGlteGNlZWRcZlAsIFxmQmljbXAtcGFyYW1wcm9iXGZQLCBcZkJpY21wLXRzdGFtcFxmUCwKLVxmQmljbXAtdHN0YW1wcmVwbHlcZlAsIFxmQmljbXAtaXJlcVxmUCwgXGZCaWNtcC1pcmVxcmVwbHlcZlAsCi1cZkJpY21wLW1hc2tyZXFcZlAsIFxmQmljbXAtbWFza3JlcGx5XGZQLgotCi1UaGUgZm9sbG93aW5nIElDTVB2NiB0eXBlIGZpZWxkcyBhcmUgYXZhaWxhYmxlOiBcZkJpY21wNi1lY2hvXGZQLAotXGZCaWNtcDYtZWNob3JlcGx5XGZQLCBcZkJpY21wNi1tdWx0aWNhc3RsaXN0ZW5lcnF1ZXJ5XGZQLAotXGZCaWNtcDYtbXVsdGljYXN0bGlzdGVuZXJyZXBvcnR2MVxmUCwgXGZCaWNtcDYtbXVsdGljYXN0bGlzdGVuZXJkb25lXGZQLAotXGZCaWNtcDYtcm91dGVyc29saWNpdFxmUCwgXGZCaWNtcDYtcm91dGVyYWR2ZXJ0XGZQLAotXGZCaWNtcDYtbmVpZ2hib3Jzb2xpY2l0XGZQLCBcZkJpY21wNi1uZWlnaGJvcmFkdmVydFxmUCwgXGZCaWNtcDYtcmVkaXJlY3RcZlAsCi1cZkJpY21wNi1yb3V0ZXJyZW51bVxmUCwgXGZCaWNtcDYtbm9kZWluZm9ybWF0aW9ucXVlcnlcZlAsCi1cZkJpY21wNi1ub2RlaW5mb3JtYXRpb25yZXNwb25zZVxmUCwgXGZCaWNtcDYtaW5laWdoYm9yZGlzY292ZXJ5c29saWNpdFxmUCwKLVxmQmljbXA2LWluZWlnaGJvcmRpc2NvdmVyeWFkdmVydFxmUCwgXGZCaWNtcDYtbXVsdGljYXN0bGlzdGVuZXJyZXBvcnR2MlxmUCwKLVxmQmljbXA2LWhvbWVhZ2VudGRpc2NvdmVyeXJlcXVlc3RcZlAsIFxmQmljbXA2LWhvbWVhZ2VudGRpc2NvdmVyeXJlcGx5XGZQLAotXGZCaWNtcDYtbW9iaWxlcHJlZml4c29saWNpdFxmUCwgXGZCaWNtcDYtbW9iaWxlcHJlZml4YWR2ZXJ0XGZQLAotXGZCaWNtcDYtY2VydHBhdGhzb2xpY2l0XGZQLCBcZkJpY21wNi1jZXJ0cGF0aGFkdmVydFxmUCwKLVxmQmljbXA2LW11bHRpY2FzdHJvdXRlcmFkdmVydFxmUCwgXGZCaWNtcDYtbXVsdGljYXN0cm91dGVyc29saWNpdFxmUCwKLVxmQmljbXA2LW11bHRpY2FzdHJvdXRlcnRlcm1cZlAuCi0KLVRoZSBmb2xsb3dpbmcgVENQIGZsYWdzIGZpZWxkIHZhbHVlcyBhcmUgYXZhaWxhYmxlOiBcZkJ0Y3AtZmluXGZQLAotXGZCdGNwLXN5blxmUCwgXGZCdGNwLXJzdFxmUCwgXGZCdGNwLXB1c2hcZlAsCi1cZkJ0Y3AtYWNrXGZQLCBcZkJ0Y3AtdXJnXGZQLCBcZkJ0Y3AtZWNlXGZQLAotXGZCdGNwLWN3clxmUC4KLS5MUAotUHJpbWl0aXZlcyBtYXkgYmUgY29tYmluZWQgdXNpbmc6Ci0uSVAKLUEgcGFyZW50aGVzaXplZCBncm91cCBvZiBwcmltaXRpdmVzIGFuZCBvcGVyYXRvcnMuCi0uSVAKLU5lZ2F0aW9uIChgXGZCIVxmUCcgb3IgYFxmQm5vdFxmUCcpLgotLklQCi1Db25jYXRlbmF0aW9uIChgXGZCJiZcZlAnIG9yIGBcZkJhbmRcZlAnKS4KLS5JUAotQWx0ZXJuYXRpb24gKGBcZkJ8fFxmUCcgb3IgYFxmQm9yXGZQJykuCi0uTFAKLU5lZ2F0aW9uIGhhcyBoaWdoZXN0IHByZWNlZGVuY2UuCi1BbHRlcm5hdGlvbiBhbmQgY29uY2F0ZW5hdGlvbiBoYXZlIGVxdWFsIHByZWNlZGVuY2UgYW5kIGFzc29jaWF0ZQotbGVmdCB0byByaWdodC4KLU5vdGUgdGhhdCBleHBsaWNpdCBcZkJhbmRcZlIgdG9rZW5zLCBub3QganV4dGFwb3NpdGlvbiwKLWFyZSBub3cgcmVxdWlyZWQgZm9yIGNvbmNhdGVuYXRpb24uCi0uTFAKLUlmIGFuIGlkZW50aWZpZXIgaXMgZ2l2ZW4gd2l0aG91dCBhIGtleXdvcmQsIHRoZSBtb3N0IHJlY2VudCBrZXl3b3JkCi1pcyBhc3N1bWVkLgotRm9yIGV4YW1wbGUsCi0uaW4gKy41aQotLm5mCi1cZkJub3QgaG9zdCB2cyBhbmQgYWNlXGZSCi0uZmkKLS5pbiAtLjVpCi1pcyBzaG9ydCBmb3IKLS5pbiArLjVpCi0ubmYKLVxmQm5vdCBob3N0IHZzIGFuZCBob3N0IGFjZVxmUgotLmZpCi0uaW4gLS41aQotd2hpY2ggc2hvdWxkIG5vdCBiZSBjb25mdXNlZCB3aXRoCi0uaW4gKy41aQotLm5mCi1cZkJub3QgKCBob3N0IHZzIG9yIGFjZSApXGZSCi0uZmkKLS5pbiAtLjVpCi0uU0ggRVhBTVBMRVMKLS5MUAotVG8gc2VsZWN0IGFsbCBwYWNrZXRzIGFycml2aW5nIGF0IG9yIGRlcGFydGluZyBmcm9tIFxmSXN1bmRvd25cZlA6Ci0uUlMKLS5uZgotXGZCaG9zdCBzdW5kb3duXGZQCi0uZmkKLS5SRQotLkxQCi1UbyBzZWxlY3QgdHJhZmZpYyBiZXR3ZWVuIFxmSWhlbGlvc1xmUiBhbmQgZWl0aGVyIFxmSWhvdFxmUiBvciBcZklhY2VcZlI6Ci0uUlMKLS5uZgotXGZCaG9zdCBoZWxpb3MgYW5kIFxcKCBob3Qgb3IgYWNlIFxcKVxmUAotLmZpCi0uUkUKLS5MUAotVG8gc2VsZWN0IGFsbCBJUCBwYWNrZXRzIGJldHdlZW4gXGZJYWNlXGZSIGFuZCBhbnkgaG9zdCBleGNlcHQgXGZJaGVsaW9zXGZSOgotLlJTCi0ubmYKLVxmQmlwIGhvc3QgYWNlIGFuZCBub3QgaGVsaW9zXGZQCi0uZmkKLS5SRQotLkxQCi1UbyBzZWxlY3QgYWxsIHRyYWZmaWMgYmV0d2VlbiBsb2NhbCBob3N0cyBhbmQgaG9zdHMgYXQgQmVya2VsZXk6Ci0uUlMKLS5uZgotLkIKLW5ldCB1Y2ItZXRoZXIKLS5maQotLlJFCi0uTFAKLVRvIHNlbGVjdCBhbGwgZnRwIHRyYWZmaWMgdGhyb3VnaCBpbnRlcm5ldCBnYXRld2F5IFxmSXNudXBcZlA6Ci0uUlMKLS5uZgotLkIKLWdhdGV3YXkgc251cCBhbmQgKHBvcnQgZnRwIG9yIGZ0cC1kYXRhKQotLmZpCi0uUkUKLS5MUAotVG8gc2VsZWN0IHRyYWZmaWMgbmVpdGhlciBzb3VyY2VkIGZyb20gbm9yIGRlc3RpbmVkIGZvciBsb2NhbCBob3N0cwotKGlmIHlvdSBnYXRld2F5IHRvIG9uZSBvdGhlciBuZXQsIHRoaXMgc3R1ZmYgc2hvdWxkIG5ldmVyIG1ha2UgaXQKLW9udG8geW91ciBsb2NhbCBuZXQpLgotLlJTCi0ubmYKLS5CCi1pcCBhbmQgbm90IG5ldCBcZklsb2NhbG5ldFxmUAotLmZpCi0uUkUKLS5MUAotVG8gc2VsZWN0IHRoZSBzdGFydCBhbmQgZW5kIHBhY2tldHMgKHRoZSBTWU4gYW5kIEZJTiBwYWNrZXRzKSBvZiBlYWNoCi1UQ1AgY29udmVyc2F0aW9uIHRoYXQgaW52b2x2ZXMgYSBub24tbG9jYWwgaG9zdC4KLS5SUwotLm5mCi0uQgotdGNwW3RjcGZsYWdzXSAmICh0Y3Atc3lufHRjcC1maW4pICE9IDAgYW5kIG5vdCBzcmMgYW5kIGRzdCBuZXQgXGZJbG9jYWxuZXRcZlAKLS5maQotLlJFCi0uTFAKLVRvIHNlbGVjdCBhbGwgSVB2NCBIVFRQIHBhY2tldHMgdG8gYW5kIGZyb20gcG9ydCA4MCwgaS5lLiBwcmludCBvbmx5Ci1wYWNrZXRzIHRoYXQgY29udGFpbiBkYXRhLCBub3QsIGZvciBleGFtcGxlLCBTWU4gYW5kIEZJTiBwYWNrZXRzIGFuZAotQUNLLW9ubHkgcGFja2V0cy4gIChJUHY2IGlzIGxlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXIuKQotLlJTCi0ubmYKLS5CCi10Y3AgcG9ydCA4MCBhbmQgKCgoaXBbMjoyXSAtICgoaXBbMF0mMHhmKTw8MikpIC0gKCh0Y3BbMTJdJjB4ZjApPj4yKSkgIT0gMCkKLS5maQotLlJFCi0uTFAKLVRvIHNlbGVjdCBJUCBwYWNrZXRzIGxvbmdlciB0aGFuIDU3NiBieXRlcyBzZW50IHRocm91Z2ggZ2F0ZXdheSBcZklzbnVwXGZQOgotLlJTCi0ubmYKLS5CCi1nYXRld2F5IHNudXAgYW5kIGlwWzI6Ml0gPiA1NzYKLS5maQotLlJFCi0uTFAKLVRvIHNlbGVjdCBJUCBicm9hZGNhc3Qgb3IgbXVsdGljYXN0IHBhY2tldHMgdGhhdCB3ZXJlCi0uSSBub3QKLXNlbnQgdmlhIEV0aGVybmV0IGJyb2FkY2FzdCBvciBtdWx0aWNhc3Q6Ci0uUlMKLS5uZgotLkIKLWV0aGVyWzBdICYgMSA9IDAgYW5kIGlwWzE2XSA+PSAyMjQKLS5maQotLlJFCi0uTFAKLVRvIHNlbGVjdCBhbGwgSUNNUCBwYWNrZXRzIHRoYXQgYXJlIG5vdCBlY2hvIHJlcXVlc3RzL3JlcGxpZXMgKGkuZS4sIG5vdAotcGluZyBwYWNrZXRzKToKLS5SUwotLm5mCi0uQgotaWNtcFtpY21wdHlwZV0gIT0gaWNtcC1lY2hvIGFuZCBpY21wW2ljbXB0eXBlXSAhPSBpY21wLWVjaG9yZXBseQotLmZpCi0uUkUKLS5TSCAiU0VFIEFMU08iCi1wY2FwKDNQQ0FQKQotLlNIIEJVR1MKLVRvIHJlcG9ydCBhIHNlY3VyaXR5IGlzc3VlIHBsZWFzZSBzZW5kIGFuIGUtbWFpbCB0byBzZWN1cml0eUB0Y3BkdW1wLm9yZy4KLS5MUAotVG8gcmVwb3J0IGJ1Z3MgYW5kIG90aGVyIHByb2JsZW1zLCBjb250cmlidXRlIHBhdGNoZXMsIHJlcXVlc3QgYQotZmVhdHVyZSwgcHJvdmlkZSBnZW5lcmljIGZlZWRiYWNrIGV0YyBwbGVhc2Ugc2VlIHRoZSBmaWxlCi0uSSBDT05UUklCVVRJTkcKLWluIHRoZSBsaWJwY2FwIHNvdXJjZSB0cmVlIHJvb3QuCi0uTFAKLUZpbHRlciBleHByZXNzaW9ucyBvbiBmaWVsZHMgb3RoZXIgdGhhbiB0aG9zZSBpbiBUb2tlbiBSaW5nIGhlYWRlcnMgd2lsbAotbm90IGNvcnJlY3RseSBoYW5kbGUgc291cmNlLXJvdXRlZCBUb2tlbiBSaW5nIHBhY2tldHMuCi0uTFAKLUZpbHRlciBleHByZXNzaW9ucyBvbiBmaWVsZHMgb3RoZXIgdGhhbiB0aG9zZSBpbiA4MDIuMTEgaGVhZGVycyB3aWxsIG5vdAotY29ycmVjdGx5IGhhbmRsZSA4MDIuMTEgZGF0YSBwYWNrZXRzIHdpdGggYm90aCBUbyBEUyBhbmQgRnJvbSBEUyBzZXQuCi0uTFAKLS5CUiAiaXA2IHByb3RvIgotc2hvdWxkIGNoYXNlIGhlYWRlciBjaGFpbiwgYnV0IGF0IHRoaXMgbW9tZW50IGl0IGRvZXMgbm90LgotLkJSICJpcDYgcHJvdG9jaGFpbiIKLWlzIHN1cHBsaWVkIGZvciB0aGlzIGJlaGF2aW9yLgotLkxQCi1Bcml0aG1ldGljIGV4cHJlc3Npb24gYWdhaW5zdCB0cmFuc3BvcnQgbGF5ZXIgaGVhZGVycywgbGlrZSBcZkJ0Y3BbMF1cZlAsCi1kb2VzIG5vdCB3b3JrIGFnYWluc3QgSVB2NiBwYWNrZXRzLgotSXQgb25seSBsb29rcyBhdCBJUHY0IHBhY2tldHMuCmRpZmYgLS1naXQgYS9wY2FwLWZpbHRlci5tYW5taXNjLmluIGIvcGNhcC1maWx0ZXIubWFubWlzYy5pbgppbmRleCAzMjMyZjdlLi5lMGY4ODNkIDEwMDY0NAotLS0gYS9wY2FwLWZpbHRlci5tYW5taXNjLmluCisrKyBiL3BjYXAtZmlsdGVyLm1hbm1pc2MuaW4KQEAgLTE4LDIyICsxOCwyMiBAQAogLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAuXCIgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KIC5cIgotLlRIIFBDQVAtRklMVEVSIEBNQU5fTUlTQ19JTkZPQCAiNSBOb3ZlbWJlciAyMDE3IgorLlRIIFBDQVAtRklMVEVSIEBNQU5fTUlTQ19JTkZPQCAiMiBTZXB0ZW1iZXIgMjAyMCIKIC5TSCBOQU1FCiBwY2FwLWZpbHRlciBcLSBwYWNrZXQgZmlsdGVyIHN5bnRheAogLmJyCiAuYWQKIC5TSCBERVNDUklQVElPTgogLkxQCi0uQiBwY2FwX2NvbXBpbGUoKQorLkJSIHBjYXBfY29tcGlsZSAoKQogaXMgdXNlZCB0byBjb21waWxlIGEgc3RyaW5nIGludG8gYSBmaWx0ZXIgcHJvZ3JhbS4KIFRoZSByZXN1bHRpbmcgZmlsdGVyIHByb2dyYW0gY2FuIHRoZW4gYmUgYXBwbGllZCB0bwogc29tZSBzdHJlYW0gb2YgcGFja2V0cyB0byBkZXRlcm1pbmUgd2hpY2ggcGFja2V0cyB3aWxsIGJlIHN1cHBsaWVkIHRvCi0uQlIgcGNhcF9sb29wKCkgLAotLkJSIHBjYXBfZGlzcGF0Y2goKSAsCi0uQlIgcGNhcF9uZXh0KCkgLAorLkJSIHBjYXBfbG9vcCAoM1BDQVApLAorLkJSIHBjYXBfZGlzcGF0Y2ggKDNQQ0FQKSwKKy5CUiBwY2FwX25leHQgKDNQQ0FQKSwKIG9yCi0uQlIgcGNhcF9uZXh0X2V4KCkgLgorLkJSIHBjYXBfbmV4dF9leCAoM1BDQVApLgogLkxQCiBUaGUgXGZJZmlsdGVyIGV4cHJlc3Npb25cZlAgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUKIC5JUiBwcmltaXRpdmVzIC4KQEAgLTQ3LDExICs0NywxMSBAQAogcXVhbGlmaWVycyBzYXkgd2hhdCBraW5kIG9mIHRoaW5nIHRoZSBpZCBuYW1lIG9yIG51bWJlciByZWZlcnMgdG8uCiBQb3NzaWJsZSB0eXBlcyBhcmUKIC5CUiBob3N0ICwKLS5CIG5ldCAsCisuQlIgbmV0ICwKIC5CIHBvcnQKIGFuZAogLkJSIHBvcnRyYW5nZSAuCi1FLmcuLCBgaG9zdCBmb28nLCBgbmV0IDEyOC4zJywgYHBvcnQgMjAnLCBgcG9ydHJhbmdlIDYwMDAtNjAwOCcuCitFLmcuLCBgXGZCaG9zdFxmUCBmb28nLCBgXGZCbmV0XGZQIDEyOC4zJywgYFxmQnBvcnRcZlAgMjAnLCBgXGZCcG9ydHJhbmdlXGZQIDYwMDAtNjAwOCcuCiBJZiB0aGVyZSBpcyBubyB0eXBlCiBxdWFsaWZpZXIsCiAuQiBob3N0CkBAIC03MiwxMSArNzIsOSBAQAogLkJSIGFkZHIzICwKIGFuZAogLkJSIGFkZHI0IC4KLUUuZy4sIGBzcmMgZm9vJywgYGRzdCBuZXQgMTI4LjMnLCBgc3JjIG9yIGRzdCBwb3J0IGZ0cC1kYXRhJy4KK0UuZy4sIGBcZkJzcmNcZlAgZm9vJywgYFxmQmRzdCBuZXRcZlAgMTI4LjMnLCBgXGZCc3JjIG9yIGRzdCBwb3J0XGZQIGZ0cC1kYXRhJy4KIElmCi10aGVyZSBpcyBubyBkaXIgcXVhbGlmaWVyLAotLkIgInNyYyBvciBkc3QiCi1pcyBhc3N1bWVkLgordGhlcmUgaXMgbm8gZGlyIHF1YWxpZmllciwgYFxmQnNyYyBvciBkc3RcZlAnIGlzIGFzc3VtZWQuCiBUaGUKIC5CUiByYSAsCiAuQlIgdGEgLApAQCAtODYsMTIgKzg0LDYgQEAKIGFuZAogLkIgYWRkcjQKIHF1YWxpZmllcnMgYXJlIG9ubHkgdmFsaWQgZm9yIElFRUUgODAyLjExIFdpcmVsZXNzIExBTiBsaW5rIGxheWVycy4KLUZvciBzb21lIGxpbmsgbGF5ZXJzLCBzdWNoIGFzIFNMSVAgYW5kIHRoZSBgYGNvb2tlZCcnIExpbnV4IGNhcHR1cmUgbW9kZQotdXNlZCBmb3IgdGhlIGBgYW55JycgZGV2aWNlIGFuZCBmb3Igc29tZSBvdGhlciBkZXZpY2UgdHlwZXMsIHRoZQotLkIgaW5ib3VuZAotYW5kCi0uQiBvdXRib3VuZAotcXVhbGlmaWVycyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgZGVzaXJlZCBkaXJlY3Rpb24uCiAuSVAgXGZJcHJvdG9cZlAKIC5JIHByb3RvCiBxdWFsaWZpZXJzIHJlc3RyaWN0IHRoZSBtYXRjaCB0byBhIHBhcnRpY3VsYXIgcHJvdG9jb2wuCkBAIC0xMDksMjUgKzEwMSwyNiBAQAogLkIgdGNwCiBhbmQKIC5CUiB1ZHAgLgotRS5nLiwgYGV0aGVyIHNyYyBmb28nLCBgYXJwIG5ldCAxMjguMycsIGB0Y3AgcG9ydCAyMScsIGB1ZHAgcG9ydHJhbmdlCi03MDAwLTcwMDknLCBgd2xhbiBhZGRyMiAwOjI6Mzo0OjU6NicuCitFLmcuLCBgXGZCZXRoZXIgc3JjXGZQIGZvbycsIGBcZkJhcnAgbmV0XGZQIDEyOC4zJywgYFxmQnRjcCBwb3J0XGZQIDIxJywKK2BcZkJ1ZHAgcG9ydHJhbmdlXGZQIDcwMDAtNzAwOScsIGBcZkJ3bGFuIGFkZHIyXGZQIDA6MjozOjQ6NTo2Jy4KIElmIHRoZXJlIGlzCiBubyBwcm90byBxdWFsaWZpZXIsIGFsbCBwcm90b2NvbHMgY29uc2lzdGVudCB3aXRoIHRoZSB0eXBlIGFyZQogYXNzdW1lZC4KLUUuZy4sIGBzcmMgZm9vJyBtZWFucyBgKGlwIG9yIGFycCBvciByYXJwKSBzcmMgZm9vJwotKGV4Y2VwdCB0aGUgbGF0dGVyIGlzIG5vdCBsZWdhbCBzeW50YXgpLCBgbmV0IGJhcicgbWVhbnMgYChpcCBvcgotYXJwIG9yIHJhcnApIG5ldCBiYXInIGFuZCBgcG9ydCA1MycgbWVhbnMgYCh0Y3Agb3IgdWRwKSBwb3J0IDUzJy4KK0UuZy4sIGBcZkJzcmNcZlAgZm9vJyBtZWFucyBgXGZCKGlwIG9yIGFycCBvciByYXJwKSBzcmNcZlAgZm9vJworKGV4Y2VwdCB0aGUgbGF0dGVyIGlzIG5vdCBsZWdhbCBzeW50YXgpLCBgXGZCbmV0XGZQIGJhcicgbWVhbnMgYFxmQihpcCBvcgorYXJwIG9yIHJhcnApIG5ldFxmUCBiYXInIGFuZCBgXGZCcG9ydFxmUCA1MycgbWVhbnMgYFxmQih0Y3Agb3IgdWRwKQorcG9ydFxmUCA1MycuCiAuTFAKLVtgZmRkaScgaXMgYWN0dWFsbHkgYW4gYWxpYXMgZm9yIGBldGhlcic7IHRoZSBwYXJzZXIgdHJlYXRzIHRoZW0KK1tcZkJmZGRpXGZQIGlzIGFjdHVhbGx5IGFuIGFsaWFzIGZvciBcZkJldGhlclxmUDsgdGhlIHBhcnNlciB0cmVhdHMgdGhlbQogaWRlbnRpY2FsbHkgYXMgbWVhbmluZyBgYHRoZSBkYXRhIGxpbmsgbGV2ZWwgdXNlZCBvbiB0aGUgc3BlY2lmaWVkCi1uZXR3b3JrIGludGVyZmFjZS4nJyAgRkRESSBoZWFkZXJzIGNvbnRhaW4gRXRoZXJuZXQtbGlrZSBzb3VyY2UKK25ldHdvcmsgaW50ZXJmYWNlJycuICBGRERJIGhlYWRlcnMgY29udGFpbiBFdGhlcm5ldC1saWtlIHNvdXJjZQogYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcywgYW5kIG9mdGVuIGNvbnRhaW4gRXRoZXJuZXQtbGlrZSBwYWNrZXQKIHR5cGVzLCBzbyB5b3UgY2FuIGZpbHRlciBvbiB0aGVzZSBGRERJIGZpZWxkcyBqdXN0IGFzIHdpdGggdGhlCiBhbmFsb2dvdXMgRXRoZXJuZXQgZmllbGRzLgogRkRESSBoZWFkZXJzIGFsc28gY29udGFpbiBvdGhlciBmaWVsZHMsCiBidXQgeW91IGNhbm5vdCBuYW1lIHRoZW0gZXhwbGljaXRseSBpbiBhIGZpbHRlciBleHByZXNzaW9uLgogLkxQCi1TaW1pbGFybHksIGB0cicgYW5kIGB3bGFuJyBhcmUgYWxpYXNlcyBmb3IgYGV0aGVyJzsgdGhlIHByZXZpb3VzCitTaW1pbGFybHksIFxmQnRyXGZQIGFuZCBcZkJ3bGFuXGZQIGFyZSBhbGlhc2VzIGZvciBcZkJldGhlclxmUDsgdGhlIHByZXZpb3VzCiBwYXJhZ3JhcGgncyBzdGF0ZW1lbnRzIGFib3V0IEZEREkgaGVhZGVycyBhbHNvIGFwcGx5IHRvIFRva2VuIFJpbmcKIGFuZCA4MDIuMTEgd2lyZWxlc3MgTEFOIGhlYWRlcnMuICBGb3IgODAyLjExIGhlYWRlcnMsIHRoZSBkZXN0aW5hdGlvbgogYWRkcmVzcyBpcyB0aGUgREEgZmllbGQgYW5kIHRoZSBzb3VyY2UgYWRkcmVzcyBpcyB0aGUgU0EgZmllbGQ7IHRoZQpAQCAtMTQ3LDEyICsxNDAsMTMgQEAKIC5CIG9yCiBhbmQKIC5CIG5vdAorKG9yIGVxdWl2YWxlbnRseTogYFxmQiYmXGZQJywgYFxmQnx8XGZQJyBhbmQgYFxmQiFcZlAnIHJlc3BlY3RpdmVseSkKIHRvIGNvbWJpbmUgcHJpbWl0aXZlcy4KLUUuZy4sIGBob3N0IGZvbyBhbmQgbm90IHBvcnQgZnRwIGFuZCBub3QgcG9ydCBmdHAtZGF0YScuCitFLmcuLCBgXGZCaG9zdFxmUCBmb28gXGZCYW5kIG5vdCBwb3J0XGZQIGZ0cCBcZkJhbmQgbm90IHBvcnRcZlAgZnRwLWRhdGEnLgogVG8gc2F2ZSB0eXBpbmcsIGlkZW50aWNhbCBxdWFsaWZpZXIgbGlzdHMgY2FuIGJlIG9taXR0ZWQuCiBFLmcuLAotYHRjcCBkc3QgcG9ydCBmdHAgb3IgZnRwLWRhdGEgb3IgZG9tYWluJyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzCi1gdGNwIGRzdCBwb3J0IGZ0cCBvciB0Y3AgZHN0IHBvcnQgZnRwLWRhdGEgb3IgdGNwIGRzdCBwb3J0IGRvbWFpbicuCitgXGZCdGNwIGRzdCBwb3J0XGZQIGZ0cCBcZkJvclxmUCBmdHAtZGF0YSBcZkJvclxmUCBkb21haW4nIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMKK2BcZkJ0Y3AgZHN0IHBvcnRcZlAgZnRwIFxmQm9yIHRjcCBkc3QgcG9ydFxmUCBmdHAtZGF0YSBcZkJvciB0Y3AgZHN0IHBvcnRcZlAgZG9tYWluJy4KIC5MUAogQWxsb3dhYmxlIHByaW1pdGl2ZXMgYXJlOgogLklQICJcZkJkc3QgaG9zdCBcZklob3N0XGZSIgpAQCAtMTczLDEwICsxNjcsMTAgQEAKIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG86CiAuaW4gKy41aQogLm5mCi1cZkJldGhlciBwcm90byBcZklcXGlwXGZCIGFuZCBob3N0IFxmSWhvc3RcZlIKK1xmQmV0aGVyIHByb3RvIFxcaXAgYW5kIGhvc3QgXGZJaG9zdFxmUgogLmZpCiAuaW4gLS41aQotSWYgXGZJaG9zdFxmUiBpcyBhIG5hbWUgd2l0aCBtdWx0aXBsZSBJUCBhZGRyZXNzZXMsIGVhY2ggYWRkcmVzcyB3aWxsCitJZiBcZklob3N0XGZSIGlzIGEgbmFtZSB3aXRoIG11bHRpcGxlIElQdjQgYWRkcmVzc2VzLCBlYWNoIGFkZHJlc3Mgd2lsbAogYmUgY2hlY2tlZCBmb3IgYSBtYXRjaC4KIC5JUCAiXGZCZXRoZXIgZHN0IFxmSWVob3N0XGZQIgogVHJ1ZSBpZiB0aGUgRXRoZXJuZXQgZGVzdGluYXRpb24gYWRkcmVzcyBpcyBcZkllaG9zdFxmUC4KQEAgLTIzNCwyNCArMjI4LDI0IEBACiBiaXRzIHdpZGUuCiBNYXkgYmUgcXVhbGlmaWVkIHdpdGggXGZCc3JjXGZSIG9yIFxmQmRzdFxmUi4KIC5JUCAiXGZCZHN0IHBvcnQgXGZJcG9ydFxmUiIKLVRydWUgaWYgdGhlIHBhY2tldCBpcyBpcC90Y3AsIGlwL3VkcCwgaXA2L3RjcCBvciBpcDYvdWRwIGFuZCBoYXMgYQorVHJ1ZSBpZiB0aGUgcGFja2V0IGlzIElQdjQgVENQLCBJUHY0IFVEUCwgSVB2NiBUQ1Agb3IgSVB2NiBVRFAgYW5kIGhhcyBhCiBkZXN0aW5hdGlvbiBwb3J0IHZhbHVlIG9mIFxmSXBvcnRcZlAuCiBUaGUgXGZJcG9ydFxmUCBjYW4gYmUgYSBudW1iZXIgb3IgYSBuYW1lIHVzZWQgaW4gL2V0Yy9zZXJ2aWNlcyAoc2VlCi0uSVIgdGNwICg0UCkKKy5CUiB0Y3AgKDRQKQogYW5kCi0uSVIgdWRwICg0UCkpLgorLkJSIHVkcCAoNFApKS4KIElmIGEgbmFtZSBpcyB1c2VkLCBib3RoIHRoZSBwb3J0CiBudW1iZXIgYW5kIHByb3RvY29sIGFyZSBjaGVja2VkLgogSWYgYSBudW1iZXIgb3IgYW1iaWd1b3VzIG5hbWUgaXMgdXNlZCwKLW9ubHkgdGhlIHBvcnQgbnVtYmVyIGlzIGNoZWNrZWQgKGUuZy4sIFxmQmRzdCBwb3J0IDUxM1xmUiB3aWxsIHByaW50IGJvdGgKLXRjcC9sb2dpbiB0cmFmZmljIGFuZCB1ZHAvd2hvIHRyYWZmaWMsIGFuZCBcZkJwb3J0IGRvbWFpblxmUiB3aWxsIHByaW50Citvbmx5IHRoZSBwb3J0IG51bWJlciBpcyBjaGVja2VkIChlLmcuLCBgXGZCZHN0IHBvcnRcZlIgNTEzJyB3aWxsIHByaW50IGJvdGgKK3RjcC9sb2dpbiB0cmFmZmljIGFuZCB1ZHAvd2hvIHRyYWZmaWMsIGFuZCBgXGZCcG9ydCBkb21haW5cZlInIHdpbGwgcHJpbnQKIGJvdGggdGNwL2RvbWFpbiBhbmQgdWRwL2RvbWFpbiB0cmFmZmljKS4KIC5JUCAiXGZCc3JjIHBvcnQgXGZJcG9ydFxmUiIKIFRydWUgaWYgdGhlIHBhY2tldCBoYXMgYSBzb3VyY2UgcG9ydCB2YWx1ZSBvZiBcZklwb3J0XGZQLgogLklQICJcZkJwb3J0IFxmSXBvcnRcZlIiCiBUcnVlIGlmIGVpdGhlciB0aGUgc291cmNlIG9yIGRlc3RpbmF0aW9uIHBvcnQgb2YgdGhlIHBhY2tldCBpcyBcZklwb3J0XGZQLgotLklQICJcZkJkc3QgcG9ydHJhbmdlIFxmSXBvcnQxXGZCLVxmSXBvcnQyXGZSIgotVHJ1ZSBpZiB0aGUgcGFja2V0IGlzIGlwL3RjcCwgaXAvdWRwLCBpcDYvdGNwIG9yIGlwNi91ZHAgYW5kIGhhcyBhCisuSVAgIlxmQmRzdCBwb3J0cmFuZ2UgXGZJcG9ydDEtcG9ydDJcZlIiCitUcnVlIGlmIHRoZSBwYWNrZXQgaXMgSVB2NCBUQ1AsIElQdjQgVURQLCBJUHY2IFRDUCBvciBJUHY2IFVEUCBhbmQgaGFzIGEKIGRlc3RpbmF0aW9uIHBvcnQgdmFsdWUgYmV0d2VlbiBcZklwb3J0MVxmUCBhbmQgXGZJcG9ydDJcZlAuCiAuSSBwb3J0MQogYW5kCkBAIC0yNjAsMTAgKzI1NCwxMCBAQAogLkkgcG9ydAogcGFyYW1ldGVyIGZvcgogLkJSIHBvcnQgLgotLklQICJcZkJzcmMgcG9ydHJhbmdlIFxmSXBvcnQxXGZCLVxmSXBvcnQyXGZSIgorLklQICJcZkJzcmMgcG9ydHJhbmdlIFxmSXBvcnQxLXBvcnQyXGZSIgogVHJ1ZSBpZiB0aGUgcGFja2V0IGhhcyBhIHNvdXJjZSBwb3J0IHZhbHVlIGJldHdlZW4gXGZJcG9ydDFcZlAgYW5kCiBcZklwb3J0MlxmUC4KLS5JUCAiXGZCcG9ydHJhbmdlIFxmSXBvcnQxXGZCLVxmSXBvcnQyXGZSIgorLklQICJcZkJwb3J0cmFuZ2UgXGZJcG9ydDEtcG9ydDJcZlIiCiBUcnVlIGlmIGVpdGhlciB0aGUgc291cmNlIG9yIGRlc3RpbmF0aW9uIHBvcnQgb2YgdGhlIHBhY2tldCBpcyBiZXR3ZWVuCiBcZklwb3J0MVxmUCBhbmQgXGZJcG9ydDJcZlAuCiAuSVAKQEAgLTI3NCwxMyArMjY4LDEzIEBACiBcZkJ0Y3Agc3JjIHBvcnQgXGZJcG9ydFxmUgogLmZpCiAuaW4gLS41aQotd2hpY2ggbWF0Y2hlcyBvbmx5IHRjcCBwYWNrZXRzIHdob3NlIHNvdXJjZSBwb3J0IGlzIFxmSXBvcnRcZlAuCit3aGljaCBtYXRjaGVzIG9ubHkgVENQIHBhY2tldHMgd2hvc2Ugc291cmNlIHBvcnQgaXMgXGZJcG9ydFxmUC4KIC5JUCAiXGZCbGVzcyBcZklsZW5ndGhcZlIiCiBUcnVlIGlmIHRoZSBwYWNrZXQgaGFzIGEgbGVuZ3RoIGxlc3MgdGhhbiBvciBlcXVhbCB0byBcZklsZW5ndGhcZlAuCiBUaGlzIGlzIGVxdWl2YWxlbnQgdG86CiAuaW4gKy41aQogLm5mCi1cZkJsZW4gPD0gXGZJbGVuZ3RoXGZQLgorXGZCbGVuIDw9IFxmSWxlbmd0aFxmUAogLmZpCiAuaW4gLS41aQogLklQICJcZkJncmVhdGVyIFxmSWxlbmd0aFxmUiIKQEAgLTI4OCwxMiArMjgyLDEyIEBACiBUaGlzIGlzIGVxdWl2YWxlbnQgdG86CiAuaW4gKy41aQogLm5mCi1cZkJsZW4gPj0gXGZJbGVuZ3RoXGZQLgorXGZCbGVuID49IFxmSWxlbmd0aFxmUAogLmZpCiAuaW4gLS41aQogLklQICJcZkJpcCBwcm90byBcZklwcm90b2NvbFxmUiIKIFRydWUgaWYgdGhlIHBhY2tldCBpcyBhbiBJUHY0IHBhY2tldCAoc2VlCi0uSVIgaXAgKDRQKSkKKy5CUiBpcCAoNFApKQogb2YgcHJvdG9jb2wgdHlwZSBcZklwcm90b2NvbFxmUC4KIFxmSVByb3RvY29sXGZQIGNhbiBiZSBhIG51bWJlciBvciBvbmUgb2YgdGhlIG5hbWVzCiBcZkJpY21wXGZQLCBcZkJpY21wNlxmUCwgXGZCaWdtcFxmUCwgXGZCaWdycFxmUCwgXGZCcGltXGZQLCBcZkJhaFxmUCwKQEAgLTMxMiwxMCArMzA2LDEwIEBACiBBYmJyZXZpYXRpb25zIGZvcjoKIC5pbiArLjVpCiAubmYKLVxmQnByb3RvIFxmSXBcZlJcZkIKK1xmQnByb3RvIFxcXGZJcHJvdG9jb2xcZlJcZkIKIC5maQogLmluIC0uNWkKLXdoZXJlIFxmSXBcZlIgaXMgb25lIG9mIHRoZSBhYm92ZSBwcm90b2NvbHMuCit3aGVyZSBcZklwcm90b2NvbFxmUiBpcyBvbmUgb2YgdGhlIGFib3ZlIHByb3RvY29scy4KIC5JUCAiXGZCaXA2IHByb3RvY2hhaW4gXGZJcHJvdG9jb2xcZlIiCiBUcnVlIGlmIHRoZSBwYWNrZXQgaXMgSVB2NiBwYWNrZXQsCiBhbmQgY29udGFpbnMgcHJvdG9jb2wgaGVhZGVyIHdpdGggdHlwZSBcZklwcm90b2NvbFxmUgpAQCAtMzIzLDcgKzMxNyw3IEBACiBGb3IgZXhhbXBsZSwKIC5pbiArLjVpCiAubmYKLVxmQmlwNiBwcm90b2NoYWluIDZcZlIKK1xmQmlwNiBwcm90b2NoYWluXGZSIDYKIC5maQogLmluIC0uNWkKIG1hdGNoZXMgYW55IElQdjYgcGFja2V0IHdpdGggVENQIHByb3RvY29sIGhlYWRlciBpbiB0aGUgcHJvdG9jb2wgaGVhZGVyIGNoYWluLgpAQCAtMzQyLDcgKzMzNiw3IEBACiBoZWFkZXIgY2hhaW4uCiAuSVAgIlxmQmV0aGVyIGJyb2FkY2FzdFxmUiIKIFRydWUgaWYgdGhlIHBhY2tldCBpcyBhbiBFdGhlcm5ldCBicm9hZGNhc3QgcGFja2V0LgotVGhlIFxmSWV0aGVyXGZQCitUaGUgXGZCZXRoZXJcZlAKIGtleXdvcmQgaXMgb3B0aW9uYWwuCiAuSVAgIlxmQmlwIGJyb2FkY2FzdFxmUiIKIFRydWUgaWYgdGhlIHBhY2tldCBpcyBhbiBJUHY0IGJyb2FkY2FzdCBwYWNrZXQuCkBAIC0zNTksNyArMzUzLDcgQEAKIFRydWUgaWYgdGhlIHBhY2tldCBpcyBhbiBFdGhlcm5ldCBtdWx0aWNhc3QgcGFja2V0LgogVGhlIFxmQmV0aGVyXGZQCiBrZXl3b3JkIGlzIG9wdGlvbmFsLgotVGhpcyBpcyBzaG9ydGhhbmQgZm9yIGBcZkJldGhlclswXSAmIDEgIT0gMFxmUCcuCitUaGlzIGlzIHNob3J0aGFuZCBmb3IgYFxmQmV0aGVyW1xmUDBcZkJdICYgXGZQMVxmQiAhPSBcZlAwJy4KIC5JUCAiXGZCaXAgbXVsdGljYXN0XGZSIgogVHJ1ZSBpZiB0aGUgcGFja2V0IGlzIGFuIElQdjQgbXVsdGljYXN0IHBhY2tldC4KIC5JUCAiXGZCaXA2IG11bHRpY2FzdFxmUiIKQEAgLTM2NywxNSArMzYxLDE1IEBACiAuSVAgICJcZkJldGhlciBwcm90byBcZklwcm90b2NvbFxmUiIKIFRydWUgaWYgdGhlIHBhY2tldCBpcyBvZiBldGhlciB0eXBlIFxmSXByb3RvY29sXGZSLgogXGZJUHJvdG9jb2xcZlAgY2FuIGJlIGEgbnVtYmVyIG9yIG9uZSBvZiB0aGUgbmFtZXMKLVxmQmlwXGZQLCBcZkJpcDZcZlAsIFxmQmFycFxmUCwgXGZCcmFycFxmUCwgXGZCYXRhbGtcZlAsIFxmQmFhcnBcZlAsCi1cZkJkZWNuZXRcZlAsIFxmQnNjYVxmUCwgXGZCbGF0XGZQLCBcZkJtb3BkbFxmUCwgXGZCbW9wcmNcZlAsCi1cZkJpc29cZlAsIFxmQnN0cFxmUCwgXGZCaXB4XGZQLCBvciBcZkJuZXRiZXVpXGZQLgotTm90ZSB0aGVzZSBpZGVudGlmaWVycyBhcmUgYWxzbyBrZXl3b3JkcworXGZCYWFycFxmUCwgXGZCYXJwXGZQLCBcZkJhdGFsa1xmUCwgXGZCZGVjbmV0XGZQLCBcZkJpcFxmUCwgXGZCaXA2XGZQLAorXGZCaXB4XGZQLCBcZkJpc29cZlAsIFxmQmxhdFxmUCwgXGZCbG9vcGJhY2tcZlAsIFxmQm1vcGRsXGZQLCBcZkJtb3ByY1xmUCwgXGZCbmV0YmV1aVxmUCwKK1xmQnJhcnBcZlAsIFxmQnNjYVxmUCBvciBcZkJzdHBcZlAuCitOb3RlIHRoZXNlIGlkZW50aWZpZXJzIChleGNlcHQgXGZCbG9vcGJhY2tcZlApIGFyZSBhbHNvIGtleXdvcmRzCiBhbmQgbXVzdCBiZSBlc2NhcGVkIHZpYSBiYWNrc2xhc2ggKFxcKS4KIC5JUAotW0luIHRoZSBjYXNlIG9mIEZEREkgKGUuZy4sIGBcZkJmZGRpIHByb3RvIGFycFxmUicpLCBUb2tlbiBSaW5nCi0oZS5nLiwgYFxmQnRyIHByb3RvIGFycFxmUicpLCBhbmQgSUVFRSA4MDIuMTEgd2lyZWxlc3MgTEFOUyAoZS5nLiwKLWBcZkJ3bGFuIHByb3RvIGFycFxmUicpLCBmb3IgbW9zdCBvZiB0aG9zZSBwcm90b2NvbHMsIHRoZQorW0luIHRoZSBjYXNlIG9mIEZEREkgKGUuZy4sIGBcZkJmZGRpIHByb3RvIFxcYXJwXGZSJyksIFRva2VuIFJpbmcKKyhlLmcuLCBgXGZCdHIgcHJvdG8gXFxhcnBcZlInKSwgYW5kIElFRUUgODAyLjExIHdpcmVsZXNzIExBTnMgKGUuZy4sCitgXGZCd2xhbiBwcm90byBcXGFycFxmUicpLCBmb3IgbW9zdCBvZiB0aG9zZSBwcm90b2NvbHMsIHRoZQogcHJvdG9jb2wgaWRlbnRpZmljYXRpb24gY29tZXMgZnJvbSB0aGUgODAyLjIgTG9naWNhbCBMaW5rIENvbnRyb2wgKExMQykKIGhlYWRlciwgd2hpY2ggaXMgdXN1YWxseSBsYXllcmVkIG9uIHRvcCBvZiB0aGUgRkRESSwgVG9rZW4gUmluZywgb3IKIDgwMi4xMSBoZWFkZXIuCkBAIC00MjUsMzMgKzQxOSwzMyBAQAogQWJicmV2aWF0aW9ucyBmb3I6CiAuaW4gKy41aQogLm5mCi1cZkJldGhlciBwcm90byBcZklwXGZSCitcZkJldGhlciBwcm90byBcXFxmSXByb3RvY29sXGZSCiAuZmkKIC5pbiAtLjVpCi13aGVyZSBcZklwXGZSIGlzIG9uZSBvZiB0aGUgYWJvdmUgcHJvdG9jb2xzLgord2hlcmUgXGZJcHJvdG9jb2xcZlIgaXMgb25lIG9mIHRoZSBhYm92ZSBwcm90b2NvbHMuCiAuSVAgIlxmQmxhdFxmUiwgXGZCbW9wcmNcZlIsIFxmQm1vcGRsXGZSIgogQWJicmV2aWF0aW9ucyBmb3I6CiAuaW4gKy41aQogLm5mCi1cZkJldGhlciBwcm90byBcZklwXGZSCitcZkJldGhlciBwcm90byBcXFxmSXByb3RvY29sXGZSCiAuZmkKIC5pbiAtLjVpCi13aGVyZSBcZklwXGZSIGlzIG9uZSBvZiB0aGUgYWJvdmUgcHJvdG9jb2xzLgord2hlcmUgXGZJcHJvdG9jb2xcZlIgaXMgb25lIG9mIHRoZSBhYm92ZSBwcm90b2NvbHMuCiBOb3RlIHRoYXQgbm90IGFsbCBhcHBsaWNhdGlvbnMgdXNpbmcKIC5CUiBwY2FwICgzUENBUCkKIGN1cnJlbnRseSBrbm93IGhvdyB0byBwYXJzZSB0aGVzZSBwcm90b2NvbHMuCiAuSVAgIlxmQmRlY25ldCBzcmMgXGZJaG9zdFxmUiIKLVRydWUgaWYgdGhlIERFQ05FVCBzb3VyY2UgYWRkcmVzcyBpcworVHJ1ZSBpZiB0aGUgREVDbmV0IHNvdXJjZSBhZGRyZXNzIGlzCiAuSVIgaG9zdCAsCi13aGljaCBtYXkgYmUgYW4gYWRkcmVzcyBvZiB0aGUgZm9ybSBgYDEwLjEyMycnLCBvciBhIERFQ05FVCBob3N0Cit3aGljaCBtYXkgYmUgYW4gYWRkcmVzcyBvZiB0aGUgZm9ybSBgYDEwLjEyMycnLCBvciBhIERFQ25ldCBob3N0CiBuYW1lLgotW0RFQ05FVCBob3N0IG5hbWUgc3VwcG9ydCBpcyBvbmx5IGF2YWlsYWJsZSBvbiBVTFRSSVggc3lzdGVtcwotdGhhdCBhcmUgY29uZmlndXJlZCB0byBydW4gREVDTkVULl0KK1tERUNuZXQgaG9zdCBuYW1lIHN1cHBvcnQgaXMgb25seSBhdmFpbGFibGUgb24gVUxUUklYIHN5c3RlbXMKK3RoYXQgYXJlIGNvbmZpZ3VyZWQgdG8gcnVuIERFQ25ldC5dCiAuSVAgIlxmQmRlY25ldCBkc3QgXGZJaG9zdFxmUiIKLVRydWUgaWYgdGhlIERFQ05FVCBkZXN0aW5hdGlvbiBhZGRyZXNzIGlzCitUcnVlIGlmIHRoZSBERUNuZXQgZGVzdGluYXRpb24gYWRkcmVzcyBpcwogLklSIGhvc3QgLgogLklQICJcZkJkZWNuZXQgaG9zdCBcZklob3N0XGZSIgotVHJ1ZSBpZiBlaXRoZXIgdGhlIERFQ05FVCBzb3VyY2Ugb3IgZGVzdGluYXRpb24gYWRkcmVzcyBpcworVHJ1ZSBpZiBlaXRoZXIgdGhlIERFQ25ldCBzb3VyY2Ugb3IgZGVzdGluYXRpb24gYWRkcmVzcyBpcwogLklSIGhvc3QgLgogLklQIFxmQmxsY1xmUAogVHJ1ZSBpZiB0aGUgcGFja2V0IGhhcyBhbiA4MDIuMiBMTEMgaGVhZGVyLiAgVGhpcyBpbmNsdWRlczoKQEAgLTQ2Niw5ICs0NjAsNyBAQAogRkRESSBwYWNrZXRzIChubyBjaGVjayBpcyBkb25lIGZvciBMTEMgZnJhbWVzKTsKIC5JUAogTExDLWVuY2Fwc3VsYXRlZCBBVE0gcGFja2V0cywgZm9yIFN1bkFUTSBvbiBTb2xhcmlzLgotLklQCi0KLS5JUCAiXGZCbGxjXGZQIFxGaXR5cGVcZlIiCisuSVAgIlxmQmxsY1xmUCBcZkl0eXBlXGZSIgogVHJ1ZSBpZiB0aGUgcGFja2V0IGhhcyBhbiA4MDIuMiBMTEMgaGVhZGVyIGFuZCBoYXMgdGhlIHNwZWNpZmllZAogLklSIHR5cGUgLgogLkkgdHlwZQpAQCAtNTE0LDYgKzUwNiwxNiBAQAogXGZCZnJtclxmUgogRnJhbWUgUmVqZWN0IChGUk1SKSBVIFBEVXMKIC5SRQorLklQIFxmQmluYm91bmRcZlAKK1BhY2tldCB3YXMgcmVjZWl2ZWQgYnkgdGhlIGhvc3QgcGVyZm9ybWluZyB0aGUgY2FwdHVyZSByYXRoZXIgdGhhbiBiZWluZworc2VudCBieSB0aGF0IGhvc3QuICBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjZXJ0YWluIGxpbmstbGF5ZXIgdHlwZXMsCitzdWNoIGFzIFNMSVAgYW5kIHRoZSBgYGNvb2tlZCcnIExpbnV4IGNhcHR1cmUgbW9kZQordXNlZCBmb3IgdGhlIGBgYW55JycgZGV2aWNlIGFuZCBmb3Igc29tZSBvdGhlciBkZXZpY2UgdHlwZXMuCisuSVAgXGZCb3V0Ym91bmRcZlAKK1BhY2tldCB3YXMgc2VudCBieSB0aGUgaG9zdCBwZXJmb3JtaW5nIHRoZSBjYXB0dXJlIHJhdGhlciB0aGFuIGJlaW5nCityZWNlaXZlZCBieSB0aGF0IGhvc3QuICBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjZXJ0YWluIGxpbmstbGF5ZXIgdHlwZXMsCitzdWNoIGFzIFNMSVAgYW5kIHRoZSBgYGNvb2tlZCcnIExpbnV4IGNhcHR1cmUgbW9kZQordXNlZCBmb3IgdGhlIGBgYW55JycgZGV2aWNlIGFuZCBmb3Igc29tZSBvdGhlciBkZXZpY2UgdHlwZXMuCiAuSVAgIlxmQmlmbmFtZSBcZklpbnRlcmZhY2VcZlIiCiBUcnVlIGlmIHRoZSBwYWNrZXQgd2FzIGxvZ2dlZCBhcyBjb21pbmcgZnJvbSB0aGUgc3BlY2lmaWVkIGludGVyZmFjZSAoYXBwbGllcwogb25seSB0byBwYWNrZXRzIGxvZ2dlZCBieSBPcGVuQlNEJ3Mgb3IgRnJlZUJTRCdzCkBAIC02NjYsNTEgKzY2OCw1MSBAQAogb3IgYSBudW1lcmljIHZhbHVlLgogLklQICJcZkJ2bGFuIFxmSVt2bGFuX2lkXVxmUiIKIFRydWUgaWYgdGhlIHBhY2tldCBpcyBhbiBJRUVFIDgwMi4xUSBWTEFOIHBhY2tldC4KLUlmIFxmSVt2bGFuX2lkXVxmUiBpcyBzcGVjaWZpZWQsIG9ubHkgdHJ1ZSBpZiB0aGUgcGFja2V0IGhhcyB0aGUgc3BlY2lmaWVkCitJZiB0aGUgb3B0aW9uYWwgXGZJdmxhbl9pZFxmUiBpcyBzcGVjaWZpZWQsIG9ubHkgdHJ1ZSBpZiB0aGUgcGFja2V0IGhhcyB0aGUgc3BlY2lmaWVkCiBcZkl2bGFuX2lkXGZSLgotTm90ZSB0aGF0IHRoZSBmaXJzdCBcZkJ2bGFuXGZSIGtleXdvcmQgZW5jb3VudGVyZWQgaW4gXGZJZXhwcmVzc2lvblxmUgotY2hhbmdlcyB0aGUgZGVjb2Rpbmcgb2Zmc2V0cyBmb3IgdGhlIHJlbWFpbmRlciBvZiBcZklleHByZXNzaW9uXGZSIG9uCi10aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBwYWNrZXQgaXMgYSBWTEFOIHBhY2tldC4gIFRoZSBcZkJ2bGFuCi1cZklbdmxhbl9pZF1cZlIgZXhwcmVzc2lvbiBtYXkgYmUgdXNlZCBtb3JlIHRoYW4gb25jZSwgdG8gZmlsdGVyIG9uIFZMQU4KLWhpZXJhcmNoaWVzLiAgRWFjaCB1c2Ugb2YgdGhhdCBleHByZXNzaW9uIGluY3JlbWVudHMgdGhlIGZpbHRlciBvZmZzZXRzCitOb3RlIHRoYXQgdGhlIGZpcnN0IFxmQnZsYW5cZlIga2V5d29yZCBlbmNvdW50ZXJlZCBpbiBhbiBleHByZXNzaW9uCitjaGFuZ2VzIHRoZSBkZWNvZGluZyBvZmZzZXRzIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBleHByZXNzaW9uIG9uCit0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBwYWNrZXQgaXMgYSBWTEFOIHBhY2tldC4gIFRoZSBgXGZCdmxhbgorXGZJW3ZsYW5faWRdXGZSYCBrZXl3b3JkIG1heSBiZSB1c2VkIG1vcmUgdGhhbiBvbmNlLCB0byBmaWx0ZXIgb24gVkxBTgoraGllcmFyY2hpZXMuICBFYWNoIHVzZSBvZiB0aGF0IGtleXdvcmQgaW5jcmVtZW50cyB0aGUgZmlsdGVyIG9mZnNldHMKIGJ5IDQuCiAuSVAKIEZvciBleGFtcGxlOgogLmluICsuNWkKIC5uZgotXGZCdmxhbiAxMDAgJiYgdmxhbiAyMDBcZlIKK1xmQnZsYW5cZlAgMTAwIFxmQiYmIHZsYW5cZlIgMjAwCiAuZmkKIC5pbiAtLjVpCiBmaWx0ZXJzIG9uIFZMQU4gMjAwIGVuY2Fwc3VsYXRlZCB3aXRoaW4gVkxBTiAxMDAsIGFuZAogLmluICsuNWkKIC5uZgotXGZCdmxhbiAmJiB2bGFuIDMwMCAmJiBpcFxmUgorXGZCdmxhbiAmJiB2bGFuIFxmUDMwMCBcZkImJiBpcFxmUgogLmZpCiAuaW4gLS41aQotZmlsdGVycyBJUHY0IHByb3RvY29scyBlbmNhcHN1bGF0ZWQgaW4gVkxBTiAzMDAgZW5jYXBzdWxhdGVkIHdpdGhpbiBhbnkKK2ZpbHRlcnMgSVB2NCBwcm90b2NvbCBlbmNhcHN1bGF0ZWQgaW4gVkxBTiAzMDAgZW5jYXBzdWxhdGVkIHdpdGhpbiBhbnkKIGhpZ2hlciBvcmRlciBWTEFOLgogLklQICJcZkJtcGxzIFxmSVtsYWJlbF9udW1dXGZSIgogVHJ1ZSBpZiB0aGUgcGFja2V0IGlzIGFuIE1QTFMgcGFja2V0LgotSWYgXGZJW2xhYmVsX251bV1cZlIgaXMgc3BlY2lmaWVkLCBvbmx5IHRydWUgaXMgdGhlIHBhY2tldCBoYXMgdGhlIHNwZWNpZmllZAorSWYgdGhlIG9wdGlvbmFsIFxmSWxhYmVsX251bVxmUiBpcyBzcGVjaWZpZWQsIG9ubHkgdHJ1ZSBpZiB0aGUgcGFja2V0IGhhcyB0aGUgc3BlY2lmaWVkCiBcZklsYWJlbF9udW1cZlIuCi1Ob3RlIHRoYXQgdGhlIGZpcnN0IFxmQm1wbHNcZlIga2V5d29yZCBlbmNvdW50ZXJlZCBpbiBcZklleHByZXNzaW9uXGZSCi1jaGFuZ2VzIHRoZSBkZWNvZGluZyBvZmZzZXRzIGZvciB0aGUgcmVtYWluZGVyIG9mIFxmSWV4cHJlc3Npb25cZlIgb24KK05vdGUgdGhhdCB0aGUgZmlyc3QgXGZCbXBsc1xmUiBrZXl3b3JkIGVuY291bnRlcmVkIGluIGFuIGV4cHJlc3Npb24KK2NoYW5nZXMgdGhlIGRlY29kaW5nIG9mZnNldHMgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIGV4cHJlc3Npb24gb24KIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHBhY2tldCBpcyBhIE1QTFMtZW5jYXBzdWxhdGVkIElQIHBhY2tldC4gIFRoZQotXGZCbXBscyBcZklbbGFiZWxfbnVtXVxmUiBleHByZXNzaW9uIG1heSBiZSB1c2VkIG1vcmUgdGhhbiBvbmNlLCB0bwotZmlsdGVyIG9uIE1QTFMgaGllcmFyY2hpZXMuICBFYWNoIHVzZSBvZiB0aGF0IGV4cHJlc3Npb24gaW5jcmVtZW50cyB0aGUKK2BcZkJtcGxzIFxmSVtsYWJlbF9udW1dXGZSYCBrZXl3b3JkIG1heSBiZSB1c2VkIG1vcmUgdGhhbiBvbmNlLCB0bworZmlsdGVyIG9uIE1QTFMgaGllcmFyY2hpZXMuICBFYWNoIHVzZSBvZiB0aGF0IGtleXdvcmQgaW5jcmVtZW50cyB0aGUKIGZpbHRlciBvZmZzZXRzIGJ5IDQuCiAuSVAKIEZvciBleGFtcGxlOgogLmluICsuNWkKIC5uZgotXGZCbXBscyAxMDAwMDAgJiYgbXBscyAxMDI0XGZSCitcZkJtcGxzXGZQIDEwMDAwMCBcZkImJiBtcGxzXGZSIDEwMjQKIC5maQogLmluIC0uNWkKIGZpbHRlcnMgcGFja2V0cyB3aXRoIGFuIG91dGVyIGxhYmVsIG9mIDEwMDAwMCBhbmQgYW4gaW5uZXIgbGFiZWwgb2YKIDEwMjQsIGFuZAogLmluICsuNWkKIC5uZgotXGZCbXBscyAmJiBtcGxzIDEwMjQgJiYgaG9zdCAxOTIuOS4yMDAuMVxmUgorXGZCbXBscyAmJiBtcGxzXGZQIDEwMjQgXGZCJiYgaG9zdFxmUiAxOTIuOS4yMDAuMQogLmZpCiAuaW4gLS41aQogZmlsdGVycyBwYWNrZXRzIHRvIG9yIGZyb20gMTkyLjkuMjAwLjEgd2l0aCBhbiBpbm5lciBsYWJlbCBvZiAxMDI0IGFuZApAQCAtNzIxLDM0ICs3MjMsMzQgQEAKIC5JUCAiXGZCcHBwb2VzIFxmSVtzZXNzaW9uX2lkXVxmUiIKIFRydWUgaWYgdGhlIHBhY2tldCBpcyBhIFBQUC1vdmVyLUV0aGVybmV0IFNlc3Npb24gcGFja2V0IChFdGhlcm5ldAogdHlwZSAweDg4NjQpLgotSWYgXGZJW3Nlc3Npb25faWRdXGZSIGlzIHNwZWNpZmllZCwgb25seSB0cnVlIGlmIHRoZSBwYWNrZXQgaGFzIHRoZSBzcGVjaWZpZWQKK0lmIHRoZSBvcHRpb25hbCBcZklzZXNzaW9uX2lkXGZSIGlzIHNwZWNpZmllZCwgb25seSB0cnVlIGlmIHRoZSBwYWNrZXQgaGFzIHRoZSBzcGVjaWZpZWQKIFxmSXNlc3Npb25faWRcZlIuCi1Ob3RlIHRoYXQgdGhlIGZpcnN0IFxmQnBwcG9lc1xmUiBrZXl3b3JkIGVuY291bnRlcmVkIGluIFxmSWV4cHJlc3Npb25cZlIKLWNoYW5nZXMgdGhlIGRlY29kaW5nIG9mZnNldHMgZm9yIHRoZSByZW1haW5kZXIgb2YgXGZJZXhwcmVzc2lvblxmUiBvbgorTm90ZSB0aGF0IHRoZSBmaXJzdCBcZkJwcHBvZXNcZlIga2V5d29yZCBlbmNvdW50ZXJlZCBpbiBhbiBleHByZXNzaW9uCitjaGFuZ2VzIHRoZSBkZWNvZGluZyBvZmZzZXRzIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBleHByZXNzaW9uIG9uCiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBwYWNrZXQgaXMgYSBQUFBvRSBzZXNzaW9uIHBhY2tldC4KIC5JUAogRm9yIGV4YW1wbGU6CiAuaW4gKy41aQogLm5mCi1cZkJwcHBvZXMgMHgyNyAmJiBpcFxmUgorXGZCcHBwb2VzXGZQIDB4MjcgXGZCJiYgaXBcZlIKIC5maQogLmluIC0uNWkKLWZpbHRlcnMgSVB2NCBwcm90b2NvbHMgZW5jYXBzdWxhdGVkIGluIFBQUG9FIHNlc3Npb24gaWQgMHgyNy4KK2ZpbHRlcnMgSVB2NCBwcm90b2NvbCBlbmNhcHN1bGF0ZWQgaW4gUFBQb0Ugc2Vzc2lvbiBpZCAweDI3LgogLklQICJcZkJnZW5ldmUgXGZJW3ZuaV1cZlIiCi1UcnVlIGlmIHRoZSBwYWNrZXQgaXMgYSBHZW5ldmUgcGFja2V0IChVRFAgcG9ydCA2MDgxKS4gSWYgXGZJW3ZuaV1cZlIKK1RydWUgaWYgdGhlIHBhY2tldCBpcyBhIEdlbmV2ZSBwYWNrZXQgKFVEUCBwb3J0IDYwODEpLiBJZiB0aGUgb3B0aW9uYWwgXGZJdm5pXGZSCiBpcyBzcGVjaWZpZWQsIG9ubHkgdHJ1ZSBpZiB0aGUgcGFja2V0IGhhcyB0aGUgc3BlY2lmaWVkIFxmSXZuaVxmUi4KIE5vdGUgdGhhdCB3aGVuIHRoZSBcZkJnZW5ldmVcZlIga2V5d29yZCBpcyBlbmNvdW50ZXJlZCBpbgotXGZJZXhwcmVzc2lvblxmUiwgaXQgY2hhbmdlcyB0aGUgZGVjb2Rpbmcgb2Zmc2V0cyBmb3IgdGhlIHJlbWFpbmRlciBvZgotXGZJZXhwcmVzc2lvblxmUiBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBwYWNrZXQgaXMgYSBHZW5ldmUgcGFja2V0LgorYW4gZXhwcmVzc2lvbiwgaXQgY2hhbmdlcyB0aGUgZGVjb2Rpbmcgb2Zmc2V0cyBmb3IgdGhlIHJlbWFpbmRlciBvZgordGhlIGV4cHJlc3Npb24gb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgcGFja2V0IGlzIGEgR2VuZXZlIHBhY2tldC4KIC5JUAogRm9yIGV4YW1wbGU6CiAuaW4gKy41aQogLm5mCi1cZkJnZW5ldmUgMHhiICYmIGlwXGZSCitcZkJnZW5ldmVcZlAgMHhiIFxmQiYmIGlwXGZSCiAuZmkKIC5pbiAtLjVpCi1maWx0ZXJzIElQdjQgcHJvdG9jb2xzIGVuY2Fwc3VsYXRlZCBpbiBHZW5ldmUgd2l0aCBWTkkgMHhiLiBUaGlzIHdpbGwKLW1hdGNoIGJvdGggSVAgZGlyZWN0bHkgZW5jYXBzdWxhdGVkIGluIEdlbmV2ZSBhcyB3ZWxsIGFzIElQIGNvbnRhaW5lZAorZmlsdGVycyBJUHY0IHByb3RvY29sIGVuY2Fwc3VsYXRlZCBpbiBHZW5ldmUgd2l0aCBWTkkgMHhiLiBUaGlzIHdpbGwKK21hdGNoIGJvdGggSVB2NCBkaXJlY3RseSBlbmNhcHN1bGF0ZWQgaW4gR2VuZXZlIGFzIHdlbGwgYXMgSVB2NCBjb250YWluZWQKIGluc2lkZSBhbiBFdGhlcm5ldCBmcmFtZS4KIC5JUCAiXGZCaXNvIHByb3RvIFxmSXByb3RvY29sXGZSIgogVHJ1ZSBpZiB0aGUgcGFja2V0IGlzIGFuIE9TSSBwYWNrZXQgb2YgcHJvdG9jb2wgdHlwZSBcZklwcm90b2NvbFxmUC4KQEAgLTc1OCwxMCArNzYwLDEwIEBACiBBYmJyZXZpYXRpb25zIGZvcjoKIC5pbiArLjVpCiAubmYKLVxmQmlzbyBwcm90byBcZklwXGZSCitcZkJpc28gcHJvdG8gXFxcZklwcm90b2NvbFxmUgogLmZpCiAuaW4gLS41aQotd2hlcmUgXGZJcFxmUiBpcyBvbmUgb2YgdGhlIGFib3ZlIHByb3RvY29scy4KK3doZXJlIFxmSXByb3RvY29sXGZSIGlzIG9uZSBvZiB0aGUgYWJvdmUgcHJvdG9jb2xzLgogLklQICJcZkJsMVxmUiwgXGZCbDJcZlIsIFxmQmlpaFxmUiwgXGZCbHNwXGZSLCBcZkJzbnBcZlIsIFxmQmNzbnBcZlIsIFxmQnBzbnBcZlIiCiBBYmJyZXZpYXRpb25zIGZvciBJUy1JUyBQRFUgdHlwZXMuCiAuSVAgIlxmQnZwaVxmUCBcZkluXGZSIgpAQCAtNzc1LDggKzc3Nyw4IEBACiAuSVAgXGZCbGFuZVxmUAogVHJ1ZSBpZiB0aGUgcGFja2V0IGlzIGFuIEFUTSBwYWNrZXQsIGZvciBTdW5BVE0gb24gU29sYXJpcywgYW5kIGlzCiBhbiBBVE0gTEFORSBwYWNrZXQuCi1Ob3RlIHRoYXQgdGhlIGZpcnN0IFxmQmxhbmVcZlIga2V5d29yZCBlbmNvdW50ZXJlZCBpbiBcZklleHByZXNzaW9uXGZSCi1jaGFuZ2VzIHRoZSB0ZXN0cyBkb25lIGluIHRoZSByZW1haW5kZXIgb2YgXGZJZXhwcmVzc2lvblxmUgorTm90ZSB0aGF0IHRoZSBmaXJzdCBcZkJsYW5lXGZSIGtleXdvcmQgZW5jb3VudGVyZWQgaW4gYW4gZXhwcmVzc2lvbgorY2hhbmdlcyB0aGUgdGVzdHMgZG9uZSBpbiB0aGUgcmVtYWluZGVyIG9mIHRoZSBleHByZXNzaW9uCiBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBwYWNrZXQgaXMgZWl0aGVyIGEgTEFORSBlbXVsYXRlZCBFdGhlcm5ldAogcGFja2V0IG9yIGEgTEFORSBMRSBDb250cm9sIHBhY2tldC4gIElmIFxmQmxhbmVcZlIgaXNuJ3Qgc3BlY2lmaWVkLCB0aGUKIHRlc3RzIGFyZSBkb25lIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHBhY2tldCBpcyBhbgpAQCAtODM5LDcgKzg0MSw3IEBACiAoXGZCZXRoZXIsIGZkZGksIHdsYW4sIHRyLCBwcHAsIHNsaXBcZlIgYW5kIFxmQmxpbmtcZlIgYWxsIHJlZmVyIHRvIHRoZQogbGluayBsYXllci4gXGZCcmFkaW9cZlIgcmVmZXJzIHRvIHRoZSAicmFkaW8gaGVhZGVyIiBhZGRlZCB0byBzb21lCiA4MDIuMTEgY2FwdHVyZXMuKQotTm90ZSB0aGF0IFxmSXRjcCwgdWRwXGZSIGFuZCBvdGhlciB1cHBlci1sYXllciBwcm90b2NvbCB0eXBlcyBvbmx5CitOb3RlIHRoYXQgXGZCdGNwXGZSLCBcZkJ1ZHBcZlIgYW5kIG90aGVyIHVwcGVyLWxheWVyIHByb3RvY29sIHR5cGVzIG9ubHkKIGFwcGx5IHRvIElQdjQsIG5vdCBJUHY2ICh0aGlzIHdpbGwgYmUgZml4ZWQgaW4gdGhlIGZ1dHVyZSkuCiBUaGUgYnl0ZSBvZmZzZXQsIHJlbGF0aXZlIHRvIHRoZSBpbmRpY2F0ZWQgcHJvdG9jb2wgbGF5ZXIsIGlzCiBnaXZlbiBieSBcZklleHByXGZSLgpAQCAtODQ4LDI0ICs4NTAsMjQgQEAKIFRoZSBsZW5ndGggb3BlcmF0b3IsIGluZGljYXRlZCBieSB0aGUga2V5d29yZCBcZkJsZW5cZlAsIGdpdmVzIHRoZQogbGVuZ3RoIG9mIHRoZSBwYWNrZXQuCiAKLUZvciBleGFtcGxlLCBgXGZCZXRoZXJbMF0gJiAxICE9IDBcZlAnIGNhdGNoZXMgYWxsIG11bHRpY2FzdCB0cmFmZmljLgotVGhlIGV4cHJlc3Npb24gYFxmQmlwWzBdICYgMHhmICE9IDVcZlAnCitGb3IgZXhhbXBsZSwgYFxmQmV0aGVyW1xmUDBcZkJdICZcZlAgMSBcZkIhPVxmUCAwJyBjYXRjaGVzIGFsbCBtdWx0aWNhc3QgdHJhZmZpYy4KK1RoZSBleHByZXNzaW9uIGBcZkJpcFtcZlAwXGZCXSAmXGZQIDB4ZiBcZkIhPVxmUCA1JwogY2F0Y2hlcyBhbGwgSVB2NCBwYWNrZXRzIHdpdGggb3B0aW9ucy4KIFRoZSBleHByZXNzaW9uCi1gXGZCaXBbNjoyXSAmIDB4MWZmZiA9IDBcZlAnCitgXGZCaXBbXGZQNjoyXGZCXSAmXGZQIDB4MWZmZiBcZkI9XGZQIDAnCiBjYXRjaGVzIG9ubHkgdW5mcmFnbWVudGVkIElQdjQgZGF0YWdyYW1zIGFuZCBmcmFnIHplcm8gb2YgZnJhZ21lbnRlZAogSVB2NCBkYXRhZ3JhbXMuCiBUaGlzIGNoZWNrIGlzIGltcGxpY2l0bHkgYXBwbGllZCB0byB0aGUgXGZCdGNwXGZQIGFuZCBcZkJ1ZHBcZlAKIGluZGV4IG9wZXJhdGlvbnMuCi1Gb3IgaW5zdGFuY2UsIFxmQnRjcFswXVxmUCBhbHdheXMgbWVhbnMgdGhlIGZpcnN0CitGb3IgaW5zdGFuY2UsIFxmQnRjcFtcZlAwXGZCXVxmUCBhbHdheXMgbWVhbnMgdGhlIGZpcnN0CiBieXRlIG9mIHRoZSBUQ1AgXGZJaGVhZGVyXGZQLCBhbmQgbmV2ZXIgbWVhbnMgdGhlIGZpcnN0IGJ5dGUgb2YgYW4KIGludGVydmVuaW5nIGZyYWdtZW50LgogCiBTb21lIG9mZnNldHMgYW5kIGZpZWxkIHZhbHVlcyBtYXkgYmUgZXhwcmVzc2VkIGFzIG5hbWVzIHJhdGhlciB0aGFuCiBhcyBudW1lcmljIHZhbHVlcy4KIFRoZSBmb2xsb3dpbmcgcHJvdG9jb2wgaGVhZGVyIGZpZWxkIG9mZnNldHMgYXJlCi1hdmFpbGFibGU6IFxmQmljbXB0eXBlXGZQIChJQ01QIHR5cGUgZmllbGQpLCBcZkJpY21wNnR5cGUgKElDTVAgdjYgdHlwZSBmaWVsZCkKLVxmQmljbXBjb2RlXGZQIChJQ01QIGNvZGUgZmllbGQpLCBcZkJpY21wNmNvZGVcZlAgKElDTVAgdjYgY29kZSBmaWVsZCksIGFuZAorYXZhaWxhYmxlOiBcZkJpY21wdHlwZVxmUCAoSUNNUCB0eXBlIGZpZWxkKSwgXGZCaWNtcDZ0eXBlXGZQIChJQ01QdjYgdHlwZSBmaWVsZCksCitcZkJpY21wY29kZVxmUCAoSUNNUCBjb2RlIGZpZWxkKSwgXGZCaWNtcDZjb2RlXGZQIChJQ01QdjYgY29kZSBmaWVsZCkgYW5kCiBcZkJ0Y3BmbGFnc1xmUCAoVENQIGZsYWdzIGZpZWxkKS4KIAogVGhlIGZvbGxvd2luZyBJQ01QIHR5cGUgZmllbGQgdmFsdWVzIGFyZSBhdmFpbGFibGU6IFxmQmljbXAtZWNob3JlcGx5XGZQLApAQCAtODc1LDcgKzg3Nyw5IEBACiBcZkJpY21wLXRzdGFtcHJlcGx5XGZQLCBcZkJpY21wLWlyZXFcZlAsIFxmQmljbXAtaXJlcXJlcGx5XGZQLAogXGZCaWNtcC1tYXNrcmVxXGZQLCBcZkJpY21wLW1hc2tyZXBseVxmUC4KIAotVGhlIGZvbGxvd2luZyBJQ01QdjYgdHlwZSBmaWVsZHMgYXJlIGF2YWlsYWJsZTogXGZCaWNtcDYtZWNob1xmUCwKK1RoZSBmb2xsb3dpbmcgSUNNUHY2IHR5cGUgZmllbGRzIGFyZSBhdmFpbGFibGU6IFxmQmljbXA2LWRlc3RpbmF0aW9ucnVucmVhY2hcZlAsCitcZkJpY21wNi1wYWNrZXR0b29iaWdcZlAsIFxmQmljbXA2LXRpbWVleGNlZWRlZFxmUCwKK1xmQmljbXA2LXBhcmFtZXRlcnByb2JsZW1cZlAsIFxmQmljbXA2LWVjaG9cZlAsCiBcZkJpY21wNi1lY2hvcmVwbHlcZlAsIFxmQmljbXA2LW11bHRpY2FzdGxpc3RlbmVycXVlcnlcZlAsCiBcZkJpY21wNi1tdWx0aWNhc3RsaXN0ZW5lcnJlcG9ydHYxXGZQLCBcZkJpY21wNi1tdWx0aWNhc3RsaXN0ZW5lcmRvbmVcZlAsCiBcZkJpY21wNi1yb3V0ZXJzb2xpY2l0XGZQLCBcZkJpY21wNi1yb3V0ZXJhZHZlcnRcZlAsCkBAIC05MDQsNyArOTA4LDcgQEAKIC5JUAogQWx0ZXJuYXRpb24gKGBcZkJ8fFxmUCcgb3IgYFxmQm9yXGZQJykuCiAuTFAKLU5lZ2F0aW9uIGhhcyBoaWdoZXN0IHByZWNlZGVuY2UuCitOZWdhdGlvbiBoYXMgdGhlIGhpZ2hlc3QgcHJlY2VkZW5jZS4KIEFsdGVybmF0aW9uIGFuZCBjb25jYXRlbmF0aW9uIGhhdmUgZXF1YWwgcHJlY2VkZW5jZSBhbmQgYXNzb2NpYXRlCiBsZWZ0IHRvIHJpZ2h0LgogTm90ZSB0aGF0IGV4cGxpY2l0IFxmQmFuZFxmUiB0b2tlbnMsIG5vdCBqdXh0YXBvc2l0aW9uLApAQCAtOTE1LDY3ICs5MTksNjQgQEAKIEZvciBleGFtcGxlLAogLmluICsuNWkKIC5uZgotXGZCbm90IGhvc3QgdnMgYW5kIGFjZVxmUgorXGZCbm90IGhvc3RcZlAgdnMgXGZCYW5kXGZSIGFjZQogLmZpCiAuaW4gLS41aQogaXMgc2hvcnQgZm9yCiAuaW4gKy41aQogLm5mCi1cZkJub3QgaG9zdCB2cyBhbmQgaG9zdCBhY2VcZlIKK1xmQm5vdCBob3N0XGZQIHZzIFxmQmFuZCBob3N0XGZSIGFjZQogLmZpCiAuaW4gLS41aQogd2hpY2ggc2hvdWxkIG5vdCBiZSBjb25mdXNlZCB3aXRoCiAuaW4gKy41aQogLm5mCi1cZkJub3QgKCBob3N0IHZzIG9yIGFjZSApXGZSCitcZkJub3QgKGhvc3QgXGZQdnNcZkIgb3IgXGZQYWNlXGZCKVxmUgogLmZpCiAuaW4gLS41aQogLlNIIEVYQU1QTEVTCiAuTFAKLVRvIHNlbGVjdCBhbGwgcGFja2V0cyBhcnJpdmluZyBhdCBvciBkZXBhcnRpbmcgZnJvbSBcZklzdW5kb3duXGZQOgorVG8gc2VsZWN0IGFsbCBwYWNrZXRzIGFycml2aW5nIGF0IG9yIGRlcGFydGluZyBmcm9tIGBzdW5kb3duJzoKIC5SUwogLm5mCi1cZkJob3N0IHN1bmRvd25cZlAKK1xmQmhvc3RcZlAgc3VuZG93bgogLmZpCiAuUkUKIC5MUAotVG8gc2VsZWN0IHRyYWZmaWMgYmV0d2VlbiBcZkloZWxpb3NcZlIgYW5kIGVpdGhlciBcZklob3RcZlIgb3IgXGZJYWNlXGZSOgorVG8gc2VsZWN0IHRyYWZmaWMgYmV0d2VlbiBgaGVsaW9zJyBhbmQgZWl0aGVyIGBob3QnIG9yIGBhY2UnOgogLlJTCiAubmYKLVxmQmhvc3QgaGVsaW9zIGFuZCBcXCggaG90IG9yIGFjZSBcXClcZlAKK1xmQmhvc3RcZlAgaGVsaW9zIFxmQmFuZCAoXGZQaG90IFxmQm9yXGZQIGFjZVxmQilcZlAKIC5maQogLlJFCiAuTFAKLVRvIHNlbGVjdCBhbGwgSVAgcGFja2V0cyBiZXR3ZWVuIFxmSWFjZVxmUiBhbmQgYW55IGhvc3QgZXhjZXB0IFxmSWhlbGlvc1xmUjoKK1RvIHNlbGVjdCBhbGwgSVB2NCBwYWNrZXRzIGJldHdlZW4gYGFjZScgYW5kIGFueSBob3N0IGV4Y2VwdCBgaGVsaW9zJzoKIC5SUwogLm5mCi1cZkJpcCBob3N0IGFjZSBhbmQgbm90IGhlbGlvc1xmUAorXGZCaXAgaG9zdFxmUCBhY2UgXGZCYW5kIG5vdFxmUCBoZWxpb3MKIC5maQogLlJFCiAuTFAKIFRvIHNlbGVjdCBhbGwgdHJhZmZpYyBiZXR3ZWVuIGxvY2FsIGhvc3RzIGFuZCBob3N0cyBhdCBCZXJrZWxleToKIC5SUwogLm5mCi0uQgotbmV0IHVjYi1ldGhlcgorXGZCbmV0XGZQIHVjYi1ldGhlcgogLmZpCiAuUkUKIC5MUAotVG8gc2VsZWN0IGFsbCBmdHAgdHJhZmZpYyB0aHJvdWdoIGludGVybmV0IGdhdGV3YXkgXGZJc251cFxmUDoKK1RvIHNlbGVjdCBhbGwgRlRQIHRyYWZmaWMgdGhyb3VnaCBJbnRlcm5ldCBnYXRld2F5IGBzbnVwJzoKIC5SUwogLm5mCi0uQgotZ2F0ZXdheSBzbnVwIGFuZCAocG9ydCBmdHAgb3IgZnRwLWRhdGEpCitcZkJnYXRld2F5XGZQIHNudXAgXGZCYW5kIChwb3J0XGZQIGZ0cCBcZkJvclxmUCBmdHAtZGF0YVxmQilcZlAKIC5maQogLlJFCiAuTFAKLVRvIHNlbGVjdCB0cmFmZmljIG5laXRoZXIgc291cmNlZCBmcm9tIG5vciBkZXN0aW5lZCBmb3IgbG9jYWwgaG9zdHMKK1RvIHNlbGVjdCBJUHY0IHRyYWZmaWMgbmVpdGhlciBzb3VyY2VkIGZyb20gbm9yIGRlc3RpbmVkIGZvciBsb2NhbCBob3N0cwogKGlmIHlvdSBnYXRld2F5IHRvIG9uZSBvdGhlciBuZXQsIHRoaXMgc3R1ZmYgc2hvdWxkIG5ldmVyIG1ha2UgaXQKIG9udG8geW91ciBsb2NhbCBuZXQpLgogLlJTCiAubmYKLS5CCi1pcCBhbmQgbm90IG5ldCBcZklsb2NhbG5ldFxmUAorXGZCaXAgYW5kIG5vdCBuZXQgXGZQbG9jYWxuZXQKIC5maQogLlJFCiAuTFAKQEAgLTk4Myw4ICs5ODQsMTcgQEAKIFRDUCBjb252ZXJzYXRpb24gdGhhdCBpbnZvbHZlcyBhIG5vbi1sb2NhbCBob3N0LgogLlJTCiAubmYKK1xmQnRjcFt0Y3BmbGFnc10gJiAodGNwLXN5bnx0Y3AtZmluKSAhPVxmUCAwIFxmQmFuZCBub3Qgc3JjIGFuZCBkc3QgbmV0XGZQIGxvY2FsbmV0CisuZmkKKy5SRQorLkxQCitUbyBzZWxlY3QgdGhlIFRDUCBwYWNrZXRzIHdpdGggZmxhZ3MgUlNUIGFuZCBBQ0sgYm90aCBzZXQuCisoaS5lLiBzZWxlY3Qgb25seSB0aGUgUlNUIGFuZCBBQ0sgZmxhZ3MgaW4gdGhlIGZsYWdzIGZpZWxkLCBhbmQgaWYgdGhlIHJlc3VsdAoraXMgIlJTVCBhbmQgQUNLIGJvdGggc2V0IiwgbWF0Y2gpCisuUlMKKy5uZgogLkIKLXRjcFt0Y3BmbGFnc10gJiAodGNwLXN5bnx0Y3AtZmluKSAhPSAwIGFuZCBub3Qgc3JjIGFuZCBkc3QgbmV0IFxmSWxvY2FsbmV0XGZQCit0Y3BbdGNwZmxhZ3NdICYgKHRjcC1yc3R8dGNwLWFjaykgPT0gKHRjcC1yc3R8dGNwLWFjaykKIC5maQogLlJFCiAuTFAKQEAgLTk5MywyNiArMTAwMywyMyBAQAogQUNLLW9ubHkgcGFja2V0cy4gIChJUHY2IGlzIGxlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXIuKQogLlJTCiAubmYKLS5CCi10Y3AgcG9ydCA4MCBhbmQgKCgoaXBbMjoyXSAtICgoaXBbMF0mMHhmKTw8MikpIC0gKCh0Y3BbMTJdJjB4ZjApPj4yKSkgIT0gMCkKK1xmQnRjcCBwb3J0XGZQIDgwIFxmQmFuZCAoKChpcFtcZlAyOjJcZkJdIC0gKChpcFtcZlAwXGZCXSZcZlAweGZcZkIpPDxcZlAyXGZCKSkgLSAoKHRjcFtcZlAxMlxmQl0mXGZQMHhmMFxmQik+PlxmUDJcZkIpKSAhPSBcZlAwXGZCKQogLmZpCiAuUkUKIC5MUAotVG8gc2VsZWN0IElQIHBhY2tldHMgbG9uZ2VyIHRoYW4gNTc2IGJ5dGVzIHNlbnQgdGhyb3VnaCBnYXRld2F5IFxmSXNudXBcZlA6CitUbyBzZWxlY3QgSVB2NCBwYWNrZXRzIGxvbmdlciB0aGFuIDU3NiBieXRlcyBzZW50IHRocm91Z2ggZ2F0ZXdheSBgc251cCc6CiAuUlMKIC5uZgotLkIKLWdhdGV3YXkgc251cCBhbmQgaXBbMjoyXSA+IDU3NgorXGZCZ2F0ZXdheVxmUCBzbnVwIFxmQmFuZCBpcFtcZlAyOjJcZkJdID5cZlAgNTc2CiAuZmkKIC5SRQogLkxQCi1UbyBzZWxlY3QgSVAgYnJvYWRjYXN0IG9yIG11bHRpY2FzdCBwYWNrZXRzIHRoYXQgd2VyZQorVG8gc2VsZWN0IElQdjQgYnJvYWRjYXN0IG9yIG11bHRpY2FzdCBwYWNrZXRzIHRoYXQgd2VyZQogLkkgbm90CiBzZW50IHZpYSBFdGhlcm5ldCBicm9hZGNhc3Qgb3IgbXVsdGljYXN0OgogLlJTCiAubmYKLS5CCi1ldGhlclswXSAmIDEgPSAwIGFuZCBpcFsxNl0gPj0gMjI0CitcZkJldGhlcltcZlAwXGZCXSAmXGZQIDEgXGZCPVxmUCAwIFxmQmFuZCBpcFtcZlAxNlxmQl0gPj1cZlAgMjI0CiAuZmkKIC5SRQogLkxQCkBAIC0xMDIyLDE2ICsxMDI5LDE4IEBACiAubmYKIC5CCiBpY21wW2ljbXB0eXBlXSAhPSBpY21wLWVjaG8gYW5kIGljbXBbaWNtcHR5cGVdICE9IGljbXAtZWNob3JlcGx5CisuQgoraWNtcDZbaWNtcDZ0eXBlXSAhPSBpY21wNi1lY2hvIGFuZCBpY21wNltpY21wNnR5cGVdICE9IGljbXA2LWVjaG9yZXBseQogLmZpCiAuUkUKIC5TSCAiU0VFIEFMU08iCi1wY2FwKDNQQ0FQKQorLkJSIHBjYXAgKDNQQ0FQKQogLlNIIEJVR1MKIFRvIHJlcG9ydCBhIHNlY3VyaXR5IGlzc3VlIHBsZWFzZSBzZW5kIGFuIGUtbWFpbCB0byBzZWN1cml0eUB0Y3BkdW1wLm9yZy4KIC5MUAogVG8gcmVwb3J0IGJ1Z3MgYW5kIG90aGVyIHByb2JsZW1zLCBjb250cmlidXRlIHBhdGNoZXMsIHJlcXVlc3QgYQogZmVhdHVyZSwgcHJvdmlkZSBnZW5lcmljIGZlZWRiYWNrIGV0YyBwbGVhc2Ugc2VlIHRoZSBmaWxlCi0uSSBDT05UUklCVVRJTkcKKy5JIENPTlRSSUJVVElORy5tZAogaW4gdGhlIGxpYnBjYXAgc291cmNlIHRyZWUgcm9vdC4KIC5MUAogRmlsdGVyIGV4cHJlc3Npb25zIG9uIGZpZWxkcyBvdGhlciB0aGFuIHRob3NlIGluIFRva2VuIFJpbmcgaGVhZGVycyB3aWxsCkBAIC0xMDQwLDEwICsxMDQ5LDExIEBACiBGaWx0ZXIgZXhwcmVzc2lvbnMgb24gZmllbGRzIG90aGVyIHRoYW4gdGhvc2UgaW4gODAyLjExIGhlYWRlcnMgd2lsbCBub3QKIGNvcnJlY3RseSBoYW5kbGUgODAyLjExIGRhdGEgcGFja2V0cyB3aXRoIGJvdGggVG8gRFMgYW5kIEZyb20gRFMgc2V0LgogLkxQCi0uQlIgImlwNiBwcm90byIKK2BcZkJpcDYgcHJvdG9cZlAnCiBzaG91bGQgY2hhc2UgaGVhZGVyIGNoYWluLCBidXQgYXQgdGhpcyBtb21lbnQgaXQgZG9lcyBub3QuCi0uQlIgImlwNiBwcm90b2NoYWluIgotaXMgc3VwcGxpZWQgZm9yIHRoaXMgYmVoYXZpb3IuCitgXGZCaXA2IHByb3RvY2hhaW5cZlAnCitpcyBzdXBwbGllZCBmb3IgdGhpcyBiZWhhdmlvci4gIEZvciBleGFtcGxlLCB0byBtYXRjaCBJUHY2IGZyYWdtZW50czoKK2BcZkJpcDYgcHJvdG9jaGFpblxmUCA0NCcKIC5MUAogQXJpdGhtZXRpYyBleHByZXNzaW9uIGFnYWluc3QgdHJhbnNwb3J0IGxheWVyIGhlYWRlcnMsIGxpa2UgXGZCdGNwWzBdXGZQLAogZG9lcyBub3Qgd29yayBhZ2FpbnN0IElQdjYgcGFja2V0cy4KZGlmZiAtLWdpdCBhL3BjYXAtaGFpa3UuY3BwIGIvcGNhcC1oYWlrdS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAxY2FjMwotLS0gL2Rldi9udWxsCisrKyBiL3BjYXAtaGFpa3UuY3BwCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDYtMjAxMCwgSGFpa3UsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIExpY2Vuc2UuCisgKgorICogQXV0aG9yczoKKyAqCQlBeGVsIETDtnJmbGVyLCBheGVsZEBwaW5jLXNvZnR3YXJlLmRlCisgKgkJSmFtZXMgV29vZGNvY2sKKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJwY2FwLWludC5oIgorCisjaW5jbHVkZSA8T1MuaD4KKworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2lvLmg+CisKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfZGwuaD4KKyNpbmNsdWRlIDxuZXQvaWZfdHlwZXMuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworCisvKgorICogUHJpdmF0ZSBkYXRhIGZvciBjYXB0dXJpbmcgb24gSGFpa3Ugc29ja2V0cy4KKyAqLworc3RydWN0IHBjYXBfaGFpa3UgeworCXN0cnVjdCBwY2FwX3N0YXQJc3RhdDsKKwljaGFyCSpkZXZpY2U7CS8qIGRldmljZSBuYW1lICovCit9OworCisKK2Jvb2wKK3ByZXBhcmVfcmVxdWVzdChzdHJ1Y3QgaWZyZXEmIHJlcXVlc3QsIGNvbnN0IGNoYXIqIG5hbWUpCit7CisJaWYgKHN0cmxlbihuYW1lKSA+PSBJRl9OQU1FU0laRSkKKwkJcmV0dXJuIGZhbHNlOworCisJc3RyY3B5KHJlcXVlc3QuaWZyX25hbWUsIG5hbWUpOworCXJldHVybiB0cnVlOworfQorCisKK3N0YXRpYyBpbnQKK3BjYXBfcmVhZF9oYWlrdShwY2FwX3QqIGhhbmRsZSwgaW50IG1heFBhY2tldHMsIHBjYXBfaGFuZGxlciBjYWxsYmFjaywKKwl1X2NoYXIqIHVzZXJkYXRhKQoreworCS8vIFJlY2VpdmUgYSBzaW5nbGUgcGFja2V0CisKKwlzdHJ1Y3QgcGNhcF9oYWlrdSogaGFuZGxlcCA9IChzdHJ1Y3QgcGNhcF9oYWlrdSopaGFuZGxlLT5wcml2OworCXVfY2hhciogYnVmZmVyID0gKHVfY2hhciopaGFuZGxlLT5idWZmZXIgKyBoYW5kbGUtPm9mZnNldDsKKwlzdHJ1Y3Qgc29ja2FkZHJfZGwgZnJvbTsKKwlzc2l6ZV90IGJ5dGVzUmVjZWl2ZWQ7CisJZG8geworCQlpZiAoaGFuZGxlLT5icmVha19sb29wKSB7CisJCQkvLyBDbGVhciB0aGUgYnJlYWsgbG9vcCBmbGFnLCBhbmQgcmV0dXJuIC0yIHRvIGluZGljYXRlIG91cgorCQkJLy8gcmVhc29uaW5nCisJCQloYW5kbGUtPmJyZWFrX2xvb3AgPSAwOworCQkJcmV0dXJuIC0yOworCQl9CisKKwkJc29ja2xlbl90IGZyb21MZW5ndGggPSBzaXplb2YoZnJvbSk7CisJCWJ5dGVzUmVjZWl2ZWQgPSByZWN2ZnJvbShoYW5kbGUtPmZkLCBidWZmZXIsIGhhbmRsZS0+YnVmc2l6ZSwgTVNHX1RSVU5DLAorCQkJKHN0cnVjdCBzb2NrYWRkciopJmZyb20sICZmcm9tTGVuZ3RoKTsKKwl9IHdoaWxlIChieXRlc1JlY2VpdmVkIDwgMCAmJiBlcnJubyA9PSBCX0lOVEVSUlVQVEVEKTsKKworCWlmIChieXRlc1JlY2VpdmVkIDwgMCkgeworCQlpZiAoZXJybm8gPT0gQl9XT1VMRF9CTE9DSykgeworCQkJLy8gdGhlcmUgaXMgbm8gcGFja2V0IGZvciB1cworCQkJcmV0dXJuIDA7CisJCX0KKworCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1Ziwgc2l6ZW9mKGhhbmRsZS0+ZXJyYnVmKSwKKwkJCSJyZWN2ZnJvbTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gLTE7CisJfQorCisJaW50MzIgY2FwdHVyZUxlbmd0aCA9IGJ5dGVzUmVjZWl2ZWQ7CisJaWYgKGNhcHR1cmVMZW5ndGggPiBoYW5kbGUtPnNuYXBzaG90KQorCQljYXB0dXJlTGVuZ3RoID0gaGFuZGxlLT5zbmFwc2hvdDsKKworCS8vIHJ1biB0aGUgcGFja2V0IGZpbHRlcgorCWlmIChoYW5kbGUtPmZjb2RlLmJmX2luc25zKSB7CisJCWlmIChwY2FwX2ZpbHRlcihoYW5kbGUtPmZjb2RlLmJmX2luc25zLCBidWZmZXIsIGJ5dGVzUmVjZWl2ZWQsCisJCQkJY2FwdHVyZUxlbmd0aCkgPT0gMCkgeworCQkJLy8gcGFja2V0IGdvdCByZWplY3RlZAorCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvLyBmaWxsIGluIHBjYXBfaGVhZGVyCisJcGNhcF9wa3RoZHIgaGVhZGVyOworCWhlYWRlci5jYXBsZW4gPSBjYXB0dXJlTGVuZ3RoOworCWhlYWRlci5sZW4gPSBieXRlc1JlY2VpdmVkOworCWhlYWRlci50cy50dl91c2VjID0gc3lzdGVtX3RpbWUoKSAlIDEwMDAwMDA7CisJaGVhZGVyLnRzLnR2X3NlYyA9IHN5c3RlbV90aW1lKCkgLyAxMDAwMDAwOworCS8vIFRPRE86IGdldCB0aW1pbmcgZnJvbSBwYWNrZXQhISEKKworCS8qIENhbGwgdGhlIHVzZXIgc3VwcGxpZWQgY2FsbGJhY2sgZnVuY3Rpb24gKi8KKwljYWxsYmFjayh1c2VyZGF0YSwgJmhlYWRlciwgYnVmZmVyKTsKKwlyZXR1cm4gMTsKK30KKworCitzdGF0aWMgaW50CitwY2FwX2luamVjdF9oYWlrdShwY2FwX3QgKmhhbmRsZSwgY29uc3Qgdm9pZCAqYnVmZmVyLCBpbnQgc2l6ZSkKK3sKKwkvLyB3ZSBkb24ndCBzdXBwb3J0IGluamVjdGluZyBwYWNrZXRzIHlldAorCS8vIFRPRE86IHVzZSB0aGUgQUZfTElOSyBwcm90b2NvbCAod2UgbmVlZCBhbm90aGVyIHNvY2tldCBmb3IgdGhpcykgdG8KKwkvLyBpbmplY3QgdGhlIHBhY2tldHMKKwlzdHJsY3B5KGhhbmRsZS0+ZXJyYnVmLCAiU2VuZGluZyBwYWNrZXRzIGlzbid0IHN1cHBvcnRlZCB5ZXQiLAorCQlQQ0FQX0VSUkJVRl9TSVpFKTsKKwlyZXR1cm4gLTE7Cit9CisKKworc3RhdGljIGludAorcGNhcF9zdGF0c19oYWlrdShwY2FwX3QgKmhhbmRsZSwgc3RydWN0IHBjYXBfc3RhdCAqc3RhdHMpCit7CisJc3RydWN0IHBjYXBfaGFpa3UqIGhhbmRsZXAgPSAoc3RydWN0IHBjYXBfaGFpa3UqKWhhbmRsZS0+cHJpdjsKKwlpZnJlcSByZXF1ZXN0OworCWludCBzb2NrZXQgPSA6OnNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTsKKwlpZiAoc29ja2V0IDwgMCkgeworCQlyZXR1cm4gLTE7CisJfQorCXByZXBhcmVfcmVxdWVzdChyZXF1ZXN0LCBoYW5kbGVwLT5kZXZpY2UpOworCWlmIChpb2N0bChzb2NrZXQsIFNJT0NHSUZTVEFUUywgJnJlcXVlc3QsIHNpemVvZihzdHJ1Y3QgaWZyZXEpKSA8IDApIHsKKwkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJwY2FwX3N0YXRzOiAlcyIsCisJCQlzdHJlcnJvcihlcnJubykpOworCQljbG9zZShzb2NrZXQpOworCQlyZXR1cm4gLTE7CisJfQorCisJY2xvc2Uoc29ja2V0KTsKKwloYW5kbGVwLT5zdGF0LnBzX3JlY3YgKz0gcmVxdWVzdC5pZnJfc3RhdHMucmVjZWl2ZS5wYWNrZXRzOworCWhhbmRsZXAtPnN0YXQucHNfZHJvcCArPSByZXF1ZXN0Lmlmcl9zdGF0cy5yZWNlaXZlLmRyb3BwZWQ7CisJKnN0YXRzID0gaGFuZGxlcC0+c3RhdDsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50CitwY2FwX2FjdGl2YXRlX2hhaWt1KHBjYXBfdCAqaGFuZGxlKQoreworCXN0cnVjdCBwY2FwX2hhaWt1KiBoYW5kbGVwID0gKHN0cnVjdCBwY2FwX2hhaWt1KiloYW5kbGUtPnByaXY7CisKKwljb25zdCBjaGFyKiBkZXZpY2UgPSBoYW5kbGUtPm9wdC5kZXZpY2U7CisKKwloYW5kbGUtPnJlYWRfb3AgPSBwY2FwX3JlYWRfaGFpa3U7CisJaGFuZGxlLT5zZXRmaWx0ZXJfb3AgPSBpbnN0YWxsX2JwZl9wcm9ncmFtOyAvKiBubyBrZXJuZWwgZmlsdGVyaW5nICovCisJaGFuZGxlLT5pbmplY3Rfb3AgPSBwY2FwX2luamVjdF9oYWlrdTsKKwloYW5kbGUtPnN0YXRzX29wID0gcGNhcF9zdGF0c19oYWlrdTsKKworCS8vIHVzZSBkZWZhdWx0IGhvb2tzIHdoZXJlIHBvc3NpYmxlCisJaGFuZGxlLT5nZXRub25ibG9ja19vcCA9IHBjYXBfZ2V0bm9uYmxvY2tfZmQ7CisJaGFuZGxlLT5zZXRub25ibG9ja19vcCA9IHBjYXBfc2V0bm9uYmxvY2tfZmQ7CisKKwloYW5kbGVwLT5kZXZpY2UJPSBzdHJkdXAoZGV2aWNlKTsKKwlpZiAoaGFuZGxlcC0+ZGV2aWNlID09IE5VTEwpIHsKKwkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCWVycm5vLCAic3RyZHVwIik7CisJCXJldHVybiBQQ0FQX0VSUk9SOworCX0KKworCWhhbmRsZS0+YnVmc2l6ZSA9IDY1NTM2OworCS8vIFRPRE86IHNob3VsZCBiZSBkZXRlcm1pbmVkIGJ5IGludGVyZmFjZSBNVFUKKworCS8vIGFsbG9jYXRlIGJ1ZmZlciBmb3IgbW9uaXRvcmluZyB0aGUgZGV2aWNlCisJaGFuZGxlLT5idWZmZXIgPSAodV9jaGFyKiltYWxsb2MoaGFuZGxlLT5idWZzaXplKTsKKwlpZiAoaGFuZGxlLT5idWZmZXIgPT0gTlVMTCkgeworCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJZXJybm8sICJidWZmZXIgbWFsbG9jIik7CisJCXJldHVybiBQQ0FQX0VSUk9SOworCX0KKworCWhhbmRsZS0+b2Zmc2V0ID0gMDsKKwloYW5kbGUtPmxpbmt0eXBlID0gRExUX0VOMTBNQjsKKwkvLyBUT0RPOiBjaGVjayBpbnRlcmZhY2UgdHlwZSEKKworCXJldHVybiAwOworfQorCisKKy8vCSNwcmFnbWEgbWFyayAtIHBjYXAgQVBJCisKKworZXh0ZXJuICJDIiBwY2FwX3QgKgorcGNhcF9jcmVhdGVfaW50ZXJmYWNlKGNvbnN0IGNoYXIgKmRldmljZSwgY2hhciAqZXJyb3JCdWZmZXIpCit7CisJLy8gVE9ETzogaGFuZGxlIHByb21pc2N1b3VzIG1vZGUhCisKKwkvLyB3ZSBuZWVkIGEgc29ja2V0IHRvIHRhbGsgdG8gdGhlIG5ldHdvcmtpbmcgc3RhY2sKKwlpbnQgc29ja2V0ID0gOjpzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7CisJaWYgKHNvY2tldCA8IDApIHsKKwkJc25wcmludGYoZXJyb3JCdWZmZXIsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkiVGhlIG5ldHdvcmtpbmcgc3RhY2sgZG9lc24ndCBzZWVtIHRvIGJlIGF2YWlsYWJsZS5cbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlzdHJ1Y3QgaWZyZXEgcmVxdWVzdDsKKwlpZiAoIXByZXBhcmVfcmVxdWVzdChyZXF1ZXN0LCBkZXZpY2UpKSB7CisJCXNucHJpbnRmKGVycm9yQnVmZmVyLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJIkludGVyZmFjZSBuYW1lIFwiJXNcIiBpcyB0b28gbG9uZy4iLCBkZXZpY2UpOworCQljbG9zZShzb2NrZXQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvLyBjaGVjayBpZiB0aGUgaW50ZXJmYWNlIGV4aXN0CisJaWYgKGlvY3RsKHNvY2tldCwgU0lPQ0dJRklOREVYLCAmcmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpKSA8IDApIHsKKwkJc25wcmludGYoZXJyb3JCdWZmZXIsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkiSW50ZXJmYWNlIFwiJXNcIiBkb2VzIG5vdCBleGlzdC5cbiIsIGRldmljZSk7CisJCWNsb3NlKHNvY2tldCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWNsb3NlKHNvY2tldCk7CisJLy8gbm8gbG9uZ2VyIG5lZWRlZCBhZnRlciB0aGlzIHBvaW50CisKKwkvLyBnZXQgbGluayBsZXZlbCBpbnRlcmZhY2UgZm9yIHRoaXMgaW50ZXJmYWNlCisKKwlzb2NrZXQgPSA6OnNvY2tldChBRl9MSU5LLCBTT0NLX0RHUkFNLCAwKTsKKwlpZiAoc29ja2V0IDwgMCkgeworCQlzbnByaW50ZihlcnJvckJ1ZmZlciwgUENBUF9FUlJCVUZfU0laRSwgIk5vIGxpbmsgbGV2ZWw6ICVzXG4iLAorCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLy8gc3RhcnQgbW9uaXRvcmluZworCWlmIChpb2N0bChzb2NrZXQsIFNJT0NTUEFDS0VUQ0FQLCAmcmVxdWVzdCwgc2l6ZW9mKHN0cnVjdCBpZnJlcSkpIDwgMCkgeworCQlzbnByaW50ZihlcnJvckJ1ZmZlciwgUENBUF9FUlJCVUZfU0laRSwgIkNhbm5vdCBzdGFydCBtb25pdG9yaW5nOiAlc1xuIiwKKwkJCXN0cmVycm9yKGVycm5vKSk7CisJCWNsb3NlKHNvY2tldCk7CisJCXJldHVybiBOVUxMOworCX0KKworCXBjYXBfdCogaGFuZGxlID0gUENBUF9DUkVBVEVfQ09NTU9OKGVycm9yQnVmZmVyLCBzdHJ1Y3QgcGNhcF9oYWlrdSk7CisJaWYgKGhhbmRsZSA9PSBOVUxMKSB7CisJCXNucHJpbnRmKGVycm9yQnVmZmVyLCBQQ0FQX0VSUkJVRl9TSVpFLCAibWFsbG9jOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWNsb3NlKHNvY2tldCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWhhbmRsZS0+c2VsZWN0YWJsZV9mZCA9IHNvY2tldDsKKwloYW5kbGUtPmZkID0gc29ja2V0OworCisJaGFuZGxlLT5hY3RpdmF0ZV9vcCA9IHBjYXBfYWN0aXZhdGVfaGFpa3U7CisKKwlyZXR1cm4gaGFuZGxlOworfQorCitzdGF0aWMgaW50CitjYW5fYmVfYm91bmQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorZ2V0X2lmX2ZsYWdzKGNvbnN0IGNoYXIgKm5hbWUsIGJwZl91X2ludDMyICpmbGFncywgY2hhciAqZXJyYnVmKQoreworCS8qIFRPRE8gKi8KKwlpZiAoKmZsYWdzICYgUENBUF9JRl9MT09QQkFDSykgeworCQkvKgorCQkgKiBMb29wYmFjayBkZXZpY2VzIGFyZW4ndCB3aXJlbGVzcywgYW5kICJjb25uZWN0ZWQiLworCQkgKiAiZGlzY29ubmVjdGVkIiBkb2Vzbid0IGFwcGx5IHRvIHRoZW0uCisJCSAqLworCQkqZmxhZ3MgfD0gUENBUF9JRl9DT05ORUNUSU9OX1NUQVRVU19OT1RfQVBQTElDQUJMRTsKKwkJcmV0dXJuICgwKTsKKwl9CisJcmV0dXJuICgwKTsKK30KKworZXh0ZXJuICJDIiBpbnQKK3BjYXBfcGxhdGZvcm1fZmluZGRldnMocGNhcF9pZl9saXN0X3QqIF9hbGxEZXZpY2VzLCBjaGFyKiBlcnJvckJ1ZmZlcikKK3sKKwlyZXR1cm4gcGNhcF9maW5kYWxsZGV2c19pbnRlcmZhY2VzKF9hbGxEZXZpY2VzLCBlcnJvckJ1ZmZlciwgY2FuX2JlX2JvdW5kLAorCQlnZXRfaWZfZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvcGNhcC1pbnQuaCBiL3BjYXAtaW50LmgKaW5kZXggNTg4OGRmNy4uM2MxOGRhZSAxMDA2NDQKLS0tIGEvcGNhcC1pbnQuaAorKysgYi9wY2FwLWludC5oCkBAIC0zNCw2ICszNCw4IEBACiAjaWZuZGVmIHBjYXBfaW50X2gKICNkZWZpbmUJcGNhcF9pbnRfaAogCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKICNpbmNsdWRlIDxzaWduYWwuaD4KIAogI2luY2x1ZGUgPHBjYXAvcGNhcC5oPgpAQCAtNTEsNiArNTMsMzMgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKKy8qCisgKiBJZiBwY2FwX25ld19hcGkgaXMgc2V0LCB3ZSBkaXNhYmxlIHBjYXBfbG9va3VwZGV2KCksIGJlY2F1c2U6CisgKgorICogICAgaXQncyBub3QgdGhyZWFkLXNhZmUsIGFuZCBpcyBtYXJrZWQgYXMgZGVwcmVjYXRlZCwgb24gYWxsCisgKiAgICBwbGF0Zm9ybXM7CisgKgorICogICAgb24gV2luZG93cywgaXQgbWF5IHJldHVybiBVVEYtMTZMRSBzdHJpbmdzLCB3aGljaCB0aGUgcHJvZ3JhbQorICogICAgbWlnaHQgdGhlbiBwYXNzIHRvIHBjYXBfY3JlYXRlKCkgKG9yIHRvIHBjYXBfb3Blbl9saXZlKCksIHdoaWNoCisgKiAgICB0aGVuIHBhc3NlcyB0aGVtIHRvIHBjYXBfY3JlYXRlKCkpLCByZXF1aXJpbmcgcGNhcF9jcmVhdGUoKSB0bworICogICAgY2hlY2sgZm9yIFVURi0xNkxFIHN0cmluZ3MgdXNpbmcgYSBoYWNrLCBhbmQgdGhhdCBoYWNrIDEpCisgKiAgICAqY2Fubm90KiBiZSAxMDAlIHJlbGlhYmxlIGFuZCAyKSBydW5zIHRoZSByaXNrIG9mIGdvaW5nIHBhc3QgdGhlCisgKiAgICBlbmQgb2YgdGhlIHN0cmluZy4KKyAqCisgKiBXZSBrZWVwIGl0IGFyb3VuZCBpbiBsZWdhY3kgbW9kZSBmb3IgY29tcGF0aWJpbGl0eS4KKyAqCisgKiBXZSBhbHNvIGRpc2FibGUgdGhlIGFmb3JlbWVudGlvbmVkIGhhY2sgaW4gcGNhcF9jcmVhdGUoKS4KKyAqLworZXh0ZXJuIGludCBwY2FwX25ld19hcGk7CisKKy8qCisgKiBJZiBwY2FwX3V0Zl84X21vZGUgaXMgc2V0LCBvbiBXaW5kb3dzIHdlIHRyZWF0IHN0cmluZ3MgYXMgVVRGLTguCisgKgorICogT24gVU4qWGVzLCB3ZSBhc3N1bWUgYWxsIHN0cmluZ3MgYXJlIGFuZCBzaG91bGQgYmUgaW4gVVRGLTgsIHJlZ2FyZGxlc3MKKyAqIG9mIHRoZSBzZXR0aW5nIG9mIHRoaXMgZmxhZy4KKyAqLworZXh0ZXJuIGludCBwY2FwX3V0Zl84X21vZGU7CisKICNpZmRlZiBNU0RPUwogICAjaW5jbHVkZSA8ZmNudGwuaD4KICAgI2luY2x1ZGUgPGlvLmg+CkBAIC03Nyw3ICsxMDYsNyBAQAogICogICAgMSkgYmlnIGVub3VnaCBmb3IgbWF4aW11bS1zaXplIExpbnV4IGxvb3BiYWNrIHBhY2tldHMgKDY1NTQ5KQogICogICAgICAgYW5kIHNvbWUgVVNCIHBhY2tldHMgY2FwdHVyZWQgd2l0aCBVU0JQY2FwOgogICoKLSAqICAgICAgICAgICBodHRwOi8vZGVzb3dpbi5vcmcvdXNicGNhcC8KKyAqICAgICAgICAgICBodHRwczovL2Rlc293aW4ub3JnL3VzYnBjYXAvCiAgKgogICogICAgICAgKD4gMTMxMDcyLCA8IDI2MjE0NCkKICAqCkBAIC04NiwxMiArMTE1LDI5IEBACiAgKiAgICAyKSBzbWFsbCBlbm91Z2ggbm90IHRvIGNhdXNlIGF0dGVtcHRzIHRvIGFsbG9jYXRlIGh1Z2UgYW1vdW50cyBvZgogICogICAgICAgbWVtb3J5OyBzb21lIGFwcGxpY2F0aW9ucyBtaWdodCB1c2UgdGhlIHNuYXBzaG90IGxlbmd0aCBpbiBhCiAgKiAgICAgICBzYXZlZmlsZSBoZWFkZXIgdG8gY29udHJvbCB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRoZXkgYWxsb2NhdGUsCi0gKiAgICAgICBzbyBhIHNpemUgb2YsIHNheSwgMl4zMS0xIG1pZ2h0IG5vdCB3b3JrIHdlbGwuCisgKiAgICAgICBzbyBhIHNpemUgb2YsIHNheSwgMl4zMS0xIG1pZ2h0IG5vdCB3b3JrIHdlbGwuICAobGlicGNhcCB1c2VzIGl0CisgKiAgICAgICBhcyBhIGhpbnQsIGJ1dCBkb2Vzbid0IHN0YXJ0IG91dCBhbGxvY2F0aW5nIGEgYnVmZmVyIGJpZ2dlciB0aGFuCisgKiAgICAgICAyIEtpQiwgYW5kIGdyb3dzIHRoZSBidWZmZXIgYXMgbmVjZXNzYXJ5LCBidXQgbm90IGJleW9uZCB0aGUKKyAqICAgICAgIHBlci1saW5rdHlwZSBtYXhpbXVtIHNuYXBzaG90IGxlbmd0aC4gIE90aGVyIGNvZGUgbWlnaHQgbmFpdmVseQorICogICAgICAgdXNlIGl0OyB3ZSB3YW50IHRvIGF2b2lkIHdyaXRpbmcgYSB0b28tbGFyZ2Ugc25hcHNob3QgbGVuZ3RoLAorICogICAgICAgaW4gb3JkZXIgbm90IHRvIGNhdXNlIHRoYXQgY29kZSBwcm9ibGVtcy4pCiAgKgogICogV2UgZG9uJ3QgZW5mb3JjZSB0aGlzIGluIHBjYXBfc2V0X3NuYXBsZW4oKSwgYnV0IHdlIHVzZSBpdCBpbnRlcm5hbGx5LgogICovCiAjZGVmaW5lIE1BWElNVU1fU05BUExFTgkJMjYyMTQ0CiAKKy8qCisgKiBMb2NhbGUtaW5kZXBlbmRlbnQgbWFjcm9zIGZvciB0ZXN0aW5nIGNoYXJhY3RlciB0eXBlcy4KKyAqIFRoZXNlIGNhbiBiZSBwYXNzZWQgYW55IGludGVncmFsIHZhbHVlLCB3aXRob3V0IHdvcnJ5aW5nIGFib3V0LCBmb3IKKyAqIGV4YW1wbGUsIHNpZ24tZXh0ZW5kaW5nIGNoYXIgdmFsdWVzLCB1bmxpa2UgdGhlIEMgbWFjcm9zLgorICovCisjZGVmaW5lIFBDQVBfSVNESUdJVChjKSBcCisJKChjKSA+PSAnMCcgJiYgKGMpIDw9ICc5JykKKyNkZWZpbmUgUENBUF9JU1hESUdJVChjKSBcCisJKCgoYykgPj0gJzAnICYmIChjKSA8PSAnOScpIHx8IFwKKwkgKChjKSA+PSAnQScgJiYgKGMpIDw9ICdGJykgfHwgXAorCSAoKGMpID49ICdhJyAmJiAoYykgPD0gJ2YnKSkKKwogc3RydWN0IHBjYXBfb3B0IHsKIAljaGFyCSpkZXZpY2U7CiAJaW50CXRpbWVvdXQ7CS8qIHRpbWVvdXQgZm9yIGJ1ZmZlcmluZyAqLwpAQCAtMTE4LDcgKzE2NCw3IEBACiB0eXBlZGVmIGludAkoKmNhbl9zZXRfcmZtb25fb3BfdCkocGNhcF90ICopOwogdHlwZWRlZiBpbnQJKCpyZWFkX29wX3QpKHBjYXBfdCAqLCBpbnQgY250LCBwY2FwX2hhbmRsZXIsIHVfY2hhciAqKTsKIHR5cGVkZWYgaW50CSgqbmV4dF9wYWNrZXRfb3BfdCkocGNhcF90ICosIHN0cnVjdCBwY2FwX3BrdGhkciAqLCB1X2NoYXIgKiopOwotdHlwZWRlZiBpbnQJKCppbmplY3Rfb3BfdCkocGNhcF90ICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKK3R5cGVkZWYgaW50CSgqaW5qZWN0X29wX3QpKHBjYXBfdCAqLCBjb25zdCB2b2lkICosIGludCk7CiB0eXBlZGVmIHZvaWQJKCpzYXZlX2N1cnJlbnRfZmlsdGVyX29wX3QpKHBjYXBfdCAqLCBjb25zdCBjaGFyICopOwogdHlwZWRlZiBpbnQJKCpzZXRmaWx0ZXJfb3BfdCkocGNhcF90ICosIHN0cnVjdCBicGZfcHJvZ3JhbSAqKTsKIHR5cGVkZWYgaW50CSgqc2V0ZGlyZWN0aW9uX29wX3QpKHBjYXBfdCAqLCBwY2FwX2RpcmVjdGlvbl90KTsKQEAgLTEyNiw2ICsxNzIsNyBAQAogdHlwZWRlZiBpbnQJKCpnZXRub25ibG9ja19vcF90KShwY2FwX3QgKik7CiB0eXBlZGVmIGludAkoKnNldG5vbmJsb2NrX29wX3QpKHBjYXBfdCAqLCBpbnQpOwogdHlwZWRlZiBpbnQJKCpzdGF0c19vcF90KShwY2FwX3QgKiwgc3RydWN0IHBjYXBfc3RhdCAqKTsKK3R5cGVkZWYgdm9pZAkoKmJyZWFrbG9vcF9vcF90KShwY2FwX3QgKik7CiAjaWZkZWYgX1dJTjMyCiB0eXBlZGVmIHN0cnVjdCBwY2FwX3N0YXQgKigqc3RhdHNfZXhfb3BfdCkocGNhcF90ICosIGludCAqKTsKIHR5cGVkZWYgaW50CSgqc2V0YnVmZl9vcF90KShwY2FwX3QgKiwgaW50KTsKQEAgLTE5NSw4ICsyNDIsNyBAQAogCiAJaW50IHNuYXBzaG90OwogCWludCBsaW5rdHlwZTsJCS8qIE5ldHdvcmsgbGlua3R5cGUgKi8KLQlpbnQgbGlua3R5cGVfZXh0OyAgICAgICAvKiBFeHRlbmRlZCBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gdGhlIGxpbmt0eXBlIGZpZWxkIG9mIGEgZmlsZSAqLwotCWludCB0em9mZjsJCS8qIHRpbWV6b25lIG9mZnNldCAqLworCWludCBsaW5rdHlwZV9leHQ7CS8qIEV4dGVuZGVkIGluZm9ybWF0aW9uIHN0b3JlZCBpbiB0aGUgbGlua3R5cGUgZmllbGQgb2YgYSBmaWxlICovCiAJaW50IG9mZnNldDsJCS8qIG9mZnNldCBmb3IgcHJvcGVyIGFsaWdubWVudCAqLwogCWludCBhY3RpdmF0ZWQ7CQkvKiB0cnVlIGlmIHRoZSBjYXB0dXJlIGlzIHJlYWxseSBzdGFydGVkICovCiAJaW50IG9sZHN0eWxlOwkJLyogaWYgd2UncmUgb3BlbmluZyB3aXRoIHBjYXBfb3Blbl9saXZlKCkgKi8KQEAgLTIzNCw3ICsyODAsNyBAQAogCSAqIHBjYXBfdCdzIHdpdGggYSByZXF1aXJlZCB0aW1lb3V0LCBhbmQgdGhlIGNvZGUgbXVzdCBiZQogCSAqIHByZXBhcmVkIG5vdCB0byBzZWUgYW55IHBhY2tldHMgZnJvbSB0aGUgYXR0ZW1wdC4KIAkgKi8KLQlzdHJ1Y3QgdGltZXZhbCAqcmVxdWlyZWRfc2VsZWN0X3RpbWVvdXQ7CisJY29uc3Qgc3RydWN0IHRpbWV2YWwgKnJlcXVpcmVkX3NlbGVjdF90aW1lb3V0OwogI2VuZGlmCiAKIAkvKgpAQCAtMjQzLDYgKzI4OSw5IEBACiAJc3RydWN0IGJwZl9wcm9ncmFtIGZjb2RlOwogCiAJY2hhciBlcnJidWZbUENBUF9FUlJCVUZfU0laRSArIDFdOworI2lmZGVmIF9XSU4zMgorCWNoYXIgYWNwX2VycmJ1ZltQQ0FQX0VSUkJVRl9TSVpFICsgMV07CS8qIGJ1ZmZlciBmb3IgbG9jYWwgY29kZSBwYWdlIGVycm9yIHN0cmluZ3MgKi8KKyNlbmRpZgogCWludCBkbHRfY291bnQ7CiAJdV9pbnQgKmRsdF9saXN0OwogCWludCB0c3RhbXBfdHlwZV9jb3VudDsKQEAgLTI2NSw2ICszMTQsNyBAQAogCWdldG5vbmJsb2NrX29wX3QgZ2V0bm9uYmxvY2tfb3A7CiAJc2V0bm9uYmxvY2tfb3BfdCBzZXRub25ibG9ja19vcDsKIAlzdGF0c19vcF90IHN0YXRzX29wOworCWJyZWFrbG9vcF9vcF90IGJyZWFrbG9vcF9vcDsKIAogCS8qCiAJICogUm91dGluZSB0byB1c2UgYXMgY2FsbGJhY2sgZm9yIHBjYXBfbmV4dCgpL3BjYXBfbmV4dF9leCgpLgpAQCAtMzM1LDcgKzM4NSw3IEBACiAgKgogICogVGhlbiBzdXBwbHkgdGhlIGNoYW5nZXMgYnkgZm9ya2luZyB0aGUgYnJhbmNoIGF0CiAgKgotICoJaHR0cHM6Ly9naXRodWIuY29tL3RoZS10Y3BkdW1wLWdyb3VwL2xpYnBjYXAvaXNzdWVzCisgKglodHRwczovL2dpdGh1Yi5jb20vdGhlLXRjcGR1bXAtZ3JvdXAvbGlicGNhcC90cmVlL21hc3RlcgogICoKICAqIGFuZCBpc3N1aW5nIGEgcHVsbCByZXF1ZXN0LCBzbyB0aGF0IGZ1dHVyZSB2ZXJzaW9ucyBvZiBsaWJwY2FwIGFuZAogICogcHJvZ3JhbXMgdGhhdCB1c2UgaXQgKHN1Y2ggYXMgdGNwZHVtcCkgd2lsbCBiZSBhYmxlIHRvIHJlYWQgeW91ciBuZXcKQEAgLTM0NSw3ICszOTUsNyBAQAogc3RydWN0IHBjYXBfc2ZfcGt0aGRyIHsKICAgICBzdHJ1Y3QgcGNhcF90aW1ldmFsIHRzOwkvKiB0aW1lIHN0YW1wICovCiAgICAgYnBmX3VfaW50MzIgY2FwbGVuOwkJLyogbGVuZ3RoIG9mIHBvcnRpb24gcHJlc2VudCAqLwotICAgIGJwZl91X2ludDMyIGxlbjsJCS8qIGxlbmd0aCB0aGlzIHBhY2tldCAob2ZmIHdpcmUpICovCisgICAgYnBmX3VfaW50MzIgbGVuOwkJLyogbGVuZ3RoIG9mIHRoaXMgcGFja2V0IChvZmYgd2lyZSkgKi8KIH07CiAKIC8qCkBAIC0zNjEsNyArNDExLDcgQEAKIHN0cnVjdCBwY2FwX3NmX3BhdGNoZWRfcGt0aGRyIHsKICAgICBzdHJ1Y3QgcGNhcF90aW1ldmFsIHRzOwkvKiB0aW1lIHN0YW1wICovCiAgICAgYnBmX3VfaW50MzIgY2FwbGVuOwkJLyogbGVuZ3RoIG9mIHBvcnRpb24gcHJlc2VudCAqLwotICAgIGJwZl91X2ludDMyIGxlbjsJCS8qIGxlbmd0aCB0aGlzIHBhY2tldCAob2ZmIHdpcmUpICovCisgICAgYnBmX3VfaW50MzIgbGVuOwkJLyogbGVuZ3RoIG9mIHRoaXMgcGFja2V0IChvZmYgd2lyZSkgKi8KICAgICBpbnQJCWluZGV4OwogICAgIHVuc2lnbmVkIHNob3J0IHByb3RvY29sOwogICAgIHVuc2lnbmVkIGNoYXIgcGt0X3R5cGU7CkBAIC00MTMsMTIgKzQ2MywyNSBAQAogICogYnkgcGNhcF9jcmVhdGUgcm91dGluZXMuCiAgKi8KIHBjYXBfdAkqcGNhcF9jcmVhdGVfaW50ZXJmYWNlKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKLXBjYXBfdAkqcGNhcF9jcmVhdGVfY29tbW9uKGNoYXIgKiwgc2l6ZV90KTsKKworLyoKKyAqIFRoaXMgd3JhcHBlciB0YWtlcyBhbiBlcnJvciBidWZmZXIgcG9pbnRlciBhbmQgYSB0eXBlIHRvIHVzZSBmb3IgdGhlCisgKiBwcml2YXRlIGRhdGEsIGFuZCBjYWxscyBwY2FwX2NyZWF0ZV9jb21tb24oKSwgcGFzc2luZyBpdCB0aGUgZXJyb3IKKyAqIGJ1ZmZlciBwb2ludGVyLCB0aGUgc2l6ZSBmbyB0aGUgcHJpdmF0ZSBkYXRhIHR5cGUsIGluIGJ5dGVzLCBhbmQgdGhlCisgKiBvZmZzZXQgb2YgdGhlIHByaXZhdGUgZGF0YSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cnVjdHVyZSwgaW4KKyAqIGJ5dGVzLgorICovCisjZGVmaW5lIFBDQVBfQ1JFQVRFX0NPTU1PTihlYnVmLCB0eXBlKSBcCisJcGNhcF9jcmVhdGVfY29tbW9uKGVidWYsIFwKKwkgICAgc2l6ZW9mIChzdHJ1Y3QgeyBwY2FwX3QgX19jb21tb247IHR5cGUgX19wcml2YXRlOyB9KSwgXAorCSAgICBvZmZzZXRvZiAoc3RydWN0IHsgcGNhcF90IF9fY29tbW9uOyB0eXBlIF9fcHJpdmF0ZTsgfSwgX19wcml2YXRlKSkKK3BjYXBfdAkqcGNhcF9jcmVhdGVfY29tbW9uKGNoYXIgKiwgc2l6ZV90LCBzaXplX3QpOwogaW50CXBjYXBfZG9fYWRkZXhpdChwY2FwX3QgKik7CiB2b2lkCXBjYXBfYWRkX3RvX3BjYXBzX3RvX2Nsb3NlKHBjYXBfdCAqKTsKIHZvaWQJcGNhcF9yZW1vdmVfZnJvbV9wY2Fwc190b19jbG9zZShwY2FwX3QgKik7CiB2b2lkCXBjYXBfY2xlYW51cF9saXZlX2NvbW1vbihwY2FwX3QgKik7CiBpbnQJcGNhcF9jaGVja19hY3RpdmF0ZWQocGNhcF90ICopOwordm9pZAlwY2FwX2JyZWFrbG9vcF9jb21tb24ocGNhcF90ICopOwogCiAvKgogICogSW50ZXJuYWwgaW50ZXJmYWNlcyBmb3IgInBjYXBfZmluZGFsbGRldnMoKSIuCkBAIC00NjcsMTcgKzUzMCw4OSBAQAogI2VuZGlmCiAKIC8qCi0gKiBJbnRlcm5hbCBpbnRlcmZhY2VzIGZvciAicGNhcF9vcGVuX29mZmxpbmUoKSIuCisgKiBJbnRlcm5hbCBpbnRlcmZhY2VzIGZvciAicGNhcF9vcGVuX29mZmxpbmUoKSIgYW5kIG90aGVyIHNhdmVmaWxlCisgKiBJL08gcm91dGluZXMuCiAgKgogICogInBjYXBfb3Blbl9vZmZsaW5lX2NvbW1vbigpIiBhbGxvY2F0ZXMgYW5kIGZpbGxzIGluIGEgcGNhcF90LCBmb3IgdXNlCiAgKiBieSBwY2FwX29wZW5fb2ZmbGluZSByb3V0aW5lcy4KICAqCisgKiAicGNhcF9hZGp1c3Rfc25hcHNob3QoKSIgYWRqdXN0cyB0aGUgc25hcHNob3QgdG8gYmUgbm9uLXplcm8gYW5kCisgKiBmaXQgd2l0aGluIGFuIGludC4KKyAqCiAgKiAic2ZfY2xlYW51cCgpIiBjbG9zZXMgdGhlIGZpbGUgaGFuZGxlIGFzc29jaWF0ZWQgd2l0aCBhIHBjYXBfdCwgaWYKICAqIGFwcHJvcHJpYXRlLCBhbmQgZnJlZXMgYWxsIGRhdGEgY29tbW9uIHRvIGFsbCBtb2R1bGVzIGZvciBoYW5kbGluZwogICogc2F2ZWZpbGUgdHlwZXMuCisgKgorICogImNoYXJzZXRfZm9wZW4oKSIsIGluIFVURi04IG1vZGUgb24gV2luZG93cywgZG9lcyBhbiBmb3BlbigpIHRoYXQKKyAqIHRyZWF0cyB0aGUgcGF0aG5hbWUgYXMgYmVpbmcgaW4gVVRGLTgsIHJhdGhlciB0aGFuIHRoZSBsb2NhbAorICogY29kZSBwYWdlLCBvbiBXaW5kb3dzLgogICovCi1wY2FwX3QJKnBjYXBfb3Blbl9vZmZsaW5lX2NvbW1vbihjaGFyICplYnVmLCBzaXplX3Qgc2l6ZSk7CisKKy8qCisgKiBUaGlzIHdyYXBwZXIgdGFrZXMgYW4gZXJyb3IgYnVmZmVyIHBvaW50ZXIgYW5kIGEgdHlwZSB0byB1c2UgZm9yIHRoZQorICogcHJpdmF0ZSBkYXRhLCBhbmQgY2FsbHMgcGNhcF9jcmVhdGVfY29tbW9uKCksIHBhc3NpbmcgaXQgdGhlIGVycm9yCisgKiBidWZmZXIgcG9pbnRlciwgdGhlIHNpemUgZm8gdGhlIHByaXZhdGUgZGF0YSB0eXBlLCBpbiBieXRlcywgYW5kIHRoZQorICogb2Zmc2V0IG9mIHRoZSBwcml2YXRlIGRhdGEgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJ1Y3R1cmUsIGluCisgKiBieXRlcy4KKyAqLworI2RlZmluZSBQQ0FQX09QRU5fT0ZGTElORV9DT01NT04oZWJ1ZiwgdHlwZSkgXAorCXBjYXBfb3Blbl9vZmZsaW5lX2NvbW1vbihlYnVmLCBcCisJICAgIHNpemVvZiAoc3RydWN0IHsgcGNhcF90IF9fY29tbW9uOyB0eXBlIF9fcHJpdmF0ZTsgfSksIFwKKwkgICAgb2Zmc2V0b2YgKHN0cnVjdCB7IHBjYXBfdCBfX2NvbW1vbjsgdHlwZSBfX3ByaXZhdGU7IH0sIF9fcHJpdmF0ZSkpCitwY2FwX3QJKnBjYXBfb3Blbl9vZmZsaW5lX2NvbW1vbihjaGFyICplYnVmLCBzaXplX3QgdG90YWxfc2l6ZSwKKyAgICBzaXplX3QgcHJpdmF0ZV9kYXRhKTsKK2JwZl91X2ludDMyIHBjYXBfYWRqdXN0X3NuYXBzaG90KGJwZl91X2ludDMyIGxpbmt0eXBlLCBicGZfdV9pbnQzMiBzbmFwbGVuKTsKIHZvaWQJc2ZfY2xlYW51cChwY2FwX3QgKnApOworI2lmZGVmIF9XSU4zMgorRklMRQkqY2hhcnNldF9mb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKTsKKyNlbHNlCisvKgorICogT24gb3RoZXIgT1NlcywganVzdCB1c2UgQm9yaW5nIE9sZCBmb3BlbigpLgorICovCisjZGVmaW5lIGNoYXJzZXRfZm9wZW4ocGF0aCwgbW9kZSkJZm9wZW4oKHBhdGgpLCAobW9kZSkpCisjZW5kaWYKKworLyoKKyAqIEludGVybmFsIGludGVyZmFjZXMgZm9yIGxvYWRpbmcgY29kZSBhdCBydW4gdGltZS4KKyAqLworI2lmZGVmIF9XSU4zMgorI2RlZmluZSBwY2FwX2NvZGVfaGFuZGxlX3QJSE1PRFVMRQorI2RlZmluZSBwY2FwX2Z1bmNwdHJfdAkJRkFSUFJPQworCitwY2FwX2NvZGVfaGFuZGxlX3QJcGNhcF9sb2FkX2NvZGUoY29uc3QgY2hhciAqKTsKK3BjYXBfZnVuY3B0cl90CQlwY2FwX2ZpbmRfZnVuY3Rpb24ocGNhcF9jb2RlX2hhbmRsZV90LCBjb25zdCBjaGFyICopOworI2VuZGlmCisKKy8qCisgKiBJbnRlcm5hbCBpbnRlcmZhY2VzIGZvciBkb2luZyB1c2VyLW1vZGUgZmlsdGVyaW5nIG9mIHBhY2tldHMgYW5kCisgKiB2YWxpZGF0aW5nIGZpbHRlciBwcm9ncmFtcy4KKyAqLworLyoKKyAqIEF1eGlsaWFyeSBkYXRhLCBmb3IgdXNlIHdoZW4gaW50ZXJwcmV0aW5nIGEgZmlsdGVyIGludGVuZGVkIGZvciB0aGUKKyAqIExpbnV4IGtlcm5lbCB3aGVuIHRoZSBrZXJuZWwgcmVqZWN0cyB0aGUgZmlsdGVyIChyZXF1aXJpbmcgdXMgdG8KKyAqIHJ1biBpdCBpbiB1c2VybGFuZCkuICBJdCBjb250YWlucyBWTEFOIHRhZyBpbmZvcm1hdGlvbi4KKyAqLworc3RydWN0IGJwZl9hdXhfZGF0YSB7CisJdV9zaG9ydCB2bGFuX3RhZ19wcmVzZW50OworCXVfc2hvcnQgdmxhbl90YWc7Cit9OworCisvKgorICogRmlsdGVyaW5nIHJvdXRpbmUgdGhhdCB0YWtlcyB0aGUgYXV4aWxpYXJ5IGRhdGEgYXMgYW4gYWRkaXRpb25hbAorICogYXJndW1lbnQuCisgKi8KK3VfaW50CXBjYXBfZmlsdGVyX3dpdGhfYXV4X2RhdGEoY29uc3Qgc3RydWN0IGJwZl9pbnNuICosCisgICAgY29uc3QgdV9jaGFyICosIHVfaW50LCB1X2ludCwgY29uc3Qgc3RydWN0IGJwZl9hdXhfZGF0YSAqKTsKKworLyoKKyAqIEZpbHRlcmluZyByb3V0aW5lIHRoYXQgZG9lc24ndC4KKyAqLwordV9pbnQJcGNhcF9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgdV9pbnQpOworCisvKgorICogUm91dGluZSB0byB2YWxpZGF0ZSBhIEJQRiBwcm9ncmFtLgorICovCitpbnQJcGNhcF92YWxpZGF0ZV9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICosIGludCk7CiAKIC8qCiAgKiBJbnRlcm5hbCBpbnRlcmZhY2VzIGZvciBib3RoICJwY2FwX2NyZWF0ZSgpIiBhbmQgcm91dGluZXMgdGhhdApAQCAtNDg4LDE0ICs2MjMsMjAgQEAKICAqLwogdm9pZAlwY2FwX29uZXNob3QodV9jaGFyICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7CiAKLSNpZmRlZiBfV0lOMzIKLXZvaWQJcGNhcF93aW4zMl9lcnJfdG9fc3RyKERXT1JELCBjaGFyICopOwotI2VuZGlmCi0KIGludAlpbnN0YWxsX2JwZl9wcm9ncmFtKHBjYXBfdCAqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKik7CiAKIGludAlwY2FwX3N0cmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogCisvKgorICogSW50ZXJuYWwgaW50ZXJmYWNlcyBmb3IgcGNhcF9jcmVhdGVzcmNzdHIgYW5kIHBjYXBfcGFyc2VzcmNzdHIgd2l0aAorICogdGhlIGFkZGl0aW9uYWwgYml0IG9mIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBTU0wgc3VwcG9ydCAocnBjYXA6Ly8gdnMuCisgKiBycGNhcHM6Ly8pLgorICovCitpbnQJcGNhcF9jcmVhdGVzcmNzdHJfZXgoY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAorICAgIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgY2hhciwgY2hhciAqKTsKK2ludAlwY2FwX3BhcnNlc3Jjc3RyX2V4KGNvbnN0IGNoYXIgKiwgaW50ICosIGNoYXIgKiwgY2hhciAqLAorICAgIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCBjaGFyICopOworCiAjaWZkZWYgWVlERUJVRwogZXh0ZXJuIGludCBwY2FwX2RlYnVnOwogI2VuZGlmCmRpZmYgLS1naXQgYS9wY2FwLWxpYmRscGkuYyBiL3BjYXAtbGliZGxwaS5jCmluZGV4IGEwZDE2NjkuLmVmM2ZkYWMgMTAwNjQ0Ci0tLSBhL3BjYXAtbGliZGxwaS5jCisrKyBiL3BjYXAtbGliZGxwaS5jCkBAIC00Niw3ICs0Niw3IEBACiAvKiBGb3J3YXJkcy4gKi8KIHN0YXRpYyBpbnQgZGxwcm9taXNjb24ocGNhcF90ICosIGJwZl91X2ludDMyKTsKIHN0YXRpYyBpbnQgcGNhcF9yZWFkX2xpYmRscGkocGNhcF90ICosIGludCwgcGNhcF9oYW5kbGVyLCB1X2NoYXIgKik7Ci1zdGF0aWMgaW50IHBjYXBfaW5qZWN0X2xpYmRscGkocGNhcF90ICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKK3N0YXRpYyBpbnQgcGNhcF9pbmplY3RfbGliZGxwaShwY2FwX3QgKiwgY29uc3Qgdm9pZCAqLCBpbnQpOwogc3RhdGljIHZvaWQgcGNhcF9saWJkbHBpX2Vycihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50LCBjaGFyICopOwogc3RhdGljIHZvaWQgcGNhcF9jbGVhbnVwX2xpYmRscGkocGNhcF90ICopOwogCkBAIC04MCw3ICs4MCw3IEBACiAJCWx3cC0+bHdfZXJyID0gRU5PTUVNOwogCQlyZXR1cm4gKEJfVFJVRSk7CiAJfQotCSh2b2lkKSBzdHJsY3B5KGVudHJ5LT5saW5rbmFtZSwgbGlua25hbWUsIERMUElfTElOS05BTUVfTUFYKTsKKwkodm9pZCkgcGNhcF9zdHJsY3B5KGVudHJ5LT5saW5rbmFtZSwgbGlua25hbWUsIERMUElfTElOS05BTUVfTUFYKTsKIAogCWlmIChsd3AtPmx3X2xpc3QgPT0gTlVMTCkgewogCQlsd3AtPmx3X2xpc3QgPSBlbnRyeTsKQEAgLTQyNyw3ICs0MjcsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1wY2FwX2luamVjdF9saWJkbHBpKHBjYXBfdCAqcCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3BjYXBfaW5qZWN0X2xpYmRscGkocGNhcF90ICpwLCBjb25zdCB2b2lkICpidWYsIGludCBzaXplKQogewogCXN0cnVjdCBwY2FwX2RscGkgKnBkID0gcC0+cHJpdjsKIAlpbnQgcmV0djsKQEAgLTQ2OCw3ICs0NjgsNyBAQAogc3RhdGljIHZvaWQKIHBjYXBfbGliZGxwaV9lcnIoY29uc3QgY2hhciAqbGlua25hbWUsIGNvbnN0IGNoYXIgKmZ1bmMsIGludCBlcnIsIGNoYXIgKmVycmJ1ZikKIHsKLQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgImxpYnBjYXA6ICVzIGZhaWxlZCBvbiAlczogJXMiLAorCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgImxpYnBjYXA6ICVzIGZhaWxlZCBvbiAlczogJXMiLAogCSAgICBmdW5jLCBsaW5rbmFtZSwgZGxwaV9zdHJlcnJvcihlcnIpKTsKIH0KIApAQCAtNDc3LDcgKzQ3Nyw3IEBACiB7CiAJcGNhcF90ICpwOwogCi0JcCA9IHBjYXBfY3JlYXRlX2NvbW1vbihlYnVmLCBzaXplb2YgKHN0cnVjdCBwY2FwX2RscGkpKTsKKwlwID0gUENBUF9DUkVBVEVfQ09NTU9OKGVidWYsIHN0cnVjdCBwY2FwX2RscGkpOwogCWlmIChwID09IE5VTEwpCiAJCXJldHVybiAoTlVMTCk7CiAKZGlmZiAtLWdpdCBhL3BjYXAtbGlua3R5cGUubWFubWlzYyBiL3BjYXAtbGlua3R5cGUubWFubWlzYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBmMmVhMi4uMDAwMDAwMAotLS0gYS9wY2FwLWxpbmt0eXBlLm1hbm1pc2MKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAxOTg3LCAxOTg4LCAxOTg5LCAxOTkwLCAxOTkxLCAxOTkyLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3Ci0uXCIJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0OiAoMSkgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9ucwotLlwiIHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5LCAoMikKLS5cIiBkaXN0cmlidXRpb25zIGluY2x1ZGluZyBiaW5hcnkgY29kZSBpbmNsdWRlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAotLlwiIHRoaXMgcGFyYWdyYXBoIGluIGl0cyBlbnRpcmV0eSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvciBvdGhlciBtYXRlcmlhbHMKLS5cIiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24sIGFuZCAoMykgYWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nCi0uXCIgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLS5cIiBgYFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwKLS5cIiBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IGFuZCBpdHMgY29udHJpYnV0b3JzLicnIE5laXRoZXIgdGhlIG5hbWUgb2YKLS5cIiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZQotLlwiIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgotLlwiIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0uXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS5cIiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotLlwiCi0uVEggUENBUC1MSU5LVFlQRSA3ICI3IEFwcmlsIDIwMTQiCi0uU0ggTkFNRQotcGNhcC1saW5rdHlwZSBcLSBsaW5rLWxheWVyIGhlYWRlciB0eXBlcyBzdXBwb3J0ZWQgYnkgbGlicGNhcAotLlNIIERFU0NSSVBUSU9OCi1Gb3IgYSBsaXZlIGNhcHR1cmUgb3IgYGBzYXZlZmlsZScnLCBsaWJwY2FwIHN1cHBsaWVzLCBhcyB0aGUgcmV0dXJuCi12YWx1ZSBvZiB0aGUKLS5CUiBwY2FwX2RhdGFsaW5rICgzUENBUCkKLXJvdXRpbmUsIGEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgdGhlIHR5cGUgb2YgbGluay1sYXllciBoZWFkZXIgYXQgdGhlCi1iZWdpbm5pbmcgb2YgdGhlIHBhY2tldHMgaXQgcHJvdmlkZXMuICBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgdHlwZQotb2YgbGluay1sYXllciBoZWFkZXIgdGhhdCB0aGUgcGFja2V0cyBiZWluZyBjYXB0dXJlZCBoYXZlIG9uIHRoZSBuZXR3b3JrCi1mcm9tIHdoaWNoIHRoZXkncmUgYmVpbmcgY2FwdHVyZWQ7IGZvciBleGFtcGxlLCBwYWNrZXRzIGZyb20gYW4gSUVFRQotODAyLjExIG5ldHdvcmsgbWlnaHQgYmUgcHJvdmlkZWQgYnkgbGlicGNhcCB3aXRoIEV0aGVybmV0IGhlYWRlcnMgdGhhdAotdGhlIG5ldHdvcmsgYWRhcHRlciBvciB0aGUgbmV0d29yayBhZGFwdGVyIGRyaXZlciBnZW5lcmF0ZXMgZnJvbSB0aGUKLTgwMi4xMSBoZWFkZXJzLiAgVGhlIG5hbWVzIGZvciB0aG9zZSB2YWx1ZXMgYmVnaW4gd2l0aAotLkJSIERMVF8gLAotc28gdGhleSBhcmUgc29tZXRpbWVzIGNhbGxlZCAiRExUXyB2YWx1ZXMiLgotLlBQCi1UaGUgdmFsdWVzIHN0b3JlZCBpbiB0aGUgbGluay1sYXllciBoZWFkZXIgdHlwZSBmaWVsZCBpbiB0aGUgc2F2ZWZpbGUKLWhlYWRlciBhcmUsIGluIG1vc3QgYnV0IG5vdCBhbGwgY2FzZXMsIHRoZSBzYW1lIGFzIHRoZSB2YWx1ZXMgcmV0dXJuZWQKLWJ5Ci0uQlIgcGNhcF9kYXRhbGluaygpIC4KLVRoZSBuYW1lcyBmb3IgdGhvc2UgdmFsdWVzIGJlZ2luIHdpdGgKLS5CUiBMSU5LVFlQRV8gLgotLlBQCi1UaGUgbGluay1sYXllciBoZWFkZXIgdHlwZXMgc3VwcG9ydGVkIGJ5IGxpYnBjYXAgYXJlIGRlc2NyaWJlZCBhdAotaHR0cHM6Ly93d3cudGNwZHVtcC5vcmcvbGlua3R5cGVzLmh0bWwuCi0uU0ggU0VFIEFMU08KLXBjYXBfZGF0YWxpbmsoM1BDQVApCmRpZmYgLS1naXQgYS9wY2FwLWxpbmt0eXBlLm1hbm1pc2MuaW4gYi9wY2FwLWxpbmt0eXBlLm1hbm1pc2MuaW4KaW5kZXggNjg5MTlhNy4uNzM2YTkxYyAxMDA2NDQKLS0tIGEvcGNhcC1saW5rdHlwZS5tYW5taXNjLmluCisrKyBiL3BjYXAtbGlua3R5cGUubWFubWlzYy5pbgpAQCAtMTgsNyArMTgsNyBAQAogLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAuXCIgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KIC5cIgotLlRIIFBDQVAtTElOS1RZUEUgQE1BTl9NSVNDX0lORk9AICI3IEFwcmlsIDIwMTQiCisuVEggUENBUC1MSU5LVFlQRSBATUFOX01JU0NfSU5GT0AgIjYgQXByaWwgMjAyMCIKIC5TSCBOQU1FCiBwY2FwLWxpbmt0eXBlIFwtIGxpbmstbGF5ZXIgaGVhZGVyIHR5cGVzIHN1cHBvcnRlZCBieSBsaWJwY2FwCiAuU0ggREVTQ1JJUFRJT04KQEAgLTM4LDExICszOCwxMSBAQAogVGhlIHZhbHVlcyBzdG9yZWQgaW4gdGhlIGxpbmstbGF5ZXIgaGVhZGVyIHR5cGUgZmllbGQgaW4gdGhlIHNhdmVmaWxlCiBoZWFkZXIgYXJlLCBpbiBtb3N0IGJ1dCBub3QgYWxsIGNhc2VzLCB0aGUgc2FtZSBhcyB0aGUgdmFsdWVzIHJldHVybmVkCiBieQotLkJSIHBjYXBfZGF0YWxpbmsoKSAuCisuQlIgcGNhcF9kYXRhbGluayAoKS4KIFRoZSBuYW1lcyBmb3IgdGhvc2UgdmFsdWVzIGJlZ2luIHdpdGgKIC5CUiBMSU5LVFlQRV8gLgogLlBQCiBUaGUgbGluay1sYXllciBoZWFkZXIgdHlwZXMgc3VwcG9ydGVkIGJ5IGxpYnBjYXAgYXJlIGRlc2NyaWJlZCBhdAotaHR0cHM6Ly93d3cudGNwZHVtcC5vcmcvbGlua3R5cGVzLmh0bWwuCitodHRwczovL3d3dy50Y3BkdW1wLm9yZy9saW5rdHlwZXMuaHRtbCAuCiAuU0ggU0VFIEFMU08KLXBjYXBfZGF0YWxpbmsoM1BDQVApCisuQlIgcGNhcCAoM1BDQVApCmRpZmYgLS1naXQgYS9wY2FwLWxpbnV4LmMgYi9wY2FwLWxpbnV4LmMKaW5kZXggNDkxNDRiNi4uNzQ4MTY4OSAxMDA2NDQKLS0tIGEvcGNhcC1saW51eC5jCisrKyBiL3BjYXAtbGludXguYwpAQCAtNjcsNDggKzY3LDYgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLS8qCi0gKiBLbm93biBwcm9ibGVtcyB3aXRoIDIuMFsueF0ga2VybmVsczoKLSAqCi0gKiAgIC0gVGhlIGxvb3BiYWNrIGRldmljZSBnaXZlcyBldmVyeSBwYWNrZXQgdHdpY2U7IG9uIDIuMlsueF0ga2VybmVscywKLSAqICAgICBpZiB3ZSB1c2UgUEZfUEFDS0VULCB3ZSBjYW4gZmlsdGVyIG91dCB0aGUgdHJhbnNtaXR0ZWQgdmVyc2lvbgotICogICAgIG9mIHRoZSBwYWNrZXQgYnkgdXNpbmcgZGF0YSBpbiB0aGUgInNvY2thZGRyX2xsIiByZXR1cm5lZCBieQotICogICAgICJyZWN2ZnJvbSgpIiwgYnV0LCBvbiAyLjBbLnhdIGtlcm5lbHMsIHdlIGhhdmUgdG8gdXNlCi0gKiAgICAgUEZfSU5FVC9TT0NLX1BBQ0tFVCwgd2hpY2ggbWVhbnMgInJlY3Zmcm9tKCkiIHN1cHBsaWVzIGEKLSAqICAgICAic29ja2FkZHJfcGt0IiB3aGljaCBkb2Vzbid0IGdpdmUgdXMgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGxldAotICogICAgIHVzIGRvIHRoYXQuCi0gKgotICogICAtIFdlIGhhdmUgdG8gc2V0IHRoZSBpbnRlcmZhY2UncyBJRkZfUFJPTUlTQyBmbGFnIG91cnNlbHZlcywgaWYKLSAqICAgICB3ZSdyZSB0byBydW4gaW4gcHJvbWlzY3VvdXMgbW9kZSwgd2hpY2ggbWVhbnMgd2UgaGF2ZSB0byB0dXJuCi0gKiAgICAgaXQgb2ZmIG91cnNlbHZlcyB3aGVuIHdlJ3JlIGRvbmU7IHRoZSBrZXJuZWwgZG9lc24ndCBrZWVwIHRyYWNrCi0gKiAgICAgb2YgaG93IG1hbnkgc29ja2V0cyBhcmUgbGlzdGVuaW5nIHByb21pc2N1b3VzbHksIHdoaWNoIG1lYW5zCi0gKiAgICAgaXQgd29uJ3QgZ2V0IHR1cm5lZCBvZmYgYXV0b21hdGljYWxseSB3aGVuIG5vIHNvY2tldHMgYXJlCi0gKiAgICAgbGlzdGVuaW5nIHByb21pc2N1b3VzbHkuICBXZSBjYXRjaCAicGNhcF9jbG9zZSgpIiBhbmQsIGZvcgotICogICAgIGludGVyZmFjZXMgd2UgcHV0IGludG8gcHJvbWlzY3VvdXMgbW9kZSwgdGFrZSB0aGVtIG91dCBvZgotICogICAgIHByb21pc2N1b3VzIG1vZGUgLSB3aGljaCBpc24ndCBuZWNlc3NhcmlseSB0aGUgcmlnaHQgdGhpbmcgdG8KLSAqICAgICBkbywgaWYgYW5vdGhlciBzb2NrZXQgYWxzbyByZXF1ZXN0ZWQgcHJvbWlzY3VvdXMgbW9kZSBiZXR3ZWVuCi0gKiAgICAgdGhlIHRpbWUgd2hlbiB3ZSBvcGVuZWQgdGhlIHNvY2tldCBhbmQgdGhlIHRpbWUgd2hlbiB3ZSBjbG9zZQotICogICAgIHRoZSBzb2NrZXQuCi0gKgotICogICAtIE1TR19UUlVOQyBpc24ndCBzdXBwb3J0ZWQsIHNvIHlvdSBjYW4ndCBzcGVjaWZ5IHRoYXQgInJlY3Zmcm9tKCkiCi0gKiAgICAgcmV0dXJuIHRoZSBhbW91bnQgb2YgZGF0YSB0aGF0IHlvdSBjb3VsZCBoYXZlIHJlYWQsIHJhdGhlciB0aGFuCi0gKiAgICAgdGhlIGFtb3VudCB0aGF0IHdhcyByZXR1cm5lZCwgc28gd2UgY2FuJ3QganVzdCBhbGxvY2F0ZSBhIGJ1ZmZlcgotICogICAgIHdob3NlIHNpemUgaXMgdGhlIHNuYXBzaG90IGxlbmd0aCBhbmQgcGFzcyB0aGUgc25hcHNob3QgbGVuZ3RoCi0gKiAgICAgYXMgdGhlIGJ5dGUgY291bnQsIGFuZCBhbHNvIHBhc3MgTVNHX1RSVU5DLCBzbyB0aGF0IHRoZSByZXR1cm4KLSAqICAgICB2YWx1ZSB0ZWxscyB1cyBob3cgbG9uZyB0aGUgcGFja2V0IHdhcyBvbiB0aGUgd2lyZS4KLSAqCi0gKiAgICAgVGhpcyBtZWFucyB0aGF0LCBpZiB3ZSB3YW50IHRvIGdldCB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIHBhY2tldCwKLSAqICAgICBzbyB3ZSBjYW4gcmV0dXJuIGl0IGluIHRoZSAibGVuIiBmaWVsZCBvZiB0aGUgcGFja2V0IGhlYWRlciwKLSAqICAgICB3ZSBoYXZlIHRvIHJlYWQgdGhlIGVudGlyZSBwYWNrZXQsIG5vdCBqdXN0IHRoZSBwYXJ0IHRoYXQgZml0cwotICogICAgIHdpdGhpbiB0aGUgc25hcHNob3QgbGVuZ3RoLCBhbmQgdGh1cyB3YXN0ZSBDUFUgdGltZSBjb3B5aW5nIGRhdGEKLSAqICAgICBmcm9tIHRoZSBrZXJuZWwgdGhhdCBvdXIgY2FsbGVyIHdvbid0IHNlZS4KLSAqCi0gKiAgICAgV2UgaGF2ZSB0byBnZXQgdGhlIGFjdHVhbCBzaXplLCBhbmQgc3VwcGx5IGl0IGluICJsZW4iLCBiZWNhdXNlCi0gKiAgICAgb3RoZXJ3aXNlLCB0aGUgSVAgZGlzc2VjdG9yIGluIHRjcGR1bXAsIGZvciBleGFtcGxlLCB3aWxsIGNvbXBsYWluCi0gKiAgICAgYWJvdXQgInRydW5jYXRlZC1pcCIsIGFzIHRoZSBwYWNrZXQgd2lsbCBhcHBlYXIgdG8gaGF2ZSBiZWVuCi0gKiAgICAgc2hvcnRlciwgb24gdGhlIHdpcmUsIHRoYW4gdGhlIElQIGhlYWRlciBzYWlkIGl0IHNob3VsZCBoYXZlIGJlZW4uCi0gKi8KLQogCiAjZGVmaW5lIF9HTlVfU09VUkNFCiAKQEAgLTExOSw3ICs3Nyw2IEBACiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTEzMiwxMTQgKzg5LDU2IEBACiAjaW5jbHVkZSA8bGludXgvaWYuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9wYWNrZXQuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgotI2luY2x1ZGUgPG5ldC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxwb2xsLmg+CiAjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8c3lzL2V2ZW50ZmQuaD4KIAogI2luY2x1ZGUgInBjYXAtaW50LmgiCiAjaW5jbHVkZSAicGNhcC9zbGwuaCIKICNpbmNsdWRlICJwY2FwL3ZsYW4uaCIKIAorI2luY2x1ZGUgImRpYWctY29udHJvbC5oIgorCiAvKgotICogSWYgUEZfUEFDS0VUIGlzIGRlZmluZWQsIHdlIGNhbiB1c2Uge1NPQ0tfUkFXLFNPQ0tfREdSQU19L1BGX1BBQ0tFVAotICogc29ja2V0cyByYXRoZXIgdGhhbiBTT0NLX1BBQ0tFVCBzb2NrZXRzLgotICoKLSAqIFRvIHVzZSB0aGVtLCB3ZSBpbmNsdWRlIDxsaW51eC9pZl9wYWNrZXQuaD4gcmF0aGVyIHRoYW4KLSAqIDxuZXRwYWNrZXQvcGFja2V0Lmg+OyB3ZSBkbyBzbyBiZWNhdXNlCi0gKgotICoJc29tZSBMaW51eCBkaXN0cmlidXRpb25zIChlLmcuLCBTbGFja3dhcmUgNC4wKSBoYXZlIDIuMiBvcgotICoJbGF0ZXIga2VybmVscyBhbmQgbGliYzUsIGFuZCBkb24ndCBwcm92aWRlIGEgPG5ldHBhY2tldC9wYWNrZXQuaD4KLSAqCWZpbGU7Ci0gKgotICoJbm90IGFsbCB2ZXJzaW9ucyBvZiBnbGliYzIgaGF2ZSBhIDxuZXRwYWNrZXQvcGFja2V0Lmg+IGZpbGUKLSAqCXRoYXQgZGVmaW5lcyBzdHVmZiBuZWVkZWQgZm9yIHNvbWUgb2YgdGhlIDIuNC1vci1sYXRlci1rZXJuZWwKLSAqCWZlYXR1cmVzLCBzbyBpZiB0aGUgc3lzdGVtIGhhcyBhIDIuNCBvciBsYXRlciBrZXJuZWwsIHdlCi0gKglzdGlsbCBjYW4ndCB1c2UgdGhvc2UgZmVhdHVyZXMuCi0gKgotICogV2UncmUgYWxyZWFkeSBpbmNsdWRpbmcgYSBudW1iZXIgb2Ygb3RoZXIgPGxpbnV4L1hYWC5oPiBoZWFkZXJzLCBhbmQKLSAqIHRoaXMgY29kZSBpcyBMaW51eC1zcGVjaWZpYyAobm8gb3RoZXIgT1MgaGFzIFBGX1BBQ0tFVCBzb2NrZXRzIGFzCi0gKiBhIHJhdyBwYWNrZXQgY2FwdHVyZSBtZWNoYW5pc20pLCBzbyBpdCdzIG5vdCBhcyBpZiB5b3UgZ2FpbiBhbnkKLSAqIHVzZWZ1bCBwb3J0YWJpbGl0eSBieSB1c2luZyA8bmV0cGFja2V0L3BhY2tldC5oPgotICoKLSAqIFhYWCAtIHNob3VsZCB3ZSBqdXN0IGluY2x1ZGUgPGxpbnV4L2lmX3BhY2tldC5oPiBldmVuIGlmIFBGX1BBQ0tFVAotICogaXNuJ3QgZGVmaW5lZD8gIEl0IG9ubHkgZGVmaW5lcyBvbmUgZGF0YSBzdHJ1Y3R1cmUgaW4gMi4wLngsIHNvCi0gKiBpdCBzaG91bGRuJ3QgY2F1c2UgYW55IHByb2JsZW1zLgorICogV2UgcmVxdWlyZSBUUEFDS0VUX1YyIHN1cHBvcnQuCiAgKi8KLSNpZmRlZiBQRl9QQUNLRVQKLSMgaW5jbHVkZSA8bGludXgvaWZfcGFja2V0Lmg+CisjaWZuZGVmIFRQQUNLRVQyX0hEUkxFTgorI2Vycm9yICJMaWJwY2FwIHdpbGwgb25seSB3b3JrIGlmIFRQQUNLRVRfVjIgaXMgc3VwcG9ydGVkOyB5b3UgbXVzdCBidWlsZCBmb3IgYSAyLjYuMjcgb3IgbGF0ZXIga2VybmVsIgorI2VuZGlmCiAKLSAvKgotICAqIE9uIGF0IGxlYXN0IHNvbWUgTGludXggZGlzdHJpYnV0aW9ucyAoZm9yIGV4YW1wbGUsIFJlZCBIYXQgNS4yKSwKLSAgKiB0aGVyZSdzIG5vIDxuZXRwYWNrZXQvcGFja2V0Lmg+IGZpbGUsIGJ1dCBQRl9QQUNLRVQgaXMgZGVmaW5lZCBpZgotICAqIHlvdSBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+LCBidXQgPGxpbnV4L2lmX3BhY2tldC5oPiBkb2Vzbid0IGRlZmluZQotICAqIGFueSBvZiB0aGUgUEZfUEFDS0VUIHN0dWZmIHN1Y2ggYXMgInN0cnVjdCBzb2NrYWRkcl9sbCIgb3IgYW55IG9mCi0gICogdGhlIFBBQ0tFVF94eHggc3R1ZmYuCi0gICoKLSAgKiBTbyB3ZSBjaGVjayB3aGV0aGVyIFBBQ0tFVF9IT1NUIGlzIGRlZmluZWQsIGFuZCBhc3N1bWUgdGhhdCB3ZSBoYXZlCi0gICogUEZfUEFDS0VUIHNvY2tldHMgb25seSBpZiBpdCBpcyBkZWZpbmVkLgotICAqLwotIyBpZmRlZiBQQUNLRVRfSE9TVAotIyAgZGVmaW5lIEhBVkVfUEZfUEFDS0VUX1NPQ0tFVFMKLSMgIGlmZGVmIFBBQ0tFVF9BVVhEQVRBCi0jICAgZGVmaW5lIEhBVkVfUEFDS0VUX0FVWERBVEEKLSMgIGVuZGlmIC8qIFBBQ0tFVF9BVVhEQVRBICovCi0jIGVuZGlmIC8qIFBBQ0tFVF9IT1NUICovCisvKiBjaGVjayBmb3IgbWVtb3J5IG1hcHBlZCBhY2Nlc3MgYXZhaWJpbGl0eS4gV2UgYXNzdW1lIGV2ZXJ5IG5lZWRlZAorICogc3RydWN0IGlzIGRlZmluZWQgaWYgdGhlIG1hY3JvIFRQQUNLRVRfSERSTEVOIGlzIGRlZmluZWQsIGJlY2F1c2UgaXQKKyAqIHVzZXMgbWFueSByaW5nIHJlbGF0ZWQgc3RydWN0cyBhbmQgbWFjcm9zICovCisjaWZkZWYgVFBBQ0tFVDNfSERSTEVOCisjIGRlZmluZSBIQVZFX1RQQUNLRVQzCisjZW5kaWYgLyogVFBBQ0tFVDNfSERSTEVOICovCiAKKyNkZWZpbmUgcGFja2V0X21tYXBfYWNxdWlyZShwa3QpIFwKKwkoX19hdG9taWNfbG9hZF9uKCZwa3QtPnRwX3N0YXR1cywgX19BVE9NSUNfQUNRVUlSRSkgIT0gVFBfU1RBVFVTX0tFUk5FTCkKKyNkZWZpbmUgcGFja2V0X21tYXBfcmVsZWFzZShwa3QpIFwKKwkoX19hdG9taWNfc3RvcmVfbigmcGt0LT50cF9zdGF0dXMsIFRQX1NUQVRVU19LRVJORUwsIF9fQVRPTUlDX1JFTEVBU0UpKQorI2RlZmluZSBwYWNrZXRfbW1hcF92M19hY3F1aXJlKHBrdCkgXAorCShfX2F0b21pY19sb2FkX24oJnBrdC0+aGRyLmJoMS5ibG9ja19zdGF0dXMsIF9fQVRPTUlDX0FDUVVJUkUpICE9IFRQX1NUQVRVU19LRVJORUwpCisjZGVmaW5lIHBhY2tldF9tbWFwX3YzX3JlbGVhc2UocGt0KSBcCisJKF9fYXRvbWljX3N0b3JlX24oJnBrdC0+aGRyLmJoMS5ibG9ja19zdGF0dXMsIFRQX1NUQVRVU19LRVJORUwsIF9fQVRPTUlDX1JFTEVBU0UpKQogCi0gLyogY2hlY2sgZm9yIG1lbW9yeSBtYXBwZWQgYWNjZXNzIGF2YWliaWxpdHkuIFdlIGFzc3VtZSBldmVyeSBuZWVkZWQKLSAgKiBzdHJ1Y3QgaXMgZGVmaW5lZCBpZiB0aGUgbWFjcm8gVFBBQ0tFVF9IRFJMRU4gaXMgZGVmaW5lZCwgYmVjYXVzZSBpdAotICAqIHVzZXMgbWFueSByaW5nIHJlbGF0ZWQgc3RydWN0cyBhbmQgbWFjcm9zICovCi0jIGlmZGVmIFBDQVBfU1VQUE9SVF9QQUNLRVRfUklORwotIyBpZmRlZiBUUEFDS0VUX0hEUkxFTgotIyAgZGVmaW5lIEhBVkVfUEFDS0VUX1JJTkcKLSMgIGlmZGVmIFRQQUNLRVQzX0hEUkxFTgotIyAgIGRlZmluZSBIQVZFX1RQQUNLRVQzCi0jICBlbmRpZiAvKiBUUEFDS0VUM19IRFJMRU4gKi8KLSMgIGlmZGVmIFRQQUNLRVQyX0hEUkxFTgotIyAgIGRlZmluZSBIQVZFX1RQQUNLRVQyCi0jICBlbHNlICAvKiBUUEFDS0VUMl9IRFJMRU4gKi8KLSMgICBkZWZpbmUgVFBBQ0tFVF9WMQkwICAgIC8qIE9sZCBrZXJuZWwgd2l0aCBvbmx5IFYxLCBzbyBubyBUUEFDS0VUX1ZuIGRlZmluZWQgKi8KLSMgIGVuZGlmIC8qIFRQQUNLRVQyX0hEUkxFTiAqLwotIyBlbmRpZiAvKiBUUEFDS0VUX0hEUkxFTiAqLwotIyBlbmRpZiAvKiBQQ0FQX1NVUFBPUlRfUEFDS0VUX1JJTkcgKi8KLSNlbmRpZiAvKiBQRl9QQUNLRVQgKi8KLQotI2lmZGVmIFNPX0FUVEFDSF9GSUxURVIKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbHRlci5oPgotI2VuZGlmCiAKICNpZmRlZiBIQVZFX0xJTlVYX05FVF9UU1RBTVBfSAogI2luY2x1ZGUgPGxpbnV4L25ldF90c3RhbXAuaD4KICNlbmRpZgogCi0jaWZkZWYgSEFWRV9MSU5VWF9TT0NLSU9TX0gKLSNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+Ci0jZW5kaWYKLQotI2lmZGVmIEhBVkVfTElOVVhfSUZfQk9ORElOR19ICisvKgorICogRm9yIGNoZWNraW5nIHdoZXRoZXIgYSBkZXZpY2UgaXMgYSBib25kaW5nIGRldmljZS4KKyAqLwogI2luY2x1ZGUgPGxpbnV4L2lmX2JvbmRpbmcuaD4KIAogLyoKLSAqIFRoZSBpb2N0bCBjb2RlIHRvIHVzZSB0byBjaGVjayB3aGV0aGVyIGEgZGV2aWNlIGlzIGEgYm9uZGluZyBkZXZpY2UuCi0gKi8KLSNpZiBkZWZpbmVkKFNJT0NCT05ESU5GT1FVRVJZKQotCSNkZWZpbmUgQk9ORF9JTkZPX1FVRVJZX0lPQ1RMIFNJT0NCT05ESU5GT1FVRVJZCi0jZWxpZiBkZWZpbmVkKEJPTkRfSU5GT19RVUVSWV9PTEQpCi0JI2RlZmluZSBCT05EX0lORk9fUVVFUllfSU9DVEwgQk9ORF9JTkZPX1FVRVJZX09MRAotI2VuZGlmCi0jZW5kaWYgLyogSEFWRV9MSU5VWF9JRl9CT05ESU5HX0ggKi8KLQotLyoKLSAqIEdvdCBXaXJlbGVzcyBFeHRlbnNpb25zPwotICovCi0jaWZkZWYgSEFWRV9MSU5VWF9XSVJFTEVTU19ICi0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLSNlbmRpZiAvKiBIQVZFX0xJTlVYX1dJUkVMRVNTX0ggKi8KLQotLyoKICAqIEdvdCBsaWJubD8KICAqLwogI2lmZGVmIEhBVkVfTElCTkwKQEAgLTI1MiwzOSArMTUxLDEwIEBACiAjaW5jbHVkZSA8bmV0bGluay9hdHRyLmg+CiAjZW5kaWYgLyogSEFWRV9MSUJOTCAqLwogCi0vKgotICogR290IGV0aHRvb2wgc3VwcG9ydD8KLSAqLwotI2lmZGVmIEhBVkVfTElOVVhfRVRIVE9PTF9ICi0jaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2VuZGlmCi0KICNpZm5kZWYgSEFWRV9TT0NLTEVOX1QKIHR5cGVkZWYgaW50CQlzb2NrbGVuX3Q7CiAjZW5kaWYKIAotI2lmbmRlZiBNU0dfVFJVTkMKLS8qCi0gKiBUaGlzIGlzIGJlaW5nIGNvbXBpbGVkIG9uIGEgc3lzdGVtIHRoYXQgbGFja3MgTVNHX1RSVU5DOyBkZWZpbmUgaXQKLSAqIHdpdGggdGhlIHZhbHVlIGl0IGhhcyBpbiB0aGUgMi4yIGFuZCBsYXRlciBrZXJuZWxzLCBzbyB0aGF0LCBvbgotICogdGhvc2Uga2VybmVscywgd2hlbiB3ZSBwYXNzIGl0IGluIHRoZSBmbGFncyBhcmd1bWVudCB0byAicmVjdmZyb20oKSIKLSAqIHdlJ3JlIHBhc3NpbmcgdGhlIHJpZ2h0IHZhbHVlIGFuZCB0aHVzIGdldCB0aGUgTVNHX1RSVU5DIGJlaGF2aW9yCi0gKiB3ZSB3YW50LiAgKFdlIGRvbid0IGdldCB0aGF0IGJlaGF2aW9yIG9uIDIuMFsueF0ga2VybmVscywgYmVjYXVzZQotICogdGhleSBkaWRuJ3Qgc3VwcG9ydCBNU0dfVFJVTkMuKQotICovCi0jZGVmaW5lIE1TR19UUlVOQwkweDIwCi0jZW5kaWYKLQotI2lmbmRlZiBTT0xfUEFDS0VUCi0vKgotICogVGhpcyBpcyBiZWluZyBjb21waWxlZCBvbiBhIHN5c3RlbSB0aGF0IGxhY2tzIFNPTF9QQUNLRVQ7IGRlZmluZSBpdAotICogd2l0aCB0aGUgdmFsdWUgaXQgaGFzIGluIHRoZSAyLjIgYW5kIGxhdGVyIGtlcm5lbHMsIHNvIHRoYXQgd2UgY2FuCi0gKiBzZXQgcHJvbWlzY3VvdXMgbW9kZSBpbiB0aGUgZ29vZCBtb2Rlcm4gd2F5IHJhdGhlciB0aGFuIHRoZSBvbGQKLSAqIDIuMC1rZXJuZWwgY3JhcHB5IHdheS4KLSAqLwotI2RlZmluZSBTT0xfUEFDS0VUCTI2MwotI2VuZGlmCi0KICNkZWZpbmUgTUFYX0xJTktIRUFERVJfU0laRQkyNTYKIAogLyoKQEAgLTI5NSwxMSArMTY1LDEwIEBACiAjZGVmaW5lIEJJR0dFUl9USEFOX0FMTF9NVFVTCSg2NCoxMDI0KQogCiAvKgotICogUHJpdmF0ZSBkYXRhIGZvciBjYXB0dXJpbmcgb24gTGludXggU09DS19QQUNLRVQgb3IgUEZfUEFDS0VUIHNvY2tldHMuCisgKiBQcml2YXRlIGRhdGEgZm9yIGNhcHR1cmluZyBvbiBMaW51eCBQRl9QQUNLRVQgc29ja2V0cy4KICAqLwogc3RydWN0IHBjYXBfbGludXggewotCXVfaW50CXBhY2tldHNfcmVhZDsJLyogY291bnQgb2YgcGFja2V0cyByZWFkIHdpdGggcmVjdmZyb20oKSAqLwotCWxvbmcJcHJvY19kcm9wcGVkOwkvKiBwYWNrZXRzIHJlcG9ydGVkIGRyb3BwZWQgYnkgL3Byb2MvbmV0L2RldiAqLworCWxvbmcgbG9uZyBzeXNmc19kcm9wcGVkOyAvKiBwYWNrZXRzIHJlcG9ydGVkIGRyb3BwZWQgYnkgL3N5cy9jbGFzcy9uZXQve2lmX25hbWV9L3N0YXRpc3RpY3Mvcnhfe21pc3NlZCxmaWZvfV9lcnJvcnMgKi8KIAlzdHJ1Y3QgcGNhcF9zdGF0IHN0YXQ7CiAKIAljaGFyCSpkZXZpY2U7CS8qIGRldmljZSBuYW1lICovCkBAIC0zMDcsMTAgKzE3NiwxMCBAQAogCWludAlibG9ja3NfdG9fZmlsdGVyX2luX3VzZXJsYW5kOwogCWludAltdXN0X2RvX29uX2Nsb3NlOyAvKiBzdHVmZiB3ZSBtdXN0IGRvIHdoZW4gd2UgY2xvc2UgKi8KIAlpbnQJdGltZW91dDsJLyogdGltZW91dCBmb3IgYnVmZmVyaW5nICovCi0JaW50CXNvY2tfcGFja2V0OwkvKiB1c2luZyBMaW51eCAyLjAgY29tcGF0aWJsZSBpbnRlcmZhY2UgKi8KIAlpbnQJY29va2VkOwkJLyogdXNpbmcgU09DS19ER1JBTSByYXRoZXIgdGhhbiBTT0NLX1JBVyAqLwogCWludAlpZmluZGV4OwkvKiBpbnRlcmZhY2UgaW5kZXggb2YgZGV2aWNlIHdlJ3JlIGJvdW5kIHRvICovCiAJaW50CWxvX2lmaW5kZXg7CS8qIGludGVyZmFjZSBpbmRleCBvZiB0aGUgbG9vcGJhY2sgZGV2aWNlICovCisJaW50CW5ldGRvd247CS8qIHdlIGdvdCBhbiBFTkVURE9XTiBhbmQgaGF2ZW4ndCByZXNvbHZlZCBpdCAqLwogCWJwZl91X2ludDMyIG9sZG1vZGU7CS8qIG1vZGUgdG8gcmVzdG9yZSB3aGVuIHR1cm5pbmcgbW9uaXRvciBtb2RlIG9mZiAqLwogCWNoYXIJKm1vbmRldmljZTsJLyogbWFjODAyMTEgbW9uaXRvciBkZXZpY2Ugd2UgY3JlYXRlZCAqLwogCXVfY2hhcgkqbW1hcGJ1ZjsJLyogbWVtb3J5LW1hcHBlZCByZWdpb24gcG9pbnRlciAqLwpAQCAtMzI0LDkzICsxOTMsNTQgQEAKIAl1bnNpZ25lZCBjaGFyICpjdXJyZW50X3BhY2tldDsgLyogQ3VycmVudCBwYWNrZXQgd2l0aGluIHRoZSBUUEFDS0VUX1YzIGJsb2NrLiBNb3ZlIHRvIG5leHQgYmxvY2sgaWYgTlVMTC4gKi8KIAlpbnQgcGFja2V0c19sZWZ0OyAvKiBVbmhhbmRsZWQgcGFja2V0cyBsZWZ0IHdpdGhpbiB0aGUgYmxvY2sgZnJvbSBwcmV2aW91cyBjYWxsIHRvIHBjYXBfcmVhZF9saW51eF9tbWFwX3YzIGluIGNhc2Ugb2YgVFBBQ0tFVF9WMy4gKi8KICNlbmRpZgorCWludCBwb2xsX2JyZWFrbG9vcF9mZDsgLyogZmQgdG8gYW4gZXZlbnRmZCB0byBicmVhayBmcm9tIGJsb2NraW5nIG9wZXJhdGlvbnMgKi8KIH07CiAKIC8qCiAgKiBTdHVmZiB0byBkbyB3aGVuIHdlIGNsb3NlLgogICovCi0jZGVmaW5lIE1VU1RfQ0xFQVJfUFJPTUlTQwkweDAwMDAwMDAxCS8qIGNsZWFyIHByb21pc2N1b3VzIG1vZGUgKi8KLSNkZWZpbmUgTVVTVF9DTEVBUl9SRk1PTgkweDAwMDAwMDAyCS8qIGNsZWFyIHJmbW9uIChtb25pdG9yKSBtb2RlICovCi0jZGVmaW5lIE1VU1RfREVMRVRFX01PTklGCTB4MDAwMDAwMDQJLyogZGVsZXRlIG1vbml0b3ItbW9kZSBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgTVVTVF9DTEVBUl9SRk1PTgkweDAwMDAwMDAxCS8qIGNsZWFyIHJmbW9uIChtb25pdG9yKSBtb2RlICovCisjZGVmaW5lIE1VU1RfREVMRVRFX01PTklGCTB4MDAwMDAwMDIJLyogZGVsZXRlIG1vbml0b3ItbW9kZSBpbnRlcmZhY2UgKi8KIAogLyoKICAqIFByb3RvdHlwZXMgZm9yIGludGVybmFsIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcy4KICAqLwogc3RhdGljIGludCBnZXRfaWZfZmxhZ3MoY29uc3QgY2hhciAqLCBicGZfdV9pbnQzMiAqLCBjaGFyICopOwotc3RhdGljIGludCBpc193aWZpKGludCwgY29uc3QgY2hhciAqKTsKLXN0YXRpYyB2b2lkIG1hcF9hcnBocmRfdG9fZGx0KHBjYXBfdCAqLCBpbnQsIGludCwgY29uc3QgY2hhciAqLCBpbnQpOwotI2lmZGVmIEhBVkVfUEZfUEFDS0VUX1NPQ0tFVFMKLXN0YXRpYyBzaG9ydCBpbnQgbWFwX3BhY2tldF90eXBlX3RvX3NsbF90eXBlKHNob3J0IGludCk7Ci0jZW5kaWYKK3N0YXRpYyBpbnQgaXNfd2lmaShjb25zdCBjaGFyICopOworc3RhdGljIHZvaWQgbWFwX2FycGhyZF90b19kbHQocGNhcF90ICosIGludCwgY29uc3QgY2hhciAqLCBpbnQpOwogc3RhdGljIGludCBwY2FwX2FjdGl2YXRlX2xpbnV4KHBjYXBfdCAqKTsKLXN0YXRpYyBpbnQgYWN0aXZhdGVfb2xkKHBjYXBfdCAqKTsKLXN0YXRpYyBpbnQgYWN0aXZhdGVfbmV3KHBjYXBfdCAqKTsKLXN0YXRpYyBpbnQgYWN0aXZhdGVfbW1hcChwY2FwX3QgKiwgaW50ICopOworc3RhdGljIGludCBhY3RpdmF0ZV9wZl9wYWNrZXQocGNhcF90ICosIGludCk7CitzdGF0aWMgaW50IHNldHVwX21tYXBwZWQocGNhcF90ICosIGludCAqKTsKIHN0YXRpYyBpbnQgcGNhcF9jYW5fc2V0X3JmbW9uX2xpbnV4KHBjYXBfdCAqKTsKLXN0YXRpYyBpbnQgcGNhcF9yZWFkX2xpbnV4KHBjYXBfdCAqLCBpbnQsIHBjYXBfaGFuZGxlciwgdV9jaGFyICopOwotc3RhdGljIGludCBwY2FwX3JlYWRfcGFja2V0KHBjYXBfdCAqLCBwY2FwX2hhbmRsZXIsIHVfY2hhciAqKTsKLXN0YXRpYyBpbnQgcGNhcF9pbmplY3RfbGludXgocGNhcF90ICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKK3N0YXRpYyBpbnQgcGNhcF9pbmplY3RfbGludXgocGNhcF90ICosIGNvbnN0IHZvaWQgKiwgaW50KTsKIHN0YXRpYyBpbnQgcGNhcF9zdGF0c19saW51eChwY2FwX3QgKiwgc3RydWN0IHBjYXBfc3RhdCAqKTsKIHN0YXRpYyBpbnQgcGNhcF9zZXRmaWx0ZXJfbGludXgocGNhcF90ICosIHN0cnVjdCBicGZfcHJvZ3JhbSAqKTsKIHN0YXRpYyBpbnQgcGNhcF9zZXRkaXJlY3Rpb25fbGludXgocGNhcF90ICosIHBjYXBfZGlyZWN0aW9uX3QpOwogc3RhdGljIGludCBwY2FwX3NldF9kYXRhbGlua19saW51eChwY2FwX3QgKiwgaW50KTsKIHN0YXRpYyB2b2lkIHBjYXBfY2xlYW51cF9saW51eChwY2FwX3QgKik7CiAKLS8qCi0gKiBUaGlzIGlzIHdoYXQgdGhlIGhlYWRlciBzdHJ1Y3R1cmUgbG9va3MgbGlrZSBpbiBhIDY0LWJpdCBrZXJuZWw7Ci0gKiB3ZSB1c2UgdGhpcywgcmF0aGVyIHRoYW4gc3RydWN0IHRwYWNrZXRfaGRyLCBpZiB3ZSdyZSB1c2luZwotICogVFBBQ0tFVF9WMSBpbiAzMi1iaXQgY29kZSBydW5uaW5nIG9uIGEgNjQtYml0IGtlcm5lbC4KLSAqLwotc3RydWN0IHRwYWNrZXRfaGRyXzY0IHsKLQl1aW50NjRfdAl0cF9zdGF0dXM7Ci0JdW5zaWduZWQgaW50CXRwX2xlbjsKLQl1bnNpZ25lZCBpbnQJdHBfc25hcGxlbjsKLQl1bnNpZ25lZCBzaG9ydAl0cF9tYWM7Ci0JdW5zaWduZWQgc2hvcnQJdHBfbmV0OwotCXVuc2lnbmVkIGludAl0cF9zZWM7Ci0JdW5zaWduZWQgaW50CXRwX3VzZWM7Ci19OwotCi0vKgotICogV2UgdXNlIHRoaXMgaW50ZXJuYWxseSBhcyB0aGUgdHBhY2tldCB2ZXJzaW9uIGZvciBUUEFDS0VUX1YxIGluCi0gKiAzMi1iaXQgY29kZSBvbiBhIDY0LWJpdCBrZXJuZWwuCi0gKi8KLSNkZWZpbmUgVFBBQ0tFVF9WMV82NCA5OQotCiB1bmlvbiB0aGRyIHsKLQlzdHJ1Y3QgdHBhY2tldF9oZHIJCSpoMTsKLQlzdHJ1Y3QgdHBhY2tldF9oZHJfNjQJCSpoMV82NDsKLSNpZmRlZiBIQVZFX1RQQUNLRVQyCiAJc3RydWN0IHRwYWNrZXQyX2hkcgkJKmgyOwotI2VuZGlmCiAjaWZkZWYgSEFWRV9UUEFDS0VUMwogCXN0cnVjdCB0cGFja2V0X2Jsb2NrX2Rlc2MJKmgzOwogI2VuZGlmCi0Jdm9pZAkJCQkqcmF3OworCXVfY2hhcgkJCQkqcmF3OwogfTsKIAotI2lmZGVmIEhBVkVfUEFDS0VUX1JJTkcKLSNkZWZpbmUgUklOR19HRVRfRlJBTUVfQVQoaCwgb2Zmc2V0KSAoKCh1bmlvbiB0aGRyICoqKWgtPmJ1ZmZlcilbKG9mZnNldCldKQorI2RlZmluZSBSSU5HX0dFVF9GUkFNRV9BVChoLCBvZmZzZXQpICgoKHVfY2hhciAqKiloLT5idWZmZXIpWyhvZmZzZXQpXSkKICNkZWZpbmUgUklOR19HRVRfQ1VSUkVOVF9GUkFNRShoKSBSSU5HX0dFVF9GUkFNRV9BVChoLCBoLT5vZmZzZXQpCiAKIHN0YXRpYyB2b2lkIGRlc3Ryb3lfcmluZyhwY2FwX3QgKmhhbmRsZSk7CiBzdGF0aWMgaW50IGNyZWF0ZV9yaW5nKHBjYXBfdCAqaGFuZGxlLCBpbnQgKnN0YXR1cyk7CiBzdGF0aWMgaW50IHByZXBhcmVfdHBhY2tldF9zb2NrZXQocGNhcF90ICpoYW5kbGUpOwotc3RhdGljIHZvaWQgcGNhcF9jbGVhbnVwX2xpbnV4X21tYXAocGNhcF90ICopOwotc3RhdGljIGludCBwY2FwX3JlYWRfbGludXhfbW1hcF92MShwY2FwX3QgKiwgaW50LCBwY2FwX2hhbmRsZXIgLCB1X2NoYXIgKik7Ci1zdGF0aWMgaW50IHBjYXBfcmVhZF9saW51eF9tbWFwX3YxXzY0KHBjYXBfdCAqLCBpbnQsIHBjYXBfaGFuZGxlciAsIHVfY2hhciAqKTsKLSNpZmRlZiBIQVZFX1RQQUNLRVQyCiBzdGF0aWMgaW50IHBjYXBfcmVhZF9saW51eF9tbWFwX3YyKHBjYXBfdCAqLCBpbnQsIHBjYXBfaGFuZGxlciAsIHVfY2hhciAqKTsKLSNlbmRpZgogI2lmZGVmIEhBVkVfVFBBQ0tFVDMKIHN0YXRpYyBpbnQgcGNhcF9yZWFkX2xpbnV4X21tYXBfdjMocGNhcF90ICosIGludCwgcGNhcF9oYW5kbGVyICwgdV9jaGFyICopOwogI2VuZGlmCi1zdGF0aWMgaW50IHBjYXBfc2V0ZmlsdGVyX2xpbnV4X21tYXAocGNhcF90ICosIHN0cnVjdCBicGZfcHJvZ3JhbSAqKTsKLXN0YXRpYyBpbnQgcGNhcF9zZXRub25ibG9ja19tbWFwKHBjYXBfdCAqcCwgaW50IG5vbmJsb2NrKTsKLXN0YXRpYyBpbnQgcGNhcF9nZXRub25ibG9ja19tbWFwKHBjYXBfdCAqcCk7Ci1zdGF0aWMgdm9pZCBwY2FwX29uZXNob3RfbW1hcCh1X2NoYXIgKnVzZXIsIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqaCwKK3N0YXRpYyBpbnQgcGNhcF9zZXRub25ibG9ja19saW51eChwY2FwX3QgKnAsIGludCBub25ibG9jayk7CitzdGF0aWMgaW50IHBjYXBfZ2V0bm9uYmxvY2tfbGludXgocGNhcF90ICpwKTsKK3N0YXRpYyB2b2lkIHBjYXBfb25lc2hvdF9saW51eCh1X2NoYXIgKnVzZXIsIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqaCwKICAgICBjb25zdCB1X2NoYXIgKmJ5dGVzKTsKLSNlbmRpZgogCiAvKgogICogSW4gcHJlLTMuMCBrZXJuZWxzLCB0aGUgdHBfdmxhbl90Y2kgZmllbGQgaXMgc2V0IHRvIHdoYXRldmVyIHRoZQpAQCAtNDU5LDM0ICsyODksMzAgQEAKICNlbmRpZgogCiAvKgorICogUmVxdWlyZWQgc2VsZWN0IHRpbWVvdXQgaWYgd2UncmUgcG9sbGluZyBmb3IgYW4gImludGVyZmFjZSBkaXNhcHBlYXJlZCIKKyAqIGluZGljYXRpb24gLSAxIG1pbGxpc2Vjb25kLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHRpbWV2YWwgbmV0ZG93bl90aW1lb3V0ID0geworCTAsIDEwMDAJCS8qIDEwMDAgbWljcm9zZWNvbmRzID0gMSBtaWxsaXNlY29uZCAqLworfTsKKworLyoKICAqIFdyYXAgc29tZSBpb2N0bCBjYWxscwogICovCi0jaWZkZWYgSEFWRV9QRl9QQUNLRVRfU09DS0VUUwogc3RhdGljIGludAlpZmFjZV9nZXRfaWQoaW50IGZkLCBjb25zdCBjaGFyICpkZXZpY2UsIGNoYXIgKmVidWYpOwotI2VuZGlmIC8qIEhBVkVfUEZfUEFDS0VUX1NPQ0tFVFMgKi8KIHN0YXRpYyBpbnQJaWZhY2VfZ2V0X210dShpbnQgZmQsIGNvbnN0IGNoYXIgKmRldmljZSwgY2hhciAqZWJ1Zik7CiBzdGF0aWMgaW50IAlpZmFjZV9nZXRfYXJwdHlwZShpbnQgZmQsIGNvbnN0IGNoYXIgKmRldmljZSwgY2hhciAqZWJ1Zik7Ci0jaWZkZWYgSEFWRV9QRl9QQUNLRVRfU09DS0VUUwogc3RhdGljIGludCAJaWZhY2VfYmluZChpbnQgZmQsIGludCBpZmluZGV4LCBjaGFyICplYnVmLCBpbnQgcHJvdG9jb2wpOwotI2lmZGVmIElXX01PREVfTU9OSVRPUgotc3RhdGljIGludAloYXNfd2V4dChpbnQgc29ja19mZCwgY29uc3QgY2hhciAqZGV2aWNlLCBjaGFyICplYnVmKTsKLSNlbmRpZiAvKiBJV19NT0RFX01PTklUT1IgKi8KIHN0YXRpYyBpbnQJZW50ZXJfcmZtb25fbW9kZShwY2FwX3QgKmhhbmRsZSwgaW50IHNvY2tfZmQsCiAgICAgY29uc3QgY2hhciAqZGV2aWNlKTsKLSNlbmRpZiAvKiBIQVZFX1BGX1BBQ0tFVF9TT0NLRVRTICovCiAjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVF9UU1RBTVBfSCkgJiYgZGVmaW5lZChQQUNLRVRfVElNRVNUQU1QKQogc3RhdGljIGludAlpZmFjZV9ldGh0b29sX2dldF90c19pbmZvKGNvbnN0IGNoYXIgKmRldmljZSwgcGNhcF90ICpoYW5kbGUsCiAgICAgY2hhciAqZWJ1Zik7CiAjZW5kaWYKLSNpZmRlZiBIQVZFX1BBQ0tFVF9SSU5HCiBzdGF0aWMgaW50CWlmYWNlX2dldF9vZmZsb2FkKHBjYXBfdCAqaGFuZGxlKTsKLSNlbmRpZgotc3RhdGljIGludCAJaWZhY2VfYmluZF9vbGQoaW50IGZkLCBjb25zdCBjaGFyICpkZXZpY2UsIGNoYXIgKmVidWYpOwogCi0jaWZkZWYgU09fQVRUQUNIX0ZJTFRFUgotc3RhdGljIGludAlmaXhfcHJvZ3JhbShwY2FwX3QgKmhhbmRsZSwgc3RydWN0IHNvY2tfZnByb2cgKmZjb2RlLAotICAgIGludCBpc19tYXBwZWQpOwotc3RhdGljIGludAlmaXhfb2Zmc2V0KHN0cnVjdCBicGZfaW5zbiAqcCk7CitzdGF0aWMgaW50CWZpeF9wcm9ncmFtKHBjYXBfdCAqaGFuZGxlLCBzdHJ1Y3Qgc29ja19mcHJvZyAqZmNvZGUpOworc3RhdGljIGludAlmaXhfb2Zmc2V0KHBjYXBfdCAqaGFuZGxlLCBzdHJ1Y3QgYnBmX2luc24gKnApOwogc3RhdGljIGludAlzZXRfa2VybmVsX2ZpbHRlcihwY2FwX3QgKmhhbmRsZSwgc3RydWN0IHNvY2tfZnByb2cgKmZjb2RlKTsKIHN0YXRpYyBpbnQJcmVzZXRfa2VybmVsX2ZpbHRlcihwY2FwX3QgKmhhbmRsZSk7CiAKQEAgLTQ5NCwxNCArMzIwLDE1IEBACiAJPSBCUEZfU1RNVChCUEZfUkVUIHwgQlBGX0ssIDApOwogc3RhdGljIHN0cnVjdCBzb2NrX2Zwcm9nCXRvdGFsX2Zjb2RlCiAJPSB7IDEsICZ0b3RhbF9pbnNuIH07Ci0jZW5kaWYgLyogU09fQVRUQUNIX0ZJTFRFUiAqLworCitzdGF0aWMgaW50CWlmYWNlX2RzYV9nZXRfcHJvdG9faW5mbyhjb25zdCBjaGFyICpkZXZpY2UsIHBjYXBfdCAqaGFuZGxlKTsKIAogcGNhcF90ICoKIHBjYXBfY3JlYXRlX2ludGVyZmFjZShjb25zdCBjaGFyICpkZXZpY2UsIGNoYXIgKmVidWYpCiB7CiAJcGNhcF90ICpoYW5kbGU7CiAKLQloYW5kbGUgPSBwY2FwX2NyZWF0ZV9jb21tb24oZWJ1Ziwgc2l6ZW9mIChzdHJ1Y3QgcGNhcF9saW51eCkpOworCWhhbmRsZSA9IFBDQVBfQ1JFQVRFX0NPTU1PTihlYnVmLCBzdHJ1Y3QgcGNhcF9saW51eCk7CiAJaWYgKGhhbmRsZSA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtNTE4LDcgKzM0NSw2IEBACiAJfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFNJT0NHU1RBTVBOUykgJiYgZGVmaW5lZChTT19USU1FU1RBTVBOUykKIAkvKgogCSAqIFdlIGNsYWltIHRoYXQgd2Ugc3VwcG9ydCBtaWNyb3NlY29uZCBhbmQgbmFub3NlY29uZCB0aW1lCiAJICogc3RhbXBzLgpAQCAtNTI3LDcgKzM1Myw2IEBACiAJICogbWljcm9zZWNvbmQgb3IgbmFub3NlY29uZCB0aW1lIHN0YW1wcyBvbiBhcmJpdHJhcnkKIAkgKiBhZGFwdGVycz8KIAkgKi8KLQloYW5kbGUtPnRzdGFtcF9wcmVjaXNpb25fY291bnQgPSAyOwogCWhhbmRsZS0+dHN0YW1wX3ByZWNpc2lvbl9saXN0ID0gbWFsbG9jKDIgKiBzaXplb2YodV9pbnQpKTsKIAlpZiAoaGFuZGxlLT50c3RhbXBfcHJlY2lzaW9uX2xpc3QgPT0gTlVMTCkgewogCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsCkBAIC01MzcsMTYgKzM2MiwxOSBAQAogCX0KIAloYW5kbGUtPnRzdGFtcF9wcmVjaXNpb25fbGlzdFswXSA9IFBDQVBfVFNUQU1QX1BSRUNJU0lPTl9NSUNSTzsKIAloYW5kbGUtPnRzdGFtcF9wcmVjaXNpb25fbGlzdFsxXSA9IFBDQVBfVFNUQU1QX1BSRUNJU0lPTl9OQU5POwotI2VuZGlmIC8qIGRlZmluZWQoU0lPQ0dTVEFNUE5TKSAmJiBkZWZpbmVkKFNPX1RJTUVTVEFNUE5TKSAqLworCWhhbmRsZS0+dHN0YW1wX3ByZWNpc2lvbl9jb3VudCA9IDI7CisKKwlzdHJ1Y3QgcGNhcF9saW51eCAqaGFuZGxlcCA9IGhhbmRsZS0+cHJpdjsKKwloYW5kbGVwLT5wb2xsX2JyZWFrbG9vcF9mZCA9IGV2ZW50ZmQoMCwgRUZEX05PTkJMT0NLKTsKIAogCXJldHVybiBoYW5kbGU7CiB9CiAKICNpZmRlZiBIQVZFX0xJQk5MCiAvKgotICogSWYgaW50ZXJmYWNlIHtpZn0gaXMgYSBtYWM4MDIxMSBkcml2ZXIsIHRoZSBmaWxlCi0gKiAvc3lzL2NsYXNzL25ldC97aWZ9L3BoeTgwMjExIGlzIGEgc3ltbGluayB0bwotICogL3N5cy9jbGFzcy9pZWVlODAyMTEve3BoeWRldn0sIGZvciBzb21lIHtwaHlkZXZ9LgorICogSWYgaW50ZXJmYWNlIHtpZl9uYW1lfSBpcyBhIG1hYzgwMjExIGRyaXZlciwgdGhlIGZpbGUKKyAqIC9zeXMvY2xhc3MvbmV0L3tpZl9uYW1lfS9waHk4MDIxMSBpcyBhIHN5bWxpbmsgdG8KKyAqIC9zeXMvY2xhc3MvaWVlZTgwMjExL3twaHlkZXZfbmFtZX0sIGZvciBzb21lIHtwaHlkZXZfbmFtZX0uCiAgKgogICogT24gRmVkb3JhIDksIHdpdGggYSAyLjYuMjYuMy0yOSBrZXJuZWwsIG15IFp5ZGFzIHN0aWNrLCBhdAogICogbGVhc3QsIGhhcyBhICJ3bWFzdGVyMCIgZGV2aWNlIGFuZCBhICJ3bGFuMCIgZGV2aWNlOyB0aGUKQEAgLTU1NywyNCArMzg1LDMwIEBACiAgKiBhaXJtb24tbmcgc2VhcmNoZXMgdGhyb3VnaCAvc3lzL2NsYXNzL25ldCBmb3IgZGV2aWNlcyBuYW1lZAogICogbW9uTiwgc3RhcnRpbmcgd2l0aCBtb24wOyBhcyBzb29uIGFzIG9uZSAqZG9lc24ndCogZXhpc3QsCiAgKiBpdCBjaG9vc2VzIHRoYXQgYXMgdGhlIG1vbml0b3IgZGV2aWNlIG5hbWUuICBJZiB0aGUgIml3IgotICogY29tbWFuZCBleGlzdHMsIGl0IGRvZXMgIml3IGRldiB7aWZ9IGludGVyZmFjZSBhZGQge21vbmlmfQotICogdHlwZSBtb25pdG9yIiwgd2hlcmUge21vbmlmfSBpcyB0aGUgbW9uaXRvciBkZXZpY2UuICBJdAotICogdGhlbiAoc2lnaCkgc2xlZXBzIC4xIHNlY29uZCwgYW5kIHRoZW4gY29uZmlndXJlcyB0aGUKLSAqIGRldmljZSB1cC4gIE90aGVyd2lzZSwgaWYgL3N5cy9jbGFzcy9pZWVlODAyMTEve3BoeWRldn0vYWRkX2lmYWNlCi0gKiBpcyBhIGZpbGUsIGl0IHdyaXRlcyB7bW9uZGV2fSwgd2l0aG91dCBhIG5ld2xpbmUsIHRvIHRoYXQgZmlsZSwKLSAqIGFuZCBhZ2FpbiAoc2lnaCkgc2xlZXBzIC4xIHNlY29uZCwgYW5kIHRoZW4gaXdjb25maWcncyB0aGF0Ci0gKiBkZXZpY2UgaW50byBtb25pdG9yIG1vZGUgYW5kIGNvbmZpZ3VyZXMgaXQgdXAuICBPdGhlcndpc2UsCi0gKiB5b3UgY2FuJ3QgZG8gbW9uaXRvciBtb2RlLgorICogY29tbWFuZCBleGlzdHMsIGl0IGRvZXMKKyAqCisgKiAgICBpdyBkZXYge2lmX25hbWV9IGludGVyZmFjZSBhZGQge21vbmlmX25hbWV9IHR5cGUgbW9uaXRvcgorICoKKyAqIHdoZXJlIHttb25pZl9uYW1lfSBpcyB0aGUgbW9uaXRvciBkZXZpY2UuICBJdCB0aGVuIChzaWdoKSBzbGVlcHMKKyAqIC4xIHNlY29uZCwgYW5kIHRoZW4gY29uZmlndXJlcyB0aGUgZGV2aWNlIHVwLiAgT3RoZXJ3aXNlLCBpZgorICogL3N5cy9jbGFzcy9pZWVlODAyMTEve3BoeWRldl9uYW1lfS9hZGRfaWZhY2UgaXMgYSBmaWxlLCBpdCB3cml0ZXMKKyAqIHttb25kZXZfbmFtZX0sIHdpdGhvdXQgYSBuZXdsaW5lLCB0byB0aGF0IGZpbGUsIGFuZCBhZ2FpbiAoc2lnaCkKKyAqIHNsZWVwcyAuMSBzZWNvbmQsIGFuZCB0aGVuIGl3Y29uZmlnJ3MgdGhhdCBkZXZpY2UgaW50byBtb25pdG9yCisgKiBtb2RlIGFuZCBjb25maWd1cmVzIGl0IHVwLiAgT3RoZXJ3aXNlLCB5b3UgY2FuJ3QgZG8gbW9uaXRvciBtb2RlLgogICoKICAqIEFsbCB0aGVzZSBkZXZpY2VzIGFyZSAiZ2x1ZWQiIHRvZ2V0aGVyIGJ5IGhhdmluZyB0aGUKLSAqIC9zeXMvY2xhc3MvbmV0L3tkZXZpY2V9L3BoeTgwMjExIGxpbmtzIHBvaW50aW5nIHRvIHRoZSBzYW1lCisgKiAvc3lzL2NsYXNzL25ldC97aWZfbmFtZX0vcGh5ODAyMTEgbGlua3MgcG9pbnRpbmcgdG8gdGhlIHNhbWUKICAqIHBsYWNlLCBzbywgZ2l2ZW4gYSB3bWFzdGVyLCB3bGFuLCBvciBtb24gZGV2aWNlLCB5b3UgY2FuCiAgKiBmaW5kIHRoZSBvdGhlciBkZXZpY2VzIGJ5IGxvb2tpbmcgZm9yIGRldmljZXMgd2l0aAogICogdGhlIHNhbWUgcGh5ODAyMTEgbGluay4KICAqCiAgKiBUbyB0dXJuIG1vbml0b3IgbW9kZSBvZmYsIGRlbGV0ZSB0aGUgbW9uaXRvciBpbnRlcmZhY2UsCi0gKiBlaXRoZXIgd2l0aCAiaXcgZGV2IHttb25pZn0gaW50ZXJmYWNlIGRlbCIgb3IgYnkgc2VuZGluZwotICoge21vbmlmfSwgd2l0aCBubyBOTCwgZG93biAvc3lzL2NsYXNzL2llZWU4MDIxMS97cGh5ZGV2fS9yZW1vdmVfaWZhY2UKKyAqIGVpdGhlciB3aXRoCisgKgorICogICAgaXcgZGV2IHttb25pZl9uYW1lfSBpbnRlcmZhY2UgZGVsCisgKgorICogb3IgYnkgc2VuZGluZyB7bW9uaWZfbmFtZX0sIHdpdGggbm8gTkwsIGRvd24KKyAqIC9zeXMvY2xhc3MvaWVlZTgwMjExL3twaHlkZXZfbmFtZX0vcmVtb3ZlX2lmYWNlCiAgKgogICogTm90ZTogaWYgeW91IHRyeSB0byBjcmVhdGUgYSBtb25pdG9yIGRldmljZSBuYW1lZCAibW9uTiIsIGFuZAogICogdGhlcmUncyBhbHJlYWR5IGEgIm1vbk4iIGRldmljZSwgaXQgZmFpbHMsIGFzIGxlYXN0IHdpdGgKQEAgLTYwMiw3ICs0MzYsNyBAQAogCSAqIEdlbmVyYXRlIHRoZSBwYXRoIHN0cmluZyBmb3IgdGhlIHN5bWxpbmsgdG8gdGhlIHBoeXNpY2FsIGRldmljZS4KIAkgKi8KIAlpZiAoYXNwcmludGYoJnBhdGhzdHIsICIvc3lzL2NsYXNzL25ldC8lcy9waHk4MDIxMSIsIGRldmljZSkgPT0gLTEpIHsKLQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICAiJXM6IENhbid0IGdlbmVyYXRlIHBhdGggbmFtZSBzdHJpbmcgZm9yIC9zeXMvY2xhc3MvbmV0IGRldmljZSIsCiAJCSAgICBkZXZpY2UpOwogCQlyZXR1cm4gUENBUF9FUlJPUjsKQEAgLTYyNywzOSArNDYxLDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotI2lmZGVmIEhBVkVfTElCTkxfU09DS0VUUwotI2RlZmluZSBnZXRfbmxfZXJybXNnCW5sX2dldGVycm9yCi0jZWxzZQotLyogbGlibmwgMi54IGNvbXBhdGliaWxpdHkgY29kZSAqLwotCi0jZGVmaW5lIG5sX3NvY2sgbmxfaGFuZGxlCi0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG5sX2hhbmRsZSAqCi1ubF9zb2NrZXRfYWxsb2Modm9pZCkKLXsKLQlyZXR1cm4gbmxfaGFuZGxlX2FsbG9jKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotbmxfc29ja2V0X2ZyZWUoc3RydWN0IG5sX2hhbmRsZSAqaCkKLXsKLQlubF9oYW5kbGVfZGVzdHJveShoKTsKLX0KLQotI2RlZmluZSBnZXRfbmxfZXJybXNnCXN0cmVycm9yCi0KLXN0YXRpYyBpbmxpbmUgaW50Ci1fX2dlbmxfY3RybF9hbGxvY19jYWNoZShzdHJ1Y3QgbmxfaGFuZGxlICpoLCBzdHJ1Y3QgbmxfY2FjaGUgKipjYWNoZSkKLXsKLQlzdHJ1Y3QgbmxfY2FjaGUgKnRtcCA9IGdlbmxfY3RybF9hbGxvY19jYWNoZShoKTsKLQlpZiAoIXRtcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JKmNhY2hlID0gdG1wOwotCXJldHVybiAwOwotfQotI2RlZmluZSBnZW5sX2N0cmxfYWxsb2NfY2FjaGUgX19nZW5sX2N0cmxfYWxsb2NfY2FjaGUKLSNlbmRpZiAvKiAhSEFWRV9MSUJOTF9TT0NLRVRTICovCi0KIHN0cnVjdCBubDgwMjExX3N0YXRlIHsKIAlzdHJ1Y3Qgbmxfc29jayAqbmxfc29jazsKIAlzdHJ1Y3QgbmxfY2FjaGUgKm5sX2NhY2hlOwpAQCAtNjczLDI4ICs0NzQsMjggQEAKIAogCXN0YXRlLT5ubF9zb2NrID0gbmxfc29ja2V0X2FsbG9jKCk7CiAJaWYgKCFzdGF0ZS0+bmxfc29jaykgewotCQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIG5ldGxpbmsgaGFuZGxlIiwgZGV2aWNlKTsKIAkJcmV0dXJuIFBDQVBfRVJST1I7CiAJfQogCiAJaWYgKGdlbmxfY29ubmVjdChzdGF0ZS0+bmxfc29jaykpIHsKLQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICAiJXM6IGZhaWxlZCB0byBjb25uZWN0IHRvIGdlbmVyaWMgbmV0bGluayIsIGRldmljZSk7CiAJCWdvdG8gb3V0X2hhbmRsZV9kZXN0cm95OwogCX0KIAogCWVyciA9IGdlbmxfY3RybF9hbGxvY19jYWNoZShzdGF0ZS0+bmxfc29jaywgJnN0YXRlLT5ubF9jYWNoZSk7CiAJaWYgKGVyciA8IDApIHsKLQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBnZW5lcmljIG5ldGxpbmsgY2FjaGU6ICVzIiwKLQkJICAgIGRldmljZSwgZ2V0X25sX2Vycm1zZygtZXJyKSk7CisJCSAgICBkZXZpY2UsIG5sX2dldGVycm9yKC1lcnIpKTsKIAkJZ290byBvdXRfaGFuZGxlX2Rlc3Ryb3k7CiAJfQogCiAJc3RhdGUtPm5sODAyMTEgPSBnZW5sX2N0cmxfc2VhcmNoX2J5X25hbWUoc3RhdGUtPm5sX2NhY2hlLCAibmw4MDIxMSIpOwogCWlmICghc3RhdGUtPm5sODAyMTEpIHsKLQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICAiJXM6IG5sODAyMTEgbm90IGZvdW5kIiwgZGV2aWNlKTsKIAkJZ290byBvdXRfY2FjaGVfZnJlZTsKIAl9CkBAIC03MzUsNyArNTM2LDcgQEAKIAogCW1zZyA9IG5sbXNnX2FsbG9jKCk7CiAJaWYgKCFtc2cpIHsKLQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBuZXRsaW5rIG1zZyIsIGRldmljZSk7CiAJCXJldHVybiBQQ0FQX0VSUk9SOwogCX0KQEAgLTc0MywxNiArNTQ0LDE0IEBACiAJZ2VubG1zZ19wdXQobXNnLCAwLCAwLCBnZW5sX2ZhbWlseV9nZXRfaWQoc3RhdGUtPm5sODAyMTEpLCAwLAogCQkgICAgMCwgTkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRSwgMCk7CiAJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfSUZJTkRFWCwgaWZpbmRleCk7CitESUFHX09GRl9OQVJST1dJTkcKIAlOTEFfUFVUX1NUUklORyhtc2csIE5MODAyMTFfQVRUUl9JRk5BTUUsIG1vbmRldmljZSk7CitESUFHX09OX05BUlJPV0lORwogCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0lGVFlQRSwgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUik7CiAKIAllcnIgPSBubF9zZW5kX2F1dG9fY29tcGxldGUoc3RhdGUtPm5sX3NvY2ssIG1zZyk7CiAJaWYgKGVyciA8IDApIHsKLSNpZiBkZWZpbmVkIEhBVkVfTElCTkxfTkxFCiAJCWlmIChlcnIgPT0gLU5MRV9GQUlMVVJFKSB7Ci0jZWxzZQotCQlpZiAoZXJyID09IC1FTkZJTEUpIHsKLSNlbmRpZgogCQkJLyoKIAkJCSAqIERldmljZSBub3QgYXZhaWxhYmxlOyBvdXIgY2FsbGVyIHNob3VsZCBqdXN0CiAJCQkgKiBrZWVwIHRyeWluZy4gIChsaWJubCAyLnggbWFwcyBFTkZJTEUgdG8KQEAgLTc2NywyMCArNTY2LDE2IEBACiAJCQkgKiBSZWFsIGZhaWx1cmUsIG5vdCBqdXN0ICJ0aGF0IGRldmljZSBpcyBub3QKIAkJCSAqIGF2YWlsYWJsZS4KIAkJCSAqLwotCQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCXNucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJICAgICIlczogbmxfc2VuZF9hdXRvX2NvbXBsZXRlIGZhaWxlZCBhZGRpbmcgJXMgaW50ZXJmYWNlOiAlcyIsCi0JCQkgICAgZGV2aWNlLCBtb25kZXZpY2UsIGdldF9ubF9lcnJtc2coLWVycikpOworCQkJICAgIGRldmljZSwgbW9uZGV2aWNlLCBubF9nZXRlcnJvcigtZXJyKSk7CiAJCQlubG1zZ19mcmVlKG1zZyk7CiAJCQlyZXR1cm4gUENBUF9FUlJPUjsKIAkJfQogCX0KIAllcnIgPSBubF93YWl0X2Zvcl9hY2soc3RhdGUtPm5sX3NvY2spOwogCWlmIChlcnIgPCAwKSB7Ci0jaWYgZGVmaW5lZCBIQVZFX0xJQk5MX05MRQogCQlpZiAoZXJyID09IC1OTEVfRkFJTFVSRSkgewotI2Vsc2UKLQkJaWYgKGVyciA9PSAtRU5GSUxFKSB7Ci0jZW5kaWYKIAkJCS8qCiAJCQkgKiBEZXZpY2Ugbm90IGF2YWlsYWJsZTsgb3VyIGNhbGxlciBzaG91bGQganVzdAogCQkJICoga2VlcCB0cnlpbmcuICAobGlibmwgMi54IG1hcHMgRU5GSUxFIHRvCkBAIC03OTUsOSArNTkwLDkgQEAKIAkJCSAqIFJlYWwgZmFpbHVyZSwgbm90IGp1c3QgInRoYXQgZGV2aWNlIGlzIG5vdAogCQkJICogYXZhaWxhYmxlLgogCQkJICovCi0JCQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgICAgIiVzOiBubF93YWl0X2Zvcl9hY2sgZmFpbGVkIGFkZGluZyAlcyBpbnRlcmZhY2U6ICVzIiwKLQkJCSAgICBkZXZpY2UsIG1vbmRldmljZSwgZ2V0X25sX2Vycm1zZygtZXJyKSk7CisJCQkgICAgZGV2aWNlLCBtb25kZXZpY2UsIG5sX2dldGVycm9yKC1lcnIpKTsKIAkJCW5sbXNnX2ZyZWUobXNnKTsKIAkJCXJldHVybiBQQ0FQX0VSUk9SOwogCQl9CkBAIC04MjQsNyArNjE5LDcgQEAKIAlyZXR1cm4gMTsKIAogbmxhX3B1dF9mYWlsdXJlOgotCXBjYXBfc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJICAgICIlczogbmxfcHV0IGZhaWxlZCBhZGRpbmcgJXMgaW50ZXJmYWNlIiwKIAkgICAgZGV2aWNlLCBtb25kZXZpY2UpOwogCW5sbXNnX2ZyZWUobXNnKTsKQEAgLTg0NSw3ICs2NDAsNyBAQAogCiAJbXNnID0gbmxtc2dfYWxsb2MoKTsKIAlpZiAoIW1zZykgewotCQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIG5ldGxpbmsgbXNnIiwgZGV2aWNlKTsKIAkJcmV0dXJuIFBDQVBfRVJST1I7CiAJfQpAQCAtODU2LDE3ICs2NTEsMTcgQEAKIAogCWVyciA9IG5sX3NlbmRfYXV0b19jb21wbGV0ZShzdGF0ZS0+bmxfc29jaywgbXNnKTsKIAlpZiAoZXJyIDwgMCkgewotCQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICIlczogbmxfc2VuZF9hdXRvX2NvbXBsZXRlIGZhaWxlZCBkZWxldGluZyAlcyBpbnRlcmZhY2U6ICVzIiwKLQkJICAgIGRldmljZSwgbW9uZGV2aWNlLCBnZXRfbmxfZXJybXNnKC1lcnIpKTsKKwkJICAgIGRldmljZSwgbW9uZGV2aWNlLCBubF9nZXRlcnJvcigtZXJyKSk7CiAJCW5sbXNnX2ZyZWUobXNnKTsKIAkJcmV0dXJuIFBDQVBfRVJST1I7CiAJfQogCWVyciA9IG5sX3dhaXRfZm9yX2FjayhzdGF0ZS0+bmxfc29jayk7CiAJaWYgKGVyciA8IDApIHsKLQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICAiJXM6IG5sX3dhaXRfZm9yX2FjayBmYWlsZWQgYWRkaW5nICVzIGludGVyZmFjZTogJXMiLAotCQkgICAgZGV2aWNlLCBtb25kZXZpY2UsIGdldF9ubF9lcnJtc2coLWVycikpOworCQkgICAgZGV2aWNlLCBtb25kZXZpY2UsIG5sX2dldGVycm9yKC1lcnIpKTsKIAkJbmxtc2dfZnJlZShtc2cpOwogCQlyZXR1cm4gUENBUF9FUlJPUjsKIAl9CkBAIC04NzgsMTc3ICs2NzMsMTQgQEAKIAlyZXR1cm4gMTsKIAogbmxhX3B1dF9mYWlsdXJlOgotCXBjYXBfc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJICAgICIlczogbmxfcHV0IGZhaWxlZCBkZWxldGluZyAlcyBpbnRlcmZhY2UiLAogCSAgICBkZXZpY2UsIG1vbmRldmljZSk7CiAJbmxtc2dfZnJlZShtc2cpOwogCXJldHVybiBQQ0FQX0VSUk9SOwogfQotCi1zdGF0aWMgaW50Ci1lbnRlcl9yZm1vbl9tb2RlX21hYzgwMjExKHBjYXBfdCAqaGFuZGxlLCBpbnQgc29ja19mZCwgY29uc3QgY2hhciAqZGV2aWNlKQotewotCXN0cnVjdCBwY2FwX2xpbnV4ICpoYW5kbGVwID0gaGFuZGxlLT5wcml2OwotCWludCByZXQ7Ci0JY2hhciBwaHlkZXZfcGF0aFtQQVRIX01BWCsxXTsKLQlzdHJ1Y3Qgbmw4MDIxMV9zdGF0ZSBubHN0YXRlOwotCXN0cnVjdCBpZnJlcSBpZnI7Ci0JdV9pbnQgbjsKLQotCS8qCi0JICogSXMgdGhpcyBhIG1hYzgwMjExIGRldmljZT8KLQkgKi8KLQlyZXQgPSBnZXRfbWFjODAyMTFfcGh5ZGV2KGhhbmRsZSwgZGV2aWNlLCBwaHlkZXZfcGF0aCwgUEFUSF9NQVgpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwkvKiBlcnJvciAqLwotCWlmIChyZXQgPT0gMCkKLQkJcmV0dXJuIDA7CS8qIG5vIGVycm9yLCBidXQgbm90IG1hYzgwMjExIGRldmljZSAqLwotCi0JLyoKLQkgKiBYWFggLSBpcyB0aGlzIGFscmVhZHkgYSBtb25OIGRldmljZT8KLQkgKiBJZiBzbywgd2UncmUgZG9uZS4KLQkgKiBJcyB0aGF0IGRldGVybWluZWQgYnkgb2xkIFdpcmVsZXNzIEV4dGVuc2lvbnMgaW9jdGxzPwotCSAqLwotCi0JLyoKLQkgKiBPSywgaXQncyBhcHBhcmVudGx5IGEgbWFjODAyMTEgZGV2aWNlLgotCSAqIFRyeSB0byBmaW5kIGFuIHVudXNlZCBtb25OIGRldmljZSBmb3IgaXQuCi0JICovCi0JcmV0ID0gbmw4MDIxMV9pbml0KGhhbmRsZSwgJm5sc3RhdGUsIGRldmljZSk7Ci0JaWYgKHJldCAhPSAwKQotCQlyZXR1cm4gcmV0OwotCWZvciAobiA9IDA7IG4gPCBVSU5UX01BWDsgbisrKSB7Ci0JCS8qCi0JCSAqIFRyeSBtb257bn0uCi0JCSAqLwotCQljaGFyIG1vbmRldmljZVszKzEwKzFdOwkvKiBtb257VUlOVF9NQVh9XDAgKi8KLQotCQlwY2FwX3NucHJpbnRmKG1vbmRldmljZSwgc2l6ZW9mIG1vbmRldmljZSwgIm1vbiV1Iiwgbik7Ci0JCXJldCA9IGFkZF9tb25faWYoaGFuZGxlLCBzb2NrX2ZkLCAmbmxzdGF0ZSwgZGV2aWNlLCBtb25kZXZpY2UpOwotCQlpZiAocmV0ID09IDEpIHsKLQkJCS8qCi0JCQkgKiBTdWNjZXNzLiAgV2UgZG9uJ3QgY2xlYW4gdXAgdGhlIGxpYm5sIHN0YXRlCi0JCQkgKiB5ZXQsIGFzIHdlJ2xsIGJlIHVzaW5nIGl0IGxhdGVyLgotCQkJICovCi0JCQlnb3RvIGFkZGVkOwotCQl9Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQkvKgotCQkJICogSGFyZCBmYWlsdXJlLiAgSnVzdCByZXR1cm4gcmV0OyBoYW5kbGUtPmVycmJ1ZgotCQkJICogaGFzIGFscmVhZHkgYmVlbiBzZXQuCi0JCQkgKi8KLQkJCW5sODAyMTFfY2xlYW51cCgmbmxzdGF0ZSk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkgICAgIiVzOiBObyBmcmVlIG1vbk4gaW50ZXJmYWNlcyIsIGRldmljZSk7Ci0Jbmw4MDIxMV9jbGVhbnVwKCZubHN0YXRlKTsKLQlyZXR1cm4gUENBUF9FUlJPUjsKLQotYWRkZWQ6Ci0KLSNpZiAwCi0JLyoKLQkgKiBTbGVlcCBmb3IgLjEgc2Vjb25kcy4KLQkgKi8KLQlkZWxheS50dl9zZWMgPSAwOwotCWRlbGF5LnR2X25zZWMgPSA1MDAwMDAwMDA7Ci0JbmFub3NsZWVwKCZkZWxheSwgTlVMTCk7Ci0jZW5kaWYKLQotCS8qCi0JICogSWYgd2UgaGF2ZW4ndCBhbHJlYWR5IGRvbmUgc28sIGFycmFuZ2UgdG8gaGF2ZQotCSAqICJwY2FwX2Nsb3NlX2FsbCgpIiBjYWxsZWQgd2hlbiB3ZSBleGl0LgotCSAqLwotCWlmICghcGNhcF9kb19hZGRleGl0KGhhbmRsZSkpIHsKLQkJLyoKLQkJICogImF0ZXhpdCgpIiBmYWlsZWQ7IGRvbid0IHB1dCB0aGUgaW50ZXJmYWNlCi0JCSAqIGluIHJmbW9uIG1vZGUsIGp1c3QgZ2l2ZSB1cC4KLQkJICovCi0JCWRlbF9tb25faWYoaGFuZGxlLCBzb2NrX2ZkLCAmbmxzdGF0ZSwgZGV2aWNlLAotCQkgICAgaGFuZGxlcC0+bW9uZGV2aWNlKTsKLQkJbmw4MDIxMV9jbGVhbnVwKCZubHN0YXRlKTsKLQkJcmV0dXJuIFBDQVBfRVJST1I7Ci0JfQotCi0JLyoKLQkgKiBOb3cgY29uZmlndXJlIHRoZSBtb25pdG9yIGludGVyZmFjZSB1cC4KLQkgKi8KLQltZW1zZXQoJmlmciwgMCwgc2l6ZW9mKGlmcikpOwotCXN0cmxjcHkoaWZyLmlmcl9uYW1lLCBoYW5kbGVwLT5tb25kZXZpY2UsIHNpemVvZihpZnIuaWZyX25hbWUpKTsKLQlpZiAoaW9jdGwoc29ja19mZCwgU0lPQ0dJRkZMQUdTLCAmaWZyKSA9PSAtMSkgewotCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkgICAgZXJybm8sICIlczogQ2FuJ3QgZ2V0IGZsYWdzIGZvciAlcyIsIGRldmljZSwKLQkJICAgIGhhbmRsZXAtPm1vbmRldmljZSk7Ci0JCWRlbF9tb25faWYoaGFuZGxlLCBzb2NrX2ZkLCAmbmxzdGF0ZSwgZGV2aWNlLAotCQkgICAgaGFuZGxlcC0+bW9uZGV2aWNlKTsKLQkJbmw4MDIxMV9jbGVhbnVwKCZubHN0YXRlKTsKLQkJcmV0dXJuIFBDQVBfRVJST1I7Ci0JfQotCWlmci5pZnJfZmxhZ3MgfD0gSUZGX1VQfElGRl9SVU5OSU5HOwotCWlmIChpb2N0bChzb2NrX2ZkLCBTSU9DU0lGRkxBR1MsICZpZnIpID09IC0xKSB7Ci0JCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCi0JCSAgICBlcnJubywgIiVzOiBDYW4ndCBzZXQgZmxhZ3MgZm9yICVzIiwgZGV2aWNlLAotCQkgICAgaGFuZGxlcC0+bW9uZGV2aWNlKTsKLQkJZGVsX21vbl9pZihoYW5kbGUsIHNvY2tfZmQsICZubHN0YXRlLCBkZXZpY2UsCi0JCSAgICBoYW5kbGVwLT5tb25kZXZpY2UpOwotCQlubDgwMjExX2NsZWFudXAoJm5sc3RhdGUpOwotCQlyZXR1cm4gUENBUF9FUlJPUjsKLQl9Ci0KLQkvKgotCSAqIFN1Y2Nlc3MuICBDbGVhbiB1cCB0aGUgbGlibmwgc3RhdGUuCi0JICovCi0Jbmw4MDIxMV9jbGVhbnVwKCZubHN0YXRlKTsKLQotCS8qCi0JICogTm90ZSB0aGF0IHdlIGhhdmUgdG8gZGVsZXRlIHRoZSBtb25pdG9yIGRldmljZSB3aGVuIHdlIGNsb3NlCi0JICogdGhlIGhhbmRsZS4KLQkgKi8KLQloYW5kbGVwLT5tdXN0X2RvX29uX2Nsb3NlIHw9IE1VU1RfREVMRVRFX01PTklGOwotCi0JLyoKLQkgKiBBZGQgdGhpcyB0byB0aGUgbGlzdCBvZiBwY2FwcyB0byBjbG9zZSB3aGVuIHdlIGV4aXQuCi0JICovCi0JcGNhcF9hZGRfdG9fcGNhcHNfdG9fY2xvc2UoaGFuZGxlKTsKLQotCXJldHVybiAxOwotfQogI2VuZGlmIC8qIEhBVkVfTElCTkwgKi8KIAotI2lmZGVmIElXX01PREVfTU9OSVRPUgotLyoKLSAqIEJvbmRpbmcgZGV2aWNlcyBtaXNoYW5kbGUgdW5rbm93biBpb2N0bHM7IHRoZXkgZmFpbCB3aXRoIEVOT0RFVgotICogcmF0aGVyIHRoYW4gRU5PVFNVUCwgRU9QTk9UU1VQUCwgb3IgRU5PVFRZLCBzbyBXaXJlbGVzcyBFeHRlbnNpb25zCi0gKiB3aWxsIGZhaWwgd2l0aCBFTk9ERVYgaWYgd2UgdHJ5IHRvIGRvIHRoZW0gb24gYSBib25kaW5nIGRldmljZSwKLSAqIG1ha2luZyB1cyByZXR1cm4gYSAibm8gc3VjaCBkZXZpY2UiIGluZGljYXRpb24gcmF0aGVyIHRoYW4ganVzdAotICogc2F5aW5nICJubyBXaXJlbGVzcyBFeHRlbnNpb25zIi4KLSAqCi0gKiBTbyB3ZSBjaGVjayBmb3IgYm9uZGluZyBkZXZpY2VzLCBpZiB3ZSBjYW4sIGJlZm9yZSB0cnlpbmcgdGhvc2UKLSAqIGlvY3RscywgYnkgdHJ5aW5nIGEgYm9uZGluZyBkZXZpY2UgaW5mb3JtYXRpb24gcXVlcnkgaW9jdGwgdG8gc2VlCi0gKiB3aGV0aGVyIGl0IHN1Y2NlZWRzLgotICovCi1zdGF0aWMgaW50Ci1pc19ib25kaW5nX2RldmljZShpbnQgZmQsIGNvbnN0IGNoYXIgKmRldmljZSkKLXsKLSNpZmRlZiBCT05EX0lORk9fUVVFUllfSU9DVEwKLQlzdHJ1Y3QgaWZyZXEgaWZyOwotCWlmYm9uZCBpZmI7Ci0KLQltZW1zZXQoJmlmciwgMCwgc2l6ZW9mIGlmcik7Ci0Jc3RybGNweShpZnIuaWZyX25hbWUsIGRldmljZSwgc2l6ZW9mIGlmci5pZnJfbmFtZSk7Ci0JbWVtc2V0KCZpZmIsIDAsIHNpemVvZiBpZmIpOwotCWlmci5pZnJfZGF0YSA9IChjYWRkcl90KSZpZmI7Ci0JaWYgKGlvY3RsKGZkLCBCT05EX0lORk9fUVVFUllfSU9DVEwsICZpZnIpID09IDApCi0JCXJldHVybiAxOwkvKiBzdWNjZXNzLCBzbyBpdCdzIGEgYm9uZGluZyBkZXZpY2UgKi8KLSNlbmRpZiAvKiBCT05EX0lORk9fUVVFUllfSU9DVEwgKi8KLQotCXJldHVybiAwOwkvKiBubywgaXQncyBub3QgYSBib25kaW5nIGRldmljZSAqLwotfQotI2VuZGlmIC8qIElXX01PREVfTU9OSVRPUiAqLwotCiBzdGF0aWMgaW50IHBjYXBfcHJvdG9jb2wocGNhcF90ICpoYW5kbGUpCiB7CiAJaW50IHByb3RvY29sOwpAQCAtMTA2NywxMCArNjk5LDYgQEAKIAljaGFyIHBoeWRldl9wYXRoW1BBVEhfTUFYKzFdOwogCWludCByZXQ7CiAjZW5kaWYKLSNpZmRlZiBJV19NT0RFX01PTklUT1IKLQlpbnQgc29ja19mZDsKLQlzdHJ1Y3QgaXdyZXEgaXJlcTsKLSNlbmRpZgogCiAJaWYgKHN0cmNtcChoYW5kbGUtPm9wdC5kZXZpY2UsICJhbnkiKSA9PSAwKSB7CiAJCS8qCkBAIC0xMDg2LDExICs3MTQsNiBAQAogCSAqIHdlJ2xsIGp1c3QgY2hlY2sgd2hldGhlciB0aGUgZGV2aWNlIGFwcGVhcnMgdG8gYmUgYQogCSAqIG1hYzgwMjExIGRldmljZSBhbmQsIGlmIHNvLCBhc3N1bWUgdGhlIGRldmljZSBzdXBwb3J0cwogCSAqIG1vbml0b3IgbW9kZS4KLQkgKgotCSAqIHdtYXN0ZXIgZGV2aWNlcyBkb24ndCBhcHBlYXIgdG8gc3VwcG9ydCB0aGUgV2lyZWxlc3MKLQkgKiBFeHRlbnNpb25zLCBidXQgd2UgY2FuIGNyZWF0ZSBhIG1vbiBkZXZpY2UgZm9yIGEKLQkgKiB3bWFzdGVyIGRldmljZSwgc28gd2UgZG9uJ3QgYm90aGVyIGNoZWNraW5nIHdoZXRoZXIKLQkgKiBhIG1hYzgwMjExIGRldmljZSBzdXBwb3J0cyB0aGUgV2lyZWxlc3MgRXh0ZW5zaW9ucy4KIAkgKi8KIAlyZXQgPSBnZXRfbWFjODAyMTFfcGh5ZGV2KGhhbmRsZSwgaGFuZGxlLT5vcHQuZGV2aWNlLCBwaHlkZXZfcGF0aCwKIAkgICAgUEFUSF9NQVgpOwpAQCAtMTEwMCwxODQgKzcyMyw2OSBAQAogCQlyZXR1cm4gMTsJLyogbWFjODAyMTEgZGV2aWNlICovCiAjZW5kaWYKIAotI2lmZGVmIElXX01PREVfTU9OSVRPUgotCS8qCi0JICogQmxlYWguICBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhbiBpb2N0bCB0byB1c2UgdG8gYXNrCi0JICogd2hldGhlciBhIGRldmljZSBzdXBwb3J0cyBtb25pdG9yIG1vZGU7IHdlJ2xsIGp1c3QgZG8KLQkgKiBTSU9DR0lXTU9ERSBhbmQsIGlmIGl0IHN1Y2NlZWRzLCBhc3N1bWUgdGhlIGRldmljZSBzdXBwb3J0cwotCSAqIG1vbml0b3IgbW9kZS4KLQkgKgotCSAqIE9wZW4gYSBzb2NrZXQgb24gd2hpY2ggdG8gYXR0ZW1wdCB0byBnZXQgdGhlIG1vZGUuCi0JICogKFdlIGFzc3VtZSB0aGF0IGlmIHdlIGhhdmUgV2lyZWxlc3MgRXh0ZW5zaW9ucyBzdXBwb3J0Ci0JICogd2UgYWxzbyBoYXZlIFBGX1BBQ0tFVCBzdXBwb3J0LikKLQkgKi8KLQlzb2NrX2ZkID0gc29ja2V0KFBGX1BBQ0tFVCwgU09DS19SQVcsIHBjYXBfcHJvdG9jb2woaGFuZGxlKSk7Ci0JaWYgKHNvY2tfZmQgPT0gLTEpIHsKLQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJICAgIGVycm5vLCAic29ja2V0Iik7Ci0JCXJldHVybiBQQ0FQX0VSUk9SOwotCX0KLQotCWlmIChpc19ib25kaW5nX2RldmljZShzb2NrX2ZkLCBoYW5kbGUtPm9wdC5kZXZpY2UpKSB7Ci0JCS8qIEl0J3MgYSBib25kaW5nIGRldmljZSwgc28gZG9uJ3QgZXZlbiB0cnkuICovCi0JCWNsb3NlKHNvY2tfZmQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKgotCSAqIEF0dGVtcHQgdG8gZ2V0IHRoZSBjdXJyZW50IG1vZGUuCi0JICovCi0Jc3RybGNweShpcmVxLmlmcl9pZnJuLmlmcm5fbmFtZSwgaGFuZGxlLT5vcHQuZGV2aWNlLAotCSAgICBzaXplb2YgaXJlcS5pZnJfaWZybi5pZnJuX25hbWUpOwotCWlmIChpb2N0bChzb2NrX2ZkLCBTSU9DR0lXTU9ERSwgJmlyZXEpICE9IC0xKSB7Ci0JCS8qCi0JCSAqIFdlbGwsIHdlIGdvdCB0aGUgbW9kZTsgYXNzdW1lIHdlIGNhbiBzZXQgaXQuCi0JCSAqLwotCQljbG9zZShzb2NrX2ZkKTsKLQkJcmV0dXJuIDE7Ci0JfQotCWlmIChlcnJubyA9PSBFTk9ERVYpIHsKLQkJLyogVGhlIGRldmljZSBkb2Vzbid0IGV2ZW4gZXhpc3QuICovCi0JCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCi0JCSAgICBlcnJubywgIlNJT0NHSVdNT0RFIGZhaWxlZCIpOwotCQljbG9zZShzb2NrX2ZkKTsKLQkJcmV0dXJuIFBDQVBfRVJST1JfTk9fU1VDSF9ERVZJQ0U7Ci0JfQotCWNsb3NlKHNvY2tfZmQpOwotI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKIC8qCi0gKiBHcmFicyB0aGUgbnVtYmVyIG9mIGRyb3BwZWQgcGFja2V0cyBieSB0aGUgaW50ZXJmYWNlIGZyb20gL3Byb2MvbmV0L2Rldi4KKyAqIEdyYWJzIHRoZSBudW1iZXIgb2YgbWlzc2VkIHBhY2tldHMgYnkgdGhlIGludGVyZmFjZSBmcm9tCisgKiAvc3lzL2NsYXNzL25ldC97aWZfbmFtZX0vc3RhdGlzdGljcy9yeF97bWlzc2VkLGZpZm99X2Vycm9ycy4KICAqCi0gKiBYWFggLSB3aGF0IGFib3V0IC9zeXMvY2xhc3MvbmV0L3tpbnRlcmZhY2UgbmFtZX0vcnhfKj8gIFRoZXJlIGFyZQotICogaW5kaXZpZHVhbCBkZXZpY2VzIGdpdmluZywgaW4gQVNDSUksIHZhcmlvdXMgcnhfIGFuZCB0eF8gc3RhdGlzdGljcy4KLSAqCi0gKiBPciBjYW4gd2UgZ2V0IHRoZW0gaW4gYmluYXJ5IGZvcm0gZnJvbSBuZXRsaW5rPworICogQ29tcGFyZWQgdG8gL3Byb2MvbmV0L2RldiB0aGlzIGF2b2lkcyBjb3VudGluZyBzb2Z0d2FyZSBkcm9wcywKKyAqIGJ1dCBtYXkgYmUgdW5pbXBsZW1lbnRlZCBhbmQganVzdCByZXR1cm4gMC4KKyAqIFRoZSBhdXRob3IgaGFzIGZvdW5kIG5vIHN0cmFpZ3RoZm9yd2FyZCB3YXkgdG8gY2hlY2sgZm9yIHN1cHBvcnQuCiAgKi8KLXN0YXRpYyBsb25nIGludAotbGludXhfaWZfZHJvcHMoY29uc3QgY2hhciAqIGlmX25hbWUpCi17Ci0JY2hhciBidWZmZXJbNTEyXTsKLQljaGFyICogYnVmcHRyOwotCUZJTEUgKiBmaWxlOwotCWludCBmaWVsZF90b19jb252ZXJ0ID0gMywgaWZfbmFtZV9zeiA9IHN0cmxlbihpZl9uYW1lKTsKLQlsb25nIGludCBkcm9wcGVkX3BrdHMgPSAwOworc3RhdGljIGxvbmcgbG9uZyBpbnQKK2xpbnV4X2dldF9zdGF0KGNvbnN0IGNoYXIgKiBpZl9uYW1lLCBjb25zdCBjaGFyICogc3RhdCkgeworCXNzaXplX3QgYnl0ZXNfcmVhZDsKKwlpbnQgZmQ7CisJY2hhciBidWZmZXJbUEFUSF9NQVhdOwogCi0JZmlsZSA9IGZvcGVuKCIvcHJvYy9uZXQvZGV2IiwgInIiKTsKLQlpZiAoIWZpbGUpCisJc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIi9zeXMvY2xhc3MvbmV0LyVzL3N0YXRpc3RpY3MvJXMiLCBpZl9uYW1lLCBzdGF0KTsKKwlmZCA9IG9wZW4oYnVmZmVyLCBPX1JET05MWSk7CisJaWYgKGZkID09IC0xKQogCQlyZXR1cm4gMDsKIAotCXdoaWxlICghZHJvcHBlZF9wa3RzICYmIGZnZXRzKCBidWZmZXIsIHNpemVvZihidWZmZXIpLCBmaWxlICkpCi0JewotCQkvKiAJc2VhcmNoIGZvciAnYnl0ZXMnIC0tIGlmIGl0cyBpbiB0aGVyZSwgdGhlbgotCQkJdGhhdCBtZWFucyB3ZSBuZWVkIHRvIGdyYWIgdGhlIGZvdXJ0aCBmaWVsZC4gb3RoZXJ3aXNlCi0JCQlncmFiIHRoZSB0aGlyZCBmaWVsZC4gKi8KLQkJaWYgKGZpZWxkX3RvX2NvbnZlcnQgIT0gNCAmJiBzdHJzdHIoYnVmZmVyLCAiYnl0ZXMiKSkKLQkJewotCQkJZmllbGRfdG9fY29udmVydCA9IDQ7Ci0JCQljb250aW51ZTsKLQkJfQorCWJ5dGVzX3JlYWQgPSByZWFkKGZkLCBidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSk7CisJY2xvc2UoZmQpOworCWlmIChieXRlc19yZWFkID09IC0xKQorCQlyZXR1cm4gMDsKKwlidWZmZXJbYnl0ZXNfcmVhZF0gPSAnXDAnOwogCi0JCS8qIGZpbmQgaWZhY2UgYW5kIG1ha2Ugc3VyZSBpdCBhY3R1YWxseSBtYXRjaGVzIC0tIHNwYWNlIGJlZm9yZSB0aGUgbmFtZSBhbmQgOiBhZnRlciBpdCAqLwotCQlpZiAoKGJ1ZnB0ciA9IHN0cnN0cihidWZmZXIsIGlmX25hbWUpKSAmJgotCQkJKGJ1ZnB0ciA9PSBidWZmZXIgfHwgKihidWZwdHItMSkgPT0gJyAnKSAmJgotCQkJKihidWZwdHIgKyBpZl9uYW1lX3N6KSA9PSAnOicpCi0JCXsKLQkJCWJ1ZnB0ciA9IGJ1ZnB0ciArIGlmX25hbWVfc3ogKyAxOworCXJldHVybiBzdHJ0b2xsKGJ1ZmZlciwgTlVMTCwgMTApOworfQogCi0JCQkvKiBncmFiIHRoZSBudGggZmllbGQgZnJvbSBpdCAqLwotCQkJd2hpbGUoIC0tZmllbGRfdG9fY29udmVydCAmJiAqYnVmcHRyICE9ICdcMCcpCi0JCQl7Ci0JCQkJd2hpbGUgKCpidWZwdHIgIT0gJ1wwJyAmJiAqKGJ1ZnB0cisrKSA9PSAnICcpOwotCQkJCXdoaWxlICgqYnVmcHRyICE9ICdcMCcgJiYgKihidWZwdHIrKykgIT0gJyAnKTsKLQkJCX0KLQotCQkJLyogZ2V0IHJpZCBvZiBhbnkgZmluYWwgc3BhY2VzICovCi0JCQl3aGlsZSAoKmJ1ZnB0ciAhPSAnXDAnICYmICpidWZwdHIgPT0gJyAnKSBidWZwdHIrKzsKLQotCQkJaWYgKCpidWZwdHIgIT0gJ1wwJykKLQkJCQlkcm9wcGVkX3BrdHMgPSBzdHJ0b2woYnVmcHRyLCBOVUxMLCAxMCk7Ci0KLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JZmNsb3NlKGZpbGUpOwotCXJldHVybiBkcm9wcGVkX3BrdHM7CitzdGF0aWMgbG9uZyBsb25nIGludAorbGludXhfaWZfZHJvcHMoY29uc3QgY2hhciAqIGlmX25hbWUpCit7CisJbG9uZyBsb25nIGludCBtaXNzZWQgPSBsaW51eF9nZXRfc3RhdChpZl9uYW1lLCAicnhfbWlzc2VkX2Vycm9ycyIpOworCWxvbmcgbG9uZyBpbnQgZmlmbyA9IGxpbnV4X2dldF9zdGF0KGlmX25hbWUsICJyeF9maWZvX2Vycm9ycyIpOworCXJldHVybiBtaXNzZWQgKyBmaWZvOwogfQogCiAKIC8qCi0gKiBXaXRoIG9sZGVyIGtlcm5lbHMgcHJvbWlzY3VvdXMgbW9kZSBpcyBraW5kIG9mIGludGVyZXN0aW5nIGJlY2F1c2Ugd2UKLSAqIGhhdmUgdG8gcmVzZXQgdGhlIGludGVyZmFjZSBiZWZvcmUgZXhpdGluZy4gVGhlIHByb2JsZW0gY2FuJ3QgcmVhbGx5Ci0gKiBiZSBzb2x2ZWQgd2l0aG91dCBzb21lIGRhZW1vbiB0YWtpbmcgY2FyZSBvZiBtYW5hZ2luZyB1c2FnZSBjb3VudHMuCi0gKiBJZiB3ZSBwdXQgdGhlIGludGVyZmFjZSBpbnRvIHByb21pc2N1b3VzIG1vZGUsIHdlIHNldCBhIGZsYWcgaW5kaWNhdGluZwotICogdGhhdCB3ZSBtdXN0IHRha2UgaXQgb3V0IG9mIHRoYXQgbW9kZSB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgY2xvc2VkLAotICogYW5kLCB3aGVuIGNsb3NpbmcgdGhlIGludGVyZmFjZSwgaWYgdGhhdCBmbGFnIGlzIHNldCB3ZSB0YWtlIGl0IG91dAotICogb2YgcHJvbWlzY3VvdXMgbW9kZS4KLSAqCi0gKiBFdmVuIHdpdGggbmV3ZXIga2VybmVscywgd2UgaGF2ZSB0aGUgc2FtZSBpc3N1ZSB3aXRoIHJmbW9uIG1vZGUuCisgKiBNb25pdG9yIG1vZGUgaXMga2luZCBvZiBpbnRlcmVzdGluZyBiZWNhdXNlIHdlIGhhdmUgdG8gcmVzZXQgdGhlCisgKiBpbnRlcmZhY2UgYmVmb3JlIGV4aXRpbmcuIFRoZSBwcm9ibGVtIGNhbid0IHJlYWxseSBiZSBzb2x2ZWQgd2l0aG91dAorICogc29tZSBkYWVtb24gdGFraW5nIGNhcmUgb2YgbWFuYWdpbmcgdXNhZ2UgY291bnRzLiAgSWYgd2UgcHV0IHRoZQorICogaW50ZXJmYWNlIGludG8gbW9uaXRvciBtb2RlLCB3ZSBzZXQgYSBmbGFnIGluZGljYXRpbmcgdGhhdCB3ZSBtdXN0CisgKiB0YWtlIGl0IG91dCBvZiB0aGF0IG1vZGUgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIGNsb3NlZCwgYW5kLCB3aGVuCisgKiBjbG9zaW5nIHRoZSBpbnRlcmZhY2UsIGlmIHRoYXQgZmxhZyBpcyBzZXQgd2UgdGFrZSBpdCBvdXQgb2YgbW9uaXRvcgorICogbW9kZS4KICAqLwogCiBzdGF0aWMgdm9pZAlwY2FwX2NsZWFudXBfbGludXgoIHBjYXBfdCAqaGFuZGxlICkKIHsKIAlzdHJ1Y3QgcGNhcF9saW51eCAqaGFuZGxlcCA9IGhhbmRsZS0+cHJpdjsKLQlzdHJ1Y3QgaWZyZXEJaWZyOwogI2lmZGVmIEhBVkVfTElCTkwKIAlzdHJ1Y3Qgbmw4MDIxMV9zdGF0ZSBubHN0YXRlOwogCWludCByZXQ7CiAjZW5kaWYgLyogSEFWRV9MSUJOTCAqLwotI2lmZGVmIElXX01PREVfTU9OSVRPUgotCWludCBvbGRmbGFnczsKLQlzdHJ1Y3QgaXdyZXEgaXJlcTsKLSNlbmRpZiAvKiBJV19NT0RFX01PTklUT1IgKi8KIAogCWlmIChoYW5kbGVwLT5tdXN0X2RvX29uX2Nsb3NlICE9IDApIHsKIAkJLyoKIAkJICogVGhlcmUncyBzb21ldGhpbmcgd2UgaGF2ZSB0byBkbyB3aGVuIGNsb3NpbmcgdGhpcwogCQkgKiBwY2FwX3QuCiAJCSAqLwotCQlpZiAoaGFuZGxlcC0+bXVzdF9kb19vbl9jbG9zZSAmIE1VU1RfQ0xFQVJfUFJPTUlTQykgewotCQkJLyoKLQkJCSAqIFdlIHB1dCB0aGUgaW50ZXJmYWNlIGludG8gcHJvbWlzY3VvdXMgbW9kZTsKLQkJCSAqIHRha2UgaXQgb3V0IG9mIHByb21pc2N1b3VzIG1vZGUuCi0JCQkgKgotCQkJICogWFhYIC0gaWYgc29tZWJvZHkgZWxzZSB3YW50cyBpdCBpbiBwcm9taXNjdW91cwotCQkJICogbW9kZSwgdGhpcyBjb2RlIGNhbm5vdCBrbm93IHRoYXQsIHNvIGl0J2xsIHRha2UKLQkJCSAqIGl0IG91dCBvZiBwcm9taXNjdW91cyBtb2RlLiAgVGhhdCdzIG5vdCBmaXhhYmxlCi0JCQkgKiBpbiAyLjBbLnhdIGtlcm5lbHMuCi0JCQkgKi8KLQkJCW1lbXNldCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7Ci0JCQlzdHJsY3B5KGlmci5pZnJfbmFtZSwgaGFuZGxlcC0+ZGV2aWNlLAotCQkJICAgIHNpemVvZihpZnIuaWZyX25hbWUpKTsKLQkJCWlmIChpb2N0bChoYW5kbGUtPmZkLCBTSU9DR0lGRkxBR1MsICZpZnIpID09IC0xKSB7Ci0JCQkJZnByaW50ZihzdGRlcnIsCi0JCQkJICAgICJDYW4ndCByZXN0b3JlIGludGVyZmFjZSAlcyBmbGFncyAoU0lPQ0dJRkZMQUdTIGZhaWxlZDogJXMpLlxuIgotCQkJCSAgICAiUGxlYXNlIGFkanVzdCBtYW51YWxseS5cbiIKLQkJCQkgICAgIkhpbnQ6IFRoaXMgY2FuJ3QgaGFwcGVuIHdpdGggTGludXggPj0gMi4yLjAuXG4iLAotCQkJCSAgICBoYW5kbGVwLT5kZXZpY2UsIHN0cmVycm9yKGVycm5vKSk7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChpZnIuaWZyX2ZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJCQkJLyoKLQkJCQkJICogUHJvbWlzY3VvdXMgbW9kZSBpcyBjdXJyZW50bHkgb247Ci0JCQkJCSAqIHR1cm4gaXQgb2ZmLgotCQkJCQkgKi8KLQkJCQkJaWZyLmlmcl9mbGFncyAmPSB+SUZGX1BST01JU0M7Ci0JCQkJCWlmIChpb2N0bChoYW5kbGUtPmZkLCBTSU9DU0lGRkxBR1MsCi0JCQkJCSAgICAmaWZyKSA9PSAtMSkgewotCQkJCQkJZnByaW50ZihzdGRlcnIsCi0JCQkJCQkgICAgIkNhbid0IHJlc3RvcmUgaW50ZXJmYWNlICVzIGZsYWdzIChTSU9DU0lGRkxBR1MgZmFpbGVkOiAlcykuXG4iCi0JCQkJCQkgICAgIlBsZWFzZSBhZGp1c3QgbWFudWFsbHkuXG4iCi0JCQkJCQkgICAgIkhpbnQ6IFRoaXMgY2FuJ3QgaGFwcGVuIHdpdGggTGludXggPj0gMi4yLjAuXG4iLAotCQkJCQkJICAgIGhhbmRsZXAtPmRldmljZSwKLQkJCQkJCSAgICBzdHJlcnJvcihlcnJubykpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0KICNpZmRlZiBIQVZFX0xJQk5MCiAJCWlmIChoYW5kbGVwLT5tdXN0X2RvX29uX2Nsb3NlICYgTVVTVF9ERUxFVEVfTU9OSUYpIHsKIAkJCXJldCA9IG5sODAyMTFfaW5pdChoYW5kbGUsICZubHN0YXRlLCBoYW5kbGVwLT5kZXZpY2UpOwpAQCAtMTI5NSw2OCArODAzLDYgQEAKIAkJfQogI2VuZGlmIC8qIEhBVkVfTElCTkwgKi8KIAotI2lmZGVmIElXX01PREVfTU9OSVRPUgotCQlpZiAoaGFuZGxlcC0+bXVzdF9kb19vbl9jbG9zZSAmIE1VU1RfQ0xFQVJfUkZNT04pIHsKLQkJCS8qCi0JCQkgKiBXZSBwdXQgdGhlIGludGVyZmFjZSBpbnRvIHJmbW9uIG1vZGU7Ci0JCQkgKiB0YWtlIGl0IG91dCBvZiByZm1vbiBtb2RlLgotCQkJICoKLQkJCSAqIFhYWCAtIGlmIHNvbWVib2R5IGVsc2Ugd2FudHMgaXQgaW4gcmZtb24KLQkJCSAqIG1vZGUsIHRoaXMgY29kZSBjYW5ub3Qga25vdyB0aGF0LCBzbyBpdCdsbCB0YWtlCi0JCQkgKiBpdCBvdXQgb2YgcmZtb24gbW9kZS4KLQkJCSAqLwotCi0JCQkvKgotCQkJICogRmlyc3QsIHRha2UgdGhlIGludGVyZmFjZSBkb3duIGlmIGl0J3MgdXA7Ci0JCQkgKiBvdGhlcndpc2UsIHdlIG1pZ2h0IGdldCBFQlVTWS4KLQkJCSAqIElmIHdlIGdldCBlcnJvcnMsIGp1c3QgZHJpdmUgb24gYW5kIHByaW50Ci0JCQkgKiBhIHdhcm5pbmcgaWYgd2UgY2FuJ3QgcmVzdG9yZSB0aGUgbW9kZS4KLQkJCSAqLwotCQkJb2xkZmxhZ3MgPSAwOwotCQkJbWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKLQkJCXN0cmxjcHkoaWZyLmlmcl9uYW1lLCBoYW5kbGVwLT5kZXZpY2UsCi0JCQkgICAgc2l6ZW9mKGlmci5pZnJfbmFtZSkpOwotCQkJaWYgKGlvY3RsKGhhbmRsZS0+ZmQsIFNJT0NHSUZGTEFHUywgJmlmcikgIT0gLTEpIHsKLQkJCQlpZiAoaWZyLmlmcl9mbGFncyAmIElGRl9VUCkgewotCQkJCQlvbGRmbGFncyA9IGlmci5pZnJfZmxhZ3M7Ci0JCQkJCWlmci5pZnJfZmxhZ3MgJj0gfklGRl9VUDsKLQkJCQkJaWYgKGlvY3RsKGhhbmRsZS0+ZmQsIFNJT0NTSUZGTEFHUywgJmlmcikgPT0gLTEpCi0JCQkJCQlvbGRmbGFncyA9IDA7CS8qIGRpZG4ndCBzZXQsIGRvbid0IHJlc3RvcmUgKi8KLQkJCQl9Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBOb3cgcmVzdG9yZSB0aGUgbW9kZS4KLQkJCSAqLwotCQkJc3RybGNweShpcmVxLmlmcl9pZnJuLmlmcm5fbmFtZSwgaGFuZGxlcC0+ZGV2aWNlLAotCQkJICAgIHNpemVvZiBpcmVxLmlmcl9pZnJuLmlmcm5fbmFtZSk7Ci0JCQlpcmVxLnUubW9kZSA9IGhhbmRsZXAtPm9sZG1vZGU7Ci0JCQlpZiAoaW9jdGwoaGFuZGxlLT5mZCwgU0lPQ1NJV01PREUsICZpcmVxKSA9PSAtMSkgewotCQkJCS8qCi0JCQkJICogU2NpZW50aXN0LCB5b3UndmUgZmFpbGVkLgotCQkJCSAqLwotCQkJCWZwcmludGYoc3RkZXJyLAotCQkJCSAgICAiQ2FuJ3QgcmVzdG9yZSBpbnRlcmZhY2UgJXMgd2lyZWxlc3MgbW9kZSAoU0lPQ1NJV01PREUgZmFpbGVkOiAlcykuXG4iCi0JCQkJICAgICJQbGVhc2UgYWRqdXN0IG1hbnVhbGx5LlxuIiwKLQkJCQkgICAgaGFuZGxlcC0+ZGV2aWNlLCBzdHJlcnJvcihlcnJubykpOwotCQkJfQotCi0JCQkvKgotCQkJICogTm93IGJyaW5nIHRoZSBpbnRlcmZhY2UgYmFjayB1cCBpZiB3ZSBicm91Z2h0Ci0JCQkgKiBpdCBkb3duLgotCQkJICovCi0JCQlpZiAob2xkZmxhZ3MgIT0gMCkgewotCQkJCWlmci5pZnJfZmxhZ3MgPSBvbGRmbGFnczsKLQkJCQlpZiAoaW9jdGwoaGFuZGxlLT5mZCwgU0lPQ1NJRkZMQUdTLCAmaWZyKSA9PSAtMSkgewotCQkJCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkJICAgICJDYW4ndCBicmluZyBpbnRlcmZhY2UgJXMgYmFjayB1cCAoU0lPQ1NJRkZMQUdTIGZhaWxlZDogJXMpLlxuIgotCQkJCQkgICAgIlBsZWFzZSBhZGp1c3QgbWFudWFsbHkuXG4iLAotCQkJCQkgICAgaGFuZGxlcC0+ZGV2aWNlLCBzdHJlcnJvcihlcnJubykpOwotCQkJCX0KLQkJCX0KLQkJfQotI2VuZGlmIC8qIElXX01PREVfTU9OSVRPUiAqLwotCiAJCS8qCiAJCSAqIFRha2UgdGhpcyBwY2FwIG91dCBvZiB0aGUgbGlzdCBvZiBwY2FwcyBmb3Igd2hpY2ggd2UKIAkJICogaGF2ZSB0byB0YWtlIHRoZSBpbnRlcmZhY2Ugb3V0IG9mIHNvbWUgbW9kZS4KQEAgLTEzNjQsNiArODEwLDE5IEBACiAJCXBjYXBfcmVtb3ZlX2Zyb21fcGNhcHNfdG9fY2xvc2UoaGFuZGxlKTsKIAl9CiAKKwlpZiAoaGFuZGxlLT5mZCAhPSAtMSkgeworCQkvKgorCQkgKiBEZXN0cm95IHRoZSByaW5nIGJ1ZmZlciAoYXNzdW1pbmcgd2UndmUgc2V0IGl0IHVwKSwKKwkJICogYW5kIHVubWFwIGl0IGlmIGl0J3MgbWFwcGVkLgorCQkgKi8KKwkJZGVzdHJveV9yaW5nKGhhbmRsZSk7CisJfQorCisJaWYgKGhhbmRsZXAtPm9uZXNob3RfYnVmZmVyICE9IE5VTEwpIHsKKwkJZnJlZShoYW5kbGVwLT5vbmVzaG90X2J1ZmZlcik7CisJCWhhbmRsZXAtPm9uZXNob3RfYnVmZmVyID0gTlVMTDsKKwl9CisKIAlpZiAoaGFuZGxlcC0+bW9uZGV2aWNlICE9IE5VTEwpIHsKIAkJZnJlZShoYW5kbGVwLT5tb25kZXZpY2UpOwogCQloYW5kbGVwLT5tb25kZXZpY2UgPSBOVUxMOwpAQCAtMTM3Miw5ICs4MzEsNDkgQEAKIAkJZnJlZShoYW5kbGVwLT5kZXZpY2UpOwogCQloYW5kbGVwLT5kZXZpY2UgPSBOVUxMOwogCX0KKworCWNsb3NlKGhhbmRsZXAtPnBvbGxfYnJlYWtsb29wX2ZkKTsKIAlwY2FwX2NsZWFudXBfbGl2ZV9jb21tb24oaGFuZGxlKTsKIH0KIAorI2lmZGVmIEhBVkVfVFBBQ0tFVDMKKy8qCisgKiBTb21lIHZlcnNpb25zIG9mIFRQQUNLRVRfVjMgaGF2ZSBhbm5veWluZyBidWdzL21pc2ZlYXR1cmVzCisgKiBhcm91bmQgd2hpY2ggd2UgaGF2ZSB0byB3b3JrLiAgRGV0ZXJtaW5lIGlmIHdlIGhhdmUgdGhvc2UKKyAqIHByb2JsZW1zIG9yIG5vdC4KKyAqIDMuMTkgaXMgdGhlIGZpcnN0IHJlbGVhc2Ugd2l0aCBhIGZpeGVkIHZlcnNpb24gb2YKKyAqIFRQQUNLRVRfVjMuICBXZSB0cmVhdCBhbnl0aGluZyBiZWZvcmUgdGhhdCBhcworICogbm90IGhhdmluZyBhIGZpeGVkIHZlcnNpb247IHRoYXQgbWF5IHJlYWxseSBtZWFuCisgKiBpdCBoYXMgKm5vKiB2ZXJzaW9uLgorICovCitzdGF0aWMgaW50IGhhc19icm9rZW5fdHBhY2tldF92Myh2b2lkKQoreworCXN0cnVjdCB1dHNuYW1lIHV0c25hbWU7CisJY29uc3QgY2hhciAqcmVsZWFzZTsKKwlsb25nIG1ham9yLCBtaW5vcjsKKwlpbnQgbWF0Y2hlcywgdmVybGVuOworCisJLyogTm8gdmVyc2lvbiBpbmZvcm1hdGlvbiwgYXNzdW1lIGJyb2tlbi4gKi8KKwlpZiAodW5hbWUoJnV0c25hbWUpID09IC0xKQorCQlyZXR1cm4gMTsKKwlyZWxlYXNlID0gdXRzbmFtZS5yZWxlYXNlOworCisJLyogQSBtYWxmb3JtZWQgdmVyc2lvbiwgZGl0dG8uICovCisJbWF0Y2hlcyA9IHNzY2FuZihyZWxlYXNlLCAiJWxkLiVsZCVuIiwgJm1ham9yLCAmbWlub3IsICZ2ZXJsZW4pOworCWlmIChtYXRjaGVzICE9IDIpCisJCXJldHVybiAxOworCWlmIChyZWxlYXNlW3Zlcmxlbl0gIT0gJy4nICYmIHJlbGVhc2VbdmVybGVuXSAhPSAnXDAnKQorCQlyZXR1cm4gMTsKKworCS8qIE9LLCBhIGZpeGVkIHZlcnNpb24uICovCisJaWYgKG1ham9yID4gMyB8fCAobWFqb3IgPT0gMyAmJiBtaW5vciA+PSAxOSkpCisJCXJldHVybiAwOworCisJLyogVG9vIG9sZCA6KCAqLworCXJldHVybiAxOworfQorI2VuZGlmCisKIC8qCiAgKiBTZXQgdGhlIHRpbWVvdXQgdG8gYmUgdXNlZCBpbiBwb2xsKCkgd2l0aCBtZW1vcnktbWFwcGVkIHBhY2tldCBjYXB0dXJlLgogICovCkBAIC0xMzgyLDQ1ICs4ODEsNyBAQAogc2V0X3BvbGxfdGltZW91dChzdHJ1Y3QgcGNhcF9saW51eCAqaGFuZGxlcCkKIHsKICNpZmRlZiBIQVZFX1RQQUNLRVQzCi0Jc3RydWN0IHV0c25hbWUgdXRzbmFtZTsKLQljaGFyICp2ZXJzaW9uX2NvbXBvbmVudCwgKmVuZHA7Ci0JaW50IG1ham9yLCBtaW5vcjsKLQlpbnQgYnJva2VuX3RwYWNrZXRfdjMgPSAxOwotCi0JLyoKLQkgKiBTb21lIHZlcnNpb25zIG9mIFRQQUNLRVRfVjMgaGF2ZSBhbm5veWluZyBidWdzL21pc2ZlYXR1cmVzCi0JICogYXJvdW5kIHdoaWNoIHdlIGhhdmUgdG8gd29yay4gIERldGVybWluZSBpZiB3ZSBoYXZlIHRob3NlCi0JICogcHJvYmxlbXMgb3Igbm90LgotCSAqLwotCWlmICh1bmFtZSgmdXRzbmFtZSkgPT0gMCkgewotCQkvKgotCQkgKiAzLjE5IGlzIHRoZSBmaXJzdCByZWxlYXNlIHdpdGggYSBmaXhlZCB2ZXJzaW9uIG9mCi0JCSAqIFRQQUNLRVRfVjMuICBXZSB0cmVhdCBhbnl0aGluZyBiZWZvcmUgdGhhdCBhcwotCQkgKiBub3QgaGF2ZWluZyBhIGZpeGVkIHZlcnNpb247IHRoYXQgbWF5IHJlYWxseSBtZWFuCi0JCSAqIGl0IGhhcyAqbm8qIHZlcnNpb24uCi0JCSAqLwotCQl2ZXJzaW9uX2NvbXBvbmVudCA9IHV0c25hbWUucmVsZWFzZTsKLQkJbWFqb3IgPSBzdHJ0b2wodmVyc2lvbl9jb21wb25lbnQsICZlbmRwLCAxMCk7Ci0JCWlmIChlbmRwICE9IHZlcnNpb25fY29tcG9uZW50ICYmICplbmRwID09ICcuJykgewotCQkJLyoKLQkJCSAqIE9LLCB0aGF0IHdhcyBhIHZhbGlkIG1ham9yIHZlcnNpb24uCi0JCQkgKiBHZXQgdGhlIG1pbm9yIHZlcnNpb24uCi0JCQkgKi8KLQkJCXZlcnNpb25fY29tcG9uZW50ID0gZW5kcCArIDE7Ci0JCQltaW5vciA9IHN0cnRvbCh2ZXJzaW9uX2NvbXBvbmVudCwgJmVuZHAsIDEwKTsKLQkJCWlmIChlbmRwICE9IHZlcnNpb25fY29tcG9uZW50ICYmCi0JCQkgICAgKCplbmRwID09ICcuJyB8fCAqZW5kcCA9PSAnXDAnKSkgewotCQkJCS8qCi0JCQkJICogT0ssIHRoYXQgd2FzIGEgdmFsaWQgbWlub3IgdmVyc2lvbi4KLQkJCQkgKiBJcyB0aGlzIDMuMTkgb3IgbmV3ZXI/Ci0JCQkJICovCi0JCQkJaWYgKG1ham9yID49IDQgfHwgKG1ham9yID09IDMgJiYgbWlub3IgPj0gMTkpKSB7Ci0JCQkJCS8qIFllcy4gVFBBQ0tFVF9WMyB3b3JrcyBjb3JyZWN0bHkuICovCi0JCQkJCWJyb2tlbl90cGFja2V0X3YzID0gMDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9CisJaW50IGJyb2tlbl90cGFja2V0X3YzID0gaGFzX2Jyb2tlbl90cGFja2V0X3YzKCk7CiAjZW5kaWYKIAlpZiAoaGFuZGxlcC0+dGltZW91dCA9PSAwKSB7CiAjaWZkZWYgSEFWRV9UUEFDS0VUMwpAQCAtMTQ2MywxMSArOTI0LDIxIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBwY2FwX2JyZWFrbG9vcF9saW51eChwY2FwX3QgKmhhbmRsZSkKK3sKKwlwY2FwX2JyZWFrbG9vcF9jb21tb24oaGFuZGxlKTsKKwlzdHJ1Y3QgcGNhcF9saW51eCAqaGFuZGxlcCA9IGhhbmRsZS0+cHJpdjsKKworCXVpbnQ2NF90IHZhbHVlID0gMTsKKwkvKiBYWFggLSB3aGF0IGlmIHRoaXMgZmFpbHM/ICovCisJKHZvaWQpd3JpdGUoaGFuZGxlcC0+cG9sbF9icmVha2xvb3BfZmQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7Cit9CisKIC8qCiAgKiAgR2V0IGEgaGFuZGxlIGZvciBhIGxpdmUgY2FwdHVyZSBmcm9tIHRoZSBnaXZlbiBkZXZpY2UuIFlvdSBjYW4KICAqICBwYXNzIE5VTEwgYXMgZGV2aWNlIHRvIGdldCBhbGwgcGFja2FnZXMgKHdpdGhvdXQgbGluayBsZXZlbAogICogIGluZm9ybWF0aW9uIG9mIGNvdXJzZSkuIElmIHlvdSBwYXNzIDEgYXMgcHJvbWlzYyB0aGUgaW50ZXJmYWNlCi0gKiAgd2lsbCBiZSBzZXQgdG8gcHJvbWlzY291cyBtb2RlIChYWFg6IEkgdGhpbmsgdGhpcyB1c2FnZSBzaG91bGQKKyAqICB3aWxsIGJlIHNldCB0byBwcm9taXNjdW91cyBtb2RlIChYWFg6IEkgdGhpbmsgdGhpcyB1c2FnZSBzaG91bGQKICAqICBiZSBkZXByZWNhdGVkIGFuZCBmdW5jdGlvbnMgYmUgYWRkZWQgdG8gc2VsZWN0IHRoYXQgbGF0ZXIgYWxsb3cKICAqICBtb2RpZmljYXRpb24gb2YgdGhhdCB2YWx1ZXMgLS0gVG9yc3RlbikuCiAgKi8KQEAgLTE0NzYsOCArOTQ3LDEwIEBACiB7CiAJc3RydWN0IHBjYXBfbGludXggKmhhbmRsZXAgPSBoYW5kbGUtPnByaXY7CiAJY29uc3QgY2hhcgkqZGV2aWNlOworCWludAkJaXNfYW55X2RldmljZTsKIAlzdHJ1Y3QgaWZyZXEJaWZyOwogCWludAkJc3RhdHVzID0gMDsKKwlpbnQJCXN0YXR1czIgPSAwOwogCWludAkJcmV0OwogCiAJZGV2aWNlID0gaGFuZGxlLT5vcHQuZGV2aWNlOwpAQCAtMTUwOSwxNTEgKzk4MiwxMDkgQEAKIAlpZiAoaGFuZGxlLT5zbmFwc2hvdCA8PSAwIHx8IGhhbmRsZS0+c25hcHNob3QgPiBNQVhJTVVNX1NOQVBMRU4pCiAJCWhhbmRsZS0+c25hcHNob3QgPSBNQVhJTVVNX1NOQVBMRU47CiAKLQloYW5kbGUtPmluamVjdF9vcCA9IHBjYXBfaW5qZWN0X2xpbnV4OwotCWhhbmRsZS0+c2V0ZmlsdGVyX29wID0gcGNhcF9zZXRmaWx0ZXJfbGludXg7Ci0JaGFuZGxlLT5zZXRkaXJlY3Rpb25fb3AgPSBwY2FwX3NldGRpcmVjdGlvbl9saW51eDsKLQloYW5kbGUtPnNldF9kYXRhbGlua19vcCA9IHBjYXBfc2V0X2RhdGFsaW5rX2xpbnV4OwotCWhhbmRsZS0+Z2V0bm9uYmxvY2tfb3AgPSBwY2FwX2dldG5vbmJsb2NrX2ZkOwotCWhhbmRsZS0+c2V0bm9uYmxvY2tfb3AgPSBwY2FwX3NldG5vbmJsb2NrX2ZkOwotCWhhbmRsZS0+Y2xlYW51cF9vcCA9IHBjYXBfY2xlYW51cF9saW51eDsKLQloYW5kbGUtPnJlYWRfb3AgPSBwY2FwX3JlYWRfbGludXg7Ci0JaGFuZGxlLT5zdGF0c19vcCA9IHBjYXBfc3RhdHNfbGludXg7CisJaGFuZGxlcC0+ZGV2aWNlCT0gc3RyZHVwKGRldmljZSk7CisJaWYgKGhhbmRsZXAtPmRldmljZSA9PSBOVUxMKSB7CisJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICBlcnJubywgInN0cmR1cCIpOworCQlzdGF0dXMgPSBQQ0FQX0VSUk9SOworCQlnb3RvIGZhaWw7CisJfQogCiAJLyoKIAkgKiBUaGUgImFueSIgZGV2aWNlIGlzIGEgc3BlY2lhbCBkZXZpY2Ugd2hpY2ggY2F1c2VzIHVzIG5vdAogCSAqIHRvIGJpbmQgdG8gYSBwYXJ0aWN1bGFyIGRldmljZSBhbmQgdGh1cyB0byBsb29rIGF0IGFsbAogCSAqIGRldmljZXMuCiAJICovCi0JaWYgKHN0cmNtcChkZXZpY2UsICJhbnkiKSA9PSAwKSB7CisJaXNfYW55X2RldmljZSA9IChzdHJjbXAoZGV2aWNlLCAiYW55IikgPT0gMCk7CisJaWYgKGlzX2FueV9kZXZpY2UpIHsKIAkJaWYgKGhhbmRsZS0+b3B0LnByb21pc2MpIHsKIAkJCWhhbmRsZS0+b3B0LnByb21pc2MgPSAwOwogCQkJLyogSnVzdCBhIHdhcm5pbmcuICovCi0JCQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgICAgIlByb21pc2N1b3VzIG1vZGUgbm90IHN1cHBvcnRlZCBvbiB0aGUgXCJhbnlcIiBkZXZpY2UiKTsKIAkJCXN0YXR1cyA9IFBDQVBfV0FSTklOR19QUk9NSVNDX05PVFNVUDsKIAkJfQogCX0KIAotCWhhbmRsZXAtPmRldmljZQk9IHN0cmR1cChkZXZpY2UpOwotCWlmIChoYW5kbGVwLT5kZXZpY2UgPT0gTlVMTCkgewotCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkgICAgZXJybm8sICJzdHJkdXAiKTsKLQkJcmV0dXJuIFBDQVBfRVJST1I7Ci0JfQotCiAJLyogY29weSB0aW1lb3V0IHZhbHVlICovCiAJaGFuZGxlcC0+dGltZW91dCA9IGhhbmRsZS0+b3B0LnRpbWVvdXQ7CiAKIAkvKgogCSAqIElmIHdlJ3JlIGluIHByb21pc2N1b3VzIG1vZGUsIHRoZW4gd2UgcHJvYmFibHkgd2FudAogCSAqIHRvIHNlZSB3aGVuIHRoZSBpbnRlcmZhY2UgZHJvcHMgcGFja2V0cyB0b28sIHNvIGdldCBhbgotCSAqIGluaXRpYWwgY291bnQgZnJvbSAvcHJvYy9uZXQvZGV2CisJICogaW5pdGlhbCBjb3VudCBmcm9tCisJICogL3N5cy9jbGFzcy9uZXQve2lmX25hbWV9L3N0YXRpc3RpY3Mvcnhfe21pc3NlZCxmaWZvfV9lcnJvcnMKIAkgKi8KIAlpZiAoaGFuZGxlLT5vcHQucHJvbWlzYykKLQkJaGFuZGxlcC0+cHJvY19kcm9wcGVkID0gbGludXhfaWZfZHJvcHMoaGFuZGxlcC0+ZGV2aWNlKTsKKwkJaGFuZGxlcC0+c3lzZnNfZHJvcHBlZCA9IGxpbnV4X2lmX2Ryb3BzKGhhbmRsZXAtPmRldmljZSk7CiAKIAkvKgotCSAqIEN1cnJlbnQgTGludXgga2VybmVscyB1c2UgdGhlIHByb3RvY29sIGZhbWlseSBQRl9QQUNLRVQgdG8KLQkgKiBhbGxvdyBkaXJlY3QgYWNjZXNzIHRvIGFsbCBwYWNrZXRzIG9uIHRoZSBuZXR3b3JrIHdoaWxlCi0JICogb2xkZXIga2VybmVscyBoYWQgYSBzcGVjaWFsIHNvY2tldCB0eXBlIFNPQ0tfUEFDS0VUIHRvCi0JICogaW1wbGVtZW50IHRoaXMgZmVhdHVyZS4KLQkgKiBXaGlsZSB0aGlzIG9sZCBpbXBsZW1lbnRhdGlvbiBpcyBraW5kIG9mIG9ic29sZXRlIHdlIG5lZWQKLQkgKiB0byBiZSBjb21wYXRpYmxlIHdpdGggb2xkZXIga2VybmVscyBmb3IgYSB3aGlsZSBzbyB3ZSBhcmUKLQkgKiB0cnlpbmcgYm90aCBtZXRob2RzIHdpdGggdGhlIG5ld2VyIG1ldGhvZCBwcmVmZXJyZWQuCisJICogSWYgdGhlICJhbnkiIGRldmljZSBpcyBzcGVjaWZpZWQsIHRyeSB0byBvcGVuIGEgU09DS19ER1JBTS4KKwkgKiBPdGhlcndpc2UsIG9wZW4gYSBTT0NLX1JBVy4KIAkgKi8KLQlyZXQgPSBhY3RpdmF0ZV9uZXcoaGFuZGxlKTsKKwlyZXQgPSBhY3RpdmF0ZV9wZl9wYWNrZXQoaGFuZGxlLCBpc19hbnlfZGV2aWNlKTsKIAlpZiAocmV0IDwgMCkgewogCQkvKgotCQkgKiBGYXRhbCBlcnJvciB3aXRoIHRoZSBuZXcgd2F5OyBqdXN0IGZhaWwuCi0JCSAqIHJldCBoYXMgdGhlIGVycm9yIHJldHVybjsgaWYgaXQncyBQQ0FQX0VSUk9SLAotCQkgKiBoYW5kbGUtPmVycmJ1ZiBoYXMgYmVlbiBzZXQgYXBwcm9wcmlhdGVseS4KKwkJICogRmF0YWwgZXJyb3I7IHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIGVycm9yIGNvZGUsCisJCSAqIGFuZCBoYW5kbGUtPmVycmJ1ZiBoYXMgYmVlbiBzZXQgdG8gYW4gYXBwcm9wcmlhdGUKKwkJICogZXJyb3IgbWVzc2FnZS4KIAkJICovCiAJCXN0YXR1cyA9IHJldDsKIAkJZ290byBmYWlsOwogCX0KLQlpZiAocmV0ID09IDEpIHsKLQkJLyoKLQkJICogU3VjY2Vzcy4KLQkJICogVHJ5IHRvIHVzZSBtZW1vcnktbWFwcGVkIGFjY2Vzcy4KLQkJICovCi0JCXN3aXRjaCAoYWN0aXZhdGVfbW1hcChoYW5kbGUsICZzdGF0dXMpKSB7Ci0KLQkJY2FzZSAxOgotCQkJLyoKLQkJCSAqIFdlIHN1Y2NlZWRlZC4gIHN0YXR1cyBoYXMgYmVlbgotCQkJICogc2V0IHRvIHRoZSBzdGF0dXMgdG8gcmV0dXJuLAotCQkJICogd2hpY2ggbWlnaHQgYmUgMCwgb3IgbWlnaHQgYmUKLQkJCSAqIGEgUENBUF9XQVJOSU5HXyB2YWx1ZS4KLQkJCSAqCi0JCQkgKiBTZXQgdGhlIHRpbWVvdXQgdG8gdXNlIGluIHBvbGwoKSBiZWZvcmUKLQkJCSAqIHJldHVybmluZy4KLQkJCSAqLwotCQkJc2V0X3BvbGxfdGltZW91dChoYW5kbGVwKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0KLQkJY2FzZSAwOgotCQkJLyoKLQkJCSAqIEtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgaXQgLSBqdXN0IGNvbnRpbnVlCi0JCQkgKiB3aXRoIG5vbi1tZW1vcnktbWFwcGVkIGFjY2Vzcy4KLQkJCSAqLwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAtMToKLQkJCS8qCi0JCQkgKiBXZSBmYWlsZWQgdG8gc2V0IHVwIHRvIHVzZSBpdCwgb3IgdGhlIGtlcm5lbAotCQkJICogc3VwcG9ydHMgaXQsIGJ1dCB3ZSBmYWlsZWQgdG8gZW5hYmxlIGl0LgotCQkJICogcmV0IGhhcyBiZWVuIHNldCB0byB0aGUgZXJyb3Igc3RhdHVzIHRvCi0JCQkgKiByZXR1cm4gYW5kLCBpZiBpdCdzIFBDQVBfRVJST1IsIGhhbmRsZS0+ZXJyYnVmCi0JCQkgKiBjb250YWlucyB0aGUgZXJyb3IgbWVzc2FnZS4KLQkJCSAqLwotCQkJc3RhdHVzID0gcmV0OwotCQkJZ290byBmYWlsOwotCQl9Ci0JfQotCWVsc2UgaWYgKHJldCA9PSAwKSB7Ci0JCS8qIE5vbi1mYXRhbCBlcnJvcjsgdHJ5IG9sZCB3YXkgKi8KLQkJaWYgKChyZXQgPSBhY3RpdmF0ZV9vbGQoaGFuZGxlKSkgIT0gMSkgewotCQkJLyoKLQkJCSAqIEJvdGggbWV0aG9kcyB0byBvcGVuIHRoZSBwYWNrZXQgc29ja2V0IGZhaWxlZC4KLQkJCSAqIFRpZHkgdXAgYW5kIHJlcG9ydCBvdXIgZmFpbHVyZSAoaGFuZGxlLT5lcnJidWYKLQkJCSAqIGlzIGV4cGVjdGVkIHRvIGJlIHNldCBieSB0aGUgZnVuY3Rpb25zIGFib3ZlKS4KLQkJCSAqLwotCQkJc3RhdHVzID0gcmV0OwotCQkJZ290byBmYWlsOwotCQl9Ci0JfQotCiAJLyoKLQkgKiBXZSBzZXQgdXAgdGhlIHNvY2tldCwgYnV0IG5vdCB3aXRoIG1lbW9yeS1tYXBwZWQgYWNjZXNzLgorCSAqIFN1Y2Nlc3MuCisJICogVHJ5IHRvIHNldCB1cCBtZW1vcnktbWFwcGVkIGFjY2Vzcy4KIAkgKi8KLQlpZiAoaGFuZGxlLT5vcHQuYnVmZmVyX3NpemUgIT0gMCkgeworCXJldCA9IHNldHVwX21tYXBwZWQoaGFuZGxlLCAmc3RhdHVzKTsKKwlpZiAocmV0ID09IC0xKSB7CiAJCS8qCi0JCSAqIFNldCB0aGUgc29ja2V0IGJ1ZmZlciBzaXplIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuCisJCSAqIFdlIGZhaWxlZCB0byBzZXQgdXAgdG8gdXNlIGl0LCBvciB0aGUKKwkJICoga2VybmVsIHN1cHBvcnRzIGl0LCBidXQgd2UgZmFpbGVkIHRvCisJCSAqIGVuYWJsZSBpdC4gIHN0YXR1cyBoYXMgYmVlbiBzZXQgdG8gdGhlCisJCSAqIGVycm9yIHN0YXR1cyB0byByZXR1cm4gYW5kLCBpZiBpdCdzCisJCSAqIFBDQVBfRVJST1IsIGhhbmRsZS0+ZXJyYnVmIGNvbnRhaW5zCisJCSAqIHRoZSBlcnJvciBtZXNzYWdlLgogCQkgKi8KLQkJaWYgKHNldHNvY2tvcHQoaGFuZGxlLT5mZCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLAotCQkgICAgJmhhbmRsZS0+b3B0LmJ1ZmZlcl9zaXplLAotCQkgICAgc2l6ZW9mKGhhbmRsZS0+b3B0LmJ1ZmZlcl9zaXplKSkgPT0gLTEpIHsKLQkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oaGFuZGxlLT5lcnJidWYsCi0JCQkgICAgUENBUF9FUlJCVUZfU0laRSwgZXJybm8sICJTT19SQ1ZCVUYiKTsKLQkJCXN0YXR1cyA9IFBDQVBfRVJST1I7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQl9Ci0KLQkvKiBBbGxvY2F0ZSB0aGUgYnVmZmVyICovCi0KLQloYW5kbGUtPmJ1ZmZlcgkgPSBtYWxsb2MoaGFuZGxlLT5idWZzaXplICsgaGFuZGxlLT5vZmZzZXQpOwotCWlmICghaGFuZGxlLT5idWZmZXIpIHsKLQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJICAgIGVycm5vLCAibWFsbG9jIik7Ci0JCXN0YXR1cyA9IFBDQVBfRVJST1I7CiAJCWdvdG8gZmFpbDsKIAl9CiAKIAkvKgotCSAqICJoYW5kbGUtPmZkIiBpcyBhIHNvY2tldCwgc28gInNlbGVjdCgpIiBhbmQgInBvbGwoKSIKLQkgKiBzaG91bGQgd29yayBvbiBpdC4KKwkgKiBXZSBzdWNjZWVkZWQuICBzdGF0dXMgaGFzIGJlZW4gc2V0IHRvIHRoZSBzdGF0dXMgdG8gcmV0dXJuLAorCSAqIHdoaWNoIG1pZ2h0IGJlIDAsIG9yIG1pZ2h0IGJlIGEgUENBUF9XQVJOSU5HXyB2YWx1ZS4KIAkgKi8KKwkvKgorCSAqIE5vdyB0aGF0IHdlIGhhdmUgYWN0aXZhdGVkIHRoZSBtbWFwIHJpbmcsIHdlIGNhbgorCSAqIHNldCB0aGUgY29ycmVjdCBwcm90b2NvbC4KKwkgKi8KKwlpZiAoKHN0YXR1czIgPSBpZmFjZV9iaW5kKGhhbmRsZS0+ZmQsIGhhbmRsZXAtPmlmaW5kZXgsCisJICAgIGhhbmRsZS0+ZXJyYnVmLCBwY2FwX3Byb3RvY29sKGhhbmRsZSkpKSAhPSAwKSB7CisJCXN0YXR1cyA9IHN0YXR1czI7CisJCWdvdG8gZmFpbDsKKwl9CisKKwloYW5kbGUtPmluamVjdF9vcCA9IHBjYXBfaW5qZWN0X2xpbnV4OworCWhhbmRsZS0+c2V0ZmlsdGVyX29wID0gcGNhcF9zZXRmaWx0ZXJfbGludXg7CisJaGFuZGxlLT5zZXRkaXJlY3Rpb25fb3AgPSBwY2FwX3NldGRpcmVjdGlvbl9saW51eDsKKwloYW5kbGUtPnNldF9kYXRhbGlua19vcCA9IHBjYXBfc2V0X2RhdGFsaW5rX2xpbnV4OworCWhhbmRsZS0+c2V0bm9uYmxvY2tfb3AgPSBwY2FwX3NldG5vbmJsb2NrX2xpbnV4OworCWhhbmRsZS0+Z2V0bm9uYmxvY2tfb3AgPSBwY2FwX2dldG5vbmJsb2NrX2xpbnV4OworCWhhbmRsZS0+Y2xlYW51cF9vcCA9IHBjYXBfY2xlYW51cF9saW51eDsKKwloYW5kbGUtPnN0YXRzX29wID0gcGNhcF9zdGF0c19saW51eDsKKwloYW5kbGUtPmJyZWFrbG9vcF9vcCA9IHBjYXBfYnJlYWtsb29wX2xpbnV4OworCisJc3dpdGNoIChoYW5kbGVwLT50cF92ZXJzaW9uKSB7CisKKwljYXNlIFRQQUNLRVRfVjI6CisJCWhhbmRsZS0+cmVhZF9vcCA9IHBjYXBfcmVhZF9saW51eF9tbWFwX3YyOworCQlicmVhazsKKyNpZmRlZiBIQVZFX1RQQUNLRVQzCisJY2FzZSBUUEFDS0VUX1YzOgorCQloYW5kbGUtPnJlYWRfb3AgPSBwY2FwX3JlYWRfbGludXhfbW1hcF92MzsKKwkJYnJlYWs7CisjZW5kaWYKKwl9CisJaGFuZGxlLT5vbmVzaG90X2NhbGxiYWNrID0gcGNhcF9vbmVzaG90X2xpbnV4OwogCWhhbmRsZS0+c2VsZWN0YWJsZV9mZCA9IGhhbmRsZS0+ZmQ7CiAKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMTY2MywyMSArMTA5NCw2IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotLyoKLSAqICBSZWFkIGF0IG1vc3QgbWF4X3BhY2tldHMgZnJvbSB0aGUgY2FwdHVyZSBzdHJlYW0gYW5kIGNhbGwgdGhlIGNhbGxiYWNrCi0gKiAgZm9yIGVhY2ggb2YgdGhlbS4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhY2tldHMgaGFuZGxlZCBvciAtMSBpZiBhbgotICogIGVycm9yIG9jY3VyZWQuCi0gKi8KLXN0YXRpYyBpbnQKLXBjYXBfcmVhZF9saW51eChwY2FwX3QgKmhhbmRsZSwgaW50IG1heF9wYWNrZXRzIF9VXywgcGNhcF9oYW5kbGVyIGNhbGxiYWNrLCB1X2NoYXIgKnVzZXIpCi17Ci0JLyoKLQkgKiBDdXJyZW50bHksIG9uIExpbnV4IG9ubHkgb25lIHBhY2tldCBpcyBkZWxpdmVyZWQgcGVyIHJlYWQsCi0JICogc28gd2UgZG9uJ3QgbG9vcC4KLQkgKi8KLQlyZXR1cm4gcGNhcF9yZWFkX3BhY2tldChoYW5kbGUsIGNhbGxiYWNrLCB1c2VyKTsKLX0KLQogc3RhdGljIGludAogcGNhcF9zZXRfZGF0YWxpbmtfbGludXgocGNhcF90ICpoYW5kbGUsIGludCBkbHQpCiB7CkBAIC0xNzM4LDQxMiArMTE1NCw4MyBAQAogfQogCiAvKgotICogIFJlYWQgYSBwYWNrZXQgZnJvbSB0aGUgc29ja2V0IGNhbGxpbmcgdGhlIGhhbmRsZXIgcHJvdmlkZWQgYnkKLSAqICB0aGUgdXNlci4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhY2tldHMgcmVjZWl2ZWQgb3IgLTEgaWYgYW4KLSAqICBlcnJvciBvY2N1cmVkLgorICogQ2hlY2sgd2hldGhlciB0aGUgZGV2aWNlIHRvIHdoaWNoIHRoZSBwY2FwX3QgaXMgYm91bmQgc3RpbGwgZXhpc3RzLgorICogV2UgZG8gc28gYnkgYXNraW5nIHdoYXQgYWRkcmVzcyB0aGUgc29ja2V0IGlzIGJvdW5kIHRvLCBhbmQgY2hlY2tpbmcKKyAqIHdoZXRoZXIgdGhlIGlmaW5kZXggaW4gdGhlIGFkZHJlc3MgaXMgLTEsIG1lYW5pbmcgInRoYXQgZGV2aWNlIGlzIGdvbmUiLAorICogb3Igc29tZSBvdGhlciB2YWx1ZSwgbWVhbmluZyAidGhhdCBkZXZpY2Ugc3RpbGwgZXhpc3RzIi4KICAqLwogc3RhdGljIGludAotcGNhcF9yZWFkX3BhY2tldChwY2FwX3QgKmhhbmRsZSwgcGNhcF9oYW5kbGVyIGNhbGxiYWNrLCB1X2NoYXIgKnVzZXJkYXRhKQorZGV2aWNlX3N0aWxsX2V4aXN0cyhwY2FwX3QgKmhhbmRsZSkKIHsKLQlzdHJ1Y3QgcGNhcF9saW51eAkqaGFuZGxlcCA9IGhhbmRsZS0+cHJpdjsKLQl1X2NoYXIJCQkqYnA7Ci0JaW50CQkJb2Zmc2V0OwotI2lmZGVmIEhBVkVfUEZfUEFDS0VUX1NPQ0tFVFMKLQlzdHJ1Y3Qgc29ja2FkZHJfbGwJZnJvbTsKLQlzdHJ1Y3Qgc2xsX2hlYWRlcgkqaGRycDsKLSNlbHNlCi0Jc3RydWN0IHNvY2thZGRyCQlmcm9tOwotI2VuZGlmCi0jaWYgZGVmaW5lZChIQVZFX1BBQ0tFVF9BVVhEQVRBKSAmJiBkZWZpbmVkKEhBVkVfU1RSVUNUX1RQQUNLRVRfQVVYREFUQV9UUF9WTEFOX1RDSSkKLQlzdHJ1Y3QgaW92ZWMJCWlvdjsKLQlzdHJ1Y3QgbXNnaGRyCQltc2c7Ci0Jc3RydWN0IGNtc2doZHIJCSpjbXNnOwotCXVuaW9uIHsKLQkJc3RydWN0IGNtc2doZHIJY21zZzsKLQkJY2hhcgkJYnVmW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCB0cGFja2V0X2F1eGRhdGEpKV07Ci0JfSBjbXNnX2J1ZjsKLSNlbHNlIC8qIGRlZmluZWQoSEFWRV9QQUNLRVRfQVVYREFUQSkgJiYgZGVmaW5lZChIQVZFX1NUUlVDVF9UUEFDS0VUX0FVWERBVEFfVFBfVkxBTl9UQ0kpICovCi0Jc29ja2xlbl90CQlmcm9tbGVuOwotI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9QQUNLRVRfQVVYREFUQSkgJiYgZGVmaW5lZChIQVZFX1NUUlVDVF9UUEFDS0VUX0FVWERBVEFfVFBfVkxBTl9UQ0kpICovCi0JaW50CQkJcGFja2V0X2xlbiwgY2FwbGVuOwotCXN0cnVjdCBwY2FwX3BrdGhkcglwY2FwX2hlYWRlcjsKLQotICAgICAgICBzdHJ1Y3QgYnBmX2F1eF9kYXRhICAgICBhdXhfZGF0YTsKLSNpZmRlZiBIQVZFX1BGX1BBQ0tFVF9TT0NLRVRTCi0JLyoKLQkgKiBJZiB0aGlzIGlzIGEgY29va2VkIGRldmljZSwgbGVhdmUgZXh0cmEgcm9vbSBmb3IgYQotCSAqIGZha2UgcGFja2V0IGhlYWRlci4KLQkgKi8KLQlpZiAoaGFuZGxlcC0+Y29va2VkKQotCQlvZmZzZXQgPSBTTExfSERSX0xFTjsKLQllbHNlCi0JCW9mZnNldCA9IDA7Ci0jZWxzZQotCS8qCi0JICogVGhpcyBzeXN0ZW0gZG9lc24ndCBoYXZlIFBGX1BBQ0tFVCBzb2NrZXRzLCBzbyBpdCBkb2Vzbid0Ci0JICogc3VwcG9ydCBjb29rZWQgZGV2aWNlcy4KLQkgKi8KLQlvZmZzZXQgPSAwOwotI2VuZGlmCisJc3RydWN0IHBjYXBfbGludXggKmhhbmRsZXAgPSBoYW5kbGUtPnByaXY7CisJc3RydWN0IHNvY2thZGRyX2xsIGFkZHI7CisJc29ja2xlbl90IGFkZHJfbGVuOwogCiAJLyoKLQkgKiBSZWNlaXZlIGEgc2luZ2xlIHBhY2tldCBmcm9tIHRoZSBrZXJuZWwuCi0JICogV2UgaWdub3JlIEVJTlRSLCBhcyB0aGF0IG1pZ2h0IGp1c3QgYmUgZHVlIHRvIGEgc2lnbmFsCi0JICogYmVpbmcgZGVsaXZlcmVkIC0gaWYgdGhlIHNpZ25hbCBzaG91bGQgaW50ZXJydXB0IHRoZQotCSAqIGxvb3AsIHRoZSBzaWduYWwgaGFuZGxlciBzaG91bGQgY2FsbCBwY2FwX2JyZWFrbG9vcCgpCi0JICogdG8gc2V0IGhhbmRsZS0+YnJlYWtfbG9vcCAod2UgaWdub3JlIGl0IG9uIG90aGVyCi0JICogcGxhdGZvcm1zIGFzIHdlbGwpLgotCSAqIFdlIGFsc28gaWdub3JlIEVORVRET1dOLCBzbyB0aGF0IHdlIGNhbiBjb250aW51ZSB0bwotCSAqIGNhcHR1cmUgdHJhZmZpYyBpZiB0aGUgaW50ZXJmYWNlIGdvZXMgZG93biBhbmQgY29tZXMKLQkgKiBiYWNrIHVwIGFnYWluOyBjb21tZW50cyBpbiB0aGUga2VybmVsIGluZGljYXRlIHRoYXQKLQkgKiB3ZSdsbCBqdXN0IGJsb2NrIHdhaXRpbmcgZm9yIHBhY2tldHMgaWYgd2UgdHJ5IHRvCi0JICogcmVjZWl2ZSBmcm9tIGEgc29ja2V0IHRoYXQgZGVsaXZlcmVkIEVORVRET1dOLCBhbmQsCi0JICogaWYgd2UncmUgdXNpbmcgYSBtZW1vcnktbWFwcGVkIGJ1ZmZlciwgd2Ugd29uJ3QgZXZlbgotCSAqIGdldCBub3RpZmllZCBvZiAibmV0d29yayBkb3duIiBldmVudHMuCisJICogSWYgaGFuZGxlcC0+aWZpbmRleCBpcyAtMSwgdGhlIHNvY2tldCBpc24ndCBib3VuZCwgbWVhbmluZworCSAqIHdlJ3JlIGNhcHR1cmluZyBvbiB0aGUgImFueSIgZGV2aWNlOyB0aGF0IGRldmljZSBuZXZlcgorCSAqIGRpc2FwcGVhcnMuICAoSXQgc2hvdWxkIGFsc28gbmV2ZXIgYmUgY29uZmlndXJlZCBkb3duLCBzbworCSAqIHdlIHNob3VsZG4ndCBldmVuIGdldCBoZXJlLCBidXQgbGV0J3MgbWFrZSBzdXJlLikKIAkgKi8KLQlicCA9ICh1X2NoYXIgKiloYW5kbGUtPmJ1ZmZlciArIGhhbmRsZS0+b2Zmc2V0OworCWlmIChoYW5kbGVwLT5pZmluZGV4ID09IC0xKQorCQlyZXR1cm4gKDEpOwkvKiBpdCdzIHN0aWxsIGhlcmUgKi8KIAotI2lmIGRlZmluZWQoSEFWRV9QQUNLRVRfQVVYREFUQSkgJiYgZGVmaW5lZChIQVZFX1NUUlVDVF9UUEFDS0VUX0FVWERBVEFfVFBfVkxBTl9UQ0kpCi0JbXNnLm1zZ19uYW1lCQk9ICZmcm9tOwotCW1zZy5tc2dfbmFtZWxlbgkJPSBzaXplb2YoZnJvbSk7Ci0JbXNnLm1zZ19pb3YJCT0gJmlvdjsKLQltc2cubXNnX2lvdmxlbgkJPSAxOwotCW1zZy5tc2dfY29udHJvbAkJPSAmY21zZ19idWY7Ci0JbXNnLm1zZ19jb250cm9sbGVuCT0gc2l6ZW9mKGNtc2dfYnVmKTsKLQltc2cubXNnX2ZsYWdzCQk9IDA7Ci0KLQlpb3YuaW92X2xlbgkJPSBoYW5kbGUtPmJ1ZnNpemUgLSBvZmZzZXQ7Ci0JaW92Lmlvdl9iYXNlCQk9IGJwICsgb2Zmc2V0OwotI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9QQUNLRVRfQVVYREFUQSkgJiYgZGVmaW5lZChIQVZFX1NUUlVDVF9UUEFDS0VUX0FVWERBVEFfVFBfVkxBTl9UQ0kpICovCi0KLQlkbyB7CisJLyoKKwkgKiBPSywgbm93IHRyeSB0byBnZXQgdGhlIGFkZHJlc3MgZm9yIHRoZSBzb2NrZXQuCisJICovCisJYWRkcl9sZW4gPSBzaXplb2YgKGFkZHIpOworCWlmIChnZXRzb2NrbmFtZShoYW5kbGUtPmZkLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCAmYWRkcl9sZW4pID09IC0xKSB7CiAJCS8qCi0JCSAqIEhhcyAicGNhcF9icmVha2xvb3AoKSIgYmVlbiBjYWxsZWQ/CisJCSAqIEVycm9yIC0gcmVwb3J0IGFuIGVycm9yIGFuZCByZXR1cm4gLTEuCiAJCSAqLwotCQlpZiAoaGFuZGxlLT5icmVha19sb29wKSB7Ci0JCQkvKgotCQkJICogWWVzIC0gY2xlYXIgdGhlIGZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhhdCBpdCBoYXMsCi0JCQkgKiBhbmQgcmV0dXJuIFBDQVBfRVJST1JfQlJFQUsgYXMgYW4gaW5kaWNhdGlvbiB0aGF0Ci0JCQkgKiB3ZSB3ZXJlIHRvbGQgdG8gYnJlYWsgb3V0IG9mIHRoZSBsb29wLgotCQkJICovCi0JCQloYW5kbGUtPmJyZWFrX2xvb3AgPSAwOwotCQkJcmV0dXJuIFBDQVBfRVJST1JfQlJFQUs7Ci0JCX0KLQotI2lmIGRlZmluZWQoSEFWRV9QQUNLRVRfQVVYREFUQSkgJiYgZGVmaW5lZChIQVZFX1NUUlVDVF9UUEFDS0VUX0FVWERBVEFfVFBfVkxBTl9UQ0kpCi0JCXBhY2tldF9sZW4gPSByZWN2bXNnKGhhbmRsZS0+ZmQsICZtc2csIE1TR19UUlVOQyk7Ci0jZWxzZSAvKiBkZWZpbmVkKEhBVkVfUEFDS0VUX0FVWERBVEEpICYmIGRlZmluZWQoSEFWRV9TVFJVQ1RfVFBBQ0tFVF9BVVhEQVRBX1RQX1ZMQU5fVENJKSAqLwotCQlmcm9tbGVuID0gc2l6ZW9mKGZyb20pOwotCQlwYWNrZXRfbGVuID0gcmVjdmZyb20oCi0JCQloYW5kbGUtPmZkLCBicCArIG9mZnNldCwKLQkJCWhhbmRsZS0+YnVmc2l6ZSAtIG9mZnNldCwgTVNHX1RSVU5DLAotCQkJKHN0cnVjdCBzb2NrYWRkciAqKSAmZnJvbSwgJmZyb21sZW4pOwotI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9QQUNLRVRfQVVYREFUQSkgJiYgZGVmaW5lZChIQVZFX1NUUlVDVF9UUEFDS0VUX0FVWERBVEFfVFBfVkxBTl9UQ0kpICovCi0JfSB3aGlsZSAocGFja2V0X2xlbiA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7Ci0KLQkvKiBDaGVjayBpZiBhbiBlcnJvciBvY2N1cmVkICovCi0KLQlpZiAocGFja2V0X2xlbiA9PSAtMSkgewotCQlzd2l0Y2ggKGVycm5vKSB7Ci0KLQkJY2FzZSBFQUdBSU46Ci0JCQlyZXR1cm4gMDsJLyogbm8gcGFja2V0IHRoZXJlICovCi0KLQkJY2FzZSBFTkVURE9XTjoKLQkJCS8qCi0JCQkgKiBUaGUgZGV2aWNlIG9uIHdoaWNoIHdlJ3JlIGNhcHR1cmluZyB3ZW50IGF3YXkuCi0JCQkgKgotCQkJICogWFhYIC0gd2Ugc2hvdWxkIHJlYWxseSByZXR1cm4KLQkJCSAqIFBDQVBfRVJST1JfSUZBQ0VfTk9UX1VQLCBidXQgcGNhcF9kaXNwYXRjaCgpCi0JCQkgKiBldGMuIGFyZW4ndCBkZWZpbmVkIHRvIHJldHVybiB0aGF0LgotCQkJICovCi0JCQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkJCSJUaGUgaW50ZXJmYWNlIHdlbnQgZG93biIpOwotCQkJcmV0dXJuIFBDQVBfRVJST1I7Ci0KLQkJZGVmYXVsdDoKLQkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oaGFuZGxlLT5lcnJidWYsCi0JCQkgICAgUENBUF9FUlJCVUZfU0laRSwgZXJybm8sICJyZWN2ZnJvbSIpOwotCQkJcmV0dXJuIFBDQVBfRVJST1I7Ci0JCX0KKwkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJICAgIGVycm5vLCAiZ2V0c29ja25hbWUgZmFpbGVkIik7CisJCXJldHVybiAoLTEpOwogCX0KLQotI2lmZGVmIEhBVkVfUEZfUEFDS0VUX1NPQ0tFVFMKLQlpZiAoIWhhbmRsZXAtPnNvY2tfcGFja2V0KSB7CisJaWYgKGFkZHIuc2xsX2lmaW5kZXggPT0gLTEpIHsKIAkJLyoKLQkJICogVW5mb3J0dW5hdGVseSwgdGhlcmUgaXMgYSB3aW5kb3cgYmV0d2VlbiBzb2NrZXQoKSBhbmQKLQkJICogYmluZCgpIHdoZXJlIHRoZSBrZXJuZWwgbWF5IHF1ZXVlIHBhY2tldHMgZnJvbSBhbnkKLQkJICogaW50ZXJmYWNlLiAgSWYgd2UncmUgYm91bmQgdG8gYSBwYXJ0aWN1bGFyIGludGVyZmFjZSwKLQkJICogZGlzY2FyZCBwYWNrZXRzIG5vdCBmcm9tIHRoYXQgaW50ZXJmYWNlLgotCQkgKgotCQkgKiAoSWYgc29ja2V0IGZpbHRlcnMgYXJlIHN1cHBvcnRlZCwgd2UgY291bGQgZG8gdGhlCi0JCSAqIHNhbWUgdGhpbmcgd2UgZG8gd2hlbiBjaGFuZ2luZyB0aGUgZmlsdGVyOyBob3dldmVyLAotCQkgKiB0aGF0IHdvbid0IGhhbmRsZSBwYWNrZXQgc29ja2V0cyB3aXRob3V0IHNvY2tldAotCQkgKiBmaWx0ZXIgc3VwcG9ydCwgYW5kIGl0J3MgYSBiaXQgbW9yZSBjb21wbGljYXRlZC4KLQkJICogSXQgd291bGQgc2F2ZSBzb21lIGluc3RydWN0aW9ucyBwZXIgcGFja2V0LCBob3dldmVyLikKKwkJICogVGhpcyBtZWFucyB0aGUgZGV2aWNlIHdlbnQgYXdheS4KIAkJICovCi0JCWlmIChoYW5kbGVwLT5pZmluZGV4ICE9IC0xICYmCi0JCSAgICBmcm9tLnNsbF9pZmluZGV4ICE9IGhhbmRsZXAtPmlmaW5kZXgpCi0JCQlyZXR1cm4gMDsKLQotCQkvKgotCQkgKiBEbyBjaGVja3MgYmFzZWQgb24gcGFja2V0IGRpcmVjdGlvbi4KLQkJICogV2UgY2FuIG9ubHkgZG8gdGhpcyBpZiB3ZSdyZSB1c2luZyBQRl9QQUNLRVQ7IHRoZQotCQkgKiBhZGRyZXNzIHJldHVybmVkIGZvciBTT0NLX1BBQ0tFVCBpcyBhICJzb2NrYWRkcl9wa3QiCi0JCSAqIHdoaWNoIGxhY2tzIHRoZSByZWxldmFudCBwYWNrZXQgdHlwZSBpbmZvcm1hdGlvbi4KLQkJICovCi0JCWlmICghbGludXhfY2hlY2tfZGlyZWN0aW9uKGhhbmRsZSwgJmZyb20pKQotCQkJcmV0dXJuIDA7Ci0JfQotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX1BGX1BBQ0tFVF9TT0NLRVRTCi0JLyoKLQkgKiBJZiB0aGlzIGlzIGEgY29va2VkIGRldmljZSwgZmlsbCBpbiB0aGUgZmFrZSBwYWNrZXQgaGVhZGVyLgotCSAqLwotCWlmIChoYW5kbGVwLT5jb29rZWQpIHsKLQkJLyoKLQkJICogQWRkIHRoZSBsZW5ndGggb2YgdGhlIGZha2UgaGVhZGVyIHRvIHRoZSBsZW5ndGgKLQkJICogb2YgcGFja2V0IGRhdGEgd2UgcmVhZC4KLQkJICovCi0JCXBhY2tldF9sZW4gKz0gU0xMX0hEUl9MRU47Ci0KLQkJaGRycCA9IChzdHJ1Y3Qgc2xsX2hlYWRlciAqKWJwOwotCQloZHJwLT5zbGxfcGt0dHlwZSA9IG1hcF9wYWNrZXRfdHlwZV90b19zbGxfdHlwZShmcm9tLnNsbF9wa3R0eXBlKTsKLQkJaGRycC0+c2xsX2hhdHlwZSA9IGh0b25zKGZyb20uc2xsX2hhdHlwZSk7Ci0JCWhkcnAtPnNsbF9oYWxlbiA9IGh0b25zKGZyb20uc2xsX2hhbGVuKTsKLQkJbWVtY3B5KGhkcnAtPnNsbF9hZGRyLCBmcm9tLnNsbF9hZGRyLAotCQkgICAgKGZyb20uc2xsX2hhbGVuID4gU0xMX0FERFJMRU4pID8KLQkJICAgICAgU0xMX0FERFJMRU4gOgotCQkgICAgICBmcm9tLnNsbF9oYWxlbik7Ci0JCWhkcnAtPnNsbF9wcm90b2NvbCA9IGZyb20uc2xsX3Byb3RvY29sOworCQlyZXR1cm4gKDApOwogCX0KIAogCS8qCi0JICogU3RhcnQgb3V0IHdpdGggbm8gVkxBTiBpbmZvcm1hdGlvbi4KKwkgKiBUaGUgZGV2aWNlIHByZXN1bWFibHkganVzdCB3ZW50IGRvd24uCiAJICovCi0JYXV4X2RhdGEudmxhbl90YWdfcHJlc2VudCA9IDA7Ci0JYXV4X2RhdGEudmxhbl90YWcgPSAwOwotI2lmIGRlZmluZWQoSEFWRV9QQUNLRVRfQVVYREFUQSkgJiYgZGVmaW5lZChIQVZFX1NUUlVDVF9UUEFDS0VUX0FVWERBVEFfVFBfVkxBTl9UQ0kpCi0JaWYgKGhhbmRsZXAtPnZsYW5fb2Zmc2V0ICE9IC0xKSB7Ci0JCWZvciAoY21zZyA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNtc2c7IGNtc2cgPSBDTVNHX05YVEhEUigmbXNnLCBjbXNnKSkgewotCQkJc3RydWN0IHRwYWNrZXRfYXV4ZGF0YSAqYXV4OwotCQkJdW5zaWduZWQgaW50IGxlbjsKLQkJCXN0cnVjdCB2bGFuX3RhZyAqdGFnOwotCi0JCQlpZiAoY21zZy0+Y21zZ19sZW4gPCBDTVNHX0xFTihzaXplb2Yoc3RydWN0IHRwYWNrZXRfYXV4ZGF0YSkpIHx8Ci0JCQkgICAgY21zZy0+Y21zZ19sZXZlbCAhPSBTT0xfUEFDS0VUIHx8Ci0JCQkgICAgY21zZy0+Y21zZ190eXBlICE9IFBBQ0tFVF9BVVhEQVRBKSB7Ci0JCQkJLyoKLQkJCQkgKiBUaGlzIGlzbid0IGEgUEFDS0VUX0FVWERBVEEgYXV4aWxpYXJ5Ci0JCQkJICogZGF0YSBpdGVtLgotCQkJCSAqLwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlhdXggPSAoc3RydWN0IHRwYWNrZXRfYXV4ZGF0YSAqKUNNU0dfREFUQShjbXNnKTsKLQkJCWlmICghVkxBTl9WQUxJRChhdXgsIGF1eCkpIHsKLQkJCQkvKgotCQkJCSAqIFRoZXJlIGlzIG5vIFZMQU4gaW5mb3JtYXRpb24gaW4gdGhlCi0JCQkJICogYXV4aWxpYXJ5IGRhdGEuCi0JCQkJICovCi0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCWxlbiA9ICh1X2ludClwYWNrZXRfbGVuID4gaW92Lmlvdl9sZW4gPyBpb3YuaW92X2xlbiA6ICh1X2ludClwYWNrZXRfbGVuOwotCQkJaWYgKGxlbiA8ICh1X2ludCloYW5kbGVwLT52bGFuX29mZnNldCkKLQkJCQlicmVhazsKLQotCQkJLyoKLQkJCSAqIE1vdmUgZXZlcnl0aGluZyBpbiB0aGUgaGVhZGVyLCBleGNlcHQgdGhlCi0JCQkgKiB0eXBlIGZpZWxkLCBkb3duIFZMQU5fVEFHX0xFTiBieXRlcywgdG8KLQkJCSAqIGFsbG93IHVzIHRvIGluc2VydCB0aGUgVkxBTiB0YWcgYmV0d2VlbgotCQkJICogdGhhdCBzdHVmZiBhbmQgdGhlIHR5cGUgZmllbGQuCi0JCQkgKi8KLQkJCWJwIC09IFZMQU5fVEFHX0xFTjsKLQkJCW1lbW1vdmUoYnAsIGJwICsgVkxBTl9UQUdfTEVOLCBoYW5kbGVwLT52bGFuX29mZnNldCk7Ci0KLQkJCS8qCi0JCQkgKiBOb3cgaW5zZXJ0IHRoZSB0YWcuCi0JCQkgKi8KLQkJCXRhZyA9IChzdHJ1Y3Qgdmxhbl90YWcgKikoYnAgKyBoYW5kbGVwLT52bGFuX29mZnNldCk7Ci0JCQl0YWctPnZsYW5fdHBpZCA9IGh0b25zKFZMQU5fVFBJRChhdXgsIGF1eCkpOwotCQkJdGFnLT52bGFuX3RjaSA9IGh0b25zKGF1eC0+dHBfdmxhbl90Y2kpOwotCi0JCQkvKgotCQkJICogU2F2ZSBhIGZsYWcgaW5kaWNhdGluZyB0aGF0IHdlIGhhdmUgYSBWTEFOIHRhZywKLQkJCSAqIGFuZCB0aGUgVkxBTiBUQ0ksIHRvIGJwZl9hdXhfZGF0YSBzdHJ1Y3QgZm9yCi0JCQkgKiB1c2UgYnkgdGhlIEJQRiBmaWx0ZXIgaWYgd2UncmUgZG9pbmcgdGhlCi0JCQkgKiBmaWx0ZXJpbmcgaW4gdXNlcmxhbmQuCi0JCQkgKi8KLQkJCWF1eF9kYXRhLnZsYW5fdGFnX3ByZXNlbnQgPSAxOwotCQkJYXV4X2RhdGEudmxhbl90YWcgPSBodG9ucyhhdXgtPnRwX3ZsYW5fdGNpKSAmIDB4MGZmZjsKLQotCQkJLyoKLQkJCSAqIEFkZCB0aGUgdGFnIHRvIHRoZSBwYWNrZXQgbGVuZ3Rocy4KLQkJCSAqLwotCQkJcGFja2V0X2xlbiArPSBWTEFOX1RBR19MRU47Ci0JCX0KLQl9Ci0jZW5kaWYgLyogZGVmaW5lZChIQVZFX1BBQ0tFVF9BVVhEQVRBKSAmJiBkZWZpbmVkKEhBVkVfU1RSVUNUX1RQQUNLRVRfQVVYREFUQV9UUF9WTEFOX1RDSSkgKi8KLSNlbmRpZiAvKiBIQVZFX1BGX1BBQ0tFVF9TT0NLRVRTICovCi0KLQkvKgotCSAqIFhYWDogQWNjb3JkaW5nIHRvIHRoZSBrZXJuZWwgc291cmNlIHdlIHNob3VsZCBnZXQgdGhlIHJlYWwKLQkgKiBwYWNrZXQgbGVuIGlmIGNhbGxpbmcgcmVjdmZyb20gd2l0aCBNU0dfVFJVTkMgc2V0LiBJdCBkb2VzCi0JICogbm90IHNlZW0gdG8gd29yayBoZXJlIDooLCBidXQgaXQgaXMgc3VwcG9ydGVkIGJ5IHRoaXMgY29kZQotCSAqIGFueXdheS4KLQkgKiBUbyBiZSBob25lc3QgdGhlIGNvZGUgUkVMSUVTIG9uIHRoYXQgZmVhdHVyZSBzbyB0aGlzIGlzIHJlYWxseQotCSAqIGJyb2tlbiB3aXRoIDIuMi54IGtlcm5lbHMuCi0JICogSSBzcGVuZCBhIGRheSB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiBhbmQgSSBmb3VuZCBvdXQKLQkgKiB0aGF0IHRoZSBmb2xsb3dpbmcgaXMgaGFwcGVuaW5nOgotCSAqCi0JICogVGhlIHBhY2tldCBjb21lcyBmcm9tIGEgcmFuZG9tIGludGVyZmFjZSBhbmQgdGhlIHBhY2tldF9yY3YKLQkgKiBob29rIGlzIGNhbGxlZCB3aXRoIGEgY2xvbmUgb2YgdGhlIHBhY2tldC4gVGhhdCBjb2RlIGluc2VydHMKLQkgKiB0aGUgcGFja2V0IGludG8gdGhlIHJlY2VpdmUgcXVldWUgb2YgdGhlIHBhY2tldCBzb2NrZXQuCi0JICogSWYgYSBmaWx0ZXIgaXMgYXR0YWNoZWQgdG8gdGhhdCBzb2NrZXQgdGhhdCBmaWx0ZXIgaXMgcnVuCi0JICogZmlyc3QgLSBhbmQgdGhlcmUgbGllcyB0aGUgcHJvYmxlbS4gVGhlIGRlZmF1bHQgZmlsdGVyIGFsd2F5cwotCSAqIGN1dHMgdGhlIHBhY2tldCBhdCB0aGUgc25hcGxlbjoKLQkgKgotCSAqICMgdGNwZHVtcCAtZAotCSAqICgwMDApIHJldCAgICAgICM2OAotCSAqCi0JICogU28gdGhlIHBhY2tldCBmaWx0ZXIgY3V0cyBkb3duIHRoZSBwYWNrZXQuIFRoZSByZWN2ZnJvbSBjYWxsCi0JICogc2F5cyAiaGV5LCBpdCdzIG9ubHkgNjggYnl0ZXMsIGl0IGZpdHMgaW50byB0aGUgYnVmZmVyIiB3aXRoCi0JICogdGhlIHJlc3VsdCB0aGF0IHdlIGRvbid0IGdldCB0aGUgcmVhbCBwYWNrZXQgbGVuZ3RoLiBUaGlzCi0JICogaXMgdmFsaWQgYXQgbGVhc3QgdW50aWwga2VybmVsIDIuMi4xN3ByZTYuCi0JICoKLQkgKiBXZSBjdXJyZW50bHkgaGFuZGxlIHRoaXMgYnkgbWFraW5nIGEgY29weSBvZiB0aGUgZmlsdGVyCi0JICogcHJvZ3JhbSwgZml4aW5nIGFsbCAicmV0IiBpbnN0cnVjdGlvbnMgd2l0aCBub24temVybwotCSAqIG9wZXJhbmRzIHRvIGhhdmUgYW4gb3BlcmFuZCBvZiBNQVhJTVVNX1NOQVBMRU4gc28gdGhhdCB0aGUKLQkgKiBmaWx0ZXIgZG9lc24ndCB0cnVuY2F0ZSB0aGUgcGFja2V0LCBhbmQgc3VwcGx5aW5nIHRoYXQgbW9kaWZpZWQKLQkgKiBmaWx0ZXIgdG8gdGhlIGtlcm5lbC4KLQkgKi8KLQotCWNhcGxlbiA9IHBhY2tldF9sZW47Ci0JaWYgKGNhcGxlbiA+IGhhbmRsZS0+c25hcHNob3QpCi0JCWNhcGxlbiA9IGhhbmRsZS0+c25hcHNob3Q7Ci0KLQkvKiBSdW4gdGhlIHBhY2tldCBmaWx0ZXIgaWYgbm90IHVzaW5nIGtlcm5lbCBmaWx0ZXIgKi8KLQlpZiAoaGFuZGxlcC0+ZmlsdGVyX2luX3VzZXJsYW5kICYmIGhhbmRsZS0+ZmNvZGUuYmZfaW5zbnMpIHsKLQkJaWYgKGJwZl9maWx0ZXJfd2l0aF9hdXhfZGF0YShoYW5kbGUtPmZjb2RlLmJmX2luc25zLCBicCwKLQkJICAgIHBhY2tldF9sZW4sIGNhcGxlbiwgJmF1eF9kYXRhKSA9PSAwKSB7Ci0JCQkvKiByZWplY3RlZCBieSBmaWx0ZXIgKi8KLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCi0JLyogRmlsbCBpbiBvdXIgb3duIGhlYWRlciBkYXRhICovCi0KLQkvKiBnZXQgdGltZXN0YW1wIGZvciB0aGlzIHBhY2tldCAqLwotI2lmIGRlZmluZWQoU0lPQ0dTVEFNUE5TKSAmJiBkZWZpbmVkKFNPX1RJTUVTVEFNUE5TKQotCWlmIChoYW5kbGUtPm9wdC50c3RhbXBfcHJlY2lzaW9uID09IFBDQVBfVFNUQU1QX1BSRUNJU0lPTl9OQU5PKSB7Ci0JCWlmIChpb2N0bChoYW5kbGUtPmZkLCBTSU9DR1NUQU1QTlMsICZwY2FwX2hlYWRlci50cykgPT0gLTEpIHsKLQkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oaGFuZGxlLT5lcnJidWYsCi0JCQkgICAgUENBUF9FUlJCVUZfU0laRSwgZXJybm8sICJTSU9DR1NUQU1QTlMiKTsKLQkJCXJldHVybiBQQ0FQX0VSUk9SOwotCQl9Ci0gICAgICAgIH0gZWxzZQotI2VuZGlmCi0JewotCQlpZiAoaW9jdGwoaGFuZGxlLT5mZCwgU0lPQ0dTVEFNUCwgJnBjYXBfaGVhZGVyLnRzKSA9PSAtMSkgewotCQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhoYW5kbGUtPmVycmJ1ZiwKLQkJCSAgICBQQ0FQX0VSUkJVRl9TSVpFLCBlcnJubywgIlNJT0NHU1RBTVAiKTsKLQkJCXJldHVybiBQQ0FQX0VSUk9SOwotCQl9Ci0gICAgICAgIH0KLQotCXBjYXBfaGVhZGVyLmNhcGxlbgk9IGNhcGxlbjsKLQlwY2FwX2hlYWRlci5sZW4JCT0gcGFja2V0X2xlbjsKLQotCS8qCi0JICogQ291bnQgdGhlIHBhY2tldC4KLQkgKgotCSAqIEFyZ3VhYmx5LCB3ZSBzaG91bGQgY291bnQgdGhlbSBiZWZvcmUgd2UgY2hlY2sgdGhlIGZpbHRlciwKLQkgKiBhcyBvbiBtYW55IG90aGVyIHBsYXRmb3JtcyAicHNfcmVjdiIgY291bnRzIHBhY2tldHMKLQkgKiBoYW5kZWQgdG8gdGhlIGZpbHRlciByYXRoZXIgdGhhbiBwYWNrZXRzIHRoYXQgcGFzc2VkCi0JICogdGhlIGZpbHRlciwgYnV0IGlmIGZpbHRlcmluZyBpcyBkb25lIGluIHRoZSBrZXJuZWwsIHdlCi0JICogY2FuJ3QgZ2V0IGEgY291bnQgb2YgcGFja2V0cyB0aGF0IHBhc3NlZCB0aGUgZmlsdGVyLAotCSAqIGFuZCB0aGF0IHdvdWxkIG1lYW4gdGhlIG1lYW5pbmcgb2YgInBzX3JlY3YiIHdvdWxkbid0Ci0JICogYmUgdGhlIHNhbWUgb24gYWxsIExpbnV4IHN5c3RlbXMuCi0JICoKLQkgKiBYWFggLSBpdCdzIG5vdCB0aGUgc2FtZSBvbiBhbGwgc3lzdGVtcyBpbiBhbnkgY2FzZTsKLQkgKiBpZGVhbGx5LCB3ZSBzaG91bGQgaGF2ZSBhICJnZXQgdGhlIHN0YXRpc3RpY3MiIGNhbGwKLQkgKiB0aGF0IHN1cHBsaWVzIG1vcmUgY291bnRzIGFuZCBpbmRpY2F0ZXMgd2hpY2ggb2YgdGhlbQotCSAqIGl0IHN1cHBsaWVzLCBzbyB0aGF0IHdlIHN1cHBseSBhIGNvdW50IG9mIHBhY2tldHMKLQkgKiBoYW5kZWQgdG8gdGhlIGZpbHRlciBvbmx5IG9uIHBsYXRmb3JtcyB3aGVyZSB0aGF0Ci0JICogaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLgotCSAqCi0JICogV2UgY291bnQgdGhlbSBoZXJlIGV2ZW4gaWYgd2UgY2FuIGdldCB0aGUgcGFja2V0IGNvdW50Ci0JICogZnJvbSB0aGUga2VybmVsLCBhcyB3ZSBjYW4gb25seSBkZXRlcm1pbmUgYXQgcnVuIHRpbWUKLQkgKiB3aGV0aGVyIHdlJ2xsIGJlIGFibGUgdG8gZ2V0IGl0IGZyb20gdGhlIGtlcm5lbCAoaWYKLQkgKiBIQVZFX1NUUlVDVF9UUEFDS0VUX1NUQVRTIGlzbid0IGRlZmluZWQsIHdlIGNhbid0IGdldCBpdCBmcm9tCi0JICogdGhlIGtlcm5lbCwgYnV0IGlmIGl0IGlzIGRlZmluZWQsIHRoZSBsaWJyYXJ5IG1pZ2h0Ci0JICogaGF2ZSBiZWVuIGJ1aWx0IHdpdGggYSAyLjQgb3IgbGF0ZXIga2VybmVsLCBidXQgd2UKLQkgKiBtaWdodCBiZSBydW5uaW5nIG9uIGEgMi4yWy54XSBrZXJuZWwgd2l0aG91dCBBbGV4ZXkKLQkgKiBLdXpuZXR6b3YncyB0dXJib3BhY2tldCBwYXRjaGVzLCBhbmQgdGh1cyB0aGUga2VybmVsCi0JICogbWlnaHQgbm90IGJlIGFibGUgdG8gc3VwcGx5IHRob3NlIHN0YXRpc3RpY3MpLiAgV2UKLQkgKiBjb3VsZCwgSSBndWVzcywgdHJ5LCB3aGVuIG9wZW5pbmcgdGhlIHNvY2tldCwgdG8gZ2V0Ci0JICogdGhlIHN0YXRpc3RpY3MsIGFuZCBpZiB3ZSBjYW4gbm90IGluY3JlbWVudCB0aGUgY291bnQKLQkgKiBoZXJlLCBidXQgaXQncyBub3QgY2xlYXIgdGhhdCBhbHdheXMgaW5jcmVtZW50aW5nCi0JICogdGhlIGNvdW50IGlzIG1vcmUgZXhwZW5zaXZlIHRoYW4gYWx3YXlzIHRlc3RpbmcgYSBmbGFnCi0JICogaW4gbWVtb3J5LgotCSAqCi0JICogV2Uga2VlcCB0aGUgY291bnQgaW4gImhhbmRsZXAtPnBhY2tldHNfcmVhZCIsIGFuZCB1c2UgdGhhdAotCSAqIGZvciAicHNfcmVjdiIgaWYgd2UgY2FuJ3QgZ2V0IHRoZSBzdGF0aXN0aWNzIGZyb20gdGhlIGtlcm5lbC4KLQkgKiBXZSBkbyB0aGF0IGJlY2F1c2UsIGlmIHdlICpjYW4qIGdldCB0aGUgc3RhdGlzdGljcyBmcm9tCi0JICogdGhlIGtlcm5lbCwgd2UgdXNlICJoYW5kbGVwLT5zdGF0LnBzX3JlY3YiIGFuZAotCSAqICJoYW5kbGVwLT5zdGF0LnBzX2Ryb3AiIGFzIHJ1bm5pbmcgY291bnRzLCBhcyByZWFkaW5nIHRoZQotCSAqIHN0YXRpc3RpY3MgZnJvbSB0aGUga2VybmVsIHJlc2V0cyB0aGUga2VybmVsIHN0YXRpc3RpY3MsCi0JICogYW5kIGlmIHdlIGRpcmVjdGx5IGluY3JlbWVudCAiaGFuZGxlcC0+c3RhdC5wc19yZWN2IiBoZXJlLAotCSAqIHRoYXQgbWVhbnMgaXQgd2lsbCBjb3VudCBwYWNrZXRzICp0d2ljZSogb24gc3lzdGVtcyB3aGVyZQotCSAqIHdlIGNhbiBnZXQga2VybmVsIHN0YXRpc3RpY3MgLSBvbmNlIGhlcmUsIGFuZCBvbmNlIGluCi0JICogcGNhcF9zdGF0c19saW51eCgpLgotCSAqLwotCWhhbmRsZXAtPnBhY2tldHNfcmVhZCsrOwotCi0JLyogQ2FsbCB0aGUgdXNlciBzdXBwbGllZCBjYWxsYmFjayBmdW5jdGlvbiAqLwotCWNhbGxiYWNrKHVzZXJkYXRhLCAmcGNhcF9oZWFkZXIsIGJwKTsKLQotCXJldHVybiAxOworCXJldHVybiAoMSk7CiB9CiAKIHN0YXRpYyBpbnQKLXBjYXBfaW5qZWN0X2xpbnV4KHBjYXBfdCAqaGFuZGxlLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplKQorcGNhcF9pbmplY3RfbGludXgocGNhcF90ICpoYW5kbGUsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IHNpemUpCiB7CiAJc3RydWN0IHBjYXBfbGludXggKmhhbmRsZXAgPSBoYW5kbGUtPnByaXY7CiAJaW50IHJldDsKIAotI2lmZGVmIEhBVkVfUEZfUEFDS0VUX1NPQ0tFVFMKLQlpZiAoIWhhbmRsZXAtPnNvY2tfcGFja2V0KSB7Ci0JCS8qIFBGX1BBQ0tFVCBzb2NrZXQgKi8KLQkJaWYgKGhhbmRsZXAtPmlmaW5kZXggPT0gLTEpIHsKLQkJCS8qCi0JCQkgKiBXZSBkb24ndCBzdXBwb3J0IHNlbmRpbmcgb24gdGhlICJhbnkiIGRldmljZS4KLQkJCSAqLwotCQkJc3RybGNweShoYW5kbGUtPmVycmJ1ZiwKLQkJCSAgICAiU2VuZGluZyBwYWNrZXRzIGlzbid0IHN1cHBvcnRlZCBvbiB0aGUgXCJhbnlcIiBkZXZpY2UiLAotCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUpOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQotCQlpZiAoaGFuZGxlcC0+Y29va2VkKSB7Ci0JCQkvKgotCQkJICogV2UgZG9uJ3Qgc3VwcG9ydCBzZW5kaW5nIG9uIHRoZSAiYW55IiBkZXZpY2UuCi0JCQkgKgotCQkJICogWFhYIC0gaG93IGRvIHlvdSBzZW5kIG9uIGEgYm91bmQgY29va2VkLW1vZGUKLQkJCSAqIHNvY2tldD8KLQkJCSAqIElzIGEgInNlbmR0bygpIiByZXF1aXJlZCB0aGVyZT8KLQkJCSAqLwotCQkJc3RybGNweShoYW5kbGUtPmVycmJ1ZiwKLQkJCSAgICAiU2VuZGluZyBwYWNrZXRzIGlzbid0IHN1cHBvcnRlZCBpbiBjb29rZWQgbW9kZSIsCi0JCQkgICAgUENBUF9FUlJCVUZfU0laRSk7Ci0JCQlyZXR1cm4gKC0xKTsKLQkJfQorCWlmIChoYW5kbGVwLT5pZmluZGV4ID09IC0xKSB7CisJCS8qCisJCSAqIFdlIGRvbid0IHN1cHBvcnQgc2VuZGluZyBvbiB0aGUgImFueSIgZGV2aWNlLgorCQkgKi8KKwkJcGNhcF9zdHJsY3B5KGhhbmRsZS0+ZXJyYnVmLAorCQkgICAgIlNlbmRpbmcgcGFja2V0cyBpc24ndCBzdXBwb3J0ZWQgb24gdGhlIFwiYW55XCIgZGV2aWNlIiwKKwkJICAgIFBDQVBfRVJSQlVGX1NJWkUpOworCQlyZXR1cm4gKC0xKTsKIAl9Ci0jZW5kaWYKIAotCXJldCA9IHNlbmQoaGFuZGxlLT5mZCwgYnVmLCBzaXplLCAwKTsKKwlpZiAoaGFuZGxlcC0+Y29va2VkKSB7CisJCS8qCisJCSAqIFdlIGRvbid0IHN1cHBvcnQgc2VuZGluZyBvbiBjb29rZWQtbW9kZSBzb2NrZXRzLgorCQkgKgorCQkgKiBYWFggLSBob3cgZG8geW91IHNlbmQgb24gYSBib3VuZCBjb29rZWQtbW9kZQorCQkgKiBzb2NrZXQ/CisJCSAqIElzIGEgInNlbmR0bygpIiByZXF1aXJlZCB0aGVyZT8KKwkJICovCisJCXBjYXBfc3RybGNweShoYW5kbGUtPmVycmJ1ZiwKKwkJICAgICJTZW5kaW5nIHBhY2tldHMgaXNuJ3Qgc3VwcG9ydGVkIGluIGNvb2tlZCBtb2RlIiwKKwkJICAgIFBDQVBfRVJSQlVGX1NJWkUpOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlyZXQgPSAoaW50KXNlbmQoaGFuZGxlLT5mZCwgYnVmLCBzaXplLCAwKTsKIAlpZiAocmV0ID09IC0xKSB7CiAJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICBlcnJubywgInNlbmQiKTsKQEAgLTIxNTQsMjcgKzEyNDEsMjAgQEAKIAogLyoKICAqICBHZXQgdGhlIHN0YXRpc3RpY3MgZm9yIHRoZSBnaXZlbiBwYWNrZXQgY2FwdHVyZSBoYW5kbGUuCi0gKiAgUmVwb3J0cyB0aGUgbnVtYmVyIG9mIGRyb3BwZWQgcGFja2V0cyBpZmYgdGhlIGtlcm5lbCBzdXBwb3J0cwotICogIHRoZSBQQUNLRVRfU1RBVElTVElDUyAiZ2V0c29ja29wdCgpIiBhcmd1bWVudCAoMi40IGFuZCBsYXRlcgotICogIGtlcm5lbHMsIGFuZCAyLjJbLnhdIGtlcm5lbHMgd2l0aCBBbGV4ZXkgS3V6bmV0em92J3MgdHVyYm9wYWNrZXQKLSAqICBwYXRjaGVzKTsgb3RoZXJ3aXNlLCB0aGF0IGluZm9ybWF0aW9uIGlzbid0IGF2YWlsYWJsZSwgYW5kIHdlIGxpZQotICogIGFuZCByZXBvcnQgMCBhcyB0aGUgY291bnQgb2YgZHJvcHBlZCBwYWNrZXRzLgogICovCiBzdGF0aWMgaW50CiBwY2FwX3N0YXRzX2xpbnV4KHBjYXBfdCAqaGFuZGxlLCBzdHJ1Y3QgcGNhcF9zdGF0ICpzdGF0cykKIHsKIAlzdHJ1Y3QgcGNhcF9saW51eCAqaGFuZGxlcCA9IGhhbmRsZS0+cHJpdjsKLSNpZmRlZiBIQVZFX1NUUlVDVF9UUEFDS0VUX1NUQVRTCiAjaWZkZWYgSEFWRV9UUEFDS0VUMwogCS8qCi0JICogRm9yIHNvY2tldHMgdXNpbmcgVFBBQ0tFVF9WMSBvciBUUEFDS0VUX1YyLCB0aGUgZXh0cmEKLQkgKiBzdHVmZiBhdCB0aGUgZW5kIG9mIGEgc3RydWN0IHRwYWNrZXRfc3RhdHNfdjMgd2lsbCBub3QKLQkgKiBiZSBmaWxsZWQgaW4sIGFuZCB3ZSBkb24ndCBsb29rIGF0IGl0IHNvIHRoaXMgaXMgT0sgZXZlbgotCSAqIGZvciB0aG9zZSBzb2NrZXRzLiAgSW4gYWRkaXRpb24sIHRoZSBQRl9QQUNLRVQgc29ja2V0Ci0JICogY29kZSBpbiB0aGUga2VybmVsIG9ubHkgdXNlcyB0aGUgbGVuZ3RoIHBhcmFtZXRlciB0bwotCSAqIGNvbXB1dGUgaG93IG11Y2ggZGF0YSB0byBjb3B5IG91dCBhbmQgdG8gaW5kaWNhdGUgaG93Ci0JICogbXVjaCBkYXRhIHdhcyBjb3BpZWQgb3V0LCBzbyBpdCdzIE9LIHRvIGJhc2UgaXQgb24gdGhlCi0JICogc2l6ZSBvZiBhIHN0cnVjdCB0cGFja2V0X3N0YXRzLgorCSAqIEZvciBzb2NrZXRzIHVzaW5nIFRQQUNLRVRfVjIsIHRoZSBleHRyYSBzdHVmZiBhdCB0aGUgZW5kCisJICogb2YgYSBzdHJ1Y3QgdHBhY2tldF9zdGF0c192MyB3aWxsIG5vdCBiZSBmaWxsZWQgaW4sIGFuZAorCSAqIHdlIGRvbid0IGxvb2sgYXQgaXQgc28gdGhpcyBpcyBPSyBldmVuIGZvciB0aG9zZSBzb2NrZXRzLgorCSAqIEluIGFkZGl0aW9uLCB0aGUgUEZfUEFDS0VUIHNvY2tldCBjb2RlIGluIHRoZSBrZXJuZWwgb25seQorCSAqIHVzZXMgdGhlIGxlbmd0aCBwYXJhbWV0ZXIgdG8gY29tcHV0ZSBob3cgbXVjaCBkYXRhIHRvCisJICogY29weSBvdXQgYW5kIHRvIGluZGljYXRlIGhvdyBtdWNoIGRhdGEgd2FzIGNvcGllZCBvdXQsIHNvCisJICogaXQncyBPSyB0byBiYXNlIGl0IG9uIHRoZSBzaXplIG9mIGEgc3RydWN0IHRwYWNrZXRfc3RhdHMuCiAJICoKIAkgKiBYWFggLSBpdCdzIHByb2JhYmx5IE9LLCBpbiBmYWN0LCB0byBqdXN0IHVzZSBhCiAJICogc3RydWN0IHRwYWNrZXRfc3RhdHMgZm9yIFYzIHNvY2tldHMsIGFzIHdlIGRvbid0CkBAIC0yMTg1LDUyICsxMjY1LDc3IEBACiAJc3RydWN0IHRwYWNrZXRfc3RhdHMga3N0YXRzOwogI2VuZGlmIC8qIEhBVkVfVFBBQ0tFVDMgKi8KIAlzb2NrbGVuX3QgbGVuID0gc2l6ZW9mIChzdHJ1Y3QgdHBhY2tldF9zdGF0cyk7Ci0jZW5kaWYgLyogSEFWRV9TVFJVQ1RfVFBBQ0tFVF9TVEFUUyAqLwogCi0JbG9uZyBpZl9kcm9wcGVkID0gMDsKKwlsb25nIGxvbmcgaWZfZHJvcHBlZCA9IDA7CiAKIAkvKgotCSAqCVRvIGZpbGwgaW4gcHNfaWZkcm9wLCB3ZSBwYXJzZSAvcHJvYy9uZXQvZGV2IGZvciB0aGUgbnVtYmVyCisJICogVG8gZmlsbCBpbiBwc19pZmRyb3AsIHdlIHBhcnNlCisJICogL3N5cy9jbGFzcy9uZXQve2lmX25hbWV9L3N0YXRpc3RpY3Mvcnhfe21pc3NlZCxmaWZvfV9lcnJvcnMKKwkgKiBmb3IgdGhlIG51bWJlcnMKIAkgKi8KIAlpZiAoaGFuZGxlLT5vcHQucHJvbWlzYykKIAl7Ci0JCWlmX2Ryb3BwZWQgPSBoYW5kbGVwLT5wcm9jX2Ryb3BwZWQ7Ci0JCWhhbmRsZXAtPnByb2NfZHJvcHBlZCA9IGxpbnV4X2lmX2Ryb3BzKGhhbmRsZXAtPmRldmljZSk7Ci0JCWhhbmRsZXAtPnN0YXQucHNfaWZkcm9wICs9IChoYW5kbGVwLT5wcm9jX2Ryb3BwZWQgLSBpZl9kcm9wcGVkKTsKKwkJLyoKKwkJICogWFhYIC0gaXMgdGhlcmUgYW55IHJlYXNvbiB0byBkbyB0aGlzIGJ5IHJlbWVtYmVyaW5nCisJCSAqIHRoZSBsYXN0IGNvdW50cyB2YWx1ZSwgc3VidHJhY3RpbmcgaXQgZnJvbSB0aGUKKwkJICogY3VycmVudCBjb3VudHMgdmFsdWUsIGFuZCBhZGRpbmcgdGhhdCB0byBzdGF0LnBzX2lmZHJvcCwKKwkJICogbWFpbnRhaW5pbmcgc3RhdC5wc19pZmRyb3AgYXMgYSBjb3VudCwgcmF0aGVyIHRoYW4ganVzdAorCQkgKiBzYXZpbmcgdGhlICppbml0aWFsKiBjb3VudHMgdmFsdWUgYW5kIHNldHRpbmcKKwkJICogc3RhdC5wc19pZmRyb3AgdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY3VycmVudAorCQkgKiB2YWx1ZSBhbmQgdGhlIGluaXRpYWwgdmFsdWU/CisJCSAqCisJCSAqIE9uZSByZWFzb24gbWlnaHQgYmUgdG8gaGFuZGxlIHRoZSBjb3VudCB3cmFwcGluZworCQkgKiBhcm91bmQsIG9uIHBsYXRmb3JtcyB3aGVyZSB0aGUgY291bnQgaXMgMzIgYml0cworCQkgKiBhbmQgd2hlcmUgeW91IG1pZ2h0IGdldCBtb3JlIHRoYW4gMl4zMiBkcm9wcGVkCisJCSAqIHBhY2tldHM7IGlzIHRoZXJlIGFueSBvdGhlciByZWFzb24/CisJCSAqCisJCSAqIChXZSBtYWludGFpbiB0aGUgY291bnQgYXMgYSBsb25nIGxvbmcgaW50IHNvIHRoYXQsCisJCSAqIGlmIHRoZSBrZXJuZWwgbWFpbnRhaW5zIHRoZSBjb3VudHMgYXMgNjQtYml0IGV2ZW4KKwkJICogb24gMzItYml0IHBsYXRmb3Jtcywgd2UgY2FuIGhhbmRsZSB0aGUgcmVhbCBjb3VudC4KKwkJICoKKwkJICogVW5mb3J0dW5hdGVseSwgd2UgY2FuJ3QgcmVwb3J0IDY0LWJpdCBjb3VudHM7IHdlCisJCSAqIG5lZWQgYSBiZXR0ZXIgQVBJIGZvciByZXBvcnRpbmcgc3RhdGlzdGljcywgc3VjaCBhcworCQkgKiBvbmUgdGhhdCByZXBvcnRzIHRoZW0gaW4gYSBzdHlsZSBzaW1pbGFyIHRvIHRoZQorCQkgKiBwY2FwbmcgSW50ZXJmYWNlIFN0YXRpc3RpY3MgQmxvY2ssIHNvIHRoYXQgMSkgdGhlCisJCSAqIGNvdW50cyBhcmUgNjQtYml0LCAyKSBpdCdzIGVhc2llciB0byBhZGQgbmV3IHN0YXRpc3RpY3MKKwkJICogd2l0aG91dCBicmVha2luZyB0aGUgQUJJLCBhbmQgMykgaXQncyBlYXNpZXIgdG8KKwkJICogaW5kaWNhdGUgdG8gYSBjYWxsZXIgdGhhdCB3YW50cyBvbmUgcGFydGljdWxhcgorCQkgKiBzdGF0aXN0aWMgdGhhdCBpdCdzIG5vdCBhdmFpbGFibGUgYnkganVzdCBub3Qgc3VwcGx5aW5nCisJCSAqIGl0LikKKwkJICovCisJCWlmX2Ryb3BwZWQgPSBoYW5kbGVwLT5zeXNmc19kcm9wcGVkOworCQloYW5kbGVwLT5zeXNmc19kcm9wcGVkID0gbGludXhfaWZfZHJvcHMoaGFuZGxlcC0+ZGV2aWNlKTsKKwkJaGFuZGxlcC0+c3RhdC5wc19pZmRyb3AgKz0gKHVfaW50KShoYW5kbGVwLT5zeXNmc19kcm9wcGVkIC0gaWZfZHJvcHBlZCk7CiAJfQogCi0jaWZkZWYgSEFWRV9TVFJVQ1RfVFBBQ0tFVF9TVEFUUwogCS8qCiAJICogVHJ5IHRvIGdldCB0aGUgcGFja2V0IGNvdW50cyBmcm9tIHRoZSBrZXJuZWwuCiAJICovCiAJaWYgKGdldHNvY2tvcHQoaGFuZGxlLT5mZCwgU09MX1BBQ0tFVCwgUEFDS0VUX1NUQVRJU1RJQ1MsCiAJCQkma3N0YXRzLCAmbGVuKSA+IC0xKSB7CiAJCS8qCi0JCSAqIE9uIHN5c3RlbXMgd2hlcmUgdGhlIFBBQ0tFVF9TVEFUSVNUSUNTICJnZXRzb2Nrb3B0KCkiCi0JCSAqIGFyZ3VtZW50IGlzIHN1cHBvcnRlZCBvbiBQRl9QQUNLRVQgc29ja2V0czoKKwkJICogInBzX3JlY3YiIGNvdW50cyBvbmx5IHBhY2tldHMgdGhhdCAqcGFzc2VkKiB0aGUKKwkJICogZmlsdGVyLCBub3QgcGFja2V0cyB0aGF0IGRpZG4ndCBwYXNzIHRoZSBmaWx0ZXIuCisJCSAqIFRoaXMgaW5jbHVkZXMgcGFja2V0cyBsYXRlciBkcm9wcGVkIGJlY2F1c2Ugd2UKKwkJICogcmFuIG91dCBvZiBidWZmZXIgc3BhY2UuCiAJCSAqCi0JCSAqCSJwc19yZWN2IiBjb3VudHMgb25seSBwYWNrZXRzIHRoYXQgKnBhc3NlZCogdGhlCi0JCSAqCWZpbHRlciwgbm90IHBhY2tldHMgdGhhdCBkaWRuJ3QgcGFzcyB0aGUgZmlsdGVyLgotCQkgKglUaGlzIGluY2x1ZGVzIHBhY2tldHMgbGF0ZXIgZHJvcHBlZCBiZWNhdXNlIHdlCi0JCSAqCXJhbiBvdXQgb2YgYnVmZmVyIHNwYWNlLgorCQkgKiAicHNfZHJvcCIgY291bnRzIHBhY2tldHMgZHJvcHBlZCBiZWNhdXNlIHdlIHJhbgorCQkgKiBvdXQgb2YgYnVmZmVyIHNwYWNlLiAgSXQgZG9lc24ndCBjb3VudCBwYWNrZXRzCisJCSAqIGRyb3BwZWQgYnkgdGhlIGludGVyZmFjZSBkcml2ZXIuICBJdCBjb3VudHMgb25seQorCQkgKiBwYWNrZXRzIHRoYXQgcGFzc2VkIHRoZSBmaWx0ZXIuCiAJCSAqCi0JCSAqCSJwc19kcm9wIiBjb3VudHMgcGFja2V0cyBkcm9wcGVkIGJlY2F1c2Ugd2UgcmFuCi0JCSAqCW91dCBvZiBidWZmZXIgc3BhY2UuICBJdCBkb2Vzbid0IGNvdW50IHBhY2tldHMKLQkJICoJZHJvcHBlZCBieSB0aGUgaW50ZXJmYWNlIGRyaXZlci4gIEl0IGNvdW50cyBvbmx5Ci0JCSAqCXBhY2tldHMgdGhhdCBwYXNzZWQgdGhlIGZpbHRlci4KKwkJICogU2VlIGFib3ZlIGZvciBwc19pZmRyb3AuCiAJCSAqCi0JCSAqCVNlZSBhYm92ZSBmb3IgcHNfaWZkcm9wLgorCQkgKiBCb3RoIHN0YXRpc3RpY3MgaW5jbHVkZSBwYWNrZXRzIG5vdCB5ZXQgcmVhZCBmcm9tCisJCSAqIHRoZSBrZXJuZWwgYnkgbGlicGNhcCwgYW5kIHRodXMgbm90IHlldCBzZWVuIGJ5CisJCSAqIHRoZSBhcHBsaWNhdGlvbi4KIAkJICoKLQkJICoJQm90aCBzdGF0aXN0aWNzIGluY2x1ZGUgcGFja2V0cyBub3QgeWV0IHJlYWQgZnJvbQotCQkgKgl0aGUga2VybmVsIGJ5IGxpYnBjYXAsIGFuZCB0aHVzIG5vdCB5ZXQgc2VlbiBieQotCQkgKgl0aGUgYXBwbGljYXRpb24uCi0JCSAqCi0JCSAqIEluICJsaW51eC9uZXQvcGFja2V0L2FmX3BhY2tldC5jIiwgYXQgbGVhc3QgaW4gdGhlCi0JCSAqIDIuNC45IGtlcm5lbCwgInRwX3BhY2tldHMiIGlzIGluY3JlbWVudGVkIGZvciBldmVyeQotCQkgKiBwYWNrZXQgdGhhdCBwYXNzZXMgdGhlIHBhY2tldCBmaWx0ZXIgKmFuZCogaXMKLQkJICogc3VjY2Vzc2Z1bGx5IHF1ZXVlZCBvbiB0aGUgc29ja2V0OyAidHBfZHJvcHMiIGlzCisJCSAqIEluICJsaW51eC9uZXQvcGFja2V0L2FmX3BhY2tldC5jIiwgYXQgbGVhc3QgaW4gMi42LjI3CisJCSAqIHRocm91Z2ggNS42IGtlcm5lbHMsICJ0cF9wYWNrZXRzIiBpcyBpbmNyZW1lbnRlZCBmb3IKKwkJICogZXZlcnkgcGFja2V0IHRoYXQgcGFzc2VzIHRoZSBwYWNrZXQgZmlsdGVyICphbmQqIGlzCisJCSAqIHN1Y2Nlc3NmdWxseSBjb3BpZWQgdG8gdGhlIHJpbmcgYnVmZmVyOyAidHBfZHJvcHMiIGlzCiAJCSAqIGluY3JlbWVudGVkIGZvciBldmVyeSBwYWNrZXQgZHJvcHBlZCBiZWNhdXNlIHRoZXJlJ3MKLQkJICogbm90IGVub3VnaCBmcmVlIHNwYWNlIGluIHRoZSBzb2NrZXQgYnVmZmVyLgorCQkgKiBub3QgZW5vdWdoIGZyZWUgc3BhY2UgaW4gdGhlIHJpbmcgYnVmZmVyLgogCQkgKgogCQkgKiBXaGVuIHRoZSBzdGF0aXN0aWNzIGFyZSByZXR1cm5lZCBmb3IgYSBQQUNLRVRfU1RBVElTVElDUwogCQkgKiAiZ2V0c29ja29wdCgpIiBjYWxsLCAidHBfZHJvcHMiIGlzIGFkZGVkIHRvICJ0cF9wYWNrZXRzIiwKQEAgLTIyNTcsMzM2ICsxMzYyLDEwIEBACiAJCSpzdGF0cyA9IGhhbmRsZXAtPnN0YXQ7CiAJCXJldHVybiAwOwogCX0KLQllbHNlCi0JewotCQkvKgotCQkgKiBJZiB0aGUgZXJyb3Igd2FzIEVPUE5PVFNVUFAsIGZhbGwgdGhyb3VnaCwgc28gdGhhdAotCQkgKiBpZiB5b3UgYnVpbGQgdGhlIGxpYnJhcnkgb24gYSBzeXN0ZW0gd2l0aAotCQkgKiAic3RydWN0IHRwYWNrZXRfc3RhdHMiIGFuZCBydW4gaXQgb24gYSBzeXN0ZW0KLQkJICogdGhhdCBkb2Vzbid0LCBpdCB3b3JrcyBhcyBpdCBkb2VzIGlmIHRoZSBsaWJyYXJ5Ci0JCSAqIGlzIGJ1aWx0IG9uIGEgc3lzdGVtIHdpdGhvdXQgInN0cnVjdCB0cGFja2V0X3N0YXRzIi4KLQkJICovCi0JCWlmIChlcnJubyAhPSBFT1BOT1RTVVBQKSB7Ci0JCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGhhbmRsZS0+ZXJyYnVmLAotCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsIGVycm5vLCAicGNhcF9zdGF0cyIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotI2VuZGlmCi0JLyoKLQkgKiBPbiBzeXN0ZW1zIHdoZXJlIHRoZSBQQUNLRVRfU1RBVElTVElDUyAiZ2V0c29ja29wdCgpIiBhcmd1bWVudAotCSAqIGlzIG5vdCBzdXBwb3J0ZWQgb24gUEZfUEFDS0VUIHNvY2tldHM6Ci0JICoKLQkgKgkicHNfcmVjdiIgY291bnRzIG9ubHkgcGFja2V0cyB0aGF0ICpwYXNzZWQqIHRoZSBmaWx0ZXIsCi0JICoJbm90IHBhY2tldHMgdGhhdCBkaWRuJ3QgcGFzcyB0aGUgZmlsdGVyLiAgSXQgZG9lcyBub3QKLQkgKgljb3VudCBwYWNrZXRzIGRyb3BwZWQgYmVjYXVzZSB3ZSByYW4gb3V0IG9mIGJ1ZmZlcgotCSAqCXNwYWNlLgotCSAqCi0JICoJInBzX2Ryb3AiIGlzIG5vdCBzdXBwb3J0ZWQuCi0JICoKLQkgKgkicHNfaWZkcm9wIiBpcyBzdXBwb3J0ZWQuIEl0IHdpbGwgcmV0dXJuIHRoZSBudW1iZXIKLQkgKglvZiBkcm9wcyB0aGUgaW50ZXJmYWNlIHJlcG9ydHMgaW4gL3Byb2MvbmV0L2RldiwKLQkgKglpZiB0aGF0IGlzIGF2YWlsYWJsZS4KLQkgKgotCSAqCSJwc19yZWN2IiBkb2Vzbid0IGluY2x1ZGUgcGFja2V0cyBub3QgeWV0IHJlYWQgZnJvbQotCSAqCXRoZSBrZXJuZWwgYnkgbGlicGNhcC4KLQkgKgotCSAqIFdlIG1haW50YWluIHRoZSBjb3VudCBvZiBwYWNrZXRzIHByb2Nlc3NlZCBieSBsaWJwY2FwIGluCi0JICogImhhbmRsZXAtPnBhY2tldHNfcmVhZCIsIGZvciByZWFzb25zIGRlc2NyaWJlZCBpbiB0aGUgY29tbWVudAotCSAqIGF0IHRoZSBlbmQgb2YgcGNhcF9yZWFkX3BhY2tldCgpLiAgV2UgaGF2ZSBubyBpZGVhIGhvdyBtYW55Ci0JICogcGFja2V0cyB3ZXJlIGRyb3BwZWQgYnkgdGhlIGtlcm5lbCBidWZmZXJzIC0tIGJ1dCB3ZSBrbm93Ci0JICogaG93IG1hbnkgdGhlIGludGVyZmFjZSBkcm9wcGVkLCBzbyB3ZSBjYW4gcmV0dXJuIHRoYXQuCi0JICovCiAKLQlzdGF0cy0+cHNfcmVjdiA9IGhhbmRsZXAtPnBhY2tldHNfcmVhZDsKLQlzdGF0cy0+cHNfZHJvcCA9IDA7Ci0Jc3RhdHMtPnBzX2lmZHJvcCA9IGhhbmRsZXAtPnN0YXQucHNfaWZkcm9wOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1hZGRfbGludXhfaWYocGNhcF9pZl9saXN0X3QgKmRldmxpc3RwLCBjb25zdCBjaGFyICppZm5hbWUsIGludCBmZCwgY2hhciAqZXJyYnVmKQotewotCWNvbnN0IGNoYXIgKnA7Ci0JY2hhciBuYW1lWzUxMl07CS8qIFhYWCAtIHBpY2sgYSBzaXplICovCi0JY2hhciAqcSwgKnNhdmVxOwotCXN0cnVjdCBpZnJlcSBpZnJmbGFnczsKLQotCS8qCi0JICogR2V0IHRoZSBpbnRlcmZhY2UgbmFtZS4KLQkgKi8KLQlwID0gaWZuYW1lOwotCXEgPSAmbmFtZVswXTsKLQl3aGlsZSAoKnAgIT0gJ1wwJyAmJiBpc2FzY2lpKCpwKSAmJiAhaXNzcGFjZSgqcCkpIHsKLQkJaWYgKCpwID09ICc6JykgewotCQkJLyoKLQkJCSAqIFRoaXMgY291bGQgYmUgdGhlIHNlcGFyYXRvciBiZXR3ZWVuIGEKLQkJCSAqIG5hbWUgYW5kIGFuIGFsaWFzIG51bWJlciwgb3IgaXQgY291bGQgYmUKLQkJCSAqIHRoZSBzZXBhcmF0b3IgYmV0d2VlbiBhIG5hbWUgd2l0aCBubwotCQkJICogYWxpYXMgbnVtYmVyIGFuZCB0aGUgbmV4dCBmaWVsZC4KLQkJCSAqCi0JCQkgKiBJZiB0aGVyZSdzIGEgY29sb24gYWZ0ZXIgZGlnaXRzLCBpdAotCQkJICogc2VwYXJhdGVzIHRoZSBuYW1lIGFuZCB0aGUgYWxpYXMgbnVtYmVyLAotCQkJICogb3RoZXJ3aXNlIGl0IHNlcGFyYXRlcyB0aGUgbmFtZSBhbmQgdGhlCi0JCQkgKiBuZXh0IGZpZWxkLgotCQkJICovCi0JCQlzYXZlcSA9IHE7Ci0JCQl3aGlsZSAoaXNhc2NpaSgqcCkgJiYgaXNkaWdpdCgqcCkpCi0JCQkJKnErKyA9ICpwKys7Ci0JCQlpZiAoKnAgIT0gJzonKSB7Ci0JCQkJLyoKLQkJCQkgKiBUaGF0IHdhcyB0aGUgbmV4dCBmaWVsZCwKLQkJCQkgKiBub3QgdGhlIGFsaWFzIG51bWJlci4KLQkJCQkgKi8KLQkJCQlxID0gc2F2ZXE7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfSBlbHNlCi0JCQkqcSsrID0gKnArKzsKLQl9Ci0JKnEgPSAnXDAnOwotCi0JLyoKLQkgKiBHZXQgdGhlIGZsYWdzIGZvciB0aGlzIGludGVyZmFjZS4KLQkgKi8KLQlzdHJsY3B5KGlmcmZsYWdzLmlmcl9uYW1lLCBuYW1lLCBzaXplb2YoaWZyZmxhZ3MuaWZyX25hbWUpKTsKLQlpZiAoaW9jdGwoZmQsIFNJT0NHSUZGTEFHUywgKGNoYXIgKikmaWZyZmxhZ3MpIDwgMCkgewotCQlpZiAoZXJybm8gPT0gRU5YSU8gfHwgZXJybm8gPT0gRU5PREVWKQotCQkJcmV0dXJuICgwKTsJLyogZGV2aWNlIGRvZXNuJ3QgYWN0dWFsbHkgZXhpc3QgLSBpZ25vcmUgaXQgKi8KLQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCi0JCSAgICBlcnJubywgIlNJT0NHSUZGTEFHUzogJS4qcyIsCi0JCSAgICAoaW50KXNpemVvZihpZnJmbGFncy5pZnJfbmFtZSksCi0JCSAgICBpZnJmbGFncy5pZnJfbmFtZSk7Ci0JCXJldHVybiAoLTEpOwotCX0KLQotCS8qCi0JICogQWRkIGFuIGVudHJ5IGZvciB0aGlzIGludGVyZmFjZSwgd2l0aCBubyBhZGRyZXNzZXMsIGlmIGl0J3MKLQkgKiBub3QgYWxyZWFkeSBpbiB0aGUgbGlzdC4KLQkgKi8KLQlpZiAoZmluZF9vcl9hZGRfaWYoZGV2bGlzdHAsIG5hbWUsIGlmcmZsYWdzLmlmcl9mbGFncywKLQkgICAgZ2V0X2lmX2ZsYWdzLCBlcnJidWYpID09IE5VTEwpIHsKLQkJLyoKLQkJICogRmFpbHVyZS4KLQkJICovCi0JCXJldHVybiAoLTEpOwotCX0KLQotCXJldHVybiAoMCk7Ci19Ci0KLS8qCi0gKiBHZXQgZnJvbSAiL3N5cy9jbGFzcy9uZXQiIGFsbCBpbnRlcmZhY2VzIGxpc3RlZCB0aGVyZTsgaWYgdGhleSdyZQotICogYWxyZWFkeSBpbiB0aGUgbGlzdCBvZiBpbnRlcmZhY2VzIHdlIGhhdmUsIHRoYXQgd29uJ3QgYWRkIGFub3RoZXIKLSAqIGluc3RhbmNlLCBidXQgaWYgdGhleSdyZSBub3QsIHRoYXQnbGwgYWRkIHRoZW0uCi0gKgotICogV2UgZG9uJ3QgYm90aGVyIGdldHRpbmcgYW55IGFkZHJlc3NlcyBmb3IgdGhlbTsgaXQgYXBwZWFycyB5b3UgY2FuJ3QKLSAqIHVzZSBTSU9DR0lGQUREUiBvbiBMaW51eCB0byBnZXQgSVB2NiBhZGRyZXNzZXMgZm9yIGludGVyZmFjZXMsIGFuZCwKLSAqIGFsdGhvdWdoIHNvbWUgb3RoZXIgdHlwZXMgb2YgYWRkcmVzc2VzIGNhbiBiZSBmZXRjaGVkIHdpdGggU0lPQ0dJRkFERFIsCi0gKiB3ZSBkb24ndCBib3RoZXIgd2l0aCB0aGVtIGZvciBub3cuCi0gKgotICogV2UgYWxzbyBkb24ndCBmYWlsIGlmIHdlIGNvdWxkbid0IG9wZW4gIi9zeXMvY2xhc3MvbmV0Ijsgd2UganVzdCBsZWF2ZQotICogdGhlIGxpc3Qgb2YgaW50ZXJmYWNlcyBhcyBpcywgYW5kIHJldHVybiAwLCBzbyB0aGF0IHdlIGNhbiB0cnkKLSAqIHNjYW5uaW5nIC9wcm9jL25ldC9kZXYuCi0gKgotICogT3RoZXJ3aXNlLCB3ZSByZXR1cm4gMSBpZiB3ZSBkb24ndCBnZXQgYW4gZXJyb3IgYW5kIC0xIGlmIHdlIGRvLgotICovCi1zdGF0aWMgaW50Ci1zY2FuX3N5c19jbGFzc19uZXQocGNhcF9pZl9saXN0X3QgKmRldmxpc3RwLCBjaGFyICplcnJidWYpCi17Ci0JRElSICpzeXNfY2xhc3NfbmV0X2Q7Ci0JaW50IGZkOwotCXN0cnVjdCBkaXJlbnQgKmVudDsKLQljaGFyIHN1YnN5c3RlbV9wYXRoW1BBVEhfTUFYKzFdOwotCXN0cnVjdCBzdGF0IHN0YXRiOwotCWludCByZXQgPSAxOwotCi0Jc3lzX2NsYXNzX25ldF9kID0gb3BlbmRpcigiL3N5cy9jbGFzcy9uZXQiKTsKLQlpZiAoc3lzX2NsYXNzX25ldF9kID09IE5VTEwpIHsKLQkJLyoKLQkJICogRG9uJ3QgZmFpbCBpZiBpdCBkb2Vzbid0IGV4aXN0IGF0IGFsbC4KLQkJICovCi0JCWlmIChlcnJubyA9PSBFTk9FTlQpCi0JCQlyZXR1cm4gKDApOwotCi0JCS8qCi0JCSAqIEZhaWwgaWYgd2UgZ290IHNvbWUgb3RoZXIgZXJyb3IuCi0JCSAqLwotCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJICAgIGVycm5vLCAiQ2FuJ3Qgb3BlbiAvc3lzL2NsYXNzL25ldCIpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQkvKgotCSAqIENyZWF0ZSBhIHNvY2tldCBmcm9tIHdoaWNoIHRvIGZldGNoIGludGVyZmFjZSBpbmZvcm1hdGlvbi4KLQkgKi8KLQlmZCA9IHNvY2tldChQRl9VTklYLCBTT0NLX1JBVywgMCk7Ci0JaWYgKGZkIDwgMCkgewotCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJICAgIGVycm5vLCAic29ja2V0Iik7Ci0JCSh2b2lkKWNsb3NlZGlyKHN5c19jbGFzc19uZXRfZCk7Ci0JCXJldHVybiAoLTEpOwotCX0KLQotCWZvciAoOzspIHsKLQkJZXJybm8gPSAwOwotCQllbnQgPSByZWFkZGlyKHN5c19jbGFzc19uZXRfZCk7Ci0JCWlmIChlbnQgPT0gTlVMTCkgewotCQkJLyoKLQkJCSAqIEVycm9yIG9yIEVPRjsgaWYgZXJybm8gIT0gMCwgaXQncyBhbiBlcnJvci4KLQkJCSAqLwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKgotCQkgKiBJZ25vcmUgIi4iIGFuZCAiLi4iLgotCQkgKi8KLQkJaWYgKHN0cmNtcChlbnQtPmRfbmFtZSwgIi4iKSA9PSAwIHx8Ci0JCSAgICBzdHJjbXAoZW50LT5kX25hbWUsICIuLiIpID09IDApCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkgKiBJZ25vcmUgcGxhaW4gZmlsZXM7IHRoZXkgZG8gbm90IGhhdmUgc3ViZGlyZWN0b3JpZXMKLQkJICogYW5kIHRodXMgaGF2ZSBubyBhdHRyaWJ1dGVzLgotCQkgKi8KLQkJaWYgKGVudC0+ZF90eXBlID09IERUX1JFRykKLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0JCSAqIElzIHRoZXJlIGFuICJpZmluZGV4IiBmaWxlIHVuZGVyIHRoYXQgbmFtZT8KLQkJICogKFdlIGRvbid0IGNhcmUgd2hldGhlciBpdCdzIGEgZGlyZWN0b3J5IG9yCi0JCSAqIGEgc3ltbGluazsgb2xkZXIga2VybmVscyBoYXZlIGRpcmVjdG9yaWVzCi0JCSAqIGZvciBkZXZpY2VzLCBuZXdlciBrZXJuZWxzIGhhdmUgc3ltbGlua3MgdG8KLQkJICogZGlyZWN0b3JpZXMuKQotCQkgKi8KLQkJcGNhcF9zbnByaW50ZihzdWJzeXN0ZW1fcGF0aCwgc2l6ZW9mIHN1YnN5c3RlbV9wYXRoLAotCQkgICAgIi9zeXMvY2xhc3MvbmV0LyVzL2lmaW5kZXgiLCBlbnQtPmRfbmFtZSk7Ci0JCWlmIChsc3RhdChzdWJzeXN0ZW1fcGF0aCwgJnN0YXRiKSAhPSAwKSB7Ci0JCQkvKgotCQkJICogU3RhdCBmYWlsZWQuICBFaXRoZXIgdGhlcmUgd2FzIGFuIGVycm9yCi0JCQkgKiBvdGhlciB0aGFuIEVOT0VOVCwgYW5kIHdlIGRvbid0IGtub3cgaWYKLQkJCSAqIHRoaXMgaXMgYW4gaW50ZXJmYWNlLCBvciBpdCdzIEVOT0VOVCwKLQkJCSAqIGFuZCBlaXRoZXIgc29tZSBwYXJ0IG9mICIvc3lzL2NsYXNzL25ldC97aWZ9IgotCQkJICogZGlzYXBwZWFyZWQsIGluIHdoaWNoIGNhc2UgaXQgcHJvYmFibHkgbWVhbnMKLQkJCSAqIHRoZSBpbnRlcmZhY2UgZGlzYXBwZWFyZWQsIG9yIHRoZXJlJ3Mgbm8KLQkJCSAqICJpZmluZGV4IiBmaWxlLCB3aGljaCBtZWFucyBpdCdzIG5vdCBhCi0JCQkgKiBuZXR3b3JrIGludGVyZmFjZS4KLQkJCSAqLwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKgotCQkgKiBBdHRlbXB0IHRvIGFkZCB0aGUgaW50ZXJmYWNlLgotCQkgKi8KLQkJaWYgKGFkZF9saW51eF9pZihkZXZsaXN0cCwgJmVudC0+ZF9uYW1lWzBdLCBmZCwgZXJyYnVmKSA9PSAtMSkgewotCQkJLyogRmFpbC4gKi8KLQkJCXJldCA9IC0xOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKHJldCAhPSAtMSkgewotCQkvKgotCQkgKiBXZWxsLCB3ZSBkaWRuJ3QgZmFpbCBmb3IgYW55IG90aGVyIHJlYXNvbjsgZGlkIHdlCi0JCSAqIGZhaWwgZHVlIHRvIGFuIGVycm9yIHJlYWRpbmcgdGhlIGRpcmVjdG9yeT8KLQkJICovCi0JCWlmIChlcnJubyAhPSAwKSB7Ci0JCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJCSAgICBlcnJubywgIkVycm9yIHJlYWRpbmcgL3N5cy9jbGFzcy9uZXQiKTsKLQkJCXJldCA9IC0xOwotCQl9Ci0JfQotCi0JKHZvaWQpY2xvc2UoZmQpOwotCSh2b2lkKWNsb3NlZGlyKHN5c19jbGFzc19uZXRfZCk7Ci0JcmV0dXJuIChyZXQpOwotfQotCi0vKgotICogR2V0IGZyb20gIi9wcm9jL25ldC9kZXYiIGFsbCBpbnRlcmZhY2VzIGxpc3RlZCB0aGVyZTsgaWYgdGhleSdyZQotICogYWxyZWFkeSBpbiB0aGUgbGlzdCBvZiBpbnRlcmZhY2VzIHdlIGhhdmUsIHRoYXQgd29uJ3QgYWRkIGFub3RoZXIKLSAqIGluc3RhbmNlLCBidXQgaWYgdGhleSdyZSBub3QsIHRoYXQnbGwgYWRkIHRoZW0uCi0gKgotICogU2VlIGNvbW1lbnRzIGZyb20gc2Nhbl9zeXNfY2xhc3NfbmV0KCkuCi0gKi8KLXN0YXRpYyBpbnQKLXNjYW5fcHJvY19uZXRfZGV2KHBjYXBfaWZfbGlzdF90ICpkZXZsaXN0cCwgY2hhciAqZXJyYnVmKQotewotCUZJTEUgKnByb2NfbmV0X2Y7Ci0JaW50IGZkOwotCWNoYXIgbGluZWJ1Zls1MTJdOwotCWludCBsaW5lbnVtOwotCWNoYXIgKnA7Ci0JaW50IHJldCA9IDA7Ci0KLQlwcm9jX25ldF9mID0gZm9wZW4oIi9wcm9jL25ldC9kZXYiLCAiciIpOwotCWlmIChwcm9jX25ldF9mID09IE5VTEwpIHsKLQkJLyoKLQkJICogRG9uJ3QgZmFpbCBpZiBpdCBkb2Vzbid0IGV4aXN0IGF0IGFsbC4KLQkJICovCi0JCWlmIChlcnJubyA9PSBFTk9FTlQpCi0JCQlyZXR1cm4gKDApOwotCi0JCS8qCi0JCSAqIEZhaWwgaWYgd2UgZ290IHNvbWUgb3RoZXIgZXJyb3IuCi0JCSAqLwotCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJICAgIGVycm5vLCAiQ2FuJ3Qgb3BlbiAvcHJvYy9uZXQvZGV2Iik7Ci0JCXJldHVybiAoLTEpOwotCX0KLQotCS8qCi0JICogQ3JlYXRlIGEgc29ja2V0IGZyb20gd2hpY2ggdG8gZmV0Y2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uLgotCSAqLwotCWZkID0gc29ja2V0KFBGX1VOSVgsIFNPQ0tfUkFXLCAwKTsKLQlpZiAoZmQgPCAwKSB7Ci0JCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkgICAgZXJybm8sICJzb2NrZXQiKTsKLQkJKHZvaWQpZmNsb3NlKHByb2NfbmV0X2YpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQlmb3IgKGxpbmVudW0gPSAxOwotCSAgICBmZ2V0cyhsaW5lYnVmLCBzaXplb2YgbGluZWJ1ZiwgcHJvY19uZXRfZikgIT0gTlVMTDsgbGluZW51bSsrKSB7Ci0JCS8qCi0JCSAqIFNraXAgdGhlIGZpcnN0IHR3byBsaW5lcyAtIHRoZXkncmUgaGVhZGVycy4KLQkJICovCi0JCWlmIChsaW5lbnVtIDw9IDIpCi0JCQljb250aW51ZTsKLQotCQlwID0gJmxpbmVidWZbMF07Ci0KLQkJLyoKLQkJICogU2tpcCBsZWFkaW5nIHdoaXRlIHNwYWNlLgotCQkgKi8KLQkJd2hpbGUgKCpwICE9ICdcMCcgJiYgaXNhc2NpaSgqcCkgJiYgaXNzcGFjZSgqcCkpCi0JCQlwKys7Ci0JCWlmICgqcCA9PSAnXDAnIHx8ICpwID09ICdcbicpCi0JCQljb250aW51ZTsJLyogYmxhbmsgbGluZSAqLwotCi0JCS8qCi0JCSAqIEF0dGVtcHQgdG8gYWRkIHRoZSBpbnRlcmZhY2UuCi0JCSAqLwotCQlpZiAoYWRkX2xpbnV4X2lmKGRldmxpc3RwLCBwLCBmZCwgZXJyYnVmKSA9PSAtMSkgewotCQkJLyogRmFpbC4gKi8KLQkJCXJldCA9IC0xOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKHJldCAhPSAtMSkgewotCQkvKgotCQkgKiBXZWxsLCB3ZSBkaWRuJ3QgZmFpbCBmb3IgYW55IG90aGVyIHJlYXNvbjsgZGlkIHdlCi0JCSAqIGZhaWwgZHVlIHRvIGFuIGVycm9yIHJlYWRpbmcgdGhlIGZpbGU/Ci0JCSAqLwotCQlpZiAoZmVycm9yKHByb2NfbmV0X2YpKSB7Ci0JCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJCSAgICBlcnJubywgIkVycm9yIHJlYWRpbmcgL3Byb2MvbmV0L2RldiIpOwotCQkJcmV0ID0gLTE7Ci0JCX0KLQl9Ci0KLQkodm9pZCljbG9zZShmZCk7Ci0JKHZvaWQpZmNsb3NlKHByb2NfbmV0X2YpOwotCXJldHVybiAocmV0KTsKKwlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCBlcnJubywKKwkgICAgImZhaWxlZCB0byBnZXQgc3RhdGlzdGljcyBmcm9tIHNvY2tldCIpOworCXJldHVybiAtMTsKIH0KIAogLyoKQEAgLTI1OTUsNyArMTM3NCw3IEBACiBzdGF0aWMgY29uc3QgY2hhciBhbnlfZGVzY3JbXSA9ICJQc2V1ZG8tZGV2aWNlIHRoYXQgY2FwdHVyZXMgb24gYWxsIGludGVyZmFjZXMiOwogCiAvKgotICogQSBTT0NLX1BBQ0tFVCBvciBQRl9QQUNLRVQgc29ja2V0IGNhbiBiZSBib3VuZCB0byBhbnkgbmV0d29yayBpbnRlcmZhY2UuCisgKiBBIFBGX1BBQ0tFVCBzb2NrZXQgY2FuIGJlIGJvdW5kIHRvIGFueSBuZXR3b3JrIGludGVyZmFjZS4KICAqLwogc3RhdGljIGludAogY2FuX2JlX2JvdW5kKGNvbnN0IGNoYXIgKm5hbWUgX1VfKQpAQCAtMjYwNCw2ICsxMzgzLDEyNiBAQAogfQogCiAvKgorICogR2V0IGEgc29ja2V0IHRvIHVzZSB3aXRoIHZhcmlvdXMgaW50ZXJmYWNlIGlvY3Rscy4KKyAqLworc3RhdGljIGludAorZ2V0X2lmX2lvY3RsX3NvY2tldCh2b2lkKQoreworCWludCBmZDsKKworCS8qCisJICogVGhpcyBpcyBhIGJpdCB1Z2x5LgorCSAqCisJICogVGhlcmUgaXNuJ3QgYSBzb2NrZXQgdHlwZSB0aGF0J3MgZ3VhcmFudGVlZCB0byB3b3JrLgorCSAqCisJICogQUZfTkVUTElOSyB3aWxsIHdvcmsgKmlmKiB5b3UgaGF2ZSBOZXRsaW5rIGNvbmZpZ3VyZWQgaW50byB0aGUKKwkgKiBrZXJuZWwgKGNhbiBpdCBiZSBjb25maWd1cmVkIG91dCBpZiB5b3UgaGF2ZSBhbnkgbmV0d29ya2luZworCSAqIHN1cHBvcnQgYXQgYWxsPykgKmFuZCogaWYgeW91J3JlIHJ1bm5pbmcgYSBzdWZmaWNpZW50bHkgcmVjZW50CisJICoga2VybmVsLCBidXQgbm90IGFsbCB0aGUga2VybmVscyB3ZSBzdXBwb3J0IGFyZSBzdWZmaWNpZW50bHkKKwkgKiByZWNlbnQgLSB0aGF0IGZlYXR1cmUgd2FzIGludHJvZHVjZWQgaW4gTGludXggNC42LgorCSAqCisJICogQUZfVU5JWCB3aWxsIHdvcmsgKmlmKiB5b3UgaGF2ZSBVTklYLWRvbWFpbiBzb2NrZXRzIGNvbmZpZ3VyZWQKKwkgKiBpbnRvIHRoZSBrZXJuZWwgYW5kICppZiogeW91J3JlIG5vdCBvbiBhIHN5c3RlbSB0aGF0IGRvZXNuJ3QKKwkgKiBhbGxvdyB0aGVtIC0gc29tZSBTRUxpbnV4IHN5c3RlbXMgZG9uJ3QgYWxsb3cgeW91IGNyZWF0ZSB0aGVtLgorCSAqIE1vc3Qgc3lzdGVtcyBwcm9iYWJseSBoYXZlIHRoZW0gY29uZmlndXJlZCBpbiwgYnV0IG5vdCBhbGwgc3lzdGVtcworCSAqIGhhdmUgdGhlbSBjb25maWd1cmVkIGluIGFuZCBhbGxvdyB0aGVtIHRvIGJlIGNyZWF0ZWQuCisJICoKKwkgKiBBRl9JTkVUIHdpbGwgd29yayAqaWYqIHlvdSBoYXZlIElQdjQgY29uZmlndXJlZCBpbnRvIHRoZSBrZXJuZWwsCisJICogYnV0LCBhcHBhcmVudGx5LCBzb21lIHN5c3RlbXMgaGF2ZSBuZXR3b3JrIGFkYXB0ZXJzIGJ1dCBoYXZlCisJICoga2VybmVscyB3aXRob3V0IElQdjQgc3VwcG9ydC4KKwkgKgorCSAqIEFGX0lORVQ2IHdpbGwgd29yayAqaWYqIHlvdSBoYXZlIElQdjYgY29uZmlndXJlZCBpbnRvIHRoZQorCSAqIGtlcm5lbCwgYnV0IGlmIHlvdSBkb24ndCBoYXZlIEFGX0lORVQsIHlvdSBtaWdodCBub3QgaGF2ZQorCSAqIEFGX0lORVQ2LCBlaXRoZXIgKHRoYXQgaXMsIGluZGVwZW5kZW50bHkgb24gaXRzIG93biBncm91bmRzKS4KKwkgKgorCSAqIEFGX1BBQ0tFVCB3b3VsZCB3b3JrLCBleGNlcHQgdGhhdCBzb21lIG9mIHRoZXNlIGNhbGxzIHNob3VsZAorCSAqIHdvcmsgZXZlbiBpZiB5b3UgKmRvbid0KiBoYXZlIGNhcHR1cmUgcGVybWlzc2lvbiAoeW91IHNob3VsZCBiZQorCSAqIGFibGUgdG8gZW51bWVyYXRlIGludGVyZmFjZXMgYW5kIGdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGVtCisJICogd2l0aG91dCBjYXB0dXJlIHBlcm1pc3Npb247IHlvdSBzaG91bGRuJ3QgZ2V0IGEgZmFpbHVyZSB1bnRpbAorCSAqIHlvdSB0cnkgcGNhcF9hY3RpdmF0ZSgpKS4gIChJZiB5b3UgZG9uJ3QgYWxsb3cgcHJvZ3JhbXMgdG8KKwkgKiBnZXQgYXMgbXVjaCBpbmZvcm1hdGlvbiBhcyBwb3NzaWJsZSBhYm91dCBpbnRlcmZhY2VzIGlmIHlvdQorCSAqIGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBjYXB0dXJlLCB5b3UgcnVuIHRoZSByaXNrIG9mIHVzZXJzCisJICogYXNraW5nICJ3aHkgaXNuJ3QgaXQgc2hvd2luZyBYWFgiIC0gb3IsIHdvcnNlLCBpZiB5b3UgZG9uJ3QKKwkgKiBzaG93IGludGVyZmFjZXMgKmF0IGFsbCogaWYgeW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0bworCSAqIGNhcHR1cmUgb24gdGhlbSwgIndoeSBkbyBubyBpbnRlcmZhY2VzIHNob3cgdXA/IiAtIHdoZW4gdGhlCisJICogcmVhbCBwcm9ibGVtIGlzIGEgcGVybWlzc2lvbnMgcHJvYmxlbS4gIEVycm9yIHJlcG9ydHMgb2YgdGhhdAorCSAqIHR5cGUgcmVxdWlyZSBhIGxvdCBtb3JlIGJhY2stYW5kLWZvcnRoIHRvIGRlYnVnLCBhcyBldmlkZW5jZWQKKwkgKiBieSBtYW55IFdpcmVzaGFyayBidWdzL21haWxpbmcgbGlzdCBxdWVzdGlvbnMvUSZBIHF1ZXN0b2lucy4pCisJICoKKwkgKiBTbzoKKwkgKgorCSAqIHdlIGZpcnN0IHRyeSBhbiBBRl9ORVRMSU5LIHNvY2tldCwgd2hlcmUgInRyeSIgaW5jbHVkZXMKKwkgKiAidHJ5IHRvIGRvIGEgZGV2aWNlIGlvY3RsIG9uIGl0IiwgYXMsIGluIHRoZSBmdXR1cmUsIG9uY2UKKwkgKiBwcmUtNC42IGtlcm5lbHMgYXJlIHN1ZmZpY2llbnRseSByYXJlLCB0aGF0IHdpbGwgcHJvYmFibHkKKwkgKiBiZSB0aGUgbWVjaGFuaXNtIG1vc3QgbGlrZWx5IHRvIHdvcms7CisJICoKKwkgKiBpZiB0aGF0IGZhaWxzLCB3ZSB0cnkgYW4gQUZfVU5JWCBzb2NrZXQsIGFzIHRoYXQncyBsZXNzCisJICogbGlrZWx5IHRvIGJlIGNvbmZpZ3VyZWQgb3V0IG9uIGEgbmV0d29ya2luZy1jYXBhYmxlIHN5c3RlbQorCSAqIHRoYW4gaXMgSVA7CisJICoKKwkgKiBpZiB0aGF0IGZhaWxzLCB3ZSB0cnkgYW4gQUZfSU5FVDYgc29ja2V0OworCSAqCisJICogaWYgdGhhdCBmYWlscywgd2UgdHJ5IGFuIEFGX0lORVQgc29ja2V0LgorCSAqLworCWZkID0gc29ja2V0KEFGX05FVExJTkssIFNPQ0tfUkFXLCBORVRMSU5LX0dFTkVSSUMpOworCWlmIChmZCAhPSAtMSkgeworCQkvKgorCQkgKiBPSywgbGV0J3MgbWFrZSBzdXJlIHdlIGNhbiBkbyBhbiBTSU9DR0lGTkFNRQorCQkgKiBpb2N0bC4KKwkJICovCisJCXN0cnVjdCBpZnJlcSBpZnI7CisKKwkJbWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKwkJaWYgKGlvY3RsKGZkLCBTSU9DR0lGTkFNRSwgJmlmcikgPT0gMCB8fAorCQkgICAgZXJybm8gIT0gRU9QTk9UU1VQUCkgeworCQkJLyoKKwkJCSAqIEl0IHN1Y2NlZWRlZCwgb3IgZmFpbGVkIGZvciBzb21lIHJlYXNvbgorCQkJICogb3RoZXIgdGhhbiAibmV0bGluayBzb2NrZXRzIGRvbid0IHN1cHBvcnQKKwkJCSAqIGRldmljZSBpb2N0bHMiLiAgR28gd2l0aCB0aGUgQUZfTkVUTElOSworCQkJICogc29ja2V0LgorCQkJICovCisJCQlyZXR1cm4gKGZkKTsKKwkJfQorCisJCS8qCisJCSAqIE9LLCB0aGF0IGRpZG4ndCB3b3JrLCBzbyBpdCdzIGFzIGJhZCBhcyAibmV0bGluaworCQkgKiBzb2NrZXRzIGFyZW4ndCBhdmFpbGFibGUiLiAgQ2xvc2UgdGhlIHNvY2tldCBhbmQKKwkJICogZHJpdmUgb24uCisJCSAqLworCQljbG9zZShmZCk7CisJfQorCisJLyoKKwkgKiBOb3cgdHJ5IGFuIEFGX1VOSVggc29ja2V0LgorCSAqLworCWZkID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfUkFXLCAwKTsKKwlpZiAoZmQgIT0gLTEpIHsKKwkJLyoKKwkJICogT0ssIHdlIGdvdCBpdCEKKwkJICovCisJCXJldHVybiAoZmQpOworCX0KKworCS8qCisJICogTm93IHRyeSBhbiBBRl9JTkVUNiBzb2NrZXQuCisJICovCisJZmQgPSBzb2NrZXQoQUZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOworCWlmIChmZCAhPSAtMSkgeworCQlyZXR1cm4gKGZkKTsKKwl9CisKKwkvKgorCSAqIE5vdyB0cnkgYW4gQUZfSU5FVCBzb2NrZXQuCisJICoKKwkgKiBYWFggLSBpZiB0aGF0IGZhaWxzLCBpcyB0aGVyZSBhbnl0aGluZyBlbHNlIHdlIHNob3VsZCB0cnk/CisJICogQUZfQ0FOLCBmb3IgZW1iZWRkZWQgc3lzdGVtcyBpbiB2ZWhpY2xlcywgaW4gY2FzZSB0aGV5J3JlCisJICogYnVpbHQgd2l0aG91dCBJbnRlcm5ldCBwcm90b2NvbCBzdXBwb3J0PyAgQW55IG90aGVyIHNvY2tldAorCSAqIHR5cGVzIHBvcHVsYXIgaW4gbm9uLUludGVybmV0IGVtYmVkZGVkIHN5c3RlbXM/CisJICovCisJcmV0dXJuIChzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCkpOworfQorCisvKgogICogR2V0IGFkZGl0aW9uYWwgZmxhZ3MgZm9yIGEgZGV2aWNlLCB1c2luZyBTSU9DR0lGTUVESUEuCiAgKi8KIHN0YXRpYyBpbnQKQEAgLTI2MjQsNyArMTUyMyw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCXNvY2sgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7CisJc29jayA9IGdldF9pZl9pb2N0bF9zb2NrZXQoKTsKIAlpZiAoc29jayA9PSAtMSkgewogCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgZXJybm8sCiAJCSAgICAiQ2FuJ3QgY3JlYXRlIHNvY2tldCB0byBnZXQgZXRodG9vbCBpbmZvcm1hdGlvbiBmb3IgJXMiLApAQCAtMjYzNiwxNCArMTUzNSwxNCBAQAogCSAqIE9LLCB3aGF0IHR5cGUgb2YgbmV0d29yayBpcyB0aGlzPwogCSAqIEluIHBhcnRpY3VsYXIsIGlzIGl0IHdpcmVkIG9yIHdpcmVsZXNzPwogCSAqLwotCWlmIChpc193aWZpKHNvY2ssIG5hbWUpKSB7CisJaWYgKGlzX3dpZmkobmFtZSkpIHsKIAkJLyoKIAkJICogV2ktRmksIGhlbmNlIHdpcmVsZXNzLgogCQkgKi8KIAkJKmZsYWdzIHw9IFBDQVBfSUZfV0lSRUxFU1M7CiAJfSBlbHNlIHsKIAkJLyoKLQkJICogT0ssIHdoYXQgZG9lcyAvc3lzL2NsYXNzL25ldC97aWZ9L3R5cGUgY29udGFpbj8KKwkJICogT0ssIHdoYXQgZG9lcyAvc3lzL2NsYXNzL25ldC97aWZfbmFtZX0vdHlwZSBjb250YWluPwogCQkgKiAoV2UgZG9uJ3QgdXNlIHRoYXQgZm9yIFdpLUZpLCBhcyBpdCdsbCByZXBvcnQKIAkJICogIkV0aGVybmV0IiwgaS5lLiBBUlBIUkRfRVRIRVIsIGZvciBub24tbW9uaXRvci0KIAkJICogbW9kZSBkZXZpY2VzLikKQEAgLTI2NTEsNyArMTU1MCw3IEBACiAJCWNoYXIgKnBhdGhzdHI7CiAKIAkJaWYgKGFzcHJpbnRmKCZwYXRoc3RyLCAiL3N5cy9jbGFzcy9uZXQvJXMvdHlwZSIsIG5hbWUpID09IC0xKSB7Ci0JCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAgICAiJXM6IENhbid0IGdlbmVyYXRlIHBhdGggbmFtZSBzdHJpbmcgZm9yIC9zeXMvY2xhc3MvbmV0IGRldmljZSIsCiAJCQkgICAgbmFtZSk7CiAJCQljbG9zZShzb2NrKTsKQEAgLTI2NjUsNyArMTU2NCw2IEBACiAJCQkJICovCiAJCQkJc3dpdGNoIChhcnB0eXBlKSB7CiAKLSNpZmRlZiBBUlBIUkRfTE9PUEJBQ0sKIAkJCQljYXNlIEFSUEhSRF9MT09QQkFDSzoKIAkJCQkJLyoKIAkJCQkJICogVGhlc2UgYXJlIHR5cGVzIHRvIHdoaWNoCkBAIC0yNjc5LDcgKzE1NzcsNiBAQAogCQkJCQlmY2xvc2UoZmgpOwogCQkJCQlmcmVlKHBhdGhzdHIpOwogCQkJCQlyZXR1cm4gMDsKLSNlbmRpZgogCiAJCQkJY2FzZSBBUlBIUkRfSVJEQToKIAkJCQljYXNlIEFSUEhSRF9JRUVFODAyMTE6CkBAIC0yNzA4LDggKzE2MDUsMTkgQEAKIAogI2lmZGVmIEVUSFRPT0xfR0xJTksKIAltZW1zZXQoJmlmciwgMCwgc2l6ZW9mKGlmcikpOwotCXN0cmxjcHkoaWZyLmlmcl9uYW1lLCBuYW1lLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CisJcGNhcF9zdHJsY3B5KGlmci5pZnJfbmFtZSwgbmFtZSwgc2l6ZW9mKGlmci5pZnJfbmFtZSkpOwogCWluZm8uY21kID0gRVRIVE9PTF9HTElOSzsKKwkvKgorCSAqIFhYWCAtIHdoaWxlIFZhbGdyaW5kIGhhbmRsZXMgU0lPQ0VUSFRPT0wgYW5kIGtub3dzIHRoYXQKKwkgKiB0aGUgRVRIVE9PTF9HTElOSyBjb21tYW5kIHNldHMgdGhlIC5kYXRhIG1lbWJlciBvZiB0aGUKKwkgKiBzdHJ1Y3R1cmUsIE1lbW9yeSBTYW5pdGl6ZXIgZG9lc24ndCB5ZXQgZG8gc286CisJICoKKwkgKiAgICBodHRwczovL2J1Z3MubGx2bS5vcmcvc2hvd19idWcuY2dpP2lkPTQ1ODE0CisJICoKKwkgKiBGb3Igbm93LCB3ZSB6ZXJvIGl0IG91dCB0byBzcXVlbGNoIHdhcm5pbmdzOyBpZiB0aGUgYnVnCisJICogaW4gcXVlc3Rpb24gaXMgZml4ZWQsIHdlIGNhbiByZW1vdmUgdGhpcy4KKwkgKi8KKwlpbmZvLmRhdGEgPSAwOwogCWlmci5pZnJfZGF0YSA9IChjYWRkcl90KSZpbmZvOwogCWlmIChpb2N0bChzb2NrLCBTSU9DRVRIVE9PTCwgJmlmcikgPT0gLTEpIHsKIAkJaW50IHNhdmVfZXJybm8gPSBlcnJubzsKQEAgLTI3NzcsOCArMTY4NSw2IEBACiBpbnQKIHBjYXBfcGxhdGZvcm1fZmluZGRldnMocGNhcF9pZl9saXN0X3QgKmRldmxpc3RwLCBjaGFyICplcnJidWYpCiB7Ci0JaW50IHJldDsKLQogCS8qCiAJICogR2V0IHRoZSBsaXN0IG9mIHJlZ3VsYXIgaW50ZXJmYWNlcyBmaXJzdC4KIAkgKi8KQEAgLTI3ODcsMjUgKzE2OTMsNiBAQAogCQlyZXR1cm4gKC0xKTsJLyogZmFpbHVyZSAqLwogCiAJLyoKLQkgKiBSZWFkICIvc3lzL2NsYXNzL25ldCIsIGFuZCBhZGQgdG8gdGhlIGxpc3Qgb2YgaW50ZXJmYWNlcyBhbGwKLQkgKiBpbnRlcmZhY2VzIGxpc3RlZCB0aGVyZSB0aGF0IHdlIGRvbid0IGFscmVhZHkgaGF2ZSwgYmVjYXVzZSwKLQkgKiBvbiBMaW51eCwgU0lPQ0dJRkNPTkYgcmVwb3J0cyBvbmx5IGludGVyZmFjZXMgd2l0aCBJUHY0IGFkZHJlc3NlcywKLQkgKiBhbmQgZXZlbiBnZXRpZmFkZHJzKCkgd29uJ3QgcmV0dXJuIGluZm9ybWF0aW9uIGFib3V0Ci0JICogaW50ZXJmYWNlcyB3aXRoIG5vIGFkZHJlc3Nlcywgc28geW91IG5lZWQgdG8gcmVhZCAiL3N5cy9jbGFzcy9uZXQiCi0JICogdG8gZ2V0IHRoZSBuYW1lcyBvZiB0aGUgcmVzdCBvZiB0aGUgaW50ZXJmYWNlcy4KLQkgKi8KLQlyZXQgPSBzY2FuX3N5c19jbGFzc19uZXQoZGV2bGlzdHAsIGVycmJ1Zik7Ci0JaWYgKHJldCA9PSAtMSkKLQkJcmV0dXJuICgtMSk7CS8qIGZhaWxlZCAqLwotCWlmIChyZXQgPT0gMCkgewotCQkvKgotCQkgKiBObyAvc3lzL2NsYXNzL25ldDsgdHJ5IHJlYWRpbmcgL3Byb2MvbmV0L2RldiBpbnN0ZWFkLgotCQkgKi8KLQkJaWYgKHNjYW5fcHJvY19uZXRfZGV2KGRldmxpc3RwLCBlcnJidWYpID09IC0xKQotCQkJcmV0dXJuICgtMSk7Ci0JfQotCi0JLyoKIAkgKiBBZGQgdGhlICJhbnkiIGRldmljZS4KIAkgKiBBcyBpdCByZWZlcnMgdG8gYWxsIG5ldHdvcmsgZGV2aWNlcywgbm90IHRvIGFueSBwYXJ0aWN1bGFyCiAJICogbmV0d29yayBkZXZpY2UsIHRoZSBub3Rpb24gb2YgImNvbm5lY3RlZCIgdnMuICJkaXNjb25uZWN0ZWQiCkBAIC0yODIwLDI1OCArMTcwNywyNSBAQAogfQogCiAvKgotICogIEF0dGFjaCB0aGUgZ2l2ZW4gQlBGIGNvZGUgdG8gdGhlIHBhY2tldCBjYXB0dXJlIGRldmljZS4KLSAqLwotc3RhdGljIGludAotcGNhcF9zZXRmaWx0ZXJfbGludXhfY29tbW9uKHBjYXBfdCAqaGFuZGxlLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKmZpbHRlciwKLSAgICBpbnQgaXNfbW1hcHBlZCkKLXsKLQlzdHJ1Y3QgcGNhcF9saW51eCAqaGFuZGxlcDsKLSNpZmRlZiBTT19BVFRBQ0hfRklMVEVSCi0Jc3RydWN0IHNvY2tfZnByb2cJZmNvZGU7Ci0JaW50CQkJY2FuX2ZpbHRlcl9pbl9rZXJuZWw7Ci0JaW50CQkJZXJyID0gMDsKLSNlbmRpZgotCi0JaWYgKCFoYW5kbGUpCi0JCXJldHVybiAtMTsKLQlpZiAoIWZpbHRlcikgewotCSAgICAgICAgc3RybGNweShoYW5kbGUtPmVycmJ1ZiwgInNldGZpbHRlcjogTm8gZmlsdGVyIHNwZWNpZmllZCIsCi0JCQlQQ0FQX0VSUkJVRl9TSVpFKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWhhbmRsZXAgPSBoYW5kbGUtPnByaXY7Ci0KLQkvKiBNYWtlIG91ciBwcml2YXRlIGNvcHkgb2YgdGhlIGZpbHRlciAqLwotCi0JaWYgKGluc3RhbGxfYnBmX3Byb2dyYW0oaGFuZGxlLCBmaWx0ZXIpIDwgMCkKLQkJLyogaW5zdGFsbF9icGZfcHJvZ3JhbSgpIGZpbGxlZCBpbiBlcnJidWYgKi8KLQkJcmV0dXJuIC0xOwotCi0JLyoKLQkgKiBSdW4gdXNlciBsZXZlbCBwYWNrZXQgZmlsdGVyIGJ5IGRlZmF1bHQuIFdpbGwgYmUgb3ZlcnJpZGVuIGlmCi0JICogaW5zdGFsbGluZyBhIGtlcm5lbCBmaWx0ZXIgc3VjY2VlZHMuCi0JICovCi0JaGFuZGxlcC0+ZmlsdGVyX2luX3VzZXJsYW5kID0gMTsKLQotCS8qIEluc3RhbGwga2VybmVsIGxldmVsIGZpbHRlciBpZiBwb3NzaWJsZSAqLwotCi0jaWZkZWYgU09fQVRUQUNIX0ZJTFRFUgotI2lmZGVmIFVTSFJUX01BWAotCWlmIChoYW5kbGUtPmZjb2RlLmJmX2xlbiA+IFVTSFJUX01BWCkgewotCQkvKgotCQkgKiBmY29kZS5sZW4gaXMgYW4gdW5zaWduZWQgc2hvcnQgZm9yIGN1cnJlbnQga2VybmVsLgotCQkgKiBJIGhhdmUgeWV0IHRvIHNlZSBCUEYtQ29kZSB3aXRoIHRoYXQgbXVjaAotCQkgKiBpbnN0cnVjdGlvbnMgYnV0IHN0aWxsIGl0IGlzIHBvc3NpYmxlLiBTbyBmb3IgdGhlCi0JCSAqIHNha2Ugb2YgY29ycmVjdG5lc3MgSSBhZGRlZCB0aGlzIGNoZWNrLgotCQkgKi8KLQkJZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiBGaWx0ZXIgdG9vIGNvbXBsZXggZm9yIGtlcm5lbFxuIik7Ci0JCWZjb2RlLmxlbiA9IDA7Ci0JCWZjb2RlLmZpbHRlciA9IE5VTEw7Ci0JCWNhbl9maWx0ZXJfaW5fa2VybmVsID0gMDsKLQl9IGVsc2UKLSNlbmRpZiAvKiBVU0hSVF9NQVggKi8KLQl7Ci0JCS8qCi0JCSAqIE9oIGpveSwgdGhlIExpbnV4IGtlcm5lbCB1c2VzIHN0cnVjdCBzb2NrX2Zwcm9nIGluc3RlYWQKLQkJICogb2Ygc3RydWN0IGJwZl9wcm9ncmFtIGFuZCBvZiBjb3Vyc2UgdGhlIGxlbmd0aCBmaWVsZCBpcwotCQkgKiBvZiBkaWZmZXJlbnQgc2l6ZS4gUG9pbnRlZCBvdXQgYnkgU2ViYXN0aWFuCi0JCSAqCi0JCSAqIE9oLCBhbmQgd2UgYWxzbyBuZWVkIHRvIGZpeCBpdCB1cCBzbyB0aGF0IGFsbCAicmV0IgotCQkgKiBpbnN0cnVjdGlvbnMgd2l0aCBub24temVybyBvcGVyYW5kcyBoYXZlIE1BWElNVU1fU05BUExFTgotCQkgKiBhcyB0aGUgb3BlcmFuZCBpZiB3ZSdyZSBub3QgY2FwdHVyaW5nIGluIG1lbW9yeS1tYXBwZWQKLQkJICogbW9kZSwgYW5kIHNvIHRoYXQsIGlmIHdlJ3JlIGluIGNvb2tlZCBtb2RlLCBhbGwgbWVtb3J5LQotCQkgKiByZWZlcmVuY2UgaW5zdHJ1Y3Rpb25zIHVzZSBzcGVjaWFsIG1hZ2ljIG9mZnNldHMgaW4KLQkJICogcmVmZXJlbmNlcyB0byB0aGUgbGluay1sYXllciBoZWFkZXIgYW5kIGFzc3VtZSB0aGF0IHRoZQotCQkgKiBsaW5rLWxheWVyIHBheWxvYWQgYmVnaW5zIGF0IDA7ICJmaXhfcHJvZ3JhbSgpIiB3aWxsIGRvCi0JCSAqIHRoYXQuCi0JCSAqLwotCQlzd2l0Y2ggKGZpeF9wcm9ncmFtKGhhbmRsZSwgJmZjb2RlLCBpc19tbWFwcGVkKSkgewotCi0JCWNhc2UgLTE6Ci0JCWRlZmF1bHQ6Ci0JCQkvKgotCQkJICogRmF0YWwgZXJyb3I7IGp1c3QgcXVpdC4KLQkJCSAqIChUaGUgImRlZmF1bHQiIGNhc2Ugc2hvdWxkbid0IGhhcHBlbjsgd2UKLQkJCSAqIHJldHVybiAtMSBmb3IgdGhhdCByZWFzb24uKQotCQkJICovCi0JCQlyZXR1cm4gLTE7Ci0KLQkJY2FzZSAwOgotCQkJLyoKLQkJCSAqIFRoZSBwcm9ncmFtIHBlcmZvcm1lZCBjaGVja3MgdGhhdCB3ZSBjYW4ndCBtYWtlCi0JCQkgKiB3b3JrIGluIHRoZSBrZXJuZWwuCi0JCQkgKi8KLQkJCWNhbl9maWx0ZXJfaW5fa2VybmVsID0gMDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgMToKLQkJCS8qCi0JCQkgKiBXZSBoYXZlIGEgZmlsdGVyIHRoYXQnbGwgd29yayBpbiB0aGUga2VybmVsLgotCQkJICovCi0JCQljYW5fZmlsdGVyX2luX2tlcm5lbCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qCi0JICogTk9URTogYXQgdGhpcyBwb2ludCwgd2UndmUgc2V0IGJvdGggdGhlICJsZW4iIGFuZCAiZmlsdGVyIgotCSAqIGZpZWxkcyBvZiAiZmNvZGUiLiAgQXMgb2YgdGhlIDIuNi4zMi40IGtlcm5lbCwgYXQgbGVhc3QsCi0JICogdGhvc2UgYXJlIHRoZSBvbmx5IG1lbWJlcnMgb2YgdGhlICJzb2NrX2Zwcm9nIiBzdHJ1Y3R1cmUsCi0JICogc28gd2UgaW5pdGlhbGl6ZSBldmVyeSBtZW1iZXIgb2YgdGhhdCBzdHJ1Y3R1cmUuCi0JICoKLQkgKiBJZiB0aGVyZSBpcyBhbnl0aGluZyBpbiAiZmNvZGUiIHRoYXQgaXMgbm90IGluaXRpYWxpemVkLAotCSAqIGl0IGlzIGVpdGhlciBhIGZpZWxkIGFkZGVkIGluIGEgbGF0ZXIga2VybmVsLCBvciBpdCdzCi0JICogcGFkZGluZy4KLQkgKgotCSAqIElmIGEgbmV3IGZpZWxkIGlzIGFkZGVkLCB0aGlzIGNvZGUgbmVlZHMgdG8gYmUgdXBkYXRlZAotCSAqIHRvIHNldCBpdCBjb3JyZWN0bHkuCi0JICoKLQkgKiBJZiB0aGVyZSBhcmUgbm8gb3RoZXIgZmllbGRzLCB0aGVuOgotCSAqCi0JICoJaWYgdGhlIExpbnV4IGtlcm5lbCBsb29rcyBhdCB0aGUgcGFkZGluZywgaXQncwotCSAqCWJ1Z2d5OwotCSAqCi0JICoJaWYgdGhlIExpbnV4IGtlcm5lbCBkb2Vzbid0IGxvb2sgYXQgdGhlIHBhZGRpbmcsCi0JICoJdGhlbiBpZiBzb21lIHRvb2wgY29tcGxhaW5zIHRoYXQgd2UncmUgcGFzc2luZwotCSAqCXVuaW5pdGlhbGl6ZWQgZGF0YSB0byB0aGUga2VybmVsLCB0aGVuIHRoZSB0b29sCi0JICoJaXMgYnVnZ3kgYW5kIG5lZWRzIHRvIHVuZGVyc3RhbmQgdGhhdCBpdCdzIGp1c3QKLQkgKglwYWRkaW5nLgotCSAqLwotCWlmIChjYW5fZmlsdGVyX2luX2tlcm5lbCkgewotCQlpZiAoKGVyciA9IHNldF9rZXJuZWxfZmlsdGVyKGhhbmRsZSwgJmZjb2RlKSkgPT0gMCkKLQkJewotCQkJLyoKLQkJCSAqIEluc3RhbGxhdGlvbiBzdWNjZWRlZCAtIHVzaW5nIGtlcm5lbCBmaWx0ZXIsCi0JCQkgKiBzbyB1c2VybGFuZCBmaWx0ZXJpbmcgbm90IG5lZWRlZC4KLQkJCSAqLwotCQkJaGFuZGxlcC0+ZmlsdGVyX2luX3VzZXJsYW5kID0gMDsKLQkJfQotCQllbHNlIGlmIChlcnIgPT0gLTEpCS8qIE5vbi1mYXRhbCBlcnJvciAqLwotCQl7Ci0JCQkvKgotCQkJICogUHJpbnQgYSB3YXJuaW5nIGlmIHdlIHdlcmVuJ3QgYWJsZSB0byBpbnN0YWxsCi0JCQkgKiB0aGUgZmlsdGVyIGZvciBhIHJlYXNvbiBvdGhlciB0aGFuICJ0aGlzIGtlcm5lbAotCQkJICogaXNuJ3QgY29uZmlndXJlZCB0byBzdXBwb3J0IHNvY2tldCBmaWx0ZXJzLgotCQkJICovCi0JCQlpZiAoZXJybm8gIT0gRU5PUFJPVE9PUFQgJiYgZXJybm8gIT0gRU9QTk9UU1VQUCkgewotCQkJCWZwcmludGYoc3RkZXJyLAotCQkJCSAgICAiV2FybmluZzogS2VybmVsIGZpbHRlciBmYWlsZWQ6ICVzXG4iLAotCQkJCQlwY2FwX3N0cmVycm9yKGVycm5vKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIElmIHdlJ3JlIG5vdCB1c2luZyB0aGUga2VybmVsIGZpbHRlciwgZ2V0IHJpZCBvZiBhbnkga2VybmVsCi0JICogZmlsdGVyIHRoYXQgbWlnaHQndmUgYmVlbiB0aGVyZSBiZWZvcmUsIGUuZy4gYmVjYXVzZSB0aGUKLQkgKiBwcmV2aW91cyBmaWx0ZXIgY291bGQgd29yayBpbiB0aGUga2VybmVsLCBvciBiZWNhdXNlIHNvbWUgb3RoZXIKLQkgKiBjb2RlIGF0dGFjaGVkIGEgZmlsdGVyIHRvIHRoZSBzb2NrZXQgYnkgc29tZSBtZWFucyBvdGhlciB0aGFuCi0JICogY2FsbGluZyAicGNhcF9zZXRmaWx0ZXIoKSIuICBPdGhlcndpc2UsIHRoZSBrZXJuZWwgZmlsdGVyIG1heQotCSAqIGZpbHRlciBvdXQgcGFja2V0cyB0aGF0IHdvdWxkIHBhc3MgdGhlIG5ldyB1c2VybGFuZCBmaWx0ZXIuCi0JICovCi0JaWYgKGhhbmRsZXAtPmZpbHRlcl9pbl91c2VybGFuZCkgewotCQlpZiAocmVzZXRfa2VybmVsX2ZpbHRlcihoYW5kbGUpID09IC0xKSB7Ci0JCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGhhbmRsZS0+ZXJyYnVmLAotCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsIGVycm5vLAotCQkJICAgICJjYW4ndCByZW1vdmUga2VybmVsIGZpbHRlciIpOwotCQkJZXJyID0gLTI7CS8qIGZhdGFsIGVycm9yICovCi0JCX0KLQl9Ci0KLQkvKgotCSAqIEZyZWUgdXAgdGhlIGNvcHkgb2YgdGhlIGZpbHRlciB0aGF0IHdhcyBtYWRlIGJ5ICJmaXhfcHJvZ3JhbSgpIi4KLQkgKi8KLQlpZiAoZmNvZGUuZmlsdGVyICE9IE5VTEwpCi0JCWZyZWUoZmNvZGUuZmlsdGVyKTsKLQotCWlmIChlcnIgPT0gLTIpCi0JCS8qIEZhdGFsIGVycm9yICovCi0JCXJldHVybiAtMTsKLSNlbmRpZiAvKiBTT19BVFRBQ0hfRklMVEVSICovCi0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotcGNhcF9zZXRmaWx0ZXJfbGludXgocGNhcF90ICpoYW5kbGUsIHN0cnVjdCBicGZfcHJvZ3JhbSAqZmlsdGVyKQotewotCXJldHVybiBwY2FwX3NldGZpbHRlcl9saW51eF9jb21tb24oaGFuZGxlLCBmaWx0ZXIsIDApOwotfQotCi0KLS8qCiAgKiBTZXQgZGlyZWN0aW9uIGZsYWc6IFdoaWNoIHBhY2tldHMgZG8gd2UgYWNjZXB0IG9uIGEgZm9yd2FyZGluZwogICogc2luZ2xlIGRldmljZT8gSU4sIE9VVCBvciBib3RoPwogICovCiBzdGF0aWMgaW50CiBwY2FwX3NldGRpcmVjdGlvbl9saW51eChwY2FwX3QgKmhhbmRsZSwgcGNhcF9kaXJlY3Rpb25fdCBkKQogewotI2lmZGVmIEhBVkVfUEZfUEFDS0VUX1NPQ0tFVFMKLQlzdHJ1Y3QgcGNhcF9saW51eCAqaGFuZGxlcCA9IGhhbmRsZS0+cHJpdjsKLQotCWlmICghaGFuZGxlcC0+c29ja19wYWNrZXQpIHsKLQkJaGFuZGxlLT5kaXJlY3Rpb24gPSBkOwotCQlyZXR1cm4gMDsKLQl9Ci0jZW5kaWYKIAkvKgotCSAqIFdlJ3JlIG5vdCB1c2luZyBQRl9QQUNLRVQgc29ja2V0cywgc28gd2UgY2FuJ3QgZGV0ZXJtaW5lCi0JICogdGhlIGRpcmVjdGlvbiBvZiB0aGUgcGFja2V0LgorCSAqIEl0J3MgZ3VhcmFudGVlZCwgYXQgdGhpcyBwb2ludCwgdGhhdCBkIGlzIGEgdmFsaWQKKwkgKiBkaXJlY3Rpb24gdmFsdWUuCiAJICovCi0JcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkgICAgIlNldHRpbmcgZGlyZWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gU09DS19QQUNLRVQgc29ja2V0cyIpOwotCXJldHVybiAtMTsKKwloYW5kbGUtPmRpcmVjdGlvbiA9IGQ7CisJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBIQVZFX1BGX1BBQ0tFVF9TT0NLRVRTCi0vKgotICogTWFwIHRoZSBQQUNLRVRfIHZhbHVlIHRvIGEgTElOVVhfU0xMXyB2YWx1ZTsgd2UKLSAqIHdhbnQgdGhlIHNhbWUgbnVtZXJpY2FsIHZhbHVlIHRvIGJlIHVzZWQgaW4KLSAqIHRoZSBsaW5rLWxheWVyIGhlYWRlciBldmVuIGlmIHRoZSBudW1lcmljYWwgdmFsdWVzCi0gKiBmb3IgdGhlIFBBQ0tFVF8gI2RlZmluZXMgY2hhbmdlLCBzbyB0aGF0IHByb2dyYW1zCi0gKiB0aGF0IGxvb2sgYXQgdGhlIHBhY2tldCB0eXBlIGZpZWxkIHdpbGwgYWx3YXlzIGJlCi0gKiBhYmxlIHRvIGhhbmRsZSBETFRfTElOVVhfU0xMIGNhcHR1cmVzLgotICovCi1zdGF0aWMgc2hvcnQgaW50Ci1tYXBfcGFja2V0X3R5cGVfdG9fc2xsX3R5cGUoc2hvcnQgaW50IHNsbF9wa3R0eXBlKQotewotCXN3aXRjaCAoc2xsX3BrdHR5cGUpIHsKLQotCWNhc2UgUEFDS0VUX0hPU1Q6Ci0JCXJldHVybiBodG9ucyhMSU5VWF9TTExfSE9TVCk7Ci0KLQljYXNlIFBBQ0tFVF9CUk9BRENBU1Q6Ci0JCXJldHVybiBodG9ucyhMSU5VWF9TTExfQlJPQURDQVNUKTsKLQotCWNhc2UgUEFDS0VUX01VTFRJQ0FTVDoKLQkJcmV0dXJuICBodG9ucyhMSU5VWF9TTExfTVVMVElDQVNUKTsKLQotCWNhc2UgUEFDS0VUX09USEVSSE9TVDoKLQkJcmV0dXJuIGh0b25zKExJTlVYX1NMTF9PVEhFUkhPU1QpOwotCi0JY2FzZSBQQUNLRVRfT1VUR09JTkc6Ci0JCXJldHVybiBodG9ucyhMSU5VWF9TTExfT1VUR09JTkcpOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC0xOwotCX0KLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50Ci1pc193aWZpKGludCBzb2NrX2ZkCi0jaWZuZGVmIElXX01PREVfTU9OSVRPUgotX1VfCi0jZW5kaWYKLSwgY29uc3QgY2hhciAqZGV2aWNlKQoraXNfd2lmaShjb25zdCBjaGFyICpkZXZpY2UpCiB7CiAJY2hhciAqcGF0aHN0cjsKIAlzdHJ1Y3Qgc3RhdCBzdGF0YjsKLSNpZmRlZiBJV19NT0RFX01PTklUT1IKLQljaGFyIGVycmJ1ZltQQ0FQX0VSUkJVRl9TSVpFXTsKLSNlbmRpZgogCiAJLyoKIAkgKiBTZWUgaWYgdGhlcmUncyBhIHN5c2ZzIHdpcmVsZXNzIGRpcmVjdG9yeSBmb3IgaXQuCkBAIC0zMDg5LDE5ICsxNzQzLDYgQEAKIAl9CiAJZnJlZShwYXRoc3RyKTsKIAotI2lmZGVmIElXX01PREVfTU9OSVRPUgotCS8qCi0JICogT0ssIG1heWJlIGl0J3Mgbm90IHdpcmVsZXNzLCBvciBtYXliZSB0aGlzIGtlcm5lbCBkb2Vzbid0Ci0JICogc3VwcG9ydCBzeXNmcy4gIFRyeSB0aGUgd2lyZWxlc3MgZXh0ZW5zaW9ucy4KLQkgKi8KLQlpZiAoaGFzX3dleHQoc29ja19mZCwgZGV2aWNlLCBlcnJidWYpID09IDEpIHsKLQkJLyoKLQkJICogSXQgc3VwcG9ydHMgdGhlIHdpcmVsZXNzIGV4dGVuc2lvbnMsIHNvIGl0J3MgYSBXaS1GaQotCQkgKiBkZXZpY2UuCi0JCSAqLwotCQlyZXR1cm4gMTsKLQl9Ci0jZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzEyMyw3ICsxNzY0LDcgQEAKICAqCiAgKiAgU2V0cyB0aGUgbGluayB0eXBlIHRvIC0xIGlmIHVuYWJsZSB0byBtYXAgdGhlIHR5cGUuCiAgKi8KLXN0YXRpYyB2b2lkIG1hcF9hcnBocmRfdG9fZGx0KHBjYXBfdCAqaGFuZGxlLCBpbnQgc29ja19mZCwgaW50IGFycHR5cGUsCitzdGF0aWMgdm9pZCBtYXBfYXJwaHJkX3RvX2RsdChwY2FwX3QgKmhhbmRsZSwgaW50IGFycHR5cGUsCiAJCQkgICAgICBjb25zdCBjaGFyICpkZXZpY2UsIGludCBjb29rZWRfb2spCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgY2RtYV9ybW5ldFtdID0gImNkbWFfcm1uZXQiOwpAQCAtMzE2MSwxMiArMTgwMiwzMyBAQAogCQkgKiBYWFggLSBhcmUgdGhlcmUgYW55IG90aGVyIHNvcnRzIG9mICJmYWtlIEV0aGVybmV0IiB0aGF0CiAJCSAqIGhhdmUgQVJQSFJEX0VUSEVSIGJ1dCB0aGF0IHNob3VsZG4ndCBvZmZlciBETFRfRE9DU0lTIGFzCiAJCSAqIGEgQ2lzY28gQ01UUyB3b24ndCBwdXQgdHJhZmZpYyBvbnRvIGl0IG9yIGdldCB0cmFmZmljCi0JCSAqIGJyaWRnZWQgb250byBpdD8gIElTRE4gaXMgaGFuZGxlZCBpbiAiYWN0aXZhdGVfbmV3KCkiLAorCQkgKiBicmlkZ2VkIG9udG8gaXQ/ICBJU0ROIGlzIGhhbmRsZWQgaW4gImFjdGl2YXRlX3BmX3BhY2tldCgpIiwKIAkJICogYXMgd2UgZmFsbCBiYWNrIG9uIGNvb2tlZCBtb2RlIHRoZXJlLCBhbmQgd2UgdXNlCiAJCSAqIGlzX3dpZmkoKSB0byBjaGVjayBmb3IgODAyLjExIGRldmljZXM7IGFyZSB0aGVyZSBhbnkKIAkJICogb3RoZXJzPwogCQkgKi8KLQkJaWYgKCFpc193aWZpKHNvY2tfZmQsIGRldmljZSkpIHsKKwkJaWYgKCFpc193aWZpKGRldmljZSkpIHsKKwkJCWludCByZXQ7CisKKwkJCS8qCisJCQkgKiBUaGlzIGlzIG5vdCBhIFdpLUZpIGRldmljZSBidXQgaXQgY291bGQgYmUKKwkJCSAqIGEgRFNBIG1hc3Rlci9tYW5hZ2VtZW50IG5ldHdvcmsgZGV2aWNlLgorCQkJICovCisJCQlyZXQgPSBpZmFjZV9kc2FfZ2V0X3Byb3RvX2luZm8oZGV2aWNlLCBoYW5kbGUpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuOworCisJCQlpZiAocmV0ID09IDEpIHsKKwkJCQkvKgorCQkJCSAqIFRoaXMgaXMgYSBEU0EgbWFzdGVyL21hbmFnZW1lbnQgbmV0d29yaworCQkJCSAqIGRldmljZSBsaW5rdHlwZSBpcyBhbHJlYWR5IHNldCBieQorCQkJCSAqIGlmYWNlX2RzYV9nZXRfcHJvdG9faW5mbygpIHNldCBhbgorCQkJCSAqIGFwcHJvcHJpYXRlIG9mZnNldCBoZXJlLgorCQkJCSAqLworCQkJCWhhbmRsZS0+b2Zmc2V0ID0gMjsKKwkJCQlicmVhazsKKwkJCX0KKwogCQkJLyoKIAkJCSAqIEl0J3Mgbm90IGEgV2ktRmkgZGV2aWNlOyBvZmZlciBET0NTSVMuCiAJCQkgKi8KQEAgLTM0MzIsNyArMjA5NCw3IEBACiAJCSAqIEJhY2sgaW4gMjAwMiwgRG9uYWxkIExlZSBhdCBDcmF5IHdhbnRlZCBhIERMVF8gZm9yCiAJCSAqIElQLW92ZXItRkM6CiAJCSAqCi0JCSAqCWh0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS90Y3BkdW1wLXdvcmtlcnNAc2FuZGVsbWFuLm90dGF3YS5vbi5jYS9tc2cwMTA0My5odG1sCisJCSAqCWh0dHBzOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vdGNwZHVtcC13b3JrZXJzQHNhbmRlbG1hbi5vdHRhd2Eub24uY2EvbXNnMDEwNDMuaHRtbAogCQkgKgogCQkgKiBhbmQgb25lIHdhcyBhc3NpZ25lZC4KIAkJICoKQEAgLTM0OTYsNyArMjE1OCw3IEBACiAJCS8qIFdlIG5lZWQgdG8gc2F2ZSBwYWNrZXQgZGlyZWN0aW9uIGZvciBJckRBIGRlY29kaW5nLAogCQkgKiBzbyBsZXQncyB1c2UgIkxpbnV4LWNvb2tlZCIgbW9kZS4gSmVhbiBJSQogCQkgKgotCQkgKiBYWFggLSB0aGlzIGlzIGhhbmRsZWQgaW4gYWN0aXZhdGVfbmV3KCkuICovCisJCSAqIFhYWCAtIHRoaXMgaXMgaGFuZGxlZCBpbiBhY3RpdmF0ZV9wZl9wYWNrZXQoKS4gKi8KIAkJLyogaGFuZGxlcC0+Y29va2VkID0gMTsgKi8KIAkJYnJlYWs7CiAKQEAgLTM1MzgsNyArMjIwMCw3IEBACiAJCSAqIHBpY2sgdXAgdGhlIG5ldGxpbmsgcHJvdG9jb2wgdHlwZSBzdWNoIGFzIE5FVExJTktfUk9VVEUsCiAJCSAqIE5FVExJTktfR0VORVJJQywgTkVUTElOS19GSUJfTE9PS1VQLCBldGMuCiAJCSAqCi0JCSAqIFhYWCAtIHRoaXMgaXMgaGFuZGxlZCBpbiBhY3RpdmF0ZV9uZXcoKS4KKwkJICogWFhYIC0gdGhpcyBpcyBoYW5kbGVkIGluIGFjdGl2YXRlX3BmX3BhY2tldCgpLgogCQkgKi8KIAkJLyogaGFuZGxlcC0+Y29va2VkID0gMTsgKi8KIAkJYnJlYWs7CkBAIC0zNTU2LDI0ICsyMjE4LDU2IEBACiAJfQogfQogCi0vKiA9PT09PSBGdW5jdGlvbnMgdG8gaW50ZXJmYWNlIHRvIHRoZSBuZXdlciBrZXJuZWxzID09PT09PT09PT09PT09PT09PSAqLworI2lmZGVmIFBBQ0tFVF9SRVNFUlZFCitzdGF0aWMgdm9pZAorc2V0X2RsdF9saXN0X2Nvb2tlZChwY2FwX3QgKmhhbmRsZSwgaW50IHNvY2tfZmQpCit7CisJc29ja2xlbl90CQlsZW47CisJdW5zaWduZWQgaW50CQl0cF9yZXNlcnZlOworCisJLyoKKwkgKiBJZiB3ZSBjYW4ndCBkbyBQQUNLRVRfUkVTRVJWRSwgd2UgY2FuJ3QgcmVzZXJ2ZSBleHRyYSBzcGFjZQorCSAqIGZvciBhIERMTF9MSU5VWF9TTEwyIGhlYWRlciwgc28gd2UgY2FuJ3Qgc3VwcG9ydCBETFRfTElOVVhfU0xMMi4KKwkgKi8KKwlsZW4gPSBzaXplb2YodHBfcmVzZXJ2ZSk7CisJaWYgKGdldHNvY2tvcHQoc29ja19mZCwgU09MX1BBQ0tFVCwgUEFDS0VUX1JFU0VSVkUsICZ0cF9yZXNlcnZlLAorCSAgICAmbGVuKSA9PSAwKSB7CisJCS8qCisJCSAqIFllcywgd2UgY2FuIGRvIERMTF9MSU5VWF9TTEwyLgorCQkgKi8KKwkJaGFuZGxlLT5kbHRfbGlzdCA9ICh1X2ludCAqKSBtYWxsb2Moc2l6ZW9mKHVfaW50KSAqIDIpOworCQkvKgorCQkgKiBJZiB0aGF0IGZhaWxzLCBqdXN0IGxlYXZlIHRoZSBsaXN0IGVtcHR5LgorCQkgKi8KKwkJaWYgKGhhbmRsZS0+ZGx0X2xpc3QgIT0gTlVMTCkgeworCQkJaGFuZGxlLT5kbHRfbGlzdFswXSA9IERMVF9MSU5VWF9TTEw7CisJCQloYW5kbGUtPmRsdF9saXN0WzFdID0gRExUX0xJTlVYX1NMTDI7CisJCQloYW5kbGUtPmRsdF9jb3VudCA9IDI7CisJCX0KKwl9Cit9CisjZWxzZS8qIFBBQ0tFVF9SRVNFUlZFICovCisvKgorICogVGhlIGJ1aWxkIGVudmlyb25tZW50IGRvZXNuJ3QgZGVmaW5lIFBBQ0tFVF9SRVNFUlZFLCBzbyB3ZSBjYW4ndCByZXNlcnZlCisgKiBleHRyYSBzcGFjZSBmb3IgYSBETExfTElOVVhfU0xMMiBoZWFkZXIsIHNvIHdlIGNhbid0IHN1cHBvcnQgRExUX0xJTlVYX1NMTDIuCisgKi8KK3N0YXRpYyB2b2lkCitzZXRfZGx0X2xpc3RfY29va2VkKHBjYXBfdCAqaGFuZGxlIF9VXywgaW50IHNvY2tfZmQgX1VfKQoreworfQorI2VuZGlmIC8qIFBBQ0tFVF9SRVNFUlZFICovCiAKIC8qCi0gKiBUcnkgdG8gb3BlbiBhIHBhY2tldCBzb2NrZXQgdXNpbmcgdGhlIG5ldyBrZXJuZWwgUEZfUEFDS0VUIGludGVyZmFjZS4KLSAqIFJldHVybnMgMSBvbiBzdWNjZXNzLCAwIG9uIGFuIGVycm9yIHRoYXQgbWVhbnMgdGhlIG5ldyBpbnRlcmZhY2UgaXNuJ3QKLSAqIHByZXNlbnQgKHNvIHRoZSBvbGQgU09DS19QQUNLRVQgaW50ZXJmYWNlIHNob3VsZCBiZSB0cmllZCksIGFuZCBhCi0gKiBQQ0FQX0VSUk9SXyB2YWx1ZSBvbiBhbiBlcnJvciB0aGF0IG1lYW5zIHRoYXQgdGhlIG9sZCBtZWNoYW5pc20gd29uJ3QKLSAqIHdvcmsgZWl0aGVyIChzbyBpdCBzaG91bGRuJ3QgYmUgdHJpZWQpLgorICogVHJ5IHRvIHNldCB1cCBhIFBGX1BBQ0tFVCBzb2NrZXQuCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgYSBQQ0FQX0VSUk9SXyB2YWx1ZSBvbiBmYWlsdXJlLgogICovCiBzdGF0aWMgaW50Ci1hY3RpdmF0ZV9uZXcocGNhcF90ICpoYW5kbGUpCithY3RpdmF0ZV9wZl9wYWNrZXQocGNhcF90ICpoYW5kbGUsIGludCBpc19hbnlfZGV2aWNlKQogewotI2lmZGVmIEhBVkVfUEZfUEFDS0VUX1NPQ0tFVFMKIAlzdHJ1Y3QgcGNhcF9saW51eCAqaGFuZGxlcCA9IGhhbmRsZS0+cHJpdjsKIAljb25zdCBjaGFyCQkqZGV2aWNlID0gaGFuZGxlLT5vcHQuZGV2aWNlOwotCWludAkJCWlzX2FueV9kZXZpY2UgPSAoc3RyY21wKGRldmljZSwgImFueSIpID09IDApOwotCWludAkJCXByb3RvY29sID0gcGNhcF9wcm90b2NvbChoYW5kbGUpOwotCWludAkJCXNvY2tfZmQgPSAtMSwgYXJwdHlwZTsKKwlpbnQJCQlzdGF0dXMgPSAwOworCWludAkJCXNvY2tfZmQsIGFycHR5cGU7CiAjaWZkZWYgSEFWRV9QQUNLRVRfQVVYREFUQQogCWludAkJCXZhbDsKICNlbmRpZgpAQCAtMzU4NSw0MyArMjI3OSwzNyBAQAogI2VuZGlmCiAKIAkvKgotCSAqIE9wZW4gYSBzb2NrZXQgd2l0aCBwcm90b2NvbCBmYW1pbHkgcGFja2V0LiBJZiB0aGUKLQkgKiAiYW55IiBkZXZpY2Ugd2FzIHNwZWNpZmllZCwgd2Ugb3BlbiBhIFNPQ0tfREdSQU0KLQkgKiBzb2NrZXQgZm9yIHRoZSBjb29rZWQgaW50ZXJmYWNlLCBvdGhlcndpc2Ugd2UgZmlyc3QKLQkgKiB0cnkgYSBTT0NLX1JBVyBzb2NrZXQgZm9yIHRoZSByYXcgaW50ZXJmYWNlLgorCSAqIE9wZW4gYSBzb2NrZXQgd2l0aCBwcm90b2NvbCBmYW1pbHkgcGFja2V0LiBJZiBjb29rZWQgaXMgdHJ1ZSwKKwkgKiB3ZSBvcGVuIGEgU09DS19ER1JBTSBzb2NrZXQgZm9yIHRoZSBjb29rZWQgaW50ZXJmYWNlLCBvdGhlcndpc2UKKwkgKiB3ZSBvcGVuIGEgU09DS19SQVcgc29ja2V0IGZvciB0aGUgcmF3IGludGVyZmFjZS4KKwkgKgorCSAqIFRoZSBwcm90b2NvbCBpcyBzZXQgdG8gMC4gIFRoaXMgbWVhbnMgd2Ugd2lsbCByZWNlaXZlIG5vCisJICogcGFja2V0cyB1bnRpbCB3ZSAiYmluZCIgdGhlIHNvY2tldCB3aXRoIGEgbm9uLXplcm8KKwkgKiBwcm90b2NvbC4gIFRoaXMgYWxsb3dzIHVzIHRvIHNldHVwIHRoZSByaW5nIGJ1ZmZlcnMgd2l0aG91dAorCSAqIGRyb3BwaW5nIGFueSBwYWNrZXRzLgogCSAqLwogCXNvY2tfZmQgPSBpc19hbnlfZGV2aWNlID8KLQkJc29ja2V0KFBGX1BBQ0tFVCwgU09DS19ER1JBTSwgcHJvdG9jb2wpIDoKLQkJc29ja2V0KFBGX1BBQ0tFVCwgU09DS19SQVcsIHByb3RvY29sKTsKKwkJc29ja2V0KFBGX1BBQ0tFVCwgU09DS19ER1JBTSwgMCkgOgorCQlzb2NrZXQoUEZfUEFDS0VULCBTT0NLX1JBVywgMCk7CiAKIAlpZiAoc29ja19mZCA9PSAtMSkgewotCQlpZiAoZXJybm8gPT0gRUlOVkFMIHx8IGVycm5vID09IEVBRk5PU1VQUE9SVCkgewotCQkJLyoKLQkJCSAqIFdlIGRvbid0IHN1cHBvcnQgUEZfUEFDS0VUL1NPQ0tfd2hhdGV2ZXIKLQkJCSAqIHNvY2tldHM7IHRyeSB0aGUgb2xkIG1lY2hhbmlzbS4KLQkJCSAqLwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkgICAgZXJybm8sICJzb2NrZXQiKTsKIAkJaWYgKGVycm5vID09IEVQRVJNIHx8IGVycm5vID09IEVBQ0NFUykgewogCQkJLyoKIAkJCSAqIFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gb3BlbiB0aGUKIAkJCSAqIHNvY2tldC4KIAkJCSAqLwotCQkJcmV0dXJuIFBDQVBfRVJST1JfUEVSTV9ERU5JRUQ7CisJCQlzdGF0dXMgPSBQQ0FQX0VSUk9SX1BFUk1fREVOSUVEOwogCQl9IGVsc2UgewogCQkJLyoKIAkJCSAqIE90aGVyIGVycm9yLgogCQkJICovCi0JCQlyZXR1cm4gUENBUF9FUlJPUjsKKwkJCXN0YXR1cyA9IFBDQVBfRVJST1I7CiAJCX0KKwkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJICAgIGVycm5vLCAic29ja2V0Iik7CisJCXJldHVybiBzdGF0dXM7CiAJfQogCi0JLyogSXQgc2VlbXMgdGhlIGtlcm5lbCBzdXBwb3J0cyB0aGUgbmV3IGludGVyZmFjZS4gKi8KLQloYW5kbGVwLT5zb2NrX3BhY2tldCA9IDA7Ci0KIAkvKgogCSAqIEdldCB0aGUgaW50ZXJmYWNlIGluZGV4IG9mIHRoZSBsb29wYmFjayBkZXZpY2UuCiAJICogSWYgdGhlIGF0dGVtcHQgZmFpbHMsIGRvbid0IGZhaWwsIGp1c3Qgc2V0IHRoZQpAQCAtMzY4Niw3ICsyMzc0LDcgQEAKIAkJCWNsb3NlKHNvY2tfZmQpOwogCQkJcmV0dXJuIGFycHR5cGU7CiAJCX0KLQkJbWFwX2FycGhyZF90b19kbHQoaGFuZGxlLCBzb2NrX2ZkLCBhcnB0eXBlLCBkZXZpY2UsIDEpOworCQltYXBfYXJwaHJkX3RvX2RsdChoYW5kbGUsIGFycHR5cGUsIGRldmljZSwgMSk7CiAJCWlmIChoYW5kbGUtPmxpbmt0eXBlID09IC0xIHx8CiAJCSAgICBoYW5kbGUtPmxpbmt0eXBlID09IERMVF9MSU5VWF9TTEwgfHwKIAkJICAgIGhhbmRsZS0+bGlua3R5cGUgPT0gRExUX0xJTlVYX0lSREEgfHwKQEAgLTM3MDMsMjggKzIzOTEsMjkgQEAKIAkJCSAqIHR5cGUgd2UgY2FuIG9ubHkgZGV0ZXJtaW5lIGJ5IHVzaW5nCiAJCQkgKiBBUElzIHRoYXQgbWF5IGJlIGRpZmZlcmVudCBvbiBkaWZmZXJlbnQKIAkJCSAqIGtlcm5lbHMpIC0gcmVvcGVuIGluIGNvb2tlZCBtb2RlLgorCQkJICoKKwkJCSAqIElmIHRoZSB0eXBlIGlzIHVua25vd24sIHJldHVybiBhIHdhcm5pbmc7CisJCQkgKiBtYXBfYXJwaHJkX3RvX2RsdCgpIGhhcyBhbHJlYWR5IHNldCB0aGUKKwkJCSAqIHdhcm5pbmcgbWVzc2FnZS4KIAkJCSAqLwogCQkJaWYgKGNsb3NlKHNvY2tfZmQpID09IC0xKSB7CiAJCQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhoYW5kbGUtPmVycmJ1ZiwKIAkJCQkgICAgUENBUF9FUlJCVUZfU0laRSwgZXJybm8sICJjbG9zZSIpOwogCQkJCXJldHVybiBQQ0FQX0VSUk9SOwogCQkJfQotCQkJc29ja19mZCA9IHNvY2tldChQRl9QQUNLRVQsIFNPQ0tfREdSQU0sIHByb3RvY29sKTsKLQkJCWlmIChzb2NrX2ZkID09IC0xKSB7CisJCQlzb2NrX2ZkID0gc29ja2V0KFBGX1BBQ0tFVCwgU09DS19ER1JBTSwgMCk7CisJCQlpZiAoc29ja19mZCA8IDApIHsKKwkJCQkvKgorCQkJCSAqIEZhdGFsIGVycm9yLiAgV2UgdHJlYXQgdGhpcyBhcworCQkJCSAqIGEgZ2VuZXJpYyBlcnJvcjsgd2UgYWxyZWFkeSBrbm93CisJCQkJICogdGhhdCB3ZSB3ZXJlIGFibGUgdG8gb3BlbiBhCisJCQkJICogUEZfUEFDS0VUL1NPQ0tfUkFXIHNvY2tldCwgc28KKwkJCQkgKiBhbnkgZmFpbHVyZSBpcyBhICJ0aGlzIHNob3VsZG4ndAorCQkJCSAqIGhhcHBlbiIgY2FzZS4KKwkJCQkgKi8KIAkJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGhhbmRsZS0+ZXJyYnVmLAogCQkJCSAgICBQQ0FQX0VSUkJVRl9TSVpFLCBlcnJubywgInNvY2tldCIpOwotCQkJCWlmIChlcnJubyA9PSBFUEVSTSB8fCBlcnJubyA9PSBFQUNDRVMpIHsKLQkJCQkJLyoKLQkJCQkJICogWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0bwotCQkJCQkgKiBvcGVuIHRoZSBzb2NrZXQuCi0JCQkJCSAqLwotCQkJCQlyZXR1cm4gUENBUF9FUlJPUl9QRVJNX0RFTklFRDsKLQkJCQl9IGVsc2UgewotCQkJCQkvKgotCQkJCQkgKiBPdGhlciBlcnJvci4KLQkJCQkJICovCi0JCQkJCXJldHVybiBQQ0FQX0VSUk9SOwotCQkJCX0KKwkJCQlyZXR1cm4gUENBUF9FUlJPUjsKIAkJCX0KIAkJCWhhbmRsZXAtPmNvb2tlZCA9IDE7CiAKQEAgLTM3MzcsNiArMjQyNiw3IEBACiAJCQkJZnJlZShoYW5kbGUtPmRsdF9saXN0KTsKIAkJCQloYW5kbGUtPmRsdF9saXN0ID0gTlVMTDsKIAkJCQloYW5kbGUtPmRsdF9jb3VudCA9IDA7CisJCQkJc2V0X2RsdF9saXN0X2Nvb2tlZChoYW5kbGUsIHNvY2tfZmQpOwogCQkJfQogCiAJCQlpZiAoaGFuZGxlLT5saW5rdHlwZSA9PSAtMSkgewpAQCAtMzc0Niw3ICsyNDM2LDcgQEAKIAkJCQkgKiB1cGRhdGUgIm1hcF9hcnBocmRfdG9fZGx0KCkiCiAJCQkJICogdG8gaGFuZGxlIHRoZSBuZXcgdHlwZS4KIAkJCQkgKi8KLQkJCQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJCXNucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJCQkiYXJwdHlwZSAlZCBub3QgIgogCQkJCQkic3VwcG9ydGVkIGJ5IGxpYnBjYXAgLSAiCiAJCQkJCSJmYWxsaW5nIGJhY2sgdG8gY29va2VkICIKQEAgLTM3NjMsNiArMjQ1MywxMiBAQAogCQkJICAgIGhhbmRsZS0+bGlua3R5cGUgIT0gRExUX0xJTlVYX0xBUEQgJiYKIAkJCSAgICBoYW5kbGUtPmxpbmt0eXBlICE9IERMVF9ORVRMSU5LKQogCQkJCWhhbmRsZS0+bGlua3R5cGUgPSBETFRfTElOVVhfU0xMOworCQkJaWYgKGhhbmRsZS0+bGlua3R5cGUgPT0gLTEpIHsKKwkJCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQkgICAgInVua25vd24gYXJwdHlwZSAlZCwgZGVmYXVsdGluZyB0byBjb29rZWQgbW9kZSIsCisJCQkJICAgIGFycHR5cGUpOworCQkJCXN0YXR1cyA9IFBDQVBfV0FSTklORzsKKwkJCX0KIAkJfQogCiAJCWhhbmRsZXAtPmlmaW5kZXggPSBpZmFjZV9nZXRfaWQoc29ja19mZCwgZGV2aWNlLApAQCAtMzc3MywxMiArMjQ2OSw5IEBACiAJCX0KIAogCQlpZiAoKGVyciA9IGlmYWNlX2JpbmQoc29ja19mZCwgaGFuZGxlcC0+aWZpbmRleCwKLQkJICAgIGhhbmRsZS0+ZXJyYnVmLCBwcm90b2NvbCkpICE9IDEpIHsKLQkJICAgIAljbG9zZShzb2NrX2ZkKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCXJldHVybiBlcnI7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIDA7CS8qIHRyeSBvbGQgbWVjaGFuaXNtICovCisJCSAgICBoYW5kbGUtPmVycmJ1ZiwgMCkpICE9IDApIHsKKwkJCWNsb3NlKHNvY2tfZmQpOworCQkJcmV0dXJuIGVycjsKIAkJfQogCX0gZWxzZSB7CiAJCS8qCkBAIC0zNzk3LDYgKzI0OTAsOSBAQAogCQkgKi8KIAkJaGFuZGxlcC0+Y29va2VkID0gMTsKIAkJaGFuZGxlLT5saW5rdHlwZSA9IERMVF9MSU5VWF9TTEw7CisJCWhhbmRsZS0+ZGx0X2xpc3QgPSBOVUxMOworCQloYW5kbGUtPmRsdF9jb3VudCA9IDA7CisJCXNldF9kbHRfbGlzdF9jb29rZWQoaGFuZGxlLCBzb2NrX2ZkKTsKIAogCQkvKgogCQkgKiBXZSdyZSBub3QgYm91bmQgdG8gYSBkZXZpY2UuCkBAIC0zODM3LDIwICsyNTMzLDIwIEBACiAJCWlmIChzZXRzb2Nrb3B0KHNvY2tfZmQsIFNPTF9QQUNLRVQsIFBBQ0tFVF9BRERfTUVNQkVSU0hJUCwKIAkJICAgICZtciwgc2l6ZW9mKG1yKSkgPT0gLTEpIHsKIAkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oaGFuZGxlLT5lcnJidWYsCi0JCQkgICAgUENBUF9FUlJCVUZfU0laRSwgZXJybm8sICJzZXRzb2Nrb3B0Iik7CisJCQkgICAgUENBUF9FUlJCVUZfU0laRSwgZXJybm8sICJzZXRzb2Nrb3B0IChQQUNLRVRfQUREX01FTUJFUlNISVApIik7CiAJCQljbG9zZShzb2NrX2ZkKTsKIAkJCXJldHVybiBQQ0FQX0VSUk9SOwogCQl9CiAJfQogCi0JLyogRW5hYmxlIGF1eGlsbGFyeSBkYXRhIGlmIHN1cHBvcnRlZCBhbmQgcmVzZXJ2ZSByb29tIGZvcgorCS8qIEVuYWJsZSBhdXhpbGlhcnkgZGF0YSBpZiBzdXBwb3J0ZWQgYW5kIHJlc2VydmUgcm9vbSBmb3IKIAkgKiByZWNvbnN0cnVjdGluZyBWTEFOIGhlYWRlcnMuICovCiAjaWZkZWYgSEFWRV9QQUNLRVRfQVVYREFUQQogCXZhbCA9IDE7CiAJaWYgKHNldHNvY2tvcHQoc29ja19mZCwgU09MX1BBQ0tFVCwgUEFDS0VUX0FVWERBVEEsICZ2YWwsCiAJCSAgICAgICBzaXplb2YodmFsKSkgPT0gLTEgJiYgZXJybm8gIT0gRU5PUFJPVE9PUFQpIHsKIAkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJICAgIGVycm5vLCAic2V0c29ja29wdCIpOworCQkgICAgZXJybm8sICJzZXRzb2Nrb3B0IChQQUNLRVRfQVVYREFUQSkiKTsKIAkJY2xvc2Uoc29ja19mZCk7CiAJCXJldHVybiBQQ0FQX0VSUk9SOwogCX0KQEAgLTM4NTgsMjIgKzI1NTQsMTggQEAKICNlbmRpZiAvKiBIQVZFX1BBQ0tFVF9BVVhEQVRBICovCiAKIAkvKgotCSAqIFRoaXMgaXMgYSAyLjJbLnhdIG9yIGxhdGVyIGtlcm5lbCAod2Uga25vdyB0aGF0Ci0JICogYmVjYXVzZSB3ZSdyZSBub3QgdXNpbmcgYSBTT0NLX1BBQ0tFVCBzb2NrZXQgLQotCSAqIFBGX1BBQ0tFVCBpcyBzdXBwb3J0ZWQgb25seSBpbiAyLjIgYW5kIGxhdGVyCi0JICoga2VybmVscykuCi0JICoKLQkgKiBXZSBjYW4gc2FmZWx5IHBhc3MgInJlY3Zmcm9tKCkiIGEgYnl0ZSBjb3VudAotCSAqIGJhc2VkIG9uIHRoZSBzbmFwc2hvdCBsZW5ndGguCi0JICoKIAkgKiBJZiB3ZSdyZSBpbiBjb29rZWQgbW9kZSwgbWFrZSB0aGUgc25hcHNob3QgbGVuZ3RoCiAJICogbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYSAiY29va2VkIG1vZGUiIGhlYWRlciBwbHVzCiAJICogMSBieXRlIG9mIHBhY2tldCBkYXRhIChzbyB3ZSBkb24ndCBwYXNzIGEgYnl0ZQogCSAqIGNvdW50IG9mIDAgdG8gInJlY3Zmcm9tKCkiKS4KKwkgKiBYWFggLSB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdGhpcyB3aWxsIGJlIERMVF9MSU5VWF9TTEwKKwkgKiBvciBETFRfTElOVVhfU0xMMiwgc28gbWFrZSBzdXJlIGl0J3MgYmlnIGVub3VnaCBmb3IKKwkgKiBhIERMVF9MSU5VWF9TTEwyICJjb29rZWQgbW9kZSIgaGVhZGVyOyBhIHNuYXBzaG90IGxlbmd0aAorCSAqIHRoYXQgc21hbGwgaXMgc2lsbHkgYW55d2F5LgogCSAqLwogCWlmIChoYW5kbGVwLT5jb29rZWQpIHsKLQkJaWYgKGhhbmRsZS0+c25hcHNob3QgPCBTTExfSERSX0xFTiArIDEpCi0JCQloYW5kbGUtPnNuYXBzaG90ID0gU0xMX0hEUl9MRU4gKyAxOworCQlpZiAoaGFuZGxlLT5zbmFwc2hvdCA8IFNMTDJfSERSX0xFTiArIDEpCisJCQloYW5kbGUtPnNuYXBzaG90ID0gU0xMMl9IRFJfTEVOICsgMTsKIAl9CiAJaGFuZGxlLT5idWZzaXplID0gaGFuZGxlLT5zbmFwc2hvdDsKIApAQCAtMzkwNCwxNyArMjU5NiwxNSBAQAogCQlicmVhazsKIAl9CiAKLSNpZiBkZWZpbmVkKFNJT0NHU1RBTVBOUykgJiYgZGVmaW5lZChTT19USU1FU1RBTVBOUykKIAlpZiAoaGFuZGxlLT5vcHQudHN0YW1wX3ByZWNpc2lvbiA9PSBQQ0FQX1RTVEFNUF9QUkVDSVNJT05fTkFOTykgewogCQlpbnQgbnNlY190c3RhbXBzID0gMTsKIAogCQlpZiAoc2V0c29ja29wdChzb2NrX2ZkLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVBOUywgJm5zZWNfdHN0YW1wcywgc2l6ZW9mKG5zZWNfdHN0YW1wcykpIDwgMCkgewotCQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgInNldHNvY2tvcHQ6IHVuYWJsZSB0byBzZXQgU09fVElNRVNUQU1QTlMiKTsKKwkJCXNucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAic2V0c29ja29wdDogdW5hYmxlIHRvIHNldCBTT19USU1FU1RBTVBOUyIpOwogCQkJY2xvc2Uoc29ja19mZCk7CiAJCQlyZXR1cm4gUENBUF9FUlJPUjsKIAkJfQogCX0KLSNlbmRpZiAvKiBkZWZpbmVkKFNJT0NHU1RBTVBOUykgJiYgZGVmaW5lZChTT19USU1FU1RBTVBOUykgKi8KIAogCS8qCiAJICogV2UndmUgc3VjY2VlZGVkLiBTYXZlIHRoZSBzb2NrZXQgRkQgaW4gdGhlIHBjYXAgc3RydWN0dXJlLgpAQCAtMzkzOCwzMCArMjYyOCwyMCBAQAogCX0KICNlbmRpZiAvKiBkZWZpbmVkKFNPX0JQRl9FWFRFTlNJT05TKSAmJiBkZWZpbmVkKFNLRl9BRF9WTEFOX1RBR19QUkVTRU5UKSAqLwogCi0JcmV0dXJuIDE7Ci0jZWxzZSAvKiBIQVZFX1BGX1BBQ0tFVF9TT0NLRVRTICovCi0Jc3RybGNweShlYnVmLAotCQkiTmV3IHBhY2tldCBjYXB0dXJpbmcgaW50ZXJmYWNlIG5vdCBzdXBwb3J0ZWQgYnkgYnVpbGQgIgotCQkiZW52aXJvbm1lbnQiLCBQQ0FQX0VSUkJVRl9TSVpFKTsKLQlyZXR1cm4gMDsKLSNlbmRpZiAvKiBIQVZFX1BGX1BBQ0tFVF9TT0NLRVRTICovCisJcmV0dXJuIHN0YXR1czsKIH0KIAotI2lmZGVmIEhBVkVfUEFDS0VUX1JJTkcKIC8qCi0gKiBBdHRlbXB0IHRvIGFjdGl2YXRlIHdpdGggbWVtb3J5LW1hcHBlZCBhY2Nlc3MuCisgKiBBdHRlbXB0IHRvIHNldHVwIG1lbW9yeS1tYXBwZWQgYWNjZXNzLgogICoKICAqIE9uIHN1Y2Nlc3MsIHJldHVybnMgMSwgYW5kIHNldHMgKnN0YXR1cyB0byAwIGlmIHRoZXJlIGFyZSBubyB3YXJuaW5ncwogICogb3IgdG8gYSBQQ0FQX1dBUk5JTkdfIGNvZGUgaWYgdGhlcmUgaXMgYSB3YXJuaW5nLgogICoKLSAqIE9uIGZhaWx1cmUgZHVlIHRvIGxhY2sgb2Ygc3VwcG9ydCBmb3IgbWVtb3J5LW1hcHBlZCBjYXB0dXJlLCByZXR1cm5zCi0gKiAwLgotICoKICAqIE9uIGVycm9yLCByZXR1cm5zIC0xLCBhbmQgc2V0cyAqc3RhdHVzIHRvIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBjb2RlOwogICogaWYgdGhhdCBpcyBQQ0FQX0VSUk9SLCBzZXRzIGhhbmRsZS0+ZXJyYnVmIHRvIHRoZSBhcHByb3ByaWF0ZSBtZXNzYWdlLgogICovCiBzdGF0aWMgaW50Ci1hY3RpdmF0ZV9tbWFwKHBjYXBfdCAqaGFuZGxlLCBpbnQgKnN0YXR1cykKK3NldHVwX21tYXBwZWQocGNhcF90ICpoYW5kbGUsIGludCAqc3RhdHVzKQogewogCXN0cnVjdCBwY2FwX2xpbnV4ICpoYW5kbGVwID0gaGFuZGxlLT5wcml2OwogCWludCByZXQ7CkBAIC0zOTg5LDE0ICsyNjY5LDYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAJcmV0ID0gY3JlYXRlX3JpbmcoaGFuZGxlLCBzdGF0dXMpOwotCWlmIChyZXQgPT0gMCkgewotCQkvKgotCQkgKiBXZSBkb24ndCBzdXBwb3J0IG1lbW9yeS1tYXBwZWQgY2FwdHVyZTsgb3VyIGNhbGxlcgotCQkgKiB3aWxsIGZhbGwgYmFjayBvbiByZWFkaW5nIGZyb20gdGhlIHNvY2tldC4KLQkJICovCi0JCWZyZWUoaGFuZGxlcC0+b25lc2hvdF9idWZmZXIpOwotCQlyZXR1cm4gMDsKLQl9CiAJaWYgKHJldCA9PSAtMSkgewogCQkvKgogCQkgKiBFcnJvciBhdHRlbXB0aW5nIHRvIGVuYWJsZSBtZW1vcnktbWFwcGVkIGNhcHR1cmU7CkBAIC00MDEwLDQ5ICsyNjgyLDE4IEBACiAJICogU3VjY2Vzcy4gICpzdGF0dXMgaGFzIGJlZW4gc2V0IGVpdGhlciB0byAwIGlmIHRoZXJlIGFyZSBubwogCSAqIHdhcm5pbmdzIG9yIHRvIGEgUENBUF9XQVJOSU5HXyB2YWx1ZSBpZiB0aGVyZSBpcyBhIHdhcm5pbmcuCiAJICoKLQkgKiBPdmVycmlkZSBzb21lIGRlZmF1bHRzIGFuZCBpbmhlcml0IHRoZSBvdGhlciBmaWVsZHMgZnJvbQotCSAqIGFjdGl2YXRlX25ldy4KIAkgKiBoYW5kbGUtPm9mZnNldCBpcyB1c2VkIHRvIGdldCB0aGUgY3VycmVudCBwb3NpdGlvbiBpbnRvIHRoZSByeCByaW5nLgogCSAqIGhhbmRsZS0+Y2MgaXMgdXNlZCB0byBzdG9yZSB0aGUgcmluZyBzaXplLgogCSAqLwogCi0Jc3dpdGNoIChoYW5kbGVwLT50cF92ZXJzaW9uKSB7Ci0JY2FzZSBUUEFDS0VUX1YxOgotCQloYW5kbGUtPnJlYWRfb3AgPSBwY2FwX3JlYWRfbGludXhfbW1hcF92MTsKLQkJYnJlYWs7Ci0JY2FzZSBUUEFDS0VUX1YxXzY0OgotCQloYW5kbGUtPnJlYWRfb3AgPSBwY2FwX3JlYWRfbGludXhfbW1hcF92MV82NDsKLQkJYnJlYWs7Ci0jaWZkZWYgSEFWRV9UUEFDS0VUMgotCWNhc2UgVFBBQ0tFVF9WMjoKLQkJaGFuZGxlLT5yZWFkX29wID0gcGNhcF9yZWFkX2xpbnV4X21tYXBfdjI7Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSEFWRV9UUEFDS0VUMwotCWNhc2UgVFBBQ0tFVF9WMzoKLQkJaGFuZGxlLT5yZWFkX29wID0gcGNhcF9yZWFkX2xpbnV4X21tYXBfdjM7Ci0JCWJyZWFrOwotI2VuZGlmCi0JfQotCWhhbmRsZS0+Y2xlYW51cF9vcCA9IHBjYXBfY2xlYW51cF9saW51eF9tbWFwOwotCWhhbmRsZS0+c2V0ZmlsdGVyX29wID0gcGNhcF9zZXRmaWx0ZXJfbGludXhfbW1hcDsKLQloYW5kbGUtPnNldG5vbmJsb2NrX29wID0gcGNhcF9zZXRub25ibG9ja19tbWFwOwotCWhhbmRsZS0+Z2V0bm9uYmxvY2tfb3AgPSBwY2FwX2dldG5vbmJsb2NrX21tYXA7Ci0JaGFuZGxlLT5vbmVzaG90X2NhbGxiYWNrID0gcGNhcF9vbmVzaG90X21tYXA7Ci0JaGFuZGxlLT5zZWxlY3RhYmxlX2ZkID0gaGFuZGxlLT5mZDsKKwkvKgorCSAqIFNldCB0aGUgdGltZW91dCB0byB1c2UgaW4gcG9sbCgpIGJlZm9yZSByZXR1cm5pbmcuCisJICovCisJc2V0X3BvbGxfdGltZW91dChoYW5kbGVwKTsKKwogCXJldHVybiAxOwogfQotI2Vsc2UgLyogSEFWRV9QQUNLRVRfUklORyAqLwotc3RhdGljIGludAotYWN0aXZhdGVfbW1hcChwY2FwX3QgKmhhbmRsZSBfVV8sIGludCAqc3RhdHVzIF9VXykKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBIQVZFX1BBQ0tFVF9SSU5HICovCiAKLSNpZmRlZiBIQVZFX1BBQ0tFVF9SSU5HCi0KLSNpZiBkZWZpbmVkKEhBVkVfVFBBQ0tFVDIpIHx8IGRlZmluZWQoSEFWRV9UUEFDS0VUMykKIC8qCiAgKiBBdHRlbXB0IHRvIHNldCB0aGUgc29ja2V0IHRvIHRoZSBzcGVjaWZpZWQgdmVyc2lvbiBvZiB0aGUgbWVtb3J5LW1hcHBlZAogICogaGVhZGVyLgpAQCAtNDA3MCwxNSArMjcxMSw0MSBAQAogCS8qCiAJICogUHJvYmUgd2hldGhlciBrZXJuZWwgc3VwcG9ydHMgdGhlIHNwZWNpZmllZCBUUEFDS0VUIHZlcnNpb247CiAJICogdGhpcyBhbHNvIGdldHMgdGhlIGxlbmd0aCBvZiB0aGUgaGVhZGVyIGZvciB0aGF0IHZlcnNpb24uCisJICoKKwkgKiBUaGlzIHNvY2tldCBvcHRpb24gd2FzIGludHJvZHVjZWQgaW4gMi42LjI3LCB3aGljaCB3YXMKKwkgKiBhbHNvIHRoZSBmaXJzdCByZWxlYXNlIHdpdGggVFBBQ0tFVF9WMiBzdXBwb3J0LgogCSAqLwogCWlmIChnZXRzb2Nrb3B0KGhhbmRsZS0+ZmQsIFNPTF9QQUNLRVQsIFBBQ0tFVF9IRFJMRU4sICZ2YWwsICZsZW4pIDwgMCkgewotCQlpZiAoZXJybm8gPT0gRU5PUFJPVE9PUFQgfHwgZXJybm8gPT0gRUlOVkFMKQotCQkJcmV0dXJuIDE7CS8qIG5vICovCisJCWlmIChlcnJubyA9PSBFSU5WQUwpIHsKKwkJCS8qCisJCQkgKiBFSU5WQUwgbWVhbnMgdGhpcyBzcGVjaWZpYyB2ZXJzaW9uIG9mIFRQQUNLRVQKKwkJCSAqIGlzIG5vdCBzdXBwb3J0ZWQuIFRlbGwgdGhlIGNhbGxlciB0aGV5IGNhbiB0cnkKKwkJCSAqIHdpdGggYSBkaWZmZXJlbnQgb25lOyBpZiB0aGV5J3ZlIHJ1biBvdXQgb2YKKwkJCSAqIG90aGVycyB0byB0cnksIGxldCB0aGVtIHNldCB0aGUgZXJyb3IgbWVzc2FnZQorCQkJICogYXBwcm9wcmlhdGVseS4KKwkJCSAqLworCQkJcmV0dXJuIDE7CisJCX0KIAotCQkvKiBGYWlsZWQgdG8gZXZlbiBmaW5kIG91dDsgdGhpcyBpcyBhIGZhdGFsIGVycm9yLiAqLwotCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkgICAgZXJybm8sICJjYW4ndCBnZXQgJXMgaGVhZGVyIGxlbiBvbiBwYWNrZXQgc29ja2V0IiwKLQkJICAgIHZlcnNpb25fc3RyKTsKKwkJLyoKKwkJICogQWxsIG90aGVyIGVycm9ycyBhcmUgZmF0YWwuCisJCSAqLworCQlpZiAoZXJybm8gPT0gRU5PUFJPVE9PUFQpIHsKKwkJCS8qCisJCQkgKiBQQUNLRVRfSERSTEVOIGlzbid0IHN1cHBvcnRlZCwgd2hpY2ggbWVhbnMKKwkJCSAqIHRoYXQgbWVtb3J5LW1hcHBlZCBjYXB0dXJlIGlzbid0IHN1cHBvcnRlZC4KKwkJCSAqIEluZGljYXRlIHRoYXQgaW4gdGhlIG1lc3NhZ2UuCisJCQkgKi8KKwkJCXNucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJICAgICJLZXJuZWwgZG9lc24ndCBzdXBwb3J0IG1lbW9yeS1tYXBwZWQgY2FwdHVyZTsgYSAyLjYuMjcgb3IgbGF0ZXIgMi54IGtlcm5lbCBpcyByZXF1aXJlZCwgd2l0aCBDT05GSUdfUEFDS0VUX01NQVAgc3BlY2lmaWVkIGZvciAyLngga2VybmVscyIpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFNvbWUgdW5leHBlY3RlZCBlcnJvci4KKwkJCSAqLworCQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCSAgICBlcnJubywgImNhbid0IGdldCAlcyBoZWFkZXIgbGVuIG9uIHBhY2tldCBzb2NrZXQiLAorCQkJICAgIHZlcnNpb25fc3RyKTsKKwkJfQogCQlyZXR1cm4gLTE7CiAJfQogCWhhbmRsZXAtPnRwX2hkcmxlbiA9IHZhbDsKQEAgLTQwOTIsNjUgKzI3NTksMjAgQEAKIAl9CiAJaGFuZGxlcC0+dHBfdmVyc2lvbiA9IHZlcnNpb247CiAKLQkvKiBSZXNlcnZlIHNwYWNlIGZvciBWTEFOIHRhZyByZWNvbnN0cnVjdGlvbiAqLwotCXZhbCA9IFZMQU5fVEFHX0xFTjsKLQlpZiAoc2V0c29ja29wdChoYW5kbGUtPmZkLCBTT0xfUEFDS0VULCBQQUNLRVRfUkVTRVJWRSwgJnZhbCwKLQkJCSAgIHNpemVvZih2YWwpKSA8IDApIHsKLQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJICAgIGVycm5vLCAiY2FuJ3Qgc2V0IHVwIHJlc2VydmUgb24gcGFja2V0IHNvY2tldCIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYgLyogZGVmaW5lZCBIQVZFX1RQQUNLRVQyIHx8IGRlZmluZWQgSEFWRV9UUEFDS0VUMyAqLwotCi0vKgotICogSWYgdGhlIGluc3RydWN0aW9uIHNldCBmb3Igd2hpY2ggd2UncmUgY29tcGlsaW5nIGhhcyBib3RoIDMyLWJpdAotICogYW5kIDY0LWJpdCB2ZXJzaW9ucywgYW5kIExpbnV4IHN1cHBvcnQgZm9yIHRoZSA2NC1iaXQgdmVyc2lvbgotICogcHJlZGF0ZXMgVFBBQ0tFVF9WMiwgZGVmaW5lIElTQV82NF9CSVQgYXMgdGhlIC5tYWNoaW5lIHZhbHVlCi0gKiB5b3UgZ2V0IGZyb20gdW5hbWUoKSBmb3IgdGhlIDY0LWJpdCB2ZXJzaW9uLiAgT3RoZXJ3aXNlLCBsZWF2ZQotICogaXQgdW5kZWZpbmVkLiAgKFRoaXMgaW5jbHVkZXMgQVJNLCB3aGljaCBoYXMgYSA2NC1iaXQgdmVyc2lvbiwKLSAqIGJ1dCBMaW51eCBzdXBwb3J0IGZvciBpdCBhcHBlYXJlZCB3ZWxsIGFmdGVyIFRQQUNLRVRfVjIgc3VwcG9ydAotICogZGlkLCBzbyB0aGVyZSBzaG91bGQgbmV2ZXIgYmUgYSBjYXNlIHdoZXJlIDMyLWJpdCBBUk0gY29kZSBpcwotICogcnVubmluZyBvIGEgNjQtYml0IGtlcm5lbCB0aGF0IG9ubHkgc3VwcG9ydHMgVFBBQ0tFVF9WMS4pCi0gKgotICogSWYgd2UndmUgb21pdHRlZCB5b3VyIGZhdm9yaXRlIHN1Y2ggYXJjaGl0ZWN0dXJlLCBwbGVhc2UgY29udHJpYnV0ZQotICogYSBwYXRjaC4gIChObyBwYXRjaCBpcyBuZWVkZWQgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBhcmUgMzItYml0LW9ubHkKLSAqIG9yIGZvciB3aGljaCBMaW51eCBoYXMgbm8gc3VwcG9ydCBmb3IgMzItYml0IHVzZXJsYW5kIC0gb3IgZm9yIHdoaWNoLAotICogYXMgbm90ZWQsIDY0LWJpdCBzdXBwb3J0IGFwcGVhcmVkIGluIExpbnV4IGFmdGVyIFRQQUNLRVRfVjIgc3VwcG9ydAotICogZGlkLikKLSAqLwotI2lmIGRlZmluZWQoX19pMzg2X18pCi0jZGVmaW5lIElTQV82NF9CSVQJIng4Nl82NCIKLSNlbGlmIGRlZmluZWQoX19wcGNfXykKLSNkZWZpbmUgSVNBXzY0X0JJVAkicHBjNjQiCi0jZWxpZiBkZWZpbmVkKF9fc3BhcmNfXykKLSNkZWZpbmUgSVNBXzY0X0JJVAkic3BhcmM2NCIKLSNlbGlmIGRlZmluZWQoX19zMzkwX18pCi0jZGVmaW5lIElTQV82NF9CSVQJInMzOTB4IgotI2VsaWYgZGVmaW5lZChfX21pcHNfXykKLSNkZWZpbmUgSVNBXzY0X0JJVAkibWlwczY0IgotI2VsaWYgZGVmaW5lZChfX2hwcGFfXykKLSNkZWZpbmUgSVNBXzY0X0JJVAkicGFyaXNjNjQiCi0jZW5kaWYKIAogLyoKICAqIEF0dGVtcHQgdG8gc2V0IHRoZSBzb2NrZXQgdG8gdmVyc2lvbiAzIG9mIHRoZSBtZW1vcnktbWFwcGVkIGhlYWRlciBhbmQsCiAgKiBpZiB0aGF0IGZhaWxzIGJlY2F1c2UgdmVyc2lvbiAzIGlzbid0IHN1cHBvcnRlZCwgYXR0ZW1wdCB0byBmYWxsCi0gKiBiYWNrIHRvIHZlcnNpb24gMi4gIElmIHZlcnNpb24gMiBpc24ndCBzdXBwb3J0ZWQsIGp1c3QgbGVhdmUgaXQgYXQKLSAqIHZlcnNpb24gMS4KKyAqIGJhY2sgdG8gdmVyc2lvbiAyLiAgSWYgdmVyc2lvbiAyIGlzbid0IHN1cHBvcnRlZCwganVzdCBmYWlsLgogICoKLSAqIFJldHVybiAxIGlmIHdlIHN1Y2NlZWQgb3IgaWYgd2UgZmFpbCBiZWNhdXNlIG5laXRoZXIgdmVyc2lvbiAyIG5vciAzIGlzCi0gKiBzdXBwb3J0ZWQ7IHJldHVybiAtMSBvbiBhbnkgb3RoZXIgZXJyb3IsIGFuZCBzZXQgaGFuZGxlLT5lcnJidWYuCisgKiBSZXR1cm4gMCBpZiB3ZSBzdWNjZWVkIGFuZCAtMSBvbiBhbnkgb3RoZXIgZXJyb3IsIGFuZCBzZXQgaGFuZGxlLT5lcnJidWYuCiAgKi8KIHN0YXRpYyBpbnQKIHByZXBhcmVfdHBhY2tldF9zb2NrZXQocGNhcF90ICpoYW5kbGUpCiB7Ci0Jc3RydWN0IHBjYXBfbGludXggKmhhbmRsZXAgPSBoYW5kbGUtPnByaXY7Ci0jaWYgZGVmaW5lZChIQVZFX1RQQUNLRVQyKSB8fCBkZWZpbmVkKEhBVkVfVFBBQ0tFVDMpCiAJaW50IHJldDsKLSNlbmRpZgogCiAjaWZkZWYgSEFWRV9UUEFDS0VUMwogCS8qCkBAIC00MTcwLDcgKzI3OTIsNyBAQAogCQkJLyoKIAkJCSAqIFN1Y2Nlc3MuCiAJCQkgKi8KLQkJCXJldHVybiAxOworCQkJcmV0dXJuIDA7CiAJCX0KIAkJaWYgKHJldCA9PSAtMSkgewogCQkJLyoKQEAgLTQxNzksMTAgKzI4MDEsMTQgQEAKIAkJCSAqLwogCQkJcmV0dXJuIC0xOwogCQl9CisKKwkJLyoKKwkJICogVGhpcyBtZWFucyBpdCByZXR1cm5lZCAxLCB3aGljaCBtZWFucyAidGhlIGtlcm5lbAorCQkgKiBkb2Vzbid0IHN1cHBvcnQgVFBBQ0tFVF9WMyI7IHRyeSBUUEFDS0VUX1YyLgorCQkgKi8KIAl9CiAjZW5kaWYgLyogSEFWRV9UUEFDS0VUMyAqLwogCi0jaWZkZWYgSEFWRV9UUEFDS0VUMgogCS8qCiAJICogVHJ5IHNldHRpbmcgdGhlIHZlcnNpb24gdG8gVFBBQ0tFVF9WMi4KIAkgKi8KQEAgLTQxOTEsNjIgKzI4MTcsMjIgQEAKIAkJLyoKIAkJICogU3VjY2Vzcy4KIAkJICovCi0JCXJldHVybiAxOworCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKHJldCA9PSAtMSkgeworCisJaWYgKHJldCA9PSAxKSB7CiAJCS8qCi0JCSAqIFdlIGZhaWxlZCBmb3Igc29tZSByZWFzb24gb3RoZXIgdGhhbiAidGhlCi0JCSAqIGtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgVFBBQ0tFVF9WMiIuCisJCSAqIE9LLCB0aGUga2VybmVsIHN1cHBvcnRzIG1lbW9yeS1tYXBwZWQgY2FwdHVyZSwgYnV0CisJCSAqIG5vdCBUUEFDS0VUX1YyLiAgU2V0IHRoZSBlcnJvciBtZXNzYWdlIGFwcHJvcHJpYXRlbHkuCiAJCSAqLwotCQlyZXR1cm4gLTE7CisJCXNucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkgICAgIktlcm5lbCBkb2Vzbid0IHN1cHBvcnQgVFBBQ0tFVF9WMjsgYSAyLjYuMjcgb3IgbGF0ZXIga2VybmVsIGlzIHJlcXVpcmVkIik7CiAJfQotI2VuZGlmIC8qIEhBVkVfVFBBQ0tFVDIgKi8KIAogCS8qCi0JICogT0ssIHdlJ3JlIHVzaW5nIFRQQUNLRVRfVjEsIGFzIHRoYXQncyBhbGwgdGhlIGtlcm5lbCBzdXBwb3J0cy4KKwkgKiBXZSBmYWlsZWQuCiAJICovCi0JaGFuZGxlcC0+dHBfdmVyc2lvbiA9IFRQQUNLRVRfVjE7Ci0JaGFuZGxlcC0+dHBfaGRybGVuID0gc2l6ZW9mKHN0cnVjdCB0cGFja2V0X2hkcik7Ci0KLSNpZmRlZiBJU0FfNjRfQklUCi0JLyoKLQkgKiAzMi1iaXQgdXNlcnNwYWNlICsgNjQtYml0IGtlcm5lbCArIFRQQUNLRVRfVjEgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGgKLQkgKiBlYWNoIG90aGVyIGR1ZSB0byBwbGF0Zm9ybS1kZXBlbmRlbnQgZGF0YSB0eXBlIHNpemUgZGlmZmVyZW5jZXMuCi0JICoKLQkgKiBJZiB3ZSBoYXZlIGEgMzItYml0IHVzZXJsYW5kIGFuZCBhIDY0LWJpdCBrZXJuZWwsIHVzZSBhbgotCSAqIGludGVybmFsbHktZGVmaW5lZCBUUEFDS0VUX1YxXzY0LCB3aXRoIHdoaWNoIHdlIHVzZSBhIDY0LWJpdAotCSAqIHZlcnNpb24gb2YgdGhlIGRhdGEgc3RydWN0dXJlcy4KLQkgKi8KLQlpZiAoc2l6ZW9mKGxvbmcpID09IDQpIHsKLQkJLyoKLQkJICogVGhpcyBpcyAzMi1iaXQgY29kZS4KLQkJICovCi0JCXN0cnVjdCB1dHNuYW1lIHV0c25hbWU7Ci0KLQkJaWYgKHVuYW1lKCZ1dHNuYW1lKSA9PSAtMSkgewotCQkJLyoKLQkJCSAqIEZhaWxlZC4KLQkJCSAqLwotCQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhoYW5kbGUtPmVycmJ1ZiwKLQkJCSAgICBQQ0FQX0VSUkJVRl9TSVpFLCBlcnJubywgInVuYW1lIGZhaWxlZCIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWlmIChzdHJjbXAodXRzbmFtZS5tYWNoaW5lLCBJU0FfNjRfQklUKSA9PSAwKSB7Ci0JCQkvKgotCQkJICogdW5hbWUoKSB0ZWxscyB1cyB0aGUgbWFjaGluZSBpcyA2NC1iaXQsCi0JCQkgKiBzbyB3ZSBwcmVzdW1hYmx5IGhhdmUgYSA2NC1iaXQga2VybmVsLgotCQkJICoKLQkJCSAqIFhYWCAtIHRoaXMgcHJlc3VtZXMgdGhhdCB1bmFtZSgpIHdvbid0IGxpZQotCQkJICogaW4gMzItYml0IGNvZGUgYW5kIGNsYWltIHRoYXQgdGhlIG1hY2hpbmUKLQkJCSAqIGhhcyB0aGUgMzItYml0IHZlcnNpb24gb2YgdGhlIElTQS4KLQkJCSAqLwotCQkJaGFuZGxlcC0+dHBfdmVyc2lvbiA9IFRQQUNLRVRfVjFfNjQ7Ci0JCQloYW5kbGVwLT50cF9oZHJsZW4gPSBzaXplb2Yoc3RydWN0IHRwYWNrZXRfaGRyXzY0KTsKLQkJfQotCX0KLSNlbmRpZgotCi0JcmV0dXJuIDE7CisJcmV0dXJuIC0xOwogfQogCiAjZGVmaW5lIE1BWChhLGIpICgoYSk+KGIpPyhhKTooYikpCkBAIC00MjU3LDkgKzI4NDMsNiBAQAogICogT24gc3VjY2VzcywgcmV0dXJucyAxLCBhbmQgc2V0cyAqc3RhdHVzIHRvIDAgaWYgdGhlcmUgYXJlIG5vIHdhcm5pbmdzCiAgKiBvciB0byBhIFBDQVBfV0FSTklOR18gY29kZSBpZiB0aGVyZSBpcyBhIHdhcm5pbmcuCiAgKgotICogT24gZmFpbHVyZSBkdWUgdG8gbGFjayBvZiBzdXBwb3J0IGZvciBtZW1vcnktbWFwcGVkIGNhcHR1cmUsIHJldHVybnMKLSAqIDAuCi0gKgogICogT24gZXJyb3IsIHJldHVybnMgLTEsIGFuZCBzZXRzICpzdGF0dXMgdG8gdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGU7CiAgKiBpZiB0aGF0IGlzIFBDQVBfRVJST1IsIHNldHMgaGFuZGxlLT5lcnJidWYgdG8gdGhlIGFwcHJvcHJpYXRlIG1lc3NhZ2UuCiAgKi8KQEAgLTQyNzAsOSArMjg1Myw5IEBACiAJdW5zaWduZWQgaSwgaiwgZnJhbWVzX3Blcl9ibG9jazsKICNpZmRlZiBIQVZFX1RQQUNLRVQzCiAJLyoKLQkgKiBGb3Igc29ja2V0cyB1c2luZyBUUEFDS0VUX1YxIG9yIFRQQUNLRVRfVjIsIHRoZSBleHRyYQotCSAqIHN0dWZmIGF0IHRoZSBlbmQgb2YgYSBzdHJ1Y3QgdHBhY2tldF9yZXEzIHdpbGwgYmUKLQkgKiBpZ25vcmVkLCBzbyB0aGlzIGlzIE9LIGV2ZW4gZm9yIHRob3NlIHNvY2tldHMuCisJICogRm9yIHNvY2tldHMgdXNpbmcgVFBBQ0tFVF9WMiwgdGhlIGV4dHJhIHN0dWZmIGF0IHRoZSBlbmQgb2YgYQorCSAqIHN0cnVjdCB0cGFja2V0X3JlcTMgd2lsbCBiZSBpZ25vcmVkLCBzbyB0aGlzIGlzIE9LIGV2ZW4gZm9yCisJICogdGhvc2Ugc29ja2V0cy4KIAkgKi8KIAlzdHJ1Y3QgdHBhY2tldF9yZXEzIHJlcTsKICNlbHNlCkBAIC00Mjg3LDEzICsyODcwLDU2IEBACiAJICovCiAJKnN0YXR1cyA9IDA7CiAKKwkvKgorCSAqIFJlc2VydmUgc3BhY2UgZm9yIFZMQU4gdGFnIHJlY29uc3RydWN0aW9uLgorCSAqLworCXRwX3Jlc2VydmUgPSBWTEFOX1RBR19MRU47CisKKwkvKgorCSAqIElmIHdlJ3JlIHVzaW5nIERMVF9MSU5VWF9TTEwyLCByZXNlcnZlIHNwYWNlIGZvciBhCisJICogRExUX0xJTlVYX1NMTDIgaGVhZGVyLgorCSAqCisJICogWFhYIC0gd2UgYXNzdW1lIHRoYXQgdGhlIGtlcm5lbCBpcyBzdGlsbCBhZGRpbmcKKwkgKiAxNiBieXRlcyBvZiBleHRyYSBzcGFjZTsgdGhhdCBoYXBwZW5zIHRvCisJICogY29ycmVzcG9uZCB0byBTTExfSERSX0xFTiAod2hldGhlciBpbnRlbnRpb25hbGx5CisJICogb3Igbm90IC0gdGhlIGtlcm5lbCBjb2RlIGhhcyBhIHJhdyAiMTYiIGluCisJICogdGhlIGV4cHJlc3Npb24pLCBzbyB3ZSBzdWJ0cmFjdCBTTExfSERSX0xFTgorCSAqIGZyb20gU0xMMl9IRFJfTEVOIHRvIGdldCB0aGUgYWRkaXRpb25hbCBzcGFjZQorCSAqIG5lZWRlZC4gIFRoYXQgYWxzbyBtZWFucyB3ZSBkb24ndCBib3RoZXIgcmVzZXJ2aW5nCisJICogYW55IGFkZGl0aW9uYWwgc3BhY2UgaWYgd2UncmUgdXNpbmcgRExUX0xJTlVYX1NMTC4KKwkgKgorCSAqIFhYWCAtIHNob3VsZCB3ZSB1c2UgVFBBQ0tFVF9BTElHTihTTEwyX0hEUl9MRU4gLSBTTExfSERSX0xFTik/CisJICovCisJaWYgKGhhbmRsZS0+bGlua3R5cGUgPT0gRExUX0xJTlVYX1NMTDIpCisJCXRwX3Jlc2VydmUgKz0gU0xMMl9IRFJfTEVOIC0gU0xMX0hEUl9MRU47CisKKwkvKgorCSAqIFRyeSB0byByZXF1ZXN0IHRoYXQgYW1vdW50IG9mIHJlc2VydmUgc3BhY2UuCisJICogVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIGNyZWF0aW5nIHRoZSByaW5nIGJ1ZmZlci4KKwkgKiBJZiBQQUNLRVRfUkVTRVJWRSBpcyBzdXBwb3J0ZWQsIGNyZWF0aW5nIHRoZSByaW5nCisJICogYnVmZmVyIHNob3VsZCBiZSwgYWx0aG91Z2ggaWYgY3JlYXRpbmcgdGhlIHJpbmcKKwkgKiBidWZmZXIgZmFpbHMsIHRoZSBQQUNLRVRfUkVTRVJWRSBjYWxsIGhhcyBubyBlZmZlY3QsCisJICogc28gZmFsbGluZyBiYWNrIG9uIHJlYWQtZnJvbS10aGUtc29ja2V0IGNhcHR1cmluZworCSAqIHdvbid0IGJlIGFmZmVjdGVkLgorCSAqLworCWxlbiA9IHNpemVvZih0cF9yZXNlcnZlKTsKKwlpZiAoc2V0c29ja29wdChoYW5kbGUtPmZkLCBTT0xfUEFDS0VULCBQQUNLRVRfUkVTRVJWRSwKKwkgICAgJnRwX3Jlc2VydmUsIGxlbikgPCAwKSB7CisJCS8qCisJCSAqIFdlIHRyZWF0IEVOT1BST1RPT1BUIGFzIGFuIGVycm9yLCBhcyB3ZQorCQkgKiBhbHJlYWR5IGRldGVybWluZWQgdGhhdCB3ZSBzdXBwb3J0CisJCSAqIFRQQUNLRVRfVjIgYW5kIGxhdGVyOyBzZWUgYWJvdmUuCisJCSAqLworCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGhhbmRsZS0+ZXJyYnVmLAorCQkgICAgUENBUF9FUlJCVUZfU0laRSwgZXJybm8sCisJCSAgICAic2V0c29ja29wdCAoUEFDS0VUX1JFU0VSVkUpIik7CisJCSpzdGF0dXMgPSBQQ0FQX0VSUk9SOworCQlyZXR1cm4gLTE7CisJfQorCiAJc3dpdGNoIChoYW5kbGVwLT50cF92ZXJzaW9uKSB7CiAKLQljYXNlIFRQQUNLRVRfVjE6Ci0JY2FzZSBUUEFDS0VUX1YxXzY0OgotI2lmZGVmIEhBVkVfVFBBQ0tFVDIKIAljYXNlIFRQQUNLRVRfVjI6Ci0jZW5kaWYKIAkJLyogTm90ZSB0aGF0IHdpdGggbGFyZ2Ugc25hcHNob3QgbGVuZ3RoIChzYXkgMjU2Sywgd2hpY2ggaXMKIAkJICogdGhlIGRlZmF1bHQgZm9yIHJlY2VudCB2ZXJzaW9ucyBvZiB0Y3BkdW1wLCBXaXJlc2hhcmssCiAJCSAqIFRTaGFyaywgZHVtcGNhcCBvciA2NEssIHRoZSB2YWx1ZSB0aGF0ICItcyAwIiBoYXMgZ2l2ZW4gZm9yCkBAIC00MzU5LDMwICsyOTg1LDEwIEBACiAJCWlmIChnZXRzb2Nrb3B0KGhhbmRsZS0+ZmQsIFNPTF9TT0NLRVQsIFNPX1RZUEUsICZza190eXBlLAogCQkgICAgJmxlbikgPCAwKSB7CiAJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGhhbmRsZS0+ZXJyYnVmLAotCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsIGVycm5vLCAiZ2V0c29ja29wdCIpOworCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsIGVycm5vLCAiZ2V0c29ja29wdCAoU09fVFlQRSkiKTsKIAkJCSpzdGF0dXMgPSBQQ0FQX0VSUk9SOwogCQkJcmV0dXJuIC0xOwogCQl9Ci0jaWZkZWYgUEFDS0VUX1JFU0VSVkUKLQkJbGVuID0gc2l6ZW9mKHRwX3Jlc2VydmUpOwotCQlpZiAoZ2V0c29ja29wdChoYW5kbGUtPmZkLCBTT0xfUEFDS0VULCBQQUNLRVRfUkVTRVJWRSwKLQkJICAgICZ0cF9yZXNlcnZlLCAmbGVuKSA8IDApIHsKLQkJCWlmIChlcnJubyAhPSBFTk9QUk9UT09QVCkgewotCQkJCS8qCi0JCQkJICogRU5PUFJPVE9PUFQgbWVhbnMgImtlcm5lbCBkb2Vzbid0IHN1cHBvcnQKLQkJCQkgKiBQQUNLRVRfUkVTRVJWRSIsIGluIHdoaWNoIGNhc2Ugd2UgZmFsbCBiYWNrCi0JCQkJICogYXMgYmVzdCB3ZSBjYW4uCi0JCQkJICovCi0JCQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhoYW5kbGUtPmVycmJ1ZiwKLQkJCQkgICAgUENBUF9FUlJCVUZfU0laRSwgZXJybm8sICJnZXRzb2Nrb3B0Iik7Ci0JCQkJKnN0YXR1cyA9IFBDQVBfRVJST1I7Ci0JCQkJcmV0dXJuIC0xOwotCQkJfQotCQkJdHBfcmVzZXJ2ZSA9IDA7CS8qIG9sZGVyIGtlcm5lbCwgcmVzZXJ2ZSBub3Qgc3VwcG9ydGVkICovCi0JCX0KLSNlbHNlCi0JCXRwX3Jlc2VydmUgPSAwOwkvKiBvbGRlciBrZXJuZWwsIHJlc2VydmUgbm90IHN1cHBvcnRlZCAqLwotI2VuZGlmCiAJCW1hY2xlbiA9IChza190eXBlID09IFNPQ0tfREdSQU0pID8gMCA6IE1BWF9MSU5LSEVBREVSX1NJWkU7CiAJCQkvKiBYWFg6IGluIHRoZSBrZXJuZWwgbWFjbGVuIGlzIGNhbGN1bGF0ZWQgZnJvbQogCQkJICogTExfQUxMT0NBVEVEX1NQQUNFKGRldikgYW5kIHZuZXRfaGRyLmhkcl9sZW4KQEAgLTQ0NDMsMTQgKzMwNDksMTQgQEAKIAkJYnJlYWs7CiAjZW5kaWYKIAlkZWZhdWx0OgotCQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICJJbnRlcm5hbCBlcnJvcjogdW5rbm93biBUUEFDS0VUXyB2YWx1ZSAldSIsCiAJCSAgICBoYW5kbGVwLT50cF92ZXJzaW9uKTsKIAkJKnN0YXR1cyA9IFBDQVBfRVJST1I7CiAJCXJldHVybiAtMTsKIAl9CiAKLQkvKiBjb21wdXRlIHRoZSBtaW51bXVtIGJsb2NrIHNpemUgdGhhdCB3aWxsIGhhbmRsZSB0aGlzIGZyYW1lLgorCS8qIGNvbXB1dGUgdGhlIG1pbmltdW0gYmxvY2sgc2l6ZSB0aGF0IHdpbGwgaGFuZGxlIHRoaXMgZnJhbWUuCiAJICogVGhlIGJsb2NrIGhhcyB0byBiZSBwYWdlIHNpemUgYWxpZ25lZC4KIAkgKiBUaGUgbWF4IGJsb2NrIHNpemUgYWxsb3dlZCBieSB0aGUga2VybmVsIGlzIGFyY2gtZGVwZW5kZW50IGFuZAogCSAqIGl0J3Mgbm90IGV4cGxpY2l0bHkgY2hlY2tlZCBoZXJlLiAqLwpAQCAtNDQ5Niw3ICszMTAyLDcgQEAKIAkJaHdjb25maWcucnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX0FMTDsKIAogCQltZW1zZXQoJmlmciwgMCwgc2l6ZW9mKGlmcikpOwotCQlzdHJsY3B5KGlmci5pZnJfbmFtZSwgaGFuZGxlLT5vcHQuZGV2aWNlLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CisJCXBjYXBfc3RybGNweShpZnIuaWZyX25hbWUsIGhhbmRsZS0+b3B0LmRldmljZSwgc2l6ZW9mKGlmci5pZnJfbmFtZSkpOwogCQlpZnIuaWZyX2RhdGEgPSAodm9pZCAqKSZod2NvbmZpZzsKIAogCQlpZiAoaW9jdGwoaGFuZGxlLT5mZCwgU0lPQ1NIV1RTVEFNUCwgJmlmcikgPCAwKSB7CkBAIC00NTgwLDcgKzMxODYsMjYgQEAKIAogI2lmZGVmIEhBVkVfVFBBQ0tFVDMKIAkvKiB0aW1lb3V0IHZhbHVlIHRvIHJldGlyZSBibG9jayAtIHVzZSB0aGUgY29uZmlndXJlZCBidWZmZXJpbmcgdGltZW91dCwgb3IgZGVmYXVsdCBpZiA8MC4gKi8KLQlyZXEudHBfcmV0aXJlX2Jsa190b3YgPSAoaGFuZGxlcC0+dGltZW91dD49MCk/aGFuZGxlcC0+dGltZW91dDowOworCWlmIChoYW5kbGVwLT50aW1lb3V0ID4gMCkgeworCQkvKiBVc2UgdGhlIHVzZXIgc3BlY2lmaWVkIHRpbWVvdXQgYXMgdGhlIGJsb2NrIHRpbWVvdXQgKi8KKwkJcmVxLnRwX3JldGlyZV9ibGtfdG92ID0gaGFuZGxlcC0+dGltZW91dDsKKwl9IGVsc2UgaWYgKGhhbmRsZXAtPnRpbWVvdXQgPT0gMCkgeworCQkvKgorCQkgKiBJbiBwY2FwLCB0aGlzIG1lYW5zICJpbmZpbml0ZSB0aW1lb3V0IjsgVFBBQ0tFVF9WMworCQkgKiBkb2Vzbid0IHN1cHBvcnQgdGhhdCwgc28ganVzdCBzZXQgaXQgdG8gVUlOVF9NQVgKKwkJICogbWlsbGlzZWNvbmRzLiAgSW4gdGhlIFRQQUNLRVRfVjMgbG9vcCwgaWYgdGhlCisJCSAqIHRpbWVvdXQgaXMgMCwgYW5kIHdlIGhhdmVuJ3QgeWV0IHNlZW4gYW55IHBhY2tldHMsCisJCSAqIGFuZCB3ZSBibG9jayBhbmQgc3RpbGwgZG9uJ3QgaGF2ZSBhbnkgcGFja2V0cywgd2UKKwkJICoga2VlcCBibG9ja2luZyB1bnRpbCB3ZSBkby4KKwkJICovCisJCXJlcS50cF9yZXRpcmVfYmxrX3RvdiA9IFVJTlRfTUFYOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFhYWCAtIHRoaXMgaXMgbm90IHZhbGlkOyB1c2UgMCwgbWVhbmluZyAiaGF2ZSB0aGUKKwkJICoga2VybmVsIHBpY2sgYSBkZWZhdWx0IiwgZm9yIG5vdy4KKwkJICovCisJCXJlcS50cF9yZXRpcmVfYmxrX3RvdiA9IDA7CisJfQogCS8qIHByaXZhdGUgZGF0YSBub3QgdXNlZCAqLwogCXJlcS50cF9zaXplb2ZfcHJpdiA9IDA7CiAJLyogUnggcmluZyAtIGZlYXR1cmUgcmVxdWVzdCBiaXRzIC0gbm9uZSAocnhoYXNoIHdpbGwgbm90IGJlIGZpbGxlZCkgKi8KQEAgLTQ2MDUsMTIgKzMyMzAsNiBAQAogCQkJCXJlcS50cF9mcmFtZV9uciAtPSByZXEudHBfZnJhbWVfbnIvMjA7CiAJCQlnb3RvIHJldHJ5OwogCQl9Ci0JCWlmIChlcnJubyA9PSBFTk9QUk9UT09QVCkgewotCQkJLyoKLQkJCSAqIFdlIGRvbid0IGhhdmUgcmluZyBidWZmZXIgc3VwcG9ydCBpbiB0aGlzIGtlcm5lbC4KLQkJCSAqLwotCQkJcmV0dXJuIDA7Ci0JCX0KIAkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgIGVycm5vLCAiY2FuJ3QgY3JlYXRlIHJ4IHJpbmcgb24gcGFja2V0IHNvY2tldCIpOwogCQkqc3RhdHVzID0gUENBUF9FUlJPUjsKQEAgLTQ2NDYsNyArMzI2NSw3IEBACiAJLyogZmlsbCB0aGUgaGVhZGVyIHJpbmcgd2l0aCBwcm9wZXIgZnJhbWUgcHRyKi8KIAloYW5kbGUtPm9mZnNldCA9IDA7CiAJZm9yIChpPTA7IGk8cmVxLnRwX2Jsb2NrX25yOyArK2kpIHsKLQkJdm9pZCAqYmFzZSA9ICZoYW5kbGVwLT5tbWFwYnVmW2kqcmVxLnRwX2Jsb2NrX3NpemVdOworCQl1X2NoYXIgKmJhc2UgPSAmaGFuZGxlcC0+bW1hcGJ1ZltpKnJlcS50cF9ibG9ja19zaXplXTsKIAkJZm9yIChqPTA7IGo8ZnJhbWVzX3Blcl9ibG9jazsgKytqLCArK2hhbmRsZS0+b2Zmc2V0KSB7CiAJCQlSSU5HX0dFVF9DVVJSRU5UX0ZSQU1FKGhhbmRsZSkgPSBiYXNlOwogCQkJYmFzZSArPSByZXEudHBfZnJhbWVfc2l6ZTsKQEAgLTQ2NjQsMTAgKzMyODMsMTQgQEAKIHsKIAlzdHJ1Y3QgcGNhcF9saW51eCAqaGFuZGxlcCA9IGhhbmRsZS0+cHJpdjsKIAotCS8qIHRlbGwgdGhlIGtlcm5lbCB0byBkZXN0cm95IHRoZSByaW5nKi8KKwkvKgorCSAqIFRlbGwgdGhlIGtlcm5lbCB0byBkZXN0cm95IHRoZSByaW5nLgorCSAqIFdlIGRvbid0IGNoZWNrIGZvciBzZXRzb2Nrb3B0IGZhaWx1cmUsIGFzIDEpIHdlIGNhbid0IHJlY292ZXIKKwkgKiBmcm9tIGFuIGVycm9yIGFuZCAyKSB3ZSBtaWdodCBub3QgeWV0IGhhdmUgc2V0IGl0IHVwIGluIHRoZQorCSAqIGZpcnN0IHBsYWNlLgorCSAqLwogCXN0cnVjdCB0cGFja2V0X3JlcSByZXE7CiAJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKLQkvKiBkbyBub3QgdGVzdCBmb3Igc2V0c29ja29wdCBmYWlsdXJlLCBhcyB3ZSBjYW4ndCByZWNvdmVyIGZyb20gYW55IGVycm9yICovCiAJKHZvaWQpc2V0c29ja29wdChoYW5kbGUtPmZkLCBTT0xfUEFDS0VULCBQQUNLRVRfUlhfUklORywKIAkJCQkodm9pZCAqKSAmcmVxLCBzaXplb2YocmVxKSk7CiAKQEAgLTQ2OTcsNyArMzMyMCw3IEBACiAgKiBwY2FwX25leHQoKSBvciBwY2FwX25leHRfZXgoKS4KICAqLwogc3RhdGljIHZvaWQKLXBjYXBfb25lc2hvdF9tbWFwKHVfY2hhciAqdXNlciwgY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICpoLAorcGNhcF9vbmVzaG90X2xpbnV4KHVfY2hhciAqdXNlciwgY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICpoLAogICAgIGNvbnN0IHVfY2hhciAqYnl0ZXMpCiB7CiAJc3RydWN0IG9uZXNob3RfdXNlcmRhdGEgKnNwID0gKHN0cnVjdCBvbmVzaG90X3VzZXJkYXRhICopdXNlcjsKQEAgLTQ3MDksMjIgKzMzMzIsOCBAQAogCSpzcC0+cGt0ID0gaGFuZGxlcC0+b25lc2hvdF9idWZmZXI7CiB9CiAKLXN0YXRpYyB2b2lkCi1wY2FwX2NsZWFudXBfbGludXhfbW1hcCggcGNhcF90ICpoYW5kbGUgKQotewotCXN0cnVjdCBwY2FwX2xpbnV4ICpoYW5kbGVwID0gaGFuZGxlLT5wcml2OwotCi0JZGVzdHJveV9yaW5nKGhhbmRsZSk7Ci0JaWYgKGhhbmRsZXAtPm9uZXNob3RfYnVmZmVyICE9IE5VTEwpIHsKLQkJZnJlZShoYW5kbGVwLT5vbmVzaG90X2J1ZmZlcik7Ci0JCWhhbmRsZXAtPm9uZXNob3RfYnVmZmVyID0gTlVMTDsKLQl9Ci0JcGNhcF9jbGVhbnVwX2xpbnV4KGhhbmRsZSk7Ci19Ci0KLQogc3RhdGljIGludAotcGNhcF9nZXRub25ibG9ja19tbWFwKHBjYXBfdCAqaGFuZGxlKQorcGNhcF9nZXRub25ibG9ja19saW51eChwY2FwX3QgKmhhbmRsZSkKIHsKIAlzdHJ1Y3QgcGNhcF9saW51eCAqaGFuZGxlcCA9IGhhbmRsZS0+cHJpdjsKIApAQCAtNDczMyw3ICszMzQyLDcgQEAKIH0KIAogc3RhdGljIGludAotcGNhcF9zZXRub25ibG9ja19tbWFwKHBjYXBfdCAqaGFuZGxlLCBpbnQgbm9uYmxvY2spCitwY2FwX3NldG5vbmJsb2NrX2xpbnV4KHBjYXBfdCAqaGFuZGxlLCBpbnQgbm9uYmxvY2spCiB7CiAJc3RydWN0IHBjYXBfbGludXggKmhhbmRsZXAgPSBoYW5kbGUtPnByaXY7CiAKQEAgLTQ3NjksNyArMzM3OCw3IEBACiAvKgogICogR2V0IHRoZSBzdGF0dXMgZmllbGQgb2YgdGhlIHJpbmcgYnVmZmVyIGZyYW1lIGF0IGEgc3BlY2lmaWVkIG9mZnNldC4KICAqLwotc3RhdGljIGlubGluZSBpbnQKK3N0YXRpYyBpbmxpbmUgdV9pbnQKIHBjYXBfZ2V0X3JpbmdfZnJhbWVfc3RhdHVzKHBjYXBfdCAqaGFuZGxlLCBpbnQgb2Zmc2V0KQogewogCXN0cnVjdCBwY2FwX2xpbnV4ICpoYW5kbGVwID0gaGFuZGxlLT5wcml2OwpAQCAtNDc3NywyMCArMzM4NiwxMiBAQAogCiAJaC5yYXcgPSBSSU5HX0dFVF9GUkFNRV9BVChoYW5kbGUsIG9mZnNldCk7CiAJc3dpdGNoIChoYW5kbGVwLT50cF92ZXJzaW9uKSB7Ci0JY2FzZSBUUEFDS0VUX1YxOgotCQlyZXR1cm4gKGguaDEtPnRwX3N0YXR1cyk7Ci0JCWJyZWFrOwotCWNhc2UgVFBBQ0tFVF9WMV82NDoKLQkJcmV0dXJuIChoLmgxXzY0LT50cF9zdGF0dXMpOwotCQlicmVhazsKLSNpZmRlZiBIQVZFX1RQQUNLRVQyCiAJY2FzZSBUUEFDS0VUX1YyOgotCQlyZXR1cm4gKGguaDItPnRwX3N0YXR1cyk7CisJCXJldHVybiBfX2F0b21pY19sb2FkX24oJmguaDItPnRwX3N0YXR1cywgX19BVE9NSUNfQUNRVUlSRSk7CiAJCWJyZWFrOwotI2VuZGlmCiAjaWZkZWYgSEFWRV9UUEFDS0VUMwogCWNhc2UgVFBBQ0tFVF9WMzoKLQkJcmV0dXJuIChoLmgzLT5oZHIuYmgxLmJsb2NrX3N0YXR1cyk7CisJCXJldHVybiBfX2F0b21pY19sb2FkX24oJmguaDMtPmhkci5iaDEuYmxvY2tfc3RhdHVzLCBfX0FUT01JQ19BQ1FVSVJFKTsKIAkJYnJlYWs7CiAjZW5kaWYKIAl9CkBAIC00Nzk4LDI1ICszMzk5LDYyIEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZm5kZWYgUE9MTFJESFVQCi0jZGVmaW5lIFBPTExSREhVUCAwCi0jZW5kaWYKLQogLyoKICAqIEJsb2NrIHdhaXRpbmcgZm9yIGZyYW1lcyB0byBiZSBhdmFpbGFibGUuCiAgKi8KIHN0YXRpYyBpbnQgcGNhcF93YWl0X2Zvcl9mcmFtZXNfbW1hcChwY2FwX3QgKmhhbmRsZSkKIHsKIAlzdHJ1Y3QgcGNhcF9saW51eCAqaGFuZGxlcCA9IGhhbmRsZS0+cHJpdjsKLQljaGFyIGM7Ci0Jc3RydWN0IHBvbGxmZCBwb2xsaW5mbzsKKwlpbnQgdGltZW91dDsKKwlzdHJ1Y3QgaWZyZXEgaWZyOwogCWludCByZXQ7CisJc3RydWN0IHBvbGxmZCBwb2xsaW5mb1syXTsKKwlwb2xsaW5mb1swXS5mZCA9IGhhbmRsZS0+ZmQ7CisJcG9sbGluZm9bMF0uZXZlbnRzID0gUE9MTElOOworCXBvbGxpbmZvWzFdLmZkID0gaGFuZGxlcC0+cG9sbF9icmVha2xvb3BfZmQ7CisJcG9sbGluZm9bMV0uZXZlbnRzID0gUE9MTElOOwogCi0JcG9sbGluZm8uZmQgPSBoYW5kbGUtPmZkOwotCXBvbGxpbmZvLmV2ZW50cyA9IFBPTExJTjsKLQotCWRvIHsKLQkJLyoKKwkvKgorCSAqIEtlZXAgcG9sbGluZyB1bnRpbCB3ZSBlaXRoZXIgZ2V0IHNvbWUgcGFja2V0cyB0byByZWFkLCBzZWUKKwkgKiB0aGF0IHdlIGdvdCB0b2xkIHRvIGJyZWFrIG91dCBvZiB0aGUgbG9vcCwgZ2V0IGEgZmF0YWwgZXJyb3IsCisJICogb3IgZGlzY292ZXIgdGhhdCB0aGUgZGV2aWNlIHdlbnQgYXdheS4KKwkgKgorCSAqIEluIG5vbi1ibG9ja2luZyBtb2RlLCB3ZSBtdXN0IHN0aWxsIGRvIG9uZSBwb2xsKCkgdG8gY2F0Y2gKKwkgKiBhbnkgcGVuZGluZyBlcnJvciBpbmRpY2F0aW9ucywgYnV0IHRoZSBwb2xsKCkgaGFzIGEgdGltZW91dAorCSAqIG9mIDAsIHNvIHRoYXQgaXQgZG9lc24ndCBibG9jaywgYW5kIHdlIHF1aXQgYWZ0ZXIgdGhhdCBvbmUKKwkgKiBwb2xsKCkuCisJICoKKwkgKiBJZiB3ZSd2ZSBzZWVuIGFuIEVORVRET1dOLCBpdCBtaWdodCBiZSB0aGUgZmlyc3QgaW5kaWNhdGlvbgorCSAqIHRoYXQgdGhlIGRldmljZSB3ZW50IGF3YXksIG9yIGl0IG1pZ2h0IGp1c3QgYmUgdGhhdCBpdCB3YXMKKwkgKiBjb25maWd1cmVkIGRvd24uICBVbmZvcnR1bmF0ZWx5LCB0aGVyZSdzIG5vIGd1YXJhbnRlZSB0aGF0CisJICogdGhlIGRldmljZSBoYXMgYWN0dWFsbHkgYmVlbiByZW1vdmVkIGFzIGFuIGludGVyZmFjZSwgYmVjYXVzZToKKwkgKgorCSAqIDEpIGlmLCBhcyBhcHBlYXJzIHRvIGJlIHRoZSBjYXNlIGF0IGxlYXN0IHNvbWUgb2YgdGhlIHRpbWUsCisJICogdGhlIFBGX1BBQ0tFVCBzb2NrZXQgY29kZSBmaXJzdCBnZXRzIGEgTkVUREVWX0RPV04gaW5kaWNhdGlvbgorCSAqIGZvciB0aGUgZGV2aWNlIGFuZCB0aGVuIGdldHMgYSBORVRERVZfVU5SRUdJU1RFUiBpbmRpY2F0aW9uCisJICogZm9yIGl0LCB0aGUgZmlyc3QgaW5kaWNhdGlvbiB3aWxsIGNhdXNlIGEgd2FrZXVwIHdpdGggRU5FVERPV04KKwkgKiBidXQgd29uJ3Qgc2V0IHRoZSBwYWNrZXQgc29ja2V0J3MgZmllbGQgZm9yIHRoZSBpbnRlcmZhY2UgaW5kZXgKKwkgKiB0byAtMSwgYW5kIHRoZSBzZWNvbmQgaW5kaWNhdGlvbiB3b24ndCBjYXVzZSBhIHdha2V1cCAoYmVjYXVzZQorCSAqIHRoZSBmaXJzdCBpbmRpY2F0aW9uIGFsc28gY2F1c2VkIHRoZSBwcm90b2NvbCBob29rIHRvIGJlCisJICogdW5yZWdpc3RlcmVkKSBidXQgd2lsbCBzZXQgdGhlIHBhY2tldCBzb2NrZXQncyBmaWVsZCBmb3IgdGhlCisJICogaW50ZXJmYWNlIGluZGV4IHRvIC0xOworCSAqCisJICogMikgZXZlbiBpZiBqdXN0IGEgTkVUREVWX1VOUkVHSVNURVIgaW5kaWNhdGlvbiBpcyByZWdpc3RlcmVkLAorCSAqIHRoZSBwYWNrZXQgc29ja2V0J3MgZmllbGQgZm9yIHRoZSBpbnRlcmZhY2UgaW5kZXggb25seSBnZXRzCisJICogc2V0IHRvIC0xIGFmdGVyIHRoZSB3YWtldXAsIHNvIHRoZXJlJ3MgYSBzbWFsbCBidXQgbm9uLXplcm8KKwkgKiByaXNrIHRoYXQgYSB0aHJlYWQgYmxvY2tlZCB3YWl0aW5nIGZvciB0aGUgd2FrZXVwIHdpbGwgZ2V0CisJICogdG8gdGhlICJmZXRjaCB0aGUgc29ja2V0IG5hbWUiIGNvZGUgYmVmb3JlIHRoZSBpbnRlcmZhY2UgaW5kZXgKKwkgKiBnZXRzIHNldCB0byAtMSwgc28gaXQnbGwgZ2V0IHRoZSBvbGQgaW50ZXJmYWNlIGluZGV4LgorCSAqCisJICogVGhlcmVmb3JlLCBpZiB3ZSBnb3QgYW4gRU5FVERPV04gYW5kIGhhdmVuJ3Qgc2VlbiBhIHBhY2tldAorCSAqIHNpbmNlIHRoZW4sIHdlIGFzc3VtZSB0aGF0IHdlIG1pZ2h0IGJlIHdhaXRpbmcgZm9yIHRoZSBpbnRlcmZhY2UKKwkgKiB0byBkaXNhcHBlYXIsIGFuZCBwb2xsIHdpdGggYSB0aW1lb3V0IHRvIHRyeSBhZ2FpbiBpbiBhIHNob3J0CisJICogcGVyaW9kIG9mIHRpbWUuICBJZiB3ZSAqZG8qIHNlZSBhIHBhY2tldCwgdGhlIGludGVyZmFjZSBoYXMKKwkgKiBjb21lIGJhY2sgdXAgYWdhaW4sIGFuZCBpcyAqZGVmaW5pdGVseSogc3RpbGwgdGhlcmUsIHNvIHdlCisJICogZG9uJ3QgbmVlZCB0byBwb2xsLgorCSAqLworCWZvciAoOzspIHsKKwkgCS8qCiAJCSAqIFllcywgd2UgZG8gdGhpcyBldmVuIGluIG5vbi1ibG9ja2luZyBtb2RlLCBhcyBpdCdzCiAJCSAqIHRoZSBvbmx5IHdheSB0byBnZXQgZXJyb3IgaW5kaWNhdGlvbnMgZnJvbSBhCiAJCSAqIHRwYWNrZXQgc29ja2V0LgpAQCAtNDgyNCw2NyArMzQ2MiwyODEgQEAKIAkJICogVGhlIHRpbWVvdXQgaXMgMCBpbiBub24tYmxvY2tpbmcgbW9kZSwgc28gcG9sbCgpCiAJCSAqIHJldHVybnMgaW1tZWRpYXRlbHkuCiAJCSAqLwotCQlyZXQgPSBwb2xsKCZwb2xsaW5mbywgMSwgaGFuZGxlcC0+cG9sbF90aW1lb3V0KTsKLQkJaWYgKHJldCA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKLQkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oaGFuZGxlLT5lcnJidWYsCi0JCQkgICAgUENBUF9FUlJCVUZfU0laRSwgZXJybm8sCi0JCQkgICAgImNhbid0IHBvbGwgb24gcGFja2V0IHNvY2tldCIpOwotCQkJcmV0dXJuIFBDQVBfRVJST1I7Ci0JCX0gZWxzZSBpZiAocmV0ID4gMCAmJgotCQkJKHBvbGxpbmZvLnJldmVudHMgJiAoUE9MTEhVUHxQT0xMUkRIVVB8UE9MTEVSUnxQT0xMTlZBTCkpKSB7CisJCXRpbWVvdXQgPSBoYW5kbGVwLT5wb2xsX3RpbWVvdXQ7CisKKwkJLyoKKwkJICogSWYgd2UgZ290IGFuIEVORVRET1dOIGFuZCBoYXZlbid0IGdvdHRlbiBhbiBpbmRpY2F0aW9uCisJCSAqIHRoYXQgdGhlIGRldmljZSBoYXMgZ29uZSBhd2F5IG9yIHRoYXQgdGhlIGRldmljZSBpcyB1cCwKKwkJICogd2UgZG9uJ3QgeWV0IGtub3cgZm9yIGNlcnRhaW4gd2hldGhlciB0aGUgZGV2aWNlIGhhcworCQkgKiBnb25lIGF3YXkgb3Igbm90LCBkbyBhIHBvbGwoKSB3aXRoIGEgMS1taWxsaXNlY29uZCB0aW1lb3V0LAorCQkgKiBhcyB3ZSBoYXZlIHRvIHBvbGwgaW5kZWZpbml0ZWx5IGZvciAiZGV2aWNlIHdlbnQgYXdheSIKKwkJICogaW5kaWNhdGlvbnMgdW50aWwgd2UgZWl0aGVyIGdldCBvbmUgb3Igc2VlIHRoYXQgdGhlCisJCSAqIGRldmljZSBpcyB1cC4KKwkJICovCisJCWlmIChoYW5kbGVwLT5uZXRkb3duKSB7CisJCQlpZiAodGltZW91dCAhPSAwKQorCQkJCXRpbWVvdXQgPSAxOworCQl9CisJCXJldCA9IHBvbGwocG9sbGluZm8sIDIsIHRpbWVvdXQpOworCQlpZiAocmV0IDwgMCkgewogCQkJLyoKLQkJCSAqIFRoZXJlJ3Mgc29tZSBpbmRpY2F0aW9uIG90aGVyIHRoYW4KLQkJCSAqICJ5b3UgY2FuIHJlYWQgb24gdGhpcyBkZXNjcmlwdG9yIiBvbgotCQkJICogdGhlIGRlc2NyaXB0b3IuCisJCQkgKiBFcnJvci4gIElmIGl0J3Mgbm90IEVJTlRSLCByZXBvcnQgaXQuCiAJCQkgKi8KLQkJCWlmIChwb2xsaW5mby5yZXZlbnRzICYgKFBPTExIVVAgfCBQT0xMUkRIVVApKSB7Ci0JCQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwKLQkJCQkJUENBUF9FUlJCVUZfU0laRSwKLQkJCQkJIkhhbmd1cCBvbiBwYWNrZXQgc29ja2V0Iik7CisJCQlpZiAoZXJybm8gIT0gRUlOVFIpIHsKKwkJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGhhbmRsZS0+ZXJyYnVmLAorCQkJCSAgICBQQ0FQX0VSUkJVRl9TSVpFLCBlcnJubywKKwkJCQkgICAgImNhbid0IHBvbGwgb24gcGFja2V0IHNvY2tldCIpOwogCQkJCXJldHVybiBQQ0FQX0VSUk9SOwogCQkJfQotCQkJaWYgKHBvbGxpbmZvLnJldmVudHMgJiBQT0xMRVJSKSB7CisKKwkJCS8qCisJCQkgKiBJdCdzIEVJTlRSOyBpZiB3ZSB3ZXJlIHRvbGQgdG8gYnJlYWsgb3V0IG9mCisJCQkgKiB0aGUgbG9vcCwgZG8gc28uCisJCQkgKi8KKwkJCWlmIChoYW5kbGUtPmJyZWFrX2xvb3ApIHsKKwkJCQloYW5kbGUtPmJyZWFrX2xvb3AgPSAwOworCQkJCXJldHVybiBQQ0FQX0VSUk9SX0JSRUFLOworCQkJfQorCQl9IGVsc2UgaWYgKHJldCA+IDApIHsKKwkJCS8qCisJCQkgKiBPSywgc29tZSBkZXNjcmlwdG9yIGlzIHJlYWR5LgorCQkJICogQ2hlY2sgdGhlIHNvY2tldCBkZXNjcmlwdG9yIGZpcnN0LgorCQkJICoKKwkJCSAqIEFzIEkgcmVhZCB0aGUgTGludXggbWFuIHBhZ2UsIHBvbGxpbmZvWzBdLnJldmVudHMKKwkJCSAqIHdpbGwgZWl0aGVyIGJlIFBPTExJTiwgUE9MTEVSUiwgUE9MTEhVUCwgb3IgUE9MTE5WQUwuCisJCQkgKi8KKwkJCWlmIChwb2xsaW5mb1swXS5yZXZlbnRzID09IFBPTExJTikgewogCQkJCS8qCi0JCQkJICogQSByZWN2KCkgd2lsbCBnaXZlIHVzIHRoZSBhY3R1YWwgZXJyb3IgY29kZS4KLQkJCQkgKgotCQkJCSAqIFhYWCAtIG1ha2UgdGhlIHNvY2tldCBub24tYmxvY2tpbmc/CisJCQkJICogT0ssIHdlIG1heSBoYXZlIHBhY2tldHMgdG8KKwkJCQkgKiByZWFkLgogCQkJCSAqLwotCQkJCWlmIChyZWN2KGhhbmRsZS0+ZmQsICZjLCBzaXplb2YgYywKLQkJCQkJTVNHX1BFRUspICE9IC0xKQotCQkJCQljb250aW51ZTsJLyogd2hhdCwgbm8gZXJyb3I/ICovCi0JCQkJaWYgKGVycm5vID09IEVORVRET1dOKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAocG9sbGluZm9bMF0ucmV2ZW50cyAhPSAwKSB7CisJCQkJLyoKKwkJCQkgKiBUaGVyZSdzIHNvbWUgaW5kaWNhdGlvbiBvdGhlciB0aGFuCisJCQkJICogInlvdSBjYW4gcmVhZCBvbiB0aGlzIGRlc2NyaXB0b3IiIG9uCisJCQkJICogdGhlIGRlc2NyaXB0b3IuCisJCQkJICovCisJCQkJaWYgKHBvbGxpbmZvWzBdLnJldmVudHMgJiBQT0xMTlZBTCkgeworCQkJCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwKKwkJCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkJCSAgICAiSW52YWxpZCBwb2xsaW5nIHJlcXVlc3Qgb24gcGFja2V0IHNvY2tldCIpOworCQkJCQlyZXR1cm4gUENBUF9FUlJPUjsKKwkJCQl9CisJCQkJaWYgKHBvbGxpbmZvWzBdLnJldmVudHMgJiAoUE9MTEhVUCB8IFBPTExSREhVUCkpIHsKKwkJCQkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsCisJCQkJCSAgICBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJCQkgICAgIkhhbmd1cCBvbiBwYWNrZXQgc29ja2V0Iik7CisJCQkJCXJldHVybiBQQ0FQX0VSUk9SOworCQkJCX0KKwkJCQlpZiAocG9sbGluZm9bMF0ucmV2ZW50cyAmIFBPTExFUlIpIHsKIAkJCQkJLyoKLQkJCQkJICogVGhlIGRldmljZSBvbiB3aGljaCB3ZSdyZQotCQkJCQkgKiBjYXB0dXJpbmcgd2VudCBhd2F5LgotCQkJCQkgKgotCQkJCQkgKiBYWFggLSB3ZSBzaG91bGQgcmVhbGx5IHJldHVybgotCQkJCQkgKiBQQ0FQX0VSUk9SX0lGQUNFX05PVF9VUCwgYnV0Ci0JCQkJCSAqIHBjYXBfZGlzcGF0Y2goKSBldGMuIGFyZW4ndAotCQkJCQkgKiBkZWZpbmVkIHRvIHJldHVybiB0aGF0LgorCQkJCQkgKiBHZXQgdGhlIGVycm9yLgogCQkJCQkgKi8KLQkJCQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwKLQkJCQkJCVBDQVBfRVJSQlVGX1NJWkUsCi0JCQkJCQkiVGhlIGludGVyZmFjZSB3ZW50IGRvd24iKTsKKwkJCQkJaW50IGVycjsKKwkJCQkJc29ja2xlbl90IGVycmxlbjsKKworCQkJCQllcnJsZW4gPSBzaXplb2YoZXJyKTsKKwkJCQkJaWYgKGdldHNvY2tvcHQoaGFuZGxlLT5mZCwgU09MX1NPQ0tFVCwKKwkJCQkJICAgIFNPX0VSUk9SLCAmZXJyLCAmZXJybGVuKSA9PSAtMSkgeworCQkJCQkJLyoKKwkJCQkJCSAqIFRoZSBjYWxsICppdHNlbGYqIHJldHVybmVkCisJCQkJCQkgKiBhbiBlcnJvcjsgbWFrZSAqdGhhdCoKKwkJCQkJCSAqIHRoZSBlcnJvci4KKwkJCQkJCSAqLworCQkJCQkJZXJyID0gZXJybm87CisJCQkJCX0KKworCQkJCQkvKgorCQkJCQkgKiBPSywgd2UgaGF2ZSB0aGUgZXJyb3IuCisJCQkJCSAqLworCQkJCQlpZiAoZXJyID09IEVORVRET1dOKSB7CisJCQkJCQkvKgorCQkJCQkJICogVGhlIGRldmljZSBvbiB3aGljaCB3ZSdyZQorCQkJCQkJICogY2FwdHVyaW5nIHdlbnQgYXdheSBvciB0aGUKKwkJCQkJCSAqIGludGVyZmFjZSB3YXMgdGFrZW4gZG93bi4KKwkJCQkJCSAqCisJCQkJCQkgKiBXZSBkb24ndCBrbm93IGZvciBjZXJ0YWluCisJCQkJCQkgKiB3aGljaCBoYXBwZW5lZCwgYW5kIHRoZQorCQkJCQkJICogbmV4dCBwb2xsKCkgbWF5IGluZGljYXRlCisJCQkJCQkgKiB0aGF0IHRoZXJlIGFyZSBwYWNrZXRzCisJCQkJCQkgKiB0byBiZSByZWFkLCBzbyBqdXN0IHNldAorCQkJCQkJICogYSBmbGFnIHRvIGdldCB1cyB0byBkbworCQkJCQkJICogY2hlY2tzIGxhdGVyLCBhbmQgc2V0CisJCQkJCQkgKiB0aGUgcmVxdWlyZWQgc2VsZWN0CisJCQkJCQkgKiB0aW1lb3V0IHRvIDEgbWlsbGlzZWNvbmQKKwkJCQkJCSAqIHNvIHRoYXQgZXZlbnQgbG9vcHMgdGhhdAorCQkJCQkJICogY2hlY2sgb3VyIHNvY2tldCBkZXNjcmlwdG9yCisJCQkJCQkgKiBhbHNvIHRpbWUgb3V0IHNvIHRoYXQKKwkJCQkJCSAqIHRoZXkgY2FuIGNhbGwgdXMgYW5kIHdlCisJCQkJCQkgKiBjYW4gZG8gdGhlIGNoZWNrcy4KKwkJCQkJCSAqLworCQkJCQkJaGFuZGxlcC0+bmV0ZG93biA9IDE7CisJCQkJCQloYW5kbGUtPnJlcXVpcmVkX3NlbGVjdF90aW1lb3V0ID0gJm5ldGRvd25fdGltZW91dDsKKwkJCQkJfSBlbHNlIGlmIChlcnIgPT0gMCkgeworCQkJCQkJLyoKKwkJCQkJCSAqIFRoaXMgc2hvdWxkbid0IGhhcHBlbiwgc28KKwkJCQkJCSAqIHJlcG9ydCBhIHNwZWNpYWwgaW5kaWNhdGlvbgorCQkJCQkJICogdGhhdCBpdCBkaWQuCisJCQkJCQkgKi8KKwkJCQkJCXNucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLAorCQkJCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkJCQkgICAgIkVycm9yIGNvbmRpdGlvbiBvbiBwYWNrZXQgc29ja2V0OiBSZXBvcnRlZCBlcnJvciB3YXMgMCIpOworCQkJCQkJcmV0dXJuIFBDQVBfRVJST1I7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGhhbmRsZS0+ZXJyYnVmLAorCQkJCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkJCQkgICAgZXJyLAorCQkJCQkJICAgICJFcnJvciBjb25kaXRpb24gb24gcGFja2V0IHNvY2tldCIpOworCQkJCQkJcmV0dXJuIFBDQVBfRVJST1I7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQkvKgorCQkJICogTm93IGNoZWNrIHRoZSBldmVudCBkZXZpY2UuCisJCQkgKi8KKwkJCWlmIChwb2xsaW5mb1sxXS5yZXZlbnRzICYgUE9MTElOKSB7CisJCQkJc3NpemVfdCBucmVhZDsKKwkJCQl1aW50NjRfdCB2YWx1ZTsKKworCQkJCS8qCisJCQkJICogVGhpcyBzaG91bGQgbmV2ZXIgZmFpbCwgYnV0LCBqdXN0CisJCQkJICogaW4gY2FzZS4uLi4KKwkJCQkgKi8KKwkJCQlucmVhZCA9IHJlYWQoaGFuZGxlcC0+cG9sbF9icmVha2xvb3BfZmQsICZ2YWx1ZSwKKwkJCQkgICAgc2l6ZW9mKHZhbHVlKSk7CisJCQkJaWYgKG5yZWFkID09IC0xKSB7CisJCQkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oaGFuZGxlLT5lcnJidWYsCisJCQkJCSAgICBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJCQkgICAgZXJybm8sCisJCQkJCSAgICAiRXJyb3IgcmVhZGluZyBmcm9tIGV2ZW50IEZEIik7CisJCQkJCXJldHVybiBQQ0FQX0VSUk9SOworCQkJCX0KKworCQkJCS8qCisJCQkJICogQWNjb3JkaW5nIHRvIHRoZSBMaW51eCByZWFkKDIpIG1hbgorCQkJCSAqIHBhZ2UsIHJlYWQoKSB3aWxsIHRyYW5zZmVyIGF0IG1vc3QKKwkJCQkgKiAyXjMxLTEgYnl0ZXMsIHNvIHRoZSByZXR1cm4gdmFsdWUgaXMKKwkJCQkgKiBlaXRoZXIgLTEgb3IgYSB2YWx1ZSBiZXR3ZWVuIDAKKwkJCQkgKiBhbmQgMl4zMS0xLCBzbyBpdCdzIG5vbi1uZWdhdGl2ZS4KKwkJCQkgKgorCQkJCSAqIENhc3QgaXQgdG8gc2l6ZV90IHRvIHNxdWVsY2gKKwkJCQkgKiB3YXJuaW5ncyBmcm9tIHRoZSBjb21waWxlcjsgYWRkIHRoaXMKKwkJCQkgKiBjb21tZW50IHRvIHNxdWVsY2ggd2FybmluZ3MgZnJvbQorCQkJCSAqIGh1bWFucyByZWFkaW5nIHRoZSBjb2RlLiA6LSkKKwkJCQkgKgorCQkJCSAqIERvbid0IHRyZWF0IGFuIEVPRiBhcyBhbiBlcnJvciwgYnV0CisJCQkJICogKmRvKiB0cmVhdCBhIHNob3J0IHJlYWQgYXMgYW4gZXJyb3I7CisJCQkJICogdGhhdCAic2hvdWxkbid0IGhhcHBlbiIsIGJ1dC4uLi4KKwkJCQkgKi8KKwkJCQlpZiAobnJlYWQgIT0gMCAmJgorCQkJCSAgICAoc2l6ZV90KW5yZWFkIDwgc2l6ZW9mKHZhbHVlKSkgeworCQkJCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQkJICAgICJTaG9ydCByZWFkIGZyb20gZXZlbnQgRkQ6IGV4cGVjdGVkICV6dSwgZ290ICV6ZCIsCisJCQkJCSAgICBzaXplb2YodmFsdWUpLCBucmVhZCk7CisJCQkJCXJldHVybiBQQ0FQX0VSUk9SOworCQkJCX0KKworCQkJCS8qCisJCQkJICogVGhpcyBldmVudCBnZXRzIHNpZ25hbGVkIGJ5IGEKKwkJCQkgKiBwY2FwX2JyZWFrbG9vcCgpIGNhbGw7IGlmIHdlIHdlcmUgdG9sZAorCQkJCSAqIHRvIGJyZWFrIG91dCBvZiB0aGUgbG9vcCwgZG8gc28uCisJCQkJICovCisJCQkJaWYgKGhhbmRsZS0+YnJlYWtfbG9vcCkgeworCQkJCQloYW5kbGUtPmJyZWFrX2xvb3AgPSAwOworCQkJCQlyZXR1cm4gUENBUF9FUlJPUl9CUkVBSzsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBFaXRoZXI6CisJCSAqCisJCSAqICAgMSkgd2UgZ290IG5laXRoZXIgYW4gZXJyb3IgZnJvbSBwb2xsKCkgbm9yIGFueQorCQkgKiAgICAgIHJlYWRhYmxlIGRlc2NyaXB0b3JzLCBpbiB3aGljaCBjYXNlIHRoZXJlCisJCSAqICAgICAgYXJlIG5vIHBhY2tldHMgd2FpdGluZyB0byByZWFkCisJCSAqCisJCSAqIG9yCisJCSAqCisJCSAqICAgMikgV2UgZ290IHJlYWRhYmxlIGRlc2NyaXB0b3JzIGJ1dCB0aGUgUEZfUEFDS0VUCisJCSAqICAgICAgc29ja2V0IHdhc24ndCBvbmUgb2YgdGhlbSwgaW4gd2hpY2ggY2FzZSB0aGVyZQorCQkgKiAgICAgIGFyZSBubyBwYWNrZXRzIHdhaXRpbmcgdG8gcmVhZAorCQkgKgorCQkgKiBzbywgaWYgd2UgZ290IGFuIEVORVRET1dOLCB3ZSd2ZSBkcmFpbmVkIHdoYXRldmVyCisJCSAqIHBhY2tldHMgd2VyZSBhdmFpbGFibGUgdG8gcmVhZCBhdCB0aGUgcG9pbnQgb2YgdGhlCisJCSAqIEVORVRET1dOLgorCQkgKgorCQkgKiBTbywgaWYgd2UgZ290IGFuIEVORVRET1dOIGFuZCBoYXZlbid0IGdvdHRlbiBhbiBpbmRpY2F0aW9uCisJCSAqIHRoYXQgdGhlIGRldmljZSBoYXMgZ29uZSBhd2F5IG9yIHRoYXQgdGhlIGRldmljZSBpcyB1cCwKKwkJICogd2UgZG9uJ3QgeWV0IGtub3cgZm9yIGNlcnRhaW4gd2hldGhlciB0aGUgZGV2aWNlIGhhcworCQkgKiBnb25lIGF3YXkgb3Igbm90LCBjaGVjayB3aGV0aGVyIHRoZSBkZXZpY2UgZXhpc3RzIGFuZCBpcworCQkgKiB1cC4KKwkJICovCisJCWlmIChoYW5kbGVwLT5uZXRkb3duKSB7CisJCQlpZiAoIWRldmljZV9zdGlsbF9leGlzdHMoaGFuZGxlKSkgeworCQkJCS8qCisJCQkJICogVGhlIGRldmljZSBkb2Vzbid0IGV4aXN0IGFueSBtb3JlOworCQkJCSAqIHJlcG9ydCB0aGF0LgorCQkJCSAqCisJCQkJICogWFhYIC0gd2Ugc2hvdWxkIHJlYWxseSByZXR1cm4gYW4KKwkJCQkgKiBhcHByb3ByaWF0ZSBlcnJvciBmb3IgdGhhdCwgYnV0CisJCQkJICogcGNhcF9kaXNwYXRjaCgpIGV0Yy4gYXJlbid0IGRvY3VtZW50ZWQKKwkJCQkgKiBhcyBoYXZpbmcgZXJyb3IgcmV0dXJucyBvdGhlciB0aGFuCisJCQkJICogUENBUF9FUlJPUiBvciBQQ0FQX0VSUk9SX0JSRUFLLgorCQkJCSAqLworCQkJCXNucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCAgUENBUF9FUlJCVUZfU0laRSwKKwkJCQkgICAgIlRoZSBpbnRlcmZhY2UgZGlzYXBwZWFyZWQiKTsKKwkJCQlyZXR1cm4gUENBUF9FUlJPUjsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFRoZSBkZXZpY2Ugc3RpbGwgZXhpc3RzOyB0cnkgdG8gc2VlIGlmIGl0J3MgdXAuCisJCQkgKi8KKwkJCW1lbXNldCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7CisJCQlwY2FwX3N0cmxjcHkoaWZyLmlmcl9uYW1lLCBoYW5kbGVwLT5kZXZpY2UsCisJCQkgICAgc2l6ZW9mKGlmci5pZnJfbmFtZSkpOworCQkJaWYgKGlvY3RsKGhhbmRsZS0+ZmQsIFNJT0NHSUZGTEFHUywgJmlmcikgPT0gLTEpIHsKKwkJCQlpZiAoZXJybm8gPT0gRU5YSU8gfHwgZXJybm8gPT0gRU5PREVWKSB7CisJCQkJCS8qCisJCQkJCSAqIE9LLCAqbm93KiBpdCdzIGdvbmUuCisJCQkJCSAqCisJCQkJCSAqIFhYWCAtIHNlZSBhYm92ZSBjb21tZW50LgorCQkJCQkgKi8KKwkJCQkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsCisJCQkJCSAgICBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJCQkgICAgIlRoZSBpbnRlcmZhY2UgZGlzYXBwZWFyZWQiKTsKKwkJCQkJcmV0dXJuIFBDQVBfRVJST1I7CiAJCQkJfSBlbHNlIHsKIAkJCQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhoYW5kbGUtPmVycmJ1ZiwKIAkJCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsIGVycm5vLAotCQkJCQkgICAgIkVycm9yIGNvbmRpdGlvbiBvbiBwYWNrZXQgc29ja2V0Iik7CisJCQkJCSAgICAiJXM6IENhbid0IGdldCBmbGFncyIsCisJCQkJCSAgICBoYW5kbGVwLT5kZXZpY2UpOworCQkJCQlyZXR1cm4gUENBUF9FUlJPUjsKIAkJCQl9Ci0JCQkJcmV0dXJuIFBDQVBfRVJST1I7CiAJCQl9Ci0JCQlpZiAocG9sbGluZm8ucmV2ZW50cyAmIFBPTExOVkFMKSB7Ci0JCQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwKLQkJCQkJUENBUF9FUlJCVUZfU0laRSwKLQkJCQkJIkludmFsaWQgcG9sbGluZyByZXF1ZXN0IG9uIHBhY2tldCBzb2NrZXQiKTsKLQkJCQlyZXR1cm4gUENBUF9FUlJPUjsKKwkJCWlmIChpZnIuaWZyX2ZsYWdzICYgSUZGX1VQKSB7CisJCQkJLyoKKwkJCQkgKiBJdCdzIHVwLCBzbyBpdCBkZWZpbml0ZWx5IHN0aWxsIGV4aXN0cy4KKwkJCQkgKiBDYW5jZWwgdGhlIEVORVRET1dOIGluZGljYXRpb24gLSB3ZQorCQkJCSAqIHByZXN1bWFibHkgZ290IGl0IGR1ZSB0byB0aGUgaW50ZXJmYWNlCisJCQkJICogZ29pbmcgZG93biByYXRoZXIgdGhhbiB0aGUgZGV2aWNlIGdvaW5nCisJCQkJICogYXdheSAtIGFuZCByZXZlcnQgdG8gIm5vIHJlcXVpcmVkIHNlbGVjdAorCQkJCSAqIHRpbWVvdXQuCisJCQkJICovCisJCQkJaGFuZGxlcC0+bmV0ZG93biA9IDA7CisJCQkJaGFuZGxlLT5yZXF1aXJlZF9zZWxlY3RfdGltZW91dCA9IE5VTEw7CiAJCQl9CiAJCX0KLQkJLyogY2hlY2sgZm9yIGJyZWFrIGxvb3AgY29uZGl0aW9uIG9uIGludGVycnVwdGVkIHN5c2NhbGwqLwotCQlpZiAoaGFuZGxlLT5icmVha19sb29wKSB7Ci0JCQloYW5kbGUtPmJyZWFrX2xvb3AgPSAwOwotCQkJcmV0dXJuIFBDQVBfRVJST1JfQlJFQUs7Ci0JCX0KLQl9IHdoaWxlIChyZXQgPCAwKTsKKworCQkvKgorCQkgKiBJZiB3ZSdyZSBpbiBub24tYmxvY2tpbmcgbW9kZSwganVzdCBxdWl0IG5vdywgcmF0aGVyCisJCSAqIHRoYW4gc3Bpbm5pbmcgaW4gYSBsb29wIGRvaW5nIHBvbGwoKXMgdGhhdCBpbW1lZGlhdGVseQorCQkgKiB0aW1lIG91dCBpZiB0aGVyZSdzIG5vIGluZGljYXRpb24gb24gYW55IGRlc2NyaXB0b3IuCisJCSAqLworCQlpZiAoaGFuZGxlcC0+cG9sbF90aW1lb3V0ID09IDApCisJCQlicmVhazsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ5MDgsMTMgKzM3NjAsMjcgQEAKIAlzdHJ1Y3Qgc29ja2FkZHJfbGwgKnNsbDsKIAlzdHJ1Y3QgcGNhcF9wa3RoZHIgcGNhcGhkcjsKIAl1bnNpZ25lZCBpbnQgc25hcGxlbiA9IHRwX3NuYXBsZW47CisJc3RydWN0IHV0c25hbWUgdXRzbmFtZTsKIAogCS8qIHBlcmZvcm0gc2FuaXR5IGNoZWNrIG9uIGludGVybmFsIG9mZnNldC4gKi8KIAlpZiAodHBfbWFjICsgdHBfc25hcGxlbiA+IGhhbmRsZS0+YnVmc2l6ZSkgewotCQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkJImNvcnJ1cHRlZCBmcmFtZSBvbiBrZXJuZWwgcmluZyBtYWMgIgotCQkJIm9mZnNldCAldSArIGNhcGxlbiAldSA+IGZyYW1lIGxlbiAlZCIsCi0JCQl0cF9tYWMsIHRwX3NuYXBsZW4sIGhhbmRsZS0+YnVmc2l6ZSk7CisJCS8qCisJCSAqIFJlcG9ydCBzb21lIHN5c3RlbSBpbmZvcm1hdGlvbiBhcyBhIGRlYnVnZ2luZyBhaWQuCisJCSAqLworCQlpZiAodW5hbWUoJnV0c25hbWUpICE9IC0xKSB7CisJCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQkiY29ycnVwdGVkIGZyYW1lIG9uIGtlcm5lbCByaW5nIG1hYyAiCisJCQkJIm9mZnNldCAldSArIGNhcGxlbiAldSA+IGZyYW1lIGxlbiAlZCAiCisJCQkJIihrZXJuZWwgJS4zMnMgdmVyc2lvbiAlcywgbWFjaGluZSAlLjE2cykiLAorCQkJCXRwX21hYywgdHBfc25hcGxlbiwgaGFuZGxlLT5idWZzaXplLAorCQkJCXV0c25hbWUucmVsZWFzZSwgdXRzbmFtZS52ZXJzaW9uLAorCQkJCXV0c25hbWUubWFjaGluZSk7CisJCX0gZWxzZSB7CisJCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQkiY29ycnVwdGVkIGZyYW1lIG9uIGtlcm5lbCByaW5nIG1hYyAiCisJCQkJIm9mZnNldCAldSArIGNhcGxlbiAldSA+IGZyYW1lIGxlbiAlZCIsCisJCQkJdHBfbWFjLCB0cF9zbmFwbGVuLCBoYW5kbGUtPmJ1ZnNpemUpOworCQl9CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTQ5MzAsNDYgKzM3OTYsODcgQEAKIAlicCA9IGZyYW1lICsgdHBfbWFjOwogCiAJLyogaWYgcmVxdWlyZWQgYnVpbGQgaW4gcGxhY2UgdGhlIHNsbCBoZWFkZXIqLwotCXNsbCA9ICh2b2lkICopZnJhbWUgKyBUUEFDS0VUX0FMSUdOKGhhbmRsZXAtPnRwX2hkcmxlbik7CisJc2xsID0gKHZvaWQgKikoZnJhbWUgKyBUUEFDS0VUX0FMSUdOKGhhbmRsZXAtPnRwX2hkcmxlbikpOwogCWlmIChoYW5kbGVwLT5jb29rZWQpIHsKLQkJc3RydWN0IHNsbF9oZWFkZXIgKmhkcnA7CisJCWlmIChoYW5kbGUtPmxpbmt0eXBlID09IERMVF9MSU5VWF9TTEwyKSB7CisJCQlzdHJ1Y3Qgc2xsMl9oZWFkZXIgKmhkcnA7CiAKLQkJLyoKLQkJICogVGhlIGtlcm5lbCBzaG91bGQgaGF2ZSBsZWZ0IHVzIHdpdGggZW5vdWdoCi0JCSAqIHNwYWNlIGZvciBhbiBzbGwgaGVhZGVyOyBiYWNrIHVwIHRoZSBwYWNrZXQKLQkJICogZGF0YSBwb2ludGVyIGludG8gdGhhdCBzcGFjZSwgYXMgdGhhdCdsbCBiZQotCQkgKiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYWNrZXQgd2UgcGFzcyB0byB0aGUKLQkJICogY2FsbGJhY2suCi0JCSAqLwotCQlicCAtPSBTTExfSERSX0xFTjsKKwkJCS8qCisJCQkgKiBUaGUga2VybmVsIHNob3VsZCBoYXZlIGxlZnQgdXMgd2l0aCBlbm91Z2gKKwkJCSAqIHNwYWNlIGZvciBhbiBzbGwgaGVhZGVyOyBiYWNrIHVwIHRoZSBwYWNrZXQKKwkJCSAqIGRhdGEgcG9pbnRlciBpbnRvIHRoYXQgc3BhY2UsIGFzIHRoYXQnbGwgYmUKKwkJCSAqIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhY2tldCB3ZSBwYXNzIHRvIHRoZQorCQkJICogY2FsbGJhY2suCisJCQkgKi8KKwkJCWJwIC09IFNMTDJfSERSX0xFTjsKIAotCQkvKgotCQkgKiBMZXQncyBtYWtlIHN1cmUgdGhhdCdzIHBhc3QgdGhlIGVuZCBvZgotCQkgKiB0aGUgdHBhY2tldCBoZWFkZXIsIGkuZS4gPj0KLQkJICogKCh1X2NoYXIgKil0aGRyICsgVFBBQ0tFVF9IRFJMRU4pLCBzbyB3ZQotCQkgKiBkb24ndCBzdGVwIG9uIHRoZSBoZWFkZXIgd2hlbiB3ZSBjb25zdHJ1Y3QKLQkJICogdGhlIHNsbCBoZWFkZXIuCi0JCSAqLwotCQlpZiAoYnAgPCAodV9jaGFyICopZnJhbWUgKwotCQkJCSAgIFRQQUNLRVRfQUxJR04oaGFuZGxlcC0+dHBfaGRybGVuKSArCi0JCQkJICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCkpIHsKLQkJCXBjYXBfc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCi0JCQkJImNvb2tlZC1tb2RlIGZyYW1lIGRvZXNuJ3QgaGF2ZSByb29tIGZvciBzbGwgaGVhZGVyIik7Ci0JCQlyZXR1cm4gLTE7CisJCQkvKgorCQkJICogTGV0J3MgbWFrZSBzdXJlIHRoYXQncyBwYXN0IHRoZSBlbmQgb2YKKwkJCSAqIHRoZSB0cGFja2V0IGhlYWRlciwgaS5lLiA+PQorCQkJICogKCh1X2NoYXIgKil0aGRyICsgVFBBQ0tFVF9IRFJMRU4pLCBzbyB3ZQorCQkJICogZG9uJ3Qgc3RlcCBvbiB0aGUgaGVhZGVyIHdoZW4gd2UgY29uc3RydWN0CisJCQkgKiB0aGUgc2xsIGhlYWRlci4KKwkJCSAqLworCQkJaWYgKGJwIDwgKHVfY2hhciAqKWZyYW1lICsKKwkJCQkJICAgVFBBQ0tFVF9BTElHTihoYW5kbGVwLT50cF9oZHJsZW4pICsKKwkJCQkJICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCkpIHsKKwkJCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQkJImNvb2tlZC1tb2RlIGZyYW1lIGRvZXNuJ3QgaGF2ZSByb29tIGZvciBzbGwgaGVhZGVyIik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCQkvKgorCQkJICogT0ssIHRoYXQgd29ya2VkOyBjb25zdHJ1Y3QgdGhlIHNsbCBoZWFkZXIuCisJCQkgKi8KKwkJCWhkcnAgPSAoc3RydWN0IHNsbDJfaGVhZGVyICopYnA7CisJCQloZHJwLT5zbGwyX3Byb3RvY29sID0gc2xsLT5zbGxfcHJvdG9jb2w7CisJCQloZHJwLT5zbGwyX3Jlc2VydmVkX21ieiA9IDA7CisJCQloZHJwLT5zbGwyX2lmX2luZGV4ID0gaHRvbmwoc2xsLT5zbGxfaWZpbmRleCk7CisJCQloZHJwLT5zbGwyX2hhdHlwZSA9IGh0b25zKHNsbC0+c2xsX2hhdHlwZSk7CisJCQloZHJwLT5zbGwyX3BrdHR5cGUgPSBzbGwtPnNsbF9wa3R0eXBlOworCQkJaGRycC0+c2xsMl9oYWxlbiA9IHNsbC0+c2xsX2hhbGVuOworCQkJbWVtY3B5KGhkcnAtPnNsbDJfYWRkciwgc2xsLT5zbGxfYWRkciwgU0xMX0FERFJMRU4pOworCisJCQlzbmFwbGVuICs9IHNpemVvZihzdHJ1Y3Qgc2xsMl9oZWFkZXIpOworCQl9IGVsc2UgeworCQkJc3RydWN0IHNsbF9oZWFkZXIgKmhkcnA7CisKKwkJCS8qCisJCQkgKiBUaGUga2VybmVsIHNob3VsZCBoYXZlIGxlZnQgdXMgd2l0aCBlbm91Z2gKKwkJCSAqIHNwYWNlIGZvciBhbiBzbGwgaGVhZGVyOyBiYWNrIHVwIHRoZSBwYWNrZXQKKwkJCSAqIGRhdGEgcG9pbnRlciBpbnRvIHRoYXQgc3BhY2UsIGFzIHRoYXQnbGwgYmUKKwkJCSAqIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhY2tldCB3ZSBwYXNzIHRvIHRoZQorCQkJICogY2FsbGJhY2suCisJCQkgKi8KKwkJCWJwIC09IFNMTF9IRFJfTEVOOworCisJCQkvKgorCQkJICogTGV0J3MgbWFrZSBzdXJlIHRoYXQncyBwYXN0IHRoZSBlbmQgb2YKKwkJCSAqIHRoZSB0cGFja2V0IGhlYWRlciwgaS5lLiA+PQorCQkJICogKCh1X2NoYXIgKil0aGRyICsgVFBBQ0tFVF9IRFJMRU4pLCBzbyB3ZQorCQkJICogZG9uJ3Qgc3RlcCBvbiB0aGUgaGVhZGVyIHdoZW4gd2UgY29uc3RydWN0CisJCQkgKiB0aGUgc2xsIGhlYWRlci4KKwkJCSAqLworCQkJaWYgKGJwIDwgKHVfY2hhciAqKWZyYW1lICsKKwkJCQkJICAgVFBBQ0tFVF9BTElHTihoYW5kbGVwLT50cF9oZHJsZW4pICsKKwkJCQkJICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCkpIHsKKwkJCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQkJImNvb2tlZC1tb2RlIGZyYW1lIGRvZXNuJ3QgaGF2ZSByb29tIGZvciBzbGwgaGVhZGVyIik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCQkvKgorCQkJICogT0ssIHRoYXQgd29ya2VkOyBjb25zdHJ1Y3QgdGhlIHNsbCBoZWFkZXIuCisJCQkgKi8KKwkJCWhkcnAgPSAoc3RydWN0IHNsbF9oZWFkZXIgKilicDsKKwkJCWhkcnAtPnNsbF9wa3R0eXBlID0gaHRvbnMoc2xsLT5zbGxfcGt0dHlwZSk7CisJCQloZHJwLT5zbGxfaGF0eXBlID0gaHRvbnMoc2xsLT5zbGxfaGF0eXBlKTsKKwkJCWhkcnAtPnNsbF9oYWxlbiA9IGh0b25zKHNsbC0+c2xsX2hhbGVuKTsKKwkJCW1lbWNweShoZHJwLT5zbGxfYWRkciwgc2xsLT5zbGxfYWRkciwgU0xMX0FERFJMRU4pOworCQkJaGRycC0+c2xsX3Byb3RvY29sID0gc2xsLT5zbGxfcHJvdG9jb2w7CisKKwkJCXNuYXBsZW4gKz0gc2l6ZW9mKHN0cnVjdCBzbGxfaGVhZGVyKTsKIAkJfQotCi0JCS8qCi0JCSAqIE9LLCB0aGF0IHdvcmtlZDsgY29uc3RydWN0IHRoZSBzbGwgaGVhZGVyLgotCQkgKi8KLQkJaGRycCA9IChzdHJ1Y3Qgc2xsX2hlYWRlciAqKWJwOwotCQloZHJwLT5zbGxfcGt0dHlwZSA9IG1hcF9wYWNrZXRfdHlwZV90b19zbGxfdHlwZSgKLQkJCQkJCXNsbC0+c2xsX3BrdHR5cGUpOwotCQloZHJwLT5zbGxfaGF0eXBlID0gaHRvbnMoc2xsLT5zbGxfaGF0eXBlKTsKLQkJaGRycC0+c2xsX2hhbGVuID0gaHRvbnMoc2xsLT5zbGxfaGFsZW4pOwotCQltZW1jcHkoaGRycC0+c2xsX2FkZHIsIHNsbC0+c2xsX2FkZHIsIFNMTF9BRERSTEVOKTsKLQkJaGRycC0+c2xsX3Byb3RvY29sID0gc2xsLT5zbGxfcHJvdG9jb2w7Ci0KLQkJc25hcGxlbiArPSBzaXplb2Yoc3RydWN0IHNsbF9oZWFkZXIpOwogCX0KIAogCWlmIChoYW5kbGVwLT5maWx0ZXJfaW5fdXNlcmxhbmQgJiYgaGFuZGxlLT5mY29kZS5iZl9pbnNucykgewpAQCAtNDk3OCwxMSArMzg4NSwxMSBAQAogCQlhdXhfZGF0YS52bGFuX3RhZ19wcmVzZW50ID0gdHBfdmxhbl90Y2lfdmFsaWQ7CiAJCWF1eF9kYXRhLnZsYW5fdGFnID0gdHBfdmxhbl90Y2kgJiAweDBmZmY7CiAKLQkJaWYgKGJwZl9maWx0ZXJfd2l0aF9hdXhfZGF0YShoYW5kbGUtPmZjb2RlLmJmX2luc25zLAotCQkJCQkgICAgIGJwLAotCQkJCQkgICAgIHRwX2xlbiwKLQkJCQkJICAgICBzbmFwbGVuLAotCQkJCQkgICAgICZhdXhfZGF0YSkgPT0gMCkKKwkJaWYgKHBjYXBfZmlsdGVyX3dpdGhfYXV4X2RhdGEoaGFuZGxlLT5mY29kZS5iZl9pbnNucywKKwkJCQkJICAgICAgYnAsCisJCQkJCSAgICAgIHRwX2xlbiwKKwkJCQkJICAgICAgc25hcGxlbiwKKwkJCQkJICAgICAgJmF1eF9kYXRhKSA9PSAwKQogCQkJcmV0dXJuIDA7CiAJfQogCkBAIC00OTk4LDExICszOTA1LDE1IEBACiAJLyogaWYgcmVxdWlyZWQgYnVpbGQgaW4gcGxhY2UgdGhlIHNsbCBoZWFkZXIqLwogCWlmIChoYW5kbGVwLT5jb29rZWQpIHsKIAkJLyogdXBkYXRlIHBhY2tldCBsZW4gKi8KLQkJcGNhcGhkci5jYXBsZW4gKz0gU0xMX0hEUl9MRU47Ci0JCXBjYXBoZHIubGVuICs9IFNMTF9IRFJfTEVOOworCQlpZiAoaGFuZGxlLT5saW5rdHlwZSA9PSBETFRfTElOVVhfU0xMMikgeworCQkJcGNhcGhkci5jYXBsZW4gKz0gU0xMMl9IRFJfTEVOOworCQkJcGNhcGhkci5sZW4gKz0gU0xMMl9IRFJfTEVOOworCQl9IGVsc2UgeworCQkJcGNhcGhkci5jYXBsZW4gKz0gU0xMX0hEUl9MRU47CisJCQlwY2FwaGRyLmxlbiArPSBTTExfSERSX0xFTjsKKwkJfQogCX0KIAotI2lmIGRlZmluZWQoSEFWRV9UUEFDS0VUMikgfHwgZGVmaW5lZChIQVZFX1RQQUNLRVQzKQogCWlmICh0cF92bGFuX3RjaV92YWxpZCAmJgogCQloYW5kbGVwLT52bGFuX29mZnNldCAhPSAtMSAmJgogCQl0cF9zbmFwbGVuID49ICh1bnNpZ25lZCBpbnQpIGhhbmRsZXAtPnZsYW5fb2Zmc2V0KQpAQCAtNTAzMCw3ICszOTQxLDYgQEAKIAkJcGNhcGhkci5jYXBsZW4gKz0gVkxBTl9UQUdfTEVOOwogCQlwY2FwaGRyLmxlbiArPSBWTEFOX1RBR19MRU47CiAJfQotI2VuZGlmCiAKIAkvKgogCSAqIFRoZSBvbmx5IHdheSB0byB0ZWxsIHRoZSBrZXJuZWwgdG8gY3V0IG9mZiB0aGUKQEAgLTUwNDAsNiArMzk1MCwxMyBAQAogCSAqCiAJICogVHJpbSB0aGUgc25hcHNob3QgbGVuZ3RoIHRvIGJlIG5vIGxvbmdlciB0aGFuIHRoZQogCSAqIHNwZWNpZmllZCBzbmFwc2hvdCBsZW5ndGguCisJICoKKwkgKiBYWFggLSBhbiBhbHRlcm5hdGl2ZSBpcyB0byBwdXQgYSBmaWx0ZXIsIGNvbnNpc3RpbmcKKwkgKiBvZiBhICJyZXQgPHNuYXBsZW4+IiBpbnN0cnVjdGlvbiwgb24gdGhlIHNvY2tldAorCSAqIGluIHRoZSBhY3RpdmF0ZSByb3V0aW5lLCBzbyB0aGF0IHRoZSB0cnVuY2F0aW9uIGlzCisJICogZG9uZSBpbiB0aGUga2VybmVsIGV2ZW4gaWYgbm9ib2R5IHNwZWNpZmllZCBhIGZpbHRlcjsKKwkgKiB0aGF0IG1lYW5zIHRoYXQgbGVzcyBidWZmZXIgc3BhY2UgaXMgY29uc3VtZWQgaW4KKwkgKiB0aGUgbWVtb3J5LW1hcHBlZCBidWZmZXIuCiAJICovCiAJaWYgKHBjYXBoZHIuY2FwbGVuID4gKGJwZl91X2ludDMyKWhhbmRsZS0+c25hcHNob3QpCiAJCXBjYXBoZHIuY2FwbGVuID0gaGFuZGxlLT5zbmFwc2hvdDsKQEAgLTUwNTEsMTc1ICszOTY4LDYgQEAKIH0KIAogc3RhdGljIGludAotcGNhcF9yZWFkX2xpbnV4X21tYXBfdjEocGNhcF90ICpoYW5kbGUsIGludCBtYXhfcGFja2V0cywgcGNhcF9oYW5kbGVyIGNhbGxiYWNrLAotCQl1X2NoYXIgKnVzZXIpCi17Ci0Jc3RydWN0IHBjYXBfbGludXggKmhhbmRsZXAgPSBoYW5kbGUtPnByaXY7Ci0JdW5pb24gdGhkciBoOwotCWludCBwa3RzID0gMDsKLQlpbnQgcmV0OwotCi0JLyogd2FpdCBmb3IgZnJhbWVzIGF2YWlsYWJpbGl0eS4qLwotCWgucmF3ID0gUklOR19HRVRfQ1VSUkVOVF9GUkFNRShoYW5kbGUpOwotCWlmIChoLmgxLT50cF9zdGF0dXMgPT0gVFBfU1RBVFVTX0tFUk5FTCkgewotCQkvKgotCQkgKiBUaGUgY3VycmVudCBmcmFtZSBpcyBvd25lZCBieSB0aGUga2VybmVsOyB3YWl0IGZvcgotCQkgKiBhIGZyYW1lIHRvIGJlIGhhbmRlZCB0byB1cy4KLQkJICovCi0JCXJldCA9IHBjYXBfd2FpdF9mb3JfZnJhbWVzX21tYXAoaGFuZGxlKTsKLQkJaWYgKHJldCkgewotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQotCS8qIG5vbi1wb3NpdGl2ZSB2YWx1ZXMgb2YgbWF4X3BhY2tldHMgYXJlIHVzZWQgdG8gcmVxdWlyZSBhbGwKLQkgKiBwYWNrZXRzIGN1cnJlbnRseSBhdmFpbGFibGUgaW4gdGhlIHJpbmcgKi8KLQl3aGlsZSAoKHBrdHMgPCBtYXhfcGFja2V0cykgfHwgUEFDS0VUX0NPVU5UX0lTX1VOTElNSVRFRChtYXhfcGFja2V0cykpIHsKLQkJLyoKLQkJICogR2V0IHRoZSBjdXJyZW50IHJpbmcgYnVmZmVyIGZyYW1lLCBhbmQgYnJlYWsgaWYKLQkJICogaXQncyBzdGlsbCBvd25lZCBieSB0aGUga2VybmVsLgotCQkgKi8KLQkJaC5yYXcgPSBSSU5HX0dFVF9DVVJSRU5UX0ZSQU1FKGhhbmRsZSk7Ci0JCWlmIChoLmgxLT50cF9zdGF0dXMgPT0gVFBfU1RBVFVTX0tFUk5FTCkKLQkJCWJyZWFrOwotCi0JCXJldCA9IHBjYXBfaGFuZGxlX3BhY2tldF9tbWFwKAotCQkJCWhhbmRsZSwKLQkJCQljYWxsYmFjaywKLQkJCQl1c2VyLAotCQkJCWgucmF3LAotCQkJCWguaDEtPnRwX2xlbiwKLQkJCQloLmgxLT50cF9tYWMsCi0JCQkJaC5oMS0+dHBfc25hcGxlbiwKLQkJCQloLmgxLT50cF9zZWMsCi0JCQkJaC5oMS0+dHBfdXNlYywKLQkJCQkwLAotCQkJCTAsCi0JCQkJMCk7Ci0JCWlmIChyZXQgPT0gMSkgewotCQkJcGt0cysrOwotCQkJaGFuZGxlcC0+cGFja2V0c19yZWFkKys7Ci0JCX0gZWxzZSBpZiAocmV0IDwgMCkgewotCQkJcmV0dXJuIHJldDsKLQkJfQotCi0JCS8qCi0JCSAqIEhhbmQgdGhpcyBibG9jayBiYWNrIHRvIHRoZSBrZXJuZWwsIGFuZCwgaWYgd2UncmUKLQkJICogY291bnRpbmcgYmxvY2tzIHRoYXQgbmVlZCB0byBiZSBmaWx0ZXJlZCBpbiB1c2VybGFuZAotCQkgKiBhZnRlciBoYXZpbmcgYmVlbiBmaWx0ZXJlZCBieSB0aGUga2VybmVsLCBjb3VudAotCQkgKiB0aGUgb25lIHdlJ3ZlIGp1c3QgcHJvY2Vzc2VkLgotCQkgKi8KLQkJaC5oMS0+dHBfc3RhdHVzID0gVFBfU1RBVFVTX0tFUk5FTDsKLQkJaWYgKGhhbmRsZXAtPmJsb2Nrc190b19maWx0ZXJfaW5fdXNlcmxhbmQgPiAwKSB7Ci0JCQloYW5kbGVwLT5ibG9ja3NfdG9fZmlsdGVyX2luX3VzZXJsYW5kLS07Ci0JCQlpZiAoaGFuZGxlcC0+YmxvY2tzX3RvX2ZpbHRlcl9pbl91c2VybGFuZCA9PSAwKSB7Ci0JCQkJLyoKLQkJCQkgKiBObyBtb3JlIGJsb2NrcyBuZWVkIHRvIGJlIGZpbHRlcmVkCi0JCQkJICogaW4gdXNlcmxhbmQuCi0JCQkJICovCi0JCQkJaGFuZGxlcC0+ZmlsdGVyX2luX3VzZXJsYW5kID0gMDsKLQkJCX0KLQkJfQotCi0JCS8qIG5leHQgYmxvY2sgKi8KLQkJaWYgKCsraGFuZGxlLT5vZmZzZXQgPj0gaGFuZGxlLT5jYykKLQkJCWhhbmRsZS0+b2Zmc2V0ID0gMDsKLQotCQkvKiBjaGVjayBmb3IgYnJlYWsgbG9vcCBjb25kaXRpb24qLwotCQlpZiAoaGFuZGxlLT5icmVha19sb29wKSB7Ci0JCQloYW5kbGUtPmJyZWFrX2xvb3AgPSAwOwotCQkJcmV0dXJuIFBDQVBfRVJST1JfQlJFQUs7Ci0JCX0KLQl9Ci0JcmV0dXJuIHBrdHM7Ci19Ci0KLXN0YXRpYyBpbnQKLXBjYXBfcmVhZF9saW51eF9tbWFwX3YxXzY0KHBjYXBfdCAqaGFuZGxlLCBpbnQgbWF4X3BhY2tldHMsIHBjYXBfaGFuZGxlciBjYWxsYmFjaywKLQkJdV9jaGFyICp1c2VyKQotewotCXN0cnVjdCBwY2FwX2xpbnV4ICpoYW5kbGVwID0gaGFuZGxlLT5wcml2OwotCXVuaW9uIHRoZHIgaDsKLQlpbnQgcGt0cyA9IDA7Ci0JaW50IHJldDsKLQotCS8qIHdhaXQgZm9yIGZyYW1lcyBhdmFpbGFiaWxpdHkuKi8KLQloLnJhdyA9IFJJTkdfR0VUX0NVUlJFTlRfRlJBTUUoaGFuZGxlKTsKLQlpZiAoaC5oMV82NC0+dHBfc3RhdHVzID09IFRQX1NUQVRVU19LRVJORUwpIHsKLQkJLyoKLQkJICogVGhlIGN1cnJlbnQgZnJhbWUgaXMgb3duZWQgYnkgdGhlIGtlcm5lbDsgd2FpdCBmb3IKLQkJICogYSBmcmFtZSB0byBiZSBoYW5kZWQgdG8gdXMuCi0JCSAqLwotCQlyZXQgPSBwY2FwX3dhaXRfZm9yX2ZyYW1lc19tbWFwKGhhbmRsZSk7Ci0JCWlmIChyZXQpIHsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9Ci0KLQkvKiBub24tcG9zaXRpdmUgdmFsdWVzIG9mIG1heF9wYWNrZXRzIGFyZSB1c2VkIHRvIHJlcXVpcmUgYWxsCi0JICogcGFja2V0cyBjdXJyZW50bHkgYXZhaWxhYmxlIGluIHRoZSByaW5nICovCi0Jd2hpbGUgKChwa3RzIDwgbWF4X3BhY2tldHMpIHx8IFBBQ0tFVF9DT1VOVF9JU19VTkxJTUlURUQobWF4X3BhY2tldHMpKSB7Ci0JCS8qCi0JCSAqIEdldCB0aGUgY3VycmVudCByaW5nIGJ1ZmZlciBmcmFtZSwgYW5kIGJyZWFrIGlmCi0JCSAqIGl0J3Mgc3RpbGwgb3duZWQgYnkgdGhlIGtlcm5lbC4KLQkJICovCi0JCWgucmF3ID0gUklOR19HRVRfQ1VSUkVOVF9GUkFNRShoYW5kbGUpOwotCQlpZiAoaC5oMV82NC0+dHBfc3RhdHVzID09IFRQX1NUQVRVU19LRVJORUwpCi0JCQlicmVhazsKLQotCQlyZXQgPSBwY2FwX2hhbmRsZV9wYWNrZXRfbW1hcCgKLQkJCQloYW5kbGUsCi0JCQkJY2FsbGJhY2ssCi0JCQkJdXNlciwKLQkJCQloLnJhdywKLQkJCQloLmgxXzY0LT50cF9sZW4sCi0JCQkJaC5oMV82NC0+dHBfbWFjLAotCQkJCWguaDFfNjQtPnRwX3NuYXBsZW4sCi0JCQkJaC5oMV82NC0+dHBfc2VjLAotCQkJCWguaDFfNjQtPnRwX3VzZWMsCi0JCQkJMCwKLQkJCQkwLAotCQkJCTApOwotCQlpZiAocmV0ID09IDEpIHsKLQkJCXBrdHMrKzsKLQkJCWhhbmRsZXAtPnBhY2tldHNfcmVhZCsrOwotCQl9IGVsc2UgaWYgKHJldCA8IDApIHsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQkvKgotCQkgKiBIYW5kIHRoaXMgYmxvY2sgYmFjayB0byB0aGUga2VybmVsLCBhbmQsIGlmIHdlJ3JlCi0JCSAqIGNvdW50aW5nIGJsb2NrcyB0aGF0IG5lZWQgdG8gYmUgZmlsdGVyZWQgaW4gdXNlcmxhbmQKLQkJICogYWZ0ZXIgaGF2aW5nIGJlZW4gZmlsdGVyZWQgYnkgdGhlIGtlcm5lbCwgY291bnQKLQkJICogdGhlIG9uZSB3ZSd2ZSBqdXN0IHByb2Nlc3NlZC4KLQkJICovCi0JCWguaDFfNjQtPnRwX3N0YXR1cyA9IFRQX1NUQVRVU19LRVJORUw7Ci0JCWlmIChoYW5kbGVwLT5ibG9ja3NfdG9fZmlsdGVyX2luX3VzZXJsYW5kID4gMCkgewotCQkJaGFuZGxlcC0+YmxvY2tzX3RvX2ZpbHRlcl9pbl91c2VybGFuZC0tOwotCQkJaWYgKGhhbmRsZXAtPmJsb2Nrc190b19maWx0ZXJfaW5fdXNlcmxhbmQgPT0gMCkgewotCQkJCS8qCi0JCQkJICogTm8gbW9yZSBibG9ja3MgbmVlZCB0byBiZSBmaWx0ZXJlZAotCQkJCSAqIGluIHVzZXJsYW5kLgotCQkJCSAqLwotCQkJCWhhbmRsZXAtPmZpbHRlcl9pbl91c2VybGFuZCA9IDA7Ci0JCQl9Ci0JCX0KLQotCQkvKiBuZXh0IGJsb2NrICovCi0JCWlmICgrK2hhbmRsZS0+b2Zmc2V0ID49IGhhbmRsZS0+Y2MpCi0JCQloYW5kbGUtPm9mZnNldCA9IDA7Ci0KLQkJLyogY2hlY2sgZm9yIGJyZWFrIGxvb3AgY29uZGl0aW9uKi8KLQkJaWYgKGhhbmRsZS0+YnJlYWtfbG9vcCkgewotCQkJaGFuZGxlLT5icmVha19sb29wID0gMDsKLQkJCXJldHVybiBQQ0FQX0VSUk9SX0JSRUFLOwotCQl9Ci0JfQotCXJldHVybiBwa3RzOwotfQotCi0jaWZkZWYgSEFWRV9UUEFDS0VUMgotc3RhdGljIGludAogcGNhcF9yZWFkX2xpbnV4X21tYXBfdjIocGNhcF90ICpoYW5kbGUsIGludCBtYXhfcGFja2V0cywgcGNhcF9oYW5kbGVyIGNhbGxiYWNrLAogCQl1X2NoYXIgKnVzZXIpCiB7CkBAIC01MjMwLDcgKzM5NzgsNyBAQAogCiAJLyogd2FpdCBmb3IgZnJhbWVzIGF2YWlsYWJpbGl0eS4qLwogCWgucmF3ID0gUklOR19HRVRfQ1VSUkVOVF9GUkFNRShoYW5kbGUpOwotCWlmIChoLmgyLT50cF9zdGF0dXMgPT0gVFBfU1RBVFVTX0tFUk5FTCkgeworCWlmICghcGFja2V0X21tYXBfYWNxdWlyZShoLmgyKSkgewogCQkvKgogCQkgKiBUaGUgY3VycmVudCBmcmFtZSBpcyBvd25lZCBieSB0aGUga2VybmVsOyB3YWl0IGZvcgogCQkgKiBhIGZyYW1lIHRvIGJlIGhhbmRlZCB0byB1cy4KQEAgLTUyNDksNyArMzk5Nyw3IEBACiAJCSAqIGl0J3Mgc3RpbGwgb3duZWQgYnkgdGhlIGtlcm5lbC4KIAkJICovCiAJCWgucmF3ID0gUklOR19HRVRfQ1VSUkVOVF9GUkFNRShoYW5kbGUpOwotCQlpZiAoaC5oMi0+dHBfc3RhdHVzID09IFRQX1NUQVRVU19LRVJORUwpCisJCWlmICghcGFja2V0X21tYXBfYWNxdWlyZShoLmgyKSkKIAkJCWJyZWFrOwogCiAJCXJldCA9IHBjYXBfaGFuZGxlX3BhY2tldF9tbWFwKApAQCAtNTI2Nyw3ICs0MDE1LDYgQEAKIAkJCQlWTEFOX1RQSUQoaC5oMiwgaC5oMikpOwogCQlpZiAocmV0ID09IDEpIHsKIAkJCXBrdHMrKzsKLQkJCWhhbmRsZXAtPnBhY2tldHNfcmVhZCsrOwogCQl9IGVsc2UgaWYgKHJldCA8IDApIHsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTUyNzgsNyArNDAyNSw3IEBACiAJCSAqIGFmdGVyIGhhdmluZyBiZWVuIGZpbHRlcmVkIGJ5IHRoZSBrZXJuZWwsIGNvdW50CiAJCSAqIHRoZSBvbmUgd2UndmUganVzdCBwcm9jZXNzZWQuCiAJCSAqLwotCQloLmgyLT50cF9zdGF0dXMgPSBUUF9TVEFUVVNfS0VSTkVMOworCQlwYWNrZXRfbW1hcF9yZWxlYXNlKGguaDIpOwogCQlpZiAoaGFuZGxlcC0+YmxvY2tzX3RvX2ZpbHRlcl9pbl91c2VybGFuZCA+IDApIHsKIAkJCWhhbmRsZXAtPmJsb2Nrc190b19maWx0ZXJfaW5fdXNlcmxhbmQtLTsKIAkJCWlmIChoYW5kbGVwLT5ibG9ja3NfdG9fZmlsdGVyX2luX3VzZXJsYW5kID09IDApIHsKQEAgLTUzMDIsNyArNDA0OSw2IEBACiAJfQogCXJldHVybiBwa3RzOwogfQotI2VuZGlmIC8qIEhBVkVfVFBBQ0tFVDIgKi8KIAogI2lmZGVmIEhBVkVfVFBBQ0tFVDMKIHN0YXRpYyBpbnQKQEAgLTUzMTgsNyArNDA2NCw3IEBACiAJaWYgKGhhbmRsZXAtPmN1cnJlbnRfcGFja2V0ID09IE5VTEwpIHsKIAkJLyogd2FpdCBmb3IgZnJhbWVzIGF2YWlsYWJpbGl0eS4qLwogCQloLnJhdyA9IFJJTkdfR0VUX0NVUlJFTlRfRlJBTUUoaGFuZGxlKTsKLQkJaWYgKGguaDMtPmhkci5iaDEuYmxvY2tfc3RhdHVzID09IFRQX1NUQVRVU19LRVJORUwpIHsKKwkJaWYgKCFwYWNrZXRfbW1hcF92M19hY3F1aXJlKGguaDMpKSB7CiAJCQkvKgogCQkJICogVGhlIGN1cnJlbnQgZnJhbWUgaXMgb3duZWQgYnkgdGhlIGtlcm5lbDsgd2FpdAogCQkJICogZm9yIGEgZnJhbWUgdG8gYmUgaGFuZGVkIHRvIHVzLgpAQCAtNTMzMCw3ICs0MDc2LDcgQEAKIAkJfQogCX0KIAloLnJhdyA9IFJJTkdfR0VUX0NVUlJFTlRfRlJBTUUoaGFuZGxlKTsKLQlpZiAoaC5oMy0+aGRyLmJoMS5ibG9ja19zdGF0dXMgPT0gVFBfU1RBVFVTX0tFUk5FTCkgeworCWlmICghcGFja2V0X21tYXBfdjNfYWNxdWlyZShoLmgzKSkgewogCQlpZiAocGt0cyA9PSAwICYmIGhhbmRsZXAtPnRpbWVvdXQgPT0gMCkgewogCQkJLyogQmxvY2sgdW50aWwgd2Ugc2VlIGEgcGFja2V0LiAqLwogCQkJZ290byBhZ2FpbjsKQEAgLTUzNDUsNyArNDA5MSw3IEBACiAKIAkJaWYgKGhhbmRsZXAtPmN1cnJlbnRfcGFja2V0ID09IE5VTEwpIHsKIAkJCWgucmF3ID0gUklOR19HRVRfQ1VSUkVOVF9GUkFNRShoYW5kbGUpOwotCQkJaWYgKGguaDMtPmhkci5iaDEuYmxvY2tfc3RhdHVzID09IFRQX1NUQVRVU19LRVJORUwpCisJCQlpZiAoIXBhY2tldF9tbWFwX3YzX2FjcXVpcmUoaC5oMykpCiAJCQkJYnJlYWs7CiAKIAkJCWhhbmRsZXAtPmN1cnJlbnRfcGFja2V0ID0gaC5yYXcgKyBoLmgzLT5oZHIuYmgxLm9mZnNldF90b19maXJzdF9wa3Q7CkBAIC01MzgxLDcgKzQxMjcsNiBAQAogCQkJCQlWTEFOX1RQSUQodHAzX2hkciwgJnRwM19oZHItPmh2MSkpOwogCQkJaWYgKHJldCA9PSAxKSB7CiAJCQkJcGt0cysrOwotCQkJCWhhbmRsZXAtPnBhY2tldHNfcmVhZCsrOwogCQkJfSBlbHNlIGlmIChyZXQgPCAwKSB7CiAJCQkJaGFuZGxlcC0+Y3VycmVudF9wYWNrZXQgPSBOVUxMOwogCQkJCXJldHVybiByZXQ7CkBAIC01Mzk4LDcgKzQxNDMsNyBAQAogCQkJICogZmlsdGVyZWQgYnkgdGhlIGtlcm5lbCwgY291bnQgdGhlIG9uZSB3ZSd2ZQogCQkJICoganVzdCBwcm9jZXNzZWQuCiAJCQkgKi8KLQkJCWguaDMtPmhkci5iaDEuYmxvY2tfc3RhdHVzID0gVFBfU1RBVFVTX0tFUk5FTDsKKwkJCXBhY2tldF9tbWFwX3YzX3JlbGVhc2UoaC5oMyk7CiAJCQlpZiAoaGFuZGxlcC0+YmxvY2tzX3RvX2ZpbHRlcl9pbl91c2VybGFuZCA+IDApIHsKIAkJCQloYW5kbGVwLT5ibG9ja3NfdG9fZmlsdGVyX2luX3VzZXJsYW5kLS07CiAJCQkJaWYgKGhhbmRsZXAtPmJsb2Nrc190b19maWx0ZXJfaW5fdXNlcmxhbmQgPT0gMCkgewpAQCAtNTQzMSwyOSArNDE3NiwxODAgQEAKIH0KICNlbmRpZiAvKiBIQVZFX1RQQUNLRVQzICovCiAKKy8qCisgKiAgQXR0YWNoIHRoZSBnaXZlbiBCUEYgY29kZSB0byB0aGUgcGFja2V0IGNhcHR1cmUgZGV2aWNlLgorICovCiBzdGF0aWMgaW50Ci1wY2FwX3NldGZpbHRlcl9saW51eF9tbWFwKHBjYXBfdCAqaGFuZGxlLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKmZpbHRlcikKK3BjYXBfc2V0ZmlsdGVyX2xpbnV4KHBjYXBfdCAqaGFuZGxlLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKmZpbHRlcikKIHsKLQlzdHJ1Y3QgcGNhcF9saW51eCAqaGFuZGxlcCA9IGhhbmRsZS0+cHJpdjsKLQlpbnQgbiwgb2Zmc2V0OwotCWludCByZXQ7CisJc3RydWN0IHBjYXBfbGludXggKmhhbmRsZXA7CisJc3RydWN0IHNvY2tfZnByb2cJZmNvZGU7CisJaW50CQkJY2FuX2ZpbHRlcl9pbl9rZXJuZWw7CisJaW50CQkJZXJyID0gMDsKKwlpbnQJCQluLCBvZmZzZXQ7CisKKwlpZiAoIWhhbmRsZSkKKwkJcmV0dXJuIC0xOworCWlmICghZmlsdGVyKSB7CisJICAgICAgICBwY2FwX3N0cmxjcHkoaGFuZGxlLT5lcnJidWYsICJzZXRmaWx0ZXI6IE5vIGZpbHRlciBzcGVjaWZpZWQiLAorCQkJUENBUF9FUlJCVUZfU0laRSk7CisJCXJldHVybiAtMTsKKwl9CisKKwloYW5kbGVwID0gaGFuZGxlLT5wcml2OworCisJLyogTWFrZSBvdXIgcHJpdmF0ZSBjb3B5IG9mIHRoZSBmaWx0ZXIgKi8KKworCWlmIChpbnN0YWxsX2JwZl9wcm9ncmFtKGhhbmRsZSwgZmlsdGVyKSA8IDApCisJCS8qIGluc3RhbGxfYnBmX3Byb2dyYW0oKSBmaWxsZWQgaW4gZXJyYnVmICovCisJCXJldHVybiAtMTsKIAogCS8qCi0JICogRG9uJ3QgcmV3cml0ZSAicmV0IiBpbnN0cnVjdGlvbnM7IHdlIGRvbid0IG5lZWQgdG8sIGFzCi0JICogd2UncmUgbm90IHJlYWRpbmcgcGFja2V0cyB3aXRoIHJlY3Ztc2coKSwgYW5kIHdlIGRvbid0Ci0JICogd2FudCB0bywgYXMsIGJ5IG5vdCByZXdyaXRpbmcgdGhlbSwgdGhlIGtlcm5lbCBjYW4gYXZvaWQKLQkgKiBjb3B5aW5nIGV4dHJhIGRhdGEuCisJICogUnVuIHVzZXIgbGV2ZWwgcGFja2V0IGZpbHRlciBieSBkZWZhdWx0LiBXaWxsIGJlIG92ZXJyaWRkZW4gaWYKKwkgKiBpbnN0YWxsaW5nIGEga2VybmVsIGZpbHRlciBzdWNjZWVkcy4KIAkgKi8KLQlyZXQgPSBwY2FwX3NldGZpbHRlcl9saW51eF9jb21tb24oaGFuZGxlLCBmaWx0ZXIsIDEpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OworCWhhbmRsZXAtPmZpbHRlcl9pbl91c2VybGFuZCA9IDE7CisKKwkvKiBJbnN0YWxsIGtlcm5lbCBsZXZlbCBmaWx0ZXIgaWYgcG9zc2libGUgKi8KKworI2lmZGVmIFVTSFJUX01BWAorCWlmIChoYW5kbGUtPmZjb2RlLmJmX2xlbiA+IFVTSFJUX01BWCkgeworCQkvKgorCQkgKiBmY29kZS5sZW4gaXMgYW4gdW5zaWduZWQgc2hvcnQgZm9yIGN1cnJlbnQga2VybmVsLgorCQkgKiBJIGhhdmUgeWV0IHRvIHNlZSBCUEYtQ29kZSB3aXRoIHRoYXQgbXVjaAorCQkgKiBpbnN0cnVjdGlvbnMgYnV0IHN0aWxsIGl0IGlzIHBvc3NpYmxlLiBTbyBmb3IgdGhlCisJCSAqIHNha2Ugb2YgY29ycmVjdG5lc3MgSSBhZGRlZCB0aGlzIGNoZWNrLgorCQkgKi8KKwkJZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiBGaWx0ZXIgdG9vIGNvbXBsZXggZm9yIGtlcm5lbFxuIik7CisJCWZjb2RlLmxlbiA9IDA7CisJCWZjb2RlLmZpbHRlciA9IE5VTEw7CisJCWNhbl9maWx0ZXJfaW5fa2VybmVsID0gMDsKKwl9IGVsc2UKKyNlbmRpZiAvKiBVU0hSVF9NQVggKi8KKwl7CisJCS8qCisJCSAqIE9oIGpveSwgdGhlIExpbnV4IGtlcm5lbCB1c2VzIHN0cnVjdCBzb2NrX2Zwcm9nIGluc3RlYWQKKwkJICogb2Ygc3RydWN0IGJwZl9wcm9ncmFtIGFuZCBvZiBjb3Vyc2UgdGhlIGxlbmd0aCBmaWVsZCBpcworCQkgKiBvZiBkaWZmZXJlbnQgc2l6ZS4gUG9pbnRlZCBvdXQgYnkgU2ViYXN0aWFuCisJCSAqCisJCSAqIE9oLCBhbmQgd2UgYWxzbyBuZWVkIHRvIGZpeCBpdCB1cCBzbyB0aGF0IGFsbCAicmV0IgorCQkgKiBpbnN0cnVjdGlvbnMgd2l0aCBub24temVybyBvcGVyYW5kcyBoYXZlIE1BWElNVU1fU05BUExFTgorCQkgKiBhcyB0aGUgb3BlcmFuZCBpZiB3ZSdyZSBub3QgY2FwdHVyaW5nIGluIG1lbW9yeS1tYXBwZWQKKwkJICogbW9kZSwgYW5kIHNvIHRoYXQsIGlmIHdlJ3JlIGluIGNvb2tlZCBtb2RlLCBhbGwgbWVtb3J5LQorCQkgKiByZWZlcmVuY2UgaW5zdHJ1Y3Rpb25zIHVzZSBzcGVjaWFsIG1hZ2ljIG9mZnNldHMgaW4KKwkJICogcmVmZXJlbmNlcyB0byB0aGUgbGluay1sYXllciBoZWFkZXIgYW5kIGFzc3VtZSB0aGF0IHRoZQorCQkgKiBsaW5rLWxheWVyIHBheWxvYWQgYmVnaW5zIGF0IDA7ICJmaXhfcHJvZ3JhbSgpIiB3aWxsIGRvCisJCSAqIHRoYXQuCisJCSAqLworCQlzd2l0Y2ggKGZpeF9wcm9ncmFtKGhhbmRsZSwgJmZjb2RlKSkgeworCisJCWNhc2UgLTE6CisJCWRlZmF1bHQ6CisJCQkvKgorCQkJICogRmF0YWwgZXJyb3I7IGp1c3QgcXVpdC4KKwkJCSAqIChUaGUgImRlZmF1bHQiIGNhc2Ugc2hvdWxkbid0IGhhcHBlbjsgd2UKKwkJCSAqIHJldHVybiAtMSBmb3IgdGhhdCByZWFzb24uKQorCQkJICovCisJCQlyZXR1cm4gLTE7CisKKwkJY2FzZSAwOgorCQkJLyoKKwkJCSAqIFRoZSBwcm9ncmFtIHBlcmZvcm1lZCBjaGVja3MgdGhhdCB3ZSBjYW4ndCBtYWtlCisJCQkgKiB3b3JrIGluIHRoZSBrZXJuZWwuCisJCQkgKi8KKwkJCWNhbl9maWx0ZXJfaW5fa2VybmVsID0gMDsKKwkJCWJyZWFrOworCisJCWNhc2UgMToKKwkJCS8qCisJCQkgKiBXZSBoYXZlIGEgZmlsdGVyIHRoYXQnbGwgd29yayBpbiB0aGUga2VybmVsLgorCQkJICovCisJCQljYW5fZmlsdGVyX2luX2tlcm5lbCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qCisJICogTk9URTogYXQgdGhpcyBwb2ludCwgd2UndmUgc2V0IGJvdGggdGhlICJsZW4iIGFuZCAiZmlsdGVyIgorCSAqIGZpZWxkcyBvZiAiZmNvZGUiLiAgQXMgb2YgdGhlIDIuNi4zMi40IGtlcm5lbCwgYXQgbGVhc3QsCisJICogdGhvc2UgYXJlIHRoZSBvbmx5IG1lbWJlcnMgb2YgdGhlICJzb2NrX2Zwcm9nIiBzdHJ1Y3R1cmUsCisJICogc28gd2UgaW5pdGlhbGl6ZSBldmVyeSBtZW1iZXIgb2YgdGhhdCBzdHJ1Y3R1cmUuCisJICoKKwkgKiBJZiB0aGVyZSBpcyBhbnl0aGluZyBpbiAiZmNvZGUiIHRoYXQgaXMgbm90IGluaXRpYWxpemVkLAorCSAqIGl0IGlzIGVpdGhlciBhIGZpZWxkIGFkZGVkIGluIGEgbGF0ZXIga2VybmVsLCBvciBpdCdzCisJICogcGFkZGluZy4KKwkgKgorCSAqIElmIGEgbmV3IGZpZWxkIGlzIGFkZGVkLCB0aGlzIGNvZGUgbmVlZHMgdG8gYmUgdXBkYXRlZAorCSAqIHRvIHNldCBpdCBjb3JyZWN0bHkuCisJICoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gb3RoZXIgZmllbGRzLCB0aGVuOgorCSAqCisJICoJaWYgdGhlIExpbnV4IGtlcm5lbCBsb29rcyBhdCB0aGUgcGFkZGluZywgaXQncworCSAqCWJ1Z2d5OworCSAqCisJICoJaWYgdGhlIExpbnV4IGtlcm5lbCBkb2Vzbid0IGxvb2sgYXQgdGhlIHBhZGRpbmcsCisJICoJdGhlbiBpZiBzb21lIHRvb2wgY29tcGxhaW5zIHRoYXQgd2UncmUgcGFzc2luZworCSAqCXVuaW5pdGlhbGl6ZWQgZGF0YSB0byB0aGUga2VybmVsLCB0aGVuIHRoZSB0b29sCisJICoJaXMgYnVnZ3kgYW5kIG5lZWRzIHRvIHVuZGVyc3RhbmQgdGhhdCBpdCdzIGp1c3QKKwkgKglwYWRkaW5nLgorCSAqLworCWlmIChjYW5fZmlsdGVyX2luX2tlcm5lbCkgeworCQlpZiAoKGVyciA9IHNldF9rZXJuZWxfZmlsdGVyKGhhbmRsZSwgJmZjb2RlKSkgPT0gMCkKKwkJeworCQkJLyoKKwkJCSAqIEluc3RhbGxhdGlvbiBzdWNjZWVkZWQgLSB1c2luZyBrZXJuZWwgZmlsdGVyLAorCQkJICogc28gdXNlcmxhbmQgZmlsdGVyaW5nIG5vdCBuZWVkZWQuCisJCQkgKi8KKwkJCWhhbmRsZXAtPmZpbHRlcl9pbl91c2VybGFuZCA9IDA7CisJCX0KKwkJZWxzZSBpZiAoZXJyID09IC0xKQkvKiBOb24tZmF0YWwgZXJyb3IgKi8KKwkJeworCQkJLyoKKwkJCSAqIFByaW50IGEgd2FybmluZyBpZiB3ZSB3ZXJlbid0IGFibGUgdG8gaW5zdGFsbAorCQkJICogdGhlIGZpbHRlciBmb3IgYSByZWFzb24gb3RoZXIgdGhhbiAidGhpcyBrZXJuZWwKKwkJCSAqIGlzbid0IGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBzb2NrZXQgZmlsdGVycy4KKwkJCSAqLworCQkJaWYgKGVycm5vICE9IEVOT1BST1RPT1BUICYmIGVycm5vICE9IEVPUE5PVFNVUFApIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkgICAgIldhcm5pbmc6IEtlcm5lbCBmaWx0ZXIgZmFpbGVkOiAlc1xuIiwKKwkJCQkJcGNhcF9zdHJlcnJvcihlcnJubykpOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBJZiB3ZSdyZSBub3QgdXNpbmcgdGhlIGtlcm5lbCBmaWx0ZXIsIGdldCByaWQgb2YgYW55IGtlcm5lbAorCSAqIGZpbHRlciB0aGF0IG1pZ2h0J3ZlIGJlZW4gdGhlcmUgYmVmb3JlLCBlLmcuIGJlY2F1c2UgdGhlCisJICogcHJldmlvdXMgZmlsdGVyIGNvdWxkIHdvcmsgaW4gdGhlIGtlcm5lbCwgb3IgYmVjYXVzZSBzb21lIG90aGVyCisJICogY29kZSBhdHRhY2hlZCBhIGZpbHRlciB0byB0aGUgc29ja2V0IGJ5IHNvbWUgbWVhbnMgb3RoZXIgdGhhbgorCSAqIGNhbGxpbmcgInBjYXBfc2V0ZmlsdGVyKCkiLiAgT3RoZXJ3aXNlLCB0aGUga2VybmVsIGZpbHRlciBtYXkKKwkgKiBmaWx0ZXIgb3V0IHBhY2tldHMgdGhhdCB3b3VsZCBwYXNzIHRoZSBuZXcgdXNlcmxhbmQgZmlsdGVyLgorCSAqLworCWlmIChoYW5kbGVwLT5maWx0ZXJfaW5fdXNlcmxhbmQpIHsKKwkJaWYgKHJlc2V0X2tlcm5lbF9maWx0ZXIoaGFuZGxlKSA9PSAtMSkgeworCQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhoYW5kbGUtPmVycmJ1ZiwKKwkJCSAgICBQQ0FQX0VSUkJVRl9TSVpFLCBlcnJubywKKwkJCSAgICAiY2FuJ3QgcmVtb3ZlIGtlcm5lbCBmaWx0ZXIiKTsKKwkJCWVyciA9IC0yOwkvKiBmYXRhbCBlcnJvciAqLworCQl9CisJfQorCisJLyoKKwkgKiBGcmVlIHVwIHRoZSBjb3B5IG9mIHRoZSBmaWx0ZXIgdGhhdCB3YXMgbWFkZSBieSAiZml4X3Byb2dyYW0oKSIuCisJICovCisJaWYgKGZjb2RlLmZpbHRlciAhPSBOVUxMKQorCQlmcmVlKGZjb2RlLmZpbHRlcik7CisKKwlpZiAoZXJyID09IC0yKQorCQkvKiBGYXRhbCBlcnJvciAqLworCQlyZXR1cm4gLTE7CiAKIAkvKgogCSAqIElmIHdlJ3JlIGZpbHRlcmluZyBpbiB1c2VybGFuZCwgdGhlcmUncyBub3RoaW5nIHRvIGRvOwogCSAqIHRoZSBuZXcgZmlsdGVyIHdpbGwgYmUgdXNlZCBmb3IgdGhlIG5leHQgcGFja2V0LgogCSAqLwogCWlmIChoYW5kbGVwLT5maWx0ZXJfaW5fdXNlcmxhbmQpCi0JCXJldHVybiByZXQ7CisJCXJldHVybiAwOwogCiAJLyoKIAkgKiBXZSdyZSBmaWx0ZXJpbmcgaW4gdGhlIGtlcm5lbDsgdGhlIHBhY2tldHMgcHJlc2VudCBpbgpAQCAtNTUwNCwxMyArNDQwMCwxMCBAQAogCSAqLwogCWhhbmRsZXAtPmJsb2Nrc190b19maWx0ZXJfaW5fdXNlcmxhbmQgPSBoYW5kbGUtPmNjIC0gbjsKIAloYW5kbGVwLT5maWx0ZXJfaW5fdXNlcmxhbmQgPSAxOwotCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKIH0KIAotI2VuZGlmIC8qIEhBVkVfUEFDS0VUX1JJTkcgKi8KLQotCi0jaWZkZWYgSEFWRV9QRl9QQUNLRVRfU09DS0VUUwogLyoKICAqICBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBkZXZpY2UgbmFtZS4gRmlsbCBlYnVmIGFuZCByZXR1cm4KICAqICAtMSBvbiBmYWlsdXJlLgpAQCAtNTUyMSw3ICs0NDE0LDcgQEAKIAlzdHJ1Y3QgaWZyZXEJaWZyOwogCiAJbWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKLQlzdHJsY3B5KGlmci5pZnJfbmFtZSwgZGV2aWNlLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CisJcGNhcF9zdHJsY3B5KGlmci5pZnJfbmFtZSwgZGV2aWNlLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CiAKIAlpZiAoaW9jdGwoZmQsIFNJT0NHSUZJTkRFWCwgJmlmcikgPT0gLTEpIHsKIAkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLApAQCAtNTUzNCwxOSArNDQyNywxOCBAQAogCiAvKgogICogIEJpbmQgdGhlIHNvY2tldCBhc3NvY2lhdGVkIHdpdGggRkQgdG8gdGhlIGdpdmVuIGRldmljZS4KLSAqICBSZXR1cm4gMSBvbiBzdWNjZXNzLCAwIGlmIHdlIHNob3VsZCB0cnkgYSBTT0NLX1BBQ0tFVCBzb2NrZXQsCi0gKiAgb3IgYSBQQ0FQX0VSUk9SXyB2YWx1ZSBvbiBhIGhhcmQgZXJyb3IuCisgKiAgUmV0dXJuIDAgb24gc3VjY2VzcyBvciBhIFBDQVBfRVJST1JfIHZhbHVlIG9uIGEgaGFyZCBlcnJvci4KICAqLwogc3RhdGljIGludAogaWZhY2VfYmluZChpbnQgZmQsIGludCBpZmluZGV4LCBjaGFyICplYnVmLCBpbnQgcHJvdG9jb2wpCiB7CiAJc3RydWN0IHNvY2thZGRyX2xsCXNsbDsKLQlpbnQJCQllcnI7CisJaW50CQkJcmV0LCBlcnI7CiAJc29ja2xlbl90CQllcnJsZW4gPSBzaXplb2YoZXJyKTsKIAogCW1lbXNldCgmc2xsLCAwLCBzaXplb2Yoc2xsKSk7CiAJc2xsLnNsbF9mYW1pbHkJCT0gQUZfUEFDS0VUOwotCXNsbC5zbGxfaWZpbmRleAkJPSBpZmluZGV4OworCXNsbC5zbGxfaWZpbmRleAkJPSBpZmluZGV4IDwgMCA/IDAgOiBpZmluZGV4OwogCXNsbC5zbGxfcHJvdG9jb2wJPSBwcm90b2NvbDsKIAogCWlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopICZzbGwsIHNpemVvZihzbGwpKSA9PSAtMSkgewpAQCAtNTU1OSwxOSArNDQ1MSwyMiBAQAogCQkJICogbGlicGNhcCBkZXZlbG9wZXJzLgogCQkJICovCiAJCQlyZXR1cm4gUENBUF9FUlJPUl9JRkFDRV9OT1RfVVA7Ci0JCX0gZWxzZSB7Ci0JCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsCi0JCQkgICAgZXJybm8sICJiaW5kIik7Ci0JCQlyZXR1cm4gUENBUF9FUlJPUjsKIAkJfQorCQlpZiAoZXJybm8gPT0gRU5PREVWKQorCQkJcmV0ID0gUENBUF9FUlJPUl9OT19TVUNIX0RFVklDRTsKKwkJZWxzZQorCQkJcmV0ID0gUENBUF9FUlJPUjsKKwkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkgICAgZXJybm8sICJiaW5kIik7CisJCXJldHVybiByZXQ7CiAJfQogCiAJLyogQW55IHBlbmRpbmcgZXJyb3JzLCBlLmcuLCBuZXR3b3JrIGlzIGRvd24/ICovCiAKIAlpZiAoZ2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fRVJST1IsICZlcnIsICZlcnJsZW4pID09IC0xKSB7CiAJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJICAgIGVycm5vLCAiZ2V0c29ja29wdCIpOwotCQlyZXR1cm4gMDsKKwkJICAgIGVycm5vLCAiZ2V0c29ja29wdCAoU09fRVJST1IpIik7CisJCXJldHVybiBQQ0FQX0VSUk9SOwogCX0KIAogCWlmIChlcnIgPT0gRU5FVERPV04pIHsKQEAgLTU1ODYsMzg4ICs0NDgxLDg5IEBACiAJfSBlbHNlIGlmIChlcnIgPiAwKSB7CiAJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgIGVyciwgImJpbmQiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBQQ0FQX0VSUk9SOwogCX0KIAotCXJldHVybiAxOwotfQotCi0jaWZkZWYgSVdfTU9ERV9NT05JVE9SCi0vKgotICogQ2hlY2sgd2hldGhlciB0aGUgZGV2aWNlIHN1cHBvcnRzIHRoZSBXaXJlbGVzcyBFeHRlbnNpb25zLgotICogUmV0dXJucyAxIGlmIGl0IGRvZXMsIDAgaWYgaXQgZG9lc24ndCwgUENBUF9FUlJPUl9OT19TVUNIX0RFVklDRQotICogaWYgdGhlIGRldmljZSBkb2Vzbid0IGV2ZW4gZXhpc3QuCi0gKi8KLXN0YXRpYyBpbnQKLWhhc193ZXh0KGludCBzb2NrX2ZkLCBjb25zdCBjaGFyICpkZXZpY2UsIGNoYXIgKmVidWYpCi17Ci0Jc3RydWN0IGl3cmVxIGlyZXE7Ci0KLQlpZiAoaXNfYm9uZGluZ19kZXZpY2Uoc29ja19mZCwgZGV2aWNlKSkKLQkJcmV0dXJuIDA7CS8qIGJvbmRpbmcgZGV2aWNlLCBzbyBkb24ndCBldmVuIHRyeSAqLwotCi0Jc3RybGNweShpcmVxLmlmcl9pZnJuLmlmcm5fbmFtZSwgZGV2aWNlLAotCSAgICBzaXplb2YgaXJlcS5pZnJfaWZybi5pZnJuX25hbWUpOwotCWlmIChpb2N0bChzb2NrX2ZkLCBTSU9DR0lXTkFNRSwgJmlyZXEpID49IDApCi0JCXJldHVybiAxOwkvKiB5ZXMgKi8KLQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsIGVycm5vLAotCSAgICAiJXM6IFNJT0NHSVdOQU1FIiwgZGV2aWNlKTsKLQlpZiAoZXJybm8gPT0gRU5PREVWKQotCQlyZXR1cm4gUENBUF9FUlJPUl9OT19TVUNIX0RFVklDRTsKIAlyZXR1cm4gMDsKIH0KIAogLyoKLSAqIFBlciBtZSBzaSB2YSBuZSBsYSBjaXR0YSBkb2xlbnRlLAotICogUGVyIG1lIHNpIHZhIG5lIGwnZXR0ZXJubyBkb2xvcmUsCi0gKgkuLi4KLSAqIExhc2NpYXRlIG9nbmUgc3BlcmFuemEsIHZvaSBjaCdpbnRyYXRlLgotICoKLSAqIFhYWCAtIGFpcm1vbi1uZyBkb2VzIHNwZWNpYWwgc3R1ZmYgd2l0aCB0aGUgT3Jpbm9jbyBkcml2ZXIgYW5kIHRoZQotICogd2xhbi1uZyBkcml2ZXIuCisgKiBUcnkgdG8gZW50ZXIgbW9uaXRvciBtb2RlLgorICogSWYgd2UgaGF2ZSBsaWJubCwgdHJ5IHRvIGNyZWF0ZSBhIG5ldyBtb25pdG9yLW1vZGUgZGV2aWNlIGFuZAorICogY2FwdHVyZSBvbiB0aGF0OyBvdGhlcndpc2UsIGp1c3Qgc2F5ICJub3Qgc3VwcG9ydGVkIi4KICAqLwotdHlwZWRlZiBlbnVtIHsKLQlNT05JVE9SX1dFWFQsCi0JTU9OSVRPUl9IT1NUQVAsCi0JTU9OSVRPUl9QUklTTSwKLQlNT05JVE9SX1BSSVNNNTQsCi0JTU9OSVRPUl9BQ1gxMDAsCi0JTU9OSVRPUl9SVDI1MDAsCi0JTU9OSVRPUl9SVDI1NzAsCi0JTU9OSVRPUl9SVDczLAotCU1PTklUT1JfUlRMOFhYWAotfSBtb25pdG9yX3R5cGU7Ci0KLS8qCi0gKiBVc2UgdGhlIFdpcmVsZXNzIEV4dGVuc2lvbnMsIGlmIHdlIGhhdmUgdGhlbSwgdG8gdHJ5IHRvIHR1cm4gbW9uaXRvciBtb2RlCi0gKiBvbiBpZiBpdCdzIG5vdCBhbHJlYWR5IG9uLgotICoKLSAqIFJldHVybnMgMSBvbiBzdWNjZXNzLCAwIGlmIHdlIGRvbid0IHN1cHBvcnQgdGhlIFdpcmVsZXNzIEV4dGVuc2lvbnMKLSAqIG9uIHRoaXMgZGV2aWNlLCBvciBhIFBDQVBfRVJST1JfIHZhbHVlIGlmIHdlIGRvIHN1cHBvcnQgdGhlbSBidXQKLSAqIHdlIHdlcmVuJ3QgYWJsZSB0byB0dXJuIG1vbml0b3IgbW9kZSBvbi4KLSAqLworI2lmZGVmIEhBVkVfTElCTkwKIHN0YXRpYyBpbnQKLWVudGVyX3JmbW9uX21vZGVfd2V4dChwY2FwX3QgKmhhbmRsZSwgaW50IHNvY2tfZmQsIGNvbnN0IGNoYXIgKmRldmljZSkKK2VudGVyX3JmbW9uX21vZGUocGNhcF90ICpoYW5kbGUsIGludCBzb2NrX2ZkLCBjb25zdCBjaGFyICpkZXZpY2UpCiB7Ci0JLyoKLQkgKiBYWFggLSBhdCBsZWFzdCBzb21lIGFkYXB0ZXJzIHJlcXVpcmUgbm9uLVdpcmVsZXNzIEV4dGVuc2lvbnMKLQkgKiBtZWNoYW5pc21zIHRvIHR1cm4gbW9uaXRvciBtb2RlIG9uLgotCSAqCi0JICogQXRoZXJvcyBjYXJkcyBtaWdodCByZXF1aXJlIHRoYXQgYSBzZXBhcmF0ZSAibW9uaXRvciB2aXJ0dWFsIGFjY2VzcwotCSAqIHBvaW50IiBiZSBjcmVhdGVkLCB3aXRoIGxhdGVyIHZlcnNpb25zIG9mIHRoZSBtYWR3aWZpIGRyaXZlci4KLQkgKiBhaXJtb24tbmcgZG9lcyAid2xhbmNvbmZpZyBhdGggY3JlYXRlIHdsYW5kZXYge2lmfSB3bGFubW9kZQotCSAqIG1vbml0b3IgLWJzc2lkIiwgd2hpY2ggYXBwYXJlbnRseSBzcGl0cyBvdXQgYSBsaW5lICJhdGhOIgotCSAqIHdoZXJlICJhdGhOIiBpcyB0aGUgbW9uaXRvciBtb2RlIGRldmljZS4gIFRvIGxlYXZlIG1vbml0b3IKLQkgKiBtb2RlLCBpdCBkZXN0cm95cyB0aGUgbW9uaXRvciBtb2RlIGRldmljZS4KLQkgKgotCSAqIFNvbWUgSW50ZWwgQ2VudHJpbm8gYWRhcHRlcnMgbWlnaHQgcmVxdWlyZSBwcml2YXRlIGlvY3RscyB0byBnZXQKLQkgKiByYWRpbyBoZWFkZXJzOyB0aGUgaXB3MjIwMCBhbmQgaXB3Mzk0NSBkcml2ZXJzIGFsbG93IHlvdSB0bwotCSAqIGNvbmZpZ3VyZSBhIHNlcGFyYXRlICJydGFwTiIgaW50ZXJmYWNlIHRvIGNhcHR1cmUgaW4gbW9uaXRvcgotCSAqIG1vZGUgd2l0aG91dCBwcmV2ZW50aW5nIHRoZSBhZGFwdGVyIGZyb20gb3BlcmF0aW5nIG5vcm1hbGx5LgotCSAqIChhaXJtb24tbmcgZG9lc24ndCBhcHBlYXIgdG8gdXNlIHRoYXQsIHRob3VnaC4pCi0JICoKLQkgKiBJdCB3b3VsZCBiZSBUcnVseSBXb25kZXJmdWwgaWYgbWFjODAyMTEgYW5kIG5sODAyMTEgY2xlYW5lZCB0aGlzCi0JICogdXAsIGFuZCBpZiBhbGwgZHJpdmVycyB3ZXJlIGNvbnZlcnRlZCB0byBtYWM4MDIxMSBkcml2ZXJzLgotCSAqCi0JICogSWYgaW50ZXJmYWNlIHtpZn0gaXMgYSBtYWM4MDIxMSBkcml2ZXIsIHRoZSBmaWxlCi0JICogL3N5cy9jbGFzcy9uZXQve2lmfS9waHk4MDIxMSBpcyBhIHN5bWxpbmsgdG8KLQkgKiAvc3lzL2NsYXNzL2llZWU4MDIxMS97cGh5ZGV2fSwgZm9yIHNvbWUge3BoeWRldn0uCi0JICoKLQkgKiBPbiBGZWRvcmEgOSwgd2l0aCBhIDIuNi4yNi4zLTI5IGtlcm5lbCwgbXkgWnlkYXMgc3RpY2ssIGF0Ci0JICogbGVhc3QsIGhhcyBhICJ3bWFzdGVyMCIgZGV2aWNlIGFuZCBhICJ3bGFuMCIgZGV2aWNlOyB0aGUKLQkgKiBsYXR0ZXIgaXMgdGhlIG9uZSB3aXRoIHRoZSBJUCBhZGRyZXNzLiAgQm90aCBzaG93IHVwIGluCi0JICogInRjcGR1bXAgLUQiIG91dHB1dC4gIENhcHR1cmluZyBvbiB0aGUgd21hc3RlcjAgZGV2aWNlCi0JICogY2FwdHVyZXMgd2l0aCA4MDIuMTEgaGVhZGVycy4KLQkgKgotCSAqIGFpcm1vbi1uZyBzZWFyY2hlcyB0aHJvdWdoIC9zeXMvY2xhc3MvbmV0IGZvciBkZXZpY2VzIG5hbWVkCi0JICogbW9uTiwgc3RhcnRpbmcgd2l0aCBtb24wOyBhcyBzb29uIGFzIG9uZSAqZG9lc24ndCogZXhpc3QsCi0JICogaXQgY2hvb3NlcyB0aGF0IGFzIHRoZSBtb25pdG9yIGRldmljZSBuYW1lLiAgSWYgdGhlICJpdyIKLQkgKiBjb21tYW5kIGV4aXN0cywgaXQgZG9lcyAiaXcgZGV2IHtpZn0gaW50ZXJmYWNlIGFkZCB7bW9uaWZ9Ci0JICogdHlwZSBtb25pdG9yIiwgd2hlcmUge21vbmlmfSBpcyB0aGUgbW9uaXRvciBkZXZpY2UuICBJdAotCSAqIHRoZW4gKHNpZ2gpIHNsZWVwcyAuMSBzZWNvbmQsIGFuZCB0aGVuIGNvbmZpZ3VyZXMgdGhlCi0JICogZGV2aWNlIHVwLiAgT3RoZXJ3aXNlLCBpZiAvc3lzL2NsYXNzL2llZWU4MDIxMS97cGh5ZGV2fS9hZGRfaWZhY2UKLQkgKiBpcyBhIGZpbGUsIGl0IHdyaXRlcyB7bW9uZGV2fSwgd2l0aG91dCBhIG5ld2xpbmUsIHRvIHRoYXQgZmlsZSwKLQkgKiBhbmQgYWdhaW4gKHNpZ2gpIHNsZWVwcyAuMSBzZWNvbmQsIGFuZCB0aGVuIGl3Y29uZmlnJ3MgdGhhdAotCSAqIGRldmljZSBpbnRvIG1vbml0b3IgbW9kZSBhbmQgY29uZmlndXJlcyBpdCB1cC4gIE90aGVyd2lzZSwKLQkgKiB5b3UgY2FuJ3QgZG8gbW9uaXRvciBtb2RlLgotCSAqCi0JICogQWxsIHRoZXNlIGRldmljZXMgYXJlICJnbHVlZCIgdG9nZXRoZXIgYnkgaGF2aW5nIHRoZQotCSAqIC9zeXMvY2xhc3MvbmV0L3tkZXZpY2V9L3BoeTgwMjExIGxpbmtzIHBvaW50aW5nIHRvIHRoZSBzYW1lCi0JICogcGxhY2UsIHNvLCBnaXZlbiBhIHdtYXN0ZXIsIHdsYW4sIG9yIG1vbiBkZXZpY2UsIHlvdSBjYW4KLQkgKiBmaW5kIHRoZSBvdGhlciBkZXZpY2VzIGJ5IGxvb2tpbmcgZm9yIGRldmljZXMgd2l0aAotCSAqIHRoZSBzYW1lIHBoeTgwMjExIGxpbmsuCi0JICoKLQkgKiBUbyB0dXJuIG1vbml0b3IgbW9kZSBvZmYsIGRlbGV0ZSB0aGUgbW9uaXRvciBpbnRlcmZhY2UsCi0JICogZWl0aGVyIHdpdGggIml3IGRldiB7bW9uaWZ9IGludGVyZmFjZSBkZWwiIG9yIGJ5IHNlbmRpbmcKLQkgKiB7bW9uaWZ9LCB3aXRoIG5vIE5MLCBkb3duIC9zeXMvY2xhc3MvaWVlZTgwMjExL3twaHlkZXZ9L3JlbW92ZV9pZmFjZQotCSAqCi0JICogTm90ZTogaWYgeW91IHRyeSB0byBjcmVhdGUgYSBtb25pdG9yIGRldmljZSBuYW1lZCAibW9uTiIsIGFuZAotCSAqIHRoZXJlJ3MgYWxyZWFkeSBhICJtb25OIiBkZXZpY2UsIGl0IGZhaWxzLCBhcyBsZWFzdCB3aXRoCi0JICogdGhlIG5ldGxpbmsgaW50ZXJmYWNlICh3aGljaCBpcyB3aGF0IGl3IHVzZXMpLCB3aXRoIGEgcmV0dXJuCi0JICogdmFsdWUgb2YgLUVORklMRS4gIChSZXR1cm4gdmFsdWVzIGFyZSBuZWdhdGl2ZSBlcnJub3MuKSAgV2UKLQkgKiBjb3VsZCBwcm9iYWJseSB1c2UgdGhhdCB0byBmaW5kIGFuIHVudXNlZCBkZXZpY2UuCi0JICovCiAJc3RydWN0IHBjYXBfbGludXggKmhhbmRsZXAgPSBoYW5kbGUtPnByaXY7Ci0JaW50IGVycjsKLQlzdHJ1Y3QgaXdyZXEgaXJlcTsKLQlzdHJ1Y3QgaXdfcHJpdl9hcmdzICpwcml2OwotCW1vbml0b3JfdHlwZSBtb250eXBlOwotCWludCBpOwotCV9fdTMyIGNtZDsKKwlpbnQgcmV0OworCWNoYXIgcGh5ZGV2X3BhdGhbUEFUSF9NQVgrMV07CisJc3RydWN0IG5sODAyMTFfc3RhdGUgbmxzdGF0ZTsKIAlzdHJ1Y3QgaWZyZXEgaWZyOwotCWludCBvbGRmbGFnczsKLQlpbnQgYXJnc1syXTsKLQlpbnQgY2hhbm5lbDsKKwl1X2ludCBuOwogCiAJLyoKLQkgKiBEb2VzIHRoaXMgZGV2aWNlICpzdXBwb3J0KiB0aGUgV2lyZWxlc3MgRXh0ZW5zaW9ucz8KKwkgKiBJcyB0aGlzIGEgbWFjODAyMTEgZGV2aWNlPwogCSAqLwotCWVyciA9IGhhc193ZXh0KHNvY2tfZmQsIGRldmljZSwgaGFuZGxlLT5lcnJidWYpOwotCWlmIChlcnIgPD0gMCkKLQkJcmV0dXJuIGVycjsJLyogZWl0aGVyIGl0IGRvZXNuJ3Qgb3IgdGhlIGRldmljZSBkb2Vzbid0IGV2ZW4gZXhpc3QgKi8KLQkvKgotCSAqIFN0YXJ0IG91dCBhc3N1bWluZyB3ZSBoYXZlIG5vIHByaXZhdGUgZXh0ZW5zaW9ucyB0byBjb250cm9sCi0JICogcmFkaW8gbWV0YWRhdGEuCi0JICovCi0JbW9udHlwZSA9IE1PTklUT1JfV0VYVDsKLQljbWQgPSAwOworCXJldCA9IGdldF9tYWM4MDIxMV9waHlkZXYoaGFuZGxlLCBkZXZpY2UsIHBoeWRldl9wYXRoLCBQQVRIX01BWCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CS8qIGVycm9yICovCisJaWYgKHJldCA9PSAwKQorCQlyZXR1cm4gMDsJLyogbm8gZXJyb3IsIGJ1dCBub3QgbWFjODAyMTEgZGV2aWNlICovCiAKIAkvKgotCSAqIFRyeSB0byBnZXQgYWxsIHRoZSBXaXJlbGVzcyBFeHRlbnNpb25zIHByaXZhdGUgaW9jdGxzCi0JICogc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlLgotCSAqCi0JICogRmlyc3QsIGdldCB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHdlIG5lZWQsIGJ5IHN1cHBseWluZyBubwotCSAqIGJ1ZmZlciBhbmQgYSBsZW5ndGggb2YgMC4gIElmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgcHJpdmF0ZQotCSAqIGlvY3RscywgaXQgc2hvdWxkIHJldHVybiBFMkJJRywgd2l0aCBpcmVxLnUuZGF0YS5sZW5ndGggc2V0Ci0JICogdG8gdGhlIGxlbmd0aCB3ZSBuZWVkLiAgSWYgaXQgZG9lc24ndCBzdXBwb3J0IHRoZW0sIGl0IHNob3VsZAotCSAqIHJldHVybiBFT1BOT1RTVVBQLgorCSAqIFhYWCAtIGlzIHRoaXMgYWxyZWFkeSBhIG1vbk4gZGV2aWNlPworCSAqIElmIHNvLCB3ZSdyZSBkb25lLgogCSAqLwotCW1lbXNldCgmaXJlcSwgMCwgc2l6ZW9mIGlyZXEpOwotCXN0cmxjcHkoaXJlcS5pZnJfaWZybi5pZnJuX25hbWUsIGRldmljZSwKLQkgICAgc2l6ZW9mIGlyZXEuaWZyX2lmcm4uaWZybl9uYW1lKTsKLQlpcmVxLnUuZGF0YS5wb2ludGVyID0gKHZvaWQgKilhcmdzOwotCWlyZXEudS5kYXRhLmxlbmd0aCA9IDA7Ci0JaXJlcS51LmRhdGEuZmxhZ3MgPSAwOwotCWlmIChpb2N0bChzb2NrX2ZkLCBTSU9DR0lXUFJJViwgJmlyZXEpICE9IC0xKSB7Ci0JCXBjYXBfc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCi0JCSAgICAiJXM6IFNJT0NHSVdQUklWIHdpdGggYSB6ZXJvLWxlbmd0aCBidWZmZXIgZGlkbid0IGZhaWwhIiwKLQkJICAgIGRldmljZSk7Ci0JCXJldHVybiBQQ0FQX0VSUk9SOwotCX0KLQlpZiAoZXJybm8gIT0gRU9QTk9UU1VQUCkgeworCisJLyoKKwkgKiBPSywgaXQncyBhcHBhcmVudGx5IGEgbWFjODAyMTEgZGV2aWNlLgorCSAqIFRyeSB0byBmaW5kIGFuIHVudXNlZCBtb25OIGRldmljZSBmb3IgaXQuCisJICovCisJcmV0ID0gbmw4MDIxMV9pbml0KGhhbmRsZSwgJm5sc3RhdGUsIGRldmljZSk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCWZvciAobiA9IDA7IG4gPCBVSU5UX01BWDsgbisrKSB7CiAJCS8qCi0JCSAqIE9LLCBpdCdzIG5vdCBhcyBpZiB0aGVyZSBhcmUgbm8gcHJpdmF0ZSBpb2N0bHMuCisJCSAqIFRyeSBtb257bn0uCiAJCSAqLwotCQlpZiAoZXJybm8gIT0gRTJCSUcpIHsKKwkJY2hhciBtb25kZXZpY2VbMysxMCsxXTsJLyogbW9ue1VJTlRfTUFYfVwwICovCisKKwkJc25wcmludGYobW9uZGV2aWNlLCBzaXplb2YgbW9uZGV2aWNlLCAibW9uJXUiLCBuKTsKKwkJcmV0ID0gYWRkX21vbl9pZihoYW5kbGUsIHNvY2tfZmQsICZubHN0YXRlLCBkZXZpY2UsIG1vbmRldmljZSk7CisJCWlmIChyZXQgPT0gMSkgewogCQkJLyoKLQkJCSAqIEZhaWxlZC4KKwkJCSAqIFN1Y2Nlc3MuICBXZSBkb24ndCBjbGVhbiB1cCB0aGUgbGlibmwgc3RhdGUKKwkJCSAqIHlldCwgYXMgd2UnbGwgYmUgdXNpbmcgaXQgbGF0ZXIuCiAJCQkgKi8KLQkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oaGFuZGxlLT5lcnJidWYsCi0JCQkgICAgUENBUF9FUlJCVUZfU0laRSwgZXJybm8sICIlczogU0lPQ0dJV1BSSVYiLCBkZXZpY2UpOwotCQkJcmV0dXJuIFBDQVBfRVJST1I7CisJCQlnb3RvIGFkZGVkOwogCQl9Ci0KLQkJLyoKLQkJICogT0ssIHRyeSB0byBnZXQgdGhlIGxpc3Qgb2YgcHJpdmF0ZSBpb2N0bHMuCi0JCSAqLwotCQlwcml2ID0gbWFsbG9jKGlyZXEudS5kYXRhLmxlbmd0aCAqIHNpemVvZiAoc3RydWN0IGl3X3ByaXZfYXJncykpOwotCQlpZiAocHJpdiA9PSBOVUxMKSB7Ci0JCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGhhbmRsZS0+ZXJyYnVmLAotCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsIGVycm5vLCAibWFsbG9jIik7Ci0JCQlyZXR1cm4gUENBUF9FUlJPUjsKKwkJaWYgKHJldCA8IDApIHsKKwkJCS8qCisJCQkgKiBIYXJkIGZhaWx1cmUuICBKdXN0IHJldHVybiByZXQ7IGhhbmRsZS0+ZXJyYnVmCisJCQkgKiBoYXMgYWxyZWFkeSBiZWVuIHNldC4KKwkJCSAqLworCQkJbmw4MDIxMV9jbGVhbnVwKCZubHN0YXRlKTsKKwkJCXJldHVybiByZXQ7CiAJCX0KLQkJaXJlcS51LmRhdGEucG9pbnRlciA9ICh2b2lkICopcHJpdjsKLQkJaWYgKGlvY3RsKHNvY2tfZmQsIFNJT0NHSVdQUklWLCAmaXJlcSkgPT0gLTEpIHsKLQkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oaGFuZGxlLT5lcnJidWYsCi0JCQkgICAgUENBUF9FUlJCVUZfU0laRSwgZXJybm8sICIlczogU0lPQ0dJV1BSSVYiLCBkZXZpY2UpOwotCQkJZnJlZShwcml2KTsKLQkJCXJldHVybiBQQ0FQX0VSUk9SOwotCQl9Ci0KLQkJLyoKLQkJICogTG9vayBmb3IgcHJpdmF0ZSBpb2N0bHMgdG8gdHVybiBtb25pdG9yIG1vZGUgb24gb3IsIGlmCi0JCSAqIG1vbml0b3IgbW9kZSBpcyBvbiwgdG8gc2V0IHRoZSBoZWFkZXIgdHlwZS4KLQkJICovCi0JCWZvciAoaSA9IDA7IGkgPCBpcmVxLnUuZGF0YS5sZW5ndGg7IGkrKykgewotCQkJaWYgKHN0cmNtcChwcml2W2ldLm5hbWUsICJtb25pdG9yX3R5cGUiKSA9PSAwKSB7Ci0JCQkJLyoKLQkJCQkgKiBIb3N0YXAgZHJpdmVyLCB1c2UgdGhpcyBvbmUuCi0JCQkJICogU2V0IG1vbml0b3IgbW9kZSBmaXJzdC4KLQkJCQkgKiBZb3UgY2FuIHNldCBpdCB0byAwIHRvIGdldCBETFRfSUVFRTgwMjExLAotCQkJCSAqIDEgdG8gZ2V0IERMVF9QUklTTSwgMiB0byBnZXQKLQkJCQkgKiBETFRfSUVFRTgwMjExX1JBRElPX0FWUywgYW5kLCB3aXRoIG1vcmUKLQkJCQkgKiByZWNlbnQgdmVyc2lvbnMgb2YgdGhlIGRyaXZlciwgMyB0byBnZXQKLQkJCQkgKiBETFRfSUVFRTgwMjExX1JBRElPLgotCQkJCSAqLwotCQkJCWlmICgocHJpdltpXS5zZXRfYXJncyAmIElXX1BSSVZfVFlQRV9NQVNLKSAhPSBJV19QUklWX1RZUEVfSU5UKQotCQkJCQlicmVhazsKLQkJCQlpZiAoIShwcml2W2ldLnNldF9hcmdzICYgSVdfUFJJVl9TSVpFX0ZJWEVEKSkKLQkJCQkJYnJlYWs7Ci0JCQkJaWYgKChwcml2W2ldLnNldF9hcmdzICYgSVdfUFJJVl9TSVpFX01BU0spICE9IDEpCi0JCQkJCWJyZWFrOwotCQkJCW1vbnR5cGUgPSBNT05JVE9SX0hPU1RBUDsKLQkJCQljbWQgPSBwcml2W2ldLmNtZDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChzdHJjbXAocHJpdltpXS5uYW1lLCAic2V0X3ByaXNtaGRyIikgPT0gMCkgewotCQkJCS8qCi0JCQkJICogUHJpc201NCBkcml2ZXIsIHVzZSB0aGlzIG9uZS4KLQkJCQkgKiBTZXQgbW9uaXRvciBtb2RlIGZpcnN0LgotCQkJCSAqIFlvdSBjYW4gc2V0IGl0IHRvIDIgdG8gZ2V0IERMVF9JRUVFODAyMTEKLQkJCQkgKiBvciAzIG9yIGdldCBETFRfUFJJU00uCi0JCQkJICovCi0JCQkJaWYgKChwcml2W2ldLnNldF9hcmdzICYgSVdfUFJJVl9UWVBFX01BU0spICE9IElXX1BSSVZfVFlQRV9JTlQpCi0JCQkJCWJyZWFrOwotCQkJCWlmICghKHByaXZbaV0uc2V0X2FyZ3MgJiBJV19QUklWX1NJWkVfRklYRUQpKQotCQkJCQlicmVhazsKLQkJCQlpZiAoKHByaXZbaV0uc2V0X2FyZ3MgJiBJV19QUklWX1NJWkVfTUFTSykgIT0gMSkKLQkJCQkJYnJlYWs7Ci0JCQkJbW9udHlwZSA9IE1PTklUT1JfUFJJU001NDsKLQkJCQljbWQgPSBwcml2W2ldLmNtZDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChzdHJjbXAocHJpdltpXS5uYW1lLCAiZm9yY2VwcmlzbWhlYWRlciIpID09IDApIHsKLQkJCQkvKgotCQkJCSAqIFJUMjU3MCBkcml2ZXIsIHVzZSB0aGlzIG9uZS4KLQkJCQkgKiBEbyB0aGlzIGFmdGVyIHR1cm5pbmcgbW9uaXRvciBtb2RlIG9uLgotCQkJCSAqIFlvdSBjYW4gc2V0IGl0IHRvIDEgdG8gZ2V0IERMVF9QUklTTSBvciAyCi0JCQkJICogdG8gZ2V0IERMVF9JRUVFODAyMTEuCi0JCQkJICovCi0JCQkJaWYgKChwcml2W2ldLnNldF9hcmdzICYgSVdfUFJJVl9UWVBFX01BU0spICE9IElXX1BSSVZfVFlQRV9JTlQpCi0JCQkJCWJyZWFrOwotCQkJCWlmICghKHByaXZbaV0uc2V0X2FyZ3MgJiBJV19QUklWX1NJWkVfRklYRUQpKQotCQkJCQlicmVhazsKLQkJCQlpZiAoKHByaXZbaV0uc2V0X2FyZ3MgJiBJV19QUklWX1NJWkVfTUFTSykgIT0gMSkKLQkJCQkJYnJlYWs7Ci0JCQkJbW9udHlwZSA9IE1PTklUT1JfUlQyNTcwOwotCQkJCWNtZCA9IHByaXZbaV0uY21kOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKHN0cmNtcChwcml2W2ldLm5hbWUsICJmb3JjZXByaXNtIikgPT0gMCkgewotCQkJCS8qCi0JCQkJICogUlQ3MyBkcml2ZXIsIHVzZSB0aGlzIG9uZS4KLQkJCQkgKiBEbyB0aGlzIGFmdGVyIHR1cm5pbmcgbW9uaXRvciBtb2RlIG9uLgotCQkJCSAqIEl0cyBhcmd1bWVudCBpcyBhICpzdHJpbmcqOyB5b3UgY2FuCi0JCQkJICogc2V0IGl0IHRvICIxIiB0byBnZXQgRExUX1BSSVNNIG9yICIyIgotCQkJCSAqIHRvIGdldCBETFRfSUVFRTgwMjExLgotCQkJCSAqLwotCQkJCWlmICgocHJpdltpXS5zZXRfYXJncyAmIElXX1BSSVZfVFlQRV9NQVNLKSAhPSBJV19QUklWX1RZUEVfQ0hBUikKLQkJCQkJYnJlYWs7Ci0JCQkJaWYgKHByaXZbaV0uc2V0X2FyZ3MgJiBJV19QUklWX1NJWkVfRklYRUQpCi0JCQkJCWJyZWFrOwotCQkJCW1vbnR5cGUgPSBNT05JVE9SX1JUNzM7Ci0JCQkJY21kID0gcHJpdltpXS5jbWQ7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoc3RyY21wKHByaXZbaV0ubmFtZSwgInByaXNtaGRyIikgPT0gMCkgewotCQkJCS8qCi0JCQkJICogT25lIG9mIHRoZSBSVEw4eHh4IGRyaXZlcnMsIHVzZSB0aGlzIG9uZS4KLQkJCQkgKiBJdCBjYW4gb25seSBiZSBkb25lIGFmdGVyIG1vbml0b3IgbW9kZQotCQkJCSAqIGhhcyBiZWVuIHR1cm5lZCBvbi4gIFlvdSBjYW4gc2V0IGl0IHRvIDEKLQkJCQkgKiB0byBnZXQgRExUX1BSSVNNIG9yIDAgdG8gZ2V0IERMVF9JRUVFODAyMTEuCi0JCQkJICovCi0JCQkJaWYgKChwcml2W2ldLnNldF9hcmdzICYgSVdfUFJJVl9UWVBFX01BU0spICE9IElXX1BSSVZfVFlQRV9JTlQpCi0JCQkJCWJyZWFrOwotCQkJCWlmICghKHByaXZbaV0uc2V0X2FyZ3MgJiBJV19QUklWX1NJWkVfRklYRUQpKQotCQkJCQlicmVhazsKLQkJCQlpZiAoKHByaXZbaV0uc2V0X2FyZ3MgJiBJV19QUklWX1NJWkVfTUFTSykgIT0gMSkKLQkJCQkJYnJlYWs7Ci0JCQkJbW9udHlwZSA9IE1PTklUT1JfUlRMOFhYWDsKLQkJCQljbWQgPSBwcml2W2ldLmNtZDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChzdHJjbXAocHJpdltpXS5uYW1lLCAicmZtb250eCIpID09IDApIHsKLQkJCQkvKgotCQkJCSAqIFJUMjUwMCBvciBSVDYxIGRyaXZlciwgdXNlIHRoaXMgb25lLgotCQkJCSAqIEl0IGhhcyBvbmUgb25lLWJ5dGUgcGFyYW1ldGVyOyBzZXQKLQkJCQkgKiB1LmRhdGEubGVuZ3RoIHRvIDEgYW5kIHUuZGF0YS5wb2ludGVyIHRvCi0JCQkJICogcG9pbnQgdG8gdGhlIHBhcmFtZXRlci4KLQkJCQkgKiBJdCBkb2Vzbid0IGl0c2VsZiB0dXJuIG1vbml0b3IgbW9kZSBvbi4KLQkJCQkgKiBZb3UgY2FuIHNldCBpdCB0byAxIHRvIGFsbG93IHRyYW5zbWl0dGluZwotCQkJCSAqIGluIG1vbml0b3IgbW9kZSg/KSBhbmQgZ2V0IERMVF9JRUVFODAyMTEsCi0JCQkJICogb3Igc2V0IGl0IHRvIDAgdG8gZGlzYWxsb3cgdHJhbnNtaXR0aW5nIGluCi0JCQkJICogbW9uaXRvciBtb2RlKD8pIGFuZCBnZXQgRExUX1BSSVNNLgotCQkJCSAqLwotCQkJCWlmICgocHJpdltpXS5zZXRfYXJncyAmIElXX1BSSVZfVFlQRV9NQVNLKSAhPSBJV19QUklWX1RZUEVfSU5UKQotCQkJCQlicmVhazsKLQkJCQlpZiAoKHByaXZbaV0uc2V0X2FyZ3MgJiBJV19QUklWX1NJWkVfTUFTSykgIT0gMikKLQkJCQkJYnJlYWs7Ci0JCQkJbW9udHlwZSA9IE1PTklUT1JfUlQyNTAwOwotCQkJCWNtZCA9IHByaXZbaV0uY21kOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKHN0cmNtcChwcml2W2ldLm5hbWUsICJtb25pdG9yIikgPT0gMCkgewotCQkJCS8qCi0JCQkJICogRWl0aGVyIEFDWDEwMCBvciBob3N0YXAsIHVzZSB0aGlzIG9uZS4KLQkJCQkgKiBJdCB0dXJucyBtb25pdG9yIG1vZGUgb24uCi0JCQkJICogSWYgaXQgdGFrZXMgdHdvIGFyZ3VtZW50cywgaXQncyBBQ1gxMDA7Ci0JCQkJICogdGhlIGZpcnN0IGFyZ3VtZW50IGlzIDEgZm9yIERMVF9QUklTTQotCQkJCSAqIG9yIDIgZm9yIERMVF9JRUVFODAyMTEsIGFuZCB0aGUgc2Vjb25kCi0JCQkJICogYXJndW1lbnQgaXMgdGhlIGNoYW5uZWwgb24gd2hpY2ggdG8KLQkJCQkgKiBydW4uICBJZiBpdCB0YWtlcyBvbmUgYXJndW1lbnQsIGl0J3MKLQkJCQkgKiBIb3N0QVAsIGFuZCB0aGUgYXJndW1lbnQgaXMgMiBmb3IKLQkJCQkgKiBETFRfSUVFRTgwMjExIGFuZCAzIGZvciBETFRfUFJJU00uCi0JCQkJICoKLQkJCQkgKiBJZiB3ZSBzZWUgdGhpcywgd2UgZG9uJ3QgcXVpdCwgYXMgdGhpcwotCQkJCSAqIG1pZ2h0IGJlIGEgdmVyc2lvbiBvZiB0aGUgaG9zdGFwIGRyaXZlcgotCQkJCSAqIHRoYXQgYWxzbyBzdXBwb3J0cyAibW9uaXRvcl90eXBlIi4KLQkJCQkgKi8KLQkJCQlpZiAoKHByaXZbaV0uc2V0X2FyZ3MgJiBJV19QUklWX1RZUEVfTUFTSykgIT0gSVdfUFJJVl9UWVBFX0lOVCkKLQkJCQkJYnJlYWs7Ci0JCQkJaWYgKCEocHJpdltpXS5zZXRfYXJncyAmIElXX1BSSVZfU0laRV9GSVhFRCkpCi0JCQkJCWJyZWFrOwotCQkJCXN3aXRjaCAocHJpdltpXS5zZXRfYXJncyAmIElXX1BSSVZfU0laRV9NQVNLKSB7Ci0KLQkJCQljYXNlIDE6Ci0JCQkJCW1vbnR5cGUgPSBNT05JVE9SX1BSSVNNOwotCQkJCQljbWQgPSBwcml2W2ldLmNtZDsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIDI6Ci0JCQkJCW1vbnR5cGUgPSBNT05JVE9SX0FDWDEwMDsKLQkJCQkJY21kID0gcHJpdltpXS5jbWQ7Ci0JCQkJCWJyZWFrOwotCi0JCQkJZGVmYXVsdDoKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWZyZWUocHJpdik7CiAJfQogCi0JLyoKLQkgKiBYWFggLSBpcHczOTQ1PyAgaXNsaXNtPwotCSAqLworCXNucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCSAgICAiJXM6IE5vIGZyZWUgbW9uTiBpbnRlcmZhY2VzIiwgZGV2aWNlKTsKKwlubDgwMjExX2NsZWFudXAoJm5sc3RhdGUpOworCXJldHVybiBQQ0FQX0VSUk9SOwogCi0JLyoKLQkgKiBHZXQgdGhlIG9sZCBtb2RlLgotCSAqLwotCXN0cmxjcHkoaXJlcS5pZnJfaWZybi5pZnJuX25hbWUsIGRldmljZSwKLQkgICAgc2l6ZW9mIGlyZXEuaWZyX2lmcm4uaWZybl9uYW1lKTsKLQlpZiAoaW9jdGwoc29ja19mZCwgU0lPQ0dJV01PREUsICZpcmVxKSA9PSAtMSkgewotCQkvKgotCQkgKiBXZSBwcm9iYWJseSB3b24ndCBiZSBhYmxlIHRvIHNldCB0aGUgbW9kZSwgZWl0aGVyLgotCQkgKi8KLQkJcmV0dXJuIFBDQVBfRVJST1JfUkZNT05fTk9UU1VQOwotCX0KK2FkZGVkOgogCisjaWYgMAogCS8qCi0JICogSXMgaXQgY3VycmVudGx5IGluIG1vbml0b3IgbW9kZT8KKwkgKiBTbGVlcCBmb3IgLjEgc2Vjb25kcy4KIAkgKi8KLQlpZiAoaXJlcS51Lm1vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7Ci0JCS8qCi0JCSAqIFllcy4gIEp1c3QgbGVhdmUgdGhpbmdzIGFzIHRoZXkgYXJlLgotCQkgKiBXZSBkb24ndCBvZmZlciBtdWx0aXBsZSBsaW5rLWxheWVyIHR5cGVzLCBhcwotCQkgKiBjaGFuZ2luZyB0aGUgbGluay1sYXllciB0eXBlIG91dCBmcm9tIHVuZGVyCi0JCSAqIHNvbWVib2R5IGVsc2UgY2FwdHVyaW5nIGluIG1vbml0b3IgbW9kZSB3b3VsZAotCQkgKiBiZSBjb25zaWRlcmVkIHJ1ZGUuCi0JCSAqLwotCQlyZXR1cm4gMTsKLQl9Ci0JLyoKLQkgKiBOby4gIFdlIGhhdmUgdG8gcHV0IHRoZSBhZGFwdGVyIGludG8gcmZtb24gbW9kZS4KLQkgKi8KKwlkZWxheS50dl9zZWMgPSAwOworCWRlbGF5LnR2X25zZWMgPSA1MDAwMDAwMDA7CisJbmFub3NsZWVwKCZkZWxheSwgTlVMTCk7CisjZW5kaWYKIAogCS8qCiAJICogSWYgd2UgaGF2ZW4ndCBhbHJlYWR5IGRvbmUgc28sIGFycmFuZ2UgdG8gaGF2ZQpAQCAtNTk3OCwyNzcgKzQ1NzQsNDcgQEAKIAkJICogImF0ZXhpdCgpIiBmYWlsZWQ7IGRvbid0IHB1dCB0aGUgaW50ZXJmYWNlCiAJCSAqIGluIHJmbW9uIG1vZGUsIGp1c3QgZ2l2ZSB1cC4KIAkJICovCi0JCXJldHVybiBQQ0FQX0VSUk9SX1JGTU9OX05PVFNVUDsKLQl9Ci0KLQkvKgotCSAqIFNhdmUgdGhlIG9sZCBtb2RlLgotCSAqLwotCWhhbmRsZXAtPm9sZG1vZGUgPSBpcmVxLnUubW9kZTsKLQotCS8qCi0JICogUHV0IHRoZSBhZGFwdGVyIGluIHJmbW9uIG1vZGUuICBIb3cgd2UgZG8gdGhpcyBkZXBlbmRzCi0JICogb24gd2hldGhlciB3ZSBoYXZlIGEgc3BlY2lhbCBwcml2YXRlIGlvY3RsIG9yIG5vdC4KLQkgKi8KLQlpZiAobW9udHlwZSA9PSBNT05JVE9SX1BSSVNNKSB7Ci0JCS8qCi0JCSAqIFdlIGhhdmUgdGhlICJtb25pdG9yIiBwcml2YXRlIGlvY3RsLCBidXQgbm9uZSBvZgotCQkgKiB0aGUgb3RoZXIgcHJpdmF0ZSBpb2N0bHMuICBVc2UgdGhpcywgYW5kIHNlbGVjdAotCQkgKiB0aGUgUHJpc20gaGVhZGVyLgotCQkgKgotCQkgKiBJZiBpdCBmYWlscywganVzdCBmYWxsIGJhY2sgb24gU0lPQ1NJV01PREUuCi0JCSAqLwotCQltZW1zZXQoJmlyZXEsIDAsIHNpemVvZiBpcmVxKTsKLQkJc3RybGNweShpcmVxLmlmcl9pZnJuLmlmcm5fbmFtZSwgZGV2aWNlLAotCQkgICAgc2l6ZW9mIGlyZXEuaWZyX2lmcm4uaWZybl9uYW1lKTsKLQkJaXJlcS51LmRhdGEubGVuZ3RoID0gMTsJLyogMSBhcmd1bWVudCAqLwotCQlhcmdzWzBdID0gMzsJLyogcmVxdWVzdCBQcmlzbSBoZWFkZXIgKi8KLQkJbWVtY3B5KGlyZXEudS5uYW1lLCBhcmdzLCBzaXplb2YgKGludCkpOwotCQlpZiAoaW9jdGwoc29ja19mZCwgY21kLCAmaXJlcSkgIT0gLTEpIHsKLQkJCS8qCi0JCQkgKiBTdWNjZXNzLgotCQkJICogTm90ZSB0aGF0IHdlIGhhdmUgdG8gcHV0IHRoZSBvbGQgbW9kZSBiYWNrCi0JCQkgKiB3aGVuIHdlIGNsb3NlIHRoZSBkZXZpY2UuCi0JCQkgKi8KLQkJCWhhbmRsZXAtPm11c3RfZG9fb25fY2xvc2UgfD0gTVVTVF9DTEVBUl9SRk1PTjsKLQotCQkJLyoKLQkJCSAqIEFkZCB0aGlzIHRvIHRoZSBsaXN0IG9mIHBjYXBzIHRvIGNsb3NlCi0JCQkgKiB3aGVuIHdlIGV4aXQuCi0JCQkgKi8KLQkJCXBjYXBfYWRkX3RvX3BjYXBzX3RvX2Nsb3NlKGhhbmRsZSk7Ci0KLQkJCXJldHVybiAxOwotCQl9Ci0KLQkJLyoKLQkJICogRmFpbHVyZS4gIEZhbGwgYmFjayBvbiBTSU9DU0lXTU9ERS4KLQkJICovCi0JfQotCi0JLyoKLQkgKiBGaXJzdCwgdGFrZSB0aGUgaW50ZXJmYWNlIGRvd24gaWYgaXQncyB1cDsgb3RoZXJ3aXNlLCB3ZQotCSAqIG1pZ2h0IGdldCBFQlVTWS4KLQkgKi8KLQltZW1zZXQoJmlmciwgMCwgc2l6ZW9mKGlmcikpOwotCXN0cmxjcHkoaWZyLmlmcl9uYW1lLCBkZXZpY2UsIHNpemVvZihpZnIuaWZyX25hbWUpKTsKLQlpZiAoaW9jdGwoc29ja19mZCwgU0lPQ0dJRkZMQUdTLCAmaWZyKSA9PSAtMSkgewotCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkgICAgZXJybm8sICIlczogQ2FuJ3QgZ2V0IGZsYWdzIiwgZGV2aWNlKTsKKwkJZGVsX21vbl9pZihoYW5kbGUsIHNvY2tfZmQsICZubHN0YXRlLCBkZXZpY2UsCisJCSAgICBoYW5kbGVwLT5tb25kZXZpY2UpOworCQlubDgwMjExX2NsZWFudXAoJm5sc3RhdGUpOwogCQlyZXR1cm4gUENBUF9FUlJPUjsKIAl9Ci0Jb2xkZmxhZ3MgPSAwOwotCWlmIChpZnIuaWZyX2ZsYWdzICYgSUZGX1VQKSB7Ci0JCW9sZGZsYWdzID0gaWZyLmlmcl9mbGFnczsKLQkJaWZyLmlmcl9mbGFncyAmPSB+SUZGX1VQOwotCQlpZiAoaW9jdGwoc29ja19mZCwgU0lPQ1NJRkZMQUdTLCAmaWZyKSA9PSAtMSkgewotCQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhoYW5kbGUtPmVycmJ1ZiwKLQkJCSAgICBQQ0FQX0VSUkJVRl9TSVpFLCBlcnJubywgIiVzOiBDYW4ndCBzZXQgZmxhZ3MiLAotCQkJICAgIGRldmljZSk7Ci0JCQlyZXR1cm4gUENBUF9FUlJPUjsKLQkJfQorCisJLyoKKwkgKiBOb3cgY29uZmlndXJlIHRoZSBtb25pdG9yIGludGVyZmFjZSB1cC4KKwkgKi8KKwltZW1zZXQoJmlmciwgMCwgc2l6ZW9mKGlmcikpOworCXBjYXBfc3RybGNweShpZnIuaWZyX25hbWUsIGhhbmRsZXAtPm1vbmRldmljZSwgc2l6ZW9mKGlmci5pZnJfbmFtZSkpOworCWlmIChpb2N0bChzb2NrX2ZkLCBTSU9DR0lGRkxBR1MsICZpZnIpID09IC0xKSB7CisJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICBlcnJubywgIiVzOiBDYW4ndCBnZXQgZmxhZ3MgZm9yICVzIiwgZGV2aWNlLAorCQkgICAgaGFuZGxlcC0+bW9uZGV2aWNlKTsKKwkJZGVsX21vbl9pZihoYW5kbGUsIHNvY2tfZmQsICZubHN0YXRlLCBkZXZpY2UsCisJCSAgICBoYW5kbGVwLT5tb25kZXZpY2UpOworCQlubDgwMjExX2NsZWFudXAoJm5sc3RhdGUpOworCQlyZXR1cm4gUENBUF9FUlJPUjsKKwl9CisJaWZyLmlmcl9mbGFncyB8PSBJRkZfVVB8SUZGX1JVTk5JTkc7CisJaWYgKGlvY3RsKHNvY2tfZmQsIFNJT0NTSUZGTEFHUywgJmlmcikgPT0gLTEpIHsKKwkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJICAgIGVycm5vLCAiJXM6IENhbid0IHNldCBmbGFncyBmb3IgJXMiLCBkZXZpY2UsCisJCSAgICBoYW5kbGVwLT5tb25kZXZpY2UpOworCQlkZWxfbW9uX2lmKGhhbmRsZSwgc29ja19mZCwgJm5sc3RhdGUsIGRldmljZSwKKwkJICAgIGhhbmRsZXAtPm1vbmRldmljZSk7CisJCW5sODAyMTFfY2xlYW51cCgmbmxzdGF0ZSk7CisJCXJldHVybiBQQ0FQX0VSUk9SOwogCX0KIAogCS8qCi0JICogVGhlbiB0dXJuIG1vbml0b3IgbW9kZSBvbi4KKwkgKiBTdWNjZXNzLiAgQ2xlYW4gdXAgdGhlIGxpYm5sIHN0YXRlLgogCSAqLwotCXN0cmxjcHkoaXJlcS5pZnJfaWZybi5pZnJuX25hbWUsIGRldmljZSwKLQkgICAgc2l6ZW9mIGlyZXEuaWZyX2lmcm4uaWZybl9uYW1lKTsKLQlpcmVxLnUubW9kZSA9IElXX01PREVfTU9OSVRPUjsKLQlpZiAoaW9jdGwoc29ja19mZCwgU0lPQ1NJV01PREUsICZpcmVxKSA9PSAtMSkgewotCQkvKgotCQkgKiBTY2llbnRpc3QsIHlvdSd2ZSBmYWlsZWQuCi0JCSAqIEJyaW5nIHRoZSBpbnRlcmZhY2UgYmFjayB1cCBpZiB3ZSBzaHV0IGl0IGRvd24uCi0JCSAqLwotCQlpZnIuaWZyX2ZsYWdzID0gb2xkZmxhZ3M7Ci0JCWlmIChpb2N0bChzb2NrX2ZkLCBTSU9DU0lGRkxBR1MsICZpZnIpID09IC0xKSB7Ci0JCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGhhbmRsZS0+ZXJyYnVmLAotCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsIGVycm5vLCAiJXM6IENhbid0IHNldCBmbGFncyIsCi0JCQkgICAgZGV2aWNlKTsKLQkJCXJldHVybiBQQ0FQX0VSUk9SOwotCQl9Ci0JCXJldHVybiBQQ0FQX0VSUk9SX1JGTU9OX05PVFNVUDsKLQl9CisJbmw4MDIxMV9jbGVhbnVwKCZubHN0YXRlKTsKIAogCS8qCi0JICogWFhYIC0gYWlybW9uLW5nIGRvZXMgIml3Y29uZmlnIHtpZn0ga2V5IG9mZiIgYWZ0ZXIgc2V0dGluZwotCSAqIG1vbml0b3IgbW9kZSBhbmQgc2V0dGluZyB0aGUgY2hhbm5lbCwgYW5kIHRoZW4gZG9lcwotCSAqICJpd2NvbmZpZyB1cCIuCisJICogTm90ZSB0aGF0IHdlIGhhdmUgdG8gZGVsZXRlIHRoZSBtb25pdG9yIGRldmljZSB3aGVuIHdlIGNsb3NlCisJICogdGhlIGhhbmRsZS4KIAkgKi8KLQotCS8qCi0JICogTm93IHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgcmFkaW8gaGVhZGVyLgotCSAqLwotCXN3aXRjaCAobW9udHlwZSkgewotCi0JY2FzZSBNT05JVE9SX1dFWFQ6Ci0JCS8qCi0JCSAqIFdlIGRvbid0IGhhdmUgYW55IHByaXZhdGUgaW9jdGwgdG8gc2V0IHRoZSBoZWFkZXIuCi0JCSAqLwotCQlicmVhazsKLQotCWNhc2UgTU9OSVRPUl9IT1NUQVA6Ci0JCS8qCi0JCSAqIFRyeSB0byBzZWxlY3QgdGhlIHJhZGlvdGFwIGhlYWRlci4KLQkJICovCi0JCW1lbXNldCgmaXJlcSwgMCwgc2l6ZW9mIGlyZXEpOwotCQlzdHJsY3B5KGlyZXEuaWZyX2lmcm4uaWZybl9uYW1lLCBkZXZpY2UsCi0JCSAgICBzaXplb2YgaXJlcS5pZnJfaWZybi5pZnJuX25hbWUpOwotCQlhcmdzWzBdID0gMzsJLyogcmVxdWVzdCByYWRpb3RhcCBoZWFkZXIgKi8KLQkJbWVtY3B5KGlyZXEudS5uYW1lLCBhcmdzLCBzaXplb2YgKGludCkpOwotCQlpZiAoaW9jdGwoc29ja19mZCwgY21kLCAmaXJlcSkgIT0gLTEpCi0JCQlicmVhazsJLyogc3VjY2VzcyAqLwotCi0JCS8qCi0JCSAqIFRoYXQgZmFpbGVkLiAgVHJ5IHRvIHNlbGVjdCB0aGUgQVZTIGhlYWRlci4KLQkJICovCi0JCW1lbXNldCgmaXJlcSwgMCwgc2l6ZW9mIGlyZXEpOwotCQlzdHJsY3B5KGlyZXEuaWZyX2lmcm4uaWZybl9uYW1lLCBkZXZpY2UsCi0JCSAgICBzaXplb2YgaXJlcS5pZnJfaWZybi5pZnJuX25hbWUpOwotCQlhcmdzWzBdID0gMjsJLyogcmVxdWVzdCBBVlMgaGVhZGVyICovCi0JCW1lbWNweShpcmVxLnUubmFtZSwgYXJncywgc2l6ZW9mIChpbnQpKTsKLQkJaWYgKGlvY3RsKHNvY2tfZmQsIGNtZCwgJmlyZXEpICE9IC0xKQotCQkJYnJlYWs7CS8qIHN1Y2Nlc3MgKi8KLQotCQkvKgotCQkgKiBUaGF0IGZhaWxlZC4gIFRyeSB0byBzZWxlY3QgdGhlIFByaXNtIGhlYWRlci4KLQkJICovCi0JCW1lbXNldCgmaXJlcSwgMCwgc2l6ZW9mIGlyZXEpOwotCQlzdHJsY3B5KGlyZXEuaWZyX2lmcm4uaWZybl9uYW1lLCBkZXZpY2UsCi0JCSAgICBzaXplb2YgaXJlcS5pZnJfaWZybi5pZnJuX25hbWUpOwotCQlhcmdzWzBdID0gMTsJLyogcmVxdWVzdCBQcmlzbSBoZWFkZXIgKi8KLQkJbWVtY3B5KGlyZXEudS5uYW1lLCBhcmdzLCBzaXplb2YgKGludCkpOwotCQlpb2N0bChzb2NrX2ZkLCBjbWQsICZpcmVxKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE1PTklUT1JfUFJJU006Ci0JCS8qCi0JCSAqIFRoZSBwcml2YXRlIGlvY3RsIGZhaWxlZC4KLQkJICovCi0JCWJyZWFrOwotCi0JY2FzZSBNT05JVE9SX1BSSVNNNTQ6Ci0JCS8qCi0JCSAqIFNlbGVjdCB0aGUgUHJpc20gaGVhZGVyLgotCQkgKi8KLQkJbWVtc2V0KCZpcmVxLCAwLCBzaXplb2YgaXJlcSk7Ci0JCXN0cmxjcHkoaXJlcS5pZnJfaWZybi5pZnJuX25hbWUsIGRldmljZSwKLQkJICAgIHNpemVvZiBpcmVxLmlmcl9pZnJuLmlmcm5fbmFtZSk7Ci0JCWFyZ3NbMF0gPSAzOwkvKiByZXF1ZXN0IFByaXNtIGhlYWRlciAqLwotCQltZW1jcHkoaXJlcS51Lm5hbWUsIGFyZ3MsIHNpemVvZiAoaW50KSk7Ci0JCWlvY3RsKHNvY2tfZmQsIGNtZCwgJmlyZXEpOwotCQlicmVhazsKLQotCWNhc2UgTU9OSVRPUl9BQ1gxMDA6Ci0JCS8qCi0JCSAqIEdldCB0aGUgY3VycmVudCBjaGFubmVsLgotCQkgKi8KLQkJbWVtc2V0KCZpcmVxLCAwLCBzaXplb2YgaXJlcSk7Ci0JCXN0cmxjcHkoaXJlcS5pZnJfaWZybi5pZnJuX25hbWUsIGRldmljZSwKLQkJICAgIHNpemVvZiBpcmVxLmlmcl9pZnJuLmlmcm5fbmFtZSk7Ci0JCWlmIChpb2N0bChzb2NrX2ZkLCBTSU9DR0lXRlJFUSwgJmlyZXEpID09IC0xKSB7Ci0JCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGhhbmRsZS0+ZXJyYnVmLAotCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsIGVycm5vLCAiJXM6IFNJT0NHSVdGUkVRIiwgZGV2aWNlKTsKLQkJCXJldHVybiBQQ0FQX0VSUk9SOwotCQl9Ci0JCWNoYW5uZWwgPSBpcmVxLnUuZnJlcS5tOwotCi0JCS8qCi0JCSAqIFNlbGVjdCB0aGUgUHJpc20gaGVhZGVyLCBhbmQgc2V0IHRoZSBjaGFubmVsIHRvIHRoZQotCQkgKiBjdXJyZW50IHZhbHVlLgotCQkgKi8KLQkJbWVtc2V0KCZpcmVxLCAwLCBzaXplb2YgaXJlcSk7Ci0JCXN0cmxjcHkoaXJlcS5pZnJfaWZybi5pZnJuX25hbWUsIGRldmljZSwKLQkJICAgIHNpemVvZiBpcmVxLmlmcl9pZnJuLmlmcm5fbmFtZSk7Ci0JCWFyZ3NbMF0gPSAxOwkJLyogcmVxdWVzdCBQcmlzbSBoZWFkZXIgKi8KLQkJYXJnc1sxXSA9IGNoYW5uZWw7CS8qIHNldCBjaGFubmVsICovCi0JCW1lbWNweShpcmVxLnUubmFtZSwgYXJncywgMipzaXplb2YgKGludCkpOwotCQlpb2N0bChzb2NrX2ZkLCBjbWQsICZpcmVxKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE1PTklUT1JfUlQyNTAwOgotCQkvKgotCQkgKiBEaXNhbGxvdyB0cmFuc21pc3Npb24gLSB0aGF0IHR1cm5zIG9uIHRoZQotCQkgKiBQcmlzbSBoZWFkZXIuCi0JCSAqLwotCQltZW1zZXQoJmlyZXEsIDAsIHNpemVvZiBpcmVxKTsKLQkJc3RybGNweShpcmVxLmlmcl9pZnJuLmlmcm5fbmFtZSwgZGV2aWNlLAotCQkgICAgc2l6ZW9mIGlyZXEuaWZyX2lmcm4uaWZybl9uYW1lKTsKLQkJYXJnc1swXSA9IDA7CS8qIGRpc2FsbG93IHRyYW5zbWl0dGluZyAqLwotCQltZW1jcHkoaXJlcS51Lm5hbWUsIGFyZ3MsIHNpemVvZiAoaW50KSk7Ci0JCWlvY3RsKHNvY2tfZmQsIGNtZCwgJmlyZXEpOwotCQlicmVhazsKLQotCWNhc2UgTU9OSVRPUl9SVDI1NzA6Ci0JCS8qCi0JCSAqIEZvcmNlIHRoZSBQcmlzbSBoZWFkZXIuCi0JCSAqLwotCQltZW1zZXQoJmlyZXEsIDAsIHNpemVvZiBpcmVxKTsKLQkJc3RybGNweShpcmVxLmlmcl9pZnJuLmlmcm5fbmFtZSwgZGV2aWNlLAotCQkgICAgc2l6ZW9mIGlyZXEuaWZyX2lmcm4uaWZybl9uYW1lKTsKLQkJYXJnc1swXSA9IDE7CS8qIHJlcXVlc3QgUHJpc20gaGVhZGVyICovCi0JCW1lbWNweShpcmVxLnUubmFtZSwgYXJncywgc2l6ZW9mIChpbnQpKTsKLQkJaW9jdGwoc29ja19mZCwgY21kLCAmaXJlcSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBNT05JVE9SX1JUNzM6Ci0JCS8qCi0JCSAqIEZvcmNlIHRoZSBQcmlzbSBoZWFkZXIuCi0JCSAqLwotCQltZW1zZXQoJmlyZXEsIDAsIHNpemVvZiBpcmVxKTsKLQkJc3RybGNweShpcmVxLmlmcl9pZnJuLmlmcm5fbmFtZSwgZGV2aWNlLAotCQkgICAgc2l6ZW9mIGlyZXEuaWZyX2lmcm4uaWZybl9uYW1lKTsKLQkJaXJlcS51LmRhdGEubGVuZ3RoID0gMTsJLyogMSBhcmd1bWVudCAqLwotCQlpcmVxLnUuZGF0YS5wb2ludGVyID0gIjEiOwotCQlpcmVxLnUuZGF0YS5mbGFncyA9IDA7Ci0JCWlvY3RsKHNvY2tfZmQsIGNtZCwgJmlyZXEpOwotCQlicmVhazsKLQotCWNhc2UgTU9OSVRPUl9SVEw4WFhYOgotCQkvKgotCQkgKiBGb3JjZSB0aGUgUHJpc20gaGVhZGVyLgotCQkgKi8KLQkJbWVtc2V0KCZpcmVxLCAwLCBzaXplb2YgaXJlcSk7Ci0JCXN0cmxjcHkoaXJlcS5pZnJfaWZybi5pZnJuX25hbWUsIGRldmljZSwKLQkJICAgIHNpemVvZiBpcmVxLmlmcl9pZnJuLmlmcm5fbmFtZSk7Ci0JCWFyZ3NbMF0gPSAxOwkvKiByZXF1ZXN0IFByaXNtIGhlYWRlciAqLwotCQltZW1jcHkoaXJlcS51Lm5hbWUsIGFyZ3MsIHNpemVvZiAoaW50KSk7Ci0JCWlvY3RsKHNvY2tfZmQsIGNtZCwgJmlyZXEpOwotCQlicmVhazsKLQl9Ci0KLQkvKgotCSAqIE5vdyBicmluZyB0aGUgaW50ZXJmYWNlIGJhY2sgdXAgaWYgd2UgYnJvdWdodCBpdCBkb3duLgotCSAqLwotCWlmIChvbGRmbGFncyAhPSAwKSB7Ci0JCWlmci5pZnJfZmxhZ3MgPSBvbGRmbGFnczsKLQkJaWYgKGlvY3RsKHNvY2tfZmQsIFNJT0NTSUZGTEFHUywgJmlmcikgPT0gLTEpIHsKLQkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oaGFuZGxlLT5lcnJidWYsCi0JCQkgICAgUENBUF9FUlJCVUZfU0laRSwgZXJybm8sICIlczogQ2FuJ3Qgc2V0IGZsYWdzIiwKLQkJCSAgICBkZXZpY2UpOwotCi0JCQkvKgotCQkJICogQXQgbGVhc3QgdHJ5IHRvIHJlc3RvcmUgdGhlIG9sZCBtb2RlIG9uIHRoZQotCQkJICogaW50ZXJmYWNlLgotCQkJICovCi0JCQlpZiAoaW9jdGwoaGFuZGxlLT5mZCwgU0lPQ1NJV01PREUsICZpcmVxKSA9PSAtMSkgewotCQkJCS8qCi0JCQkJICogU2NpZW50aXN0LCB5b3UndmUgZmFpbGVkLgotCQkJCSAqLwotCQkJCWZwcmludGYoc3RkZXJyLAotCQkJCSAgICAiQ2FuJ3QgcmVzdG9yZSBpbnRlcmZhY2Ugd2lyZWxlc3MgbW9kZSAoU0lPQ1NJV01PREUgZmFpbGVkOiAlcykuXG4iCi0JCQkJICAgICJQbGVhc2UgYWRqdXN0IG1hbnVhbGx5LlxuIiwKLQkJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKLQkJCX0KLQkJCXJldHVybiBQQ0FQX0VSUk9SOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBOb3RlIHRoYXQgd2UgaGF2ZSB0byBwdXQgdGhlIG9sZCBtb2RlIGJhY2sgd2hlbiB3ZQotCSAqIGNsb3NlIHRoZSBkZXZpY2UuCi0JICovCi0JaGFuZGxlcC0+bXVzdF9kb19vbl9jbG9zZSB8PSBNVVNUX0NMRUFSX1JGTU9OOworCWhhbmRsZXAtPm11c3RfZG9fb25fY2xvc2UgfD0gTVVTVF9ERUxFVEVfTU9OSUY7CiAKIAkvKgogCSAqIEFkZCB0aGlzIHRvIHRoZSBsaXN0IG9mIHBjYXBzIHRvIGNsb3NlIHdoZW4gd2UgZXhpdC4KQEAgLTYyNTcsNDEgKzQ2MjMsMTYgQEAKIAogCXJldHVybiAxOwogfQotI2VuZGlmIC8qIElXX01PREVfTU9OSVRPUiAqLwotCi0vKgotICogVHJ5IHZhcmlvdXMgbWVjaGFuaXNtcyB0byBlbnRlciBtb25pdG9yIG1vZGUuCi0gKi8KKyNlbHNlIC8qIEhBVkVfTElCTkwgKi8KIHN0YXRpYyBpbnQKLWVudGVyX3JmbW9uX21vZGUocGNhcF90ICpoYW5kbGUsIGludCBzb2NrX2ZkLCBjb25zdCBjaGFyICpkZXZpY2UpCitlbnRlcl9yZm1vbl9tb2RlKHBjYXBfdCAqaGFuZGxlIF9VXywgaW50IHNvY2tfZmQgX1VfLCBjb25zdCBjaGFyICpkZXZpY2UgX1VfKQogewotI2lmIGRlZmluZWQoSEFWRV9MSUJOTCkgfHwgZGVmaW5lZChJV19NT0RFX01PTklUT1IpCi0JaW50IHJldDsKLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9MSUJOTAotCXJldCA9IGVudGVyX3JmbW9uX21vZGVfbWFjODAyMTEoaGFuZGxlLCBzb2NrX2ZkLCBkZXZpY2UpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwkvKiBlcnJvciBhdHRlbXB0aW5nIHRvIGRvIHNvICovCi0JaWYgKHJldCA9PSAxKQotCQlyZXR1cm4gMTsJLyogc3VjY2VzcyAqLwotI2VuZGlmIC8qIEhBVkVfTElCTkwgKi8KLQotI2lmZGVmIElXX01PREVfTU9OSVRPUgotCXJldCA9IGVudGVyX3JmbW9uX21vZGVfd2V4dChoYW5kbGUsIHNvY2tfZmQsIGRldmljZSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7CS8qIGVycm9yIGF0dGVtcHRpbmcgdG8gZG8gc28gKi8KLQlpZiAocmV0ID09IDEpCi0JCXJldHVybiAxOwkvKiBzdWNjZXNzICovCi0jZW5kaWYgLyogSVdfTU9ERV9NT05JVE9SICovCi0KIAkvKgotCSAqIEVpdGhlciBub25lIG9mIHRoZSBtZWNoYW5pc21zIHdlIGtub3cgYWJvdXQgd29yayBvciBub25lCi0JICogb2YgdGhvc2UgbWVjaGFuaXNtcyBhcmUgYXZhaWxhYmxlLCBzbyB3ZSBjYW4ndCBkbyBtb25pdG9yCi0JICogbW9kZS4KKwkgKiBXZSBkb24ndCBoYXZlIGxpYm5sLCBzbyB3ZSBjYW4ndCBkbyBtb25pdG9yIG1vZGUuCiAJICovCiAJcmV0dXJuIDA7CiB9CisjZW5kaWYgLyogSEFWRV9MSUJOTCAqLwogCiAjaWYgZGVmaW5lZChIQVZFX0xJTlVYX05FVF9UU1RBTVBfSCkgJiYgZGVmaW5lZChQQUNLRVRfVElNRVNUQU1QKQogLyoKQEAgLTYzMTAsMTUgKzQ2NTEsMjEgQEAKIC8qCiAgKiBTZXQgdGhlIGxpc3Qgb2YgdGltZSBzdGFtcGluZyB0eXBlcyB0byBpbmNsdWRlIGFsbCB0eXBlcy4KICAqLwotc3RhdGljIHZvaWQKLWlmYWNlX3NldF9hbGxfdHNfdHlwZXMocGNhcF90ICpoYW5kbGUpCitzdGF0aWMgaW50CitpZmFjZV9zZXRfYWxsX3RzX3R5cGVzKHBjYXBfdCAqaGFuZGxlLCBjaGFyICplYnVmKQogewogCXVfaW50IGk7CiAKLQloYW5kbGUtPnRzdGFtcF90eXBlX2NvdW50ID0gTlVNX1NPRl9USU1FU1RBTVBJTkdfVFlQRVM7CiAJaGFuZGxlLT50c3RhbXBfdHlwZV9saXN0ID0gbWFsbG9jKE5VTV9TT0ZfVElNRVNUQU1QSU5HX1RZUEVTICogc2l6ZW9mKHVfaW50KSk7CisJaWYgKGhhbmRsZS0+dHN0YW1wX3R5cGVfbGlzdCA9PSBOVUxMKSB7CisJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJICAgIGVycm5vLCAibWFsbG9jIik7CisJCXJldHVybiAtMTsKKwl9CiAJZm9yIChpID0gMDsgaSA8IE5VTV9TT0ZfVElNRVNUQU1QSU5HX1RZUEVTOyBpKyspCiAJCWhhbmRsZS0+dHN0YW1wX3R5cGVfbGlzdFtpXSA9IHNvZl90c190eXBlX21hcFtpXS5wY2FwX3RzdGFtcF92YWw7CisJaGFuZGxlLT50c3RhbXBfdHlwZV9jb3VudCA9IE5VTV9TT0ZfVElNRVNUQU1QSU5HX1RZUEVTOworCXJldHVybiAwOwogfQogCiAjaWZkZWYgRVRIVE9PTF9HRVRfVFNfSU5GTwpAQCAtNjM0OSw3ICs0Njk2LDcgQEAKIAkvKgogCSAqIENyZWF0ZSBhIHNvY2tldCBmcm9tIHdoaWNoIHRvIGZldGNoIHRpbWUgc3RhbXBpbmcgY2FwYWJpbGl0aWVzLgogCSAqLwotCWZkID0gc29ja2V0KFBGX1VOSVgsIFNPQ0tfUkFXLCAwKTsKKwlmZCA9IGdldF9pZl9pb2N0bF9zb2NrZXQoKTsKIAlpZiAoZmQgPCAwKSB7CiAJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgIGVycm5vLCAic29ja2V0IGZvciBTSU9DRVRIVE9PTChFVEhUT09MX0dFVF9UU19JTkZPKSIpOwpAQCAtNjM1Nyw3ICs0NzA0LDcgQEAKIAl9CiAKIAltZW1zZXQoJmlmciwgMCwgc2l6ZW9mKGlmcikpOwotCXN0cmxjcHkoaWZyLmlmcl9uYW1lLCBkZXZpY2UsIHNpemVvZihpZnIuaWZyX25hbWUpKTsKKwlwY2FwX3N0cmxjcHkoaWZyLmlmcl9uYW1lLCBkZXZpY2UsIHNpemVvZihpZnIuaWZyX25hbWUpKTsKIAltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CiAJaW5mby5jbWQgPSBFVEhUT09MX0dFVF9UU19JTkZPOwogCWlmci5pZnJfZGF0YSA9IChjYWRkcl90KSZpbmZvOwpAQCAtNjM3NCw3ICs0NzIxLDggQEAKIAkJCSAqIGFza2luZyBmb3IgdGhlIHRpbWUgc3RhbXBpbmcgdHlwZXMsIHNvIGxldCdzCiAJCQkgKiBqdXN0IHJldHVybiBhbGwgdGhlIHBvc3NpYmxlIHR5cGVzLgogCQkJICovCi0JCQlpZmFjZV9zZXRfYWxsX3RzX3R5cGVzKGhhbmRsZSk7CisJCQlpZiAoaWZhY2Vfc2V0X2FsbF90c190eXBlcyhoYW5kbGUsIGVidWYpID09IC0xKQorCQkJCXJldHVybiAtMTsKIAkJCXJldHVybiAwOwogCiAJCWNhc2UgRU5PREVWOgpAQCAtNjQyMiwxNSArNDc3MCwyMCBAQAogCQlpZiAoaW5mby5zb190aW1lc3RhbXBpbmcgJiBzb2ZfdHNfdHlwZV9tYXBbaV0uc29mdF90aW1lc3RhbXBpbmdfdmFsKQogCQkJbnVtX3RzX3R5cGVzKys7CiAJfQotCWhhbmRsZS0+dHN0YW1wX3R5cGVfY291bnQgPSBudW1fdHNfdHlwZXM7CiAJaWYgKG51bV90c190eXBlcyAhPSAwKSB7CiAJCWhhbmRsZS0+dHN0YW1wX3R5cGVfbGlzdCA9IG1hbGxvYyhudW1fdHNfdHlwZXMgKiBzaXplb2YodV9pbnQpKTsKKwkJaWYgKGhhbmRsZS0+dHN0YW1wX3R5cGVfbGlzdCA9PSBOVUxMKSB7CisJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkgICAgZXJybm8sICJtYWxsb2MiKTsKKwkJCXJldHVybiAtMTsKKwkJfQogCQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IE5VTV9TT0ZfVElNRVNUQU1QSU5HX1RZUEVTOyBpKyspIHsKIAkJCWlmIChpbmZvLnNvX3RpbWVzdGFtcGluZyAmIHNvZl90c190eXBlX21hcFtpXS5zb2Z0X3RpbWVzdGFtcGluZ192YWwpIHsKIAkJCQloYW5kbGUtPnRzdGFtcF90eXBlX2xpc3Rbal0gPSBzb2ZfdHNfdHlwZV9tYXBbaV0ucGNhcF90c3RhbXBfdmFsOwogCQkJCWorKzsKIAkJCX0KIAkJfQorCQloYW5kbGUtPnRzdGFtcF90eXBlX2NvdW50ID0gbnVtX3RzX3R5cGVzOwogCX0gZWxzZQogCQloYW5kbGUtPnRzdGFtcF90eXBlX2xpc3QgPSBOVUxMOwogCkBAIC02NDM4LDcgKzQ3OTEsNyBAQAogfQogI2Vsc2UgLyogRVRIVE9PTF9HRVRfVFNfSU5GTyAqLwogc3RhdGljIGludAotaWZhY2VfZXRodG9vbF9nZXRfdHNfaW5mbyhjb25zdCBjaGFyICpkZXZpY2UsIHBjYXBfdCAqaGFuZGxlLCBjaGFyICplYnVmIF9VXykKK2lmYWNlX2V0aHRvb2xfZ2V0X3RzX2luZm8oY29uc3QgY2hhciAqZGV2aWNlLCBwY2FwX3QgKmhhbmRsZSwgY2hhciAqZWJ1ZikKIHsKIAkvKgogCSAqIFRoaXMgZG9lc24ndCBhcHBseSB0byB0aGUgImFueSIgZGV2aWNlOyB5b3UgY2FuJ3Qgc2F5ICJ0dXJuIG9uCkBAIC02NDU2LDE0ICs0ODA5LDE0IEBACiAJICogV2UgZG9uJ3QgaGF2ZSBhbiBpb2N0bCB0byB1c2UgdG8gYXNrIHdoYXQncyBzdXBwb3J0ZWQsCiAJICogc28gc2F5IHdlIHN1cHBvcnQgZXZlcnl0aGluZy4KIAkgKi8KLQlpZmFjZV9zZXRfYWxsX3RzX3R5cGVzKGhhbmRsZSk7CisJaWYgKGlmYWNlX3NldF9hbGxfdHNfdHlwZXMoaGFuZGxlLCBlYnVmKSA9PSAtMSkKKwkJcmV0dXJuIC0xOwogCXJldHVybiAwOwogfQogI2VuZGlmIC8qIEVUSFRPT0xfR0VUX1RTX0lORk8gKi8KIAogI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MSU5VWF9ORVRfVFNUQU1QX0gpICYmIGRlZmluZWQoUEFDS0VUX1RJTUVTVEFNUCkgKi8KIAotI2lmZGVmIEhBVkVfUEFDS0VUX1JJTkcKIC8qCiAgKiBGaW5kIG91dCBpZiB3ZSBoYXZlIGFueSBmb3JtIG9mIGZyYWdtZW50YXRpb24vcmVhc3NlbWJseSBvZmZsb2FkaW5nLgogICoKQEAgLTY0NzEsMjEgKzQ4MjQsMzUgQEAKICAqIGlmIFNJT0NFVEhUT09MIGlzbid0IGRlZmluZWQsIG9yIHdlIGRvbid0IGhhdmUgYW55ICNkZWZpbmVzIGZvciBhbnkKICAqIG9mIHRoZSB0eXBlcyBvZiBvZmZsb2FkaW5nLCB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvIHRvIGNoZWNrLCBzbwogICogd2UganVzdCBzYXkgIm5vLCB3ZSBkb24ndCIuCisgKgorICogV2UgdHJlYXQgRU9QTk9UU1VQUCwgRUlOVkFMIGFuZCwgaWYgZXBlcm1fb2sgaXMgdHJ1ZSwgRVBFUk0gYXMKKyAqIGluZGljYXRpb25zIHRoYXQgdGhlIG9wZXJhdGlvbiBpc24ndCBzdXBwb3J0ZWQuICBXZSBkbyBFUEVSTQorICogd2VpcmRseSBiZWNhdXNlIHRoZSBTSU9DRVRIVE9PTCBjb2RlIGluIGxhdGVyIGtlcm5lbHMgMSkgZG9lc24ndAorICogc3VwcG9ydCBFVEhUT09MX0dVRk8sIDIpIGFsc28gZG9lc24ndCBpbmNsdWRlIGl0IGluIHRoZSBsaXN0CisgKiBvZiBldGh0b29sIG9wZXJhdGlvbnMgdGhhdCBkb24ndCByZXF1aXJlIENBUF9ORVRfQURNSU4gcHJpdmlsZWdlcywKKyAqIGFuZCAzKSBkb2VzIHRoZSAiaXMgdGhpcyBwZXJtaXR0ZWQiIGNoZWNrIGJlZm9yZSBkb2luZyB0aGUgImlzCisgKiB0aGlzIGV2ZW4gc3VwcG9ydGVkIiBjaGVjaywgc28gaXQgZmFpbHMgd2l0aCAidGhpcyBpcyBub3QgcGVybWl0dGVkIgorICogcmF0aGVyIHRoYW4gInRoaXMgaXMgbm90IGV2ZW4gc3VwcG9ydGVkIi4gIFRvIHdvcmsgYXJvdW5kIHRoaXMKKyAqIGFubm95YW5jZSwgd2Ugb25seSB0cmVhdCBFUEVSTSBhcyBhbiBlcnJvciBmb3IgdGhlIGZpcnN0IGZlYXR1cmUsCisgKiBhbmQgYXNzdW1lIHRoYXQgdGhleSBhbGwgZG8gdGhlIHNhbWUgcGVybWlzc2lvbiBjaGVja3MsIHNvIGlmIHRoZQorICogZmlyc3Qgb25lIGlzIGFsbG93ZWQgYWxsIHRoZSBvdGhlcnMgYXJlIGFsbG93ZWQgaWYgc3VwcG9ydGVkLgogICovCiAjaWYgZGVmaW5lZChTSU9DRVRIVE9PTCkgJiYgKGRlZmluZWQoRVRIVE9PTF9HVFNPKSB8fCBkZWZpbmVkKEVUSFRPT0xfR1VGTykgfHwgZGVmaW5lZChFVEhUT09MX0dHU08pIHx8IGRlZmluZWQoRVRIVE9PTF9HRkxBR1MpIHx8IGRlZmluZWQoRVRIVE9PTF9HR1JPKSkKIHN0YXRpYyBpbnQKLWlmYWNlX2V0aHRvb2xfZmxhZ19pb2N0bChwY2FwX3QgKmhhbmRsZSwgaW50IGNtZCwgY29uc3QgY2hhciAqY21kbmFtZSkKK2lmYWNlX2V0aHRvb2xfZmxhZ19pb2N0bChwY2FwX3QgKmhhbmRsZSwgaW50IGNtZCwgY29uc3QgY2hhciAqY21kbmFtZSwKKyAgICBpbnQgZXBlcm1fb2spCiB7CiAJc3RydWN0IGlmcmVxCWlmcjsKIAlzdHJ1Y3QgZXRodG9vbF92YWx1ZSBldmFsOwogCiAJbWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKLQlzdHJsY3B5KGlmci5pZnJfbmFtZSwgaGFuZGxlLT5vcHQuZGV2aWNlLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CisJcGNhcF9zdHJsY3B5KGlmci5pZnJfbmFtZSwgaGFuZGxlLT5vcHQuZGV2aWNlLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CiAJZXZhbC5jbWQgPSBjbWQ7CiAJZXZhbC5kYXRhID0gMDsKIAlpZnIuaWZyX2RhdGEgPSAoY2FkZHJfdCkmZXZhbDsKIAlpZiAoaW9jdGwoaGFuZGxlLT5mZCwgU0lPQ0VUSFRPT0wsICZpZnIpID09IC0xKSB7Ci0JCWlmIChlcnJubyA9PSBFT1BOT1RTVVBQIHx8IGVycm5vID09IEVJTlZBTCkgeworCQlpZiAoZXJybm8gPT0gRU9QTk9UU1VQUCB8fCBlcnJubyA9PSBFSU5WQUwgfHwKKwkJICAgIChlcnJubyA9PSBFUEVSTSAmJiBlcGVybV9vaykpIHsKIAkJCS8qCiAJCQkgKiBPSywgbGV0J3MganVzdCByZXR1cm4gMCwgd2hpY2gsIGluIG91cgogCQkJICogY2FzZSwgZWl0aGVyIG1lYW5zICJubywgd2hhdCB3ZSdyZSBhc2tpbmcKQEAgLTY1MDIsMzQgKzQ4NjksNDEgQEAKIAlyZXR1cm4gZXZhbC5kYXRhOwogfQogCisvKgorICogWFhYIC0gaXQncyBhbm5veWluZyB0aGF0IHdlIGhhdmUgdG8gY2hlY2sgZm9yIG9mZmxvYWRpbmcgYXQgYWxsLCBidXQsCisgKiBnaXZlbiB0aGF0IHdlIGhhdmUgdG8sIGl0J3Mgc3RpbGwgYW5ub3lpbmcgdGhhdCB3ZSBoYXZlIHRvIGNoZWNrIGZvcgorICogcGFydGljdWxhciB0eXBlcyBvZiBvZmZsb2FkaW5nLCBlc3BlY2lhbGx5IHRoYXQgc2hpbnkgbmV3IHR5cGVzIG9mCisgKiBvZmZsb2FkaW5nIG1heSBiZSBhZGRlZCAtIGFuZCwgd29yc2UsIG1heSBub3QgYmUgY2hlY2thYmxlIHdpdGgKKyAqIGEgcGFydGljdWxhciBFVEhUT09MXyBvcGVyYXRpb247IEVUSFRPT0xfR0ZFQVRVUkVTIHdvdWxkLCBpbgorICogdGhlb3J5LCBnaXZlIHRob3NlIHRvIHlvdSwgYnV0IHRoZSBhY3R1YWwgZmxhZ3MgYmVpbmcgdXNlZCBhcmUKKyAqIG9wYXF1ZSAoZGVmaW5lZCBpbiBhIG5vbi11YXBpIGhlYWRlciksIGFuZCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8KKyAqIGJlIGFueSBvYnZpb3VzIHdheSB0byBhc2sgdGhlIGtlcm5lbCB3aGF0IGFsbCB0aGUgb2ZmbG9hZGluZyBmbGFncworICogYXJlIC0gYXQgYmVzdCwgeW91IGNhbiBhc2sgZm9yIGEgc2V0IG9mIHN0cmluZ3MoISkgdG8gZ2V0ICpuYW1lcyoKKyAqIGZvciB2YXJpb3VzIGZsYWdzLiAgKFRoYXQgd2hvbGUgbWVjaGFuaXNtIGFwcGVhcnMgdG8gaGF2ZSBiZWVuCisgKiBkZXNpZ25lZCBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBsZXR0aW5nIGV0aHRvb2wgcmVwb3J0IGZsYWdzCisgKiBieSBuYW1lIGFuZCBzZXQgZmxhZ3MgYnkgbmFtZSwgd2l0aCB0aGUgbmFtZXMgaGF2aW5nIG5vIHNlbWFudGljcworICogZXRodG9vbCB1bmRlcnN0YW5kcy4pCisgKi8KIHN0YXRpYyBpbnQKIGlmYWNlX2dldF9vZmZsb2FkKHBjYXBfdCAqaGFuZGxlKQogewogCWludCByZXQ7CiAKICNpZmRlZiBFVEhUT09MX0dUU08KLQlyZXQgPSBpZmFjZV9ldGh0b29sX2ZsYWdfaW9jdGwoaGFuZGxlLCBFVEhUT09MX0dUU08sICJFVEhUT09MX0dUU08iKTsKKwlyZXQgPSBpZmFjZV9ldGh0b29sX2ZsYWdfaW9jdGwoaGFuZGxlLCBFVEhUT09MX0dUU08sICJFVEhUT09MX0dUU08iLCAwKTsKIAlpZiAocmV0ID09IC0xKQogCQlyZXR1cm4gLTE7CiAJaWYgKHJldCkKIAkJcmV0dXJuIDE7CS8qIFRDUCBzZWdtZW50YXRpb24gb2ZmbG9hZGluZyBvbiAqLwogI2VuZGlmCiAKLSNpZmRlZiBFVEhUT09MX0dVRk8KLQlyZXQgPSBpZmFjZV9ldGh0b29sX2ZsYWdfaW9jdGwoaGFuZGxlLCBFVEhUT09MX0dVRk8sICJFVEhUT09MX0dVRk8iKTsKLQlpZiAocmV0ID09IC0xKQotCQlyZXR1cm4gLTE7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIDE7CS8qIFVEUCBmcmFnbWVudGF0aW9uIG9mZmxvYWRpbmcgb24gKi8KLSNlbmRpZgotCiAjaWZkZWYgRVRIVE9PTF9HR1NPCiAJLyoKIAkgKiBYWFggLSB3aWxsIHRoaXMgY2F1c2UgbGFyZ2UgdW5zZWdtZW50ZWQgcGFja2V0cyB0byBiZQogCSAqIGhhbmRlZCB0byBQRl9QQUNLRVQgc29ja2V0cyBvbiB0cmFuc21pc3Npb24/ICBJZiBub3QsCiAJICogdGhpcyBuZWVkIG5vdCBiZSBjaGVja2VkLgogCSAqLwotCXJldCA9IGlmYWNlX2V0aHRvb2xfZmxhZ19pb2N0bChoYW5kbGUsIEVUSFRPT0xfR0dTTywgIkVUSFRPT0xfR0dTTyIpOworCXJldCA9IGlmYWNlX2V0aHRvb2xfZmxhZ19pb2N0bChoYW5kbGUsIEVUSFRPT0xfR0dTTywgIkVUSFRPT0xfR0dTTyIsIDApOwogCWlmIChyZXQgPT0gLTEpCiAJCXJldHVybiAtMTsKIAlpZiAocmV0KQpAQCAtNjUzNyw3ICs0OTExLDcgQEAKICNlbmRpZgogCiAjaWZkZWYgRVRIVE9PTF9HRkxBR1MKLQlyZXQgPSBpZmFjZV9ldGh0b29sX2ZsYWdfaW9jdGwoaGFuZGxlLCBFVEhUT09MX0dGTEFHUywgIkVUSFRPT0xfR0ZMQUdTIik7CisJcmV0ID0gaWZhY2VfZXRodG9vbF9mbGFnX2lvY3RsKGhhbmRsZSwgRVRIVE9PTF9HRkxBR1MsICJFVEhUT09MX0dGTEFHUyIsIDApOwogCWlmIChyZXQgPT0gLTEpCiAJCXJldHVybiAtMTsKIAlpZiAocmV0ICYgRVRIX0ZMQUdfTFJPKQpAQCAtNjU1MCwxMyArNDkyNCwyNyBAQAogCSAqIGhhbmRlZCB0byBQRl9QQUNLRVQgc29ja2V0cyBvbiByZWNlaXB0PyAgSWYgbm90LAogCSAqIHRoaXMgbmVlZCBub3QgYmUgY2hlY2tlZC4KIAkgKi8KLQlyZXQgPSBpZmFjZV9ldGh0b29sX2ZsYWdfaW9jdGwoaGFuZGxlLCBFVEhUT09MX0dHUk8sICJFVEhUT09MX0dHUk8iKTsKKwlyZXQgPSBpZmFjZV9ldGh0b29sX2ZsYWdfaW9jdGwoaGFuZGxlLCBFVEhUT09MX0dHUk8sICJFVEhUT09MX0dHUk8iLCAwKTsKIAlpZiAocmV0ID09IC0xKQogCQlyZXR1cm4gLTE7CiAJaWYgKHJldCkKIAkJcmV0dXJuIDE7CS8qIGdlbmVyaWMgKGxhcmdlKSByZWNlaXZlIG9mZmxvYWRpbmcgb24gKi8KICNlbmRpZgogCisjaWZkZWYgRVRIVE9PTF9HVUZPCisJLyoKKwkgKiBEbyB0aGlzIG9uZSBsYXN0LCBhcyBzdXBwb3J0IGZvciBpdCB3YXMgcmVtb3ZlZCBpbiBsYXRlcgorCSAqIGtlcm5lbHMsIGFuZCBpdCBmYWlscyB3aXRoIEVQRVJNIG9uIHRob3NlIGtlcm5lbHMgcmF0aGVyCisJICogdGhhbiB3aXRoIEVPUE5PVFNVUFAgKHNlZSBleHBsYW5hdGlvbiBpbiBjb21tZW50IGZvcgorCSAqIGlmYWNlX2V0aHRvb2xfZmxhZ19pb2N0bCgpKS4KKwkgKi8KKwlyZXQgPSBpZmFjZV9ldGh0b29sX2ZsYWdfaW9jdGwoaGFuZGxlLCBFVEhUT09MX0dVRk8sICJFVEhUT09MX0dVRk8iLCAxKTsKKwlpZiAocmV0ID09IC0xKQorCQlyZXR1cm4gLTE7CisJaWYgKHJldCkKKwkJcmV0dXJuIDE7CS8qIFVEUCBmcmFnbWVudGF0aW9uIG9mZmxvYWRpbmcgb24gKi8KKyNlbmRpZgorCiAJcmV0dXJuIDA7CiB9CiAjZWxzZSAvKiBTSU9DRVRIVE9PTCAqLwpAQCAtNjU3MSwyNTEgKzQ5NTksODkgQEAKIH0KICNlbmRpZiAvKiBTSU9DRVRIVE9PTCAqLwogCi0jZW5kaWYgLyogSEFWRV9QQUNLRVRfUklORyAqLworc3RhdGljIHN0cnVjdCBkc2FfcHJvdG8geworCWNvbnN0IGNoYXIgKm5hbWU7CisJYnBmX3VfaW50MzIgbGlua3R5cGU7Cit9IGRzYV9wcm90b3NbXSA9IHsKKwkvKgorCSAqIE5vbmUgaXMgc3BlY2lhbCBhbmQgaW5kaWNhdGVzIHRoYXQgdGhlIGludGVyZmFjZSBkb2VzIG5vdCBoYXZlCisJICogYW55IHRhZ2dpbmcgcHJvdG9jb2wgY29uZmlndXJlZCwgYW5kIGlzIHRoZXJlZm9yZSBhIHN0YW5kYXJkCisJICogRXRoZXJuZXQgaW50ZXJmYWNlLgorCSAqLworCXsgIm5vbmUiLCBETFRfRU4xME1CIH0sCisJeyAiYnJjbSIsIERMVF9EU0FfVEFHX0JSQ00gfSwKKwl7ICJicmNtLXByZXBlbmQiLCBETFRfRFNBX1RBR19CUkNNX1BSRVBFTkQgfSwKKwl7ICJkc2EiLCBETFRfRFNBX1RBR19EU0EgfSwKKwl7ICJlZHNhIiwgRExUX0RTQV9UQUdfRURTQSB9LAorfTsKIAotI2VuZGlmIC8qIEhBVkVfUEZfUEFDS0VUX1NPQ0tFVFMgKi8KLQotLyogPT09PT0gRnVuY3Rpb25zIHRvIGludGVyZmFjZSB0byB0aGUgb2xkZXIga2VybmVscyA9PT09PT09PT09PT09PT09PT0gKi8KLQotLyoKLSAqIFRyeSB0byBvcGVuIGEgcGFja2V0IHNvY2tldCB1c2luZyB0aGUgb2xkIGtlcm5lbCBpbnRlcmZhY2UuCi0gKiBSZXR1cm5zIDEgb24gc3VjY2VzcyBhbmQgYSBQQ0FQX0VSUk9SXyB2YWx1ZSBvbiBhbiBlcnJvci4KLSAqLwogc3RhdGljIGludAotYWN0aXZhdGVfb2xkKHBjYXBfdCAqaGFuZGxlKQoraWZhY2VfZHNhX2dldF9wcm90b19pbmZvKGNvbnN0IGNoYXIgKmRldmljZSwgcGNhcF90ICpoYW5kbGUpCiB7Ci0Jc3RydWN0IHBjYXBfbGludXggKmhhbmRsZXAgPSBoYW5kbGUtPnByaXY7Ci0JaW50CQllcnI7Ci0JaW50CQlhcnB0eXBlOwotCXN0cnVjdCBpZnJlcQlpZnI7Ci0JY29uc3QgY2hhcgkqZGV2aWNlID0gaGFuZGxlLT5vcHQuZGV2aWNlOwotCXN0cnVjdCB1dHNuYW1lCXV0c25hbWU7Ci0JaW50CQltdHU7CisJY2hhciAqcGF0aHN0cjsKKwl1bnNpZ25lZCBpbnQgaTsKKwkvKgorCSAqIE1ha2UgdGhpcyBzaWduaWZpY2FudGx5IHNtYWxsZXIgdGhhbiBQQ0FQX0VSUkJVRl9TSVpFOworCSAqIHRoZSB0YWcgKnNob3VsZG4ndCogaGF2ZSBzb21lIGh1Z2UgbG9uZyBuYW1lLCBhbmQgbWFraW5nCisJICogaXQgc21hbGxlciBrZWVwcyBuZXdlciB2ZXJzaW9ucyBvZiBHQ0MgZnJvbSB3aGluaW5nIHRoYXQKKwkgKiB0aGUgZXJyb3IgbWVzc2FnZSBpZiB3ZSBkb24ndCBzdXBwb3J0IHRoZSB0YWcgY291bGQKKwkgKiBvdmVyZmxvdyB0aGUgZXJyb3IgbWVzc2FnZSBidWZmZXIuCisJICovCisJY2hhciBidWZbMTI4XTsKKwlzc2l6ZV90IHI7CisJaW50IGZkOwogCi0JLyogT3BlbiB0aGUgc29ja2V0ICovCi0KLQloYW5kbGUtPmZkID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfUEFDS0VULCBodG9ucyhFVEhfUF9BTEwpKTsKLQlpZiAoaGFuZGxlLT5mZCA9PSAtMSkgewotCQllcnIgPSBlcnJubzsKKwlmZCA9IGFzcHJpbnRmKCZwYXRoc3RyLCAiL3N5cy9jbGFzcy9uZXQvJXMvZHNhL3RhZ2dpbmciLCBkZXZpY2UpOworCWlmIChmZCA8IDApIHsKIAkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJICAgIGVyciwgInNvY2tldCIpOwotCQlpZiAoZXJyID09IEVQRVJNIHx8IGVyciA9PSBFQUNDRVMpIHsKLQkJCS8qCi0JCQkgKiBZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIG9wZW4gdGhlCi0JCQkgKiBzb2NrZXQuCi0JCQkgKi8KLQkJCXJldHVybiBQQ0FQX0VSUk9SX1BFUk1fREVOSUVEOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIE90aGVyIGVycm9yLgotCQkJICovCi0JCQlyZXR1cm4gUENBUF9FUlJPUjsKLQkJfQotCX0KLQotCS8qIEl0IHdvcmtlZCAtIHdlIGFyZSB1c2luZyB0aGUgb2xkIGludGVyZmFjZSAqLwotCWhhbmRsZXAtPnNvY2tfcGFja2V0ID0gMTsKLQotCS8qIC4uLndoaWNoIG1lYW5zIHdlIGdldCB0aGUgbGluay1sYXllciBoZWFkZXIuICovCi0JaGFuZGxlcC0+Y29va2VkID0gMDsKLQotCS8qIEJpbmQgdG8gdGhlIGdpdmVuIGRldmljZSAqLwotCi0JaWYgKHN0cmNtcChkZXZpY2UsICJhbnkiKSA9PSAwKSB7Ci0JCXN0cmxjcHkoaGFuZGxlLT5lcnJidWYsICJwY2FwX2FjdGl2YXRlOiBUaGUgXCJhbnlcIiBkZXZpY2UgaXNuJ3Qgc3VwcG9ydGVkIG9uIDIuMFsueF0ta2VybmVsIHN5c3RlbXMiLAotCQkJUENBUF9FUlJCVUZfU0laRSk7CisJCQkJCSAgZmQsICJhc3ByaW50ZiIpOwogCQlyZXR1cm4gUENBUF9FUlJPUjsKIAl9Ci0JaWYgKGlmYWNlX2JpbmRfb2xkKGhhbmRsZS0+ZmQsIGRldmljZSwgaGFuZGxlLT5lcnJidWYpID09IC0xKQorCisJZmQgPSBvcGVuKHBhdGhzdHIsIE9fUkRPTkxZKTsKKwlmcmVlKHBhdGhzdHIpOworCS8qCisJICogVGhpcyBpcyBub3QgZmF0YWwsIGtlcm5lbCA+PSA0LjIwICptaWdodCogZXhwb3NlIHRoaXMgYXR0cmlidXRlCisJICovCisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlyID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSAtIDEpOworCWlmIChyIDw9IDApIHsKKwkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQkJICBlcnJubywgInJlYWQiKTsKKwkJY2xvc2UoZmQpOwogCQlyZXR1cm4gUENBUF9FUlJPUjsKKwl9CisJY2xvc2UoZmQpOwogCiAJLyoKLQkgKiBUcnkgdG8gZ2V0IHRoZSBsaW5rLWxheWVyIHR5cGUuCisJICogQnVmZmVyIHNob3VsZCBiZSBMRiB0ZXJtaW5hdGVkLgogCSAqLwotCWFycHR5cGUgPSBpZmFjZV9nZXRfYXJwdHlwZShoYW5kbGUtPmZkLCBkZXZpY2UsIGhhbmRsZS0+ZXJyYnVmKTsKLQlpZiAoYXJwdHlwZSA8IDApCi0JCXJldHVybiBQQ0FQX0VSUk9SOworCWlmIChidWZbciAtIDFdID09ICdcbicpCisJCXItLTsKKwlidWZbcl0gPSAnXDAnOwogCi0JLyoKLQkgKiBUcnkgdG8gZmluZCB0aGUgRExUXyB0eXBlIGNvcnJlc3BvbmRpbmcgdG8gdGhhdAotCSAqIGxpbmstbGF5ZXIgdHlwZS4KLQkgKi8KLQltYXBfYXJwaHJkX3RvX2RsdChoYW5kbGUsIGhhbmRsZS0+ZmQsIGFycHR5cGUsIGRldmljZSwgMCk7Ci0JaWYgKGhhbmRsZS0+bGlua3R5cGUgPT0gLTEpIHsKLQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJCSAidW5rbm93biBhcnB0eXBlICVkIiwgYXJwdHlwZSk7Ci0JCXJldHVybiBQQ0FQX0VSUk9SOwotCX0KLQotCS8qIEdvIHRvIHByb21pc2MgbW9kZSBpZiByZXF1ZXN0ZWQgKi8KLQotCWlmIChoYW5kbGUtPm9wdC5wcm9taXNjKSB7Ci0JCW1lbXNldCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7Ci0JCXN0cmxjcHkoaWZyLmlmcl9uYW1lLCBkZXZpY2UsIHNpemVvZihpZnIuaWZyX25hbWUpKTsKLQkJaWYgKGlvY3RsKGhhbmRsZS0+ZmQsIFNJT0NHSUZGTEFHUywgJmlmcikgPT0gLTEpIHsKLQkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oaGFuZGxlLT5lcnJidWYsCi0JCQkgICAgUENBUF9FUlJCVUZfU0laRSwgZXJybm8sICJTSU9DR0lGRkxBR1MiKTsKLQkJCXJldHVybiBQQ0FQX0VSUk9SOwotCQl9Ci0JCWlmICgoaWZyLmlmcl9mbGFncyAmIElGRl9QUk9NSVNDKSA9PSAwKSB7Ci0JCQkvKgotCQkJICogUHJvbWlzY3VvdXMgbW9kZSBpc24ndCBjdXJyZW50bHkgb24sCi0JCQkgKiBzbyB0dXJuIGl0IG9uLCBhbmQgcmVtZW1iZXIgdGhhdAotCQkJICogd2Ugc2hvdWxkIHR1cm4gaXQgb2ZmIHdoZW4gdGhlCi0JCQkgKiBwY2FwX3QgaXMgY2xvc2VkLgotCQkJICovCi0KLQkJCS8qCi0JCQkgKiBJZiB3ZSBoYXZlbid0IGFscmVhZHkgZG9uZSBzbywgYXJyYW5nZQotCQkJICogdG8gaGF2ZSAicGNhcF9jbG9zZV9hbGwoKSIgY2FsbGVkIHdoZW4KLQkJCSAqIHdlIGV4aXQuCi0JCQkgKi8KLQkJCWlmICghcGNhcF9kb19hZGRleGl0KGhhbmRsZSkpIHsKLQkJCQkvKgotCQkJCSAqICJhdGV4aXQoKSIgZmFpbGVkOyBkb24ndCBwdXQKLQkJCQkgKiB0aGUgaW50ZXJmYWNlIGluIHByb21pc2N1b3VzCi0JCQkJICogbW9kZSwganVzdCBnaXZlIHVwLgotCQkJCSAqLwotCQkJCXJldHVybiBQQ0FQX0VSUk9SOworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZHNhX3Byb3RvcykgLyBzaXplb2YoZHNhX3Byb3Rvc1swXSk7IGkrKykgeworCQlpZiAoc3RybGVuKGRzYV9wcm90b3NbaV0ubmFtZSkgPT0gKHNpemVfdClyICYmCisJCSAgICBzdHJjbXAoYnVmLCBkc2FfcHJvdG9zW2ldLm5hbWUpID09IDApIHsKKwkJCWhhbmRsZS0+bGlua3R5cGUgPSBkc2FfcHJvdG9zW2ldLmxpbmt0eXBlOworCQkJc3dpdGNoIChkc2FfcHJvdG9zW2ldLmxpbmt0eXBlKSB7CisJCQljYXNlIERMVF9FTjEwTUI6CisJCQkJcmV0dXJuIDA7CisJCQlkZWZhdWx0OgorCQkJCXJldHVybiAxOwogCQkJfQotCi0JCQlpZnIuaWZyX2ZsYWdzIHw9IElGRl9QUk9NSVNDOwotCQkJaWYgKGlvY3RsKGhhbmRsZS0+ZmQsIFNJT0NTSUZGTEFHUywgJmlmcikgPT0gLTEpIHsKLQkJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGhhbmRsZS0+ZXJyYnVmLAotCQkJCSAgICBQQ0FQX0VSUkJVRl9TSVpFLCBlcnJubywgIlNJT0NTSUZGTEFHUyIpOwotCQkJCXJldHVybiBQQ0FQX0VSUk9SOwotCQkJfQotCQkJaGFuZGxlcC0+bXVzdF9kb19vbl9jbG9zZSB8PSBNVVNUX0NMRUFSX1BST01JU0M7Ci0KLQkJCS8qCi0JCQkgKiBBZGQgdGhpcyB0byB0aGUgbGlzdCBvZiBwY2FwcwotCQkJICogdG8gY2xvc2Ugd2hlbiB3ZSBleGl0LgotCQkJICovCi0JCQlwY2FwX2FkZF90b19wY2Fwc190b19jbG9zZShoYW5kbGUpOwogCQl9CiAJfQogCi0JLyoKLQkgKiBDb21wdXRlIHRoZSBidWZmZXIgc2l6ZS4KLQkgKgotCSAqIFdlJ3JlIHVzaW5nIFNPQ0tfUEFDS0VULCBzbyB0aGlzIG1pZ2h0IGJlIGEgMi4wWy54XQotCSAqIGtlcm5lbCwgYW5kIG1pZ2h0IHJlcXVpcmUgc3BlY2lhbCBoYW5kbGluZyAtIGNoZWNrLgotCSAqLwotCWlmICh1bmFtZSgmdXRzbmFtZSkgPCAwIHx8Ci0JICAgIHN0cm5jbXAodXRzbmFtZS5yZWxlYXNlLCAiMi4wIiwgMykgPT0gMCkgewotCQkvKgotCQkgKiBFaXRoZXIgd2UgY291bGRuJ3QgZmluZCBvdXQgd2hhdCBrZXJuZWwgcmVsZWFzZQotCQkgKiB0aGlzIGlzLCBvciBpdCdzIGEgMi4wWy54XSBrZXJuZWwuCi0JCSAqCi0JCSAqIEluIHRoZSAyLjBbLnhdIGtlcm5lbCwgYSAicmVjdmZyb20oKSIgb24KLQkJICogYSBTT0NLX1BBQ0tFVCBzb2NrZXQsIHdpdGggTVNHX1RSVU5DIHNldCwgd2lsbAotCQkgKiByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyByZWFkLCBzbyBpZiB3ZSBwYXNzCi0JCSAqIGEgbGVuZ3RoIGJhc2VkIG9uIHRoZSBzbmFwc2hvdCBsZW5ndGgsIGl0J2xsCi0JCSAqIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIHBhY2tldAotCQkgKiBjb3BpZWQgdG8gdXNlcmxhbmQsIG5vdCB0aGUgYWN0dWFsIGxlbmd0aAotCQkgKiBvZiB0aGUgcGFja2V0LgotCQkgKgotCQkgKiBUaGlzIG1lYW5zIHRoYXQsIGZvciBleGFtcGxlLCB0aGUgSVAgZGlzc2VjdG9yCi0JCSAqIGluIHRjcGR1bXAgd2lsbCBnZXQgaGFuZGVkIGEgcGFja2V0IGxlbmd0aCBsZXNzCi0JCSAqIHRoYW4gdGhlIGxlbmd0aCBpbiB0aGUgSVAgaGVhZGVyLCBhbmQgd2lsbAotCQkgKiBjb21wbGFpbiBhYm91dCAidHJ1bmNhdGVkLWlwIi4KLQkJICoKLQkJICogU28gd2UgZG9uJ3QgYm90aGVyIHRyeWluZyB0byBjb3B5IGZyb20gdGhlCi0JCSAqIGtlcm5lbCBvbmx5IHRoZSBieXRlcyBpbiB3aGljaCB3ZSdyZSBpbnRlcmVzdGVkLAotCQkgKiBidXQgaW5zdGVhZCBjb3B5IHRoZW0gYWxsLCBqdXN0IGFzIHRoZSBvbGRlcgotCQkgKiB2ZXJzaW9ucyBvZiBsaWJwY2FwIGZvciBMaW51eCBkaWQuCi0JCSAqCi0JCSAqIFRoZSBidWZmZXIgdGhlcmVmb3JlIG5lZWRzIHRvIGJlIGJpZyBlbm91Z2ggdG8KLQkJICogaG9sZCB0aGUgbGFyZ2VzdCBwYWNrZXQgd2UgY2FuIGdldCBmcm9tIHRoaXMKLQkJICogZGV2aWNlLiAgVW5mb3J0dW5hdGVseSwgd2UgY2FuJ3QgZ2V0IHRoZSBNUlUKLQkJICogb2YgdGhlIG5ldHdvcms7IHdlIGNhbiBvbmx5IGdldCB0aGUgTVRVLiAgVGhlCi0JCSAqIE1UVSBtYXkgYmUgdG9vIHNtYWxsLCBpbiB3aGljaCBjYXNlIGEgcGFja2V0IGxhcmdlcgotCQkgKiB0aGFuIHRoZSBidWZmZXIgc2l6ZSB3aWxsIGJlIHRydW5jYXRlZCAqYW5kKiB3ZQotCQkgKiB3b24ndCBnZXQgdGhlIGFjdHVhbCBwYWNrZXQgc2l6ZS4KLQkJICoKLQkJICogSG93ZXZlciwgaWYgdGhlIHNuYXBzaG90IGxlbmd0aCBpcyBsYXJnZXIgdGhhbgotCQkgKiB0aGUgYnVmZmVyIHNpemUgYmFzZWQgb24gdGhlIE1UVSwgd2UgdXNlIHRoZQotCQkgKiBzbmFwc2hvdCBsZW5ndGggYXMgdGhlIGJ1ZmZlciBzaXplLCBpbnN0ZWFkOwotCQkgKiB0aGlzIG1lYW5zIHRoYXQgd2l0aCBhIHN1ZmZpY2llbnRseSBsYXJnZSBzbmFwc2hvdAotCQkgKiBsZW5ndGggd2Ugd29uJ3QgYXJ0aWZpY2lhbGx5IHRydW5jYXRlIHBhY2tldHMKLQkJICogdG8gdGhlIE1UVS1iYXNlZCBzaXplLgotCQkgKgotCQkgKiBUaGlzIG1lc3MganVzdCBvbmUgb2YgbWFueSBwcm9ibGVtcyB3aXRoIHBhY2tldAotCQkgKiBjYXB0dXJlIG9uIDIuMFsueF0ga2VybmVsczsgeW91IHJlYWxseSB3YW50IGEKLQkJICogMi4yWy54XSBvciBsYXRlciBrZXJuZWwgaWYgeW91IHdhbnQgcGFja2V0IGNhcHR1cmUKLQkJICogdG8gd29yayB3ZWxsLgotCQkgKi8KLQkJbXR1ID0gaWZhY2VfZ2V0X210dShoYW5kbGUtPmZkLCBkZXZpY2UsIGhhbmRsZS0+ZXJyYnVmKTsKLQkJaWYgKG10dSA9PSAtMSkKLQkJCXJldHVybiBQQ0FQX0VSUk9SOwotCQloYW5kbGUtPmJ1ZnNpemUgPSBNQVhfTElOS0hFQURFUl9TSVpFICsgbXR1OwotCQlpZiAoaGFuZGxlLT5idWZzaXplIDwgKHVfaW50KWhhbmRsZS0+c25hcHNob3QpCi0JCQloYW5kbGUtPmJ1ZnNpemUgPSAodV9pbnQpaGFuZGxlLT5zbmFwc2hvdDsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBUaGlzIGlzIGEgMi4yWy54XSBvciBsYXRlciBrZXJuZWwuCi0JCSAqCi0JCSAqIFdlIGNhbiBzYWZlbHkgcGFzcyAicmVjdmZyb20oKSIgYSBieXRlIGNvdW50Ci0JCSAqIGJhc2VkIG9uIHRoZSBzbmFwc2hvdCBsZW5ndGguCi0JCSAqLwotCQloYW5kbGUtPmJ1ZnNpemUgPSAodV9pbnQpaGFuZGxlLT5zbmFwc2hvdDsKLQl9CisJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICAgICJ1bnN1cHBvcnRlZCBEU0EgdGFnOiAlcyIsIGJ1Zik7CiAKLQkvKgotCSAqIERlZmF1bHQgdmFsdWUgZm9yIG9mZnNldCB0byBhbGlnbiBsaW5rLWxheWVyIHBheWxvYWQKLQkgKiBvbiBhIDQtYnl0ZSBib3VuZGFyeS4KLQkgKi8KLQloYW5kbGUtPm9mZnNldAkgPSAwOwotCi0JLyoKLQkgKiBTT0NLX1BBQ0tFVCBzb2NrZXRzIGRvbid0IHN1cHBseSBpbmZvcm1hdGlvbiBmcm9tCi0JICogc3RyaXBwZWQgVkxBTiB0YWdzLgotCSAqLwotCWhhbmRsZXAtPnZsYW5fb2Zmc2V0ID0gLTE7IC8qIHVua25vd24gKi8KLQotCXJldHVybiAxOworCXJldHVybiBQQ0FQX0VSUk9SOwogfQogCiAvKgotICogIEJpbmQgdGhlIHNvY2tldCBhc3NvY2lhdGVkIHdpdGggRkQgdG8gdGhlIGdpdmVuIGRldmljZSB1c2luZyB0aGUKLSAqICBpbnRlcmZhY2Ugb2YgdGhlIG9sZCBrZXJuZWxzLgotICovCi1zdGF0aWMgaW50Ci1pZmFjZV9iaW5kX29sZChpbnQgZmQsIGNvbnN0IGNoYXIgKmRldmljZSwgY2hhciAqZWJ1ZikKLXsKLQlzdHJ1Y3Qgc29ja2FkZHIJc2FkZHI7Ci0JaW50CQllcnI7Ci0Jc29ja2xlbl90CWVycmxlbiA9IHNpemVvZihlcnIpOwotCi0JbWVtc2V0KCZzYWRkciwgMCwgc2l6ZW9mKHNhZGRyKSk7Ci0Jc3RybGNweShzYWRkci5zYV9kYXRhLCBkZXZpY2UsIHNpemVvZihzYWRkci5zYV9kYXRhKSk7Ci0JaWYgKGJpbmQoZmQsICZzYWRkciwgc2l6ZW9mKHNhZGRyKSkgPT0gLTEpIHsKLQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkgICAgZXJybm8sICJiaW5kIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKiBBbnkgcGVuZGluZyBlcnJvcnMsIGUuZy4sIG5ldHdvcmsgaXMgZG93bj8gKi8KLQotCWlmIChnZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19FUlJPUiwgJmVyciwgJmVycmxlbikgPT0gLTEpIHsKLQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkgICAgZXJybm8sICJnZXRzb2Nrb3B0Iik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAoZXJyID4gMCkgewotCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsCi0JCSAgICBlcnIsICJiaW5kIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKiA9PT09PSBTeXN0ZW0gY2FsbHMgYXZhaWxhYmxlIG9uIGFsbCBzdXBwb3J0ZWQga2VybmVscyA9PT09PT09PT09PT09PSAqLwotCi0vKgogICogIFF1ZXJ5IHRoZSBrZXJuZWwgZm9yIHRoZSBNVFUgb2YgdGhlIGdpdmVuIGludGVyZmFjZS4KICAqLwogc3RhdGljIGludApAQCAtNjgyNyw3ICs1MDUzLDcgQEAKIAkJcmV0dXJuIEJJR0dFUl9USEFOX0FMTF9NVFVTOwogCiAJbWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKLQlzdHJsY3B5KGlmci5pZnJfbmFtZSwgZGV2aWNlLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CisJcGNhcF9zdHJsY3B5KGlmci5pZnJfbmFtZSwgZGV2aWNlLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CiAKIAlpZiAoaW9jdGwoZmQsIFNJT0NHSUZNVFUsICZpZnIpID09IC0xKSB7CiAJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKQEAgLTY4NDUsMjggKzUwNzEsMjkgQEAKIGlmYWNlX2dldF9hcnB0eXBlKGludCBmZCwgY29uc3QgY2hhciAqZGV2aWNlLCBjaGFyICplYnVmKQogewogCXN0cnVjdCBpZnJlcQlpZnI7CisJaW50CQlyZXQ7CiAKIAltZW1zZXQoJmlmciwgMCwgc2l6ZW9mKGlmcikpOwotCXN0cmxjcHkoaWZyLmlmcl9uYW1lLCBkZXZpY2UsIHNpemVvZihpZnIuaWZyX25hbWUpKTsKKwlwY2FwX3N0cmxjcHkoaWZyLmlmcl9uYW1lLCBkZXZpY2UsIHNpemVvZihpZnIuaWZyX25hbWUpKTsKIAogCWlmIChpb2N0bChmZCwgU0lPQ0dJRkhXQUREUiwgJmlmcikgPT0gLTEpIHsKLQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkgICAgZXJybm8sICJTSU9DR0lGSFdBRERSIik7CiAJCWlmIChlcnJubyA9PSBFTk9ERVYpIHsKIAkJCS8qCiAJCQkgKiBObyBzdWNoIGRldmljZS4KIAkJCSAqLwotCQkJcmV0dXJuIFBDQVBfRVJST1JfTk9fU1VDSF9ERVZJQ0U7Ci0JCX0KLQkJcmV0dXJuIFBDQVBfRVJST1I7CisJCQlyZXQgPSBQQ0FQX0VSUk9SX05PX1NVQ0hfREVWSUNFOworCQl9IGVsc2UKKwkJCXJldCA9IFBDQVBfRVJST1I7CisJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJICAgIGVycm5vLCAiU0lPQ0dJRkhXQUREUiIpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldHVybiBpZnIuaWZyX2h3YWRkci5zYV9mYW1pbHk7CiB9CiAKLSNpZmRlZiBTT19BVFRBQ0hfRklMVEVSCiBzdGF0aWMgaW50Ci1maXhfcHJvZ3JhbShwY2FwX3QgKmhhbmRsZSwgc3RydWN0IHNvY2tfZnByb2cgKmZjb2RlLCBpbnQgaXNfbW1hcHBlZCkKK2ZpeF9wcm9ncmFtKHBjYXBfdCAqaGFuZGxlLCBzdHJ1Y3Qgc29ja19mcHJvZyAqZmNvZGUpCiB7CiAJc3RydWN0IHBjYXBfbGludXggKmhhbmRsZXAgPSBoYW5kbGUtPnByaXY7CiAJc2l6ZV90IHByb2dfc2l6ZTsKQEAgLTY4OTgsMzkgKzUxMjUsNiBAQAogCQkgKi8KIAkJc3dpdGNoIChCUEZfQ0xBU1MocC0+Y29kZSkpIHsKIAotCQljYXNlIEJQRl9SRVQ6Ci0JCQkvKgotCQkJICogSXQncyBhIHJldHVybiBpbnN0cnVjdGlvbjsgYXJlIHdlIGNhcHR1cmluZwotCQkJICogaW4gbWVtb3J5LW1hcHBlZCBtb2RlPwotCQkJICovCi0JCQlpZiAoIWlzX21tYXBwZWQpIHsKLQkJCQkvKgotCQkJCSAqIE5vOyBpcyB0aGUgc25hcHNob3QgbGVuZ3RoIGEgY29uc3RhbnQsCi0JCQkJICogcmF0aGVyIHRoYW4gdGhlIGNvbnRlbnRzIG9mIHRoZQotCQkJCSAqIGFjY3VtdWxhdG9yPwotCQkJCSAqLwotCQkJCWlmIChCUEZfTU9ERShwLT5jb2RlKSA9PSBCUEZfSykgewotCQkJCQkvKgotCQkJCQkgKiBZZXMgLSBpZiB0aGUgdmFsdWUgdG8gYmUgcmV0dXJuZWQsCi0JCQkJCSAqIGkuZS4gdGhlIHNuYXBzaG90IGxlbmd0aCwgaXMKLQkJCQkJICogYW55dGhpbmcgb3RoZXIgdGhhbiAwLCBtYWtlIGl0Ci0JCQkJCSAqIE1BWElNVU1fU05BUExFTiwgc28gdGhhdCB0aGUgcGFja2V0Ci0JCQkJCSAqIGlzIHRydW5jYXRlZCBieSAicmVjdmZyb20oKSIsCi0JCQkJCSAqIG5vdCBieSB0aGUgZmlsdGVyLgotCQkJCQkgKgotCQkJCQkgKiBYWFggLSB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuCi0JCQkJCSAqIGVhc2lseSBkbyBpZiBpdCdzIGdldHRpbmcgdGhlCi0JCQkJCSAqIHZhbHVlIGZyb20gdGhlIGFjY3VtdWxhdG9yOyB3ZSdkCi0JCQkJCSAqIGhhdmUgdG8gaW5zZXJ0IGNvZGUgdG8gZm9yY2UKLQkJCQkJICogbm9uLXplcm8gdmFsdWVzIHRvIGJlCi0JCQkJCSAqIE1BWElNVU1fU05BUExFTi4KLQkJCQkJICovCi0JCQkJCWlmIChwLT5rICE9IDApCi0JCQkJCQlwLT5rID0gTUFYSU1VTV9TTkFQTEVOOwotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotCiAJCWNhc2UgQlBGX0xEOgogCQljYXNlIEJQRl9MRFg6CiAJCQkvKgpAQCAtNjk1MCw3ICs1MTQ0LDcgQEAKIAkJCQkJICogWWVzLCBzbyB3ZSBuZWVkIHRvIGZpeCB0aGlzCiAJCQkJCSAqIGluc3RydWN0aW9uLgogCQkJCQkgKi8KLQkJCQkJaWYgKGZpeF9vZmZzZXQocCkgPCAwKSB7CisJCQkJCWlmIChmaXhfb2Zmc2V0KGhhbmRsZSwgcCkgPCAwKSB7CiAJCQkJCQkvKgogCQkJCQkJICogV2UgZmFpbGVkIHRvIGRvIHNvLgogCQkJCQkJICogUmV0dXJuIDAsIHNvIG91ciBjYWxsZXIKQEAgLTY5NjgsMzggKzUxNjIsODYgQEAKIH0KIAogc3RhdGljIGludAotZml4X29mZnNldChzdHJ1Y3QgYnBmX2luc24gKnApCitmaXhfb2Zmc2V0KHBjYXBfdCAqaGFuZGxlLCBzdHJ1Y3QgYnBmX2luc24gKnApCiB7CiAJLyoKLQkgKiBXaGF0J3MgdGhlIG9mZnNldD8KKwkgKiBFeGlzdGluZyByZWZlcmVuY2VzIHRvIGF1eGlsaWFyeSBkYXRhIHNob3VsZG4ndCBiZSBhZGp1c3RlZC4KKwkgKgorCSAqIE5vdGUgdGhhdCBTS0ZfQURfT0ZGIGlzIG5lZ2F0aXZlLCBidXQgcC0+ayBpcyB1bnNpZ25lZCwgc28KKwkgKiB3ZSB1c2UgPj0gYW5kIGNhc3QgU0tGX0FEX09GRiB0byB1bnNpZ25lZC4KIAkgKi8KLQlpZiAocC0+ayA+PSBTTExfSERSX0xFTikgeworCWlmIChwLT5rID49IChicGZfdV9pbnQzMilTS0ZfQURfT0ZGKQorCQlyZXR1cm4gMDsKKwlpZiAoaGFuZGxlLT5saW5rdHlwZSA9PSBETFRfTElOVVhfU0xMMikgewogCQkvKgotCQkgKiBJdCdzIHdpdGhpbiB0aGUgbGluay1sYXllciBwYXlsb2FkOyB0aGF0IHN0YXJ0cyBhdCBhbgotCQkgKiBvZmZzZXQgb2YgMCwgYXMgZmFyIGFzIHRoZSBrZXJuZWwgcGFja2V0IGZpbHRlciBpcwotCQkgKiBjb25jZXJuZWQsIHNvIHN1YnRyYWN0IHRoZSBsZW5ndGggb2YgdGhlIGxpbmstbGF5ZXIKLQkJICogaGVhZGVyLgorCQkgKiBXaGF0J3MgdGhlIG9mZnNldD8KIAkJICovCi0JCXAtPmsgLT0gU0xMX0hEUl9MRU47Ci0JfSBlbHNlIGlmIChwLT5rID09IDApIHsKKwkJaWYgKHAtPmsgPj0gU0xMMl9IRFJfTEVOKSB7CisJCQkvKgorCQkJICogSXQncyB3aXRoaW4gdGhlIGxpbmstbGF5ZXIgcGF5bG9hZDsgdGhhdCBzdGFydHMKKwkJCSAqIGF0IGFuIG9mZnNldCBvZiAwLCBhcyBmYXIgYXMgdGhlIGtlcm5lbCBwYWNrZXQKKwkJCSAqIGZpbHRlciBpcyBjb25jZXJuZWQsIHNvIHN1YnRyYWN0IHRoZSBsZW5ndGggb2YKKwkJCSAqIHRoZSBsaW5rLWxheWVyIGhlYWRlci4KKwkJCSAqLworCQkJcC0+ayAtPSBTTEwyX0hEUl9MRU47CisJCX0gZWxzZSBpZiAocC0+ayA9PSAwKSB7CisJCQkvKgorCQkJICogSXQncyB0aGUgcHJvdG9jb2wgZmllbGQ7IG1hcCBpdCB0byB0aGUKKwkJCSAqIHNwZWNpYWwgbWFnaWMga2VybmVsIG9mZnNldCBmb3IgdGhhdCBmaWVsZC4KKwkJCSAqLworCQkJcC0+ayA9IFNLRl9BRF9PRkYgKyBTS0ZfQURfUFJPVE9DT0w7CisJCX0gZWxzZSBpZiAocC0+ayA9PSA0KSB7CisJCQkvKgorCQkJICogSXQncyB0aGUgaWZpbmRleCBmaWVsZDsgbWFwIGl0IHRvIHRoZQorCQkJICogc3BlY2lhbCBtYWdpYyBrZXJuZWwgb2Zmc2V0IGZvciB0aGF0IGZpZWxkLgorCQkJICovCisJCQlwLT5rID0gU0tGX0FEX09GRiArIFNLRl9BRF9JRklOREVYOworCQl9IGVsc2UgaWYgKHAtPmsgPT0gMTApIHsKKwkJCS8qCisJCQkgKiBJdCdzIHRoZSBwYWNrZXQgdHlwZSBmaWVsZDsgbWFwIGl0IHRvIHRoZQorCQkJICogc3BlY2lhbCBtYWdpYyBrZXJuZWwgb2Zmc2V0IGZvciB0aGF0IGZpZWxkLgorCQkJICovCisJCQlwLT5rID0gU0tGX0FEX09GRiArIFNLRl9BRF9QS1RUWVBFOworCQl9IGVsc2UgaWYgKChicGZfaW50MzIpKHAtPmspID4gMCkgeworCQkJLyoKKwkJCSAqIEl0J3Mgd2l0aGluIHRoZSBoZWFkZXIsIGJ1dCBpdCdzIG5vdCBvbmUgb2YKKwkJCSAqIHRob3NlIGZpZWxkczsgd2UgY2FuJ3QgZG8gdGhhdCBpbiB0aGUga2VybmVsLAorCQkJICogc28gcHVudCB0byB1c2VybGFuZC4KKwkJCSAqLworCQkJcmV0dXJuIC0xOworCQl9CisJfSBlbHNlIHsKIAkJLyoKLQkJICogSXQncyB0aGUgcGFja2V0IHR5cGUgZmllbGQ7IG1hcCBpdCB0byB0aGUgc3BlY2lhbCBtYWdpYwotCQkgKiBrZXJuZWwgb2Zmc2V0IGZvciB0aGF0IGZpZWxkLgorCQkgKiBXaGF0J3MgdGhlIG9mZnNldD8KIAkJICovCi0JCXAtPmsgPSBTS0ZfQURfT0ZGICsgU0tGX0FEX1BLVFRZUEU7Ci0JfSBlbHNlIGlmIChwLT5rID09IDE0KSB7Ci0JCS8qCi0JCSAqIEl0J3MgdGhlIHByb3RvY29sIGZpZWxkOyBtYXAgaXQgdG8gdGhlIHNwZWNpYWwgbWFnaWMKLQkJICoga2VybmVsIG9mZnNldCBmb3IgdGhhdCBmaWVsZC4KLQkJICovCi0JCXAtPmsgPSBTS0ZfQURfT0ZGICsgU0tGX0FEX1BST1RPQ09MOwotCX0gZWxzZSBpZiAoKGJwZl9pbnQzMikocC0+aykgPiAwKSB7Ci0JCS8qCi0JCSAqIEl0J3Mgd2l0aGluIHRoZSBoZWFkZXIsIGJ1dCBpdCdzIG5vdCBvbmUgb2YgdGhvc2UKLQkJICogZmllbGRzOyB3ZSBjYW4ndCBkbyB0aGF0IGluIHRoZSBrZXJuZWwsIHNvIHB1bnQKLQkJICogdG8gdXNlcmxhbmQuCi0JCSAqLwotCQlyZXR1cm4gLTE7CisJCWlmIChwLT5rID49IFNMTF9IRFJfTEVOKSB7CisJCQkvKgorCQkJICogSXQncyB3aXRoaW4gdGhlIGxpbmstbGF5ZXIgcGF5bG9hZDsgdGhhdCBzdGFydHMKKwkJCSAqIGF0IGFuIG9mZnNldCBvZiAwLCBhcyBmYXIgYXMgdGhlIGtlcm5lbCBwYWNrZXQKKwkJCSAqIGZpbHRlciBpcyBjb25jZXJuZWQsIHNvIHN1YnRyYWN0IHRoZSBsZW5ndGggb2YKKwkJCSAqIHRoZSBsaW5rLWxheWVyIGhlYWRlci4KKwkJCSAqLworCQkJcC0+ayAtPSBTTExfSERSX0xFTjsKKwkJfSBlbHNlIGlmIChwLT5rID09IDApIHsKKwkJCS8qCisJCQkgKiBJdCdzIHRoZSBwYWNrZXQgdHlwZSBmaWVsZDsgbWFwIGl0IHRvIHRoZQorCQkJICogc3BlY2lhbCBtYWdpYyBrZXJuZWwgb2Zmc2V0IGZvciB0aGF0IGZpZWxkLgorCQkJICovCisJCQlwLT5rID0gU0tGX0FEX09GRiArIFNLRl9BRF9QS1RUWVBFOworCQl9IGVsc2UgaWYgKHAtPmsgPT0gMTQpIHsKKwkJCS8qCisJCQkgKiBJdCdzIHRoZSBwcm90b2NvbCBmaWVsZDsgbWFwIGl0IHRvIHRoZQorCQkJICogc3BlY2lhbCBtYWdpYyBrZXJuZWwgb2Zmc2V0IGZvciB0aGF0IGZpZWxkLgorCQkJICovCisJCQlwLT5rID0gU0tGX0FEX09GRiArIFNLRl9BRF9QUk9UT0NPTDsKKwkJfSBlbHNlIGlmICgoYnBmX2ludDMyKShwLT5rKSA+IDApIHsKKwkJCS8qCisJCQkgKiBJdCdzIHdpdGhpbiB0aGUgaGVhZGVyLCBidXQgaXQncyBub3Qgb25lIG9mCisJCQkgKiB0aG9zZSBmaWVsZHM7IHdlIGNhbid0IGRvIHRoYXQgaW4gdGhlIGtlcm5lbCwKKwkJCSAqIHNvIHB1bnQgdG8gdXNlcmxhbmQuCisJCQkgKi8KKwkJCXJldHVybiAtMTsKKwkJfQogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTcxNTYsNyArNTM5OCw2IEBACiAJCXJldHVybiAtMTsKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZgogCiBpbnQKIHBjYXBfc2V0X3Byb3RvY29sX2xpbnV4KHBjYXBfdCAqcCwgaW50IHByb3RvY29sKQpAQCAtNzE3MywxNSArNTQxNCw5IEBACiBjb25zdCBjaGFyICoKIHBjYXBfbGliX3ZlcnNpb24odm9pZCkKIHsKLSNpZmRlZiBIQVZFX1BBQ0tFVF9SSU5HCi0gI2lmIGRlZmluZWQoSEFWRV9UUEFDS0VUMykKKyNpZiBkZWZpbmVkKEhBVkVfVFBBQ0tFVDMpCiAJcmV0dXJuIChQQ0FQX1ZFUlNJT05fU1RSSU5HICIgKHdpdGggVFBBQ0tFVF9WMykiKTsKLSAjZWxpZiBkZWZpbmVkKEhBVkVfVFBBQ0tFVDIpCi0JcmV0dXJuIChQQ0FQX1ZFUlNJT05fU1RSSU5HICIgKHdpdGggVFBBQ0tFVF9WMikiKTsKLSAjZWxzZQotCXJldHVybiAoUENBUF9WRVJTSU9OX1NUUklORyAiICh3aXRoIFRQQUNLRVRfVjEpIik7Ci0gI2VuZGlmCiAjZWxzZQotCXJldHVybiAoUENBUF9WRVJTSU9OX1NUUklORyAiICh3aXRob3V0IFRQQUNLRVQpIik7CisJcmV0dXJuIChQQ0FQX1ZFUlNJT05fU1RSSU5HICIgKHdpdGggVFBBQ0tFVF9WMikiKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvcGNhcC1uZXRmaWx0ZXItbGludXguYyBiL3BjYXAtbmV0ZmlsdGVyLWxpbnV4LmMKaW5kZXggZDVjNWRjZC4uMTdmNTI4ZiAxMDA2NDQKLS0tIGEvcGNhcC1uZXRmaWx0ZXItbGludXguYworKysgYi9wY2FwLW5ldGZpbHRlci1saW51eC5jCkBAIC01NiwxMyArNTYsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuaD4KIAotLyogTk9URTogaWYgeW91ciBwcm9ncmFtIGRyb3BzIHByaXZpbGFnZXMgYWZ0ZXIgcGNhcF9hY3RpdmF0ZSgpIGl0IFdPTidUIHdvcmsgd2l0aCBuZnF1ZXVlLgorLyogTk9URTogaWYgeW91ciBwcm9ncmFtIGRyb3BzIHByaXZpbGVnZXMgYWZ0ZXIgcGNhcF9hY3RpdmF0ZSgpIGl0IFdPTidUIHdvcmsgd2l0aCBuZnF1ZXVlLgogICogICAgICAgSXQgdG9vayBtZSBxdWl0ZSBzb21lIHRpbWUgdG8gZGVidWcgOy8KICAqCi0gKiAgICAgICBTZW5kaW5nIGFueSBkYXRhIHRvIG5mbmV0bGluayBzb2NrZXQgcmVxdWlyZXMgQ0FQX05FVF9BRE1JTiBwcml2aWxhZ2VzLAorICogICAgICAgU2VuZGluZyBhbnkgZGF0YSB0byBuZm5ldGxpbmsgc29ja2V0IHJlcXVpcmVzIENBUF9ORVRfQURNSU4gcHJpdmlsZWdlcywKICAqICAgICAgIGFuZCBpbiBuZnF1ZXVlIHdlIG5lZWQgdG8gc2VuZCB2ZXJkaWN0IHJlcGx5IGFmdGVyIHJlY3ZpbmcgcGFja2V0LgogICoKLSAqICAgICAgIEluIHRjcGR1bXAgeW91IGNhbiBkaXNhYmxlIGRyb3BwaW5nIHByaXZpbGFnZXMgd2l0aCAtWiByb290CisgKiAgICAgICBJbiB0Y3BkdW1wIHlvdSBjYW4gZGlzYWJsZSBkcm9wcGluZyBwcml2aWxlZ2VzIHdpdGggLVogcm9vdAogICovCiAKICNpbmNsdWRlICJwY2FwLW5ldGZpbHRlci1saW51eC5oIgpAQCAtOTEsNyArOTEsNyBAQAogCXN0cnVjdCBwY2FwX25ldGZpbHRlciAqaGFuZGxlcCA9IGhhbmRsZS0+cHJpdjsKIAlyZWdpc3RlciB1X2NoYXIgKmJwLCAqZXA7CiAJaW50IGNvdW50ID0gMDsKLQlpbnQgbGVuOworCXNzaXplX3QgbGVuOwogCiAJLyoKIAkgKiBIYXMgInBjYXBfYnJlYWtsb29wKCkiIGJlZW4gY2FsbGVkPwpAQCAtMTUyLDE0ICsxNTIsMjUgQEAKIAkJICovCiAJCWlmIChoYW5kbGUtPmJyZWFrX2xvb3ApIHsKIAkJCWhhbmRsZS0+YnAgPSBicDsKLQkJCWhhbmRsZS0+Y2MgPSBlcCAtIGJwOworCQkJaGFuZGxlLT5jYyA9IChpbnQpKGVwIC0gYnApOwogCQkJaWYgKGNvdW50ID09IDApIHsKIAkJCQloYW5kbGUtPmJyZWFrX2xvb3AgPSAwOwogCQkJCXJldHVybiBQQ0FQX0VSUk9SX0JSRUFLOwogCQkJfSBlbHNlCiAJCQkJcmV0dXJuIGNvdW50OwogCQl9Ci0JCWlmIChlcCAtIGJwIDwgTkxNU0dfU1BBQ0UoMCkpIHsKKwkJLyoKKwkJICogTkxNU0dfU1BBQ0UoMCkgbWlnaHQgYmUgc2lnbmVkIG9yIG1pZ2h0IGJlIHVuc2lnbmVkLAorCQkgKiBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUga2VybmVsIGRlZmluZXMgTkxNU0dfQUxJR05UTworCQkgKiBhcyA0LCB3aGljaCBvbGRlciBrZXJuZWxzIGRvLCBvciBhcyA0VSwgd2hpY2ggbmV3ZXIKKwkJICoga2VybmVscyBkby4KKwkJICoKKwkJICogZXAgLSBicCBpcyBvZiB0eXBlIHB0cmRpZmZfdCwgd2hpY2ggaXMgc2lnbmVkLgorCQkgKgorCQkgKiBUbyBzcXVlbGNoIHdhcm5pbmdzLCB3ZSBjYXN0IGJvdGggdG8gc2l6ZV90LCB3aGljaAorCQkgKiBpcyB1bnNpZ25lZDsgZXAgPj0gYnAsIHNvIHRoZSBjYXN0IGlzIHNhZmUuCisJCSAqLworCQlpZiAoKHNpemVfdCkoZXAgLSBicCkgPCAoc2l6ZV90KU5MTVNHX1NQQUNFKDApKSB7CiAJCQkvKgogCQkJICogVGhlcmUncyBsZXNzIHRoYW4gb25lIG5ldGxpbmsgbWVzc2FnZSBsZWZ0CiAJCQkgKiBpbiB0aGUgYnVmZmVyLiAgR2l2ZSB1cC4KQEAgLTE2OCw3ICsxNzksNyBAQAogCQl9CiAKIAkJaWYgKG5saC0+bmxtc2dfbGVuIDwgc2l6ZW9mKHN0cnVjdCBubG1zZ2hkcikgfHwgKHVfaW50KWxlbiA8IG5saC0+bmxtc2dfbGVuKSB7Ci0JCQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiTWVzc2FnZSB0cnVuY2F0ZWQ6IChnb3Q6ICVkKSAobmxtc2dfbGVuOiAldSkiLCBsZW4sIG5saC0+bmxtc2dfbGVuKTsKKwkJCXNucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiTWVzc2FnZSB0cnVuY2F0ZWQ6IChnb3Q6ICV6ZCkgKG5sbXNnX2xlbjogJXUpIiwgbGVuLCBubGgtPm5sbXNnX2xlbik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIApAQCAtMTkwLDcgKzIwMSw3IEBACiAJCQkJY29uc3Qgc3RydWN0IG5mYXR0ciAqcGF5bG9hZF9hdHRyID0gTlVMTDsKIAogCQkJCWlmIChubGgtPm5sbXNnX2xlbiA8IEhEUl9MRU5HVEgpIHsKLQkJCQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIk1hbGZvcm1lZCBtZXNzYWdlOiAobmxtc2dfbGVuOiAldSkiLCBubGgtPm5sbXNnX2xlbik7CisJCQkJCXNucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiTWFsZm9ybWVkIG1lc3NhZ2U6IChubG1zZ19sZW46ICV1KSIsIG5saC0+bmxtc2dfbGVuKTsKIAkJCQkJcmV0dXJuIC0xOwogCQkJCX0KIApAQCAtMjQwLDcgKzI1MSw3IEBACiAKIAkJCQlnZXR0aW1lb2ZkYXkoJnBrdGgudHMsIE5VTEwpOwogCQkJCWlmIChoYW5kbGUtPmZjb2RlLmJmX2luc25zID09IE5VTEwgfHwKLQkJCQkJCWJwZl9maWx0ZXIoaGFuZGxlLT5mY29kZS5iZl9pbnNucywgcGF5bG9hZCwgcGt0aC5sZW4sIHBrdGguY2FwbGVuKSkKKwkJCQkJCXBjYXBfZmlsdGVyKGhhbmRsZS0+ZmNvZGUuYmZfaW5zbnMsIHBheWxvYWQsIHBrdGgubGVuLCBwa3RoLmNhcGxlbikpCiAJCQkJewogCQkJCQloYW5kbGVwLT5wYWNrZXRzX3JlYWQrKzsKIAkJCQkJY2FsbGJhY2sodXNlciwgJnBrdGgsIHBheWxvYWQpOwpAQCAtMjYyLDE0ICsyNzMsMjEgQEAKIAkJICogSWYgdGhlIG1lc3NhZ2UgbGVuZ3RoIHdvdWxkIHJ1biBwYXN0IHRoZSBlbmQgb2YgdGhlCiAJCSAqIGJ1ZmZlciwgdHJ1bmNhdGUgaXQgdG8gdGhlIHJlbWFpbmluZyBzcGFjZSBpbiB0aGUKIAkJICogYnVmZmVyLgorCQkgKgorCQkgKiBUbyBzcXVlbGNoIHdhcm5pbmdzLCB3ZSBjYXN0IGVwIC0gYnAgdG8gdWludDMyX3QsIHdoaWNoCisJCSAqIGlzIHVuc2lnbmVkIGFuZCBpcyB0aGUgdHlwZSBvZiBtc2dfbGVuOyBlcCA+PSBicCwgYW5kCisJCSAqIGxlbiBzaG91bGQgZml0IGluIDMyIGJpdHMgKGVpdGhlciBpdCdzIHNldCBmcm9tIGFuIGludAorCQkgKiBvciBpdCdzIHNldCBmcm9tIGEgcmVjdigpIGNhbGwgd2l0aCBhIGJ1ZmZlciBzaXplIHRoYXQncworCQkgKiBhbiBpbnQsIGFuZCB3ZSdyZSBhc3N1bWluZyBlaXRoZXIgSUxQMzIgb3IgTFA2NCksIHNvCisJCSAqIHRoZSBjYXN0IGlzIHNhZmUuCiAJCSAqLwotCQlpZiAobXNnX2xlbiA+IGVwIC0gYnApCi0JCQltc2dfbGVuID0gZXAgLSBicDsKKwkJaWYgKG1zZ19sZW4gPiAodWludDMyX3QpKGVwIC0gYnApKQorCQkJbXNnX2xlbiA9ICh1aW50MzJfdCkoZXAgLSBicCk7CiAKIAkJYnAgKz0gbXNnX2xlbjsKIAkJaWYgKGNvdW50ID49IG1heF9wYWNrZXRzICYmICFQQUNLRVRfQ09VTlRfSVNfVU5MSU1JVEVEKG1heF9wYWNrZXRzKSkgewogCQkJaGFuZGxlLT5icCA9IGJwOwotCQkJaGFuZGxlLT5jYyA9IGVwIC0gYnA7CisJCQloYW5kbGUtPmNjID0gKGludCkoZXAgLSBicCk7CiAJCQlpZiAoaGFuZGxlLT5jYyA8IDApCiAJCQkJaGFuZGxlLT5jYyA9IDA7CiAJCQlyZXR1cm4gY291bnQ7CkBAIC0yOTksOSArMzE3LDEwIEBACiB9CiAKIHN0YXRpYyBpbnQKLW5ldGZpbHRlcl9pbmplY3RfbGludXgocGNhcF90ICpoYW5kbGUsIGNvbnN0IHZvaWQgKmJ1ZiBfVV8sIHNpemVfdCBzaXplIF9VXykKK25ldGZpbHRlcl9pbmplY3RfbGludXgocGNhcF90ICpoYW5kbGUsIGNvbnN0IHZvaWQgKmJ1ZiBfVV8sIGludCBzaXplIF9VXykKIHsKLQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiaW5qZWN0IG5vdCBzdXBwb3J0ZWQgb24gbmV0ZmlsdGVyIGRldmljZXMiKTsKKwlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkgICAgIlBhY2tldCBpbmplY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBvbiBuZXRmaWx0ZXIgZGV2aWNlcyIpOwogCXJldHVybiAoLTEpOwogfQogCkBAIC0zMTUsNiArMzM0LDcgQEAKIG5ldGZpbHRlcl9zZW5kX2NvbmZpZ19tc2coY29uc3QgcGNhcF90ICpoYW5kbGUsIHVpbnQxNl90IG1zZ190eXBlLCBpbnQgYWNrLCB1X2ludDhfdCBmYW1pbHksIHVfaW50MTZfdCByZXNfaWQsIGNvbnN0IHN0cnVjdCBteV9uZmF0dHIgKm15bmZhKQogewogCWNoYXIgYnVmWzEwMjRdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkKSk7CisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwogCiAJc3RydWN0IG5sbXNnaGRyICpubGggPSAoc3RydWN0IG5sbXNnaGRyICopIGJ1ZjsKIAlzdHJ1Y3QgbmZnZW5tc2cgKm5mZyA9IChzdHJ1Y3QgbmZnZW5tc2cgKikgKGJ1ZiArIHNpemVvZihzdHJ1Y3Qgbmxtc2doZHIpKTsKQEAgLTM2MSw3ICszODEsMTEgQEAKIAogCQkvKiBpZ25vcmUgaW50ZXJydXB0IHN5c3RlbSBjYWxsIGVycm9yICovCiAJCWRvIHsKLQkJCWxlbiA9IHJlY3Zmcm9tKGhhbmRsZS0+ZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDAsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNubCwgJmFkZHJsZW4pOworCQkJLyoKKwkJCSAqIFRoZSBidWZmZXIgaXMgbm90IHNvIGJpZyB0aGF0IGl0cyBzaXplIHdvbid0CisJCQkgKiBmaXQgaW50byBhbiBpbnQuCisJCQkgKi8KKwkJCWxlbiA9IChpbnQpcmVjdmZyb20oaGFuZGxlLT5mZCwgYnVmLCBzaXplb2YoYnVmKSwgMCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmc25sLCAmYWRkcmxlbik7CiAJCX0gd2hpbGUgKChsZW4gPT0gLTEpICYmIChlcnJubyA9PSBFSU5UUikpOwogCiAJCWlmIChsZW4gPD0gMCkKQEAgLTUwOCw3ICs1MzIsNyBAQAogCQkJY2hhciAqZW5kX2RldjsKIAogCQkJaWYgKGdyb3VwX2NvdW50ID09IDMyKSB7Ci0JCQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCQkJCSJNYXhpbXVtIDMyIG5ldGZpbHRlciBncm91cHMhIGRldjogJXMiLAogCQkJCQkJaGFuZGxlLT5vcHQuZGV2aWNlKTsKIAkJCQlyZXR1cm4gUENBUF9FUlJPUjsKQEAgLTUxNyw3ICs1NDEsNyBAQAogCQkJZ3JvdXBfaWQgPSBzdHJ0b2woZGV2LCAmZW5kX2RldiwgMCk7CiAJCQlpZiAoZW5kX2RldiAhPSBkZXYpIHsKIAkJCQlpZiAoZ3JvdXBfaWQgPCAwIHx8IGdyb3VwX2lkID4gNjU1MzUpIHsKLQkJCQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkJCQkJIk5ldGZpbHRlciBncm91cCByYW5nZSBmcm9tIDAgdG8gNjU1MzUgKGdvdCAlbGQpIiwKIAkJCQkJCQlncm91cF9pZCk7CiAJCQkJCXJldHVybiBQQ0FQX0VSUk9SOwpAQCAtNTMzLDcgKzU1Nyw3IEBACiAJfQogCiAJaWYgKHR5cGUgPT0gT1RIRVIgfHwgKmRldikgewotCQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCQkiQ2FuJ3QgZ2V0IG5ldGZpbHRlciBncm91cChzKSBpbmRleCBmcm9tICVzIiwKIAkJCQloYW5kbGUtPm9wdC5kZXZpY2UpOwogCQlyZXR1cm4gUENBUF9FUlJPUjsKQEAgLTYxNCw3ICs2MzgsNyBAQAogCQkJaWYgKG5mbG9nX3NlbmRfY29uZmlnX2NtZChoYW5kbGUsIGdyb3Vwc1tpXSwgTkZVTE5MX0NGR19DTURfQklORCwgQUZfVU5TUEVDKSA8IDApIHsKIAkJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGhhbmRsZS0+ZXJyYnVmLAogCQkJCSAgICBQQ0FQX0VSUkJVRl9TSVpFLCBlcnJubywKLQkJCQkgICAgIkNhbid0IGxpc3RlbiBvbiBncm91cCBncm91cCBpbmRleCIpOworCQkJCSAgICAiQ2FuJ3QgbGlzdGVuIG9uIGdyb3VwIGluZGV4Iik7CiAJCQkJZ290byBjbG9zZV9mYWlsOwogCQkJfQogCkBAIC02NDQsNyArNjY4LDcgQEAKIAkJCWlmIChuZnF1ZXVlX3NlbmRfY29uZmlnX2NtZChoYW5kbGUsIGdyb3Vwc1tpXSwgTkZRTkxfQ0ZHX0NNRF9CSU5ELCBBRl9VTlNQRUMpIDwgMCkgewogCQkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oaGFuZGxlLT5lcnJidWYsCiAJCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsIGVycm5vLAotCQkJCSAgICAiQ2FuJ3QgbGlzdGVuIG9uIGdyb3VwIGdyb3VwIGluZGV4Iik7CisJCQkJICAgICJDYW4ndCBsaXN0ZW4gb24gZ3JvdXAgaW5kZXgiKTsKIAkJCQlnb3RvIGNsb3NlX2ZhaWw7CiAJCQl9CiAKQEAgLTcxOSw3ICs3NDMsNyBAQAogCS8qIE9LLCBpdCdzIHByb2JhYmx5IG91cnMuICovCiAJKmlzX291cnMgPSAxOwogCi0JcCA9IHBjYXBfY3JlYXRlX2NvbW1vbihlYnVmLCBzaXplb2YgKHN0cnVjdCBwY2FwX25ldGZpbHRlcikpOworCXAgPSBQQ0FQX0NSRUFURV9DT01NT04oZWJ1Ziwgc3RydWN0IHBjYXBfbmV0ZmlsdGVyKTsKIAlpZiAocCA9PSBOVUxMKQogCQlyZXR1cm4gKE5VTEwpOwogCmRpZmYgLS1naXQgYS9wY2FwLW5ldG1hcC5jIGIvcGNhcC1uZXRtYXAuYwppbmRleCBmMTUwNTYzLi4yN2QzNmU1IDEwMDY0NAotLS0gYS9wY2FwLW5ldG1hcC5jCisrKyBiL3BjYXAtbmV0bWFwLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8cG9sbC5oPgotI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxuZXRkYi5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC02Nyw3ICs2Niw3IEBACiB7CiAJc3RydWN0IHBjYXBfbmV0bWFwICpwbiA9IHAtPnByaXY7CiAKLQlwcy0+cHNfcmVjdiA9IHBuLT5yeF9wa3RzOworCXBzLT5wc19yZWN2ID0gKHVfaW50KXBuLT5yeF9wa3RzOwogCXBzLT5wc19kcm9wID0gMDsKIAlwcy0+cHNfaWZkcm9wID0gMDsKIAlyZXR1cm4gMDsKQEAgLTgyLDcgKzgxLDcgQEAKIAljb25zdCBzdHJ1Y3QgYnBmX2luc24gKnBjID0gcC0+ZmNvZGUuYmZfaW5zbnM7CiAKIAkrK3BuLT5yeF9wa3RzOwotCWlmIChwYyA9PSBOVUxMIHx8IGJwZl9maWx0ZXIocGMsIGJ1ZiwgaC0+bGVuLCBoLT5jYXBsZW4pKQorCWlmIChwYyA9PSBOVUxMIHx8IHBjYXBfZmlsdGVyKHBjLCBidWYsIGgtPmxlbiwgaC0+Y2FwbGVuKSkKIAkJcG4tPmNiKHBuLT5jYl9hcmcsIGgsIGJ1Zik7CiB9CiAKQEAgLTExNyw3ICsxMTYsNyBAQAogCiAvKiBYWFggbmVlZCB0byBjaGVjayB0aGUgTklPQ1RYU1lOQy9wb2xsICovCiBzdGF0aWMgaW50Ci1wY2FwX25ldG1hcF9pbmplY3QocGNhcF90ICpwLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplKQorcGNhcF9uZXRtYXBfaW5qZWN0KHBjYXBfdCAqcCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgc2l6ZSkKIHsKIAlzdHJ1Y3QgcGNhcF9uZXRtYXAgKnBuID0gcC0+cHJpdjsKIAlzdHJ1Y3Qgbm1fZGVzYyAqZCA9IHBuLT5kOwpAQCAtMjg3LDcgKzI4Niw3IEBACiAJKmlzX291cnMgPSAoIXN0cm5jbXAoZGV2aWNlLCAibmV0bWFwOiIsIDcpIHx8ICFzdHJuY21wKGRldmljZSwgInZhbGUiLCA0KSk7CiAJaWYgKCEgKmlzX291cnMpCiAJCXJldHVybiBOVUxMOwotCXAgPSBwY2FwX2NyZWF0ZV9jb21tb24oZWJ1Ziwgc2l6ZW9mIChzdHJ1Y3QgcGNhcF9uZXRtYXApKTsKKwlwID0gUENBUF9DUkVBVEVfQ09NTU9OKGVidWYsIHN0cnVjdCBwY2FwX25ldG1hcCk7CiAJaWYgKHAgPT0gTlVMTCkKIAkJcmV0dXJuIChOVUxMKTsKIAlwLT5hY3RpdmF0ZV9vcCA9IHBjYXBfbmV0bWFwX2FjdGl2YXRlOwpkaWZmIC0tZ2l0IGEvcGNhcC1uZXcuYyBiL3BjYXAtbmV3LmMKaW5kZXggNmZhNTJlNi4uN2MwMDY1OSAxMDA2NDQKLS0tIGEvcGNhcC1uZXcuYworKysgYi9wY2FwLW5ldy5jCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgImZ0bWFjcm9zLmgiCisKIC8qCiAgKiBzb2NrdXRpbHMuaCBtYXkgaW5jbHVkZSA8Y3J0ZGJnLmg+IG9uIFdpbmRvd3MsIGFuZCBwY2FwLWludC5oIHdpbGwKICAqIGluY2x1ZGUgcG9ydGFiaWxpdHkuaCwgYW5kIHBvcnRhYmlsaXR5LmgsIG9uIFdpbmRvd3MsIGV4cGVjdHMgdGhhdApAQCAtNTQsMTEgKzU2LDE0IEBACiAKIC8qIFN0cmluZyBpZGVudGlmaWVyIHRvIGJlIHVzZWQgaW4gdGhlIHBjYXBfZmluZGFsbGRldnNfZXgoKSAqLwogI2RlZmluZSBQQ0FQX1RFWFRfU09VUkNFX0ZJTEUgIkZpbGUiCisjZGVmaW5lIFBDQVBfVEVYVF9TT1VSQ0VfRklMRV9MRU4gKHNpemVvZiBQQ0FQX1RFWFRfU09VUkNFX0ZJTEUgLSAxKQogLyogU3RyaW5nIGlkZW50aWZpZXIgdG8gYmUgdXNlZCBpbiB0aGUgcGNhcF9maW5kYWxsZGV2c19leCgpICovCiAjZGVmaW5lIFBDQVBfVEVYVF9TT1VSQ0VfQURBUFRFUiAiTmV0d29yayBhZGFwdGVyIgorI2RlZmluZSBQQ0FQX1RFWFRfU09VUkNFX0FEQVBURVJfTEVOIChzaXplb2YgIk5ldHdvcmsgYWRhcHRlciIgLSAxKQogCiAvKiBTdHJpbmcgaWRlbnRpZmllciB0byBiZSB1c2VkIGluIHRoZSBwY2FwX2ZpbmRhbGxkZXZzX2V4KCkgKi8KICNkZWZpbmUgUENBUF9URVhUX1NPVVJDRV9PTl9MT0NBTF9IT1NUICJvbiBsb2NhbCBob3N0IgorI2RlZmluZSBQQ0FQX1RFWFRfU09VUkNFX09OX0xPQ0FMX0hPU1RfTEVOIChzaXplb2YgUENBUF9URVhUX1NPVVJDRV9PTl9MT0NBTF9IT1NUICsgMSkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC02NiwxMCArNzEsMTIgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotaW50IHBjYXBfZmluZGFsbGRldnNfZXgoY2hhciAqc291cmNlLCBzdHJ1Y3QgcGNhcF9ybXRhdXRoICphdXRoLCBwY2FwX2lmX3QgKiphbGxkZXZzLCBjaGFyICplcnJidWYpCitpbnQgcGNhcF9maW5kYWxsZGV2c19leChjb25zdCBjaGFyICpzb3VyY2UsIHN0cnVjdCBwY2FwX3JtdGF1dGggKmF1dGgsIHBjYXBfaWZfdCAqKmFsbGRldnMsIGNoYXIgKmVycmJ1ZikKIHsKIAlpbnQgdHlwZTsKIAljaGFyIG5hbWVbUENBUF9CVUZfU0laRV0sIHBhdGhbUENBUF9CVUZfU0laRV0sIGZpbGVuYW1lW1BDQVBfQlVGX1NJWkVdOworCXNpemVfdCBwYXRobGVuOworCXNpemVfdCBzdHJpbmdsZW47CiAJcGNhcF90ICpmcDsKIAljaGFyIHRtcHN0cmluZ1tQQ0FQX0JVRl9TSVpFICsgMV07CQkvKiBOZWVkZWQgdG8gY29udmVydCBuYW1lcyBhbmQgZGVzY3JpcHRpb25zIGZyb20gJ29sZCcgc3ludGF4IHRvIHRoZSAnbmV3JyBvbmUgKi8KIAlwY2FwX2lmX3QgKmxhc3RkZXY7CS8qIExhc3QgZGV2aWNlIGluIHRoZSBwY2FwX2lmX3QgbGlzdCAqLwpAQCAtODEsNyArODgsNyBAQAogCiAJaWYgKHN0cmxlbihzb3VyY2UpID4gUENBUF9CVUZfU0laRSkKIAl7Ci0JCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiVGhlIHNvdXJjZSBzdHJpbmcgaXMgdG9vIGxvbmcuIENhbm5vdCBoYW5kbGUgaXQgY29ycmVjdGx5LiIpOworCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJUaGUgc291cmNlIHN0cmluZyBpcyB0b28gbG9uZy4gQ2Fubm90IGhhbmRsZSBpdCBjb3JyZWN0bHkuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTExMiw4ICsxMTksOCBAQAogCiAJCWlmICgqYWxsZGV2cyA9PSBOVUxMKQogCQl7Ci0JCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJCQkiTm8gaW50ZXJmYWNlcyBmb3VuZCEgTWFrZSBzdXJlIGxpYnBjYXAvV2luUGNhcCBpcyBwcm9wZXJseSBpbnN0YWxsZWQiCisJCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkJIk5vIGludGVyZmFjZXMgZm91bmQhIE1ha2Ugc3VyZSBsaWJwY2FwL05wY2FwIGlzIHByb3Blcmx5IGluc3RhbGxlZCIKIAkJCQkiIG9uIHRoZSBsb2NhbCBtYWNoaW5lLiIpOwogCQkJcmV0dXJuIC0xOwogCQl9CkBAIC0xMjMsNiArMTMwLDggQEAKIAkJZGV2ID0gKmFsbGRldnM7CiAJCXdoaWxlIChkZXYpCiAJCXsKKwkJCWNoYXIgKmxvY2FsZGVzYywgKmRlc2M7CisKIAkJCS8qIENyZWF0ZSB0aGUgbmV3IGRldmljZSBpZGVudGlmaWVyICovCiAJCQlpZiAocGNhcF9jcmVhdGVzcmNzdHIodG1wc3RyaW5nLCBQQ0FQX1NSQ19JRkxPQ0FMLCBOVUxMLCBOVUxMLCBkZXYtPm5hbWUsIGVycmJ1ZikgPT0gLTEpCiAJCQkJcmV0dXJuIC0xOwpAQCAtMTQxLDIwICsxNTAsMTYgQEAKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAKLQkJCS8qIENyZWF0ZSB0aGUgbmV3IGRldmljZSBkZXNjcmlwdGlvbiAqLworCQkJLyoKKwkJCSAqIENyZWF0ZSB0aGUgZGVzY3JpcHRpb24uCisJCQkgKi8KIAkJCWlmICgoZGV2LT5kZXNjcmlwdGlvbiA9PSBOVUxMKSB8fCAoZGV2LT5kZXNjcmlwdGlvblswXSA9PSAwKSkKLQkJCQlwY2FwX3NucHJpbnRmKHRtcHN0cmluZywgc2l6ZW9mKHRtcHN0cmluZykgLSAxLCAiJXMgJyVzJyAlcyIsIFBDQVBfVEVYVF9TT1VSQ0VfQURBUFRFUiwKLQkJCQlkZXYtPm5hbWUsIFBDQVBfVEVYVF9TT1VSQ0VfT05fTE9DQUxfSE9TVCk7CisJCQkJbG9jYWxkZXNjID0gZGV2LT5uYW1lOwogCQkJZWxzZQotCQkJCXBjYXBfc25wcmludGYodG1wc3RyaW5nLCBzaXplb2YodG1wc3RyaW5nKSAtIDEsICIlcyAnJXMnICVzIiwgUENBUF9URVhUX1NPVVJDRV9BREFQVEVSLAotCQkJCWRldi0+ZGVzY3JpcHRpb24sIFBDQVBfVEVYVF9TT1VSQ0VfT05fTE9DQUxfSE9TVCk7Ci0KLQkJCS8qIERlbGV0ZSB0aGUgb2xkIHBvaW50ZXIgKi8KLQkJCWZyZWUoZGV2LT5kZXNjcmlwdGlvbik7Ci0KLQkJCS8qIE1ha2UgYSBjb3B5IG9mIHRoZSBkZXNjcmlwdGlvbiAqLwotCQkJZGV2LT5kZXNjcmlwdGlvbiA9IHN0cmR1cCh0bXBzdHJpbmcpOwotCQkJaWYgKGRldi0+ZGVzY3JpcHRpb24gPT0gTlVMTCkKKwkJCQlsb2NhbGRlc2MgPSBkZXYtPmRlc2NyaXB0aW9uOworCQkJaWYgKHBjYXBfYXNwcmludGYoJmRlc2MsICIlcyAnJXMnICVzIiwKKwkJCSAgICBQQ0FQX1RFWFRfU09VUkNFX0FEQVBURVIsIGxvY2FsZGVzYywKKwkJCSAgICBQQ0FQX1RFWFRfU09VUkNFX09OX0xPQ0FMX0hPU1QpID09IC0xKQogCQkJewogCQkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZXJyYnVmLAogCQkJCSAgICBQQ0FQX0VSUkJVRl9TSVpFLCBlcnJubywKQEAgLTE2Myw2ICsxNjgsMTAgQEAKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAKKwkJCS8qIE5vdyBvdmVyd3JpdGUgdGhlIGRlc2NyaXB0aW9uICovCisJCQlmcmVlKGRldi0+ZGVzY3JpcHRpb24pOworCQkJZGV2LT5kZXNjcmlwdGlvbiA9IGRlc2M7CisKIAkJCWRldiA9IGRldi0+bmV4dDsKIAkJfQogCkBAIC0xNzAsNyArMTc5LDYgQEAKIAogCWNhc2UgUENBUF9TUkNfRklMRToKIAl7Ci0JCXNpemVfdCBzdHJpbmdsZW47CiAjaWZkZWYgX1dJTjMyCiAJCVdJTjMyX0ZJTkRfREFUQSBmaWxlZGF0YTsKIAkJSEFORExFIGZpbGVoYW5kbGU7CkBAIC0yMDEsNyArMjA5LDggQEAKIAkJfQogCiAJCS8qIFNhdmUgdGhlIHBhdGggZm9yIGZ1dHVyZSByZWZlcmVuY2UgKi8KLQkJcGNhcF9zbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcyIsIG5hbWUpOworCQlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcyIsIG5hbWUpOworCQlwYXRobGVuID0gc3RybGVuKHBhdGgpOwogCiAjaWZkZWYgX1dJTjMyCiAJCS8qIFRvIHBlcmZvcm0gZGlyZWN0b3J5IGxpc3RpbmcsIFdpbjMyIG11c3QgaGF2ZSBhbiAnYXN0ZXJpc2snIGFzIGVuZGluZyBjaGFyICovCkBAIC0yMTUsNyArMjI0LDcgQEAKIAogCQlpZiAoZmlsZWhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKIAkJewotCQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJFcnJvciB3aGVuIGxpc3RpbmcgZmlsZXM6IGRvZXMgZm9sZGVyICclcycgZXhpc3Q/IiwgcGF0aCk7CisJCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJFcnJvciB3aGVuIGxpc3RpbmcgZmlsZXM6IGRvZXMgZm9sZGVyICclcycgZXhpc3Q/IiwgcGF0aCk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIApAQCAtMjI4LDcgKzIzNyw3IEBACiAKIAkJaWYgKGZpbGVkYXRhID09IE5VTEwpCiAJCXsKLQkJCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiRXJyb3Igd2hlbiBsaXN0aW5nIGZpbGVzOiBkb2VzIGZvbGRlciAnJXMnIGV4aXN0PyIsIHBhdGgpOworCQkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiRXJyb3Igd2hlbiBsaXN0aW5nIGZpbGVzOiBkb2VzIGZvbGRlciAnJXMnIGV4aXN0PyIsIHBhdGgpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAjZW5kaWYKQEAgLTIzNiwxMSArMjQ1LDE1IEBACiAJCS8qIEFkZCBhbGwgZmlsZXMgd2UgZmluZCB0byB0aGUgbGlzdC4gKi8KIAkJZG8KIAkJewotCiAjaWZkZWYgX1dJTjMyCi0JCQlwY2FwX3NucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMlcyIsIHBhdGgsIGZpbGVkYXRhLmNGaWxlTmFtZSk7CisJCQkvKiBTa2lwIHRoZSBmaWxlIGlmIHRoZSBwYXRobmFtZSB3b24ndCBmaXQgaW4gdGhlIGJ1ZmZlciAqLworCQkJaWYgKHBhdGhsZW4gKyBzdHJsZW4oZmlsZWRhdGEuY0ZpbGVOYW1lKSA+PSBzaXplb2YoZmlsZW5hbWUpKQorCQkJCWNvbnRpbnVlOworCQkJc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIlcyVzIiwgcGF0aCwgZmlsZWRhdGEuY0ZpbGVOYW1lKTsKICNlbHNlCi0JCQlwY2FwX3NucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMlcyIsIHBhdGgsIGZpbGVkYXRhLT5kX25hbWUpOworCQkJaWYgKHBhdGhsZW4gKyBzdHJsZW4oZmlsZWRhdGEtPmRfbmFtZSkgPj0gc2l6ZW9mKGZpbGVuYW1lKSkKKwkJCQljb250aW51ZTsKKwkJCXNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMlcyIsIHBhdGgsIGZpbGVkYXRhLT5kX25hbWUpOwogI2VuZGlmCiAKIAkJCWZwID0gcGNhcF9vcGVuX29mZmxpbmUoZmlsZW5hbWUsIGVycmJ1Zik7CkBAIC0yODcsOSArMzAwLDcgQEAKIAkJCQkJcmV0dXJuIC0xOwogCQkJCX0KIAotCQkJCXN0cmluZ2xlbiA9IHN0cmxlbih0bXBzdHJpbmcpOwotCi0JCQkJZGV2LT5uYW1lID0gKGNoYXIgKiltYWxsb2Moc3RyaW5nbGVuICsgMSk7CisJCQkJZGV2LT5uYW1lID0gc3RyZHVwKHRtcHN0cmluZyk7CiAJCQkJaWYgKGRldi0+bmFtZSA9PSBOVUxMKQogCQkJCXsKIAkJCQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhlcnJidWYsCkBAIC0yOTksMTkgKzMxMCwxMiBAQAogCQkJCQlyZXR1cm4gLTE7CiAJCQkJfQogCi0JCQkJc3RybGNweShkZXYtPm5hbWUsIHRtcHN0cmluZywgc3RyaW5nbGVuKTsKLQotCQkJCWRldi0+bmFtZVtzdHJpbmdsZW5dID0gMDsKLQotCQkJCS8qIENyZWF0ZSB0aGUgZGVzY3JpcHRpb24gKi8KLQkJCQlwY2FwX3NucHJpbnRmKHRtcHN0cmluZywgc2l6ZW9mKHRtcHN0cmluZykgLSAxLCAiJXMgJyVzJyAlcyIsIFBDQVBfVEVYVF9TT1VSQ0VfRklMRSwKLQkJCQkJZmlsZW5hbWUsIFBDQVBfVEVYVF9TT1VSQ0VfT05fTE9DQUxfSE9TVCk7Ci0KLQkJCQlzdHJpbmdsZW4gPSBzdHJsZW4odG1wc3RyaW5nKTsKLQotCQkJCWRldi0+ZGVzY3JpcHRpb24gPSAoY2hhciAqKW1hbGxvYyhzdHJpbmdsZW4gKyAxKTsKLQotCQkJCWlmIChkZXYtPmRlc2NyaXB0aW9uID09IE5VTEwpCisJCQkJLyoKKwkJCQkgKiBDcmVhdGUgdGhlIGRlc2NyaXB0aW9uLgorCQkJCSAqLworCQkJCWlmIChwY2FwX2FzcHJpbnRmKCZkZXYtPmRlc2NyaXB0aW9uLAorCQkJCSAgICAiJXMgJyVzJyAlcyIsIFBDQVBfVEVYVF9TT1VSQ0VfRklMRSwKKwkJCQkgICAgZmlsZW5hbWUsIFBDQVBfVEVYVF9TT1VSQ0VfT05fTE9DQUxfSE9TVCkgPT0gLTEpCiAJCQkJewogCQkJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVycmJ1ZiwKIAkJCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsIGVycm5vLApAQCAtMzIwLDkgKzMyNCw2IEBACiAJCQkJCXJldHVybiAtMTsKIAkJCQl9CiAKLQkJCQkvKiBDb3B5IHRoZSBuZXcgZGV2aWNlIGRlc2NyaXB0aW9uIGludG8gdGhlIGNvcnJlY3QgbWVtb3J5IGxvY2F0aW9uICovCi0JCQkJc3RybGNweShkZXYtPmRlc2NyaXB0aW9uLCB0bXBzdHJpbmcsIHN0cmluZ2xlbiArIDEpOwotCiAJCQkJcGNhcF9jbG9zZShmcCk7CiAJCQl9CiAJCX0KQEAgLTM0NSw3ICszNDYsNyBAQAogCQlyZXR1cm4gcGNhcF9maW5kYWxsZGV2c19leF9yZW1vdGUoc291cmNlLCBhdXRoLCBhbGxkZXZzLCBlcnJidWYpOwogCiAJZGVmYXVsdDoKLQkJc3RybGNweShlcnJidWYsICJTb3VyY2UgdHlwZSBub3Qgc3VwcG9ydGVkIiwgUENBUF9FUlJCVUZfU0laRSk7CisJCXBjYXBfc3RybGNweShlcnJidWYsICJTb3VyY2UgdHlwZSBub3Qgc3VwcG9ydGVkIiwgUENBUF9FUlJCVUZfU0laRSk7CiAJCXJldHVybiAtMTsKIAl9CiB9CkBAIC0zNTcsOSArMzU4LDE5IEBACiAJcGNhcF90ICpmcDsKIAlpbnQgc3RhdHVzOwogCisJLyoKKwkgKiBBIG51bGwgZGV2aWNlIG5hbWUgaXMgZXF1aXZhbGVudCB0byB0aGUgImFueSIgZGV2aWNlIC0KKwkgKiB3aGljaCBtaWdodCBub3QgYmUgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0sIGJ1dAorCSAqIHRoaXMgbWVhbnMgdGhhdCB5b3UnbGwgZ2V0IGEgIm5vdCBzdXBwb3J0ZWQiIGVycm9yCisJICogcmF0aGVyIHRoYW4sIHNheSwgYSBjcmFzaCB3aGVuIHdlIHRyeSB0byBkZXJlZmVyZW5jZQorCSAqIHRoZSBudWxsIHBvaW50ZXIuCisJICovCisJaWYgKHNvdXJjZSA9PSBOVUxMKQorCQlzb3VyY2UgPSAiYW55IjsKKwogCWlmIChzdHJsZW4oc291cmNlKSA+IFBDQVBfQlVGX1NJWkUpCiAJewotCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlRoZSBzb3VyY2Ugc3RyaW5nIGlzIHRvbyBsb25nLiBDYW5ub3QgaGFuZGxlIGl0IGNvcnJlY3RseS4iKTsKKwkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiVGhlIHNvdXJjZSBzdHJpbmcgaXMgdG9vIGxvbmcuIENhbm5vdCBoYW5kbGUgaXQgY29ycmVjdGx5LiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTM4OSw3ICs0MDAsNyBAQAogCQlyZXR1cm4gcGNhcF9vcGVuX3JwY2FwKHNvdXJjZSwgc25hcGxlbiwgZmxhZ3MsIHJlYWRfdGltZW91dCwgYXV0aCwgZXJyYnVmKTsKIAogCWRlZmF1bHQ6Ci0JCXN0cmxjcHkoZXJyYnVmLCAiU291cmNlIHR5cGUgbm90IHN1cHBvcnRlZCIsIFBDQVBfRVJSQlVGX1NJWkUpOworCQlwY2FwX3N0cmxjcHkoZXJyYnVmLCAiU291cmNlIHR5cGUgbm90IHN1cHBvcnRlZCIsIFBDQVBfRVJSQlVGX1NJWkUpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTQzNCwxNSArNDQ1LDE1IEBACiAKIGZhaWw6CiAJaWYgKHN0YXR1cyA9PSBQQ0FQX0VSUk9SKQotCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIiVzOiAlcyIsCisJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIiVzOiAlcyIsCiAJCSAgICBuYW1lLCBmcC0+ZXJyYnVmKTsKIAllbHNlIGlmIChzdGF0dXMgPT0gUENBUF9FUlJPUl9OT19TVUNIX0RFVklDRSB8fAogCSAgICBzdGF0dXMgPT0gUENBUF9FUlJPUl9QRVJNX0RFTklFRCB8fAogCSAgICBzdGF0dXMgPT0gUENBUF9FUlJPUl9QUk9NSVNDX1BFUk1fREVOSUVEKQotCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIiVzOiAlcyAoJXMpIiwKKwkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiJXM6ICVzICglcykiLAogCQkgICAgbmFtZSwgcGNhcF9zdGF0dXN0b3N0cihzdGF0dXMpLCBmcC0+ZXJyYnVmKTsKIAllbHNlCi0JCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiJXM6ICVzIiwKKwkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiJXM6ICVzIiwKIAkJICAgIG5hbWUsIHBjYXBfc3RhdHVzdG9zdHIoc3RhdHVzKSk7CiAJcGNhcF9jbG9zZShmcCk7CiAJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9wY2FwLW5pdC5jIGIvcGNhcC1uaXQuYwppbmRleCA2YTFhNzdjLi5jZmQ5NTE5IDEwMDY0NAotLS0gYS9wY2FwLW5pdC5jCisrKyBiL3BjYXAtbml0LmMKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgogI2luY2x1ZGUgPG5ldGluZXQvdGNwaXAuaD4KIAotI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzdGRpby5oPgogCkBAIC0xNjgsNyArMTY3LDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWRlZmF1bHQ6Ci0JCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1Ziwgc2l6ZW9mKHAtPmVycmJ1ZiksCisJCQlzbnByaW50ZihwLT5lcnJidWYsIHNpemVvZihwLT5lcnJidWYpLAogCQkJICAgICJiYWQgbml0IHN0YXRlICVkIiwgbmgtPm5oX3N0YXRlKTsKIAkJCXJldHVybiAoLTEpOwogCQl9CkBAIC0xNzksNyArMTc4LDcgQEAKIAkJY2FwbGVuID0gbmgtPm5oX3dpcmVsZW47CiAJCWlmIChjYXBsZW4gPiBwLT5zbmFwc2hvdCkKIAkJCWNhcGxlbiA9IHAtPnNuYXBzaG90OwotCQlpZiAoYnBmX2ZpbHRlcihwLT5mY29kZS5iZl9pbnNucywgY3AsIG5oLT5uaF93aXJlbGVuLCBjYXBsZW4pKSB7CisJCWlmIChwY2FwX2ZpbHRlcihwLT5mY29kZS5iZl9pbnNucywgY3AsIG5oLT5uaF93aXJlbGVuLCBjYXBsZW4pKSB7CiAJCQlzdHJ1Y3QgcGNhcF9wa3RoZHIgaDsKIAkJCWgudHMgPSBuaC0+bmhfdGltZXN0YW1wOwogCQkJaC5sZW4gPSBuaC0+bmhfd2lyZWxlbjsKQEAgLTE5Nyw3ICsxOTYsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1wY2FwX2luamVjdF9uaXQocGNhcF90ICpwLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplKQorcGNhcF9pbmplY3Rfbml0KHBjYXBfdCAqcCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgc2l6ZSkKIHsKIAlzdHJ1Y3Qgc29ja2FkZHIgc2E7CiAJaW50IHJldDsKQEAgLTM3MSw3ICszNzAsNyBAQAogewogCXBjYXBfdCAqcDsKIAotCXAgPSBwY2FwX2NyZWF0ZV9jb21tb24oZWJ1Ziwgc2l6ZW9mIChzdHJ1Y3QgcGNhcF9uaXQpKTsKKwlwID0gUENBUF9DUkVBVEVfQ09NTU9OKGVidWYsIHN0cnVjdCBwY2FwX25pdCk7CiAJaWYgKHAgPT0gTlVMTCkKIAkJcmV0dXJuIChOVUxMKTsKIApkaWZmIC0tZ2l0IGEvcGNhcC1ucGYuYyBiL3BjYXAtbnBmLmMKaW5kZXggYTlmZjBmZi4uZjEyYzcwMSAxMDA2NDQKLS0tIGEvcGNhcC1ucGYuYworKysgYi9wY2FwLW5wZi5jCkBAIC00MSw2ICs0MSwxNyBAQAogI2luY2x1ZGUgPHBjYXAtaW50Lmg+CiAjaW5jbHVkZSA8cGNhcC9kbHQuaD4KIAorLyoKKyAqIFhYWCAtIFBhY2tldDMyLmggZGVmaW5lcyBicGZfcHJvZ3JhbSwgc28gd2UgY2FuJ3QgaW5jbHVkZQorICogPHBjYXAvYnBmLmg+LCB3aGljaCBhbHNvIGRlZmluZXMgaXQ7IHRoYXQncyB3aHkgd2UgZGVmaW5lCisgKiBQQ0FQX0RPTlRfSU5DTFVERV9QQ0FQX0JQRl9ILAorICoKKyAqIEhvd2V2ZXIsIG5vIGhlYWRlciBpbiB0aGUgV2luUGNhcCBvciBOcGNhcCBTREtzIGRlZmluZXMgdGhlCisgKiBtYWNyb3MgZm9yIEJQRiBjb2RlLCBzbyB3ZSBoYXZlIHRvIGRlZmluZSB0aGVtIG91cnNlbHZlcy4KKyAqLworI2RlZmluZQkJQlBGX1JFVAkJMHgwNgorI2RlZmluZQkJQlBGX0sJCTB4MDAKKwogLyogT2xkLXNjaG9vbCBNaW5HVyBoYXZlIHRoZXNlIGhlYWRlcnMgaW4gYSBkaWZmZXJlbnQgcGxhY2UuCiAgKi8KICNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKSAmJiAhZGVmaW5lZChfX01JTkdXNjRfVkVSU0lPTl9NQUpPUikKQEAgLTU1LDYgKzY2LDEwIEBACiAgICNpbmNsdWRlIDxkYWdhcGkuaD4KICNlbmRpZiAvKiBIQVZFX0RBR19BUEkgKi8KIAorI2luY2x1ZGUgImRpYWctY29udHJvbC5oIgorCisjaW5jbHVkZSAicGNhcC1haXJwY2FwLmgiCisKIHN0YXRpYyBpbnQgcGNhcF9zZXRmaWx0ZXJfbnBmKHBjYXBfdCAqLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKik7CiBzdGF0aWMgaW50IHBjYXBfc2V0ZmlsdGVyX3dpbjMyX2RhZyhwY2FwX3QgKiwgc3RydWN0IGJwZl9wcm9ncmFtICopOwogc3RhdGljIGludCBwY2FwX2dldG5vbmJsb2NrX25wZihwY2FwX3QgKik7CkBAIC03MCw3ICs4NSw3IEBACiAjZGVmaW5lIFNXQVBTKF9YKSAoKF9YICYgMHhmZikgPDwgOCkgfCAoX1ggPj4gOCkKIAogLyoKLSAqIFByaXZhdGUgZGF0YSBmb3IgY2FwdHVyaW5nIG9uIFdpblBjYXAgZGV2aWNlcy4KKyAqIFByaXZhdGUgZGF0YSBmb3IgY2FwdHVyaW5nIG9uIFdpblBjYXAvTnBjYXAgZGV2aWNlcy4KICAqLwogc3RydWN0IHBjYXBfd2luIHsKIAlBREFQVEVSICphZGFwdGVyOwkJLyogdGhlIHBhY2tldDMyIEFEQVBURVIgZm9yIHRoZSBkZXZpY2UgKi8KQEAgLTE1NSw3ICsxNzAsNyBAQAogCSAqLwogCW9pZF9kYXRhX2FyZyA9IG1hbGxvYyhzaXplb2YgKFBBQ0tFVF9PSURfREFUQSkgKyAqbGVucCk7CiAJaWYgKG9pZF9kYXRhX2FyZyA9PSBOVUxMKSB7Ci0JCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICAiQ291bGRuJ3QgYWxsb2NhdGUgYXJndW1lbnQgYnVmZmVyIGZvciBQYWNrZXRSZXF1ZXN0Iik7CiAJCXJldHVybiAoUENBUF9FUlJPUik7CiAJfQpAQCAtMTY2LDExICsxODEsOCBAQAogCW9pZF9kYXRhX2FyZy0+T2lkID0gb2lkOwogCW9pZF9kYXRhX2FyZy0+TGVuZ3RoID0gKFVMT05HKSgqbGVucCk7CS8qIFhYWCAtIGNoZWNrIGZvciByaWRpY3Vsb3VzbHkgbGFyZ2UgdmFsdWU/ICovCiAJaWYgKCFQYWNrZXRSZXF1ZXN0KGFkYXB0ZXIsIEZBTFNFLCBvaWRfZGF0YV9hcmcpKSB7Ci0JCWNoYXIgZXJybXNnYnVmW1BDQVBfRVJSQlVGX1NJWkUrMV07Ci0KLQkJcGNhcF93aW4zMl9lcnJfdG9fc3RyKEdldExhc3RFcnJvcigpLCBlcnJtc2didWYpOwotCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJICAgICJFcnJvciBjYWxsaW5nIFBhY2tldFJlcXVlc3Q6ICVzIiwgZXJybXNnYnVmKTsKKwkJcGNhcF9mbXRfZXJybXNnX2Zvcl93aW4zMl9lcnIoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkgICAgR2V0TGFzdEVycm9yKCksICJFcnJvciBjYWxsaW5nIFBhY2tldFJlcXVlc3QiKTsKIAkJZnJlZShvaWRfZGF0YV9hcmcpOwogCQlyZXR1cm4gKC0xKTsKIAl9CkBAIC0xOTMsNyArMjA1LDYgQEAKIHsKIAlzdHJ1Y3QgcGNhcF93aW4gKnB3ID0gcC0+cHJpdjsKIAlzdHJ1Y3QgYnBmX3N0YXQgYnN0YXRzOwotCWNoYXIgZXJyYnVmW1BDQVBfRVJSQlVGX1NJWkUrMV07CiAKIAkvKgogCSAqIFRyeSB0byBnZXQgc3RhdGlzdGljcy4KQEAgLTIwOSw5ICsyMjAsOCBAQAogCSAqIHRvIHVzLgogCSAqLwogCWlmICghUGFja2V0R2V0U3RhdHMocHctPmFkYXB0ZXIsICZic3RhdHMpKSB7Ci0JCXBjYXBfd2luMzJfZXJyX3RvX3N0cihHZXRMYXN0RXJyb3IoKSwgZXJyYnVmKTsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCi0JCSAgICAiUGFja2V0R2V0U3RhdHMgZXJyb3I6ICVzIiwgZXJyYnVmKTsKKwkJcGNhcF9mbXRfZXJybXNnX2Zvcl93aW4zMl9lcnIocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkgICAgR2V0TGFzdEVycm9yKCksICJQYWNrZXRHZXRTdGF0cyBlcnJvciIpOwogCQlyZXR1cm4gKC0xKTsKIAl9CiAJcHMtPnBzX3JlY3YgPSBic3RhdHMuYnNfcmVjdjsKQEAgLTI0NSwxOCArMjU1LDE3IEBACiAgKiBoYXZlIGFuIEFQSSB0aGF0IHJldHVybnMgZGF0YSBpbiBhIGZvcm0gbGlrZSB0aGUgT3B0aW9ucyBzZWN0aW9uIG9mIGEKICAqIHBjYXBuZyBJbnRlcmZhY2UgU3RhdGlzdGljcyBCbG9jazoKICAqCi0gKiAgICBodHRwOi8veG1sMnJmYy50b29scy5pZXRmLm9yZy9jZ2ktYmluL3htbDJyZmMuY2dpP3VybD1odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vcGNhcG5nL3BjYXBuZy9tYXN0ZXIvZHJhZnQtdHVleGVuLW9wc2F3Zy1wY2FwbmcueG1sJm1vZGVBc0Zvcm1hdD1odG1sL2FzY2lpJnR5cGU9YXNjaWkjcmZjLnNlY3Rpb24uNC42CisgKiAgICBodHRwczovL3htbDJyZmMudG9vbHMuaWV0Zi5vcmcvY2dpLWJpbi94bWwycmZjLmNnaT91cmw9aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3BjYXBuZy9wY2FwbmcvbWFzdGVyL2RyYWZ0LXR1ZXhlbi1vcHNhd2ctcGNhcG5nLnhtbCZtb2RlQXNGb3JtYXQ9aHRtbC9hc2NpaSZ0eXBlPWFzY2lpI3JmYy5zZWN0aW9uLjQuNgogICoKICAqIHdoaWNoIHdvdWxkIGxldCB1cyBhZGQgbmV3IHN0YXRpc3RpY3Mgc3RyYWlnaHRmb3J3YXJkbHkgYW5kIGluZGljYXRlIHdoaWNoCiAgKiBzdGF0aXN0aWNzIHdlIGFyZSBhbmQgYXJlICpub3QqIHByb3ZpZGluZywgcmF0aGVyIHRoYW4gaGF2aW5nIHRvIHByb3ZpZGUKICAqIHBvc3NpYmx5LWJvZ3VzIHZhbHVlcyBmb3Igc3RhdGlzdGljcyB3ZSBjYW4ndCBwcm92aWRlLgogICovCi1zdHJ1Y3QgcGNhcF9zdGF0ICoKK3N0YXRpYyBzdHJ1Y3QgcGNhcF9zdGF0ICoKIHBjYXBfc3RhdHNfZXhfbnBmKHBjYXBfdCAqcCwgaW50ICpwY2FwX3N0YXRfc2l6ZSkKIHsKIAlzdHJ1Y3QgcGNhcF93aW4gKnB3ID0gcC0+cHJpdjsKIAlzdHJ1Y3QgYnBmX3N0YXQgYnN0YXRzOwotCWNoYXIgZXJyYnVmW1BDQVBfRVJSQlVGX1NJWkUrMV07CiAKIAkqcGNhcF9zdGF0X3NpemUgPSBzaXplb2YgKHAtPnN0YXQpOwogCkBAIC0yNjgsMTUgKzI3NywxOSBAQAogCSAqIHNhbWUgbGF5b3V0LCBidXQgbGV0J3Mgbm90IGNoZWF0LikKIAkgKi8KIAlpZiAoIVBhY2tldEdldFN0YXRzRXgocHctPmFkYXB0ZXIsICZic3RhdHMpKSB7Ci0JCXBjYXBfd2luMzJfZXJyX3RvX3N0cihHZXRMYXN0RXJyb3IoKSwgZXJyYnVmKTsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCi0JCSAgICAiUGFja2V0R2V0U3RhdHNFeCBlcnJvcjogJXMiLCBlcnJidWYpOworCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX3dpbjMyX2VycihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICBHZXRMYXN0RXJyb3IoKSwgIlBhY2tldEdldFN0YXRzRXggZXJyb3IiKTsKIAkJcmV0dXJuIChOVUxMKTsKIAl9CiAJcC0+c3RhdC5wc19yZWN2ID0gYnN0YXRzLmJzX3JlY3Y7CiAJcC0+c3RhdC5wc19kcm9wID0gYnN0YXRzLmJzX2Ryb3A7CiAJcC0+c3RhdC5wc19pZmRyb3AgPSBic3RhdHMucHNfaWZkcm9wOwotI2lmZGVmIEVOQUJMRV9SRU1PVEUKKwkvKgorCSAqIEp1c3QgaW4gY2FzZSB0aGlzIGlzIGV2ZXIgY29tcGlsZWQgZm9yIGEgdGFyZ2V0IG90aGVyIHRoYW4KKwkgKiBXaW5kb3dzLCB3aGljaCBpcyBzb21ld2hlcmUgYmV0d2VlbiBleHRyZW1lbHkgdW5saWtlbHkgYW5kCisJICogaW1wb3NzaWJsZS4KKwkgKi8KKyNpZmRlZiBfV0lOMzIKIAlwLT5zdGF0LnBzX2NhcHQgPSBic3RhdHMuYnNfY2FwdDsKICNlbmRpZgogCXJldHVybiAoJnAtPnN0YXQpOwpAQCAtMjkwLDcgKzMwMyw3IEBACiAKIAlpZihQYWNrZXRTZXRCdWZmKHB3LT5hZGFwdGVyLGRpbSk9PUZBTFNFKQogCXsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJkcml2ZXIgZXJyb3I6IG5vdCBlbm91Z2ggbWVtb3J5IHRvIGFsbG9jYXRlIHRoZSBrZXJuZWwgYnVmZmVyIik7CisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgImRyaXZlciBlcnJvcjogbm90IGVub3VnaCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlIGtlcm5lbCBidWZmZXIiKTsKIAkJcmV0dXJuICgtMSk7CiAJfQogCXJldHVybiAoMCk7CkBAIC0zMDQsNyArMzE3LDcgQEAKIAogCWlmKFBhY2tldFNldE1vZGUocHctPmFkYXB0ZXIsbW9kZSk9PUZBTFNFKQogCXsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJkcml2ZXIgZXJyb3I6IHdvcmtpbmcgbW9kZSBub3QgcmVjb2duaXplZCIpOworCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJkcml2ZXIgZXJyb3I6IHdvcmtpbmcgbW9kZSBub3QgcmVjb2duaXplZCIpOwogCQlyZXR1cm4gKC0xKTsKIAl9CiAKQEAgLTMxOSw3ICszMzIsNyBAQAogCiAJaWYoUGFja2V0U2V0TWluVG9Db3B5KHB3LT5hZGFwdGVyLCBzaXplKT09RkFMU0UpCiAJewotCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgImRyaXZlciBlcnJvcjogdW5hYmxlIHRvIHNldCB0aGUgcmVxdWVzdGVkIG1pbnRvY29weSBzaXplIik7CisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgImRyaXZlciBlcnJvcjogdW5hYmxlIHRvIHNldCB0aGUgcmVxdWVzdGVkIG1pbnRvY29weSBzaXplIik7CiAJCXJldHVybiAoLTEpOwogCX0KIAlyZXR1cm4gKDApOwpAQCAtMzQ3LDcgKzM2MCw2IEBACiB7CiAJc3RydWN0IHBjYXBfd2luICpwdyA9IHAtPnByaXY7CiAJUEFDS0VUX09JRF9EQVRBICpvaWRfZGF0YV9hcmc7Ci0JY2hhciBlcnJidWZbUENBUF9FUlJCVUZfU0laRSsxXTsKIAogCS8qCiAJICogQWxsb2NhdGUgYSBQQUNLRVRfT0lEX0RBVEEgc3RydWN0dXJlIHRvIGhhbmQgdG8gUGFja2V0UmVxdWVzdCgpLgpAQCAtMzU4LDcgKzM3MCw3IEBACiAJICovCiAJb2lkX2RhdGFfYXJnID0gbWFsbG9jKHNpemVvZiAoUEFDS0VUX09JRF9EQVRBKSArICpsZW5wKTsKIAlpZiAob2lkX2RhdGFfYXJnID09IE5VTEwpIHsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICJDb3VsZG4ndCBhbGxvY2F0ZSBhcmd1bWVudCBidWZmZXIgZm9yIFBhY2tldFJlcXVlc3QiKTsKIAkJcmV0dXJuIChQQ0FQX0VSUk9SKTsKIAl9CkBAIC0zNjcsOSArMzc5LDggQEAKIAlvaWRfZGF0YV9hcmctPkxlbmd0aCA9IChVTE9ORykoKmxlbnApOwkvKiBYWFggLSBjaGVjayBmb3IgcmlkaWN1bG91c2x5IGxhcmdlIHZhbHVlPyAqLwogCW1lbWNweShvaWRfZGF0YV9hcmctPkRhdGEsIGRhdGEsICpsZW5wKTsKIAlpZiAoIVBhY2tldFJlcXVlc3QocHctPmFkYXB0ZXIsIFRSVUUsIG9pZF9kYXRhX2FyZykpIHsKLQkJcGNhcF93aW4zMl9lcnJfdG9fc3RyKEdldExhc3RFcnJvcigpLCBlcnJidWYpOwotCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJICAgICJFcnJvciBjYWxsaW5nIFBhY2tldFJlcXVlc3Q6ICVzIiwgZXJyYnVmKTsKKwkJcGNhcF9mbXRfZXJybXNnX2Zvcl93aW4zMl9lcnIocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkgICAgR2V0TGFzdEVycm9yKCksICJFcnJvciBjYWxsaW5nIFBhY2tldFJlcXVlc3QiKTsKIAkJZnJlZShvaWRfZGF0YV9hcmcpOwogCQlyZXR1cm4gKFBDQVBfRVJST1IpOwogCX0KQEAgLTM5MSwxMyArNDAyLDYgQEAKIHsKIAlzdHJ1Y3QgcGNhcF93aW4gKnB3ID0gcC0+cHJpdjsKIAl1X2ludCByZXM7Ci0JY2hhciBlcnJidWZbUENBUF9FUlJCVUZfU0laRSsxXTsKLQotCWlmIChwdy0+YWRhcHRlcj09TlVMTCkgewotCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJICAgICJDYW5ub3QgdHJhbnNtaXQgYSBxdWV1ZSB0byBhbiBvZmZsaW5lIGNhcHR1cmUgb3IgdG8gYSBUdXJib0NhcCBwb3J0Iik7Ci0JCXJldHVybiAoMCk7Ci0JfQogCiAJcmVzID0gUGFja2V0U2VuZFBhY2tldHMocHctPmFkYXB0ZXIsCiAJCXF1ZXVlLT5idWZmZXIsCkBAIC00MDUsOSArNDA5LDggQEAKIAkJKEJPT0xFQU4pc3luYyk7CiAKIAlpZihyZXMgIT0gcXVldWUtPmxlbil7Ci0JCXBjYXBfd2luMzJfZXJyX3RvX3N0cihHZXRMYXN0RXJyb3IoKSwgZXJyYnVmKTsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCi0JCSAgICAiRXJyb3Igb3BlbmluZyBhZGFwdGVyOiAlcyIsIGVycmJ1Zik7CisJCXBjYXBfZm10X2Vycm1zZ19mb3Jfd2luMzJfZXJyKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJICAgIEdldExhc3RFcnJvcigpLCAiRXJyb3IgcXVldWVpbmcgcGFja2V0cyIpOwogCX0KIAogCXJldHVybiAocmVzKTsKQEAgLTQyMCw3ICs0MjMsNyBAQAogCiAJaWYgKHNpemU8PTApIHsKIAkJLyogQm9ndXMgcGFyYW1ldGVyICovCi0JCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICAiRXJyb3I6IGludmFsaWQgc2l6ZSAlZCIsc2l6ZSk7CiAJCXJldHVybiAoLTEpOwogCX0KQEAgLTQyOSw3ICs0MzIsNyBAQAogCW5ld19idWZmPSh1bnNpZ25lZCBjaGFyKiltYWxsb2Moc2l6ZW9mKGNoYXIpKnNpemUpOwogCiAJaWYgKCFuZXdfYnVmZikgewotCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkgICAgIkVycm9yOiBub3QgZW5vdWdoIG1lbW9yeSIpOwogCQlyZXR1cm4gKC0xKTsKIAl9CkBAIC00NTEsNyArNDU0LDcgQEAKIAkvKiBTZXQgdGhlIHBhY2tldCBkcml2ZXIgaW4gZHVtcCBtb2RlICovCiAJcmVzID0gUGFja2V0U2V0TW9kZShwdy0+YWRhcHRlciwgUEFDS0VUX01PREVfRFVNUCk7CiAJaWYocmVzID09IEZBTFNFKXsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICJFcnJvciBzZXR0aW5nIGR1bXAgbW9kZSIpOwogCQlyZXR1cm4gKC0xKTsKIAl9CkBAIC00NTksNyArNDYyLDcgQEAKIAkvKiBTZXQgdGhlIG5hbWUgb2YgdGhlIGR1bXAgZmlsZSAqLwogCXJlcyA9IFBhY2tldFNldER1bXBOYW1lKHB3LT5hZGFwdGVyLCBmaWxlbmFtZSwgKGludClzdHJsZW4oZmlsZW5hbWUpKTsKIAlpZihyZXMgPT0gRkFMU0UpewotCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkgICAgIkVycm9yIHNldHRpbmcga2VybmVsIGR1bXAgZmlsZSBuYW1lIik7CiAJCXJldHVybiAoLTEpOwogCX0KQEAgLTQ2Nyw4ICs0NzAsOCBAQAogCS8qIFNldCB0aGUgbGltaXRzIG9mIHRoZSBkdW1wIGZpbGUgKi8KIAlyZXMgPSBQYWNrZXRTZXREdW1wTGltaXRzKHB3LT5hZGFwdGVyLCBtYXhzaXplLCBtYXhwYWNrcyk7CiAJaWYocmVzID09IEZBTFNFKSB7Ci0JCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkgICAgCQkiRXJyb3Igc2V0dGluZyBkdW1wIGxpbWl0Iik7CisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQkiRXJyb3Igc2V0dGluZyBkdW1wIGxpbWl0Iik7CiAJCXJldHVybiAoLTEpOwogCX0KIApAQCAtNDgzLDMwICs0ODYsMzQgQEAKIAlyZXR1cm4gKFBhY2tldElzRHVtcEVuZGVkKHB3LT5hZGFwdGVyLCAoQk9PTEVBTilzeW5jKSk7CiB9CiAKKyNpZmRlZiBIQVZFX0FJUlBDQVBfQVBJCiBzdGF0aWMgUEFpcnBjYXBIYW5kbGUKIHBjYXBfZ2V0X2FpcnBjYXBfaGFuZGxlX25wZihwY2FwX3QgKnApCiB7Ci0jaWZkZWYgSEFWRV9BSVJQQ0FQX0FQSQogCXN0cnVjdCBwY2FwX3dpbiAqcHcgPSBwLT5wcml2OwogCiAJcmV0dXJuIChQYWNrZXRHZXRBaXJQY2FwSGFuZGxlKHB3LT5hZGFwdGVyKSk7Ci0jZWxzZQotCXJldHVybiAoTlVMTCk7Ci0jZW5kaWYgLyogSEFWRV9BSVJQQ0FQX0FQSSAqLwogfQorI2Vsc2UgLyogSEFWRV9BSVJQQ0FQX0FQSSAqLworc3RhdGljIFBBaXJwY2FwSGFuZGxlCitwY2FwX2dldF9haXJwY2FwX2hhbmRsZV9ucGYocGNhcF90ICpwIF9VXykKK3sKKwlyZXR1cm4gKE5VTEwpOworfQorI2VuZGlmIC8qIEhBVkVfQUlSUENBUF9BUEkgKi8KIAogc3RhdGljIGludAogcGNhcF9yZWFkX25wZihwY2FwX3QgKnAsIGludCBjbnQsIHBjYXBfaGFuZGxlciBjYWxsYmFjaywgdV9jaGFyICp1c2VyKQogewogCVBBQ0tFVCBQYWNrZXQ7CiAJaW50IGNjOwotCWludCBuID0gMDsKKwlpbnQgbjsKIAlyZWdpc3RlciB1X2NoYXIgKmJwLCAqZXA7CiAJdV9jaGFyICpkYXRhcDsKIAlzdHJ1Y3QgcGNhcF93aW4gKnB3ID0gcC0+cHJpdjsKIAogCWNjID0gcC0+Y2M7Ci0JaWYgKHAtPmNjID09IDApIHsKKwlpZiAoY2MgPT0gMCkgewogCQkvKgogCQkgKiBIYXMgInBjYXBfYnJlYWtsb29wKCkiIGJlZW4gY2FsbGVkPwogCQkgKi8KQEAgLTUzNCw3ICs1NDEsMzQgQEAKIAkJICovCiAJCVBhY2tldEluaXRQYWNrZXQoJlBhY2tldCwgKEJZVEUgKilwLT5idWZmZXIsIHAtPmJ1ZnNpemUpOwogCQlpZiAoIVBhY2tldFJlY2VpdmVQYWNrZXQocHctPmFkYXB0ZXIsICZQYWNrZXQsIFRSVUUpKSB7Ci0JCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgInJlYWQgZXJyb3I6IFBhY2tldFJlY2VpdmVQYWNrZXQgZmFpbGVkIik7CisJCQkvKgorCQkJICogRGlkIHRoZSBkZXZpY2UgZ28gYXdheT8KKwkJCSAqIElmIHNvLCB0aGUgZXJyb3Igd2UgZ2V0IGlzIEVSUk9SX0dFTl9GQUlMVVJFLgorCQkJICovCisJCQlEV09SRCBlcnJjb2RlID0gR2V0TGFzdEVycm9yKCk7CisKKwkJCWlmIChlcnJjb2RlID09IEVSUk9SX0dFTl9GQUlMVVJFKSB7CisJCQkJLyoKKwkJCQkgKiBUaGUgZGV2aWNlIG9uIHdoaWNoIHdlJ3JlIGNhcHR1cmluZworCQkJCSAqIHdlbnQgYXdheSwgb3IgaXQgYmVjYW1lIHVudXNhYmxlCisJCQkJICogYnkgTlBGIGR1ZSB0byBhIHN1c3BlbmQvcmVzdW1lLgorCQkJCSAqCisJCQkJICogWFhYIC0gaG9wZWZ1bGx5IG5vIG90aGVyIGVycm9yCisJCQkJICogY29uZGl0aW9ucyBhcmUgaW5kaWNhdGVkIGJ5IHRoaXMuCisJCQkJICoKKwkJCQkgKiBYWFggLSB3ZSByZWFsbHkgc2hvdWxkIHJldHVybiBhbgorCQkJCSAqIGFwcHJvcHJpYXRlIGVycm9yIGZvciB0aGF0LCBidXQKKwkJCQkgKiBwY2FwX2Rpc3BhdGNoKCkgZXRjLiBhcmVuJ3QKKwkJCQkgKiBkb2N1bWVudGVkIGFzIGhhdmluZyBlcnJvciByZXR1cm5zCisJCQkJICogb3RoZXIgdGhhbiBQQ0FQX0VSUk9SIG9yIFBDQVBfRVJST1JfQlJFQUsuCisJCQkJICovCisJCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJCSAgICAiVGhlIGludGVyZmFjZSBkaXNhcHBlYXJlZCIpOworCQkJfSBlbHNlIHsKKwkJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX3dpbjMyX2VycihwLT5lcnJidWYsCisJCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsIGVycmNvZGUsCisJCQkJICAgICJQYWNrZXRSZWNlaXZlUGFja2V0IGVycm9yIik7CisJCQl9CiAJCQlyZXR1cm4gKFBDQVBfRVJST1IpOwogCQl9CiAKQEAgLTU0OSw5ICs1ODMsMTAgQEAKIAkgKiBMb29wIHRocm91Z2ggZWFjaCBwYWNrZXQuCiAJICovCiAjZGVmaW5lIGJocCAoKHN0cnVjdCBicGZfaGRyICopYnApCisJbiA9IDA7CiAJZXAgPSBicCArIGNjOwogCWZvciAoOzspIHsKLQkJcmVnaXN0ZXIgaW50IGNhcGxlbiwgaGRybGVuOworCQlyZWdpc3RlciB1X2ludCBjYXBsZW4sIGhkcmxlbjsKIAogCQkvKgogCQkgKiBIYXMgInBjYXBfYnJlYWtsb29wKCkiIGJlZW4gY2FsbGVkPwpAQCAtNTg1LDEzICs2MjAsMTMgQEAKIAkJICogaW4ga2VybmVsLCBubyBuZWVkIHRvIGRvIGl0IG5vdyAtIHdlIGFscmVhZHkga25vdwogCQkgKiB0aGUgcGFja2V0IHBhc3NlZCB0aGUgZmlsdGVyLgogCQkgKgotCQkgKiBYWFggLSBicGZfZmlsdGVyKCkgc2hvdWxkIGFsd2F5cyByZXR1cm4gVFJVRSBpZgorCQkgKiBYWFggLSBwY2FwX2ZpbHRlcigpIHNob3VsZCBhbHdheXMgcmV0dXJuIFRSVUUgaWYKIAkJICogaGFuZGVkIGEgbnVsbCBwb2ludGVyIGZvciB0aGUgcHJvZ3JhbSwgYnV0IGl0IG1pZ2h0CiAJCSAqIGp1c3QgdHJ5IHRvICJydW4iIHRoZSBmaWx0ZXIsIHNvIHdlIGNoZWNrIGhlcmUuCiAJCSAqLwogCQlpZiAocHctPmZpbHRlcmluZ19pbl9rZXJuZWwgfHwKIAkJICAgIHAtPmZjb2RlLmJmX2luc25zID09IE5VTEwgfHwKLQkJICAgIGJwZl9maWx0ZXIocC0+ZmNvZGUuYmZfaW5zbnMsIGRhdGFwLCBiaHAtPmJoX2RhdGFsZW4sIGNhcGxlbikpIHsKKwkJICAgIHBjYXBfZmlsdGVyKHAtPmZjb2RlLmJmX2luc25zLCBkYXRhcCwgYmhwLT5iaF9kYXRhbGVuLCBjYXBsZW4pKSB7CiAjaWZkZWYgRU5BQkxFX1JFTU9URQogCQkJc3dpdGNoIChwLT5ybXRfc2FtcC5tZXRob2QpIHsKIApAQCAtNjkwLDcgKzcyNSw3IEBACiAJCSAqLwogCQlQYWNrZXRJbml0UGFja2V0KCZQYWNrZXQsIChCWVRFICopcC0+YnVmZmVyLCBwLT5idWZzaXplKTsKIAkJaWYgKCFQYWNrZXRSZWNlaXZlUGFja2V0KHB3LT5hZGFwdGVyLCAmUGFja2V0LCBUUlVFKSkgewotCQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJyZWFkIGVycm9yOiBQYWNrZXRSZWNlaXZlUGFja2V0IGZhaWxlZCIpOworCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAicmVhZCBlcnJvcjogUGFja2V0UmVjZWl2ZVBhY2tldCBmYWlsZWQiKTsKIAkJCXJldHVybiAoLTEpOwogCQl9CiAKQEAgLTc5OCw3ICs4MzMsNyBAQAogCQkvKiBObyB1bmRlcmxheWluZyBmaWx0ZXJpbmcgc3lzdGVtLiBXZSBuZWVkIHRvIGZpbHRlciBvbiBvdXIgb3duICovCiAJCWlmIChwLT5mY29kZS5iZl9pbnNucykKIAkJewotCQkJaWYgKGJwZl9maWx0ZXIocC0+ZmNvZGUuYmZfaW5zbnMsIGRwLCBwYWNrZXRfbGVuLCBjYXBsZW4pID09IDApCisJCQlpZiAocGNhcF9maWx0ZXIocC0+ZmNvZGUuYmZfaW5zbnMsIGRwLCBwYWNrZXRfbGVuLCBjYXBsZW4pID09IDApCiAJCQl7CiAJCQkJLyogTW92ZSB0byBuZXh0IHBhY2tldCAqLwogCQkJCWhlYWRlciA9IChkYWdfcmVjb3JkX3QqKSgoY2hhciopaGVhZGVyICsgZXJmX3JlY29yZF9sZW4pOwpAQCAtODMyLDE0ICs4NjcsMTQgQEAKIAogLyogU2VuZCBhIHBhY2tldCB0byB0aGUgbmV0d29yayAqLwogc3RhdGljIGludAotcGNhcF9pbmplY3RfbnBmKHBjYXBfdCAqcCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3BjYXBfaW5qZWN0X25wZihwY2FwX3QgKnAsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IHNpemUpCiB7CiAJc3RydWN0IHBjYXBfd2luICpwdyA9IHAtPnByaXY7CiAJUEFDS0VUIHBrdDsKIAogCVBhY2tldEluaXRQYWNrZXQoJnBrdCwgKFBWT0lEKWJ1Ziwgc2l6ZSk7CiAJaWYoUGFja2V0U2VuZFBhY2tldChwdy0+YWRhcHRlciwmcGt0LFRSVUUpID09IEZBTFNFKSB7Ci0JCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAic2VuZCBlcnJvcjogUGFja2V0U2VuZFBhY2tldCBmYWlsZWQiKTsKKwkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAic2VuZCBlcnJvcjogUGFja2V0U2VuZFBhY2tldCBmYWlsZWQiKTsKIAkJcmV0dXJuICgtMSk7CiAJfQogCkBAIC04NDgsNyArODgzLDcgQEAKIAkgKiAicGNhcF9pbmplY3QoKSIgaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMKIAkgKiBzZW50LgogCSAqLwotCXJldHVybiAoKGludClzaXplKTsKKwlyZXR1cm4gKHNpemUpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtODY3LDEzICs5MDIsMjUgQEAKIAlwY2FwX2NsZWFudXBfbGl2ZV9jb21tb24ocCk7CiB9CiAKK3N0YXRpYyB2b2lkCitwY2FwX2JyZWFrbG9vcF9ucGYocGNhcF90ICpwKQoreworCXBjYXBfYnJlYWtsb29wX2NvbW1vbihwKTsKKwlzdHJ1Y3QgcGNhcF93aW4gKnB3ID0gcC0+cHJpdjsKKworCS8qIFhYWCAtIHdoYXQgaWYgdGhpcyBmYWlscz8gKi8KKwlTZXRFdmVudChQYWNrZXRHZXRSZWFkRXZlbnQocHctPmFkYXB0ZXIpKTsKK30KKwogc3RhdGljIGludAogcGNhcF9hY3RpdmF0ZV9ucGYocGNhcF90ICpwKQogewogCXN0cnVjdCBwY2FwX3dpbiAqcHcgPSBwLT5wcml2OwogCU5ldFR5cGUgdHlwZTsKIAlpbnQgcmVzOwotCWNoYXIgZXJyYnVmW1BDQVBfRVJSQlVGX1NJWkUrMV07CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGJwZl9pbnNuIHRvdGFsX2luc247CisJc3RydWN0IGJwZl9wcm9ncmFtIHRvdGFsX3Byb2c7CiAKIAlpZiAocC0+b3B0LnJmbW9uKSB7CiAJCS8qCkBAIC05MDUsMzAgKzk1Miw1MiBAQAogCQl9CiAJfQogCi0JLyogSW5pdCBXaW5Tb2NrICovCisJLyogSW5pdCBXaW5zb2NrIGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQgKi8KIAlwY2FwX3dzb2NraW5pdCgpOwogCiAJcHctPmFkYXB0ZXIgPSBQYWNrZXRPcGVuQWRhcHRlcihwLT5vcHQuZGV2aWNlKTsKIAogCWlmIChwdy0+YWRhcHRlciA9PSBOVUxMKQogCXsKLQkJLyogQWRhcHRlciBkZXRlY3RlZCBidXQgd2UgYXJlIG5vdCBhYmxlIHRvIG9wZW4gaXQuIFJldHVybiBmYWlsdXJlLiAqLwotCQlwY2FwX3dpbjMyX2Vycl90b19zdHIoR2V0TGFzdEVycm9yKCksIGVycmJ1Zik7Ci0JCWlmIChwdy0+cmZtb25fc2VsZnN0YXJ0KQotCQl7Ci0JCQlQYWNrZXRTZXRNb25pdG9yTW9kZShwLT5vcHQuZGV2aWNlLCAwKTsKKwkJRFdPUkQgZXJyY29kZSA9IEdldExhc3RFcnJvcigpOworCisJCS8qCisJCSAqIFdoYXQgZXJyb3IgZGlkIHdlIGdldCB3aGVuIHRyeWluZyB0byBvcGVuIHRoZSBhZGFwdGVyPworCQkgKi8KKwkJc3dpdGNoIChlcnJjb2RlKSB7CisKKwkJY2FzZSBFUlJPUl9CQURfVU5JVDoKKwkJCS8qCisJCQkgKiBUaGVyZSdzIG5vIHN1Y2ggZGV2aWNlLgorCQkJICovCisJCQlyZXR1cm4gKFBDQVBfRVJST1JfTk9fU1VDSF9ERVZJQ0UpOworCisJCWNhc2UgRVJST1JfQUNDRVNTX0RFTklFRDoKKwkJCS8qCisJCQkgKiBUaGVyZSBpcywgYnV0IHdlIGRvbid0IGhhdmUgcGVybWlzc2lvbiB0bworCQkJICogdXNlIGl0LgorCQkJICovCisJCQlyZXR1cm4gKFBDQVBfRVJST1JfUEVSTV9ERU5JRUQpOworCisJCWRlZmF1bHQ6CisJCQkvKgorCQkJICogVW5rbm93biAtIHJlcG9ydCBkZXRhaWxzLgorCQkJICovCisJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX3dpbjMyX2VycihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkgICAgZXJyY29kZSwgIkVycm9yIG9wZW5pbmcgYWRhcHRlciIpOworCQkJaWYgKHB3LT5yZm1vbl9zZWxmc3RhcnQpCisJCQl7CisJCQkJUGFja2V0U2V0TW9uaXRvck1vZGUocC0+b3B0LmRldmljZSwgMCk7CisJCQl9CisJCQlyZXR1cm4gKFBDQVBfRVJST1IpOwogCQl9Ci0JCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkgICAgIkVycm9yIG9wZW5pbmcgYWRhcHRlcjogJXMiLCBlcnJidWYpOwotCQlyZXR1cm4gKFBDQVBfRVJST1IpOwogCX0KIAogCS8qZ2V0IG5ldHdvcmsgdHlwZSovCiAJaWYoUGFja2V0R2V0TmV0VHlwZSAocHctPmFkYXB0ZXIsJnR5cGUpID09IEZBTFNFKQogCXsKLQkJcGNhcF93aW4zMl9lcnJfdG9fc3RyKEdldExhc3RFcnJvcigpLCBlcnJidWYpOwotCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJICAgICJDYW5ub3QgZGV0ZXJtaW5lIHRoZSBuZXR3b3JrIHR5cGU6ICVzIiwgZXJyYnVmKTsKKwkJcGNhcF9mbXRfZXJybXNnX2Zvcl93aW4zMl9lcnIocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkgICAgR2V0TGFzdEVycm9yKCksICJDYW5ub3QgZGV0ZXJtaW5lIHRoZSBuZXR3b3JrIHR5cGUiKTsKIAkJZ290byBiYWQ7CiAJfQogCkBAIC0xMDA2LDExICsxMDc1LDg5IEBACiAJCXAtPmxpbmt0eXBlID0gRExUX1BQSTsKIAkJYnJlYWs7CiAKKwljYXNlIE5kaXNNZWRpdW1XaXJlbGVzc1dhbjoKKwkJcC0+bGlua3R5cGUgPSBETFRfUkFXOworCQlicmVhazsKKwogCWRlZmF1bHQ6Ci0JCXAtPmxpbmt0eXBlID0gRExUX0VOMTBNQjsJCQkvKmFuIHVua25vd24gYWRhcHRlciBpcyBhc3N1bWVkIHRvIGJlIGV0aGVybmV0Ki8KKwkJLyoKKwkJICogQW4gdW5rbm93biBtZWRpdW0gdHlwZSBpcyBhc3N1bWVkIHRvIHN1cHBseSBFdGhlcm5ldAorCQkgKiBoZWFkZXJzOyBpZiBub3QsIHRoZSB1c2VyIHdpbGwgaGF2ZSB0byByZXBvcnQgaXQsCisJCSAqIHNvIHRoYXQgdGhlIG1lZGl1bSB0eXBlIGFuZCBsaW5rLWxheWVyIGhlYWRlciB0eXBlCisJCSAqIGNhbiBiZSBkZXRlcm1pbmVkLiAgSWYgd2Ugd2VyZSB0byBmYWlsIGhlcmUsIHdlCisJCSAqIG1pZ2h0IGdldCB0aGUgbGluay1sYXllciB0eXBlIGluIHRoZSBlcnJvciwgYnV0CisJCSAqIHRoZSB1c2VyIHdvdWxkbid0IGdldCBhIGNhcHR1cmUsIHNvIHdlIHdvdWxkbid0CisJCSAqIGJlIGFibGUgdG8gZGV0ZXJtaW5lIHRoZSBsaW5rLWxheWVyIHR5cGU7IHdlIHJlcG9ydAorCQkgKiBhIHdhcm5pbmcgd2l0aCB0aGUgbGluay1sYXllciB0eXBlLCBzbyBhdCBsZWFzdAorCQkgKiBzb21lIHByb2dyYW1zIHdpbGwgcmVwb3J0IHRoZSB3YXJuaW5nLgorCQkgKi8KKwkJcC0+bGlua3R5cGUgPSBETFRfRU4xME1COworCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICAiVW5rbm93biBOZGlzTWVkaXVtIHZhbHVlICVkLCBkZWZhdWx0aW5nIHRvIERMVF9FTjEwTUIiLAorCQkgICAgdHlwZS5MaW5rVHlwZSk7CisJCXN0YXR1cyA9IFBDQVBfV0FSTklORzsKIAkJYnJlYWs7CiAJfQogCisjaWZkZWYgSEFWRV9QQUNLRVRfR0VUX1RJTUVTVEFNUF9NT0RFUworCS8qCisJICogU2V0IHRoZSB0aW1lc3RhbXAgdHlwZS4KKwkgKiAoWWVzLCB3ZSByZXF1aXJlIFBhY2tldEdldFRpbWVzdGFtcE1vZGVzKCksIG5vdCBqdXN0CisJICogUGFja2V0U2V0VGltZXN0YW1wTW9kZSgpLiAgSWYgd2UgaGF2ZSB0aGUgZm9ybWVyLCB3ZQorCSAqIGhhdmUgdGhlIGxhdHRlciwgdW5sZXNzIHNvbWVib2R5J3MgdXNpbmcgYSB2ZXJzaW9uCisJICogb2YgTnBjYXAgdGhhdCB0aGV5J3ZlIGhhY2tlZCB0byBwcm92aWRlIHRoZSBmb3JtZXIKKwkgKiBidXQgbm90IHRoZSBsYXR0ZXI7IGlmIHRoZXkndmUgZG9uZSB0aGF0LCBlaXRoZXIKKwkgKiB0aGV5J3JlIGNvbmZ1c2VkIG9yIHRoZXkncmUgdHJvbGxpbmcgdXMuKQorCSAqLworCXN3aXRjaCAocC0+b3B0LnRzdGFtcF90eXBlKSB7CisKKwljYXNlIFBDQVBfVFNUQU1QX0hPU1RfSElQUkVDX1VOU1lOQ0VEOgorCQkvKgorCQkgKiBCZXR0ZXIgdGhhbiBsb3ctcmVzLCBidXQgKm5vdCogc3luY2hyb25pemVkIHdpdGgKKwkJICogdGhlIE9TIGNsb2NrLgorCQkgKi8KKwkJaWYgKCFQYWNrZXRTZXRUaW1lc3RhbXBNb2RlKHB3LT5hZGFwdGVyLCBUSU1FU1RBTVBNT0RFX1NJTkdMRV9TWU5DSFJPTklaQVRJT04pKQorCQl7CisJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX3dpbjMyX2VycihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkgICAgR2V0TGFzdEVycm9yKCksICJDYW5ub3Qgc2V0IHRoZSB0aW1lIHN0YW1wIG1vZGUgdG8gVElNRVNUQU1QTU9ERV9TSU5HTEVfU1lOQ0hST05JWkFUSU9OIik7CisJCQlnb3RvIGJhZDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUENBUF9UU1RBTVBfSE9TVF9MT1dQUkVDOgorCQkvKgorCQkgKiBMb3ctcmVzLCBidXQgc3luY2hyb25pemVkIHdpdGggdGhlIE9TIGNsb2NrLgorCQkgKi8KKwkJaWYgKCFQYWNrZXRTZXRUaW1lc3RhbXBNb2RlKHB3LT5hZGFwdGVyLCBUSU1FU1RBTVBNT0RFX1FVRVJZU1lTVEVNVElNRSkpCisJCXsKKwkJCXBjYXBfZm10X2Vycm1zZ19mb3Jfd2luMzJfZXJyKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCSAgICBHZXRMYXN0RXJyb3IoKSwgIkNhbm5vdCBzZXQgdGhlIHRpbWUgc3RhbXAgbW9kZSB0byBUSU1FU1RBTVBNT0RFX1FVRVJZU1lTVEVNVElNRSIpOworCQkJZ290byBiYWQ7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFBDQVBfVFNUQU1QX0hPU1RfSElQUkVDOgorCQkvKgorCQkgKiBIaWdoLXJlcywgYW5kIHN5bmNocm9uaXplZCB3aXRoIHRoZSBPUyBjbG9jay4KKwkJICovCisJCWlmICghUGFja2V0U2V0VGltZXN0YW1wTW9kZShwdy0+YWRhcHRlciwgVElNRVNUQU1QTU9ERV9RVUVSWVNZU1RFTVRJTUVfUFJFQ0lTRSkpCisJCXsKKwkJCXBjYXBfZm10X2Vycm1zZ19mb3Jfd2luMzJfZXJyKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCSAgICBHZXRMYXN0RXJyb3IoKSwgIkNhbm5vdCBzZXQgdGhlIHRpbWUgc3RhbXAgbW9kZSB0byBUSU1FU1RBTVBNT0RFX1FVRVJZU1lTVEVNVElNRV9QUkVDSVNFIik7CisJCQlnb3RvIGJhZDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUENBUF9UU1RBTVBfSE9TVDoKKwkJLyoKKwkJICogWFhYIC0gZG8gd2hhdGV2ZXIgdGhlIGRlZmF1bHQgaXMsIGZvciBub3cuCisJCSAqIFNldCB0byB0aGUgaGlnaGVzdCByZXNvbHV0aW9uIHRoYXQncyBzeW5jaHJvbml6ZWQKKwkJICogd2l0aCB0aGUgc3lzdGVtIGNsb2NrPworCQkgKi8KKwkJYnJlYWs7CisJfQorI2VuZGlmIC8qIEhBVkVfUEFDS0VUX0dFVF9USU1FU1RBTVBfTU9ERVMgKi8KKwogCS8qCiAJICogVHVybiBhIG5lZ2F0aXZlIHNuYXBzaG90IHZhbHVlIChpbnZhbGlkKSwgYSBzbmFwc2hvdCB2YWx1ZSBvZgogCSAqIDAgKHVuc3BlY2lmaWVkKSwgb3IgYSB2YWx1ZSBiaWdnZXIgdGhhbiB0aGUgbm9ybWFsIG1heGltdW0KQEAgLTEwMjgsNyArMTE3NSw5IEBACiAKIAkJaWYgKFBhY2tldFNldEh3RmlsdGVyKHB3LT5hZGFwdGVyLE5ESVNfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMpID09IEZBTFNFKQogCQl7Ci0JCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgImZhaWxlZCB0byBzZXQgaGFyZHdhcmUgZmlsdGVyIHRvIHByb21pc2N1b3VzIG1vZGUiKTsKKwkJCXBjYXBfZm10X2Vycm1zZ19mb3Jfd2luMzJfZXJyKHAtPmVycmJ1ZiwKKwkJCSAgICBQQ0FQX0VSUkJVRl9TSVpFLCBHZXRMYXN0RXJyb3IoKSwKKwkJCSAgICAiZmFpbGVkIHRvIHNldCBoYXJkd2FyZSBmaWx0ZXIgdG8gcHJvbWlzY3VvdXMgbW9kZSIpOwogCQkJZ290byBiYWQ7CiAJCX0KIAl9CkBAIC0xMDQ2LDcgKzExOTUsOSBAQAogCQkJTkRJU19QQUNLRVRfVFlQRV9CUk9BRENBU1QgfAogCQkJTkRJU19QQUNLRVRfVFlQRV9NVUxUSUNBU1QpID09IEZBTFNFKQogCQl7Ci0JCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgImZhaWxlZCB0byBzZXQgaGFyZHdhcmUgZmlsdGVyIHRvIG5vbi1wcm9taXNjdW91cyBtb2RlIik7CisJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX3dpbjMyX2VycihwLT5lcnJidWYsCisJCQkgICAgUENBUF9FUlJCVUZfU0laRSwgR2V0TGFzdEVycm9yKCksCisJCQkgICAgImZhaWxlZCB0byBzZXQgaGFyZHdhcmUgZmlsdGVyIHRvIG5vbi1wcm9taXNjdW91cyBtb2RlIik7CiAJCQlnb3RvIGJhZDsKIAkJfQogCX0KQEAgLTEwNjMsMTIgKzEyMTQsMTIgQEAKIAkJICogSWYgdGhlIGJ1ZmZlciBzaXplIHdhc24ndCBleHBsaWNpdGx5IHNldCwgZGVmYXVsdCB0bwogCQkgKiBXSU4zMl9ERUZBVUxUX0tFUk5FTF9CVUZGRVJfU0laRS4KIAkJICovCi0JIAlpZiAocC0+b3B0LmJ1ZmZlcl9zaXplID09IDApCi0JIAkJcC0+b3B0LmJ1ZmZlcl9zaXplID0gV0lOMzJfREVGQVVMVF9LRVJORUxfQlVGRkVSX1NJWkU7CisJCWlmIChwLT5vcHQuYnVmZmVyX3NpemUgPT0gMCkKKwkJCXAtPm9wdC5idWZmZXJfc2l6ZSA9IFdJTjMyX0RFRkFVTFRfS0VSTkVMX0JVRkZFUl9TSVpFOwogCiAJCWlmKFBhY2tldFNldEJ1ZmYocHctPmFkYXB0ZXIscC0+b3B0LmJ1ZmZlcl9zaXplKT09RkFMU0UpCiAJCXsKLQkJCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiZHJpdmVyIGVycm9yOiBub3QgZW5vdWdoIG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUga2VybmVsIGJ1ZmZlciIpOworCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiZHJpdmVyIGVycm9yOiBub3QgZW5vdWdoIG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUga2VybmVsIGJ1ZmZlciIpOwogCQkJZ290byBiYWQ7CiAJCX0KIApAQCAtMTA4NSwxMCArMTIzNiw5IEBACiAJCQkvKiB0ZWxsIHRoZSBkcml2ZXIgdG8gY29weSB0aGUgYnVmZmVyIGFzIHNvb24gYXMgZGF0YSBhcnJpdmVzICovCiAJCQlpZihQYWNrZXRTZXRNaW5Ub0NvcHkocHctPmFkYXB0ZXIsMCk9PUZBTFNFKQogCQkJewotCQkJCXBjYXBfd2luMzJfZXJyX3RvX3N0cihHZXRMYXN0RXJyb3IoKSwgZXJyYnVmKTsKLQkJCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJCQkgICAgIkVycm9yIGNhbGxpbmcgUGFja2V0U2V0TWluVG9Db3B5OiAlcyIsCi0JCQkJICAgIGVycmJ1Zik7CisJCQkJcGNhcF9mbXRfZXJybXNnX2Zvcl93aW4zMl9lcnIocC0+ZXJyYnVmLAorCQkJCSAgICBQQ0FQX0VSUkJVRl9TSVpFLCBHZXRMYXN0RXJyb3IoKSwKKwkJCQkgICAgIkVycm9yIGNhbGxpbmcgUGFja2V0U2V0TWluVG9Db3B5Iik7CiAJCQkJZ290byBiYWQ7CiAJCQl9CiAJCX0KQEAgLTEwOTcsMTAgKzEyNDcsOSBAQAogCQkJLyogdGVsbCB0aGUgZHJpdmVyIHRvIGNvcHkgdGhlIGJ1ZmZlciBvbmx5IGlmIGl0IGNvbnRhaW5zIGF0IGxlYXN0IDE2SyAqLwogCQkJaWYoUGFja2V0U2V0TWluVG9Db3B5KHB3LT5hZGFwdGVyLDE2MDAwKT09RkFMU0UpCiAJCQl7Ci0JCQkJcGNhcF93aW4zMl9lcnJfdG9fc3RyKEdldExhc3RFcnJvcigpLCBlcnJidWYpOwotCQkJCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkJCSAgICAiRXJyb3IgY2FsbGluZyBQYWNrZXRTZXRNaW5Ub0NvcHk6ICVzIiwKLQkJCQkgICAgZXJyYnVmKTsKKwkJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX3dpbjMyX2VycihwLT5lcnJidWYsCisJCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsIEdldExhc3RFcnJvcigpLAorCQkJCSAgICAiRXJyb3IgY2FsbGluZyBQYWNrZXRTZXRNaW5Ub0NvcHkiKTsKIAkJCQlnb3RvIGJhZDsKIAkJCX0KIAkJfQpAQCAtMTExOSw3ICsxMjY4LDcgQEAKIAkJaW50CQlwb3N0eXBlID0gMDsKIAkJY2hhcglrZXluYW1lWzUxMl07CiAKLQkJcGNhcF9zbnByaW50ZihrZXluYW1lLCBzaXplb2Yoa2V5bmFtZSksICIlc1xcQ2FyZFBhcmFtc1xcJXMiLAorCQlzbnByaW50ZihrZXluYW1lLCBzaXplb2Yoa2V5bmFtZSksICIlc1xcQ2FyZFBhcmFtc1xcJXMiLAogCQkJIlNZU1RFTVxcQ3VycmVudENvbnRyb2xTZXRcXFNlcnZpY2VzXFxEQUciLAogCQkJc3Ryc3RyKF9zdHJsd3IocC0+b3B0LmRldmljZSksICJkYWciKSk7CiAJCWRvCkBAIC0xMTU4LDYgKzEzMDcsMjkgQEAKICNlbmRpZiAvKiBIQVZFX0RBR19BUEkgKi8KIAl9CiAKKwkvKgorCSAqIElmIHRoZXJlJ3Mgbm8gZmlsdGVyIHByb2dyYW0gaW5zdGFsbGVkLCB0aGVyZSdzCisJICogbm8gaW5kaWNhdGlvbiB0byB0aGUga2VybmVsIG9mIHdoYXQgdGhlIHNuYXBzaG90CisJICogbGVuZ3RoIHNob3VsZCBiZSwgc28gbm8gc25hcHNob3R0aW5nIGlzIGRvbmUuCisJICoKKwkgKiBUaGVyZWZvcmUsIHdoZW4gd2Ugb3BlbiB0aGUgZGV2aWNlLCB3ZSBpbnN0YWxsCisJICogYW4gImFjY2VwdCBldmVyeXRoaW5nIiBmaWx0ZXIgd2l0aCB0aGUgc3BlY2lmaWVkCisJICogc25hcHNob3QgbGVuZ3RoLgorCSAqLworCXRvdGFsX2luc24uY29kZSA9ICh1X3Nob3J0KShCUEZfUkVUIHwgQlBGX0spOworCXRvdGFsX2luc24uanQgPSAwOworCXRvdGFsX2luc24uamYgPSAwOworCXRvdGFsX2luc24uayA9IHAtPnNuYXBzaG90OworCisJdG90YWxfcHJvZy5iZl9sZW4gPSAxOworCXRvdGFsX3Byb2cuYmZfaW5zbnMgPSAmdG90YWxfaW5zbjsKKwlpZiAoIVBhY2tldFNldEJwZihwdy0+YWRhcHRlciwgJnRvdGFsX3Byb2cpKSB7CisJCXBjYXBfZm10X2Vycm1zZ19mb3Jfd2luMzJfZXJyKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJICAgIEdldExhc3RFcnJvcigpLCAiUGFja2V0U2V0QnBmIik7CisJCXN0YXR1cyA9IFBDQVBfRVJST1I7CisJCWdvdG8gYmFkOworCX0KKwogCVBhY2tldFNldFJlYWRUaW1lb3V0KHB3LT5hZGFwdGVyLCBwLT5vcHQudGltZW91dCk7CiAKIAkvKiBkaXNhYmxlIGxvb3BiYWNrIGNhcHR1cmUgaWYgcmVxdWVzdGVkICovCkBAIC0xMTY1LDcgKzEzMzcsNyBAQAogCXsKIAkJaWYgKCFQYWNrZXRTZXRMb29wYmFja0JlaGF2aW9yKHB3LT5hZGFwdGVyLCBOUEZfRElTQUJMRV9MT09QQkFDSykpCiAJCXsKLQkJCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJICAgICJVbmFibGUgdG8gZGlzYWJsZSB0aGUgY2FwdHVyZSBvZiBsb29wYmFjayBwYWNrZXRzLiIpOwogCQkJZ290byBiYWQ7CiAJCX0KQEAgLTExOTQsNiArMTM2Niw3IEBACiAJcC0+Z2V0bm9uYmxvY2tfb3AgPSBwY2FwX2dldG5vbmJsb2NrX25wZjsKIAlwLT5zZXRub25ibG9ja19vcCA9IHBjYXBfc2V0bm9uYmxvY2tfbnBmOwogCXAtPnN0YXRzX29wID0gcGNhcF9zdGF0c19ucGY7CisJcC0+YnJlYWtsb29wX29wID0gcGNhcF9icmVha2xvb3BfbnBmOwogCXAtPnN0YXRzX2V4X29wID0gcGNhcF9zdGF0c19leF9ucGY7CiAJcC0+c2V0YnVmZl9vcCA9IHBjYXBfc2V0YnVmZl9ucGY7CiAJcC0+c2V0bW9kZV9vcCA9IHBjYXBfc2V0bW9kZV9ucGY7CkBAIC0xMjIxLDcgKzEzOTQsNyBAQAogCSAqLwogCXAtPmhhbmRsZSA9IHB3LT5hZGFwdGVyLT5oRmlsZTsKIAotCXJldHVybiAoMCk7CisJcmV0dXJuIChzdGF0dXMpOwogYmFkOgogCXBjYXBfY2xlYW51cF9ucGYocCk7CiAJcmV0dXJuIChQQ0FQX0VSUk9SKTsKQEAgLTEyNDAsMTMgKzE0MTMsMTc3IEBACiBwY2FwX2NyZWF0ZV9pbnRlcmZhY2UoY29uc3QgY2hhciAqZGV2aWNlIF9VXywgY2hhciAqZWJ1ZikKIHsKIAlwY2FwX3QgKnA7CisjaWZkZWYgSEFWRV9QQUNLRVRfR0VUX1RJTUVTVEFNUF9NT0RFUworCWNoYXIgKmRldmljZV9jb3B5OworCUFEQVBURVIgKmFkYXB0ZXI7CisJVUxPTkcgbnVtX3RzX21vZGVzOworCUJPT0wgcmV0OworCURXT1JEIGVycm9yOworCVVMT05HICptb2RlczsKKyNlbmRpZgogCi0JcCA9IHBjYXBfY3JlYXRlX2NvbW1vbihlYnVmLCBzaXplb2Yoc3RydWN0IHBjYXBfd2luKSk7CisJcCA9IFBDQVBfQ1JFQVRFX0NPTU1PTihlYnVmLCBzdHJ1Y3QgcGNhcF93aW4pOwogCWlmIChwID09IE5VTEwpCiAJCXJldHVybiAoTlVMTCk7CiAKIAlwLT5hY3RpdmF0ZV9vcCA9IHBjYXBfYWN0aXZhdGVfbnBmOwogCXAtPmNhbl9zZXRfcmZtb25fb3AgPSBwY2FwX2Nhbl9zZXRfcmZtb25fbnBmOworCisjaWZkZWYgSEFWRV9QQUNLRVRfR0VUX1RJTUVTVEFNUF9NT0RFUworCS8qCisJICogRmlyc3QsIGZpbmQgb3V0IGhvdyBtYW55IHRpbWUgc3RhbXAgbW9kZXMgd2UgaGF2ZS4KKwkgKiBUbyBkbyB0aGF0LCB3ZSBoYXZlIHRvIG9wZW4gdGhlIGFkYXB0ZXIuCisJICoKKwkgKiBYWFggLSBQYWNrZXRPcGVuQWRhcHRlcigpIHRha2VzIGEgbm9uLWNvbnN0IHBvaW50ZXIKKwkgKiBhcyBhbiBhcmd1bWVudCwgc28gd2UgbWFrZSBhIGNvcHkgb2YgdGhlIGFyZ3VtZW50IGFuZAorCSAqIHBhc3MgdGhhdCB0byBpdC4KKwkgKi8KKwlkZXZpY2VfY29weSA9IHN0cmR1cChkZXZpY2UpOworCWFkYXB0ZXIgPSBQYWNrZXRPcGVuQWRhcHRlcihkZXZpY2VfY29weSk7CisJZnJlZShkZXZpY2VfY29weSk7CisJaWYgKGFkYXB0ZXIgIT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIEdldCB0aGUgdG90YWwgbnVtYmVyIG9mIHRpbWUgc3RhbXAgbW9kZXMuCisJCSAqCisJCSAqIFRoZSBidWZmZXIgZm9yIFBhY2tldEdldFRpbWVzdGFtcE1vZGVzKCkgaXMKKwkJICogYSBzZXF1ZW5jZSBvZiAxIG9yIG1vcmUgVUxPTkdzLiAgV2hhdCdzCisJCSAqIHBhc3NlZCB0byBQYWNrZXRHZXRUaW1lc3RhbXBNb2RlcygpIHNob3VsZCBoYXZlCisJCSAqIHRoZSB0b3RhbCBudW1iZXIgb2YgVUxPTkdzIGluIHRoZSBmaXJzdCBVTE9ORzsKKwkJICogd2hhdCdzIHJldHVybmVkICpmcm9tKiBQYWNrZXRHZXRUaW1lc3RhbXBNb2RlcygpCisJCSAqIGhhcyB0aGUgdG90YWwgbnVtYmVyIG9mIHRpbWUgc3RhbXAgbW9kZXMgaW4KKwkJICogdGhlIGZpcnN0IFVMT05HLgorCQkgKgorCQkgKiBZZXMsIHRoYXQgbWVhbnMgaWYgdGhlcmUgYXJlIE4gdGltZSBzdGFtcAorCQkgKiBtb2RlcywgdGhlIGZpcnN0IFVMT05HIHNob3VsZCBiZSBzZXQgdG8gTisxCisJCSAqIG9uIGlucHV0LCBhbmQgd2lsbCBiZSBzZXQgdG8gTiBvbiBvdXRwdXQuCisJCSAqCisJCSAqIFdlIGZpcnN0IG1ha2UgYSBjYWxsIHRvIFBhY2tldEdldFRpbWVzdGFtcE1vZGVzKCkKKwkJICogd2l0aCBhIHBvaW50ZXIgdG8gYSBzaW5nbGUgVUxPTkcgc2V0IHRvIDE7IHRoZQorCQkgKiBjYWxsIHNob3VsZCBmYWlsIHdpdGggRVJST1JfTU9SRV9EQVRBICh1bmxlc3MKKwkJICogdGhlcmUgYXJlICpubyogbW9kZXMsIGJ1dCB0aGF0IHNob3VsZCBuZXZlcgorCQkgKiBoYXBwZW4pLCBhbmQgdGhhdCBVTE9ORyBzaG91bGQgYmUgc2V0IHRvIHRoZQorCQkgKiBudW1iZXIgb2YgbW9kZXMuCisJCSAqLworCQludW1fdHNfbW9kZXMgPSAxOworCQlyZXQgPSBQYWNrZXRHZXRUaW1lc3RhbXBNb2RlcyhhZGFwdGVyLCAmbnVtX3RzX21vZGVzKTsKKwkJaWYgKCFyZXQpIHsKKwkJCS8qCisJCQkgKiBPSywgaXQgZmFpbGVkLiAgRGlkIGl0IGZhaWwgd2l0aAorCQkJICogRVJST1JfTU9SRV9EQVRBPworCQkJICovCisJCQllcnJvciA9IEdldExhc3RFcnJvcigpOworCQkJaWYgKGVycm9yICE9IEVSUk9SX01PUkVfREFUQSkgeworCQkJCS8qCisJCQkJICogTm8sIHNvbWUgb3RoZXIgZXJyb3IuICBGYWlsLgorCQkJCSAqLworCQkJCXBjYXBfZm10X2Vycm1zZ19mb3Jfd2luMzJfZXJyKGVidWYsCisJCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsIEdldExhc3RFcnJvcigpLAorCQkJCSAgICAiRXJyb3IgY2FsbGluZyBQYWNrZXRHZXRUaW1lc3RhbXBNb2RlcyIpOworCQkJCXBjYXBfY2xvc2UocCk7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFllcywgc28gd2Ugbm93IGtub3cgaG93IG1hbnkgdHlwZXMgdG8gZmV0Y2guCisJCQkgKgorCQkgICAgCSAqIFRoZSBidWZmZXIgbmVlZHMgdG8gaGF2ZSBvbmUgVUxPTkcgZm9yIHRoZQorCQkgICAgCSAqIGNvdW50IGFuZCBudW1fdHNfbW9kZXMgVUxPTkdzIGZvciB0aGUKKwkJICAgIAkgKiBudW1fdHNfbW9kZXMgdGltZSBzdGFtcCB0eXBlcy4KKwkJICAgIAkgKi8KKwkJCW1vZGVzID0gKFVMT05HICopbWFsbG9jKCgxICsgbnVtX3RzX21vZGVzKSAqIHNpemVvZihVTE9ORykpOworCQkJaWYgKG1vZGVzID09IE5VTEwpIHsKKwkJCQkvKiBPdXQgb2YgbWVtb3J5LiAqLworCQkJCS8qIFhYWCBTRVQgZWJ1ZiAqLworCQkJCXBjYXBfY2xvc2UocCk7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJCW1vZGVzWzBdID0gMSArIG51bV90c19tb2RlczsKKwkJCWlmICghUGFja2V0R2V0VGltZXN0YW1wTW9kZXMoYWRhcHRlciwgbW9kZXMpKSB7CisJCQkJcGNhcF9mbXRfZXJybXNnX2Zvcl93aW4zMl9lcnIoZWJ1ZiwKKwkJCQkgICAgUENBUF9FUlJCVUZfU0laRSwgR2V0TGFzdEVycm9yKCksCisJCQkJICAgICJFcnJvciBjYWxsaW5nIFBhY2tldEdldFRpbWVzdGFtcE1vZGVzIik7CisJCQkJZnJlZShtb2Rlcyk7CisJCQkJcGNhcF9jbG9zZShwKTsKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCQkJaWYgKG1vZGVzWzBdICE9IG51bV90c19tb2RlcykgeworCQkJCXNucHJpbnRmKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkJICAgICJGaXJzdCBQYWNrZXRHZXRUaW1lc3RhbXBNb2RlcygpIGNhbGwgZ2l2ZXMgJWx1IG1vZGVzLCBzZWNvbmQgY2FsbCBnaXZlcyAldSBtb2RlcyIsCisJCQkJICAgIG51bV90c19tb2RlcywgbW9kZXNbMF0pOworCQkJCWZyZWUobW9kZXMpOworCQkJCXBjYXBfY2xvc2UocCk7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJCWlmIChudW1fdHNfbW9kZXMgIT0gMCkgeworCQkJCXVfaW50IG51bV90c190eXBlczsKKworCQkJCS8qCisJCQkJICogQWxsb2NhdGUgYSBidWZmZXIgYmlnIGVub3VnaCBmb3IKKwkJCQkgKiBQQ0FQX1RTVEFNUF9IT1NUIChkZWZhdWx0KSBwbHVzCisJCQkJICogdGhlIGV4cGxpY2l0bHkgc3BlY2lmaWVkIG1vZGVzLgorCQkJCSAqLworCQkJCXAtPnRzdGFtcF90eXBlX2xpc3QgPSBtYWxsb2MoKDEgKyBtb2Rlc1swXSkgKiBzaXplb2YodV9pbnQpKTsKKwkJCQlpZiAocC0+dHN0YW1wX3R5cGVfbGlzdCA9PSBOVUxMKSB7CisJCQkJCS8qIFhYWCBTRVQgZWJ1ZiAqLworCQkJCQlmcmVlKG1vZGVzKTsKKwkJCQkJcGNhcF9jbG9zZShwKTsKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQkJbnVtX3RzX3R5cGVzID0gMDsKKwkJCQlwLT50c3RhbXBfdHlwZV9saXN0W251bV90c190eXBlc10gPQorCQkJCSAgICBQQ0FQX1RTVEFNUF9IT1NUOworCQkJCW51bV90c190eXBlcysrOworCQkJCWZvciAoVUxPTkcgaSA9IDA7IGkgPCBtb2Rlc1swXTsgaSsrKSB7CisJCQkJCXN3aXRjaCAobW9kZXNbaSArIDFdKSB7CisKKwkJCQkJY2FzZSBUSU1FU1RBTVBNT0RFX1NJTkdMRV9TWU5DSFJPTklaQVRJT046CisJCQkJCQkvKgorCQkJCQkJICogQmV0dGVyIHRoYW4gbG93LXJlcywKKwkJCQkJCSAqIGJ1dCAqbm90KiBzeW5jaHJvbml6ZWQKKwkJCQkJCSAqIHdpdGggdGhlIE9TIGNsb2NrLgorCQkJCQkJICovCisJCQkJCQlwLT50c3RhbXBfdHlwZV9saXN0W251bV90c190eXBlc10gPQorCQkJCQkJICAgIFBDQVBfVFNUQU1QX0hPU1RfSElQUkVDX1VOU1lOQ0VEOworCQkJCQkJbnVtX3RzX3R5cGVzKys7CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlIFRJTUVTVEFNUE1PREVfUVVFUllTWVNURU1USU1FOgorCQkJCQkJLyoKKwkJCQkJCSAqIExvdy1yZXMsIGJ1dCBzeW5jaHJvbml6ZWQKKwkJCQkJCSAqIHdpdGggdGhlIE9TIGNsb2NrLgorCQkJCQkJICovCisJCQkJCQlwLT50c3RhbXBfdHlwZV9saXN0W251bV90c190eXBlc10gPQorCQkJCQkJICAgIFBDQVBfVFNUQU1QX0hPU1RfTE9XUFJFQzsKKwkJCQkJCW51bV90c190eXBlcysrOworCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSBUSU1FU1RBTVBNT0RFX1FVRVJZU1lTVEVNVElNRV9QUkVDSVNFOgorCQkJCQkJLyoKKwkJCQkJCSAqIEhpZ2gtcmVzLCBhbmQgc3luY2hyb25pemVkCisJCQkJCQkgKiB3aXRoIHRoZSBPUyBjbG9jay4KKwkJCQkJCSAqLworCQkJCQkJcC0+dHN0YW1wX3R5cGVfbGlzdFtudW1fdHNfdHlwZXNdID0KKwkJCQkJCSAgICBQQ0FQX1RTVEFNUF9IT1NUX0hJUFJFQzsKKwkJCQkJCW51bV90c190eXBlcysrOworCQkJCQkJYnJlYWs7CisKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCS8qCisJCQkJCQkgKiBVbmtub3duLCBzbyB3ZSBjYW4ndAorCQkJCQkJICogcmVwb3J0IGl0LgorCQkJCQkJICovCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlwLT50c3RhbXBfdHlwZV9jb3VudCA9IG51bV90c190eXBlczsKKwkJCQlmcmVlKG1vZGVzKTsKKwkJCX0KKwkJfQorCQlQYWNrZXRDbG9zZUFkYXB0ZXIoYWRhcHRlcik7CisJfQorI2VuZGlmIC8qIEhBVkVfUEFDS0VUX0dFVF9USU1FU1RBTVBfTU9ERVMgKi8KKwogCXJldHVybiAocCk7CiB9CiAKQEAgLTEzMDksMTQgKzE2NDYsMTQgQEAKIH0KIAogLyoKLSAqIFdlIGZpbHRlciBhdCB1c2VyIGxldmVsLCBzaW5jZSB0aGUga2VybmVsIGRyaXZlciBkb2VzJ3QgcHJvY2VzcyB0aGUgcGFja2V0cworICogV2UgZmlsdGVyIGF0IHVzZXIgbGV2ZWwsIHNpbmNlIHRoZSBrZXJuZWwgZHJpdmVyIGRvZXNuJ3QgcHJvY2VzcyB0aGUgcGFja2V0cwogICovCiBzdGF0aWMgaW50CiBwY2FwX3NldGZpbHRlcl93aW4zMl9kYWcocGNhcF90ICpwLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKmZwKSB7CiAKIAlpZighZnApCiAJewotCQlzdHJsY3B5KHAtPmVycmJ1ZiwgInNldGZpbHRlcjogTm8gZmlsdGVyIHNwZWNpZmllZCIsIHNpemVvZihwLT5lcnJidWYpKTsKKwkJcGNhcF9zdHJsY3B5KHAtPmVycmJ1ZiwgInNldGZpbHRlcjogTm8gZmlsdGVyIHNwZWNpZmllZCIsIHNpemVvZihwLT5lcnJidWYpKTsKIAkJcmV0dXJuICgtMSk7CiAJfQogCkBAIC0xMzQ1LDcgKzE2ODIsNiBAQAogewogCXN0cnVjdCBwY2FwX3dpbiAqcHcgPSBwLT5wcml2OwogCWludCBuZXd0aW1lb3V0OwotCWNoYXIgd2luX2VycmJ1ZltQQ0FQX0VSUkJVRl9TSVpFKzFdOwogCiAJaWYgKG5vbmJsb2NrKSB7CiAJCS8qCkBAIC0xMzY1LDkgKzE3MDEsOCBAQAogCQluZXd0aW1lb3V0ID0gcC0+b3B0LnRpbWVvdXQ7CiAJfQogCWlmICghUGFja2V0U2V0UmVhZFRpbWVvdXQocHctPmFkYXB0ZXIsIG5ld3RpbWVvdXQpKSB7Ci0JCXBjYXBfd2luMzJfZXJyX3RvX3N0cihHZXRMYXN0RXJyb3IoKSwgd2luX2VycmJ1Zik7Ci0JCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkgICAgIlBhY2tldFNldFJlYWRUaW1lb3V0OiAlcyIsIHdpbl9lcnJidWYpOworCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX3dpbjMyX2VycihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICBHZXRMYXN0RXJyb3IoKSwgIlBhY2tldFNldFJlYWRUaW1lb3V0Iik7CiAJCXJldHVybiAoLTEpOwogCX0KIAlwdy0+bm9uYmxvY2sgPSAobmV3dGltZW91dCA9PSAtMSk7CkBAIC0xNTUxLDYgKzE4ODYsMTIgQEAKIAkJCSAqIHJ1bm5pbmcuCiAJCQkgKi8KIAkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQkvKgorCQkJICogVW5rbm93bi4KKwkJCSAqLworCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgewogCQkvKgpAQCAtMTU4Nyw3ICsxOTI4LDEzIEBACiAJaWYgKHN0YXR1cyA9PSAwKSB7CiAJCS8qCiAJCSAqIFdlIGdvdCB0aGUgcGh5c2ljYWwgbWVkaXVtLgorCQkgKgorCQkgKiBYWFggLSB3ZSBtaWdodCB3YW50IHRvIGNoZWNrIGZvciBOZGlzUGh5c2ljYWxNZWRpdW1XaU1heAorCQkgKiBhbmQgTmRpc1BoeXNpY2FsTWVkaXVtTmF0aXZlODAyXzE1XzQgYmVpbmcKKwkJICogcGFydCBvZiB0aGUgZW51bSwgYW5kIGNoZWNrIGZvciB0aG9zZSBpbiB0aGUgIndpcmVsZXNzIgorCQkgKiBjYXNlLgogCQkgKi8KK0RJQUdfT0ZGX0VOVU1fU1dJVENICiAJCXN3aXRjaCAocGh5c19tZWRpdW0pIHsKIAogCQljYXNlIE5kaXNQaHlzaWNhbE1lZGl1bVdpcmVsZXNzTGFuOgpAQCAtMTYwNCwxMCArMTk1MSwxMSBAQAogCiAJCWRlZmF1bHQ6CiAJCQkvKgotCQkJICogTm90IHdpcmVsZXNzLgorCQkJICogTm90IHdpcmVsZXNzIG9yIHVua25vd24KIAkJCSAqLwogCQkJYnJlYWs7CiAJCX0KK0RJQUdfT05fRU5VTV9TV0lUQ0gKIAl9CiAjZW5kaWYKIApAQCAtMTYzOCw2ICsxOTg2LDEzIEBACiAJCQkgKi8KIAkJCSpmbGFncyB8PSBQQ0FQX0lGX0NPTk5FQ1RJT05fU1RBVFVTX0RJU0NPTk5FQ1RFRDsKIAkJCWJyZWFrOworCisJCWNhc2UgTWVkaWFDb25uZWN0U3RhdGVVbmtub3duOgorCQlkZWZhdWx0OgorCQkJLyoKKwkJCSAqIEl0J3MgdW5rbm93biB3aGV0aGVyIGl0J3MgY29ubmVjdGVkIG9yIG5vdC4KKwkJCSAqLworCQkJYnJlYWs7CiAJCX0KIAl9CiAjZWxzZQpAQCAtMTY4NCw3ICsyMDM5LDYgQEAKIAljaGFyICpBZGFwdGVyc05hbWU7CiAJVUxPTkcgTmFtZUxlbmd0aDsKIAljaGFyICpuYW1lOwotCWNoYXIgb3VyX2VycmJ1ZltQQ0FQX0VSUkJVRl9TSVpFKzFdOwogCiAJLyoKIAkgKiBGaW5kIG91dCBob3cgYmlnIGEgYnVmZmVyIHdlIG5lZWQuCkBAIC0xNzEwLDkgKzIwNjQsOCBAQAogCiAJCWlmIChsYXN0X2Vycm9yICE9IEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVIpCiAJCXsKLQkJCXBjYXBfd2luMzJfZXJyX3RvX3N0cihsYXN0X2Vycm9yLCBvdXJfZXJyYnVmKTsKLQkJCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkJICAgICJQYWNrZXRHZXRBZGFwdGVyTmFtZXM6ICVzIiwgb3VyX2VycmJ1Zik7CisJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX3dpbjMyX2VycihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkgICAgbGFzdF9lcnJvciwgIlBhY2tldEdldEFkYXB0ZXJOYW1lcyIpOwogCQkJcmV0dXJuICgtMSk7CiAJCX0KIAl9CkBAIC0xNzIyLDE0ICsyMDc1LDEzIEBACiAJQWRhcHRlcnNOYW1lID0gKGNoYXIqKSBtYWxsb2MoTmFtZUxlbmd0aCk7CiAJaWYgKEFkYXB0ZXJzTmFtZSA9PSBOVUxMKQogCXsKLQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJDYW5ub3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSB0byBsaXN0IHRoZSBhZGFwdGVycy4iKTsKKwkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiQ2Fubm90IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgdG8gbGlzdCB0aGUgYWRhcHRlcnMuIik7CiAJCXJldHVybiAoLTEpOwogCX0KIAogCWlmICghUGFja2V0R2V0QWRhcHRlck5hbWVzKEFkYXB0ZXJzTmFtZSwgJk5hbWVMZW5ndGgpKSB7Ci0JCXBjYXBfd2luMzJfZXJyX3RvX3N0cihHZXRMYXN0RXJyb3IoKSwgb3VyX2VycmJ1Zik7Ci0JCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiUGFja2V0R2V0QWRhcHRlck5hbWVzOiAlcyIsCi0JCSAgICBvdXJfZXJyYnVmKTsKKwkJcGNhcF9mbXRfZXJybXNnX2Zvcl93aW4zMl9lcnIoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkgICAgR2V0TGFzdEVycm9yKCksICJQYWNrZXRHZXRBZGFwdGVyTmFtZXMiKTsKIAkJZnJlZShBZGFwdGVyc05hbWUpOwogCQlyZXR1cm4gKC0xKTsKIAl9CkBAIC0xNzY0LDYgKzIxMTYsMjAgQEAKIAluYW1lID0gJkFkYXB0ZXJzTmFtZVswXTsKIAl3aGlsZSAoKm5hbWUgIT0gJ1wwJykgewogCQlicGZfdV9pbnQzMiBmbGFncyA9IDA7CisKKyNpZmRlZiBIQVZFX0FJUlBDQVBfQVBJCisJCS8qCisJCSAqIElzIHRoaXMgYW4gQWlyUGNhcCBkZXZpY2U/CisJCSAqIElmIHNvLCBpZ25vcmUgaXQ7IGl0J2xsIGdldCBhZGRlZCBsYXRlciwgYnkgdGhlCisJCSAqIEFpclBjYXAgY29kZS4KKwkJICovCisJCWlmIChkZXZpY2VfaXNfYWlycGNhcChuYW1lLCBlcnJidWYpID09IDEpIHsKKwkJCW5hbWUgKz0gc3RybGVuKG5hbWUpICsgMTsKKwkJCWRlc2MgKz0gc3RybGVuKGRlc2MpICsgMTsKKwkJCWNvbnRpbnVlOworCQl9CisjZW5kaWYKKwogI2lmZGVmIEhBVkVfUEFDS0VUX0lTX0xPT1BCQUNLX0FEQVBURVIKIAkJLyoKIAkJICogSXMgdGhpcyBhIGxvb3BiYWNrIGludGVyZmFjZT8KQEAgLTE4MTgsMTIgKzIxODQsMjcgQEAKIHsKIAlEV09SRCBkd1ZlcnNpb247CiAJRFdPUkQgZHdXaW5kb3dzTWFqb3JWZXJzaW9uOwotCWNoYXIgb3VyX2VycmJ1ZltQQ0FQX0VSUkJVRl9TSVpFKzFdOwogCi0jcHJhZ21hIHdhcm5pbmcgKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcgKGRpc2FibGU6IDQ5OTYpIC8qIGRpc2FibGUgTVNWQydzIEdldFZlcnNpb24oKSBkZXByZWNhdGVkIHdhcm5pbmcgaGVyZSAqLworCS8qCisJICogV2UgZGlzYWJsZSB0aGlzIGluICJuZXcgQVBJIiBtb2RlLCBiZWNhdXNlIDEpIGluIFdpblBjYXAvTnBjYXAsCisJICogaXQgbWF5IHJldHVybiBVVEYtMTYgc3RyaW5ncywgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5CisJICogcmVhc29ucywgYW5kIHdlJ3JlIGFsc28gZGlzYWJsaW5nIHRoZSBoYWNrIHRvIG1ha2UgdGhhdCB3b3JrLAorCSAqIGZvciBub3QtZ29pbmctcGFzdC10aGUtZW5kLW9mLWEtc3RyaW5nIHJlYXNvbnMsIGFuZCAyKSB3ZQorCSAqIHdhbnQgaXRzIGJlaGF2aW9yIHRvIGJlIGNvbnNpc3RlbnQuCisJICoKKwkgKiBJbiBhZGRpdGlvbiwgaXQncyBub3QgdGhyZWFkLXNhZmUsIHNvIHdlJ3ZlIG1hcmtlZCBpdCBhcworCSAqIGRlcHJlY2F0ZWQuCisJICovCisJaWYgKHBjYXBfbmV3X2FwaSkgeworCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICAicGNhcF9sb29rdXBkZXYoKSBpcyBkZXByZWNhdGVkIGFuZCBpcyBub3Qgc3VwcG9ydGVkIGluIHByb2dyYW1zIGNhbGxpbmcgcGNhcF9pbml0KCkiKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKy8qIGRpc2FibGUgTVNWQydzIEdldFZlcnNpb24oKSBkZXByZWNhdGVkIHdhcm5pbmcgaGVyZSAqLworRElBR19PRkZfREVQUkVDQVRJT04KIAlkd1ZlcnNpb24gPSBHZXRWZXJzaW9uKCk7CS8qIGdldCB0aGUgT1MgdmVyc2lvbiAqLwotI3ByYWdtYSB3YXJuaW5nIChwb3ApCitESUFHX09OX0RFUFJFQ0FUSU9OCiAJZHdXaW5kb3dzTWFqb3JWZXJzaW9uID0gKERXT1JEKShMT0JZVEUoTE9XT1JEKGR3VmVyc2lvbikpKTsKIAogCWlmIChkd1ZlcnNpb24gPj0gMHg4MDAwMDAwMCAmJiBkd1dpbmRvd3NNYWpvclZlcnNpb24gPj0gNCkgewpAQCAtMTg1NCwxNSArMjIzNSwxNCBAQAogCiAJCWlmKFRBZGFwdGVyc05hbWUgPT0gTlVMTCkKIAkJewotCQkJKHZvaWQpcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIik7CisJCQkodm9pZClzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIik7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCiAJCWlmICggIVBhY2tldEdldEFkYXB0ZXJOYW1lcygoUFRTVFIpVEFkYXB0ZXJzTmFtZSwmTmFtZUxlbmd0aCkgKQogCQl7Ci0JCQlwY2FwX3dpbjMyX2Vycl90b19zdHIoR2V0TGFzdEVycm9yKCksIG91cl9lcnJidWYpOwotCQkJKHZvaWQpcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCi0JCQkJIlBhY2tldEdldEFkYXB0ZXJOYW1lczogJXMiLCBvdXJfZXJyYnVmKTsKKwkJCXBjYXBfZm10X2Vycm1zZ19mb3Jfd2luMzJfZXJyKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCSAgICBHZXRMYXN0RXJyb3IoKSwgIlBhY2tldEdldEFkYXB0ZXJOYW1lcyIpOwogCQkJZnJlZShUQWRhcHRlcnNOYW1lKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CkBAIC0yMDAwLDU5ICsyMzgwLDQ4IEBACiAgKiB0cmVlLiAgSW5jbHVkZSB2ZXJzaW9uLmggZnJvbSB0aGF0IHNvdXJjZSB0cmVlIHRvIGdldCB0aGUgV2luUGNhcC9OcGNhcAogICogdmVyc2lvbi4KICAqCi0gKiBYWFggLSBpdCdkIGJlIG5pY2UgaWYgd2UgY291bGQgc29tZWhvdyBnZW5lcmF0ZSB0aGUgV2luUGNhcCB2ZXJzaW9uIG51bWJlcgotICogd2hlbiBidWlsZGluZyBXaW5QY2FwLiAgKEl0J2QgYmUgbmljZSB0byBkbyBzbyBmb3IgdGhlIHBhY2tldC5kbGwgdmVyc2lvbgotICogbnVtYmVyIGFzIHdlbGwuKQorICogWFhYIC0gaXQnZCBiZSBuaWNlIGlmIHdlIGNvdWxkIHNvbWVob3cgZ2VuZXJhdGUgdGhlIFdpblBjYXAvTnBjYXAgdmVyc2lvbgorICogbnVtYmVyIHdoZW4gYnVpbGRpbmcgYXMgcGFydCBvZiBXaW5QY2FwL05wY2FwLiAgKEl0J2QgYmUgbmljZSB0byBkbyBzbworICogZm9yIHRoZSBwYWNrZXQuZGxsIHZlcnNpb24gbnVtYmVyIGFzIHdlbGwuKQogICovCiAjaW5jbHVkZSAiLi4vLi4vdmVyc2lvbi5oIgogCiBzdGF0aWMgY29uc3QgY2hhciBwY2FwX3ZlcnNpb25fc3RyaW5nW10gPQogCVdJTlBDQVBfUFJPRFVDVF9OQU1FICIgdmVyc2lvbiAiIFdJTlBDQVBfVkVSX1NUUklORyAiLCBiYXNlZCBvbiAiIFBDQVBfVkVSU0lPTl9TVFJJTkc7Ci1zdGF0aWMgY29uc3QgY2hhciBwY2FwX3ZlcnNpb25fc3RyaW5nX3BhY2tldF9kbGxfZm10W10gPQotCVdJTlBDQVBfUFJPRFVDVF9OQU1FICIgdmVyc2lvbiAiIFdJTlBDQVBfVkVSX1NUUklORyAiIChwYWNrZXQuZGxsIHZlcnNpb24gJXMpLCBiYXNlZCBvbiAiIFBDQVBfVkVSU0lPTl9TVFJJTkc7CiAKIGNvbnN0IGNoYXIgKgogcGNhcF9saWJfdmVyc2lvbih2b2lkKQogewotCWNoYXIgKnBhY2tldF92ZXJzaW9uX3N0cmluZzsKLQlzaXplX3QgZnVsbF9wY2FwX3ZlcnNpb25fc3RyaW5nX2xlbjsKLQljaGFyICpmdWxsX3BjYXBfdmVyc2lvbl9zdHJpbmc7Ci0KIAlpZiAocGNhcF9saWJfdmVyc2lvbl9zdHJpbmcgPT0gTlVMTCkgewogCQkvKgogCQkgKiBHZW5lcmF0ZSB0aGUgdmVyc2lvbiBzdHJpbmcuCiAJCSAqLwotCQlwYWNrZXRfdmVyc2lvbl9zdHJpbmcgPSBQYWNrZXRHZXRWZXJzaW9uKCk7CisJCWNvbnN0IGNoYXIgKnBhY2tldF92ZXJzaW9uX3N0cmluZyA9IFBhY2tldEdldFZlcnNpb24oKTsKKwogCQlpZiAoc3RyY21wKFdJTlBDQVBfVkVSX1NUUklORywgcGFja2V0X3ZlcnNpb25fc3RyaW5nKSA9PSAwKSB7CiAJCQkvKgotCQkJICogV2luUGNhcCB2ZXJzaW9uIHN0cmluZyBhbmQgcGFja2V0LmRsbCB2ZXJzaW9uCi0JCQkgKiBzdHJpbmcgYXJlIHRoZSBzYW1lOyBqdXN0IHJlcG9ydCB0aGUgV2luUGNhcAorCQkJICogV2luUGNhcC9OcGNhcCB2ZXJzaW9uIHN0cmluZyBhbmQgcGFja2V0LmRsbCB2ZXJzaW9uCisJCQkgKiBzdHJpbmcgYXJlIHRoZSBzYW1lOyBqdXN0IHJlcG9ydCB0aGUgV2luUGNhcC9OcGNhcAogCQkJICogdmVyc2lvbi4KIAkJCSAqLwogCQkJcGNhcF9saWJfdmVyc2lvbl9zdHJpbmcgPSBwY2FwX3ZlcnNpb25fc3RyaW5nOwogCQl9IGVsc2UgewogCQkJLyoKLQkJCSAqIFdpblBjYXAgdmVyc2lvbiBzdHJpbmcgYW5kIHBhY2tldC5kbGwgdmVyc2lvbgorCQkJICogV2luUGNhcC9OcGNhcCB2ZXJzaW9uIHN0cmluZyBhbmQgcGFja2V0LmRsbCB2ZXJzaW9uCiAJCQkgKiBzdHJpbmcgYXJlIGRpZmZlcmVudDsgdGhhdCBzaG91bGRuJ3QgYmUgdGhlCiAJCQkgKiBjYXNlICh0aGUgdHdvIGxpYnJhcmllcyBzaG91bGQgY29tZSBmcm9tIHRoZQotCQkJICogc2FtZSB2ZXJzaW9uIG9mIFdpblBjYXApLCBzbyB3ZSByZXBvcnQgYm90aAorCQkJICogc2FtZSB2ZXJzaW9uIG9mIFdpblBjYXAvTnBjYXApLCBzbyB3ZSByZXBvcnQgYm90aAogCQkJICogdmVyc2lvbnMuCi0JCQkgKgotCQkJICogVGhlIC0yIGlzIGZvciB0aGUgJXMgaW4gdGhlIGZvcm1hdCBzdHJpbmcsCi0JCQkgKiB3aGljaCB3aWxsIGJlIHJlcGxhY2VkIGJ5IHBhY2tldF92ZXJzaW9uX3N0cmluZy4KIAkJCSAqLwotCQkJZnVsbF9wY2FwX3ZlcnNpb25fc3RyaW5nX2xlbiA9Ci0JCQkgICAgKHNpemVvZiBwY2FwX3ZlcnNpb25fc3RyaW5nX3BhY2tldF9kbGxfZm10IC0gMikgKwotCQkJICAgIHN0cmxlbihwYWNrZXRfdmVyc2lvbl9zdHJpbmcpOwotCQkJZnVsbF9wY2FwX3ZlcnNpb25fc3RyaW5nID0gbWFsbG9jKGZ1bGxfcGNhcF92ZXJzaW9uX3N0cmluZ19sZW4pOwotCQkJaWYgKGZ1bGxfcGNhcF92ZXJzaW9uX3N0cmluZyA9PSBOVUxMKQotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQlwY2FwX3NucHJpbnRmKGZ1bGxfcGNhcF92ZXJzaW9uX3N0cmluZywKLQkJCSAgICBmdWxsX3BjYXBfdmVyc2lvbl9zdHJpbmdfbGVuLAotCQkJICAgIHBjYXBfdmVyc2lvbl9zdHJpbmdfcGFja2V0X2RsbF9mbXQsCi0JCQkgICAgcGFja2V0X3ZlcnNpb25fc3RyaW5nKTsKKwkJCWNoYXIgKmZ1bGxfcGNhcF92ZXJzaW9uX3N0cmluZzsKKworCQkJaWYgKHBjYXBfYXNwcmludGYoJmZ1bGxfcGNhcF92ZXJzaW9uX3N0cmluZywKKwkJCSAgICBXSU5QQ0FQX1BST0RVQ1RfTkFNRSAiIHZlcnNpb24gIiBXSU5QQ0FQX1ZFUl9TVFJJTkcgIiAocGFja2V0LmRsbCB2ZXJzaW9uICVzKSwgYmFzZWQgb24gIiBQQ0FQX1ZFUlNJT05fU1RSSU5HLAorCQkJICAgIHBhY2tldF92ZXJzaW9uX3N0cmluZykgIT0gLTEpIHsKKwkJCQkvKiBTdWNjZXNzICovCisJCQkJcGNhcF9saWJfdmVyc2lvbl9zdHJpbmcgPSBmdWxsX3BjYXBfdmVyc2lvbl9zdHJpbmc7CisJCQl9CiAJCX0KLQkJcGNhcF9saWJfdmVyc2lvbl9zdHJpbmcgPSBmdWxsX3BjYXBfdmVyc2lvbl9zdHJpbmc7CiAJfQogCXJldHVybiAocGNhcF9saWJfdmVyc2lvbl9zdHJpbmcpOwogfQpAQCAtMjA2MywzNSArMjQzMiwyMiBAQAogICogbGlicGNhcCBiZWluZyBidWlsdCBmb3IgV2luZG93cywgbm90IGFzIHBhcnQgb2YgYSBXaW5QY2FwL05wY2FwIHNvdXJjZQogICogdHJlZS4KICAqLwotc3RhdGljIGNvbnN0IGNoYXIgcGNhcF92ZXJzaW9uX3N0cmluZ19wYWNrZXRfZGxsX2ZtdFtdID0KLQlQQ0FQX1ZFUlNJT05fU1RSSU5HICIgKHBhY2tldC5kbGwgdmVyc2lvbiAlcykiOwogY29uc3QgY2hhciAqCiBwY2FwX2xpYl92ZXJzaW9uKHZvaWQpCiB7Ci0JY2hhciAqcGFja2V0X3ZlcnNpb25fc3RyaW5nOwotCXNpemVfdCBmdWxsX3BjYXBfdmVyc2lvbl9zdHJpbmdfbGVuOwotCWNoYXIgKmZ1bGxfcGNhcF92ZXJzaW9uX3N0cmluZzsKLQogCWlmIChwY2FwX2xpYl92ZXJzaW9uX3N0cmluZyA9PSBOVUxMKSB7CiAJCS8qCiAJCSAqIEdlbmVyYXRlIHRoZSB2ZXJzaW9uIHN0cmluZy4gIFJlcG9ydCB0aGUgcGFja2V0LmRsbAogCQkgKiB2ZXJzaW9uLgotCQkgKgotCQkgKiBUaGUgLTIgaXMgZm9yIHRoZSAlcyBpbiB0aGUgZm9ybWF0IHN0cmluZywgd2hpY2ggd2lsbAotCQkgKiBiZSByZXBsYWNlZCBieSBwYWNrZXRfdmVyc2lvbl9zdHJpbmcuCiAJCSAqLwotCQlwYWNrZXRfdmVyc2lvbl9zdHJpbmcgPSBQYWNrZXRHZXRWZXJzaW9uKCk7Ci0JCWZ1bGxfcGNhcF92ZXJzaW9uX3N0cmluZ19sZW4gPQotCQkgICAgKHNpemVvZiBwY2FwX3ZlcnNpb25fc3RyaW5nX3BhY2tldF9kbGxfZm10IC0gMikgKwotCQkgICAgc3RybGVuKHBhY2tldF92ZXJzaW9uX3N0cmluZyk7Ci0JCWZ1bGxfcGNhcF92ZXJzaW9uX3N0cmluZyA9IG1hbGxvYyhmdWxsX3BjYXBfdmVyc2lvbl9zdHJpbmdfbGVuKTsKLQkJaWYgKGZ1bGxfcGNhcF92ZXJzaW9uX3N0cmluZyA9PSBOVUxMKQotCQkJcmV0dXJuIChOVUxMKTsKLQkJcGNhcF9zbnByaW50ZihmdWxsX3BjYXBfdmVyc2lvbl9zdHJpbmcsCi0JCSAgICBmdWxsX3BjYXBfdmVyc2lvbl9zdHJpbmdfbGVuLAotCQkgICAgcGNhcF92ZXJzaW9uX3N0cmluZ19wYWNrZXRfZGxsX2ZtdCwKLQkJICAgIHBhY2tldF92ZXJzaW9uX3N0cmluZyk7Ci0JCXBjYXBfbGliX3ZlcnNpb25fc3RyaW5nID0gZnVsbF9wY2FwX3ZlcnNpb25fc3RyaW5nOworCQljaGFyICpmdWxsX3BjYXBfdmVyc2lvbl9zdHJpbmc7CisKKwkJaWYgKHBjYXBfYXNwcmludGYoJmZ1bGxfcGNhcF92ZXJzaW9uX3N0cmluZywKKwkJICAgIFBDQVBfVkVSU0lPTl9TVFJJTkcgIiAocGFja2V0LmRsbCB2ZXJzaW9uICVzKSIsCisJCSAgICBQYWNrZXRHZXRWZXJzaW9uKCkpICE9IC0xKSB7CisJCQkvKiBTdWNjZXNzICovCisJCQlwY2FwX2xpYl92ZXJzaW9uX3N0cmluZyA9IGZ1bGxfcGNhcF92ZXJzaW9uX3N0cmluZzsKKwkJfQogCX0KIAlyZXR1cm4gKHBjYXBfbGliX3ZlcnNpb25fc3RyaW5nKTsKIH0KZGlmZiAtLWdpdCBhL3BjYXAtbnVsbC5jIGIvcGNhcC1udWxsLmMKaW5kZXggOTJhNWUyZC4uMmFlMjdiZiAxMDA2NDQKLS0tIGEvcGNhcC1udWxsLmMKKysrIGIvcGNhcC1udWxsLmMKQEAgLTMyLDEyICszMiwxMiBAQAogcGNhcF90ICoKIHBjYXBfY3JlYXRlX2ludGVyZmFjZShjb25zdCBjaGFyICpkZXZpY2UgX1VfLCBjaGFyICplYnVmKQogewotCSh2b2lkKXN0cmxjcHkoZWJ1Ziwgbm9zdXAsIFBDQVBfRVJSQlVGX1NJWkUpOworCSh2b2lkKXBjYXBfc3RybGNweShlYnVmLCBub3N1cCwgUENBUF9FUlJCVUZfU0laRSk7CiAJcmV0dXJuIChOVUxMKTsKIH0KIAogaW50Ci1wY2FwX3BsYXRmb3JtX2ZpbmRkZXZzKHBjYXBfaWZfbGlzdF90ICpkZXZsaXN0cCwgY2hhciAqZXJyYnVmKQorcGNhcF9wbGF0Zm9ybV9maW5kZGV2cyhwY2FwX2lmX2xpc3RfdCAqZGV2bGlzdHAgX1VfLCBjaGFyICplcnJidWYgX1VfKQogewogCS8qCiAJICogVGhlcmUgYXJlIG5vIGludGVyZmFjZXMgb24gd2hpY2ggd2UgY2FuIGNhcHR1cmUuCkBAIC01MCw3ICs1MCw3IEBACiBwY2FwX2xvb2t1cG5ldChjb25zdCBjaGFyICpkZXZpY2UgX1VfLCBicGZfdV9pbnQzMiAqbmV0cCBfVV8sCiAgICAgYnBmX3VfaW50MzIgKm1hc2twIF9VXywgY2hhciAqZXJyYnVmKQogewotCSh2b2lkKXN0cmxjcHkoZXJyYnVmLCBub3N1cCwgUENBUF9FUlJCVUZfU0laRSk7CisJKHZvaWQpcGNhcF9zdHJsY3B5KGVycmJ1Ziwgbm9zdXAsIFBDQVBfRVJSQlVGX1NJWkUpOwogCXJldHVybiAoLTEpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9wY2FwLXBmLmMgYi9wY2FwLXBmLmMKaW5kZXggZmRlOTdiYS4uNDU2M2EyMiAxMDA2NDQKLS0tIGEvcGNhcC1wZi5jCisrKyBiL3BjYXAtcGYuYwpAQCAtNDgsNyArNDgsNiBAQAogI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CiAjaW5jbHVkZSA8bmV0aW5ldC90Y3BpcC5oPgogCi0jaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPG5ldGRiLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTEwNCw5ICsxMDMsNyBAQAogCXJlZ2lzdGVyIHVfY2hhciAqcCwgKmJwOwogCXJlZ2lzdGVyIGludCBjYywgbiwgYnVmbGVuLCBpbmM7CiAJcmVnaXN0ZXIgc3RydWN0IGVuc3RhbXAgKnNwOwotI2lmZGVmIExCTF9BTElHTgogCXN0cnVjdCBlbnN0YW1wIHN0YW1wOwotI2VuZGlmCiAJcmVnaXN0ZXIgdV9pbnQgcGFkOwogCiAgYWdhaW46CkBAIC0xNjAsMTkgKzE1NywxNyBAQAogCQkJfQogCQl9CiAJCWlmIChjYyA8IHNpemVvZigqc3ApKSB7Ci0JCQlwY2FwX3NucHJpbnRmKHBjLT5lcnJidWYsIHNpemVvZihwYy0+ZXJyYnVmKSwKKwkJCXNucHJpbnRmKHBjLT5lcnJidWYsIHNpemVvZihwYy0+ZXJyYnVmKSwKIAkJCSAgICAicGYgc2hvcnQgcmVhZCAoJWQpIiwgY2MpOwogCQkJcmV0dXJuICgtMSk7CiAJCX0KLSNpZmRlZiBMQkxfQUxJR04KIAkJaWYgKChsb25nKWJwICYgMykgewogCQkJc3AgPSAmc3RhbXA7CiAJCQltZW1jcHkoKGNoYXIgKilzcCwgKGNoYXIgKilicCwgc2l6ZW9mKCpzcCkpOwogCQl9IGVsc2UKLSNlbmRpZgogCQkJc3AgPSAoc3RydWN0IGVuc3RhbXAgKilicDsKIAkJaWYgKHNwLT5lbnNfc3RhbXBsZW4gIT0gc2l6ZW9mKCpzcCkpIHsKLQkJCXBjYXBfc25wcmludGYocGMtPmVycmJ1Ziwgc2l6ZW9mKHBjLT5lcnJidWYpLAorCQkJc25wcmludGYocGMtPmVycmJ1Ziwgc2l6ZW9mKHBjLT5lcnJidWYpLAogCQkJICAgICJwZiBzaG9ydCBzdGFtcGxlbiAoJWQpIiwKIAkJCSAgICBzcC0+ZW5zX3N0YW1wbGVuKTsKIAkJCXJldHVybiAoLTEpOwpAQCAtMjA1LDcgKzIwMCw3IEBACiAJCSAqIHNraXBwaW5nIHRoYXQgcGFkZGluZy4KIAkJICovCiAJCWlmIChwZi0+ZmlsdGVyaW5nX2luX2tlcm5lbCB8fAotCQkgICAgYnBmX2ZpbHRlcihwYy0+ZmNvZGUuYmZfaW5zbnMsIHAsIHNwLT5lbnNfY291bnQsIGJ1ZmxlbikpIHsKKwkJICAgIHBjYXBfZmlsdGVyKHBjLT5mY29kZS5iZl9pbnNucywgcCwgc3AtPmVuc19jb3VudCwgYnVmbGVuKSkgewogCQkJc3RydWN0IHBjYXBfcGt0aGRyIGg7CiAJCQlwZi0+VG90QWNjZXB0ZWQrKzsKIAkJCWgudHMgPSBzcC0+ZW5zX3RzdGFtcDsKQEAgLTIyNiw3ICsyMjEsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1wY2FwX2luamVjdF9wZihwY2FwX3QgKnAsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCitwY2FwX2luamVjdF9wZihwY2FwX3QgKnAsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IHNpemUpCiB7CiAJaW50IHJldDsKIApAQCAtMjYxLDcgKzI1Niw3IEBACiAJICoJZnVsbC4KIAkgKgogCSAqCSJwc19pZmRyb3AiIGNvdW50cyBwYWNrZXRzIGRyb3BwZWQgYnkgdGhlIG5ldHdvcmsKLQkgKglpbnRlZmFjZSAocmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXkgd291bGQgaGF2ZSBwYXNzZWQKKwkgKglpbnRlcmZhY2UgKHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5IHdvdWxkIGhhdmUgcGFzc2VkCiAJICoJdGhlIGlucHV0IGZpbHRlciwgb2YgY291cnNlKS4KIAkgKgogCSAqIElmIHBhY2tldCBmaWx0ZXJpbmcgaXMgbm90IGJlaW5nIGRvbmUgaW4gdGhlIGtlcm5lbDoKQEAgLTI3Myw3ICsyNjgsNyBAQAogCSAqCXRoZSB1c2VybGFuZCBmaWx0ZXIuCiAJICoKIAkgKgkicHNfaWZkcm9wIiBjb3VudHMgcGFja2V0cyBkcm9wcGVkIGJ5IHRoZSBuZXR3b3JrCi0JICoJaW50ZWZhY2UgKHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5IHdvdWxkIGhhdmUgcGFzc2VkCisJICoJaW50ZXJmYWNlIChyZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSB3b3VsZCBoYXZlIHBhc3NlZAogCSAqCXRoZSBpbnB1dCBmaWx0ZXIsIG9mIGNvdXJzZSkuCiAJICoKIAkgKiBUaGVzZSBzdGF0aXN0aWNzIGRvbid0IGluY2x1ZGUgcGFja2V0cyBub3QgeWV0IHJlYWQgZnJvbQpAQCAtMzMxLDcgKzMyNiw3IEBACiAJCXAtPmZkID0gcGZvcGVuKHAtPm9wdC5kZXZpY2UsIE9fUkRPTkxZKTsKIAlpZiAocC0+ZmQgPCAwKSB7CiAJCWlmIChlcnJubyA9PSBFQUNDRVMpIHsKLQkJCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJICAgICJwZiBvcGVuOiAlczogUGVybWlzc2lvbiBkZW5pZWRcbiIKICJ5b3VyIHN5c3RlbSBtYXkgbm90IGJlIHByb3Blcmx5IGNvbmZpZ3VyZWQ7IHNlZSB0aGUgcGFja2V0ZmlsdGVyKDQpIG1hbiBwYWdlIiwKIAkJCSAgICBwLT5vcHQuZGV2aWNlKTsKQEAgLTQ2NCw3ICs0NTksNyBAQAogCQkgKiBmcmFtaW5nIiwgdGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8sIGFzIHRoYXQKIAkJICogZG9lc24ndCBzcGVjaWZ5IGEgcGFydGljdWxhciB0eXBlIG9mIGhlYWRlci4KIAkJICovCi0JCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICAidW5rbm93biBkYXRhLWxpbmsgdHlwZSAldSIsIGRldnBhcmFtcy5lbmRfZGV2X3R5cGUpOwogCQllcnIgPSBQQ0FQX0VSUk9SOwogCQlnb3RvIGJhZDsKQEAgLTU0MCw3ICs1MzUsNyBAQAogewogCXBjYXBfdCAqcDsKIAotCXAgPSBwY2FwX2NyZWF0ZV9jb21tb24oZWJ1Ziwgc2l6ZW9mIChzdHJ1Y3QgcGNhcF9wZikpOworCXAgPSBQQ0FQX0NSRUFURV9DT01NT04oZWJ1Ziwgc3RydWN0IHBjYXBfcGYpOwogCWlmIChwID09IE5VTEwpCiAJCXJldHVybiAoTlVMTCk7CiAKZGlmZiAtLWdpdCBhL3BjYXAtcmRtYXNuaWZmLmMgYi9wY2FwLXJkbWFzbmlmZi5jCmluZGV4IGM1MGZlM2YuLjIyNDgyMWQgMTAwNjQ0Ci0tLSBhL3BjYXAtcmRtYXNuaWZmLmMKKysrIGIvcGNhcC1yZG1hc25pZmYuYwpAQCAtNTcsNyArNTcsNyBAQAogCXN0cnVjdCBpYnZfZmxvdyAqICAgICAgICAgICAgICAgZmxvdzsKIAlzdHJ1Y3QgaWJ2X21yICoJCQltcjsKIAl1X2NoYXIgKgkJCW9uZXNob3RfYnVmZmVyOwotCXVuc2lnbmVkCQkJcG9ydF9udW07CisJdW5zaWduZWQgbG9uZwkJCXBvcnRfbnVtOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3FfZXZlbnQ7CiAJdV9pbnQgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXRzX3JlY3Y7CiB9OwpAQCAtMTU2LDcgKzE1Niw3IEBACiAJCXBrdGQgPSAodV9jaGFyICopIGhhbmRsZS0+YnVmZmVyICsgd2Mud3JfaWQgKiBSRE1BU05JRkZfUkVDRUlWRV9TSVpFOwogCiAJCWlmIChoYW5kbGUtPmZjb2RlLmJmX2luc25zID09IE5VTEwgfHwKLQkJICAgIGJwZl9maWx0ZXIoaGFuZGxlLT5mY29kZS5iZl9pbnNucywgcGt0ZCwgcGt0aC5sZW4sIHBrdGguY2FwbGVuKSkgeworCQkgICAgcGNhcF9maWx0ZXIoaGFuZGxlLT5mY29kZS5iZl9pbnNucywgcGt0ZCwgcGt0aC5sZW4sIHBrdGguY2FwbGVuKSkgewogCQkJY2FsbGJhY2sodXNlciwgJnBrdGgsIHBrdGQpOwogCQkJKytwcml2LT5wYWNrZXRzX3JlY3Y7CiAJCQkrK2NvdW50OwpAQCAtMTk3LDIxICsxOTcsMjEgQEAKIAogCXByaXYtPmNvbnRleHQgPSBpYnZfb3Blbl9kZXZpY2UocHJpdi0+cmRtYV9kZXZpY2UpOwogCWlmICghcHJpdi0+Y29udGV4dCkgewotCQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAgICAgICJGYWlsZWQgdG8gb3BlbiBkZXZpY2UgJXMiLCBoYW5kbGUtPm9wdC5kZXZpY2UpOwogCQlnb3RvIGVycm9yOwogCX0KIAogCXByaXYtPnBkID0gaWJ2X2FsbG9jX3BkKHByaXYtPmNvbnRleHQpOwogCWlmICghcHJpdi0+cGQpIHsKLQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgICAgICAiRmFpbGVkIHRvIGFsbG9jIFBEIGZvciBkZXZpY2UgJXMiLCBoYW5kbGUtPm9wdC5kZXZpY2UpOwogCQlnb3RvIGVycm9yOwogCX0KIAogCXByaXYtPmNoYW5uZWwgPSBpYnZfY3JlYXRlX2NvbXBfY2hhbm5lbChwcml2LT5jb250ZXh0KTsKIAlpZiAoIXByaXYtPmNoYW5uZWwpIHsKLQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSBjb21wIGNoYW5uZWwgZm9yIGRldmljZSAlcyIsIGhhbmRsZS0+b3B0LmRldmljZSk7CiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtMjE5LDcgKzIxOSw3IEBACiAJcHJpdi0+Y3EgPSBpYnZfY3JlYXRlX2NxKHByaXYtPmNvbnRleHQsIFJETUFTTklGRl9OVU1fUkVDRUlWRVMsCiAJCQkJIE5VTEwsIHByaXYtPmNoYW5uZWwsIDApOwogCWlmICghcHJpdi0+Y3EpIHsKLQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSBDUSBmb3IgZGV2aWNlICVzIiwgaGFuZGxlLT5vcHQuZGV2aWNlKTsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC0yMzMsNyArMjMzLDcgQEAKIAlxcF9pbml0X2F0dHIucXBfdHlwZSA9IElCVl9RUFRfUkFXX1BBQ0tFVDsKIAlwcml2LT5xcCA9IGlidl9jcmVhdGVfcXAocHJpdi0+cGQsICZxcF9pbml0X2F0dHIpOwogCWlmICghcHJpdi0+cXApIHsKLQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSBRUCBmb3IgZGV2aWNlICVzIiwgaGFuZGxlLT5vcHQuZGV2aWNlKTsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC0yNDIsNyArMjQyLDcgQEAKIAlxcF9hdHRyLnFwX3N0YXRlID0gSUJWX1FQU19JTklUOwogCXFwX2F0dHIucG9ydF9udW0gPSBwcml2LT5wb3J0X251bTsKIAlpZiAoaWJ2X21vZGlmeV9xcChwcml2LT5xcCwgJnFwX2F0dHIsIElCVl9RUF9TVEFURSB8IElCVl9RUF9QT1JUKSkgewotCQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAgICAgICJGYWlsZWQgdG8gbW9kaWZ5IFFQIHRvIElOSVQgZm9yIGRldmljZSAlcyIsIGhhbmRsZS0+b3B0LmRldmljZSk7CiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtMjUwLDcgKzI1MCw3IEBACiAJbWVtc2V0KCZxcF9hdHRyLCAwLCBzaXplb2YgcXBfYXR0cik7CiAJcXBfYXR0ci5xcF9zdGF0ZSA9IElCVl9RUFNfUlRSOwogCWlmIChpYnZfbW9kaWZ5X3FwKHByaXYtPnFwLCAmcXBfYXR0ciwgSUJWX1FQX1NUQVRFKSkgewotCQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAgICAgICJGYWlsZWQgdG8gbW9kaWZ5IFFQIHRvIFJUUiBmb3IgZGV2aWNlICVzIiwgaGFuZGxlLT5vcHQuZGV2aWNlKTsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC0yNjEsNyArMjYxLDcgQEAKIAlmbG93X2F0dHIucG9ydCA9IHByaXYtPnBvcnRfbnVtOwogCXByaXYtPmZsb3cgPSBpYnZfY3JlYXRlX2Zsb3cocHJpdi0+cXAsICZmbG93X2F0dHIpOwogCWlmICghcHJpdi0+ZmxvdykgewotCQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAgICAgICJGYWlsZWQgdG8gY3JlYXRlIGZsb3cgZm9yIGRldmljZSAlcyIsIGhhbmRsZS0+b3B0LmRldmljZSk7CiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtMjY5LDIxICsyNjksMjEgQEAKIAloYW5kbGUtPmJ1ZnNpemUgPSBSRE1BU05JRkZfTlVNX1JFQ0VJVkVTICogUkRNQVNOSUZGX1JFQ0VJVkVfU0laRTsKIAloYW5kbGUtPmJ1ZmZlciA9IG1hbGxvYyhoYW5kbGUtPmJ1ZnNpemUpOwogCWlmICghaGFuZGxlLT5idWZmZXIpIHsKLQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgICAgICAiRmFpbGVkIHRvIGFsbG9jYXRlIHJlY2VpdmUgYnVmZmVyIGZvciBkZXZpY2UgJXMiLCBoYW5kbGUtPm9wdC5kZXZpY2UpOwogCQlnb3RvIGVycm9yOwogCX0KIAogCXByaXYtPm9uZXNob3RfYnVmZmVyID0gbWFsbG9jKFJETUFTTklGRl9SRUNFSVZFX1NJWkUpOwogCWlmICghcHJpdi0+b25lc2hvdF9idWZmZXIpIHsKLQkJcGNhcF9zbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgICAgICAiRmFpbGVkIHRvIGFsbG9jYXRlIG9uZXNob3QgYnVmZmVyIGZvciBkZXZpY2UgJXMiLCBoYW5kbGUtPm9wdC5kZXZpY2UpOwogCQlnb3RvIGVycm9yOwogCX0KIAogCXByaXYtPm1yID0gaWJ2X3JlZ19tcihwcml2LT5wZCwgaGFuZGxlLT5idWZmZXIsIGhhbmRsZS0+YnVmc2l6ZSwgSUJWX0FDQ0VTU19MT0NBTF9XUklURSk7CiAJaWYgKCFwcml2LT5tcikgewotCQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAgICAgICJGYWlsZWQgdG8gcmVnaXN0ZXIgTVIgZm9yIGRldmljZSAlcyIsIGhhbmRsZS0+b3B0LmRldmljZSk7CiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtMzYxLDE0ICszNjEsMTggQEAKIAlpbnQgbnVtZGV2OwogCXNpemVfdCBuYW1lbGVuOwogCWNvbnN0IGNoYXIgKnBvcnQ7Ci0JdW5zaWduZWQgcG9ydF9udW07CisJdW5zaWduZWQgbG9uZyBwb3J0X251bTsKIAlpbnQgaTsKIAlwY2FwX3QgKnAgPSBOVUxMOwogCiAJKmlzX291cnMgPSAwOwogCiAJZGV2X2xpc3QgPSBpYnZfZ2V0X2RldmljZV9saXN0KCZudW1kZXYpOwotCWlmICghZGV2X2xpc3QgfHwgIW51bWRldikgeworCWlmICghZGV2X2xpc3QpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmICghbnVtZGV2KSB7CisJCWlidl9mcmVlX2RldmljZV9saXN0KGRldl9saXN0KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0zOTEsNyArMzk1LDcgQEAKIAkJICAgICFzdHJuY21wKGRldmljZSwgZGV2X2xpc3RbaV0tPm5hbWUsIG5hbWVsZW4pKSB7CiAJCQkqaXNfb3VycyA9IDE7CiAKLQkJCXAgPSBwY2FwX2NyZWF0ZV9jb21tb24oZWJ1Ziwgc2l6ZW9mIChzdHJ1Y3QgcGNhcF9yZG1hc25pZmYpKTsKKwkJCXAgPSBQQ0FQX0NSRUFURV9DT01NT04oZWJ1Ziwgc3RydWN0IHBjYXBfcmRtYXNuaWZmKTsKIAkJCWlmIChwKSB7CiAJCQkJcC0+YWN0aXZhdGVfb3AgPSByZG1hc25pZmZfYWN0aXZhdGU7CiAJCQkJcHJpdiA9IHAtPnByaXY7CkBAIC00MTUsNyArNDE5LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogCWRldl9saXN0ID0gaWJ2X2dldF9kZXZpY2VfbGlzdCgmbnVtZGV2KTsKLQlpZiAoIWRldl9saXN0IHx8ICFudW1kZXYpIHsKKwlpZiAoIWRldl9saXN0KSB7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNDI2LDExICs0MzAsMTAgQEAKIAkJICovCiAJCWlmICghYWRkX2RldihkZXZsaXN0cCwgZGV2X2xpc3RbaV0tPm5hbWUsIDAsICJSRE1BIHNuaWZmZXIiLCBlcnJfc3RyKSkgewogCQkJcmV0ID0gLTE7Ci0JCQlnb3RvIG91dDsKKwkJCWJyZWFrOwogCQl9CiAJfQogCi1vdXQ6CiAJaWJ2X2ZyZWVfZGV2aWNlX2xpc3QoZGV2X2xpc3QpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9wY2FwLXJwY2FwLmMgYi9wY2FwLXJwY2FwLmMKaW5kZXggZTlkNjI0NS4uYTI2MTJlOSAxMDA2NDQKLS0tIGEvcGNhcC1ycGNhcC5jCisrKyBiL3BjYXAtcnBjYXAuYwpAQCAtNDYsNiArNDYsMTQgQEAKICNpbmNsdWRlICJycGNhcC1wcm90b2NvbC5oIgogI2luY2x1ZGUgInBjYXAtcnBjYXAuaCIKIAorI2lmZGVmIF9XSU4zMgorI2luY2x1ZGUgImNoYXJjb252LmgiCQkvKiBmb3IgdXRmXzhfdG9fYWNwX3RydW5jYXRlZCgpICovCisjZW5kaWYKKworI2lmZGVmIEhBVkVfT1BFTlNTTAorI2luY2x1ZGUgInNzbHV0aWxzLmgiCisjZW5kaWYKKwogLyoKICAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcGNhcCBtb2R1bGUgZm9yIGNhcHR1cmluZyBmcm9tIGEgcmVtb3RlIG1hY2hpbmUncwogICogaW50ZXJmYWNlcyB1c2luZyB0aGUgUlBDQVAgcHJvdG9jb2wuCkBAIC04Myw2ICs5MSw3IEBACiB7CiAJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgaG9zdDsKIAlTT0NLRVQgc29ja2N0cmw7CisJU1NMICpzc2w7CiAJdWludDggcHJvdG9jb2xfdmVyc2lvbjsKIAlzdHJ1Y3QgYWN0aXZlaG9zdHMgKm5leHQ7CiB9OwpAQCAtOTcsNiArMTA2LDcgQEAKICAqIHBjYXBfcmVtb3RlYWN0X2NsZWFudXAoKSBmb3IgbW9yZSBkZXRhaWxzLgogICovCiBzdGF0aWMgU09DS0VUIHNvY2ttYWluOworc3RhdGljIFNTTCAqc3NsX21haW47CiAKIC8qCiAgKiBQcml2YXRlIGRhdGEgZm9yIGNhcHR1cmluZyByZW1vdGVseSB1c2luZyB0aGUgcnBjYXAgcHJvdG9jb2wuCkBAIC0xMTEsMTEgKzEyMSwxMyBAQAogCiAJU09DS0VUIHJtdF9zb2NrY3RybDsJCS8qIHNvY2tldCBJRCBvZiB0aGUgc29ja2V0IHVzZWQgZm9yIHRoZSBjb250cm9sIGNvbm5lY3Rpb24gKi8KIAlTT0NLRVQgcm10X3NvY2tkYXRhOwkJLyogc29ja2V0IElEIG9mIHRoZSBzb2NrZXQgdXNlZCBmb3IgdGhlIGRhdGEgY29ubmVjdGlvbiAqLworCVNTTCAqY3RybF9zc2wsICpkYXRhX3NzbDsJLyogb3B0aW9uYWwgdHJhbnNwb3J0IG9mIHJtdF9zb2NrY3RybCBhbmQgcm10X3NvY2tkYXRhIHZpYSBUTFMgKi8KIAlpbnQgcm10X2ZsYWdzOwkJCS8qIHdlIGhhdmUgdG8gc2F2ZSBmbGFncywgc2luY2UgdGhleSBhcmUgcGFzc2VkIGJ5IHRoZSBwY2FwX29wZW5fbGl2ZSgpLCBidXQgdGhleSBhcmUgdXNlZCBieSB0aGUgcGNhcF9zdGFydGNhcHR1cmUoKSAqLwogCWludCBybXRfY2Fwc3RhcnRlZDsJCS8qICd0cnVlJyBpZiB0aGUgY2FwdHVyZSBpcyBhbHJlYWR5IHN0YXJ0ZWQgKG5lZWRlZCB0byBrbm9lIGlmIHdlIGhhdmUgdG8gY2FsbCB0aGUgcGNhcF9zdGFydGNhcHR1cmUoKSAqLwogCWNoYXIgKmN1cnJlbnRmaWx0ZXI7CQkvKiBQb2ludGVyIHRvIGEgYnVmZmVyIChhbGxvY2F0ZWQgYXQgcnVuLXRpbWUpIHRoYXQgc3RvcmVzIHRoZSBjdXJyZW50IGZpbHRlci4gTmVlZGVkIHdoZW4gZmxhZyBQQ0FQX09QRU5GTEFHX05PQ0FQVFVSRV9SUENBUCBpcyB0dXJuZWQgb24uICovCiAKIAl1aW50OCBwcm90b2NvbF92ZXJzaW9uOwkJLyogbmVnb3RpYXRlZCBwcm90b2NvbCB2ZXJzaW9uICovCisJdWludDggdXNlc19zc2w7CQkJCS8qIFVzZXIgYXNrZWQgZm9yIHJwY2FwcyBzY2hlbWUgKi8KIAogCXVuc2lnbmVkIGludCBUb3ROZXREcm9wczsJLyoga2VlcHMgdGhlIG51bWJlciBvZiBwYWNrZXRzIHRoYXQgaGF2ZSBiZWVuIGRyb3BwZWQgYnkgdGhlIG5ldHdvcmsgKi8KIApAQCAtMTU1LDE1ICsxNjcsMTQgQEAKIHN0YXRpYyBpbnQgcGNhcF9zZXRmaWx0ZXJfcnBjYXAocGNhcF90ICpmcCwgc3RydWN0IGJwZl9wcm9ncmFtICpwcm9nKTsKIHN0YXRpYyBpbnQgcGNhcF9zZXRzYW1wbGluZ19yZW1vdGUocGNhcF90ICpmcCk7CiBzdGF0aWMgaW50IHBjYXBfc3RhcnRjYXB0dXJlX3JlbW90ZShwY2FwX3QgKmZwKTsKLXN0YXRpYyBpbnQgcnBjYXBfc2VuZGF1dGgoU09DS0VUIHNvY2ssIHVpbnQ4ICp2ZXIsIHN0cnVjdCBwY2FwX3JtdGF1dGggKmF1dGgsIGNoYXIgKmVycmJ1Zik7Ci1zdGF0aWMgaW50IHJwY2FwX3JlY3ZfbXNnX2hlYWRlcihTT0NLRVQgc29jaywgc3RydWN0IHJwY2FwX2hlYWRlciAqaGVhZGVyLCBjaGFyICplcnJidWYpOwotc3RhdGljIGludCBycGNhcF9jaGVja19tc2dfdmVyKFNPQ0tFVCBzb2NrLCB1aW50OCBleHBlY3RlZF92ZXIsIHN0cnVjdCBycGNhcF9oZWFkZXIgKmhlYWRlciwgY2hhciAqZXJyYnVmKTsKLXN0YXRpYyBpbnQgcnBjYXBfY2hlY2tfbXNnX3R5cGUoU09DS0VUIHNvY2ssIHVpbnQ4IHJlcXVlc3RfdHlwZSwgc3RydWN0IHJwY2FwX2hlYWRlciAqaGVhZGVyLCB1aW50MTYgKmVycmNvZGUsIGNoYXIgKmVycmJ1Zik7Ci1zdGF0aWMgaW50IHJwY2FwX3Byb2Nlc3NfbXNnX2hlYWRlcihTT0NLRVQgc29jaywgdWludDggdmVyLCB1aW50OCByZXF1ZXN0X3R5cGUsIHN0cnVjdCBycGNhcF9oZWFkZXIgKmhlYWRlciwgY2hhciAqZXJyYnVmKTsKLXN0YXRpYyBpbnQgcnBjYXBfcmVjdihTT0NLRVQgc29jaywgdm9pZCAqYnVmZmVyLCBzaXplX3QgdG9yZWFkLCB1aW50MzIgKnBsZW4sIGNoYXIgKmVycmJ1Zik7Ci1zdGF0aWMgdm9pZCBycGNhcF9tc2dfZXJyKFNPQ0tFVCBzb2NrY3RybCwgdWludDMyIHBsZW4sIGNoYXIgKnJlbW90ZV9lcnJidWYpOwotc3RhdGljIGludCBycGNhcF9kaXNjYXJkKFNPQ0tFVCBzb2NrLCB1aW50MzIgbGVuLCBjaGFyICplcnJidWYpOwotc3RhdGljIGludCBycGNhcF9yZWFkX3BhY2tldF9tc2coU09DS0VUIHNvY2ssIHBjYXBfdCAqcCwgc2l6ZV90IHNpemUpOworc3RhdGljIGludCBycGNhcF9yZWN2X21zZ19oZWFkZXIoU09DS0VUIHNvY2ssIFNTTCAqLCBzdHJ1Y3QgcnBjYXBfaGVhZGVyICpoZWFkZXIsIGNoYXIgKmVycmJ1Zik7CitzdGF0aWMgaW50IHJwY2FwX2NoZWNrX21zZ192ZXIoU09DS0VUIHNvY2ssIFNTTCAqLCB1aW50OCBleHBlY3RlZF92ZXIsIHN0cnVjdCBycGNhcF9oZWFkZXIgKmhlYWRlciwgY2hhciAqZXJyYnVmKTsKK3N0YXRpYyBpbnQgcnBjYXBfY2hlY2tfbXNnX3R5cGUoU09DS0VUIHNvY2ssIFNTTCAqLCB1aW50OCByZXF1ZXN0X3R5cGUsIHN0cnVjdCBycGNhcF9oZWFkZXIgKmhlYWRlciwgdWludDE2ICplcnJjb2RlLCBjaGFyICplcnJidWYpOworc3RhdGljIGludCBycGNhcF9wcm9jZXNzX21zZ19oZWFkZXIoU09DS0VUIHNvY2ssIFNTTCAqLCB1aW50OCB2ZXIsIHVpbnQ4IHJlcXVlc3RfdHlwZSwgc3RydWN0IHJwY2FwX2hlYWRlciAqaGVhZGVyLCBjaGFyICplcnJidWYpOworc3RhdGljIGludCBycGNhcF9yZWN2KFNPQ0tFVCBzb2NrLCBTU0wgKiwgdm9pZCAqYnVmZmVyLCBzaXplX3QgdG9yZWFkLCB1aW50MzIgKnBsZW4sIGNoYXIgKmVycmJ1Zik7CitzdGF0aWMgdm9pZCBycGNhcF9tc2dfZXJyKFNPQ0tFVCBzb2NrY3RybCwgU1NMICosIHVpbnQzMiBwbGVuLCBjaGFyICpyZW1vdGVfZXJyYnVmKTsKK3N0YXRpYyBpbnQgcnBjYXBfZGlzY2FyZChTT0NLRVQgc29jaywgU1NMICosIHVpbnQzMiBsZW4sIGNoYXIgKmVycmJ1Zik7CitzdGF0aWMgaW50IHJwY2FwX3JlYWRfcGFja2V0X21zZyhzdHJ1Y3QgcGNhcF9ycGNhcCBjb25zdCAqLCBwY2FwX3QgKnAsIHNpemVfdCBzaXplKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC0zNzYsNyArMzg3LDcgQEAKIAlzdHJ1Y3QgcnBjYXBfcGt0aGRyICpuZXRfcGt0X2hlYWRlcjsJLyogaGVhZGVyIG9mIHRoZSBwYWNrZXQsIGZyb20gdGhlIG1lc3NhZ2UgKi8KIAl1X2NoYXIgKm5ldF9wa3RfZGF0YTsJCQkvKiBwYWNrZXQgZGF0YSBmcm9tIHRoZSBtZXNzYWdlICovCiAJdWludDMyIHBsZW47Ci0JaW50IHJldHZhbDsJCQkJLyogZ2VuZXJpYyByZXR1cm4gdmFsdWUgKi8KKwlpbnQgcmV0dmFsID0gMDsJCQkJLyogZ2VuZXJpYyByZXR1cm4gdmFsdWUgKi8KIAlpbnQgbXNnbGVuOwogCiAJLyogU3RydWN0dXJlcyBuZWVkZWQgZm9yIHRoZSBzZWxlY3QoKSBjYWxsICovCkBAIC0zODgsMjkgKzM5OSw0MiBAQAogCSAqICd0aW1lb3V0JywgaW4gcGNhcF90LCBpcyBpbiBtaWxsaXNlY29uZHM7IHdlIGhhdmUgdG8gY29udmVydCBpdCBpbnRvIHNlYyBhbmQgbWljcm9zZWMKIAkgKi8KIAl0di50dl9zZWMgPSBwLT5vcHQudGltZW91dCAvIDEwMDA7Ci0JdHYudHZfdXNlYyA9IChwLT5vcHQudGltZW91dCAtIHR2LnR2X3NlYyAqIDEwMDApICogMTAwMDsKKwl0di50dl91c2VjID0gKHN1c2Vjb25kc190KSgocC0+b3B0LnRpbWVvdXQgLSB0di50dl9zZWMgKiAxMDAwKSAqIDEwMDApOwogCi0JLyogV2F0Y2ggb3V0IHNvY2tkYXRhIHRvIHNlZSBpZiBpdCBoYXMgaW5wdXQgKi8KLQlGRF9aRVJPKCZyZmRzKTsKLQotCS8qCi0JICogJ2ZwLT5ybXRfc29ja2RhdGEnIGhhcyBhbHdheXMgdG8gYmUgc2V0IGJlZm9yZSBjYWxsaW5nIHRoZSBzZWxlY3QoKSwKLQkgKiBzaW5jZSBpdCBpcyBjbGVhcmVkIGJ5IHRoZSBzZWxlY3QoKQotCSAqLwotCUZEX1NFVChwci0+cm10X3NvY2tkYXRhLCAmcmZkcyk7Ci0KLQlyZXR2YWwgPSBzZWxlY3QoKGludCkgcHItPnJtdF9zb2NrZGF0YSArIDEsICZyZmRzLCBOVUxMLCBOVUxMLCAmdHYpOwotCWlmIChyZXR2YWwgPT0gLTEpCi0JewotI2lmbmRlZiBfV0lOMzIKLQkJaWYgKGVycm5vID09IEVJTlRSKQotCQl7Ci0JCQkvKiBJbnRlcnJ1cHRlZC4gKi8KLQkJCXJldHVybiAwOwotCQl9CisjaWZkZWYgSEFWRV9PUEVOU1NMCisJLyogQ2hlY2sgaWYgd2Ugc3RpbGwgaGF2ZSBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGxhc3QgZGVjb2RlZCBUTFMgcmVjb3JkLgorCSAqIElmIHRoYXQncyB0aGUgY2FzZSwgd2Uga25vdyBTU0xfcmVhZCB3aWxsIG5vdCBibG9jay4gKi8KKwlyZXR2YWwgPSBwci0+ZGF0YV9zc2wgJiYgU1NMX3BlbmRpbmcocHItPmRhdGFfc3NsKSA+IDA7CiAjZW5kaWYKLQkJc29ja19nZXRlcnJvcigic2VsZWN0KCk6ICIsIHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSk7Ci0JCXJldHVybiAtMTsKKwlpZiAoISByZXR2YWwpCisJeworCQkvKiBXYXRjaCBvdXQgc29ja2RhdGEgdG8gc2VlIGlmIGl0IGhhcyBpbnB1dCAqLworCQlGRF9aRVJPKCZyZmRzKTsKKworCQkvKgorCQkgKiAnZnAtPnJtdF9zb2NrZGF0YScgaGFzIGFsd2F5cyB0byBiZSBzZXQgYmVmb3JlIGNhbGxpbmcgdGhlIHNlbGVjdCgpLAorCQkgKiBzaW5jZSBpdCBpcyBjbGVhcmVkIGJ5IHRoZSBzZWxlY3QoKQorCQkgKi8KKwkJRkRfU0VUKHByLT5ybXRfc29ja2RhdGEsICZyZmRzKTsKKworI2lmZGVmIEZVWlpJTkdfQlVJTERfTU9ERV9VTlNBRkVfRk9SX1BST0RVQ1RJT04KKwkJcmV0dmFsID0gMTsKKyNlbHNlCisJCXJldHZhbCA9IHNlbGVjdCgoaW50KSBwci0+cm10X3NvY2tkYXRhICsgMSwgJnJmZHMsIE5VTEwsIE5VTEwsICZ0dik7CisjZW5kaWYKKworCQlpZiAocmV0dmFsID09IC0xKQorCQl7CisjaWZuZGVmIF9XSU4zMgorCQkJaWYgKGVycm5vID09IEVJTlRSKQorCQkJeworCQkJCS8qIEludGVycnVwdGVkLiAqLworCQkJCXJldHVybiAwOworCQkJfQorI2VuZGlmCisJCQlzb2NrX2dldGVycm9yKCJzZWxlY3QoKSIsIHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSk7CisJCQlyZXR1cm4gLTE7CisJCX0KIAl9CiAKIAkvKiBUaGVyZSBpcyBubyBkYXRhIHdhaXRpbmcsIHNvIHJldHVybiAnMCcgKi8KQEAgLTQyOCw3ICs0NTIsNyBAQAogCWlmIChwci0+cm10X2ZsYWdzICYgUENBUF9PUEVORkxBR19EQVRBVFhfVURQKQogCXsKIAkJLyogUmVhZCB0aGUgZW50aXJlIG1lc3NhZ2UgZnJvbSB0aGUgbmV0d29yayAqLwotCQltc2dsZW4gPSBzb2NrX3JlY3ZfZGdyYW0ocHItPnJtdF9zb2NrZGF0YSwgcC0+YnVmZmVyLAorCQltc2dsZW4gPSBzb2NrX3JlY3ZfZGdyYW0ocHItPnJtdF9zb2NrZGF0YSwgcHItPmRhdGFfc3NsLCBwLT5idWZmZXIsCiAJCSAgICBwLT5idWZzaXplLCBwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOwogCQlpZiAobXNnbGVuID09IC0xKQogCQl7CkBAIC00NDUsNyArNDY5LDcgQEAKIAkJCS8qCiAJCQkgKiBNZXNzYWdlIGlzIHNob3J0ZXIgdGhhbiBhbiBycGNhcCBoZWFkZXIuCiAJCQkgKi8KLQkJCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJICAgICJVRFAgcGFja2V0IG1lc3NhZ2UgaXMgc2hvcnRlciB0aGFuIGFuIHJwY2FwIGhlYWRlciIpOwogCQkJcmV0dXJuIC0xOwogCQl9CkBAIC00NTYsNyArNDgwLDcgQEAKIAkJCSAqIE1lc3NhZ2UgaXMgc2hvcnRlciB0aGFuIHRoZSBoZWFkZXIgY2xhaW1zIGl0CiAJCQkgKiBpcy4KIAkJCSAqLwotCQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgICAgIlVEUCBwYWNrZXQgbWVzc2FnZSBpcyBzaG9ydGVyIHRoYW4gaXRzIHJwY2FwIGhlYWRlciBjbGFpbXMiKTsKIAkJCXJldHVybiAtMTsKIAkJfQpAQCAtNDcyLDggKzQ5Niw3IEBACiAJCQkgKiBUaGUgc2l6ZSB3ZSBzaG91bGQgZ2V0IGlzIHRoZSBzaXplIG9mIHRoZQogCQkJICogcGFja2V0IGhlYWRlci4KIAkJCSAqLwotCQkJc3RhdHVzID0gcnBjYXBfcmVhZF9wYWNrZXRfbXNnKHByLT5ybXRfc29ja2RhdGEsIHAsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBycGNhcF9oZWFkZXIpKTsKKwkJCXN0YXR1cyA9IHJwY2FwX3JlYWRfcGFja2V0X21zZyhwciwgcCwgc2l6ZW9mKHN0cnVjdCBycGNhcF9oZWFkZXIpKTsKIAkJCWlmIChzdGF0dXMgPT0gLTEpCiAJCQl7CiAJCQkJLyogTmV0d29yayBlcnJvci4gKi8KQEAgLTUwMSwxMiArNTI0LDExIEBACiAJCQkgKiBzdWJ0cmFjdGluZyBpbiBvcmRlciB0byBhdm9pZCBhbgogCQkJICogb3ZlcmZsb3cuKQogCQkJICovCi0JCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAgICAiU2VydmVyIHNlbnQgdXMgYSBtZXNzYWdlIGxhcmdlciB0aGFuIHRoZSBsYXJnZXN0IGV4cGVjdGVkIHBhY2tldCBtZXNzYWdlIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KLQkJc3RhdHVzID0gcnBjYXBfcmVhZF9wYWNrZXRfbXNnKHByLT5ybXRfc29ja2RhdGEsIHAsCi0JCSAgICBzaXplb2Yoc3RydWN0IHJwY2FwX2hlYWRlcikgKyBwbGVuKTsKKwkJc3RhdHVzID0gcnBjYXBfcmVhZF9wYWNrZXRfbXNnKHByLCBwLCBzaXplb2Yoc3RydWN0IHJwY2FwX2hlYWRlcikgKyBwbGVuKTsKIAkJaWYgKHN0YXR1cyA9PSAtMSkKIAkJewogCQkJLyogTmV0d29yayBlcnJvci4gKi8KQEAgLTUzNSw3ICs1NTcsNyBAQAogCS8qCiAJICogRGlkIHRoZSBzZXJ2ZXIgc3BlY2lmeSB0aGUgdmVyc2lvbiB3ZSBuZWdvdGlhdGVkPwogCSAqLwotCWlmIChycGNhcF9jaGVja19tc2dfdmVyKHByLT5ybXRfc29ja2RhdGEsIHByLT5wcm90b2NvbF92ZXJzaW9uLAorCWlmIChycGNhcF9jaGVja19tc2dfdmVyKHByLT5ybXRfc29ja2RhdGEsIHByLT5kYXRhX3NzbCwgcHItPnByb3RvY29sX3ZlcnNpb24sCiAJICAgIGhlYWRlciwgcC0+ZXJyYnVmKSA9PSAtMSkKIAl7CiAJCXJldHVybiAwOwkvKiBSZXR1cm4gJ25vIHBhY2tldHMgcmVjZWl2ZWQnICovCkBAIC01NTEsNyArNTczLDcgQEAKIAogCWlmIChudG9obChuZXRfcGt0X2hlYWRlci0+Y2FwbGVuKSA+IHBsZW4pCiAJewotCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkgICAgIlBhY2tldCdzIGNhcHR1cmVkIGRhdGEgZ29lcyBwYXN0IHRoZSBlbmQgb2YgdGhlIHJlY2VpdmVkIHBhY2tldCBtZXNzYWdlLiIpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtNjc5LDcgKzcwMSw5IEBACiB9CiAKIC8qCi0gKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgQ0xPU0UgY29tbWFuZCB0byB0aGUgY2FwdHVyZSBzZXJ2ZXIuCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgQ0xPU0UgY29tbWFuZCB0byB0aGUgY2FwdHVyZSBzZXJ2ZXIgaWYgd2UncmUgaW4KKyAqIHBhc3NpdmUgbW9kZSBhbmQgYW4gRU5EQ0FQIGNvbW1hbmQgdG8gdGhlIGNhcHR1cmUgc2VydmVyIGlmIHdlJ3JlIGluCisgKiBhY3RpdmUgbW9kZS4KICAqCiAgKiBJdCBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBjYWxscyBwY2FwX2Nsb3NlKCkuICBJdCBzZW5kcyBhIGNvbW1hbmQKICAqIHRvIG91ciBwZWVyIHRoYXQgc2F5cyAnb2ssIGxldCdzIHN0b3AgY2FwdHVyaW5nJy4KQEAgLTcxNSw3ICs3MzksNyBAQAogCQkgKiB3ZSdyZSBjbG9zaW5nIHRoaXMgcGNhcF90LCBhbmQgaGF2ZSBubyBwbGFjZSB0byByZXBvcnQKIAkJICogdGhlIGVycm9yLiAgTm8gcmVwbHkgaXMgc2VudCB0byB0aGlzIG1lc3NhZ2UuCiAJCSAqLwotCQkodm9pZClzb2NrX3NlbmQocHItPnJtdF9zb2NrY3RybCwgKGNoYXIgKikmaGVhZGVyLAorCQkodm9pZClzb2NrX3NlbmQocHItPnJtdF9zb2NrY3RybCwgcHItPmN0cmxfc3NsLCAoY2hhciAqKSZoZWFkZXIsCiAJCSAgICBzaXplb2Yoc3RydWN0IHJwY2FwX2hlYWRlciksIE5VTEwsIDApOwogCX0KIAllbHNlCkBAIC03MjgsNyArNzUyLDcgQEAKIAkJICogYXMgd2UncmUgY2xvc2luZyB0aGlzIHBjYXBfdCwgYW5kIGhhdmUgbm8gcGxhY2UgdG8KIAkJICogcmVwb3J0IHRoZSBlcnJvci4KIAkJICovCi0JCWlmIChzb2NrX3NlbmQocHItPnJtdF9zb2NrY3RybCwgKGNoYXIgKikmaGVhZGVyLAorCQlpZiAoc29ja19zZW5kKHByLT5ybXRfc29ja2N0cmwsIHByLT5jdHJsX3NzbCwgKGNoYXIgKikmaGVhZGVyLAogCQkgICAgc2l6ZW9mKHN0cnVjdCBycGNhcF9oZWFkZXIpLCBOVUxMLCAwKSA9PSAwKQogCQl7CiAJCQkvKgpAQCAtNzM2LDExICs3NjAsMTEgQEAKIAkJCSAqIGFzIHdlJ3JlIGNsb3NpbmcgdGhpcyBwY2FwX3QsIGFuZCBoYXZlIG5vCiAJCQkgKiBwbGFjZSB0byByZXBvcnQgdGhlIGVycm9yLgogCQkJICovCi0JCQlpZiAocnBjYXBfcHJvY2Vzc19tc2dfaGVhZGVyKHByLT5ybXRfc29ja2N0cmwsCisJCQlpZiAocnBjYXBfcHJvY2Vzc19tc2dfaGVhZGVyKHByLT5ybXRfc29ja2N0cmwsIHByLT5jdHJsX3NzbCwKIAkJCSAgICBwci0+cHJvdG9jb2xfdmVyc2lvbiwgUlBDQVBfTVNHX0VORENBUF9SRVEsCiAJCQkgICAgJmhlYWRlciwgTlVMTCkgPT0gMCkKIAkJCXsKLQkJCQkodm9pZClycGNhcF9kaXNjYXJkKHByLT5ybXRfc29ja2N0cmwsCisJCQkJKHZvaWQpcnBjYXBfZGlzY2FyZChwci0+cm10X3NvY2tjdHJsLCBwci0+Y3RybF9zc2wsCiAJCQkJICAgIGhlYWRlci5wbGVuLCBOVUxMKTsKIAkJCX0KIAkJfQpAQCAtNzQ4LDE0ICs3NzIsMzUgQEAKIAogCWlmIChwci0+cm10X3NvY2tkYXRhKQogCXsKKyNpZmRlZiBIQVZFX09QRU5TU0wKKwkJaWYgKHByLT5kYXRhX3NzbCkKKwkJeworCQkJLy8gRmluaXNoIHVzaW5nIHRoZSBTU0wgaGFuZGxlIGZvciB0aGUgZGF0YSBzb2NrZXQuCisJCQkvLyBUaGlzIG11c3QgYmUgZG9uZSAqYmVmb3JlKiB0aGUgc29ja2V0IGlzIGNsb3NlZC4KKwkJCXNzbF9maW5pc2gocHItPmRhdGFfc3NsKTsKKwkJCXByLT5kYXRhX3NzbCA9IE5VTEw7CisJCX0KKyNlbmRpZgogCQlzb2NrX2Nsb3NlKHByLT5ybXRfc29ja2RhdGEsIE5VTEwsIDApOwogCQlwci0+cm10X3NvY2tkYXRhID0gMDsKIAl9CiAKIAlpZiAoKCFhY3RpdmUpICYmIChwci0+cm10X3NvY2tjdHJsKSkKKwl7CisjaWZkZWYgSEFWRV9PUEVOU1NMCisJCWlmIChwci0+Y3RybF9zc2wpCisJCXsKKwkJCS8vIEZpbmlzaCB1c2luZyB0aGUgU1NMIGhhbmRsZSBmb3IgdGhlIGNvbnRyb2wgc29ja2V0LgorCQkJLy8gVGhpcyBtdXN0IGJlIGRvbmUgKmJlZm9yZSogdGhlIHNvY2tldCBpcyBjbG9zZWQuCisJCQlzc2xfZmluaXNoKHByLT5jdHJsX3NzbCk7CisJCQlwci0+Y3RybF9zc2wgPSBOVUxMOworCQl9CisjZW5kaWYKIAkJc29ja19jbG9zZShwci0+cm10X3NvY2tjdHJsLCBOVUxMLCAwKTsKKwl9CiAKIAlwci0+cm10X3NvY2tjdHJsID0gMDsKKwlwci0+Y3RybF9zc2wgPSBOVUxMOwogCiAJaWYgKHByLT5jdXJyZW50ZmlsdGVyKQogCXsKQEAgLTc2Myw2ICs4MDgsOCBAQAogCQlwci0+Y3VycmVudGZpbHRlciA9IE5VTEw7CiAJfQogCisJcGNhcF9jbGVhbnVwX2xpdmVfY29tbW9uKGZwKTsKKwogCS8qIFRvIGF2b2lkIGluY29uc2lzdGVuY2llcyBpbiB0aGUgbnVtYmVyIG9mIHNvY2tfaW5pdCgpICovCiAJc29ja19jbGVhbnVwKCk7CiB9CkBAIC04NDcsNyArODk0LDcgQEAKIAlpZiAobW9kZSAhPSBQQ0FQX1NUQVRTX1NUQU5EQVJEKQogI2VuZGlmCiAJewotCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkgICAgIkludmFsaWQgc3RhdHMgbW9kZSAlZCIsIG1vZGUpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC04NzgsMTkgKzkyNSwxOSBAQAogCSAgICBSUENBUF9NU0dfU1RBVFNfUkVRLCAwLCAwKTsKIAogCS8qIFNlbmQgdGhlIFBDQVBfU1RBVFMgY29tbWFuZCAqLwotCWlmIChzb2NrX3NlbmQocHItPnJtdF9zb2NrY3RybCwgKGNoYXIgKikmaGVhZGVyLAorCWlmIChzb2NrX3NlbmQocHItPnJtdF9zb2NrY3RybCwgcHItPmN0cmxfc3NsLCAoY2hhciAqKSZoZWFkZXIsCiAJICAgIHNpemVvZihzdHJ1Y3QgcnBjYXBfaGVhZGVyKSwgcC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSA8IDApCiAJCXJldHVybiBOVUxMOwkJLyogVW5yZWNvdmVyYWJsZSBuZXR3b3JrIGVycm9yICovCiAKIAkvKiBSZWNlaXZlIGFuZCBwcm9jZXNzIHRoZSByZXBseSBtZXNzYWdlIGhlYWRlci4gKi8KLQlpZiAocnBjYXBfcHJvY2Vzc19tc2dfaGVhZGVyKHByLT5ybXRfc29ja2N0cmwsIHByLT5wcm90b2NvbF92ZXJzaW9uLAorCWlmIChycGNhcF9wcm9jZXNzX21zZ19oZWFkZXIocHItPnJtdF9zb2NrY3RybCwgcHItPmN0cmxfc3NsLCBwci0+cHJvdG9jb2xfdmVyc2lvbiwKIAkgICAgUlBDQVBfTVNHX1NUQVRTX1JFUSwgJmhlYWRlciwgcC0+ZXJyYnVmKSA9PSAtMSkKIAkJcmV0dXJuIE5VTEw7CQkvKiBFcnJvciAqLwogCiAJcGxlbiA9IGhlYWRlci5wbGVuOwogCiAJLyogUmVhZCB0aGUgcmVwbHkgYm9keSAqLwotCWlmIChycGNhcF9yZWN2KHByLT5ybXRfc29ja2N0cmwsIChjaGFyICopJm5ldHN0YXRzLAorCWlmIChycGNhcF9yZWN2KHByLT5ybXRfc29ja2N0cmwsIHByLT5jdHJsX3NzbCwgKGNoYXIgKikmbmV0c3RhdHMsCiAJICAgIHNpemVvZihzdHJ1Y3QgcnBjYXBfc3RhdHMpLCAmcGxlbiwgcC0+ZXJyYnVmKSA9PSAtMSkKIAkJZ290byBlcnJvcjsKIApAQCAtOTA3LDcgKzk1NCw3IEBACiAjZW5kaWYgLyogX1dJTjMyICovCiAKIAkvKiBEaXNjYXJkIHRoZSByZXN0IG9mIHRoZSBtZXNzYWdlLiAqLwotCWlmIChycGNhcF9kaXNjYXJkKHByLT5ybXRfc29ja2N0cmwsIHBsZW4sIHAtPmVycmJ1ZikgPT0gLTEpCisJaWYgKHJwY2FwX2Rpc2NhcmQocHItPnJtdF9zb2NrY3RybCwgcHItPmN0cmxfc3NsLCBwbGVuLCBwLT5lcnJidWYpID09IC0xKQogCQlnb3RvIGVycm9yX25vZGlzY2FyZDsKIAogCXJldHVybiBwczsKQEAgLTkxOCw3ICs5NjUsNyBAQAogCSAqIFdlIGFscmVhZHkgcmVwb3J0ZWQgYW4gZXJyb3I7IGlmIHRoaXMgZ2V0cyBhbiBlcnJvciwganVzdAogCSAqIGRyaXZlIG9uLgogCSAqLwotCSh2b2lkKXJwY2FwX2Rpc2NhcmQocHItPnJtdF9zb2NrY3RybCwgcGxlbiwgTlVMTCk7CisJKHZvaWQpcnBjYXBfZGlzY2FyZChwci0+cm10X3NvY2tjdHJsLCBwci0+Y3RybF9zc2wsIHBsZW4sIE5VTEwpOwogCiBlcnJvcl9ub2Rpc2NhcmQ6CiAJcmV0dXJuIE5VTEw7CkBAIC05NTksNyArMTAwNiw3IEBACiAJcmV0dmFsID0gZ2V0YWRkcmluZm8oaG9zdCwgIjAiLCAmaGludHMsICZhZGRyaW5mbyk7CiAJaWYgKHJldHZhbCAhPSAwKQogCXsKLQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJnZXRhZGRyaW5mbygpICVzIiwKKwkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiZ2V0YWRkcmluZm8oKSAlcyIsCiAJCSAgICBnYWlfc3RyZXJyb3IocmV0dmFsKSk7CiAJCSplcnJvciA9IDE7CiAJCXJldHVybiBOVUxMOwpAQCAtMTAzOCw2ICsxMDg1LDEwIEBACiAJaW50IHNvY2tidWZzaXplID0gMDsKIAl1aW50MzIgc2VydmVyX3NvY2tidWZzaXplOwogCisJLy8gVGFrZSB0aGUgb3Bwb3J0dW5pdHkgdG8gY2xlYXIgcHItPmRhdGFfc3NsIGJlZm9yZSBhbnkgZ290byBlcnJvciwKKwkvLyBhcyBpdCBzZWVtcyBwci0+cHJpdiBpcyBub3QgemVyb2VkIGFmdGVyIGl0cyBtYWxsb2NlZC4KKwlwci0+ZGF0YV9zc2wgPSBOVUxMOworCiAJLyoKIAkgKiBMZXQncyBjaGVjayBpZiBzYW1wbGluZyBoYXMgYmVlbiByZXF1aXJlZC4KIAkgKiBJZiBzbywgbGV0J3Mgc2V0IGl0IGZpcnN0CkBAIC0xMDY5LDcgKzExMjAsNyBAQAogCXNhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKTsKIAlpZiAoZ2V0cGVlcm5hbWUocHItPnJtdF9zb2NrY3RybCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2FkZHIsICZzYWRkcmxlbikgPT0gLTEpCiAJewotCQlzb2NrX2dldGVycm9yKCJnZXRzb2NrbmFtZSgpOiAiLCBmcC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKKwkJc29ja19nZXRlcnJvcigiZ2V0c29ja25hbWUoKSIsIGZwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOwogCQlnb3RvIGVycm9yX25vZGlzY2FyZDsKIAl9CiAJYWlfZmFtaWx5ID0gKChzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqKSAmc2FkZHIpLT5zc19mYW1pbHk7CkBAIC0xMDc4LDcgKzExMjksNyBAQAogCWlmIChnZXRuYW1laW5mbygoc3RydWN0IHNvY2thZGRyICopICZzYWRkciwgc2FkZHJsZW4sIGhvc3QsCiAJCXNpemVvZihob3N0KSwgTlVMTCwgMCwgTklfTlVNRVJJQ0hPU1QpKQogCXsKLQkJc29ja19nZXRlcnJvcigiZ2V0bmFtZWluZm8oKTogIiwgZnAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSk7CisJCXNvY2tfZ2V0ZXJyb3IoImdldG5hbWVpbmZvKCkiLCBmcC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKIAkJZ290byBlcnJvcl9ub2Rpc2NhcmQ7CiAJfQogCkBAIC0xMTE2LDcgKzExNjcsNyBAQAogCQlzYWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSk7CiAJCWlmIChnZXRzb2NrbmFtZShzb2NrZGF0YSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2FkZHIsICZzYWRkcmxlbikgPT0gLTEpCiAJCXsKLQkJCXNvY2tfZ2V0ZXJyb3IoImdldHNvY2tuYW1lKCk6ICIsIGZwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOworCQkJc29ja19nZXRlcnJvcigiZ2V0c29ja25hbWUoKSIsIGZwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOwogCQkJZ290byBlcnJvcl9ub2Rpc2NhcmQ7CiAJCX0KIApAQCAtMTEyNCw3ICsxMTc1LDcgQEAKIAkJaWYgKGdldG5hbWVpbmZvKChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNhZGRyLCBzYWRkcmxlbiwgTlVMTCwKIAkJCTAsIHBvcnRkYXRhLCBzaXplb2YocG9ydGRhdGEpLCBOSV9OVU1FUklDU0VSVikpCiAJCXsKLQkJCXNvY2tfZ2V0ZXJyb3IoImdldG5hbWVpbmZvKCk6ICIsIGZwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOworCQkJc29ja19nZXRlcnJvcigiZ2V0bmFtZWluZm8oKSIsIGZwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOwogCQkJZ290byBlcnJvcl9ub2Rpc2NhcmQ7CiAJCX0KIAl9CkBAIC0xMTc3LDE4ICsxMjI4LDE4IEBACiAJaWYgKHBjYXBfcGFja19icGZmaWx0ZXIoZnAsICZzZW5kYnVmW3NlbmRidWZpZHhdLCAmc2VuZGJ1ZmlkeCwgJmZwLT5mY29kZSkpCiAJCWdvdG8gZXJyb3Jfbm9kaXNjYXJkOwogCi0JaWYgKHNvY2tfc2VuZChwci0+cm10X3NvY2tjdHJsLCBzZW5kYnVmLCBzZW5kYnVmaWR4LCBmcC0+ZXJyYnVmLAorCWlmIChzb2NrX3NlbmQocHItPnJtdF9zb2NrY3RybCwgcHItPmN0cmxfc3NsLCBzZW5kYnVmLCBzZW5kYnVmaWR4LCBmcC0+ZXJyYnVmLAogCSAgICBQQ0FQX0VSUkJVRl9TSVpFKSA8IDApCiAJCWdvdG8gZXJyb3Jfbm9kaXNjYXJkOwogCiAJLyogUmVjZWl2ZSBhbmQgcHJvY2VzcyB0aGUgcmVwbHkgbWVzc2FnZSBoZWFkZXIuICovCi0JaWYgKHJwY2FwX3Byb2Nlc3NfbXNnX2hlYWRlcihwci0+cm10X3NvY2tjdHJsLCBwci0+cHJvdG9jb2xfdmVyc2lvbiwKKwlpZiAocnBjYXBfcHJvY2Vzc19tc2dfaGVhZGVyKHByLT5ybXRfc29ja2N0cmwsIHByLT5jdHJsX3NzbCwgcHItPnByb3RvY29sX3ZlcnNpb24sCiAJICAgIFJQQ0FQX01TR19TVEFSVENBUF9SRVEsICZoZWFkZXIsIGZwLT5lcnJidWYpID09IC0xKQogCQlnb3RvIGVycm9yX25vZGlzY2FyZDsKIAogCXBsZW4gPSBoZWFkZXIucGxlbjsKIAotCWlmIChycGNhcF9yZWN2KHByLT5ybXRfc29ja2N0cmwsIChjaGFyICopJnN0YXJ0Y2FwcmVwbHksCisJaWYgKHJwY2FwX3JlY3YocHItPnJtdF9zb2NrY3RybCwgcHItPmN0cmxfc3NsLCAoY2hhciAqKSZzdGFydGNhcHJlcGx5LAogCSAgICBzaXplb2Yoc3RydWN0IHJwY2FwX3N0YXJ0Y2FwcmVwbHkpLCAmcGxlbiwgZnAtPmVycmJ1ZikgPT0gLTEpCiAJCWdvdG8gZXJyb3I7CiAKQEAgLTEyMTAsNyArMTI2MSw3IEBACiAJCQltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2Yoc3RydWN0IGFkZHJpbmZvKSk7CiAJCQloaW50cy5haV9mYW1pbHkgPSBhaV9mYW1pbHk7CQkvKiBVc2UgdGhlIHNhbWUgYWRkcmVzcyBmYW1pbHkgb2YgdGhlIGNvbnRyb2wgc29ja2V0ICovCiAJCQloaW50cy5haV9zb2NrdHlwZSA9IChwci0+cm10X2ZsYWdzICYgUENBUF9PUEVORkxBR19EQVRBVFhfVURQKSA/IFNPQ0tfREdSQU0gOiBTT0NLX1NUUkVBTTsKLQkJCXBjYXBfc25wcmludGYocG9ydGRhdGEsIFBDQVBfQlVGX1NJWkUsICIlZCIsIG50b2hzKHN0YXJ0Y2FwcmVwbHkucG9ydGRhdGEpKTsKKwkJCXNucHJpbnRmKHBvcnRkYXRhLCBQQ0FQX0JVRl9TSVpFLCAiJWQiLCBudG9ocyhzdGFydGNhcHJlcGx5LnBvcnRkYXRhKSk7CiAKIAkJCS8qIExldCdzIHRoZSBzZXJ2ZXIgcGljayB1cCBhIGZyZWUgbmV0d29yayBwb3J0IGZvciB1cyAqLwogCQkJaWYgKHNvY2tfaW5pdGFkZHJlc3MoaG9zdCwgcG9ydGRhdGEsICZoaW50cywgJmFkZHJpbmZvLCBmcC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSA9PSAtMSkKQEAgLTEyMzQsNyArMTI4NSw3IEBACiAKIAkJCWlmIChzb2NrdGVtcCA9PSBJTlZBTElEX1NPQ0tFVCkKIAkJCXsKLQkJCQlzb2NrX2dldGVycm9yKCJhY2NlcHQoKTogIiwgZnAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSk7CisJCQkJc29ja19nZXRlcnJvcigiYWNjZXB0KCkiLCBmcC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKIAkJCQlnb3RvIGVycm9yOwogCQkJfQogCkBAIC0xMjQ3LDYgKzEyOTgsMTQgQEAKIAkvKiBMZXQncyBzYXZlIHRoZSBzb2NrZXQgb2YgdGhlIGRhdGEgY29ubmVjdGlvbiAqLwogCXByLT5ybXRfc29ja2RhdGEgPSBzb2NrZGF0YTsKIAorI2lmZGVmIEhBVkVfT1BFTlNTTAorCWlmIChwci0+dXNlc19zc2wpCisJeworCQlwci0+ZGF0YV9zc2wgPSBzc2xfcHJvbW90aW9uKDAsIHNvY2tkYXRhLCBmcC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKKwkJaWYgKCEgcHItPmRhdGFfc3NsKSBnb3RvIGVycm9yOworCX0KKyNlbmRpZgorCiAJLyoKIAkgKiBTZXQgdGhlIHNpemUgb2YgdGhlIHNvY2tldCBidWZmZXIgZm9yIHRoZSBkYXRhIHNvY2tldC4KIAkgKiBJdCBoYXMgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgbG9jYWwgY2FwdHVyZSBidWZmZXIgdXNlZApAQCAtMTI2MCw4ICsxMzE5LDggQEAKIAlyZXMgPSBnZXRzb2Nrb3B0KHNvY2tkYXRhLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsIChjaGFyICopJnNvY2tidWZzaXplLCAmaXRlbXApOwogCWlmIChyZXMgPT0gLTEpCiAJewotCQlzb2NrX2dldGVycm9yKCJwY2FwX3N0YXJ0Y2FwdHVyZV9yZW1vdGUoKSIsIGZwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOwotCQlTT0NLX0RFQlVHX01FU1NBR0UoZnAtPmVycmJ1Zik7CisJCXNvY2tfZ2V0ZXJyb3IoInBjYXBfc3RhcnRjYXB0dXJlX3JlbW90ZSgpOiBnZXRzb2Nrb3B0KCkgZmFpbGVkIiwgZnAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSk7CisJCWdvdG8gZXJyb3I7CiAJfQogCiAJLyoKQEAgLTEzMzQsNyArMTM5Myw3IEBACiAJZnAtPmNjID0gMDsKIAogCS8qIERpc2NhcmQgdGhlIHJlc3Qgb2YgdGhlIG1lc3NhZ2UuICovCi0JaWYgKHJwY2FwX2Rpc2NhcmQocHItPnJtdF9zb2NrY3RybCwgcGxlbiwgZnAtPmVycmJ1ZikgPT0gLTEpCisJaWYgKHJwY2FwX2Rpc2NhcmQocHItPnJtdF9zb2NrY3RybCwgcHItPmN0cmxfc3NsLCBwbGVuLCBmcC0+ZXJyYnVmKSA9PSAtMSkKIAkJZ290byBlcnJvcl9ub2Rpc2NhcmQ7CiAKIAkvKgpAQCAtMTM3NCwxNCArMTQzMywzNiBAQAogCSAqIFdlIGFscmVhZHkgcmVwb3J0ZWQgYW4gZXJyb3I7IGlmIHRoaXMgZ2V0cyBhbiBlcnJvciwganVzdAogCSAqIGRyaXZlIG9uLgogCSAqLwotCSh2b2lkKXJwY2FwX2Rpc2NhcmQocHItPnJtdF9zb2NrY3RybCwgcGxlbiwgTlVMTCk7CisJKHZvaWQpcnBjYXBfZGlzY2FyZChwci0+cm10X3NvY2tjdHJsLCBwci0+Y3RybF9zc2wsIHBsZW4sIE5VTEwpOwogCiBlcnJvcl9ub2Rpc2NhcmQ6Ci0JaWYgKChzb2NrZGF0YSkgJiYgKHNvY2tkYXRhICE9IC0xKSkJCS8qIHdlIGNhbiBiZSBoZXJlIGJlY2F1c2Ugc29ja2RhdGEgc2FpZCAnZXJyb3InICovCisjaWZkZWYgSEFWRV9PUEVOU1NMCisJaWYgKHByLT5kYXRhX3NzbCkKKwl7CisJCS8vIEZpbmlzaCB1c2luZyB0aGUgU1NMIGhhbmRsZSBmb3IgdGhlIGRhdGEgc29ja2V0LgorCQkvLyBUaGlzIG11c3QgYmUgZG9uZSAqYmVmb3JlKiB0aGUgc29ja2V0IGlzIGNsb3NlZC4KKwkJc3NsX2ZpbmlzaChwci0+ZGF0YV9zc2wpOworCQlwci0+ZGF0YV9zc2wgPSBOVUxMOworCX0KKyNlbmRpZgorCisJLyogd2UgY2FuIGJlIGhlcmUgYmVjYXVzZSBzb2NrZGF0YSBzYWlkICdlcnJvcicgKi8KKwlpZiAoKHNvY2tkYXRhICE9IDApICYmIChzb2NrZGF0YSAhPSBJTlZBTElEX1NPQ0tFVCkpCiAJCXNvY2tfY2xvc2Uoc29ja2RhdGEsIE5VTEwsIDApOwogCiAJaWYgKCFhY3RpdmUpCisJeworI2lmZGVmIEhBVkVfT1BFTlNTTAorCQlpZiAocHItPmN0cmxfc3NsKQorCQl7CisJCQkvLyBGaW5pc2ggdXNpbmcgdGhlIFNTTCBoYW5kbGUgZm9yIHRoZSBjb250cm9sIHNvY2tldC4KKwkJCS8vIFRoaXMgbXVzdCBiZSBkb25lICpiZWZvcmUqIHRoZSBzb2NrZXQgaXMgY2xvc2VkLgorCQkJc3NsX2ZpbmlzaChwci0+Y3RybF9zc2wpOworCQkJcHItPmN0cmxfc3NsID0gTlVMTDsKKwkJfQorI2VuZGlmCiAJCXNvY2tfY2xvc2UocHItPnJtdF9zb2NrY3RybCwgTlVMTCwgMCk7CisJfQogCiAJaWYgKGFkZHJpbmZvICE9IE5VTEwpCiAJCWZyZWVhZGRyaW5mbyhhZGRyaW5mbyk7CkBAIC0xNDA3LDcgKzE0ODgsNyBAQAogICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGluIHR3byBjYXNlczoKICAqIC0gcGNhcF9zdGFydGNhcHR1cmVfcmVtb3RlKCkgaXMgY2FsbGVkICh3ZSBoYXZlIHRvIHNlbmQgdGhlIGZpbHRlcgogICogICBhbG9uZyB3aXRoIHRoZSAnc3RhcnQgY2FwdHVyZScgY29tbWFuZCkKLSAqIC0gd2Ugd2FudCB0byB1ZHBhdGUgdGhlIGZpbHRlciBkdXJpbmcgYSBjYXB0dXJlIChpLmUuIHBjYXBfc2V0ZmlsdGVyKCkKKyAqIC0gd2Ugd2FudCB0byB1cGRhdGUgdGhlIGZpbHRlciBkdXJpbmcgYSBjYXB0dXJlIChpLmUuIHBjYXBfc2V0ZmlsdGVyKCkKICAqICAgYWZ0ZXIgdGhlIGNhcHR1cmUgaGFzIGJlZW4gc3RhcnRlZCkKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNlcmlhbGl6ZXMgdGhlIGZpbHRlciBpbnRvIHRoZSBzZW5kaW5nIGJ1ZmZlciAoJ3NlbmRidWYnLApAQCAtMTUxNCwxOSArMTU5NSwxOSBAQAogCWlmIChwY2FwX3BhY2tfYnBmZmlsdGVyKGZwLCAmc2VuZGJ1ZltzZW5kYnVmaWR4XSwgJnNlbmRidWZpZHgsIHByb2cpKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoc29ja19zZW5kKHByLT5ybXRfc29ja2N0cmwsIHNlbmRidWYsIHNlbmRidWZpZHgsIGZwLT5lcnJidWYsCisJaWYgKHNvY2tfc2VuZChwci0+cm10X3NvY2tjdHJsLCBwci0+Y3RybF9zc2wsIHNlbmRidWYsIHNlbmRidWZpZHgsIGZwLT5lcnJidWYsCiAJICAgIFBDQVBfRVJSQlVGX1NJWkUpIDwgMCkKIAkJcmV0dXJuIC0xOwogCiAJLyogUmVjZWl2ZSBhbmQgcHJvY2VzcyB0aGUgcmVwbHkgbWVzc2FnZSBoZWFkZXIuICovCi0JaWYgKHJwY2FwX3Byb2Nlc3NfbXNnX2hlYWRlcihwci0+cm10X3NvY2tjdHJsLCBwci0+cHJvdG9jb2xfdmVyc2lvbiwKKwlpZiAocnBjYXBfcHJvY2Vzc19tc2dfaGVhZGVyKHByLT5ybXRfc29ja2N0cmwsIHByLT5jdHJsX3NzbCwgcHItPnByb3RvY29sX3ZlcnNpb24sCiAJICAgIFJQQ0FQX01TR19VUERBVEVGSUxURVJfUkVRLCAmaGVhZGVyLCBmcC0+ZXJyYnVmKSA9PSAtMSkKIAkJcmV0dXJuIC0xOwogCiAJLyoKIAkgKiBJdCBzaG91bGRuJ3QgaGF2ZSBhbnkgY29udGVudHM7IGRpc2NhcmQgaXQgaWYgaXQgZG9lcy4KIAkgKi8KLQlpZiAocnBjYXBfZGlzY2FyZChwci0+cm10X3NvY2tjdHJsLCBoZWFkZXIucGxlbiwgZnAtPmVycmJ1ZikgPT0gLTEpCisJaWYgKHJwY2FwX2Rpc2NhcmQocHItPnJtdF9zb2NrY3RybCwgcHItPmN0cmxfc3NsLCBoZWFkZXIucGxlbiwgZnAtPmVycmJ1ZikgPT0gLTEpCiAJCXJldHVybiAtMTsKIAogCXJldHVybiAwOwpAQCAtMTYxMiwyMSArMTY5MywxOSBAQAogCQljaGFyIHBlZXJhZGRyZXNzWzEyOF07CiAJCWNoYXIgcGVlcmN0cmxwb3J0WzEyOF07CiAJCWNoYXIgKm5ld2ZpbHRlcjsKLQkJY29uc3QgaW50IG5ld3N0cmluZ3NpemUgPSAxMDI0OwotCQlzaXplX3QgY3VycmVudGZpbHRlcnNpemU7CiAKIAkJLyogR2V0IHRoZSBuYW1lL3BvcnQgb2Ygb3VyIHBlZXIgKi8KIAkJc2FkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpOwogCQlpZiAoZ2V0cGVlcm5hbWUocHItPnJtdF9zb2NrY3RybCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2FkZHIsICZzYWRkcmxlbikgPT0gLTEpCiAJCXsKLQkJCXNvY2tfZ2V0ZXJyb3IoImdldHBlZXJuYW1lKCk6ICIsIGZwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOworCQkJc29ja19nZXRlcnJvcigiZ2V0cGVlcm5hbWUoKSIsIGZwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAKIAkJaWYgKGdldG5hbWVpbmZvKChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNhZGRyLCBzYWRkcmxlbiwgcGVlcmFkZHJlc3MsCiAJCQlzaXplb2YocGVlcmFkZHJlc3MpLCBwZWVyY3RybHBvcnQsIHNpemVvZihwZWVyY3RybHBvcnQpLCBOSV9OVU1FUklDSE9TVCB8IE5JX05VTUVSSUNTRVJWKSkKIAkJewotCQkJc29ja19nZXRlcnJvcigiZ2V0bmFtZWluZm8oKTogIiwgZnAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSk7CisJCQlzb2NrX2dldGVycm9yKCJnZXRuYW1laW5mbygpIiwgZnAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIApAQCAtMTYzNCw3ICsxNzEzLDcgQEAKIAkJLyogR2V0IHRoZSBuYW1lL3BvcnQgb2YgdGhlIGN1cnJlbnQgaG9zdCAqLwogCQlpZiAoZ2V0c29ja25hbWUocHItPnJtdF9zb2NrY3RybCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2FkZHIsICZzYWRkcmxlbikgPT0gLTEpCiAJCXsKLQkJCXNvY2tfZ2V0ZXJyb3IoImdldHNvY2tuYW1lKCk6ICIsIGZwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOworCQkJc29ja19nZXRlcnJvcigiZ2V0c29ja25hbWUoKSIsIGZwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAKQEAgLTE2NDIsNDMgKzE3MjEsNjAgQEAKIAkJaWYgKGdldG5hbWVpbmZvKChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNhZGRyLCBzYWRkcmxlbiwgbXlhZGRyZXNzLAogCQkJc2l6ZW9mKG15YWRkcmVzcyksIG15Y3RybHBvcnQsIHNpemVvZihteWN0cmxwb3J0KSwgTklfTlVNRVJJQ0hPU1QgfCBOSV9OVU1FUklDU0VSVikpCiAJCXsKLQkJCXNvY2tfZ2V0ZXJyb3IoImdldG5hbWVpbmZvKCk6ICIsIGZwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOworCQkJc29ja19nZXRlcnJvcigiZ2V0bmFtZWluZm8oKSIsIGZwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAKIAkJLyogTGV0J3Mgbm93IGNoZWNrIHRoZSBkYXRhIHBvcnQgKi8KIAkJaWYgKGdldHNvY2tuYW1lKHByLT5ybXRfc29ja2RhdGEsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNhZGRyLCAmc2FkZHJsZW4pID09IC0xKQogCQl7Ci0JCQlzb2NrX2dldGVycm9yKCJnZXRzb2NrbmFtZSgpOiAiLCBmcC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKKwkJCXNvY2tfZ2V0ZXJyb3IoImdldHNvY2tuYW1lKCkiLCBmcC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCiAJCS8qIEdldCB0aGUgbG9jYWwgcG9ydCB0aGUgc3lzdGVtIHBpY2tlZCB1cCAqLwogCQlpZiAoZ2V0bmFtZWluZm8oKHN0cnVjdCBzb2NrYWRkciAqKSAmc2FkZHIsIHNhZGRybGVuLCBOVUxMLCAwLCBteWRhdGFwb3J0LCBzaXplb2YobXlkYXRhcG9ydCksIE5JX05VTUVSSUNTRVJWKSkKIAkJewotCQkJc29ja19nZXRlcnJvcigiZ2V0bmFtZWluZm8oKTogIiwgZnAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSk7CisJCQlzb2NrX2dldGVycm9yKCJnZXRuYW1laW5mbygpIiwgZnAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAotCQljdXJyZW50ZmlsdGVyc2l6ZSA9IHByLT5jdXJyZW50ZmlsdGVyID8gc3RybGVuKHByLT5jdXJyZW50ZmlsdGVyKSA6IDA7Ci0KLQkJbmV3ZmlsdGVyID0gKGNoYXIgKiltYWxsb2MoY3VycmVudGZpbHRlcnNpemUgKyBuZXdzdHJpbmdzaXplICsgMSk7Ci0KLQkJaWYgKGN1cnJlbnRmaWx0ZXJzaXplKQorCQlpZiAocHItPmN1cnJlbnRmaWx0ZXIgJiYgcHItPmN1cnJlbnRmaWx0ZXJbMF0gIT0gJ1wwJykKIAkJewotCQkJcGNhcF9zbnByaW50ZihuZXdmaWx0ZXIsIGN1cnJlbnRmaWx0ZXJzaXplICsgbmV3c3RyaW5nc2l6ZSwKLQkJCQkiKCVzKSBhbmQgbm90IChob3N0ICVzIGFuZCBob3N0ICVzIGFuZCBwb3J0ICVzIGFuZCBwb3J0ICVzKSBhbmQgbm90IChob3N0ICVzIGFuZCBob3N0ICVzIGFuZCBwb3J0ICVzKSIsCi0JCQkJcHItPmN1cnJlbnRmaWx0ZXIsIG15YWRkcmVzcywgcGVlcmFkZHJlc3MsIG15Y3RybHBvcnQsIHBlZXJjdHJscG9ydCwgbXlhZGRyZXNzLCBwZWVyYWRkcmVzcywgbXlkYXRhcG9ydCk7CisJCQkvKgorCQkJICogV2UgaGF2ZSBhIGN1cnJlbnQgZmlsdGVyOyBhZGQgaXRlbXMgdG8gaXQgdG8KKwkJCSAqIGZpbHRlciBvdXQgdGhpcyBycGNhcCBzZXNzaW9uLgorCQkJICovCisJCQlpZiAocGNhcF9hc3ByaW50ZigmbmV3ZmlsdGVyLAorCQkJICAgICIoJXMpIGFuZCBub3QgKGhvc3QgJXMgYW5kIGhvc3QgJXMgYW5kIHBvcnQgJXMgYW5kIHBvcnQgJXMpIGFuZCBub3QgKGhvc3QgJXMgYW5kIGhvc3QgJXMgYW5kIHBvcnQgJXMpIiwKKwkJCSAgICBwci0+Y3VycmVudGZpbHRlciwgbXlhZGRyZXNzLCBwZWVyYWRkcmVzcywKKwkJCSAgICBteWN0cmxwb3J0LCBwZWVyY3RybHBvcnQsIG15YWRkcmVzcywgcGVlcmFkZHJlc3MsCisJCQkgICAgbXlkYXRhcG9ydCkgPT0gLTEpCisJCQl7CisJCQkJLyogRmFpbGVkLiAqLworCQkJCXNucHJpbnRmKGZwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkJICAgICJDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG5ldyBmaWx0ZXIiKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CiAJCX0KIAkJZWxzZQogCQl7Ci0JCQlwY2FwX3NucHJpbnRmKG5ld2ZpbHRlciwgY3VycmVudGZpbHRlcnNpemUgKyBuZXdzdHJpbmdzaXplLAotCQkJCSJub3QgKGhvc3QgJXMgYW5kIGhvc3QgJXMgYW5kIHBvcnQgJXMgYW5kIHBvcnQgJXMpIGFuZCBub3QgKGhvc3QgJXMgYW5kIGhvc3QgJXMgYW5kIHBvcnQgJXMpIiwKLQkJCQlteWFkZHJlc3MsIHBlZXJhZGRyZXNzLCBteWN0cmxwb3J0LCBwZWVyY3RybHBvcnQsIG15YWRkcmVzcywgcGVlcmFkZHJlc3MsIG15ZGF0YXBvcnQpOworCQkJLyoKKwkJCSAqIFdlIGhhdmUgbm8gY3VycmVudCBmaWx0ZXI7IGNvbnN0cnVjdCBhIGZpbHRlciB0bworCQkJICogZmlsdGVyIG91dCB0aGlzIHJwY2FwIHNlc3Npb24uCisJCQkgKi8KKwkJCWlmIChwY2FwX2FzcHJpbnRmKCZuZXdmaWx0ZXIsCisJCQkgICAgIm5vdCAoaG9zdCAlcyBhbmQgaG9zdCAlcyBhbmQgcG9ydCAlcyBhbmQgcG9ydCAlcykgYW5kIG5vdCAoaG9zdCAlcyBhbmQgaG9zdCAlcyBhbmQgcG9ydCAlcykiLAorCQkJICAgIG15YWRkcmVzcywgcGVlcmFkZHJlc3MsIG15Y3RybHBvcnQsIHBlZXJjdHJscG9ydCwKKwkJCSAgICBteWFkZHJlc3MsIHBlZXJhZGRyZXNzLCBteWRhdGFwb3J0KSA9PSAtMSkKKwkJCXsKKwkJCQkvKiBGYWlsZWQuICovCisJCQkJc25wcmludGYoZnAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQkgICAgIkNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IGZpbHRlciIpOworCQkJCXJldHVybiAtMTsKKwkJCX0KIAkJfQogCi0JCW5ld2ZpbHRlcltjdXJyZW50ZmlsdGVyc2l6ZSArIG5ld3N0cmluZ3NpemVdID0gMDsKLQogCQkvKgogCQkgKiBUaGlzIGlzIG9ubHkgYW4gaGFjayB0byBwcmV2ZW50IHRoZSBzYXZlX2N1cnJlbnRfZmlsdGVyCiAJCSAqIHJvdXRpbmUsIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdoZW4gd2UgY2FsbCBwY2FwX2NvbXBpbGUoKSwKQEAgLTE3MjksMTIgKzE4MjUsMTIgQEAKIAkgKiB0aGF0IGRvIGZpdCBpbnRvIHRoZSBtZXNzYWdlLgogCSAqLwogCWlmIChmcC0+cm10X3NhbXAubWV0aG9kIDwgMCB8fCBmcC0+cm10X3NhbXAubWV0aG9kID4gMjU1KSB7Ci0JCXBjYXBfc25wcmludGYoZnAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoZnAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICJJbnZhbGlkIHNhbXBsaW5nIG1ldGhvZCAlZCIsIGZwLT5ybXRfc2FtcC5tZXRob2QpOwogCQlyZXR1cm4gLTE7CiAJfQogCWlmIChmcC0+cm10X3NhbXAudmFsdWUgPCAwIHx8IGZwLT5ybXRfc2FtcC52YWx1ZSA+IDY1NTM1KSB7Ci0JCXBjYXBfc25wcmludGYoZnAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoZnAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICJJbnZhbGlkIHNhbXBsaW5nIHZhbHVlICVkIiwgZnAtPnJtdF9zYW1wLnZhbHVlKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTE3NTksMTkgKzE4NTUsMTkgQEAKIAlzYW1wbGluZ19wYXJzLT5tZXRob2QgPSAodWludDgpZnAtPnJtdF9zYW1wLm1ldGhvZDsKIAlzYW1wbGluZ19wYXJzLT52YWx1ZSA9ICh1aW50MTYpaHRvbmwoZnAtPnJtdF9zYW1wLnZhbHVlKTsKIAotCWlmIChzb2NrX3NlbmQocHItPnJtdF9zb2NrY3RybCwgc2VuZGJ1Ziwgc2VuZGJ1ZmlkeCwgZnAtPmVycmJ1ZiwKKwlpZiAoc29ja19zZW5kKHByLT5ybXRfc29ja2N0cmwsIHByLT5jdHJsX3NzbCwgc2VuZGJ1Ziwgc2VuZGJ1ZmlkeCwgZnAtPmVycmJ1ZiwKIAkgICAgUENBUF9FUlJCVUZfU0laRSkgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAkvKiBSZWNlaXZlIGFuZCBwcm9jZXNzIHRoZSByZXBseSBtZXNzYWdlIGhlYWRlci4gKi8KLQlpZiAocnBjYXBfcHJvY2Vzc19tc2dfaGVhZGVyKHByLT5ybXRfc29ja2N0cmwsIHByLT5wcm90b2NvbF92ZXJzaW9uLAorCWlmIChycGNhcF9wcm9jZXNzX21zZ19oZWFkZXIocHItPnJtdF9zb2NrY3RybCwgcHItPmN0cmxfc3NsLCBwci0+cHJvdG9jb2xfdmVyc2lvbiwKIAkgICAgUlBDQVBfTVNHX1NFVFNBTVBMSU5HX1JFUSwgJmhlYWRlciwgZnAtPmVycmJ1ZikgPT0gLTEpCiAJCXJldHVybiAtMTsKIAogCS8qCiAJICogSXQgc2hvdWxkbid0IGhhdmUgYW55IGNvbnRlbnRzOyBkaXNjYXJkIGl0IGlmIGl0IGRvZXMuCiAJICovCi0JaWYgKHJwY2FwX2Rpc2NhcmQocHItPnJtdF9zb2NrY3RybCwgaGVhZGVyLnBsZW4sIGZwLT5lcnJidWYpID09IC0xKQorCWlmIChycGNhcF9kaXNjYXJkKHByLT5ybXRfc29ja2N0cmwsIHByLT5jdHJsX3NzbCwgaGVhZGVyLnBsZW4sIGZwLT5lcnJidWYpID09IC0xKQogCQlyZXR1cm4gLTE7CiAKIAlyZXR1cm4gMDsKQEAgLTE3ODUsMTYgKzE4ODEsMjUgQEAKIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgYXV0aGVudGljYXRpb24gYW5kIHByb3RvY29sIHZlcnNpb24KLSAqIG5lZ290aWF0aW9uLiAgSXQgZmlyc3QgdHJpZXMgdG8gYXV0aGVudGljYXRlIHdpdGggdGhlIG1heGltdW0KLSAqIHZlcnNpb24gd2Ugc3VwcG9ydCBhbmQsIGlmIHRoYXQgZmFpbHMgd2l0aCBhbiAiSSBkb24ndCBzdXBwb3J0Ci0gKiB0aGF0IHZlcnNpb24iIGVycm9yIGZyb20gdGhlIHNlcnZlciwgYW5kIHRoZSB2ZXJzaW9uIG51bWJlciBpbgotICogdGhlIHJlcGx5IGZyb20gdGhlIHNlcnZlciBpcyBvbmUgd2Ugc3VwcG9ydCwgdHJpZXMgYWdhaW4gd2l0aAotICogdGhhdCB2ZXJzaW9uLgorICogbmVnb3RpYXRpb24uICBJdCBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBvcGVuIHRoZSBjb25uZWN0aW9uCisgKiB3aXRoIHRoZSBvdGhlciBlbmQgcGFydHkuCisgKgorICogSXQgc2VuZHMgYXV0aGVudGljYXRpb24gcGFyYW1ldGVycyBvbiB0aGUgY29udHJvbCBzb2NrZXQgYW5kCisgKiByZWFkcyB0aGUgcmVwbHkuICBJZiB0aGUgcmVwbHkgaXMgYSBzdWNjZXNzIGluZGljYXRpb24sIGl0CisgKiBjaGVja3Mgd2hldGhlciB0aGUgcmVwbHkgaW5jbHVkZXMgbWluaW11bSBhbmQgbWF4aW11bSBzdXBwb3J0ZWQKKyAqIHZlcnNpb25zIGZyb20gdGhlIHNlcnZlcjsgaWYgbm90LCBpdCBhc3N1bWVzIGJvdGggYXJlIDAsIGFzCisgKiB0aGF0IG1lYW5zIGl0J3MgYW4gb2xkZXIgc2VydmVyIHRoYXQgZG9lc24ndCByZXR1cm4gc3VwcG9ydGVkCisgKiB2ZXJzaW9uIG51bWJlcnMgaW4gYXV0aGVudGljYXRpb24gcmVwbGllcywgc28gaXQgb25seSBzdXBwb3J0cworICogdmVyc2lvbiAwLiAgSXQgdGhlbiB0cmllcyB0byBkZXRlcm1pbmUgdGhlIG1heGltdW0gdmVyc2lvbgorICogc3VwcG9ydGVkIGJvdGggYnkgdXMgYW5kIGJ5IHRoZSBzZXJ2ZXIuICBJZiBpdCBjYW4gZmluZCBzdWNoIGEKKyAqIHZlcnNpb24sIGl0IHNldHMgdXMgdXAgdG8gdXNlIHRoYXQgdmVyc2lvbjsgb3RoZXJ3aXNlLCBpdCBmYWlscywKKyAqIGluZGljYXRpbmcgdGhhdCB0aGVyZSBpcyBubyB2ZXJzaW9uIHN1cHBvcnRlZCBieSB1cyBhbmQgYnkgdGhlCisgKiBzZXJ2ZXIuCiAgKgogICogXHBhcmFtIHNvY2s6IHRoZSBzb2NrZXQgd2UgYXJlIGN1cnJlbnRseSB1c2luZy4KICAqCi0gKiBccGFyYW0gdmVyOiBwb2ludGVyIHRvIHZhcmlhYmxlIGhvbGRpbmcgcHJvdG9jb2wgdmVyc2lvbiBudW1iZXIgdG8gc2VuZAotICogYW5kIHRvIHNldCB0byB0aGUgcHJvdG9jb2wgdmVyc2lvbiBudW1iZXIgaW4gdGhlIHJlcGx5LgorICogXHBhcmFtIHZlcjogcG9pbnRlciB0byB2YXJpYWJsZSB0byB3aGljaCB0byBzZXQgdGhlIHByb3RvY29sIHZlcnNpb24KKyAqIG51bWJlciB3ZSBzZWxlY3RlZC4KICAqCiAgKiBccGFyYW0gYXV0aDogYXV0aGVudGljYXRpb24gcGFyYW1ldGVycyB0aGF0IGhhdmUgdG8gYmUgc2VudC4KICAqCkBAIC0xODA2LDk3ICsxOTExLDE4IEBACiAgKiBccmV0dXJuICcwJyBpZiBldmVyeXRoaW5nIGlzIGZpbmUsICctMScgZm9yIGFuIGVycm9yLiAgRm9yIGVycm9ycywKICAqIGFuIGVycm9yIG1lc3NhZ2Ugc3RyaW5nIGlzIHJldHVybmVkIGluIHRoZSAnZXJyYnVmJyB2YXJpYWJsZS4KICAqLwotc3RhdGljIGludCBycGNhcF9kb2F1dGgoU09DS0VUIHNvY2tjdHJsLCB1aW50OCAqdmVyLCBzdHJ1Y3QgcGNhcF9ybXRhdXRoICphdXRoLCBjaGFyICplcnJidWYpCi17Ci0JaW50IHN0YXR1czsKLQotCS8qCi0JICogU2VuZCBhdXRoZW50aWNhdGlvbiB0byB0aGUgcmVtb3RlIG1hY2hpbmUuCi0JICoKLQkgKiBGaXJzdCB0cnkgd2l0aCB0aGUgbWF4aW11bSB2ZXJzaW9uIG51bWJlciB3ZSBzdXBwb3J0LgotCSAqLwotCSp2ZXIgPSBSUENBUF9NQVhfVkVSU0lPTjsKLQlzdGF0dXMgPSBycGNhcF9zZW5kYXV0aChzb2NrY3RybCwgdmVyLCBhdXRoLCBlcnJidWYpOwotCWlmIChzdGF0dXMgPT0gMCkKLQl7Ci0JCS8vCi0JCS8vIFN1Y2Nlc3MuCi0JCS8vCi0JCXJldHVybiAwOwotCX0KLQlpZiAoc3RhdHVzID09IC0xKQotCXsKLQkJLyogVW5yZWNvdmVyYWJsZSBlcnJvci4gKi8KLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qCi0JICogVGhlIHNlcnZlciBkb2Vzbid0IHN1cHBvcnQgdGhlIHZlcnNpb24gd2UgdXNlZCBpbiB0aGUgaW5pdGlhbAotCSAqIG1lc3NhZ2UsIGFuZCBpdCBzZW50IHVzIGJhY2sgYSByZXBseSBlaXRoZXIgd2l0aCB0aGUgbWF4aW11bQotCSAqIHZlcnNpb24gdGhleSBkbyBzdXBwb3J0LCBvciB3aXRoIHRoZSB2ZXJzaW9uIHdlIHNlbnQsIGFuZCB3ZQotCSAqIHN1cHBvcnQgdGhhdCB2ZXJzaW9uLiAgKnZlciBoYXMgYmVlbiBzZXQgdG8gdGhhdCB2ZXJzaW9uOyB0cnkKLQkgKiBhdXRoZW50aWNhdGluZyBhZ2FpbiB3aXRoIHRoYXQgdmVyc2lvbi4KLQkgKi8KLQlzdGF0dXMgPSBycGNhcF9zZW5kYXV0aChzb2NrY3RybCwgdmVyLCBhdXRoLCBlcnJidWYpOwotCWlmIChzdGF0dXMgPT0gMCkKLQl7Ci0JCS8vCi0JCS8vIFN1Y2Nlc3MuCi0JCS8vCi0JCXJldHVybiAwOwotCX0KLQlpZiAoc3RhdHVzID09IC0xKQotCXsKLQkJLyogVW5yZWNvdmVyYWJsZSBlcnJvci4gKi8KLQkJcmV0dXJuIC0xOwotCX0KLQlpZiAoc3RhdHVzID09IC0yKQotCXsKLQkJLyoKLQkJICogVGhlIHNlcnZlciBkb2Vzbid0IHN1cHBvcnQgdGhhdCB2ZXJzaW9uLCB3aGljaAotCQkgKiBtZWFucyB0aGVyZSBpcyBubyB2ZXJzaW9uIHdlIGJvdGggc3VwcG9ydCwgc28KLQkJICogdGhpcyBpcyBhIGZhdGFsIGVycm9yLgotCQkgKi8KLQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJUaGUgc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgcHJvdG9jb2wgdmVyc2lvbiB0aGF0IHdlIHN1cHBvcnQiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgInJwY2FwX3NlbmRhdXRoKCkgcmV0dXJuZWQgJWQiLCBzdGF0dXMpOwotCXJldHVybiAtMTsKLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgdGhlIGF1dGhlbnRpY2F0aW9uIG1lc3NhZ2UuCi0gKgotICogSXQgc2VuZHMgdGhlIGF1dGhlbnRpY2F0aW9uIHBhcmFtZXRlcnMgb24gdGhlIGNvbnRyb2wgc29ja2V0LgotICogSXQgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gb3BlbiB0aGUgY29ubmVjdGlvbiB3aXRoIHRoZSBvdGhlciBlbmQgcGFydHkuCi0gKgotICogXHBhcmFtIHNvY2s6IHRoZSBzb2NrZXQgd2UgYXJlIGN1cnJlbnRseSB1c2luZy4KLSAqCi0gKiBccGFyYW0gdmVyOiBwb2ludGVyIHRvIHZhcmlhYmxlIGhvbGRpbmcgcHJvdG9jb2wgdmVyc2lvbiBudW1iZXIgdG8gc2VuZAotICogYW5kIHRvIHNldCB0byB0aGUgcHJvdG9jb2wgdmVyc2lvbiBudW1iZXIgaW4gdGhlIHJlcGx5LgotICoKLSAqIFxwYXJhbSBhdXRoOiBhdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzIHRoYXQgaGF2ZSB0byBiZSBzZW50LgotICoKLSAqIFxwYXJhbSBlcnJidWY6IGEgcG9pbnRlciB0byBhIHVzZXItYWxsb2NhdGVkIGJ1ZmZlciAob2Ygc2l6ZQotICogUENBUF9FUlJCVUZfU0laRSkgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGVycm9yIG1lc3NhZ2UgKGluIGNhc2UgdGhlcmUKLSAqIGlzIG9uZSkuIEl0IGNvdWxkIGJlIGEgbmV0d29yayBwcm9ibGVtIG9yIHRoZSBmYWN0IHRoYXQgdGhlIGF1dGhvcml6YXRpb24KLSAqIGZhaWxlZC4KLSAqCi0gKiBccmV0dXJuICcwJyBpZiBldmVyeXRoaW5nIGlzIGZpbmUsICctMicgaWYgdGhlIHNlcnZlciBkaWRuJ3QgcmVwbHkgd2l0aAotICogdGhlIHByb3RvY29sIHZlcnNpb24gd2UgcmVxdWVzdGVkIGJ1dCByZXBsaWVkIHdpdGggYSB2ZXJzaW9uIHdlIGRvCi0gKiBzdXBwb3J0LCBvciAnLTEnIGZvciBvdGhlciBlcnJvcnMuICBGb3IgZXJyb3JzLCBhbiBlcnJvciBtZXNzYWdlIHN0cmluZwotICogaXMgcmV0dXJuZWQgaW4gdGhlICdlcnJidWYnIHZhcmlhYmxlLgotICovCi1zdGF0aWMgaW50IHJwY2FwX3NlbmRhdXRoKFNPQ0tFVCBzb2NrLCB1aW50OCAqdmVyLCBzdHJ1Y3QgcGNhcF9ybXRhdXRoICphdXRoLCBjaGFyICplcnJidWYpCitzdGF0aWMgaW50IHJwY2FwX2RvYXV0aChTT0NLRVQgc29ja2N0cmwsIFNTTCAqc3NsLCB1aW50OCAqdmVyLCBzdHJ1Y3QgcGNhcF9ybXRhdXRoICphdXRoLCBjaGFyICplcnJidWYpCiB7CiAJY2hhciBzZW5kYnVmW1JQQ0FQX05FVEJVRl9TSVpFXTsJLyogdGVtcG9yYXJ5IGJ1ZmZlciBpbiB3aGljaCBkYXRhIHRoYXQgaGFzIHRvIGJlIHNlbnQgaXMgYnVmZmVyZWQgKi8KIAlpbnQgc2VuZGJ1ZmlkeCA9IDA7CQkJLyogaW5kZXggd2hpY2gga2VlcHMgdGhlIG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgYnVmZmVyZWQgKi8KIAl1aW50MTYgbGVuZ3RoOwkJCQkvKiBsZW5ndGggb2YgdGhlIHBheWxvYWQgb2YgdGhpcyBtZXNzYWdlICovCi0JdWludDE2IGVycmNvZGU7CiAJc3RydWN0IHJwY2FwX2F1dGggKnJwYXV0aDsKIAl1aW50MTYgYXV0aF90eXBlOwogCXN0cnVjdCBycGNhcF9oZWFkZXIgaGVhZGVyOwogCXNpemVfdCBzdHJfbGVuZ3RoOworCXVpbnQzMiBwbGVuOworCXN0cnVjdCBycGNhcF9hdXRocmVwbHkgYXV0aHJlcGx5OwkvKiBhdXRoZW50aWNhdGlvbiByZXBseSBtZXNzYWdlICovCisJdWludDggb3VydmVyczsKIAogCWlmIChhdXRoKQogCXsKQEAgLTE5MTMsNyArMTkzOSw3IEBACiAJCQkJc3RyX2xlbmd0aCA9IHN0cmxlbihhdXRoLT51c2VybmFtZSk7CiAJCQkJaWYgKHN0cl9sZW5ndGggPiA2NTUzNSkKIAkJCQl7Ci0JCQkJCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiVXNlciBuYW1lIGlzIHRvbyBsb25nICg+IDY1NTM1IGJ5dGVzKSIpOworCQkJCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJVc2VyIG5hbWUgaXMgdG9vIGxvbmcgKD4gNjU1MzUgYnl0ZXMpIik7CiAJCQkJCXJldHVybiAtMTsKIAkJCQl9CiAJCQkJbGVuZ3RoICs9ICh1aW50MTYpc3RyX2xlbmd0aDsKQEAgLTE5MjMsNyArMTk0OSw3IEBACiAJCQkJc3RyX2xlbmd0aCA9IHN0cmxlbihhdXRoLT5wYXNzd29yZCk7CiAJCQkJaWYgKHN0cl9sZW5ndGggPiA2NTUzNSkKIAkJCQl7Ci0JCQkJCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiUGFzc3dvcmQgaXMgdG9vIGxvbmcgKD4gNjU1MzUgYnl0ZXMpIik7CisJCQkJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlBhc3N3b3JkIGlzIHRvbyBsb25nICg+IDY1NTM1IGJ5dGVzKSIpOwogCQkJCQlyZXR1cm4gLTE7CiAJCQkJfQogCQkJCWxlbmd0aCArPSAodWludDE2KXN0cl9sZW5ndGg7CkBAIC0xOTMxLDcgKzE5NTcsNyBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiQXV0aGVudGljYXRpb24gdHlwZSBub3QgcmVjb2duaXplZC4iKTsKKwkJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIkF1dGhlbnRpY2F0aW9uIHR5cGUgbm90IHJlY29nbml6ZWQuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIApAQCAtMTk0MywxMiArMTk2OSwxMSBAQAogCQlsZW5ndGggPSBzaXplb2Yoc3RydWN0IHJwY2FwX2F1dGgpOwogCX0KIAotCiAJaWYgKHNvY2tfYnVmZmVyaXplKE5VTEwsIHNpemVvZihzdHJ1Y3QgcnBjYXBfaGVhZGVyKSwgTlVMTCwKIAkJJnNlbmRidWZpZHgsIFJQQ0FQX05FVEJVRl9TSVpFLCBTT0NLQlVGX0NIRUNLT05MWSwgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSkKIAkJcmV0dXJuIC0xOwogCi0JcnBjYXBfY3JlYXRlaGRyKChzdHJ1Y3QgcnBjYXBfaGVhZGVyICopIHNlbmRidWYsICp2ZXIsCisJcnBjYXBfY3JlYXRlaGRyKChzdHJ1Y3QgcnBjYXBfaGVhZGVyICopIHNlbmRidWYsIDAsCiAJICAgIFJQQ0FQX01TR19BVVRIX1JFUSwgMCwgbGVuZ3RoKTsKIAogCXJwYXV0aCA9IChzdHJ1Y3QgcnBjYXBfYXV0aCAqKSAmc2VuZGJ1ZltzZW5kYnVmaWR4XTsKQEAgLTE5ODUsNjkgKzIwMTAsMTExIEBACiAJCXJwYXV0aC0+c2xlbjIgPSBodG9ucyhycGF1dGgtPnNsZW4yKTsKIAl9CiAKLQlpZiAoc29ja19zZW5kKHNvY2ssIHNlbmRidWYsIHNlbmRidWZpZHgsIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSkgPCAwKQorCWlmIChzb2NrX3NlbmQoc29ja2N0cmwsIHNzbCwgc2VuZGJ1Ziwgc2VuZGJ1ZmlkeCwgZXJyYnVmLAorCSAgICBQQ0FQX0VSUkJVRl9TSVpFKSA8IDApCiAJCXJldHVybiAtMTsKIAotCS8qIFJlY2VpdmUgdGhlIHJlcGx5ICovCi0JaWYgKHJwY2FwX3JlY3ZfbXNnX2hlYWRlcihzb2NrLCAmaGVhZGVyLCBlcnJidWYpID09IC0xKQorCS8qIFJlY2VpdmUgYW5kIHByb2Nlc3MgdGhlIHJlcGx5IG1lc3NhZ2UgaGVhZGVyICovCisJaWYgKHJwY2FwX3Byb2Nlc3NfbXNnX2hlYWRlcihzb2NrY3RybCwgc3NsLCAwLCBSUENBUF9NU0dfQVVUSF9SRVEsCisJICAgICZoZWFkZXIsIGVycmJ1ZikgPT0gLTEpCiAJCXJldHVybiAtMTsKIAotCWlmIChycGNhcF9jaGVja19tc2dfdHlwZShzb2NrLCBSUENBUF9NU0dfQVVUSF9SRVEsICZoZWFkZXIsCi0JICAgICZlcnJjb2RlLCBlcnJidWYpID09IC0xKQorCS8qCisJICogT0ssIGl0J3MgYW4gYXV0aGVudGljYXRpb24gcmVwbHksIHNvIHdlJ3JlIGxvZ2dlZCBpbi4KKwkgKgorCSAqIERpZCBpdCBzZW5kIGFueSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uPworCSAqLworCXBsZW4gPSBoZWFkZXIucGxlbjsKKwlpZiAocGxlbiAhPSAwKQogCXsKLQkJLyogRXJyb3IgbWVzc2FnZSAtIG9yIHNvbWV0aGluZyBlbHNlLCB3aGljaCBpcyBhIHByb3RvY29sIGVycm9yLiAqLwotCQlpZiAoaGVhZGVyLnR5cGUgPT0gUlBDQVBfTVNHX0VSUk9SICYmCi0JCSAgICBlcnJjb2RlID09IFBDQVBfRVJSX1dST05HVkVSKQorCQkvKiBZZXMgLSBpcyBpdCBiaWcgZW5vdWdoIHRvIGJlIHZlcnNpb24gaW5mb3JtYXRpb24/ICovCisJCWlmIChwbGVuIDwgc2l6ZW9mKHN0cnVjdCBycGNhcF9hdXRocmVwbHkpKQogCQl7Ci0JCQkvKgotCQkJICogVGhlIHNlcnZlciBkaWRuJ3Qgc3VwcG9ydCB0aGUgdmVyc2lvbiB3ZSBzZW50LAotCQkJICogYW5kIHJlcGxpZWQgd2l0aCB0aGUgbWF4aW11bSB2ZXJzaW9uIGl0IHN1cHBvcnRzCi0JCQkgKiBpZiBvdXIgdmVyc2lvbiB3YXMgdG9vIGJpZyBvciB3aXRoIHRoZSB2ZXJzaW9uCi0JCQkgKiB3ZSBzZW50IGlmIG91dCB2ZXJzaW9uIHdhcyB0b28gc21hbGwuCi0JCQkgKgotCQkJICogRG8gd2UgYWxzbyBzdXBwb3J0IGl0PwotCQkJICovCi0JCQlpZiAoIVJQQ0FQX1ZFUlNJT05fSVNfU1VQUE9SVEVEKGhlYWRlci52ZXIpKQotCQkJewotCQkJCS8qCi0JCQkJICogTm8sIHNvIHRoZXJlJ3Mgbm8gdmVyc2lvbiB3ZSBib3RoIHN1cHBvcnQuCi0JCQkJICogVGhpcyBpcyBhbiB1bnJlY292ZXJhYmxlIGVycm9yLgotCQkJCSAqLwotCQkJCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiVGhlIHNlcnZlciBkb2Vzbid0IHN1cHBvcnQgYW55IHByb3RvY29sIHZlcnNpb24gdGhhdCB3ZSBzdXBwb3J0Iik7Ci0JCQkJcmV0dXJuIC0xOwotCQkJfQotCi0JCQkvKgotCQkJICogT0ssIHVzZSB0aGF0IHZlcnNpb24sIGFuZCB0ZWxsIG91ciBjYWxsZXIgdG8KLQkJCSAqIHRyeSBhZ2Fpbi4KLQkJCSAqLwotCQkJKnZlciA9IGhlYWRlci52ZXI7Ci0JCQlyZXR1cm4gLTI7CisJCQkvKiBObyAtIGRpc2NhcmQgaXQgYW5kIGZhaWwuICovCisJCQkodm9pZClycGNhcF9kaXNjYXJkKHNvY2tjdHJsLCBzc2wsIHBsZW4sIE5VTEwpOworCQkJcmV0dXJuIC0xOwogCQl9CiAKKwkJLyogUmVhZCB0aGUgcmVwbHkgYm9keSAqLworCQlpZiAocnBjYXBfcmVjdihzb2NrY3RybCwgc3NsLCAoY2hhciAqKSZhdXRocmVwbHksCisJCSAgICBzaXplb2Yoc3RydWN0IHJwY2FwX2F1dGhyZXBseSksICZwbGVuLCBlcnJidWYpID09IC0xKQorCQl7CisJCQkodm9pZClycGNhcF9kaXNjYXJkKHNvY2tjdHJsLCBzc2wsIHBsZW4sIE5VTEwpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJLyogRGlzY2FyZCB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZSwgaWYgdGhlcmUgaXMgYW55LiAqLworCQlpZiAocnBjYXBfZGlzY2FyZChzb2NrY3RybCwgc3NsLCBwbGVuLCBlcnJidWYpID09IC0xKQorCQkJcmV0dXJuIC0xOworCiAJCS8qCi0JCSAqIE90aGVyIGVycm9yIC0gdW5yZWNvdmVyYWJsZS4KKwkJICogQ2hlY2sgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmVyc2lvbnMgZm9yIHNhbml0eTsKKwkJICogdGhlIG1pbmltdW0gbXVzdCBiZSA8PSB0aGUgbWF4aW11bS4KIAkJICovCi0JCXJldHVybiAtMTsKKwkJaWYgKGF1dGhyZXBseS5taW52ZXJzID4gYXV0aHJlcGx5Lm1heHZlcnMpCisJCXsKKwkJCS8qCisJCQkgKiBCb2d1cyAtIGdpdmUgdXAgb24gdGhpcyBzZXJ2ZXIuCisJCQkgKi8KKwkJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCSAgICAiVGhlIHNlcnZlcidzIG1pbmltdW0gc3VwcG9ydGVkIHByb3RvY29sIHZlcnNpb24gaXMgZ3JlYXRlciB0aGFuIGl0cyBtYXhpbXVtIHN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJLyogTm8gLSBpdCBzdXBwb3J0cyBvbmx5IHZlcnNpb24gMC4gKi8KKwkJYXV0aHJlcGx5Lm1pbnZlcnMgPSAwOworCQlhdXRocmVwbHkubWF4dmVycyA9IDA7CiAJfQogCiAJLyoKLQkgKiBPSywgaXQncyBhbiBhdXRoZW50aWNhdGlvbiByZXBseSwgc28gdGhleSdyZSBPSyB3aXRoIHRoZQotCSAqIHByb3RvY29sIHZlcnNpb24gd2Ugc2VudC4KLQkgKgotCSAqIERpc2NhcmQgdGhlIHJlc3Qgb2YgaXQuCisJICogT0ssIGxldCdzIHN0YXJ0IHdpdGggdGhlIG1heGltdW0gdmVyc2lvbiB0aGUgc2VydmVyIHN1cHBvcnRzLgogCSAqLwotCWlmIChycGNhcF9kaXNjYXJkKHNvY2ssIGhlYWRlci5wbGVuLCBlcnJidWYpID09IC0xKQotCQlyZXR1cm4gLTE7CisJb3VydmVycyA9IGF1dGhyZXBseS5tYXh2ZXJzOwogCisjaWYgUlBDQVBfTUlOX1ZFUlNJT04gIT0gMAorCS8qCisJICogSWYgdGhhdCdzIGxlc3MgdGhhbiB0aGUgbWluaW11bSB2ZXJzaW9uIHdlIHN1cHBvcnQsIHdlCisJICogY2FuJ3QgY29tbXVuaWNhdGUuCisJICovCisJaWYgKG91cnZlcnMgPCBSUENBUF9NSU5fVkVSU0lPTikKKwkJZ290byBub3ZlcnM7CisjZW5kaWYKKworCS8qCisJICogSWYgdGhhdCdzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSB2ZXJzaW9uIHdlIHN1cHBvcnQsCisJICogY2hvb3NlIHRoZSBtYXhpbXVtIHZlcnNpb24gd2Ugc3VwcG9ydC4KKwkgKi8KKwlpZiAob3VydmVycyA+IFJQQ0FQX01BWF9WRVJTSU9OKQorCXsKKwkJb3VydmVycyA9IFJQQ0FQX01BWF9WRVJTSU9OOworCisJCS8qCisJCSAqIElmIHRoYXQncyBsZXNzIHRoYW4gdGhlIG1pbmltdW0gdmVyc2lvbiB0aGV5CisJCSAqIHN1cHBvcnQsIHdlIGNhbid0IGNvbW11bmljYXRlLgorCQkgKi8KKwkJaWYgKG91cnZlcnMgPCBhdXRocmVwbHkubWludmVycykKKwkJCWdvdG8gbm92ZXJzOworCX0KKworCSp2ZXIgPSBvdXJ2ZXJzOwogCXJldHVybiAwOworCitub3ZlcnM6CisJLyoKKwkgKiBUaGVyZSBpcyBubyB2ZXJzaW9uIHdlIGJvdGggc3VwcG9ydDsgdGhhdCBpcyBhIGZhdGFsIGVycm9yLgorCSAqLworCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkgICAgIlRoZSBzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IGFueSBwcm90b2NvbCB2ZXJzaW9uIHRoYXQgd2Ugc3VwcG9ydCIpOworCXJldHVybiAtMTsKIH0KIAogLyogV2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgbm9uLWJsb2NraW5nIG1vZGUuICovCiBzdGF0aWMgaW50CiBwY2FwX2dldG5vbmJsb2NrX3JwY2FwKHBjYXBfdCAqcCkKIHsKLQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJICAgICJOb24tYmxvY2tpbmcgbW9kZSBpc24ndCBzdXBwb3J0ZWQgZm9yIGNhcHR1cmluZyByZW1vdGVseSB3aXRoIHJwY2FwIik7CiAJcmV0dXJuICgtMSk7CiB9CkBAIC0yMDU1LDExICsyMTIyLDE1MCBAQAogc3RhdGljIGludAogcGNhcF9zZXRub25ibG9ja19ycGNhcChwY2FwX3QgKnAsIGludCBub25ibG9jayBfVV8pCiB7Ci0JcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCSAgICAiTm9uLWJsb2NraW5nIG1vZGUgaXNuJ3Qgc3VwcG9ydGVkIGZvciBjYXB0dXJpbmcgcmVtb3RlbHkgd2l0aCBycGNhcCIpOwogCXJldHVybiAoLTEpOwogfQogCitzdGF0aWMgaW50CitycGNhcF9zZXR1cF9zZXNzaW9uKGNvbnN0IGNoYXIgKnNvdXJjZSwgc3RydWN0IHBjYXBfcm10YXV0aCAqYXV0aCwKKyAgICBpbnQgKmFjdGl2ZXAsIFNPQ0tFVCAqc29ja2N0cmxwLCB1aW50OCAqdXNlc19zc2xwLCBTU0wgKipzc2xwLAorICAgIGludCBybXRfZmxhZ3MsIHVpbnQ4ICpwcm90b2NvbF92ZXJzaW9ucCwgY2hhciAqaG9zdCwgY2hhciAqcG9ydCwKKyAgICBjaGFyICppZmFjZSwgY2hhciAqZXJyYnVmKQoreworCWludCB0eXBlOworCXN0cnVjdCBhY3RpdmVob3N0cyAqYWN0aXZlY29ubjsJCS8qIGFjdGl2ZSBjb25uZWN0aW9uLCBpZiB0aGVyZSBpcyBvbmUgKi8KKwlpbnQgZXJyb3I7CQkJCS8qIDEgaWYgcnBjYXBfcmVtb3RlYWN0X2dldHNvY2sgZ290IGFuIGVycm9yICovCisKKwkvKgorCSAqIERldGVybWluZSB0aGUgdHlwZSBvZiB0aGUgc291cmNlIChOVUxMLCBmaWxlLCBsb2NhbCwgcmVtb3RlKS4KKwkgKiBZb3UgbXVzdCBoYXZlIGEgdmFsaWQgc291cmNlIHN0cmluZyBldmVuIGlmIHdlJ3JlIGluIGFjdGl2ZSBtb2RlLAorCSAqIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBjYWxsIHRvIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gd2lsbCBmYWlsLgorCSAqLworCWlmIChwY2FwX3BhcnNlc3Jjc3RyX2V4KHNvdXJjZSwgJnR5cGUsIGhvc3QsIHBvcnQsIGlmYWNlLCB1c2VzX3NzbHAsCisJICAgIGVycmJ1ZikgPT0gLTEpCisJCXJldHVybiAtMTsKKworCS8qCisJICogSXQgbXVzdCBiZSByZW1vdGUuCisJICovCisJaWYgKHR5cGUgIT0gUENBUF9TUkNfSUZSRU1PVEUpCisJeworCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICAiTm9uLXJlbW90ZSBpbnRlcmZhY2UgcGFzc2VkIHRvIHJlbW90ZSBjYXB0dXJlIHJvdXRpbmUiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qCisJICogV2UgZG9uJ3QgeWV0IHN1cHBvcnQgRFRMUywgc28gaWYgdGhlIHVzZXIgYXNrcyBmb3IgYSBUTFMKKwkgKiBjb25uZWN0aW9uIGFuZCBhc2tzIGZvciBkYXRhIHBhY2tldHMgdG8gYmUgc2VudCBvdmVyIFVEUCwKKwkgKiB3ZSBoYXZlIHRvIGdpdmUgdXAuCisJICovCisJaWYgKCp1c2VzX3NzbHAgJiYgKHJtdF9mbGFncyAmIFBDQVBfT1BFTkZMQUdfREFUQVRYX1VEUCkpCisJeworCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICAiVExTIG5vdCBzdXBwb3J0ZWQgd2l0aCBVRFAgZm9yd2FyZCBvZiByZW1vdGUgcGFja2V0cyIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogV2FybmluZzogdGhpcyBjYWxsIGNhbiBiZSB0aGUgZmlyc3Qgb25lIGNhbGxlZCBieSB0aGUgdXNlci4gKi8KKwkvKiBGb3IgdGhpcyByZWFzb24sIHdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgV2luc29jayBzdXBwb3J0LiAqLworCWlmIChzb2NrX2luaXQoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSA9PSAtMSkKKwkJcmV0dXJuIC0xOworCisJLyogQ2hlY2sgZm9yIGFjdGl2ZSBtb2RlICovCisJYWN0aXZlY29ubiA9IHJwY2FwX3JlbW90ZWFjdF9nZXRzb2NrKGhvc3QsICZlcnJvciwgZXJyYnVmKTsKKwlpZiAoYWN0aXZlY29ubiAhPSBOVUxMKQorCXsKKwkJKmFjdGl2ZXAgPSAxOworCQkqc29ja2N0cmxwID0gYWN0aXZlY29ubi0+c29ja2N0cmw7CisJCSpzc2xwID0gYWN0aXZlY29ubi0+c3NsOworCQkqcHJvdG9jb2xfdmVyc2lvbnAgPSBhY3RpdmVjb25uLT5wcm90b2NvbF92ZXJzaW9uOworCX0KKwllbHNlCisJeworCQkqYWN0aXZlcCA9IDA7CisJCXN0cnVjdCBhZGRyaW5mbyBoaW50czsJCS8qIHRlbXAgdmFyaWFibGUgbmVlZGVkIHRvIHJlc29sdmUgaG9zdG5hbWVzIGludG8gdG8gc29ja2V0IHJlcHJlc2VudGF0aW9uICovCisJCXN0cnVjdCBhZGRyaW5mbyAqYWRkcmluZm87CS8qIHRlbXAgdmFyaWFibGUgbmVlZGVkIHRvIHJlc29sdmUgaG9zdG5hbWVzIGludG8gdG8gc29ja2V0IHJlcHJlc2VudGF0aW9uICovCisKKwkJaWYgKGVycm9yKQorCQl7CisJCQkvKgorCQkJICogQ2FsbCBmYWlsZWQuCisJCQkgKi8KKwkJCXJldHVybiAtMTsKKwkJfQorCisJCS8qCisJCSAqIFdlJ3JlIG5vdCBpbiBhY3RpdmUgbW9kZTsgbGV0J3MgdHJ5IHRvIG9wZW4gYSBuZXcKKwkJICogY29udHJvbCBjb25uZWN0aW9uLgorCQkgKi8KKwkJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKHN0cnVjdCBhZGRyaW5mbykpOworCQloaW50cy5haV9mYW1pbHkgPSBQRl9VTlNQRUM7CisJCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisKKwkJaWYgKHBvcnRbMF0gPT0gMCkKKwkJeworCQkJLyogdGhlIHVzZXIgY2hvc2Ugbm90IHRvIHNwZWNpZnkgdGhlIHBvcnQgKi8KKwkJCWlmIChzb2NrX2luaXRhZGRyZXNzKGhvc3QsIFJQQ0FQX0RFRkFVTFRfTkVUUE9SVCwKKwkJCSAgICAmaGludHMsICZhZGRyaW5mbywgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSA9PSAtMSkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoc29ja19pbml0YWRkcmVzcyhob3N0LCBwb3J0LCAmaGludHMsICZhZGRyaW5mbywKKwkJCSAgICBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpID09IC0xKQorCQkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmICgoKnNvY2tjdHJscCA9IHNvY2tfb3BlbihhZGRyaW5mbywgU09DS09QRU5fQ0xJRU5ULCAwLAorCQkgICAgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSkgPT0gSU5WQUxJRF9TT0NLRVQpCisJCXsKKwkJCWZyZWVhZGRyaW5mbyhhZGRyaW5mbyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQkvKiBhZGRyaW5mbyBpcyBubyBsb25nZXIgdXNlZCAqLworCQlmcmVlYWRkcmluZm8oYWRkcmluZm8pOworCQlhZGRyaW5mbyA9IE5VTEw7CisKKwkJaWYgKCp1c2VzX3NzbHApCisJCXsKKyNpZmRlZiBIQVZFX09QRU5TU0wKKwkJCSpzc2xwID0gc3NsX3Byb21vdGlvbigwLCAqc29ja2N0cmxwLCBlcnJidWYsCisJCQkgICAgUENBUF9FUlJCVUZfU0laRSk7CisJCQlpZiAoISpzc2xwKQorCQkJeworCQkJCXNvY2tfY2xvc2UoKnNvY2tjdHJscCwgTlVMTCwgMCk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorI2Vsc2UKKwkJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCSAgICAiTm8gVExTIHN1cHBvcnQiKTsKKwkJCXNvY2tfY2xvc2UoKnNvY2tjdHJscCwgTlVMTCwgMCk7CisJCQlyZXR1cm4gLTE7CisjZW5kaWYKKwkJfQorCisJCWlmIChycGNhcF9kb2F1dGgoKnNvY2tjdHJscCwgKnNzbHAsIHByb3RvY29sX3ZlcnNpb25wLCBhdXRoLAorCQkgICAgZXJyYnVmKSA9PSAtMSkKKwkJeworI2lmZGVmIEhBVkVfT1BFTlNTTAorCQkJaWYgKCpzc2xwKQorCQkJeworCQkJCS8vIEZpbmlzaCB1c2luZyB0aGUgU1NMIGhhbmRsZSBmb3IgdGhlIHNvY2tldC4KKwkJCQkvLyBUaGlzIG11c3QgYmUgZG9uZSAqYmVmb3JlKiB0aGUgc29ja2V0IGlzCisJCQkJLy8gY2xvc2VkLgorCQkJCXNzbF9maW5pc2goKnNzbHApOworCQkJfQorI2VuZGlmCisJCQlzb2NrX2Nsb3NlKCpzb2NrY3RybHAsIE5VTEwsIDApOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCXJldHVybiAwOworfQorCiAvKgogICogVGhpcyBmdW5jdGlvbiBvcGVucyBhIHJlbW90ZSBhZGFwdGVyIGJ5IG9wZW5pbmcgYW4gUlBDQVAgY29ubmVjdGlvbiBhbmQKICAqIHNvIG9uLgpAQCAtMjEwNSwyMSArMjMxMSwxOSBAQAogCWNoYXIgKnNvdXJjZV9zdHI7CiAJc3RydWN0IHBjYXBfcnBjYXAgKnByOwkJLyogc3RydWN0dXJlIHVzZWQgd2hlbiBkb2luZyBhIHJlbW90ZSBsaXZlIGNhcHR1cmUgKi8KIAljaGFyIGhvc3RbUENBUF9CVUZfU0laRV0sIGN0cmxwb3J0W1BDQVBfQlVGX1NJWkVdLCBpZmFjZVtQQ0FQX0JVRl9TSVpFXTsKLQlzdHJ1Y3QgYWN0aXZlaG9zdHMgKmFjdGl2ZWNvbm47CQkvKiBhY3RpdmUgY29ubmVjdGlvbiwgaWYgdGhlcmUgaXMgb25lICovCi0JaW50IGVycm9yOwkJCQkvKiAnMScgaWYgcnBjYXBfcmVtb3RlYWN0X2dldHNvY2sgcmV0dXJuZWQgYW4gZXJyb3IgKi8KIAlTT0NLRVQgc29ja2N0cmw7CisJU1NMICpzc2wgPSBOVUxMOwogCXVpbnQ4IHByb3RvY29sX3ZlcnNpb247CQkJLyogbmVnb3RpYXRlZCBwcm90b2NvbCB2ZXJzaW9uICovCiAJaW50IGFjdGl2ZTsKIAl1aW50MzIgcGxlbjsKIAljaGFyIHNlbmRidWZbUlBDQVBfTkVUQlVGX1NJWkVdOwkvKiB0ZW1wb3JhcnkgYnVmZmVyIGluIHdoaWNoIGRhdGEgdG8gYmUgc2VudCBpcyBidWZmZXJlZCAqLwogCWludCBzZW5kYnVmaWR4ID0gMDsJCQkvKiBpbmRleCB3aGljaCBrZWVwcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGN1cnJlbnRseSBidWZmZXJlZCAqLwotCWludCByZXR2YWw7CQkJCS8qIHN0b3JlIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9ucyAqLwogCiAJLyogUlBDQVAtcmVsYXRlZCB2YXJpYWJsZXMgKi8KIAlzdHJ1Y3QgcnBjYXBfaGVhZGVyIGhlYWRlcjsJCS8qIGhlYWRlciBvZiB0aGUgUlBDQVAgcGFja2V0ICovCiAJc3RydWN0IHJwY2FwX29wZW5yZXBseSBvcGVucmVwbHk7CS8qIG9wZW4gcmVwbHkgbWVzc2FnZSAqLwogCi0JZnAgPSBwY2FwX2NyZWF0ZV9jb21tb24oZXJyYnVmLCBzaXplb2YgKHN0cnVjdCBwY2FwX3JwY2FwKSk7CisJZnAgPSBQQ0FQX0NSRUFURV9DT01NT04oZXJyYnVmLCBzdHJ1Y3QgcGNhcF9ycGNhcCk7CiAJaWYgKGZwID09IE5VTEwpCiAJewogCQlyZXR1cm4gTlVMTDsKQEAgLTIxNTIsOTkgKzIzNTYsMTkgQEAKIAlwci0+cm10X2ZsYWdzID0gZmxhZ3M7CiAKIAkvKgotCSAqIGRldGVybWluZSB0aGUgdHlwZSBvZiB0aGUgc291cmNlIChOVUxMLCBmaWxlLCBsb2NhbCwgcmVtb3RlKQotCSAqIFlvdSBtdXN0IGhhdmUgYSB2YWxpZCBzb3VyY2Ugc3RyaW5nIGV2ZW4gaWYgd2UncmUgaW4gYWN0aXZlIG1vZGUsIGJlY2F1c2Ugb3RoZXJ3aXNlCi0JICogdGhlIGNhbGwgdG8gdGhlIGZvbGxvd2luZyBmdW5jdGlvbiB3aWxsIGZhaWwuCisJICogQXR0ZW1wdCB0byBzZXQgdXAgdGhlIHNlc3Npb24gd2l0aCB0aGUgc2VydmVyLgogCSAqLwotCWlmIChwY2FwX3BhcnNlc3Jjc3RyKGZwLT5vcHQuZGV2aWNlLCAmcmV0dmFsLCBob3N0LCBjdHJscG9ydCwgaWZhY2UsIGVycmJ1ZikgPT0gLTEpCisJaWYgKHJwY2FwX3NldHVwX3Nlc3Npb24oZnAtPm9wdC5kZXZpY2UsIGF1dGgsICZhY3RpdmUsICZzb2NrY3RybCwKKwkgICAgJnByLT51c2VzX3NzbCwgJnNzbCwgZmxhZ3MsICZwcm90b2NvbF92ZXJzaW9uLCBob3N0LCBjdHJscG9ydCwKKwkgICAgaWZhY2UsIGVycmJ1ZikgPT0gLTEpCiAJeworCQkvKiBTZXNzaW9uIHNldHVwIGZhaWxlZC4gKi8KIAkJcGNhcF9jbG9zZShmcCk7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCWlmIChyZXR2YWwgIT0gUENBUF9TUkNfSUZSRU1PVEUpCi0JewotCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlRoaXMgZnVuY3Rpb24gaXMgYWJsZSB0byBvcGVuIG9ubHkgcmVtb3RlIGludGVyZmFjZXMiKTsKLQkJcGNhcF9jbG9zZShmcCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCS8qCi0JICogV2FybmluZzogdGhpcyBjYWxsIGNhbiBiZSB0aGUgZmlyc3Qgb25lIGNhbGxlZCBieSB0aGUgdXNlci4KLQkgKiBGb3IgdGhpcyByZWFzb24sIHdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgV2luU29jayBzdXBwb3J0LgotCSAqLwotCWlmIChzb2NrX2luaXQoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSA9PSAtMSkKLQl7Ci0JCXBjYXBfY2xvc2UoZnApOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQkvKiBDaGVjayBmb3IgYWN0aXZlIG1vZGUgKi8KLQlhY3RpdmVjb25uID0gcnBjYXBfcmVtb3RlYWN0X2dldHNvY2soaG9zdCwgJmVycm9yLCBlcnJidWYpOwotCWlmIChhY3RpdmVjb25uICE9IE5VTEwpCi0JewotCQlzb2NrY3RybCA9IGFjdGl2ZWNvbm4tPnNvY2tjdHJsOwotCQlwcm90b2NvbF92ZXJzaW9uID0gYWN0aXZlY29ubi0+cHJvdG9jb2xfdmVyc2lvbjsKLQkJYWN0aXZlID0gMTsKLQl9Ci0JZWxzZQotCXsKLQkJc3RydWN0IGFkZHJpbmZvIGhpbnRzOwkJCS8qIHRlbXAsIG5lZWRlZCB0byBvcGVuIGEgc29ja2V0IGNvbm5lY3Rpb24gKi8KLQkJc3RydWN0IGFkZHJpbmZvICphZGRyaW5mbzsJCS8qIHRlbXAsIG5lZWRlZCB0byBvcGVuIGEgc29ja2V0IGNvbm5lY3Rpb24gKi8KLQotCQlpZiAoZXJyb3IpCi0JCXsKLQkJCS8qCi0JCQkgKiBDYWxsIGZhaWxlZC4KLQkJCSAqLwotCQkJcGNhcF9jbG9zZShmcCk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCi0JCS8qCi0JCSAqIFdlJ3JlIG5vdCBpbiBhY3RpdmUgbW9kZTsgbGV0J3MgdHJ5IHRvIG9wZW4gYSBuZXcKLQkJICogY29udHJvbCBjb25uZWN0aW9uLgotCQkgKi8KLQkJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKHN0cnVjdCBhZGRyaW5mbykpOwotCQloaW50cy5haV9mYW1pbHkgPSBQRl9VTlNQRUM7Ci0JCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07Ci0KLQkJaWYgKGN0cmxwb3J0WzBdID09IDApCi0JCXsKLQkJCS8qIHRoZSB1c2VyIGNob3NlIG5vdCB0byBzcGVjaWZ5IHRoZSBwb3J0ICovCi0JCQlpZiAoc29ja19pbml0YWRkcmVzcyhob3N0LCBSUENBUF9ERUZBVUxUX05FVFBPUlQsICZoaW50cywgJmFkZHJpbmZvLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpID09IC0xKQotCQkJewotCQkJCXBjYXBfY2xvc2UoZnApOwotCQkJCXJldHVybiBOVUxMOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJaWYgKHNvY2tfaW5pdGFkZHJlc3MoaG9zdCwgY3RybHBvcnQsICZoaW50cywgJmFkZHJpbmZvLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpID09IC0xKQotCQkJewotCQkJCXBjYXBfY2xvc2UoZnApOwotCQkJCXJldHVybiBOVUxMOwotCQkJfQotCQl9Ci0KLQkJaWYgKChzb2NrY3RybCA9IHNvY2tfb3BlbihhZGRyaW5mbywgU09DS09QRU5fQ0xJRU5ULCAwLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpKSA9PSBJTlZBTElEX1NPQ0tFVCkKLQkJewotCQkJZnJlZWFkZHJpbmZvKGFkZHJpbmZvKTsKLQkJCXBjYXBfY2xvc2UoZnApOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQotCQkvKiBhZGRyaW5mbyBpcyBubyBsb25nZXIgdXNlZCAqLwotCQlmcmVlYWRkcmluZm8oYWRkcmluZm8pOwotCi0JCWlmIChycGNhcF9kb2F1dGgoc29ja2N0cmwsICZwcm90b2NvbF92ZXJzaW9uLCBhdXRoLCBlcnJidWYpID09IC0xKQotCQl7Ci0JCQlzb2NrX2Nsb3NlKHNvY2tjdHJsLCBOVUxMLCAwKTsKLQkJCXBjYXBfY2xvc2UoZnApOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJYWN0aXZlID0gMDsKLQl9CisJLyogQWxsIGdvb2Qgc28gZmFyLCBzYXZlIHRoZSBzc2wgaGFuZGxlciAqLworCXNzbF9tYWluID0gc3NsOwogCiAJLyoKIAkgKiBOb3cgaXQncyB0aW1lIHRvIHN0YXJ0IHBsYXlpbmcgd2l0aCB0aGUgUlBDQVAgcHJvdG9jb2wKQEAgLTIyNjEsMjkgKzIzODUsMjkgQEAKIAkJUlBDQVBfTkVUQlVGX1NJWkUsIFNPQ0tCVUZfQlVGRkVSSVpFLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpKQogCQlnb3RvIGVycm9yX25vZGlzY2FyZDsKIAotCWlmIChzb2NrX3NlbmQoc29ja2N0cmwsIHNlbmRidWYsIHNlbmRidWZpZHgsIGVycmJ1ZiwKKwlpZiAoc29ja19zZW5kKHNvY2tjdHJsLCBzc2wsIHNlbmRidWYsIHNlbmRidWZpZHgsIGVycmJ1ZiwKIAkgICAgUENBUF9FUlJCVUZfU0laRSkgPCAwKQogCQlnb3RvIGVycm9yX25vZGlzY2FyZDsKIAogCS8qIFJlY2VpdmUgYW5kIHByb2Nlc3MgdGhlIHJlcGx5IG1lc3NhZ2UgaGVhZGVyLiAqLwotCWlmIChycGNhcF9wcm9jZXNzX21zZ19oZWFkZXIoc29ja2N0cmwsIHByb3RvY29sX3ZlcnNpb24sCisJaWYgKHJwY2FwX3Byb2Nlc3NfbXNnX2hlYWRlcihzb2NrY3RybCwgc3NsLCBwcm90b2NvbF92ZXJzaW9uLAogCSAgICBSUENBUF9NU0dfT1BFTl9SRVEsICZoZWFkZXIsIGVycmJ1ZikgPT0gLTEpCiAJCWdvdG8gZXJyb3Jfbm9kaXNjYXJkOwogCXBsZW4gPSBoZWFkZXIucGxlbjsKIAogCS8qIFJlYWQgdGhlIHJlcGx5IGJvZHkgKi8KLQlpZiAocnBjYXBfcmVjdihzb2NrY3RybCwgKGNoYXIgKikmb3BlbnJlcGx5LAorCWlmIChycGNhcF9yZWN2KHNvY2tjdHJsLCBzc2wsIChjaGFyICopJm9wZW5yZXBseSwKIAkgICAgc2l6ZW9mKHN0cnVjdCBycGNhcF9vcGVucmVwbHkpLCAmcGxlbiwgZXJyYnVmKSA9PSAtMSkKIAkJZ290byBlcnJvcjsKIAogCS8qIERpc2NhcmQgdGhlIHJlc3Qgb2YgdGhlIG1lc3NhZ2UsIGlmIHRoZXJlIGlzIGFueS4gKi8KLQlpZiAocnBjYXBfZGlzY2FyZChwci0+cm10X3NvY2tjdHJsLCBwbGVuLCBlcnJidWYpID09IC0xKQorCWlmIChycGNhcF9kaXNjYXJkKHNvY2tjdHJsLCBzc2wsIHBsZW4sIGVycmJ1ZikgPT0gLTEpCiAJCWdvdG8gZXJyb3Jfbm9kaXNjYXJkOwogCiAJLyogU2V0IHByb3BlciBmaWVsZHMgaW50byB0aGUgcGNhcF90IHN0cnVjdCAqLwogCWZwLT5saW5rdHlwZSA9IG50b2hsKG9wZW5yZXBseS5saW5rdHlwZSk7Ci0JZnAtPnR6b2ZmID0gbnRvaGwob3BlbnJlcGx5LnR6b2ZmKTsKIAlwci0+cm10X3NvY2tjdHJsID0gc29ja2N0cmw7CisJcHItPmN0cmxfc3NsID0gc3NsOwogCXByLT5wcm90b2NvbF92ZXJzaW9uID0gcHJvdG9jb2xfdmVyc2lvbjsKIAlwci0+cm10X2NsaWVudHNpZGUgPSAxOwogCkBAIC0yMzE1LDExICsyNDM5LDIxIEBACiAJICogV2UgYWxyZWFkeSByZXBvcnRlZCBhbiBlcnJvcjsgaWYgdGhpcyBnZXRzIGFuIGVycm9yLCBqdXN0CiAJICogZHJpdmUgb24uCiAJICovCi0JKHZvaWQpcnBjYXBfZGlzY2FyZChwci0+cm10X3NvY2tjdHJsLCBwbGVuLCBOVUxMKTsKKwkodm9pZClycGNhcF9kaXNjYXJkKHNvY2tjdHJsLCBwci0+Y3RybF9zc2wsIHBsZW4sIE5VTEwpOwogCiBlcnJvcl9ub2Rpc2NhcmQ6CiAJaWYgKCFhY3RpdmUpCisJeworI2lmZGVmIEhBVkVfT1BFTlNTTAorCQlpZiAoc3NsKQorCQl7CisJCQkvLyBGaW5pc2ggdXNpbmcgdGhlIFNTTCBoYW5kbGUgZm9yIHRoZSBzb2NrZXQuCisJCQkvLyBUaGlzIG11c3QgYmUgZG9uZSAqYmVmb3JlKiB0aGUgc29ja2V0IGlzIGNsb3NlZC4KKwkJCXNzbF9maW5pc2goc3NsKTsKKwkJfQorI2VuZGlmCiAJCXNvY2tfY2xvc2Uoc29ja2N0cmwsIE5VTEwsIDApOworCX0KIAogCXBjYXBfY2xvc2UoZnApOwogCXJldHVybiBOVUxMOwpAQCAtMjMyNyw4ICsyNDYxLDEwIEBACiAKIC8qIFN0cmluZyBpZGVudGlmaWVyIHRvIGJlIHVzZWQgaW4gdGhlIHBjYXBfZmluZGFsbGRldnNfZXgoKSAqLwogI2RlZmluZSBQQ0FQX1RFWFRfU09VUkNFX0FEQVBURVIgIk5ldHdvcmsgYWRhcHRlciIKKyNkZWZpbmUgUENBUF9URVhUX1NPVVJDRV9BREFQVEVSX0xFTiAoc2l6ZW9mIFBDQVBfVEVYVF9TT1VSQ0VfQURBUFRFUiAtIDEpCiAvKiBTdHJpbmcgaWRlbnRpZmllciB0byBiZSB1c2VkIGluIHRoZSBwY2FwX2ZpbmRhbGxkZXZzX2V4KCkgKi8KICNkZWZpbmUgUENBUF9URVhUX1NPVVJDRV9PTl9SRU1PVEVfSE9TVCAib24gcmVtb3RlIG5vZGUiCisjZGVmaW5lIFBDQVBfVEVYVF9TT1VSQ0VfT05fUkVNT1RFX0hPU1RfTEVOIChzaXplb2YgUENBUF9URVhUX1NPVVJDRV9PTl9SRU1PVEVfSE9TVCAtIDEpCiAKIHN0YXRpYyB2b2lkCiBmcmVlYWRkcihzdHJ1Y3QgcGNhcF9hZGRyICphZGRyKQpAQCAtMjM0MSwxOCArMjQ3NywxNyBAQAogfQogCiBpbnQKLXBjYXBfZmluZGFsbGRldnNfZXhfcmVtb3RlKGNoYXIgKnNvdXJjZSwgc3RydWN0IHBjYXBfcm10YXV0aCAqYXV0aCwgcGNhcF9pZl90ICoqYWxsZGV2cywgY2hhciAqZXJyYnVmKQorcGNhcF9maW5kYWxsZGV2c19leF9yZW1vdGUoY29uc3QgY2hhciAqc291cmNlLCBzdHJ1Y3QgcGNhcF9ybXRhdXRoICphdXRoLCBwY2FwX2lmX3QgKiphbGxkZXZzLCBjaGFyICplcnJidWYpCiB7Ci0Jc3RydWN0IGFjdGl2ZWhvc3RzICphY3RpdmVjb25uOwkvKiBhY3RpdmUgY29ubmVjdGlvbiwgaWYgdGhlcmUgaXMgb25lICovCi0JaW50IGVycm9yOwkJCS8qICcxJyBpZiBycGNhcF9yZW1vdGVhY3RfZ2V0c29jayByZXR1cm5lZCBhbiBlcnJvciAqLwogCXVpbnQ4IHByb3RvY29sX3ZlcnNpb247CQkvKiBwcm90b2NvbCB2ZXJzaW9uICovCiAJU09DS0VUIHNvY2tjdHJsOwkJLyogc29ja2V0IGRlc2NyaXB0b3Igb2YgdGhlIGNvbnRyb2wgY29ubmVjdGlvbiAqLworCVNTTCAqc3NsID0gTlVMTDsJCS8qIG9wdGlvbmFsIFNTTCBoYW5kbGVyIGZvciBzb2NrY3RybCAqLwogCXVpbnQzMiBwbGVuOwogCXN0cnVjdCBycGNhcF9oZWFkZXIgaGVhZGVyOwkvKiBzdHJ1Y3R1cmUgdGhhdCBrZWVwcyB0aGUgZ2VuZXJhbCBoZWFkZXIgb2YgdGhlIHJwY2FwIHByb3RvY29sICovCiAJaW50IGksIGo7CQkvKiB0ZW1wIHZhcmlhYmxlcyAqLwogCWludCBuaWY7CQkvKiBOdW1iZXIgb2YgaW50ZXJmYWNlcyBsaXN0ZWQgKi8KIAlpbnQgYWN0aXZlOwkJCS8qICd0cnVlJyBpZiB3ZSB0aGUgb3RoZXIgZW5kLXBhcnR5IGlzIGluIGFjdGl2ZSBtb2RlICovCi0JaW50IHR5cGU7CisJdWludDggdXNlc19zc2w7CiAJY2hhciBob3N0W1BDQVBfQlVGX1NJWkVdLCBwb3J0W1BDQVBfQlVGX1NJWkVdOwogCWNoYXIgdG1wc3RyaW5nW1BDQVBfQlVGX1NJWkUgKyAxXTsJCS8qIE5lZWRlZCB0byBjb252ZXJ0IG5hbWVzIGFuZCBkZXNjcmlwdGlvbnMgZnJvbSAnb2xkJyBzeW50YXggdG8gdGhlICduZXcnIG9uZSAqLwogCXBjYXBfaWZfdCAqbGFzdGRldjsJLyogTGFzdCBkZXZpY2UgaW4gdGhlIHBjYXBfaWZfdCBsaXN0ICovCkBAIC0yMzYyLDg0ICsyNDk3LDI2IEBACiAJKCphbGxkZXZzKSA9IE5VTEw7CiAJbGFzdGRldiA9IE5VTEw7CiAKLQkvKiBSZXRyaWV2ZSB0aGUgbmVlZGVkIGRhdGEgZm9yIGdldHRpbmcgYWRhcHRlciBsaXN0ICovCi0JaWYgKHBjYXBfcGFyc2VzcmNzdHIoc291cmNlLCAmdHlwZSwgaG9zdCwgcG9ydCwgTlVMTCwgZXJyYnVmKSA9PSAtMSkKLQkJcmV0dXJuIC0xOwotCi0JLyogV2FybmluZzogdGhpcyBjYWxsIGNhbiBiZSB0aGUgZmlyc3Qgb25lIGNhbGxlZCBieSB0aGUgdXNlci4gKi8KLQkvKiBGb3IgdGhpcyByZWFzb24sIHdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgV2luU29jayBzdXBwb3J0LiAqLwotCWlmIChzb2NrX2luaXQoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSA9PSAtMSkKLQkJcmV0dXJuIC0xOwotCi0JLyogQ2hlY2sgZm9yIGFjdGl2ZSBtb2RlICovCi0JYWN0aXZlY29ubiA9IHJwY2FwX3JlbW90ZWFjdF9nZXRzb2NrKGhvc3QsICZlcnJvciwgZXJyYnVmKTsKLQlpZiAoYWN0aXZlY29ubiAhPSBOVUxMKQorCS8qCisJICogQXR0ZW1wdCB0byBzZXQgdXAgdGhlIHNlc3Npb24gd2l0aCB0aGUgc2VydmVyLgorCSAqLworCWlmIChycGNhcF9zZXR1cF9zZXNzaW9uKHNvdXJjZSwgYXV0aCwgJmFjdGl2ZSwgJnNvY2tjdHJsLCAmdXNlc19zc2wsCisJICAgICZzc2wsIDAsICZwcm90b2NvbF92ZXJzaW9uLCBob3N0LCBwb3J0LCBOVUxMLCBlcnJidWYpID09IC0xKQogCXsKLQkJc29ja2N0cmwgPSBhY3RpdmVjb25uLT5zb2NrY3RybDsKLQkJcHJvdG9jb2xfdmVyc2lvbiA9IGFjdGl2ZWNvbm4tPnByb3RvY29sX3ZlcnNpb247Ci0JCWFjdGl2ZSA9IDE7Ci0JfQotCWVsc2UKLQl7Ci0JCXN0cnVjdCBhZGRyaW5mbyBoaW50czsJCS8qIHRlbXAgdmFyaWFibGUgbmVlZGVkIHRvIHJlc29sdmUgaG9zdG5hbWVzIGludG8gdG8gc29ja2V0IHJlcHJlc2VudGF0aW9uICovCi0JCXN0cnVjdCBhZGRyaW5mbyAqYWRkcmluZm87CS8qIHRlbXAgdmFyaWFibGUgbmVlZGVkIHRvIHJlc29sdmUgaG9zdG5hbWVzIGludG8gdG8gc29ja2V0IHJlcHJlc2VudGF0aW9uICovCi0KLQkJaWYgKGVycm9yKQotCQl7Ci0JCQkvKgotCQkJICogQ2FsbCBmYWlsZWQuCi0JCQkgKi8KLQkJCXJldHVybiAtMTsKLQkJfQotCi0JCS8qCi0JCSAqIFdlJ3JlIG5vdCBpbiBhY3RpdmUgbW9kZTsgbGV0J3MgdHJ5IHRvIG9wZW4gYSBuZXcKLQkJICogY29udHJvbCBjb25uZWN0aW9uLgotCQkgKi8KLQkJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKHN0cnVjdCBhZGRyaW5mbykpOwotCQloaW50cy5haV9mYW1pbHkgPSBQRl9VTlNQRUM7Ci0JCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07Ci0KLQkJaWYgKHBvcnRbMF0gPT0gMCkKLQkJewotCQkJLyogdGhlIHVzZXIgY2hvc2Ugbm90IHRvIHNwZWNpZnkgdGhlIHBvcnQgKi8KLQkJCWlmIChzb2NrX2luaXRhZGRyZXNzKGhvc3QsIFJQQ0FQX0RFRkFVTFRfTkVUUE9SVCwgJmhpbnRzLCAmYWRkcmluZm8sIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSkgPT0gLTEpCi0JCQkJcmV0dXJuIC0xOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJaWYgKHNvY2tfaW5pdGFkZHJlc3MoaG9zdCwgcG9ydCwgJmhpbnRzLCAmYWRkcmluZm8sIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSkgPT0gLTEpCi0JCQkJcmV0dXJuIC0xOwotCQl9Ci0KLQkJaWYgKChzb2NrY3RybCA9IHNvY2tfb3BlbihhZGRyaW5mbywgU09DS09QRU5fQ0xJRU5ULCAwLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpKSA9PSBJTlZBTElEX1NPQ0tFVCkKLQkJewotCQkJZnJlZWFkZHJpbmZvKGFkZHJpbmZvKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCi0JCS8qIGFkZHJpbmZvIGlzIG5vIGxvbmdlciB1c2VkICovCi0JCWZyZWVhZGRyaW5mbyhhZGRyaW5mbyk7Ci0JCWFkZHJpbmZvID0gTlVMTDsKLQotCQlpZiAocnBjYXBfZG9hdXRoKHNvY2tjdHJsLCAmcHJvdG9jb2xfdmVyc2lvbiwgYXV0aCwgZXJyYnVmKSA9PSAtMSkKLQkJewotCQkJc29ja19jbG9zZShzb2NrY3RybCwgTlVMTCwgMCk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJYWN0aXZlID0gMDsKKwkJLyogU2Vzc2lvbiBzZXR1cCBmYWlsZWQuICovCisJCXJldHVybiAtMTsKIAl9CiAKIAkvKiBSUENBUCBmaW5kYWxsZGV2cyBjb21tYW5kICovCiAJcnBjYXBfY3JlYXRlaGRyKCZoZWFkZXIsIHByb3RvY29sX3ZlcnNpb24sIFJQQ0FQX01TR19GSU5EQUxMSUZfUkVRLAogCSAgICAwLCAwKTsKIAotCWlmIChzb2NrX3NlbmQoc29ja2N0cmwsIChjaGFyICopJmhlYWRlciwgc2l6ZW9mKHN0cnVjdCBycGNhcF9oZWFkZXIpLAorCWlmIChzb2NrX3NlbmQoc29ja2N0cmwsIHNzbCwgKGNoYXIgKikmaGVhZGVyLCBzaXplb2Yoc3RydWN0IHJwY2FwX2hlYWRlciksCiAJICAgIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSkgPCAwKQogCQlnb3RvIGVycm9yX25vZGlzY2FyZDsKIAogCS8qIFJlY2VpdmUgYW5kIHByb2Nlc3MgdGhlIHJlcGx5IG1lc3NhZ2UgaGVhZGVyLiAqLwotCWlmIChycGNhcF9wcm9jZXNzX21zZ19oZWFkZXIoc29ja2N0cmwsIHByb3RvY29sX3ZlcnNpb24sCisJaWYgKHJwY2FwX3Byb2Nlc3NfbXNnX2hlYWRlcihzb2NrY3RybCwgc3NsLCBwcm90b2NvbF92ZXJzaW9uLAogCSAgICBSUENBUF9NU0dfRklOREFMTElGX1JFUSwgJmhlYWRlciwgZXJyYnVmKSA9PSAtMSkKIAkJZ290byBlcnJvcl9ub2Rpc2NhcmQ7CiAKQEAgLTI0NTMsMTMgKzI1MzAsMTIgQEAKIAl7CiAJCXN0cnVjdCBycGNhcF9maW5kYWxsZGV2c19pZiBmaW5kYWxsZGV2c19pZjsKIAkJY2hhciB0bXBzdHJpbmcyW1BDQVBfQlVGX1NJWkUgKyAxXTsJCS8qIE5lZWRlZCB0byBjb252ZXJ0IG5hbWVzIGFuZCBkZXNjcmlwdGlvbnMgZnJvbSAnb2xkJyBzeW50YXggdG8gdGhlICduZXcnIG9uZSAqLwotCQlzaXplX3Qgc3RyaW5nbGVuOwogCQlzdHJ1Y3QgcGNhcF9hZGRyICphZGRyLCAqcHJldmFkZHI7CiAKIAkJdG1wc3RyaW5nMltQQ0FQX0JVRl9TSVpFXSA9IDA7CiAKIAkJLyogcmVjZWl2ZSB0aGUgZmluZGFsbGRldnMgc3RydWN0dXJlIGZyb20gcmVtb3RlIGhvc3QgKi8KLQkJaWYgKHJwY2FwX3JlY3Yoc29ja2N0cmwsIChjaGFyICopJmZpbmRhbGxkZXZzX2lmLAorCQlpZiAocnBjYXBfcmVjdihzb2NrY3RybCwgc3NsLCAoY2hhciAqKSZmaW5kYWxsZGV2c19pZiwKIAkJICAgIHNpemVvZihzdHJ1Y3QgcnBjYXBfZmluZGFsbGRldnNfaWYpLCAmcGxlbiwgZXJyYnVmKSA9PSAtMSkKIAkJCWdvdG8gZXJyb3I7CiAKQEAgLTI1MDMsNjYgKzI1NzksNTQgQEAKIAogCQkJaWYgKGZpbmRhbGxkZXZzX2lmLm5hbWVsZW4gPj0gc2l6ZW9mKHRtcHN0cmluZykpCiAJCQl7Ci0JCQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJJbnRlcmZhY2UgbmFtZSB0b28gbG9uZyIpOworCQkJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIkludGVyZmFjZSBuYW1lIHRvbyBsb25nIik7CiAJCQkJZ290byBlcnJvcjsKIAkJCX0KIAogCQkJLyogUmV0cmlldmUgYWRhcHRlciBuYW1lICovCi0JCQlpZiAocnBjYXBfcmVjdihzb2NrY3RybCwgdG1wc3RyaW5nLAorCQkJaWYgKHJwY2FwX3JlY3Yoc29ja2N0cmwsIHNzbCwgdG1wc3RyaW5nLAogCQkJICAgIGZpbmRhbGxkZXZzX2lmLm5hbWVsZW4sICZwbGVuLCBlcnJidWYpID09IC0xKQogCQkJCWdvdG8gZXJyb3I7CiAKIAkJCXRtcHN0cmluZ1tmaW5kYWxsZGV2c19pZi5uYW1lbGVuXSA9IDA7CiAKIAkJCS8qIENyZWF0ZSB0aGUgbmV3IGRldmljZSBpZGVudGlmaWVyICovCi0JCQlpZiAocGNhcF9jcmVhdGVzcmNzdHIodG1wc3RyaW5nMiwgUENBUF9TUkNfSUZSRU1PVEUsIGhvc3QsIHBvcnQsIHRtcHN0cmluZywgZXJyYnVmKSA9PSAtMSkKLQkJCQlyZXR1cm4gLTE7CisJCQlpZiAocGNhcF9jcmVhdGVzcmNzdHJfZXgodG1wc3RyaW5nMiwgUENBUF9TUkNfSUZSRU1PVEUsCisJCQkgICAgaG9zdCwgcG9ydCwgdG1wc3RyaW5nLCB1c2VzX3NzbCwgZXJyYnVmKSA9PSAtMSkKKwkJCQlnb3RvIGVycm9yOwogCi0JCQlzdHJpbmdsZW4gPSBzdHJsZW4odG1wc3RyaW5nMik7Ci0KLQkJCWRldi0+bmFtZSA9IChjaGFyICopbWFsbG9jKHN0cmluZ2xlbiArIDEpOworCQkJZGV2LT5uYW1lID0gc3RyZHVwKHRtcHN0cmluZzIpOwogCQkJaWYgKGRldi0+bmFtZSA9PSBOVUxMKQogCQkJewogCQkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZXJyYnVmLAogCQkJCSAgICBQQ0FQX0VSUkJVRl9TSVpFLCBlcnJubywgIm1hbGxvYygpIGZhaWxlZCIpOwogCQkJCWdvdG8gZXJyb3I7CiAJCQl9Ci0KLQkJCS8qIENvcHkgdGhlIG5ldyBkZXZpY2UgbmFtZSBpbnRvIHRoZSBjb3JyZWN0IG1lbW9yeSBsb2NhdGlvbiAqLwotCQkJc3RybGNweShkZXYtPm5hbWUsIHRtcHN0cmluZzIsIHN0cmluZ2xlbiArIDEpOwogCQl9CiAKIAkJaWYgKGZpbmRhbGxkZXZzX2lmLmRlc2NsZW4pCiAJCXsKIAkJCWlmIChmaW5kYWxsZGV2c19pZi5kZXNjbGVuID49IHNpemVvZih0bXBzdHJpbmcpKQogCQkJewotCQkJCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiSW50ZXJmYWNlIGRlc2NyaXB0aW9uIHRvbyBsb25nIik7CisJCQkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiSW50ZXJmYWNlIGRlc2NyaXB0aW9uIHRvbyBsb25nIik7CiAJCQkJZ290byBlcnJvcjsKIAkJCX0KIAogCQkJLyogUmV0cmlldmUgYWRhcHRlciBkZXNjcmlwdGlvbiAqLwotCQkJaWYgKHJwY2FwX3JlY3Yoc29ja2N0cmwsIHRtcHN0cmluZywKKwkJCWlmIChycGNhcF9yZWN2KHNvY2tjdHJsLCBzc2wsIHRtcHN0cmluZywKIAkJCSAgICBmaW5kYWxsZGV2c19pZi5kZXNjbGVuLCAmcGxlbiwgZXJyYnVmKSA9PSAtMSkKIAkJCQlnb3RvIGVycm9yOwogCiAJCQl0bXBzdHJpbmdbZmluZGFsbGRldnNfaWYuZGVzY2xlbl0gPSAwOwogCi0JCQlwY2FwX3NucHJpbnRmKHRtcHN0cmluZzIsIHNpemVvZih0bXBzdHJpbmcyKSAtIDEsICIlcyAnJXMnICVzICVzIiwgUENBUF9URVhUX1NPVVJDRV9BREFQVEVSLAotCQkJCXRtcHN0cmluZywgUENBUF9URVhUX1NPVVJDRV9PTl9SRU1PVEVfSE9TVCwgaG9zdCk7Ci0KLQkJCXN0cmluZ2xlbiA9IHN0cmxlbih0bXBzdHJpbmcyKTsKLQotCQkJZGV2LT5kZXNjcmlwdGlvbiA9IChjaGFyICopbWFsbG9jKHN0cmluZ2xlbiArIDEpOwotCi0JCQlpZiAoZGV2LT5kZXNjcmlwdGlvbiA9PSBOVUxMKQorCQkJaWYgKHBjYXBfYXNwcmludGYoJmRldi0+ZGVzY3JpcHRpb24sCisJCQkgICAgIiVzICclcycgJXMgJXMiLCBQQ0FQX1RFWFRfU09VUkNFX0FEQVBURVIsCisJCQkgICAgdG1wc3RyaW5nLCBQQ0FQX1RFWFRfU09VUkNFX09OX1JFTU9URV9IT1NULCBob3N0KSA9PSAtMSkKIAkJCXsKIAkJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVycmJ1ZiwKIAkJCQkgICAgUENBUF9FUlJCVUZfU0laRSwgZXJybm8sICJtYWxsb2MoKSBmYWlsZWQiKTsKIAkJCQlnb3RvIGVycm9yOwogCQkJfQotCi0JCQkvKiBDb3B5IHRoZSBuZXcgZGV2aWNlIGRlc2NyaXB0aW9uIGludG8gdGhlIGNvcnJlY3QgbWVtb3J5IGxvY2F0aW9uICovCi0JCQlzdHJsY3B5KGRldi0+ZGVzY3JpcHRpb24sIHRtcHN0cmluZzIsIHN0cmluZ2xlbiArIDEpOwogCQl9CiAKIAkJZGV2LT5mbGFncyA9IG50b2hsKGZpbmRhbGxkZXZzX2lmLmZsYWdzKTsKQEAgLTI1NzQsNyArMjYzOCw3IEBACiAJCQlzdHJ1Y3QgcnBjYXBfZmluZGFsbGRldnNfaWZhZGRyIGlmYWRkcjsKIAogCQkJLyogUmV0cmlldmUgdGhlIGludGVyZmFjZSBhZGRyZXNzZXMgKi8KLQkJCWlmIChycGNhcF9yZWN2KHNvY2tjdHJsLCAoY2hhciAqKSZpZmFkZHIsCisJCQlpZiAocnBjYXBfcmVjdihzb2NrY3RybCwgc3NsLCAoY2hhciAqKSZpZmFkZHIsCiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBycGNhcF9maW5kYWxsZGV2c19pZmFkZHIpLAogCQkJICAgICZwbGVuLCBlcnJidWYpID09IC0xKQogCQkJCWdvdG8gZXJyb3I7CkBAIC0yNjQ4LDEzICsyNzEyLDIxIEBACiAJfQogCiAJLyogRGlzY2FyZCB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZS4gKi8KLQlpZiAocnBjYXBfZGlzY2FyZChzb2NrY3RybCwgcGxlbiwgZXJyYnVmKSA9PSAxKQorCWlmIChycGNhcF9kaXNjYXJkKHNvY2tjdHJsLCBzc2wsIHBsZW4sIGVycmJ1ZikgPT0gMSkKIAkJZ290byBlcnJvcl9ub2Rpc2NhcmQ7CiAKIAkvKiBDb250cm9sIGNvbm5lY3Rpb24gaGFzIHRvIGJlIGNsb3NlZCBvbmx5IGluIGNhc2UgdGhlIHJlbW90ZSBtYWNoaW5lIGlzIGluIHBhc3NpdmUgbW9kZSAqLwogCWlmICghYWN0aXZlKQogCXsKIAkJLyogRE8gbm90IHNlbmQgUlBDQVBfQ0xPU0UsIHNpbmNlIHdlIGRpZCBub3Qgb3BlbiBhIHBjYXBfdDsgbm8gbmVlZCB0byBmcmVlIHJlc291cmNlcyAqLworI2lmZGVmIEhBVkVfT1BFTlNTTAorCQlpZiAoc3NsKQorCQl7CisJCQkvLyBGaW5pc2ggdXNpbmcgdGhlIFNTTCBoYW5kbGUgZm9yIHRoZSBzb2NrZXQuCisJCQkvLyBUaGlzIG11c3QgYmUgZG9uZSAqYmVmb3JlKiB0aGUgc29ja2V0IGlzIGNsb3NlZC4KKwkJCXNzbF9maW5pc2goc3NsKTsKKwkJfQorI2VuZGlmCiAJCWlmIChzb2NrX2Nsb3NlKHNvY2tjdHJsLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpKQogCQkJcmV0dXJuIC0xOwogCX0KQEAgLTI2NzgsMTIgKzI3NTAsMjIgQEAKIAkgKgogCSAqIENoZWNrcyBpZiBhbGwgdGhlIGRhdGEgaGFzIGJlZW4gcmVhZDsgaWYgbm90LCBkaXNjYXJkIHRoZSBkYXRhIGluIGV4Y2VzcwogCSAqLwotCSh2b2lkKSBycGNhcF9kaXNjYXJkKHNvY2tjdHJsLCBwbGVuLCBOVUxMKTsKKwkodm9pZCkgcnBjYXBfZGlzY2FyZChzb2NrY3RybCwgc3NsLCBwbGVuLCBOVUxMKTsKIAogZXJyb3Jfbm9kaXNjYXJkOgogCS8qIENvbnRyb2wgY29ubmVjdGlvbiBoYXMgdG8gYmUgY2xvc2VkIG9ubHkgaW4gY2FzZSB0aGUgcmVtb3RlIG1hY2hpbmUgaXMgaW4gcGFzc2l2ZSBtb2RlICovCiAJaWYgKCFhY3RpdmUpCisJeworI2lmZGVmIEhBVkVfT1BFTlNTTAorCQlpZiAoc3NsKQorCQl7CisJCQkvLyBGaW5pc2ggdXNpbmcgdGhlIFNTTCBoYW5kbGUgZm9yIHRoZSBzb2NrZXQuCisJCQkvLyBUaGlzIG11c3QgYmUgZG9uZSAqYmVmb3JlKiB0aGUgc29ja2V0IGlzIGNsb3NlZC4KKwkJCXNzbF9maW5pc2goc3NsKTsKKwkJfQorI2VuZGlmCiAJCXNvY2tfY2xvc2Uoc29ja2N0cmwsIE5VTEwsIDApOworCX0KIAogCS8qIFRvIGF2b2lkIGluY29uc2lzdGVuY2llcyBpbiB0aGUgbnVtYmVyIG9mIHNvY2tfaW5pdCgpICovCiAJc29ja19jbGVhbnVwKCk7CkBAIC0yNzAxLDcgKzI3ODMsNyBAQAogICogdG8gaW1wbGVtZW50OyB3ZSBwcm92aWRlIHNvbWUgQVBJcyBmb3IgaXQgdGhhdCB3b3JrIG9ubHkgd2l0aCBycGNhcC4KICAqLwogCi1TT0NLRVQgcGNhcF9yZW1vdGVhY3RfYWNjZXB0KGNvbnN0IGNoYXIgKmFkZHJlc3MsIGNvbnN0IGNoYXIgKnBvcnQsIGNvbnN0IGNoYXIgKmhvc3RsaXN0LCBjaGFyICpjb25uZWN0aW5naG9zdCwgc3RydWN0IHBjYXBfcm10YXV0aCAqYXV0aCwgY2hhciAqZXJyYnVmKQorU09DS0VUIHBjYXBfcmVtb3RlYWN0X2FjY2VwdF9leChjb25zdCBjaGFyICphZGRyZXNzLCBjb25zdCBjaGFyICpwb3J0LCBjb25zdCBjaGFyICpob3N0bGlzdCwgY2hhciAqY29ubmVjdGluZ2hvc3QsIHN0cnVjdCBwY2FwX3JtdGF1dGggKmF1dGgsIGludCB1c2VzX3NzbCwgY2hhciAqZXJyYnVmKQogewogCS8qIHNvY2tldC1yZWxhdGVkIHZhcmlhYmxlcyAqLwogCXN0cnVjdCBhZGRyaW5mbyBoaW50czsJCQkvKiB0ZW1wb3Jhcnkgc3RydWN0IHRvIGtlZXAgc2V0dGluZ3MgbmVlZGVkIHRvIG9wZW4gdGhlIG5ldyBzb2NrZXQgKi8KQEAgLTI3MDksNiArMjc5MSw3IEBACiAJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgZnJvbTsJLyogZ2VuZXJpYyBzb2NrYWRkcl9zdG9yYWdlIHZhcmlhYmxlICovCiAJc29ja2xlbl90IGZyb21sZW47CQkJCS8qIGtlZXBzIHRoZSBsZW5ndGggb2YgdGhlIHNvY2thZGRyX3N0b3JhZ2UgdmFyaWFibGUgKi8KIAlTT0NLRVQgc29ja2N0cmw7CQkJCS8qIGtlZXBzIHRoZSBtYWluIHNvY2tldCBpZGVudGlmaWVyICovCisJU1NMICpzc2wgPSBOVUxMOwkJCQkvKiBPcHRpb25hbCBTU0wgaGFuZGxlciBmb3Igc29ja2N0cmwgKi8KIAl1aW50OCBwcm90b2NvbF92ZXJzaW9uOwkJCS8qIG5lZ290aWF0ZWQgcHJvdG9jb2wgdmVyc2lvbiAqLwogCXN0cnVjdCBhY3RpdmVob3N0cyAqdGVtcCwgKnByZXY7CS8qIHRlbXAgdmFyIG5lZWRlZCB0byBzY2FuIGhlIGhvc3QgbGlzdCBjaGFpbiAqLwogCkBAIC0yNzIyLDcgKzI4MDUsNyBAQAogCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CiAKIAkvKiBXYXJuaW5nOiB0aGlzIGNhbGwgY2FuIGJlIHRoZSBmaXJzdCBvbmUgY2FsbGVkIGJ5IHRoZSB1c2VyLiAqLwotCS8qIEZvciB0aGlzIHJlYXNvbiwgd2UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBXaW5Tb2NrIHN1cHBvcnQuICovCisJLyogRm9yIHRoaXMgcmVhc29uLCB3ZSBoYXZlIHRvIGluaXRpYWxpemUgdGhlIFdpbnNvY2sgc3VwcG9ydC4gKi8KIAlpZiAoc29ja19pbml0KGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSkgPT0gLTEpCiAJCXJldHVybiAoU09DS0VUKS0xOwogCkBAIC0yNzMxLDcgKzI4MTQsNiBAQAogCXsKIAkJaWYgKHNvY2tfaW5pdGFkZHJlc3MoYWRkcmVzcywgUlBDQVBfREVGQVVMVF9ORVRQT1JUX0FDVElWRSwgJmhpbnRzLCAmYWRkcmluZm8sIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSkgPT0gLTEpCiAJCXsKLQkJCVNPQ0tfREVCVUdfTUVTU0FHRShlcnJidWYpOwogCQkJcmV0dXJuIChTT0NLRVQpLTI7CiAJCX0KIAl9CkBAIC0yNzM5LDcgKzI4MjEsNiBAQAogCXsKIAkJaWYgKHNvY2tfaW5pdGFkZHJlc3MoYWRkcmVzcywgcG9ydCwgJmhpbnRzLCAmYWRkcmluZm8sIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSkgPT0gLTEpCiAJCXsKLQkJCVNPQ0tfREVCVUdfTUVTU0FHRShlcnJidWYpOwogCQkJcmV0dXJuIChTT0NLRVQpLTI7CiAJCX0KIAl9CkBAIC0yNzQ3LDcgKzI4MjgsNiBAQAogCiAJaWYgKChzb2NrbWFpbiA9IHNvY2tfb3BlbihhZGRyaW5mbywgU09DS09QRU5fU0VSVkVSLCAxLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpKSA9PSBJTlZBTElEX1NPQ0tFVCkKIAl7Ci0JCVNPQ0tfREVCVUdfTUVTU0FHRShlcnJidWYpOwogCQlmcmVlYWRkcmluZm8oYWRkcmluZm8pOwogCQlyZXR1cm4gKFNPQ0tFVCktMjsKIAl9CkBAIC0yNzY1LDE1ICsyODQ1LDQwIEBACiAKIAlpZiAoc29ja2N0cmwgPT0gSU5WQUxJRF9TT0NLRVQpCiAJewotCQlzb2NrX2dldGVycm9yKCJhY2NlcHQoKTogIiwgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKKwkJc29ja19nZXRlcnJvcigiYWNjZXB0KCkiLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOwogCQlyZXR1cm4gKFNPQ0tFVCktMjsKIAl9CiAKKwkvKiBQcm9tb3RlIHRvIFNTTCBlYXJseSBiZWZvcmUgYW55IGVycm9yIG1lc3NhZ2UgbWF5IGJlIHNlbnQgKi8KKwlpZiAodXNlc19zc2wpCisJeworI2lmZGVmIEhBVkVfT1BFTlNTTAorCQlzc2wgPSBzc2xfcHJvbW90aW9uKDAsIHNvY2tjdHJsLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOworCQlpZiAoISBzc2wpCisJCXsKKwkJCXNvY2tfY2xvc2Uoc29ja2N0cmwsIE5VTEwsIDApOworCQkJcmV0dXJuIChTT0NLRVQpLTE7CisJCX0KKyNlbHNlCisJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIk5vIFRMUyBzdXBwb3J0Iik7CisJCXNvY2tfY2xvc2Uoc29ja2N0cmwsIE5VTEwsIDApOworCQlyZXR1cm4gKFNPQ0tFVCktMTsKKyNlbmRpZgorCX0KKwogCS8qIEdldCB0aGUgbnVtZXJpYyBmb3Igb2YgdGhlIG5hbWUgb2YgdGhlIGNvbm5lY3RpbmcgaG9zdCAqLwogCWlmIChnZXRuYW1laW5mbygoc3RydWN0IHNvY2thZGRyICopICZmcm9tLCBmcm9tbGVuLCBjb25uZWN0aW5naG9zdCwgUlBDQVBfSE9TVExJU1RfU0laRSwgTlVMTCwgMCwgTklfTlVNRVJJQ0hPU1QpKQogCXsKLQkJc29ja19nZXRlcnJvcigiZ2V0bmFtZWluZm8oKTogIiwgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKLQkJcnBjYXBfc2VuZGVycm9yKHNvY2tjdHJsLCAwLCBQQ0FQX0VSUl9SRU1PVEVBQ0NFUFQsIGVycmJ1ZiwgTlVMTCk7CisJCXNvY2tfZ2V0ZXJyb3IoImdldG5hbWVpbmZvKCkiLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOworCQlycGNhcF9zZW5kZXJyb3Ioc29ja2N0cmwsIHNzbCwgMCwgUENBUF9FUlJfUkVNT1RFQUNDRVBULCBlcnJidWYsIE5VTEwpOworI2lmZGVmIEhBVkVfT1BFTlNTTAorCQlpZiAoc3NsKQorCQl7CisJCQkvLyBGaW5pc2ggdXNpbmcgdGhlIFNTTCBoYW5kbGUgZm9yIHRoZSBzb2NrZXQuCisJCQkvLyBUaGlzIG11c3QgYmUgZG9uZSAqYmVmb3JlKiB0aGUgc29ja2V0IGlzIGNsb3NlZC4KKwkJCXNzbF9maW5pc2goc3NsKTsKKwkJfQorI2VuZGlmCiAJCXNvY2tfY2xvc2Uoc29ja2N0cmwsIE5VTEwsIDApOwogCQlyZXR1cm4gKFNPQ0tFVCktMTsKIAl9CkBAIC0yNzgxLDcgKzI4ODYsMTUgQEAKIAkvKiBjaGVja3MgaWYgdGhlIGNvbm5lY3RpbmcgaG9zdCBpcyBhbW9uZyB0aGUgb25lcyBhbGxvd2VkICovCiAJaWYgKHNvY2tfY2hlY2tfaG9zdGxpc3QoKGNoYXIgKilob3N0bGlzdCwgUlBDQVBfSE9TVExJU1RfU0VQLCAmZnJvbSwgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSA8IDApCiAJewotCQlycGNhcF9zZW5kZXJyb3Ioc29ja2N0cmwsIDAsIFBDQVBfRVJSX1JFTU9URUFDQ0VQVCwgZXJyYnVmLCBOVUxMKTsKKwkJcnBjYXBfc2VuZGVycm9yKHNvY2tjdHJsLCBzc2wsIDAsIFBDQVBfRVJSX1JFTU9URUFDQ0VQVCwgZXJyYnVmLCBOVUxMKTsKKyNpZmRlZiBIQVZFX09QRU5TU0wKKwkJaWYgKHNzbCkKKwkJeworCQkJLy8gRmluaXNoIHVzaW5nIHRoZSBTU0wgaGFuZGxlIGZvciB0aGUgc29ja2V0LgorCQkJLy8gVGhpcyBtdXN0IGJlIGRvbmUgKmJlZm9yZSogdGhlIHNvY2tldCBpcyBjbG9zZWQuCisJCQlzc2xfZmluaXNoKHNzbCk7CisJCX0KKyNlbmRpZgogCQlzb2NrX2Nsb3NlKHNvY2tjdHJsLCBOVUxMLCAwKTsKIAkJcmV0dXJuIChTT0NLRVQpLTE7CiAJfQpAQCAtMjc4OSwxMCArMjkwMiwxOCBAQAogCS8qCiAJICogU2VuZCBhdXRoZW50aWNhdGlvbiB0byB0aGUgcmVtb3RlIG1hY2hpbmUuCiAJICovCi0JaWYgKHJwY2FwX2RvYXV0aChzb2NrY3RybCwgJnByb3RvY29sX3ZlcnNpb24sIGF1dGgsIGVycmJ1ZikgPT0gLTEpCisJaWYgKHJwY2FwX2RvYXV0aChzb2NrY3RybCwgc3NsLCAmcHJvdG9jb2xfdmVyc2lvbiwgYXV0aCwgZXJyYnVmKSA9PSAtMSkKIAl7CiAJCS8qIFVucmVjb3ZlcmFibGUgZXJyb3IuICovCi0JCXJwY2FwX3NlbmRlcnJvcihzb2NrY3RybCwgMCwgUENBUF9FUlJfUkVNT1RFQUNDRVBULCBlcnJidWYsIE5VTEwpOworCQlycGNhcF9zZW5kZXJyb3Ioc29ja2N0cmwsIHNzbCwgMCwgUENBUF9FUlJfUkVNT1RFQUNDRVBULCBlcnJidWYsIE5VTEwpOworI2lmZGVmIEhBVkVfT1BFTlNTTAorCQlpZiAoc3NsKQorCQl7CisJCQkvLyBGaW5pc2ggdXNpbmcgdGhlIFNTTCBoYW5kbGUgZm9yIHRoZSBzb2NrZXQuCisJCQkvLyBUaGlzIG11c3QgYmUgZG9uZSAqYmVmb3JlKiB0aGUgc29ja2V0IGlzIGNsb3NlZC4KKwkJCXNzbF9maW5pc2goc3NsKTsKKwkJfQorI2VuZGlmCiAJCXNvY2tfY2xvc2Uoc29ja2N0cmwsIE5VTEwsIDApOwogCQlyZXR1cm4gKFNPQ0tFVCktMzsKIAl9CkBAIC0yODI5LDE5ICsyOTUwLDMzIEBACiAJewogCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgIGVycm5vLCAibWFsbG9jKCkgZmFpbGVkIik7Ci0JCXJwY2FwX3NlbmRlcnJvcihzb2NrY3RybCwgcHJvdG9jb2xfdmVyc2lvbiwgUENBUF9FUlJfUkVNT1RFQUNDRVBULCBlcnJidWYsIE5VTEwpOworCQlycGNhcF9zZW5kZXJyb3Ioc29ja2N0cmwsIHNzbCwgcHJvdG9jb2xfdmVyc2lvbiwgUENBUF9FUlJfUkVNT1RFQUNDRVBULCBlcnJidWYsIE5VTEwpOworI2lmZGVmIEhBVkVfT1BFTlNTTAorCQlpZiAoc3NsKQorCQl7CisJCQkvLyBGaW5pc2ggdXNpbmcgdGhlIFNTTCBoYW5kbGUgZm9yIHRoZSBzb2NrZXQuCisJCQkvLyBUaGlzIG11c3QgYmUgZG9uZSAqYmVmb3JlKiB0aGUgc29ja2V0IGlzIGNsb3NlZC4KKwkJCXNzbF9maW5pc2goc3NsKTsKKwkJfQorI2VuZGlmCiAJCXNvY2tfY2xvc2Uoc29ja2N0cmwsIE5VTEwsIDApOwogCQlyZXR1cm4gKFNPQ0tFVCktMTsKIAl9CiAKIAltZW1jcHkoJnRlbXAtPmhvc3QsICZmcm9tLCBmcm9tbGVuKTsKIAl0ZW1wLT5zb2NrY3RybCA9IHNvY2tjdHJsOworCXRlbXAtPnNzbCA9IHNzbDsKIAl0ZW1wLT5wcm90b2NvbF92ZXJzaW9uID0gcHJvdG9jb2xfdmVyc2lvbjsKIAl0ZW1wLT5uZXh0ID0gTlVMTDsKIAogCXJldHVybiBzb2NrY3RybDsKIH0KIAorU09DS0VUIHBjYXBfcmVtb3RlYWN0X2FjY2VwdChjb25zdCBjaGFyICphZGRyZXNzLCBjb25zdCBjaGFyICpwb3J0LCBjb25zdCBjaGFyICpob3N0bGlzdCwgY2hhciAqY29ubmVjdGluZ2hvc3QsIHN0cnVjdCBwY2FwX3JtdGF1dGggKmF1dGgsIGNoYXIgKmVycmJ1ZikKK3sKKwlyZXR1cm4gcGNhcF9yZW1vdGVhY3RfYWNjZXB0X2V4KGFkZHJlc3MsIHBvcnQsIGhvc3RsaXN0LCBjb25uZWN0aW5naG9zdCwgYXV0aCwgMCwgZXJyYnVmKTsKK30KKwogaW50IHBjYXBfcmVtb3RlYWN0X2Nsb3NlKGNvbnN0IGNoYXIgKmhvc3QsIGNoYXIgKmVycmJ1ZikKIHsKIAlzdHJ1Y3QgYWN0aXZlaG9zdHMgKnRlbXAsICpwcmV2OwkvKiB0ZW1wIHZhciBuZWVkZWQgdG8gc2NhbiB0aGUgaG9zdCBsaXN0IGNoYWluICovCkBAIC0yODYwLDcgKzI5OTUsNyBAQAogCXJldHZhbCA9IGdldGFkZHJpbmZvKGhvc3QsICIwIiwgJmhpbnRzLCAmYWRkcmluZm8pOwogCWlmIChyZXR2YWwgIT0gMCkKIAl7Ci0JCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiZ2V0YWRkcmluZm8oKSAlcyIsIGdhaV9zdHJlcnJvcihyZXR2YWwpKTsKKwkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiZ2V0YWRkcmluZm8oKSAlcyIsIGdhaV9zdHJlcnJvcihyZXR2YWwpKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMjg4Miw3ICszMDE3LDcgQEAKIAkJCQkgKiBEb24ndCBjaGVjayBmb3IgZXJyb3JzLCBzaW5jZSB3ZSdyZQogCQkJCSAqIGp1c3QgY2xlYW5pbmcgdXAuCiAJCQkJICovCi0JCQkJaWYgKHNvY2tfc2VuZCh0ZW1wLT5zb2NrY3RybCwKKwkJCQlpZiAoc29ja19zZW5kKHRlbXAtPnNvY2tjdHJsLCB0ZW1wLT5zc2wsCiAJCQkJICAgIChjaGFyICopJmhlYWRlciwKIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCBycGNhcF9oZWFkZXIpLCBlcnJidWYsCiAJCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUpIDwgMCkKQEAgLTI4OTEsMTIgKzMwMjYsMzIgQEAKIAkJCQkJICogTGV0IHRoYXQgZXJyb3IgYmUgdGhlIG9uZSB3ZQogCQkJCQkgKiByZXBvcnQuCiAJCQkJCSAqLworI2lmZGVmIEhBVkVfT1BFTlNTTAorCQkJCQlpZiAodGVtcC0+c3NsKQorCQkJCQl7CisJCQkJCQkvLyBGaW5pc2ggdXNpbmcgdGhlIFNTTCBoYW5kbGUKKwkJCQkJCS8vIGZvciB0aGUgc29ja2V0LgorCQkJCQkJLy8gVGhpcyBtdXN0IGJlIGRvbmUgKmJlZm9yZSoKKwkJCQkJCS8vIHRoZSBzb2NrZXQgaXMgY2xvc2VkLgorCQkJCQkJc3NsX2ZpbmlzaCh0ZW1wLT5zc2wpOworCQkJCQl9CisjZW5kaWYKIAkJCQkJKHZvaWQpc29ja19jbG9zZSh0ZW1wLT5zb2NrY3RybCwgTlVMTCwKIAkJCQkJICAgMCk7CiAJCQkJCXN0YXR1cyA9IC0xOwogCQkJCX0KIAkJCQllbHNlCiAJCQkJeworI2lmZGVmIEhBVkVfT1BFTlNTTAorCQkJCQlpZiAodGVtcC0+c3NsKQorCQkJCQl7CisJCQkJCQkvLyBGaW5pc2ggdXNpbmcgdGhlIFNTTCBoYW5kbGUKKwkJCQkJCS8vIGZvciB0aGUgc29ja2V0LgorCQkJCQkJLy8gVGhpcyBtdXN0IGJlIGRvbmUgKmJlZm9yZSoKKwkJCQkJCS8vIHRoZSBzb2NrZXQgaXMgY2xvc2VkLgorCQkJCQkJc3NsX2ZpbmlzaCh0ZW1wLT5zc2wpOworCQkJCQl9CisjZW5kaWYKIAkJCQkJaWYgKHNvY2tfY2xvc2UodGVtcC0+c29ja2N0cmwsIGVycmJ1ZiwKIAkJCQkJICAgUENBUF9FUlJCVUZfU0laRSkgPT0gLTEpCiAJCQkJCQlzdGF0dXMgPSAtMTsKQEAgLTI5MzMsMTIgKzMwODgsMjIgQEAKIAkvKiBUbyBhdm9pZCBpbmNvbnNpc3RlbmNpZXMgaW4gdGhlIG51bWJlciBvZiBzb2NrX2luaXQoKSAqLwogCXNvY2tfY2xlYW51cCgpOwogCi0JcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJUaGUgaG9zdCB5b3Ugd2FudCB0byBjbG9zZSB0aGUgYWN0aXZlIGNvbm5lY3Rpb24gaXMgbm90IGtub3duIik7CisJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiVGhlIGhvc3QgeW91IHdhbnQgdG8gY2xvc2UgdGhlIGFjdGl2ZSBjb25uZWN0aW9uIGlzIG5vdCBrbm93biIpOwogCXJldHVybiAtMTsKIH0KIAogdm9pZCBwY2FwX3JlbW90ZWFjdF9jbGVhbnVwKHZvaWQpCiB7CisjCWlmZGVmIEhBVkVfT1BFTlNTTAorCWlmIChzc2xfbWFpbikKKwl7CisJCS8vIEZpbmlzaCB1c2luZyB0aGUgU1NMIGhhbmRsZSBmb3IgdGhlIG1haW4gYWN0aXZlIHNvY2tldC4KKwkJLy8gVGhpcyBtdXN0IGJlIGRvbmUgKmJlZm9yZSogdGhlIHNvY2tldCBpcyBjbG9zZWQuCisJCXNzbF9maW5pc2goc3NsX21haW4pOworCQlzc2xfbWFpbiA9IE5VTEw7CisJfQorIwllbmRpZgorCiAJLyogVmVyeSBkaXJ0eSwgYnV0IGl0IHdvcmtzICovCiAJaWYgKHNvY2ttYWluKQogCXsKQEAgLTI5NDcsNyArMzExMiw2IEBACiAJCS8qIFRvIGF2b2lkIGluY29uc2lzdGVuY2llcyBpbiB0aGUgbnVtYmVyIG9mIHNvY2tfaW5pdCgpICovCiAJCXNvY2tfY2xlYW51cCgpOwogCX0KLQogfQogCiBpbnQgcGNhcF9yZW1vdGVhY3RfbGlzdChjaGFyICpob3N0bGlzdCwgY2hhciBzZXAsIGludCBzaXplLCBjaGFyICplcnJidWYpCkBAIC0yOTcxLDcgKzMxMzUsNyBAQAogCQkJLyoJaWYgKGdldG5hbWVpbmZvKCAoc3RydWN0IHNvY2thZGRyICopICZ0ZW1wLT5ob3N0LCBzaXplb2YgKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKSwgaG9zdHN0ciwgKi8KIAkJCS8qCQlSUENBUF9IT1NUTElTVF9TSVpFLCBOVUxMLCAwLCBOSV9OVU1FUklDSE9TVCkgKSAqLwogCQl7Ci0JCQkvKglzb2NrX2dldGVycm9yKCJnZXRuYW1laW5mbygpOiAiLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOyAqLworCQkJLyoJc29ja19nZXRlcnJvcigiZ2V0bmFtZWluZm8oKSIsIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSk7ICovCiAJCQlyZXR1cm4gLTE7CiAJCX0KIApAQCAtMjk3OSwxMiArMzE0MywxMiBAQAogCiAJCWlmICgoc2l6ZSA8IDApIHx8IChsZW4gPj0gKHNpemVfdClzaXplKSkKIAkJewotCQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJUaGUgc3RyaW5nIHlvdSBwcm92aWRlZCBpcyBub3QgYWJsZSB0byBrZWVwICIKKwkJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlRoZSBzdHJpbmcgeW91IHByb3ZpZGVkIGlzIG5vdCBhYmxlIHRvIGtlZXAgIgogCQkJCSJ0aGUgaG9zdG5hbWVzIGZvciBhbGwgdGhlIGFjdGl2ZSBjb25uZWN0aW9ucyIpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAKLQkJc3RybGNhdChob3N0bGlzdCwgaG9zdHN0ciwgUENBUF9FUlJCVUZfU0laRSk7CisJCXBjYXBfc3RybGNhdChob3N0bGlzdCwgaG9zdHN0ciwgUENBUF9FUlJCVUZfU0laRSk7CiAJCWhvc3RsaXN0W2xlbiAtIDFdID0gc2VwOwogCQlob3N0bGlzdFtsZW5dID0gMDsKIApAQCAtMjk5NywxMSArMzE2MSwxMSBAQAogLyoKICAqIFJlY2VpdmUgdGhlIGhlYWRlciBvZiBhIG1lc3NhZ2UuCiAgKi8KLXN0YXRpYyBpbnQgcnBjYXBfcmVjdl9tc2dfaGVhZGVyKFNPQ0tFVCBzb2NrLCBzdHJ1Y3QgcnBjYXBfaGVhZGVyICpoZWFkZXIsIGNoYXIgKmVycmJ1ZikKK3N0YXRpYyBpbnQgcnBjYXBfcmVjdl9tc2dfaGVhZGVyKFNPQ0tFVCBzb2NrLCBTU0wgKnNzbCwgc3RydWN0IHJwY2FwX2hlYWRlciAqaGVhZGVyLCBjaGFyICplcnJidWYpCiB7CiAJaW50IG5yZWN2OwogCi0JbnJlY3YgPSBzb2NrX3JlY3Yoc29jaywgKGNoYXIgKikgaGVhZGVyLCBzaXplb2Yoc3RydWN0IHJwY2FwX2hlYWRlciksCisJbnJlY3YgPSBzb2NrX3JlY3Yoc29jaywgc3NsLCAoY2hhciAqKSBoZWFkZXIsIHNpemVvZihzdHJ1Y3QgcnBjYXBfaGVhZGVyKSwKIAkgICAgU09DS19SRUNFSVZFQUxMX1lFU3xTT0NLX0VPRl9JU19FUlJPUiwgZXJyYnVmLAogCSAgICBQQ0FQX0VSUkJVRl9TSVpFKTsKIAlpZiAobnJlY3YgPT0gLTEpCkBAIC0zMDE3LDcgKzMxODEsNyBAQAogICogTWFrZSBzdXJlIHRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIGEgcmVjZWl2ZWQgbWVzc2FnZSBpcyB3aGF0IHdlIHdlcmUKICAqIGV4cGVjdGluZy4KICAqLwotc3RhdGljIGludCBycGNhcF9jaGVja19tc2dfdmVyKFNPQ0tFVCBzb2NrLCB1aW50OCBleHBlY3RlZF92ZXIsIHN0cnVjdCBycGNhcF9oZWFkZXIgKmhlYWRlciwgY2hhciAqZXJyYnVmKQorc3RhdGljIGludCBycGNhcF9jaGVja19tc2dfdmVyKFNPQ0tFVCBzb2NrLCBTU0wgKnNzbCwgdWludDggZXhwZWN0ZWRfdmVyLCBzdHJ1Y3QgcnBjYXBfaGVhZGVyICpoZWFkZXIsIGNoYXIgKmVycmJ1ZikKIHsKIAkvKgogCSAqIERpZCB0aGUgc2VydmVyIHNwZWNpZnkgdGhlIHZlcnNpb24gd2UgbmVnb3RpYXRlZD8KQEAgLTMwMjcsNyArMzE5MSw3IEBACiAJCS8qCiAJCSAqIERpc2NhcmQgdGhlIHJlc3Qgb2YgdGhlIG1lc3NhZ2UuCiAJCSAqLwotCQlpZiAocnBjYXBfZGlzY2FyZChzb2NrLCBoZWFkZXItPnBsZW4sIGVycmJ1ZikgPT0gLTEpCisJCWlmIChycGNhcF9kaXNjYXJkKHNvY2ssIHNzbCwgaGVhZGVyLT5wbGVuLCBlcnJidWYpID09IC0xKQogCQkJcmV0dXJuIC0xOwogCiAJCS8qCkBAIC0zMDM1LDcgKzMxOTksNyBAQAogCQkgKi8KIAkJaWYgKGVycmJ1ZiAhPSBOVUxMKQogCQl7Ci0JCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAgICAiU2VydmVyIHNlbnQgdXMgYSBtZXNzYWdlIHdpdGggdmVyc2lvbiAldSB3aGVuIHdlIHdlcmUgZXhwZWN0aW5nICV1IiwKIAkJCSAgICBoZWFkZXItPnZlciwgZXhwZWN0ZWRfdmVyKTsKIAkJfQpAQCAtMzA0OCw3ICszMjEyLDcgQEAKICAqIENoZWNrIHRoZSBtZXNzYWdlIHR5cGUgb2YgYSByZWNlaXZlZCBtZXNzYWdlLCB3aGljaCBzaG91bGQgZWl0aGVyIGJlCiAgKiB0aGUgZXhwZWN0ZWQgbWVzc2FnZSB0eXBlIG9yIFJQQ0FQX01TR19FUlJPUi4KICAqLwotc3RhdGljIGludCBycGNhcF9jaGVja19tc2dfdHlwZShTT0NLRVQgc29jaywgdWludDggcmVxdWVzdF90eXBlLCBzdHJ1Y3QgcnBjYXBfaGVhZGVyICpoZWFkZXIsIHVpbnQxNiAqZXJyY29kZSwgY2hhciAqZXJyYnVmKQorc3RhdGljIGludCBycGNhcF9jaGVja19tc2dfdHlwZShTT0NLRVQgc29jaywgU1NMICpzc2wsIHVpbnQ4IHJlcXVlc3RfdHlwZSwgc3RydWN0IHJwY2FwX2hlYWRlciAqaGVhZGVyLCB1aW50MTYgKmVycmNvZGUsIGNoYXIgKmVycmJ1ZikKIHsKIAljb25zdCBjaGFyICpyZXF1ZXN0X3R5cGVfc3RyaW5nOwogCWNvbnN0IGNoYXIgKm1zZ190eXBlX3N0cmluZzsKQEAgLTMwNjMsNyArMzIyNyw3IEBACiAJCSAqIEhhbmQgdGhhdCBlcnJvciBiYWNrIHRvIG91ciBjYWxsZXIuCiAJCSAqLwogCQkqZXJyY29kZSA9IG50b2hzKGhlYWRlci0+dmFsdWUpOwotCQlycGNhcF9tc2dfZXJyKHNvY2ssIGhlYWRlci0+cGxlbiwgZXJyYnVmKTsKKwkJcnBjYXBfbXNnX2Vycihzb2NrLCBzc2wsIGhlYWRlci0+cGxlbiwgZXJyYnVmKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMzA4Miw3ICszMjQ2LDcgQEAKIAkJLyoKIAkJICogRGlzY2FyZCB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZS4KIAkJICovCi0JCWlmIChycGNhcF9kaXNjYXJkKHNvY2ssIGhlYWRlci0+cGxlbiwgZXJyYnVmKSA9PSAtMSkKKwkJaWYgKHJwY2FwX2Rpc2NhcmQoc29jaywgc3NsLCBoZWFkZXItPnBsZW4sIGVycmJ1ZikgPT0gLTEpCiAJCQlyZXR1cm4gLTE7CiAKIAkJLyoKQEAgLTMwOTUsMTcgKzMyNTksMTcgQEAKIAkJCWlmIChyZXF1ZXN0X3R5cGVfc3RyaW5nID09IE5VTEwpCiAJCQl7CiAJCQkJLyogVGhpcyBzaG91bGQgbm90IGhhcHBlbi4gKi8KLQkJCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkJICAgICJycGNhcF9jaGVja19tc2dfdHlwZSBjYWxsZWQgZm9yIHJlcXVlc3QgbWVzc2FnZSB3aXRoIHR5cGUgJXUiLAogCQkJCSAgICByZXF1ZXN0X3R5cGUpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJCWlmIChtc2dfdHlwZV9zdHJpbmcgIT0gTlVMTCkKLQkJCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkJICAgICIlcyBtZXNzYWdlIHJlY2VpdmVkIGluIHJlc3BvbnNlIHRvIGEgJXMgbWVzc2FnZSIsCiAJCQkJICAgIG1zZ190eXBlX3N0cmluZywgcmVxdWVzdF90eXBlX3N0cmluZyk7CiAJCQllbHNlCi0JCQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJCSAgICAiTWVzc2FnZSBvZiB1bmtub3duIHR5cGUgJXUgbWVzc2FnZSByZWNlaXZlZCBpbiByZXNwb25zZSB0byBhICVzIHJlcXVlc3QiLAogCQkJCSAgICBoZWFkZXItPnR5cGUsIHJlcXVlc3RfdHlwZV9zdHJpbmcpOwogCQl9CkBAIC0zMTE4LDExICszMjgyLDExIEBACiAvKgogICogUmVjZWl2ZSBhbmQgcHJvY2VzcyB0aGUgaGVhZGVyIG9mIGEgbWVzc2FnZS4KICAqLwotc3RhdGljIGludCBycGNhcF9wcm9jZXNzX21zZ19oZWFkZXIoU09DS0VUIHNvY2ssIHVpbnQ4IGV4cGVjdGVkX3ZlciwgdWludDggcmVxdWVzdF90eXBlLCBzdHJ1Y3QgcnBjYXBfaGVhZGVyICpoZWFkZXIsIGNoYXIgKmVycmJ1ZikKK3N0YXRpYyBpbnQgcnBjYXBfcHJvY2Vzc19tc2dfaGVhZGVyKFNPQ0tFVCBzb2NrLCBTU0wgKnNzbCwgdWludDggZXhwZWN0ZWRfdmVyLCB1aW50OCByZXF1ZXN0X3R5cGUsIHN0cnVjdCBycGNhcF9oZWFkZXIgKmhlYWRlciwgY2hhciAqZXJyYnVmKQogewogCXVpbnQxNiBlcnJjb2RlOwogCi0JaWYgKHJwY2FwX3JlY3ZfbXNnX2hlYWRlcihzb2NrLCBoZWFkZXIsIGVycmJ1ZikgPT0gLTEpCisJaWYgKHJwY2FwX3JlY3ZfbXNnX2hlYWRlcihzb2NrLCBzc2wsIGhlYWRlciwgZXJyYnVmKSA9PSAtMSkKIAl7CiAJCS8qIE5ldHdvcmsgZXJyb3IuICovCiAJCXJldHVybiAtMTsKQEAgLTMxMzEsMTMgKzMyOTUsMTMgQEAKIAkvKgogCSAqIERpZCB0aGUgc2VydmVyIHNwZWNpZnkgdGhlIHZlcnNpb24gd2UgbmVnb3RpYXRlZD8KIAkgKi8KLQlpZiAocnBjYXBfY2hlY2tfbXNnX3Zlcihzb2NrLCBleHBlY3RlZF92ZXIsIGhlYWRlciwgZXJyYnVmKSA9PSAtMSkKKwlpZiAocnBjYXBfY2hlY2tfbXNnX3Zlcihzb2NrLCBzc2wsIGV4cGVjdGVkX3ZlciwgaGVhZGVyLCBlcnJidWYpID09IC0xKQogCQlyZXR1cm4gLTE7CiAKIAkvKgogCSAqIENoZWNrIHRoZSBtZXNzYWdlIHR5cGUuCiAJICovCi0JcmV0dXJuIHJwY2FwX2NoZWNrX21zZ190eXBlKHNvY2ssIHJlcXVlc3RfdHlwZSwgaGVhZGVyLAorCXJldHVybiBycGNhcF9jaGVja19tc2dfdHlwZShzb2NrLCBzc2wsIHJlcXVlc3RfdHlwZSwgaGVhZGVyLAogCSAgICAmZXJyY29kZSwgZXJyYnVmKTsKIH0KIApAQCAtMzE1MCwxNyArMzMxNCwxNyBAQAogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGxvZ3MgYSBtZXNzYWdlIGFuZCByZXR1cm5zIC0xIG9uIGEgbmV0d29yawogICogZXJyb3IuCiAgKi8KLXN0YXRpYyBpbnQgcnBjYXBfcmVjdihTT0NLRVQgc29jaywgdm9pZCAqYnVmZmVyLCBzaXplX3QgdG9yZWFkLCB1aW50MzIgKnBsZW4sIGNoYXIgKmVycmJ1ZikKK3N0YXRpYyBpbnQgcnBjYXBfcmVjdihTT0NLRVQgc29jaywgU1NMICpzc2wsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHRvcmVhZCwgdWludDMyICpwbGVuLCBjaGFyICplcnJidWYpCiB7CiAJaW50IG5yZWFkOwogCiAJaWYgKHRvcmVhZCA+ICpwbGVuKQogCXsKIAkJLyogVGhlIHNlcnZlciBzZW50IHVzIGEgYmFkIG1lc3NhZ2UgKi8KLQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJNZXNzYWdlIHBheWxvYWQgaXMgdG9vIHNob3J0Iik7CisJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIk1lc3NhZ2UgcGF5bG9hZCBpcyB0b28gc2hvcnQiKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlucmVhZCA9IHNvY2tfcmVjdihzb2NrLCBidWZmZXIsIHRvcmVhZCwKKwlucmVhZCA9IHNvY2tfcmVjdihzb2NrLCBzc2wsIGJ1ZmZlciwgdG9yZWFkLAogCSAgICBTT0NLX1JFQ0VJVkVBTExfWUVTfFNPQ0tfRU9GX0lTX0VSUk9SLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOwogCWlmIChucmVhZCA9PSAtMSkKIAl7CkBAIC0zMTczLDcgKzMzMzcsNyBAQAogLyoKICAqIFRoaXMgaGFuZGxlcyB0aGUgUlBDQVBfTVNHX0VSUk9SIG1lc3NhZ2UuCiAgKi8KLXN0YXRpYyB2b2lkIHJwY2FwX21zZ19lcnIoU09DS0VUIHNvY2tjdHJsLCB1aW50MzIgcGxlbiwgY2hhciAqcmVtb3RlX2VycmJ1ZikKK3N0YXRpYyB2b2lkIHJwY2FwX21zZ19lcnIoU09DS0VUIHNvY2tjdHJsLCBTU0wgKnNzbCwgdWludDMyIHBsZW4sIGNoYXIgKnJlbW90ZV9lcnJidWYpCiB7CiAJY2hhciBlcnJidWZbUENBUF9FUlJCVUZfU0laRV07CiAKQEAgLTMxODMsMTIgKzMzNDcsMTIgQEAKIAkJICogTWVzc2FnZSBpcyB0b28gbG9uZzsganVzdCByZWFkIGFzIG11Y2ggb2YgaXQgYXMgd2UKIAkJICogY2FuIGludG8gdGhlIGJ1ZmZlciBwcm92aWRlZCwgYW5kIGRpc2NhcmQgdGhlIHJlc3QuCiAJCSAqLwotCQlpZiAoc29ja19yZWN2KHNvY2tjdHJsLCByZW1vdGVfZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFIC0gMSwKKwkJaWYgKHNvY2tfcmVjdihzb2NrY3RybCwgc3NsLCByZW1vdGVfZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFIC0gMSwKIAkJICAgIFNPQ0tfUkVDRUlWRUFMTF9ZRVN8U09DS19FT0ZfSVNfRVJST1IsIGVycmJ1ZiwKIAkJICAgIFBDQVBfRVJSQlVGX1NJWkUpID09IC0xKQogCQl7CiAJCQkvLyBOZXR3b3JrIGVycm9yLgotCQkJcGNhcF9zbnByaW50ZihyZW1vdGVfZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiUmVhZCBvZiBlcnJvciBtZXNzYWdlIGZyb20gY2xpZW50IGZhaWxlZDogJXMiLCBlcnJidWYpOworCQkJc25wcmludGYocmVtb3RlX2VycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlJlYWQgb2YgZXJyb3IgbWVzc2FnZSBmcm9tIGNsaWVudCBmYWlsZWQ6ICVzIiwgZXJyYnVmKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC0zMTk3LDEwICszMzYxLDE5IEBACiAJCSAqLwogCQlyZW1vdGVfZXJyYnVmW1BDQVBfRVJSQlVGX1NJWkUgLSAxXSA9ICdcMCc7CiAKKyNpZmRlZiBfV0lOMzIKKwkJLyoKKwkJICogSWYgd2UncmUgbm90IGluIFVURi04IG1vZGUsIGNvbnZlcnQgaXQgdG8gdGhlIGxvY2FsCisJCSAqIGNvZGUgcGFnZS4KKwkJICovCisJCWlmICghcGNhcF91dGZfOF9tb2RlKQorCQkJdXRmXzhfdG9fYWNwX3RydW5jYXRlZChyZW1vdGVfZXJyYnVmKTsKKyNlbmRpZgorCiAJCS8qCiAJCSAqIFRocm93IGF3YXkgdGhlIHJlc3QuCiAJCSAqLwotCQkodm9pZClycGNhcF9kaXNjYXJkKHNvY2tjdHJsLCBwbGVuIC0gKFBDQVBfRVJSQlVGX1NJWkUgLSAxKSwgcmVtb3RlX2VycmJ1Zik7CisJCSh2b2lkKXJwY2FwX2Rpc2NhcmQoc29ja2N0cmwsIHNzbCwgcGxlbiAtIChQQ0FQX0VSUkJVRl9TSVpFIC0gMSksIHJlbW90ZV9lcnJidWYpOwogCX0KIAllbHNlIGlmIChwbGVuID09IDApCiAJewpAQCAtMzIwOSwxMiArMzM4MiwxMiBAQAogCX0KIAllbHNlCiAJewotCQlpZiAoc29ja19yZWN2KHNvY2tjdHJsLCByZW1vdGVfZXJyYnVmLCBwbGVuLAorCQlpZiAoc29ja19yZWN2KHNvY2tjdHJsLCBzc2wsIHJlbW90ZV9lcnJidWYsIHBsZW4sCiAJCSAgICBTT0NLX1JFQ0VJVkVBTExfWUVTfFNPQ0tfRU9GX0lTX0VSUk9SLCBlcnJidWYsCiAJCSAgICBQQ0FQX0VSUkJVRl9TSVpFKSA9PSAtMSkKIAkJewogCQkJLy8gTmV0d29yayBlcnJvci4KLQkJCXBjYXBfc25wcmludGYocmVtb3RlX2VycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlJlYWQgb2YgZXJyb3IgbWVzc2FnZSBmcm9tIGNsaWVudCBmYWlsZWQ6ICVzIiwgZXJyYnVmKTsKKwkJCXNucHJpbnRmKHJlbW90ZV9lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJSZWFkIG9mIGVycm9yIG1lc3NhZ2UgZnJvbSBjbGllbnQgZmFpbGVkOiAlcyIsIGVycmJ1Zik7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtMzIzMSwxMSArMzQwNCwxMSBAQAogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGxvZ3MgYSBtZXNzYWdlIGFuZCByZXR1cm5zIC0xIG9uIGEgbmV0d29yawogICogZXJyb3IuCiAgKi8KLXN0YXRpYyBpbnQgcnBjYXBfZGlzY2FyZChTT0NLRVQgc29jaywgdWludDMyIGxlbiwgY2hhciAqZXJyYnVmKQorc3RhdGljIGludCBycGNhcF9kaXNjYXJkKFNPQ0tFVCBzb2NrLCBTU0wgKnNzbCwgdWludDMyIGxlbiwgY2hhciAqZXJyYnVmKQogewogCWlmIChsZW4gIT0gMCkKIAl7Ci0JCWlmIChzb2NrX2Rpc2NhcmQoc29jaywgbGVuLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpID09IC0xKQorCQlpZiAoc29ja19kaXNjYXJkKHNvY2ssIHNzbCwgbGVuLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpID09IC0xKQogCQl7CiAJCQkvLyBOZXR3b3JrIGVycm9yLgogCQkJcmV0dXJuIC0xOwpAQCAtMzI0OCw3ICszNDIxLDcgQEAKICAqIFJlYWQgYnl0ZXMgaW50byB0aGUgcGNhcF90J3MgYnVmZmVyIHVudGlsIHdlIGhhdmUgdGhlIHNwZWNpZmllZAogICogbnVtYmVyIG9mIGJ5dGVzIHJlYWQgb3Igd2UgZ2V0IGFuIGVycm9yIG9yIGludGVycnVwdCBpbmRpY2F0aW9uLgogICovCi1zdGF0aWMgaW50IHJwY2FwX3JlYWRfcGFja2V0X21zZyhTT0NLRVQgc29jaywgcGNhcF90ICpwLCBzaXplX3Qgc2l6ZSkKK3N0YXRpYyBpbnQgcnBjYXBfcmVhZF9wYWNrZXRfbXNnKHN0cnVjdCBwY2FwX3JwY2FwIGNvbnN0ICpycCwgcGNhcF90ICpwLCBzaXplX3Qgc2l6ZSkKIHsKIAl1X2NoYXIgKmJwOwogCWludCBjYzsKQEAgLTMyNjcsOSArMzQ0MCwxMCBAQAogCQkgKiBXZSBoYXZlbid0IHJlYWQgYWxsIG9mIHRoZSBwYWNrZXQgaGVhZGVyIHlldC4KIAkJICogUmVhZCB3aGF0IHJlbWFpbnMsIHdoaWNoIGNvdWxkIGJlIGFsbCBvZiBpdC4KIAkJICovCi0JCWJ5dGVzX3JlYWQgPSBzb2NrX3JlY3Yoc29jaywgYnAsIHNpemUgLSBjYywKKwkJYnl0ZXNfcmVhZCA9IHNvY2tfcmVjdihycC0+cm10X3NvY2tkYXRhLCBycC0+ZGF0YV9zc2wsIGJwLCBzaXplIC0gY2MsCiAJCSAgICBTT0NLX1JFQ0VJVkVBTExfTk98U09DS19FT0ZfSVNfRVJST1IsIHAtPmVycmJ1ZiwKIAkJICAgIFBDQVBfRVJSQlVGX1NJWkUpOworCiAJCWlmIChieXRlc19yZWFkID09IC0xKQogCQl7CiAJCQkvKgpAQCAtMzI5OCw3ICszNDcyLDcgQEAKIAkJCSAqIFVwZGF0ZSB0aGUgcmVhZCBwb2ludGVyIGFuZCBieXRlIGNvdW50LCBhbmQKIAkJCSAqIHJldHVybiBhbiBlcnJvciBpbmRpY2F0aW9uLgogCQkJICovCi0JCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAgICAiVGhlIHNlcnZlciB0ZXJtaW5hdGVkIHRoZSBjb25uZWN0aW9uLiIpOwogCQkJcmV0dXJuIC0xOwogCQl9CmRpZmYgLS1naXQgYS9wY2FwLXJwY2FwLmggYi9wY2FwLXJwY2FwLmgKaW5kZXggYmUzMWM0MC4uNmFkNmQ5OCAxMDA2NDQKLS0tIGEvcGNhcC1ycGNhcC5oCisrKyBiL3BjYXAtcnBjYXAuaApAQCAtNDMsNyArNDMsNyBAQAogLyoKICAqIEludGVybmFsIGludGVyZmFjZXMgZm9yICJwY2FwX2ZpbmRhbGxkZXZzX2V4KCkiLgogICovCi1pbnQJcGNhcF9maW5kYWxsZGV2c19leF9yZW1vdGUoY2hhciAqc291cmNlLCBzdHJ1Y3QgcGNhcF9ybXRhdXRoICphdXRoLAotICAgcGNhcF9pZl90ICoqYWxsZGV2cywgY2hhciAqZXJyYnVmKTsKK2ludAlwY2FwX2ZpbmRhbGxkZXZzX2V4X3JlbW90ZShjb25zdCBjaGFyICpzb3VyY2UsCisgICAgc3RydWN0IHBjYXBfcm10YXV0aCAqYXV0aCwgcGNhcF9pZl90ICoqYWxsZGV2cywgY2hhciAqZXJyYnVmKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9wY2FwLXNhdmVmaWxlLm1hbmZpbGUgYi9wY2FwLXNhdmVmaWxlLm1hbmZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwN2Q4NDkuLjAwMDAwMDAKLS0tIGEvcGNhcC1zYXZlZmlsZS5tYW5maWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS5cIiBDb3B5cmlnaHQgKGMpIDE5OTQsIDE5OTYsIDE5OTcKLS5cIglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0OiAoMSkgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9ucwotLlwiIHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5LCAoMikKLS5cIiBkaXN0cmlidXRpb25zIGluY2x1ZGluZyBiaW5hcnkgY29kZSBpbmNsdWRlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAotLlwiIHRoaXMgcGFyYWdyYXBoIGluIGl0cyBlbnRpcmV0eSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvciBvdGhlciBtYXRlcmlhbHMKLS5cIiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24sIGFuZCAoMykgYWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nCi0uXCIgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLS5cIiBgYFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwKLS5cIiBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IGFuZCBpdHMgY29udHJpYnV0b3JzLicnIE5laXRoZXIgdGhlIG5hbWUgb2YKLS5cIiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZQotLlwiIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgotLlwiIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0uXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS5cIiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotLlwiCi0uVEggUENBUC1TQVZFRklMRSA1ICI4IE1hcmNoIDIwMTUiCi0uU0ggTkFNRQotcGNhcC1zYXZlZmlsZSBcLSBsaWJwY2FwIHNhdmVmaWxlIGZvcm1hdAotLlNIIERFU0NSSVBUSU9OCi1OT1RFOiBhcHBsaWNhdGlvbnMgYW5kIGxpYnJhcmllcyBzaG91bGQsIGlmIHBvc3NpYmxlLCB1c2UgbGlicGNhcCB0bwotcmVhZCBzYXZlZmlsZXMsIHJhdGhlciB0aGFuIGhhdmluZyB0aGVpciBvd24gY29kZSB0byByZWFkIHNhdmVmaWxlcy4KLUlmLCBpbiB0aGUgZnV0dXJlLCBhIG5ldyBmaWxlIGZvcm1hdCBpcyBzdXBwb3J0ZWQgYnkgbGlicGNhcCwKLWFwcGxpY2F0aW9ucyBhbmQgbGlicmFyaWVzIHVzaW5nIGxpYnBjYXAgdG8gcmVhZCBzYXZlZmlsZXMgd2lsbCBiZSBhYmxlCi10byByZWFkIHRoZSBuZXcgZm9ybWF0IG9mIHNhdmVmaWxlcywgYnV0IGFwcGxpY2F0aW9ucyBhbmQgbGlicmFyaWVzCi11c2luZyB0aGVpciBvd24gY29kZSB0byByZWFkIHNhdmVmaWxlcyB3aWxsIGhhdmUgdG8gYmUgY2hhbmdlZCB0bwotc3VwcG9ydCB0aGUgbmV3IGZpbGUgZm9ybWF0LgotLlBQCi1gYFNhdmVmaWxlcycnIHJlYWQgYW5kIHdyaXR0ZW4gYnkgbGlicGNhcCBhbmQgYXBwbGljYXRpb25zIHVzaW5nIGxpYnBjYXAKLXN0YXJ0IHdpdGggYSBwZXItZmlsZSBoZWFkZXIuICBUaGUgZm9ybWF0IG9mIHRoZSBwZXItZmlsZSBoZWFkZXIgaXM6Ci0uUlMKLS5UUwotYm94OwotYyBzCi1jIHwgYwotYyBzLgotTWFnaWMgbnVtYmVyCi1fCi1NYWpvciB2ZXJzaW9uCU1pbm9yIHZlcnNpb24KLV8KLVRpbWUgem9uZSBvZmZzZXQKLV8KLVRpbWUgc3RhbXAgYWNjdXJhY3kKLV8KLVNuYXBzaG90IGxlbmd0aAotXwotTGluay1sYXllciBoZWFkZXIgdHlwZQotLlRFCi0uUkUKLS5QUAotQWxsIGZpZWxkcyBpbiB0aGUgcGVyLWZpbGUgaGVhZGVyIGFyZSBpbiB0aGUgYnl0ZSBvcmRlciBvZiB0aGUgaG9zdAotd3JpdGluZyB0aGUgZmlsZS4gIE5vcm1hbGx5LCB0aGUgZmlyc3QgZmllbGQgaW4gdGhlIHBlci1maWxlIGhlYWRlciBpcyBhCi00LWJ5dGUgbWFnaWMgbnVtYmVyLCB3aXRoIHRoZSB2YWx1ZSAweGExYjJjM2Q0LiAgVGhlIG1hZ2ljIG51bWJlciwgd2hlbgotcmVhZCBieSBhIGhvc3Qgd2l0aCB0aGUgc2FtZSBieXRlIG9yZGVyIGFzIHRoZSBob3N0IHRoYXQgd3JvdGUgdGhlIGZpbGUsCi13aWxsIGhhdmUgdGhlIHZhbHVlIDB4YTFiMmMzZDQsIGFuZCwgd2hlbiByZWFkIGJ5IGEgaG9zdCB3aXRoIHRoZQotb3Bwb3NpdGUgYnl0ZSBvcmRlciBhcyB0aGUgaG9zdCB0aGF0IHdyb3RlIHRoZSBmaWxlLCB3aWxsIGhhdmUgdGhlIHZhbHVlCi0weGQ0YzNiMmExLiAgVGhhdCBhbGxvd3Mgc29mdHdhcmUgcmVhZGluZyB0aGUgZmlsZSB0byBkZXRlcm1pbmUgd2hldGhlcgotdGhlIGJ5dGUgb3JkZXIgb2YgdGhlIGhvc3QgdGhhdCB3cm90ZSB0aGUgZmlsZSBpcyB0aGUgc2FtZSBhcyB0aGUgYnl0ZQotb3JkZXIgb2YgdGhlIGhvc3Qgb24gd2hpY2ggdGhlIGZpbGUgaXMgYmVpbmcgcmVhZCwgYW5kIHRodXMgd2hldGhlciB0aGUKLXZhbHVlcyBpbiB0aGUgcGVyLWZpbGUgYW5kIHBlci1wYWNrZXQgaGVhZGVycyBuZWVkIHRvIGJlIGJ5dGUtc3dhcHBlZC4KLS5QUAotSWYgdGhlIG1hZ2ljIG51bWJlciBoYXMgdGhlIHZhbHVlIDB4YTFiMjNjNGQgKHdpdGggdGhlIHR3byBuaWJibGVzIG9mCi10aGUgdHdvIGxvd2VyLW9yZGVyIGJ5dGVzIG9mIHRoZSBtYWdpYyBudW1iZXIgc3dhcHBlZCksIHdoaWNoIHdvdWxkIGJlCi1yZWFkIGFzIDB4YTFiMjNjNGQgYnkgYSBob3N0IHdpdGggdGhlIHNhbWUgYnl0ZSBvcmRlciBhcyB0aGUgaG9zdCB0aGF0Ci13cm90ZSB0aGUgZmlsZSBhbmQgYXMgMHg0ZDNjYjJhMSBieSBhIGhvc3Qgd2l0aCB0aGUgb3Bwb3NpdGUgYnl0ZSBvcmRlcgotYXMgdGhlIGhvc3QgdGhhdCB3cm90ZSB0aGUgZmlsZSwgdGhlIGZpbGUgZm9ybWF0IGlzIHRoZSBzYW1lIGFzIGZvcgotcmVndWxhciBmaWxlcywgZXhjZXB0IHRoYXQgdGhlIHRpbWUgc3RhbXBzIGZvciBwYWNrZXRzIGFyZSBnaXZlbiBpbgotc2Vjb25kcyBhbmQgbmFub3NlY29uZHMgcmF0aGVyIHRoYW4gc2Vjb25kcyBhbmQgbWljcm9zZWNvbmRzLgotLlBQCi1Gb2xsb3dpbmcgdGhpcyBhcmU6Ci0uSVAKLUEgMi1ieXRlIGZpbGUgZm9ybWF0IG1ham9yIHZlcnNpb24gbnVtYmVyOyB0aGUgY3VycmVudCB2ZXJzaW9uIG51bWJlciBpcwotMi4KLS5JUAotQSAyLWJ5dGUgZmlsZSBmb3JtYXQgbWlub3IgdmVyc2lvbiBudW1iZXI7IHRoZSBjdXJyZW50IHZlcnNpb24gbnVtYmVyIGlzCi00LgotLklQCi1BIDQtYnl0ZSB0aW1lIHpvbmUgb2Zmc2V0OyB0aGlzIGlzIGFsd2F5cyAwLgotLklQCi1BIDQtYnl0ZSBudW1iZXIgZ2l2aW5nIHRoZSBhY2N1cmFjeSBvZiB0aW1lIHN0YW1wcyBpbiB0aGUgZmlsZTsgdGhpcyBpcwotYWx3YXlzIDAuCi0uSVAKLUEgNC1ieXRlIG51bWJlciBnaXZpbmcgdGhlICJzbmFwc2hvdCBsZW5ndGgiIG9mIHRoZSBjYXB0dXJlOyBwYWNrZXRzCi1sb25nZXIgdGhhbiB0aGUgc25hcHNob3QgbGVuZ3RoIGFyZSB0cnVuY2F0ZWQgdG8gdGhlIHNuYXBzaG90IGxlbmd0aCwgc28KLXRoYXQsIGlmIHRoZSBzbmFwc2hvdCBsZW5ndGggaXMKLS5JUiBOICwKLW9ubHkgdGhlIGZpcnN0Ci0uSSBOCi1ieXRlcyBvZiBhIHBhY2tldCBsb25nZXIgdGhhbgotLkkgTgotYnl0ZXMgd2lsbCBiZSBzYXZlZCBpbiB0aGUgY2FwdHVyZS4KLS5JUAotYSA0LWJ5dGUgbnVtYmVyIGdpdmluZyB0aGUgbGluay1sYXllciBoZWFkZXIgdHlwZSBmb3IgcGFja2V0cyBpbiB0aGUKLWNhcHR1cmU7IHNlZQotLkJSIHBjYXAtbGlua3R5cGUgKDcpCi1mb3IgdGhlCi0uQiBMSU5LVFlQRV8KLXZhbHVlcyB0aGF0IGNhbiBhcHBlYXIgaW4gdGhpcyBmaWVsZC4KLS5QUAotRm9sbG93aW5nIHRoZSBwZXItZmlsZSBoZWFkZXIgYXJlIHplcm8gb3IgbW9yZSBwYWNrZXRzOyBlYWNoIHBhY2tldAotYmVnaW5zIHdpdGggYSBwZXItcGFja2V0IGhlYWRlciwgd2hpY2ggaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgdGhlCi1yYXcgcGFja2V0IGRhdGEuICBUaGUgZm9ybWF0IG9mIHRoZSBwZXItcGFja2V0IGhlYWRlciBpczoKLS5SUwotLlRTCi1ib3g7Ci1jLgotVGltZSBzdGFtcCwgc2Vjb25kcyB2YWx1ZQotXwotVGltZSBzdGFtcCwgbWljcm9zZWNvbmRzIG9yIG5hbm9zZWNvbmRzIHZhbHVlCi1fCi1MZW5ndGggb2YgY2FwdHVyZWQgcGFja2V0IGRhdGEKLV8KLVVuLXRydW5jYXRlZCBsZW5ndGggb2YgdGhlIHBhY2tldCBkYXRhCi0uVEUKLS5SRQotLlBQCi1BbGwgZmllbGRzIGluIHRoZSBwZXItcGFja2V0IGhlYWRlciBhcmUgaW4gdGhlIGJ5dGUgb3JkZXIgb2YgdGhlIGhvc3QKLXdyaXRpbmcgdGhlIGZpbGUuICBUaGUgcGVyLXBhY2tldCBoZWFkZXIgYmVnaW5zIHdpdGggYSB0aW1lIHN0YW1wIGdpdmluZwotdGhlIGFwcHJveGltYXRlIHRpbWUgdGhlIHBhY2tldCB3YXMgY2FwdHVyZWQ7IHRoZSB0aW1lIHN0YW1wIGNvbnNpc3RzIG9mCi1hIDQtYnl0ZSB2YWx1ZSwgZ2l2aW5nIHRoZSB0aW1lIGluIHNlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxOTcwLAotMDA6MDA6MDAgVVRDLCBmb2xsb3dlZCBieSBhIDQtYnl0ZSB2YWx1ZSwgZ2l2aW5nIHRoZSB0aW1lIGluCi1taWNyb3NlY29uZHMgb3IgbmFub3NlY29uZHMgc2luY2UgdGhhdCBzZWNvbmQsIGRlcGVuZGluZyBvbiB0aGUgbWFnaWMKLW51bWJlciBpbiB0aGUgZmlsZSBoZWFkZXIuICBGb2xsb3dpbmcgdGhhdCBhcmUgYSA0LWJ5dGUgdmFsdWUgZ2l2aW5nIHRoZQotbnVtYmVyIG9mIGJ5dGVzIG9mIGNhcHR1cmVkIGRhdGEgdGhhdCBmb2xsb3cgdGhlIHBlci1wYWNrZXQgaGVhZGVyIGFuZCBhCi00LWJ5dGUgdmFsdWUgZ2l2aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gcHJlc2VudCBoYWQKLXRoZSBwYWNrZXQgbm90IGJlZW4gdHJ1bmNhdGVkIGJ5IHRoZSBzbmFwc2hvdCBsZW5ndGguICBUaGUgdHdvIGxlbmd0aHMKLXdpbGwgYmUgZXF1YWwgaWYgdGhlIG51bWJlciBvZiBieXRlcyBvZiBwYWNrZXQgZGF0YSBhcmUgbGVzcyB0aGFuIG9yCi1lcXVhbCB0byB0aGUgc25hcHNob3QgbGVuZ3RoLgotLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcC1saW5rdHlwZSg3KQpkaWZmIC0tZ2l0IGEvcGNhcC1zYXZlZmlsZS5tYW5maWxlLmluIGIvcGNhcC1zYXZlZmlsZS5tYW5maWxlLmluCmluZGV4IDQ1MWRkOTAuLmE3YWU5YWYgMTAwNjQ0Ci0tLSBhL3BjYXAtc2F2ZWZpbGUubWFuZmlsZS5pbgorKysgYi9wY2FwLXNhdmVmaWxlLm1hbmZpbGUuaW4KQEAgLTE3LDcgKzE3LDcgQEAKIC5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgogLlwiIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAuXCIKLS5USCBQQ0FQLVNBVkVGSUxFIEBNQU5fRklMRV9GT1JNQVRTQCAiOCBNYXJjaCAyMDE1IgorLlRIIFBDQVAtU0FWRUZJTEUgQE1BTl9GSUxFX0ZPUk1BVFNAICIyNCBBcHJpbCAyMDIwIgogLlNIIE5BTUUKIHBjYXAtc2F2ZWZpbGUgXC0gbGlicGNhcCBzYXZlZmlsZSBmb3JtYXQKIC5TSCBERVNDUklQVElPTgpAQCAtNTEsNiArNTEsOCBAQAogLlRFCiAuUkUKIC5QUAorVGhlIHBlci1maWxlIGhlYWRlciBsZW5ndGggaXMgMjQgb2N0ZXRzLgorLlBQCiBBbGwgZmllbGRzIGluIHRoZSBwZXItZmlsZSBoZWFkZXIgYXJlIGluIHRoZSBieXRlIG9yZGVyIG9mIHRoZSBob3N0CiB3cml0aW5nIHRoZSBmaWxlLiAgTm9ybWFsbHksIHRoZSBmaXJzdCBmaWVsZCBpbiB0aGUgcGVyLWZpbGUgaGVhZGVyIGlzIGEKIDQtYnl0ZSBtYWdpYyBudW1iZXIsIHdpdGggdGhlIHZhbHVlIDB4YTFiMmMzZDQuICBUaGUgbWFnaWMgbnVtYmVyLCB3aGVuCkBAIC0xMTcsNiArMTE5LDggQEAKIC5URQogLlJFCiAuUFAKK1RoZSBwZXItcGFja2V0IGhlYWRlciBsZW5ndGggaXMgMTYgb2N0ZXRzLgorLlBQCiBBbGwgZmllbGRzIGluIHRoZSBwZXItcGFja2V0IGhlYWRlciBhcmUgaW4gdGhlIGJ5dGUgb3JkZXIgb2YgdGhlIGhvc3QKIHdyaXRpbmcgdGhlIGZpbGUuICBUaGUgcGVyLXBhY2tldCBoZWFkZXIgYmVnaW5zIHdpdGggYSB0aW1lIHN0YW1wIGdpdmluZwogdGhlIGFwcHJveGltYXRlIHRpbWUgdGhlIHBhY2tldCB3YXMgY2FwdHVyZWQ7IHRoZSB0aW1lIHN0YW1wIGNvbnNpc3RzIG9mCkBAIC0xMzAsNCArMTM0LDQgQEAKIHdpbGwgYmUgZXF1YWwgaWYgdGhlIG51bWJlciBvZiBieXRlcyBvZiBwYWNrZXQgZGF0YSBhcmUgbGVzcyB0aGFuIG9yCiBlcXVhbCB0byB0aGUgc25hcHNob3QgbGVuZ3RoLgogLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcC1saW5rdHlwZShATUFOX01JU0NfSU5GT0ApCisuQlIgcGNhcCAoM1BDQVApCmRpZmYgLS1naXQgYS9wY2FwLXNlcHRlbC5jIGIvcGNhcC1zZXB0ZWwuYwppbmRleCAwNDcxMTUzLi5lOTE3ZWRkIDEwMDY0NAotLS0gYS9wY2FwLXNlcHRlbC5jCisrKyBiL3BjYXAtc2VwdGVsLmMKQEAgLTEsMTUgKzEsNiBAQAogLyoKICAqIHBjYXAtc2VwdGVsLmM6IFBhY2tldCBjYXB0dXJlIGludGVyZmFjZSBmb3IgSW50ZWwvU2VwdGVsIGNhcmQuCiAgKgotICogVGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBjb2RlIGF0dGVtcHRzIHRvIG1pbWljIHRoYXQgb2YgcGNhcC1saW51eCBhcyBtdWNoCi0gKiBhcyBwb3NzaWJsZS4gIFRoaXMgY29kZSBpcyBjb21waWxlZCBpbiBzZXZlcmFsIGRpZmZlcmVudCB3YXlzIGRlcGVuZGluZyBvbgotICogd2hldGhlciBTRVBURUxfT05MWSBhbmQgSEFWRV9TRVBURUxfQVBJIGFyZSBkZWZpbmVkLiAgSWYgSEFWRV9TRVBURUxfQVBJIGlzCi0gKiBub3QgZGVmaW5lZCBpdCBzaG91bGQgbm90IGdldCBjb21waWxlZCBpbiwgb3RoZXJ3aXNlIGlmIFNFUFRFTF9PTkxZIGlzCi0gKiBkZWZpbmVkIHRoZW4gdGhlICdzZXB0ZWxfJyBmdW5jdGlvbiBjYWxscyBhcmUgcmVuYW1lZCB0byAncGNhcF8nCi0gKiBlcXVpdmFsZW50cy4gIElmIFNFUFRFTF9PTkxZIGlzIG5vdCBkZWZpbmVkIHRoZW4gbm90aGluZyBpcyBhbHRlcmVkIC0gdGhlCi0gKiBzZXB0ZWxfIGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCBhcyByZXF1aXJlZCBmcm9tIHRoZWlyCi0gKiBwY2FwLWxpbnV4L2VxdWl2YWxlbnRzLgotICoKICAqIEF1dGhvcnM6IEdpbGJlcnQgSE9ZRUsgKGdpbF9ob3lla0Bob3RtYWlsLmNvbSksIEVsaWFzIE0uIEtIT1VSWQogICogKCs5NjEgMyA0ODUyNDMpCiAgKi8KQEAgLTI2LDcgKzE3LDYgQEAKIAogI2luY2x1ZGUgInBjYXAtaW50LmgiCiAKLSNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KQEAgLTQxLDcgKzMxLDYgQEAKIAogI2luY2x1ZGUgInBjYXAtc2VwdGVsLmgiCiAKLXN0YXRpYyBpbnQgc2VwdGVsX3NldGZpbHRlcihwY2FwX3QgKnAsIHN0cnVjdCBicGZfcHJvZ3JhbSAqZnApOwogc3RhdGljIGludCBzZXB0ZWxfc3RhdHMocGNhcF90ICpwLCBzdHJ1Y3QgcGNhcF9zdGF0ICpwcyk7CiBzdGF0aWMgaW50IHNlcHRlbF9nZXRub25ibG9jayhwY2FwX3QgKnApOwogc3RhdGljIGludCBzZXB0ZWxfc2V0bm9uYmxvY2socGNhcF90ICpwLCBpbnQgbm9uYmxvY2spOwpAQCAtNTYsNyArNDUsNyBAQAogLyoKICAqICBSZWFkIGF0IG1vc3QgbWF4X3BhY2tldHMgZnJvbSB0aGUgY2FwdHVyZSBxdWV1ZSBhbmQgY2FsbCB0aGUgY2FsbGJhY2sKICAqICBmb3IgZWFjaCBvZiB0aGVtLiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFja2V0cyBoYW5kbGVkLCAtMSBpZiBhbgotICogIGVycm9yIG9jY3VyZWQsIG9yIC0yIGlmIHdlIHdlcmUgdG9sZCB0byBicmVhayBvdXQgb2YgdGhlIGxvb3AuCisgKiAgZXJyb3Igb2NjdXJyZWQsIG9yIC0yIGlmIHdlIHdlcmUgdG9sZCB0byBicmVhayBvdXQgb2YgdGhlIGxvb3AuCiAgKi8KIHN0YXRpYyBpbnQgc2VwdGVsX3JlYWQocGNhcF90ICpwLCBpbnQgY250LCBwY2FwX2hhbmRsZXIgY2FsbGJhY2ssIHVfY2hhciAqdXNlcikgewogCkBAIC0xMzUsNyArMTI0LDcgQEAKICAgICAgICAgY2FwbGVuID0gcGFja2V0X2xlbjsKICAgICAgIH0KICAgICAgIC8qIFJ1biB0aGUgcGFja2V0IGZpbHRlciBpZiB0aGVyZSBpcyBvbmUuICovCi0gICAgICBpZiAoKHAtPmZjb2RlLmJmX2luc25zID09IE5VTEwpIHx8IGJwZl9maWx0ZXIocC0+ZmNvZGUuYmZfaW5zbnMsIGRwLCBwYWNrZXRfbGVuLCBjYXBsZW4pKSB7CisgICAgICBpZiAoKHAtPmZjb2RlLmJmX2luc25zID09IE5VTEwpIHx8IHBjYXBfZmlsdGVyKHAtPmZjb2RlLmJmX2luc25zLCBkcCwgcGFja2V0X2xlbiwgY2FwbGVuKSkgewogCiAKICAgICAgICAgLyogIGdldCBhIHRpbWUgc3RhbXAgLCBjb25zaXN0aW5nIG9mIDoKQEAgLTE4MCw5ICsxNjksOSBAQAogCiAKIHN0YXRpYyBpbnQKLXNlcHRlbF9pbmplY3QocGNhcF90ICpoYW5kbGUsIGNvbnN0IHZvaWQgKmJ1ZiBfVV8sIHNpemVfdCBzaXplIF9VXykKK3NlcHRlbF9pbmplY3QocGNhcF90ICpoYW5kbGUsIGNvbnN0IHZvaWQgKmJ1ZiBfVV8sIGludCBzaXplIF9VXykKIHsKLSAgc3RybGNweShoYW5kbGUtPmVycmJ1ZiwgIlNlbmRpbmcgcGFja2V0cyBpc24ndCBzdXBwb3J0ZWQgb24gU2VwdGVsIGNhcmRzIiwKKyAgcGNhcF9zdHJsY3B5KGhhbmRsZS0+ZXJyYnVmLCAiU2VuZGluZyBwYWNrZXRzIGlzbid0IHN1cHBvcnRlZCBvbiBTZXB0ZWwgY2FyZHMiLAogICAgICAgICAgIFBDQVBfRVJSQlVGX1NJWkUpOwogICByZXR1cm4gKC0xKTsKIH0KQEAgLTIxOCw3ICsyMDcsNyBAQAogCiAgIGhhbmRsZS0+cmVhZF9vcCA9IHNlcHRlbF9yZWFkOwogICBoYW5kbGUtPmluamVjdF9vcCA9IHNlcHRlbF9pbmplY3Q7Ci0gIGhhbmRsZS0+c2V0ZmlsdGVyX29wID0gc2VwdGVsX3NldGZpbHRlcjsKKyAgaGFuZGxlLT5zZXRmaWx0ZXJfb3AgPSBpbnN0YWxsX2JwZl9wcm9ncmFtOwogICBoYW5kbGUtPnNldF9kYXRhbGlua19vcCA9IE5VTEw7IC8qIGNhbid0IGNoYW5nZSBkYXRhIGxpbmsgdHlwZSAqLwogICBoYW5kbGUtPmdldG5vbmJsb2NrX29wID0gc2VwdGVsX2dldG5vbmJsb2NrOwogICBoYW5kbGUtPnNldG5vbmJsb2NrX29wID0gc2VwdGVsX3NldG5vbmJsb2NrOwpAQCAtMjQ0LDcgKzIzMyw3IEBACiAJLyogT0ssIGl0J3MgcHJvYmFibHkgb3Vycy4gKi8KIAkqaXNfb3VycyA9IDE7CiAKLQlwID0gcGNhcF9jcmVhdGVfY29tbW9uKGVidWYsIHNpemVvZiAoc3RydWN0IHBjYXBfc2VwdGVsKSk7CisJcCA9IFBDQVBfQ1JFQVRFX0NPTU1PTihlYnVmLCBzdHJ1Y3QgcGNhcF9zZXB0ZWwpOwogCWlmIChwID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCkBAIC0yODUsMjggKzI3NCw2IEBACiAKIAogLyoKLSAqIEluc3RhbGxzIHRoZSBnaXZlbiBicGYgZmlsdGVyIHByb2dyYW0gaW4gdGhlIGdpdmVuIHBjYXAgc3RydWN0dXJlLiAgVGhlcmUgaXMKLSAqIG5vIGF0dGVtcHQgdG8gc3RvcmUgdGhlIGZpbHRlciBpbiBrZXJuZWwgbWVtb3J5IGFzIHRoYXQgaXMgbm90IHN1cHBvcnRlZAotICogd2l0aCBTZXB0ZWwgY2FyZHMuCi0gKi8KLXN0YXRpYyBpbnQgc2VwdGVsX3NldGZpbHRlcihwY2FwX3QgKnAsIHN0cnVjdCBicGZfcHJvZ3JhbSAqZnApIHsKLSAgaWYgKCFwKQotICAgIHJldHVybiAtMTsKLSAgaWYgKCFmcCkgewotICAgIHN0cm5jcHkocC0+ZXJyYnVmLCAic2V0ZmlsdGVyOiBObyBmaWx0ZXIgc3BlY2lmaWVkIiwKLQkgICAgc2l6ZW9mKHAtPmVycmJ1ZikpOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIC8qIE1ha2Ugb3VyIHByaXZhdGUgY29weSBvZiB0aGUgZmlsdGVyICovCi0KLSAgaWYgKGluc3RhbGxfYnBmX3Byb2dyYW0ocCwgZnApIDwgMCkKLSAgICByZXR1cm4gLTE7Ci0KLSAgcmV0dXJuICgwKTsKLX0KLQotLyoKICAqIFdlIGRvbid0IHN1cHBvcnQgbm9uLWJsb2NraW5nIG1vZGUuICBJJ20gbm90IHN1cmUgd2hhdCB3ZSdkCiAgKiBkbyB0byBzdXBwb3J0IGl0IGFuZCwgZ2l2ZW4gdGhhdCB3ZSBkb24ndCBzdXBwb3J0IHNlbGVjdCgpLwogICogcG9sbCgpL2Vwb2xsX3dhaXQoKS9rZXZlbnQoKSBldGMuLCBpdCBwcm9iYWJseSBkb2Vzbid0CkBAIC0zNDcsNyArMzE0LDcgQEAKIHBjYXBfdCAqCiBwY2FwX2NyZWF0ZV9pbnRlcmZhY2UoY29uc3QgY2hhciAqZGV2aWNlLCBjaGFyICplcnJidWYpCiB7Ci0gIHBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorICBzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAgICAgICAgICAgICAgICAgIlRoaXMgdmVyc2lvbiBvZiBsaWJwY2FwIG9ubHkgc3VwcG9ydHMgU2VwdGVsIGNhcmRzIik7CiAgIHJldHVybiAoTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9wY2FwLXNpdGEuYyBiL3BjYXAtc2l0YS5jCmluZGV4IDdjNDI3OTEuLmM1M2YzMjMgMTAwNjQ0Ci0tLSBhL3BjYXAtc2l0YS5jCisrKyBiL3BjYXAtc2l0YS5jCkBAIC03Miw2ICs3MiwxNCBAQAogCWludAkJCWxlbjsJCS8qIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIGluYm91bmQgbWVzc2FnZSAqLwogfSB1bml0X3Q7CiAKKy8qCisgKiBQcml2YXRlIGRhdGEuCisgKiBDdXJyZW50bHkgY29udGFpbnMgbm90aGluZy4KKyAqLworc3RydWN0IHBjYXBfc2l0YSB7CisJaW50CWR1bW15OworfTsKKwogc3RhdGljIHVuaXRfdAkJdW5pdHNbTUFYX0NIQVNTSVMrMV1bTUFYX0dFT1NMT1QrMV07CS8qIHdlIHVzZSBpbmRleGVzIG9mIDEgdGhyb3VnaCA4LCBidXQgd2UgcmVzZXJ2ZS93YXN0ZSBpbmRleCAwICovCiBzdGF0aWMgZmRfc2V0CQlyZWFkZmRzOwkJCQkvKiBhIHBsYWNlIHRvIHN0b3JlIHRoZSBmaWxlIGRlc2NyaXB0b3JzIGZvciB0aGUgY29ubmVjdGlvbnMgdG8gdGhlIElPUHMgKi8KIHN0YXRpYyBpbnQJCW1heF9mczsKQEAgLTI2Niw3ICsyNzQsNyBAQAogCiAJZW1wdHlfdW5pdF90YWJsZSgpOwogCWlmICgoZnAgPSBmb3BlbigiL2V0Yy9ob3N0cyIsICJyIikpID09IE5VTEwpIHsJCQkJCQkJCQkJLyogdHJ5IHRvIG9wZW4gdGhlIGhvc3RzIGZpbGUgYW5kIGlmIGl0IGZhaWxzICovCi0JCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiQ2Fubm90IG9wZW4gJy9ldGMvaG9zdHMnIGZvciByZWFkaW5nLiIpOwkvKiByZXR1cm4gdGhlIG5vaG9zdHNmaWxlIGVycm9yIHJlc3BvbnNlICovCisJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIkNhbm5vdCBvcGVuICcvZXRjL2hvc3RzJyBmb3IgcmVhZGluZy4iKTsJLyogcmV0dXJuIHRoZSBub2hvc3RzZmlsZSBlcnJvciByZXNwb25zZSAqLwogCQlyZXR1cm4gLTE7CiAJfQogCXdoaWxlIChmZ2V0cyhidWYsIE1BWF9MSU5FX1NJWkUtMSwgZnApKSB7CQkJLyogd2hpbGUgbG9vcGluZyBvdmVyIHRoZSBmaWxlICovCkBAIC0yODksMTUgKzI5NywxNSBAQAogCQlnZW9zbG90ID0gKihwdHIyICsgNSkgLSAnMCc7CQkJCQkvKiBhbmQgZ2VvLXNsb3QgbnVtYmVyICovCiAJCWlmIChjaGFzc2lzIDwgMSB8fCBjaGFzc2lzID4gTUFYX0NIQVNTSVMgfHwKIAkJCWdlb3Nsb3QgPCAxIHx8IGdlb3Nsb3QgPiBNQVhfR0VPU0xPVCkgewkJLyogaWYgdGhlIGNoYXNzaXMgYW5kL29yIHNsb3QgbnVtYmVycyBhcHBlYXIgdG8gYmUgYmFkLi4uICovCi0JCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIkludmFsaWQgQUNOIG5hbWUgaW4gJy9ldGMvaG9zdHMnLiIpOwkvKiB3YXJuIHRoZSB1c2VyICovCisJCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJJbnZhbGlkIEFDTiBuYW1lIGluICcvZXRjL2hvc3RzJy4iKTsJLyogd2FybiB0aGUgdXNlciAqLwogCQkJY29udGludWU7CQkJCQkJCQkJCQkJCQkJCQkvKiBhbmQgaWdub3JlIHRoZSBlbnRyeSAqLwogCQl9Ci0JCWlmICgocHRyMiA9IChjaGFyICopbWFsbG9jKHN0cmxlbihwdHIpICsgMSkpID09IE5VTEwpIHsKKwkJcHRyMiA9IHN0cmR1cChwdHIpOwkJCQkJLyogY29weSB0aGUgSVAgYWRkcmVzcyBpbnRvIG91ciBtYWxsb2MnZWQgbWVtb3J5ICovCisJCWlmIChwdHIyID09IE5VTEwpIHsKIAkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJICAgIGVycm5vLCAibWFsbG9jIik7CiAJCQljb250aW51ZTsKIAkJfQotCQlzdHJjcHkocHRyMiwgcHRyKTsJCQkJCQkJCS8qIGNvcHkgdGhlIElQIGFkZHJlc3MgaW50byBvdXIgbWFsbG9jJ2VkIG1lbW9yeSAqLwogCQl1ID0gJnVuaXRzW2NoYXNzaXNdW2dlb3Nsb3RdOwogCQl1LT5pcCA9IHB0cjI7CQkJCQkJCQkJLyogYW5kIHJlbWVtYmVyIHRoZSB3aG9sZSBzaGViYW5nICovCiAJCXUtPmNoYXNzaXMgPSBjaGFzc2lzOwpAQCAtNDA3LDE5ICs0MTUsMTggQEAKIAogc3RhdGljIHZvaWQgbm9uVW5pZmllZF9JT1BfcG9ydF9uYW1lKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsIGNvbnN0IGNoYXIgKnByb3RvLCB1bml0X3QgKnUpIHsKIAotCXBjYXBfc25wcmludGYoYnVmLCBidWZzaXplLCAiJXNfJWRfJWQiLCBwcm90bywgdS0+Y2hhc3NpcywgdS0+Z2Vvc2xvdCk7CisJc25wcmludGYoYnVmLCBidWZzaXplLCAiJXNfJWRfJWQiLCBwcm90bywgdS0+Y2hhc3NpcywgdS0+Z2Vvc2xvdCk7CiB9CiAKIHN0YXRpYyB2b2lkIHVuaWZpZWRfSU9QX3BvcnRfbmFtZShjaGFyICpidWYsIHNpemVfdCBidWZzaXplLCBjb25zdCBjaGFyICpwcm90bywgdW5pdF90ICp1LCBpbnQgSU9QcG9ydG51bSkgewogCWludAkJCXBvcnRudW07CiAKIAlwb3J0bnVtID0gKCh1LT5jaGFzc2lzIC0gMSkgKiA2NCkgKyAoKHUtPmdlb3Nsb3QgLSAxKSAqIDgpICsgSU9QcG9ydG51bSArIDE7Ci0JcGNhcF9zbnByaW50ZihidWYsIGJ1ZnNpemUsICIlc18lZCIsIHByb3RvLCBwb3J0bnVtKTsKKwlzbnByaW50ZihidWYsIGJ1ZnNpemUsICIlc18lZCIsIHByb3RvLCBwb3J0bnVtKTsKIH0KIAogc3RhdGljIGNoYXIgKnRyYW5zbGF0ZV9JT1BfdG9fcGNhcF9uYW1lKHVuaXRfdCAqdSwgY2hhciAqSU9QbmFtZSwgYnBmX3VfaW50MzIgaWZ0eXBlKSB7CiAJaWZhY2VfdAkJKmlmYWNlX3B0ciwgKmlmYWNlOwotCWNoYXIJCSpuYW1lOwogCWNoYXIJCWJ1ZlszMl07CiAJY2hhcgkJKnByb3RvOwogCWNoYXIJCSpwb3J0OwpAQCAtNDM0LDE1ICs0NDEsMTIgQEAKIAogCWlmYWNlLT5pZnR5cGUgPSBpZnR5cGU7CQkJCQkvKiByZW1lbWJlciB0aGUgaW50ZXJmYWNlIHR5cGUgb2YgdGhpcyBpbnRlcmZhY2UgKi8KIAotCW5hbWUgPSBtYWxsb2Moc3RybGVuKElPUG5hbWUpICsgMSk7CQkvKiBnZXQgbWVtb3J5IGZvciB0aGUgSU9QJ3MgbmFtZSAqLwotICAgICAgICBpZiAobmFtZSA9PSBOVUxMKSB7ICAgIC8qIG9vcHMsIHdlIGRpZG4ndCBnZXQgdGhlIG1lbW9yeSByZXF1ZXN0ZWQgICAgICovCisJaWZhY2UtPklPUG5hbWUgPSBzdHJkdXAoSU9QbmFtKTsJCQkvKiBjb3B5IGl0IGFuZCBzdGljayBpdCBpbnRvIHRoZSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgaWYgKGlmYWNlLT5JT1BuYW1lID09IE5VTEwpIHsgICAgLyogb29wcywgd2UgZGlkbid0IGdldCB0aGUgbWVtb3J5IHJlcXVlc3RlZCAgICAgKi8KICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yLi4uY291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBJT1BuYW1lLi4udmFsdWUgb2YgZXJybm8gaXM6ICVkXG4iLCBlcnJubyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KIAotCXN0cmNweShuYW1lLCBJT1BuYW1lKTsJCQkJCS8qIGFuZCBjb3B5IGl0IGluICovCi0JaWZhY2UtPklPUG5hbWUgPSBuYW1lOwkJCQkJLyogYW5kIHN0aWNrIGl0IGludG8gdGhlIHN0cnVjdHVyZSAqLwotCiAJaWYgKHN0cm5jbXAoSU9QbmFtZSwgImxvIiwgMikgPT0gMCkgewogCQlJT1Bwb3J0bnVtID0gYXRvaSgmSU9QbmFtZVsyXSk7CiAJCXN3aXRjaCAoaWZ0eXBlKSB7CkBAIC00NzgsMTUgKzQ4MiwxMiBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQluYW1lID0gbWFsbG9jKHN0cmxlbihidWYpICsgMSk7CQkJLyogZ2V0IG1lbW9yeSBmb3IgdGhhdCBuYW1lICovCi0gICAgICAgIGlmIChuYW1lID09IE5VTEwpIHsgICAgLyogb29wcywgd2UgZGlkbid0IGdldCB0aGUgbWVtb3J5IHJlcXVlc3RlZCAgICAgKi8KKwlpZmFjZS0+bmFtZSA9IHN0cmR1cChidWYpOwkJCQkJLyogbWFrZSBhIGNvcHkgYW5kIHN0aWNrIGl0IGludG8gdGhlIHN0cnVjdHVyZSAqLworICAgICAgICBpZiAoaWZhY2UtPm5hbWUgPT0gTlVMTCkgeyAgICAvKiBvb3BzLCB3ZSBkaWRuJ3QgZ2V0IHRoZSBtZW1vcnkgcmVxdWVzdGVkICAgICAqLwogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IuLi5jb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIElPUCBwb3J0IG5hbWUuLi52YWx1ZSBvZiBlcnJubyBpczogJWRcbiIsIGVycm5vKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogCi0Jc3RyY3B5KG5hbWUsIGJ1Zik7CQkJCQkJLyogYW5kIGNvcHkgaXQgaW4gKi8KLQlpZmFjZS0+bmFtZSA9IG5hbWU7CQkJCQkJLyogYW5kIHN0aWNrIGl0IGludG8gdGhlIHN0cnVjdHVyZSAqLwotCiAJaWYgKHUtPmlmYWNlID09IDApIHsJCQkJCS8qIGlmIHRoaXMgaXMgdGhlIGZpcnN0IG5hbWUgKi8KIAkJdS0+aWZhY2UgPSBpZmFjZTsJCQkJCS8qIHN0aWNrIHRoaXMgZW50cnkgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QgKi8KIAl9IGVsc2UgewpAQCAtNzAzLDcgKzcwNCw3IEBACiAJCQkJcHJldl9pZmYgPSBpZmY7CiAKIAkJCQluZXduYW1lID0gdHJhbnNsYXRlX0lPUF90b19wY2FwX25hbWUodSwgaWZmLT5uYW1lLCBpbnRlcmZhY2VUeXBlKTsJCS8qIGFkZCBhIHRyYW5zbGF0aW9uIGVudHJ5IGFuZCBnZXQgYSBwb2ludCB0byB0aGUgbWFuZ2xlZCBuYW1lICovCi0JCQkJYmlnZ2VyX2J1ZmZlciA9IHJlYWxsb2MoaWZmLT5uYW1lLCBzdHJsZW4obmV3bmFtZSkgKyAxKSk7CisJCQkJYmlnZ2VyX2J1ZmZlciA9IHJlYWxsb2MoaWZmLT5uYW1lLCBzdHJsZW4obmV3bmFtZSkgKyAxKTsKIAkJCQlpZiAoYmlnZ2VyX2J1ZmZlciA9PSBOVUxMKSB7CS8qIHdlIG5vdyByZS13cml0ZSB0aGUgbmFtZSBzdG9yZWQgaW4gdGhlIGludGVyZmFjZSBsaXN0ICovCiAJCQkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZXJyYnVmLAogCQkJCQkgICAgUENBUF9FUlJCVUZfU0laRSwgZXJybm8sICJyZWFsbG9jIik7CkBAIC03NTQsOSArNzU1LDkgQEAKIAogCQltZW1jcHkoJndvcmtpbmdfc2V0LCAmcmVhZGZkcywgc2l6ZW9mKHJlYWRmZHMpKTsJCQkJLyogb3RoZXJ3aXNlLCB3ZSBzdGlsbCBoYXZlIHRvIGxpc3RlbiBmb3IgbW9yZSBzdHVmZiwgdGlsbCB3ZSB0aW1lb3V0ICovCiAJCXJldHZhbCA9IHNlbGVjdChtYXhfZnMgKyAxLCAmd29ya2luZ19zZXQsIE5VTEwsIE5VTEwsICZ0dik7Ci0JCWlmIChyZXR2YWwgPT0gLTEpIHsJCQkJCQkJCQkJCQkvKiBhbiBlcnJvciBvY2N1cmVkICEhISEhICovCisJCWlmIChyZXR2YWwgPT0gLTEpIHsJCQkJCQkJCQkJCQkvKiBhbiBlcnJvciBvY2N1cnJlZCAhISEhISAqLwogCQkJcmV0dXJuOwotCQl9IGVsc2UgaWYgKHJldHZhbCA9PSAwKSB7CQkJCQkJCQkJCS8qIHRpbWVvdXQgb2NjdXJlZCwgc28gcHJvY2VzcyB3aGF0IHdlJ3ZlIGdvdCBzb2ZhciBhbmQgcmV0dXJuICovCisJCX0gZWxzZSBpZiAocmV0dmFsID09IDApIHsJCQkJCQkJCQkJLyogdGltZW91dCBvY2N1cnJlZCwgc28gcHJvY2VzcyB3aGF0IHdlJ3ZlIGdvdCBzb2ZhciBhbmQgcmV0dXJuICovCiAJCQlwcmludGYoInRpbWVvdXRcbiIpOwogCQkJcmV0dXJuOwogCQl9IGVsc2UgewpAQCAtODgzLDggKzg4NCw4IEBACiAJLy9wcmludGYoImFjbl9zdGFydF9tb25pdG9yKCkgY29tcGxldGVcbiIpOwkJCQkvLyBmdWxrbwogfQogCi1zdGF0aWMgaW50IHBjYXBfaW5qZWN0X2FjbihwY2FwX3QgKnAsIGNvbnN0IHZvaWQgKmJ1ZiBfVV8sIHNpemVfdCBzaXplIF9VXykgewotCXN0cmxjcHkocC0+ZXJyYnVmLCAiU2VuZGluZyBwYWNrZXRzIGlzbid0IHN1cHBvcnRlZCBvbiBBQ04gYWRhcHRlcnMiLAorc3RhdGljIGludCBwY2FwX2luamVjdF9hY24ocGNhcF90ICpwLCBjb25zdCB2b2lkICpidWYgX1VfLCBpbnQgc2l6ZSBfVV8pIHsKKwlwY2FwX3N0cmxjcHkocC0+ZXJyYnVmLCAiU2VuZGluZyBwYWNrZXRzIGlzbid0IHN1cHBvcnRlZCBvbiBBQ04gYWRhcHRlcnMiLAogCSAgICBQQ0FQX0VSUkJVRl9TSVpFKTsKIAlyZXR1cm4gKC0xKTsKIH0KQEAgLTkxNSwxMiArOTE2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwY2FwX3NldGRpcmVjdGlvbl9hY24ocGNhcF90ICpoYW5kbGUsIHBjYXBfZGlyZWN0aW9uX3QgZCkgewotCXBjYXBfc25wcmludGYoaGFuZGxlLT5lcnJidWYsIHNpemVvZihoYW5kbGUtPmVycmJ1ZiksCi0JICAgICJTZXR0aW5nIGRpcmVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIEFDTiBhZGFwdGVycyIpOwotCXJldHVybiAtMTsKLX0KLQogc3RhdGljIGludCBhY25fcmVhZF9uX2J5dGVzX3dpdGhfdGltZW91dChwY2FwX3QgKmhhbmRsZSwgaW50IGNvdW50KSB7CiAJc3RydWN0CQl0aW1ldmFsIHR2OwogCWludAkJCXJldHZhbCwgZmQ7CkBAIC05NDAsMTAgKzkzNSwxMCBAQAogCWJwID0gaGFuZGxlLT5icDsKIAl3aGlsZSAoY291bnQpIHsKIAkJcmV0dmFsID0gc2VsZWN0KGZkICsgMSwgJndfZmRzLCBOVUxMLCBOVUxMLCAmdHYpOwotCQlpZiAocmV0dmFsID09IC0xKSB7CQkJCQkJCQkJCQkvKiBhbiBlcnJvciBvY2N1cmVkICEhISEhICovCisJCWlmIChyZXR2YWwgPT0gLTEpIHsJCQkJCQkJCQkJCS8qIGFuIGVycm9yIG9jY3VycmVkICEhISEhICovCiAvLwkJCWZwcmludGYoc3RkZXJyLCAiZXJyb3IgZHVyaW5nIHBhY2tldCBkYXRhIHJlYWRcbiIpOwotCQkJcmV0dXJuIC0xOwkJCQkJCQkJCQkJCS8qIGJ1dCB3ZSBuZWVkIHRvIHJldHVybiBhIGdvb2QgaW5kaWNhdGlvbiB0byBwcmV2ZW50IHVubmVjY2Vzc2FyeSBwb3B1cHMgKi8KLQkJfSBlbHNlIGlmIChyZXR2YWwgPT0gMCkgewkJCQkJCQkJCS8qIHRpbWVvdXQgb2NjdXJlZCwgc28gcHJvY2VzcyB3aGF0IHdlJ3ZlIGdvdCBzb2ZhciBhbmQgcmV0dXJuICovCisJCQlyZXR1cm4gLTE7CQkJCQkJCQkJCS8qIGJ1dCB3ZSBuZWVkIHRvIHJldHVybiBhIGdvb2QgaW5kaWNhdGlvbiB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHBvcHVwcyAqLworCQl9IGVsc2UgaWYgKHJldHZhbCA9PSAwKSB7CQkJCQkJCQkJLyogdGltZW91dCBvY2N1cnJlZCwgc28gcHJvY2VzcyB3aGF0IHdlJ3ZlIGdvdCBzb2ZhciBhbmQgcmV0dXJuICovCiAvLwkJCWZwcmludGYoc3RkZXJyLCAidGltZW91dCBkdXJpbmcgcGFja2V0IGRhdGEgcmVhZFxuIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0gZWxzZSB7CkBAIC05OTcsNyArOTkyLDcgQEAKIAogCWhhbmRsZS0+aW5qZWN0X29wID0gcGNhcF9pbmplY3RfYWNuOwogCWhhbmRsZS0+c2V0ZmlsdGVyX29wID0gcGNhcF9zZXRmaWx0ZXJfYWNuOwotCWhhbmRsZS0+c2V0ZGlyZWN0aW9uX29wID0gcGNhcF9zZXRkaXJlY3Rpb25fYWNuOworCWhhbmRsZS0+c2V0ZGlyZWN0aW9uX29wID0gTlVMTDsgLyogTm90IGltcGxlbWVudGVkICovCiAJaGFuZGxlLT5zZXRfZGF0YWxpbmtfb3AgPSBOVUxMOwkvKiBjYW4ndCBjaGFuZ2UgZGF0YSBsaW5rIHR5cGUgKi8KIAloYW5kbGUtPmdldG5vbmJsb2NrX29wID0gcGNhcF9nZXRub25ibG9ja19mZDsKIAloYW5kbGUtPnNldG5vbmJsb2NrX29wID0gcGNhcF9zZXRub25ibG9ja19mZDsKQEAgLTEwNDYsNyArMTA0MSw3IEBACiBwY2FwX3QgKnBjYXBfY3JlYXRlX2ludGVyZmFjZShjb25zdCBjaGFyICpkZXZpY2UgX1VfLCBjaGFyICplYnVmKSB7CiAJcGNhcF90ICpwOwogCi0JcCA9IHBjYXBfY3JlYXRlX2NvbW1vbihlYnVmLCAwKTsKKwlwID0gUENBUF9DUkVBVEVfQ09NTU9OKGVidWYsIHN0cnVjdCBwY2FwX3NpdGEpOwogCWlmIChwID09IE5VTEwpCiAJCXJldHVybiAoTlVMTCk7CiAKZGlmZiAtLWdpdCBhL3BjYXAtc2l0YS5odG1sIGIvcGNhcC1zaXRhLmh0bWwKaW5kZXggOTc0MDhkOC4uMzNmMWUxMCAxMDA2NDQKLS0tIGEvcGNhcC1zaXRhLmh0bWwKKysrIGIvcGNhcC1zaXRhLmh0bWwKQEAgLTIyLDcgKzIyLDcgQEAKIDxVTD4KIAk8U1RST05HPk5vdGU6PC9TVFJPTkc+IFRoaXMgZG9jdW1lbnQgaXMgcGFydCBvZiB0aGUgbGlicGNhcCBHaXQgYW5kIHdhcyBkZXJpdmVkIGZyb20gJ3BjYXAuMycgKGNpcmNhIEF1Zy8wNykuCiAJPFA+Ci0JVGhlIEFDTiBwcm92aWRlcyBhIGN1c3RvbWl6ZWQvZGlzdHJpYnV0ZWQgdmVyc2lvbiBvZiB0aGlzIGxpYnJhcnkgdGhhdCBhbG93cyBTTVBzIHRvCisJVGhlIEFDTiBwcm92aWRlcyBhIGN1c3RvbWl6ZWQvZGlzdHJpYnV0ZWQgdmVyc2lvbiBvZiB0aGlzIGxpYnJhcnkgdGhhdCBhbGxvd3MgU01QcyB0bwogCWludGVyYWN0IHdpdGggdGhlIHZhcmlvdXMgSU9QcyB3aXRoaW4gdGhlIHNpdGUgcHJvdmlkaW5nIGEgc3RhbmRhcmQgbWVjaGFuaXNtCiAJdG8gY2FwdHVyZSBMQU4gYW5kIFdBTiBtZXNzYWdlIHRyYWZmaWMuCiAJPFA+CkBAIC0zMSw3ICszMSw3IEBACiAJCQk8VFI+CiAJCQkJPFRIIFZBTElHTj1UT1A+U01QPC9USD4KIAkJCQk8VEQgVkFMSUdOPVRPUD5UaGUgU3VwZXJ2aXNvcnkgTWFuYWdlbWVudCBQcm9jZXNzb3Igd2hlcmUgV2lyZXNoYXJrIChvciBlcXVpdmFsZW50KQotCQkJCQkJCQlydW5zIGluIGNvbmp1Y3Rpb24gd2l0aCBhIGxpYnBjYXAgZnJvbnQtZW5kLjwvVEQ+CisJCQkJCQkJCXJ1bnMgaW4gY29uanVuY3Rpb24gd2l0aCBhIGxpYnBjYXAgZnJvbnQtZW5kLjwvVEQ+CiAJCQk8L1RSPgogCQkJPFRSPgogCQkJCTxUSCBWQUxJR049VE9QPklPUDwvVEg+CkBAIC00Myw3ICs0Myw3IEBACiAJPFA+CiAJRWFjaCBJT1Agd2lsbCBiZSBjYXBhYmxlIG9mIHN1cHBvcnRpbmcgbXVsdGlwbGUgY29ubmVjdGlvbnMgZnJvbSBhbiBTTVAKIAllbmFibGluZyBtb25pdG9yaW5nIG9mIG1vcmUgdGhhbiBvbmUgaW50ZXJmYWNlIGF0IGEgdGltZSwgZWFjaCB0aHJvdWdoCi0JaXRzIG93biBzZXBlcmF0ZSBjb25uZWN0aW9uLiAgVGhlIElPUCBpcyByZXNwb25zaWJsZSB0byBlbnN1cmUgYW5kIHJlcG9ydAorCWl0cyBvd24gc2VwYXJhdGUgY29ubmVjdGlvbi4gIFRoZSBJT1AgaXMgcmVzcG9uc2libGUgdG8gZW5zdXJlIGFuZCByZXBvcnQKIAlhbiBlcnJvciBpZiBhbnkgYXR0ZW1wdCBpcyBtYWRlIHRvIG1vbml0b3IgdGhlIHNhbWUgaW50ZXJmYWNlIG1vcmUgdGhhbiBvbmNlLgogCTxQPgogCVRoZXJlIGFyZSB0aHJlZSBhcHBsaWNhdGlvbnMgdGhhdCB3aWxsIGJlIHN1cHBvcnRlZCBieSB0aGUgQUNOIHZlcnNpb24gb2YgbGlicGNhcC4KQEAgLTEyMSw4ICsxMjEsOCBAQAogCQk8VFI+PFRIIFZBTElHTj1UT1AgTk9XUkFQPklPUCAtPiBTTVA8L1RIPgogCQkJPFREPgogCQkJQWZ0ZXIgYW55IHJlcXVpcmVkIHByb2Nlc3NpbmcgaXMgY29tcGxldGUsIHRoZSBJT1Agd2lsbCByZXR1cm4gYQotCQkJbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBjb250YWluaW5nIGFuIGVycm9yIG1lc3NhZ2UgaWYgb25lIG9jY3VyZWQuCi0JCQlJZiBubyBlcnJvciBvY2N1cmVkLCBhIGVtcHR5IHN0cmluZyBpcyBzdGlsbCByZXR1cm5lZC4KKwkJCW51bGwgdGVybWluYXRlZCBzdHJpbmcgY29udGFpbmluZyBhbiBlcnJvciBtZXNzYWdlIGlmIG9uZSBvY2N1cnJlZC4KKwkJCUlmIG5vIGVycm9yIG9jY3VycmVkLCBhIGVtcHR5IHN0cmluZyBpcyBzdGlsbCByZXR1cm5lZC4KIAkJCUVycm9ycyBhcmU6CiAJCQk8VUw+CiAJCQk8TEk+IkludGVyZmFjZSAoeHh4KSBkb2VzIG5vdCBleGlzdC4iCkBAIC0yOTgsNyArMjk4LDcgQEAKIAkJCTxURD4KIAkJCVRoZSBTTVAgcmVhZHMgb25seSB0aGUgbmV4dCBwYWNrZXQgZnJvbSB0aGUgcmV2ZXJzZSBjaGFubmVsIG9mIHRoZSBjb25uZWN0aW9uCiAJCQliZXR3ZWVuIHRoZSBTTVAgYW5kIHRoZSBJT1AgdGhhdCBwcm92aWRlcyB0aGUgY2FwdHVyZWQgZGF0YSAodmlhIGNhbGxpbmcgcGNhcF9kaXNwYXRjaCgpCi0JCQl3aXRoIGEgY291bnQgb2YgMSkgYW5kIHJldHVybnMgc2VwZXJhdGUgcG9pbnRlcnMgdG8gYm90aCB0aGUKKwkJCXdpdGggYSBjb3VudCBvZiAxKSBhbmQgcmV0dXJucyBzZXBhcmF0ZSBwb2ludGVycyB0byBib3RoIHRoZQogCQkJcGFja2V0IGhlYWRlciBhbmQgcGFja2V0IGRhdGEgYnkgaW52b2tpbmcgYW4gaW50ZXJuYWwgY2FsbGJhY2suCiAJCQk8L1REPgogCQk8L1RSPgpAQCAtMzIyLDcgKzMyMiw3IEBACiAJCTxUUj48VEggVkFMSUdOPVRPUCBOT1dSQVA+SU9QIC0+IFNNUDwvVEg+CiAJCQk8VEQ+CiAJCQlUaGUgSU9QIHJldHVybnMgYSBudWxsIHRlcm1pbmF0ZWQgZXJyb3Igc3RyaW5nIGlmIGl0IGZhaWxlZCB0byBhY2NlcHQgdGhlIGZpbHRlci4KLQkJCUlmIG5vIGVycm9yIG9jY3VyZWQsIHRoZW4gYSBOVUxMIHRlcm1pbmF0ZWQgZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGluc3RlYWQuCisJCQlJZiBubyBlcnJvciBvY2N1cnJlZCwgdGhlbiBhIE5VTEwgdGVybWluYXRlZCBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgaW5zdGVhZC4KIAkJCUVycm9ycyBhcmU6CiAJCQk8VUw+CiAJCQk8TEk+IkludmFsaWQgQlBGLiIKQEAgLTM2Miw3ICszNjIsNyBAQAogCQk8VFI+PFRIIFZBTElHTj1UT1AgTk9XUkFQPlNNUCAtPiBJT1A8L1RIPgogCQkJPFREPgogCQkJVGhlIFNNUCBjbG9zZXMgdGhlIGZpbGUgZGVzY3JpcHRvciwgYW5kIGlmIHRoZSBkZXNjcmlwdG9yIGlzIHRoYXQgb2YKLQkJCXRoZSBjb21taW51Y2F0aW9uIHNlc3Npb24gd2l0aCBhbiBJT1AsIGl0IHRvbyBpcyB0ZXJtaW5hdGVkLgorCQkJdGhlIGNvbW11bmljYXRpb24gc2Vzc2lvbiB3aXRoIGFuIElPUCwgaXQgdG9vIGlzIHRlcm1pbmF0ZWQuCiAJCQk8L1REPgogCQk8L1RSPgogCQk8VFI+PFRIIFZBTElHTj1UT1AgTk9XUkFQPklPUDwvVEg+CkBAIC0zNzAsNyArMzcwLDcgQEAKIAkJCUlmIHRoZSBJT1AgZGV0ZWN0cyB0aGF0IGl0cyBjb21tdW5pY2F0aW9uIHNlc3Npb24gd2l0aCBhbiBTTVAKIAkJCWhhcyBjbG9zZWQsIGl0IHdpbGwgdGVybWluYXRlIGFueSBtb25pdG9yaW5nIGluIHByb2dyZXNzLAogCQkJcmVsZWFzZSBhbnkgcmVzb3VyY2VzIGFuZCBjbG9zZSBpdHMgZW5kIG9mIHRoZSBzZXNzaW9uLgotCQkJSXQgd2lsbCBub3QgbWFpbnRhaW4gcGVyc2lzdGFuY2Ugb2YgYW55IGluZm9ybWF0aW9uIG9yIHByaW9yIG1vZGUgb2Ygb3BlcmF0aW9uLgorCQkJSXQgd2lsbCBub3QgbWFpbnRhaW4gcGVyc2lzdGVuY2Ugb2YgYW55IGluZm9ybWF0aW9uIG9yIHByaW9yIG1vZGUgb2Ygb3BlcmF0aW9uLgogCQkJPC9URD4KIAkJPC9UUj4KIAk8L1RBQkxFPjwvVEQ+PC9UUj4KQEAgLTQxMSw3ICs0MTEsNyBAQAogCQkJCQk8VFI+CiAJCQkJCQk8VEQgVkFMSUdOPVRPUD5JbnRlcmZhY2UgSUQ8L1REPgogCQkJCQkJPFREIFZBTElHTj1UT1AgQUxJR049Q0VOVEVSPjE8L1REPgotCQkJCQkJPFREIFZBTElHTj1UT1A+QSBOVUxMIHRvIGluZGljYXRlIGFuIGFuIGVtcHR5ICdpbnRlcmZhY2UgSUQnLjwvVEQ+CisJCQkJCQk8VEQgVkFMSUdOPVRPUD5BIE5VTEwgdG8gaW5kaWNhdGUgYW4gZW1wdHkgJ2ludGVyZmFjZSBJRCcuPC9URD4KIAkJCQkJPC9UUj4KIAkJCQk8L1RBQkxFPgogCQkJPC9URD4KQEAgLTQ0Miw3ICs0NDIsNyBAQAogCQkJPFREIFZBTElHTj1UT1AgQUxJR049Q0VOVEVSIE5PV1JBUD5JT1AgLT4gU01QPC9URD4KIAkJCTxURCBWQUxJR049VE9QPlRoZSBJT1AgcmV0dXJucyBhIGxpc3Qgb2Ygc2VxdWVuY2VzIG9mIGluZm9ybWF0aW9uIGFzCiAJCQkJZGVmaW5lZCBieSB0aGUgcmV0dXJuIHBhcmFtZXRlciBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwgKGFzIHNob3duIGluIHRoZSBmb2xsb3dpbmcgdGFibGUpLgotCQkJCUVsZW1lbnRzIGFyZSBzcGVjaWZpZWQgYnkgcHJvdmlkaW5nIGFuIHVuc2lnbmVkIGJ5dGUgcHJlY2VlZGluZyB0aGUgYWN0dWFsIGRhdGEgdGhhdCBjb250YWlucyBsZW5ndGggaW5mb3JtYXRpb24uCisJCQkJRWxlbWVudHMgYXJlIHNwZWNpZmllZCBieSBwcm92aWRpbmcgYW4gdW5zaWduZWQgYnl0ZSBwcmVjZWRpbmcgdGhlIGFjdHVhbCBkYXRhIHRoYXQgY29udGFpbnMgbGVuZ3RoIGluZm9ybWF0aW9uLgogCQkJCTxQPgogCQkJCTxUQUJMRSBCT1JERVI9MSBDRUxMU1BBQ0lORz0wIENFTExQQURESU5HPTM+CiAJCQkJPFRSPgpAQCAtNjM1LDcgKzYzNSw3IEBACiAJCQkJCQk8VEQgVkFMSUdOPVRPUD5CUEYgcHJvZ3JhbTwvVEQ+CiAJCQkJCQk8VEQgVkFMSUdOPVRPUCBBTElHTj1DRU5URVI+J24nPC9URD4KIAkJCQkJCTxURCBWQUxJR049VE9QPjggYnl0ZXMgb2YgZWFjaCBjb21tYW5kIChyZXBlYXRlZCAnbicgdGltZXMpLjxCUj4KLQkJCQkJCQkJIAlFYWNoIGNvbW1hbmQgY29uc2lzdHMgb2YgdGhhdCBDLXN0eWxlIHN0cnVjdHVyZSB3aGljaCBjb250YWluczoKKwkJCQkJCQkJCUVhY2ggY29tbWFuZCBjb25zaXN0cyBvZiB0aGF0IEMtc3R5bGUgc3RydWN0dXJlIHdoaWNoIGNvbnRhaW5zOgogCQkJCQkJCTxQPgogCQkJCQkJCTxUQUJMRSBCT1JERVI9MSBDRUxMU1BBQ0lORz0wIENFTExQQURESU5HPTM+CiAJCQkJCQkJCTxUUj4KQEAgLTcxOSw3ICs3MTksNyBAQAogCQkJCQk8VFI+CiAJCQkJCQk8VEQgVkFMSUdOPVRPUD5wc19pZmRyb3A8L1REPgogCQkJCQkJPFREIFZBTElHTj1UT1AgQUxJR049Q0VOVEVSPjQ8L1REPgotCQkJCQkJPFREIFZBTElHTj1UT1A+VGhlIG51bWJlciBvZiBwYWNrZXRzIGRyb3BwZWQgYnkgdGhlIG5ldHdvcmsgaW50ZWZhY2UKKwkJCQkJCTxURCBWQUxJR049VE9QPlRoZSBudW1iZXIgb2YgcGFja2V0cyBkcm9wcGVkIGJ5IHRoZSBuZXR3b3JrIGludGVyZmFjZQogCQkJCQkJCShyZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSB3b3VsZCBoYXZlIHBhc3NlZCB0aGUgaW5wdXQgZmlsdGVyKS48L1REPgogCQkJCQk8L1RSPgogCQkJCTwvVEFCTEU+CkBAIC04MzksNyArODM5LDcgQEAKIAk8VUw+CiAJUENBUCwgV2lyZXNoYXJrIGFuZCBUY3BkdW1wIGVuaGFuY2VtZW50cyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIEFDTiB0byBzdXBwb3J0CiAJbW9uaXRvcmluZyBvZiBpdHMgcG9ydHMsIGhvd2V2ZXIgZWFjaCBvZiB0aGVzZSBmYWNpbGl0aWVzIHdlcmUgZm9jdXNlZCBvbiBjYXB0dXJpbmcKLQlhbmQgZGlzcGxheWluZyB0cmFmZmljIGZyb20gTEFOIGludGVyZmFjZXMuICBUaGUgU0lUQSBleHRlbnRpb25zIHRvIHRoZXNlIGZhY2lsaXRpZXMKKwlhbmQgZGlzcGxheWluZyB0cmFmZmljIGZyb20gTEFOIGludGVyZmFjZXMuICBUaGUgU0lUQSBleHRlbnNpb25zIHRvIHRoZXNlIGZhY2lsaXRpZXMKIAlhcmUgdXNlZCB0byBhbHNvIHByb3ZpZGUgdGhlIGFiaWxpdHkgdG8gY2FwdHVyZSwgZmlsdGVyLCBhbmQgZGlzcGxheSBpbmZvcm1hdGlvbiBmcm9tCiAJYW4gQUNOJ3MgV0FOIHBvcnRzLgogCTxQPgpAQCAtODQ5LDcgKzg0OSw3IEBACiAJPFA+CiAJPFVMIFRZUEU9RElTQz4KIAkJPExJPkZvciBFdGhlcm5ldCAobGlrZSkgZGV2aWNlcywgdGhlIHBhY2tldCBmb3JtYXQgaXMgdW5jaGFuZ2VkIGZyb20gdGhlIHN0YW5kYXJkIFBjYXAgZm9ybWF0LgotCQk8TEk+Rm9yIFdBTiBkZXZpY2VzLCB0aGUgcGFja2V0IGNvbnRhaW5zIGEgNSBieXRlIGhlYWRlciB0aGF0IHByZWNlZWRzIHRoZSBhY3R1YWwgY2FwdHVyZWQgZGF0YQorCQk8TEk+Rm9yIFdBTiBkZXZpY2VzLCB0aGUgcGFja2V0IGNvbnRhaW5zIGEgNSBieXRlIGhlYWRlciB0aGF0IHByZWNlZGVzIHRoZSBhY3R1YWwgY2FwdHVyZWQgZGF0YQogCQkJZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgdGFibGU6CiAJPC9VTD4KIAk8UD4KZGlmZiAtLWdpdCBhL3BjYXAtc25mLmMgYi9wY2FwLXNuZi5jCmluZGV4IDRlYWUwYjMuLmE5MTYyZWIgMTAwNjQ0Ci0tLSBhL3BjYXAtc25mLmMKKysrIGIvcGNhcC1zbmYuYwpAQCAtMTAsNyArMTAsNiBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAKLSNpbmNsdWRlIDxjdHlwZS5oPgogI2lmbmRlZiBfV0lOMzIKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KQEAgLTE3NywxMyArMTc2LDEzIEBACiAJCQljYXBsZW4gPSBwLT5zbmFwc2hvdDsKIAogCQlpZiAoKHAtPmZjb2RlLmJmX2luc25zID09IE5VTEwpIHx8Ci0JCSAgICAgYnBmX2ZpbHRlcihwLT5mY29kZS5iZl9pbnNucywgcmVxLnBrdF9hZGRyLCByZXEubGVuZ3RoLCBjYXBsZW4pKSB7CisJCSAgICAgcGNhcF9maWx0ZXIocC0+ZmNvZGUuYmZfaW5zbnMsIHJlcS5wa3RfYWRkciwgcmVxLmxlbmd0aCwgY2FwbGVuKSkgewogCQkJaGRyLnRzID0gc25mX3RpbWVzdGFtcF90b190aW1ldmFsKHJlcS50aW1lc3RhbXAsIHAtPm9wdC50c3RhbXBfcHJlY2lzaW9uKTsKIAkJCWhkci5jYXBsZW4gPSBjYXBsZW47CiAJCQloZHIubGVuID0gcmVxLmxlbmd0aDsKIAkJCWNhbGxiYWNrKHVzZXIsICZoZHIsIHJlcS5wa3RfYWRkcik7CisJCQluKys7CiAJCX0KLQkJbisrOwogCiAJCS8qIEFmdGVyIG9uZSBzdWNjZXNzZnVsIHBhY2tldCBpcyByZWNlaXZlZCwgd2Ugd29uJ3QgYmxvY2sKIAkJKiBhZ2FpbiBmb3IgdGhhdCB0aW1lb3V0LiAqLwpAQCAtMTk0LDI2ICsxOTMsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1zbmZfc2V0ZmlsdGVyKHBjYXBfdCAqcCwgc3RydWN0IGJwZl9wcm9ncmFtICpmcCkKLXsKLQlpZiAoIXApCi0JCXJldHVybiAtMTsKLQlpZiAoIWZwKSB7Ci0JCXN0cm5jcHkocC0+ZXJyYnVmLCAic2V0ZmlsdGVyOiBObyBmaWx0ZXIgc3BlY2lmaWVkIiwKLQkJCXNpemVvZihwLT5lcnJidWYpKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qIE1ha2Ugb3VyIHByaXZhdGUgY29weSBvZiB0aGUgZmlsdGVyICovCi0KLQlpZiAoaW5zdGFsbF9icGZfcHJvZ3JhbShwLCBmcCkgPCAwKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgaW50Ci1zbmZfaW5qZWN0KHBjYXBfdCAqcCwgY29uc3Qgdm9pZCAqYnVmIF9VXywgc2l6ZV90IHNpemUgX1VfKQorc25mX2luamVjdChwY2FwX3QgKnAsIGNvbnN0IHZvaWQgKmJ1ZiBfVV8sIGludCBzaXplIF9VXykKIHsKICNpZmRlZiBTTkZfSEFWRV9JTkpFQ1RfQVBJCiAJc3RydWN0IHBjYXBfc25mICpwcyA9IHAtPnByaXY7CkBAIC0yMzcsNyArMjE3LDcgQEAKIAkJcmV0dXJuICgtMSk7CiAJfQogI2Vsc2UKLQlzdHJsY3B5KHAtPmVycmJ1ZiwgIlNlbmRpbmcgcGFja2V0cyBpc24ndCBzdXBwb3J0ZWQgd2l0aCB0aGlzIHNuZiB2ZXJzaW9uIiwKKwlwY2FwX3N0cmxjcHkocC0+ZXJyYnVmLCAiU2VuZGluZyBwYWNrZXRzIGlzbid0IHN1cHBvcnRlZCB3aXRoIHRoaXMgc25mIHZlcnNpb24iLAogCSAgICBQQ0FQX0VSUkJVRl9TSVpFKTsKIAlyZXR1cm4gKC0xKTsKICNlbmRpZgpAQCAtMjUzLDcgKzIzMyw3IEBACiAJaW50IGZsYWdzID0gLTEsIHJpbmdfaWQgPSAtMTsKIAogCWlmIChkZXZpY2UgPT0gTlVMTCkgewotCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgImRldmljZSBpcyBOVUxMIik7CisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgImRldmljZSBpcyBOVUxMIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTMyNyw3ICszMDcsNyBAQAogCXAtPmxpbmt0eXBlID0gRExUX0VOMTBNQjsKIAlwLT5yZWFkX29wID0gc25mX3JlYWQ7CiAJcC0+aW5qZWN0X29wID0gc25mX2luamVjdDsKLQlwLT5zZXRmaWx0ZXJfb3AgPSBzbmZfc2V0ZmlsdGVyOworCXAtPnNldGZpbHRlcl9vcCA9IGluc3RhbGxfYnBmX3Byb2dyYW07CiAJcC0+c2V0ZGlyZWN0aW9uX29wID0gTlVMTDsgLyogTm90IGltcGxlbWVudGVkLiovCiAJcC0+c2V0X2RhdGFsaW5rX29wID0gc25mX3NldF9kYXRhbGluazsKIAlwLT5nZXRub25ibG9ja19vcCA9IHNuZl9nZXRub25ibG9jazsKQEAgLTM1NSw3ICszMzUsNyBAQAogCWNvbnN0IGNoYXIgKm5yID0gTlVMTDsKIAogCWlmIChzbmZfaW5pdChTTkZfVkVSU0lPTl9BUEkpKSB7Ci0JCSh2b2lkKXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkodm9pZClzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICAic25mX2dldGlmYWRkcnM6IHNuZl9pbml0IGZhaWxlZCIpOwogCQlyZXR1cm4gKC0xKTsKIAl9CkBAIC0zNzAsNyArMzUwLDcgQEAKIAkJZXJybm8gPSAwOwogCQltZXJnZSA9IHN0cnRvbChuciwgTlVMTCwgMCk7CiAJCWlmIChlcnJubykgewotCQkJKHZvaWQpcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkodm9pZClzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkJInNuZl9nZXRpZmFkZHJzOiBTTkZfRkxBR1MgaXMgbm90IGEgdmFsaWQgbnVtYmVyIik7CiAJCQlyZXR1cm4gKC0xKTsKIAkJfQpAQCAtNDA4LDcgKzM4OCw3IEBACiAJCSAqIGVudHJ5IGZvciB0aGUgZGV2aWNlLCBpZiB0aGV5J3JlIG5vdCBhbHJlYWR5IGluIHRoZQogCQkgKiBsaXN0IG9mIElQIGFkZHJlc3NlcyBmb3IgdGhlIGRldmljZT8KICAJCSAqLwotCQkodm9pZClwY2FwX3NucHJpbnRmKGRlc2MsTUFYX0RFU0NfTEVOR1RILCJNeXJpY29tICVzc25mJWQiLAorCQkodm9pZClzbnByaW50ZihkZXNjLE1BWF9ERVNDX0xFTkdUSCwiTXlyaWNvbSAlc3NuZiVkIiwKIAkJCW1lcmdlID8gIk1lcmdlIEJpdG1hc2sgUG9ydCAiIDogIiIsCiAJCQltZXJnZSA/IDEgPDwgaWZhLT5zbmZfaWZhX3BvcnRudW0gOiBpZmEtPnNuZl9pZmFfcG9ydG51bSk7CiAJCS8qCkBAIC00ODQsOCArNDY0LDggQEAKIAkJLyoKIAkJICogQWRkIGEgbmV3IGVudHJ5IHdpdGggYWxsIHBvcnRzIGJpdG1hc2sKIAkJICovCi0JCSh2b2lkKXBjYXBfc25wcmludGYobmFtZSxNQVhfREVTQ19MRU5HVEgsInNuZiVkIixhbGxwb3J0cyk7Ci0JCSh2b2lkKXBjYXBfc25wcmludGYoZGVzYyxNQVhfREVTQ19MRU5HVEgsIk15cmljb20gTWVyZ2UgQml0bWFzayBBbGwgUG9ydHMgc25mJWQiLAorCQkodm9pZClzbnByaW50ZihuYW1lLE1BWF9ERVNDX0xFTkdUSCwic25mJWQiLGFsbHBvcnRzKTsKKwkJKHZvaWQpc25wcmludGYoZGVzYyxNQVhfREVTQ19MRU5HVEgsIk15cmljb20gTWVyZ2UgQml0bWFzayBBbGwgUG9ydHMgc25mJWQiLAogCQkJYWxscG9ydHMpOwogCQkvKgogCQkgKiBYWFggLSBpcyB0aGVyZSBhbnkgbm90aW9uIG9mICJ1cCIgYW5kICJydW5uaW5nIiB0aGF0CkBAIC01NjAsNyArNTQwLDcgQEAKIAkvKiBPSywgaXQncyBwcm9iYWJseSBvdXJzLiAqLwogCSppc19vdXJzID0gMTsKIAotCXAgPSBwY2FwX2NyZWF0ZV9jb21tb24oZWJ1Ziwgc2l6ZW9mIChzdHJ1Y3QgcGNhcF9zbmYpKTsKKwlwID0gUENBUF9DUkVBVEVfQ09NTU9OKGVidWYsIHN0cnVjdCBwY2FwX3NuZik7CiAJaWYgKHAgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJcHMgPSBwLT5wcml2OwpAQCAtNTY4LDcgKzU0OCw2IEBACiAJLyoKIAkgKiBXZSBzdXBwb3J0IG1pY3Jvc2Vjb25kIGFuZCBuYW5vc2Vjb25kIHRpbWUgc3RhbXBzLgogCSAqLwotCXAtPnRzdGFtcF9wcmVjaXNpb25fY291bnQgPSAyOwogCXAtPnRzdGFtcF9wcmVjaXNpb25fbGlzdCA9IG1hbGxvYygyICogc2l6ZW9mKHVfaW50KSk7CiAJaWYgKHAtPnRzdGFtcF9wcmVjaXNpb25fbGlzdCA9PSBOVUxMKSB7CiAJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgZXJybm8sCkBAIC01NzgsNiArNTU3LDcgQEAKIAl9CiAJcC0+dHN0YW1wX3ByZWNpc2lvbl9saXN0WzBdID0gUENBUF9UU1RBTVBfUFJFQ0lTSU9OX01JQ1JPOwogCXAtPnRzdGFtcF9wcmVjaXNpb25fbGlzdFsxXSA9IFBDQVBfVFNUQU1QX1BSRUNJU0lPTl9OQU5POworCXAtPnRzdGFtcF9wcmVjaXNpb25fY291bnQgPSAyOwogCiAJcC0+YWN0aXZhdGVfb3AgPSBzbmZfYWN0aXZhdGU7CiAJcHMtPnNuZl9ib2FyZG51bSA9IGJvYXJkbnVtOwpAQCAtNjA1LDcgKzU4NSw3IEBACiBwY2FwX3QgKgogcGNhcF9jcmVhdGVfaW50ZXJmYWNlKGNvbnN0IGNoYXIgKmRldmljZSwgY2hhciAqZXJyYnVmKQogewotCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkgICAgIlRoaXMgdmVyc2lvbiBvZiBsaWJwY2FwIG9ubHkgc3VwcG9ydHMgU05GIGNhcmRzIik7CiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9wY2FwLXNuaXQuYyBiL3BjYXAtc25pdC5jCmluZGV4IDljNmZiZDQuLmNhNjIyMmMgMTAwNjQ0Ci0tLSBhL3BjYXAtc25pdC5jCisrKyBiL3BjYXAtc25pdC5jCkBAIC01Myw3ICs1Myw2IEBACiAjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KICNpbmNsdWRlIDxuZXRpbmV0L3RjcGlwLmg+CiAKLSNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTE5MCw3ICsxODksNyBAQAogCQlpZiAoY2FwbGVuID4gcC0+c25hcHNob3QpCiAJCQljYXBsZW4gPSBwLT5zbmFwc2hvdDsKIAotCQlpZiAoYnBmX2ZpbHRlcihwLT5mY29kZS5iZl9pbnNucywgY3AsIG5scC0+bmhfcGt0bGVuLCBjYXBsZW4pKSB7CisJCWlmIChwY2FwX2ZpbHRlcihwLT5mY29kZS5iZl9pbnNucywgY3AsIG5scC0+bmhfcGt0bGVuLCBjYXBsZW4pKSB7CiAJCQlzdHJ1Y3QgcGNhcF9wa3RoZHIgaDsKIAkJCWgudHMgPSBudHAtPm5oX3RpbWVzdGFtcDsKIAkJCWgubGVuID0gbmxwLT5uaF9wa3RsZW47CkBAIC0yMDgsNyArMjA3LDcgQEAKIH0KIAogc3RhdGljIGludAotcGNhcF9pbmplY3Rfc25pdChwY2FwX3QgKnAsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCitwY2FwX2luamVjdF9zbml0KHBjYXBfdCAqcCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgc2l6ZSkKIHsKIAlzdHJ1Y3Qgc3RyYnVmIGN0bCwgZGF0YTsKIApAQCAtNDYwLDcgKzQ1OSw3IEBACiB7CiAJcGNhcF90ICpwOwogCi0JcCA9IHBjYXBfY3JlYXRlX2NvbW1vbihlYnVmLCBzaXplb2YgKHN0cnVjdCBwY2FwX3NuaXQpKTsKKwlwID0gUENBUF9DUkVBVEVfQ09NTU9OKGVidWYsIHN0cnVjdCBwY2FwX3NuaXQpOwogCWlmIChwID09IE5VTEwpCiAJCXJldHVybiAoTlVMTCk7CiAKZGlmZiAtLWdpdCBhL3BjYXAtc25vb3AuYyBiL3BjYXAtc25vb3AuYwppbmRleCBhNTk4YmFlLi4yZjQ0YjFkIDEwMDY0NAotLS0gYS9wY2FwLXNub29wLmMKKysrIGIvcGNhcC1zbm9vcC5jCkBAIC0xMjYsNyArMTI2LDcgQEAKIAl9CiAKIAlpZiAocC0+ZmNvZGUuYmZfaW5zbnMgPT0gTlVMTCB8fAotCSAgICBicGZfZmlsdGVyKHAtPmZjb2RlLmJmX2luc25zLCBjcCwgZGF0YWxlbiwgY2FwbGVuKSkgeworCSAgICBwY2FwX2ZpbHRlcihwLT5mY29kZS5iZl9pbnNucywgY3AsIGRhdGFsZW4sIGNhcGxlbikpIHsKIAkJc3RydWN0IHBjYXBfcGt0aGRyIGg7CiAJCSsrcHNuLT5zdGF0LnBzX3JlY3Y7CiAJCWgudHMudHZfc2VjID0gc2gtPnNub29wX3RpbWVzdGFtcC50dl9zZWM7CkBAIC0xNDAsNyArMTQwLDcgQEAKIH0KIAogc3RhdGljIGludAotcGNhcF9pbmplY3Rfc25vb3AocGNhcF90ICpwLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplKQorcGNhcF9pbmplY3Rfc25vb3AocGNhcF90ICpwLCBjb25zdCB2b2lkICpidWYsIGludCBzaXplKQogewogCWludCByZXQ7CiAKQEAgLTMxMCw3ICszMTAsNyBAQAogCQlwLT5saW5rdHlwZSA9IERMVF9OVUxMOwogCQlsbF9oZHJsZW4gPSA0OwogCX0gZWxzZSB7Ci0JCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICAic25vb3A6IHVua25vd24gcGh5c2ljYWwgbGF5ZXIgdHlwZSIpOwogCQlnb3RvIGJhZDsKIAl9CkBAIC00MjEsNyArNDIxLDcgQEAKIHsKIAlwY2FwX3QgKnA7CiAKLQlwID0gcGNhcF9jcmVhdGVfY29tbW9uKGVidWYsIHNpemVvZiAoc3RydWN0IHBjYXBfc25vb3ApKTsKKwlwID0gUENBUF9DUkVBVEVfQ09NTU9OKGVidWYsIHN0cnVjdCBwY2FwX3Nub29wKTsKIAlpZiAocCA9PSBOVUxMKQogCQlyZXR1cm4gKE5VTEwpOwogCmRpZmYgLS1naXQgYS9wY2FwLXRjLmMgYi9wY2FwLXRjLmMKaW5kZXggMzhjNzAyNC4uOTkwMjYzMyAxMDA2NDQKLS0tIGEvcGNhcC10Yy5jCisrKyBiL3BjYXAtdGMuYwpAQCAtMTIzLDEwICsxMjMsOSBAQAogc3RhdGljIGludCBUY0dldE5vbkJsb2NrKHBjYXBfdCAqcCk7CiBzdGF0aWMgaW50IFRjU2V0Tm9uQmxvY2socGNhcF90ICpwLCBpbnQgbm9uYmxvY2spOwogc3RhdGljIHZvaWQgVGNDbGVhbnVwKHBjYXBfdCAqcCk7Ci1zdGF0aWMgaW50IFRjSW5qZWN0KHBjYXBfdCAqcCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgaW50IFRjSW5qZWN0KHBjYXBfdCAqcCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgc2l6ZSk7CiBzdGF0aWMgaW50IFRjUmVhZChwY2FwX3QgKnAsIGludCBjbnQsIHBjYXBfaGFuZGxlciBjYWxsYmFjaywgdV9jaGFyICp1c2VyKTsKIHN0YXRpYyBpbnQgVGNTdGF0cyhwY2FwX3QgKnAsIHN0cnVjdCBwY2FwX3N0YXQgKnBzKTsKLXN0YXRpYyBpbnQgVGNTZXRGaWx0ZXIocGNhcF90ICpwLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKmZwKTsKICNpZmRlZiBfV0lOMzIKIHN0YXRpYyBzdHJ1Y3QgcGNhcF9zdGF0ICpUY1N0YXRzRXgocGNhcF90ICpwLCBpbnQgKnBjYXBfc3RhdF9zaXplKTsKIHN0YXRpYyBpbnQgVGNTZXRCdWZmKHBjYXBfdCAqcCwgaW50IGRpbSk7CkBAIC0yNTMsNTggKzI1Miw2IEBACiAjcHJhZ21hIHBhY2socG9wKQogCiAjaWZkZWYgX1dJTjMyCi0vLwotLy8gVGhpcyB3cmFwcGVyIGFyb3VuZCBsb2FkbGlicmFyeSBhcHBlbmRzIHRoZSBzeXN0ZW0gZm9sZGVyICh1c3VhbGx5IGM6XHdpbmRvd3Ncc3lzdGVtMzIpCi0vLyB0byB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgRExMLCBzbyB0aGF0IHRoZSBETEwgaXMgYWx3YXlzIGxvYWRlZCBmcm9tIGFuIGFic29sdXRlIHBhdGgKLS8vIChJdCdzIG5vIGxvbmdlciBwb3NzaWJsZSB0byBsb2FkIGFpcnBjYXAuZGxsIGZyb20gdGhlIGFwcGxpY2F0aW9uIGZvbGRlcikuCi0vLyBUaGlzIHNvbHZlcyB0aGUgRExMIEhpamFja2luZyBpc3N1ZSBkaXNjb3ZlcmVkIGluIEF1Z3VzdCAyMDEwCi0vLyBodHRwOi8vYmxvZy5tZXRhc3Bsb2l0LmNvbS8yMDEwLzA4L2V4cGxvaXRpbmctZGxsLWhpamFja2luZy1mbGF3cy5odG1sCi0vLwotSE1PRFVMRSBMb2FkTGlicmFyeVNhZmUoTFBDVFNUUiBscEZpbGVOYW1lKQotewotICBUQ0hBUiBwYXRoW01BWF9QQVRIXTsKLSAgVENIQVIgZnVsbEZpbGVOYW1lW01BWF9QQVRIXTsKLSAgVUlOVCByZXM7Ci0gIEhNT0RVTEUgaE1vZHVsZSA9IE5VTEw7Ci0gIGRvCi0gIHsKLQlyZXMgPSBHZXRTeXN0ZW1EaXJlY3RvcnkocGF0aCwgTUFYX1BBVEgpOwotCi0JaWYgKHJlcyA9PSAwKQotCXsKLQkJLy8KLQkJLy8gc29tZSBiYWQgZmFpbHVyZSBvY2N1cnJlZDsKLQkJLy8KLQkJYnJlYWs7Ci0JfQotCi0JaWYgKHJlcyA+IE1BWF9QQVRIKQotCXsKLQkJLy8KLQkJLy8gdGhlIGJ1ZmZlciB3YXMgbm90IGJpZyBlbm91Z2gKLQkJLy8KLQkJU2V0TGFzdEVycm9yKEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVIpOwotCQlicmVhazsKLQl9Ci0KLQlpZiAocmVzICsgMSArIF90Y3NsZW4obHBGaWxlTmFtZSkgKyAxIDwgTUFYX1BBVEgpCi0JewotCQltZW1jcHkoZnVsbEZpbGVOYW1lLCBwYXRoLCByZXMgKiBzaXplb2YoVENIQVIpKTsKLQkJZnVsbEZpbGVOYW1lW3Jlc10gPSBfVCgnXFwnKTsKLQkJbWVtY3B5KCZmdWxsRmlsZU5hbWVbcmVzICsgMV0sIGxwRmlsZU5hbWUsIChfdGNzbGVuKGxwRmlsZU5hbWUpICsgMSkgKiBzaXplb2YoVENIQVIpKTsKLQotCQloTW9kdWxlID0gTG9hZExpYnJhcnkoZnVsbEZpbGVOYW1lKTsKLQl9Ci0JZWxzZQotCXsKLQkJU2V0TGFzdEVycm9yKEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVIpOwotCX0KLQotICB9d2hpbGUoRkFMU0UpOwotCi0gIHJldHVybiBoTW9kdWxlOwotfQotCiAvKgogICogTk9URTogdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJ5IHRoZSBwY2FwIGZ1bmN0aW9ucyB0aGF0IGNhbiB0aGVvcmV0aWNhbGx5CiAgKiAgICAgICBkZWFsIHdpdGggdGhlIFRjIGxpYnJhcnkgZm9yIHRoZSBmaXJzdCB0aW1lLCBuYW1lbHkgbGlzdGluZyB0aGUgYWRhcHRlcnMgYW5kCkBAIC0zNDEsMzQgKzI4OCwzNCBAQAogCiAJCWN1cnJlbnRTdGF0dXMgPSBUQ19BUElfQ0FOTk9UX0xPQUQ7CiAKLQkJZ19UY0Z1bmN0aW9ucy5oVGNBcGlEbGxIYW5kbGUgPSBMb2FkTGlicmFyeVNhZmUoIlRjQXBpLmRsbCIpOworCQlnX1RjRnVuY3Rpb25zLmhUY0FwaURsbEhhbmRsZSA9IHBjYXBfbG9hZF9jb2RlKCJUY0FwaS5kbGwiKTsKIAkJaWYgKGdfVGNGdW5jdGlvbnMuaFRjQXBpRGxsSGFuZGxlID09IE5VTEwpCWJyZWFrOwogCi0JCWdfVGNGdW5jdGlvbnMuUXVlcnlQb3J0TGlzdAkJCQkJPSAoVGNGY25RdWVyeVBvcnRMaXN0KQkJCUdldFByb2NBZGRyZXNzKGdfVGNGdW5jdGlvbnMuaFRjQXBpRGxsSGFuZGxlLCAiVGNRdWVyeVBvcnRMaXN0Iik7Ci0JCWdfVGNGdW5jdGlvbnMuRnJlZVBvcnRMaXN0CQkJCQk9IChUY0ZjbkZyZWVQb3J0TGlzdCkJCQlHZXRQcm9jQWRkcmVzcyhnX1RjRnVuY3Rpb25zLmhUY0FwaURsbEhhbmRsZSwgIlRjRnJlZVBvcnRMaXN0Iik7CisJCWdfVGNGdW5jdGlvbnMuUXVlcnlQb3J0TGlzdAkJCT0gKFRjRmNuUXVlcnlQb3J0TGlzdCkJCQlwY2FwX2ZpbmRfZnVuY3Rpb24oZ19UY0Z1bmN0aW9ucy5oVGNBcGlEbGxIYW5kbGUsICJUY1F1ZXJ5UG9ydExpc3QiKTsKKwkJZ19UY0Z1bmN0aW9ucy5GcmVlUG9ydExpc3QJCQk9IChUY0ZjbkZyZWVQb3J0TGlzdCkJCQlwY2FwX2ZpbmRfZnVuY3Rpb24oZ19UY0Z1bmN0aW9ucy5oVGNBcGlEbGxIYW5kbGUsICJUY0ZyZWVQb3J0TGlzdCIpOwogCi0JCWdfVGNGdW5jdGlvbnMuU3RhdHVzR2V0U3RyaW5nCQkJCT0gKFRjRmNuU3RhdHVzR2V0U3RyaW5nKQkJR2V0UHJvY0FkZHJlc3MoZ19UY0Z1bmN0aW9ucy5oVGNBcGlEbGxIYW5kbGUsICJUY1N0YXR1c0dldFN0cmluZyIpOworCQlnX1RjRnVuY3Rpb25zLlN0YXR1c0dldFN0cmluZwkJCT0gKFRjRmNuU3RhdHVzR2V0U3RyaW5nKQkJcGNhcF9maW5kX2Z1bmN0aW9uKGdfVGNGdW5jdGlvbnMuaFRjQXBpRGxsSGFuZGxlLCAiVGNTdGF0dXNHZXRTdHJpbmciKTsKIAotCQlnX1RjRnVuY3Rpb25zLlBvcnRHZXROYW1lCQkJCQk9IChUY0ZjblBvcnRHZXROYW1lKQkJCUdldFByb2NBZGRyZXNzKGdfVGNGdW5jdGlvbnMuaFRjQXBpRGxsSGFuZGxlLCAiVGNQb3J0R2V0TmFtZSIpOwotCQlnX1RjRnVuY3Rpb25zLlBvcnRHZXREZXNjcmlwdGlvbgkJCT0gKFRjRmNuUG9ydEdldERlc2NyaXB0aW9uKQkJR2V0UHJvY0FkZHJlc3MoZ19UY0Z1bmN0aW9ucy5oVGNBcGlEbGxIYW5kbGUsICJUY1BvcnRHZXREZXNjcmlwdGlvbiIpOworCQlnX1RjRnVuY3Rpb25zLlBvcnRHZXROYW1lCQkJPSAoVGNGY25Qb3J0R2V0TmFtZSkJCQlwY2FwX2ZpbmRfZnVuY3Rpb24oZ19UY0Z1bmN0aW9ucy5oVGNBcGlEbGxIYW5kbGUsICJUY1BvcnRHZXROYW1lIik7CisJCWdfVGNGdW5jdGlvbnMuUG9ydEdldERlc2NyaXB0aW9uCQk9IChUY0ZjblBvcnRHZXREZXNjcmlwdGlvbikJCXBjYXBfZmluZF9mdW5jdGlvbihnX1RjRnVuY3Rpb25zLmhUY0FwaURsbEhhbmRsZSwgIlRjUG9ydEdldERlc2NyaXB0aW9uIik7CiAKLQkJZ19UY0Z1bmN0aW9ucy5JbnN0YW5jZU9wZW5CeU5hbWUJCQk9IChUY0Zjbkluc3RhbmNlT3BlbkJ5TmFtZSkJCUdldFByb2NBZGRyZXNzKGdfVGNGdW5jdGlvbnMuaFRjQXBpRGxsSGFuZGxlLCAiVGNJbnN0YW5jZU9wZW5CeU5hbWUiKTsKLQkJZ19UY0Z1bmN0aW9ucy5JbnN0YW5jZUNsb3NlCQkJCQk9IChUY0Zjbkluc3RhbmNlQ2xvc2UpCQkJR2V0UHJvY0FkZHJlc3MoZ19UY0Z1bmN0aW9ucy5oVGNBcGlEbGxIYW5kbGUsICJUY0luc3RhbmNlQ2xvc2UiKTsKLQkJZ19UY0Z1bmN0aW9ucy5JbnN0YW5jZVNldEZlYXR1cmUJCQk9IChUY0Zjbkluc3RhbmNlU2V0RmVhdHVyZSkJCUdldFByb2NBZGRyZXNzKGdfVGNGdW5jdGlvbnMuaFRjQXBpRGxsSGFuZGxlLCAiVGNJbnN0YW5jZVNldEZlYXR1cmUiKTsKLQkJZ19UY0Z1bmN0aW9ucy5JbnN0YW5jZVF1ZXJ5RmVhdHVyZQkJCT0gKFRjRmNuSW5zdGFuY2VRdWVyeUZlYXR1cmUpCUdldFByb2NBZGRyZXNzKGdfVGNGdW5jdGlvbnMuaFRjQXBpRGxsSGFuZGxlLCAiVGNJbnN0YW5jZVF1ZXJ5RmVhdHVyZSIpOwotCQlnX1RjRnVuY3Rpb25zLkluc3RhbmNlUmVjZWl2ZVBhY2tldHMJCT0gKFRjRmNuSW5zdGFuY2VSZWNlaXZlUGFja2V0cykJR2V0UHJvY0FkZHJlc3MoZ19UY0Z1bmN0aW9ucy5oVGNBcGlEbGxIYW5kbGUsICJUY0luc3RhbmNlUmVjZWl2ZVBhY2tldHMiKTsKLQkJZ19UY0Z1bmN0aW9ucy5JbnN0YW5jZUdldFJlY2VpdmVXYWl0SGFuZGxlCT0gKFRjRmNuSW5zdGFuY2VHZXRSZWNlaXZlV2FpdEhhbmRsZSlHZXRQcm9jQWRkcmVzcyhnX1RjRnVuY3Rpb25zLmhUY0FwaURsbEhhbmRsZSwgIlRjSW5zdGFuY2VHZXRSZWNlaXZlV2FpdEhhbmRsZSIpOwotCQlnX1RjRnVuY3Rpb25zLkluc3RhbmNlVHJhbnNtaXRQYWNrZXRzCQk9IChUY0Zjbkluc3RhbmNlVHJhbnNtaXRQYWNrZXRzKUdldFByb2NBZGRyZXNzKGdfVGNGdW5jdGlvbnMuaFRjQXBpRGxsSGFuZGxlLCAiVGNJbnN0YW5jZVRyYW5zbWl0UGFja2V0cyIpOwotCQlnX1RjRnVuY3Rpb25zLkluc3RhbmNlUXVlcnlTdGF0aXN0aWNzCQk9IChUY0Zjbkluc3RhbmNlUXVlcnlTdGF0aXN0aWNzKUdldFByb2NBZGRyZXNzKGdfVGNGdW5jdGlvbnMuaFRjQXBpRGxsSGFuZGxlLCAiVGNJbnN0YW5jZVF1ZXJ5U3RhdGlzdGljcyIpOworCQlnX1RjRnVuY3Rpb25zLkluc3RhbmNlT3BlbkJ5TmFtZQkJPSAoVGNGY25JbnN0YW5jZU9wZW5CeU5hbWUpCQlwY2FwX2ZpbmRfZnVuY3Rpb24oZ19UY0Z1bmN0aW9ucy5oVGNBcGlEbGxIYW5kbGUsICJUY0luc3RhbmNlT3BlbkJ5TmFtZSIpOworCQlnX1RjRnVuY3Rpb25zLkluc3RhbmNlQ2xvc2UJCQk9IChUY0Zjbkluc3RhbmNlQ2xvc2UpCQkJcGNhcF9maW5kX2Z1bmN0aW9uKGdfVGNGdW5jdGlvbnMuaFRjQXBpRGxsSGFuZGxlLCAiVGNJbnN0YW5jZUNsb3NlIik7CisJCWdfVGNGdW5jdGlvbnMuSW5zdGFuY2VTZXRGZWF0dXJlCQk9IChUY0Zjbkluc3RhbmNlU2V0RmVhdHVyZSkJCXBjYXBfZmluZF9mdW5jdGlvbihnX1RjRnVuY3Rpb25zLmhUY0FwaURsbEhhbmRsZSwgIlRjSW5zdGFuY2VTZXRGZWF0dXJlIik7CisJCWdfVGNGdW5jdGlvbnMuSW5zdGFuY2VRdWVyeUZlYXR1cmUJCT0gKFRjRmNuSW5zdGFuY2VRdWVyeUZlYXR1cmUpCXBjYXBfZmluZF9mdW5jdGlvbihnX1RjRnVuY3Rpb25zLmhUY0FwaURsbEhhbmRsZSwgIlRjSW5zdGFuY2VRdWVyeUZlYXR1cmUiKTsKKwkJZ19UY0Z1bmN0aW9ucy5JbnN0YW5jZVJlY2VpdmVQYWNrZXRzCQk9IChUY0Zjbkluc3RhbmNlUmVjZWl2ZVBhY2tldHMpCXBjYXBfZmluZF9mdW5jdGlvbihnX1RjRnVuY3Rpb25zLmhUY0FwaURsbEhhbmRsZSwgIlRjSW5zdGFuY2VSZWNlaXZlUGFja2V0cyIpOworCQlnX1RjRnVuY3Rpb25zLkluc3RhbmNlR2V0UmVjZWl2ZVdhaXRIYW5kbGUJPSAoVGNGY25JbnN0YW5jZUdldFJlY2VpdmVXYWl0SGFuZGxlKXBjYXBfZmluZF9mdW5jdGlvbihnX1RjRnVuY3Rpb25zLmhUY0FwaURsbEhhbmRsZSwgIlRjSW5zdGFuY2VHZXRSZWNlaXZlV2FpdEhhbmRsZSIpOworCQlnX1RjRnVuY3Rpb25zLkluc3RhbmNlVHJhbnNtaXRQYWNrZXRzCQk9IChUY0Zjbkluc3RhbmNlVHJhbnNtaXRQYWNrZXRzKXBjYXBfZmluZF9mdW5jdGlvbihnX1RjRnVuY3Rpb25zLmhUY0FwaURsbEhhbmRsZSwgIlRjSW5zdGFuY2VUcmFuc21pdFBhY2tldHMiKTsKKwkJZ19UY0Z1bmN0aW9ucy5JbnN0YW5jZVF1ZXJ5U3RhdGlzdGljcwkJPSAoVGNGY25JbnN0YW5jZVF1ZXJ5U3RhdGlzdGljcylwY2FwX2ZpbmRfZnVuY3Rpb24oZ19UY0Z1bmN0aW9ucy5oVGNBcGlEbGxIYW5kbGUsICJUY0luc3RhbmNlUXVlcnlTdGF0aXN0aWNzIik7CiAKLQkJZ19UY0Z1bmN0aW9ucy5QYWNrZXRzQnVmZmVyQ3JlYXRlCQkJPSAoVGNGY25QYWNrZXRzQnVmZmVyQ3JlYXRlKQlHZXRQcm9jQWRkcmVzcyhnX1RjRnVuY3Rpb25zLmhUY0FwaURsbEhhbmRsZSwgIlRjUGFja2V0c0J1ZmZlckNyZWF0ZSIpOwotCQlnX1RjRnVuY3Rpb25zLlBhY2tldHNCdWZmZXJEZXN0cm95CQkJPSAoVGNGY25QYWNrZXRzQnVmZmVyRGVzdHJveSkJR2V0UHJvY0FkZHJlc3MoZ19UY0Z1bmN0aW9ucy5oVGNBcGlEbGxIYW5kbGUsICJUY1BhY2tldHNCdWZmZXJEZXN0cm95Iik7Ci0JCWdfVGNGdW5jdGlvbnMuUGFja2V0c0J1ZmZlclF1ZXJ5TmV4dFBhY2tldAk9IChUY0ZjblBhY2tldHNCdWZmZXJRdWVyeU5leHRQYWNrZXQpR2V0UHJvY0FkZHJlc3MoZ19UY0Z1bmN0aW9ucy5oVGNBcGlEbGxIYW5kbGUsICJUY1BhY2tldHNCdWZmZXJRdWVyeU5leHRQYWNrZXQiKTsKLQkJZ19UY0Z1bmN0aW9ucy5QYWNrZXRzQnVmZmVyQ29tbWl0TmV4dFBhY2tldAk9IChUY0ZjblBhY2tldHNCdWZmZXJDb21taXROZXh0UGFja2V0KUdldFByb2NBZGRyZXNzKGdfVGNGdW5jdGlvbnMuaFRjQXBpRGxsSGFuZGxlLCAiVGNQYWNrZXRzQnVmZmVyQ29tbWl0TmV4dFBhY2tldCIpOworCQlnX1RjRnVuY3Rpb25zLlBhY2tldHNCdWZmZXJDcmVhdGUJCT0gKFRjRmNuUGFja2V0c0J1ZmZlckNyZWF0ZSkJcGNhcF9maW5kX2Z1bmN0aW9uKGdfVGNGdW5jdGlvbnMuaFRjQXBpRGxsSGFuZGxlLCAiVGNQYWNrZXRzQnVmZmVyQ3JlYXRlIik7CisJCWdfVGNGdW5jdGlvbnMuUGFja2V0c0J1ZmZlckRlc3Ryb3kJCT0gKFRjRmNuUGFja2V0c0J1ZmZlckRlc3Ryb3kpCXBjYXBfZmluZF9mdW5jdGlvbihnX1RjRnVuY3Rpb25zLmhUY0FwaURsbEhhbmRsZSwgIlRjUGFja2V0c0J1ZmZlckRlc3Ryb3kiKTsKKwkJZ19UY0Z1bmN0aW9ucy5QYWNrZXRzQnVmZmVyUXVlcnlOZXh0UGFja2V0CT0gKFRjRmNuUGFja2V0c0J1ZmZlclF1ZXJ5TmV4dFBhY2tldClwY2FwX2ZpbmRfZnVuY3Rpb24oZ19UY0Z1bmN0aW9ucy5oVGNBcGlEbGxIYW5kbGUsICJUY1BhY2tldHNCdWZmZXJRdWVyeU5leHRQYWNrZXQiKTsKKwkJZ19UY0Z1bmN0aW9ucy5QYWNrZXRzQnVmZmVyQ29tbWl0TmV4dFBhY2tldAk9IChUY0ZjblBhY2tldHNCdWZmZXJDb21taXROZXh0UGFja2V0KXBjYXBfZmluZF9mdW5jdGlvbihnX1RjRnVuY3Rpb25zLmhUY0FwaURsbEhhbmRsZSwgIlRjUGFja2V0c0J1ZmZlckNvbW1pdE5leHRQYWNrZXQiKTsKIAotCQlnX1RjRnVuY3Rpb25zLlN0YXRpc3RpY3NEZXN0cm95CQkJCT0gKFRjRmNuU3RhdGlzdGljc0Rlc3Ryb3kpCQlHZXRQcm9jQWRkcmVzcyhnX1RjRnVuY3Rpb25zLmhUY0FwaURsbEhhbmRsZSwgIlRjU3RhdGlzdGljc0Rlc3Ryb3kiKTsKLQkJZ19UY0Z1bmN0aW9ucy5TdGF0aXN0aWNzVXBkYXRlCQkJCT0gKFRjRmNuU3RhdGlzdGljc1VwZGF0ZSkJCUdldFByb2NBZGRyZXNzKGdfVGNGdW5jdGlvbnMuaFRjQXBpRGxsSGFuZGxlLCAiVGNTdGF0aXN0aWNzVXBkYXRlIik7Ci0JCWdfVGNGdW5jdGlvbnMuU3RhdGlzdGljc1F1ZXJ5VmFsdWUJCQk9IChUY0ZjblN0YXRpc3RpY3NRdWVyeVZhbHVlKQlHZXRQcm9jQWRkcmVzcyhnX1RjRnVuY3Rpb25zLmhUY0FwaURsbEhhbmRsZSwgIlRjU3RhdGlzdGljc1F1ZXJ5VmFsdWUiKTsKKwkJZ19UY0Z1bmN0aW9ucy5TdGF0aXN0aWNzRGVzdHJveQkJCT0gKFRjRmNuU3RhdGlzdGljc0Rlc3Ryb3kpCQlwY2FwX2ZpbmRfZnVuY3Rpb24oZ19UY0Z1bmN0aW9ucy5oVGNBcGlEbGxIYW5kbGUsICJUY1N0YXRpc3RpY3NEZXN0cm95Iik7CisJCWdfVGNGdW5jdGlvbnMuU3RhdGlzdGljc1VwZGF0ZQkJCT0gKFRjRmNuU3RhdGlzdGljc1VwZGF0ZSkJCXBjYXBfZmluZF9mdW5jdGlvbihnX1RjRnVuY3Rpb25zLmhUY0FwaURsbEhhbmRsZSwgIlRjU3RhdGlzdGljc1VwZGF0ZSIpOworCQlnX1RjRnVuY3Rpb25zLlN0YXRpc3RpY3NRdWVyeVZhbHVlCQk9IChUY0ZjblN0YXRpc3RpY3NRdWVyeVZhbHVlKQlwY2FwX2ZpbmRfZnVuY3Rpb24oZ19UY0Z1bmN0aW9ucy5oVGNBcGlEbGxIYW5kbGUsICJUY1N0YXRpc3RpY3NRdWVyeVZhbHVlIik7CiAKIAkJaWYgKCAgIGdfVGNGdW5jdGlvbnMuUXVlcnlQb3J0TGlzdCA9PSBOVUxMCiAJCQl8fCBnX1RjRnVuY3Rpb25zLkZyZWVQb3J0TGlzdCA9PSBOVUxMCkBAIC00NDAsNyArMzg3LDcgQEAKIAlQVENfUE9SVCBwUG9ydHMgPSBOVUxMOwogCVRDX1NUQVRVUyBzdGF0dXM7CiAJaW50IHJlc3VsdCA9IDA7Ci0JcGNhcF9pZl90ICpkZXYsICpjdXJzb3I7CisJcGNhcF9pZl90ICpkZXY7CiAJVUxPTkcgaTsKIAogCWRvCkBAIC00NzIsMjIgKzQxOSw3IEBACiAJCQlkZXYgPSBUY0NyZWF0ZVBjYXBJZkZyb21Qb3J0KHBQb3J0c1tpXSk7CiAKIAkJCWlmIChkZXYgIT0gTlVMTCkKLQkJCXsKLQkJCQkvKgotCQkJCSAqIGFwcGVuZCBpdCBhdCB0aGUgZW5kCi0JCQkJICovCi0JCQkJaWYgKGRldmxpc3RwLT5iZWdpbm5pbmcgPT0gTlVMTCkKLQkJCQl7Ci0JCQkJCWRldmxpc3RwLT5iZWdpbm5pbmcgPSBkZXY7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCWZvciAoY3Vyc29yID0gZGV2bGlzdHAtPmJlZ2lubmluZzsKLQkJCQkJICAgIGN1cnNvci0+bmV4dCAhPSBOVUxMOwotCQkJCQkgICAgY3Vyc29yID0gY3Vyc29yLT5uZXh0KTsKLQkJCQkJY3Vyc29yLT5uZXh0ID0gZGV2OwotCQkJCX0KLQkJCX0KKwkJCQlhZGRfZGV2KGRldmxpc3QsIGRldi0+bmFtZSwgZGV2LT5mbGFncywgZGV2LT5kZXNjcmlwdGlvbiwgZXJyYnVmKTsKIAkJfQogCiAJCWlmIChudW1Qb3J0cyA+IDApCkBAIC01NjcsNyArNDk5LDcgQEAKIAogCWlmIChwdC0+UHBpUGFja2V0ID09IE5VTEwpCiAJewotCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIkVycm9yIGFsbG9jYXRpbmcgbWVtb3J5Iik7CisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIkVycm9yIGFsbG9jYXRpbmcgbWVtb3J5Iik7CiAJCXJldHVybiBQQ0FQX0VSUk9SOwogCX0KIApAQCAtNjAyLDcgKzUzNCw3IEBACiAJaWYgKHN0YXR1cyAhPSBUQ19TVUNDRVNTKQogCXsKIAkJLyogQWRhcHRlciBkZXRlY3RlZCBidXQgd2UgYXJlIG5vdCBhYmxlIHRvIG9wZW4gaXQuIFJldHVybiBmYWlsdXJlLiAqLwotCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIkVycm9yIG9wZW5pbmcgVHVyYm9DYXAgYWRhcHRlcjogJXMiLCBnX1RjRnVuY3Rpb25zLlN0YXR1c0dldFN0cmluZyhzdGF0dXMpKTsKKwkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiRXJyb3Igb3BlbmluZyBUdXJib0NhcCBhZGFwdGVyOiAlcyIsIGdfVGNGdW5jdGlvbnMuU3RhdHVzR2V0U3RyaW5nKHN0YXR1cykpOwogCQlyZXR1cm4gUENBUF9FUlJPUjsKIAl9CiAKQEAgLTYzNCw3ICs1NjYsNyBAQAogCiAJaWYgKHN0YXR1cyAhPSBUQ19TVUNDRVNTKQogCXsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsIkVycm9yIGVuYWJsaW5nIHJlY2VwdGlvbiBvbiBhIFR1cmJvQ2FwIGluc3RhbmNlOiAlcyIsIGdfVGNGdW5jdGlvbnMuU3RhdHVzR2V0U3RyaW5nKHN0YXR1cykpOworCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsIkVycm9yIGVuYWJsaW5nIHJlY2VwdGlvbiBvbiBhIFR1cmJvQ2FwIGluc3RhbmNlOiAlcyIsIGdfVGNGdW5jdGlvbnMuU3RhdHVzR2V0U3RyaW5nKHN0YXR1cykpOwogCQlnb3RvIGJhZDsKIAl9CiAKQEAgLTY3MywxMiArNjA1LDEyIEBACiAKIAlpZiAoc3RhdHVzICE9IFRDX1NVQ0NFU1MpCiAJewotCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwiRXJyb3Igc2V0dGluZyB0aGUgcmVhZCB0aW1lb3V0IGEgVHVyYm9DYXAgaW5zdGFuY2U6ICVzIiwgZ19UY0Z1bmN0aW9ucy5TdGF0dXNHZXRTdHJpbmcoc3RhdHVzKSk7CisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwiRXJyb3Igc2V0dGluZyB0aGUgcmVhZCB0aW1lb3V0IGEgVHVyYm9DYXAgaW5zdGFuY2U6ICVzIiwgZ19UY0Z1bmN0aW9ucy5TdGF0dXNHZXRTdHJpbmcoc3RhdHVzKSk7CiAJCWdvdG8gYmFkOwogCX0KIAogCXAtPnJlYWRfb3AgPSBUY1JlYWQ7Ci0JcC0+c2V0ZmlsdGVyX29wID0gVGNTZXRGaWx0ZXI7CisJcC0+c2V0ZmlsdGVyX29wID0gaW5zdGFsbF9icGZfcHJvZ3JhbTsKIAlwLT5zZXRkaXJlY3Rpb25fb3AgPSBOVUxMOwkvKiBOb3QgaW1wbGVtZW50ZWQuICovCiAJcC0+c2V0X2RhdGFsaW5rX29wID0gVGNTZXREYXRhbGluazsKIAlwLT5nZXRub25ibG9ja19vcCA9IFRjR2V0Tm9uQmxvY2s7CkBAIC03NzEsNyArNzAzLDcgQEAKIAkvKiBPSywgaXQncyBwcm9iYWJseSBvdXJzLiAqLwogCSppc19vdXJzID0gMTsKIAotCXAgPSBwY2FwX2NyZWF0ZV9jb21tb24oZWJ1Ziwgc2l6ZW9mIChzdHJ1Y3QgcGNhcF90YykpOworCXAgPSBQQ0FQX0NSRUFURV9DT01NT04oZWJ1Ziwgc3RydWN0IHBjYXBfdGMpOwogCWlmIChwID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCkBAIC04MDYsMTQgKzczOCwxNCBAQAogCiBzdGF0aWMgaW50IFRjR2V0Tm9uQmxvY2socGNhcF90ICpwKQogewotCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkgICAgIk5vbi1ibG9ja2luZyBtb2RlIGlzbid0IHN1cHBvcnRlZCBmb3IgVHVyYm9DYXAgcG9ydHMiKTsKIAlyZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyBpbnQgVGNTZXROb25CbG9jayhwY2FwX3QgKnAsIGludCBub25ibG9jaykKIHsKLQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJICAgICJOb24tYmxvY2tpbmcgbW9kZSBpc24ndCBzdXBwb3J0ZWQgZm9yIFR1cmJvQ2FwIHBvcnRzIik7CiAJcmV0dXJuIC0xOwogfQpAQCAtODQ2LDcgKzc3OCw3IEBACiB9CiAKIC8qIFNlbmQgYSBwYWNrZXQgdG8gdGhlIG5ldHdvcmsgKi8KLXN0YXRpYyBpbnQgVGNJbmplY3QocGNhcF90ICpwLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplKQorc3RhdGljIGludCBUY0luamVjdChwY2FwX3QgKnAsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IHNpemUpCiB7CiAJc3RydWN0IHBjYXBfdGMgKnB0ID0gcC0+cHJpdjsKIAlUQ19TVEFUVVMgc3RhdHVzOwpAQCAtODU1LDcgKzc4Nyw3IEBACiAKIAlpZiAoc2l6ZSA+PSAweEZGRkYpCiAJewotCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgInNlbmQgZXJyb3I6IHRoZSBUdXJib0NhcCBBUEkgZG9lcyBub3Qgc3VwcG9ydCBwYWNrZXRzIGxhcmdlciB0aGFuIDY0ayIpOworCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJzZW5kIGVycm9yOiB0aGUgVHVyYm9DYXAgQVBJIGRvZXMgbm90IHN1cHBvcnQgcGFja2V0cyBsYXJnZXIgdGhhbiA2NGsiKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtODYzLDcgKzc5NSw3IEBACiAKIAlpZiAoc3RhdHVzICE9IFRDX1NVQ0NFU1MpCiAJewotCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgInNlbmQgZXJyb3I6IFRjUGFja2V0c0J1ZmZlckNyZWF0ZSBmYWlsdXJlOiAlcyAoJTA4eCkiLCBnX1RjRnVuY3Rpb25zLlN0YXR1c0dldFN0cmluZyhzdGF0dXMpLCBzdGF0dXMpOworCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJzZW5kIGVycm9yOiBUY1BhY2tldHNCdWZmZXJDcmVhdGUgZmFpbHVyZTogJXMgKCUwOHgpIiwgZ19UY0Z1bmN0aW9ucy5TdGF0dXNHZXRTdHJpbmcoc3RhdHVzKSwgc3RhdHVzKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtODgzLDEyICs4MTUsMTIgQEAKIAogCQlpZiAoc3RhdHVzICE9IFRDX1NVQ0NFU1MpCiAJCXsKLQkJCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAic2VuZCBlcnJvcjogVGNJbnN0YW5jZVRyYW5zbWl0UGFja2V0cyBmYWlsdXJlOiAlcyAoJTA4eCkiLCBnX1RjRnVuY3Rpb25zLlN0YXR1c0dldFN0cmluZyhzdGF0dXMpLCBzdGF0dXMpOworCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAic2VuZCBlcnJvcjogVGNJbnN0YW5jZVRyYW5zbWl0UGFja2V0cyBmYWlsdXJlOiAlcyAoJTA4eCkiLCBnX1RjRnVuY3Rpb25zLlN0YXR1c0dldFN0cmluZyhzdGF0dXMpLCBzdGF0dXMpOwogCQl9CiAJfQogCWVsc2UKIAl7Ci0JCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAic2VuZCBlcnJvcjogVGNQYWNrZXRzQnVmZmVyQ29tbWl0TmV4dFBhY2tldCBmYWlsdXJlOiAlcyAoJTA4eCkiLCBnX1RjRnVuY3Rpb25zLlN0YXR1c0dldFN0cmluZyhzdGF0dXMpLCBzdGF0dXMpOworCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJzZW5kIGVycm9yOiBUY1BhY2tldHNCdWZmZXJDb21taXROZXh0UGFja2V0IGZhaWx1cmU6ICVzICglMDh4KSIsIGdfVGNGdW5jdGlvbnMuU3RhdHVzR2V0U3RyaW5nKHN0YXR1cyksIHN0YXR1cyk7CiAJfQogCiAJZ19UY0Z1bmN0aW9ucy5QYWNrZXRzQnVmZmVyRGVzdHJveShidWZmZXIpOwpAQCAtOTI4LDcgKzg2MCw3IEBACiAJCXN0YXR1cyA9IGdfVGNGdW5jdGlvbnMuSW5zdGFuY2VSZWNlaXZlUGFja2V0cyhwdC0+VGNJbnN0YW5jZSwgJnB0LT5UY1BhY2tldHNCdWZmZXIpOwogCQlpZiAoc3RhdHVzICE9IFRDX1NVQ0NFU1MpCiAJCXsKLQkJCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAicmVhZCBlcnJvciwgVGNJbnN0YW5jZVJlY2VpdmVQYWNrZXRzIGZhaWx1cmU6ICVzICglMDh4KSIsIGdfVGNGdW5jdGlvbnMuU3RhdHVzR2V0U3RyaW5nKHN0YXR1cyksIHN0YXR1cyk7CisJCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJyZWFkIGVycm9yLCBUY0luc3RhbmNlUmVjZWl2ZVBhY2tldHMgZmFpbHVyZTogJXMgKCUwOHgpIiwgZ19UY0Z1bmN0aW9ucy5TdGF0dXNHZXRTdHJpbmcoc3RhdHVzKSwgc3RhdHVzKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCX0KQEAgLTk3OCwxNCArOTEwLDE0IEBACiAKIAkJaWYgKHN0YXR1cyAhPSBUQ19TVUNDRVNTKQogCQl7Ci0JCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgInJlYWQgZXJyb3IsIFRjUGFja2V0c0J1ZmZlclF1ZXJ5TmV4dFBhY2tldCBmYWlsdXJlOiAlcyAoJTA4eCkiLCBnX1RjRnVuY3Rpb25zLlN0YXR1c0dldFN0cmluZyhzdGF0dXMpLCBzdGF0dXMpOworCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAicmVhZCBlcnJvciwgVGNQYWNrZXRzQnVmZmVyUXVlcnlOZXh0UGFja2V0IGZhaWx1cmU6ICVzICglMDh4KSIsIGdfVGNGdW5jdGlvbnMuU3RhdHVzR2V0U3RyaW5nKHN0YXR1cyksIHN0YXR1cyk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAogCQkvKiBObyB1bmRlcmxheWluZyBmaWx0ZXJpbmcgc3lzdGVtLiBXZSBuZWVkIHRvIGZpbHRlciBvbiBvdXIgb3duICovCiAJCWlmIChwLT5mY29kZS5iZl9pbnNucykKIAkJewotCQkJZmlsdGVyUmVzdWx0ID0gYnBmX2ZpbHRlcihwLT5mY29kZS5iZl9pbnNucywgZGF0YSwgdGNIZWFkZXIuTGVuZ3RoLCB0Y0hlYWRlci5DYXB0dXJlZExlbmd0aCk7CisJCQlmaWx0ZXJSZXN1bHQgPSBwY2FwX2ZpbHRlcihwLT5mY29kZS5iZl9pbnNucywgZGF0YSwgdGNIZWFkZXIuTGVuZ3RoLCB0Y0hlYWRlci5DYXB0dXJlZExlbmd0aCk7CiAKIAkJCWlmIChmaWx0ZXJSZXN1bHQgPT0gMCkKIAkJCXsKQEAgLTEwNjgsNyArMTAwMCw3IEBACiAKIAlpZiAoc3RhdHVzICE9IFRDX1NVQ0NFU1MpCiAJewotCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlR1cmJvQ2FwIGVycm9yIGluIFRjSW5zdGFuY2VRdWVyeVN0YXRpc3RpY3M6ICVzICglMDh4KSIsIGdfVGNGdW5jdGlvbnMuU3RhdHVzR2V0U3RyaW5nKHN0YXR1cyksIHN0YXR1cyk7CisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlR1cmJvQ2FwIGVycm9yIGluIFRjSW5zdGFuY2VRdWVyeVN0YXRpc3RpY3M6ICVzICglMDh4KSIsIGdfVGNGdW5jdGlvbnMuU3RhdHVzR2V0U3RyaW5nKHN0YXR1cyksIHN0YXR1cyk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTEwNzcsNyArMTAwOSw3IEBACiAJc3RhdHVzID0gZ19UY0Z1bmN0aW9ucy5TdGF0aXN0aWNzUXVlcnlWYWx1ZShzdGF0aXN0aWNzLCBUQ19DT1VOVEVSX0lOU1RBTkNFX1RPVEFMX1JYX1BBQ0tFVFMsICZjb3VudGVyKTsKIAlpZiAoc3RhdHVzICE9IFRDX1NVQ0NFU1MpCiAJewotCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlR1cmJvQ2FwIGVycm9yIGluIFRjU3RhdGlzdGljc1F1ZXJ5VmFsdWU6ICVzICglMDh4KSIsIGdfVGNGdW5jdGlvbnMuU3RhdHVzR2V0U3RyaW5nKHN0YXR1cyksIHN0YXR1cyk7CisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlR1cmJvQ2FwIGVycm9yIGluIFRjU3RhdGlzdGljc1F1ZXJ5VmFsdWU6ICVzICglMDh4KSIsIGdfVGNGdW5jdGlvbnMuU3RhdHVzR2V0U3RyaW5nKHN0YXR1cyksIHN0YXR1cyk7CiAJCXJldHVybiAtMTsKIAl9CiAJaWYgKGNvdW50ZXIgPD0gKFVMT05HTE9ORykweEZGRkZGRkZGKQpAQCAtMTA5Miw3ICsxMDI0LDcgQEAKIAlzdGF0dXMgPSBnX1RjRnVuY3Rpb25zLlN0YXRpc3RpY3NRdWVyeVZhbHVlKHN0YXRpc3RpY3MsIFRDX0NPVU5URVJfSU5TVEFOQ0VfUlhfRFJPUFBFRF9QQUNLRVRTLCAmY291bnRlcik7CiAJaWYgKHN0YXR1cyAhPSBUQ19TVUNDRVNTKQogCXsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJUdXJib0NhcCBlcnJvciBpbiBUY1N0YXRpc3RpY3NRdWVyeVZhbHVlOiAlcyAoJTA4eCkiLCBnX1RjRnVuY3Rpb25zLlN0YXR1c0dldFN0cmluZyhzdGF0dXMpLCBzdGF0dXMpOworCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJUdXJib0NhcCBlcnJvciBpbiBUY1N0YXRpc3RpY3NRdWVyeVZhbHVlOiAlcyAoJTA4eCkiLCBnX1RjRnVuY3Rpb25zLlN0YXR1c0dldFN0cmluZyhzdGF0dXMpLCBzdGF0dXMpOwogCQlyZXR1cm4gLTE7CiAJfQogCWlmIChjb3VudGVyIDw9IChVTE9OR0xPTkcpMHhGRkZGRkZGRikKQEAgLTExMTUsMjcgKzEwNDcsNiBAQAogfQogCiAKLS8qCi0gKiBXZSBmaWx0ZXIgYXQgdXNlciBsZXZlbCwgc2luY2UgdGhlIGtlcm5lbCBkcml2ZXIgZG9lcyd0IHByb2Nlc3MgdGhlIHBhY2tldHMKLSAqLwotc3RhdGljIGludAotVGNTZXRGaWx0ZXIocGNhcF90ICpwLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKmZwKQotewotCWlmKCFmcCkKLQl7Ci0JCXN0cm5jcHkocC0+ZXJyYnVmLCAic2V0ZmlsdGVyOiBObyBmaWx0ZXIgc3BlY2lmaWVkIiwgc2l6ZW9mKHAtPmVycmJ1ZikpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogSW5zdGFsbCBhIHVzZXIgbGV2ZWwgZmlsdGVyICovCi0JaWYgKGluc3RhbGxfYnBmX3Byb2dyYW0ocCwgZnApIDwgMCkKLQl7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogI2lmZGVmIF9XSU4zMgogc3RhdGljIHN0cnVjdCBwY2FwX3N0YXQgKgogVGNTdGF0c0V4KHBjYXBfdCAqcCwgaW50ICpwY2FwX3N0YXRfc2l6ZSkKQEAgLTExNTEsNyArMTA2Miw3IEBACiAKIAlpZiAoc3RhdHVzICE9IFRDX1NVQ0NFU1MpCiAJewotCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlR1cmJvQ2FwIGVycm9yIGluIFRjSW5zdGFuY2VRdWVyeVN0YXRpc3RpY3M6ICVzICglMDh4KSIsIGdfVGNGdW5jdGlvbnMuU3RhdHVzR2V0U3RyaW5nKHN0YXR1cyksIHN0YXR1cyk7CisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlR1cmJvQ2FwIGVycm9yIGluIFRjSW5zdGFuY2VRdWVyeVN0YXRpc3RpY3M6ICVzICglMDh4KSIsIGdfVGNGdW5jdGlvbnMuU3RhdHVzR2V0U3RyaW5nKHN0YXR1cyksIHN0YXR1cyk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMTE2MCw3ICsxMDcxLDcgQEAKIAlzdGF0dXMgPSBnX1RjRnVuY3Rpb25zLlN0YXRpc3RpY3NRdWVyeVZhbHVlKHN0YXRpc3RpY3MsIFRDX0NPVU5URVJfSU5TVEFOQ0VfVE9UQUxfUlhfUEFDS0VUUywgJmNvdW50ZXIpOwogCWlmIChzdGF0dXMgIT0gVENfU1VDQ0VTUykKIAl7Ci0JCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiVHVyYm9DYXAgZXJyb3IgaW4gVGNTdGF0aXN0aWNzUXVlcnlWYWx1ZTogJXMgKCUwOHgpIiwgZ19UY0Z1bmN0aW9ucy5TdGF0dXNHZXRTdHJpbmcoc3RhdHVzKSwgc3RhdHVzKTsKKwkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiVHVyYm9DYXAgZXJyb3IgaW4gVGNTdGF0aXN0aWNzUXVlcnlWYWx1ZTogJXMgKCUwOHgpIiwgZ19UY0Z1bmN0aW9ucy5TdGF0dXNHZXRTdHJpbmcoc3RhdHVzKSwgc3RhdHVzKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCWlmIChjb3VudGVyIDw9IChVTE9OR0xPTkcpMHhGRkZGRkZGRikKQEAgLTExNzUsNyArMTA4Niw3IEBACiAJc3RhdHVzID0gZ19UY0Z1bmN0aW9ucy5TdGF0aXN0aWNzUXVlcnlWYWx1ZShzdGF0aXN0aWNzLCBUQ19DT1VOVEVSX0lOU1RBTkNFX1JYX0RST1BQRURfUEFDS0VUUywgJmNvdW50ZXIpOwogCWlmIChzdGF0dXMgIT0gVENfU1VDQ0VTUykKIAl7Ci0JCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiVHVyYm9DYXAgZXJyb3IgaW4gVGNTdGF0aXN0aWNzUXVlcnlWYWx1ZTogJXMgKCUwOHgpIiwgZ19UY0Z1bmN0aW9ucy5TdGF0dXNHZXRTdHJpbmcoc3RhdHVzKSwgc3RhdHVzKTsKKwkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiVHVyYm9DYXAgZXJyb3IgaW4gVGNTdGF0aXN0aWNzUXVlcnlWYWx1ZTogJXMgKCUwOHgpIiwgZ19UY0Z1bmN0aW9ucy5TdGF0dXNHZXRTdHJpbmcoc3RhdHVzKSwgc3RhdHVzKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCWlmIChjb3VudGVyIDw9IChVTE9OR0xPTkcpMHhGRkZGRkZGRikKQEAgLTEyMTMsNyArMTEyNCw3IEBACiB7CiAJaWYgKG1vZGUgIT0gTU9ERV9DQVBUKQogCXsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJNb2RlICV1IG5vdCBzdXBwb3J0ZWQgYnkgVHVyYm9DYXAgZGV2aWNlcy4gVHVyYm9DYXAgb25seSBzdXBwb3J0cyBjYXB0dXJlLiIsIG1vZGUpOworCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJNb2RlICV1IG5vdCBzdXBwb3J0ZWQgYnkgVHVyYm9DYXAgZGV2aWNlcy4gVHVyYm9DYXAgb25seSBzdXBwb3J0cyBjYXB0dXJlLiIsIG1vZGUpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xMjI4LDcgKzExMzksNyBAQAogCiAJaWYgKHNpemUgPCAwKQogCXsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJNaW50b2NvcHkgY2Fubm90IGJlIGxlc3MgdGhhbiAwLiIpOworCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJNaW50b2NvcHkgY2Fubm90IGJlIGxlc3MgdGhhbiAwLiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xMjM2LDcgKzExNDcsNyBAQAogCiAJaWYgKHN0YXR1cyAhPSBUQ19TVUNDRVNTKQogCXsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJUdXJib0NhcCBlcnJvciBzZXR0aW5nIHRoZSBtaW50b2NvcHk6ICVzICglMDh4KSIsIGdfVGNGdW5jdGlvbnMuU3RhdHVzR2V0U3RyaW5nKHN0YXR1cyksIHN0YXR1cyk7CisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlR1cmJvQ2FwIGVycm9yIHNldHRpbmcgdGhlIG1pbnRvY29weTogJXMgKCUwOHgpIiwgZ19UY0Z1bmN0aW9ucy5TdGF0dXNHZXRTdHJpbmcoc3RhdHVzKSwgc3RhdHVzKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTEyNTMsNyArMTE2NCw3IEBACiBzdGF0aWMgaW50CiBUY09pZEdldFJlcXVlc3QocGNhcF90ICpwLCBicGZfdV9pbnQzMiBvaWQgX1VfLCB2b2lkICpkYXRhIF9VXywgc2l6ZV90ICpsZW5wIF9VXykKIHsKLQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJICAgICJBbiBPSUQgZ2V0IHJlcXVlc3QgY2Fubm90IGJlIHBlcmZvcm1lZCBvbiBhIFR1cmJvQ2FwIGRldmljZSIpOwogCXJldHVybiBQQ0FQX0VSUk9SOwogfQpAQCAtMTI2Miw3ICsxMTczLDcgQEAKIFRjT2lkU2V0UmVxdWVzdChwY2FwX3QgKnAsIGJwZl91X2ludDMyIG9pZCBfVV8sIGNvbnN0IHZvaWQgKmRhdGEgX1VfLAogICAgIHNpemVfdCAqbGVucCBfVV8pCiB7Ci0JcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCSAgICAiQW4gT0lEIHNldCByZXF1ZXN0IGNhbm5vdCBiZSBwZXJmb3JtZWQgb24gYSBUdXJib0NhcCBkZXZpY2UiKTsKIAlyZXR1cm4gUENBUF9FUlJPUjsKIH0KQEAgLTEyNzAsNyArMTE4MSw3IEBACiBzdGF0aWMgdV9pbnQKIFRjU2VuZHF1ZXVlVHJhbnNtaXQocGNhcF90ICpwLCBwY2FwX3NlbmRfcXVldWUgKnF1ZXVlIF9VXywgaW50IHN5bmMgX1VfKQogewotCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkgICAgIlBhY2tldHMgY2Fubm90IGJlIGJ1bGsgdHJhbnNtaXR0ZWQgb24gYSBUdXJib0NhcCBkZXZpY2UiKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEyNzgsNyArMTE4OSw3IEBACiBzdGF0aWMgaW50CiBUY1NldFVzZXJCdWZmZXIocGNhcF90ICpwLCBpbnQgc2l6ZSBfVV8pCiB7Ci0JcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCSAgICAiVGhlIHVzZXIgYnVmZmVyIGNhbm5vdCBiZSBzZXQgb24gYSBUdXJib0NhcCBkZXZpY2UiKTsKIAlyZXR1cm4gLTE7CiB9CkBAIC0xMjg2LDcgKzExOTcsNyBAQAogc3RhdGljIGludAogVGNMaXZlRHVtcChwY2FwX3QgKnAsIGNoYXIgKmZpbGVuYW1lIF9VXywgaW50IG1heHNpemUgX1VfLCBpbnQgbWF4cGFja3MgX1VfKQogewotCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkgICAgIkxpdmUgcGFja2V0IGR1bXBpbmcgY2Fubm90IGJlIHBlcmZvcm1lZCBvbiBhIFR1cmJvQ2FwIGRldmljZSIpOwogCXJldHVybiAtMTsKIH0KQEAgLTEyOTQsNyArMTIwNSw3IEBACiBzdGF0aWMgaW50CiBUY0xpdmVEdW1wRW5kZWQocGNhcF90ICpwLCBpbnQgc3luYyBfVV8pCiB7Ci0JcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCSAgICAiTGl2ZSBwYWNrZXQgZHVtcGluZyBjYW5ub3QgYmUgcGVyZm9ybWVkIG9uIGEgVHVyYm9DYXAgZGV2aWNlIik7CiAJcmV0dXJuIC0xOwogfQpkaWZmIC0tZ2l0IGEvcGNhcC10c3RhbXAubWFubWlzYyBiL3BjYXAtdHN0YW1wLm1hbm1pc2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4YjdmZWQuLjAwMDAwMDAKLS0tIGEvcGNhcC10c3RhbXAubWFubWlzYworKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi0uXCIKLS5cIiBDb3B5cmlnaHQgKGMpIDE5ODcsIDE5ODgsIDE5ODksIDE5OTAsIDE5OTEsIDE5OTIsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcKLS5cIglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLlwiCi0uXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0uXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQ6ICgxKSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb25zCi0uXCIgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBpbiBpdHMgZW50aXJldHksICgyKQotLlwiIGRpc3RyaWJ1dGlvbnMgaW5jbHVkaW5nIGJpbmFyeSBjb2RlIGluY2x1ZGUgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kCi0uXCIgdGhpcyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5IGluIHRoZSBkb2N1bWVudGF0aW9uIG9yIG90aGVyIG1hdGVyaWFscwotLlwiIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiwgYW5kICgzKSBhbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcKLS5cIiBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotLlwiIGBgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLAotLlwiIExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkgYW5kIGl0cyBjb250cmlidXRvcnMuJycgTmVpdGhlciB0aGUgbmFtZSBvZgotLlwiIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlCi0uXCIgb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCi0uXCIgd3JpdHRlbiBwZXJtaXNzaW9uLgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLS5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotLlwiIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0uXCIKLS5USCBQQ0FQLVRTVEFNUCA3ICI4IE1hcmNoIDIwMTUiCi0uU0ggTkFNRQotcGNhcC10c3RhbXAgXC0gcGFja2V0IHRpbWUgc3RhbXBzIGluIGxpYnBjYXAKLS5TSCBERVNDUklQVElPTgotV2hlbiBjYXB0dXJpbmcgdHJhZmZpYywgZWFjaCBwYWNrZXQgaXMgZ2l2ZW4gYSB0aW1lIHN0YW1wIHJlcHJlc2VudGluZywKLWZvciBpbmNvbWluZyBwYWNrZXRzLCB0aGUgYXJyaXZhbCB0aW1lIG9mIHRoZSBwYWNrZXQgYW5kLCBmb3Igb3V0Z29pbmcKLXBhY2tldHMsIHRoZSB0cmFuc21pc3Npb24gdGltZSBvZiB0aGUgcGFja2V0LiAgVGhpcyB0aW1lIGlzIGFuCi1hcHByb3hpbWF0aW9uIG9mIHRoZSBhcnJpdmFsIG9yIHRyYW5zbWlzc2lvbiB0aW1lLiAgSWYgaXQgaXMgc3VwcGxpZWQgYnkKLXRoZSBvcGVyYXRpbmcgc3lzdGVtIHJ1bm5pbmcgb24gdGhlIGhvc3Qgb24gd2hpY2ggdGhlIGNhcHR1cmUgaXMgYmVpbmcKLWRvbmUsIHRoZXJlIGFyZSBzZXZlcmFsIHJlYXNvbnMgd2h5IGl0IG1pZ2h0IG5vdCBwcmVjaXNlbHkgcmVwcmVzZW50IHRoZQotYXJyaXZhbCBvciB0cmFuc21pc3Npb24gdGltZToKLS5JUAotaWYgdGhlIHRpbWUgc3RhbXAgaXMgYXBwbGllZCB0byB0aGUgcGFja2V0IHdoZW4gdGhlIG5ldHdvcmtpbmcgc3RhY2sKLXJlY2VpdmVzIHRoZSBwYWNrZXQsIHRoZSBuZXR3b3JraW5nIHN0YWNrIG1pZ2h0IG5vdCBzZWUgdGhlIHBhY2tldCB1bnRpbAotYW4gaW50ZXJydXB0IGlzIGRlbGl2ZXJlZCBmb3IgdGhlIHBhY2tldCBvciBhIHRpbWVyIGV2ZW50IGNhdXNlcyB0aGUKLW5ldHdvcmtpbmcgZGV2aWNlIGRyaXZlciB0byBwb2xsIGZvciBwYWNrZXRzLCBhbmQgdGhlIHRpbWUgc3RhbXAgbWlnaHQKLW5vdCBiZSBhcHBsaWVkIHVudGlsIHRoZSBwYWNrZXQgaGFzIGhhZCBzb21lIHByb2Nlc3NpbmcgZG9uZSBieSBvdGhlcgotY29kZSBpbiB0aGUgbmV0d29ya2luZyBzdGFjaywgc28gdGhlcmUgbWlnaHQgYmUgYSBzaWduaWZpY2FudCBkZWxheQotYmV0d2VlbiB0aGUgdGltZSB3aGVuIHRoZSBsYXN0IGJpdCBvZiB0aGUgcGFja2V0IGlzIHJlY2VpdmVkIGJ5IHRoZQotY2FwdHVyZSBkZXZpY2UgYW5kIHdoZW4gdGhlIG5ldHdvcmtpbmcgc3RhY2sgdGltZS1zdGFtcHMgdGhlIHBhY2tldDsKLS5JUAotdGhlIHRpbWVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRpbWUgc3RhbXBzIG1pZ2h0IGhhdmUgbG93IHJlc29sdXRpb24sCi1mb3IgZXhhbXBsZSwgaXQgbWlnaHQgYmUgYSB0aW1lciB1cGRhdGVkIG9uY2UgcGVyIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbQotdGltZXIgdGljaywgd2l0aCB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtIHRpbWVyIHRpY2tpbmcgb25jZSBldmVyeSBmZXcKLW1pbGxpc2Vjb25kczsKLS5JUAotYSBoaWdoLXJlc29sdXRpb24gdGltZXIgbWlnaHQgdXNlIGEgY291bnRlciB0aGF0IHJ1bnMgYXQgYSByYXRlCi1kZXBlbmRlbnQgb24gdGhlIHByb2Nlc3NvciBjbG9jayBzcGVlZCwgYW5kIHRoYXQgY2xvY2sgc3BlZWQgbWlnaHQgYmUKLWFkanVzdGVkIHVwd2FyZHMgb3IgZG93bndhcmRzIG92ZXIgdGltZSBhbmQgdGhlIHRpbWVyIG1pZ2h0IG5vdCBiZSBhYmxlCi10byBjb21wZW5zYXRlIGZvciBhbGwgdGhvc2UgYWRqdXN0bWVudHM7Ci0uSVAKLXRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0ncyBjbG9jayBtaWdodCBiZSBhZGp1c3RlZCBvdmVyIHRpbWUgdG8gbWF0Y2ggYQotdGltZSBzdGFuZGFyZCB0byB3aGljaCB0aGUgaG9zdCBpcyBiZWluZyBzeW5jaHJvbml6ZWQsIHdoaWNoIG1pZ2h0IGJlCi1kb25lIGJ5IHRlbXBvcmFyaWx5IHNsb3dpbmcgZG93biBvciBzcGVlZGluZyB1cCB0aGUgY2xvY2sgb3IgYnkgbWFraW5nIGEKLXNpbmdsZSBhZGp1c3RtZW50OwotLklQCi1kaWZmZXJlbnQgQ1BVIGNvcmVzIG9uIGEgbXVsdGktY29yZSBvciBtdWx0aS1wcm9jZXNzb3Igc3lzdGVtIG1pZ2h0IGJlCi1ydW5uaW5nIGF0IGRpZmZlcmVudCBzcGVlZHMsIG9yIG1pZ2h0IG5vdCBoYXZlIHRpbWUgY291bnRlcnMgYWxsCi1zeW5jaHJvbml6ZWQsIHNvIHBhY2tldHMgdGltZS1zdGFtcGVkIGJ5IGRpZmZlcmVudCBjb3JlcyBtaWdodCBub3QgaGF2ZQotY29uc2lzdGVudCB0aW1lIHN0YW1wcy4KLS5MUAotSW4gYWRkaXRpb24sIHBhY2tldHMgdGltZS1zdGFtcGVkIGJ5IGRpZmZlcmVudCBjb3JlcyBtaWdodCBiZQotdGltZS1zdGFtcGVkIGluIG9uZSBvcmRlciBhbmQgYWRkZWQgdG8gdGhlIHF1ZXVlIG9mIHBhY2tldHMgZm9yIGxpYnBjYXAKLXRvIHJlYWQgaW4gYW5vdGhlciBvcmRlciwgc28gdGltZSBzdGFtcHMgbWlnaHQgbm90IGJlIG1vbm90b25pY2FsbHkKLWluY3JlYXNpbmcuCi0uTFAKLVNvbWUgY2FwdHVyZSBkZXZpY2VzIG9uIHNvbWUgcGxhdGZvcm1zIGNhbiBwcm92aWRlIHRpbWUgc3RhbXBzIGZvcgotcGFja2V0czsgdGhvc2UgdGltZSBzdGFtcHMgYXJlIHVzdWFsbHkgaGlnaC1yZXNvbHV0aW9uIHRpbWUgc3RhbXBzLCBhbmQKLWFyZSB1c3VhbGx5IGFwcGxpZWQgdG8gdGhlIHBhY2tldCB3aGVuIHRoZSBmaXJzdCBvciBsYXN0IGJpdCBvZiB0aGUKLXBhY2tldCBhcnJpdmVzLCBhbmQgYXJlIHRodXMgbW9yZSBhY2N1cmF0ZSB0aGFuIHRpbWUgc3RhbXBzIHByb3ZpZGVkIGJ5Ci10aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtLiAgVGhvc2UgdGltZSBzdGFtcHMgbWlnaHQgbm90LCBob3dldmVyLCBiZQotc3luY2hyb25pemVkIHdpdGggdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbSdzIGNsb2NrLCBzbyB0aGF0LCBmb3IKLWV4YW1wbGUsIHRoZSB0aW1lIHN0YW1wIG9mIGEgcGFja2V0IG1pZ2h0IG5vdCBjb3JyZXNwb25kIHRvIHRoZSB0aW1lCi1zdGFtcCBvZiBhbiBldmVudCBvbiB0aGUgaG9zdCB0cmlnZ2VyZWQgYnkgdGhlIGFycml2YWwgb2YgdGhhdCBwYWNrZXQuCi0uTFAKLURlcGVuZGluZyBvbiB0aGUgY2FwdHVyZSBkZXZpY2UgYW5kIHRoZSBzb2Z0d2FyZSBvbiB0aGUgaG9zdCwgbGlicGNhcAotbWlnaHQgYWxsb3cgZGlmZmVyZW50IHR5cGVzIG9mIHRpbWUgc3RhbXAgdG8gYmUgdXNlZC4gIFRoZQotLkJSIHBjYXBfbGlzdF90c3RhbXBfdHlwZXMgKDNQQ0FQKQotcm91dGluZSBwcm92aWRlcywgZm9yIGEgcGFja2V0IGNhcHR1cmUgaGFuZGxlIGNyZWF0ZWQgYnkKLS5CUiBwY2FwX2NyZWF0ZSAoM1BDQVApCi1idXQgbm90IHlldCBhY3RpdmF0ZWQgYnkKLS5CUiBwY2FwX2FjdGl2YXRlICgzUENBUCksCi1hIGxpc3Qgb2YgdGltZSBzdGFtcCB0eXBlcyBzdXBwb3J0ZWQgYnkgdGhlIGNhcHR1cmUgZGV2aWNlIGZvciB0aGF0Ci1oYW5kbGUuCi1UaGUgbGlzdCBtaWdodCBiZSBlbXB0eSwgaW4gd2hpY2ggY2FzZSBubyBjaG9pY2Ugb2YgdGltZSBzdGFtcCB0eXBlIGlzCi1vZmZlcmVkIGZvciB0aGF0IGNhcHR1cmUgZGV2aWNlLiAgSWYgdGhlIGxpc3QgaXMgbm90IGVtcHR5LCB0aGUKLS5CUiBwY2FwX3NldF90c3RhbXBfdHlwZSAoM1BDQVApCi1yb3V0aW5lIGNhbiBiZSB1c2VkIGFmdGVyIGEKLS5CIHBjYXBfY3JlYXRlKCkKLWNhbGwgYW5kIGJlZm9yZSBhCi0uQiBwY2FwX2FjdGl2YXRlKCkKLWNhbGwgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiB0aW1lIHN0YW1wIHRvIGJlIHVzZWQgb24gdGhlIGRldmljZS4KLVRoZSB0aW1lIHN0YW1wIHR5cGVzIGFyZSBsaXN0ZWQgaGVyZTsgdGhlIGZpcnN0IHZhbHVlIGlzIHRoZSAjZGVmaW5lIHRvCi11c2UgaW4gY29kZSwgdGhlIHNlY29uZCB2YWx1ZSBpcyB0aGUgdmFsdWUgcmV0dXJuZWQgYnkKLS5CIHBjYXBfdHN0YW1wX3R5cGVfdmFsX3RvX25hbWUoKQotYW5kIGFjY2VwdGVkIGJ5Ci0uQlIgcGNhcF90c3RhbXBfdHlwZV9uYW1lX3RvX3ZhbCgpIC4KLS5SUyA1Ci0uVFAgNQotLkJSIFBDQVBfVFNUQU1QX0hPU1QgIiAtICIgaG9zdAotVGltZSBzdGFtcCBwcm92aWRlZCBieSB0aGUgaG9zdCBvbiB3aGljaCB0aGUgY2FwdHVyZSBpcyBiZWluZyBkb25lLiAgVGhlCi1wcmVjaXNpb24gb2YgdGhpcyB0aW1lIHN0YW1wIGlzIHVuc3BlY2lmaWVkOyBpdCBtaWdodCBvciBtaWdodCBub3QgYmUKLXN5bmNocm9uaXplZCB3aXRoIHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0ncyBjbG9jay4KLS5UUCA1Ci0uQlIgUENBUF9UU1RBTVBfSE9TVF9MT1dQUkVDICIgLSAiIGhvc3RfbG93cHJlYwotVGltZSBzdGFtcCBwcm92aWRlZCBieSB0aGUgaG9zdCBvbiB3aGljaCB0aGUgY2FwdHVyZSBpcyBiZWluZyBkb25lLgotVGhpcyBpcyBhIGxvdy1wcmVjaXNpb24gdGltZSBzdGFtcCwgc3luY2hyb25pemVkIHdpdGggdGhlIGhvc3Qgb3BlcmF0aW5nCi1zeXN0ZW0ncyBjbG9jay4KLS5UUCA1Ci0uQlIgUENBUF9UU1RBTVBfSE9TVF9ISVBSRUMgIiAtICIgaG9zdF9oaXByZWMKLVRpbWUgc3RhbXAgcHJvdmlkZWQgYnkgdGhlIGhvc3Qgb24gd2hpY2ggdGhlIGNhcHR1cmUgaXMgYmVpbmcgZG9uZS4KLVRoaXMgaXMgYSBoaWdoLXByZWNpc2lvbiB0aW1lIHN0YW1wOyBpdCBtaWdodCBvciBtaWdodCBub3QgYmUKLXN5bmNocm9uaXplZCB3aXRoIHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0ncyBjbG9jay4gIEl0IG1pZ2h0IGJlIG1vcmUKLWV4cGVuc2l2ZSB0byBmZXRjaCB0aGFuCi0uQlIgUENBUF9UU1RBTVBfSE9TVF9MT1dQUkVDIC4KLS5UUCA1Ci0uQlIgUENBUF9UU1RBTVBfQURBUFRFUiAiIC0gIiBhZGFwdGVyCi1UaW1lIHN0YW1wIHByb3ZpZGVkIGJ5IHRoZSBuZXR3b3JrIGFkYXB0ZXIgb24gd2hpY2ggdGhlIGNhcHR1cmUgaXMgYmVpbmcKLWRvbmUuICBUaGlzIGlzIGEgaGlnaC1wcmVjaXNpb24gdGltZSBzdGFtcCwgc3luY2hyb25pemVkIHdpdGggdGhlIGhvc3QKLW9wZXJhdGluZyBzeXN0ZW0ncyBjbG9jay4KLS5UUCA1Ci0uQlIgUENBUF9UU1RBTVBfQURBUFRFUl9VTlNZTkNFRCAiIC0gIiBhZGFwdGVyX3Vuc3luY2VkCi1UaW1lIHN0YW1wIHByb3ZpZGVkIGJ5IHRoZSBuZXR3b3JrIGFkYXB0ZXIgb24gd2hpY2ggdGhlIGNhcHR1cmUgaXMgYmVpbmcKLWRvbmUuICBUaGlzIGlzIGEgaGlnaC1wcmVjaXNpb24gdGltZSBzdGFtcDsgaXQgaXMgbm90IHN5bmNocm9uaXplZCB3aXRoCi10aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtJ3MgY2xvY2suCi0uUkUKLS5MUAotQnkgZGVmYXVsdCwgd2hlbiBwZXJmb3JtaW5nIGEgbGl2ZSBjYXB0dXJlIG9yIHJlYWRpbmcgZnJvbSBhIHNhdmVmaWxlLAotdGltZSBzdGFtcHMgYXJlIHN1cHBsaWVkIGFzIHNlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxOTcwLCAwMDowMDowMCBVVEMsCi1hbmQgbWljcm9zZWNvbmRzIHNpbmNlIHRoYXQgc2Vjb25kcyB2YWx1ZSwgZXZlbiBpZiBoaWdoZXItcmVzb2x1dGlvbgotdGltZSBzdGFtcHMgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBjYXB0dXJlIGRldmljZSBvciBpbiB0aGUgc2F2ZWZpbGUuCi1JZiwgd2hlbiByZWFkaW5nIGEgc2F2ZWZpbGUsIHRoZSB0aW1lIHN0YW1wcyBpbiB0aGUgZmlsZSBoYXZlIGEgaGlnaGVyCi1yZXNvbHV0aW9uIHRoYW4gb25lIG1pY3Jvc2Vjb25kLCB0aGUgYWRkaXRpb25hbCBkaWdpdHMgb2YgcmVzb2x1dGlvbiBhcmUKLWRpc2NhcmRlZC4KLS5MUAotVGhlCi0uQlIgcGNhcF9zZXRfdHN0YW1wX3ByZWNpc2lvbiAoM1BDQVApCi1yb3V0aW5lIGNhbiBiZSB1c2VkIGFmdGVyIGEKLS5CIHBjYXBfY3JlYXRlKCkKLWNhbGwgYW5kIGFmdGVyIGEKLS5CIHBjYXBfYWN0aXZhdGUoKQotY2FsbCB0byBzcGVjaWZ5IHRoZSByZXNvbHV0aW9uIG9mIHRoZSB0aW1lIHN0YW1wcyB0byBnZXQgZm9yIHRoZSBkZXZpY2UuCi1JZiB0aGUgaGFyZHdhcmUgb3Igc29mdHdhcmUgY2Fubm90IHN1cHBseSBhIGhpZ2hlci1yZXNvbHV0aW9uIHRpbWUKLXN0YW1wLCB0aGUKLS5CIHBjYXBfc2V0X3RzdGFtcF9wcmVjaXNpb24oKQotY2FsbCB3aWxsIGZhaWwsIGFuZCB0aGUgdGltZSBzdGFtcHMgc3VwcGxpZWQgYWZ0ZXIgdGhlCi0uQiBwY2FwX2FjdGl2YXRlKCkKLWNhbGwgd2lsbCBoYXZlIG1pY3Jvc2Vjb25kIHJlc29sdXRpb24uCi0uTFAKLVdoZW4gb3BlbmluZyBhIHNhdmVmaWxlLCB0aGUKLS5CUiBwY2FwX29wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24gKDNQQ0FQKQotYW5kCi0uQlIgcGNhcF9mb3Blbl9vZmZsaW5lX3dpdGhfdHN0YW1wX3ByZWNpc2lvbiAoM1BDQVApCi1yb3V0aW5lcyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSByZXNvbHV0aW9uIG9mIHRpbWUgc3RhbXBzIHRvIGJlIHJlYWQKLWZyb20gdGhlIGZpbGU7IGlmIHRoZSB0aW1lIHN0YW1wcyBpbiB0aGUgZmlsZSBoYXZlIGEgbG93ZXIgcmVzb2x1dGlvbiwKLXRoZSBmcmFjdGlvbi1vZi1hLXNlY29uZCBwb3J0aW9uIG9mIHRoZSB0aW1lIHN0YW1wcyB3aWxsIGJlIHNjYWxlZCB0bwotdGhlIHNwZWNpZmllZCByZXNvbHV0aW9uLgotLkxQCi1UaGUKLS5CUiBwY2FwX2dldF90c3RhbXBfcHJlY2lzaW9uICgzUENBUCkKLXJvdXRpbmUgcmV0dXJucyB0aGUgcmVzb2x1dGlvbiBvZiB0aW1lIHN0YW1wcyB0aGF0IHdpbGwgYmUgc3VwcGxpZWQ7Ci13aGVuIGNhcHR1cmluZyBwYWNrZXRzLCB0aGlzIGRvZXMgbm90IHJlZmxlY3QgdGhlIGFjdHVhbCBwcmVjaXNpb24gb2YKLXRoZSB0aW1lIHN0YW1wIHN1cHBsaWVkIGJ5IHRoZSBoYXJkd2FyZSBvciBvcGVyYXRpbmcgc3lzdGVtIGFuZCwgd2hlbgotcmVhZGluZyBhIHNhdmVmaWxlLCB0aGlzIGRvZXMgbm90IGluZGljYXRlIHRoZSBhY3R1YWwgcHJlY2lzaW9uIG9mIHRpbWUKLXN0YW1wcyBpbiB0aGUgZmlsZS4KLS5TSCBTRUUgQUxTTwotLm5hCi1wY2FwX3NldF90c3RhbXBfdHlwZSgzUENBUCksCi1wY2FwX2xpc3RfdHN0YW1wX3R5cGVzKDNQQ0FQKSwKLXBjYXBfdHN0YW1wX3R5cGVfdmFsX3RvX25hbWUoM1BDQVApLAotcGNhcF90c3RhbXBfdHlwZV9uYW1lX3RvX3ZhbCgzUENBUCksCi1wY2FwX3NldF90c3RhbXBfcHJlY2lzaW9uKDNQQ0FQKSwKLXBjYXBfb3Blbl9vZmZsaW5lX3dpdGhfdHN0YW1wX3ByZWNpc2lvbigzUENBUCksCi1cJXBjYXBfZm9wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24oM1BDQVApLAotXCVwY2FwX2dldF90c3RhbXBfcHJlY2lzaW9uKDNQQ0FQKQotLmFkCmRpZmYgLS1naXQgYS9wY2FwLXRzdGFtcC5tYW5taXNjLmluIGIvcGNhcC10c3RhbXAubWFubWlzYy5pbgppbmRleCAzOGM1NjUxLi5lZWE4YzFkIDEwMDY0NAotLS0gYS9wY2FwLXRzdGFtcC5tYW5taXNjLmluCisrKyBiL3BjYXAtdHN0YW1wLm1hbm1pc2MuaW4KQEAgLTE5LDcgKzE5LDcgQEAKIC5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgogLlwiIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAuXCIKLS5USCBQQ0FQLVRTVEFNUCBATUFOX01JU0NfSU5GT0AgIjggTWFyY2ggMjAxNSIKKy5USCBQQ0FQLVRTVEFNUCBATUFOX01JU0NfSU5GT0AgIjE0IEp1bHkgMjAyMCIKIC5TSCBOQU1FCiBwY2FwLXRzdGFtcCBcLSBwYWNrZXQgdGltZSBzdGFtcHMgaW4gbGlicGNhcAogLlNIIERFU0NSSVBUSU9OCkBAIC01OCw3ICs1OCwyMCBAQAogZGlmZmVyZW50IENQVSBjb3JlcyBvbiBhIG11bHRpLWNvcmUgb3IgbXVsdGktcHJvY2Vzc29yIHN5c3RlbSBtaWdodCBiZQogcnVubmluZyBhdCBkaWZmZXJlbnQgc3BlZWRzLCBvciBtaWdodCBub3QgaGF2ZSB0aW1lIGNvdW50ZXJzIGFsbAogc3luY2hyb25pemVkLCBzbyBwYWNrZXRzIHRpbWUtc3RhbXBlZCBieSBkaWZmZXJlbnQgY29yZXMgbWlnaHQgbm90IGhhdmUKLWNvbnNpc3RlbnQgdGltZSBzdGFtcHMuCitjb25zaXN0ZW50IHRpbWUgc3RhbXBzOworLklQCitzb21lIHRpbWUgc291cmNlcywgc3VjaCBhcyB0aG9zZSB0aGF0IHN1cHBseSBQT1NJWCAic2Vjb25kcyBzaW5jZSB0aGUKK0Vwb2NoIiB0aW1lLCBkbyBub3QgY291bnQgbGVhcCBzZWNvbmRzLCBtZWFuaW5nIHRoYXQgdGhlIHNlY29uZHMKK3BvcnRpb24KKy5SQiAoIHR2X3NlYyApCitvZiB0aGUgdGltZSBzdGFtcCBtaWdodCBub3QgYmUgaW5jcmVtZW50ZWQgZm9yIGEgbGVhcCBzZWNvbmQsIHNvIHRoYXQKK3RoZSBmcmFjdGlvbi1vZi1hLXNlY29uZCBwYXJ0IG9mIHRoZSB0aW1lIHN0YW1wIG1pZ2h0IHJvbGwgb3ZlciBwYXN0Cit6ZXJvIGJ1dCB0aGUgc2Vjb25kIHBhcnQgd291bGQgbm90IGNoYW5nZSwgb3IgdGhlIGNsb2NrIG1pZ2h0IHJ1bgorc2xpZ2h0bHkgbW9yZSBzbG93bHkgZm9yIGEgcGVyaW9kIGJlZm9yZSB0aGUgbGVhcCBzZWNvbmQuCisuTFAKK0ZvciB0aGVzZSByZWFzb25zLCB0aW1lIGRpZmZlcmVuY2VzIGJldHdlZW4gcGFja2V0IHRpbWUgc3RhbXBzIHdpbGwgbm90CituZWNlc3NhcmlseSBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhlIHRpbWUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgcmVjZWlwdAorb3IgdHJhbnNtaXNzaW9uIHRpbWVzIG9mIHRoZSBwYWNrZXRzLgogLkxQCiBJbiBhZGRpdGlvbiwgcGFja2V0cyB0aW1lLXN0YW1wZWQgYnkgZGlmZmVyZW50IGNvcmVzIG1pZ2h0IGJlCiB0aW1lLXN0YW1wZWQgaW4gb25lIG9yZGVyIGFuZCBhZGRlZCB0byB0aGUgcXVldWUgb2YgcGFja2V0cyBmb3IgbGlicGNhcApAQCAtNzMsNiArODYsOSBAQAogc3luY2hyb25pemVkIHdpdGggdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbSdzIGNsb2NrLCBzbyB0aGF0LCBmb3IKIGV4YW1wbGUsIHRoZSB0aW1lIHN0YW1wIG9mIGEgcGFja2V0IG1pZ2h0IG5vdCBjb3JyZXNwb25kIHRvIHRoZSB0aW1lCiBzdGFtcCBvZiBhbiBldmVudCBvbiB0aGUgaG9zdCB0cmlnZ2VyZWQgYnkgdGhlIGFycml2YWwgb2YgdGhhdCBwYWNrZXQuCitJZiB0aGV5IGFyZSBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtJ3MgY2xvY2ssIHNvbWUgb2YKK3RoZSBpc3N1ZXMgbGlzdGVkIGFib3ZlIHdpdGggdGltZSBzdGFtcHMgc3VwcGxpZWQgYnkgdGhlIGhvc3Qgb3BlcmF0aW5nCitzeXN0ZW0gbWF5IGFsc28gYXBwbHkgdG8gdGltZSBzdGFtcHMgc3VwcGxpZWQgYnkgdGhlIGNhcHR1cmUgZGV2aWNlLgogLkxQCiBEZXBlbmRpbmcgb24gdGhlIGNhcHR1cmUgZGV2aWNlIGFuZCB0aGUgc29mdHdhcmUgb24gdGhlIGhvc3QsIGxpYnBjYXAKIG1pZ2h0IGFsbG93IGRpZmZlcmVudCB0eXBlcyBvZiB0aW1lIHN0YW1wIHRvIGJlIHVzZWQuICBUaGUKQEAgLTg3LDE1ICsxMDMsMTUgQEAKIG9mZmVyZWQgZm9yIHRoYXQgY2FwdHVyZSBkZXZpY2UuICBJZiB0aGUgbGlzdCBpcyBub3QgZW1wdHksIHRoZQogLkJSIHBjYXBfc2V0X3RzdGFtcF90eXBlICgzUENBUCkKIHJvdXRpbmUgY2FuIGJlIHVzZWQgYWZ0ZXIgYQotLkIgcGNhcF9jcmVhdGUoKQorLkJSIHBjYXBfY3JlYXRlICgpCiBjYWxsIGFuZCBiZWZvcmUgYQotLkIgcGNhcF9hY3RpdmF0ZSgpCisuQlIgcGNhcF9hY3RpdmF0ZSAoKQogY2FsbCB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIHRpbWUgc3RhbXAgdG8gYmUgdXNlZCBvbiB0aGUgZGV2aWNlLgogVGhlIHRpbWUgc3RhbXAgdHlwZXMgYXJlIGxpc3RlZCBoZXJlOyB0aGUgZmlyc3QgdmFsdWUgaXMgdGhlICNkZWZpbmUgdG8KIHVzZSBpbiBjb2RlLCB0aGUgc2Vjb25kIHZhbHVlIGlzIHRoZSB2YWx1ZSByZXR1cm5lZCBieQotLkIgcGNhcF90c3RhbXBfdHlwZV92YWxfdG9fbmFtZSgpCisuQlIgcGNhcF90c3RhbXBfdHlwZV92YWxfdG9fbmFtZSAoM1BDQVApCiBhbmQgYWNjZXB0ZWQgYnkKLS5CUiBwY2FwX3RzdGFtcF90eXBlX25hbWVfdG9fdmFsKCkgLgorLkJSIHBjYXBfdHN0YW1wX3R5cGVfbmFtZV90b192YWwgKDNQQ0FQKSAuCiAuUlMgNQogLlRQIDUKIC5CUiBQQ0FQX1RTVEFNUF9IT1NUICIgLSAiIGhvc3QKQEAgLTExMCw5ICsxMjYsMTQgQEAKIC5UUCA1CiAuQlIgUENBUF9UU1RBTVBfSE9TVF9ISVBSRUMgIiAtICIgaG9zdF9oaXByZWMKIFRpbWUgc3RhbXAgcHJvdmlkZWQgYnkgdGhlIGhvc3Qgb24gd2hpY2ggdGhlIGNhcHR1cmUgaXMgYmVpbmcgZG9uZS4KLVRoaXMgaXMgYSBoaWdoLXByZWNpc2lvbiB0aW1lIHN0YW1wOyBpdCBtaWdodCBvciBtaWdodCBub3QgYmUKLXN5bmNocm9uaXplZCB3aXRoIHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0ncyBjbG9jay4gIEl0IG1pZ2h0IGJlIG1vcmUKLWV4cGVuc2l2ZSB0byBmZXRjaCB0aGFuCitUaGlzIGlzIGEgaGlnaC1wcmVjaXNpb24gdGltZSBzdGFtcCwgc3luY2hyb25pemVkIHdpdGggdGhlIGhvc3QKK29wZXJhdGluZyBzeXN0ZW0ncyBjbG9jay4gSXQgbWlnaHQgYmUgbW9yZSBleHBlbnNpdmUgdG8gZmV0Y2ggdGhhbgorLkJSIFBDQVBfVFNUQU1QX0hPU1RfTE9XUFJFQyAuCisuVFAgNQorLkJSIFBDQVBfVFNUQU1QX0hPU1RfSElQUkVDX1VOU1lOQ0VEICIgLSAiIGhvc3RfaGlwcmVjX3Vuc3luY2VkCitUaW1lIHN0YW1wIHByb3ZpZGVkIGJ5IHRoZSBob3N0IG9uIHdoaWNoIHRoZSBjYXB0dXJlIGlzIGJlaW5nIGRvbmUuCitUaGlzIGlzIGEgaGlnaC1wcmVjaXNpb24gdGltZSBzdGFtcCwgbm90IHN5bmNocm9uaXplZCB3aXRoIHRoZSBob3N0CitvcGVyYXRpbmcgc3lzdGVtJ3MgY2xvY2suIEl0IG1pZ2h0IGJlIG1vcmUgZXhwZW5zaXZlIHRvIGZldGNoIHRoYW4KIC5CUiBQQ0FQX1RTVEFNUF9IT1NUX0xPV1BSRUMgLgogLlRQIDUKIC5CUiBQQ0FQX1RTVEFNUF9BREFQVEVSICIgLSAiIGFkYXB0ZXIKQEAgLTEyNiw2ICsxNDcsMTggQEAKIHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0ncyBjbG9jay4KIC5SRQogLkxQCitUaW1lIHN0YW1wcyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgc3lzdGVtIGNsb2NrIGNhbiBnbyBiYWNrd2FyZHMsIGFzIHRoZQorc3lzdGVtIGNsb2NrIGNhbiBnbyBiYWNrd2FyZHMuIElmIGEgY2xvY2sgaXMgbm90IGluIHN5bmMgd2l0aCB0aGUKK3N5c3RlbSBjbG9jaywgdGhhdCBjb3VsZCBiZSBiZWNhdXNlIHRoZSBzeXN0ZW0gY2xvY2sgaXNuJ3Qga2VlcGluZworYWNjdXJhdGUgdGltZSwgYmVjYXVzZSB0aGUgb3RoZXIgY2xvY2sgaXNuJ3Qga2VlcGluZyBhY2N1cmF0ZSB0aW1lLCBvcgorYm90aC4KKy5MUAorSG9zdC1wcm92aWRlZCB0aW1lIHN0YW1wcyBnZW5lcmFsbHkgY29ycmVzcG9uZCB0byB0aGUgdGltZSB3aGVuIHRoZQordGltZS1zdGFtcGluZyBjb2RlIHNlZXMgdGhlIHBhY2tldDsgdGhpcyBjb3VsZCBiZSBzb21lIHVua25vd24gYW1vdW50IG9mCit0aW1lIGFmdGVyIHRoZSBmaXJzdCBvciBsYXN0IGJpdCBvZiB0aGUgcGFja2V0IGlzIHJlY2VpdmVkIGJ5IHRoZQorbmV0d29yayBhZGFwdGVyLCBkdWUgdG8gYmF0Y2hpbmcgb2YgaW50ZXJydXB0cyBmb3IgcGFja2V0IGFycml2YWwsCitxdWV1ZWluZyBkZWxheXMsIGV0Yy4uCisuTFAKIEJ5IGRlZmF1bHQsIHdoZW4gcGVyZm9ybWluZyBhIGxpdmUgY2FwdHVyZSBvciByZWFkaW5nIGZyb20gYSBzYXZlZmlsZSwKIHRpbWUgc3RhbXBzIGFyZSBzdXBwbGllZCBhcyBzZWNvbmRzIHNpbmNlIEphbnVhcnkgMSwgMTk3MCwgMDA6MDA6MDAgVVRDLAogYW5kIG1pY3Jvc2Vjb25kcyBzaW5jZSB0aGF0IHNlY29uZHMgdmFsdWUsIGV2ZW4gaWYgaGlnaGVyLXJlc29sdXRpb24KQEAgLTEzNywyMSArMTcwLDIxIEBACiBUaGUKIC5CUiBwY2FwX3NldF90c3RhbXBfcHJlY2lzaW9uICgzUENBUCkKIHJvdXRpbmUgY2FuIGJlIHVzZWQgYWZ0ZXIgYQotLkIgcGNhcF9jcmVhdGUoKQorLkJSIHBjYXBfY3JlYXRlICgpCiBjYWxsIGFuZCBhZnRlciBhCi0uQiBwY2FwX2FjdGl2YXRlKCkKKy5CUiBwY2FwX2FjdGl2YXRlICgpCiBjYWxsIHRvIHNwZWNpZnkgdGhlIHJlc29sdXRpb24gb2YgdGhlIHRpbWUgc3RhbXBzIHRvIGdldCBmb3IgdGhlIGRldmljZS4KIElmIHRoZSBoYXJkd2FyZSBvciBzb2Z0d2FyZSBjYW5ub3Qgc3VwcGx5IGEgaGlnaGVyLXJlc29sdXRpb24gdGltZQogc3RhbXAsIHRoZQotLkIgcGNhcF9zZXRfdHN0YW1wX3ByZWNpc2lvbigpCisuQlIgcGNhcF9zZXRfdHN0YW1wX3ByZWNpc2lvbiAoKQogY2FsbCB3aWxsIGZhaWwsIGFuZCB0aGUgdGltZSBzdGFtcHMgc3VwcGxpZWQgYWZ0ZXIgdGhlCi0uQiBwY2FwX2FjdGl2YXRlKCkKKy5CUiBwY2FwX2FjdGl2YXRlICgpCiBjYWxsIHdpbGwgaGF2ZSBtaWNyb3NlY29uZCByZXNvbHV0aW9uLgogLkxQCiBXaGVuIG9wZW5pbmcgYSBzYXZlZmlsZSwgdGhlCi0uQlIgcGNhcF9vcGVuX29mZmxpbmVfd2l0aF90c3RhbXBfcHJlY2lzaW9uICgzUENBUCkKKy5CUiBcJXBjYXBfb3Blbl9vZmZsaW5lX3dpdGhfdHN0YW1wX3ByZWNpc2lvbiAoM1BDQVApCiBhbmQKLS5CUiBwY2FwX2ZvcGVuX29mZmxpbmVfd2l0aF90c3RhbXBfcHJlY2lzaW9uICgzUENBUCkKKy5CUiBcJXBjYXBfZm9wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24gKDNQQ0FQKQogcm91dGluZXMgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgcmVzb2x1dGlvbiBvZiB0aW1lIHN0YW1wcyB0byBiZSByZWFkCiBmcm9tIHRoZSBmaWxlOyBpZiB0aGUgdGltZSBzdGFtcHMgaW4gdGhlIGZpbGUgaGF2ZSBhIGxvd2VyIHJlc29sdXRpb24sCiB0aGUgZnJhY3Rpb24tb2YtYS1zZWNvbmQgcG9ydGlvbiBvZiB0aGUgdGltZSBzdGFtcHMgd2lsbCBiZSBzY2FsZWQgdG8KQEAgLTE2NSwxMyArMTk4LDQgQEAKIHJlYWRpbmcgYSBzYXZlZmlsZSwgdGhpcyBkb2VzIG5vdCBpbmRpY2F0ZSB0aGUgYWN0dWFsIHByZWNpc2lvbiBvZiB0aW1lCiBzdGFtcHMgaW4gdGhlIGZpbGUuCiAuU0ggU0VFIEFMU08KLS5uYQotcGNhcF9zZXRfdHN0YW1wX3R5cGUoM1BDQVApLAotcGNhcF9saXN0X3RzdGFtcF90eXBlcygzUENBUCksCi1wY2FwX3RzdGFtcF90eXBlX3ZhbF90b19uYW1lKDNQQ0FQKSwKLXBjYXBfdHN0YW1wX3R5cGVfbmFtZV90b192YWwoM1BDQVApLAotcGNhcF9zZXRfdHN0YW1wX3ByZWNpc2lvbigzUENBUCksCi1wY2FwX29wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24oM1BDQVApLAotXCVwY2FwX2ZvcGVuX29mZmxpbmVfd2l0aF90c3RhbXBfcHJlY2lzaW9uKDNQQ0FQKSwKLVwlcGNhcF9nZXRfdHN0YW1wX3ByZWNpc2lvbigzUENBUCkKLS5hZAorLkJSIHBjYXAgKDNQQ0FQKQpkaWZmIC0tZ2l0IGEvcGNhcC10eXBlcy5oIGIvcGNhcC10eXBlcy5oCmluZGV4IDk2MTRmOWYuLjdkMGZlODEgMTAwNjQ0Ci0tLSBhL3BjYXAtdHlwZXMuaAorKysgYi9wY2FwLXR5cGVzLmgKQEAgLTM1LDcgKzM1LDYgQEAKICAqIEdldCB1X2ludCBkZWZpbmVkLCBieSBob29rIG9yIGJ5IGNyb29rLgogICovCiAjaWZkZWYgX1dJTjMyCi0KICAgLyoKICAgICogVGhpcyBkZWZpbmVzIHVfaW50LgogICAgKi8KZGlmZiAtLWdpdCBhL3BjYXAtdXNiLWxpbnV4LmMgYi9wY2FwLXVzYi1saW51eC5jCmluZGV4IDZmOGFkZjYuLjM1OTY0MjggMTAwNjQ0Ci0tLSBhL3BjYXAtdXNiLWxpbnV4LmMKKysrIGIvcGNhcC11c2ItbGludXguYwpAQCAtNDEsMTUgKzQxLDE3IEBACiAjaW5jbHVkZSAicGNhcC11c2ItbGludXguaCIKICNpbmNsdWRlICJwY2FwL3VzYi5oIgogCisjaW5jbHVkZSAiZXh0cmFjdC5oIgorCiAjaWZkZWYgTkVFRF9TVFJFUlJPUl9ICiAjaW5jbHVkZSAic3RyZXJyb3IuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8ZGlyZW50Lmg+CiAjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KQEAgLTEzNSw3ICsxMzcsNyBAQAogc3RhdGljIGludCB1c2JfcmVhZF9saW51eChwY2FwX3QgKiwgaW50ICwgcGNhcF9oYW5kbGVyICwgdV9jaGFyICopOwogc3RhdGljIGludCB1c2JfcmVhZF9saW51eF9iaW4ocGNhcF90ICosIGludCAsIHBjYXBfaGFuZGxlciAsIHVfY2hhciAqKTsKIHN0YXRpYyBpbnQgdXNiX3JlYWRfbGludXhfbW1hcChwY2FwX3QgKiwgaW50ICwgcGNhcF9oYW5kbGVyICwgdV9jaGFyICopOwotc3RhdGljIGludCB1c2JfaW5qZWN0X2xpbnV4KHBjYXBfdCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CitzdGF0aWMgaW50IHVzYl9pbmplY3RfbGludXgocGNhcF90ICosIGNvbnN0IHZvaWQgKiwgaW50KTsKIHN0YXRpYyBpbnQgdXNiX3NldGRpcmVjdGlvbl9saW51eChwY2FwX3QgKiwgcGNhcF9kaXJlY3Rpb25fdCk7CiBzdGF0aWMgdm9pZCB1c2JfY2xlYW51cF9saW51eF9tbWFwKHBjYXBfdCAqKTsKIApAQCAtMTQ0LDcgKzE0Niw3IEBACiB7CiAJc3RydWN0IHV0c25hbWUgdXRzbmFtZTsKIAljaGFyICp2ZXJzaW9uX2NvbXBvbmVudCwgKmVuZHA7Ci0JaW50IG1ham9yLCBtaW5vciwgc3VibWlub3I7CisJbG9uZyBtYWpvciwgbWlub3IsIHN1Ym1pbm9yOwogCiAJaWYgKHVuYW1lKCZ1dHNuYW1lKSA9PSAwKSB7CiAJCS8qCkBAIC0yMjksNyArMjMxLDcgQEAKIHsKIAljaGFyIGRldl9uYW1lWzEwXTsKIAljaGFyIGRldl9kZXNjclszMF07Ci0JcGNhcF9zbnByaW50ZihkZXZfbmFtZSwgMTAsIFVTQl9JRkFDRSIlZCIsIG4pOworCXNucHJpbnRmKGRldl9uYW1lLCAxMCwgVVNCX0lGQUNFIiVkIiwgbik7CiAJLyoKIAkgKiBYWFggLSBpcyB0aGVyZSBhbnkgbm90aW9uIG9mICJ1cCIgYW5kICJydW5uaW5nIj8KIAkgKi8KQEAgLTI0MSw3ICsyNDMsNyBAQAogCQkgKi8KIAkJaWYgKGFkZF9kZXYoZGV2bGlzdHAsIGRldl9uYW1lLAogCQkgICAgUENBUF9JRl9DT05ORUNUSU9OX1NUQVRVU19OT1RfQVBQTElDQUJMRSwKLQkJICAgICJBbGwgVVNCIGJ1c2VzIiwgZXJyX3N0cikgPT0gTlVMTCkKKwkJICAgICJSYXcgVVNCIHRyYWZmaWMsIGFsbCBVU0IgYnVzZXMiLCBlcnJfc3RyKSA9PSBOVUxMKQogCQkJcmV0dXJuIC0xOwogCX0gZWxzZSB7CiAJCS8qCkBAIC0yNTAsNyArMjUyLDcgQEAKIAkJICogUENBUF9JRl9DT05ORUNUSU9OX1NUQVRVU19DT05ORUNURUQgb3IKIAkJICogUENBUF9JRl9DT05ORUNUSU9OX1NUQVRVU19ESVNDT05ORUNURUQ/CiAJCSAqLwotCQlwY2FwX3NucHJpbnRmKGRldl9kZXNjciwgMzAsICJVU0IgYnVzIG51bWJlciAlZCIsIG4pOworCQlzbnByaW50ZihkZXZfZGVzY3IsIDMwLCAiUmF3IFVTQiB0cmFmZmljLCBidXMgbnVtYmVyICVkIiwgbik7CiAJCWlmIChhZGRfZGV2KGRldmxpc3RwLCBkZXZfbmFtZSwgMCwgZGV2X2Rlc2NyLCBlcnJfc3RyKSA9PSBOVUxMKQogCQkJcmV0dXJuIC0xOwogCX0KQEAgLTI3OCw3ICsyODAsNyBAQAogCQkgKiBTcGxpdCBMSU5VWF9VU0JfTU9OX0RFViBpbnRvIGEgZGlyZWN0b3J5IHRoYXQgd2UnbGwKIAkJICogc2NhbiBhbmQgYSBmaWxlIG5hbWUgcHJlZml4IHRoYXQgd2UnbGwgY2hlY2sgZm9yLgogCQkgKi8KLQkJc3RybGNweSh1c2JfbW9uX2RpciwgTElOVVhfVVNCX01PTl9ERVYsIHNpemVvZiB1c2JfbW9uX2Rpcik7CisJCXBjYXBfc3RybGNweSh1c2JfbW9uX2RpciwgTElOVVhfVVNCX01PTl9ERVYsIHNpemVvZiB1c2JfbW9uX2Rpcik7CiAJCXVzYl9tb25fcHJlZml4ID0gc3RycmNocih1c2JfbW9uX2RpciwgJy8nKTsKIAkJaWYgKHVzYl9tb25fcHJlZml4ID09IE5VTEwpIHsKIAkJCS8qCkBAIC0zNjIsOSArMzY0LDkgQEAKIAkJCQlsZW4gPSBzdHJsZW4obmFtZSk7CiAKIAkJCQkvKiBpZiB0aGlzIGZpbGUgbmFtZSBkb2VzIG5vdCBlbmQgd2l0aCBhIG51bWJlciBpdCdzIG5vdCBvZiBvdXIgaW50ZXJlc3QgKi8KLQkJCQlpZiAoKGxlbiA8IDEpIHx8ICFpc2RpZ2l0KG5hbWVbLS1sZW5dKSkKKwkJCQlpZiAoKGxlbiA8IDEpIHx8ICFQQ0FQX0lTRElHSVQobmFtZVstLWxlbl0pKQogCQkJCQljb250aW51ZTsKLQkJCQl3aGlsZSAoaXNkaWdpdChuYW1lWy0tbGVuXSkpOworCQkJCXdoaWxlIChQQ0FQX0lTRElHSVQobmFtZVstLWxlbl0pKTsKIAkJCQlpZiAoc3NjYW5mKCZuYW1lW2xlbisxXSwgIiVkIiwgJm4pICE9IDEpCiAJCQkJCWNvbnRpbnVlOwogCkBAIC0zODAsMTggKzM4MiwxMDIgQEAKIAl9CiB9CiAKKy8qCisgKiBNYXRjaGVzIHdoYXQncyBpbiBtb25fYmluLmMgaW4gdGhlIExpbnV4IGtlcm5lbC4KKyAqLworI2RlZmluZSBNSU5fUklOR19TSVpFCSg4KjEwMjQpCisjZGVmaW5lIE1BWF9SSU5HX1NJWkUJKDEyMDAqMTAyNCkKKworc3RhdGljIGludAordXNiX3NldF9yaW5nX3NpemUocGNhcF90KiBoYW5kbGUsIGludCBoZWFkZXJfc2l6ZSkKK3sKKwkvKgorCSAqIEEgcGFja2V0IGZyb20gYmluYXJ5IHVzYm1vbiBoYXM6CisJICoKKwkgKiAgMSkgYSBmaXhlZC1sZW5ndGggaGVhZGVyLCBvZiBzaXplIGhlYWRlcl9zaXplOworCSAqICAyKSBkZXNjcmlwdG9ycywgZm9yIGlzb2Nocm9ub3VzIHRyYW5zZmVyczsKKwkgKiAgMykgdGhlIHBheWxvYWQuCisJICoKKwkgKiBUaGUga2VybmVsIGJ1ZmZlciBoYXMgYSBzaXplLCBkZWZhdWx0aW5nIHRvIDMwMEtCLCB3aXRoIGEKKwkgKiBtaW5pbXVtIG9mIDhLQiBhbmQgYSBtYXhpbXVtIG9mIDEyMDBLQi4gIFRoZSBzaXplIGlzIHNldCB3aXRoCisJICogdGhlIE1PTl9JT0NUX1JJTkdfU0laRSBpb2N0bDsgdGhlIHNpemUgcGFzc2VkIGluIGlzIHJvdW5kZWQgdXAKKwkgKiB0byBhIHBhZ2Ugc2l6ZS4KKwkgKgorCSAqIE5vIG1vcmUgdGhhbiB7YnVmZmVyIHNpemV9LzUgYnl0ZXMgd29ydGggb2YgcGF5bG9hZCBpcyBzYXZlZC4KKwkgKiBUaGVyZWZvcmUsIGlmIHdlIHN1YnRyYWN0IHRoZSBmaXhlZC1sZW5ndGggc2l6ZSBmcm9tIHRoZQorCSAqIHNuYXBzaG90IGxlbmd0aCwgd2UgaGF2ZSB0aGUgYmlnZ2VzdCBwYXlsb2FkIHdlIHdhbnQgKHdlCisJICogZG9uJ3Qgd29ycnkgYWJvdXQgdGhlIGRlc2NyaXB0b3JzIC0gaWYgd2UgaGF2ZSBkZXNjcmlwdG9ycywKKwkgKiB3ZSdsbCBqdXN0IGRpc2NhcmQgdGhlIGxhc3QgYml0IG9mIHRoZSBwYXlsb2FkIHRvIGdldCBpdAorCSAqIHRvIGZpdCkuICBXZSBtdWx0aXBseSB0aGF0IHJlc3VsdCBieSA1IGFuZCBzZXQgdGhlIGJ1ZmZlcgorCSAqIHNpemUgdG8gdGhhdCB2YWx1ZS4KKwkgKi8KKwlpbnQgcmluZ19zaXplOworCisJaWYgKGhhbmRsZS0+c25hcHNob3QgPCBoZWFkZXJfc2l6ZSkKKwkJaGFuZGxlLT5zbmFwc2hvdCA9IGhlYWRlcl9zaXplOworCS8qIFRoZSBtYXhpbXVtIHNuYXBzaG90IHNpemUgaXMgc21hbGwgZW5vdWdoIHRoYXQgdGhpcyB3b24ndCBvdmVyZmxvdyAqLworCXJpbmdfc2l6ZSA9IChoYW5kbGUtPnNuYXBzaG90IC0gaGVhZGVyX3NpemUpICogNTsKKworCS8qCisJICogV2lsbCB0aGlzIGdldCBhbiBlcnJvcj8KKwkgKiAoVGhlcmUncyBubyB3cXkgdG8gcXVlcnkgdGhlIG1pbmltdW0gb3IgbWF4aW11bSwgc28gd2UganVzdAorCSAqIGNvcHkgdGhlIHZhbHVlIGZyb20gdGhlIGtlcm5lbCBzb3VyY2UuICBXZSBkb24ndCByb3VuZCBpdAorCSAqIHVwIHRvIGEgbXVsdGlwbGUgb2YgdGhlIHBhZ2Ugc2l6ZS4pCisJICovCisJaWYgKHJpbmdfc2l6ZSA+IE1BWF9SSU5HX1NJWkUpIHsKKwkJLyoKKwkJICogWWVzLiAgTG93ZXIgdGhlIHJpbmcgc2l6ZSB0byB0aGUgbWF4aW11bSwgYW5kIHNldCB0aGUKKwkJICogc25hcHNob3QgbGVuZ3RoIHRvIHRoZSB2YWx1ZSB0aGF0IHdvdWxkIGdpdmUgdXMgYQorCQkgKiBtYXhpbXVtLXNpemUgcmluZy4KKwkJICovCisJCXJpbmdfc2l6ZSA9IE1BWF9SSU5HX1NJWkU7CisJCWhhbmRsZS0+c25hcHNob3QgPSBoZWFkZXJfc2l6ZSArIChNQVhfUklOR19TSVpFLzUpOworCX0gZWxzZSBpZiAocmluZ19zaXplIDwgTUlOX1JJTkdfU0laRSkgeworCQkvKgorCQkgKiBZZXMuICBSYWlzZSB0aGUgcmluZyBzaXplIHRvIHRoZSBtaW5pbXVtLCBidXQgbGVhdmUKKwkJICogdGhlIHNuYXBzaG90IGxlbmd0aCB1bmNoYW5nZWQsIHNvIHdlIHNob3cgdGhlCisJCSAqIGNhbGxiYWNrIG5vIG1vcmUgZGF0YSB0aGFuIHNwZWNpZmllZCBieSB0aGUKKwkJICogc25hcHNob3QgbGVuZ3RoLgorCQkgKi8KKwkJcmluZ19zaXplID0gTUlOX1JJTkdfU0laRTsKKwl9CisKKwlpZiAoaW9jdGwoaGFuZGxlLT5mZCwgTU9OX0lPQ1RfUklOR19TSVpFLCByaW5nX3NpemUpID09IC0xKSB7CisJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICBlcnJubywgIkNhbid0IHNldCByaW5nIHNpemUgZnJvbSBmZCAlZCIsIGhhbmRsZS0+ZmQpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiByaW5nX3NpemU7Cit9CisKIHN0YXRpYwogaW50IHVzYl9tbWFwKHBjYXBfdCogaGFuZGxlKQogewogCXN0cnVjdCBwY2FwX3VzYl9saW51eCAqaGFuZGxlcCA9IGhhbmRsZS0+cHJpdjsKLQlpbnQgbGVuID0gaW9jdGwoaGFuZGxlLT5mZCwgTU9OX0lPQ1FfUklOR19TSVpFKTsKLQlpZiAobGVuIDwgMCkKKwlpbnQgbGVuOworCisJLyoKKwkgKiBBdHRlbXB0IHRvIHNldCB0aGUgcmluZyBzaXplIGFzIGFwcHJvcHJpYXRlIGZvciB0aGUgc25hcHNob3QKKwkgKiBsZW5ndGgsIHJlZHVjaW5nIHRoZSBzbmFwc2hvdCBsZW5ndGggaWYgdGhhdCdkIG1ha2UgdGhlIHJpbmcKKwkgKiBiaWdnZXIgdGhhbiB0aGUga2VybmVsIHN1cHBvcnRzLgorCSAqLworCWxlbiA9IHVzYl9zZXRfcmluZ19zaXplKGhhbmRsZSwgKGludClzaXplb2YocGNhcF91c2JfaGVhZGVyX21tYXBwZWQpKTsKKwlpZiAobGVuID09IC0xKSB7CisJCS8qIEZhaWxlZC4gIEZhbGwgYmFjayBvbiBub24tbWVtb3J5LW1hcHBlZCBhY2Nlc3MuICovCiAJCXJldHVybiAwOworCX0KIAogCWhhbmRsZXAtPm1tYXBidWZsZW4gPSBsZW47CiAJaGFuZGxlcC0+bW1hcGJ1ZiA9IG1tYXAoMCwgaGFuZGxlcC0+bW1hcGJ1ZmxlbiwgUFJPVF9SRUFELAogCSAgICBNQVBfU0hBUkVELCBoYW5kbGUtPmZkLCAwKTsKLQlyZXR1cm4gaGFuZGxlcC0+bW1hcGJ1ZiAhPSBNQVBfRkFJTEVEOworCWlmIChoYW5kbGVwLT5tbWFwYnVmID09IE1BUF9GQUlMRUQpIHsKKwkJLyoKKwkJICogRmFpbGVkLiAgV2UgZG9uJ3QgdHJlYXQgdGhhdCBhcyBhIGZhdGFsIGVycm9yLCB3ZQorCQkgKiBqdXN0IHRyeSB0byBmYWxsIGJhY2sgb24gbm9uLW1lbW9yeS1tYXBwZWQgYWNjZXNzLgorCQkgKi8KKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOwogfQogCiAjaWZkZWYgSEFWRV9MSU5VWF9VU0JERVZJQ0VfRlNfSApAQCAtNDA1LDYgKzQ5MSwxMCBAQAogI2RlZmluZSBVU0JfUkVRX0dFVF9ERVNDUklQVE9SCTYKIAogI2RlZmluZSBVU0JfRFRfREVWSUNFCQkxCisjZGVmaW5lIFVTQl9EVF9DT05GSUcJCTIKKworI2RlZmluZSBVU0JfREVWSUNFX0RFU0NSSVBUT1JfU0laRQkxOAorI2RlZmluZSBVU0JfQ09ORklHX0RFU0NSSVBUT1JfU0laRQk5CiAKIC8qIHByb2JlIHRoZSBkZXNjcmlwdG9ycyBvZiB0aGUgZGV2aWNlcyBhdHRhY2hlZCB0byB0aGUgYnVzICovCiAvKiB0aGUgZGVzY3JpcHRvcnMgd2lsbCBlbmQgdXAgaW4gdGhlIGNhcHR1cmVkIHBhY2tldCBzdHJlYW0gKi8KQEAgLTQxNiwxMiArNTA2LDE0IEBACiAJc3RydWN0IHVzYmRldmZzX2N0cmx0cmFuc2ZlciBjdHJsOwogCXN0cnVjdCBkaXJlbnQqIGRhdGE7CiAJaW50IHJldCA9IDA7Ci0JY2hhciBidWZbc2l6ZW9mKCIvZGV2L2J1cy91c2IvMDAwLyIpICsgTkFNRV9NQVhdOworCWNoYXIgYnVzZGV2cGF0aFtzaXplb2YoIi9kZXYvYnVzL3VzYi8wMDAvIikgKyBOQU1FX01BWF07CiAJRElSKiBkaXI7CisJdWludDhfdCBkZXNjcmlwdG9yW1VTQl9ERVZJQ0VfREVTQ1JJUFRPUl9TSVpFXTsKKwl1aW50OF90IGNvbmZpZ2Rlc2NbVVNCX0NPTkZJR19ERVNDUklQVE9SX1NJWkVdOwogCiAJLyogc2NhbiB1c2IgYnVzIGRpcmVjdG9yaWVzIGZvciBkZXZpY2Ugbm9kZXMgKi8KLQlwY2FwX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIvZGV2L2J1cy91c2IvJTAzZCIsIGJ1cyk7Ci0JZGlyID0gb3BlbmRpcihidWYpOworCXNucHJpbnRmKGJ1c2RldnBhdGgsIHNpemVvZihidXNkZXZwYXRoKSwgIi9kZXYvYnVzL3VzYi8lMDNkIiwgYnVzKTsKKwlkaXIgPSBvcGVuZGlyKGJ1c2RldnBhdGgpOwogCWlmICghZGlyKQogCQlyZXR1cm47CiAKQEAgLTQzMiw5ICs1MjQsOSBAQAogCQlpZiAobmFtZVswXSA9PSAnLicpCiAJCQljb250aW51ZTsKIAotCQlwY2FwX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIvZGV2L2J1cy91c2IvJTAzZC8lcyIsIGJ1cywgZGF0YS0+ZF9uYW1lKTsKKwkJc25wcmludGYoYnVzZGV2cGF0aCwgc2l6ZW9mKGJ1c2RldnBhdGgpLCAiL2Rldi9idXMvdXNiLyUwM2QvJXMiLCBidXMsIGRhdGEtPmRfbmFtZSk7CiAKLQkJZmQgPSBvcGVuKGJ1ZiwgT19SRFdSKTsKKwkJZmQgPSBvcGVuKGJ1c2RldnBhdGgsIE9fUkRXUik7CiAJCWlmIChmZCA9PSAtMSkKIAkJCWNvbnRpbnVlOwogCkBAIC00NDcsMTkgKzUzOSw0MyBAQAogCQljdHJsLmJSZXF1ZXN0ID0gVVNCX1JFUV9HRVRfREVTQ1JJUFRPUjsKIAkJY3RybC53VmFsdWUgPSBVU0JfRFRfREVWSUNFIDw8IDg7CiAJCWN0cmwud0luZGV4ID0gMDsKLSAJCWN0cmwud0xlbmd0aCA9IHNpemVvZihidWYpOworIAkJY3RybC53TGVuZ3RoID0gc2l6ZW9mKGRlc2NyaXB0b3IpOwogI2Vsc2UKIAkJY3RybC5yZXF1ZXN0dHlwZSA9IFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9TVEFOREFSRCB8IFVTQl9SRUNJUF9ERVZJQ0U7CiAJCWN0cmwucmVxdWVzdCA9IFVTQl9SRVFfR0VUX0RFU0NSSVBUT1I7CiAJCWN0cmwudmFsdWUgPSBVU0JfRFRfREVWSUNFIDw8IDg7CiAJCWN0cmwuaW5kZXggPSAwOwotIAkJY3RybC5sZW5ndGggPSBzaXplb2YoYnVmKTsKKyAJCWN0cmwubGVuZ3RoID0gc2l6ZW9mKGRlc2NyaXB0b3IpOwogI2VuZGlmCi0JCWN0cmwuZGF0YSA9IGJ1ZjsKKwkJY3RybC5kYXRhID0gZGVzY3JpcHRvcjsKIAkJY3RybC50aW1lb3V0ID0gQ1RSTF9USU1FT1VUOwogCiAJCXJldCA9IGlvY3RsKGZkLCBVU0JERVZGU19DT05UUk9MLCAmY3RybCk7CiAKKwkJLyogUmVxdWVzdCBDT05GSUdVUkFUSU9OIGRlc2NyaXB0b3IgYWxvbmUgdG8ga25vdyB3VG90YWxMZW5ndGggKi8KKyNpZmRlZiBIQVZFX1NUUlVDVF9VU0JERVZGU19DVFJMVFJBTlNGRVJfQlJFUVVFU1RUWVBFCisJCWN0cmwud1ZhbHVlID0gVVNCX0RUX0NPTkZJRyA8PCA4OworCQljdHJsLndMZW5ndGggPSBzaXplb2YoY29uZmlnZGVzYyk7CisjZWxzZQorCQljdHJsLnZhbHVlID0gVVNCX0RUX0NPTkZJRyA8PCA4OworCQljdHJsLmxlbmd0aCA9IHNpemVvZihjb25maWdkZXNjKTsKKyNlbmRpZgorCQljdHJsLmRhdGEgPSBjb25maWdkZXNjOworCQlyZXQgPSBpb2N0bChmZCwgVVNCREVWRlNfQ09OVFJPTCwgJmN0cmwpOworCQlpZiAocmV0ID49IDApIHsKKwkJCXVpbnQxNl90IHd0b3RhbGxlbmd0aDsKKwkJCXd0b3RhbGxlbmd0aCA9IEVYVFJBQ1RfTEVfVV8yKCZjb25maWdkZXNjWzJdKTsKKyNpZmRlZiBIQVZFX1NUUlVDVF9VU0JERVZGU19DVFJMVFJBTlNGRVJfQlJFUVVFU1RUWVBFCisJCQljdHJsLndMZW5ndGggPSB3dG90YWxsZW5ndGg7CisjZWxzZQorCQkJY3RybC5sZW5ndGggPSB3dG90YWxsZW5ndGg7CisjZW5kaWYKKwkJCWN0cmwuZGF0YSA9IG1hbGxvYyh3dG90YWxsZW5ndGgpOworCQkJaWYgKGN0cmwuZGF0YSkgeworCQkJCXJldCA9IGlvY3RsKGZkLCBVU0JERVZGU19DT05UUk9MLCAmY3RybCk7CisJCQkJZnJlZShjdHJsLmRhdGEpOworCQkJfQorCQl9CiAJCWNsb3NlKGZkKTsKIAl9CiAJY2xvc2VkaXIoZGlyKTsKQEAgLTUwMSw3ICs2MTcsNyBAQAogCS8qIE9LLCBpdCdzIHByb2JhYmx5IG91cnMuICovCiAJKmlzX291cnMgPSAxOwogCi0JcCA9IHBjYXBfY3JlYXRlX2NvbW1vbihlYnVmLCBzaXplb2YgKHN0cnVjdCBwY2FwX3VzYl9saW51eCkpOworCXAgPSBQQ0FQX0NSRUFURV9DT01NT04oZWJ1Ziwgc3RydWN0IHBjYXBfdXNiX2xpbnV4KTsKIAlpZiAocCA9PSBOVUxMKQogCQlyZXR1cm4gKE5VTEwpOwogCkBAIC01MTQsNiArNjMwLDcgQEAKIHsKIAlzdHJ1Y3QgcGNhcF91c2JfbGludXggKmhhbmRsZXAgPSBoYW5kbGUtPnByaXY7CiAJY2hhciAJCWZ1bGxfcGF0aFtVU0JfTElORV9MRU5dOworCWludAkJcmV0OwogCiAJLyoKIAkgKiBUdXJuIGEgbmVnYXRpdmUgc25hcHNob3QgdmFsdWUgKGludmFsaWQpLCBhIHNuYXBzaG90IHZhbHVlIG9mCkBAIC01NDEsNyArNjU4LDcgQEAKIAkvKmdldCB1c2IgYnVzIGluZGV4IGZyb20gZGV2aWNlIG5hbWUgKi8KIAlpZiAoc3NjYW5mKGhhbmRsZS0+b3B0LmRldmljZSwgVVNCX0lGQUNFIiVkIiwgJmhhbmRsZXAtPmJ1c19pbmRleCkgIT0gMSkKIAl7Ci0JCXBjYXBfc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCXNucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJIkNhbid0IGdldCBVU0IgYnVzIGluZGV4IGZyb20gJXMiLCBoYW5kbGUtPm9wdC5kZXZpY2UpOwogCQlyZXR1cm4gUENBUF9FUlJPUjsKIAl9CkBAIC01NTIsNyArNjY5LDcgQEAKIAkJICogV2UgaGF2ZSBiaW5hcnktbW9kZSBzdXBwb3J0LgogCQkgKiBUcnkgdG8gb3BlbiB0aGUgYmluYXJ5IGludGVyZmFjZS4KIAkJICovCi0JCXBjYXBfc25wcmludGYoZnVsbF9wYXRoLCBVU0JfTElORV9MRU4sIExJTlVYX1VTQl9NT05fREVWIiVkIiwgaGFuZGxlcC0+YnVzX2luZGV4KTsKKwkJc25wcmludGYoZnVsbF9wYXRoLCBVU0JfTElORV9MRU4sIExJTlVYX1VTQl9NT05fREVWIiVkIiwgaGFuZGxlcC0+YnVzX2luZGV4KTsKIAkJaGFuZGxlLT5mZCA9IG9wZW4oZnVsbF9wYXRoLCBPX1JET05MWSwgMCk7CiAJCWlmIChoYW5kbGUtPmZkIDwgMCkKIAkJewpAQCAtNjA0LDYgKzcyMSw3IEBACiAJCS8qIHRyeSB0byB1c2UgZmFzdCBtbWFwIGFjY2VzcyAqLwogCQlpZiAodXNiX21tYXAoaGFuZGxlKSkKIAkJeworCQkJLyogV2Ugc3VjY2VlZGVkLiAqLwogCQkJaGFuZGxlLT5saW5rdHlwZSA9IERMVF9VU0JfTElOVVhfTU1BUFBFRDsKIAkJCWhhbmRsZS0+c3RhdHNfb3AgPSB1c2Jfc3RhdHNfbGludXhfYmluOwogCQkJaGFuZGxlLT5yZWFkX29wID0gdXNiX3JlYWRfbGludXhfbW1hcDsKQEAgLTYyMCw3ICs3MzgsMTkgQEAKIAkJCXJldHVybiAwOwogCQl9CiAKLQkJLyogY2FuJ3QgbW1hcCwgdXNlIHBsYWluIGJpbmFyeSBpbnRlcmZhY2UgYWNjZXNzICovCisJCS8qCisJCSAqIFdlIGZhaWxlZDsgdHJ5IHBsYWluIGJpbmFyeSBpbnRlcmZhY2UgYWNjZXNzLgorCQkgKgorCQkgKiBBdHRlbXB0IHRvIHNldCB0aGUgcmluZyBzaXplIGFzIGFwcHJvcHJpYXRlIGZvcgorCQkgKiB0aGUgc25hcHNob3QgbGVuZ3RoLCByZWR1Y2luZyB0aGUgc25hcHNob3QgbGVuZ3RoCisJCSAqIGlmIHRoYXQnZCBtYWtlIHRoZSByaW5nIGJpZ2dlciB0aGFuIHRoZSBrZXJuZWwKKwkJICogc3VwcG9ydHMuCisJCSAqLworCQlpZiAodXNiX3NldF9yaW5nX3NpemUoaGFuZGxlLCAoaW50KXNpemVvZihwY2FwX3VzYl9oZWFkZXIpKSA9PSAtMSkgeworCQkJLyogRmFpbGVkLiAqLworCQkJY2xvc2UoaGFuZGxlLT5mZCk7CisJCQlyZXR1cm4gUENBUF9FUlJPUjsKKwkJfQogCQloYW5kbGUtPnN0YXRzX29wID0gdXNiX3N0YXRzX2xpbnV4X2JpbjsKIAkJaGFuZGxlLT5yZWFkX29wID0gdXNiX3JlYWRfbGludXhfYmluOwogI2lmZGVmIEhBVkVfTElOVVhfVVNCREVWSUNFX0ZTX0gKQEAgLTYzMiw3ICs3NjIsNyBAQAogCQkgKiBXZSBkb24ndCBoYXZlIGJpbmFyeSBtb2RlIHN1cHBvcnQuCiAJCSAqIFRyeSBvcGVuaW5nIHRoZSB0ZXh0LW1vZGUgZGV2aWNlLgogCQkgKi8KLQkJcGNhcF9zbnByaW50ZihmdWxsX3BhdGgsIFVTQl9MSU5FX0xFTiwgVVNCX1RFWFRfRElSIi8lZHQiLCBoYW5kbGVwLT5idXNfaW5kZXgpOworCQlzbnByaW50ZihmdWxsX3BhdGgsIFVTQl9MSU5FX0xFTiwgVVNCX1RFWFRfRElSIi8lZHQiLCBoYW5kbGVwLT5idXNfaW5kZXgpOwogCQloYW5kbGUtPmZkID0gb3BlbihmdWxsX3BhdGgsIE9fUkRPTkxZLCAwKTsKIAkJaWYgKGhhbmRsZS0+ZmQgPCAwKQogCQl7CkBAIC02NDIsNDIgKzc3Miw0MiBAQAogCQkJCSAqIE5vdCBmb3VuZCBhdCB0aGUgbmV3IGxvY2F0aW9uOyB0cnkKIAkJCQkgKiB0aGUgb2xkIGxvY2F0aW9uLgogCQkJCSAqLwotCQkJCXBjYXBfc25wcmludGYoZnVsbF9wYXRoLCBVU0JfTElORV9MRU4sIFVTQl9URVhUX0RJUl9PTEQiLyVkdCIsIGhhbmRsZXAtPmJ1c19pbmRleCk7CisJCQkJc25wcmludGYoZnVsbF9wYXRoLCBVU0JfTElORV9MRU4sIFVTQl9URVhUX0RJUl9PTEQiLyVkdCIsIGhhbmRsZXAtPmJ1c19pbmRleCk7CiAJCQkJaGFuZGxlLT5mZCA9IG9wZW4oZnVsbF9wYXRoLCBPX1JET05MWSwgMCk7CiAJCQl9CiAJCQlpZiAoaGFuZGxlLT5mZCA8IDApIHsKLQkJCQkvKgotCQkJCSAqIElzIHRoZSBwcm9ibGVtIHRoYXQgd2UgZGlkbid0IGhhdmUKLQkJCQkgKiBzdWZmaWNpZW50IHBlcm1pc3Npb24gdG8gb3BlbiBpdD8KLQkJCQkgKi8KLQkJCQlpZiAoZXJybm8gPT0gRUFDQ0VTKSB7CisJCQkJaWYgKGVycm5vID09IEVOT0VOVCkKKwkJCQl7CiAJCQkJCS8qCi0JCQkJCSAqIFllcyAtIHJldHVybiB0aGF0IGVycm9yLgorCQkJCQkgKiBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBmaWxlCisJCQkJCSAqIGRvZXNuJ3QgZXhpc3QuICBSZXBvcnQgdGhhdCBhcworCQkJCQkgKiAibm8gc3VjaCBkZXZpY2UiLiAgKFRoYXQgY291bGQKKwkJCQkJICogbWVhbiAibm8gc3VjaCBVU0IgYnVzIiBvcgorCQkJCQkgKiAibW9uaXRvcmluZyBub3Qgc3VwcG9ydGVkIi4pCiAJCQkJCSAqLwotCQkJCQlyZXR1cm4gUENBUF9FUlJPUl9QRVJNX0RFTklFRDsKKwkJCQkJcmV0ID0gUENBUF9FUlJPUl9OT19TVUNIX0RFVklDRTsKIAkJCQl9Ci0KLQkJCQkvKgotCQkJCSAqIE5vIC0gd2FzIHRoZSBwcm9ibGVtIHNvbWV0aGluZyBvdGhlcgotCQkJCSAqIHRoYW4gIml0IGRvZXNuJ3QgZXhpc3QiPwotCQkJCSAqLwotCQkJCWlmIChlcnJubyAhPSBFTk9FTlQpIHsKKwkJCQllbHNlIGlmIChlcnJubyA9PSBFQUNDRVMpCisJCQkJewogCQkJCQkvKgotCQkJCQkgKiBZZXMgLSByZXR1cm4gKnRoYXQqIGVycm9yLgorCQkJCQkgKiBUaGUgcHJvYmxlbSBpcyB0aGF0IHdlIGRvbid0CisJCQkJCSAqIGhhdmUgc3VmZmljaWVudCBwZXJtaXNzaW9uIHRvCisJCQkJCSAqIG9wZW4gdGhlIGZpbGUuICBSZXBvcnQgdGhhdC4KIAkJCQkJICovCi0JCQkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oaGFuZGxlLT5lcnJidWYsCi0JCQkJCSAgICBQQ0FQX0VSUkJVRl9TSVpFLCBlcnJubywKLQkJCQkJICAgICJDYW4ndCBvcGVuIFVTQiBidXMgZmlsZSAlcyIsCi0JCQkJCSAgICBmdWxsX3BhdGgpOwotCQkJCQlyZXR1cm4gUENBUF9FUlJPUjsKKwkJCQkJcmV0ID0gUENBUF9FUlJPUl9QRVJNX0RFTklFRDsKIAkJCQl9Ci0KLQkJCQkvKgotCQkJCSAqIE5vLiAgUmVwb3J0IHRoYXQgYXMgIm5vIHN1Y2ggZGV2aWNlIi4KLQkJCQkgKiAoVGhhdCBjb3VsZCBtZWFuICJubyBzdWNoIFVTQiBidXMiCi0JCQkJICogb3IgIm1vbml0b3Jpbmcgbm90IHN1cHBvcnRlZCIuKQotCQkJCSAqLwotCQkJCXJldHVybiBQQ0FQX0VSUk9SX05PX1NVQ0hfREVWSUNFOworCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIFNvbWUgb3RoZXIgZXJyb3IuCisJCQkJCSAqLworCQkJCQlyZXQgPSBQQ0FQX0VSUk9SOworCQkJCX0KKwkJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGhhbmRsZS0+ZXJyYnVmLAorCQkJCSAgICBQQ0FQX0VSUkJVRl9TSVpFLCBlcnJubywKKwkJCQkgICAgIkNhbid0IG9wZW4gVVNCIGJ1cyBmaWxlICVzIiwKKwkJCQkgICAgZnVsbF9wYXRoKTsKKwkJCQlyZXR1cm4gcmV0OwogCQkJfQogCQl9CiAKQEAgLTczMyw2ICs4NjMsNyBAQAogCXN0cnVjdCBwY2FwX3VzYl9saW51eCAqaGFuZGxlcCA9IGhhbmRsZS0+cHJpdjsKIAl1bnNpZ25lZCB0aW1lc3RhbXA7CiAJaW50IHRhZywgY250LCBlcF9udW0sIGRldl9hZGRyLCBkdW1teSwgcmV0LCB1cmJfbGVuLCBkYXRhX2xlbjsKKwlzc2l6ZV90IHJlYWRfcmV0OwogCWNoYXIgZXR5cGUsIHBpcGVpZDEsIHBpcGVpZDIsIHN0YXR1c1sxNl0sIHVyYl90YWcsIGxpbmVbVVNCX0xJTkVfTEVOXTsKIAljaGFyICpzdHJpbmcgPSBsaW5lOwogCXVfY2hhciAqIHJhd2RhdGEgPSBoYW5kbGUtPmJ1ZmZlcjsKQEAgLTc0MywxNCArODc0LDE0IEBACiAKIAkvKiBpZ25vcmUgaW50ZXJydXB0IHN5c3RlbSBjYWxsIGVycm9ycyAqLwogCWRvIHsKLQkJcmV0ID0gcmVhZChoYW5kbGUtPmZkLCBsaW5lLCBVU0JfTElORV9MRU4gLSAxKTsKKwkJcmVhZF9yZXQgPSByZWFkKGhhbmRsZS0+ZmQsIGxpbmUsIFVTQl9MSU5FX0xFTiAtIDEpOwogCQlpZiAoaGFuZGxlLT5icmVha19sb29wKQogCQl7CiAJCQloYW5kbGUtPmJyZWFrX2xvb3AgPSAwOwogCQkJcmV0dXJuIC0yOwogCQl9Ci0JfSB3aGlsZSAoKHJldCA9PSAtMSkgJiYgKGVycm5vID09IEVJTlRSKSk7Ci0JaWYgKHJldCA8IDApCisJfSB3aGlsZSAoKHJlYWRfcmV0ID09IC0xKSAmJiAoZXJybm8gPT0gRUlOVFIpKTsKKwlpZiAocmVhZF9yZXQgPCAwKQogCXsKIAkJaWYgKGVycm5vID09IEVBR0FJTikKIAkJCXJldHVybiAwOwkvKiBubyBkYXRhIHRoZXJlICovCkBAIC03NjIsMTUgKzg5MywxOSBAQAogCiAJLyogcmVhZCB1cmIgaGVhZGVyOyAlbiBhcmd1bWVudCBtYXkgaW5jcmVtZW50IHJldHVybiB2YWx1ZSwgYnV0IGl0J3MKIAkqIG5vdCBtYW5kYXRvcnksIHNvIGRvZXMgbm90IGNvdW50IG9uIGl0Ki8KLQlzdHJpbmdbcmV0XSA9IDA7CisJc3RyaW5nW3JlYWRfcmV0XSA9IDA7CiAJcmV0ID0gc3NjYW5mKHN0cmluZywgIiV4ICVkICVjICVjJWM6JWQ6JWQgJXMlbiIsICZ0YWcsICZ0aW1lc3RhbXAsICZldHlwZSwKIAkJJnBpcGVpZDEsICZwaXBlaWQyLCAmZGV2X2FkZHIsICZlcF9udW0sIHN0YXR1cywKIAkJJmNudCk7CiAJaWYgKHJldCA8IDgpCiAJewotCQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkgICAgIkNhbid0IHBhcnNlIFVTQiBidXMgbWVzc2FnZSAnJXMnLCB0b28gZmV3IHRva2VucyAoZXhwZWN0ZWQgOCBnb3QgJWQpIiwKLQkJICAgIHN0cmluZywgcmV0KTsKKwkJY2hhciBzdHJpbmdfdHJ1bmNhdGVkWzE4MV07CisKKwkJc3RybmNweShzdHJpbmdfdHJ1bmNhdGVkLCBzdHJpbmcsIHNpemVvZihzdHJpbmdfdHJ1bmNhdGVkKSk7CisJCXN0cmluZ190cnVuY2F0ZWRbc2l6ZW9mKHN0cmluZ190cnVuY2F0ZWQpIC0gMV0gPSAwOworCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCSAiQ2FuJ3QgcGFyc2UgVVNCIGJ1cyBtZXNzYWdlICclcycsIHRvbyBmZXcgdG9rZW5zIChleHBlY3RlZCA4IGdvdCAlZCkiLAorCQkJIHN0cmluZ190cnVuY2F0ZWQsIHJldCk7CiAJCXJldHVybiAtMTsKIAl9CiAJdWhkci0+aWQgPSB0YWc7CkBAIC03ODcsNyArOTIyLDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAl1aGRyLT50c19zZWMgPSBwa3RoLnRzLnR2X3NlYzsKLQl1aGRyLT50c191c2VjID0gcGt0aC50cy50dl91c2VjOworCXVoZHItPnRzX3VzZWMgPSAoaW50MzJfdClwa3RoLnRzLnR2X3VzZWM7CiAKIAkvKiBwYXJzZSBlbmRwb2ludCBpbmZvcm1hdGlvbiAqLwogCWlmIChwaXBlaWQxID09ICdDJykKQEAgLTgzMyw3ICs5NjgsNyBAQAogCQlzdHI1LCAmY250KTsKIAkJaWYgKHJldCA8IDUpCiAJCXsKLQkJCXBjYXBfc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCQkiQ2FuJ3QgcGFyc2UgVVNCIGJ1cyBtZXNzYWdlICclcycsIHRvbyBmZXcgdG9rZW5zIChleHBlY3RlZCA1IGdvdCAlZCkiLAogCQkJCXN0cmluZywgcmV0KTsKIAkJCXJldHVybiAtMTsKQEAgLTg1Nyw3ICs5OTIsNyBAQAogCXJldCA9IHNzY2FuZihzdHJpbmcsICIgJWQlbiIsICZ1cmJfbGVuLCAmY250KTsKIAlpZiAocmV0IDwgMSkKIAl7Ci0JCXBjYXBfc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCXNucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkgICJDYW4ndCBwYXJzZSB1cmIgbGVuZ3RoIGZyb20gJyVzJyIsIHN0cmluZyk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC04NzUsNyArMTAxMCw3IEBACiAJLyogY2hlY2sgZm9yIGRhdGEgcHJlc2VuY2U7IGRhdGEgaXMgcHJlc2VudCBpZiBhbmQgb25seSBpZiB1cmIgdGFnIGlzICc9JyAqLwogCWlmIChzc2NhbmYoc3RyaW5nLCAiICVjIiwgJnVyYl90YWcpICE9IDEpCiAJewotCQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSJDYW4ndCBwYXJzZSB1cmIgdGFnIGZyb20gJyVzJyIsIHN0cmluZyk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC05MTEsNyArMTA0Niw3IEBACiAJCXBrdGguY2FwbGVuID0gKGJwZl91X2ludDMyKWhhbmRsZS0+c25hcHNob3Q7CiAKIAlpZiAoaGFuZGxlLT5mY29kZS5iZl9pbnNucyA9PSBOVUxMIHx8Ci0JICAgIGJwZl9maWx0ZXIoaGFuZGxlLT5mY29kZS5iZl9pbnNucywgaGFuZGxlLT5idWZmZXIsCisJICAgIHBjYXBfZmlsdGVyKGhhbmRsZS0+ZmNvZGUuYmZfaW5zbnMsIGhhbmRsZS0+YnVmZmVyLAogCSAgICAgIHBrdGgubGVuLCBwa3RoLmNhcGxlbikpIHsKIAkJaGFuZGxlcC0+cGFja2V0c19yZWFkKys7CiAJCWNhbGxiYWNrKHVzZXIsICZwa3RoLCBoYW5kbGUtPmJ1ZmZlcik7CkBAIC05MjEsMTAgKzEwNTYsMTAgQEAKIH0KIAogc3RhdGljIGludAotdXNiX2luamVjdF9saW51eChwY2FwX3QgKmhhbmRsZSwgY29uc3Qgdm9pZCAqYnVmIF9VXywgc2l6ZV90IHNpemUgX1VfKQordXNiX2luamVjdF9saW51eChwY2FwX3QgKmhhbmRsZSwgY29uc3Qgdm9pZCAqYnVmIF9VXywgaW50IHNpemUgX1VfKQogewotCXBjYXBfc25wcmludGYoaGFuZGxlLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJpbmplY3Qgbm90IHN1cHBvcnRlZCBvbiAiCi0JCSJVU0IgZGV2aWNlcyIpOworCXNucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCSAgICAiUGFja2V0IGluamVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIFVTQiBkZXZpY2VzIik7CiAJcmV0dXJuICgtMSk7CiB9CiAKQEAgLTkzMiwxMyArMTA2NywxNCBAQAogdXNiX3N0YXRzX2xpbnV4KHBjYXBfdCAqaGFuZGxlLCBzdHJ1Y3QgcGNhcF9zdGF0ICpzdGF0cykKIHsKIAlzdHJ1Y3QgcGNhcF91c2JfbGludXggKmhhbmRsZXAgPSBoYW5kbGUtPnByaXY7Ci0JaW50IGR1bW15LCByZXQsIGNvbnN1bWVkLCBjbnQ7CisJaW50IGR1bW15LCBjbnQ7CisJc3NpemVfdCByZXQsIGNvbnN1bWVkOwogCWNoYXIgc3RyaW5nW1VTQl9MSU5FX0xFTl07CiAJY2hhciB0b2tlbltVU0JfTElORV9MRU5dOwogCWNoYXIgKiBwdHIgPSBzdHJpbmc7CiAJaW50IGZkOwogCi0JcGNhcF9zbnByaW50ZihzdHJpbmcsIFVTQl9MSU5FX0xFTiwgVVNCX1RFWFRfRElSIi8lZHMiLCBoYW5kbGVwLT5idXNfaW5kZXgpOworCXNucHJpbnRmKHN0cmluZywgVVNCX0xJTkVfTEVOLCBVU0JfVEVYVF9ESVIiLyVkcyIsIGhhbmRsZXAtPmJ1c19pbmRleCk7CiAJZmQgPSBvcGVuKHN0cmluZywgT19SRE9OTFksIDApOwogCWlmIChmZCA8IDApCiAJewpAQCAtOTQ4LDcgKzEwODQsNyBAQAogCQkJICogTm90IGZvdW5kIGF0IHRoZSBuZXcgbG9jYXRpb247IHRyeSB0aGUgb2xkCiAJCQkgKiBsb2NhdGlvbi4KIAkJCSAqLwotCQkJcGNhcF9zbnByaW50ZihzdHJpbmcsIFVTQl9MSU5FX0xFTiwgVVNCX1RFWFRfRElSX09MRCIvJWRzIiwgaGFuZGxlcC0+YnVzX2luZGV4KTsKKwkJCXNucHJpbnRmKHN0cmluZywgVVNCX0xJTkVfTEVOLCBVU0JfVEVYVF9ESVJfT0xEIi8lZHMiLCBoYW5kbGVwLT5idXNfaW5kZXgpOwogCQkJZmQgPSBvcGVuKHN0cmluZywgT19SRE9OTFksIDApOwogCQl9CiAJCWlmIChmZCA8IDApIHsKQEAgLTk2NywxMiArMTEwMywxNiBAQAogCiAJaWYgKHJldCA8IDApCiAJewotCQlwY2FwX3NucHJpbnRmKGhhbmRsZS0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihoYW5kbGUtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSJDYW4ndCByZWFkIHN0YXRzIGZyb20gZmQgJWQgIiwgZmQpOwogCQlyZXR1cm4gLTE7CiAJfQogCXN0cmluZ1tyZXRdID0gMDsKIAorCXN0YXRzLT5wc19yZWN2ID0gaGFuZGxlcC0+cGFja2V0c19yZWFkOworCXN0YXRzLT5wc19kcm9wID0gMDsJLyogdW5sZXNzIHdlIGZpbmQgdGV4dF9sb3N0ICovCisJc3RhdHMtPnBzX2lmZHJvcCA9IDA7CisKIAkvKiBleHRyYWN0IGluZm8gb24gZHJvcHBlZCB1cmJzICovCiAJZm9yIChjb25zdW1lZD0wOyBjb25zdW1lZCA8IHJldDsgKSB7CiAJCS8qIGZyb20gdGhlIHNzY2FuZiBtYW4gcGFnZToKQEAgLTk4OSwyNCArMTEyOSwyNiBAQAogCQkJYnJlYWs7CiAJCWNvbnN1bWVkICs9IGNudDsKIAkJcHRyICs9IGNudDsKLQkJaWYgKHN0cmNtcCh0b2tlbiwgIm5yZWFkZXJzIikgPT0gMCkKLQkJCXJldCA9IHNzY2FuZihwdHIsICIlZCIsICZzdGF0cy0+cHNfZHJvcCk7CisJCWlmIChzdHJjbXAodG9rZW4sICJ0ZXh0X2xvc3QiKSA9PSAwKQorCQkJbnRvayA9IHNzY2FuZihwdHIsICIlZCVuIiwgJnN0YXRzLT5wc19kcm9wLCAmY250KTsKIAkJZWxzZQotCQkJcmV0ID0gc3NjYW5mKHB0ciwgIiVkIiwgJmR1bW15KTsKLQkJaWYgKG50b2sgIT0gMSkKKwkJCW50b2sgPSBzc2NhbmYocHRyLCAiJWQlbiIsICZkdW1teSwgJmNudCk7CisJCWlmICgobnRvayAhPSAxKSB8fCAoY250IDwgMCkpCiAJCQlicmVhazsKIAkJY29uc3VtZWQgKz0gY250OwogCQlwdHIgKz0gY250OwogCX0KIAotCXN0YXRzLT5wc19yZWN2ID0gaGFuZGxlcC0+cGFja2V0c19yZWFkOwotCXN0YXRzLT5wc19pZmRyb3AgPSAwOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CiB1c2Jfc2V0ZGlyZWN0aW9uX2xpbnV4KHBjYXBfdCAqcCwgcGNhcF9kaXJlY3Rpb25fdCBkKQogeworCS8qCisJICogSXQncyBndWFyYW50ZWVkLCBhdCB0aGlzIHBvaW50LCB0aGF0IGQgaXMgYSB2YWxpZAorCSAqIGRpcmVjdGlvbiB2YWx1ZS4KKwkgKi8KIAlwLT5kaXJlY3Rpb24gPSBkOwogCXJldHVybiAwOwogfQpAQCAtMTA2OSwxOCArMTIxMSw0OSBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JLyogd2UgY2FuIGdldCBsZXNzIHRoYXQgdGhhbiByZWFsbHkgY2FwdHVyZWQgZnJvbSBrZXJuZWwsIGRlcGVuZGluZyBvbgotCSAqIHNuYXBsZW4sIHNvIGFkanVzdCBoZWFkZXIgYWNjb3JkaW5nbHkgKi8KKwkvKgorCSAqIGluZm8uaGRyLT5kYXRhX2xlbiBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGlzb2Nocm9ub3VzCisJICogZGVzY3JpcHRvcnMgKGlmIGFueSkgcGx1cyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEKKwkgKiBwcm92aWRlZC4gIFRoZXJlIGFyZSBubyBpc29jaHJvbm91cyBkZXNjcmlwdG9ycyBoZXJlLAorCSAqIGJlY2F1c2Ugd2UncmUgdXNpbmcgdGhlIG9sZCA0OC1ieXRlIGhlYWRlci4KKwkgKgorCSAqIElmIGluZm8uaGRyLT5kYXRhX2ZsYWcgaXMgbm9uLXplcm8sIHRoZXJlJ3Mgbm8gVVJCIGRhdGE7CisJICogaW5mby5oZHItPnVyYl9sZW4gaXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpbnRvIHdoaWNoCisJICogZGF0YSBpcyB0byBiZSBwbGFjZWQ7IGl0IGRvZXMgbm90IHJlcHJlc2VudCB0aGUgYW1vdW50CisJICogb2YgZGF0YSB0cmFuc2ZlcnJlZC4gIElmIGluZm8uaGRyLT5kYXRhX2ZsYWcgaXMgemVybywKKwkgKiB0aGVyZSBpcyBVUkIgZGF0YSwgYW5kIGluZm8uaGRyLT51cmJfbGVuIGlzIHRoZSBudW1iZXIKKwkgKiBvZiBieXRlcyB0cmFuc21pdHRlZCBvciByZWNlaXZlZDsgaXQgZG9lc24ndCBpbmNsdWRlCisJICogaXNvY2hyb25vdXMgZGVzY3JpcHRvcnMuCisJICoKKwkgKiBUaGUga2VybmVsIG1heSBnaXZlIHVzIG1vcmUgZGF0YSB0aGFuIHRoZSBzbmFwbGVuOyBpZiBpdCBkaWQsCisJICogcmVkdWNlIHRoZSBkYXRhIGxlbmd0aCBzbyB0aGF0IHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgd2UKKwkgKiB0ZWxsIG91ciBjbGllbnQgd2UgaGF2ZSBpcyBub3QgZ3JlYXRlciB0aGFuIHRoZSBzbmFwbGVuLgorCSAqLwogCWlmIChpbmZvLmhkci0+ZGF0YV9sZW4gPCBjbGVuKQogCQljbGVuID0gaW5mby5oZHItPmRhdGFfbGVuOwogCWluZm8uaGRyLT5kYXRhX2xlbiA9IGNsZW47Ci0JcGt0aC5jYXBsZW4gPSBjbGVuICsgc2l6ZW9mKHBjYXBfdXNiX2hlYWRlcik7Ci0JcGt0aC5sZW4gPSBpbmZvLmhkci0+ZGF0YV9sZW4gKyBzaXplb2YocGNhcF91c2JfaGVhZGVyKTsKLQlwa3RoLnRzLnR2X3NlYyA9IGluZm8uaGRyLT50c19zZWM7CisJcGt0aC5jYXBsZW4gPSBzaXplb2YocGNhcF91c2JfaGVhZGVyKSArIGNsZW47CisJaWYgKGluZm8uaGRyLT5kYXRhX2ZsYWcpIHsKKwkJLyoKKwkJICogTm8gZGF0YTsganVzdCBiYXNlIHRoZSBvbi10aGUtd2lyZSBsZW5ndGggb24KKwkJICogaW5mby5oZHItPmRhdGFfbGVuIChzbyB0aGF0IGl0J3MgPj0gdGhlIGNhcHR1cmVkCisJCSAqIGxlbmd0aCkuCisJCSAqLworCQlwa3RoLmxlbiA9IHNpemVvZihwY2FwX3VzYl9oZWFkZXIpICsgaW5mby5oZHItPmRhdGFfbGVuOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFdlIGdvdCBkYXRhOyBiYXNlIHRoZSBvbi10aGUtd2lyZSBsZW5ndGggb24KKwkJICogaW5mby5oZHItPnVyYl9sZW4sIHNvIHRoYXQgaXQgaW5jbHVkZXMgZGF0YQorCQkgKiBkaXNjYXJkZWQgYnkgdGhlIFVTQiBtb25pdG9yIGRldmljZSBkdWUgdG8KKwkJICogaXRzIGJ1ZmZlciBiZWluZyB0b28gc21hbGwuCisJCSAqLworCQlwa3RoLmxlbiA9IHNpemVvZihwY2FwX3VzYl9oZWFkZXIpICsgaW5mby5oZHItPnVyYl9sZW47CisJfQorCXBrdGgudHMudHZfc2VjID0gKHRpbWVfdClpbmZvLmhkci0+dHNfc2VjOwogCXBrdGgudHMudHZfdXNlYyA9IGluZm8uaGRyLT50c191c2VjOwogCiAJaWYgKGhhbmRsZS0+ZmNvZGUuYmZfaW5zbnMgPT0gTlVMTCB8fAotCSAgICBicGZfZmlsdGVyKGhhbmRsZS0+ZmNvZGUuYmZfaW5zbnMsIGhhbmRsZS0+YnVmZmVyLAorCSAgICBwY2FwX2ZpbHRlcihoYW5kbGUtPmZjb2RlLmJmX2luc25zLCBoYW5kbGUtPmJ1ZmZlciwKIAkgICAgICBwa3RoLmxlbiwgcGt0aC5jYXBsZW4pKSB7CiAJCWhhbmRsZXAtPnBhY2tldHNfcmVhZCsrOwogCQljYWxsYmFjayh1c2VyLCAmcGt0aCwgaGFuZGxlLT5idWZmZXIpOwpAQCAtMTEwMiwxMiArMTI3NSwxMiBAQAogCXN0cnVjdCBtb25fYmluX21mZXRjaCBmZXRjaDsKIAlpbnQzMl90IHZlY1tWRUNfU0laRV07CiAJc3RydWN0IHBjYXBfcGt0aGRyIHBrdGg7Ci0JcGNhcF91c2JfaGVhZGVyKiBoZHI7CisJcGNhcF91c2JfaGVhZGVyX21tYXBwZWQqIGhkcjsKIAlpbnQgbmZsdXNoID0gMDsKIAlpbnQgcGFja2V0cyA9IDA7CiAJdV9pbnQgY2xlbiwgbWF4X2NsZW47CiAKLQltYXhfY2xlbiA9IGhhbmRsZS0+c25hcHNob3QgLSBzaXplb2YocGNhcF91c2JfaGVhZGVyKTsKKwltYXhfY2xlbiA9IGhhbmRsZS0+c25hcHNob3QgLSBzaXplb2YocGNhcF91c2JfaGVhZGVyX21tYXBwZWQpOwogCiAJZm9yICg7OykgewogCQlpbnQgaSwgcmV0OwpAQCAtMTE0NSwyNCArMTMxOCw1NyBAQAogCQluZmx1c2ggPSBmZXRjaC5uZmV0Y2g7CiAJCWZvciAoaT0wOyBpPGZldGNoLm5mZXRjaDsgKytpKSB7CiAJCQkvKiBkaXNjYXJkIGZpbGxlciAqLwotCQkJaGRyID0gKHBjYXBfdXNiX2hlYWRlciopICZoYW5kbGVwLT5tbWFwYnVmW3ZlY1tpXV07CisJCQloZHIgPSAocGNhcF91c2JfaGVhZGVyX21tYXBwZWQqKSAmaGFuZGxlcC0+bW1hcGJ1Zlt2ZWNbaV1dOwogCQkJaWYgKGhkci0+ZXZlbnRfdHlwZSA9PSAnQCcpCiAJCQkJY29udGludWU7CiAKLQkJCS8qIHdlIGNhbiBnZXQgbGVzcyB0aGF0IHRoYW4gcmVhbGx5IGNhcHR1cmVkIGZyb20ga2VybmVsLCBkZXBlbmRpbmcgb24KLQkgCQkqIHNuYXBsZW4sIHNvIGFkanVzdCBoZWFkZXIgYWNjb3JkaW5nbHkgKi8KKwkJCS8qCisJCQkgKiBoZHItPmRhdGFfbGVuIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YKKwkJCSAqIGlzb2Nocm9ub3VzIGRlc2NyaXB0b3JzIChpZiBhbnkpIHBsdXMgdGhlCisJCQkgKiBudW1iZXIgb2YgYnl0ZXMgb2YgZGF0YSBwcm92aWRlZC4KKwkJCSAqCisJCQkgKiBJZiBoZHItPmRhdGFfZmxhZyBpcyBub24temVybywgdGhlcmUncyBubworCQkJICogVVJCIGRhdGE7IGhkci0+dXJiX2xlbiBpcyB0aGUgc2l6ZSBvZiB0aGUKKwkJCSAqIGJ1ZmZlciBpbnRvIHdoaWNoIGRhdGEgaXMgdG8gYmUgcGxhY2VkOyBpdCBkb2VzCisJCQkgKiBub3QgcmVwcmVzZW50IHRoZSBhbW91bnQgb2YgZGF0YSB0cmFuc2ZlcnJlZC4KKwkJCSAqIElmIGhkci0+ZGF0YV9mbGFnIGlzIHplcm8sIHRoZXJlIGlzIFVSQiBkYXRhLAorCQkJICogYW5kIGhkci0+dXJiX2xlbiBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzCisJCQkgKiB0cmFuc21pdHRlZCBvciByZWNlaXZlZDsgaXQgZG9lc24ndCBpbmNsdWRlCisJCQkgKiBpc29jaHJvbm91cyBkZXNjcmlwdG9ycy4KKwkJCSAqCisJCQkgKiBUaGUga2VybmVsIG1heSBnaXZlIHVzIG1vcmUgZGF0YSB0aGFuIHRoZQorCQkJICogc25hcGxlbjsgaWYgaXQgZGlkLCByZWR1Y2UgdGhlIGRhdGEgbGVuZ3RoCisJCQkgKiBzbyB0aGF0IHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgd2UKKwkJCSAqIHRlbGwgb3VyIGNsaWVudCB3ZSBoYXZlIGlzIG5vdCBncmVhdGVyIHRoYW4KKwkJCSAqIHRoZSBzbmFwbGVuLgorCQkJICovCiAJCQljbGVuID0gbWF4X2NsZW47CiAJCQlpZiAoaGRyLT5kYXRhX2xlbiA8IGNsZW4pCiAJCQkJY2xlbiA9IGhkci0+ZGF0YV9sZW47Ci0KLQkJCS8qIGdldCBwYWNrZXQgaW5mbyBmcm9tIGhlYWRlciovCi0JCQlwa3RoLmNhcGxlbiA9IGNsZW4gKyBzaXplb2YocGNhcF91c2JfaGVhZGVyX21tYXBwZWQpOwotCQkJcGt0aC5sZW4gPSBoZHItPmRhdGFfbGVuICsgc2l6ZW9mKHBjYXBfdXNiX2hlYWRlcl9tbWFwcGVkKTsKLQkJCXBrdGgudHMudHZfc2VjID0gaGRyLT50c19zZWM7CisJCQlwa3RoLmNhcGxlbiA9IHNpemVvZihwY2FwX3VzYl9oZWFkZXJfbW1hcHBlZCkgKyBjbGVuOworCQkJaWYgKGhkci0+ZGF0YV9mbGFnKSB7CisJCQkJLyoKKwkJCQkgKiBObyBkYXRhOyBqdXN0IGJhc2UgdGhlIG9uLXRoZS13aXJlIGxlbmd0aAorCQkJCSAqIG9uIGhkci0+ZGF0YV9sZW4gKHNvIHRoYXQgaXQncyA+PSB0aGUKKwkJCQkgKiBjYXB0dXJlZCBsZW5ndGgpLgorCQkJCSAqLworCQkJCXBrdGgubGVuID0gc2l6ZW9mKHBjYXBfdXNiX2hlYWRlcl9tbWFwcGVkKSArCisJCQkJICAgIGhkci0+ZGF0YV9sZW47CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogV2UgZ290IGRhdGE7IGJhc2UgdGhlIG9uLXRoZS13aXJlIGxlbmd0aAorCQkJCSAqIG9uIGhkci0+dXJiX2xlbiwgc28gdGhhdCBpdCBpbmNsdWRlcworCQkJCSAqIGRhdGEgZGlzY2FyZGVkIGJ5IHRoZSBVU0IgbW9uaXRvciBkZXZpY2UKKwkJCQkgKiBkdWUgdG8gaXRzIGJ1ZmZlciBiZWluZyB0b28gc21hbGwuCisJCQkJICovCisJCQkJcGt0aC5sZW4gPSBzaXplb2YocGNhcF91c2JfaGVhZGVyX21tYXBwZWQpICsKKwkJCQkgICAgKGhkci0+bmRlc2MgKiBzaXplb2YgKHVzYl9pc29kZXNjKSkgKyBoZHItPnVyYl9sZW47CisJCQl9CisJCQlwa3RoLnRzLnR2X3NlYyA9ICh0aW1lX3QpaGRyLT50c19zZWM7CiAJCQlwa3RoLnRzLnR2X3VzZWMgPSBoZHItPnRzX3VzZWM7CiAKIAkJCWlmIChoYW5kbGUtPmZjb2RlLmJmX2luc25zID09IE5VTEwgfHwKLQkJCSAgICBicGZfZmlsdGVyKGhhbmRsZS0+ZmNvZGUuYmZfaW5zbnMsICh1X2NoYXIqKSBoZHIsCisJCQkgICAgcGNhcF9maWx0ZXIoaGFuZGxlLT5mY29kZS5iZl9pbnNucywgKHVfY2hhciopIGhkciwKIAkJCSAgICAgIHBrdGgubGVuLCBwa3RoLmNhcGxlbikpIHsKIAkJCQloYW5kbGVwLT5wYWNrZXRzX3JlYWQrKzsKIAkJCQljYWxsYmFjayh1c2VyLCAmcGt0aCwgKHVfY2hhciopIGhkcik7CkBAIC0xMTcwLDcgKzEzNzYsNyBAQAogCQkJfQogCQl9CiAKLQkJLyogd2l0aCBtYXhfcGFja2V0cyBzcGVjaWZ5aW5nICJ1bmxpbWl0ZWQiIHdlIHN0b3AgYWZlciB0aGUgZmlyc3QgY2h1bmsqLworCQkvKiB3aXRoIG1heF9wYWNrZXRzIHNwZWNpZnlpbmcgInVubGltaXRlZCIgd2Ugc3RvcCBhZnRlciB0aGUgZmlyc3QgY2h1bmsqLwogCQlpZiAoUEFDS0VUX0NPVU5UX0lTX1VOTElNSVRFRChtYXhfcGFja2V0cykgfHwgKHBhY2tldHMgPT0gbWF4X3BhY2tldHMpKQogCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvcGNhcC4zcGNhcCBiL3BjYXAuM3BjYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2Yjg4OTEuLjAwMDAwMDAKLS0tIGEvcGNhcC4zcGNhcAorKysgL2Rldi9udWxsCkBAIC0xLDk0NSArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAxOTk0LCAxOTk2LCAxOTk3Ci0uXCIJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdDogKDEpIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbnMKLS5cIiByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGluIGl0cyBlbnRpcmV0eSwgKDIpCi0uXCIgZGlzdHJpYnV0aW9ucyBpbmNsdWRpbmcgYmluYXJ5IGNvZGUgaW5jbHVkZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQKLS5cIiB0aGlzIHBhcmFncmFwaCBpbiBpdHMgZW50aXJldHkgaW4gdGhlIGRvY3VtZW50YXRpb24gb3Igb3RoZXIgbWF0ZXJpYWxzCi0uXCIgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLCBhbmQgKDMpIGFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZwotLlwiIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0uXCIgYGBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsCi0uXCIgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4nJyBOZWl0aGVyIHRoZSBuYW1lIG9mCi0uXCIgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UKLS5cIiBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKLS5cIiB3cml0dGVuIHBlcm1pc3Npb24uCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0uXCIgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLS5cIgotLlRIIFBDQVAgM1BDQVAgIjIwIEFwcmlsIDIwMTgiCi0uU0ggTkFNRQotcGNhcCBcLSBQYWNrZXQgQ2FwdHVyZSBsaWJyYXJ5Ci0uU0ggU1lOT1BTSVMKLS5uZgotLmZ0IEIKLSNpbmNsdWRlIDxwY2FwL3BjYXAuaD4KLS5MUAotLmZ0IEIKLS5mdAotLmZpCi0uU0ggREVTQ1JJUFRJT04KLVRoZSBQYWNrZXQgQ2FwdHVyZSBsaWJyYXJ5Ci1wcm92aWRlcyBhIGhpZ2ggbGV2ZWwgaW50ZXJmYWNlIHRvIHBhY2tldCBjYXB0dXJlIHN5c3RlbXMuIEFsbCBwYWNrZXRzCi1vbiB0aGUgbmV0d29yaywgZXZlbiB0aG9zZSBkZXN0aW5lZCBmb3Igb3RoZXIgaG9zdHMsIGFyZSBhY2Nlc3NpYmxlCi10aHJvdWdoIHRoaXMgbWVjaGFuaXNtLgotSXQgYWxzbyBzdXBwb3J0cyBzYXZpbmcgY2FwdHVyZWQgcGFja2V0cyB0byBhIGBgc2F2ZWZpbGUnJywgYW5kIHJlYWRpbmcKLXBhY2tldHMgZnJvbSBhIGBgc2F2ZWZpbGUnJy4KLS5TUyBPcGVuaW5nIGEgY2FwdHVyZSBoYW5kbGUgZm9yIHJlYWRpbmcKLVRvIG9wZW4gYSBoYW5kbGUgZm9yIGEgbGl2ZSBjYXB0dXJlLCBnaXZlbiB0aGUgbmFtZSBvZiB0aGUgbmV0d29yayBvcgotb3RoZXIgaW50ZXJmYWNlIG9uIHdoaWNoIHRoZSBjYXB0dXJlIHNob3VsZCBiZSBkb25lLCBjYWxsCi0uQlIgcGNhcF9jcmVhdGUgKCksCi1zZXQgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbnMgb24gdGhlIGhhbmRsZSwgYW5kIHRoZW4gYWN0aXZhdGUgaXQgd2l0aAotLkJSIHBjYXBfYWN0aXZhdGUgKCkuCi0uUFAKLVRvIG9idGFpbiBhIGxpc3Qgb2YgZGV2aWNlcyB0aGF0IGNhbiBiZSBvcGVuZWQgZm9yIGEgbGl2ZSBjYXB0dXJlLCBjYWxsCi0uQlIgcGNhcF9maW5kYWxsZGV2cyAoKTsKLXRvIGZyZWUgdGhlIGxpc3QgcmV0dXJuZWQgYnkKLS5CUiBwY2FwX2ZpbmRhbGxkZXZzICgpLAotY2FsbAotLkJSIHBjYXBfZnJlZWFsbGRldnMgKCkuCi0uQlIgcGNhcF9sb29rdXBkZXYgKCkKLXdpbGwgcmV0dXJuIHRoZSBmaXJzdCBkZXZpY2Ugb24gdGhhdCBsaXN0IHRoYXQgaXMgbm90IGEgYGBsb29wYmFja2BgCi1uZXR3b3JrIGludGVyZmFjZS4KLS5QUAotVG8gb3BlbiBhIGhhbmRsZSBmb3IgYSBgYHNhdmVmaWxlJycgZnJvbSB3aGljaCB0byByZWFkIHBhY2tldHMsIGdpdmVuIHRoZQotcGF0aG5hbWUgb2YgdGhlIGBgc2F2ZWZpbGUnJywgY2FsbAotLkJSIHBjYXBfb3Blbl9vZmZsaW5lICgpOwotdG8gc2V0IHVwIGEgaGFuZGxlIGZvciBhIGBgc2F2ZWZpbGUnJywgZ2l2ZW4gYQotLkIgIkZJTEVcICoiCi1yZWZlcnJpbmcgdG8gYSBmaWxlIGFscmVhZHkgb3BlbmVkIGZvciByZWFkaW5nLCBjYWxsCi0uQlIgcGNhcF9mb3Blbl9vZmZsaW5lICgpLgotLlBQCi1JbiBvcmRlciB0byBnZXQgYSBgYGZha2UnJwotLkIgcGNhcF90Ci1mb3IgdXNlIGluIHJvdXRpbmVzIHRoYXQgcmVxdWlyZSBhCi0uQiBwY2FwX3QKLWFzIGFuIGFyZ3VtZW50LCBzdWNoIGFzIHJvdXRpbmVzIHRvIG9wZW4gYSBgYHNhdmVmaWxlJycgZm9yIHdyaXRpbmcgYW5kCi10byBjb21waWxlIGEgZmlsdGVyIGV4cHJlc3Npb24sIGNhbGwKLS5CUiBwY2FwX29wZW5fZGVhZCAoKS4KLS5QUAotLkJSIHBjYXBfY3JlYXRlICgpLAotLkJSIHBjYXBfb3Blbl9vZmZsaW5lICgpLAotLkJSIHBjYXBfZm9wZW5fb2ZmbGluZSAoKSwKLWFuZAotLkJSIHBjYXBfb3Blbl9kZWFkICgpCi1yZXR1cm4gYSBwb2ludGVyIHRvIGEKLS5CUiBwY2FwX3QgLAotd2hpY2ggaXMgdGhlIGhhbmRsZSB1c2VkIGZvciByZWFkaW5nIHBhY2tldHMgZnJvbSB0aGUgY2FwdHVyZSBzdHJlYW0gb3IKLXRoZSBgYHNhdmVmaWxlJycsIGFuZCBmb3IgZmluZGluZyBvdXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNhcHR1cmUKLXN0cmVhbSBvciBgYHNhdmVmaWxlJycuCi1UbyBjbG9zZSBhIGhhbmRsZSwgdXNlCi0uQlIgcGNhcF9jbG9zZSAoKS4KLS5QUAotVGhlIG9wdGlvbnMgdGhhdCBjYW4gYmUgc2V0IG9uIGEgY2FwdHVyZSBoYW5kbGUgaW5jbHVkZQotLklQICJzbmFwc2hvdCBsZW5ndGgiCi1JZiwgd2hlbiBjYXB0dXJpbmcsIHlvdSBjYXB0dXJlIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIHBhY2tldCwgdGhhdAotcmVxdWlyZXMgbW9yZSBDUFUgdGltZSB0byBjb3B5IHRoZSBwYWNrZXQgdG8geW91ciBhcHBsaWNhdGlvbiwgbW9yZSBkaXNrCi1hbmQgcG9zc2libHkgbmV0d29yayBiYW5kd2lkdGggdG8gd3JpdGUgdGhlIHBhY2tldCBkYXRhIHRvIGEgZmlsZSwgYW5kCi1tb3JlIGRpc2sgc3BhY2UgdG8gc2F2ZSB0aGUgcGFja2V0LiAgSWYgeW91IGRvbid0IG5lZWQgdGhlIGVudGlyZQotY29udGVudHMgb2YgdGhlIHBhY2tldCAtIGZvciBleGFtcGxlLCBpZiB5b3UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUKLVRDUCBoZWFkZXJzIG9mIHBhY2tldHMgLSB5b3UgY2FuIHNldCB0aGUgInNuYXBzaG90IGxlbmd0aCIgZm9yIHRoZQotY2FwdHVyZSB0byBhbiBhcHByb3ByaWF0ZSB2YWx1ZS4gIElmIHRoZSBzbmFwc2hvdCBsZW5ndGggaXMgc2V0IHRvCi0uSVIgc25hcGxlbiAsCi1hbmQKLS5JIHNuYXBsZW4KLWlzIGxlc3MKLXRoYW4gdGhlIHNpemUgb2YgYSBwYWNrZXQgdGhhdCBpcyBjYXB0dXJlZCwgb25seSB0aGUgZmlyc3QKLS5JIHNuYXBsZW4KLWJ5dGVzIG9mIHRoYXQgcGFja2V0IHdpbGwgYmUgY2FwdHVyZWQgYW5kIHByb3ZpZGVkIGFzIHBhY2tldCBkYXRhLgotLklQCi1BIHNuYXBzaG90IGxlbmd0aCBvZiA2NTUzNSBzaG91bGQgYmUgc3VmZmljaWVudCwgb24gbW9zdCBpZiBub3QgYWxsCi1uZXR3b3JrcywgdG8gY2FwdHVyZSBhbGwgdGhlIGRhdGEgYXZhaWxhYmxlIGZyb20gdGhlIHBhY2tldC4KLS5JUAotVGhlIHNuYXBzaG90IGxlbmd0aCBpcyBzZXQgd2l0aAotLkJSIHBjYXBfc2V0X3NuYXBsZW4gKCkuCi0uSVAgInByb21pc2N1b3VzIG1vZGUiCi1PbiBicm9hZGNhc3QgTEFOcyBzdWNoIGFzIEV0aGVybmV0LCBpZiB0aGUgbmV0d29yayBpc24ndCBzd2l0Y2hlZCwgb3IgaWYKLXRoZSBhZGFwdGVyIGlzIGNvbm5lY3RlZCB0byBhICJtaXJyb3IgcG9ydCIgb24gYSBzd2l0Y2ggdG8gd2hpY2ggYWxsCi1wYWNrZXRzIHBhc3NpbmcgdGhyb3VnaCB0aGUgc3dpdGNoIGFyZSBzZW50LCBhIG5ldHdvcmsgYWRhcHRlciByZWNlaXZlcwotYWxsIHBhY2tldHMgb24gdGhlIExBTiwgaW5jbHVkaW5nIHVuaWNhc3Qgb3IgbXVsdGljYXN0IHBhY2tldHMgbm90IHNlbnQKLXRvIGEgbmV0d29yayBhZGRyZXNzIHRoYXQgdGhlIG5ldHdvcmsgYWRhcHRlciBpc24ndCBjb25maWd1cmVkIHRvCi1yZWNvZ25pemUuCi0uSVAKLU5vcm1hbGx5LCB0aGUgYWRhcHRlciB3aWxsIGRpc2NhcmQgdGhvc2UgcGFja2V0czsgaG93ZXZlciwgbWFueSBuZXR3b3JrCi1hZGFwdGVycyBzdXBwb3J0ICJwcm9taXNjdW91cyBtb2RlIiwgd2hpY2ggaXMgYSBtb2RlIGluIHdoaWNoIGFsbAotcGFja2V0cywgZXZlbiBpZiB0aGV5IGFyZSBub3Qgc2VudCB0byBhbiBhZGRyZXNzIHRoYXQgdGhlIGFkYXB0ZXIKLXJlY29nbml6ZXMsIGFyZSBwcm92aWRlZCB0byB0aGUgaG9zdC4gIFRoaXMgaXMgdXNlZnVsIGZvciBwYXNzaXZlbHkKLWNhcHR1cmluZyB0cmFmZmljIGJldHdlZW4gdHdvIG9yIG1vcmUgb3RoZXIgaG9zdHMgZm9yIGFuYWx5c2lzLgotLklQCi1Ob3RlIHRoYXQgZXZlbiBpZiBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzZXQgcHJvbWlzY3VvdXMgbW9kZSwgdGhlCi1hZGFwdGVyIGNvdWxkIHdlbGwgYmUgaW4gcHJvbWlzY3VvdXMgbW9kZSBmb3Igc29tZSBvdGhlciByZWFzb24uCi0uSVAKLUZvciBub3csIHRoaXMgZG9lc24ndCB3b3JrIG9uIHRoZSAiYW55IiBkZXZpY2U7IGlmIGFuIGFyZ3VtZW50IG9mICJhbnkiCi1vciBOVUxMIGlzIHN1cHBsaWVkLCB0aGUgc2V0dGluZyBvZiBwcm9taXNjdW91cyBtb2RlIGlzIGlnbm9yZWQuCi0uSVAKLVByb21pc2N1b3VzIG1vZGUgaXMgc2V0IHdpdGgKLS5CUiBwY2FwX3NldF9wcm9taXNjICgpLgotLklQICJtb25pdG9yIG1vZGUiCi1PbiBJRUVFIDgwMi4xMSB3aXJlbGVzcyBMQU5zLCBldmVuIGlmIGFuIGFkYXB0ZXIgaXMgaW4gcHJvbWlzY3VvdXMgbW9kZSwKLWl0IHdpbGwgc3VwcGx5IHRvIHRoZSBob3N0IG9ubHkgZnJhbWVzIGZvciB0aGUgbmV0d29yayB3aXRoIHdoaWNoIGl0J3MKLWFzc29jaWF0ZWQuICBJdCBtaWdodCBhbHNvIHN1cHBseSBvbmx5IGRhdGEgZnJhbWVzLCBub3QgbWFuYWdlbWVudCBvcgotY29udHJvbCBmcmFtZXMsIGFuZCBtaWdodCBub3QgcHJvdmlkZSB0aGUgODAyLjExIGhlYWRlciBvciByYWRpbwotaW5mb3JtYXRpb24gcHNldWRvLWhlYWRlciBmb3IgdGhvc2UgZnJhbWVzLgotLklQCi1JbiAibW9uaXRvciBtb2RlIiwgc29tZXRpbWVzIGFsc28gY2FsbGVkICJyZm1vbiBtb2RlIiAoZm9yICJSYWRpbwotRnJlcXVlbmN5IE1PTml0b3IiKSwgdGhlIGFkYXB0ZXIgd2lsbCBzdXBwbHkgYWxsIGZyYW1lcyB0aGF0IGl0Ci1yZWNlaXZlcywgd2l0aCA4MDIuMTEgaGVhZGVycywgYW5kIG1pZ2h0IHN1cHBseSBhIHBzZXVkby1oZWFkZXIgd2l0aAotcmFkaW8gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZyYW1lIGFzIHdlbGwuCi0uSVAKLU5vdGUgdGhhdCBpbiBtb25pdG9yIG1vZGUgdGhlIGFkYXB0ZXIgbWlnaHQgZGlzYXNzb2NpYXRlIGZyb20gdGhlCi1uZXR3b3JrIHdpdGggd2hpY2ggaXQncyBhc3NvY2lhdGVkLCBzbyB0aGF0IHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHVzZQotYW55IHdpcmVsZXNzIG5ldHdvcmtzIHdpdGggdGhhdCBhZGFwdGVyLiAgVGhpcyBjb3VsZCBwcmV2ZW50IGFjY2Vzc2luZwotZmlsZXMgb24gYSBuZXR3b3JrIHNlcnZlciwgb3IgcmVzb2x2aW5nIGhvc3QgbmFtZXMgb3IgbmV0d29yayBhZGRyZXNzZXMsCi1pZiB5b3UgYXJlIGNhcHR1cmluZyBpbiBtb25pdG9yIG1vZGUgYW5kIGFyZSBub3QgY29ubmVjdGVkIHRvIGFub3RoZXIKLW5ldHdvcmsgd2l0aCBhbm90aGVyIGFkYXB0ZXIuCi0uSVAKLU1vbml0b3IgbW9kZSBpcyBzZXQgd2l0aAotLkJSIHBjYXBfc2V0X3JmbW9uICgpLAotYW5kCi0uQlIgcGNhcF9jYW5fc2V0X3JmbW9uICgpCi1jYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBhZGFwdGVyIGNhbiBiZSBwdXQgaW50byBtb25pdG9yCi1tb2RlLgotLklQICJwYWNrZXQgYnVmZmVyIHRpbWVvdXQiCi1JZiwgd2hlbiBjYXB0dXJpbmcsIHBhY2tldHMgYXJlIGRlbGl2ZXJlZCBhcyBzb29uIGFzIHRoZXkgYXJyaXZlLCB0aGUKLWFwcGxpY2F0aW9uIGNhcHR1cmluZyB0aGUgcGFja2V0cyB3aWxsIGJlIHdva2VuIHVwIGZvciBlYWNoIHBhY2tldCBhcyBpdAotYXJyaXZlcywgYW5kIG1pZ2h0IGhhdmUgdG8gbWFrZSBvbmUgb3IgbW9yZSBjYWxscyB0byB0aGUgb3BlcmF0aW5nCi1zeXN0ZW0gdG8gZmV0Y2ggZWFjaCBwYWNrZXQuCi0uSVAKLUlmLCBpbnN0ZWFkLCBwYWNrZXRzIGFyZSBub3QgZGVsaXZlcmVkIGFzIHNvb24gYXMgdGhleSBhcnJpdmUsIGJ1dCBhcmUKLWRlbGl2ZXJlZCBhZnRlciBhIHNob3J0IGRlbGF5IChjYWxsZWQgYSAicGFja2V0IGJ1ZmZlciB0aW1lb3V0IiksIG1vcmUKLXRoYW4gb25lIHBhY2tldCBjYW4gYmUgYWNjdW11bGF0ZWQgYmVmb3JlIHRoZSBwYWNrZXRzIGFyZSBkZWxpdmVyZWQsIHNvCi10aGF0IGEgc2luZ2xlIHdha2V1cCB3b3VsZCBiZSBkb25lIGZvciBtdWx0aXBsZSBwYWNrZXRzLCBhbmQgZWFjaCBzZXQgb2YKLWNhbGxzIG1hZGUgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gd291bGQgc3VwcGx5IG11bHRpcGxlIHBhY2tldHMsIHJhdGhlcgotdGhhbiBhIHNpbmdsZSBwYWNrZXQuICBUaGlzIHJlZHVjZXMgdGhlIHBlci1wYWNrZXQgQ1BVIG92ZXJoZWFkIGlmCi1wYWNrZXRzIGFyZSBhcnJpdmluZyBhdCBhIGhpZ2ggcmF0ZSwgaW5jcmVhc2luZyB0aGUgbnVtYmVyIG9mIHBhY2tldHMKLXBlciBzZWNvbmQgdGhhdCBjYW4gYmUgY2FwdHVyZWQuCi0uSVAKLVRoZSBwYWNrZXQgYnVmZmVyIHRpbWVvdXQgaXMgcmVxdWlyZWQgc28gdGhhdCBhbiBhcHBsaWNhdGlvbiB3b24ndCB3YWl0Ci1mb3IgdGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBjYXB0dXJlIGJ1ZmZlciB0byBmaWxsIHVwIGJlZm9yZSBwYWNrZXRzIGFyZQotZGVsaXZlcmVkOyBpZiBwYWNrZXRzIGFyZSBhcnJpdmluZyBzbG93bHksIHRoYXQgd2FpdCBjb3VsZCB0YWtlIGFuCi1hcmJpdHJhcmlseSBsb25nIHBlcmlvZCBvZiB0aW1lLgotLklQCi1Ob3QgYWxsIHBsYXRmb3JtcyBzdXBwb3J0IGEgcGFja2V0IGJ1ZmZlciB0aW1lb3V0OyBvbiBwbGF0Zm9ybXMgdGhhdAotZG9uJ3QsIHRoZSBwYWNrZXQgYnVmZmVyIHRpbWVvdXQgaXMgaWdub3JlZC4gIEEgemVybyB2YWx1ZSBmb3IgdGhlCi10aW1lb3V0LCBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IGEgcGFja2V0IGJ1ZmZlciB0aW1lb3V0LCB3aWxsIGNhdXNlIGEKLXJlYWQgdG8gd2FpdCBmb3JldmVyIHRvIGFsbG93IGVub3VnaCBwYWNrZXRzIHRvIGFycml2ZSwgd2l0aCBubyB0aW1lb3V0LgotQSBuZWdhdGl2ZSB2YWx1ZSBpcyBpbnZhbGlkOyB0aGUgcmVzdWx0IG9mIHNldHRpbmcgdGhlIHRpbWVvdXQgdG8gYQotbmVnYXRpdmUgdmFsdWUgaXMgdW5wcmVkaWN0YWJsZS4KLS5JUAotLkJSIE5PVEUgOgotdGhlIHBhY2tldCBidWZmZXIgdGltZW91dCBjYW5ub3QgYmUgdXNlZCB0byBjYXVzZSBjYWxscyB0aGF0IHJlYWQKLXBhY2tldHMgdG8gcmV0dXJuIHdpdGhpbiBhIGxpbWl0ZWQgcGVyaW9kIG9mIHRpbWUsIGJlY2F1c2UsIG9uIHNvbWUKLXBsYXRmb3JtcywgdGhlIHBhY2tldCBidWZmZXIgdGltZW91dCBpc24ndCBzdXBwb3J0ZWQsIGFuZCwgb24gb3RoZXIKLXBsYXRmb3JtcywgdGhlIHRpbWVyIGRvZXNuJ3Qgc3RhcnQgdW50aWwgYXQgbGVhc3Qgb25lIHBhY2tldCBhcnJpdmVzLgotVGhpcyBtZWFucyB0aGF0IHRoZSBwYWNrZXQgYnVmZmVyIHRpbWVvdXQgc2hvdWxkCi0uQiBOT1QKLWJlIHVzZWQsIGZvciBleGFtcGxlLCBpbiBhbiBpbnRlcmFjdGl2ZSBhcHBsaWNhdGlvbiB0byBhbGxvdyB0aGUgcGFja2V0Ci1jYXB0dXJlIGxvb3AgdG8gYGBwb2xsJycgZm9yIHVzZXIgaW5wdXQgcGVyaW9kaWNhbGx5LCBhcyB0aGVyZSdzIG5vCi1ndWFyYW50ZWUgdGhhdCBhIGNhbGwgcmVhZGluZyBwYWNrZXRzIHdpbGwgcmV0dXJuIGFmdGVyIHRoZSB0aW1lb3V0Ci1leHBpcmVzIGV2ZW4gaWYgbm8gcGFja2V0cyBoYXZlIGFycml2ZWQuCi0uSVAKLVRoZSBwYWNrZXQgYnVmZmVyIHRpbWVvdXQgaXMgc2V0IHdpdGgKLS5CUiBwY2FwX3NldF90aW1lb3V0ICgpLgotLklQICJidWZmZXIgc2l6ZSIKLVBhY2tldHMgdGhhdCBhcnJpdmUgZm9yIGEgY2FwdHVyZSBhcmUgc3RvcmVkIGluIGEgYnVmZmVyLCBzbyB0aGF0IHRoZXkKLWRvIG5vdCBoYXZlIHRvIGJlIHJlYWQgYnkgdGhlIGFwcGxpY2F0aW9uIGFzIHNvb24gYXMgdGhleSBhcnJpdmUuICBPbgotc29tZSBwbGF0Zm9ybXMsIHRoZSBidWZmZXIncyBzaXplIGNhbiBiZSBzZXQ7IGEgc2l6ZSB0aGF0J3MgdG9vIHNtYWxsCi1jb3VsZCBtZWFuIHRoYXQsIGlmIHRvbyBtYW55IHBhY2tldHMgYXJlIGJlaW5nIGNhcHR1cmVkIGFuZCB0aGUgc25hcHNob3QKLWxlbmd0aCBkb2Vzbid0IGxpbWl0IHRoZSBhbW91bnQgb2YgZGF0YSB0aGF0J3MgYnVmZmVyZWQsIHBhY2tldHMgY291bGQKLWJlIGRyb3BwZWQgaWYgdGhlIGJ1ZmZlciBmaWxscyB1cCBiZWZvcmUgdGhlIGFwcGxpY2F0aW9uIGNhbiByZWFkCi1wYWNrZXRzIGZyb20gaXQsIHdoaWxlIGEgc2l6ZSB0aGF0J3MgdG9vIGxhcmdlIGNvdWxkIHVzZSBtb3JlCi1ub24tcGFnZWFibGUgb3BlcmF0aW5nIHN5c3RlbSBtZW1vcnkgdGhhbiBpcyBuZWNlc3NhcnkgdG8gcHJldmVudAotcGFja2V0cyBmcm9tIGJlaW5nIGRyb3BwZWQuCi0uSVAKLVRoZSBidWZmZXIgc2l6ZSBpcyBzZXQgd2l0aAotLkJSIHBjYXBfc2V0X2J1ZmZlcl9zaXplICgpLgotLklQICJ0aW1lc3RhbXAgdHlwZSIKLU9uIHNvbWUgcGxhdGZvcm1zLCB0aGUgdGltZSBzdGFtcCBnaXZlbiB0byBwYWNrZXRzIG9uIGxpdmUgY2FwdHVyZXMgY2FuCi1jb21lIGZyb20gZGlmZmVyZW50IHNvdXJjZXMgdGhhdCBjYW4gaGF2ZSBkaWZmZXJlbnQgcmVzb2x1dGlvbnMgb3IgdGhhdAotY2FuIGhhdmUgZGlmZmVyZW50IHJlbGF0aW9uc2hpcHMgdG8gdGhlIHRpbWUgdmFsdWVzIGZvciB0aGUgY3VycmVudCB0aW1lCi1zdXBwbGllZCBieSByb3V0aW5lcyBvbiB0aGUgbmF0aXZlIG9wZXJhdGluZyBzeXN0ZW0uICBTZWUKLS5CUiBwY2FwLXRzdGFtcCAoNykKLWZvciBhIGxpc3Qgb2YgdGltZSBzdGFtcCB0eXBlcy4KLS5JUAotVGhlIHRpbWUgc3RhbXAgdHlwZSBpcyBzZXQgd2l0aAotLkJSIHBjYXBfc2V0X3RzdGFtcF90eXBlICgpLgotLlBQCi1SZWFkaW5nIHBhY2tldHMgZnJvbSBhIG5ldHdvcmsgaW50ZXJmYWNlIG1heSByZXF1aXJlIHRoYXQgeW91IGhhdmUKLXNwZWNpYWwgcHJpdmlsZWdlczoKLS5UUAotLkIgVW5kZXIgU3VuT1MgMy54IG9yIDQueCB3aXRoIE5JVCBvciBCUEY6Ci1Zb3UgbXVzdCBoYXZlIHJlYWQgYWNjZXNzIHRvCi0uSSAvZGV2L25pdAotb3IKLS5JUiAvZGV2L2JwZiogLgotLlRQCi0uQiBVbmRlciBTb2xhcmlzIHdpdGggRExQSToKLVlvdSBtdXN0IGhhdmUgcmVhZC93cml0ZSBhY2Nlc3MgdG8gdGhlIG5ldHdvcmsgcHNldWRvIGRldmljZSwgZS5nLgotLklSIC9kZXYvbGUgLgotT24gYXQgbGVhc3Qgc29tZSB2ZXJzaW9ucyBvZiBTb2xhcmlzLCBob3dldmVyLCB0aGlzIGlzIG5vdCBzdWZmaWNpZW50IHRvCi1hbGxvdwotLkkgdGNwZHVtcAotdG8gY2FwdHVyZSBpbiBwcm9taXNjdW91cyBtb2RlOyBvbiB0aG9zZSB2ZXJzaW9ucyBvZiBTb2xhcmlzLCB5b3UgbXVzdAotYmUgcm9vdCwgb3IgdGhlIGFwcGxpY2F0aW9uIGNhcHR1cmluZyBwYWNrZXRzCi1tdXN0IGJlIGluc3RhbGxlZCBzZXR1aWQgdG8gcm9vdCwgaW4gb3JkZXIgdG8gY2FwdHVyZSBpbiBwcm9taXNjdW91cwotbW9kZS4gIE5vdGUgdGhhdCwgb24gbWFueSAocGVyaGFwcyBhbGwpIGludGVyZmFjZXMsIGlmIHlvdSBkb24ndCBjYXB0dXJlCi1pbiBwcm9taXNjdW91cyBtb2RlLCB5b3Ugd2lsbCBub3Qgc2VlIGFueSBvdXRnb2luZyBwYWNrZXRzLCBzbyBhIGNhcHR1cmUKLW5vdCBkb25lIGluIHByb21pc2N1b3VzIG1vZGUgbWF5IG5vdCBiZSB2ZXJ5IHVzZWZ1bC4KLS5JUAotSW4gbmV3ZXIgdmVyc2lvbnMgb2YgU29sYXJpcywgeW91IG11c3QgaGF2ZSBiZWVuIGdpdmVuIHRoZQotLkIgbmV0X3Jhd2FjY2VzcwotcHJpdmlsZWdlOyB0aGlzIGlzIGJvdGggbmVjZXNzYXJ5IGFuZCBzdWZmaWNpZW50IHRvIGdpdmUgeW91IGFjY2VzcyB0byB0aGUKLW5ldHdvcmsgcHNldWRvLWRldmljZSAtIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hhbmdlIHRoZSBwcml2aWxlZ2VzIG9uCi10aGF0IGRldmljZS4gIEEgdXNlciBjYW4gYmUgZ2l2ZW4gdGhhdCBwcml2aWxlZ2UgYnksIGZvciBleGFtcGxlLCBhZGRpbmcKLXRoYXQgcHJpdmlsZWdlIHRvIHRoZSB1c2VyJ3MKLS5CIGRlZmF1bHRwcml2Ci1rZXkgd2l0aCB0aGUKLS5CIHVzZXJtb2QgKDgpCi1jb21tYW5kLgotLlRQCi0uQiBVbmRlciBIUC1VWCB3aXRoIERMUEk6Ci1Zb3UgbXVzdCBiZSByb290IG9yIHRoZSBhcHBsaWNhdGlvbiBjYXB0dXJpbmcgcGFja2V0cyBtdXN0IGJlIGluc3RhbGxlZAotc2V0dWlkIHRvIHJvb3QuCi0uVFAKLS5CIFVuZGVyIElSSVggd2l0aCBzbm9vcDoKLVlvdSBtdXN0IGJlIHJvb3Qgb3IgdGhlIGFwcGxpY2F0aW9uIGNhcHR1cmluZyBwYWNrZXRzIG11c3QgYmUgaW5zdGFsbGVkCi1zZXR1aWQgdG8gcm9vdC4KLS5UUAotLkIgVW5kZXIgTGludXg6Ci1Zb3UgbXVzdCBiZSByb290IG9yIHRoZSBhcHBsaWNhdGlvbiBjYXB0dXJpbmcgcGFja2V0cyBtdXN0IGJlIGluc3RhbGxlZAotc2V0dWlkIHRvIHJvb3QgKHVubGVzcyB5b3VyIGRpc3RyaWJ1dGlvbiBoYXMgYSBrZXJuZWwKLXRoYXQgc3VwcG9ydHMgY2FwYWJpbGl0eSBiaXRzIHN1Y2ggYXMgQ0FQX05FVF9SQVcgYW5kIGNvZGUgdG8gYWxsb3cKLXRob3NlIGNhcGFiaWxpdHkgYml0cyB0byBiZSBnaXZlbiB0byBwYXJ0aWN1bGFyIGFjY291bnRzIGFuZCB0byBjYXVzZQotdGhvc2UgYml0cyB0byBiZSBzZXQgb24gYSB1c2VyJ3MgaW5pdGlhbCBwcm9jZXNzZXMgd2hlbiB0aGV5IGxvZyBpbiwgaW4KLXdoaWNoIGNhc2UgeW91ICBtdXN0IGhhdmUgQ0FQX05FVF9SQVcgaW4gb3JkZXIgdG8gY2FwdHVyZSBhbmQKLUNBUF9ORVRfQURNSU4gdG8gZW51bWVyYXRlIG5ldHdvcmsgZGV2aWNlcyB3aXRoLCBmb3IgZXhhbXBsZSwgdGhlCi0uQiBcLUQKLWZsYWcpLgotLlRQCi0uQiBVbmRlciBVTFRSSVggYW5kIERpZ2l0YWwgVU5JWC9UcnU2NCBVTklYOgotQW55IHVzZXIgbWF5IGNhcHR1cmUgbmV0d29yayB0cmFmZmljLgotSG93ZXZlciwgbm8gdXNlciAobm90IGV2ZW4gdGhlIHN1cGVyLXVzZXIpIGNhbiBjYXB0dXJlIGluIHByb21pc2N1b3VzCi1tb2RlIG9uIGFuIGludGVyZmFjZSB1bmxlc3MgdGhlIHN1cGVyLXVzZXIgaGFzIGVuYWJsZWQgcHJvbWlzY3VvdXMtbW9kZQotb3BlcmF0aW9uIG9uIHRoYXQgaW50ZXJmYWNlIHVzaW5nCi0uSVIgcGZjb25maWcgKDgpLAotYW5kIG5vIHVzZXIgKG5vdCBldmVuIHRoZSBzdXBlci11c2VyKSBjYW4gY2FwdHVyZSB1bmljYXN0IHRyYWZmaWMKLXJlY2VpdmVkIGJ5IG9yIHNlbnQgYnkgdGhlIG1hY2hpbmUgb24gYW4gaW50ZXJmYWNlIHVubGVzcyB0aGUgc3VwZXItdXNlcgotaGFzIGVuYWJsZWQgY29weS1hbGwtbW9kZSBvcGVyYXRpb24gb24gdGhhdCBpbnRlcmZhY2UgdXNpbmcKLS5JUiBwZmNvbmZpZyAsCi1zbwotLkkgdXNlZnVsCi1wYWNrZXQgY2FwdHVyZSBvbiBhbiBpbnRlcmZhY2UgcHJvYmFibHkgcmVxdWlyZXMgdGhhdCBlaXRoZXIKLXByb21pc2N1b3VzLW1vZGUgb3IgY29weS1hbGwtbW9kZSBvcGVyYXRpb24sIG9yIGJvdGggbW9kZXMgb2YKLW9wZXJhdGlvbiwgYmUgZW5hYmxlZCBvbiB0aGF0IGludGVyZmFjZS4KLS5UUAotLkIgVW5kZXIgQlNEICh0aGlzIGluY2x1ZGVzIG1hY09TKToKLVlvdSBtdXN0IGhhdmUgcmVhZCBhY2Nlc3MgdG8KLS5JIC9kZXYvYnBmKgotb24gc3lzdGVtcyB0aGF0IGRvbid0IGhhdmUgYSBjbG9uaW5nIEJQRiBkZXZpY2UsIG9yIHRvCi0uSSAvZGV2L2JwZgotb24gc3lzdGVtcyB0aGF0IGRvLgotT24gQlNEcyB3aXRoIGEgZGV2ZnMgKHRoaXMgaW5jbHVkZXMgbWFjT1MpLCB0aGlzIG1pZ2h0IGludm9sdmUgbW9yZQotdGhhbiBqdXN0IGhhdmluZyBzb21lYm9keSB3aXRoIHN1cGVyLXVzZXIgYWNjZXNzIHNldHRpbmcgdGhlIG93bmVyc2hpcAotb3IgcGVybWlzc2lvbnMgb24gdGhlIEJQRiBkZXZpY2VzIC0gaXQgbWlnaHQgaW52b2x2ZSBjb25maWd1cmluZyBkZXZmcwotdG8gc2V0IHRoZSBvd25lcnNoaXAgb3IgcGVybWlzc2lvbnMgZXZlcnkgdGltZSB0aGUgc3lzdGVtIGlzIGJvb3RlZCwKLWlmIHRoZSBzeXN0ZW0gZXZlbiBzdXBwb3J0cyB0aGF0OyBpZiBpdCBkb2Vzbid0IHN1cHBvcnQgdGhhdCwgeW91IG1pZ2h0Ci1oYXZlIHRvIGZpbmQgc29tZSBvdGhlciB3YXkgdG8gbWFrZSB0aGF0IGhhcHBlbiBhdCBib290IHRpbWUuCi0uUFAKLVJlYWRpbmcgYSBzYXZlZCBwYWNrZXQgZmlsZSBkb2Vzbid0IHJlcXVpcmUgc3BlY2lhbCBwcml2aWxlZ2VzLgotLlBQCi1UaGUgcGFja2V0cyByZWFkIGZyb20gdGhlIGhhbmRsZSBtYXkgaW5jbHVkZSBhIGBgcHNldWRvLWhlYWRlcicnCi1jb250YWluaW5nIHZhcmlvdXMgZm9ybXMgb2YgcGFja2V0IG1ldGEtZGF0YSwgYW5kIHByb2JhYmx5IGluY2x1ZGVzIGEKLWxpbmstbGF5ZXIgaGVhZGVyIHdob3NlIGNvbnRlbnRzIGNhbiBkaWZmZXIgZm9yIGRpZmZlcmVudCBuZXR3b3JrCi1pbnRlcmZhY2VzLiAgVG8gZGV0ZXJtaW5lIHRoZSBmb3JtYXQgb2YgdGhlIHBhY2tldHMgc3VwcGxpZWQgYnkgdGhlCi1oYW5kbGUsIGNhbGwKLS5CUiBwY2FwX2RhdGFsaW5rICgpOwotLkkgaHR0cHM6Ly93d3cudGNwZHVtcC5vcmcvbGlua3R5cGVzLmh0bWwKLWxpc3RzIHRoZSB2YWx1ZXMgaXQgcmV0dXJucyBhbmQgZGVzY3JpYmVzIHRoZSBwYWNrZXQgZm9ybWF0cyB0aGF0Ci1jb3JyZXNwb25kIHRvIHRob3NlIHZhbHVlcy4KLS5QUAotRG8KLS5CIE5PVAotYXNzdW1lIHRoYXQgdGhlIHBhY2tldHMgZm9yIGEgZ2l2ZW4gY2FwdHVyZSBvciBgYHNhdmVmaWxlYGAgd2lsbCBoYXZlCi1hbnkgZ2l2ZW4gbGluay1sYXllciBoZWFkZXIgdHlwZSwgc3VjaCBhcwotLkIgRExUX0VOMTBNQgotZm9yIEV0aGVybmV0LiAgRm9yIGV4YW1wbGUsIHRoZSAiYW55IiBkZXZpY2Ugb24gTGludXggd2lsbCBoYXZlIGEKLWxpbmstbGF5ZXIgaGVhZGVyIHR5cGUgb2YKLS5CIERMVF9MSU5VWF9TTEwKLWV2ZW4gaWYgYWxsIGRldmljZXMgb24gdGhlIHN5c3RlbSBhdCB0aGUgdGltZSB0aGUgImFueSIgZGV2aWNlIGlzIG9wZW5lZAotaGF2ZSBzb21lIG90aGVyIGRhdGEgbGluayB0eXBlLCBzdWNoIGFzCi0uQiBETFRfRU4xME1CCi1mb3IgRXRoZXJuZXQuCi0uUFAKLVRvIG9idGFpbiB0aGUKLS5CICJGSUxFXCAqIgotY29ycmVzcG9uZGluZyB0byBhCi0uQiBwY2FwX3QKLW9wZW5lZCBmb3IgYSBgYHNhdmVmaWxlJycsIGNhbGwKLS5CUiBwY2FwX2ZpbGUgKCkuCi0uVFAKLS5CIFJvdXRpbmVzCi0uUlMKLS5UUAotLkJSIHBjYXBfY3JlYXRlICgzUENBUCkKLWdldCBhCi0uQiBwY2FwX3QKLWZvciBsaXZlIGNhcHR1cmUKLS5UUAotLkJSIHBjYXBfYWN0aXZhdGUgKDNQQ0FQKQotYWN0aXZhdGUgYQotLkIgcGNhcF90Ci1mb3IgbGl2ZSBjYXB0dXJlCi0uVFAKLS5CUiBwY2FwX2ZpbmRhbGxkZXZzICgzUENBUCkKLWdldCBhIGxpc3Qgb2YgZGV2aWNlcyB0aGF0IGNhbiBiZSBvcGVuZWQgZm9yIGEgbGl2ZSBjYXB0dXJlCi0uVFAKLS5CUiBwY2FwX2ZyZWVhbGxkZXZzICgzUENBUCkKLWZyZWUgbGlzdCBvZiBkZXZpY2VzCi0uVFAKLS5CUiBwY2FwX2xvb2t1cGRldiAoM1BDQVApCi1nZXQgZmlyc3Qgbm9uLWxvb3BiYWNrIGRldmljZSBvbiB0aGF0IGxpc3QKLS5UUAotLkJSIHBjYXBfb3Blbl9vZmZsaW5lICgzUENBUCkKLW9wZW4gYQotLkIgcGNhcF90Ci1mb3IgYSBgYHNhdmVmaWxlJycsIGdpdmVuIGEgcGF0aG5hbWUKLS5UUAotLkJSIHBjYXBfb3Blbl9vZmZsaW5lX3dpdGhfdHN0YW1wX3ByZWNpc2lvbiAoM1BDQVApCi1vcGVuIGEKLS5CIHBjYXBfdAotZm9yIGEgYGBzYXZlZmlsZScnLCBnaXZlbiBhIHBhdGhuYW1lLCBhbmQgc3BlY2lmeSB0aGUgcHJlY2lzaW9uIHRvCi1wcm92aWRlIGZvciBwYWNrZXQgdGltZSBzdGFtcHMKLS5UUAotLkJSIHBjYXBfZm9wZW5fb2ZmbGluZSAoM1BDQVApCi1vcGVuIGEKLS5CIHBjYXBfdAotZm9yIGEgYGBzYXZlZmlsZScnLCBnaXZlbiBhCi0uQiAiRklMRVwgKiIKLS5UUAotLkJSIHBjYXBfZm9wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24gKDNQQ0FQKQotb3BlbiBhCi0uQiBwY2FwX3QKLWZvciBhIGBgc2F2ZWZpbGUnJywgZ2l2ZW4gYQotLkJSICJGSUxFXCAqIiAsCi1hbmQgc3BlY2lmeSB0aGUgcHJlY2lzaW9uIHRvIHByb3ZpZGUgZm9yIHBhY2tldCB0aW1lIHN0YW1wcwotLlRQCi0uQlIgcGNhcF9vcGVuX2RlYWQgKDNQQ0FQKQotY3JlYXRlIGEgYGBmYWtlJycKLS5CIHBjYXBfdAotLlRQCi0uQlIgcGNhcF9jbG9zZSAoM1BDQVApCi1jbG9zZSBhCi0uQiBwY2FwX3QKLS5UUAotLkJSIHBjYXBfc2V0X3NuYXBsZW4gKDNQQ0FQKQotc2V0IHRoZSBzbmFwc2hvdCBsZW5ndGggZm9yIGEgbm90LXlldC1hY3RpdmF0ZWQKLS5CIHBjYXBfdAotZm9yIGxpdmUgY2FwdHVyZQotLlRQCi0uQlIgcGNhcF9zbmFwc2hvdCAoM1BDQVApCi1nZXQgdGhlIHNuYXBzaG90IGxlbmd0aCBmb3IgYQotLkIgcGNhcF90Ci0uVFAKLS5CUiBwY2FwX3NldF9wcm9taXNjICgzUENBUCkKLXNldCBwcm9taXNjdW91cyBtb2RlIGZvciBhIG5vdC15ZXQtYWN0aXZhdGVkCi0uQiBwY2FwX3QKLWZvciBsaXZlIGNhcHR1cmUKLS5UUAotLkJSIHBjYXBfc2V0X3Byb3RvY29sX2xpbnV4ICgzUENBUCkKLXNldCBjYXB0dXJlIHByb3RvY29sIGZvciBhIG5vdC15ZXQtYWN0aXZhdGVkCi0uQiBwY2FwX3QKLWZvciBsaXZlIGNhcHR1cmUgKExpbnV4IG9ubHkpCi0uVFAKLS5CUiBwY2FwX3NldF9yZm1vbiAoM1BDQVApCi1zZXQgbW9uaXRvciBtb2RlIGZvciBhIG5vdC15ZXQtYWN0aXZhdGVkCi0uQiBwY2FwX3QKLWZvciBsaXZlIGNhcHR1cmUKLS5UUAotLkJSIHBjYXBfY2FuX3NldF9yZm1vbiAoM1BDQVApCi1kZXRlcm1pbmUgd2hldGhlciBtb25pdG9yIG1vZGUgY2FuIGJlIHNldCBmb3IgYQotLkIgcGNhcF90Ci1mb3IgbGl2ZSBjYXB0dXJlCi0uVFAKLS5CUiBwY2FwX3NldF90aW1lb3V0ICgzUENBUCkKLXNldCBwYWNrZXQgYnVmZmVyIHRpbWVvdXQgZm9yIGEgbm90LXlldC1hY3RpdmF0ZWQKLS5CIHBjYXBfdAotZm9yIGxpdmUgY2FwdHVyZQotLlRQCi0uQlIgcGNhcF9zZXRfYnVmZmVyX3NpemUgKDNQQ0FQKQotc2V0IGJ1ZmZlciBzaXplIGZvciBhIG5vdC15ZXQtYWN0aXZhdGVkCi0uQiBwY2FwX3QKLWZvciBsaXZlIGNhcHR1cmUKLS5UUAotLkJSIHBjYXBfc2V0X3RzdGFtcF90eXBlICgzUENBUCkKLXNldCB0aW1lIHN0YW1wIHR5cGUgZm9yIGEgbm90LXlldC1hY3RpdmF0ZWQKLS5CIHBjYXBfdAotZm9yIGxpdmUgY2FwdHVyZQotLlRQCi0uQlIgcGNhcF9saXN0X3RzdGFtcF90eXBlcyAoM1BDQVApCi1nZXQgbGlzdCBvZiBhdmFpbGFibGUgdGltZSBzdGFtcCB0eXBlcyBmb3IgYSBub3QteWV0LWFjdGl2YXRlZAotLkIgcGNhcF90Ci1mb3IgbGl2ZSBjYXB0dXJlCi0uVFAKLS5CUiBwY2FwX2ZyZWVfdHN0YW1wX3R5cGVzICgzUENBUCkKLWZyZWUgbGlzdCBvZiBhdmFpbGFibGUgdGltZSBzdGFtcCB0eXBlcwotLlRQCi0uQlIgcGNhcF90c3RhbXBfdHlwZV92YWxfdG9fbmFtZSAoM1BDQVApCi1nZXQgbmFtZSBmb3IgYSB0aW1lIHN0YW1wIHR5cGUKLS5UUAotLkJSIHBjYXBfdHN0YW1wX3R5cGVfdmFsX3RvX2Rlc2NyaXB0aW9uICgzUENBUCkKLWdldCBkZXNjcmlwdGlvbiBmb3IgYSB0aW1lIHN0YW1wIHR5cGUKLS5UUAotLkJSIHBjYXBfdHN0YW1wX3R5cGVfbmFtZV90b192YWwgKDNQQ0FQKQotZ2V0IHRpbWUgc3RhbXAgdHlwZSBjb3JyZXNwb25kaW5nIHRvIGEgbmFtZQotLlRQCi0uQlIgcGNhcF9zZXRfdHN0YW1wX3ByZWNpc2lvbiAoM1BDQVApCi1zZXQgdGltZSBzdGFtcCBwcmVjaXNpb24gZm9yIGEgbm90LXlldC1hY3RpdmF0ZWQKLS5CIHBjYXBfdAotZm9yIGxpdmUgY2FwdHVyZQotLlRQCi0uQlIgcGNhcF9nZXRfdHN0YW1wX3ByZWNpc2lvbiAoM1BDQVApCi1nZXQgdGhlIHRpbWUgc3RhbXAgcHJlY2lzaW9uIG9mIGEKLS5CIHBjYXBfdAotZm9yIGxpdmUgY2FwdHVyZQotLlRQCi0uQlIgcGNhcF9kYXRhbGluayAoM1BDQVApCi1nZXQgbGluay1sYXllciBoZWFkZXIgdHlwZSBmb3IgYQotLkIgcGNhcF90Ci0uVFAKLS5CUiBwY2FwX2ZpbGUgKDNQQ0FQKQotZ2V0IHRoZQotLkIgIkZJTEVcICoiCi1mb3IgYQotLkIgcGNhcF90Ci1vcGVuZWQgZm9yIGEgYGBzYXZlZmlsZScnCi0uVFAKLS5CUiBwY2FwX2lzX3N3YXBwZWQgKDNQQ0FQKQotZGV0ZXJtaW5lIHdoZXRoZXIgYSBgYHNhdmVmaWxlJycgYmVpbmcgcmVhZCBjYW1lIGZyb20gYSBtYWNoaW5lIHdpdGggdGhlCi1vcHBvc2l0ZSBieXRlIG9yZGVyCi0uVFAKLS5CUiBwY2FwX21ham9yX3ZlcnNpb24gKDNQQ0FQKQotLlBEIDAKLS5UUAotLkJSIHBjYXBfbWlub3JfdmVyc2lvbiAoM1BDQVApCi1nZXQgdGhlIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG9mIHRoZSBmaWxlIGZvcm1hdCB2ZXJzaW9uIGZvciBhCi1gYHNhdmVmaWxlJycKLS5QRAotLlJFCi0uU1MgU2VsZWN0aW5nIGEgbGluay1sYXllciBoZWFkZXIgdHlwZSBmb3IgYSBsaXZlIGNhcHR1cmUKLVNvbWUgZGV2aWNlcyBtYXkgcHJvdmlkZSBtb3JlIHRoYW4gb25lIGxpbmstbGF5ZXIgaGVhZGVyIHR5cGUuICBUbwotb2J0YWluIGEgbGlzdCBvZiBhbGwgbGluay1sYXllciBoZWFkZXIgdHlwZXMgcHJvdmlkZWQgYnkgYSBkZXZpY2UsIGNhbGwKLS5CUiBwY2FwX2xpc3RfZGF0YWxpbmtzICgpCi1vbiBhbiBhY3RpdmF0ZWQKLS5CIHBjYXBfdAotZm9yIHRoZSBkZXZpY2UuCi1UbyBmcmVlIGEgbGlzdCBvZiBsaW5rLWxheWVyIGhlYWRlciB0eXBlcywgY2FsbAotLkJSIHBjYXBfZnJlZV9kYXRhbGlua3MgKCkuCi1UbyBzZXQgdGhlIGxpbmstbGF5ZXIgaGVhZGVyIHR5cGUgZm9yIGEgZGV2aWNlLCBjYWxsCi0uQlIgcGNhcF9zZXRfZGF0YWxpbmsgKCkuCi1UaGlzIHNob3VsZCBiZSBkb25lIGFmdGVyIHRoZSBkZXZpY2UgaGFzIGJlZW4gYWN0aXZhdGVkIGJ1dCBiZWZvcmUgYW55Ci1wYWNrZXRzIGFyZSByZWFkIGFuZCBiZWZvcmUgYW55IGZpbHRlcnMgYXJlIGNvbXBpbGVkIG9yIGluc3RhbGxlZC4KLS5UUAotLkIgUm91dGluZXMKLS5SUwotLlRQCi0uQlIgcGNhcF9saXN0X2RhdGFsaW5rcyAoM1BDQVApCi1nZXQgYSBsaXN0IG9mIGxpbmstbGF5ZXIgaGVhZGVyIHR5cGVzIGZvciBhIGRldmljZQotLlRQCi0uQlIgcGNhcF9mcmVlX2RhdGFsaW5rcyAoM1BDQVApCi1mcmVlIGxpc3Qgb2YgbGluay1sYXllciBoZWFkZXIgdHlwZXMKLS5UUAotLkJSIHBjYXBfc2V0X2RhdGFsaW5rICgzUENBUCkKLXNldCBsaW5rLWxheWVyIGhlYWRlciB0eXBlIGZvciBhIGRldmljZQotLlRQCi0uQlIgcGNhcF9kYXRhbGlua192YWxfdG9fbmFtZSAoM1BDQVApCi1nZXQgbmFtZSBmb3IgYSBsaW5rLWxheWVyIGhlYWRlciB0eXBlCi0uVFAKLS5CUiBwY2FwX2RhdGFsaW5rX3ZhbF90b19kZXNjcmlwdGlvbiAoM1BDQVApCi1nZXQgZGVzY3JpcHRpb24gZm9yIGEgbGluay1sYXllciBoZWFkZXIgdHlwZQotLlRQCi0uQlIgcGNhcF9kYXRhbGlua19uYW1lX3RvX3ZhbCAoM1BDQVApCi1nZXQgbGluay1sYXllciBoZWFkZXIgdHlwZSBjb3JyZXNwb25kaW5nIHRvIGEgbmFtZQotLlJFCi0uU1MgUmVhZGluZyBwYWNrZXRzCi1QYWNrZXRzIGFyZSByZWFkIHdpdGgKLS5CUiBwY2FwX2Rpc3BhdGNoICgpCi1vcgotLkJSIHBjYXBfbG9vcCAoKSwKLXdoaWNoIHByb2Nlc3Mgb25lIG9yIG1vcmUgcGFja2V0cywgY2FsbGluZyBhIGNhbGxiYWNrIHJvdXRpbmUgZm9yIGVhY2gKLXBhY2tldCwgb3Igd2l0aAotLkJSIHBjYXBfbmV4dCAoKQotb3IKLS5CUiBwY2FwX25leHRfZXggKCksCi13aGljaCByZXR1cm4gdGhlIG5leHQgcGFja2V0LgotVGhlIGNhbGxiYWNrIGZvcgotLkJSIHBjYXBfZGlzcGF0Y2ggKCkKLWFuZAotLkJSIHBjYXBfbG9vcCAoKQotaXMgc3VwcGxpZWQgYSBwb2ludGVyIHRvIGEKLS5JUiAic3RydWN0IHBjYXBfcGt0aGRyIiAsCi13aGljaCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIG1lbWJlcnM6Ci0uUlMKLS5UUAotLkIgdHMKLWEKLS5JIHN0cnVjdCB0aW1ldmFsCi1jb250YWluaW5nIHRoZSB0aW1lIHdoZW4gdGhlIHBhY2tldCB3YXMgY2FwdHVyZWQKLS5UUAotLkIgY2FwbGVuCi1hCi0uSSBicGZfdV9pbnQzMgotZ2l2aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgdGhlIHBhY2tldCB0aGF0IGFyZSBhdmFpbGFibGUgZnJvbSB0aGUKLWNhcHR1cmUKLS5UUAotLkIgbGVuCi1hCi0uSSBicGZfdV9pbnQzMgotZ2l2aW5nIHRoZSBsZW5ndGggb2YgdGhlIHBhY2tldCwgaW4gYnl0ZXMgKHdoaWNoIG1pZ2h0IGJlIG1vcmUgdGhhbiB0aGUKLW51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgZnJvbSB0aGUgY2FwdHVyZSwgaWYgdGhlIGxlbmd0aCBvZiB0aGUgcGFja2V0Ci1pcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gY2FwdHVyZSkuCi0uUkUKLS5QUAotVGhlIGNhbGxiYWNrIGlzIGFsc28gc3VwcGxpZWQgYQotLkkgY29uc3QgdV9jaGFyCi1wb2ludGVyIHRvIHRoZSBmaXJzdAotLkIgY2FwbGVuCi0oYXMgZ2l2ZW4gaW4gdGhlCi0uSSBzdHJ1Y3QgcGNhcF9wa3RoZHIKLW1lbnRpb25lZCBhYm92ZSkKLWJ5dGVzIG9mIGRhdGEgZnJvbSB0aGUgcGFja2V0LiAgVGhpcyB3b24ndCBuZWNlc3NhcmlseSBiZSB0aGUgZW50aXJlCi1wYWNrZXQ7IHRvIGNhcHR1cmUgdGhlIGVudGlyZSBwYWNrZXQsIHlvdSB3aWxsIGhhdmUgdG8gcHJvdmlkZSBhIHZhbHVlCi1mb3IKLS5JIHNuYXBsZW4KLWluIHlvdXIgY2FsbCB0bwotLkJSIHBjYXBfc2V0X3NuYXBsZW4gKCkKLXRoYXQgaXMgc3VmZmljaWVudGx5IGxhcmdlIHRvIGdldCBhbGwgb2YgdGhlIHBhY2tldCdzIGRhdGEgLSBhIHZhbHVlIG9mCi02NTUzNSBzaG91bGQgYmUgc3VmZmljaWVudCBvbiBtb3N0IGlmIG5vdCBhbGwgbmV0d29ya3MpLiAgV2hlbiByZWFkaW5nCi1mcm9tIGEgYGBzYXZlZmlsZScnLCB0aGUgc25hcHNob3QgbGVuZ3RoIHNwZWNpZmllZCB3aGVuIHRoZSBjYXB0dXJlIHdhcwotcGVyZm9ybWVkIHdpbGwgbGltaXQgdGhlIGFtb3VudCBvZiBwYWNrZXQgZGF0YSBhdmFpbGFibGUuCi0uUFAKLS5CUiBwY2FwX25leHQgKCkKLWlzIHBhc3NlZCBhbiBhcmd1bWVudCB0aGF0IHBvaW50cyB0byBhCi0uSSBzdHJ1Y3QgcGNhcF9wa3RoZHIKLXN0cnVjdHVyZSwgYW5kIGZpbGxzIGl0IGluIHdpdGggdGhlIHRpbWUgc3RhbXAgYW5kIGxlbmd0aCB2YWx1ZXMgZm9yIHRoZQotcGFja2V0LiAgSXQgcmV0dXJucyBhCi0uSSBjb25zdCB1X2NoYXIKLXRvIHRoZSBmaXJzdAotLkIgY2FwbGVuCi1ieXRlcyBvZiB0aGUgcGFja2V0IG9uIHN1Y2Nlc3MsIGFuZCBOVUxMIG9uIGVycm9yLgotLlBQCi0uQlIgcGNhcF9uZXh0X2V4ICgpCi1pcyBwYXNzZWQgdHdvIHBvaW50ZXIgYXJndW1lbnRzLCBvbmUgb2Ygd2hpY2ggcG9pbnRzIHRvIGEKLS5JUiBzdHJ1Y3QgcGNhcF9wa3RoZHIgKgotYW5kIG9uZSBvZiB3aGljaCBwb2ludHMgdG8gYQotLklSICJjb25zdCB1X2NoYXIiICouCi1JdCBzZXRzIHRoZSBmaXJzdCBwb2ludGVyIHRvIHBvaW50IHRvIGEKLS5JIHN0cnVjdCBwY2FwX3BrdGhkcgotc3RydWN0dXJlIHdpdGggdGhlIHRpbWUgc3RhbXAgYW5kIGxlbmd0aCB2YWx1ZXMgZm9yIHRoZSBwYWNrZXQsIGFuZCBzZXRzCi10aGUgc2Vjb25kIHBvaW50ZXIgdG8gcG9pbnQgdG8gdGhlIGZpcnN0Ci0uQiBjYXBsZW4KLWJ5dGVzIG9mIHRoZSBwYWNrZXQuCi0uUFAKLVRvIGZvcmNlIHRoZSBsb29wIGluCi0uQlIgcGNhcF9kaXNwYXRjaCAoKQotb3IKLS5CUiBwY2FwX2xvb3AgKCkKLXRvIHRlcm1pbmF0ZSwgY2FsbAotLkJSIHBjYXBfYnJlYWtsb29wICgpLgotLlBQCi1CeSBkZWZhdWx0LCB3aGVuIHJlYWRpbmcgcGFja2V0cyBmcm9tIGFuIGludGVyZmFjZSBvcGVuZWQgZm9yIGEgbGl2ZQotY2FwdHVyZSwKLS5CUiBwY2FwX2Rpc3BhdGNoICgpLAotLkJSIHBjYXBfbmV4dCAoKSwKLWFuZAotLkJSIHBjYXBfbmV4dF9leCAoKQotd2lsbCwgaWYgbm8gcGFja2V0cyBhcmUgY3VycmVudGx5IGF2YWlsYWJsZSB0byBiZSByZWFkLCBibG9jayB3YWl0aW5nCi1mb3IgcGFja2V0cyB0byBiZWNvbWUgYXZhaWxhYmxlLiAgT24gc29tZSwgYnV0Ci0uSSBub3QKLWFsbCwgcGxhdGZvcm1zLCBpZiBhIHBhY2tldCBidWZmZXIgdGltZW91dCB3YXMgc3BlY2lmaWVkLCB0aGUgd2FpdCB3aWxsCi10ZXJtaW5hdGUgYWZ0ZXIgdGhlIHBhY2tldCBidWZmZXIgdGltZW91dCBleHBpcmVzOyBhcHBsaWNhdGlvbnMgc2hvdWxkCi1iZSBwcmVwYXJlZCBmb3IgdGhpcywgYXMgaXQgaGFwcGVucyBvbiBzb21lIHBsYXRmb3JtcywgYnV0IHNob3VsZCBub3QKLXJlbHkgb24gaXQsIGFzIGl0IGRvZXMgbm90IGhhcHBlbiBvbiBvdGhlciBwbGF0Zm9ybXMuICBOb3RlIHRoYXQgdGhlCi13YWl0IG1pZ2h0LCBvciBtaWdodCBub3QsIHRlcm1pbmF0ZSBldmVuIGlmIG5vIHBhY2tldHMgYXJlIGF2YWlsYWJsZTsKLWFwcGxpY2F0aW9ucyBzaG91bGQgYmUgcHJlcGFyZWQgZm9yIHRoaXMgdG8gaGFwcGVuLCBidXQgbXVzdCBub3QgcmVseSBvbgotaXQgaGFwcGVuaW5nLgotLlBQCi1BIGhhbmRsZSBjYW4gYmUgcHV0IGludG8gYGBub24tYmxvY2tpbmcgbW9kZScnLCBzbyB0aGF0IHRob3NlIHJvdXRpbmVzCi13aWxsLCByYXRoZXIgdGhhbiBibG9ja2luZywgcmV0dXJuIGFuIGluZGljYXRpb24gdGhhdCBubyBwYWNrZXRzIGFyZQotYXZhaWxhYmxlIHRvIHJlYWQuICBDYWxsCi0uQlIgcGNhcF9zZXRub25ibG9jayAoKQotdG8gcHV0IGEgaGFuZGxlIGludG8gbm9uLWJsb2NraW5nIG1vZGUgb3IgdG8gdGFrZSBpdCBvdXQgb2Ygbm9uLWJsb2NraW5nCi1tb2RlOyBjYWxsCi0uQlIgcGNhcF9nZXRub25ibG9jayAoKQotdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBoYW5kbGUgaXMgaW4gbm9uLWJsb2NraW5nIG1vZGUuICBOb3RlIHRoYXQKLW5vbi1ibG9ja2luZyBtb2RlIGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IGluIE1hYyBPUyBYIDEwLjYuCi0uUFAKLU5vbi1ibG9ja2luZyBtb2RlIGlzIG9mdGVuIGNvbWJpbmVkIHdpdGggcm91dGluZXMgc3VjaCBhcwotLkJSIHNlbGVjdCAoMikKLW9yCi0uQlIgcG9sbCAoMikKLW9yIG90aGVyIHJvdXRpbmVzIGEgcGxhdGZvcm0gb2ZmZXJzIHRvIHdhaXQgZm9yIGFueSBvZiBhIHNldCBvZgotZGVzY3JpcHRvcnMgdG8gYmUgcmVhZHkgdG8gcmVhZC4gIFRvIG9idGFpbiwgZm9yIGEgaGFuZGxlLCBhIGRlc2NyaXB0b3IKLXRoYXQgY2FuIGJlIHVzZWQgaW4gdGhvc2Ugcm91dGluZXMsIGNhbGwKLS5CUiBwY2FwX2dldF9zZWxlY3RhYmxlX2ZkICgpLgotTm90IGFsbCBoYW5kbGVzIGhhdmUgc3VjaCBhIGRlc2NyaXB0b3IgYXZhaWxhYmxlOwotLkJSIHBjYXBfZ2V0X3NlbGVjdGFibGVfZmQgKCkKLXdpbGwgcmV0dXJuIFwtMSBpZiBubyBzdWNoIGRlc2NyaXB0b3IgZXhpc3RzLiAgSW4gYWRkaXRpb24sIGZvciB2YXJpb3VzCi1yZWFzb25zLCBvbmUgb3IgbW9yZSBvZiB0aG9zZSByb3V0aW5lcyB3aWxsIG5vdCB3b3JrIHByb3Blcmx5IHdpdGggdGhlCi1kZXNjcmlwdG9yOyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKLS5CUiBwY2FwX2dldF9zZWxlY3RhYmxlX2ZkICgpCi1naXZlcyBkZXRhaWxzLiAgTm90ZSB0aGF0LCBqdXN0IGFzIGFuIGF0dGVtcHQgdG8gcmVhZCBwYWNrZXRzIGZyb20gYQotLkIgcGNhcF90Ci1tYXkgbm90IHJldHVybiBhbnkgcGFja2V0cyBpZiB0aGUgcGFja2V0IGJ1ZmZlciB0aW1lb3V0IGV4cGlyZXMsIGEKLS5CUiBzZWxlY3QgKCksCi0uQlIgcG9sbCAoKSwKLW9yIG90aGVyIHN1Y2ggY2FsbCBtYXksIGlmIHRoZSBwYWNrZXQgYnVmZmVyIHRpbWVvdXQgZXhwaXJlcywgaW5kaWNhdGUKLXRoYXQgYSBkZXNjcmlwdG9yIGlzIHJlYWR5IHRvIHJlYWQgZXZlbiBpZiB0aGVyZSBhcmUgbm8gcGFja2V0cwotYXZhaWxhYmxlIHRvIHJlYWQuCi0uVFAKLS5CIFJvdXRpbmVzCi0uUlMKLS5UUAotLkJSIHBjYXBfZGlzcGF0Y2ggKDNQQ0FQKQotcmVhZCBhIGJ1ZmZlcmZ1bCBvZiBwYWNrZXRzIGZyb20gYQotLkIgcGNhcF90Ci1vcGVuIGZvciBhIGxpdmUgY2FwdHVyZSBvciB0aGUgZnVsbCBzZXQgb2YgcGFja2V0cyBmcm9tIGEKLS5CIHBjYXBfdAotb3BlbiBmb3IgYSBgYHNhdmVmaWxlJycKLS5UUAotLkJSIHBjYXBfbG9vcCAoM1BDQVApCi1yZWFkIHBhY2tldHMgZnJvbSBhCi0uQiBwY2FwX3QKLXVudGlsIGFuIGludGVycnVwdCBvciBlcnJvciBvY2N1cnMKLS5UUAotLkJSIHBjYXBfbmV4dCAoM1BDQVApCi1yZWFkIHRoZSBuZXh0IHBhY2tldCBmcm9tIGEKLS5CIHBjYXBfdAotd2l0aG91dCBhbiBpbmRpY2F0aW9uIHdoZXRoZXIgYW4gZXJyb3Igb2NjdXJyZWQKLS5UUAotLkJSIHBjYXBfbmV4dF9leCAoM1BDQVApCi1yZWFkIHRoZSBuZXh0IHBhY2tldCBmcm9tIGEKLS5CIHBjYXBfdAotd2l0aCBhbiBlcnJvciBpbmRpY2F0aW9uIG9uIGFuIGVycm9yCi0uVFAKLS5CUiBwY2FwX2JyZWFrbG9vcCAoM1BDQVApCi1wcmVtYXR1cmVseSB0ZXJtaW5hdGUgdGhlIGxvb3AgaW4KLS5CUiBwY2FwX2Rpc3BhdGNoICgpCi1vcgotLkJSIHBjYXBfbG9vcCAoKQotLlRQCi0uQlIgcGNhcF9zZXRub25ibG9jayAoM1BDQVApCi1zZXQgb3IgY2xlYXIgbm9uLWJsb2NraW5nIG1vZGUgb24gYQotLkIgcGNhcF90Ci0uVFAKLS5CUiBwY2FwX2dldG5vbmJsb2NrICgzUENBUCkKLWdldCB0aGUgc3RhdGUgb2Ygbm9uLWJsb2NraW5nIG1vZGUgZm9yIGEKLS5CIHBjYXBfdAotLlRQCi0uQlIgcGNhcF9nZXRfc2VsZWN0YWJsZV9mZCAoM1BDQVApCi1hdHRlbXB0IHRvIGdldCBhIGRlc2NyaXB0b3IgZm9yIGEKLS5CIHBjYXBfdAotdGhhdCBjYW4gYmUgdXNlZCBpbiBjYWxscyBzdWNoIGFzCi0uQlIgc2VsZWN0ICgyKQotYW5kCi0uQlIgcG9sbCAoMikKLS5SRQotLlNTIEZpbHRlcnMKLUluIG9yZGVyIHRvIGNhdXNlIG9ubHkgY2VydGFpbiBwYWNrZXRzIHRvIGJlIHJldHVybmVkIHdoZW4gcmVhZGluZwotcGFja2V0cywgYSBmaWx0ZXIgY2FuIGJlIHNldCBvbiBhIGhhbmRsZS4gIEZvciBhIGxpdmUgY2FwdHVyZSwgdGhlCi1maWx0ZXJpbmcgd2lsbCBiZSBwZXJmb3JtZWQgaW4ga2VybmVsIG1vZGUsIGlmIHBvc3NpYmxlLCB0byBhdm9pZAotY29weWluZyBgYHVuaW50ZXJlc3RpbmcnJyBwYWNrZXRzIGZyb20gdGhlIGtlcm5lbCB0byB1c2VyIG1vZGUuCi0uUFAKLUEgZmlsdGVyIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSB0ZXh0IHN0cmluZzsgdGhlIHN5bnRheCBhbmQgc2VtYW50aWNzIG9mCi10aGUgc3RyaW5nIGFyZSBhcyBkZXNjcmliZWQgYnkKLS5CUiBwY2FwLWZpbHRlciAoNykuCi1BIGZpbHRlciBzdHJpbmcgaXMgY29tcGlsZWQgaW50byBhIHByb2dyYW0gaW4gYSBwc2V1ZG8tbWFjaGluZS1sYW5ndWFnZQotYnkKLS5CUiBwY2FwX2NvbXBpbGUgKCkKLWFuZCB0aGUgcmVzdWx0aW5nIHByb2dyYW0gY2FuIGJlIG1hZGUgYSBmaWx0ZXIgZm9yIGEgaGFuZGxlIHdpdGgKLS5CUiBwY2FwX3NldGZpbHRlciAoKS4KLVRoZSByZXN1bHQgb2YKLS5CUiBwY2FwX2NvbXBpbGUgKCkKLWNhbiBiZSBmcmVlZCB3aXRoIGEgY2FsbCB0bwotLkJSIHBjYXBfZnJlZWNvZGUgKCkuCi0uQlIgcGNhcF9jb21waWxlICgpCi1tYXkgcmVxdWlyZSBhIG5ldHdvcmsgbWFzayBmb3IgY2VydGFpbiBleHByZXNzaW9ucyBpbiB0aGUgZmlsdGVyIHN0cmluZzsKLS5CUiBwY2FwX2xvb2t1cG5ldCAoKQotY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgbmV0d29yayBhZGRyZXNzIGFuZCBuZXR3b3JrIG1hc2sgZm9yIGEgZ2l2ZW4KLWNhcHR1cmUgZGV2aWNlLgotLlBQCi1BIGNvbXBpbGVkIGZpbHRlciBjYW4gYWxzbyBiZSBhcHBsaWVkIGRpcmVjdGx5IHRvIGEgcGFja2V0IHRoYXQgaGFzIGJlZW4KLXJlYWQgdXNpbmcKLS5CUiBwY2FwX29mZmxpbmVfZmlsdGVyICgpLgotLlRQCi0uQiBSb3V0aW5lcwotLlJTCi0uVFAKLS5CUiBwY2FwX2NvbXBpbGUgKDNQQ0FQKQotY29tcGlsZSBmaWx0ZXIgZXhwcmVzc2lvbiB0byBhIHBzZXVkby1tYWNoaW5lLWxhbmd1YWdlIGNvZGUgcHJvZ3JhbQotLlRQCi0uQlIgcGNhcF9mcmVlY29kZSAoM1BDQVApCi1mcmVlIGEgZmlsdGVyIHByb2dyYW0KLS5UUAotLkJSIHBjYXBfc2V0ZmlsdGVyICgzUENBUCkKLXNldCBmaWx0ZXIgZm9yIGEKLS5CIHBjYXBfdAotLlRQCi0uQlIgcGNhcF9sb29rdXBuZXQgKDNQQ0FQKQotZ2V0IG5ldHdvcmsgYWRkcmVzcyBhbmQgbmV0d29yayBtYXNrIGZvciBhIGNhcHR1cmUgZGV2aWNlCi0uVFAKLS5CUiBwY2FwX29mZmxpbmVfZmlsdGVyICgzUENBUCkKLWFwcGx5IGEgZmlsdGVyIHByb2dyYW0gdG8gYSBwYWNrZXQKLS5SRQotLlNTIEluY29taW5nIGFuZCBvdXRnb2luZyBwYWNrZXRzCi1CeSBkZWZhdWx0LCBsaWJwY2FwIHdpbGwgYXR0ZW1wdCB0byBjYXB0dXJlIGJvdGggcGFja2V0cyBzZW50IGJ5IHRoZQotbWFjaGluZSBhbmQgcGFja2V0cyByZWNlaXZlZCBieSB0aGUgbWFjaGluZS4gIFRvIGxpbWl0IGl0IHRvIGNhcHR1cmluZwotb25seSBwYWNrZXRzIHJlY2VpdmVkIGJ5IHRoZSBtYWNoaW5lIG9yLCBpZiBwb3NzaWJsZSwgb25seSBwYWNrZXRzIHNlbnQKLWJ5IHRoZSBtYWNoaW5lLCBjYWxsCi0uQlIgcGNhcF9zZXRkaXJlY3Rpb24gKCkuCi0uVFAKLS5CUiBSb3V0aW5lcwotLlJTCi0uVFAKLS5CUiBwY2FwX3NldGRpcmVjdGlvbiAoM1BDQVApCi1zcGVjaWZ5IHdoZXRoZXIgdG8gY2FwdHVyZSBpbmNvbWluZyBwYWNrZXRzLCBvdXRnb2luZyBwYWNrZXRzLCBvciBib3RoCi0uUkUKLS5TUyBDYXB0dXJlIHN0YXRpc3RpY3MKLVRvIGdldCBzdGF0aXN0aWNzIGFib3V0IHBhY2tldHMgcmVjZWl2ZWQgYW5kIGRyb3BwZWQgaW4gYSBsaXZlIGNhcHR1cmUsCi1jYWxsCi0uQlIgcGNhcF9zdGF0cyAoKS4KLS5UUAotLkIgUm91dGluZXMKLS5SUwotLlRQCi0uQlIgcGNhcF9zdGF0cyAoM1BDQVApCi1nZXQgY2FwdHVyZSBzdGF0aXN0aWNzCi0uUkUKLS5TUyBPcGVuaW5nIGEgaGFuZGxlIGZvciB3cml0aW5nIGNhcHR1cmVkIHBhY2tldHMKLVRvIG9wZW4gYSBgYHNhdmVmaWxlYGAgdG8gd2hpY2ggdG8gd3JpdGUgcGFja2V0cywgZ2l2ZW4gdGhlIHBhdGhuYW1lIHRoZQotYGBzYXZlZmlsZScnIHNob3VsZCBoYXZlLCBjYWxsCi0uQlIgcGNhcF9kdW1wX29wZW4gKCkuCi1UbyBvcGVuIGEgYGBzYXZlZmlsZWBgIHRvIHdoaWNoIHRvIHdyaXRlIHBhY2tldHMsIGdpdmVuIHRoZSBwYXRobmFtZSB0aGUKLWBgc2F2ZWZpbGUnJyBzaG91bGQgaGF2ZSwgY2FsbAotLkJSIHBjYXBfZHVtcF9vcGVuICgpOwotdG8gc2V0IHVwIGEgaGFuZGxlIGZvciBhIGBgc2F2ZWZpbGUnJywgZ2l2ZW4gYQotLkIgIkZJTEVcICoiCi1yZWZlcnJpbmcgdG8gYSBmaWxlIGFscmVhZHkgb3BlbmVkIGZvciB3cml0aW5nLCBjYWxsCi0uQlIgcGNhcF9kdW1wX2ZvcGVuICgpLgotVGhleSBlYWNoIHJldHVybiBwb2ludGVycyB0byBhCi0uQlIgcGNhcF9kdW1wZXJfdCAsCi13aGljaCBpcyB0aGUgaGFuZGxlIHVzZWQgZm9yIHdyaXRpbmcgcGFja2V0cyB0byB0aGUgYGBzYXZlZmlsZScnLiAgSWYgaXQKLXN1Y2NlZWRzLCBpdCB3aWxsIGhhdmUgY3JlYXRlZCB0aGUgZmlsZSBpZiBpdCBkb2Vzbid0IGV4aXN0IGFuZAotdHJ1bmNhdGVkIHRoZSBmaWxlIGlmIGl0IGRvZXMgZXhpc3QuCi1UbyBjbG9zZSBhCi0uQlIgcGNhcF9kdW1wZXJfdCAsCi1jYWxsCi0uQlIgcGNhcF9kdW1wX2Nsb3NlICgpLgotLlRQCi0uQiBSb3V0aW5lcwotLlJTCi0uVFAKLS5CUiBwY2FwX2R1bXBfb3BlbiAoM1BDQVApCi1vcGVuIGEKLS5CIHBjYXBfZHVtcGVyX3QKLWZvciBhIGBgc2F2ZWZpbGVgYCwgZ2l2ZW4gYSBwYXRobmFtZQotLlRQCi0uQlIgcGNhcF9kdW1wX2ZvcGVuICgzUENBUCkKLW9wZW4gYQotLkIgcGNhcF9kdW1wZXJfdAotZm9yIGEgYGBzYXZlZmlsZWBgLCBnaXZlbiBhCi0uQiAiRklMRVwgKiIKLS5UUAotLkJSIHBjYXBfZHVtcF9jbG9zZSAoM1BDQVApCi1jbG9zZSBhCi0uQiBwY2FwX2R1bXBlcl90Ci0uVFAKLS5CUiBwY2FwX2R1bXBfZmlsZSAoM1BDQVApCi1nZXQgdGhlCi0uQiAiRklMRVwgKiIKLWZvciBhCi0uQiBwY2FwX2R1bXBlcl90Ci1vcGVuZWQgZm9yIGEgYGBzYXZlZmlsZScnCi0uUkUKLS5TUyBXcml0aW5nIHBhY2tldHMKLVRvIHdyaXRlIGEgcGFja2V0IHRvIGEKLS5CUiBwY2FwX2R1bXBlcl90ICwKLWNhbGwKLS5CUiBwY2FwX2R1bXAgKCkuCi1QYWNrZXRzIHdyaXR0ZW4gd2l0aAotLkJSIHBjYXBfZHVtcCAoKQotbWF5IGJlIGJ1ZmZlcmVkLCByYXRoZXIgdGhhbiBiZWluZyBpbW1lZGlhdGVseSB3cml0dGVuIHRvIHRoZQotYGBzYXZlZmlsZScnLiAgQ2xvc2luZyB0aGUKLS5CIHBjYXBfZHVtcGVyX3QKLXdpbGwgY2F1c2UgYWxsIGJ1ZmZlcmVkLWJ1dC1ub3QteWV0LXdyaXR0ZW4gcGFja2V0cyB0byBiZSB3cml0dGVuIHRvIHRoZQotYGBzYXZlZmlsZScnLgotVG8gZm9yY2UgYWxsIHBhY2tldHMgd3JpdHRlbiB0byB0aGUKLS5CUiBwY2FwX2R1bXBlcl90ICwKLWFuZCBub3QgeWV0IHdyaXR0ZW4gdG8gdGhlIGBgc2F2ZWZpbGUnJyBiZWNhdXNlIHRoZXkncmUgYnVmZmVyZWQgYnkgdGhlCi0uQlIgcGNhcF9kdW1wZXJfdCAsCi10byBiZSB3cml0dGVuIHRvIHRoZSBgYHNhdmVmaWxlJycsIHdpdGhvdXQgY2xvc2luZyB0aGUKLS5CUiBwY2FwX2R1bXBlcl90ICwKLWNhbGwKLS5CUiBwY2FwX2R1bXBfZmx1c2ggKCkuCi0uVFAKLS5CIFJvdXRpbmVzCi0uUlMKLS5UUAotLkJSIHBjYXBfZHVtcCAoM1BDQVApCi13cml0ZSBwYWNrZXQgdG8gYQotLkIgcGNhcF9kdW1wZXJfdAotLlRQCi0uQlIgcGNhcF9kdW1wX2ZsdXNoICgzUENBUCkKLWZsdXNoIGJ1ZmZlcmVkIHBhY2tldHMgd3JpdHRlbiB0byBhCi0uQiBwY2FwX2R1bXBlcl90Ci10byB0aGUgYGBzYXZlZmlsZScnCi0uVFAKLS5CUiBwY2FwX2R1bXBfZnRlbGwgKDNQQ0FQKQotZ2V0IGN1cnJlbnQgZmlsZSBwb3NpdGlvbiBmb3IgYQotLkIgcGNhcF9kdW1wZXJfdAotLlJFCi0uU1MgSW5qZWN0aW5nIHBhY2tldHMKLUlmIHlvdSBoYXZlIHRoZSByZXF1aXJlZCBwcml2aWxlZ2VzLCB5b3UgY2FuIGluamVjdCBwYWNrZXRzIG9udG8gYQotbmV0d29yayB3aXRoIGEKLS5CIHBjYXBfdAotZm9yIGEgbGl2ZSBjYXB0dXJlLCB1c2luZwotLkJSIHBjYXBfaW5qZWN0ICgpCi1vcgotLkJSIHBjYXBfc2VuZHBhY2tldCAoKS4KLShUaGUgdHdvIHJvdXRpbmVzIGV4aXN0IGZvciBjb21wYXRpYmlsaXR5IHdpdGggYm90aCBPcGVuQlNEIGFuZCBXaW5QY2FwOwotdGhleSBwZXJmb3JtIHRoZSBzYW1lIGZ1bmN0aW9uLCBidXQgaGF2ZSBkaWZmZXJlbnQgcmV0dXJuIHZhbHVlcy4pCi0uVFAKLS5CIFJvdXRpbmVzCi0uUlMKLS5UUAotLkJSIHBjYXBfaW5qZWN0ICgzUENBUCkKLS5QRCAwCi0uVFAKLS5CUiBwY2FwX3NlbmRwYWNrZXQgKDNQQ0FQKQotdHJhbnNtaXQgYSBwYWNrZXQKLS5QRAotLlJFCi0uU1MgUmVwb3J0aW5nIGVycm9ycwotU29tZSByb3V0aW5lcyByZXR1cm4gZXJyb3Igb3Igd2FybmluZyBzdGF0dXMgY29kZXM7IHRvIGNvbnZlcnQgdGhlbSB0byBhCi1zdHJpbmcsIHVzZQotLkJSIHBjYXBfc3RhdHVzdG9zdHIgKCkuCi0uVFAKLS5CIFJvdXRpbmVzCi0uUlMKLS5UUAotLkJSIHBjYXBfc3RhdHVzdG9zdHIgKDNQQ0FQKQotZ2V0IGEgc3RyaW5nIGZvciBhbiBlcnJvciBvciB3YXJuaW5nIHN0YXR1cyBjb2RlCi0uUkUKLS5TUyBHZXR0aW5nIGxpYnJhcnkgdmVyc2lvbiBpbmZvcm1hdGlvbgotVG8gZ2V0IGEgc3RyaW5nIGdpdmluZyB2ZXJzaW9uIGluZm9ybWF0aW9uIGFib3V0IGxpYnBjYXAsIGNhbGwKLS5CUiBwY2FwX2xpYl92ZXJzaW9uICgpLgotLlRQCi0uQiBSb3V0aW5lcwotLlJTCi0uVFAKLS5CUiBwY2FwX2xpYl92ZXJzaW9uICgzUENBUCkKLWdldCBsaWJyYXJ5IHZlcnNpb24gc3RyaW5nCi0uUkUKLS5TSCBCQUNLV0FSRFMgQ09NUEFUSUJJTElUWQotLlBQCi1JbiB2ZXJzaW9ucyBvZiBsaWJwY2FwIHByaW9yIHRvIDEuMCwgdGhlCi0uQiBwY2FwLmgKLWhlYWRlciBmaWxlIHdhcyBub3QgaW4gYQotLkIgcGNhcAotZGlyZWN0b3J5IG9uIG1vc3QgcGxhdGZvcm1zOyBpZiB5b3UgYXJlIHdyaXRpbmcgYW4gYXBwbGljYXRpb24gdGhhdCBtdXN0Ci13b3JrIG9uIHZlcnNpb25zIG9mIGxpYnBjYXAgcHJpb3IgdG8gMS4wLCBpbmNsdWRlCi0uQlIgPHBjYXAuaD4gLAotd2hpY2ggd2lsbCBpbmNsdWRlCi0uQiA8cGNhcC9wY2FwLmg+Ci1mb3IgeW91LCByYXRoZXIgdGhhbiBpbmNsdWRpbmcKLS5CUiA8cGNhcC9wY2FwLmg+IC4KLS5QUAotLkJSIHBjYXBfY3JlYXRlICgpCi1hbmQKLS5CUiBwY2FwX2FjdGl2YXRlICgpCi13ZXJlIG5vdCBhdmFpbGFibGUgaW4gdmVyc2lvbnMgb2YgbGlicGNhcCBwcmlvciB0byAxLjA7IGlmIHlvdSBhcmUKLXdyaXRpbmcgYW4gYXBwbGljYXRpb24gdGhhdCBtdXN0IHdvcmsgb24gdmVyc2lvbnMgb2YgbGlicGNhcCBwcmlvciB0bwotMS4wLCBlaXRoZXIgdXNlCi0uQlIgcGNhcF9vcGVuX2xpdmUgKCkKLXRvIGdldCBhIGhhbmRsZSBmb3IgYSBsaXZlIGNhcHR1cmUgb3IsIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIHRoZQotYWRkaXRpb25hbCBjYXBhYmlsaXRpZXMgb2ZmZXJlZCBieSB1c2luZwotLkJSIHBjYXBfY3JlYXRlICgpCi1hbmQKLS5CUiBwY2FwX2FjdGl2YXRlICgpLAotdXNlIGFuCi0uQlIgYXV0b2NvbmYgKDEpCi1zY3JpcHQgb3Igc29tZSBvdGhlciBjb25maWd1cmF0aW9uIHNjcmlwdCB0byBjaGVjayB3aGV0aGVyIHRoZSBsaWJwY2FwCi0xLjAgQVBJcyBhcmUgYXZhaWxhYmxlIGFuZCB1c2UgdGhlbSBvbmx5IGlmIHRoZXkgYXJlLgotLlNIIFNFRSBBTFNPCi1hdXRvY29uZigxKSwgdGNwZHVtcCgxKSwgdGNwc2xpY2UoMSksIHBjYXAtZmlsdGVyKDcpLCBwZmNvbmZpZyg4KSwKLXVzZXJtb2QoOCkKLS5TSCBBVVRIT1JTCi1UaGUgb3JpZ2luYWwgYXV0aG9ycyBvZiBsaWJwY2FwIGFyZToKLS5MUAotVmFuIEphY29ic29uLAotQ3JhaWcgTGVyZXMgYW5kCi1TdGV2ZW4gTWNDYW5uZSwgYWxsIG9mIHRoZQotTGF3cmVuY2UgQmVya2VsZXkgTmF0aW9uYWwgTGFib3JhdG9yeSwgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLCBCZXJrZWxleSwgQ0EuCi0uTFAKLVRoZSBjdXJyZW50IHZlcnNpb24gaXMgYXZhaWxhYmxlIGZyb20gIlRoZSBUY3BkdW1wIEdyb3VwIidzIFdlYiBzaXRlIGF0Ci0uTFAKLS5SUwotLkkgaHR0cHM6Ly93d3cudGNwZHVtcC5vcmcvCi0uUkUKLS5TSCBCVUdTCi1UbyByZXBvcnQgYSBzZWN1cml0eSBpc3N1ZSBwbGVhc2Ugc2VuZCBhbiBlLW1haWwgdG8gc2VjdXJpdHlAdGNwZHVtcC5vcmcuCi0uTFAKLVRvIHJlcG9ydCBidWdzIGFuZCBvdGhlciBwcm9ibGVtcywgY29udHJpYnV0ZSBwYXRjaGVzLCByZXF1ZXN0IGEKLWZlYXR1cmUsIHByb3ZpZGUgZ2VuZXJpYyBmZWVkYmFjayBldGMgcGxlYXNlIHNlZSB0aGUgZmlsZQotLkkgQ09OVFJJQlVUSU5HCi1pbiB0aGUgbGlicGNhcCBzb3VyY2UgdHJlZSByb290LgpkaWZmIC0tZ2l0IGEvcGNhcC4zcGNhcC5pbiBiL3BjYXAuM3BjYXAuaW4KaW5kZXggNGEyMjJjNy4uNDkyYzIyNyAxMDA2NDQKLS0tIGEvcGNhcC4zcGNhcC5pbgorKysgYi9wY2FwLjNwY2FwLmluCkBAIC0xNyw3ICsxNyw3IEBACiAuXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKIC5cIiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogLlwiCi0uVEggUENBUCAzUENBUCAiMjAgQXByaWwgMjAxOCIKKy5USCBQQ0FQIDNQQ0FQICI5IFNlcHRlbWJlciAyMDIwIgogLlNIIE5BTUUKIHBjYXAgXC0gUGFja2V0IENhcHR1cmUgbGlicmFyeQogLlNIIFNZTk9QU0lTCkBAIC0zNSwxMiArMzUsNjkgQEAKIHRocm91Z2ggdGhpcyBtZWNoYW5pc20uCiBJdCBhbHNvIHN1cHBvcnRzIHNhdmluZyBjYXB0dXJlZCBwYWNrZXRzIHRvIGEgYGBzYXZlZmlsZScnLCBhbmQgcmVhZGluZwogcGFja2V0cyBmcm9tIGEgYGBzYXZlZmlsZScnLgorLlNTIEluaXRpYWxpemluZworLkJSIHBjYXBfaW5pdCAoKQoraW5pdGlhbGl6ZXMgdGhlIGxpYnJhcnkuICBJdCB0YWtlcyBhbiBhcmd1bWVudCBnaXZpbmcgb3B0aW9uczsKK2N1cnJlbnRseSwgdGhlIG9wdGlvbnMgYXJlOgorLlRQCisuQiBQQ0FQX0NIQVJfRU5DX0xPQ0FMCitUcmVhdCBhbGwgc3RyaW5ncyBzdXBwbGllZCBhcyBhcmd1bWVudHMsIGFuZCByZXR1cm4gYWxsIHN0cmluZ3MgdG8gdGhlCitjYWxsZXIsIGFzIGJlaW5nIGluIHRoZSBsb2NhbCBjaGFyYWN0ZXIgZW5jb2RpbmcuCisuVFAKKy5CIFBDQVBfQ0hBUl9FTkNfVVRGXzgKK1RyZWF0IGFsbCBzdHJpbmdzIHN1cHBsaWVkIGFzIGFyZ3VtZW50cywgYW5kIHJldHVybiBhbGwgc3RyaW5ncyB0byB0aGUKK2NhbGxlciwgYXMgYmVpbmcgaW4gVVRGLTguCisuUFAKK09uIFVOSVgtbGlrZSBzeXN0ZW1zLCB0aGUgbG9jYWwgY2hhcmFjdGVyIGVuY29kaW5nIGlzIGFzc3VtZWQgdG8gYmUKK1VURi04LCBzbyBubyBjaGFyYWN0ZXIgZW5jb2RpbmcgdHJhbnNmb3JtYXRpb25zIGFyZSBkb25lLgorLlBQCitPbiBXaW5kb3dzLCB0aGUgbG9jYWwgY2hhcmFjdGVyIGVuY29kaW5nIGlzIHRoZSBsb2NhbCBBTlNJIGNvZGUgcGFnZS4KKy5QUAorSWYKKy5CUiBwY2FwX2luaXQgKCkKK2lzIGNhbGxlZCwgdGhlIGRlcHJlY2F0ZWQKKy5CUiBwY2FwX2xvb2t1cGRldiAoKQorcm91dGluZSBhbHdheXMgZmFpbHMsIHNvIGl0IHNob3VsZCBub3QgYmUgdXNlZCwgYW5kLCBvbiBXaW5kb3dzLAorLkJSIHBjYXBfY3JlYXRlICgpCitkb2VzIG5vdCBhdHRlbXB0IHRvIGhhbmRsZSBVVEYtMTZMRSBzdHJpbmdzLgorLlBQCitJZgorLkJSIHBjYXBfaW5pdCAoKQoraXMgbm90IGNhbGxlZCwgc3RyaW5ncyBhcmUgdHJlYXRlZCBhcyBiZWluZyBpbiB0aGUgbG9jYWwgQU5TSSBjb2RlIHBhZ2UKK29uIFdpbmRvd3MsCisuQlIgcGNhcF9sb29rdXBkZXYgKCkKK3dpbGwgc3VjY2VlZCBpZiB0aGVyZSBpcyBhIGRldmljZSBvbiB3aGljaCB0byBjYXB0dXJlLCBhbmQKKy5CUiBwY2FwX2NyZWF0ZSAoKQorbWFrZXMgYW4gYXR0ZW1wdCB0byBjaGVjayB3aGV0aGVyIHRoZSBzdHJpbmcgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IGlzIGEKK1VURi0xNkxFIHN0cmluZyAtIG5vdGUgdGhhdCB0aGlzIGF0dGVtcHQgaXMgdW5zYWZlLCBhcyBpdCBtYXkgcnVuIHBhc3QKK3RoZSBlbmQgb2YgdGhlIHN0cmluZyAtIHRvIGhhbmRsZQorLkJSIHBjYXBfbG9va3VwZGV2ICgpCityZXR1cm5pbmcgYSBVVEYtMTZMRSBzdHJpbmcuIFByb2dyYW1zIHRoYXQgZG9uJ3QgY2FsbAorLkJSIHBjYXBfaW5pdCAoKQorc2hvdWxkLCBvbiBXaW5kb3dzLCBjYWxsCisuQlIgcGNhcF93c29ja2luaXQgKCkKK3RvIGluaXRpYWxpemUgV2luc29jazsgdGhpcyBpcyBub3QgbmVjZXNzYXJ5IGlmCisuQlIgcGNhcF9pbml0ICgpCitpcyBjYWxsZWQsIGFzCisuQlIgcGNhcF9pbml0ICgpCit3aWxsIGluaXRpYWxpemUgV2luc29jayBpdHNlbGYgb24gV2luZG93cy4KKy5UUAorLkIgUm91dGluZXMKKy5SUworLlRQCisuQlIgcGNhcF9pbml0ICgzUENBUCkKK2luaXRpYWxpemUgdGhlIGxpYnJhcnkKKy5SRQogLlNTIE9wZW5pbmcgYSBjYXB0dXJlIGhhbmRsZSBmb3IgcmVhZGluZwogVG8gb3BlbiBhIGhhbmRsZSBmb3IgYSBsaXZlIGNhcHR1cmUsIGdpdmVuIHRoZSBuYW1lIG9mIHRoZSBuZXR3b3JrIG9yCiBvdGhlciBpbnRlcmZhY2Ugb24gd2hpY2ggdGhlIGNhcHR1cmUgc2hvdWxkIGJlIGRvbmUsIGNhbGwKIC5CUiBwY2FwX2NyZWF0ZSAoKSwKIHNldCB0aGUgYXBwcm9wcmlhdGUgb3B0aW9ucyBvbiB0aGUgaGFuZGxlLCBhbmQgdGhlbiBhY3RpdmF0ZSBpdCB3aXRoCiAuQlIgcGNhcF9hY3RpdmF0ZSAoKS4KK0lmCisuQlIgcGNhcF9hY3RpdmF0ZSAoKQorZmFpbHMsIHRoZSBoYW5kbGUgc2hvdWxkIGJlIGNsb3NlZCB3aXRoCisuQlIgcGNhcF9jbG9zZSAoKS4KIC5QUAogVG8gb2J0YWluIGEgbGlzdCBvZiBkZXZpY2VzIHRoYXQgY2FuIGJlIG9wZW5lZCBmb3IgYSBsaXZlIGNhcHR1cmUsIGNhbGwKIC5CUiBwY2FwX2ZpbmRhbGxkZXZzICgpOwpAQCAtMTIxLDcgKzE3OCw5IEBACiBhZGFwdGVyIGNvdWxkIHdlbGwgYmUgaW4gcHJvbWlzY3VvdXMgbW9kZSBmb3Igc29tZSBvdGhlciByZWFzb24uCiAuSVAKIEZvciBub3csIHRoaXMgZG9lc24ndCB3b3JrIG9uIHRoZSAiYW55IiBkZXZpY2U7IGlmIGFuIGFyZ3VtZW50IG9mICJhbnkiCi1vciBOVUxMIGlzIHN1cHBsaWVkLCB0aGUgc2V0dGluZyBvZiBwcm9taXNjdW91cyBtb2RlIGlzIGlnbm9yZWQuCitvcgorLkIgTlVMTAoraXMgc3VwcGxpZWQsIHRoZSBzZXR0aW5nIG9mIHByb21pc2N1b3VzIG1vZGUgaXMgaWdub3JlZC4KIC5JUAogUHJvbWlzY3VvdXMgbW9kZSBpcyBzZXQgd2l0aAogLkJSIHBjYXBfc2V0X3Byb21pc2MgKCkuCkBAIC0xOTEsNiArMjUwLDEwIEBACiAuSVAKIFRoZSBwYWNrZXQgYnVmZmVyIHRpbWVvdXQgaXMgc2V0IHdpdGgKIC5CUiBwY2FwX3NldF90aW1lb3V0ICgpLgorLklQICJpbW1lZGlhdGUgbW9kZSIKK0luIGltbWVkaWF0ZSBtb2RlLCBwYWNrZXRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGFzIHNvb24gYXMgdGhleSBhcnJpdmUsCit3aXRoIG5vIGJ1ZmZlcmluZy4gIEltbWVkaWF0ZSBtb2RlIGlzIHNldCB3aXRoCisuQlIgcGNhcF9zZXRfaW1tZWRpYXRlX21vZGUgKCkuCiAuSVAgImJ1ZmZlciBzaXplIgogUGFja2V0cyB0aGF0IGFycml2ZSBmb3IgYSBjYXB0dXJlIGFyZSBzdG9yZWQgaW4gYSBidWZmZXIsIHNvIHRoYXQgdGhleQogZG8gbm90IGhhdmUgdG8gYmUgcmVhZCBieSB0aGUgYXBwbGljYXRpb24gYXMgc29vbiBhcyB0aGV5IGFycml2ZS4gIE9uCkBAIC0yNDUsNyArMzA4LDcgQEAKIHRoYXQgcHJpdmlsZWdlIHRvIHRoZSB1c2VyJ3MKIC5CIGRlZmF1bHRwcml2CiBrZXkgd2l0aCB0aGUKLS5CIHVzZXJtb2QgKEBNQU5fQURNSU5fQ09NTUFORFNAKQorLkJSIHVzZXJtb2QgKEBNQU5fQURNSU5fQ09NTUFORFNAKQogY29tbWFuZC4KIC5UUAogLkIgVW5kZXIgSFAtVVggd2l0aCBETFBJOgpAQCAtMjU4LDE0ICszMjEsMTEgQEAKIC5UUAogLkIgVW5kZXIgTGludXg6CiBZb3UgbXVzdCBiZSByb290IG9yIHRoZSBhcHBsaWNhdGlvbiBjYXB0dXJpbmcgcGFja2V0cyBtdXN0IGJlIGluc3RhbGxlZAotc2V0dWlkIHRvIHJvb3QgKHVubGVzcyB5b3VyIGRpc3RyaWJ1dGlvbiBoYXMgYSBrZXJuZWwKK3NldHVpZCB0byByb290LCB1bmxlc3MgeW91ciBkaXN0cmlidXRpb24gaGFzIGEga2VybmVsCiB0aGF0IHN1cHBvcnRzIGNhcGFiaWxpdHkgYml0cyBzdWNoIGFzIENBUF9ORVRfUkFXIGFuZCBjb2RlIHRvIGFsbG93CiB0aG9zZSBjYXBhYmlsaXR5IGJpdHMgdG8gYmUgZ2l2ZW4gdG8gcGFydGljdWxhciBhY2NvdW50cyBhbmQgdG8gY2F1c2UKIHRob3NlIGJpdHMgdG8gYmUgc2V0IG9uIGEgdXNlcidzIGluaXRpYWwgcHJvY2Vzc2VzIHdoZW4gdGhleSBsb2cgaW4sIGluCi13aGljaCBjYXNlIHlvdSAgbXVzdCBoYXZlIENBUF9ORVRfUkFXIGluIG9yZGVyIHRvIGNhcHR1cmUgYW5kCi1DQVBfTkVUX0FETUlOIHRvIGVudW1lcmF0ZSBuZXR3b3JrIGRldmljZXMgd2l0aCwgZm9yIGV4YW1wbGUsIHRoZQotLkIgXC1ECi1mbGFnKS4KK3doaWNoIGNhc2UgeW91IG11c3QgaGF2ZSBDQVBfTkVUX1JBVyBpbiBvcmRlciB0byBjYXB0dXJlLgogLlRQCiAuQiBVbmRlciBVTFRSSVggYW5kIERpZ2l0YWwgVU5JWC9UcnU2NCBVTklYOgogQW55IHVzZXIgbWF5IGNhcHR1cmUgbmV0d29yayB0cmFmZmljLgpAQCAtMzE2LDYgKzM3Niw4IEBACiBmb3IgRXRoZXJuZXQuICBGb3IgZXhhbXBsZSwgdGhlICJhbnkiIGRldmljZSBvbiBMaW51eCB3aWxsIGhhdmUgYQogbGluay1sYXllciBoZWFkZXIgdHlwZSBvZgogLkIgRExUX0xJTlVYX1NMTAorb3IKKy5CIERMVF9MSU5VWF9TTEwyCiBldmVuIGlmIGFsbCBkZXZpY2VzIG9uIHRoZSBzeXN0ZW0gYXQgdGhlIHRpbWUgdGhlICJhbnkiIGRldmljZSBpcyBvcGVuZWQKIGhhdmUgc29tZSBvdGhlciBkYXRhIGxpbmsgdHlwZSwgc3VjaCBhcwogLkIgRExUX0VOMTBNQgpAQCAtNDE2LDYgKzQ3OCwxMSBAQAogLkIgcGNhcF90CiBmb3IgbGl2ZSBjYXB0dXJlCiAuVFAKKy5CUiBwY2FwX3NldF9pbW1lZGlhdGVfbW9kZSAoM1BDQVApCitzZXQgaW1tZWRpYXRlIG1vZGUgZm9yIGEgbm90LXlldC1hY3RpdmF0ZWQKKy5CIHBjYXBfdAorZm9yIGxpdmUgY2FwdHVyZQorLlRQCiAuQlIgcGNhcF9zZXRfYnVmZmVyX3NpemUgKDNQQ0FQKQogc2V0IGJ1ZmZlciBzaXplIGZvciBhIG5vdC15ZXQtYWN0aXZhdGVkCiAuQiBwY2FwX3QKQEAgLTUwNiw3ICs1NzMsMTEgQEAKIGdldCBuYW1lIGZvciBhIGxpbmstbGF5ZXIgaGVhZGVyIHR5cGUKIC5UUAogLkJSIHBjYXBfZGF0YWxpbmtfdmFsX3RvX2Rlc2NyaXB0aW9uICgzUENBUCkKKy5QRCAwCisuVFAKKy5CUiBwY2FwX2RhdGFsaW5rX3ZhbF90b19kZXNjcmlwdGlvbl9vcl9kbHQgKDNQQ0FQKQogZ2V0IGRlc2NyaXB0aW9uIGZvciBhIGxpbmstbGF5ZXIgaGVhZGVyIHR5cGUKKy5QRAogLlRQCiAuQlIgcGNhcF9kYXRhbGlua19uYW1lX3RvX3ZhbCAoM1BDQVApCiBnZXQgbGluay1sYXllciBoZWFkZXIgdHlwZSBjb3JyZXNwb25kaW5nIHRvIGEgbmFtZQpAQCAtNTc2LDcgKzY0Nyw5IEBACiAuSSBjb25zdCB1X2NoYXIKIHRvIHRoZSBmaXJzdAogLkIgY2FwbGVuCi1ieXRlcyBvZiB0aGUgcGFja2V0IG9uIHN1Y2Nlc3MsIGFuZCBOVUxMIG9uIGVycm9yLgorYnl0ZXMgb2YgdGhlIHBhY2tldCBvbiBzdWNjZXNzLCBhbmQKKy5CIE5VTEwKK29uIGVycm9yLgogLlBQCiAuQlIgcGNhcF9uZXh0X2V4ICgpCiBpcyBwYXNzZWQgdHdvIHBvaW50ZXIgYXJndW1lbnRzLCBvbmUgb2Ygd2hpY2ggcG9pbnRzIHRvIGEKQEAgLTYzMiw5ICs3MDUsMzAgQEAKIGRlc2NyaXB0b3JzIHRvIGJlIHJlYWR5IHRvIHJlYWQuICBUbyBvYnRhaW4sIGZvciBhIGhhbmRsZSwgYSBkZXNjcmlwdG9yCiB0aGF0IGNhbiBiZSB1c2VkIGluIHRob3NlIHJvdXRpbmVzLCBjYWxsCiAuQlIgcGNhcF9nZXRfc2VsZWN0YWJsZV9mZCAoKS4KK0lmIHRoZSByb3V0aW5lIGluZGljYXRlcyB0aGF0IGRhdGEgaXMKK2F2YWlsYWJsZSB0byByZWFkIG9uIHRoZSBkZXNjcmlwdG9yLCBhbiBhdHRlbXB0IHNob3VsZCBiZSBtYWRlIHRvIHJlYWQKK2Zyb20gdGhlIGRldmljZS4KKy5QUAogTm90IGFsbCBoYW5kbGVzIGhhdmUgc3VjaCBhIGRlc2NyaXB0b3IgYXZhaWxhYmxlOwogLkJSIHBjYXBfZ2V0X3NlbGVjdGFibGVfZmQgKCkKLXdpbGwgcmV0dXJuIFwtMSBpZiBubyBzdWNoIGRlc2NyaXB0b3IgZXhpc3RzLiAgSW4gYWRkaXRpb24sIGZvciB2YXJpb3VzCit3aWxsIHJldHVybgorLkIgXC0xCitpZiBubyBzdWNoIGRlc2NyaXB0b3IgaXMgYXZhaWxhYmxlLiAgSWYgbm8gc3VjaAorZGVzY3JpcHRvciBpcyBhdmFpbGFibGUsIHRoaXMgbWF5IGJlIGJlY2F1c2UgdGhlIGRldmljZSBtdXN0IGJlIHBvbGxlZAorcGVyaW9kaWNhbGx5IGZvciBwYWNrZXRzOyBpbiB0aGF0IGNhc2UsCisuQlIgcGNhcF9nZXRfcmVxdWlyZWRfc2VsZWN0X3RpbWVvdXQgKCkKK3dpbGwgcmV0dXJuIGEgcG9pbnRlciB0byBhCisuQiBzdHJ1Y3QgdGltZXZhbAord2hvc2UgdmFsdWUgY2FuIGJlIHVzZWQgYXMgYSB0aW1lb3V0IGluIHRob3NlIHJvdXRpbmVzLiAgV2hlbiB0aGUKK3JvdXRpbmUgcmV0dXJucywgYW4gYXR0bWVwdCBzaG91bGQgYmUgbWFkZSB0byByZWFkIHBhY2tldHMgZnJvbSB0aGUKK2RldmljZS4gIElmCisuQlIgcGNhcF9nZXRfcmVxdWlyZWRfc2VsZWN0X3RpbWVvdXQgKCkKK3JldHVybnMKKy5CUiBOVUxMICwKK25vIHN1Y2ggdGltZW91dCBpcyBhdmFpbGFibGUsIGFuZCB0aG9zZSByb3V0aW5lcyBjYW5ub3QgYmUKK3VzZWQgd2l0aCB0aGUgZGV2aWNlLgorLlBQCitJbiBhZGRpdGlvbiwgZm9yIHZhcmlvdXMKIHJlYXNvbnMsIG9uZSBvciBtb3JlIG9mIHRob3NlIHJvdXRpbmVzIHdpbGwgbm90IHdvcmsgcHJvcGVybHkgd2l0aCB0aGUKIGRlc2NyaXB0b3I7IHRoZSBkb2N1bWVudGF0aW9uIGZvcgogLkJSIHBjYXBfZ2V0X3NlbGVjdGFibGVfZmQgKCkKQEAgLTY5Myw2ICs3ODcsMTQgQEAKIC5CUiBzZWxlY3QgKDIpCiBhbmQKIC5CUiBwb2xsICgyKQorLlRQCisuQlIgcGNhcF9nZXRfcmVxdWlyZWRfc2VsZWN0X3RpbWVvdXQgKDNQQ0FQKQorYXR0ZW1wdCB0byBnZXQgYSB0aW1lb3V0IHJlcXVpcmVkIGZvciB1c2luZyBhCisuQiBwY2FwX3QKK2luIGNhbGxzIHN1Y2ggYXMKKy5CUiBzZWxlY3QgKDIpCithbmQKKy5CUiBwb2xsICgyKQogLlJFCiAuU1MgRmlsdGVycwogSW4gb3JkZXIgdG8gY2F1c2Ugb25seSBjZXJ0YWluIHBhY2tldHMgdG8gYmUgcmV0dXJuZWQgd2hlbiByZWFkaW5nCkBAIC04NTYsOCArOTU4LDkgQEAKIC5CUiBwY2FwX2luamVjdCAoKQogb3IKIC5CUiBwY2FwX3NlbmRwYWNrZXQgKCkuCi0oVGhlIHR3byByb3V0aW5lcyBleGlzdCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGJvdGggT3BlbkJTRCBhbmQgV2luUGNhcDsKLXRoZXkgcGVyZm9ybSB0aGUgc2FtZSBmdW5jdGlvbiwgYnV0IGhhdmUgZGlmZmVyZW50IHJldHVybiB2YWx1ZXMuKQorKFRoZSB0d28gcm91dGluZXMgZXhpc3QgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBib3RoIE9wZW5CU0QgYW5kCitXaW5QY2FwL05wY2FwOyB0aGV5IHBlcmZvcm0gdGhlIHNhbWUgZnVuY3Rpb24sIGJ1dCBoYXZlIGRpZmZlcmVudCByZXR1cm4KK3ZhbHVlcy4pCiAuVFAKIC5CIFJvdXRpbmVzCiAuUlMKQEAgLTg5MCw3ICs5OTMsNyBAQAogLkJSIHBjYXBfbGliX3ZlcnNpb24gKDNQQ0FQKQogZ2V0IGxpYnJhcnkgdmVyc2lvbiBzdHJpbmcKIC5SRQotLlNIIEJBQ0tXQVJEUyBDT01QQVRJQklMSVRZCisuU0ggQkFDS1dBUkQgQ09NUEFUSUJJTElUWQogLlBQCiBJbiB2ZXJzaW9ucyBvZiBsaWJwY2FwIHByaW9yIHRvIDEuMCwgdGhlCiAuQiBwY2FwLmgKQEAgLTkyMSw4ICsxMDI0LDEyIEBACiBzY3JpcHQgb3Igc29tZSBvdGhlciBjb25maWd1cmF0aW9uIHNjcmlwdCB0byBjaGVjayB3aGV0aGVyIHRoZSBsaWJwY2FwCiAxLjAgQVBJcyBhcmUgYXZhaWxhYmxlIGFuZCB1c2UgdGhlbSBvbmx5IGlmIHRoZXkgYXJlLgogLlNIIFNFRSBBTFNPCi1hdXRvY29uZigxKSwgdGNwZHVtcCgxKSwgdGNwc2xpY2UoMSksIHBjYXAtZmlsdGVyKEBNQU5fTUlTQ19JTkZPQCksIHBmY29uZmlnKDgpLAotdXNlcm1vZChATUFOX0FETUlOX0NPTU1BTkRTQCkKKy5CUiBhdXRvY29uZiAoMSksCisuQlIgdGNwZHVtcCAoMSksCisuQlIgdGNwc2xpY2UgKDEpLAorLkJSIHBjYXAtZmlsdGVyIChATUFOX01JU0NfSU5GT0ApLAorLkJSIHBmY29uZmlnICg4KSwKKy5CUiB1c2VybW9kIChATUFOX0FETUlOX0NPTU1BTkRTQCkKIC5TSCBBVVRIT1JTCiBUaGUgb3JpZ2luYWwgYXV0aG9ycyBvZiBsaWJwY2FwIGFyZToKIC5MUApAQCAtOTQxLDUgKzEwNDgsNSBAQAogLkxQCiBUbyByZXBvcnQgYnVncyBhbmQgb3RoZXIgcHJvYmxlbXMsIGNvbnRyaWJ1dGUgcGF0Y2hlcywgcmVxdWVzdCBhCiBmZWF0dXJlLCBwcm92aWRlIGdlbmVyaWMgZmVlZGJhY2sgZXRjIHBsZWFzZSBzZWUgdGhlIGZpbGUKLS5JIENPTlRSSUJVVElORworLkkgQ09OVFJJQlVUSU5HLm1kCiBpbiB0aGUgbGlicGNhcCBzb3VyY2UgdHJlZSByb290LgpkaWZmIC0tZ2l0IGEvcGNhcC5jIGIvcGNhcC5jCmluZGV4IDk0MmM0NzIuLmVkODU3MGEgMTAwNjQ0Ci0tLSBhL3BjYXAuYworKysgYi9wY2FwLmMKQEAgLTUzLDcgKzUzLDYgQEAKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYgLyogX1dJTjMyICovCiAKLSNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC02MiwxMSArNjEsOSBAQAogI2VuZGlmCiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxlcnJuby5oPgotI2lmZGVmIEhBVkVfTElNSVRTX0gKICNpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jZGVmaW5lIElOVF9NQVgJCTIxNDc0ODM2NDcKLSNlbmRpZgorCisjaW5jbHVkZSAiZGlhZy1jb250cm9sLmgiCiAKICNpZmRlZiBIQVZFX09TX1BST1RPX0gKICNpbmNsdWRlICJvcy1wcm90by5oIgpAQCAtOTYsNyArOTMsNyBAQAogI2luY2x1ZGUgInBjYXAtdGMuaCIKICNlbmRpZiAvKiBIQVZFX1RDX0FQSSAqLwogCi0jaWZkZWYgUENBUF9TVVBQT1JUX1VTQgorI2lmZGVmIFBDQVBfU1VQUE9SVF9MSU5VWF9VU0JNT04KICNpbmNsdWRlICJwY2FwLXVzYi1saW51eC5oIgogI2VuZGlmCiAKQEAgLTEyNCw1NiArMTIxLDIwMSBAQAogI2luY2x1ZGUgInBjYXAtcmRtYXNuaWZmLmgiCiAjZW5kaWYKIAorI2lmZGVmIFBDQVBfU1VQUE9SVF9EUERLCisjaW5jbHVkZSAicGNhcC1kcGRrLmgiCisjZW5kaWYKKworI2lmZGVmIEhBVkVfQUlSUENBUF9BUEkKKyNpbmNsdWRlICJwY2FwLWFpcnBjYXAuaCIKKyNlbmRpZgorCiAjaWZkZWYgX1dJTjMyCiAvKgogICogRGxsTWFpbigpLCByZXF1aXJlZCB3aGVuIGJ1aWx0IGFzIGEgV2luZG93cyBETEwuCisgKgorICogVG8gcXVvdGUgdGhlIFdTQVN0YXJ0dXAoKSBkb2N1bWVudGF0aW9uOgorICoKKyAqICAgVGhlIFdTQVN0YXJ0dXAgZnVuY3Rpb24gdHlwaWNhbGx5IGxlYWRzIHRvIHByb3RvY29sLXNwZWNpZmljIGhlbHBlcgorICogICBETExzIGJlaW5nIGxvYWRlZC4gQXMgYSByZXN1bHQsIHRoZSBXU0FTdGFydHVwIGZ1bmN0aW9uIHNob3VsZCBub3QKKyAqICAgYmUgY2FsbGVkIGZyb20gdGhlIERsbE1haW4gZnVuY3Rpb24gaW4gYSBhcHBsaWNhdGlvbiBETEwuIFRoaXMgY2FuCisgKiAgIHBvdGVudGlhbGx5IGNhdXNlIGRlYWRsb2Nrcy4KKyAqCisgKiBhbmQgdGhlIFdTQUNsZWFudXAoKSBkb2N1bWVudGF0aW9uOgorICoKKyAqICAgVGhlIFdTQUNsZWFudXAgZnVuY3Rpb24gdHlwaWNhbGx5IGxlYWRzIHRvIHByb3RvY29sLXNwZWNpZmljIGhlbHBlcgorICogICBETExzIGJlaW5nIHVubG9hZGVkLiBBcyBhIHJlc3VsdCwgdGhlIFdTQUNsZWFudXAgZnVuY3Rpb24gc2hvdWxkIG5vdAorICogICBiZSBjYWxsZWQgZnJvbSB0aGUgRGxsTWFpbiBmdW5jdGlvbiBpbiBhIGFwcGxpY2F0aW9uIERMTC4gVGhpcyBjYW4KKyAqICAgcG90ZW50aWFsbHkgY2F1c2UgZGVhZGxvY2tzLgorICoKKyAqIFNvIHdlIGRvbid0IGluaXRpYWxpemUgV2luc29jayBoZXJlLiAgcGNhcF9pbml0KCkgc2hvdWxkIGJlIGNhbGxlZAorICogdG8gaW5pdGlhbGl6ZSBwY2FwIG9uIGJvdGggVU4qWCBhbmQgV2luZG93czsgaXQgd2lsbCBpbml0aWFsaXplCisgKiBXaW5zb2NrIG9uIFdpbmRvd3MuICAoSXQgd2lsbCBhbHNvIGJlIGluaXRpYWxpemVkIGFzIG5lZWRlZCBpZgorICogcGNhcF9pbml0KCkgaGFzbid0IGJlZW4gY2FsbGVkLikKICAqLwogQk9PTCBXSU5BUEkgRGxsTWFpbigKLSAgSEFORExFIGhpbnN0RExMLAotICBEV09SRCBkd1JlYXNvbiwKLSAgTFBWT0lEIGxwdlJlc2VydmVkCisgIEhBTkRMRSBoaW5zdERMTCBfVV8sCisgIERXT1JEIGR3UmVhc29uIF9VXywKKyAgTFBWT0lEIGxwdlJlc2VydmVkIF9VXwogKQogewogCXJldHVybiAoVFJVRSk7CiB9CiAKIC8qCi0gKiBTdGFydCBXaW5Tb2NrLgotICogRXhwb3J0ZWQgaW4gY2FzZSBzb21lIGFwcGxpY2F0aW9ucyB1c2luZyBXaW5QY2FwIGNhbGxlZCBpdCwKLSAqIGV2ZW4gdGhvdWdoIGl0IHdhc24ndCBleHBvcnRlZC4KKyAqIFN0YXJ0IFdpbnNvY2suCisgKiBJbnRlcm5hbCByb3V0aW5lLgogICovCi1pbnQKLXdzb2NraW5pdCh2b2lkKQorc3RhdGljIGludAoraW50ZXJuYWxfd3NvY2tpbml0KGNoYXIgKmVycmJ1ZikKIHsKIAlXT1JEIHdWZXJzaW9uUmVxdWVzdGVkOwogCVdTQURBVEEgd3NhRGF0YTsKIAlzdGF0aWMgaW50IGVyciA9IC0xOwogCXN0YXRpYyBpbnQgZG9uZSA9IDA7CisJaW50IHN0YXR1czsKIAogCWlmIChkb25lKQogCQlyZXR1cm4gKGVycik7CiAKLQl3VmVyc2lvblJlcXVlc3RlZCA9IE1BS0VXT1JEKCAxLCAxKTsKLQllcnIgPSBXU0FTdGFydHVwKCB3VmVyc2lvblJlcXVlc3RlZCwgJndzYURhdGEgKTsKLQlhdGV4aXQgKCh2b2lkKCopKHZvaWQpKVdTQUNsZWFudXApOworCS8qCisJICogVmVyc2lvbnMgb2YgV2luZG93cyB0aGF0IGRvbid0IHN1cHBvcnQgV2luc29jayAyLjIgYXJlCisJICogdG9vIG9sZCBmb3IgdXMuCisJICovCisJd1ZlcnNpb25SZXF1ZXN0ZWQgPSBNQUtFV09SRCgyLCAyKTsKKwlzdGF0dXMgPSBXU0FTdGFydHVwKHdWZXJzaW9uUmVxdWVzdGVkLCAmd3NhRGF0YSk7CiAJZG9uZSA9IDE7Ci0KLQlpZiAoIGVyciAhPSAwICkKLQkJZXJyID0gLTE7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWlmIChlcnJidWYgIT0gTlVMTCkgeworCQkJcGNhcF9mbXRfZXJybXNnX2Zvcl93aW4zMl9lcnIoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJICAgIHN0YXR1cywgIldTQVN0YXJ0dXAoKSBmYWlsZWQiKTsKKwkJfQorCQlyZXR1cm4gKGVycik7CisJfQorCWF0ZXhpdCAoKHZvaWQoKikodm9pZCkpV1NBQ2xlYW51cCk7CisJZXJyID0gMDsKIAlyZXR1cm4gKGVycik7CiB9CiAKIC8qCisgKiBFeHBvcnRlZCBpbiBjYXNlIHNvbWUgYXBwbGljYXRpb25zIHVzaW5nIFdpblBjYXAvTnBjYXAgY2FsbGVkIGl0LAorICogZXZlbiB0aG91Z2ggaXQgd2Fzbid0IGV4cG9ydGVkLgorICovCitpbnQKK3dzb2NraW5pdCh2b2lkKQoreworCXJldHVybiAoaW50ZXJuYWxfd3NvY2tpbml0KE5VTEwpKTsKK30KKworLyoKICAqIFRoaXMgaXMgdGhlIGV4cG9ydGVkIGZ1bmN0aW9uOyBuZXcgcHJvZ3JhbXMgc2hvdWxkIGNhbGwgdGhpcy4KKyAqICpOZXdlciogcHJvZ3JhbXMgc2hvdWxkIGNhbGwgcGNhcF9pbml0KCkuCiAgKi8KIGludAogcGNhcF93c29ja2luaXQodm9pZCkKIHsKLSAgICAgICByZXR1cm4gKHdzb2NraW5pdCgpKTsKKwlyZXR1cm4gKGludGVybmFsX3dzb2NraW5pdChOVUxMKSk7CiB9CiAjZW5kaWYgLyogX1dJTjMyICovCiAKIC8qCisgKiBEbyB3aGF0ZXZlciBpbml0aWFsaXphdGlvbiBpcyBuZWVkZWQgZm9yIGxpYnBjYXAuCisgKgorICogVGhlIGFyZ3VtZW50IHNwZWNpZmllcyB3aGV0aGVyIHdlIHVzZSB0aGUgbG9jYWwgY29kZSBwYWdlIG9yIFVURi04CisgKiBmb3Igc3RyaW5nczsgb24gVU4qWCwgd2UganVzdCBhc3N1bWUgVVRGLTggaW4gcGxhY2VzIHdoZXJlIHRoZSBlbmNvZGluZworICogd291bGQgbWF0dGVyLCB3aGVyZWFzLCBvbiBXaW5kb3dzLCB3ZSB1c2UgdGhlIGxvY2FsIGNvZGUgcGFnZSBmb3IKKyAqIFBDQVBfQ0hBUl9FTkNfTE9DQUwgYW5kIFVURi04IGZvciBQQ0FQX0NIQVJfRU5DX1VURl84LgorICoKKyAqIE9uIFdpbmRvd3MsIHdlIGFsc28gZGlzYWJsZSB0aGUgaGFjayBpbiBwY2FwX2NyZWF0ZSgpIHRvIGRlYWwgd2l0aAorICogYmVpbmcgaGFuZGVkIFVURi0xNiBzdHJpbmdzLCBiZWNhdXNlIGlmIHRoZSB1c2VyIGNhbGxzIHRoaXMgdGhleSdyZQorICogZXhwbGljaXRseSBkZWNsYXJpbmcgdGhhdCB0aGV5IHdpbGwgZWl0aGVyIGJlIHBhc3NpbmcgbG9jYWwgY29kZQorICogcGFnZSBzdHJpbmdzIG9yIFVURi04IHN0cmluZ3MsIHNvIHdlIGRvbid0IG5lZWQgdG8gYWxsb3cgVVRGLTE2TEUKKyAqIHN0cmluZ3MgdG8gYmUgcGFzc2VkLiAgRm9yIGdvb2QgbWVhc3VyZSwgb24gV2luZG93cyAqYW5kKiBVTipYLAorICogd2UgZGlzYWJsZSBwY2FwX2xvb2t1cGRldigpLCB0byBwcmV2ZW50IGFueWJvZHkgZnJvbSBldmVuCisgKiAqdHJ5aW5nKiB0byBwYXNzIHRoZSByZXN1bHQgb2YgcGNhcF9sb29rdXBkZXYoKSAtIHdoaWNoIG1pZ2h0IGJlCisgKiBVVEYtMTZMRSBvbiBXaW5kb3dzLCBmb3IgdWdseSBjb21wYXRpYmlsaXR5IHJlYXNvbnMgLSB0byBwY2FwX2NyZWF0ZSgpCisgKiBvciBwY2FwX29wZW5fbGl2ZSgpIG9yIHBjYXBfb3BlbigpLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4KKyAqLworaW50IHBjYXBfbmV3X2FwaTsJCS8qIHBjYXBfbG9va3VwZGV2KCkgYWx3YXlzIGZhaWxzICovCitpbnQgcGNhcF91dGZfOF9tb2RlOwkJLyogU3RyaW5ncyBzaG91bGQgYmUgaW4gVVRGLTguICovCisKK2ludAorcGNhcF9pbml0KHVuc2lnbmVkIGludCBvcHRzLCBjaGFyICplcnJidWYpCit7CisJc3RhdGljIGludCBpbml0aWFsaXplZDsKKworCS8qCisJICogRG9uJ3QgYWxsb3cgbXVsdGlwbGUgY2FsbHMgdGhhdCBzZXQgZGlmZmVyZW50IG1vZGVzOyB0aGF0CisJICogbWF5IG1lYW4gYSBsaWJyYXJ5IGlzIGluaXRpYWxpemluZyBwY2FwIGluIG9uZSBtb2RlIGFuZAorCSAqIGEgcHJvZ3JhbSB1c2luZyB0aGF0IGxpYnJhcnksIG9yIGFub3RoZXIgbGlicmFyeSB1c2VkIGJ5CisJICogdGhhdCBwcm9ncmFtLCBpcyBpbml0aWFsaXppbmcgaXQgaW4gYW5vdGhlciBtb2RlLgorCSAqLworCXN3aXRjaCAob3B0cykgeworCisJY2FzZSBQQ0FQX0NIQVJfRU5DX0xPQ0FMOgorCQkvKiBMZWF2ZSAiVVRGLTggbW9kZSIgb2ZmLiAqLworCQlpZiAoaW5pdGlhbGl6ZWQpIHsKKwkJCWlmIChwY2FwX3V0Zl84X21vZGUpIHsKKwkJCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkJICAgICJNdWx0aXBsZSBwY2FwX2luaXQgY2FsbHMgd2l0aCBkaWZmZXJlbnQgY2hhcmFjdGVyIGVuY29kaW5ncyIpOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBQQ0FQX0NIQVJfRU5DX1VURl84OgorCQkvKiBUdXJuIG9uICJVVEYtOCBtb2RlIi4gKi8KKwkJaWYgKGluaXRpYWxpemVkKSB7CisJCQlpZiAoIXBjYXBfdXRmXzhfbW9kZSkgeworCQkJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQkgICAgIk11bHRpcGxlIHBjYXBfaW5pdCBjYWxscyB3aXRoIGRpZmZlcmVudCBjaGFyYWN0ZXIgZW5jb2RpbmdzIik7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCX0KKwkJcGNhcF91dGZfOF9tb2RlID0gMTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJVbmtub3duIG9wdGlvbnMgc3BlY2lmaWVkIik7CisJCXJldHVybiAoLTEpOworCX0KKworCS8qCisJICogVHVybiB0aGUgYXBwcm9wcmlhdGUgbW9kZSBvbiBmb3IgZXJyb3IgbWVzc2FnZXM7IHRob3NlIHJvdXRpbmVzCisJICogYXJlIGFsc28gdXNlZCBpbiBycGNhcGQsIHdoaWNoIGhhcyBubyBhY2Nlc3MgdG8gcGNhcCdzIGludGVybmFsCisJICogVVRGLTggbW9kZSBmbGFnLCBzbyB3ZSBoYXZlIHRvIGNhbGwgYSByb3V0aW5lIHRvIHNldCBpdHMKKwkgKiBVVEYtOCBtb2RlIGZsYWcuCisJICovCisJcGNhcF9mbXRfc2V0X2VuY29kaW5nKG9wdHMpOworCisJaWYgKGluaXRpYWxpemVkKSB7CisJCS8qCisJCSAqIE5vdGhpbmcgbW9yZSB0byBkbzsgZm9yIGV4YW1wbGUsIG9uIFdpbmRvd3MsIHdlJ3ZlCisJCSAqIGFscmVhZHkgaW5pdGlhbGl6ZWQgV2luc29jay4KKwkJICovCisJCXJldHVybiAoMCk7CisJfQorCisjaWZkZWYgX1dJTjMyCisJLyoKKwkgKiBOb3cgc2V0IHVwIFdpbnNvY2suCisJICovCisJaWYgKGludGVybmFsX3dzb2NraW5pdChlcnJidWYpID09IC0xKSB7CisJCS8qIEZhaWxlZC4gKi8KKwkJcmV0dXJuICgtMSk7CisJfQorI2VuZGlmCisKKwkvKgorCSAqIFdlJ3JlIGRvbmUuCisJICovCisJaW5pdGlhbGl6ZWQgPSAxOworCXBjYXBfbmV3X2FwaSA9IDE7CisJcmV0dXJuICgwKTsKK30KKworLyoKICAqIFN0cmluZyBjb250YWluaW5nIHRoZSBsaWJyYXJ5IHZlcnNpb24uCiAgKiBOb3QgZXhwbGljaXRseSBleHBvcnRlZCB2aWEgYSBoZWFkZXIgZmlsZSAtIHRoZSByaWdodCBBUEkgdG8gdXNlCiAgKiBpcyBwY2FwX2xpYl92ZXJzaW9uKCkgLSBidXQgc29tZSBwcm9ncmFtcyBpbmNsdWRlZCBpdCwgc28gd2UKQEAgLTE4Niw3NiArMzI4LDE2NiBAQAogUENBUF9BUEkgY2hhciBwY2FwX3ZlcnNpb25bXTsKIFBDQVBfQVBJX0RFRiBjaGFyIHBjYXBfdmVyc2lvbltdID0gUEFDS0FHRV9WRVJTSU9OOwogCi1zdGF0aWMgaW50Ci1wY2FwX25vdF9pbml0aWFsaXplZChwY2FwX3QgKnBjYXApCitzdGF0aWMgdm9pZAorcGNhcF9zZXRfbm90X2luaXRpYWxpemVkX21lc3NhZ2UocGNhcF90ICpwY2FwKQogewogCWlmIChwY2FwLT5hY3RpdmF0ZWQpIHsKIAkJLyogQSBtb2R1bGUgcHJvYmFibHkgZm9yZ290IHRvIHNldCB0aGUgZnVuY3Rpb24gcG9pbnRlciAqLwotCQkodm9pZClwY2FwX3NucHJpbnRmKHBjYXAtPmVycmJ1Ziwgc2l6ZW9mKHBjYXAtPmVycmJ1ZiksCisJCSh2b2lkKXNucHJpbnRmKHBjYXAtPmVycmJ1Ziwgc2l6ZW9mKHBjYXAtPmVycmJ1ZiksCiAJCSAgICAiVGhpcyBvcGVyYXRpb24gaXNuJ3QgcHJvcGVybHkgaGFuZGxlZCBieSB0aGF0IGRldmljZSIpOwotCQlyZXR1cm4gKFBDQVBfRVJST1IpOworCQlyZXR1cm47CiAJfQogCS8qIGluIGNhc2UgdGhlIGNhbGxlciBkb2Vzbid0IGNoZWNrIGZvciBQQ0FQX0VSUk9SX05PVF9BQ1RJVkFURUQgKi8KLQkodm9pZClwY2FwX3NucHJpbnRmKHBjYXAtPmVycmJ1Ziwgc2l6ZW9mKHBjYXAtPmVycmJ1ZiksCisJKHZvaWQpc25wcmludGYocGNhcC0+ZXJyYnVmLCBzaXplb2YocGNhcC0+ZXJyYnVmKSwKIAkgICAgIlRoaXMgaGFuZGxlIGhhc24ndCBiZWVuIGFjdGl2YXRlZCB5ZXQiKTsKK30KKworc3RhdGljIGludAorcGNhcF9yZWFkX25vdF9pbml0aWFsaXplZChwY2FwX3QgKnBjYXAsIGludCBjbnQgX1VfLCBwY2FwX2hhbmRsZXIgY2FsbGJhY2sgX1VfLAorICAgIHVfY2hhciAqdXNlciBfVV8pCit7CisJcGNhcF9zZXRfbm90X2luaXRpYWxpemVkX21lc3NhZ2UocGNhcCk7CisJLyogdGhpcyBtZWFucyAnbm90IGluaXRpYWxpemVkJyAqLworCXJldHVybiAoUENBUF9FUlJPUl9OT1RfQUNUSVZBVEVEKTsKK30KKworc3RhdGljIGludAorcGNhcF9pbmplY3Rfbm90X2luaXRpYWxpemVkKHBjYXBfdCAqcGNhcCwgY29uc3Qgdm9pZCAqIGJ1ZiBfVV8sIGludCBzaXplIF9VXykKK3sKKwlwY2FwX3NldF9ub3RfaW5pdGlhbGl6ZWRfbWVzc2FnZShwY2FwKTsKKwkvKiB0aGlzIG1lYW5zICdub3QgaW5pdGlhbGl6ZWQnICovCisJcmV0dXJuIChQQ0FQX0VSUk9SX05PVF9BQ1RJVkFURUQpOworfQorCitzdGF0aWMgaW50CitwY2FwX3NldGZpbHRlcl9ub3RfaW5pdGlhbGl6ZWQocGNhcF90ICpwY2FwLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKmZwIF9VXykKK3sKKwlwY2FwX3NldF9ub3RfaW5pdGlhbGl6ZWRfbWVzc2FnZShwY2FwKTsKKwkvKiB0aGlzIG1lYW5zICdub3QgaW5pdGlhbGl6ZWQnICovCisJcmV0dXJuIChQQ0FQX0VSUk9SX05PVF9BQ1RJVkFURUQpOworfQorCitzdGF0aWMgaW50CitwY2FwX3NldGRpcmVjdGlvbl9ub3RfaW5pdGlhbGl6ZWQocGNhcF90ICpwY2FwLCBwY2FwX2RpcmVjdGlvbl90IGQgX1VfKQoreworCXBjYXBfc2V0X25vdF9pbml0aWFsaXplZF9tZXNzYWdlKHBjYXApOworCS8qIHRoaXMgbWVhbnMgJ25vdCBpbml0aWFsaXplZCcgKi8KKwlyZXR1cm4gKFBDQVBfRVJST1JfTk9UX0FDVElWQVRFRCk7Cit9CisKK3N0YXRpYyBpbnQKK3BjYXBfc2V0X2RhdGFsaW5rX25vdF9pbml0aWFsaXplZChwY2FwX3QgKnBjYXAsIGludCBkbHQgX1VfKQoreworCXBjYXBfc2V0X25vdF9pbml0aWFsaXplZF9tZXNzYWdlKHBjYXApOworCS8qIHRoaXMgbWVhbnMgJ25vdCBpbml0aWFsaXplZCcgKi8KKwlyZXR1cm4gKFBDQVBfRVJST1JfTk9UX0FDVElWQVRFRCk7Cit9CisKK3N0YXRpYyBpbnQKK3BjYXBfZ2V0bm9uYmxvY2tfbm90X2luaXRpYWxpemVkKHBjYXBfdCAqcGNhcCkKK3sKKwlwY2FwX3NldF9ub3RfaW5pdGlhbGl6ZWRfbWVzc2FnZShwY2FwKTsKKwkvKiB0aGlzIG1lYW5zICdub3QgaW5pdGlhbGl6ZWQnICovCisJcmV0dXJuIChQQ0FQX0VSUk9SX05PVF9BQ1RJVkFURUQpOworfQorCitzdGF0aWMgaW50CitwY2FwX3N0YXRzX25vdF9pbml0aWFsaXplZChwY2FwX3QgKnBjYXAsIHN0cnVjdCBwY2FwX3N0YXQgKnBzIF9VXykKK3sKKwlwY2FwX3NldF9ub3RfaW5pdGlhbGl6ZWRfbWVzc2FnZShwY2FwKTsKIAkvKiB0aGlzIG1lYW5zICdub3QgaW5pdGlhbGl6ZWQnICovCiAJcmV0dXJuIChQQ0FQX0VSUk9SX05PVF9BQ1RJVkFURUQpOwogfQogCiAjaWZkZWYgX1dJTjMyCi1zdGF0aWMgdm9pZCAqCi1wY2FwX25vdF9pbml0aWFsaXplZF9wdHIocGNhcF90ICpwY2FwKQorc3RhdGljIHN0cnVjdCBwY2FwX3N0YXQgKgorcGNhcF9zdGF0c19leF9ub3RfaW5pdGlhbGl6ZWQocGNhcF90ICpwY2FwLCBpbnQgKnBjYXBfc3RhdF9zaXplIF9VXykKIHsKLQlpZiAocGNhcC0+YWN0aXZhdGVkKSB7Ci0JCS8qIEEgbW9kdWxlIHByb2JhYmx5IGZvcmdvdCB0byBzZXQgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgKi8KLQkJKHZvaWQpcGNhcF9zbnByaW50ZihwY2FwLT5lcnJidWYsIHNpemVvZihwY2FwLT5lcnJidWYpLAotCQkgICAgIlRoaXMgb3BlcmF0aW9uIGlzbid0IHByb3Blcmx5IGhhbmRsZWQgYnkgdGhhdCBkZXZpY2UiKTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JKHZvaWQpcGNhcF9zbnByaW50ZihwY2FwLT5lcnJidWYsIHNpemVvZihwY2FwLT5lcnJidWYpLAotCSAgICAiVGhpcyBoYW5kbGUgaGFzbid0IGJlZW4gYWN0aXZhdGVkIHlldCIpOworCXBjYXBfc2V0X25vdF9pbml0aWFsaXplZF9tZXNzYWdlKHBjYXApOwogCXJldHVybiAoTlVMTCk7CiB9CiAKK3N0YXRpYyBpbnQKK3BjYXBfc2V0YnVmZl9ub3RfaW5pdGlhbGl6ZWQocGNhcF90ICpwY2FwLCBpbnQgZGltIF9VXykKK3sKKwlwY2FwX3NldF9ub3RfaW5pdGlhbGl6ZWRfbWVzc2FnZShwY2FwKTsKKwkvKiB0aGlzIG1lYW5zICdub3QgaW5pdGlhbGl6ZWQnICovCisJcmV0dXJuIChQQ0FQX0VSUk9SX05PVF9BQ1RJVkFURUQpOworfQorCitzdGF0aWMgaW50CitwY2FwX3NldG1vZGVfbm90X2luaXRpYWxpemVkKHBjYXBfdCAqcGNhcCwgaW50IG1vZGUgX1VfKQoreworCXBjYXBfc2V0X25vdF9pbml0aWFsaXplZF9tZXNzYWdlKHBjYXApOworCS8qIHRoaXMgbWVhbnMgJ25vdCBpbml0aWFsaXplZCcgKi8KKwlyZXR1cm4gKFBDQVBfRVJST1JfTk9UX0FDVElWQVRFRCk7Cit9CisKK3N0YXRpYyBpbnQKK3BjYXBfc2V0bWludG9jb3B5X25vdF9pbml0aWFsaXplZChwY2FwX3QgKnBjYXAsIGludCBzaXplIF9VXykKK3sKKwlwY2FwX3NldF9ub3RfaW5pdGlhbGl6ZWRfbWVzc2FnZShwY2FwKTsKKwkvKiB0aGlzIG1lYW5zICdub3QgaW5pdGlhbGl6ZWQnICovCisJcmV0dXJuIChQQ0FQX0VSUk9SX05PVF9BQ1RJVkFURUQpOworfQorCiBzdGF0aWMgSEFORExFCiBwY2FwX2dldGV2ZW50X25vdF9pbml0aWFsaXplZChwY2FwX3QgKnBjYXApCiB7Ci0JaWYgKHBjYXAtPmFjdGl2YXRlZCkgewotCQkvKiBBIG1vZHVsZSBwcm9iYWJseSBmb3Jnb3QgdG8gc2V0IHRoZSBmdW5jdGlvbiBwb2ludGVyICovCi0JCSh2b2lkKXBjYXBfc25wcmludGYocGNhcC0+ZXJyYnVmLCBzaXplb2YocGNhcC0+ZXJyYnVmKSwKLQkJICAgICJUaGlzIG9wZXJhdGlvbiBpc24ndCBwcm9wZXJseSBoYW5kbGVkIGJ5IHRoYXQgZGV2aWNlIik7Ci0JCXJldHVybiAoSU5WQUxJRF9IQU5ETEVfVkFMVUUpOwotCX0KLQkodm9pZClwY2FwX3NucHJpbnRmKHBjYXAtPmVycmJ1Ziwgc2l6ZW9mKHBjYXAtPmVycmJ1ZiksCi0JICAgICJUaGlzIGhhbmRsZSBoYXNuJ3QgYmVlbiBhY3RpdmF0ZWQgeWV0Iik7CisJcGNhcF9zZXRfbm90X2luaXRpYWxpemVkX21lc3NhZ2UocGNhcCk7CiAJcmV0dXJuIChJTlZBTElEX0hBTkRMRV9WQUxVRSk7CiB9CiAKLXN0YXRpYyB1X2ludAotcGNhcF9zZW5kcXVldWVfdHJhbnNtaXRfbm90X2luaXRpYWxpemVkKHBjYXBfdCAqcGNhcCwgcGNhcF9zZW5kX3F1ZXVlKiBxdWV1ZSwgaW50IHN5bmMpCitzdGF0aWMgaW50CitwY2FwX29pZF9nZXRfcmVxdWVzdF9ub3RfaW5pdGlhbGl6ZWQocGNhcF90ICpwY2FwLCBicGZfdV9pbnQzMiBvaWQgX1VfLAorICAgIHZvaWQgKmRhdGEgX1VfLCBzaXplX3QgKmxlbnAgX1VfKQogewotCWlmIChwY2FwLT5hY3RpdmF0ZWQpIHsKLQkJLyogQSBtb2R1bGUgcHJvYmFibHkgZm9yZ290IHRvIHNldCB0aGUgZnVuY3Rpb24gcG9pbnRlciAqLwotCQkodm9pZClwY2FwX3NucHJpbnRmKHBjYXAtPmVycmJ1Ziwgc2l6ZW9mKHBjYXAtPmVycmJ1ZiksCi0JCSAgICAiVGhpcyBvcGVyYXRpb24gaXNuJ3QgcHJvcGVybHkgaGFuZGxlZCBieSB0aGF0IGRldmljZSIpOwotCQlyZXR1cm4gKDApOwotCX0KLQkodm9pZClwY2FwX3NucHJpbnRmKHBjYXAtPmVycmJ1Ziwgc2l6ZW9mKHBjYXAtPmVycmJ1ZiksCi0JICAgICJUaGlzIGhhbmRsZSBoYXNuJ3QgYmVlbiBhY3RpdmF0ZWQgeWV0Iik7CisJcGNhcF9zZXRfbm90X2luaXRpYWxpemVkX21lc3NhZ2UocGNhcCk7CisJcmV0dXJuIChQQ0FQX0VSUk9SX05PVF9BQ1RJVkFURUQpOworfQorCitzdGF0aWMgaW50CitwY2FwX29pZF9zZXRfcmVxdWVzdF9ub3RfaW5pdGlhbGl6ZWQocGNhcF90ICpwY2FwLCBicGZfdV9pbnQzMiBvaWQgX1VfLAorICAgIGNvbnN0IHZvaWQgKmRhdGEgX1VfLCBzaXplX3QgKmxlbnAgX1VfKQoreworCXBjYXBfc2V0X25vdF9pbml0aWFsaXplZF9tZXNzYWdlKHBjYXApOworCXJldHVybiAoUENBUF9FUlJPUl9OT1RfQUNUSVZBVEVEKTsKK30KKworc3RhdGljIHVfaW50CitwY2FwX3NlbmRxdWV1ZV90cmFuc21pdF9ub3RfaW5pdGlhbGl6ZWQocGNhcF90ICpwY2FwLCBwY2FwX3NlbmRfcXVldWUqIHF1ZXVlIF9VXywKKyAgICBpbnQgc3luYyBfVV8pCit7CisJcGNhcF9zZXRfbm90X2luaXRpYWxpemVkX21lc3NhZ2UocGNhcCk7CiAJcmV0dXJuICgwKTsKIH0KIAorc3RhdGljIGludAorcGNhcF9zZXR1c2VyYnVmZmVyX25vdF9pbml0aWFsaXplZChwY2FwX3QgKnBjYXAsIGludCBzaXplIF9VXykKK3sKKwlwY2FwX3NldF9ub3RfaW5pdGlhbGl6ZWRfbWVzc2FnZShwY2FwKTsKKwlyZXR1cm4gKFBDQVBfRVJST1JfTk9UX0FDVElWQVRFRCk7Cit9CisKK3N0YXRpYyBpbnQKK3BjYXBfbGl2ZV9kdW1wX25vdF9pbml0aWFsaXplZChwY2FwX3QgKnBjYXAsIGNoYXIgKmZpbGVuYW1lIF9VXywgaW50IG1heHNpemUgX1VfLAorICAgIGludCBtYXhwYWNrcyBfVV8pCit7CisJcGNhcF9zZXRfbm90X2luaXRpYWxpemVkX21lc3NhZ2UocGNhcCk7CisJcmV0dXJuIChQQ0FQX0VSUk9SX05PVF9BQ1RJVkFURUQpOworfQorCitzdGF0aWMgaW50CitwY2FwX2xpdmVfZHVtcF9lbmRlZF9ub3RfaW5pdGlhbGl6ZWQocGNhcF90ICpwY2FwLCBpbnQgc3luYyBfVV8pCit7CisJcGNhcF9zZXRfbm90X2luaXRpYWxpemVkX21lc3NhZ2UocGNhcCk7CisJcmV0dXJuIChQQ0FQX0VSUk9SX05PVF9BQ1RJVkFURUQpOworfQorCiBzdGF0aWMgUEFpcnBjYXBIYW5kbGUKIHBjYXBfZ2V0X2FpcnBjYXBfaGFuZGxlX25vdF9pbml0aWFsaXplZChwY2FwX3QgKnBjYXApCiB7Ci0JaWYgKHBjYXAtPmFjdGl2YXRlZCkgewotCQkvKiBBIG1vZHVsZSBwcm9iYWJseSBmb3Jnb3QgdG8gc2V0IHRoZSBmdW5jdGlvbiBwb2ludGVyICovCi0JCSh2b2lkKXBjYXBfc25wcmludGYocGNhcC0+ZXJyYnVmLCBzaXplb2YocGNhcC0+ZXJyYnVmKSwKLQkJICAgICJUaGlzIG9wZXJhdGlvbiBpc24ndCBwcm9wZXJseSBoYW5kbGVkIGJ5IHRoYXQgZGV2aWNlIik7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCSh2b2lkKXBjYXBfc25wcmludGYocGNhcC0+ZXJyYnVmLCBzaXplb2YocGNhcC0+ZXJyYnVmKSwKLQkgICAgIlRoaXMgaGFuZGxlIGhhc24ndCBiZWVuIGFjdGl2YXRlZCB5ZXQiKTsKKwlwY2FwX3NldF9ub3RfaW5pdGlhbGl6ZWRfbWVzc2FnZShwY2FwKTsKIAlyZXR1cm4gKE5VTEwpOwogfQogI2VuZGlmCkBAIC0yOTYsOCArNTI4LDE3IEBACiAJaWYgKHAtPnRzdGFtcF90eXBlX2NvdW50ID09IDApIHsKIAkJLyoKIAkJICogV2UgZG9uJ3Qgc3VwcG9ydCBtdWx0aXBsZSB0aW1lIHN0YW1wIHR5cGVzLgorCQkgKiBUaGF0IG1lYW5zIHRoZSBvbmx5IHR5cGUgd2Ugc3VwcG9ydCBpcyBQQ0FQX1RTVEFNUF9IT1NUOworCQkgKiBzZXQgdXAgYSBsaXN0IGNvbnRhaW5pbmcgb25seSB0aGF0IHR5cGUuCiAJCSAqLwotCQkqdHN0YW1wX3R5cGVzcCA9IE5VTEw7CisJCSp0c3RhbXBfdHlwZXNwID0gKGludCopbWFsbG9jKHNpemVvZigqKnRzdGFtcF90eXBlc3ApKTsKKwkJaWYgKCp0c3RhbXBfdHlwZXNwID09IE5VTEwpIHsKKwkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8ocC0+ZXJyYnVmLCBzaXplb2YocC0+ZXJyYnVmKSwKKwkJCSAgICBlcnJubywgIm1hbGxvYyIpOworCQkJcmV0dXJuIChQQ0FQX0VSUk9SKTsKKwkJfQorCQkqKnRzdGFtcF90eXBlc3AgPSBQQ0FQX1RTVEFNUF9IT1NUOworCQlyZXR1cm4gKDEpOwogCX0gZWxzZSB7CiAJCSp0c3RhbXBfdHlwZXNwID0gKGludCopY2FsbG9jKHNpemVvZigqKnRzdGFtcF90eXBlc3ApLAogCQkgICAgcC0+dHN0YW1wX3R5cGVfY291bnQpOwpAQCAtMzA4LDggKzU0OSw4IEBACiAJCX0KIAkJKHZvaWQpbWVtY3B5KCp0c3RhbXBfdHlwZXNwLCBwLT50c3RhbXBfdHlwZV9saXN0LAogCQkgICAgc2l6ZW9mKCoqdHN0YW1wX3R5cGVzcCkgKiBwLT50c3RhbXBfdHlwZV9jb3VudCk7CisJCXJldHVybiAocC0+dHN0YW1wX3R5cGVfY291bnQpOwogCX0KLQlyZXR1cm4gKHAtPnRzdGFtcF90eXBlX2NvdW50KTsKIH0KIAogLyoKQEAgLTQzNiw3ICs2NzcsNyBAQAogI2lmZGVmIFBDQVBfU1VQUE9SVF9CVF9NT05JVE9SCiAJeyBidF9tb25pdG9yX2ZpbmRhbGxkZXZzLCBidF9tb25pdG9yX2NyZWF0ZSB9LAogI2VuZGlmCi0jaWZkZWYgUENBUF9TVVBQT1JUX1VTQgorI2lmZGVmIFBDQVBfU1VQUE9SVF9MSU5VWF9VU0JNT04KIAl7IHVzYl9maW5kYWxsZGV2cywgdXNiX2NyZWF0ZSB9LAogI2VuZGlmCiAjaWZkZWYgUENBUF9TVVBQT1JUX05FVEZJTFRFUgpAQCAtNDUxLDYgKzY5MiwxMiBAQAogI2lmZGVmIFBDQVBfU1VQUE9SVF9SRE1BU05JRkYKIAl7IHJkbWFzbmlmZl9maW5kYWxsZGV2cywgcmRtYXNuaWZmX2NyZWF0ZSB9LAogI2VuZGlmCisjaWZkZWYgUENBUF9TVVBQT1JUX0RQREsKKwl7IHBjYXBfZHBka19maW5kYWxsZGV2cywgcGNhcF9kcGRrX2NyZWF0ZSB9LAorI2VuZGlmCisjaWZkZWYgSEFWRV9BSVJQQ0FQX0FQSQorCXsgYWlycGNhcF9maW5kYWxsZGV2cywgYWlycGNhcF9jcmVhdGUgfSwKKyNlbmRpZgogCXsgTlVMTCwgTlVMTCB9CiB9OwogCkBAIC01MzAsMzkgKzc3NywyNiBAQAogICoKICAqIFRoZSBmaWd1cmUgb2YgbWVyaXQsIHdoaWNoIGlzIGxvd2VyIHRoZSAiYmV0dGVyIiB0aGUgaW50ZXJmYWNlIGlzLAogICogaGFzIHRoZSB1cHBlcm1vc3QgYml0IHNldCBpZiB0aGUgaW50ZXJmYWNlIGlzbid0IHJ1bm5pbmcsIHRoZSBiaXQKLSAqIGJlbG93IHRoYXQgc2V0IGlmIHRoZSBpbnRlcmZhY2UgaXNuJ3QgdXAsIHRoZSBiaXQgYmVsb3cgdGhhdCBzZXQKLSAqIGlmIHRoZSBpbnRlcmZhY2UgaXMgYSBsb29wYmFjayBpbnRlcmZhY2UsIGFuZCB0aGUgaW50ZXJmYWNlIGluZGV4Ci0gKiBpbiB0aGUgMjkgYml0cyBiZWxvdyB0aGF0LiAgKFllcywgd2UgYXNzdW1lIHVfaW50IGlzIDMyIGJpdHMuKQorICogYmVsb3cgdGhhdCBzZXQgaWYgdGhlIGludGVyZmFjZSBpc24ndCB1cCwgdGhlIGJpdCBiZWxvdyB0aGF0CisgKiBzZXQgaWYgdGhlIGludGVyZmFjZSBpcyBhIGxvb3BiYWNrIGludGVyZmFjZSwgYW5kIHRoZSBiaXQgYmVsb3cKKyAqIHRoYXQgc2V0IGlmIGl0J3MgdGhlICJhbnkiIGludGVyZmFjZS4KKyAqCisgKiBOb3RlOiB3ZSBkb24ndCBzb3J0IGJ5IHVuaXQgbnVtYmVyIGJlY2F1c2UgMSkgbm90IGFsbCBpbnRlcmZhY2VzIGhhdmUKKyAqIGEgdW5pdCBudW1iZXIgKHN5c3RlbWQsIGZvciBleGFtcGxlLCBtaWdodCBhc3NpZ24gaW50ZXJmYWNlIG5hbWVzCisgKiBiYXNlZCBvbiB0aGUgaW50ZXJmYWNlJ3MgTUFDIGFkZHJlc3Mgb3Igb24gdGhlIHBoeXNpY2FsIGxvY2F0aW9uIG9mCisgKiB0aGUgYWRhcHRlcidzIGNvbm5lY3RvciksIGFuZCAyKSBpZiB0aGUgbmFtZSBkb2VzIGVuZCB3aXRoIGEgc2ltcGxlCisgKiB1bml0IG51bWJlciwgaXQncyBub3QgYSBnbG9iYWwgcHJvcGVydHkgb2YgdGhlIGludGVyZmFjZSwgaXQncyBvbmx5CisgKiB1c2VmdWwgYXMgYSBzb3J0IGtleSBmb3IgZGV2aWNlIG5hbWVzIHdpdGggdGhlIHNhbWUgcHJlZml4LCBzbyB4eXowCisgKiBzaG91bGRuJ3QgbmVjZXNzYXJpbHkgc29ydCBiZWZvcmUgYWJjMi4gIFRoaXMgbWVhbnMgdGhhdCBpbnRlcmZhY2VzCisgKiB3aXRoIHRoZSBzYW1lIGZpZ3VyZSBvZiBtZXJpdCB3aWxsIGJlIHNvcnRlZCBieSB0aGUgb3JkZXIgaW4gd2hpY2gKKyAqIHRoZSBtZWNoYW5pc20gZnJvbSB3aGljaCB3ZSdyZSBnZXR0aW5nIHRoZSBpbnRlcmZhY2VzIHN1cHBsaWVzIHRoZW0uCiAgKi8KIHN0YXRpYyB1X2ludAogZ2V0X2ZpZ3VyZV9vZl9tZXJpdChwY2FwX2lmX3QgKmRldikKIHsKLQljb25zdCBjaGFyICpjcDsKIAl1X2ludCBuOwogCi0JaWYgKHN0cmNtcChkZXYtPm5hbWUsICJhbnkiKSA9PSAwKSB7Ci0JCS8qCi0JCSAqIEdpdmUgdGhlICJhbnkiIGRldmljZSBhbiBhcnRpZmljaWFsbHkgaGlnaCBpbnN0YW5jZQotCQkgKiBudW1iZXIsIHNvIGl0IHNob3dzIHVwIGFmdGVyIGFsbCBvdGhlciBub24tbG9vcGJhY2sKLQkJICogaW50ZXJmYWNlcy4KLQkJICovCi0JCW4gPSAweDFGRkZGRkZGOwkvKiAyOSBhbGwtMSBiaXRzICovCi0JfSBlbHNlIHsKLQkJLyoKLQkJICogQSBudW1iZXIgYXQgdGhlIGVuZCBvZiB0aGUgZGV2aWNlIG5hbWUgc3RyaW5nIGlzCi0JCSAqIGFzc3VtZWQgdG8gYmUgYW4gaW5zdGFuY2UgbnVtYmVyLiAgQWRkIDEgdG8gdGhlCi0JCSAqIGluc3RhbmNlIG51bWJlciwgYW5kIHVzZSAwIGZvciAibm8gaW5zdGFuY2UKLQkJICogbnVtYmVyIiwgc28gd2UgZG9uJ3QgcHV0ICJubyBpbnN0YW5jZSBudW1iZXIiCi0JCSAqIGRldmljZXMgYW5kICJpbnN0YW5jZSAwIiBkZXZpY2VzIHRvZ2V0aGVyLgotCQkgKi8KLQkJY3AgPSBkZXYtPm5hbWUgKyBzdHJsZW4oZGV2LT5uYW1lKSAtIDE7Ci0JCXdoaWxlIChjcC0xID49IGRldi0+bmFtZSAmJiAqKGNwLTEpID49ICcwJyAmJiAqKGNwLTEpIDw9ICc5JykKLQkJCWNwLS07Ci0JCWlmICgqY3AgPj0gJzAnICYmICpjcCA8PSAnOScpCi0JCQluID0gYXRvaShjcCkgKyAxOwotCQllbHNlCi0JCQluID0gMDsKLQl9CisJbiA9IDA7CiAJaWYgKCEoZGV2LT5mbGFncyAmIFBDQVBfSUZfUlVOTklORykpCiAJCW4gfD0gMHg4MDAwMDAwMDsKIAlpZiAoIShkZXYtPmZsYWdzICYgUENBUF9JRl9VUCkpCkBAIC01ODksNiArODIzLDEzIEBACiAJaWYgKGRldi0+ZmxhZ3MgJiBQQ0FQX0lGX0xPT1BCQUNLKQogCQluIHw9IDB4MTAwMDAwMDA7CiAKKwkvKgorCSAqIFNvcnQgdGhlICJhbnkiIGRldmljZSBiZWZvcmUgbG9vcGJhY2sgYW5kIGRpc2Nvbm5lY3RlZCBkZXZpY2VzLAorCSAqIGJ1dCBhZnRlciBhbGwgb3RoZXIgZGV2aWNlcy4KKwkgKi8KKwlpZiAoc3RyY21wKGRldi0+bmFtZSwgImFueSIpID09IDApCisJCW4gfD0gMHgwODAwMDAwMDsKKwogCXJldHVybiAobik7CiB9CiAKQEAgLTY1OSw3ICs5MDAsNyBAQAogCSAqIEdldCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBpbnRlcmZhY2UuCiAJICovCiAJbWVtc2V0KCZpZnJkZXNjLCAwLCBzaXplb2YgaWZyZGVzYyk7Ci0Jc3RybGNweShpZnJkZXNjLmlmcl9uYW1lLCBuYW1lLCBzaXplb2YgaWZyZGVzYy5pZnJfbmFtZSk7CisJcGNhcF9zdHJsY3B5KGlmcmRlc2MuaWZyX25hbWUsIG5hbWUsIHNpemVvZiBpZnJkZXNjLmlmcl9uYW1lKTsKIAlzID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApOwogCWlmIChzID49IDApIHsKICNpZmRlZiBfX0ZyZWVCU0RfXwpAQCAtNzEwLDcgKzk1MSw3IEBACiAJCX0KICNlbmRpZiAvKiBfX0ZyZWVCU0RfXyAqLwogCQljbG9zZShzKTsKLQkJaWYgKGRlc2NyaXB0aW9uICE9IE5VTEwgJiYgc3RybGVuKGRlc2NyaXB0aW9uKSA9PSAwKSB7CisJCWlmIChkZXNjcmlwdGlvbiAhPSBOVUxMICYmIGRlc2NyaXB0aW9uWzBdID09ICdcMCcpIHsKIAkJCS8qCiAJCQkgKiBEZXNjcmlwdGlvbiBpcyBlbXB0eSwgc28gZGlzY2FyZCBpdC4KIAkJCSAqLwpAQCAtNzQxLDIwICs5ODIsMTMgQEAKIAkJCQkgKiBPSywgaXQncyBhIHZhbGlkIG51bWJlciB0aGF0J3Mgbm90CiAJCQkJICogYmlnZ2VyIHRoYW4gSU5UX01BWC4gIENvbnN0cnVjdAogCQkJCSAqIGEgZGVzY3JpcHRpb24gZnJvbSBpdC4KKwkJCQkgKiAoSWYgdGhhdCBmYWlscywgd2UgZG9uJ3Qgd29ycnkgYWJvdXQKKwkJCQkgKiBpdCwgd2UganVzdCByZXR1cm4gTlVMTC4pCiAJCQkJICovCi0JCQkJc3RhdGljIGNvbnN0IGNoYXIgZGVzY3JfcHJlZml4W10gPSAiVVNCIGJ1cyBudW1iZXIgIjsKLQkJCQlzaXplX3QgZGVzY3Jfc2l6ZTsKLQotCQkJCS8qCi0JCQkJICogQWxsb3cgZW5vdWdoIHJvb20gZm9yIGEgMzItYml0IGJ1cyBudW1iZXIuCi0JCQkJICogc2l6ZW9mIChkZXNjcl9wcmVmaXgpIGluY2x1ZGVzIHRoZQotCQkJCSAqIHRlcm1pbmF0aW5nIE5VTC4KLQkJCQkgKi8KLQkJCQlkZXNjcl9zaXplID0gc2l6ZW9mIChkZXNjcl9wcmVmaXgpICsgMTA7Ci0JCQkJZGVzY3JpcHRpb24gPSBtYWxsb2MoZGVzY3Jfc2l6ZSk7Ci0JCQkJaWYgKGRlc2NyaXB0aW9uICE9IE5VTEwpIHsKLQkJCQkJcGNhcF9zbnByaW50ZihkZXNjcmlwdGlvbiwgZGVzY3Jfc2l6ZSwKLQkJCQkJICAgICIlcyVsZCIsIGRlc2NyX3ByZWZpeCwgYnVzbnVtKTsKKwkJCQlpZiAocGNhcF9hc3ByaW50ZigmZGVzY3JpcHRpb24sCisJCQkJICAgICJVU0IgYnVzIG51bWJlciAlbGQiLCBidXNudW0pID09IC0xKSB7CisJCQkJCS8qIEZhaWxlZC4gKi8KKwkJCQkJZGVzY3JpcHRpb24gPSBOVUxMOwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtNzk2LDcgKzEwMzAsNyBAQAogCSAqIHNlZSBpZiBpdCBsb29rcyBsaWtlIGEgbG9vcGJhY2sgZGV2aWNlLgogCSAqLwogCWlmIChuYW1lWzBdID09ICdsJyAmJiBuYW1lWzFdID09ICdvJyAmJgotCSAgICAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikobmFtZVsyXSkpIHx8IG5hbWVbMl0gPT0gJ1wwJykKKwkgICAgKFBDQVBfSVNESUdJVChuYW1lWzJdKSB8fCBuYW1lWzJdID09ICdcMCcpKQogCQlwY2FwX2ZsYWdzIHw9IFBDQVBfSUZfTE9PUEJBQ0s7CiAjZW5kaWYKICNpZmRlZiBJRkZfVVAKQEAgLTEyNzcsNiArMTUxMSwyMiBAQAogCXN0YXRpYyBjaGFyIGRldmljZVtJRl9OQU1FU0laRSArIDFdOwogCWNoYXIgKnJldDsKIAorCS8qCisJICogV2UgZGlzYWJsZSB0aGlzIGluICJuZXcgQVBJIiBtb2RlLCBiZWNhdXNlIDEpIGluIFdpblBjYXAvTnBjYXAsCisJICogaXQgbWF5IHJldHVybiBVVEYtMTYgc3RyaW5ncywgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5CisJICogcmVhc29ucywgYW5kIHdlJ3JlIGFsc28gZGlzYWJsaW5nIHRoZSBoYWNrIHRvIG1ha2UgdGhhdCB3b3JrLAorCSAqIGZvciBub3QtZ29pbmctcGFzdC10aGUtZW5kLW9mLWEtc3RyaW5nIHJlYXNvbnMsIGFuZCAyKSB3ZQorCSAqIHdhbnQgaXRzIGJlaGF2aW9yIHRvIGJlIGNvbnNpc3RlbnQuCisJICoKKwkgKiBJbiBhZGRpdGlvbiwgaXQncyBub3QgdGhyZWFkLXNhZmUsIHNvIHdlJ3ZlIG1hcmtlZCBpdCBhcworCSAqIGRlcHJlY2F0ZWQuCisJICovCisJaWYgKHBjYXBfbmV3X2FwaSkgeworCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICAicGNhcF9sb29rdXBkZXYoKSBpcyBkZXByZWNhdGVkIGFuZCBpcyBub3Qgc3VwcG9ydGVkIGluIHByb2dyYW1zIGNhbGxpbmcgcGNhcF9pbml0KCkiKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKIAlpZiAocGNhcF9maW5kYWxsZGV2cygmYWxsZGV2cywgZXJyYnVmKSA9PSAtMSkKIAkJcmV0dXJuIChOVUxMKTsKIApAQCAtMTI5MiwxNCArMTU0MiwxNCBAQAogCQkgKiBvbiB0aGUgbGlzdCwgdGhlcmUgYXJlbid0IGFueSBub24tbG9vcGJhY2sgZGV2aWNlcywKIAkJICogc28gd2h5IG5vdCBqdXN0IHN1cHBseSBpdCBhcyB0aGUgZGVmYXVsdCBkZXZpY2U/CiAJCSAqLwotCQkodm9pZClzdHJsY3B5KGVycmJ1ZiwgIm5vIHN1aXRhYmxlIGRldmljZSBmb3VuZCIsCisJCSh2b2lkKXBjYXBfc3RybGNweShlcnJidWYsICJubyBzdWl0YWJsZSBkZXZpY2UgZm91bmQiLAogCQkgICAgUENBUF9FUlJCVUZfU0laRSk7CiAJCXJldCA9IE5VTEw7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBmaXJzdCBkZXZpY2Ugb24gdGhlIGxpc3QuCiAJCSAqLwotCQkodm9pZClzdHJsY3B5KGRldmljZSwgYWxsZGV2cy0+bmFtZSwgc2l6ZW9mKGRldmljZSkpOworCQkodm9pZClwY2FwX3N0cmxjcHkoZGV2aWNlLCBhbGxkZXZzLT5uYW1lLCBzaXplb2YoZGV2aWNlKSk7CiAJCXJldCA9IGRldmljZTsKIAl9CiAKQEAgLTEzNDAsNyArMTU5MCw3IEBACiAjaWZkZWYgUENBUF9TVVBQT1JUX0JUCiAJICAgIHx8IHN0cnN0cihkZXZpY2UsICJibHVldG9vdGgiKSAhPSBOVUxMCiAjZW5kaWYKLSNpZmRlZiBQQ0FQX1NVUFBPUlRfVVNCCisjaWZkZWYgUENBUF9TVVBQT1JUX0xJTlVYX1VTQk1PTgogCSAgICB8fCBzdHJzdHIoZGV2aWNlLCAidXNibW9uIikgIT0gTlVMTAogI2VuZGlmCiAjaWZkZWYgSEFWRV9TTkZfQVBJCkBAIC0xMzUwLDYgKzE2MDAsOSBAQAogCSAgICB8fCBzdHJuY21wKGRldmljZSwgIm5ldG1hcDoiLCA3KSA9PSAwCiAJICAgIHx8IHN0cm5jbXAoZGV2aWNlLCAidmFsZSIsIDQpID09IDAKICNlbmRpZgorI2lmZGVmIFBDQVBfU1VQUE9SVF9EUERLCisJICAgIHx8IHN0cm5jbXAoZGV2aWNlLCAiZHBkazoiLCA1KSA9PSAwCisjZW5kaWYKIAkgICAgKSB7CiAJCSpuZXRwID0gKm1hc2twID0gMDsKIAkJcmV0dXJuIDA7CkBAIC0xMzY2LDEwICsxNjE5LDEwIEBACiAJLyogWFhYIFdvcmsgYXJvdW5kIExpbnV4IGtlcm5lbCBidWcgKi8KIAlpZnIuaWZyX2FkZHIuc2FfZmFtaWx5ID0gQUZfSU5FVDsKICNlbmRpZgotCSh2b2lkKXN0cmxjcHkoaWZyLmlmcl9uYW1lLCBkZXZpY2UsIHNpemVvZihpZnIuaWZyX25hbWUpKTsKKwkodm9pZClwY2FwX3N0cmxjcHkoaWZyLmlmcl9uYW1lLCBkZXZpY2UsIHNpemVvZihpZnIuaWZyX25hbWUpKTsKIAlpZiAoaW9jdGwoZmQsIFNJT0NHSUZBRERSLCAoY2hhciAqKSZpZnIpIDwgMCkgewogCQlpZiAoZXJybm8gPT0gRUFERFJOT1RBVkFJTCkgewotCQkJKHZvaWQpcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkodm9pZClzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgICAgIiVzOiBubyBJUHY0IGFkZHJlc3MgYXNzaWduZWQiLCBkZXZpY2UpOwogCQl9IGVsc2UgewogCQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCkBAIC0xMzg1LDcgKzE2MzgsNyBAQAogCS8qIFhYWCBXb3JrIGFyb3VuZCBMaW51eCBrZXJuZWwgYnVnICovCiAJaWZyLmlmcl9hZGRyLnNhX2ZhbWlseSA9IEFGX0lORVQ7CiAjZW5kaWYKLQkodm9pZClzdHJsY3B5KGlmci5pZnJfbmFtZSwgZGV2aWNlLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CisJKHZvaWQpcGNhcF9zdHJsY3B5KGlmci5pZnJfbmFtZSwgZGV2aWNlLCBzaXplb2YoaWZyLmlmcl9uYW1lKSk7CiAJaWYgKGlvY3RsKGZkLCBTSU9DR0lGTkVUTUFTSywgKGNoYXIgKikmaWZyKSA8IDApIHsKIAkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICBlcnJubywgIlNJT0NHSUZORVRNQVNLOiAlcyIsIGRldmljZSk7CkBAIC0xNDAyLDcgKzE2NTUsNyBAQAogCQllbHNlIGlmIChJTl9DTEFTU0MoKm5ldHApKQogCQkJKm1hc2twID0gSU5fQ0xBU1NDX05FVDsKIAkJZWxzZSB7Ci0JCQkodm9pZClwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCSh2b2lkKXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAgICAiaW5ldCBjbGFzcyBmb3IgMHgleCB1bmtub3duIiwgKm5ldHApOwogCQkJcmV0dXJuICgtMSk7CiAJCX0KQEAgLTE1NzUsMTMgKzE4MjgsMTQgQEAKIAkgKiB0aGUgcGF0aG5hbWUuCiAJICovCiAJaWYgKHBjYXBfc3RyY2FzZWNtcChzY2hlbWUsICJmaWxlIikgPT0gMCkgewotCQkqc2NoZW1lcCA9IHNjaGVtZTsKIAkJKnBhdGhwID0gc3RyZHVwKGNvbG9ucCArIDMpOwogCQlpZiAoKnBhdGhwID09IE5VTEwpIHsKIAkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAgICBlcnJubywgIm1hbGxvYyIpOworCQkJZnJlZShzY2hlbWUpOwogCQkJcmV0dXJuICgtMSk7CiAJCX0KKwkJKnNjaGVtZXAgPSBzY2hlbWU7CiAJCXJldHVybiAoMCk7CiAJfQogCkBAIC0xNTkzLDcgKzE4NDcsOCBAQAogCSAqCiAJICogWFhYIC0gJS1lc2NhcGluZz8KIAkgKi8KLQlpZiAocGNhcF9zdHJjYXNlY21wKHNjaGVtZSwgInJwY2FwIikgPT0gMCAmJgorCWlmICgocGNhcF9zdHJjYXNlY21wKHNjaGVtZSwgInJwY2FwIikgPT0gMCB8fAorCSAgICBwY2FwX3N0cmNhc2VjbXAoc2NoZW1lLCAicnBjYXBzIikgPT0gMCkgJiYKIAkgICAgc3RyY2hyKGNvbG9ucCArIDMsICcvJykgPT0gTlVMTCkgewogCQkvKgogCQkgKiBMb2NhbCBkZXZpY2UuCkBAIC0xNjg0LDE0ICsxOTM5LDE5IEBACiAJCQkgKiBUcmVhdCB2ZXJ5dGhpbmcgdXAgdG8gdGhlIGNsb3Npbmcgc3F1YXJlCiAJCQkgKiBicmFja2V0IGFzIHRoZSBJUC1MaXRlcmFsOyB3ZSBkb24ndCB3b3JyeQogCQkJICogYWJvdXQgd2hldGhlciBpdCdzIGEgdmFsaWQgSVB2NmFkZHJlc3Mgb3IKLQkJCSAqIElQdkZ1dHVyZS4KKwkJCSAqIElQdkZ1dHVyZSAob3IgYW4gSVB2NGFkZHJlc3MsIGZvciB0aGF0CisJCQkgKiBtYXR0ZXIsIGp1c3QgaW4gY2FzZSB3ZSBnZXQgaGFuZGVkIGEKKwkJCSAqIFVSTCB3aXRoIGFuIElQdjQgSVAtTGl0ZXJhbCwgb2YgdGhlIHNvcnQKKwkJCSAqIHRoYXQgcGNhcF9jcmVhdGVzcmNzdHIoKSB1c2VkIHRvIGdlbmVyYXRlLAorCQkJICogYW5kIHRoYXQgcGNhcF9wYXJzZXNyY3N0cigpLCBpbiB0aGUgb3JpZ2luYWwKKwkJCSAqIFdpblBjYXAgY29kZSwgYWNjZXB0ZWQpLgogCQkJICovCiAJCQlicmFja2V0cCA9IHN0cmNocihwYXJzZXAsICddJyk7CiAJCQlpZiAoYnJhY2tldHAgPT0gTlVMTCkgewogCQkJCS8qCiAJCQkJICogVGhlcmUncyBubyBjbG9zaW5nIHNxdWFyZSBicmFja2V0LgogCQkJCSAqLwotCQkJCXBjYXBfc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQlzbnByaW50ZihlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJCSAgICAiSVAtbGl0ZXJhbCBpbiBVUkwgZG9lc24ndCBlbmQgd2l0aCBdIik7CiAJCQkJZnJlZSh1c2VyaW5mbyk7CiAJCQkJZnJlZShhdXRob3JpdHkpOwpAQCAtMTcwNCw3ICsxOTY0LDcgQEAKIAkJCQkgKiBUaGVyZSdzIGV4dHJhIGNydWQgYWZ0ZXIgdGhlCiAJCQkJICogY2xvc2luZyBzcXVhcmUgYnJhY2tldG4uCiAJCQkJICovCi0JCQkJcGNhcF9zbnByaW50ZihlYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJCXNucHJpbnRmKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkJICAgICJFeHRyYSB0ZXh0IGFmdGVyIElQLWxpdGVyYWwgaW4gVVJMIik7CiAJCQkJZnJlZSh1c2VyaW5mbyk7CiAJCQkJZnJlZShhdXRob3JpdHkpOwpAQCAtMTc5OSwyNCArMjA1OSwyNiBAQAogfQogCiBpbnQKLXBjYXBfY3JlYXRlc3Jjc3RyKGNoYXIgKnNvdXJjZSwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKmhvc3QsIGNvbnN0IGNoYXIgKnBvcnQsCi0gICAgY29uc3QgY2hhciAqbmFtZSwgY2hhciAqZXJyYnVmKQorcGNhcF9jcmVhdGVzcmNzdHJfZXgoY2hhciAqc291cmNlLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqaG9zdCwgY29uc3QgY2hhciAqcG9ydCwKKyAgICBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBjaGFyIHVzZXNfc3NsLCBjaGFyICplcnJidWYpCiB7CiAJc3dpdGNoICh0eXBlKSB7CiAKIAljYXNlIFBDQVBfU1JDX0ZJTEU6Ci0JCXN0cmxjcHkoc291cmNlLCBQQ0FQX1NSQ19GSUxFX1NUUklORywgUENBUF9CVUZfU0laRSk7CisJCXBjYXBfc3RybGNweShzb3VyY2UsIFBDQVBfU1JDX0ZJTEVfU1RSSU5HLCBQQ0FQX0JVRl9TSVpFKTsKIAkJaWYgKG5hbWUgIT0gTlVMTCAmJiAqbmFtZSAhPSAnXDAnKSB7Ci0JCQlzdHJsY2F0KHNvdXJjZSwgbmFtZSwgUENBUF9CVUZfU0laRSk7CisJCQlwY2FwX3N0cmxjYXQoc291cmNlLCBuYW1lLCBQQ0FQX0JVRl9TSVpFKTsKIAkJCXJldHVybiAoMCk7CiAJCX0gZWxzZSB7Ci0JCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAgICAiVGhlIGZpbGUgbmFtZSBjYW5ub3QgYmUgTlVMTC4iKTsKIAkJCXJldHVybiAoLTEpOwogCQl9CiAKIAljYXNlIFBDQVBfU1JDX0lGUkVNT1RFOgotCQlzdHJsY3B5KHNvdXJjZSwgUENBUF9TUkNfSUZfU1RSSU5HLCBQQ0FQX0JVRl9TSVpFKTsKKwkJcGNhcF9zdHJsY3B5KHNvdXJjZSwKKwkJICAgICh1c2VzX3NzbCA/ICJycGNhcHM6Ly8iIDogUENBUF9TUkNfSUZfU1RSSU5HKSwKKwkJICAgIFBDQVBfQlVGX1NJWkUpOwogCQlpZiAoaG9zdCAhPSBOVUxMICYmICpob3N0ICE9ICdcMCcpIHsKIAkJCWlmIChzdHJjaHIoaG9zdCwgJzonKSAhPSBOVUxMKSB7CiAJCQkJLyoKQEAgLTE4MjQsNDcgKzIwODYsNTUgQEAKIAkJCQkgKiBwcm9iYWJseSBhbiBJUHY2IGFkZHJlc3MsIGFuZCBuZWVkcyB0bwogCQkJCSAqIGJlIGluY2x1ZGVkIGluIHNxdWFyZSBicmFja2V0cy4KIAkJCQkgKi8KLQkJCQlzdHJsY2F0KHNvdXJjZSwgIlsiLCBQQ0FQX0JVRl9TSVpFKTsKLQkJCQlzdHJsY2F0KHNvdXJjZSwgaG9zdCwgUENBUF9CVUZfU0laRSk7Ci0JCQkJc3RybGNhdChzb3VyY2UsICJdIiwgUENBUF9CVUZfU0laRSk7CisJCQkJcGNhcF9zdHJsY2F0KHNvdXJjZSwgIlsiLCBQQ0FQX0JVRl9TSVpFKTsKKwkJCQlwY2FwX3N0cmxjYXQoc291cmNlLCBob3N0LCBQQ0FQX0JVRl9TSVpFKTsKKwkJCQlwY2FwX3N0cmxjYXQoc291cmNlLCAiXSIsIFBDQVBfQlVGX1NJWkUpOwogCQkJfSBlbHNlCi0JCQkJc3RybGNhdChzb3VyY2UsIGhvc3QsIFBDQVBfQlVGX1NJWkUpOworCQkJCXBjYXBfc3RybGNhdChzb3VyY2UsIGhvc3QsIFBDQVBfQlVGX1NJWkUpOwogCiAJCQlpZiAocG9ydCAhPSBOVUxMICYmICpwb3J0ICE9ICdcMCcpIHsKLQkJCQlzdHJsY2F0KHNvdXJjZSwgIjoiLCBQQ0FQX0JVRl9TSVpFKTsKLQkJCQlzdHJsY2F0KHNvdXJjZSwgcG9ydCwgUENBUF9CVUZfU0laRSk7CisJCQkJcGNhcF9zdHJsY2F0KHNvdXJjZSwgIjoiLCBQQ0FQX0JVRl9TSVpFKTsKKwkJCQlwY2FwX3N0cmxjYXQoc291cmNlLCBwb3J0LCBQQ0FQX0JVRl9TSVpFKTsKIAkJCX0KIAotCQkJc3RybGNhdChzb3VyY2UsICIvIiwgUENBUF9CVUZfU0laRSk7CisJCQlwY2FwX3N0cmxjYXQoc291cmNlLCAiLyIsIFBDQVBfQlVGX1NJWkUpOwogCQl9IGVsc2UgewotCQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgICAgIlRoZSBob3N0IG5hbWUgY2Fubm90IGJlIE5VTEwuIik7CiAJCQlyZXR1cm4gKC0xKTsKIAkJfQogCiAJCWlmIChuYW1lICE9IE5VTEwgJiYgKm5hbWUgIT0gJ1wwJykKLQkJCXN0cmxjYXQoc291cmNlLCBuYW1lLCBQQ0FQX0JVRl9TSVpFKTsKKwkJCXBjYXBfc3RybGNhdChzb3VyY2UsIG5hbWUsIFBDQVBfQlVGX1NJWkUpOwogCiAJCXJldHVybiAoMCk7CiAKIAljYXNlIFBDQVBfU1JDX0lGTE9DQUw6Ci0JCXN0cmxjcHkoc291cmNlLCBQQ0FQX1NSQ19JRl9TVFJJTkcsIFBDQVBfQlVGX1NJWkUpOworCQlwY2FwX3N0cmxjcHkoc291cmNlLCBQQ0FQX1NSQ19JRl9TVFJJTkcsIFBDQVBfQlVGX1NJWkUpOwogCiAJCWlmIChuYW1lICE9IE5VTEwgJiYgKm5hbWUgIT0gJ1wwJykKLQkJCXN0cmxjYXQoc291cmNlLCBuYW1lLCBQQ0FQX0JVRl9TSVpFKTsKKwkJCXBjYXBfc3RybGNhdChzb3VyY2UsIG5hbWUsIFBDQVBfQlVGX1NJWkUpOwogCiAJCXJldHVybiAoMCk7CiAKIAlkZWZhdWx0OgotCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkgICAgIlRoZSBpbnRlcmZhY2UgdHlwZSBpcyBub3QgdmFsaWQuIik7CiAJCXJldHVybiAoLTEpOwogCX0KIH0KIAorCiBpbnQKLXBjYXBfcGFyc2VzcmNzdHIoY29uc3QgY2hhciAqc291cmNlLCBpbnQgKnR5cGUsIGNoYXIgKmhvc3QsIGNoYXIgKnBvcnQsCi0gICAgY2hhciAqbmFtZSwgY2hhciAqZXJyYnVmKQorcGNhcF9jcmVhdGVzcmNzdHIoY2hhciAqc291cmNlLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqaG9zdCwgY29uc3QgY2hhciAqcG9ydCwKKyAgICBjb25zdCBjaGFyICpuYW1lLCBjaGFyICplcnJidWYpCit7CisJcmV0dXJuIChwY2FwX2NyZWF0ZXNyY3N0cl9leChzb3VyY2UsIHR5cGUsIGhvc3QsIHBvcnQsIG5hbWUsIDAsIGVycmJ1ZikpOworfQorCitpbnQKK3BjYXBfcGFyc2VzcmNzdHJfZXgoY29uc3QgY2hhciAqc291cmNlLCBpbnQgKnR5cGUsIGNoYXIgKmhvc3QsIGNoYXIgKnBvcnQsCisgICAgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciAqdXNlc19zc2wsIGNoYXIgKmVycmJ1ZikKIHsKIAljaGFyICpzY2hlbWUsICp0bXB1c2VyaW5mbywgKnRtcGhvc3QsICp0bXBwb3J0LCAqdG1wcGF0aDsKIApAQCAtMTg3NSw2ICsyMTQ1LDggQEAKIAkJKnBvcnQgPSAnXDAnOwogCWlmIChuYW1lKQogCQkqbmFtZSA9ICdcMCc7CisJaWYgKHVzZXNfc3NsKQorCQkqdXNlc19zc2wgPSAwOwogCiAJLyogUGFyc2UgdGhlIHNvdXJjZSBzdHJpbmcgKi8KIAlpZiAocGNhcF9wYXJzZV9zb3VyY2Uoc291cmNlLCAmc2NoZW1lLCAmdG1wdXNlcmluZm8sICZ0bXBob3N0LApAQCAtMTg5MCw3ICsyMTYyLDcgQEAKIAkJICogTG9jYWwgZGV2aWNlLgogCQkgKi8KIAkJaWYgKG5hbWUgJiYgdG1wcGF0aCkKLQkJCXN0cmxjcHkobmFtZSwgdG1wcGF0aCwgUENBUF9CVUZfU0laRSk7CisJCQlwY2FwX3N0cmxjcHkobmFtZSwgdG1wcGF0aCwgUENBUF9CVUZfU0laRSk7CiAJCWlmICh0eXBlKQogCQkJKnR5cGUgPSBQQ0FQX1NSQ19JRkxPQ0FMOwogCQlmcmVlKHRtcHBhdGgpOwpAQCAtMTkwMCwyNCArMjE3MiwzMiBAQAogCQlyZXR1cm4gKDApOwogCX0KIAotCWlmIChzdHJjbXAoc2NoZW1lLCAicnBjYXAiKSA9PSAwKSB7CisJaW50IGlzX3JwY2FwID0gMDsKKwlpZiAoc3RyY21wKHNjaGVtZSwgInJwY2FwcyIpID09IDApIHsKKwkJaXNfcnBjYXAgPSAxOworCQlpZiAodXNlc19zc2wpICp1c2VzX3NzbCA9IDE7CisJfSBlbHNlIGlmIChzdHJjbXAoc2NoZW1lLCAicnBjYXAiKSA9PSAwKSB7CisJCWlzX3JwY2FwID0gMTsKKwl9CisKKwlpZiAoaXNfcnBjYXApIHsKIAkJLyoKLQkJICogcnBjYXA6Ly8KKwkJICogcnBjYXBbc106Ly8KIAkJICoKIAkJICogcGNhcF9wYXJzZV9zb3VyY2UoKSBoYXMgYWxyZWFkeSBoYW5kbGVkIHRoZSBjYXNlIG9mCi0JCSAqIHJwY2FwOi8vZGV2aWNlCisJCSAqIHJwY2FwW3NdOi8vZGV2aWNlCiAJCSAqLwogCQlpZiAoaG9zdCAmJiB0bXBob3N0KSB7CiAJCQlpZiAodG1wdXNlcmluZm8pCi0JCQkJcGNhcF9zbnByaW50Zihob3N0LCBQQ0FQX0JVRl9TSVpFLCAiJXNAJXMiLAorCQkJCXNucHJpbnRmKGhvc3QsIFBDQVBfQlVGX1NJWkUsICIlc0AlcyIsCiAJCQkJICAgIHRtcHVzZXJpbmZvLCB0bXBob3N0KTsKIAkJCWVsc2UKLQkJCQlzdHJsY3B5KGhvc3QsIHRtcGhvc3QsIFBDQVBfQlVGX1NJWkUpOworCQkJCXBjYXBfc3RybGNweShob3N0LCB0bXBob3N0LCBQQ0FQX0JVRl9TSVpFKTsKIAkJfQogCQlpZiAocG9ydCAmJiB0bXBwb3J0KQotCQkJc3RybGNweShwb3J0LCB0bXBwb3J0LCBQQ0FQX0JVRl9TSVpFKTsKKwkJCXBjYXBfc3RybGNweShwb3J0LCB0bXBwb3J0LCBQQ0FQX0JVRl9TSVpFKTsKIAkJaWYgKG5hbWUgJiYgdG1wcGF0aCkKLQkJCXN0cmxjcHkobmFtZSwgdG1wcGF0aCwgUENBUF9CVUZfU0laRSk7CisJCQlwY2FwX3N0cmxjcHkobmFtZSwgdG1wcGF0aCwgUENBUF9CVUZfU0laRSk7CiAJCWlmICh0eXBlKQogCQkJKnR5cGUgPSBQQ0FQX1NSQ19JRlJFTU9URTsKIAkJZnJlZSh0bXBwYXRoKTsKQEAgLTE5MzMsNyArMjIxMyw3IEBACiAJCSAqIGZpbGU6Ly8KIAkJICovCiAJCWlmIChuYW1lICYmIHRtcHBhdGgpCi0JCQlzdHJsY3B5KG5hbWUsIHRtcHBhdGgsIFBDQVBfQlVGX1NJWkUpOworCQkJcGNhcF9zdHJsY3B5KG5hbWUsIHRtcHBhdGgsIFBDQVBfQlVGX1NJWkUpOwogCQlpZiAodHlwZSkKIAkJCSp0eXBlID0gUENBUF9TUkNfRklMRTsKIAkJZnJlZSh0bXBwYXRoKTsKQEAgLTE5NDksNyArMjIyOSw3IEBACiAJICogYXMgYSBsb2NhbCBkZXZpY2UuCiAJICovCiAJaWYgKG5hbWUpCi0JCXN0cmxjcHkobmFtZSwgc291cmNlLCBQQ0FQX0JVRl9TSVpFKTsKKwkJcGNhcF9zdHJsY3B5KG5hbWUsIHNvdXJjZSwgUENBUF9CVUZfU0laRSk7CiAJaWYgKHR5cGUpCiAJCSp0eXBlID0gUENBUF9TUkNfSUZMT0NBTDsKIAlmcmVlKHRtcHBhdGgpOwpAQCAtMTk1OSw2ICsyMjM5LDEzIEBACiAJZnJlZShzY2hlbWUpOwogCXJldHVybiAoMCk7CiB9CisKK2ludAorcGNhcF9wYXJzZXNyY3N0cihjb25zdCBjaGFyICpzb3VyY2UsIGludCAqdHlwZSwgY2hhciAqaG9zdCwgY2hhciAqcG9ydCwKKyAgICBjaGFyICpuYW1lLCBjaGFyICplcnJidWYpCit7CisJcmV0dXJuIChwY2FwX3BhcnNlc3Jjc3RyX2V4KHNvdXJjZSwgdHlwZSwgaG9zdCwgcG9ydCwgbmFtZSwgTlVMTCwgZXJyYnVmKSk7Cit9CiAjZW5kaWYKIAogcGNhcF90ICoKQEAgLTE5ODEsMTMgKzIyNjgsNDIgQEAKIAllbHNlIHsKICNpZmRlZiBfV0lOMzIKIAkJLyoKLQkJICogSWYgdGhlIHN0cmluZyBhcHBlYXJzIHRvIGJlIGxpdHRsZS1lbmRpYW4gVUNTLTIvVVRGLTE2LAotCQkgKiBjb252ZXJ0IGl0IHRvIEFTQ0lJLgorCQkgKiBPbiBXaW5kb3dzLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29ucywKKwkJICogcGNhcF9sb29rdXBkZXYoKSByZXR1cm5zIGEgcG9pbnRlciB0byBhIHNlcXVlbmNlIG9mCisJCSAqIHBhaXJzIG9mIFVURi0xNkxFIGRldmljZSBuYW1lcyBhbmQgbG9jYWwgY29kZSBwYWdlCisJCSAqIGRlc2NyaXB0aW9uIHN0cmluZ3MuCiAJCSAqCi0JCSAqIFhYWCAtIHRvIFVURi04IGluc3RlYWQ/ICBPciByZXBvcnQgYW4gZXJyb3IgaWYgYW55Ci0JCSAqIGNoYXJhY3RlciBpc24ndCBBU0NJST8KKwkJICogVGhpcyBtZWFucyB0aGF0IGlmIGEgcHJvZ3JhbSB1c2VzIHBjYXBfbG9va3VwZGV2KCkKKwkJICogdG8gZ2V0IGEgZGVmYXVsdCBkZXZpY2UsIGFuZCBoYW5kcyB0aGF0IHRvIGFuIEFQSQorCQkgKiB0aGF0IG9wZW5zIGRldmljZXMsIHdlJ2xsIGdldCBoYW5kZWQgYSBVVEYtMTZMRQorCQkgKiBzdHJpbmcsIG5vdCBhIHN0cmluZyBpbiB0aGUgbG9jYWwgY29kZSBwYWdlLgorCQkgKgorCQkgKiBUbyB3b3JrIGFyb3VuZCB0aGF0LCB3ZSBjaGVjayB3aGV0aGVyIHRoZSBzdHJpbmcKKwkJICogbG9va3MgYXMgaWYgaXQgbWlnaHQgYmUgYSBVVEYtMTZMRSBzdHJpbmcgYW5kLCBpZgorCQkgKiBzbywgY29udmVydCBpdCBiYWNrIHRvIHRoZSBsb2NhbCBjb2RlIHBhZ2UncworCQkgKiBleHRlbmRlZCBBU0NJSS4KKwkJICoKKwkJICogV2UgZGlzYWJsZSB0aGF0IGNoZWNrIGluICJuZXcgQVBJIiBtb2RlLCBiZWNhdXNlOgorCQkgKgorCQkgKiAgIDEpIFlvdSAqY2Fubm90KiByZWxpYWJseSBkZXRlY3Qgd2hldGhlciBhCisJCSAqICAgc3RyaW5nIGlzIFVURi0xNkxFIG9yIG5vdDsgImEiIGNvdWxkIGVpdGhlcgorCQkgKiAgIGJlIGEgb25lLWNoYXJhY3RlciBBU0NJSSBzdHJpbmcgb3IgdGhlIGZpcnN0CisJCSAqICAgY2hhcmFjdGVyIG9mIGEgVVRGLTE2TEUgc3RyaW5nLgorCQkgKgorCQkgKiAgIDIpIERvaW5nIHRoYXQgdGVzdCBjYW4gcnVuIHBhc3QgdGhlIGVuZCBvZgorCQkgKiAgIHRoZSBzdHJpbmcsIGlmIGl0J3MgYSAxLWNoYXJhY3RlciBBU0NJSQorCQkgKiAgIHN0cmluZworCQkgKgorCQkgKiBUaGlzIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGlzIGhldXJpc3RpYyBkYXRlcworCQkgKiBiYWNrIHRvIFdpblBjYXAgNC4xLjE7IFBhY2tldE9wZW5BZGFwdGVyKCkgZG9lcworCQkgKiB1c2VzIHRoZSBzYW1lIGhldXJpc3RpYywgd2l0aCB0aGUgZXhhY3Qgc2FtZQorCQkgKiB2dWxuZXJhYmlsaXR5LgorCQkgKgorCQkgKiBUaGF0J3Mgd2h5IHdlIGRpc2FibGUgdGhpcyBpbiAibmV3IEFQSSIgbW9kZS4KKwkJICogV2Uga2VlcCBpdCBhcm91bmQgaW4gbGVnYWN5IG1vZGUgZm9yIGJhY2t3YXJkcworCQkgKiBjb21wYXRpYmlsaXR5LgogCQkgKi8KLQkJaWYgKGRldmljZVswXSAhPSAnXDAnICYmIGRldmljZVsxXSA9PSAnXDAnKSB7CisJCWlmICghcGNhcF9uZXdfYXBpICYmIGRldmljZVswXSAhPSAnXDAnICYmIGRldmljZVsxXSA9PSAnXDAnKSB7CiAJCQlzaXplX3QgbGVuZ3RoOwogCiAJCQlsZW5ndGggPSB3Y3NsZW4oKHdjaGFyX3QgKilkZXZpY2UpOwpAQCAtMTk5OSw3ICsyMzE1LDcgQEAKIAkJCQlyZXR1cm4gKE5VTEwpOwogCQkJfQogCi0JCQlwY2FwX3NucHJpbnRmKGRldmljZV9zdHIsIGxlbmd0aCArIDEsICIld3MiLAorCQkJc25wcmludGYoZGV2aWNlX3N0ciwgbGVuZ3RoICsgMSwgIiV3cyIsCiAJCQkgICAgKGNvbnN0IHdjaGFyX3QgKilkZXZpY2UpOwogCQl9IGVsc2UKICNlbmRpZgpAQCAtMjA3NywyNSArMjM5MywyNSBAQAogCSAqIGFuIGFjdGl2YXRlZCBwY2FwX3QgdG8gcG9pbnQgdG8gYSByb3V0aW5lIHRoYXQgcmV0dXJucwogCSAqIGEgInRoaXMgaXNuJ3QgYWN0aXZhdGVkIiBlcnJvci4KIAkgKi8KLQlwLT5yZWFkX29wID0gKHJlYWRfb3BfdClwY2FwX25vdF9pbml0aWFsaXplZDsKLQlwLT5pbmplY3Rfb3AgPSAoaW5qZWN0X29wX3QpcGNhcF9ub3RfaW5pdGlhbGl6ZWQ7Ci0JcC0+c2V0ZmlsdGVyX29wID0gKHNldGZpbHRlcl9vcF90KXBjYXBfbm90X2luaXRpYWxpemVkOwotCXAtPnNldGRpcmVjdGlvbl9vcCA9IChzZXRkaXJlY3Rpb25fb3BfdClwY2FwX25vdF9pbml0aWFsaXplZDsKLQlwLT5zZXRfZGF0YWxpbmtfb3AgPSAoc2V0X2RhdGFsaW5rX29wX3QpcGNhcF9ub3RfaW5pdGlhbGl6ZWQ7Ci0JcC0+Z2V0bm9uYmxvY2tfb3AgPSAoZ2V0bm9uYmxvY2tfb3BfdClwY2FwX25vdF9pbml0aWFsaXplZDsKLQlwLT5zdGF0c19vcCA9IChzdGF0c19vcF90KXBjYXBfbm90X2luaXRpYWxpemVkOworCXAtPnJlYWRfb3AgPSBwY2FwX3JlYWRfbm90X2luaXRpYWxpemVkOworCXAtPmluamVjdF9vcCA9IHBjYXBfaW5qZWN0X25vdF9pbml0aWFsaXplZDsKKwlwLT5zZXRmaWx0ZXJfb3AgPSBwY2FwX3NldGZpbHRlcl9ub3RfaW5pdGlhbGl6ZWQ7CisJcC0+c2V0ZGlyZWN0aW9uX29wID0gcGNhcF9zZXRkaXJlY3Rpb25fbm90X2luaXRpYWxpemVkOworCXAtPnNldF9kYXRhbGlua19vcCA9IHBjYXBfc2V0X2RhdGFsaW5rX25vdF9pbml0aWFsaXplZDsKKwlwLT5nZXRub25ibG9ja19vcCA9IHBjYXBfZ2V0bm9uYmxvY2tfbm90X2luaXRpYWxpemVkOworCXAtPnN0YXRzX29wID0gcGNhcF9zdGF0c19ub3RfaW5pdGlhbGl6ZWQ7CiAjaWZkZWYgX1dJTjMyCi0JcC0+c3RhdHNfZXhfb3AgPSAoc3RhdHNfZXhfb3BfdClwY2FwX25vdF9pbml0aWFsaXplZF9wdHI7Ci0JcC0+c2V0YnVmZl9vcCA9IChzZXRidWZmX29wX3QpcGNhcF9ub3RfaW5pdGlhbGl6ZWQ7Ci0JcC0+c2V0bW9kZV9vcCA9IChzZXRtb2RlX29wX3QpcGNhcF9ub3RfaW5pdGlhbGl6ZWQ7Ci0JcC0+c2V0bWludG9jb3B5X29wID0gKHNldG1pbnRvY29weV9vcF90KXBjYXBfbm90X2luaXRpYWxpemVkOworCXAtPnN0YXRzX2V4X29wID0gcGNhcF9zdGF0c19leF9ub3RfaW5pdGlhbGl6ZWQ7CisJcC0+c2V0YnVmZl9vcCA9IHBjYXBfc2V0YnVmZl9ub3RfaW5pdGlhbGl6ZWQ7CisJcC0+c2V0bW9kZV9vcCA9IHBjYXBfc2V0bW9kZV9ub3RfaW5pdGlhbGl6ZWQ7CisJcC0+c2V0bWludG9jb3B5X29wID0gcGNhcF9zZXRtaW50b2NvcHlfbm90X2luaXRpYWxpemVkOwogCXAtPmdldGV2ZW50X29wID0gcGNhcF9nZXRldmVudF9ub3RfaW5pdGlhbGl6ZWQ7Ci0JcC0+b2lkX2dldF9yZXF1ZXN0X29wID0gKG9pZF9nZXRfcmVxdWVzdF9vcF90KXBjYXBfbm90X2luaXRpYWxpemVkOwotCXAtPm9pZF9zZXRfcmVxdWVzdF9vcCA9IChvaWRfc2V0X3JlcXVlc3Rfb3BfdClwY2FwX25vdF9pbml0aWFsaXplZDsKKwlwLT5vaWRfZ2V0X3JlcXVlc3Rfb3AgPSBwY2FwX29pZF9nZXRfcmVxdWVzdF9ub3RfaW5pdGlhbGl6ZWQ7CisJcC0+b2lkX3NldF9yZXF1ZXN0X29wID0gcGNhcF9vaWRfc2V0X3JlcXVlc3Rfbm90X2luaXRpYWxpemVkOwogCXAtPnNlbmRxdWV1ZV90cmFuc21pdF9vcCA9IHBjYXBfc2VuZHF1ZXVlX3RyYW5zbWl0X25vdF9pbml0aWFsaXplZDsKLQlwLT5zZXR1c2VyYnVmZmVyX29wID0gKHNldHVzZXJidWZmZXJfb3BfdClwY2FwX25vdF9pbml0aWFsaXplZDsKLQlwLT5saXZlX2R1bXBfb3AgPSAobGl2ZV9kdW1wX29wX3QpcGNhcF9ub3RfaW5pdGlhbGl6ZWQ7Ci0JcC0+bGl2ZV9kdW1wX2VuZGVkX29wID0gKGxpdmVfZHVtcF9lbmRlZF9vcF90KXBjYXBfbm90X2luaXRpYWxpemVkOworCXAtPnNldHVzZXJidWZmZXJfb3AgPSBwY2FwX3NldHVzZXJidWZmZXJfbm90X2luaXRpYWxpemVkOworCXAtPmxpdmVfZHVtcF9vcCA9IHBjYXBfbGl2ZV9kdW1wX25vdF9pbml0aWFsaXplZDsKKwlwLT5saXZlX2R1bXBfZW5kZWRfb3AgPSBwY2FwX2xpdmVfZHVtcF9lbmRlZF9ub3RfaW5pdGlhbGl6ZWQ7CiAJcC0+Z2V0X2FpcnBjYXBfaGFuZGxlX29wID0gcGNhcF9nZXRfYWlycGNhcF9oYW5kbGVfbm90X2luaXRpYWxpemVkOwogI2VuZGlmCiAKQEAgLTIxMTEsMzYgKzI0MjcsMzEgQEAKIAkgKiBiZSB1c2VkIGZvciBwY2FwX25leHQoKS9wY2FwX25leHRfZXgoKS4KIAkgKi8KIAlwLT5vbmVzaG90X2NhbGxiYWNrID0gcGNhcF9vbmVzaG90OworCisJLyoKKwkgKiBEZWZhdWx0IGJyZWFrbG9vcCBvcGVyYXRpb24gLSBpbXBsZW1lbnRhdGlvbnMgY2FuIG92ZXJyaWRlCisJICogdGhpcywgYnV0IHNob3VsZCBjYWxsIHBjYXBfYnJlYWtsb29wX2NvbW1vbigpIGJlZm9yZSBkb2luZworCSAqIHRoZWlyIG93biBsb2dpYy4KKwkgKi8KKwlwLT5icmVha2xvb3Bfb3AgPSBwY2FwX2JyZWFrbG9vcF9jb21tb247CiB9CiAKIHN0YXRpYyBwY2FwX3QgKgotcGNhcF9hbGxvY19wY2FwX3QoY2hhciAqZWJ1Ziwgc2l6ZV90IHNpemUpCitwY2FwX2FsbG9jX3BjYXBfdChjaGFyICplYnVmLCBzaXplX3QgdG90YWxfc2l6ZSwgc2l6ZV90IHByaXZhdGVfb2Zmc2V0KQogewogCWNoYXIgKmNodW5rOwogCXBjYXBfdCAqcDsKIAogCS8qCi0JICogQWxsb2NhdGUgYSBjaHVuayBvZiBtZW1vcnkgYmlnIGVub3VnaCBmb3IgYSBwY2FwX3QKLQkgKiBwbHVzIGEgc3RydWN0dXJlIGZvbGxvd2luZyBpdCBvZiBzaXplICJzaXplIi4gIFRoZQotCSAqIHN0cnVjdHVyZSBmb2xsb3dpbmcgaXQgaXMgYSBwcml2YXRlIGRhdGEgc3RydWN0dXJlCi0JICogZm9yIHRoZSByb3V0aW5lcyB0aGF0IGhhbmRsZSB0aGlzIHBjYXBfdC4KLQkgKgotCSAqIFRoZSBzdHJ1Y3R1cmUgZm9sbG93aW5nIGl0IG11c3QgYmUgYWxpZ25lZCBvbgotCSAqIHRoZSBhcHByb3ByaWF0ZSBhbGlnbm1lbnQgYm91bmRhcnkgZm9yIHRoaXMgcGxhdGZvcm0uCi0JICogV2UgYWxpZ24gb24gYW4gOC1ieXRlIGJvdW5kYXJ5IGFzIHRoYXQncyBwcm9iYWJseSB3aGF0Ci0JICogYXQgbGVhc3Qgc29tZSBwbGF0Zm9ybXMgZG8sIGV2ZW4gd2l0aCAzMi1iaXQgaW50ZWdlcnMsCi0JICogYW5kIGJlY2F1c2Ugd2UgY2FuJ3QgYmUgc3VyZSB0aGF0IHNvbWUgdmFsdWVzIHdvbid0Ci0JICogcmVxdWlyZSA4LWJ5dGUgYWxpZ25tZW50IGV2ZW4gb24gcGxhdGZvcm1zIHdpdGggMzItYml0Ci0JICogaW50ZWdlcnMuCisJICogdG90YWxfc2l6ZSBpcyB0aGUgc2l6ZSBvZiBhIHN0cnVjdHVyZSBjb250YWluaW5nIGEgcGNhcF90CisJICogZm9sbG93ZWQgYnkgYSBwcml2YXRlIHN0cnVjdHVyZS4KIAkgKi8KLSNkZWZpbmUgUENBUF9UX0FMSUdORURfU0laRQkoKHNpemVvZihwY2FwX3QpICsgNykgJiB+MHg3KQotCWNodW5rID0gbWFsbG9jKFBDQVBfVF9BTElHTkVEX1NJWkUgKyBzaXplKTsKKwljaHVuayA9IGNhbGxvYyh0b3RhbF9zaXplLCAxKTsKIAlpZiAoY2h1bmsgPT0gTlVMTCkgewogCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICBlcnJubywgIm1hbGxvYyIpOwogCQlyZXR1cm4gKE5VTEwpOwogCX0KLQltZW1zZXQoY2h1bmssIDAsIFBDQVBfVF9BTElHTkVEX1NJWkUgKyBzaXplKTsKIAogCS8qCiAJICogR2V0IGEgcG9pbnRlciB0byB0aGUgcGNhcF90IGF0IHRoZSBiZWdpbm5pbmcuCkBAIC0yMTU3LDI2ICsyNDY4LDI0IEBACiAjZW5kaWYgLyogTVNET1MgKi8KICNlbmRpZiAvKiBfV0lOMzIgKi8KIAotCWlmIChzaXplID09IDApIHsKLQkJLyogTm8gcHJpdmF0ZSBkYXRhIHdhcyByZXF1ZXN0ZWQuICovCi0JCXAtPnByaXYgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIFNldCB0aGUgcG9pbnRlciB0byB0aGUgcHJpdmF0ZSBkYXRhOyB0aGF0J3MgdGhlIHN0cnVjdHVyZQotCQkgKiBvZiBzaXplICJzaXplIiBmb2xsb3dpbmcgdGhlIHBjYXBfdC4KLQkJICovCi0JCXAtPnByaXYgPSAodm9pZCAqKShjaHVuayArIFBDQVBfVF9BTElHTkVEX1NJWkUpOwotCX0KKwkvKgorCSAqIHByaXZhdGVfb2Zmc2V0IGlzIHRoZSBvZmZzZXQsIGluIGJ5dGVzLCBvZiB0aGUgcHJpdmF0ZQorCSAqIGRhdGEgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJ1Y3R1cmUuCisJICoKKwkgKiBTZXQgdGhlIHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgZGF0YTsgdGhhdCdzIHByaXZhdGVfb2Zmc2V0CisJICogYnl0ZXMgcGFzdCB0aGUgcGNhcF90LgorCSAqLworCXAtPnByaXYgPSAodm9pZCAqKShjaHVuayArIHByaXZhdGVfb2Zmc2V0KTsKIAogCXJldHVybiAocCk7CiB9CiAKIHBjYXBfdCAqCi1wY2FwX2NyZWF0ZV9jb21tb24oY2hhciAqZWJ1Ziwgc2l6ZV90IHNpemUpCitwY2FwX2NyZWF0ZV9jb21tb24oY2hhciAqZWJ1Ziwgc2l6ZV90IHRvdGFsX3NpemUsIHNpemVfdCBwcml2YXRlX29mZnNldCkKIHsKIAlwY2FwX3QgKnA7CiAKLQlwID0gcGNhcF9hbGxvY19wY2FwX3QoZWJ1Ziwgc2l6ZSk7CisJcCA9IHBjYXBfYWxsb2NfcGNhcF90KGVidWYsIHRvdGFsX3NpemUsIHByaXZhdGVfb2Zmc2V0KTsKIAlpZiAocCA9PSBOVUxMKQogCQlyZXR1cm4gKE5VTEwpOwogCkBAIC0yMjI4LDcgKzI1MzcsNyBAQAogcGNhcF9jaGVja19hY3RpdmF0ZWQocGNhcF90ICpwKQogewogCWlmIChwLT5hY3RpdmF0ZWQpIHsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJjYW4ndCBwZXJmb3JtICIKKwkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiY2FuJ3QgcGVyZm9ybSAiCiAJCQkiIG9wZXJhdGlvbiBvbiBhY3RpdmF0ZWQgY2FwdHVyZSIpOwogCQlyZXR1cm4gKC0xKTsKIAl9CkBAIC0yNDM2LDcgKzI3NDUsNyBAQAogCQkJICogaGFuZGxlIGVycm9ycyBvdGhlciB0aGFuIFBDQVBfRVJST1IsIHJldHVybiB0aGUKIAkJCSAqIGVycm9yIG1lc3NhZ2UgY29ycmVzcG9uZGluZyB0byB0aGUgc3RhdHVzLgogCQkJICovCi0JCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIiVzIiwKKwkJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIiVzIiwKIAkJCSAgICBwY2FwX3N0YXR1c3Rvc3RyKHN0YXR1cykpOwogCQl9CiAKQEAgLTI0NjEsNiArMjc3MCwxNiBAQAogCWludCBzcmN0eXBlOwogCiAJLyoKKwkgKiBBIG51bGwgZGV2aWNlIG5hbWUgaXMgZXF1aXZhbGVudCB0byB0aGUgImFueSIgZGV2aWNlIC0KKwkgKiB3aGljaCBtaWdodCBub3QgYmUgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0sIGJ1dAorCSAqIHRoaXMgbWVhbnMgdGhhdCB5b3UnbGwgZ2V0IGEgIm5vdCBzdXBwb3J0ZWQiIGVycm9yCisJICogcmF0aGVyIHRoYW4sIHNheSwgYSBjcmFzaCB3aGVuIHdlIHRyeSB0byBkZXJlZmVyZW5jZQorCSAqIHRoZSBudWxsIHBvaW50ZXIuCisJICovCisJaWYgKGRldmljZSA9PSBOVUxMKQorCQlkZXZpY2UgPSAiYW55IjsKKworCS8qCiAJICogUmV0cm9maXQgLSB3ZSBoYXZlIHRvIG1ha2Ugb2xkZXIgYXBwbGljYXRpb25zIGNvbXBhdGlibGUgd2l0aAogCSAqIHJlbW90ZSBjYXB0dXJlLgogCSAqIFNvIHdlJ3JlIGNhbGxpbmcgcGNhcF9vcGVuX3JlbW90ZSgpIGZyb20gaGVyZTsgdGhpcyBpcyBhIHZlcnkKQEAgLTI0ODQsNyArMjgwMyw3IEBACiAJCSAgICBOVUxMLCBlcnJidWYpKTsKIAl9CiAJaWYgKHNyY3R5cGUgPT0gUENBUF9TUkNfRklMRSkgewotCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgInVua25vd24gVVJMIHNjaGVtZSBcImZpbGVcIiIpOworCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJ1bmtub3duIFVSTCBzY2hlbWUgXCJmaWxlXCIiKTsKIAkJcmV0dXJuIChOVUxMKTsKIAl9CiAJaWYgKHNyY3R5cGUgPT0gUENBUF9TUkNfSUZMT0NBTCkgewpAQCAtMjUzMSwyNiArMjg1MCwyNiBAQAogCXJldHVybiAocCk7CiBmYWlsOgogCWlmIChzdGF0dXMgPT0gUENBUF9FUlJPUikKLQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICIlczogJXMiLCBkZXZpY2UsCi0JCSAgICBwLT5lcnJidWYpOworCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICIlczogJS4qcyIsIGRldmljZSwKKwkJICAgIFBDQVBfRVJSQlVGX1NJWkUgLSAzLCBwLT5lcnJidWYpOwogCWVsc2UgaWYgKHN0YXR1cyA9PSBQQ0FQX0VSUk9SX05PX1NVQ0hfREVWSUNFIHx8CiAJICAgIHN0YXR1cyA9PSBQQ0FQX0VSUk9SX1BFUk1fREVOSUVEIHx8CiAJICAgIHN0YXR1cyA9PSBQQ0FQX0VSUk9SX1BST01JU0NfUEVSTV9ERU5JRUQpCi0JCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiJXM6ICVzICglcykiLCBkZXZpY2UsCi0JCSAgICBwY2FwX3N0YXR1c3Rvc3RyKHN0YXR1cyksIHAtPmVycmJ1Zik7CisJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIiVzOiAlcyAoJS4qcykiLCBkZXZpY2UsCisJCSAgICBwY2FwX3N0YXR1c3Rvc3RyKHN0YXR1cyksIFBDQVBfRVJSQlVGX1NJWkUgLSA2LCBwLT5lcnJidWYpOwogCWVsc2UKLQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICIlczogJXMiLCBkZXZpY2UsCisJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIiVzOiAlcyIsIGRldmljZSwKIAkJICAgIHBjYXBfc3RhdHVzdG9zdHIoc3RhdHVzKSk7CiAJcGNhcF9jbG9zZShwKTsKIAlyZXR1cm4gKE5VTEwpOwogfQogCiBwY2FwX3QgKgotcGNhcF9vcGVuX29mZmxpbmVfY29tbW9uKGNoYXIgKmVidWYsIHNpemVfdCBzaXplKQorcGNhcF9vcGVuX29mZmxpbmVfY29tbW9uKGNoYXIgKmVidWYsIHNpemVfdCB0b3RhbF9zaXplLCBzaXplX3QgcHJpdmF0ZV9vZmZzZXQpCiB7CiAJcGNhcF90ICpwOwogCi0JcCA9IHBjYXBfYWxsb2NfcGNhcF90KGVidWYsIHNpemUpOworCXAgPSBwY2FwX2FsbG9jX3BjYXBfdChlYnVmLCB0b3RhbF9zaXplLCBwcml2YXRlX29mZnNldCk7CiAJaWYgKHAgPT0gTlVMTCkKIAkJcmV0dXJuIChOVUxMKTsKIApAQCAtMjYwMSw3ICsyOTIwLDcgQEAKIHZvaWQKIHBjYXBfYnJlYWtsb29wKHBjYXBfdCAqcCkKIHsKLQlwLT5icmVha19sb29wID0gMTsKKwlwLT5icmVha2xvb3Bfb3AocCk7CiB9CiAKIGludApAQCAtMjcyNCwxMSArMzA0MywxMSBAQAogdW5zdXBwb3J0ZWQ6CiAJZGx0X25hbWUgPSBwY2FwX2RhdGFsaW5rX3ZhbF90b19uYW1lKGRsdCk7CiAJaWYgKGRsdF9uYW1lICE9IE5VTEwpIHsKLQkJKHZvaWQpIHBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBzaXplb2YocC0+ZXJyYnVmKSwKKwkJKHZvaWQpIHNucHJpbnRmKHAtPmVycmJ1Ziwgc2l6ZW9mKHAtPmVycmJ1ZiksCiAJCSAgICAiJXMgaXMgbm90IG9uZSBvZiB0aGUgRExUcyBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2UiLAogCQkgICAgZGx0X25hbWUpOwogCX0gZWxzZSB7Ci0JCSh2b2lkKSBwY2FwX3NucHJpbnRmKHAtPmVycmJ1Ziwgc2l6ZW9mKHAtPmVycmJ1ZiksCisJCSh2b2lkKSBzbnByaW50ZihwLT5lcnJidWYsIHNpemVvZihwLT5lcnJidWYpLAogCQkgICAgIkRMVCAlZCBpcyBub3Qgb25lIG9mIHRoZSBETFRzIHN1cHBvcnRlZCBieSB0aGlzIGRldmljZSIsCiAJCSAgICBkbHQpOwogCX0KQEAgLTI4NDEsNyArMzE2MCw3IEBACiAJRExUX0NIT0lDRShSQVcsICJSYXcgSVAiKSwKIAlETFRfQ0hPSUNFKFNMSVBfQlNET1MsICJCU0QvT1MgU0xJUCIpLAogCURMVF9DSE9JQ0UoUFBQX0JTRE9TLCAiQlNEL09TIFBQUCIpLAotCURMVF9DSE9JQ0UoQVRNX0NMSVAsICJMaW51eCBDbGFzc2ljYWwgSVAtb3Zlci1BVE0iKSwKKwlETFRfQ0hPSUNFKEFUTV9DTElQLCAiTGludXggQ2xhc3NpY2FsIElQIG92ZXIgQVRNIiksCiAJRExUX0NIT0lDRShQUFBfU0VSSUFMLCAiUFBQIG92ZXIgc2VyaWFsIiksCiAJRExUX0NIT0lDRShQUFBfRVRIRVIsICJQUFBvRSIpLAogCURMVF9DSE9JQ0UoU1lNQU5URUNfRklSRVdBTEwsICJTeW1hbnRlYyBGaXJld2FsbCIpLApAQCAtMjg1MCw3ICszMTY5LDcgQEAKIAlETFRfQ0hPSUNFKEZSRUxBWSwgIkZyYW1lIFJlbGF5IiksCiAJRExUX0NIT0lDRShMT09QLCAiT3BlbkJTRCBsb29wYmFjayIpLAogCURMVF9DSE9JQ0UoRU5DLCAiT3BlbkJTRCBlbmNhcHN1bGF0ZWQgSVAiKSwKLQlETFRfQ0hPSUNFKExJTlVYX1NMTCwgIkxpbnV4IGNvb2tlZCIpLAorCURMVF9DSE9JQ0UoTElOVVhfU0xMLCAiTGludXggY29va2VkIHYxIiksCiAJRExUX0NIT0lDRShMVEFMSywgIkxvY2FsdGFsayIpLAogCURMVF9DSE9JQ0UoUEZMT0csICJPcGVuQlNEIHBmbG9nIGZpbGUiKSwKIAlETFRfQ0hPSUNFKFBGU1lOQywgIlBhY2tldCBmaWx0ZXIgc3RhdGUgc3luY2luZyIpLApAQCAtMjg4NCw3ICszMjAzLDcgQEAKIAlETFRfQ0hPSUNFKEdQRl9ULCAiR1BGLVQiKSwKIAlETFRfQ0hPSUNFKEdQRl9GLCAiR1BGLUYiKSwKIAlETFRfQ0hPSUNFKEpVTklQRVJfUElDX1BFRVIsICJKdW5pcGVyIFBJQyBQZWVyIiksCi0JRExUX0NIT0lDRShFUkZfRVRILAkiRXRoZXJuZXQgd2l0aCBFbmRhY2UgRVJGIGhlYWRlciIpLAorCURMVF9DSE9JQ0UoRVJGX0VUSCwgIkV0aGVybmV0IHdpdGggRW5kYWNlIEVSRiBoZWFkZXIiKSwKIAlETFRfQ0hPSUNFKEVSRl9QT1MsICJQYWNrZXQtb3Zlci1TT05FVCB3aXRoIEVuZGFjZSBFUkYgaGVhZGVyIiksCiAJRExUX0NIT0lDRShMSU5VWF9MQVBELCAiTGludXggdklTRE4gTEFQRCIpLAogCURMVF9DSE9JQ0UoSlVOSVBFUl9FVEhFUiwgIkp1bmlwZXIgRXRoZXJuZXQiKSwKQEAgLTI5MDgsMTAgKzMyMjcsMTEgQEAKIAlETFRfQ0hPSUNFKFNJVEEsICJTSVRBIHBzZXVkby1oZWFkZXIiKSwKIAlETFRfQ0hPSUNFKEVSRiwgIkVuZGFjZSBFUkYgaGVhZGVyIiksCiAJRExUX0NIT0lDRShSQUlGMSwgIkV0aGVybmV0IHdpdGggdTEwIE5ldHdvcmtzIHBzZXVkby1oZWFkZXIiKSwKLQlETFRfQ0hPSUNFKElQTUIsICJJUE1CIiksCisJRExUX0NIT0lDRShJUE1CX0tPTlRST04sICJJUE1CIHdpdGggS29udHJvbiBwc2V1ZG8taGVhZGVyIiksCiAJRExUX0NIT0lDRShKVU5JUEVSX1NULCAiSnVuaXBlciBTZWN1cmUgVHVubmVsIiksCiAJRExUX0NIT0lDRShCTFVFVE9PVEhfSENJX0g0X1dJVEhfUEhEUiwgIkJsdWV0b290aCBIQ0kgVUFSVCB0cmFuc3BvcnQgbGF5ZXIgcGx1cyBwc2V1ZG8taGVhZGVyIiksCiAJRExUX0NIT0lDRShBWDI1X0tJU1MsICJBWC4yNSB3aXRoIEtJU1MgaGVhZGVyIiksCisJRExUX0NIT0lDRShJUE1CX0xJTlVYLCAiSVBNQiB3aXRoIExpbnV4L1BpZ2VvbiBQb2ludCBwc2V1ZG8taGVhZGVyIiksCiAJRExUX0NIT0lDRShJRUVFODAyXzE1XzRfTk9OQVNLX1BIWSwgIklFRUUgODAyLjE1LjQgd2l0aCBub24tQVNLIFBIWSBkYXRhIiksCiAJRExUX0NIT0lDRShNUExTLCAiTVBMUyB3aXRoIGxhYmVsIGFzIGxpbmstbGF5ZXIgaGVhZGVyIiksCiAJRExUX0NIT0lDRShMSU5VWF9FVkRFViwgIkxpbnV4IGV2ZGV2IGV2ZW50cyIpLApAQCAtMjk2OCw2ICszMjg4LDE5IEBACiAJRExUX0NIT0lDRShET0NTSVMzMV9YUkEzMSwgIkV4Y2VudGlzIFhSQS0zMSBET0NTSVMgMy4xIFJGIHNuaWZmZXIgZnJhbWVzIiksCiAJRExUX0NIT0lDRShFVEhFUk5FVF9NUEFDS0VULCAiODAyLjNiciBtUGFja2V0cyIpLAogCURMVF9DSE9JQ0UoRElTUExBWVBPUlRfQVVYLCAiRGlzcGxheVBvcnQgQVVYIGNoYW5uZWwgbW9uaXRvcmluZyBkYXRhIiksCisJRExUX0NIT0lDRShMSU5VWF9TTEwyLCAiTGludXggY29va2VkIHYyIiksCisJRExUX0NIT0lDRShPUEVOVklaU0xBLCAiT3BlblZpenNsYSBVU0IiKSwKKwlETFRfQ0hPSUNFKEVCSFNDUiwgIkVsZWt0cm9iaXQgSGlnaCBTcGVlZCBDYXB0dXJlIGFuZCBSZXBsYXkgKEVCSFNDUikiKSwKKwlETFRfQ0hPSUNFKFZQUF9ESVNQQVRDSCwgIlZQUCBncmFwaCBkaXNwYXRjaCB0cmFjZXIiKSwKKwlETFRfQ0hPSUNFKERTQV9UQUdfQlJDTSwgIkJyb2FkY29tIHRhZyIpLAorCURMVF9DSE9JQ0UoRFNBX1RBR19CUkNNX1BSRVBFTkQsICJCcm9hZGNvbSB0YWcgKHByZXBlbmRlZCkiKSwKKwlETFRfQ0hPSUNFKElFRUU4MDJfMTVfNF9UQVAsICJJRUVFIDgwMi4xNS40IHdpdGggcHNldWRvLWhlYWRlciIpLAorCURMVF9DSE9JQ0UoRFNBX1RBR19EU0EsICJNYXJ2ZWxsIERTQSIpLAorCURMVF9DSE9JQ0UoRFNBX1RBR19FRFNBLCAiTWFydmVsbCBFRFNBIiksCisJRExUX0NIT0lDRShFTEVFLCAiRUxFRSBsYXdmdWwgaW50ZXJjZXB0IHBhY2tldHMiKSwKKwlETFRfQ0hPSUNFKFpfV0FWRV9TRVJJQUwsICJaLVdhdmUgc2VyaWFsIGZyYW1lcyBiZXR3ZWVuIGhvc3QgYW5kIGNoaXAiKSwKKwlETFRfQ0hPSUNFKFVTQl8yXzAsICJVU0IgMi4wLzEuMS8xLjAgYXMgdHJhbnNtaXR0ZWQgb3ZlciB0aGUgY2FibGUiKSwKKwlETFRfQ0hPSUNFKEFUU0NfQUxQLCAiQVRTQyBMaW5rLUxheWVyIFByb3RvY29sIHBhY2tldHMiKSwKIAlETFRfQ0hPSUNFX1NFTlRJTkVMCiB9OwogCkBAIC0zMDA3LDYgKzMzNDAsMjEgQEAKIAlyZXR1cm4gKE5VTEwpOwogfQogCitjb25zdCBjaGFyICoKK3BjYXBfZGF0YWxpbmtfdmFsX3RvX2Rlc2NyaXB0aW9uX29yX2RsdChpbnQgZGx0KQoreworICAgICAgICBzdGF0aWMgY2hhciB1bmtidWZbNDBdOworICAgICAgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbjsKKworICAgICAgICBkZXNjcmlwdGlvbiA9IHBjYXBfZGF0YWxpbmtfdmFsX3RvX2Rlc2NyaXB0aW9uKGRsdCk7CisgICAgICAgIGlmIChkZXNjcmlwdGlvbiAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICh2b2lkKXNucHJpbnRmKHVua2J1Ziwgc2l6ZW9mKHVua2J1ZiksICJETFQgJXUiLCBkbHQpOworICAgICAgICAgICAgICAgIHJldHVybiB1bmtidWY7CisgICAgICAgIH0KK30KKwogc3RydWN0IHRzdGFtcF90eXBlX2Nob2ljZSB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAljb25zdCBjaGFyICpkZXNjcmlwdGlvbjsKQEAgLTMwMTksNiArMzM2Nyw3IEBACiAJeyAiaG9zdF9oaXByZWMiLCAiSG9zdCwgaGlnaCBwcmVjaXNpb24iLCBQQ0FQX1RTVEFNUF9IT1NUX0hJUFJFQyB9LAogCXsgImFkYXB0ZXIiLCAiQWRhcHRlciIsIFBDQVBfVFNUQU1QX0FEQVBURVIgfSwKIAl7ICJhZGFwdGVyX3Vuc3luY2VkIiwgIkFkYXB0ZXIsIG5vdCBzeW5jZWQgd2l0aCBzeXN0ZW0gdGltZSIsIFBDQVBfVFNUQU1QX0FEQVBURVJfVU5TWU5DRUQgfSwKKwl7ICJob3N0X2hpcHJlY191bnN5bmNlZCIsICJIb3N0LCBoaWdoIHByZWNpc2lvbiwgbm90IHN5bmNlZCB3aXRoIHN5c3RlbSB0aW1lIiwgUENBUF9UU1RBTVBfSE9TVF9ISVBSRUNfVU5TWU5DRUQgfSwKIAl7IE5VTEwsIE5VTEwsIDAgfQogfTsKIApAQCAtMzEwNCwxOCArMzQ1MywzMyBAQAogCXJldHVybiAocC0+cmZpbGUpOwogfQogCisjaWZkZWYgX1dJTjMyCiBpbnQKIHBjYXBfZmlsZW5vKHBjYXBfdCAqcCkKIHsKLSNpZm5kZWYgX1dJTjMyCi0JcmV0dXJuIChwLT5mZCk7Ci0jZWxzZQotCWlmIChwLT5oYW5kbGUgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJaWYgKHAtPmhhbmRsZSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworCQkvKgorCQkgKiBUaGlzIGlzIGEgYm9ndXMgYW5kIG5vdy1kZXByZWNhdGVkIEFQSTsgd2UKKwkJICogc3F1ZWxjaCB0aGUgbmFycm93aW5nIHdhcm5pbmcgZm9yIHRoZSBjYXN0CisJCSAqIGZyb20gSEFORExFIHRvIERXT1JELiAgSWYgV2luZG93cyBwcm9ncmFtbW1lcnMKKwkJICogbmVlZCB0byBnZXQgYXQgdGhlIEhBTkRMRSBmb3IgYSBwY2FwX3QsICppZioKKwkJICogdGhlcmUgaXMgb25lLCB0aGV5IHNob3VsZCByZXF1ZXN0IHN1Y2ggYQorCQkgKiByb3V0aW5lIChhbmQgYmUgcHJlcGFyZWQgZm9yIGl0IHRvIHJldHVybgorCQkgKiBJTlZBTElEX0hBTkRMRV9WQUxVRSkuCisJCSAqLworRElBR19PRkZfTkFSUk9XSU5HCiAJCXJldHVybiAoKGludCkoRFdPUkQpcC0+aGFuZGxlKTsKLQllbHNlCitESUFHX09OX05BUlJPV0lORworCX0gZWxzZQogCQlyZXR1cm4gKFBDQVBfRVJST1IpOwotI2VuZGlmCiB9CisjZWxzZSAvKiBfV0lOMzIgKi8KK2ludAorcGNhcF9maWxlbm8ocGNhcF90ICpwKQoreworCXJldHVybiAocC0+ZmQpOworfQorI2VuZGlmIC8qIF9XSU4zMiAqLwogCiAjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChNU0RPUykKIGludApAQCAtMzEyNCw3ICszNDg4LDcgQEAKIAlyZXR1cm4gKHAtPnNlbGVjdGFibGVfZmQpOwogfQogCi1zdHJ1Y3QgdGltZXZhbCAqCitjb25zdCBzdHJ1Y3QgdGltZXZhbCAqCiBwY2FwX2dldF9yZXF1aXJlZF9zZWxlY3RfdGltZW91dChwY2FwX3QgKnApCiB7CiAJcmV0dXJuIChwLT5yZXF1aXJlZF9zZWxlY3RfdGltZW91dCk7CkBAIC0zMTU5LDcgKzM1MjMsNyBAQAogCQkgKiBXZSBjb3B5IHRoZSBlcnJvciBtZXNzYWdlIHRvIGVycmJ1Ziwgc28gY2FsbGVycwogCQkgKiBjYW4gZmluZCBpdCBpbiBlaXRoZXIgcGxhY2UuCiAJCSAqLwotCQlzdHJsY3B5KGVycmJ1ZiwgcC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKKwkJcGNhcF9zdHJsY3B5KGVycmJ1ZiwgcC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKIAl9CiAJcmV0dXJuIChyZXQpOwogfQpAQCAtMzIwMyw3ICszNTY3LDcgQEAKIAkJICogV2UgY29weSB0aGUgZXJyb3IgbWVzc2FnZSB0byBlcnJidWYsIHNvIGNhbGxlcnMKIAkJICogY2FuIGZpbmQgaXQgaW4gZWl0aGVyIHBsYWNlLgogCQkgKi8KLQkJc3RybGNweShlcnJidWYsIHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSk7CisJCXBjYXBfc3RybGNweShlcnJidWYsIHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSk7CiAJfQogCXJldHVybiAocmV0KTsKIH0KQEAgLTMyMzksMzUgKzM2MDMsNiBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBfV0lOMzIKLS8qCi0gKiBHZW5lcmF0ZSBhIHN0cmluZyBmb3IgYSBXaW4zMi1zcGVjaWZpYyBlcnJvciAoaS5lLiBhbiBlcnJvciBnZW5lcmF0ZWQgd2hlbgotICogY2FsbGluZyBhIFdpbjMyIEFQSSkuCi0gKiBGb3IgZXJyb3JzIG9jY3VycmVkIGR1cmluZyBzdGFuZGFyZCBDIGNhbGxzLCB3ZSBzdGlsbCB1c2UgcGNhcF9zdHJlcnJvcigpCi0gKi8KLXZvaWQKLXBjYXBfd2luMzJfZXJyX3RvX3N0cihEV09SRCBlcnJvciwgY2hhciAqZXJyYnVmKQotewotCXNpemVfdCBlcnJsZW47Ci0JY2hhciAqcDsKLQotCUZvcm1hdE1lc3NhZ2VBKEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNLCBOVUxMLCBlcnJvciwgMCwgZXJyYnVmLAotCSAgICBQQ0FQX0VSUkJVRl9TSVpFLCBOVUxMKTsKLQotCS8qCi0JICogIkZvcm1hdE1lc3NhZ2UoKSIgImhlbHBmdWxseSIgc3RpY2tzIENSL0xGIGF0IHRoZSBlbmQgb2YgdGhlCi0JICogbWVzc2FnZS4gIEdldCByaWQgb2YgaXQuCi0JICovCi0JZXJybGVuID0gc3RybGVuKGVycmJ1Zik7Ci0JaWYgKGVycmxlbiA+PSAyKSB7Ci0JCWVycmJ1ZltlcnJsZW4gLSAxXSA9ICdcMCc7Ci0JCWVycmJ1ZltlcnJsZW4gLSAyXSA9ICdcMCc7Ci0JfQotCXAgPSBzdHJjaHIoZXJyYnVmLCAnXDAnKTsKLQlwY2FwX3NucHJpbnRmIChwLCBQQ0FQX0VSUkJVRl9TSVpFKzEtKHAtZXJyYnVmKSwgIiAoJWx1KSIsIGVycm9yKTsKLX0KLSNlbmRpZgotCiAvKgogICogR2VuZXJhdGUgZXJyb3Igc3RyaW5ncyBmb3IgUENBUF9FUlJPUl8gYW5kIFBDQVBfV0FSTklOR18gdmFsdWVzLgogICovCkBAIC0zMzIzLDcgKzM2NTgsNyBAQAogCWNhc2UgUENBUF9FUlJPUl9UU1RBTVBfUFJFQ0lTSU9OX05PVFNVUDoKIAkJcmV0dXJuICgiVGhhdCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IHRoYXQgdGltZSBzdGFtcCBwcmVjaXNpb24iKTsKIAl9Ci0JKHZvaWQpcGNhcF9zbnByaW50ZihlYnVmLCBzaXplb2YgZWJ1ZiwgIlVua25vd24gZXJyb3I6ICVkIiwgZXJybnVtKTsKKwkodm9pZClzbnByaW50ZihlYnVmLCBzaXplb2YgZWJ1ZiwgIlVua25vd24gZXJyb3I6ICVkIiwgZXJybnVtKTsKIAlyZXR1cm4oZWJ1Zik7CiB9CiAKQEAgLTMzMzksNyArMzY3NCw3IEBACiAJZXJybm9fdCBlcnIgPSBzdHJlcnJvcl9zKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgZXJybnVtKTsKIAogCWlmIChlcnIgIT0gMCkgLyogZXJyID0gMCBpZiBzdWNjZXNzZnVsICovCi0JCXN0cmxjcHkoZXJyYnVmLCAic3RyZXJyb3JfcygpIGVycm9yIiwgUENBUF9FUlJCVUZfU0laRSk7CisJCXBjYXBfc3RybGNweShlcnJidWYsICJzdHJlcnJvcl9zKCkgZXJyb3IiLCBQQ0FQX0VSUkJVRl9TSVpFKTsKIAlyZXR1cm4gKGVycmJ1Zik7CiAjZWxzZQogCXJldHVybiAoc3RyZXJyb3IoZXJybnVtKSk7CkBAIC0zMzUxLDcgKzM2ODYsNyBAQAogCiAJaWYgKCh1bnNpZ25lZCBpbnQpZXJybnVtIDwgc3lzX25lcnIpCiAJCXJldHVybiAoKGNoYXIgKilzeXNfZXJybGlzdFtlcnJudW1dKTsKLQkodm9pZClwY2FwX3NucHJpbnRmKGVycmJ1Ziwgc2l6ZW9mIGVycmJ1ZiwgIlVua25vd24gZXJyb3I6ICVkIiwgZXJybnVtKTsKKwkodm9pZClzbnByaW50ZihlcnJidWYsIHNpemVvZiBlcnJidWYsICJVbmtub3duIGVycm9yOiAlZCIsIGVycm51bSk7CiAJcmV0dXJuIChlcnJidWYpOwogI2VuZGlmCiB9CkBAIC0zMzcyLDExICszNzA3LDI5IEBACiBwY2FwX3NldGRpcmVjdGlvbihwY2FwX3QgKnAsIHBjYXBfZGlyZWN0aW9uX3QgZCkKIHsKIAlpZiAocC0+c2V0ZGlyZWN0aW9uX29wID09IE5VTEwpIHsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCi0JCSAgICAiU2V0dGluZyBkaXJlY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0iKTsKKwkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkgICAgIlNldHRpbmcgZGlyZWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBkZXZpY2UiKTsKIAkJcmV0dXJuICgtMSk7Ci0JfSBlbHNlCi0JCXJldHVybiAocC0+c2V0ZGlyZWN0aW9uX29wKHAsIGQpKTsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGQpIHsKKworCQljYXNlIFBDQVBfRF9JTjoKKwkJY2FzZSBQQ0FQX0RfT1VUOgorCQljYXNlIFBDQVBfRF9JTk9VVDoKKwkJCS8qCisJCQkgKiBWYWxpZCBkaXJlY3Rpb24uCisJCQkgKi8KKwkJCXJldHVybiAocC0+c2V0ZGlyZWN0aW9uX29wKHAsIGQpKTsKKworCQlkZWZhdWx0OgorCQkJLyoKKwkJCSAqIEludmFsaWQgZGlyZWN0aW9uLgorCQkJICovCisJCQlzbnByaW50ZihwLT5lcnJidWYsIHNpemVvZihwLT5lcnJidWYpLAorCQkJICAgICJJbnZhbGlkIGRpcmVjdGlvbiIpOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwl9CiB9CiAKIGludApAQCAtMzUwOCw3ICszODYxLDcgQEAKIAogCWhhbmRsZSA9IHAtPmdldF9haXJwY2FwX2hhbmRsZV9vcChwKTsKIAlpZiAoaGFuZGxlID09IE5VTEwpIHsKLQkJKHZvaWQpcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIHNpemVvZihwLT5lcnJidWYpLAorCQkodm9pZClzbnByaW50ZihwLT5lcnJidWYsIHNpemVvZihwLT5lcnJidWYpLAogCQkgICAgIlRoaXMgaXNuJ3QgYW4gQWlyUGNhcCBkZXZpY2UiKTsKIAl9CiAJcmV0dXJuIChoYW5kbGUpOwpAQCAtMzU0NSw4ICszODk4LDI4IEBACiB7CiAJc3RydWN0IHBjYXAgKmhhbmRsZTsKIAotCXdoaWxlICgoaGFuZGxlID0gcGNhcHNfdG9fY2xvc2UpICE9IE5VTEwpCisJd2hpbGUgKChoYW5kbGUgPSBwY2Fwc190b19jbG9zZSkgIT0gTlVMTCkgewogCQlwY2FwX2Nsb3NlKGhhbmRsZSk7CisKKwkJLyoKKwkJICogSWYgYSBwY2FwIG1vZHVsZSBhZGRzIGEgcGNhcF90IHRvIHRoZSAiY2xvc2UgYWxsIgorCQkgKiBsaXN0IGJ5IGNhbGxpbmcgcGNhcF9hZGRfdG9fcGNhcHNfdG9fY2xvc2UoKSwgaXQKKwkJICogbXVzdCBoYXZlIGEgY2xlYW51cCByb3V0aW5lIHRoYXQgcmVtb3ZlcyBpdCBmcm9tIHRoZQorCQkgKiBsaXN0LCBieSBjYWxsaW5nIHBjYXBfcmVtb3ZlX2Zyb21fcGNhcHNfdG9fY2xvc2UoKSwKKwkJICogYW5kIG11c3QgbWFrZSB0aGF0IGNsZWFudXAgcm91dGluZSB0aGUgY2xlYW51cF9vcAorCQkgKiBmb3IgdGhlIHBjYXBfdC4KKwkJICoKKwkJICogVGhhdCBtZWFucyB0aGF0LCBhZnRlciBwY2FwX2Nsb3NlKCkgLSB3aGljaCBjYWxscworCQkgKiB0aGUgY2xlYW51cF9vcCBmb3IgdGhlIHBjYXBfdCAtIHRoZSBwY2FwX3QgbXVzdAorCQkgKiBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LCBzbyBwY2Fwc190b19jbG9zZQorCQkgKiBtdXN0IG5vdCBiZSBlcXVhbCB0byBoYW5kbGUuCisJCSAqCisJCSAqIFdlIGNoZWNrIGZvciB0aGF0LCBhbmQgYWJvcnQgaWYgaGFuZGxlIGlzIHN0aWxsCisJCSAqIGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0LCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLgorCQkgKi8KKwkJaWYgKHBjYXBzX3RvX2Nsb3NlID09IGhhbmRsZSkKKwkJCWFib3J0KCk7CisJfQogfQogCiBpbnQKQEAgLTM1NjEsNyArMzkzNCw3IEBACiAJCQkvKgogCQkJICogImF0ZXhpdCgpIiBmYWlsZWQ7IGxldCBvdXIgY2FsbGVyIGtub3cuCiAJCQkgKi8KLQkJCXN0cmxjcHkocC0+ZXJyYnVmLCAiYXRleGl0IGZhaWxlZCIsIFBDQVBfRVJSQlVGX1NJWkUpOworCQkJcGNhcF9zdHJsY3B5KHAtPmVycmJ1ZiwgImF0ZXhpdCBmYWlsZWQiLCBQQ0FQX0VSUkJVRl9TSVpFKTsKIAkJCXJldHVybiAoMCk7CiAJCX0KIAkJZGlkX2F0ZXhpdCA9IDE7CkBAIC0zNjA0LDYgKzM5NzcsMTMgQEAKIH0KIAogdm9pZAorcGNhcF9icmVha2xvb3BfY29tbW9uKHBjYXBfdCAqcCkKK3sKKwlwLT5icmVha19sb29wID0gMTsKK30KKworCit2b2lkCiBwY2FwX2NsZWFudXBfbGl2ZV9jb21tb24ocGNhcF90ICpwKQogewogCWlmIChwLT5idWZmZXIgIT0gTlVMTCkgewpAQCAtMzY0NCw2ICs0MDI0LDEyIEBACiBpbnQKIHBjYXBfc2VuZHBhY2tldChwY2FwX3QgKnAsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgc2l6ZSkKIHsKKwlpZiAoc2l6ZSA8PSAwKSB7CisJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8ocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkgICAgZXJybm8sICJUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHNlbnQgbXVzdCBiZSBwb3NpdGl2ZSIpOworCQlyZXR1cm4gKFBDQVBfRVJST1IpOworCX0KKwogCWlmIChwLT5pbmplY3Rfb3AocCwgYnVmLCBzaXplKSA9PSAtMSkKIAkJcmV0dXJuICgtMSk7CiAJcmV0dXJuICgwKTsKQEAgLTM2NTYsNyArNDA0MiwyMyBAQAogaW50CiBwY2FwX2luamVjdChwY2FwX3QgKnAsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7Ci0JcmV0dXJuIChwLT5pbmplY3Rfb3AocCwgYnVmLCBzaXplKSk7CisJLyoKKwkgKiBXZSByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLCBzbyB0aGUgbnVtYmVyIG9mCisJICogYnl0ZXMgdG8gd3JpdGUgbXVzdCBmaXQgaW4gYW4gaW50LgorCSAqLworCWlmIChzaXplID4gSU5UX01BWCkgeworCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJICAgIGVycm5vLCAiTW9yZSB0aGFuICVkIGJ5dGVzIGNhbm5vdCBiZSBpbmplY3RlZCIsIElOVF9NQVgpOworCQlyZXR1cm4gKFBDQVBfRVJST1IpOworCX0KKworCWlmIChzaXplID09IDApIHsKKwkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICBlcnJubywgIlRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgaW5qZWN0ZWQgbXVzdCBub3QgYmUgemVybyIpOworCQlyZXR1cm4gKFBDQVBfRVJST1IpOworCX0KKworCXJldHVybiAocC0+aW5qZWN0X29wKHAsIGJ1ZiwgKGludClzaXplKSk7CiB9CiAKIHZvaWQKQEAgLTM2NjksNiArNDA3MSw4MSBAQAogfQogCiAvKgorICogSGVscGVycyBmb3Igc2FmZWx5IGxvZGluZyBjb2RlIGF0IHJ1biB0aW1lLgorICogQ3VycmVudGx5IFdpbmRvd3Mtb25seS4KKyAqLworI2lmZGVmIF9XSU4zMgorLy8KKy8vIFRoaXMgd3JhcHBlciBhcm91bmQgbG9hZGxpYnJhcnkgYXBwZW5kcyB0aGUgc3lzdGVtIGZvbGRlciAodXN1YWxseQorLy8gQzpcV2luZG93c1xTeXN0ZW0zMikgdG8gdGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIERMTCwgc28gdGhhdCB0aGUgRExMCisvLyBpcyBhbHdheXMgbG9hZGVkIGZyb20gYW4gYWJzb2x1dGUgcGF0aCAoaXQncyBubyBsb25nZXIgcG9zc2libGUgdG8KKy8vIGxvYWQgbW9kdWxlcyBmcm9tIHRoZSBhcHBsaWNhdGlvbiBmb2xkZXIpLgorLy8gVGhpcyBzb2x2ZXMgdGhlIERMTCBIaWphY2tpbmcgaXNzdWUgZGlzY292ZXJlZCBpbiBBdWd1c3QgMjAxMDoKKy8vCisvLyBodHRwczovL2Jsb2cucmFwaWQ3LmNvbS8yMDEwLzA4LzIzL2V4cGxvaXRpbmctZGxsLWhpamFja2luZy1mbGF3cy8KKy8vIGh0dHBzOi8vYmxvZy5yYXBpZDcuY29tLzIwMTAvMDgvMjMvYXBwbGljYXRpb24tZGxsLWxvYWQtaGlqYWNraW5nLworLy8gKHRoZSBwdXJwb3J0ZWQgUmFwaWQ3IGJsb2cgcG9zdCBsaW5rIGluIHRoZSBmaXJzdCBvZiB0aG9zZSB0d28gbGlua3MKKy8vIGlzIGJyb2tlbjsgdGhlIHNlY29uZCBvZiB0aG9zZSBsaW5rcyB3b3Jrcy4pCisvLworLy8gSWYgYW55IGxpbmtzIHRoZXJlIGFyZSBicm9rZW4gZnJvbSBhbGwgdGhlIGNvbnRlbnQgc2h1ZmZsaW5nIFJhcGlkJgorLy8gZGlkLCBzZWUgYXJjaGl2ZWQgdmVyc2lvbnMgb2YgdGhlIHBvc3RzIGF0IHRoZWlyIG9yaWdpbmFsIGhvbWVzLCBhdAorLy8KKy8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDExMDEyMjE3NTA1OC9odHRwOi8vYmxvZy5tZXRhc3Bsb2l0LmNvbS8yMDEwLzA4L2V4cGxvaXRpbmctZGxsLWhpamFja2luZy1mbGF3cy5odG1sCisvLyBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMDA4MjgxMTIxMTEvaHR0cDovL2Jsb2cucmFwaWQ3LmNvbS8/cD01MzI1CisvLworcGNhcF9jb2RlX2hhbmRsZV90CitwY2FwX2xvYWRfY29kZShjb25zdCBjaGFyICpuYW1lKQoreworCS8qCisJICogWFhYIC0gc2hvdWxkIHRoaXMgd29yayBpbiBVVEYtMTZMRSByYXRoZXIgdGhhbiBpbiB0aGUgbG9jYWwKKwkgKiBBTlNJIGNvZGUgcGFnZT8KKwkgKi8KKwlDSEFSIHBhdGhbTUFYX1BBVEhdOworCUNIQVIgZnVsbEZpbGVOYW1lW01BWF9QQVRIXTsKKwlVSU5UIHJlczsKKwlITU9EVUxFIGhNb2R1bGUgPSBOVUxMOworCisJZG8KKwl7CisJCXJlcyA9IEdldFN5c3RlbURpcmVjdG9yeUEocGF0aCwgTUFYX1BBVEgpOworCisJCWlmIChyZXMgPT0gMCkgeworCQkJLy8KKwkJCS8vIHNvbWUgYmFkIGZhaWx1cmUgb2NjdXJyZWQ7CisJCQkvLworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocmVzID4gTUFYX1BBVEgpIHsKKwkJCS8vCisJCQkvLyB0aGUgYnVmZmVyIHdhcyBub3QgYmlnIGVub3VnaAorCQkJLy8KKwkJCVNldExhc3RFcnJvcihFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJlcyArIDEgKyBzdHJsZW4obmFtZSkgKyAxIDwgTUFYX1BBVEgpIHsKKwkJCW1lbWNweShmdWxsRmlsZU5hbWUsIHBhdGgsIHJlcyAqIHNpemVvZihUQ0hBUikpOworCQkJZnVsbEZpbGVOYW1lW3Jlc10gPSAnXFwnOworCQkJbWVtY3B5KCZmdWxsRmlsZU5hbWVbcmVzICsgMV0sIG5hbWUsIChzdHJsZW4obmFtZSkgKyAxKSAqIHNpemVvZihUQ0hBUikpOworCisJCQloTW9kdWxlID0gTG9hZExpYnJhcnlBKGZ1bGxGaWxlTmFtZSk7CisJCX0gZWxzZQorCQkJU2V0TGFzdEVycm9yKEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVIpOworCisJfSB3aGlsZShGQUxTRSk7CisKKwlyZXR1cm4gaE1vZHVsZTsKK30KKworcGNhcF9mdW5jcHRyX3QKK3BjYXBfZmluZF9mdW5jdGlvbihwY2FwX2NvZGVfaGFuZGxlX3QgY29kZSwgY29uc3QgY2hhciAqZnVuYykKK3sKKwlyZXR1cm4gKEdldFByb2NBZGRyZXNzKGNvZGUsIGZ1bmMpKTsKK30KKyNlbmRpZgorCisvKgogICogR2l2ZW4gYSBCUEYgcHJvZ3JhbSwgYSBwY2FwX3BrdGhkciBzdHJ1Y3R1cmUgZm9yIGEgcGFja2V0LCBhbmQgdGhlIHJhdwogICogZGF0YSBmb3IgdGhlIHBhY2tldCwgY2hlY2sgd2hldGhlciB0aGUgcGFja2V0IHBhc3NlcyB0aGUgZmlsdGVyLgogICogUmV0dXJucyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmaWx0ZXIgcHJvZ3JhbSwgd2hpY2ggd2lsbCBiZSB6ZXJvIGlmCkBAIC0zNjgxLDcgKzQxNTgsNyBAQAogCWNvbnN0IHN0cnVjdCBicGZfaW5zbiAqZmNvZGUgPSBmcC0+YmZfaW5zbnM7CiAKIAlpZiAoZmNvZGUgIT0gTlVMTCkKLQkJcmV0dXJuIChicGZfZmlsdGVyKGZjb2RlLCBwa3QsIGgtPmxlbiwgaC0+Y2FwbGVuKSk7CisJCXJldHVybiAocGNhcF9maWx0ZXIoZmNvZGUsIHBrdCwgaC0+bGVuLCBoLT5jYXBsZW4pKTsKIAllbHNlCiAJCXJldHVybiAoMCk7CiB9CkBAIC0zNjg5LDcgKzQxNjYsNyBAQAogc3RhdGljIGludAogcGNhcF9jYW5fc2V0X3JmbW9uX2RlYWQocGNhcF90ICpwKQogewotCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkgICAgIlJmbW9uIG1vZGUgZG9lc24ndCBhcHBseSBvbiBhIHBjYXBfb3Blbl9kZWFkIHBjYXBfdCIpOwogCXJldHVybiAoUENBUF9FUlJPUik7CiB9CkBAIC0zNjk4LDE1ICs0MTc1LDE1IEBACiBwY2FwX3JlYWRfZGVhZChwY2FwX3QgKnAsIGludCBjbnQgX1VfLCBwY2FwX2hhbmRsZXIgY2FsbGJhY2sgX1VfLAogICAgIHVfY2hhciAqdXNlciBfVV8pCiB7Ci0JcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCSAgICAiUGFja2V0cyBhcmVuJ3QgYXZhaWxhYmxlIGZyb20gYSBwY2FwX29wZW5fZGVhZCBwY2FwX3QiKTsKIAlyZXR1cm4gKC0xKTsKIH0KIAogc3RhdGljIGludAotcGNhcF9pbmplY3RfZGVhZChwY2FwX3QgKnAsIGNvbnN0IHZvaWQgKmJ1ZiBfVV8sIHNpemVfdCBzaXplIF9VXykKK3BjYXBfaW5qZWN0X2RlYWQocGNhcF90ICpwLCBjb25zdCB2b2lkICpidWYgX1VfLCBpbnQgc2l6ZSBfVV8pCiB7Ci0JcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCSAgICAiUGFja2V0cyBjYW4ndCBiZSBzZW50IG9uIGEgcGNhcF9vcGVuX2RlYWQgcGNhcF90Iik7CiAJcmV0dXJuICgtMSk7CiB9CkBAIC0zNzE0LDcgKzQxOTEsNyBAQAogc3RhdGljIGludAogcGNhcF9zZXRmaWx0ZXJfZGVhZChwY2FwX3QgKnAsIHN0cnVjdCBicGZfcHJvZ3JhbSAqZnAgX1VfKQogewotCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkgICAgIkEgZmlsdGVyIGNhbm5vdCBiZSBzZXQgb24gYSBwY2FwX29wZW5fZGVhZCBwY2FwX3QiKTsKIAlyZXR1cm4gKC0xKTsKIH0KQEAgLTM3MjIsNyArNDE5OSw3IEBACiBzdGF0aWMgaW50CiBwY2FwX3NldGRpcmVjdGlvbl9kZWFkKHBjYXBfdCAqcCwgcGNhcF9kaXJlY3Rpb25fdCBkIF9VXykKIHsKLQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJICAgICJUaGUgcGFja2V0IGRpcmVjdGlvbiBjYW5ub3QgYmUgc2V0IG9uIGEgcGNhcF9vcGVuX2RlYWQgcGNhcF90Iik7CiAJcmV0dXJuICgtMSk7CiB9CkBAIC0zNzMwLDcgKzQyMDcsNyBAQAogc3RhdGljIGludAogcGNhcF9zZXRfZGF0YWxpbmtfZGVhZChwY2FwX3QgKnAsIGludCBkbHQgX1VfKQogewotCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkgICAgIlRoZSBsaW5rLWxheWVyIGhlYWRlciB0eXBlIGNhbm5vdCBiZSBzZXQgb24gYSBwY2FwX29wZW5fZGVhZCBwY2FwX3QiKTsKIAlyZXR1cm4gKC0xKTsKIH0KQEAgLTM3MzgsNyArNDIxNSw3IEBACiBzdGF0aWMgaW50CiBwY2FwX2dldG5vbmJsb2NrX2RlYWQocGNhcF90ICpwKQogewotCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkgICAgIkEgcGNhcF9vcGVuX2RlYWQgcGNhcF90IGRvZXMgbm90IGhhdmUgYSBub24tYmxvY2tpbmcgbW9kZSBzZXR0aW5nIik7CiAJcmV0dXJuICgtMSk7CiB9CkBAIC0zNzQ2LDcgKzQyMjMsNyBAQAogc3RhdGljIGludAogcGNhcF9zZXRub25ibG9ja19kZWFkKHBjYXBfdCAqcCwgaW50IG5vbmJsb2NrIF9VXykKIHsKLQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJICAgICJBIHBjYXBfb3Blbl9kZWFkIHBjYXBfdCBkb2VzIG5vdCBoYXZlIGEgbm9uLWJsb2NraW5nIG1vZGUgc2V0dGluZyIpOwogCXJldHVybiAoLTEpOwogfQpAQCAtMzc1NCw0MCArNDIzMSw0MCBAQAogc3RhdGljIGludAogcGNhcF9zdGF0c19kZWFkKHBjYXBfdCAqcCwgc3RydWN0IHBjYXBfc3RhdCAqcHMgX1VfKQogewotCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkgICAgIlN0YXRpc3RpY3MgYXJlbid0IGF2YWlsYWJsZSBmcm9tIGEgcGNhcF9vcGVuX2RlYWQgcGNhcF90Iik7CiAJcmV0dXJuICgtMSk7CiB9CiAKICNpZmRlZiBfV0lOMzIKLXN0cnVjdCBwY2FwX3N0YXQgKgorc3RhdGljIHN0cnVjdCBwY2FwX3N0YXQgKgogcGNhcF9zdGF0c19leF9kZWFkKHBjYXBfdCAqcCwgaW50ICpwY2FwX3N0YXRfc2l6ZSBfVV8pCiB7Ci0JcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCSAgICAiU3RhdGlzdGljcyBhcmVuJ3QgYXZhaWxhYmxlIGZyb20gYSBwY2FwX29wZW5fZGVhZCBwY2FwX3QiKTsKIAlyZXR1cm4gKE5VTEwpOwogfQogCiBzdGF0aWMgaW50Ci1wY2FwX3NldGJ1ZmZfZGVhZChwY2FwX3QgKnAsIGludCBkaW0pCitwY2FwX3NldGJ1ZmZfZGVhZChwY2FwX3QgKnAsIGludCBkaW0gX1VfKQogewotCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkgICAgIlRoZSBrZXJuZWwgYnVmZmVyIHNpemUgY2Fubm90IGJlIHNldCBvbiBhIHBjYXBfb3Blbl9kZWFkIHBjYXBfdCIpOwogCXJldHVybiAoLTEpOwogfQogCiBzdGF0aWMgaW50Ci1wY2FwX3NldG1vZGVfZGVhZChwY2FwX3QgKnAsIGludCBtb2RlKQorcGNhcF9zZXRtb2RlX2RlYWQocGNhcF90ICpwLCBpbnQgbW9kZSBfVV8pCiB7Ci0JcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCSAgICAiaW1wb3NzaWJsZSB0byBzZXQgbW9kZSBvbiBhIHBjYXBfb3Blbl9kZWFkIHBjYXBfdCIpOwogCXJldHVybiAoLTEpOwogfQogCiBzdGF0aWMgaW50Ci1wY2FwX3NldG1pbnRvY29weV9kZWFkKHBjYXBfdCAqcCwgaW50IHNpemUpCitwY2FwX3NldG1pbnRvY29weV9kZWFkKHBjYXBfdCAqcCwgaW50IHNpemUgX1VfKQogewotCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkgICAgIlRoZSBtaW50b2NvcHkgcGFyYW1ldGVyIGNhbm5vdCBiZSBzZXQgb24gYSBwY2FwX29wZW5fZGVhZCBwY2FwX3QiKTsKIAlyZXR1cm4gKC0xKTsKIH0KQEAgLTM3OTUsNyArNDI3Miw3IEBACiBzdGF0aWMgSEFORExFCiBwY2FwX2dldGV2ZW50X2RlYWQocGNhcF90ICpwKQogewotCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkgICAgIkEgcGNhcF9vcGVuX2RlYWQgcGNhcF90IGhhcyBubyBldmVudCBoYW5kbGUiKTsKIAlyZXR1cm4gKElOVkFMSURfSEFORExFX1ZBTFVFKTsKIH0KQEAgLTM4MDQsNyArNDI4MSw3IEBACiBwY2FwX29pZF9nZXRfcmVxdWVzdF9kZWFkKHBjYXBfdCAqcCwgYnBmX3VfaW50MzIgb2lkIF9VXywgdm9pZCAqZGF0YSBfVV8sCiAgICAgc2l6ZV90ICpsZW5wIF9VXykKIHsKLQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJICAgICJBbiBPSUQgZ2V0IHJlcXVlc3QgY2Fubm90IGJlIHBlcmZvcm1lZCBvbiBhIHBjYXBfb3Blbl9kZWFkIHBjYXBfdCIpOwogCXJldHVybiAoUENBUF9FUlJPUik7CiB9CkBAIC0zODEzLDQ1ICs0MjkwLDQ3IEBACiBwY2FwX29pZF9zZXRfcmVxdWVzdF9kZWFkKHBjYXBfdCAqcCwgYnBmX3VfaW50MzIgb2lkIF9VXywgY29uc3Qgdm9pZCAqZGF0YSBfVV8sCiAgICAgc2l6ZV90ICpsZW5wIF9VXykKIHsKLQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJICAgICJBbiBPSUQgc2V0IHJlcXVlc3QgY2Fubm90IGJlIHBlcmZvcm1lZCBvbiBhIHBjYXBfb3Blbl9kZWFkIHBjYXBfdCIpOwogCXJldHVybiAoUENBUF9FUlJPUik7CiB9CiAKIHN0YXRpYyB1X2ludAotcGNhcF9zZW5kcXVldWVfdHJhbnNtaXRfZGVhZChwY2FwX3QgKnAsIHBjYXBfc2VuZF9xdWV1ZSAqcXVldWUsIGludCBzeW5jKQorcGNhcF9zZW5kcXVldWVfdHJhbnNtaXRfZGVhZChwY2FwX3QgKnAsIHBjYXBfc2VuZF9xdWV1ZSAqcXVldWUgX1VfLAorICAgIGludCBzeW5jIF9VXykKIHsKLQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJICAgICJQYWNrZXRzIGNhbm5vdCBiZSB0cmFuc21pdHRlZCBvbiBhIHBjYXBfb3Blbl9kZWFkIHBjYXBfdCIpOwogCXJldHVybiAoMCk7CiB9CiAKIHN0YXRpYyBpbnQKLXBjYXBfc2V0dXNlcmJ1ZmZlcl9kZWFkKHBjYXBfdCAqcCwgaW50IHNpemUpCitwY2FwX3NldHVzZXJidWZmZXJfZGVhZChwY2FwX3QgKnAsIGludCBzaXplIF9VXykKIHsKLQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJICAgICJUaGUgdXNlciBidWZmZXIgY2Fubm90IGJlIHNldCBvbiBhIHBjYXBfb3Blbl9kZWFkIHBjYXBfdCIpOwogCXJldHVybiAoLTEpOwogfQogCiBzdGF0aWMgaW50Ci1wY2FwX2xpdmVfZHVtcF9kZWFkKHBjYXBfdCAqcCwgY2hhciAqZmlsZW5hbWUsIGludCBtYXhzaXplLCBpbnQgbWF4cGFja3MpCitwY2FwX2xpdmVfZHVtcF9kZWFkKHBjYXBfdCAqcCwgY2hhciAqZmlsZW5hbWUgX1VfLCBpbnQgbWF4c2l6ZSBfVV8sCisgICAgaW50IG1heHBhY2tzIF9VXykKIHsKLQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJICAgICJMaXZlIHBhY2tldCBkdW1waW5nIGNhbm5vdCBiZSBwZXJmb3JtZWQgb24gYSBwY2FwX29wZW5fZGVhZCBwY2FwX3QiKTsKIAlyZXR1cm4gKC0xKTsKIH0KIAogc3RhdGljIGludAotcGNhcF9saXZlX2R1bXBfZW5kZWRfZGVhZChwY2FwX3QgKnAsIGludCBzeW5jKQorcGNhcF9saXZlX2R1bXBfZW5kZWRfZGVhZChwY2FwX3QgKnAsIGludCBzeW5jIF9VXykKIHsKLQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJICAgICJMaXZlIHBhY2tldCBkdW1waW5nIGNhbm5vdCBiZSBwZXJmb3JtZWQgb24gYSBwY2FwX29wZW5fZGVhZCBwY2FwX3QiKTsKIAlyZXR1cm4gKC0xKTsKIH0KIAogc3RhdGljIFBBaXJwY2FwSGFuZGxlCi1wY2FwX2dldF9haXJwY2FwX2hhbmRsZV9kZWFkKHBjYXBfdCAqcCkKK3BjYXBfZ2V0X2FpcnBjYXBfaGFuZGxlX2RlYWQocGNhcF90ICpwIF9VXykKIHsKIAlyZXR1cm4gKE5VTEwpOwogfQpkaWZmIC0tZ2l0IGEvcGNhcC9icGYuaCBiL3BjYXAvYnBmLmgKaW5kZXggMWE5NTNhOS4uY2NiOTNjYyAxMDA2NDQKLS0tIGEvcGNhcC9icGYuaAorKysgYi9wY2FwL2JwZi5oCkBAIC01OCwxMCArNTgsMjEgQEAKICAqIEkgZG9uJ3QgaGF2ZSBlYXJsaWVyIHZlcnNpb25zIGF2YWlsYWJsZSB0byBjaGVjayksIG9yIFFOWC1zdHlsZQogICogbXVsdGlwbGUtaW5jbHVkZSBwcm90ZWN0aW9uIChhcyBwZXIgR2l0SHViIHB1bGwgcmVxdWVzdCAjMzk0KS4KICAqCisgKiBXZSB0cnVzdCB0aGF0IHRoZXkgd2lsbCBkZWZpbmUgc3RydWN0dXJlcyBhbmQgbWFjcm9zIGFuZCB0eXBlcyBpbgorICogYSBmYXNoaW9uIHRoYXQncyBzb3VyY2UtY29tcGF0aWJsZSBhbmQgYmluYXJ5LWNvbXBhdGlibGUgd2l0aCBvdXIKKyAqIGRlZmluaXRpb25zLgorICoKICAqIFdlIGRvIG5vdCBjaGVjayBmb3IgQlBGX01BSk9SX1ZFUlNJT04sIGFzIHRoYXQncyBkZWZpbmVkIGJ5CiAgKiA8bGludXgvZmlsdGVyLmg+LCB3aGljaCBpcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluY2x1ZGVkIGluIHNvbWUKICAqIHByb2dyYW1zIHRoYXQgYWxzbyBpbmNsdWRlIHBjYXAuaCwgYW5kIDxsaW51eC9maWx0ZXIuaD4gZG9lc24ndAotICogZGVmaW5lIHN0dWZmIHdlIG5lZWQuCisgKiBkZWZpbmUgc3R1ZmYgd2UgbmVlZC4gIFdlICpkbyogcHJvdGVjdCBhZ2FpbnN0IDxsaW51eC9maWx0ZXIuaD4KKyAqIGRlZmluaW5nIHZhcmlvdXMgbWFjcm9zIGZvciBCUEYgY29kZSBpdHNlbGY7IDxsaW51eC9maWx0ZXIuaD4gc2F5cworICoKKyAqCVRyeSBhbmQga2VlcCB0aGVzZSB2YWx1ZXMgYW5kIHN0cnVjdHVyZXMgc2ltaWxhciB0byBCU0QsIGVzcGVjaWFsbHkKKyAqCXRoZSBCUEYgY29kZSBkZWZpbml0aW9ucyB3aGljaCBuZWVkIHRvIG1hdGNoIHNvIHlvdSBjYW4gc2hhcmUgZmlsdGVycworICoKKyAqIHNvIHdlIHRydXN0IHRoYXQgaXQgd2lsbCBkZWZpbmUgdGhlbSBpbiBhIGZhc2hpb24gdGhhdCdzIHNvdXJjZS1jb21wYXRpYmxlCisgKiBhbmQgYmluYXJ5LWNvbXBhdGlibGUgd2l0aCBvdXIgZGVmaW5pdGlvbnMuCiAgKgogICogVGhpcyBhbHNvIHByb3ZpZGVzIG91ciBvd24gbXVsdGlwbGUtaW5jbHVkZSBwcm90ZWN0aW9uLgogICovCkBAIC0xMDgsNiArMTE5LDggQEAKIAogI2luY2x1ZGUgPHBjYXAvZGx0Lmg+CiAKKyNpZm5kZWYgX19MSU5VWF9GSUxURVJfSF9fCisKIC8qCiAgKiBUaGUgaW5zdHJ1Y3Rpb24gZW5jb2RpbmdzLgogICoKQEAgLTIyOCw2ICsyNDEsOCBAQAogLyoJCQkJMHhmMAlyZXNlcnZlZCAqLwogLyoJCQkJMHhmOAlyZXNlcnZlZCAqLwogCisjZW5kaWYgLyogX19MSU5VWF9GSUxURVJfSF9fICovCisKIC8qCiAgKiBUaGUgaW5zdHJ1Y3Rpb24gZGF0YSBzdHJ1Y3R1cmUuCiAgKi8KQEAgLTIzOCwxNSArMjUzLDcgQEAKIAlicGZfdV9pbnQzMiBrOwogfTsKIAotLyoKLSAqIEF1eGlsaWFyeSBkYXRhLCBmb3IgdXNlIHdoZW4gaW50ZXJwcmV0aW5nIGEgZmlsdGVyIGludGVuZGVkIGZvciB0aGUKLSAqIExpbnV4IGtlcm5lbCB3aGVuIHRoZSBrZXJuZWwgcmVqZWN0cyB0aGUgZmlsdGVyIChyZXF1aXJpbmcgdXMgdG8KLSAqIHJ1biBpdCBpbiB1c2VybGFuZCkuICBJdCBjb250YWlucyBWTEFOIHRhZyBpbmZvcm1hdGlvbi4KLSAqLwotc3RydWN0IGJwZl9hdXhfZGF0YSB7Ci0JdV9zaG9ydCB2bGFuX3RhZ19wcmVzZW50OwotCXVfc2hvcnQgdmxhbl90YWc7Ci19OworI2lmbmRlZiBfX0xJTlVYX0ZJTFRFUl9IX18KIAogLyoKICAqIE1hY3JvcyBmb3IgaW5zbiBhcnJheSBpbml0aWFsaXplcnMuCkBAIC0yNTQsOSArMjYxLDE5IEBACiAjZGVmaW5lIEJQRl9TVE1UKGNvZGUsIGspIHsgKHVfc2hvcnQpKGNvZGUpLCAwLCAwLCBrIH0KICNkZWZpbmUgQlBGX0pVTVAoY29kZSwgaywganQsIGpmKSB7ICh1X3Nob3J0KShjb2RlKSwganQsIGpmLCBrIH0KIAotUENBUF9BUEkgaW50IGJwZl92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKiwgaW50KTsKLVBDQVBfQVBJIHVfaW50IGJwZl9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgdV9pbnQpOwotZXh0ZXJuIHVfaW50IGJwZl9maWx0ZXJfd2l0aF9hdXhfZGF0YShjb25zdCBzdHJ1Y3QgYnBmX2luc24gKiwgY29uc3QgdV9jaGFyICosIHVfaW50LCB1X2ludCwgY29uc3Qgc3RydWN0IGJwZl9hdXhfZGF0YSAqKTsKKyNlbmRpZiAvKiBfX0xJTlVYX0ZJTFRFUl9IX18gKi8KKworUENBUF9BVkFJTEFCTEVfMF80CitQQ0FQX0FQSSB1X2ludAlicGZfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIHVfaW50KTsKKworUENBUF9BVkFJTEFCTEVfMF82CitQQ0FQX0FQSSBpbnQJYnBmX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqZiwgaW50IGxlbik7CisKK1BDQVBfQVZBSUxBQkxFXzBfNAorUENBUF9BUEkgY2hhcgkqYnBmX2ltYWdlKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqLCBpbnQpOworCitQQ0FQX0FWQUlMQUJMRV8wXzYKK1BDQVBfQVBJIHZvaWQJYnBmX2R1bXAoY29uc3Qgc3RydWN0IGJwZl9wcm9ncmFtICosIGludCk7CiAKIC8qCiAgKiBOdW1iZXIgb2Ygc2NyYXRjaCBtZW1vcnkgd29yZHMgKGZvciBCUEZfTER8QlBGX01FTSBhbmQgQlBGX1NUKS4KZGlmZiAtLWdpdCBhL3BjYXAvY29tcGlsZXItdGVzdHMuaCBiL3BjYXAvY29tcGlsZXItdGVzdHMuaAppbmRleCA1ZTE3ODUzLi5hNjljMmIwIDEwMDY0NAotLS0gYS9wY2FwL2NvbXBpbGVyLXRlc3RzLmgKKysrIGIvcGNhcC9jb21waWxlci10ZXN0cy5oCkBAIC0zOCw3ICszOCw3IEBACiAvKgogICogVGhpcyB3YXMgaW50cm9kdWNlZCBieSBDbGFuZzoKICAqCi0gKiAgICAgaHR0cDovL2NsYW5nLmxsdm0ub3JnL2RvY3MvTGFuZ3VhZ2VFeHRlbnNpb25zLmh0bWwjaGFzLWF0dHJpYnV0ZQorICogICAgIGh0dHBzOi8vY2xhbmcubGx2bS5vcmcvZG9jcy9MYW5ndWFnZUV4dGVuc2lvbnMuaHRtbCNoYXMtYXR0cmlidXRlCiAgKgogICogaW4gc29tZSB2ZXJzaW9uICh3aGljaCB2ZXJzaW9uPyk7IGl0IGhhcyBiZWVuIHBpY2tlZCB1cCBieSBHQ0MgNS4wLgogICovCkBAIC0xNjAsNCArMTYwLDQgQEAKIAkoX19IUF9hQ0MgPj0gKChtYWpvcikqMTAwMDAgKyAobWlub3IpKjEwMCkpCiAjZW5kaWYKIAotI2VuZGlmIC8qIGxpYl9wY2FwX2Z1bmNhdHRyc19oICovCisjZW5kaWYgLyogbGliX3BjYXBfY29tcGlsZXJfdGVzdHNfaCAqLwpkaWZmIC0tZ2l0IGEvcGNhcC9kbHQuaCBiL3BjYXAvZGx0LmgKaW5kZXggNTM1ZmQ1MC4uZWFiYTM0ZiAxMDA2NDQKLS0tIGEvcGNhcC9kbHQuaAorKysgYi9wY2FwL2RsdC5oCkBAIC0xMzYsNyArMTM2LDcgQEAKICNkZWZpbmUgRExUX1BGU1lOQwkxOAogI2VuZGlmCiAKLSNkZWZpbmUgRExUX0FUTV9DTElQCTE5CS8qIExpbnV4IENsYXNzaWNhbC1JUCBvdmVyIEFUTSAqLworI2RlZmluZSBETFRfQVRNX0NMSVAJMTkJLyogTGludXggQ2xhc3NpY2FsIElQIG92ZXIgQVRNICovCiAKIC8qCiAgKiBBcHBhcmVudGx5IFJlZGJhY2sgdXNlcyB0aGlzIGZvciBpdHMgU21hcnRFZGdlIDQwMC84MDAuICBJIGhvcGUKQEAgLTI0Niw3ICsyNDYsNyBAQAogICovCiAKIC8qCi0gKiBUaGlzIGlzIGZvciBMaW51eCBjb29rZWQgc29ja2V0cy4KKyAqIExpbnV4IGNvb2tlZCBzb2NrZXRzLgogICovCiAjZGVmaW5lIERMVF9MSU5VWF9TTEwJMTEzCiAKQEAgLTQ2NSw3ICs0NjUsNyBAQAogI2RlZmluZSBETFRfRE9DU0lTCQkxNDMKIAogLyoKLSAqIExpbnV4LUlyREEgcGFja2V0cy4gUHJvdG9jb2wgZGVmaW5lZCBhdCBodHRwOi8vd3d3LmlyZGEub3JnLgorICogTGludXgtSXJEQSBwYWNrZXRzLiBQcm90b2NvbCBkZWZpbmVkIGF0IGh0dHBzOi8vd3d3LmlyZGEub3JnLgogICogVGhvc2UgcGFja2V0cyBpbmNsdWRlIElyTEFQIGhlYWRlcnMgYW5kIGFib3ZlIChJckxNUC4uLiksIGJ1dAogICogZG9uJ3QgaW5jbHVkZSBQaHkgZnJhbWluZyAoU09GL0VPRi9DUkMgJiBieXRlIHN0dWZmaW5nKSwgYmVjYXVzZSBQaHkKICAqIGZyYW1pbmcgY2FuIGJlIGhhbmRsZWQgYnkgdGhlIGhhcmR3YXJlIGFuZCBkZXBlbmQgb24gdGhlIGJpdHJhdGUuCkBAIC00NzMsNyArNDczLDcgQEAKICAqIGludGVyZmFjZSAoaXJkYVgpLCBidXQgbm90IG9uIGEgcmF3IHNlcmlhbCBwb3J0LgogICogTm90ZSB0aGUgY2FwdHVyZSBpcyBkb25lIGluICJMaW51eC1jb29rZWQiIG1vZGUsIHNvIGVhY2ggcGFja2V0IGluY2x1ZGUKICAqIGEgZmFrZSBwYWNrZXQgaGVhZGVyIChzdHJ1Y3Qgc2xsX2hlYWRlcikuIFRoaXMgaXMgYmVjYXVzZSBJckRBIHBhY2tldAotICogZGVjb2RpbmcgaXMgZGVwZW5kYW50IG9uIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHBhY2tldCAoaW5jb21taW5nIG9yCisgKiBkZWNvZGluZyBpcyBkZXBlbmRlbnQgb24gdGhlIGRpcmVjdGlvbiBvZiB0aGUgcGFja2V0IChpbmNvbWluZyBvcgogICogb3V0Z29pbmcpLgogICogV2hlbi9pZiBvdGhlciBwbGF0Zm9ybSBpbXBsZW1lbnQgSXJEQSBjYXB0dXJlLCB3ZSBtYXkgcmV2aXNpdCB0aGUKICAqIGlzc3VlIGFuZCBkZWZpbmUgYSByZWFsIERMVF9JUkRBLi4uCkBAIC01NjUsNyArNTY1LDcgQEAKICAqIGlucHV0IHBhY2tldHMgc3VjaCBhcyBwb3J0IHNjYW5zLCBwYWNrZXRzIGZyb20gb2xkIGxvc3QgY29ubmVjdGlvbnMsCiAgKiBldGMuIHRvIGZvcmNlIHRoZSBjb25uZWN0aW9uIHRvIHN0YXkgdXApLgogICoKLSAqIFRoZSBmaXJzdCBieXRlIG9mIHRoZSBQUFAgaGVhZGVyICgweGZmMDMpIGlzIG1vZGlmaWVkIHRvIGFjY29tb2RhdGUKKyAqIFRoZSBmaXJzdCBieXRlIG9mIHRoZSBQUFAgaGVhZGVyICgweGZmMDMpIGlzIG1vZGlmaWVkIHRvIGFjY29tbW9kYXRlCiAgKiB0aGUgZGlyZWN0aW9uIC0gMHgwMCA9IElOLCAweDAxID0gT1VULgogICovCiAjZGVmaW5lIERMVF9QUFBfUFBQRAkJMTY2CkBAIC02MDcsNyArNjA3LDcgQEAKIC8qCiAgKiBMaW5rIHR5cGVzIHJlcXVlc3RlZCBieSBHcmVnb3IgTWFpZXIgPGdyZWdvckBlbmRhY2UuY29tPiBvZiBFbmRhY2UKICAqIE1lYXN1cmVtZW50IFN5c3RlbXMuICBUaGV5IGFkZCBhbiBFUkYgaGVhZGVyIChzZWUKLSAqIGh0dHA6Ly93d3cuZW5kYWNlLmNvbS9zdXBwb3J0L0VuZGFjZVJlY29yZEZvcm1hdC5wZGYpIGluIGZyb250IG9mCisgKiBodHRwczovL3d3dy5lbmRhY2UuY29tL3N1cHBvcnQvRW5kYWNlUmVjb3JkRm9ybWF0LnBkZikgaW4gZnJvbnQgb2YKICAqIHRoZSBsaW5rLWxheWVyIGhlYWRlci4KICAqLwogI2RlZmluZSBETFRfRVJGX0VUSAkJMTc1CS8qIEV0aGVybmV0ICovCkBAIC03NTAsNyArNzUwLDcgQEAKIAogLyoKICAqIFZhcmlvdXMgbGluay1sYXllciB0eXBlcywgd2l0aCBhIHBzZXVkby1oZWFkZXIsIGZvciBTSVRBCi0gKiAoaHR0cDovL3d3dy5zaXRhLmFlcm8vKTsgcmVxdWVzdGVkIGJ5IEZ1bGtvIEhldyAoZnVsa28uaGV3QGdtYWlsLmNvbSkuCisgKiAoaHR0cHM6Ly93d3cuc2l0YS5hZXJvLyk7IHJlcXVlc3RlZCBieSBGdWxrbyBIZXcgKGZ1bGtvLmhld0BnbWFpbC5jb20pLgogICovCiAjZGVmaW5lIERMVF9TSVRBCQkxOTYKIApAQCAtNzY5LDExICs3NjksMjAgQEAKICNkZWZpbmUgRExUX1JBSUYxCQkxOTgKIAogLyoKLSAqIElQTUIgcGFja2V0IGZvciBJUE1JLCBiZWdpbm5pbmcgd2l0aCB0aGUgSTJDIHNsYXZlIGFkZHJlc3MsIGZvbGxvd2VkCi0gKiBieSB0aGUgbmV0Rm4gYW5kIExVTiwgZXRjLi4gIFJlcXVlc3RlZCBieSBDaGFudGh5IFRvZXVuZwotICogPGNoYW50aHkudG9ldW5nQGNhLmtvbnRyb24uY29tPi4KKyAqIElQTUIgcGFja2V0IGZvciBJUE1JLCBiZWdpbm5pbmcgd2l0aCBhIDItYnl0ZSBoZWFkZXIsIGZvbGxvd2VkIGJ5CisgKiB0aGUgSTJDIHNsYXZlIGFkZHJlc3MsIGZvbGxvd2VkIGJ5IHRoZSBuZXRGbiBhbmQgTFVOLCBldGMuLgorICogUmVxdWVzdGVkIGJ5IENoYW50aHkgVG9ldW5nIDxjaGFudGh5LnRvZXVuZ0BjYS5rb250cm9uLmNvbT4uCisgKgorICogWFhYIC0gdGhpcyB1c2VkIHRvIGJlIGNhbGxlZCBETFRfSVBNQiwgYmFjayB3aGVuIHdlIGdvdCB0aGUKKyAqIGltcHJlc3Npb24gZnJvbSB0aGUgZW1haWwgdGhyZWFkIHJlcXVlc3RpbmcgaXQgdGhhdCB0aGUgcGFja2V0CisgKiBoYWQgbm8gZXh0cmEgMi1ieXRlIGhlYWRlci4gIFdlJ3ZlIHJlbmFtZWQgaXQ7IGlmIGFueWJvZHkgdXNlZAorICogRExUX0lQTUIgYW5kIGFzc3VtZWQgbm8gMi1ieXRlIGhlYWRlciwgdGhpcyB3aWxsIGNhdXNlIHRoZSBjb21waWxlCisgKiB0byBmYWlsLCBhdCB3aGljaCBwb2ludCB3ZSdsbCBoYXZlIHRvIGZpZ3VyZSBvdXQgd2hhdCB0byBkbyBhYm91dAorICogdGhlIHR3byBoZWFkZXIgdHlwZXMgdXNpbmcgdGhlIHNhbWUgRExUXy9MSU5LVFlQRV8gdmFsdWUuICBJZiB0aGF0CisgKiBkb2Vzbid0IGhhcHBlbiwgd2UnbGwgYXNzdW1lIG5vYm9keSB1c2VkIGl0IGFuZCB0aGF0IHRoZSByZWRlZmluaXRpb24KKyAqIGlzIHNhZmUuCiAgKi8KLSNkZWZpbmUgRExUX0lQTUIJCTE5OQorI2RlZmluZSBETFRfSVBNQl9LT05UUk9OCTE5OQogCiAvKgogICogSnVuaXBlci1wcml2YXRlIGRhdGEgbGluayB0eXBlLCBhcyBwZXIgcmVxdWVzdCBmcm9tCkBAIC04MDUsMTUgKzgxNCwzNyBAQAogI2RlZmluZSBETFRfTEFQRAkJMjAzCiAKIC8qCi0gKiBWYXJpYW50cyBvZiB2YXJpb3VzIGxpbmstbGF5ZXIgaGVhZGVycywgd2l0aCBhIG9uZS1ieXRlIGRpcmVjdGlvbgotICogcHNldWRvLWhlYWRlciBwcmVwZW5kZWQgLSB6ZXJvIG1lYW5zICJyZWNlaXZlZCBieSB0aGlzIGhvc3QiLAotICogbm9uLXplcm8gKGFueSBub24temVybyB2YWx1ZSkgbWVhbnMgInNlbnQgYnkgdGhpcyBob3N0IiAtIGFzIHBlcgotICogV2lsbCBCYXJrZXIgPHcuYmFya2VyQHplbi5jby51az4uCisgKiBQUFAsIHdpdGggYSBvbmUtYnl0ZSBkaXJlY3Rpb24gcHNldWRvLWhlYWRlciBwcmVwZW5kZWQgLSB6ZXJvIG1lYW5zCisgKiAicmVjZWl2ZWQgYnkgdGhpcyBob3N0Iiwgbm9uLXplcm8gKGFueSBub24temVybyB2YWx1ZSkgbWVhbnMgInNlbnQgYnkKKyAqIHRoaXMgaG9zdCIgLSBhcyBwZXIgV2lsbCBCYXJrZXIgPHcuYmFya2VyQHplbi5jby51az4uCisgKgorICogRG9uJ3QgY29uZnVzZSB0aGlzIHdpdGggRExUX1BQUF9XSVRIX0RJUkVDVElPTiwgd2hpY2ggaXMgYW4gb2xkCisgKiBuYW1lIGZvciB3aGF0IGlzIG5vdyBjYWxsZWQgRExUX1BQUF9QUFBELgogICovCi0jZGVmaW5lIERMVF9QUFBfV0lUSF9ESVIJMjA0CS8qIFBQUCAtIGRvbid0IGNvbmZ1c2Ugd2l0aCBETFRfUFBQX1dJVEhfRElSRUNUSU9OICovCi0jZGVmaW5lIERMVF9DX0hETENfV0lUSF9ESVIJMjA1CS8qIENpc2NvIEhETEMgKi8KLSNkZWZpbmUgRExUX0ZSRUxBWV9XSVRIX0RJUgkyMDYJLyogRnJhbWUgUmVsYXkgKi8KLSNkZWZpbmUgRExUX0xBUEJfV0lUSF9ESVIJMjA3CS8qIExBUEIgKi8KKyNkZWZpbmUgRExUX1BQUF9XSVRIX0RJUgkyMDQKKworLyoKKyAqIENpc2NvIEhETEMsIHdpdGggYSBvbmUtYnl0ZSBkaXJlY3Rpb24gcHNldWRvLWhlYWRlciBwcmVwZW5kZWQgLSB6ZXJvCisgKiBtZWFucyAicmVjZWl2ZWQgYnkgdGhpcyBob3N0Iiwgbm9uLXplcm8gKGFueSBub24temVybyB2YWx1ZSkgbWVhbnMKKyAqICJzZW50IGJ5IHRoaXMgaG9zdCIgLSBhcyBwZXIgV2lsbCBCYXJrZXIgPHcuYmFya2VyQHplbi5jby51az4uCisgKi8KKyNkZWZpbmUgRExUX0NfSERMQ19XSVRIX0RJUgkyMDUKKworLyoKKyAqIEZyYW1lIFJlbGF5LCB3aXRoIGEgb25lLWJ5dGUgZGlyZWN0aW9uIHBzZXVkby1oZWFkZXIgcHJlcGVuZGVkIC0gemVybworICogbWVhbnMgInJlY2VpdmVkIGJ5IHRoaXMgaG9zdCIgKERDRSAtPiBEVEUpLCBub24temVybyAoYW55IG5vbi16ZXJvCisgKiB2YWx1ZSkgbWVhbnMgInNlbnQgYnkgdGhpcyBob3N0IiAoRFRFIC0+IERDRSkgLSBhcyBwZXIgV2lsbCBCYXJrZXIKKyAqIDx3LmJhcmtlckB6ZW4uY28udWs+LgorICovCisjZGVmaW5lIERMVF9GUkVMQVlfV0lUSF9ESVIJMjA2CisKKy8qCisgKiBMQVBCLCB3aXRoIGEgb25lLWJ5dGUgZGlyZWN0aW9uIHBzZXVkby1oZWFkZXIgcHJlcGVuZGVkIC0gemVybyBtZWFucworICogInJlY2VpdmVkIGJ5IHRoaXMgaG9zdCIgKERDRSAtPiBEVEUpLCBub24temVybyAoYW55IG5vbi16ZXJvIHZhbHVlKQorICogbWVhbnMgInNlbnQgYnkgdGhpcyBob3N0IiAoRFRFIC0+IERDRSktIGFzIHBlciBXaWxsIEJhcmtlcgorICogPHcuYmFya2VyQHplbi5jby51az4uCisgKi8KKyNkZWZpbmUgRExUX0xBUEJfV0lUSF9ESVIJMjA3CiAKIC8qCiAgKiAyMDggaXMgcmVzZXJ2ZWQgZm9yIGFuIGFzLXlldC11bnNwZWNpZmllZCBwcm9wcmlldGFyeSBsaW5rLWxheWVyCkBAIC04MzQsNyArODY1LDcgQEAKIAogLyoKICAqIE1lZGlhIE9yaWVudGVkIFN5c3RlbXMgVHJhbnNwb3J0IChNT1NUKSBidXMgZm9yIG11bHRpbWVkaWEKLSAqIHRyYW5zcG9ydCAtIGh0dHA6Ly93d3cubW9zdGNvb3BlcmF0aW9uLmNvbS8gLSBhcyByZXF1ZXN0ZWQKKyAqIHRyYW5zcG9ydCAtIGh0dHBzOi8vd3d3Lm1vc3Rjb29wZXJhdGlvbi5jb20vIC0gYXMgcmVxdWVzdGVkCiAgKiBieSBIYW5uZXMgS2FlbGJlciA8aGFubmVzLmthZWxiZXJAeDJlLmRlPi4KICAqLwogI2RlZmluZSBETFRfTU9TVAkJMjExCkBAIC0xMDIwLDE2ICsxMDUxLDE2IEBACiAvKgogICogUmF3IEQtQnVzOgogICoKLSAqCWh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvZGJ1cworICoJaHR0cHM6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvZGJ1cwogICoKICAqIG1lc3NhZ2VzOgogICoKLSAqCWh0dHA6Ly9kYnVzLmZyZWVkZXNrdG9wLm9yZy9kb2MvZGJ1cy1zcGVjaWZpY2F0aW9uLmh0bWwjbWVzc2FnZS1wcm90b2NvbC1tZXNzYWdlcworICoJaHR0cHM6Ly9kYnVzLmZyZWVkZXNrdG9wLm9yZy9kb2MvZGJ1cy1zcGVjaWZpY2F0aW9uLmh0bWwjbWVzc2FnZS1wcm90b2NvbC1tZXNzYWdlcwogICoKICAqIHN0YXJ0aW5nIHdpdGggdGhlIGVuZGlhbm5lc3MgZmxhZywgZm9sbG93ZWQgYnkgdGhlIG1lc3NhZ2UgdHlwZSwgZXRjLiwKICAqIGJ1dCB3aXRob3V0IHRoZSBhdXRoZW50aWNhdGlvbiBoYW5kc2hha2UgYmVmb3JlIHRoZSBtZXNzYWdlIHNlcXVlbmNlOgogICoKLSAqCWh0dHA6Ly9kYnVzLmZyZWVkZXNrdG9wLm9yZy9kb2MvZGJ1cy1zcGVjaWZpY2F0aW9uLmh0bWwjYXV0aC1wcm90b2NvbAorICoJaHR0cHM6Ly9kYnVzLmZyZWVkZXNrdG9wLm9yZy9kb2MvZGJ1cy1zcGVjaWZpY2F0aW9uLmh0bWwjYXV0aC1wcm90b2NvbAogICoKICAqIFJlcXVlc3RlZCBieSBNYXJ0aW4gVmlkbmVyIDxtYXJ0aW5AdmlkbmVyLm5ldD4uCiAgKi8KQEAgLTEwNDcsNyArMTA3OCw3IEBACiAgKiBEVkItQ0kgKERWQiBDb21tb24gSW50ZXJmYWNlIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gYSBQQyBDYXJkCiAgKiBtb2R1bGUgYW5kIGEgRFZCIHJlY2VpdmVyKS4gIFNlZQogICoKLSAqCWh0dHA6Ly93d3cua2Fpc2VyLmN4L3BjYXAtZHZiY2kuaHRtbAorICoJaHR0cHM6Ly93d3cua2Fpc2VyLmN4L3BjYXAtZHZiY2kuaHRtbAogICoKICAqIGZvciB0aGUgc3BlY2lmaWNhdGlvbi4KICAqCkBAIC0xMzM2LDkgKzEzNjcsOSBAQAogCiAvKgogICogcGVyOiBTdGVmYW5oYSBhdCBnbWFpbC5jb20gZm9yCi0gKiAgIGh0dHA6Ly9saXN0cy5zYW5kZWxtYW4uY2EvcGlwZXJtYWlsL3RjcGR1bXAtd29ya2Vycy8yMDE3LU1heS8wMDA3NzIuaHRtbAorICogICBodHRwczovL2xpc3RzLnNhbmRlbG1hbi5jYS9waXBlcm1haWwvdGNwZHVtcC13b3JrZXJzLzIwMTctTWF5LzAwMDc3Mi5odG1sCiAgKiBhbmQ6IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LmdpdC90cmVlL2luY2x1ZGUvdWFwaS9saW51eC92c29ja21vbi5oCi0gKiBmb3I6IGh0dHA6Ly9xZW11LXByb2plY3Qub3JnL0ZlYXR1cmVzL1ZpcnRpb1Zzb2NrCisgKiBmb3I6IGh0dHBzOi8vcWVtdS1wcm9qZWN0Lm9yZy9GZWF0dXJlcy9WaXJ0aW9Wc29jawogICovCiAjZGVmaW5lIERMVF9WU09DSyAgICAgICAgICAgICAgIDI3MQogCkBAIC0xMzUwLDcgKzEzODEsNyBAQAogLyoKICAqIEV4Y2VudGlzIERPQ1NJUyAzLjEgUkYgc25pZmZlciAoWFJBLTMxKQogICogICBwZXI6IGJydW5vLnZlcnN0dXlmdCBhdCBleGNlbnRpcy5jb20KLSAqICAgICAgICBodHRwOi8vd3d3LnhyYTMxLmNvbS94cmEtaGVhZGVyCisgKiAgICAgICAgaHR0cHM6Ly93d3cueHJhMzEuY29tL3hyYS1oZWFkZXIKICAqLwogI2RlZmluZSBETFRfRE9DU0lTMzFfWFJBMzEJMjczCiAKQEAgLTEzNjIsMTIgKzEzOTMsOTQgQEAKIAogLyoKICAqIERpc3BsYXlQb3J0IEFVWCBjaGFubmVsIG1vbml0b3JpbmcgZGF0YSBhcyBzcGVjaWZpZWQgYnkgVkVTQQotICogRGlzcGxheVBvcnQoRFApIFN0YW5kYXJkIHByZWNlZWRlZCBieSBhIHBzZXVkby1oZWFkZXIuCisgKiBEaXNwbGF5UG9ydChEUCkgU3RhbmRhcmQgcHJlY2VkZWQgYnkgYSBwc2V1ZG8taGVhZGVyLgogICogICAgcGVyIGRpcmsuZWliYWNoIGF0IGdkc3lzLmNjCiAgKi8KICNkZWZpbmUgRExUX0RJU1BMQVlQT1JUX0FVWAkyNzUKIAogLyoKKyAqIExpbnV4IGNvb2tlZCBzb2NrZXRzIHYyLgorICovCisjZGVmaW5lIERMVF9MSU5VWF9TTEwyCTI3NgorCisvKgorICogU2VyY29zIE1vbml0b3IsIHBlciBNYW51ZWwgSmFjb2IgPG1hbnVlbC5qYWNvYiBhdCBzdGVpbmJlaXMtc3RnLmRlPgorICovCisjZGVmaW5lIERMVF9TRVJDT1NfTU9OSVRPUiAyNzcKKworLyoKKyAqIE9wZW5WaXpzbGEgaHR0cDovL29wZW52aXpzbGEub3JnIGlzIG9wZW4gc291cmNlIFVTQiBhbmFseXplciBoYXJkd2FyZS4KKyAqIEl0IGNvbnNpc3RzIG9mIEZQR0Egd2l0aCBhdHRhY2hlZCBVU0IgcGh5IGFuZCBGVERJIGNoaXAgZm9yIHN0cmVhbWluZworICogdGhlIGRhdGEgdG8gdGhlIGhvc3QgUEMuCisgKgorICogQ3VycmVudCBPcGVuVml6c2xhIGRhdGEgZW5jYXBzdWxhdGlvbiBmb3JtYXQgaXMgZGVzY3JpYmVkIGhlcmU6CisgKiBodHRwczovL2dpdGh1Yi5jb20vbWF0d2V5L2xpYm9wZW52aXpzbGEvd2lraS9PcGVuVml6c2xhLXByb3RvY29sLWRlc2NyaXB0aW9uCisgKgorICovCisjZGVmaW5lIERMVF9PUEVOVklaU0xBCSAgICAgICAgMjc4CisKKy8qCisgKiBUaGUgRWxla3Ryb2JpdCBIaWdoIFNwZWVkIENhcHR1cmUgYW5kIFJlcGxheSAoRUJIU0NSKSBwcm90b2NvbCBpcyBwcm9kdWNlZAorICogYnkgYSBQQ0llIENhcmQgZm9yIGludGVyZmFjaW5nIGhpZ2ggc3BlZWQgYXV0b21vdGl2ZSBpbnRlcmZhY2VzLgorICoKKyAqIFRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGlzIGZyYW1lIGZvcm1hdCBjYW4gYmUgZm91bmQgYXQ6CisgKiAgIGh0dHBzOi8vd3d3LmVsZWt0cm9iaXQuY29tL2ViaHNjcgorICoKKyAqIGZvciBHdWVudGVyLkViZXJtYW5uIGF0IGVsZWt0cm9iaXQuY29tCisgKgorICovCisjZGVmaW5lIERMVF9FQkhTQ1IJICAgICAgICAyNzkKKworLyoKKyAqIFRoZSBodHRwczovL2ZkLmlvIHZwcCBncmFwaCBkaXNwYXRjaCB0cmFjZXIgcHJvZHVjZXMgcGNhcCB0cmFjZSBmaWxlcworICogaW4gdGhlIGZvcm1hdCBkb2N1bWVudGVkIGhlcmU6CisgKiBodHRwczovL2ZkaW8tdnBwLnJlYWR0aGVkb2NzLmlvL2VuL2xhdGVzdC9nZXR0aW5nc3RhcnRlZC9kZXZlbG9wZXJzL3ZuZXQuaHRtbCNncmFwaC1kaXNwYXRjaGVyLXBjYXAtdHJhY2luZworICovCisjZGVmaW5lIERMVF9WUFBfRElTUEFUQ0gJMjgwCisKKy8qCisgKiBCcm9hZGNvbSBFdGhlcm5ldCBzd2l0Y2hlcyAoUk9CTyBzd2l0Y2gpIDQgYnl0ZXMgcHJvcHJpZXRhcnkgdGFnZ2luZyBmb3JtYXQuCisgKi8KKyNkZWZpbmUgRExUX0RTQV9UQUdfQlJDTQkyODEKKyNkZWZpbmUgRExUX0RTQV9UQUdfQlJDTV9QUkVQRU5ECTI4MgorCisvKgorICogSUVFRSA4MDIuMTUuNCB3aXRoIHBzZXVkby1oZWFkZXIgYW5kIG9wdGlvbmFsIG1ldGEtZGF0YSBUTFZzLCBQSFkgcGF5bG9hZAorICogZXhhY3RseSBhcyBpdCBhcHBlYXJzIGluIHRoZSBzcGVjIChubyBwYWRkaW5nLCBubyBub3RoaW5nKSwgYW5kIEZDUyBpZgorICogc3BlY2lmaWVkIGJ5IEZDUyBUeXBlIFRMVjsgIHJlcXVlc3RlZCBieSBKYW1lcyBLbyA8amNrQGV4ZWdpbi5jb20+LgorICogU3BlY2lmaWNhdGlvbiBhdCBodHRwczovL2dpdGh1Yi5jb20vamtja28vaWVlZTgwMi4xNS40LXRhcAorICovCisjZGVmaW5lIERMVF9JRUVFODAyXzE1XzRfVEFQICAgIDI4MworCisvKgorICogTWFydmVsbCAoRXRoZXJ0eXBlKSBEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlIHByb3ByaWV0YXJ5IHRhZ2dpbmcgZm9ybWF0LgorICovCisjZGVmaW5lIERMVF9EU0FfVEFHX0RTQQkJMjg0CisjZGVmaW5lIERMVF9EU0FfVEFHX0VEU0EJMjg1CisKKy8qCisgKiBQYXlsb2FkIG9mIGxhd2Z1bCBpbnRlcmNlcHQgcGFja2V0cyB1c2luZyB0aGUgRUxFRSBwcm90b2NvbDsKKyAqIGh0dHBzOi8vc29ja2V0LmhyL2RyYWZ0LWRmcmFudXNpYy1vcHNhd2ctZWxlZS0wMC54bWwKKyAqIGh0dHBzOi8veG1sMnJmYy50b29scy5pZXRmLm9yZy9jZ2ktYmluL3htbDJyZmMuY2dpP3VybD1odHRwczovL3NvY2tldC5oci9kcmFmdC1kZnJhbnVzaWMtb3BzYXdnLWVsZWUtMDAueG1sJm1vZGVBc0Zvcm1hdD1odG1sL2FzY2lpCisgKi8KKyNkZWZpbmUgRExUX0VMRUUJCTI4NgorCisvKgorICogU2VyaWFsIGZyYW1lcyB0cmFuc21pdHRlZCBiZXR3ZWVuIGEgaG9zdCBhbmQgYSBaLVdhdmUgY2hpcC4KKyAqLworI2RlZmluZSBETFRfWl9XQVZFX1NFUklBTAkyODcKKworLyoKKyAqIFVTQiAyLjAsIDEuMSwgYW5kIDEuMCBwYWNrZXRzIGFzIHRyYW5zbWl0dGVkIG92ZXIgdGhlIGNhYmxlLgorICovCisjZGVmaW5lIERMVF9VU0JfMl8wCQkyODgKKworLyoKKyAqIEFUU0MgTGluay1MYXllciBQcm90b2NvbCAoQS8zMzApIHBhY2tldHMuCisgKi8KKyNkZWZpbmUgRExUX0FUU0NfQUxQCQkyODkKKworLyoKICAqIEluIGNhc2UgdGhlIGNvZGUgdGhhdCBpbmNsdWRlcyB0aGlzIGZpbGUgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpCiAgKiBoYXMgYWxzbyBpbmNsdWRlZCBPUyBmaWxlcyB0aGF0IGhhcHBlbiB0byBkZWZpbmUgRExUX01BVENISU5HX01BWCwKICAqIHdpdGggYSBkaWZmZXJlbnQgdmFsdWUgKHBlcmhhcHMgYmVjYXVzZSB0aGF0IE9TIGhhc24ndCBwaWNrZWQgdXAKQEAgLTEzNzcsNyArMTQ5MCw3IEBACiAjaWZkZWYgRExUX01BVENISU5HX01BWAogI3VuZGVmIERMVF9NQVRDSElOR19NQVgKICNlbmRpZgotI2RlZmluZSBETFRfTUFUQ0hJTkdfTUFYCTI3NQkvKiBoaWdoZXN0IHZhbHVlIGluIHRoZSAibWF0Y2hpbmciIHJhbmdlICovCisjZGVmaW5lIERMVF9NQVRDSElOR19NQVgJMjg5CS8qIGhpZ2hlc3QgdmFsdWUgaW4gdGhlICJtYXRjaGluZyIgcmFuZ2UgKi8KIAogLyoKICAqIERMVCBhbmQgc2F2ZWZpbGUgbGluayB0eXBlIHZhbHVlcyBhcmUgc3BsaXQgaW50byBhIGNsYXNzIGFuZApkaWZmIC0tZ2l0IGEvcGNhcC9mdW5jYXR0cnMuaCBiL3BjYXAvZnVuY2F0dHJzLmgKaW5kZXggYThiMTkzMi4uY2RjMDgzZCAxMDA2NDQKLS0tIGEvcGNhcC9mdW5jYXR0cnMuaAorKysgYi9wY2FwL2Z1bmNhdHRycy5oCkBAIC0xNDcsNiArMTQ3LDcwIEBACiAjZGVmaW5lIFBDQVBfQVBJCVBDQVBfQVBJX0RFRiBleHRlcm4KIAogLyoKKyAqIERlZmluaXRpb25zIHRvIDEpIGluZGljYXRlIHdoYXQgdmVyc2lvbiBvZiBsaWJwY2FwIGZpcnN0IGhhZCBhIGdpdmVuCisgKiBBUEkgYW5kIDIpIGFsbG93IHVwc3RyZWFtIHByb3ZpZGVycyB3aG9zZSBidWlsZCBlbnZpcm9ubWVudHMgYWxsb3cKKyAqIEFQSXMgdG8gYmUgZGVzaWduYXRlZCBhcyAiZmlyc3QgYXZhaWxhYmxlIGluIHRoaXMgcmVsZWFzZSIgdG8gZG8gc28KKyAqIGJ5IGFwcHJvcHJpYXRlbHkgZGVmaW5pbmcgdGhlbS4KKyAqCisgKiBZZXMsIHRoYXQncyB5b3UsIEFwcGxlLiA6LSkgIFBsZWFzZSBkZWZpbmUgUENBUF9BVkFJTEFCTEVfTUFDT1MoKQorICogYXMgbmVjZXNzYXJ5IHRvIG1ha2UgdmFyaW91cyBBUElzICJ3ZWFrIGV4cG9ydHMiIHRvIG1ha2UgaXQgZWFzaWVyCisgKiBmb3Igc29mdHdhcmUgdGhhdCdzIGRpc3RyaWJ1dGVkIGluIGJpbmFyeSBmb3JtIGFuZCB0aGF0IHVzZXMgbGlicGNhcAorICogdG8gcnVuIG9uIG11bHRpcGxlIG1hY09TIHZlcnNpb25zIGFuZCB1c2UgbmV3IEFQSXMgd2hlbiBhdmFpbGFibGUuCisgKiAoWWVzLCBzdWNoIHRoaXJkLXBhcnR5IHNvZnR3YXJlIGV4aXN0cyAtIFdpcmVzaGFyayBwcm92aWRlcyBiaW5hcnkKKyAqIHBhY2thZ2VzIGZvciBtYWNPUywgZm9yIGV4YW1wbGUuICB0Y3BkdW1wIGRvZXNuJ3QgY291bnQsIGFzIHRoYXQncworICogcHJvdmlkZWQgYnkgQXBwbGUsIHNvIGVhY2ggcmVsZWFzZSBjYW4gY29tZSB3aXRoIGEgdmVyc2lvbiBjb21waWxlZAorICogdG8gdXNlIHRoZSBBUElzIHByZXNlbnQgaW4gdGhhdCByZWxlYXNlLikKKyAqCisgKiBXZSBkb24ndCBkZWZpbmUgaXQgb3Vyc2VsdmVzIGJlY2F1c2UsIGlmIHlvdSdyZSBidWlsZGluZyBhbmQKKyAqIGluc3RhbGxpbmcgbGlicGNhcCBvbiBtYWNPUyB5b3Vyc2VsZiwgdGhlIEFQSXMgd2lsbCBiZSBhdmFpbGFibGUKKyAqIG5vIG1hdHRlciB3aGF0IE9TIHZlcnNpb24geW91J3JlIGluc3RhbGxpbmcgaXQgb24uCisgKgorICogRm9yIG90aGVyIHBsYXRmb3Jtcywgd2UgZG9uJ3QgZGVmaW5lIHRoZW0sIGxlYXZpbmcgaXQgdXAgdG8KKyAqIG90aGVycyB0byBkbyBzbyBiYXNlZCBvbiB0aGVpciBPUyB2ZXJzaW9ucywgaWYgYXBwcm9wcmlhdGUuCisgKgorICogV2Ugc3RhcnQgd2l0aCBsaWJwY2FwIDAuNCwgYXMgdGhhdCB3YXMgdGhlIGxhc3QgTEJMIHJlbGVhc2UsIGFuZAorICogSSd2ZSBuZXZlciBzZWVuIGVhcmxpZXIgcmVsZWFzZXMuCisgKi8KKyNpZmRlZiBfX0FQUExFX18KKyNkZWZpbmUgUENBUF9BVkFJTEFCTEVfTUFDT1ModikJLyogZGVmaW5lIHRvIHNheSAiZmlyc3QgYXBwZWFycyBpbiB2IiAqLworI2RlZmluZSBQQ0FQX0FWQUlMQUJMRV8wXzQJUENBUF9BVkFJTEFCTEVfTUFDT1MoMTAuMCkgLyogRGlkIGFueSB2ZXJzaW9uIG9mIE1hYyBPUyBYIHNoaXAgd2l0aCB0aGlzPyAqLworI2RlZmluZSBQQ0FQX0FWQUlMQUJMRV8wXzUJUENBUF9BVkFJTEFCTEVfTUFDT1MoMTAuMCkgLyogRGlkIGFueSB2ZXJzaW9uIG9mIE1hYyBPUyBYIHNoaXAgd2l0aCB0aGlzPyAqLworI2RlZmluZSBQQ0FQX0FWQUlMQUJMRV8wXzYJUENBUF9BVkFJTEFCTEVfTUFDT1MoMTAuMSkKKyNkZWZpbmUgUENBUF9BVkFJTEFCTEVfMF83CVBDQVBfQVZBSUxBQkxFX01BQ09TKDEwLjQpCisjZGVmaW5lIFBDQVBfQVZBSUxBQkxFXzBfOAlQQ0FQX0FWQUlMQUJMRV9NQUNPUygxMC40KQorI2RlZmluZSBQQ0FQX0FWQUlMQUJMRV8wXzkJUENBUF9BVkFJTEFCTEVfTUFDT1MoMTAuNSkKKyNkZWZpbmUgUENBUF9BVkFJTEFCTEVfMV8wCVBDQVBfQVZBSUxBQkxFX01BQ09TKDEwLjYpCisvKiAjZGVmaW5lIFBDQVBfQVZBSUxBQkxFXzFfMQlubyByb3V0aW5lcyBhZGRlZCB0byB0aGUgQVBJICovCisjZGVmaW5lIFBDQVBfQVZBSUxBQkxFXzFfMglQQ0FQX0FWQUlMQUJMRV9NQUNPUygxMC45KQorLyogI2RlZmluZSBQQ0FQX0FWQUlMQUJMRV8xXzMJbm8gcm91dGluZXMgYWRkZWQgdG8gdGhlIEFQSSAqLworLyogI2RlZmluZSBQQ0FQX0FWQUlMQUJMRV8xXzQJbm8gcm91dGluZXMgYWRkZWQgdG8gdGhlIEFQSSAqLworI2RlZmluZSBQQ0FQX0FWQUlMQUJMRV8xXzUJUENBUF9BVkFJTEFCTEVfTUFDT1MoMTAuMTApCisvKiAjZGVmaW5lIFBDQVBfQVZBSUxBQkxFXzFfNglubyByb3V0aW5lcyBhZGRlZCB0byB0aGUgQVBJICovCisjZGVmaW5lIFBDQVBfQVZBSUxBQkxFXzFfNwlQQ0FQX0FWQUlMQUJMRV9NQUNPUygxMC4xMikKKyNkZWZpbmUgUENBUF9BVkFJTEFCTEVfMV84CVBDQVBfQVZBSUxBQkxFX01BQ09TKDEwLjEzKSAvKiBvbmx5IFdpbmRvd3MgYWRkcyByb3V0aW5lcyB0byB0aGUgQVBJOyBYWFggLSB3aGF0IHZlcnNpb24gZmlyc3QgaGFkIGl0PyAqLworI2RlZmluZSBQQ0FQX0FWQUlMQUJMRV8xXzkJUENBUF9BVkFJTEFCTEVfTUFDT1MoMTAuMTMpCisjZGVmaW5lIFBDQVBfQVZBSUxBQkxFXzFfMTAJLyogbm90IHJlbGVhc2VkIHlldCwgc28gbm90IGluIG1hY09TIHlldCAqLworI2Vsc2UgLyogX19BUFBMRV9fICovCisjZGVmaW5lIFBDQVBfQVZBSUxBQkxFXzBfNAorI2RlZmluZSBQQ0FQX0FWQUlMQUJMRV8wXzUKKyNkZWZpbmUgUENBUF9BVkFJTEFCTEVfMF82CisjZGVmaW5lIFBDQVBfQVZBSUxBQkxFXzBfNworI2RlZmluZSBQQ0FQX0FWQUlMQUJMRV8wXzgKKyNkZWZpbmUgUENBUF9BVkFJTEFCTEVfMF85CisjZGVmaW5lIFBDQVBfQVZBSUxBQkxFXzFfMAorLyogI2RlZmluZSBQQ0FQX0FWQUlMQUJMRV8xXzEJbm8gcm91dGluZXMgYWRkZWQgdG8gdGhlIEFQSSAqLworI2RlZmluZSBQQ0FQX0FWQUlMQUJMRV8xXzIKKy8qICNkZWZpbmUgUENBUF9BVkFJTEFCTEVfMV8zCW5vIHJvdXRpbmVzIGFkZGVkIHRvIHRoZSBBUEkgKi8KKy8qICNkZWZpbmUgUENBUF9BVkFJTEFCTEVfMV80CW5vIHJvdXRpbmVzIGFkZGVkIHRvIHRoZSBBUEkgKi8KKyNkZWZpbmUgUENBUF9BVkFJTEFCTEVfMV81CisvKiAjZGVmaW5lIFBDQVBfQVZBSUxBQkxFXzFfNglubyByb3V0aW5lcyBhZGRlZCB0byB0aGUgQVBJICovCisjZGVmaW5lIFBDQVBfQVZBSUxBQkxFXzFfNworI2RlZmluZSBQQ0FQX0FWQUlMQUJMRV8xXzgKKyNkZWZpbmUgUENBUF9BVkFJTEFCTEVfMV85CisjZGVmaW5lIFBDQVBfQVZBSUxBQkxFXzFfMTAKKyNlbmRpZiAvKiBfX0FQUExFX18gKi8KKworLyoKICAqIFBDQVBfTk9SRVRVUk4sIGJlZm9yZSBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLCBtZWFucyAidGhpcyBmdW5jdGlvbgogICogbmV2ZXIgcmV0dXJucyIuICAoSXQgbXVzdCBnbyBiZWZvcmUgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLCBlLmcuCiAgKiAiZXh0ZXJuIFBDQVBfTk9SRVRVUk4gZnVuYyguLi4pIiByYXRoZXIgdGhhbiBhZnRlciB0aGUgZnVuY3Rpb24KQEAgLTE2NCwxMCArMjI4LDExIEBACiAgICAgfHwgUENBUF9JU19BVF9MRUFTVF9YTF9DX1ZFUlNJT04oMTAsMSkgXAogICAgIHx8IFBDQVBfSVNfQVRfTEVBU1RfSFBfQ19WRVJTSU9OKDYsMTApCiAgIC8qCi0gICAqIENvbXBpbGVyIHdpdGggc3VwcG9ydCBmb3IgX19hdHRyaWJ1dGUoKG5vcmV0dXJuKSksIG9yIEdDQyAyLjUgYW5kCi0gICAqIGxhdGVyLCBvciBTb2xhcmlzIFN0dWRpbyAxMiAoU3VuIEMgNS45KSBhbmQgbGF0ZXIsIG9yIElCTSBYTCBDIDEwLjEKLSAgICogYW5kIGxhdGVyIChkbyBhbnkgZWFybGllciB2ZXJzaW9ucyBvZiBYTCBDIHN1cHBvcnQgdGhpcz8pLCBvcgotICAgKiBIUCBhQ0MgQS4wNi4xMCBhbmQgbGF0ZXIuCisgICAqIENvbXBpbGVyIHdpdGggc3VwcG9ydCBmb3IgX19hdHRyaWJ1dGUoKG5vcmV0dXJuKSksIG9yIEdDQyAyLjUgb3IKKyAgICogbGF0ZXIsIG9yIHNvbWUgY29tcGlsZXIgYXNzZXJ0aW5nIGNvbXBhdGliaWxpdHkgd2l0aCBHQ0MgMi41IG9yCisgICAqIGxhdGVyLCBvciBTb2xhcmlzIFN0dWRpbyAxMiAoU3VuIEMgNS45KSBvciBsYXRlciwgb3IgSUJNIFhMIEMgMTAuMQorICAgKiBvciBsYXRlciAoZG8gYW55IGVhcmxpZXIgdmVyc2lvbnMgb2YgWEwgQyBzdXBwb3J0IHRoaXM/KSwgb3IgSFAgYUNDCisgICAqIEEuMDYuMTAgb3IgbGF0ZXIuCiAgICAqLwogICAjZGVmaW5lIFBDQVBfTk9SRVRVUk4gX19hdHRyaWJ1dGUoKG5vcmV0dXJuKSkKICAgI2RlZmluZSBQQ0FQX05PUkVUVVJOX0RFRiBfX2F0dHJpYnV0ZSgobm9yZXR1cm4pKQpAQCAtMTkzLDcgKzI1OCw4IEBACiAgICAgfHwgUENBUF9JU19BVF9MRUFTVF9YTF9DX1ZFUlNJT04oMTAsMSkgXAogICAgIHx8IFBDQVBfSVNfQVRfTEVBU1RfSFBfQ19WRVJTSU9OKDYsMTApCiAgIC8qCi0gICAqIENvbXBpbGVyIHdpdGggc3VwcG9ydCBmb3IgaXQsIG9yIEdDQyAyLjMgYW5kIGxhdGVyLCBvciBJQk0gWEwgQyAxMC4xCisgICAqIENvbXBpbGVyIHdpdGggc3VwcG9ydCBmb3IgaXQsIG9yIEdDQyAyLjMgb3IgbGF0ZXIsIG9yIHNvbWUgY29tcGlsZXIKKyAgICogYXNzZXJ0aW5nIGNvbXBhdGliaWxpdHkgd2l0aCBHQ0MgMi4zIG9yIGxhdGVyLCBvciBJQk0gWEwgQyAxMC4xCiAgICAqIGFuZCBsYXRlciAoZG8gYW55IGVhcmxpZXIgdmVyc2lvbnMgb2YgWEwgQyBzdXBwb3J0IHRoaXM/KSwKICAgICogb3IgSFAgYUNDIEEuMDYuMTAgYW5kIGxhdGVyLgogICAgKi8KQEAgLTIxNiw3ICsyODIsNyBAQAogICAgIHx8IFBDQVBfSVNfQVRfTEVBU1RfU1VOQ19WRVJTSU9OKDUsMTMpCiAgIC8qCiAgICAqIENvbXBpbGVyIHRoYXQgc3VwcG9ydHMgX19oYXNfYXR0cmlidXRlIGFuZCBfX2F0dHJpYnV0ZV9fKChkZXByZWNhdGVkKSksCi0gICAqIG9yIEdDQyA0LjUgYW5kIGxhdGVyLCBvciBTdW4vT3JhY2xlIEMgMTIuNCAoU3VuIEMgNS4xMykgb3IgbGF0ZXIuCisgICAqIG9yIEdDQyA0LjUgb3IgbGF0ZXIsIG9yIFN1bi9PcmFjbGUgQyAxMi40IChTdW4gQyA1LjEzKSBvciBsYXRlci4KICAgICoKICAgICogVGhvc2Ugc3VwcG9ydCBfX2F0dHJpYnV0ZV9fKChkZXByZWNhdGVkKG1zZykpKSAod2UgYXNzdW1lLCBwZXJoYXBzCiAgICAqIGluY29ycmVjdGx5LCB0aGF0IGFueXRoaW5nIHRoYXQgc3VwcG9ydHMgX19oYXNfYXR0cmlidXRlKCkgaXMKQEAgLTIzMSwxMCArMjk3LDEwIEBACiAgICAqIF9fYXR0cmlidXRlX18oKGRlcHJlY2F0ZWQobXNnKSkpLgogICAgKi8KICAgI2RlZmluZSBQQ0FQX0RFUFJFQ0FURUQoZnVuYywgbXNnKQlfX2F0dHJpYnV0ZV9fKChkZXByZWNhdGVkKSkKLSNlbGlmIChkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPj0gMTUwMCkpICYmICFkZWZpbmVkKEJVSUxESU5HX1BDQVApCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChCVUlMRElOR19QQ0FQKQogICAvKgotICAgKiBNU1ZDIGZyb20gVmlzdWFsIFN0dWRpbyAyMDA4IG9yIGxhdGVyLCBhbmQgd2UncmUgbm90IGJ1aWxkaW5nCi0gICAqIGxpYnBjYXAgaXRzZWxmLgorICAgKiBNU1ZDLCBhbmQgd2UncmUgbm90IGJ1aWxkaW5nIGxpYnBjYXAgaXRzZWxmOyBpdCdzIFZTIDIwMTUKKyAgICogb3IgbGF0ZXIsIHNvIHdlIGhhdmUgdGhlIGRlcHJlY2F0ZWQgcHJhZ21hLgogICAgKgogICAgKiBJZiB3ZSAqYXJlKiBidWlsZGluZyBsaWJwY2FwLCB3ZSBkb24ndCB3YW50IHRoaXMsIGFzIGl0J2xsIHdhcm4KICAgICogdXMgZXZlbiBpZiB3ZSAqZGVmaW5lKiB0aGUgZnVuY3Rpb24uCkBAIC0yNDksMTEgKzMxNSw3IEBACiAgKi8KICNpZmRlZiBfTVNDX1ZFUgogICNpbmNsdWRlIDxzYWwuaD4KLSAjaWYgX01TQ19WRVIgPiAxNDAwCi0gICNkZWZpbmUgUENBUF9GT1JNQVRfU1RSSU5HKHApIF9QcmludGZfZm9ybWF0X3N0cmluZ18gcAotICNlbHNlCi0gICNkZWZpbmUgUENBUF9GT1JNQVRfU1RSSU5HKHApIF9fZm9ybWF0X3N0cmluZyBwCi0gI2VuZGlmCisgI2RlZmluZSBQQ0FQX0ZPUk1BVF9TVFJJTkcocCkgX1ByaW50Zl9mb3JtYXRfc3RyaW5nXyBwCiAjZWxzZQogICNkZWZpbmUgUENBUF9GT1JNQVRfU1RSSU5HKHApIHAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvcGNhcC9uYW1lZGIuaCBiL3BjYXAvbmFtZWRiLmgKaW5kZXggYzY2ODQ2ZC4uMzRhMGFlNyAxMDA2NDQKLS0tIGEvcGNhcC9uYW1lZGIuaAorKysgYi9wY2FwL25hbWVkYi5oCkBAIC01OSw3ICs1OSw4IEBACiBQQ0FQX0FQSSB1X2NoYXIgKnBjYXBfZXRoZXJfaG9zdHRvbihjb25zdCBjaGFyKik7CiBQQ0FQX0FQSSB1X2NoYXIgKnBjYXBfZXRoZXJfYXRvbihjb25zdCBjaGFyICopOwogCi1QQ0FQX0FQSSBicGZfdV9pbnQzMiAqKnBjYXBfbmFtZXRvYWRkcihjb25zdCBjaGFyICopOworUENBUF9BUEkgYnBmX3VfaW50MzIgKipwY2FwX25hbWV0b2FkZHIoY29uc3QgY2hhciAqKQorUENBUF9ERVBSRUNBVEVEKHBjYXBfbmFtZXRvYWRkciwgInRoaXMgaXMgbm90IHJlZW50cmFudDsgdXNlICdwY2FwX25hbWV0b2FkZHJpbmZvJyBpbnN0ZWFkIik7CiBQQ0FQX0FQSSBzdHJ1Y3QgYWRkcmluZm8gKnBjYXBfbmFtZXRvYWRkcmluZm8oY29uc3QgY2hhciAqKTsKIFBDQVBfQVBJIGJwZl91X2ludDMyIHBjYXBfbmFtZXRvbmV0YWRkcihjb25zdCBjaGFyICopOwogCmRpZmYgLS1naXQgYS9wY2FwL3BjYXAtaW50dHlwZXMuaCBiL3BjYXAvcGNhcC1pbnR0eXBlcy5oCmluZGV4IGFmMmMyM2MuLjFjZmEwYmYgMTAwNjQ0Ci0tLSBhL3BjYXAvcGNhcC1pbnR0eXBlcy5oCisrKyBiL3BjYXAvcGNhcC1pbnR0eXBlcy5oCkBAIC0zMiw4NiArMzIsNDkgQEAKICNkZWZpbmUgcGNhcF9wY2FwX2ludHR5cGVzX2gKIAogLyoKLSAqIEdldCB0aGUgaW50ZWdlciB0eXBlcyBhbmQgUFJpW2RvdXhdNjQgdmFsdWVzIGZyb20gQzk5IDxpbnR0eXBlcy5oPgotICogZGVmaW5lZCwgYnkgaG9vayBvciBieSBjcm9vay4KKyAqIElmIHdlJ3JlIGNvbXBpbGluZyB3aXRoIFZpc3VhbCBTdHVkaW8sIG1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0CisgKiBWUyAyMDE1IG9yIGxhdGVyLCBzbyB3ZSBoYXZlIHN1ZmZpY2llbnQgQzk5IHN1cHBvcnQuCisgKgorICogWFhYIC0gdmVyaWZ5IHRoYXQgd2UgaGF2ZSBhdCBsZWFzdCBDOTkgc3VwcG9ydCBvbiBVTipYZXM/CisgKgorICogV2hhdCBhYm91dCBNaW5HVyBvciB2YXJpb3VzIERPUyB0b29sY2hhaW5zPyAgV2UncmUgY3VycmVudGx5IGFzc3VtaW5nCisgKiBzdWZmaWNpZW50IEM5OSBzdXBwb3J0IHRoZXJlLgogICovCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKICAgLyoKLSAgICogQ29tcGlsZXIgaXMgTVNWQy4KKyAgICogQ29tcGlsZXIgaXMgTVNWQy4gIE1ha2Ugc3VyZSB3ZSBoYXZlIFZTIDIwMTUgb3IgbGF0ZXIuCiAgICAqLwotICAjaWYgX01TQ19WRVIgPj0gMTgwMAotICAgIC8qCi0gICAgICogVlMgMjAxMyBvciBuZXdlcjsgd2UgaGF2ZSA8aW50dHlwZXMuaD4uCi0gICAgICovCi0gICAgI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0gICNlbHNlCi0gICAgLyoKLSAgICAgKiBFYXJsaWVyIFZTOyB3ZSBoYXZlIHRvIGRlZmluZSB0aGlzIHN0dWZmIG91cnNlbHZlcy4KLSAgICAgKi8KLSAgICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKLSAgICB0eXBlZGVmIHNpZ25lZCBjaGFyIGludDhfdDsKLSAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnQxNl90OwotICAgIHR5cGVkZWYgc2lnbmVkIHNob3J0IGludDE2X3Q7Ci0gICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7Ci0gICAgdHlwZWRlZiBzaWduZWQgaW50IGludDMyX3Q7Ci0gICAgI2lmZGVmIF9NU0NfRVhURU5TSU9OUwotICAgICAgdHlwZWRlZiB1bnNpZ25lZCBfaW50NjQgdWludDY0X3Q7Ci0gICAgICB0eXBlZGVmIF9pbnQ2NCBpbnQ2NF90OwotICAgICNlbHNlIC8qIF9NU0NfRVhURU5TSU9OUyAqLwotICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7Ci0gICAgICB0eXBlZGVmIGxvbmcgbG9uZyBpbnQ2NF90OwotICAgICNlbmRpZgorICAjaWYgX01TQ19WRVIgPCAxOTAwCisgICAgI2Vycm9yICJCdWlsZGluZyBsaWJwY2FwIHJlcXVpcmVzIFZTIDIwMTUgb3IgbGF0ZXIiCiAgICNlbmRpZgotCi0gIC8qCi0gICAqIFRoZXNlIG1heSBiZSBkZWZpbmVkIGJ5IDxpbnR0eXBlcy5oPi4KLSAgICoKLSAgICogWFhYIC0gZm9yIE1TVkMsIHdlIGFsd2F5cyB3YW50IHRoZSBfTVNDX0VYVEVOU0lPTlMgdmVyc2lvbnMuCi0gICAqIFdoYXQgYWJvdXQgb3RoZXIgY29tcGlsZXJzPyAgSWYsIGFzIHRoZSBNaW5HVyBXZWIgc2l0ZSBzYXlzIE1pbkdXCi0gICAqIGRvZXMsIHRoZSBvdGhlciBjb21waWxlcnMganVzdCB1c2UgTWljcm9zb2Z0J3MgcnVuLXRpbWUgbGlicmFyeSwKLSAgICogdGhlbiB0aGV5IHNob3VsZCBwcm9iYWJseSB1c2UgdGhlIF9NU0NfRVhURU5TSU9OUyBldmVuIGlmIHRoZQotICAgKiBjb21waWxlciBkb2Vzbid0IGRlZmluZSBfTVNDX0VYVEVOU0lPTlMuCi0gICAqCi0gICAqIFhYWCAtIHdlIGN1cnJlbnRseSBhcmVuJ3QgdXNpbmcgYW55IG9mIHRoZXNlLCBidXQgdGhpcyBhbGxvd3MKLSAgICogdGhlaXIgdXNlIGluIHRoZSBmdXR1cmUuCi0gICAqLwotICAjaWZuZGVmIFBSSWQ2NAotICAgICNpZmRlZiBfTVNDX0VYVEVOU0lPTlMKLSAgICAgICNkZWZpbmUgUFJJZDY0CSJJNjRkIgotICAgICNlbHNlCi0gICAgICAjZGVmaW5lIFBSSWQ2NAkibGxkIgotICAgICNlbmRpZgotICAjZW5kaWYgLyogUFJJZDY0ICovCi0KLSAgI2lmbmRlZiBQUklvNjQKLSAgICAjaWZkZWYgX01TQ19FWFRFTlNJT05TCi0gICAgICAjZGVmaW5lIFBSSW82NAkiSTY0byIKLSAgICAjZWxzZQotICAgICAgI2RlZmluZSBQUklvNjQJImxsbyIKLSAgICAjZW5kaWYKLSAgI2VuZGlmIC8qIFBSSW82NCAqLwotCi0gICNpZm5kZWYgUFJJeDY0Ci0gICAgI2lmZGVmIF9NU0NfRVhURU5TSU9OUwotICAgICAgI2RlZmluZSBQUkl4NjQJIkk2NHgiCi0gICAgI2Vsc2UKLSAgICAgICNkZWZpbmUgUFJJeDY0CSJsbHgiCi0gICAgI2VuZGlmCi0gICNlbmRpZgotCi0gICNpZm5kZWYgUFJJdTY0Ci0gICAgI2lmZGVmIF9NU0NfRVhURU5TSU9OUwotICAgICAgI2RlZmluZSBQUkl1NjQJIkk2NHUiCi0gICAgI2Vsc2UKLSAgICAgICNkZWZpbmUgUFJJdTY0CSJsbHUiCi0gICAgI2VuZGlmCi0gICNlbmRpZgotI2VsaWYgZGVmaW5lZChfX01JTkdXMzJfXykgfHwgIWRlZmluZWQoX1dJTjMyKQotICAvKgotICAgKiBDb21waWxlciBpcyBNaW5HVyBvciB0YXJnZXQgaXMgVU4qWCBvciBNUy1ET1MuICBKdXN0IHVzZQotICAgKiA8aW50dHlwZXMuaD4uCi0gICAqLwotICAjaW5jbHVkZSA8aW50dHlwZXMuaD4KICNlbmRpZgogCisvKgorICogSW5jbHVkZSA8aW50dHlwZXMuaD4gdG8gZ2V0IHRoZSBpbnRlZ2VyIHR5cGVzIGFuZCBQUmlbZG91eF02NCB2YWx1ZXMKKyAqIGRlZmluZWQuCisgKgorICogSWYgdGhlIGNvbXBpbGVyIGlzIE1TVkMsIHdlIHJlcXVpcmUgVlMgMjAxNSBvciBuZXdlciwgc28gd2UKKyAqIGhhdmUgPGludHR5cGVzLmg+IC0gYW5kIHN1cHBvcnQgZm9yICV6dSBpbiB0aGUgZm9ybWF0dGVkCisgKiBwcmludGluZyBmdW5jdGlvbnMuCisgKgorICogSWYgdGhlIGNvbXBpbGVyIGlzIE1pbkdXLCB3ZSBhc3N1bWUgd2UgaGF2ZSA8aW50dHlwZXMuaD4gLSBhbmQKKyAqIHN1cHBvcnQgZm9yICV6dSBpbiB0aGUgZm9ybWF0dGVkIHByaW50aW5nIGZ1bmN0aW9ucy4KKyAqCisgKiBJZiB0aGUgdGFyZ2V0IGlzIFVOKlgsIHdlIGFzc3VtZSB3ZSBoYXZlIGEgQzk5LW9yLWxhdGVyIGRldmVsb3BtZW50CisgKiBlbnZpcm9ubWVudCwgYW5kIHRodXMgaGF2ZSA8aW50dHlwZXMuaD4gLSBhbmQgc3VwcG9ydCBmb3IgJXp1IGluCisgKiB0aGUgZm9ybWF0dGVkIHByaW50aW5nIGZ1bmN0aW9ucy4KKyAqCisgKiBJZiB0aGUgdGFyZ2V0IGlzIE1TLURPUywgd2UgYXNzdW1lIHdlIGhhdmUgPGludHR5cGVzLmg+IC0gYW5kIHN1cHBvcnQKKyAqIGZvciAlenUgaW4gdGhlIGZvcm1hdHRlZCBwcmludGluZyBmdW5jdGlvbnMuCisgKgorICogSS5lLiwgYXNzdW1lIHdlIGhhdmUgPGludHR5cGVzLmg+IGFuZCB0aGF0IGl0IHN1ZmZpY2VzLgorICovCisKKy8qCisgKiBYWFggLSBzb21laG93IG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBDOTkgc3VwcG9ydCB3aXRoIG90aGVyCisgKiBjb21waWxlcnMgYW5kIHN1cHBvcnQgbGlicmFyaWVzPworICovCisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorCiAjZW5kaWYgLyogcGNhcC9wY2FwLWludHR5cGVzLmggKi8KZGlmZiAtLWdpdCBhL3BjYXAvcGNhcC5oIGIvcGNhcC9wY2FwLmgKaW5kZXggYmM4N2IzZi4uODE4MmJlZiAxMDA2NDQKLS0tIGEvcGNhcC9wY2FwLmgKKysrIGIvcGNhcC9wY2FwLmgKQEAgLTY5LDYgKzY5LDQ5IEBACiAjaWZuZGVmIGxpYl9wY2FwX3BjYXBfaAogI2RlZmluZSBsaWJfcGNhcF9wY2FwX2gKIAorLyoKKyAqIFNvbWUgc29mdHdhcmUgdGhhdCB1c2VzIGxpYnBjYXAvV2luUGNhcC9OcGNhcCBkZWZpbmVzIF9NU0NfVkVSIGJlZm9yZQorICogaW5jbHVkZWluZyBwY2FwLmggaWYgaXQncyBub3QgZGVmaW5lZCAtIGFuZCBpdCBkZWZpbmVzIGl0IHRvIDE1MDAuCisgKiAoSSdtIGxvb2tpbmcgYXQgKnlvdSosIGx3SVAhKQorICoKKyAqIEF0dGVtcHQgdG8gZGV0ZWN0IHRoaXMsIGFuZCB1bmRlZmluZSBfTVNDX1ZFUiBzbyB0aGF0IHdlIGNhbiAqcmVsaWFibHkqCisgKiB1c2UgaXQgdG8ga25vdyB3aGF0IGNvbXBpbGVyIGlzIGJlaW5nIHVzZWQgYW5kLCBpZiBpdCdzIFZpc3VhbCBTdHVkaW8sCisgKiB3aGF0IHZlcnNpb24gaXMgYmVpbmcgdXNlZC4KKyAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpCisgIC8qCisgICAqIFdlIGFzc3VtZSBoZXJlIHRoYXQgc29mdHdhcmUgc3VjaCBhcyB0aGF0IGRvZXNuJ3QgZGVmaW5lIF9NU0NfRlVMTF9WRVIKKyAgICogYXMgd2VsbCBhbmQgdGhhdCBpdCBkZWZpbmVzIF9NU0NfVkVSIHdpdGggYSB2YWx1ZSA+IDEyMDAuCisgICAqCisgICAqIERPIE5PVCBCUkVBSyBUSEVTRSBBU1NVTVBUSU9OUy4gIElGIFlPVSBGRUVMIFlPVSBNVVNUIERFRklORSBfTVNDX1ZFUgorICAgKiBXSVRIIEEgQ09NUElMRVIgVEhBVCdTIE5PVCBNSUNST1NPRlQnUyBDIENPTVBJTEVSLCBQTEVBU0UgQ09OVEFDVAorICAgKiBVUyBTTyBUSEFUIFdFIENBTiBNQUtFIElUIFNPIFRIQVQgWU9VIERPTidUIEhBVkUgVE8gRE8gVEhBVC4gIFRIQU5LCisgICAqIFlPVS4KKyAgICoKKyAgICogT0ssIGlzIF9NU0NfRlVMTF9WRVIgZGVmaW5lZD8KKyAgICovCisgICNpZiAhZGVmaW5lZChfTVNDX0ZVTExfVkVSKQorICAgIC8qCisgICAgICogQWNjb3JkaW5nIHRvCisgICAgICoKKyAgICAgKiAgICBodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL3ByZWRlZi93aWtpL0NvbXBpbGVycy8KKyAgICAgKgorICAgICAqIHdpdGggIlZpc3VhbCBDKysgNi4wIFByb2Nlc3NvciBQYWNrIi9WaXN1YWwgQysrIDYuMCBTUDYgYW5kCisgICAgICogbGF0ZXIsIF9NU0NfRlVMTF9WRVIgaXMgZGVmaW5lZCwgc28gZWl0aGVyIHRoaXMgaXMgYW4gb2xkZXIKKyAgICAgKiB2ZXJzaW9uIG9mIFZpc3VhbCBDKysgb3IgaXQncyBub3QgVmlzdWFsIEMrKyBhdCBhbGwuCisgICAgICoKKyAgICAgKiBGb3IgVmlzdWFsIEMrKyA2LjAsIF9NU0NfVkVSIGlzIGRlZmluZWQgYXMgMTIwMC4KKyAgICAgKi8KKyAgICAjaWYgX01TQ19WRVIgPiAxMjAwCisgICAgICAvKgorICAgICAgICogSWYgdGhpcyBpcyBWaXN1YWwgQysrLCBfTVNDX0ZVTExfVkVSIHNob3VsZCBiZSBkZWZpbmVkLCBzbyB3ZQorICAgICAgICogYXNzdW1lIHRoaXMgaXNuJ3QgVmlzdWFsIEMrKywgYW5kIHVuZG8gdGhlIGxpZSB0aGF0IGl0IGlzLgorICAgICAgICovCisgICAgICAjdW5kZWYgX01TQ19WRVIKKyAgICAjZW5kaWYKKyAgI2VuZGlmCisjZW5kaWYKKwogI2luY2x1ZGUgPHBjYXAvZnVuY2F0dHJzLmg+CiAKICNpbmNsdWRlIDxwY2FwL3BjYXAtaW50dHlwZXMuaD4KQEAgLTg0LDYgKzEyNyw4IEBACiAgICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2VuZGlmIC8qIF9XSU4zMi9NU0RPUy9VTipYICovCiAKKyNpbmNsdWRlIDxwY2FwL3NvY2tldC5oPgkvKiBmb3IgU09DS0VULCBhcyB0aGUgYWN0aXZlLW1vZGUgcnBjYXAgQVBJcyB1c2UgaXQgKi8KKwogI2lmbmRlZiBQQ0FQX0RPTlRfSU5DTFVERV9QQ0FQX0JQRl9ICiAjaW5jbHVkZSA8cGNhcC9icGYuaD4KICNlbmRpZgpAQCAtMTI1LDYgKzE3MCw3IEBACiAgKiBvZiB0aGUgZmxhZ3MgdXNlZCBpbiB0aGUgcHJpbnRvdXQgcGhhc2VzIG9mIHRjcGR1bXAuCiAgKiBNYW55IGZpZWxkcyBoZXJlIGFyZSAzMiBiaXQgaW50cyBzbyBjb21waWxlcnMgd29uJ3QgaW5zZXJ0IHVud2FudGVkCiAgKiBwYWRkaW5nOyB0aGVzZSBmaWxlcyBuZWVkIHRvIGJlIGludGVyY2hhbmdlYWJsZSBhY3Jvc3MgYXJjaGl0ZWN0dXJlcy4KKyAqIERvY3VtZW50YXRpb246IGh0dHBzOi8vd3d3LnRjcGR1bXAub3JnL21hbnBhZ2VzL3BjYXAtc2F2ZWZpbGUuNS50eHQuCiAgKgogICogRG8gbm90IGNoYW5nZSB0aGUgbGF5b3V0IG9mIHRoaXMgc3RydWN0dXJlLCBpbiBhbnkgd2F5ICh0aGlzIGluY2x1ZGVzCiAgKiBjaGFuZ2VzIHRoYXQgb25seSBhZmZlY3QgdGhlIGxlbmd0aCBvZiBmaWVsZHMgaW4gdGhpcyBzdHJ1Y3R1cmUpLgpAQCAtMTUyLDcgKzE5OCw3IEBACiAgKgogICogVGhlbiBzdXBwbHkgdGhlIGNoYW5nZXMgYnkgZm9ya2luZyB0aGUgYnJhbmNoIGF0CiAgKgotICoJaHR0cHM6Ly9naXRodWIuY29tL3RoZS10Y3BkdW1wLWdyb3VwL2xpYnBjYXAvaXNzdWVzCisgKglodHRwczovL2dpdGh1Yi5jb20vdGhlLXRjcGR1bXAtZ3JvdXAvbGlicGNhcC90cmVlL21hc3RlcgogICoKICAqIGFuZCBpc3N1aW5nIGEgcHVsbCByZXF1ZXN0LCBzbyB0aGF0IGZ1dHVyZSB2ZXJzaW9ucyBvZiBsaWJwY2FwIGFuZAogICogcHJvZ3JhbXMgdGhhdCB1c2UgaXQgKHN1Y2ggYXMgdGNwZHVtcCkgd2lsbCBiZSBhYmxlIHRvIHJlYWQgeW91ciBuZXcKQEAgLTE2Miw4ICsyMDgsOCBAQAogCWJwZl91X2ludDMyIG1hZ2ljOwogCXVfc2hvcnQgdmVyc2lvbl9tYWpvcjsKIAl1X3Nob3J0IHZlcnNpb25fbWlub3I7Ci0JYnBmX2ludDMyIHRoaXN6b25lOwkvKiBnbXQgdG8gbG9jYWwgY29ycmVjdGlvbiAqLwotCWJwZl91X2ludDMyIHNpZ2ZpZ3M7CS8qIGFjY3VyYWN5IG9mIHRpbWVzdGFtcHMgKi8KKwlicGZfaW50MzIgdGhpc3pvbmU7CS8qIGdtdCB0byBsb2NhbCBjb3JyZWN0aW9uOyB0aGlzIGlzIGFsd2F5cyAwICovCisJYnBmX3VfaW50MzIgc2lnZmlnczsJLyogYWNjdXJhY3kgb2YgdGltZXN0YW1wczsgdGhpcyBpcyBhbHdheXMgMCAqLwogCWJwZl91X2ludDMyIHNuYXBsZW47CS8qIG1heCBsZW5ndGggc2F2ZWQgcG9ydGlvbiBvZiBlYWNoIHBrdCAqLwogCWJwZl91X2ludDMyIGxpbmt0eXBlOwkvKiBkYXRhIGxpbmsgdHlwZSAoTElOS1RZUEVfKikgKi8KIH07CkBAIC0xOTksNyArMjQ1LDcgQEAKIHN0cnVjdCBwY2FwX3BrdGhkciB7CiAJc3RydWN0IHRpbWV2YWwgdHM7CS8qIHRpbWUgc3RhbXAgKi8KIAlicGZfdV9pbnQzMiBjYXBsZW47CS8qIGxlbmd0aCBvZiBwb3J0aW9uIHByZXNlbnQgKi8KLQlicGZfdV9pbnQzMiBsZW47CS8qIGxlbmd0aCB0aGlzIHBhY2tldCAob2ZmIHdpcmUpICovCisJYnBmX3VfaW50MzIgbGVuOwkvKiBsZW5ndGggb2YgdGhpcyBwYWNrZXQgKG9mZiB3aXJlKSAqLwogfTsKIAogLyoKQEAgLTMxOSwzNSArMzY1LDkxIEBACiAjZGVmaW5lIFBDQVBfTkVUTUFTS19VTktOT1dOCTB4ZmZmZmZmZmYKIAogLyoKKyAqIEluaXRpYWxpemUgcGNhcC4gIElmIHRoaXMgaXNuJ3QgY2FsbGVkLCBwY2FwIGlzIGluaXRpYWxpemVkIHRvCisgKiBhIG1vZGUgc291cmNlLWNvbXBhdGlibGUgYW5kIGJpbmFyeS1jb21wYXRpYmxlIHdpdGggb2xkZXIgdmVyc2lvbnMKKyAqIHRoYXQgbGFjayB0aGlzIHJvdXRpbmUuCisgKi8KKworLyoKKyAqIEluaXRpYWxpemF0aW9uIG9wdGlvbnMuCisgKiBBbGwgYml0cyBub3QgbGlzdGVkIGhlcmUgYXJlIHJlc2VydmVkIGZvciBleHBhbnNpb24uCisgKgorICogT24gVU5JWC1saWtlIHN5c3RlbXMsIHRoZSBsb2NhbCBjaGFyYWN0ZXIgZW5jb2RpbmcgaXMgYXNzdW1lZCB0byBiZQorICogVVRGLTgsIHNvIG5vIGNoYXJhY3RlciBlbmNvZGluZyB0cmFuc2Zvcm1hdGlvbnMgYXJlIGRvbmUuCisgKgorICogT24gV2luZG93cywgdGhlIGxvY2FsIGNoYXJhY3RlciBlbmNvZGluZyBpcyB0aGUgbG9jYWwgQU5TSSBjb2RlIHBhZ2UuCisgKi8KKyNkZWZpbmUgUENBUF9DSEFSX0VOQ19MT0NBTAkweDAwMDAwMDAwVQkvKiBzdHJpbmdzIGFyZSBpbiB0aGUgbG9jYWwgY2hhcmFjdGVyIGVuY29kaW5nICovCisjZGVmaW5lIFBDQVBfQ0hBUl9FTkNfVVRGXzgJMHgwMDAwMDAwMVUJLyogc3RyaW5ncyBhcmUgaW4gVVRGLTggKi8KKworUENBUF9BVkFJTEFCTEVfMV8xMAorUENBUF9BUEkgaW50CXBjYXBfaW5pdCh1bnNpZ25lZCBpbnQsIGNoYXIgKik7CisKKy8qCiAgKiBXZSdyZSBkZXByZWNhdGluZyBwY2FwX2xvb2t1cGRldigpIGZvciB2YXJpb3VzIHJlYXNvbnMgKG5vdAogICogdGhyZWFkLXNhZmUsIGNhbiBiZWhhdmUgd2VpcmRseSB3aXRoIFdpblBjYXApLiAgQ2FsbGVycwogICogc2hvdWxkIHVzZSBwY2FwX2ZpbmRhbGxkZXZzKCkgYW5kIHVzZSB0aGUgZmlyc3QgZGV2aWNlLgogICovCitQQ0FQX0FWQUlMQUJMRV8wXzQKIFBDQVBfQVBJIGNoYXIJKnBjYXBfbG9va3VwZGV2KGNoYXIgKikKIFBDQVBfREVQUkVDQVRFRChwY2FwX2xvb2t1cGRldiwgInVzZSAncGNhcF9maW5kYWxsZGV2cycgYW5kIHVzZSB0aGUgZmlyc3QgZGV2aWNlIik7CiAKK1BDQVBfQVZBSUxBQkxFXzBfNAogUENBUF9BUEkgaW50CXBjYXBfbG9va3VwbmV0KGNvbnN0IGNoYXIgKiwgYnBmX3VfaW50MzIgKiwgYnBmX3VfaW50MzIgKiwgY2hhciAqKTsKIAorUENBUF9BVkFJTEFCTEVfMV8wCiBQQ0FQX0FQSSBwY2FwX3QJKnBjYXBfY3JlYXRlKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKKworUENBUF9BVkFJTEFCTEVfMV8wCiBQQ0FQX0FQSSBpbnQJcGNhcF9zZXRfc25hcGxlbihwY2FwX3QgKiwgaW50KTsKKworUENBUF9BVkFJTEFCTEVfMV8wCiBQQ0FQX0FQSSBpbnQJcGNhcF9zZXRfcHJvbWlzYyhwY2FwX3QgKiwgaW50KTsKKworUENBUF9BVkFJTEFCTEVfMV8wCiBQQ0FQX0FQSSBpbnQJcGNhcF9jYW5fc2V0X3JmbW9uKHBjYXBfdCAqKTsKKworUENBUF9BVkFJTEFCTEVfMV8wCiBQQ0FQX0FQSSBpbnQJcGNhcF9zZXRfcmZtb24ocGNhcF90ICosIGludCk7CisKK1BDQVBfQVZBSUxBQkxFXzFfMAogUENBUF9BUEkgaW50CXBjYXBfc2V0X3RpbWVvdXQocGNhcF90ICosIGludCk7CisKK1BDQVBfQVZBSUxBQkxFXzFfMgogUENBUF9BUEkgaW50CXBjYXBfc2V0X3RzdGFtcF90eXBlKHBjYXBfdCAqLCBpbnQpOworCitQQ0FQX0FWQUlMQUJMRV8xXzUKIFBDQVBfQVBJIGludAlwY2FwX3NldF9pbW1lZGlhdGVfbW9kZShwY2FwX3QgKiwgaW50KTsKKworUENBUF9BVkFJTEFCTEVfMV8wCiBQQ0FQX0FQSSBpbnQJcGNhcF9zZXRfYnVmZmVyX3NpemUocGNhcF90ICosIGludCk7CisKK1BDQVBfQVZBSUxBQkxFXzFfNQogUENBUF9BUEkgaW50CXBjYXBfc2V0X3RzdGFtcF9wcmVjaXNpb24ocGNhcF90ICosIGludCk7CisKK1BDQVBfQVZBSUxBQkxFXzFfNQogUENBUF9BUEkgaW50CXBjYXBfZ2V0X3RzdGFtcF9wcmVjaXNpb24ocGNhcF90ICopOworCitQQ0FQX0FWQUlMQUJMRV8xXzAKIFBDQVBfQVBJIGludAlwY2FwX2FjdGl2YXRlKHBjYXBfdCAqKTsKIAorUENBUF9BVkFJTEFCTEVfMV8yCiBQQ0FQX0FQSSBpbnQJcGNhcF9saXN0X3RzdGFtcF90eXBlcyhwY2FwX3QgKiwgaW50ICoqKTsKKworUENBUF9BVkFJTEFCTEVfMV8yCiBQQ0FQX0FQSSB2b2lkCXBjYXBfZnJlZV90c3RhbXBfdHlwZXMoaW50ICopOworCitQQ0FQX0FWQUlMQUJMRV8xXzIKIFBDQVBfQVBJIGludAlwY2FwX3RzdGFtcF90eXBlX25hbWVfdG9fdmFsKGNvbnN0IGNoYXIgKik7CisKK1BDQVBfQVZBSUxBQkxFXzFfMgogUENBUF9BUEkgY29uc3QgY2hhciAqcGNhcF90c3RhbXBfdHlwZV92YWxfdG9fbmFtZShpbnQpOworCitQQ0FQX0FWQUlMQUJMRV8xXzIKIFBDQVBfQVBJIGNvbnN0IGNoYXIgKnBjYXBfdHN0YW1wX3R5cGVfdmFsX3RvX2Rlc2NyaXB0aW9uKGludCk7CiAKICNpZmRlZiBfX2xpbnV4X18KK1BDQVBfQVZBSUxBQkxFXzFfOQogUENBUF9BUEkgaW50CXBjYXBfc2V0X3Byb3RvY29sX2xpbnV4KHBjYXBfdCAqLCBpbnQpOwogI2VuZGlmCiAKQEAgLTM1Nyw4ICs0NTksNyBAQAogICoKICAqIEEgc3lzdGVtIHRoYXQgc3VwcG9ydHMgUENBUF9UU1RBTVBfSE9TVCBpcyBvZmZlcmluZyB0aW1lIHN0YW1wcwogICogcHJvdmlkZWQgYnkgdGhlIGhvc3QgbWFjaGluZSwgcmF0aGVyIHRoYW4gYnkgdGhlIGNhcHR1cmUgZGV2aWNlLAotICogYnV0IG5vdCBjb21taXR0aW5nIHRvIGFueSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHRpbWUgc3RhbXA7Ci0gKiBpdCB3aWxsIG5vdCBvZmZlciBhbnkgb2YgdGhlIFBDQVBfVFNUQU1QX0hPU1RfIHN1YnR5cGVzLgorICogYnV0IG5vdCBjb21taXR0aW5nIHRvIGFueSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHRpbWUgc3RhbXAuCiAgKgogICogUENBUF9UU1RBTVBfSE9TVF9MT1dQUkVDIGlzIGEgdGltZSBzdGFtcCwgcHJvdmlkZWQgYnkgdGhlIGhvc3QgbWFjaGluZSwKICAqIHRoYXQncyBsb3ctcHJlY2lzaW9uIGJ1dCByZWxhdGl2ZWx5IGNoZWFwIHRvIGZldGNoOyBpdCdzIG5vcm1hbGx5IGRvbmUKQEAgLTM2NiwxMCArNDY3LDE1IEBACiAgKiBmZXRjaCBmcm9tIHN5c3RlbSBjYWxscy4KICAqCiAgKiBQQ0FQX1RTVEFNUF9IT1NUX0hJUFJFQyBpcyBhIHRpbWUgc3RhbXAsIHByb3ZpZGVkIGJ5IHRoZSBob3N0IG1hY2hpbmUsCi0gKiB0aGF0J3MgaGlnaC1wcmVjaXNpb247IGl0IG1pZ2h0IGJlIG1vcmUgZXhwZW5zaXZlIHRvIGZldGNoLiAgSXQgbWlnaHQKLSAqIG9yIG1pZ2h0IG5vdCBiZSBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgc3lzdGVtIGNsb2NrLCBhbmQgbWlnaHQgaGF2ZQorICogdGhhdCdzIGhpZ2gtcHJlY2lzaW9uOyBpdCBtaWdodCBiZSBtb3JlIGV4cGVuc2l2ZSB0byBmZXRjaC4gIEl0IGlzCisgKiBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgc3lzdGVtIGNsb2NrLgorICoKKyAqIFBDQVBfVFNUQU1QX0hPU1RfSElQUkVDX1VOU1lOQ0VEIGlzIGEgdGltZSBzdGFtcCwgcHJvdmlkZWQgYnkgdGhlIGhvc3QKKyAqIG1hY2hpbmUsIHRoYXQncyBoaWdoLXByZWNpc2lvbjsgaXQgbWlnaHQgYmUgbW9yZSBleHBlbnNpdmUgdG8gZmV0Y2guCisgKiBJdCBpcyBub3Qgc3luY2hyb25pemVkIHdpdGggdGhlIHN5c3RlbSBjbG9jaywgYW5kIG1pZ2h0IGhhdmUKICAqIHByb2JsZW1zIHdpdGggdGltZSBzdGFtcHMgZm9yIHBhY2tldHMgcmVjZWl2ZWQgb24gZGlmZmVyZW50IENQVXMsCi0gKiBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLgorICogZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybS4gIEl0IG1pZ2h0IGJlIG1vcmUgbGlrZWx5IHRvIGJlIHN0cmljdGx5CisgKiBtb25vdG9uaWMgdGhhbiBQQ0FQX1RTVEFNUF9IT1NUX0hJUFJFQy4KICAqCiAgKiBQQ0FQX1RTVEFNUF9BREFQVEVSIGlzIGEgaGlnaC1wcmVjaXNpb24gdGltZSBzdGFtcCBzdXBwbGllZCBieSB0aGUKICAqIGNhcHR1cmUgZGV2aWNlOyBpdCdzIHN5bmNocm9uaXplZCB3aXRoIHRoZSBzeXN0ZW0gY2xvY2suCkBAIC0zODksMTEgKzQ5NSwxMiBAQAogICogdGhlIHBhY2tldCBpcyByZWNlaXZlZCBieSB0aGUgbmV0d29yayBhZGFwdGVyLCBkdWUgdG8gYmF0Y2hpbmcKICAqIG9mIGludGVycnVwdHMgZm9yIHBhY2tldCBhcnJpdmFsLCBxdWV1ZWluZyBkZWxheXMsIGV0Yy4uCiAgKi8KLSNkZWZpbmUgUENBUF9UU1RBTVBfSE9TVAkJMAkvKiBob3N0LXByb3ZpZGVkLCB1bmtub3duIGNoYXJhY3RlcmlzdGljcyAqLwotI2RlZmluZSBQQ0FQX1RTVEFNUF9IT1NUX0xPV1BSRUMJMQkvKiBob3N0LXByb3ZpZGVkLCBsb3cgcHJlY2lzaW9uICovCi0jZGVmaW5lIFBDQVBfVFNUQU1QX0hPU1RfSElQUkVDCQkyCS8qIGhvc3QtcHJvdmlkZWQsIGhpZ2ggcHJlY2lzaW9uICovCi0jZGVmaW5lIFBDQVBfVFNUQU1QX0FEQVBURVIJCTMJLyogZGV2aWNlLXByb3ZpZGVkLCBzeW5jZWQgd2l0aCB0aGUgc3lzdGVtIGNsb2NrICovCi0jZGVmaW5lIFBDQVBfVFNUQU1QX0FEQVBURVJfVU5TWU5DRUQJNAkvKiBkZXZpY2UtcHJvdmlkZWQsIG5vdCBzeW5jZWQgd2l0aCB0aGUgc3lzdGVtIGNsb2NrICovCisjZGVmaW5lIFBDQVBfVFNUQU1QX0hPU1QJCQkwCS8qIGhvc3QtcHJvdmlkZWQsIHVua25vd24gY2hhcmFjdGVyaXN0aWNzICovCisjZGVmaW5lIFBDQVBfVFNUQU1QX0hPU1RfTE9XUFJFQwkJMQkvKiBob3N0LXByb3ZpZGVkLCBsb3cgcHJlY2lzaW9uLCBzeW5jZWQgd2l0aCB0aGUgc3lzdGVtIGNsb2NrICovCisjZGVmaW5lIFBDQVBfVFNUQU1QX0hPU1RfSElQUkVDCQkJMgkvKiBob3N0LXByb3ZpZGVkLCBoaWdoIHByZWNpc2lvbiwgc3luY2VkIHdpdGggdGhlIHN5c3RlbSBjbG9jayAqLworI2RlZmluZSBQQ0FQX1RTVEFNUF9BREFQVEVSCQkJMwkvKiBkZXZpY2UtcHJvdmlkZWQsIHN5bmNlZCB3aXRoIHRoZSBzeXN0ZW0gY2xvY2sgKi8KKyNkZWZpbmUgUENBUF9UU1RBTVBfQURBUFRFUl9VTlNZTkNFRAkJNAkvKiBkZXZpY2UtcHJvdmlkZWQsIG5vdCBzeW5jZWQgd2l0aCB0aGUgc3lzdGVtIGNsb2NrICovCisjZGVmaW5lIFBDQVBfVFNUQU1QX0hPU1RfSElQUkVDX1VOU1lOQ0VECTUJLyogaG9zdC1wcm92aWRlZCwgaGlnaCBwcmVjaXNpb24sIG5vdCBzeW5jZWQgd2l0aCB0aGUgc3lzdGVtIGNsb2NrICovCiAKIC8qCiAgKiBUaW1lIHN0YW1wIHJlc29sdXRpb24gdHlwZXMuCkBAIC00MDQsMTMgKzUxMSwyNSBAQAogI2RlZmluZSBQQ0FQX1RTVEFNUF9QUkVDSVNJT05fTUlDUk8JMAkvKiB1c2UgdGltZXN0YW1wcyB3aXRoIG1pY3Jvc2Vjb25kIHByZWNpc2lvbiwgZGVmYXVsdCAqLwogI2RlZmluZSBQQ0FQX1RTVEFNUF9QUkVDSVNJT05fTkFOTwkxCS8qIHVzZSB0aW1lc3RhbXBzIHdpdGggbmFub3NlY29uZCBwcmVjaXNpb24gKi8KIAorUENBUF9BVkFJTEFCTEVfMF80CiBQQ0FQX0FQSSBwY2FwX3QJKnBjYXBfb3Blbl9saXZlKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIGludCwgY2hhciAqKTsKKworUENBUF9BVkFJTEFCTEVfMF82CiBQQ0FQX0FQSSBwY2FwX3QJKnBjYXBfb3Blbl9kZWFkKGludCwgaW50KTsKKworUENBUF9BVkFJTEFCTEVfMV81CiBQQ0FQX0FQSSBwY2FwX3QJKnBjYXBfb3Blbl9kZWFkX3dpdGhfdHN0YW1wX3ByZWNpc2lvbihpbnQsIGludCwgdV9pbnQpOworCitQQ0FQX0FWQUlMQUJMRV8xXzUKIFBDQVBfQVBJIHBjYXBfdAkqcGNhcF9vcGVuX29mZmxpbmVfd2l0aF90c3RhbXBfcHJlY2lzaW9uKGNvbnN0IGNoYXIgKiwgdV9pbnQsIGNoYXIgKik7CisKK1BDQVBfQVZBSUxBQkxFXzBfNAogUENBUF9BUEkgcGNhcF90CSpwY2FwX29wZW5fb2ZmbGluZShjb25zdCBjaGFyICosIGNoYXIgKik7CisKICNpZmRlZiBfV0lOMzIKKyAgUENBUF9BVkFJTEFCTEVfMV81CiAgIFBDQVBfQVBJIHBjYXBfdCAgKnBjYXBfaG9wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24oaW50cHRyX3QsIHVfaW50LCBjaGFyICopOworCiAgIFBDQVBfQVBJIHBjYXBfdCAgKnBjYXBfaG9wZW5fb2ZmbGluZShpbnRwdHJfdCwgY2hhciAqKTsKICAgLyoKICAgICogSWYgd2UncmUgYnVpbGRpbmcgbGlicGNhcCwgdGhlc2UgYXJlIGludGVybmFsIHJvdXRpbmVzIGluIHNhdmVmaWxlLmMsCkBAIC00MzIsNjcgKzU1MSwyMDAgQEAKIAlwY2FwX2hvcGVuX29mZmxpbmUoX2dldF9vc2ZoYW5kbGUoX2ZpbGVubyhmKSksIGIpCiAgICNlbmRpZgogI2Vsc2UgLypfV0lOMzIqLworICBQQ0FQX0FWQUlMQUJMRV8xXzUKICAgUENBUF9BUEkgcGNhcF90CSpwY2FwX2ZvcGVuX29mZmxpbmVfd2l0aF90c3RhbXBfcHJlY2lzaW9uKEZJTEUgKiwgdV9pbnQsIGNoYXIgKik7CisKKyAgUENBUF9BVkFJTEFCTEVfMF85CiAgIFBDQVBfQVBJIHBjYXBfdAkqcGNhcF9mb3Blbl9vZmZsaW5lKEZJTEUgKiwgY2hhciAqKTsKICNlbmRpZiAvKl9XSU4zMiovCiAKK1BDQVBfQVZBSUxBQkxFXzBfNAogUENBUF9BUEkgdm9pZAlwY2FwX2Nsb3NlKHBjYXBfdCAqKTsKKworUENBUF9BVkFJTEFCTEVfMF80CiBQQ0FQX0FQSSBpbnQJcGNhcF9sb29wKHBjYXBfdCAqLCBpbnQsIHBjYXBfaGFuZGxlciwgdV9jaGFyICopOworCitQQ0FQX0FWQUlMQUJMRV8wXzQKIFBDQVBfQVBJIGludAlwY2FwX2Rpc3BhdGNoKHBjYXBfdCAqLCBpbnQsIHBjYXBfaGFuZGxlciwgdV9jaGFyICopOworCitQQ0FQX0FWQUlMQUJMRV8wXzQKIFBDQVBfQVBJIGNvbnN0IHVfY2hhciAqcGNhcF9uZXh0KHBjYXBfdCAqLCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKik7CisKK1BDQVBfQVZBSUxBQkxFXzBfOAogUENBUF9BUEkgaW50IAlwY2FwX25leHRfZXgocGNhcF90ICosIHN0cnVjdCBwY2FwX3BrdGhkciAqKiwgY29uc3QgdV9jaGFyICoqKTsKKworUENBUF9BVkFJTEFCTEVfMF84CiBQQ0FQX0FQSSB2b2lkCXBjYXBfYnJlYWtsb29wKHBjYXBfdCAqKTsKKworUENBUF9BVkFJTEFCTEVfMF80CiBQQ0FQX0FQSSBpbnQJcGNhcF9zdGF0cyhwY2FwX3QgKiwgc3RydWN0IHBjYXBfc3RhdCAqKTsKKworUENBUF9BVkFJTEFCTEVfMF80CiBQQ0FQX0FQSSBpbnQJcGNhcF9zZXRmaWx0ZXIocGNhcF90ICosIHN0cnVjdCBicGZfcHJvZ3JhbSAqKTsKKworUENBUF9BVkFJTEFCTEVfMF85CiBQQ0FQX0FQSSBpbnQgCXBjYXBfc2V0ZGlyZWN0aW9uKHBjYXBfdCAqLCBwY2FwX2RpcmVjdGlvbl90KTsKKworUENBUF9BVkFJTEFCTEVfMF83CiBQQ0FQX0FQSSBpbnQJcGNhcF9nZXRub25ibG9jayhwY2FwX3QgKiwgY2hhciAqKTsKKworUENBUF9BVkFJTEFCTEVfMF83CiBQQ0FQX0FQSSBpbnQJcGNhcF9zZXRub25ibG9jayhwY2FwX3QgKiwgaW50LCBjaGFyICopOworCitQQ0FQX0FWQUlMQUJMRV8wXzkKIFBDQVBfQVBJIGludAlwY2FwX2luamVjdChwY2FwX3QgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOworCitQQ0FQX0FWQUlMQUJMRV8wXzgKIFBDQVBfQVBJIGludAlwY2FwX3NlbmRwYWNrZXQocGNhcF90ICosIGNvbnN0IHVfY2hhciAqLCBpbnQpOworCitQQ0FQX0FWQUlMQUJMRV8xXzAKIFBDQVBfQVBJIGNvbnN0IGNoYXIgKnBjYXBfc3RhdHVzdG9zdHIoaW50KTsKKworUENBUF9BVkFJTEFCTEVfMF80CiBQQ0FQX0FQSSBjb25zdCBjaGFyICpwY2FwX3N0cmVycm9yKGludCk7CisKK1BDQVBfQVZBSUxBQkxFXzBfNAogUENBUF9BUEkgY2hhcgkqcGNhcF9nZXRlcnIocGNhcF90ICopOworCitQQ0FQX0FWQUlMQUJMRV8wXzQKIFBDQVBfQVBJIHZvaWQJcGNhcF9wZXJyb3IocGNhcF90ICosIGNvbnN0IGNoYXIgKik7CisKK1BDQVBfQVZBSUxBQkxFXzBfNAogUENBUF9BUEkgaW50CXBjYXBfY29tcGlsZShwY2FwX3QgKiwgc3RydWN0IGJwZl9wcm9ncmFtICosIGNvbnN0IGNoYXIgKiwgaW50LAogCSAgICBicGZfdV9pbnQzMik7CisKK1BDQVBfQVZBSUxBQkxFXzBfNQogUENBUF9BUEkgaW50CXBjYXBfY29tcGlsZV9ub3BjYXAoaW50LCBpbnQsIHN0cnVjdCBicGZfcHJvZ3JhbSAqLAogCSAgICBjb25zdCBjaGFyICosIGludCwgYnBmX3VfaW50MzIpOworCisvKiBYWFggLSB0aGlzIHRvb2sgdHdvIGFyZ3VtZW50cyBpbiAwLjQgYW5kIDAuNSAqLworUENBUF9BVkFJTEFCTEVfMF82CiBQQ0FQX0FQSSB2b2lkCXBjYXBfZnJlZWNvZGUoc3RydWN0IGJwZl9wcm9ncmFtICopOworCitQQ0FQX0FWQUlMQUJMRV8xXzAKIFBDQVBfQVBJIGludAlwY2FwX29mZmxpbmVfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqLAogCSAgICBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKiwgY29uc3QgdV9jaGFyICopOworCitQQ0FQX0FWQUlMQUJMRV8wXzQKIFBDQVBfQVBJIGludAlwY2FwX2RhdGFsaW5rKHBjYXBfdCAqKTsKKworUENBUF9BVkFJTEFCTEVfMV8wCiBQQ0FQX0FQSSBpbnQJcGNhcF9kYXRhbGlua19leHQocGNhcF90ICopOworCitQQ0FQX0FWQUlMQUJMRV8wXzgKIFBDQVBfQVBJIGludAlwY2FwX2xpc3RfZGF0YWxpbmtzKHBjYXBfdCAqLCBpbnQgKiopOworCitQQ0FQX0FWQUlMQUJMRV8wXzgKIFBDQVBfQVBJIGludAlwY2FwX3NldF9kYXRhbGluayhwY2FwX3QgKiwgaW50KTsKKworUENBUF9BVkFJTEFCTEVfMF84CiBQQ0FQX0FQSSB2b2lkCXBjYXBfZnJlZV9kYXRhbGlua3MoaW50ICopOworCitQQ0FQX0FWQUlMQUJMRV8wXzgKIFBDQVBfQVBJIGludAlwY2FwX2RhdGFsaW5rX25hbWVfdG9fdmFsKGNvbnN0IGNoYXIgKik7CisKK1BDQVBfQVZBSUxBQkxFXzBfOAogUENBUF9BUEkgY29uc3QgY2hhciAqcGNhcF9kYXRhbGlua192YWxfdG9fbmFtZShpbnQpOworCitQQ0FQX0FWQUlMQUJMRV8wXzgKIFBDQVBfQVBJIGNvbnN0IGNoYXIgKnBjYXBfZGF0YWxpbmtfdmFsX3RvX2Rlc2NyaXB0aW9uKGludCk7CisKK1BDQVBfQVZBSUxBQkxFXzFfMTAKK1BDQVBfQVBJIGNvbnN0IGNoYXIgKnBjYXBfZGF0YWxpbmtfdmFsX3RvX2Rlc2NyaXB0aW9uX29yX2RsdChpbnQpOworCitQQ0FQX0FWQUlMQUJMRV8wXzQKIFBDQVBfQVBJIGludAlwY2FwX3NuYXBzaG90KHBjYXBfdCAqKTsKKworUENBUF9BVkFJTEFCTEVfMF80CiBQQ0FQX0FQSSBpbnQJcGNhcF9pc19zd2FwcGVkKHBjYXBfdCAqKTsKKworUENBUF9BVkFJTEFCTEVfMF80CiBQQ0FQX0FQSSBpbnQJcGNhcF9tYWpvcl92ZXJzaW9uKHBjYXBfdCAqKTsKKworUENBUF9BVkFJTEFCTEVfMF80CiBQQ0FQX0FQSSBpbnQJcGNhcF9taW5vcl92ZXJzaW9uKHBjYXBfdCAqKTsKKworUENBUF9BVkFJTEFCTEVfMV85CiBQQ0FQX0FQSSBpbnQJcGNhcF9idWZzaXplKHBjYXBfdCAqKTsKIAogLyogWFhYICovCitQQ0FQX0FWQUlMQUJMRV8wXzQKIFBDQVBfQVBJIEZJTEUJKnBjYXBfZmlsZShwY2FwX3QgKik7CisKKyNpZmRlZiBfV0lOMzIKKy8qCisgKiBUaGlzIHByb2JhYmx5IHNob3VsZG4ndCBoYXZlIGJlZW4ga2VwdCBpbiBXaW5QY2FwOyBtb3N0IGlmIG5vdCBhbGwKKyAqIFVOKlggY29kZSB0aGF0IHVzZWQgaXQgd29uJ3Qgd29yayBvbiBXaW5kb3dzLiAgV2UgZGVwcmVjYXRlIGl0OyBpZgorICogYW55Ym9keSByZWFsbHkgbmVlZHMgYWNjZXNzIHRvIHdoYXRldmVyIEhBTkRMRSBtYXkgYmUgYXNzb2NpYXRlZAorICogd2l0aCBhIHBjYXBfdCAodGhlcmUncyBubyBndWFyYW50ZWUgdGhhdCB0aGVyZSBpcyBvbmUpLCB3ZSBjYW4gYWRkCisgKiBhIFdpbmRvd3Mtb25seSBwY2FwX2hhbmRsZSgpIEFQSSB0aGF0IHJldHVybnMgdGhlIEhBTkRMRS4KKyAqLworUENBUF9BVkFJTEFCTEVfMF80CitQQ0FQX0FQSSBpbnQJcGNhcF9maWxlbm8ocGNhcF90ICopCitQQ0FQX0RFUFJFQ0FURUQocGNhcF9maWxlbm8sICJ1c2UgJ3BjYXBfaGFuZGxlJyIpOworI2Vsc2UgLyogX1dJTjMyICovCitQQ0FQX0FWQUlMQUJMRV8wXzQKIFBDQVBfQVBJIGludAlwY2FwX2ZpbGVubyhwY2FwX3QgKik7CisjZW5kaWYgLyogX1dJTjMyICovCiAKICNpZmRlZiBfV0lOMzIKICAgUENBUF9BUEkgaW50CXBjYXBfd3NvY2tpbml0KHZvaWQpOwogI2VuZGlmCiAKK1BDQVBfQVZBSUxBQkxFXzBfNAogUENBUF9BUEkgcGNhcF9kdW1wZXJfdCAqcGNhcF9kdW1wX29wZW4ocGNhcF90ICosIGNvbnN0IGNoYXIgKik7Ci1QQ0FQX0FQSSBwY2FwX2R1bXBlcl90ICpwY2FwX2R1bXBfZm9wZW4ocGNhcF90ICosIEZJTEUgKmZwKTsKKworI2lmZGVmIF9XSU4zMgorICBQQ0FQX0FWQUlMQUJMRV8wXzkKKyAgUENBUF9BUEkgcGNhcF9kdW1wZXJfdCAqcGNhcF9kdW1wX2hvcGVuKHBjYXBfdCAqLCBpbnRwdHJfdCk7CisKKyAgLyoKKyAgICogSWYgd2UncmUgYnVpbGRpbmcgbGlicGNhcCwgdGhpcyBpcyBhbiBpbnRlcm5hbCByb3V0aW5lIGluIHNmLXBjYXAuYywgc28KKyAgICogd2UgbXVzdCBub3QgZGVmaW5lIGl0IGFzIGEgbWFjcm8uCisgICAqCisgICAqIElmIHdlJ3JlIG5vdCBidWlsZGluZyBsaWJwY2FwLCBnaXZlbiB0aGF0IHRoZSB2ZXJzaW9uIG9mIHRoZSBDIHJ1bnRpbWUKKyAgICogd2l0aCB3aGljaCBsaWJwY2FwIHdhcyBidWlsdCBtaWdodCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgdmVyc2lvbgorICAgKiBvZiB0aGUgQyBydW50aW1lIHdpdGggd2hpY2ggYW4gYXBwbGljYXRpb24gdXNpbmcgbGlicGNhcCB3YXMgYnVpbHQsCisgICAqIGFuZCB0aGF0IGEgRklMRSBzdHJ1Y3R1cmUgbWF5IGRpZmZlciBiZXR3ZWVuIHRoZSB0d28gdmVyc2lvbnMgb2YgdGhlCisgICAqIEMgcnVudGltZSwgY2FsbHMgdG8gX2ZpbGVubygpIG11c3QgdXNlIHRoZSB2ZXJzaW9uIG9mIF9maWxlbm8oKSBpbgorICAgKiB0aGUgQyBydW50aW1lIHVzZWQgdG8gb3BlbiB0aGUgRklMRSAqLCBub3QgdGhlIHZlcnNpb24gaW4gdGhlIEMKKyAgICogcnVudGltZSB3aXRoIHdoaWNoIGxpYnBjYXAgd2FzIGJ1aWx0LiAgKE1heWJlIG9uY2UgdGhlIFVuaXZlcnNhbCBDUlQKKyAgICogcnVsZXMgdGhlIHdvcmxkLCB0aGlzIHdpbGwgY2Vhc2UgdG8gYmUgYSBwcm9ibGVtLikKKyAgICovCisgICNpZm5kZWYgQlVJTERJTkdfUENBUAorICAgICNkZWZpbmUgcGNhcF9kdW1wX2ZvcGVuKHAsZikgXAorCXBjYXBfZHVtcF9ob3BlbihwLCBfZ2V0X29zZmhhbmRsZShfZmlsZW5vKGYpKSkKKyAgI2VuZGlmCisjZWxzZSAvKl9XSU4zMiovCisgIFBDQVBfQVZBSUxBQkxFXzBfOQorICBQQ0FQX0FQSSBwY2FwX2R1bXBlcl90ICpwY2FwX2R1bXBfZm9wZW4ocGNhcF90ICosIEZJTEUgKmZwKTsKKyNlbmRpZiAvKl9XSU4zMiovCisKK1BDQVBfQVZBSUxBQkxFXzFfNwogUENBUF9BUEkgcGNhcF9kdW1wZXJfdCAqcGNhcF9kdW1wX29wZW5fYXBwZW5kKHBjYXBfdCAqLCBjb25zdCBjaGFyICopOworCitQQ0FQX0FWQUlMQUJMRV8wXzgKIFBDQVBfQVBJIEZJTEUJKnBjYXBfZHVtcF9maWxlKHBjYXBfZHVtcGVyX3QgKik7CisKK1BDQVBfQVZBSUxBQkxFXzBfOQogUENBUF9BUEkgbG9uZwlwY2FwX2R1bXBfZnRlbGwocGNhcF9kdW1wZXJfdCAqKTsKKworUENBUF9BVkFJTEFCTEVfMV85CiBQQ0FQX0FQSSBpbnQ2NF90CXBjYXBfZHVtcF9mdGVsbDY0KHBjYXBfZHVtcGVyX3QgKik7CisKK1BDQVBfQVZBSUxBQkxFXzBfOAogUENBUF9BUEkgaW50CXBjYXBfZHVtcF9mbHVzaChwY2FwX2R1bXBlcl90ICopOworCitQQ0FQX0FWQUlMQUJMRV8wXzQKIFBDQVBfQVBJIHZvaWQJcGNhcF9kdW1wX2Nsb3NlKHBjYXBfZHVtcGVyX3QgKik7CisKK1BDQVBfQVZBSUxBQkxFXzBfNAogUENBUF9BUEkgdm9pZAlwY2FwX2R1bXAodV9jaGFyICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7CiAKK1BDQVBfQVZBSUxBQkxFXzBfNwogUENBUF9BUEkgaW50CXBjYXBfZmluZGFsbGRldnMocGNhcF9pZl90ICoqLCBjaGFyICopOworCitQQ0FQX0FWQUlMQUJMRV8wXzcKIFBDQVBfQVBJIHZvaWQJcGNhcF9mcmVlYWxsZGV2cyhwY2FwX2lmX3QgKik7CiAKIC8qCkBAIC01MDAsNyArNzUyLDcgQEAKICAqIHZlcnNpb24gc3RyaW5nIGRpcmVjdGx5LgogICoKICAqIE9uIGF0IGxlYXN0IHNvbWUgVU5JWGVzLCBpZiB5b3UgaW1wb3J0IGRhdGEgZnJvbSBhIHNoYXJlZCBsaWJyYXJ5IGludG8KLSAqIGFuIHByb2dyYW0sIHRoZSBkYXRhIGlzIGJvdW5kIGludG8gdGhlIHByb2dyYW0gYmluYXJ5LCBzbyBpZiB0aGUgc3RyaW5nCisgKiBhIHByb2dyYW0sIHRoZSBkYXRhIGlzIGJvdW5kIGludG8gdGhlIHByb2dyYW0gYmluYXJ5LCBzbyBpZiB0aGUgc3RyaW5nCiAgKiBpbiB0aGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSB3aXRoIHdoaWNoIHRoZSBwcm9ncmFtIHdhcyBsaW5rZWQgaXNuJ3QKICAqIHRoZSBzYW1lIGFzIHRoZSBzdHJpbmcgaW4gdGhlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgd2l0aCB3aGljaCB0aGUKICAqIHByb2dyYW0gaXMgYmVpbmcgcnVuLCB2YXJpb3VzIHVuZGVzaXJhYmxlIHRoaW5ncyBtYXkgaGFwcGVuICh3YXJuaW5ncywKQEAgLTUxMCwyMiArNzYyLDkgQEAKICAqCiAgKiBPbiBXaW5kb3dzLCB0aGUgc3RyaW5nIGlzIGNvbnN0cnVjdGVkIGF0IHJ1biB0aW1lLgogICovCitQQ0FQX0FWQUlMQUJMRV8wXzgKIFBDQVBfQVBJIGNvbnN0IGNoYXIgKnBjYXBfbGliX3ZlcnNpb24odm9pZCk7CiAKLS8qCi0gKiBPbiBhdCBsZWFzdCBzb21lIHZlcnNpb25zIG9mIE5ldEJTRCBhbmQgUU5YLCB3ZSBkb24ndCB3YW50IHRvIGRlY2xhcmUKLSAqIGJwZl9maWx0ZXIoKSBoZXJlLCBhcyBpdCdzIGFsc28gYmUgZGVjbGFyZWQgaW4gPG5ldC9icGYuaD4sIHdpdGggYQotICogZGlmZmVyZW50IHNpZ25hdHVyZSwgYnV0LCBvbiBvdGhlciBCU0QtZmxhdm9yZWQgVU4qWGVzLCBpdCdzIG5vdAotICogZGVjbGFyZWQgaW4gPG5ldC9icGYuaD4sIHNvIHdlICpkbyogd2FudCB0byBkZWNsYXJlIGl0IGhlcmUsIHNvIGl0J3MKLSAqIGRlY2xhcmVkIHdoZW4gd2UgYnVpbGQgcGNhcC1icGYuYy4KLSAqLwotI2lmICFkZWZpbmVkKF9fTmV0QlNEX18pICYmICFkZWZpbmVkKF9fUU5YX18pCi0gIFBDQVBfQVBJIHVfaW50CWJwZl9maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgdV9pbnQpOwotI2VuZGlmCi1QQ0FQX0FQSSBpbnQJYnBmX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqZiwgaW50IGxlbik7Ci1QQ0FQX0FQSSBjaGFyCSpicGZfaW1hZ2UoY29uc3Qgc3RydWN0IGJwZl9pbnNuICosIGludCk7Ci1QQ0FQX0FQSSB2b2lkCWJwZl9kdW1wKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqLCBpbnQpOwotCiAjaWYgZGVmaW5lZChfV0lOMzIpCiAKICAgLyoKQEAgLTU1OSw3ICs3OTgsMTAgQEAKIAogICBQQ0FQX0FQSSBIQU5ETEUgcGNhcF9nZXRldmVudChwY2FwX3QgKnApOwogCisgIFBDQVBfQVZBSUxBQkxFXzFfOAogICBQQ0FQX0FQSSBpbnQgcGNhcF9vaWRfZ2V0X3JlcXVlc3QocGNhcF90ICosIGJwZl91X2ludDMyLCB2b2lkICosIHNpemVfdCAqKTsKKworICBQQ0FQX0FWQUlMQUJMRV8xXzgKICAgUENBUF9BUEkgaW50IHBjYXBfb2lkX3NldF9yZXF1ZXN0KHBjYXBfdCAqLCBicGZfdV9pbnQzMiwgY29uc3Qgdm9pZCAqLCBzaXplX3QgKik7CiAKICAgUENBUF9BUEkgcGNhcF9zZW5kX3F1ZXVlKiBwY2FwX3NlbmRxdWV1ZV9hbGxvYyh1X2ludCBtZW1zaXplKTsKQEAgLTYwMiw4ICs4NDQsMTEgQEAKICAgICogVU4qWCBkZWZpbml0aW9ucwogICAgKi8KIAorICBQQ0FQX0FWQUlMQUJMRV8wXzgKICAgUENBUF9BUEkgaW50CXBjYXBfZ2V0X3NlbGVjdGFibGVfZmQocGNhcF90ICopOwotICBQQ0FQX0FQSSBzdHJ1Y3QgdGltZXZhbCAqcGNhcF9nZXRfcmVxdWlyZWRfc2VsZWN0X3RpbWVvdXQocGNhcF90ICopOworCisgIFBDQVBfQVZBSUxBQkxFXzFfOQorICBQQ0FQX0FQSSBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqcGNhcF9nZXRfcmVxdWlyZWRfc2VsZWN0X3RpbWVvdXQocGNhcF90ICopOwogCiAjZW5kaWYgLyogX1dJTjMyL01TRE9TL1VOKlggKi8KIApAQCAtNjM2LDE0ICs4ODEsMTcgQEAKICAqIC0gcnBjYXA6Ly9kZXZpY2VuYW1lIFtvcGVucyB0aGUgc2VsZWN0ZWQgZGV2aWNlIGRldmljZXMgYXZhaWxhYmxlIG9uIHRoZSBsb2NhbCBob3N0LCB3aXRob3V0IHVzaW5nIHRoZSBSUENBUCBwcm90b2NvbF0KICAqIC0gcnBjYXA6Ly9ob3N0L2RldmljZW5hbWUgW29wZW5zIHRoZSBzZWxlY3RlZCBkZXZpY2UgYXZhaWxhYmxlIG9uIGEgcmVtb3RlIGhvc3RdCiAgKiAtIHJwY2FwOi8vaG9zdDpwb3J0L2RldmljZW5hbWUgW29wZW5zIHRoZSBzZWxlY3RlZCBkZXZpY2UgYXZhaWxhYmxlIG9uIGEgcmVtb3RlIGhvc3QsIHVzaW5nIGEgbm9uLXN0YW5kYXJkIHBvcnQgZm9yIFJQQ0FQXQotICogLSBhZGFwdGVybmFtZSBbdG8gb3BlbiBhIGxvY2FsIGFkYXB0ZXI7IGtlcHQgZm9yIGNvbXBhYmlsaXR5LCBidXQgaXQgaXMgc3Ryb25nbHkgZGlzY291cmFnZWRdCi0gKiAtIChOVUxMKSBbdG8gb3BlbiB0aGUgZmlyc3QgbG9jYWwgYWRhcHRlcjsga2VwdCBmb3IgY29tcGFiaWxpdHksIGJ1dCBpdCBpcyBzdHJvbmdseSBkaXNjb3VyYWdlZF0KKyAqIC0gYWRhcHRlcm5hbWUgW3RvIG9wZW4gYSBsb2NhbCBhZGFwdGVyOyBrZXB0IGZvciBjb21wYXRpYmlsaXR5LCBidXQgaXQgaXMgc3Ryb25nbHkgZGlzY291cmFnZWRdCisgKiAtIChOVUxMKSBbdG8gb3BlbiB0aGUgZmlyc3QgbG9jYWwgYWRhcHRlcjsga2VwdCBmb3IgY29tcGF0aWJpbGl0eSwgYnV0IGl0IGlzIHN0cm9uZ2x5IGRpc2NvdXJhZ2VkXQogICoKICAqIFRoZSBmb3JtYXRzIGFsbG93ZWQgYnkgdGhlIHBjYXBfZmluZGFsbGRldnNfZXgoKSBhcmUgdGhlIGZvbGxvd2luZzoKICAqIC0gZmlsZTovL2ZvbGRlci8gW2xpc3RzIGFsbCB0aGUgZmlsZXMgaW4gdGhlIGdpdmVuIGZvbGRlcl0KICAqIC0gcnBjYXA6Ly8gW2xpc3RzIGFsbCBsb2NhbCBhZGFwdGVyc10KICAqIC0gcnBjYXA6Ly9ob3N0OnBvcnQvIFtsaXN0cyB0aGUgZGV2aWNlcyBhdmFpbGFibGUgb24gYSByZW1vdGUgaG9zdF0KICAqCisgKiBJbiBhbGwgdGhlIGFib3ZlLCAicnBjYXBzOi8vIiBjYW4gYmUgc3Vic3RpdHV0ZWQgZm9yICJycGNhcDovLyIgdG8gZW5hYmxlCisgKiBTU0wgKGlmIGl0IGhhcyBiZWVuIGNvbXBpbGVkIGluKS4KKyAqCiAgKiBSZWZlcnJpbmcgdG8gdGhlICdob3N0JyBhbmQgJ3BvcnQnIHBhcmFtZXRlcnMsIHRoZXkgY2FuIGJlIGVpdGhlciBudW1lcmljIG9yIGxpdGVyYWwuIFNpbmNlCiAgKiBJUHY2IGlzIGZ1bGx5IHN1cHBvcnRlZCwgdGhlc2UgYXJlIHRoZSBhbGxvd2VkIGZvcm1hdHM6CiAgKgpAQCAtNzA0LDcgKzk1Miw3IEBACiAjZGVmaW5lIFBDQVBfT1BFTkZMQUdfREFUQVRYX1VEUAkJMHgwMDAwMDAwMgogCiAvKgotICogU3BlY2lmaWVzIHdoZWV0aGVyIHRoZSByZW1vdGUgcHJvYmUgd2lsbCBjYXB0dXJlIGl0cyBvd24gZ2VuZXJhdGVkCisgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgcmVtb3RlIHByb2JlIHdpbGwgY2FwdHVyZSBpdHMgb3duIGdlbmVyYXRlZAogICogdHJhZmZpYy4KICAqCiAgKiBJbiBjYXNlIHRoZSByZW1vdGUgcHJvYmUgdXNlcyB0aGUgc2FtZSBpbnRlcmZhY2UgdG8gY2FwdHVyZSB0cmFmZmljCkBAIC03NzMsNyArMTAyMSw3IEBACiAjZGVmaW5lIFJQQ0FQX1JNVEFVVEhfUFdEIDEKIAogLyoKLSAqIFRoaXMgc3RydWN0dXJlIGtlZXBzIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gYXV0aGV0aWNhdGUgdGhlIHVzZXIKKyAqIFRoaXMgc3RydWN0dXJlIGtlZXBzIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gYXV0aGVudGljYXRlIHRoZSB1c2VyCiAgKiBvbiBhIHJlbW90ZSBtYWNoaW5lLgogICoKICAqIFRoZSByZW1vdGUgbWFjaGluZSBjYW4gZWl0aGVyIGdyYW50IG9yIHJlZnVzZSB0aGUgYWNjZXNzIGFjY29yZGluZwpAQCAtODMyLDEwICsxMDgwLDE1IEBACiAgKiBGb3Igb3BlbmluZyBhIHJlbW90ZSBjYXB0dXJlLCBwY2FwX29wZW4oKSBpcyBjdXJyZW50bHkgdGhlIG9ubHkKICAqIEFQSSBhdmFpbGFibGUuCiAgKi8KK1BDQVBfQVZBSUxBQkxFXzFfOQogUENBUF9BUEkgcGNhcF90CSpwY2FwX29wZW4oY29uc3QgY2hhciAqc291cmNlLCBpbnQgc25hcGxlbiwgaW50IGZsYWdzLAogCSAgICBpbnQgcmVhZF90aW1lb3V0LCBzdHJ1Y3QgcGNhcF9ybXRhdXRoICphdXRoLCBjaGFyICplcnJidWYpOworCitQQ0FQX0FWQUlMQUJMRV8xXzkKIFBDQVBfQVBJIGludAlwY2FwX2NyZWF0ZXNyY3N0cihjaGFyICpzb3VyY2UsIGludCB0eXBlLCBjb25zdCBjaGFyICpob3N0LAogCSAgICBjb25zdCBjaGFyICpwb3J0LCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICplcnJidWYpOworCitQQ0FQX0FWQUlMQUJMRV8xXzkKIFBDQVBfQVBJIGludAlwY2FwX3BhcnNlc3Jjc3RyKGNvbnN0IGNoYXIgKnNvdXJjZSwgaW50ICp0eXBlLCBjaGFyICpob3N0LAogCSAgICBjaGFyICpwb3J0LCBjaGFyICpuYW1lLCBjaGFyICplcnJidWYpOwogCkBAIC04NTgsOCArMTExMSw5IEBACiAgKiBGb3IgbGlzdGluZyByZW1vdGUgY2FwdHVyZSBkZXZpY2VzLCBwY2FwX2ZpbmRhbGxkZXZzX2V4KCkgaXMgY3VycmVudGx5CiAgKiB0aGUgb25seSBBUEkgYXZhaWxhYmxlLgogICovCi1QQ0FQX0FQSSBpbnQJcGNhcF9maW5kYWxsZGV2c19leChjaGFyICpzb3VyY2UsIHN0cnVjdCBwY2FwX3JtdGF1dGggKmF1dGgsCi0JICAgIHBjYXBfaWZfdCAqKmFsbGRldnMsIGNoYXIgKmVycmJ1Zik7CitQQ0FQX0FWQUlMQUJMRV8xXzkKK1BDQVBfQVBJIGludAlwY2FwX2ZpbmRhbGxkZXZzX2V4KGNvbnN0IGNoYXIgKnNvdXJjZSwKKwkgICAgc3RydWN0IHBjYXBfcm10YXV0aCAqYXV0aCwgcGNhcF9pZl90ICoqYWxsZGV2cywgY2hhciAqZXJyYnVmKTsKIAogLyoKICAqIFNhbXBsaW5nIG1ldGhvZHMuCkBAIC05MjgsNiArMTE4Miw3IEBACiAvKgogICogTmV3IGZ1bmN0aW9ucy4KICAqLworUENBUF9BVkFJTEFCTEVfMV85CiBQQ0FQX0FQSSBzdHJ1Y3QgcGNhcF9zYW1wICpwY2FwX3NldHNhbXBsaW5nKHBjYXBfdCAqcCk7CiAKIC8qCkBAIC05MzcsMzMgKzExOTIsMjQgQEAKIC8qIE1heGltdW0gbGVuZ3RoIG9mIGFuIGhvc3QgbmFtZSAobmVlZGVkIGZvciB0aGUgUlBDQVAgYWN0aXZlIG1vZGUpICovCiAjZGVmaW5lIFJQQ0FQX0hPU1RMSVNUX1NJWkUgMTAyNAogCi0vKgotICogU29tZSBtaW5vciBkaWZmZXJlbmNlcyBiZXR3ZWVuIFVOKlggc29ja2V0cyBhbmQgYW5kIFdpbnNvY2sgc29ja2V0cy4KLSAqLwotI2lmbmRlZiBfV0lOMzIKLSAgLyohCi0gICAqIFxicmllZiBJbiBXaW5zb2NrLCBhIHNvY2tldCBoYW5kbGUgaXMgb2YgdHlwZSBTT0NLRVQ7IGluIFVOKlgsIGl0J3MKLSAgICogYSBmaWxlIGRlc2NyaXB0b3IsIGFuZCB0aGVyZWZvcmUgYSBzaWduZWQgaW50ZWdlci4KLSAgICogV2UgZGVmaW5lIFNPQ0tFVCB0byBiZSBhIHNpZ25lZCBpbnRlZ2VyIG9uIFVOKlgsIHNvIHRoYXQgaXQgY2FuCi0gICAqIGJlIHVzZWQgb24gYm90aCBwbGF0Zm9ybXMuCi0gICAqLwotICAjZGVmaW5lIFNPQ0tFVCBpbnQKLQotICAvKiEKLSAgICogXGJyaWVmIEluIFdpbnNvY2ssIHRoZSBlcnJvciByZXR1cm4gaWYgc29ja2V0KCkgZmFpbHMgaXMgSU5WQUxJRF9TT0NLRVQ7Ci0gICAqIGluIFVOKlgsIGl0J3MgLTEuCi0gICAqIFdlIGRlZmluZSBJTlZBTElEX1NPQ0tFVCB0byBiZSAtMSBvbiBVTipYLCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIG9uCi0gICAqIGJvdGggcGxhdGZvcm1zLgotICAgKi8KLSAgI2RlZmluZSBJTlZBTElEX1NPQ0tFVCAtMQotI2VuZGlmCi0KK1BDQVBfQVZBSUxBQkxFXzFfOQogUENBUF9BUEkgU09DS0VUCXBjYXBfcmVtb3RlYWN0X2FjY2VwdChjb25zdCBjaGFyICphZGRyZXNzLCBjb25zdCBjaGFyICpwb3J0LAogCSAgICBjb25zdCBjaGFyICpob3N0bGlzdCwgY2hhciAqY29ubmVjdGluZ2hvc3QsCiAJICAgIHN0cnVjdCBwY2FwX3JtdGF1dGggKmF1dGgsIGNoYXIgKmVycmJ1Zik7CisKK1BDQVBfQVZBSUxBQkxFXzFfMTAKK1BDQVBfQVBJIFNPQ0tFVAlwY2FwX3JlbW90ZWFjdF9hY2NlcHRfZXgoY29uc3QgY2hhciAqYWRkcmVzcywgY29uc3QgY2hhciAqcG9ydCwKKwkgICAgY29uc3QgY2hhciAqaG9zdGxpc3QsIGNoYXIgKmNvbm5lY3Rpbmdob3N0LAorCSAgICBzdHJ1Y3QgcGNhcF9ybXRhdXRoICphdXRoLCBpbnQgdXNlc19zc2wsIGNoYXIgKmVycmJ1Zik7CisKK1BDQVBfQVZBSUxBQkxFXzFfOQogUENBUF9BUEkgaW50CXBjYXBfcmVtb3RlYWN0X2xpc3QoY2hhciAqaG9zdGxpc3QsIGNoYXIgc2VwLCBpbnQgc2l6ZSwKIAkgICAgY2hhciAqZXJyYnVmKTsKKworUENBUF9BVkFJTEFCTEVfMV85CiBQQ0FQX0FQSSBpbnQJcGNhcF9yZW1vdGVhY3RfY2xvc2UoY29uc3QgY2hhciAqaG9zdCwgY2hhciAqZXJyYnVmKTsKKworUENBUF9BVkFJTEFCTEVfMV85CiBQQ0FQX0FQSSB2b2lkCXBjYXBfcmVtb3RlYWN0X2NsZWFudXAodm9pZCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvcGNhcC9zbGwuaCBiL3BjYXAvc2xsLmgKaW5kZXggYzRkMDg4Ni4uMzkyZmFhZSAxMDA2NDQKLS0tIGEvcGNhcC9zbGwuaAorKysgYi9wY2FwL3NsbC5oCkBAIC03NCwyNyArNzQsNDQgQEAKICNpZm5kZWYgbGliX3BjYXBfc2xsX2gKICNkZWZpbmUgbGliX3BjYXBfc2xsX2gKIAorI2luY2x1ZGUgPHBjYXAvcGNhcC1pbnR0eXBlcy5oPgorCiAvKgogICogQSBETFRfTElOVVhfU0xMIGZha2UgbGluay1sYXllciBoZWFkZXIuCiAgKi8KICNkZWZpbmUgU0xMX0hEUl9MRU4JMTYJCS8qIHRvdGFsIGhlYWRlciBsZW5ndGggKi8KICNkZWZpbmUgU0xMX0FERFJMRU4JOAkJLyogbGVuZ3RoIG9mIGFkZHJlc3MgZmllbGQgKi8KIAotI2luY2x1ZGUgPHBjYXAvcGNhcC1pbnR0eXBlcy5oPgotCiBzdHJ1Y3Qgc2xsX2hlYWRlciB7CiAJdWludDE2X3Qgc2xsX3BrdHR5cGU7CQkvKiBwYWNrZXQgdHlwZSAqLwogCXVpbnQxNl90IHNsbF9oYXR5cGU7CQkvKiBsaW5rLWxheWVyIGFkZHJlc3MgdHlwZSAqLwogCXVpbnQxNl90IHNsbF9oYWxlbjsJCS8qIGxpbmstbGF5ZXIgYWRkcmVzcyBsZW5ndGggKi8KLQl1aW50OF90IHNsbF9hZGRyW1NMTF9BRERSTEVOXTsJLyogbGluay1sYXllciBhZGRyZXNzICovCisJdWludDhfdCAgc2xsX2FkZHJbU0xMX0FERFJMRU5dOwkvKiBsaW5rLWxheWVyIGFkZHJlc3MgKi8KIAl1aW50MTZfdCBzbGxfcHJvdG9jb2w7CQkvKiBwcm90b2NvbCAqLwogfTsKIAogLyoKLSAqIFRoZSBMSU5VWF9TTExfIHZhbHVlcyBmb3IgInNsbF9wa3R0eXBlIjsgdGhlc2UgY29ycmVzcG9uZCB0byB0aGUKLSAqIFBBQ0tFVF8gdmFsdWVzIG9uIExpbnV4LCBidXQgYXJlIGRlZmluZWQgaGVyZSBzbyB0aGF0IHRoZXkncmUKLSAqIGF2YWlsYWJsZSBldmVuIG9uIHN5c3RlbXMgb3RoZXIgdGhhbiBMaW51eCwgYW5kIHNvIHRoYXQgdGhleQotICogZG9uJ3QgY2hhbmdlIGV2ZW4gaWYgdGhlIFBBQ0tFVF8gdmFsdWVzIGNoYW5nZS4KKyAqIEEgRExUX0xJTlVYX1NMTDIgZmFrZSBsaW5rLWxheWVyIGhlYWRlci4KKyAqLworI2RlZmluZSBTTEwyX0hEUl9MRU4JMjAJCS8qIHRvdGFsIGhlYWRlciBsZW5ndGggKi8KKworc3RydWN0IHNsbDJfaGVhZGVyIHsKKwl1aW50MTZfdCBzbGwyX3Byb3RvY29sOwkJCS8qIHByb3RvY29sICovCisJdWludDE2X3Qgc2xsMl9yZXNlcnZlZF9tYno7CQkvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworCXVpbnQzMl90IHNsbDJfaWZfaW5kZXg7CQkJLyogMS1iYXNlZCBpbnRlcmZhY2UgaW5kZXggKi8KKwl1aW50MTZfdCBzbGwyX2hhdHlwZTsJCQkvKiBsaW5rLWxheWVyIGFkZHJlc3MgdHlwZSAqLworCXVpbnQ4X3QgIHNsbDJfcGt0dHlwZTsJCQkvKiBwYWNrZXQgdHlwZSAqLworCXVpbnQ4X3QgIHNsbDJfaGFsZW47CQkJLyogbGluay1sYXllciBhZGRyZXNzIGxlbmd0aCAqLworCXVpbnQ4X3QgIHNsbDJfYWRkcltTTExfQUREUkxFTl07CS8qIGxpbmstbGF5ZXIgYWRkcmVzcyAqLworfTsKKworLyoKKyAqIFRoZSBMSU5VWF9TTExfIHZhbHVlcyBmb3IgInNsbF9wa3R0eXBlIiBhbmQgTElOVVhfU0xMMl8gdmFsdWVzIGZvcgorICogInNsbDJfcGt0dHlwZSI7IHRoZXNlIGNvcnJlc3BvbmQgdG8gdGhlIFBBQ0tFVF8gdmFsdWVzIG9uIExpbnV4LAorICogd2hpY2ggYXJlIGRlZmluZWQgYnkgYSBoZWFkZXIgdW5kZXIgaW5jbHVkZS91YXBpIGluIHRoZSBjdXJyZW50CisgKiBrZXJuZWwgc291cmNlLCBhbmQgYXJlIHRodXMgbm90IGdvaW5nIHRvIGNoYW5nZSBvbiBMaW51eC4gIFdlCisgKiBkZWZpbmUgdGhlbSBoZXJlIHNvIHRoYXQgdGhleSdyZSBhdmFpbGFibGUgZXZlbiBvbiBzeXN0ZW1zIG90aGVyCisgKiB0aGFuIExpbnV4LgogICovCiAjZGVmaW5lIExJTlVYX1NMTF9IT1NUCQkwCiAjZGVmaW5lIExJTlVYX1NMTF9CUk9BRENBU1QJMQpAQCAtMTAzLDEwICsxMjAsMTEgQEAKICNkZWZpbmUgTElOVVhfU0xMX09VVEdPSU5HCTQKIAogLyoKLSAqIFRoZSBMSU5VWF9TTExfIHZhbHVlcyBmb3IgInNsbF9wcm90b2NvbCI7IHRoZXNlIGNvcnJlc3BvbmQgdG8gdGhlCi0gKiBFVEhfUF8gdmFsdWVzIG9uIExpbnV4LCBidXQgYXJlIGRlZmluZWQgaGVyZSBzbyB0aGF0IHRoZXkncmUKLSAqIGF2YWlsYWJsZSBldmVuIG9uIHN5c3RlbXMgb3RoZXIgdGhhbiBMaW51eC4gIFdlIGFzc3VtZSwgZm9yIG5vdywKLSAqIHRoYXQgdGhlIEVUSF9QXyB2YWx1ZXMgd29uJ3QgY2hhbmdlIGluIExpbnV4OyBpZiB0aGV5IGRvLCB0aGVuOgorICogVGhlIExJTlVYX1NMTF8gdmFsdWVzIGZvciAic2xsX3Byb3RvY29sIiBhbmQgTElOVVhfU0xMMl8gdmFsdWVzIGZvcgorICogInNsbDJfcHJvdG9jb2wiOyB0aGVzZSBjb3JyZXNwb25kIHRvIHRoZSBFVEhfUF8gdmFsdWVzIG9uIExpbnV4LCBidXQKKyAqIGFyZSBkZWZpbmVkIGhlcmUgc28gdGhhdCB0aGV5J3JlIGF2YWlsYWJsZSBldmVuIG9uIHN5c3RlbXMgb3RoZXIgdGhhbgorICogTGludXguICBXZSBhc3N1bWUsIGZvciBub3csIHRoYXQgdGhlIEVUSF9QXyB2YWx1ZXMgd29uJ3QgY2hhbmdlIGluCisgKiBMaW51eDsgaWYgdGhleSBkbywgdGhlbjoKICAqCiAgKglpZiB3ZSBkb24ndCB0cmFuc2xhdGUgdGhlbSBpbiAicGNhcC1saW51eC5jIiwgY2FwdHVyZSBmaWxlcwogICoJd29uJ3QgbmVjZXNzYXJpbHkgYmUgcmVhZGFibGUgaWYgY2FwdHVyZWQgb24gYSBzeXN0ZW0gdGhhdApkaWZmIC0tZ2l0IGEvcGNhcC9zb2NrZXQuaCBiL3BjYXAvc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUyZTM5MwotLS0gL2Rldi9udWxsCisrKyBiL3BjYXAvc29ja2V0LmgKQEAgLTAsMCArMSw4NCBAQAorLyogLSotIE1vZGU6IGM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogMTsgYy1iYXNpYy1vZmZzZXQ6IDg7IC0qLSAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIENvbXB1dGVyIFN5c3RlbXMKKyAqCUVuZ2luZWVyaW5nIEdyb3VwIGF0IExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciBvZiB0aGUgTGFib3JhdG9yeSBtYXkgYmUgdXNlZAorICogICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgbGliX3BjYXBfc29ja2V0X2gKKyNkZWZpbmUgbGliX3BjYXBfc29ja2V0X2gKKworLyoKKyAqIFNvbWUgbWlub3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBzb2NrZXRzIG9uIHZhcmlvdXMgcGxhdGZvcm1zLgorICogV2UgaW5jbHVkZSB3aGF0ZXZlciBzb2NrZXRzIGFyZSBuZWVkZWQgZm9yIEludGVybmV0LXByb3RvY29sCisgKiBzb2NrZXQgYWNjZXNzIG9uIFVOKlggYW5kIFdpbmRvd3MuCisgKi8KKyNpZmRlZiBfV0lOMzIKKyAgLyogTmVlZCB3aW5kZWYuaCBmb3IgZGVmaW5lcyB1c2VkIGluIHdpbnNvY2syLmggdW5kZXIgTWluZ1czMiAqLworICAjaWZkZWYgX19NSU5HVzMyX18KKyAgICAjaW5jbHVkZSA8d2luZGVmLmg+CisgICNlbmRpZgorICAjaW5jbHVkZSA8d2luc29jazIuaD4KKyAgI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisKKyAgLyoKKyAgICogV2luc29jayBkb2Vzbid0IGhhdmUgdGhpcyBQT1NJWCB0eXBlOyBpdCdzIHVzZWQgZm9yIHRoZQorICAgKiB0dl91c2VjIHZhbHVlIG9mIHN0cnVjdCB0aW1ldmFsLgorICAgKi8KKyAgdHlwZWRlZiBsb25nIHN1c2Vjb25kc190OworI2Vsc2UgLyogX1dJTjMyICovCisgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAgI2luY2x1ZGUgPG5ldGRiLmg+CQkvKiBmb3Igc3RydWN0IGFkZHJpbmZvL2dldGFkZHJpbmZvKCkgKi8KKyAgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4JLyogZm9yIHNvY2thZGRyX2luLCBpbiBCU0QgYXQgbGVhc3QgKi8KKyAgI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorCisgIC8qIQorICAgKiBcYnJpZWYgSW4gV2luc29jaywgYSBzb2NrZXQgaGFuZGxlIGlzIG9mIHR5cGUgU09DS0VUOyBpbiBVTipYLCBpdCdzCisgICAqIGEgZmlsZSBkZXNjcmlwdG9yLCBhbmQgdGhlcmVmb3JlIGEgc2lnbmVkIGludGVnZXIuCisgICAqIFdlIGRlZmluZSBTT0NLRVQgdG8gYmUgYSBzaWduZWQgaW50ZWdlciBvbiBVTipYLCBzbyB0aGF0IGl0IGNhbgorICAgKiBiZSB1c2VkIG9uIGJvdGggcGxhdGZvcm1zLgorICAgKi8KKyAgI2lmbmRlZiBTT0NLRVQKKyAgICAjZGVmaW5lIFNPQ0tFVCBpbnQKKyAgI2VuZGlmCisKKyAgLyohCisgICAqIFxicmllZiBJbiBXaW5zb2NrLCB0aGUgZXJyb3IgcmV0dXJuIGlmIHNvY2tldCgpIGZhaWxzIGlzIElOVkFMSURfU09DS0VUOworICAgKiBpbiBVTipYLCBpdCdzIC0xLgorICAgKiBXZSBkZWZpbmUgSU5WQUxJRF9TT0NLRVQgdG8gYmUgLTEgb24gVU4qWCwgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBvbgorICAgKiBib3RoIHBsYXRmb3Jtcy4KKyAgICovCisgICNpZm5kZWYgSU5WQUxJRF9TT0NLRVQKKyAgICAjZGVmaW5lIElOVkFMSURfU09DS0VUIC0xCisgICNlbmRpZgorI2VuZGlmIC8qIF9XSU4zMiAqLworCisjZW5kaWYgLyogbGliX3BjYXBfc29ja2V0X2ggKi8KZGlmZiAtLWdpdCBhL3BjYXBfYWN0aXZhdGUuM3BjYXAgYi9wY2FwX2FjdGl2YXRlLjNwY2FwCmluZGV4IGNlYjJhYTcuLjE2OWE3NTYgMTAwNjQ0Ci0tLSBhL3BjYXBfYWN0aXZhdGUuM3BjYXAKKysrIGIvcGNhcF9hY3RpdmF0ZS4zcGNhcApAQCAtMTcsNyArMTcsNyBAQAogLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAuXCIgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KIC5cIgotLlRIIFBDQVBfQUNUSVZBVEUgM1BDQVAgIjMxIEp1bHkgMjAxNiIKKy5USCBQQ0FQX0FDVElWQVRFIDNQQ0FQICIyNCBOb3ZlbWJlciAyMDE5IgogLlNIIE5BTUUKIHBjYXBfYWN0aXZhdGUgXC0gYWN0aXZhdGUgYSBjYXB0dXJlIGhhbmRsZQogLlNIIFNZTk9QU0lTCkBAIC0zMSwxMyArMzEsMTUgQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfYWN0aXZhdGUoKQorLkJSIHBjYXBfYWN0aXZhdGUgKCkKIGlzIHVzZWQgdG8gYWN0aXZhdGUgYSBwYWNrZXQgY2FwdHVyZSBoYW5kbGUgdG8gbG9vawogYXQgcGFja2V0cyBvbiB0aGUgbmV0d29yaywgd2l0aCB0aGUgb3B0aW9ucyB0aGF0IHdlcmUgc2V0IG9uIHRoZSBoYW5kbGUKIGJlaW5nIGluIGVmZmVjdC4KIC5TSCBSRVRVUk4gVkFMVUUKLS5CIHBjYXBfYWN0aXZhdGUoKQotcmV0dXJucyAwIG9uIHN1Y2Nlc3Mgd2l0aG91dCB3YXJuaW5ncywgYSBub24temVybyBwb3NpdGl2ZSB2YWx1ZSBvbgorLkJSIHBjYXBfYWN0aXZhdGUgKCkKK3JldHVybnMKKy5CIDAKK29uIHN1Y2Nlc3Mgd2l0aG91dCB3YXJuaW5ncywgYSBub24temVybyBwb3NpdGl2ZSB2YWx1ZSBvbgogc3VjY2VzcyB3aXRoIHdhcm5pbmdzLCBhbmQgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvci4KIEEgbm9uLXplcm8gcmV0dXJuIHZhbHVlIGluZGljYXRlcyB3aGF0IHdhcm5pbmcgb3IgZXJyb3IgY29uZGl0aW9uCiBvY2N1cnJlZC4KQEAgLTUwLDE1ICs1MiwxNSBAQAogLlRQCiAuQiBQQ0FQX1dBUk5JTkdfVFNUQU1QX1RZUEVfTk9UU1VQCiBUaGUgdGltZSBzdGFtcCB0eXBlIHNwZWNpZmllZCBpbiBhIHByZXZpb3VzCi0uQiBwY2FwX3NldF90c3RhbXBfdHlwZSgpCisuQlIgcGNhcF9zZXRfdHN0YW1wX3R5cGUgKDNQQ0FQKQogY2FsbCBpc24ndCBzdXBwb3J0ZWQgYnkgdGhlIGNhcHR1cmUgc291cmNlICh0aGUgdGltZSBzdGFtcCB0eXBlIGlzCiBsZWZ0IGFzIHRoZSBkZWZhdWx0KSwKIC5UUAogLkIgUENBUF9XQVJOSU5HCiBBbm90aGVyIHdhcm5pbmcgY29uZGl0aW9uIG9jY3VycmVkOwotLkIgcGNhcF9nZXRlcnIoKQorLkJSIHBjYXBfZ2V0ZXJyICgzUENBUCkKIG9yCi0uQiBwY2FwX3BlcnJvcigpCisuQlIgcGNhcF9wZXJyb3IgKDNQQ0FQKQogbWF5IGJlIGNhbGxlZCB3aXRoCiAuSSBwCiBhcyBhbiBhcmd1bWVudCB0byBmZXRjaCBvciBkaXNwbGF5IGEgbWVzc2FnZSBkZXNjcmliaW5nIHRoZSB3YXJuaW5nCkBAIC04OSw5ICs5MSw5IEBACiAuVFAKIC5CIFBDQVBfRVJST1IKIEFub3RoZXIgZXJyb3Igb2NjdXJyZWQuCi0uQiBwY2FwX2dldGVycigpCisuQlIgcGNhcF9nZXRlcnIgKCkKIG9yCi0uQiBwY2FwX3BlcnJvcigpCisuQlIgcGNhcF9wZXJyb3IgKCkKIG1heSBiZSBjYWxsZWQgd2l0aAogLkkgcAogYXMgYW4gYXJndW1lbnQgdG8gZmV0Y2ggb3IgZGlzcGxheSBhIG1lc3NhZ2UgZGVzY3JpYmluZyB0aGUgZXJyb3IuCkBAIC0xMDIsOSArMTA0LDkgQEAKIG9yCiAuQiBQQ0FQX0VSUk9SX1BFUk1fREVOSUVECiBpcyByZXR1cm5lZCwKLS5CIHBjYXBfZ2V0ZXJyKCkKKy5CUiBwY2FwX2dldGVyciAoKQogb3IKLS5CIHBjYXBfcGVycm9yKCkKKy5CUiBwY2FwX3BlcnJvciAoKQogbWF5IGJlIGNhbGxlZCB3aXRoCiAuSSBwCiBhcyBhbiBhcmd1bWVudCB0byBmZXRjaCBvciBkaXNwbGF5IGFuIG1lc3NhZ2UgZ2l2aW5nIGFkZGl0aW9uYWwgZGV0YWlscwpAQCAtMTE1LDggKzExNywxNSBAQAogc2hvdWxkIGNoZWNrIGZvciBwb3NpdGl2ZSwgbmVnYXRpdmUsIGFuZCB6ZXJvIHJldHVybiBjb2RlcywgYW5kIHRyZWF0CiBhbGwgcG9zaXRpdmUgcmV0dXJuIGNvZGVzIGFzIHdhcm5pbmdzIGFuZCBhbGwgbmVnYXRpdmUgcmV0dXJuCiBjb2RlcyBhcyBlcnJvcnMuCi0uQiBwY2FwX3N0YXR1c3Rvc3RyKCkKKy5CUiBwY2FwX3N0YXR1c3Rvc3RyICgzUENBUCkKIGNhbiBiZSBjYWxsZWQsIHdpdGggYSB3YXJuaW5nIG9yIGVycm9yIGNvZGUgYXMgYW4gYXJndW1lbnQsIHRvIGZldGNoIGEKIG1lc3NhZ2UgZGVzY3JpYmluZyB0aGUgd2FybmluZyBvciBlcnJvciBjb2RlLgorLkxQCitJZgorLkJSIHBjYXBfYWN0aXZhdGUgKCkKK2ZhaWxzLCB0aGUKKy5JIHBjYXBfdCAqCitpcyBub3QgY2xvc2VkIGFuZCBmcmVlZDsgaXQgc2hvdWxkIGJlIGNsb3NlZCB1c2luZworLkJSIHBjYXBfY2xvc2UgKCkuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApCisuQlIgcGNhcCAoM1BDQVApCmRpZmYgLS1naXQgYS9wY2FwX2JyZWFrbG9vcC4zcGNhcCBiL3BjYXBfYnJlYWtsb29wLjNwY2FwCmluZGV4IDAzYjhkOGQuLjk5NjI5MGYgMTAwNjQ0Ci0tLSBhL3BjYXBfYnJlYWtsb29wLjNwY2FwCisrKyBiL3BjYXBfYnJlYWtsb29wLjNwY2FwCkBAIC0xNyw3ICsxNyw3IEBACiAuXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKIC5cIiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogLlwiCi0uVEggUENBUF9CUkVBS0xPT1AgM1BDQVAgIjggTm92ZW1iZXIgMjAxNyIKKy5USCBQQ0FQX0JSRUFLTE9PUCAzUENBUCAiMjUgSnVseSAyMDE4IgogLlNIIE5BTUUKIHBjYXBfYnJlYWtsb29wIFwtIGZvcmNlIGEgcGNhcF9kaXNwYXRjaCgpIG9yIHBjYXBfbG9vcCgpIGNhbGwgdG8gcmV0dXJuCiAuU0ggU1lOT1BTSVMKQEAgLTMxLDE0ICszMSwxNSBAQAogLmZ0CiAuZmkKIC5TSCBERVNDUklQVElPTgotLkIgcGNhcF9icmVha2xvb3AoKQorLkJSIHBjYXBfYnJlYWtsb29wICgpCiBzZXRzIGEgZmxhZyB0aGF0IHdpbGwgZm9yY2UKLS5CIHBjYXBfZGlzcGF0Y2goKQorLkJSIHBjYXBfZGlzcGF0Y2ggKDNQQ0FQKQogb3IKLS5CIHBjYXBfbG9vcCgpCisuQlIgcGNhcF9sb29wICgzUENBUCkKIHRvIHJldHVybiByYXRoZXIgdGhhbiBsb29waW5nOyB0aGV5IHdpbGwgcmV0dXJuIHRoZSBudW1iZXIgb2YgcGFja2V0cwotdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkIHNvIGZhciwgb3IgXC0yIGlmIG5vIHBhY2tldHMgaGF2ZSBiZWVuCi1wcm9jZXNzZWQgc28gZmFyLgordGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkIHNvIGZhciwgb3IKKy5CIFBDQVBfRVJST1JfQlJFQUsKK2lmIG5vIHBhY2tldHMgaGF2ZSBiZWVuIHByb2Nlc3NlZCBzbyBmYXIuCiAuUFAKIFRoaXMgcm91dGluZSBpcyBzYWZlIHRvIHVzZSBpbnNpZGUgYSBzaWduYWwgaGFuZGxlciBvbiBVTklYIG9yIGEgY29uc29sZQogY29udHJvbCBoYW5kbGVyIG9uIFdpbmRvd3MsIGFzIGl0IG1lcmVseSBzZXRzIGEgZmxhZyB0aGF0IGlzIGNoZWNrZWQKQEAgLTYwLDcgKzYxLDcgQEAKIC5QUAogLmZ0IEIKIE5vdGUgYWxzbyB0aGF0LCBpbiBhIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9uLCBpZiBvbmUgdGhyZWFkIGlzCi1ibG9ja2VkIGluIHBjYXBfZGlzcGF0Y2goKSwgcGNhcF9sb29wKCksIHBjYXBfbmV4dCgpLCBvciBwY2FwX25leHRfZXgoKSwKK2Jsb2NrZWQgaW4gcGNhcF9kaXNwYXRjaCgpLCBwY2FwX2xvb3AoKSwgcGNhcF9uZXh0KDNQQ0FQKSwgb3IgcGNhcF9uZXh0X2V4KDNQQ0FQKSwKIGEgY2FsbCB0byBwY2FwX2JyZWFrbG9vcCgpIGluIGEgZGlmZmVyZW50IHRocmVhZCB3aWxsIG5vdCB1bmJsb2NrIHRoYXQKIHRocmVhZC4KIC5mdCBSCkBAIC02OCw5ICs2OSw5IEBACiBicmVha2luZyBhIHRocmVhZCBvdXQgb2YgYmxvY2tpbmcgY2FsbHMgaW4gb3JkZXIgdG8gdW5ibG9jayB0aGUgdGhyZWFkLAogc3VjaCBhcyB0aHJlYWQgY2FuY2VsbGF0aW9uIG9yIHRocmVhZCBzaWduYWxsaW5nIGluIHN5c3RlbXMgdGhhdCBzdXBwb3J0CiBQT1NJWCB0aHJlYWRzLCBvcgotLkIgU2V0RXZlbnQoKQorLkJSIFNldEV2ZW50ICgpCiBvbiB0aGUgcmVzdWx0IG9mCi0uQiBwY2FwX2dldGV2ZW50KCkKKy5CUiBwY2FwX2dldGV2ZW50ICgpCiBvbiBhCiAuQiBwY2FwX3QKIG9uIHdoaWNoIHRoZSB0aHJlYWQgaXMgYmxvY2tlZCBvbiBXaW5kb3dzLiAgQXN5bmNocm9ub3VzIHByb2NlZHVyZSBjYWxscwpAQCAtODAsMzEgKzgxLDM1IEBACiAuZnQgUgogLlBQCiBOb3RlIHRoYXQKLS5CIHBjYXBfbmV4dCgpCisuQlIgcGNhcF9uZXh0ICgpCiBhbmQKLS5CIHBjYXBfbmV4dF9leCgpCisuQlIgcGNhcF9uZXh0X2V4ICgpCiB3aWxsLCBvbiBzb21lIHBsYXRmb3JtcywgbG9vcCByZWFkaW5nIHBhY2tldHMgZnJvbSB0aGUgT1M7IHRoYXQgbG9vcAogd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgdGVybWluYXRlZCBieSBhIHNpZ25hbCwgc28KLS5CIHBjYXBfYnJlYWtsb29wKCkKKy5CUiBwY2FwX2JyZWFrbG9vcCAoKQogc2hvdWxkIGJlIHVzZWQgdG8gdGVybWluYXRlIHBhY2tldCBwcm9jZXNzaW5nIGV2ZW4gaWYKLS5CIHBjYXBfbmV4dCgpCisuQlIgcGNhcF9uZXh0ICgpCiBvcgotLkIgcGNhcF9uZXh0X2V4KCkKKy5CUiBwY2FwX25leHRfZXggKCkKIGlzIGJlaW5nIHVzZWQuCiAuUFAKLS5CIHBjYXBfYnJlYWtsb29wKCkKKy5CUiBwY2FwX2JyZWFrbG9vcCAoKQogZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgbm8gZnVydGhlciBwYWNrZXRzIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5Ci0uQiBwY2FwX2Rpc3BhdGNoKCkKKy5CUiBwY2FwX2Rpc3BhdGNoICgpCiBvcgotLkIgcGNhcF9sb29wKCkKKy5CUiBwY2FwX2xvb3AgKCkKIGFmdGVyIGl0IGlzIGNhbGxlZDsgYXQgbW9zdCBvbmUgbW9yZSBwYWNrZXQgbWlnaHQgYmUgcHJvY2Vzc2VkLgogLlBQCi1JZiBcLTIgaXMgcmV0dXJuZWQgZnJvbQotLkIgcGNhcF9kaXNwYXRjaCgpCitJZgorLkIgUENBUF9FUlJPUl9CUkVBSworaXMgcmV0dXJuZWQgZnJvbQorLkJSIHBjYXBfZGlzcGF0Y2ggKCkKIG9yCi0uQlIgcGNhcF9sb29wKCkgLAorLkJSIHBjYXBfbG9vcCAoKSwKIHRoZSBmbGFnIGlzIGNsZWFyZWQsIHNvIGEgc3Vic2VxdWVudCBjYWxsIHdpbGwgcmVzdW1lIHJlYWRpbmcgcGFja2V0cy4KIElmIGEgcG9zaXRpdmUgbnVtYmVyIGlzIHJldHVybmVkLCB0aGUgZmxhZyBpcyBub3QgY2xlYXJlZCwgc28gYQotc3Vic2VxdWVudCBjYWxsIHdpbGwgcmV0dXJuIFwtMiBhbmQgY2xlYXIgdGhlIGZsYWcuCitzdWJzZXF1ZW50IGNhbGwgd2lsbCByZXR1cm4KKy5CIFBDQVBfRVJST1JfQlJFQUsKK2FuZCBjbGVhciB0aGUgZmxhZy4KIC5TSCBTRUUgQUxTTwotcGNhcCgzUENBUCksIHBjYXBfbG9vcCgzUENBUCksIHBjYXBfbmV4dF9leCgzUENBUCkKKy5CUiBwY2FwICgzUENBUCkKZGlmZiAtLWdpdCBhL3BjYXBfY2FuX3NldF9yZm1vbi4zcGNhcCBiL3BjYXBfY2FuX3NldF9yZm1vbi4zcGNhcAppbmRleCBlZWUwMDRkLi5iZTAzOTU2IDEwMDY0NAotLS0gYS9wY2FwX2Nhbl9zZXRfcmZtb24uM3BjYXAKKysrIGIvcGNhcF9jYW5fc2V0X3JmbW9uLjNwY2FwCkBAIC0zMSwxMyArMzEsMTYgQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfY2FuX3NldF9yZm1vbigpCisuQlIgcGNhcF9jYW5fc2V0X3JmbW9uICgpCiBjaGVja3Mgd2hldGhlciBtb25pdG9yIG1vZGUgY291bGQgYmUgc2V0IG9uIGEgY2FwdHVyZSBoYW5kbGUgd2hlbgogdGhlIGhhbmRsZSBpcyBhY3RpdmF0ZWQuCiAuU0ggUkVUVVJOIFZBTFVFCi0uQiBwY2FwX2Nhbl9zZXRfcmZtb24oKQotcmV0dXJucyAwIGlmIG1vbml0b3IgbW9kZSBjb3VsZCBub3QgYmUgc2V0LAotMSBpZiBtb25pdG9yIG1vZGUgY291bGQgYmUgc2V0LCBhbmQgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvci4KKy5CUiBwY2FwX2Nhbl9zZXRfcmZtb24gKCkKK3JldHVybnMKKy5CIDAKK2lmIG1vbml0b3IgbW9kZSBjb3VsZCBub3QgYmUgc2V0LAorLkIgMQoraWYgbW9uaXRvciBtb2RlIGNvdWxkIGJlIHNldCwgYW5kIGEgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IuCiBBIG5lZ2F0aXZlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgd2hhdCBlcnJvciBjb25kaXRpb24gb2NjdXJyZWQuCiBUaGUgcG9zc2libGUgZXJyb3IgdmFsdWVzIGFyZToKIC5UUApAQCAtNTQsMTkgKzU3LDI0IEBACiAuVFAKIC5CIFBDQVBfRVJST1IKIEFub3RoZXIgZXJyb3Igb2NjdXJyZWQuCi0uQiBwY2FwX2dldGVycigpCisuQlIgcGNhcF9nZXRlcnIgKDNQQ0FQKQogb3IKLS5CIHBjYXBfcGVycm9yKCkKKy5CUiBcJXBjYXBfcGVycm9yICgzUENBUCkKIG1heSBiZSBjYWxsZWQgd2l0aAogLkkgcAogYXMgYW4gYXJndW1lbnQgdG8gZmV0Y2ggb3IgZGlzcGxheSBhIG1lc3NhZ2UgZGVzY3JpYmluZyB0aGUgZXJyb3IuCiAuTFAKIEFkZGl0aW9uYWwgZXJyb3IgY29kZXMgbWF5IGJlIGFkZGVkIGluIHRoZSBmdXR1cmU7IGEgcHJvZ3JhbSBzaG91bGQKLWNoZWNrIGZvciAwLCAxLCBhbmQgbmVnYXRpdmUsIHJldHVybiBjb2RlcywgYW5kIHRyZWF0IGFsbCBuZWdhdGl2ZQorY2hlY2sgZm9yCisuQlIgMCAsCisuQlIgMSAsCithbmQgbmVnYXRpdmUsIHJldHVybiBjb2RlcywgYW5kIHRyZWF0IGFsbCBuZWdhdGl2ZQogcmV0dXJuIGNvZGVzIGFzIGVycm9ycy4KLS5CIHBjYXBfc3RhdHVzdG9zdHIoKQorLkJSIHBjYXBfc3RhdHVzdG9zdHIgKDNQQ0FQKQogY2FuIGJlIGNhbGxlZCwgd2l0aCBhIHdhcm5pbmcgb3IgZXJyb3IgY29kZSBhcyBhbiBhcmd1bWVudCwgdG8gZmV0Y2ggYQogbWVzc2FnZSBkZXNjcmliaW5nIHRoZSB3YXJuaW5nIG9yIGVycm9yIGNvZGUuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApLCBwY2FwX2NyZWF0ZSgzUENBUCksIHBjYXBfYWN0aXZhdGUoM1BDQVApLAotcGNhcF9zZXRfcmZtb24oM1BDQVApCisuQlIgcGNhcCAoM1BDQVApLAorLkJSIHBjYXBfY3JlYXRlICgzUENBUCksCisuQlIgcGNhcF9hY3RpdmF0ZSAoM1BDQVApLAorLkJSIHBjYXBfc2V0X3JmbW9uICgzUENBUCkKZGlmZiAtLWdpdCBhL3BjYXBfY2xvc2UuM3BjYXAgYi9wY2FwX2Nsb3NlLjNwY2FwCmluZGV4IGUyMzE2YTQuLmM0YWMzZmEgMTAwNjQ0Ci0tLSBhL3BjYXBfY2xvc2UuM3BjYXAKKysrIGIvcGNhcF9jbG9zZS4zcGNhcApAQCAtMzEsOSArMzEsOSBAQAogLmZ0CiAuZmkKIC5TSCBERVNDUklQVElPTgotLkIgcGNhcF9jbG9zZSgpCisuQlIgcGNhcF9jbG9zZSAoKQogY2xvc2VzIHRoZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGgKIC5JIHAKIGFuZCBkZWFsbG9jYXRlcyByZXNvdXJjZXMuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApCisuQlIgcGNhcCAoM1BDQVApCmRpZmYgLS1naXQgYS9wY2FwX2NvbXBpbGUuM3BjYXAgYi9wY2FwX2NvbXBpbGUuM3BjYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4MTgxNGIuLjAwMDAwMDAKLS0tIGEvcGNhcF9jb21waWxlLjNwY2FwCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMTk5NCwgMTk5NiwgMTk5NwotLlwiCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLlwiCi0uXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0uXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQ6ICgxKSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb25zCi0uXCIgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBpbiBpdHMgZW50aXJldHksICgyKQotLlwiIGRpc3RyaWJ1dGlvbnMgaW5jbHVkaW5nIGJpbmFyeSBjb2RlIGluY2x1ZGUgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kCi0uXCIgdGhpcyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5IGluIHRoZSBkb2N1bWVudGF0aW9uIG9yIG90aGVyIG1hdGVyaWFscwotLlwiIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiwgYW5kICgzKSBhbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcKLS5cIiBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotLlwiIGBgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLAotLlwiIExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkgYW5kIGl0cyBjb250cmlidXRvcnMuJycgTmVpdGhlciB0aGUgbmFtZSBvZgotLlwiIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlCi0uXCIgb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCi0uXCIgd3JpdHRlbiBwZXJtaXNzaW9uLgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLS5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotLlwiIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0uXCIKLS5USCBQQ0FQX0NPTVBJTEUgM1BDQVAgIjI0IE1hcmNoIDIwMTciCi0uU0ggTkFNRQotcGNhcF9jb21waWxlIFwtIGNvbXBpbGUgYSBmaWx0ZXIgZXhwcmVzc2lvbgotLlNIIFNZTk9QU0lTCi0ubmYKLS5mdCBCCi0jaW5jbHVkZSA8cGNhcC9wY2FwLmg+Ci0uZnQKLS5MUAotLmZ0IEIKLWludCBwY2FwX2NvbXBpbGUocGNhcF90ICpwLCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKmZwLAotLnRpICs4Ci1jb25zdCBjaGFyICpzdHIsIGludCBvcHRpbWl6ZSwgYnBmX3VfaW50MzIgbmV0bWFzayk7Ci0uZnQKLS5maQotLlNIIERFU0NSSVBUSU9OCi0uQiBwY2FwX2NvbXBpbGUoKQotaXMgdXNlZCB0byBjb21waWxlIHRoZSBzdHJpbmcKLS5JIHN0cgotaW50byBhIGZpbHRlciBwcm9ncmFtLiAgU2VlCi0uQlIgcGNhcC1maWx0ZXIgKDcpCi1mb3IgdGhlIHN5bnRheCBvZiB0aGF0IHN0cmluZy4KLS5JIHByb2dyYW0KLWlzIGEgcG9pbnRlciB0byBhCi0uSSBicGZfcHJvZ3JhbQotc3RydWN0IGFuZCBpcyBmaWxsZWQgaW4gYnkKLS5CUiBwY2FwX2NvbXBpbGUoKSAuCi0uSSBvcHRpbWl6ZQotY29udHJvbHMgd2hldGhlciBvcHRpbWl6YXRpb24gb24gdGhlIHJlc3VsdGluZyBjb2RlIGlzIHBlcmZvcm1lZC4KLS5JIG5ldG1hc2sKLXNwZWNpZmllcyB0aGUgSVB2NCBuZXRtYXNrIG9mIHRoZSBuZXR3b3JrIG9uIHdoaWNoIHBhY2tldHMgYXJlIGJlaW5nCi1jYXB0dXJlZDsgaXQgaXMgdXNlZCBvbmx5IHdoZW4gY2hlY2tpbmcgZm9yIElQdjQgYnJvYWRjYXN0IGFkZHJlc3NlcyBpbgotdGhlIGZpbHRlciBwcm9ncmFtLiAgSWYgdGhlIG5ldG1hc2sgb2YgdGhlIG5ldHdvcmsgb24gd2hpY2ggcGFja2V0cyBhcmUKLWJlaW5nIGNhcHR1cmVkIGlzbid0IGtub3duIHRvIHRoZSBwcm9ncmFtLCBvciBpZiBwYWNrZXRzIGFyZSBiZWluZwotY2FwdHVyZWQgb24gdGhlIExpbnV4ICJhbnkiIHBzZXVkby1pbnRlcmZhY2UgdGhhdCBjYW4gY2FwdHVyZSBvbiBtb3JlCi10aGFuIG9uZSBuZXR3b3JrLCBhIHZhbHVlIG9mIFBDQVBfTkVUTUFTS19VTktOT1dOIGNhbiBiZSBzdXBwbGllZDsgdGVzdHMKLWZvciBJUHY0IGJyb2FkY2FzdCBhZGRyZXNzZXMgd2lsbCBmYWlsIHRvIGNvbXBpbGUsIGJ1dCBhbGwgb3RoZXIgdGVzdHMgaW4KLXRoZSBmaWx0ZXIgcHJvZ3JhbSB3aWxsIGJlIE9LLgotLkxQCi1OT1RFOiBpbiBsaWJwY2FwIDEuOC4wIGFuZCBsYXRlciwKLS5CIHBjYXBfY29tcGlsZSgpCi1jYW4gYmUgdXNlZCBpbiBtdWx0aXBsZSB0aHJlYWRzIHdpdGhpbiBhIHNpbmdsZSBwcm9jZXNzLiAgSG93ZXZlciwgaW4KLWVhcmxpZXIgdmVyc2lvbnMgb2YgbGlicGNhcCwgaXQgaXMKLS5JIG5vdAotc2FmZSB0byB1c2UKLS5CIHBjYXBfY29tcGlsZSgpCi1pbiBtdWx0aXBsZSB0aHJlYWRzIGluIGEgc2luZ2xlIHByb2Nlc3Mgd2l0aG91dCBzb21lIGZvcm0gb2YgbXV0dWFsCi1leGNsdXNpb24gYWxsb3dpbmcgb25seSBvbmUgdGhyZWFkIHRvIGNhbGwgaXQgYXQgYW55IGdpdmVuIHRpbWUuCi0uU0ggUkVUVVJOIFZBTFVFCi0uQiBwY2FwX2NvbXBpbGUoKQotcmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIFwtMSBvbiBmYWlsdXJlLgotSWYgXC0xIGlzIHJldHVybmVkLAotLkIgcGNhcF9nZXRlcnIoKQotb3IKLS5CIHBjYXBfcGVycm9yKCkKLW1heSBiZSBjYWxsZWQgd2l0aAotLkkgcAotYXMgYW4gYXJndW1lbnQgdG8gZmV0Y2ggb3IgZGlzcGxheSB0aGUgZXJyb3IgdGV4dC4KLS5TSCBTRUUgQUxTTwotcGNhcCgzUENBUCksIHBjYXBfc2V0ZmlsdGVyKDNQQ0FQKSwgcGNhcF9mcmVlY29kZSgzUENBUCksCi1wY2FwX2dldGVycigzUENBUCksIHBjYXAtZmlsdGVyKDcpCmRpZmYgLS1naXQgYS9wY2FwX2NvbXBpbGUuM3BjYXAuaW4gYi9wY2FwX2NvbXBpbGUuM3BjYXAuaW4KaW5kZXggMjlhZThmOC4uODIzOGU1NCAxMDA2NDQKLS0tIGEvcGNhcF9jb21waWxlLjNwY2FwLmluCisrKyBiL3BjYXBfY29tcGlsZS4zcGNhcC5pbgpAQCAtMTcsNyArMTcsNyBAQAogLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAuXCIgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KIC5cIgotLlRIIFBDQVBfQ09NUElMRSAzUENBUCAiMjQgTWFyY2ggMjAxNyIKKy5USCBQQ0FQX0NPTVBJTEUgM1BDQVAgIjIyIEF1Z3VzdCAyMDE4IgogLlNIIE5BTUUKIHBjYXBfY29tcGlsZSBcLSBjb21waWxlIGEgZmlsdGVyIGV4cHJlc3Npb24KIC5TSCBTWU5PUFNJUwpAQCAtMzMsNyArMzMsNyBAQAogLmZ0CiAuZmkKIC5TSCBERVNDUklQVElPTgotLkIgcGNhcF9jb21waWxlKCkKKy5CUiBwY2FwX2NvbXBpbGUgKCkKIGlzIHVzZWQgdG8gY29tcGlsZSB0aGUgc3RyaW5nCiAuSSBzdHIKIGludG8gYSBmaWx0ZXIgcHJvZ3JhbS4gIFNlZQpAQCAtNDMsNyArNDMsNyBAQAogaXMgYSBwb2ludGVyIHRvIGEKIC5JIGJwZl9wcm9ncmFtCiBzdHJ1Y3QgYW5kIGlzIGZpbGxlZCBpbiBieQotLkJSIHBjYXBfY29tcGlsZSgpIC4KKy5CUiBwY2FwX2NvbXBpbGUgKCkuCiAuSSBvcHRpbWl6ZQogY29udHJvbHMgd2hldGhlciBvcHRpbWl6YXRpb24gb24gdGhlIHJlc3VsdGluZyBjb2RlIGlzIHBlcmZvcm1lZC4KIC5JIG5ldG1hc2sKQEAgLTUyLDI5ICs1Miw0MiBAQAogdGhlIGZpbHRlciBwcm9ncmFtLiAgSWYgdGhlIG5ldG1hc2sgb2YgdGhlIG5ldHdvcmsgb24gd2hpY2ggcGFja2V0cyBhcmUKIGJlaW5nIGNhcHR1cmVkIGlzbid0IGtub3duIHRvIHRoZSBwcm9ncmFtLCBvciBpZiBwYWNrZXRzIGFyZSBiZWluZwogY2FwdHVyZWQgb24gdGhlIExpbnV4ICJhbnkiIHBzZXVkby1pbnRlcmZhY2UgdGhhdCBjYW4gY2FwdHVyZSBvbiBtb3JlCi10aGFuIG9uZSBuZXR3b3JrLCBhIHZhbHVlIG9mIFBDQVBfTkVUTUFTS19VTktOT1dOIGNhbiBiZSBzdXBwbGllZDsgdGVzdHMKK3RoYW4gb25lIG5ldHdvcmssIGEgdmFsdWUgb2YKKy5CIFBDQVBfTkVUTUFTS19VTktOT1dOCitjYW4gYmUgc3VwcGxpZWQ7IHRlc3RzCiBmb3IgSVB2NCBicm9hZGNhc3QgYWRkcmVzc2VzIHdpbGwgZmFpbCB0byBjb21waWxlLCBidXQgYWxsIG90aGVyIHRlc3RzIGluCiB0aGUgZmlsdGVyIHByb2dyYW0gd2lsbCBiZSBPSy4KIC5MUAogTk9URTogaW4gbGlicGNhcCAxLjguMCBhbmQgbGF0ZXIsCi0uQiBwY2FwX2NvbXBpbGUoKQorLkJSIHBjYXBfY29tcGlsZSAoKQogY2FuIGJlIHVzZWQgaW4gbXVsdGlwbGUgdGhyZWFkcyB3aXRoaW4gYSBzaW5nbGUgcHJvY2Vzcy4gIEhvd2V2ZXIsIGluCiBlYXJsaWVyIHZlcnNpb25zIG9mIGxpYnBjYXAsIGl0IGlzCiAuSSBub3QKIHNhZmUgdG8gdXNlCi0uQiBwY2FwX2NvbXBpbGUoKQorLkJSIHBjYXBfY29tcGlsZSAoKQogaW4gbXVsdGlwbGUgdGhyZWFkcyBpbiBhIHNpbmdsZSBwcm9jZXNzIHdpdGhvdXQgc29tZSBmb3JtIG9mIG11dHVhbAogZXhjbHVzaW9uIGFsbG93aW5nIG9ubHkgb25lIHRocmVhZCB0byBjYWxsIGl0IGF0IGFueSBnaXZlbiB0aW1lLgogLlNIIFJFVFVSTiBWQUxVRQotLkIgcGNhcF9jb21waWxlKCkKLXJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCBcLTEgb24gZmFpbHVyZS4KLUlmIFwtMSBpcyByZXR1cm5lZCwKLS5CIHBjYXBfZ2V0ZXJyKCkKKy5CUiBwY2FwX2NvbXBpbGUgKCkKK3JldHVybnMKKy5CIDAKK29uIHN1Y2Nlc3MgYW5kCisuQiBQQ0FQX0VSUk9SCitvbiBmYWlsdXJlLiBJZgorLkIgUENBUF9FUlJPUgoraXMgcmV0dXJuZWQsCisuQlIgcGNhcF9nZXRlcnIgKDNQQ0FQKQogb3IKLS5CIHBjYXBfcGVycm9yKCkKKy5CUiBwY2FwX3BlcnJvciAoM1BDQVApCiBtYXkgYmUgY2FsbGVkIHdpdGgKIC5JIHAKIGFzIGFuIGFyZ3VtZW50IHRvIGZldGNoIG9yIGRpc3BsYXkgdGhlIGVycm9yIHRleHQuCisuU0ggQkFDS1dBUkQgQ09NUEFUSUJJTElUWQorLlBQCitUaGUKKy5CIFBDQVBfTkVUTUFTS19VTktOT1dOCitjb25zdGFudCBiZWNhbWUgYXZhaWxhYmxlIGluIGxpYnBjYXAgcmVsZWFzZSAxLjEuMC4KIC5TSCBTRUUgQUxTTwotcGNhcCgzUENBUCksIHBjYXBfc2V0ZmlsdGVyKDNQQ0FQKSwgcGNhcF9mcmVlY29kZSgzUENBUCksCi1wY2FwX2dldGVycigzUENBUCksIHBjYXAtZmlsdGVyKEBNQU5fTUlTQ19JTkZPQCkKKy5CUiBwY2FwICgzUENBUCksCisuQlIgcGNhcF9zZXRmaWx0ZXIgKDNQQ0FQKSwKKy5CUiBwY2FwX2ZyZWVjb2RlICgzUENBUCkKZGlmZiAtLWdpdCBhL3BjYXBfY3JlYXRlLjNwY2FwIGIvcGNhcF9jcmVhdGUuM3BjYXAKaW5kZXggMzA0MGIzYi4uYmQ0MmQ3MyAxMDA2NDQKLS0tIGEvcGNhcF9jcmVhdGUuM3BjYXAKKysrIGIvcGNhcF9jcmVhdGUuM3BjYXAKQEAgLTM2LDcgKzM2LDcgQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfY3JlYXRlKCkKKy5CUiBwY2FwX2NyZWF0ZSAoKQogaXMgdXNlZCB0byBjcmVhdGUgYSBwYWNrZXQgY2FwdHVyZSBoYW5kbGUgdG8gbG9vawogYXQgcGFja2V0cyBvbiB0aGUgbmV0d29yay4KIC5JIHNvdXJjZQpAQCAtNDgsMTIgKzQ4LDEyIEBACiBjYW4gYmUgdXNlZCB0byBjYXB0dXJlIHBhY2tldHMgZnJvbSBhbGwgaW50ZXJmYWNlcy4KIC5QUAogVGhlIHJldHVybmVkIGhhbmRsZSBtdXN0IGJlIGFjdGl2YXRlZCB3aXRoCi0uQiBwY2FwX2FjdGl2YXRlKCkKKy5CUiBwY2FwX2FjdGl2YXRlICgzUENBUCkKIGJlZm9yZSBwYWNrZXRzIGNhbiBiZSBjYXB0dXJlZAogd2l0aCBpdDsgb3B0aW9ucyBmb3IgdGhlIGNhcHR1cmUsIHN1Y2ggYXMgcHJvbWlzY3VvdXMgbW9kZSwgY2FuIGJlIHNldAogb24gdGhlIGhhbmRsZSBiZWZvcmUgYWN0aXZhdGluZyBpdC4KIC5TSCBSRVRVUk4gVkFMVUUKLS5CIHBjYXBfY3JlYXRlKCkKKy5CUiBwY2FwX2NyZWF0ZSAoKQogcmV0dXJucyBhCiAuSSBwY2FwX3QgKgogb24gc3VjY2VzcyBhbmQKQEAgLTY5LDQgKzY5LDQgQEAKIC5CIFBDQVBfRVJSQlVGX1NJWkUKIGNoYXJzLgogLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcF9hY3RpdmF0ZSgzUENBUCkKKy5CUiBwY2FwICgzUENBUCkKZGlmZiAtLWdpdCBhL3BjYXBfZGF0YWxpbmsuM3BjYXAgYi9wY2FwX2RhdGFsaW5rLjNwY2FwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDUwOGY4Li4wMDAwMDAwCi0tLSBhL3BjYXBfZGF0YWxpbmsuM3BjYXAKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAxOTk0LCAxOTk2LCAxOTk3Ci0uXCIJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdDogKDEpIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbnMKLS5cIiByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGluIGl0cyBlbnRpcmV0eSwgKDIpCi0uXCIgZGlzdHJpYnV0aW9ucyBpbmNsdWRpbmcgYmluYXJ5IGNvZGUgaW5jbHVkZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQKLS5cIiB0aGlzIHBhcmFncmFwaCBpbiBpdHMgZW50aXJldHkgaW4gdGhlIGRvY3VtZW50YXRpb24gb3Igb3RoZXIgbWF0ZXJpYWxzCi0uXCIgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLCBhbmQgKDMpIGFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZwotLlwiIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0uXCIgYGBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsCi0uXCIgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4nJyBOZWl0aGVyIHRoZSBuYW1lIG9mCi0uXCIgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UKLS5cIiBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKLS5cIiB3cml0dGVuIHBlcm1pc3Npb24uCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0uXCIgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLS5cIgotLlRIIFBDQVBfREFUQUxJTksgM1BDQVAgIjcgQXByaWwgMjAxNCIKLS5TSCBOQU1FCi1wY2FwX2RhdGFsaW5rIFwtIGdldCB0aGUgbGluay1sYXllciBoZWFkZXIgdHlwZQotLlNIIFNZTk9QU0lTCi0ubmYKLS5mdCBCCi0jaW5jbHVkZSA8cGNhcC9wY2FwLmg+Ci0uZnQKLS5MUAotLmZ0IEIKLWludCBwY2FwX2RhdGFsaW5rKHBjYXBfdCAqcCk7Ci0uZnQKLS5maQotLlNIIERFU0NSSVBUSU9OCi0uQiBwY2FwX2RhdGFsaW5rKCkKLXJldHVybnMgdGhlIGxpbmstbGF5ZXIgaGVhZGVyIHR5cGUgZm9yIHRoZSBsaXZlIGNhcHR1cmUgb3IgYGBzYXZlZmlsZScnCi1zcGVjaWZpZWQgYnkKLS5JUiBwIC4KLS5QUAotSXQgbXVzdCBub3QgYmUgY2FsbGVkIG9uIGEgcGNhcCBkZXNjcmlwdG9yIGNyZWF0ZWQgYnkKLS5CIHBjYXBfY3JlYXRlKCkKLXRoYXQgaGFzIG5vdCB5ZXQgYmVlbiBhY3RpdmF0ZWQgYnkKLS5CUiBwY2FwX2FjdGl2YXRlKCkgLgotLlBQCi0uSSBodHRwczovL3d3dy50Y3BkdW1wLm9yZy9saW5rdHlwZXMuaHRtbAotbGlzdHMgdGhlIHZhbHVlcwotLkIgcGNhcF9kYXRhbGluaygpCi1jYW4gcmV0dXJuIGFuZCBkZXNjcmliZXMgdGhlIHBhY2tldCBmb3JtYXRzIHRoYXQKLWNvcnJlc3BvbmQgdG8gdGhvc2UgdmFsdWVzLgotLlBQCi1EbwotLkIgTk9UCi1hc3N1bWUgdGhhdCB0aGUgcGFja2V0cyBmb3IgYSBnaXZlbiBjYXB0dXJlIG9yIGBgc2F2ZWZpbGVgYCB3aWxsIGhhdmUKLWFueSBnaXZlbiBsaW5rLWxheWVyIGhlYWRlciB0eXBlLCBzdWNoIGFzCi0uQiBETFRfRU4xME1CCi1mb3IgRXRoZXJuZXQuICBGb3IgZXhhbXBsZSwgdGhlICJhbnkiIGRldmljZSBvbiBMaW51eCB3aWxsIGhhdmUgYQotbGluay1sYXllciBoZWFkZXIgdHlwZSBvZgotLkIgRExUX0xJTlVYX1NMTAotZXZlbiBpZiBhbGwgZGV2aWNlcyBvbiB0aGUgc3lzdGVtIGF0IHRoZSB0aW1lIHRoZSAiYW55IiBkZXZpY2UgaXMgb3BlbmVkCi1oYXZlIHNvbWUgb3RoZXIgZGF0YSBsaW5rIHR5cGUsIHN1Y2ggYXMKLS5CIERMVF9FTjEwTUIKLWZvciBFdGhlcm5ldC4KLS5TSCBSRVRVUk4gVkFMVUUKLS5CIHBjYXBfZGF0YWxpbmsoKQotcmV0dXJucyB0aGUgbGluay1sYXllciBoZWFkZXIgdHlwZSBvbiBzdWNjZXNzIGFuZAotLkIgUENBUF9FUlJPUl9OT1RfQUNUSVZBVEVECi1pZiBjYWxsZWQgb24gYSBjYXB0dXJlIGhhbmRsZSB0aGF0IGhhcyBiZWVuIGNyZWF0ZWQgYnV0IG5vdCBhY3RpdmF0ZWQuCi0uU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApLCBwY2FwLWxpbmt0eXBlKDcpCmRpZmYgLS1naXQgYS9wY2FwX2RhdGFsaW5rLjNwY2FwLmluIGIvcGNhcF9kYXRhbGluay4zcGNhcC5pbgppbmRleCBhMzJmMTVlLi5hYmI3Mzc1IDEwMDY0NAotLS0gYS9wY2FwX2RhdGFsaW5rLjNwY2FwLmluCisrKyBiL3BjYXBfZGF0YWxpbmsuM3BjYXAuaW4KQEAgLTMxLDE5ICszMSwxOSBAQAogLmZ0CiAuZmkKIC5TSCBERVNDUklQVElPTgotLkIgcGNhcF9kYXRhbGluaygpCisuQlIgcGNhcF9kYXRhbGluayAoKQogcmV0dXJucyB0aGUgbGluay1sYXllciBoZWFkZXIgdHlwZSBmb3IgdGhlIGxpdmUgY2FwdHVyZSBvciBgYHNhdmVmaWxlJycKIHNwZWNpZmllZCBieQogLklSIHAgLgogLlBQCiBJdCBtdXN0IG5vdCBiZSBjYWxsZWQgb24gYSBwY2FwIGRlc2NyaXB0b3IgY3JlYXRlZCBieQotLkIgcGNhcF9jcmVhdGUoKQorLkJSIFwlcGNhcF9jcmVhdGUgKDNQQ0FQKQogdGhhdCBoYXMgbm90IHlldCBiZWVuIGFjdGl2YXRlZCBieQotLkJSIHBjYXBfYWN0aXZhdGUoKSAuCisuQlIgXCVwY2FwX2FjdGl2YXRlICgzUENBUCkuCiAuUFAKIC5JIGh0dHBzOi8vd3d3LnRjcGR1bXAub3JnL2xpbmt0eXBlcy5odG1sCiBsaXN0cyB0aGUgdmFsdWVzCi0uQiBwY2FwX2RhdGFsaW5rKCkKKy5CUiBwY2FwX2RhdGFsaW5rICgpCiBjYW4gcmV0dXJuIGFuZCBkZXNjcmliZXMgdGhlIHBhY2tldCBmb3JtYXRzIHRoYXQKIGNvcnJlc3BvbmQgdG8gdGhvc2UgdmFsdWVzLgogLlBQCkBAIC01NSwxNCArNTUsMTcgQEAKIGZvciBFdGhlcm5ldC4gIEZvciBleGFtcGxlLCB0aGUgImFueSIgZGV2aWNlIG9uIExpbnV4IHdpbGwgaGF2ZSBhCiBsaW5rLWxheWVyIGhlYWRlciB0eXBlIG9mCiAuQiBETFRfTElOVVhfU0xMCitvcgorLkIgRExUX0xJTlVYX1NMTDIKIGV2ZW4gaWYgYWxsIGRldmljZXMgb24gdGhlIHN5c3RlbSBhdCB0aGUgdGltZSB0aGUgImFueSIgZGV2aWNlIGlzIG9wZW5lZAogaGF2ZSBzb21lIG90aGVyIGRhdGEgbGluayB0eXBlLCBzdWNoIGFzCiAuQiBETFRfRU4xME1CCiBmb3IgRXRoZXJuZXQuCiAuU0ggUkVUVVJOIFZBTFVFCi0uQiBwY2FwX2RhdGFsaW5rKCkKKy5CUiBwY2FwX2RhdGFsaW5rICgpCiByZXR1cm5zIHRoZSBsaW5rLWxheWVyIGhlYWRlciB0eXBlIG9uIHN1Y2Nlc3MgYW5kCiAuQiBQQ0FQX0VSUk9SX05PVF9BQ1RJVkFURUQKIGlmIGNhbGxlZCBvbiBhIGNhcHR1cmUgaGFuZGxlIHRoYXQgaGFzIGJlZW4gY3JlYXRlZCBidXQgbm90IGFjdGl2YXRlZC4KIC5TSCBTRUUgQUxTTwotcGNhcCgzUENBUCksIHBjYXAtbGlua3R5cGUoQE1BTl9NSVNDX0lORk9AKQorLkJSIHBjYXAgKDNQQ0FQKSwKKy5CUiBwY2FwLWxpbmt0eXBlIChATUFOX01JU0NfSU5GT0ApCmRpZmYgLS1naXQgYS9wY2FwX2RhdGFsaW5rX25hbWVfdG9fdmFsLjNwY2FwIGIvcGNhcF9kYXRhbGlua19uYW1lX3RvX3ZhbC4zcGNhcAppbmRleCBlNjQxOWYyLi5kMmNiMTAzIDEwMDY0NAotLS0gYS9wY2FwX2RhdGFsaW5rX25hbWVfdG9fdmFsLjNwY2FwCisrKyBiL3BjYXBfZGF0YWxpbmtfbmFtZV90b192YWwuM3BjYXAKQEAgLTE3LDcgKzE3LDcgQEAKIC5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgogLlwiIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAuXCIKLS5USCBQQ0FQX0RBVEFMSU5LX05BTUVfVE9fVkFMIDNQQ0FQICIxMiBPY3RvYmVyIDIwMTYiCisuVEggUENBUF9EQVRBTElOS19OQU1FX1RPX1ZBTCAzUENBUCAiMjUgSnVseSAyMDE4IgogLlNIIE5BTUUKIHBjYXBfZGF0YWxpbmtfbmFtZV90b192YWwgXC0gZ2V0IHRoZSBsaW5rLWxheWVyIGhlYWRlciB0eXBlIHZhbHVlCiBjb3JyZXNwb25kaW5nIHRvIGEgaGVhZGVyIHR5cGUgbmFtZQpAQCAtMzIsNyArMzIsNyBAQAogLmZ0CiAuZmkKIC5TSCBERVNDUklQVElPTgotLkIgcGNhcF9kYXRhbGlua19uYW1lX3RvX3ZhbCgpCisuQlIgcGNhcF9kYXRhbGlua19uYW1lX3RvX3ZhbCAoKQogdHJhbnNsYXRlcyBhIGxpbmstbGF5ZXIgaGVhZGVyIHR5cGUgbmFtZSwgd2hpY2ggaXMgYQogLkIgRExUXwogbmFtZSB3aXRoIHRoZQpAQCAtNDAsOCArNDAsMTAgQEAKIHJlbW92ZWQsIHRvIHRoZSBjb3JyZXNwb25kaW5nIGxpbmstbGF5ZXIgaGVhZGVyIHR5cGUgdmFsdWUuICBUaGUKIHRyYW5zbGF0aW9uIGlzIGNhc2UtaW5zZW5zaXRpdmUuCiAuU0ggUkVUVVJOIFZBTFVFCi0uQiBwY2FwX2RhdGFsaW5rX25hbWVfdG9fdmFsKCkKLXJldHVybnMgdGhlIHR5cGUgdmFsdWUgb24gc3VjY2VzcyBhbmQgXC0xIGlmIHRoZSBuYW1lIGlzIG5vdCBhIGtub3duCi10eXBlIG5hbWUuLgorLkJSIHBjYXBfZGF0YWxpbmtfbmFtZV90b192YWwgKCkKK3JldHVybnMgdGhlIHR5cGUgdmFsdWUgb24gc3VjY2VzcyBhbmQKKy5CIFBDQVBfRVJST1IKK2lmIHRoZSBuYW1lIGlzIG5vdCBhIGtub3duCit0eXBlIG5hbWUuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApCisuQlIgcGNhcCAoM1BDQVApCmRpZmYgLS1naXQgYS9wY2FwX2RhdGFsaW5rX3ZhbF90b19uYW1lLjNwY2FwIGIvcGNhcF9kYXRhbGlua192YWxfdG9fbmFtZS4zcGNhcAppbmRleCBmYWQzNTBmLi5iYmZhM2Y4IDEwMDY0NAotLS0gYS9wY2FwX2RhdGFsaW5rX3ZhbF90b19uYW1lLjNwY2FwCisrKyBiL3BjYXBfZGF0YWxpbmtfdmFsX3RvX25hbWUuM3BjYXAKQEAgLTE3LDkgKzE3LDEwIEBACiAuXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKIC5cIiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogLlwiCi0uVEggUENBUF9EQVRBTElOS19WQUxfVE9fTkFNRSAzUENBUCAiMTIgT2N0b2JlciAyMDE2IgorLlRIIFBDQVBfREFUQUxJTktfVkFMX1RPX05BTUUgM1BDQVAgIjE1IEFwcmlsIDIwMTkiCiAuU0ggTkFNRQotcGNhcF9kYXRhbGlua192YWxfdG9fbmFtZSwgcGNhcF9kYXRhbGlua192YWxfdG9fZGVzY3JpcHRpb24gXC0gZ2V0IGEKK3BjYXBfZGF0YWxpbmtfdmFsX3RvX25hbWUsIHBjYXBfZGF0YWxpbmtfdmFsX3RvX2Rlc2NyaXB0aW9uLAorcGNhcF9kYXRhbGlua192YWxfdG9fZGVzY3JpcHRpb25fb3JfZGx0IFwtIGdldCBhCiBuYW1lIG9yIGRlc2NyaXB0aW9uIGZvciBhIGxpbmstbGF5ZXIgaGVhZGVyIHR5cGUgdmFsdWUKIC5TSCBTWU5PUFNJUwogLm5mCkBAIC0zMCwxMCArMzEsMTEgQEAKIC5mdCBCCiBjb25zdCBjaGFyICpwY2FwX2RhdGFsaW5rX3ZhbF90b19uYW1lKGludCBkbHQpOwogY29uc3QgY2hhciAqcGNhcF9kYXRhbGlua192YWxfdG9fZGVzY3JpcHRpb24oaW50IGRsdCk7Citjb25zdCBjaGFyICpwY2FwX2RhdGFsaW5rX3ZhbF90b19kZXNjcmlwdGlvbl9vcl9kbHQoaW50IGRsdCk7CiAuZnQKIC5maQogLlNIIERFU0NSSVBUSU9OCi0uQiBwY2FwX2RhdGFsaW5rX3ZhbF90b19uYW1lKCkKKy5CUiBwY2FwX2RhdGFsaW5rX3ZhbF90b19uYW1lICgpCiB0cmFuc2xhdGVzIGEgbGluay1sYXllciBoZWFkZXIgdHlwZSB2YWx1ZSB0byB0aGUgY29ycmVzcG9uZGluZwogbGluay1sYXllciBoZWFkZXIgdHlwZSBuYW1lLCB3aGljaCBpcyB0aGUKIC5CIERMVF8KQEAgLTQ1LDEwICs0NywzMCBAQAogLkIgRExUXwogdmFsdWUuCiAuUFAKLS5CIHBjYXBfZGF0YWxpbmtfdmFsX3RvX2Rlc2NyaXB0aW9uKCkKKy5CUiBwY2FwX2RhdGFsaW5rX3ZhbF90b19kZXNjcmlwdGlvbiAoKQogdHJhbnNsYXRlcyBhIGxpbmstbGF5ZXIgaGVhZGVyIHR5cGUgdmFsdWUgdG8gYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGF0CiBsaW5rLWxheWVyIGhlYWRlciB0eXBlLgogLkIgTlVMTAogaXMgcmV0dXJuZWQgaWYgdGhlIHR5cGUgdmFsdWUgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIGtub3duCiAuQiBETFRfCiB2YWx1ZS4KKy5QUAorLkJSIHBjYXBfZGF0YWxpbmtfdmFsX3RvX2Rlc2NyaXB0aW9uX29yX2RsdCAoKQordHJhbnNsYXRlcyBhIGxpbmstbGF5ZXIgaGVhZGVyIHR5cGUgdmFsdWUgdG8gYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGF0CitsaW5rLWxheWVyIGhlYWRlciB0eXBlIGp1c3QgbGlrZQorLkJSIHBjYXBfZGF0YWxpbmtfdmFsX3RvX2Rlc2NyaXB0aW9uICgpLgorSWYgdGhlIHR5cGUgdmFsdWUgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIGtub3duCisuQiBETFRfCit2YWx1ZSwgdGhlIHN0cmluZyAiRExUIG4iIGlzIHJldHVybmVkLCB3aGVyZSBuIGlzIHRoZSB2YWx1ZSBvZgordGhlIGRsdCBhcmd1bWVudC4KKy5TSCBCQUNLV0FSRCBDT01QQVRJQklMSVRZCitUaGUKKy5CUiBwY2FwX2RhdGFsaW5rX3ZhbF90b19kZXNjcmlwdGlvbl9vcl9kbHQgKCkKK2Z1bmN0aW9uIGZpcnN0IGJlY2FtZSBhdmFpbGFibGUgaW4gbGlicGNhcCByZWxlYXNlIDEuMTAuMC4gIEluIHByZXZpb3VzCityZWxlYXNlcywKKy5CUiBwY2FwX2RhdGFsaW5rX3ZhbF90b19kZXNjcmlwdGlvbiAoKQord291bGQgaGF2ZSB0byBiZSBjYWxsZWQgYW5kLCBpZiBpdCByZXR1cm5lZAorLkJSIE5VTEwgLAorYSBkZWZhdWx0IHN0cmluZyB3b3VsZCBoYXZlIHRvIGJlIGNvbnN0cnVjdGVkLgorLlNIIFNFRSBBTFNPCisuQlIgcGNhcCAoM1BDQVApCmRpZmYgLS1naXQgYS9wY2FwX2R1bXAuM3BjYXAgYi9wY2FwX2R1bXAuM3BjYXAKaW5kZXggNjQwMmI0Yi4uYmE3Zjc1YSAxMDA2NDQKLS0tIGEvcGNhcF9kdW1wLjNwY2FwCisrKyBiL3BjYXBfZHVtcC4zcGNhcApAQCAtMzMsMTkgKzMzLDE4IEBACiAuZnQKIC5maQogLlNIIERFU0NSSVBUSU9OCi0uQiBwY2FwX2R1bXAoKQorLkJSIHBjYXBfZHVtcCAoKQogb3V0cHV0cyBhIHBhY2tldCB0byB0aGUgYGBzYXZlZmlsZScnIG9wZW5lZCB3aXRoCi0uQlIgcGNhcF9kdW1wX29wZW4oKSAuCisuQlIgcGNhcF9kdW1wX29wZW4gKDNQQ0FQKS4KIE5vdGUgdGhhdCBpdHMgY2FsbGluZyBhcmd1bWVudHMgYXJlIHN1aXRhYmxlIGZvciB1c2Ugd2l0aAotLkIgcGNhcF9kaXNwYXRjaCgpCisuQlIgcGNhcF9kaXNwYXRjaCAoM1BDQVApCiBvcgotLkJSIHBjYXBfbG9vcCgpIC4KKy5CUiBwY2FwX2xvb3AgKDNQQ0FQKS4KIElmIGNhbGxlZCBkaXJlY3RseSwgdGhlCiAuSSB1c2VyCiBwYXJhbWV0ZXIgaXMgb2YgdHlwZQogLkIgcGNhcF9kdW1wZXJfdAogYXMgcmV0dXJuZWQgYnkKLS5CUiBwY2FwX2R1bXBfb3BlbigpIC4KKy5CUiBwY2FwX2R1bXBfb3BlbiAoKS4KIC5TSCBTRUUgQUxTTwotcGNhcCgzUENBUCksIHBjYXBfZHVtcF9vcGVuKDNQQ0FQKSwgcGNhcF9kaXNwYXRjaCgzUENBUCksCi1wY2FwX2xvb3AoM1BDQVApCisuQlIgcGNhcCAoM1BDQVApCmRpZmYgLS1naXQgYS9wY2FwX2R1bXBfY2xvc2UuM3BjYXAgYi9wY2FwX2R1bXBfY2xvc2UuM3BjYXAKaW5kZXggYmQ5NWE1Mi4uYTYyZWIzNCAxMDA2NDQKLS0tIGEvcGNhcF9kdW1wX2Nsb3NlLjNwY2FwCisrKyBiL3BjYXBfZHVtcF9jbG9zZS4zcGNhcApAQCAtMzEsNyArMzEsOSBAQAogLmZ0CiAuZmkKIC5TSCBERVNDUklQVElPTgotLkIgcGNhcF9kdW1wX2Nsb3NlKCkKKy5CUiBwY2FwX2R1bXBfY2xvc2UgKCkKIGNsb3NlcyB0aGUgYGBzYXZlZmlsZS4nJwogLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcF9kdW1wX29wZW4oM1BDQVApLCBwY2FwX2R1bXAoM1BDQVApCisuQlIgcGNhcCAoM1BDQVApLAorLkJSIHBjYXBfZHVtcF9vcGVuICgzUENBUCksCisuQlIgcGNhcF9kdW1wICgzUENBUCkKZGlmZiAtLWdpdCBhL3BjYXBfZHVtcF9maWxlLjNwY2FwIGIvcGNhcF9kdW1wX2ZpbGUuM3BjYXAKaW5kZXggOGZlYTYxMC4uOWZkNmM3ZSAxMDA2NDQKLS0tIGEvcGNhcF9kdW1wX2ZpbGUuM3BjYXAKKysrIGIvcGNhcF9kdW1wX2ZpbGUuM3BjYXAKQEAgLTMxLDggKzMxLDggQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfZHVtcF9maWxlKCkKKy5CUiBwY2FwX2R1bXBfZmlsZSAoKQogcmV0dXJucyB0aGUgc3RhbmRhcmQgSS9PIHN0cmVhbSBvZiB0aGUgYGBzYXZlZmlsZScnIG9wZW5lZCBieQotLkJSIHBjYXBfZHVtcF9vcGVuKCkgLgorLkJSIHBjYXBfZHVtcF9vcGVuICgzUENBUCkuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApCisuQlIgcGNhcCAoM1BDQVApCmRpZmYgLS1naXQgYS9wY2FwX2R1bXBfZmx1c2guM3BjYXAgYi9wY2FwX2R1bXBfZmx1c2guM3BjYXAKaW5kZXggYzhmMTEwYi4uYzZlMGY4NiAxMDA2NDQKLS0tIGEvcGNhcF9kdW1wX2ZsdXNoLjNwY2FwCisrKyBiL3BjYXBfZHVtcF9mbHVzaC4zcGNhcApAQCAtMTcsNyArMTcsNyBAQAogLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAuXCIgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KIC5cIgotLlRIIFBDQVBfRFVNUF9GTFVTSCAzUENBUCAiMyBKYW51YXJ5IDIwMTQiCisuVEggUENBUF9EVU1QX0ZMVVNIIDNQQ0FQICIyNSBKdWx5IDIwMTgiCiAuU0ggTkFNRQogcGNhcF9kdW1wX2ZsdXNoIFwtIGZsdXNoIHRvIGEgc2F2ZWZpbGUgcGFja2V0cyBkdW1wZWQKIC5TSCBTWU5PUFNJUwpAQCAtMzEsMTMgKzMxLDE4IEBACiAuZnQKIC5maQogLlNIIERFU0NSSVBUSU9OCi0uQiBwY2FwX2R1bXBfZmx1c2goKQorLkJSIHBjYXBfZHVtcF9mbHVzaCAoKQogZmx1c2hlcyB0aGUgb3V0cHV0IGJ1ZmZlciB0byB0aGUgYGBzYXZlZmlsZSwnJyBzbyB0aGF0IGFueSBwYWNrZXRzCiB3cml0dGVuIHdpdGgKLS5CIHBjYXBfZHVtcCgpCisuQlIgcGNhcF9kdW1wICgzUENBUCkKIGJ1dCBub3QgeWV0IHdyaXR0ZW4gdG8gdGhlIGBgc2F2ZWZpbGUnJyB3aWxsIGJlIHdyaXR0ZW4uCiAuU0ggUkVUVVJOIFZBTFVFCi0uQiBwY2FwX2R1bXBfZmx1c2goKQotcmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIFwtMSBvbiBmYWlsdXJlLgorLkJSIHBjYXBfZHVtcF9mbHVzaCAoKQorcmV0dXJucworLkIgMAorb24gc3VjY2VzcyBhbmQKKy5CIFBDQVBfRVJST1IKK29uIGZhaWx1cmUuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApLCBwY2FwX2R1bXBfb3BlbigzUENBUCksIHBjYXBfZHVtcCgzUENBUCkKKy5CUiBwY2FwICgzUENBUCksCisuQlIgcGNhcF9kdW1wX29wZW4gKDNQQ0FQKQpkaWZmIC0tZ2l0IGEvcGNhcF9kdW1wX2Z0ZWxsLjNwY2FwIGIvcGNhcF9kdW1wX2Z0ZWxsLjNwY2FwCmluZGV4IGVjNjIxZmIuLjA2MmQ2MDkgMTAwNjQ0Ci0tLSBhL3BjYXBfZHVtcF9mdGVsbC4zcGNhcAorKysgYi9wY2FwX2R1bXBfZnRlbGwuM3BjYXAKQEAgLTE3LDcgKzE3LDcgQEAKIC5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgogLlwiIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAuXCIKLS5USCBQQ0FQX0RVTVBfRlRFTEwgM1BDQVAgIjI5IFNlcHRlbWJlciAyMDE3IgorLlRIIFBDQVBfRFVNUF9GVEVMTCAzUENBUCAiMjUgSnVseSAyMDE4IgogLlNIIE5BTUUKIHBjYXBfZHVtcF9mdGVsbCwgcGNhcF9kdW1wX2Z0ZWxsNjQgXC0gZ2V0IHRoZSBjdXJyZW50IGZpbGUgb2Zmc2V0IGZvciBhIHNhdmVmaWxlIGJlaW5nIHdyaXR0ZW4KIC5TSCBTWU5PUFNJUwpAQCAtMzMsMTggKzMzLDE4IEBACiAuZnQKIC5maQogLlNIIERFU0NSSVBUSU9OCi0uQiBwY2FwX2R1bXBfZnRlbGwoKQorLkJSIHBjYXBfZHVtcF9mdGVsbCAoKQogcmV0dXJucyB0aGUgY3VycmVudCBmaWxlIHBvc2l0aW9uIGZvciB0aGUgYGBzYXZlZmlsZScnLCByZXByZXNlbnRpbmcgdGhlCiBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBieQotLkIgcGNhcF9kdW1wX29wZW4oKQorLkJSIHBjYXBfZHVtcF9vcGVuICgzUENBUCkKIGFuZAotLkJSIHBjYXBfZHVtcCgpIC4KLVwtMSBpcyByZXR1cm5lZCBvbiBlcnJvci4KLUlmIHRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24gZG9lcyBub3QgZml0IGluIGEKKy5CUiBwY2FwX2R1bXAgKDNQQ0FQKS4KKy5CIFBDQVBfRVJST1IKK2lzIHJldHVybmVkIG9uIGVycm9yLiBJZiB0aGUgY3VycmVudCBmaWxlIHBvc2l0aW9uIGRvZXMgbm90IGZpdCBpbiBhCiAuQlIgbG9uZyAsCiBpdCB3aWxsIGJlIHRydW5jYXRlZDsgdGhpcyBjYW4gaGFwcGVuIG9uIDMyLWJpdCBVTklYLWxpa2Ugc3lzdGVtcyB3aXRoCiBsYXJnZSBmaWxlIHN1cHBvcnQgYW5kIG9uIFdpbmRvd3MuCi0uQiBwY2FwX2R1bXBfZnRlbGw2NCgpCisuQlIgcGNhcF9kdW1wX2Z0ZWxsNjQgKCkKIHJldHVybnMgdGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiBpbiBhCiAuQlIgaW50NjRfdCAsCiBzbyBpZiBmaWxlIG9mZnNldHMgdGhhdCBkb24ndCBmaXQgaW4gYQpAQCAtNTIsNiArNTIsMTMgQEAKIGJ1dCB0aGF0IGZpdCBpbiBhCiAuQiBpbnQ2NF90CiBhcmUgc3VwcG9ydGVkLCB0aGlzIHdpbGwgcmV0dXJuIHRoZSBmaWxlIG9mZnNldCB3aXRob3V0IHRydW5jYXRpb24uCi1cLTEgaXMgcmV0dXJuZWQgb24gZXJyb3IuCisuQiBQQ0FQX0VSUk9SCitpcyByZXR1cm5lZCBvbiBlcnJvci4KKy5TSCBCQUNLV0FSRCBDT01QQVRJQklMSVRZCitUaGUgZnVuY3Rpb24KKy5CUiBwY2FwX2R1bXBfZnRlbGw2NCAoKQorYmVjYW1lIGF2YWlsYWJsZSBpbiBsaWJwY2FwIHJlbGVhc2UgMS45LjAuICBJbiBwcmV2aW91cyByZWxlYXNlcywgdGhlcmUKK3dhcyBubyBtZWNoYW5pc20gdG8gb2J0YWluIGEgZmlsZSBvZmZzZXQgdGhhdCBpcyB0b28gbGFyZ2UgdG8gZml0IGluIGEKKy5CUiBsb25nIC4KIC5TSCBTRUUgQUxTTwotcGNhcCgzUENBUCksIHBjYXBfZHVtcF9vcGVuKDNQQ0FQKSwgcGNhcF9kdW1wKDNQQ0FQKQorLkJSIHBjYXAgKDNQQ0FQKQpkaWZmIC0tZ2l0IGEvcGNhcF9kdW1wX29wZW4uM3BjYXAgYi9wY2FwX2R1bXBfb3Blbi4zcGNhcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM5NTZiYS4uMDAwMDAwMAotLS0gYS9wY2FwX2R1bXBfb3Blbi4zcGNhcAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS5cIiBDb3B5cmlnaHQgKGMpIDE5OTQsIDE5OTYsIDE5OTcKLS5cIglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0OiAoMSkgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9ucwotLlwiIHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5LCAoMikKLS5cIiBkaXN0cmlidXRpb25zIGluY2x1ZGluZyBiaW5hcnkgY29kZSBpbmNsdWRlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAotLlwiIHRoaXMgcGFyYWdyYXBoIGluIGl0cyBlbnRpcmV0eSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvciBvdGhlciBtYXRlcmlhbHMKLS5cIiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24sIGFuZCAoMykgYWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nCi0uXCIgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLS5cIiBgYFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwKLS5cIiBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IGFuZCBpdHMgY29udHJpYnV0b3JzLicnIE5laXRoZXIgdGhlIG5hbWUgb2YKLS5cIiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZQotLlwiIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgotLlwiIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0uXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS5cIiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotLlwiCi0uVEggUENBUF9EVU1QX09QRU4gM1BDQVAgIjIyIEp1bmUgMjAxOCIKLS5TSCBOQU1FCi1wY2FwX2R1bXBfb3BlbiwgcGNhcF9kdW1wX2ZvcGVuIFwtIG9wZW4gYSBmaWxlIHRvIHdoaWNoIHRvIHdyaXRlIHBhY2tldHMKLS5TSCBTWU5PUFNJUwotLm5mCi0uZnQgQgotI2luY2x1ZGUgPHBjYXAvcGNhcC5oPgotLmZ0Ci0ubmYKLS5MUAotLmZ0IEIKLXBjYXBfZHVtcGVyX3QgKnBjYXBfZHVtcF9vcGVuKHBjYXBfdCAqcCwgY29uc3QgY2hhciAqZm5hbWUpOwotcGNhcF9kdW1wZXJfdCAqcGNhcF9kdW1wX29wZW5fYXBwZW5kKHBjYXBfdCAqcCwgY29uc3QgY2hhciAqZm5hbWUpOwotcGNhcF9kdW1wZXJfdCAqcGNhcF9kdW1wX2ZvcGVuKHBjYXBfdCAqcCwgRklMRSAqZnApOwotLmZ0Ci0uZmkKLS5TSCBERVNDUklQVElPTgotLkIgcGNhcF9kdW1wX29wZW4oKQotaXMgY2FsbGVkIHRvIG9wZW4gYSBgYHNhdmVmaWxlJycgZm9yIHdyaXRpbmcuCi0uSSBmbmFtZQotc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIG9wZW4uIFRoZSBmaWxlIHdpbGwgaGF2ZQotdGhlIHNhbWUgZm9ybWF0IGFzIHRob3NlIHVzZWQgYnkKLS5CUiB0Y3BkdW1wICgxKQotYW5kCi0uQlIgdGNwc2xpY2UgKDEpLgotVGhlIG5hbWUgIi0iIGlzIGEgc3lub255bQotZm9yCi0uQlIgc3Rkb3V0IC4KLS5QUAotLkIgcGNhcF9kdW1wX2ZvcGVuKCkKLWlzIGNhbGxlZCB0byB3cml0ZSBkYXRhIHRvIGFuIGV4aXN0aW5nIG9wZW4gc3RyZWFtCi0uSVIgZnAgOwotdGhpcyBzdHJlYW0gd2lsbCBiZSBjbG9zZWQgYnkgYSBzdWJzZXF1ZW50IGNhbGwgdG8KLS5CUiBwY2FwX2R1bXBfY2xvc2UoKSAuCi1Ob3RlIHRoYXQgb24gV2luZG93cywgdGhhdCBzdHJlYW0gc2hvdWxkIGJlIG9wZW5lZCBpbiBiaW5hcnkgbW9kZS4KLS5QUAotLkkgcAotaXMgYSBjYXB0dXJlIG9yIGBgc2F2ZWZpbGUnJyBoYW5kbGUgcmV0dXJuZWQgYnkgYW4gZWFybGllciBjYWxsIHRvCi0uQiBwY2FwX2NyZWF0ZSgpCi1hbmQgYWN0aXZhdGVkIGJ5IGFuIGVhcmxpZXIgY2FsbCB0bwotLkJSIHBjYXBfYWN0aXZhdGUoKSAsCi1vciByZXR1cm5lZCBieSBhbiBlYXJsaWVyIGNhbGwgdG8KLS5CUiBwY2FwX29wZW5fb2ZmbGluZSgpICwKLS5CUiBwY2FwX29wZW5fbGl2ZSgpICwKLW9yCi0uQlIgcGNhcF9vcGVuX2RlYWQoKSAuCi1UaGUgdGltZSBzdGFtcCBwcmVjaXNpb24sIGxpbmstbGF5ZXIgdHlwZSwgYW5kIHNuYXBzaG90IGxlbmd0aCBmcm9tCi0uSSBwCi1hcmUgdXNlZCBhcyB0aGUgbGluay1sYXllciB0eXBlIGFuZCBzbmFwc2hvdCBsZW5ndGggb2YgdGhlIG91dHB1dCBmaWxlLgotLlBQCi0uQiBwY2FwX2R1bXBfb3Blbl9hcHBlbmQoKQotaXMgbGlrZQotLkIgcGNhcF9kdW1wX29wZW4KLWJ1dCBkb2VzIG5vdCBjcmVhdGUgdGhlIGZpbGUgaWYgaXQgZG9lcyBub3QgZXhpc3QgYW5kLCBpZiBpdCBkb2VzCi1hbHJlYWR5IGV4aXN0LCBhbmQgaXMgYSBwY2FwIGZpbGUgd2l0aCB0aGUgc2FtZSBieXRlIG9yZGVyIGFzIHRoZSBob3N0Ci1vcGVuaW5nIHRoZSBmaWxlLCBhbmQgaGFzIHRoZSBzYW1lIHRpbWUgc3RhbXAgcHJlY2lzaW9uLCBsaW5rLWxheWVyCi1oZWFkZXIgdHlwZSwgYW5kIHNuYXBzaG90IGxlbmd0aCBhcwotLklSIHAgLAotaXQgd2lsbCB3cml0ZSBuZXcgcGFja2V0cyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgotLlNIIFJFVFVSTiBWQUxVRVMKLUEgcG9pbnRlciB0byBhCi0uQiBwY2FwX2R1bXBlcl90Ci1zdHJ1Y3R1cmUgdG8gdXNlIGluIHN1YnNlcXVlbnQKLS5CIHBjYXBfZHVtcCgpCi1hbmQKLS5CIHBjYXBfZHVtcF9jbG9zZSgpCi1jYWxscyBpcyByZXR1cm5lZCBvbiBzdWNjZXNzLgotLkIgTlVMTAotaXMgcmV0dXJuZWQgb24gZmFpbHVyZS4KLUlmCi0uQiBOVUxMCi1pcyByZXR1cm5lZCwKLS5CIHBjYXBfZ2V0ZXJyKFxmSXBcZkIpCi1jYW4gYmUgdXNlZCB0byBnZXQgdGhlIGVycm9yIHRleHQuCi0uU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApLCBwY2FwX2NyZWF0ZSgzUENBUCksIHBjYXBfYWN0aXZhdGUoM1BDQVApLAotXCVwY2FwX29wZW5fb2ZmbGluZSgzUENBUCksIHBjYXBfb3Blbl9saXZlKDNQQ0FQKSwgcGNhcF9vcGVuX2RlYWQoM1BDQVApLAotcGNhcF9kdW1wKDNQQ0FQKSwgcGNhcF9kdW1wX2Nsb3NlKDNQQ0FQKSwgcGNhcF9nZXRlcnIoM1BDQVApLAotXCVwY2FwLXNhdmVmaWxlKDUpCmRpZmYgLS1naXQgYS9wY2FwX2R1bXBfb3Blbi4zcGNhcC5pbiBiL3BjYXBfZHVtcF9vcGVuLjNwY2FwLmluCmluZGV4IDViMzdiNDcuLmZkZGVjYjggMTAwNjQ0Ci0tLSBhL3BjYXBfZHVtcF9vcGVuLjNwY2FwLmluCisrKyBiL3BjYXBfZHVtcF9vcGVuLjNwY2FwLmluCkBAIC0xNyw5ICsxNywxMCBAQAogLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAuXCIgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KIC5cIgotLlRIIFBDQVBfRFVNUF9PUEVOIDNQQ0FQICIyMiBKdW5lIDIwMTgiCisuVEggUENBUF9EVU1QX09QRU4gM1BDQVAgIjMgSnVseSAyMDIwIgogLlNIIE5BTUUKLXBjYXBfZHVtcF9vcGVuLCBwY2FwX2R1bXBfZm9wZW4gXC0gb3BlbiBhIGZpbGUgdG8gd2hpY2ggdG8gd3JpdGUgcGFja2V0cworcGNhcF9kdW1wX29wZW4sIHBjYXBfZHVtcF9vcGVuX2FwcGVuZCwgcGNhcF9kdW1wX2ZvcGVuIFwtIG9wZW4gYSBmaWxlIHRvCit3aGljaCB0byB3cml0ZSBwYWNrZXRzCiAuU0ggU1lOT1BTSVMKIC5uZgogLmZ0IEIKQEAgLTM0LDcgKzM1LDcgQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfZHVtcF9vcGVuKCkKKy5CUiBwY2FwX2R1bXBfb3BlbiAoKQogaXMgY2FsbGVkIHRvIG9wZW4gYSBgYHNhdmVmaWxlJycgZm9yIHdyaXRpbmcuCiAuSSBmbmFtZQogc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIG9wZW4uIFRoZSBmaWxlIHdpbGwgaGF2ZQpAQCAtNDIsNTcgKzQzLDY2IEBACiAuQlIgdGNwZHVtcCAoMSkKIGFuZAogLkJSIHRjcHNsaWNlICgxKS4KK0lmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQ7IGlmIHRoZSBmaWxlIGV4aXN0cywgaXQKK3dpbGwgYmUgdHJ1bmNhdGVkIGFuZCBvdmVyd3JpdHRlbi4KIFRoZSBuYW1lICItIiBpcyBhIHN5bm9ueW0KIGZvcgogLkJSIHN0ZG91dCAuCiAuUFAKLS5CIHBjYXBfZHVtcF9mb3BlbigpCisuQlIgcGNhcF9kdW1wX2ZvcGVuICgpCiBpcyBjYWxsZWQgdG8gd3JpdGUgZGF0YSB0byBhbiBleGlzdGluZyBvcGVuIHN0cmVhbQogLklSIGZwIDsKIHRoaXMgc3RyZWFtIHdpbGwgYmUgY2xvc2VkIGJ5IGEgc3Vic2VxdWVudCBjYWxsIHRvCi0uQlIgcGNhcF9kdW1wX2Nsb3NlKCkgLgorLkJSIHBjYXBfZHVtcF9jbG9zZSAoM1BDQVApLgorVGhlIHN0cmVhbSBpcyBhc3N1bWVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBmaWxlIHRoYXQgaGFzIGJlZW4KK25ld2x5IGNyZWF0ZWQgb3IgdHJ1bmNhdGVkLCBzbyB0aGF0IHdyaXRlcyB3aWxsIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcKK29mIHRoZSBmaWxlLgogTm90ZSB0aGF0IG9uIFdpbmRvd3MsIHRoYXQgc3RyZWFtIHNob3VsZCBiZSBvcGVuZWQgaW4gYmluYXJ5IG1vZGUuCiAuUFAKIC5JIHAKIGlzIGEgY2FwdHVyZSBvciBgYHNhdmVmaWxlJycgaGFuZGxlIHJldHVybmVkIGJ5IGFuIGVhcmxpZXIgY2FsbCB0bwotLkIgcGNhcF9jcmVhdGUoKQorLkJSIHBjYXBfY3JlYXRlICgzUENBUCkKIGFuZCBhY3RpdmF0ZWQgYnkgYW4gZWFybGllciBjYWxsIHRvCi0uQlIgcGNhcF9hY3RpdmF0ZSgpICwKKy5CUiBcJXBjYXBfYWN0aXZhdGUgKDNQQ0FQKSwKIG9yIHJldHVybmVkIGJ5IGFuIGVhcmxpZXIgY2FsbCB0bwotLkJSIHBjYXBfb3Blbl9vZmZsaW5lKCkgLAotLkJSIHBjYXBfb3Blbl9saXZlKCkgLAorLkJSIFwlcGNhcF9vcGVuX29mZmxpbmUgKDNQQ0FQKSwKKy5CUiBwY2FwX29wZW5fbGl2ZSAoM1BDQVApLAogb3IKLS5CUiBwY2FwX29wZW5fZGVhZCgpIC4KKy5CUiBwY2FwX29wZW5fZGVhZCAoM1BDQVApLgogVGhlIHRpbWUgc3RhbXAgcHJlY2lzaW9uLCBsaW5rLWxheWVyIHR5cGUsIGFuZCBzbmFwc2hvdCBsZW5ndGggZnJvbQogLkkgcAogYXJlIHVzZWQgYXMgdGhlIGxpbmstbGF5ZXIgdHlwZSBhbmQgc25hcHNob3QgbGVuZ3RoIG9mIHRoZSBvdXRwdXQgZmlsZS4KIC5QUAotLkIgcGNhcF9kdW1wX29wZW5fYXBwZW5kKCkKKy5CUiBwY2FwX2R1bXBfb3Blbl9hcHBlbmQgKCkKIGlzIGxpa2UKLS5CIHBjYXBfZHVtcF9vcGVuCi1idXQgZG9lcyBub3QgY3JlYXRlIHRoZSBmaWxlIGlmIGl0IGRvZXMgbm90IGV4aXN0IGFuZCwgaWYgaXQgZG9lcwotYWxyZWFkeSBleGlzdCwgYW5kIGlzIGEgcGNhcCBmaWxlIHdpdGggdGhlIHNhbWUgYnl0ZSBvcmRlciBhcyB0aGUgaG9zdAotb3BlbmluZyB0aGUgZmlsZSwgYW5kIGhhcyB0aGUgc2FtZSB0aW1lIHN0YW1wIHByZWNpc2lvbiwgbGluay1sYXllcgotaGVhZGVyIHR5cGUsIGFuZCBzbmFwc2hvdCBsZW5ndGggYXMKKy5CUiBwY2FwX2R1bXBfb3BlbiAoKQorYnV0LCBpZiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cywgYW5kIGlzIGEgcGNhcCBmaWxlIHdpdGggdGhlIHNhbWUgYnl0ZQorb3JkZXIgYXMgdGhlIGhvc3Qgb3BlbmluZyB0aGUgZmlsZSwgYW5kIGhhcyB0aGUgc2FtZSB0aW1lIHN0YW1wCitwcmVjaXNpb24sIGxpbmstbGF5ZXIgaGVhZGVyIHR5cGUsIGFuZCBzbmFwc2hvdCBsZW5ndGggYXMKIC5JUiBwICwKIGl0IHdpbGwgd3JpdGUgbmV3IHBhY2tldHMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4KIC5TSCBSRVRVUk4gVkFMVUVTCiBBIHBvaW50ZXIgdG8gYQogLkIgcGNhcF9kdW1wZXJfdAogc3RydWN0dXJlIHRvIHVzZSBpbiBzdWJzZXF1ZW50Ci0uQiBwY2FwX2R1bXAoKQorLkJSIHBjYXBfZHVtcCAoM1BDQVApCiBhbmQKLS5CIHBjYXBfZHVtcF9jbG9zZSgpCisuQlIgcGNhcF9kdW1wX2Nsb3NlICgzUENBUCkKIGNhbGxzIGlzIHJldHVybmVkIG9uIHN1Y2Nlc3MuCiAuQiBOVUxMCiBpcyByZXR1cm5lZCBvbiBmYWlsdXJlLgogSWYKIC5CIE5VTEwKIGlzIHJldHVybmVkLAotLkIgcGNhcF9nZXRlcnIoXGZJcFxmQikKKy5CUiBwY2FwX2dldGVyciAoM1BDQVApCiBjYW4gYmUgdXNlZCB0byBnZXQgdGhlIGVycm9yIHRleHQuCisuU0ggQkFDS1dBUkQgQ09NUEFUSUJJTElUWQorLlBQCitUaGUKKy5CUiBwY2FwX2R1bXBfb3Blbl9hcHBlbmQgKCkKK2Z1bmN0aW9uIGJlY2FtZSBhdmFpbGFibGUgaW4gbGlicGNhcCByZWxlYXNlIDEuNy4yLiAgSW4gcHJldmlvdXMKK3JlbGVhc2VzLCB0aGVyZSBpcyBubyBzdXBwb3J0IGZvciBhcHBlbmRpbmcgcGFja2V0cyB0byBhbiBleGlzdGluZworc2F2ZWZpbGUuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApLCBwY2FwX2NyZWF0ZSgzUENBUCksIHBjYXBfYWN0aXZhdGUoM1BDQVApLAotXCVwY2FwX29wZW5fb2ZmbGluZSgzUENBUCksIHBjYXBfb3Blbl9saXZlKDNQQ0FQKSwgcGNhcF9vcGVuX2RlYWQoM1BDQVApLAotcGNhcF9kdW1wKDNQQ0FQKSwgcGNhcF9kdW1wX2Nsb3NlKDNQQ0FQKSwgcGNhcF9nZXRlcnIoM1BDQVApLAotXCVwY2FwLXNhdmVmaWxlKEBNQU5fRklMRV9GT1JNQVRTQCkKKy5CUiBwY2FwICgzUENBUCksCisuQlIgXCVwY2FwLXNhdmVmaWxlIChATUFOX0ZJTEVfRk9STUFUU0ApCmRpZmYgLS1naXQgYS9wY2FwX2ZpbGUuM3BjYXAgYi9wY2FwX2ZpbGUuM3BjYXAKaW5kZXggY2Q2YjA2Yi4uNzQwMjk3MyAxMDA2NDQKLS0tIGEvcGNhcF9maWxlLjNwY2FwCisrKyBiL3BjYXBfZmlsZS4zcGNhcApAQCAtMzEsMjcgKzMxLDI5IEBACiAuZnQKIC5maQogLlNIIERFU0NSSVBUSU9OCi0uQiBwY2FwX2ZpbGUoKQorLkJSIHBjYXBfZmlsZSAoKQogcmV0dXJucyB0aGUgc3RhbmRhcmQgSS9PIHN0cmVhbSBvZiB0aGUgYGBzYXZlZmlsZSwnJyBpZiBhIGBgc2F2ZWZpbGUnJwogd2FzIG9wZW5lZCB3aXRoCi0uQlIgcGNhcF9vcGVuX29mZmxpbmUoKSAsCi1vciBOVUxMLCBpZiBhIG5ldHdvcmsgZGV2aWNlIHdhcyBvcGVuZWQgd2l0aAotLkIgcGNhcF9jcmVhdGUoKQorLkJSIHBjYXBfb3Blbl9vZmZsaW5lICgzUENBUCksCitvcgorLkJSIE5VTEwgLAoraWYgYSBuZXR3b3JrIGRldmljZSB3YXMgb3BlbmVkIHdpdGgKKy5CUiBwY2FwX2NyZWF0ZSAoM1BDQVApCiBhbmQKLS5CUiBwY2FwX2FjdGl2YXRlKCkgLAorLkJSIFwlcGNhcF9hY3RpdmF0ZSAoM1BDQVApLAogb3Igd2l0aAotLkJSIHBjYXBfb3Blbl9saXZlKCkgLgorLkJSIHBjYXBfb3Blbl9saXZlICgzUENBUCkuCiAuUFAKIE5vdGUgdGhhdCB0aGUgUGFja2V0IENhcHR1cmUgbGlicmFyeSBpcyB1c3VhbGx5IGJ1aWx0IHdpdGggbGFyZ2UgZmlsZQogc3VwcG9ydCwgc28gdGhlIHN0YW5kYXJkIEkvTyBzdHJlYW0gb2YgdGhlIGBgc2F2ZWZpbGUnJyBtaWdodCByZWZlciB0bwogYSBmaWxlIGxhcmdlciB0aGFuIDIgZ2lnYWJ5dGVzOyBhcHBsaWNhdGlvbnMgdGhhdCB1c2UKLS5CIHBjYXBfZmlsZSgpCisuQlIgcGNhcF9maWxlICgpCiBzaG91bGQsIGlmIHBvc3NpYmxlLCB1c2UgY2FsbHMgdGhhdCBzdXBwb3J0IGxhcmdlIGZpbGVzIG9uIHRoZSByZXR1cm4KIHZhbHVlIG9mCi0uQiBwY2FwX2ZpbGUoKQorLkJSIHBjYXBfZmlsZSAoKQogb3IgdGhlIHZhbHVlIHJldHVybmVkIGJ5Ci0uQiBmaWxlbm8oKQorLkJSIGZpbGVubyAoMykKIHdoZW4gcGFzc2VkIHRoZSByZXR1cm4gdmFsdWUgb2YKLS5CUiBwY2FwX2ZpbGUoKSAuCisuQlIgcGNhcF9maWxlICgpLgogLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcF9vcGVuX29mZmxpbmUoM1BDQVApCisuQlIgcGNhcCAoM1BDQVApCmRpZmYgLS1naXQgYS9wY2FwX2ZpbGVuby4zcGNhcCBiL3BjYXBfZmlsZW5vLjNwY2FwCmluZGV4IGU4YzlhYzQuLjZkMGVkZjggMTAwNjQ0Ci0tLSBhL3BjYXBfZmlsZW5vLjNwY2FwCisrKyBiL3BjYXBfZmlsZW5vLjNwY2FwCkBAIC0xNyw3ICsxNyw3IEBACiAuXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKIC5cIiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogLlwiCi0uVEggUENBUF9GSUxFTk8gM1BDQVAgIjcgQXByaWwgMjAxNCIKKy5USCBQQ0FQX0ZJTEVOTyAzUENBUCAiMjUgSnVseSAyMDE4IgogLlNIIE5BTUUKIHBjYXBfZmlsZW5vIFwtIGdldCB0aGUgZmlsZSBkZXNjcmlwdG9yIGZvciBhIGxpdmUgY2FwdHVyZQogLlNIIFNZTk9QU0lTCkBAIC0zNSwzMiArMzUsMzEgQEAKIC5JIHAKIHJlZmVycyB0byBhIG5ldHdvcmsgZGV2aWNlIHRoYXQgd2FzIG9wZW5lZCBmb3IgYSBsaXZlIGNhcHR1cmUgdXNpbmcKIGEgY29tYmluYXRpb24gb2YKLS5CIHBjYXBfY3JlYXRlKCkKKy5CUiBwY2FwX2NyZWF0ZSAoM1BDQVApCiBhbmQKLS5CUiBwY2FwX2FjdGl2YXRlKCkgLAorLkJSIHBjYXBfYWN0aXZhdGUgKDNQQ0FQKSwKIG9yIHVzaW5nCi0uQlIgcGNhcF9vcGVuX2xpdmUoKSAsCi0uQiBwY2FwX2ZpbGVubygpCisuQlIgcGNhcF9vcGVuX2xpdmUgKDNQQ0FQKSwKKy5CUiBwY2FwX2ZpbGVubyAoKQogcmV0dXJucyB0aGUgZmlsZSBkZXNjcmlwdG9yIGZyb20gd2hpY2ggY2FwdHVyZWQgcGFja2V0cyBhcmUgcmVhZC4KIC5MUAogSWYKIC5JIHAKIHJlZmVycyB0byBhIGBgc2F2ZWZpbGUnJyB0aGF0IHdhcyBvcGVuZWQgdXNpbmcgZnVuY3Rpb25zIHN1Y2ggYXMKLS5CUiBwY2FwX29wZW5fb2ZmbGluZSgpCisuQlIgcGNhcF9vcGVuX29mZmxpbmUgKDNQQ0FQKQogb3IKLS5CUiBwY2FwX2ZvcGVuX29mZmxpbmUoKSAsCisuQlIgcGNhcF9mb3Blbl9vZmZsaW5lICgzUENBUCksCiBhIGBgZGVhZCcnCiAuQiBwY2FwX3QKIG9wZW5lZCB1c2luZwotLkJSIHBjYXBfb3Blbl9kZWFkKCkgLAorLkJSIHBjYXBfb3Blbl9kZWFkICgzUENBUCksCiBvciBhCiAuQiBwY2FwX3QKIHRoYXQgd2FzIGNyZWF0ZWQgd2l0aAotLkIgcGNhcF9jcmVhdGUoKQorLkJSIHBjYXBfY3JlYXRlICgpCiBidXQgdGhhdCBoYXMgbm90IHlldCBiZWVuIGFjdGl2YXRlZCB3aXRoCi0uQlIgcGNhcF9hY3RpdmF0ZSgpICwKLWl0IHJldHVybnMgXC0xLgorLkJSIHBjYXBfYWN0aXZhdGUgKCksCitpdCByZXR1cm5zCisuQlIgUENBUF9FUlJPUiAuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApLCBwY2FwX2NyZWF0ZSgzUENBUCksIHBjYXBfYWN0aXZhdGUoM1BDQVApLAotcGNhcF9vcGVuX2xpdmUoM1BDQVApLCBwY2FwX29wZW5fb2ZmbGluZSgzUENBUCksCi1cJXBjYXBfZm9wZW5fb2ZmbGluZSgzUENBUCksIHBjYXBfb3Blbl9kZWFkKDNQQ0FQKQorLkJSIHBjYXAgKDNQQ0FQKQpkaWZmIC0tZ2l0IGEvcGNhcF9maW5kYWxsZGV2cy4zcGNhcCBiL3BjYXBfZmluZGFsbGRldnMuM3BjYXAKaW5kZXggMTQ4MjVhZC4uNDFjOThmZSAxMDA2NDQKLS0tIGEvcGNhcF9maW5kYWxsZGV2cy4zcGNhcAorKysgYi9wY2FwX2ZpbmRhbGxkZXZzLjNwY2FwCkBAIC0xNyw3ICsxNyw3IEBACiAuXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKIC5cIiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogLlwiCi0uVEggUENBUF9GSU5EQUxMREVWUyAzUENBUCAiMjkgQXByaWwgMjAxOCIKKy5USCBQQ0FQX0ZJTkRBTExERVZTIDNQQ0FQICIyMyBBdWd1c3QgMjAxOCIKIC5TSCBOQU1FCiBwY2FwX2ZpbmRhbGxkZXZzLCBwY2FwX2ZyZWVhbGxkZXZzIFwtIGdldCBhIGxpc3Qgb2YgY2FwdHVyZSBkZXZpY2VzLCBhbmQKIGZyZWUgdGhhdCBsaXN0CkBAIC0zOCwyMSArMzgsMjEgQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfZmluZGFsbGRldnMoKQorLkJSIHBjYXBfZmluZGFsbGRldnMgKCkKIGNvbnN0cnVjdHMgYSBsaXN0IG9mIG5ldHdvcmsgZGV2aWNlcyB0aGF0IGNhbiBiZSBvcGVuZWQgd2l0aAotLkIgcGNhcF9jcmVhdGUoKQorLkJSIHBjYXBfY3JlYXRlICgzUENBUCkKIGFuZAotLkIgcGNhcF9hY3RpdmF0ZSgpCisuQlIgcGNhcF9hY3RpdmF0ZSAoM1BDQVApCiBvciB3aXRoCi0uQlIgcGNhcF9vcGVuX2xpdmUoKSAuCisuQlIgcGNhcF9vcGVuX2xpdmUgKDNQQ0FQKS4KIChOb3RlIHRoYXQgdGhlcmUgbWF5IGJlIG5ldHdvcmsgZGV2aWNlcyB0aGF0IGNhbm5vdCBiZSBvcGVuZWQgYnkgdGhlCiBwcm9jZXNzIGNhbGxpbmcKLS5CUiBwY2FwX2ZpbmRhbGxkZXZzKCkgLAorLkJSIHBjYXBfZmluZGFsbGRldnMgKCksCiBiZWNhdXNlLCBmb3IgZXhhbXBsZSwgdGhhdCBwcm9jZXNzIGRvZXMgbm90IGhhdmUgc3VmZmljaWVudCBwcml2aWxlZ2VzCiB0byBvcGVuIHRoZW0gZm9yIGNhcHR1cmluZzsgaWYgc28sIHRob3NlIGRldmljZXMgd2lsbCBub3QgYXBwZWFyIG9uIHRoZQogbGlzdC4pCiBJZgotLkIgcGNhcF9maW5kYWxsZGV2cygpCisuQlIgcGNhcF9maW5kYWxsZGV2cyAoKQogc3VjY2VlZHMsIHRoZSBwb2ludGVyIHBvaW50ZWQgdG8gYnkKIC5JIGFsbGRldnNwCiBpcyBzZXQgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGxpc3QsIG9yIHRvCkBAIC03Miw3ICs3Miw3IEBACiAuVFAKIC5CIG5hbWUKIGEgcG9pbnRlciB0byBhIHN0cmluZyBnaXZpbmcgYSBuYW1lIGZvciB0aGUgZGV2aWNlIHRvIHBhc3MgdG8KLS5CIHBjYXBfb3Blbl9saXZlKCkKKy5CUiBwY2FwX29wZW5fbGl2ZSAoKQogLlRQCiAuQiBkZXNjcmlwdGlvbgogaWYgbm90CkBAIC0xOTQsMjEgKzE5NCw0MCBAQAogLkJSICJzdHJ1Y3Qgc29ja2FkZHJfaW42Ii4KIC5QUAogVGhlIGxpc3Qgb2YgZGV2aWNlcyBtdXN0IGJlIGZyZWVkIHdpdGgKLS5CUiBwY2FwX2ZyZWVhbGxkZXZzKCkgLAorLkJSIHBjYXBfZnJlZWFsbGRldnMgKDNQQ0FQKSwKIHdoaWNoIGZyZWVzIHRoZSBsaXN0IHBvaW50ZWQgdG8gYnkKIC5JUiBhbGxkZXZzIC4KIC5TSCBSRVRVUk4gVkFMVUUKLS5CIHBjYXBfZmluZGFsbGRldnMoKQotcmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIFwtMSBvbiBmYWlsdXJlOyBhcyBpbmRpY2F0ZWQsIGZpbmRpbmcgbm8KKy5CUiBwY2FwX2ZpbmRhbGxkZXZzICgpCityZXR1cm5zCisuQiAwCitvbiBzdWNjZXNzIGFuZAorLkIgUENBUF9FUlJPUgorb24gZmFpbHVyZTsgYXMgaW5kaWNhdGVkLCBmaW5kaW5nIG5vCiBkZXZpY2VzIGlzIGNvbnNpZGVyZWQgc3VjY2VzcywgcmF0aGVyIHRoYW4gZmFpbHVyZSwgc28gMCB3aWxsIGJlCi1yZXR1cm5lZCBpbiB0aGF0IGNhc2UuCi1JZiBcLTEgaXMgcmV0dXJuZWQsCityZXR1cm5lZCBpbiB0aGF0IGNhc2UuIElmCisuQiBQQ0FQX0VSUk9SCitpcyByZXR1cm5lZCwKIC5JIGVycmJ1ZgogaXMgZmlsbGVkIGluIHdpdGggYW4gYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZS4KIC5JIGVycmJ1ZgogaXMgYXNzdW1lZCB0byBiZSBhYmxlIHRvIGhvbGQgYXQgbGVhc3QKIC5CIFBDQVBfRVJSQlVGX1NJWkUKIGNoYXJzLgorLlNIIEJBQ0tXQVJEIENPTVBBVElCSUxJVFkKKy5QUAorVGhlCisuQiBQQ0FQX0lGX1VQCithbmQKKy5CIFBDQVBfSUZfUlVOTklORworY29uc3RhbnRzIGJlY2FtZSBhdmFpbGFibGUgaW4gbGlicGNhcCByZWxlYXNlIDEuNi4xLiAgVGhlCisuQlIgUENBUF9JRl9XSVJFTEVTUyAsCisuQlIgUENBUF9JRl9DT05ORUNUSU9OX1NUQVRVUyAsCisuQlIgUENBUF9JRl9DT05ORUNUSU9OX1NUQVRVU19VTktOT1dOICwKKy5CUiBQQ0FQX0lGX0NPTk5FQ1RJT05fU1RBVFVTX0NPTk5FQ1RFRCAsCisuQlIgUENBUF9JRl9DT05ORUNUSU9OX1NUQVRVU19ESVNDT05ORUNURUQgLAorYW5kCisuQiBQQ0FQX0lGX0NPTk5FQ1RJT05fU1RBVFVTX05PVF9BUFBMSUNBQkxFCitjb25zdGFudHMgYmVjYW1lIGF2YWlsYWJsZSBpbiBsaWJwY2FwIHJlbGVhc2UgMS45LjAuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApLCBwY2FwX2NyZWF0ZSgzUENBUCksIHBjYXBfYWN0aXZhdGUoM1BDQVApLAotcGNhcF9vcGVuX2xpdmUoM1BDQVApCisuQlIgcGNhcCAoM1BDQVApCmRpZmYgLS1naXQgYS9wY2FwX2ZyZWVjb2RlLjNwY2FwIGIvcGNhcF9mcmVlY29kZS4zcGNhcAppbmRleCBmYWM0YjNkLi42NTkxNWZhIDEwMDY0NAotLS0gYS9wY2FwX2ZyZWVjb2RlLjNwY2FwCisrKyBiL3BjYXBfZnJlZWNvZGUuM3BjYXAKQEAgLTMxLDEzICszMSwxMyBAQAogLmZ0CiAuZmkKIC5TSCBERVNDUklQVElPTgotLkIgcGNhcF9mcmVlY29kZSgpCisuQlIgcGNhcF9mcmVlY29kZSAoKQogaXMgdXNlZCB0byBmcmVlIHVwIGFsbG9jYXRlZCBtZW1vcnkgcG9pbnRlZCB0byBieSBhCiAuSSBicGZfcHJvZ3JhbQogc3RydWN0IGdlbmVyYXRlZCBieQotLkIgcGNhcF9jb21waWxlKCkKKy5CUiBwY2FwX2NvbXBpbGUgKDNQQ0FQKQogd2hlbiB0aGF0IEJQRiBwcm9ncmFtIGlzIG5vIGxvbmdlciBuZWVkZWQsIGZvciBleGFtcGxlIGFmdGVyIGl0CiBoYXMgYmVlbiBtYWRlIHRoZSBmaWx0ZXIgcHJvZ3JhbSBmb3IgYSBwY2FwIHN0cnVjdHVyZSBieSBhIGNhbGwgdG8KLS5CUiBwY2FwX3NldGZpbHRlcigpIC4KKy5CUiBwY2FwX3NldGZpbHRlciAoM1BDQVApLgogLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcF9jb21waWxlKDNQQ0FQKSwgcGNhcF9zZXRmaWx0ZXIoM1BDQVApCisuQlIgcGNhcCAoM1BDQVApCmRpZmYgLS1naXQgYS9wY2FwX2dldF9yZXF1aXJlZF9zZWxlY3RfdGltZW91dC4zcGNhcCBiL3BjYXBfZ2V0X3JlcXVpcmVkX3NlbGVjdF90aW1lb3V0LjNwY2FwCmluZGV4IGJjMzNlNWQuLjAyNTZhNmEgMTAwNjQ0Ci0tLSBhL3BjYXBfZ2V0X3JlcXVpcmVkX3NlbGVjdF90aW1lb3V0LjNwY2FwCisrKyBiL3BjYXBfZ2V0X3JlcXVpcmVkX3NlbGVjdF90aW1lb3V0LjNwY2FwCkBAIC0xNywxMCArMTcsMTAgQEAKIC5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgogLlwiIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAuXCIKLS5USCBQQ0FQX0dFVF9SRVFVSVJFRF9TRUxFQ1RfVElNRU9VVCAzUENBUCAiMjAgSmFudWFyeSAyMDE4IgorLlRIIFBDQVBfR0VUX1JFUVVJUkVEX1NFTEVDVF9USU1FT1VUIDNQQ0FQICIyOSBKYW51YXJ5IDIwMjAiCiAuU0ggTkFNRQotcGNhcF9nZXRfcmVxdWlyZWRfc2VsZWN0X3RpbWVvdXQgXC0gZ2V0IGEgZmlsZSBkZXNjcmlwdG9yIG9uIHdoaWNoIGEKLXNlbGVjdCgpIGNhbiBiZSBkb25lIGZvciBhIGxpdmUgY2FwdHVyZQorcGNhcF9nZXRfcmVxdWlyZWRfc2VsZWN0X3RpbWVvdXQgXC0gZ2V0IGEgdGltZW91dCB0byBiZSB1c2VkIHdoZW4gZG9pbmcKK3NlbGVjdCgpIGZvciBhIGxpdmUgY2FwdHVyZQogLlNIIFNZTk9QU0lTCiAubmYKIC5mdCBCCkBAIC0yOCw1MCArMjgsOTggQEAKIC5mdAogLkxQCiAuZnQgQgotc3RydWN0IHRpbWV2YWwgKnBjYXBfZ2V0X3JlcXVpcmVkX3NlbGVjdF90aW1lb3V0KHBjYXBfdCAqcCk7Citjb25zdCBzdHJ1Y3QgdGltZXZhbCAqcGNhcF9nZXRfcmVxdWlyZWRfc2VsZWN0X3RpbWVvdXQocGNhcF90ICpwKTsKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfZ2V0X3JlcXVpcmVkX3NlbGVjdF90aW1lb3V0KCkKKy5CUiBwY2FwX2dldF9yZXF1aXJlZF9zZWxlY3RfdGltZW91dCAoKQogcmV0dXJucywgb24gVU5JWCwgYSBwb2ludGVyIHRvIGEKIC5CIHN0cnVjdCB0aW1ldmFsCiBjb250YWluaW5nIGEgdmFsdWUgdGhhdCBtdXN0IGJlIHVzZWQgYXMgdGhlIG1pbmltdW0gdGltZW91dCBpbgotLkJSIHNlbGVjdCgpICwKLS5CUiBwb2xsKCkgLAotLkJSIGVwb2xsX3dhaXQoKSAsCisuQlIgc2VsZWN0ICgyKSwKKy5CUiBwb2xsICgyKSwKKy5CUiBlcG9sbF93YWl0ICgyKSwKIGFuZAotLkIga2V2ZW50KCkKLWNhbGxzIGlmCi0uQiBwY2FwX2dldF9zZWxlY3RhYmxlX2ZkKCkKLXJldHVybnMgXC0xLgotLlBQCi1UaGUgdGltZW91dCB0aGF0IHNob3VsZCBiZSB1c2VkIGluIHRob3NlIGNhbGxzIG11c3QgYmUgbm8gbGFyZ2VyIHRoYW4KLXRoZSBzbWFsbGVzdCBvZiBhbGwgdGltZW91dHMgcmV0dXJuZWQgYnkKLS5CIHBjYXBfZ2V0X3JlcXVpcmVkX3NlbGVjdF90aW1lb3V0KCkKLWZvciBkZXZpY2VzIGZyb20gd2hpY2ggcGFja2V0cyB3aWxsIGJlIGNhcHR1cmVkLgotLlBQCi1UaGUgZGV2aWNlIGZvciB3aGljaAotLkIgcGNhcF9nZXRfc2VsZWN0YWJsZV9mZCgpCi1yZXR1cm5lZCBcLTEgbXVzdCBiZSBwdXQgaW4gbm9uLWJsb2NraW5nIG1vZGUgd2l0aAotLkJSIHBjYXBfc2V0bm9uYmxvY2soKSAsCi1hbmQgYW4gYXR0ZW1wdCBtdXN0IGFsd2F5cyBiZSBtYWRlIHRvIHJlYWQgcGFja2V0cyBmcm9tIHRoZSBkZXZpY2UKLXdoZW4gdGhlCi0uQlIgc2VsZWN0KCkgLAotLkJSIHBvbGwoKSAsCi0uQlIgZXBvbGxfd2FpdCgpICwKKy5CUiBrZXZlbnQgKDIpCitjYWxscywgb3IKKy5CIE5VTEwKK2lmIHRoZXJlIGlzIG5vIHN1Y2ggdGltZW91dC4KK0lmIGEKKy5SQiBub24tIE5VTEwKK3ZhbHVlIGlzIHJldHVybmVkLCBpdCBtdXN0IGJlIHVzZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyCisuQlIgcGNhcF9nZXRfc2VsZWN0YWJsZV9mZCAoM1BDQVApCityZXR1cm5zCisuQiBcLTEKK2ZvciBhbnkgZGVzY3JpcHRvciBvbiB3aGljaCB0aG9zZSBjYWxscyBhcmUgYmVpbmcgZG9uZS4KKy5CUiBwY2FwX2dldF9yZXF1aXJlZF9zZWxlY3RfdGltZW91dCAoKQorc2hvdWxkIGJlIGNhbGxlZCBmb3IgYWxsCisuQlIgcGNhcF90IHMKK2JlZm9yZSBhIGNhbGwgdG8KKy5CUiBzZWxlY3QgKCksCisuQlIgcG9sbCAoKSwKKy5CUiBlcG9sbF93YWl0ICgpLAogb3IKLS5CIGtldmVudCgpCi1jYWxsIHJldHVybnMuCisuQlIga2V2ZW50ICgpLAorYW5kIGFueSB0aW1lb3V0cyB1c2VkIGZvciB0aG9zZSBjYWxscyBzaG91bGQgYmUgdXBkYXRlZCBhcyBhcHByb3ByaWF0ZQorZ2l2ZW4gdGhlIG5ldyB2YWx1ZSBvZiB0aGUgdGltZW91dC4KKy5QUAorRm9yCisuQlIga2V2ZW50ICgpLAorb25lCisuQiBFVkZJTFRfVElNRVIKK2ZpbHRlciBwZXIgc2VsZWN0YWJsZSBkZXNjcmlwdG9yIGNhbiBiZSB1c2VkLCByYXRoZXIgdGhhbiB1c2luZyB0aGUKK3RpbWVvdXQgYXJndW1lbnQgdG8KKy5CUiBrZXZlbnQgKCk7CitpZiB0aGUKKy5CIEVWRklMVF9USU1FUgorZXZlbnQgZm9yIGEgcGFydGljdWxhciBzZWxlY3RhYmxlIGRlc2NyaXB0b3Igc2lnbmFscyBhbiBldmVudCwKKy5CUiBwY2FwX2Rpc3BhdGNoICgzUENBUCkKK3Nob3VsZCBiZSBjYWxsZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nCisuQlIgcGNhcF90IC4KKy5QUAorT24gTGludXggc3lzdGVtcyB3aXRoCisuQlIgdGltZXJmZF9jcmVhdGUgKDIpLAorb25lIHRpbWVyIG9iamVjdCBjcmVhdGVkIGJ5CisuQlIgdGltZXJmZF9jcmVhdGUgKCkKK3BlciBzZWxlY3RhYmxlIGRlc2NyaXB0b3IgY2FuIGJlIHVzZWQsIHJhdGhlciB0aGFuIHVzaW5nIHRoZSB0aW1lb3V0Cithcmd1bWVudCB0bworLkJSIGVwb2xsX3dhaXQgKCk7CitpZiB0aGUKK3RpbWVyIG9iamVjdCBmb3IgYSBwYXJ0aWN1bGFyIHNlbGVjdGFibGUgZGVzY3JpcHRvciBzaWduYWxzIGFuIGV2ZW50LAorLkJSIHBjYXBfZGlzcGF0Y2ggKDNQQ0FQKQorc2hvdWxkIGJlIGNhbGxlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcKKy5CUiBwY2FwX3QgLgorLlBQCitPdGhlcndpc2UsIGEgdGltZW91dCB2YWx1ZSBubyBsYXJnZXIgdGhhbgordGhlIHNtYWxsZXN0IG9mIGFsbCB0aW1lb3V0cyByZXR1cm5lZCBieQorLkJSIFwlcGNhcF9nZXRfcmVxdWlyZWRfc2VsZWN0X3RpbWVvdXQgKCkKK2ZvciBkZXZpY2VzIGZyb20gd2hpY2ggcGFja2V0cyB3aWxsIGJlIGNhcHR1cmVkIGFuZCBhbnkgb3RoZXIgdGltZW91dHMKK3RvIGJlIHVzZWQgaW4gdGhlIGNhbGwgc2hvdWxkIGJlIHVzZWQgYXMgdGhlIHRpbWVvdXQgZm9yIHRoZSBjYWxsLCBhbmQsCit3aGVuIHRoZSBjYWxsIHJldHVybnMsCisuQlIgcGNhcF9kaXNwYXRjaCAoM1BDQVApCitzaG91bGQgYmUgY2FsbGVkIGZvciBhbGwKKy5CUiBwY2FwX3QgcworZm9yIHdoaWNoIGEKKy5SQiBub24tIE5VTEwKK3RpbWVvdXQgd2FzIHJldHVybmVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQncyBpbmRpY2F0ZWQgYXMgaGF2aW5nCithbnl0aGluZyB0byByZWFkIGZyb20gaXQgb3Igbm90LgorLlBQCitBbGwgZGV2aWNlcyB3aXRoIGEKKy5SQiBub24tIE5VTEwKK3RpbWVvdXQgbXVzdCBiZSBwdXQgaW4gbm9uLWJsb2NraW5nIG1vZGUgd2l0aAorLkJSIHBjYXBfc2V0bm9uYmxvY2sgKDNQQ0FQKS4KIC5QUAogTm90ZSB0aGF0IGEgZGV2aWNlIG9uIHdoaWNoIGEgcmVhZCBjYW4gYmUgZG9uZSB3aXRob3V0IGJsb2NraW5nIG1heSwKIG9uIHNvbWUgcGxhdGZvcm1zLCBub3QgaGF2ZSBhbnkgcGFja2V0cyB0byByZWFkIGlmIHRoZSBwYWNrZXQgYnVmZmVyCiB0aW1lb3V0IGhhcyBleHBpcmVkLiAgQSBjYWxsIHRvCi0uQiBwY2FwX2Rpc3BhdGNoKCkKKy5CUiBwY2FwX2Rpc3BhdGNoICgpCiBvcgotLkIgcGNhcF9uZXh0X2V4KCkKLXdpbGwgcmV0dXJuIDAgaW4gdGhpcyBjYXNlLCBidXQgd2lsbCBub3QgYmxvY2suCisuQlIgcGNhcF9uZXh0X2V4ICgzUENBUCkKK3dpbGwgcmV0dXJuCisuQiAwCitpbiB0aGlzIGNhc2UsIGJ1dCB3aWxsIG5vdCBibG9jay4KIC5QUAotLkIgcGNhcF9nZXRfcmVxdWlyZWRfc2VsZWN0X3RpbWVvdXQoKQorLkJSIHBjYXBfZ2V0X3JlcXVpcmVkX3NlbGVjdF90aW1lb3V0ICgpCiBpcyBub3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCiAuU0ggUkVUVVJOIFZBTFVFCiBBIHBvaW50ZXIgdG8gYQpAQCAtNzksNiArMTI3LDUzIEBACiBpcyByZXR1cm5lZCBpZiB0aGUgdGltZW91dCBpcyByZXF1aXJlZDsgb3RoZXJ3aXNlCiAuQiBOVUxMCiBpcyByZXR1cm5lZC4KKy5TSCBCQUNLV0FSRCBDT01QQVRJQklMSVRZCitUaGlzIGZ1bmN0aW9uIGJlY2FtZSBhdmFpbGFibGUgaW4gbGlicGNhcCByZWxlYXNlIDEuOS4wLiAgSW4gcHJldmlvdXMKK3JlbGVhc2VzLAorLkJSIHNlbGVjdCAoKSwKKy5CUiBwb2xsICgpLAorLkJSIGVwb2xsX3dhaXQgKCksCithbmQKKy5CUiBrZXZlbnQgKCkKK2Nhbm5vdCBiZSB1c2VkIG9uIGFueSBjYXB0dXJlIHNvdXJjZSBmb3Igd2hpY2gKKy5CUiBwY2FwX2dldF9zZWxlY3RhYmxlX2ZkICgpCityZXR1cm5zCisuQlIgXC0xIC4KKy5QUAorSW4gbGlicGNhcCByZWxlYXNlIDEuMTAuMCBhbmQgbGF0ZXIsIHRoZSB0aW1lb3V0IHZhbHVlIGNhbiBjaGFuZ2UgZnJvbQorY2FsbCB0byBjYWxsLCBzbworLkJSIHBjYXBfZ2V0X3JlcXVpcmVkX3NlbGVjdF90aW1lb3V0ICgpCittdXN0IGJlIGNhbGxlZCBiZWZvcmUgZWFjaCBjYWxsIHRvCisuQlIgc2VsZWN0ICgpLAorLkJSIHBvbGwgKCksCisuQlIgZXBvbGxfd2FpdCAoKSwKK29yCisuQlIga2V2ZW50ICgpLAorYW5kIHRoZSBuZXcgdmFsdWUgbXVzdCBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aW1lb3V0cyBmb3IgdGhlIGNhbGwuICBDb2RlCit0aGF0IGRvZXMgdGhhdCB3aWxsIGFsc28gd29yayB3aXRoIGxpYnBjYXAgMS45LnggcmVsZWFzZXMsIHNvIGNvZGUKK3VzaW5nCisuQlIgcGNhcF9nZXRfcmVxdWlyZWRfc2VsZWN0X3RpbWVvdXQgKCkKK3Nob3VsZCBiZSBjaGFuZ2VkIHRvIGNhbGwgaXQgZm9yIGVhY2ggY2FsbCB0bworLkJSIHNlbGVjdCAoKSwKKy5CUiBwb2xsICgpLAorLkJSIGVwb2xsX3dhaXQgKCksCitvcgorLkJSIGtldmVudCAoKQorZXZlbiBpZiB0aGUgY29kZSBtdXN0IGFsc28gd29yayB3aXRoIGxpYnBjYXAgMS45LnguCisuU0ggQkFDS1dBUkQgQ09NUEFUSUJJTElUWQorVGhpcyBmdW5jdGlvbiBiZWNhbWUgYXZhaWxhYmxlIGluIGxpYnBjYXAgcmVsZWFzZSAxLjkuMC4gIEluIHByZXZpb3VzCityZWxlYXNlcywKKy5CUiBzZWxlY3QgKCksCisuQlIgcG9sbCAoKSwKKy5CUiBlcG9sbF93YWl0ICgpLAorYW5kCisuQlIga2V2ZW50ICgpCitjb3VsZCBub3QgYmUgdXNlZCBmb3IgZGV2aWNlcyB0aGF0IGRvbid0IHByb3ZpZGUgYSBzZWxlY3RhYmxlIGZpbGUKK2Rlc2NyaXB0b3IuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApLCBwY2FwX2dldF9zZWxlY3RhYmxlX2ZkKDNQQ0FQKSwgc2VsZWN0KDIpLCBwb2xsKDIpLAotZXBvbGxfd2FpdCgyKSwga3F1ZXVlKDIpCisuQlIgcGNhcCAoM1BDQVApLAorLkJSIHBjYXBfZ2V0X3NlbGVjdGFibGVfZmQgKDNQQ0FQKSwKKy5CUiBzZWxlY3QgKDIpLAorLkJSIHBvbGwgKDIpLAorLkJSIGVwb2xsX3dhaXQgKDIpLAorLkJSIGtxdWV1ZSAoMikKZGlmZiAtLWdpdCBhL3BjYXBfZ2V0X3NlbGVjdGFibGVfZmQuM3BjYXAgYi9wY2FwX2dldF9zZWxlY3RhYmxlX2ZkLjNwY2FwCmluZGV4IGYxZGRmZTIuLmVkMzMzMDMgMTAwNjQ0Ci0tLSBhL3BjYXBfZ2V0X3NlbGVjdGFibGVfZmQuM3BjYXAKKysrIGIvcGNhcF9nZXRfc2VsZWN0YWJsZV9mZC4zcGNhcApAQCAtMTcsNyArMTcsNyBAQAogLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAuXCIgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KIC5cIgotLlRIIFBDQVBfR0VUX1NFTEVDVEFCTEVfRkQgM1BDQVAgIjIwIEphbnVhcnkgMjAxOCIKKy5USCBQQ0FQX0dFVF9TRUxFQ1RBQkxFX0ZEIDNQQ0FQICIyOSBKYW51YXJ5IDIwMjAiCiAuU0ggTkFNRQogcGNhcF9nZXRfc2VsZWN0YWJsZV9mZCBcLSBnZXQgYSBmaWxlIGRlc2NyaXB0b3Igb24gd2hpY2ggYSBzZWxlY3QoKSBjYW4KIGJlIGRvbmUgZm9yIGEgbGl2ZSBjYXB0dXJlCkBAIC0zMiwzNiArMzIsNDIgQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfZ2V0X3NlbGVjdGFibGVfZmQoKQorLkJSIHBjYXBfZ2V0X3NlbGVjdGFibGVfZmQgKCkKIHJldHVybnMsIG9uIFVOSVgsIGEgZmlsZSBkZXNjcmlwdG9yIG51bWJlciBmb3IgYSBmaWxlIGRlc2NyaXB0b3Igb24KIHdoaWNoIG9uZSBjYW4KIGRvIGEKLS5CUiBzZWxlY3QoKSAsCi0uQlIgcG9sbCgpICwKLS5CUiBlcG9sbF93YWl0KCkgLAotLkJSIGtldmVudCgpICwKKy5CUiBzZWxlY3QgKDIpLAorLkJSIHBvbGwgKDIpLAorLkJSIGVwb2xsX3dhaXQgKDIpLAorLkJSIGtldmVudCAoMiksCiBvciBvdGhlciBzdWNoIGNhbGwKIHRvIHdhaXQgZm9yIGl0IHRvIGJlIHBvc3NpYmxlIHRvIHJlYWQgcGFja2V0cyB3aXRob3V0IGJsb2NraW5nLCBpZiBzdWNoCi1hIGRlc2NyaXB0b3IgZXhpc3RzLCBvciBcLTEsIGlmIG5vIHN1Y2ggZGVzY3JpcHRvciBleGlzdHMuCithIGRlc2NyaXB0b3IgZXhpc3RzLCBvcgorLkJSIFwtMSAsCitpZiBubyBzdWNoIGRlc2NyaXB0b3IgZXhpc3RzLgogLlBQCiBTb21lIG5ldHdvcmsgZGV2aWNlcyBvcGVuZWQgd2l0aAotLkIgcGNhcF9jcmVhdGUoKQorLkJSIHBjYXBfY3JlYXRlICgzUENBUCkKIGFuZAotLkJSIHBjYXBfYWN0aXZhdGUoKSAsCisuQlIgcGNhcF9hY3RpdmF0ZSAoM1BDQVApLAogb3Igd2l0aAotLkJSIHBjYXBfb3Blbl9saXZlKCkgLAorLkJSIHBjYXBfb3Blbl9saXZlICgzUENBUCksCiBkbyBub3Qgc3VwcG9ydCB0aG9zZSBjYWxscyAoZm9yIGV4YW1wbGUsIHJlZ3VsYXIgbmV0d29yayBkZXZpY2VzIG9uCi1GcmVlQlNEIDQuMyBhbmQgNC40LCBhbmQgRW5kYWNlIERBRyBkZXZpY2VzKSwgc28gXC0xIGlzIHJldHVybmVkIGZvcgorRnJlZUJTRCA0LjMgYW5kIDQuNCwgYW5kIEVuZGFjZSBEQUcgZGV2aWNlcyksIHNvCisuQiBcLTEKK2lzIHJldHVybmVkIGZvcgogdGhvc2UgZGV2aWNlcy4gIEluIHRoYXQgY2FzZSwgdGhvc2UgY2FsbHMgbXVzdCBiZSBnaXZlbiBhIHRpbWVvdXQgbGVzcwogdGhhbiBvciBlcXVhbCB0byB0aGUgdGltZW91dCByZXR1cm5lZCBieQotLkIgcGNhcF9nZXRfcmVxdWlyZWRfc2VsZWN0X3RpbWVvdXQoKQorLkJSIHBjYXBfZ2V0X3JlcXVpcmVkX3NlbGVjdF90aW1lb3V0ICgzUENBUCkKIGZvciB0aGUgZGV2aWNlIGZvciB3aGljaAotLkIgcGNhcF9nZXRfc2VsZWN0YWJsZV9mZCgpCi1yZXR1cm5lZCBcLTEsIHRoZSBkZXZpY2UgbXVzdCBiZSBwdXQgaW4gbm9uLWJsb2NraW5nIG1vZGUgd2l0aCBhIGNhbGwgdG8KLS5CUiBwY2FwX3NldG5vbmJsb2NrKCkgLAorLkJSIHBjYXBfZ2V0X3NlbGVjdGFibGVfZmQgKCkKK3JldHVybmVkCisuQlIgXC0xICwKK3RoZSBkZXZpY2UgbXVzdCBiZSBwdXQgaW4gbm9uLWJsb2NraW5nIG1vZGUgd2l0aCBhIGNhbGwgdG8KKy5CUiBcJXBjYXBfc2V0bm9uYmxvY2sgKDNQQ0FQKSwKIGFuZCBhbiBhdHRlbXB0IG11c3QgYWx3YXlzIGJlIG1hZGUgdG8gcmVhZCBwYWNrZXRzIGZyb20gdGhlIGRldmljZQogd2hlbiB0aGUgY2FsbCByZXR1cm5zLiAgSWYKLS5CIHBjYXBfZ2V0X3JlcXVpcmVkX3NlbGVjdF90aW1lb3V0KCkKKy5CUiBcJXBjYXBfZ2V0X3JlcXVpcmVkX3NlbGVjdF90aW1lb3V0ICgpCiByZXR1cm5zCiAuQlIgTlVMTCAsCiBpdCBpcyBub3QgcG9zc2libGUgdG8gd2FpdCBmb3IgcGFja2V0cyB0byBhcnJpdmUgb24gdGhlIGRldmljZSBpbiBhbgpAQCAtNzAsOSArNzYsOSBAQAogTm90ZSB0aGF0IGEgZGV2aWNlIG9uIHdoaWNoIGEgcmVhZCBjYW4gYmUgZG9uZSB3aXRob3V0IGJsb2NraW5nIG1heSwKIG9uIHNvbWUgcGxhdGZvcm1zLCBub3QgaGF2ZSBhbnkgcGFja2V0cyB0byByZWFkIGlmIHRoZSBwYWNrZXQgYnVmZmVyCiB0aW1lb3V0IGhhcyBleHBpcmVkLiAgQSBjYWxsIHRvCi0uQiBwY2FwX2Rpc3BhdGNoKCkKKy5CUiBwY2FwX2Rpc3BhdGNoICgzUENBUCkKIG9yCi0uQiBwY2FwX25leHRfZXgoKQorLkJSIHBjYXBfbmV4dF9leCAoM1BDQVApCiB3aWxsIHJldHVybiAwIGluIHRoaXMgY2FzZSwgYnV0IHdpbGwgbm90IGJsb2NrLgogLlBQCiBOb3RlIHRoYXQgaW46CkBAIC04NSwxOCArOTEsMTggQEAKIC5JUAogTWFjIE9TIFggcHJpb3IgdG8gTWFjIE9TIFggMTAuNzsKIC5QUAotLkJSIHNlbGVjdCgpICwKLS5CUiBwb2xsKCkgLAorLkJSIHNlbGVjdCAoKSwKKy5CUiBwb2xsICgpLAogYW5kCi0uQiBrZXZlbnQoKQorLkJSIGtldmVudCAoKQogZG8gbm90IHdvcmsgY29ycmVjdGx5IG9uIEJQRiBkZXZpY2VzOwotLkIgcGNhcF9nZXRfc2VsZWN0YWJsZV9mZCgpCisuQlIgcGNhcF9nZXRfc2VsZWN0YWJsZV9mZCAoKQogd2lsbCByZXR1cm4gYSBmaWxlIGRlc2NyaXB0b3Igb24gbW9zdCBvZiB0aG9zZSB2ZXJzaW9ucyAodGhlIGV4Y2VwdGlvbnMKIGJlaW5nIEZyZWVCU0QgNC4zIGFuZCA0LjQpLCBidXQgYSBzaW1wbGUKLS5CUiBzZWxlY3QoKSAsCi0uQlIgcG9sbCgpICwKKy5CUiBzZWxlY3QgKCksCisuQlIgcG9sbCAoKSwKIG9yCi0uQiBrZXZlbnQoKQorLkJSIGtldmVudCAoKQogY2FsbCB3aWxsIG5vdCBpbmRpY2F0ZSB0aGF0IHRoZSBkZXNjcmlwdG9yIGlzIHJlYWRhYmxlIHVudGlsIGEgZnVsbAogYnVmZmVyJ3Mgd29ydGggb2YgcGFja2V0cyBpcyByZWNlaXZlZCwgZXZlbiBpZiB0aGUgcGFja2V0IHRpbWVvdXQKIGV4cGlyZXMgYmVmb3JlIHRoZW4uICBUbyB3b3JrIGFyb3VuZCB0aGlzLCBjb2RlIHRoYXQgdXNlcwpAQCAtMTEzLDMzICsxMTksMzQgQEAKIGFsdGhvdWdoIGl0IGRvZXMgbm8gaGFybS4pCiAuUFAKIE5vdGUgYWxzbyB0aGF0Ci0uQiBwb2xsKCkKKy5CUiBwb2xsICgpCiBhbmQKLS5CIGtldmVudCgpCisuQlIga2V2ZW50ICgpCiBkb2Vzbid0IHdvcmsgb24gY2hhcmFjdGVyIHNwZWNpYWwgZmlsZXMsIGluY2x1ZGluZyBCUEYgZGV2aWNlcywgaW4gTWFjCiBPUyBYIDEwLjQgYW5kIDEwLjUsIHNvLCB3aGlsZQotLkIgc2VsZWN0KCkKKy5CUiBzZWxlY3QgKCkKIGNhbiBiZSB1c2VkIG9uIHRoZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5Ci0uQlIgcGNhcF9nZXRfc2VsZWN0YWJsZV9mZCgpICwKLS5CIHBvbGwoKQorLkJSIHBjYXBfZ2V0X3NlbGVjdGFibGVfZmQgKCksCisuQlIgcG9sbCAoKQogYW5kCi0uQiBrZXZlbnQoKQorLkJSIGtldmVudCAoKQogY2Fubm90IGJlIHVzZWQgb24gaXQgdGhvc2UgdmVyc2lvbnMgb2YgTWFjIE9TIFguCi0uQlIgcG9sbCgpICwKKy5CUiBwb2xsICgpLAogYnV0IG5vdAotLkJSIGtldmVudCgpICwKKy5CUiBrZXZlbnQgKCksCiB3b3JrcyBvbiB0aGF0IGRlc2NyaXB0b3IgaW4gTWFjIE9TIFggcmVsZWFzZXMgcHJpb3IgdG8KIDEwLjQ7Ci0uQiBwb2xsKCkKKy5CUiBwb2xsICgpCiBhbmQKLS5CIGtldmVudCgpCisuQlIga2V2ZW50ICgpCiB3b3JrIG9uIHRoYXQgZGVzY3JpcHRvciBpbiBNYWMgT1MgWCAxMC42IGFuZCBsYXRlci4KIC5QUAotLkIgcGNhcF9nZXRfc2VsZWN0YWJsZV9mZCgpCisuQlIgcGNhcF9nZXRfc2VsZWN0YWJsZV9mZCAoKQogaXMgbm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzLgogLlNIIFJFVFVSTiBWQUxVRQotQSBzZWxlY3RhYmxlIGZpbGUgZGVzY3JpcHRvciBpcyByZXR1cm5lZCBpZiBvbmUgZXhpc3RzOyBvdGhlcndpc2UsIFwtMQorQSBzZWxlY3RhYmxlIGZpbGUgZGVzY3JpcHRvciBpcyByZXR1cm5lZCBpZiBvbmUgZXhpc3RzOyBvdGhlcndpc2UsCisuQiBcLTEKIGlzIHJldHVybmVkLgogLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcF9nZXRfcmVxdWlyZWRfc2VsZWN0X3RpbWVvdXQoM1BDQVApLAotcGNhcF9zZXRub25ibG9jaygzUENBUCksIHNlbGVjdCgyKSwgcG9sbCgyKSwgZXBvbGxfd2FpdCgyKSwga3F1ZXVlKDIpCisuQlIgcGNhcCAoM1BDQVApLAorLkJSIGtxdWV1ZSAoMikKZGlmZiAtLWdpdCBhL3BjYXBfZ2V0X3RzdGFtcF9wcmVjaXNpb24uM3BjYXAgYi9wY2FwX2dldF90c3RhbXBfcHJlY2lzaW9uLjNwY2FwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDkxNDdhLi4wMDAwMDAwCi0tLSBhL3BjYXBfZ2V0X3RzdGFtcF9wcmVjaXNpb24uM3BjYXAKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0uXCJDb3B5cmlnaHQgKGMpIDIwMTMsIE1pY2hhbCBTZWtsZXRhcgotLlwiQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0uXCJtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS5cImFyZSBtZXQ6Ci0uXCIKLS5cIiAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLlwiICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLS5cIiAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLlwiICAgICBkaXN0cmlidXRpb24uCi0uXCIgIDMuIFRoZSBuYW1lcyBvZiB0aGUgYXV0aG9ycyBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCi0uXCIgICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKLS5cIiAgICAgd3JpdHRlbiBwZXJtaXNzaW9uLgotLlwiCi0uXCJUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgotLlwiSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKLS5cIldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotLlRIIFBDQVBfR0VUX1RTVEFNUF9QUkVDSVNJT04gM1BDQVAgIjE4IERlY2VtYmVyIDIwMTMiCi0uU0ggTkFNRQotcGNhcF9nZXRfdHN0YW1wX3ByZWNpc2lvbiBcLSBnZXQgdGhlIHRpbWUgc3RhbXAgcHJlY2lzaW9uIHJldHVybmVkIGluCi1jYXB0dXJlcwotLlNIIFNZTk9QU0lTCi0ubmYKLS5mdCBCCi0jaW5jbHVkZSA8cGNhcC9wY2FwLmg+Ci0uZnQKLS5MUAotLmZ0IEIKLWludCBwY2FwX2dldF90c3RhbXBfcHJlY2lzaW9uKHBjYXBfdCAqcCk7Ci0uZnQKLS5maQotLlNIIERFU0NSSVBUSU9OCi0uQiBwY2FwX2dldF90c3RhbXBfcHJlY2lzaW9uKCkKLXJldHVybnMgdGhlIHByZWNpc2lvbiBvZiB0aGUgdGltZSBzdGFtcCByZXR1cm5lZCBpbiBwYWNrZXQgY2FwdHVyZXMgb24gdGhlIHBjYXAKLWRlc2NyaXB0b3IuCi0uU0ggUkVUVVJOIFZBTFVFCi0uQiBwY2FwX2dldF90c3RhbXBfcHJlY2lzaW9uKCkKLXJldHVybnMKLS5CIFBDQVBfVFNUQU1QX1BSRUNJU0lPTl9NSUNSTwotb3IKLS5CUiBQQ0FQX1RTVEFNUF9QUkVDSVNJT05fTkFOTyAsCi13aGljaCBpbmRpY2F0ZXMKLXRoYXQgcGNhcCBjYXB0dXJlcyBjb250YWlucyB0aW1lIHN0YW1wcyBpbiBtaWNyb3NlY29uZHMgb3IgbmFub3NlY29uZHMKLXJlc3BlY3RpdmVseS4KLS5TSCBTRUUgQUxTTwotcGNhcCgzUENBUCksCi1wY2FwX3NldF90c3RhbXBfcHJlY2lzaW9uKDNQQ0FQKSwKLXBjYXAtdHN0YW1wKDcpCmRpZmYgLS1naXQgYS9wY2FwX2dldF90c3RhbXBfcHJlY2lzaW9uLjNwY2FwLmluIGIvcGNhcF9nZXRfdHN0YW1wX3ByZWNpc2lvbi4zcGNhcC5pbgppbmRleCAyODVlNzcwLi43ZGJiNTY5IDEwMDY0NAotLS0gYS9wY2FwX2dldF90c3RhbXBfcHJlY2lzaW9uLjNwY2FwLmluCisrKyBiL3BjYXBfZ2V0X3RzdGFtcF9wcmVjaXNpb24uM3BjYXAuaW4KQEAgLTE5LDcgKzE5LDcgQEAKIC5cIklNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECiAuXCJXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAKLS5USCBQQ0FQX0dFVF9UU1RBTVBfUFJFQ0lTSU9OIDNQQ0FQICIxOCBEZWNlbWJlciAyMDEzIgorLlRIIFBDQVBfR0VUX1RTVEFNUF9QUkVDSVNJT04gM1BDQVAgIjIzIEF1Z3VzdCAyMDE4IgogLlNIIE5BTUUKIHBjYXBfZ2V0X3RzdGFtcF9wcmVjaXNpb24gXC0gZ2V0IHRoZSB0aW1lIHN0YW1wIHByZWNpc2lvbiByZXR1cm5lZCBpbgogY2FwdHVyZXMKQEAgLTM0LDExICszNCwxMSBAQAogLmZ0CiAuZmkKIC5TSCBERVNDUklQVElPTgotLkIgcGNhcF9nZXRfdHN0YW1wX3ByZWNpc2lvbigpCisuQlIgcGNhcF9nZXRfdHN0YW1wX3ByZWNpc2lvbiAoKQogcmV0dXJucyB0aGUgcHJlY2lzaW9uIG9mIHRoZSB0aW1lIHN0YW1wIHJldHVybmVkIGluIHBhY2tldCBjYXB0dXJlcyBvbiB0aGUgcGNhcAogZGVzY3JpcHRvci4KIC5TSCBSRVRVUk4gVkFMVUUKLS5CIHBjYXBfZ2V0X3RzdGFtcF9wcmVjaXNpb24oKQorLkJSIHBjYXBfZ2V0X3RzdGFtcF9wcmVjaXNpb24gKCkKIHJldHVybnMKIC5CIFBDQVBfVFNUQU1QX1BSRUNJU0lPTl9NSUNSTwogb3IKQEAgLTQ2LDcgKzQ2LDExIEBACiB3aGljaCBpbmRpY2F0ZXMKIHRoYXQgcGNhcCBjYXB0dXJlcyBjb250YWlucyB0aW1lIHN0YW1wcyBpbiBtaWNyb3NlY29uZHMgb3IgbmFub3NlY29uZHMKIHJlc3BlY3RpdmVseS4KKy5TSCBCQUNLV0FSRCBDT01QQVRJQklMSVRZCitUaGlzIGZ1bmN0aW9uIGJlY2FtZSBhdmFpbGFibGUgaW4gbGlicGNhcCByZWxlYXNlIDEuNS4xLiAgSW4gcHJldmlvdXMKK3JlbGVhc2VzLCB0aW1lIHN0YW1wcyBmcm9tIGEgY2FwdHVyZSBkZXZpY2Ugb3Igc2F2ZWZpbGUgYXJlIGFsd2F5cyBnaXZlbgoraW4gc2Vjb25kcyBhbmQgbWljcm9zZWNvbmRzLgogLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwKLXBjYXBfc2V0X3RzdGFtcF9wcmVjaXNpb24oM1BDQVApLAotcGNhcC10c3RhbXAoQE1BTl9NSVNDX0lORk9AKQorLkJSIHBjYXAgKDNQQ0FQKSwKKy5CUiBwY2FwX3NldF90c3RhbXBfcHJlY2lzaW9uICgzUENBUCksCisuQlIgcGNhcC10c3RhbXAgKEBNQU5fTUlTQ19JTkZPQCkKZGlmZiAtLWdpdCBhL3BjYXBfZ2V0ZXJyLjNwY2FwIGIvcGNhcF9nZXRlcnIuM3BjYXAKaW5kZXggZWU2ODFjOC4uNzJlMjNlMyAxMDA2NDQKLS0tIGEvcGNhcF9nZXRlcnIuM3BjYXAKKysrIGIvcGNhcF9nZXRlcnIuM3BjYXAKQEAgLTMyLDcgKzMyLDcgQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfZ2V0ZXJyKCkKKy5CUiBwY2FwX2dldGVyciAoKQogcmV0dXJucyB0aGUgZXJyb3IgdGV4dCBwZXJ0YWluaW5nIHRvIHRoZSBsYXN0IHBjYXAgbGlicmFyeSBlcnJvci4KIC5CUiBOT1RFIDoKIHRoZSBwb2ludGVyIGl0IHJldHVybnMgd2lsbCBubyBsb25nZXIgcG9pbnQgdG8gYSB2YWxpZCBlcnJvciBtZXNzYWdlCkBAIC00MiwxMCArNDIsMTAgQEAKIHRoZQogLkJSIHBjYXBfdCAuCiAuUFAKLS5CIHBjYXBfcGVycm9yKCkKKy5CUiBwY2FwX3BlcnJvciAoKQogcHJpbnRzIHRoZSB0ZXh0IG9mIHRoZSBsYXN0IHBjYXAgbGlicmFyeSBlcnJvciBvbgogLkJSIHN0ZGVyciAsCiBwcmVmaXhlZCBieQogLklSIHByZWZpeCAuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApCisuQlIgcGNhcCAoM1BDQVApCmRpZmYgLS1naXQgYS9wY2FwX2luaXQuM3BjYXAgYi9wY2FwX2luaXQuM3BjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQzZjA4MwotLS0gL2Rldi9udWxsCisrKyBiL3BjYXBfaW5pdC4zcGNhcApAQCAtMCwwICsxLDk5IEBACisuXCIgQ29weXJpZ2h0IChjKSAxOTk0LCAxOTk2LCAxOTk3CisuXCIJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisuXCIKKy5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdDogKDEpIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbnMKKy5cIiByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGluIGl0cyBlbnRpcmV0eSwgKDIpCisuXCIgZGlzdHJpYnV0aW9ucyBpbmNsdWRpbmcgYmluYXJ5IGNvZGUgaW5jbHVkZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQKKy5cIiB0aGlzIHBhcmFncmFwaCBpbiBpdHMgZW50aXJldHkgaW4gdGhlIGRvY3VtZW50YXRpb24gb3Igb3RoZXIgbWF0ZXJpYWxzCisuXCIgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLCBhbmQgKDMpIGFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZworLlwiIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisuXCIgYGBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsCisuXCIgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4nJyBOZWl0aGVyIHRoZSBuYW1lIG9mCisuXCIgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UKKy5cIiBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKy5cIiB3cml0dGVuIHBlcm1pc3Npb24uCisuXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisuXCIgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKy5cIgorLlRIIFBDQVBfSU5JVCAzUENBUCAiMTEgQXByaWwgMjAyMCIKKy5TSCBOQU1FCitwY2FwX2luaXQgXC0gaW5pdGlhbGl6ZSB0aGUgbGlicmFyeQorLlNIIFNZTk9QU0lTCisubmYKKy5mdCBCCisjaW5jbHVkZSA8cGNhcC9wY2FwLmg+CisuZnQKKy5MUAorLm5mCisuZnQgQgorY2hhciBlcnJidWZbUENBUF9FUlJCVUZfU0laRV07CisuZnQKKy5MUAorLmZ0IEIKK2ludCBwY2FwX2luaXQodW5zaWduZWQgaW50IG9wdHMsIGNoYXIgKmVycmJ1Zik7CisuZnQKKy5maQorLlNIIERFU0NSSVBUSU9OCisuQlIgcGNhcF9pbml0ICgpCitpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIFBhY2tldCBDYXB0dXJlIGxpYnJhcnkuCisuSSBvcHRzCitzcGVjaWZpZXMgb3B0aW9ucyBmb3IgdGhlIGxpYnJhcnk7CitjdXJyZW50bHksIHRoZSBvcHRpb25zIGFyZToKKy5UUAorLkIgUENBUF9DSEFSX0VOQ19MT0NBTAorVHJlYXQgYWxsIHN0cmluZ3Mgc3VwcGxpZWQgYXMgYXJndW1lbnRzLCBhbmQgcmV0dXJuIGFsbCBzdHJpbmdzIHRvIHRoZQorY2FsbGVyLCBhcyBiZWluZyBpbiB0aGUgbG9jYWwgY2hhcmFjdGVyIGVuY29kaW5nLgorLlRQCisuQiBQQ0FQX0NIQVJfRU5DX1VURl84CitUcmVhdCBhbGwgc3RyaW5ncyBzdXBwbGllZCBhcyBhcmd1bWVudHMsIGFuZCByZXR1cm4gYWxsIHN0cmluZ3MgdG8gdGhlCitjYWxsZXIsIGFzIGJlaW5nIGluIFVURi04LgorLlBQCitPbiBVTklYLWxpa2Ugc3lzdGVtcywgdGhlIGxvY2FsIGNoYXJhY3RlciBlbmNvZGluZyBpcyBhc3N1bWVkIHRvIGJlCitVVEYtOCwgc28gbm8gY2hhcmFjdGVyIGVuY29kaW5nIHRyYW5zZm9ybWF0aW9ucyBhcmUgZG9uZS4KKy5QUAorT24gV2luZG93cywgdGhlIGxvY2FsIGNoYXJhY3RlciBlbmNvZGluZyBpcyB0aGUgbG9jYWwgQU5TSSBjb2RlIHBhZ2UuCisuUFAKK0lmCisuQlIgcGNhcF9pbml0ICgpCitpcyBub3QgY2FsbGVkLCBzdHJpbmdzIGFyZSB0cmVhdGVkIGFzIGJlaW5nIGluIHRoZSBsb2NhbCBBTlNJIGNvZGUgcGFnZQorb24gV2luZG93cywKKy5CUiBwY2FwX2xvb2t1cGRldiAoM1BDQVApCit3aWxsIHN1Y2NlZWQgaWYgdGhlcmUgaXMgYSBkZXZpY2Ugb24gd2hpY2ggdG8gY2FwdHVyZSwgYW5kCisuQlIgcGNhcF9jcmVhdGUgKDNQQ0FQKQorbWFrZXMgYW4gYXR0ZW1wdCB0byBjaGVjayB3aGV0aGVyIHRoZSBzdHJpbmcgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IGlzIGEKK1VURi0xNkxFIHN0cmluZyAtIG5vdGUgdGhhdCB0aGlzIGF0dGVtcHQgaXMgdW5zYWZlLCBhcyBpdCBtYXkgcnVuIHBhc3QKK3RoZSBlbmQgb2YgdGhlIHN0cmluZyAtIHRvIGhhbmRsZQorLkJSIHBjYXBfbG9va3VwZGV2ICgpCityZXR1cm5pbmcgYSBVVEYtMTZMRSBzdHJpbmcuIFByb2dyYW1zIHRoYXQgZG9uJ3QgY2FsbAorLkJSIHBjYXBfaW5pdCAoKQorc2hvdWxkLCBvbiBXaW5kb3dzLCBjYWxsCisuQlIgcGNhcF93c29ja2luaXQgKCkKK3RvIGluaXRpYWxpemUgV2luc29jazsgdGhpcyBpcyBub3QgbmVjZXNzYXJ5IGlmCisuQlIgcGNhcF9pbml0ICgpCitpcyBjYWxsZWQsIGFzCisuQlIgcGNhcF9pbml0ICgpCit3aWxsIGluaXRpYWxpemUgV2luc29jayBpdHNlbGYgb24gV2luZG93cy4KKy5TSCBSRVRVUk4gVkFMVUUKKy5CUiBwY2FwX2luaXQgKCkKK3JldHVybnMKKy5CIDAKK29uIHN1Y2Nlc3MgYW5kCisuQiBcLTEKK29uIGZhaWx1cmUuCitJZgorLkIgXC0xCitpcyByZXR1cm5lZCwKKy5JIGVycmJ1ZgoraXMgZmlsbGVkIGluIHdpdGggYW4gYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZS4KKy5JIGVycmJ1ZgoraXMgYXNzdW1lZCB0byBiZSBhYmxlIHRvIGhvbGQgYXQgbGVhc3QKKy5CIFBDQVBfRVJSQlVGX1NJWkUKK2NoYXJzLgorLlNIIEJBQ0tXQVJEIENPTVBBVElCSUxJVFkKK1RoaXMgZnVuY3Rpb24gYmVjYW1lIGF2YWlsYWJsZSBpbiBsaWJwY2FwIHJlbGVhc2UgMS4xMC4wLiAgSW4gcHJldmlvdXMKK3JlbGVhc2VzLCBvbiBXaW5kb3dzLCBhbGwgc3RyaW5ncyBzdXBwbGllZCBhcyBhcmd1bWVudHMsIGFuZCBhbGwgc3RyaW5ncworcmV0dXJuZWQgdG8gdGhlIGNhbGxlciwgYXJlIGluIHRoZSBsb2NhbCBjaGFyYWN0ZXIgZW5jb2RpbmcuCisuU0ggU0VFIEFMU08KKy5CUiBwY2FwICgzUENBUCkKZGlmZiAtLWdpdCBhL3BjYXBfaW5qZWN0LjNwY2FwIGIvcGNhcF9pbmplY3QuM3BjYXAKaW5kZXggZmY5NzkyZC4uNmI0NTU0ZSAxMDA2NDQKLS0tIGEvcGNhcF9pbmplY3QuM3BjYXAKKysrIGIvcGNhcF9pbmplY3QuM3BjYXAKQEAgLTE3LDcgKzE3LDcgQEAKIC5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgogLlwiIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAuXCIKLS5USCBQQ0FQX0lOSkVDVCAzUENBUCAiMyBKYW51YXJ5IDIwMTQiCisuVEggUENBUF9JTkpFQ1QgM1BDQVAgIjI1IEp1bHkgMjAxOCIKIC5TSCBOQU1FCiBwY2FwX2luamVjdCwgcGNhcF9zZW5kcGFja2V0IFwtIHRyYW5zbWl0IGEgcGFja2V0CiAuU0ggU1lOT1BTSVMKQEAgLTMyLDcgKzMyLDcgQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfaW5qZWN0KCkKKy5CUiBwY2FwX2luamVjdCAoKQogc2VuZHMgYSByYXcgcGFja2V0IHRocm91Z2ggdGhlIG5ldHdvcmsgaW50ZXJmYWNlOwogLkkgYnVmCiBwb2ludHMgdG8gdGhlIGRhdGEgb2YgdGhlIHBhY2tldCwgaW5jbHVkaW5nIHRoZSBsaW5rLWxheWVyIGhlYWRlciwgYW5kCkBAIC00Miw3ICs0Miw3IEBACiBOb3RlIHRoYXQsIGV2ZW4gaWYgeW91IHN1Y2Nlc3NmdWxseSBvcGVuIHRoZSBuZXR3b3JrIGludGVyZmFjZSwgeW91CiBtaWdodCBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHNlbmQgcGFja2V0cyBvbiBpdCwgb3IgaXQgbWlnaHQgbm90IHN1cHBvcnQKIHNlbmRpbmcgcGFja2V0czsgYXMKLS5JIHBjYXBfb3Blbl9saXZlKCkKKy5CUiBwY2FwX29wZW5fbGl2ZSAoM1BDQVApCiBkb2Vzbid0IGhhdmUgYSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdG8gb3BlbiBmb3IgY2FwdHVyaW5nLCBzZW5kaW5nLAogb3IgY2FwdHVyaW5nIGFuZCBzZW5kaW5nLCB5b3UgY2Fubm90IHJlcXVlc3QgYW4gb3BlbiB0aGF0IHN1cHBvcnRzCiBzZW5kaW5nIGFuZCBiZSBub3RpZmllZCBhdCBvcGVuIHRpbWUgd2hldGhlciBzZW5kaW5nIHdpbGwgYmUgcG9zc2libGUuCkBAIC01MSw3ICs1MSw3IEBACiBOb3RlIHRoYXQsIG9uIHNvbWUgcGxhdGZvcm1zLCB0aGUgbGluay1sYXllciBoZWFkZXIgb2YgdGhlIHBhY2tldCB0aGF0J3MKIHNlbnQgbWlnaHQgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBsaW5rLWxheWVyIGhlYWRlciBvZiB0aGUgcGFja2V0CiBzdXBwbGllZCB0bwotLkJSIHBjYXBfaW5qZWN0KCkgLAorLkJSIHBjYXBfaW5qZWN0ICgpLAogYXMgdGhlIHNvdXJjZSBsaW5rLWxheWVyIGFkZHJlc3MsIGlmIHRoZSBoZWFkZXIgY29udGFpbnMgc3VjaCBhbgogYWRkcmVzcywgbWlnaHQgYmUgY2hhbmdlZCB0byBiZSB0aGUgYWRkcmVzcyBhc3NpZ25lZCB0byB0aGUgaW50ZXJmYWNlIG9uCiB3aGljaCB0aGUgcGFja2V0IGl0IHNlbnQsIGlmIHRoZSBwbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQgc2VuZGluZwpAQCAtNjEsMjggKzYxLDM4IEBACiAuSSBkbwogbm9taW5hbGx5IHN1cHBvcnQgc2VuZGluZyBjb21wbGV0ZWx5IHJhdyBhbmQgdW5jaGFuZ2VkIHBhY2tldHMuCiAuUFAKLS5CIHBjYXBfc2VuZHBhY2tldCgpCisuQlIgcGNhcF9zZW5kcGFja2V0ICgpCiBpcyBsaWtlCi0uQlIgcGNhcF9pbmplY3QoKSAsCi1idXQgaXQgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIHJhdGhlciB0aGFuIHJldHVybmluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzCisuQlIgcGNhcF9pbmplY3QgKCksCitidXQgaXQgcmV0dXJucworLkIgMAorb24gc3VjY2VzcywgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMKIHdyaXR0ZW4uCi0uUkIgKCBwY2FwX2luamVjdCgpCisuUkIgKCBwY2FwX2luamVjdCAoKQogY29tZXMgZnJvbSBPcGVuQlNEOwotLkIgcGNhcF9zZW5kcGFja2V0KCkKLWNvbWVzIGZyb20gV2luUGNhcC4gIEJvdGggYXJlIHByb3ZpZGVkIGZvciBjb21wYXRpYmlsaXR5LikKKy5CUiBwY2FwX3NlbmRwYWNrZXQgKCkKK2NvbWVzIGZyb20gV2luUGNhcC9OcGNhcC4gIEJvdGggYXJlIHByb3ZpZGVkIGZvciBjb21wYXRpYmlsaXR5LikKIC5TSCBSRVRVUk4gVkFMVUUKLS5CIHBjYXBfaW5qZWN0KCkKLXJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIG9uIHN1Y2Nlc3MgYW5kIFwtMSBvbiBmYWlsdXJlLgorLkJSIHBjYXBfaW5qZWN0ICgpCityZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvbiBzdWNjZXNzIGFuZAorLkIgUENBUF9FUlJPUgorb24gZmFpbHVyZS4KIC5QUAotLkIgcGNhcF9zZW5kcGFja2V0KCkKLXJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCBcLTEgb24gZmFpbHVyZS4KKy5CUiBwY2FwX3NlbmRwYWNrZXQgKCkKK3JldHVybnMKKy5CIDAKK29uIHN1Y2Nlc3MgYW5kCisuQiBQQ0FQX0VSUk9SCitvbiBmYWlsdXJlLgogLlBQCi1JZiBcLTEgaXMgcmV0dXJuZWQsCi0uQiBwY2FwX2dldGVycigpCitJZgorLkIgUENBUF9FUlJPUgoraXMgcmV0dXJuZWQsCisuQlIgcGNhcF9nZXRlcnIgKDNQQ0FQKQogb3IKLS5CIHBjYXBfcGVycm9yKCkKKy5CUiBwY2FwX3BlcnJvciAoM1BDQVApCiBtYXkgYmUgY2FsbGVkIHdpdGgKIC5JIHAKIGFzIGFuIGFyZ3VtZW50IHRvIGZldGNoIG9yIGRpc3BsYXkgdGhlIGVycm9yIHRleHQuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApLCBwY2FwX2dldGVycigzUENBUCkKKy5CUiBwY2FwICgzUENBUCkKZGlmZiAtLWdpdCBhL3BjYXBfaXNfc3dhcHBlZC4zcGNhcCBiL3BjYXBfaXNfc3dhcHBlZC4zcGNhcAppbmRleCAzNjY5MWQzLi4yNjA2MDFhIDEwMDY0NAotLS0gYS9wY2FwX2lzX3N3YXBwZWQuM3BjYXAKKysrIGIvcGNhcF9pc19zd2FwcGVkLjNwY2FwCkBAIC0zMSwyMSArMzEsMjEgQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfaXNfc3dhcHBlZCgpCi1yZXR1cm5zIHRydWUgKDEpIGlmCisuQlIgcGNhcF9pc19zd2FwcGVkICgpCityZXR1cm5zIHRydWUgKFxmQjFcZlApIGlmCiAuSSBwCiByZWZlcnMgdG8gYSBgYHNhdmVmaWxlJycgdGhhdCB1c2VzIGEgZGlmZmVyZW50IGJ5dGUgb3JkZXIKIHRoYW4gdGhlIGN1cnJlbnQgc3lzdGVtLiAgRm9yIGEgbGl2ZSBjYXB0dXJlLCBpdCBhbHdheXMgcmV0dXJucyBmYWxzZQotKDApLgorKFxmQjBcZlApLgogLlBQCiBJdCBtdXN0IG5vdCBiZSBjYWxsZWQgb24gYSBwY2FwIGRlc2NyaXB0b3IgY3JlYXRlZCBieQotLkIgcGNhcF9jcmVhdGUoKQorLkJSIFwlcGNhcF9jcmVhdGUgKDNQQ0FQKQogdGhhdCBoYXMgbm90IHlldCBiZWVuIGFjdGl2YXRlZCBieQotLkJSIHBjYXBfYWN0aXZhdGUoKSAuCisuQlIgXCVwY2FwX2FjdGl2YXRlICgzUENBUCkuCiAuU0ggUkVUVVJOIFZBTFVFCi0uQiBwY2FwX2lzX3N3YXBwZWQoKQotcmV0dXJucyB0cnVlICgxKSBvciBmYWxzZSAoMCkgb24gc3VjY2VzcyBhbmQKKy5CUiBwY2FwX2lzX3N3YXBwZWQgKCkKK3JldHVybnMgdHJ1ZSAoXGZCMVxmUCkgb3IgZmFsc2UgKFxmQjBcZlApIG9uIHN1Y2Nlc3MgYW5kCiAuQiBQQ0FQX0VSUk9SX05PVF9BQ1RJVkFURUQKIGlmIGNhbGxlZCBvbiBhIGNhcHR1cmUgaGFuZGxlIHRoYXQgaGFzIGJlZW4gY3JlYXRlZCBidXQgbm90IGFjdGl2YXRlZC4KIC5TSCBTRUUgQUxTTwotcGNhcCgzUENBUCkKKy5CUiBwY2FwICgzUENBUCkKZGlmZiAtLWdpdCBhL3BjYXBfbGliX3ZlcnNpb24uM3BjYXAgYi9wY2FwX2xpYl92ZXJzaW9uLjNwY2FwCmluZGV4IDRiODZiMmQuLjczZWQyYjggMTAwNjQ0Ci0tLSBhL3BjYXBfbGliX3ZlcnNpb24uM3BjYXAKKysrIGIvcGNhcF9saWJfdmVyc2lvbi4zcGNhcApAQCAtMzEsOSArMzEsOSBAQAogLmZ0CiAuZmkKIC5TSCBERVNDUklQVElPTgotLkIgcGNhcF9saWJfdmVyc2lvbigpCisuQlIgcGNhcF9saWJfdmVyc2lvbiAoKQogcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgZ2l2aW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSB2ZXJzaW9uIG9mCiB0aGUgbGlicGNhcCBsaWJyYXJ5IGJlaW5nIHVzZWQ7IG5vdGUgdGhhdCBpdCBjb250YWlucyBtb3JlIGluZm9ybWF0aW9uCiB0aGFuIGp1c3QgYSB2ZXJzaW9uIG51bWJlci4KIC5TSCBTRUUgQUxTTwotcGNhcCgzUENBUCkKKy5CUiBwY2FwICgzUENBUCkKZGlmZiAtLWdpdCBhL3BjYXBfbGlzdF9kYXRhbGlua3MuM3BjYXAgYi9wY2FwX2xpc3RfZGF0YWxpbmtzLjNwY2FwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmRlNzNkLi4wMDAwMDAwCi0tLSBhL3BjYXBfbGlzdF9kYXRhbGlua3MuM3BjYXAKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAxOTk0LCAxOTk2LCAxOTk3Ci0uXCIJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdDogKDEpIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbnMKLS5cIiByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGluIGl0cyBlbnRpcmV0eSwgKDIpCi0uXCIgZGlzdHJpYnV0aW9ucyBpbmNsdWRpbmcgYmluYXJ5IGNvZGUgaW5jbHVkZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQKLS5cIiB0aGlzIHBhcmFncmFwaCBpbiBpdHMgZW50aXJldHkgaW4gdGhlIGRvY3VtZW50YXRpb24gb3Igb3RoZXIgbWF0ZXJpYWxzCi0uXCIgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLCBhbmQgKDMpIGFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZwotLlwiIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0uXCIgYGBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsCi0uXCIgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4nJyBOZWl0aGVyIHRoZSBuYW1lIG9mCi0uXCIgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UKLS5cIiBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKLS5cIiB3cml0dGVuIHBlcm1pc3Npb24uCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0uXCIgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLS5cIgotLlRIIFBDQVBfTElTVF9EQVRBTElOS1MgM1BDQVAgIjggTWFyY2ggMjAxNSIKLS5TSCBOQU1FCi1wY2FwX2xpc3RfZGF0YWxpbmtzLCBwY2FwX2ZyZWVfZGF0YWxpbmtzIFwtIGdldCBhIGxpc3Qgb2YgbGluay1sYXllciBoZWFkZXIKLXR5cGVzIHN1cHBvcnRlZCBieSBhIGNhcHR1cmUgZGV2aWNlLCBhbmQgZnJlZSB0aGF0IGxpc3QKLS5TSCBTWU5PUFNJUwotLm5mCi0uZnQgQgotI2luY2x1ZGUgPHBjYXAvcGNhcC5oPgotLmZ0Ci0uTFAKLS5mdCBCCi1pbnQgcGNhcF9saXN0X2RhdGFsaW5rcyhwY2FwX3QgKnAsIGludCAqKmRsdF9idWYpOwotdm9pZCBwY2FwX2ZyZWVfZGF0YWxpbmtzKGludCAqZGx0X2xpc3QpOwotLmZ0Ci0uZmkKLS5TSCBERVNDUklQVElPTgotLkIgcGNhcF9saXN0X2RhdGFsaW5rcygpCi1pcyB1c2VkIHRvIGdldCBhIGxpc3Qgb2YgdGhlIHN1cHBvcnRlZCBsaW5rLWxheWVyIGhlYWRlciB0eXBlcyBvZiB0aGUKLWludGVyZmFjZSBhc3NvY2lhdGVkIHdpdGggdGhlIHBjYXAgZGVzY3JpcHRvci4KLS5CIHBjYXBfbGlzdF9kYXRhbGlua3MoKQotYWxsb2NhdGVzIGFuIGFycmF5IHRvIGhvbGQgdGhlIGxpc3QgYW5kIHNldHMKLS5JUiAqZGx0X2J1ZgotdG8gcG9pbnQgdG8gdGhhdCBhcnJheS4KLS5MUAotVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGUgYXJyYXkgd2l0aAotLkJSIHBjYXBfZnJlZV9kYXRhbGlua3MoKSAsCi13aGljaCBmcmVlcyB0aGUgbGlzdCBvZiBsaW5rLWxheWVyIGhlYWRlciB0eXBlcyBwb2ludGVkIHRvIGJ5Ci0uSVIgZGx0X2xpc3QgLgotLkxQCi1JdCBtdXN0IG5vdCBiZSBjYWxsZWQgb24gYSBwY2FwIGRlc2NyaXB0b3IgY3JlYXRlZCBieQotLkIgcGNhcF9jcmVhdGUoKQotdGhhdCBoYXMgbm90IHlldCBiZWVuIGFjdGl2YXRlZCBieQotLkJSIHBjYXBfYWN0aXZhdGUoKSAuCi0uU0ggUkVUVVJOIFZBTFVFCi0uQiBwY2FwX2xpc3RfZGF0YWxpbmtzKCkKLXJldHVybnMgdGhlIG51bWJlciBvZiBsaW5rLWxheWVyIGhlYWRlciB0eXBlcyBpbiB0aGUgYXJyYXkgb24gc3VjY2VzcywKLS5CIFBDQVBfRVJST1JfTk9UX0FDVElWQVRFRAotaWYgY2FsbGVkIG9uIGEgY2FwdHVyZSBoYW5kbGUgdGhhdCBoYXMgYmVlbiBjcmVhdGVkIGJ1dCBub3QgYWN0aXZhdGVkLAotYW5kCi0uQiBQQ0FQX0VSUk9SCi0oXC0xKSBvbiBvdGhlciBlcnJvcnMuCi1JZgotLkIgUENBUF9FUlJPUgotaXMgcmV0dXJuZWQsCi0uQiBwY2FwX2dldGVycigpCi1vcgotLkIgcGNhcF9wZXJyb3IoKQotbWF5IGJlIGNhbGxlZCB3aXRoCi0uSSBwCi1hcyBhbiBhcmd1bWVudCB0byBmZXRjaCBvciBkaXNwbGF5IHRoZSBlcnJvciB0ZXh0LgotLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcF9nZXRlcnIoM1BDQVApLAotcGNhcF9kYXRhbGlua192YWxfdG9fbmFtZSgzUENBUCksCi1wY2FwLWxpbmt0eXBlKDcpCmRpZmYgLS1naXQgYS9wY2FwX2xpc3RfZGF0YWxpbmtzLjNwY2FwLmluIGIvcGNhcF9saXN0X2RhdGFsaW5rcy4zcGNhcC5pbgppbmRleCA5ZjUyYjYzLi5kNmUzMTQ5IDEwMDY0NAotLS0gYS9wY2FwX2xpc3RfZGF0YWxpbmtzLjNwY2FwLmluCisrKyBiL3BjYXBfbGlzdF9kYXRhbGlua3MuM3BjYXAuaW4KQEAgLTE3LDcgKzE3LDcgQEAKIC5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgogLlwiIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAuXCIKLS5USCBQQ0FQX0xJU1RfREFUQUxJTktTIDNQQ0FQICI4IE1hcmNoIDIwMTUiCisuVEggUENBUF9MSVNUX0RBVEFMSU5LUyAzUENBUCAiMjUgSnVseSAyMDE4IgogLlNIIE5BTUUKIHBjYXBfbGlzdF9kYXRhbGlua3MsIHBjYXBfZnJlZV9kYXRhbGlua3MgXC0gZ2V0IGEgbGlzdCBvZiBsaW5rLWxheWVyIGhlYWRlcgogdHlwZXMgc3VwcG9ydGVkIGJ5IGEgY2FwdHVyZSBkZXZpY2UsIGFuZCBmcmVlIHRoYXQgbGlzdApAQCAtMzMsNDEgKzMzLDQxIEBACiAuZnQKIC5maQogLlNIIERFU0NSSVBUSU9OCi0uQiBwY2FwX2xpc3RfZGF0YWxpbmtzKCkKKy5CUiBwY2FwX2xpc3RfZGF0YWxpbmtzICgpCiBpcyB1c2VkIHRvIGdldCBhIGxpc3Qgb2YgdGhlIHN1cHBvcnRlZCBsaW5rLWxheWVyIGhlYWRlciB0eXBlcyBvZiB0aGUKIGludGVyZmFjZSBhc3NvY2lhdGVkIHdpdGggdGhlIHBjYXAgZGVzY3JpcHRvci4KLS5CIHBjYXBfbGlzdF9kYXRhbGlua3MoKQorLkJSIHBjYXBfbGlzdF9kYXRhbGlua3MgKCkKIGFsbG9jYXRlcyBhbiBhcnJheSB0byBob2xkIHRoZSBsaXN0IGFuZCBzZXRzCiAuSVIgKmRsdF9idWYKIHRvIHBvaW50IHRvIHRoYXQgYXJyYXkuCiAuTFAKIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhlIGFycmF5IHdpdGgKLS5CUiBwY2FwX2ZyZWVfZGF0YWxpbmtzKCkgLAorLkJSIHBjYXBfZnJlZV9kYXRhbGlua3MgKCksCiB3aGljaCBmcmVlcyB0aGUgbGlzdCBvZiBsaW5rLWxheWVyIGhlYWRlciB0eXBlcyBwb2ludGVkIHRvIGJ5CiAuSVIgZGx0X2xpc3QgLgogLkxQCiBJdCBtdXN0IG5vdCBiZSBjYWxsZWQgb24gYSBwY2FwIGRlc2NyaXB0b3IgY3JlYXRlZCBieQotLkIgcGNhcF9jcmVhdGUoKQorLkJSIFwlcGNhcF9jcmVhdGUgKDNQQ0FQKQogdGhhdCBoYXMgbm90IHlldCBiZWVuIGFjdGl2YXRlZCBieQotLkJSIHBjYXBfYWN0aXZhdGUoKSAuCisuQlIgXCVwY2FwX2FjdGl2YXRlICgzUENBUCkuCiAuU0ggUkVUVVJOIFZBTFVFCi0uQiBwY2FwX2xpc3RfZGF0YWxpbmtzKCkKKy5CUiBwY2FwX2xpc3RfZGF0YWxpbmtzICgpCiByZXR1cm5zIHRoZSBudW1iZXIgb2YgbGluay1sYXllciBoZWFkZXIgdHlwZXMgaW4gdGhlIGFycmF5IG9uIHN1Y2Nlc3MsCiAuQiBQQ0FQX0VSUk9SX05PVF9BQ1RJVkFURUQKIGlmIGNhbGxlZCBvbiBhIGNhcHR1cmUgaGFuZGxlIHRoYXQgaGFzIGJlZW4gY3JlYXRlZCBidXQgbm90IGFjdGl2YXRlZCwKIGFuZAogLkIgUENBUF9FUlJPUgotKFwtMSkgb24gb3RoZXIgZXJyb3JzLgorb24gb3RoZXIgZXJyb3JzLgogSWYKIC5CIFBDQVBfRVJST1IKIGlzIHJldHVybmVkLAotLkIgcGNhcF9nZXRlcnIoKQorLkJSIHBjYXBfZ2V0ZXJyICgzUENBUCkKIG9yCi0uQiBwY2FwX3BlcnJvcigpCisuQlIgXCVwY2FwX3BlcnJvciAoM1BDQVApCiBtYXkgYmUgY2FsbGVkIHdpdGgKIC5JIHAKIGFzIGFuIGFyZ3VtZW50IHRvIGZldGNoIG9yIGRpc3BsYXkgdGhlIGVycm9yIHRleHQuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApLCBwY2FwX2dldGVycigzUENBUCksCi1wY2FwX2RhdGFsaW5rX3ZhbF90b19uYW1lKDNQQ0FQKSwKLXBjYXAtbGlua3R5cGUoQE1BTl9NSVNDX0lORk9AKQorLkJSIHBjYXAgKDNQQ0FQKSwKKy5CUiBwY2FwX2RhdGFsaW5rX3ZhbF90b19uYW1lICgzUENBUCksCisuQlIgcGNhcC1saW5rdHlwZSAoQE1BTl9NSVNDX0lORk9AKQpkaWZmIC0tZ2l0IGEvcGNhcF9saXN0X3RzdGFtcF90eXBlcy4zcGNhcCBiL3BjYXBfbGlzdF90c3RhbXBfdHlwZXMuM3BjYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhZmEzNmYuLjAwMDAwMDAKLS0tIGEvcGNhcF9saXN0X3RzdGFtcF90eXBlcy4zcGNhcAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS5cIgotLlwiIENvcHlyaWdodCAoYykgMTk5NCwgMTk5NiwgMTk5NwotLlwiCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLlwiCi0uXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0uXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQ6ICgxKSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb25zCi0uXCIgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBpbiBpdHMgZW50aXJldHksICgyKQotLlwiIGRpc3RyaWJ1dGlvbnMgaW5jbHVkaW5nIGJpbmFyeSBjb2RlIGluY2x1ZGUgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kCi0uXCIgdGhpcyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5IGluIHRoZSBkb2N1bWVudGF0aW9uIG9yIG90aGVyIG1hdGVyaWFscwotLlwiIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiwgYW5kICgzKSBhbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcKLS5cIiBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotLlwiIGBgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLAotLlwiIExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkgYW5kIGl0cyBjb250cmlidXRvcnMuJycgTmVpdGhlciB0aGUgbmFtZSBvZgotLlwiIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlCi0uXCIgb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCi0uXCIgd3JpdHRlbiBwZXJtaXNzaW9uLgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLS5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotLlwiIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0uXCIKLS5USCBQQ0FQX0xJU1RfVFNUQU1QX1RZUEVTIDNQQ0FQICIyMiBBdWd1c3QgMjAxMCIKLS5TSCBOQU1FCi1wY2FwX2xpc3RfdHN0YW1wX3R5cGVzLCBwY2FwX2ZyZWVfdHN0YW1wX3R5cGVzIFwtIGdldCBhIGxpc3Qgb2YgdGltZQotc3RhbXAgdHlwZXMgc3VwcG9ydGVkIGJ5IGEgY2FwdHVyZSBkZXZpY2UsIGFuZCBmcmVlIHRoYXQgbGlzdAotLlNIIFNZTk9QU0lTCi0ubmYKLS5mdCBCCi0jaW5jbHVkZSA8cGNhcC9wY2FwLmg+Ci0uZnQKLS5MUAotLmZ0IEIKLWludCBwY2FwX2xpc3RfdHN0YW1wX3R5cGVzKHBjYXBfdCAqcCwgaW50ICoqdHN0YW1wX3R5cGVzcCk7Ci12b2lkIHBjYXBfZnJlZV90c3RhbXBfdHlwZXMoaW50ICp0c3RhbXBfdHlwZXMpOwotLmZ0Ci0uZmkKLS5TSCBERVNDUklQVElPTgotLkIgcGNhcF9saXN0X3RzdGFtcF90eXBlcygpCi1pcyB1c2VkIHRvIGdldCBhIGxpc3Qgb2YgdGhlIHN1cHBvcnRlZCB0aW1lIHN0YW1wIHR5cGVzIG9mIHRoZSBpbnRlcmZhY2UKLWFzc29jaWF0ZWQgd2l0aCB0aGUgcGNhcCBkZXNjcmlwdG9yLgotLkIgcGNhcF9saXN0X3RzdGFtcF90eXBlcygpCi1hbGxvY2F0ZXMgYW4gYXJyYXkgdG8gaG9sZCB0aGUgbGlzdCBhbmQgc2V0cwotLkkgKnRzdGFtcF90eXBlc3AKLXRvIHBvaW50IHRvIHRoZSBhcnJheS4KLVNlZQotLkJSIHBjYXAtdHN0YW1wICg3KQotZm9yIGEgbGlzdCBvZiBhbGwgdGhlIHRpbWUgc3RhbXAgdHlwZXMuCi0uUFAKLVRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhlIGFycmF5IHdpdGgKLS5CUiBwY2FwX2ZyZWVfdHN0YW1wX3R5cGVzKCkgLAotd2hpY2ggZnJlZXMgdGhlIGxpc3QgcG9pbnRlZCB0byBieQotLklSIHRzdGFtcF90eXBlcyAuCi0uU0ggUkVUVVJOIFZBTFVFCi0uQiBwY2FwX2xpc3RfdHN0YW1wX3R5cGVzKCkKLXJldHVybnMgdGhlIG51bWJlciBvZiB0aW1lIHN0YW1wIHR5cGVzIGluIHRoZSBhcnJheSBvbiBzdWNjZXNzIGFuZAotLkIgUENBUF9FUlJPUgotb24gZmFpbHVyZS4KLUEgcmV0dXJuIHZhbHVlIG9mIHplcm8gbWVhbnMgdGhhdCB5b3UgY2Fubm90IHNwZWNpZnkgYSB0aW1lIHN0YW1wIHR5cGU7Ci15b3UgYXJlIGxpbWl0ZWQgdG8gdGhlIGNhcHR1cmUgZGV2aWNlJ3MgZGVmYXVsdCB0aW1lIHN0YW1wIHR5cGUuCi1JZgotLkIgUENBUF9FUlJPUgotaXMgcmV0dXJuZWQsCi0uQiBwY2FwX2dldGVycigpCi1vcgotLkIgcGNhcF9wZXJyb3IoKQotbWF5IGJlIGNhbGxlZCB3aXRoCi0uSSBwCi1hcyBhbiBhcmd1bWVudCB0byBmZXRjaCBvciBkaXNwbGF5IHRoZSBlcnJvciB0ZXh0LgotLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcF9nZXRlcnIoM1BDQVApLCBwY2FwX3RzdGFtcF90eXBlX3ZhbF90b19uYW1lKDNQQ0FQKSwKLXBjYXAtdHN0YW1wKDcpCmRpZmYgLS1naXQgYS9wY2FwX2xpc3RfdHN0YW1wX3R5cGVzLjNwY2FwLmluIGIvcGNhcF9saXN0X3RzdGFtcF90eXBlcy4zcGNhcC5pbgppbmRleCBhMTM5MzI0Li43NGVmMDBhIDEwMDY0NAotLS0gYS9wY2FwX2xpc3RfdHN0YW1wX3R5cGVzLjNwY2FwLmluCisrKyBiL3BjYXBfbGlzdF90c3RhbXBfdHlwZXMuM3BjYXAuaW4KQEAgLTE4LDcgKzE4LDcgQEAKIC5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgogLlwiIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAuXCIKLS5USCBQQ0FQX0xJU1RfVFNUQU1QX1RZUEVTIDNQQ0FQICIyMiBBdWd1c3QgMjAxMCIKKy5USCBQQ0FQX0xJU1RfVFNUQU1QX1RZUEVTIDNQQ0FQICI4IFNlcHRlbWJlciAyMDE5IgogLlNIIE5BTUUKIHBjYXBfbGlzdF90c3RhbXBfdHlwZXMsIHBjYXBfZnJlZV90c3RhbXBfdHlwZXMgXC0gZ2V0IGEgbGlzdCBvZiB0aW1lCiBzdGFtcCB0eXBlcyBzdXBwb3J0ZWQgYnkgYSBjYXB0dXJlIGRldmljZSwgYW5kIGZyZWUgdGhhdCBsaXN0CkBAIC0zNCwxMCArMzQsMTAgQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfbGlzdF90c3RhbXBfdHlwZXMoKQorLkJSIHBjYXBfbGlzdF90c3RhbXBfdHlwZXMgKCkKIGlzIHVzZWQgdG8gZ2V0IGEgbGlzdCBvZiB0aGUgc3VwcG9ydGVkIHRpbWUgc3RhbXAgdHlwZXMgb2YgdGhlIGludGVyZmFjZQogYXNzb2NpYXRlZCB3aXRoIHRoZSBwY2FwIGRlc2NyaXB0b3IuCi0uQiBwY2FwX2xpc3RfdHN0YW1wX3R5cGVzKCkKKy5CUiBwY2FwX2xpc3RfdHN0YW1wX3R5cGVzICgpCiBhbGxvY2F0ZXMgYW4gYXJyYXkgdG8gaG9sZCB0aGUgbGlzdCBhbmQgc2V0cwogLkkgKnRzdGFtcF90eXBlc3AKIHRvIHBvaW50IHRvIHRoZSBhcnJheS4KQEAgLTQ2LDI1ICs0NiwzNyBAQAogZm9yIGEgbGlzdCBvZiBhbGwgdGhlIHRpbWUgc3RhbXAgdHlwZXMuCiAuUFAKIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhlIGFycmF5IHdpdGgKLS5CUiBwY2FwX2ZyZWVfdHN0YW1wX3R5cGVzKCkgLAorLkJSIHBjYXBfZnJlZV90c3RhbXBfdHlwZXMgKCksCiB3aGljaCBmcmVlcyB0aGUgbGlzdCBwb2ludGVkIHRvIGJ5CiAuSVIgdHN0YW1wX3R5cGVzIC4KIC5TSCBSRVRVUk4gVkFMVUUKLS5CIHBjYXBfbGlzdF90c3RhbXBfdHlwZXMoKQorLkJSIHBjYXBfbGlzdF90c3RhbXBfdHlwZXMgKCkKIHJldHVybnMgdGhlIG51bWJlciBvZiB0aW1lIHN0YW1wIHR5cGVzIGluIHRoZSBhcnJheSBvbiBzdWNjZXNzIGFuZAogLkIgUENBUF9FUlJPUgogb24gZmFpbHVyZS4KLUEgcmV0dXJuIHZhbHVlIG9mIHplcm8gbWVhbnMgdGhhdCB5b3UgY2Fubm90IHNwZWNpZnkgYSB0aW1lIHN0YW1wIHR5cGU7Ci15b3UgYXJlIGxpbWl0ZWQgdG8gdGhlIGNhcHR1cmUgZGV2aWNlJ3MgZGVmYXVsdCB0aW1lIHN0YW1wIHR5cGUuCitBIHJldHVybiB2YWx1ZSBvZiBvbmUgbWVhbnMgdGhhdCB0aGUgb25seSB0aW1lIHN0YW1wIHR5cGUgc3VwcG9ydGVkIGlzCit0aGUgb25lIGluIHRoZSBsaXN0LCB3aGljaCBpcyB0aGUgY2FwdHVyZSBkZXZpY2UncyBkZWZhdWx0IHRpbWUgc3RhbXAKK3R5cGUuICBBIHJldHVybiB2YWx1ZSBvZiB6ZXJvIG1lYW5zIHRoYXQgdGhlIG9ubHkgdGltZSBzdGFtcCB0eXBlCitzdXBwb3J0ZWQgaXMKKy5CUiBQQ0FQX1RTVEFNUF9IT1NUICwKK3doaWNoIGlzIHRoZSBjYXB0dXJlIGRldmljZSdzIGRlZmF1bHQgdGltZSBzdGFtcCB0eXBlIChvbmx5IG9sZGVyCit2ZXJzaW9ucyBvZiBsaWJwY2FwIHdpbGwgcmV0dXJuIHRoYXQ7IG5ld2VyIHZlcnNpb25zIHdpbGwgYWx3YXlzIHJldHVybgorb25lIG9yIG1vcmUgdHlwZXMpLgogSWYKIC5CIFBDQVBfRVJST1IKIGlzIHJldHVybmVkLAotLkIgcGNhcF9nZXRlcnIoKQorLkJSIHBjYXBfZ2V0ZXJyICgzUENBUCkKIG9yCi0uQiBwY2FwX3BlcnJvcigpCisuQlIgcGNhcF9wZXJyb3IgKDNQQ0FQKQogbWF5IGJlIGNhbGxlZCB3aXRoCiAuSSBwCiBhcyBhbiBhcmd1bWVudCB0byBmZXRjaCBvciBkaXNwbGF5IHRoZSBlcnJvciB0ZXh0LgorLlNIIEJBQ0tXQVJEIENPTVBBVElCSUxJVFkKKy5QUAorVGhlc2UgZnVuY3Rpb25zIGJlY2FtZSBhdmFpbGFibGUgaW4gbGlicGNhcCByZWxlYXNlIDEuMi4xLiAgSW4gcHJldmlvdXMKK3JlbGVhc2VzLCB0aGUgdGltZSBzdGFtcCB0eXBlIGNhbm5vdCBiZSBzZXQ7IG9ubHkgdGhlIGRlZmF1bHQgdGltZSBzdGFtcAordHlwZSBvZmZlcmVkIGJ5IGEgY2FwdHVyZSBzb3VyY2UgaXMgYXZhaWxhYmxlLgogLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcF9nZXRlcnIoM1BDQVApLCBwY2FwX3RzdGFtcF90eXBlX3ZhbF90b19uYW1lKDNQQ0FQKSwKLXBjYXAtdHN0YW1wKEBNQU5fTUlTQ19JTkZPQCkKKy5CUiBwY2FwICgzUENBUCksCisuQlIgcGNhcF90c3RhbXBfdHlwZV92YWxfdG9fbmFtZSAoM1BDQVApLAorLkJSIHBjYXAtdHN0YW1wIChATUFOX01JU0NfSU5GT0ApCmRpZmYgLS1naXQgYS9wY2FwX2xvb2t1cGRldi4zcGNhcCBiL3BjYXBfbG9va3VwZGV2LjNwY2FwCmluZGV4IGViNDkzYmEuLmI1ZDU0OGYgMTAwNjQ0Ci0tLSBhL3BjYXBfbG9va3VwZGV2LjNwY2FwCisrKyBiL3BjYXBfbG9va3VwZGV2LjNwY2FwCkBAIC0zOSwyMiArMzksMzAgQEAKIC5CIFRoaXMgaW50ZXJmYWNlIGlzIG9ic29sZXRlZCBieQogLkJSIHBjYXBfZmluZGFsbGRldnMgKDNQQ0FQKS4KIFRvIGZpbmQgYSBkZWZhdWx0IGRldmljZSBvbiB3aGljaCB0byBjYXB0dXJlLCBjYWxsCi0uQiBwY2FwX2ZpbmRhbGxkZXZzKCkKKy5CUiBwY2FwX2ZpbmRhbGxkZXZzICgpCiBhbmQsIGlmIHRoZSBsaXN0IGl0IHJldHVybnMgaXMgbm90IGVtcHR5LCB1c2UgdGhlIGZpcnN0IGRldmljZSBpbiB0aGUKIGxpc3QuICAoSWYgdGhlIGxpc3QgaXMgZW1wdHksIHRoZXJlIGFyZSBubyBkZXZpY2VzIG9uIHdoaWNoIGNhcHR1cmUgaXMKIHBvc3NpYmxlLikKIC5MUAotLkIgcGNhcF9sb29rdXBkZXYoKQorLkIgSWYKKy5CUiBwY2FwX2luaXQgKDNQQ0FQKQorLkIgaGFzIGJlZW4gY2FsbGVkLCB0aGlzIGludGVyZmFjZSBhbHdheXMgcmV0dXJucworLkJSIE5VTEwgLgorLkxQCisuQlIgcGNhcF9sb29rdXBkZXYgKCkKIHJldHVybnMgYSBwb2ludGVyIHRvIGEgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSBvZiBhIG5ldHdvcmsgZGV2aWNlCiBzdWl0YWJsZSBmb3IgdXNlIHdpdGgKLS5CIHBjYXBfY3JlYXRlKCkKKy5CUiBwY2FwX2NyZWF0ZSAoM1BDQVApCiBhbmQKLS5CUiBwY2FwX2FjdGl2YXRlKCkgLAorLkJSIFwlcGNhcF9hY3RpdmF0ZSAoM1BDQVApLAogb3Igd2l0aAotLkJSIHBjYXBfb3Blbl9saXZlKCkgLAorLkJSIHBjYXBfb3Blbl9saXZlICgzUENBUCksCiBhbmQgd2l0aAotLkJSIHBjYXBfbG9va3VwbmV0KCkgLgorLkJSIHBjYXBfbG9va3VwbmV0ICgzUENBUCkuCiBJZiB0aGVyZSBpcyBhbiBlcnJvciwKK29yIGlmCisuQlIgcGNhcF9pbml0ICgzUENBUCkKK2hhcyBiZWVuIGNhbGxlZCwKIC5CIE5VTEwKIGlzIHJldHVybmVkIGFuZAogLkkgZXJyYnVmCkBAIC02NCwxNyArNzIsMTUgQEAKIC5CIFBDQVBfRVJSQlVGX1NJWkUKIGNoYXJzLgogLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcF9jcmVhdGUoM1BDQVApLCBwY2FwX2FjdGl2YXRlKDNQQ0FQKSwKLXBjYXBfb3Blbl9saXZlKDNQQ0FQKSwgcGNhcF9sb29rdXBuZXQoM1BDQVApCisuQlIgcGNhcCAoM1BDQVApCiAuU0ggQlVHUwogVGhlIHBvaW50ZXIgcmV0dXJuZWQgYnkKLS5CIHBjYXBfbG9va3VwZGV2KCkKKy5CUiBwY2FwX2xvb2t1cGRldiAoKQogcG9pbnRzIHRvIGEgc3RhdGljIGJ1ZmZlcjsgc3Vic2VxdWVudCBjYWxscyB0bwotLkIgcGNhcF9sb29rdXBkZXYoKQorLkJSIHBjYXBfbG9va3VwZGV2ICgpCiBpbiB0aGUgc2FtZSB0aHJlYWQsIG9yIGNhbGxzIHRvCi0uQiBwY2FwX2xvb2t1cGRldigpCisuQlIgcGNhcF9sb29rdXBkZXYgKCkKIGluIGFub3RoZXIgdGhyZWFkLCBtYXkgb3ZlcndyaXRlIHRoYXQgYnVmZmVyLgogLkxQCi1JbiBXaW5QY2FwLCB0aGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gYSBVVEYtMTYgc3RyaW5nIHJhdGhlciB0aGFuIGFuCi1BU0NJSSBvciBVVEYtOCBzdHJpbmcuCi0KK0luIFdpblBjYXAgYW5kIE5wY2FwLCB0aGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gYSBVVEYtMTYgc3RyaW5nIHJhdGhlcgordGhhbiBhbiBBU0NJSSBvciBVVEYtOCBzdHJpbmcuCmRpZmYgLS1naXQgYS9wY2FwX2xvb2t1cG5ldC4zcGNhcCBiL3BjYXBfbG9va3VwbmV0LjNwY2FwCmluZGV4IGMzOGZmM2EuLmMxMmZhNTUgMTAwNjQ0Ci0tLSBhL3BjYXBfbG9va3VwbmV0LjNwY2FwCisrKyBiL3BjYXBfbG9va3VwbmV0LjNwY2FwCkBAIC0xNyw3ICsxNyw3IEBACiAuXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKIC5cIiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogLlwiCi0uVEggUENBUF9MT09LVVBORVQgM1BDQVAgIjMgSmFudWFyeSAyMDE0IgorLlRIIFBDQVBfTE9PS1VQTkVUIDNQQ0FQICIyNSBKdWx5IDIwMTgiCiAuU0ggTkFNRQogcGNhcF9sb29rdXBuZXQgXC0gZmluZCB0aGUgSVB2NCBuZXR3b3JrIG51bWJlciBhbmQgbmV0bWFzayBmb3IgYSBkZXZpY2UKIC5TSCBTWU5PUFNJUwpAQCAtMzgsNyArMzgsNyBAQAogLmZ0CiAuZmkKIC5TSCBERVNDUklQVElPTgotLkIgcGNhcF9sb29rdXBuZXQoKQorLkJSIHBjYXBfbG9va3VwbmV0ICgpCiBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgSVB2NCBuZXR3b3JrIG51bWJlciBhbmQgbWFzawogYXNzb2NpYXRlZCB3aXRoIHRoZSBuZXR3b3JrIGRldmljZQogLklSIGRldmljZSAuCkBAIC01MCw5ICs1MCwxNCBAQAogLkkgYnBmX3VfaW50MzIKIHBvaW50ZXJzLgogLlNIIFJFVFVSTiBWQUxVRQotLkIgcGNhcF9sb29rdXBuZXQoKQotcmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIFwtMSBvbiBmYWlsdXJlLgotSWYgXC0xIGlzIHJldHVybmVkLAorLkJSIHBjYXBfbG9va3VwbmV0ICgpCityZXR1cm5zCisuQiAwCitvbiBzdWNjZXNzIGFuZAorLkIgUENBUF9FUlJPUgorb24gZmFpbHVyZS4gSWYKKy5CIFBDQVBfRVJST1IKK2lzIHJldHVybmVkLAogLkkgZXJyYnVmCiBpcyBmaWxsZWQgaW4gd2l0aCBhbiBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlLgogLkkgZXJyYnVmCkBAIC02MCw0ICs2NSw0IEBACiAuQiBQQ0FQX0VSUkJVRl9TSVpFCiBjaGFycy4KIC5TSCBTRUUgQUxTTwotcGNhcCgzUENBUCkKKy5CUiBwY2FwICgzUENBUCkKZGlmZiAtLWdpdCBhL3BjYXBfbG9vcC4zcGNhcCBiL3BjYXBfbG9vcC4zcGNhcAppbmRleCA0Njc5YjQ2Li4zZDc0MWVmIDEwMDY0NAotLS0gYS9wY2FwX2xvb3AuM3BjYXAKKysrIGIvcGNhcF9sb29wLjNwY2FwCkBAIC0xNyw3ICsxNyw3IEBACiAuXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKIC5cIiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogLlwiCi0uVEggUENBUF9MT09QIDNQQ0FQICIyMCBKYW51YXJ5IDIwMTciCisuVEggUENBUF9MT09QIDNQQ0FQICIyMiBBdWd1c3QgMjAyMCIKIC5TSCBOQU1FCiBwY2FwX2xvb3AsIHBjYXBfZGlzcGF0Y2ggXC0gcHJvY2VzcyBwYWNrZXRzIGZyb20gYSBsaXZlIGNhcHR1cmUgb3Igc2F2ZWZpbGUKIC5TSCBTWU5PUFNJUwpAQCAtNDIsMjggKzQyLDMyIEBACiAuZnQKIC5maQogLlNIIERFU0NSSVBUSU9OCi0uQiBwY2FwX2xvb3AoKQorLkJSIHBjYXBfbG9vcCAoKQogcHJvY2Vzc2VzIHBhY2tldHMgZnJvbSBhIGxpdmUgY2FwdHVyZSBvciBgYHNhdmVmaWxlJycgdW50aWwKIC5JIGNudAogcGFja2V0cyBhcmUgcHJvY2Vzc2VkLCB0aGUgZW5kIG9mIHRoZSBgYHNhdmVmaWxlJycgaXMKIHJlYWNoZWQgd2hlbiByZWFkaW5nIGZyb20gYSBgYHNhdmVmaWxlJycsCi0uQiBwY2FwX2JyZWFrbG9vcCgpCisuQlIgcGNhcF9icmVha2xvb3AgKDNQQ0FQKQogaXMgY2FsbGVkLCBvciBhbiBlcnJvciBvY2N1cnMuCiBJdCBkb2VzCiAuQiBub3QKIHJldHVybiB3aGVuIGxpdmUgcGFja2V0IGJ1ZmZlciB0aW1lb3V0cyBvY2N1ci4KLUEgdmFsdWUgb2YgXC0xIG9yIDAgZm9yCitBIHZhbHVlIG9mCisuQiBcLTEKK29yCisuQiAwCitmb3IKIC5JIGNudAogaXMgZXF1aXZhbGVudCB0byBpbmZpbml0eSwgc28gdGhhdCBwYWNrZXRzIGFyZSBwcm9jZXNzZWQgdW50aWwgYW5vdGhlcgogZW5kaW5nIGNvbmRpdGlvbiBvY2N1cnMuCiAuUFAKLS5CIHBjYXBfZGlzcGF0Y2goKQorLkJSIHBjYXBfZGlzcGF0Y2ggKCkKIHByb2Nlc3NlcyBwYWNrZXRzIGZyb20gYSBsaXZlIGNhcHR1cmUgb3IgYGBzYXZlZmlsZScnIHVudGlsCiAuSSBjbnQKIHBhY2tldHMgYXJlIHByb2Nlc3NlZCwgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBidWZmZXJmdWwgb2YgcGFja2V0cyBpcwogcmVhY2hlZCB3aGVuIGRvaW5nIGEgbGl2ZSBjYXB0dXJlLCB0aGUgZW5kIG9mIHRoZSBgYHNhdmVmaWxlJycgaXMKIHJlYWNoZWQgd2hlbiByZWFkaW5nIGZyb20gYSBgYHNhdmVmaWxlJycsCi0uQiBwY2FwX2JyZWFrbG9vcCgpCisuQlIgcGNhcF9icmVha2xvb3AgKCkKIGlzIGNhbGxlZCwgb3IgYW4gZXJyb3Igb2NjdXJzLgogVGh1cywgd2hlbiBkb2luZyBhIGxpdmUgY2FwdHVyZSwKIC5JIGNudApAQCAtNzEsNyArNzUsMTEgQEAKIGEgbWluaW11bSBudW1iZXI7IHdoZW4gcmVhZGluZyBhIGxpdmUgY2FwdHVyZSwgb25seSBvbmUKIGJ1ZmZlcmZ1bCBvZiBwYWNrZXRzIGlzIHJlYWQgYXQgYSB0aW1lLCBzbyBmZXdlciB0aGFuCiAuSSBjbnQKLXBhY2tldHMgbWF5IGJlIHByb2Nlc3NlZC4gQSB2YWx1ZSBvZiBcLTEgb3IgMCBmb3IKK3BhY2tldHMgbWF5IGJlIHByb2Nlc3NlZC4gQSB2YWx1ZSBvZgorLkIgXC0xCitvcgorLkIgMAorZm9yCiAuSSBjbnQKIGNhdXNlcyBhbGwgdGhlIHBhY2tldHMgcmVjZWl2ZWQgaW4gb25lIGJ1ZmZlciB0byBiZSBwcm9jZXNzZWQgd2hlbgogcmVhZGluZyBhIGxpdmUgY2FwdHVyZSwgYW5kIGNhdXNlcyBhbGwgdGhlIHBhY2tldHMgaW4gdGhlIGZpbGUgdG8gYmUKQEAgLTc5LDIwICs4NywxMSBAQAogLlBQCiBOb3RlIHRoYXQsIHdoZW4gZG9pbmcgYSBsaXZlIGNhcHR1cmUgb24gc29tZSBwbGF0Zm9ybXMsIGlmIHRoZSByZWFkCiB0aW1lb3V0IGV4cGlyZXMgd2hlbiB0aGVyZSBhcmUgbm8gcGFja2V0cyBhdmFpbGFibGUsCi0uQiBwY2FwX2Rpc3BhdGNoKCkKKy5CUiBwY2FwX2Rpc3BhdGNoICgpCiB3aWxsIHJldHVybiAwLCBldmVuIHdoZW4gbm90IGluIG5vbi1ibG9ja2luZyBtb2RlLCBhcyB0aGVyZSBhcmUgbm8KIHBhY2tldHMgdG8gcHJvY2Vzcy4gIEFwcGxpY2F0aW9ucyBzaG91bGQgYmUgcHJlcGFyZWQgZm9yIHRoaXMgdG8gaGFwcGVuLAogYnV0IG11c3Qgbm90IHJlbHkgb24gaXQgaGFwcGVuaW5nLgogLlBQCi0uZnQgQgotKEluIG9sZGVyIHZlcnNpb25zIG9mIGxpYnBjYXAsIHRoZSBiZWhhdmlvciB3aGVuCi1cZkljbnRcZlAKLXdhcyAwIHdhcyB1bmRlZmluZWQ7IGRpZmZlcmVudCBwbGF0Zm9ybXMgYW5kIGRldmljZXMgYmVoYXZlZAotZGlmZmVyZW50bHksIHNvIGNvZGUgdGhhdCBtdXN0IHdvcmsgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBsaWJwY2FwCi1zaG91bGQgdXNlIFwtMSwgbm90IDAsIGFzIHRoZSB2YWx1ZSBvZgotXGZJY250XGZQLikKLS5mdCBSCi0uUFAKIC5JIGNhbGxiYWNrCiBzcGVjaWZpZXMgYQogLkkgcGNhcF9oYW5kbGVyCkBAIC0xMDIsOSArMTAxLDkgQEAKIHBvaW50ZXIgd2hpY2ggaXMgcGFzc2VkIGluIHRoZQogLkkgdXNlcgogYXJndW1lbnQgdG8KLS5CIHBjYXBfbG9vcCgpCisuQlIgcGNhcF9sb29wICgpCiBvcgotLkJSIHBjYXBfZGlzcGF0Y2goKSAsCisuQlIgcGNhcF9kaXNwYXRjaCAoKSwKIGEKIC5JIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkcgogcG9pbnRlciBwb2ludGluZyB0byB0aGUgcGFja2V0IHRpbWUgc3RhbXAgYW5kIGxlbmd0aHMsIGFuZCBhCkBAIC0xMjMsMjUgKzEyMiwyNSBAQAogLlBQCiBUaGUgYnl0ZXMgb2YgZGF0YSBmcm9tIHRoZSBwYWNrZXQgYmVnaW4gd2l0aCBhIGxpbmstbGF5ZXIgaGVhZGVyLiAgVGhlCiBmb3JtYXQgb2YgdGhlIGxpbmstbGF5ZXIgaGVhZGVyIGlzIGluZGljYXRlZCBieSB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZQotLkIgcGNhcF9kYXRhbGluaygpCisuQlIgcGNhcF9kYXRhbGluayAoM1BDQVApCiByb3V0aW5lIHdoZW4gaGFuZGVkIHRoZQogLkIgcGNhcF90CiB2YWx1ZSBhbHNvIHBhc3NlZCB0bwotLkIgcGNhcF9sb29wKCkKKy5CUiBwY2FwX2xvb3AgKCkKIG9yCi0uQlIgcGNhcF9kaXNwYXRjaCgpIC4KKy5CUiBwY2FwX2Rpc3BhdGNoICgpLgogLkkgaHR0cHM6Ly93d3cudGNwZHVtcC5vcmcvbGlua3R5cGVzLmh0bWwKIGxpc3RzIHRoZSB2YWx1ZXMKLS5CIHBjYXBfZGF0YWxpbmsoKQorLkJSIHBjYXBfZGF0YWxpbmsgKCkKIGNhbiByZXR1cm4gYW5kIGRlc2NyaWJlcyB0aGUgcGFja2V0IGZvcm1hdHMgdGhhdAogY29ycmVzcG9uZCB0byB0aG9zZSB2YWx1ZXMuICBUaGUgdmFsdWUgaXQgcmV0dXJucyB3aWxsIGJlIHZhbGlkIGZvciBhbGwKIHBhY2tldHMgcmVjZWl2ZWQgdW5sZXNzIGFuZCB1bnRpbAotLkIgcGNhcF9zZXRfZGF0YWxpbmsoKQorLkJSIHBjYXBfc2V0X2RhdGFsaW5rICgzUENBUCkKIGlzIGNhbGxlZDsgYWZ0ZXIgYSBzdWNjZXNzZnVsIGNhbGwgdG8KLS5CUiBwY2FwX3NldF9kYXRhbGluaygpICwKKy5CUiBwY2FwX3NldF9kYXRhbGluayAoKSwKIGFsbCBzdWJzZXF1ZW50IHBhY2tldHMgd2lsbCBoYXZlIGEgbGluay1sYXllciBoZWFkZXIgb2YgdGhlIHR5cGUKIHNwZWNpZmllZCBieSB0aGUgbGluay1sYXllciBoZWFkZXIgdHlwZSB2YWx1ZSBwYXNzZWQgdG8KLS5CUiBwY2FwX3NldF9kYXRhbGluaygpIC4KKy5CUiBwY2FwX3NldF9kYXRhbGluayAoKS4KIC5QUAogRG8KIC5CIE5PVApAQCAtMTUxLDI1ICsxNTAsMzIgQEAKIGZvciBFdGhlcm5ldC4gIEZvciBleGFtcGxlLCB0aGUgImFueSIgZGV2aWNlIG9uIExpbnV4IHdpbGwgaGF2ZSBhCiBsaW5rLWxheWVyIGhlYWRlciB0eXBlIG9mCiAuQiBETFRfTElOVVhfU0xMCitvcgorLkIgRExUX0xJTlVYX1NMTDIKIGV2ZW4gaWYgYWxsIGRldmljZXMgb24gdGhlIHN5c3RlbSBhdCB0aGUgdGltZSB0aGUgImFueSIgZGV2aWNlIGlzIG9wZW5lZAogaGF2ZSBzb21lIG90aGVyIGRhdGEgbGluayB0eXBlLCBzdWNoIGFzCiAuQiBETFRfRU4xME1CCiBmb3IgRXRoZXJuZXQuCiAuU0ggUkVUVVJOIFZBTFVFCi0uQiBwY2FwX2xvb3AoKQotcmV0dXJucyAwIGlmCisuQlIgcGNhcF9sb29wICgpCityZXR1cm5zCisuQiAwCitpZgogLkkgY250CiBpcyBleGhhdXN0ZWQgb3IgaWYsIHdoZW4gcmVhZGluZyBmcm9tIGEgYGBzYXZlZmlsZScnLCBubyBtb3JlIHBhY2tldHMKLWFyZSBhdmFpbGFibGUuICBJdCByZXR1cm5zIFwtMSBpZiBhbiBlcnJvciBvY2N1cnMgb3IgXC0yIGlmIHRoZSBsb29wCi10ZXJtaW5hdGVkIGR1ZSB0byBhIGNhbGwgdG8KLS5CIHBjYXBfYnJlYWtsb29wKCkKK2FyZSBhdmFpbGFibGUuICBJdCByZXR1cm5zCisuQiBQQ0FQX0VSUk9SCitpZiBhbiBlcnJvciBvY2N1cnMgb3IKKy5CIFBDQVBfRVJST1JfQlJFQUsKK2lmIHRoZSBsb29wIHRlcm1pbmF0ZWQgZHVlIHRvIGEgY2FsbCB0bworLkJSIHBjYXBfYnJlYWtsb29wICgpCiBiZWZvcmUgYW55IHBhY2tldHMgd2VyZSBwcm9jZXNzZWQuCiBJdCBkb2VzCiAuQiBub3QKIHJldHVybiB3aGVuIGxpdmUgcGFja2V0IGJ1ZmZlciB0aW1lb3V0cyBvY2N1cjsgaW5zdGVhZCwgaXQgYXR0ZW1wdHMgdG8KIHJlYWQgbW9yZSBwYWNrZXRzLgogLlBQCi0uQiBwY2FwX2Rpc3BhdGNoKCkKKy5CUiBwY2FwX2Rpc3BhdGNoICgpCiByZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFja2V0cyBwcm9jZXNzZWQgb24gc3VjY2VzczsgdGhpcyBjYW4gYmUgMCBpZiBubwogcGFja2V0cyB3ZXJlIHJlYWQgZnJvbSBhIGxpdmUgY2FwdHVyZSAoaWYsIGZvciBleGFtcGxlLCB0aGV5IHdlcmUKIGRpc2NhcmRlZCBiZWNhdXNlIHRoZXkgZGlkbid0IHBhc3MgdGhlIHBhY2tldCBmaWx0ZXIsIG9yIGlmLCBvbgpAQCAtMTc3LDIzICsxODMsNDAgQEAKIHBhY2tldHMgYXJyaXZlLCB0aGUgdGltZW91dCBleHBpcmVzIGJlZm9yZSBhbnkgcGFja2V0cyBhcnJpdmUsIG9yIGlmIHRoZQogZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgY2FwdHVyZSBkZXZpY2UgaXMgaW4gbm9uLWJsb2NraW5nIG1vZGUgYW5kIG5vCiBwYWNrZXRzIHdlcmUgYXZhaWxhYmxlIHRvIGJlIHJlYWQpIG9yIGlmIG5vIG1vcmUgcGFja2V0cyBhcmUgYXZhaWxhYmxlCi1pbiBhIGBgc2F2ZWZpbGUuJycgSXQgcmV0dXJucyBcLTEgaWYgYW4gZXJyb3Igb2NjdXJzIG9yIFwtMiBpZiB0aGUgbG9vcAotdGVybWluYXRlZCBkdWUgdG8gYSBjYWxsIHRvCi0uQiBwY2FwX2JyZWFrbG9vcCgpCitpbiBhIGBgc2F2ZWZpbGUuJycgSXQgcmV0dXJucworLkIgUENBUF9FUlJPUgoraWYgYW4gZXJyb3Igb2NjdXJzIG9yCisuQiBQQ0FQX0VSUk9SX0JSRUFLCitpZiB0aGUgbG9vcCB0ZXJtaW5hdGVkIGR1ZSB0byBhIGNhbGwgdG8KKy5CUiBwY2FwX2JyZWFrbG9vcCAoKQogYmVmb3JlIGFueSBwYWNrZXRzIHdlcmUgcHJvY2Vzc2VkLgogLmZ0IEIKIElmIHlvdXIgYXBwbGljYXRpb24gdXNlcyBwY2FwX2JyZWFrbG9vcCgpLAotbWFrZSBzdXJlIHRoYXQgeW91IGV4cGxpY2l0bHkgY2hlY2sgZm9yIFwtMSBhbmQgXC0yLCByYXRoZXIgdGhhbiBqdXN0Ci1jaGVja2luZyBmb3IgYSByZXR1cm4gdmFsdWUgPCAwLgorbWFrZSBzdXJlIHRoYXQgeW91IGV4cGxpY2l0bHkgY2hlY2sgZm9yIFBDQVBfRVJST1IgYW5kIFBDQVBfRVJST1JfQlJFQUssCityYXRoZXIgdGhhbiBqdXN0IGNoZWNraW5nIGZvciBhIHJldHVybiB2YWx1ZSA8IDAuCiAuZnQgUgogLlBQCi1JZiBcLTEgaXMgcmV0dXJuZWQsCi0uQiBwY2FwX2dldGVycigpCitJZgorLkIgUENBUF9FUlJPUgoraXMgcmV0dXJuZWQsCisuQlIgcGNhcF9nZXRlcnIgKDNQQ0FQKQogb3IKLS5CIHBjYXBfcGVycm9yKCkKKy5CUiBwY2FwX3BlcnJvciAoM1BDQVApCiBtYXkgYmUgY2FsbGVkIHdpdGgKIC5JIHAKIGFzIGFuIGFyZ3VtZW50IHRvIGZldGNoIG9yIGRpc3BsYXkgdGhlIGVycm9yIHRleHQuCisuU0ggQkFDS1dBUkQgQ09NUEFUSUJJTElUWQorLlBQCitJbiBsaWJwY2FwIHZlcnNpb25zIGJlZm9yZSAxLjUuMCwgdGhlIGJlaGF2aW9yIHdoZW4KKy5JIGNudAord2FzCisuQiAwCit3YXMgdW5kZWZpbmVkOyBkaWZmZXJlbnQgcGxhdGZvcm1zIGFuZCBkZXZpY2VzIGJlaGF2ZWQgZGlmZmVyZW50bHksCitzbyBjb2RlIHRoYXQgbXVzdCB3b3JrIHdpdGggdGhlc2UgdmVyc2lvbnMgb2YgbGlicGNhcCBzaG91bGQgdXNlCisuQlIgXC0xICwKK25vdAorLkJSIDAgLAorYXMgdGhlIHZhbHVlIG9mCisuSVIgY250IC4KIC5TSCBTRUUgQUxTTwotcGNhcCgzUENBUCksIHBjYXBfZ2V0ZXJyKDNQQ0FQKSwgcGNhcF9icmVha2xvb3AoM1BDQVApLAotcGNhcF9kYXRhbGluaygzUENBUCkKKy5CUiBwY2FwICgzUENBUCkKZGlmZiAtLWdpdCBhL3BjYXBfbWFqb3JfdmVyc2lvbi4zcGNhcCBiL3BjYXBfbWFqb3JfdmVyc2lvbi4zcGNhcAppbmRleCAyZmVkZmQyLi4zOTM3MDViIDEwMDY0NAotLS0gYS9wY2FwX21ham9yX3ZlcnNpb24uM3BjYXAKKysrIGIvcGNhcF9tYWpvcl92ZXJzaW9uLjNwY2FwCkBAIC0zNSw5ICszNSw5IEBACiBJZgogLkkgcAogcmVmZXJzIHRvIGEgYGBzYXZlZmlsZScnLAotLkIgcGNhcF9tYWpvcl92ZXJzaW9uKCkKKy5CUiBwY2FwX21ham9yX3ZlcnNpb24gKCkKIHJldHVybnMgdGhlIG1ham9yIG51bWJlciBvZiB0aGUgZmlsZSBmb3JtYXQgb2YgdGhlIGBgc2F2ZWZpbGUnJyBhbmQKLS5CIHBjYXBfbWlub3JfdmVyc2lvbigpCisuQlIgcGNhcF9taW5vcl92ZXJzaW9uICgpCiByZXR1cm5zIHRoZSBtaW5vciBudW1iZXIgb2YgdGhlIGZpbGUgZm9ybWF0IG9mIHRoZSBgYHNhdmVmaWxlJycuICBUaGUKIHZlcnNpb24gbnVtYmVyIGlzIHN0b3JlZCBpbiB0aGUgYGBzYXZlZmlsZScnOyBub3RlIHRoYXQgdGhlIG1lYW5pbmcgb2YKIGl0cyB2YWx1ZXMgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiBgYHNhdmVmaWxlJycgKGZvciBleGFtcGxlLCBwY2FwIG9yCkBAIC00Niw5ICs0Niw5IEBACiBJZgogLkkgcAogcmVmZXJzIHRvIGEgbGl2ZSBjYXB0dXJlLCB0aGUgdmFsdWVzIHJldHVybmVkIGJ5Ci0uQiBwY2FwX21ham9yX3ZlcnNpb24oKQorLkJSIHBjYXBfbWFqb3JfdmVyc2lvbiAoKQogYW5kCi0uQiBwY2FwX21pbm9yX3ZlcnNpb24oKQorLkJSIHBjYXBfbWlub3JfdmVyc2lvbiAoKQogYXJlIG5vdCBtZWFuaW5nZnVsLgogLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKQorLkJSIHBjYXAgKDNQQ0FQKQpkaWZmIC0tZ2l0IGEvcGNhcF9uZXh0X2V4LjNwY2FwIGIvcGNhcF9uZXh0X2V4LjNwY2FwCmluZGV4IDg4ZTgzMTQuLjJiZDFhNDIgMTAwNjQ0Ci0tLSBhL3BjYXBfbmV4dF9leC4zcGNhcAorKysgYi9wY2FwX25leHRfZXguM3BjYXAKQEAgLTE3LDcgKzE3LDcgQEAKIC5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgogLlwiIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAuXCIKLS5USCBQQ0FQX05FWFRfRVggM1BDQVAgIjIwIEphbnVhcnkgMjAxNyIKKy5USCBQQ0FQX05FWFRfRVggM1BDQVAgIjI1IEp1bHkgMjAxOCIKIC5TSCBOQU1FCiBwY2FwX25leHRfZXgsIHBjYXBfbmV4dCBcLSByZWFkIHRoZSBuZXh0IHBhY2tldCBmcm9tIGEgcGNhcF90CiAuU0ggU1lOT1BTSVMKQEAgLTM0LDcgKzM0LDcgQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfbmV4dF9leCgpCisuQlIgcGNhcF9uZXh0X2V4ICgpCiByZWFkcyB0aGUgbmV4dCBwYWNrZXQgYW5kIHJldHVybnMgYSBzdWNjZXNzL2ZhaWx1cmUgaW5kaWNhdGlvbi4KIElmIHRoZSBwYWNrZXQgd2FzIHJlYWQgd2l0aG91dCBwcm9ibGVtcywgdGhlIHBvaW50ZXIgcG9pbnRlZCB0byBieSB0aGUKIC5JIHBrdF9oZWFkZXIKQEAgLTQ3LDE2ICs0NywxNiBAQAogLkkgc3RydWN0IHBjYXBfcGt0aGRyCiBhbmQgdGhlIHBhY2tldCBkYXRhIGFyZSBub3QgdG8gYmUgZnJlZWQgYnkgdGhlIGNhbGxlciwgYW5kIGFyZSBub3QKIGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQgYWZ0ZXIgdGhlIG5leHQgY2FsbCB0bwotLkJSIHBjYXBfbmV4dF9leCgpICwKLS5CUiBwY2FwX25leHQoKSAsCi0uQlIgcGNhcF9sb29wKCkgLAorLkJSIHBjYXBfbmV4dF9leCAoKSwKKy5CUiBwY2FwX25leHQgKCksCisuQlIgcGNhcF9sb29wICgzUENBUCksCiBvcgotLkJSIHBjYXBfZGlzcGF0Y2goKSA7CisuQlIgcGNhcF9kaXNwYXRjaCAoM1BDQVApOwogaWYgdGhlIGNvZGUgbmVlZHMgdGhlbSB0byByZW1haW4gdmFsaWQsIGl0IG11c3QgbWFrZSBhIGNvcHkgb2YgdGhlbS4KIC5QUAotLkIgcGNhcF9uZXh0KCkKKy5CUiBwY2FwX25leHQgKCkKIHJlYWRzIHRoZSBuZXh0IHBhY2tldCAoYnkgY2FsbGluZwotLkIgcGNhcF9kaXNwYXRjaCgpCisuQlIgcGNhcF9kaXNwYXRjaCAoKQogd2l0aCBhCiAuSSBjbnQKIG9mIDEpIGFuZCByZXR1cm5zIGEKQEAgLTY0LDExICs2NCwxMSBAQAogcG9pbnRlciB0byB0aGUgZGF0YSBpbiB0aGF0IHBhY2tldC4gIFRoZQogcGFja2V0IGRhdGEgaXMgbm90IHRvIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIsIGFuZCBpcyBub3QKIGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQgYWZ0ZXIgdGhlIG5leHQgY2FsbCB0bwotLkJSIHBjYXBfbmV4dF9leCgpICwKLS5CUiBwY2FwX25leHQoKSAsCi0uQlIgcGNhcF9sb29wKCkgLAorLkJSIHBjYXBfbmV4dF9leCAoKSwKKy5CUiBwY2FwX25leHQgKCksCisuQlIgcGNhcF9sb29wICgpLAogb3IKLS5CUiBwY2FwX2Rpc3BhdGNoKCkgOworLkJSIHBjYXBfZGlzcGF0Y2ggKCk7CiBpZiB0aGUgY29kZSBuZWVkcyBpdCB0byByZW1haW4gdmFsaWQsIGl0IG11c3QgbWFrZSBhIGNvcHkgb2YgaXQuCiBUaGUKIC5JIHBjYXBfcGt0aGRyCkBAIC03OCwyNSArNzgsMjUgQEAKIC5QUAogVGhlIGJ5dGVzIG9mIGRhdGEgZnJvbSB0aGUgcGFja2V0IGJlZ2luIHdpdGggYSBsaW5rLWxheWVyIGhlYWRlci4gIFRoZQogZm9ybWF0IG9mIHRoZSBsaW5rLWxheWVyIGhlYWRlciBpcyBpbmRpY2F0ZWQgYnkgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUKLS5CIHBjYXBfZGF0YWxpbmsoKQorLkJSIHBjYXBfZGF0YWxpbmsgKDNQQ0FQKQogcm91dGluZSB3aGVuIGhhbmRlZCB0aGUKIC5CIHBjYXBfdAogdmFsdWUgYWxzbyBwYXNzZWQgdG8KLS5CIHBjYXBfbG9vcCgpCisuQlIgcGNhcF9sb29wICgpCiBvcgotLkJSIHBjYXBfZGlzcGF0Y2goKSAuCisuQlIgcGNhcF9kaXNwYXRjaCAoKS4KIC5JIGh0dHBzOi8vd3d3LnRjcGR1bXAub3JnL2xpbmt0eXBlcy5odG1sCiBsaXN0cyB0aGUgdmFsdWVzCi0uQiBwY2FwX2RhdGFsaW5rKCkKKy5CUiBwY2FwX2RhdGFsaW5rICgpCiBjYW4gcmV0dXJuIGFuZCBkZXNjcmliZXMgdGhlIHBhY2tldCBmb3JtYXRzIHRoYXQKIGNvcnJlc3BvbmQgdG8gdGhvc2UgdmFsdWVzLiAgVGhlIHZhbHVlIGl0IHJldHVybnMgd2lsbCBiZSB2YWxpZCBmb3IgYWxsCiBwYWNrZXRzIHJlY2VpdmVkIHVubGVzcyBhbmQgdW50aWwKLS5CIHBjYXBfc2V0X2RhdGFsaW5rKCkKKy5CUiBwY2FwX3NldF9kYXRhbGluayAoM1BDQVApCiBpcyBjYWxsZWQ7IGFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvCi0uQlIgcGNhcF9zZXRfZGF0YWxpbmsoKSAsCisuQlIgcGNhcF9zZXRfZGF0YWxpbmsgKCksCiBhbGwgc3Vic2VxdWVudCBwYWNrZXRzIHdpbGwgaGF2ZSBhIGxpbmstbGF5ZXIgaGVhZGVyIG9mIHRoZSB0eXBlCiBzcGVjaWZpZWQgYnkgdGhlIGxpbmstbGF5ZXIgaGVhZGVyIHR5cGUgdmFsdWUgcGFzc2VkIHRvCi0uQlIgcGNhcF9zZXRfZGF0YWxpbmsoKSAuCisuQlIgcGNhcF9zZXRfZGF0YWxpbmsgKCkuCiAuUFAKIERvCiAuQiBOT1QKQEAgLTEwNiwyNSArMTA2LDM2IEBACiBmb3IgRXRoZXJuZXQuICBGb3IgZXhhbXBsZSwgdGhlICJhbnkiIGRldmljZSBvbiBMaW51eCB3aWxsIGhhdmUgYQogbGluay1sYXllciBoZWFkZXIgdHlwZSBvZgogLkIgRExUX0xJTlVYX1NMTAorb3IKKy5CIERMVF9MSU5VWF9TTEwyCiBldmVuIGlmIGFsbCBkZXZpY2VzIG9uIHRoZSBzeXN0ZW0gYXQgdGhlIHRpbWUgdGhlICJhbnkiIGRldmljZSBpcyBvcGVuZWQKIGhhdmUgc29tZSBvdGhlciBkYXRhIGxpbmsgdHlwZSwgc3VjaCBhcwogLkIgRExUX0VOMTBNQgogZm9yIEV0aGVybmV0LgogLlNIIFJFVFVSTiBWQUxVRQotLkIgcGNhcF9uZXh0X2V4KCkKLXJldHVybnMgMSBpZiB0aGUgcGFja2V0IHdhcyByZWFkIHdpdGhvdXQgcHJvYmxlbXMsIDAgaWYgcGFja2V0cyBhcmUKKy5CUiBwY2FwX25leHRfZXggKCkKK3JldHVybnMKKy5CIDEKK2lmIHRoZSBwYWNrZXQgd2FzIHJlYWQgd2l0aG91dCBwcm9ibGVtcywKKy5CIDAKK2lmIHBhY2tldHMgYXJlCiBiZWluZyByZWFkIGZyb20gYSBsaXZlIGNhcHR1cmUgYW5kIHRoZSBwYWNrZXQgYnVmZmVyIHRpbWVvdXQgZXhwaXJlZCwKLVwtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIHRoZSBwYWNrZXQsIGFuZCBcLTIgaWYgcGFja2V0cworLkIgUENBUF9FUlJPUgoraWYgYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyB0aGUgcGFja2V0LCBhbmQKKy5CIFBDQVBfRVJST1JfQlJFQUsKK2lmIHBhY2tldHMKIGFyZSBiZWluZyByZWFkIGZyb20gYSBgYHNhdmVmaWxlJycgYW5kIHRoZXJlIGFyZSBubyBtb3JlIHBhY2tldHMgdG8gcmVhZAotZnJvbSB0aGUgc2F2ZWZpbGUuICBJZiBcLTEgaXMgcmV0dXJuZWQsCi0uQiBwY2FwX2dldGVycigpCitmcm9tIHRoZSBzYXZlZmlsZS4gIElmCisuQiBQQ0FQX0VSUk9SCitpcyByZXR1cm5lZCwKKy5CUiBwY2FwX2dldGVyciAoM1BDQVApCiBvcgotLkIgcGNhcF9wZXJyb3IoKQorLkJSIHBjYXBfcGVycm9yICgzUENBUCkKIG1heSBiZSBjYWxsZWQgd2l0aAogLkkgcAogYXMgYW4gYXJndW1lbnQgdG8gZmV0Y2ggb3IgZGlzcGxheSB0aGUgZXJyb3IgdGV4dC4KIC5QUAotLkIgcGNhcF9uZXh0KCkKKy5CUiBwY2FwX25leHQgKCkKIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBwYWNrZXQgZGF0YSBvbiBzdWNjZXNzLCBhbmQgcmV0dXJucwogLkIgTlVMTAogaWYgYW4gZXJyb3Igb2NjdXJyZWQsIG9yIGlmIG5vIHBhY2tldHMgd2VyZSByZWFkIGZyb20gYSBsaXZlIGNhcHR1cmUKQEAgLTEzNiw1ICsxNDcsNCBAQAogbW9yZSBwYWNrZXRzIGFyZSBhdmFpbGFibGUgaW4gYSBgYHNhdmVmaWxlLicnIFVuZm9ydHVuYXRlbHksIHRoZXJlIGlzIG5vCiB3YXkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gZXJyb3Igb2NjdXJyZWQgb3Igbm90LgogLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcF9nZXRlcnIoM1BDQVApLCBwY2FwX2Rpc3BhdGNoKDNQQ0FQKSwKLXBjYXBfZGF0YWxpbmsoM1BDQVApCisuQlIgcGNhcCAoM1BDQVApCmRpZmYgLS1naXQgYS9wY2FwX29mZmxpbmVfZmlsdGVyLjNwY2FwIGIvcGNhcF9vZmZsaW5lX2ZpbHRlci4zcGNhcAppbmRleCAwOGMwYjY2Li5kYmI2ZTk2IDEwMDY0NAotLS0gYS9wY2FwX29mZmxpbmVfZmlsdGVyLjNwY2FwCisrKyBiL3BjYXBfb2ZmbGluZV9maWx0ZXIuM3BjYXAKQEAgLTMzLDEzICszMywxMyBAQAogLmZ0CiAuZmkKIC5TSCBERVNDUklQVElPTgotLkIgcGNhcF9vZmZsaW5lX2ZpbHRlcigpCisuQlIgcGNhcF9vZmZsaW5lX2ZpbHRlciAoKQogY2hlY2tzIHdoZXRoZXIgYSBmaWx0ZXIgbWF0Y2hlcyBhIHBhY2tldC4KIC5JIGZwCiBpcyBhIHBvaW50ZXIgdG8gYQogLkkgYnBmX3Byb2dyYW0KIHN0cnVjdCwgdXN1YWxseSB0aGUgcmVzdWx0IG9mIGEgY2FsbCB0bwotLkJSIHBjYXBfY29tcGlsZSgpIC4KKy5CUiBwY2FwX2NvbXBpbGUgKDNQQ0FQKS4KIC5JIGgKIHBvaW50cyB0byB0aGUKIC5JIHBjYXBfcGt0aGRyCkBAIC00Nyw5ICs0Nyw5IEBACiAuSSBwa3QKIHBvaW50cyB0byB0aGUgZGF0YSBpbiB0aGUgcGFja2V0LgogLlNIIFJFVFVSTiBWQUxVRQotLkIgcGNhcF9vZmZsaW5lX2ZpbHRlcigpCisuQlIgcGNhcF9vZmZsaW5lX2ZpbHRlciAoKQogcmV0dXJucyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmaWx0ZXIgcHJvZ3JhbS4gIFRoaXMgd2lsbCBiZSB6ZXJvIGlmCiB0aGUgcGFja2V0IGRvZXNuJ3QgbWF0Y2ggdGhlIGZpbHRlciBhbmQgbm9uLXplcm8gaWYgdGhlIHBhY2tldCBtYXRjaGVzCiB0aGUgZmlsdGVyLgogLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcF9jb21waWxlKDNQQ0FQKQorLkJSIHBjYXAgKDNQQ0FQKQpkaWZmIC0tZ2l0IGEvcGNhcF9vcGVuX2RlYWQuM3BjYXAgYi9wY2FwX29wZW5fZGVhZC4zcGNhcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE4YzUzMy4uMDAwMDAwMAotLS0gYS9wY2FwX29wZW5fZGVhZC4zcGNhcAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS5cIiBDb3B5cmlnaHQgKGMpIDE5OTQsIDE5OTYsIDE5OTcKLS5cIglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0OiAoMSkgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9ucwotLlwiIHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5LCAoMikKLS5cIiBkaXN0cmlidXRpb25zIGluY2x1ZGluZyBiaW5hcnkgY29kZSBpbmNsdWRlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAotLlwiIHRoaXMgcGFyYWdyYXBoIGluIGl0cyBlbnRpcmV0eSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvciBvdGhlciBtYXRlcmlhbHMKLS5cIiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24sIGFuZCAoMykgYWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nCi0uXCIgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLS5cIiBgYFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwKLS5cIiBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IGFuZCBpdHMgY29udHJpYnV0b3JzLicnIE5laXRoZXIgdGhlIG5hbWUgb2YKLS5cIiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZQotLlwiIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgotLlwiIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0uXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS5cIiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotLlwiCi0uVEggUENBUF9PUEVOX0RFQUQgM1BDQVAgIjMgSmFudWFyeSAyMDE0IgotLlNIIE5BTUUKLXBjYXBfb3Blbl9kZWFkLCBwY2FwX29wZW5fZGVhZF93aXRoX3RzdGFtcF9wcmVjaXNpb24gXC0gb3BlbiBhIGZha2UKLXBjYXBfdCBmb3IgY29tcGlsaW5nIGZpbHRlcnMgb3Igb3BlbmluZyBhIGNhcHR1cmUgZm9yIG91dHB1dAotLlNIIFNZTk9QU0lTCi0ubmYKLS5mdCBCCi0jaW5jbHVkZSA8cGNhcC9wY2FwLmg+Ci0uZnQKLS5MUAotLmZ0IEIKLXBjYXBfdCAqcGNhcF9vcGVuX2RlYWQoaW50IGxpbmt0eXBlLCBpbnQgc25hcGxlbik7Ci1wY2FwX3QgKnBjYXBfb3Blbl9kZWFkX3dpdGhfdHN0YW1wX3ByZWNpc2lvbihpbnQgbGlua3R5cGUsIGludCBzbmFwbGVuLAotICAgIHVfaW50IHByZWNpc2lvbik7Ci0uZnQKLS5maQotLlNIIERFU0NSSVBUSU9OCi0uUFAKLS5CIHBjYXBfb3Blbl9kZWFkKCkKLWFuZAotLkIgcGNhcF9vcGVuX2RlYWRfd2l0aF90c3RhbXBfcHJlY2lzaW9uKCkKLWFyZSB1c2VkIGZvciBjcmVhdGluZyBhCi0uQiBwY2FwX3QKLXN0cnVjdHVyZSB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gbGlicGNhcC4gIEl0IGlzCi10eXBpY2FsbHkgdXNlZCB3aGVuIGp1c3QgdXNpbmcgbGlicGNhcCBmb3IgY29tcGlsaW5nIEJQRiBjb2RlOyBpdCBjYW4KLWFsc28gYmUgdXNlZCBpZiB1c2luZwotLkJSIHBjYXBfZHVtcF9vcGVuKCkgLAotLkJSIHBjYXBfZHVtcCgpICwKLWFuZAotLkIgcGNhcF9kdW1wX2Nsb3NlKCkKLXRvIHdyaXRlIGEgc2F2ZWZpbGUgaWYgdGhlcmUgaXMgbm8KLS5CIHBjYXBfdAotdGhhdCBzdXBwbGllcyB0aGUgcGFja2V0cyB0byBiZSB3cml0dGVuLgotLlBQCi0uSSBsaW5rdHlwZQotc3BlY2lmaWVzIHRoZSBsaW5rLWxheWVyIHR5cGUgZm9yIHRoZQotLkJSIHBjYXBfdCAuCi0uUFAKLS5JIHNuYXBsZW4KLXNwZWNpZmllcyB0aGUgc25hcHNob3QgbGVuZ3RoIGZvciB0aGUKLS5CUiBwY2FwX3QgLgotLlBQCi1XaGVuCi0uQlIgcGNhcF9vcGVuX2RlYWRfd2l0aF90c3RhbXBfcHJlY2lzaW9uKCkgLAotaXMgdXNlZCB0byBjcmVhdGUgYQotLkIgcGNhcF90Ci1mb3IgdXNlIHdpdGgKLS5CUiBwY2FwX2R1bXBfb3BlbigpICwKLS5JIHByZWNpc2lvbgotc3BlY2lmaWVzIHRoZSB0aW1lIHN0YW1wIHByZWNpc2lvbiBmb3IgcGFja2V0czsKLS5CIFBDQVBfVFNUQU1QX1BSRUNJU0lPTl9NSUNSTwotc2hvdWxkIGJlIHNwZWNpZmllZCBpZiB0aGUgcGFja2V0cyB0byBiZSB3cml0dGVuIGhhdmUgdGltZSBzdGFtcHMgaW4KLXNlY29uZHMgYW5kIG1pY3Jvc2Vjb25kcywgYW5kCi0uQiBQQ0FQX1RTVEFNUF9QUkVDSVNJT05fTkFOTwotc2hvdWxkIGJlIHNwZWNpZmllZCBpZiB0aGUgcGFja2V0cyB0byBiZSB3cml0dGVuIGhhdmUgdGltZSBzdGFtcHMgaW4KLXNlY29uZHMgYW5kIG5hbm9zZWNvbmRzLiAgSXRzIHZhbHVlIGRvZXMgbm90IGFmZmVjdAotLkJSIHBjYXBfY29tcGlsZSgpIC4KLS5TSCBTRUUgQUxTTwotcGNhcCgzUENBUCksIHBjYXBfY29tcGlsZSgzUENBUCksIHBjYXBfZHVtcF9vcGVuKDNQQ0FQKSwKLVwlcGNhcC1saW5rdHlwZSg3KQpkaWZmIC0tZ2l0IGEvcGNhcF9vcGVuX2RlYWQuM3BjYXAuaW4gYi9wY2FwX29wZW5fZGVhZC4zcGNhcC5pbgppbmRleCA2MjFlNzViLi5jZWQ3ZDZjIDEwMDY0NAotLS0gYS9wY2FwX29wZW5fZGVhZC4zcGNhcC5pbgorKysgYi9wY2FwX29wZW5fZGVhZC4zcGNhcC5pbgpAQCAtMzUsMTggKzM1LDE4IEBACiAuZmkKIC5TSCBERVNDUklQVElPTgogLlBQCi0uQiBwY2FwX29wZW5fZGVhZCgpCisuQlIgcGNhcF9vcGVuX2RlYWQgKCkKIGFuZAotLkIgcGNhcF9vcGVuX2RlYWRfd2l0aF90c3RhbXBfcHJlY2lzaW9uKCkKKy5CUiBwY2FwX29wZW5fZGVhZF93aXRoX3RzdGFtcF9wcmVjaXNpb24gKCkKIGFyZSB1c2VkIGZvciBjcmVhdGluZyBhCiAuQiBwY2FwX3QKIHN0cnVjdHVyZSB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gbGlicGNhcC4gIEl0IGlzCiB0eXBpY2FsbHkgdXNlZCB3aGVuIGp1c3QgdXNpbmcgbGlicGNhcCBmb3IgY29tcGlsaW5nIEJQRiBjb2RlOyBpdCBjYW4KIGFsc28gYmUgdXNlZCBpZiB1c2luZwotLkJSIHBjYXBfZHVtcF9vcGVuKCkgLAotLkJSIHBjYXBfZHVtcCgpICwKKy5CUiBwY2FwX2R1bXBfb3BlbiAoM1BDQVApLAorLkJSIHBjYXBfZHVtcCAoM1BDQVApLAogYW5kCi0uQiBwY2FwX2R1bXBfY2xvc2UoKQorLkJSIHBjYXBfZHVtcF9jbG9zZSAoM1BDQVApCiB0byB3cml0ZSBhIHNhdmVmaWxlIGlmIHRoZXJlIGlzIG5vCiAuQiBwY2FwX3QKIHRoYXQgc3VwcGxpZXMgdGhlIHBhY2tldHMgdG8gYmUgd3JpdHRlbi4KQEAgLTYwLDExICs2MCwxMSBAQAogLkJSIHBjYXBfdCAuCiAuUFAKIFdoZW4KLS5CUiBwY2FwX29wZW5fZGVhZF93aXRoX3RzdGFtcF9wcmVjaXNpb24oKSAsCisuQlIgcGNhcF9vcGVuX2RlYWRfd2l0aF90c3RhbXBfcHJlY2lzaW9uICgpLAogaXMgdXNlZCB0byBjcmVhdGUgYQogLkIgcGNhcF90CiBmb3IgdXNlIHdpdGgKLS5CUiBwY2FwX2R1bXBfb3BlbigpICwKKy5CUiBwY2FwX2R1bXBfb3BlbiAoKSwKIC5JIHByZWNpc2lvbgogc3BlY2lmaWVzIHRoZSB0aW1lIHN0YW1wIHByZWNpc2lvbiBmb3IgcGFja2V0czsKIC5CIFBDQVBfVFNUQU1QX1BSRUNJU0lPTl9NSUNSTwpAQCAtNzMsNyArNzMsMTMgQEAKIC5CIFBDQVBfVFNUQU1QX1BSRUNJU0lPTl9OQU5PCiBzaG91bGQgYmUgc3BlY2lmaWVkIGlmIHRoZSBwYWNrZXRzIHRvIGJlIHdyaXR0ZW4gaGF2ZSB0aW1lIHN0YW1wcyBpbgogc2Vjb25kcyBhbmQgbmFub3NlY29uZHMuICBJdHMgdmFsdWUgZG9lcyBub3QgYWZmZWN0Ci0uQlIgcGNhcF9jb21waWxlKCkgLgorLkJSIHBjYXBfY29tcGlsZSAoM1BDQVApLgorLlNIIEJBQ0tXQVJEIENPTVBBVElCSUxJVFkKK1RoZQorLkJSIHBjYXBfb3Blbl9kZWFkX3dpdGhfdHN0YW1wX3ByZWNpc2lvbiAoKQorZnVuY3Rpb24gYmVjYW1lIGF2YWlsYWJsZSBpbiBsaWJwY2FwIHJlbGVhc2UgMS41LjEuICBJbiBwcmV2aW91cworcmVsZWFzZXMsIHRoZXJlIHdhcyBubyBtZWNoYW5pc20gdG8gb3BlbiBhIHNhdmVmaWxlIGZvciB3cml0aW5nIHdpdGgKK3RpbWUgc3RhbXBzIGdpdmVuIGluIHNlY29uZHMgYW5kIG5hbm9zZWNvbmRzLgogLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcF9jb21waWxlKDNQQ0FQKSwgcGNhcF9kdW1wX29wZW4oM1BDQVApLAotXCVwY2FwLWxpbmt0eXBlKEBNQU5fTUlTQ19JTkZPQCkKKy5CUiBwY2FwICgzUENBUCksCisuQlIgXCVwY2FwLWxpbmt0eXBlIChATUFOX01JU0NfSU5GT0ApCmRpZmYgLS1naXQgYS9wY2FwX29wZW5fbGl2ZS4zcGNhcCBiL3BjYXBfb3Blbl9saXZlLjNwY2FwCmluZGV4IDk0MmQ0ZmMuLmI4YzE3MjkgMTAwNjQ0Ci0tLSBhL3BjYXBfb3Blbl9saXZlLjNwY2FwCisrKyBiL3BjYXBfb3Blbl9saXZlLjNwY2FwCkBAIC0zOCw3ICszOCw3IEBACiAuZnQKIC5maQogLlNIIERFU0NSSVBUSU9OCi0uQiBwY2FwX29wZW5fbGl2ZSgpCisuQlIgcGNhcF9vcGVuX2xpdmUgKCkKIGlzIHVzZWQgdG8gb2J0YWluIGEgcGFja2V0IGNhcHR1cmUgaGFuZGxlIHRvIGxvb2sKIGF0IHBhY2tldHMgb24gdGhlIG5ldHdvcmsuCiAuSSBkZXZpY2UKQEAgLTUzLDcgKzUzLDEwIEBACiBzcGVjaWZpZXMgdGhlIHNuYXBzaG90IGxlbmd0aCB0byBiZSBzZXQgb24gdGhlIGhhbmRsZS4KIC5QUAogLkkgcHJvbWlzYwotc3BlY2lmaWVzIGlmIHRoZSBpbnRlcmZhY2UgaXMgdG8gYmUgcHV0IGludG8gcHJvbWlzY3VvdXMgbW9kZS4KK3NwZWNpZmllcyB3aGV0aGVyIHRoZSBpbnRlcmZhY2UgaXMgdG8gYmUgcHV0IGludG8gcHJvbWlzY3VvdXMgbW9kZS4KK0lmCisuSSBwcm9taXNjCitpcyBub24temVybywgcHJvbWlzY3VvdXMgbW9kZSB3aWxsIGJlIHNldCwgb3RoZXJ3aXNlIGl0IHdpbGwgbm90IGJlIHNldC4KIC5QUAogLkkgdG9fbXMKIHNwZWNpZmllcyB0aGUgcGFja2V0IGJ1ZmZlciB0aW1lb3V0LCBhcyBhIG5vbi1uZWdhdGl2ZSB2YWx1ZSwgaW4KQEAgLTYxLDcgKzY0LDcgQEAKIC5CUiBwY2FwICgzUENBUCkKIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgcGFja2V0IGJ1ZmZlciB0aW1lb3V0LikKIC5TSCBSRVRVUk4gVkFMVUUKLS5CIHBjYXBfb3Blbl9saXZlKCkKKy5CUiBwY2FwX29wZW5fbGl2ZSAoKQogcmV0dXJucyBhCiAuSSBwY2FwX3QgKgogb24gc3VjY2VzcyBhbmQKQEAgLTc0LDExICs3NywxMSBAQAogaXMgZmlsbGVkIGluIHdpdGggYW4gYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZS4KIC5JIGVycmJ1ZgogbWF5IGFsc28gYmUgc2V0IHRvIHdhcm5pbmcgdGV4dCB3aGVuCi0uQiBwY2FwX29wZW5fbGl2ZSgpCisuQlIgcGNhcF9vcGVuX2xpdmUgKCkKIHN1Y2NlZWRzOyB0byBkZXRlY3QgdGhpcyBjYXNlIHRoZSBjYWxsZXIgc2hvdWxkIHN0b3JlIGEgemVyby1sZW5ndGggc3RyaW5nIGluCiAuSSBlcnJidWYKIGJlZm9yZSBjYWxsaW5nCi0uQiBwY2FwX29wZW5fbGl2ZSgpCisuQlIgcGNhcF9vcGVuX2xpdmUgKCkKIGFuZCBkaXNwbGF5IHRoZSB3YXJuaW5nIHRvIHRoZSB1c2VyIGlmCiAuSSBlcnJidWYKIGlzIG5vIGxvbmdlciBhIHplcm8tbGVuZ3RoIHN0cmluZy4KQEAgLTg3LDQgKzkwLDUgQEAKIC5CIFBDQVBfRVJSQlVGX1NJWkUKIGNoYXJzLgogLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcF9jcmVhdGUoM1BDQVApLCBwY2FwX2FjdGl2YXRlKDNQQ0FQKQorLkJSIHBjYXBfY3JlYXRlICgzUENBUCksCisuQlIgcGNhcF9hY3RpdmF0ZSAoM1BDQVApCmRpZmYgLS1naXQgYS9wY2FwX29wZW5fb2ZmbGluZS4zcGNhcCBiL3BjYXBfb3Blbl9vZmZsaW5lLjNwY2FwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzU5MzcyLi4wMDAwMDAwCi0tLSBhL3BjYXBfb3Blbl9vZmZsaW5lLjNwY2FwCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS5cIiBDb3B5cmlnaHQgKGMpIDE5OTQsIDE5OTYsIDE5OTcKLS5cIglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0OiAoMSkgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9ucwotLlwiIHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5LCAoMikKLS5cIiBkaXN0cmlidXRpb25zIGluY2x1ZGluZyBiaW5hcnkgY29kZSBpbmNsdWRlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAotLlwiIHRoaXMgcGFyYWdyYXBoIGluIGl0cyBlbnRpcmV0eSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvciBvdGhlciBtYXRlcmlhbHMKLS5cIiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24sIGFuZCAoMykgYWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nCi0uXCIgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLS5cIiBgYFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwKLS5cIiBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IGFuZCBpdHMgY29udHJpYnV0b3JzLicnIE5laXRoZXIgdGhlIG5hbWUgb2YKLS5cIiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZQotLlwiIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgotLlwiIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0uXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS5cIiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotLlwiCi0uVEggUENBUF9PUEVOX09GRkxJTkUgM1BDQVAgIjggSmFudWFyeSAyMDE4ICIKLS5TSCBOQU1FCi1wY2FwX29wZW5fb2ZmbGluZSwgcGNhcF9vcGVuX29mZmxpbmVfd2l0aF90c3RhbXBfcHJlY2lzaW9uLAotcGNhcF9mb3Blbl9vZmZsaW5lLCBwY2FwX2ZvcGVuX29mZmxpbmVfd2l0aF90c3RhbXBfcHJlY2lzaW9uIFwtIG9wZW4gYSBzYXZlZCBjYXB0dXJlIGZpbGUgZm9yIHJlYWRpbmcKLS5TSCBTWU5PUFNJUwotLm5mCi0uZnQgQgotI2luY2x1ZGUgPHBjYXAvcGNhcC5oPgotLmZ0Ci0uTFAKLS5uZgotLmZ0IEIKLWNoYXIgZXJyYnVmW1BDQVBfRVJSQlVGX1NJWkVdOwotLmZ0Ci0uTFAKLS5mdCBCCi1wY2FwX3QgKnBjYXBfb3Blbl9vZmZsaW5lKGNvbnN0IGNoYXIgKmZuYW1lLCBjaGFyICplcnJidWYpOwotcGNhcF90ICpwY2FwX29wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24oY29uc3QgY2hhciAqZm5hbWUsCi0gICAgdV9pbnQgcHJlY2lzaW9uLCBjaGFyICplcnJidWYpOwotcGNhcF90ICpwY2FwX2ZvcGVuX29mZmxpbmUoRklMRSAqZnAsIGNoYXIgKmVycmJ1Zik7Ci1wY2FwX3QgKnBjYXBfZm9wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24oRklMRSAqZnAsCi0gICAgdV9pbnQgcHJlY2lzaW9uLCBjaGFyICplcnJidWYpOwotLmZ0Ci0uZmkKLS5TSCBERVNDUklQVElPTgotLkIgcGNhcF9vcGVuX29mZmxpbmUoKQotYW5kCi0uQiBwY2FwX29wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24oKQotYXJlIGNhbGxlZCB0byBvcGVuIGEgYGBzYXZlZmlsZScnIGZvciByZWFkaW5nLgotLlBQCi0uSSBmbmFtZQotc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIG9wZW4uIFRoZSBmaWxlIGNhbiBoYXZlIHRoZSBwY2FwIGZpbGUKLWZvcm1hdCBhcyBkZXNjcmliZWQgaW4KLS5CUiBwY2FwLXNhdmVmaWxlICg1KSwKLXdoaWNoIGlzIHRoZSBmaWxlIGZvcm1hdCB1c2VkIGJ5LCBhbW9uZyBvdGhlciBwcm9ncmFtcywKLS5CUiB0Y3BkdW1wICgxKQotYW5kCi0uQlIgdGNwc2xpY2UgKDEpLAotb3IgY2FuIGhhdmUgdGhlIHBjYXBuZyBmaWxlIGZvcm1hdCwgYWx0aG91Z2ggbm90IGFsbCBwY2FwbmcgZmlsZXMgY2FuCi1iZSByZWFkLgotVGhlIG5hbWUgIi0iIGlzIGEgc3lub255bSBmb3IKLS5CUiBzdGRpbiAuCi0uUFAKLS5CIHBjYXBfb3Blbl9vZmZsaW5lX3dpdGhfdHN0YW1wX3ByZWNpc2lvbigpCi10YWtlcyBhbiBhZGRpdGlvbmFsCi0uSSBwcmVjaXNpb24KLWFyZ3VtZW50IHNwZWNpZnlpbmcgdGhlIHRpbWUgc3RhbXAgcHJlY2lzaW9uIGRlc2lyZWQ7Ci1pZgotLkIgUENBUF9UU1RBTVBfUFJFQ0lTSU9OX01JQ1JPCi1pcyBzcGVjaWZpZWQsIHBhY2tldCB0aW1lIHN0YW1wcyB3aWxsIGJlIHN1cHBsaWVkIGluIHNlY29uZHMgYW5kCi1taWNyb3NlY29uZHMsCi1hbmQgaWYKLS5CIFBDQVBfVFNUQU1QX1BSRUNJU0lPTl9OQU5PCi1pcyBzcGVjaWZpZWQsIHBhY2tldCB0aW1lIHN0YW1wcyB3aWxsIGJlIHN1cHBsaWVkIGluIHNlY29uZHMgYW5kCi1uYW5vc2Vjb25kcy4gIElmIHRoZSB0aW1lIHN0YW1wcyBpbiB0aGUgZmlsZSBkbyBub3QgaGF2ZSB0aGUgc2FtZQotcHJlY2lzaW9uIGFzIHRoZSByZXF1ZXN0ZWQgcHJlY2lzaW9uLCB0aGV5IHdpbGwgYmUgc2NhbGVkIHVwIG9yIGRvd24gYXMKLW5lY2Vzc2FyeSBiZWZvcmUgYmVpbmcgc3VwcGxpZWQuCi0uUFAKLUFsdGVybmF0aXZlbHksIHlvdSBtYXkgY2FsbAotLkIgcGNhcF9mb3Blbl9vZmZsaW5lKCkKLW9yCi0uQiBwY2FwX2ZvcGVuX29mZmxpbmVfd2l0aF90c3RhbXBfcHJlY2lzaW9uKCkKLXRvIHJlYWQgZHVtcGVkIGRhdGEgZnJvbSBhbiBleGlzdGluZyBvcGVuIHN0cmVhbQotLklSIGZwIC4KLS5CIHBjYXBfZm9wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24oKSB0YWtlcyBhbiBhZGRpdGlvbmFsCi0uSSBwcmVjaXNpb24KLWFyZ3VtZW50IGFzIGRlc2NyaWJlZCBhYm92ZS4KLU5vdGUgdGhhdCBvbiBXaW5kb3dzLCB0aGF0IHN0cmVhbSBzaG91bGQgYmUgb3BlbmVkIGluIGJpbmFyeSBtb2RlLgotLlNIIFJFVFVSTiBWQUxVRQotLkJSIHBjYXBfb3Blbl9vZmZsaW5lKCkgLAotLkJSIHBjYXBfb3Blbl9vZmZsaW5lX3dpdGhfdHN0YW1wX3ByZWNpc2lvbigpICwKLS5CUiBwY2FwX2ZvcGVuX29mZmxpbmUoKSAsCi1hbmQKLS5CIHBjYXBfZm9wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24oKQotcmV0dXJuIGEKLS5JIHBjYXBfdCAqCi1vbiBzdWNjZXNzIGFuZAotLkIgTlVMTAotb24gZmFpbHVyZS4KLUlmCi0uQiBOVUxMCi1pcyByZXR1cm5lZCwKLS5JIGVycmJ1ZgotaXMgZmlsbGVkIGluIHdpdGggYW4gYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZS4KLS5JIGVycmJ1ZgotaXMgYXNzdW1lZCB0byBiZSBhYmxlIHRvIGhvbGQgYXQgbGVhc3QKLS5CIFBDQVBfRVJSQlVGX1NJWkUKLWNoYXJzLgotLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcC1zYXZlZmlsZSg1KQpkaWZmIC0tZ2l0IGEvcGNhcF9vcGVuX29mZmxpbmUuM3BjYXAuaW4gYi9wY2FwX29wZW5fb2ZmbGluZS4zcGNhcC5pbgppbmRleCBkMGNkMTYxLi41ZTg3OGZlIDEwMDY0NAotLS0gYS9wY2FwX29wZW5fb2ZmbGluZS4zcGNhcC5pbgorKysgYi9wY2FwX29wZW5fb2ZmbGluZS4zcGNhcC5pbgpAQCAtMTcsNyArMTcsNyBAQAogLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAuXCIgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KIC5cIgotLlRIIFBDQVBfT1BFTl9PRkZMSU5FIDNQQ0FQICI4IEphbnVhcnkgMjAxOCAiCisuVEggUENBUF9PUEVOX09GRkxJTkUgM1BDQVAgIjIzIEF1Z3VzdCAyMDE4IgogLlNIIE5BTUUKIHBjYXBfb3Blbl9vZmZsaW5lLCBwY2FwX29wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24sCiBwY2FwX2ZvcGVuX29mZmxpbmUsIHBjYXBfZm9wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24gXC0gb3BlbiBhIHNhdmVkIGNhcHR1cmUgZmlsZSBmb3IgcmVhZGluZwpAQCAtNDIsOSArNDIsOSBAQAogLmZ0CiAuZmkKIC5TSCBERVNDUklQVElPTgotLkIgcGNhcF9vcGVuX29mZmxpbmUoKQorLkJSIHBjYXBfb3Blbl9vZmZsaW5lICgpCiBhbmQKLS5CIHBjYXBfb3Blbl9vZmZsaW5lX3dpdGhfdHN0YW1wX3ByZWNpc2lvbigpCisuQlIgcGNhcF9vcGVuX29mZmxpbmVfd2l0aF90c3RhbXBfcHJlY2lzaW9uICgpCiBhcmUgY2FsbGVkIHRvIG9wZW4gYSBgYHNhdmVmaWxlJycgZm9yIHJlYWRpbmcuCiAuUFAKIC5JIGZuYW1lCkBAIC02MCw3ICs2MCw3IEBACiBUaGUgbmFtZSAiLSIgaXMgYSBzeW5vbnltIGZvcgogLkJSIHN0ZGluIC4KIC5QUAotLkIgcGNhcF9vcGVuX29mZmxpbmVfd2l0aF90c3RhbXBfcHJlY2lzaW9uKCkKKy5CUiBwY2FwX29wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24gKCkKIHRha2VzIGFuIGFkZGl0aW9uYWwKIC5JIHByZWNpc2lvbgogYXJndW1lbnQgc3BlY2lmeWluZyB0aGUgdGltZSBzdGFtcCBwcmVjaXNpb24gZGVzaXJlZDsKQEAgLTc2LDIxICs3NiwyMiBAQAogbmVjZXNzYXJ5IGJlZm9yZSBiZWluZyBzdXBwbGllZC4KIC5QUAogQWx0ZXJuYXRpdmVseSwgeW91IG1heSBjYWxsCi0uQiBwY2FwX2ZvcGVuX29mZmxpbmUoKQorLkJSIHBjYXBfZm9wZW5fb2ZmbGluZSAoKQogb3IKLS5CIHBjYXBfZm9wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24oKQorLkJSIHBjYXBfZm9wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24gKCkKIHRvIHJlYWQgZHVtcGVkIGRhdGEgZnJvbSBhbiBleGlzdGluZyBvcGVuIHN0cmVhbQogLklSIGZwIC4KLS5CIHBjYXBfZm9wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24oKSB0YWtlcyBhbiBhZGRpdGlvbmFsCisuQlIgcGNhcF9mb3Blbl9vZmZsaW5lX3dpdGhfdHN0YW1wX3ByZWNpc2lvbiAoKQordGFrZXMgYW4gYWRkaXRpb25hbAogLkkgcHJlY2lzaW9uCiBhcmd1bWVudCBhcyBkZXNjcmliZWQgYWJvdmUuCiBOb3RlIHRoYXQgb24gV2luZG93cywgdGhhdCBzdHJlYW0gc2hvdWxkIGJlIG9wZW5lZCBpbiBiaW5hcnkgbW9kZS4KIC5TSCBSRVRVUk4gVkFMVUUKLS5CUiBwY2FwX29wZW5fb2ZmbGluZSgpICwKLS5CUiBwY2FwX29wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24oKSAsCi0uQlIgcGNhcF9mb3Blbl9vZmZsaW5lKCkgLAorLkJSIHBjYXBfb3Blbl9vZmZsaW5lICgpLAorLkJSIHBjYXBfb3Blbl9vZmZsaW5lX3dpdGhfdHN0YW1wX3ByZWNpc2lvbiAoKSwKKy5CUiBwY2FwX2ZvcGVuX29mZmxpbmUgKCksCiBhbmQKLS5CIHBjYXBfZm9wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24oKQorLkJSIHBjYXBfZm9wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24gKCkKIHJldHVybiBhCiAuSSBwY2FwX3QgKgogb24gc3VjY2VzcyBhbmQKQEAgLTEwNSw1ICsxMDYsMTIgQEAKIGlzIGFzc3VtZWQgdG8gYmUgYWJsZSB0byBob2xkIGF0IGxlYXN0CiAuQiBQQ0FQX0VSUkJVRl9TSVpFCiBjaGFycy4KKy5TSCBCQUNLV0FSRCBDT01QQVRJQklMSVRZCisuQlIgcGNhcF9vcGVuX29mZmxpbmVfd2l0aF90c3RhbXBfcHJlY2lzaW9uICgpCithbmQKKy5CUiBwY2FwX2ZvcGVuX29mZmxpbmVfd2l0aF90c3RhbXBfcHJlY2lzaW9uICgpCitiZWNhbWUgYXZhaWxhYmxlIGluIGxpYnBjYXAgcmVsZWFzZSAxLjUuMS4gIEluIHByZXZpb3VzIHJlbGVhc2VzLCB0aW1lCitzdGFtcHMgZnJvbSBhIHNhdmVmaWxlIGFyZSBhbHdheXMgZ2l2ZW4gaW4gc2Vjb25kcyBhbmQgbWljcm9zZWNvbmRzLgogLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcC1zYXZlZmlsZShATUFOX0ZJTEVfRk9STUFUU0ApCisuQlIgcGNhcCAoM1BDQVApLAorLkJSIHBjYXAtc2F2ZWZpbGUgKEBNQU5fRklMRV9GT1JNQVRTQCkKZGlmZiAtLWdpdCBhL3BjYXBfc2V0X2J1ZmZlcl9zaXplLjNwY2FwIGIvcGNhcF9zZXRfYnVmZmVyX3NpemUuM3BjYXAKaW5kZXggNjg0ZjczOS4uNDk0OTJjMCAxMDA2NDQKLS0tIGEvcGNhcF9zZXRfYnVmZmVyX3NpemUuM3BjYXAKKysrIGIvcGNhcF9zZXRfYnVmZmVyX3NpemUuM3BjYXAKQEAgLTMxLDE1ICszMSwxOSBAQAogLmZ0CiAuZmkKIC5TSCBERVNDUklQVElPTgotLkIgcGNhcF9zZXRfYnVmZmVyX3NpemUoKQorLkJSIHBjYXBfc2V0X2J1ZmZlcl9zaXplICgpCiBzZXRzIHRoZSBidWZmZXIgc2l6ZSB0aGF0IHdpbGwgYmUgdXNlZCBvbiBhIGNhcHR1cmUgaGFuZGxlIHdoZW4KIHRoZSBoYW5kbGUgaXMgYWN0aXZhdGVkIHRvCiAuSVIgYnVmZmVyX3NpemUgLAogd2hpY2ggaXMgaW4gdW5pdHMgb2YgYnl0ZXMuCiAuU0ggUkVUVVJOIFZBTFVFCi0uQiBwY2FwX3NldF9idWZmZXJfc2l6ZSgpCi1yZXR1cm5zIDAgb24gc3VjY2VzcyBvcgorLkJSIHBjYXBfc2V0X2J1ZmZlcl9zaXplICgpCityZXR1cm5zCisuQiAwCitvbiBzdWNjZXNzIG9yCiAuQiBQQ0FQX0VSUk9SX0FDVElWQVRFRAogaWYgY2FsbGVkIG9uIGEgY2FwdHVyZSBoYW5kbGUgdGhhdCBoYXMgYmVlbiBhY3RpdmF0ZWQuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApLCBwY2FwX2NyZWF0ZSgzUENBUCksIHBjYXBfYWN0aXZhdGUoM1BDQVApCisuQlIgcGNhcCAoM1BDQVApLAorLkJSIHBjYXBfY3JlYXRlICgzUENBUCksCisuQlIgcGNhcF9hY3RpdmF0ZSAoM1BDQVApCmRpZmYgLS1naXQgYS9wY2FwX3NldF9kYXRhbGluay4zcGNhcCBiL3BjYXBfc2V0X2RhdGFsaW5rLjNwY2FwCmluZGV4IDI0ZDU3YTUuLjE0ZTlkMjAgMTAwNjQ0Ci0tLSBhL3BjYXBfc2V0X2RhdGFsaW5rLjNwY2FwCisrKyBiL3BjYXBfc2V0X2RhdGFsaW5rLjNwY2FwCkBAIC0xNyw3ICsxNyw3IEBACiAuXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKIC5cIiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogLlwiCi0uVEggUENBUF9TRVRfREFUQUxJTksgM1BDQVAgIjMgSmFudWFyeSAyMDE0IgorLlRIIFBDQVBfU0VUX0RBVEFMSU5LIDNQQ0FQICIyNSBKdWx5IDIwMTgiCiAuU0ggTkFNRQogcGNhcF9zZXRfZGF0YWxpbmsgXC0gc2V0IHRoZSBsaW5rLWxheWVyIGhlYWRlciB0eXBlIHRvIGJlIHVzZWQgYnkgYQogY2FwdHVyZSBkZXZpY2UKQEAgLTMyLDIwICszMiwyNSBAQAogLmZ0CiAuZmkKIC5TSCBERVNDUklQVElPTgotLkIgcGNhcF9zZXRfZGF0YWxpbmsoKQorLkJSIHBjYXBfc2V0X2RhdGFsaW5rICgpCiBpcyB1c2VkIHRvIHNldCB0aGUgY3VycmVudCBsaW5rLWxheWVyIGhlYWRlciB0eXBlIG9mIHRoZSBwY2FwIGRlc2NyaXB0b3IKIHRvIHRoZSB0eXBlIHNwZWNpZmllZCBieQogLklSIGRsdCAuCiAuU0ggUkVUVVJOIFZBTFVFCi0uQiBwY2FwX3NldF9kYXRhbGluaygpCi1yZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgXC0xIG9uIGZhaWx1cmUuCi1JZiBcLTEgaXMgcmV0dXJuZWQsCi0uQiBwY2FwX2dldGVycigpCisuQlIgcGNhcF9zZXRfZGF0YWxpbmsgKCkKK3JldHVybnMKKy5CIDAKK29uIHN1Y2Nlc3MgYW5kCisuQiBQQ0FQX0VSUk9SCitvbiBmYWlsdXJlLiBJZgorLkIgUENBUF9FUlJPUgoraXMgcmV0dXJuZWQsCisuQlIgcGNhcF9nZXRlcnIgKDNQQ0FQKQogb3IKLS5CIHBjYXBfcGVycm9yKCkKKy5CUiBwY2FwX3BlcnJvciAoM1BDQVApCiBtYXkgYmUgY2FsbGVkIHdpdGgKIC5JIHAKIGFzIGFuIGFyZ3VtZW50IHRvIGZldGNoIG9yIGRpc3BsYXkgdGhlIGVycm9yIHRleHQuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApLCBwY2FwX2dldGVycigzUENBUCksCi1wY2FwX2RhdGFsaW5rX25hbWVfdG9fdmFsKDNQQ0FQKQorLkJSIHBjYXAgKDNQQ0FQKSwKKy5CUiBwY2FwX2RhdGFsaW5rX25hbWVfdG9fdmFsICgzUENBUCkKZGlmZiAtLWdpdCBhL3BjYXBfc2V0X2ltbWVkaWF0ZV9tb2RlLjNwY2FwIGIvcGNhcF9zZXRfaW1tZWRpYXRlX21vZGUuM3BjYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzYWQyNDMuLjAwMDAwMDAKLS0tIGEvcGNhcF9zZXRfaW1tZWRpYXRlX21vZGUuM3BjYXAKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0uXCIKLS5cIiBDb3B5cmlnaHQgKGMpIDE5OTQsIDE5OTYsIDE5OTcKLS5cIglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0OiAoMSkgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9ucwotLlwiIHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5LCAoMikKLS5cIiBkaXN0cmlidXRpb25zIGluY2x1ZGluZyBiaW5hcnkgY29kZSBpbmNsdWRlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAotLlwiIHRoaXMgcGFyYWdyYXBoIGluIGl0cyBlbnRpcmV0eSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvciBvdGhlciBtYXRlcmlhbHMKLS5cIiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24sIGFuZCAoMykgYWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nCi0uXCIgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLS5cIiBgYFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwKLS5cIiBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IGFuZCBpdHMgY29udHJpYnV0b3JzLicnIE5laXRoZXIgdGhlIG5hbWUgb2YKLS5cIiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZQotLlwiIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgotLlwiIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0uXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS5cIiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotLlwiCi0uVEggUENBUF9TRVRfSU1NRURJQVRFX01PREUgM1BDQVAgIjUgRGVjZW1iZXIgMjAxMyIKLS5TSCBOQU1FCi1wY2FwX3NldF9pbW1lZGlhdGVfbW9kZSBcLSBzZXQgaW1tZWRpYXRlIG1vZGUgZm9yIGEgbm90LXlldC1hY3RpdmF0ZWQgY2FwdHVyZQotaGFuZGxlCi0uU0ggU1lOT1BTSVMKLS5uZgotLmZ0IEIKLSNpbmNsdWRlIDxwY2FwL3BjYXAuaD4KLS5MUAotLmZ0IEIKLWludCBwY2FwX3NldF9pbW1lZGlhdGVfbW9kZShwY2FwX3QgKnAsIGludCBpbW1lZGlhdGVfbW9kZSk7Ci0uZnQKLS5maQotLlNIIERFU0NSSVBUSU9OCi0uQiBwY2FwX3NldF9pbW1lZGlhdGVfbW9kZSgpCi1zZXRzIHdoZXRoZXIgaW1tZWRpYXRlIG1vZGUgc2hvdWxkIGJlIHNldCBvbiBhIGNhcHR1cmUgaGFuZGxlIHdoZW4KLXRoZSBoYW5kbGUgaXMgYWN0aXZhdGVkLgotSWYKLS5JIGltbWVkaWF0ZV9tb2RlCi1pcyBub24temVybywgaW1tZWRpYXRlIG1vZGUgd2lsbCBiZSBzZXQsIG90aGVyd2lzZSBpdCB3aWxsIG5vdCBiZSBzZXQuCi0uU0ggUkVUVVJOIFZBTFVFCi0uQiBwY2FwX3NldF9pbW1lZGlhdGVfbW9kZSgpCi1yZXR1cm5zIDAgb24gc3VjY2VzcyBvcgotLkIgUENBUF9FUlJPUl9BQ1RJVkFURUQKLWlmIGNhbGxlZCBvbiBhIGNhcHR1cmUgaGFuZGxlIHRoYXQgaGFzIGJlZW4gYWN0aXZhdGVkLgotLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcF9jcmVhdGUoM1BDQVApLCBwY2FwX2FjdGl2YXRlKDNQQ0FQKQpkaWZmIC0tZ2l0IGEvcGNhcF9zZXRfaW1tZWRpYXRlX21vZGUuM3BjYXAuaW4gYi9wY2FwX3NldF9pbW1lZGlhdGVfbW9kZS4zcGNhcC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDkzZDU1Ci0tLSAvZGV2L251bGwKKysrIGIvcGNhcF9zZXRfaW1tZWRpYXRlX21vZGUuM3BjYXAuaW4KQEAgLTAsMCArMSw5OSBAQAorLlwiCisuXCIgQ29weXJpZ2h0IChjKSAxOTk0LCAxOTk2LCAxOTk3CisuXCIJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisuXCIKKy5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdDogKDEpIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbnMKKy5cIiByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGluIGl0cyBlbnRpcmV0eSwgKDIpCisuXCIgZGlzdHJpYnV0aW9ucyBpbmNsdWRpbmcgYmluYXJ5IGNvZGUgaW5jbHVkZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQKKy5cIiB0aGlzIHBhcmFncmFwaCBpbiBpdHMgZW50aXJldHkgaW4gdGhlIGRvY3VtZW50YXRpb24gb3Igb3RoZXIgbWF0ZXJpYWxzCisuXCIgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLCBhbmQgKDMpIGFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZworLlwiIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisuXCIgYGBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsCisuXCIgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4nJyBOZWl0aGVyIHRoZSBuYW1lIG9mCisuXCIgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UKKy5cIiBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKy5cIiB3cml0dGVuIHBlcm1pc3Npb24uCisuXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisuXCIgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKy5cIgorLlRIIFBDQVBfU0VUX0lNTUVESUFURV9NT0RFIDNQQ0FQICIyMyBBdWd1c3QgMjAxOCIKKy5TSCBOQU1FCitwY2FwX3NldF9pbW1lZGlhdGVfbW9kZSBcLSBzZXQgaW1tZWRpYXRlIG1vZGUgZm9yIGEgbm90LXlldC1hY3RpdmF0ZWQgY2FwdHVyZQoraGFuZGxlCisuU0ggU1lOT1BTSVMKKy5uZgorLmZ0IEIKKyNpbmNsdWRlIDxwY2FwL3BjYXAuaD4KKy5MUAorLmZ0IEIKK2ludCBwY2FwX3NldF9pbW1lZGlhdGVfbW9kZShwY2FwX3QgKnAsIGludCBpbW1lZGlhdGVfbW9kZSk7CisuZnQKKy5maQorLlNIIERFU0NSSVBUSU9OCisuQlIgcGNhcF9zZXRfaW1tZWRpYXRlX21vZGUgKCkKK3NldHMgd2hldGhlciBpbW1lZGlhdGUgbW9kZSBzaG91bGQgYmUgc2V0IG9uIGEgY2FwdHVyZSBoYW5kbGUgd2hlbgordGhlIGhhbmRsZSBpcyBhY3RpdmF0ZWQuICBJbiBpbW1lZGlhdGUgbW9kZSwgcGFja2V0cyBhcmUgYWx3YXlzCitkZWxpdmVyZWQgYXMgc29vbiBhcyB0aGV5IGFycml2ZSwgd2l0aCBubyBidWZmZXJpbmcuCitJZgorLkkgaW1tZWRpYXRlX21vZGUKK2lzIG5vbi16ZXJvLCBpbW1lZGlhdGUgbW9kZSB3aWxsIGJlIHNldCwgb3RoZXJ3aXNlIGl0IHdpbGwgbm90IGJlIHNldC4KKy5TSCBSRVRVUk4gVkFMVUUKKy5CUiBwY2FwX3NldF9pbW1lZGlhdGVfbW9kZSAoKQorcmV0dXJucworLkIgMAorb24gc3VjY2VzcyBvcgorLkIgUENBUF9FUlJPUl9BQ1RJVkFURUQKK2lmIGNhbGxlZCBvbiBhIGNhcHR1cmUgaGFuZGxlIHRoYXQgaGFzIGJlZW4gYWN0aXZhdGVkLgorLlNIIEJBQ0tXQVJEIENPTVBBVElCSUxJVFkKKy5QUAorVGhpcyBmdW5jdGlvbiBiZWNhbWUgYXZhaWxhYmxlIGluIGxpYnBjYXAgcmVsZWFzZSAxLjUuMC4gIEluIHByZXZpb3VzCityZWxlYXNlcywgaWYgaW1tZWRpYXRlIGRlbGl2ZXJ5IG9mIHBhY2tldHMgaXMgcmVxdWlyZWQ6CisuSVAKK29uIEZyZWVCU0QsIE5ldEJTRCwgT3BlbkJTRCwgRHJhZ29uRmx5IEJTRCwgbWFjT1MsIGFuZCBTb2xhcmlzIDExLAoraW1tZWRpYXRlIG1vZGUgbXVzdCBiZSB0dXJuZWQgb24gd2l0aCBhCisuQiBCSU9DSU1NRURJQVRFCisuQlIgaW9jdGwgKDIpLAorYXMgZG9jdW1lbnRlZCBpbgorLkJSIGJwZiAoQE1BTl9ERVZJQ0VTQCksCitvbiB0aGUgZGVzY3JpcHRvciByZXR1cm5lZCBieQorLkJSIHBjYXBfZmlsZW5vICgzUENBUCksCithZnRlcgorLkJSIHBjYXBfYWN0aXZhdGUgKDNQQ0FQKQoraXMgY2FsbGVkOworLklQCitvbiBTb2xhcmlzIDEwIGFuZCBlYXJsaWVyIHZlcnNpb25zIG9mIFNvbGFyaXMsIGltbWVkaWF0ZSBtb2RlIG11c3QgYmUKK3R1cm5lZCBvbiBieSB1c2luZyBhIHJlYWQgdGltZW91dCBvZiAwIHdoZW4gb3BlbmluZyB0aGUgZGV2aWNlICh0aGlzCit3aWxsIG5vdCBwcm92aWRlIGltbWVkaWF0ZSBkZWxpdmVyeSBvZiBwYWNrZXRzIG9uIG90aGVyIHBsYXRmb3Jtcywgc28KK2Rvbid0IGFzc3VtZSBpdCdzIHN1ZmZpY2llbnQpOworLklQCitvbiBEaWdpdGFsIFVOSVgvVHJ1NjQgVU5JWCwgaW1tZWRpYXRlIG1vZGUgbXVzdCBiZSB0dXJuZWQgb24gYnkgZG9pbmcgYQorLkIgQklPQ01CSUMKKy5CUiBpb2N0bCAsCithcyBkb2N1bWVudGVkIGluCisuQlIgcGFja2V0ZmlsdGVyICg3KSwKK3RvIGNsZWFyIHRoZQorLkIgRU5CQVRDSAorZmxhZyBvbiB0aGUgZGVzY3JpcHRvciByZXR1cm5lZCBieQorLkJSIHBjYXBfZmlsZW5vICgzUENBUCksCithZnRlcgorLkJSIHBjYXBfYWN0aXZhdGUgKDNQQ0FQKQoraXMgY2FsbGVkOworLklQCitvbiBXaW5kb3dzLCBpbW1lZGlhdGUgbW9kZSBtdXN0IGJlIHR1cm5lZCBvbiBieSBjYWxsaW5nCisuQlIgcGNhcF9zZXRtaW50b2NvcHkgKCkKK3dpdGggYSBzaXplIG9mIDAuCisuUFAKK09uIExpbnV4LCB3aXRoIHByZXZpb3VzIHJlbGVhc2VzIG9mIGxpYnBjYXAsIGNhcHR1cmUgZGV2aWNlcyBhcmUgYWx3YXlzCitpbiBpbW1lZGlhdGUgbW9kZTsgaG93ZXZlciwgaW4gMS41LjAgYW5kIGxhdGVyLCB0aGV5IGFyZSwgYnkgZGVmYXVsdCwKKy5CIG5vdAoraW4gaW1tZWRpYXRlIG1vZGUsIHNvIGlmCisuQlIgcGNhcF9zZXRfaW1tZWRpYXRlX21vZGUgKCkKK2lzIGF2YWlsYWJsZSwgaXQgc2hvdWxkIGJlIHVzZWQuCisuUFAKK09uIG90aGVyIHBsYXRmb3JtcywgY2FwdHVyZSBkZXZpY2VzIGFyZSBhbHdheXMgaW4gaW1tZWRpYXRlIG1vZGUuCisuU0ggU0VFIEFMU08KKy5CUiBwY2FwICgzUENBUCksCisuQlIgcGNhcF9jcmVhdGUgKDNQQ0FQKSwKKy5CUiBwY2FwX2FjdGl2YXRlICgzUENBUCkKZGlmZiAtLWdpdCBhL3BjYXBfc2V0X3Byb21pc2MuM3BjYXAgYi9wY2FwX3NldF9wcm9taXNjLjNwY2FwCmluZGV4IGZjZDc5N2EuLmNmYzZjZGQgMTAwNjQ0Ci0tLSBhL3BjYXBfc2V0X3Byb21pc2MuM3BjYXAKKysrIGIvcGNhcF9zZXRfcHJvbWlzYy4zcGNhcApAQCAtMzEsMTYgKzMxLDIwIEBACiAuZnQKIC5maQogLlNIIERFU0NSSVBUSU9OCi0uQiBwY2FwX3NldF9wcm9taXNjKCkKKy5CUiBwY2FwX3NldF9wcm9taXNjICgpCiBzZXRzIHdoZXRoZXIgcHJvbWlzY3VvdXMgbW9kZSBzaG91bGQgYmUgc2V0IG9uIGEgY2FwdHVyZSBoYW5kbGUgd2hlbgogdGhlIGhhbmRsZSBpcyBhY3RpdmF0ZWQuCiBJZgogLkkgcHJvbWlzYwogaXMgbm9uLXplcm8sIHByb21pc2N1b3VzIG1vZGUgd2lsbCBiZSBzZXQsIG90aGVyd2lzZSBpdCB3aWxsIG5vdCBiZSBzZXQuCiAuU0ggUkVUVVJOIFZBTFVFCi0uQiBwY2FwX3NldF9wcm9taXNjKCkKLXJldHVybnMgMCBvbiBzdWNjZXNzIG9yCisuQlIgcGNhcF9zZXRfcHJvbWlzYyAoKQorcmV0dXJucworLkIgMAorb24gc3VjY2VzcyBvcgogLkIgUENBUF9FUlJPUl9BQ1RJVkFURUQKIGlmIGNhbGxlZCBvbiBhIGNhcHR1cmUgaGFuZGxlIHRoYXQgaGFzIGJlZW4gYWN0aXZhdGVkLgogLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcF9jcmVhdGUoM1BDQVApLCBwY2FwX2FjdGl2YXRlKDNQQ0FQKQorLkJSIHBjYXAgKDNQQ0FQKSwKKy5CUiBwY2FwX2NyZWF0ZSAoM1BDQVApLAorLkJSIHBjYXBfYWN0aXZhdGUgKDNQQ0FQKQpkaWZmIC0tZ2l0IGEvcGNhcF9zZXRfcHJvdG9jb2xfbGludXguM3BjYXAgYi9wY2FwX3NldF9wcm90b2NvbF9saW51eC4zcGNhcAppbmRleCA0MGViOGQyLi5hODkxZDc0IDEwMDY0NAotLS0gYS9wY2FwX3NldF9wcm90b2NvbF9saW51eC4zcGNhcAorKysgYi9wY2FwX3NldF9wcm90b2NvbF9saW51eC4zcGNhcApAQCAtMTcsNyArMTcsNyBAQAogLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAuXCIgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KIC5cIgotLlRIIFBDQVBfU0VUX1BST1RPQ09MX0xJTlVYIDNQQ0FQICIyNCBBdWd1c3QgMjAxNyIKKy5USCBQQ0FQX1NFVF9QUk9UT0NPTF9MSU5VWCAzUENBUCAiMjIgQXVndXN0IDIwMTgiCiAuU0ggTkFNRQogcGNhcF9zZXRfcHJvdG9jb2xfbGludXggXC0gc2V0IGNhcHR1cmUgcHJvdG9jb2wgZm9yIGEgbm90LXlldC1hY3RpdmF0ZWQKIGNhcHR1cmUgaGFuZGxlCkBAIC0zMiw3ICszMiw3IEBACiAuZmkKIC5TSCBERVNDUklQVElPTgogT24gbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlcyBvbiBMaW51eCwKLS5CIHBjYXBfc2V0X3Byb3RvY29sX2xpbnV4KCkKKy5CUiBwY2FwX3NldF9wcm90b2NvbF9saW51eCAoKQogc2V0cyB0aGUgcHJvdG9jb2wgdG8gYmUgdXNlZCBpbiB0aGUKIC5CUiBzb2NrZXQgKDIpCiBjYWxsIHRvIGNyZWF0ZSBhIGNhcHR1cmUgc29ja2V0IHdoZW4gdGhlIGhhbmRsZSBpcyBhY3RpdmF0ZWQuICBUaGUKQEAgLTQ4LDIwICs0OCwyNSBAQAogLkxQCiBJdCBzaG91bGQgbm90IGJlIHVzZWQgaW4gcG9ydGFibGUgY29kZTsgaW5zdGVhZCwgYSBmaWx0ZXIgc2hvdWxkIGJlCiBzcGVjaWZpZWQgd2l0aAotLkJSIHBjYXBfc2V0ZmlsdGVyKCkgLgorLkJSIHBjYXBfc2V0ZmlsdGVyICgzUENBUCkuCiAuTFAKIElmIGEgZ2l2ZW4gbmV0d29yayBpbnRlcmZhY2UgcHJvdmlkZXMgYSBzdGFuZGFyZCBsaW5rLWxheWVyIGhlYWRlciwgd2l0aAogYSBzdGFuZGFyZCBwYWNrZXQgdHlwZSwgYnV0IHByb3ZpZGVzIHNvbWUgcGFja2V0IHR5cGVzIHdpdGggYSBkaWZmZXJlbnQKIHNvY2tldC1sYXllciBwcm90b2NvbCB0eXBlIGZyb20gdGhlIG9uZSBpbiB0aGUgbGluay1sYXllciBoZWFkZXIsIHRoYXQKIHBhY2tldCB0eXBlIGNhbm5vdCBiZSBmaWx0ZXJlZCB3aXRoIGEgZmlsdGVyIHNwZWNpZmllZCB3aXRoCi0uQiBwY2FwX3NldGZpbHRlcigpCisuQlIgcGNhcF9zZXRmaWx0ZXIgKCkKIGJ1dCBjYW4gYmUgZmlsdGVyZWQgYnkgc3BlY2lmeWluZyB0aGUgc29ja2V0LWxheWVyIHByb3RvY29sIHR5cGUgdXNpbmcKLS5CUiBwY2FwX3NldF9wcm90b2NvbF9saW51eCgpIC4KKy5CUiBwY2FwX3NldF9wcm90b2NvbF9saW51eCAoKS4KIC5TSCBSRVRVUk4gVkFMVUUKLS5CIHBjYXBfc2V0X3Byb3RvY29sX2xpbnV4KCkKLXJldHVybnMgMCBvbiBzdWNjZXNzIG9yCisuQlIgcGNhcF9zZXRfcHJvdG9jb2xfbGludXggKCkKK3JldHVybnMKKy5CIDAKK29uIHN1Y2Nlc3Mgb3IKIC5CIFBDQVBfRVJST1JfQUNUSVZBVEVECiBpZiBjYWxsZWQgb24gYSBjYXB0dXJlIGhhbmRsZSB0aGF0IGhhcyBiZWVuIGFjdGl2YXRlZC4KKy5TSCBCQUNLV0FSRCBDT01QQVRJQklMSVRZCitUaGlzIGZ1bmN0aW9uIGJlY2FtZSBhdmFpbGFibGUgaW4gbGlicGNhcCByZWxlYXNlIDEuOS4wLgogLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcF9jcmVhdGUoM1BDQVApLCBwY2FwX2FjdGl2YXRlKDNQQ0FQKSwgc29ja2V0KDIpLAotcGNhcF9zZXRmaWx0ZXIoM1BDQVApCisuQlIgcGNhcCAoM1BDQVApLAorLkJSIHBjYXBfY3JlYXRlICgzUENBUCksCisuQlIgcGNhcF9hY3RpdmF0ZSAoM1BDQVApCmRpZmYgLS1naXQgYS9wY2FwX3NldF9yZm1vbi4zcGNhcCBiL3BjYXBfc2V0X3JmbW9uLjNwY2FwCmluZGV4IDY5MTUxOGEuLjJiMTA0YzIgMTAwNjQ0Ci0tLSBhL3BjYXBfc2V0X3JmbW9uLjNwY2FwCisrKyBiL3BjYXBfc2V0X3JmbW9uLjNwY2FwCkBAIC0zMSwxNyArMzEsMjEgQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfc2V0X3JmbW9uKCkKKy5CUiBwY2FwX3NldF9yZm1vbiAoKQogc2V0cyB3aGV0aGVyIG1vbml0b3IgbW9kZSBzaG91bGQgYmUgc2V0IG9uIGEgY2FwdHVyZSBoYW5kbGUgd2hlbgogdGhlIGhhbmRsZSBpcyBhY3RpdmF0ZWQuCiBJZgogLkkgcmZtb24KIGlzIG5vbi16ZXJvLCBtb25pdG9yIG1vZGUgd2lsbCBiZSBzZXQsIG90aGVyd2lzZSBpdCB3aWxsIG5vdCBiZSBzZXQuCiAuU0ggUkVUVVJOIFZBTFVFCi0uQiBwY2FwX3NldF9yZm1vbigpCi1yZXR1cm5zIDAgb24gc3VjY2VzcyBvcgorLkJSIHBjYXBfc2V0X3JmbW9uICgpCityZXR1cm5zCisuQiAwCitvbiBzdWNjZXNzIG9yCiAuQiBQQ0FQX0VSUk9SX0FDVElWQVRFRAogaWYgY2FsbGVkIG9uIGEgY2FwdHVyZSBoYW5kbGUgdGhhdCBoYXMgYmVlbiBhY3RpdmF0ZWQuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApLCBwY2FwX2NyZWF0ZSgzUENBUCksIHBjYXBfYWN0aXZhdGUoM1BDQVApLAotcGNhcF9jYW5fc2V0X3JmbW9uKDNQQ0FQKQorLkJSIHBjYXAgKDNQQ0FQKSwKKy5CUiBwY2FwX2NyZWF0ZSAoM1BDQVApLAorLkJSIHBjYXBfYWN0aXZhdGUgKDNQQ0FQKSwKKy5CUiBwY2FwX2Nhbl9zZXRfcmZtb24gKDNQQ0FQKQpkaWZmIC0tZ2l0IGEvcGNhcF9zZXRfc25hcGxlbi4zcGNhcCBiL3BjYXBfc2V0X3NuYXBsZW4uM3BjYXAKaW5kZXggNDRlYjE1NC4uZTNhY2ZmMSAxMDA2NDQKLS0tIGEvcGNhcF9zZXRfc25hcGxlbi4zcGNhcAorKysgYi9wY2FwX3NldF9zbmFwbGVuLjNwY2FwCkBAIC0zMSwxNCArMzEsMTggQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfc2V0X3NuYXBsZW4oKQorLkJSIHBjYXBfc2V0X3NuYXBsZW4gKCkKIHNldHMgdGhlIHNuYXBzaG90IGxlbmd0aCB0byBiZSB1c2VkIG9uIGEgY2FwdHVyZSBoYW5kbGUgd2hlbiB0aGUgaGFuZGxlCiBpcyBhY3RpdmF0ZWQgdG8KIC5JUiBzbmFwbGVuIC4KIC5TSCBSRVRVUk4gVkFMVUUKLS5CIHBjYXBfc2V0X3NuYXBsZW4oKQotcmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IKKy5CUiBwY2FwX3NldF9zbmFwbGVuICgpCityZXR1cm5zCisuQiAwCitvbiBzdWNjZXNzIG9yCiAuQiBQQ0FQX0VSUk9SX0FDVElWQVRFRAogaWYgY2FsbGVkIG9uIGEgY2FwdHVyZSBoYW5kbGUgdGhhdCBoYXMgYmVlbiBhY3RpdmF0ZWQuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApLCBwY2FwX2NyZWF0ZSgzUENBUCksIHBjYXBfYWN0aXZhdGUoM1BDQVApCisuQlIgcGNhcCAoM1BDQVApLAorLkJSIHBjYXBfY3JlYXRlICgzUENBUCksCisuQlIgcGNhcF9hY3RpdmF0ZSAoM1BDQVApCmRpZmYgLS1naXQgYS9wY2FwX3NldF90aW1lb3V0LjNwY2FwIGIvcGNhcF9zZXRfdGltZW91dC4zcGNhcAppbmRleCBjYWNmNjAzLi5kOTA5YjJjIDEwMDY0NAotLS0gYS9wY2FwX3NldF90aW1lb3V0LjNwY2FwCisrKyBiL3BjYXBfc2V0X3RpbWVvdXQuM3BjYXAKQEAgLTMxLDcgKzMxLDcgQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfc2V0X3RpbWVvdXQoKQorLkJSIHBjYXBfc2V0X3RpbWVvdXQgKCkKIHNldHMgdGhlIHBhY2tldCBidWZmZXIgdGltZW91dCB0aGF0IHdpbGwgYmUgdXNlZCBvbiBhIGNhcHR1cmUgaGFuZGxlCiB3aGVuIHRoZSBoYW5kbGUgaXMgYWN0aXZhdGVkIHRvCiAuSVIgdG9fbXMgLApAQCAtNDQsMTAgKzQ0LDEzIEBACiByZWNvbW1lbmQgYWx3YXlzIHNldHRpbmcgdGhlIHRpbWVvdXQgdG8gYSBub24temVybyB2YWx1ZSB1bmxlc3MKIGltbWVkaWF0ZSBtb2RlIGlzIHNldCwgaW4gd2hpY2ggY2FzZSB0aGUgdGltZW91dCBoYXMgbm8gZWZmZWN0LgogLlNIIFJFVFVSTiBWQUxVRQotLkIgcGNhcF9zZXRfdGltZW91dCgpCi1yZXR1cm5zIDAgb24gc3VjY2VzcyBvcgorLkJSIHBjYXBfc2V0X3RpbWVvdXQgKCkKK3JldHVybnMKKy5CIDAKK29uIHN1Y2Nlc3Mgb3IKIC5CIFBDQVBfRVJST1JfQUNUSVZBVEVECiBpZiBjYWxsZWQgb24gYSBjYXB0dXJlIGhhbmRsZSB0aGF0IGhhcyBiZWVuIGFjdGl2YXRlZC4KIC5TSCBTRUUgQUxTTwotcGNhcCgzUENBUCksIHBjYXBfY3JlYXRlKDNQQ0FQKSwgcGNhcF9hY3RpdmF0ZSgzUENBUCksCi1cJXBjYXBfc2V0X2ltbWVkaWF0ZV9tb2RlKDNQQ0FQKQorLkJSIHBjYXBfY3JlYXRlICgzUENBUCksCisuQlIgcGNhcF9hY3RpdmF0ZSAoM1BDQVApLAorLkJSIFwlcGNhcF9zZXRfaW1tZWRpYXRlX21vZGUgKDNQQ0FQKQpkaWZmIC0tZ2l0IGEvcGNhcF9zZXRfdHN0YW1wX3ByZWNpc2lvbi4zcGNhcCBiL3BjYXBfc2V0X3RzdGFtcF9wcmVjaXNpb24uM3BjYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3M2FhMzIuLjAwMDAwMDAKLS0tIGEvcGNhcF9zZXRfdHN0YW1wX3ByZWNpc2lvbi4zcGNhcAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS5cIkNvcHlyaWdodCAoYykgMjAxMywgTWljaGFsIFNla2xldGFyCi0uXCJBbGwgcmlnaHRzIHJlc2VydmVkLgotLlwiCi0uXCJSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLlwiYXJlIG1ldDoKLS5cIgotLlwiICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0uXCIgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotLlwiICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0uXCIgICAgIGRpc3RyaWJ1dGlvbi4KLS5cIiAgMy4gVGhlIG5hbWVzIG9mIHRoZSBhdXRob3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKLS5cIiAgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgotLlwiICAgICB3cml0dGVuIHBlcm1pc3Npb24uCi0uXCIKLS5cIlRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCi0uXCJJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAotLlwiV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotCi0uVEggUENBUF9TRVRfVFNUQU1QX1BSRUNJU0lPTiAzUENBUCAiNSBGZWJydWFyeSAyMDE1IgotLlNIIE5BTUUKLXBjYXBfc2V0X3RzdGFtcF9wcmVjaXNpb24gXC0gc2V0IHRoZSB0aW1lIHN0YW1wIHByZWNpc2lvbiByZXR1cm5lZCBpbgotY2FwdHVyZXMKLS5TSCBTWU5PUFNJUwotLm5mCi0uZnQgQgotI2luY2x1ZGUgPHBjYXAvcGNhcC5oPgotLmZ0Ci0uTFAKLS5mdCBCCi1pbnQgcGNhcF9zZXRfdHN0YW1wX3ByZWNpc2lvbihwY2FwX3QgKnAsIGludCB0c3RhbXBfcHJlY2lzaW9uKTsKLS5mdAotLmZpCi0uU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfc2V0X3RzdGFtcF9wcmVjaXNpb24oKQotc2V0cyB0aGUgcHJlY2lzaW9uIG9mIHRoZSB0aW1lIHN0YW1wIGRlc2lyZWQgZm9yIHBhY2tldHMgY2FwdHVyZWQgb24gdGhlIHBjYXAKLWRlc2NyaXB0b3IgdG8gdGhlIHR5cGUgc3BlY2lmaWVkIGJ5Ci0uSVIgdHN0YW1wX3ByZWNpc2lvbiAuCi1JdCBtdXN0IGJlIGNhbGxlZCBvbiBhIHBjYXAgZGVzY3JpcHRvciBjcmVhdGVkIGJ5Ci0uQiBwY2FwX2NyZWF0ZSgpCi10aGF0IGhhcyBub3QgeWV0IGJlZW4gYWN0aXZhdGVkIGJ5Ci0uQlIgcGNhcF9hY3RpdmF0ZSgpIC4KLVR3byB0aW1lIHN0YW1wIHByZWNpc2lvbnMgYXJlIHN1cHBvcnRlZCwgbWljcm9zZWNvbmRzIGFuZCBuYW5vc2Vjb25kcy4gT25lIGNhbgotdXNlIG9wdGlvbnMKLS5CIFBDQVBfVFNUQU1QX1BSRUNJU0lPTl9NSUNSTyBhbmQKLS5CIFBDQVBfVFNUQU1QX1BSRUNJU0lPTl9OQU5PCi10byByZXF1ZXN0IGRlc2lyZWQgcHJlY2lzaW9uLiBCeSBkZWZhdWx0LCB0aW1lIHN0YW1wcyBhcmUgaW4gbWljcm9zZWNvbmRzLgotLlNIIFJFVFVSTiBWQUxVRQotLkIgcGNhcF9zZXRfdHN0YW1wX3ByZWNpc2lvbigpCi1yZXR1cm5zIDAgb24gc3VjY2VzcyBpZiB0aGUgc3BlY2lmaWVkIHRpbWUgc3RhbXAgcHJlY2lzaW9uIGlzIGV4cGVjdGVkIHRvIGJlCi1zdXBwb3J0ZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0sCi0uQiBQQ0FQX0VSUk9SX1RTVEFNUF9QUkVDSVNJT05fTk9UU1VQCi1pZiBvcGVyYXRpbmcgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgcmVxdWVzdGVkIHRpbWUgc3RhbXAgcHJlY2lzaW9uLAotLkIgUENBUF9FUlJPUl9BQ1RJVkFURUQKLWlmIGNhbGxlZCBvbiBhIGNhcHR1cmUgaGFuZGxlIHRoYXQgaGFzIGJlZW4gYWN0aXZhdGVkLgotLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwKLXBjYXBfZ2V0X3RzdGFtcF9wcmVjaXNpb24oM1BDQVApLAotcGNhcC10c3RhbXAoNykKZGlmZiAtLWdpdCBhL3BjYXBfc2V0X3RzdGFtcF9wcmVjaXNpb24uM3BjYXAuaW4gYi9wY2FwX3NldF90c3RhbXBfcHJlY2lzaW9uLjNwY2FwLmluCmluZGV4IDU3YzRlYTMuLmViNDQ5ZDUgMTAwNjQ0Ci0tLSBhL3BjYXBfc2V0X3RzdGFtcF9wcmVjaXNpb24uM3BjYXAuaW4KKysrIGIvcGNhcF9zZXRfdHN0YW1wX3ByZWNpc2lvbi4zcGNhcC5pbgpAQCAtMTksNyArMTksNyBAQAogLlwiSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKIC5cIldBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KIAotLlRIIFBDQVBfU0VUX1RTVEFNUF9QUkVDSVNJT04gM1BDQVAgIjUgRmVicnVhcnkgMjAxNSIKKy5USCBQQ0FQX1NFVF9UU1RBTVBfUFJFQ0lTSU9OIDNQQ0FQICIyMyBBdWd1c3QgMjAxOCIKIC5TSCBOQU1FCiBwY2FwX3NldF90c3RhbXBfcHJlY2lzaW9uIFwtIHNldCB0aGUgdGltZSBzdGFtcCBwcmVjaXNpb24gcmV0dXJuZWQgaW4KIGNhcHR1cmVzCkBAIC0zNCwyOCArMzQsMzUgQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfc2V0X3RzdGFtcF9wcmVjaXNpb24oKQorLkJSIHBjYXBfc2V0X3RzdGFtcF9wcmVjaXNpb24gKCkKIHNldHMgdGhlIHByZWNpc2lvbiBvZiB0aGUgdGltZSBzdGFtcCBkZXNpcmVkIGZvciBwYWNrZXRzIGNhcHR1cmVkIG9uIHRoZSBwY2FwCiBkZXNjcmlwdG9yIHRvIHRoZSB0eXBlIHNwZWNpZmllZCBieQogLklSIHRzdGFtcF9wcmVjaXNpb24gLgogSXQgbXVzdCBiZSBjYWxsZWQgb24gYSBwY2FwIGRlc2NyaXB0b3IgY3JlYXRlZCBieQotLkIgcGNhcF9jcmVhdGUoKQorLkJSIHBjYXBfY3JlYXRlICgzUENBUCkKIHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiBhY3RpdmF0ZWQgYnkKLS5CUiBwY2FwX2FjdGl2YXRlKCkgLgorLkJSIHBjYXBfYWN0aXZhdGUgKDNQQ0FQKS4KIFR3byB0aW1lIHN0YW1wIHByZWNpc2lvbnMgYXJlIHN1cHBvcnRlZCwgbWljcm9zZWNvbmRzIGFuZCBuYW5vc2Vjb25kcy4gT25lIGNhbgogdXNlIG9wdGlvbnMKIC5CIFBDQVBfVFNUQU1QX1BSRUNJU0lPTl9NSUNSTyBhbmQKIC5CIFBDQVBfVFNUQU1QX1BSRUNJU0lPTl9OQU5PCiB0byByZXF1ZXN0IGRlc2lyZWQgcHJlY2lzaW9uLiBCeSBkZWZhdWx0LCB0aW1lIHN0YW1wcyBhcmUgaW4gbWljcm9zZWNvbmRzLgogLlNIIFJFVFVSTiBWQUxVRQotLkIgcGNhcF9zZXRfdHN0YW1wX3ByZWNpc2lvbigpCi1yZXR1cm5zIDAgb24gc3VjY2VzcyBpZiB0aGUgc3BlY2lmaWVkIHRpbWUgc3RhbXAgcHJlY2lzaW9uIGlzIGV4cGVjdGVkIHRvIGJlCi1zdXBwb3J0ZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0sCisuQlIgcGNhcF9zZXRfdHN0YW1wX3ByZWNpc2lvbiAoKQorcmV0dXJucworLkIgMAorb24gc3VjY2VzcyBpZiB0aGUgc3BlY2lmaWVkIHRpbWUgc3RhbXAgcHJlY2lzaW9uIGlzIGV4cGVjdGVkIHRvIGJlCitzdXBwb3J0ZWQgYnkgdGhlIGNhcHR1cmUgZGV2aWNlLAogLkIgUENBUF9FUlJPUl9UU1RBTVBfUFJFQ0lTSU9OX05PVFNVUAotaWYgb3BlcmF0aW5nIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IHJlcXVlc3RlZCB0aW1lIHN0YW1wIHByZWNpc2lvbiwKK2lmIHRoZSBjYXB0dXJlIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQgdGltZSBzdGFtcAorcHJlY2lzaW9uLAogLkIgUENBUF9FUlJPUl9BQ1RJVkFURUQKIGlmIGNhbGxlZCBvbiBhIGNhcHR1cmUgaGFuZGxlIHRoYXQgaGFzIGJlZW4gYWN0aXZhdGVkLgorLlNIIEJBQ0tXQVJEIENPTVBBVElCSUxJVFkKK1RoaXMgZnVuY3Rpb24gYmVjYW1lIGF2YWlsYWJsZSBpbiBsaWJwY2FwIHJlbGVhc2UgMS41LjEuICBJbiBwcmV2aW91cworcmVsZWFzZXMsIHRpbWUgc3RhbXBzIGZyb20gYSBjYXB0dXJlIGRldmljZSBvciBzYXZlZmlsZSBhcmUgYWx3YXlzIGdpdmVuCitpbiBzZWNvbmRzIGFuZCBtaWNyb3NlY29uZHMuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApLAotcGNhcF9nZXRfdHN0YW1wX3ByZWNpc2lvbigzUENBUCksCi1wY2FwLXRzdGFtcChATUFOX01JU0NfSU5GT0ApCisuQlIgcGNhcCAoM1BDQVApLAorLkJSIHBjYXBfZ2V0X3RzdGFtcF9wcmVjaXNpb24gKDNQQ0FQKSwKKy5CUiBwY2FwLXRzdGFtcCAoQE1BTl9NSVNDX0lORk9AKQpkaWZmIC0tZ2l0IGEvcGNhcF9zZXRfdHN0YW1wX3R5cGUuM3BjYXAgYi9wY2FwX3NldF90c3RhbXBfdHlwZS4zcGNhcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc5N2MxYS4uMDAwMDAwMAotLS0gYS9wY2FwX3NldF90c3RhbXBfdHlwZS4zcGNhcAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS5cIgotLlwiIENvcHlyaWdodCAoYykgMTk5NCwgMTk5NiwgMTk5NwotLlwiCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotLlwiCi0uXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0uXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQ6ICgxKSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb25zCi0uXCIgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBpbiBpdHMgZW50aXJldHksICgyKQotLlwiIGRpc3RyaWJ1dGlvbnMgaW5jbHVkaW5nIGJpbmFyeSBjb2RlIGluY2x1ZGUgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kCi0uXCIgdGhpcyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5IGluIHRoZSBkb2N1bWVudGF0aW9uIG9yIG90aGVyIG1hdGVyaWFscwotLlwiIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiwgYW5kICgzKSBhbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcKLS5cIiBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotLlwiIGBgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLAotLlwiIExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkgYW5kIGl0cyBjb250cmlidXRvcnMuJycgTmVpdGhlciB0aGUgbmFtZSBvZgotLlwiIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlCi0uXCIgb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCi0uXCIgd3JpdHRlbiBwZXJtaXNzaW9uLgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLS5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotLlwiIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0uXCIKLS5USCBQQ0FQX1NFVF9UU1RBTVBfVFlQRSAzUENBUCAiNSBEZWNlbWJlciAyMDE0IgotLlNIIE5BTUUKLXBjYXBfc2V0X3RzdGFtcF90eXBlIFwtIHNldCB0aGUgdGltZSBzdGFtcCB0eXBlIHRvIGJlIHVzZWQgYnkgYQotY2FwdHVyZSBkZXZpY2UKLS5TSCBTWU5PUFNJUwotLm5mCi0uZnQgQgotI2luY2x1ZGUgPHBjYXAvcGNhcC5oPgotLmZ0Ci0uTFAKLS5mdCBCCi1pbnQgcGNhcF9zZXRfdHN0YW1wX3R5cGUocGNhcF90ICpwLCBpbnQgdHN0YW1wX3R5cGUpOwotLmZ0Ci0uZmkKLS5TSCBERVNDUklQVElPTgotLkIgcGNhcF9zZXRfdHN0YW1wX3R5cGUoKQotc2V0cyB0aGUgdHlwZSBvZiB0aW1lIHN0YW1wIGRlc2lyZWQgZm9yIHBhY2tldHMgY2FwdHVyZWQgb24gdGhlIHBjYXAKLWRlc2NyaXB0b3IgdG8gdGhlIHR5cGUgc3BlY2lmaWVkIGJ5Ci0uSVIgdHN0YW1wX3R5cGUgLgotSXQgbXVzdCBiZSBjYWxsZWQgb24gYSBwY2FwIGRlc2NyaXB0b3IgY3JlYXRlZCBieQotLkIgcGNhcF9jcmVhdGUoKQotdGhhdCBoYXMgbm90IHlldCBiZWVuIGFjdGl2YXRlZCBieQotLkJSIHBjYXBfYWN0aXZhdGUoKSAuCi0uQiBwY2FwX2xpc3RfdHN0YW1wX3R5cGVzKCkKLXdpbGwgZ2l2ZSBhIGxpc3Qgb2YgdGhlIHRpbWUgc3RhbXAgdHlwZXMgc3VwcG9ydGVkIGJ5IGEgZ2l2ZW4gY2FwdHVyZQotZGV2aWNlLgotU2VlCi0uQlIgcGNhcC10c3RhbXAgKDcpCi1mb3IgYSBsaXN0IG9mIGFsbCB0aGUgdGltZSBzdGFtcCB0eXBlcy4KLS5TSCBSRVRVUk4gVkFMVUUKLS5CIHBjYXBfc2V0X3RzdGFtcF90eXBlKCkKLXJldHVybnMgMCBvbiBzdWNjZXNzIGlmIHRoZSBzcGVjaWZpZWQgdGltZSBzdGFtcCB0eXBlIGlzIGV4cGVjdGVkIHRvIGJlCi1zdXBwb3J0ZWQgYnkgdGhlIGNhcHR1cmUgZGV2aWNlLAotLkIgUENBUF9XQVJOSU5HX1RTVEFNUF9UWVBFX05PVFNVUAotaWYgdGhlIHNwZWNpZmllZCB0aW1lIHN0YW1wIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUKLWNhcHR1cmUgZGV2aWNlLAotLkIgUENBUF9FUlJPUl9BQ1RJVkFURUQKLWlmIGNhbGxlZCBvbiBhIGNhcHR1cmUgaGFuZGxlIHRoYXQgaGFzIGJlZW4gYWN0aXZhdGVkLCBhbmQKLS5CIFBDQVBfRVJST1JfQ0FOVFNFVF9UU1RBTVBfVFlQRQotaWYgdGhlIGNhcHR1cmUgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBzZXR0aW5nIHRoZSB0aW1lIHN0YW1wIHR5cGUuCi0uU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApLAotcGNhcF9saXN0X3RzdGFtcF90eXBlcygzUENBUCksCi1wY2FwX3RzdGFtcF90eXBlX25hbWVfdG9fdmFsKDNQQ0FQKSwKLXBjYXAtdHN0YW1wKDcpCmRpZmYgLS1naXQgYS9wY2FwX3NldF90c3RhbXBfdHlwZS4zcGNhcC5pbiBiL3BjYXBfc2V0X3RzdGFtcF90eXBlLjNwY2FwLmluCmluZGV4IDc4OTlkYTMuLmUxOWQ2ZTUgMTAwNjQ0Ci0tLSBhL3BjYXBfc2V0X3RzdGFtcF90eXBlLjNwY2FwLmluCisrKyBiL3BjYXBfc2V0X3RzdGFtcF90eXBlLjNwY2FwLmluCkBAIC0xOCw3ICsxOCw3IEBACiAuXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKIC5cIiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogLlwiCi0uVEggUENBUF9TRVRfVFNUQU1QX1RZUEUgM1BDQVAgIjUgRGVjZW1iZXIgMjAxNCIKKy5USCBQQ0FQX1NFVF9UU1RBTVBfVFlQRSAzUENBUCAiOCBTZXB0ZW1iZXIgMjAxOSIKIC5TSCBOQU1FCiBwY2FwX3NldF90c3RhbXBfdHlwZSBcLSBzZXQgdGhlIHRpbWUgc3RhbXAgdHlwZSB0byBiZSB1c2VkIGJ5IGEKIGNhcHR1cmUgZGV2aWNlCkBAIC0zMywyMyArMzMsMjUgQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfc2V0X3RzdGFtcF90eXBlKCkKKy5CUiBwY2FwX3NldF90c3RhbXBfdHlwZSAoKQogc2V0cyB0aGUgdHlwZSBvZiB0aW1lIHN0YW1wIGRlc2lyZWQgZm9yIHBhY2tldHMgY2FwdHVyZWQgb24gdGhlIHBjYXAKIGRlc2NyaXB0b3IgdG8gdGhlIHR5cGUgc3BlY2lmaWVkIGJ5CiAuSVIgdHN0YW1wX3R5cGUgLgogSXQgbXVzdCBiZSBjYWxsZWQgb24gYSBwY2FwIGRlc2NyaXB0b3IgY3JlYXRlZCBieQotLkIgcGNhcF9jcmVhdGUoKQorLkJSIHBjYXBfY3JlYXRlICgzUENBUCkKIHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiBhY3RpdmF0ZWQgYnkKLS5CUiBwY2FwX2FjdGl2YXRlKCkgLgotLkIgcGNhcF9saXN0X3RzdGFtcF90eXBlcygpCisuQlIgcGNhcF9hY3RpdmF0ZSAoM1BDQVApLgorLkJSIHBjYXBfbGlzdF90c3RhbXBfdHlwZXMgKDNQQ0FQKQogd2lsbCBnaXZlIGEgbGlzdCBvZiB0aGUgdGltZSBzdGFtcCB0eXBlcyBzdXBwb3J0ZWQgYnkgYSBnaXZlbiBjYXB0dXJlCiBkZXZpY2UuCiBTZWUKIC5CUiBwY2FwLXRzdGFtcCAoQE1BTl9NSVNDX0lORk9AKQogZm9yIGEgbGlzdCBvZiBhbGwgdGhlIHRpbWUgc3RhbXAgdHlwZXMuCiAuU0ggUkVUVVJOIFZBTFVFCi0uQiBwY2FwX3NldF90c3RhbXBfdHlwZSgpCi1yZXR1cm5zIDAgb24gc3VjY2VzcyBpZiB0aGUgc3BlY2lmaWVkIHRpbWUgc3RhbXAgdHlwZSBpcyBleHBlY3RlZCB0byBiZQorLkJSIHBjYXBfc2V0X3RzdGFtcF90eXBlICgpCityZXR1cm5zCisuQiAwCitvbiBzdWNjZXNzIGlmIHRoZSBzcGVjaWZpZWQgdGltZSBzdGFtcCB0eXBlIGlzIGV4cGVjdGVkIHRvIGJlCiBzdXBwb3J0ZWQgYnkgdGhlIGNhcHR1cmUgZGV2aWNlLAogLkIgUENBUF9XQVJOSU5HX1RTVEFNUF9UWVBFX05PVFNVUAogaWYgdGhlIHNwZWNpZmllZCB0aW1lIHN0YW1wIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUKQEAgLTU3LDkgKzU5LDE0IEBACiAuQiBQQ0FQX0VSUk9SX0FDVElWQVRFRAogaWYgY2FsbGVkIG9uIGEgY2FwdHVyZSBoYW5kbGUgdGhhdCBoYXMgYmVlbiBhY3RpdmF0ZWQsIGFuZAogLkIgUENBUF9FUlJPUl9DQU5UU0VUX1RTVEFNUF9UWVBFCi1pZiB0aGUgY2FwdHVyZSBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IHNldHRpbmcgdGhlIHRpbWUgc3RhbXAgdHlwZS4KK2lmIHRoZSBjYXB0dXJlIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgc2V0dGluZyB0aGUgdGltZSBzdGFtcCB0eXBlIChvbmx5CitvbGRlciB2ZXJzaW9ucyBvZiBsaWJwY2FwIHdpbGwgcmV0dXJuIHRoYXQ7IG5ld2VyIHZlcnNpb25zIHdpbGwgYWx3YXlzCithbGxvdyB0aGUgdGltZSBzdGFtcCB0eXBlIHRvIGJlIHNldCB0byB0aGUgZGVmYXVsdCB0eXBlKS4KKy5TSCBCQUNLV0FSRCBDT01QQVRJQklMSVRZCisuUFAKK1RoaXMgZnVuY3Rpb24gYmVjYW1lIGF2YWlsYWJsZSBpbiBsaWJwY2FwIHJlbGVhc2UgMS4yLjEuICBJbiBwcmV2aW91cworcmVsZWFzZXMsIHRoZSB0aW1lIHN0YW1wIHR5cGUgY2Fubm90IGJlIHNldDsgb25seSB0aGUgZGVmYXVsdCB0aW1lIHN0YW1wCit0eXBlIG9mZmVyZWQgYnkgYSBjYXB0dXJlIHNvdXJjZSBpcyBhdmFpbGFibGUuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApLAotcGNhcF9saXN0X3RzdGFtcF90eXBlcygzUENBUCksCi1wY2FwX3RzdGFtcF90eXBlX25hbWVfdG9fdmFsKDNQQ0FQKSwKLXBjYXAtdHN0YW1wKEBNQU5fTUlTQ19JTkZPQCkKKy5CUiBwY2FwICgzUENBUCksCisuQlIgcGNhcF90c3RhbXBfdHlwZV9uYW1lX3RvX3ZhbCAoM1BDQVApCmRpZmYgLS1naXQgYS9wY2FwX3NldGRpcmVjdGlvbi4zcGNhcCBiL3BjYXBfc2V0ZGlyZWN0aW9uLjNwY2FwCmluZGV4IDExOTQ1ZjUuLjdiMzg4NDUgMTAwNjQ0Ci0tLSBhL3BjYXBfc2V0ZGlyZWN0aW9uLjNwY2FwCisrKyBiL3BjYXBfc2V0ZGlyZWN0aW9uLjNwY2FwCkBAIC0xNyw3ICsxNyw3IEBACiAuXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKIC5cIiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogLlwiCi0uVEggUENBUF9TRVRESVJFQ1RJT04gM1BDQVAgIjggTWFyY2ggMjAxNSIKKy5USCBQQ0FQX1NFVERJUkVDVElPTiAzUENBUCAiMjUgSnVseSAyMDE4IgogLlNIIE5BTUUKIHBjYXBfc2V0ZGlyZWN0aW9uIFwtIHNldCB0aGUgZGlyZWN0aW9uIGZvciB3aGljaCBwYWNrZXRzIHdpbGwgYmUgY2FwdHVyZWQKIC5TSCBTWU5PUFNJUwpAQCAtMzEsNyArMzEsNyBAQAogLmZ0CiAuZmkKIC5TSCBERVNDUklQVElPTgotLkIgcGNhcF9zZXRkaXJlY3Rpb24oKQorLkJSIHBjYXBfc2V0ZGlyZWN0aW9uICgpCiBpcyB1c2VkIHRvIHNwZWNpZnkgYSBkaXJlY3Rpb24gdGhhdCBwYWNrZXRzIHdpbGwgYmUgY2FwdHVyZWQuCiAuSSBkCiBpcyBvbmUgb2YgdGhlIGNvbnN0YW50cwpAQCAtNDgsNyArNDgsNyBAQAogLkIgUENBUF9EX0lOT1VUCiBpcyB0aGUgZGVmYXVsdCBzZXR0aW5nIGlmIHRoaXMgZnVuY3Rpb24gaXMgbm90IGNhbGxlZC4KIC5QUAotLkIgcGNhcF9zZXRkaXJlY3Rpb24oKQorLkJSIHBjYXBfc2V0ZGlyZWN0aW9uICgpCiBpc24ndCBuZWNlc3NhcmlseSBmdWxseSBzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3Jtczsgc29tZSBwbGF0Zm9ybXMgbWlnaHQKIHJldHVybiBhbiBlcnJvciBmb3IgYWxsIHZhbHVlcywgYW5kIHNvbWUgb3RoZXIgcGxhdGZvcm1zIG1pZ2h0IG5vdAogc3VwcG9ydApAQCAtNTYsMTQgKzU2LDE5IEBACiAuUFAKIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaWYgYSBgYHNhdmVmaWxlJycgaXMgYmVpbmcgcmVhZC4KIC5TSCBSRVRVUk4gVkFMVUUKLS5CIHBjYXBfc2V0ZGlyZWN0aW9uKCkKLXJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCBcLTEgb24gZmFpbHVyZS4KLUlmIFwtMSBpcyByZXR1cm5lZCwKLS5CIHBjYXBfZ2V0ZXJyKCkKKy5CUiBwY2FwX3NldGRpcmVjdGlvbiAoKQorcmV0dXJucworLkIgMAorb24gc3VjY2VzcyBhbmQKKy5CIFBDQVBfRVJST1IKK29uIGZhaWx1cmUuIElmCisuQiBQQ0FQX0VSUk9SCitpcyByZXR1cm5lZCwKKy5CUiBwY2FwX2dldGVyciAoM1BDQVApCiBvcgotLkIgcGNhcF9wZXJyb3IoKQorLkJSIHBjYXBfcGVycm9yICgzUENBUCkKIG1heSBiZSBjYWxsZWQgd2l0aAogLkkgcAogYXMgYW4gYXJndW1lbnQgdG8gZmV0Y2ggb3IgZGlzcGxheSB0aGUgZXJyb3IgdGV4dC4KIC5TSCBTRUUgQUxTTwotcGNhcCgzUENBUCksIHBjYXBfZ2V0ZXJyKDNQQ0FQKQorLkJSIHBjYXAgKDNQQ0FQKQpkaWZmIC0tZ2l0IGEvcGNhcF9zZXRmaWx0ZXIuM3BjYXAgYi9wY2FwX3NldGZpbHRlci4zcGNhcAppbmRleCA2ZWZkMjUzLi4xZTNjNWE1IDEwMDY0NAotLS0gYS9wY2FwX3NldGZpbHRlci4zcGNhcAorKysgYi9wY2FwX3NldGZpbHRlci4zcGNhcApAQCAtMTcsNyArMTcsNyBAQAogLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAuXCIgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KIC5cIgotLlRIIFBDQVBfU0VURklMVEVSIDNQQ0FQICI3IEFwcmlsIDIwMTQiCisuVEggUENBUF9TRVRGSUxURVIgM1BDQVAgIjI1IEp1bHkgMjAxOCIKIC5TSCBOQU1FCiBwY2FwX3NldGZpbHRlciBcLSBzZXQgdGhlIGZpbHRlcgogLlNIIFNZTk9QU0lTCkBAIC0zMSwyMiArMzEsMjcgQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfc2V0ZmlsdGVyKCkKKy5CUiBwY2FwX3NldGZpbHRlciAoKQogaXMgdXNlZCB0byBzcGVjaWZ5IGEgZmlsdGVyIHByb2dyYW0uCiAuSSBmcAogaXMgYSBwb2ludGVyIHRvIGEKIC5JIGJwZl9wcm9ncmFtCiBzdHJ1Y3QsIHVzdWFsbHkgdGhlIHJlc3VsdCBvZiBhIGNhbGwgdG8KLS5CUiBwY2FwX2NvbXBpbGUoKSAuCisuQlIgXCVwY2FwX2NvbXBpbGUgKDNQQ0FQKS4KIC5TSCBSRVRVUk4gVkFMVUUKLS5CIHBjYXBfc2V0ZmlsdGVyKCkKLXJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCBcLTEgb24gZmFpbHVyZS4KLUlmIFwtMSBpcyByZXR1cm5lZCwKLS5CIHBjYXBfZ2V0ZXJyKCkKKy5CUiBwY2FwX3NldGZpbHRlciAoKQorcmV0dXJucworLkIgMAorb24gc3VjY2VzcyBhbmQKKy5CIFBDQVBfRVJST1IKK29uIGZhaWx1cmUuIElmCisuQiBQQ0FQX0VSUk9SCitpcyByZXR1cm5lZCwKKy5CUiBwY2FwX2dldGVyciAoM1BDQVApCiBvcgotLkIgcGNhcF9wZXJyb3IoKQorLkJSIHBjYXBfcGVycm9yICgzUENBUCkKIG1heSBiZSBjYWxsZWQgd2l0aAogLkkgcAogYXMgYW4gYXJndW1lbnQgdG8gZmV0Y2ggb3IgZGlzcGxheSB0aGUgZXJyb3IgdGV4dC4KIC5TSCBTRUUgQUxTTwotcGNhcCgzUENBUCksIHBjYXBfY29tcGlsZSgzUENBUCksIHBjYXBfZ2V0ZXJyKDNQQ0FQKQorLkJSIHBjYXAgKDNQQ0FQKQpkaWZmIC0tZ2l0IGEvcGNhcF9zZXRub25ibG9jay4zcGNhcCBiL3BjYXBfc2V0bm9uYmxvY2suM3BjYXAKaW5kZXggNjk1OTEyNy4uNjVjZmVhMiAxMDA2NDQKLS0tIGEvcGNhcF9zZXRub25ibG9jay4zcGNhcAorKysgYi9wY2FwX3NldG5vbmJsb2NrLjNwY2FwCkBAIC0xNyw3ICsxNyw3IEBACiAuXCIgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKIC5cIiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogLlwiCi0uVEggUENBUF9TRVROT05CTE9DSyAzUENBUCAiMTggT2N0b2JlciAyMDE0IgorLlRIIFBDQVBfU0VUTk9OQkxPQ0sgM1BDQVAgIjI1IEp1bHkgMjAxOCIKIC5TSCBOQU1FCiBwY2FwX3NldG5vbmJsb2NrLCBwY2FwX2dldG5vbmJsb2NrIFwtIHNldCBvciBnZXQgdGhlIHN0YXRlIG9mCiBub24tYmxvY2tpbmcgbW9kZSBvbiBhIGNhcHR1cmUgZGV2aWNlCkBAIC0zOCwzOCArMzgsNTggQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfc2V0bm9uYmxvY2soKQorLkJSIHBjYXBfc2V0bm9uYmxvY2sgKCkKIHB1dHMgYSBjYXB0dXJlIGhhbmRsZSBpbnRvIGBgbm9uLWJsb2NraW5nJycgbW9kZSwgb3IgdGFrZXMgaXQgb3V0CiBvZiBgYG5vbi1ibG9ja2luZycnIG1vZGUsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZQogLkkgbm9uYmxvY2sKIGFyZ3VtZW50IGlzIG5vbi16ZXJvIG9yIHplcm8uICBJdCBoYXMgbm8gZWZmZWN0IG9uIGBgc2F2ZWZpbGVzJycuCi1JZiB0aGVyZSBpcyBhbiBlcnJvciwgXC0xIGlzIHJldHVybmVkIGFuZAorSWYgdGhlcmUgaXMgYW4gZXJyb3IsCisuQiBQQ0FQX0VSUk9SCitpcyByZXR1cm5lZCBhbmQKIC5JIGVycmJ1ZgotaXMgZmlsbGVkIGluIHdpdGggYW4gYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZTsgb3RoZXJ3aXNlLCAwIGlzCi1yZXR1cm5lZC4KK2lzIGZpbGxlZCBpbiB3aXRoIGFuIGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2U7IG90aGVyd2lzZSwKKy5CIDAKK2lzIHJldHVybmVkLgorLlBQCiBJbgogYGBub24tYmxvY2tpbmcnJyBtb2RlLCBhbiBhdHRlbXB0IHRvIHJlYWQgZnJvbSB0aGUgY2FwdHVyZSBkZXNjcmlwdG9yCiB3aXRoCi0uQiBwY2FwX2Rpc3BhdGNoKCkKLXdpbGwsIGlmIG5vIHBhY2tldHMgYXJlIGN1cnJlbnRseSBhdmFpbGFibGUgdG8gYmUgcmVhZCwgcmV0dXJuIDAKLWltbWVkaWF0ZWx5IHJhdGhlciB0aGFuIGJsb2NraW5nIHdhaXRpbmcgZm9yIHBhY2tldHMgdG8gYXJyaXZlLgotLkIgcGNhcF9sb29wKCkKKy5CUiBwY2FwX2Rpc3BhdGNoICgzUENBUCkKIGFuZAotLkIgcGNhcF9uZXh0KCkKLXdpbGwgbm90IHdvcmsgaW4gYGBub24tYmxvY2tpbmcnJyBtb2RlLgorLkJSIHBjYXBfbmV4dF9leCAoM1BDQVApCit3aWxsLCBpZiBubyBwYWNrZXRzIGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlIHRvIGJlIHJlYWQsIHJldHVybgorLkIgMAoraW1tZWRpYXRlbHkgcmF0aGVyIHRoYW4gYmxvY2tpbmcgd2FpdGluZyBmb3IgcGFja2V0cyB0byBhcnJpdmUuCisuUFAKKy5CUiBwY2FwX2xvb3AgKDNQQ0FQKQord2lsbCBsb29wIGZvcmV2ZXIsIGNvbnN1bWluZyBDUFUgdGltZSB3aGVuIG5vIHBhY2tldHMgYXJlIGN1cnJlbnRseQorYXZhaWxhYmxlOworLkJSIHBhY3BfZGlzcGF0Y2ggKCkKK3Nob3VsZCBiZSB1c2VkIGluc3RlYWQuCisuQlIgcGNhcF9uZXh0ICgzUENBUCkKK3dpbGwgcmV0dXJuCisuQiBOVUxMCitpZiB0aGVyZSBhcmUgbm8gcGFja2V0cyBjdXJyZW50bHkgYXZhaWxhYmxlIHRvIHJlYWQ7Cit0aGlzIGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYW4gZXJyb3IsIHNvCisuQlIgcGNhcF9uZXh0X2V4ICgpCitzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgogLlBQCiBXaGVuIGZpcnN0IGFjdGl2YXRlZCB3aXRoCi0uQiBwY2FwX2FjdGl2YXRlKCkKKy5CUiBwY2FwX2FjdGl2YXRlICgzUENBUCkKIG9yIG9wZW5lZCB3aXRoCi0uQiBwY2FwX29wZW5fbGl2ZSgpICwKKy5CUiBwY2FwX29wZW5fbGl2ZSAoM1BDQVApICwKIGEgY2FwdHVyZSBoYW5kbGUgaXMgbm90IGluIGBgbm9uLWJsb2NraW5nIG1vZGUnJzsgYSBjYWxsIHRvCi0uQiBwY2FwX3NldG5vbmJsb2NrKCkKKy5CUiBwY2FwX3NldG5vbmJsb2NrICgpCiBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBwdXQgaXQgaW50byBgYG5vbi1ibG9ja2luZycnIG1vZGUuCiAuU0ggUkVUVVJOIFZBTFVFCi0uQiBwY2FwX2dldG5vbmJsb2NrKCkKKy5CUiBwY2FwX2dldG5vbmJsb2NrICgpCiByZXR1cm5zIHRoZSBjdXJyZW50IGBgbm9uLWJsb2NraW5nJycgc3RhdGUgb2YgdGhlIGNhcHR1cmUgZGVzY3JpcHRvcjsgaXQKLWFsd2F5cyByZXR1cm5zIDAgb24gYGBzYXZlZmlsZXMnJy4KLUlmIHRoZXJlIGlzIGFuIGVycm9yLCBcLTEgaXMgcmV0dXJuZWQgYW5kCithbHdheXMgcmV0dXJucworLkIgMAorb24gYGBzYXZlZmlsZXMnJy4KK0lmIHRoZXJlIGlzIGFuIGVycm9yLAorLkIgUENBUF9FUlJPUgoraXMgcmV0dXJuZWQgYW5kCiAuSSBlcnJidWYKIGlzIGZpbGxlZCBpbiB3aXRoIGFuIGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2UuCiAuUFAKQEAgLTc4LDQgKzk4LDYgQEAKIC5CIFBDQVBfRVJSQlVGX1NJWkUKIGNoYXJzLgogLlNIIFNFRSBBTFNPCi1wY2FwKDNQQ0FQKSwgcGNhcF9sb29wKDNQQ0FQKSwgcGNhcF9uZXh0X2V4KDNQQ0FQKSwgcGNhcF9nZXRlcnIoM1BDQVApCisuQlIgcGNhcCAoM1BDQVApLAorLkJSIHBjYXBfbmV4dF9leCAoM1BDQVApLAorLkJSIHBjYXBfZ2V0ZXJyICgzUENBUCkKZGlmZiAtLWdpdCBhL3BjYXBfc25hcHNob3QuM3BjYXAgYi9wY2FwX3NuYXBzaG90LjNwY2FwCmluZGV4IDdhZjhjMzMuLjI1ZjZlMDMgMTAwNjQ0Ci0tLSBhL3BjYXBfc25hcHNob3QuM3BjYXAKKysrIGIvcGNhcF9zbmFwc2hvdC4zcGNhcApAQCAtMzEsMjIgKzMxLDIyIEBACiAuZnQKIC5maQogLlNIIERFU0NSSVBUSU9OCi0uQiBwY2FwX3NuYXBzaG90KCkKKy5CUiBwY2FwX3NuYXBzaG90ICgpCiByZXR1cm5zIHRoZSBzbmFwc2hvdCBsZW5ndGggc3BlY2lmaWVkIHdoZW4KLS5CIHBjYXBfc2V0X3NuYXBzaG90KCkKKy5CUiBwY2FwX3NldF9zbmFwbGVuICgzUENBUCkKIG9yCi0uQiBwY2FwX29wZW5fbGl2ZSgpCisuQlIgcGNhcF9vcGVuX2xpdmUgKDNQQ0FQKQogd2FzIGNhbGxlZCwgZm9yIGEgbGl2ZSBjYXB0dXJlLCBvciB0aGUgc25hcHNob3QgbGVuZ3RoIGZyb20gdGhlIGNhcHR1cmUKIGZpbGUsIGZvciBhIGBgc2F2ZWZpbGUnJy4KIC5QUAogSXQgbXVzdCBub3QgYmUgY2FsbGVkIG9uIGEgcGNhcCBkZXNjcmlwdG9yIGNyZWF0ZWQgYnkKLS5CIHBjYXBfY3JlYXRlKCkKKy5CUiBcJXBjYXBfY3JlYXRlICgzUENBUCkKIHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiBhY3RpdmF0ZWQgYnkKLS5CUiBwY2FwX2FjdGl2YXRlKCkgLgorLkJSIFwlcGNhcF9hY3RpdmF0ZSAoM1BDQVApLgogLlNIIFJFVFVSTiBWQUxVRQotLkIgcGNhcF9zbmFwc2hvdCgpCisuQlIgcGNhcF9zbmFwc2hvdCAoKQogcmV0dXJucyB0aGUgc25hcHNob3QgbGVuZ3RoIG9uIHN1Y2Nlc3MgYW5kCiAuQiBQQ0FQX0VSUk9SX05PVF9BQ1RJVkFURUQKIGlmIGNhbGxlZCBvbiBhIGNhcHR1cmUgaGFuZGxlIHRoYXQgaGFzIGJlZW4gY3JlYXRlZCBidXQgbm90IGFjdGl2YXRlZC4KIC5TSCBTRUUgQUxTTwotcGNhcCgzUENBUCkKKy5CUiBwY2FwICgzUENBUCkKZGlmZiAtLWdpdCBhL3BjYXBfc3RhdHMuM3BjYXAgYi9wY2FwX3N0YXRzLjNwY2FwCmluZGV4IDJkY2U0YjUuLmFhMDMwMTMgMTAwNjQ0Ci0tLSBhL3BjYXBfc3RhdHMuM3BjYXAKKysrIGIvcGNhcF9zdGF0cy4zcGNhcApAQCAtMTcsNyArMTcsNyBAQAogLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAuXCIgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KIC5cIgotLlRIIFBDQVBfU1RBVFMgM1BDQVAgIjMgSmFudWFyeSAyMDE0IgorLlRIIFBDQVBfU1RBVFMgM1BDQVAgIjI1IEp1bHkgMjAxOCIKIC5TSCBOQU1FCiBwY2FwX3N0YXRzIFwtIGdldCBjYXB0dXJlIHN0YXRpc3RpY3MKIC5TSCBTWU5PUFNJUwpAQCAtMzEsMTMgKzMxLDEzIEBACiAuZnQKIC5maQogLlNIIERFU0NSSVBUSU9OCi0uQiBwY2FwX3N0YXRzKCkKKy5CUiBwY2FwX3N0YXRzICgpCiBmaWxscyBpbiB0aGUKIC5CIHN0cnVjdCBwY2FwX3N0YXQKIHBvaW50ZWQgdG8gYnkgaXRzIHNlY29uZCBhcmd1bWVudC4gIFRoZSB2YWx1ZXMgcmVwcmVzZW50CiBwYWNrZXQgc3RhdGlzdGljcyBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcnVuIHRvIHRoZSB0aW1lIG9mIHRoZSBjYWxsLgogLlBQCi0uQiBwY2FwX3N0YXRzKCkKKy5CUiBwY2FwX3N0YXRzICgpCiBpcyBzdXBwb3J0ZWQgb25seSBvbiBsaXZlIGNhcHR1cmVzLCBub3Qgb24gYGBzYXZlZmlsZXMnJzsgbm8gc3RhdGlzdGljcwogYXJlIHN0b3JlZCBpbiBgYHNhdmVmaWxlcycnLCBzbyBubyBzdGF0aXN0aWNzIGFyZSBhdmFpbGFibGUgd2hlbiByZWFkaW5nCiBmcm9tIGEgYGBzYXZlZmlsZScnLgpAQCAtODIsMTYgKzgyLDIxIEBACiBzdGF0aXN0aWMgaXMgdW5hdmFpbGFibGUsIHNvIGl0IHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcyBhbiBpbmRpY2F0aW9uCiB0aGF0IHRoZSBpbnRlcmZhY2UgZGlkIG5vdCBkcm9wIGFueSBwYWNrZXRzLgogLlNIIFJFVFVSTiBWQUxVRQotLkIgcGNhcF9zdGF0cygpCi1yZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgcmV0dXJucyBcLTEgaWYgdGhlcmUgaXMgYW4gZXJyb3Igb3IgaWYKKy5CUiBwY2FwX3N0YXRzICgpCityZXR1cm5zCisuQiAwCitvbiBzdWNjZXNzIGFuZCByZXR1cm5zCisuQiBQQ0FQX0VSUk9SCitpZiB0aGVyZSBpcyBhbiBlcnJvciBvciBpZgogLkkgcAotZG9lc24ndCBzdXBwb3J0IHBhY2tldCBzdGF0aXN0aWNzLgotSWYgXC0xIGlzIHJldHVybmVkLAotLkIgcGNhcF9nZXRlcnIoKQorZG9lc24ndCBzdXBwb3J0IHBhY2tldCBzdGF0aXN0aWNzLiBJZgorLkIgUENBUF9FUlJPUgoraXMgcmV0dXJuZWQsCisuQlIgcGNhcF9nZXRlcnIgKDNQQ0FQKQogb3IKLS5CIHBjYXBfcGVycm9yKCkKKy5CUiBwY2FwX3BlcnJvciAoM1BDQVApCiBtYXkgYmUgY2FsbGVkIHdpdGgKIC5JIHAKIGFzIGFuIGFyZ3VtZW50IHRvIGZldGNoIG9yIGRpc3BsYXkgdGhlIGVycm9yIHRleHQuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApLCBwY2FwX2dldGVycigzUENBUCkKKy5CUiBwY2FwICgzUENBUCkKZGlmZiAtLWdpdCBhL3BjYXBfc3RhdHVzdG9zdHIuM3BjYXAgYi9wY2FwX3N0YXR1c3Rvc3RyLjNwY2FwCmluZGV4IDljMjA1N2EuLmM2NzllMzYgMTAwNjQ0Ci0tLSBhL3BjYXBfc3RhdHVzdG9zdHIuM3BjYXAKKysrIGIvcGNhcF9zdGF0dXN0b3N0ci4zcGNhcApAQCAtMzEsMTEgKzMxLDExIEBACiAuZnQKIC5maQogLlNIIERFU0NSSVBUSU9OCi0uQiBwY2FwX3N0YXR1c3Rvc3RyKCkKKy5CUiBwY2FwX3N0YXR1c3Rvc3RyICgpCiBjb252ZXJ0cyBhCiAuQiBQQ0FQX0VSUk9SXwogb3IKIC5CIFBDQVBfV0FSTklOR18KIHZhbHVlIHJldHVybmVkIGJ5IGEgbGlicGNhcCByb3V0aW5lIHRvIGFuIGVycm9yIHN0cmluZy4KIC5TSCBTRUUgQUxTTwotcGNhcCgzUENBUCkKKy5CUiBwY2FwICgzUENBUCkKZGlmZiAtLWdpdCBhL3BjYXBfc3RyZXJyb3IuM3BjYXAgYi9wY2FwX3N0cmVycm9yLjNwY2FwCmluZGV4IDdjN2Q1M2YuLmRlZGZhNDAgMTAwNjQ0Ci0tLSBhL3BjYXBfc3RyZXJyb3IuM3BjYXAKKysrIGIvcGNhcF9zdHJlcnJvci4zcGNhcApAQCAtMzEsMTAgKzMxLDEwIEBACiAuZnQKIC5maQogLlNIIERFU0NSSVBUSU9OCi0uQiBwY2FwX3N0cmVycm9yKCkKKy5CUiBwY2FwX3N0cmVycm9yICgpCiBpcyBwcm92aWRlZCBpbiBjYXNlCiAuQlIgc3RyZXJyb3IgKDMpCiBpc24ndCBhdmFpbGFibGUuICBJdCByZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2Ugc3RyaW5nIGNvcnJlc3BvbmRpbmcgdG8KIC5JUiBlcnJvciAuCiAuU0ggU0VFIEFMU08KLXN0cmVycm9yKDMpCisuQlIgcGNhcCAoM1BDQVApCmRpZmYgLS1naXQgYS9wY2FwX3RzdGFtcF90eXBlX25hbWVfdG9fdmFsLjNwY2FwIGIvcGNhcF90c3RhbXBfdHlwZV9uYW1lX3RvX3ZhbC4zcGNhcAppbmRleCBhYzJlMzVkLi5mNjA1MTZlIDEwMDY0NAotLS0gYS9wY2FwX3RzdGFtcF90eXBlX25hbWVfdG9fdmFsLjNwY2FwCisrKyBiL3BjYXBfdHN0YW1wX3R5cGVfbmFtZV90b192YWwuM3BjYXAKQEAgLTE4LDcgKzE4LDcgQEAKIC5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgogLlwiIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAuXCIKLS5USCBQQ0FQX1RTVEFNUF9UWVBFX05BTUVfVE9fVkFMIDNQQ0FQICI1IERlY2VtYmVyIDIwMTQiCisuVEggUENBUF9UU1RBTVBfVFlQRV9OQU1FX1RPX1ZBTCAzUENBUCAiMjIgQXVndXN0IDIwMTgiCiAuU0ggTkFNRQogcGNhcF90c3RhbXBfdHlwZV9uYW1lX3RvX3ZhbCBcLSBnZXQgdGhlIHRpbWUgc3RhbXAgdHlwZSB2YWx1ZQogY29ycmVzcG9uZGluZyB0byBhIHRpbWUgc3RhbXAgdHlwZSBuYW1lCkBAIC0zMywxMyArMzMsMTcgQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfdHN0YW1wX3R5cGVfbmFtZV90b192YWwoKQorLkJSIHBjYXBfdHN0YW1wX3R5cGVfbmFtZV90b192YWwgKCkKIHRyYW5zbGF0ZXMgYSB0aW1lIHN0YW1wIHR5cGUgbmFtZSB0byB0aGUgY29ycmVzcG9uZGluZyB0aW1lIHN0YW1wIHR5cGUKIHZhbHVlLiAgVGhlIHRyYW5zbGF0aW9uIGlzIGNhc2UtaW5zZW5zaXRpdmUuCiAuU0ggUkVUVVJOIFZBTFVFCi0uQiBwY2FwX3RzdGFtcF90eXBlX25hbWVfdG9fdmFsKCkKKy5CUiBwY2FwX3RzdGFtcF90eXBlX25hbWVfdG9fdmFsICgpCiByZXR1cm5zIHRpbWUgc3RhbXAgdHlwZSB2YWx1ZSBvbiBzdWNjZXNzIGFuZAogLkIgUENBUF9FUlJPUgogb24gZmFpbHVyZS4KKy5TSCBCQUNLV0FSRCBDT01QQVRJQklMSVRZCisuUFAKK1RoaXMgZnVuY3Rpb24gYmVjYW1lIGF2YWlsYWJsZSBpbiBsaWJwY2FwIHJlbGVhc2UgMS4yLjEuCiAuU0ggU0VFIEFMU08KLXBjYXAoM1BDQVApLCBwY2FwX3RzdGFtcF90eXBlX3ZhbF90b19uYW1lKDNQQ0FQKQorLkJSIHBjYXAgKDNQQ0FQKSwKKy5CUiBwY2FwX3RzdGFtcF90eXBlX3ZhbF90b19uYW1lICgzUENBUCkKZGlmZiAtLWdpdCBhL3BjYXBfdHN0YW1wX3R5cGVfdmFsX3RvX25hbWUuM3BjYXAgYi9wY2FwX3RzdGFtcF90eXBlX3ZhbF90b19uYW1lLjNwY2FwCmluZGV4IDI2MTU1NGUuLjU5NThlODEgMTAwNjQ0Ci0tLSBhL3BjYXBfdHN0YW1wX3R5cGVfdmFsX3RvX25hbWUuM3BjYXAKKysrIGIvcGNhcF90c3RhbXBfdHlwZV92YWxfdG9fbmFtZS4zcGNhcApAQCAtMTgsNyArMTgsNyBAQAogLlwiIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAuXCIgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KIC5cIgotLlRIIFBDQVBfVFNUQU1QX1RZUEVfVkFMX1RPX05BTUUgM1BDQVAgIjEyIERlY2VtYmVyIDIwMTMiCisuVEggUENBUF9UU1RBTVBfVFlQRV9WQUxfVE9fTkFNRSAzUENBUCAiMjIgQXVndXN0IDIwMTgiCiAuU0ggTkFNRQogcGNhcF90c3RhbXBfdHlwZV92YWxfdG9fbmFtZSwgcGNhcF90c3RhbXBfdHlwZV92YWxfdG9fZGVzY3JpcHRpb24gXC0gZ2V0CiBhIG5hbWUgb3IgZGVzY3JpcHRpb24gZm9yIGEgdGltZSBzdGFtcCB0eXBlIHZhbHVlCkBAIC0zNCwxNiArMzQsMjAgQEAKIC5mdAogLmZpCiAuU0ggREVTQ1JJUFRJT04KLS5CIHBjYXBfdHN0YW1wX3R5cGVfdmFsX3RvX25hbWUoKQorLkJSIHBjYXBfdHN0YW1wX3R5cGVfdmFsX3RvX25hbWUgKCkKIHRyYW5zbGF0ZXMgYSB0aW1lIHN0YW1wIHR5cGUgdmFsdWUgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdGltZSBzdGFtcCB0eXBlCiBuYW1lLgogLkIgTlVMTAogaXMgcmV0dXJuZWQgb24gZmFpbHVyZS4KIC5QUAotLkIgcGNhcF90c3RhbXBfdHlwZV92YWxfdG9fZGVzY3JpcHRpb24oKQorLkJSIHBjYXBfdHN0YW1wX3R5cGVfdmFsX3RvX2Rlc2NyaXB0aW9uICgpCiB0cmFuc2xhdGVzIGEgdGltZSBzdGFtcCB0eXBlIHZhbHVlIHRvIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhhdCB0aW1lCiBzdGFtcCB0eXBlLgogLkIgTlVMTAogaXMgcmV0dXJuZWQgb24gZmFpbHVyZS4KKy5TSCBCQUNLV0FSRCBDT01QQVRJQklMSVRZCisuUFAKK1RoZXNlIGZ1bmN0aW9ucyBiZWNhbWUgYXZhaWxhYmxlIGluIGxpYnBjYXAgcmVsZWFzZSAxLjIuMS4KIC5TSCBTRUUgQUxTTwotcGNhcCgzUENBUCksIHBjYXBfdHN0YW1wX3R5cGVfbmFtZV90b192YWwoM1BDQVApCisuQlIgcGNhcCAoM1BDQVApLAorLkJSIHBjYXBfdHN0YW1wX3R5cGVfbmFtZV90b192YWwgKDNQQ0FQKQpkaWZmIC0tZ2l0IGEvcG9ydGFiaWxpdHkuaCBiL3BvcnRhYmlsaXR5LmgKaW5kZXggYjM2MTI1NC4uZDYwNjM2OCAxMDA2NDQKLS0tIGEvcG9ydGFiaWxpdHkuaAorKysgYi9wb3J0YWJpbGl0eS5oCkBAIC0zOCw2ICszOCw3IEBACiAgKiBIZWxwZXJzIGZvciBwb3J0YWJpbGl0eSBiZXR3ZWVuIFdpbmRvd3MgYW5kIFVOKlggYW5kIGJldHdlZW4gZGlmZmVyZW50CiAgKiBmbGF2b3JzIG9mIFVOKlguCiAgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4JLyogd2UgZGVjbGFyZSB2YXJhcmdzIGZ1bmN0aW9ucyBvbiBzb21lIHBsYXRmb3JtcyAqLwogCiAjaW5jbHVkZSAicGNhcC9mdW5jYXR0cnMuaCIKIApAQCAtNDUsNDYgKzQ2LDQwIEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jaWZuZGVmIEhBVkVfU1RSTENQWQotIC8qCi0gICogTWFjcm8gdGhhdCBkb2VzIHRoZSBzYW1lIHRoaW5nIGFzIHN0cmxjcHkoKS4KLSAgKi8KLSAjaWYgZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfX01JTkdXMzJfXykKLSAgLyoKLSAgICogc3RybmNweV9zKCkgaXMgc3VwcG9ydGVkIGF0IGxlYXN0IGJhY2sgdG8gVmlzdWFsCi0gICAqIFN0dWRpbyAyMDA1LgotICAgKi8KLSAgI2RlZmluZSBzdHJsY3B5KHgsIHksIHopIFwKLQlzdHJuY3B5X3MoKHgpLCAoeiksICh5KSwgX1RSVU5DQVRFKQotCi0gI2Vsc2UKLSAgI2RlZmluZSBzdHJsY3B5KHgsIHksIHopIFwKLQkoc3RybmNweSgoeCksICh5KSwgKHopKSwgXAotCSAoKHopIDw9IDAgPyAwIDogKCh4KVsoeikgLSAxXSA9ICdcMCcpKSwgXAotCSAodm9pZCkgc3RybGVuKCh5KSkpCi0gI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJMQ0FUCisgICNkZWZpbmUgcGNhcF9zdHJsY2F0CXN0cmxjYXQKKyNlbHNlCisgICNpZiBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fTUlOR1czMl9fKQorICAgIC8qCisgICAgICogc3RybmNhdF9zKCkgaXMgc3VwcG9ydGVkIGF0IGxlYXN0IGJhY2sgdG8gVmlzdWFsCisgICAgICogU3R1ZGlvIDIwMDU7IHdlIHJlcXVpcmUgVmlzdWFsIFN0dWRpbyAyMDE1IG9yIGxhdGVyLgorICAgICAqLworICAgICNkZWZpbmUgcGNhcF9zdHJsY2F0KHgsIHksIHopIFwKKwlzdHJuY2F0X3MoKHgpLCAoeiksICh5KSwgX1RSVU5DQVRFKQorICAjZWxzZQorICAgIC8qCisgICAgICogRGVmaW5lIGl0IG91cnNlbHZlcy4KKyAgICAgKi8KKyAgICBleHRlcm4gc2l6ZV90IHBjYXBfc3RybGNhdChjaGFyICogcmVzdHJpY3QgZHN0LCBjb25zdCBjaGFyICogcmVzdHJpY3Qgc3JjLCBzaXplX3QgZHN0c2l6ZSk7CisgICNlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgSEFWRV9TVFJMQ0FUCi0gLyoKLSAgKiBNYWNybyB0aGF0IGRvZXMgdGhlIHNhbWUgdGhpbmcgYXMgc3RybGNhdCgpLgotICAqLwotICNpZiBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fTUlOR1czMl9fKQotICAvKgotICAgKiBzdHJuY2F0X3MoKSBpcyBzdXBwb3J0ZWQgYXQgbGVhc3QgYmFjayB0byBWaXN1YWwKLSAgICogU3R1ZGlvIDIwMDUuCi0gICAqLwotICAjZGVmaW5lIHN0cmxjYXQoeCwgeSwgeikgXAotCXN0cm5jYXRfcygoeCksICh6KSwgKHkpLCBfVFJVTkNBVEUpCi0gI2Vsc2UKLSAgLyoKLSAgICogQU5TSSBDIHNheXMgc3RybmNhdCgpIGFsd2F5cyBudWxsLXRlcm1pbmF0ZXMgaXRzIGZpcnN0IGFyZ3VtZW50LAotICAgKiBzbyAxKSB3ZSBkb24ndCBuZWVkIHRvIGV4cGxpY2l0bHkgbnVsbC10ZXJtaW5hdGUgdGhlIHN0cmluZwotICAgKiBvdXJzZWx2ZXMgYW5kIDIpIHdlIG5lZWQgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIG51bGwgdGVybWluYXRvci4KLSAgICovCi0gICNkZWZpbmUgc3RybGNhdCh4LCB5LCB6KSBcCi0Jc3RybmNhdCgoeCksICh5KSwgKHopIC0gc3RybGVuKCh4KSkgLSAxKQotICNlbmRpZgorI2lmZGVmIEhBVkVfU1RSTENQWQorICAjZGVmaW5lIHBjYXBfc3RybGNweQlzdHJsY3B5CisjZWxzZQorICAjaWYgZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfX01JTkdXMzJfXykKKyAgICAvKgorICAgICAqIHN0cm5jcHlfcygpIGlzIHN1cHBvcnRlZCBhdCBsZWFzdCBiYWNrIHRvIFZpc3VhbAorICAgICAqIFN0dWRpbyAyMDA1OyB3ZSByZXF1aXJlIFZpc3VhbCBTdHVkaW8gMjAxNSBvciBsYXRlci4KKyAgICAgKi8KKyAgICAjZGVmaW5lIHBjYXBfc3RybGNweSh4LCB5LCB6KSBcCisJc3RybmNweV9zKCh4KSwgKHopLCAoeSksIF9UUlVOQ0FURSkKKyAgI2Vsc2UKKyAgICAvKgorICAgICAqIERlZmluZSBpdCBvdXJzZWx2ZXMuCisgICAgICovCisgICAgZXh0ZXJuIHNpemVfdCBwY2FwX3N0cmxjcHkoY2hhciAqIHJlc3RyaWN0IGRzdCwgY29uc3QgY2hhciAqIHJlc3RyaWN0IHNyYywgc2l6ZV90IGRzdHNpemUpOworICAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgX01TQ19WRVIKQEAgLTEwMCwzOCArOTUsMjEgQEAKICNlbmRpZgogCiAvKgotICogT24gV2luZG93cywgc25wcmludGYoKSwgd2l0aCB0aGF0IG5hbWUgYW5kIHdpdGggQzk5IGJlaGF2aW9yIC0gaS5lLiwKLSAqIGd1YXJhbnRlZWluZyB0aGF0IHRoZSBmb3JtYXR0ZWQgc3RyaW5nIGlzIG51bGwtdGVybWluYXRlZCAtIGRpZG4ndAotICogYXBwZWFyIHVudGlsIFZpc3VhbCBTdHVkaW8gMjAxNS4gIFByaW9yIHRvIHRoYXQsIHRoZSBDIHJ1bnRpbWUgaGFkCi0gKiBvbmx5IF9zbnByaW50ZigpLCB3aGljaCAqZG9lc24ndCogZ3VhcmFudGVlIHRoYXQgdGhlIHN0cmluZyBpcwotICogbnVsbC10ZXJtaW5hdGVkIGlmIGl0IGlzIHRydW5jYXRlZCBkdWUgdG8gdGhlIGJ1ZmZlciBiZWluZyB0b28KLSAqIHNtYWxsLiAgV2UgdGhlcmVmb3JlIGNhbid0IGp1c3QgZGVmaW5lIHNucHJpbnRmIHRvIGJlIF9zbnByaW50ZgotICogYW5kIGRlZmluZSB2c25wcmludGYgdG8gYmUgX3ZzbnByaW50ZiwgYXMgd2UncmUgcmVseWluZyBvbiBudWxsLQotICogdGVybWluYXRpb24gb2Ygc3RyaW5ncyBpbiBhbGwgY2FzZXMuCi0gKgotICogV2UgYWxzbyB3YW50IHRvIGFsbG93IHRoaXMgdG8gYmUgYnVpbHQgd2l0aCB2ZXJzaW9ucyBvZiBWaXN1YWwgU3R1ZGlvCi0gKiBwcmlvciB0byBWUyAyMDE1LCBzbyB3ZSBjYW4ndCByZWx5IG9uIHNucHJpbnRmKCkgYmVpbmcgcHJlc2VudC4KLSAqCi0gKiBBbmQgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCwgaWYgd2Ugc3VwcG9ydCBwbHVnaW5zIGluIHRoZSBmdXR1cmUsCi0gKiBhIHJvdXRpbmUgd2l0aCBDOTkgc25wcmludGYoKSBiZWhhdmlvciB3aWxsIGJlIGF2YWlsYWJsZSB0byB0aGVtLgotICogV2UgYWxzbyBkb24ndCB3YW50IGl0IHRvIGNvbGxpZGUgd2l0aCB0aGUgQyBsaWJyYXJ5IHNucHJpbnRmKCkgaWYKLSAqIHRoZXJlIGlzIG9uZS4KLSAqCi0gKiBTbyB3ZSBtYWtlIHBjYXBfc25wcmludGYoKSBhbmQgcGNhcF92c25wcmludGYoKSBhdmFpbGFibGUsIGVpdGhlciBieQotICogI2RlZmluaW5nIHRoZW0gdG8gYmUgc25wcmludGYgb3IgdnNucHJpbnRmLCByZXNwZWN0aXZlbHksIG9yIGJ5Ci0gKiBkZWZpbmluZyBvdXIgb3duIHZlcnNpb25zIGFuZCBleHBvcnRpbmcgdGhlbS4KKyAqIFdlIHdhbnQgYXNwcmludGYoKSwgZm9yIHNvbWUgY2FzZXMgd2hlcmUgd2UgdXNlIGl0IHRvIGNvbnN0cnVjdAorICogZHluYW1pY2FsbHktYWxsb2NhdGVkIHZhcmlhYmxlLWxlbmd0aCBzdHJpbmdzOyBpdCdzIHByZXNlbnQgb24KKyAqIHNvbWUsIGJ1dCBub3QgYWxsLCBwbGF0Zm9ybXMuCiAgKi8KLSNpZmRlZiBIQVZFX1NOUFJJTlRGCi0jZGVmaW5lIHBjYXBfc25wcmludGYgc25wcmludGYKKyNpZmRlZiBIQVZFX0FTUFJJTlRGCisjZGVmaW5lIHBjYXBfYXNwcmludGYgYXNwcmludGYKICNlbHNlCi1leHRlcm4gaW50IHBjYXBfc25wcmludGYoY2hhciAqLCBzaXplX3QsIFBDQVBfRk9STUFUX1NUUklORyhjb25zdCBjaGFyICopLCAuLi4pCi0gICAgUENBUF9QUklOVEZMSUtFKDMsIDQpOworZXh0ZXJuIGludCBwY2FwX2FzcHJpbnRmKGNoYXIgKiosIFBDQVBfRk9STUFUX1NUUklORyhjb25zdCBjaGFyICopLCAuLi4pCisgICAgUENBUF9QUklOVEZMSUtFKDIsIDMpOwogI2VuZGlmCiAKLSNpZmRlZiBIQVZFX1ZTTlBSSU5URgotI2RlZmluZSBwY2FwX3ZzbnByaW50ZiB2c25wcmludGYKKyNpZmRlZiBIQVZFX1ZBU1BSSU5URgorI2RlZmluZSBwY2FwX3Zhc3ByaW50ZiB2YXNwcmludGYKICNlbHNlCi1leHRlcm4gaW50IHBjYXBfdnNucHJpbnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIHZhX2xpc3QgYXApOworZXh0ZXJuIGludCBwY2FwX3Zhc3ByaW50ZihjaGFyICoqLCBjb25zdCBjaGFyICosIHZhX2xpc3QgYXApOwogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1NUUlRPS19SCkBAIC0xNDYsNyArMTI0LDYgQEAKICAgICAvKgogICAgICAqIERlZmluZSBpdCBvdXJzZWx2ZXMuCiAgICAgICovCi0gICAgI2RlZmluZSBORUVEX1NUUlRPS19SCiAgICAgZXh0ZXJuIGNoYXIgKnBjYXBfc3RydG9rX3IoY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiopOwogICAjZW5kaWYKICNlbmRpZiAvKiBIQVZFX1NUUlRPS19SICovCmRpZmYgLS1naXQgYS9wb3N0X3VwZGF0ZS5zaCBiL3Bvc3RfdXBkYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNjYzFiMWQKLS0tIC9kZXYvbnVsbAorKysgYi9wb3N0X3VwZGF0ZS5zaApAQCAtMCwwICsxLDE0IEBACisjIS9iaW4vYmFzaAorCisjICQxIFBhdGggdG8gdGhlIG5ldyB2ZXJzaW9uLgorIyAkMiBQYXRoIHRvIHRoZSBvbGQgdmVyc2lvbi4KKworY3AgLWEgLW4gJDIvY29uZmlnLmggJDEvCitjcCAtYSAkMi8uZ2l0aWdub3JlICQxLworY3AgLWEgLW4gJDIvcGNhcC1uZXRmaWx0ZXItbGludXgtYW5kcm9pZC5oICQxLworY3AgLWEgLW4gJDIvcGNhcC1uZXRmaWx0ZXItbGludXgtYW5kcm9pZC5jICQxLworY3AgLWEgLW4gJDIvZ3JhbW1hci5jICQxLworY3AgLWEgLW4gJDIvZ3JhbW1hci5oICQxLworY3AgLWEgLW4gJDIvc2Nhbm5lci5jICQxLworY3AgLWEgLW4gJDIvc2Nhbm5lci5oICQxLworCmRpZmYgLS1naXQgYS9ycGNhcC1wcm90b2NvbC5jIGIvcnBjYXAtcHJvdG9jb2wuYwppbmRleCA2OTJmN2M1Li4wY2RjMGJhIDEwMDY0NAotLS0gYS9ycGNhcC1wcm90b2NvbC5jCisrKyBiL3JwY2FwLXByb3RvY29sLmMKQEAgLTYxLDYgKzYxLDggQEAKICAqCiAgKiBccGFyYW0gc29jazogdGhlIHNvY2tldCB3ZSBhcmUgY3VycmVudGx5IHVzaW5nLgogICoKKyAqIFxwYXJhbSBzc2w6IGlmIGNvbXBpbGVkIHdpdGggb3BlbnNzbCwgdGhlIG9wdGlvbmFsIHNzbCBoYW5kbGVyIHRvIHVzZSB3aXRoIHRoZSBhYm92ZSBzb2NrZXQuCisgKgogICogXHBhcmFtIHZlcjogdGhlIHByb3RvY29sIHZlcnNpb24gd2Ugd2FudCB0byBwdXQgaW4gdGhlIHJlcGx5LgogICoKICAqIFxwYXJhbSBlcnJjb2RlOiBhIGludGVnZXIgd2hpY2ggdGVsbHMgdGhlIG90aGVyIHBhcnR5IHRoZSB0eXBlIG9mIGVycm9yCkBAIC03OCw3ICs4MCw3IEBACiAgKiBlcnJvciBtZXNzYWdlIGlzIHJldHVybmVkIGluIHRoZSAnZXJyYnVmJyB2YXJpYWJsZS4KICAqLwogaW50Ci1ycGNhcF9zZW5kZXJyb3IoU09DS0VUIHNvY2ssIHVpbnQ4IHZlciwgdW5zaWduZWQgc2hvcnQgZXJyY29kZSwgY29uc3QgY2hhciAqZXJyb3IsIGNoYXIgKmVycmJ1ZikKK3JwY2FwX3NlbmRlcnJvcihTT0NLRVQgc29jaywgU1NMICpzc2wsIHVpbnQ4IHZlciwgdW5zaWduZWQgc2hvcnQgZXJyY29kZSwgY29uc3QgY2hhciAqZXJyb3IsIGNoYXIgKmVycmJ1ZikKIHsKIAljaGFyIHNlbmRidWZbUlBDQVBfTkVUQlVGX1NJWkVdOwkvKiB0ZW1wb3JhcnkgYnVmZmVyIGluIHdoaWNoIGRhdGEgdG8gYmUgc2VudCBpcyBidWZmZXJlZCAqLwogCWludCBzZW5kYnVmaWR4ID0gMDsJCQkvKiBpbmRleCB3aGljaCBrZWVwcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGN1cnJlbnRseSBidWZmZXJlZCAqLwpAQCAtOTksNyArMTAxLDcgQEAKIAkJUlBDQVBfTkVUQlVGX1NJWkUsIFNPQ0tCVUZfQlVGRkVSSVpFLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoc29ja19zZW5kKHNvY2ssIHNlbmRidWYsIHNlbmRidWZpZHgsIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSkgPCAwKQorCWlmIChzb2NrX3NlbmQoc29jaywgc3NsLCBzZW5kYnVmLCBzZW5kYnVmaWR4LCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpIDwgMCkKIAkJcmV0dXJuIC0xOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9ycGNhcC1wcm90b2NvbC5oIGIvcnBjYXAtcHJvdG9jb2wuaAppbmRleCA4M2ViZGM1Li5hNjljZjgwIDEwMDY0NAotLS0gYS9ycGNhcC1wcm90b2NvbC5oCisrKyBiL3JwY2FwLXByb3RvY29sLmgKQEAgLTYzLDgwICs2MywyMCBAQAogICoKICAqIFZlcnNpb24gbmVnb3RpYXRpb24gaXMgZG9uZSBhcyBwYXJ0IG9mIHRoZSBhdXRoZW50aWNhdGlvbiBwcm9jZXNzOgogICoKLSAqIFRoZSBjbGllbnQgc2VuZHMgYW4gYXV0aGVudGljYXRpb24gcmVxdWVzdCwgd2l0aCB0aGUgdmVyc2lvbiBudW1iZXIKLSAqIGluIHRoZSByZXF1ZXN0IGJlaW5nIHRoZSBtYXhpbXVtIHZlcnNpb24gaXQgc3VwcG9ydHMuCisgKiBUaGUgY2xpZW50IHNlbmRzIGFuIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QsIHdpdGggYSB2ZXJzaW9uIG51bWJlcgorICogb2YgMC4gIEFsbCBzZXJ2ZXJzIG11c3QgYWNjZXB0IGF1dGhlbnRpY2F0aW9uIHJlcXVlc3RzIHdpdGggYSB2ZXJzaW9uCisgKiBudW1iZXIgb2YgMCwgZXZlbiBpZiB0aGV5IGRvbid0IHN1cHBvcnQgdmVyc2lvbiAwIGZvciBhbnkgb3RoZXIKKyAqIHJlcXVlc3RzLgogICoKLSAqIElmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgdGhhdCB2ZXJzaW9uLCBpdCBhdHRlbXB0cyB0byBhdXRoZW50aWNhdGUgdGhlCi0gKiBjbGllbnQsIGFuZCByZXBsaWVzIGFzIGFwcHJvcHJpYXRlLCB3aXRoIHRoZSB2ZXJzaW9uIG51bWJlciBpbiB0aGUKLSAqIHJlcGx5IGJlaW5nIHRoYXQgdmVyc2lvbi4KKyAqIFRoZSBzZXJ2ZXIgYXR0ZW1wdHMgdG8gYXV0aGVudGljYXRlIHRoZSBjbGllbnQuICBJZiB0aGF0IHN1Y2NlZWRzLAorICogb2xkZXIgc2VydmVycyAtIHdoaWNoIG9ubHkgc3VwcG9ydCB2ZXJzaW9uIDAgLSB3aWxsIHNlbmQgYW4KKyAqIGF1dGhlbnRpY2F0aW9uIHJlcGx5IHdpdGggbm8gcGF5bG9hZC4gIE5ld2VyIHNlcnZlcnMgLSB3aGljaCBtaWdodAorICogc3VwcG9ydCBvdGhlciB2ZXJzaW9ucyAtIHdpbGwgc2VuZCBhbiBhdXRoZW50aWNhdGlvbiByZXBseSB3aXRoCisgKiBhIHBheWxvYWQgZ2l2aW5nIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHZlcnNpb25zIGl0IHN1cHBvcnRzLgogICoKLSAqIElmIHRoZSBzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IHRoYXQgdmVyc2lvbiBiZWNhdXNlIGl0J3MgdG9vIGxhcmdlLAotICogaXQgcmVwbGllcyB3aXRoIGEgUlBDQVBfTVNHX0VSUk9SIG1lc3NhZ2UsIHdpdGggdGhlIG1heGltdW0gdmVyc2lvbgotICogdGhleSBzdXBwb3J0IGFzIHRoZSB2ZXJzaW9uIG51bWJlciBpbiB0aGUgcmVwbHksIGFuZCB3aXRoIHRoZSBlcnJvcgotICogY29kZSBiZWluZyBQQ0FQX0VSUl9XUk9OR1ZFUi4KLSAqCi0gKiBJZiB0aGUgc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCB0aGF0IHZlcnNpb24gYmVjYXVzZSBpdCdzIHRvbyBzbWFsbCwKLSAqIGl0IHJlcGxpZXMgd2l0aCBhIFJQQ0FQX01TR19FUlJPUiBtZXNzYWdlLCB3aXRoIHRoYXQgdmVyc2lvbiBhcwotICogdGhlIHZlcnNpb24gbnVtYmVyIGluIHRoZSByZXBseSwgYW5kIHdpdGggdGhlIGVycm9yIGNvZGUgYmVpbmcKLSAqIFBDQVBfRVJSX1dST05HVkVSLgotICoKLSAqIElmIHRoZSBjbGllbnQgc3VwcG9ydHMgdGhhdCB2ZXJzaW9uLCBpdCByZXRyaWVzIHRoZSBhdXRoZW50aWNhdGlvbgotICogd2l0aCB0aGF0IHZlcnNpb24gYW5kLCBpZiB0aGF0IGZhaWxzIGZvciBhbnkgcmVhc29uLCBpbmNsdWRpbmcKLSAqIFBDQVBfRVJSX1dST05HVkVSLCBmYWlscy4gIE90aGVyd2lzZSwgaXQgZmFpbHMsIHRlbGxpbmcgaXRzIGNhbGxlcgotICogdGhhdCB0aGVyZSdzIG5vIHZlcnNpb24gdGhhdCBib3RoIHN1cHBvcnQuCi0gKgotICogVGhpcyByZXF1aXJlcyB0aGF0IHRoZSBzZXQgb2YgdmVyc2lvbnMgc3VwcG9ydGVkIGJ5IGEgY2xpZW50IG9yCi0gKiBzZXJ2ZXIgYmUgYSByYW5nZSBvZiBpbnRlZ2Vycywgd2l0aCBubyBnYXBzLiAgVGh1czoKLSAqCi0gKiB0aGUgY2xpZW50J3MgdmVyc2lvbiBzZXQgaXMgW0NtaW4sIENtYXhdLCB3aXRoIENtaW4gPD0gQ21heDsKLSAqCi0gKiB0aGUgc2VydmVyJ3MgdmVyc2lvbiBzZXQgaXMgW1NtaW4sIFNtYXhdLCB3aXRoIFNtaW4gPD0gU21heDsKLSAqCi0gKiB0aGUgY2xpZW50IHNlbmRzIENtYXggYXMgdGhlIHZlcnNpb24gbnVtYmVyIGluIHRoZSBpbml0aWFsCi0gKiBhdXRoZW50aWNhdGlvbiByZXF1ZXN0OwotICoKLSAqIGlmIHRoZSBzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IHRoZSB2ZXJzaW9uIHNlbnQgYnkgdGhlIGNsaWVudCwKLSAqIGVpdGhlciBTbWF4IDwgQ21heCBvciBTbWluID4gQ21heCAoYmVjYXVzZSB0aGUgY2xpZW50IHNlbnQgQ21heAotICogdG8gdGhlIHNlcnZlciwgYW5kIHRoZSBzZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IGl0KTsKLSAqCi0gKiBpZiBTbWF4IDwgQ21heDoKLSAqCi0gKiAgICB0aGUgc2VydmVyIHNlbmRzIFNtYXggYXMgdGhlIHZlcnNpb24gbnVtYmVyIGluIHRoZSBSUENBUF9NU0dfRVJST1IvCi0gKiAgICBQQ0FQX0VSUl9XUk9OR1ZFUiBtZXNzYWdlIC0gdGhlIGNsaWVudCB3aWxsIGFjY2VwdCB0aGlzIGJlY2F1c2UKLSAqICAgIENtYXggIT0gMCwgYXMgdGhlc2UgbnVtYmVycyBhcmUgdW5zaWduZWQsIGFuZCB0aGlzIG1lYW5zIHRoYXQKLSAqICAgIHRoaXMgaXNuJ3QgYW4gb2xkIGNsaWVudCB0aGF0IHJlamVjdHMgYWxsIG1lc3NhZ2VzIHdpdGggYSBub24temVybwotICogICAgdmVyc2lvbiBudW1iZXIsIGl0J3MgYSBuZXcgY2xpZW50IHRoYXQgYWNjZXB0cyBSUENBUF9NU0dfRVJST1IKLSAqICAgIG1lc3NhZ2VzIG5vIG1hdHRlciB3aGF0IHRoZSB2ZXJzaW9uIGlzOwotICoKLSAqICAgIGlmIFNtYXggPj0gQ21pbiwgYm90aCB0aGUgY2xpZW50IGFuZCB0aGUgc2VydmVyIGNhbiB1c2UgaXQsIGFuZAotICogICAgdGhlIGNsaWVudCByZXRyaWVzIHdpdGggU21heDsKLSAqCi0gKiAgICBpZiBTbWF4IDwgQ21pbiwgdGhlcmUgaXMgbm8gdmVyc2lvbiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgY2FuCi0gKiAgICBib3RoIHN1cHBvcnQuCi0gKgotICogaWYgU21pbiA+IENtYXg6Ci0gKgotICogICAgdGhlIHNlcnZlciBzZW5kcyBDbWF4IGFzIHRoZSB2ZXJzaW9uIG51bWJlciBpbiB0aGUgUlBDQVBfTVNHX0VSUk9SLwotICogICAgUENBUF9FUlJfV1JPTkdWRVIgbWVzc2FnZSAtIHRoZSBjbGllbnQgd2lsbCBhY2NlcHQgdGhpcyBiZWNhdXNlCi0gKiAgICBDbWF4IGlzIGEgdmFsaWQgY2xpZW50IHZlcnNpb24gbnVtYmVyLgotICoKLSAqICAgIHRoZSBjbGllbnQgd2lsbCByZXRyeSB3aXRoIENtYXgsIGdldCB0aGUgc2FtZSB2ZXJzaW9uIGZhaWx1cmUsCi0gKiAgICBhbmQgcmVwb3J0IHRoYXQgdGhlcmUgaXMgbm8gdmVyc2lvbiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgY2FuCi0gKiAgICBib3RoIHN1cHBvcnQgKGFzIHRoZSB2ZXJzaW9uIHNldHMgYXJlIGRpc2pvaW50KS4KLSAqCi0gKiBPbGQgbmVnb3RpYXRpb24tdW5hd2FyZSBjbGllbnRzIGp1c3Qgc2VuZCB2ZXJzaW9uIDAgYW5kLCBpZiB0aGV5Ci0gKiBnZXQgYmFjayBQQ0FQX0VSUl9XUk9OR1ZFUiwgdHJlYXQgaXQgYXMgYSBmYXRhbCBlcnJvci4gIFRoaXMKLSAqIG1lYW5zIHRoZXknbGwgZmFpbCB0byB0YWxrIHRvIGFueSBzZXJ2ZXIgdGhhdCBjYW4ndCBoYW5kbGUKLSAqIHZlcnNpb24gMCwgd2hpY2ggaXMgdGhlIGFwcHJvcHJpYXRlIHRoaW5nIHRvIGRvLCBhcyB0aGV5IGNhbgotICogb25seSB1c2UgdmVyc2lvbiAwLgotICoKLSAqIE9sZCBuZWdvdGlhdGlvbi11bmF3YXJlIHNlcnZlcnMgZmFpbCBpZiB0aGV5IGdldCBhIHZlcnNpb24gb3RoZXIKLSAqIHRoYW4gMCwgc2VuZGluZyBiYWNrIFBDQVBfRVJSX1dST05HVkVSIHdpdGggdmVyc2lvbiAwLCB3aGljaCBpcwotICogdGhlIG9ubHkgdmVyc2lvbiwgYW5kIHRodXMgYm90aCB0aGUgbWluaW11bSBhbmQgbWF4aW11bSB2ZXJzaW9uLAotICogdGhleSBzdXBwb3J0LiAgVGhlIGNsaWVudCB3aWxsIGVpdGhlciBmYWlsIGlmIGl0IGRvZXNuJ3Qgc3VwcG9ydAotICogdmVyc2lvbiAwLCBvciB3aWxsIHJldHJ5IHdpdGggdmVyc2lvbiAwIGFuZCBzdWNjZWVkLCBzbyBpdCB3aWxsCi0gKiBmYWlsIHdpdGggc2VydmVycyB0aGF0IGNhbid0IGhhbmRsZSB2ZXJzaW9uIDAgb3Igd2lsbCBuZWdvdGlhdGUKLSAqIHZlcnNpb24gMCB3aXRoIHNlcnZlcnMgdGhhdCBjYW4gaGFuZGxlIHZlcnNpb24gMC4KKyAqIFRoZSBjbGllbnQgYXR0ZW1wdHMgdG8gZmluZCB0aGUgbGFyZ2VzdCB2ZXJzaW9uIG51bWJlciB0aGF0IGlzCisgKiBpbiBib3RoIGl0cyByYW5nZSBvZiBzdXBwb3J0ZWQgdmVyc2lvbnMgYW5kIHRoZSBzZXJ2ZXIncyBzdXBwb3J0ZWQKKyAqIHZlcnNpb25zLiAgSWYgaXQgZmFpbHMsIGl0IGdpdmVzIHVwOyBvdGhlcndpc2UsIGl0IHVzZXMgdGhhdCB2ZXJzaW9uLgogICovCiAjZGVmaW5lIFJQQ0FQX01JTl9WRVJTSU9OIDAKICNkZWZpbmUgUlBDQVBfTUFYX1ZFUlNJT04gMApAQCAtMTQ4LDcgKzg4LDggQEAKICAqIGNvbXBhcmlzb24gd2lsbCBhbHdheXMgc3VjY2VlZC4KICAqLwogI2lmIFJQQ0FQX01JTl9WRVJTSU9OID09IDAKLSNkZWZpbmUgUlBDQVBfVkVSU0lPTl9JU19TVVBQT1JURUQodikJKCh2KSA8PSBSUENBUF9NQVhfVkVSU0lPTikKKyNkZWZpbmUgUlBDQVBfVkVSU0lPTl9JU19TVVBQT1JURUQodikJXAorCSgodikgPD0gUlBDQVBfTUFYX1ZFUlNJT04pCiAjZWxzZQogI2RlZmluZSBSUENBUF9WRVJTSU9OX0lTX1NVUFBPUlRFRCh2KQlcCiAJKCh2KSA+PSBSUENBUF9NSU5fVkVSU0lPTiAmJiAodikgPD0gUlBDQVBfTUFYX1ZFUlNJT04pCkBAIC0xNzYsNiArMTE3LDEyIEBACiAgKiBmb3IgYmV0dGVyIGFsaWdubWVudC4KICAqIFRoZXNlIHN0cnVjdHVyZXMgaGF2ZSBiZWVuIGNyZWF0ZWQgaW4gb3JkZXIgdG8gYmUgY29ycmVjdGx5IGFsaWduZWQgdG8KICAqIGEgMzItYml0IGJvdW5kYXJ5LCBidXQgYmUgY2FyZWZ1bCBpbiBhbnkgY2FzZS4KKyAqCisgKiBUaGUgbGF5b3V0IG9mIHRoZXNlIHN0cnVjdHVyZXMgTVVTVCBub3QgYmUgY2hhbmdlZC4gIElmIGEgcGFja2V0CisgKiBmb3JtYXQgaXMgZGlmZmVyZW50IGluIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgcHJvdG9jb2wsIHZlcnNpb25zCisgKiBvZiB0aGUgc3RydWN0dXJlIHNob3VsZCBiZSBwcm92aWRlZCBmb3IgYWxsIHRoZSBkaWZmZXJlbnQgdmVyc2lvbnMgb3IKKyAqIHZlcnNpb24gcmFuZ2VzIChpZiBtb3JlIHRoYW4gb25lIHZlcnNpb24gb2YgdGhlIHByb3RvY29sIGhhcyB0aGUgc2FtZQorICogbGF5b3V0KSB0aGF0IHdlIHN1cHBvcnQuCiAgKi8KIAogLyoKQEAgLTE5OSw2ICsxNDYsMTkgQEAKIAl1aW50MzIgcGxlbjsJLyogTGVuZ3RoIG9mIHRoZSBwYXlsb2FkIG9mIHRoaXMgUlBDQVAgbWVzc2FnZSAqLwogfTsKIAorLyoKKyAqIEZvcm1hdCBvZiBkYXRhIHRoYXQgbWF5IGFwcGVhciBhdCB0aGUgZW5kIG9mIGFuIGF1dGhlbnRpY2F0aW9uIHJlcGx5LAorICogZ2l2aW5nIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHZlcnNpb25zIG9mIHRoZSBwcm90b2NvbCB0aGF0IHRoZQorICogc2VydmVyIHN1cHBvcnRzLgorICoKKyAqIE9sZGVyIHNlcnZlcnMgZG9uJ3QgcHJvdmlkZSB0aGlzOyB0aGV5IHN1cHBvcnQgb25seSB2ZXJzaW9uIDAuCisgKi8KK3N0cnVjdCBycGNhcF9hdXRocmVwbHkKK3sKKwl1aW50OCBtaW52ZXJzOwkvKiBNaW5pbXVtIHZlcnNpb24gc3VwcG9ydGVkICovCisJdWludDggbWF4dmVyczsJLyogTWF4aW11bSB2ZXJzaW9uIHN1cHBvcnRlZCAqLworfTsKKwogLyogRm9ybWF0IG9mIHRoZSBtZXNzYWdlIGZvciB0aGUgaW50ZXJmYWNlIGRlc2NyaXB0aW9uIChmaW5kYWxsZGV2cyBjb21tYW5kKSAqLwogc3RydWN0IHJwY2FwX2ZpbmRhbGxkZXZzX2lmCiB7CkBAIC0yOTksNyArMjU5LDcgQEAKIHN0cnVjdCBycGNhcF9vcGVucmVwbHkKIHsKIAlpbnQzMiBsaW5rdHlwZTsJLyogTGluayB0eXBlICovCi0JaW50MzIgdHpvZmY7CS8qIFRpbWV6b25lIG9mZnNldCAqLworCWludDMyIHR6b2ZmOwkvKiBUaW1lem9uZSBvZmZzZXQgLSBub3QgdXNlZCBieSBuZXdlciBjbGllbnRzICovCiB9OwogCiAvKiBGb3JtYXQgb2YgdGhlIG1lc3NhZ2UgdGhhdCBzdGFydHMgYSByZW1vdGUgY2FwdHVyZSAoc3RhcnRjYXAgY29tbWFuZCkgKi8KQEAgLTMyNywxMCArMjg3LDE0IEBACiAgKi8KIHN0cnVjdCBycGNhcF9wa3RoZHIKIHsKKwkvKgorCSAqIFRoaXMgcHJvdG9jb2wgbmVlZHMgdG8gYmUgdXBkYXRlZCB3aXRoIGEgbmV3IHZlcnNpb24gYmVmb3JlCisJICogMjAzOC0wMS0xOSAwMzoxNDowNyBVVEMuCisJICovCiAJdWludDMyIHRpbWVzdGFtcF9zZWM7CS8qICdzdHJ1Y3QgdGltZXZhbCcgY29tcGF0aWJsZSwgaXQgcmVwcmVzZW50cyB0aGUgJ3R2X3NlYycgZmllbGQgKi8KIAl1aW50MzIgdGltZXN0YW1wX3VzZWM7CS8qICdzdHJ1Y3QgdGltZXZhbCcgY29tcGF0aWJsZSwgaXQgcmVwcmVzZW50cyB0aGUgJ3R2X3VzZWMnIGZpZWxkICovCiAJdWludDMyIGNhcGxlbjsJCS8qIExlbmd0aCBvZiBwb3J0aW9uIHByZXNlbnQgaW4gdGhlIGNhcHR1cmUgKi8KLQl1aW50MzIgbGVuOwkJLyogUmVhbCBsZW5ndGggdGhpcyBwYWNrZXQgKG9mZiB3aXJlKSAqLworCXVpbnQzMiBsZW47CQkvKiBSZWFsIGxlbmd0aCBvZiB0aGlzIHBhY2tldCAob2ZmIHdpcmUpICovCiAJdWludDMyIG5wa3Q7CQkvKiBPcmRpbmFsIG51bWJlciBvZiB0aGUgcGFja2V0IChpLmUuIHRoZSBmaXJzdCBvbmUgY2FwdHVyZWQgaGFzICcxJywgdGhlIHNlY29uZCBvbmUgJzInLCBldGMpICovCiB9OwogCkBAIC0zNDIsNyArMzA2LDcgQEAKIAl1aW50MzIgbml0ZW1zOwkJLyogTnVtYmVyIG9mIGl0ZW1zIGNvbnRhaW5lZCBpbnRvIHRoZSBmaWx0ZXIgKGUuZy4gQlBGIGluc3RydWN0aW9ucyBmb3IgQlBGIGZpbHRlcnMpICovCiB9OwogCi0vKiBTdHJ1Y3R1cmUgdGhhdCBrZWVwcyBhIHNpbmdsZSBCUEYgaW5zdHVjdGlvbjsgaXQgaXMgcmVwZWF0ZWQgJ25pbnNuJyB0aW1lcyBhY2NvcmRpbmcgdG8gdGhlICdycGNhcF9maWx0ZXJicGYnIGhlYWRlciAqLworLyogU3RydWN0dXJlIHRoYXQga2VlcHMgYSBzaW5nbGUgQlBGIGluc3RydWN0aW9uOyBpdCBpcyByZXBlYXRlZCAnbmluc24nIHRpbWVzIGFjY29yZGluZyB0byB0aGUgJ3JwY2FwX2ZpbHRlcmJwZicgaGVhZGVyICovCiBzdHJ1Y3QgcnBjYXBfZmlsdGVyYnBmX2luc24KIHsKIAl1aW50MTYgY29kZTsJLyogb3Bjb2RlIG9mIHRoZSBpbnN0cnVjdGlvbiAqLwpAQCAtMzc4LDIwICszNDIsMjUgQEAKIAl1aW50MzIgdmFsdWU7CS8qIFBhcmFtZXRlciByZWxhdGVkIHRvIHRoZSBzYW1wbGluZyBtZXRob2QgKi8KIH07CiAKLS8qIE1lc3NhZ2VzIGZpZWxkIGNvZGluZyAqLworLyoKKyAqIE1lc3NhZ2VzIGZpZWxkIGNvZGluZy4KKyAqCisgKiBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgaW4gbWVzc2FnZXMgc2VudCBvdmVyIHRoZSBuZXR3b3JrLCBhbmQgTVVTVAorICogbm90IGJlIGNoYW5nZWQuCisgKi8KICNkZWZpbmUgUlBDQVBfTVNHX0lTX1JFUExZCQkweDA4MAkvKiBGbGFnIGluZGljYXRpbmcgYSByZXBseSAqLwogCi0jZGVmaW5lIFJQQ0FQX01TR19FUlJPUgkJCTEJLyogTWVzc2FnZSB0aGF0IGtlZXBzIGFuIGVycm9yIG5vdGlmaWNhdGlvbiAqLwotI2RlZmluZSBSUENBUF9NU0dfRklOREFMTElGX1JFUQkJMgkvKiBSZXF1ZXN0IHRvIGxpc3QgYWxsIHRoZSByZW1vdGUgaW50ZXJmYWNlcyAqLwotI2RlZmluZSBSUENBUF9NU0dfT1BFTl9SRVEJCTMJLyogUmVxdWVzdCB0byBvcGVuIGEgcmVtb3RlIGRldmljZSAqLwotI2RlZmluZSBSUENBUF9NU0dfU1RBUlRDQVBfUkVRCQk0CS8qIFJlcXVlc3QgdG8gc3RhcnQgYSBjYXB0dXJlIG9uIGEgcmVtb3RlIGRldmljZSAqLwotI2RlZmluZSBSUENBUF9NU0dfVVBEQVRFRklMVEVSX1JFUQk1CS8qIFNlbmQgYSBjb21waWxlZCBmaWx0ZXIgaW50byB0aGUgcmVtb3RlIGRldmljZSAqLwotI2RlZmluZSBSUENBUF9NU0dfQ0xPU0UJCQk2CS8qIENsb3NlIHRoZSBjb25uZWN0aW9uIHdpdGggdGhlIHJlbW90ZSBwZWVyICovCi0jZGVmaW5lIFJQQ0FQX01TR19QQUNLRVQJCTcJLyogVGhpcyBpcyBhICdkYXRhJyBtZXNzYWdlLCB3aGljaCBjYXJyaWVzIGEgbmV0d29yayBwYWNrZXQgKi8KLSNkZWZpbmUgUlBDQVBfTVNHX0FVVEhfUkVRCQk4CS8qIE1lc3NhZ2UgdGhhdCBrZWVwcyB0aGUgYXV0aGVudGljYXRpb24gcGFyYW1ldGVycyAqLwotI2RlZmluZSBSUENBUF9NU0dfU1RBVFNfUkVRCQk5CS8qIEl0IHJlcXVpcmVzIHRvIGhhdmUgbmV0d29yayBzdGF0aXN0aWNzICovCi0jZGVmaW5lIFJQQ0FQX01TR19FTkRDQVBfUkVRCQkxMAkvKiBTdG9wcyB0aGUgY3VycmVudCBjYXB0dXJlLCBrZWVwaW5nIHRoZSBkZXZpY2Ugb3BlbiAqLwotI2RlZmluZSBSUENBUF9NU0dfU0VUU0FNUExJTkdfUkVRCTExCS8qIFNldCBzYW1wbGluZyBwYXJhbWV0ZXJzICovCisjZGVmaW5lIFJQQ0FQX01TR19FUlJPUgkJCTB4MDEJLyogTWVzc2FnZSB0aGF0IGtlZXBzIGFuIGVycm9yIG5vdGlmaWNhdGlvbiAqLworI2RlZmluZSBSUENBUF9NU0dfRklOREFMTElGX1JFUQkJMHgwMgkvKiBSZXF1ZXN0IHRvIGxpc3QgYWxsIHRoZSByZW1vdGUgaW50ZXJmYWNlcyAqLworI2RlZmluZSBSUENBUF9NU0dfT1BFTl9SRVEJCTB4MDMJLyogUmVxdWVzdCB0byBvcGVuIGEgcmVtb3RlIGRldmljZSAqLworI2RlZmluZSBSUENBUF9NU0dfU1RBUlRDQVBfUkVRCQkweDA0CS8qIFJlcXVlc3QgdG8gc3RhcnQgYSBjYXB0dXJlIG9uIGEgcmVtb3RlIGRldmljZSAqLworI2RlZmluZSBSUENBUF9NU0dfVVBEQVRFRklMVEVSX1JFUQkweDA1CS8qIFNlbmQgYSBjb21waWxlZCBmaWx0ZXIgaW50byB0aGUgcmVtb3RlIGRldmljZSAqLworI2RlZmluZSBSUENBUF9NU0dfQ0xPU0UJCQkweDA2CS8qIENsb3NlIHRoZSBjb25uZWN0aW9uIHdpdGggdGhlIHJlbW90ZSBwZWVyICovCisjZGVmaW5lIFJQQ0FQX01TR19QQUNLRVQJCTB4MDcJLyogVGhpcyBpcyBhICdkYXRhJyBtZXNzYWdlLCB3aGljaCBjYXJyaWVzIGEgbmV0d29yayBwYWNrZXQgKi8KKyNkZWZpbmUgUlBDQVBfTVNHX0FVVEhfUkVRCQkweDA4CS8qIE1lc3NhZ2UgdGhhdCBrZWVwcyB0aGUgYXV0aGVudGljYXRpb24gcGFyYW1ldGVycyAqLworI2RlZmluZSBSUENBUF9NU0dfU1RBVFNfUkVRCQkweDA5CS8qIEl0IHJlcXVpcmVzIHRvIGhhdmUgbmV0d29yayBzdGF0aXN0aWNzICovCisjZGVmaW5lIFJQQ0FQX01TR19FTkRDQVBfUkVRCQkweDBBCS8qIFN0b3BzIHRoZSBjdXJyZW50IGNhcHR1cmUsIGtlZXBpbmcgdGhlIGRldmljZSBvcGVuICovCisjZGVmaW5lIFJQQ0FQX01TR19TRVRTQU1QTElOR19SRVEJMHgwQgkvKiBTZXQgc2FtcGxpbmcgcGFyYW1ldGVycyAqLwogCiAjZGVmaW5lIFJQQ0FQX01TR19GSU5EQUxMSUZfUkVQTFkJKFJQQ0FQX01TR19GSU5EQUxMSUZfUkVRIHwgUlBDQVBfTVNHX0lTX1JFUExZKQkJLyogS2VlcHMgdGhlIGxpc3Qgb2YgYWxsIHRoZSByZW1vdGUgaW50ZXJmYWNlcyAqLwogI2RlZmluZSBSUENBUF9NU0dfT1BFTl9SRVBMWQkJKFJQQ0FQX01TR19PUEVOX1JFUSB8IFJQQ0FQX01TR19JU19SRVBMWSkJCS8qIFRoZSByZW1vdGUgZGV2aWNlIGhhcyBiZWVuIG9wZW5lZCBjb3JyZWN0bHkgKi8KQEAgLTQxMCwyNCArMzc5LDMyIEBACiAKICNkZWZpbmUgUlBDQVBfVVBEQVRFRklMVEVSX0JQRiAxCQkJLyogVGhpcyBjb2RlIHRlbGxzIHVzIHRoYXQgdGhlIGZpbHRlciBpcyBlbmNvZGVkIHdpdGggdGhlIEJQRi9OUEYgc3ludGF4ICovCiAKLS8qIE5ldHdvcmsgZXJyb3IgY29kZXMgKi8KLSNkZWZpbmUgUENBUF9FUlJfTkVUVwkJMQkvKiBOZXR3b3JrIGVycm9yICovCi0jZGVmaW5lIFBDQVBfRVJSX0lOSVRUSU1FT1VUCTIJLyogVGhlIFJQQ0FQIGluaXRpYWwgdGltZW91dCBoYXMgZXhwaXJlZCAqLwotI2RlZmluZSBQQ0FQX0VSUl9BVVRICQkzCS8qIEdlbmVyaWMgYXV0aGVudGljYXRpb24gZXJyb3IgKi8KLSNkZWZpbmUgUENBUF9FUlJfRklOREFMTElGCTQJLyogR2VuZXJpYyBmaW5kYWxsZGV2cyBlcnJvciAqLwotI2RlZmluZSBQQ0FQX0VSUl9OT1JFTU9URUlGCTUJLyogVGhlIGZpbmRhbGxkZXZzIHdhcyBvaywgYnV0IHRoZSByZW1vdGUgZW5kIGhhZCBubyBpbnRlcmZhY2VzIHRvIGxpc3QgKi8KLSNkZWZpbmUgUENBUF9FUlJfT1BFTgkJNgkvKiBHZW5lcmljIHBjYXBfb3BlbiBlcnJvciAqLwotI2RlZmluZSBQQ0FQX0VSUl9VUERBVEVGSUxURVIJNwkvKiBHZW5lcmljIHVwZGF0ZWZpbHRlciBlcnJvciAqLwotI2RlZmluZSBQQ0FQX0VSUl9HRVRTVEFUUwk4CS8qIEdlbmVyaWMgcGNhcF9zdGF0cyBlcnJvciAqLwotI2RlZmluZSBQQ0FQX0VSUl9SRUFERVgJCTkJLyogR2VuZXJpYyBwY2FwX25leHRfZXggZXJyb3IgKi8KLSNkZWZpbmUgUENBUF9FUlJfSE9TVE5PQVVUSAkxMAkvKiBUaGUgaG9zdCBpcyBub3QgYXV0aG9yaXplZCB0byBjb25uZWN0IHRvIHRoaXMgc2VydmVyICovCi0jZGVmaW5lIFBDQVBfRVJSX1JFTU9URUFDQ0VQVAkxMQkvKiBHZW5lcmljIHBjYXBfcmVtb3RlYWNjZXB0IGVycm9yICovCi0jZGVmaW5lIFBDQVBfRVJSX1NUQVJUQ0FQVFVSRQkxMgkvKiBHZW5lcmljIHBjYXBfc3RhcnRjYXB0dXJlIGVycm9yICovCi0jZGVmaW5lIFBDQVBfRVJSX0VORENBUFRVUkUJMTMJLyogR2VuZXJpYyBwY2FwX2VuZGNhcHR1cmUgZXJyb3IgKi8KLSNkZWZpbmUgUENBUF9FUlJfUlVOVElNRVRJTUVPVVQJMTQJLyogVGhlIFJQQ0FQIHJ1bi10aW1lIHRpbWVvdXQgaGFzIGV4cGlyZWQgKi8KLSNkZWZpbmUgUENBUF9FUlJfU0VUU0FNUExJTkcJMTUJLyogRXJyb3IgZHVyaW5nIHRoZSBzZXR0aW5ncyBvZiBzYW1wbGluZyBwYXJhbWV0ZXJzICovCi0jZGVmaW5lIFBDQVBfRVJSX1dST05HTVNHCTE2CS8qIFRoZSBvdGhlciBlbmQgZW5kcG9pbnQgc2VudCBhIG1lc3NhZ2Ugd2hpY2ggaGFzIG5vdCBiZWVuIHJlY29nbml6ZWQgKi8KLSNkZWZpbmUgUENBUF9FUlJfV1JPTkdWRVIJMTcJLyogVGhlIG90aGVyIGVuZCBlbmRwb2ludCBoYXMgYSB2ZXJzaW9uIG51bWJlciB0aGF0IGlzIG5vdCBjb21wYXRpYmxlIHdpdGggb3VyICovCisvKgorICogTmV0d29yayBlcnJvciBjb2Rlcy4KKyAqCisgKiBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgaW4gbWVzc2FnZXMgc2VudCBvdmVyIHRoZSBuZXR3b3JrLCBhbmQgTVVTVAorICogbm90IGJlIGNoYW5nZWQuCisgKi8KKyNkZWZpbmUgUENBUF9FUlJfTkVUVwkJCTEJLyogTmV0d29yayBlcnJvciAqLworI2RlZmluZSBQQ0FQX0VSUl9JTklUVElNRU9VVAkJMgkvKiBUaGUgUlBDQVAgaW5pdGlhbCB0aW1lb3V0IGhhcyBleHBpcmVkICovCisjZGVmaW5lIFBDQVBfRVJSX0FVVEgJCQkzCS8qIEdlbmVyaWMgYXV0aGVudGljYXRpb24gZXJyb3IgKi8KKyNkZWZpbmUgUENBUF9FUlJfRklOREFMTElGCQk0CS8qIEdlbmVyaWMgZmluZGFsbGRldnMgZXJyb3IgKi8KKyNkZWZpbmUgUENBUF9FUlJfTk9SRU1PVEVJRgkJNQkvKiBUaGUgZmluZGFsbGRldnMgd2FzIG9rLCBidXQgdGhlIHJlbW90ZSBlbmQgaGFkIG5vIGludGVyZmFjZXMgdG8gbGlzdCAqLworI2RlZmluZSBQQ0FQX0VSUl9PUEVOCQkJNgkvKiBHZW5lcmljIHBjYXBfb3BlbiBlcnJvciAqLworI2RlZmluZSBQQ0FQX0VSUl9VUERBVEVGSUxURVIJCTcJLyogR2VuZXJpYyB1cGRhdGVmaWx0ZXIgZXJyb3IgKi8KKyNkZWZpbmUgUENBUF9FUlJfR0VUU1RBVFMJCTgJLyogR2VuZXJpYyBwY2FwX3N0YXRzIGVycm9yICovCisjZGVmaW5lIFBDQVBfRVJSX1JFQURFWAkJCTkJLyogR2VuZXJpYyBwY2FwX25leHRfZXggZXJyb3IgKi8KKyNkZWZpbmUgUENBUF9FUlJfSE9TVE5PQVVUSAkJMTAJLyogVGhlIGhvc3QgaXMgbm90IGF1dGhvcml6ZWQgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZlciAqLworI2RlZmluZSBQQ0FQX0VSUl9SRU1PVEVBQ0NFUFQJCTExCS8qIEdlbmVyaWMgcGNhcF9yZW1vdGVhY2NlcHQgZXJyb3IgKi8KKyNkZWZpbmUgUENBUF9FUlJfU1RBUlRDQVBUVVJFCQkxMgkvKiBHZW5lcmljIHBjYXBfc3RhcnRjYXB0dXJlIGVycm9yICovCisjZGVmaW5lIFBDQVBfRVJSX0VORENBUFRVUkUJCTEzCS8qIEdlbmVyaWMgcGNhcF9lbmRjYXB0dXJlIGVycm9yICovCisjZGVmaW5lIFBDQVBfRVJSX1JVTlRJTUVUSU1FT1VUCQkxNAkvKiBUaGUgUlBDQVAgcnVuLXRpbWUgdGltZW91dCBoYXMgZXhwaXJlZCAqLworI2RlZmluZSBQQ0FQX0VSUl9TRVRTQU1QTElORwkJMTUJLyogRXJyb3IgZHVyaW5nIHRoZSBzZXR0aW5ncyBvZiBzYW1wbGluZyBwYXJhbWV0ZXJzICovCisjZGVmaW5lIFBDQVBfRVJSX1dST05HTVNHCQkxNgkvKiBUaGUgb3RoZXIgZW5kIGVuZHBvaW50IHNlbnQgYSBtZXNzYWdlIHdoaWNoIGhhcyBub3QgYmVlbiByZWNvZ25pemVkICovCisjZGVmaW5lIFBDQVBfRVJSX1dST05HVkVSCQkxNwkvKiBUaGUgb3RoZXIgZW5kIGVuZHBvaW50IGhhcyBhIHZlcnNpb24gbnVtYmVyIHRoYXQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBvdXIgKi8KKyNkZWZpbmUgUENBUF9FUlJfQVVUSF9GQUlMRUQJCTE4CS8qIFRoZSB1c2VyIGNvdWxkbid0IGJlIGF1dGhlbnRpY2F0ZWQgKi8KKyNkZWZpbmUgUENBUF9FUlJfVExTX1JFUVVJUkVECQkxOQkvKiBUaGUgc2VydmVyIHJlcXVpcmVzIFRMUyB0byBjb25uZWN0ICovCisjZGVmaW5lIFBDQVBfRVJSX0FVVEhfVFlQRV9OT1RTVVAJMjAJLyogVGhlIGF1dGhlbnRpY2F0aW9uIHR5cGUgaXNuJ3Qgc3VwcG9ydGVkICovCiAKIC8qCiAgKiBcYnJpZWYgQnVmZmVyIHVzZWQgYnkgc29ja2V0IGZ1bmN0aW9ucyB0byBzZW5kLXJlY2VpdmUgcGFja2V0cy4KQEAgLTQ0Miw5ICs0MTksMTAgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlICJzb2NrdXRpbHMuaCIKKyNpbmNsdWRlICJzc2x1dGlscy5oIgogCiBleHRlcm4gdm9pZCBycGNhcF9jcmVhdGVoZHIoc3RydWN0IHJwY2FwX2hlYWRlciAqaGVhZGVyLCB1aW50OCB2ZXIsIHVpbnQ4IHR5cGUsIHVpbnQxNiB2YWx1ZSwgdWludDMyIGxlbmd0aCk7CiBleHRlcm4gY29uc3QgY2hhciAqcnBjYXBfbXNnX3R5cGVfc3RyaW5nKHVpbnQ4IHR5cGUpOwotZXh0ZXJuIGludCBycGNhcF9zZW5kZXJyb3IoU09DS0VUIHNvY2ssIHVpbnQ4IHZlciwgdWludDE2IGVycmNvZGUsIGNvbnN0IGNoYXIgKmVycm9yLCBjaGFyICplcnJidWYpOworZXh0ZXJuIGludCBycGNhcF9zZW5kZXJyb3IoU09DS0VUIHNvY2ssIFNTTCAqc3NsLCB1aW50OCB2ZXIsIHVpbnQxNiBlcnJjb2RlLCBjb25zdCBjaGFyICplcnJvciwgY2hhciAqZXJyYnVmKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9ycGNhcGQvLmdpdGlnbm9yZSBiL3JwY2FwZC8uZ2l0aWdub3JlCmluZGV4IDUwYzI3YWIuLmFlYzRmZGIgMTAwNjQ0Ci0tLSBhL3JwY2FwZC8uZ2l0aWdub3JlCisrKyBiL3JwY2FwZC8uZ2l0aWdub3JlCkBAIC0zLDMgKzMsNCBAQAogKi5vCiBycGNhcGQKIHJwY2FwZC5tYW5hZG1pbgorcnBjYXBkLWNvbmZpZy5tYW5maWxlCmRpZmYgLS1naXQgYS9ycGNhcGQvQ01ha2VMaXN0cy50eHQgYi9ycGNhcGQvQ01ha2VMaXN0cy50eHQKaW5kZXggYjNiMTZlMy4uZjJiZDEyZCAxMDA2NDQKLS0tIGEvcnBjYXBkL0NNYWtlTGlzdHMudHh0CisrKyBiL3JwY2FwZC9DTWFrZUxpc3RzLnR4dApAQCAtNTAsOCArNTAsOCBAQAogICBpZihXSU4zMikKICAgICBzZXQoUlBDQVBEX0VYVFJBX1NPVVJDRVMKICAgICAgICAgd2luMzItc3ZjLmMKKyAgICAgICAgJHtwY2FwX1NPVVJDRV9ESVJ9L2NoYXJjb252LmMKICAgICAgICAgJHtwY2FwX1NPVVJDRV9ESVJ9L21pc3NpbmcvZ2V0b3B0LmMKLSAgICAgICAgJHtwY2FwX1NPVVJDRV9ESVJ9L21pc3Npbmcvd2luX3NucHJpbnRmLmMKICAgICAgICAgcnBjYXBkLnJjKQogICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtwY2FwX1NPVVJDRV9ESVJ9L3JwY2FwZCAke3BjYXBfU09VUkNFX0RJUn0vbWlzc2luZykKICAgZW5kaWYoV0lOMzIpCkBAIC01OSwxMCArNTksMTEgQEAKICAgYWRkX2V4ZWN1dGFibGUocnBjYXBkCiAgICAgZGFlbW9uLmMKICAgICBmaWxlY29uZi5jCi0gICAgbG9nLXN0ZGVyci5jCisgICAgbG9nLmMKICAgICBycGNhcGQuYwogICAgICR7cGNhcF9TT1VSQ0VfRElSfS9ycGNhcC1wcm90b2NvbC5jCiAgICAgJHtwY2FwX1NPVVJDRV9ESVJ9L3NvY2t1dGlscy5jCisgICAgJHtwY2FwX1NPVVJDRV9ESVJ9L3NzbHV0aWxzLmMKICAgICAke3BjYXBfU09VUkNFX0RJUn0vZm10dXRpbHMuYwogICAgICR7UlBDQVBEX0VYVFJBX1NPVVJDRVN9CiAgICkKQEAgLTcxLDYgKzcyLDQ2IEBACiAgICAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHJwY2FwZCBQUk9QRVJUSUVTIENPTVBJTEVfRkxBR1MgJHtDX0FERElUSU9OQUxfRkxBR1N9KQogICBlbmRpZigpCiAKKyAgaWYoTk9UICIke1NBTklUSVpFUl9GTEFHU30iIFNUUkVRVUFMICIiKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhycGNhcGQgUFJPUEVSVElFUworICAgICAgICBMSU5LX0ZMQUdTICIke1NBTklUSVpFUl9GTEFHU30iKQorICBlbmRpZigpCisKKyAgIworICAjIEJ5IGRlZmF1bHQsIGJ1aWxkIHJwY2FwZCB1bml2ZXJzYWwgd2l0aCB0aGUgYXBwcm9wcmlhdGUgc2V0IG9mCisgICMgYXJjaGl0ZWN0dXJlcyBmb3IgdGhlIE9TIG9uIHdoaWNoIHdlJ3JlIGRvaW5nIHRoZSBidWlsZC4KKyAgIworICBpZihBUFBMRSBBTkQgIiR7Q01BS0VfT1NYX0FSQ0hJVEVDVFVSRVN9IiBTVFJFUVVBTCAiIikKKyAgICAjCisgICAgIyBHZXQgdGhlIG1ham9yIHZlcnNpb24gb2YgRGFyd2luLgorICAgICMKKyAgICBzdHJpbmcoUkVHRVggTUFUQ0ggIl4oWzAtOV0rKSIgU1lTVEVNX1ZFUlNJT05fTUFKT1IgIiR7Q01BS0VfU1lTVEVNX1ZFUlNJT059IikKKworICAgIGlmKFNZU1RFTV9WRVJTSU9OX01BSk9SIEVRVUFMIDkpCisgICAgICAjCisgICAgICAjIExlb3BhcmQuICBCdWlsZCBmb3IgMzItYml0IHg4NiBhbmQgMzItYml0IFBvd2VyUEMsIHdpdGgKKyAgICAgICMgMzItYml0IHg4NiBmaXJzdC4KKyAgICAgICMKKyAgICAgIHNldChPU1hfUFJPR1JBTV9BUkNISVRFQ1RVUkVTICJpMzg2O3BwYyIpCisgICAgZWxzZWlmKFNZU1RFTV9WRVJTSU9OX01BSk9SIEVRVUFMIDEwKQorICAgICAgIworICAgICAgIyBTbm93IExlb3BhcmQuICBCdWlsZCBmb3IgeDg2LTY0IGFuZCAzMi1iaXQgeDg2LCB3aXRoCisgICAgICAjIHg4Ni02NCBmaXJzdC4KKyAgICAgICMKKyAgICAgIHNldChPU1hfUFJPR1JBTV9BUkNISVRFQ1RVUkVTICJ4ODZfNjQ7aTM4NiIpCisgICAgZWxzZSgpCisgICAgICAjCisgICAgICAjIFBvc3QtU25vdyBMZW9wYXJkLiAgQnVpbGQgb25seSBmb3IgeDg2LTY0LgorICAgICAgIyBYWFggLSB1cGRhdGUgaWYgYW5kIHdoZW4gQXBwbGUgYWRkcyBBUk0tYmFzZWQgTWFjcy4KKyAgICAgICMgKFlvdSdyZSBvbiB5b3VyIG93biBmb3IgaU9TIGV0Yy4pCisgICAgICAjCisgICAgICBzZXQoT1NYX1BST0dSQU1fQVJDSElURUNUVVJFUyAieDg2XzY0IikKKyAgICBlbmRpZigpCisKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMocnBjYXBkIFBST1BFUlRJRVMKKyAgICAgIE9TWF9BUkNISVRFQ1RVUkVTICIke09TWF9QUk9HUkFNX0FSQ0hJVEVDVFVSRVN9IikKKyAgZW5kaWYoKQorCiAgIGlmKFdJTjMyKQogICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhycGNhcGQgJHtMSUJSQVJZX05BTUV9CiAgICAgICAke1JQQ0FQRF9MSU5LX0xJQlJBUklFU30gJHtQQ0FQX0xJTktfTElCUkFSSUVTfSAke0NNQUtFX1RIUkVBRF9MSUJTX0lOSVR9KQpAQCAtOTIsMTEgKzEzMywxNyBAQAogCiAgIHNldChNQU5BRE1JTl9FWFBBTkQgcnBjYXBkLm1hbmFkbWluLmluKQogCi0gIGlmKE1TVkMgQU5EIENNQUtFX1NJWkVPRl9WT0lEX1AgRVFVQUwgOCkKLSAgICBpbnN0YWxsKFRBUkdFVFMgcnBjYXBkIERFU1RJTkFUSU9OIGJpbi9hbWQ2NCkKLSAgZWxzZShNU1ZDIEFORCBDTUFLRV9TSVpFT0ZfVk9JRF9QIEVRVUFMIDgpCi0gICAgaW5zdGFsbChUQVJHRVRTIHJwY2FwZCBERVNUSU5BVElPTiBiaW4pCi0gIGVuZGlmKE1TVkMgQU5EIENNQUtFX1NJWkVPRl9WT0lEX1AgRVFVQUwgOCkKKyAgc2V0KE1BTkZJTEVfRVhQQU5EIHJwY2FwZC1jb25maWcubWFuZmlsZS5pbikKKworICBpZihOT1QgTVNWQykKKyAgICBpbnN0YWxsKFRBUkdFVFMgcnBjYXBkIERFU1RJTkFUSU9OIHNiaW4pCisgIGVsc2UoTk9UIE1TVkMpCisgICAgaWYoQ01BS0VfU0laRU9GX1ZPSURfUCBFUVVBTCA4KQorICAgICAgaW5zdGFsbChUQVJHRVRTIHJwY2FwZCBERVNUSU5BVElPTiBiaW4vYW1kNjQpCisgICAgZWxzZShDTUFLRV9TSVpFT0ZfVk9JRF9QIEVRVUFMIDgpCisgICAgICBpbnN0YWxsKFRBUkdFVFMgcnBjYXBkIERFU1RJTkFUSU9OIGJpbikKKyAgICBlbmRpZihDTUFLRV9TSVpFT0ZfVk9JRF9QIEVRVUFMIDgpCisgIGVuZGlmKE5PVCBNU1ZDKQogCiAgICMgT24gVU4qWCwgYW5kIG9uIFdpbmRvd3Mgd2hlbiBub3QgdXNpbmcgTVNWQywgZ2VuZXJhdGUgcHJvY2VzcyBtYW4KICAgIyBwYWdlcyBhbmQgYXJyYW5nZSB0aGF0IHRoZXkgYmUgaW5zdGFsbGVkLgpAQCAtMTE0LDUgKzE2MSwxMyBAQAogICAgICAgICBzZXQoTUFOQURNSU4gJHtNQU5BRE1JTn0gJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9LyR7TUFOUEFHRX0pCiAgICAgZW5kZm9yZWFjaChURU1QTEFURV9NQU5QQUdFKQogICAgIGluc3RhbGwoRklMRVMgJHtNQU5BRE1JTn0gREVTVElOQVRJT04gJHtDTUFLRV9JTlNUQUxMX01BTkRJUn0vbWFuJHtNQU5fQURNSU5fQ09NTUFORFN9KQorCisgICAgc2V0KE1BTkZJTEUgIiIpCisgICAgZm9yZWFjaChURU1QTEFURV9NQU5QQUdFICR7TUFORklMRV9FWFBBTkR9KQorICAgICAgICBzdHJpbmcoUkVQTEFDRSAiLm1hbmZpbGUuaW4iICIuJHtNQU5fRklMRV9GT1JNQVRTfSIgTUFOUEFHRSAke1RFTVBMQVRFX01BTlBBR0V9KQorICAgICAgICBjb25maWd1cmVfZmlsZSgke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vJHtURU1QTEFURV9NQU5QQUdFfSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vJHtNQU5QQUdFfSBAT05MWSkKKyAgICAgICAgc2V0KE1BTkZJTEUgJHtNQU5GSUxFfSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vJHtNQU5QQUdFfSkKKyAgICBlbmRmb3JlYWNoKFRFTVBMQVRFX01BTlBBR0UpCisgICAgaW5zdGFsbChGSUxFUyAke01BTkZJTEV9IERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9NQU5ESVJ9L21hbiR7TUFOX0ZJTEVfRk9STUFUU30pCiAgIGVuZGlmKE5PVCBNU1ZDKQogZW5kaWYoV0lOMzIgT1IgKChDTUFLRV9VU0VfUFRIUkVBRFNfSU5JVCBPUiBQVEhSRUFEU19GT1VORCkgQU5EIEhBVkVfQ1JZUFQpKQpkaWZmIC0tZ2l0IGEvcnBjYXBkL01ha2VmaWxlLmluIGIvcnBjYXBkL01ha2VmaWxlLmluCmluZGV4IGQzZTAyYzEuLjMyOTA2NzkgMTAwNjQ0Ci0tLSBhL3JwY2FwZC9NYWtlZmlsZS5pbgorKysgYi9ycGNhcGQvTWFrZWZpbGUuaW4KQEAgLTM4LDYgKzM4LDcgQEAKIAogIyBWUEFUSAogc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKIFZQQVRIID0gQHNyY2RpckAKIAogIwpAQCAtNjYsNyArNjcsNyBAQAogUlBDQVBEX0xJQlMgPSBAUlBDQVBEX0xJQlNACiAKICMgU3RhbmRhcmQgQ0ZMQUdTCi1GVUxMX0NGTEFHUyA9ICQoQ0NPUFQpICQoSU5DTFMpICQoREVGUykgJChDRkxBR1MpCitGVUxMX0NGTEFHUyA9ICQoQ0NPUFQpIEBWX1BST0dfQ0NPUFRfRkFUQCAkKElOQ0xTKSAkKERFRlMpICQoQ0ZMQUdTKQogCiBJTlNUQUxMID0gQElOU1RBTExACiBJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQApAQCAtODEsMTAgKzgyLDEwIEBACiAKIFNSQyA9CWRhZW1vbi5jIFwKIAlmaWxlY29uZi5jIFwKLQlsb2ctc3RkZXJyLmMgXAorCWxvZy5jIFwKIAlycGNhcGQuYwogCi1PQkogPQkkKFNSQzouYz0ubykgLi4vcnBjYXAtcHJvdG9jb2wubyAuLi9zb2NrdXRpbHMubyAuLi9mbXR1dGlscy5vCitPQkogPQkkKFNSQzouYz0ubykgLi4vcnBjYXAtcHJvdG9jb2wubyAuLi9zb2NrdXRpbHMubyAuLi9mbXR1dGlscy5vIC4uL3NzbHV0aWxzLm8KIFBVQkhEUiA9CiAKIEhEUiA9ICQoUFVCSERSKSBsb2cuaApAQCAtOTcsMTUgKzk4LDE5IEBACiBNQU5BRE1JTiA9IFwKIAlycGNhcGQubWFuYWRtaW4uaW4KIAorTUFORklMRSA9IFwKKwlycGNhcGQtY29uZmlnLm1hbmZpbGUuaW4KKwogcnBjYXBkOiAkKE9CSikgLi4vbGlicGNhcC5hCi0JJChDQykgJChDQ09QVCkgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgJChPQkopIC4uL2xpYnBjYXAuYSAkKExJQlMpICQoUlBDQVBEX0xJQlMpICQoUFRIUkVBRF9MSUJTKQorCSQoQ0MpICQoQ0NPUFQpICQoQ0ZMQUdTKSAkKExERkxBR1MpIEBWX1BST0dfTERGTEFHU19GQVRAIFwKKwkgICAgLW8gJEAgJChPQkopIC4uL2xpYnBjYXAuYSAkKExJQlMpICQoUlBDQVBEX0xJQlMpICQoUFRIUkVBRF9MSUJTKQogY2xlYW46CiAJcm0gLWYgJChDTEVBTkZJTEVTKQogCiBkaXN0Y2xlYW46IGNsZWFuCiAJcm0gLWYgTWFrZWZpbGUgY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgY29uZmlnLnN0YXR1cyBcCiAJICAgIGNvbmZpZy5oIHN0YW1wLWggc3RhbXAtaC5pbgotCXJtIC1mICQoTUFOQURNSU46LmluPSkKKwlybSAtZiAkKE1BTkFETUlOOi5pbj0pICQoTUFORklMRTouaW49KQogCXJtIC1yZiBhdXRvbTR0ZS5jYWNoZQogCiBpbnN0YWxsOiBycGNhcGQKQEAgLTExNCwxNyArMTE5LDI0IEBACiAJJChJTlNUQUxMX1BST0dSQU0pIHJwY2FwZCAkKERFU1RESVIpJChzYmluZGlyKS9ycGNhcGQKIAlbIC1kICQoREVTVERJUikkKG1hbmRpcikvbWFuQE1BTl9BRE1JTl9DT01NQU5EU0AgXSB8fCBcCiAJICAgIChta2RpciAtcCAkKERFU1RESVIpJChtYW5kaXIpL21hbkBNQU5fQURNSU5fQ09NTUFORFNAOyBjaG1vZCA3NTUgJChERVNURElSKSQobWFuZGlyKS9tYW5ATUFOX0FETUlOX0NPTU1BTkRTQCkKKwlbIC1kICQoREVTVERJUikkKG1hbmRpcikvbWFuQE1BTl9GSUxFX0ZPUk1BVFNAIF0gfHwgXAorCSAgICAobWtkaXIgLXAgJChERVNURElSKSQobWFuZGlyKS9tYW5ATUFOX0ZJTEVfRk9STUFUU0A7IGNobW9kIDc1NSAkKERFU1RESVIpJChtYW5kaXIpL21hbkBNQU5fRklMRV9GT1JNQVRTQCkKIAlmb3IgaSBpbiAkKE1BTkFETUlOKTsgZG8gXAogCQkkKElOU1RBTExfREFUQSkgYGVjaG8gJCRpIHwgc2VkICdzLy5tYW5hZG1pbi5pbi8ubWFuYWRtaW4vJ2AgXAogCQkgICAgJChERVNURElSKSQobWFuZGlyKS9tYW5ATUFOX0FETUlOX0NPTU1BTkRTQC9gZWNobyAkJGkgfCBzZWQgJ3MvLm1hbmFkbWluLmluLy5ATUFOX0FETUlOX0NPTU1BTkRTQC8nYDsgZG9uZQorCWZvciBpIGluICQoTUFORklMRSk7IGRvIFwKKwkJJChJTlNUQUxMX0RBVEEpIGBlY2hvICQkaSB8IHNlZCAncy8ubWFuZmlsZS5pbi8ubWFuZmlsZS8nYCBcCisJCSAgICAkKERFU1RESVIpJChtYW5kaXIpL21hbkBNQU5fRklMRV9GT1JNQVRTQC9gZWNobyAkJGkgfCBzZWQgJ3MvLm1hbmZpbGUuaW4vLkBNQU5fRklMRV9GT1JNQVRTQC8nYDsgZG9uZQogCiB1bmluc3RhbGw6CiAJcm0gLWYgJChERVNURElSKSQoc2JpbmRpcikvcnBjYXBkCiAJZm9yIGkgaW4gJChNQU5BRE1JTik7IGRvIFwKIAkJcm0gLWYgJChERVNURElSKSQobWFuZGlyKS9tYW5ATUFOX0FETUlOX0NPTU1BTkRTQC9gZWNobyAkJGkgfCBzZWQgJ3MvLm1hbmFkbWluLmluLy5ATUFOX0FETUlOX0NPTU1BTkRTQC8nYDsgZG9uZQorCWZvciBpIGluICQoTUFORklMRSk7IGRvIFwKKwkJcm0gLWYgJChERVNURElSKSQobWFuZGlyKS9tYW5ATUFOX0ZJTEVfRk9STUFUU0AvYGVjaG8gJCRpIHwgc2VkICdzLy5tYW5maWxlLmluLy5ATUFOX0ZJTEVfRk9STUFUU0AvJ2A7IGRvbmUKIAogdGFnczogJChUQUdGSUxFUykKIAljdGFncyAtd3RkICQoVEFHRklMRVMpCiAKIGRlcGVuZDoKLQkuLi8kKE1LREVQKSAtYyAiJChDQykiIC1tICIkKERFUEVOREVOQ1lfQ0ZMQUcpIiAkKENGTEFHUykgJChERUZTKSAkKElOQ0xTKSAkKFNSQykKKwkkKE1LREVQKSAtYyAiJChDQykiIC1tICIkKERFUEVOREVOQ1lfQ0ZMQUcpIiAtcyAiJChzcmNkaXIpIiAkKENGTEFHUykgJChERUZTKSAkKElOQ0xTKSAkKFNSQykKZGlmZiAtLWdpdCBhL3JwY2FwZC9kYWVtb24uYyBiL3JwY2FwZC9kYWVtb24uYwppbmRleCA0YmY0MmZkLi42MjBkZWMzIDEwMDY0NAotLS0gYS9ycGNhcGQvZGFlbW9uLmMKKysrIGIvcnBjYXBkL2RhZW1vbi5jCkBAIC0zOSwxMiArMzksMTQgQEAKICNpbmNsdWRlIDxlcnJuby5oPgkJLy8gZm9yIHRoZSBlcnJubyB2YXJpYWJsZQogI2luY2x1ZGUgPHN0ZGxpYi5oPgkJLy8gZm9yIG1hbGxvYygpLCBmcmVlKCksIC4uLgogI2luY2x1ZGUgPHN0cmluZy5oPgkJLy8gZm9yIHN0cmxlbigpLCAuLi4KKyNpbmNsdWRlIDxsaW1pdHMuaD4JCS8vIGZvciBJTlRfTUFYCiAKICNpZmRlZiBfV0lOMzIKICAgI2luY2x1ZGUgPHByb2Nlc3MuaD4JCS8vIGZvciB0aHJlYWRzCiAjZWxzZQogICAjaW5jbHVkZSA8dW5pc3RkLmg+CiAgICNpbmNsdWRlIDxwdGhyZWFkLmg+CisgICNpbmNsdWRlIDxzaWduYWwuaD4KICAgI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4JLy8gZm9yIHNlbGVjdCgpIGFuZCBzdWNoCiAgICNpbmNsdWRlIDxwd2QuaD4JCS8vIGZvciBwYXNzd29yZCBtYW5hZ2VtZW50CkBAIC02Myw0MCArNjUsNTcgQEAKICNpbmNsdWRlICJkYWVtb24uaCIKICNpbmNsdWRlICJsb2cuaCIKIAotI2RlZmluZSBSUENBUF9USU1FT1VUX0lOSVQgOTAJCS8qIEluaXRpYWwgdGltZW91dCBmb3IgUlBDQVAgY29ubmVjdGlvbnMgKGRlZmF1bHQ6IDkwIHNlYykgKi8KLSNkZWZpbmUgUlBDQVBfVElNRU9VVF9SVU5USU1FIDE4MAkvKiBSdW4tdGltZSB0aW1lb3V0IGZvciBSUENBUCBjb25uZWN0aW9ucyAoZGVmYXVsdDogMyBtaW4pICovCi0jZGVmaW5lIFJQQ0FQX1NVU1BFTkRfV1JPTkdBVVRIIDEJLyogSWYgdGhlIGF1dGhlbnRpY2F0aW9uIGlzIHdyb25nLCBzdG9wcyAxIHNlYyBiZWZvcmUgYWNjZXB0aW5nIGEgbmV3IGF1dGggbWVzc2FnZSAqLworI2lmZGVmIEhBVkVfT1BFTlNTTAorI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisjaW5jbHVkZSAic3NsdXRpbHMuaCIKKyNlbmRpZgorCisvLworLy8gVGltZW91dCwgaW4gc2Vjb25kcywgd2hlbiB3ZSdyZSB3YWl0aW5nIGZvciBhIGNsaWVudCB0byBzZW5kIHVzIGFuCisvLyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0OyBpZiB0aGV5IGRvbid0IHNlbmQgdXMgYSByZXF1ZXN0IHdpdGhpbiB0aGF0CisvLyBpbnRlcnZhbCwgd2UgZHJvcCB0aGUgY29ubmVjdGlvbiwgc28gd2UgZG9uJ3Qgc3RheSBzdHVjayBmb3JldmVyLgorLy8KKyNkZWZpbmUgUlBDQVBfVElNRU9VVF9JTklUIDkwCisKKy8vCisvLyBUaW1lb3V0LCBpbiBzZWNvbmRzLCB3aGVuIHdlJ3JlIHdhaXRpbmcgZm9yIGFuIGF1dGhlbnRpY2F0ZWQgY2xpZW50CisvLyB0byBzZW5kIHVzIGEgcmVxdWVzdCwgaWYgYSBjYXB0dXJlIGlzbid0IGluIHByb2dyZXNzOyBpZiB0aGV5IGRvbid0CisvLyBzZW5kIHVzIGEgcmVxdWVzdCB3aXRoaW4gdGhhdCBpbnRlcnZhbCwgd2UgZHJvcCB0aGUgY29ubmVjdGlvbiwgc28KKy8vIHdlIGRvbid0IHN0YXkgc3R1Y2sgZm9yZXZlci4KKy8vCisjZGVmaW5lIFJQQ0FQX1RJTUVPVVRfUlVOVElNRSAxODAKKworLy8KKy8vIFRpbWUsIGluIHNlY29uZHMsIHRoYXQgd2Ugd2FpdCBhZnRlciBhIGZhaWxlZCBhdXRoZW50aWNhdGlvbiBhdHRlbXB0CisvLyBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgbmV4dCByZXF1ZXN0OyB0aGlzIHByZXZlbnRzIGEgY2xpZW50IGZyb20KKy8vIHJhcGlkbHkgdHJ5aW5nIGRpZmZlcmVudCBhY2NvdW50cyBvciBwYXNzd29yZHMuCisvLworI2RlZmluZSBSUENBUF9TVVNQRU5EX1dST05HQVVUSCAxCiAKIC8vIFBhcmFtZXRlcnMgZm9yIHRoZSBzZXJ2aWNlIGxvb3AuCiBzdHJ1Y3QgZGFlbW9uX3NscGFycwogewotCVNPQ0tFVCBzb2NrY3RybF9pbjsJLy8hPCBTT0NLRVQgSUQgb2YgdGhlIGlucHV0IHNpZGUgb2YgdGhlIGNvbnRyb2wgY29ubmVjdGlvbgotCVNPQ0tFVCBzb2NrY3RybF9vdXQ7CS8vITwgU09DS0VUIElEIG9mIHRoZSBvdXRwdXQgc2lkZSBvZiB0aGUgY29udHJvbCBjb25uZWN0aW9uCi0JdWludDggcHJvdG9jb2xfdmVyc2lvbjsJLy8hPCBuZWdvdGlhdGVkIHByb3RvY29sIHZlcnNpb24KKwlTT0NLRVQgc29ja2N0cmw7CS8vITwgU09DS0VUIElEIG9mIHRoZSBjb250cm9sIGNvbm5lY3Rpb24KKwlTU0wgKnNzbDsJCS8vITwgT3B0aW9uYWwgU1NMIGhhbmRsZXIgZm9yIHRoZSBjb250cm9sbGluZyBzb2NrZXRzCiAJaW50IGlzYWN0aXZlOwkJLy8hPCBOb3QgbnVsbCBpZiB0aGUgZGFlbW9uIGhhcyB0byBydW4gaW4gYWN0aXZlIG1vZGUKIAlpbnQgbnVsbEF1dGhBbGxvd2VkOwkvLyE8ICcxJyBpZiB3ZSBwZXJtaXQgTlVMTCBhdXRoZW50aWNhdGlvbiwgJzAnIG90aGVyd2lzZQogfTsKIAotLyoKLSAqIERhdGEgZm9yIGEgc2Vzc2lvbiBtYW5hZ2VkIGJ5IGEgdGhyZWFkLgotICovCi1zdHJ1Y3Qgc2Vzc2lvbiB7Ci0JU09DS0VUIHNvY2tjdHJsX291dDsKLQlTT0NLRVQgc29ja2RhdGE7Ci0JdWludDggcHJvdG9jb2xfdmVyc2lvbjsKLQlwY2FwX3QgKmZwOwotCXVuc2lnbmVkIGludCBUb3RDYXB0OwotfTsKLQogLy8KLS8vIFN0cnVjdHVyZSB0byByZWZlciB0byBhIHRocmVhZC4KKy8vIERhdGEgZm9yIGEgc2Vzc2lvbiBtYW5hZ2VkIGJ5IGEgdGhyZWFkLgogLy8gSXQgaW5jbHVkZXMgYm90aCBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHdlICpoYXZlKiBhIHRocmVhZCwKIC8vIGFuZCBhIHBsYXRmb3JtLWRlcGVuZGVudCAoVU4qWCB2cy4gV2luZG93cykgaWRlbnRpZmllciBmb3IgdGhlCiAvLyB0aHJlYWQ7IG9uIFdpbmRvd3MsIHdlIGNvdWxkIHVzZSBhbiBpbnZhbGlkIGhhbmRsZSB0byBpbmRpY2F0ZQogLy8gdGhhdCB3ZSBkb24ndCBoYXZlIGEgdGhyZWFkLCBidXQgdGhlcmUgKmlzKiBubyBwb3J0YWJsZSAibm8gdGhyZWFkIgogLy8gdmFsdWUgZm9yIGEgcHRocmVhZF90IG9uIFVOKlguCiAvLwotc3RydWN0IHRocmVhZF9oYW5kbGUgeworc3RydWN0IHNlc3Npb24geworCVNPQ0tFVCBzb2NrY3RybDsKKwlTT0NLRVQgc29ja2RhdGE7CisJU1NMICpjdHJsX3NzbCwgKmRhdGFfc3NsOyAvLyBvcHRpb25hbCBTU0wgaGFuZGxlcnMgZm9yIHNvY2tjdHJsIGFuZCBzb2NrZGF0YS4KKwl1aW50OCBwcm90b2NvbF92ZXJzaW9uOworCXBjYXBfdCAqZnA7CisJdW5zaWduZWQgaW50IFRvdENhcHQ7CiAJaW50CWhhdmVfdGhyZWFkOwogI2lmZGVmIF9XSU4zMgogCUhBTkRMRSB0aHJlYWQ7CkBAIC0xMDYsNTIgKzEyNSwxMTYgQEAKIH07CiAKIC8vIExvY2FsbHkgZGVmaW5lZCBmdW5jdGlvbnMKLXN0YXRpYyBpbnQgZGFlbW9uX21zZ19lcnIoU09DS0VUIHNvY2tjdHJsX2luLCB1aW50MzIgcGxlbik7CitzdGF0aWMgaW50IGRhZW1vbl9tc2dfZXJyKFNPQ0tFVCBzb2NrY3RybCwgU1NMICosIHVpbnQzMiBwbGVuKTsKIHN0YXRpYyBpbnQgZGFlbW9uX21zZ19hdXRoX3JlcShzdHJ1Y3QgZGFlbW9uX3NscGFycyAqcGFycywgdWludDMyIHBsZW4pOwogc3RhdGljIGludCBkYWVtb25fQXV0aFVzZXJQd2QoY2hhciAqdXNlcm5hbWUsIGNoYXIgKnBhc3N3b3JkLCBjaGFyICplcnJidWYpOwogCi1zdGF0aWMgaW50IGRhZW1vbl9tc2dfZmluZGFsbGlmX3JlcShzdHJ1Y3QgZGFlbW9uX3NscGFycyAqcGFycywgdWludDMyIHBsZW4pOworc3RhdGljIGludCBkYWVtb25fbXNnX2ZpbmRhbGxpZl9yZXEodWludDggdmVyLCBzdHJ1Y3QgZGFlbW9uX3NscGFycyAqcGFycywKKyAgICB1aW50MzIgcGxlbik7CiAKLXN0YXRpYyBpbnQgZGFlbW9uX21zZ19vcGVuX3JlcShzdHJ1Y3QgZGFlbW9uX3NscGFycyAqcGFycywgdWludDMyIHBsZW4sIGNoYXIgKnNvdXJjZSwgc2l6ZV90IHNvdXJjZWxlbik7Ci1zdGF0aWMgaW50IGRhZW1vbl9tc2dfc3RhcnRjYXBfcmVxKHN0cnVjdCBkYWVtb25fc2xwYXJzICpwYXJzLCB1aW50MzIgcGxlbiwgc3RydWN0IHRocmVhZF9oYW5kbGUgKnRocmVhZGRhdGEsIGNoYXIgKnNvdXJjZSwgc3RydWN0IHNlc3Npb24gKipzZXNzaW9ucCwgc3RydWN0IHJwY2FwX3NhbXBsaW5nICpzYW1wX3BhcmFtKTsKLXN0YXRpYyBpbnQgZGFlbW9uX21zZ19lbmRjYXBfcmVxKHN0cnVjdCBkYWVtb25fc2xwYXJzICpwYXJzLCBzdHJ1Y3Qgc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IHRocmVhZF9oYW5kbGUgKnRocmVhZGRhdGEpOworc3RhdGljIGludCBkYWVtb25fbXNnX29wZW5fcmVxKHVpbnQ4IHZlciwgc3RydWN0IGRhZW1vbl9zbHBhcnMgKnBhcnMsCisgICAgdWludDMyIHBsZW4sIGNoYXIgKnNvdXJjZSwgc2l6ZV90IHNvdXJjZWxlbik7CitzdGF0aWMgaW50IGRhZW1vbl9tc2dfc3RhcnRjYXBfcmVxKHVpbnQ4IHZlciwgc3RydWN0IGRhZW1vbl9zbHBhcnMgKnBhcnMsCisgICAgdWludDMyIHBsZW4sIGNoYXIgKnNvdXJjZSwgc3RydWN0IHNlc3Npb24gKipzZXNzaW9ucCwKKyAgICBzdHJ1Y3QgcnBjYXBfc2FtcGxpbmcgKnNhbXBfcGFyYW0sIGludCB1c2VzX3NzbCk7CitzdGF0aWMgaW50IGRhZW1vbl9tc2dfZW5kY2FwX3JlcSh1aW50OCB2ZXIsIHN0cnVjdCBkYWVtb25fc2xwYXJzICpwYXJzLAorICAgIHN0cnVjdCBzZXNzaW9uICpzZXNzaW9uKTsKIAotc3RhdGljIGludCBkYWVtb25fbXNnX3VwZGF0ZWZpbHRlcl9yZXEoc3RydWN0IGRhZW1vbl9zbHBhcnMgKnBhcnMsIHN0cnVjdCBzZXNzaW9uICpzZXNzaW9uLCB1aW50MzIgcGxlbik7Ci1zdGF0aWMgaW50IGRhZW1vbl91bnBhY2thcHBseWZpbHRlcihTT0NLRVQgc29ja2N0cmxfaW4sIHN0cnVjdCBzZXNzaW9uICpzZXNzaW9uLCB1aW50MzIgKnBsZW5wLCBjaGFyICplcnJidWYpOworc3RhdGljIGludCBkYWVtb25fbXNnX3VwZGF0ZWZpbHRlcl9yZXEodWludDggdmVyLCBzdHJ1Y3QgZGFlbW9uX3NscGFycyAqcGFycywKKyAgICBzdHJ1Y3Qgc2Vzc2lvbiAqc2Vzc2lvbiwgdWludDMyIHBsZW4pOworc3RhdGljIGludCBkYWVtb25fdW5wYWNrYXBwbHlmaWx0ZXIoU09DS0VUIHNvY2tjdHJsLCBTU0wgKiwgc3RydWN0IHNlc3Npb24gKnNlc3Npb24sIHVpbnQzMiAqcGxlbnAsIGNoYXIgKmVycmJ1Zik7CiAKLXN0YXRpYyBpbnQgZGFlbW9uX21zZ19zdGF0c19yZXEoc3RydWN0IGRhZW1vbl9zbHBhcnMgKnBhcnMsIHN0cnVjdCBzZXNzaW9uICpzZXNzaW9uLCB1aW50MzIgcGxlbiwgc3RydWN0IHBjYXBfc3RhdCAqc3RhdHMsIHVuc2lnbmVkIGludCBzdnJjYXB0KTsKK3N0YXRpYyBpbnQgZGFlbW9uX21zZ19zdGF0c19yZXEodWludDggdmVyLCBzdHJ1Y3QgZGFlbW9uX3NscGFycyAqcGFycywKKyAgICBzdHJ1Y3Qgc2Vzc2lvbiAqc2Vzc2lvbiwgdWludDMyIHBsZW4sIHN0cnVjdCBwY2FwX3N0YXQgKnN0YXRzLAorICAgIHVuc2lnbmVkIGludCBzdnJjYXB0KTsKIAotc3RhdGljIGludCBkYWVtb25fbXNnX3NldHNhbXBsaW5nX3JlcShzdHJ1Y3QgZGFlbW9uX3NscGFycyAqcGFycywgdWludDMyIHBsZW4sIHN0cnVjdCBycGNhcF9zYW1wbGluZyAqc2FtcF9wYXJhbSk7CitzdGF0aWMgaW50IGRhZW1vbl9tc2dfc2V0c2FtcGxpbmdfcmVxKHVpbnQ4IHZlciwgc3RydWN0IGRhZW1vbl9zbHBhcnMgKnBhcnMsCisgICAgdWludDMyIHBsZW4sIHN0cnVjdCBycGNhcF9zYW1wbGluZyAqc2FtcF9wYXJhbSk7CiAKIHN0YXRpYyB2b2lkIGRhZW1vbl9zZXJhZGRyKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpzb2NrYWRkcmluLCBzdHJ1Y3QgcnBjYXBfc29ja2FkZHIgKnNvY2thZGRyb3V0KTsKICNpZmRlZiBfV0lOMzIKIHN0YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwgZGFlbW9uX3RocmRhdGFtYWluKHZvaWQgKnB0cik7CiAjZWxzZQogc3RhdGljIHZvaWQgKmRhZW1vbl90aHJkYXRhbWFpbih2b2lkICpwdHIpOworc3RhdGljIHZvaWQgbm9vcF9oYW5kbGVyKGludCBzaWduKTsKICNlbmRpZgogCi1zdGF0aWMgaW50IHJwY2FwZF9yZWN2X21zZ19oZWFkZXIoU09DS0VUIHNvY2ssIHN0cnVjdCBycGNhcF9oZWFkZXIgKmhlYWRlcnApOwotc3RhdGljIGludCBycGNhcGRfcmVjdihTT0NLRVQgc29jaywgY2hhciAqYnVmZmVyLCBzaXplX3QgdG9yZWFkLCB1aW50MzIgKnBsZW4sIGNoYXIgKmVycm1zZ2J1Zik7Ci1zdGF0aWMgaW50IHJwY2FwZF9kaXNjYXJkKFNPQ0tFVCBzb2NrLCB1aW50MzIgbGVuKTsKK3N0YXRpYyBpbnQgcnBjYXBkX3JlY3ZfbXNnX2hlYWRlcihTT0NLRVQgc29jaywgU1NMICosIHN0cnVjdCBycGNhcF9oZWFkZXIgKmhlYWRlcnApOworc3RhdGljIGludCBycGNhcGRfcmVjdihTT0NLRVQgc29jaywgU1NMICosIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHRvcmVhZCwgdWludDMyICpwbGVuLCBjaGFyICplcnJtc2didWYpOworc3RhdGljIGludCBycGNhcGRfZGlzY2FyZChTT0NLRVQgc29jaywgU1NMICosIHVpbnQzMiBsZW4pOworc3RhdGljIHZvaWQgc2Vzc2lvbl9jbG9zZShzdHJ1Y3Qgc2Vzc2lvbiAqKTsKKworLy8KKy8vIFRMUyByZWNvcmQgbGF5ZXIgaGVhZGVyOyB1c2VkIHdoZW4gcHJvY2Vzc2luZyB0aGUgZmlyc3QgbWVzc2FnZSBmcm9tCisvLyB0aGUgY2xpZW50LCBpbiBjYXNlIHdlIGFyZW4ndCBkb2luZyBUTFMgYnV0IHRoZXkgYXJlLgorLy8KK3N0cnVjdCB0bHNfcmVjb3JkX2hlYWRlciB7CisJdWludDggdHlwZTsJCS8vIENvbnRlbnRUeXBlIC0gd2lsbCBiZSAyMiwgZm9yIEhhbmRzaGFrZQorCXVpbnQ4IHZlcnNpb25fbWFqb3I7CS8vIFRMUyBwcm90b2NvbCBtYWpvciB2ZXJzaW9uCisJdWludDggdmVyc2lvbl9pbmpvcjsJLy8gVExTIHByb3RvY29sIG1pbm9yIHZlcnNpb24KKwkvLyBUaGlzIGlzICpub3QqIGFsaWduZWQgb24gYSAyLWJ5dGUgYm91bmRhcnk7IHdlIGp1c3QKKwkvLyBkZWNsYXJlIGl0IGFzIHR3byBieXRlcy4gIERvbid0IGFzc3VtZSBhbnkgcGFydGljdWxhcgorCS8vIGNvbXBpbGVyJ3MgbWVjaGFuaXNtIGZvciBzYXlpbmcgInBhY2tlZCIhCisJdWludDggbGVuZ3RoX2hpOwkvLyBVcHBlciA4IGJpdHMgb2YgcGF5bG9hZCBsZW5ndGgKKwl1aW50OCBsZW5ndGhfbG87CS8vIExvdyA4IGJpdHMgb2YgcGF5bG9hZCBsZW5ndGgKK307CisKKyNkZWZpbmUgVExTX1JFQ09SRF9IRUFERVJfTEVOCTUJLy8gRG9uJ3QgdXNlIHNpemVvZiBpbiBjYXNlIGl0J3MgcGFkZGVkCisKKyNkZWZpbmUgVExTX1JFQ09SRF9UWVBFX0FMRVJUCQkyMQorI2RlZmluZSBUTFNfUkVDT1JEX1RZUEVfSEFORFNIQUtFCTIyCisKKy8vCisvLyBUTFMgYWxlcnQgbWVzc2FnZS4KKy8vCitzdHJ1Y3QgdGxzX2FsZXJ0IHsKKwl1aW50OCBhbGVydF9sZXZlbDsKKwl1aW50OCBhbGVydF9kZXNjcmlwdGlvbjsKK307CisKKyNkZWZpbmUgVExTX0FMRVJUX0xFTgkJCTIKKworI2RlZmluZSBUTFNfQUxFUlRfTEVWRUxfRkFUQUwJCTIKKyNkZWZpbmUgVExTX0FMRVJUX0hBTkRTSEFLRV9GQUlMVVJFCTQwCisKK3N0YXRpYyBpbnQgaXNfdXJsKGNvbnN0IGNoYXIgKnNvdXJjZSk7CisKKy8qCisgKiBNYXhpbXVtIHNpemVzIGZvciBmaXhlZC1iaXQtd2lkdGggdmFsdWVzLgorICovCisjaWZuZGVmIFVJTlQxNl9NQVgKKyNkZWZpbmUgVUlOVDE2X01BWAk2NTUzNVUKKyNlbmRpZgorCisjaWZuZGVmIFVJTlQzMl9NQVgKKyNkZWZpbmUgVUlOVDMyX01BWAk0Mjk0OTY3Mjk1VQorI2VuZGlmCiAKIGludAotZGFlbW9uX3NlcnZpY2Vsb29wKFNPQ0tFVCBzb2NrY3RybF9pbiwgU09DS0VUIHNvY2tjdHJsX291dCwgaW50IGlzYWN0aXZlLCBpbnQgbnVsbEF1dGhBbGxvd2VkKQorZGFlbW9uX3NlcnZpY2Vsb29wKFNPQ0tFVCBzb2NrY3RybCwgaW50IGlzYWN0aXZlLCBjaGFyICpwYXNzaXZlQ2xpZW50cywKKyAgICBpbnQgbnVsbEF1dGhBbGxvd2VkLCBpbnQgdXNlc19zc2wpCiB7CisJdWludDggZmlyc3Rfb2N0ZXQ7CisJc3RydWN0IHRsc19yZWNvcmRfaGVhZGVyIHRsc19oZWFkZXI7CisJc3RydWN0IHRsc19hbGVydCB0bHNfYWxlcnQ7CiAJc3RydWN0IGRhZW1vbl9zbHBhcnMgcGFyczsJCS8vIHNlcnZpY2UgbG9vcCBwYXJhbWV0ZXJzCiAJY2hhciBlcnJidWZbUENBUF9FUlJCVUZfU0laRSArIDFdOwkvLyBrZWVwcyB0aGUgZXJyb3Igc3RyaW5nLCBwcmlvciB0byBiZSBwcmludGVkCiAJY2hhciBlcnJtc2didWZbUENBUF9FUlJCVUZfU0laRSArIDFdOwkvLyBidWZmZXIgZm9yIGVycm9ycyB0byBzZW5kIHRvIHRoZSBjbGllbnQKKwlpbnQgaG9zdF9wb3J0X2NoZWNrX3N0YXR1czsKKwlTU0wgKnNzbCA9IE5VTEw7CiAJaW50IG5yZWN2OwogCXN0cnVjdCBycGNhcF9oZWFkZXIgaGVhZGVyOwkJLy8gUlBDQVAgbWVzc2FnZSBnZW5lcmFsIGhlYWRlcgogCXVpbnQzMiBwbGVuOwkJCQkvLyBwYXlsb2FkIGxlbmd0aCBmcm9tIGhlYWRlcgogCWludCBhdXRoZW50aWNhdGVkID0gMDsJCQkvLyAxIGlmIHRoZSBjbGllbnQgaGFzIHN1Y2Nlc3NmdWxseSBhdXRoZW50aWNhdGVkCiAJY2hhciBzb3VyY2VbUENBUF9CVUZfU0laRSsxXTsJCS8vIGtlZXBzIHRoZSBzdHJpbmcgdGhhdCBjb250YWlucyB0aGUgaW50ZXJmYWNlIHRvIG9wZW4KIAlpbnQgZ290X3NvdXJjZSA9IDA7CQkJLy8gMSBpZiB3ZSd2ZSBnb3R0ZW4gdGhlIHNvdXJjZSBmcm9tIGFuIG9wZW4gcmVxdWVzdAorI2lmbmRlZiBfV0lOMzIKKwlzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKyNlbmRpZgogCXN0cnVjdCBzZXNzaW9uICpzZXNzaW9uID0gTlVMTDsJCS8vIHN0cnVjdCBzZXNzaW9uIG1haW4gdmFyaWFibGUKIAljb25zdCBjaGFyICptc2dfdHlwZV9zdHJpbmc7CQkvLyBzdHJpbmcgZm9yIG1lc3NhZ2UgdHlwZQogCWludCBjbGllbnRfdG9sZF91c190b19jbG9zZSA9IDA7CS8vIDEgaWYgdGhlIGNsaWVudCB0b2xkIHVzIHRvIGNsb3NlIHRoZSBjYXB0dXJlCiAKLQlzdHJ1Y3QgdGhyZWFkX2hhbmRsZSB0aHJlYWRkYXRhOwkvLyAncmVhZCBmcm9tIGRhZW1vbiBhbmQgc2VuZCB0byBjbGllbnQnIHRocmVhZAotCiAJLy8gbmVlZGVkIHRvIHNhdmUgdGhlIHZhbHVlcyBvZiB0aGUgc3RhdGlzdGljcwogCXN0cnVjdCBwY2FwX3N0YXQgc3RhdHM7CiAJdW5zaWduZWQgaW50IHN2cmNhcHQ7CkBAIC0xNjMsMzEgKzI0NiwyNTUgQEAKIAlzdHJ1Y3QgdGltZXZhbCB0djsJCQkvLyBtYXhpbXVtIHRpbWUgdGhlIHNlbGVjdCgpIGNhbiBibG9jayB3YWl0aW5nIGZvciBkYXRhCiAJaW50IHJldHZhbDsJCQkJLy8gc2VsZWN0KCkgcmV0dXJuIHZhbHVlCiAKKwkqZXJyYnVmID0gMDsJLy8gSW5pdGlhbGl6ZSBlcnJidWYKKworCS8vCisJLy8gUGVlayBpbnRvIHRoZSBzb2NrZXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNsaWVudCBzZW50IHVzCisJLy8gYSBUTFMgaGFuZHNoYWtlIG1lc3NhZ2Ugb3IgYSBub24tVExTIHJwY2FwZCBtZXNzYWdlLgorCS8vCisJLy8gVGhlIGZpcnN0IGJ5dGUgb2YgYW4gcnBjYXBkIHJlcXVlc3QgaXMgdGhlIHZlcnNpb24gbnVtYmVyOworCS8vIHRoZSBmaXJzdCBieXRlIG9mIGEgVExTIGhhbmRzaGFrZSBtZXNzYWdlIGlzIDIyLiAgVGhlCisJLy8gZmlyc3QgcmVxdWVzdCB0byBhbiBycGNhcGQgc2VydmVyIG11c3QgYmUgYW4gYXV0aGVudGljYXRpb24KKwkvLyByZXF1ZXN0IG9yIGEgY2xvc2UgcmVxdWVzdCwgYW5kIG11c3QgaGF2ZSBhIHZlcnNpb24gbnVtYmVyCisJLy8gb2YgMCwgc28gaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGFuCisJLy8gaW5pdGlhbCBwbGFpbnRleHQgcmVxdWVzdCB0byBhIHNlcnZlciBhbmQgYW4gaW5pdGlhbCBUTFMKKwkvLyBoYW5kc2hha2UgbWVzc2FnZS4KKwkvLworCW5yZWN2ID0gc29ja19yZWN2KHNvY2tjdHJsLCBOVUxMLCAoY2hhciAqKSZmaXJzdF9vY3RldCwgMSwKKwkgICAgU09DS19FT0ZfSVNOVF9FUlJPUnxTT0NLX01TR19QRUVLLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOworCWlmIChucmVjdiA9PSAtMSkKKwl7CisJCS8vIEZhdGFsIGVycm9yLgorCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICJQZWVrIGZyb20gY2xpZW50IGZhaWxlZDogJXMiLCBlcnJidWYpOworCQlnb3RvIGVuZDsKKwl9CisJaWYgKG5yZWN2ID09IDApCisJeworCQkvLyBDbGllbnQgY2xvc2VkIHRoZSBjb25uZWN0aW9uLgorCQlnb3RvIGVuZDsKKwl9CisKKyNpZmRlZiBIQVZFX09QRU5TU0wKKwkvLworCS8vIFdlIGhhdmUgdG8gdXBncmFkZSB0byBUTFMgYXMgc29vbiBhcyBwb3NzaWJsZSwgc28gdGhhdCB0aGUKKwkvLyB3aG9sZSBwcm90b2NvbCBnb2VzIHRocm91Z2ggdGhlIGVuY3J5cHRlZCB0dW5uZWwsIGluY2x1ZGluZworCS8vIGVhcmx5IGVycm9yIG1lc3NhZ2VzLgorCS8vCisJLy8gRXZlbiBpbiBhY3RpdmUgbW9kZSwgdGhlIG90aGVyIGVuZCBoYXMgdG8gaW5pdGlhdGUgdGhlIFRMUworCS8vIGhhbmRzaGFrZSBhcyB3ZSBzdGlsbCBhcmUgdGhlIHNlcnZlciBhcyBmYXIgYXMgVExTIGlzIGNvbmNlcm5lZCwKKwkvLyBzbyB3ZSBkb24ndCBjaGVjayBpc2FjdGl2ZS4KKwkvLworCWlmICh1c2VzX3NzbCkKKwl7CisJCS8vCisJCS8vIFdlJ3JlIGV4cGVjdGluZyBhIFRMUyBoYW5kc2hha2UgbWVzc2FnZS4gIElmIHRoaXMKKwkJLy8gaXNuJ3Qgb25lLCBhc3N1bWUgaXQncyBhIG5vbi1UTFMgcnBjYXBkIG1lc3NhZ2UuCisJCS8vCisJCS8vIFRoZSBmaXJzdCBvY3RldCBvZiBhIFRMUyBoYW5kc2hha2UgaXMKKwkJLy8gVExTX1JFQ09SRF9UWVBFX0hBTkRTSEFLRS4KKwkJLy8KKwkJaWYgKGZpcnN0X29jdGV0ICE9IFRMU19SRUNPUkRfVFlQRV9IQU5EU0hBS0UpCisJCXsKKwkJCS8vCisJCQkvLyBXZSBhc3N1bWUgdGhpcyBpcyBhIG5vbi1UTFMgcnBjYXBkIG1lc3NhZ2UuCisJCQkvLworCQkJLy8gUmVhZCB0aGUgbWVzc2FnZSBoZWFkZXIgZnJvbSB0aGUgY2xpZW50LgorCQkJLy8KKwkJCW5yZWN2ID0gcnBjYXBkX3JlY3ZfbXNnX2hlYWRlcihzb2NrY3RybCwgTlVMTCwgJmhlYWRlcik7CisJCQlpZiAobnJlY3YgPT0gLTEpCisJCQl7CisJCQkJLy8gRmF0YWwgZXJyb3IuCisJCQkJZ290byBlbmQ7CisJCQl9CisJCQlpZiAobnJlY3YgPT0gLTIpCisJCQl7CisJCQkJLy8gQ2xpZW50IGNsb3NlZCB0aGUgY29ubmVjdGlvbi4KKwkJCQlnb3RvIGVuZDsKKwkJCX0KKwkJCXBsZW4gPSBoZWFkZXIucGxlbjsKKworCQkJLy8gRGlzY2FyZCB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZS4KKwkJCWlmIChycGNhcGRfZGlzY2FyZChzb2NrY3RybCwgTlVMTCwgcGxlbikgPT0gLTEpCisJCQl7CisJCQkJLy8gTmV0d29yayBlcnJvci4KKwkJCQlnb3RvIGVuZDsKKwkJCX0KKworCQkJLy8KKwkJCS8vIFNlbmQgYW4gYXV0aGVudGljYXRpb24gZXJyb3IsIGluZGljYXRpbmcKKwkJCS8vIHRoYXQgd2UgcmVxdWlyZSBUTFMuCisJCQkvLworCQkJaWYgKHJwY2FwX3NlbmRlcnJvcihzb2NrY3RybCwgTlVMTCwgaGVhZGVyLnZlciwKKwkJCSAgICBQQ0FQX0VSUl9UTFNfUkVRVUlSRUQsCisJCQkgICAgIlRMUyBpcyByZXF1aXJlZCBieSB0aGlzIHNlcnZlciIsIGVycmJ1ZikgPT0gLTEpCisJCQl7CisJCQkJLy8gVGhhdCBmYWlsZWQ7IGxvZyBhIG1lc3NhZ2UgYW5kIGdpdmUgdXAuCisJCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiU2VuZCB0byBjbGllbnQgZmFpbGVkOiAlcyIsIGVycmJ1Zik7CisJCQkJZ290byBlbmQ7CisJCQl9CisKKwkJCS8vIFNodXQgdGhlIHNlc3Npb24gZG93bi4KKwkJCWdvdG8gZW5kOworCQl9CisJCXNzbCA9IHNzbF9wcm9tb3Rpb24oMSwgc29ja2N0cmwsIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSk7CisJCWlmICghIHNzbCkKKwkJeworCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiVExTIGhhbmRzaGFrZSBvbiBjb250cm9sIGNvbm5lY3Rpb24gZmFpbGVkOiAlcyIsCisJCQkgICAgZXJyYnVmKTsKKwkJCWdvdG8gZW5kOworCQl9CisJfQorCWVsc2UKKyNlbmRpZgorCXsKKwkJLy8KKwkJLy8gV2UncmUgZXhwZWN0aW5nIGEgbm9uLVRMUyBycGNhcGQgbWVzc2FnZS4gIElmIHRoaXMKKwkJLy8gbG9va3MsIGluc3RlYWQsIGxpa2UgYSBUTFMgaGFuZHNoYWtlIG1lc3NhZ2UsIHNlbmQKKwkJLy8gYSBUTFMgaGFuZHNoYWtlX2ZhaWxlZCBhbGVydC4KKwkJLy8KKwkJLy8gVGhlIGZpcnN0IG9jdGV0IG9mIGEgVExTIGhhbmRzaGFrZSBpcworCQkvLyBUTFNfUkVDT1JEX1RZUEVfSEFORFNIQUtFLgorCQkvLworCQlpZiAoZmlyc3Rfb2N0ZXQgPT0gVExTX1JFQ09SRF9UWVBFX0hBTkRTSEFLRSkKKwkJeworCQkJLy8KKwkJCS8vIFRMUyBoYW5kc2hha2UuCisJCQkvLyBSZWFkIHRoZSByZWNvcmQgaGVhZGVyLgorCQkJLy8KKwkJCW5yZWN2ID0gc29ja19yZWN2KHNvY2tjdHJsLCBzc2wsIChjaGFyICopICZ0bHNfaGVhZGVyLAorCQkJICAgIHNpemVvZiB0bHNfaGVhZGVyLCBTT0NLX1JFQ0VJVkVBTExfWUVTfFNPQ0tfRU9GX0lTTlRfRVJST1IsCisJCQkgICAgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKKwkJCWlmIChucmVjdiA9PSAtMSkKKwkJCXsKKwkJCQkvLyBOZXR3b3JrIGVycm9yLgorCQkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIlJlYWQgZnJvbSBjbGllbnQgZmFpbGVkOiAlcyIsIGVycmJ1Zik7CisJCQkJZ290byBlbmQ7CisJCQl9CisJCQlpZiAobnJlY3YgPT0gMCkKKwkJCXsKKwkJCQkvLyBJbW1lZGlhdGUgRU9GCisJCQkJZ290byBlbmQ7CisJCQl9CisJCQlwbGVuID0gKHRsc19oZWFkZXIubGVuZ3RoX2hpIDw8IDgpIHwgdGxzX2hlYWRlci5sZW5ndGhfbG87CisKKwkJCS8vIERpc2NhcmQgdGhlIHJlc3Qgb2YgdGhlIG1lc3NhZ2UuCisJCQlpZiAocnBjYXBkX2Rpc2NhcmQoc29ja2N0cmwsIE5VTEwsIHBsZW4pID09IC0xKQorCQkJeworCQkJCS8vIE5ldHdvcmsgZXJyb3IuCisJCQkJZ290byBlbmQ7CisJCQl9CisKKwkJCS8vCisJCQkvLyBTZW5kIGEgVExTIGhhbmRzaGFrZSBmYWlsdXJlIGFsZXJ0LgorCQkJLy8gVXNlIHRoZSBzYW1lIHZlcnNpb24gdGhlIGNsaWVudCBzZW50IHVzLgorCQkJLy8KKwkJCXRsc19oZWFkZXIudHlwZSA9IFRMU19SRUNPUkRfVFlQRV9BTEVSVDsKKwkJCXRsc19oZWFkZXIubGVuZ3RoX2hpID0gMDsKKwkJCXRsc19oZWFkZXIubGVuZ3RoX2xvID0gVExTX0FMRVJUX0xFTjsKKworCQkJaWYgKHNvY2tfc2VuZChzb2NrY3RybCwgTlVMTCwgKGNoYXIgKikgJnRsc19oZWFkZXIsCisJCQkgICAgVExTX1JFQ09SRF9IRUFERVJfTEVOLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpID09IC0xKQorCQkJeworCQkJCS8vIFRoYXQgZmFpbGVkOyBsb2cgYSBtZXNzYWdlIGFuZCBnaXZlIHVwLgorCQkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIlNlbmQgdG8gY2xpZW50IGZhaWxlZDogJXMiLCBlcnJidWYpOworCQkJCWdvdG8gZW5kOworCQkJfQorCisJCQl0bHNfYWxlcnQuYWxlcnRfbGV2ZWwgPSBUTFNfQUxFUlRfTEVWRUxfRkFUQUw7CisJCQl0bHNfYWxlcnQuYWxlcnRfZGVzY3JpcHRpb24gPSBUTFNfQUxFUlRfSEFORFNIQUtFX0ZBSUxVUkU7CisJCQlpZiAoc29ja19zZW5kKHNvY2tjdHJsLCBOVUxMLCAoY2hhciAqKSAmdGxzX2FsZXJ0LAorCQkJICAgIFRMU19BTEVSVF9MRU4sIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSkgPT0gLTEpCisJCQl7CisJCQkJLy8gVGhhdCBmYWlsZWQ7IGxvZyBhIG1lc3NhZ2UgYW5kIGdpdmUgdXAuCisJCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiU2VuZCB0byBjbGllbnQgZmFpbGVkOiAlcyIsIGVycmJ1Zik7CisJCQkJZ290byBlbmQ7CisJCQl9CisJCQkvLworCQkJLy8gR2l2ZSB1cCBhbnl3YXkuCisJCQkvLworCQkJZ290byBlbmQ7CisJCX0KKwl9CisKIAkvLyBTZXQgcGFyYW1ldGVycyBzdHJ1Y3R1cmUKLQlwYXJzLnNvY2tjdHJsX2luID0gc29ja2N0cmxfaW47Ci0JcGFycy5zb2NrY3RybF9vdXQgPSBzb2NrY3RybF9vdXQ7Ci0JcGFycy5wcm90b2NvbF92ZXJzaW9uID0gMDsJCS8vIG5vdCB5ZXQga25vd24KKwlwYXJzLnNvY2tjdHJsID0gc29ja2N0cmw7CisJcGFycy5zc2wgPSBzc2w7CiAJcGFycy5pc2FjdGl2ZSA9IGlzYWN0aXZlOwkJLy8gYWN0aXZlIG1vZGUKIAlwYXJzLm51bGxBdXRoQWxsb3dlZCA9IG51bGxBdXRoQWxsb3dlZDsKIAotCS8vIFdlIGRvbid0IGhhdmUgYSB0aHJlYWQgeWV0LgotCXRocmVhZGRhdGEuaGF2ZV90aHJlYWQgPSAwOwogCS8vCi0JLy8gV2UgKnNob3VsZG4ndCogaGF2ZSB0byBpbml0aWFsaXplIHRoZSB0aHJlYWQgaW5kaWNhdG9yCi0JLy8gaXRzZWxmLCBiZWNhdXNlIHRoZSBjb21waWxlciAqc2hvdWxkKiByZWFsaXplIHRoYXQgd2UKLQkvLyBvbmx5IHVzZSB0aGlzIGlmIGhhdmVfdGhyZWFkIGlzbid0IDAsIGJ1dCB3ZSAqZG8qIGhhdmUKLQkvLyB0byBkbyBpdCwgYmVjYXVzZSBub3QgYWxsIGNvbXBpbGVycyAqZG8qIHJlYWxpemUgdGhhdC4KKwkvLyBXZSBoYXZlIGEgY29ubmVjdGlvbi4KIAkvLwotCS8vIFRoZXJlIGlzIG5vICJpbnZhbGlkIHRocmVhZCBoYW5kbGUiIHZhbHVlIGZvciBhIFVOKlgKLQkvLyBwdGhyZWFkX3QsIHNvIHdlIGp1c3QgemVybyBpdCBvdXQuCisJLy8gSWYgaXQncyBhIHBhc3NpdmUgbW9kZSBjb25uZWN0aW9uLCBjaGVjayB3aGV0aGVyIHRoZSBjb25uZWN0aW5nCisJLy8gaG9zdCBpcyBhbW9uZyB0aGUgb25lcyBhbGxvd2VkLgogCS8vCi0jaWZkZWYgX1dJTjMyCi0JdGhyZWFkZGF0YS50aHJlYWQgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLSNlbHNlCi0JbWVtc2V0KCZ0aHJlYWRkYXRhLnRocmVhZCwgMCwgc2l6ZW9mKHRocmVhZGRhdGEudGhyZWFkKSk7Ci0jZW5kaWYKKwkvLyBJbiBlaXRoZXIgY2FzZSwgd2Ugd2VyZSBoYW5kZWQgYSBjb3B5IG9mIHRoZSBob3N0IGxpc3Q7IGZyZWUgaXQKKwkvLyBhcyBzb29uIGFzIHdlJ3JlIGRvbmUgd2l0aCBpdC4KKwkvLworCWlmIChwYXJzLmlzYWN0aXZlKQorCXsKKwkJLy8gTm90aGluZyB0byBkby4KKwkJZnJlZShwYXNzaXZlQ2xpZW50cyk7CisJCXBhc3NpdmVDbGllbnRzID0gTlVMTDsKKwl9CisJZWxzZQorCXsKKwkJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgZnJvbTsKKwkJc29ja2xlbl90IGZyb21sZW47CiAKLQkqZXJyYnVmID0gMDsJLy8gSW5pdGlhbGl6ZSBlcnJidWYKKwkJLy8KKwkJLy8gR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBvdGhlciBlbmQgb2YgdGhlIGNvbm5lY3Rpb24uCisJCS8vCisJCWZyb21sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpOworCQlpZiAoZ2V0cGVlcm5hbWUocGFycy5zb2NrY3RybCwgKHN0cnVjdCBzb2NrYWRkciAqKSZmcm9tLAorCQkgICAgJmZyb21sZW4pID09IC0xKQorCQl7CisJCQlzb2NrX2dldGVycm9yKCJnZXRwZWVybmFtZSgpIiwgZXJybXNnYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKKwkJCWlmIChycGNhcF9zZW5kZXJyb3IocGFycy5zb2NrY3RybCwgcGFycy5zc2wsIDAsIFBDQVBfRVJSX05FVFcsIGVycm1zZ2J1ZiwgZXJyYnVmKSA9PSAtMSkKKwkJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICJTZW5kIHRvIGNsaWVudCBmYWlsZWQ6ICVzIiwgZXJyYnVmKTsKKwkJCWdvdG8gZW5kOworCQl9CisKKwkJLy8KKwkJLy8gQXJlIHRoZXkgaW4gdGhlIGxpc3Qgb2YgaG9zdC9wb3J0IGNvbWJpbmF0aW9ucyB3ZSBhbGxvdz8KKwkJLy8KKwkJaG9zdF9wb3J0X2NoZWNrX3N0YXR1cyA9IHNvY2tfY2hlY2tfaG9zdGxpc3QocGFzc2l2ZUNsaWVudHMsIFJQQ0FQX0hPU1RMSVNUX1NFUCwgJmZyb20sIGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSk7CisJCWZyZWUocGFzc2l2ZUNsaWVudHMpOworCQlwYXNzaXZlQ2xpZW50cyA9IE5VTEw7CisJCWlmIChob3N0X3BvcnRfY2hlY2tfc3RhdHVzIDwgMCkKKwkJeworCQkJaWYgKGhvc3RfcG9ydF9jaGVja19zdGF0dXMgPT0gLTIpIHsKKwkJCQkvLworCQkJCS8vIFdlIGdvdCBhbiBlcnJvcjsgbG9nIGl0LgorCQkJCS8vCisJCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiJXMiLCBlcnJtc2didWYpOworCQkJfQorCisJCQkvLworCQkJLy8gU29ycnksIHdlIGNhbid0IGxldCB5b3UgaW4uCisJCQkvLworCQkJaWYgKHJwY2FwX3NlbmRlcnJvcihwYXJzLnNvY2tjdHJsLCBwYXJzLnNzbCwgMCwgUENBUF9FUlJfSE9TVE5PQVVUSCwgZXJybXNnYnVmLCBlcnJidWYpID09IC0xKQorCQkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIlNlbmQgdG8gY2xpZW50IGZhaWxlZDogJXMiLCBlcnJidWYpOworCQkJZ290byBlbmQ7CisJCX0KKwl9CisKKyNpZm5kZWYgX1dJTjMyCisJLy8KKwkvLyBDYXRjaCBTSUdVU1IxLCBidXQgZG8gbm90aGluZy4gIFdlIHVzZSBpdCB0byBpbnRlcnJ1cHQgdGhlCisJLy8gY2FwdHVyZSB0aHJlYWQgdG8gYnJlYWsgaXQgb3V0IG9mIGEgbG9vcCBpbiB3aGljaCBpdCdzCisJLy8gYmxvY2tlZCB3YWl0aW5nIGZvciBwYWNrZXRzIHRvIGFycml2ZS4KKwkvLworCS8vIFdlIGRvbid0IHdhbnQgaW50ZXJydXB0ZWQgc3lzdGVtIGNhbGxzIHRvIHJlc3RhcnQsIHNvIHRoYXQKKwkvLyB0aGUgcmVhZCByb3V0aW5lIGZvciB0aGUgcGNhcF90IGdldHMgRUlOVFIgcmF0aGVyIHRoYW4KKwkvLyByZXN0YXJ0aW5nIGlmIGl0J3MgYmxvY2tlZCBpbiBhIHN5c3RlbSBjYWxsLgorCS8vCisJbWVtc2V0KCZhY3Rpb24sIDAsIHNpemVvZiAoYWN0aW9uKSk7CisJYWN0aW9uLnNhX2hhbmRsZXIgPSBub29wX2hhbmRsZXI7CisJYWN0aW9uLnNhX2ZsYWdzID0gMDsKKwlzaWdlbXB0eXNldCgmYWN0aW9uLnNhX21hc2spOworCXNpZ2FjdGlvbihTSUdVU1IxLCAmYWN0aW9uLCBOVUxMKTsKKyNlbmRpZgogCiAJLy8KIAkvLyBUaGUgY2xpZW50IG11c3QgZmlyc3QgYXV0aGVudGljYXRlOyBsb29wIHVudGlsIHRoZXkgc2VuZCB1cyBhCkBAIC0xOTgsMTAgKzUwNSwxMSBAQAogCXdoaWxlICghYXV0aGVudGljYXRlZCkKIAl7CiAJCS8vCi0JCS8vIElmIHdlJ3JlIGluIGFjdGl2ZSBtb2RlLCB3ZSBoYXZlIHRvIGNoZWNrIGZvciB0aGUKLQkJLy8gaW5pdGlhbCB0aW1lb3V0LgotCQkvLwotCQkvLyBYWFggLSBkbyB0aGlzIG9uICpldmVyeSogdHJpcCB0aHJvdWdoIHRoZSBsb29wPworCQkvLyBJZiB3ZSdyZSBub3QgaW4gYWN0aXZlIG1vZGUsIHdlIHVzZSBzZWxlY3QoKSwgd2l0aCBhCisJCS8vIHRpbWVvdXQsIHRvIHdhaXQgZm9yIGFuIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3Q7IGlmCisJCS8vIHRoZSB0aW1lb3V0IGV4cGlyZXMsIHdlIGRyb3AgdGhlIGNvbm5lY3Rpb24sIHNvIHRoYXQKKwkJLy8gYSBjbGllbnQgY2FuJ3QganVzdCBjb25uZWN0IHRvIHVzIGFuZCBsZWF2ZSB1cworCQkvLyB3YWl0aW5nIGZvcmV2ZXIuCiAJCS8vCiAJCWlmICghcGFycy5pc2FjdGl2ZSkKIAkJewpAQCAtMjEwLDEzICs1MTgsMTMgQEAKIAkJCXR2LnR2X3NlYyA9IFJQQ0FQX1RJTUVPVVRfSU5JVDsKIAkJCXR2LnR2X3VzZWMgPSAwOwogCi0JCQlGRF9TRVQocGFycy5zb2NrY3RybF9pbiwgJnJmZHMpOworCQkJRkRfU0VUKHBhcnMuc29ja2N0cmwsICZyZmRzKTsKIAotCQkJcmV0dmFsID0gc2VsZWN0KHBhcnMuc29ja2N0cmxfaW4gKyAxLCAmcmZkcywgTlVMTCwgTlVMTCwgJnR2KTsKKwkJCXJldHZhbCA9IHNlbGVjdCgoaW50KXBhcnMuc29ja2N0cmwgKyAxLCAmcmZkcywgTlVMTCwgTlVMTCwgJnR2KTsKIAkJCWlmIChyZXR2YWwgPT0gLTEpCiAJCQl7Ci0JCQkJc29ja19nZXRlcnJvcigic2VsZWN0IGZhaWxlZDogIiwgZXJybXNnYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKLQkJCQlpZiAocnBjYXBfc2VuZGVycm9yKHBhcnMuc29ja2N0cmxfb3V0LCAwLCBQQ0FQX0VSUl9ORVRXLCBlcnJtc2didWYsIGVycmJ1ZikgPT0gLTEpCisJCQkJc29ja19nZXRlcnJvcigic2VsZWN0KCkgZmFpbGVkIiwgZXJybXNnYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKKwkJCQlpZiAocnBjYXBfc2VuZGVycm9yKHBhcnMuc29ja2N0cmwsIHBhcnMuc3NsLCAwLCBQQ0FQX0VSUl9ORVRXLCBlcnJtc2didWYsIGVycmJ1ZikgPT0gLTEpCiAJCQkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIlNlbmQgdG8gY2xpZW50IGZhaWxlZDogJXMiLCBlcnJidWYpOwogCQkJCWdvdG8gZW5kOwogCQkJfQpAQCAtMjI1LDcgKzUzMyw3IEBACiAJCQkvLyBTbywgdGhpcyB3YXMgYSBmYWtlIGNvbm5lY3Rpb24uIERyb3AgaXQgZG93bgogCQkJaWYgKHJldHZhbCA9PSAwKQogCQkJewotCQkJCWlmIChycGNhcF9zZW5kZXJyb3IocGFycy5zb2NrY3RybF9vdXQsIDAsIFBDQVBfRVJSX0lOSVRUSU1FT1VULCAiVGhlIFJQQ0FQIGluaXRpYWwgdGltZW91dCBoYXMgZXhwaXJlZCIsIGVycmJ1ZikgPT0gLTEpCisJCQkJaWYgKHJwY2FwX3NlbmRlcnJvcihwYXJzLnNvY2tjdHJsLCBwYXJzLnNzbCwgMCwgUENBUF9FUlJfSU5JVFRJTUVPVVQsICJUaGUgUlBDQVAgaW5pdGlhbCB0aW1lb3V0IGhhcyBleHBpcmVkIiwgZXJyYnVmKSA9PSAtMSkKIAkJCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiU2VuZCB0byBjbGllbnQgZmFpbGVkOiAlcyIsIGVycmJ1Zik7CiAJCQkJZ290byBlbmQ7CiAJCQl9CkBAIC0yMzQsNyArNTQyLDcgQEAKIAkJLy8KIAkJLy8gUmVhZCB0aGUgbWVzc2FnZSBoZWFkZXIgZnJvbSB0aGUgY2xpZW50LgogCQkvLwotCQlucmVjdiA9IHJwY2FwZF9yZWN2X21zZ19oZWFkZXIocGFycy5zb2NrY3RybF9pbiwgJmhlYWRlcik7CisJCW5yZWN2ID0gcnBjYXBkX3JlY3ZfbXNnX2hlYWRlcihwYXJzLnNvY2tjdHJsLCBwYXJzLnNzbCwgJmhlYWRlcik7CiAJCWlmIChucmVjdiA9PSAtMSkKIAkJewogCQkJLy8gRmF0YWwgZXJyb3IuCkBAIC0yNDksNDkgKzU1NywxNyBAQAogCQlwbGVuID0gaGVhZGVyLnBsZW47CiAKIAkJLy8KLQkJLy8gRGlkIHRoZSBjbGllbnQgc3BlY2lmeSBhIHZlcnNpb24gd2UgY2FuIGhhbmRsZT8KKwkJLy8gV2hpbGUgd2UncmUgaW4gdGhlIGF1dGhlbnRpY2F0aW9uIHBoYXJzZSwgYWxsIHJlcXVlc3RzCisJCS8vIG11c3QgdXNlIHZlcnNpb24gMC4KIAkJLy8KLQkJaWYgKCFSUENBUF9WRVJTSU9OX0lTX1NVUFBPUlRFRChoZWFkZXIudmVyKSkKKwkJaWYgKGhlYWRlci52ZXIgIT0gMCkKIAkJewogCQkJLy8KLQkJCS8vIFRlbGwgdGhlbSBpdCdzIG5vdCBhIHZhbGlkIHByb3RvY29sIHZlcnNpb24uCisJCQkvLyBTZW5kIGl0IGJhY2sgdG8gdGhlbSB3aXRoIHRoZWlyIHZlcnNpb24uCiAJCQkvLwotCQkJdWludDggcmVwbHlfdmVyc2lvbjsKLQotCQkJLy8KLQkJCS8vIElmIFJQQ0FQX01JTl9WRVJTSU9OIGlzIDAsIG5vIHZlcnNpb24gaXMgdG9vCi0JCQkvLyBvbGQsIGFzIHRoZSBvbGRlc3Qgc3VwcG9ydGVkIHZlcnNpb24gaXMgMCwKLQkJCS8vIGFuZCB0aGVyZSBhcmUgbm8gbmVnYXRpdmUgdmVyc2lvbnMuCi0JCQkvLwotI2lmIFJQQ0FQX01JTl9WRVJTSU9OICE9IDAKLQkJCWlmIChoZWFkZXIudmVyIDwgUlBDQVBfTUlOX1ZFUlNJT04pCi0JCQl7Ci0JCQkJLy8KLQkJCQkvLyBUaGVpciBtYXhpbXVtIHZlcnNpb24gaXMgdG9vIG9sZDsKLQkJCQkvLyB0aGVyZSAqaXMqIG5vIHZlcnNpb24gd2UgY2FuIGJvdGgKLQkJCQkvLyBoYW5kbGUsIGFuZCB0aGV5IG1pZ2h0IHJlamVjdAotCQkJCS8vIGFuIGVycm9yIHdpdGggYSB2ZXJzaW9uIHRoZXkgZG9uJ3QKLQkJCQkvLyB1bmRlcnN0YW5kLCBzbyByZXBseSB3aXRoIHRoZQotCQkJCS8vIHZlcnNpb24gdGhleSBzZW50LiAgVGhhdCBtYXkKLQkJCQkvLyBtYWtlIHRoZW0gcmV0cnkgd2l0aCB0aGF0IHZlcnNpb24sCi0JCQkJLy8gYnV0IHRoZXknbGwgZ2l2ZSB1cCBvbiB0aGF0Ci0JCQkJLy8gZmFpbHVyZS4KLQkJCQkvLwotCQkJCXJlcGx5X3ZlcnNpb24gPSBoZWFkZXIudmVyOwotCQkJfQotCQkJZWxzZQotI2VuZGlmCi0JCQl7Ci0JCQkJLy8KLQkJCQkvLyBUaGVpciBtYXhpbXVtIHZlcnNpb24gaXMgdG9vIG5ldywKLQkJCQkvLyBidXQgdGhleSBtaWdodCBiZSBhYmxlIHRvIGhhbmRsZQotCQkJCS8vICpvdXIqIG1heGltdW0gdmVyc2lvbiwgc28gcmVwbHkKLQkJCQkvLyB3aXRoIHRoYXQgdmVyc2lvbi4KLQkJCQkvLwotCQkJCXJlcGx5X3ZlcnNpb24gPSBSUENBUF9NQVhfVkVSU0lPTjsKLQkJCX0KLQkJCWlmIChycGNhcF9zZW5kZXJyb3IocGFycy5zb2NrY3RybF9vdXQsIHJlcGx5X3ZlcnNpb24sCi0JCQkgICAgUENBUF9FUlJfV1JPTkdWRVIsICJSUENBUCB2ZXJzaW9uIG51bWJlciBtaXNtYXRjaCIsCisJCQlpZiAocnBjYXBfc2VuZGVycm9yKHBhcnMuc29ja2N0cmwsIHBhcnMuc3NsLCBoZWFkZXIudmVyLAorCQkJICAgIFBDQVBfRVJSX1dST05HVkVSLAorCQkJICAgICJSUENBUCB2ZXJzaW9uIGluIHJlcXVlc3RzIGluIHRoZSBhdXRoZW50aWNhdGlvbiBwaGFzZSBtdXN0IGJlIDAiLAogCQkJICAgIGVycmJ1ZikgPT0gLTEpCiAJCQl7CiAJCQkJLy8gVGhhdCBmYWlsZWQ7IGxvZyBhIG1lc3NhZ2UgYW5kIGdpdmUgdXAuCkBAIC0yOTksMjIgKzU3NSwxMiBAQAogCQkJCWdvdG8gZW5kOwogCQkJfQogCi0JCQkvLyBEaXNjYXJkIHRoZSByZXN0IG9mIHRoZSBtZXNzYWdlLgotCQkJaWYgKHJwY2FwZF9kaXNjYXJkKHBhcnMuc29ja2N0cmxfaW4sIHBsZW4pID09IC0xKQotCQkJewotCQkJCS8vIE5ldHdvcmsgZXJyb3IuCi0JCQkJZ290byBlbmQ7Ci0JCQl9Ci0KLQkJCS8vIExldCB0aGVtIHRyeSBhZ2Fpbi4KLQkJCWNvbnRpbnVlOworCQkJLy8gRGlzY2FyZCB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZSBhbmQgZHJvcCB0aGUKKwkJCS8vIGNvbm5lY3Rpb24uCisJCQkodm9pZClycGNhcGRfZGlzY2FyZChwYXJzLnNvY2tjdHJsLCBwYXJzLnNzbCwgcGxlbik7CisJCQlnb3RvIGVuZDsKIAkJfQogCi0JCS8vCi0JCS8vIE9LLCB3ZSB1c2UgdGhlIHZlcnNpb24gdGhlIGNsaWVudCBzcGVjaWZpZWQuCi0JCS8vCi0JCXBhcnMucHJvdG9jb2xfdmVyc2lvbiA9IGhlYWRlci52ZXI7Ci0KIAkJc3dpdGNoIChoZWFkZXIudHlwZSkKIAkJewogCQkJY2FzZSBSUENBUF9NU0dfQVVUSF9SRVE6CkBAIC0zNDQsNyArNjEwLDcgQEAKIAkJCQkvLyBEaXNjYXJkIHRoZSByZXN0IG9mIHRoZSBtZXNzYWdlLCBpZgogCQkJCS8vIHRoZXJlIGlzIGFueXRoaW5nIG1vcmUuCiAJCQkJLy8KLQkJCQkodm9pZClycGNhcGRfZGlzY2FyZChwYXJzLnNvY2tjdHJsX2luLCBwbGVuKTsKKwkJCQkodm9pZClycGNhcGRfZGlzY2FyZChwYXJzLnNvY2tjdHJsLCBwYXJzLnNzbCwgcGxlbik7CiAJCQkJLy8gV2UncmUgZG9uZSB3aXRoIHRoaXMgY2xpZW50LgogCQkJCWdvdG8gZW5kOwogCkBAIC0zNTYsNyArNjIyLDcgQEAKIAkJCQkvLyBhbiBlcnJvciBtZXNzYWdlIHJhdGhlciB0aGFuIGEgImxldAogCQkJCS8vIG1lIGxvZyBpbiIgbWVzc2FnZSwgaW5kaWNhdGluZyB0aGF0CiAJCQkJLy8gd2UncmUgbm90IGFsbG93ZWQgdG8gY29ubmVjdCB0byB0aGVtPwotCQkJCSh2b2lkKWRhZW1vbl9tc2dfZXJyKHBhcnMuc29ja2N0cmxfaW4sIHBsZW4pOworCQkJCSh2b2lkKWRhZW1vbl9tc2dfZXJyKHBhcnMuc29ja2N0cmwsIHBhcnMuc3NsLCBwbGVuKTsKIAkJCQlnb3RvIGVuZDsKIAogCQkJY2FzZSBSUENBUF9NU0dfRklOREFMTElGX1JFUToKQEAgLTM3MywyMSArNjM5LDIxIEBACiAJCQkJbXNnX3R5cGVfc3RyaW5nID0gcnBjYXBfbXNnX3R5cGVfc3RyaW5nKGhlYWRlci50eXBlKTsKIAkJCQlpZiAobXNnX3R5cGVfc3RyaW5nICE9IE5VTEwpCiAJCQkJewotCQkJCQlwY2FwX3NucHJpbnRmKGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSwgIiVzIHJlcXVlc3Qgc2VudCBiZWZvcmUgYXV0aGVudGljYXRpb24gd2FzIGNvbXBsZXRlZCIsIG1zZ190eXBlX3N0cmluZyk7CisJCQkJCXNucHJpbnRmKGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSwgIiVzIHJlcXVlc3Qgc2VudCBiZWZvcmUgYXV0aGVudGljYXRpb24gd2FzIGNvbXBsZXRlZCIsIG1zZ190eXBlX3N0cmluZyk7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7Ci0JCQkJCXBjYXBfc25wcmludGYoZXJybXNnYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiTWVzc2FnZSBvZiB0eXBlICV1IHNlbnQgYmVmb3JlIGF1dGhlbnRpY2F0aW9uIHdhcyBjb21wbGV0ZWQiLCBoZWFkZXIudHlwZSk7CisJCQkJCXNucHJpbnRmKGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSwgIk1lc3NhZ2Ugb2YgdHlwZSAldSBzZW50IGJlZm9yZSBhdXRoZW50aWNhdGlvbiB3YXMgY29tcGxldGVkIiwgaGVhZGVyLnR5cGUpOwogCQkJCX0KLQkJCQlpZiAocnBjYXBfc2VuZGVycm9yKHBhcnMuc29ja2N0cmxfb3V0LAotCQkJCSAgICBwYXJzLnByb3RvY29sX3ZlcnNpb24sIFBDQVBfRVJSX1dST05HTVNHLAorCQkJCWlmIChycGNhcF9zZW5kZXJyb3IocGFycy5zb2NrY3RybCwgcGFycy5zc2wsCisJCQkJICAgIGhlYWRlci52ZXIsIFBDQVBfRVJSX1dST05HTVNHLAogCQkJCSAgICBlcnJtc2didWYsIGVycmJ1ZikgPT0gLTEpCiAJCQkJewogCQkJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICJTZW5kIHRvIGNsaWVudCBmYWlsZWQ6ICVzIiwgZXJyYnVmKTsKIAkJCQkJZ290byBlbmQ7CiAJCQkJfQogCQkJCS8vIERpc2NhcmQgdGhlIHJlc3Qgb2YgdGhlIG1lc3NhZ2UuCi0JCQkJaWYgKHJwY2FwZF9kaXNjYXJkKHBhcnMuc29ja2N0cmxfaW4sIHBsZW4pID09IC0xKQorCQkJCWlmIChycGNhcGRfZGlzY2FyZChwYXJzLnNvY2tjdHJsLCBwYXJzLnNzbCwgcGxlbikgPT0gLTEpCiAJCQkJewogCQkJCQkvLyBOZXR3b3JrIGVycm9yLgogCQkJCQlnb3RvIGVuZDsKQEAgLTQwOSwyMSArNjc1LDIxIEBACiAJCQkJbXNnX3R5cGVfc3RyaW5nID0gcnBjYXBfbXNnX3R5cGVfc3RyaW5nKGhlYWRlci50eXBlKTsKIAkJCQlpZiAobXNnX3R5cGVfc3RyaW5nICE9IE5VTEwpCiAJCQkJewotCQkJCQlwY2FwX3NucHJpbnRmKGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlNlcnZlci10by1jbGllbnQgbWVzc2FnZSAlcyByZWNlaXZlZCBmcm9tIGNsaWVudCIsIG1zZ190eXBlX3N0cmluZyk7CisJCQkJCXNucHJpbnRmKGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlNlcnZlci10by1jbGllbnQgbWVzc2FnZSAlcyByZWNlaXZlZCBmcm9tIGNsaWVudCIsIG1zZ190eXBlX3N0cmluZyk7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7Ci0JCQkJCXBjYXBfc25wcmludGYoZXJybXNnYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiU2VydmVyLXRvLWNsaWVudCBtZXNzYWdlIG9mIHR5cGUgJXUgcmVjZWl2ZWQgZnJvbSBjbGllbnQiLCBoZWFkZXIudHlwZSk7CisJCQkJCXNucHJpbnRmKGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlNlcnZlci10by1jbGllbnQgbWVzc2FnZSBvZiB0eXBlICV1IHJlY2VpdmVkIGZyb20gY2xpZW50IiwgaGVhZGVyLnR5cGUpOwogCQkJCX0KLQkJCQlpZiAocnBjYXBfc2VuZGVycm9yKHBhcnMuc29ja2N0cmxfb3V0LAotCQkJCSAgICBwYXJzLnByb3RvY29sX3ZlcnNpb24sIFBDQVBfRVJSX1dST05HTVNHLAorCQkJCWlmIChycGNhcF9zZW5kZXJyb3IocGFycy5zb2NrY3RybCwgcGFycy5zc2wsCisJCQkJICAgIGhlYWRlci52ZXIsIFBDQVBfRVJSX1dST05HTVNHLAogCQkJCSAgICBlcnJtc2didWYsIGVycmJ1ZikgPT0gLTEpCiAJCQkJewogCQkJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICJTZW5kIHRvIGNsaWVudCBmYWlsZWQ6ICVzIiwgZXJyYnVmKTsKIAkJCQkJZ290byBlbmQ7CiAJCQkJfQogCQkJCS8vIERpc2NhcmQgdGhlIHJlc3Qgb2YgdGhlIG1lc3NhZ2UuCi0JCQkJaWYgKHJwY2FwZF9kaXNjYXJkKHBhcnMuc29ja2N0cmxfaW4sIHBsZW4pID09IC0xKQorCQkJCWlmIChycGNhcGRfZGlzY2FyZChwYXJzLnNvY2tjdHJsLCBwYXJzLnNzbCwgcGxlbikgPT0gLTEpCiAJCQkJewogCQkJCQkvLyBGYXRhbCBlcnJvci4KIAkJCQkJZ290byBlbmQ7CkBAIC00MzQsMTYgKzcwMCwxNiBAQAogCQkJCS8vCiAJCQkJLy8gVW5rbm93biBtZXNzYWdlIHR5cGUuCiAJCQkJLy8KLQkJCQlwY2FwX3NucHJpbnRmKGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlVua25vd24gbWVzc2FnZSB0eXBlICV1IiwgaGVhZGVyLnR5cGUpOwotCQkJCWlmIChycGNhcF9zZW5kZXJyb3IocGFycy5zb2NrY3RybF9vdXQsCi0JCQkJICAgIHBhcnMucHJvdG9jb2xfdmVyc2lvbiwgUENBUF9FUlJfV1JPTkdNU0csCisJCQkJc25wcmludGYoZXJybXNnYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiVW5rbm93biBtZXNzYWdlIHR5cGUgJXUiLCBoZWFkZXIudHlwZSk7CisJCQkJaWYgKHJwY2FwX3NlbmRlcnJvcihwYXJzLnNvY2tjdHJsLCBwYXJzLnNzbCwKKwkJCQkgICAgaGVhZGVyLnZlciwgUENBUF9FUlJfV1JPTkdNU0csCiAJCQkJICAgIGVycm1zZ2J1ZiwgZXJyYnVmKSA9PSAtMSkKIAkJCQl7CiAJCQkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIlNlbmQgdG8gY2xpZW50IGZhaWxlZDogJXMiLCBlcnJidWYpOwogCQkJCQlnb3RvIGVuZDsKIAkJCQl9CiAJCQkJLy8gRGlzY2FyZCB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZS4KLQkJCQlpZiAocnBjYXBkX2Rpc2NhcmQocGFycy5zb2NrY3RybF9pbiwgcGxlbikgPT0gLTEpCisJCQkJaWYgKHJwY2FwZF9kaXNjYXJkKHBhcnMuc29ja2N0cmwsIHBhcnMuc3NsLCBwbGVuKSA9PSAtMSkKIAkJCQl7CiAJCQkJCS8vIEZhdGFsIGVycm9yLgogCQkJCQlnb3RvIGVuZDsKQEAgLTQ4MSw3ICs3NDcsNyBAQAogCQkvLwogCQkvLyBCZSBjYXJlZnVsbHk6IHRoZSBjYXB0dXJlIGNhbiBoYXZlIGJlZW4gc3RhcnRlZCwgYnV0IGFuIGVycm9yIG9jY3VycmVkIChzbyBzZXNzaW9uICE9IE5VTEwsIGJ1dAogCQkvLyAgc29ja2RhdGEgaXMgMAotCQlpZiAoKCFwYXJzLmlzYWN0aXZlKSAmJiAgKChzZXNzaW9uID09IE5VTEwpIHx8ICgoc2Vzc2lvbiAhPSBOVUxMKSAmJiAoc2Vzc2lvbi0+c29ja2RhdGEgPT0gMCkpKSkKKwkJaWYgKCghcGFycy5pc2FjdGl2ZSkgJiYgKHNlc3Npb24gPT0gTlVMTCB8fCBzZXNzaW9uLT5zb2NrZGF0YSA9PSAwKSkKIAkJewogCQkJLy8gQ2hlY2sgZm9yIHRoZSBpbml0aWFsIHRpbWVvdXQKIAkJCUZEX1pFUk8oJnJmZHMpOwpAQCAtNDg5LDE0ICs3NTUsMTcgQEAKIAkJCXR2LnR2X3NlYyA9IFJQQ0FQX1RJTUVPVVRfUlVOVElNRTsKIAkJCXR2LnR2X3VzZWMgPSAwOwogCi0JCQlGRF9TRVQocGFycy5zb2NrY3RybF9pbiwgJnJmZHMpOwotCi0JCQlyZXR2YWwgPSBzZWxlY3QocGFycy5zb2NrY3RybF9pbiArIDEsICZyZmRzLCBOVUxMLCBOVUxMLCAmdHYpOworCQkJRkRfU0VUKHBhcnMuc29ja2N0cmwsICZyZmRzKTsKKyNpZmRlZiBGVVpaSU5HX0JVSUxEX01PREVfVU5TQUZFX0ZPUl9QUk9EVUNUSU9OCisJCQlyZXR2YWwgPSAxOworI2Vsc2UKKwkJCXJldHZhbCA9IHNlbGVjdCgoaW50KXBhcnMuc29ja2N0cmwgKyAxLCAmcmZkcywgTlVMTCwgTlVMTCwgJnR2KTsKKyNlbmRpZgogCQkJaWYgKHJldHZhbCA9PSAtMSkKIAkJCXsKLQkJCQlzb2NrX2dldGVycm9yKCJzZWxlY3QgZmFpbGVkOiAiLCBlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUpOwotCQkJCWlmIChycGNhcF9zZW5kZXJyb3IocGFycy5zb2NrY3RybF9vdXQsCi0JCQkJICAgIHBhcnMucHJvdG9jb2xfdmVyc2lvbiwgUENBUF9FUlJfTkVUVywKKwkJCQlzb2NrX2dldGVycm9yKCJzZWxlY3QoKSBmYWlsZWQiLCBlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUpOworCQkJCWlmIChycGNhcF9zZW5kZXJyb3IocGFycy5zb2NrY3RybCwgcGFycy5zc2wsCisJCQkJICAgIDAsIFBDQVBfRVJSX05FVFcsCiAJCQkJICAgIGVycm1zZ2J1ZiwgZXJyYnVmKSA9PSAtMSkKIAkJCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiU2VuZCB0byBjbGllbnQgZmFpbGVkOiAlcyIsIGVycmJ1Zik7CiAJCQkJZ290byBlbmQ7CkBAIC01MDYsOSArNzc1LDggQEAKIAkJCS8vIFNvLCB0aGlzIHdhcyBhIGZha2UgY29ubmVjdGlvbi4gRHJvcCBpdCBkb3duCiAJCQlpZiAocmV0dmFsID09IDApCiAJCQl7Ci0JCQkJaWYgKHJwY2FwX3NlbmRlcnJvcihwYXJzLnNvY2tjdHJsX291dCwKLQkJCQkgICAgcGFycy5wcm90b2NvbF92ZXJzaW9uLAotCQkJCSAgICBQQ0FQX0VSUl9JTklUVElNRU9VVCwKKwkJCQlpZiAocnBjYXBfc2VuZGVycm9yKHBhcnMuc29ja2N0cmwsIHBhcnMuc3NsLAorCQkJCSAgICAwLCBQQ0FQX0VSUl9JTklUVElNRU9VVCwKIAkJCQkgICAgIlRoZSBSUENBUCBpbml0aWFsIHRpbWVvdXQgaGFzIGV4cGlyZWQiLAogCQkJCSAgICBlcnJidWYpID09IC0xKQogCQkJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICJTZW5kIHRvIGNsaWVudCBmYWlsZWQ6ICVzIiwgZXJyYnVmKTsKQEAgLTUxOSw3ICs3ODcsNyBAQAogCQkvLwogCQkvLyBSZWFkIHRoZSBtZXNzYWdlIGhlYWRlciBmcm9tIHRoZSBjbGllbnQuCiAJCS8vCi0JCW5yZWN2ID0gcnBjYXBkX3JlY3ZfbXNnX2hlYWRlcihwYXJzLnNvY2tjdHJsX2luLCAmaGVhZGVyKTsKKwkJbnJlY3YgPSBycGNhcGRfcmVjdl9tc2dfaGVhZGVyKHBhcnMuc29ja2N0cmwsIHBhcnMuc3NsLCAmaGVhZGVyKTsKIAkJaWYgKG5yZWN2ID09IC0xKQogCQl7CiAJCQkvLyBGYXRhbCBlcnJvci4KQEAgLTUzNCwyMSArODAyLDIwIEBACiAJCXBsZW4gPSBoZWFkZXIucGxlbjsKIAogCQkvLwotCQkvLyBEaWQgdGhlIGNsaWVudCBzcGVjaWZ5IHRoZSB2ZXJzaW9uIHdlIG5lZ290aWF0ZWQ/CisJCS8vIERpZCB0aGUgY2xpZW50IHNwZWNpZnkgYSBwcm90b2NvbCB2ZXJzaW9uIHRoYXQgd2UKKwkJLy8gc3VwcG9ydD8KIAkJLy8KLQkJLy8gRm9yIG5vdywgdGhlcmUncyBvbmx5IG9uZSB2ZXJzaW9uLgotCQkvLwotCQlpZiAoaGVhZGVyLnZlciAhPSBwYXJzLnByb3RvY29sX3ZlcnNpb24pCisJCWlmICghUlBDQVBfVkVSU0lPTl9JU19TVVBQT1JURUQoaGVhZGVyLnZlcikpCiAJCXsKIAkJCS8vCi0JCQkvLyBUZWxsIHRoZW0gaXQncyBub3QgdGhlIG5lZ290aWF0ZWQgdmVyc2lvbi4KKwkJCS8vIFRlbGwgdGhlbSBpdCdzIG5vdCBhIHN1cHBvcnRlZCB2ZXJzaW9uLgogCQkJLy8gU2VuZCB0aGUgZXJyb3IgbWVzc2FnZSB3aXRoIHRoZWlyIHZlcnNpb24sCiAJCQkvLyBzbyB0aGV5IGRvbid0IHJlamVjdCBpdCBhcyBoYXZpbmcgdGhlIHdyb25nCiAJCQkvLyB2ZXJzaW9uLgogCQkJLy8KLQkJCWlmIChycGNhcF9zZW5kZXJyb3IocGFycy5zb2NrY3RybF9vdXQsCisJCQlpZiAocnBjYXBfc2VuZGVycm9yKHBhcnMuc29ja2N0cmwsIHBhcnMuc3NsLAogCQkJICAgIGhlYWRlci52ZXIsIFBDQVBfRVJSX1dST05HVkVSLAotCQkJICAgICJSUENBUCB2ZXJzaW9uIGluIG1lc3NhZ2UgaXNuJ3QgdGhlIG5lZ290aWF0ZWQgdmVyc2lvbiIsCisJCQkgICAgIlJQQ0FQIHZlcnNpb24gaW4gbWVzc2FnZSBpc24ndCBzdXBwb3J0ZWQgYnkgdGhlIHNlcnZlciIsCiAJCQkgICAgZXJyYnVmKSA9PSAtMSkKIAkJCXsKIAkJCQkvLyBUaGF0IGZhaWxlZDsgbG9nIGEgbWVzc2FnZSBhbmQgZ2l2ZSB1cC4KQEAgLTU1Nyw3ICs4MjQsNyBAQAogCQkJfQogCiAJCQkvLyBEaXNjYXJkIHRoZSByZXN0IG9mIHRoZSBtZXNzYWdlLgotCQkJKHZvaWQpcnBjYXBkX2Rpc2NhcmQocGFycy5zb2NrY3RybF9pbiwgcGxlbik7CisJCQkodm9pZClycGNhcGRfZGlzY2FyZChwYXJzLnNvY2tjdHJsLCBwYXJzLnNzbCwgcGxlbik7CiAJCQkvLyBHaXZlIHVwIG9uIHRoZW0uCiAJCQlnb3RvIGVuZDsKIAkJfQpAQCAtNTY2LDcgKzgzMyw3IEBACiAJCXsKIAkJCWNhc2UgUlBDQVBfTVNHX0VSUk9SOgkJLy8gVGhlIG90aGVyIGVuZHBvaW50IHJlcG9ydGVkIGFuIGVycm9yCiAJCQl7Ci0JCQkJKHZvaWQpZGFlbW9uX21zZ19lcnIocGFycy5zb2NrY3RybF9pbiwgcGxlbik7CisJCQkJKHZvaWQpZGFlbW9uX21zZ19lcnIocGFycy5zb2NrY3RybCwgcGFycy5zc2wsIHBsZW4pOwogCQkJCS8vIERvIG5vdGhpbmc7IGp1c3QgZXhpdDsgdGhlIGVycm9yIGNvZGUgaXMgYWxyZWFkeSBpbnRvIHRoZSBlcnJidWYKIAkJCQkvLyBYWFggLSBhY3R1YWxseSBleGl0Li4uLgogCQkJCWJyZWFrOwpAQCAtNTc0LDcgKzg0MSw3IEBACiAKIAkJCWNhc2UgUlBDQVBfTVNHX0ZJTkRBTExJRl9SRVE6CiAJCQl7Ci0JCQkJaWYgKGRhZW1vbl9tc2dfZmluZGFsbGlmX3JlcSgmcGFycywgcGxlbikgPT0gLTEpCisJCQkJaWYgKGRhZW1vbl9tc2dfZmluZGFsbGlmX3JlcShoZWFkZXIudmVyLCAmcGFycywgcGxlbikgPT0gLTEpCiAJCQkJewogCQkJCQkvLyBGYXRhbCBlcnJvcjsgYSBtZXNzYWdlIGhhcwogCQkJCQkvLyBiZWVuIGxvZ2dlZCwgc28ganVzdCBnaXZlIHVwLgpAQCAtNTk0LDcgKzg2MSw4IEBACiAJCQkJLy8gdXMgbXVsdGlwbGUgb3BlbiByZXF1ZXN0cywgdGhlIGxhc3QKIAkJCQkvLyBvbmUgd2lucy4KIAkJCQkvLwotCQkJCXJldHZhbCA9IGRhZW1vbl9tc2dfb3Blbl9yZXEoJnBhcnMsIHBsZW4sIHNvdXJjZSwgc2l6ZW9mKHNvdXJjZSkpOworCQkJCXJldHZhbCA9IGRhZW1vbl9tc2dfb3Blbl9yZXEoaGVhZGVyLnZlciwgJnBhcnMsCisJCQkJICAgIHBsZW4sIHNvdXJjZSwgc2l6ZW9mKHNvdXJjZSkpOwogCQkJCWlmIChyZXR2YWwgPT0gLTEpCiAJCQkJewogCQkJCQkvLyBGYXRhbCBlcnJvcjsgYSBtZXNzYWdlIGhhcwpAQCAtNjExLDggKzg3OSw4IEBACiAJCQkJewogCQkJCQkvLyBUaGV5IG5ldmVyIHRvbGQgdXMgd2hhdCBkZXZpY2UKIAkJCQkJLy8gdG8gY2FwdHVyZSBvbiEKLQkJCQkJaWYgKHJwY2FwX3NlbmRlcnJvcihwYXJzLnNvY2tjdHJsX291dCwKLQkJCQkJICAgIHBhcnMucHJvdG9jb2xfdmVyc2lvbiwKKwkJCQkJaWYgKHJwY2FwX3NlbmRlcnJvcihwYXJzLnNvY2tjdHJsLCBwYXJzLnNzbCwKKwkJCQkJICAgIGhlYWRlci52ZXIsCiAJCQkJCSAgICBQQ0FQX0VSUl9TVEFSVENBUFRVUkUsCiAJCQkJCSAgICAiTm8gY2FwdHVyZSBkZXZpY2Ugd2FzIHNwZWNpZmllZCIsCiAJCQkJCSAgICBlcnJidWYpID09IC0xKQpAQCAtNjIyLDE0ICs4OTAsMTYgQEAKIAkJCQkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIlNlbmQgdG8gY2xpZW50IGZhaWxlZDogJXMiLCBlcnJidWYpOwogCQkJCQkJZ290byBlbmQ7CiAJCQkJCX0KLQkJCQkJaWYgKHJwY2FwZF9kaXNjYXJkKHBhcnMuc29ja2N0cmxfaW4sIHBsZW4pID09IC0xKQorCQkJCQlpZiAocnBjYXBkX2Rpc2NhcmQocGFycy5zb2NrY3RybCwgcGFycy5zc2wsIHBsZW4pID09IC0xKQogCQkJCQl7CiAJCQkJCQlnb3RvIGVuZDsKIAkJCQkJfQogCQkJCQlicmVhazsKIAkJCQl9CiAKLQkJCQlpZiAoZGFlbW9uX21zZ19zdGFydGNhcF9yZXEoJnBhcnMsIHBsZW4sICZ0aHJlYWRkYXRhLCBzb3VyY2UsICZzZXNzaW9uLCAmc2FtcF9wYXJhbSkgPT0gLTEpCisJCQkJaWYgKGRhZW1vbl9tc2dfc3RhcnRjYXBfcmVxKGhlYWRlci52ZXIsICZwYXJzLAorCQkJCSAgICBwbGVuLCBzb3VyY2UsICZzZXNzaW9uLCAmc2FtcF9wYXJhbSwKKwkJCQkgICAgdXNlc19zc2wpID09IC0xKQogCQkJCXsKIAkJCQkJLy8gRmF0YWwgZXJyb3I7IGEgbWVzc2FnZSBoYXMKIAkJCQkJLy8gYmVlbiBsb2dnZWQsIHNvIGp1c3QgZ2l2ZSB1cC4KQEAgLTY0Miw3ICs5MTIsOCBAQAogCQkJewogCQkJCWlmIChzZXNzaW9uKQogCQkJCXsKLQkJCQkJaWYgKGRhZW1vbl9tc2dfdXBkYXRlZmlsdGVyX3JlcSgmcGFycywgc2Vzc2lvbiwgcGxlbikgPT0gLTEpCisJCQkJCWlmIChkYWVtb25fbXNnX3VwZGF0ZWZpbHRlcl9yZXEoaGVhZGVyLnZlciwKKwkJCQkJICAgICZwYXJzLCBzZXNzaW9uLCBwbGVuKSA9PSAtMSkKIAkJCQkJewogCQkJCQkJLy8gRmF0YWwgZXJyb3I7IGEgbWVzc2FnZSBoYXMKIAkJCQkJCS8vIGJlZW4gbG9nZ2VkLCBzbyBqdXN0IGdpdmUgdXAuCkBAIC02NTEsOCArOTIyLDggQEAKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKLQkJCQkJaWYgKHJwY2FwX3NlbmRlcnJvcihwYXJzLnNvY2tjdHJsX291dCwKLQkJCQkJICAgIHBhcnMucHJvdG9jb2xfdmVyc2lvbiwKKwkJCQkJaWYgKHJwY2FwX3NlbmRlcnJvcihwYXJzLnNvY2tjdHJsLCBwYXJzLnNzbCwKKwkJCQkJICAgIGhlYWRlci52ZXIsCiAJCQkJCSAgICBQQ0FQX0VSUl9VUERBVEVGSUxURVIsCiAJCQkJCSAgICAiRGV2aWNlIG5vdCBvcGVuZWQuIENhbm5vdCB1cGRhdGUgZmlsdGVyIiwKIAkJCQkJICAgIGVycmJ1ZikgPT0gLTEpCkBAIC02NzMsMTMgKzk0NCwxNCBAQAogCQkJCS8vIFRoaXMgaXMgdXNlZCBvbmx5IGluIGNhc2Ugb2YgYWN0aXZlIG1vZGUuCiAJCQkJLy8KIAkJCQljbGllbnRfdG9sZF91c190b19jbG9zZSA9IDE7Ci0JCQkJU09DS19ERUJVR19NRVNTQUdFKCJUaGUgb3RoZXIgZW5kIHN5c3RlbSBhc2tlZCB0byBjbG9zZSB0aGUgY29ubmVjdGlvbi4iKTsKKwkJCQlycGNhcGRfbG9nKExPR1BSSU9fREVCVUcsICJUaGUgb3RoZXIgZW5kIHN5c3RlbSBhc2tlZCB0byBjbG9zZSB0aGUgY29ubmVjdGlvbi4iKTsKIAkJCQlnb3RvIGVuZDsKIAkJCX0KIAogCQkJY2FzZSBSUENBUF9NU0dfU1RBVFNfUkVROgogCQkJewotCQkJCWlmIChkYWVtb25fbXNnX3N0YXRzX3JlcSgmcGFycywgc2Vzc2lvbiwgcGxlbiwgJnN0YXRzLCBzdnJjYXB0KSA9PSAtMSkKKwkJCQlpZiAoZGFlbW9uX21zZ19zdGF0c19yZXEoaGVhZGVyLnZlciwgJnBhcnMsCisJCQkJICAgIHNlc3Npb24sIHBsZW4sICZzdGF0cywgc3ZyY2FwdCkgPT0gLTEpCiAJCQkJewogCQkJCQkvLyBGYXRhbCBlcnJvcjsgYSBtZXNzYWdlIGhhcwogCQkJCQkvLyBiZWVuIGxvZ2dlZCwgc28ganVzdCBnaXZlIHVwLgpAQCAtNzA1LDcgKzk3Nyw4IEBACiAJCQkJCQlzdnJjYXB0ID0gMDsKIAkJCQkJfQogCi0JCQkJCWlmIChkYWVtb25fbXNnX2VuZGNhcF9yZXEoJnBhcnMsIHNlc3Npb24sICZ0aHJlYWRkYXRhKSA9PSAtMSkKKwkJCQkJaWYgKGRhZW1vbl9tc2dfZW5kY2FwX3JlcShoZWFkZXIudmVyLAorCQkJCQkgICAgJnBhcnMsIHNlc3Npb24pID09IC0xKQogCQkJCQl7CiAJCQkJCQlmcmVlKHNlc3Npb24pOwogCQkJCQkJc2Vzc2lvbiA9IE5VTEw7CkBAIC03MTgsOCArOTkxLDggQEAKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKLQkJCQkJcnBjYXBfc2VuZGVycm9yKHBhcnMuc29ja2N0cmxfb3V0LAotCQkJCQkgICAgcGFycy5wcm90b2NvbF92ZXJzaW9uLAorCQkJCQlycGNhcF9zZW5kZXJyb3IocGFycy5zb2NrY3RybCwgcGFycy5zc2wsCisJCQkJCSAgICBoZWFkZXIudmVyLAogCQkJCQkgICAgUENBUF9FUlJfRU5EQ0FQVFVSRSwKIAkJCQkJICAgICJEZXZpY2Ugbm90IG9wZW5lZC4gQ2Fubm90IGNsb3NlIHRoZSBjYXB0dXJlIiwKIAkJCQkJICAgIGVycmJ1Zik7CkBAIC03MjksNyArMTAwMiw4IEBACiAKIAkJCWNhc2UgUlBDQVBfTVNHX1NFVFNBTVBMSU5HX1JFUToKIAkJCXsKLQkJCQlpZiAoZGFlbW9uX21zZ19zZXRzYW1wbGluZ19yZXEoJnBhcnMsIHBsZW4sICZzYW1wX3BhcmFtKSA9PSAtMSkKKwkJCQlpZiAoZGFlbW9uX21zZ19zZXRzYW1wbGluZ19yZXEoaGVhZGVyLnZlciwKKwkJCQkgICAgJnBhcnMsIHBsZW4sICZzYW1wX3BhcmFtKSA9PSAtMSkKIAkJCQl7CiAJCQkJCS8vIEZhdGFsIGVycm9yOyBhIG1lc3NhZ2UgaGFzCiAJCQkJCS8vIGJlZW4gbG9nZ2VkLCBzbyBqdXN0IGdpdmUgdXAuCkBAIC03NDUsOCArMTAxOSw4IEBACiAJCQkJLy8gZ2V0IHRvIHJlYXV0aGVudGljYXRlLgogCQkJCS8vCiAJCQkJcnBjYXBkX2xvZyhMT0dQUklPX0lORk8sICJUaGUgY2xpZW50IHNlbnQgYW4gUlBDQVBfTVNHX0FVVEhfUkVRIG1lc3NhZ2UgYWZ0ZXIgYXV0aGVudGljYXRpb24gd2FzIGNvbXBsZXRlZCIpOwotCQkJCWlmIChycGNhcF9zZW5kZXJyb3IocGFycy5zb2NrY3RybF9vdXQsCi0JCQkJICAgIHBhcnMucHJvdG9jb2xfdmVyc2lvbiwKKwkJCQlpZiAocnBjYXBfc2VuZGVycm9yKHBhcnMuc29ja2N0cmwsIHBhcnMuc3NsLAorCQkJCSAgICBoZWFkZXIudmVyLAogCQkJCSAgICBQQ0FQX0VSUl9XUk9OR01TRywKIAkJCQkgICAgIlJQQ0FQX01TR19BVVRIX1JFUSByZXF1ZXN0IHNlbnQgYWZ0ZXIgYXV0aGVudGljYXRpb24gd2FzIGNvbXBsZXRlZCIsCiAJCQkJICAgIGVycmJ1ZikgPT0gLTEpCkBAIC03NTUsNyArMTAyOSw3IEBACiAJCQkJCWdvdG8gZW5kOwogCQkJCX0KIAkJCQkvLyBEaXNjYXJkIHRoZSByZXN0IG9mIHRoZSBtZXNzYWdlLgotCQkJCWlmIChycGNhcGRfZGlzY2FyZChwYXJzLnNvY2tjdHJsX2luLCBwbGVuKSA9PSAtMSkKKwkJCQlpZiAocnBjYXBkX2Rpc2NhcmQocGFycy5zb2NrY3RybCwgcGFycy5zc2wsIHBsZW4pID09IC0xKQogCQkJCXsKIAkJCQkJLy8gRmF0YWwgZXJyb3IuCiAJCQkJCWdvdG8gZW5kOwpAQCAtNzc4LDIyICsxMDUyLDIyIEBACiAJCQkJaWYgKG1zZ190eXBlX3N0cmluZyAhPSBOVUxMKQogCQkJCXsKIAkJCQkJcnBjYXBkX2xvZyhMT0dQUklPX0lORk8sICJUaGUgY2xpZW50IHNlbnQgYSAlcyBzZXJ2ZXItdG8tY2xpZW50IG1lc3NhZ2UiLCBtc2dfdHlwZV9zdHJpbmcpOwotCQkJCQlwY2FwX3NucHJpbnRmKGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlNlcnZlci10by1jbGllbnQgbWVzc2FnZSAlcyByZWNlaXZlZCBmcm9tIGNsaWVudCIsIG1zZ190eXBlX3N0cmluZyk7CisJCQkJCXNucHJpbnRmKGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlNlcnZlci10by1jbGllbnQgbWVzc2FnZSAlcyByZWNlaXZlZCBmcm9tIGNsaWVudCIsIG1zZ190eXBlX3N0cmluZyk7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7CiAJCQkJCXJwY2FwZF9sb2coTE9HUFJJT19JTkZPLCAiVGhlIGNsaWVudCBzZW50IGEgc2VydmVyLXRvLWNsaWVudCBtZXNzYWdlIG9mIHR5cGUgJXUiLCBoZWFkZXIudHlwZSk7Ci0JCQkJCXBjYXBfc25wcmludGYoZXJybXNnYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiU2VydmVyLXRvLWNsaWVudCBtZXNzYWdlIG9mIHR5cGUgJXUgcmVjZWl2ZWQgZnJvbSBjbGllbnQiLCBoZWFkZXIudHlwZSk7CisJCQkJCXNucHJpbnRmKGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlNlcnZlci10by1jbGllbnQgbWVzc2FnZSBvZiB0eXBlICV1IHJlY2VpdmVkIGZyb20gY2xpZW50IiwgaGVhZGVyLnR5cGUpOwogCQkJCX0KLQkJCQlpZiAocnBjYXBfc2VuZGVycm9yKHBhcnMuc29ja2N0cmxfb3V0LAotCQkJCSAgICBwYXJzLnByb3RvY29sX3ZlcnNpb24sIFBDQVBfRVJSX1dST05HTVNHLAorCQkJCWlmIChycGNhcF9zZW5kZXJyb3IocGFycy5zb2NrY3RybCwgcGFycy5zc2wsCisJCQkJICAgIGhlYWRlci52ZXIsIFBDQVBfRVJSX1dST05HTVNHLAogCQkJCSAgICBlcnJtc2didWYsIGVycmJ1ZikgPT0gLTEpCiAJCQkJewogCQkJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICJTZW5kIHRvIGNsaWVudCBmYWlsZWQ6ICVzIiwgZXJyYnVmKTsKIAkJCQkJZ290byBlbmQ7CiAJCQkJfQogCQkJCS8vIERpc2NhcmQgdGhlIHJlc3Qgb2YgdGhlIG1lc3NhZ2UuCi0JCQkJaWYgKHJwY2FwZF9kaXNjYXJkKHBhcnMuc29ja2N0cmxfaW4sIHBsZW4pID09IC0xKQorCQkJCWlmIChycGNhcGRfZGlzY2FyZChwYXJzLnNvY2tjdHJsLCBwYXJzLnNzbCwgcGxlbikgPT0gLTEpCiAJCQkJewogCQkJCQkvLyBGYXRhbCBlcnJvci4KIAkJCQkJZ290byBlbmQ7CkBAIC04MDUsMTYgKzEwNzksMTYgQEAKIAkJCQkvLyBVbmtub3duIG1lc3NhZ2UgdHlwZS4KIAkJCQkvLwogCQkJCXJwY2FwZF9sb2coTE9HUFJJT19JTkZPLCAiVGhlIGNsaWVudCBzZW50IGEgbWVzc2FnZSBvZiB0eXBlICV1IiwgaGVhZGVyLnR5cGUpOwotCQkJCXBjYXBfc25wcmludGYoZXJybXNnYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiVW5rbm93biBtZXNzYWdlIHR5cGUgJXUiLCBoZWFkZXIudHlwZSk7Ci0JCQkJaWYgKHJwY2FwX3NlbmRlcnJvcihwYXJzLnNvY2tjdHJsX291dCwKLQkJCQkgICAgcGFycy5wcm90b2NvbF92ZXJzaW9uLCBQQ0FQX0VSUl9XUk9OR01TRywKKwkJCQlzbnByaW50ZihlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUsICJVbmtub3duIG1lc3NhZ2UgdHlwZSAldSIsIGhlYWRlci50eXBlKTsKKwkJCQlpZiAocnBjYXBfc2VuZGVycm9yKHBhcnMuc29ja2N0cmwsIHBhcnMuc3NsLAorCQkJCSAgICBoZWFkZXIudmVyLCBQQ0FQX0VSUl9XUk9OR01TRywKIAkJCQkgICAgZXJyYnVmLCBlcnJtc2didWYpID09IC0xKQogCQkJCXsKIAkJCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiU2VuZCB0byBjbGllbnQgZmFpbGVkOiAlcyIsIGVycmJ1Zik7CiAJCQkJCWdvdG8gZW5kOwogCQkJCX0KIAkJCQkvLyBEaXNjYXJkIHRoZSByZXN0IG9mIHRoZSBtZXNzYWdlLgotCQkJCWlmIChycGNhcGRfZGlzY2FyZChwYXJzLnNvY2tjdHJsX2luLCBwbGVuKSA9PSAtMSkKKwkJCQlpZiAocnBjYXBkX2Rpc2NhcmQocGFycy5zb2NrY3RybCwgcGFycy5zc2wsIHBsZW4pID09IC0xKQogCQkJCXsKIAkJCQkJLy8gRmF0YWwgZXJyb3IuCiAJCQkJCWdvdG8gZW5kOwpAQCAtODI1LDU4ICsxMDk5LDM0IEBACiAJfQogCiBlbmQ6Ci0JLy8gVGhlIGNoaWxkIHRocmVhZCBpcyBhYm91dCB0byBlbmQKLQotCS8vIHBlcmZvcm0gcGNhcF90IGNsZWFudXAsIGluIGNhc2UgaXQgaGFzIG5vdCBiZWVuIGRvbmUKKwkvLyBUaGUgc2VydmljZSBsb29wIGlzIGZpbmlzaGluZyB1cC4KKwkvLyBJZiB3ZSBoYXZlIGEgY2FwdHVyZSBzZXNzaW9uIHJ1bm5pbmcsIGNsb3NlIGl0LgogCWlmIChzZXNzaW9uKQogCXsKLQkJaWYgKHRocmVhZGRhdGEuaGF2ZV90aHJlYWQpCi0JCXsKLSNpZmRlZiBfV0lOMzIKLQkJCS8vCi0JCQkvLyBUZWxsIHRoZSBkYXRhIGNvbm5lY3Rpb24gdGhyZWFkIG1haW4gY2FwdHVyZQotCQkJLy8gbG9vcCB0byBicmVhayBvdXQgb2YgdGhhdCBsb29wLgotCQkJLy8KLQkJCXBjYXBfYnJlYWtsb29wKHNlc3Npb24tPmZwKTsKLQotCQkJLy8KLQkJCS8vIElmIGl0J3MgY3VycmVudGx5IGJsb2NrZWQgd2FpdGluZyBmb3IgcGFja2V0cwotCQkJLy8gdG8gYXJyaXZlLCB0cnkgdG8gd2FrZSBpdCB1cCwgc28gaXQgY2FuIHNlZQotCQkJLy8gdGhlICJicmVhayBvdXQgb2YgdGhlIGxvb3AiIGluZGljYXRpb24uCi0JCQkvLwotCQkJU2V0RXZlbnQocGNhcF9nZXRldmVudChzZXNzaW9uLT5mcCkpOwotCi0JCQkvLwotCQkJLy8gV2FpdCBmb3IgdGhlIHRocmVhZCB0byBleGl0LCBzbyB3ZSBkb24ndCBjbG9zZQotCQkJLy8gc29ja2V0cyBvdXQgZnJvbSB1bmRlciBpdC4KLQkJCS8vCi0JCQkvLyBYWFggLSBoYXZlIGEgdGltZW91dCwgc28gd2UgZG9uJ3Qgd2FpdCBmb3JldmVyPwotCQkJLy8KLQkJCVdhaXRGb3JTaW5nbGVPYmplY3QodGhyZWFkZGF0YS50aHJlYWQsIElORklOSVRFKTsKLQotCQkJLy8KLQkJCS8vIFJlbGVhc2UgdGhlIHRocmVhZCBoYW5kbGUsIGFzIHdlJ3JlIGRvbmUgd2l0aAotCQkJLy8gaXQuCi0JCQkvLwotCQkJQ2xvc2VIYW5kbGUodGhyZWFkZGF0YS50aHJlYWQpOwotI2Vsc2UKLQkJCXB0aHJlYWRfY2FuY2VsKHRocmVhZGRhdGEudGhyZWFkKTsKLSNlbmRpZgotCQkJdGhyZWFkZGF0YS5oYXZlX3RocmVhZCA9IDA7Ci0JCX0KLQkJaWYgKHNlc3Npb24tPnNvY2tkYXRhKQotCQl7Ci0JCQlzb2NrX2Nsb3NlKHNlc3Npb24tPnNvY2tkYXRhLCBOVUxMLCAwKTsKLQkJCXNlc3Npb24tPnNvY2tkYXRhID0gMDsKLQkJfQotCQlwY2FwX2Nsb3NlKHNlc3Npb24tPmZwKTsKKwkJc2Vzc2lvbl9jbG9zZShzZXNzaW9uKTsKIAkJZnJlZShzZXNzaW9uKTsKIAkJc2Vzc2lvbiA9IE5VTEw7CiAJfQogCisJaWYgKHBhc3NpdmVDbGllbnRzKSB7CisJCWZyZWUocGFzc2l2ZUNsaWVudHMpOworCX0KKwkvLworCS8vIEZpbmlzaCB1c2luZyB0aGUgU1NMIGhhbmRsZSBmb3IgdGhlIGNvbnRyb2wgc29ja2V0LCBpZiB3ZQorCS8vIGhhdmUgYW4gU1NMIGNvbm5lY3Rpb24sIGFuZCBjbG9zZSB0aGUgY29udHJvbCBzb2NrZXQuCisJLy8KKyNpZmRlZiBIQVZFX09QRU5TU0wKKwlpZiAoc3NsKQorCXsKKwkJLy8gRmluaXNoIHVzaW5nIHRoZSBTU0wgaGFuZGxlIGZvciB0aGUgc29ja2V0LgorCQkvLyBUaGlzIG11c3QgYmUgZG9uZSAqYmVmb3JlKiB0aGUgc29ja2V0IGlzIGNsb3NlZC4KKwkJc3NsX2ZpbmlzaChzc2wpOworCX0KKyNlbmRpZgorCXNvY2tfY2xvc2Uoc29ja2N0cmwsIE5VTEwsIDApOworCiAJLy8gUHJpbnQgbWVzc2FnZSBhbmQgcmV0dXJuCi0JU09DS19ERUJVR19NRVNTQUdFKCJJJ20gZXhpdGluZyBmcm9tIHRoZSBjaGlsZCBsb29wIik7Ci0JU09DS19ERUJVR19NRVNTQUdFKGVycmJ1Zik7CisJcnBjYXBkX2xvZyhMT0dQUklPX0RFQlVHLCAiSSdtIGV4aXRpbmcgZnJvbSB0aGUgY2hpbGQgbG9vcCIpOwogCiAJcmV0dXJuIGNsaWVudF90b2xkX3VzX3RvX2Nsb3NlOwogfQpAQCAtODg1LDcgKzExMzUsNyBAQAogICogVGhpcyBoYW5kbGVzIHRoZSBSUENBUF9NU0dfRVJSIG1lc3NhZ2UuCiAgKi8KIHN0YXRpYyBpbnQKLWRhZW1vbl9tc2dfZXJyKFNPQ0tFVCBzb2NrY3RybF9pbiwgdWludDMyIHBsZW4pCitkYWVtb25fbXNnX2VycihTT0NLRVQgc29ja2N0cmwsIFNTTCAqc3NsLCB1aW50MzIgcGxlbikKIHsKIAljaGFyIGVycmJ1ZltQQ0FQX0VSUkJVRl9TSVpFXTsKIAljaGFyIHJlbW90ZV9lcnJidWZbUENBUF9FUlJCVUZfU0laRV07CkBAIC04OTYsNyArMTE0Niw3IEBACiAJCSAqIE1lc3NhZ2UgaXMgdG9vIGxvbmc7IGp1c3QgcmVhZCBhcyBtdWNoIG9mIGl0IGFzIHdlCiAJCSAqIGNhbiBpbnRvIHRoZSBidWZmZXIgcHJvdmlkZWQsIGFuZCBkaXNjYXJkIHRoZSByZXN0LgogCQkgKi8KLQkJaWYgKHNvY2tfcmVjdihzb2NrY3RybF9pbiwgcmVtb3RlX2VycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSAtIDEsCisJCWlmIChzb2NrX3JlY3Yoc29ja2N0cmwsIHNzbCwgcmVtb3RlX2VycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSAtIDEsCiAJCSAgICBTT0NLX1JFQ0VJVkVBTExfWUVTfFNPQ0tfRU9GX0lTX0VSUk9SLCBlcnJidWYsCiAJCSAgICBQQ0FQX0VSUkJVRl9TSVpFKSA9PSAtMSkKIAkJewpAQCAtOTA0LDcgKzExNTQsNyBAQAogCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiUmVhZCBmcm9tIGNsaWVudCBmYWlsZWQ6ICVzIiwgZXJyYnVmKTsKIAkJCXJldHVybiAtMTsKIAkJfQotCQlpZiAocnBjYXBkX2Rpc2NhcmQoc29ja2N0cmxfaW4sIHBsZW4gLSAoUENBUF9FUlJCVUZfU0laRSAtIDEpKSA9PSAtMSkKKwkJaWYgKHJwY2FwZF9kaXNjYXJkKHNvY2tjdHJsLCBzc2wsIHBsZW4gLSAoUENBUF9FUlJCVUZfU0laRSAtIDEpKSA9PSAtMSkKIAkJewogCQkJLy8gTmV0d29yayBlcnJvci4KIAkJCXJldHVybiAtMTsKQEAgLTkyMiw3ICsxMTcyLDcgQEAKIAl9CiAJZWxzZQogCXsKLQkJaWYgKHNvY2tfcmVjdihzb2NrY3RybF9pbiwgcmVtb3RlX2VycmJ1ZiwgcGxlbiwKKwkJaWYgKHNvY2tfcmVjdihzb2NrY3RybCwgc3NsLCByZW1vdGVfZXJyYnVmLCBwbGVuLAogCQkgICAgU09DS19SRUNFSVZFQUxMX1lFU3xTT0NLX0VPRl9JU19FUlJPUiwgZXJyYnVmLAogCQkgICAgUENBUF9FUlJCVUZfU0laRSkgPT0gLTEpCiAJCXsKQEAgLTk2OCwxMSArMTIxOCwxMyBAQAogewogCWNoYXIgZXJyYnVmW1BDQVBfRVJSQlVGX1NJWkVdOwkJLy8gYnVmZmVyIGZvciBuZXR3b3JrIGVycm9ycwogCWNoYXIgZXJybXNnYnVmW1BDQVBfRVJSQlVGX1NJWkVdOwkvLyBidWZmZXIgZm9yIGVycm9ycyB0byBzZW5kIHRvIHRoZSBjbGllbnQKLQlzdHJ1Y3QgcnBjYXBfaGVhZGVyIGhlYWRlcjsJCS8vIFJQQ0FQIG1lc3NhZ2UgZ2VuZXJhbCBoZWFkZXIKIAlpbnQgc3RhdHVzOwogCXN0cnVjdCBycGNhcF9hdXRoIGF1dGg7CQkJLy8gUlBDQVAgYXV0aGVudGljYXRpb24gaGVhZGVyCisJY2hhciBzZW5kYnVmW1JQQ0FQX05FVEJVRl9TSVpFXTsJLy8gdGVtcG9yYXJ5IGJ1ZmZlciBpbiB3aGljaCBkYXRhIHRvIGJlIHNlbnQgaXMgYnVmZmVyZWQKKwlpbnQgc2VuZGJ1ZmlkeCA9IDA7CQkJLy8gaW5kZXggd2hpY2gga2VlcHMgdGhlIG51bWJlciBvZiBieXRlcyBjdXJyZW50bHkgYnVmZmVyZWQKKwlzdHJ1Y3QgcnBjYXBfYXV0aHJlcGx5ICphdXRocmVwbHk7CS8vIGF1dGhlbnRpY2F0aW9uIHJlcGx5IG1lc3NhZ2UKIAotCXN0YXR1cyA9IHJwY2FwZF9yZWN2KHBhcnMtPnNvY2tjdHJsX2luLCAoY2hhciAqKSAmYXV0aCwgc2l6ZW9mKHN0cnVjdCBycGNhcF9hdXRoKSwgJnBsZW4sIGVycm1zZ2J1Zik7CisJc3RhdHVzID0gcnBjYXBkX3JlY3YocGFycy0+c29ja2N0cmwsIHBhcnMtPnNzbCwgKGNoYXIgKikgJmF1dGgsIHNpemVvZihzdHJ1Y3QgcnBjYXBfYXV0aCksICZwbGVuLCBlcnJtc2didWYpOwogCWlmIChzdGF0dXMgPT0gLTEpCiAJewogCQlyZXR1cm4gLTE7CkBAIC05ODksOCArMTI0MSwxNiBAQAogCQkJaWYgKCFwYXJzLT5udWxsQXV0aEFsbG93ZWQpCiAJCQl7CiAJCQkJLy8gU2VuZCB0aGUgY2xpZW50IGFuIGVycm9yIHJlcGx5LgotCQkJCXBjYXBfc25wcmludGYoZXJybXNnYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiQXV0aGVudGljYXRpb24gZmFpbGVkOyBOVUxMIGF1dGhlbnRpY2F0aW9uIG5vdCBwZXJtaXR0ZWQuIik7Ci0JCQkJZ290byBlcnJvcjsKKwkJCQlzbnByaW50ZihlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkJICAgICJBdXRoZW50aWNhdGlvbiBmYWlsZWQ7IE5VTEwgYXV0aGVudGljYXRpb24gbm90IHBlcm1pdHRlZC4iKTsKKwkJCQlpZiAocnBjYXBfc2VuZGVycm9yKHBhcnMtPnNvY2tjdHJsLCBwYXJzLT5zc2wsCisJCQkJICAgIDAsIFBDQVBfRVJSX0FVVEhfRkFJTEVELCBlcnJtc2didWYsIGVycmJ1ZikgPT0gLTEpCisJCQkJeworCQkJCQkvLyBUaGF0IGZhaWxlZDsgbG9nIGEgbWVzc2FnZSBhbmQgZ2l2ZSB1cC4KKwkJCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiU2VuZCB0byBjbGllbnQgZmFpbGVkOiAlcyIsIGVycmJ1Zik7CisJCQkJCXJldHVybiAtMTsKKwkJCQl9CisJCQkJZ290byBlcnJvcl9ub3JlcGx5OwogCQkJfQogCQkJYnJlYWs7CiAJCX0KQEAgLTEwMDgsNyArMTI2OCw3IEBACiAJCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsIGVycm5vLCAibWFsbG9jKCkgZmFpbGVkIik7CiAJCQkJZ290byBlcnJvcjsKIAkJCX0KLQkJCXN0YXR1cyA9IHJwY2FwZF9yZWN2KHBhcnMtPnNvY2tjdHJsX2luLCB1c2VybmFtZSwgdXNlcm5hbWVsZW4sICZwbGVuLCBlcnJtc2didWYpOworCQkJc3RhdHVzID0gcnBjYXBkX3JlY3YocGFycy0+c29ja2N0cmwsIHBhcnMtPnNzbCwgdXNlcm5hbWUsIHVzZXJuYW1lbGVuLCAmcGxlbiwgZXJybXNnYnVmKTsKIAkJCWlmIChzdGF0dXMgPT0gLTEpCiAJCQl7CiAJCQkJZnJlZSh1c2VybmFtZSk7CkBAIC0xMDMwLDcgKzEyOTAsNyBAQAogCQkJCWZyZWUodXNlcm5hbWUpOwogCQkJCWdvdG8gZXJyb3I7CiAJCQl9Ci0JCQlzdGF0dXMgPSBycGNhcGRfcmVjdihwYXJzLT5zb2NrY3RybF9pbiwgcGFzc3dkLCBwYXNzd2RsZW4sICZwbGVuLCBlcnJtc2didWYpOworCQkJc3RhdHVzID0gcnBjYXBkX3JlY3YocGFycy0+c29ja2N0cmwsIHBhcnMtPnNzbCwgcGFzc3dkLCBwYXNzd2RsZW4sICZwbGVuLCBlcnJtc2didWYpOwogCQkJaWYgKHN0YXR1cyA9PSAtMSkKIAkJCXsKIAkJCQlmcmVlKHVzZXJuYW1lKTsKQEAgLTEwNTMsOSArMTMxMyw4IEBACiAJCQkJLy8KIAkJCQlmcmVlKHVzZXJuYW1lKTsKIAkJCQlmcmVlKHBhc3N3ZCk7Ci0JCQkJaWYgKHJwY2FwX3NlbmRlcnJvcihwYXJzLT5zb2NrY3RybF9vdXQsCi0JCQkJICAgIHBhcnMtPnByb3RvY29sX3ZlcnNpb24sCi0JCQkJICAgIFBDQVBfRVJSX0FVVEgsIGVycm1zZ2J1ZiwgZXJyYnVmKSA9PSAtMSkKKwkJCQlpZiAocnBjYXBfc2VuZGVycm9yKHBhcnMtPnNvY2tjdHJsLCBwYXJzLT5zc2wsCisJCQkJICAgIDAsIFBDQVBfRVJSX0FVVEhfRkFJTEVELCBlcnJtc2didWYsIGVycmJ1ZikgPT0gLTEpCiAJCQkJewogCQkJCQkvLyBUaGF0IGZhaWxlZDsgbG9nIGEgbWVzc2FnZSBhbmQgZ2l2ZSB1cC4KIAkJCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiU2VuZCB0byBjbGllbnQgZmFpbGVkOiAlcyIsIGVycmJ1Zik7CkBAIC0xMDgyLDIzICsxMzQxLDQ5IEBACiAJCQl9CiAKIAkJZGVmYXVsdDoKLQkJCXBjYXBfc25wcmludGYoZXJybXNnYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiQXV0aGVudGljYXRpb24gdHlwZSBub3QgcmVjb2duaXplZC4iKTsKLQkJCWdvdG8gZXJyb3I7CisJCQlzbnByaW50ZihlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkgICAgIkF1dGhlbnRpY2F0aW9uIHR5cGUgbm90IHJlY29nbml6ZWQuIik7CisJCQlpZiAocnBjYXBfc2VuZGVycm9yKHBhcnMtPnNvY2tjdHJsLCBwYXJzLT5zc2wsCisJCQkgICAgMCwgUENBUF9FUlJfQVVUSF9UWVBFX05PVFNVUCwgZXJybXNnYnVmLCBlcnJidWYpID09IC0xKQorCQkJeworCQkJCS8vIFRoYXQgZmFpbGVkOyBsb2cgYSBtZXNzYWdlIGFuZCBnaXZlIHVwLgorCQkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIlNlbmQgdG8gY2xpZW50IGZhaWxlZDogJXMiLCBlcnJidWYpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCWdvdG8gZXJyb3Jfbm9yZXBseTsKIAl9CiAKIAkvLyBUaGUgYXV0aGVudGljYXRpb24gc3VjY2VlZGVkOyBsZXQgdGhlIGNsaWVudCBrbm93LgotCXJwY2FwX2NyZWF0ZWhkcigmaGVhZGVyLCBwYXJzLT5wcm90b2NvbF92ZXJzaW9uLCBSUENBUF9NU0dfQVVUSF9SRVBMWSwgMCwgMCk7CisJaWYgKHNvY2tfYnVmZmVyaXplKE5VTEwsIHNpemVvZihzdHJ1Y3QgcnBjYXBfaGVhZGVyKSwgTlVMTCwgJnNlbmRidWZpZHgsCisJICAgIFJQQ0FQX05FVEJVRl9TSVpFLCBTT0NLQlVGX0NIRUNLT05MWSwgZXJybXNnYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSA9PSAtMSkKKwkJZ290byBlcnJvcjsKIAotCS8vIFNlbmQgdGhlIG9rIG1lc3NhZ2UgYmFjawotCWlmIChzb2NrX3NlbmQocGFycy0+c29ja2N0cmxfb3V0LCAoY2hhciAqKSAmaGVhZGVyLCBzaXplb2YgKHN0cnVjdCBycGNhcF9oZWFkZXIpLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpID09IC0xKQorCXJwY2FwX2NyZWF0ZWhkcigoc3RydWN0IHJwY2FwX2hlYWRlciAqKSBzZW5kYnVmLCAwLAorCSAgICBSUENBUF9NU0dfQVVUSF9SRVBMWSwgMCwgc2l6ZW9mKHN0cnVjdCBycGNhcF9hdXRocmVwbHkpKTsKKworCWF1dGhyZXBseSA9IChzdHJ1Y3QgcnBjYXBfYXV0aHJlcGx5ICopICZzZW5kYnVmW3NlbmRidWZpZHhdOworCisJaWYgKHNvY2tfYnVmZmVyaXplKE5VTEwsIHNpemVvZihzdHJ1Y3QgcnBjYXBfYXV0aHJlcGx5KSwgTlVMTCwgJnNlbmRidWZpZHgsCisJICAgIFJQQ0FQX05FVEJVRl9TSVpFLCBTT0NLQlVGX0NIRUNLT05MWSwgZXJybXNnYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSA9PSAtMSkKKwkJZ290byBlcnJvcjsKKworCS8vCisJLy8gSW5kaWNhdGUgdG8gb3VyIHBlZXIgd2hhdCB2ZXJzaW9ucyB3ZSBzdXBwb3J0LgorCS8vCisJbWVtc2V0KGF1dGhyZXBseSwgMCwgc2l6ZW9mKHN0cnVjdCBycGNhcF9hdXRocmVwbHkpKTsKKwlhdXRocmVwbHktPm1pbnZlcnMgPSBSUENBUF9NSU5fVkVSU0lPTjsKKwlhdXRocmVwbHktPm1heHZlcnMgPSBSUENBUF9NQVhfVkVSU0lPTjsKKworCS8vIFNlbmQgdGhlIHJlcGx5LgorCWlmIChzb2NrX3NlbmQocGFycy0+c29ja2N0cmwsIHBhcnMtPnNzbCwgc2VuZGJ1Ziwgc2VuZGJ1ZmlkeCwgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSA9PSAtMSkKIAl7Ci0JCS8vIFRoYXQgZmFpbGVkOyBsb2cgYSBtZXNzc2FnZSBhbmQgZ2l2ZSB1cC4KKwkJLy8gVGhhdCBmYWlsZWQ7IGxvZyBhIG1lc3NhZ2UgYW5kIGdpdmUgdXAuCiAJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIlNlbmQgdG8gY2xpZW50IGZhaWxlZDogJXMiLCBlcnJidWYpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJLy8gQ2hlY2sgaWYgYWxsIHRoZSBkYXRhIGhhcyBiZWVuIHJlYWQ7IGlmIG5vdCwgZGlzY2FyZCB0aGUgZGF0YSBpbiBleGNlc3MKLQlpZiAocnBjYXBkX2Rpc2NhcmQocGFycy0+c29ja2N0cmxfaW4sIHBsZW4pID09IC0xKQorCWlmIChycGNhcGRfZGlzY2FyZChwYXJzLT5zb2NrY3RybCwgcGFycy0+c3NsLCBwbGVuKSA9PSAtMSkKIAl7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0xMTA2LDggKzEzOTEsOCBAQAogCXJldHVybiAwOwogCiBlcnJvcjoKLQlpZiAocnBjYXBfc2VuZGVycm9yKHBhcnMtPnNvY2tjdHJsX291dCwgcGFycy0+cHJvdG9jb2xfdmVyc2lvbiwKLQkgICAgUENBUF9FUlJfQVVUSCwgZXJybXNnYnVmLCBlcnJidWYpID09IC0xKQorCWlmIChycGNhcF9zZW5kZXJyb3IocGFycy0+c29ja2N0cmwsIHBhcnMtPnNzbCwgMCwgUENBUF9FUlJfQVVUSCwKKwkgICAgZXJybXNnYnVmLCBlcnJidWYpID09IC0xKQogCXsKIAkJLy8gVGhhdCBmYWlsZWQ7IGxvZyBhIG1lc3NhZ2UgYW5kIGdpdmUgdXAuCiAJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIlNlbmQgdG8gY2xpZW50IGZhaWxlZDogJXMiLCBlcnJidWYpOwpAQCAtMTExNiw3ICsxNDAxLDcgQEAKIAogZXJyb3Jfbm9yZXBseToKIAkvLyBDaGVjayBpZiBhbGwgdGhlIGRhdGEgaGFzIGJlZW4gcmVhZDsgaWYgbm90LCBkaXNjYXJkIHRoZSBkYXRhIGluIGV4Y2VzcwotCWlmIChycGNhcGRfZGlzY2FyZChwYXJzLT5zb2NrY3RybF9pbiwgcGxlbikgPT0gLTEpCisJaWYgKHJwY2FwZF9kaXNjYXJkKHBhcnMtPnNvY2tjdHJsLCBwYXJzLT5zc2wsIHBsZW4pID09IC0xKQogCXsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTExMzYsMTYgKzE0MjEsMzIgQEAKIAkgKiBwb2xpY2llcywgdXNlciByaWdodCBhc3NpZ25tZW50KQogCSAqIEhvd2V2ZXIsIGl0IHNlZW1zIHRvIG1lIHRoYXQgaWYgeW91IHJ1biBpdCBhcyBhIHNlcnZpY2UsIHRoaXMKIAkgKiByaWdodCBzaG91bGQgYmUgcHJvdmlkZWQgYnkgZGVmYXVsdC4KKwkgKgorCSAqIFhYWCAtIGhvcGVmdWxseSwgdGhpcyByZXR1cm5zIGVycm9ycyBzdWNoIGFzIEVSUk9SX0xPR09OX0ZBSUxVUkUsCisJICogd2hpY2ggbWVyZWx5IGluZGljYXRlcyB0aGF0IHRoZSB1c2VyIG5hbWUgb3IgcGFzc3dvcmQgaXMKKwkgKiBpbmNvcnJlY3QsIG5vdCB3aGV0aGVyIGl0J3MgdGhlIHVzZXIgbmFtZSBvciB0aGUgcGFzc3dvcmQKKwkgKiB0aGF0J3MgaW5jb3JyZWN0LCBzbyBhIGNsaWVudCB0aGF0J3MgdHJ5aW5nIHRvIGJydXRlLWZvcmNlCisJICogYWNjb3VudHMgZG9lc24ndCBrbm93IHdoZXRoZXIgaXQncyB0aGUgdXNlciBuYW1lIG9yIHRoZQorCSAqIHBhc3N3b3JkIHRoYXQncyBpbmNvcnJlY3QsIHNvIGl0IGRvZXNuJ3Qga25vdyB3aGV0aGVyIHRvCisJICogc3RvcCB0cnlpbmcgdG8gbG9nIGluIHdpdGggYSBnaXZlbiB1c2VyIG5hbWUgYW5kIG1vdmUgb24KKwkgKiB0byBhbm90aGVyIHVzZXIgbmFtZS4KIAkgKi8KKwlEV09SRCBlcnJvcjsKIAlIQU5ETEUgVG9rZW47CisJY2hhciBlcnJtc2didWZbUENBUF9FUlJCVUZfU0laRV07CS8vIGJ1ZmZlciBmb3IgZXJyb3JzIHRvIGxvZworCiAJaWYgKExvZ29uVXNlcih1c2VybmFtZSwgIi4iLCBwYXNzd29yZCwgTE9HT04zMl9MT0dPTl9ORVRXT1JLLCBMT0dPTjMyX1BST1ZJREVSX0RFRkFVTFQsICZUb2tlbikgPT0gMCkKIAl7Ci0JCWludCBlcnJvcjsKLQorCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJBdXRoZW50aWNhdGlvbiBmYWlsZWQiKTsKIAkJZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKLQkJRm9ybWF0TWVzc2FnZUEoRk9STUFUX01FU1NBR0VfRlJPTV9TWVNURU0sIE5VTEwsIGVycm9yLCAwLCBlcnJidWYsCi0JCQlQQ0FQX0VSUkJVRl9TSVpFLCBOVUxMKTsKLQorCQlpZiAoZXJyb3IgIT0gRVJST1JfTE9HT05fRkFJTFVSRSkKKwkJeworCQkJLy8gU29tZSBlcnJvciBvdGhlciB0aGFuIGFuIGF1dGhlbnRpY2F0aW9uIGVycm9yOworCQkJLy8gbG9nIGl0LgorCQkJcGNhcF9mbXRfZXJybXNnX2Zvcl93aW4zMl9lcnIoZXJybXNnYnVmLAorCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUsIGVycm9yLCAiTG9nb25Vc2VyKCkgZmFpbGVkIik7CisJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICIlcyIsIGVycm1zZ2J1Zik7CisJCX0KIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTE1MywxMiArMTQ1NCwxMCBAQAogCS8vIEkgZGlkbid0IHRlc3QgaXQuCiAJaWYgKEltcGVyc29uYXRlTG9nZ2VkT25Vc2VyKFRva2VuKSA9PSAwKQogCXsKLQkJaW50IGVycm9yOwotCi0JCWVycm9yID0gR2V0TGFzdEVycm9yKCk7Ci0JCUZvcm1hdE1lc3NhZ2VBKEZPUk1BVF9NRVNTQUdFX0ZST01fU1lTVEVNLCBOVUxMLCBlcnJvciwgMCwgZXJyYnVmLAotCQkJUENBUF9FUlJCVUZfU0laRSwgTlVMTCk7Ci0KKwkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiQXV0aGVudGljYXRpb24gZmFpbGVkIik7CisJCXBjYXBfZm10X2Vycm1zZ19mb3Jfd2luMzJfZXJyKGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJICAgIEdldExhc3RFcnJvcigpLCAiSW1wZXJzb25hdGVMb2dnZWRPblVzZXIoKSBmYWlsZWQiKTsKKwkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiJXMiLCBlcnJtc2didWYpOwogCQlDbG9zZUhhbmRsZShUb2tlbik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0xMTcwLDcgKzE0NjksNyBAQAogCS8qCiAJICogU2VlCiAJICoKLQkgKglodHRwOi8vd3d3LnVuaXhwYXBhLmNvbS9pbmNub3RlL3Bhc3N3ZC5odG1sCisJICoJaHR0cHM6Ly93d3cudW5peHBhcGEuY29tL2luY25vdGUvcGFzc3dkLmh0bWwKIAkgKgogCSAqIFdlIHVzZSB0aGUgU29sYXJpcy9MaW51eCBzaGFkb3cgcGFzc3dvcmQgYXV0aGVudGljYXRpb24gaWYKIAkgKiB3ZSBoYXZlIGdldHNwbmFtKCksIG90aGVyd2lzZSB3ZSBqdXN0IGRvIHRyYWRpdGlvbmFsCkBAIC0xMTg2LDE2ICsxNDg1LDE4IEBACiAJICogb25seSBwYXNzd29yZCBkYXRhYmFzZSBvciBzb21lIG90aGVyIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSwKIAkgKiBiZWhpbmQgaXRzIEFQSS4KIAkgKi8KKwlpbnQgZXJyb3I7CiAJc3RydWN0IHBhc3N3ZCAqdXNlcjsKIAljaGFyICp1c2VyX3Bhc3N3b3JkOwogI2lmZGVmIEhBVkVfR0VUU1BOQU0KIAlzdHJ1Y3Qgc3B3ZCAqdXNlcnNwOwogI2VuZGlmCisJY2hhciAqY3J5cHRfcGFzc3dvcmQ7CiAKIAkvLyBUaGlzIGNhbGwgaXMgbmVlZGVkIHRvIGdldCB0aGUgdWlkCiAJaWYgKCh1c2VyID0gZ2V0cHduYW0odXNlcm5hbWUpKSA9PSBOVUxMKQogCXsKLQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJBdXRoZW50aWNhdGlvbiBmYWlsZWQ6IG5vIHN1Y2ggdXNlciIpOworCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJBdXRoZW50aWNhdGlvbiBmYWlsZWQiKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTIwMyw3ICsxNTA0LDcgQEAKIAkvLyBUaGlzIGNhbGwgaXMgbmVlZGVkIHRvIGdldCB0aGUgcGFzc3dvcmQ7IG90aGVyd2lzZSAneCcgaXMgcmV0dXJuZWQKIAlpZiAoKHVzZXJzcCA9IGdldHNwbmFtKHVzZXJuYW1lKSkgPT0gTlVMTCkKIAl7Ci0JCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiQXV0aGVudGljYXRpb24gZmFpbGVkOiBubyBzdWNoIHVzZXIiKTsKKwkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiQXV0aGVudGljYXRpb24gZmFpbGVkIik7CiAJCXJldHVybiAtMTsKIAl9CiAJdXNlcl9wYXNzd29yZCA9IHVzZXJzcC0+c3BfcHdkcDsKQEAgLTEyMjEsMjMgKzE1MjIsNTIgQEAKIAl1c2VyX3Bhc3N3b3JkID0gdXNlci0+cHdfcGFzc3dkOwogI2VuZGlmCiAKLQlpZiAoc3RyY21wKHVzZXJfcGFzc3dvcmQsIChjaGFyICopIGNyeXB0KHBhc3N3b3JkLCB1c2VyX3Bhc3N3b3JkKSkgIT0gMCkKKwkvLworCS8vIFRoZSBTaW5nbGUgVU5JWCBTcGVjaWZpY2F0aW9uIHNheXMgdGhhdCBpZiBjcnlwdCgpIGZhaWxzIGl0CisJLy8gc2V0cyBlcnJubywgYnV0IHNvbWUgaW1wbGVtZW50YXRvbnMgdGhhdCBoYXZlbid0IGJlZW4gcnVuCisJLy8gdGhyb3VnaCB0aGUgU1VTIHRlc3Qgc3VpdGUgbWlnaHQgbm90IGRvIHNvLgorCS8vCisJZXJybm8gPSAwOworCWNyeXB0X3Bhc3N3b3JkID0gY3J5cHQocGFzc3dvcmQsIHVzZXJfcGFzc3dvcmQpOworCWlmIChjcnlwdF9wYXNzd29yZCA9PSBOVUxMKQogCXsKLQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJBdXRoZW50aWNhdGlvbiBmYWlsZWQ6IHBhc3N3b3JkIGluY29ycmVjdCIpOworCQllcnJvciA9IGVycm5vOworCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJBdXRoZW50aWNhdGlvbiBmYWlsZWQiKTsKKwkJaWYgKGVycm9yID09IDApCisJCXsKKwkJCS8vIEl0IGRpZG4ndCBzZXQgZXJybm8uCisJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICJjcnlwdCgpIGZhaWxlZCIpOworCQl9CisJCWVsc2UKKwkJeworCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiY3J5cHQoKSBmYWlsZWQ6ICVzIiwKKwkJCSAgICBzdHJlcnJvcihlcnJvcikpOworCQl9CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHN0cmNtcCh1c2VyX3Bhc3N3b3JkLCBjcnlwdF9wYXNzd29yZCkgIT0gMCkKKwl7CisJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIkF1dGhlbnRpY2F0aW9uIGZhaWxlZCIpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJaWYgKHNldHVpZCh1c2VyLT5wd191aWQpKQogCXsKKwkJZXJyb3IgPSBlcnJubzsKIAkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCi0JCSAgICBlcnJubywgInNldHVpZCIpOworCQkgICAgZXJyb3IsICJzZXR1aWQiKTsKKwkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAic2V0dWlkKCkgZmFpbGVkOiAlcyIsCisJCSAgICBzdHJlcnJvcihlcnJvcikpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAvKglpZiAoc2V0Z2lkKHVzZXItPnB3X2dpZCkpCiAJeworCQllcnJvciA9IGVycm5vOwogCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgIGVycm5vLCAic2V0Z2lkIik7CisJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgInNldGdpZCgpIGZhaWxlZDogJXMiLAorCQkgICAgc3RyZXJyb3IoZXJyb3IpKTsKIAkJcmV0dXJuIC0xOwogCX0KICovCkBAIC0xMjQ3LDggKzE1NzcsMjMgQEAKIAogfQogCisvKgorICogTWFrZSBzdXJlIHRoYXQgdGhlIHJlcGx5IGxlbmd0aCB3b24ndCBvdmVyZmxvdyAzMiBiaXRzIGlmIHdlIGFkZCB0aGUKKyAqIHNwZWNpZmllZCBhbW91bnQgdG8gaXQuICBJZiBpdCB3b24ndCwgYWRkIHRoYXQgYW1vdW50IHRvIGl0LgorICoKKyAqIFdlIGNoZWNrIHdoZXRoZXIgcmVwbHlsZW4gKyBpdGVtbGVuID4gVUlOVDMyX01BWCwgYnV0IHN1YnRyYWN0IGl0ZW1sZW4KKyAqIGZyb20gYm90aCBzaWRlcywgdG8gcHJldmVudCBvdmVyZmxvdy4KKyAqLworI2RlZmluZSBDSEVDS19BTkRfSU5DUkVBU0VfUkVQTFlfTEVOKGl0ZW1sZW4pIFwKKwlpZiAocmVwbHlsZW4gPiBVSU5UMzJfTUFYIC0gKGl0ZW1sZW4pKSB7IFwKKwkJcGNhcF9zdHJsY3B5KGVycm1zZ2J1ZiwgIlJlcGx5IGxlbmd0aCBkb2Vzbid0IGZpdCBpbiAzMiBiaXRzIiwgXAorCQkgICAgc2l6ZW9mIChlcnJtc2didWYpKTsgXAorCQlnb3RvIGVycm9yOyBcCisJfSBcCisJcmVwbHlsZW4gKz0gKHVpbnQzMikoaXRlbWxlbikKKwogc3RhdGljIGludAotZGFlbW9uX21zZ19maW5kYWxsaWZfcmVxKHN0cnVjdCBkYWVtb25fc2xwYXJzICpwYXJzLCB1aW50MzIgcGxlbikKK2RhZW1vbl9tc2dfZmluZGFsbGlmX3JlcSh1aW50OCB2ZXIsIHN0cnVjdCBkYWVtb25fc2xwYXJzICpwYXJzLCB1aW50MzIgcGxlbikKIHsKIAljaGFyIGVycmJ1ZltQQ0FQX0VSUkJVRl9TSVpFXTsJCS8vIGJ1ZmZlciBmb3IgbmV0d29yayBlcnJvcnMKIAljaGFyIGVycm1zZ2J1ZltQQ0FQX0VSUkJVRl9TSVpFXTsJLy8gYnVmZmVyIGZvciBlcnJvcnMgdG8gc2VuZCB0byB0aGUgY2xpZW50CkBAIC0xMjU4LDEwICsxNjAzLDExIEBACiAJcGNhcF9pZl90ICpkOwkJCQkvLyB0ZW1wIHBvaW50ZXIgbmVlZGVkIHRvIHNjYW4gdGhlIGludGVyZmFjZSBjaGFpbgogCXN0cnVjdCBwY2FwX2FkZHIgKmFkZHJlc3M7CQkvLyBwY2FwIHN0cnVjdHVyZSB0aGF0IGtlZXBzIGEgbmV0d29yayBhZGRyZXNzIG9mIGFuIGludGVyZmFjZQogCXN0cnVjdCBycGNhcF9maW5kYWxsZGV2c19pZiAqZmluZGFsbGRldnNfaWY7Ly8gcnBjYXAgc3RydWN0dXJlIHRoYXQgcGFja2V0IGFsbCB0aGUgZGF0YSBvZiBhbiBpbnRlcmZhY2UgdG9nZXRoZXIKKwl1aW50MzIgcmVwbHlsZW47CQkJLy8gbGVuZ3RoIG9mIHJlcGx5IHBheWxvYWQKIAl1aW50MTYgbmlmID0gMDsJCQkJLy8gY291bnRzIHRoZSBudW1iZXIgb2YgaW50ZXJmYWNlIGxpc3RlZAogCiAJLy8gRGlzY2FyZCB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZTsgdGhlcmUgc2hvdWxkbid0IGJlIGFueSBwYXlsb2FkLgotCWlmIChycGNhcGRfZGlzY2FyZChwYXJzLT5zb2NrY3RybF9pbiwgcGxlbikgPT0gLTEpCisJaWYgKHJwY2FwZF9kaXNjYXJkKHBhcnMtPnNvY2tjdHJsLCBwYXJzLT5zc2wsIHBsZW4pID09IC0xKQogCXsKIAkJLy8gTmV0d29yayBlcnJvci4KIAkJcmV0dXJuIC0xOwpAQCAtMTI3Myw3ICsxNjE5LDcgQEAKIAogCWlmIChhbGxkZXZzID09IE5VTEwpCiAJewotCQlpZiAocnBjYXBfc2VuZGVycm9yKHBhcnMtPnNvY2tjdHJsX291dCwgcGFycy0+cHJvdG9jb2xfdmVyc2lvbiwKKwkJaWYgKHJwY2FwX3NlbmRlcnJvcihwYXJzLT5zb2NrY3RybCwgcGFycy0+c3NsLCB2ZXIsCiAJCQlQQ0FQX0VSUl9OT1JFTU9URUlGLAogCQkJIk5vIGludGVyZmFjZXMgZm91bmQhIE1ha2Ugc3VyZSBsaWJwY2FwL1dpblBjYXAgaXMgcHJvcGVybHkgaW5zdGFsbGVkIgogCQkJIiBhbmQgeW91IGhhdmUgdGhlIHJpZ2h0IHRvIGFjY2VzcyB0byB0aGUgcmVtb3RlIGRldmljZS4iLApAQCAtMTI4NSwxOCArMTYzMSwzNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvLyBjaGVja3MgdGhlIG51bWJlciBvZiBpbnRlcmZhY2VzIGFuZCBpdCBjb21wdXRlcyB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSBwYXlsb2FkCisJLy8gVGhpcyBjaGVja3MgdGhlIG51bWJlciBvZiBpbnRlcmZhY2VzIGFuZCBjb21wdXRlcyB0aGUgdG90YWwKKwkvLyBsZW5ndGggb2YgdGhlIHBheWxvYWQuCisJcmVwbHlsZW4gPSAwOwogCWZvciAoZCA9IGFsbGRldnM7IGQgIT0gTlVMTDsgZCA9IGQtPm5leHQpCiAJewogCQluaWYrKzsKIAotCQlpZiAoZC0+ZGVzY3JpcHRpb24pCi0JCQlwbGVuKz0gc3RybGVuKGQtPmRlc2NyaXB0aW9uKTsKLQkJaWYgKGQtPm5hbWUpCi0JCQlwbGVuKz0gc3RybGVuKGQtPm5hbWUpOworCQlpZiAoZC0+ZGVzY3JpcHRpb24pIHsKKwkJCXNpemVfdCBzdHJpbmdsZW4gPSBzdHJsZW4oZC0+ZGVzY3JpcHRpb24pOworCQkJaWYgKHN0cmluZ2xlbiA+IFVJTlQxNl9NQVgpIHsKKwkJCQlwY2FwX3N0cmxjcHkoZXJybXNnYnVmLAorCQkJCSAgICAiRGVzY3JpcHRpb24gbGVuZ3RoIGRvZXNuJ3QgZml0IGluIDE2IGJpdHMiLAorCQkJCSAgICBzaXplb2YgKGVycm1zZ2J1ZikpOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCQlDSEVDS19BTkRfSU5DUkVBU0VfUkVQTFlfTEVOKHN0cmluZ2xlbik7CisJCX0KKwkJaWYgKGQtPm5hbWUpIHsKKwkJCXNpemVfdCBzdHJpbmdsZW4gPSBzdHJsZW4oZC0+bmFtZSk7CisJCQlpZiAoc3RyaW5nbGVuID4gVUlOVDE2X01BWCkgeworCQkJCXBjYXBfc3RybGNweShlcnJtc2didWYsCisJCQkJICAgICJOYW1lIGxlbmd0aCBkb2Vzbid0IGZpdCBpbiAxNiBiaXRzIiwKKwkJCQkgICAgc2l6ZW9mIChlcnJtc2didWYpKTsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCQkJQ0hFQ0tfQU5EX0lOQ1JFQVNFX1JFUExZX0xFTihzdHJpbmdsZW4pOworCQl9CiAKLQkJcGxlbis9IHNpemVvZihzdHJ1Y3QgcnBjYXBfZmluZGFsbGRldnNfaWYpOworCQlDSEVDS19BTkRfSU5DUkVBU0VfUkVQTFlfTEVOKHNpemVvZihzdHJ1Y3QgcnBjYXBfZmluZGFsbGRldnNfaWYpKTsKIAorCQl1aW50MTZfdCBuYWRkcnMgPSAwOwogCQlmb3IgKGFkZHJlc3MgPSBkLT5hZGRyZXNzZXM7IGFkZHJlc3MgIT0gTlVMTDsgYWRkcmVzcyA9IGFkZHJlc3MtPm5leHQpCiAJCXsKIAkJCS8qCkBAIC0xMzA4LDcgKzE2NzMsMTQgQEAKICNpZmRlZiBBRl9JTkVUNgogCQkJY2FzZSBBRl9JTkVUNjoKICNlbmRpZgotCQkJCXBsZW4rPSAoc2l6ZW9mKHN0cnVjdCBycGNhcF9zb2NrYWRkcikgKiA0KTsKKwkJCQlDSEVDS19BTkRfSU5DUkVBU0VfUkVQTFlfTEVOKHNpemVvZihzdHJ1Y3QgcnBjYXBfc29ja2FkZHIpICogNCk7CisJCQkJaWYgKG5hZGRycyA9PSBVSU5UMTZfTUFYKSB7CisJCQkJCXBjYXBfc3RybGNweShlcnJtc2didWYsCisJCQkJCSAgICAiTnVtYmVyIG9mIGludGVyZmFjZXMgZG9lc24ndCBmaXQgaW4gMTYgYml0cyIsCisJCQkJCSAgICBzaXplb2YgKGVycm1zZ2J1ZikpOworCQkJCQlnb3RvIGVycm9yOworCQkJCX0KKwkJCQluYWRkcnMrKzsKIAkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKQEAgLTEzMTcsMTQgKzE2ODksMTQgQEAKIAkJfQogCX0KIAotCS8vIFJQQ0FQIGZpbmRhbGxkZXZzIGNvbW1hbmQKKwkvLyBSUENBUCBmaW5kYWxsZGV2cyByZXBseQogCWlmIChzb2NrX2J1ZmZlcml6ZShOVUxMLCBzaXplb2Yoc3RydWN0IHJwY2FwX2hlYWRlciksIE5VTEwsCiAJICAgICZzZW5kYnVmaWR4LCBSUENBUF9ORVRCVUZfU0laRSwgU09DS0JVRl9DSEVDS09OTFksIGVycm1zZ2J1ZiwKIAkgICAgUENBUF9FUlJCVUZfU0laRSkgPT0gLTEpCiAJCWdvdG8gZXJyb3I7CiAKLQlycGNhcF9jcmVhdGVoZHIoKHN0cnVjdCBycGNhcF9oZWFkZXIgKikgc2VuZGJ1ZiwgcGFycy0+cHJvdG9jb2xfdmVyc2lvbiwKLQkgICAgUlBDQVBfTVNHX0ZJTkRBTExJRl9SRVBMWSwgbmlmLCBwbGVuKTsKKwlycGNhcF9jcmVhdGVoZHIoKHN0cnVjdCBycGNhcF9oZWFkZXIgKikgc2VuZGJ1ZiwgdmVyLAorCSAgICBSUENBUF9NU0dfRklOREFMTElGX1JFUExZLCBuaWYsIHJlcGx5bGVuKTsKIAogCS8vIHNlbmQgdGhlIGludGVyZmFjZSBsaXN0CiAJZm9yIChkID0gYWxsZGV2czsgZCAhPSBOVUxMOyBkID0gZC0+bmV4dCkKQEAgLTEzMzksMTAgKzE3MTEsMTggQEAKIAogCQltZW1zZXQoZmluZGFsbGRldnNfaWYsIDAsIHNpemVvZihzdHJ1Y3QgcnBjYXBfZmluZGFsbGRldnNfaWYpKTsKIAotCQlpZiAoZC0+ZGVzY3JpcHRpb24pIGxkZXNjciA9IChzaG9ydCkgc3RybGVuKGQtPmRlc2NyaXB0aW9uKTsKLQkJZWxzZSBsZGVzY3IgPSAwOwotCQlpZiAoZC0+bmFtZSkgbG5hbWUgPSAoc2hvcnQpIHN0cmxlbihkLT5uYW1lKTsKLQkJZWxzZSBsbmFtZSA9IDA7CisJCS8qCisJCSAqIFdlJ3ZlIGFscmVhZHkgZXN0YWJsaXNoZWQgdGhhdCB0aGUgc3RyaW5nIGxlbmd0aHMKKwkJICogZml0IGluIDE2IGJpdHMuCisJCSAqLworCQlpZiAoZC0+ZGVzY3JpcHRpb24pCisJCQlsZGVzY3IgPSAodWludDE2KSBzdHJsZW4oZC0+ZGVzY3JpcHRpb24pOworCQllbHNlCisJCQlsZGVzY3IgPSAwOworCQlpZiAoZC0+bmFtZSkKKwkJCWxuYW1lID0gKHVpbnQxNikgc3RybGVuKGQtPm5hbWUpOworCQllbHNlCisJCQlsbmFtZSA9IDA7CiAKIAkJZmluZGFsbGRldnNfaWYtPmRlc2NsZW4gPSBodG9ucyhsZGVzY3IpOwogCQlmaW5kYWxsZGV2c19pZi0+bmFtZWxlbiA9IGh0b25zKGxuYW1lKTsKQEAgLTE0MjcsNyArMTgwNyw3IEBACiAJcGNhcF9mcmVlYWxsZGV2cyhhbGxkZXZzKTsKIAogCS8vIFNlbmQgYSBmaW5hbCBjb21tYW5kIHRoYXQgc2F5cyAibm93IHNlbmQgaXQhIgotCWlmIChzb2NrX3NlbmQocGFycy0+c29ja2N0cmxfb3V0LCBzZW5kYnVmLCBzZW5kYnVmaWR4LCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpID09IC0xKQorCWlmIChzb2NrX3NlbmQocGFycy0+c29ja2N0cmwsIHBhcnMtPnNzbCwgc2VuZGJ1Ziwgc2VuZGJ1ZmlkeCwgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSA9PSAtMSkKIAl7CiAJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIlNlbmQgdG8gY2xpZW50IGZhaWxlZDogJXMiLCBlcnJidWYpOwogCQlyZXR1cm4gLTE7CkBAIC0xNDM5LDcgKzE4MTksNyBAQAogCWlmIChhbGxkZXZzKQogCQlwY2FwX2ZyZWVhbGxkZXZzKGFsbGRldnMpOwogCi0JaWYgKHJwY2FwX3NlbmRlcnJvcihwYXJzLT5zb2NrY3RybF9vdXQsIHBhcnMtPnByb3RvY29sX3ZlcnNpb24sCisJaWYgKHJwY2FwX3NlbmRlcnJvcihwYXJzLT5zb2NrY3RybCwgcGFycy0+c3NsLCB2ZXIsCiAJICAgIFBDQVBfRVJSX0ZJTkRBTExJRiwgZXJybXNnYnVmLCBlcnJidWYpID09IC0xKQogCXsKIAkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiU2VuZCB0byBjbGllbnQgZmFpbGVkOiAlcyIsIGVycmJ1Zik7CkBAIC0xNDUzLDcgKzE4MzMsOCBAQAogCXRvIGRpc2NhcmQgZXhjZXNzIGRhdGEgaW4gdGhlIG1lc3NhZ2UsIGlmIHByZXNlbnQpCiAqLwogc3RhdGljIGludAotZGFlbW9uX21zZ19vcGVuX3JlcShzdHJ1Y3QgZGFlbW9uX3NscGFycyAqcGFycywgdWludDMyIHBsZW4sIGNoYXIgKnNvdXJjZSwgc2l6ZV90IHNvdXJjZWxlbikKK2RhZW1vbl9tc2dfb3Blbl9yZXEodWludDggdmVyLCBzdHJ1Y3QgZGFlbW9uX3NscGFycyAqcGFycywgdWludDMyIHBsZW4sCisgICAgY2hhciAqc291cmNlLCBzaXplX3Qgc291cmNlbGVuKQogewogCWNoYXIgZXJyYnVmW1BDQVBfRVJSQlVGX1NJWkVdOwkJLy8gYnVmZmVyIGZvciBuZXR3b3JrIGVycm9ycwogCWNoYXIgZXJybXNnYnVmW1BDQVBfRVJSQlVGX1NJWkVdOwkvLyBidWZmZXIgZm9yIGVycm9ycyB0byBzZW5kIHRvIHRoZSBjbGllbnQKQEAgLTE0NjUsMTEgKzE4NDYsMTEgQEAKIAogCWlmIChwbGVuID4gc291cmNlbGVuIC0gMSkKIAl7Ci0JCXBjYXBfc25wcmludGYoZXJybXNnYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiU291cmNlIHN0cmluZyB0b28gbG9uZyIpOworCQlzbnByaW50ZihlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUsICJTb3VyY2Ugc3RyaW5nIHRvbyBsb25nIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JbnJlYWQgPSBzb2NrX3JlY3YocGFycy0+c29ja2N0cmxfaW4sIHNvdXJjZSwgcGxlbiwKKwlucmVhZCA9IHNvY2tfcmVjdihwYXJzLT5zb2NrY3RybCwgcGFycy0+c3NsLCBzb3VyY2UsIHBsZW4sCiAJICAgIFNPQ0tfUkVDRUlWRUFMTF9ZRVN8U09DS19FT0ZfSVNfRVJST1IsIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSk7CiAJaWYgKG5yZWFkID09IC0xKQogCXsKQEAgLTE0NzksOCArMTg2MCwxMyBAQAogCXNvdXJjZVtucmVhZF0gPSAnXDAnOwogCXBsZW4gLT0gbnJlYWQ7CiAKLQkvLyBYWFggLSBtYWtlIHN1cmUgaXQncyAqbm90KiBhIFVSTDsgd2UgZG9uJ3Qgc3VwcG9ydCBvcGVuaW5nCi0JLy8gcmVtb3RlIGRldmljZXMgaGVyZS4KKwkvLyBJcyB0aGlzIGEgVVJMIHJhdGhlciB0aGFuIGEgZGV2aWNlPworCS8vIElmIHNvLCByZWplY3QgaXQuCisJaWYgKGlzX3VybChzb3VyY2UpKQorCXsKKwkJc25wcmludGYoZXJybXNnYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiU291cmNlIHN0cmluZyByZWZlcnMgdG8gYSByZW1vdGUgZGV2aWNlIik7CisJCWdvdG8gZXJyb3I7CisJfQogCiAJLy8gT3BlbiB0aGUgc2VsZWN0ZWQgZGV2aWNlCiAJLy8gVGhpcyBpcyBhIGZha2Ugb3Blbiwgc2luY2Ugd2UgZG8gdGhhdCBvbmx5IHRvIGdldCB0aGUgbmVlZGVkIHBhcmFtZXRlcnMsIHRoZW4gd2UgY2xvc2UgdGhlIGRldmljZSBhZ2FpbgpAQCAtMTQ5Niw3ICsxODgyLDcgQEAKIAkgICAgUlBDQVBfTkVUQlVGX1NJWkUsIFNPQ0tCVUZfQ0hFQ0tPTkxZLCBlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUpID09IC0xKQogCQlnb3RvIGVycm9yOwogCi0JcnBjYXBfY3JlYXRlaGRyKChzdHJ1Y3QgcnBjYXBfaGVhZGVyICopIHNlbmRidWYsIHBhcnMtPnByb3RvY29sX3ZlcnNpb24sCisJcnBjYXBfY3JlYXRlaGRyKChzdHJ1Y3QgcnBjYXBfaGVhZGVyICopIHNlbmRidWYsIHZlciwKIAkgICAgUlBDQVBfTVNHX09QRU5fUkVQTFksIDAsIHNpemVvZihzdHJ1Y3QgcnBjYXBfb3BlbnJlcGx5KSk7CiAKIAlvcGVucmVwbHkgPSAoc3RydWN0IHJwY2FwX29wZW5yZXBseSAqKSAmc2VuZGJ1ZltzZW5kYnVmaWR4XTsKQEAgLTE1MDcsMTMgKzE4OTMsMjAgQEAKIAogCW1lbXNldChvcGVucmVwbHksIDAsIHNpemVvZihzdHJ1Y3QgcnBjYXBfb3BlbnJlcGx5KSk7CiAJb3BlbnJlcGx5LT5saW5rdHlwZSA9IGh0b25sKHBjYXBfZGF0YWxpbmsoZnApKTsKLQlvcGVucmVwbHktPnR6b2ZmID0gMDsgLyogVGhpcyBpcyBhbHdheXMgMCBmb3IgbGl2ZSBjYXB0dXJlcyAqLworCS8qCisJICogVGhpcyBpcyBhbHdheXMgMCBmb3IgbGl2ZSBjYXB0dXJlczsgd2Ugbm8gbG9uZ2VyIHN1cHBvcnQgaXQKKwkgKiBhcyBzb21ldGhpbmcgd2UgcmVhZCBmcm9tIGNhcHR1cmUgZmlsZXMgYW5kIHN1cHBseSB0bworCSAqIGNsaWVudHMsIGJ1dCB3ZSBoYXZlIHRvIHNlbmQgaXQgb3ZlciB0aGUgd2lyZSwgYXMgb3BlbgorCSAqIHJlcGxpZXMgYXJlIGV4cGVjdGVkIHRvIGhhdmUgOCBieXRlcyBvZiBwYXlsb2FkIGJ5CisJICogZXhpc3RpbmcgY2xpZW50cy4KKwkgKi8KKwlvcGVucmVwbHktPnR6b2ZmID0gMDsKIAogCS8vIFdlJ3JlIGRvbmUgd2l0aCB0aGUgcGNhcF90LgogCXBjYXBfY2xvc2UoZnApOwogCiAJLy8gU2VuZCB0aGUgcmVwbHkuCi0JaWYgKHNvY2tfc2VuZChwYXJzLT5zb2NrY3RybF9vdXQsIHNlbmRidWYsIHNlbmRidWZpZHgsIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSkgPT0gLTEpCisJaWYgKHNvY2tfc2VuZChwYXJzLT5zb2NrY3RybCwgcGFycy0+c3NsLCBzZW5kYnVmLCBzZW5kYnVmaWR4LCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpID09IC0xKQogCXsKIAkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiU2VuZCB0byBjbGllbnQgZmFpbGVkOiAlcyIsIGVycmJ1Zik7CiAJCXJldHVybiAtMTsKQEAgLTE1MjEsOCArMTkxNCw4IEBACiAJcmV0dXJuIDA7CiAKIGVycm9yOgotCWlmIChycGNhcF9zZW5kZXJyb3IocGFycy0+c29ja2N0cmxfb3V0LCBwYXJzLT5wcm90b2NvbF92ZXJzaW9uLAotCSAgICBQQ0FQX0VSUl9PUEVOLCBlcnJtc2didWYsIGVycmJ1ZikgPT0gLTEpCisJaWYgKHJwY2FwX3NlbmRlcnJvcihwYXJzLT5zb2NrY3RybCwgcGFycy0+c3NsLCB2ZXIsIFBDQVBfRVJSX09QRU4sCisJICAgIGVycm1zZ2J1ZiwgZXJyYnVmKSA9PSAtMSkKIAl7CiAJCS8vIFRoYXQgZmFpbGVkOyBsb2cgYSBtZXNzYWdlIGFuZCBnaXZlIHVwLgogCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICJTZW5kIHRvIGNsaWVudCBmYWlsZWQ6ICVzIiwgZXJyYnVmKTsKQEAgLTE1MzAsNyArMTkyMyw3IEBACiAJfQogCiAJLy8gQ2hlY2sgaWYgYWxsIHRoZSBkYXRhIGhhcyBiZWVuIHJlYWQ7IGlmIG5vdCwgZGlzY2FyZCB0aGUgZGF0YSBpbiBleGNlc3MKLQlpZiAocnBjYXBkX2Rpc2NhcmQocGFycy0+c29ja2N0cmxfaW4sIHBsZW4pID09IC0xKQorCWlmIChycGNhcGRfZGlzY2FyZChwYXJzLT5zb2NrY3RybCwgcGFycy0+c3NsLCBwbGVuKSA9PSAtMSkKIAl7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0xNTQyLDcgKzE5MzUsOSBAQAogCXRvIGRpc2NhcmQgZXhjZXNzIGRhdGEgaW4gdGhlIG1lc3NhZ2UsIGlmIHByZXNlbnQpCiAqLwogc3RhdGljIGludAotZGFlbW9uX21zZ19zdGFydGNhcF9yZXEoc3RydWN0IGRhZW1vbl9zbHBhcnMgKnBhcnMsIHVpbnQzMiBwbGVuLCBzdHJ1Y3QgdGhyZWFkX2hhbmRsZSAqdGhyZWFkZGF0YSwgY2hhciAqc291cmNlLCBzdHJ1Y3Qgc2Vzc2lvbiAqKnNlc3Npb25wLCBzdHJ1Y3QgcnBjYXBfc2FtcGxpbmcgKnNhbXBfcGFyYW0gX1VfKQorZGFlbW9uX21zZ19zdGFydGNhcF9yZXEodWludDggdmVyLCBzdHJ1Y3QgZGFlbW9uX3NscGFycyAqcGFycywgdWludDMyIHBsZW4sCisgICAgY2hhciAqc291cmNlLCBzdHJ1Y3Qgc2Vzc2lvbiAqKnNlc3Npb25wLAorICAgIHN0cnVjdCBycGNhcF9zYW1wbGluZyAqc2FtcF9wYXJhbSBfVV8sIGludCB1c2VzX3NzbCkKIHsKIAljaGFyIGVycmJ1ZltQQ0FQX0VSUkJVRl9TSVpFXTsJCS8vIGJ1ZmZlciBmb3IgbmV0d29yayBlcnJvcnMKIAljaGFyIGVycm1zZ2J1ZltQQ0FQX0VSUkJVRl9TSVpFXTsJLy8gYnVmZmVyIGZvciBlcnJvcnMgdG8gc2VuZCB0byB0aGUgY2xpZW50CkBAIC0xNTU0LDE3ICsxOTQ5LDEyIEBACiAJaW50IHNlbmRidWZpZHggPSAwOwkJCS8vIGluZGV4IHdoaWNoIGtlZXBzIHRoZSBudW1iZXIgb2YgYnl0ZXMgY3VycmVudGx5IGJ1ZmZlcmVkCiAKIAkvLyBzb2NrZXQtcmVsYXRlZCB2YXJpYWJsZXMKLQlTT0NLRVQgc29ja2RhdGEgPSBJTlZBTElEX1NPQ0tFVDsJLy8gc29ja2V0IGRlc2NyaXB0b3Igb2YgdGhlIGRhdGEgY29ubmVjdGlvbgogCXN0cnVjdCBhZGRyaW5mbyBoaW50czsJCQkvLyB0ZW1wLCBuZWVkZWQgdG8gb3BlbiBhIHNvY2tldCBjb25uZWN0aW9uCiAJc3RydWN0IGFkZHJpbmZvICphZGRyaW5mbzsJCS8vIHRlbXAsIG5lZWRlZCB0byBvcGVuIGEgc29ja2V0IGNvbm5lY3Rpb24KIAlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzYWRkcjsJCS8vIHRlbXAsIG5lZWRlZCB0byByZXRyaWV2ZSB0aGUgbmV0d29yayBkYXRhIHBvcnQgY2hvc2VuIG9uIHRoZSBsb2NhbCBtYWNoaW5lCiAJc29ja2xlbl90IHNhZGRybGVuOwkJCS8vIHRlbXAsIG5lZWRlZCB0byByZXRyaWV2ZSB0aGUgbmV0d29yayBkYXRhIHBvcnQgY2hvc2VuIG9uIHRoZSBsb2NhbCBtYWNoaW5lCiAJaW50IHJldDsJCQkJLy8gcmV0dXJuIHZhbHVlIGZyb20gZnVuY3Rpb25zCiAKLSNpZm5kZWYgX1dJTjMyCi0JcHRocmVhZF9hdHRyX3QgZGV0YWNoZWRBdHRyaWJ1dGU7CS8vIHRlbXAsIG5lZWRlZCB0byBzZXQgdGhlIGNyZWF0ZWQgdGhyZWFkIGFzIGRldGFjaGVkCi0jZW5kaWYKLQogCS8vIFJQQ0FQLXJlbGF0ZWQgdmFyaWFibGVzCiAJc3RydWN0IHJwY2FwX3N0YXJ0Y2FwcmVxIHN0YXJ0Y2FwcmVxOwkJLy8gc3RhcnQgY2FwdHVyZSByZXF1ZXN0IG1lc3NhZ2UKIAlzdHJ1Y3QgcnBjYXBfc3RhcnRjYXByZXBseSAqc3RhcnRjYXByZXBseTsJLy8gc3RhcnQgY2FwdHVyZSByZXBseSBtZXNzYWdlCkBAIC0xNTcyLDcgKzE5NjIsNyBAQAogCiAJYWRkcmluZm8gPSBOVUxMOwogCi0Jc3RhdHVzID0gcnBjYXBkX3JlY3YocGFycy0+c29ja2N0cmxfaW4sIChjaGFyICopICZzdGFydGNhcHJlcSwKKwlzdGF0dXMgPSBycGNhcGRfcmVjdihwYXJzLT5zb2NrY3RybCwgcGFycy0+c3NsLCAoY2hhciAqKSAmc3RhcnRjYXByZXEsCiAJICAgIHNpemVvZihzdHJ1Y3QgcnBjYXBfc3RhcnRjYXByZXEpLCAmcGxlbiwgZXJybXNnYnVmKTsKIAlpZiAoc3RhdHVzID09IC0xKQogCXsKQEAgLTE1ODUsMTQgKzE5NzUsNDIgQEAKIAogCXN0YXJ0Y2FwcmVxLmZsYWdzID0gbnRvaHMoc3RhcnRjYXByZXEuZmxhZ3MpOwogCisJLy8gQ2hlY2sgdGhhdCB0aGUgY2xpZW50IGRvZXMgbm90IGFzayBmb3IgVURQIGlzIHRoZSBzZXJ2ZXIgaGFzIGJlZW4gYXNrZWQKKwkvLyB0byBlbmZvcmNlIGVuY3J5cHRpb24sIGFzIFNTTCBpcyBub3Qgc3VwcG9ydGVkIHlldCB3aXRoIFVEUDoKKwlpZiAodXNlc19zc2wgJiYgKHN0YXJ0Y2FwcmVxLmZsYWdzICYgUlBDQVBfU1RBUlRDQVBSRVFfRkxBR19ER1JBTSkpCisJeworCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICAiU1NMIG5vdCBzdXBwb3J0ZWQgd2l0aCBVRFAgZm9yd2FyZCBvZiByZW1vdGUgcGFja2V0cyIpOworCQlnb3RvIGVycm9yOworCX0KKwogCS8vIENyZWF0ZSBhIHNlc3Npb24gc3RydWN0dXJlCiAJc2Vzc2lvbiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHNlc3Npb24pKTsKIAlpZiAoc2Vzc2lvbiA9PSBOVUxMKQogCXsKLQkJcGNhcF9zbnByaW50ZihlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUsICJDYW4ndCBhbGxvY2F0ZSBzZXNzaW9uIHN0cnVjdHVyZSIpOworCQlzbnByaW50ZihlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUsICJDYW4ndCBhbGxvY2F0ZSBzZXNzaW9uIHN0cnVjdHVyZSIpOwogCQlnb3RvIGVycm9yOwogCX0KIAorCXNlc3Npb24tPnNvY2tkYXRhID0gSU5WQUxJRF9TT0NLRVQ7CisJc2Vzc2lvbi0+Y3RybF9zc2wgPSBzZXNzaW9uLT5kYXRhX3NzbCA9IE5VTEw7CisJLy8gV2UgZG9uJ3QgaGF2ZSBhIHRocmVhZCB5ZXQuCisJc2Vzc2lvbi0+aGF2ZV90aHJlYWQgPSAwOworCS8vCisJLy8gV2UgKnNob3VsZG4ndCogaGF2ZSB0byBpbml0aWFsaXplIHRoZSB0aHJlYWQgaW5kaWNhdG9yCisJLy8gaXRzZWxmLCBiZWNhdXNlIHRoZSBjb21waWxlciAqc2hvdWxkKiByZWFsaXplIHRoYXQgd2UKKwkvLyBvbmx5IHVzZSB0aGlzIGlmIGhhdmVfdGhyZWFkIGlzbid0IDAsIGJ1dCB3ZSAqZG8qIGhhdmUKKwkvLyB0byBkbyBpdCwgYmVjYXVzZSBub3QgYWxsIGNvbXBpbGVycyAqZG8qIHJlYWxpemUgdGhhdC4KKwkvLworCS8vIFRoZXJlIGlzIG5vICJpbnZhbGlkIHRocmVhZCBoYW5kbGUiIHZhbHVlIGZvciBhIFVOKlgKKwkvLyBwdGhyZWFkX3QsIHNvIHdlIGp1c3QgemVybyBpdCBvdXQuCisJLy8KKyNpZmRlZiBfV0lOMzIKKwlzZXNzaW9uLT50aHJlYWQgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyNlbHNlCisJbWVtc2V0KCZzZXNzaW9uLT50aHJlYWQsIDAsIHNpemVvZihzZXNzaW9uLT50aHJlYWQpKTsKKyNlbmRpZgorCiAJLy8gT3BlbiB0aGUgc2VsZWN0ZWQgZGV2aWNlCiAJaWYgKChzZXNzaW9uLT5mcCA9IHBjYXBfb3Blbl9saXZlKHNvdXJjZSwKIAkJCW50b2hsKHN0YXJ0Y2FwcmVxLnNuYXBsZW4pLApAQCAtMTYyNCw5ICsyMDQyLDkgQEAKIAl3ZSB3YW50IHRvIGNvbm5lY3QgdG8KIAkqLwogCXNhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKTsKLQlpZiAoZ2V0cGVlcm5hbWUocGFycy0+c29ja2N0cmxfaW4sIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNhZGRyLCAmc2FkZHJsZW4pID09IC0xKQorCWlmIChnZXRwZWVybmFtZShwYXJzLT5zb2NrY3RybCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2FkZHIsICZzYWRkcmxlbikgPT0gLTEpCiAJewotCQlzb2NrX2dldGVycm9yKCJnZXRwZWVybmFtZSgpOiAiLCBlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUpOworCQlzb2NrX2dldGVycm9yKCJnZXRwZWVybmFtZSgpIiwgZXJybXNnYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTE2MzcsMjAgKzIwNTUsMjAgQEAKIAkvLyBOb3cgd2UgaGF2ZSB0byBjcmVhdGUgYSBuZXcgc29ja2V0IHRvIHNlbmQgcGFja2V0cwogCWlmIChzZXJ2ZXJvcGVuX2RwKQkJLy8gRGF0YSBjb25uZWN0aW9uIGlzIG9wZW5lZCBieSB0aGUgc2VydmVyIHRvd2FyZCB0aGUgY2xpZW50CiAJewotCQlwY2FwX3NucHJpbnRmKHBvcnRkYXRhLCBzaXplb2YgcG9ydGRhdGEsICIlZCIsIG50b2hzKHN0YXJ0Y2FwcmVxLnBvcnRkYXRhKSk7CisJCXNucHJpbnRmKHBvcnRkYXRhLCBzaXplb2YgcG9ydGRhdGEsICIlZCIsIG50b2hzKHN0YXJ0Y2FwcmVxLnBvcnRkYXRhKSk7CiAKIAkJLy8gR2V0IHRoZSBuYW1lIG9mIHRoZSBvdGhlciBwZWVyIChuZWVkZWQgdG8gY29ubmVjdCB0byB0aGF0IHNwZWNpZmljIG5ldHdvcmsgYWRkcmVzcykKIAkJaWYgKGdldG5hbWVpbmZvKChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNhZGRyLCBzYWRkcmxlbiwgcGVlcmhvc3QsCiAJCQkJc2l6ZW9mKHBlZXJob3N0KSwgTlVMTCwgMCwgTklfTlVNRVJJQ0hPU1QpKQogCQl7Ci0JCQlzb2NrX2dldGVycm9yKCJnZXRuYW1laW5mbygpOiAiLCBlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUpOworCQkJc29ja19nZXRlcnJvcigiZ2V0bmFtZWluZm8oKSIsIGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSk7CiAJCQlnb3RvIGVycm9yOwogCQl9CiAKIAkJaWYgKHNvY2tfaW5pdGFkZHJlc3MocGVlcmhvc3QsIHBvcnRkYXRhLCAmaGludHMsICZhZGRyaW5mbywgZXJybXNnYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSA9PSAtMSkKIAkJCWdvdG8gZXJyb3I7CiAKLQkJaWYgKChzb2NrZGF0YSA9IHNvY2tfb3BlbihhZGRyaW5mbywgU09DS09QRU5fQ0xJRU5ULCAwLCBlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUpKSA9PSBJTlZBTElEX1NPQ0tFVCkKKwkJaWYgKChzZXNzaW9uLT5zb2NrZGF0YSA9IHNvY2tfb3BlbihhZGRyaW5mbywgU09DS09QRU5fQ0xJRU5ULCAwLCBlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUpKSA9PSBJTlZBTElEX1NPQ0tFVCkKIAkJCWdvdG8gZXJyb3I7CiAJfQogCWVsc2UJCS8vIERhdGEgY29ubmVjdGlvbiBpcyBvcGVuZWQgYnkgdGhlIGNsaWVudCB0b3dhcmQgdGhlIHNlcnZlcgpAQCAtMTY2MSwxNCArMjA3OSwxNCBAQAogCQlpZiAoc29ja19pbml0YWRkcmVzcyhOVUxMLCAiMCIsICZoaW50cywgJmFkZHJpbmZvLCBlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUpID09IC0xKQogCQkJZ290byBlcnJvcjsKIAotCQlpZiAoKHNvY2tkYXRhID0gc29ja19vcGVuKGFkZHJpbmZvLCBTT0NLT1BFTl9TRVJWRVIsIDEgLyogbWF4IDEgY29ubmVjdGlvbiBpbiBxdWV1ZSAqLywgZXJybXNnYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSkgPT0gSU5WQUxJRF9TT0NLRVQpCisJCWlmICgoc2Vzc2lvbi0+c29ja2RhdGEgPSBzb2NrX29wZW4oYWRkcmluZm8sIFNPQ0tPUEVOX1NFUlZFUiwgMSAvKiBtYXggMSBjb25uZWN0aW9uIGluIHF1ZXVlICovLCBlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUpKSA9PSBJTlZBTElEX1NPQ0tFVCkKIAkJCWdvdG8gZXJyb3I7CiAKIAkJLy8gZ2V0IHRoZSBjb21wbGV0ZSBzb2NrYWRkciBzdHJ1Y3R1cmUgdXNlZCBpbiB0aGUgZGF0YSBjb25uZWN0aW9uCiAJCXNhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKTsKLQkJaWYgKGdldHNvY2tuYW1lKHNvY2tkYXRhLCAoc3RydWN0IHNvY2thZGRyICopICZzYWRkciwgJnNhZGRybGVuKSA9PSAtMSkKKwkJaWYgKGdldHNvY2tuYW1lKHNlc3Npb24tPnNvY2tkYXRhLCAoc3RydWN0IHNvY2thZGRyICopICZzYWRkciwgJnNhZGRybGVuKSA9PSAtMSkKIAkJewotCQkJc29ja19nZXRlcnJvcigiZ2V0c29ja25hbWUoKTogIiwgZXJybXNnYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKKwkJCXNvY2tfZ2V0ZXJyb3IoImdldHNvY2tuYW1lKCkiLCBlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUpOwogCQkJZ290byBlcnJvcjsKIAkJfQogCkBAIC0xNjc2LDcgKzIwOTQsNyBAQAogCQlpZiAoZ2V0bmFtZWluZm8oKHN0cnVjdCBzb2NrYWRkciAqKSAmc2FkZHIsIHNhZGRybGVuLCBOVUxMLAogCQkJCTAsIHBvcnRkYXRhLCBzaXplb2YocG9ydGRhdGEpLCBOSV9OVU1FUklDU0VSVikpCiAJCXsKLQkJCXNvY2tfZ2V0ZXJyb3IoImdldG5hbWVpbmZvKCk6ICIsIGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSk7CisJCQlzb2NrX2dldGVycm9yKCJnZXRuYW1laW5mbygpIiwgZXJybXNnYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAl9CkBAIC0xNjg2LDExICsyMTA0LDEyIEBACiAJYWRkcmluZm8gPSBOVUxMOwogCiAJLy8gTmVlZGVkIHRvIHNlbmQgYW4gZXJyb3Igb24gdGhlIGN0cmwgY29ubmVjdGlvbgotCXNlc3Npb24tPnNvY2tjdHJsX291dCA9IHBhcnMtPnNvY2tjdHJsX291dDsKLQlzZXNzaW9uLT5wcm90b2NvbF92ZXJzaW9uID0gcGFycy0+cHJvdG9jb2xfdmVyc2lvbjsKKwlzZXNzaW9uLT5zb2NrY3RybCA9IHBhcnMtPnNvY2tjdHJsOworCXNlc3Npb24tPmN0cmxfc3NsID0gcGFycy0+c3NsOworCXNlc3Npb24tPnByb3RvY29sX3ZlcnNpb24gPSB2ZXI7CiAKIAkvLyBOb3cgSSBjYW4gc2V0IHRoZSBmaWx0ZXIKLQlyZXQgPSBkYWVtb25fdW5wYWNrYXBwbHlmaWx0ZXIocGFycy0+c29ja2N0cmxfaW4sIHNlc3Npb24sICZwbGVuLCBlcnJtc2didWYpOworCXJldCA9IGRhZW1vbl91bnBhY2thcHBseWZpbHRlcihwYXJzLT5zb2NrY3RybCwgcGFycy0+c3NsLCBzZXNzaW9uLCAmcGxlbiwgZXJybXNnYnVmKTsKIAlpZiAocmV0ID09IC0xKQogCXsKIAkJLy8gRmF0YWwgZXJyb3IuICBBIG1lc3NhZ2UgaGFzIGJlZW4gbG9nZ2VkOyBqdXN0IGdpdmUgdXAuCkBAIC0xNzA3LDcgKzIxMjYsNyBAQAogCSAgICBSUENBUF9ORVRCVUZfU0laRSwgU09DS0JVRl9DSEVDS09OTFksIGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSkgPT0gLTEpCiAJCWdvdG8gZXJyb3I7CiAKLQlycGNhcF9jcmVhdGVoZHIoKHN0cnVjdCBycGNhcF9oZWFkZXIgKikgc2VuZGJ1ZiwgcGFycy0+cHJvdG9jb2xfdmVyc2lvbiwKKwlycGNhcF9jcmVhdGVoZHIoKHN0cnVjdCBycGNhcF9oZWFkZXIgKikgc2VuZGJ1ZiwgdmVyLAogCSAgICBSUENBUF9NU0dfU1RBUlRDQVBfUkVQTFksIDAsIHNpemVvZihzdHJ1Y3QgcnBjYXBfc3RhcnRjYXByZXBseSkpOwogCiAJc3RhcnRjYXByZXBseSA9IChzdHJ1Y3QgcnBjYXBfc3RhcnRjYXByZXBseSAqKSAmc2VuZGJ1ZltzZW5kYnVmaWR4XTsKQEAgLTE3MjUsNyArMjE0NCw3IEBACiAJCXN0YXJ0Y2FwcmVwbHktPnBvcnRkYXRhID0gaHRvbnMocG9ydCk7CiAJfQogCi0JaWYgKHNvY2tfc2VuZChwYXJzLT5zb2NrY3RybF9vdXQsIHNlbmRidWYsIHNlbmRidWZpZHgsIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSkgPT0gLTEpCisJaWYgKHNvY2tfc2VuZChwYXJzLT5zb2NrY3RybCwgcGFycy0+c3NsLCBzZW5kYnVmLCBzZW5kYnVmaWR4LCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpID09IC0xKQogCXsKIAkJLy8gVGhhdCBmYWlsZWQ7IGxvZyBhIG1lc3NhZ2UgYW5kIGdpdmUgdXAuCiAJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIlNlbmQgdG8gY2xpZW50IGZhaWxlZDogJXMiLCBlcnJidWYpOwpAQCAtMTczOSw1MiArMjE1OCw2MSBAQAogCQkvLyBDb25uZWN0aW9uIGNyZWF0aW9uCiAJCXNhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKTsKIAotCQlzb2NrdGVtcCA9IGFjY2VwdChzb2NrZGF0YSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2FkZHIsICZzYWRkcmxlbik7CisJCXNvY2t0ZW1wID0gYWNjZXB0KHNlc3Npb24tPnNvY2tkYXRhLCAoc3RydWN0IHNvY2thZGRyICopICZzYWRkciwgJnNhZGRybGVuKTsKIAogCQlpZiAoc29ja3RlbXAgPT0gSU5WQUxJRF9TT0NLRVQpCiAJCXsKLQkJCXNvY2tfZ2V0ZXJyb3IoImFjY2VwdCgpOiAiLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOworCQkJc29ja19nZXRlcnJvcigiYWNjZXB0KCkiLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOwogCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiQWNjZXB0IG9mIGRhdGEgY29ubmVjdGlvbiBmYWlsZWQ6ICVzIiwKIAkJCSAgICBlcnJidWYpOwogCQkJZ290byBlcnJvcjsKIAkJfQogCiAJCS8vIE5vdyB0aGF0IEkgYWNjZXB0ZWQgdGhlIGNvbm5lY3Rpb24sIHRoZSBzZXJ2ZXIgc29ja2V0IGlzIG5vIGxvbmdlciBuZWVkZWQKLQkJc29ja19jbG9zZShzb2NrZGF0YSwgTlVMTCwgMCk7Ci0JCXNvY2tkYXRhID0gc29ja3RlbXA7CisJCXNvY2tfY2xvc2Uoc2Vzc2lvbi0+c29ja2RhdGEsIE5VTEwsIDApOworCQlzZXNzaW9uLT5zb2NrZGF0YSA9IHNvY2t0ZW1wOwogCX0KIAotCXNlc3Npb24tPnNvY2tkYXRhID0gc29ja2RhdGE7CisJU1NMICpzc2wgPSBOVUxMOworCWlmICh1c2VzX3NzbCkKKwl7CisjaWZkZWYgSEFWRV9PUEVOU1NMCisJCS8qIEluIGJvdGggYWN0aXZlIG9yIHBhc3NpdmUgY2FzZXMsIHdhaXQgZm9yIHRoZSBjbGllbnQgdG8gaW5pdGlhdGUgdGhlCisJCSAqIFRMUyBoYW5kc2hha2UuIFllcyBkdXJpbmcgdGhhdCB0aW1lIHRoZSBjb250cm9sIHNvY2tldCB3aWxsIG5vdCBiZQorCQkgKiBzZXJ2ZWQsIGJ1dCB0aGUgc2FtZSB3YXMgdHJ1ZSBmcm9tIHRoZSBhYm92ZSBjYWxsIHRvIGFjY2VwdCgpLiAqLworCQlzc2wgPSBzc2xfcHJvbW90aW9uKDEsIHNlc3Npb24tPnNvY2tkYXRhLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOworCQlpZiAoISBzc2wpCisJCXsKKwkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIlRMUyBoYW5kc2hha2UgZmFpbGVkOiAlcyIsIGVycmJ1Zik7CisJCQlnb3RvIGVycm9yOworCQl9CisjZW5kaWYKKwl9CisJc2Vzc2lvbi0+ZGF0YV9zc2wgPSBzc2w7CiAKIAkvLyBOb3cgd2UgaGF2ZSB0byBjcmVhdGUgYSBuZXcgdGhyZWFkIHRvIHJlY2VpdmUgcGFja2V0cwogI2lmZGVmIF9XSU4zMgotCXRocmVhZGRhdGEtPnRocmVhZCA9IChIQU5ETEUpX2JlZ2ludGhyZWFkZXgoTlVMTCwgMCwgZGFlbW9uX3RocmRhdGFtYWluLAorCXNlc3Npb24tPnRocmVhZCA9IChIQU5ETEUpX2JlZ2ludGhyZWFkZXgoTlVMTCwgMCwgZGFlbW9uX3RocmRhdGFtYWluLAogCSAgICAodm9pZCAqKSBzZXNzaW9uLCAwLCBOVUxMKTsKLQlpZiAodGhyZWFkZGF0YS0+dGhyZWFkID09IDApCisJaWYgKHNlc3Npb24tPnRocmVhZCA9PSAwKQogCXsKLQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJFcnJvciBjcmVhdGluZyB0aGUgZGF0YSB0aHJlYWQiKTsKKwkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiRXJyb3IgY3JlYXRpbmcgdGhlIGRhdGEgdGhyZWFkIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogI2Vsc2UKLQkvKiBHViB3ZSBuZWVkIHRoaXMgdG8gY3JlYXRlIHRoZSB0aHJlYWQgYXMgZGV0YWNoZWQuICovCi0JLyogR1Ygb3RoZXJ3aXNlLCB0aGUgdGhyZWFkIGhhbmRsZSBpcyBub3QgZGVzdHJveWVkICAqLwotCXB0aHJlYWRfYXR0cl9pbml0KCZkZXRhY2hlZEF0dHJpYnV0ZSk7Ci0JcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKCZkZXRhY2hlZEF0dHJpYnV0ZSwgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQpOwotCXJldCA9IHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRkYXRhLT50aHJlYWQsICZkZXRhY2hlZEF0dHJpYnV0ZSwKLQkgICAgZGFlbW9uX3RocmRhdGFtYWluLCAodm9pZCAqKSBzZXNzaW9uKTsKKwlyZXQgPSBwdGhyZWFkX2NyZWF0ZSgmc2Vzc2lvbi0+dGhyZWFkLCBOVUxMLCBkYWVtb25fdGhyZGF0YW1haW4sCisJICAgICh2b2lkICopIHNlc3Npb24pOwogCWlmIChyZXQgIT0gMCkKIAl7CiAJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkgICAgcmV0LCAiRXJyb3IgY3JlYXRpbmcgdGhlIGRhdGEgdGhyZWFkIik7Ci0JCXB0aHJlYWRfYXR0cl9kZXN0cm95KCZkZXRhY2hlZEF0dHJpYnV0ZSk7CiAJCWdvdG8gZXJyb3I7CiAJfQotCXB0aHJlYWRfYXR0cl9kZXN0cm95KCZkZXRhY2hlZEF0dHJpYnV0ZSk7CiAjZW5kaWYKLQl0aHJlYWRkYXRhLT5oYXZlX3RocmVhZCA9IDE7CisJc2Vzc2lvbi0+aGF2ZV90aHJlYWQgPSAxOwogCiAJLy8gQ2hlY2sgaWYgYWxsIHRoZSBkYXRhIGhhcyBiZWVuIHJlYWQ7IGlmIG5vdCwgZGlzY2FyZCB0aGUgZGF0YSBpbiBleGNlc3MKLQlpZiAocnBjYXBkX2Rpc2NhcmQocGFycy0+c29ja2N0cmxfaW4sIHBsZW4pID09IC0xKQorCWlmIChycGNhcGRfZGlzY2FyZChwYXJzLT5zb2NrY3RybCwgcGFycy0+c3NsLCBwbGVuKSA9PSAtMSkKIAkJZ290byBmYXRhbF9lcnJvcjsKIAogCSpzZXNzaW9ucCA9IHNlc3Npb247CkBAIC0xODAwLDMyICsyMjI4LDEzIEBACiAJaWYgKGFkZHJpbmZvKQogCQlmcmVlYWRkcmluZm8oYWRkcmluZm8pOwogCi0JaWYgKHRocmVhZGRhdGEtPmhhdmVfdGhyZWFkKQotCXsKLSNpZmRlZiBfV0lOMzIKLQkJaWYgKHNlc3Npb24tPmZwKQotCQl7Ci0JCQlwY2FwX2JyZWFrbG9vcChzZXNzaW9uLT5mcCk7Ci0JCQlTZXRFdmVudChwY2FwX2dldGV2ZW50KHNlc3Npb24tPmZwKSk7Ci0JCX0KLQkJQ2xvc2VIYW5kbGUodGhyZWFkZGF0YS0+dGhyZWFkKTsKLSNlbHNlCi0JCXB0aHJlYWRfY2FuY2VsKHRocmVhZGRhdGEtPnRocmVhZCk7Ci0jZW5kaWYKLQkJdGhyZWFkZGF0YS0+aGF2ZV90aHJlYWQgPSAwOwotCX0KLQotCWlmIChzb2NrZGF0YSAhPSBJTlZBTElEX1NPQ0tFVCkKLQkJc29ja19jbG9zZShzb2NrZGF0YSwgTlVMTCwgMCk7Ci0KIAlpZiAoc2Vzc2lvbikKIAl7Ci0JCWlmIChzZXNzaW9uLT5mcCkKLQkJCXBjYXBfY2xvc2Uoc2Vzc2lvbi0+ZnApOworCQlzZXNzaW9uX2Nsb3NlKHNlc3Npb24pOwogCQlmcmVlKHNlc3Npb24pOwogCX0KIAotCWlmIChycGNhcF9zZW5kZXJyb3IocGFycy0+c29ja2N0cmxfb3V0LCBwYXJzLT5wcm90b2NvbF92ZXJzaW9uLAorCWlmIChycGNhcF9zZW5kZXJyb3IocGFycy0+c29ja2N0cmwsIHBhcnMtPnNzbCwgdmVyLAogCSAgICBQQ0FQX0VSUl9TVEFSVENBUFRVUkUsIGVycm1zZ2J1ZiwgZXJyYnVmKSA9PSAtMSkKIAl7CiAJCS8vIFRoYXQgZmFpbGVkOyBsb2cgYSBtZXNzYWdlIGFuZCBnaXZlIHVwLgpAQCAtMTgzNCw3ICsyMjQzLDcgQEAKIAl9CiAKIAkvLyBDaGVjayBpZiBhbGwgdGhlIGRhdGEgaGFzIGJlZW4gcmVhZDsgaWYgbm90LCBkaXNjYXJkIHRoZSBkYXRhIGluIGV4Y2VzcwotCWlmIChycGNhcGRfZGlzY2FyZChwYXJzLT5zb2NrY3RybF9pbiwgcGxlbikgPT0gLTEpCisJaWYgKHJwY2FwZF9kaXNjYXJkKHBhcnMtPnNvY2tjdHJsLCBwYXJzLT5zc2wsIHBsZW4pID09IC0xKQogCXsKIAkJLy8gTmV0d29yayBlcnJvci4KIAkJcmV0dXJuIC0xOwpAQCAtMTg0OSw1MSArMjI1OCw5IEBACiAJLy8KIAkqc2Vzc2lvbnAgPSBOVUxMOwogCi0JaWYgKHRocmVhZGRhdGEtPmhhdmVfdGhyZWFkKQotCXsKLSNpZmRlZiBfV0lOMzIKLQkJaWYgKHNlc3Npb24gJiYgc2Vzc2lvbi0+ZnApCi0JCXsKLQkJCS8vCi0JCQkvLyBUZWxsIHRoZSBkYXRhIGNvbm5lY3Rpb24gdGhyZWFkIG1haW4gY2FwdHVyZQotCQkJLy8gbG9vcCB0byBicmVhayBvdXQgb2YgdGhhdCBsb29wLgotCQkJLy8KLQkJCXBjYXBfYnJlYWtsb29wKHNlc3Npb24tPmZwKTsKLQotCQkJLy8KLQkJCS8vIElmIGl0J3MgY3VycmVudGx5IGJsb2NrZWQgd2FpdGluZyBmb3IgcGFja2V0cwotCQkJLy8gdG8gYXJyaXZlLCB0cnkgdG8gd2FrZSBpdCB1cCwgc28gaXQgY2FuIHNlZQotCQkJLy8gdGhlICJicmVhayBvdXQgb2YgdGhlIGxvb3AiIGluZGljYXRpb24uCi0JCQkvLwotCQkJU2V0RXZlbnQocGNhcF9nZXRldmVudChzZXNzaW9uLT5mcCkpOwotCQl9Ci0KLQkJLy8KLQkJLy8gV2FpdCBmb3IgdGhlIHRocmVhZCB0byBleGl0LCBzbyB3ZSBkb24ndCBjbG9zZQotCQkvLyBzb2NrZXRzIG91dCBmcm9tIHVuZGVyIGl0LgotCQkvLwotCQkvLyBYWFggLSBoYXZlIGEgdGltZW91dCwgc28gd2UgZG9uJ3Qgd2FpdCBmb3JldmVyPwotCQkvLwotCQlXYWl0Rm9yU2luZ2xlT2JqZWN0KHRocmVhZGRhdGEtPnRocmVhZCwgSU5GSU5JVEUpOwotCi0JCS8vCi0JCS8vIFJlbGVhc2UgdGhlIHRocmVhZCBoYW5kbGUsIGFzIHdlJ3JlIGRvbmUgd2l0aAotCQkvLyBpdC4KLQkJLy8KLQkJQ2xvc2VIYW5kbGUodGhyZWFkZGF0YS0+dGhyZWFkKTsKLSNlbHNlCi0JCXB0aHJlYWRfY2FuY2VsKHRocmVhZGRhdGEtPnRocmVhZCk7Ci0jZW5kaWYKLQkJdGhyZWFkZGF0YS0+aGF2ZV90aHJlYWQgPSAwOwotCX0KLQotCWlmIChzb2NrZGF0YSAhPSBJTlZBTElEX1NPQ0tFVCkKLQkJc29ja19jbG9zZShzb2NrZGF0YSwgTlVMTCwgMCk7Ci0KIAlpZiAoc2Vzc2lvbikKIAl7Ci0JCWlmIChzZXNzaW9uLT5mcCkKLQkJCXBjYXBfY2xvc2Uoc2Vzc2lvbi0+ZnApOworCQlzZXNzaW9uX2Nsb3NlKHNlc3Npb24pOwogCQlmcmVlKHNlc3Npb24pOwogCX0KIApAQCAtMTkwMSw1NyArMjI2OCwxNyBAQAogfQogCiBzdGF0aWMgaW50Ci1kYWVtb25fbXNnX2VuZGNhcF9yZXEoc3RydWN0IGRhZW1vbl9zbHBhcnMgKnBhcnMsIHN0cnVjdCBzZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3QgdGhyZWFkX2hhbmRsZSAqdGhyZWFkZGF0YSkKK2RhZW1vbl9tc2dfZW5kY2FwX3JlcSh1aW50OCB2ZXIsIHN0cnVjdCBkYWVtb25fc2xwYXJzICpwYXJzLAorICAgIHN0cnVjdCBzZXNzaW9uICpzZXNzaW9uKQogewogCWNoYXIgZXJyYnVmW1BDQVBfRVJSQlVGX1NJWkVdOwkJLy8gYnVmZmVyIGZvciBuZXR3b3JrIGVycm9ycwogCXN0cnVjdCBycGNhcF9oZWFkZXIgaGVhZGVyOwogCi0JaWYgKHRocmVhZGRhdGEtPmhhdmVfdGhyZWFkKQotCXsKLSNpZmRlZiBfV0lOMzIKLQkJLy8KLQkJLy8gVGVsbCB0aGUgZGF0YSBjb25uZWN0aW9uIHRocmVhZCBtYWluIGNhcHR1cmUgbG9vcCB0bwotCQkvLyBicmVhayBvdXQgb2YgdGhhdCBsb29wLgotCQkvLwotCQlwY2FwX2JyZWFrbG9vcChzZXNzaW9uLT5mcCk7CisJc2Vzc2lvbl9jbG9zZShzZXNzaW9uKTsKIAotCQkvLwotCQkvLyBJZiBpdCdzIGN1cnJlbnRseSBibG9ja2VkIHdhaXRpbmcgZm9yIHBhY2tldHMgdG8KLQkJLy8gYXJyaXZlLCB0cnkgdG8gd2FrZSBpdCB1cCwgc28gaXQgY2FuIHNlZSB0aGUgImJyZWFrCi0JCS8vIG91dCBvZiB0aGUgbG9vcCIgaW5kaWNhdGlvbi4KLQkJLy8KLQkJU2V0RXZlbnQocGNhcF9nZXRldmVudChzZXNzaW9uLT5mcCkpOworCXJwY2FwX2NyZWF0ZWhkcigmaGVhZGVyLCB2ZXIsIFJQQ0FQX01TR19FTkRDQVBfUkVQTFksIDAsIDApOwogCi0JCS8vCi0JCS8vIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gZXhpdCwgc28gd2UgZG9uJ3QgY2xvc2UKLQkJLy8gc29ja2V0cyBvdXQgZnJvbSB1bmRlciBpdC4KLQkJLy8KLQkJLy8gWFhYIC0gaGF2ZSBhIHRpbWVvdXQsIHNvIHdlIGRvbid0IHdhaXQgZm9yZXZlcj8KLQkJLy8KLQkJV2FpdEZvclNpbmdsZU9iamVjdCh0aHJlYWRkYXRhLT50aHJlYWQsIElORklOSVRFKTsKLQotCQkvLwotCQkvLyBSZWxlYXNlIHRoZSB0aHJlYWQgaGFuZGxlLCBhcyB3ZSdyZSBkb25lIHdpdGgKLQkJLy8gaXQuCi0JCS8vCi0JCUNsb3NlSGFuZGxlKHRocmVhZGRhdGEtPnRocmVhZCk7Ci0jZWxzZQotCQlwdGhyZWFkX2NhbmNlbCh0aHJlYWRkYXRhLT50aHJlYWQpOwotI2VuZGlmCi0JCXRocmVhZGRhdGEtPmhhdmVfdGhyZWFkID0gMDsKLQl9Ci0JaWYgKHNlc3Npb24tPnNvY2tkYXRhKQotCXsKLQkJc29ja19jbG9zZShzZXNzaW9uLT5zb2NrZGF0YSwgTlVMTCwgMCk7Ci0JCXNlc3Npb24tPnNvY2tkYXRhID0gMDsKLQl9Ci0KLQlwY2FwX2Nsb3NlKHNlc3Npb24tPmZwKTsKLQotCXJwY2FwX2NyZWF0ZWhkcigmaGVhZGVyLCBwYXJzLT5wcm90b2NvbF92ZXJzaW9uLAotCSAgICBSUENBUF9NU0dfRU5EQ0FQX1JFUExZLCAwLCAwKTsKLQotCWlmIChzb2NrX3NlbmQocGFycy0+c29ja2N0cmxfb3V0LCAoY2hhciAqKSAmaGVhZGVyLCBzaXplb2Yoc3RydWN0IHJwY2FwX2hlYWRlciksIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSkgPT0gLTEpCisJaWYgKHNvY2tfc2VuZChwYXJzLT5zb2NrY3RybCwgcGFycy0+c3NsLCAoY2hhciAqKSAmaGVhZGVyLCBzaXplb2Yoc3RydWN0IHJwY2FwX2hlYWRlciksIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSkgPT0gLTEpCiAJewogCQkvLyBUaGF0IGZhaWxlZDsgbG9nIGEgbWVzc2FnZSBhbmQgZ2l2ZSB1cC4KIAkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiU2VuZCB0byBjbGllbnQgZmFpbGVkOiAlcyIsIGVycmJ1Zik7CkBAIC0xOTYxLDggKzIyODgsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorLy8KKy8vIFdlIGltcG9zZSBhIGxpbWl0IG9uIHRoZSBmaWx0ZXIgcHJvZ3JhbSBzaXplLCBzbyB0aGF0LCBvbiBXaW5kb3dzLAorLy8gd2hlcmUgdGhlcmUncyBvbmx5IG9uZSBzZXJ2ZXIgcHJvY2VzcyB3aXRoIG11bHRpcGxlIHRocmVhZHMsIGl0J3MKKy8vIGhhcmRlciB0byBlYXQgYWxsIHRoZSBzZXJ2ZXIgYWRkcmVzcyBzcGFjZSBieSBzZW5kaW5nIGxhcmdlciBmaWx0ZXIKKy8vIHByb2dyYW1zLiAgKFRoaXMgaXNuJ3QgYW4gaXNzdWUgb24gVU4qWCwgd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlCisvLyBzZXJ2ZXIgcHJvY2Vzc2VzLCBvbmUgcGVyIGNsaWVudCBjb25uZWN0aW9uLikKKy8vCisvLyBXZSBwaWNrIGEgdmFsdWUgdGhhdCBsaW1pdHMgZWFjaCBmaWx0ZXIgdG8gNjRLOyB0aGF0IHZhbHVlIGlzIHR3aWNlCisvLyB0aGUgaW4ta2VybmVsIGxpbWl0IGZvciBMaW51eCBhbmQgMTYgdGltZXMgdGhlIGluLWtlcm5lbCBsaW1pdCBmb3IKKy8vICpCU0QgYW5kIG1hY09TLgorLy8KKy8vIEl0IGFsc28gcHJldmVudHMgYW4gb3ZlcmZsb3cgb24gMzItYml0IHBsYXRmb3JtcyB3aGVuIGNhbGN1bGF0aW5nCisvLyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgZmlsdGVyIHByb2dyYW0uICAoSXQncyBub3QgYW4gaXNzdWUgb24gNjQtYml0CisvLyBwbGF0Zm9ybXMgd2l0aCBhIDY0LWJpdCBzaXplX3QsIGFzIHRoZSBmaWx0ZXIgc2l6ZSBpcyAzMiBiaXRzLikKKy8vCisjZGVmaW5lIFJQQ0FQX0JQRl9NQVhJTlNOUwk4MTkyCisKIHN0YXRpYyBpbnQKLWRhZW1vbl91bnBhY2thcHBseWZpbHRlcihTT0NLRVQgc29ja2N0cmxfaW4sIHN0cnVjdCBzZXNzaW9uICpzZXNzaW9uLCB1aW50MzIgKnBsZW5wLCBjaGFyICplcnJtc2didWYpCitkYWVtb25fdW5wYWNrYXBwbHlmaWx0ZXIoU09DS0VUIHNvY2tjdHJsLCBTU0wgKmN0cmxfc3NsLCBzdHJ1Y3Qgc2Vzc2lvbiAqc2Vzc2lvbiwgdWludDMyICpwbGVucCwgY2hhciAqZXJybXNnYnVmKQogewogCWludCBzdGF0dXM7CiAJc3RydWN0IHJwY2FwX2ZpbHRlciBmaWx0ZXI7CkBAIC0xOTcxLDcgKzIzMTUsNyBAQAogCXN0cnVjdCBicGZfcHJvZ3JhbSBiZl9wcm9nOwogCXVuc2lnbmVkIGludCBpOwogCi0Jc3RhdHVzID0gcnBjYXBkX3JlY3Yoc29ja2N0cmxfaW4sIChjaGFyICopICZmaWx0ZXIsCisJc3RhdHVzID0gcnBjYXBkX3JlY3Yoc29ja2N0cmwsIGN0cmxfc3NsLCAoY2hhciAqKSAmZmlsdGVyLAogCSAgICBzaXplb2Yoc3RydWN0IHJwY2FwX2ZpbHRlciksIHBsZW5wLCBlcnJtc2didWYpOwogCWlmIChzdGF0dXMgPT0gLTEpCiAJewpAQCAtMTk4NiwxMCArMjMzMCwxNyBAQAogCiAJaWYgKG50b2hzKGZpbHRlci5maWx0ZXJ0eXBlKSAhPSBSUENBUF9VUERBVEVGSUxURVJfQlBGKQogCXsKLQkJcGNhcF9zbnByaW50ZihlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUsICJPbmx5IEJQRi9OUEYgZmlsdGVycyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZCIpOworCQlzbnByaW50ZihlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUsICJPbmx5IEJQRi9OUEYgZmlsdGVycyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZCIpOwogCQlyZXR1cm4gLTI7CiAJfQogCisJaWYgKGJmX3Byb2cuYmZfbGVuID4gUlBDQVBfQlBGX01BWElOU05TKQorCXsKKwkJc25wcmludGYoZXJybXNnYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkgICAgIkZpbHRlciBwcm9ncmFtIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHNpemUgb2YgJXUgaW5zdHJ1Y3Rpb25zIiwKKwkJICAgIFJQQ0FQX0JQRl9NQVhJTlNOUyk7CisJCXJldHVybiAtMjsKKwl9CiAJYmZfaW5zbiA9IChzdHJ1Y3QgYnBmX2luc24gKikgbWFsbG9jIChzaXplb2Yoc3RydWN0IGJwZl9pbnNuKSAqIGJmX3Byb2cuYmZfbGVuKTsKIAlpZiAoYmZfaW5zbiA9PSBOVUxMKQogCXsKQEAgLTIwMDIsNyArMjM1Myw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgYmZfcHJvZy5iZl9sZW47IGkrKykKIAl7Ci0JCXN0YXR1cyA9IHJwY2FwZF9yZWN2KHNvY2tjdHJsX2luLCAoY2hhciAqKSAmaW5zbiwKKwkJc3RhdHVzID0gcnBjYXBkX3JlY3Yoc29ja2N0cmwsIGN0cmxfc3NsLCAoY2hhciAqKSAmaW5zbiwKIAkJICAgIHNpemVvZihzdHJ1Y3QgcnBjYXBfZmlsdGVyYnBmX2luc24pLCBwbGVucCwgZXJybXNnYnVmKTsKIAkJaWYgKHN0YXR1cyA9PSAtMSkKIAkJewpAQCAtMjAyMSwxNSArMjM3MiwxOCBAQAogCQliZl9pbnNuKys7CiAJfQogCisJLy8KKwkvLyBYWFggLSBwY2FwX3NldGZpbHRlcigpIHNob3VsZCBkbyB0aGUgdmFsaWRhdGlvbiBmb3IgdXMuCisJLy8KIAlpZiAoYnBmX3ZhbGlkYXRlKGJmX3Byb2cuYmZfaW5zbnMsIGJmX3Byb2cuYmZfbGVuKSA9PSAwKQogCXsKLQkJcGNhcF9zbnByaW50ZihlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUsICJUaGUgZmlsdGVyIGNvbnRhaW5zIGJvZ3VzIGluc3RydWN0aW9ucyIpOworCQlzbnByaW50ZihlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUsICJUaGUgZmlsdGVyIGNvbnRhaW5zIGJvZ3VzIGluc3RydWN0aW9ucyIpOwogCQlyZXR1cm4gLTI7CiAJfQogCiAJaWYgKHBjYXBfc2V0ZmlsdGVyKHNlc3Npb24tPmZwLCAmYmZfcHJvZykpCiAJewotCQlwY2FwX3NucHJpbnRmKGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlJQQ0FQIGVycm9yOiAlcyIsIHBjYXBfZ2V0ZXJyKHNlc3Npb24tPmZwKSk7CisJCXNucHJpbnRmKGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSwgIlJQQ0FQIGVycm9yOiAlcyIsIHBjYXBfZ2V0ZXJyKHNlc3Npb24tPmZwKSk7CiAJCXJldHVybiAtMjsKIAl9CiAKQEAgLTIwMzcsMTQgKzIzOTEsMTUgQEAKIH0KIAogc3RhdGljIGludAotZGFlbW9uX21zZ191cGRhdGVmaWx0ZXJfcmVxKHN0cnVjdCBkYWVtb25fc2xwYXJzICpwYXJzLCBzdHJ1Y3Qgc2Vzc2lvbiAqc2Vzc2lvbiwgdWludDMyIHBsZW4pCitkYWVtb25fbXNnX3VwZGF0ZWZpbHRlcl9yZXEodWludDggdmVyLCBzdHJ1Y3QgZGFlbW9uX3NscGFycyAqcGFycywKKyAgICBzdHJ1Y3Qgc2Vzc2lvbiAqc2Vzc2lvbiwgdWludDMyIHBsZW4pCiB7CiAJY2hhciBlcnJidWZbUENBUF9FUlJCVUZfU0laRV07CiAJY2hhciBlcnJtc2didWZbUENBUF9FUlJCVUZfU0laRV07CS8vIGJ1ZmZlciBmb3IgZXJyb3JzIHRvIHNlbmQgdG8gdGhlIGNsaWVudAogCWludCByZXQ7CQkJCS8vIHN0YXR1cyBvZiBkYWVtb25fdW5wYWNrYXBwbHlmaWx0ZXIoKQogCXN0cnVjdCBycGNhcF9oZWFkZXIgaGVhZGVyOwkJLy8ga2VlcHMgdGhlIGFuc3dlciB0byB0aGUgdXBkYXRlZmlsdGVyIGNvbW1hbmQKIAotCXJldCA9IGRhZW1vbl91bnBhY2thcHBseWZpbHRlcihwYXJzLT5zb2NrY3RybF9pbiwgc2Vzc2lvbiwgJnBsZW4sIGVycm1zZ2J1Zik7CisJcmV0ID0gZGFlbW9uX3VucGFja2FwcGx5ZmlsdGVyKHBhcnMtPnNvY2tjdHJsLCBwYXJzLT5zc2wsIHNlc3Npb24sICZwbGVuLCBlcnJtc2didWYpOwogCWlmIChyZXQgPT0gLTEpCiAJewogCQkvLyBGYXRhbCBlcnJvci4gIEEgbWVzc2FnZSBoYXMgYmVlbiBsb2dnZWQ7IGp1c3QgZ2l2ZSB1cC4KQEAgLTIwNTcsMTkgKzI0MTIsMTggQEAKIAl9CiAKIAkvLyBDaGVjayBpZiBhbGwgdGhlIGRhdGEgaGFzIGJlZW4gcmVhZDsgaWYgbm90LCBkaXNjYXJkIHRoZSBkYXRhIGluIGV4Y2VzcwotCWlmIChycGNhcGRfZGlzY2FyZChwYXJzLT5zb2NrY3RybF9pbiwgcGxlbikgPT0gLTEpCisJaWYgKHJwY2FwZF9kaXNjYXJkKHBhcnMtPnNvY2tjdHJsLCBwYXJzLT5zc2wsIHBsZW4pID09IC0xKQogCXsKIAkJLy8gTmV0d29yayBlcnJvci4KIAkJcmV0dXJuIC0xOwogCX0KIAogCS8vIEEgcmVzcG9uc2UgaXMgbmVlZGVkLCBvdGhlcndpc2UgdGhlIG90aGVyIGhvc3QgZG9lcyBub3Qga25vdyB0aGF0IGV2ZXJ5dGhpbmcgd2VudCB3ZWxsCi0JcnBjYXBfY3JlYXRlaGRyKCZoZWFkZXIsIHBhcnMtPnByb3RvY29sX3ZlcnNpb24sCi0JICAgIFJQQ0FQX01TR19VUERBVEVGSUxURVJfUkVQTFksIDAsIDApOworCXJwY2FwX2NyZWF0ZWhkcigmaGVhZGVyLCB2ZXIsIFJQQ0FQX01TR19VUERBVEVGSUxURVJfUkVQTFksIDAsIDApOwogCi0JaWYgKHNvY2tfc2VuZChwYXJzLT5zb2NrY3RybF9vdXQsIChjaGFyICopICZoZWFkZXIsIHNpemVvZiAoc3RydWN0IHJwY2FwX2hlYWRlciksIHBjYXBfZ2V0ZXJyKHNlc3Npb24tPmZwKSwgUENBUF9FUlJCVUZfU0laRSkpCisJaWYgKHNvY2tfc2VuZChwYXJzLT5zb2NrY3RybCwgcGFycy0+c3NsLCAoY2hhciAqKSAmaGVhZGVyLCBzaXplb2YgKHN0cnVjdCBycGNhcF9oZWFkZXIpLCBwY2FwX2dldGVycihzZXNzaW9uLT5mcCksIFBDQVBfRVJSQlVGX1NJWkUpKQogCXsKLQkJLy8gVGhhdCBmYWlsZWQ7IGxvZyBhIG1lc3NzYWdlIGFuZCBnaXZlIHVwLgorCQkvLyBUaGF0IGZhaWxlZDsgbG9nIGEgbWVzc2FnZSBhbmQgZ2l2ZSB1cC4KIAkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiU2VuZCB0byBjbGllbnQgZmFpbGVkOiAlcyIsIGVycmJ1Zik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0yMDc3LDEyICsyNDMxLDEyIEBACiAJcmV0dXJuIDA7CiAKIGVycm9yOgotCWlmIChycGNhcGRfZGlzY2FyZChwYXJzLT5zb2NrY3RybF9pbiwgcGxlbikgPT0gLTEpCisJaWYgKHJwY2FwZF9kaXNjYXJkKHBhcnMtPnNvY2tjdHJsLCBwYXJzLT5zc2wsIHBsZW4pID09IC0xKQogCXsKIAkJcmV0dXJuIC0xOwogCX0KLQlycGNhcF9zZW5kZXJyb3IocGFycy0+c29ja2N0cmxfb3V0LCBwYXJzLT5wcm90b2NvbF92ZXJzaW9uLAotCSAgICBQQ0FQX0VSUl9VUERBVEVGSUxURVIsIGVycm1zZ2J1ZiwgTlVMTCk7CisJcnBjYXBfc2VuZGVycm9yKHBhcnMtPnNvY2tjdHJsLCBwYXJzLT5zc2wsIHZlciwgUENBUF9FUlJfVVBEQVRFRklMVEVSLAorCSAgICBlcnJtc2didWYsIE5VTEwpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMDkxLDcgKzI0NDUsOCBAQAogCVxicmllZiBSZWNlaXZlZCB0aGUgc2FtcGxpbmcgcGFyYW1ldGVycyBmcm9tIHJlbW90ZSBob3N0IGFuZCBpdCBzdG9yZXMgaW4gdGhlIHBjYXBfdCBzdHJ1Y3R1cmUuCiAqLwogc3RhdGljIGludAotZGFlbW9uX21zZ19zZXRzYW1wbGluZ19yZXEoc3RydWN0IGRhZW1vbl9zbHBhcnMgKnBhcnMsIHVpbnQzMiBwbGVuLCBzdHJ1Y3QgcnBjYXBfc2FtcGxpbmcgKnNhbXBfcGFyYW0pCitkYWVtb25fbXNnX3NldHNhbXBsaW5nX3JlcSh1aW50OCB2ZXIsIHN0cnVjdCBkYWVtb25fc2xwYXJzICpwYXJzLCB1aW50MzIgcGxlbiwKKyAgICBzdHJ1Y3QgcnBjYXBfc2FtcGxpbmcgKnNhbXBfcGFyYW0pCiB7CiAJY2hhciBlcnJidWZbUENBUF9FUlJCVUZfU0laRV07CQkvLyBidWZmZXIgZm9yIG5ldHdvcmsgZXJyb3JzCiAJY2hhciBlcnJtc2didWZbUENBUF9FUlJCVUZfU0laRV07CkBAIC0yMDk5LDcgKzI0NTQsNyBAQAogCXN0cnVjdCBycGNhcF9zYW1wbGluZyBycGNhcF9zYW1wOwogCWludCBzdGF0dXM7CiAKLQlzdGF0dXMgPSBycGNhcGRfcmVjdihwYXJzLT5zb2NrY3RybF9pbiwgKGNoYXIgKikgJnJwY2FwX3NhbXAsIHNpemVvZihzdHJ1Y3QgcnBjYXBfc2FtcGxpbmcpLCAmcGxlbiwgZXJybXNnYnVmKTsKKwlzdGF0dXMgPSBycGNhcGRfcmVjdihwYXJzLT5zb2NrY3RybCwgcGFycy0+c3NsLCAoY2hhciAqKSAmcnBjYXBfc2FtcCwgc2l6ZW9mKHN0cnVjdCBycGNhcF9zYW1wbGluZyksICZwbGVuLCBlcnJtc2didWYpOwogCWlmIChzdGF0dXMgPT0gLTEpCiAJewogCQlyZXR1cm4gLTE7CkBAIC0yMTE0LDE3ICsyNDY5LDE2IEBACiAJc2FtcF9wYXJhbS0+dmFsdWUgPSBudG9obChycGNhcF9zYW1wLnZhbHVlKTsKIAogCS8vIEEgcmVzcG9uc2UgaXMgbmVlZGVkLCBvdGhlcndpc2UgdGhlIG90aGVyIGhvc3QgZG9lcyBub3Qga25vdyB0aGF0IGV2ZXJ5dGhpbmcgd2VudCB3ZWxsCi0JcnBjYXBfY3JlYXRlaGRyKCZoZWFkZXIsIHBhcnMtPnByb3RvY29sX3ZlcnNpb24sCi0JICAgIFJQQ0FQX01TR19TRVRTQU1QTElOR19SRVBMWSwgMCwgMCk7CisJcnBjYXBfY3JlYXRlaGRyKCZoZWFkZXIsIHZlciwgUlBDQVBfTVNHX1NFVFNBTVBMSU5HX1JFUExZLCAwLCAwKTsKIAotCWlmIChzb2NrX3NlbmQocGFycy0+c29ja2N0cmxfb3V0LCAoY2hhciAqKSAmaGVhZGVyLCBzaXplb2YgKHN0cnVjdCBycGNhcF9oZWFkZXIpLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpID09IC0xKQorCWlmIChzb2NrX3NlbmQocGFycy0+c29ja2N0cmwsIHBhcnMtPnNzbCwgKGNoYXIgKikgJmhlYWRlciwgc2l6ZW9mIChzdHJ1Y3QgcnBjYXBfaGVhZGVyKSwgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSA9PSAtMSkKIAl7Ci0JCS8vIFRoYXQgZmFpbGVkOyBsb2cgYSBtZXNzc2FnZSBhbmQgZ2l2ZSB1cC4KKwkJLy8gVGhhdCBmYWlsZWQ7IGxvZyBhIG1lc3NhZ2UgYW5kIGdpdmUgdXAuCiAJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIlNlbmQgdG8gY2xpZW50IGZhaWxlZDogJXMiLCBlcnJidWYpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKHJwY2FwZF9kaXNjYXJkKHBhcnMtPnNvY2tjdHJsX2luLCBwbGVuKSA9PSAtMSkKKwlpZiAocnBjYXBkX2Rpc2NhcmQocGFycy0+c29ja2N0cmwsIHBhcnMtPnNzbCwgcGxlbikgPT0gLTEpCiAJewogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMjEzMiw4ICsyNDg2LDggQEAKIAlyZXR1cm4gMDsKIAogZXJyb3I6Ci0JaWYgKHJwY2FwX3NlbmRlcnJvcihwYXJzLT5zb2NrY3RybF9vdXQsIHBhcnMtPnByb3RvY29sX3ZlcnNpb24sCi0JICAgIFBDQVBfRVJSX0FVVEgsIGVycm1zZ2J1ZiwgZXJyYnVmKSA9PSAtMSkKKwlpZiAocnBjYXBfc2VuZGVycm9yKHBhcnMtPnNvY2tjdHJsLCBwYXJzLT5zc2wsIHZlciwgUENBUF9FUlJfU0VUU0FNUExJTkcsCisJICAgIGVycm1zZ2J1ZiwgZXJyYnVmKSA9PSAtMSkKIAl7CiAJCS8vIFRoYXQgZmFpbGVkOyBsb2cgYSBtZXNzYWdlIGFuZCBnaXZlIHVwLgogCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICJTZW5kIHRvIGNsaWVudCBmYWlsZWQ6ICVzIiwgZXJyYnVmKTsKQEAgLTIxNDEsNyArMjQ5NSw3IEBACiAJfQogCiAJLy8gQ2hlY2sgaWYgYWxsIHRoZSBkYXRhIGhhcyBiZWVuIHJlYWQ7IGlmIG5vdCwgZGlzY2FyZCB0aGUgZGF0YSBpbiBleGNlc3MKLQlpZiAocnBjYXBkX2Rpc2NhcmQocGFycy0+c29ja2N0cmxfaW4sIHBsZW4pID09IC0xKQorCWlmIChycGNhcGRfZGlzY2FyZChwYXJzLT5zb2NrY3RybCwgcGFycy0+c3NsLCBwbGVuKSA9PSAtMSkKIAl7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0yMTUwLDcgKzI1MDQsOSBAQAogfQogCiBzdGF0aWMgaW50Ci1kYWVtb25fbXNnX3N0YXRzX3JlcShzdHJ1Y3QgZGFlbW9uX3NscGFycyAqcGFycywgc3RydWN0IHNlc3Npb24gKnNlc3Npb24sIHVpbnQzMiBwbGVuLCBzdHJ1Y3QgcGNhcF9zdGF0ICpzdGF0cywgdW5zaWduZWQgaW50IHN2cmNhcHQpCitkYWVtb25fbXNnX3N0YXRzX3JlcSh1aW50OCB2ZXIsIHN0cnVjdCBkYWVtb25fc2xwYXJzICpwYXJzLAorICAgIHN0cnVjdCBzZXNzaW9uICpzZXNzaW9uLCB1aW50MzIgcGxlbiwgc3RydWN0IHBjYXBfc3RhdCAqc3RhdHMsCisgICAgdW5zaWduZWQgaW50IHN2cmNhcHQpCiB7CiAJY2hhciBlcnJidWZbUENBUF9FUlJCVUZfU0laRV07CQkvLyBidWZmZXIgZm9yIG5ldHdvcmsgZXJyb3JzCiAJY2hhciBlcnJtc2didWZbUENBUF9FUlJCVUZfU0laRV07CS8vIGJ1ZmZlciBmb3IgZXJyb3JzIHRvIHNlbmQgdG8gdGhlIGNsaWVudApAQCAtMjE1OSw3ICsyNTE1LDcgQEAKIAlzdHJ1Y3QgcnBjYXBfc3RhdHMgKm5ldHN0YXRzOwkJLy8gc3RhdGlzdGljcyBzZW50IG9uIHRoZSBuZXR3b3JrCiAKIAkvLyBDaGVja3MgdGhhdCB0aGUgaGVhZGVyIGRvZXMgbm90IGNvbnRhaW4gb3RoZXIgZGF0YTsgaWYgc28sIGRpc2NhcmQgaXQKLQlpZiAocnBjYXBkX2Rpc2NhcmQocGFycy0+c29ja2N0cmxfaW4sIHBsZW4pID09IC0xKQorCWlmIChycGNhcGRfZGlzY2FyZChwYXJzLT5zb2NrY3RybCwgcGFycy0+c3NsLCBwbGVuKSA9PSAtMSkKIAl7CiAJCS8vIE5ldHdvcmsgZXJyb3IuCiAJCXJldHVybiAtMTsKQEAgLTIxNjksNyArMjUyNSw3IEBACiAJICAgICZzZW5kYnVmaWR4LCBSUENBUF9ORVRCVUZfU0laRSwgU09DS0JVRl9DSEVDS09OTFksIGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSkgPT0gLTEpCiAJCWdvdG8gZXJyb3I7CiAKLQlycGNhcF9jcmVhdGVoZHIoKHN0cnVjdCBycGNhcF9oZWFkZXIgKikgc2VuZGJ1ZiwgcGFycy0+cHJvdG9jb2xfdmVyc2lvbiwKKwlycGNhcF9jcmVhdGVoZHIoKHN0cnVjdCBycGNhcF9oZWFkZXIgKikgc2VuZGJ1ZiwgdmVyLAogCSAgICBSUENBUF9NU0dfU1RBVFNfUkVQTFksIDAsICh1aW50MTYpIHNpemVvZihzdHJ1Y3QgcnBjYXBfc3RhdHMpKTsKIAogCW5ldHN0YXRzID0gKHN0cnVjdCBycGNhcF9zdGF0cyAqKSAmc2VuZGJ1ZltzZW5kYnVmaWR4XTsKQEAgLTIxODIsNyArMjUzOCw3IEBACiAJewogCQlpZiAocGNhcF9zdGF0cyhzZXNzaW9uLT5mcCwgc3RhdHMpID09IC0xKQogCQl7Ci0JCQlwY2FwX3NucHJpbnRmKGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSwgIiVzIiwgcGNhcF9nZXRlcnIoc2Vzc2lvbi0+ZnApKTsKKwkJCXNucHJpbnRmKGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSwgIiVzIiwgcGNhcF9nZXRlcnIoc2Vzc2lvbi0+ZnApKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIApAQCAtMjIwMyw3ICsyNTU5LDcgQEAKIAl9CiAKIAkvLyBTZW5kIHRoZSBwYWNrZXQKLQlpZiAoc29ja19zZW5kKHBhcnMtPnNvY2tjdHJsX291dCwgc2VuZGJ1Ziwgc2VuZGJ1ZmlkeCwgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSA9PSAtMSkKKwlpZiAoc29ja19zZW5kKHBhcnMtPnNvY2tjdHJsLCBwYXJzLT5zc2wsIHNlbmRidWYsIHNlbmRidWZpZHgsIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSkgPT0gLTEpCiAJewogCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICJTZW5kIHRvIGNsaWVudCBmYWlsZWQ6ICVzIiwgZXJyYnVmKTsKIAkJcmV0dXJuIC0xOwpAQCAtMjIxMiw4ICsyNTY4LDggQEAKIAlyZXR1cm4gMDsKIAogZXJyb3I6Ci0JcnBjYXBfc2VuZGVycm9yKHBhcnMtPnNvY2tjdHJsX291dCwgcGFycy0+cHJvdG9jb2xfdmVyc2lvbiwKLQkgICAgUENBUF9FUlJfR0VUU1RBVFMsIGVycm1zZ2J1ZiwgTlVMTCk7CisJcnBjYXBfc2VuZGVycm9yKHBhcnMtPnNvY2tjdHJsLCBwYXJzLT5zc2wsIHZlciwgUENBUF9FUlJfR0VUU1RBVFMsCisJICAgIGVycm1zZ2J1ZiwgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyMzQsNiArMjU5MCw5IEBACiAJY2hhciAqc2VuZGJ1ZjsJCQkJCQkvLyB0ZW1wb3JhcnkgYnVmZmVyIGluIHdoaWNoIGRhdGEgdG8gYmUgc2VudCBpcyBidWZmZXJlZAogCWludCBzZW5kYnVmaWR4OwkJCQkJCS8vIGluZGV4IHdoaWNoIGtlZXBzIHRoZSBudW1iZXIgb2YgYnl0ZXMgY3VycmVudGx5IGJ1ZmZlcmVkCiAJaW50IHN0YXR1czsKKyNpZm5kZWYgX1dJTjMyCisJc2lnc2V0X3Qgc2lndXNyMTsJCQkvLyBzaWduYWwgc2V0IHdpdGgganVzdCBTSUdVU1IxCisjZW5kaWYKIAogCXNlc3Npb24gPSAoc3RydWN0IHNlc3Npb24gKikgcHRyOwogCkBAIC0yMjY4LDcgKzI2MjcsMjEgQEAKIAkvLwogCS8vIFNvIHdlIGRvbid0IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgc2VuZGJ1ZnNpemUgd2lsbCBvdmVyZmxvdy4KIAkvLworCS8vIEhvd2V2ZXIsIHdlICpkbyogbmVlZCB0byBtYWtlIHN1cmUgaXRzIHZhbHVlIGZpdHMgaW4gYW4gaW50LAorCS8vIGJlY2F1c2Ugc29ja19zZW5kKCkgY2FuJ3Qgc2VuZCBtb3JlIHRoYW4gSU5UX01BWCBieXRlcyAoaXQgY291bGQKKwkvLyBkbyBzbyBvbiA2NC1iaXQgVU4qWGVzLCBidXQgY2FuJ3QgZG8gc28gb24gV2luZG93cywgbm90IGV2ZW4KKwkvLyA2NC1iaXQgV2luZG93cywgYXMgdGhlIHNlbmQoKSBidWZmZXIgc2l6ZSBhcmd1bWVudCBpcyBhbiBpbnQKKwkvLyBpbiBXaW5zb2NrKS4KKwkvLwogCXNlbmRidWZzaXplID0gc2l6ZW9mKHN0cnVjdCBycGNhcF9oZWFkZXIpICsgc2l6ZW9mKHN0cnVjdCBycGNhcF9wa3RoZHIpICsgcGNhcF9zbmFwc2hvdChzZXNzaW9uLT5mcCk7CisJaWYgKHNlbmRidWZzaXplID4gSU5UX01BWCkKKwl7CisJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwKKwkJICAgICJCdWZmZXIgc2l6ZSBmb3IgdGhpcyBjaGlsZCB0aHJlYWQgd291bGQgYmUgbGFyZ2VyIHRoYW4gJWQiLAorCQkgICAgSU5UX01BWCk7CisJCXNlbmRidWYgPSBOVUxMOwkvLyB3ZSBoYXZlbid0IGFsbG9jYXRlZCBhIGJ1ZmZlciwgc28gbm90aGluZyB0byBmcmVlCisJCWdvdG8gZXJyb3I7CisJfQogCXNlbmRidWYgPSAoY2hhciAqKSBtYWxsb2MgKHNlbmRidWZzaXplKTsKIAlpZiAoc2VuZGJ1ZiA9PSBOVUxMKQogCXsKQEAgLTIyNzgsMzAgKzI2NTEsMzYgQEAKIAl9CiAKICNpZm5kZWYgX1dJTjMyCi0JLy8gTW9kaWZ5IHRocmVhZCBwYXJhbXMgc28gdGhhdCBpdCBjYW4gYmUga2lsbGVkIGF0IGFueSB0aW1lCi0JcmV0dmFsID0gcHRocmVhZF9zZXRjYW5jZWxzdGF0ZShQVEhSRUFEX0NBTkNFTF9FTkFCTEUsIE5VTEwpOwotCWlmIChyZXR2YWwgIT0gMCkKLQl7Ci0JCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkgICAgcmV0dmFsLCAicHRocmVhZF9zZXRjYW5jZWxzdGF0ZSIpOwotCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsCi0JCSAgICAiQ2FuJ3Qgc2V0IGNhbmNlbCBzdGF0ZSBvbiBkYXRhIHRocmVhZDogJXMiLCBlcnJidWYpOwotCQlnb3RvIGVycm9yOwotCX0KLQlyZXR2YWwgPSBwdGhyZWFkX3NldGNhbmNlbHR5cGUoUFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTLCBOVUxMKTsKLQlpZiAocmV0dmFsICE9IDApCi0JewotCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJICAgIHJldHZhbCwgInB0aHJlYWRfc2V0Y2FuY2VsdHlwZSIpOwotCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsCi0JCSAgICAiQ2FuJ3Qgc2V0IGNhbmNlbCB0eXBlIG9uIGRhdGEgdGhyZWFkOiAlcyIsIGVycmJ1Zik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQorCS8vCisJLy8gU2V0IHRoZSBzaWduYWwgc2V0IHRvIGluY2x1ZGUganVzdCBTSUdVU1IxLCBhbmQgYmxvY2sgdGhhdAorCS8vIHNpZ25hbDsgd2Ugb25seSB3YW50IGl0IHVuYmxvY2tlZCB3aGVuIHdlJ3JlIHJlYWRpbmcKKwkvLyBwYWNrZXRzIC0gd2UgZG4ndCB3YW50IGFueSBvdGhlciBzeXN0ZW0gY2FsbHMsIHN1Y2ggYXMKKwkvLyBvbmVzIGJlaW5nIHVzZWQgdG8gc2VuZCB0byB0aGUgY2xpZW50IG9yIHRvIGxvZyBtZXNzYWdlcywKKwkvLyB0byBiZSBpbnRlcnJ1cHRlZC4KKwkvLworCXNpZ2VtcHR5c2V0KCZzaWd1c3IxKTsKKwlzaWdhZGRzZXQoJnNpZ3VzcjEsIFNJR1VTUjEpOworCXB0aHJlYWRfc2lnbWFzayhTSUdfQkxPQ0ssICZzaWd1c3IxLCBOVUxMKTsKICNlbmRpZgogCiAJLy8gUmV0cmlldmUgdGhlIHBhY2tldHMKLQl3aGlsZSAoKHJldHZhbCA9IHBjYXBfbmV4dF9leChzZXNzaW9uLT5mcCwgJnBrdF9oZWFkZXIsIChjb25zdCB1X2NoYXIgKiopICZwa3RfZGF0YSkpID49IDApCS8vIGNhc3QgdG8gYXZvaWQgYSBjb21waWxlciB3YXJuaW5nCisJZm9yICg7OykKIAl7CisjaWZuZGVmIF9XSU4zMgorCQkvLworCQkvLyBVbmJsb2NrIFNJR1VTUjEgd2hpbGUgd2UgbWlnaHQgYmUgd2FpdGluZyBmb3IgcGFja2V0cy4KKwkJLy8KKwkJcHRocmVhZF9zaWdtYXNrKFNJR19VTkJMT0NLLCAmc2lndXNyMSwgTlVMTCk7CisjZW5kaWYKKwkJcmV0dmFsID0gcGNhcF9uZXh0X2V4KHNlc3Npb24tPmZwLCAmcGt0X2hlYWRlciwgKGNvbnN0IHVfY2hhciAqKikgJnBrdF9kYXRhKTsJLy8gY2FzdCB0byBhdm9pZCBhIGNvbXBpbGVyIHdhcm5pbmcKKyNpZm5kZWYgX1dJTjMyCisJCS8vCisJCS8vIE5vdyBibG9jayBpdCBhZ2Fpbi4KKwkJLy8KKwkJcHRocmVhZF9zaWdtYXNrKFNJR19CTE9DSywgJnNpZ3VzcjEsIE5VTEwpOworI2VuZGlmCisJCWlmIChyZXR2YWwgPCAwKQorCQkJYnJlYWs7CQkvLyBlcnJvcgogCQlpZiAocmV0dmFsID09IDApCS8vIFJlYWQgdGltZW91dCBlbGFwc2VkCiAJCQljb250aW51ZTsKIApAQCAtMjMwOSw3ICsyNjg4LDcgQEAKIAogCQkvLyBCdWZmZXJpemUgdGhlIGdlbmVyYWwgaGVhZGVyCiAJCWlmIChzb2NrX2J1ZmZlcml6ZShOVUxMLCBzaXplb2Yoc3RydWN0IHJwY2FwX2hlYWRlciksIE5VTEwsCi0JCSAgICAmc2VuZGJ1ZmlkeCwgc2VuZGJ1ZnNpemUsIFNPQ0tCVUZfQ0hFQ0tPTkxZLCBlcnJidWYsCisJCSAgICAmc2VuZGJ1ZmlkeCwgKGludClzZW5kYnVmc2l6ZSwgU09DS0JVRl9DSEVDS09OTFksIGVycmJ1ZiwKIAkJICAgIFBDQVBfRVJSQlVGX1NJWkUpID09IC0xKQogCQl7CiAJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsCkBAIC0yMzI2LDcgKzI3MDUsNyBAQAogCiAJCS8vIEJ1ZmZlcml6ZSB0aGUgcGt0IGhlYWRlcgogCQlpZiAoc29ja19idWZmZXJpemUoTlVMTCwgc2l6ZW9mKHN0cnVjdCBycGNhcF9wa3RoZHIpLCBOVUxMLAotCQkgICAgJnNlbmRidWZpZHgsIHNlbmRidWZzaXplLCBTT0NLQlVGX0NIRUNLT05MWSwgZXJyYnVmLAorCQkgICAgJnNlbmRidWZpZHgsIChpbnQpc2VuZGJ1ZnNpemUsIFNPQ0tCVUZfQ0hFQ0tPTkxZLCBlcnJidWYsCiAJCSAgICBQQ0FQX0VSUkJVRl9TSVpFKSA9PSAtMSkKIAkJewogCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLApAQCAtMjMzOCwxMiArMjcxNywxNiBAQAogCQluZXRfcGt0X2hlYWRlci0+Y2FwbGVuID0gaHRvbmwocGt0X2hlYWRlci0+Y2FwbGVuKTsKIAkJbmV0X3BrdF9oZWFkZXItPmxlbiA9IGh0b25sKHBrdF9oZWFkZXItPmxlbik7CiAJCW5ldF9wa3RfaGVhZGVyLT5ucGt0ID0gaHRvbmwoKysoc2Vzc2lvbi0+VG90Q2FwdCkpOwotCQluZXRfcGt0X2hlYWRlci0+dGltZXN0YW1wX3NlYyA9IGh0b25sKHBrdF9oZWFkZXItPnRzLnR2X3NlYyk7Ci0JCW5ldF9wa3RfaGVhZGVyLT50aW1lc3RhbXBfdXNlYyA9IGh0b25sKHBrdF9oZWFkZXItPnRzLnR2X3VzZWMpOworCQkvLworCQkvLyBUaGlzIHByb3RvY29sIG5lZWRzIHRvIGJlIHVwZGF0ZWQgd2l0aCBhIG5ldyB2ZXJzaW9uCisJCS8vIGJlZm9yZSAyMDM4LTAxLTE5IDAzOjE0OjA3IFVUQy4KKwkJLy8KKwkJbmV0X3BrdF9oZWFkZXItPnRpbWVzdGFtcF9zZWMgPSBodG9ubCgodWludDMyKXBrdF9oZWFkZXItPnRzLnR2X3NlYyk7CisJCW5ldF9wa3RfaGVhZGVyLT50aW1lc3RhbXBfdXNlYyA9IGh0b25sKCh1aW50MzIpcGt0X2hlYWRlci0+dHMudHZfdXNlYyk7CiAKIAkJLy8gQnVmZmVyaXplIHRoZSBwa3QgZGF0YQogCQlpZiAoc29ja19idWZmZXJpemUoKGNoYXIgKikgcGt0X2RhdGEsIHBrdF9oZWFkZXItPmNhcGxlbiwKLQkJICAgIHNlbmRidWYsICZzZW5kYnVmaWR4LCBzZW5kYnVmc2l6ZSwgU09DS0JVRl9CVUZGRVJJWkUsCisJCSAgICBzZW5kYnVmLCAmc2VuZGJ1ZmlkeCwgKGludClzZW5kYnVmc2l6ZSwgU09DS0JVRl9CVUZGRVJJWkUsCiAJCSAgICBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpID09IC0xKQogCQl7CiAJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsCkBAIC0yMzU1LDcgKzI3MzgsNyBAQAogCQkvLyBTZW5kIHRoZSBwYWNrZXQKIAkJLy8gSWYgdGhlIGNsaWVudCBkcm9wcGVkIHRoZSBjb25uZWN0aW9uLCBkb24ndCByZXBvcnQgYW4KIAkJLy8gZXJyb3IsIGp1c3QgcXVpdC4KLQkJc3RhdHVzID0gc29ja19zZW5kKHNlc3Npb24tPnNvY2tkYXRhLCBzZW5kYnVmLCBzZW5kYnVmaWR4LCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOworCQlzdGF0dXMgPSBzb2NrX3NlbmQoc2Vzc2lvbi0+c29ja2RhdGEsIHNlc3Npb24tPmRhdGFfc3NsLCBzZW5kYnVmLCBzZW5kYnVmaWR4LCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOwogCQlpZiAoc3RhdHVzIDwgMCkKIAkJewogCQkJaWYgKHN0YXR1cyA9PSAtMSkKQEAgLTIzNzcsMjMgKzI3NjAsNDAgQEAKIAkJfQogCX0KIAotCWlmIChyZXR2YWwgPT0gLTEpCisJaWYgKHJldHZhbCA8IDAgJiYgcmV0dmFsICE9IFBDQVBfRVJST1JfQlJFQUspCiAJewotCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIkVycm9yIHJlYWRpbmcgdGhlIHBhY2tldHM6ICVzIiwgcGNhcF9nZXRlcnIoc2Vzc2lvbi0+ZnApKTsKLQkJcnBjYXBfc2VuZGVycm9yKHNlc3Npb24tPnNvY2tjdHJsX291dCwgc2Vzc2lvbi0+cHJvdG9jb2xfdmVyc2lvbiwKKwkJLy8KKwkJLy8gRmFpbGVkIHdpdGggYW4gZXJyb3Igb3RoZXIgdGhhbiAid2Ugd2VyZSB0b2xkIHRvIGJyZWFrCisJCS8vIG91dCBvZiB0aGUgbG9vcCIuCisJCS8vCisJCS8vIFRoZSBsYXR0ZXIganVzdCBtZWFucyB0aGF0IHRoZSBjbGllbnQgdG9sZCB1cyB0byBzdG9wCisJCS8vIGNhcHR1cmluZywgc28gdGhlcmUncyBubyBlcnJvciB0byByZXBvcnQuCisJCS8vCisJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIkVycm9yIHJlYWRpbmcgdGhlIHBhY2tldHM6ICVzIiwgcGNhcF9nZXRlcnIoc2Vzc2lvbi0+ZnApKTsKKwkJcnBjYXBfc2VuZGVycm9yKHNlc3Npb24tPnNvY2tjdHJsLCBzZXNzaW9uLT5jdHJsX3NzbCwgc2Vzc2lvbi0+cHJvdG9jb2xfdmVyc2lvbiwKIAkJICAgIFBDQVBfRVJSX1JFQURFWCwgZXJyYnVmLCBOVUxMKTsKLQkJZ290byBlcnJvcjsKIAl9CiAKIGVycm9yOgotIAljbG9zZXNvY2tldChzZXNzaW9uLT5zb2NrZGF0YSk7Ci0Jc2Vzc2lvbi0+c29ja2RhdGEgPSAwOwotCisJLy8KKwkvLyBUaGUgbWFpbiB0aHJlYWQgd2lsbCBjbGVhbiB1cCB0aGUgc2Vzc2lvbiBzdHJ1Y3R1cmUuCisJLy8KIAlmcmVlKHNlbmRidWYpOwogCiAJcmV0dXJuIDA7CiB9CiAKKyNpZm5kZWYgX1dJTjMyCisvLworLy8gRG8tbm90aGluZyBoYW5kbGVyIGZvciBTSUdVU1IxOyB0aGUgc29sZSBwdXJwb3NlIG9mIFNJR1VTUjEgaXMgdG8KKy8vIGludGVycnVwdCB0aGUgZGF0YSB0aHJlYWQgaWYgaXQncyBibG9ja2VkIGluIGEgc3lzdGVtIGNhbGwgd2FpdGluZworLy8gZm9yIHBhY2tldHMgdG8gYXJyaXZlLgorLy8KK3N0YXRpYyB2b2lkIG5vb3BfaGFuZGxlcihpbnQgc2lnbiBfVV8pCit7Cit9CisjZW5kaWYKKwogLyohCiAJXGJyaWVmIEl0IHNlcmlhbGl6ZXMgYSBuZXR3b3JrIGFkZHJlc3MuCiAKQEAgLTI0NTksNiArMjg1OSw3IEBACiAqLwogdm9pZCBzbGVlcF9zZWNzKGludCBzZWNzKQogeworI2lmbmRlZiBGVVpaSU5HX0JVSUxEX01PREVfVU5TQUZFX0ZPUl9QUk9EVUNUSU9OCiAjaWZkZWYgX1dJTjMyCiAJU2xlZXAoc2VjcyoxMDAwKTsKICNlbHNlCkBAIC0yNDcwLDE4ICsyODcxLDE5IEBACiAJd2hpbGUgKHNlY3NfcmVtYWluaW5nICE9IDApCiAJCXNlY3NfcmVtYWluaW5nID0gc2xlZXAoc2Vjc19yZW1haW5pbmcpOwogI2VuZGlmCisjZW5kaWYKIH0KIAogLyoKICAqIFJlYWQgdGhlIGhlYWRlciBvZiBhIG1lc3NhZ2UuCiAgKi8KIHN0YXRpYyBpbnQKLXJwY2FwZF9yZWN2X21zZ19oZWFkZXIoU09DS0VUIHNvY2ssIHN0cnVjdCBycGNhcF9oZWFkZXIgKmhlYWRlcnApCitycGNhcGRfcmVjdl9tc2dfaGVhZGVyKFNPQ0tFVCBzb2NrLCBTU0wgKnNzbCwgc3RydWN0IHJwY2FwX2hlYWRlciAqaGVhZGVycCkKIHsKIAlpbnQgbnJlYWQ7CiAJY2hhciBlcnJidWZbUENBUF9FUlJCVUZfU0laRV07CQkvLyBidWZmZXIgZm9yIG5ldHdvcmsgZXJyb3JzCiAKLQlucmVhZCA9IHNvY2tfcmVjdihzb2NrLCAoY2hhciAqKSBoZWFkZXJwLCBzaXplb2Yoc3RydWN0IHJwY2FwX2hlYWRlciksCisJbnJlYWQgPSBzb2NrX3JlY3Yoc29jaywgc3NsLCAoY2hhciAqKSBoZWFkZXJwLCBzaXplb2Yoc3RydWN0IHJwY2FwX2hlYWRlciksCiAJICAgIFNPQ0tfUkVDRUlWRUFMTF9ZRVN8U09DS19FT0ZfSVNOVF9FUlJPUiwgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKIAlpZiAobnJlYWQgPT0gLTEpCiAJewpAQCAtMjUwOCw3ICsyOTEwLDcgQEAKICAqIGVycm9yLgogICovCiBzdGF0aWMgaW50Ci1ycGNhcGRfcmVjdihTT0NLRVQgc29jaywgY2hhciAqYnVmZmVyLCBzaXplX3QgdG9yZWFkLCB1aW50MzIgKnBsZW4sIGNoYXIgKmVycm1zZ2J1ZikKK3JwY2FwZF9yZWN2KFNPQ0tFVCBzb2NrLCBTU0wgKnNzbCwgY2hhciAqYnVmZmVyLCBzaXplX3QgdG9yZWFkLCB1aW50MzIgKnBsZW4sIGNoYXIgKmVycm1zZ2J1ZikKIHsKIAlpbnQgbnJlYWQ7CiAJY2hhciBlcnJidWZbUENBUF9FUlJCVUZfU0laRV07CQkvLyBidWZmZXIgZm9yIG5ldHdvcmsgZXJyb3JzCkBAIC0yNTE2LDEwICsyOTE4LDEwIEBACiAJaWYgKHRvcmVhZCA+ICpwbGVuKQogCXsKIAkJLy8gVGVsbCB0aGUgY2xpZW50IGFuZCBjb250aW51ZS4KLQkJcGNhcF9zbnByaW50ZihlcnJtc2didWYsIFBDQVBfRVJSQlVGX1NJWkUsICJNZXNzYWdlIHBheWxvYWQgaXMgdG9vIHNob3J0Iik7CisJCXNucHJpbnRmKGVycm1zZ2J1ZiwgUENBUF9FUlJCVUZfU0laRSwgIk1lc3NhZ2UgcGF5bG9hZCBpcyB0b28gc2hvcnQiKTsKIAkJcmV0dXJuIC0yOwogCX0KLQlucmVhZCA9IHNvY2tfcmVjdihzb2NrLCBidWZmZXIsIHRvcmVhZCwKKwlucmVhZCA9IHNvY2tfcmVjdihzb2NrLCBzc2wsIGJ1ZmZlciwgdG9yZWFkLAogCSAgICBTT0NLX1JFQ0VJVkVBTExfWUVTfFNPQ0tfRU9GX0lTX0VSUk9SLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOwogCWlmIChucmVhZCA9PSAtMSkKIAl7CkBAIC0yNTM3LDEzICsyOTM5LDEzIEBACiAgKiBlcnJvci4KICAqLwogc3RhdGljIGludAotcnBjYXBkX2Rpc2NhcmQoU09DS0VUIHNvY2ssIHVpbnQzMiBsZW4pCitycGNhcGRfZGlzY2FyZChTT0NLRVQgc29jaywgU1NMICpzc2wsIHVpbnQzMiBsZW4pCiB7CiAJY2hhciBlcnJidWZbUENBUF9FUlJCVUZfU0laRSArIDFdOwkvLyBrZWVwcyB0aGUgZXJyb3Igc3RyaW5nLCBwcmlvciB0byBiZSBwcmludGVkCiAKIAlpZiAobGVuICE9IDApCiAJewotCQlpZiAoc29ja19kaXNjYXJkKHNvY2ssIGxlbiwgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSA9PSAtMSkKKwkJaWYgKHNvY2tfZGlzY2FyZChzb2NrLCBzc2wsIGxlbiwgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSA9PSAtMSkKIAkJewogCQkJLy8gTmV0d29yayBlcnJvci4KIAkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIlJlYWQgZnJvbSBjbGllbnQgZmFpbGVkOiAlcyIsIGVycmJ1Zik7CkBAIC0yNTUyLDMgKzI5NTQsMTYzIEBACiAJfQogCXJldHVybiAwOwogfQorCisvLworLy8gU2h1dCBkb3duIGFueSBwYWNrZXQtY2FwdHVyZSB0aHJlYWQgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXNzaW9uLAorLy8gY2xvc2UgdGhlIFNTTCBoYW5kbGUgZm9yIHRoZSBkYXRhIHNvY2tldCBpZiB3ZSBoYXZlIG9uZSwgY2xvc2UKKy8vIHRoZSBkYXRhIHNvY2tldCBpZiB3ZSBoYXZlIG9uZSwgYW5kIGNsb3NlIHRoZSB1bmRlcmx5aW5nIHBhY2tldAorLy8gY2FwdHVyZSBoYW5kbGUgaWYgd2UgaGF2ZSBvbmUuCisvLworLy8gV2UgZG8gbm90LCBvZiBjb3Vyc2UsIHRvdWNoIHRoZSBjb250cm9sbGluZyBzb2NrZXQgdGhhdCdzIGFsc28KKy8vIGNvcGllZCBpbnRvIHRoZSBzZXNzaW9uLCBhcyB0aGUgc2VydmljZSBsb29wIG1pZ2h0IHN0aWxsIHVzZSBpdC4KKy8vCitzdGF0aWMgdm9pZCBzZXNzaW9uX2Nsb3NlKHN0cnVjdCBzZXNzaW9uICpzZXNzaW9uKQoreworCWlmIChzZXNzaW9uLT5oYXZlX3RocmVhZCkKKwl7CisJCS8vCisJCS8vIFRlbGwgdGhlIGRhdGEgY29ubmVjdGlvbiB0aHJlYWQgbWFpbiBjYXB0dXJlIGxvb3AgdG8KKwkJLy8gYnJlYWsgb3V0IG9mIHRoYXQgbG9vcC4KKwkJLy8KKwkJLy8gVGhpcyBtYXkgYmUgc3VmZmljaWVudCB0byB3YWtlIHVwIGEgYmxvY2tlZCB0aHJlYWQsCisJCS8vIGJ1dCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHN1ZmZpY2llbnQuCisJCS8vCisJCXBjYXBfYnJlYWtsb29wKHNlc3Npb24tPmZwKTsKKworI2lmZGVmIF9XSU4zMgorCQkvLworCQkvLyBTZXQgdGhlIGV2ZW50IG9uIHdoaWNoIGEgcmVhZCB3b3VsZCBibG9jaywgc28gdGhhdCwKKwkJLy8gaWYgaXQncyBjdXJyZW50bHkgYmxvY2tlZCB3YWl0aW5nIGZvciBwYWNrZXRzIHRvCisJCS8vIGFycml2ZSwgaXQnbGwgd2FrZSB1cCwgc28gaXQgY2FuIHNlZSB0aGUgImJyZWFrCisJCS8vIG91dCBvZiB0aGUgbG9vcCIgaW5kaWNhdGlvbi4gIChwY2FwX2JyZWFrbG9vcCgpCisJCS8vIG1pZ2h0IGRvIHRoaXMsIGJ1dCBvbGRlciB2ZXJzaW9ucyBkb24ndC4gIFNldHRpbmcKKwkJLy8gaXQgdHdpY2Ugc2hvdWxkLCBhdCB3b3JzdCwgY2F1c2UgYW4gZXh0cmEgd2FrZXVwLAorCQkvLyB3aGljaCBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtLikKKwkJLy8KKwkJLy8gWFhYIC0gd2hhdCBhYm91dCBtb2R1bGVzIG90aGVyIHRoYW4gTlBGPworCQkvLworCQlTZXRFdmVudChwY2FwX2dldGV2ZW50KHNlc3Npb24tPmZwKSk7CisKKwkJLy8KKwkJLy8gV2FpdCBmb3IgdGhlIHRocmVhZCB0byBleGl0LCBzbyB3ZSBkb24ndCBjbG9zZQorCQkvLyBzb2NrZXRzIG91dCBmcm9tIHVuZGVyIGl0LgorCQkvLworCQkvLyBYWFggLSBoYXZlIGEgdGltZW91dCwgc28gd2UgZG9uJ3Qgd2FpdCBmb3JldmVyPworCQkvLworCQlXYWl0Rm9yU2luZ2xlT2JqZWN0KHNlc3Npb24tPnRocmVhZCwgSU5GSU5JVEUpOworCisJCS8vCisJCS8vIFJlbGVhc2UgdGhlIHRocmVhZCBoYW5kbGUsIGFzIHdlJ3JlIGRvbmUgd2l0aAorCQkvLyBpdC4KKwkJLy8KKwkJQ2xvc2VIYW5kbGUoc2Vzc2lvbi0+dGhyZWFkKTsKKwkJc2Vzc2lvbi0+aGF2ZV90aHJlYWQgPSAwOworCQlzZXNzaW9uLT50aHJlYWQgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyNlbHNlCisJCS8vCisJCS8vIFNlbmQgYSBTSUdVU1IxIHNpZ25hbCB0byB0aGUgdGhyZWFkLCBzbyB0aGF0LCBpZgorCQkvLyBpdCdzIGN1cnJlbnRseSBibG9ja2VkIHdhaXRpbmcgZm9yIHBhY2tldHMgdG8gYXJyaXZlLAorCQkvLyBpdCdsbCB3YWtlIHVwICh3ZSd2ZSB0dXJuZWQgb2ZmIFNBX1JFU1RBUlQgZm9yCisJCS8vIFNJR1VTUjEsIHNvIHRoYXQgdGhlIHN5c3RlbSBjYWxsIGluIHdoaWNoIGl0J3MgYmxvY2tlZAorCQkvLyBzaG91bGQgcmV0dXJuIEVJTlRSIHJhdGhlciB0aGFuIHJlc3RhcnRpbmcpLgorCQkvLworCQlwdGhyZWFkX2tpbGwoc2Vzc2lvbi0+dGhyZWFkLCBTSUdVU1IxKTsKKworCQkvLworCQkvLyBXYWl0IGZvciB0aGUgdGhyZWFkIHRvIGV4aXQsIHNvIHdlIGRvbid0IGNsb3NlCisJCS8vIHNvY2tldHMgb3V0IGZyb20gdW5kZXIgaXQuCisJCS8vCisJCS8vIFhYWCAtIGhhdmUgYSB0aW1lb3V0LCBzbyB3ZSBkb24ndCB3YWl0IGZvcmV2ZXI/CisJCS8vCisJCXB0aHJlYWRfam9pbihzZXNzaW9uLT50aHJlYWQsIE5VTEwpOworCQlzZXNzaW9uLT5oYXZlX3RocmVhZCA9IDA7CisJCW1lbXNldCgmc2Vzc2lvbi0+dGhyZWFkLCAwLCBzaXplb2Yoc2Vzc2lvbi0+dGhyZWFkKSk7CisjZW5kaWYKKwl9CisKKyNpZmRlZiBIQVZFX09QRU5TU0wKKwlpZiAoc2Vzc2lvbi0+ZGF0YV9zc2wpCisJeworCQkvLyBGaW5pc2ggdXNpbmcgdGhlIFNTTCBoYW5kbGUgZm9yIHRoZSBzb2NrZXQuCisJCS8vIFRoaXMgbXVzdCBiZSBkb25lICpiZWZvcmUqIHRoZSBzb2NrZXQgaXMgY2xvc2VkLgorCQlzc2xfZmluaXNoKHNlc3Npb24tPmRhdGFfc3NsKTsKKwkJc2Vzc2lvbi0+ZGF0YV9zc2wgPSBOVUxMOworCX0KKyNlbmRpZgorCisJaWYgKHNlc3Npb24tPnNvY2tkYXRhICE9IElOVkFMSURfU09DS0VUKQorCXsKKwkJc29ja19jbG9zZShzZXNzaW9uLT5zb2NrZGF0YSwgTlVMTCwgMCk7CisJCXNlc3Npb24tPnNvY2tkYXRhID0gSU5WQUxJRF9TT0NLRVQ7CisJfQorCisJaWYgKHNlc3Npb24tPmZwKQorCXsKKwkJcGNhcF9jbG9zZShzZXNzaW9uLT5mcCk7CisJCXNlc3Npb24tPmZwID0gTlVMTDsKKwl9Cit9CisKKy8vCisvLyBDaGVjayB3aGV0aGVyIGEgY2FwdHVyZSBzb3VyY2Ugc3RyaW5nIGlzIGEgVVJMIG9yIG5vdC4KKy8vIFRoaXMgaW5jbHVkZXMgVVJMcyB0aGF0IHJlZmVyIHRvIGEgbG9jYWwgZGV2aWNlOyBhIHNjaGVtZSwgZm9sbG93ZWQKKy8vIGJ5IDovLywgZm9sbG93ZWQgYnkgKmFub3RoZXIqIHNjaGVtZSBhbmQgOi8vLCBpcyBqdXN0IHNpbGx5LCBhbmQKKy8vIGFueWJvZHkgd2hvIHN1cHBsaWVzIHRoYXQgd2lsbCBnZXQgYW4gZXJyb3IuCisvLworc3RhdGljIGludAoraXNfdXJsKGNvbnN0IGNoYXIgKnNvdXJjZSkKK3sKKwljaGFyICpjb2xvbnA7CisKKwkvKgorCSAqIFJGQyAzOTg2IHNheXM6CisJICoKKwkgKiAgIFVSSSAgICAgICAgID0gc2NoZW1lICI6IiBoaWVyLXBhcnQgWyAiPyIgcXVlcnkgXSBbICIjIiBmcmFnbWVudCBdCisJICoKKwkgKiAgIGhpZXItcGFydCAgID0gIi8vIiBhdXRob3JpdHkgcGF0aC1hYmVtcHR5CisJICogICAgICAgICAgICAgICAvIHBhdGgtYWJzb2x1dGUKKwkgKiAgICAgICAgICAgICAgIC8gcGF0aC1yb290bGVzcworCSAqICAgICAgICAgICAgICAgLyBwYXRoLWVtcHR5CisJICoKKwkgKiAgIGF1dGhvcml0eSAgID0gWyB1c2VyaW5mbyAiQCIgXSBob3N0IFsgIjoiIHBvcnQgXQorCSAqCisJICogICB1c2VyaW5mbyAgICA9ICooIHVucmVzZXJ2ZWQgLyBwY3QtZW5jb2RlZCAvIHN1Yi1kZWxpbXMgLyAiOiIgKQorCSAqCisJICogU3RlcCAxOiBsb29rIGZvciB0aGUgIjoiIGF0IHRoZSBlbmQgb2YgdGhlIHNjaGVtZS4KKwkgKiBBIGNvbG9uIGluIHRoZSBzb3VyY2UgaXMgKk5PVCogc3VmZmljaWVudCB0byBpbmRpY2F0ZSB0aGF0CisJICogdGhpcyBpcyBhIFVSTCwgYXMgaW50ZXJmYWNlIG5hbWVzIG9uIHNvbWUgcGxhdGZvcm1zIG1pZ2h0CisJICogaW5jbHVkZSBjb2xvbnMgKGUuZy4sIEkgdGhpbmsgc29tZSBTb2xhcmlzIGludGVyZmFjZXMKKwkgKiBtaWdodCkuCisJICovCisJY29sb25wID0gc3RyY2hyKHNvdXJjZSwgJzonKTsKKwlpZiAoY29sb25wID09IE5VTEwpCisJeworCQkvKgorCQkgKiBUaGUgc291cmNlIGlzIHRoZSBkZXZpY2UgdG8gb3Blbi4gIEl0J3Mgbm90IGEgVVJMLgorCQkgKi8KKwkJcmV0dXJuICgwKTsKKwl9CisKKwkvKgorCSAqIEFsbCBzY2hlbWVzIG11c3QgaGF2ZSAiLy8iIGFmdGVyIHRoZW0sIGkuZS4gd2Ugb25seSBzdXBwb3J0CisJICogaGllci1wYXJ0ICAgPSAiLy8iIGF1dGhvcml0eSBwYXRoLWFiZW1wdHksIG5vdAorCSAqIGhpZXItcGFydCAgID0gcGF0aC1hYnNvbHV0ZQorCSAqIGhpZXItcGFydCAgID0gcGF0aC1yb290bGVzcworCSAqIGhpZXItcGFydCAgID0gcGF0aC1lbXB0eQorCSAqCisJICogV2UgbmVlZCB0aGF0IGluIG9yZGVyIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gYSBsb2NhbCBkZXZpY2UKKwkgKiBuYW1lIHRoYXQgaGFwcGVucyB0byBjb250YWluIGEgY29sb24gYW5kIGEgVVJJLgorCSAqLworCWlmIChzdHJuY21wKGNvbG9ucCArIDEsICIvLyIsIDIpICE9IDApCisJeworCQkvKgorCQkgKiBUaGUgc291cmNlIGlzIHRoZSBkZXZpY2UgdG8gb3Blbi4gIEl0J3Mgbm90IGEgVVJMLgorCQkgKi8KKwkJcmV0dXJuICgwKTsKKwl9CisKKwkvKgorCSAqIEl0J3MgYSBVUkwuCisJICovCisJcmV0dXJuICgxKTsKK30KZGlmZiAtLWdpdCBhL3JwY2FwZC9kYWVtb24uaCBiL3JwY2FwZC9kYWVtb24uaAppbmRleCBiZDI0MGI4Li5kYmJkYjYyIDEwMDY0NAotLS0gYS9ycGNhcGQvZGFlbW9uLmgKKysrIGIvcnBjYXBkL2RhZW1vbi5oCkBAIC0zMywxMiArMzMsMTkgQEAKICNpZm5kZWYgX19EQUVNT05fSF9fCiAjZGVmaW5lIF9fREFFTU9OX0hfXwogCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJzc2x1dGlscy5oIgorCiAvLwogLy8gUmV0dXJucyAxIGlmIHRoZSBjbGllbnQgY2xvc2VkIHRoZSBjb250cm9sIGNvbm5lY3Rpb24gZXhwbGljaXRseSwgMAotLy8gb3RoZXJ3aXNlOyB1c2VkIGluIGFjdGl2ZSBtb2RlIG9ubHkuCisvLyBvdGhlcndpc2U7IHRoZSByZXR1cm4gdmFsdWUgaXMgdXNlZCBvbmx5IGJ5IGNhbGxlcnMgdGhhdCBjYWxsIHVzCisvLyBmb3IgYWN0aXZlIG1vZGUuCiAvLwotaW50IGRhZW1vbl9zZXJ2aWNlbG9vcChTT0NLRVQgc29ja2N0cmxfaW4sIFNPQ0tFVCBzb2NrY3RybF9vdXQsIGludCBpc2FjdGl2ZSwKLSAgICBpbnQgbnVsbEF1dGhBbGxvd2VkKTsKK2ludCBkYWVtb25fc2VydmljZWxvb3AoU09DS0VUIHNvY2tjdHJsLCBpbnQgaXNhY3RpdmUsIGNoYXIgKnBhc3NpdmVDbGllbnRzLAorICAgIGludCBudWxsQXV0aEFsbG93ZWQsIGludCB1c2VzX3NzbCk7CiAKIHZvaWQgc2xlZXBfc2VjcyhpbnQgc2Vjcyk7CiAKZGlmZiAtLWdpdCBhL3JwY2FwZC9maWxlY29uZi5jIGIvcnBjYXBkL2ZpbGVjb25mLmMKaW5kZXggYWIxZTlkZC4uYjc5ZGRhMSAxMDA2NDQKLS0tIGEvcnBjYXBkL2ZpbGVjb25mLmMKKysrIGIvcnBjYXBkL2ZpbGVjb25mLmMKQEAgLTQyLDk5ICs0Miw0NTAgQEAKICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDxwY2FwLmg+CQkvLyBmb3IgUENBUF9FUlJCVUZfU0laRQogCi0jaW5jbHVkZSAic29ja3V0aWxzLmgiCQkvLyBmb3IgU09DS19ERUJVR19NRVNTQUdFCiAjaW5jbHVkZSAicG9ydGFiaWxpdHkuaCIKICNpbmNsdWRlICJycGNhcGQuaCIKICNpbmNsdWRlICJjb25maWdfcGFyYW1zLmgiCS8vIGNvbmZpZ3VyYXRpb24gZmlsZSBwYXJhbWV0ZXJzCiAjaW5jbHVkZSAiZmlsZWNvbmYuaCIKICNpbmNsdWRlICJycGNhcC1wcm90b2NvbC5oIgorI2luY2x1ZGUgImxvZy5oIgogCi1zdGF0aWMgaW50IHN0cnJlbShjaGFyICpzdHJpbmcsIGNoYXIgY2hyKTsKKy8vCisvLyBQYXJhbWV0ZXIgbmFtZXMuCisvLworI2RlZmluZSBQQVJBTV9BQ1RJVkVDTElFTlQJIkFjdGl2ZUNsaWVudCIKKyNkZWZpbmUgUEFSQU1fUEFTU0lWRUNMSUVOVAkiUGFzc2l2ZUNsaWVudCIKKyNkZWZpbmUgUEFSQU1fTlVMTEFVVEhQRVJNSVQJIk51bGxBdXRoUGVybWl0IgorCitzdGF0aWMgY2hhciAqc2tpcHdzKGNoYXIgKnB0cik7CisKKy8qCisgKiBMb2NhbGUtaW5kZXBlbmRlbnQgdmVyc2lvbiBjaGVja3MgZm9yIGFscGhhYmV0aWNhbCBhbmQgYWxwaGFudW1lcmljYWwKKyAqIGNoYXJhY3RlcnMgdGhhdCBhbHNvIGNhbiBoYW5kbGUgYmVpbmcgaGFuZGVkIGEgY2hhciB2YWx1ZSB0aGF0IG1pZ2h0CisgKiBiZSBuZWdhdGl2ZS4KKyAqLworI2RlZmluZSBGSUxFQ09ORl9JU0FMUEhBKGMpIFwKKwkoKChjKSA+PSAnQScgJiYgKGMpIDw9ICdaJykgfHwgKChjKSA+PSAnYScgJiYgKGMpIDw9ICd6JykpCisjZGVmaW5lIEZJTEVDT05GX0lTQUxOVU0oYykgXAorCShGSUxFQ09ORl9JU0FMUEhBKGMpIHx8ICgoYykgPj0gJzAnICYmIChjKSA8PSAnOScpKQogCiB2b2lkIGZpbGVjb25mX3JlYWQodm9pZCkKIHsKIAlGSUxFICpmcDsKLQljaGFyIG1zZ1tQQ0FQX0VSUkJVRl9TSVpFICsgMV07Ci0JaW50IGk7CisJdW5zaWduZWQgaW50IG51bV9hY3RpdmVfY2xpZW50czsKIAogCWlmICgoZnAgPSBmb3Blbihsb2FkZmlsZSwgInIiKSkgIT0gTlVMTCkKIAl7CiAJCWNoYXIgbGluZVtNQVhfTElORSArIDFdOwotCQljaGFyICpwdHI7CisJCXVuc2lnbmVkIGludCBsaW5lbm87CiAKIAkJaG9zdGxpc3RbMF0gPSAwOwotCQlpID0gMDsKKwkJbnVtX2FjdGl2ZV9jbGllbnRzID0gMDsKKwkJbGluZW5vID0gMDsKIAogCQl3aGlsZSAoZmdldHMobGluZSwgTUFYX0xJTkUsIGZwKSAhPSBOVUxMKQogCQl7Ci0JCQlpZiAobGluZVswXSA9PSAnXG4nKSBjb250aW51ZTsJLy8gQmxhbmsgbGluZQotCQkJaWYgKGxpbmVbMF0gPT0gJ1xyJykgY29udGludWU7CS8vIEJsYW5rIGxpbmUKLQkJCWlmIChsaW5lWzBdID09ICcjJykgY29udGludWU7CS8vIENvbW1lbnQKKwkJCXNpemVfdCBsaW5lbGVuOworCQkJY2hhciAqcHRyOworCQkJY2hhciAqcGFyYW07CisJCQlzaXplX3QgcmVzdWx0OworCQkJc2l6ZV90IHRva2xlbjsKIAotCQkJcHRyID0gc3Ryc3RyKGxpbmUsICJBY3RpdmVDbGllbnQiKTsKLQkJCWlmIChwdHIpCisJCQlsaW5lbm8rKzsKKworCQkJbGluZWxlbiA9IHN0cmxlbihsaW5lKTsKKwkJCWlmIChsaW5lW2xpbmVsZW4gLSAxXSAhPSAnXG4nKQogCQkJewotCQkJCWNoYXIgKmFkZHJlc3MsICpwb3J0OwotCQkJCWNoYXIgKmxhc3RzOworCQkJCWludCBjOwogCi0JCQkJcHRyID0gc3RyY2hyKHB0ciwgJz0nKSArIDE7Ci0JCQkJYWRkcmVzcyA9IHBjYXBfc3RydG9rX3IocHRyLCBSUENBUF9IT1NUTElTVF9TRVAsICZsYXN0cyk7CisJCQkJLy8KKwkJCQkvLyBFaXRoZXIgdGhlIGxpbmUgZG9lc24ndCBmaXQgaW4KKwkJCQkvLyB0aGUgYnVmZmVyLCBvciB3ZSBnb3QgYW4gRU9GCisJCQkJLy8gYmVmb3JlIHRoZSBFT0wuICBBc3N1bWUgaXQncyB0aGUKKwkJCQkvLyBmb3JtZXIuCisJCQkJLy8KKwkJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsCisJCQkJICAgICIlcywgbGluZSAldSBpcyBsb25nZXIgdGhhbiAldSBjaGFyYWN0ZXJzIiwKKwkJCQkgICAgbG9hZGZpbGUsIGxpbmVubywgTUFYX0xJTkUpOwogCi0JCQkJaWYgKChhZGRyZXNzICE9IE5VTEwpICYmIChpIDwgTUFYX0FDVElWRV9MSVNUKSkKKwkJCQkvLworCQkJCS8vIEVhdCBjaGFyYWN0ZXJzIHVudGlsIHdlIGdldCBhbiBOTC4KKwkJCQkvLworCQkJCXdoaWxlICgoYyA9IGdldGMoZnApKSAhPSAnXG4nKQogCQkJCXsKLQkJCQkJcG9ydCA9IHBjYXBfc3RydG9rX3IoTlVMTCwgUlBDQVBfSE9TVExJU1RfU0VQLCAmbGFzdHMpOwotCQkJCQlzdHJsY3B5KGFjdGl2ZWxpc3RbaV0uYWRkcmVzcywgYWRkcmVzcywgTUFYX0xJTkUpOwotCi0JCQkJCWlmIChzdHJjbXAocG9ydCwgIkRFRkFVTFQiKSA9PSAwKSAvLyB0aGUgdXNlciBjaG9vc2UgYSBjdXN0b20gcG9ydAotCQkJCQkJc3RybGNweShhY3RpdmVsaXN0W2ldLnBvcnQsIFJQQ0FQX0RFRkFVTFRfTkVUUE9SVF9BQ1RJVkUsIE1BWF9MSU5FKTsKLQkJCQkJZWxzZQotCQkJCQkJc3RybGNweShhY3RpdmVsaXN0W2ldLnBvcnQsIHBvcnQsIE1BWF9MSU5FKTsKLQotCQkJCQlhY3RpdmVsaXN0W2ldLmFkZHJlc3NbTUFYX0xJTkVdID0gMDsKLQkJCQkJYWN0aXZlbGlzdFtpXS5wb3J0W01BWF9MSU5FXSA9IDA7CisJCQkJCWlmIChjID09IEVPRikKKwkJCQkJCWdvdG8gZG9uZTsKIAkJCQl9CisKKwkJCQkvLworCQkJCS8vIFRyeSB0aGUgbmV4dCBsaW5lLgorCQkJCS8vCisJCQkJY29udGludWU7CisJCQl9CisJCQlwdHIgPSBsaW5lOworCisJCQkvLworCQkJLy8gU2tpcCBsZWFkaW5nIHdoaXRlIHNwYWNlLCBpZiBhbnkuCisJCQkvLworCQkJcHRyID0gc2tpcHdzKHB0cik7CisJCQlpZiAocHRyID09IE5VTEwpCisJCQl7CisJCQkJLy8gQmxhbmsgbGluZS4KKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLy8KKwkJCS8vIElzIHRoZSBuZXh0IGNoYXJhY3RlciBhICIjIj8gIElmIHNvLCB0aGlzCisJCQkvLyBsaW5lIGlzIGEgY29tbWVudDsgc2tpcCB0byB0aGUgbmV4dCBsaW5lLgorCQkJLy8KKwkJCWlmICgqcHRyID09ICcjJykKKwkJCQljb250aW51ZTsKKworCQkJLy8KKwkJCS8vIElzIHRoZSBuZXh0IGNoYXJhY3RlciBhbHBoYWJldGljPyAgSWYgbm90LAorCQkJLy8gdGhpcyBpc24ndCBhIHZhbGlkIHBhcmFtZXRlciBuYW1lLgorCQkJLy8KKwkJCWlmIChGSUxFQ09ORl9JU0FMUEhBKCpwdHIpKQorCQkJeworCQkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwKKwkJCQkgICAgIiVzLCBsaW5lICV1IGRvZXNuJ3QgaGF2ZSBhIHZhbGlkIHBhcmFtZXRlciBuYW1lIiwKKwkJCQkgICAgbG9hZGZpbGUsIGxpbmVubyk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8vCisJCQkvLyBHcmFiIHRoZSBmaXJzdCB0b2tlbiwgd2hpY2ggaXMgbWFkZSBvZgorCQkJLy8gYWxwaGFudW1lcmljcywgdW5kZXJzY29yZXMsIGFuZCBoeXBoZW5zLgorCQkJLy8gVGhhdCdzIHRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIgYmVpbmcgc2V0LgorCQkJLy8KKwkJCXBhcmFtID0gcHRyOworCQkJd2hpbGUgKEZJTEVDT05GX0lTQUxOVU0oKnB0cikgfHwgKnB0ciA9PSAnLScgfHwgKnB0ciA9PSAnXycpCisJCQkJcHRyKys7CisKKwkJCS8vCisJCQkvLyBTa2lwIG92ZXIgd2hpdGUgc3BhY2UsIGlmIGFueS4KKwkJCS8vCisJCQlwdHIgPSBza2lwd3MocHRyKTsKKwkJCWlmIChwdHIgPT0gTlVMTCB8fCAqcHRyICE9ICc9JykKKwkJCXsKKwkJCQkvLworCQkJCS8vIFdlIGhpdCB0aGUgZW5kIG9mIHRoZSBsaW5lIGJlZm9yZQorCQkJCS8vIGZpbmRpbmcgYSBub24td2hpdGUgc3BhY2UgY2hhcmFjdGVyLAorCQkJCS8vIG9yIHdlIGZvdW5kIG9uZSBidXQgaXQncyBub3QgYW4gIj0iLgorCQkJCS8vIFRoYXQgbWVhbnMgdGhlcmUncyBubyAiPSIsIHNvIHRoaXMKKwkJCQkvLyBsaW5lIGlzIGludmFsaWQuICBDb21wbGFpbiBhbmQgc2tpcAorCQkJCS8vIHRoaXMgbGluZS4KKwkJCQkvLworCQkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwKKwkJCQkgICAgIiVzLCBsaW5lICV1IGhhcyBhIHBhcmFtZXRlciBidXQgbm8gPSIsCisJCQkJICAgIGxvYWRmaWxlLCBsaW5lbm8pOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvLworCQkJLy8gV2UgZm91bmQgdGhlICc9Jzsgc2V0IGl0IHRvICdcMCcsIGFuZCBza2lwCisJCQkvLyBwYXN0IGl0LgorCQkJLy8KKwkJCSpwdHIrKyA9ICdcMCc7CisKKwkJCS8vCisJCQkvLyBTa2lwIHBhc3QgYW55IHdoaXRlIHNwYWNlIGFmdGVyIHRoZSAiPSIuCisJCQkvLworCQkJcHRyID0gc2tpcHdzKHB0cik7CisJCQlpZiAocHRyID09IE5VTEwpCisJCQl7CisJCQkJLy8KKwkJCQkvLyBUaGUgdmFsdWUgaXMgZW1wdHkuCisJCQkJLy8KKwkJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsCisJCQkJICAgICIlcywgbGluZSAldSBoYXMgYSBwYXJhbWV0ZXIgYnV0IG5vIHZhbHVlIiwKKwkJCQkgICAgbG9hZGZpbGUsIGxpbmVubyk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8vCisJCQkvLyBPSywgd2hhdCBwYXJhbWV0ZXIgaXMgdGhpcz8KKwkJCS8vCisJCQlpZiAoc3RyY21wKHBhcmFtLCBQQVJBTV9BQ1RJVkVDTElFTlQpID09IDApIHsKKwkJCQkvLworCQkJCS8vIEFkZCB0aGlzIHRvIHRoZSBsaXN0IG9mIGFjdGl2ZSBjbGllbnRzLgorCQkJCS8vCisJCQkJY2hhciAqYWRkcmVzcywgKnBvcnQ7CisKKwkJCQkvLworCQkJCS8vIFdlIGNhbid0IGhhdmUgbW9yZSB0aGFuIE1BWF9BQ1RJVkVfTElTVAorCQkJCS8vIGFjdGl2ZSBjbGllbnRzLgorCQkJCS8vCisJCQkJaWYgKG51bV9hY3RpdmVfY2xpZW50cyA+PSBNQVhfQUNUSVZFX0xJU1QpCisJCQkJeworCQkJCQkvLworCQkJCQkvLyBUb28gbWFueSBlbnRyaWVzIGZvciB0aGUgYWN0aXZlCisJCQkJCS8vIGNsaWVudCBsaXN0LiAgQ29tcGxhaW4gYW5kCisJCQkJCS8vIGlnbm9yZSBpdC4KKwkJCQkJLy8KKwkJCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLAorCQkJCQkgICAgIiVzLCBsaW5lICV1IGhhcyBhbiAlcyBwYXJhbWV0ZXIsIGJ1dCB3ZSBhbHJlYWR5IGhhdmUgJXUgYWN0aXZlIGNsaWVudHMiLAorCQkJCQkgICAgbG9hZGZpbGUsIGxpbmVubywgUEFSQU1fQUNUSVZFQ0xJRU5ULAorCQkJCQkgICAgTUFYX0FDVElWRV9MSVNUKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJLy8KKwkJCQkvLyBHZXQgdGhlIGFkZHJlc3MuCisJCQkJLy8gSXQncyB0ZXJtaW5hdGVkIGJ5IGEgaG9zdCBsaXN0IHNlcGFyYXRvcgorCQkJCS8vICpvciogYSAjOyB0aGVyZSAqc2hvdWxkbid0KiBiZSBhICMsIGFzCisJCQkJLy8gdGhhdCBzdGFydHMgYSBjb21tZW50LCBhbmQgdGhhdCB3b3VsZAorCQkJCS8vIG1lYW4gdGhhdCB3ZSBoYXZlIG5vIHBvcnQuCisJCQkJLy8KKwkJCQlhZGRyZXNzID0gcHRyOworCQkJCXRva2xlbiA9IHN0cmNzcG4ocHRyLCBSUENBUF9IT1NUTElTVF9TRVAgIiMiKTsKKwkJCQlwdHIgKz0gdG9rbGVuOwkvLyBza2lwIHRvIHRoZSB0ZXJtaW5hdG9yCisJCQkJaWYgKHRva2xlbiA9PSAwKQorCQkJCXsKKwkJCQkJaWYgKCpwdHIgPT0gJyAnIHx8ICpwdHIgPT0gJ1x0JyB8fAorCQkJCQkgICAgKnB0ciA9PSAnXHInIHx8ICpwdHIgPT0gJ1xuJyB8fAorCQkJCQkgICAgKnB0ciA9PSAnIycgfHwgKnB0ciA9PSAnXDAnKQorCQkJCQl7CisJCQkJCQkvLworCQkJCQkJLy8gVGhlIGZpcnN0IGNoYXJhY3RlciBpdCBzYXcKKwkJCQkJCS8vIHdhcyBhIHdoaXRlc3BhY2UgY2hhcmFjdGVyCisJCQkJCQkvLyBvciBhIGNvbW1lbnQgY2hhcmFjdGVyLAorCQkJCQkJLy8gb3Igd2UgcmFuIG91dCBvZiBjaGFyYWN0ZXJzLgorCQkJCQkJLy8gVGhpcyBtZWFucyB0aGF0IHRoZXJlJ3MKKwkJCQkJCS8vIG5vIHZhbHVlLgorCQkJCQkJLy8KKwkJCQkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwKKwkJCQkJCSAgICAiJXMsIGxpbmUgJXUgaGFzIGEgcGFyYW1ldGVyIGJ1dCBubyB2YWx1ZSIsCisJCQkJCQkgICAgbG9hZGZpbGUsIGxpbmVubyk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkvLworCQkJCQkJLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBmaXJzdAorCQkJCQkJLy8gY2hhcmFjdGVyIGl0IHNhdyB3YXMgYQorCQkJCQkJLy8gc2VwYXJhdG9yLiAgVGhpcyBtZWFucyB0aGF0CisJCQkJCQkvLyB0aGVyZSdzIG5vIGFkZHJlc3MgaW4gdGhlCisJCQkJCQkvLyB2YWx1ZSwganVzdCBhIHBvcnQuCisJCQkJCQkvLworCQkJCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLAorCQkJCQkJICAgICIlcywgbGluZSAldSBoYXMgYW4gJXMgcGFyYW1ldGVyIHdpdGggYSB2YWx1ZSBjb250YWluaW5nIG5vIGFkZHJlc3MiLAorCQkJCQkJICAgIGxvYWRmaWxlLCBsaW5lbm8sIFBBUkFNX0FDVElWRUNMSUVOVCk7CisJCQkJCX0KKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJLy8KKwkJCQkvLyBOdWxsLXRlcm1pbmF0ZSB0aGUgYWRkcmVzcywgYW5kIHNraXAgcGFzdAorCQkJCS8vIGl0LgorCQkJCS8vCisJCQkJKnB0cisrID0gJ1wwJzsKKworCQkJCS8vCisJCQkJLy8gU2tpcCBhbnkgd2hpdGUgc3BhY2UgZm9sbG93aW5nIHRoZQorCQkJCS8vIHNlcGFyYXRpbmcgY2hhcmFjdGVyLgorCQkJCS8vCisJCQkJcHRyID0gc2tpcHdzKHB0cik7CisJCQkJaWYgKHB0ciA9PSBOVUxMKQorCQkJCXsKKwkJCQkJLy8KKwkJCQkJLy8gVGhlIHZhbHVlIGlzIGVtcHR5LCBzbyB0aGVyZSdzCisJCQkJCS8vIG5vIHBvcnQgaW4gdGhlIHZhbHVlLgorCQkJCQkvLworCQkJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsCisJCQkJCSAgICAiJXMsIGxpbmUgJXUgaGFzIGFuICVzIHBhcmFtZXRlciB3aXRoIGEgdmFsdWUgY29udGFpbmluZyBubyBwb3J0IiwKKwkJCQkJICAgIGxvYWRmaWxlLCBsaW5lbm8sIFBBUkFNX0FDVElWRUNMSUVOVCk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCS8vCisJCQkJLy8gR2V0IHRoZSBwb3J0LgorCQkJCS8vIFdlIGxvb2sgZm9yIGEgd2hpdGUgc3BhY2UgY2hhcmFjdGVyCisJCQkJLy8gb3IgYSAjIGFzIGEgdGVybWluYXRvcjsgdGhlICMgaW50cm9kdWNlcworCQkJCS8vIGEgY29tbWVudCB0aGF0IHJ1bnMgdG8gdGhlIGVuZCBvZiB0aGUKKwkJCQkvLyBsaW5lLgorCQkJCS8vCisJCQkJcG9ydCA9IHB0cjsKKwkJCQl0b2tsZW4gPSBzdHJjc3BuKHB0ciwgIiBcdCNcclxuIik7CisJCQkJcHRyICs9IHRva2xlbjsKKwkJCQlpZiAodG9rbGVuID09IDApCisJCQkJeworCQkJCQkvLworCQkJCQkvLyBUaGUgdmFsdWUgaXMgZW1wdHksIHNvIHRoZXJlJ3MKKwkJCQkJLy8gbm8gcG9ydCBpbiB0aGUgdmFsdWUuCisJCQkJCS8vCisJCQkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwKKwkJCQkJICAgICIlcywgbGluZSAldSBoYXMgYW4gJXMgcGFyYW1ldGVyIHdpdGggYSB2YWx1ZSBjb250YWluaW5nIG5vIHBvcnQiLAorCQkJCQkgICAgbG9hZGZpbGUsIGxpbmVubywgUEFSQU1fQUNUSVZFQ0xJRU5UKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJLy8KKwkJCQkvLyBOdWxsLXRlcm1pbmF0ZSB0aGUgcG9ydCwgYW5kIHNraXAgcGFzdAorCQkJCS8vIGl0LgorCQkJCS8vCisJCQkJKnB0cisrID0gJ1wwJzsKKwkJCQlyZXN1bHQgPSBwY2FwX3N0cmxjcHkoYWN0aXZlbGlzdFtudW1fYWN0aXZlX2NsaWVudHNdLmFkZHJlc3MsIGFkZHJlc3MsIHNpemVvZihhY3RpdmVsaXN0W251bV9hY3RpdmVfY2xpZW50c10uYWRkcmVzcykpOworCQkJCWlmIChyZXN1bHQgPj0gc2l6ZW9mKGFjdGl2ZWxpc3RbbnVtX2FjdGl2ZV9jbGllbnRzXS5hZGRyZXNzKSkKKwkJCQl7CisJCQkJCS8vCisJCQkJCS8vIEl0IGRpZG4ndCBmaXQuCisJCQkJCS8vCisJCQkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwKKwkJCQkJICAgICIlcywgbGluZSAldSBoYXMgYW4gJXMgcGFyYW1ldGVyIHdpdGggYW4gYWRkcmVzcyB3aXRoIG1vcmUgdGhhbiAldSBjaGFyYWN0ZXJzIiwKKwkJCQkJICAgIGxvYWRmaWxlLCBsaW5lbm8sIFBBUkFNX0FDVElWRUNMSUVOVCwKKwkJCQkJICAgICh1bnNpZ25lZCBpbnQpKHNpemVvZihhY3RpdmVsaXN0W251bV9hY3RpdmVfY2xpZW50c10uYWRkcmVzcykgLSAxKSk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlpZiAoc3RyY21wKHBvcnQsICJERUZBVUxUIikgPT0gMCkgLy8gdGhlIHVzZXIgY2hvb3NlIGEgY3VzdG9tIHBvcnQKKwkJCQkJcmVzdWx0ID0gcGNhcF9zdHJsY3B5KGFjdGl2ZWxpc3RbbnVtX2FjdGl2ZV9jbGllbnRzXS5wb3J0LCBSUENBUF9ERUZBVUxUX05FVFBPUlRfQUNUSVZFLCBzaXplb2YoYWN0aXZlbGlzdFtudW1fYWN0aXZlX2NsaWVudHNdLnBvcnQpKTsKIAkJCQllbHNlCi0JCQkJCVNPQ0tfREVCVUdfTUVTU0FHRSgiT25seSBNQVhfQUNUSVZFX0xJU1QgYWN0aXZlIGNvbm5lY3Rpb25zIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLiIpOworCQkJCQlyZXN1bHQgPSBwY2FwX3N0cmxjcHkoYWN0aXZlbGlzdFtudW1fYWN0aXZlX2NsaWVudHNdLnBvcnQsIHBvcnQsIHNpemVvZihhY3RpdmVsaXN0W251bV9hY3RpdmVfY2xpZW50c10ucG9ydCkpOworCQkJCWlmIChyZXN1bHQgPj0gc2l6ZW9mKGFjdGl2ZWxpc3RbbnVtX2FjdGl2ZV9jbGllbnRzXS5hZGRyZXNzKSkKKwkJCQl7CisJCQkJCS8vCisJCQkJCS8vIEl0IGRpZG4ndCBmaXQuCisJCQkJCS8vCisJCQkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwKKwkJCQkJICAgICIlcywgbGluZSAldSBoYXMgYW4gJXMgcGFyYW1ldGVyIHdpdGggYW4gcG9ydCB3aXRoIG1vcmUgdGhhbiAldSBjaGFyYWN0ZXJzIiwKKwkJCQkJICAgIGxvYWRmaWxlLCBsaW5lbm8sIFBBUkFNX0FDVElWRUNMSUVOVCwKKwkJCQkJICAgICh1bnNpZ25lZCBpbnQpKHNpemVvZihhY3RpdmVsaXN0W251bV9hY3RpdmVfY2xpZW50c10ucG9ydCkgLSAxKSk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KIAotCQkJCWkrKzsKLQkJCQljb250aW51ZTsKKwkJCQludW1fYWN0aXZlX2NsaWVudHMrKzsKIAkJCX0KLQotCQkJcHRyID0gc3Ryc3RyKGxpbmUsICJQYXNzaXZlQ2xpZW50Iik7Ci0JCQlpZiAocHRyKQorCQkJZWxzZSBpZiAoc3RyY21wKHBhcmFtLCBQQVJBTV9QQVNTSVZFQ0xJRU5UKSA9PSAwKQogCQkJewotCQkJCXB0ciA9IHN0cmNocihwdHIsICc9JykgKyAxOwotCQkJCXN0cmxjYXQoaG9zdGxpc3QsIHB0ciwgTUFYX0hPU1RfTElTVCk7Ci0JCQkJc3RybGNhdChob3N0bGlzdCwgIiwiLCBNQVhfSE9TVF9MSVNUKTsKLQkJCQljb250aW51ZTsKKwkJCQljaGFyICplb3M7CisJCQkJY2hhciAqaG9zdDsKKworCQkJCS8vCisJCQkJLy8gR2V0IHRoZSBob3N0LgorCQkJCS8vIFdlIGxvb2sgZm9yIGEgd2hpdGUgc3BhY2UgY2hhcmFjdGVyCisJCQkJLy8gb3IgYSAjIGFzIGEgdGVybWluYXRvcjsgdGhlICMgaW50cm9kdWNlcworCQkJCS8vIGEgY29tbWVudCB0aGF0IHJ1bnMgdG8gdGhlIGVuZCBvZiB0aGUKKwkJCQkvLyBsaW5lLgorCQkJCS8vCisJCQkJaG9zdCA9IHB0cjsKKwkJCQl0b2tsZW4gPSBzdHJjc3BuKHB0ciwgIiBcdCNcclxuIik7CisJCQkJaWYgKHRva2xlbiA9PSAwKQorCQkJCXsKKwkJCQkJLy8KKwkJCQkJLy8gVGhlIGZpcnN0IGNoYXJhY3RlciBpdCBzYXcKKwkJCQkJLy8gd2FzIGEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIKKwkJCQkJLy8gb3IgYSBjb21tZW50IGNoYXJhY3Rlci4KKwkJCQkJLy8gVGhpcyBtZWFucyB0aGF0IHRoZXJlJ3MKKwkJCQkJLy8gbm8gdmFsdWUuCisJCQkJCS8vCisJCQkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwKKwkJCQkJICAgICIlcywgbGluZSAldSBoYXMgYSBwYXJhbWV0ZXIgYnV0IG5vIHZhbHVlIiwKKwkJCQkJICAgIGxvYWRmaWxlLCBsaW5lbm8pOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJcHRyICs9IHRva2xlbjsKKwkJCQkqcHRyKysgPSAnXDAnOworCisJCQkJLy8KKwkJCQkvLyBBcHBlbmQgdGhpcyB0byB0aGUgaG9zdCBsaXN0LgorCQkJCS8vIFNhdmUgdGhlIGN1cnJlbiBlbmQtb2Ytc3RyaW5nIGZvciB0aGUKKwkJCQkvLyBob3N0IGxpc3QsIGluIGNhc2UgdGhlIG5ldyBob3N0IGRvZXNuJ3QKKwkJCQkvLyBmaXQsIHNvIHRoYXQgd2UgY2FuIGRpc2NhcmQgdGhlIHBhcnRpYWxseS0KKwkJCQkvLyBjb3BpZWQgaG9zdCBuYW1lLgorCQkJCS8vCisJCQkJZW9zID0gaG9zdGxpc3QgKyBzdHJsZW4oaG9zdGxpc3QpOworCQkJCWlmIChlb3MgIT0gaG9zdGxpc3QpCisJCQkJeworCQkJCQkvLworCQkJCQkvLyBUaGUgbGlzdCBpcyBub3QgZW1wdHksIHNvIHByZXBlbmQKKwkJCQkJLy8gYSBjb21tYSBiZWZvcmUgYWRkaW5nIHRoaXMgaG9zdC4KKwkJCQkJLy8KKwkJCQkJcmVzdWx0ID0gcGNhcF9zdHJsY2F0KGhvc3RsaXN0LCAiLCIsIHNpemVvZihob3N0bGlzdCkpOworCQkJCQlpZiAocmVzdWx0ID49IHNpemVvZihob3N0bGlzdCkpCisJCQkJCXsKKwkJCQkJCS8vCisJCQkJCQkvLyBJdCBkaWRuJ3QgZml0LiAgRGlzY2FyZAorCQkJCQkJLy8gdGhlIGNvbW1hICh3aGljaCB3YXNuJ3QKKwkJCQkJCS8vIGFkZGVkLCBidXQuLi4pLCBjb21wbGFpbiwKKwkJCQkJCS8vIGFuZCBpZ25vcmUgdGhpcyBsaW5lLgorCQkJCQkJLy8KKwkJCQkJCSplb3MgPSAnXDAnOworCQkJCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLAorCQkJCQkJICAgICIlcywgbGluZSAldSBoYXMgYSAlcyBwYXJhbWV0ZXIgd2l0aCBhIGhvc3QgbmFtZSB0aGF0IGRvZXNuJ3QgZml0IiwKKwkJCQkJCSAgICBsb2FkZmlsZSwgbGluZW5vLCBQQVJBTV9QQVNTSVZFQ0xJRU5UKTsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJfQorCQkJCXJlc3VsdCA9IHBjYXBfc3RybGNhdChob3N0bGlzdCwgaG9zdCwgc2l6ZW9mKGhvc3RsaXN0KSk7CisJCQkJaWYgKHJlc3VsdCA+PSBzaXplb2YoaG9zdGxpc3QpKQorCQkJCXsKKwkJCQkJLy8KKwkJCQkJLy8gSXQgZGlkbid0IGZpdC4gIERpc2NhcmQgdGhlIGNvbW1hLAorCQkJCQkvLyBjb21wbGFpbiwgYW5kIGlnbm9yZSB0aGlzIGxpbmUuCisJCQkJCS8vCisJCQkJCSplb3MgPSAnXDAnOworCQkJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsCisJCQkJCSAgICAiJXMsIGxpbmUgJXUgaGFzIGEgJXMgcGFyYW1ldGVyIHdpdGggYSBob3N0IG5hbWUgdGhhdCBkb2Vzbid0IGZpdCIsCisJCQkJCSAgICBsb2FkZmlsZSwgbGluZW5vLCBQQVJBTV9QQVNTSVZFQ0xJRU5UKTsKKwkJCQkJY29udGludWU7CisJCQkJfQogCQkJfQotCi0JCQlwdHIgPSBzdHJzdHIobGluZSwgIk51bGxBdXRoUGVybWl0Iik7Ci0JCQlpZiAocHRyKQorCQkJZWxzZSBpZiAoc3RyY21wKHBhcmFtLCBQQVJBTV9OVUxMQVVUSFBFUk1JVCkgPT0gMCkKIAkJCXsKLQkJCQlwdHIgPSBzdHJzdHIocHRyLCAiWUVTIik7Ci0JCQkJaWYgKHB0cikKKwkJCQljaGFyICpzZXR0aW5nOworCisJCQkJLy8KKwkJCQkvLyBHZXQgdGhlIHNldHRpbmcuCisJCQkJLy8gV2UgbG9vayBmb3IgYSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXIKKwkJCQkvLyBvciBhICMgYXMgYSB0ZXJtaW5hdG9yOyB0aGUgIyBpbnRyb2R1Y2VzCisJCQkJLy8gYSBjb21tZW50IHRoYXQgcnVucyB0byB0aGUgZW5kIG9mIHRoZQorCQkJCS8vIGxpbmUuCisJCQkJLy8KKwkJCQlzZXR0aW5nID0gcHRyOworCQkJCXRva2xlbiA9IHN0cmNzcG4ocHRyLCAiIFx0I1xyXG4iKTsKKwkJCQlwdHIgKz0gdG9rbGVuOworCQkJCWlmICh0b2tsZW4gPT0gMCkKKwkJCQl7CisJCQkJCS8vCisJCQkJCS8vIFRoZSBmaXJzdCBjaGFyYWN0ZXIgaXQgc2F3CisJCQkJCS8vIHdhcyBhIHdoaXRlc3BhY2UgY2hhcmFjdGVyCisJCQkJCS8vIG9yIGEgY29tbWVudCBjaGFyYWN0ZXIuCisJCQkJCS8vIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSdzCisJCQkJCS8vIG5vIHZhbHVlLgorCQkJCQkvLworCQkJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsCisJCQkJCSAgICAiJXMsIGxpbmUgJXUgaGFzIGEgcGFyYW1ldGVyIGJ1dCBubyB2YWx1ZSIsCisJCQkJCSAgICBsb2FkZmlsZSwgbGluZW5vKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCSpwdHIrKyA9ICdcMCc7CisKKwkJCQkvLworCQkJCS8vIFhYWCAtIHNob3VsZCB3ZSBjb21wbGFpbiBpZiBpdCdzCisJCQkJLy8gbmVpdGhlciAieWVzIiBub3IgIm5vIj8KKwkJCQkvLworCQkJCWlmIChzdHJjbXAoc2V0dGluZywgIllFUyIpID09IDApCiAJCQkJCW51bGxBdXRoQWxsb3dlZCA9IDE7CiAJCQkJZWxzZQogCQkJCQludWxsQXV0aEFsbG93ZWQgPSAwOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwKKwkJCQkgICAgIiVzLCBsaW5lICV1IGhhcyBhbiB1bmtub3duIHBhcmFtZXRlciAlcyIsCisJCQkJICAgIGxvYWRmaWxlLCBsaW5lbm8sIHBhcmFtKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJfQogCitkb25lOgogCQkvLyBjbGVhciB0aGUgcmVtYWluaW5nIGZpZWxkcyBvZiB0aGUgYWN0aXZlIGxpc3QKLQkJd2hpbGUgKGkgPCBNQVhfQUNUSVZFX0xJU1QpCisJCWZvciAoaW50IGkgPSBudW1fYWN0aXZlX2NsaWVudHM7IGkgPCBNQVhfQUNUSVZFX0xJU1Q7IGkrKykKIAkJewogCQkJYWN0aXZlbGlzdFtpXS5hZGRyZXNzWzBdID0gMDsKIAkJCWFjdGl2ZWxpc3RbaV0ucG9ydFswXSA9IDA7Ci0JCQlpKys7CisJCQludW1fYWN0aXZlX2NsaWVudHMrKzsKIAkJfQogCi0JCS8vIFJlbW92ZSBhbGwgJ1xuJyBhbmQgJ1xyJyBmcm9tIHRoZSBzdHJpbmdzCi0JCXN0cnJlbShob3N0bGlzdCwgJ1xyJyk7Ci0JCXN0cnJlbShob3N0bGlzdCwgJ1xuJyk7Ci0KLQkJcGNhcF9zbnByaW50Zihtc2csIFBDQVBfRVJSQlVGX1NJWkUsICJOZXcgcGFzc2l2ZSBob3N0IGxpc3Q6ICVzXG5cbiIsIGhvc3RsaXN0KTsKLQkJU09DS19ERUJVR19NRVNTQUdFKG1zZyk7CisJCXJwY2FwZF9sb2coTE9HUFJJT19ERUJVRywgIk5ldyBwYXNzaXZlIGhvc3QgbGlzdDogJXMiLCBob3N0bGlzdCk7CiAJCWZjbG9zZShmcCk7CiAJfQogfQpAQCAtMTU2LDEzICs1MDcsMTIgQEAKIAkJZnByaW50ZihmcCwgIiMgSG9zdHMgd2hpY2ggYXJlIGFsbG93ZWQgdG8gY29ubmVjdCB0byB0aGlzIHNlcnZlciAocGFzc2l2ZSBtb2RlKVxuIik7CiAJCWZwcmludGYoZnAsICIjIEZvcm1hdDogUGFzc2l2ZUNsaWVudCA9IDxuYW1lIG9yIGFkZHJlc3M+XG5cbiIpOwogCi0JCXN0cm5jcHkodGVtcGhvc3RsaXN0LCBob3N0bGlzdCwgTUFYX0hPU1RfTElTVCk7Ci0JCXRlbXBob3N0bGlzdFtNQVhfSE9TVF9MSVNUXSA9IDA7CisJCXBjYXBfc3RybGNweSh0ZW1waG9zdGxpc3QsIGhvc3RsaXN0LCBzaXplb2YgKHRlbXBob3N0bGlzdCkpOwogCiAJCXRva2VuID0gcGNhcF9zdHJ0b2tfcih0ZW1waG9zdGxpc3QsIFJQQ0FQX0hPU1RMSVNUX1NFUCwgJmxhc3RzKTsKIAkJd2hpbGUodG9rZW4gIT0gTlVMTCkKIAkJewotCQkJZnByaW50ZihmcCwgIlBhc3NpdmVDbGllbnQgPSAlc1xuIiwgdG9rZW4pOworCQkJZnByaW50ZihmcCwgIiVzID0gJXNcbiIsIFBBUkFNX1BBU1NJVkVDTElFTlQsIHRva2VuKTsKIAkJCXRva2VuID0gcGNhcF9zdHJ0b2tfcihOVUxMLCBSUENBUF9IT1NUTElTVF9TRVAsICZsYXN0cyk7CiAJCX0KIApAQCAtMTc1LDE4ICs1MjUsMTcgQEAKIAogCQl3aGlsZSAoKGkgPCBNQVhfQUNUSVZFX0xJU1QpICYmIChhY3RpdmVsaXN0W2ldLmFkZHJlc3NbMF0gIT0gMCkpCiAJCXsKLQkJCWZwcmludGYoZnAsICJBY3RpdmVDbGllbnQgPSAlcywgJXNcbiIsIGFjdGl2ZWxpc3RbaV0uYWRkcmVzcywgYWN0aXZlbGlzdFtpXS5wb3J0KTsKKwkJCWZwcmludGYoZnAsICIlcyA9ICVzLCAlc1xuIiwgUEFSQU1fQUNUSVZFQ0xJRU5ULAorCQkJICAgIGFjdGl2ZWxpc3RbaV0uYWRkcmVzcywgYWN0aXZlbGlzdFtpXS5wb3J0KTsKIAkJCWkrKzsKIAkJfQogCiAJCS8vIFNhdmUgaWYgd2Ugd2FudCB0byBwZXJtaXQgTlVMTCBhdXRoZW50aWNhdGlvbgogCQlmcHJpbnRmKGZwLCAiXG5cbiIpOwotCQlmcHJpbnRmKGZwLCAiIyBQZXJtaXQgTlVMTCBhdXRoZW50aWNhdGlvbjogWUVTIG9yIE5PVFxuXG4iKTsKKwkJZnByaW50ZihmcCwgIiMgUGVybWl0IE5VTEwgYXV0aGVudGljYXRpb246IFlFUyBvciBOT1xuXG4iKTsKIAotCQlpZiAobnVsbEF1dGhBbGxvd2VkKQotCQkJZnByaW50ZihmcCwgIk51bGxBdXRoUGVybWl0ID0gWUVTXG4iKTsKLQkJZWxzZQotCQkJZnByaW50ZihmcCwgIk51bGxBdXRoUGVybWl0ID0gTk9cbiIpOworCQlmcHJpbnRmKGZwLCAiJXMgPSAlc1xuIiwgUEFSQU1fTlVMTEFVVEhQRVJNSVQsCisJCSAgICBudWxsQXV0aEFsbG93ZWQgPyAiWUVTIiA6ICJOTyIpOwogCiAJCWZjbG9zZShmcCk7CiAJCXJldHVybiAwOwpAQCAtMTk4LDE5ICs1NDcsMTkgQEAKIAogfQogCi1zdGF0aWMgaW50IHN0cnJlbShjaGFyICpzdHJpbmcsIGNoYXIgY2hyKQorLy8KKy8vIFNraXAgb3ZlciB3aGl0ZSBzcGFjZS4KKy8vIElmIHdlIGhpdCBhIENSIG9yIExGLCByZXR1cm4gTlVMTCwgb3RoZXJ3aXNlIHJldHVybiBhIHBvaW50ZXIgdG8KKy8vIHRoZSBmaXJzdCBub24td2hpdGUgc3BhY2UgY2hhcmFjdGVyLiAgUmVwbGFjZSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzCisvLyBvdGhlciB0aGFuIENSIG9yIExGIHdpdGggJ1wwJywgc28gdGhhdCwgaWYgd2UncmUgc2tpcHBpbmcgd2hpdGUgc3BhY2UKKy8vIGFmdGVyIGEgdG9rZW4sIHRoZSB0b2tlbiBpcyBudWxsLXRlcm1pbmF0ZWQuCisvLworc3RhdGljIGNoYXIgKnNraXB3cyhjaGFyICpwdHIpCiB7Ci0JY2hhciAqcG9zOwotCWludCBudW0gPSAwOwotCWludCBsZW4sIGk7Ci0KLQl3aGlsZSAoKHBvcyA9IHN0cmNocihzdHJpbmcsIGNocikpICE9IE5VTEwpCi0JewotCQludW0rKzsKLQkJbGVuID0gc3RybGVuKHBvcyk7Ci0JCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLQkJCXBvc1tpXSA9IHBvc1tpKzFdOworCXdoaWxlICgqcHRyID09ICcgJyB8fCAqcHRyID09ICdcdCcgfHwgKnB0ciA9PSAnXHInIHx8ICpwdHIgPT0gJ1xuJykgeworCQlpZiAoKnB0ciA9PSAnXHInIHx8ICpwdHIgPT0gJ1xuJykKKwkJCXJldHVybiBOVUxMOworCQkqcHRyKysgPSAnXDAnOwogCX0KLQotCXJldHVybiBudW07CisJcmV0dXJuIHB0cjsKIH0KZGlmZiAtLWdpdCBhL3JwY2FwZC9sb2ctc3RkZXJyLmMgYi9ycGNhcGQvbG9nLXN0ZGVyci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWY2ZjJlLi4wMDAwMDAwCi0tLSBhL3JwY2FwZC9sb2ctc3RkZXJyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlICJsb2cuaCIKLQotdm9pZAotcnBjYXBkX2xvZ19pbml0KHZvaWQpCi17Ci19Ci0KLXZvaWQKLXJwY2FwZF9sb2cobG9nX3ByaW9yaXR5IHByaW9yaXR5LCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCi17Ci0JY29uc3QgY2hhciAqdGFnOwotCXZhX2xpc3QgYXA7Ci0KLQlzd2l0Y2ggKHByaW9yaXR5KSB7Ci0KLQljYXNlIExPR1BSSU9fSU5GTzoKLQkJdGFnID0gIiI7Ci0JCWJyZWFrOwotCi0JY2FzZSBMT0dQUklPX1dBUk5JTkc6Ci0JCXRhZyA9ICJ3YXJuaW5nOiAiOwotCQlicmVhazsKLQotCWNhc2UgTE9HUFJJT19FUlJPUjoKLQkJdGFnID0gImVycm9yOiAiOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWFib3J0KCk7Ci0JCS8qIE5PVFJFQUNIRUQgKi8KLQl9Ci0KLQlmcHJpbnRmKHN0ZGVyciwgInJwY2FwZDogJXMiLCB0YWcpOwotCXZhX3N0YXJ0KGFwLCBtZXNzYWdlKTsKLQl2ZnByaW50ZihzdGRlcnIsIG1lc3NhZ2UsIGFwKTsKLQl2YV9lbmQoYXApOwotCXB1dGMoJ1xuJywgc3RkZXJyKTsKLX0KZGlmZiAtLWdpdCBhL3JwY2FwZC9sb2cuYyBiL3JwY2FwZC9sb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjZjMTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvcnBjYXBkL2xvZy5jCkBAIC0wLDAgKzEsMjYwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4CisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0OiAoMSkgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9ucworICogcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBpbiBpdHMgZW50aXJldHksICgyKQorICogZGlzdHJpYnV0aW9ucyBpbmNsdWRpbmcgYmluYXJ5IGNvZGUgaW5jbHVkZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQKKyAqIHRoaXMgcGFyYWdyYXBoIGluIGl0cyBlbnRpcmV0eSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvciBvdGhlciBtYXRlcmlhbHMKKyAqIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiwgYW5kICgzKSBhbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcKKyAqIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiBgYFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwKKyAqIExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkgYW5kIGl0cyBjb250cmlidXRvcnMuJycgTmVpdGhlciB0aGUgbmFtZSBvZgorICogdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UKKyAqIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogd3JpdHRlbiBwZXJtaXNzaW9uLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2lmZGVmIF9XSU4zMgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3lzbG9nLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInBvcnRhYmlsaXR5LmgiCisKKyNpbmNsdWRlICJsb2cuaCIKKworc3RhdGljIGludCBsb2dfdG9fc3lzdGVtbG9nOworc3RhdGljIGludCBsb2dfZGVidWdfbWVzc2FnZXM7CisKK3N0YXRpYyB2b2lkIHJwY2FwZF92bG9nX3N0ZGVycihsb2dfcHJpb3JpdHksCisgICAgUENBUF9GT1JNQVRfU1RSSU5HKGNvbnN0IGNoYXIgKiksIHZhX2xpc3QpIFBDQVBfUFJJTlRGTElLRSgyLCAwKTsKKworc3RhdGljIHZvaWQgcnBjYXBkX3Zsb2dfc3RkZXJyKGxvZ19wcmlvcml0eSBwcmlvcml0eSwgY29uc3QgY2hhciAqbWVzc2FnZSwgdmFfbGlzdCBhcCkKK3sKKwljb25zdCBjaGFyICp0YWc7CisKKwkvKgorCSAqIFNxdWVsY2ggd2FybmluZ3MgZnJvbSBjb21waWxlcnMgdGhhdCAqZG9uJ3QqIGFzc3VtZSB0aGF0CisJICogcHJpb3JpdHkgYWx3YXlzIGhhcyBhIHZhbGlkIGVudW0gdmFsdWUgYW5kIHRoZXJlZm9yZSBkb24ndAorCSAqIGFzc3VtZSB0aGF0IHdlJ2xsIGFsd2F5cyBnbyB0aHJvdWdoIG9uZSBvZiB0aGUgY2FzZSBhcm1zLgorCSAqCisJICogSWYgd2UgaGF2ZSBhIGRlZmF1bHQgY2FzZSwgY29tcGlsZXJzIHRoYXQgKmRvKiBhc3N1bWUgdGhhdAorCSAqIHdpbGwgdGhlbiBjb21wbGFpbiBhYm91dCB0aGUgZGVmYXVsdCBjYXNlIGNvZGUgYmVpbmcKKwkgKiB1bnJlYWNoYWJsZS4KKwkgKgorCSAqIERhbW5lZCBpZiB5b3UgZG8sIGRhbW5lZCBpZiB5b3UgZG9uJ3QuCisJICovCisJdGFnID0gIiI7CisKKwlzd2l0Y2ggKHByaW9yaXR5KSB7CisKKwljYXNlIExPR1BSSU9fREVCVUc6CisJCXRhZyA9ICJERUJVRzogIjsKKwkJYnJlYWs7CisKKwljYXNlIExPR1BSSU9fSU5GTzoKKwkJdGFnID0gIiI7CisJCWJyZWFrOworCisJY2FzZSBMT0dQUklPX1dBUk5JTkc6CisJCXRhZyA9ICJ3YXJuaW5nOiAiOworCQlicmVhazsKKworCWNhc2UgTE9HUFJJT19FUlJPUjoKKwkJdGFnID0gImVycm9yOiAiOworCQlicmVhazsKKwl9CisKKwlmcHJpbnRmKHN0ZGVyciwgInJwY2FwZDogJXMiLCB0YWcpOworCXZmcHJpbnRmKHN0ZGVyciwgbWVzc2FnZSwgYXApOworCXB1dGMoJ1xuJywgc3RkZXJyKTsKK30KKworc3RhdGljIHZvaWQgcnBjYXBkX3Zsb2dfc3lzdGVtbG9nKGxvZ19wcmlvcml0eSwKKyAgICBQQ0FQX0ZPUk1BVF9TVFJJTkcoY29uc3QgY2hhciAqKSwgdmFfbGlzdCkgUENBUF9QUklOVEZMSUtFKDIsIDApOworCisjaWZkZWYgX1dJTjMyCisjZGVmaW5lIE1FU1NBR0VfU1VCS0VZIFwKKyAgICAiU1lTVEVNXFxDdXJyZW50Q29udHJvbFNldFxcU2VydmljZXNcXEV2ZW50TG9nXFxBcHBsaWNhdGlvblxccnBjYXBkIgorCitzdGF0aWMgdm9pZCBycGNhcGRfdmxvZ19zeXN0ZW1sb2cobG9nX3ByaW9yaXR5IHByaW9yaXR5LCBjb25zdCBjaGFyICptZXNzYWdlLAorICAgIHZhX2xpc3QgYXApCit7CisjaWYgMAorCXN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAwOworCUhLRVkgaGV5X2hhbmRsZTsKKwlzdGF0aWMgSEFORExFIGxvZ19oYW5kbGU7CisJV09SRCBldmVudGxvZ190eXBlOworCURXT1JEIGV2ZW50X2lkOworCWNoYXIgbXNnYnVmWzEwMjRdOworCWNoYXIgKnN0cmluZ3NbMV07CisKKwlpZiAoIWluaXRpYWxpemVkKSB7CisJCS8qCisJCSAqIFJlZ2lzdGVyIG91ciBtZXNzYWdlIHN0dWZmIGluIHRoZSBSZWdpc3RyeS4KKwkJICoKKwkJICogRmlyc3QsIGNyZWF0ZSB0aGUgcmVnaXN0cnkga2V5IGZvciB1cy4gIElmIHRoZSBrZXkKKwkJICogYWxyZWFkeSBleGlzdHMsIHRoaXMgc3VjY2VlZHMgYW5kIHJldHVybnMgYSBoYW5kbGUKKwkJICogZm9yIGl0LgorCQkgKi8KKwkJaWYgKFJlZ0NyZWF0ZUtleShIS0VZX0xPQ0FMX01BQ0hJTkUsIE1FU1NBR0VfU1VCS0VZLAorCQkgICAgJmtleV9oYW5kbGUpICE9IEVSUk9SX1NVQ0NFU1MpIHsKKwkJCS8qCisJCQkgKiBGYWlsZWQgLSBnaXZlIHVwIGFuZCBqdXN0IGxvZyB0aGlzIG1lc3NhZ2UsCisJCQkgKiBhbmQgYWxsIHN1YnNlcXVlbnQgbWVzc2FnZXMsIHRvIHRoZQorCQkJICogc3RhbmRhcmQgZXJyb3IuCisJCQkgKi8KKwkJCWxvZ190b19zeXN0ZW1sb2cgPSAwOworCQkJaW5pdGlhbGl6ZWQgPSAxOworCQkJcnBjYXBkX3Zsb2dfc3RkZXJyKHByaW9yaXR5LCBtZXNzYWdlLCBhcCk7CisJCQlyZXR1cm47CisJCX0KKwkJbG9nX2hhbmRsZSA9IFJlZ2lzdGVyRXZlbnRTb3VyY2UoTlVMTCwgInJwY2FwZCIpOworCQlpbml0aWFsaXplZCA9IDE7CisJfQorCisJc3dpdGNoIChwcmlvcml0eSkgeworCisJY2FzZSBMT0dQUklPX0RFQlVHOgorCQkvLworCQkvLyBYWFggLSB3aGF0ICpzaG91bGQqIHdlIGRvIGFib3V0IGRlYnVnIG1lc3NhZ2VzPworCQkvLworCQlldmVudGxvZ190eXBlID0gRVZFTlRMT0dfSU5GT1JNQVRJT05fVFlQRTsKKwkJZXZlbnRfaWQgPSBSUENBUERfSU5GT19JRDsKKwkJYnJlYWs7CisKKwljYXNlIExPR1BSSU9fSU5GTzoKKwkJZXZlbnRsb2dfdHlwZSA9IEVWRU5UTE9HX0lORk9STUFUSU9OX1RZUEU7CisJCWV2ZW50X2lkID0gUlBDQVBEX0lORk9fSUQ7CisJCWJyZWFrOworCisJY2FzZSBMT0dQUklPX1dBUk5JTkc6CisJCWV2ZW50bG9nX3R5cGUgPSBFVkVOVExPR19XQVJOSU5HX1RZUEU7CisJCWV2ZW50X2lkID0gUlBDQVBEX1dBUk5JTkdfSUQ7CisJCWJyZWFrOworCisJY2FzZSBMT0dQUklPX0VSUk9SOgorCQlldmVudGxvZ190eXBlID0gRVZFTlRMT0dfRVJST1JfVFlQRTsKKwkJZXZlbnRfaWQgPSBSUENBUERfRVJST1JfSUQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogRG9uJ3QgZG8gdGhpcy4gKi8KKwkJcmV0dXJuOworCX0KKworCXZzcHJpbnRmKG1zZ2J1ZiwgbWVzc2FnZSwgYXApOworCisJc3RyaW5nc1swXSA9IG1zZ2J1ZjsKKwkvKgorCSAqIElmIHRoaXMgZmFpbHMsIGhvdyBhcmUgd2UgZ29pbmcgdG8gcmVwb3J0IGl0PworCSAqLworCSh2b2lkKSBSZXBvcnRFdmVudChsb2dfaGFuZGxlLCBldmVudGxvZ190eXBlLCAwLCBldmVudF9pZCwgTlVMTCwgMSwgMCwKKwkgICAgc3RyaW5ncywgTlVMTCk7CisjZWxzZQorCXJwY2FwZF92bG9nX3N0ZGVycihwcmlvcml0eSwgbWVzc2FnZSwgYXApOworI2VuZGlmCit9CisjZWxzZQorc3RhdGljIHZvaWQgcnBjYXBkX3Zsb2dfc3lzdGVtbG9nKGxvZ19wcmlvcml0eSBwcmlvcml0eSwgY29uc3QgY2hhciAqbWVzc2FnZSwKKyAgICB2YV9saXN0IGFwKQoreworCXN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAwOworCWludCBzeXNsb2dfcHJpb3JpdHk7CisKKwlpZiAoIWluaXRpYWxpemVkKSB7CisJCS8vCisJCS8vIE9wZW4gdGhlIGxvZy4KKwkJLy8KKwkJb3BlbmxvZygicnBjYXBkIiwgTE9HX1BJRCwgTE9HX0RBRU1PTik7CisJCWluaXRpYWxpemVkID0gMTsKKwl9CisKKwlzd2l0Y2ggKHByaW9yaXR5KSB7CisKKwljYXNlIExPR1BSSU9fREVCVUc6CisJCXN5c2xvZ19wcmlvcml0eSA9IExPR19ERUJVRzsKKwkJYnJlYWs7CisKKwljYXNlIExPR1BSSU9fSU5GTzoKKwkJc3lzbG9nX3ByaW9yaXR5ID0gTE9HX0lORk87CisJCWJyZWFrOworCisJY2FzZSBMT0dQUklPX1dBUk5JTkc6CisJCXN5c2xvZ19wcmlvcml0eSA9IExPR19XQVJOSU5HOworCQlicmVhazsKKworCWNhc2UgTE9HUFJJT19FUlJPUjoKKwkJc3lzbG9nX3ByaW9yaXR5ID0gTE9HX0VSUjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBEb24ndCBkbyB0aGlzLiAqLworCQlyZXR1cm47CisJfQorCisjaWZkZWYgSEFWRV9WU1lTTE9HCisJdnN5c2xvZyhzeXNsb2dfcHJpb3JpdHksIG1lc3NhZ2UsIGFwKTsKKyNlbHNlCisJLyoKKwkgKiBUaGFua3MsIElCTSwgZm9yIG5vdCBwcm92aWRpbmcgdnN5c2xvZygpIGluIEFJWCEKKwkgKgorCSAqIFRoZXkgYWxzbyB3YXJuIHRoYXQgdGhlIHN5c2xvZyBmdW5jdGlvbnMgc2hvdWxkbid0CisJICogYmUgdXNlZCBpbiBtdWx0aXRocmVhZGVkIHByb2dyYW1zLCBidXQgdGhlIG9ubHkgdGhpbmcKKwkgKiBvYnZpb3VzIHRoYXQgc2VlbXMgdG8gbWFrZSB0aGUgc3lzbG9nX3IgZnVuY3Rpb25zCisJICogYmV0dGVyIGlzIHRoYXQgdGhleSBoYXZlIGFuIGFkZGl0aW9uYWwgYXJndW1lbnQKKwkgKiB0aGF0IHBvaW50cyB0byB0aGUgaW5mb3JtYXRpb24gdGhhdCdzIHN0YXRpYyB0bworCSAqIHRoZSBzeXNsb2cgY29kZSBpbiBub24tdGhyZWFkLXNhZmUgdmVyc2lvbnMuICBNb3N0CisJICogb2YgdGhhdCBkYXRhIGlzIHNldCBieSBvcGVubG9nKCk7IHNpbmNlIHdlIGFscmVhZHkKKwkgKiBkbyBhbiBvcGVubG9nIGJlZm9yZSBkb2luZyBsb2dnaW5nLCBhbmQgZG9uJ3QKKwkgKiBjaGFuZ2UgdGhhdCBkYXRhIGFmdGVyd2FyZHMsIEkgc3VzcGVjdCB0aGF0LCBpbgorCSAqIHByYWN0aWNlLCB0aGUgcmVndWxhciBzeXNsb2cgcm91dGluZXMgYXJlIE9LIGZvcgorCSAqIHVzIChlc3BlY2lhbGx5IGdpdmVuIHRoYXQgd2UnZCBlbmQgdXAgaGF2aW5nIG9uZQorCSAqIHN0YXRpYyBzdHJ1Y3Qgc3lzbG9nX2RhdGEgYW55d2F5LCB3aGljaCBtZWFucyB3ZSdkCisJICoganVzdCBiZSBsaWtlIHRoZSBub24tdGhyZWFkLXNhZmUgdmVyc2lvbikuCisJICovCisJY2hhciBsb2didWZbMTAyNCsxXTsKKworCXZzbnByaW50Zihsb2didWYsIHNpemVvZiBsb2didWYsIG1lc3NhZ2UsIGFwKTsKKwlzeXNsb2coc3lzbG9nX3ByaW9yaXR5LCAiJXMiLCBsb2didWYpOworI2VuZGlmCit9CisjZW5kaWYKKwordm9pZCBycGNhcGRfbG9nX3NldChpbnQgbG9nX3RvX3N5c3RlbWxvZ19hcmcsIGludCBsb2dfZGVidWdfbWVzc2FnZXNfYXJnKQoreworCWxvZ19kZWJ1Z19tZXNzYWdlcyA9IGxvZ19kZWJ1Z19tZXNzYWdlc19hcmc7CisJbG9nX3RvX3N5c3RlbWxvZyA9IGxvZ190b19zeXN0ZW1sb2dfYXJnOworfQorCit2b2lkIHJwY2FwZF9sb2cobG9nX3ByaW9yaXR5IHByaW9yaXR5LCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCWlmIChwcmlvcml0eSAhPSBMT0dQUklPX0RFQlVHIHx8IGxvZ19kZWJ1Z19tZXNzYWdlcykgeworCQl2YV9zdGFydChhcCwgbWVzc2FnZSk7CisJCWlmIChsb2dfdG9fc3lzdGVtbG9nKQorCQl7CisJCQlycGNhcGRfdmxvZ19zeXN0ZW1sb2cocHJpb3JpdHksIG1lc3NhZ2UsIGFwKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXJwY2FwZF92bG9nX3N0ZGVycihwcmlvcml0eSwgbWVzc2FnZSwgYXApOworCQl9CisJCXZhX2VuZChhcCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvcnBjYXBkL2xvZy5oIGIvcnBjYXBkL2xvZy5oCmluZGV4IGIzODA2ZTEuLjI4YTZjZWUgMTAwNjQ0Ci0tLSBhL3JwY2FwZC9sb2cuaAorKysgYi9ycGNhcGQvbG9nLmgKQEAgLTEsOCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OAorICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdDogKDEpIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbnMKKyAqIHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5LCAoMikKKyAqIGRpc3RyaWJ1dGlvbnMgaW5jbHVkaW5nIGJpbmFyeSBjb2RlIGluY2x1ZGUgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kCisgKiB0aGlzIHBhcmFncmFwaCBpbiBpdHMgZW50aXJldHkgaW4gdGhlIGRvY3VtZW50YXRpb24gb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24sIGFuZCAoMykgYWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nCisgKiBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogYGBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsCisgKiBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IGFuZCBpdHMgY29udHJpYnV0b3JzLicnIE5laXRoZXIgdGhlIG5hbWUgb2YKKyAqIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlCisgKiBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKICNpbmNsdWRlICJwY2FwL2Z1bmNhdHRycy5oIgogCi1leHRlcm4gdm9pZCBycGNhcGRfbG9nX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBycGNhcGRfbG9nX3NldChpbnQsIGludCk7CiAKIHR5cGVkZWYgZW51bSB7CisJTE9HUFJJT19ERUJVRywKIAlMT0dQUklPX0lORk8sCiAJTE9HUFJJT19XQVJOSU5HLAogCUxPR1BSSU9fRVJST1IKZGlmZiAtLWdpdCBhL3JwY2FwZC9vcmcudGNwZHVtcC5ycGNhcGQucGxpc3QgYi9ycGNhcGQvb3JnLnRjcGR1bXAucnBjYXBkLnBsaXN0CmluZGV4IGRiMzIyM2EuLmIwZTI0MzkgMTAwNjQ0Ci0tLSBhL3JwY2FwZC9vcmcudGNwZHVtcC5ycGNhcGQucGxpc3QKKysrIGIvcnBjYXBkL29yZy50Y3BkdW1wLnJwY2FwZC5wbGlzdApAQCAtMSw1ICsxLDUgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KKzwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHBzOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KIDxwbGlzdCB2ZXJzaW9uPSIxLjAiPgogPGRpY3Q+CiAJPGtleT5EaXNhYmxlZDwva2V5PgpkaWZmIC0tZ2l0IGEvcnBjYXBkL3JwY2FwZC1jb25maWcubWFuZmlsZS5pbiBiL3JwY2FwZC9ycGNhcGQtY29uZmlnLm1hbmZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY3YjQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL3JwY2FwZC9ycGNhcGQtY29uZmlnLm1hbmZpbGUuaW4KQEAgLTAsMCArMSw3OCBAQAorLlwiIENvcHlyaWdodCAoYykgMTk5NCwgMTk5NiwgMTk5NworLlwiCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorLlwiCisuXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisuXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQ6ICgxKSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb25zCisuXCIgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBpbiBpdHMgZW50aXJldHksICgyKQorLlwiIGRpc3RyaWJ1dGlvbnMgaW5jbHVkaW5nIGJpbmFyeSBjb2RlIGluY2x1ZGUgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kCisuXCIgdGhpcyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5IGluIHRoZSBkb2N1bWVudGF0aW9uIG9yIG90aGVyIG1hdGVyaWFscworLlwiIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiwgYW5kICgzKSBhbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcKKy5cIiBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorLlwiIGBgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLAorLlwiIExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkgYW5kIGl0cyBjb250cmlidXRvcnMuJycgTmVpdGhlciB0aGUgbmFtZSBvZgorLlwiIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlCisuXCIgb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisuXCIgd3JpdHRlbiBwZXJtaXNzaW9uLgorLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKy5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorLlwiIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisuXCIKKy5USCBSUENBUEQtQ09ORklHIEBNQU5fRklMRV9GT1JNQVRTQCAiNiBKYW51YXJ5IDIwMTkiCisuU0ggTkFNRQorcnBjYXBkLWNvbmZpZyBcLSBycGNhcGQgY29uZmlndXJhdGlvbiBmaWxlIGZvcm1hdAorLlNIIERFU0NSSVBUSU9OCitBbgorLkIgcnBjYXBkCitjb25maWd1cmF0aW9uIGZpbGUgYWxsb3dzIHBhcmFtZXRlcnMgdG8gYmUgc2V0IGZvcgorLkJSIHJwY2FwZCAoQE1BTl9BRE1JTl9DT01NQU5EU0ApLgorLkxQCitBICMgaW50cm9kdWNlcyBhIGNvbW1lbnQgdGhhdCBydW5zIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuICBCbGFuayBsaW5lcywKK2FuZCBsaW5lcyB3aXRoIG9ubHkgYSBjb21tZW50LCBhcmUgaWdub3JlZC4gIExlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlCitzcGFjZSBvbiBhIGxpbmUgYXJlIGFsc28gaWdub3JlZC4KKy5MUAorTGluZXMgdGhhdCBzZXQgYSBwYXJhbWV0ZXIgYXJlIG9mIHRoZSBmb3JtCisuSVAKK1xmSXBhcmFtZXRlclxmQj1cZkl2YWx1ZVxmUgorLkxQCitXaGl0ZXNwYWNlIHByZWNlZGluZyBvciBmb2xsb3dpbmcgdGhlID0gaXMgaWdub3JlZC4KKy5MUAorVGhlCisuSVIgcGFyYW1ldGVyIHMKK2FyZToKKy5UUAorLkIgQWN0aXZlQ2xpZW50CisuSSB2YWx1ZQoraXMgYSBob3N0IG5hbWUgb3IgSVAgYWRkcmVzcywgZm9sbG93ZWQgYnkgYSBjb21tYSwKK3NlbWljb2xvbiwgb3Igc3BhY2UsIGZvbGxvd2VkIGJ5IGEgcG9ydCBuYW1lIGFuZCBhZGRyZXNzIG9yCisuQlIgREVGQVVMVCAuCisuQiBERUZBVUxUCitzcGVjaWZpZXMgdGhlIGRlZmF1bHQgYWN0aXZlIG1vZGUgcG9ydCBmb3IgcnBjYXBkLCBwb3J0IDIwMDMuCitFYWNoCisuQiBBY3RpdmVDbGllbnQKK2xpbmUgYWRkcyB0aGUgaG9zdCBhbmQgcG9ydCB0byB0aGUgbGlzdCBvZiBjbGllbnRzIHRvIHdoaWNoIHRoZSBzZXJ2ZXIKK3Nob3VsZCBjb25uZWN0IGluIGFjdGl2ZSBtb2RlLgorLlRQCisuQiBQYXNzaXZlQ2xpZW50CisuSSB2YWx1ZQoraXMgYSBob3N0IG5hbWUgb3IgSVAgYWRkcmVzcywgZm9sbG93ZWQgYnkgYSBjb21tYSwKK3NlbWljb2xvbiwgb3Igc3BhY2UsIGZvbGxvd2VkIGJ5IGEgcG9ydCBuYW1lIGFuZCBhZGRyZXNzIG9yCisuQlIgREVGQVVMVCAuCisuQiBERUZBVUxUCitzcGVjaWZpZXMgdGhlIGRlZmF1bHQgcGFzc2l2ZSBtb2RlIHBvcnQgZm9yIHJwY2FwZCwgcG9ydCAyMDAyLgorRWFjaAorLkIgUGFzc2l2ZUNsaWVudAorbGluZSBhZGRzIHRoZSBob3N0IGFuZCBwb3J0IHRvIHRoZSBsaXN0IG9mIGNsaWVudHMgYWRkcmVzc2VzIGFuZCBwb3J0cwordGhhdCBhcmUgYWxsb3dlZCB0byBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIgaW4gcGFzc2l2ZSBtb2RlLgorLlRQCisuQiBOdWxsQXV0aFBlcm1pdAorLkkgdmFsdWUKK2lzIGVpdGhlcgorLkIgWUVTCitvcgorLkJSIE5PIC4KKy5CIFlFUworbWVhbnMgdGhhdCBudWxsIGF1dGhlbnRpY2F0aW9uIGlzIHBlcm1pdHRlZDsKKy5CIE5vCittZWFucyB0aGF0IGl0IGlzIG5vdCBwZXJtaXR0ZWQuCisuU0ggU0VFIEFMU08KKy5CUiBycGNhcGQgKEBNQU5fQURNSU5fQ09NTUFORFNAKQpkaWZmIC0tZ2l0IGEvcnBjYXBkL3JwY2FwZC5jIGIvcnBjYXBkL3JwY2FwZC5jCmluZGV4IGU4YjNiMWQuLmI5MWE0MDEgMTAwNjQ0Ci0tLSBhL3JwY2FwZC9ycGNhcGQuYworKysgYi9ycGNhcGQvcnBjYXBkLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxlcnJuby5oPgkJLy8gZm9yIHRoZSBlcnJubyB2YXJpYWJsZQogI2luY2x1ZGUgPHN0cmluZy5oPgkJLy8gZm9yIHN0cnRvaywgZXRjCiAjaW5jbHVkZSA8c3RkbGliLmg+CQkvLyBmb3IgbWFsbG9jKCksIGZyZWUoKSwgLi4uCisjaW5jbHVkZSA8c3RkaW8uaD4JCS8vIGZvciBmcHJpbnRmKCksIHN0ZGVyciwgRklMRSBldGMKICNpbmNsdWRlIDxwY2FwLmg+CQkvLyBmb3IgUENBUF9FUlJCVUZfU0laRQogI2luY2x1ZGUgPHNpZ25hbC5oPgkJLy8gZm9yIHNpZ25hbCgpCiAKQEAgLTUzLDYgKzU0LDEwIEBACiAjaW5jbHVkZSAiZGFlbW9uLmgiCQkvLyB0aGUgdHJ1ZSBtYWluKCkgbWV0aG9kIG9mIHRoaXMgZGFlbW9uCiAjaW5jbHVkZSAibG9nLmgiCiAKKyNpZmRlZiBIQVZFX09QRU5TU0wKKyNpbmNsdWRlICJzc2x1dGlscy5oIgorI2VuZGlmCisKICNpZmRlZiBfV0lOMzIKICAgI2luY2x1ZGUgPHByb2Nlc3MuaD4JCS8vIGZvciB0aHJlYWQgc3R1ZmYKICAgI2luY2x1ZGUgIndpbjMyLXN2Yy5oIgkvLyBmb3IgV2luMzIgc2VydmljZSBzdHVmZgpAQCAtODYsNiArOTEsNyBAQAogI2VuZGlmCiBzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IHNodXRkb3duX3NlcnZlcjsJLy8hPCAnMScgaWYgdGhlIHNlcnZlciBpcyB0byBzaHV0IGRvd24KIHN0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgcmVyZWFkX2NvbmZpZzsJLy8hPCAnMScgaWYgdGhlIHNlcnZlciBpcyB0byByZS1yZWFkIGl0cyBjb25maWd1cmF0aW9uCitzdGF0aWMgaW50IHVzZXNfc3NsOyAvLyE8ICcxJyB0byB1c2UgVExTIG92ZXIgdGhlIGRhdGEgc29ja2V0CiAKIGV4dGVybiBjaGFyICpvcHRhcmc7CS8vIGZvciBnZXRvcHQoKQogCkBAIC0xMTIsNyArMTE4LDcgQEAKIC8qIQogCVxicmllZiBQcmludHMgdGhlIHVzYWdlIHNjcmVlbiBpZiBpdCBpcyBsYXVuY2hlZCBpbiBjb25zb2xlIG1vZGUuCiAqLwotc3RhdGljIHZvaWQgcHJpbnR1c2FnZSh2b2lkKQorc3RhdGljIHZvaWQgcHJpbnR1c2FnZShGSUxFICogZikKIHsKIAljb25zdCBjaGFyICp1c2FnZXRleHQgPQogCSJVU0FHRToiCkBAIC0xMjEsNyArMTI3LDcgQEAKICNpZm5kZWYgX1dJTjMyCiAJIlstaV0gIgogI2VuZGlmCi0JIlstcyA8Y29uZmlnX2ZpbGU+XSBbLWYgPGNvbmZpZ19maWxlPl1cblxuIgorICAgICAgICAiWy1EXSBbLXMgPGNvbmZpZ19maWxlPl0gWy1mIDxjb25maWdfZmlsZT5dXG5cbiIKIAkiICAtYiA8YWRkcmVzcz4gICAgdGhlIGFkZHJlc3MgdG8gYmluZCB0byAoZWl0aGVyIG51bWVyaWMgb3IgbGl0ZXJhbCkuXG4iCiAJIiAgICAgICAgICAgICAgICAgIERlZmF1bHQ6IGJpbmRzIHRvIGFsbCBsb2NhbCBJUHY0IGFuZCBJUHY2IGFkZHJlc3Nlc1xuXG4iCiAJIiAgLXAgPHBvcnQ+ICAgICAgIHRoZSBwb3J0IHRvIGJpbmQgdG8uXG4iCkBAIC0xNDQsMTQgKzE1MCwyNCBAQAogI2lmbmRlZiBfV0lOMzIKIAkiICAtaSAgICAgICAgICAgICAgcnVuIGluIGluZXRkIG1vZGUgKFVOSVggb25seSlcblxuIgogI2VuZGlmCisJIiAgLUQgICAgICAgICAgICAgIGxvZyBkZWJ1Z2dpbmcgbWVzc2FnZXNcblxuIgorI2lmZGVmIEhBVkVfT1BFTlNTTAorCSIgIC1TICAgICAgICAgICAgICBlbmNyeXB0IGFsbCBjb21tdW5pY2F0aW9uIHdpdGggU1NMIChpbXBsZW1lbnRzIHJwY2FwczovLylcbiIKKwkiICAtQyAgICAgICAgICAgICAgZW5hYmxlIGNvbXByZXNzaW9uXG4iCisJIiAgLUsgPHBlbV9maWxlPiAgIHVzZXMgdGhlIFNTTCBwcml2YXRlIGtleSBpbiB0aGlzIGZpbGUgKGRlZmF1bHQ6IGtleS5wZW0pXG4iCisJIiAgLVggPHBlbV9maWxlPiAgIHVzZXMgdGhlIGNlcnRpZmljYXRlIGZyb20gdGhpcyBmaWxlIChkZWZhdWx0OiBjZXJ0LnBlbSlcbiIKKyNlbmRpZgogCSIgIC1zIDxjb25maWdfZmlsZT4gc2F2ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHRvIGZpbGVcblxuIgogCSIgIC1mIDxjb25maWdfZmlsZT4gbG9hZCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGZyb20gZmlsZTsgYWxsIHN3aXRjaGVzXG4iCiAJIiAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgYXJlIGlnbm9yZWRcblxuIgogCSIgIC1oICAgICAgICAgICAgICBwcmludCB0aGlzIGhlbHAgc2NyZWVuXG5cbiI7CiAKLQkodm9pZClmcHJpbnRmKHN0ZGVyciwgIlJQQ0FQRCwgYSByZW1vdGUgcGFja2V0IGNhcHR1cmUgZGFlbW9uLlxuIgotCSJDb21waWxlZCB3aXRoICVzXG5cbiIsIHBjYXBfbGliX3ZlcnNpb24oKSk7Ci0JcHJpbnRmKCIlcyIsIHVzYWdldGV4dCk7CisJKHZvaWQpZnByaW50ZihmLCAiUlBDQVBELCBhIHJlbW90ZSBwYWNrZXQgY2FwdHVyZSBkYWVtb24uXG4iCisJIkNvbXBpbGVkIHdpdGggJXNcbiIsIHBjYXBfbGliX3ZlcnNpb24oKSk7CisjaWYgZGVmaW5lZChIQVZFX09QRU5TU0wpICYmIGRlZmluZWQoU1NMRUFZX1ZFUlNJT04pCisJKHZvaWQpZnByaW50ZihmLCAiQ29tcGlsZWQgd2l0aCAlc1xuIiwgU1NMZWF5X3ZlcnNpb24oU1NMRUFZX1ZFUlNJT04pKTsKKyNlbmRpZgorCSh2b2lkKWZwcmludGYoZiwgIlxuJXMiLCB1c2FnZXRleHQpOwogfQogCiAKQEAgLTE2MCwxNSArMTc2LDIwIEBACiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewogCWNoYXIgc2F2ZWZpbGVbTUFYX0xJTkUgKyAxXTsJCS8vIG5hbWUgb2YgdGhlIGZpbGUgb24gd2hpY2ggd2UgaGF2ZSB0byBzYXZlIHRoZSBjb25maWd1cmF0aW9uCisJaW50IGxvZ190b19zeXN0ZW1sb2cgPSAwOwkJLy8gTm9uLXplcm8gaWYgd2Ugc2hvdWxkIGxvZyB0byB0aGUgInN5c3RlbSBsb2ciIHJhdGhlciB0aGFuIHRoZSBzdGFuZGFyZCBlcnJvcgogCWludCBpc2RhZW1vbiA9IDA7CQkJLy8gTm9uLXplcm8gaWYgdGhlIHVzZXIgd2FudHMgdG8gcnVuIHRoaXMgcHJvZ3JhbSBhcyBhIGRhZW1vbgogI2lmbmRlZiBfV0lOMzIKIAlpbnQgaXNydW5ieWluZXRkID0gMDsJCQkvLyBOb24temVybyBpZiB0aGlzIGlzIGJlaW5nIHJ1biBieSBpbmV0ZCBvciBzb21ldGhpbmcgaW5ldGQtbGlrZQogI2VuZGlmCisJaW50IGxvZ19kZWJ1Z19tZXNzYWdlcyA9IDA7CQkvLyBOb24temVybyBpZiB0aGUgdXNlciB3YW50cyBkZWJ1ZyBtZXNzYWdlcyBsb2dnZWQKIAlpbnQgcmV0dmFsOwkJCQkvLyBrZWVwcyB0aGUgcmV0dXJuaW5nIHZhbHVlIGZyb20gc2V2ZXJhbCBmdW5jdGlvbnMKIAljaGFyIGVycmJ1ZltQQ0FQX0VSUkJVRl9TSVpFICsgMV07CS8vIGtlZXBzIHRoZSBlcnJvciBzdHJpbmcsIHByaW9yIHRvIGJlIHByaW50ZWQKICNpZm5kZWYgX1dJTjMyCiAJc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247CiAjZW5kaWYKKyNpZmRlZiBIQVZFX09QRU5TU0wKKwlpbnQgZW5hYmxlX2NvbXByZXNzaW9uID0gMDsKKyNlbmRpZgogCiAJc2F2ZWZpbGVbMF0gPSAwOwogCWxvYWRmaWxlWzBdID0gMDsKQEAgLTE3NywxNCArMTk4LDggQEAKIAkvLyBJbml0aWFsaXplIGVycmJ1ZgogCW1lbXNldChlcnJidWYsIDAsIHNpemVvZihlcnJidWYpKTsKIAotCWlmIChzb2NrX2luaXQoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSA9PSAtMSkKLQl7Ci0JCVNPQ0tfREVCVUdfTUVTU0FHRShlcnJidWYpOwotCQlleGl0KC0xKTsKLQl9Ci0KLQlzdHJuY3B5KGFkZHJlc3MsIFJQQ0FQX0RFRkFVTFRfTkVUQUREUiwgTUFYX0xJTkUpOwotCXN0cm5jcHkocG9ydCwgUlBDQVBfREVGQVVMVF9ORVRQT1JULCBNQVhfTElORSk7CisJcGNhcF9zdHJsY3B5KGFkZHJlc3MsIFJQQ0FQX0RFRkFVTFRfTkVUQUREUiwgc2l6ZW9mIChhZGRyZXNzKSk7CisJcGNhcF9zdHJsY3B5KHBvcnQsIFJQQ0FQX0RFRkFVTFRfTkVUUE9SVCwgc2l6ZW9mIChwb3J0KSk7CiAKIAkvLyBQcmVwYXJlIHRvIG9wZW4gYSBuZXcgc2VydmVyIHNvY2tldAogCW1lbXNldCgmbWFpbmhpbnRzLCAwLCBzaXplb2Yoc3RydWN0IGFkZHJpbmZvKSk7CkBAIC0xOTQsMjggKzIwOSw0NCBAQAogCW1haW5oaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOwogCiAJLy8gR2V0dGluZyB0aGUgcHJvcGVyIGNvbW1hbmQgbGluZSBvcHRpb25zCi0Jd2hpbGUgKChyZXR2YWwgPSBnZXRvcHQoYXJnYywgYXJndiwgImI6ZGhpcDo0bDpuYTpzOmY6diIpKSAhPSAtMSkKKyMJaWZkZWYgSEFWRV9PUEVOU1NMCisjCQlkZWZpbmUgU1NMX0NMT1BUUyAgIlNLOlg6QyIKKyMJZWxzZQorIwkJZGVmaW5lIFNTTF9DTE9QVFMgIiIKKyMJZW5kaWYKKworIwlkZWZpbmUgQ0xPUFRTICJiOmREaGlwOjRsOm5hOnM6Zjp2IiBTU0xfQ0xPUFRTCisKKwl3aGlsZSAoKHJldHZhbCA9IGdldG9wdChhcmdjLCBhcmd2LCBDTE9QVFMpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAocmV0dmFsKQogCQl7CisJCQljYXNlICdEJzoKKwkJCQlsb2dfZGVidWdfbWVzc2FnZXMgPSAxOworCQkJCXJwY2FwZF9sb2dfc2V0KGxvZ190b19zeXN0ZW1sb2csIGxvZ19kZWJ1Z19tZXNzYWdlcyk7CisJCQkJYnJlYWs7CiAJCQljYXNlICdiJzoKLQkJCQlzdHJuY3B5KGFkZHJlc3MsIG9wdGFyZywgTUFYX0xJTkUpOworCQkJCXBjYXBfc3RybGNweShhZGRyZXNzLCBvcHRhcmcsIHNpemVvZiAoYWRkcmVzcykpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAncCc6Ci0JCQkJc3RybmNweShwb3J0LCBvcHRhcmcsIE1BWF9MSU5FKTsKKwkJCQlwY2FwX3N0cmxjcHkocG9ydCwgb3B0YXJnLCBzaXplb2YgKHBvcnQpKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgJzQnOgogCQkJCW1haW5oaW50cy5haV9mYW1pbHkgPSBQRl9JTkVUOwkJLy8gSVB2NCBzZXJ2ZXIgb25seQogCQkJCWJyZWFrOwogCQkJY2FzZSAnZCc6CiAJCQkJaXNkYWVtb24gPSAxOworCQkJCWxvZ190b19zeXN0ZW1sb2cgPSAxOworCQkJCXJwY2FwZF9sb2dfc2V0KGxvZ190b19zeXN0ZW1sb2csIGxvZ19kZWJ1Z19tZXNzYWdlcyk7CiAJCQkJYnJlYWs7CiAJCQljYXNlICdpJzoKICNpZmRlZiBfV0lOMzIKLQkJCQlwcmludHVzYWdlKCk7CisJCQkJcHJpbnR1c2FnZShzdGRlcnIpOwogCQkJCWV4aXQoMSk7CiAjZWxzZQogCQkJCWlzcnVuYnlpbmV0ZCA9IDE7CisJCQkJbG9nX3RvX3N5c3RlbWxvZyA9IDE7CisJCQkJcnBjYXBkX2xvZ19zZXQobG9nX3RvX3N5c3RlbWxvZywgbG9nX2RlYnVnX21lc3NhZ2VzKTsKICNlbmRpZgogCQkJCWJyZWFrOwogCQkJY2FzZSAnbic6CkBAIC0yMjYsNyArMjU3LDcgQEAKIAkJCQlicmVhazsKIAkJCWNhc2UgJ2wnOgogCQkJewotCQkJCXN0cm5jcHkoaG9zdGxpc3QsIG9wdGFyZywgc2l6ZW9mKGhvc3RsaXN0KSk7CisJCQkJcGNhcF9zdHJsY3B5KGhvc3RsaXN0LCBvcHRhcmcsIHNpemVvZihob3N0bGlzdCkpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJY2FzZSAnYSc6CkBAIC0yNDEsMTIgKzI3MiwxMiBAQAogCQkJCXsKIAkJCQkJdG1wcG9ydCA9IHBjYXBfc3RydG9rX3IoTlVMTCwgUlBDQVBfSE9TVExJU1RfU0VQLCAmbGFzdHMpOwogCi0JCQkJCXN0cmxjcHkoYWN0aXZlbGlzdFtpXS5hZGRyZXNzLCB0bXBhZGRyZXNzLCBNQVhfTElORSk7CisJCQkJCXBjYXBfc3RybGNweShhY3RpdmVsaXN0W2ldLmFkZHJlc3MsIHRtcGFkZHJlc3MsIHNpemVvZiAoYWN0aXZlbGlzdFtpXS5hZGRyZXNzKSk7CiAKIAkJCQkJaWYgKCh0bXBwb3J0ID09IE5VTEwpIHx8IChzdHJjbXAodG1wcG9ydCwgIkRFRkFVTFQiKSA9PSAwKSkgLy8gdGhlIHVzZXIgY2hvb3NlIGEgY3VzdG9tIHBvcnQKLQkJCQkJCXN0cmxjcHkoYWN0aXZlbGlzdFtpXS5wb3J0LCBSUENBUF9ERUZBVUxUX05FVFBPUlRfQUNUSVZFLCBNQVhfTElORSk7CisJCQkJCQlwY2FwX3N0cmxjcHkoYWN0aXZlbGlzdFtpXS5wb3J0LCBSUENBUF9ERUZBVUxUX05FVFBPUlRfQUNUSVZFLCBzaXplb2YgKGFjdGl2ZWxpc3RbaV0ucG9ydCkpOwogCQkJCQllbHNlCi0JCQkJCQlzdHJsY3B5KGFjdGl2ZWxpc3RbaV0ucG9ydCwgdG1wcG9ydCwgTUFYX0xJTkUpOworCQkJCQkJcGNhcF9zdHJsY3B5KGFjdGl2ZWxpc3RbaV0ucG9ydCwgdG1wcG9ydCwgc2l6ZW9mIChhY3RpdmVsaXN0W2ldLnBvcnQpKTsKIAogCQkJCQl0bXBhZGRyZXNzID0gcGNhcF9zdHJ0b2tfcihOVUxMLCBSUENBUF9IT1NUTElTVF9TRVAsICZsYXN0cyk7CiAKQEAgLTI1NCw0NCArMjg1LDc0IEBACiAJCQkJfQogCiAJCQkJaWYgKGkgPiBNQVhfQUNUSVZFX0xJU1QpCi0JCQkJCVNPQ0tfREVCVUdfTUVTU0FHRSgiT25seSBNQVhfQUNUSVZFX0xJU1QgYWN0aXZlIGNvbm5lY3Rpb25zIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLiIpOworCQkJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICJPbmx5IE1BWF9BQ1RJVkVfTElTVCBhY3RpdmUgY29ubmVjdGlvbnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuIik7CiAKIAkJCQkvLyBJIGRvbid0IGluaXRpYWxpemUgdGhlIHJlbWFpbmluZyBwYXJ0IG9mIHRoZSBzdHJ1Y3R1cmUsIHNpbmNlCiAJCQkJLy8gaXQgaXMgYWxyZWFkeSB6ZXJvZWQgKGl0IGlzIGEgZ2xvYmFsIHZhcikKIAkJCQlicmVhazsKIAkJCX0KIAkJCWNhc2UgJ2YnOgotCQkJCXN0cmxjcHkobG9hZGZpbGUsIG9wdGFyZywgTUFYX0xJTkUpOworCQkJCXBjYXBfc3RybGNweShsb2FkZmlsZSwgb3B0YXJnLCBzaXplb2YgKGxvYWRmaWxlKSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlICdzJzoKLQkJCQlzdHJsY3B5KHNhdmVmaWxlLCBvcHRhcmcsIE1BWF9MSU5FKTsKKwkJCQlwY2FwX3N0cmxjcHkoc2F2ZWZpbGUsIG9wdGFyZywgc2l6ZW9mIChzYXZlZmlsZSkpOwogCQkJCWJyZWFrOworI2lmZGVmIEhBVkVfT1BFTlNTTAorCQkJY2FzZSAnUyc6CisJCQkJdXNlc19zc2wgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSAnQyc6CisJCQkJZW5hYmxlX2NvbXByZXNzaW9uID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0snOgorCQkJCXNzbF9zZXRfa2V5ZmlsZShvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAnWCc6CisJCQkJc3NsX3NldF9jZXJ0ZmlsZShvcHRhcmcpOworCQkJCWJyZWFrOworI2VuZGlmCiAJCQljYXNlICdoJzoKLQkJCQlwcmludHVzYWdlKCk7CisJCQkJcHJpbnR1c2FnZShzdGRvdXQpOwogCQkJCWV4aXQoMCk7Ci0JCQkJYnJlYWs7CisJCQkJLypOT1RSRUFDSEVEKi8KIAkJCWRlZmF1bHQ6CiAJCQkJZXhpdCgxKTsKLQkJCQlicmVhazsKKwkJCQkvKk5PVFJFQUNIRUQqLwogCQl9CiAJfQogCiAjaWZuZGVmIF9XSU4zMgogCWlmIChpc2RhZW1vbiAmJiBpc3J1bmJ5aW5ldGQpCiAJewotCQlmcHJpbnRmKHN0ZGVyciwgInJwY2FwZDogLWQgYW5kIC1pIGNhbid0IGJlIHVzZWQgdG9nZXRoZXJcbiIpOworCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICJycGNhcGQ6IC1kIGFuZCAtaSBjYW4ndCBiZSB1c2VkIHRvZ2V0aGVyIik7CiAJCWV4aXQoMSk7CiAJfQogI2VuZGlmCiAKKwkvLworCS8vIFdlIHdhbnQgVVRGLTggZXJyb3IgbWVzc2FnZXMuCisJLy8KKwlpZiAocGNhcF9pbml0KFBDQVBfQ0hBUl9FTkNfVVRGXzgsIGVycmJ1ZikgPT0gLTEpCisJeworCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICIlcyIsIGVycmJ1Zik7CisJCWV4aXQoLTEpOworCX0KKwlwY2FwX2ZtdF9zZXRfZW5jb2RpbmcoUENBUF9DSEFSX0VOQ19VVEZfOCk7CisKKwlpZiAoc29ja19pbml0KGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSkgPT0gLTEpCisJeworCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICIlcyIsIGVycmJ1Zik7CisJCWV4aXQoLTEpOworCX0KKwogCWlmIChzYXZlZmlsZVswXSAmJiBmaWxlY29uZl9zYXZlKHNhdmVmaWxlKSkKLQkJU09DS19ERUJVR19NRVNTQUdFKCJFcnJvciB3aGVuIHNhdmluZyB0aGUgY29uZmlndXJhdGlvbiB0byBmaWxlIik7CisJCXJwY2FwZF9sb2coTE9HUFJJT19ERUJVRywgIkVycm9yIHdoZW4gc2F2aW5nIHRoZSBjb25maWd1cmF0aW9uIHRvIGZpbGUiKTsKIAogCS8vIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCBpdCBrZWVwcyB0aGUgc2V0dGluZ3MgcHJvdmlkZWQgYnkgdGhlIGNvbW1hbmQgbGluZQogCWlmIChsb2FkZmlsZVswXSkKIAkJZmlsZWNvbmZfcmVhZCgpOwogCi0jaWZkZWYgV0lOMzIKKyNpZmRlZiBfV0lOMzIKIAkvLwogCS8vIENyZWF0ZSBhIGhhbmRsZSB0byBzaWduYWwgdGhlIG1haW4gbG9vcCB0byB0ZWxsIGl0IHRvIGRvCiAJLy8gc29tZXRoaW5nLgpAQCAtMjk5LDkgKzM2MCw5IEBACiAJc3RhdGVfY2hhbmdlX2V2ZW50ID0gQ3JlYXRlRXZlbnQoTlVMTCwgRkFMU0UsIEZBTFNFLCBOVUxMKTsKIAlpZiAoc3RhdGVfY2hhbmdlX2V2ZW50ID09IE5VTEwpCiAJewotCQlzb2NrX2dldGVycm9yKE5VTEwsIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSk7Ci0JCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIkNhbid0IGNyZWF0ZSBzdGF0ZSBjaGFuZ2UgZXZlbnQ6ICVzIiwKLQkJICAgIGVycmJ1Zik7CisJCXNvY2tfZ2V0ZXJyb3IoIkNhbid0IGNyZWF0ZSBzdGF0ZSBjaGFuZ2UgZXZlbnQiLCBlcnJidWYsCisJCSAgICBQQ0FQX0VSUkJVRl9TSVpFKTsKKwkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiJXMiLCBlcnJidWYpOwogCQlleGl0KDIpOwogCX0KIApAQCAtMzEwLDkgKzM3MSw5IEBACiAJLy8KIAlpZiAoIVNldENvbnNvbGVDdHJsSGFuZGxlcihtYWluX2N0cmxfZXZlbnQsIFRSVUUpKQogCXsKLQkJc29ja19nZXRlcnJvcihOVUxMLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOwotCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICJDYW4ndCBzZXQgY29udHJvbCBoYW5kbGVyOiAlcyIsCi0JCSAgICBlcnJidWYpOworCQlzb2NrX2dldGVycm9yKCJDYW4ndCBzZXQgY29udHJvbCBoYW5kbGVyIiwgZXJyYnVmLAorCQkgICAgUENBUF9FUlJCVUZfU0laRSk7CisJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIiVzIiwgZXJyYnVmKTsKIAkJZXhpdCgyKTsKIAl9CiAjZWxzZQpAQCAtMzMxLDYgKzM5MiwxNyBAQAogCXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKICNlbmRpZgogCisjIGlmZGVmIEhBVkVfT1BFTlNTTAorCWlmICh1c2VzX3NzbCkgeworCQlpZiAoc3NsX2luaXRfb25jZSgxLCBlbmFibGVfY29tcHJlc3Npb24sIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSkgPCAwKQorCQl7CisJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICJDYW4ndCBpbml0aWFsaXplIFNTTDogJXMiLAorCQkJICAgIGVycmJ1Zik7CisJCQlleGl0KDIpOworCQl9CisJfQorIyBlbmRpZgorCiAjaWZuZGVmIF9XSU4zMgogCWlmIChpc3J1bmJ5aW5ldGQpCiAJewpAQCAtMzM5LDM2ICs0MTEsMzAgQEAKIAkJLy8gYnkgaW5ldGQgb3Igc29tZXRoaW5nIHRoYXQgY2FuIHJ1biBuZXR3b3JrIGRhZW1vbnMKIAkJLy8gYXMgaWYgaXQgd2VyZSBpbmV0ZCAoeGluZXRkLCBsYXVuY2hkLCBzeXN0ZW1kLCBldGMuKS4KIAkJLy8KLQkJLy8gT3VyIHN0YW5kYXJkIGlucHV0IGlzIHRoZSBpbnB1dCBzaWRlIG9mIGEgY29ubmVjdGlvbiwKLQkJLy8gYW5kIG91ciBzdGFuZGFyZCBvdXRwdXQgaXMgdGhlIG91dHB1dCBzaWRlIG9mIGEKLQkJLy8gY29ubmVjdGlvbi4KKwkJLy8gV2UgYXNzdW1lIHRoYXQgdGhlIHByb2dyYW0gdGhhdCBsYXVuY2hlZCB1cyBqdXN0CisJCS8vIGR1cGxpY2F0ZWQgYSBzaW5nbGUgc29ja2V0IGZvciB0aGUgY29ubmVjdGlvbgorCQkvLyB0byBvdXIgc3RhbmRhcmQgaW5wdXQsIG91dHB1dCwgYW5kIGVycm9yLCBzbyB3ZQorCQkvLyBjYW4ganVzdCB1c2UgdGhlIHN0YW5kYXJkIGlucHV0IGFzIG91ciBjb250cm9sCisJCS8vIHNvY2tldC4KIAkJLy8KLQkJaW50IHNvY2tjdHJsX2luLCBzb2NrY3RybF9vdXQ7CisJCWludCBzb2NrY3RybDsKIAkJaW50IGRldm51bGxfZmQ7CiAKIAkJLy8KLQkJLy8gRHVwbGljYXRlIHRoZSBzdGFuZGFyZCBpbnB1dCBhbmQgb3V0cHV0LCBtYWtpbmcgdGhlbQotCQkvLyB0aGUgaW5wdXQgYW5kIG91dHB1dCBzaWRlIG9mIHRoZSBjb250cm9sIGNvbm5lY3Rpb24uCisJCS8vIER1cGxpY2F0ZSB0aGUgc3RhbmRhcmQgaW5wdXQgYXMgdGhlIGNvbnRyb2wgc29ja2V0LgogCQkvLwotCQlzb2NrY3RybF9pbiA9IGR1cCgwKTsKLQkJaWYgKHNvY2tjdHJsX2luID09IC0xKQorCQlzb2NrY3RybCA9IGR1cCgwKTsKKwkJaWYgKHNvY2tjdHJsID09IC0xKQogCQl7Ci0JCQlzb2NrX2dldGVycm9yKE5VTEwsIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSk7Ci0JCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICJDYW4ndCBkdXAgc3RhbmRhcmQgaW5wdXQ6ICVzIiwKLQkJCSAgICBlcnJidWYpOwotCQkJZXhpdCgyKTsKLQkJfQotCQlzb2NrY3RybF9vdXQgPSBkdXAoMSk7Ci0JCWlmIChzb2NrY3RybF9vdXQgPT0gLTEpCi0JCXsKLQkJCXNvY2tfZ2V0ZXJyb3IoTlVMTCwgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKLQkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIkNhbid0IGR1cCBzdGFuZGFyZCBvdXRwdXQ6ICVzIiwKLQkJCSAgICBlcnJidWYpOworCQkJc29ja19nZXRlcnJvcigiQ2FuJ3QgZHVwIHN0YW5kYXJkIGlucHV0IiwgZXJyYnVmLAorCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUpOworCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiJXMiLCBlcnJidWYpOwogCQkJZXhpdCgyKTsKIAkJfQogCiAJCS8vCi0JCS8vIFRyeSB0byBzZXQgdGhlIHN0YW5kYXJkIGlucHV0IGFuZCBvdXRwdXQgdG8gL2Rldi9udWxsLgorCQkvLyBUcnkgdG8gc2V0IHRoZSBzdGFuZGFyZCBpbnB1dCwgb3V0cHV0LCBhbmQgZXJyb3IKKwkJLy8gdG8gL2Rldi9udWxsLgogCQkvLwogCQlkZXZudWxsX2ZkID0gb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKTsKIAkJaWYgKGRldm51bGxfZmQgIT0gLTEpCkBAIC0zNzgsNiArNDQ0LDcgQEAKIAkJCS8vCiAJCQkodm9pZClkdXAyKGRldm51bGxfZmQsIDApOwogCQkJKHZvaWQpZHVwMihkZXZudWxsX2ZkLCAxKTsKKwkJCSh2b2lkKWR1cDIoZGV2bnVsbF9mZCwgMik7CiAJCQljbG9zZShkZXZudWxsX2ZkKTsKIAkJfQogCkBAIC0zODYsOCArNDUzLDE0IEBACiAJCS8vIFRoaXMgaXMgcGFzc2l2ZSBtb2RlLCBzbyB3ZSBkb24ndCBjYXJlIHdoZXRoZXIgd2Ugd2VyZQogCQkvLyB0b2xkIGJ5IHRoZSBjbGllbnQgdG8gY2xvc2UuCiAJCS8vCi0JCSh2b2lkKWRhZW1vbl9zZXJ2aWNlbG9vcChzb2NrY3RybF9pbiwgc29ja2N0cmxfb3V0LCAwLAotCQkgICAgbnVsbEF1dGhBbGxvd2VkKTsKKwkJY2hhciAqaG9zdGxpc3RfY29weSA9IHN0cmR1cChob3N0bGlzdCk7CisJCWlmIChob3N0bGlzdF9jb3B5ID09IE5VTEwpCisJCXsKKwkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIk91dCBvZiBtZW1vcnkgY29weWluZyB0aGUgaG9zdC9wb3J0IGxpc3QiKTsKKwkJCWV4aXQoMCk7CisJCX0KKwkJKHZvaWQpZGFlbW9uX3NlcnZpY2Vsb29wKHNvY2tjdHJsLCAwLCBob3N0bGlzdF9jb3B5LAorCQkgICAgbnVsbEF1dGhBbGxvd2VkLCB1c2VzX3NzbCk7CiAKIAkJLy8KIAkJLy8gTm90aGluZyBtb3JlIHRvIGRvLgpAQCAtNDQyLDggKzUxNSw4IEBACiAJCS8vCiAJCS8vIElmIHRoaXMgY2FsbCBzdWNjZWVkcywgaXQgaXMgYmxvY2tpbmcgb24gV2luMzIKIAkJLy8KLQkJaWYgKHN2Y19zdGFydCgpICE9IDEpCi0JCQlTT0NLX0RFQlVHX01FU1NBR0UoIlVuYWJsZSB0byBzdGFydCB0aGUgc2VydmljZSIpOworCQlpZiAoIXN2Y19zdGFydCgpKQorCQkJcnBjYXBkX2xvZyhMT0dQUklPX0RFQlVHLCAiVW5hYmxlIHRvIHN0YXJ0IHRoZSBzZXJ2aWNlIik7CiAKIAkJLy8gV2hlbiB0aGUgcHJldmlvdXMgY2FsbCByZXR1cm5zLCB0aGUgZW50aXJlIGFwcGxpY2F0aW9uIGhhcyB0byBiZSBzdG9wcGVkLgogCQlleGl0KDApOwpAQCAtNTA0LDcgKzU3Nyw3IEBACiAJCSAgICAodm9pZCAqKSZhY3RpdmVsaXN0W2ldLCAwLCBOVUxMKTsKIAkJaWYgKHRocmVhZElkID09IDApCiAJCXsKLQkJCVNPQ0tfREVCVUdfTUVTU0FHRSgiRXJyb3IgY3JlYXRpbmcgdGhlIGFjdGl2ZSBjaGlsZCB0aHJlYWRzIik7CisJCQlycGNhcGRfbG9nKExPR1BSSU9fREVCVUcsICJFcnJvciBjcmVhdGluZyB0aGUgYWN0aXZlIGNoaWxkIHRocmVhZHMiKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCUNsb3NlSGFuZGxlKHRocmVhZElkKTsKQEAgLTUzOSw3ICs2MTIsNyBAQAogCQkvLwogCQlpZiAoc29ja19pbml0YWRkcmVzcygoYWRkcmVzc1swXSkgPyBhZGRyZXNzIDogTlVMTCwgcG9ydCwgJm1haW5oaW50cywgJmFkZHJpbmZvLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpID09IC0xKQogCQl7Ci0JCQlTT0NLX0RFQlVHX01FU1NBR0UoZXJyYnVmKTsKKwkJCXJwY2FwZF9sb2coTE9HUFJJT19ERUJVRywgIiVzIiwgZXJyYnVmKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC02MTgsNyArNjkxLDcgQEAKIAkvLwogCS8vIFdlJ3JlIGRvbmU7IGV4aXQuCiAJLy8KLQlTT0NLX0RFQlVHX01FU1NBR0UoUFJPR1JBTV9OQU1FICIgaXMgY2xvc2luZy5cbiIpOworCXJwY2FwZF9sb2coTE9HUFJJT19ERUJVRywgUFJPR1JBTV9OQU1FICIgaXMgY2xvc2luZy5cbiIpOwogCiAjaWZuZGVmIF9XSU4zMgogCS8vCkBAIC02NjIsOCArNzM1LDkgQEAKIAogCWlmICghU2V0RXZlbnQoc3RhdGVfY2hhbmdlX2V2ZW50KSkKIAl7Ci0JCXNvY2tfZ2V0ZXJyb3IoTlVMTCwgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKLQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiU2V0RXZlbnQgb24gc2h1dGRvd24gZXZlbnQgZmFpbGVkOiAlcyIsIGVycmJ1Zik7CisJCXNvY2tfZ2V0ZXJyb3IoIlNldEV2ZW50IG9uIHNodXRkb3duIGV2ZW50IGZhaWxlZCIsIGVycmJ1ZiwKKwkJICAgIFBDQVBfRVJSQlVGX1NJWkUpOworCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICIlcyIsIGVycmJ1Zik7CiAJfQogfQogCkBAIC03NjIsNyArODM2LDcgQEAKIAkvLyBGb3IgcmVmZXJlbmNlLCBTdGV2ZW5zLCBwZyAxMjgKIAogCXdoaWxlICgocGlkID0gd2FpdHBpZCgtMSwgJmV4aXRzdGF0LCBXTk9IQU5HKSkgPiAwKQotCQlTT0NLX0RFQlVHX01FU1NBR0UoIkNoaWxkIHRlcm1pbmF0ZWQiKTsKKwkJcnBjYXBkX2xvZyhMT0dQUklPX0RFQlVHLCAiQ2hpbGQgdGVybWluYXRlZCIpOwogCiAJcmV0dXJuOwogfQpAQCAtODI5LDE0ICs5MDMsMTYgQEAKIAkJZXZlbnQgPSBXU0FDcmVhdGVFdmVudCgpOwogCQlpZiAoZXZlbnQgPT0gV1NBX0lOVkFMSURfRVZFTlQpCiAJCXsKLQkJCXNvY2tfZ2V0ZXJyb3IoTlVMTCwgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKLQkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIkNhbid0IGNyZWF0ZSBzb2NrZXQgZXZlbnQ6ICVzIiwgZXJyYnVmKTsKKwkJCXNvY2tfZ2V0ZXJyb3IoIkNhbid0IGNyZWF0ZSBzb2NrZXQgZXZlbnQiLCBlcnJidWYsCisJCQkgICAgUENBUF9FUlJCVUZfU0laRSk7CisJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICIlcyIsIGVycmJ1Zik7CiAJCQlleGl0KDIpOwogCQl9CiAJCWlmIChXU0FFdmVudFNlbGVjdChzb2NrX2luZm8tPnNvY2ssIGV2ZW50LCBGRF9BQ0NFUFQpID09IFNPQ0tFVF9FUlJPUikKIAkJewotCQkJc29ja19nZXRlcnJvcihOVUxMLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOwotCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiQ2FuJ3Qgc2V0dXAgc29ja2V0IGV2ZW50OiAlcyIsIGVycmJ1Zik7CisJCQlzb2NrX2dldGVycm9yKCJDYW4ndCBzZXR1cCBzb2NrZXQgZXZlbnQiLCBlcnJidWYsCisJCQkgICAgUENBUF9FUlJCVUZfU0laRSk7CisJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICIlcyIsIGVycmJ1Zik7CiAJCQlleGl0KDIpOwogCQl9CiAJCWV2ZW50c1tpXSA9IGV2ZW50OwpAQCAtODUzLDggKzkyOSw5IEBACiAJCSAgICBXU0FfSU5GSU5JVEUsIEZBTFNFKTsKIAkJaWYgKHJldCA9PSBXU0FfV0FJVF9GQUlMRUQpCiAJCXsKLQkJCXNvY2tfZ2V0ZXJyb3IoTlVMTCwgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKLQkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIldTQVdhaXRGb3JNdWx0aXBsZUV2ZW50cyBmYWlsZWQ6ICVzIiwgZXJyYnVmKTsKKwkJCXNvY2tfZ2V0ZXJyb3IoIldTQVdhaXRGb3JNdWx0aXBsZUV2ZW50cyBmYWlsZWQiLCBlcnJidWYsCisJCQkgICAgUENBUF9FUlJCVUZfU0laRSk7CisJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICIlcyIsIGVycmJ1Zik7CiAJCQlleGl0KDIpOwogCQl9CiAKQEAgLTg5Miw4ICs5NjksOSBAQAogCQkJaWYgKFdTQUVudW1OZXR3b3JrRXZlbnRzKHNvY2tfaW5mby0+c29jaywKIAkJCSAgICBldmVudHNbaV0sICZuZXR3b3JrX2V2ZW50cykgPT0gU09DS0VUX0VSUk9SKQogCQkJewotCQkJCXNvY2tfZ2V0ZXJyb3IoTlVMTCwgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKTsKLQkJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICJXU0FFbnVtTmV0d29ya0V2ZW50cyBmYWlsZWQ6ICVzIiwgZXJyYnVmKTsKKwkJCQlzb2NrX2dldGVycm9yKCJXU0FFbnVtTmV0d29ya0V2ZW50cyBmYWlsZWQiLAorCQkJCSAgICBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOworCQkJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIiVzIiwgZXJyYnVmKTsKIAkJCQlleGl0KDIpOwogCQkJfQogCQkJaWYgKG5ldHdvcmtfZXZlbnRzLmxOZXR3b3JrRXZlbnRzICYgRkRfQUNDRVBUKQpAQCAtOTAxLDE2ICs5NzksMTYgQEAKIAkJCQkvLwogCQkJCS8vIERpZCBhbiBlcnJvciBvY2N1cj8KIAkJCQkvLwotCQkJIAlpZiAobmV0d29ya19ldmVudHMuaUVycm9yQ29kZVtGRF9BQ0NFUFRfQklUXSAhPSAwKQotCQkJIAl7CisJCQkJaWYgKG5ldHdvcmtfZXZlbnRzLmlFcnJvckNvZGVbRkRfQUNDRVBUX0JJVF0gIT0gMCkKKwkJCQl7CiAJCQkJCS8vCiAJCQkJCS8vIFllcyAtIHJlcG9ydCBpdCBhbmQga2VlcCBnb2luZy4KIAkJCQkJLy8KLQkJCQkJc29ja19mbXRlcnJvcihOVUxMLAorCQkJCQlzb2NrX2ZtdGVycm9yKCJTb2NrZXQgZXJyb3IiLAogCQkJCQkgICAgbmV0d29ya19ldmVudHMuaUVycm9yQ29kZVtGRF9BQ0NFUFRfQklUXSwKIAkJCQkJICAgIGVycmJ1ZiwKIAkJCQkJICAgIFBDQVBfRVJSQlVGX1NJWkUpOwotCQkJCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICJTb2NrZXQgZXJyb3I6ICVzIiwgZXJyYnVmKTsKKwkJCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiJXMiLCBlcnJidWYpOwogCQkJCQljb250aW51ZTsKIAkJCQl9CiAKQEAgLTEwMzMsNiArMTExMSwyMCBAQAogCXNvY2tfY2xlYW51cCgpOwogfQogCisjaWZkZWYgX1dJTjMyCisvLworLy8gQSBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgcGFyYW1ldGVycyB0byB0aGUgZGFlbW9uIHNlcnZpY2UgbG9vcAorLy8gdGhyZWFkIG9uIFdpbmRvd3MuCisvLworLy8gKE9uIFVOKlgsIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHRoaXMgZXhwbGljaXQgY29weSBzaW5jZSB0aGUKKy8vIGZvcmsgImluaGVyaXRzIiB0aGUgcGFyZW50IHN0YWNrLikKKy8vCitzdHJ1Y3QgcGFyYW1zX2NvcHkgeworCVNPQ0tFVCBzb2NrY3RybDsKKwljaGFyICpob3N0bGlzdDsKK307CisjZW5kaWYKKwogLy8KIC8vIEFjY2VwdCBhIGNvbm5lY3Rpb24gYW5kIHN0YXJ0IGEgd29ya2VyIHRocmVhZCwgb24gV2luZG93cywgb3IgYQogLy8gd29ya2VyIHByb2Nlc3MsIG9uIFVOKlgsIHRvIGhhbmRsZSB0aGUgY29ubmVjdGlvbi4KQEAgLTEwNDgsNyArMTE0MCw3IEBACiAjaWZkZWYgX1dJTjMyCiAJSEFORExFIHRocmVhZElkOwkJCS8vIGhhbmRsZSBmb3IgdGhlIHN1YnRocmVhZAogCXVfbG9uZyBvZmYgPSAwOwotCVNPQ0tFVCAqc29ja2N0cmxfdGVtcDsKKwlzdHJ1Y3QgcGFyYW1zX2NvcHkgKnBhcmFtc19jb3B5ID0gTlVMTDsKICNlbHNlCiAJcGlkX3QgcGlkOwogI2VuZGlmCkBAIC0xMDY5LDcgKzExNjEsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQkvLyBUaGUgYWNjZXB0KCkgY2FsbCBjYW4gcmV0dXJuIHRoaXMgZXJyb3Igd2hlbiBhIHNpZ25hbCBpcyBjYXRjaGVkCisJCS8vIFRoZSBhY2NlcHQoKSBjYWxsIGNhbiByZXR1cm4gdGhpcyBlcnJvciB3aGVuIGEgc2lnbmFsIGlzIGNhdWdodAogCQkvLyBJbiB0aGlzIGNhc2UsIHdlIGhhdmUgc2ltcGx5IHRvIGlnbm9yZSB0aGlzIGVycm9yIGNvZGUKIAkJLy8gU3RldmVucywgcGcgMTI0CiAjaWZkZWYgX1dJTjMyCkBAIC0xMDgxLDIzICsxMTczLDEyIEBACiAKIAkJLy8gRG9uJ3QgY2hlY2sgZm9yIGVycm9ycyBoZXJlLCBzaW5jZSB0aGUgZXJyb3IgY2FuIGJlIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZSB0aHJlYWQKIAkJLy8gaGFzIGJlZW4ga2lsbGVkCi0JCXNvY2tfZ2V0ZXJyb3IoImFjY2VwdCgpOiAiLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOworCQlzb2NrX2dldGVycm9yKCJhY2NlcHQoKSIsIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSk7CiAJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIkFjY2VwdCBvZiBjb250cm9sIGNvbm5lY3Rpb24gZnJvbSBjbGllbnQgZmFpbGVkOiAlcyIsCiAJCSAgICBlcnJidWYpOwogCQlyZXR1cm47CiAJfQogCi0JLy8KLQkvLyBXZSBoYXZlIGEgY29ubmVjdGlvbi4KLQkvLyBDaGVjayB3aGV0aGVyIHRoZSBjb25uZWN0aW5nIGhvc3QgaXMgYW1vbmcgdGhlIG9uZXMgYWxsb3dlZC4KLQkvLwotCWlmIChzb2NrX2NoZWNrX2hvc3RsaXN0KGhvc3RsaXN0LCBSUENBUF9IT1NUTElTVF9TRVAsICZmcm9tLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpIDwgMCkKLQl7Ci0JCXJwY2FwX3NlbmRlcnJvcihzb2NrY3RybCwgMCwgUENBUF9FUlJfSE9TVE5PQVVUSCwgZXJyYnVmLCBOVUxMKTsKLQkJc29ja19jbG9zZShzb2NrY3RybCwgTlVMTCwgMCk7Ci0JCXJldHVybjsKLQl9Ci0KICNpZmRlZiBfV0lOMzIKIAkvLwogCS8vIFB1dCB0aGUgc29ja2V0IGJhY2sgaW50byBibG9ja2luZyBtb2RlOyBkb2luZyBXU0FFdmVudFNlbGVjdCgpCkBAIC0xMTA4LDU2ICsxMTg5LDc1IEBACiAJLy8gRmlyc3QsIHdlIGhhdmUgdG8gdW4tV1NBRXZlbnRTZWxlY3QoKSB0aGlzIHNvY2tldCwgYW5kIHRoZW4KIAkvLyB3ZSBjYW4gdHVybiBub24tYmxvY2tpbmcgbW9kZSBvZmYuCiAJLy8KKwkvLyBJZiB0aGlzIGZhaWxzLCB3ZSBhcmVuJ3QgZ3VhcmFudGVlZCB0aGF0LCBmb3IgZXhhbXBsZSwgYW55CisJLy8gb2YgdGhlIGVycm9yIG1lc3NhZ2Ugd2lsbCBiZSBzZW50IC0gaWYgaXQgY2FuJ3QgYmUgcHV0IGluCisJLy8gdGhlIHNvY2tldCBxdWV1ZSwgdGhlIHNlbmQgd2lsbCBqdXN0IGZhaWwuCisJLy8KKwkvLyBTbyB3ZSBqdXN0IGxvZyB0aGUgbWVzc2FnZSBhbmQgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCisJLy8KIAlpZiAoV1NBRXZlbnRTZWxlY3Qoc29ja2N0cmwsIE5VTEwsIDApID09IFNPQ0tFVF9FUlJPUikKIAl7Ci0JCXNvY2tfZ2V0ZXJyb3IoImlvY3Rsc29ja2V0KEZJT05CSU8pOiAiLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOwotCQlycGNhcF9zZW5kZXJyb3Ioc29ja2N0cmwsIDAsIFBDQVBfRVJSX0hPU1ROT0FVVEgsIGVycmJ1ZiwgTlVMTCk7CisJCXNvY2tfZ2V0ZXJyb3IoIldTQUV2ZW50U2VsZWN0KCkiLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOworCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICIlcyIsIGVycmJ1Zik7CiAJCXNvY2tfY2xvc2Uoc29ja2N0cmwsIE5VTEwsIDApOwogCQlyZXR1cm47CiAJfQogCWlmIChpb2N0bHNvY2tldChzb2NrY3RybCwgRklPTkJJTywgJm9mZikgPT0gU09DS0VUX0VSUk9SKQogCXsKLQkJc29ja19nZXRlcnJvcigiaW9jdGxzb2NrZXQoRklPTkJJTyk6ICIsIGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSk7Ci0JCXJwY2FwX3NlbmRlcnJvcihzb2NrY3RybCwgMCwgUENBUF9FUlJfSE9TVE5PQVVUSCwgZXJyYnVmLCBOVUxMKTsKKwkJc29ja19nZXRlcnJvcigiaW9jdGxzb2NrZXQoRklPTkJJTykiLCBlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUpOworCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICIlcyIsIGVycmJ1Zik7CiAJCXNvY2tfY2xvc2Uoc29ja2N0cmwsIE5VTEwsIDApOwogCQlyZXR1cm47CiAJfQogCiAJLy8KLQkvLyBBbGxvY2F0ZSBhIGxvY2F0aW9uIHRvIGhvbGQgdGhlIHZhbHVlIG9mIHNvY2tjdHJsLgorCS8vIE1ha2UgYSBjb3B5IG9mIHRoZSBob3N0IGxpc3QgdG8gcGFzcyB0byB0aGUgbmV3IHRocmVhZCwgc28gdGhhdAorCS8vIGlmIHdlIHVwZGF0ZSBpdCBpbiB0aGUgbWFpbiB0aHJlYWQsIGl0IHdvbid0IGNhdGNoIHVzIGluIHRoZQorCS8vIG1pZGRsZSBvZiB1cGRhdGluZyBpdC4KKwkvLworCS8vIGRhZW1vbl9zZXJ2aWNlbG9vcCgpIHdpbGwgZnJlZSBpdCBvbmNlIGl0J3MgZG9uZSB3aXRoIGl0LgorCS8vCisJY2hhciAqaG9zdGxpc3RfY29weSA9IHN0cmR1cChob3N0bGlzdCk7CisJaWYgKGhvc3RsaXN0X2NvcHkgPT0gTlVMTCkKKwl7CisJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIk91dCBvZiBtZW1vcnkgY29weWluZyB0aGUgaG9zdC9wb3J0IGxpc3QiKTsKKwkJc29ja19jbG9zZShzb2NrY3RybCwgTlVMTCwgMCk7CisJCXJldHVybjsKKwl9CisKKwkvLworCS8vIEFsbG9jYXRlIGEgbG9jYXRpb24gdG8gaG9sZCB0aGUgdmFsdWVzIG9mIHNvY2tjdHJsLgogCS8vIEl0IHdpbGwgYmUgZnJlZWQgaW4gdGhlIG5ld2x5LWNyZWF0ZWQgdGhyZWFkIG9uY2UgaXQncwogCS8vIGZpbmlzaGVkIHdpdGggaXQuCi0JLy8gSSBndWVzcyB3ZSAqY291bGQqIGp1c3QgY2FzdCBzb2NrY3RybCB0byBhIHZvaWQgKiwgYnV0IHRoYXQncwotCS8vIGEgYml0IHVnbHkuCiAJLy8KLQlzb2NrY3RybF90ZW1wID0gKFNPQ0tFVCAqKW1hbGxvYyhzaXplb2YgKFNPQ0tFVCkpOwotCWlmIChzb2NrY3RybF90ZW1wID09IE5VTEwpCisJcGFyYW1zX2NvcHkgPSBtYWxsb2Moc2l6ZW9mKCpwYXJhbXNfY29weSkpOworCWlmIChwYXJhbXNfY29weSA9PSBOVUxMKQogCXsKLQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCi0JCSAgICBlcnJubywgIm1hbGxvYygpIGZhaWxlZCIpOwotCQlycGNhcF9zZW5kZXJyb3Ioc29ja2N0cmwsIDAsIFBDQVBfRVJSX09QRU4sIGVycmJ1ZiwgTlVMTCk7CisJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyB0aGUgcGFyYW1ldGVyIGNvcHkgc3RydWN0dXJlIik7CisJCWZyZWUoaG9zdGxpc3RfY29weSk7CiAJCXNvY2tfY2xvc2Uoc29ja2N0cmwsIE5VTEwsIDApOwogCQlyZXR1cm47CiAJfQotCSpzb2NrY3RybF90ZW1wID0gc29ja2N0cmw7CisJcGFyYW1zX2NvcHktPnNvY2tjdHJsID0gc29ja2N0cmw7CisJcGFyYW1zX2NvcHktPmhvc3RsaXN0ID0gaG9zdGxpc3RfY29weTsKIAogCXRocmVhZElkID0gKEhBTkRMRSlfYmVnaW50aHJlYWRleChOVUxMLCAwLAotCSAgICBtYWluX3Bhc3NpdmVfc2VydmljZWxvb3BfdGhyZWFkLCAodm9pZCAqKSBzb2NrY3RybF90ZW1wLCAwLCBOVUxMKTsKKwkgICAgbWFpbl9wYXNzaXZlX3NlcnZpY2Vsb29wX3RocmVhZCwgKHZvaWQgKikgcGFyYW1zX2NvcHksIDAsIE5VTEwpOwogCWlmICh0aHJlYWRJZCA9PSAwKQogCXsKLQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJFcnJvciBjcmVhdGluZyB0aGUgY2hpbGQgdGhyZWFkIik7Ci0JCXJwY2FwX3NlbmRlcnJvcihzb2NrY3RybCwgMCwgUENBUF9FUlJfT1BFTiwgZXJyYnVmLCBOVUxMKTsKKwkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiRXJyb3IgY3JlYXRpbmcgdGhlIGNoaWxkIHRocmVhZCIpOworCQlmcmVlKHBhcmFtc19jb3B5KTsKKwkJZnJlZShob3N0bGlzdF9jb3B5KTsKIAkJc29ja19jbG9zZShzb2NrY3RybCwgTlVMTCwgMCk7Ci0JCWZyZWUoc29ja2N0cmxfdGVtcCk7CiAJCXJldHVybjsKIAl9CiAJQ2xvc2VIYW5kbGUodGhyZWFkSWQpOwotI2Vsc2UKKyNlbHNlIC8qIF9XSU4zMiAqLwogCXBpZCA9IGZvcmsoKTsKIAlpZiAocGlkID09IC0xKQogCXsKLQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJFcnJvciBjcmVhdGluZyB0aGUgY2hpbGQgcHJvY2VzcyIpOwotCQlycGNhcF9zZW5kZXJyb3Ioc29ja2N0cmwsIDAsIFBDQVBfRVJSX09QRU4sIGVycmJ1ZiwgTlVMTCk7CisJCXJwY2FwZF9sb2coTE9HUFJJT19FUlJPUiwgIkVycm9yIGNyZWF0aW5nIHRoZSBjaGlsZCBwcm9jZXNzOiAlcyIsCisJCSAgICBzdHJlcnJvcihlcnJubykpOwogCQlzb2NrX2Nsb3NlKHNvY2tjdHJsLCBOVUxMLCAwKTsKIAkJcmV0dXJuOwogCX0KQEAgLTExOTAsMTAgKzEyOTAsMTQgQEAKIAkJLy8gVGhpcyBpcyBwYXNzaXZlIG1vZGUsIHNvIHdlIGRvbid0IGNhcmUgd2hldGhlciB3ZSB3ZXJlCiAJCS8vIHRvbGQgYnkgdGhlIGNsaWVudCB0byBjbG9zZS4KIAkJLy8KLQkJKHZvaWQpZGFlbW9uX3NlcnZpY2Vsb29wKHNvY2tjdHJsLCBzb2NrY3RybCwgMCwKLQkJICAgIG51bGxBdXRoQWxsb3dlZCk7Ci0KLQkJY2xvc2Uoc29ja2N0cmwpOworCQljaGFyICpob3N0bGlzdF9jb3B5ID0gc3RyZHVwKGhvc3RsaXN0KTsKKwkJaWYgKGhvc3RsaXN0X2NvcHkgPT0gTlVMTCkKKwkJeworCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiT3V0IG9mIG1lbW9yeSBjb3B5aW5nIHRoZSBob3N0L3BvcnQgbGlzdCIpOworCQkJZXhpdCgwKTsKKwkJfQorCQkodm9pZClkYWVtb25fc2VydmljZWxvb3Aoc29ja2N0cmwsIDAsIGhvc3RsaXN0X2NvcHksCisJCSAgICBudWxsQXV0aEFsbG93ZWQsIHVzZXNfc3NsKTsKIAogCQlleGl0KDApOwogCX0KQEAgLTEyMDEsNyArMTMwNSw3IEBACiAJLy8gSSBhbSB0aGUgcGFyZW50CiAJLy8gQ2xvc2UgdGhlIHNvY2tldCBmb3IgdGhpcyBzZXNzaW9uIChtdXN0IGJlIG9wZW4gb25seSBpbiB0aGUgY2hpbGQpCiAJY2xvc2Vzb2NrZXQoc29ja2N0cmwpOwotI2VuZGlmCisjZW5kaWYgLyogX1dJTjMyICovCiB9CiAKIC8qIQpAQCAtMTIzNSwxMCArMTMzOSw5IEBACiAJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKIAloaW50cy5haV9mYW1pbHkgPSBhY3RpdmVwYXJzLT5haV9mYW1pbHk7CiAKLQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIkNvbm5lY3RpbmcgdG8gaG9zdCAlcywgcG9ydCAlcywgdXNpbmcgcHJvdG9jb2wgJXMiLAotCQkJYWN0aXZlcGFycy0+YWRkcmVzcywgYWN0aXZlcGFycy0+cG9ydCwgKGhpbnRzLmFpX2ZhbWlseSA9PSBBRl9JTkVUKSA/ICJJUHY0IjoKLQkJCShoaW50cy5haV9mYW1pbHkgPT0gQUZfSU5FVDYpID8gIklQdjYiIDogIlVuc3BlY2lmaWVkIik7Ci0JU09DS19ERUJVR19NRVNTQUdFKGVycmJ1Zik7CisJcnBjYXBkX2xvZyhMT0dQUklPX0RFQlVHLCAiQ29ubmVjdGluZyB0byBob3N0ICVzLCBwb3J0ICVzLCB1c2luZyBwcm90b2NvbCAlcyIsCisJICAgIGFjdGl2ZXBhcnMtPmFkZHJlc3MsIGFjdGl2ZXBhcnMtPnBvcnQsIChoaW50cy5haV9mYW1pbHkgPT0gQUZfSU5FVCkgPyAiSVB2NCI6CisJICAgIChoaW50cy5haV9mYW1pbHkgPT0gQUZfSU5FVDYpID8gIklQdjYiIDogIlVuc3BlY2lmaWVkIik7CiAKIAkvLyBJbml0aWFsaXplIGVycmJ1ZgogCW1lbXNldChlcnJidWYsIDAsIHNpemVvZihlcnJidWYpKTsKQEAgLTEyNDYsNyArMTM0OSw3IEBACiAJLy8gRG8gdGhlIHdvcmsKIAlpZiAoc29ja19pbml0YWRkcmVzcyhhY3RpdmVwYXJzLT5hZGRyZXNzLCBhY3RpdmVwYXJzLT5wb3J0LCAmaGludHMsICZhZGRyaW5mbywgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSA9PSAtMSkKIAl7Ci0JCVNPQ0tfREVCVUdfTUVTU0FHRShlcnJidWYpOworCQlycGNhcGRfbG9nKExPR1BSSU9fREVCVUcsICIlcyIsIGVycmJ1Zik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTI1NiwyNSArMTM1OSwzNiBAQAogCiAJCWlmICgoc29ja2N0cmwgPSBzb2NrX29wZW4oYWRkcmluZm8sIFNPQ0tPUEVOX0NMSUVOVCwgMCwgZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFKSkgPT0gSU5WQUxJRF9TT0NLRVQpCiAJCXsKLQkJCVNPQ0tfREVCVUdfTUVTU0FHRShlcnJidWYpOworCQkJcnBjYXBkX2xvZyhMT0dQUklPX0RFQlVHLCAiJXMiLCBlcnJidWYpOwogCi0JCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIkVycm9yIGNvbm5lY3RpbmcgdG8gaG9zdCAlcywgcG9ydCAlcywgdXNpbmcgcHJvdG9jb2wgJXMiLAorCQkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAiRXJyb3IgY29ubmVjdGluZyB0byBob3N0ICVzLCBwb3J0ICVzLCB1c2luZyBwcm90b2NvbCAlcyIsCiAJCQkJCWFjdGl2ZXBhcnMtPmFkZHJlc3MsIGFjdGl2ZXBhcnMtPnBvcnQsIChoaW50cy5haV9mYW1pbHkgPT0gQUZfSU5FVCkgPyAiSVB2NCI6CiAJCQkJCShoaW50cy5haV9mYW1pbHkgPT0gQUZfSU5FVDYpID8gIklQdjYiIDogIlVuc3BlY2lmaWVkIik7CiAKLQkJCVNPQ0tfREVCVUdfTUVTU0FHRShlcnJidWYpOworCQkJcnBjYXBkX2xvZyhMT0dQUklPX0RFQlVHLCAiJXMiLCBlcnJidWYpOwogCiAJCQlzbGVlcF9zZWNzKFJQQ0FQX0FDVElWRV9XQUlUKTsKIAogCQkJY29udGludWU7CiAJCX0KIAotCQlhY3RpdmVjbG9zZSA9IGRhZW1vbl9zZXJ2aWNlbG9vcChzb2NrY3RybCwgc29ja2N0cmwsIDEsCi0JCSAgICBudWxsQXV0aEFsbG93ZWQpOworCQljaGFyICpob3N0bGlzdF9jb3B5ID0gc3RyZHVwKGhvc3RsaXN0KTsKKwkJaWYgKGhvc3RsaXN0X2NvcHkgPT0gTlVMTCkKKwkJeworCQkJcnBjYXBkX2xvZyhMT0dQUklPX0VSUk9SLCAiT3V0IG9mIG1lbW9yeSBjb3B5aW5nIHRoZSBob3N0L3BvcnQgbGlzdCIpOworCQkJYWN0aXZlY2xvc2UgPSAwOworCQkJc29ja19jbG9zZShzb2NrY3RybCwgTlVMTCwgMCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvLworCQkJLy8gZGFlbW9uX3NlcnZpY2Vsb29wKCkgd2lsbCBmcmVlIHRoZSBjb3B5LgorCQkJLy8KKwkJCWFjdGl2ZWNsb3NlID0gZGFlbW9uX3NlcnZpY2Vsb29wKHNvY2tjdHJsLCAxLAorCQkJICAgIGhvc3RsaXN0X2NvcHksIG51bGxBdXRoQWxsb3dlZCwgdXNlc19zc2wpOworCQl9CiAKLQkJc29ja19jbG9zZShzb2NrY3RybCwgTlVMTCwgMCk7Ci0KLQkJLy8gSWYgdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkIGJ5IHRoZSB1c2VyIGV4cGxpY2l0ZWx5LCBkb24ndCB0cnkgdG8gY29ubmVjdCB0byBpdCBhZ2FpbgorCQkvLyBJZiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQgYnkgdGhlIHVzZXIgZXhwbGljaXRseSwgZG9uJ3QgdHJ5IHRvIGNvbm5lY3QgdG8gaXQgYWdhaW4KIAkJLy8ganVzdCBleGl0IHRoZSBwcm9ncmFtCiAJCWlmIChhY3RpdmVjbG9zZSA9PSAxKQogCQkJYnJlYWs7CkBAIC0xMjkwLDkgKzE0MDQsNyBAQAogLy8KIHVuc2lnbmVkIF9fc3RkY2FsbCBtYWluX3Bhc3NpdmVfc2VydmljZWxvb3BfdGhyZWFkKHZvaWQgKnB0cikKIHsKLQlTT0NLRVQgc29ja2N0cmw7Ci0KLQlzb2NrY3RybCA9ICooKFNPQ0tFVCAqKXB0cik7CisJc3RydWN0IHBhcmFtc19jb3B5IHBhcmFtcyA9ICooc3RydWN0IHBhcmFtc19jb3B5ICopcHRyOwogCWZyZWUocHRyKTsKIAogCS8vCkBAIC0xMzAwLDkgKzE0MTIsOCBAQAogCS8vIFRoaXMgaXMgcGFzc2l2ZSBtb2RlLCBzbyB3ZSBkb24ndCBjYXJlIHdoZXRoZXIgd2Ugd2VyZQogCS8vIHRvbGQgYnkgdGhlIGNsaWVudCB0byBjbG9zZS4KIAkvLwotCSh2b2lkKWRhZW1vbl9zZXJ2aWNlbG9vcChzb2NrY3RybCwgc29ja2N0cmwsIDAsIG51bGxBdXRoQWxsb3dlZCk7Ci0KLQlzb2NrX2Nsb3NlKHNvY2tjdHJsLCBOVUxMLCAwKTsKKwkodm9pZClkYWVtb25fc2VydmljZWxvb3AocGFyYW1zLnNvY2tjdHJsLCAwLCBwYXJhbXMuaG9zdGxpc3QsCisJICAgIG51bGxBdXRoQWxsb3dlZCwgdXNlc19zc2wpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9ycGNhcGQvcnBjYXBkLmluZXRkLmNvbmYgYi9ycGNhcGQvcnBjYXBkLmluZXRkLmNvbmYKaW5kZXggZTRmYWQ1ZS4uODY4MjNmMCAxMDA2NDQKLS0tIGEvcnBjYXBkL3JwY2FwZC5pbmV0ZC5jb25mCisrKyBiL3JwY2FwZC9ycGNhcGQuaW5ldGQuY29uZgpAQCAtMSwyICsxIEBACiAyMDAyIHN0cmVhbSB0Y3Agbm93YWl0IHJvb3QgL3Vzci9sb2NhbC9zYmluL3JwY2FwZCBycGNhcGQgLWkKLQpkaWZmIC0tZ2l0IGEvcnBjYXBkL3JwY2FwZC5tYW5hZG1pbi5pbiBiL3JwY2FwZC9ycGNhcGQubWFuYWRtaW4uaW4KaW5kZXggOTJmNjc2Yy4uZWE2MDQ2ZSAxMDA2NDQKLS0tIGEvcnBjYXBkL3JwY2FwZC5tYW5hZG1pbi5pbgorKysgYi9ycGNhcGQvcnBjYXBkLm1hbmFkbWluLmluCkBAIC0zMCw3ICszMCw3IEBACiAuXCIgIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogLlwiICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogLlwiCi0uVEggUlBDQVBEIEBNQU5fQURNSU5fQ09NTUFORFNAICJBcHJpbCAyMCwgMjAxOCIKKy5USCBSUENBUEQgQE1BTl9BRE1JTl9DT01NQU5EU0AgIjEzIEphbnVhcnkgMjAxOSIKIC5TSCBOQU1FCiBycGNhcGQgXC0gY2FwdHVyZSBkYWVtb24gdG8gYmUgY29udHJvbGxlZCBieSBhIHJlbW90ZSBsaWJwY2FwIGFwcGxpY2F0aW9uCiAuU0ggU1lOT1BTSVMKQEAgLTYxLDE2ICs2MSwzMyBAQAogLkIgXC1kCiBdIFsKIC5CIFwtaQotXSBbCi0uQiBcLXMKLS5JIGNvbmZpZ19maWxlCiBdCiAuYnIKIC50aSArOAogWworLkIgXC1ECitdIFsKKy5CIFwtcworLkkgY29uZmlnX2ZpbGUKK10KK1sKIC5CIFwtZgogLkkgY29uZmlnX2ZpbGUKIF0KK1sKKy5CIFwtUworXQorLmJyCisudGkgKzgKK1sKKy5CIFwtSworLkkgc3NsX2tleWZpbGUKK10gWworLkIgXC1YCisuSSBzc2xfY2VydGZpbGUKK10gWworLkIgXC1DCitdCiAuYnIKIC5hZAogLlNIIERFU0NSSVBUSU9OCkBAIC04Miw3ICs5OSw5IEBACiAuTFAKIEluIHBhc3NpdmUgbW9kZSwgdGhlIGNsaWVudCAoZS5nLiwgYSBuZXR3b3JrIHNuaWZmZXIpIGNvbm5lY3RzIHRvCiAuQlIgcnBjYXBkIC4KLUl0IHRoZW4gc2VuZHMgaGVtIHRoZSBhcHByb3ByaWF0ZSBjb21tYW5kcyB0byBzdGFydCB0aGUgY2FwdHVyZS4KK1RoZSBjbGllbnQgdGhlbiBzZW5kcyB0aGUgYXBwcm9wcmlhdGUgY29tbWFuZHMgdG8KKy5CIHJwY2FwZAordG8gc3RhcnQgdGhlIGNhcHR1cmUuCiAuTFAKIEluIGFjdGl2ZSBtb2RlLAogLkIgcnBjYXBkCkBAIC0xMDEsMjYgKzEyMCwzNCBAQAogdGhlIHNhbWUgd2F5IGluIGJvdGggYWN0aXZlIGFuZCBwYXNzaXZlIG1vZGUuCiAuU0ggQ29uZmlndXJhdGlvbiBmaWxlCiAuTFAKLVRoZSB1c2VyIGNhbiBjcmVhdGUgYSBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlIHNhbWUgZm9sZGVyIG9mIHRoZQorVGhlIHVzZXIgY2FuIGNyZWF0ZSBhIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlCiBleGVjdXRhYmxlLCBhbmQgcHV0IHRoZSBjb25maWd1cmF0aW9uIGNvbW1hbmRzIGluIHRoZXJlLiBJbiBvcmRlciBmb3IKLXJwY2FwZCB0byBleGVjdXRlIHRoZSBjb21tYW5kcywgeW91IGhhdmUgdG8gcmVzdGFydCBpdCBvbiBXaW4zMiwgaS5lLgotdGhlIGluaXRpYWxpemF0aW9uIGZpbGUgaXMgcGFyc2VkIG9ubHkgYXQgdGhlIGJlZ2lubmluZykuIFRoZSBVTklYCi12ZXJzaW9uIG9mIHJwY2FwZCB3aWxsIHJlcmVhZCB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHdoZW4gcmVjZWl2aW5nIGEKLUhVUCBzaWduZWwuIEluIHRoYXQgY2FzZSwgYWxsIHRoZSBleGlzdGluZyBjb25uZWN0aW9ucyByZW1haW4gaW4gcGxhY2UsCisuQiBycGNhcGQKK3RvIGV4ZWN1dGUgdGhlIGNvbW1hbmRzLCBpdCBuZWVkcyB0byBiZSByZXN0YXJ0ZWQgb24gV2luMzIsIGkuZS4KK3RoZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgcGFyc2VkIG9ubHkgYXQgdGhlIGJlZ2lubmluZy4gVGhlIFVOSVgKK3ZlcnNpb24gb2YKKy5CIHJwY2FwZAord2lsbCByZXJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB1cG9uIHJlY2VpdmluZyBhCitIVVAgc2lnbmFsLiBJbiB0aGF0IGNhc2UsIGFsbCB0aGUgZXhpc3RpbmcgY29ubmVjdGlvbnMgcmVtYWluIGluIHBsYWNlLAogd2hpbGUgdGhlIG5ldyBjb25uZWN0aW9ucyB3aWxsIGJlIGNyZWF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBuZXcgcGFyYW1ldGVycy4KIC5MUAogSW4gY2FzZSBhIHVzZXIgZG9lcyBub3Qgd2FudCB0byBjcmVhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBtYW51YWxseSwKLXRoZXkgY2FuIGxhdW5jaCBycGNhcGQgd2l0aCB0aGUgcmVxdWVzdGVkIHBhcmFtZXRlcnMgcGx1cyAiLXMgZmlsZW5hbWUiLgordGhleSBjYW4gbGF1bmNoCisuQiBycGNhcGQKK3dpdGggdGhlIGRlc2lyZWQgZmxhZ3MgcGx1cworLkJSICItcyBmaWxlbmFtZSIgLgogUnBjYXBkIHdpbGwgcGFyc2UgYWxsIHRoZSBwYXJhbWV0ZXJzIGFuZCBzYXZlIHRoZW0gaW50byB0aGUgc3BlY2lmaWVkCiBjb25maWd1cmF0aW9uIGZpbGUuCiAuU0ggSW5zdGFsbGluZyBycGNhcGQgb24gV2luMzIKIC5MUAogVGhlIHJlbW90ZSBkYWVtb24gaXMgaW5zdGFsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBpbnN0YWxsaW5nIFdpblBjYXAuCi1UaGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MgcGxhY2VzIHRoZSBycGNhcGQgZmlsZSBpbnRvIHRoZSBXaW5QY2FwIGZvbGRlci4KK1RoZSBpbnN0YWxsYXRpb24gcHJvY2VzcyBwbGFjZXMgdGhlCisuQiBycGNhcGQKK2V4ZWN1dGFibGUgZmlsZSBpbnRvIHRoZSBXaW5QY2FwIGZvbGRlci4KIFRoaXMgZmlsZSBjYW4gYmUgZXhlY3V0ZWQgZWl0aGVyIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgb3IgYXMgYSBzZXJ2aWNlLgogRm9yIGluc3RhbmNlLCB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MgdXBkYXRlcyB0aGUgbGlzdCBvZiBhdmFpbGFibGUKIHNlcnZpY2VzIGxpc3QgYW5kIGl0IGNyZWF0ZXMgYSBuZXcgaXRlbSAoUmVtb3RlIFBhY2tldCBDYXB0dXJlIFByb3RvY29sCi12LjAgKGV4cGVyaW1lbnRhbCkgKS4gIFRvIGF2b2lkIHNlY3VyaXR5IHByb2JsZW1zLCB0aGUgc2VydmljZSBpcwordi4wIChleHBlcmltZW50YWwpKS4gIFRvIGF2b2lkIHNlY3VyaXR5IHByb2JsZW1zLCB0aGUgc2VydmljZSBpcwogaW5hY3RpdmUgYW5kIGl0IGhhcyB0byBiZSBzdGFydGVkIG1hbnVhbGx5IChjb250cm9sIHBhbmVsIC0KIGFkbWluaXN0cmF0aXZlIHRvb2xzIC0gc2VydmljZXMgLSBzdGFydCkuCiAuTFAKQEAgLTEzMiw3ICsxNTksOSBAQAogZmxhZy4KIC5TSCBTdGFydGluZyBycGNhcGQgb24gV2luMzIKIC5MUAotVGhlIHJwY2FwZCBleGVjdXRhYmxlIGNhbiBiZSBsYXVuY2hlZCBkaXJlY3RseSwgaS5lLiAgaXQgY2FuIHJ1biBpbiB0aGUKK1RoZQorLkIgcnBjYXBkCitleGVjdXRhYmxlIGNhbiBiZSBsYXVuY2hlZCBkaXJlY3RseSwgaS5lLiAgaXQgY2FuIHJ1biBpbiB0aGUKIGZvcmVncm91bmQgYXMgd2VsbCAobm90IGFzIGEgZGFlbW9uL3NlcnZpY2UpLiAgVGhlIHByb2NlZHVyZSBpcyBxdWl0ZQogc2ltcGxlOiB5b3UgaGF2ZSB0byBpbnZva2UgdGhlIGV4ZWN1dGFibGUgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHdpdGggYWxsCiB0aGUgcmVxdWVzdGVkIHBhcmFtZXRlcnMgZXhjZXB0IGZvciB0aGUKQEAgLTE3Myw5ICsyMDIsMTAgQEAKIC5CSSAtbCAiIGhvc3RfbGlzdCIKIE9ubHkgYWxsb3cgaG9zdHMgc3BlY2lmaWVkIGluIHRoZQogLkkgaG9zdF9saXN0Ci1maWxlIHRvIGNvbm5lY3QgdG8gdGhpcyBzZXJ2ZXIuCi1Ib3N0cyBhcmUgbGlzdGVkIG9uZSBwZXIgbGluZS4KLVdlIHN1Z2dlc3QgdGhhdCB5b3UgdXNlIHVzZSBob3N0IG5hbWVzIHJhdGhlciB0aGFuIGxpdGVyYWwgSVAgYWRkcmVzc2VzCithcmd1bWVudCB0byBjb25uZWN0IHRvIHRoaXMgc2VydmVyLgorLkkgaG9zdF9saXN0CitpcyBhIGxpc3Qgb2YgaG9zdCBuYW1lcyBvciBJUCBhZGRyZXNzZXMsIHNlcGFyYXRlZCBieSBjb21tYXMuCitXZSBzdWdnZXN0IHRoYXQgeW91IHVzZSBob3N0IG5hbWVzIHJhdGhlciB0aGFuIGxpdGVyYWwgSVAgYWRkcmVzc2VzCiBpbiBvcmRlciB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIGRpZmZlcmVudCBhZGRyZXNzIGZhbWlsaWVzLgogLlRQCiAuQiBcLW4KQEAgLTE5OSwyNSArMjI5LDU3IEBACiBpdCBhY2NlcHRzIHBhc3NpdmUgY29ubmVjdGlvbnMgYXMgd2VsbC4KIC5UUAogLkIgXC1kCi1SdW4gaW4gZGFlbW9uIG1vZGUgKFVOSVggb25seSkgb3IgYXMgYSBzZXJ2aWNlIChXaW4zMiBvbmx5KQotV2FybmluZyAoV2luMzIpOiB0aGlzIHN3aXRjaCBpcyBwcm92aWRlZCBhdXRvbWF0aWNhbGx5IHdoZW4KK1J1biBpbiBkYWVtb24gbW9kZSAoVU5JWCBvbmx5KSBvciBhcyBhIHNlcnZpY2UgKFdpbjMyIG9ubHkpLgorV2FybmluZyAoV2luMzIpOiB0aGlzIGZsYWcgaXMgc3BlY2lmaWVkIGF1dG9tYXRpY2FsbHkgd2hlbgogdGhlIHNlcnZpY2UgaXMgc3RhcnRlZCBmcm9tIHRoZSBjb250cm9sIHBhbmVsLgogLlRQCiAuQiBcLWkKIFJ1biBpbiBpbmV0ZCBtb2RlIChVTklYIG9ubHkpLgogLlRQCisuQiBcLUQKK0xvZyBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisuVFAKIC5CSSBcLXMgIiBjb25maWdfZmlsZSIKIFNhdmUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiB0bwotLklSIGNvbmZpZ19maWxlIC4KKy5JIGNvbmZpZ19maWxlCitpbiB0aGUgZm9ybWF0IHNwZWNpZmllZCBieQorLkJSIHJwY2FwZC1jb25maWcgKEBNQU5fRklMRV9GT1JNQVRTQCkuCiAuVFAKIC5CSSBcLWYgIiBjb25maWdfZmlsZSIKIExvYWQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBmcm9tCi0uSVIgY29uZmlnX2ZpbGUgOwotYWxsIHN3aXRjaGVzIHNwZWNpZmllZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgYXJlIGlnbm9yZWQuCisuSSBjb25maWdfZmlsZQoraW4gdGhlIGZvcm1hdCBzcGVjaWZpZWQgYnkKKy5CUiBycGNhcGQtY29uZmlnIChATUFOX0ZJTEVfRk9STUFUU0ApCithbmQgaWdub3JlIGFsbCBmbGFncyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KIC5UUAogLkIgXC1oCiBQcmludCB0aGlzIGhlbHAgc2NyZWVuLgorLkxQCitJZgorLkIgcnBjYXBkCit3YXMgY29tcGlsZWQgd2l0aCBTU0wgc3VwcG9ydCwgdGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhbHNvCithdmFpbGFibGU6CisuVFAKKy5CIFwtUworUmVxdWlyZSB0aGF0IFNTTCBiZSB1c2VkIG9uIGNvbm5lY3Rpb25zLgorLlRQCisuQiBcLUMKK1dpdGggU1NMIGVuYWJsZWQsIFhYWCAtIEknbSBub3Qgc3VyZSBob3cgKmZldGNoaW5nKiB0aGUgbGlzdCBvZgorY29tcHJlc3Npb24gbWVjaGFuaXNtcyBkb2VzIGFueXRoaW5nIHRvIGNvbXByZXNzaW9uLgorLlRQCisuQiBcLVMKKy5JIHNzbF9rZXlmaWxlCitXaXRoIFNTTCBlbmFibGVkLCB1c2UKKy5JIHNzbF9rZXlmaWxlCithcyB0aGUgU1NMIGtleSBmaWxlLgorLlRQCisuQiBcLVgKKy5JIHNzbF9jZXJ0ZmlsZQorV2l0aCBTU0wgZW5hYmxlZCwgdXNlCisuSSBzc2xfY2VydGZpbGUKK2FzIHRoZSBTU0wgY2VydGlmaWNhdGUgZmlsZS4KIC5icgogLmFkCiAuU0ggIlNFRSBBTFNPIgotcGNhcCgzUENBUCkKKy5CUiBwY2FwICgzUENBUCksCisuQlIgcnBjYXBkLWNvbmZpZyAoQE1BTl9GSUxFX0ZPUk1BVFNAKQpkaWZmIC0tZ2l0IGEvcnBjYXBkL3dpbjMyLXN2Yy5jIGIvcnBjYXBkL3dpbjMyLXN2Yy5jCmluZGV4IDhjYzdkYzkuLjQ5YjY4MDQgMTAwNjQ0Ci0tLSBhL3JwY2FwZC93aW4zMi1zdmMuYworKysgYi9ycGNhcGQvd2luMzItc3ZjLmMKQEAgLTMzLDUyICszMyw0MyBAQAogCiAjaW5jbHVkZSAicnBjYXBkLmgiCiAjaW5jbHVkZSA8cGNhcC5oPgkJLy8gZm9yIFBDQVBfRVJSQlVGX1NJWkUKLSNpbmNsdWRlICJzb2NrdXRpbHMuaCIJCS8vIGZvciBTT0NLX0RFQlVHX01FU1NBR0UKKyNpbmNsdWRlICJmbXR1dGlscy5oIgogI2luY2x1ZGUgInBvcnRhYmlsaXR5LmgiCiAjaW5jbHVkZSAiZmlsZWNvbmYuaCIKKyNpbmNsdWRlICJsb2cuaCIKKworI2luY2x1ZGUgIndpbjMyLXN2Yy5oIgkvLyBmb3IgV2luMzIgc2VydmljZSBzdHVmZgogCiBzdGF0aWMgU0VSVklDRV9TVEFUVVNfSEFORExFIHNlcnZpY2Vfc3RhdHVzX2hhbmRsZTsKIHN0YXRpYyBTRVJWSUNFX1NUQVRVUyBzZXJ2aWNlX3N0YXR1czsKIAotdm9pZCBzdmNfZ2V0ZXJyKGNoYXIgKnN0cik7CiBzdGF0aWMgdm9pZCBXSU5BUEkgc3ZjX21haW4oRFdPUkQgYXJnYywgY2hhciAqKmFyZ3YpOworc3RhdGljIHZvaWQgV0lOQVBJIHN2Y19jb250cm9sX2hhbmRsZXIoRFdPUkQgT3Bjb2RlKTsKIHN0YXRpYyB2b2lkIHVwZGF0ZV9zdmNfc3RhdHVzKERXT1JEIHN0YXRlLCBEV09SRCBwcm9ncmVzc19pbmRpY2F0b3IpOwogCi1pbnQgc3ZjX3N0YXJ0KHZvaWQpCitCT09MIHN2Y19zdGFydCh2b2lkKQogewotCWludCByYzsKKwlCT09MIHJjOwogCVNFUlZJQ0VfVEFCTEVfRU5UUlkgc3RlW10gPQogCXsKIAkJeyBQUk9HUkFNX05BTUUsIHN2Y19tYWluIH0sCiAJCXsgTlVMTCwgTlVMTCB9CiAJfTsKKwljaGFyIHN0cmluZ1tQQ0FQX0VSUkJVRl9TSVpFXTsKIAogCS8vIFRoaXMgY2FsbCBpcyBibG9ja2luZy4gQSBuZXcgdGhyZWFkIGlzIGNyZWF0ZWQgd2hpY2ggd2lsbCBsYXVuY2gKIAkvLyB0aGUgc3ZjX21haW4oKSBmdW5jdGlvbgotCWlmICggKHJjID0gU3RhcnRTZXJ2aWNlQ3RybERpc3BhdGNoZXIoc3RlKSkgPT0gMCkKLQkJc3ZjX2dldGVycigiU3RhcnRTZXJ2aWNlQ3RybERpc3BhdGNoZXIoKSIpOworCWlmICgocmMgPSBTdGFydFNlcnZpY2VDdHJsRGlzcGF0Y2hlcihzdGUpKSA9PSAwKSB7CisJCXBjYXBfZm10X2Vycm1zZ19mb3Jfd2luMzJfZXJyKHN0cmluZywgc2l6ZW9mIChzdHJpbmcpLAorCQkgICAgR2V0TGFzdEVycm9yKCksICJTdGFydFNlcnZpY2VDdHJsRGlzcGF0Y2hlcigpIGZhaWxlZCIpOworCQlycGNhcGRfbG9nKExPR1BSSU9fRVJST1IsICIlcyIsIHN0cmluZyk7CisJfQogCiAJcmV0dXJuIHJjOyAvLyBGQUxTRSBpZiB0aGlzIGlzIG5vdCBzdGFydGVkIGFzIGEgc2VydmljZQogfQogCi12b2lkIHN2Y19nZXRlcnIoY2hhciAqc3RyKQotewotCWNoYXIgbWVzc2FnZVtQQ0FQX0VSUkJVRl9TSVpFXTsKLQljaGFyIHN0cmluZ1tQQ0FQX0VSUkJVRl9TSVpFXTsKLQlpbnQgdmFsOwotCi0JdmFsID0gR2V0TGFzdEVycm9yKCk7Ci0JRm9ybWF0TWVzc2FnZUEoRk9STUFUX01FU1NBR0VfRlJPTV9TWVNURU0gfCBGT1JNQVRfTUVTU0FHRV9JR05PUkVfSU5TRVJUUyB8Ci0JCQkJICBGT1JNQVRfTUVTU0FHRV9NQVhfV0lEVEhfTUFTSywKLQkJCQkgIE5VTEwsIHZhbCwgTUFLRUxBTkdJRChMQU5HX05FVVRSQUwsIFNVQkxBTkdfREVGQVVMVCksCi0JCQkJICAoTFBTVFIpIHN0cmluZywgUENBUF9FUlJCVUZfU0laRSwgTlVMTCk7Ci0KLQlwY2FwX3NucHJpbnRmKG1lc3NhZ2UsIFBDQVBfRVJSQlVGX1NJWkUsICIlcyBmYWlsZWQgd2l0aCBlcnJvciAlZDogJXMiLCBzdHIsIHZhbCwgc3RyaW5nKTsKLQotCVNPQ0tfREVCVUdfTUVTU0FHRShtZXNzYWdlKTsKLX0KLQotdm9pZCBXSU5BUEkgc3ZjX2NvbnRyb2xfaGFuZGxlcihEV09SRCBPcGNvZGUpCitzdGF0aWMgdm9pZCBXSU5BUEkKK3N2Y19jb250cm9sX2hhbmRsZXIoRFdPUkQgT3Bjb2RlKQogewogCXN3aXRjaChPcGNvZGUpCiAJewpAQCAtMTQzLDcgKzEzNCw4IEBACiAJcmV0dXJuOwogfQogCi12b2lkIFdJTkFQSSBzdmNfbWFpbihEV09SRCBhcmdjLCBjaGFyICoqYXJndikKK3N0YXRpYyB2b2lkIFdJTkFQSQorc3ZjX21haW4oRFdPUkQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJc2VydmljZV9zdGF0dXNfaGFuZGxlID0gUmVnaXN0ZXJTZXJ2aWNlQ3RybEhhbmRsZXIoUFJPR1JBTV9OQU1FLCBzdmNfY29udHJvbF9oYW5kbGVyKTsKIApkaWZmIC0tZ2l0IGEvcnBjYXBkL3dpbjMyLXN2Yy5oIGIvcnBjYXBkL3dpbjMyLXN2Yy5oCmluZGV4IDNmNTExZDIuLjYwYjI1ZWMgMTAwNjQ0Ci0tLSBhL3JwY2FwZC93aW4zMi1zdmMuaAorKysgYi9ycGNhcGQvd2luMzItc3ZjLmgKQEAgLTMwLDQgKzMwLDQgQEAKICAqCiAgKi8KIAotaW50IHN2Y19zdGFydCh2b2lkKTsKK0JPT0wgc3ZjX3N0YXJ0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvc2F2ZWZpbGUuYyBiL3NhdmVmaWxlLmMKaW5kZXggZWM0NGVmNC4uZDA0YjkxNyAxMDA2NDQKLS0tIGEvc2F2ZWZpbGUuYworKysgYi9zYXZlZmlsZS5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4gLyogZm9yIElOVF9NQVggKi8KIAogI2luY2x1ZGUgInBjYXAtaW50LmgiCiAKQEAgLTUyLDIyICs1MywyMyBAQAogCiAjaW5jbHVkZSAic2YtcGNhcC5oIgogI2luY2x1ZGUgInNmLXBjYXBuZy5oIgorI2luY2x1ZGUgInBjYXAtY29tbW9uLmgiCisjaW5jbHVkZSAiY2hhcmNvbnYuaCIKIAogI2lmZGVmIF9XSU4zMgogLyoKLSAqIFRoZXNlIGFyZW4ndCBleHBvcnRlZCBvbiBXaW5kb3dzLCBiZWNhdXNlIHRoZXkgd291bGQgb25seSB3b3JrIGlmIGJvdGgKLSAqIFdpblBjYXAgYW5kIHRoZSBjb2RlIHVzaW5nIGl0IHdlcmUgdG8gdXNlIHRoZSBVbml2ZXJzYWwgQ1JUOyBvdGhlcndpc2UsCi0gKiBhIEZJTEUgc3RydWN0dXJlIGluIFdpblBjYXAgYW5kIGEgRklMRSBzdHJ1Y3R1cmUgaW4gdGhlIGNvZGUgdXNpbmcgaXQKKyAqIFRoaXMgaXNuJ3QgZXhwb3J0ZWQgb24gV2luZG93cywgYmVjYXVzZSBpdCB3b3VsZCBvbmx5IHdvcmsgaWYgYm90aAorICogV2luUGNhcC9OcGNhcCBhbmQgdGhlIGNvZGUgdXNpbmcgaXQgd2VyZSB0byB1c2UgdGhlIFVuaXZlcnNhbCBDUlQ7IG90aGVyd2lzZSwKKyAqIGEgRklMRSBzdHJ1Y3R1cmUgaW4gV2luUGNhcC9OcGNhcCBhbmQgYSBGSUxFIHN0cnVjdHVyZSBpbiB0aGUgY29kZSB1c2luZyBpdAogICogY291bGQgYmUgZGlmZmVyZW50IGlmIHRoZXkncmUgdXNpbmcgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBDIHJ1bnRpbWUuCiAgKgotICogSW5zdGVhZCwgcGNhcC9wY2FwLmggZGVmaW5lcyB0aGVtIGFzIG1hY3JvcyB0aGF0IHdyYXAgdGhlIGhvcGVuIHZlcnNpb25zLAotICogd2l0aCB0aGUgd3JhcHBlcnMgY2FsbGluZyBfZmlsZW5vKCkgYW5kIF9nZXRfb3NmaGFuZGxlKCkgdGhlbXNlbHZlcywKLSAqIHNvIHRoYXQgdGhleSBjb252ZXJ0IHRoZSBhcHByb3ByaWF0ZSBDUlQgdmVyc2lvbidzIEZJTEUgc3RydWN0dXJlIHRvCisgKiBJbnN0ZWFkLCBwY2FwL3BjYXAuaCBkZWZpbmVzIGl0IGFzIGEgbWFjcm8gdGhhdCB3cmFwcyB0aGUgaG9wZW4gdmVyc2lvbiwKKyAqIHdpdGggdGhlIHdyYXBwZXIgY2FsbGluZyBfZmlsZW5vKCkgYW5kIF9nZXRfb3NmaGFuZGxlKCkgdGhlbXNlbHZlcywKKyAqIHNvIHRoYXQgaXQgY29udmVydCB0aGUgYXBwcm9wcmlhdGUgQ1JUIHZlcnNpb24ncyBGSUxFIHN0cnVjdHVyZSB0bwogICogYSBIQU5ETEUgKHdoaWNoIGlzIE9TLWRlZmluZWQsIG5vdCBDUlQtZGVmaW5lZCwgYW5kIGlzIHBhcnQgb2YgdGhlIFdpbjMyCiAgKiBhbmQgV2luNjQgQUJJcykuCiAgKi8KIHN0YXRpYyBwY2FwX3QgKnBjYXBfZm9wZW5fb2ZmbGluZV93aXRoX3RzdGFtcF9wcmVjaXNpb24oRklMRSAqLCB1X2ludCwgY2hhciAqKTsKLXN0YXRpYyBwY2FwX3QgKnBjYXBfZm9wZW5fb2ZmbGluZShGSUxFICosIGNoYXIgKik7CiAjZW5kaWYKIAogLyoKQEAgLTEwNCw3ICsxMDYsNyBAQAogCSAqIGFzIGl0IHdvdWxkIGhhdmUgdG8gaGFuZGxlIHJlYWRpbmcgcGFydGlhbCBwYWNrZXRzIGFuZAogCSAqIGtlZXBpbmcgdGhlIHN0YXRlIG9mIHRoZSByZWFkLikKIAkgKi8KLQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJICAgICJTYXZlZmlsZXMgY2Fubm90IGJlIHB1dCBpbnRvIG5vbi1ibG9ja2luZyBtb2RlIik7CiAJcmV0dXJuICgtMSk7CiB9CkBAIC0xMTIsNDAgKzExNCw0MCBAQAogc3RhdGljIGludAogc2Zfc3RhdHMocGNhcF90ICpwLCBzdHJ1Y3QgcGNhcF9zdGF0ICpwcyBfVV8pCiB7Ci0JcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCSAgICAiU3RhdGlzdGljcyBhcmVuJ3QgYXZhaWxhYmxlIGZyb20gc2F2ZWZpbGVzIik7CiAJcmV0dXJuICgtMSk7CiB9CiAKICNpZmRlZiBfV0lOMzIKIHN0YXRpYyBzdHJ1Y3QgcGNhcF9zdGF0ICoKLXNmX3N0YXRzX2V4KHBjYXBfdCAqcCwgaW50ICpzaXplKQorc2Zfc3RhdHNfZXgocGNhcF90ICpwLCBpbnQgKnNpemUgX1VfKQogewotCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkgICAgIlN0YXRpc3RpY3MgYXJlbid0IGF2YWlsYWJsZSBmcm9tIHNhdmVmaWxlcyIpOwogCXJldHVybiAoTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQKLXNmX3NldGJ1ZmYocGNhcF90ICpwLCBpbnQgZGltKQorc2Zfc2V0YnVmZihwY2FwX3QgKnAsIGludCBkaW0gX1VfKQogewotCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkgICAgIlRoZSBrZXJuZWwgYnVmZmVyIHNpemUgY2Fubm90IGJlIHNldCB3aGlsZSByZWFkaW5nIGZyb20gYSBmaWxlIik7CiAJcmV0dXJuICgtMSk7CiB9CiAKIHN0YXRpYyBpbnQKLXNmX3NldG1vZGUocGNhcF90ICpwLCBpbnQgbW9kZSkKK3NmX3NldG1vZGUocGNhcF90ICpwLCBpbnQgbW9kZSBfVV8pCiB7Ci0JcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCSAgICAiaW1wb3NzaWJsZSB0byBzZXQgbW9kZSB3aGlsZSByZWFkaW5nIGZyb20gYSBmaWxlIik7CiAJcmV0dXJuICgtMSk7CiB9CiAKIHN0YXRpYyBpbnQKLXNmX3NldG1pbnRvY29weShwY2FwX3QgKnAsIGludCBzaXplKQorc2Zfc2V0bWludG9jb3B5KHBjYXBfdCAqcCwgaW50IHNpemUgX1VfKQogewotCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkgICAgIlRoZSBtaW50b2NvcHkgcGFyYW1ldGVyIGNhbm5vdCBiZSBzZXQgd2hpbGUgcmVhZGluZyBmcm9tIGEgZmlsZSIpOwogCXJldHVybiAoLTEpOwogfQpAQCAtMTUzLDcgKzE1NSw3IEBACiBzdGF0aWMgSEFORExFCiBzZl9nZXRldmVudChwY2FwX3QgKnBjYXApCiB7Ci0JKHZvaWQpcGNhcF9zbnByaW50ZihwY2FwLT5lcnJidWYsIHNpemVvZihwY2FwLT5lcnJidWYpLAorCSh2b2lkKXNucHJpbnRmKHBjYXAtPmVycmJ1Ziwgc2l6ZW9mKHBjYXAtPmVycmJ1ZiksCiAJICAgICJUaGUgcmVhZCBldmVudCBjYW5ub3QgYmUgcmV0cmlldmVkIHdoaWxlIHJlYWRpbmcgZnJvbSBhIGZpbGUiKTsKIAlyZXR1cm4gKElOVkFMSURfSEFORExFX1ZBTFVFKTsKIH0KQEAgLTE2Miw3ICsxNjQsNyBAQAogc2Zfb2lkX2dldF9yZXF1ZXN0KHBjYXBfdCAqcCwgYnBmX3VfaW50MzIgb2lkIF9VXywgdm9pZCAqZGF0YSBfVV8sCiAgICAgc2l6ZV90ICpsZW5wIF9VXykKIHsKLQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJICAgICJBbiBPSUQgZ2V0IHJlcXVlc3QgY2Fubm90IGJlIHBlcmZvcm1lZCBvbiBhIGZpbGUiKTsKIAlyZXR1cm4gKFBDQVBfRVJST1IpOwogfQpAQCAtMTcxLDU0ICsxNzMsNTQgQEAKIHNmX29pZF9zZXRfcmVxdWVzdChwY2FwX3QgKnAsIGJwZl91X2ludDMyIG9pZCBfVV8sIGNvbnN0IHZvaWQgKmRhdGEgX1VfLAogICAgIHNpemVfdCAqbGVucCBfVV8pCiB7Ci0JcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCSAgICAiQW4gT0lEIHNldCByZXF1ZXN0IGNhbm5vdCBiZSBwZXJmb3JtZWQgb24gYSBmaWxlIik7CiAJcmV0dXJuIChQQ0FQX0VSUk9SKTsKIH0KIAogc3RhdGljIHVfaW50Ci1zZl9zZW5kcXVldWVfdHJhbnNtaXQocGNhcF90ICpwLCBwY2FwX3NlbmRfcXVldWUgKnF1ZXVlLCBpbnQgc3luYykKK3NmX3NlbmRxdWV1ZV90cmFuc21pdChwY2FwX3QgKnAsIHBjYXBfc2VuZF9xdWV1ZSAqcXVldWUgX1VfLCBpbnQgc3luYyBfVV8pCiB7Ci0Jc3RybGNweShwLT5lcnJidWYsICJTZW5kaW5nIHBhY2tldHMgaXNuJ3Qgc3VwcG9ydGVkIG9uIHNhdmVmaWxlcyIsCisJcGNhcF9zdHJsY3B5KHAtPmVycmJ1ZiwgIlNlbmRpbmcgcGFja2V0cyBpc24ndCBzdXBwb3J0ZWQgb24gc2F2ZWZpbGVzIiwKIAkgICAgUENBUF9FUlJCVUZfU0laRSk7CiAJcmV0dXJuICgwKTsKIH0KIAogc3RhdGljIGludAotc2Zfc2V0dXNlcmJ1ZmZlcihwY2FwX3QgKnAsIGludCBzaXplKQorc2Zfc2V0dXNlcmJ1ZmZlcihwY2FwX3QgKnAsIGludCBzaXplIF9VXykKIHsKLQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJICAgICJUaGUgdXNlciBidWZmZXIgY2Fubm90IGJlIHNldCB3aGVuIHJlYWRpbmcgZnJvbSBhIGZpbGUiKTsKIAlyZXR1cm4gKC0xKTsKIH0KIAogc3RhdGljIGludAotc2ZfbGl2ZV9kdW1wKHBjYXBfdCAqcCwgY2hhciAqZmlsZW5hbWUsIGludCBtYXhzaXplLCBpbnQgbWF4cGFja3MpCitzZl9saXZlX2R1bXAocGNhcF90ICpwLCBjaGFyICpmaWxlbmFtZSBfVV8sIGludCBtYXhzaXplIF9VXywgaW50IG1heHBhY2tzIF9VXykKIHsKLQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJICAgICJMaXZlIHBhY2tldCBkdW1waW5nIGNhbm5vdCBiZSBwZXJmb3JtZWQgd2hlbiByZWFkaW5nIGZyb20gYSBmaWxlIik7CiAJcmV0dXJuICgtMSk7CiB9CiAKIHN0YXRpYyBpbnQKLXNmX2xpdmVfZHVtcF9lbmRlZChwY2FwX3QgKnAsIGludCBzeW5jKQorc2ZfbGl2ZV9kdW1wX2VuZGVkKHBjYXBfdCAqcCwgaW50IHN5bmMgX1VfKQogewotCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkgICAgIkxpdmUgcGFja2V0IGR1bXBpbmcgY2Fubm90IGJlIHBlcmZvcm1lZCBvbiBhIHBjYXBfb3Blbl9kZWFkIHBjYXBfdCIpOwogCXJldHVybiAoLTEpOwogfQogCiBzdGF0aWMgUEFpcnBjYXBIYW5kbGUKLXNmX2dldF9haXJwY2FwX2hhbmRsZShwY2FwX3QgKnBjYXApCitzZl9nZXRfYWlycGNhcF9oYW5kbGUocGNhcF90ICpwY2FwIF9VXykKIHsKIAlyZXR1cm4gKE5VTEwpOwogfQogI2VuZGlmCiAKIHN0YXRpYyBpbnQKLXNmX2luamVjdChwY2FwX3QgKnAsIGNvbnN0IHZvaWQgKmJ1ZiBfVV8sIHNpemVfdCBzaXplIF9VXykKK3NmX2luamVjdChwY2FwX3QgKnAsIGNvbnN0IHZvaWQgKmJ1ZiBfVV8sIGludCBzaXplIF9VXykKIHsKLQlzdHJsY3B5KHAtPmVycmJ1ZiwgIlNlbmRpbmcgcGFja2V0cyBpc24ndCBzdXBwb3J0ZWQgb24gc2F2ZWZpbGVzIiwKKwlwY2FwX3N0cmxjcHkocC0+ZXJyYnVmLCAiU2VuZGluZyBwYWNrZXRzIGlzbid0IHN1cHBvcnRlZCBvbiBzYXZlZmlsZXMiLAogCSAgICBQQ0FQX0VSUkJVRl9TSVpFKTsKIAlyZXR1cm4gKC0xKTsKIH0KQEAgLTIzMCw3ICsyMzIsNyBAQAogc3RhdGljIGludAogc2Zfc2V0ZGlyZWN0aW9uKHBjYXBfdCAqcCwgcGNhcF9kaXJlY3Rpb25fdCBkIF9VXykKIHsKLQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1Ziwgc2l6ZW9mKHAtPmVycmJ1ZiksCisJc25wcmludGYocC0+ZXJyYnVmLCBzaXplb2YocC0+ZXJyYnVmKSwKIAkgICAgIlNldHRpbmcgZGlyZWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gc2F2ZWZpbGVzIik7CiAJcmV0dXJuICgtMSk7CiB9CkBAIC0yNDUsNiArMjQ3LDk0IEBACiAJcGNhcF9mcmVlY29kZSgmcC0+ZmNvZGUpOwogfQogCisjaWZkZWYgX1dJTjMyCisvKgorICogV3JhcHBlciBmb3IgZm9wZW4oKSBhbmQgX3dmb3BlbigpLgorICoKKyAqIElmIHdlJ3JlIGluIFVURi04IG1vZGUsIG1hcCB0aGUgcGF0aG5hbWUgZnJvbSBVVEYtOCB0byBVVEYtMTZMRSBhbmQKKyAqIGNhbGwgX3dmb3BlbigpLgorICoKKyAqIElmIHdlJ3JlIG5vdCwganVzdCB1c2UgZm9wZW4oKTsgdGhhdCdsbCB0cmVhdCBpdCBhcyBiZWluZyBpbiB0aGUKKyAqIGxvY2FsIGNvZGUgcGFnZS4KKyAqLworRklMRSAqCitjaGFyc2V0X2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCit7CisJd2NoYXJfdCAqdXRmMTZfcGF0aDsKKyNkZWZpbmUgTUFYX01PREVfTEVOCTE2CisJd2NoYXJfdCB1dGYxNl9tb2RlW01BWF9NT0RFX0xFTisxXTsKKwlpbnQgaTsKKwljaGFyIGM7CisJRklMRSAqZnA7CisJaW50IHNhdmVfZXJybm87CisKKwlpZiAocGNhcF91dGZfOF9tb2RlKSB7CisJCS8qCisJCSAqIE1hcCBmcm9tIFVURi04IHRvIFVURi0xNkxFLgorCQkgKiBGYWlsIGlmIHRoZXJlIGFyZSBpbnZhbGlkIGNoYXJhY3RlcnMgaW4gdGhlIGlucHV0CisJCSAqIHN0cmluZywgcmF0aGVyIHRoYW4gY29udmVydGluZyB0aGVtIHRvIFJFUExBQ0VNRU5UCisJCSAqIENIQVJBQ1RFUjsgdGhlIGxhdHRlciBpcyBhcHByb3ByaWF0ZSBmb3Igc3RyaW5ncworCQkgKiB0byBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIsIGJ1dCBmb3IgZmlsZSBuYW1lcworCQkgKiB5b3UganVzdCB3YW50IHRoZSBhdHRlbXB0IHRvIG9wZW4gdGhlIGZpbGUgdG8gZmFpbC4KKwkJICovCisJCXV0ZjE2X3BhdGggPSBjcF90b191dGZfMTZsZShDUF9VVEY4LCBwYXRoLAorCQkgICAgTUJfRVJSX0lOVkFMSURfQ0hBUlMpOworCQlpZiAodXRmMTZfcGF0aCA9PSBOVUxMKSB7CisJCQkvKgorCQkJICogRXJyb3IuICBBc3N1bWUgZXJybm8gaGFzIGJlZW4gc2V0LgorCQkJICoKKwkJCSAqIFhYWCAtIHdoYXQgYWJvdXQgV2luZG93cyBlcnJvcnM/CisJCQkgKi8KKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKworCQkvKgorCQkgKiBOb3cgY29udmVydCB0aGUgbW9kZSB0byBVVEYtMTZMRSBhcyB3ZWxsLgorCQkgKiBXZSBhc3N1bWUgdGhlIG1vZGUgaXMgQVNDSUksIGFuZCB0aGF0CisJCSAqIGl0J3Mgc2hvcnQsIHNvIHRoYXQncyBlYXN5LgorCQkgKi8KKwkJZm9yIChpID0gMDsgKGMgPSAqbW9kZSkgIT0gJ1wwJzsgaSsrLCBtb2RlKyspIHsKKwkJCWlmIChjID4gMHg3RikgeworCQkJCS8qIE5vdCBhbiBBU0NJSSBjaGFyYWN0ZXI7IGZhaWwgd2l0aCBFSU5WQUwuICovCisJCQkJZnJlZSh1dGYxNl9wYXRoKTsKKwkJCQllcnJubyA9IEVJTlZBTDsKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCQkJaWYgKGkgPj0gTUFYX01PREVfTEVOKSB7CisJCQkJLyogVGhlIG1vZGUgc3RyaW5nIGlzIGxvbmdlciB0aGFuIHdlIGFsbG93LiAqLworCQkJCWZyZWUodXRmMTZfcGF0aCk7CisJCQkJZXJybm8gPSBFSU5WQUw7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJCXV0ZjE2X21vZGVbaV0gPSBjOworCQl9CisJCXV0ZjE2X21vZGVbaV0gPSAnXDAnOworCisJCS8qCisJCSAqIE9LLCB3ZSBoYXZlIFVURi0xNkxFIHN0cmluZ3M7IGhhbmQgdGhlbSB0bworCQkgKiBfd2ZvcGVuKCkuCisJCSAqLworCQlmcCA9IF93Zm9wZW4odXRmMTZfcGF0aCwgdXRmMTZfbW9kZSk7CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIGZyZWVpbmcgdGhlIFVURi0xNkxFIHN0cmluZyBkb2Vzbid0CisJCSAqIG92ZXJ3cml0ZSB0aGUgZXJyb3IgY29kZSB3ZSBnb3QgZnJvbSBfd2ZvcGVuKCkuCisJCSAqLworCQlzYXZlX2Vycm5vID0gZXJybm87CisJCWZyZWUodXRmMTZfcGF0aCk7CisJCWVycm5vID0gc2F2ZV9lcnJubzsKKworCQlyZXR1cm4gKGZwKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBUaGlzIHRha2VzIHN0cmluZ3MgaW4gdGhlIGxvY2FsIGNvZGUgcGFnZSBhcyBhbgorCQkgKiBhcmd1bWVudC4KKwkJICovCisJCXJldHVybiAoZm9wZW4ocGF0aCwgbW9kZSkpOworCX0KK30KKyNlbmRpZgorCiBwY2FwX3QgKgogcGNhcF9vcGVuX29mZmxpbmVfd2l0aF90c3RhbXBfcHJlY2lzaW9uKGNvbnN0IGNoYXIgKmZuYW1lLCB1X2ludCBwcmVjaXNpb24sCiAJCQkJCWNoYXIgKmVycmJ1ZikKQEAgLTI1MywxMyArMzQzLDE4IEBACiAJcGNhcF90ICpwOwogCiAJaWYgKGZuYW1lID09IE5VTEwpIHsKLQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICJBIG51bGwgcG9pbnRlciB3YXMgc3VwcGxpZWQgYXMgdGhlIGZpbGUgbmFtZSIpOwogCQlyZXR1cm4gKE5VTEwpOwogCX0KIAlpZiAoZm5hbWVbMF0gPT0gJy0nICYmIGZuYW1lWzFdID09ICdcMCcpCiAJewogCQlmcCA9IHN0ZGluOworCQlpZiAoc3RkaW4gPT0gTlVMTCkgeworCQkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJICAgICJUaGUgc3RhbmRhcmQgaW5wdXQgaXMgbm90IG9wZW4iKTsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KICNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChNU0RPUykKIAkJLyoKIAkJICogV2UncmUgcmVhZGluZyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgc28gcHV0IGl0IGluIGJpbmFyeQpAQCAtMjcwLDEyICszNjUsMTYgQEAKIAl9CiAJZWxzZSB7CiAJCS8qCisJCSAqIFVzZSBjaGFyc2V0X2ZvcGVuKCk7IG9uIFdpbmRvd3MsIGl0IHRlc3RzIHdoZXRoZXIgd2UncmUKKwkJICogaW4gImxvY2FsIGNvZGUgcGFnZSIgb3IgIlVURi04IiBtb2RlLCBhbmQgdHJlYXRzIHRoZQorCQkgKiBwYXRobmFtZSBhcHByb3ByaWF0ZWx5LCBhbmQgb24gb3RoZXIgcGxhdGZvcm1zLCBpdCBqdXN0CisJCSAqIHdyYXBzIGZvcGVuKCkuCisJCSAqCiAJCSAqICJiIiBpcyBzdXBwb3J0ZWQgYXMgb2YgQzkwLCBzbyAqYWxsKiBVTipYZXMgc2hvdWxkCi0JCSAqIHN1cHBvcnQgaXQsIGV2ZW4gdGhvdWdoIGl0IGRvZXMgbm90aGluZy4gIEl0J3MKLQkJICogcmVxdWlyZWQgb24gV2luZG93cywgYXMgdGhlIGZpbGUgaXMgYSBiaW5hcnkgZmlsZQotCQkgKiBhbmQgbXVzdCBiZSByZWFkIGluIGJpbmFyeSBtb2RlLgorCQkgKiBzdXBwb3J0IGl0LCBldmVuIHRob3VnaCBpdCBkb2VzIG5vdGhpbmcuICBGb3IgTVMtRE9TLAorCQkgKiB3ZSBhZ2FpbiBuZWVkIGl0LgogCQkgKi8KLQkJZnAgPSBmb3BlbihmbmFtZSwgInJiIik7CisJCWZwID0gY2hhcnNldF9mb3BlbihmbmFtZSwgInJiIik7CiAJCWlmIChmcCA9PSBOVUxMKSB7CiAJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAgICBlcnJubywgIiVzIiwgZm5hbWUpOwpAQCAtMzE3LDYgKzQxNiw3IEBACiAJewogCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgIGVycm5vLCAiX2Zkb3BlbiIpOworCQlfY2xvc2UoZmQpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTMzMSw3ICs0MzEsMzQgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgcGNhcF90ICooKmNoZWNrX2hlYWRlcnNbXSkoYnBmX3VfaW50MzIsIEZJTEUgKiwgdV9pbnQsIGNoYXIgKiwgaW50ICopID0geworLyoKKyAqIEdpdmVuIGEgbGluay1sYXllciBoZWFkZXIgdHlwZSBhbmQgc25hcHNob3QgbGVuZ3RoLCByZXR1cm4gYQorICogc25hcHNob3QgbGVuZ3RoIHRvIHVzZSB3aGVuIHJlYWRpbmcgdGhlIGZpbGU7IGl0J3MgZ3VhcmFudGVlZAorICogdG8gYmUgPiAwIGFuZCA8PSBJTlRfTUFYLgorICoKKyAqIFhYWCAtIHRoZSBvbmx5IHJlYXNvbiB3aHkgd2UgbGltaXQgaXQgdG8gPD0gSU5UX01BWCBpcyBzbyB0aGF0CisgKiBpdCBmaXRzIGluIHAtPnNuYXBzaG90LCBhbmQgdGhlIG9ubHkgcmVhc29uIHRoYXQgcC0+c25hcHNob3QgaXMKKyAqIHNpZ25lZCBpcyB0aGF0IHBjYXBfc25hcHNob3QoKSByZXR1cm5zIGFuIGludCwgbm90IGFuIHVuc2lnbmVkIGludC4KKyAqLworYnBmX3VfaW50MzIKK3BjYXBfYWRqdXN0X3NuYXBzaG90KGJwZl91X2ludDMyIGxpbmt0eXBlLCBicGZfdV9pbnQzMiBzbmFwbGVuKQoreworCWlmIChzbmFwbGVuID09IDAgfHwgc25hcGxlbiA+IElOVF9NQVgpIHsKKwkJLyoKKwkJICogQm9ndXMgc25hcHNob3QgbGVuZ3RoOyB1c2UgdGhlIG1heGltdW0gZm9yIHRoaXMKKwkJICogbGluay1sYXllciB0eXBlIGFzIGEgZmFsbGJhY2suCisJCSAqCisJCSAqIFhYWCAtIHdlIGRvbid0IGNsYW1wIHNuYXBzaG90IGxlbmd0aHMgdGhhdCBhcmUKKwkJICogPD0gSU5UX01BWCBidXQgPiBtYXhfc25hcGxlbl9mb3JfZGx0KGxpbmt0eXBlKSwKKwkJICogc28gYSBjYXB0dXJlIGZpbGUgY291bGQgY2F1c2UgdXMgdG8gYWxsb2NhdGUKKwkJICogYSBSZWFsbHkgQmlnIEJ1ZmZlci4KKwkJICovCisJCXNuYXBsZW4gPSBtYXhfc25hcGxlbl9mb3JfZGx0KGxpbmt0eXBlKTsKKwl9CisJcmV0dXJuIHNuYXBsZW47Cit9CisKK3N0YXRpYyBwY2FwX3QgKigqY2hlY2tfaGVhZGVyc1tdKShjb25zdCB1aW50OF90ICosIEZJTEUgKiwgdV9pbnQsIGNoYXIgKiwgaW50ICopID0gewogCXBjYXBfY2hlY2tfaGVhZGVyLAogCXBjYXBfbmdfY2hlY2tfaGVhZGVyCiB9OwpAQCAtMzQ2LDI4ICs0NzMsNDAgQEAKICAgICBjaGFyICplcnJidWYpCiB7CiAJcmVnaXN0ZXIgcGNhcF90ICpwOwotCWJwZl91X2ludDMyIG1hZ2ljOworCXVpbnQ4X3QgbWFnaWNbNF07CiAJc2l6ZV90IGFtdF9yZWFkOwogCXVfaW50IGk7CiAJaW50IGVycjsKIAogCS8qCisJICogRmFpbCBpZiB3ZSB3ZXJlIHBhc3NlZCBhIE5VTEwgZnAuCisJICoKKwkgKiBUaGF0IHNob3VsZG4ndCBoYXBwZW4gaWYgd2UncmUgb3BlbmluZyB3aXRoIGEgcGF0aCBuYW1lLCBidXQKKwkgKiBpdCBjb3VsZCBoYXBwZW4gaWYgYnVnZ3kgY29kZSBpcyBvcGVuaW5nIHdpdGggYSBGSUxFICogYW5kCisJICogZGlkbid0IGJvdGhlciB0byBtYWtlIHN1cmUgdGhlIEZJTEUgKiBpc24ndCBudWxsLgorCSAqLworCWlmIChmcCA9PSBOVUxMKSB7CisJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJICAgICJOdWxsIEZJTEUgKiBwb2ludGVyIHByb3ZpZGVkIHRvIHNhdmVmaWxlIG9wZW4gcm91dGluZSIpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCS8qCiAJICogUmVhZCB0aGUgZmlyc3QgNCBieXRlcyBvZiB0aGUgZmlsZTsgdGhlIG5ldHdvcmsgYW5hbHl6ZXIgZHVtcAogCSAqIGZpbGUgZm9ybWF0cyB3ZSBzdXBwb3J0IChwY2FwIGFuZCBwY2FwbmcpLCBhbmQgc2V2ZXJhbCBvdGhlcgogCSAqIGZvcm1hdHMgd2UgbWlnaHQgc3VwcG9ydCBpbiB0aGUgZnV0dXJlIChzdWNoIGFzIHNub29wLCBET1MgYW5kCiAJICogV2luZG93cyBTbmlmZmVyLCBhbmQgTWljcm9zb2Z0IE5ldHdvcmsgTW9uaXRvcikgYWxsIGhhdmUgbWFnaWMKIAkgKiBudW1iZXJzIHRoYXQgYXJlIHVuaXF1ZSBpbiB0aGVpciBmaXJzdCA0IGJ5dGVzLgogCSAqLwotCWFtdF9yZWFkID0gZnJlYWQoKGNoYXIgKikmbWFnaWMsIDEsIHNpemVvZihtYWdpYyksIGZwKTsKKwlhbXRfcmVhZCA9IGZyZWFkKCZtYWdpYywgMSwgc2l6ZW9mKG1hZ2ljKSwgZnApOwogCWlmIChhbXRfcmVhZCAhPSBzaXplb2YobWFnaWMpKSB7CiAJCWlmIChmZXJyb3IoZnApKSB7CiAJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAgICBlcnJubywgImVycm9yIHJlYWRpbmcgZHVtcCBmaWxlIik7CiAJCX0gZWxzZSB7Ci0JCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJCSAgICAidHJ1bmNhdGVkIGR1bXAgZmlsZTsgdHJpZWQgdG8gcmVhZCAlbHUgZmlsZSBoZWFkZXIgYnl0ZXMsIG9ubHkgZ290ICVsdSIsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpc2l6ZW9mKG1hZ2ljKSwKLQkJCSAgICAodW5zaWduZWQgbG9uZylhbXRfcmVhZCk7CisJCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkgICAgInRydW5jYXRlZCBkdW1wIGZpbGU7IHRyaWVkIHRvIHJlYWQgJXp1IGZpbGUgaGVhZGVyIGJ5dGVzLCBvbmx5IGdvdCAlenUiLAorCQkJICAgIHNpemVvZihtYWdpYyksIGFtdF9yZWFkKTsKIAkJfQogCQlyZXR1cm4gKE5VTEwpOwogCX0KQEAgLTM5Miw3ICs1MzEsNyBAQAogCS8qCiAJICogV2VsbCwgd2hvIGtub3dzIHdoYXQgdGhpcyBtZXNzIGlzLi4uLgogCSAqLwotCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAidW5rbm93biBmaWxlIGZvcm1hdCIpOworCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgInVua25vd24gZmlsZSBmb3JtYXQiKTsKIAlyZXR1cm4gKE5VTEwpOwogCiBmb3VuZDoKQEAgLTQ0Miw2ICs1ODEsMTEgQEAKIAlwLT5vbmVzaG90X2NhbGxiYWNrID0gcGNhcF9vbmVzaG90OwogCiAJLyoKKwkgKiBEZWZhdWx0IGJyZWFrbG9vcCBvcGVyYXRpb24uCisJICovCisJcC0+YnJlYWtsb29wX29wID0gcGNhcF9icmVha2xvb3BfY29tbW9uOworCisJLyoKIAkgKiBTYXZlZmlsZXMgbmV2ZXIgcmVxdWlyZSBzcGVjaWFsIEJQRiBjb2RlIGdlbmVyYXRpb24uCiAJICovCiAJcC0+YnBmX2NvZGVnZW5fZmxhZ3MgPSAwOwpAQCAtNDUxLDE1ICs1OTUsMTkgQEAKIAlyZXR1cm4gKHApOwogfQogCi0jaWZkZWYgX1dJTjMyCi1zdGF0aWMKLSNlbmRpZgorLyoKKyAqIFRoaXMgaXNuJ3QgbmVlZGVkIG9uIFdpbmRvd3M7IHdlICNkZWZpbmUgcGNhcF9mb3Blbl9vZmZsaW5lKCkgYXMKKyAqIGEgd3JhcHBlciBhcm91bmQgcGNhcF9ob3Blbl9vZmZsaW5lKCksIGFuZCB3ZSBkb24ndCBjYWxsIGl0IGZyb20KKyAqIGluc2lkZSB0aGlzIGZpbGUsIHNvIGl0J3MgdW51c2VkLgorICovCisjaWZuZGVmIF9XSU4zMgogcGNhcF90ICoKIHBjYXBfZm9wZW5fb2ZmbGluZShGSUxFICpmcCwgY2hhciAqZXJyYnVmKQogewogCXJldHVybiAocGNhcF9mb3Blbl9vZmZsaW5lX3dpdGhfdHN0YW1wX3ByZWNpc2lvbihmcCwKIAkgICAgUENBUF9UU1RBTVBfUFJFQ0lTSU9OX01JQ1JPLCBlcnJidWYpKTsKIH0KKyNlbmRpZgogCiAvKgogICogUmVhZCBwYWNrZXRzIGZyb20gYSBjYXB0dXJlIGZpbGUsIGFuZCBjYWxsIHRoZSBjYWxsYmFjayBmb3IgZWFjaApAQCAtNTAyLDcgKzY1MCw3IEBACiAJCX0KIAogCQlpZiAoKGZjb2RlID0gcC0+ZmNvZGUuYmZfaW5zbnMpID09IE5VTEwgfHwKLQkJICAgIGJwZl9maWx0ZXIoZmNvZGUsIGRhdGEsIGgubGVuLCBoLmNhcGxlbikpIHsKKwkJICAgIHBjYXBfZmlsdGVyKGZjb2RlLCBkYXRhLCBoLmxlbiwgaC5jYXBsZW4pKSB7CiAJCQkoKmNhbGxiYWNrKSh1c2VyLCAmaCwgZGF0YSk7CiAJCQlpZiAoKytuID49IGNudCAmJiBjbnQgPiAwKQogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc2Nhbm5lci5jIGIvc2Nhbm5lci5jCmluZGV4IDJjZjY1YzkuLjRiMTU3MmYgMTAwNjQ0Ci0tLSBhL3NjYW5uZXIuYworKysgYi9zY2FubmVyLmMKQEAgLTM1LDExICszNSwyMzMgQEAKICNkZWZpbmUgRkxFWF9TQ0FOTkVSCiAjZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCiAjZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA2Ci0jZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAxCisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA0CiAjaWYgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OID4gMAogI2RlZmluZSBGTEVYX0JFVEEKICNlbmRpZgogCisjaWZkZWYgeXlfY3JlYXRlX2J1ZmZlcgorI2RlZmluZSBwY2FwX19jcmVhdGVfYnVmZmVyX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlfY3JlYXRlX2J1ZmZlciBwY2FwX19jcmVhdGVfYnVmZmVyCisjZW5kaWYKKworI2lmZGVmIHl5X2RlbGV0ZV9idWZmZXIKKyNkZWZpbmUgcGNhcF9fZGVsZXRlX2J1ZmZlcl9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5X2RlbGV0ZV9idWZmZXIgcGNhcF9fZGVsZXRlX2J1ZmZlcgorI2VuZGlmCisKKyNpZmRlZiB5eV9zY2FuX2J1ZmZlcgorI2RlZmluZSBwY2FwX19zY2FuX2J1ZmZlcl9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5X3NjYW5fYnVmZmVyIHBjYXBfX3NjYW5fYnVmZmVyCisjZW5kaWYKKworI2lmZGVmIHl5X3NjYW5fc3RyaW5nCisjZGVmaW5lIHBjYXBfX3NjYW5fc3RyaW5nX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlfc2Nhbl9zdHJpbmcgcGNhcF9fc2Nhbl9zdHJpbmcKKyNlbmRpZgorCisjaWZkZWYgeXlfc2Nhbl9ieXRlcworI2RlZmluZSBwY2FwX19zY2FuX2J5dGVzX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlfc2Nhbl9ieXRlcyBwY2FwX19zY2FuX2J5dGVzCisjZW5kaWYKKworI2lmZGVmIHl5X2luaXRfYnVmZmVyCisjZGVmaW5lIHBjYXBfX2luaXRfYnVmZmVyX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlfaW5pdF9idWZmZXIgcGNhcF9faW5pdF9idWZmZXIKKyNlbmRpZgorCisjaWZkZWYgeXlfZmx1c2hfYnVmZmVyCisjZGVmaW5lIHBjYXBfX2ZsdXNoX2J1ZmZlcl9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5X2ZsdXNoX2J1ZmZlciBwY2FwX19mbHVzaF9idWZmZXIKKyNlbmRpZgorCisjaWZkZWYgeXlfbG9hZF9idWZmZXJfc3RhdGUKKyNkZWZpbmUgcGNhcF9fbG9hZF9idWZmZXJfc3RhdGVfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSBwY2FwX19sb2FkX2J1ZmZlcl9zdGF0ZQorI2VuZGlmCisKKyNpZmRlZiB5eV9zd2l0Y2hfdG9fYnVmZmVyCisjZGVmaW5lIHBjYXBfX3N3aXRjaF90b19idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9zd2l0Y2hfdG9fYnVmZmVyIHBjYXBfX3N3aXRjaF90b19idWZmZXIKKyNlbmRpZgorCisjaWZkZWYgeXlwdXNoX2J1ZmZlcl9zdGF0ZQorI2RlZmluZSBwY2FwX3B1c2hfYnVmZmVyX3N0YXRlX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlwdXNoX2J1ZmZlcl9zdGF0ZSBwY2FwX3B1c2hfYnVmZmVyX3N0YXRlCisjZW5kaWYKKworI2lmZGVmIHl5cG9wX2J1ZmZlcl9zdGF0ZQorI2RlZmluZSBwY2FwX3BvcF9idWZmZXJfc3RhdGVfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXBvcF9idWZmZXJfc3RhdGUgcGNhcF9wb3BfYnVmZmVyX3N0YXRlCisjZW5kaWYKKworI2lmZGVmIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaworI2RlZmluZSBwY2FwX2Vuc3VyZV9idWZmZXJfc3RhY2tfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWVuc3VyZV9idWZmZXJfc3RhY2sgcGNhcF9lbnN1cmVfYnVmZmVyX3N0YWNrCisjZW5kaWYKKworI2lmZGVmIHl5bGV4CisjZGVmaW5lIHBjYXBfbGV4X0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlsZXggcGNhcF9sZXgKKyNlbmRpZgorCisjaWZkZWYgeXlyZXN0YXJ0CisjZGVmaW5lIHBjYXBfcmVzdGFydF9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5cmVzdGFydCBwY2FwX3Jlc3RhcnQKKyNlbmRpZgorCisjaWZkZWYgeXlsZXhfaW5pdAorI2RlZmluZSBwY2FwX2xleF9pbml0X0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlsZXhfaW5pdCBwY2FwX2xleF9pbml0CisjZW5kaWYKKworI2lmZGVmIHl5bGV4X2luaXRfZXh0cmEKKyNkZWZpbmUgcGNhcF9sZXhfaW5pdF9leHRyYV9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5bGV4X2luaXRfZXh0cmEgcGNhcF9sZXhfaW5pdF9leHRyYQorI2VuZGlmCisKKyNpZmRlZiB5eWxleF9kZXN0cm95CisjZGVmaW5lIHBjYXBfbGV4X2Rlc3Ryb3lfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWxleF9kZXN0cm95IHBjYXBfbGV4X2Rlc3Ryb3kKKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfZGVidWcKKyNkZWZpbmUgcGNhcF9nZXRfZGVidWdfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWdldF9kZWJ1ZyBwY2FwX2dldF9kZWJ1ZworI2VuZGlmCisKKyNpZmRlZiB5eXNldF9kZWJ1ZworI2RlZmluZSBwY2FwX3NldF9kZWJ1Z19BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5c2V0X2RlYnVnIHBjYXBfc2V0X2RlYnVnCisjZW5kaWYKKworI2lmZGVmIHl5Z2V0X2V4dHJhCisjZGVmaW5lIHBjYXBfZ2V0X2V4dHJhX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlnZXRfZXh0cmEgcGNhcF9nZXRfZXh0cmEKKyNlbmRpZgorCisjaWZkZWYgeXlzZXRfZXh0cmEKKyNkZWZpbmUgcGNhcF9zZXRfZXh0cmFfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXNldF9leHRyYSBwY2FwX3NldF9leHRyYQorI2VuZGlmCisKKyNpZmRlZiB5eWdldF9pbgorI2RlZmluZSBwY2FwX2dldF9pbl9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X2luIHBjYXBfZ2V0X2luCisjZW5kaWYKKworI2lmZGVmIHl5c2V0X2luCisjZGVmaW5lIHBjYXBfc2V0X2luX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlzZXRfaW4gcGNhcF9zZXRfaW4KKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfb3V0CisjZGVmaW5lIHBjYXBfZ2V0X291dF9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X291dCBwY2FwX2dldF9vdXQKKyNlbmRpZgorCisjaWZkZWYgeXlzZXRfb3V0CisjZGVmaW5lIHBjYXBfc2V0X291dF9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5c2V0X291dCBwY2FwX3NldF9vdXQKKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfbGVuZworI2RlZmluZSBwY2FwX2dldF9sZW5nX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlnZXRfbGVuZyBwY2FwX2dldF9sZW5nCisjZW5kaWYKKworI2lmZGVmIHl5Z2V0X3RleHQKKyNkZWZpbmUgcGNhcF9nZXRfdGV4dF9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X3RleHQgcGNhcF9nZXRfdGV4dAorI2VuZGlmCisKKyNpZmRlZiB5eWdldF9saW5lbm8KKyNkZWZpbmUgcGNhcF9nZXRfbGluZW5vX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlnZXRfbGluZW5vIHBjYXBfZ2V0X2xpbmVubworI2VuZGlmCisKKyNpZmRlZiB5eXNldF9saW5lbm8KKyNkZWZpbmUgcGNhcF9zZXRfbGluZW5vX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlzZXRfbGluZW5vIHBjYXBfc2V0X2xpbmVubworI2VuZGlmCisKKyNpZmRlZiB5eWdldF9jb2x1bW4KKyNkZWZpbmUgcGNhcF9nZXRfY29sdW1uX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlnZXRfY29sdW1uIHBjYXBfZ2V0X2NvbHVtbgorI2VuZGlmCisKKyNpZmRlZiB5eXNldF9jb2x1bW4KKyNkZWZpbmUgcGNhcF9zZXRfY29sdW1uX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlzZXRfY29sdW1uIHBjYXBfc2V0X2NvbHVtbgorI2VuZGlmCisKKyNpZmRlZiB5eXdyYXAKKyNkZWZpbmUgcGNhcF93cmFwX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXl3cmFwIHBjYXBfd3JhcAorI2VuZGlmCisKKyNpZmRlZiB5eWdldF9sdmFsCisjZGVmaW5lIHBjYXBfZ2V0X2x2YWxfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWdldF9sdmFsIHBjYXBfZ2V0X2x2YWwKKyNlbmRpZgorCisjaWZkZWYgeXlzZXRfbHZhbAorI2RlZmluZSBwY2FwX3NldF9sdmFsX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlzZXRfbHZhbCBwY2FwX3NldF9sdmFsCisjZW5kaWYKKworI2lmZGVmIHl5YWxsb2MKKyNkZWZpbmUgcGNhcF9hbGxvY19BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5YWxsb2MgcGNhcF9hbGxvYworI2VuZGlmCisKKyNpZmRlZiB5eXJlYWxsb2MKKyNkZWZpbmUgcGNhcF9yZWFsbG9jX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlyZWFsbG9jIHBjYXBfcmVhbGxvYworI2VuZGlmCisKKyNpZmRlZiB5eWZyZWUKKyNkZWZpbmUgcGNhcF9mcmVlX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlmcmVlIHBjYXBfZnJlZQorI2VuZGlmCisKIC8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8KIAogLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLwpAQCAtMTEwLDEwICszMzIsMTYgQEAKICNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2NzI5NVUpCiAjZW5kaWYKIAorI2lmbmRlZiBTSVpFX01BWAorI2RlZmluZSBTSVpFX01BWCAgICAgICAgICAgICAgICh+KHNpemVfdCkwKQorI2VuZGlmCisKICNlbmRpZiAvKiAhIEM5OSAqLwogCiAjZW5kaWYgLyogISBGTEVYSU5UX0ggKi8KIAorLyogYmVnaW4gc3RhbmRhcmQgQysrIGhlYWRlcnMuICovCisKIC8qIFRPRE86IHRoaXMgaXMgYWx3YXlzIGRlZmluZWQsIHNvIGlubGluZSBpdCAqLwogI2RlZmluZSB5eWNvbnN0IGNvbnN0CiAKQEAgLTEyNiwxMiArMzU0LDEwIEBACiAvKiBSZXR1cm5lZCB1cG9uIGVuZC1vZi1maWxlLiAqLwogI2RlZmluZSBZWV9OVUxMIDAKIAotLyogUHJvbW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2ZSwgcG9zc2libHkgc2lnbmVkIGNoYXIgdG8gYW4gdW5zaWduZWQKLSAqIGludGVnZXIgZm9yIHVzZSBhcyBhbiBhcnJheSBpbmRleC4gIElmIHRoZSBzaWduZWQgY2hhciBpcyBuZWdhdGl2ZSwKLSAqIHdlIHdhbnQgdG8gaW5zdGVhZCB0cmVhdCBpdCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBjaGFyLCBoZW5jZSB0aGUKLSAqIGRvdWJsZSBjYXN0LgorLyogUHJvbW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2ZSwgcG9zc2libHkgc2lnbmVkIGNoYXIgdG8gYW4KKyAqICAgaW50ZWdlciBpbiByYW5nZSBbMC4uMjU1XSBmb3IgdXNlIGFzIGFuIGFycmF5IGluZGV4LgogICovCi0jZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgodW5zaWduZWQgaW50KSAodW5zaWduZWQgY2hhcikgYykKKyNkZWZpbmUgWVlfU0NfVE9fVUkoYykgKChZWV9DSEFSKSAoYykpCiAKIC8qIEFuIG9wYXF1ZSBwb2ludGVyLiAqLwogI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVApAQCAtMTU1LDIwICszODEsMTYgQEAKICAqIGRlZmluaXRpb24gb2YgQkVHSU4uCiAgKi8KICNkZWZpbmUgQkVHSU4geXlnLT55eV9zdGFydCA9IDEgKyAyICoKLQogLyogVHJhbnNsYXRlIHRoZSBjdXJyZW50IHN0YXJ0IHN0YXRlIGludG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSBsYXRlciBoYW5kZWQKICAqIHRvIEJFR0lOIHRvIHJldHVybiB0byB0aGUgc3RhdGUuICBUaGUgWVlTVEFURSBhbGlhcyBpcyBmb3IgbGV4CiAgKiBjb21wYXRpYmlsaXR5LgogICovCiAjZGVmaW5lIFlZX1NUQVJUICgoeXlnLT55eV9zdGFydCAtIDEpIC8gMikKICNkZWZpbmUgWVlTVEFURSBZWV9TVEFSVAotCiAvKiBBY3Rpb24gbnVtYmVyIGZvciBFT0YgcnVsZSBvZiBhIGdpdmVuIHN0YXJ0IHN0YXRlLiAqLwogI2RlZmluZSBZWV9TVEFURV9FT0Yoc3RhdGUpIChZWV9FTkRfT0ZfQlVGRkVSICsgc3RhdGUgKyAxKQotCiAvKiBTcGVjaWFsIGFjdGlvbiBtZWFuaW5nICJzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGZpbGUiLiAqLwotI2RlZmluZSBZWV9ORVdfRklMRSBwY2FwX3Jlc3RhcnQoeXlpbiAseXlzY2FubmVyICkKLQorI2RlZmluZSBZWV9ORVdfRklMRSB5eXJlc3RhcnQoIHl5aW4gLCB5eXNjYW5uZXIgKQogI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgMAogCiAvKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLwpAQCAtMjAxLDcgKzQyMyw3IEBACiAjZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAwCiAjZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQogI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgotCisgICAgCiAgICAgI2RlZmluZSBZWV9MRVNTX0xJTkVOTyhuKQogICAgICNkZWZpbmUgWVlfTElORU5PX1JFV0lORF9UTyhwdHIpCiAgICAgCkBAIC0yMTgsNyArNDQwLDYgQEAKIAkJWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCiAJCX0gXAogCXdoaWxlICggMCApCi0KICNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKIAogI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCkBAIC0yNzgsNyArNDk5LDcgQEAKIAkgKiBwb3NzaWJsZSBiYWNraW5nLXVwLgogCSAqCiAJICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKLQkgKiAodmlhIHBjYXBfcmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKKwkgKiAodmlhIHl5cmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKIAkgKiBqdXN0IHBvaW50aW5nIHl5aW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4KIAkgKi8KICNkZWZpbmUgWVlfQlVGRkVSX0VPRl9QRU5ESU5HIDIKQEAgLTI5NSw3MyArNTE2LDY3IEBACiAjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSICggeXlnLT55eV9idWZmZXJfc3RhY2sgXAogICAgICAgICAgICAgICAgICAgICAgICAgICA/IHl5Zy0+eXlfYnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0gXAogICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwpCi0KIC8qIFNhbWUgYXMgcHJldmlvdXMgbWFjcm8sIGJ1dCB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QKICAqIE5VTEwgb3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5LgogICovCiAjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdCiAKLXZvaWQgcGNhcF9yZXN0YXJ0IChGSUxFICppbnB1dF9maWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcGNhcF9fc3dpdGNoX3RvX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlfQlVGRkVSX1NUQVRFIHBjYXBfX2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwY2FwX19kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBjYXBfX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwY2FwX3B1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBjYXBfcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5cmVzdGFydCAoIEZJTEUgKmlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlfc3dpdGNoX3RvX2J1ZmZlciAoIFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgeXlfY3JlYXRlX2J1ZmZlciAoIEZJTEUgKmZpbGUsIGludCBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5X2RlbGV0ZV9idWZmZXIgKCBZWV9CVUZGRVJfU1RBVEUgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eV9mbHVzaF9idWZmZXIgKCBZWV9CVUZGRVJfU1RBVEUgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlICggWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICggeXlzY2FuX3QgeXlzY2FubmVyICk7CiAKLXN0YXRpYyB2b2lkIHBjYXBfZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9pZCBwY2FwX19sb2FkX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9pZCBwY2FwX19pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVyX3N0YXRlICggeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAoIFlZX0JVRkZFUl9TVEFURSBiLCBGSUxFICpmaWxlICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiB5eV9mbHVzaF9idWZmZXIoIFlZX0NVUlJFTlRfQlVGRkVSICwgeXlzY2FubmVyKQogCi0jZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiBwY2FwX19mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcikKK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAoIGNoYXIgKmJhc2UsIHl5X3NpemVfdCBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKCBjb25zdCBjaGFyICp5eV9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICggY29uc3QgY2hhciAqYnl0ZXMsIGludCBsZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAotWVlfQlVGRkVSX1NUQVRFIHBjYXBfX3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBwY2FwX19zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlfQlVGRkVSX1NUQVRFIHBjYXBfX3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkICp5eWFsbG9jICggeXlfc2l6ZV90ICwgeXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkICp5eXJlYWxsb2MgKCB2b2lkICosIHl5X3NpemVfdCAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eWZyZWUgKCB2b2lkICogLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAotdm9pZCAqcGNhcF9hbGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgKnBjYXBfcmVhbGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBjYXBfZnJlZSAodm9pZCAqICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLQotI2RlZmluZSB5eV9uZXdfYnVmZmVyIHBjYXBfX2NyZWF0ZV9idWZmZXIKLQorI2RlZmluZSB5eV9uZXdfYnVmZmVyIHl5X2NyZWF0ZV9idWZmZXIKICNkZWZpbmUgeXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBcCiAJeyBcCiAJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKLSAgICAgICAgcGNhcF9lbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCisgICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAogCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCi0gICAgICAgICAgICBwY2FwX19jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKKyAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoIHl5aW4sIFlZX0JVRl9TSVpFICwgeXlzY2FubmVyKTsgXAogCX0gXAogCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgPSBpc19pbnRlcmFjdGl2ZTsgXAogCX0KLQogI2RlZmluZSB5eV9zZXRfYm9sKGF0X2JvbCkgXAogCXsgXAogCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKLSAgICAgICAgcGNhcF9lbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCisgICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAogCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCi0gICAgICAgICAgICBwY2FwX19jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKKyAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoIHl5aW4sIFlZX0JVRl9TSVpFICwgeXlzY2FubmVyKTsgXAogCX0gXAogCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcCiAJfQotCiAjZGVmaW5lIFlZX0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKIAogLyogQmVnaW4gdXNlciBzZWN0MyAqLwogCiAjZGVmaW5lIHBjYXBfd3JhcCh5eXNjYW5uZXIpICgvKkNPTlNUQ09ORCovMSkKICNkZWZpbmUgWVlfU0tJUF9ZWVdSQVAKLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7Cit0eXBlZGVmIGZsZXhfdWludDhfdCBZWV9DSEFSOwogCiB0eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOwogCiAjZGVmaW5lIHl5dGV4dF9wdHIgeXl0ZXh0X3IKIAotc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgKHl5X3N0YXRlX3R5cGUgY3VycmVudF9zdGF0ZSAgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Ci1zdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyICk7Ci1zdGF0aWMgdm9pZCB5eW5vcmV0dXJuIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIqIG1zZyAseXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgKCB5eV9zdGF0ZV90eXBlIGN1cnJlbnRfc3RhdGUgICwgeXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICggeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCB5eW5vcmV0dXJuIHl5X2ZhdGFsX2Vycm9yICggY29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CiAKIC8qIERvbmUgYWZ0ZXIgdGhlIGN1cnJlbnQgcGF0dGVybiBoYXMgYmVlbiBtYXRjaGVkIGFuZCBiZWZvcmUgdGhlCiAgKiBjb3JyZXNwb25kaW5nIGFjdGlvbiAtIHNldHMgdXAgeXl0ZXh0LgpAQCAtMzcyLDkgKzU4Nyw4IEBACiAJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKIAkqeXlfY3AgPSAnXDAnOyBcCiAJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7Ci0KLSNkZWZpbmUgWVlfTlVNX1JVTEVTIDE4NAotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDE4NQorI2RlZmluZSBZWV9OVU1fUlVMRVMgMTgzCisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMTg0CiAvKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIsCiAgICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8KIHN0cnVjdCB5eV90cmFuc19pbmZvCkBAIC0zODIsMjAxICs1OTYsMjAxIEBACiAJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKIAlmbGV4X2ludDMyX3QgeXlfbnh0OwogCX07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzE3MjldID0KK3N0YXRpYyBjb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzE3MjRdID0KICAgICB7ICAgMCwKLSAgICAgICAgMCwgICAgMCwgIDE4NSwgIDE4MiwgIDExMywgIDExMywgIDExMywgIDExNCwgIDE4MiwgIDExNCwKLSAgICAgIDExNCwgIDExNCwgIDE4MywgIDEyMywgIDEyMywgIDExNCwgIDExNCwgIDExNCwgIDExNCwgIDE4MCwKLSAgICAgIDE4MCwgIDE4MiwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwKKyAgICAgICAgMCwgICAgMCwgIDE4NCwgIDE4MiwgIDExMywgIDExMywgIDExNCwgIDE4MiwgIDExNCwgIDExNCwKKyAgICAgIDEyMywgIDEyMywgIDExNCwgIDExNCwgIDExNCwgIDExNCwgIDE4MCwgIDE4MCwgIDE4MiwgIDE4MCwKICAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwKLSAgICAgIDE4MCwgIDE4MCwgIDExNCwgIDE4MiwgIDExNywgIDEyMSwgICA2NywgICAgMCwgIDE4MCwgIDEyMywKLSAgICAgICAgMCwgIDE4MCwgIDE4MCwgIDE4MCwgICAgMCwgIDEyNSwgIDExOSwgIDExNiwgIDExOCwgIDExNSwKLSAgICAgIDEyMCwgIDE4MCwgIDE4MSwgIDE4MSwgIDE4MCwgIDE4MCwgIDE4MCwgICAyMCwgIDE4MCwgIDE4MCwKKyAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDExNCwKKyAgICAgIDExNywgIDEyMSwgICA2NywgICAgMCwgIDE4MCwgIDEyMywgICAgMCwgIDE4MCwgIDE4MCwgIDE4MCwKKyAgICAgICAgMCwgIDEyNSwgIDExOSwgIDExNiwgIDExOCwgIDExNSwgIDEyMCwgIDE4MCwgIDE4MSwgIDE4MCwKKyAgICAgIDE4MCwgIDE4MCwgICAyMCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwKICAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwKICAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwKLSAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwKKyAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgICAgNywgIDE4MCwgICAzNCwgICAzNSwKIAotICAgICAgMTgwLCAgICA3LCAgMTgwLCAgIDM0LCAgIDM1LCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAotICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgIDkyLAotICAgICAgMTgwLCAgIDY4LCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgIDYwLCAgMTgwLAotICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgIDg2LCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAotICAgICAgIDYxLCAgMTgwLCAgICA0LCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAotICAgICAgIDY4LCAgMTIxLCAgMTgwLCAgMTI0LCAgMTI0LCAgMTgwLCAgMTIzLCAgMTgwLCAgICAwLCAgMTI1LAotICAgICAgMTIzLCAgMTI1LCAgMTI1LCAgMTI1LCAgMTgwLCAgMTgwLCAgMTgwLCAgIDY3LCAgICA1LCAgMTgwLAotICAgICAgIDgxLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgIDU1LCAgMTA3LAotICAgICAgICAxLCAgICAwLCAgMTgwLCAgIDIxLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAogICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAotCi0gICAgICAxODAsICAxODAsICAgMzYsICAxODAsICAxODAsICAgMTgsICAgNDMsICAgIDAsICAxODAsICAgMjksCi0gICAgICAxODAsICAgMjUsICAgNzAsICAxODAsICAxODAsICAgNzksICAgMzcsICAxODAsICAxMDAsICAxODAsCi0gICAgICAxODAsICAxODAsICAxODAsICAxMDEsICAxODAsICAgNDYsICAgNjksICAgODIsICAxMDYsICAxODAsCi0gICAgICAgMTQsICAxODAsICAgIDMsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAgOTQsICAxODAsCi0gICAgICAxODAsICAgMjYsICAxODAsICAxMDUsICAxODAsICAxMDgsICAgMzgsICAgIDIsICAxODAsICAgNDIsCi0gICAgICAxODAsICAgIDksICAxODAsICAgMTAsICAgODksICAxODAsICAgODgsICAxODAsICAxODAsICAgIDAsCi0gICAgICAxODAsICAxODAsICAxMjQsICAxODAsICAxODAsICAxODAsICAxODAsICAxMjMsICAgIDAsICAxODAsCi0gICAgICAgIDAsICAxMjYsICAxMjUsICAxMjUsICAgIDAsICAxMjUsICAgIDAsICAxMjUsICAgIDAsICAxMjUsCi0gICAgICAgIDAsICAgMjMsICAxODAsICAxODAsICAxODAsICAxODAsICAgNjQsICAgMTYsICAgNDEsICAxODAsCi0gICAgICAgMzksICAxODAsICAxODAsICAxODAsICAgMzAsICAxODAsICAgOTgsICAxODAsICAxODAsICAxODAsCi0KLSAgICAgIDExMSwgIDE4MCwgIDE4MCwgIDEwNCwgIDExMCwgICA0NSwgIDEwOSwgIDExMiwgICAxMSwgIDE4MCwKLSAgICAgICAxMiwgICAxMywgIDE4MCwgIDE4MCwgIDE4MCwgICAzMiwgICA3OCwgIDE4MCwgICA2MiwgICAgMywKLSAgICAgICA5OSwgICA0NywgIDE4MCwgIDE4MCwgIDE4MCwgICA3NCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwKLSAgICAgICA0OCwgIDE4MCwgIDE4MCwgICA0MCwgIDE4MCwgICAgNiwgIDE4MCwgICA5MywgIDE4MCwgICAgOCwKLSAgICAgICA5NSwgIDE4MCwgIDE4MCwgICAgMCwgIDE4MCwgICA1MywgICA3MywgICAxNSwgIDE4MCwgIDEyNCwKLSAgICAgIDEyNCwgIDE4MCwgIDEyNCwgIDEyNCwgIDEyNCwgIDE4MCwgIDEyMywgIDE4MCwgICAgMCwgIDEyNSwKLSAgICAgIDE4MCwgICAgMCwgICAgMCwgIDEyNSwgICAgMCwgIDEyNSwgIDEyNiwgIDEyNSwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgIDE4MCwgICA1NiwKLSAgICAgICA1NywgICA1OCwgICA1OSwgIDE4MCwgICAyMiwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgICAzMSwKLSAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDEwMiwgIDEwMywgICAgMCwgICAxOSwgIDE4MCwgIDE4MCwgIDE4MCwKLQotICAgICAgIDg3LCAgMTgwLCAgIDMzLCAgMTgwLCAgIDgwLCAgIDI4LCAgIDI3LCAgMTgwLCAgMTgwLCAgIDgzLAotICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgIDUwLCAgIDE3LCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAotICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgICAwLAotICAgICAgMTgwLCAgMTgwLCAgMTI0LCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTI0LCAgMTI0LCAgMTgwLAotICAgICAgMTIzLCAgMTgwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgICAwLCAgMTI2LAotICAgICAgMTI1LCAgMTI1LCAgMTI2LCAgMTI1LCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LAotICAgICAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LCAgICAwLAotICAgICAgMTI1LCAgICAwLCAgIDk3LCAgMTgwLCAgMTgwLCAgMTgwLCAgIDI0LCAgMTgwLCAgMTgwLCAgIDc3LAotICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgICAwLAotICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgIDcwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAotCi0gICAgICAxODAsICAxODAsICAxODAsICAgNzUsICAgNzYsICAxODAsICAgOTYsICAxODAsICAxODAsICAxODAsCisgICAgICAxODAsICAxODAsICAxODAsICAxODAsICAgOTIsICAxODAsICAgNjgsICAxODAsICAxODAsICAxODAsCisgICAgICAxODAsICAxODAsICAxODAsICAgNjAsICAxODAsICAxODAsICAxODAsICAxODAsICAgODYsICAxODAsCisgICAgICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAgNjEsICAxODAsICAgIDQsICAxODAsICAxODAsCisgICAgICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAgNjgsICAxMjEsICAxODAsICAxMjQsICAxMjQsCisgICAgICAxODAsICAxMjMsICAxODAsICAgIDAsICAxMjUsICAxMjMsICAxMjUsICAxMjUsICAxMjUsICAxODAsCisgICAgICAxODAsICAxODAsICAgNjcsICAgIDUsICAxODAsICAgODEsICAxODAsICAxODAsICAxODAsICAxODAsCisgICAgICAxODAsICAxODAsICAxODAsICAgNTUsICAxMDcsICAgIDEsICAgIDAsICAxODAsICAgMjEsICAxODAsCiAgICAgICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsCi0gICAgICAxODAsICAxMjQsICAxMjQsICAxODAsICAxMjQsICAxMjQsICAxMjQsICAxMjQsICAxODAsICAxMjMsCi0gICAgICAxODAsICAgIDAsICAxMjUsICAxMjUsICAgIDAsICAxMjUsICAgIDAsICAgIDAsICAxMjUsICAgIDAsCi0gICAgICAxMjUsICAxMjYsICAxMjUsICAgIDAsICAgIDAsICAgIDAsICAxMjUsICAxMjUsICAgIDAsICAxMjUsCi0gICAgICAxMjYsICAxMjUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAxMjUsCi0gICAgICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAgIDAsICAxODAsICAxODAsICAxODAsICAxODAsICAgNTIsCi0gICAgICAgNjMsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsCi0gICAgICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsCi0gICAgICAxODAsICAxODAsICAgNzEsICAxODAsICAxODAsICAgNDQsICAgODQsICAgODUsICAxODAsICAxODAsCisgICAgICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAgMzYsICAxODAsICAxODAsCiAKLSAgICAgIDE4MCwgIDE4MCwgICA1NCwgIDE3NiwgIDE3OSwgIDE3OCwgIDE3MiwgIDE4MCwgIDE3NCwgIDE3MywKLSAgICAgIDE3NywgIDE4MCwgICAgMCwgIDE4MCwgIDE4MCwgIDEyNCwgIDE4MCwgIDE4MCwgIDE4MCwgIDEyNCwKLSAgICAgIDE4MCwgIDEyMywgIDE4MCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwKLSAgICAgIDEyNSwgICAgMCwgICAgMCwgIDEyNiwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgICAgMCwgIDEyNSwKLSAgICAgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAxOCwgICA0MywgICAgMCwgIDE4MCwgICAyOSwgIDE4MCwgICAyNSwgICA3MCwgIDE4MCwgIDE4MCwKKyAgICAgICA3OSwgICAzNywgIDE4MCwgIDEwMCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDEwMSwgIDE4MCwKKyAgICAgICA0NiwgICA2OSwgICA4MiwgIDEwNiwgIDE4MCwgICAxNCwgIDE4MCwgICAgMywgIDE4MCwgIDE4MCwKKyAgICAgIDE4MCwgIDE4MCwgIDE4MCwgICA5NCwgIDE4MCwgIDE4MCwgICAyNiwgIDE4MCwgIDEwNSwgIDE4MCwKKyAgICAgIDEwOCwgICAzOCwgICAgMiwgIDE4MCwgICA0MiwgIDE4MCwgICAgOSwgIDE4MCwgICAxMCwgICA4OSwKKyAgICAgIDE4MCwgICA4OCwgIDE4MCwgIDE4MCwgICAgMCwgIDE4MCwgIDE4MCwgIDEyNCwgIDE4MCwgIDE4MCwKKyAgICAgIDE4MCwgIDE4MCwgIDEyMywgICAgMCwgIDE4MCwgICAgMCwgIDEyNiwgIDEyNSwgIDEyNSwgICAgMCwKKyAgICAgIDEyNSwgICAgMCwgIDEyNSwgICAgMCwgIDEyNSwgICAgMCwgICAyMywgIDE4MCwgIDE4MCwgIDE4MCwKKyAgICAgIDE4MCwgICA2NCwgICAxNiwgICA0MSwgIDE4MCwgICAzOSwgIDE4MCwgIDE4MCwgIDE4MCwgICAzMCwKKyAgICAgIDE4MCwgICA5OCwgIDE4MCwgIDE4MCwgIDE4MCwgIDExMSwgIDE4MCwgIDE4MCwgIDEwNCwgIDExMCwKKworICAgICAgIDQ1LCAgMTA5LCAgMTEyLCAgIDExLCAgMTgwLCAgIDEyLCAgIDEzLCAgMTgwLCAgMTgwLCAgMTgwLAorICAgICAgIDMyLCAgIDc4LCAgMTgwLCAgIDYyLCAgICAzLCAgIDk5LCAgIDQ3LCAgMTgwLCAgMTgwLCAgMTgwLAorICAgICAgIDc0LCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgIDQ4LCAgMTgwLCAgMTgwLCAgIDQwLCAgMTgwLAorICAgICAgICA2LCAgMTgwLCAgIDkzLCAgMTgwLCAgICA4LCAgIDk1LCAgMTgwLCAgMTgwLCAgICAwLCAgMTgwLAorICAgICAgIDUzLCAgIDczLCAgIDE1LCAgMTgwLCAgMTI0LCAgMTI0LCAgMTgwLCAgMTI0LCAgMTI0LCAgMTI0LAorICAgICAgMTgwLCAgMTIzLCAgMTgwLCAgICAwLCAgMTI1LCAgMTgwLCAgICAwLCAgICAwLCAgMTI1LCAgICAwLAorICAgICAgMTI1LCAgMTI2LCAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LAorICAgICAgMTI1LCAgMTI1LCAgICAwLCAgMTgwLCAgIDU2LCAgIDU3LCAgIDU4LCAgIDU5LCAgMTgwLCAgIDIyLAorICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgIDMxLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTAyLCAgMTAzLAorICAgICAgICAwLCAgIDE5LCAgMTgwLCAgMTgwLCAgMTgwLCAgIDg3LCAgMTgwLCAgIDMzLCAgMTgwLCAgIDgwLAorCisgICAgICAgMjgsICAgMjcsICAxODAsICAxODAsICAgODMsICAxODAsICAxODAsICAxODAsICAgNTAsICAgMTcsCisgICAgICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsCisgICAgICAxODAsICAxODAsICAxODAsICAxODAsICAgIDAsICAxODAsICAxODAsICAxMjQsICAxODAsICAxODAsCisgICAgICAxODAsICAxODAsICAxMjQsICAxMjQsICAxODAsICAxMjMsICAxODAsICAgIDAsICAgIDAsICAxMjUsCisgICAgICAxMjUsICAxMjUsICAgIDAsICAgIDAsICAxMjYsICAxMjUsICAxMjUsICAxMjYsICAxMjUsICAgIDAsCiAgICAgICAgIDAsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAxMjUsICAxMjUsICAgIDAsICAxMjUsICAgIDAsICAxMjUsICAgIDAsICAxODAsICAxODAsCi0gICAgICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsCi0gICAgICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsCi0gICAgICAxODAsICAxODAsICAxODAsICAxMjgsICAxMjcsICAxODAsICAxODAsICAgNzIsICAxODAsICAxODAsCisgICAgICAxMjUsICAxMjUsICAgIDAsICAxMjUsICAgIDAsICAxMjUsICAgIDAsICAgOTcsICAxODAsICAxODAsCisgICAgICAxODAsICAgMjQsICAxODAsICAxODAsICAgNzcsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsCisgICAgICAxODAsICAxODAsICAxODAsICAxODAsICAgIDAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsCisgICAgICAgNzAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAgNzUsICAgNzYsCiAKLSAgICAgIDE4MCwgIDE3NSwgIDE3MSwgIDE4MCwgIDE4MCwgIDEyNCwgIDEyNCwgIDEyNCwgIDEyNCwgIDE4MCwKLSAgICAgIDEyMywgIDE4MCwgICAgMCwgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwKLSAgICAgICAgMCwgICAgMCwgIDEyNSwgICAgMCwgIDEyNSwgIDEyNiwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwgIDEyNiwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwgIDEyNiwgIDEyNSwgICAgMCwgIDEyNSwgIDEyNSwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwKLSAgICAgIDEyNSwgIDEyNSwgICAgMCwgICA2NSwgIDE4MCwgICA1NSwgIDEzMywgIDE0MCwgIDE4MCwgIDE4MCwKLSAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwKLSAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE0NSwgIDE0NCwgIDE4MCwgICA2NiwKLSAgICAgICA0OSwgIDE4MCwgIDE4MCwgICAgMCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDEyMywKLQotICAgICAgMTgwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LAotICAgICAgMTI1LCAgMTI1LCAgICAwLCAgICAwLCAgMTI2LCAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgICAwLAotICAgICAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LCAgMTI1LAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LAotICAgICAgMTI1LCAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LAotICAgICAgICAwLCAgMTI1LCAgICAwLCAgMTI1LCAgICAwLCAgIDkwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAotICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTQ2LCAgMTgwLCAgMTgwLAotICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgIDUxLCAgMTIyLCAgMTIyLAotICAgICAgMTI0LCAgMTI0LCAgMTgwLCAgMTIzLCAgMTgwLCAgICAwLCAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LAotCi0gICAgICAxMjUsICAgIDAsICAxMjUsICAxMjUsICAgIDAsICAxMjUsICAgIDAsICAxMjIsICAxMjUsICAgIDAsCi0gICAgICAxMjUsICAxMjYsICAxMjUsICAgIDAsICAgIDAsICAgIDAsICAxMjUsICAxMjUsICAgIDAsICAxMjUsCi0gICAgICAxMjYsICAxMjUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAxMjUsICAxMjUsICAgIDAsCi0gICAgICAxMjUsICAxMjYsICAxMjUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAxMjUsCi0gICAgICAxMjUsICAgIDAsICAxMjUsICAxMjYsICAxMjUsICAgIDAsICAxMjUsICAxMjUsICAxMjUsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAxMjUsICAxMjUsICAxMjUsICAxMjUsCi0gICAgICAxMjUsICAgIDAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsCi0gICAgICAxMzgsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsCi0gICAgICAxODAsICAxODAsICAgOTEsICAxMjIsICAxMjIsICAxMjQsICAxODAsICAxMjIsICAxMjIsICAgIDAsCi0gICAgICAgIDAsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsCi0KLSAgICAgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgIDEyMiwgIDEyNiwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwKLSAgICAgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwKLSAgICAgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwKLSAgICAgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDE4MCwgICA5NiwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwKKyAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDEyNCwgIDEyNCwgIDE4MCwgIDEyNCwKKyAgICAgIDEyNCwgIDEyNCwgIDEyNCwgIDE4MCwgIDEyMywgIDE4MCwgICAgMCwgIDEyNSwgIDEyNSwgICAgMCwKKyAgICAgIDEyNSwgICAgMCwgICAgMCwgIDEyNSwgICAgMCwgIDEyNSwgIDEyNiwgIDEyNSwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwgIDEyNiwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwKICAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwgICAgMCwKLSAgICAgIDEyNSwgICAgMCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE0MiwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwKLSAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDEzMCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwKLSAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDEyNCwgIDE4MCwgIDEyMywgICAgMCwgIDEyNSwgIDEyNSwKLQotICAgICAgICAwLCAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LCAgMTI1LCAgICAwLAotICAgICAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgICAwLCAgICAwLCAgMTI1LCAgMTI2LCAgMTI1LAotICAgICAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LCAgMTI2LCAgMTI1LCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LCAgMTI2LCAgMTI1LAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LAotICAgICAgMTI2LCAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LAotICAgICAgICAwLCAgMTI1LCAgMTI2LCAgMTI1LCAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LAotICAgICAgICAwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTMyLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTM2LAorICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgIDUyLCAgIDYzLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAogICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAorICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgIDcxLCAgMTgwLCAgMTgwLAorICAgICAgIDQ0LCAgIDg0LCAgIDg1LCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgIDU0LCAgMTc2LCAgMTc5LAogCi0gICAgICAxODAsICAxODAsICAxODAsICAxMjIsICAgIDAsICAgIDAsICAxMjUsICAxMjUsICAxMjUsICAxMjUsCi0gICAgICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsCi0gICAgICAxMjUsICAgIDAsICAgIDAsICAgIDAsICAxMjYsICAgIDAsICAgIDAsICAxMjUsICAgIDAsICAgIDAsCi0gICAgICAxMjUsICAxMjUsICAxMjUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAxMjUsICAxMjUsICAxMjUsICAgIDAsICAxMjUsICAxMjUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAxMjUsICAxMjUsICAxMjUsICAgIDAsICAxMjUsICAxMjUsICAxMjUsCisgICAgICAxNzgsICAxNzIsICAxODAsICAxNzQsICAxNzMsICAxNzcsICAxODAsICAgIDAsICAxODAsICAxODAsCisgICAgICAxMjQsICAxODAsICAxODAsICAxODAsICAxMjQsICAxODAsICAxMjMsICAxODAsICAgIDAsICAgIDAsCisgICAgICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAgIDAsICAgIDAsICAxMjYsICAxMjUsCisgICAgICAxMjUsICAxMjUsICAgIDAsICAgIDAsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAxMjUsICAxMjUsICAxMjUsICAxMjUsCisgICAgICAxMjUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAxMjUsICAxMjUsICAgIDAsICAxMjUsCisgICAgICAgIDAsICAxMjUsICAgIDAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsCisgICAgICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsCisgICAgICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxMjgsICAxMjcsCisgICAgICAxODAsICAxODAsICAgNzIsICAxODAsICAxODAsICAxODAsICAxNzUsICAxNzEsICAxODAsICAxODAsCisKKyAgICAgIDEyNCwgIDEyNCwgIDEyNCwgIDEyNCwgIDE4MCwgIDEyMywgIDE4MCwgICAgMCwgIDEyNSwgIDEyNSwKKyAgICAgICAgMCwgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwgICAgMCwgICAgMCwgIDEyNSwgICAgMCwgIDEyNSwKKyAgICAgIDEyNiwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwgIDEyNiwKKyAgICAgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwKKyAgICAgIDEyNiwgIDEyNSwgICAgMCwgIDEyNSwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgICA2NSwgIDE4MCwKKyAgICAgICA1NSwgIDEzMywgIDE0MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwKKyAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwKKyAgICAgIDE4MCwgIDE0NSwgIDE0NCwgIDE4MCwgICA2NiwgICA0OSwgIDE4MCwgIDE4MCwgICAgMCwgIDE4MCwKKyAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDEyMywgIDE4MCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwKKworICAgICAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgICAwLCAgMTI2LAorICAgICAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LAogICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LAotICAgICAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LCAgICAwLCAgMTI1LCAgICAwLCAgMTI5LCAgMTQxLCAgMTQzLAorICAgICAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LCAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LCAgICAwLCAgMTI1LCAgICAwLAorICAgICAgIDkwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAorICAgICAgMTgwLCAgMTgwLCAgMTQ2LCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAorICAgICAgMTgwLCAgMTgwLCAgIDUxLCAgMTIyLCAgMTIyLCAgMTI0LCAgMTI0LCAgMTgwLCAgMTIzLCAgMTgwLAorICAgICAgICAwLCAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LCAgMTI1LCAgICAwLAogCi0gICAgICAxMzcsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsCi0gICAgICAxODAsICAxODAsICAxODAsICAxNTUsICAxODAsICAxODAsICAxODAsICAgIDAsICAgIDAsICAxMjUsCi0gICAgICAgIDAsICAxMjUsICAgIDAsICAxMjUsICAxMjUsICAgIDAsICAxMjUsICAxMjUsICAgIDAsICAxMjUsCi0gICAgICAxMjUsICAgIDAsICAxMjUsICAxMjUsICAgIDAsICAxMjUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAxMjUsICAxMjUsICAgIDAsICAxMjUsICAgIDAsICAgIDAsICAxMjUsICAxMjUsICAxMjUsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAxMjUsICAxMjUsICAxMjUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAxMjUsICAxMjUsICAxMjUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAxMjUsCi0gICAgICAxMjUsICAxMjUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAxMjUsICAxMjUsICAxMjUsCisgICAgICAxMjUsICAgIDAsICAxMjIsICAxMjUsICAgIDAsICAxMjUsICAxMjYsICAxMjUsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAxMjUsICAxMjUsICAgIDAsICAxMjUsICAxMjYsICAxMjUsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAxMjUsICAxMjUsICAgIDAsICAxMjUsICAxMjYsICAxMjUsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAxMjUsICAxMjUsICAgIDAsICAxMjUsICAxMjYsICAxMjUsCisgICAgICAgIDAsICAxMjUsICAxMjUsICAxMjUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAgIDAsICAxODAsICAxODAsICAxODAsCisgICAgICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxMzgsICAxODAsICAxODAsICAxODAsICAxODAsCisgICAgICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAgOTEsICAxMjIsICAxMjIsCisgICAgICAxMjQsICAxODAsICAxMjIsICAxMjIsICAgIDAsICAgIDAsICAxMjUsICAxMjUsICAxMjUsICAxMjUsCisgICAgICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAgIDAsICAxMjIsCisKKyAgICAgIDEyNiwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwKKyAgICAgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwKKyAgICAgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwKKyAgICAgIDEyNSwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDEyNSwKKyAgICAgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwgICAgMCwgIDEyNSwgICAgMCwgIDE4MCwgIDE4MCwgIDE4MCwKKyAgICAgIDE0MiwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDEzMCwgIDE4MCwKKyAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDEyNCwKKyAgICAgIDE4MCwgIDEyMywgICAgMCwgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwKKworICAgICAgMTI1LCAgICAwLCAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgMTI1LAorICAgICAgICAwLCAgICAwLCAgMTI1LCAgMTI2LCAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LAorICAgICAgICAwLCAgMTI1LCAgMTI2LCAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTI1LAorICAgICAgMTI1LCAgICAwLCAgMTI1LCAgMTI2LCAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LCAgMTI2LCAgMTI1LCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LCAgMTI2LCAgMTI1LCAgICAwLAogICAgICAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAorICAgICAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAorICAgICAgMTMyLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTM2LCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAorICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTIyLCAgICAwLAogCi0gICAgICAxNDcsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsCi0gICAgICAxODAsICAgIDAsICAgIDAsICAgIDAsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAxMjUsICAxMjUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAxMjUsICAxMjUsICAxMjUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAxMjUsICAxMjUsCi0gICAgICAxMjUsICAxMjUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAxMjUsICAxMjUsICAxMjUsCi0gICAgICAxMjUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAxMjUsICAxMjUsICAxMjUsICAxMjUsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAxMjUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAxMjUsICAxMjUsICAxMjUsICAxODAsICAxODAsICAxODAsICAxMzksICAxODAsICAxODAsCi0gICAgICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsCi0gICAgICAxODAsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAxMjUsICAgIDAsCi0KLSAgICAgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgICAgMCwgICAgMCwgIDEyNSwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgIDEyNSwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgIDEyNSwgIDEzNCwgIDE4MCwgIDEzMSwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwKLSAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE1NiwgIDE4MCwgIDEyNSwKLSAgICAgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwKLSAgICAgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgIDEzNSwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwKLSAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE1MiwgIDE4MCwgIDEyNSwgIDEyNSwKKyAgICAgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwKKyAgICAgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgIDEyNiwKKyAgICAgICAgMCwgICAgMCwgIDEyNSwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwKKyAgICAgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwKKyAgICAgIDEyNSwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwKICAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgICAgMCwgIDEyNSwgICAgMCwKKyAgICAgIDEyNSwgICAgMCwgIDEyOSwgIDE0MSwgIDE0MywgIDEzNywgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwKIAotICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAotICAgICAgMTgwLCAgMTUxLCAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgMTY3LAotICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTU0LCAgMTgwLCAgMTgwLAotICAgICAgMTI1LCAgMTI1LCAgMTY2LCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTUzLAotICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAotICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAotICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTY1LCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAotICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTY0LCAgMTgwLCAgMTgwLCAgMTgwLAotICAgICAgMTgwLCAgMTgwLCAgMTcwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAotICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTU3LCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTUwLAorICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTU1LCAgMTgwLAorICAgICAgMTgwLCAgMTgwLCAgICAwLCAgICAwLCAgMTI1LCAgICAwLCAgMTI1LCAgICAwLCAgMTI1LCAgMTI1LAorICAgICAgICAwLCAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LCAgMTI1LCAgICAwLAorICAgICAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LCAgICAwLAorICAgICAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LAorICAgICAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgMTgwLAorICAgICAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTQ3LCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAogCi0gICAgICAxODAsICAxODAsICAxNjgsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxNDgsCi0gICAgICAxODAsICAxNjksICAxODAsICAxNjMsICAxODAsICAxODAsICAxODAsICAxODAsICAxNTgsICAxODAsCi0gICAgICAxNjAsICAxODAsICAxODAsICAxNjIsICAxNTksICAxNDksICAxNjEsICAgIDAKKyAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgICAgMCwgICAgMCwgICAgMCwgIDEyNSwKKyAgICAgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDEyNSwKKyAgICAgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwgIDEyNSwgIDE4MCwKKyAgICAgIDE4MCwgIDE4MCwgIDEzOSwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwKKyAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwKKyAgICAgIDEyNSwgIDEyNSwgIDEyNSwgIDEyNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDEyNSwgIDEyNSwKKworICAgICAgICAwLCAgICAwLCAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgICAwLCAgICAwLCAgICAwLAorICAgICAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LAorICAgICAgMTI1LCAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTI1LCAgMTM0LCAgMTgwLAorICAgICAgMTMxLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAorICAgICAgMTgwLCAgMTgwLCAgMTU2LCAgMTgwLCAgMTI1LCAgICAwLCAgICAwLCAgMTI1LCAgMTI1LCAgICAwLAorICAgICAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgMTI1LCAgMTI1LAorICAgICAgMTI1LCAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTI1LAorICAgICAgMTM1LCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAorICAgICAgMTgwLCAgMTUyLCAgMTgwLCAgMTI1LCAgMTI1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgMTI1LCAgMTI1LCAgMTI1LCAgICAwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLCAgMTgwLAorCisgICAgICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxNTEsICAgIDAsICAxMjUsICAxMjUsCisgICAgICAxMjUsICAxMjUsICAxMjUsICAgIDAsICAxNjcsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsCisgICAgICAxODAsICAxODAsICAxNTQsICAxODAsICAxODAsICAxMjUsICAxMjUsICAxNjYsICAxODAsICAxODAsCisgICAgICAxODAsICAxODAsICAxODAsICAxODAsICAxNTMsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsCisgICAgICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsCisgICAgICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxNjUsICAxODAsCisgICAgICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsCisgICAgICAxODAsICAxNjQsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxNzAsICAxODAsICAxODAsCisgICAgICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxODAsICAxNTcsICAxODAsCisgICAgICAxODAsICAxODAsICAxODAsICAxODAsICAxNTAsICAxODAsICAxODAsICAxNjgsICAxODAsICAxODAsCisKKyAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDE4MCwgIDE0OCwgIDE4MCwgIDE2OSwgIDE4MCwgIDE2MywgIDE4MCwKKyAgICAgIDE4MCwgIDE4MCwgIDE4MCwgIDE1OCwgIDE4MCwgIDE2MCwgIDE4MCwgIDE4MCwgIDE2MiwgIDE1OSwKKyAgICAgIDE0OSwgIDE2MSwgICAgMAogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBZWV9DSEFSIHl5X2VjWzI1Nl0gPQorc3RhdGljIGNvbnN0IFlZX0NIQVIgeXlfZWNbMjU2XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDMsCiAgICAgICAgIDEsICAgIDEsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCkBAIC01ODcsMTEgKzgwMSwxMSBAQAogICAgICAgIDIxLCAgIDIyLCAgICAxLCAgICAxLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAogICAgICAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LAogICAgICAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI1LCAgIDI0LCAgIDI0LAotICAgICAgIDI2LCAgIDI3LCAgIDI2LCAgICA3LCAgIDI4LCAgICAxLCAgIDI5LCAgIDMwLCAgIDMxLCAgIDMyLAorICAgICAgICA3LCAgIDI2LCAgICA3LCAgICA3LCAgIDI3LCAgICAxLCAgIDI4LCAgIDI5LCAgIDMwLCAgIDMxLAogCi0gICAgICAgMzMsICAgMzQsICAgMzUsICAgMzYsICAgMzcsICAgMjQsICAgMzgsICAgMzksICAgNDAsICAgNDEsCi0gICAgICAgNDIsICAgNDMsICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDksICAgNTAsICAgNTEsCi0gICAgICAgNTIsICAgMjQsICAgIDEsICAgNTMsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgMzIsICAgMzMsICAgMzQsICAgMzUsICAgMzYsICAgMjQsICAgMzcsICAgMzgsICAgMzksICAgNDAsCisgICAgICAgNDEsICAgNDIsICAgNDMsICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDksICAgNTAsCisgICAgICAgNTEsICAgMjQsICAgIDEsICAgNTIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCkBAIC02MDgsMjI1MCArODIyLDIxOTggQEAKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBZWV9DSEFSIHl5X21ldGFbNTRdID0KK3N0YXRpYyBjb25zdCBZWV9DSEFSIHl5X21ldGFbNTNdID0KICAgICB7ICAgMCwKLSAgICAgICAgMSwgICAgMiwgICAgMiwgICAgMSwgICAgMiwgICAgMSwgICAgMSwgICAgMywgICAgMiwgICAgNCwKLSAgICAgICAgNSwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNywgICAgMywKLSAgICAgICAgMywgICAgMywgICAgOCwgICAgNCwgICAgOSwgICAgMywgICAgMSwgICAgNCwgICAgOCwgICAgOCwKLSAgICAgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKLSAgICAgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKLSAgICAgICAgOSwgICAgNCwgICAgMworICAgICAgICAxLCAgICAyLCAgICAyLCAgICAxLCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAzLAorICAgICAgICA0LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA2LCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICA3LCAgICAzLCAgICA4LCAgICAxLCAgICAzLCAgICA3LCAgICA3LCAgICA3LAorICAgICAgICA3LCAgICA3LCAgICA3LCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLAorICAgICAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICA4LAorICAgICAgICAzLCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfdWludDE2X3QgeXlfYmFzZVsyMTg5XSA9CitzdGF0aWMgY29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbMjE4NF0gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCA1NDU1LCAgIDUzLCA3ODU2LCA3ODU2LCAgIDU3LCA1NDMzLCAgIDY0LCAgIDgxLAotICAgICA1NDQ1LCA3ODU2LCA3ODU2LCAgIDk5LCAgIDMwLCAgMTUxLCAgIDQ2LCA1NDMwLCAgIDUyLCAgMTY4LAotICAgICAgMjEwLCAgMTY4LCAgMTYwLCAgIDQ0LCAgMTI1LCAgIDYwLCAgIDMxLCAgIDU4LCAgMTMyLCAgMTcwLAotICAgICAgMjE0LCAgMjE3LCAgMjI5LCAgIDU5LCAgMTcwLCAgMjIyLCAgMjM3LCAgMjQzLCAgMjUwLCA1NDE4LAotICAgICAgMjU1LCA1NDEwLCA1MzgwLCAgMzAwLCA3ODU2LCAgICAwLCA3ODU2LCAgMzE2LCAgMzM5LCAgMzYzLAotICAgICA1NDEzLCAgMzg3LCAgICAwLCAgMzk0LCAgICAwLCAgNDI4LCA3ODU2LCA3ODU2LCA3ODU2LCA3ODU2LAotICAgICA3ODU2LCAgMjk2LCAgMzE2LCAgICAwLCA1Mzg2LCA1MzgzLCA1Mzk3LCAgICAwLCA1Mzk1LCA1MzgzLAotICAgICA1Mzk2LCA1Mzc4LCA1MzY2LCA1MzYwLCA1MzYxLCA1MzYyLCA1MzYwLCA1MzQ0LCA1MzUyLCA1MzM3LAotICAgICA1MzUwLCA1MzMxLCAgMTE2LCA1MzQxLCA1MzEyLCA1Mjk3LCA1Mjk1LCA1Mjk5LCA1MzA1LCA1Mjk0LAotICAgICA1Mjk5LCA1Mjc5LCA1Mjc4LCAgIDU2LCAgIDY4LCA1MjYzLCA1MjYxLCAgIDgwLCA1MjY1LCA1MjU5LAorICAgICAgICAwLCAgICAwLCA2MDY2LCA3NjI2LCA3NjI2LCA3NjI2LCA2MDQ0LCAgICAwLCA3NjI2LCA2MDU2LAorICAgICAgIDQzLCAgIDcwLCA2MDQ0LCAgIDQzLCA2MDQwLCAgIDc1LCAgMTEwLCAgMTUxLCAgICAwLCAgIDcwLAorICAgICAgIDg1LCAgMTAyLCAgIDY3LCAgIDYxLCAgIDc3LCAgMTA1LCAgMTEzLCAgMTU1LCAgMTU4LCAgMTcwLAorICAgICAgIDcwLCAgMTc2LCAgMTY1LCAgMTEwLCAgMTg5LCAgMTQ4LCA2MDI1LCAgMTg0LCA2MDE2LCA2MDAxLAorICAgICA3NjI2LCAgICAwLCA3NjI2LCAgMjI1LCAgMjQ3LCAgMjcwLCA2MDMwLCAgMjkzLCAgICAwLCAgMzAwLAorICAgICAgICAwLCAgMzIyLCA3NjI2LCA3NjI2LCA3NjI2LCA3NjI2LCA3NjI2LCAgMzQ0LCAgICAwLCA2MDAzLAorICAgICA2MDAwLCA2MDEzLCAgICAwLCA2MDA4LCA1OTk2LCA2MDA3LCA2MDAxLCA1OTg2LCA1OTYwLCA1OTQ2LAorICAgICA1OTQ3LCA1OTQ2LCA1OTM5LCA1OTQ4LCA1OTIzLCA1OTI2LCA1OTA2LCAgMjg0LCA1OTA3LCA1OTA3LAorICAgICA1ODc1LCA1ODY4LCA1ODU3LCA1ODQ5LCA1ODE2LCA1ODExLCA1ODAxLCA1Nzk0LCAgIDg5LCAgIDgxLAorICAgICA1NzY1LCA1NzUyLCAgMTA5LCA1NzA0LCA1Njk4LCA1NzA1LCAgMTIzLCAgMjExLCAgICAwLCAgICAwLAogCi0gICAgIDUyNjcsICAgNjgsICAxNjYsICAgIDAsICAgIDAsICAgMTUsICAxMjIsIDUyNTUsIDUyNjQsICAxODksCi0gICAgIDUyMzgsIDUyMzYsIDUyMTksIDUyMjIsIDUyMTIsIDUyMTksIDUyMDksIDUyMDgsIDUyMTQsICAgIDAsCi0gICAgIDUyMTIsICAgIDAsIDUxOTUsIDUxODEsIDUxNzUsIDUxNzYsIDUxNzUsIDUxNzQsICAxMjgsIDUxODUsCi0gICAgIDUxNjgsIDUxNjcsIDUxNjAsICAxNTksIDUxNDcsICAyMDEsIDUxNDQsICAgMzgsIDUxMzcsIDUxNDksCi0gICAgICAgIDAsIDUxMzMsICAgIDAsIDUxMTIsIDUxMTEsIDUwOTQsIDUwOTAsIDUwNzgsIDUwNDgsIDUwNjIsCi0gICAgIDc4NTYsIDc4NTYsICA0NTMsICA0NzcsICAyMzYsICA1MTgsICA1NDIsICA1NjYsIDUwNzEsICA1NzMsCi0gICAgIDUwNzgsICA1OTcsICAyNDgsIDUwNTQsIDUwMjksIDUwMzQsIDUwMjUsICAgIDAsICAgIDAsIDUwMzAsCi0gICAgICAgIDAsIDUwMzgsIDUwMzMsIDUwMjIsIDUwMDYsIDUwMDcsIDUwMDQsIDUwMDUsIDUwMTIsICAgIDAsCi0gICAgICAgIDAsIDUwMDYsIDQ5OTYsICAgIDAsIDUwMDgsIDQ5ODgsIDQ5NzYsIDQ5OTAsIDQ5ODksIDQ5OTIsCi0gICAgIDQ5ODgsIDQ5NzIsIDQ5NzEsIDQ5NTMsIDQ5NjksIDQ5NTIsIDQ5NTYsIDQ5NTEsIDQ5NTIsIDQ5NjUsCisgICAgICAgOTksICAxNjgsIDU2ODYsIDU2OTUsICAyMDQsIDU2NzYsIDU2NTYsIDU2NTksIDU2MzUsIDU2MjQsCisgICAgIDU2MTAsIDU2MDAsIDU1OTEsIDU1OTcsICAgIDAsIDU1ODQsICAgIDAsIDU1NjcsIDU1NzMsIDU1NjcsCisgICAgIDU1NjgsIDU1NjcsIDU1NjcsICAyMDAsIDU1NDksIDU1MzIsIDU1NDMsIDU1MzYsICAxMzEsIDU1MzIsCisgICAgICAzMjcsIDU1MTksICAxOTQsIDU1MTgsIDU1MzAsICAgIDAsIDU1MTMsICAgIDAsIDU1MTAsIDU1MDksCisgICAgIDU1MTQsIDU0ODgsIDU0NzksIDU0NjcsIDU0ODIsIDc2MjYsIDc2MjYsICAzNjMsICAzODYsICAxODAsCisgICAgICA0MjYsICA0NDksICA0NzIsIDU0NzUsICA0NzksIDU0ODIsICA1MDIsICAyNDEsIDU0NzIsIDU0NDYsCisgICAgIDU0MzAsIDU0MjEsICAgIDAsICAgIDAsIDU0MjYsICAgIDAsIDU0MzUsIDU0MzAsIDU0MTksIDU0MTMsCisgICAgIDU0MTQsIDUzNzQsIDUzNzUsIDUzODIsICAgIDAsICAgIDAsIDUzNzcsIDUzNjYsICAgIDAsIDUzNzgsCisgICAgIDUzNzMsIDUzNDYsIDUzNjAsIDUzNTksIDUzNjIsIDUzNTgsIDUzNDIsIDUzMjUsIDUzMjEsIDUzMzcsCisgICAgIDUzMTksIDUzMDQsIDUyOTksIDUzMDAsIDUyOTQsIDUyNzcsIDUyNTcsICAgIDAsIDUyNjIsIDUyNTQsCiAKLSAgICAgNDk1MCwgNDkzNCwgICAgMCwgNDkzOSwgNDkzMywgICAgMCwgICAgMCwgNDkzNywgNDkyNywgICAgMCwKLSAgICAgNDkzOCwgICAgMCwgNDkzNSwgNDkwNywgNDkxMiwgICAgMCwgICAgMCwgNDkwMSwgICAgMCwgNDkwOSwKLSAgICAgNDkxNywgIDI0NCwgNDg5OSwgICAgMCwgNDg4NywgNDg4MiwgICAgMCwgNDg3NywgICAgMCwgNDg4MCwKLSAgICAgICAgMCwgNDg2MSwgNDg2NCwgNDg1NywgNDg0NSwgNDg1MCwgNDg0MywgNDgzOSwgICAgMCwgNDgzNywKLSAgICAgNDg0OSwgICAgMCwgNDgzOCwgICAgMCwgNDgzNywgICAgMCwgICAgMCwgICAgMCwgNDgxOSwgICAgMCwKLSAgICAgIDE1MywgIDE1NiwgNDgzMCwgICAgMCwgICAgMCwgNDgyMSwgICAgMCwgNDgxOCwgNDgxOCwgIDYzNywKLSAgICAgNDg0NywgIDY2MCwgIDY4NCwgNDgzMCwgIDY5MSwgIDUwMCwgIDI4MSwgIDcxNSwgNDgyMSwgIDczOSwKLSAgICAgNDgyMCwgNDgxOSwgIDc0NywgIDI5MCwgNDgxOCwgNDgxNiwgIDUwNywgIDc4OCwgIDgxMSwgNDgxNSwKLSAgICAgICAgMCwgICAgMCwgNDc3NSwgIDM1MCwgNDc3OCwgNDc4MywgICAgMCwgICAgMCwgICAgMCwgNDc4MSwKLSAgICAgICAgMCwgNDc3NywgNDc2MiwgNDc0NiwgICAgMCwgNDc0NiwgICAgMCwgNDc0MCwgNDczOSwgNDc0MCwKKyAgICAgICAgMCwgICAgMCwgNTI1OCwgNTIxNiwgICAgMCwgNTIyNiwgICAgMCwgNTIyMiwgNTE5MSwgNTE5NiwKKyAgICAgICAgMCwgICAgMCwgNTE2NiwgICAgMCwgNTE3NSwgNTE4MiwgIDIwMSwgNTE2MywgICAgMCwgNTE0NiwKKyAgICAgNTE2MSwgICAgMCwgNTE1NiwgICAgMCwgNTEzOCwgICAgMCwgNTEyMCwgNTEyMywgNTExNiwgNTEwMSwKKyAgICAgNTA4NSwgNTA3NiwgNTA1MywgICAgMCwgNTA1MSwgNTA2MiwgICAgMCwgNTA1MSwgICAgMCwgNTAxOCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgNTAxMywgICAgMCwgIDIyMywgIDI0MCwgNTAyMywgICAgMCwgICAgMCwKKyAgICAgNTAxNCwgICAgMCwgNTAxMSwgNTAwMSwgIDU0MSwgNTAxMCwgIDU2MywgIDU4NiwgNTAwNiwgIDU5MywKKyAgICAgIDM1MiwgIDI2MCwgIDYxNiwgNDk5NiwgIDYzOSwgNDk5NSwgNDk5NCwgIDY0NywgIDI3MSwgNDk4MiwKKyAgICAgNDk2MSwgIDQwOCwgIDY4NywgIDcwOSwgNDk2MCwgICAgMCwgICAgMCwgNDkzNiwgIDM3NCwgNDkzNywKKyAgICAgNDkzMCwgICAgMCwgICAgMCwgICAgMCwgNDkyNywgICAgMCwgNDkyNCwgNDkyNSwgNDkwOCwgICAgMCwKKyAgICAgNDkwOCwgICAgMCwgNDkwMCwgNDkwMCwgNDkwMSwgICAgMCwgNDg4NiwgNDg1MywgICAgMCwgICAgMCwKIAotICAgICAgICAwLCA0NzIyLCA0NzIxLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgNjE0LCA0NzI4LAotICAgICAgICAwLCAgICAwLCA0NzM2LCA0NzE1LCA0NzAwLCAgICAwLCAgICAwLCA0Njk4LCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAwLCA0NzEzLCA0NzA0LCA0NzEwLCAgICAwLCA0NzAzLCA0NzA2LCA0NzA3LCA0Njc5LAotICAgICA0Njc1LCA0NjY3LCA0NjM5LCAgICAwLCA0NjMyLCAgICAwLCA0NjA3LCAgICAwLCAgMjc1LCAgICAwLAotICAgICAgICAwLCA0NTk5LCA0NTkyLCAgODE3LCA0NTg1LCAgICAwLCAgICAwLCAgICAwLCAgODU2LCAgODgwLAotICAgICAgMjkzLCAgOTIxLCA0NjEwLCA0NjA4LCAgNDA1LCAgOTQ0LCAgOTY4LCAgOTkyLCA0NTk4LCAgOTk5LAotICAgICAgNjIxLCA0NTgxLCA0NTc5LCAxMDIyLCAgNzcwLCAxMDQ2LCAxMDY5LCA0NTYyLCAgICAwLCA0NTUzLAotICAgICAgNDI3LCAgNDI4LCAxMDkzLCA0NTUyLCAxMTE3LCAgMzMzLCA0NTUxLCA0NTUwLCA0NTE5LCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCA0NDkxLCAgICAwLCA0NTA0LCA0NTAyLCA0NDY5LCA0NDYwLCAgICAwLAotICAgICA0NDc3LCA0NDcyLCA0NDYzLCAgICAwLCAgICAwLCAxMTM2LCAgMjkzLCA0NDUzLCA0NDIwLCA0NDM3LAorICAgICAgICAwLCAgICAwLCAgICAwLCAgNTE5LCA0ODU4LCAgICAwLCAgICAwLCA0ODY1LCA0ODQ3LCA0ODMwLAorICAgICAgICAwLCAgICAwLCA0ODI1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCA0ODI1LCA0Nzg5LCA0NzkwLAorICAgICAgICAwLCA0NzgzLCA0NzY1LCA0NzgwLCA0NzUxLCA0NzI3LCA0NzM3LCA0NzI2LCAgICAwLCA0NzA4LAorICAgICAgICAwLCA0NzA3LCAgICAwLCAgMjUwLCAgICAwLCAgICAwLCA0Njk5LCA0NjkzLCAgNzE1LCA0Njg4LAorICAgICAgICAwLCAgICAwLCAgICAwLCAgNzUzLCAgNzc2LCAgMjcyLCAgODE2LCA0NzE0LCA0NzEyLCAgMzYwLAorICAgICAgODM4LCAgODYxLCAgODg0LCA0NzAyLCAgODkxLCAgNDE1LCA0NjgzLCA0NjgxLCAgOTEzLCAgNTI2LAorICAgICAgOTM2LCAgOTU4LCA0NjYxLCAgICAwLCA0NjYwLCAgNDIzLCAgNTExLCAgOTgxLCA0NjU4LCAxMDA0LAorICAgICAgMjk0LCA0NjU3LCA0NjY0LCA0NjAyLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCA0NTk2LCAgICAwLAorICAgICA0NjA5LCA0NTg2LCA0NTQ4LCA0NTI4LCAgICAwLCA0NTQzLCA0NTM3LCA0NTE3LCAgICAwLCAgICAwLAorICAgICAxMDIzLCAgNTE2LCA0NTA2LCA0NDk0LCA0NDk3LCAgICAwLCA0NDg3LCAgICAwLCA0NDkxLCA0NDgzLAogCi0gICAgICAgIDAsIDQ0MjcsICAgIDAsIDQ0MjksIDQ0MjIsICAgIDAsICAgIDAsIDQ0MjAsIDQzOTQsICAyOTIsCi0gICAgIDQzOTMsIDQ0MTEsICAzODcsIDQ0MDgsICAgIDAsIDQzOTAsIDQzODIsIDQzOTQsIDQzNjgsIDQzNjIsCi0gICAgIDQzNzIsIDQzNTAsIDQzNTcsIDQzMzgsIDQzMTcsIDQzMTgsIDQzMTAsIDQyNzgsIDQyOTIsIDExNzMsCi0gICAgIDQzMTAsIDExOTYsIDEyMjAsIDQzMDUsIDEyMjcsICA3NzcsICAyODUsIDEyNTEsICAzMzQsIDEyOTEsCi0gICAgIDEzMTQsIDEzMzgsIDQyOTQsIDQyOTMsIDEzNDYsICAzMzYsIDQyOTEsIDQyNTYsIDQyNTUsIDQyNTQsCi0gICAgIDEzODcsICAzNjMsIDQyNTIsIDQyNTEsICA1MTUsICA2MzEsIDE0MjgsIDQyNTAsIDE0NTIsICAzNjQsCi0gICAgIDQyNDAsIDQyNDcsIDQyMTgsICA4NDAsICAgIDAsICAzNzEsIDQyMTQsICA5MDMsIDE0OTMsIDE1MTYsCi0gICAgIDQyMTIsICAgIDAsICAgIDAsIDQxODQsIDQyMDAsIDQxNDksICAgIDAsIDQxNTgsIDQxNDAsICAgIDAsCi0gICAgIDQxNDUsIDQxNTgsIDQxNDMsIDQxMjYsIDQxMjUsICAzODAsIDQxMDksICA0MjcsIDQxMDgsIDExMjEsCi0gICAgIDQxMDYsIDQwOTUsIDQwODIsIDQwNjcsIDQwNzYsICAgIDAsIDQwNjYsIDQwNzcsIDQwMjUsIDQwMjgsCisgICAgICAgIDAsICAgIDAsIDQ0OTIsIDQ0NTcsICA1MTUsIDQ0NTUsIDQ0NTYsICAgNzMsIDQ0NTEsICAgIDAsCisgICAgIDQ0MzksIDQ0MzEsIDQ0MDcsIDQzODEsIDQzNzMsIDQzNjAsIDQzNDAsIDQzNTYsIDQzNDksIDQzMjAsCisgICAgIDQzMjAsIDQzMTEsIDQyOTksIDQzMTQsIDEwNTksIDQzMjgsIDEwODEsIDExMDQsIDQzMTMsIDExMTEsCisgICAgICA2NjksICAzMTMsIDExMzQsICAzMjQsIDExNzMsIDExOTUsIDEyMTgsIDQyOTUsIDQyODYsIDEyMjYsCisgICAgICAzNTcsIDQyNTcsIDQxOTgsIDQxOTcsIDQxOTQsIDEyNjYsICAzNTgsIDQxOTMsIDQxNjAsICA2NjMsCisgICAgICA2ODMsIDEzMDYsIDQxNTksIDEzMjksICA0MjAsIDQxNTUsIDQxNjEsIDQxMzUsICA3MzcsICAgIDAsCisgICAgICAzOTQsIDQxMzQsICA3OTgsIDEzNjksIDEzOTEsIDQxMzEsICAgIDAsICAgIDAsIDQxMDQsIDQwODgsCisgICAgIDQwNjUsICAgIDAsIDQwNTUsIDQwMzksICAgIDAsIDQwNDMsIDQwNTYsIDQwMDksIDQwMjIsIDQwMjAsCisgICAgICA3MDMsIDQwMDUsICA3MjgsIDM5OTAsIDEwMDgsIDM5ODcsIDM5NzQsIDM5OTMsIDM5ODEsIDM5NjAsCisgICAgICAgIDAsIDM5NDgsIDM5NTgsIDM5NDksIDM5NTQsIDM5NDIsIDM5MTEsIDM5MDgsICAgIDAsICAgIDAsCiAKLSAgICAgNDAyNiwgNDAxNSwgNDAxNCwgICAgMCwgICAgMCwgNDAxOCwgICAgMCwgMzk4MSwgMzk3MywgMzk4NiwKLSAgICAgMzk4NCwgMzk3NiwgMzk0OSwgMzk2MCwgMzkyOSwgMzkyMywgMzkxOCwgMzkwOSwgMzg4OCwgMzg4NSwKLSAgICAgMTU0MSwgMTU2NSwgIDQyMywgMTYwNiwgMzg5MiwgMzg4OCwgIDYzMywgMTYzMCwgMTY1NCwgMTY2MSwKLSAgICAgMTY4NSwgMzg3NywgMTY5MiwgMTcxNiwgMTczOSwgMzg3NiwgMzg1NywgMzg1NiwgMTc2MiwgIDkxMCwKLSAgICAgMTc4NiwgMTgwOSwgMzg1MiwgICAgMCwgMTI3NCwgICAgMCwgIDQ2MSwgMzgzNywgMTI4MSwgMTgzMywKLSAgICAgMTg1NiwgMzgzMywgICAgMCwgIDc4NSwgIDgyNCwgMzgyMCwgIDQ4NSwgIDg1MywgIDg1NiwgMTg4MCwKLSAgICAgMzgxMCwgMTkwNCwgIDQyNCwgMzgwOSwgMzc5OCwgIDUyOSwgMzc2MiwgMzc2NSwgMzczOSwgICAgMCwKLSAgICAgICAgMCwgMzc0MiwgMzcyOSwgMzcxNSwgMzY5MSwgMzcwMywgMzY4MywgMzY2NiwgMzY3MiwgMzY2NCwKLSAgICAgMzY0MywgMzYzMiwgMzYzMywgMzYxOSwgMzYwMSwgICA1NiwgIDUwNCwgIDY0NiwgMzYwOSwgMzU3NSwKLSAgICAgMzU4NCwgMzU4MiwgICAgMCwgMzU3MywgMzU2NywgICAgMCwgICAgMCwgICAgMCwgMzU4MCwgMzU1MiwKKyAgICAgMzkxMSwgICAgMCwgMzkwNiwgMzg5OCwgMzkwMCwgMzg3OSwgMzg2OSwgMzg2MCwgMzg2MCwgMzg1MCwKKyAgICAgMzgwNywgMzgwNCwgMzgwNiwgMzc4NywgMzc4NiwgMTQxNSwgMTQzOCwgIDQyMSwgMTQ3OCwgMzc3OSwKKyAgICAgMzc2NSwgIDY4NCwgMTUwMSwgMTUyNCwgMTUzMSwgMTU1NCwgMzczOSwgMTU2MSwgMTU4NCwgMTYwNiwKKyAgICAgMzczNywgMzczNCwgMzY4OSwgMTYyOCwgIDgwNSwgMTY1MSwgMTY3MywgMzY2OCwgICAgMCwgMTE1NiwKKyAgICAgICAgMCwgIDU3MSwgMzY0NiwgMTE2MywgMTY5NiwgMTcxOCwgMzY0NCwgICAgMCwgIDc0NywgIDc1MCwKKyAgICAgMzY1MSwgIDYwMSwgIDgxMywgIDgzMiwgMTc0MSwgMzYyNSwgMTc2NCwgIDQyNSwgMzYyNCwgMzYzMSwKKyAgICAgIDQ5MCwgMzU5NCwgMzU4MSwgMzU3NywgICAgMCwgICAgMCwgMzU2MywgMzU2NSwgMzUzMywgMzUzMiwKKyAgICAgMzU0NCwgMzUyNiwgMzUwNiwgMzQ5NCwgMzQ4NSwgMzQ4NCwgMzQ3NiwgMzQ3NiwgMzQ2MywgMzQ0OCwKKyAgICAgIDIyNywgIDk5OCwgMTAwOSwgMzQ1NSwgMzQ0MSwgMzQyOSwgMzQxMSwgICAgMCwgMzM5OCwgMzM3MSwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgMzM4NCwgMzM2MiwgMzM2NywgMzM1MywgICAgMCwgICAgMCwgICAgMCwKIAotICAgICAzNTMzLCAzNTE5LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAzNTIzLCAgICAwLCAgICAwLAotICAgICAgICAwLCAzNTEyLCAxOTQ0LCAzNTQ3LCAxOTY3LCAxOTkxLCAzNTE0LCAxOTk4LCAgMzI1LCAyMDIyLAotICAgICAyMDQ2LCAyMDUzLCAyMDc3LCAzNTA1LCAzNDc0LCAyMDg1LCAgNDUyLCAzNDM0LCAyMTI2LCAgNDc2LAotICAgICAzMzkzLCAzMzg2LCAzMzg1LCAzMzY1LCAyMTY3LCAgNTEzLCAzMzQ1LCAgOTE4LCAgOTM4LCAyMjA4LAotICAgICAzMzQ0LCAyMjMyLCAgNTQyLCAzMzQzLCAzMzQ4LCAxMTQyLCAxMTQ5LCAzMzQ3LCAzMzE0LCAxMTY3LAotICAgICAxMTY5LCAyMjczLCAzMzA1LCAyMjk3LCAgNTQzLCAzMzA0LCAzMzEwLCAxMzY5LCAgICAwLCAxMzc2LAotICAgICAgICAwLCAgNDg2LCAzMjgyLCAxNDEwLCAyMzM4LCAyMzYxLCAzMjc4LCAgICAwLCAyMzg0LCAgMzc0LAotICAgICAgMTE1LCAgMzg5LCAgMTUwLCAgNjcyLCAgMjA1LCAgNjEwLCAzMjM1LCAgNTUwLCAgNDAzLCAgMzEzLAotICAgICAgNzgzLCAgNTUzLCAgNzYxLCAgNTIyLCAgODAwLCAgNDUxLCAgNTc4LCAgODkzLCAgNjMzLCAgODI5LAotICAgICAgNTcxLCAxMTA4LCAxMTEyLCAzMjMxLCAzMjI4LCAxMTIzLCAzMjA2LCAzMTg5LCAxMTMwLCAxMTI4LAorICAgICAgICAwLCAgICAwLCAzMzU3LCAgICAwLCAgICAwLCAgICAwLCAzMzQ2LCAxODAzLCAzMzU4LCAxODI1LAorICAgICAxODQ4LCAzMzU2LCAxODU1LCAgMzMwLCAxODc4LCAxOTAxLCAxOTA4LCAxOTMxLCAzMzQ3LCAzMzQ2LAorICAgICAxOTM5LCAgNDI2LCAzMzQzLCAxOTc5LCAgNDQ5LCAzMzQyLCAzMzI0LCAzMzIzLCAzMzIxLCAyMDE5LAorICAgICAgNDk4LCAzMzIwLCAxMDMxLCAxMDM1LCAyMDU5LCAzMzE5LCAyMDgyLCAgNTM4LCAzMzE4LCAzMjk1LAorICAgICAxMDUzLCAxMDU1LCAzMjk0LCAzMjkwLCAxMTcyLCAxMjM2LCAyMTIyLCAzMjYyLCAyMTQ1LCAgNTY0LAorICAgICAzMjYxLCAzMjY3LCAxMjUwLCAgICAwLCAxMjU3LCAgICAwLCAgNjI0LCAzMjM3LCAxMjg4LCAyMTg1LAorICAgICAyMjA3LCAzMjM2LCAgICAwLCAyMjI5LCAgMzAxLCAgNDA3LCAgMzAyLCAgMjQ2LCAxMDEyLCAgNTIyLAorICAgICAgNzAwLCAzMTkxLCAgNTM5LCAgIDE5LCAgNTM4LCAgNjYxLCAgNTY5LCAgNzkwLCAgNjUwLCAgNjgyLAorICAgICAgNDA2LCAgNzU3LCAxMDE1LCAgODM0LCAgODg3LCAgNDU0LCAgOTk5LCAxMDU0LCAzMTg5LCAzMTg4LAorICAgICAxMTY4LCAzMTg2LCAzMTg0LCAxMjE0LCAxMDE3LCAgNTcxLCAzMTY2LCAzMTY0LCAyMjY2LCAyMjg5LAogCi0gICAgICA1OTMsIDMxODYsIDMxODUsIDI0MjIsIDI0NTksIDI0OTUsIDI1MzEsICA2MzQsIDI1NTUsICAyNTgsCi0gICAgIDI1NjMsIDI1ODcsIDMxOTQsIDI1OTQsIDI2MTgsIDI2NDEsIDMxOTMsIDI2NjUsIDI2ODgsIDMxOTEsCi0gICAgIDMxODgsIDMxODUsIDI3MTEsIDE0MTcsIDI3MzUsIDI3NTgsIDMxODQsICAgIDAsIDE0NzUsICAgIDAsCi0gICAgICA3MjMsIDMxNzIsIDE0ODIsIDI3ODIsIDI4MDUsIDMxNDcsICAgIDAsIDE1ODgsICAgIDAsIDE1OTUsCi0gICAgICAgIDAsICA3MjQsIDMxNDYsIDE5MjcsIDI4MjksIDI4NTIsIDMxMzUsICAgIDAsICA2NjEsIDE5MzQsCi0gICAgIDMxMjIsIDEyOTAsIDE0MjUsIDMxMTQsIDMxMTEsIDE0OTAsIDE1MTAsIDI4NzYsIDMxMDEsIDI5MDAsCi0gICAgICA2NjIsIDMwOTAsIDMwNjEsICA2MzYsICA4MDMsICA2NTMsIDEyOTAsIDE0MjcsIDE0OTIsIDIwOTUsCi0gICAgIDE2MDQsICA3MDgsICA4NDksICA5MzcsIDIxMjIsICA4NzIsIDE2MDUsIDE5NDQsICA4MDQsIDExODcsCi0gICAgIDEyNDIsIDIwOTksICA5MzYsICA5NjAsIDE1MzIsIDIxMDEsICA4NzQsICA5MzgsIDEwMTUsICA5NjIsCi0gICAgIDEwMTQsIDIxMjQsIDIxNjMsIDI5NDIsIDEwMTYsIDI5NjUsIDEwMzgsIDI5ODgsIDIxNTQsIDMwMTIsCisgICAgIDIzMTEsIDIzNDYsICA2MTcsIDIzNjksICA2MjUsIDIzNzcsIDI0MDAsIDMxNzgsIDI0MDcsIDI0MzAsCisgICAgIDI0NTIsIDMxNjgsIDI0NzUsIDI0OTcsIDMxNjcsIDMxNjMsIDMxMzMsIDI1MTksIDEyOTUsIDI1NDIsCisgICAgIDI1NjQsIDMxMzAsICAgIDAsIDEzNTEsICAgIDAsIDExMTksIDMxMDUsIDEzNTgsIDI1ODcsIDI2MDksCisgICAgIDMxMDQsICAgIDAsIDE0NjAsICAgIDAsIDE0NjcsICAgIDAsIDExNDIsIDMxMDMsIDE3ODYsIDI2MzIsCisgICAgIDI2NTQsIDMwOTMsICAgIDAsICA3MDYsIDE3OTMsIDMwNzgsIDEzMDMsIDEzNjYsIDMwNzUsIDMwNzEsCisgICAgIDEzODUsIDE0MTUsIDI2NzcsIDMwNTIsIDI3MDAsICA3NTIsIDMwNDIsIDMwNDgsICA1MTgsICA4NTQsCisgICAgICA2NjMsIDExNzIsIDEzMDUsIDEzNjgsIDE5NDksIDE0NzYsICA5MDcsICA4MzIsICA5MzAsIDE5NzQsCisgICAgICA3MDIsIDE0NzcsIDE4MDMsICA5NTEsIDE5NTAsIDE5NTEsIDE5NTMsICA5NzQsICA5NTMsIDE5OTAsCisgICAgIDE5OTMsICA3NjksICA4MzEsICA5NTIsICA5OTcsIDEwNzQsIDIwMTMsIDIwMTgsIDI3NDEsIDExMjcsCisgICAgIDI3NjMsIDE0MDcsIDI3ODUsIDIwNDYsIDI4MDgsIDI4MzEsIDMwMzcsIDMwMDUsIDI4MzksICA4MTAsCiAKLSAgICAgMzAzNiwgMzA1MiwgMzA1MSwgMzA0NCwgIDY4NiwgMzA0OSwgMzA4NSwgIDk2NywgMzA0NywgMzEyNiwKLSAgICAgIDk2OSwgMzA0NiwgMzA0NSwgMzAyMCwgMzAxNywgMzE2NywgIDk3MCwgMjk2NywgMTU0MSwgMTczMywKLSAgICAgMzIwOCwgMjk2NiwgMzIzMiwgMTAyMiwgMjk0NywgMjk1MywgMjA5NiwgMjE2MywgMjk1MSwgMjk1MCwKLSAgICAgMjE2NCwgMjE4MiwgMzI3MywgMjkwOSwgMzI5NywgMTA0MiwgMjkwOCwgMjkxNSwgMTA0MywgMjI1NSwKLSAgICAgMjkxMywgMjE4MywgMjE4NCwgMjkxMSwgMjg5MiwgMjIwNSwgMjI0OSwgMzMzOCwgMjg4MiwgMzM2MiwKLSAgICAgMTA0NSwgMjg4MSwgMjg4NiwgICAgMCwgMjI2MywgICAgMCwgMjMyMCwgICAgMCwgIDc1NiwgMjg1NywKLSAgICAgMjMyNywgMzQwMywgMzQyNiwgMjg1MywgICAgMCwgMTA2MSwgMTA2MiwgMTA4NywgMTExMSwgMjMzNywKLSAgICAgMTE4OCwgMTk0MywgMTE4OSwgMTI0NCwgMjM3NiwgMTUzNCwgMjM3NywgMjMzNiwgMTEwOSwgMTI0MywKLSAgICAgMjQwMiwgMjAxMywgMTMwNiwgMjA5NiwgMjM3OCwgMTQ0NiwgMjM3NSwgMTI0NSwgMzQ1MSwgMzQ3NCwKLSAgICAgMzQ5OCwgMTA2NiwgMzUzOCwgMzU2MiwgMzU4NiwgMjgzNCwgMzU5MywgMzYxNywgMzY0MCwgMjgzMCwKKyAgICAgMzAwNCwgMjg3OSwgIDg2MCwgMzAwMSwgMjkxOSwgIDg2MSwgMjk4NiwgMjk4NSwgMjk4MywgMjk2NCwKKyAgICAgMjk1OSwgIDg2MiwgMjk2MSwgMTYwMCwgMjAxNiwgMjk5OSwgMjk2MCwgMzAyMiwgIDg4OCwgMjkyNywKKyAgICAgMjkzMiwgMjA1NCwgMjA1NiwgMjkzMCwgMjkyOSwgMjA5MiwgMjA5NywgMzA2MiwgMjkyMCwgMzA4NSwKKyAgICAgIDk3OCwgMjkwOCwgMjg5NSwgMTA1OCwgMjExMSwgMjg5MiwgMjExOSwgMjE1NSwgMjg5MCwgMjg4OSwKKyAgICAgMjE1NiwgMjE2MCwgMzEyNSwgMjg4MCwgMzE0OCwgMTA4MSwgMjg2OCwgMjg1NSwgICAgMCwgMjE3NCwKKyAgICAgICAgMCwgMjI1MSwgICAgMCwgMTQ4NiwgMjg0NiwgMjMxOCwgMzE4OCwgMzIxMCwgMjg0NCwgICAgMCwKKyAgICAgMTE4OCwgMTMyMywgMTQzMiwgMTU3NywgMjE4NCwgMTU3OCwgMTgwMiwgMTYyMSwgMTYyMiwgMjI0MywKKyAgICAgMTY0NSwgMjI0NCwgMjA1OCwgMTY2NiwgMTY4OSwgMjE1NSwgMjMyOSwgMTg3MCwgMjcxMCwgMjI0NiwKKyAgICAgMTY2OCwgMjIwMiwgMTM4NCwgMzIzNCwgMzI1NiwgMzI3OSwgMTA4MiwgMzMxOCwgMzM0MSwgMzM2NCwKKyAgICAgMjg0MiwgMzM3MSwgMzM5NCwgMzQxNiwgMjg0MSwgMzQzOSwgMzQ2MSwgMjg0MCwgMzQ4NCwgMzUwNiwKIAotICAgICAzNjY0LCAzNjg3LCAyODExLCAzNzExLCAzNzM0LCAyODEwLCAyODA2LCAyNzkxLCAzNzU3LCAyNDQ1LAotICAgICAzNzgxLCAzODA0LCAyNzg5LCAgICAwLCAyNDgyLCAgICAwLCAxMDA4LCAyNzg3LCAyNTAyLCAzODI4LAotICAgICAzODUxLCAyNzQ0LCAgICAwLCAyNTA5LCAgICAwLCAyNTE2LCAgICAwLCAxMTUzLCAyNzQxLCAyNTIzLAotICAgICAzODc1LCAzODk4LCAyNzQwLCAgICAwLCAgICAwLCAyOTIzLCAgICAwLCAyOTMwLCAgICAwLCAxMzAwLAotICAgICAyNzE4LCAzMDY3LCAzOTIyLCAzOTQ1LCAyNzE3LCAgICAwLCAgICAwLCAxMTk4LCAzMDc0LCAyNzI0LAotICAgICAyMzk5LCAyNDE3LCAyNzIxLCAyNzAxLCAyNDUzLCAyNDU0LCAzOTY5LCAyNjcwLCAzOTkzLCAxMjg1LAotICAgICAyNjQ5LCAyNjU1LCAyNDAxLCAyNDM4LCAzMDgzLCAyMzk4LCAxNTU4LCAyNDU3LCAyOTQwLCAxNzA4LAotICAgICAzMDg0LCAxNTU3LCAxMzg1LCAxNzA5LCAxNTA4LCAxNzU0LCAxNzEwLCAxNzU1LCAxNzc4LCAzMTIwLAotICAgICAxNzc5LCAzMTE4LCAxODAxLCAxODAzLCAxODI1LCA0MDM1LCA0MDU5LCA0MDY4LCAxODI2LCAyNjQ2LAotICAgICAyNjQzLCA0MDg2LCAxMjg3LCAyNjI0LCA0MTI3LCAxMjg4LCAyNjAwLCA0MTY4LCAxMzE1LCAyNTk5LAorICAgICAyODE1LCAyODEzLCAyODExLCAzNTI4LCAyMzI4LCAzNTUxLCAzNTczLCAyODEwLCAgICAwLCAyMzM1LAorICAgICAgICAwLCAxNTM5LCAyNzkwLCAyNzI2LCAzNTk2LCAzNjE4LCAyNzg2LCAgICAwLCAyODYxLCAgICAwLAorICAgICAyODY4LCAgICAwLCAxODYzLCAyNzY2LCAyOTAxLCAzNjQxLCAzNjYzLCAyNzI4LCAgICAwLCAgICAwLAorICAgICAyOTA4LCAgICAwLCAyOTQxLCAgICAwLCAxOTE2LCAyNzA4LCAyOTQ4LCAzNjg2LCAzNzA4LCAyNzA3LAorICAgICAgICAwLCAgICAwLCAxMTA4LCAyOTgxLCAyNzEzLCAyMjYzLCAyMjY2LCAyNjkyLCAyNjkxLCAyNDQ2LAorICAgICAyNDkxLCAzNzMxLCAyNjgyLCAzNzU0LCAxMTEwLCAyNjgwLCAyNjg2LCAyMjQ1LCAyMzI4LCAyOTU4LAorICAgICAyMzI3LCAxNzEyLCAyNzM4LCAyOTc2LCAxNzExLCAyOTk4LCAyNzI1LCAxNzM0LCAxNzU4LCAxNzU3LAorICAgICAyNzc3LCAxODE4LCAxOTU1LCAxNDMxLCAyNjk0LCAxODcxLCAzMDE2LCAxOTU2LCAxOTk1LCAyMTIxLAorICAgICAzNzk1LCAzODE4LCAzODI3LCAyMjIyLCAyNjYwLCAyNjU5LCAzODQ0LCAxMTY3LCAyNjU1LCAzODg0LAorICAgICAxMTY5LCAyNjM3LCAzOTI0LCAxMTcwLCAyNjM1LCAzOTY0LCAxMzAxLCAyNjE2LCAyNjE0LCAyNTkyLAogCi0gICAgIDQyMDksIDEzNDUsIDI1OTcsIDI1OTYsIDI1OTUsIDQyNDksIDQyNzMsIDE0MjcsIDI1OTQsIDI2MzUsCi0gICAgIDI2ODIsIDQzMTQsIDI1NzIsIDQzMzgsIDE0MjksIDI1NzEsIDI1NzgsIDI5MzgsIDI5NDIsIDI1NzcsCi0gICAgIDI1NzYsIDMwOTYsIDMxNDIsIDQzNzksIDI1NjYsIDQ0MDMsIDE0ODksIDI1NDAsIDI1NDQsIDE2MDAsCi0gICAgIDMxNTYsIDI1NDIsIDMxNTEsIDMxNjQsIDI1NDEsIDI1NDAsIDMxODMsIDMxODQsIDQ0NDQsIDI1MzEsCi0gICAgIDQ0NjgsIDE2MDMsIDI0NjgsIDI0NjksICAgIDAsIDE2MDUsIDMyNTUsIDI0MzgsIDMyMDMsIDMyMDUsCi0gICAgIDIzNzIsIDIzNzEsIDMyNDksIDMyNjgsIDQ1MDksIDIzNDMsIDQ1MzMsIDE2MDYsIDIzNDEsIDIzNDgsCi0gICAgICAgIDAsIDMzMjAsICAgIDAsIDMzMjcsICAgIDAsIDEzOTYsIDIzMDYsIDMzODUsIDQ1NzQsIDQ1OTcsCi0gICAgIDIyOTksICAgIDAsIDMwOTUsIDMwOTYsIDMxNzgsIDE4MjcsIDMxMjIsIDIzOTksIDE4NDgsIDM0MjAsCi0gICAgIDI5NTksIDE4NDksIDE4NTAsIDE4NzIsIDMyNDgsIDMzODAsIDE4NzQsIDE4OTYsIDM0OTAsIDIwMTQsCi0gICAgIDM0OTIsIDE5NTksIDIwMTYsIDMzMzcsIDQ2MjIsIDQ2NDYsIDQ2NTUsIDIyNzUsIDQ2NzIsIDQ2OTYsCisgICAgIDQwMDMsIDQwMjYsIDEzMDYsIDI1NzIsIDI3MTEsIDI3MzgsIDQwNjYsIDI1NzAsIDQwODksIDEzNjUsCisgICAgIDI1NjksIDI1NTgsIDI5NTYsIDI5OTYsIDI1NTUsIDI1NTMsIDMwMzMsIDMwMzcsIDQxMjksIDI1MjcsCisgICAgIDQxNTIsIDE0MTIsIDI1MjUsIDI1MTMsIDE0NzUsIDMwNTEsIDI1MTAsIDMwNTksIDMwOTUsIDI1MDgsCisgICAgIDI0ODgsIDMwOTYsIDMxMDAsIDQxOTIsIDI0NzgsIDQyMTUsIDE0NzcsIDI0NjAsIDI0NjUsICAgIDAsCisgICAgIDE1MDEsIDMxMTQsIDI0NjMsIDMxMjIsIDMxNTgsIDI0NjIsIDI0NDEsIDMxNTksIDMxNjMsIDQyNTUsCisgICAgIDI0MTMsIDQyNzgsIDE1MDMsIDI0MTIsIDI0MTgsICAgIDAsIDMxNzcsICAgIDAsIDMzMDEsICAgIDAsCisgICAgIDE5NjIsIDI0MDksIDMzMDgsIDQzMTgsIDQzNDAsIDI0MDgsICAgIDAsIDMxNTgsIDM3NjQsIDM3NjUsCisgICAgIDIyMjMsIDMwNzgsIDMzMTcsIDIyODMsIDMyMDQsIDI3MzUsIDI0MjMsIDI0MjQsIDIyMjQsIDM3NjgsCisgICAgIDMzMTgsIDI0NDUsIDIyODIsIDM4MzcsIDI0OTAsIDM4MzksIDI0NjgsIDI1MTMsIDM3NzEsIDQzNjQsCisgICAgIDQzODcsIDQzOTYsIDIzODQsIDQ0MTIsIDQ0MzUsIDQ0NTcsIDIzODMsIDQ0ODAsIDQ1MDIsIDIzODAsCiAKLSAgICAgNDcxOSwgMjI2MywgNDc0MywgNDc2NiwgMjIzOSwgNDc5MCwgNDgxMywgMjIzNCwgNDgzNywgNDg2MCwKLSAgICAgMjE5OCwgMjE5NCwgNDg4NCwgMTYzMCwgMjE5MiwgMjE0NSwgMzUyMywgNDkyNSwgMjE0NCwgMjEwNywKLSAgICAgICAgMCwgMzUzMCwgICAgMCwgMTYxNSwgMjEwNiwgNDAxNiwgNDk0OSwgMjEwMywgMjA2MCwgICAgMCwKLSAgICAgNDAyMywgICAgMCwgNDA3NSwgICAgMCwgMTYzOSwgMjA1OSwgNDEwOSwgNDk3MywgMjA1OCwgMjA1NSwKLSAgICAgICAgMCwgICAgMCwgNDExNiwgICAgMCwgNDE1MCwgICAgMCwgMTY2OSwgMjAwMCwgNDE1NywgNDk5NywKLSAgICAgMTk5OSwgMTk3NiwgICAgMCwgICAgMCwgNDE5MSwgICAgMCwgNDE5OCwgICAgMCwgMTc0OCwgMTk1MSwKLSAgICAgNDIzMiwgNTAyMSwgMTk0NSwgMTkxMywgICAgMCwgICAgMCwgMTY2MCwgNDIzOSwgMTkxNywgMzMzNSwKLSAgICAgMzM5OSwgMTkxNCwgMTg5NywgMzQwMCwgMzQyMCwgNTA0NSwgMTg4MiwgNTA2OSwgMTY2MSwgMTg0MiwKLSAgICAgMTg0NiwgMjEwMiwgMjE3NywgMjIwMCwgMjI4OSwgMjEwMywgMjYxMiwgNDI4MywgMjIyNiwgMjQ3MywKLSAgICAgNDI2NiwgMjY4MCwgNDM0OCwgNDI2NywgNDMzMSwgMzI0OSwgMzI3MSwgNDI4OSwgNDMzMiwgMzM5OSwKKyAgICAgNDUyNSwgNDU0NywgMjM0OSwgNDU3MCwgNDU5MiwgMjM0OCwgMjM0NywgNDYxNSwgMTUzMCwgMjI5NiwKKyAgICAgMjI4OSwgMzg2OSwgNDY1NSwgMjIxMiwgMjIwOSwgICAgMCwgMzkwNiwgICAgMCwgMTk5NSwgMjIwOCwKKyAgICAgMzkxMywgNDY3OCwgMjE4OCwgMjE2NCwgICAgMCwgMzk0NiwgICAgMCwgMzk1MywgICAgMCwgMjAwNSwKKyAgICAgMjE2MCwgMzk4NiwgNDcwMSwgMjE1MywgMjEzMCwgICAgMCwgICAgMCwgMzk5MywgICAgMCwgNDA0OCwKKyAgICAgICAgMCwgMjAzNSwgMjEwMSwgNDA1NSwgNDcyNCwgMjEwMCwgMjA5NywgICAgMCwgICAgMCwgNDExMSwKKyAgICAgICAgMCwgNDExOCwgICAgMCwgMjM4NSwgMjA2NywgNDE3NCwgNDc0NywgMjA2NCwgMjAzNywgICAgMCwKKyAgICAgICAgMCwgMTUzMSwgNDE4MSwgMjAxNCwgMzIwNCwgMzQxMCwgMjAxMCwgMjAwOCwgMzQ1NSwgMzUwMCwKKyAgICAgNDc3MCwgMTk5NiwgNDc5MywgMTUzMiwgMTk2MCwgMTk2NCwgMjUxMiwgMjUzNSwgMjU1NywgMjU4MCwKKyAgICAgMjU1OCwgMjYwNCwgNDIyNSwgMjYwMiwgMjYwMywgNDIwOSwgMjgwMCwgNDI4OCwgMzgzOCwgNDI3MiwKKyAgICAgMzg2MSwgNDAwMiwgNDA2NSwgNDYwOCwgMzg0MywgMjYyNiwgMjY0OCwgNDYwOSwgNDgzNCwgMTk1NSwKIAotICAgICAyNjEwLCAyNjExLCA0Mzk2LCA1MTExLCAxODE1LCA1MTI4LCA1MTUyLCAxNjYyLCAxODE0LCA1MTkzLAotICAgICAxNjg5LCAxODExLCA1MjM0LCAxNzM2LCAxNzk1LCA1Mjc1LCAxODc5LCAxNzkxLCA1MzE2LCAxODgwLAotICAgICAxNzQ3LCAxNzQ0LCA0MzY1LCA1MzU3LCAxNzQxLCAxNjk4LCAgICAwLCAxNjk3LCAzNjM0LCAzNjgxLAotICAgICA1MzgxLCAxNjcwLCAxNjY0LCAxNjcxLCAzNzI4LCA0Mjg5LCAxNjE2LCAxNTgwLCA0Mzc0LCA0NDE4LAotICAgICA1NDA1LCAxNTY4LCAxNTY1LCAxNTUyLCAxOTM4LCA0NDMyLCAxNTI3LCA0NDQxLCA0NDc4LCAxNTA4LAotICAgICAxNTA2LCA0NDc5LCA0NDgzLCA1NDI5LCAxNDk0LCAxNDU0LCAxNDQyLCAgICAwLCAxOTQwLCA0NDk3LAotICAgICAxNDM4LCA0NTA2LCA0NTQzLCAxNDM3LCAxNDAwLCA0NTQ0LCA0NTQ4LCA1NDUzLCAxMzkwLCAxMzg5LAotICAgICAxMzYzLCAgICAwLCAxOTQxLCA0NTYyLCAxMzYyLCA0NTcxLCA0NTkxLCAgIDgzLCAgMTEwLCA0NjY2LAotICAgICA0NjY3LCA1NDc3LCAgMTk1LCAgMTk4LCAgMjI1LCAgICAwLCA0OTA3LCAgICAwLCA0OTE0LCAgICAwLAotICAgICAyMDA2LCAgMzA3LCA1MDkyLCA1NTAxLCAgICAwLCAgMzQ4LCAgICAwLCAyNDc0LCAyNjM1LCAyNjU3LAorICAgICA0ODUwLCA0ODczLCAxNTU4LCAxOTE1LCA0OTEzLCAxNjAyLCAxOTE0LCA0OTUzLCAxNjQ4LCAxOTEzLAorICAgICA0OTkzLCAxNjk1LCAxOTExLCA1MDMzLCAxNzE1LCAxOTEwLCAxOTA5LCA0MjQxLCA1MDczLCAxODgwLAorICAgICAxODA2LCAgICAwLCAxODA0LCAzNzY5LCA0MDAyLCA1MDk2LCAxNzY3LCAxNzQ3LCAxNzA3LCA0MDYzLAorICAgICA0MTI2LCAxNzA2LCAxNjg2LCA0MTg5LCA0MjUwLCA1MTE5LCAxNjU4LCAxNjUyLCAxNjIyLCAxNzM4LAorICAgICA0MzA0LCAxNjE5LCA0MzE0LCA0MzM0LCAxNjE3LCAxNjE1LCA0NDA2LCA0NDA3LCA1MTQyLCAxNTg3LAorICAgICAxNTY3LCAxNTc0LCAgICAwLCAxNzk3LCA0NjM5LCAxNTQxLCA0NDA5LCA0NDExLCAxNTExLCAxNTEwLAorICAgICA0NDUxLCA0NDk2LCA1MTY1LCAxNDgwLCAxNDc5LCAxNDQ2LCAgICAwLCAxNzk5LCA0NjQ2LCAgMTIxLAorICAgICA0NTQxLCA0ODAzLCAgMTQ1LCAgMTY0LCA0ODA0LCA0ODA2LCA1MTg4LCAgMTY4LCAgMzA4LCAgMzczLAorICAgICAgICAwLCA0ODIwLCAgICAwLCA0ODk1LCAgICAwLCAzMDM4LCAgMzkzLCA0OTAyLCA1MjExLCAgICAwLAorICAgICAgNDUwLCAgICAwLCAyNjQ5LCAyNjcxLCAyNzU3LCAyNzc5LCAyODAxLCA0ODAzLCA0ODMwLCA0OTEyLAogCi0gICAgIDI2NTksIDI2ODEsIDMwMDMsIDUxMDcsIDUxNjIsIDQ2NzAsIDI3MDMsIDQyOTEsIDQzNTYsIDI2ODIsCi0gICAgIDQzNzYsIDQ5MjMsIDQ0NDMsIDI3MjgsIDI3MjksIDUxMDgsIDUxNjMsIDU1MjUsIDE5NDMsICAgIDAsCi0gICAgICAzNzIsIDU1NjYsICAgIDAsICAzOTksIDU1OTAsICAgIDAsICA0MTgsIDU2MTQsICAgIDAsICA0ODAsCi0gICAgIDU2MzgsICAgIDAsICA1MjAsIDU2NjIsICAgIDAsICA1NDQsIDQ2NzEsIDQ3MTMsIDU2ODYsICA1NTEsCi0gICAgICA1ODAsICA1ODIsICA2MTAsICA2MDQsIDUxODAsICAgIDAsIDIwNjEsICA2MjQsICA2NDMsIDUyMTYsCi0gICAgICAgIDAsIDUyMjMsICAgIDAsIDIwNjIsICA2OTYsICA2OTcsICAgIDAsIDUyNTcsICAgIDAsIDUyNjQsCi0gICAgICAgIDAsIDIxMDksICA2OTgsICA3MjAsICAgIDAsIDUyOTgsICAgIDAsIDUzMDUsICAgIDAsIDIxNDIsCi0gICAgICA3MjEsICA3NDksICAgIDAsIDUzMzksICAgIDAsIDUzNDYsICAgIDAsIDIxOTMsICA3NTAsICA3NTIsCi0gICAgICAgIDAsIDE5OTUsIDU1NDgsICA3NjIsIDQ3NjAsIDQ4MDcsICA3NjMsICA3OTgsIDQ4NTQsIDUwODYsCi0gICAgIDU3MTAsICA3OTMsICAgIDAsICA4MDQsIDQ1MDgsIDI3NTEsIDI3NTIsIDI3NzQsIDI3NzUsIDUxNDYsCisgICAgIDQxMjgsIDMxMjQsIDQxOTEsIDQzMTcsIDMyMjYsIDQ4MzEsIDQ5MzAsIDQ0MTEsIDI3ODAsIDMyNTAsCisgICAgIDQ4MzIsIDQ5MjQsIDUyMzQsIDE4MDIsICAgIDAsICA1MDUsIDUyNzQsICAgIDAsICA1MzIsIDUyOTcsCisgICAgICAgIDAsICA1NDgsIDUzMjAsICAgIDAsICA1NjgsIDUzNDMsICAgIDAsICA2MDAsIDUzNjYsICAgIDAsCisgICAgICA2MTgsIDQ4NDksIDQ5MTAsIDUzODksICA2MTksICA2MjEsICA2MjIsICA2NTcsICA2NTAsIDQ5NzUsCisgICAgICAgIDAsIDMyNjQsICA2NzIsICA2NzMsIDQ5ODIsICAgIDAsIDUwMTUsICAgIDAsIDMzNzksICA2OTIsCisgICAgICA3NTUsICAgIDAsIDUwMjIsICAgIDAsIDUwNTUsICAgIDAsIDM3NzcsICA3NTksICA3NjEsICAgIDAsCisgICAgIDUwNjIsICAgIDAsIDUyNTYsICAgIDAsIDM3NzgsICA3NzksICA4MTgsICAgIDAsIDUyNjMsICAgIDAsCisgICAgIDU0MTEsICAgIDAsIDM3ODIsICA4MjEsICA4NjQsICAgIDAsIDE4MjYsIDU0MTgsICA5MDQsIDUwNzAsCisgICAgIDUyNzEsICA5MDUsICA5MjQsIDU0MjYsIDU0MjcsIDU0NjcsICA5MTgsICAgIDAsICA5NDUsIDUwNzIsCisgICAgIDM0MTAsIDM0NTUsIDMyNDksIDMyNzIsIDU0MjksIDI4NzgsIDMzODcsIDM0MzIsIDM0NTQsIDU0MzAsCiAKLSAgICAgMjc3NiwgMjc5OSwgMjgyMiwgMjgyMywgNTcyMCwgMjg0NSwgNTcwMywgNTcyMiwgMjg0NiwgMzI3MCwKLSAgICAgMzQ4OSwgNTc1NSwgIDgyMCwgIDg2NCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgNTU1NSwgICAgMCwgMjI4MiwgIDg4MCwgIDg4NywgICAgMCwgNTEyNywgNTM1NCwgIDg5NywgIDkzMCwKLSAgICAgICAgMCwgMTk5NywgNTczOSwgIDkzMSwgNTU2MywgNTcyNCwgIDkzNCwgIDk3NiwgICAgMCwgICAgMCwKLSAgICAgMjAyNCwgNTc3OCwgIDk4NSwgNTc1MiwgNTc3MiwgMTAxMiwgMTAzOSwgICAgMCwgICAgMCwgMjE1MSwKLSAgICAgNTc5MiwgMTA2MywgNTc4NywgNTc4OCwgMTEwMiwgMTEwMywgICAgMCwgICAgMCwgMjE4MSwgNTgwMiwKLSAgICAgMTEwNywgNTgwMCwgNTgxMCwgMTEzMiwgMTE2MCwgICAgMCwgICAgMCwgNTgxNCwgICAgMCwgNTgyOCwKLSAgICAgICAgMCwgMjM0NywgMTE3NiwgICAgMCwgNTA4NSwgMzU1MywgMjg2OCwgMjg3MCwgMzEwMywgNTgyNCwKLSAgICAgNTgyNywgNTgzNywgNTgzOCwgNTgzOSwgNTgyNiwgMzM3OSwgNTg0MywgMjg5MiwgNDU3MywgNTczNiwKLSAgICAgMjk4MSwgICAgMCwgNzg1NiwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgNTg0NSwKKyAgICAgMzQ5OSwgNTQzMSwgNTQzMiwgMzQwOSwgNDMxMywgNTQzMywgNTQ5MCwgIDkzOSwgIDk4MywgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgNTQzMiwgICAgMCwgNDIzMCwgIDk4NiwgIDk4NywKKyAgICAgICAgMCwgNTQ0MiwgNTQ2MiwgMTAxNCwgMTAxNSwgICAgMCwgMTg1MCwgNTUxMiwgMTA0NiwgNTQ2NCwKKyAgICAgNTUwNiwgMTA2OCwgMTA5MSwgICAgMCwgICAgMCwgMTg1MiwgNTUyMCwgMTEyNSwgNTUyOCwgNTUyOSwKKyAgICAgMTE0NCwgMTE0NSwgICAgMCwgICAgMCwgMTg1NCwgNTUyOSwgMTE4MiwgNTUzNywgNTUzOCwgMTIxMCwKKyAgICAgMTIzNywgICAgMCwgICAgMCwgMTk5MywgNTU1MiwgMTIzOSwgNTU0NiwgNTU0NywgMTI0MSwgMTI0MiwKKyAgICAgICAgMCwgICAgMCwgNTU2OCwgICAgMCwgNTU3NywgICAgMCwgNDIzMSwgMTI2OCwgICAgMCwgNDkyNywKKyAgICAgNTU4OCwgNTU5MCwgMjkxOCwgMzUwMCwgNTU4OSwgNTU5MiwgNTU5MywgNTU5NCwgNTU5NSwgNTU5MSwKKyAgICAgMzU0NSwgNTU5NiwgMzU2NywgNTI3MywgNTU5OSwgMzUyMiwgICAgMCwgNzYyNiwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgNTYyMiwgNTYyNCwgMTI3NywgMTI3OSwgICAgMCwgNzYyNiwKIAotICAgICA1ODQ3LCAxMTkwLCAxMjM1LCAgICAwLCA3ODU2LCA1ODcxLCAgICAwLCA3ODU2LCAgICAwLCA1ODg3LAotICAgICAgICAwLCA3ODU2LCAgICAwLCA1ODk0LCAgICAwLCA3ODU2LCAgICAwLCA1OTAxLCAgICAwLCA3ODU2LAotICAgICAgICAwLCA1OTA4LCAgICAwLCA3ODU2LCAgICAwLCAyMjcwLCA1OTE1LCAxMjM2LCA1OTIzLCA1OTI0LAotICAgICAxMjM3LCAyNDE0LCAgICAwLCAyOTgwLCA1MDg2LCAyOTgyLCAzMDA0LCA1OTI2LCA1MzU2LCA1NTY1LAotICAgICAzMjAxLCA1ODQ5LCA0Mjg3LCAzMDA1LCA1OTI3LCA1MTA2LCA1ODUwLCAzMDA2LCA1OTI4LCAgICAwLAotICAgICA1OTI3LCAgICAwLCAyMjcyLCA1OTU0LCAxMjQwLCAgICAwLCAyMjczLCA1OTY0LCAxMjY0LCAgICAwLAotICAgICAyMzM4LCA1OTcxLCAxMzA2LCAgICAwLCAyMzk2LCA1OTc4LCAxMzIyLCAgICAwLCAyNTMxLCA1OTg1LAotICAgICAxMzU2LCAgICAwLCA1OTkyLCAgICAwLCA3ODU2LCAzMTc3LCA2MDAxLCAzNDQyLCAzNDQ0LCAzNDY3LAotICAgICA2MDAyLCA2MDA0LCA2MDA1LCA2MDA4LCAzNDkxLCA2MDA2LCAzMzc4LCA2MDA3LCAyNTMyLCA2MDA3LAotICAgICAxMzU3LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAyNTMzLCA2MDQzLCAxMzYxLAorICAgICA1NjI3LCAgICAwLCA3NjI2LCAgICAwLCA1NjM4LCAgICAwLCA3NjI2LCAgICAwLCA1NjQ1LCAgICAwLAorICAgICA3NjI2LCAgICAwLCA1NjUyLCAgICAwLCA3NjI2LCAgICAwLCA1NjYzLCAgICAwLCA3NjI2LCAgICAwLAorICAgICAyMDMwLCA1NjcwLCAxMjgxLCA1Njc4LCA1Njc5LCAxMjgyLCA0MjkzLCAgICAwLCAzNTQ0LCA1NjgxLAorICAgICAzNTg5LCAzNTkwLCA1NjgyLCA1Njg1LCA1Njg2LCAzNjExLCA1Njg3LCA1Njg4LCAzNjEzLCA1NjgzLAorICAgICA1NjkwLCA1Njk1LCAzNjU2LCA1Njg0LCAgICAwLCA1NzMwLCAgICAwLCAyMDU5LCA1NzM3LCAxMzE2LAorICAgICAgICAwLCAyMDkzLCA1NzQ0LCAxMzE5LCAgICAwLCAyMDk2LCA1NzUxLCAxMzc4LCAgICAwLCAyMTU5LAorICAgICA1NzU4LCAxMzgyLCAgICAwLCAyMzQ3LCA1NzY1LCAxNDAyLCAgICAwLCA1NzcyLCAgICAwLCA3NjI2LAorICAgICAzNjU3LCA1Njg5LCAzNjU4LCAzNjgwLCAzNzAyLCA1NzgxLCA1NzgzLCA1Nzg0LCA1Njk2LCAzNzAzLAorICAgICA1Nzg1LCAzNjc5LCA1Nzg2LCAyMzQ4LCA1Nzg1LCAxNDI1LCAgICAwLCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAyMzc2LCA1ODAyLCAxNDI4LCA1Nzk1LCA1Nzk3LCA1Njk3LCA1Nzk2LCAzNzI0LAogCi0gICAgIDYwMTYsIDYwMzcsIDU4NTIsIDYwMzksIDM1NTQsIDYwNDAsIDM1NTUsIDM1NTYsIDYwMTcsIDYwNTIsCi0gICAgIDYwNTYsIDM0MTksICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsIDM0NjYsCi0gICAgIDYwNTksIDM2MTEsIDM2NTgsIDM3MDUsIDYwNjAsIDYwNjIsIDYwNjMsIDM0NjgsIDYwNjUsIDYwNjYsCi0gICAgICAgIDAsICAgIDAsIDM2MDksIDM2MTAsIDM2MzQsIDM2NTYsIDYwNjcsIDM2ODAsIDYwNjgsIDM2ODEsCi0gICAgIDYwNzMsIDYwODIsIDYwOTIsIDYwOTUsIDM3MjcsIDYxMDEsIDM3MjgsIDYxMDMsIDM3NDksIDUxMDIsCi0gICAgIDM3NzMsIDM3NzQsIDM3OTcsIDYxMDYsIDYxMTEsIDYxMTUsIDM3NzUsIDYxMTYsIDYxMjIsIDM4MjAsCi0gICAgIDYxMjMsIDYxMjYsIDYxMjgsIDM4MjIsIDYxMTQsIDYxNDIsIDYxNDgsIDM4NDQsIDM4NDUsIDYxNTIsCi0gICAgIDYxNTMsIDYxNTQsIDYxNTUsIDM4NjksIDM4OTAsIDYxNTgsIDM4OTEsIDYxNjIsIDM5MTQsIDYxNjMsCi0gICAgIDYxNjcsIDM5MTUsIDM5MTYsIDM5MzgsIDYxNjksIDYxNzcsIDQ3MzcsIDYxOTEsIDM5MzksIDYxODIsCi0gICAgIDYxOTQsIDYxOTcsIDYxOTgsIDM5NjEsIDYyMDQsIDYyMDMsIDYyMDUsIDM5NjMsIDYyMDYsIDM5ODUsCisgICAgIDU4MTUsIDM3MjUsIDQwODMsIDU4MTcsIDU4MTgsIDU4MjEsIDM3MDEsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsIDM3OTAsIDU4MjQsIDQyNTQsIDQ1NjMsIDU4MjUsIDU4MjYsCisgICAgIDU4MjgsIDU4MzAsIDM4NDEsIDU4MzMsIDU4NDAsICAgIDAsICAgIDAsIDM4ODEsIDQzNTYsIDQ0NTAsCisgICAgIDQ0NzMsIDU4MzksIDQ0OTYsIDU4NDksIDM4ODMsIDU4NTUsIDU4NTksIDU4NjEsIDU4NjIsIDQyNTAsCisgICAgIDU4NzMsIDQ0MDYsIDU4NTEsIDQ1NDAsIDU4NzQsIDQ1ODUsIDQ1NDEsIDQ1ODYsIDU4NzcsIDU4NzUsCisgICAgIDU4ODEsIDU4ODAsIDU4OTksIDU4ODMsIDQ2NzEsIDU4ODYsIDU5MDUsIDU5MDYsIDM5MjMsIDU5MDgsCisgICAgIDU5MDksIDU5MTIsIDQ2NzIsIDQ2OTUsIDU5MTksIDU5MzAsIDU5MjAsIDU5MzEsIDQ3MTgsIDQ3NDEsCisgICAgIDU5MzMsIDM5NjMsIDU5MzUsIDQ3NjMsIDU5MzQsIDU5MzgsIDQ3NjQsIDQyNTIsIDUwOTAsIDU5NDMsCisgICAgIDU5NTMsIDU5NTYsIDU5NjEsIDUxMTIsIDU5NTgsIDU5NjIsIDU5NjcsIDU5NzEsIDQ1ODcsIDU5ODEsCisgICAgIDU5ODIsIDU5ODMsIDUxMTMsIDU5ODcsIDQ4NjYsIDUxMzYsIDU5OTAsIDQ5OTIsIDU5OTEsIDU5OTUsCiAKLSAgICAgNDA4NCwgNjIxMywgMzk4NywgNjIxOCwgNjIyNywgNDEyNSwgNDYxMywgNjIxOSwgNDMwOCwgNDAzMiwKLSAgICAgNjIyOCwgNDAzMywgNDYxNSwgNDA4NSwgNjIzOCwgNjIyOSwgNjI0MCwgNDc4NCwgNDE2NiwgNjIzOSwKLSAgICAgNDIwNywgNjI0MSwgNjI2OCwgNDIwOCwgNDY2NSwgNDY2NiwgNDY2OSwgNzg1NiwgNjI5NiwgNjMwNCwKLSAgICAgNjMwOCwgNjMxMSwgNjMxNCwgNjMxNywgNjMyMCwgNjMyMywgNjMyNiwgNjMyOSwgNjMzMiwgNjMzNSwKLSAgICAgNjMzOCwgNjM0MSwgNjM0NCwgNjM0NywgNjM1MCwgNjM1MywgNjM1NiwgNjM2MCwgNjM2NCwgNjM2NywKLSAgICAgNjM3MCwgNjM3MywgNjM3NiwgNjM3OSwgNjM4MiwgNjM4NSwgNjM4OCwgNjM5MiwgNjM5NiwgNjM5OSwKLSAgICAgNjQwMiwgNjQwNiwgNjQwOCwgNjQxMSwgNjQxNCwgNjQxNywgNjQyMCwgNjQyMywgNjQyNiwgNjQyOSwKLSAgICAgNjQzMiwgNjQzNiwgNjQzOCwgNjQ0MSwgNjQ0NSwgNjQ1MCwgNjQ1NCwgNjQ1NywgNjQ2MSwgNjQ2NCwKLSAgICAgNjQ2NywgNjQ3MCwgNjQ3MywgNjQ3NiwgNjQ3OSwgNjQ4MiwgNjQ4NiwgNjQ5MCwgNjQ5MywgNjQ5NywKLSAgICAgNjUwMSwgNjUwNiwgNjUxMCwgNjUxMiwgNjUxNiwgNjUxOSwgNjUyMywgNjUyNiwgNjUyOSwgNjUzMywKKyAgICAgNTE1OCwgNTE1OSwgNjAwMSwgNTIwNSwgNTAzMiwgNjAwMiwgNTIwNCwgNTIyOCwgNTIyNywgNjAwNSwKKyAgICAgNjAwNiwgNjAxNSwgNjAwOSwgNTI5MSwgNjAxNCwgNTMxMywgNjAxNiwgNjA0NSwgNTMxNCwgNTMzNiwKKyAgICAgNTMzNywgNTM1OSwgNzYyNiwgNjA2OCwgNjA3NSwgNjA3OSwgNjA4MiwgNjA4NSwgNjA4OCwgNjA5MSwKKyAgICAgNjA5NCwgNjA5NywgNjEwMCwgNjEwMywgNjEwNiwgNjEwOSwgNjExMiwgNjExNSwgNjExOCwgNjEyMSwKKyAgICAgNjEyNCwgNjEyNywgNjEzMSwgNjEzNSwgNjEzOCwgNjE0MSwgNjE0NCwgNjE0NywgNjE1MCwgNjE1MywKKyAgICAgNjE1NiwgNjE1OSwgNjE2MywgNjE2NywgNjE3MCwgNjE3MywgNjE3NywgNjE3OSwgNjE4MiwgNjE4NSwKKyAgICAgNjE4OCwgNjE5MSwgNjE5NCwgNjE5NywgNjIwMCwgNjIwMywgNjIwNywgNjIwOSwgNjIxMiwgNjIxNiwKKyAgICAgNjIyMSwgNjIyNSwgNjIyOCwgNjIzMiwgNjIzNSwgNjIzOCwgNjI0MSwgNjI0NCwgNjI0NywgNjI1MCwKKyAgICAgNjI1MywgNjI1NywgNjI2MSwgNjI2NCwgNjI2OCwgNjI3MiwgNjI3NywgNjI4MSwgNjI4MywgNjI4NywKKyAgICAgNjI5MCwgNjI5NCwgNjI5NywgNjMwMCwgNjMwNCwgNjMwNiwgNjMwOSwgNjMxMiwgNjMxNSwgNjMxOCwKIAotICAgICA2NTM1LCA2NTM4LCA2NTQxLCA2NTQ0LCA2NTQ3LCA2NTUwLCA2NTUzLCA2NTU2LCA2NTU5LCA2NTYyLAotICAgICA2NTY2LCA2NTY4LCA2NTcxLCA2NTc0LCA2NTc3LCA2NTgxLCA2NTgzLCA2NTg2LCA2NTg5LCA2NTk0LAotICAgICA2NTk4LCA2NjAzLCA2NjA3LCA2NjA5LCA2NjEzLCA2NjE2LCA2NjIwLCA2NjI1LCA2NjI5LCA2NjMyLAotICAgICA2NjM1LCA2NjM4LCA2NjQxLCA2NjQ0LCA2NjQ3LCA2NjUwLCA2NjU0LCA2NjU4LCA2NjYxLCA2NjY1LAotICAgICA2NjY5LCA2Njc0LCA2Njc4LCA2NjgwLCA2Njg0LCA2Njg3LCA2NjkxLCA2Njk0LCA2Njk5LCA2NzAzLAotICAgICA2NzA4LCA2NzEyLCA2NzE0LCA2NzE4LCA2NzIxLCA2NzI1LCA2NzI4LCA2NzMxLCA2NzM0LCA2NzM4LAotICAgICA2NzQwLCA2NzQzLCA2NzQ4LCA2NzUyLCA2NzU1LCA2NzU4LCA2NzYxLCA2NzY0LCA2NzY3LCA2NzcwLAotICAgICA2NzczLCA2Nzc2LCA2NzgwLCA2NzgyLCA2Nzg1LCA2Nzg4LCA2NzkxLCA2Nzk1LCA2Nzk3LCA2ODAwLAotICAgICA2ODAzLCA2ODA2LCA2ODA5LCA2ODEzLCA2ODE1LCA2ODE4LCA2ODIxLCA2ODI0LCA2ODI5LCA2ODMzLAotICAgICA2ODM4LCA2ODQyLCA2ODQ0LCA2ODQ4LCA2ODUxLCA2ODU1LCA2ODYwLCA2ODY0LCA2ODY3LCA2ODcwLAorICAgICA2MzIxLCA2MzI0LCA2MzI3LCA2MzMwLCA2MzMzLCA2MzM3LCA2MzM5LCA2MzQyLCA2MzQ1LCA2MzQ4LAorICAgICA2MzUyLCA2MzU0LCA2MzU3LCA2MzYwLCA2MzY1LCA2MzY5LCA2Mzc0LCA2Mzc4LCA2MzgwLCA2Mzg0LAorICAgICA2Mzg3LCA2MzkxLCA2Mzk2LCA2NDAwLCA2NDAzLCA2NDA2LCA2NDA5LCA2NDEyLCA2NDE1LCA2NDE4LAorICAgICA2NDIxLCA2NDI1LCA2NDI5LCA2NDMyLCA2NDM2LCA2NDQwLCA2NDQ1LCA2NDQ5LCA2NDUxLCA2NDU1LAorICAgICA2NDU4LCA2NDYyLCA2NDY1LCA2NDcwLCA2NDc0LCA2NDc5LCA2NDgzLCA2NDg1LCA2NDg5LCA2NDkyLAorICAgICA2NDk2LCA2NDk5LCA2NTAyLCA2NTA1LCA2NTA5LCA2NTExLCA2NTE0LCA2NTE5LCA2NTIzLCA2NTI2LAorICAgICA2NTI5LCA2NTMyLCA2NTM1LCA2NTM4LCA2NTQxLCA2NTQ0LCA2NTQ3LCA2NTUxLCA2NTUzLCA2NTU2LAorICAgICA2NTU5LCA2NTYyLCA2NTY2LCA2NTY4LCA2NTcxLCA2NTc0LCA2NTc3LCA2NTgwLCA2NTg0LCA2NTg2LAorICAgICA2NTg5LCA2NTkyLCA2NTk1LCA2NjAwLCA2NjA0LCA2NjA5LCA2NjEzLCA2NjE1LCA2NjE5LCA2NjIyLAorICAgICA2NjI2LCA2NjMxLCA2NjM1LCA2NjM4LCA2NjQxLCA2NjQ0LCA2NjQ3LCA2NjUwLCA2NjUzLCA2NjU2LAogCi0gICAgIDY4NzMsIDY4NzYsIDY4NzksIDY4ODIsIDY4ODUsIDY4ODksIDY4OTMsIDY4OTYsIDY5MDAsIDY5MDQsCi0gICAgIDY5MDksIDY5MTMsIDY5MTUsIDY5MTksIDY5MjIsIDY5MjYsIDY5MjksIDY5MzQsIDY5MzgsIDY5NDMsCi0gICAgIDY5NDcsIDY5NDksIDY5NTMsIDY5NTYsIDY5NjAsIDY5NjMsIDY5NjYsIDY5NzEsIDY5NzUsIDY5ODAsCi0gICAgIDY5ODQsIDY5ODYsIDY5OTAsIDY5OTMsIDY5OTcsIDcwMDAsIDcwMDMsIDcwMDYsIDcwMTAsIDcwMTIsCi0gICAgIDcwMTUsIDcwMjAsIDcwMjQsIDcwMjcsIDcwMzAsIDcwMzMsIDcwMzYsIDcwMzksIDcwNDIsIDcwNDUsCi0gICAgIDcwNDgsIDcwNTEsIDcwNTQsIDcwNTcsIDcwNjEsIDcwNjMsIDcwNjYsIDcwNjksIDcwNzIsIDcwNzUsCi0gICAgIDcwNzksIDcwODEsIDcwODQsIDcwODcsIDcwOTAsIDcwOTMsIDcwOTYsIDcxMDAsIDcxMDIsIDcxMDUsCi0gICAgIDcxMDgsIDcxMTEsIDcxMTQsIDcxMTcsIDcxMjEsIDcxMjMsIDcxMjYsIDcxMjksIDcxMzIsIDcxMzUsCi0gICAgIDcxNDAsIDcxNDQsIDcxNDksIDcxNTMsIDcxNTUsIDcxNTksIDcxNjIsIDcxNjYsIDcxNzEsIDcxNzUsCi0gICAgIDcxNzgsIDcxODEsIDcxODQsIDcxODcsIDcxOTAsIDcxOTMsIDcxOTYsIDcxOTksIDcyMDIsIDcyMDYsCisgICAgIDY2NjAsIDY2NjQsIDY2NjcsIDY2NzEsIDY2NzUsIDY2ODAsIDY2ODQsIDY2ODYsIDY2OTAsIDY2OTMsCisgICAgIDY2OTcsIDY3MDAsIDY3MDUsIDY3MDksIDY3MTQsIDY3MTgsIDY3MjAsIDY3MjQsIDY3MjcsIDY3MzEsCisgICAgIDY3MzQsIDY3MzcsIDY3NDIsIDY3NDYsIDY3NTEsIDY3NTUsIDY3NTcsIDY3NjEsIDY3NjQsIDY3NjgsCisgICAgIDY3NzEsIDY3NzQsIDY3NzcsIDY3ODEsIDY3ODMsIDY3ODYsIDY3OTEsIDY3OTUsIDY3OTgsIDY4MDEsCisgICAgIDY4MDQsIDY4MDcsIDY4MTAsIDY4MTMsIDY4MTYsIDY4MTksIDY4MjIsIDY4MjUsIDY4MjgsIDY4MzIsCisgICAgIDY4MzQsIDY4MzcsIDY4NDAsIDY4NDMsIDY4NDYsIDY4NTAsIDY4NTIsIDY4NTUsIDY4NTgsIDY4NjEsCisgICAgIDY4NjQsIDY4NjcsIDY4NzEsIDY4NzMsIDY4NzYsIDY4NzksIDY4ODIsIDY4ODUsIDY4ODgsIDY4OTIsCisgICAgIDY4OTQsIDY4OTcsIDY5MDAsIDY5MDMsIDY5MDYsIDY5MTEsIDY5MTUsIDY5MjAsIDY5MjQsIDY5MjYsCisgICAgIDY5MzAsIDY5MzMsIDY5MzcsIDY5NDIsIDY5NDYsIDY5NDksIDY5NTIsIDY5NTUsIDY5NTgsIDY5NjEsCisgICAgIDY5NjQsIDY5NjcsIDY5NzAsIDY5NzMsIDY5NzcsIDY5ODEsIDY5ODQsIDY5ODgsIDY5OTIsIDY5OTcsCiAKLSAgICAgNzIxMCwgNzIxMywgNzIxNywgNzIyMSwgNzIyNiwgNzIzMCwgNzIzMiwgNzIzNiwgNzIzOSwgNzI0MywKLSAgICAgNzI0NiwgNzI1MSwgNzI1NSwgNzI2MCwgNzI2NCwgNzI2NiwgNzI3MCwgNzI3MywgNzI3NywgNzI4MCwKLSAgICAgNzI4MywgNzI4OCwgNzI5MiwgNzI5NywgNzMwMSwgNzMwMywgNzMwNywgNzMxMCwgNzMxNCwgNzMxNywKLSAgICAgNzMyMCwgNzMyNSwgNzMyOSwgNzMzNCwgNzMzOCwgNzM0MCwgNzM0NCwgNzM0NywgNzM1MSwgNzM1NCwKLSAgICAgNzM1NywgNzM2MCwgNzM2NCwgNzM2NiwgNzM2OSwgNzM3MiwgNzM3NywgNzM4MSwgNzM4NCwgNzM4NywKLSAgICAgNzM5MCwgNzM5MywgNzM5NiwgNzM5OSwgNzQwMiwgNzQwNSwgNzQwOCwgNzQxMSwgNzQxNCwgNzQxOCwKLSAgICAgNzQyMiwgNzQyNSwgNzQyOCwgNzQzMiwgNzQzNSwgNzQzOCwgNzQ0MiwgNzQ0NCwgNzQ0NywgNzQ1MCwKLSAgICAgNzQ1NCwgNzQ1NiwgNzQ1OSwgNzQ2MiwgNzQ2NSwgNzQ2OSwgNzQ3MSwgNzQ3NCwgNzQ3NywgNzQ4MCwKLSAgICAgNzQ4NCwgNzQ4NiwgNzQ4OSwgNzQ5MiwgNzQ5NSwgNzQ5OSwgNzUwMSwgNzUwNCwgNzUwNywgNzUxMiwKLSAgICAgNzUxNiwgNzUyMSwgNzUyNSwgNzUyNywgNzUzMSwgNzUzNCwgNzUzOCwgNzU0MywgNzU0NywgNzU1MCwKKyAgICAgNzAwMSwgNzAwMywgNzAwNywgNzAxMCwgNzAxNCwgNzAxNywgNzAyMiwgNzAyNiwgNzAzMSwgNzAzNSwKKyAgICAgNzAzNywgNzA0MSwgNzA0NCwgNzA0OCwgNzA1MSwgNzA1NCwgNzA1OSwgNzA2MywgNzA2OCwgNzA3MiwKKyAgICAgNzA3NCwgNzA3OCwgNzA4MSwgNzA4NSwgNzA4OCwgNzA5MSwgNzA5NiwgNzEwMCwgNzEwNSwgNzEwOSwKKyAgICAgNzExMSwgNzExNSwgNzExOCwgNzEyMiwgNzEyNSwgNzEyOCwgNzEzMSwgNzEzNSwgNzEzNywgNzE0MCwKKyAgICAgNzE0MywgNzE0OCwgNzE1MiwgNzE1NSwgNzE1OCwgNzE2MSwgNzE2NCwgNzE2NywgNzE3MCwgNzE3MywKKyAgICAgNzE3NiwgNzE3OSwgNzE4MiwgNzE4NSwgNzE4OSwgNzE5MywgNzE5NiwgNzE5OSwgNzIwMywgNzIwNiwKKyAgICAgNzIwOSwgNzIxMywgNzIxNSwgNzIxOCwgNzIyMSwgNzIyNSwgNzIyNywgNzIzMCwgNzIzMywgNzIzNiwKKyAgICAgNzI0MCwgNzI0MiwgNzI0NSwgNzI0OCwgNzI1MSwgNzI1NSwgNzI1NywgNzI2MCwgNzI2MywgNzI2NiwKKyAgICAgNzI3MCwgNzI3MiwgNzI3NSwgNzI3OCwgNzI4MywgNzI4NywgNzI5MiwgNzI5NiwgNzI5OCwgNzMwMiwKKyAgICAgNzMwNSwgNzMwOSwgNzMxNCwgNzMxOCwgNzMyMSwgNzMyNCwgNzMyNywgNzMzMCwgNzMzMywgNzMzNiwKIAotICAgICA3NTUzLCA3NTU2LCA3NTU5LCA3NTYyLCA3NTY1LCA3NTY4LCA3NTcxLCA3NTc1LCA3NTc3LCA3NTgwLAotICAgICA3NTg0LCA3NTg5LCA3NTkzLCA3NTk0LCA3NTk3LCA3NjAyLCA3NjA2LCA3NjExLCA3NjE1LCA3NjE2LAotICAgICA3NjE5LCA3NjIyLCA3NjI3LCA3NjMxLCA3NjM2LCA3NjQwLCA3NjQxLCA3NjQ0LCA3NjQ3LCA3NjUyLAotICAgICA3NjU2LCA3NjYxLCA3NjY1LCA3NjY2LCA3NjY5LCA3NjcyLCA3Njc3LCA3NjgxLCA3Njg2LCA3NjkwLAotICAgICA3NjkxLCA3Njk0LCA3Njk3LCA3NzAwLCA3NzA0LCA3NzA2LCA3NzExLCA3NzE1LCA3NzE4LCA3NzIxLAotICAgICA3NzI0LCA3NzI3LCA3NzMwLCA3NzMzLCA3NzM3LCA3NzQyLCA3NzQ2LCA3NzQ3LCA3NzUwLCA3NzUzLAotICAgICA3NzU2LCA3NzU5LCA3NzYyLCA3NzY1LCA3NzY4LCA3NzcxLCA3Nzc0LCA3Nzc3LCA3NzgyLCA3Nzg2LAotICAgICA3Nzg5LCA3NzkyLCA3Nzk1LCA3Nzk5LCA3ODAzLCA3ODA3LCA3ODExLCA3ODE1LCA3ODE4LCA3ODIxLAotICAgICA3ODI1LCA3ODI4LCA3ODMxLCA3ODM0LCA3ODM3LCA3ODQwLCA3ODQ0LCA3ODQ3CisgICAgIDczMzksIDczNDIsIDczNDYsIDczNDgsIDczNTEsIDczNTUsIDczNjAsIDczNjQsIDczNjUsIDczNjgsCisgICAgIDczNzMsIDczNzcsIDczODIsIDczODYsIDczODcsIDczOTAsIDczOTMsIDczOTgsIDc0MDIsIDc0MDcsCisgICAgIDc0MTEsIDc0MTIsIDc0MTUsIDc0MTgsIDc0MjMsIDc0MjcsIDc0MzIsIDc0MzYsIDc0MzcsIDc0NDAsCisgICAgIDc0NDMsIDc0NDgsIDc0NTIsIDc0NTcsIDc0NjEsIDc0NjIsIDc0NjUsIDc0NjgsIDc0NzEsIDc0NzUsCisgICAgIDc0NzcsIDc0ODIsIDc0ODYsIDc0ODksIDc0OTIsIDc0OTUsIDc0OTgsIDc1MDEsIDc1MDQsIDc1MDgsCisgICAgIDc1MTMsIDc1MTcsIDc1MTgsIDc1MjEsIDc1MjQsIDc1MjcsIDc1MzAsIDc1MzMsIDc1MzYsIDc1MzksCisgICAgIDc1NDIsIDc1NDUsIDc1NDgsIDc1NTMsIDc1NTcsIDc1NjAsIDc1NjMsIDc1NjYsIDc1NzAsIDc1NzQsCisgICAgIDc1NzgsIDc1ODIsIDc1ODYsIDc1ODksIDc1OTIsIDc1OTYsIDc1OTksIDc2MDIsIDc2MDUsIDc2MDgsCisgICAgIDc2MTEsIDc2MTUsIDc2MTgKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZlsyMTg5XSA9CitzdGF0aWMgY29uc3QgZmxleF9pbnQxNl90IHl5X2RlZlsyMTg0XSA9CiAgICAgeyAgIDAsCi0gICAgIDE3MjgsICAgIDEsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjksIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsICAgMTQsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsICAgMTQsCi0gICAgICAgMjAsIDE3MzAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjEsICAgMjEsCi0gICAgICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCi0gICAgICAgMjEsICAgMjEsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MzEsIDE3MjgsICAgMjEsICAgMjEsICAgMjAsCi0gICAgIDE3MzIsICAgNTAsICAgMjEsICAgMjEsICAgMjEsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsICAgNDksIDE3MzAsIDE3MzAsICAgNTIsICAgNTIsICAgNTIsICAgMjEsICAgMjEsICAgMjEsCi0gICAgICAgMjEsICAgNTIsICAgMjEsICAgMjEsICAgNTIsICAgMjEsICAgMjEsICAgMjEsICAgNTIsICAgMjEsCi0gICAgICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgNTIsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCi0gICAgICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCisgICAgIDE3MjMsICAgIDEsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjQsIDE3MjMsIDE3MjMsCisgICAgIDE3MjMsICAgMTEsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsICAgMTEsICAgMTcsIDE3MjUsICAgMTcsCisgICAgICAgMTcsICAgMTcsICAgMTcsICAgMTcsICAgMTcsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsCisgICAgICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsIDE3MjMsCisgICAgIDE3MjMsIDE3MjYsIDE3MjMsICAgMTgsICAgMTgsICAgMTcsIDE3MjcsICAgNDYsICAgMTgsICAgMTgsCisgICAgICAgMTgsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsICAgNDUsIDE3MjUsICAgNDgsCisgICAgICAgNDgsICAgNDgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgNDgsICAgMTgsICAgMTgsICAgNDgsCisgICAgICAgMTgsICAgMTgsICAgMTgsICAgNDgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgNDgsCisgICAgICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsCisgICAgICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsCiAKLSAgICAgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKLSAgICAgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKLSAgICAgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKLSAgICAgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKLSAgICAgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKLSAgICAgMTcyOCwgMTcyOCwgICAyMSwgICAyMSwgIDE1NCwgICAyMSwgICAyMSwgIDE1NywgMTczMywgMTcyOCwKLSAgICAgICA1NCwgMTcyOCwgIDE2MiwgMTczNCwgICAyMSwgICAyMSwgIDE1OCwgICAyMSwgICAyMSwgICAyMSwKLSAgICAgIDE1OCwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgIDE1OCwgICAyMSwgICAyMSwKLSAgICAgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgIDE1OCwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKLSAgICAgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKKyAgICAgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwKKyAgICAgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwKKyAgICAgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwKKyAgICAgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwKKyAgICAgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgMTcyMywgMTcyMywgICAxOCwgICAxOCwgIDE0OSwKKyAgICAgICAxOCwgICAxOCwgIDE1MiwgMTcyOCwgMTcyMywgICA1MCwgMTcyMywgIDE1NywgMTcyOSwgICAxOCwKKyAgICAgICAxOCwgIDE1MywgICAxOCwgICAxOCwgICAxOCwgIDE1MywgICAxOCwgICAxOCwgICAxOCwgICAxOCwKKyAgICAgICAxOCwgICAxOCwgIDE1MywgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwKKyAgICAgIDE1MywgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwKKyAgICAgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwKIAotICAgICAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLAotICAgICAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLAotICAgICAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLAotICAgICAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLAotICAgICAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLAotICAgICAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLAotICAgICAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgMjYyLCAgMjYzLCAgMTU4LCAxNzM1LCAgMjY4LAotICAgICAxNzM2LCAxNzM3LCAxNzI4LCAgMjczLCAxNzM4LCAxNzM5LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzQwLAotICAgICAxNzQxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLAotICAgICAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLAorICAgICAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LAorICAgICAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LAorICAgICAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LAorICAgICAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LAorICAgICAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LAorICAgICAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LAorICAgICAgMjU3LCAgMjU4LCAgMTUzLCAxNzMwLCAgMjYzLCAxNzMxLCAxNzMyLCAxNzIzLCAgMjY4LCAxNzMzLAorICAgICAxNzM0LCAxNzIzLCAxNzIzLCAxNzIzLCAxNzM1LCAxNzM2LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LAorICAgICAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LAorICAgICAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LAogCi0gICAgICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCi0gICAgICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCi0gICAgICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCi0gICAgICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCi0gICAgICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCi0gICAgICAzNTAsICAgMjEsICAyNjMsICAyNjUsICAyNjMsICAyNjUsICAyNjUsICAzNTcsIDE3NDIsIDE3MjgsCi0gICAgICAzNTYsIDE3NDMsIDE3NDQsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3NDUsIDE3NDYsIDE3NDcsCi0gICAgIDE3NDgsIDE3NDgsIDE3MjgsIDE3NDksIDE3MjgsICAzNzUsIDE3NTAsIDE3NDEsICAgMjEsICAgMjEsCi0gICAgICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCi0gICAgICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCisgICAgICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsCisgICAgICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsCisgICAgICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsCisgICAgICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsCisgICAgICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAzNDUsICAgMTgsICAyNTgsICAyNjAsICAyNTgsCisgICAgICAyNjAsICAyNjAsICAzNTIsIDE3MzcsIDE3MjMsICAzNTEsIDE3MzgsIDE3MzksIDE3MjMsIDE3MjMsCisgICAgIDE3MjMsIDE3MjMsIDE3NDAsIDE3NDEsIDE3NDIsIDE3NDMsIDE3NDMsIDE3MjMsIDE3NDQsIDE3MjMsCisgICAgICAzNzAsIDE3NDUsIDE3MzYsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsCisgICAgICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsCisgICAgICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsCiAKLSAgICAgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKLSAgICAgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKLSAgICAgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKLSAgICAgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgIDQzMiwgIDQzMywgIDQzMywgIDQzOCwgIDQzMiwKLSAgICAgIDM1NywgIDQ0MSwgMTc1MSwgMTc1MiwgMTcyOCwgIDQ0NSwgMTc1MywgMTcyOCwgMTc1NCwgMTc1NSwKLSAgICAgMTcyOCwgIDQ1MSwgMTc1NiwgMTc1NywgMTc1OCwgMTc1OCwgMTcyOCwgMTc1OSwgMTcyOCwgIDQ1OSwKLSAgICAgMTc2MCwgMTc0NiwgMTcyOCwgMTcyOCwgMTc2MSwgMTc2MiwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwKLSAgICAgMTc2MywgMTc2NCwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKLSAgICAgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKLSAgICAgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKKyAgICAgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwKKyAgICAgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwKKyAgICAgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwKKyAgICAgIDQyNywgIDQyOCwgIDQyOCwgIDQzMywgIDQyNywgIDM1MiwgIDQzNiwgMTc0NiwgMTc0NywgMTcyMywKKyAgICAgIDQ0MCwgMTc0OCwgMTcyMywgMTc0OSwgMTc1MCwgMTcyMywgIDQ0NiwgMTc1MSwgMTc1MiwgMTc1MywKKyAgICAgMTc1MywgMTcyMywgMTc1NCwgMTcyMywgIDQ1NCwgMTc1NSwgMTc0MSwgMTcyMywgMTcyMywgMTc1NiwKKyAgICAgMTc1NywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTc1OCwgMTc1OSwgICAxOCwgICAxOCwgICAxOCwKKyAgICAgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwKKyAgICAgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwKKyAgICAgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOCwKIAotICAgICAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLAotICAgICAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLAotICAgICAgIDIxLCAgIDIxLCAgNTIyLCAgIDIxLCAgNDMzLCAgNDM1LCAgNDMzLCAgNDMzLCAgNTI4LCAgNDQxLAotICAgICAgNTMwLCAxNzY1LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzY2LCAxNzY3LCAxNzY4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzY5LCAxNzcwLCAxNzI4LCAxNzcxLCAxNzcyLCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzczLCAxNzc0LCAxNzc1LCAxNzc1LCAxNzYxLCAxNzYyLCAxNzc2LCAxNzc2LCAxNzI4LAotICAgICAxNzc3LCAxNzI4LCAgNTYyLCAxNzc4LCAxNzc5LCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLAotICAgICAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLAotICAgICAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLAotICAgICAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIxLAorICAgICAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LAorICAgICAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgNTE3LCAgIDE4LCAgNDI4LAorICAgICAgNDMwLCAgNDI4LCAgNDI4LCAgNTIzLCAgNDM2LCAgNTI1LCAxNzYwLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzYxLCAxNzYyLCAxNzYzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzY0LCAxNzY1LCAxNzIzLAorICAgICAxNzY2LCAxNzY3LCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzY4LCAxNzY5LCAxNzcwLCAxNzcwLAorICAgICAxNzU2LCAxNzU3LCAxNzcxLCAxNzcxLCAxNzIzLCAxNzcyLCAxNzIzLCAgNTU3LCAxNzczLCAxNzc0LAorICAgICAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LAorICAgICAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LAorICAgICAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LAorICAgICAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LAogCi0gICAgICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCi0gICAgICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICA2MTYsICA2MTYsCi0gICAgICA2MjAsICA1MzAsICA2MjIsIDE3ODAsIDE3ODEsIDE3MjgsICA2MjYsIDE3ODIsIDE3MjgsICA2MjksCi0gICAgIDE3ODMsIDE3MjgsIDE3ODQsIDE3ODUsIDE3MjgsICA2MzUsIDE3ODYsIDE3ODcsIDE3ODcsIDE3MjgsCi0gICAgIDE3ODgsIDE3MjgsICA2NDIsIDE3ODksIDE3OTAsIDE3OTEsIDE3OTEsIDE3OTIsIDE3OTMsIDE3OTQsCi0gICAgIDE3OTQsIDE3MjgsIDE3OTUsIDE3MjgsICA2NTQsIDE3OTYsIDE3OTcsIDE3MjgsIDE3OTgsIDE3MjgsCi0gICAgIDE3OTksIDE4MDAsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE4MDEsIDE4MDIsICA2MjMsICA2NjksCi0gICAgICA2NjksICA2NjksICA2NjksICA2NjksICA2NjksICA2NjksICA2NjksICA2NjksICA2NjksICA2NjksCi0gICAgICA2NjksICA2NjksICA2NjksICA2NjksICA2NjksICA2NjksICA2NjksICA2NjksICA2NjksICA2NjksCi0gICAgICA2NjksICA2NjksICA2NjksICA2NjksICA2NjksICA2NjksICA2NjksICA2NjksICA2NjksICA2NjksCisgICAgICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsCisgICAgICAgMTgsICAgMTgsICAgMTgsICA2MTEsICA2MTEsICA2MTUsICA1MjUsICA2MTcsIDE3NzUsIDE3NzYsCisgICAgIDE3MjMsICA2MjEsIDE3NzcsIDE3MjMsICA2MjQsIDE3NzgsIDE3MjMsIDE3NzksIDE3ODAsIDE3MjMsCisgICAgICA2MzAsIDE3ODEsIDE3ODIsIDE3ODIsIDE3MjMsIDE3ODMsIDE3MjMsICA2MzcsIDE3ODQsIDE3ODUsCisgICAgIDE3ODYsIDE3ODYsIDE3ODcsIDE3ODgsIDE3ODksIDE3ODksIDE3MjMsIDE3OTAsIDE3MjMsICA2NDksCisgICAgIDE3OTEsIDE3OTIsIDE3MjMsIDE3OTMsIDE3MjMsIDE3OTQsIDE3OTUsIDE3MjMsIDE3MjMsIDE3MjMsCisgICAgIDE3MjMsIDE3OTYsIDE3OTcsICA2MTgsICA2NjQsICA2NjQsICA2NjQsICA2NjQsICA2NjQsICA2NjQsCisgICAgICA2NjQsICA2NjQsICA2NjQsICA2NjQsICA2NjQsICA2NjQsICA2NjQsICA2NjQsICA2NjQsICA2NjQsCisgICAgICA2NjQsICA2NjQsICA2NjQsICA2NjQsICA2NjQsICA2NjQsICA2NjQsICA2NjQsICA2NjQsICA2NjQsCisgICAgICA2NjQsICA2NjQsICA2NjQsICA2NjQsICA2NjQsICA2NjQsICA2NjQsICA2NjQsICA2MTgsICA2MTgsCiAKLSAgICAgIDY2OSwgIDY2OSwgIDY2OSwgIDY2OSwgIDY2OSwgIDY2OSwgIDcwNiwgIDcwNiwgIDcwNiwgIDY2OSwKLSAgICAgIDcwNiwgIDcxMSwgMTgwMywgMTcyOCwgMTcyOCwgMTcyOCwgMTgwNCwgMTcyOCwgMTcyOCwgMTgwNSwKLSAgICAgMTgwNiwgMTgwNywgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTgwOCwgMTgwOSwgMTcyOCwgMTgxMCwKLSAgICAgMTgxMSwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTgxMiwgMTgxMywgMTcyOCwgMTgxNCwgMTcyOCwKLSAgICAgMTgxNSwgMTgxNiwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTgxNywgMTgxOCwgMTgxOSwgMTcyOCwKLSAgICAgMTgyMCwgMTgyMSwgMTgyMSwgMTgyMiwgMTgyMywgMTgyNCwgMTgyNCwgMTcyOCwgMTgyNSwgMTcyOCwKLSAgICAgIDc2MCwgMTgyNiwgMTgyNywgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOCwKLSAgICAgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOCwKLSAgICAgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOCwKLSAgICAgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOCwgIDc5NCwgMTgyOCwgIDc5NCwgIDc5OCwgIDc5OCwKKyAgICAgIDY2NCwgIDcwMSwgIDcwMSwgIDcwMSwgIDY2NCwgIDcwMSwgIDcwNiwgMTc5OCwgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTc5OSwgMTcyMywgMTcyMywgMTgwMCwgMTgwMSwgMTgwMiwgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTgwMywgMTgwNCwgMTcyMywgMTgwNSwgMTgwNiwgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTgwNywgMTgwOCwgMTcyMywgMTgwOSwgMTcyMywgMTgxMCwgMTgxMSwgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTgxMiwgMTgxMywgMTgxNCwgMTcyMywgMTgxNSwgMTgxNiwgMTgxNiwgMTgxNywgMTgxOCwKKyAgICAgMTgxOSwgMTgxOSwgMTcyMywgMTgyMCwgMTcyMywgIDc1NSwgMTgyMSwgMTgyMiwgMTgyMywgMTgyMywKKyAgICAgMTgyMywgMTgyMywgMTgyMywgMTgyMywgMTgyMywgMTgyMywgMTgyMywgMTgyMywgMTgyMywgMTgyMywKKyAgICAgMTgyMywgMTgyMywgMTgyMywgMTgyMywgMTgyMywgMTgyMywgMTgyMywgMTgyMywgMTgyMywgMTgyMywKKyAgICAgMTgyMywgMTgyMywgMTgyMywgMTgyMywgMTgyMywgMTgyMywgMTgyMywgMTgyMywgMTgyMywgMTgyMywKKyAgICAgIDc4OSwgMTgyMywgIDc4OSwgIDc5MywgIDc5MywgIDc5NSwgMTgyNCwgMTgyNSwgMTcyMywgIDc5OSwKIAotICAgICAgODAwLCAxODI5LCAxODMwLCAxNzI4LCAgODA0LCAxODMxLCAxNzI4LCAgODA3LCAxODMyLCAxNzI4LAotICAgICAgODEwLCAxODMzLCAxNzI4LCAxODM0LCAxODM1LCAxNzI4LCAgODE2LCAxODM2LCAxODM3LCAxODM3LAotICAgICAxNzI4LCAxODM4LCAxNzI4LCAgODIzLCAxODM5LCAxODQwLCAxODQxLCAxODQxLCAxODQyLCAxODQzLAotICAgICAxODQ0LCAxODQ0LCAxNzI4LCAxODQ1LCAxNzI4LCAgODM1LCAxODQ2LCAxODQ3LCAxODQ4LCAxNzI4LAotICAgICAxODQ5LCAxODUwLCAxODUwLCAxODUxLCAxODUyLCAxODUzLCAxODUzLCAxNzI4LCAxODU0LCAxNzI4LAotICAgICAgODUwLCAxODU1LCAxODU2LCAxODU3LCAxNzI4LCAxODU4LCAxNzI4LCAxODU5LCAxODYwLCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxODYxLCAxODYyLCAxODYzLCAxODYzLCAxODYzLCAxODYzLCAxODYzLAotICAgICAxODYzLCAxODYzLCAxODYzLCAxODYzLCAxODYzLCAxODYzLCAxODYzLCAxODYzLCAxODYzLCAxODYzLAotICAgICAxODYzLCAxODYzLCAxODYzLCAxODYzLCAxODYzLCAxODYzLCAxODYzLCAxODYzLCAxODYzLCAgODg5LAotICAgICAgODg5LCAgODkxLCAgODg5LCAgODg5LCAgODk0LCAxODY0LCAxNzI4LCAxNzI4LCAxNzI4LCAxODY1LAorICAgICAxODI2LCAxNzIzLCAgODAyLCAxODI3LCAxNzIzLCAgODA1LCAxODI4LCAxNzIzLCAxODI5LCAxODMwLAorICAgICAxNzIzLCAgODExLCAxODMxLCAxODMyLCAxODMyLCAxNzIzLCAxODMzLCAxNzIzLCAgODE4LCAxODM0LAorICAgICAxODM1LCAxODM2LCAxODM2LCAxODM3LCAxODM4LCAxODM5LCAxODM5LCAxNzIzLCAxODQwLCAxNzIzLAorICAgICAgODMwLCAxODQxLCAxODQyLCAxODQzLCAxNzIzLCAxODQ0LCAxODQ1LCAxODQ1LCAxODQ2LCAxODQ3LAorICAgICAxODQ4LCAxODQ4LCAxNzIzLCAxODQ5LCAxNzIzLCAgODQ1LCAxODUwLCAxODUxLCAxODUyLCAxNzIzLAorICAgICAxODUzLCAxNzIzLCAxODU0LCAxODU1LCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxODU2LCAxODU3LAorICAgICAxODU4LCAxODU4LCAxODU4LCAxODU4LCAxODU4LCAxODU4LCAxODU4LCAxODU4LCAxODU4LCAxODU4LAorICAgICAxODU4LCAxODU4LCAxODU4LCAxODU4LCAxODU4LCAxODU4LCAxODU4LCAxODU4LCAxODU4LCAxODU4LAorICAgICAxODU4LCAxODU4LCAxODU4LCAxODU4LCAgODg0LCAgODg0LCAgODg2LCAgODg0LCAgODg0LCAgODg5LAorICAgICAxODU5LCAxNzIzLCAxNzIzLCAxNzIzLCAxODYwLCAxNzIzLCAxNzIzLCAxODYxLCAxNzIzLCAxNzIzLAogCi0gICAgIDE3MjgsIDE3MjgsIDE4NjYsIDE3MjgsIDE3MjgsIDE4NjcsIDE4NjgsIDE4NjksIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE4NzAsIDE4NzEsIDE3MjgsIDE4NzIsIDE4NzMsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE4NzQsIDE4NzUsIDE3MjgsIDE4NzYsIDE3MjgsIDE4NzcsIDE4NzgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE4NzksIDE4ODAsIDE4ODEsIDE3MjgsIDE4ODIsIDE3MjgsIDE4ODMsIDE4ODQsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE4ODUsIDE4ODYsIDE4ODcsIDE4ODgsIDE3MjgsIDE4ODksCi0gICAgIDE4OTAsIDE4OTAsIDE4OTEsIDE4OTIsIDE4OTMsIDE4OTMsIDE3MjgsIDE4OTQsIDE3MjgsICA5NTksCi0gICAgIDE4OTUsIDE4OTYsIDE4OTcsIDE4OTcsIDE4OTcsIDE4OTcsIDE4OTcsIDE4OTcsIDE4OTcsIDE4OTcsCi0gICAgIDE4OTcsIDE4OTcsIDE4OTcsIDE4OTcsIDE4OTcsIDE4OTcsIDE4OTcsIDE4OTcsIDE4OTcsIDE4OTcsCi0gICAgIDE4OTcsIDE4OTcsIDE4OTcsIDE4OTcsIDE4OTcsIDE4OTcsICA5ODYsIDE4OTcsIDE4OTcsIDE4OTgsCi0gICAgIDE4OTksIDE3MjgsICA5OTIsIDE5MDAsIDE3MjgsICA5OTUsIDE5MDEsIDE3MjgsICA5OTgsIDE5MDIsCisgICAgIDE4NjIsIDE4NjMsIDE4NjQsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE4NjUsIDE4NjYsIDE3MjMsCisgICAgIDE4NjcsIDE4NjgsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE4NjksIDE4NzAsIDE3MjMsIDE4NzEsCisgICAgIDE3MjMsIDE4NzIsIDE4NzMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE4NzQsIDE4NzUsIDE4NzYsCisgICAgIDE3MjMsIDE4NzcsIDE3MjMsIDE4NzgsIDE4NzksIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE4ODAsCisgICAgIDE4ODEsIDE4ODIsIDE4ODMsIDE3MjMsIDE4ODQsIDE4ODUsIDE4ODUsIDE4ODYsIDE4ODcsIDE4ODgsCisgICAgIDE4ODgsIDE3MjMsIDE4ODksIDE3MjMsICA5NTQsIDE4OTAsIDE4OTEsIDE4OTIsIDE4OTIsIDE4OTIsCisgICAgIDE4OTIsIDE4OTIsIDE4OTIsIDE4OTIsIDE4OTIsIDE4OTIsIDE4OTIsIDE4OTIsIDE4OTIsIDE4OTIsCisgICAgIDE4OTIsIDE4OTIsIDE4OTIsIDE4OTIsIDE4OTIsIDE4OTIsIDE4OTIsIDE4OTIsIDE4OTIsIDE4OTIsCisgICAgIDE4OTIsICA5ODEsIDE4OTIsIDE4OTIsIDE4OTMsIDE4OTQsIDE3MjMsICA5ODcsIDE4OTUsIDE3MjMsCisgICAgICA5OTAsIDE4OTYsIDE3MjMsICA5OTMsIDE4OTcsIDE3MjMsICA5OTYsIDE4OTgsIDE3MjMsIDE4OTksCiAKLSAgICAgMTcyOCwgMTAwMSwgMTkwMywgMTcyOCwgMTkwNCwgMTcyOCwgMTcyOCwgMTAwNywgMTkwNSwgMTkwNiwKLSAgICAgMTkwNiwgMTcyOCwgMTkwNywgMTcyOCwgMTAxNCwgMTkwOCwgMTkwOSwgMTkxMCwgMTkxMCwgMTkxMSwKLSAgICAgMTkxMiwgMTkxMywgMTkxMywgMTcyOCwgMTkxNCwgMTcyOCwgMTAyNiwgMTkxNSwgMTkxNiwgMTkxNywKLSAgICAgMTcyOCwgMTkxOCwgMTkxOSwgMTkxOSwgMTkyMCwgMTkyMSwgMTkyMiwgMTkyMiwgMTcyOCwgMTkyMywKLSAgICAgMTcyOCwgMTA0MSwgMTkyNCwgMTkyNSwgMTkyNiwgMTkyNywgMTcyOCwgMTkyOCwgMTkyOSwgMTkyOSwKLSAgICAgMTkzMCwgMTkzMSwgMTkzMiwgMTkzMiwgMTcyOCwgMTkzMywgMTcyOCwgMTA1NywgMTkzNCwgMTkzNSwKLSAgICAgMTkzNiwgMTcyOCwgMTkzNywgMTcyOCwgMTkzOCwgMTkzOSwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwKLSAgICAgMTk0MCwgMTk0MSwgMTk0MiwgMTk0MiwgMTk0MiwgMTk0MiwgMTk0MiwgMTk0MiwgMTk0MiwgMTk0MiwKLSAgICAgMTk0MiwgMTk0MiwgMTk0MiwgMTk0MiwgMTk0MiwgMTk0MiwgMTk0MiwgMTk0MiwgMTk0MiwgMTk0MiwKLSAgICAgMTk0MiwgMTk0MiwgMTk0MiwgMTk0MiwgMTk0MiwgMTA5NSwgMTk0MiwgMTk0MywgMTcyOCwgMTcyOCwKKyAgICAgMTcyMywgMTcyMywgMTAwMiwgMTkwMCwgMTkwMSwgMTkwMSwgMTcyMywgMTkwMiwgMTcyMywgMTAwOSwKKyAgICAgMTkwMywgMTkwNCwgMTkwNSwgMTkwNSwgMTkwNiwgMTkwNywgMTkwOCwgMTkwOCwgMTcyMywgMTkwOSwKKyAgICAgMTcyMywgMTAyMSwgMTkxMCwgMTkxMSwgMTkxMiwgMTcyMywgMTkxMywgMTkxNCwgMTkxNCwgMTkxNSwKKyAgICAgMTkxNiwgMTkxNywgMTkxNywgMTcyMywgMTkxOCwgMTcyMywgMTAzNiwgMTkxOSwgMTkyMCwgMTkyMSwKKyAgICAgMTkyMiwgMTcyMywgMTkyMywgMTkyNCwgMTkyNCwgMTkyNSwgMTkyNiwgMTkyNywgMTkyNywgMTcyMywKKyAgICAgMTkyOCwgMTcyMywgMTA1MiwgMTkyOSwgMTkzMCwgMTkzMSwgMTcyMywgMTkzMiwgMTcyMywgMTkzMywKKyAgICAgMTkzNCwgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTkzNSwgMTkzNiwgMTkzNywgMTkzNywgMTkzNywKKyAgICAgMTkzNywgMTkzNywgMTkzNywgMTkzNywgMTkzNywgMTkzNywgMTkzNywgMTkzNywgMTkzNywgMTkzNywKKyAgICAgMTkzNywgMTkzNywgMTkzNywgMTkzNywgMTkzNywgMTkzNywgMTkzNywgMTkzNywgMTkzNywgMTkzNywKKyAgICAgMTA5MCwgMTkzNywgMTkzOCwgMTcyMywgMTcyMywgMTcyMywgMTkzOSwgMTcyMywgMTcyMywgMTk0MCwKIAotICAgICAxNzI4LCAxOTQ0LCAxNzI4LCAxNzI4LCAxOTQ1LCAxNzI4LCAxNzI4LCAxOTQ2LCAxNzI4LCAxNzI4LAotICAgICAxOTQ3LCAxOTQ4LCAxNzI4LCAxMTEzLCAxOTQ5LCAxOTUwLCAxNzI4LCAxNzI4LCAxOTUxLCAxOTUyLAotICAgICAxOTUzLCAxNzI4LCAxOTU0LCAxOTU1LCAxNzI4LCAxNzI4LCAxNzI4LCAxOTU2LCAxOTU3LCAxOTU4LAotICAgICAxNzI4LCAxOTU5LCAxNzI4LCAxOTYwLCAxOTYxLCAxNzI4LCAxNzI4LCAxNzI4LCAxOTYyLCAxOTYzLAotICAgICAxOTY0LCAxOTY1LCAxNzI4LCAxOTY2LCAxNzI4LCAxOTY3LCAxOTY4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxOTY5LCAxOTcwLCAxOTcxLCAxOTcyLCAxNzI4LCAxOTczLCAxNzI4LCAxOTc0LCAxOTc1LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxOTc2LCAxOTc3LCAxOTc4LCAxOTc5LCAxOTgwLCAxNzI4LCAxOTgxLCAxOTgyLAotICAgICAxOTgyLCAxOTgzLCAxOTg0LCAxOTg1LCAxOTg1LCAxNzI4LCAxOTg2LCAxNzI4LCAxMTc4LCAxOTg3LAotICAgICAxOTg4LCAxOTg5LCAxOTg5LCAxOTg5LCAxOTg5LCAxOTg5LCAxOTg5LCAxOTg5LCAxOTg5LCAxOTg5LAotICAgICAxOTg5LCAxOTg5LCAxOTg5LCAxOTg5LCAxOTg5LCAxOTg5LCAxOTg5LCAxOTg5LCAxOTg5LCAxOTg5LAorICAgICAxNzIzLCAxNzIzLCAxOTQxLCAxNzIzLCAxNzIzLCAxOTQyLCAxOTQzLCAxNzIzLCAxMTA4LCAxOTQ0LAorICAgICAxOTQ1LCAxNzIzLCAxNzIzLCAxOTQ2LCAxOTQ3LCAxOTQ4LCAxNzIzLCAxOTQ5LCAxOTUwLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxOTUxLCAxOTUyLCAxOTUzLCAxNzIzLCAxOTU0LCAxNzIzLCAxOTU1LCAxOTU2LAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxOTU3LCAxOTU4LCAxOTU5LCAxOTYwLCAxNzIzLCAxOTYxLCAxNzIzLAorICAgICAxOTYyLCAxOTYzLCAxNzIzLCAxNzIzLCAxNzIzLCAxOTY0LCAxOTY1LCAxOTY2LCAxOTY3LCAxNzIzLAorICAgICAxOTY4LCAxNzIzLCAxOTY5LCAxOTcwLCAxNzIzLCAxNzIzLCAxNzIzLCAxOTcxLCAxOTcyLCAxOTczLAorICAgICAxOTc0LCAxOTc1LCAxNzIzLCAxOTc2LCAxOTc3LCAxOTc3LCAxOTc4LCAxOTc5LCAxOTgwLCAxOTgwLAorICAgICAxNzIzLCAxOTgxLCAxNzIzLCAxMTczLCAxOTgyLCAxOTgzLCAxOTg0LCAxOTg0LCAxOTg0LCAxOTg0LAorICAgICAxOTg0LCAxOTg0LCAxOTg0LCAxOTg0LCAxOTg0LCAxOTg0LCAxOTg0LCAxOTg0LCAxOTg0LCAxOTg0LAorICAgICAxOTg0LCAxOTg0LCAxOTg0LCAxOTg0LCAxOTg0LCAxOTg0LCAxOTg0LCAxOTg0LCAxOTg0LCAxOTg1LAogCi0gICAgIDE5ODksIDE5ODksIDE5ODksIDE5ODksIDE5OTAsIDE3MjgsIDE3MjgsIDEyMDcsIDE5OTEsIDE3MjgsCi0gICAgIDEyMTAsIDE5OTIsIDE3MjgsIDEyMTMsIDE5OTMsIDE3MjgsIDEyMTYsIDE5OTQsIDE3MjgsIDEyMTksCi0gICAgIDE5OTUsIDE3MjgsIDE3MjgsIDE3MjgsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDAsCi0gICAgIDE3MjgsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDcsCi0gICAgIDE3MjgsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDE3MjgsIDIwMTIsIDIwMTMsIDIwMTMsIDIwMTQsCi0gICAgIDIwMTUsIDIwMTYsIDIwMTYsIDE3MjgsIDIwMTcsIDIwMTgsIDIwMTksIDIwMjAsIDIwMjEsIDE3MjgsCi0gICAgIDIwMjIsIDIwMjMsIDIwMjMsIDIwMjQsIDIwMjUsIDIwMjYsIDIwMjYsIDE3MjgsIDIwMjcsIDIwMjgsCi0gICAgIDIwMjksIDIwMzAsIDIwMzEsIDE3MjgsIDIwMzIsIDIwMzMsIDIwMzMsIDIwMzQsIDIwMzUsIDIwMzYsCi0gICAgIDIwMzYsIDE3MjgsIDIwMzcsIDIwMzgsIDIwMzksIDIwNDAsIDE3MjgsIDIwNDEsIDE3MjgsIDIwNDIsCi0gICAgIDIwNDMsIDE3MjgsIDE3MjgsIDE3MjgsIDIwNDQsIDIwNDUsIDIwNDYsIDIwNDcsIDIwNDcsIDIwNDcsCisgICAgIDE3MjMsIDE3MjMsIDEyMDIsIDE5ODYsIDE3MjMsIDEyMDUsIDE5ODcsIDE3MjMsIDEyMDgsIDE5ODgsCisgICAgIDE3MjMsIDEyMTEsIDE5ODksIDE3MjMsIDEyMTQsIDE5OTAsIDE3MjMsIDE3MjMsIDE3MjMsIDE5OTEsCisgICAgIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTUsIDE3MjMsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisgICAgIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDIsIDE3MjMsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsCisgICAgIDE3MjMsIDIwMDcsIDIwMDgsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTEsIDE3MjMsIDIwMTIsCisgICAgIDIwMTMsIDIwMTQsIDIwMTUsIDIwMTYsIDE3MjMsIDIwMTcsIDIwMTgsIDIwMTgsIDIwMTksIDIwMjAsCisgICAgIDIwMjEsIDIwMjEsIDE3MjMsIDIwMjIsIDIwMjMsIDIwMjQsIDIwMjUsIDIwMjYsIDE3MjMsIDIwMjcsCisgICAgIDIwMjgsIDIwMjgsIDIwMjksIDIwMzAsIDIwMzEsIDIwMzEsIDE3MjMsIDIwMzIsIDIwMzMsIDIwMzQsCisgICAgIDIwMzUsIDE3MjMsIDIwMzYsIDE3MjMsIDIwMzcsIDIwMzgsIDE3MjMsIDE3MjMsIDE3MjMsIDIwMzksCisgICAgIDIwNDAsIDIwNDEsIDIwNDIsIDIwNDIsIDIwNDIsIDIwNDIsIDIwNDIsIDIwNDIsIDIwNDIsIDIwNDIsCiAKLSAgICAgMjA0NywgMjA0NywgMjA0NywgMjA0NywgMjA0NywgMjA0NywgMjA0NywgMjA0NywgMjA0NywgMjA0NywKLSAgICAgMjA0NywgMjA0NywgMjA0NywgMjA0NywgMjA0NywgMjA0NywgMjA0NywgMTcyOCwgMTMxOCwgMjA0OCwKLSAgICAgMjA0OSwgMTcyOCwgMjA1MCwgMjA1MSwgMTcyOCwgMjA1MiwgMjA1MywgMTcyOCwgMjA1NCwgMjA1NSwKLSAgICAgMTcyOCwgMjA1NiwgMjA1NywgMTcyOCwgMjA1OCwgMjA1OSwgMjA2MCwgMjA2MCwgMTcyOCwgMjA2MSwKLSAgICAgMjA2MiwgMjA2MywgMjA2NCwgMjA2NSwgMTcyOCwgMjA2NiwgMjA2NywgMTcyOCwgMjA2OCwgMTcyOCwKLSAgICAgMjA2OSwgMTcyOCwgMjA3MCwgMjA3MSwgMTcyOCwgMjA3MiwgMjA3MywgMTcyOCwgMjA3NCwgMTcyOCwKLSAgICAgMjA3NSwgMjA3NiwgMTcyOCwgMjA3NywgMjA3OCwgMTcyOCwgMjA3OSwgMTcyOCwgMjA4MCwgMjA4MSwKLSAgICAgMTcyOCwgMjA4MiwgMjA4MywgMTcyOCwgMjA4NCwgMTcyOCwgMjA4NSwgMjA4NiwgMTcyOCwgMjA4NywKLSAgICAgMjA4OCwgMjA4OSwgMTcyOCwgMjA5MCwgMjA5MSwgMjA5MSwgMjA5MiwgMjA5MywgMjA5NCwgMjA5NCwKLSAgICAgMTcyOCwgMjA5NSwgMjA5NiwgMjA5NywgMjA5OCwgMjA5OCwgMjA5OCwgMjA5OCwgMjA5OCwgMjA5OCwKKyAgICAgMjA0MiwgMjA0MiwgMjA0MiwgMjA0MiwgMjA0MiwgMjA0MiwgMjA0MiwgMjA0MiwgMjA0MiwgMjA0MiwKKyAgICAgMjA0MiwgMjA0MiwgMTcyMywgMTMxMywgMjA0MywgMjA0NCwgMTcyMywgMjA0NSwgMjA0NiwgMTcyMywKKyAgICAgMjA0NywgMjA0OCwgMTcyMywgMjA0OSwgMjA1MCwgMTcyMywgMjA1MSwgMjA1MiwgMTcyMywgMjA1MywKKyAgICAgMjA1NCwgMjA1NSwgMjA1NSwgMTcyMywgMjA1NiwgMjA1NywgMjA1OCwgMjA1OSwgMjA2MCwgMTcyMywKKyAgICAgMjA2MSwgMjA2MiwgMTcyMywgMjA2MywgMTcyMywgMjA2NCwgMTcyMywgMjA2NSwgMjA2NiwgMTcyMywKKyAgICAgMjA2NywgMjA2OCwgMTcyMywgMjA2OSwgMTcyMywgMjA3MCwgMjA3MSwgMTcyMywgMjA3MiwgMjA3MywKKyAgICAgMTcyMywgMjA3NCwgMTcyMywgMjA3NSwgMjA3NiwgMTcyMywgMjA3NywgMjA3OCwgMTcyMywgMjA3OSwKKyAgICAgMTcyMywgMjA4MCwgMjA4MSwgMTcyMywgMjA4MiwgMjA4MywgMjA4NCwgMTcyMywgMjA4NSwgMjA4NiwKKyAgICAgMjA4NiwgMjA4NywgMjA4OCwgMjA4OSwgMjA4OSwgMTcyMywgMjA5MCwgMjA5MSwgMjA5MiwgMjA5MywKKyAgICAgMjA5MywgMjA5MywgMjA5MywgMjA5MywgMjA5MywgMjA5MywgMjA5MywgMjA5MywgMjA5MywgMjA5MywKIAotICAgICAyMDk4LCAyMDk4LCAyMDk4LCAyMDk4LCAyMDk4LCAyMDk4LCAyMDk4LCAyMDk4LCAyMDk4LCAyMDk4LAotICAgICAyMDk4LCAxNzI4LCAyMDk5LCAyMTAwLCAyMTAxLCAyMTAyLCAyMTAzLCAyMTA0LCAyMTA1LCAyMTA2LAotICAgICAxNzI4LCAyMTA3LCAyMTA4LCAxNzI4LCAyMTA5LCAyMTEwLCAyMTExLCAyMTExLCAyMTEyLCAyMTEzLAotICAgICAyMTE0LCAyMTE1LCAxNzI4LCAyMTE2LCAyMTE3LCAyMTE3LCAyMTE4LCAyMTE5LCAyMTIwLCAyMTIxLAotICAgICAyMTIyLCAxNzI4LCAyMTIzLCAyMTI0LCAyMTI0LCAyMTI1LCAyMTI2LCAyMTI3LCAyMTI4LCAyMTI5LAotICAgICAxNzI4LCAyMTMwLCAyMTMxLCAyMTMxLCAyMTMyLCAyMTMzLCAyMTM0LCAyMTM1LCAyMTM2LCAxNzI4LAotICAgICAyMTM3LCAyMTM4LCAyMTM4LCAyMTM5LCAyMTQwLCAyMTQxLCAyMTQyLCAxNzI4LCAyMTQzLCAxNzI4LAotICAgICAyMTQ0LCAyMTQ1LCAxNzI4LCAyMTQ2LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LAotICAgICAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LAotICAgICAyMTQ3LCAyMTQ4LCAxNzI4LCAyMTQ5LCAyMTUwLCAyMTUxLCAyMTUyLCAyMTUzLCAyMTU0LCAyMTU1LAorICAgICAyMDkzLCAyMDkzLCAyMDkzLCAyMDkzLCAyMDkzLCAyMDkzLCAxNzIzLCAyMDk0LCAyMDk1LCAyMDk2LAorICAgICAyMDk3LCAyMDk4LCAyMDk5LCAyMTAwLCAyMTAxLCAxNzIzLCAyMTAyLCAyMTAzLCAxNzIzLCAyMTA0LAorICAgICAyMTA1LCAyMTA2LCAyMTA2LCAyMTA3LCAyMTA4LCAyMTA5LCAyMTEwLCAxNzIzLCAyMTExLCAyMTEyLAorICAgICAyMTEyLCAyMTEzLCAyMTE0LCAyMTE1LCAyMTE2LCAyMTE3LCAxNzIzLCAyMTE4LCAyMTE5LCAyMTE5LAorICAgICAyMTIwLCAyMTIxLCAyMTIyLCAyMTIzLCAyMTI0LCAxNzIzLCAyMTI1LCAyMTI2LCAyMTI2LCAyMTI3LAorICAgICAyMTI4LCAyMTI5LCAyMTMwLCAyMTMxLCAxNzIzLCAyMTMyLCAyMTMzLCAyMTMzLCAyMTM0LCAyMTM1LAorICAgICAyMTM2LCAyMTM3LCAxNzIzLCAyMTM4LCAxNzIzLCAyMTM5LCAyMTQwLCAxNzIzLCAyMTQxLCAyMTQyLAorICAgICAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLAorICAgICAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQzLCAxNzIzLCAyMTQ0LCAyMTQ1LAorICAgICAyMTQ2LCAyMTQ3LCAyMTQ4LCAyMTQ5LCAyMTUwLCAyMTUwLCAyMTUxLCAyMTUyLCAyMTUzLCAxNzIzLAogCi0gICAgIDIxNTUsIDIxNTYsIDIxNTcsIDIxNTgsIDE3MjgsIDE3MjgsIDIxNTksIDE3MjgsIDIxNjAsIDE3MjgsCi0gICAgIDIxNjEsIDE3MjgsIDIxNjIsIDE3MjgsIDIxNjMsIDE3MjgsIDIxNjQsIDE3MjgsIDIxNjUsIDE3MjgsCi0gICAgIDIxNjYsIDE3MjgsIDIxNjcsIDE3MjgsIDIxNDIsIDIxNjgsIDE3MjgsIDIxNDMsIDIxNjksIDIxNjksCi0gICAgIDIxNDQsIDIxNDUsIDIxNzAsIDIxNDcsIDIxNDcsIDIxNDcsIDIxNDcsIDIxNDcsIDIxNDcsIDIxNDcsCi0gICAgIDIxNDcsIDIxNDcsIDIxNDcsIDIxNDcsIDIxNDcsIDIxNDcsIDIxNDcsIDIxNDcsIDIxNDcsIDIxNzEsCi0gICAgIDE3MjgsIDIxNzIsIDIxNzMsIDE3MjgsIDIxNTksIDIxNjAsIDIxNzQsIDE3MjgsIDIxNjEsIDIxNjIsCi0gICAgIDIxNzUsIDE3MjgsIDIxNjMsIDIxNjQsIDIxNzYsIDE3MjgsIDIxNjUsIDIxNjYsIDIxNzcsIDE3MjgsCi0gICAgIDIxNjcsIDIxNzgsIDE3MjgsIDIxNzksIDE3MjgsIDIxNDcsIDIxNDcsIDIxNDcsIDIxNDcsIDIxNDcsCi0gICAgIDIxNDcsIDIxNDcsIDIxNDcsIDIxNDcsIDIxNDcsIDIxNDcsIDIxNDcsIDIxNDcsIDIxODAsIDE3MjgsCi0gICAgIDIxNzIsIDIxODEsIDIxODIsIDIxODMsIDIxODQsIDIxODUsIDIxNzgsIDIxODYsIDE3MjgsIDIxNzksCisgICAgIDE3MjMsIDIxNTQsIDE3MjMsIDIxNTUsIDE3MjMsIDIxNTYsIDE3MjMsIDIxNTcsIDE3MjMsIDIxNTgsCisgICAgIDE3MjMsIDIxNTksIDE3MjMsIDIxNjAsIDE3MjMsIDIxNjEsIDE3MjMsIDIxNjIsIDE3MjMsIDIxMzcsCisgICAgIDIxNjMsIDE3MjMsIDIxMzgsIDIxNjQsIDIxNjQsIDIxMzksIDIxNDAsIDIxNjUsIDIxNDIsIDIxNDIsCisgICAgIDIxNDIsIDIxNDIsIDIxNDIsIDIxNDIsIDIxNDIsIDIxNDIsIDIxNDIsIDIxNDIsIDIxNDIsIDIxNDIsCisgICAgIDIxNDIsIDIxNDIsIDIxNDIsIDIxNDIsIDIxNjYsIDE3MjMsIDIxNjcsIDIxNjgsIDE3MjMsIDIxNTQsCisgICAgIDIxNTUsIDIxNjksIDE3MjMsIDIxNTYsIDIxNTcsIDIxNzAsIDE3MjMsIDIxNTgsIDIxNTksIDIxNzEsCisgICAgIDE3MjMsIDIxNjAsIDIxNjEsIDIxNzIsIDE3MjMsIDIxNjIsIDIxNzMsIDE3MjMsIDIxNzQsIDE3MjMsCisgICAgIDIxNDIsIDIxNDIsIDIxNDIsIDIxNDIsIDIxNDIsIDIxNDIsIDIxNDIsIDIxNDIsIDIxNDIsIDIxNDIsCisgICAgIDIxNDIsIDIxNDIsIDIxNDIsIDIxNzUsIDE3MjMsIDIxNjcsIDIxNzYsIDIxNzcsIDIxNzgsIDIxNzksCisgICAgIDIxODAsIDIxNzMsIDIxODEsIDE3MjMsIDIxNzQsIDIxNDIsIDIxNDIsIDIxNDIsIDIxNDIsIDIxNDIsCiAKLSAgICAgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywKLSAgICAgMjE0NywgMjE0NywgMjE4NywgMjE4MSwgMjE4MiwgMjE4MywgMjE4NCwgMjE4NSwgMjE4OCwgMjE0NywKLSAgICAgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywKLSAgICAgMjE4NywgMjE4OCwgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywKLSAgICAgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywKLSAgICAgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywKLSAgICAgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywKLSAgICAgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywKLSAgICAgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywKLSAgICAgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywgMjE0NywKKyAgICAgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE4MiwgMjE3NiwgMjE3NywKKyAgICAgMjE3OCwgMjE3OSwgMjE4MCwgMjE4MywgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwKKyAgICAgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE4MiwgMjE4MywgMjE0MiwgMjE0MiwgMjE0MiwKKyAgICAgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwKKyAgICAgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwKKyAgICAgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwKKyAgICAgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwKKyAgICAgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwKKyAgICAgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwKKyAgICAgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwgMjE0MiwKIAotICAgICAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LAotICAgICAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LAotICAgICAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAyMTQ3LCAgICAwLCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAorICAgICAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLAorICAgICAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLCAyMTQyLAorICAgICAyMTQyLCAyMTQyLCAgICAwLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAogCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCisgICAgIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsCisgICAgIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsCisgICAgIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsCisgICAgIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsCisgICAgIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsCisgICAgIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsCisgICAgIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsCisgICAgIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsCisgICAgIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsCisgICAgIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsCiAKLSAgICAgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwKLSAgICAgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwKLSAgICAgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwKLSAgICAgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwKLSAgICAgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwKLSAgICAgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwKLSAgICAgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwKLSAgICAgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwKLSAgICAgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwKLSAgICAgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKIAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAogCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMwogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X3VpbnQxNl90IHl5X254dFs3OTEwXSA9CitzdGF0aWMgY29uc3QgZmxleF9pbnQxNl90IHl5X254dFs3Njc5XSA9CiAgICAgeyAgIDAsCi0gICAgICAgIDQsICAgIDUsICAgIDYsICAgIDcsICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTIsCi0gICAgICAgMTMsICAgMTQsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTUsICAgMTYsICAgMTcsCi0gICAgICAgMTgsICAgMTksICAgMjAsICAgMjEsICAgMjEsICAgMTIsICAgMjIsICAgMTMsICAgMjMsICAgMjQsCi0gICAgICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMjEsICAgMzIsICAgMzMsCi0gICAgICAgMzQsICAgMzUsICAgMzYsICAgMjEsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEsICAgNDIsCi0gICAgICAgMjEsICAgMjEsICAgNDMsICAgNDQsICAgNTMsICAyMTEsICAgNDQsICAgNDQsICAgNDQsICAgNDQsCi0gICAgICAgNDQsICAyMTIsICAgNDQsICAgNDQsICAgNDQsICAgNTcsICAgNTgsICAgNDQsICAyNDgsICAgNDQsCi0gICAgICAgNDQsICAgNDQsICAgNjAsICAgNjEsICAgNzIsICAgNDQsICAgODMsICAgODQsICAyNDksICAgNDQsCi0gICAgICAgNTMsICAgNDQsICAgNDQsICAgNDQsICAgNDQsICAyMDYsICAgNDQsICAgNDQsICAgNzMsICAgODUsCi0gICAgICAgNDQsICAxMTcsICAgNzksIDExNTcsICAgODYsICAgNzQsICAgODAsICA2ODYsICAxOTUsICAgNDQsCisgICAgICAgIDQsICAgIDUsICAgIDYsICAgIDUsICAgIDcsICAgIDgsICAgIDksICAgMTAsICAgIDksICAgIDksCisgICAgICAgIDQsICAgMTEsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTMsICAgMTQsCisgICAgICAgMTUsICAgMTYsICAgMTcsICAgMTgsICAgMTgsICAgMTksICAgIDQsICAgMjAsICAgMjEsICAgMjIsCisgICAgICAgMjMsICAgMjQsICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMTgsICAgMjksICAgMzAsICAgMzEsCisgICAgICAgMzIsICAgMzMsICAgMTgsICAgMzQsICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgMTgsCisgICAgICAgMTgsICAgNDAsICAgNDQsICAgNDUsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsICAgNDYsCisgICAgICAgNDYsICAgNDcsICAgNTMsICAgNTQsICAgNDksICAgNDgsICAgNDksICAgNTAsICA3NjksICAgNTEsCisgICAgICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDksICAgNDksICAgNDksICAgNDksCisgICAgICAgNDksICAgNDksICAgNDksICAgNDksICAgNDksICAgNDksICAgNDksICAgNDksICAgNDksICAgNDksCisgICAgICAgNDksICAgNDksICAgNTAsICAgNDksICAgNDksICAgNTYsICAgNTcsICAgNjAsICAgNzQsICAgNjEsCiAKLSAgICAgIDExOCwgIDE5NiwgICA4MSwgIDY4NywgIDE5NywgICA4MiwgIDE5OCwgICA0NCwgICA0OCwgICA0OSwKLSAgICAgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MSwgIDIwNywgIDIwMSwKLSAgICAgIDk0MiwgICA1MiwgICA1MywgICA1NCwgIDIwMiwgIDE4MiwgICA1NSwgICA1MiwgICA1MiwgICA1MiwKLSAgICAgICA1MiwgICA1MiwgICA1MiwgICA1MywgICA1MywgICA1MywgICA1MywgICA1MywgICA1MywgICA1MywKLSAgICAgICA1MywgICA1MywgICA1MywgICA1MywgICA1MywgICA1MywgICA1MywgICA1MywgICA1MywgICA1NCwKLSAgICAgICA1MywgICA0NCwgIDE4MywgICA3NSwgICA0NCwgIDc2NiwgICA0NCwgICA0NCwgIDE4NCwgIDIzNiwKLSAgICAgICA4NywgICA1MywgIDIxMywgICA3NiwgICA4OCwgIDM0NCwgICA3NywgIDIxNCwgICA2MywgICA1NiwKLSAgICAgICA3OCwgICA2MywgIDIzNywgICA2MywgICA2MywgIDIwOCwgICA4OSwgICA0NCwgICA2MiwgICA1MiwKLSAgICAgICA1MiwgICA1MiwgICA1MiwgICA1MiwgICA1MiwgICA1MiwgICA2MywgIDI0MiwgICA2NSwgIDM0NSwKLSAgICAgICA2NiwgICA2NywgICA1MywgIDc2OCwgICA2MywgICA2OCwgICA1MywgIDM0MiwgIDExOSwgIDM0MywKKyAgICAgICA2MiwgIDExMiwgICA3NSwgIDQ5OSwgICA2MywgICA3OCwgICA3OSwgICA4MCwgICA3NiwgICA2NCwKKyAgICAgIDExMywgICA3NywgICA4MSwgICA2NSwgICA2NywgICA2NiwgIDE5MiwgIDUwMCwgIDE5MywgICA0OSwKKyAgICAgICA1OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA2OCwgICA3MCwKKyAgICAgIDE5MCwgMTE1MCwgICA4MiwgIDE5MSwgICA0OSwgICA2OSwgICA4MywgIDEyNCwgIDIwNiwgICA3MSwKKyAgICAgIDIwMSwgIDEyNSwgICA3MiwgICA4NSwgIDIwNywgICA4NiwgICA3MywgIDE5NiwgICA4NCwgIDEyNiwKKyAgICAgICA4NywgICA4OCwgIDE5NywgICA4OSwgIDEyNywgMTE1MiwgIDEyOCwgICA5MCwgIDIzNywgICA0OSwKKyAgICAgICA1MSwgICA0OSwgICA0OSwgICA0OSwgICA0OSwgICA0OSwgICA0OSwgICA0OSwgICA0OSwgMTcyMywKKyAgICAgICA5OSwgIDEwMCwgIDIwMiwgICA0OSwgIDkzNywgIDEzNiwgIDIzOCwgIDEzNywgICA0OSwgICA0OSwKKyAgICAgICA0OSwgICA0OSwgICA0OSwgICA0OSwgICA5MSwgIDEwMSwgMTMzMCwgICA5MiwgICA5MywgIDEwMiwKKyAgICAgICA5NCwgIDEzOCwgICA5NSwgIDEwMywgICA5NiwgIDEwNCwgICA5NywgIDEwNiwgIDEzOSwgICA5OCwKIAotICAgICAgIDY5LCAgIDkwLCAgMjA5LCAgIDkxLCAgIDcwLCAgMjQzLCAgIDcxLCAgMjEwLCAgIDkyLCAgIDkzLAotICAgICAgMTIwLCAgIDk0LCAgMTIxLCAxMzM1LCAgMTIyLCAgIDk1LCAgNDUzLCAgMTIzLCAgIDUzLCAgIDU1LAotICAgICAgIDUzLCAgIDUzLCAgIDUzLCAgIDUzLCAgIDUzLCAgIDUzLCAgIDUzLCAgIDUzLCAxNzI4LCAgMTA0LAotICAgICAgMTA1LCAgMjE3LCAgIDUzLCAgNzcwLCAgMjE4LCAxMTYxLCAgMjE5LCAgMjQ1LCAgIDUzLCAgIDUzLAotICAgICAgIDUzLCAgIDUzLCAgIDUzLCAgIDUzLCAgIDk2LCAgMTA2LCAgMjQ2LCAgIDk3LCAgIDk4LCAgMTA3LAotICAgICAgIDk5LCAgIDUzLCAgMTAwLCAgMTA4LCAgMTAxLCAgMTA5LCAgMTAyLCAgMTExLCAgMTI0LCAgMTAzLAotICAgICAgIDUzLCAgMTEyLCAgMTEwLCAgMTI1LCAgMTI2LCAgMTI5LCAgMTI3LCAgMTI4LCAgNzk5LCAgMTMwLAotICAgICAgMTEzLCAgMTE0LCAxNzI4LCAgMTM0LCAgMTE1LCAgMzI0LCAgMTE2LCAgMTMxLCAgMTQxLCAgMTM1LAotICAgICAgMTQyLCAgMTM2LCAgMTMyLCAgMTM3LCAgMTMzLCAgMTQ2LCAgIDUzLCAgMTM4LCAgMzI1LCAgMTM5LAotICAgICAgMTQwLCAgIDUzLCAgMzU1LCAgMTQ3LCAgMTQzLCAgIDUzLCAgNTI3LCAgMTQ4LCAxNzI4LCAgMTQ5LAorICAgICAgMTE5LCAgMTA3LCAgMTA1LCAgMTE0LCAgIDQ5LCAgMTIwLCAgMTIxLCAgMjA4LCAgMTIyLCAgMTIzLAorICAgICAgMTA4LCAgMTA5LCAgMjA5LCAgMTQxLCAgMTEwLCAgMTE1LCAgMTExLCAgMTE2LCAgMTI5LCAgMTE3LAorICAgICAgMjAzLCAgMTQyLCAgMTE4LCAgMjQzLCAgMTMwLCAgMTQzLCAgMTMxLCAgMTQ0LCAgMTMyLCAgIDQ5LAorICAgICAgMjMxLCAgMzE5LCAgMTMzLCAgMjQ0LCAgMTM0LCAgMTM1LCAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ4LAorICAgICAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMjMyLCAgMzIwLCAgMjEyLCAgMjA0LCAgMTQ4LCAgMjEzLCAgMzM5LAorICAgICAgMjE0LCAgMjA1LCAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ5LCAgMTUwLAorICAgICAgMTUwLCAgMTUwLCAgMTUwLCAgMTUwLCAgMTUwLCAxNzIzLCAgMzM3LCAgNjgxLCAgMzM4LCAgMTUxLAorICAgICAgIDQ5LCAgMzUwLCAgMzQwLCAgNjgyLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLAorICAgICAgIDQ1LCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgNzYzLCAgNDEyLAorICAgICAxNzIzLCAgIDQ5LCAgMTUzLCAgMTc3LCAgNDEzLCAxNzIzLCAgIDQ5LCAgMTUzLCAgMTUzLCAgMTUzLAogCi0gICAgICAgNDQsICAxNDQsICA0OTAsICAgNDQsICAgNTMsICAgNDQsICAgNDQsICAxNTYsICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAxNTYsICAxNTYsICAxNTYsIDE3MjgsICA0MTcsICAgNjMsICAgNTMsICAgNDQsICAgNjMsCi0gICAgICA0MTgsICAgNjMsICAgNjMsICA0OTEsICA1MDAsIDEwNzAsICAgNDQsICAxNTMsICAxNTMsICAxNTMsCi0gICAgICAxNTMsICAxNTMsICAxNTMsICAxNTMsICAgNjMsICAgNTMsICA3MDgsICA1MDEsICAxNTMsICA0OTIsCi0gICAgIDE3MjgsICA3NzUsICAgNjMsICAgNTMsICAxNTMsICAxNTMsICAxNTMsICAxNTMsICAxNTMsICAxNTMsCi0gICAgICAxNTQsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsIDE3MjgsICAgNTMsICAgNTMsCi0gICAgIDE3MjgsICAxNTYsICAzODAsICAzODEsICAzODIsICAzODMsIDEyOTUsICAxNTYsICAxNTYsICAxNTYsCi0gICAgICAxNTYsICAxNTYsICAxNTYsICAgNDksICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsCi0gICAgICAxNTcsICAyNzcsICAzODQsIDE3MjgsICAgNTMsICAxNTgsIDE3MjgsIDE3MjgsIDE3MjgsICAyNzksCi0gICAgIDE0MTMsICAxNTgsICAxNTgsICAxNTgsICAxNTgsICAxNTgsICAxNTgsICAgNjIsICAxNTgsICAxNTgsCisgICAgICAxNTMsICAxNTMsICAxNTMsICAgNTgsICAxNTMsICAxNTMsICAxNTMsICAxNTMsICAxNTMsICAxNTMsCisgICAgICAxNTMsICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsICAxNTYsIDE3MjMsICAxNzgsCisgICAgIDE3MjMsICAgNDksICAxNTYsICAgNDksICA1MjIsICAxNzksICA0NDgsICAxNTYsICAxNTYsICAxNTYsCisgICAgICAxNTYsICAxNTYsICAxNTYsICAxNTcsICAxNTgsICAxNTgsICAxNTgsICAxNTgsICAxNTgsICAxNTgsCisgICAgICAgNDksICA3MDMsICA3NjIsIDE3MjMsICAxNTksICA3NjAsICAgNDksICAgNDksICAgNDksICAxNTksCisgICAgICAxNTksICAxNTksICAxNTksICAxNTksICAxNTksICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsCisgICAgICAxNTEsICAxNTEsICAyNDAsICAzNDcsICAzNDcsICAzNDcsICAzNDcsICAzNDcsICAzNDcsICAzNDcsCisgICAgICA0MzIsICAyNDEsICAyNTUsICAgNDksICAyNTYsICAyNTYsICAyNTYsICAyNTYsICAyNTYsICAyNTYsCisgICAgICAyNTYsIDE3MjMsIDE3MjMsIDExNTYsICAyNjAsICAyNTYsICAzNzUsICAzNzYsICAzNzcsICAzNzgsCisgICAgICAyNTYsICAyNTYsICAyNTYsICAyNTYsICAyNTYsICAyNTYsICAyNTcsICAyNTgsICAyNTgsICAyNTgsCiAKLSAgICAgIDE1OCwgIDE1OCwgIDE1OCwgIDE1OCwgIDE1OCwgIDE2MSwgIDE2MSwgIDE2MSwgIDE2MSwgIDE2MSwKLSAgICAgIDE2MSwgIDE2MSwgIDU3NiwgMTcyOCwgMTcyOCwgIDQzNywgIDE2MSwgMTMyMywgIDUwNCwgIDc2NSwKLSAgICAgICA1MywgIDU3NywgIDE2MSwgIDE2MSwgIDE2MSwgIDE2MSwgIDE2MSwgIDE2MSwgICA0NCwgIDI2NSwKLSAgICAgIDc2NywgICA0NCwgIDUwNSwgICA0NCwgICA0NCwgICA1MywgMTMyNiwgIDQ2NCwgIDQ2NCwgIDE2MiwKLSAgICAgIDE2MywgIDE2MywgIDE2MywgIDE2MywgIDE2MywgIDE2MywgICA0NCwgICA1MywgMTcyOCwgICA1MywKLSAgICAgIDE2NCwgIDQ2NSwgMTcyOCwgIDc3NCwgICA0NCwgIDI2NSwgIDE2NCwgIDE2NCwgIDE2NCwgIDE2NCwKLSAgICAgIDE2NCwgIDE2NCwgIDI2MCwgIDU3OSwgIDI2MSwgIDI2MSwgIDI2MSwgIDI2MSwgIDI2MSwgIDI2MSwKLSAgICAgIDI2MSwgIDM2NSwgIDU4MCwgICA1MywgMTcyOCwgIDI2MSwgMTcyOCwgIDQ2NSwgMTcyOCwgIDUzNSwKLSAgICAgIDc4MSwgIDI2MSwgIDI2MSwgIDI2MSwgIDI2MSwgIDI2MSwgIDI2MSwgIDI2MiwgIDI2MywgIDI2MywKLSAgICAgIDI2MywgIDI2MywgIDI2MywgIDI2MywgIDI2MywgIDI3NywgIDQ2OCwgICA1MywgMTMyOSwgIDI2NCwKKyAgICAgIDI1OCwgIDI1OCwgIDI1OCwgIDI1OCwgIDI3MiwgIDM3OSwgMTcyMywgMTcyMywgIDI1OSwgIDI2MCwKKyAgICAgIDI2MCwgMTA2NSwgIDI3NCwgIDI1OSwgIDI1OSwgIDI1OSwgIDI1OSwgIDI1OSwgIDI1OSwgIDM2NiwKKyAgICAgIDM2NywgIDM2NywgIDM2NywgIDM2NywgIDM2NywgIDM2NywgIDQzNSwgIDQzNSwgIDQzNSwgIDQzNSwKKyAgICAgIDQzNSwgIDQzNSwgIDQzNSwgIDQ1OSwgIDc3NiwgIDI2MCwgIDI2MSwgIDI1OSwgIDI1OSwgIDI1OSwKKyAgICAgIDI1OSwgIDI1OSwgIDI1OSwgIDI1OSwgMTcyMywgICA0OSwgIDc2MSwgIDQ2MCwgIDI1OSwgMTcyMywKKyAgICAgMTcyMywgICA0OSwgICA0OSwgIDI1OSwgIDI1OSwgIDI1OSwgIDI1OSwgIDI1OSwgIDI1OSwgIDI2MiwKKyAgICAgIDI2MywgIDI2MywgIDI2MywgIDI2MywgIDI2MywgIDI2MywgIDI2MywgIDI2NCwgMTI5MCwgMTcyMywKKyAgICAgICA0OSwgIDI2NSwgIDQ2MCwgMTcyMywgMTcyMywgMTcyMywgIDI2NSwgIDI2NSwgIDI2NSwgIDI2NSwKKyAgICAgIDI2NSwgIDI2NSwgICA0OSwgIDI2NSwgIDI2NSwgIDI2NSwgIDI2NSwgIDI2NSwgIDI2NSwgIDI2NSwKKyAgICAgIDI2OCwgIDI2OSwgIDI2OSwgIDI2OSwgIDI2OSwgIDI2OSwgIDI2OSwgIDI3MCwgMTcyMywgICA0OSwKIAotICAgICAxNzI4LCAgMjY1LCAxNzI4LCAxNzI4LCAgNDcwLCAgMjY0LCAgMjY0LCAgMjY0LCAgMjY0LCAgMjY0LAotICAgICAgMjY0LCAgMzUyLCAgMzUyLCAgMzUyLCAgMzUyLCAgMzUyLCAgMzUyLCAgMzUyLCAgMzcxLCAgMzcyLAotICAgICAgMzcyLCAgMzcyLCAgMzcyLCAgMzcyLCAgMzcyLCAgNTQ1LCAxNzI4LCAgMjY1LCAgMjY2LCAgMjY0LAotICAgICAgMjY0LCAgMjY0LCAgMjY0LCAgMjY0LCAgMjY0LCAgMjY0LCAgNjg4LCAxNzI4LCAxMzMyLCAgNTQ2LAotICAgICAgMjY0LCAgMzgwLCAgMzgxLCAgMzgyLCAgMzgzLCAgNjg5LCAgMjY0LCAgMjY0LCAgMjY0LCAgMjY0LAotICAgICAgMjY0LCAgMjY0LCAgMjY3LCAgMjY4LCAgMjY4LCAgMjY4LCAgMjY4LCAgMjY4LCAgMjY4LCAgMjY4LAotICAgICAgMjY5LCAgNzc5LCAxMzM1LCAxNzI4LCAgMjcwLCAgNTQ2LCAxNzI4LCAxNzI4LCAgIDUzLCAxNDEzLAotICAgICAgMjcwLCAgMjcwLCAgMjcwLCAgMjcwLCAgMjcwLCAgMjcwLCAgIDUzLCAgMjcwLCAgMjcwLCAgMjcwLAotICAgICAgMjcwLCAgMjcwLCAgMjcwLCAgMjcwLCAgMjczLCAgMjc0LCAgMjc0LCAgMjc0LCAgMjc0LCAgMjc0LAotICAgICAgMjc0LCAgMjc1LCAxNzI4LCAxNzI4LCAgNzczLCAgMjc2LCAgIDUzLCAgNzc3LCAgNDUzLCAgIDUzLAorICAgICAgNzgxLCAgMjcxLCAgMzc1LCAgMzc2LCAgMzc3LCAgMzc4LCAgMjcxLCAgMjcxLCAgMjcxLCAgMjcxLAorICAgICAgMjcxLCAgMjcxLCAgMjcyLCAgMjczLCAgMjczLCAgMjczLCAgMjczLCAgMjczLCAgMjczLCAgMjczLAorICAgICAgMjc0LCAgNDU5LCAxNzIzLCAxNDA4LCAgMjc1LCAgNDg1LCAgMjc2LCAgIDUxLCAgMzkxLCAgMjc1LAorICAgICAgMjc1LCAgMjc1LCAgMjc1LCAgMjc1LCAgMjc1LCAxNzIzLCAgMzkyLCAgNDUwLCAgNDUxLCAgNDUxLAorICAgICAgNDUxLCAgNDUxLCAgNDUxLCAgNDUxLCAgIDUxLCAgNDg2LCAgNDk1LCAxNzIzLCAgMzkzLCAgNzY1LAorICAgICAxMzE4LCAgMjc2LCAgMzQ0LCAgMzQ0LCAgMzQ0LCAgMzQ0LCAgMzQ0LCAgMzQ0LCAgMzQ0LCAgNDk2LAorICAgICAxNzIzLCAgNDg3LCAxNzIzLCAgMzQ0LCAgMzk0LCAgNzcwLCAxMzIxLCAgIDQ5LCAgMzQ0LCAgMzQ0LAorICAgICAgMzQ0LCAgMzQ0LCAgMzQ0LCAgMzQ0LCAgMzQ1LCAgMzQ2LCAgMzQ2LCAgMzQ2LCAgMzQ2LCAgMzQ2LAorICAgICAgMzQ2LCAgMzYwLCAgNzY4LCAgIDQ5LCAgIDQ5LCAgMzQ3LCAxMzI0LCAxNzIzLCAxNzIzLCAgNTMwLAorICAgICAgMzQ3LCAgMzQ3LCAgMzQ3LCAgMzQ3LCAgMzQ3LCAgMzQ3LCAgMjU3LCAgMzQ4LCAgMzQ4LCAgMzQ4LAogCi0gICAgICA0NTMsICAyNzYsICAyNzYsICAyNzYsICAyNzYsICAyNzYsICAyNzYsICAyNzcsICAyNzgsICAyNzgsCi0gICAgICAyNzgsICAyNzgsICAyNzgsICAyNzgsICAyNzgsICAyNzksICA3ODIsICAgNTMsICA3ODYsICAyODAsCi0gICAgIDEyMjMsICAyODEsICA0NTMsICAzOTYsICAgNTMsICAyODAsICAyODAsICAyODAsICAyODAsICAyODAsCi0gICAgICAyODAsICAzOTcsICA0NDAsICA0NDAsICA0NDAsICA0NDAsICA0NDAsICA0NDAsICA0NDAsICAgNTMsCi0gICAgICA3OTMsICA1NDUsIDEzMjMsICA2MTksICAzOTgsICAgNTUsICA3NzEsICAyODEsICAzNDksICAzNDksCi0gICAgICAzNDksICAzNDksICAzNDksICAzNDksICAzNDksIDE3MjgsICAgNTMsICA0MzUsICA2MTgsICAzNDksCi0gICAgICAzOTksICA0NTMsICAgNTUsICAgNTUsICA3ODQsICAzNDksICAzNDksICAzNDksICAzNDksICAzNDksCi0gICAgICAzNDksICAzNTAsICAzNTEsICAzNTEsICAzNTEsICAzNTEsICAzNTEsICAzNTEsICA2OTAsICAgNTMsCi0gICAgICAgNTUsIDE3MjgsICAzNTIsICA0MzUsICA2MTgsICA4NTQsIDE3MjgsICA2OTEsICAzNTIsICAzNTIsCi0gICAgICAzNTIsICAzNTIsICAzNTIsICAzNTIsICAyNjIsICAzNTMsICAzNTMsICAzNTMsICAzNTMsICAzNTMsCisgICAgICAzNDgsICAzNDgsICAzNDgsICAzNDgsICAzNDksICAzNDksICAzNDksICAzNDksICAzNDksICAzNDksCisgICAgICAzNDksICAyNzIsICA3NzIsIDE3MjMsICAgNDksICAzNDksICAgNDksICA3ODgsIDEzMjcsIDE3MjMsCisgICAgICAzNDksICAzNDksICAzNDksICAzNDksICAzNDksICAzNDksICAzNTEsICAzNTIsICAzNTIsICAzNTIsCisgICAgICAzNTIsICAzNTIsICAzNTIsICAzNTIsICA0NjMsICA3OTQsIDEzMzAsIDE0MDgsICAzNTMsICA0NDgsCisgICAgICA0NDgsICA2MTMsICA0NjUsICAzNTMsICAzNTMsICAzNTMsICAzNTMsICAzNTMsICAzNTMsICAzNTYsCisgICAgICAzNTMsICAzNTMsICAzNTMsICAzNTMsICAzNTMsICAzNTMsICAzNTMsICAzNjAsICAzNjEsICAzNjEsCisgICAgICAzNjEsICAzNjEsICAzNjEsICAzNjEsICAzNjEsICAzNjIsICA2MTMsIDEyMTgsICA0NDgsICAzNjMsCisgICAgICAgNDksICAzNjQsICAgNTEsICA1NDAsICAzNjMsICAzNjMsICAzNjMsICAzNjMsICAzNjMsICAzNjMsCisgICAgICA1MTksICA1MTksICA1MTksICA1MTksICA1MTksICA1MTksICA1MTksICA1NDEsICA3NzQsICAgNTEsCisgICAgIDEzMTgsICA0NDgsICA3NzEsICA1NDAsICA2MTQsICAgNDksICAzNjQsICAyNzIsICAzNjgsICAzNjgsCiAKLSAgICAgIDM1MywgIDM1MywgIDM1NCwgIDM1NCwgIDM1NCwgIDM1NCwgIDM1NCwgIDM1NCwgIDM1NCwgIDc2OSwKLSAgICAgMTcyOCwgIDg1NCwgMTcyOCwgIDM1NCwgMTMyNiwgIDQ1MywgMTMyOSwgICA1NSwgICA1MywgIDM1NCwKLSAgICAgIDM1NCwgIDM1NCwgIDM1NCwgIDM1NCwgIDM1NCwgIDM1NiwgIDM1NywgIDM1NywgIDM1NywgIDM1NywKLSAgICAgIDM1NywgIDM1NywgIDM1NywgIDU0MCwgIDU0OSwgICA1NSwgMTcyOCwgIDM1OCwgIDQ1MywgMTMzMiwKLSAgICAgIDg3MiwgIDcxNiwgIDcxOSwgIDM1OCwgIDM1OCwgIDM1OCwgIDM1OCwgIDM1OCwgIDM1OCwgIDM2MSwKLSAgICAgIDM1OCwgIDM1OCwgIDM1OCwgIDM1OCwgIDM1OCwgIDM1OCwgIDM1OCwgIDM2NSwgIDM2NiwgIDM2NiwKLSAgICAgIDM2NiwgIDM2NiwgIDM2NiwgIDM2NiwgIDM2NiwgIDM2NywgIDY2NCwgIDQ1MywgMTMzNSwgIDM2OCwKLSAgICAgIDQ1MywgIDM2OSwgMTI4NywgMTI4OSwgIDY2NiwgIDM2OCwgIDM2OCwgIDM2OCwgIDM2OCwgIDM2OCwKLSAgICAgIDM2OCwgIDQ1NSwgIDQ1NiwgIDQ1NiwgIDQ1NiwgIDQ1NiwgIDQ1NiwgIDQ1NiwgIDUyNCwgIDUyNCwKLSAgICAgIDUyNCwgIDUyNCwgIDUyNCwgIDUyNCwgIDUyNCwgIDY1OCwgIDc3OCwgIDM2OSwgIDI3NywgIDM3MywKKyAgICAgIDM2OCwgIDM2OCwgIDM2OCwgIDM2OCwgIDM2OCwgIDI3NCwgICA0OSwgMTcyMywgIDQzMCwgIDM2OSwKKyAgICAgMTMyMSwgICA1MSwgIDU0MSwgIDc3NSwgIDM2OSwgIDM2OSwgIDM2OSwgIDM2OSwgIDM2OSwgIDM2OSwKKyAgICAgIDM3MCwgIDM3MSwgIDM3MSwgIDM3MSwgIDM3MSwgIDM3MSwgIDM3MSwgICA0OSwgICA1MSwgIDg3MSwKKyAgICAgIDg0OSwgIDM3MiwgMTcyMywgIDQzMCwgIDU3MSwgIDc2NiwgIDM3MiwgIDM3MiwgIDM3MiwgIDM3MiwKKyAgICAgIDM3MiwgIDM3MiwgIDQxNiwgIDU3MiwgIDQxNywgICA0OSwgIDQxOCwgIDQxOSwgIDU0OSwgIDU1MCwKKyAgICAgIDU1MCwgIDU1MCwgIDU1MCwgIDU1MCwgIDU1MCwgIDg0OSwgIDQyMCwgIDY1MywgIDQyMSwgIDQyMiwKKyAgICAgIDY1MywgIDQyMywgIDQyNSwgIDU3NCwgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNiwKKyAgICAgIDQyNiwgIDY1NCwgIDU3NSwgIDQ0OCwgMTcyMywgIDQyNiwgMTcyMywgMTMyNCwgICA1MSwgIDQ0OCwKKyAgICAgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNiwgIDQyNywgIDQyOCwgIDQyOCwgIDQyOCwKKyAgICAgIDQyOCwgIDQyOCwgIDQyOCwgIDQyOCwgIDc3NywgICA1MSwgIDY1NCwgMTMyNywgIDQyOSwgMTcyMywKIAotICAgICAgMzczLCAgMzczLCAgMzczLCAgMzczLCAgMzczLCAgMzczLCAgMjc5LCAgIDUzLCAxMDY4LCAgNjU5LAotICAgICAgMzc0LCAxMjk1LCAgIDU1LCAgIDU1LCAxMjkzLCAgNzc2LCAgMzc0LCAgMzc0LCAgMzc0LCAgMzc0LAotICAgICAgMzc0LCAgMzc0LCAgMzc1LCAgMzc2LCAgMzc2LCAgMzc2LCAgMzc2LCAgMzc2LCAgMzc2LCAgIDUzLAotICAgICAgIDU1LCAgIDU1LCAgNzgwLCAgMzc3LCAgNjU4LCAgNjU5LCAgODc5LCAgODY2LCAxNDkzLCAgMzc3LAotICAgICAgMzc3LCAgMzc3LCAgMzc3LCAgMzc3LCAgMzc3LCAgNDIxLCAgIDUzLCAgNDIyLCAxNzI4LCAgNDIzLAotICAgICAgNDI0LCAgNTU0LCAgNTU1LCAgNTU1LCAgNTU1LCAgNTU1LCAgNTU1LCAgNTU1LCAgIDU1LCAgNDI1LAotICAgICAgNzg1LCAgNDI2LCAgNDI3LCAgNjYwLCAgNDI4LCAgNDMwLCAgNjYwLCAgNDMxLCAgNDMxLCAgNDMxLAotICAgICAgNDMxLCAgNDMxLCAgNDMxLCAgNDMxLCAxNzI4LCAgIDUzLCAgIDU1LCAgNjYxLCAgNDMxLCAgODczLAotICAgICAxNzI4LCAgIDU1LCAxNDEzLCAgIDU1LCAgNDMxLCAgNDMxLCAgNDMxLCAgNDMxLCAgNDMxLCAgNDMxLAotICAgICAgNDMyLCAgNDMzLCAgNDMzLCAgNDMzLCAgNDMzLCAgNDMzLCAgNDMzLCAgNDMzLCAxNDEzLCAgIDU1LAorICAgICAgNDMwLCAxNzIzLCAgIDQ5LCAgNDI5LCAgNDI5LCAgNDI5LCAgNDI5LCAgNDI5LCAgNDI5LCAgNTUzLAorICAgICAgNTU0LCAgNTU0LCAgNTU0LCAgNTU0LCAgNTU0LCAgNTU0LCAgNjMzLCAgNjM0LCAgNjM0LCAgNjM0LAorICAgICAgNjM0LCAgNjM0LCAgNjM0LCAgNjU1LCAgNzczLCAgNDMwLCAgNDMxLCAgNDI5LCAgNDI5LCAgNDI5LAorICAgICAgNDI5LCAgNDI5LCAgNDI5LCAgNDI5LCAxNzIzLCAgIDQ5LCAgNDQ4LCAgNjU2LCAgNDI5LCAxMzMwLAorICAgICAgIDUxLCAgIDUxLCAgNjU1LCAgNDI5LCAgNDI5LCAgNDI5LCAgNDI5LCAgNDI5LCAgNDI5LCAgNDMzLAorICAgICAgNDM0LCAgNDM0LCAgNDM0LCAgNDM0LCAgNDM0LCAgNDM0LCAxNzIzLCAgIDUxLCAgIDUxLCAxNzIzLAorICAgICAgNDM1LCAgODY4LCAgNjU2LCAgIDUxLCAgNzc5LCAgNDM1LCAgNDM1LCAgNDM1LCAgNDM1LCAgNDM1LAorICAgICAgNDM1LCAgMjYyLCAgNDM2LCAgNDM2LCAgNDM2LCAgNDM2LCAgNDM2LCAgNDM2LCAgNDM2LCAgIDQ5LAorICAgICAgIDUxLCAxNzIzLCAgNDQ4LCAgNDM3LCAxNzIzLCAxNzIzLCAxNzIzLCAgODYxLCAgNDM3LCAgNDM3LAorICAgICAgNDM3LCAgNDM3LCAgNDM3LCAgNDM3LCAgIDQ5LCAgNDM3LCAgNDM3LCAgNDM3LCAgNDM3LCAgNDM3LAogCi0gICAgICA4NzYsICAgNTUsICA0MzQsICA2NjEsICA0MzUsICA0NTMsIDE3MjgsIDEzNDUsICA0MzQsICA0MzQsCi0gICAgICA0MzQsICA0MzQsICA0MzQsICA0MzQsICA1NTgsICA1NTksICA1NTksICA1NTksICA1NTksICA1NTksCi0gICAgICA1NTksICA2MzgsICA2MzksICA2MzksICA2MzksICA2MzksICA2MzksICA2MzksICA3MjksICA3ODMsCi0gICAgICA0MzUsICA0MzYsICA0MzQsICA0MzQsICA0MzQsICA0MzQsICA0MzQsICA0MzQsICA0MzQsICAgNTMsCi0gICAgIDExMTcsIDEzNTAsICA3MzAsICA0MzQsIDEzNTIsICAgNTUsICAgNTUsICAgNTUsICA3MjksICA0MzQsCi0gICAgICA0MzQsICA0MzQsICA0MzQsICA0MzQsICA0MzQsICA0MzgsICA0MzksICA0MzksICA0MzksICA0MzksCi0gICAgICA0MzksICA0MzksIDE3MjgsICAgNTUsICAgNTUsICAgNTUsICA0NDAsICA4NzQsICA3MzAsICAgNTUsCi0gICAgICA4ODMsICAgNTUsICA0NDAsICA0NDAsICA0NDAsICA0NDAsICA0NDAsICA0NDAsICAyNjcsICA0NDEsCi0gICAgICA0NDEsICA0NDEsICA0NDEsICA0NDEsICA0NDEsICA0NDEsIDExMjYsICAgNTUsIDE3MjgsICAgNTUsCi0gICAgICA0NDIsIDE3MjgsICA4ODQsIDE3MjgsIDE3MjgsIDEzNTgsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisgICAgICA0MzcsICA0MzcsICA0NDAsICA0NDEsICA0NDEsICA0NDEsICA0NDEsICA0NDEsICA0NDEsIDE3MjMsCisgICAgIDE3MjMsIDE3MjMsIDE3MjMsICA0NDIsIDEyODIsIDEyODQsICAgNTEsICA3ODAsICA0NDIsICA0NDIsCisgICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDYsICA0NDcsICA0NDcsICA0NDcsICA0NDcsICA0NDcsCisgICAgICA0NDcsICA0NDgsICAgNDksICAgNTEsIDEwNjMsICA0NDksIDEyOTAsIDE3MjMsICA4NjcsICAgNTEsCisgICAgICA0NDksICA0NDksICA0NDksICA0NDksICA0NDksICA0NDksICAzNjAsICA0NTIsICA0NTIsICA0NTIsCisgICAgICA0NTIsICA0NTIsICA0NTIsICA0NTIsICAzNjIsIDEyODgsICAgNTEsIDE0ODgsICA0NTMsICA4NjksCisgICAgICAgNTEsICAgNTEsICAgNTEsICA0NTMsICA0NTMsICA0NTMsICA0NTMsICA0NTMsICA0NTMsICA0NTQsCisgICAgICA0NTUsICA0NTUsICA0NTUsICA0NTUsICA0NTUsICA0NTUsICA0NDgsICAgNTEsICAgNTEsICAgNTEsCisgICAgICA0NTYsICA4ODIsICA4NzQsICAgNTEsICA4NzksICA0NTYsICA0NTYsICA0NTYsICA0NTYsICA0NTYsCisgICAgICA0NTYsICAyNzIsICA0NjEsICA0NjEsICA0NjEsICA0NjEsICA0NjEsICA0NjEsICA0NjEsICAyNzQsCiAKLSAgICAgIDQ0MiwgIDQ0MiwgICA1MywgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0NSwgIDQ0NiwgIDQ0NiwgIDQ0NiwgIDQ0NiwgIDQ0NiwgIDQ0NiwgMTcyOCwgIDcyNCwgMTcyOCwKLSAgICAgMTcyOCwgIDQ0NywgMTM2MCwgICA1NSwgICA1NSwgIDc5NCwgIDg5OSwgIDQ0NywgIDQ0NywgIDQ0NywKLSAgICAgIDQ0NywgIDQ0NywgIDQ0NywgIDQ1MSwgIDQ1MiwgIDQ1MiwgIDQ1MiwgIDQ1MiwgIDQ1MiwgIDQ1MiwKLSAgICAgIDQ1MywgICA1NSwgICA1NSwgICA1NSwgIDQ1NCwgIDg4NywgMTcyOCwgICA1NSwgIDc5NiwgMTEzNywKLSAgICAgIDQ1NCwgIDQ1NCwgIDQ1NCwgIDQ1NCwgIDQ1NCwgIDQ1NCwgIDM2NSwgIDQ1NywgIDQ1NywgIDQ1NywKLSAgICAgIDQ1NywgIDQ1NywgIDQ1NywgIDQ1NywgIDM2NywgICA1NSwgMTcyOCwgIDkzNSwgIDQ1OCwgMTcyOCwKLSAgICAgICA1NSwgICA1NSwgMTcyOCwgMTM2NiwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDQ1OCwKLSAgICAgIDQ1OSwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ2MCwgIDQ1MywgICA1NSwgICA1NSwKLSAgICAgICA1MywgIDQ2MSwgMTcyOCwgIDkzNSwgIDk2MywgMTcyOCwgICA1NSwgIDQ2MSwgIDQ2MSwgIDQ2MSwKKyAgICAgICA1MSwgMTQwOCwgMTcyMywgIDQ2MiwgMTQwOCwgIDQ0OCwgICA1MSwgIDg3OCwgIDQ2MiwgIDQ2MiwKKyAgICAgIDQ2MiwgIDQ2MiwgIDQ2MiwgIDQ2MiwgIDQ2MywgIDQ2NCwgIDQ2NCwgIDQ2NCwgIDQ2NCwgIDQ2NCwKKyAgICAgIDQ2NCwgIDQ2NCwgIDQ2NSwgICA1MSwgMTM0MCwgMTExMiwgIDQ2NiwgMTcyMywgIDQ2NywgIDY4MywKKyAgICAgIDc4MiwgIDQ2NiwgIDQ2NiwgIDQ2NiwgIDQ2NiwgIDQ2NiwgIDQ2NiwgIDU3NywgIDY4NCwgIDU3OCwKKyAgICAgIDY4NSwgIDcyNCwgIDU3OSwgIDU4MCwgICA0OSwgIDcyNCwgIDU4MSwgIDU4MiwgIDc2NCwgIDY4NiwKKyAgICAgIDc3OCwgIDU4MywgIDc4NywgIDQ2NywgIDQ3NywgIDcyNSwgMTM0NSwgICA0OSwgIDQ3OCwgMTcyMywKKyAgICAgICA0OSwgIDQ3OSwgICA0OSwgIDczMywgIDQ4MCwgIDczMywgIDQ4MSwgIDQ4MiwgIDQ4MywgIDQ4NCwKKyAgICAgIDUxNiwgIDUxNiwgIDUxNiwgIDUxNiwgIDUxNiwgIDUxNiwgIDUxNiwgIDczNCwgMTM0NywgMTcyMywKKyAgICAgIDcyNSwgIDUxNiwgIDkzMCwgICA1MSwgMTcyMywgIDc4MywgIDUxNiwgIDUxNiwgIDUxNiwgIDUxNiwKKyAgICAgIDUxNiwgIDUxNiwgIDUxNywgIDUxOCwgIDUxOCwgIDUxOCwgIDUxOCwgIDUxOCwgIDUxOCwgICA0OSwKIAotICAgICAgNDYxLCAgNDYxLCAgNDYxLCAgMjc3LCAgNDY2LCAgNDY2LCAgNDY2LCAgNDY2LCAgNDY2LCAgNDY2LAotICAgICAgNDY2LCAgMjc5LCAxMzY4LCAxMTQ5LCAgIDU1LCAgNDY3LCAgIDUzLCAxMzc0LCAgIDU1LCAgOTY0LAotICAgICAgIDU1LCAgNDY3LCAgNDY3LCAgNDY3LCAgNDY3LCAgNDY3LCAgNDY3LCAgNDY4LCAgNDY5LCAgNDY5LAotICAgICAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDcwLCAgIDU1LCAgOTc1LCAgIDU1LCAgNDcxLAotICAgICAgNzg3LCAgNDcyLCAxMzc2LCAgOTY1LCAgNzg4LCAgNDcxLCAgNDcxLCAgNDcxLCAgNDcxLCAgNDcxLAotICAgICAgNDcxLCAgNTgyLCAgNzM4LCAgNTgzLCAgIDUzLCAgNzg5LCAgNTg0LCAgNTg1LCAgIDUzLCAgNzM4LAotICAgICAgNTg2LCAgNTg3LCAgNzkxLCAgNzMzLCAgNzkyLCAgNTg4LCAgNzM5LCAgNDcyLCAgNDgyLCAgIDUzLAotICAgICAxMTYxLCAgOTAyLCAgNDgzLCAxNzI4LCAgIDUzLCAgNDg0LCAgIDUzLCAgNzQwLCAgNDg1LCAgNzQwLAotICAgICAgNDg2LCAgNDg3LCAgNDg4LCAgNDg5LCAgNTIxLCAgNTIxLCAgNTIxLCAgNTIxLCAgNTIxLCAgNTIxLAotICAgICAgNTIxLCAgNzQxLCAgNzM5LCAxNzI4LCAxMjk1LCAgNTIxLCAgIDU1LCAgIDU1LCAgIDU1LCAxNzI4LAorICAgICAgIDUxLCAxMTIxLCAgNzM0LCAgNTE5LCAxNzIzLCAxNzIzLCAgIDQ5LCAgOTMwLCAgNTE5LCAgNTE5LAorICAgICAgNTE5LCAgNTE5LCAgNTE5LCAgNTE5LCAgNDI3LCAgNTIwLCAgNTIwLCAgNTIwLCAgNTIwLCAgNTIwLAorICAgICAgNTIwLCAgNTIwLCAgNTIxLCAgNTIxLCAgNTIxLCAgNTIxLCAgNTIxLCAgNTIxLCAgNTIxLCAgNTM1LAorICAgICAxNzIzLCAgIDQ5LCAxMDU2LCAgNTIxLCAxNzIzLCAxMzUzLCAgNzg5LCAgNzExLCAgNTIxLCAgNTIxLAorICAgICAgNTIxLCAgNTIxLCAgNTIxLCAgNTIxLCAgNDMyLCAgNTIzLCAgNTIzLCAgNTIzLCAgNTIzLCAgNTIzLAorICAgICAgNTIzLCAgNTIzLCAgNTQ0LCAgIDUxLCAxMzU1LCAxMTMyLCAgNTI0LCAxMDU2LCAgMjYwLCAxNzIzLAorICAgICAgNzE0LCAgNTI0LCAgNTI0LCAgNTI0LCAgNTI0LCAgNTI0LCAgNTI0LCAgNjQxLCAgNjQyLCAgNjQyLAorICAgICAgNjQyLCAgNjQyLCAgNjQyLCAgNjQyLCAgNjQ1LCAgNjQ2LCAgNjQ2LCAgNjQ2LCAgNjQ2LCAgNjQ2LAorICAgICAgNjQ2LCAgIDUxLCAgNzM1LCAgMjYwLCAgNTI0LCAgNTI0LCAgNTI0LCAgNTI0LCAgNTI0LCAgNTI0LAorICAgICAgNTI0LCAxNzIzLCAxMzYxLCAxNzIzLCAxNzIzLCAgNTI0LCAgNzM2LCAgIDUxLCAgIDUxLCAgNzg0LAogCi0gICAgIDE0MjEsICA1MjEsICA1MjEsICA1MjEsICA1MjEsICA1MjEsICA1MjEsICA1MjIsICA1MjMsICA1MjMsCi0gICAgICA1MjMsICA1MjMsICA1MjMsICA1MjMsICAgNTUsICAgNTUsICAgNTUsICA3NDEsICA1MjQsIDE3MjgsCi0gICAgICA5NjcsICA5NjksIDEwNjEsICA4ODAsICA1MjQsICA1MjQsICA1MjQsICA1MjQsICA1MjQsICA1MjQsCi0gICAgICA0MzIsICA1MjUsICA1MjUsICA1MjUsICA1MjUsICA1MjUsICA1MjUsICA1MjUsICA1MjYsICA1MjYsCi0gICAgICA1MjYsICA1MjYsICA1MjYsICA1MjYsICA1MjYsIDEyMjMsIDE0NjgsIDE0NzAsIDEwNjEsICA1MjYsCi0gICAgIDE1MDYsICAgNTUsICAgNTUsICAgNTUsICAgNTUsICA1MjYsICA1MjYsICA1MjYsICA1MjYsICA1MjYsCi0gICAgICA1MjYsICA0MzcsICA1MjgsICA1MjgsICA1MjgsICA1MjgsICA1MjgsICA1MjgsICA1MjgsICAgNTUsCi0gICAgICAgNTUsICAgNTUsICAgNTUsICA1MjksIDE1MTAsICAyNjUsICA5NzAsICA5NzYsICA4ODEsICA1MjksCi0gICAgICA1MjksICA1MjksICA1MjksICA1MjksICA1MjksICA2NDYsICA2NDcsICA2NDcsICA2NDcsICA2NDcsCi0gICAgICA2NDcsICA2NDcsICA2NTAsICA2NTEsICA2NTEsICA2NTEsICA2NTEsICA2NTEsICA2NTEsICAgNTUsCisgICAgICA1MjQsICA1MjQsICA1MjQsICA1MjQsICA1MjQsICA1MjQsICA1MjUsICA1MjUsICA1MjUsICA1MjUsCisgICAgICA1MjUsICA1MjUsICA1MjUsICAgNDksICAgNTEsICA4NjIsIDE3MjMsICA1MjYsIDE3MjMsIDE3MjMsCisgICAgIDEzNjMsICA3MzYsICA1MjYsICA1MjYsICA1MjYsICA1MjYsICA1MjYsICA1MjYsICAgNDksICA1MjYsCisgICAgICA1MjYsICA1MjYsICA1MjYsICA1MjYsICA1MjYsICA1MjYsICAzNjAsICA1MjksICA1MjksICA1MjksCisgICAgICA1MjksICA1MjksICA1MjksICA1MjksICA1MzAsICA3ODYsICA3MzUsIDExNDQsICA1MzEsIDEzNjksCisgICAgICAzNjQsIDEzNzEsIDExNTYsICA1MzEsICA1MzEsICA1MzEsICA1MzEsICA1MzEsICA1MzEsICAgNDksCisgICAgIDE3MjMsICA3NDQsICA3NDUsICA3NDUsICA3NDUsICA3NDUsICA3NDUsICA3NDUsICA3NDcsICA3NDgsCisgICAgICA3NDgsICA3NDgsICA3NDgsICA3NDgsICA3NDgsICAzNjQsICA1MzUsICA1MzYsICA1MzYsICA1MzYsCisgICAgICA1MzYsICA1MzYsICA1MzYsICA1MzYsICA1MzcsIDE3MjMsIDEyOTAsIDE0MTYsICA1MzgsIDEyMTgsCisgICAgICA1MzksIDE0NjMsIDE0NjUsICA1MzgsICA1MzgsICA1MzgsICA1MzgsICA1MzgsICA1MzgsICA3NTEsCiAKLSAgICAgIDg1NSwgIDI2NSwgIDUyOSwgIDUyOSwgIDUyOSwgIDUyOSwgIDUyOSwgIDUyOSwgIDUyOSwgMTcyOCwKLSAgICAgIDc0NCwgMTcyOCwgMTcyOCwgIDUyOSwgIDg1NiwgICA1NSwgMTUxNCwgICA1NSwgIDkwNSwgIDUyOSwKLSAgICAgIDUyOSwgIDUyOSwgIDUyOSwgIDUyOSwgIDUyOSwgIDUzMCwgIDUzMCwgIDUzMCwgIDUzMCwgIDUzMCwKLSAgICAgIDUzMCwgIDUzMCwgMTUxOCwgICA1NSwgIDg2NywgMTcyOCwgIDUzMSwgMTcyOCwgMTcyOCwgMTcyOCwKLSAgICAgIDg1NiwgIDk3OSwgIDUzMSwgIDUzMSwgIDUzMSwgIDUzMSwgIDUzMSwgIDUzMSwgICA1MywgIDUzMSwKLSAgICAgIDUzMSwgIDUzMSwgIDUzMSwgIDUzMSwgIDUzMSwgIDUzMSwgIDM2NSwgIDUzNCwgIDUzNCwgIDUzNCwKLSAgICAgIDUzNCwgIDUzNCwgIDUzNCwgIDUzNCwgIDUzNSwgMTcyOCwgMTUyMiwgMTU1MSwgIDUzNiwgMTcyOCwKLSAgICAgIDM2OSwgMTU3MywgMTE1NSwgMTE0OSwgIDUzNiwgIDUzNiwgIDUzNiwgIDUzNiwgIDUzNiwgIDUzNiwKLSAgICAgIDc0OSwgIDc1MCwgIDc1MCwgIDc1MCwgIDc1MCwgIDc1MCwgIDc1MCwgIDc1MiwgIDc1MywgIDc1MywKLSAgICAgIDc1MywgIDc1MywgIDc1MywgIDc1MywgICA1NSwgMTcyOCwgIDM2OSwgIDU0MCwgIDU0MSwgIDU0MSwKKyAgICAgIDc1MiwgIDc1MiwgIDc1MiwgIDc1MiwgIDc1MiwgIDc1MiwgIDgxNCwgIDgxNSwgIDgxNSwgIDgxNSwKKyAgICAgIDgxNSwgIDgxNSwgIDgxNSwgIDg1MCwgICA1MSwgIDUzOSwgIDM2MCwgIDU0MiwgIDU0MiwgIDU0MiwKKyAgICAgIDU0MiwgIDU0MiwgIDU0MiwgIDU0MiwgIDUzMCwgMTcyMywgMTUwMSwgIDg1MSwgIDU0MywgMTUwNSwKKyAgICAgMTcyMywgICA1MSwgICA1MSwgIDU0MywgIDU0MywgIDU0MywgIDU0MywgIDU0MywgIDU0MywgIDU0NCwKKyAgICAgIDU0NSwgIDU0NSwgIDU0NSwgIDU0NSwgIDU0NSwgIDU0NSwgIDU0NSwgIDU0NiwgIDg2MywgICA1MSwKKyAgICAgMTcyMywgIDU0NywgIDg1MSwgIDU0OCwgIDk1OCwgMTcyMywgIDU0NywgIDU0NywgIDU0NywgIDU0NywKKyAgICAgIDU0NywgIDU0NywgIDgyMiwgIDgyMywgIDgyMywgIDgyMywgIDgyMywgIDgyMywgIDgyMywgIDgyNiwKKyAgICAgIDgyNywgIDgyNywgIDgyNywgIDgyNywgIDgyNywgIDgyNywgIDg1MCwgICA1MSwgIDU0OCwgIDQ2MywKKyAgICAgIDU1NSwgIDU1NSwgIDU1NSwgIDU1NSwgIDU1NSwgIDU1NSwgIDU1NSwgIDQ2NSwgMTUwOSwgMTcyMywKKyAgICAgMTcyMywgIDU1NiwgMTUxMywgICA1MSwgICA1MSwgIDg1MiwgIDU1NiwgIDU1NiwgIDU1NiwgIDU1NiwKIAotICAgICAgNTQxLCAgNTQxLCAgNTQxLCAgNTQxLCAgNTQxLCAgNTQyLCAgODYxLCAgNDUzLCAxMzMyLCAgNTQzLAotICAgICAgOTMwLCAgNTQ0LCAgIDU1LCAxMDg1LCAgODYzLCAgNTQzLCAgNTQzLCAgNTQzLCAgNTQzLCAgNTQzLAotICAgICAgNTQzLCAgNzU2LCAgNzU3LCAgNzU3LCAgNzU3LCAgNzU3LCAgNzU3LCAgNzU3LCAgODE5LCAgODIwLAotICAgICAgODIwLCAgODIwLCAgODIwLCAgODIwLCAgODIwLCAgODU1LCAgIDU1LCAgNTQ0LCAgMzY1LCAgNTQ3LAotICAgICAgNTQ3LCAgNTQ3LCAgNTQ3LCAgNTQ3LCAgNTQ3LCAgNTQ3LCAgNTM1LCAxMTQ1LCAxMTQzLCAxNzI4LAotICAgICAgNTQ4LCAxNzI4LCAxMTM3LCAxNzI4LCAgIDU1LCAgIDU1LCAgNTQ4LCAgNTQ4LCAgNTQ4LCAgNTQ4LAotICAgICAgNTQ4LCAgNTQ4LCAgNTQ5LCAgNTUwLCAgNTUwLCAgNTUwLCAgNTUwLCAgNTUwLCAgNTUwLCAgNTUwLAotICAgICAgNTUxLCAgODY4LCAgNDUzLCAgIDU1LCAgNTUyLCAxNzI4LCAgNTUzLCAxNzI4LCAgOTgyLCAxNzI4LAotICAgICAgNTUyLCAgNTUyLCAgNTUyLCAgNTUyLCAgNTUyLCAgNTUyLCAgODI3LCAgODI4LCAgODI4LCAgODI4LAotICAgICAgODI4LCAgODI4LCAgODI4LCAgODMxLCAgODMyLCAgODMyLCAgODMyLCAgODMyLCAgODMyLCAgODMyLAorICAgICAgNTU2LCAgNTU2LCAgNTU3LCAgNTU4LCAgNTU4LCAgNTU4LCAgNTU4LCAgNTU4LCAgNTU4LCAgODUzLAorICAgICAgIDUxLCAgODY0LCAxNTE3LCAgNTU5LCAxNzIzLCAxNzIzLCAgIDUxLCAgNzkxLCAgNTU5LCAgNTU5LAorICAgICAgNTU5LCAgNTU5LCAgNTU5LCAgNTU5LCAgNjA4LCAgODUyLCAgNjA5LCAgNjA5LCAgNjA5LCAgNjA5LAorICAgICAgNjA5LCAgNjA5LCAgNjA5LCAgIDUxLCAgODUzLCAxNTQ2LCAxNzIzLCAgNjA5LCAxNTY4LCAxNzIzLAorICAgICAgIDUxLCAgIDUxLCAgNjA5LCAgNjA5LCAgNjA5LCAgNjA5LCAgNjA5LCAgNjA5LCAgNjEwLCAgNjExLAorICAgICAgNjExLCAgNjExLCAgNjExLCAgNjExLCAgNjExLCAgNjExLCAxMTQ0LCAgIDUxLCAgIDUxLCAxMDg2LAorICAgICAgNjEyLCAxNzIzLCAgNjEzLCAgOTU5LCAxNzIzLCAgNjEyLCAgNjEyLCAgNjEyLCAgNjEyLCAgNjEyLAorICAgICAgNjEyLCAgODM0LCAgODM1LCAgODM1LCAgODM1LCAgODM1LCAgODM1LCAgODM1LCAgODM3LCAgODM4LAorICAgICAgODM4LCAgODM4LCAgODM4LCAgODM4LCAgODM4LCAgIDUxLCAgIDUxLCAgNjEzLCAgNjEwLCAgNjEyLAorICAgICAgNjEyLCAgNjEyLCAgNjEyLCAgNjEyLCAgNjEyLCAgNjEyLCAgNjU5LCAgNDQ4LCAxMzI3LCAxMTM3LAogCi0gICAgICA4NTcsICAgNTUsICA1NTMsICA0NjgsICA1NjAsICA1NjAsICA1NjAsICA1NjAsICA1NjAsICA1NjAsCi0gICAgICA1NjAsICA0NzAsIDEzMjksIDE3MjgsICA4NTgsICA1NjEsICA5MTksICAgNTUsIDExMzMsICAgNTUsCi0gICAgICA4NTcsICA1NjEsICA1NjEsICA1NjEsICA1NjEsICA1NjEsICA1NjEsICA1NjIsICA1NjMsICA1NjMsCi0gICAgICA1NjMsICA1NjMsICA1NjMsICA1NjMsIDE3MjgsICAgNTUsICA4NjksIDExMzEsICA1NjQsIDE3MjgsCi0gICAgICA4NTgsICAgNTUsIDEwODcsICAgNTUsICA1NjQsICA1NjQsICA1NjQsICA1NjQsICA1NjQsICA1NjQsCi0gICAgICA2MTMsICA5MTUsICA2MTQsICA2MTQsICA2MTQsICA2MTQsICA2MTQsICA2MTQsICA2MTQsICAgNTUsCi0gICAgIDE3MjgsICAgNTUsIDExMjYsICA2MTQsICA5NzIsICA5MTYsICAgNTUsICAgNTUsICA4ODUsICA2MTQsCi0gICAgICA2MTQsICA2MTQsICA2MTQsICA2MTQsICA2MTQsICA2MTUsICA2MTYsICA2MTYsICA2MTYsICA2MTYsCi0gICAgICA2MTYsICA2MTYsICA2MTYsICA0NTMsICAgNTUsICAgNTUsIDEzMjYsICA2MTcsIDEwNzgsICA2MTgsCi0gICAgICA5MTAsICA5MTYsIDEwODQsICA2MTcsICA2MTcsICA2MTcsICA2MTcsICA2MTcsICA2MTcsICA4MzksCisgICAgICA2MTIsIDE3MjMsICAgNTEsICAgNTEsICA2NjEsICA2MTIsICA2MTIsICA2MTIsICA2MTIsICA2MTIsCisgICAgICA2MTIsICA0MzIsICA2MTUsICA2MTUsICA2MTUsICA2MTUsICA2MTUsICA2MTUsICA2MTUsICA4NjYsCisgICAgICA5MjUsIDExNDAsICA4NzIsICA2MTYsIDExMzcsIDExNDksIDE3MjMsIDE3MjMsICA2MTYsICA2MTYsCisgICAgICA2MTYsICA2MTYsICA2MTYsICA2MTYsICAgNDksICA2MTYsICA2MTYsICA2MTYsICA2MTYsICA2MTYsCisgICAgICA2MTYsICA2MTYsICA2MTcsICA2MTcsICA2MTcsICA2MTcsICA2MTcsICA2MTcsICA2MTcsICA3MTksCisgICAgIDExNDksIDExMzgsIDE3MjMsICA2MTgsIDE3MjMsIDEyODEsIDE3MjMsICA4OTQsICA2MTgsICA2MTgsCisgICAgICA2MTgsICA2MTgsICA2MTgsICA2MTgsICAgNDksICA2MTgsICA2MTgsICA2MTgsICA2MTgsICA2MTgsCisgICAgICA2MTgsICA2MTgsICA2MjEsICA2MjIsICA2MjIsICA2MjIsICA2MjIsICA2MjIsICA2MjIsIDE3MjMsCisgICAgIDEyODEsIDE3MjMsIDE3MjMsICA2MjMsIDExMzIsICA0NDgsICAgNTEsICAgNTEsICA2MjMsICA2MjMsCisgICAgICA2MjMsICA2MjMsICA2MjMsICA2MjMsICAzNjAsICA0NTIsICA0NTIsICA0NTIsICA0NTIsICA0NTIsCiAKLSAgICAgIDg0MCwgIDg0MCwgIDg0MCwgIDg0MCwgIDg0MCwgIDg0MCwgIDg0MiwgIDg0MywgIDg0MywgIDg0MywKLSAgICAgIDg0MywgIDg0MywgIDg0MywgICA1NSwgICA1NSwgIDYxOCwgIDYxNSwgIDYxNywgIDYxNywgIDYxNywKLSAgICAgIDYxNywgIDYxNywgIDYxNywgIDYxNywgMTE0MiwgIDkxMCwgMTEyMiwgMTcyOCwgIDYxNywgMTE1NCwKLSAgICAgMTcyOCwgICA1NSwgICA1NSwgMTEwMSwgIDYxNywgIDYxNywgIDYxNywgIDYxNywgIDYxNywgIDYxNywKLSAgICAgIDQzNywgIDYyMCwgIDYyMCwgIDYyMCwgIDYyMCwgIDYyMCwgIDYyMCwgIDYyMCwgIDg3MSwgIDkxOSwKLSAgICAgMTE0MiwgIDg3NywgIDYyMSwgMTcyOCwgMTcyOCwgMTE1NCwgMTcyOCwgMTEwNCwgIDYyMSwgIDYyMSwKLSAgICAgIDYyMSwgIDYyMSwgIDYyMSwgIDYyMSwgICA1MywgIDYyMSwgIDYyMSwgIDYyMSwgIDYyMSwgIDYyMSwKLSAgICAgIDYyMSwgIDYyMSwgIDYyMiwgIDYyMiwgIDYyMiwgIDYyMiwgIDYyMiwgIDYyMiwgIDYyMiwgIDkzMCwKLSAgICAgMTcyOCwgMTExNywgIDQ1MywgIDYyMywgMTI4NiwgMTcyOCwgMTcyOCwgMTEwNywgMTMyMywgIDYyMywKLSAgICAgIDYyMywgIDYyMywgIDYyMywgIDYyMywgIDYyMywgICA1MywgIDYyMywgIDYyMywgIDYyMywgIDYyMywKKyAgICAgIDQ1MiwgIDQ1MiwgIDUzMCwgICA1MSwgICA1MSwgMTMyNCwgIDQ1MywgMTcyMywgIDk2MCwgIDk2MiwKKyAgICAgIDkxMCwgIDQ1MywgIDQ1MywgIDQ1MywgIDQ1MywgIDQ1MywgIDQ1MywgIDYyNCwgIDYyNSwgIDYyNSwKKyAgICAgIDYyNSwgIDYyNSwgIDYyNSwgIDYyNSwgIDkxMSwgIDkxNCwgMTcyMywgMTEyOCwgIDYyNiwgMTEyNiwKKyAgICAgICA1MSwgICA1MSwgMTEyMSwgIDYyNiwgIDYyNiwgIDYyNiwgIDYyNiwgIDYyNiwgIDYyNiwgIDYzMCwKKyAgICAgIDYzMSwgIDYzMSwgIDYzMSwgIDYzMSwgIDYzMSwgIDYzMSwgIDQ0OCwgICA1MSwgICA1MSwgIDkxMSwKKyAgICAgIDYzMiwgMTcyMywgIDk2NCwgIDk2NSwgICA1MSwgIDYzMiwgIDYzMiwgIDYzMiwgIDYzMiwgIDYzMiwKKyAgICAgIDYzMiwgIDUzNSwgIDYzNSwgIDYzNSwgIDYzNSwgIDYzNSwgIDYzNSwgIDYzNSwgIDYzNSwgIDUzNywKKyAgICAgIDQ0OCwgICA1MSwgMTcyMywgIDYzNiwgIDk2NywgICA1MSwgMTMyMSwgICA1MSwgIDYzNiwgIDYzNiwKKyAgICAgIDYzNiwgIDYzNiwgIDYzNiwgIDYzNiwgIDYzNywgIDYzOCwgIDYzOCwgIDYzOCwgIDYzOCwgIDYzOCwKKyAgICAgIDYzOCwgIDQ0OCwgICA1MSwgIDk3MCwgICA1MSwgIDYzOSwgIDkwNSwgMTcyMywgICA1MSwgIDk3NywKIAotICAgICAgNjIzLCAgNjIzLCAgNjIzLCAgNjI2LCAgNjI3LCAgNjI3LCAgNjI3LCAgNjI3LCAgNjI3LCAgNjI3LAotICAgICAxMjg2LCAxNzI4LCAxNzI4LCAxNzI4LCAgNjI4LCAgNDUzLCAxMjI1LCAgIDU1LCAgIDU1LCAgIDU1LAotICAgICAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgNjI4LCAgMzY1LCAgNDU3LCAgNDU3LCAgNDU3LAotICAgICAgNDU3LCAgNDU3LCAgNDU3LCAgNDU3LCAgNTM1LCAgIDU1LCAgIDU1LCAgIDU1LCAgNDU4LCAxNzI4LAotICAgICAxMDgyLCAxMDg2LCAxMDg5LCAgOTE1LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LCAgNDU4LAotICAgICAgNjI5LCAgNjMwLCAgNjMwLCAgNjMwLCAgNjMwLCAgNjMwLCAgNjMwLCAxNzI4LCAgOTQyLCAxMzQyLAotICAgICAxNzI4LCAgNjMxLCAxMjA2LCAgIDU1LCAgIDU1LCAxMzM1LCAxMTEwLCAgNjMxLCAgNjMxLCAgNjMxLAotICAgICAgNjMxLCAgNjMxLCAgNjMxLCAgNjM1LCAgNjM2LCAgNjM2LCAgNjM2LCAgNjM2LCAgNjM2LCAgNjM2LAotICAgICAgNDUzLCAgIDU1LCAgIDU1LCAxNzI4LCAgNjM3LCAxMDkwLCAxNzI4LCAgIDU1LCAgIDU1LCAxMDg4LAotICAgICAgNjM3LCAgNjM3LCAgNjM3LCAgNjM3LCAgNjM3LCAgNjM3LCAgNTQwLCAgNjQwLCAgNjQwLCAgNjQwLAorICAgICAgNjM5LCAgNjM5LCAgNjM5LCAgNjM5LCAgNjM5LCAgNjM5LCAgNTQ0LCAgNjQ3LCAgNjQ3LCAgNjQ3LAorICAgICAgNjQ3LCAgNjQ3LCAgNjQ3LCAgNjQ3LCAgNTQ2LCAgIDUxLCAxMTE3LCAxMTEyLCAgNjQ4LCAxNzIzLAorICAgICAgIDUxLCAgIDUxLCAgOTcxLCAgNjQ4LCAgNjQ4LCAgNjQ4LCAgNjQ4LCAgNjQ4LCAgNjQ4LCAgNjQ5LAorICAgICAgNjUwLCAgNjUwLCAgNjUwLCAgNjUwLCAgNjUwLCAgNjUwLCAgNDQ4LCAgIDUxLCAgIDUxLCAxNzIzLAorICAgICAgNjUxLCAxMDczLCAxMDc3LCAgIDUxLCAxNzIzLCAgNjUxLCAgNjUxLCAgNjUxLCAgNjUxLCAgNjUxLAorICAgICAgNjUxLCAgNDYzLCAgNjU3LCAgNjU3LCAgNjU3LCAgNjU3LCAgNjU3LCAgNjU3LCAgNjU3LCAgNDY1LAorICAgICAgIDUxLCAxMDgwLCAxMzUyLCAgNjU4LCAxNzIzLCAgNDQ4LCAgIDUxLCAgIDUxLCAgNjU4LCAgNjU4LAorICAgICAgNjU4LCAgNjU4LCAgNjU4LCAgNjU4LCAgNjU5LCAgNjYwLCAgNjYwLCAgNjYwLCAgNjYwLCAgNjYwLAorICAgICAgNjYwLCAgNjYwLCAgNjYxLCAgIDUxLCAgIDUxLCAxMzE4LCAgNjYyLCAxMzUyLCAgNjYzLCAxMDgxLAorICAgICAxMDgyLCAgNjYyLCAgNjYyLCAgNjYyLCAgNjYyLCAgNjYyLCAgNjYyLCAgODQxLCAgODQyLCAgODQyLAogCi0gICAgICA2NDAsICA2NDAsICA2NDAsICA2NDAsICA1NDIsICAgNTUsICAgNTUsIDEwOTEsICA2NDEsIDEzMzIsCi0gICAgICAgNTUsIDEwOTMsICAgNTUsIDEzMjksICA2NDEsICA2NDEsICA2NDEsICA2NDEsICA2NDEsICA2NDEsCi0gICAgICA2NDIsICA2NDMsICA2NDMsICA2NDMsICA2NDMsICA2NDMsICA2NDMsICA0NTMsICAgNTUsIDEzMjYsCi0gICAgICAgNTUsICA2NDQsIDEzMjMsIDEyMDYsICAgNTUsICAgNTUsICAgNTUsICA2NDQsICA2NDQsICA2NDQsCi0gICAgICA2NDQsICA2NDQsICA2NDQsICA1NDksICA2NTIsICA2NTIsICA2NTIsICA2NTIsICA2NTIsICA2NTIsCi0gICAgICA2NTIsICA1NTEsICAgNTUsICAgNTUsICAgNTUsICA2NTMsIDEwNjgsICAgNTUsICAgNTUsICAgNTUsCi0gICAgIDEyOTUsICA2NTMsICA2NTMsICA2NTMsICA2NTMsICA2NTMsICA2NTMsICA2NTQsICA2NTUsICA2NTUsCi0gICAgICA2NTUsICA2NTUsICA2NTUsICA2NTUsICA0NTMsICAgNTUsICAgNTUsICAgNTUsICA2NTYsIDExODcsCi0gICAgIDExOTAsICAgNTUsIDExOTEsICAgNTUsICA2NTYsICA2NTYsICA2NTYsICA2NTYsICA2NTYsICA2NTYsCi0gICAgICA0NjgsICA2NjIsICA2NjIsICA2NjIsICA2NjIsICA2NjIsICA2NjIsICA2NjIsICA0NzAsICAgNTUsCisgICAgICA4NDIsICA4NDIsICA4NDIsICA4NDIsICA3NDUsICA3NDUsICA3NDUsICA3NDUsICA3NDUsICA3NDUsCisgICAgICA3NDUsICAgNTEsICAgNTEsICA2NjMsICA2OTksICA2OTksICA2OTksICA2OTksICA2OTksICA2OTksCisgICAgICA2OTksIDEzNjAsICA0NDgsIDEzNjgsIDEyMjAsICA2OTksIDE3MjMsICAgNTEsICAgNTEsICAgNTEsCisgICAgICA2OTksICA2OTksICA2OTksICA2OTksICA2OTksICA2OTksICA3MDAsICA3MDAsICA3MDAsICA3MDAsCisgICAgICA3MDAsICA3MDAsICA3MDAsICA4NzMsICAgNTEsICA5NjMsIDEzNjAsICA3MDAsIDEzNjgsIDEwODQsCisgICAgIDE0NjIsIDE3MjMsICA3MDAsICA3MDAsICA3MDAsICA3MDAsICA3MDAsICA3MDAsICA2MTAsICA3MDEsCisgICAgICA3MDEsICA3MDEsICA3MDEsICA3MDEsICA3MDEsICA3MDEsICA3MDIsICA3MDIsICA3MDIsICA3MDIsCisgICAgICA3MDIsICA3MDIsICA3MDIsICA3MjgsIDE1MDQsIDE0NjIsIDE1MDgsICA3MDIsIDE1MTIsICAgNTEsCisgICAgICAgNTEsICA4OTcsICA3MDIsICA3MDIsICA3MDIsICA3MDIsICA3MDIsICA3MDIsICA0MzIsICA3MDQsCisgICAgICA3MDQsICA3MDQsICA3MDQsICA3MDQsICA3MDQsICA3MDQsICAgNTEsICAgNTEsIDEzMzcsIDE1MDQsCiAKLSAgICAgMTA3MCwgICA1NSwgIDY2MywgMTcyOCwgMTcyOCwgICA1NSwgMTE5NCwgIDg2MSwgIDY2MywgIDY2MywKLSAgICAgIDY2MywgIDY2MywgIDY2MywgIDY2MywgIDY2NCwgIDY2NSwgIDY2NSwgIDY2NSwgIDY2NSwgIDY2NSwKLSAgICAgIDY2NSwgIDY2NSwgIDY2NiwgICA1NSwgMTA2NCwgMTE5NSwgIDY2NywgMTA2MiwgIDY2OCwgMTcyOCwKLSAgICAgMTcyOCwgMTE2MywgIDY2NywgIDY2NywgIDY2NywgIDY2NywgIDY2NywgIDY2NywgIDg0NiwgIDg0NywKLSAgICAgIDg0NywgIDg0NywgIDg0NywgIDg0NywgIDg0NywgIDc1MCwgIDc1MCwgIDc1MCwgIDc1MCwgIDc1MCwKLSAgICAgIDc1MCwgIDc1MCwgICA1NSwgICA1NSwgIDY2OCwgIDcwNCwgIDcwNCwgIDcwNCwgIDcwNCwgIDcwNCwKLSAgICAgIDcwNCwgIDcwNCwgMTM1NywgIDQ1MywgMTM2NSwgMTM3MywgIDcwNCwgMTcyOCwgICA1NSwgMTExMCwKLSAgICAgICA1NSwgICA1NSwgIDcwNCwgIDcwNCwgIDcwNCwgIDcwNCwgIDcwNCwgIDcwNCwgIDcwNSwgIDcwNSwKLSAgICAgIDcwNSwgIDcwNSwgIDcwNSwgIDcwNSwgIDcwNSwgIDg3OCwgICA1NSwgIDk2OCwgMTM1NywgIDcwNSwKLSAgICAgMTM2NSwgMTM3MywgMTE5OSwgMTcyOCwgMTE1MSwgIDcwNSwgIDcwNSwgIDcwNSwgIDcwNSwgIDcwNSwKKyAgICAgIDcwNSwgMTUwOCwgMTA4OCwgMTUxMiwgIDk3NCwgIDcwNSwgIDcwNSwgIDcwNSwgIDcwNSwgIDcwNSwKKyAgICAgIDcwNSwgICA0OSwgIDcwNSwgIDcwNSwgIDcwNSwgIDcwNSwgIDcwNSwgIDcwNSwgIDcwNSwgIDcwNiwKKyAgICAgIDcwNiwgIDcwNiwgIDcwNiwgIDcwNiwgIDcwNiwgIDcwNiwgIDczOSwgMTIwMSwgMTMzMCwgMTMyNywKKyAgICAgIDcwNywgMTMyNCwgMTMyMSwgMTMxOCwgIDkwMCwgIDcwNywgIDcwNywgIDcwNywgIDcwNywgIDcwNywKKyAgICAgIDcwNywgICA0OSwgIDcwNywgIDcwNywgIDcwNywgIDcwNywgIDcwNywgIDcwNywgIDcwNywgIDUzNSwKKyAgICAgIDcxMCwgIDcxMCwgIDcxMCwgIDcxMCwgIDcxMCwgIDcxMCwgIDcxMCwgIDcxMSwgICA1MSwgICA1MSwKKyAgICAgICA1MSwgIDcxMiwgICA1MSwgIDUzOSwgICA1MSwgICA1MSwgIDcxMiwgIDcxMiwgIDcxMiwgIDcxMiwKKyAgICAgIDcxMiwgIDcxMiwgIDg1NiwgMTIwMSwgMTA2MywgICA1MSwgICA1MSwgICA1MSwgMTI5MCwgICA1MSwKKyAgICAgIDg1OCwgICA1MSwgICA1MSwgICA1MSwgMTA4NSwgIDg3NSwgIDg3NiwgIDg2NSwgIDUzOSwgIDU0NCwKKyAgICAgIDcxMywgIDcxMywgIDcxMywgIDcxMywgIDcxMywgIDcxMywgIDcxMywgIDcxNCwgIDg3NywgICA1MSwKIAotICAgICAgNzA1LCAgNjE1LCAgNzA2LCAgNzA2LCAgNzA2LCAgNzA2LCAgNzA2LCAgNzA2LCAgNzA2LCAgNzA3LAotICAgICAgNzA3LCAgNzA3LCAgNzA3LCAgNzA3LCAgNzA3LCAgNzA3LCAxMDY4LCAgNDUzLCAxMTA3LCAxNDY3LAotICAgICAgNzA3LCAxNTA5LCAgIDU1LCAgIDU1LCAxMDcwLCAgIDU1LCAgNzA3LCAgNzA3LCAgNzA3LCAgNzA3LAotICAgICAgNzA3LCAgNzA3LCAgNDM3LCAgNzA5LCAgNzA5LCAgNzA5LCAgNzA5LCAgNzA5LCAgNzA5LCAgNzA5LAotICAgICAgIDU1LCAgIDU1LCAxMTk3LCAgIDU1LCAgNzEwLCAxNDY3LCAxMjAwLCAxNTA5LCAxNTEzLCAgOTc4LAotICAgICAgNzEwLCAgNzEwLCAgNzEwLCAgNzEwLCAgNzEwLCAgNzEwLCAgIDUzLCAgNzEwLCAgNzEwLCAgNzEwLAotICAgICAgNzEwLCAgNzEwLCAgNzEwLCAgNzEwLCAgNzExLCAgNzExLCAgNzExLCAgNzExLCAgNzExLCAgNzExLAotICAgICAgNzExLCAxMTE3LCAxMTI2LCAxMTM5LCAxNTEzLCAgNzEyLCAgNDUzLCAxMTA0LCAxMTI4LCAxMzIzLAotICAgICAxMzI2LCAgNzEyLCAgNzEyLCAgNzEyLCAgNzEyLCAgNzEyLCAgNzEyLCAgIDUzLCAgNzEyLCAgNzEyLAotICAgICAgNzEyLCAgNzEyLCAgNzEyLCAgNzEyLCAgNzEyLCAgNTQwLCAgNzE1LCAgNzE1LCAgNzE1LCAgNzE1LAorICAgICAgIDUxLCAgNzE1LCAgIDUxLCAgNTQ4LCAgIDUxLCAgOTA1LCAgNzE1LCAgNzE1LCAgNzE1LCAgNzE1LAorICAgICAgNzE1LCAgNzE1LCAgODcwLCAxMDk2LCAxMDY1LCAgOTE0LCAgIDUxLCAxNTE2LCAgODU2LCAgIDUxLAorICAgICAxMDU5LCAgIDUxLCAgIDUxLCAxMDk5LCAxMDU3LCAgODgwLCAgOTEwLCAgIDUxLCAgNTQ4LCAgNzE5LAorICAgICAgNzIwLCAgNzIwLCAgNzIwLCAgNzIwLCAgNzIwLCAgNzIwLCAgNzIwLCAgNzIxLCAgODgxLCAgIDUxLAorICAgICAxNzIzLCAgNzIyLCAxNTE2LCAgNzIzLCAgIDUxLCAgOTI1LCAgNzIyLCAgNzIyLCAgNzIyLCAgNzIyLAorICAgICAgNzIyLCAgNzIyLCAgODgzLCAxMTAyLCAxNTY3LCAxMTU4LCAgMzM2LCAgODg4LCAgODg4LCAgODg4LAorICAgICAgODg4LCAgODg4LCAgODg4LCAgODg4LCAgOTE5LCAxNzIzLCAgOTE5LCAgIDUxLCAgNzIzLCAgNTM1LAorICAgICAgNzI2LCAgNzI2LCAgNzI2LCAgNzI2LCAgNzI2LCAgNzI2LCAgNzI2LCAgNzExLCAgOTIwLCAxNTY3LAorICAgICAxNzIzLCAgNzI3LCAgNDQ4LCAxNTg3LCAgIDUxLCAxMTA1LCAgNzI3LCAgNzI3LCAgNzI3LCAgNzI3LAorICAgICAgNzI3LCAgNzI3LCAgNzI4LCAgNzI5LCAgNzI5LCAgNzI5LCAgNzI5LCAgNzI5LCAgNzI5LCAgNzI5LAogCi0gICAgICA3MTUsICA3MTUsICA3MTUsICA3MTYsICAgNTUsICAgNTUsICA5MjQsICA3MTcsICAgNTUsICA1NDQsCi0gICAgICAgNTUsICAgNTUsICAgNTUsICA3MTcsICA3MTcsICA3MTcsICA3MTcsICA3MTcsICA3MTcsIDExMzcsCi0gICAgICA5MjUsICA0NTMsICAgNTUsICAgNTUsIDExMDEsIDExMTksICAgNTUsIDEzMjksICAgNTUsICAgNTUsCi0gICAgICAgNTUsICAgNTUsICA5ODAsICAgNTUsICA4NzAsICA1NDQsICA1NDksICA3MTgsICA3MTgsICA3MTgsCi0gICAgICA3MTgsICA3MTgsICA3MTgsICA3MTgsICA3MTksICA4ODIsICA5MjUsICA4ODYsICA3MjAsICAgNTUsCi0gICAgICA1NTMsICAgNTUsIDExNDksIDEyOTgsICA3MjAsICA3MjAsICA3MjAsICA3MjAsICA3MjAsICA3MjAsCi0gICAgIDEzMzIsICA4NzUsICA0NTMsIDEyMjUsICA4ODgsICA4OTMsICA4OTMsICA4OTMsICA4OTMsICA4OTMsCi0gICAgICA4OTMsICA4OTMsICAgNTUsICA5MjQsICA5MjYsIDE1MTcsICA1NTMsICA3MjQsICA3MjUsICA3MjUsCi0gICAgICA3MjUsICA3MjUsICA3MjUsICA3MjUsICA3MjUsICA3MjYsICAgNTUsIDE3MjgsICA5MjcsICA3MjcsCi0gICAgICAgNTUsICA3MjgsICA5MjYsICA5MzYsICA5MzYsICA3MjcsICA3MjcsICA3MjcsICA3MjcsICA3MjcsCisgICAgICA3MzAsICA5NjksICA5MjEsICA5MjAsICA3MzEsIDE3MjMsICA3MzIsICA5MjEsIDE1ODcsICA3MzEsCisgICAgICA3MzEsICA3MzEsICA3MzEsICA3MzEsICA3MzEsIDExNDYsICA5MjIsIDE1ODgsICA0NDgsIDExMDIsCisgICAgIDE1ODksIDE3MjMsICA4MzUsICA4MzUsICA4MzUsICA4MzUsICA4MzUsICA4MzUsICA4MzUsICA5MzEsCisgICAgICAgNTEsICA3MzIsICA1NDQsICA3MzcsICA3MzcsICA3MzcsICA3MzcsICA3MzcsICA3MzcsICA3MzcsCisgICAgICA3MTQsICA5MjIsIDE1ODgsICA5MzIsICA3MzgsIDE1ODksIDE3MjMsICAgNTEsIDExMzQsICA3MzgsCisgICAgICA3MzgsICA3MzgsICA3MzgsICA3MzgsICA3MzgsICA3MzksICA3NDAsICA3NDAsICA3NDAsICA3NDAsCisgICAgICA3NDAsICA3NDAsICA3NDAsICA3NDEsICAgNTEsICA5MzEsICA5MzMsICA3NDIsICA5MzIsICA3NDMsCisgICAgICA5MzMsICA0NDgsICA3NDIsICA3NDIsICA3NDIsICA3NDIsICA3NDIsICA3NDIsIDEwOTksIDE3MjMsCisgICAgICA5MzQsICAgNTEsIDExMjMsIDE1OTAsIDE3MjMsICA5NDMsICA5NDQsICA5NDQsICA5NDQsICA5NDQsCisgICAgICA5NDQsICA5NDQsICA5NzIsICAgNTEsICA3NDMsICA2NTksICA3NTMsICA3NTMsICA3NTMsICA3NTMsCiAKLSAgICAgIDcyNywgMTUxNywgIDM0MSwgMTE2MSwgICA1NSwgMTUyMSwgMTcyOCwgIDkzNywgMTcyOCwgICA1NSwKLSAgICAgIDQ1MywgMTMzNSwgMTIwNiwgMTcyOCwgIDkyNywgIDkzOCwgMTExMCwgIDcyOCwgIDU0MCwgIDczMSwKLSAgICAgIDczMSwgIDczMSwgIDczMSwgIDczMSwgIDczMSwgIDczMSwgIDcxNiwgICA1NSwgMTI5OSwgIDkzOSwKLSAgICAgIDczMiwgMTUyMSwgMTcyOCwgIDkzNywgMTcyOCwgICA1NSwgIDczMiwgIDczMiwgIDczMiwgIDczMiwKLSAgICAgIDczMiwgIDczMiwgIDczMywgIDczNCwgIDczNCwgIDczNCwgIDczNCwgIDczNCwgIDczNCwgIDczNCwKLSAgICAgIDczNSwgMTMwMCwgMTEwNywgICA1NSwgIDczNiwgIDkzOSwgIDczNywgMTEwNCwgMTMwNCwgIDkzOCwKLSAgICAgIDczNiwgIDczNiwgIDczNiwgIDczNiwgIDczNiwgIDczNiwgIDg0MCwgIDg0MCwgIDg0MCwgIDg0MCwKLSAgICAgIDg0MCwgIDg0MCwgIDg0MCwgMTcyOCwgIDk0OCwgIDk0OSwgIDk0OSwgIDk0OSwgIDk0OSwgIDk0OSwKLSAgICAgIDk0OSwgMTEwMSwgIDczNywgIDU0OSwgIDc0MiwgIDc0MiwgIDc0MiwgIDc0MiwgIDc0MiwgIDc0MiwKLSAgICAgIDc0MiwgIDcxOSwgMTIyMywgMTIwNiwgMTU3MiwgIDc0MywgMTU5MiwgMTU5MywgICA1NSwgMTcyOCwKKyAgICAgIDc1MywgIDc1MywgIDc1MywgIDY2MSwgMTcyMywgIDkzNCwgIDQ0OCwgIDc1NCwgMTU5MCwgMTcyMywKKyAgICAgICA1MSwgICA1MSwgIDc1NCwgIDc1NCwgIDc1NCwgIDc1NCwgIDc1NCwgIDc1NCwgIDc1NSwgIDc1NiwKKyAgICAgIDc1NiwgIDc1NiwgIDc1NiwgIDc1NiwgIDc1NiwgIDk2MSwgMTA5NiwgMTExNCwgICA1MSwgIDc1NywKKyAgICAgIDQ0OCwgICA1MSwgICA1MSwgICA1MSwgIDc1NywgIDc1NywgIDc1NywgIDc1NywgIDc1NywgIDc1NywKKyAgICAgICA0OSwgICA0OSwgICA0OSwgICA0OSwgICA0OSwgICA0OSwgICA0OSwgIDk3OCwgICA1MSwgICA1MSwKKyAgICAgICA1MSwgICA0OSwgICA1MSwgICA1MSwgICA1MSwgICA1MSwgICA0OSwgICA0OSwgICA0OSwgICA0OSwKKyAgICAgICA0OSwgICA0OSwgIDk0NiwgIDk0NywgIDk0NywgIDk0NywgIDk0NywgIDk0NywgIDk0NywgICA1MSwKKyAgICAgICA1MSwgICA1MSwgICA1MSwgMTA1NywgIDc1OSwgIDc4OSwgMTA1NywgIDc5MCwgIDc5MCwgIDc5MCwKKyAgICAgIDc5MCwgIDc5MCwgIDc5MCwgIDc5MCwgIDk2NiwgIDk2OCwgMTA2OCwgMTA1OCwgIDc5MCwgIDk3NiwKKyAgICAgMTcyMywgICA1MSwgICA1MSwgIDc5MCwgIDc5MCwgIDc5MCwgIDc5MCwgIDc5MCwgIDc5MCwgIDc5MSwKIAotICAgICAxNDEzLCAgNzQzLCAgNzQzLCAgNzQzLCAgNzQzLCAgNzQzLCAgNzQzLCAgNzQ0LCAgNzQ1LCAgNzQ1LAotICAgICAgNzQ1LCAgNzQ1LCAgNzQ1LCAgNzQ1LCAgNzQ1LCAgNzQ2LCAgIDU1LCAxMDcwLCAxMzAxLCAgNzQ3LAotICAgICAxNTcyLCAgNzQ4LCAxNTkyLCAxNTkzLCAgODYzLCAgNzQ3LCAgNzQ3LCAgNzQ3LCAgNzQ3LCAgNzQ3LAotICAgICAgNzQ3LCAgOTUxLCAgOTUyLCAgOTUyLCAgOTUyLCAgOTUyLCAgOTUyLCAgOTUyLCAgOTU1LCAgOTU2LAotICAgICAgOTU2LCAgOTU2LCAgOTU2LCAgOTU2LCAgOTU2LCAgIDU1LCAgIDU1LCAgNzQ4LCAgNjY0LCAgNzU4LAotICAgICAgNzU4LCAgNzU4LCAgNzU4LCAgNzU4LCAgNzU4LCAgNzU4LCAgNjY2LCAxMjkzLCAgOTQyLCAxMTYzLAotICAgICAgNzU5LCAxMTEwLCAxNTk0LCAgIDU1LCAgIDU1LCAxMjk1LCAgNzU5LCAgNzU5LCAgNzU5LCAgNzU5LAotICAgICAgNzU5LCAgNzU5LCAgNzYwLCAgNzYxLCAgNzYxLCAgNzYxLCAgNzYxLCAgNzYxLCAgNzYxLCAgOTY2LAotICAgICAgOTc0LCAgNzQ0LCAgOTM4LCAgNzYyLCAgIDU1LCAgIDU1LCAgIDU1LCAgIDU1LCAxNTk0LCAgNzYyLAotICAgICAgNzYyLCAgNzYyLCAgNzYyLCAgNzYyLCAgNzYyLCAgIDUzLCAgIDUzLCAgIDUzLCAgIDUzLCAgIDUzLAorICAgICAgNzkyLCAgNzkyLCAgNzkyLCAgNzkyLCAgNzkyLCAgNzkyLCAgNzkyLCAxMjIwLCAgIDUxLCAgIDUxLAorICAgICAxMTkwLCAgNzkyLCAxMDU4LCAxMTgyLCAgNDQ4LCAxNzIzLCAgNzkyLCAgNzkyLCAgNzkyLCAgNzkyLAorICAgICAgNzkyLCAgNzkyLCAgNzAxLCAgNzAxLCAgNzAxLCAgNzAxLCAgNzAxLCAgNzAxLCAgNzAxLCAgOTUwLAorICAgICAgOTUxLCAgOTUxLCAgOTUxLCAgOTUxLCAgOTUxLCAgOTUxLCAgIDUxLCAgIDUxLCAgIDUxLCAxMDA1LAorICAgICAxMDA2LCAxMDA2LCAxMDA2LCAxMDA2LCAxMDA2LCAxMDA2LCAxMDEzLCAxMDE0LCAxMDE0LCAxMDE0LAorICAgICAxMDE0LCAxMDE0LCAxMDE0LCAgIDUxLCAgIDUxLCAgIDUxLCAgIDQ5LCAgNzAyLCAgNzAyLCAgNzAyLAorICAgICAgNzAyLCAgNzAyLCAgNzAyLCAgNzAyLCAgOTczLCAxMjAxLCAxMTA1LCAxMTAyLCAgNzAyLCAxMDY5LAorICAgICAxMDcyLCAxNTkxLCAxNjA4LCAgNzAyLCAgNzAyLCAgNzAyLCAgNzAyLCAgNzAyLCAgNzAyLCAgNzkzLAorICAgICAgMzQ4LCAgMzQ4LCAgMzQ4LCAgMzQ4LCAgMzQ4LCAgMzQ4LCAgMzQ4LCAgMjYyLCAgNzk1LCAgNzk1LAorICAgICAgNzk1LCAgNzk1LCAgNzk1LCAgNzk1LCAgNzk1LCAgOTM3LCAxNTkxLCAxNjA4LCAxMDk5LCAgNzk2LAogCi0gICAgICAgNTMsICAgNTMsICAgNTUsICAgNTUsICAgNTUsICAgNTUsICAgNTMsICAgNTUsICAgNTUsIDEwNjIsCi0gICAgICAgNTUsICAgNTUsICAgNTMsICAgNTMsICAgNTMsICAgNTMsICAgNTMsICAgNTMsICA5NzEsICA5NzMsCi0gICAgIDE1OTUsICA5ODMsICA5ODEsIDEwNjMsIDEyOTMsICAgNTUsICAgNTUsIDEwNjIsICAgNTUsICAgNTUsCi0gICAgICA3NjQsICA3OTQsIDE3MjgsICA3OTUsICA3OTUsICA3OTUsICA3OTUsICA3OTUsICA3OTUsICA3OTUsCi0gICAgICA5NzcsIDE3MjgsIDEwNzcsIDEwNzMsICA3OTUsIDExODYsIDE1OTUsICAgNTUsICA5MzYsIDEwNjMsCi0gICAgICA3OTUsICA3OTUsICA3OTUsICA3OTUsICA3OTUsICA3OTUsIDEwMTAsIDEwMTEsIDEwMTEsIDEwMTEsCi0gICAgIDEwMTEsIDEwMTEsIDEwMTEsIDEwNjQsIDEwNjQsICAgNTUsICAgNTUsIDE3MjgsICAgNTMsICA3OTYsCi0gICAgICA3OTcsICA3OTcsICA3OTcsICA3OTcsICA3OTcsICA3OTcsICA3OTcsIDEwNjUsIDE3MjgsICA5MzAsCi0gICAgIDEwNzQsICA3OTcsICAgNTUsICAgNTUsICAgNTUsIDEwNzksIDExNTEsICA3OTcsICA3OTcsICA3OTcsCi0gICAgICA3OTcsICA3OTcsICA3OTcsIDEwMTgsIDEwMTksIDEwMTksIDEwMTksIDEwMTksIDEwMTksIDEwMTksCisgICAgIDE2MTQsIDEwOTYsIDEyMDEsIDExMDUsICA3OTYsICA3OTYsICA3OTYsICA3OTYsICA3OTYsICA3OTYsCisgICAgICAgNDksICA3OTYsICA3OTYsICA3OTYsICA3OTYsICA3OTYsICA3OTYsICA3OTYsICA3OTksICA4MDAsCisgICAgICA4MDAsICA4MDAsICA4MDAsICA4MDAsICA4MDAsIDE2MTQsIDEwNjUsICA4NTgsICA5MzcsICA4MDEsCisgICAgIDExNTgsIDExMDUsICAgNTEsICAgNTEsICA4MDEsICA4MDEsICA4MDEsICA4MDEsICA4MDEsICA4MDEsCisgICAgICA1MzUsICA2MzUsICA2MzUsICA2MzUsICA2MzUsICA2MzUsICA2MzUsICA2MzUsICA3MTEsICAgNTEsCisgICAgICAgNTEsICA3MzksICA2MzYsIDExODUsICAgNTEsIDExODYsIDEwNTksICA2MzYsICA2MzYsICA2MzYsCisgICAgICA2MzYsICA2MzYsICA2MzYsICA4MDIsICA4MDMsICA4MDMsICA4MDMsICA4MDMsICA4MDMsICA4MDMsCisgICAgIDEwNjAsICAgNTEsICA5MzMsICA5MzEsICA4MDQsICA5MjUsIDExODksICAgNTEsIDExNDYsICA4MDQsCisgICAgICA4MDQsICA4MDQsICA4MDQsICA4MDQsICA4MDQsICA1NDQsICA2NDcsICA2NDcsICA2NDcsICA2NDcsCisgICAgICA2NDcsICA2NDcsICA2NDcsICA3MTQsICAgNTEsIDEwNjAsIDExMDIsICA2NDgsICA3MjgsICAgNTEsCiAKLSAgICAgICA1NSwgICA1NSwgMTA4MCwgMTA2NSwgMTcyOCwgICA1MywgIDcwNiwgIDcwNiwgIDcwNiwgIDcwNiwKLSAgICAgIDcwNiwgIDcwNiwgIDcwNiwgMTAyMiwgMTAyMywgMTAyMywgMTAyMywgMTAyMywgMTAyMywgMTAyMywKLSAgICAgMTAzMCwgMTAzMSwgMTAzMSwgMTAzMSwgMTAzMSwgMTAzMSwgMTAzMSwgMTAzMywgMTAzNCwgMTAzNCwKLSAgICAgMTAzNCwgMTAzNCwgMTAzNCwgMTAzNCwgMTAzNywgMTAzOCwgMTAzOCwgMTAzOCwgMTAzOCwgMTAzOCwKLSAgICAgMTAzOCwgICA1MywgIDcwNywgIDcwNywgIDcwNywgIDcwNywgIDcwNywgIDcwNywgIDcwNywgMTEwNywKLSAgICAgIDczMywgIDkyNiwgIDkyNCwgIDcwNywgIDkxOSwgMTU5NiwgMTYxMywgMTYxOSwgMTEzOSwgIDcwNywKLSAgICAgIDcwNywgIDcwNywgIDcwNywgIDcwNywgIDcwNywgIDc5OCwgIDM1MywgIDM1MywgIDM1MywgIDM1MywKLSAgICAgIDM1MywgIDM1MywgIDM1MywgIDI2NywgIDgwMCwgIDgwMCwgIDgwMCwgIDgwMCwgIDgwMCwgIDgwMCwKLSAgICAgIDgwMCwgMTU5NiwgMTYxMywgMTYxOSwgMTEwNCwgIDgwMSwgIDcyNCwgIDkxNSwgIDkxMCwgMTEyOCwKLSAgICAgMTEwMSwgIDgwMSwgIDgwMSwgIDgwMSwgIDgwMSwgIDgwMSwgIDgwMSwgICA1MywgIDgwMSwgIDgwMSwKKyAgICAgMTE5NCwgMTA1OSwgIDY0OCwgIDY0OCwgIDY0OCwgIDY0OCwgIDY0OCwgIDY0OCwgIDgwNSwgIDgwNiwKKyAgICAgIDgwNiwgIDgwNiwgIDgwNiwgIDgwNiwgIDgwNiwgMTcyMywgICA1MSwgMTE5MiwgIDkyMSwgIDgwNywKKyAgICAgIDkxOSwgICA1MSwgICA1MSwgIDkxNCwgIDgwNywgIDgwNywgIDgwNywgIDgwNywgIDgwNywgIDgwNywKKyAgICAgIDgxMSwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDQ0OCwgICA1MSwgICA1MSwKKyAgICAgMTcyMywgIDgxMywgMTE5NSwgMTEzNCwgICA1MSwgMTA5OSwgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDcxOSwgIDgxNiwgIDgxNiwgIDgxNiwgIDgxNiwgIDgxNiwgIDgxNiwgIDgxNiwKKyAgICAgIDcyMSwgICA1MSwgMTI5MywgIDcxOSwgIDgxNywgIDkxMCwgICA1MSwgICA1MSwgIDkwNSwgIDgxNywKKyAgICAgIDgxNywgIDgxNywgIDgxNywgIDgxNywgIDgxNywgIDgxOCwgIDgxOSwgIDgxOSwgIDgxOSwgIDgxOSwKKyAgICAgIDgxOSwgIDgxOSwgIDQ0OCwgICA1MSwgICA1MSwgMTI5NCwgIDgyMCwgMTEyMywgMTA5NiwgICA1MSwKKyAgICAgMTExNCwgIDgyMCwgIDgyMCwgIDgyMCwgIDgyMCwgIDgyMCwgIDgyMCwgIDcyOCwgIDgyOCwgIDgyOCwKIAotICAgICAgODAxLCAgODAxLCAgODAxLCAgODAxLCAgODAxLCAgODA0LCAgODA1LCAgODA1LCAgODA1LCAgODA1LAotICAgICAgODA1LCAgODA1LCAxMTE5LCAxMDA2LCAgOTkxLCAxMTEwLCAgODA2LCAxMTA3LCAxMTA0LCAgIDU1LAotICAgICAgIDU1LCAgIDU1LCAgODA2LCAgODA2LCAgODA2LCAgODA2LCAgODA2LCAgODA2LCAgNTQwLCAgNjQwLAotICAgICAgNjQwLCAgNjQwLCAgNjQwLCAgNjQwLCAgNjQwLCAgNjQwLCAgNzE2LCAgIDU1LCAgIDU1LCAgIDU1LAotICAgICAgNjQxLCAxMzE1LCAxMTAxLCAxMzE2LCAgIDU1LCAxMTIyLCAgNjQxLCAgNjQxLCAgNjQxLCAgNjQxLAotICAgICAgNjQxLCAgNjQxLCAgODA3LCAgODA4LCAgODA4LCAgODA4LCAgODA4LCAgODA4LCAgODA4LCAxMTIzLAotICAgICAxMzAyLCAxMDk5LCAgIDU1LCAgODA5LCAgOTkxLCAgODYxLCAgIDU1LCAxMDcwLCAgIDU1LCAgODA5LAotICAgICAgODA5LCAgODA5LCAgODA5LCAgODA5LCAgODA5LCAgNTQ5LCAgNjUyLCAgNjUyLCAgNjUyLCAgNjUyLAotICAgICAgNjUyLCAgNjUyLCAgNjUyLCAgNzE5LCAgIDU1LCAxMTIzLCAgIDU1LCAgNjUzLCAgODYzLCAgIDU1LAotICAgICAgIDU1LCAgIDU1LCAxMTIyLCAgNjUzLCAgNjUzLCAgNjUzLCAgNjUzLCAgNjUzLCAgNjUzLCAgODEwLAorICAgICAgODI4LCAgODI4LCAgODI4LCAgODI4LCAgODI4LCAgNzMwLCAgIDUxLCAxMjk1LCAxMjk2LCAgODI5LAorICAgICAxMDAxLCAgIDUxLCAgIDUxLCAgIDUxLCAgODI5LCAgODI5LCAgODI5LCAgODI5LCAgODI5LCAgODI5LAorICAgICAgODMwLCAgODMxLCAgODMxLCAgODMxLCAgODMxLCAgODMxLCAgODMxLCAgNDQ4LCAgIDUxLCAgIDUxLAorICAgICAgIDUxLCAgODMyLCAgOTg2LCAxMjk5LCAxMTA1LCAgIDUxLCAgODMyLCAgODMyLCAgODMyLCAgODMyLAorICAgICAgODMyLCAgODMyLCAgNzM5LCAgODQzLCAgODQzLCAgODQzLCAgODQzLCAgODQzLCAgODQzLCAgODQzLAorICAgICAgNzQxLCAxMjk3LCAgIDUxLCAxMTAyLCAgODQ0LCAxMDk5LCAxMzEwLCAgIDUxLCAgIDUxLCAgODQ0LAorICAgICAgODQ0LCAgODQ0LCAgODQ0LCAgODQ0LCAgODQ0LCAgODQ1LCAgODQ2LCAgODQ2LCAgODQ2LCAgODQ2LAorICAgICAgODQ2LCAgODQ2LCAgNDQ4LCAxMDk2LCAgIDUxLCAgIDUxLCAgODQ3LCAxMDk0LCAgOTg2LCAxMzExLAorICAgICAgIDUxLCAgODQ3LCAgODQ3LCAgODQ3LCAgODQ3LCAgODQ3LCAgODQ3LCAgNjU5LCAgODU0LCAgODU0LAorICAgICAgODU0LCAgODU0LCAgODU0LCAgODU0LCAgODU0LCAgNjYxLCAgODU2LCAgIDUxLCAxMDY1LCAgODU1LAogCi0gICAgICA4MTEsICA4MTEsICA4MTEsICA4MTEsICA4MTEsICA4MTEsIDE3MjgsICAgNTUsICAgNTUsICAgNTUsCi0gICAgICA4MTIsICA2NjQsICAgNTUsIDEzOTUsIDE0MDQsIDEzMDYsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCi0gICAgICA4MTIsICA4MTIsICA4MTYsICA4MTcsICA4MTcsICA4MTcsICA4MTcsICA4MTcsICA4MTcsICA0NTMsCi0gICAgICAgNTUsICA4NTcsIDE3MjgsICA4MTgsICA4NTUsICA5NDQsICA5MDUsICAgNTUsICAgNTUsICA4MTgsCi0gICAgICA4MTgsICA4MTgsICA4MTgsICA4MTgsICA4MTgsICA3MjQsICA4MjEsICA4MjEsICA4MjEsICA4MjEsCi0gICAgICA4MjEsICA4MjEsICA4MjEsICA3MjYsIDE0MDEsICAgNTUsICAgNTUsICA4MjIsICA5MzIsICA5MDIsCi0gICAgICAgNTUsICAgNTUsICA5MjEsICA4MjIsICA4MjIsICA4MjIsICA4MjIsICA4MjIsICA4MjIsICA4MjMsCi0gICAgICA4MjQsICA4MjQsICA4MjQsICA4MjQsICA4MjQsICA4MjQsICA0NTMsIDE0MDksICAgNTUsICAgNTUsCi0gICAgICA4MjUsIDE0NzYsIDE0NzcsICAgNTUsICAgNTUsICAgNTUsICA4MjUsICA4MjUsICA4MjUsICA4MjUsCi0gICAgICA4MjUsICA4MjUsICA3MzMsICA4MzMsICA4MzMsICA4MzMsICA4MzMsICA4MzMsICA4MzMsICA4MzMsCisgICAgICA4NTgsICA2NTksICA4NTIsICAgNTEsICA4NTUsICA4NTUsICA4NTUsICA4NTUsICA4NTUsICA4NTUsCisgICAgICA4NTYsICA4NTcsICA4NTcsICA4NTcsICA4NTcsICA4NTcsICA4NTcsICA4NTcsICA4NTgsICAgNTEsCisgICAgICAgNTEsIDExMTcsICA4NTksICA4NTAsICA4NjAsICA5MzksICA5MDAsICA4NTksICA4NTksICA4NTksCisgICAgICA4NTksICA4NTksICA4NTksIDEwODcsICAgNTEsIDExMTgsICAgNTEsIDEwMTcsIDEwMTgsIDEwMTgsCisgICAgIDEwMTgsIDEwMTgsIDEwMTgsIDEwMTgsICAgNTEsICA5NzUsICA5MjcsICAgNTEsIDExMTcsICA4NjAsCisgICAgICAgNTEsICAgNTEsICA4ODQsICA4ODQsICA4ODQsICA4ODQsICA4ODQsICA4ODQsICA4ODQsIDEwNzksCisgICAgIDExMTgsICAgNTEsIDE3MjMsICA4ODQsICAgNTEsIDEwNzQsICAgNTEsICAgNTEsICA4ODQsICA4ODQsCisgICAgICA4ODQsICA4ODQsICA4ODQsICA4ODQsICA4ODUsICA4ODUsICA4ODUsICA4ODUsICA4ODUsICA4ODUsCisgICAgICA4ODUsIDExODQsIDEwNzUsICAgNTEsICA4OTcsICA4ODUsICAgNTEsIDE3MjMsICAgNTEsICAgNTEsCisgICAgICA4ODUsICA4ODUsICA4ODUsICA4ODUsICA4ODUsICA4ODUsICA4ODYsICA4ODcsICA4ODcsICA4ODcsCiAKLSAgICAgIDczNSwgICA1NSwgICA1NSwgICA1NSwgIDgzNCwgIDg5OSwgMTQ3OSwgIDkxMiwgICA1NSwgMTAwNiwKLSAgICAgIDgzNCwgIDgzNCwgIDgzNCwgIDgzNCwgIDgzNCwgIDgzNCwgIDgzNSwgIDgzNiwgIDgzNiwgIDgzNiwKLSAgICAgIDgzNiwgIDgzNiwgIDgzNiwgIDQ1MywgIDk5MSwgMTQ3OCwgICA1NSwgIDgzNywgIDkwNSwgIDkwMiwKLSAgICAgMTQ4MSwgICA1NSwgICA1NSwgIDgzNywgIDgzNywgIDgzNywgIDgzNywgIDgzNywgIDgzNywgIDc0NCwKLSAgICAgIDg0OCwgIDg0OCwgIDg0OCwgIDg0OCwgIDg0OCwgIDg0OCwgIDg0OCwgIDc0NiwgIDg5OSwgICA1NSwKLSAgICAgICA1NSwgIDg0OSwgIDk5MSwgMTQ4MiwgICA1NSwgICA1NSwgMTQ4MywgIDg0OSwgIDg0OSwgIDg0OSwKLSAgICAgIDg0OSwgIDg0OSwgIDg0OSwgIDg1MCwgIDg1MSwgIDg1MSwgIDg1MSwgIDg1MSwgIDg1MSwgIDg1MSwKLSAgICAgIDQ1MywgIDg2MywgICA1NSwgICA1NSwgIDg1MiwgIDY2NiwgMTQ4NiwgICA1NSwgMTQ4OSwgICA1NSwKLSAgICAgIDg1MiwgIDg1MiwgIDg1MiwgIDg1MiwgIDg1MiwgIDg1MiwgIDY2NCwgIDg1OSwgIDg1OSwgIDg1OSwKLSAgICAgIDg1OSwgIDg1OSwgIDg1OSwgIDg1OSwgIDY2NiwgICA1NSwgIDc0NCwgICA1NSwgIDg2MCwgIDk0NCwKKyAgICAgIDg4NywgIDg4NywgIDg4NywgICA1MSwgIDkxNiwgICA1MSwgICA1MSwgIDg4OCwgIDg5NCwgICA1MSwKKyAgICAgICA1MSwgMTA4MywgIDg4OCwgIDg4OCwgIDg4OCwgIDg4OCwgIDg4OCwgIDg4OCwgIDI2MiwgIDg4OSwKKyAgICAgIDg4OSwgIDg4OSwgIDg4OSwgIDg4OSwgIDg4OSwgIDg4OSwgICA1MSwgICA1MSwgIDkwNywgMTAwMSwKKyAgICAgIDg5MCwgIDk4NiwgMTM5MCwgIDkwMCwgMTMwMSwgIDg5MCwgIDg5MCwgIDg5MCwgIDg5MCwgIDg5MCwKKyAgICAgIDg5MCwgICA0OSwgIDg5MCwgIDg5MCwgIDg5MCwgIDg5MCwgIDg5MCwgIDg5MCwgIDg5MCwgIDcxOSwKKyAgICAgIDg5MywgIDg5MywgIDg5MywgIDg5MywgIDg5MywgIDg5MywgIDg5MywgIDg5NCwgIDg5NywgIDg5NCwKKyAgICAgIDk4NiwgIDg5NSwgIDg1OCwgIDcyMywgIDY2MSwgIDczOSwgIDg5NSwgIDg5NSwgIDg5NSwgIDg5NSwKKyAgICAgIDg5NSwgIDg5NSwgMTAyNSwgMTAyNiwgMTAyNiwgMTAyNiwgMTAyNiwgMTAyNiwgMTAyNiwgMTAyOCwKKyAgICAgMTAyOSwgMTAyOSwgMTAyOSwgMTAyOSwgMTAyOSwgMTAyOSwgIDkzOSwgICA1MSwgIDcyMywgIDcyOCwKKyAgICAgIDg5NiwgIDg5NiwgIDg5NiwgIDg5NiwgIDg5NiwgIDg5NiwgIDg5NiwgIDg5NywgIDkwMCwgIDU0NCwKIAotICAgICAgOTA1LCAgIDU1LCAgNTQ5LCAxNTM2LCAgODYwLCAgODYwLCAgODYwLCAgODYwLCAgODYwLCAgODYwLAotICAgICAgODYxLCAgODYyLCAgODYyLCAgODYyLCAgODYyLCAgODYyLCAgODYyLCAgODYyLCAgODYzLCAgIDU1LAotICAgICAxNTQ2LCAgNzQwLCAgODY0LCAgNzM4LCAgODY1LCAgNzMzLCAgOTMyLCAgOTAyLCAgODY0LCAgODY0LAotICAgICAgODY0LCAgODY0LCAgODY0LCAgODY0LCAxMDQ2LCAxMDQ3LCAxMDQ3LCAxMDQ3LCAxMDQ3LCAxMDQ3LAotICAgICAxMDQ3LCAxMDQ5LCAxMDUwLCAxMDUwLCAxMDUwLCAxMDUwLCAxMDUwLCAxMDUwLCAxMTMxLCAgIDU1LAotICAgICAgODY1LCAgIDU1LCAxMTMxLCAgODg5LCAgODg5LCAgODg5LCAgODg5LCAgODg5LCAgODg5LCAgODg5LAotICAgICAgNTQwLCAgNzI5LCAxMTMyLCAgNzI0LCAgODg5LCAgOTIxLCAxNzI4LCAgIDU1LCAgIDU1LCAgIDU1LAotICAgICAgODg5LCAgODg5LCAgODg5LCAgODg5LCAgODg5LCAgODg5LCAgODkwLCAgODkwLCAgODkwLCAgODkwLAotICAgICAgODkwLCAgODkwLCAgODkwLCAxMDgxLCAgODk5LCAgOTEyLCAgIDU1LCAgODkwLCAxMTMyLCAgIDU1LAotICAgICAgIDU1LCAgIDU1LCAxNzI4LCAgODkwLCAgODkwLCAgODkwLCAgODkwLCAgODkwLCAgODkwLCAgODkxLAorICAgICAgNzM1LCAgODk4LCAgNzMzLCAgNzMyLCAgIDUxLCAgNzI4LCAgODk4LCAgODk4LCAgODk4LCAgODk4LAorICAgICAgODk4LCAgODk4LCAxMDMyLCAxMDMzLCAxMDMzLCAxMDMzLCAxMDMzLCAxMDMzLCAxMDMzLCAxMDQxLAorICAgICAxMDQyLCAxMDQyLCAxMDQyLCAxMDQyLCAxMDQyLCAxMDQyLCAgOTI3LCAgIDUxLCAgNzMyLCAgNzM5LAorICAgICAgODk5LCAgODk5LCAgODk5LCAgODk5LCAgODk5LCAgODk5LCAgODk5LCAgOTAwLCAgODk3LCAgNTM1LAorICAgICAgNzI0LCAgOTAxLCAgNzE5LCAgNzQzLCAgIDUxLCAgOTE2LCAgOTAxLCAgOTAxLCAgOTAxLCAgOTAxLAorICAgICAgOTAxLCAgOTAxLCAxMDQ0LCAxMDQ1LCAxMDQ1LCAxMDQ1LCAxMDQ1LCAxMDQ1LCAxMDQ1LCAxMDQ4LAorICAgICAxMDQ5LCAxMDQ5LCAxMDQ5LCAxMDQ5LCAxMDQ5LCAxMDQ5LCAxMTI2LCAgIDUxLCAgNzQzLCAgOTA1LAorICAgICAgOTA2LCAgOTA2LCAgOTA2LCAgOTA2LCAgOTA2LCAgOTA2LCAgOTA2LCAgOTA3LCAgODk0LCAgOTA3LAorICAgICAxMTI3LCAgOTA4LCAgOTA0LCAgOTA5LCAgIDUxLCAgIDUxLCAgOTA4LCAgOTA4LCAgOTA4LCAgOTA4LAorICAgICAgOTA4LCAgOTA4LCAgOTQ0LCAgOTQ0LCAgOTQ0LCAgOTQ0LCAgOTQ0LCAgOTQ0LCAgOTQ0LCAxMDcwLAogCi0gICAgICA4OTIsICA4OTIsICA4OTIsICA4OTIsICA4OTIsICA4OTIsIDExODksICAgNTUsICAgNTUsICAgNTUsCi0gICAgICA4OTMsIDE1NDksICAgNTUsICAgNTUsICAgNTUsICAgNTUsICA4OTMsICA4OTMsICA4OTMsICA4OTMsCi0gICAgICA4OTMsICA4OTMsICAyNjcsICA4OTQsICA4OTQsICA4OTQsICA4OTQsICA4OTQsICA4OTQsICA4OTQsCi0gICAgICAgNTUsICAgNTUsICAgNTUsICAgNTUsICA4OTUsICA5MDksIDE1NzcsIDE1ODQsICA4MTUsIDEzOTYsCi0gICAgICA4OTUsICA4OTUsICA4OTUsICA4OTUsICA4OTUsICA4OTUsICAgNTMsICA4OTUsICA4OTUsICA4OTUsCi0gICAgICA4OTUsICA4OTUsICA4OTUsICA4OTUsICA3MjQsICA4OTgsICA4OTgsICA4OTgsICA4OTgsICA4OTgsCi0gICAgICA4OTgsICA4OTgsICA4OTksICA4MDMsICA5MDUsICA5MDIsICA5MDAsICA4OTksICA3MjgsICA4OTcsCi0gICAgICA4MDMsICA2NjQsICA5MDAsICA5MDAsICA5MDAsICA5MDAsICA5MDAsICA5MDAsIDEwNTMsIDEwNTQsCi0gICAgIDEwNTQsIDEwNTQsIDEwNTQsIDEwNTQsIDEwNTQsICA5NDksICA5NDksICA5NDksICA5NDksICA5NDksCi0gICAgICA5NDksICA5NDksICAgNTUsICAgNTUsICA3MjgsICA3MzMsICA5MDEsICA5MDEsICA5MDEsICA5MDEsCisgICAgIDEwNzEsICA4MTAsICAgNTEsICA3OTgsICA5MDAsIDExMjcsIDExMjYsICAgNTEsICA5MDksICA3MTksCisgICAgICA5MTIsICA5MTIsICA5MTIsICA5MTIsICA5MTIsICA5MTIsICA5MTIsICA4OTQsIDEwNzYsICA4OTcsCisgICAgIDE3MjMsICA5MTMsICA4OTQsICA4OTIsICAgNTEsICAgNTEsICA5MTMsICA5MTMsICA5MTMsICA5MTMsCisgICAgICA5MTMsICA5MTMsICA5MTQsICA5MTUsICA5MTUsICA5MTUsICA5MTUsICA5MTUsICA5MTUsICA5MTUsCisgICAgICA5MTYsIDEwNzgsICAgNTEsIDExMjgsICA5MTcsIDE3MjMsICA5MTgsIDExMjgsIDEwNjMsICA5MTcsCisgICAgICA5MTcsICA5MTcsICA5MTcsICA5MTcsICA5MTcsICA3OTgsIDEwNjUsIDExMjksICA2NTksIDEwODksCisgICAgICA4NTgsIDE3MjMsIDEwMjYsIDEwMjYsIDEwMjYsIDEwMjYsIDEwMjYsIDEwMjYsIDEwMjYsIDExMzgsCisgICAgICA2NjEsICA5MTgsICA3MjgsICA5MjMsICA5MjMsICA5MjMsICA5MjMsICA5MjMsICA5MjMsICA5MjMsCisgICAgICA4OTcsICA0NjMsIDExMjksIDExMzksICA5MjQsICA2NTUsIDE3MjMsICAgNTEsICA2NTMsICA5MjQsCisgICAgICA5MjQsICA5MjQsICA5MjQsICA5MjQsICA5MjQsICA5MjUsICA5MjYsICA5MjYsICA5MjYsICA5MjYsCiAKLSAgICAgIDkwMSwgIDkwMSwgIDkwMSwgIDkwMiwgICA1NSwgICA1NSwgMTEzMywgIDkwMywgIDg2MywgIDczNywKLSAgICAgICA1NSwgICA1NSwgICA1NSwgIDkwMywgIDkwMywgIDkwMywgIDkwMywgIDkwMywgIDkwMywgIDY2NiwKLSAgICAgMTEzNCwgIDQ2OCwgICA1NSwgICA1NSwgIDY2MCwgMTA3NSwgMTA3NiwgICA1NSwgMTA4MywgICA1NSwKLSAgICAgICA1NSwgICA1NSwgIDY1OCwgMTE4MiwgMTE4MywgIDczNywgIDc0NCwgIDkwNCwgIDkwNCwgIDkwNCwKLSAgICAgIDkwNCwgIDkwNCwgIDkwNCwgIDkwNCwgIDkwNSwgICA1NSwgMTEzNCwgICA1NSwgIDkwNiwgICA1NSwKLSAgICAgIDc0OCwgMTUzNywgMTEzMywgIDc0NiwgIDkwNiwgIDkwNiwgIDkwNiwgIDkwNiwgIDkwNiwgIDkwNiwKLSAgICAgMTA5MiwgMTE0MywgMTA5NCwgMTE4NSwgIDcxOSwgIDczNSwgMTcyOCwgMTAzMSwgMTAzMSwgMTAzMSwKLSAgICAgMTAzMSwgMTAzMSwgMTAzMSwgMTAzMSwgMTE0MywgMTE0NCwgIDc0OCwgIDkxMCwgIDkxMSwgIDkxMSwKLSAgICAgIDkxMSwgIDkxMSwgIDkxMSwgIDkxMSwgIDkxMSwgIDkxMiwgICA1NSwgICA1NSwgMTcyOCwgIDkxMywKLSAgICAgIDcxNiwgIDkxNCwgMTcyOCwgMTE0NSwgMTE0NSwgIDkxMywgIDkxMywgIDkxMywgIDkxMywgIDkxMywKKyAgICAgIDkyNiwgIDkyNiwgIDkyNiwgIDkyNywgICA1MSwgMTEzOCwgMTE0MCwgIDkyOCwgMTEzOSwgIDkyOSwKKyAgICAgMTE0MCwgIDc0MSwgIDkyOCwgIDkyOCwgIDkyOCwgIDkyOCwgIDkyOCwgIDkyOCwgMTE4MCwgMTcyMywKKyAgICAgMTE0MSwgIDcxNCwgIDczMCwgIDcxMSwgMTcyMywgMTA0MiwgMTA0MiwgMTA0MiwgMTA0MiwgMTA0MiwKKyAgICAgMTA0MiwgMTA0MiwgMTE1MCwgICA1MSwgIDkyOSwgIDczOSwgIDkzNSwgIDkzNSwgIDkzNSwgIDkzNSwKKyAgICAgIDkzNSwgIDkzNSwgIDkzNSwgIDkwMCwgMTcyMywgMTE0MSwgMTE1MSwgIDkzNiwgIDcyMSwgMTcyMywKKyAgICAgICA1MSwgIDgxMCwgIDkzNiwgIDkzNiwgIDkzNiwgIDkzNiwgIDkzNiwgIDkzNiwgIDkzNywgIDkzOCwKKyAgICAgIDkzOCwgIDkzOCwgIDkzOCwgIDkzOCwgIDkzOCwgIDkzOCwgIDkzOSwgICA1MSwgMTE1MCwgMTE1MiwKKyAgICAgIDk0MCwgMTE1MSwgIDk0MSwgMTE1MiwgMTM5NiwgIDk0MCwgIDk0MCwgIDk0MCwgIDk0MCwgIDk0MCwKKyAgICAgIDk0MCwgIDc5OCwgMTcyMywgMTE1MywgICA1MSwgIDcxNCwgIDcxMSwgMTcyMywgMTE2MiwgMTE2MywKKyAgICAgMTE2MywgMTE2MywgMTE2MywgMTE2MywgMTE2MywgMTE3NywgIDc5OCwgIDk0MSwgIDg1NiwgIDk1MiwKIAotICAgICAgOTEzLCAxMTQ0LCAgNzI2LCAgODE1LCAgIDU1LCAgIDU1LCAgODAzLCAxMTQ2LCAxNzI4LCAgNzE5LAotICAgICAgIDU1LCAgNzE2LCAgODAzLCAxMTU1LCAxNzI4LCAxMTU1LCAxMTg0LCAgOTE0LCAgNzI0LCAgOTE3LAotICAgICAgOTE3LCAgOTE3LCAgOTE3LCAgOTE3LCAgOTE3LCAgOTE3LCAgODk5LCAxMTU2LCAgIDU1LCAxNzI4LAotICAgICAgOTE4LCAgIDUzLCAgIDUzLCAxMTQ2LCAxNzI4LCAgIDUzLCAgOTE4LCAgOTE4LCAgOTE4LCAgOTE4LAotICAgICAgOTE4LCAgOTE4LCAgOTE5LCAgOTIwLCAgOTIwLCAgOTIwLCAgOTIwLCAgOTIwLCAgOTIwLCAgOTIwLAotICAgICAgOTIxLCAxNTgxLCAgNzkwLCAxMTU2LCAgOTIyLCAxNzI4LCAgOTIzLCAgIDU1LCAgIDU1LCAxMTU3LAotICAgICAgOTIyLCAgOTIyLCAgOTIyLCAgOTIyLCAgOTIyLCAgOTIyLCAxMDQ3LCAxMDQ3LCAxMDQ3LCAxMDQ3LAotICAgICAxMDQ3LCAxMDQ3LCAxMDQ3LCAxMTU4LCAgIDUzLCAgIDU1LCAgIDU1LCAgIDUzLCAxMTU3LCAgIDU1LAotICAgICAgIDU1LCAgNzcyLCAgOTIzLCAgNzMzLCAgOTI4LCAgOTI4LCAgOTI4LCAgOTI4LCAgOTI4LCAgOTI4LAotICAgICAgOTI4LCAgOTAyLCAxNzI4LCAxMzEwLCAxMTkyLCAgOTI5LCAgNjY2LCAgIDU1LCAgIDU1LCAxMTU4LAorICAgICAgOTUyLCAgOTUyLCAgOTUyLCAgOTUyLCAgOTUyLCAgOTUyLCAgODU4LCAxNzIzLCAxMTUzLCAgIDQ5LAorICAgICAgOTUzLCAgIDQ5LCAxNzIzLCAgIDUxLCAxMjgyLCAgOTUzLCAgOTUzLCAgOTUzLCAgOTUzLCAgOTUzLAorICAgICAgOTUzLCAgOTU0LCAgOTU1LCAgOTU1LCAgOTU1LCAgOTU1LCAgOTU1LCAgOTU1LCAxMjgzLCAgIDQ5LAorICAgICAgIDUxLCAgNzg1LCAgOTU2LCAgIDQ5LCAgIDQ5LCAgIDUxLCAgNzY3LCAgOTU2LCAgOTU2LCAgOTU2LAorICAgICAgOTU2LCAgOTU2LCAgOTU2LCAgIDUxLCAxMTgzLCAgOTc5LCAgOTc5LCAgOTc5LCAgOTc5LCAgOTc5LAorICAgICAgOTc5LCAgOTc5LCAgIDUxLCAxMjgzLCAgNjYxLCAgNDY1LCAgOTc5LCAxMzk5LCAgIDUxLCAgIDUxLAorICAgICAgIDUxLCAgOTc5LCAgOTc5LCAgOTc5LCAgOTc5LCAgOTc5LCAgOTc5LCAgOTgwLCAgOTgwLCAgOTgwLAorICAgICAgOTgwLCAgOTgwLCAgOTgwLCAgOTgwLCAxMTEyLCAgIDUxLCAgIDUxLCAgNTQ0LCAgOTgwLCAgNzQxLAorICAgICAgNzE0LCAgIDUxLCAxMzE4LCAgOTgwLCAgOTgwLCAgOTgwLCAgOTgwLCAgOTgwLCAgOTgwLCAgNjE0LAorICAgICAgOTgxLCAgOTgxLCAgOTgxLCAgOTgxLCAgOTgxLCAgOTgxLCAgOTgxLCAxNDA0LCAgIDUxLCAxNDczLAogCi0gICAgICA0NzAsICA5MjksICA5MjksICA5MjksICA5MjksICA5MjksICA5MjksICA5MzAsICA5MzEsICA5MzEsCi0gICAgICA5MzEsICA5MzEsICA5MzEsICA5MzEsICA5MzEsICA5MzIsIDEzMTEsIDE0OTAsIDE3MjgsICA5MzMsCi0gICAgICA1NDksICA5MzQsICA3NDYsICA3MTksICAzNjUsICA5MzMsICA5MzMsICA5MzMsICA5MzMsICA5MzMsCi0gICAgICA5MzMsIDExNjcsIDExNjgsIDExNjgsIDExNjgsIDExNjgsIDExNjgsIDExNjgsIDExNzAsIDExNzEsCi0gICAgIDExNzEsIDExNzEsIDExNzEsIDExNzEsIDExNzEsIDEyODcsICAgNTUsICA5MzQsICA3NDQsICA5NDAsCi0gICAgICA5NDAsICA5NDAsICA5NDAsICA5NDAsICA5NDAsICA5NDAsICA5MDUsICA1NDUsICA1NDAsIDEyODgsCi0gICAgICA5NDEsICA3MzUsICA3MTYsICA3MjYsICAgNTUsIDEyMDEsICA5NDEsICA5NDEsICA5NDEsICA5NDEsCi0gICAgICA5NDEsICA5NDEsICA5NDIsICA5NDMsICA5NDMsICA5NDMsICA5NDMsICA5NDMsICA5NDMsICA5NDMsCi0gICAgICA5NDQsIDEyMDIsIDEyMDMsICA3MjMsICA5NDUsIDEyODgsICA5NDYsICAgNTUsICAgNTUsICAgNTUsCi0gICAgICA5NDUsICA5NDUsICA5NDUsICA5NDUsICA5NDUsICA5NDUsIDExNzQsIDExNzUsIDExNzUsIDExNzUsCisgICAgICAzNjAsICA5ODIsIDE0NzQsICA0MzAsICA1NDAsICA1MzUsICA5ODIsICA5ODIsICA5ODIsICA5ODIsCisgICAgICA5ODIsICA5ODIsIDExNjUsIDExNjYsIDExNjYsIDExNjYsIDExNjYsIDExNjYsIDExNjYsIDExNjksCisgICAgIDExNzAsIDExNzAsIDExNzAsIDExNzAsIDExNzAsIDExNzAsICAgNTEsICAgNTEsICA0MzAsICA5ODIsCisgICAgICA5ODIsICA5ODIsICA5ODIsICA5ODIsICA5ODIsICA5ODIsICA3MzAsICA3MTEsICA3MjEsICA3MTgsCisgICAgICA5ODIsICA2MjksICA2MjAsICAgNTEsICAgNTEsICA5ODIsICA5ODIsICA5ODIsICA5ODIsICA5ODIsCisgICAgICA5ODIsICAyNjIsICA5ODMsICA5ODMsICA5ODMsICA5ODMsICA5ODMsICA5ODMsICA5ODMsIDExODgsCisgICAgICA3MTQsICA3MTEsIDExODEsICA5ODQsICA3MDksICA2MjAsICA2MTAsICA2MDgsICA5ODQsICA5ODQsCisgICAgICA5ODQsICA5ODQsICA5ODQsICA5ODQsICAgNDksICA5ODQsICA5ODQsICA5ODQsICA5ODQsICA5ODQsCisgICAgICA5ODQsICA5ODQsICA5ODcsICA5ODgsICA5ODgsICA5ODgsICA5ODgsICA5ODgsICA5ODgsIDExMjEsCisgICAgICA2OTgsICA2OTcsICA2OTYsICA5ODksICA2OTUsICA2OTQsICAgNTEsIDEzMjEsICA5ODksICA5ODksCiAKLSAgICAgMTE3NSwgMTE3NSwgMTE3NSwgIDYzNCwgIDYyNSwgICA1NSwgICA1NSwgICA1NSwgICA1NSwgMTI4NywKLSAgICAgMTI4OSwgIDcxOSwgIDk0NiwgIDg2MSwgIDk1NywgIDk1NywgIDk1NywgIDk1NywgIDk1NywgIDk1NywKLSAgICAgIDk1NywgIDg2MywgMTE5MywgMTcyOCwgMTI5MCwgIDk1OCwgICA1NSwgMTU0NCwgICA1NSwgICA1NSwKLSAgICAgMTI4OSwgIDk1OCwgIDk1OCwgIDk1OCwgIDk1OCwgIDk1OCwgIDk1OCwgIDk1OSwgIDk2MCwgIDk2MCwKLSAgICAgIDk2MCwgIDk2MCwgIDk2MCwgIDk2MCwgMTcyOCwgMTMxNCwgICA1NSwgICA1NSwgIDk2MSwgMTcyOCwKLSAgICAgMTI5MCwgICA1NSwgIDcxNiwgICA1NSwgIDk2MSwgIDk2MSwgIDk2MSwgIDk2MSwgIDk2MSwgIDk2MSwKLSAgICAgICA1NSwgMTE4OCwgIDk4NCwgIDk4NCwgIDk4NCwgIDk4NCwgIDk4NCwgIDk4NCwgIDk4NCwgICA1NSwKLSAgICAgMTcyOCwgICA1NSwgMTYwMiwgIDk4NCwgMTYwMywgICA1NSwgICA1NSwgICA1NSwgICA1NSwgIDk4NCwKLSAgICAgIDk4NCwgIDk4NCwgIDk4NCwgIDk4NCwgIDk4NCwgIDk4NSwgIDk4NSwgIDk4NSwgIDk4NSwgIDk4NSwKLSAgICAgIDk4NSwgIDk4NSwgIDcxNCwgICA1NSwgICA1NSwgICA1NSwgIDk4NSwgMTYwNCwgICA1NSwgICA1NSwKKyAgICAgIDk4OSwgIDk4OSwgIDk4OSwgIDk4OSwgIDcxOSwgIDgxNiwgIDgxNiwgIDgxNiwgIDgxNiwgIDgxNiwKKyAgICAgIDgxNiwgIDgxNiwgIDg5NCwgICA1MSwgIDY5MywgIDY5MiwgIDgxNywgMTQ3NiwgICA1MSwgICA1MSwKKyAgICAgMTI4MiwgIDgxNywgIDgxNywgIDgxNywgIDgxNywgIDgxNywgIDgxNywgIDk5MCwgIDk5MSwgIDk5MSwKKyAgICAgIDk5MSwgIDk5MSwgIDk5MSwgIDk5MSwgMTcyMywgICA1MSwgICA1MSwgIDY5MSwgIDk5MiwgMTQ3MSwKKyAgICAgMTQ4NCwgICA1MSwgIDY5MCwgIDk5MiwgIDk5MiwgIDk5MiwgIDk5MiwgIDk5MiwgIDk5MiwgIDcyOCwKKyAgICAgIDgyOCwgIDgyOCwgIDgyOCwgIDgyOCwgIDgyOCwgIDgyOCwgIDgyOCwgIDg5NywgICA1MSwgMTcyMywKKyAgICAgIDY4OSwgIDgyOSwgMTQ3NywgICA1MSwgICA1MSwgMTI4NCwgIDgyOSwgIDgyOSwgIDgyOSwgIDgyOSwKKyAgICAgIDgyOSwgIDgyOSwgIDk5MywgIDk5NCwgIDk5NCwgIDk5NCwgIDk5NCwgIDk5NCwgIDk5NCwgMTI4NSwKKyAgICAgICA1MSwgICA1MSwgIDY4OCwgIDk5NSwgMTQ3MiwgIDY4NywgMTQ3OCwgIDY4MCwgIDk5NSwgIDk5NSwKKyAgICAgIDk5NSwgIDk5NSwgIDk5NSwgIDk5NSwgIDczOSwgIDg0MywgIDg0MywgIDg0MywgIDg0MywgIDg0MywKIAotICAgICAgIDU1LCAgIDU1LCAgOTg1LCAgOTg1LCAgOTg1LCAgOTg1LCAgOTg1LCAgOTg1LCAgNjE5LCAgOTg2LAotICAgICAgOTg2LCAgOTg2LCAgOTg2LCAgOTg2LCAgOTg2LCAgOTg2LCAgIDU1LCAgIDU1LCAgIDU1LCAgIDU1LAotICAgICAgOTg3LCAxNjEwLCAgNDM1LCAgNjI1LCAgNjE1LCAxNDkxLCAgOTg3LCAgOTg3LCAgOTg3LCAgOTg3LAotICAgICAgOTg3LCAgOTg3LCAxMTk2LCAxMTk4LCAxMjI5LCAxMjMwLCAxMjMwLCAxMjMwLCAxMjMwLCAxMjMwLAotICAgICAxMjMwLCAxMjM1LCAxMjM2LCAxMjM2LCAxMjM2LCAxMjM2LCAxMjM2LCAxMjM2LCAgNDM1LCAgOTg3LAotICAgICAgOTg3LCAgOTg3LCAgOTg3LCAgOTg3LCAgOTg3LCAgOTg3LCAgNjEzLCAgNzAzLCAgNzAyLCAgNzAxLAotICAgICAgOTg3LCAgNzAwLCAgIDU1LCAgIDU1LCAgIDU1LCAgIDU1LCAgOTg3LCAgOTg3LCAgOTg3LCAgOTg3LAotICAgICAgOTg3LCAgOTg3LCAgMjY3LCAgOTg4LCAgOTg4LCAgOTg4LCAgOTg4LCAgOTg4LCAgOTg4LCAgOTg4LAotICAgICAgIDU1LCAgIDU1LCAgIDU1LCAgIDU1LCAgOTg5LCAxNjI0LCAgNjk5LCAxNjI2LCAxNjI3LCAxNTM1LAotICAgICAgOTg5LCAgOTg5LCAgOTg5LCAgOTg5LCAgOTg5LCAgOTg5LCAgIDUzLCAgOTg5LCAgOTg5LCAgOTg5LAorICAgICAgODQzLCAgODQzLCAgOTAwLCAgNjc5LCAxMjg1LCAgNjc4LCAgODQ0LCAgNjc3LCAgIDUxLCAgIDUxLAorICAgICAxMjg0LCAgODQ0LCAgODQ0LCAgODQ0LCAgODQ0LCAgODQ0LCAgODQ0LCAgOTk2LCAgOTk3LCAgOTk3LAorICAgICAgOTk3LCAgOTk3LCAgOTk3LCAgOTk3LCAxNzIzLCAgIDUxLCAgIDUxLCAgNjc2LCAgOTk4LCAxNDgxLAorICAgICAgNjc1LCAgIDUxLCAgNjc0LCAgOTk4LCAgOTk4LCAgOTk4LCAgOTk4LCAgOTk4LCAgOTk4LCAxMDAyLAorICAgICAxMDAzLCAxMDAzLCAxMDAzLCAxMDAzLCAxMDAzLCAxMDAzLCAgNDQ4LCAxNTMyLCAgIDUxLCAxNzIzLAorICAgICAxMDA0LCAxNTQ0LCAgNjczLCAgIDUxLCAgIDUxLCAxMDA0LCAxMDA0LCAxMDA0LCAxMDA0LCAxMDA0LAorICAgICAxMDA0LCAgOTA1LCAxMDA3LCAxMDA3LCAxMDA3LCAxMDA3LCAxMDA3LCAxMDA3LCAxMDA3LCAgOTA3LAorICAgICAgIDUxLCAgIDUxLCAgNjcyLCAxMDA4LCAgNjcxLCAgNjcwLCAgIDUxLCAgNjY5LCAxMDA4LCAxMDA4LAorICAgICAxMDA4LCAxMDA4LCAxMDA4LCAxMDA4LCAxMDA5LCAxMDEwLCAxMDEwLCAxMDEwLCAxMDEwLCAxMDEwLAorICAgICAxMDEwLCAgNDQ4LCAxNTM5LCAgIDUxLCAxNTQxLCAxMDExLCAgNjY4LCAgNjY3LCAgIDUxLCAgIDUxLAogCi0gICAgICA5ODksICA5ODksICA5ODksICA5ODksICA5OTIsICA5OTMsICA5OTMsICA5OTMsICA5OTMsICA5OTMsCi0gICAgICA5OTMsICA2OTgsICA2OTcsICA2OTYsICA2OTUsICA5OTQsICA2OTQsICA2OTMsICAgNTUsICAgNTUsCi0gICAgICAgNTUsICA5OTQsICA5OTQsICA5OTQsICA5OTQsICA5OTQsICA5OTQsICA3MjQsICA4MjEsICA4MjEsCi0gICAgICA4MjEsICA4MjEsICA4MjEsICA4MjEsICA4MjEsICA4OTksICAgNTUsICAgNTUsICAgNTUsICA4MjIsCi0gICAgICA2OTIsICA2ODUsIDE2NDIsICAgNTUsIDEzNDUsICA4MjIsICA4MjIsICA4MjIsICA4MjIsICA4MjIsCi0gICAgICA4MjIsICA5OTUsICA5OTYsICA5OTYsICA5OTYsICA5OTYsICA5OTYsICA5OTYsIDEzNDYsIDE2MzQsCi0gICAgICA2ODQsICAgNTUsICA5OTcsICA2ODMsICA2ODIsICAgNTUsIDE2NDMsICAgNTUsICA5OTcsICA5OTcsCi0gICAgICA5OTcsICA5OTcsICA5OTcsICA5OTcsICA3MzMsICA4MzMsICA4MzMsICA4MzMsICA4MzMsICA4MzMsCi0gICAgICA4MzMsICA4MzMsICA5MDIsICAgNTUsIDEzNDYsICAgNTUsICA4MzQsICA2ODEsIDE2NDQsICAgNTUsCi0gICAgICAgNTUsIDEzNDUsICA4MzQsICA4MzQsICA4MzQsICA4MzQsICA4MzQsICA4MzQsICA5OTgsICA5OTksCisgICAgIDEwMTEsIDEwMTEsIDEwMTEsIDEwMTEsIDEwMTEsIDEwMTEsICA5MTQsIDEwMTksIDEwMTksIDEwMTksCisgICAgIDEwMTksIDEwMTksIDEwMTksIDEwMTksICA5MTYsICAgNTEsICAgNTEsICA2NjYsIDEwMjAsICA2NjUsCisgICAgICAgNTEsIDE1NzIsICAgNTEsIDEwMjAsIDEwMjAsIDEwMjAsIDEwMjAsIDEwMjAsIDEwMjAsIDEwMjEsCisgICAgIDEwMjIsIDEwMjIsIDEwMjIsIDEwMjIsIDEwMjIsIDEwMjIsICA0NDgsICAgNTEsICA2NjQsICAgNTEsCisgICAgIDEwMjMsICA0NjMsICA2NjEsICA0NjUsIDE1NzksIDEwMjMsIDEwMjMsIDEwMjMsIDEwMjMsIDEwMjMsCisgICAgIDEwMjMsICA5MjUsIDEwMzQsIDEwMzQsIDEwMzQsIDEwMzQsIDEwMzQsIDEwMzQsIDEwMzQsICA5MjcsCisgICAgIDE1NzYsICA0NTksICA1NDYsIDEwMzUsICA1MzAsICAgNTEsICAgNTEsICAgNTEsIDEwMzUsIDEwMzUsCisgICAgIDEwMzUsIDEwMzUsIDEwMzUsIDEwMzUsIDEwMzYsIDEwMzcsIDEwMzcsIDEwMzcsIDEwMzcsIDEwMzcsCisgICAgIDEwMzcsICA0NDgsICAgNTEsICAgNTEsICAgNTEsIDEwMzgsICA1MzcsIDE1OTcsICAgNTEsICAgNTEsCisgICAgIDEwMzgsIDEwMzgsIDEwMzgsIDEwMzgsIDEwMzgsIDEwMzgsICA5MzcsIDEwNTAsIDEwNTAsIDEwNTAsCiAKLSAgICAgIDk5OSwgIDk5OSwgIDk5OSwgIDk5OSwgIDk5OSwgMTcyOCwgMTYzNSwgICA1NSwgICA1NSwgMTAwMCwKLSAgICAgIDY4MCwgIDY3OSwgMTY0NiwgIDY3OCwgICA1NSwgMTAwMCwgMTAwMCwgMTAwMCwgMTAwMCwgMTAwMCwKLSAgICAgMTAwMCwgIDc0NCwgIDg0OCwgIDg0OCwgIDg0OCwgIDg0OCwgIDg0OCwgIDg0OCwgIDg0OCwgIDkwNSwKLSAgICAgIDY3NywgMTcyOCwgICA1NSwgIDg0OSwgIDY3NiwgIDY3NSwgICA1NSwgICA1NSwgMTM1MCwgIDg0OSwKLSAgICAgIDg0OSwgIDg0OSwgIDg0OSwgIDg0OSwgIDg0OSwgMTAwMSwgMTAwMiwgMTAwMiwgMTAwMiwgMTAwMiwKLSAgICAgMTAwMiwgMTAwMiwgMTM1MSwgMTYzNiwgICA1NSwgICA1NSwgMTAwMywgMTY1NSwgICA1NSwgMTY1NywKLSAgICAgIDY3NCwgIDY3MywgMTAwMywgMTAwMywgMTAwMywgMTAwMywgMTAwMywgMTAwMywgMTAwNywgMTAwOCwKLSAgICAgMTAwOCwgMTAwOCwgMTAwOCwgMTAwOCwgMTAwOCwgIDQ1MywgICA1NSwgIDY3MiwgMTM1MSwgMTAwOSwKLSAgICAgIDY3MSwgMTY1OSwgICA1NSwgICA1NSwgICA1NSwgMTAwOSwgMTAwOSwgMTAwOSwgMTAwOSwgMTAwOSwKLSAgICAgMTAwOSwgIDkxMCwgMTAxMiwgMTAxMiwgMTAxMiwgMTAxMiwgMTAxMiwgMTAxMiwgMTAxMiwgIDkxMiwKKyAgICAgMTA1MCwgMTA1MCwgMTA1MCwgMTA1MCwgIDkzOSwgICA1MSwgICA1MSwgIDYyOSwgMTA1MSwgMTU5OCwKKyAgICAgICA1MSwgICA1MSwgICA1MSwgMTA1MSwgMTA1MSwgMTA1MSwgMTA1MSwgMTA1MSwgMTA1MSwgMTA1MiwKKyAgICAgMTA1MywgMTA1MywgMTA1MywgMTA1MywgMTA1MywgMTA1MywgIDQ0OCwgICA1MSwgICA1MSwgICA1MSwKKyAgICAgMTA1NCwgMTU5OSwgMTYwNSwgICA1MSwgICA1MSwgMTA1NCwgMTA1NCwgMTA1NCwgMTA1NCwgMTA1NCwKKyAgICAgMTA1NCwgIDg1NiwgMTA2MSwgMTA2MSwgMTA2MSwgMTA2MSwgMTA2MSwgMTA2MSwgMTA2MSwgIDg1OCwKKyAgICAgICA1MSwgICA1MSwgIDYyMCwgMTA2MiwgMTYxOSwgIDUzMCwgMTYyMSwgIDYyMCwgMTA2MiwgMTA2MiwKKyAgICAgMTA2MiwgMTA2MiwgMTA2MiwgMTA2MiwgMTA2MywgMTA2NCwgMTA2NCwgMTA2NCwgMTA2NCwgMTA2NCwKKyAgICAgMTA2NCwgMTA2NCwgMTA2NSwgICA1MSwgICA1MSwgIDYxNCwgMTA2NiwgICA1MSwgMTA2NywgMTM0MCwKKyAgICAgICA1MSwgMTA2NiwgMTA2NiwgMTA2NiwgMTA2NiwgMTA2NiwgMTA2NiwgMTEzMiwgMTE0NCwgIDYxNCwKKyAgICAgICA1MSwgICA1MSwgMTE1NiwgMTM0MSwgICA1MSwgMTMyNCwgMTMyNywgICA1MSwgMTE5NiwgICA1MSwKIAotICAgICAgIDU1LCAgIDU1LCAgIDU1LCAxMDEzLCAgNjcwLCAxNjYxLCAgIDU1LCAgNjY5LCAgNDY4LCAxMDEzLAotICAgICAxMDEzLCAxMDEzLCAxMDEzLCAxMDEzLCAxMDEzLCAxMDE0LCAxMDE1LCAxMDE1LCAxMDE1LCAxMDE1LAotICAgICAxMDE1LCAxMDE1LCAgNDUzLCAxNjY5LCAgIDU1LCAxNjYyLCAxMDE2LCAgNjY2LCAgNDcwLCAgIDU1LAotICAgICAgNDY0LCAgIDU1LCAxMDE2LCAxMDE2LCAxMDE2LCAxMDE2LCAxMDE2LCAxMDE2LCAgOTE5LCAxMDI0LAotICAgICAxMDI0LCAxMDI0LCAxMDI0LCAxMDI0LCAxMDI0LCAxMDI0LCAgOTIxLCAgIDU1LCAxNjYzLCAgIDU1LAotICAgICAxMDI1LCAgNTUxLCAxNjcyLCAgIDU1LCAgIDU1LCAgNTM1LCAxMDI1LCAxMDI1LCAxMDI1LCAxMDI1LAotICAgICAxMDI1LCAxMDI1LCAxMDI2LCAxMDI3LCAxMDI3LCAxMDI3LCAxMDI3LCAxMDI3LCAxMDI3LCAgNDUzLAotICAgICAgNTQyLCAgIDU1LCAgIDU1LCAxMDI4LCAgNjM0LCAgNjI1LCAxNjgwLCAxNjgxLCAgIDU1LCAxMDI4LAotICAgICAxMDI4LCAxMDI4LCAxMDI4LCAxMDI4LCAxMDI4LCAgOTMwLCAxMDM5LCAxMDM5LCAxMDM5LCAxMDM5LAotICAgICAxMDM5LCAxMDM5LCAxMDM5LCAgOTMyLCAgNTM1LCAgNjI1LCAgIDU1LCAxMDQwLCAgNjE5LCAgIDU1LAorICAgICAxMzMwLCAxMTc4LCAxMTc5LCAxMDY3LCAgIDUxLCAgNjE0LCAxMDkwLCAxMDkwLCAxMDkwLCAxMDkwLAorICAgICAxMDkwLCAxMDkwLCAxMDkwLCAxMTg3LCAxMTk3LCAxMTk4LCAgIDUxLCAxMDkxLCAxMzQxLCAgNjA3LAorICAgICAgNjA2LCAgIDUxLCAxMDkxLCAxMDkxLCAxMDkxLCAxMDkxLCAxMDkxLCAxMDkxLCAgIDQ5LCAxMDkxLAorICAgICAxMDkxLCAxMDkxLCAxMDkxLCAxMDkxLCAxMDkxLCAxMDkxLCAgIDUxLCAgMjYyLCAxMDkyLCAxMDkyLAorICAgICAxMDkyLCAxMDkyLCAxMDkyLCAxMDkyLCAxMDkyLCAgNjA1LCAgIDUxLCAgIDUxLCAgIDUxLCAgNjA0LAorICAgICAgIDUxLCAgNjAzLCAgIDUxLCAgIDUxLCAgOTA1LCAxMDk1LCAxMDk1LCAxMDk1LCAxMDk1LCAxMDk1LAorICAgICAxMDk1LCAxMDk1LCAxMDk2LCAgIDUxLCAgIDUxLCAgIDUxLCAxMDk3LCAgIDUxLCAgOTA5LCAgIDUxLAorICAgICAgIDUxLCAxMDk3LCAxMDk3LCAxMDk3LCAxMDk3LCAxMDk3LCAxMDk3LCAxMzAzLCAxMTkxLCAxMTkzLAorICAgICAxMjI0LCAxMjI1LCAxMjI1LCAxMjI1LCAxMjI1LCAxMjI1LCAxMjI1LCAgIDUxLCAxMzA5LCAgNjAyLAorICAgICAgIDUxLCAgNjAxLCAgIDUxLCAgOTA5LCAgOTE0LCAxMDk4LCAxMDk4LCAxMDk4LCAxMDk4LCAxMDk4LAogCi0gICAgICAgNTUsIDE2ODYsICA2MTksIDEwNDAsIDEwNDAsIDEwNDAsIDEwNDAsIDEwNDAsIDEwNDAsIDEwNDEsCi0gICAgIDEwNDIsIDEwNDIsIDEwNDIsIDEwNDIsIDEwNDIsIDEwNDIsICA0NTMsICAgNTUsICAgNTUsICA2MTIsCi0gICAgIDEwNDMsIDE2ODcsICA2MTEsICAgNTUsICAgNTUsICAgNTUsIDEwNDMsIDEwNDMsIDEwNDMsIDEwNDMsCi0gICAgIDEwNDMsIDEwNDMsICA5NDIsIDEwNTUsIDEwNTUsIDEwNTUsIDEwNTUsIDEwNTUsIDEwNTUsIDEwNTUsCi0gICAgICA5NDQsICAgNTUsICAgNTUsICAgNTUsIDEwNTYsIDE2OTMsIDE2OTAsICAgNTUsICAgNTUsICA2MTAsCi0gICAgIDEwNTYsIDEwNTYsIDEwNTYsIDEwNTYsIDEwNTYsIDEwNTYsIDEwNTcsIDEwNTgsIDEwNTgsIDEwNTgsCi0gICAgIDEwNTgsIDEwNTgsIDEwNTgsICA0NTMsICA2MDksICAgNTUsICAgNTUsIDEwNTksICA2MDgsICA2MDcsCi0gICAgICAgNTUsIDE3MDAsICAgNTUsIDEwNTksIDEwNTksIDEwNTksIDEwNTksIDEwNTksIDEwNTksICA4NjEsCi0gICAgIDEwNjYsIDEwNjYsIDEwNjYsIDEwNjYsIDEwNjYsIDEwNjYsIDEwNjYsICA4NjMsICAgNTUsIDE2OTQsCi0gICAgICAgNTUsIDEwNjcsICA2MDYsICA2MDUsICAgNTUsIDE3MDgsICAgNTUsIDEwNjcsIDEwNjcsIDEwNjcsCi0KLSAgICAgMTA2NywgMTA2NywgMTA2NywgMTA2OCwgMTA2OSwgMTA2OSwgMTA2OSwgMTA2OSwgMTA2OSwgMTA2OSwKLSAgICAgMTA2OSwgMTA3MCwgICA1NSwgIDYwNCwgICA1NSwgMTA3MSwgIDYwMywgMTA3MiwgIDYwMiwgIDMzOCwKLSAgICAgIDIzOSwgMTA3MSwgMTA3MSwgMTA3MSwgMTA3MSwgMTA3MSwgMTA3MSwgMTIzOSwgMTI0MCwgMTI0MCwKLSAgICAgMTI0MCwgMTI0MCwgMTI0MCwgMTI0MCwgMTI0NSwgMTI0NiwgMTI0NiwgMTI0NiwgMTI0NiwgMTI0NiwKLSAgICAgMTI0NiwgICA1NSwgICA1NSwgMTA3MiwgICA1NSwgIDYxOSwgMTA5NSwgMTA5NSwgMTA5NSwgMTA5NSwKLSAgICAgMTA5NSwgMTA5NSwgMTA5NSwgIDYwMSwgIDYwMCwgIDU5OSwgIDU5OCwgMTA5NiwgIDU5NywgICA1NSwKLSAgICAgICA1NSwgIDU5NiwgICA1NSwgMTA5NiwgMTA5NiwgMTA5NiwgMTA5NiwgMTA5NiwgMTA5NiwgICA1MywKLSAgICAgMTA5NiwgMTA5NiwgMTA5NiwgMTA5NiwgMTA5NiwgMTA5NiwgMTA5NiwgICA1NSwgIDI2NywgMTA5NywKLSAgICAgMTA5NywgMTA5NywgMTA5NywgMTA5NywgMTA5NywgMTA5NywgMTI0OCwgMTI0OSwgMTI0OSwgMTI0OSwKLSAgICAgMTI0OSwgMTI0OSwgMTI0OSwgICA1NSwgICA1NSwgICA1NSwgIDkxMCwgMTEwMCwgMTEwMCwgMTEwMCwKLQotICAgICAxMTAwLCAxMTAwLCAxMTAwLCAxMTAwLCAxMTAxLCAgNTk1LCAgNTk0LCAgNTkzLCAxMTAyLCAgNTkyLAotICAgICAgOTE0LCAgIDU1LCAgIDU1LCAgNTkxLCAxMTAyLCAxMTAyLCAxMTAyLCAxMTAyLCAxMTAyLCAxMTAyLAotICAgICAxMjUyLCAxMjUzLCAxMjUzLCAxMjUzLCAxMjUzLCAxMjUzLCAxMjUzLCAxMjU5LCAxMjYwLCAxMjYwLAotICAgICAxMjYwLCAxMjYwLCAxMjYwLCAxMjYwLCAgIDU1LCAxNzEwLCAgOTE0LCAgOTE5LCAxMTAzLCAxMTAzLAotICAgICAxMTAzLCAxMTAzLCAxMTAzLCAxMTAzLCAxMTAzLCAxMTA0LCAgNTkwLCAgNTg5LCAgNTgxLCAxMTA1LAotICAgICAgNTc4LCAgOTIzLCAgIDU1LCAgNTc1LCAgNTc0LCAxMTA1LCAxMTA1LCAxMTA1LCAxMTA1LCAxMTA1LAotICAgICAxMTA1LCAxMjYyLCAxMjYzLCAxMjYzLCAxMjYzLCAxMjYzLCAxMjYzLCAxMjYzLCAxMjY2LCAxMjY3LAotICAgICAxMjY3LCAxMjY3LCAxMjY3LCAxMjY3LCAxMjY3LCAgIDU1LCAxNzE0LCAgOTIzLCAgOTMwLCAxMTA2LAotICAgICAxMTA2LCAxMTA2LCAxMTA2LCAxMTA2LCAxMTA2LCAxMTA2LCAxMTA3LCAgNTczLCAgNTcyLCAgNTcxLAotICAgICAxMTA4LCAgNTcwLCAgOTM0LCAgIDU1LCAgNTY5LCAgNTY4LCAxMTA4LCAxMTA4LCAxMTA4LCAxMTA4LAotCi0gICAgIDExMDgsIDExMDgsIDEyNzMsIDEyNzQsIDEyNzQsIDEyNzQsIDEyNzQsIDEyNzQsIDEyNzQsIDEyNzYsCi0gICAgIDEyNzcsIDEyNzcsIDEyNzcsIDEyNzcsIDEyNzcsIDEyNzcsICAgNTUsICAgNTUsICA5MzQsICA5NDIsCi0gICAgIDExMDksIDExMDksIDExMDksIDExMDksIDExMDksIDExMDksIDExMDksIDExMTAsICA1NjcsICA1NjYsCi0gICAgICA0NzAsIDExMTEsICAyNzksICA5NDYsICAgNTUsICAgNTUsICA0NTMsIDExMTEsIDExMTEsIDExMTEsCi0gICAgIDExMTEsIDExMTEsIDExMTEsIDEyODAsIDEyODEsIDEyODEsIDEyODEsIDEyODEsIDEyODEsIDEyODEsCi0gICAgIDExNjgsIDExNjgsIDExNjgsIDExNjgsIDExNjgsIDExNjgsIDExNjgsICAzNjUsICA1NTEsICA5NDYsCi0gICAgIDExMTMsIDExMTQsIDExMTQsIDExMTQsIDExMTQsIDExMTQsIDExMTQsIDExMTUsICA1MzUsICA1NDIsCi0gICAgICA0NTMsIDExMTYsICA1MzksICA0NTAsICA0NDQsICAgNTUsICAgNTUsIDExMTYsIDExMTYsIDExMTYsCi0gICAgIDExMTYsIDExMTYsIDExMTYsIDExMTcsIDExMTgsIDExMTgsIDExMTgsIDExMTgsIDExMTgsIDExMTgsCi0gICAgIDExMTgsIDExMTksICAgNTUsICAgNTUsICAgNTUsIDExMjAsICAgNTUsIDExMjEsICAgNTUsIDEzNTAsCisgICAgIDEwOTgsIDEwOTgsIDEwOTksICA2MDAsIDEzMDUsICA1OTksIDExMDAsICAgNTEsICA5MTgsICAgNTEsCisgICAgICA1OTgsIDExMDAsIDExMDAsIDExMDAsIDExMDAsIDExMDAsIDExMDAsIDEyMzAsIDEyMzEsIDEyMzEsCisgICAgIDEyMzEsIDEyMzEsIDEyMzEsIDEyMzEsIDEyMzQsIDEyMzUsIDEyMzUsIDEyMzUsIDEyMzUsIDEyMzUsCisgICAgIDEyMzUsICA1OTcsICAgNTEsICA5MTgsICA5MjUsIDExMDEsIDExMDEsIDExMDEsIDExMDEsIDExMDEsCisgICAgIDExMDEsIDExMDEsIDExMDIsICAzMzMsICAyMzQsICA1OTYsIDExMDMsICA1OTUsICA5MjksICAgNTEsCisgICAgICA1OTQsIDExMDMsIDExMDMsIDExMDMsIDExMDMsIDExMDMsIDExMDMsIDEyNDAsIDEyNDEsIDEyNDEsCisgICAgIDEyNDEsIDEyNDEsIDEyNDEsIDEyNDEsIDEyNDMsIDEyNDQsIDEyNDQsIDEyNDQsIDEyNDQsIDEyNDQsCisgICAgIDEyNDQsICA1OTMsICAgNTEsICA5MjksICA5MzcsIDExMDQsIDExMDQsIDExMDQsIDExMDQsIDExMDQsCisgICAgIDExMDQsIDExMDQsIDExMDUsICA1OTIsICA1OTEsICA1OTAsIDExMDYsICA1ODksICA5NDEsICAgNTEsCisgICAgICA1ODgsIDExMDYsIDExMDYsIDExMDYsIDExMDYsIDExMDYsIDExMDYsIDEyNDcsIDEyNDgsIDEyNDgsCiAKLSAgICAgICA1NSwgMTEyMCwgMTEyMCwgMTEyMCwgMTEyMCwgMTEyMCwgMTEyMCwgMTMwOCwgMTMwNSwgIDUzNSwKLSAgICAgICA1NSwgIDUzMywgIDQ0NCwgMTcyOCwgICA1NSwgIDQzNiwgICA1NSwgICA1NSwgICA1NSwgIDQzMCwKLSAgICAgIDUyMCwgMTMwMywgIDUxOSwgMTEyMSwgIDkxMCwgMTEyNCwgMTEyNCwgMTEyNCwgMTEyNCwgMTEyNCwKLSAgICAgMTEyNCwgMTEyNCwgMTEwMSwgMTMxMiwgMTU4MywgICA1NSwgMTEyNSwgMTQwMiwgMTcxNywgMTcyOCwKLSAgICAgICA1NSwgICA1NSwgMTEyNSwgMTEyNSwgMTEyNSwgMTEyNSwgMTEyNSwgMTEyNSwgMTEyNiwgMTEyNywKLSAgICAgMTEyNywgMTEyNywgMTEyNywgMTEyNywgMTEyNywgMTEyNywgMTEyOCwgICA1NSwgICA1NSwgICA1NSwKLSAgICAgMTEyOSwgIDUxOCwgMTEzMCwgIDUxNywgIDUxNiwgICA1NSwgMTEyOSwgMTEyOSwgMTEyOSwgMTEyOSwKLSAgICAgMTEyOSwgMTEyOSwgMTMwOSwgMTMxMywgIDUxNSwgICA1NSwgMTMzNywgMTMzOCwgMTMzOCwgMTMzOCwKLSAgICAgMTMzOCwgMTMzOCwgMTMzOCwgICA1NSwgMTM1MiwgICA1NSwgMTMwNywgIDUxNCwgMTEzMCwgIDkxOSwKLSAgICAgMTEzNSwgMTEzNSwgMTEzNSwgMTEzNSwgMTEzNSwgMTEzNSwgMTEzNSwgMTEwNCwgMTM1MywgIDUxMywKKyAgICAgMTI0OCwgMTI0OCwgMTI0OCwgMTI0OCwgMTI1NCwgMTI1NSwgMTI1NSwgMTI1NSwgMTI1NSwgMTI1NSwKKyAgICAgMTI1NSwgICA1MSwgMTM0MCwgIDk0MSwgMTEwOCwgMTEwOSwgMTEwOSwgMTEwOSwgMTEwOSwgMTEwOSwKKyAgICAgMTEwOSwgMTExMCwgIDU4NywgIDU4NiwgIDU4NSwgMTExMSwgMTcyMywgIDU4NCwgICA1MSwgIDU3NiwKKyAgICAgMTExMSwgMTExMSwgMTExMSwgMTExMSwgMTExMSwgMTExMSwgMTExMiwgMTExMywgMTExMywgMTExMywKKyAgICAgMTExMywgMTExMywgMTExMywgMTExMywgMTExNCwgIDU3MywgMTMwNiwgIDU3MCwgMTExNSwgIDU2OSwKKyAgICAgMTExNiwgMTcyMywgIDU2OCwgMTExNSwgMTExNSwgMTExNSwgMTExNSwgMTExNSwgMTExNSwgMTI1NywKKyAgICAgMTI1OCwgMTI1OCwgMTI1OCwgMTI1OCwgMTI1OCwgMTI1OCwgMTI2MSwgMTI2MiwgMTI2MiwgMTI2MiwKKyAgICAgMTI2MiwgMTI2MiwgMTI2MiwgMTM0NSwgICA1MSwgMTExNiwgIDkwNSwgMTExOSwgMTExOSwgMTExOSwKKyAgICAgMTExOSwgMTExOSwgMTExOSwgMTExOSwgMTA5NiwgIDU2NywgIDU2NiwgMTM0NiwgMTEyMCwgIDU2NSwKKyAgICAgIDU2NCwgICA1MSwgICA1MSwgMTEyMCwgMTEyMCwgMTEyMCwgMTEyMCwgMTEyMCwgMTEyMCwgMTEyMSwKIAotICAgICAxNDAzLCAxMTM2LCAgNTEyLCAgIDU1LCAgNTExLCAgIDU1LCAgNTEwLCAxMTM2LCAxMTM2LCAxMTM2LAotICAgICAxMTM2LCAxMTM2LCAxMTM2LCAxMTM3LCAxMTM4LCAxMTM4LCAxMTM4LCAxMTM4LCAxMTM4LCAxMTM4LAotICAgICAxMTM4LCAxMTM5LCAxNDA1LCAgIDU1LCAxMzUzLCAxMTQwLCAgNTA5LCAxMTQxLCAxMzUyLCAgNTA4LAotICAgICAgNTA3LCAxMTQwLCAxMTQwLCAxMTQwLCAxMTQwLCAxMTQwLCAxMTQwLCAxMzE3LCAgNTA2LCAgNTAzLAotICAgICAgNTAyLCAgNDk5LCAxNzI4LCAxMjQ2LCAxMjQ2LCAxMjQ2LCAxMjQ2LCAxMjQ2LCAxMjQ2LCAxMjQ2LAotICAgICAgNDk4LCAxMzU4LCAgIDU1LCAxMTQxLCAgOTMwLCAxMTQ3LCAxMTQ3LCAxMTQ3LCAxMTQ3LCAxMTQ3LAotICAgICAxMTQ3LCAxMTQ3LCAxMTA3LCAgNDk3LCAgNDk2LCAxMzU5LCAxMTQ4LCAgNDk1LCAxNzI4LCAgMTIwLAotICAgICAgIDU1LCAgNDk0LCAxMTQ4LCAxMTQ4LCAxMTQ4LCAxMTQ4LCAxMTQ4LCAxMTQ4LCAxMTQ5LCAxMTUwLAotICAgICAxMTUwLCAxMTUwLCAxMTUwLCAxMTUwLCAxMTUwLCAxMTUwLCAxMTUxLCAxNDA4LCAxMzU4LCAxMzYwLAotICAgICAxMTUyLCAxMzU5LCAxMTUzLCAxMzYwLCAgNDkzLCAgNDgxLCAxMTUyLCAxMTUyLCAxMTUyLCAxMTUyLAorICAgICAxMTIyLCAxMTIyLCAxMTIyLCAxMTIyLCAxMTIyLCAxMTIyLCAxMTIyLCAxMTIzLCAxMzA3LCAgIDUxLAorICAgICAgNTYzLCAxMTI0LCAxMzQ2LCAxMTI1LCAxNjIyLCAgNTYyLCAxMTI0LCAxMTI0LCAxMTI0LCAxMTI0LAorICAgICAxMTI0LCAxMTI0LCAxMjY4LCAxMjY5LCAxMjY5LCAxMjY5LCAxMjY5LCAxMjY5LCAxMjY5LCAxMjcxLAorICAgICAxMjcyLCAxMjcyLCAxMjcyLCAxMjcyLCAxMjcyLCAxMjcyLCAxMzQ1LCAgIDUxLCAxMTI1LCAgOTE0LAorICAgICAxMTMwLCAxMTMwLCAxMTMwLCAxMTMwLCAxMTMwLCAxMTMwLCAxMTMwLCAxMDk5LCAgNTYxLCAgNDY1LAorICAgICAxNzIzLCAxMTMxLCAgMjc0LCAgNDQ4LCAgIDUxLCAxMzk0LCAxMTMxLCAxMTMxLCAxMTMxLCAxMTMxLAorICAgICAxMTMxLCAxMTMxLCAxMTMyLCAxMTMzLCAxMTMzLCAxMTMzLCAxMTMzLCAxMTMzLCAxMTMzLCAxMTMzLAorICAgICAxMTM0LCAgMzYwLCAxMzk1LCAgNTQ2LCAxMTM1LCAxNzIzLCAxMTM2LCAgNTMwLCAgNTM3LCAxMTM1LAorICAgICAxMTM1LCAxMTM1LCAxMTM1LCAxMTM1LCAxMTM1LCAxMjc1LCAxMjc2LCAxMjc2LCAxMjc2LCAxMjc2LAorICAgICAxMjc2LCAxMjc2LCAxMTYzLCAxMTYzLCAxMTYzLCAxMTYzLCAxMTYzLCAxMTYzLCAxMTYzLCAxMzQ3LAogCi0gICAgIDExNTIsIDExNTIsIDE3MjgsIDEzNjEsICA0ODAsICA0NzksICA0NzgsIDE3MjgsIDEyNjAsIDEyNjAsCi0gICAgIDEyNjAsIDEyNjAsIDEyNjAsIDEyNjAsIDEyNjAsICA0NzcsIDEzNjYsICAgNTUsIDExNTMsICA5NDIsCi0gICAgIDExNTksIDExNTksIDExNTksIDExNTksIDExNTksIDExNTksIDExNTksIDExMTAsIDE3MjgsIDEzNjEsCi0gICAgIDEzNjcsIDExNjAsICA0NzYsIDE3MjgsICA0NzUsICAgNTUsICA0NzQsIDExNjAsIDExNjAsIDExNjAsCi0gICAgIDExNjAsIDExNjAsIDExNjAsIDExNjEsIDExNjIsIDExNjIsIDExNjIsIDExNjIsIDExNjIsIDExNjIsCi0gICAgIDExNjIsIDExNjMsIDE0NzUsIDEzNjYsIDEzNjgsIDExNjQsIDEzNjcsIDExNjUsIDEzNjgsICA0NzMsCi0gICAgICAyNzcsIDExNjQsIDExNjQsIDExNjQsIDExNjQsIDExNjQsIDExNjQsIDE3MjgsIDEzNjksICA0NzAsCi0gICAgICAyNzksICA0NTMsIDE3MjgsIDEyNzQsIDEyNzQsIDEyNzQsIDEyNzQsIDEyNzQsIDEyNzQsIDEyNzQsCi0gICAgICAzNjcsIDEzNzQsICAgNTUsIDExNjUsIDEwNjgsIDExNzYsIDExNzYsIDExNzYsIDExNzYsIDExNzYsCi0gICAgIDExNzYsIDExNzYsIDEwNzAsIDE3MjgsIDEzNjksIDEzNzUsIDExNzcsICA0NTAsIDE3MjgsICA0NDQsCisgICAgICAgNTEsIDExMzYsICA5MjUsIDExNDIsIDExNDIsIDExNDIsIDExNDIsIDExNDIsIDExNDIsIDExNDIsCisgICAgIDExMDIsICA0NDgsICA1MzQsIDEzNDgsIDExNDMsICA0NDUsICA0MzksICAgNTEsICAgNTEsIDExNDMsCisgICAgIDExNDMsIDExNDMsIDExNDMsIDExNDMsIDExNDMsIDExNDQsIDExNDUsIDExNDUsIDExNDUsIDExNDUsCisgICAgIDExNDUsIDExNDUsIDExNDUsIDExNDYsICAgNTEsICAgNTEsIDEzOTcsIDExNDcsIDEzNDgsIDExNDgsCisgICAgIDEyMTgsIDEyODgsIDExNDcsIDExNDcsIDExNDcsIDExNDcsIDExNDcsIDExNDcsIDE0MDgsIDEyOTAsCisgICAgIDEzMDAsICAgNTEsIDEzMzIsIDEzMzMsIDEzMzMsIDEzMzMsIDEzMzMsIDEzMzMsIDEzMzMsICAgNTEsCisgICAgIDEzNDcsICAgNTEsIDEyOTgsICAgNTEsIDExNDgsICA5MzcsIDExNTQsIDExNTQsIDExNTQsIDExNTQsCisgICAgIDExNTQsIDExNTQsIDExNTQsIDExMDUsIDE3MjMsICA1MzAsICAgNTEsIDExNTUsICAgNTEsIDE2NTAsCisgICAgICAgNTEsICAgNTEsIDExNTUsIDExNTUsIDExNTUsIDExNTUsIDExNTUsIDExNTUsIDExNTYsIDExNTcsCisgICAgIDExNTcsIDExNTcsIDExNTcsIDExNTcsIDExNTcsIDExNTcsIDExNTgsICAgNTEsICAgNTEsIDE3MjMsCiAKLSAgICAgICA1NSwgMTM3NCwgMTE3NywgMTE3NywgMTE3NywgMTE3NywgMTE3NywgMTE3NywgMTE3OCwgMTE3OSwKLSAgICAgMTE3OSwgMTE3OSwgMTE3OSwgMTE3OSwgMTE3OSwgMTcyOCwgIDQ0NCwgMTU0NywgIDQzNywgMTE4MCwKLSAgICAgIDQzNywgMTM3NSwgICA1NSwgIDQyOSwgICA1NSwgMTE4MCwgMTE4MCwgMTE4MCwgMTE4MCwgMTE4MCwKLSAgICAgMTE4MCwgICA1NSwgIDYxOSwgMTIwNCwgMTIwNCwgMTIwNCwgMTIwNCwgMTIwNCwgMTIwNCwgMTIwNCwKLSAgICAgICA1NSwgMTcyOCwgICA1NSwgIDQyMCwgIDk4OSwgMTcxNSwgIDQxOSwgMTcxOSwgIDQxNiwgICA1NSwKLSAgICAgIDk4OSwgIDk4OSwgIDk4OSwgIDk4OSwgIDk4OSwgIDk4OSwgICA1MywgIDk4OSwgIDk4OSwgIDk4OSwKLSAgICAgIDk4OSwgIDk4OSwgIDk4OSwgIDk4OSwgICA1NSwgIDI2NywgMTA5NywgMTA5NywgMTA5NywgMTA5NywKLSAgICAgMTA5NywgMTA5NywgMTA5NywgIDQxNSwgICA1NSwgICA1NSwgMTM3NiwgMTM3NiwgICA1NSwgICA1NSwKLSAgICAgIDQxNCwgMTQyMSwgICA1NSwgMTIwNywgMTIwOCwgMTIwOCwgMTIwOCwgMTIwOCwgMTIwOCwgMTIwOCwKLSAgICAgMTM3NywgMTcyOCwgICA1NSwgICA1NSwgMTIwOSwgMTQyMiwgICA1NSwgICA1NSwgMTM5OSwgIDQxMywKKyAgICAgMTE1OSwgMTYyOSwgMTE2MCwgMTI4OCwgIDUyOCwgMTE1OSwgMTE1OSwgMTE1OSwgMTE1OSwgMTE1OSwKKyAgICAgMTE1OSwgMTcyMywgMTMwNCwgIDQzOSwgICA1MSwgMTI0MSwgMTI0MSwgMTI0MSwgMTI0MSwgMTI0MSwKKyAgICAgMTI0MSwgMTI0MSwgICA1MSwgIDQzMSwgMTM1MywgMTMwMiwgICA1MSwgMTE2MCwgMTA2MywgMTE3MSwKKyAgICAgMTE3MSwgMTE3MSwgMTE3MSwgMTE3MSwgMTE3MSwgMTE3MSwgMTA2NSwgIDQyNSwgMTM1NCwgICA1MSwKKyAgICAgMTE3MiwgIDUxNSwgIDUxNCwgICA1MSwgMTM1MywgMTE3MiwgMTE3MiwgMTE3MiwgMTE3MiwgMTE3MiwKKyAgICAgMTE3MiwgMTE3MywgMTE3NCwgMTE3NCwgMTE3NCwgMTE3NCwgMTE3NCwgMTE3NCwgMTcyMywgMTQ4NSwKKyAgICAgMTM5OCwgIDUxMywgMTE3NSwgMTM1NCwgIDUxMiwgICA1MSwgIDUxMSwgMTE3NSwgMTE3NSwgMTE3NSwKKyAgICAgMTE3NSwgMTE3NSwgMTE3NSwgICA1MSwgIDYxNCwgMTE5OSwgMTE5OSwgMTE5OSwgMTE5OSwgMTE5OSwKKyAgICAgMTE5OSwgMTE5OSwgICA1MSwgMTcyMywgIDUxMCwgIDUwOSwgIDk4NCwgMTYzNywgIDUwOCwgIDUwNywKKyAgICAgICA1MSwgIDk4NCwgIDk4NCwgIDk4NCwgIDk4NCwgIDk4NCwgIDk4NCwgICA0OSwgIDk4NCwgIDk4NCwKIAotICAgICAxMjA5LCAxMjA5LCAxMjA5LCAxMjA5LCAxMjA5LCAxMjA5LCAgOTEwLCAxMDEyLCAxMDEyLCAxMDEyLAotICAgICAxMDEyLCAxMDEyLCAxMDEyLCAxMDEyLCAxMTAxLCAxNDAwLCAxMzc3LCAxNzI4LCAxMDEzLCAgNDEyLAotICAgICAgNDExLCAxNDIyLCAgNDEwLCAxNDIxLCAxMDEzLCAxMDEzLCAxMDEzLCAxMDEzLCAxMDEzLCAxMDEzLAotICAgICAxMjEwLCAxMjExLCAxMjExLCAxMjExLCAxMjExLCAxMjExLCAxMjExLCAxNzI4LCAgNDA5LCAgNDA4LAotICAgICAgNDA3LCAxMjEyLCAgNDA2LCAgNDA1LCAgNDA0LCAgNDAzLCAgIDU1LCAxMjEyLCAxMjEyLCAxMjEyLAotICAgICAxMjEyLCAxMjEyLCAxMjEyLCAgOTE5LCAxMDI0LCAxMDI0LCAxMDI0LCAxMDI0LCAxMDI0LCAxMDI0LAotICAgICAxMDI0LCAxMTA0LCAgNDAyLCAxNzI4LCAgIDU1LCAxMDI1LCAgNDAxLCAgNDAwLCAgMzk1LCAgMzk0LAotICAgICAxNDY4LCAxMDI1LCAxMDI1LCAxMDI1LCAxMDI1LCAxMDI1LCAxMDI1LCAxMjEzLCAxMjE0LCAxMjE0LAotICAgICAxMjE0LCAxMjE0LCAxMjE0LCAxMjE0LCAxNDY5LCAxNjk4LCAgMzkzLCAgMzkyLCAxMjE1LCAgMzkxLAotICAgICAgMzIwLCAgMzkwLCAgMzg5LCAgIDU1LCAxMjE1LCAxMjE1LCAxMjE1LCAxMjE1LCAxMjE1LCAxMjE1LAorICAgICAgOTg0LCAgOTg0LCAgOTg0LCAgOTg0LCAgOTg0LCAgIDUxLCAgMjYyLCAxMDkyLCAxMDkyLCAxMDkyLAorICAgICAxMDkyLCAxMDkyLCAxMDkyLCAxMDkyLCAgNTA2LCAgIDUxLCAxMzU1LCAxMzU1LCAgNTA1LCAxMzYxLAorICAgICAgIDUxLCAxMzYxLCAgIDUxLCAxMjAyLCAxMjAzLCAxMjAzLCAxMjAzLCAxMjAzLCAxMjAzLCAxMjAzLAorICAgICAxMzU2LCAxNzIzLCAgIDUxLCAxMzYyLCAxMjA0LCAxNzIzLCAxNjUyLCAgIDUxLCAgNTA0LCAxMjA0LAorICAgICAxMjA0LCAxMjA0LCAxMjA0LCAxMjA0LCAxMjA0LCAgOTA1LCAxMDA3LCAxMDA3LCAxMDA3LCAxMDA3LAorICAgICAxMDA3LCAxMDA3LCAxMDA3LCAxMDk2LCAxNDAzLCAxMzU2LCAxNzIzLCAxMDA4LCAxMzYyLCAgIDUxLAorICAgICAxNzIzLCAxMzYzLCAxMDA4LCAxMDA4LCAxMDA4LCAxMDA4LCAxMDA4LCAxMDA4LCAxMjA1LCAxMjA2LAorICAgICAxMjA2LCAxMjA2LCAxMjA2LCAxMjA2LCAxMjA2LCAxMzY0LCAgIDUxLCAgNTAzLCAgNTAyLCAxMjA3LAorICAgICAgNTAxLCAxNjM4LCAgIDUxLCAgNDk4LCAxMjA3LCAxMjA3LCAxMjA3LCAxMjA3LCAxMjA3LCAxMjA3LAorICAgICAgOTE0LCAxMDE5LCAxMDE5LCAxMDE5LCAxMDE5LCAxMDE5LCAxMDE5LCAxMDE5LCAxMDk5LCAgIDUxLAogCi0gICAgICA5MzAsIDEwMzksIDEwMzksIDEwMzksIDEwMzksIDEwMzksIDEwMzksIDEwMzksIDExMDcsICAzODgsCi0gICAgIDE0NjksICAgNTUsIDEwNDAsICAzODcsICAzODYsICAzODUsICAzNzksIDE0NjgsIDEwNDAsIDEwNDAsCi0gICAgIDEwNDAsIDEwNDAsIDEwNDAsIDEwNDAsIDEyMTYsIDEyMTcsIDEyMTcsIDEyMTcsIDEyMTcsIDEyMTcsCi0gICAgIDEyMTcsIDE3MjgsIDE3MjMsICAyNzksICAzNjcsIDEyMTgsICAyNzUsICAzNjQsICAyNzIsICAzNjAsCi0gICAgICAyNjYsIDEyMTgsIDEyMTgsIDEyMTgsIDEyMTgsIDEyMTgsIDEyMTgsICA5NDIsIDEwNTUsIDEwNTUsCi0gICAgIDEwNTUsIDEwNTUsIDEwNTUsIDEwNTUsIDEwNTUsIDExMTAsICAyNjAsIDE3MjgsICAxNDMsIDEwNTYsCi0gICAgICAzNDgsICAzNDcsICAzNDYsICAzNDEsIDE0NzAsIDEwNTYsIDEwNTYsIDEwNTYsIDEwNTYsIDEwNTYsCi0gICAgIDEwNTYsIDEyMTksIDEyMjAsIDEyMjAsIDEyMjAsIDEyMjAsIDEyMjAsIDEyMjAsIDE0NzEsICAzMjAsCi0gICAgICAzNDAsICAzMzksIDEyMjEsICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQsIDEyMjEsIDEyMjEsCi0gICAgIDEyMjEsIDEyMjEsIDEyMjEsIDEyMjEsIDEyMjMsIDEyMjQsIDEyMjQsIDEyMjQsIDEyMjQsIDEyMjQsCisgICAgIDEzNjQsICA0OTcsIDEwMjAsICA0OTQsIDE2MzksICAgNTEsIDEzNjMsIDEwMjAsIDEwMjAsIDEwMjAsCisgICAgIDEwMjAsIDEwMjAsIDEwMjAsIDEyMDgsIDEyMDksIDEyMDksIDEyMDksIDEyMDksIDEyMDksIDEyMDksCisgICAgIDE3MjMsICA0OTMsICAgNTEsICA0OTIsIDEyMTAsICA0OTEsICA0OTAsIDE2NDEsICAxMTUsIDEyMTAsCisgICAgIDEyMTAsIDEyMTAsIDEyMTAsIDEyMTAsIDEyMTAsICA5MjUsIDEwMzQsIDEwMzQsIDEwMzQsIDEwMzQsCisgICAgIDEwMzQsIDEwMzQsIDEwMzQsIDExMDIsICA0ODksIDE3MjMsICA0ODgsIDEwMzUsICA0NzYsICAgNTEsCisgICAgICAgNTEsIDEzNjksIDEwMzUsIDEwMzUsIDEwMzUsIDEwMzUsIDEwMzUsIDEwMzUsIDEyMTEsIDEyMTIsCisgICAgIDEyMTIsIDEyMTIsIDEyMTIsIDEyMTIsIDEyMTIsIDEzNzAsICAgNTEsICAgNTEsICA0NzUsIDEyMTMsCisgICAgICA0NzQsIDE2NTQsICAgNTEsICA0NzMsIDEyMTMsIDEyMTMsIDEyMTMsIDEyMTMsIDEyMTMsIDEyMTMsCisgICAgICA5MzcsIDEwNTAsIDEwNTAsIDEwNTAsIDEwNTAsIDEwNTAsIDEwNTAsIDEwNTAsIDExMDUsICAgNTEsCisgICAgIDEzNzAsIDE2NTcsIDEwNTEsICA0NzIsICAgNTEsICAgNTEsICAgNTEsIDEwNTEsIDEwNTEsIDEwNTEsCiAKLSAgICAgMTIyNCwgMTIyNCwgMTIyNSwgIDMzMywgMTQ3MSwgIDMzMiwgMTIyNiwgIDMzMSwgMTIyNywgIDMzMCwKLSAgICAgIDMyOSwgIDMyOCwgMTIyNiwgMTIyNiwgMTIyNiwgMTIyNiwgMTIyNiwgMTIyNiwgMTM4MiwgMTM4MywKLSAgICAgMTM4MywgMTM4MywgMTM4MywgMTM4MywgMTM4MywgMTM4NSwgMTM4NiwgMTM4NiwgMTM4NiwgMTM4NiwKLSAgICAgMTM4NiwgMTM4NiwgICA1NSwgIDMyNywgMTIyNywgMTExNywgMTIzMSwgMTIzMSwgMTIzMSwgMTIzMSwKLSAgICAgMTIzMSwgMTIzMSwgMTIzMSwgMTExOSwgIDMyNiwgIDMyMywgIDMyMiwgMTIzMiwgIDMyMSwgIDMyMCwKLSAgICAgICA1NSwgMTQwNiwgIDMxOSwgMTIzMiwgMTIzMiwgMTIzMiwgMTIzMiwgMTIzMiwgMTIzMiwgMTEyNiwKLSAgICAgMTI0MSwgMTI0MSwgMTI0MSwgMTI0MSwgMTI0MSwgMTI0MSwgMTI0MSwgMTEyOCwgMTQwNywgIDMxOCwKLSAgICAgIDMxNywgMTI0MiwgIDMxNiwgIDMxNSwgIDMxNCwgIDMxMywgIDMxMiwgMTI0MiwgMTI0MiwgMTI0MiwKLSAgICAgMTI0MiwgMTI0MiwgMTI0MiwgMTEzNywgMTI1NCwgMTI1NCwgMTI1NCwgMTI1NCwgMTI1NCwgMTI1NCwKLSAgICAgMTI1NCwgMTEzOSwgIDMxMSwgIDMxMCwgIDMwOSwgMTI1NSwgIDMwOCwgIDMwNywgIDMwNiwgIDMwNSwKKyAgICAgMTA1MSwgMTA1MSwgMTA1MSwgMTIxNCwgMTIxNSwgMTIxNSwgMTIxNSwgMTIxNSwgMTIxNSwgMTIxNSwKKyAgICAgMTYzMCwgICA1MSwgICA1MSwgICA1MSwgMTIxNiwgIDQ3MSwgMTY1NiwgICA1MSwgICA1MSwgMTIxNiwKKyAgICAgMTIxNiwgMTIxNiwgMTIxNiwgMTIxNiwgMTIxNiwgMTIxOCwgMTIxOSwgMTIxOSwgMTIxOSwgMTIxOSwKKyAgICAgMTIxOSwgMTIxOSwgMTIxOSwgMTIyMCwgICA1MSwgICA1MSwgMTY1OCwgMTIyMSwgIDQ3MCwgMTIyMiwKKyAgICAgIDQ2OSwgIDQ2OCwgMTIyMSwgMTIyMSwgMTIyMSwgMTIyMSwgMTIyMSwgMTIyMSwgMTMwOCwgMTMxMiwKKyAgICAgMTI1NSwgMTI1NSwgMTI1NSwgMTI1NSwgMTI1NSwgMTI1NSwgMTI1NSwgMTI2OSwgMTI2OSwgMTI2OSwKKyAgICAgMTI2OSwgMTI2OSwgMTI2OSwgMTI2OSwgMTIyMiwgMTExMiwgMTIyNiwgMTIyNiwgMTIyNiwgMTIyNiwKKyAgICAgMTIyNiwgMTIyNiwgMTIyNiwgMTExNCwgIDI3MiwgIDQ2NSwgIDI3NCwgMTIyNywgIDQ0OCwgIDM2MiwKKyAgICAgICA1MSwgICA1MSwgMTIyNywgMTIyNywgMTIyNywgMTIyNywgMTIyNywgMTIyNywgMTEyMSwgMTIzNiwKKyAgICAgMTIzNiwgMTIzNiwgMTIzNiwgMTIzNiwgMTIzNiwgMTIzNiwgMTEyMywgICA1MSwgICA1MSwgIDQ0NSwKIAotICAgICAgMzA0LCAxMjU1LCAxMjU1LCAxMjU1LCAxMjU1LCAxMjU1LCAxMjU1LCAxMTQ5LCAxMjY4LCAxMjY4LAotICAgICAxMjY4LCAxMjY4LCAxMjY4LCAxMjY4LCAxMjY4LCAxMTUxLCAgMzAzLCAgMzAyLCAgMzAxLCAxMjY5LAotICAgICAgMzAwLCAgMjk5LCAgMjk4LCAgMjk3LCAgMTQzLCAxMjY5LCAxMjY5LCAxMjY5LCAxMjY5LCAxMjY5LAotICAgICAxMjY5LCAxMTYxLCAxMjgyLCAxMjgyLCAxMjgyLCAxMjgyLCAxMjgyLCAxMjgyLCAxMjgyLCAxMTYzLAotICAgICAgMjk2LCAgMjk1LCAgMjk0LCAxMjgzLCAgMjkzLCAgMjkyLCAgMjkxLCAgMjkwLCAgMjg5LCAxMjgzLAotICAgICAxMjgzLCAxMjgzLCAxMjgzLCAxMjgzLCAxMjgzLCAxMDY4LCAxMjkxLCAxMjkxLCAxMjkxLCAxMjkxLAotICAgICAxMjkxLCAxMjkxLCAxMjkxLCAxMDcwLCAgMjg4LCAgMjg3LCAgMjg2LCAxMjkyLCAgMjg1LCAgMjg0LAotICAgICAgMjgzLCAgMjgyLCAgMjc5LCAxMjkyLCAxMjkyLCAxMjkyLCAxMjkyLCAxMjkyLCAxMjkyLCAxMjkzLAotICAgICAxMjk0LCAxMjk0LCAxMjk0LCAxMjk0LCAxMjk0LCAxMjk0LCAxMjk0LCAxMjk1LCAgMjY3LCAgMjcyLAotICAgICAgMjU5LCAxMjk2LCAgMjU4LCAxMjk3LCAgIDU1LCAgIDU1LCAxNDcwLCAxMjk2LCAxMjk2LCAxMjk2LAorICAgICAxMjM3LCAgNDM5LCAxNjY3LCAxNjc1LCAgIDUxLCAxMjM3LCAxMjM3LCAxMjM3LCAxMjM3LCAxMjM3LAorICAgICAxMjM3LCAxMTMyLCAxMjQ5LCAxMjQ5LCAxMjQ5LCAxMjQ5LCAxMjQ5LCAxMjQ5LCAxMjQ5LCAxMTM0LAorICAgICAgNDM5LCAgIDUxLCAgNDMyLCAxMjUwLCAgNDMyLCAgNDI0LCAxNjc2LCAgIDUxLCAxMjUwLCAxMjUwLAorICAgICAxMjUwLCAxMjUwLCAxMjUwLCAxMjUwLCAxMTQ0LCAxMjYzLCAxMjYzLCAxMjYzLCAxMjYzLCAxMjYzLAorICAgICAxMjYzLCAxMjYzLCAxMTQ2LCAgNDE1LCAgIDUxLCAgNDE0LCAxMjY0LCAgNDExLCAgNDEwLCAxNjgxLAorICAgICAgIDUxLCAxMjY0LCAxMjY0LCAxMjY0LCAxMjY0LCAxMjY0LCAxMjY0LCAxMTU2LCAxMjc3LCAxMjc3LAorICAgICAxMjc3LCAxMjc3LCAxMjc3LCAxMjc3LCAxMjc3LCAxMTU4LCAgNDA5LCAgIDUxLCAgNDA4LCAxMjc4LAorICAgICAgNDA3LCAxNjgyLCAgIDUxLCAgIDUxLCAxMjc4LCAxMjc4LCAxMjc4LCAxMjc4LCAxMjc4LCAxMjc4LAorICAgICAxMDYzLCAxMjg2LCAxMjg2LCAxMjg2LCAxMjg2LCAxMjg2LCAxMjg2LCAxMjg2LCAxMDY1LCAgIDUxLAorICAgICAgIDUxLCAgNDA2LCAxMjg3LCAxNjg4LCAxNjg1LCAgNDA1LCAgNDA0LCAxMjg3LCAxMjg3LCAxMjg3LAogCi0gICAgIDEyOTYsIDEyOTYsIDEyOTYsIDEzODksIDEzOTAsIDEzOTAsIDEzOTAsIDEzOTAsIDEzOTAsIDEzOTAsCi0gICAgIDE3MjgsICAgNTUsICAgNTUsICAgNTUsICAyNTcsICAgNTUsICAgNTUsICAgNTUsICAyNTYsIDEyOTcsCi0gICAgICAgNTUsICA2MTksICA1MjUsICA1MjUsICA1MjUsICA1MjUsICA1MjUsICA1MjUsICA1MjUsICAgNTUsCi0gICAgICAyNTUsIDE1MzQsIDE1NzYsICAgNTUsICAgNTUsICAgNTUsIDE3MjgsIDE1MDYsICAgNTUsIDEzMTgsCi0gICAgIDEzMTksIDEzMTksIDEzMTksIDEzMTksIDEzMTksIDEzMTksIDEzMjAsIDEzOTcsIDE0MTAsIDE2NjAsCi0gICAgIDEzMjEsIDE1MDcsIDE1ODYsICAyNTQsICAyNTMsICAgNTUsIDEzMjEsIDEzMjEsIDEzMjEsIDEzMjEsCi0gICAgIDEzMjEsIDEzMjEsIDExMTcsIDEzMjIsIDEzMjIsIDEzMjIsIDEzMjIsIDEzMjIsIDEzMjIsIDEzMjIsCi0gICAgIDEzMjMsICAgNTUsICAgNTUsICAgNTUsIDEzMjQsICAyNTIsIDExMjEsIDE1MDcsICAyNTEsICAyNTAsCi0gICAgIDEzMjQsIDEzMjQsIDEzMjQsIDEzMjQsIDEzMjQsIDEzMjQsICAyNDcsIDE0ODAsICAyNDQsICAgNTUsCi0gICAgICAgNTUsIDE0MjcsIDE0MjgsIDE0MjgsIDE0MjgsIDE0MjgsIDE0MjgsIDE0MjgsICAyNDEsICAyNDAsCisgICAgIDEyODcsIDEyODcsIDEyODcsIDEyODgsIDEyODksIDEyODksIDEyODksIDEyODksIDEyODksIDEyODksCisgICAgIDEyODksIDEyOTAsICAgNTEsIDEzNjksIDEzNzEsIDEyOTEsIDEzNzEsIDEyOTIsICA0MDMsICA0MDIsCisgICAgIDEyOTEsIDEyOTEsIDEyOTEsIDEyOTEsIDEyOTEsIDEyOTEsICA0MDEsIDE3MjMsIDEzNzIsICAgNTEsCisgICAgIDE3MjMsIDEzNzcsIDEzNzgsIDEzNzgsIDEzNzgsIDEzNzgsIDEzNzgsIDEzNzgsIDEzOTEsICAgNTEsCisgICAgICAgNTEsICAgNTEsIDEyOTIsICAgNTEsICA2MTQsICA1MjAsICA1MjAsICA1MjAsICA1MjAsICA1MjAsCisgICAgICA1MjAsICA1MjAsIDE3MjMsIDEzNzIsICA0MDAsIDE3MjMsICAgNTEsICAgNTEsICAgNTEsIDE0MTYsCisgICAgICAgNTEsIDEzMTMsIDEzMTQsIDEzMTQsIDEzMTQsIDEzMTQsIDEzMTQsIDEzMTQsIDEzMTUsIDEzOTIsCisgICAgICAzOTksIDE0MDUsIDEzMTYsIDE0MTcsICAzOTgsICAgNTEsIDE0MDAsIDEzMTYsIDEzMTYsIDEzMTYsCisgICAgIDEzMTYsIDEzMTYsIDEzMTYsIDExMTIsIDEzMTcsIDEzMTcsIDEzMTcsIDEzMTcsIDEzMTcsIDEzMTcsCisgICAgIDEzMTcsIDEzMTgsICAgNTEsICAzOTcsICAzOTYsIDEzMTksICAzOTUsIDExMTYsIDE0MTcsICAzOTAsCiAKLSAgICAgMTM5OCwgMTQxMSwgMTEyMSwgMTEyNiwgMTMyNSwgMTMyNSwgMTMyNSwgMTMyNSwgMTMyNSwgMTMyNSwKLSAgICAgMTMyNSwgMTMyNiwgIDIzOSwgIDIzOCwgIDIzNSwgMTMyNywgIDIzNCwgMTEzMCwgIDIzMywgIDIzMiwKLSAgICAgIDIzMSwgMTMyNywgMTMyNywgMTMyNywgMTMyNywgMTMyNywgMTMyNywgMTQzMiwgMTQzMywgMTQzMywKLSAgICAgMTQzMywgMTQzMywgMTQzMywgMTQzMywgMTQzNSwgMTQzNiwgMTQzNiwgMTQzNiwgMTQzNiwgMTQzNiwKLSAgICAgMTQzNiwgIDIzMCwgIDIyOSwgMTEzMCwgMTEzNywgMTMyOCwgMTMyOCwgMTMyOCwgMTMyOCwgMTMyOCwKLSAgICAgMTMyOCwgMTMyOCwgMTMyOSwgIDIyOCwgIDIyNywgIDIyNiwgMTMzMCwgIDIyNSwgMTE0MSwgIDIyNCwKLSAgICAgIDIyMywgIDIyMiwgMTMzMCwgMTMzMCwgMTMzMCwgMTMzMCwgMTMzMCwgMTMzMCwgMTQ0MSwgMTQ0MiwKLSAgICAgMTQ0MiwgMTQ0MiwgMTQ0MiwgMTQ0MiwgMTQ0MiwgMTQ0NCwgMTQ0NSwgMTQ0NSwgMTQ0NSwgMTQ0NSwKLSAgICAgMTQ0NSwgMTQ0NSwgIDIyMSwgIDIyMCwgMTE0MSwgMTE0OSwgMTMzMSwgMTMzMSwgMTMzMSwgMTMzMSwKLSAgICAgMTMzMSwgMTMzMSwgMTMzMSwgMTMzMiwgIDIxNiwgIDIxNSwgIDIwNSwgMTMzMywgIDIwNCwgMTE1MywKKyAgICAgMTMxOSwgMTMxOSwgMTMxOSwgMTMxOSwgMTMxOSwgMTMxOSwgMTM4MCwgMTM4MSwgMTM4MSwgMTM4MSwKKyAgICAgMTM4MSwgMTM4MSwgMTM4MSwgMTM4NCwgMTM4NSwgMTM4NSwgMTM4NSwgMTM4NSwgMTM4NSwgMTM4NSwKKyAgICAgMTQxNiwgICA1MSwgMTExNiwgMTEyMSwgMTMyMCwgMTMyMCwgMTMyMCwgMTMyMCwgMTMyMCwgMTMyMCwKKyAgICAgMTMyMCwgMTMyMSwgIDM4OSwgICA1MSwgMTcyMywgMTMyMiwgICA1MSwgMTEyNSwgICA1MSwgICA1MSwKKyAgICAgMTMyMiwgMTMyMiwgMTMyMiwgMTMyMiwgMTMyMiwgMTMyMiwgIDM4OCwgIDM4NywgIDM4NiwgMTM5MywKKyAgICAgICA1MSwgIDMxNSwgIDM4NSwgICA1MSwgIDM4NCwgIDM4MywgICA1MSwgMTQwMSwgIDM4MiwgMTcyMywKKyAgICAgIDM4MSwgMTQwNiwgMTEyNSwgMTEzMiwgMTMyMywgMTMyMywgMTMyMywgMTMyMywgMTMyMywgMTMyMywKKyAgICAgMTMyMywgMTMyNCwgMTUyOSwgIDM4MCwgMTQwMiwgMTMyNSwgIDM3NCwgMTEzNiwgIDI3NCwgIDM2MiwKKyAgICAgMTMyNSwgMTMyNSwgMTMyNSwgMTMyNSwgMTMyNSwgMTMyNSwgMTQyMiwgMTQyMywgMTQyMywgMTQyMywKKyAgICAgMTQyMywgMTQyMywgMTQyMywgMTQyNywgMTQyOCwgMTQyOCwgMTQyOCwgMTQyOCwgMTQyOCwgMTQyOCwKIAotICAgICAgMjAzLCAgMjAwLCAgMTk5LCAxMzMzLCAxMzMzLCAxMzMzLCAxMzMzLCAxMzMzLCAxMzMzLCAxNDUwLAotICAgICAxNDUxLCAxNDUxLCAxNDUxLCAxNDUxLCAxNDUxLCAxNDUxLCAxNDUzLCAxNDU0LCAxNDU0LCAxNDU0LAotICAgICAxNDU0LCAxNDU0LCAxNDU0LCAgMTk0LCAgMTkzLCAxMTUzLCAxMTYxLCAxMzM0LCAxMzM0LCAxMzM0LAotICAgICAxMzM0LCAxMzM0LCAxMzM0LCAxMzM0LCAxMzM1LCAgMTkyLCAgMTkxLCAgMTkwLCAxMzM2LCAgMTg5LAotICAgICAxMTY1LCAgMTg4LCAgMTg3LCAgMTg2LCAxMzM2LCAxMzM2LCAxMzM2LCAxMzM2LCAxMzM2LCAxMzM2LAotICAgICAxNDU5LCAxNDYwLCAxNDYwLCAxNDYwLCAxNDYwLCAxNDYwLCAxNDYwLCAxNDYyLCAxNDYzLCAxNDYzLAotICAgICAxNDYzLCAxNDYzLCAxNDYzLCAxNDYzLCAxNTA2LCAgIDU1LCAxMTY1LCAxMjIzLCAxMzM5LCAxMzM5LAotICAgICAxMzM5LCAxMzM5LCAxMzM5LCAxMzM5LCAxMzM5LCAxMjI1LCAgMTg1LCAgMTgxLCAxNzI4LCAxMzQwLAotICAgICAgMTgwLCAgMTc5LCAgMTc4LCAgIDU1LCAgMTc3LCAxMzQwLCAxMzQwLCAxMzQwLCAxMzQwLCAxMzQwLAotICAgICAxMzQwLCAxMTE3LCAxMzQ3LCAxMzQ3LCAxMzQ3LCAxMzQ3LCAxMzQ3LCAxMzQ3LCAxMzQ3LCAxMzIzLAorICAgICAgMjcwLCAgIDUxLCAxMTM2LCAxMTQ0LCAxMzI2LCAxMzI2LCAxMzI2LCAxMzI2LCAxMzI2LCAxMzI2LAorICAgICAxMzI2LCAxMzI3LCAgMzU5LCAgMjY3LCAgMzU1LCAxMzI4LCAgMjYxLCAxMTQ4LCAgIDUxLCAgMjU1LAorICAgICAxMzI4LCAxMzI4LCAxMzI4LCAxMzI4LCAxMzI4LCAxMzI4LCAxNDMwLCAxNDMxLCAxNDMxLCAxNDMxLAorICAgICAxNDMxLCAxNDMxLCAxNDMxLCAxNDM2LCAxNDM3LCAxNDM3LCAxNDM3LCAxNDM3LCAxNDM3LCAxNDM3LAorICAgICAgMTM4LCAgIDUxLCAxMTQ4LCAxMTU2LCAxMzI5LCAxMzI5LCAxMzI5LCAxMzI5LCAxMzI5LCAxMzI5LAorICAgICAxMzI5LCAxMzMwLCAgMzQzLCAgMzQyLCAgMzQxLCAxMzMxLCAgMzM2LCAxMTYwLCAgIDUxLCAgMzE1LAorICAgICAxMzMxLCAxMzMxLCAxMzMxLCAxMzMxLCAxMzMxLCAxMzMxLCAxNDM5LCAxNDQwLCAxNDQwLCAxNDQwLAorICAgICAxNDQwLCAxNDQwLCAxNDQwLCAxNDQ1LCAxNDQ2LCAxNDQ2LCAxNDQ2LCAxNDQ2LCAxNDQ2LCAxNDQ2LAorICAgICAxNDYzLCAgIDUxLCAxMTYwLCAxMjE4LCAxMzM0LCAxMzM0LCAxMzM0LCAxMzM0LCAxMzM0LCAxMzM0LAorICAgICAxMzM0LCAxMjIwLCAgMzM1LCAgMzM0LCAxNDY0LCAxMzM1LCAgMzMzLCAgMzMyLCAgIDUxLCAgIDUxLAogCi0gICAgICAxNzYsIDE1NzksICAxNzUsIDEzNDgsIDE3MjgsICAxNzQsICAxNzMsICAxNzIsICAxNzEsIDEzNDgsCi0gICAgIDEzNDgsIDEzNDgsIDEzNDgsIDEzNDgsIDEzNDgsIDExMjYsIDEzNTQsIDEzNTQsIDEzNTQsIDEzNTQsCi0gICAgIDEzNTQsIDEzNTQsIDEzNTQsIDEzMjYsICAxNzAsICAxNjksICAxNjgsIDEzNTUsICAxNjcsICAxNjYsCi0gICAgICAxNjUsICAxNjAsICAxNTEsIDEzNTUsIDEzNTUsIDEzNTUsIDEzNTUsIDEzNTUsIDEzNTUsIDExMzcsCi0gICAgIDEzNjIsIDEzNjIsIDEzNjIsIDEzNjIsIDEzNjIsIDEzNjIsIDEzNjIsIDEzMjksICAxNTAsICAxNDUsCi0gICAgICAgNTksIDEzNjMsICAgNDcsICAgNDUsIDE3MjgsIDE3MjgsIDE3MjgsIDEzNjMsIDEzNjMsIDEzNjMsCi0gICAgIDEzNjMsIDEzNjMsIDEzNjMsIDExNDksIDEzNzAsIDEzNzAsIDEzNzAsIDEzNzAsIDEzNzAsIDEzNzAsCi0gICAgIDEzNzAsIDEzMzIsIDE3MjgsIDE3MjgsIDE3MjgsIDEzNzEsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDEzNzEsIDEzNzEsIDEzNzEsIDEzNzEsIDEzNzEsIDEzNzEsIDExNjEsIDEzNzgsIDEzNzgsCi0gICAgIDEzNzgsIDEzNzgsIDEzNzgsIDEzNzgsIDEzNzgsIDEzMzUsIDE3MjgsIDE3MjgsIDE3MjgsIDEzNzksCisgICAgIDEzMzUsIDEzMzUsIDEzMzUsIDEzMzUsIDEzMzUsIDEzMzUsIDExMTIsIDEzNDIsIDEzNDIsIDEzNDIsCisgICAgIDEzNDIsIDEzNDIsIDEzNDIsIDEzNDIsIDEzMTgsIDE0NzAsICAgNTEsICAzMzEsIDEzNDMsIDE0NjQsCisgICAgICAzMzAsICAgNTEsICAgNTEsIDEzNDMsIDEzNDMsIDEzNDMsIDEzNDMsIDEzNDMsIDEzNDMsIDExMjEsCisgICAgIDEzNDksIDEzNDksIDEzNDksIDEzNDksIDEzNDksIDEzNDksIDEzNDksIDEzMjEsICAgNTEsICAgNTEsCisgICAgIDE2ODksIDEzNTAsICAzMjksIDE2OTUsIDE3MDMsICAgNTEsIDEzNTAsIDEzNTAsIDEzNTAsIDEzNTAsCisgICAgIDEzNTAsIDEzNTAsIDExMzIsIDEzNTcsIDEzNTcsIDEzNTcsIDEzNTcsIDEzNTcsIDEzNTcsIDEzNTcsCisgICAgIDEzMjQsICAzMjgsICAgNTEsICAzMjcsIDEzNTgsICAzMjYsICAzMjUsICAgNTEsICAgNTEsIDEzNTgsCisgICAgIDEzNTgsIDEzNTgsIDEzNTgsIDEzNTgsIDEzNTgsIDExNDQsIDEzNjUsIDEzNjUsIDEzNjUsIDEzNjUsCisgICAgIDEzNjUsIDEzNjUsIDEzNjUsIDEzMjcsICAgNTEsICAgNTEsIDE3MDUsIDEzNjYsICAzMjQsICAzMjMsCisgICAgIDE3MTAsICAzMjIsIDEzNjYsIDEzNjYsIDEzNjYsIDEzNjYsIDEzNjYsIDEzNjYsIDExNTYsIDEzNzMsCiAKLSAgICAgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTM3OSwgMTM3OSwgMTM3OSwgMTM3OSwgMTM3OSwKLSAgICAgMTM3OSwgMTI5MywgMTM5MSwgMTM5MSwgMTM5MSwgMTM5MSwgMTM5MSwgMTM5MSwgMTM5MSwgMTI5NSwKLSAgICAgMTcyOCwgMTcyOCwgMTcyOCwgMTM5MiwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTM5MiwKLSAgICAgMTM5MiwgMTM5MiwgMTM5MiwgMTM5MiwgMTM5MiwgMTIyMywgMTQxMiwgMTQxMiwgMTQxMiwgMTQxMiwKLSAgICAgMTQxMiwgMTQxMiwgMTQxMiwgMTQxMywgMTcyOCwgMTcyOCwgMTcyOCwgMTQxNCwgMTcyOCwgMTIyNywKLSAgICAgMTcyOCwgMTcyOCwgMTcyOCwgMTQxNCwgMTQxNCwgMTQxNCwgMTQxNCwgMTQxNCwgMTQxNCwgMTM4MywKLSAgICAgMTM4MywgMTM4MywgMTM4MywgMTM4MywgMTM4MywgMTM4MywgMTUwMCwgMTUwMSwgMTUwMSwgMTUwMSwKLSAgICAgMTUwMSwgMTUwMSwgMTUwMSwgMTUxMCwgICA1NSwgMTIyNywgMTExNywgMTIzMSwgMTIzMSwgMTIzMSwKLSAgICAgMTIzMSwgMTIzMSwgMTIzMSwgMTIzMSwgMTMyMywgMTcyOCwgMTcyOCwgMTUxMSwgMTIzMiwgMTcyOCwKLSAgICAgMTcyOCwgMTcyOCwgICA1NSwgMTcyOCwgMTIzMiwgMTIzMiwgMTIzMiwgMTIzMiwgMTIzMiwgMTIzMiwKKyAgICAgMTM3MywgMTM3MywgMTM3MywgMTM3MywgMTM3MywgMTM3MywgMTMzMCwgIDMyMSwgMTcwOSwgIDMxOCwKKyAgICAgMTM3NCwgIDMxNywgIDMxNiwgICA1MSwgICA1MSwgMTM3NCwgMTM3NCwgMTM3NCwgMTM3NCwgMTM3NCwKKyAgICAgMTM3NCwgMTI4OCwgMTM4NiwgMTM4NiwgMTM4NiwgMTM4NiwgMTM4NiwgMTM4NiwgMTM4NiwgMTI5MCwKKyAgICAgICA1MSwgICA1MSwgIDMxNSwgMTM4NywgMTcxMiwgIDMxNCwgICA1MSwgICA1MSwgMTM4NywgMTM4NywKKyAgICAgMTM4NywgMTM4NywgMTM4NywgMTM4NywgMTIxOCwgMTQwNywgMTQwNywgMTQwNywgMTQwNywgMTQwNywKKyAgICAgMTQwNywgMTQwNywgMTQwOCwgICA1MSwgICA1MSwgIDMxMywgMTQwOSwgIDMxMiwgMTIyMiwgMTcxNCwKKyAgICAgIDMxMSwgMTQwOSwgMTQwOSwgMTQwOSwgMTQwOSwgMTQwOSwgMTQwOSwgMTQ0OCwgMTQ0OSwgMTQ0OSwKKyAgICAgMTQ0OSwgMTQ0OSwgMTQ0OSwgMTQ0OSwgMTQ1NCwgMTQ1NSwgMTQ1NSwgMTQ1NSwgMTQ1NSwgMTQ1NSwKKyAgICAgMTQ1NSwgMTQ2MywgICA1MSwgMTIyMiwgMTExMiwgMTIyNiwgMTIyNiwgMTIyNiwgMTIyNiwgMTIyNiwKKyAgICAgMTIyNiwgMTIyNiwgMTMxOCwgIDMxMCwgIDMwOSwgMTcyMywgMTIyNywgIDMwOCwgIDMwNywgICA1MSwKIAotICAgICAxMTI2LCAxMjQxLCAxMjQxLCAxMjQxLCAxMjQxLCAxMjQxLCAxMjQxLCAxMjQxLCAxMzI2LCAxNzI4LAotICAgICAxNTgwLCAxNzI4LCAxMjQyLCAxNTExLCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxMjQyLCAxMjQyLAotICAgICAxMjQyLCAxMjQyLCAxMjQyLCAxMjQyLCAxMTM3LCAxMjU0LCAxMjU0LCAxMjU0LCAxMjU0LCAxMjU0LAotICAgICAxMjU0LCAxMjU0LCAxMzI5LCAxNzI4LCAxNzI4LCAxNzI4LCAxMjU1LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxMjU1LCAxMjU1LCAxMjU1LCAxMjU1LCAxMjU1LCAxMjU1LCAxMTQ5LCAxMjY4LAotICAgICAxMjY4LCAxMjY4LCAxMjY4LCAxMjY4LCAxMjY4LCAxMjY4LCAxMzMyLCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxMjY5LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxMjY5LCAxMjY5LCAxMjY5LCAxMjY5LAotICAgICAxMjY5LCAxMjY5LCAxMTYxLCAxMjgyLCAxMjgyLCAxMjgyLCAxMjgyLCAxMjgyLCAxMjgyLCAxMjgyLAotICAgICAxMzM1LCAxNzI4LCAxNzI4LCAxNzI4LCAxMjgzLCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxMjgzLCAxMjgzLCAxMjgzLCAxMjgzLCAxMjgzLCAxMjgzLCAxMjIzLCAxNDIzLCAxNDIzLCAxNDIzLAorICAgICAgIDUxLCAxMjI3LCAxMjI3LCAxMjI3LCAxMjI3LCAxMjI3LCAxMjI3LCAxMTIxLCAxMjM2LCAxMjM2LAorICAgICAxMjM2LCAxMjM2LCAxMjM2LCAxMjM2LCAxMjM2LCAxMzIxLCAxNTQyLCAgIDUxLCAgMzA2LCAxMjM3LAorICAgICAxNzIzLCAgMzA1LCAgIDUxLCAgIDUxLCAxMjM3LCAxMjM3LCAxMjM3LCAxMjM3LCAxMjM3LCAxMjM3LAorICAgICAxMTMyLCAxMjQ5LCAxMjQ5LCAxMjQ5LCAxMjQ5LCAxMjQ5LCAxMjQ5LCAxMjQ5LCAxMzI0LCAgIDUxLAorICAgICAgIDUxLCAgMzA0LCAxMjUwLCAgMzAzLCAgMzAyLCAgIDUxLCAgIDUxLCAxMjUwLCAxMjUwLCAxMjUwLAorICAgICAxMjUwLCAxMjUwLCAxMjUwLCAxMTQ0LCAxMjYzLCAxMjYzLCAxMjYzLCAxMjYzLCAxMjYzLCAxMjYzLAorICAgICAxMjYzLCAxMzI3LCAgIDUxLCAgIDUxLCAgMzAxLCAxMjY0LCAgMzAwLCAgMjk5LCAgIDUxLCAgMjk4LAorICAgICAxMjY0LCAxMjY0LCAxMjY0LCAxMjY0LCAxMjY0LCAxMjY0LCAxMTU2LCAxMjc3LCAxMjc3LCAxMjc3LAorICAgICAxMjc3LCAxMjc3LCAxMjc3LCAxMjc3LCAxMzMwLCAgIDUxLCAgMjk3LCAgMjk2LCAxMjc4LCAgMjk1LAorICAgICAgMjk0LCAgMjkzLCAgMjkyLCAxMjc4LCAxMjc4LCAxMjc4LCAxMjc4LCAxMjc4LCAxMjc4LCAxMjE4LAogCi0gICAgIDE0MjMsIDE0MjMsIDE0MjMsIDE0MjMsIDE0MTMsIDE3MjgsIDE3MjgsIDE3MjgsIDE0MjQsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsICAgNTUsIDE3MjgsIDE0MjQsIDE0MjQsIDE0MjQsIDE0MjQsIDE0MjQsIDE0MjQsCi0gICAgIDEyOTMsIDE0NzIsIDE0NzIsIDE0NzIsIDE0NzIsIDE0NzIsIDE0NzIsIDE0NzIsIDEyOTUsICAgNTUsCi0gICAgICAgNTUsICAgNTUsIDE0NzMsIDE3MjgsIDE1MTAsIDE3MjgsIDE3MjgsIDE3MjgsIDE0NzMsIDE0NzMsCi0gICAgIDE0NzMsIDE0NzMsIDE0NzMsIDE0NzMsIDE0ODcsICAgNTUsIDE3MjgsICAgNTUsIDE3MjgsICAgNTUsCi0gICAgIDE0MzMsIDE0MzMsIDE0MzMsIDE0MzMsIDE0MzMsIDE0MzMsIDE0MzMsIDE3MjgsIDE0ODQsIDE3MjgsCi0gICAgIDE3MjgsIDE0ODgsIDE1MTQsICAgNTUsIDE0ODUsIDEyMjMsIDEzMzksIDEzMzksIDEzMzksIDEzMzksCi0gICAgIDEzMzksIDEzMzksIDEzMzksIDE0MTMsIDE3MjgsIDE1NDgsIDE1MTUsIDEzNDAsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE1MTQsIDEzNDAsIDEzNDAsIDEzNDAsIDEzNDAsIDEzNDAsIDEzNDAsIDE0NDIsCi0gICAgIDE0NDIsIDE0NDIsIDE0NDIsIDE0NDIsIDE0NDIsIDE0NDIsIDE3MjgsIDE1MTgsIDE1MTgsIDE3MjgsCisgICAgIDE0MTgsIDE0MTgsIDE0MTgsIDE0MTgsIDE0MTgsIDE0MTgsIDE0MTgsIDE0MDgsICAxMzgsICAyOTEsCisgICAgICAyOTAsIDE0MTksICAyODksICAyODgsICAyODcsICAyODYsIDE0MTksIDE0MTksIDE0MTksIDE0MTksCisgICAgIDE0MTksIDE0MTksIDE0NTcsIDE0NTgsIDE0NTgsIDE0NTgsIDE0NTgsIDE0NTgsIDE0NTgsIDEzNzgsCisgICAgIDEzNzgsIDEzNzgsIDEzNzgsIDEzNzgsIDEzNzgsIDEzNzgsIDE0NjUsIDE0NjUsICAgNTEsICAgNTEsCisgICAgICAgNTEsICAgNTEsICAgNTEsIDE0OTUsIDE0OTYsIDE0OTYsIDE0OTYsIDE0OTYsIDE0OTYsIDE0OTYsCisgICAgIDE0NjYsIDE3MjMsIDE1MDEsICAyODUsICAyODQsICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAgNTEsCisgICAgICAyODMsICAyODIsICAyODEsICAyODAsICAyNzksICAyNzgsIDE1MDIsIDE0NzksIDE0ODYsIDE0NzUsCisgICAgIDE0ODMsIDE0ODIsIDE1MDEsIDE0ODAsIDE1MDUsIDE0NjYsIDE3MjMsIDEyODgsIDE0NjcsIDE0NjcsCisgICAgIDE0NjcsIDE0NjcsIDE0NjcsIDE0NjcsIDE0NjcsIDEyOTAsIDE3MjMsICAyNzcsIDE1MDYsIDE0NjgsCisgICAgICAyNzQsIDE1MDIsICAyNjIsICAyNjcsIDE0NjgsIDE0NjgsIDE0NjgsIDE0NjgsIDE0NjgsIDE0NjgsCiAKLSAgICAgMTcyOCwgMTcyOCwgMTUxNSwgMTQ1MSwgMTQ1MSwgMTQ1MSwgMTQ1MSwgMTQ1MSwgMTQ1MSwgMTQ1MSwKLSAgICAgMTUyMiwgMTUxOSwgMTcyOCwgMTQ2MCwgMTQ2MCwgMTQ2MCwgMTQ2MCwgMTQ2MCwgMTQ2MCwgMTQ2MCwKLSAgICAgMTUyMiwgMTcyOCwgMTcyOCwgMTcyOCwgMTUyMywgMTUyNiwgMTUyNywgMTUyNywgMTUyNywgMTUyNywKLSAgICAgMTUyNywgMTUyNywgMTcyOCwgICA1NSwgMTcyOCwgICA1NSwgICA1NSwgMTUxOSwgMTcyOCwgMTUyOSwKLSAgICAgMTUzMCwgMTUzMCwgMTUzMCwgMTUzMCwgMTUzMCwgMTUzMCwgICA1NSwgICA1NSwgICA1NSwgMTcyOCwKLSAgICAgMTUyMywgICA1NSwgICA1NSwgICA1NSwgICA1NSwgMTU1MSwgMTcyOCwgMTU1MSwgICA1NSwgICA1NSwKLSAgICAgMTcyOCwgICA1NSwgMTUzOCwgMTUzOSwgICA1NSwgICA1NSwgICA1NSwgMTU0MywgMTcyOCwgMTU1MiwKLSAgICAgICA1NSwgMTcyOCwgMTcyOCwgMTU0MCwgMTU0MSwgMTU0MiwgICA1NSwgICA1NSwgMTcyOCwgICA1NSwKLSAgICAgMTcyOCwgMTU0NSwgMTU1MywgMTU1NCwgMTU1NCwgMTU1NCwgMTU1NCwgMTU1NCwgMTU1NCwgMTcyOCwKLSAgICAgMTcyOCwgMTcyOCwgMTcyOCwgMTYyMiwgMTU4MiwgMTU1MiwgMTU4NywgMTcyOCwgMTU1NywgMTU1OCwKKyAgICAgMTIxOCwgMTMzNCwgMTMzNCwgMTMzNCwgMTMzNCwgMTMzNCwgMTMzNCwgMTMzNCwgMTQwOCwgIDI1NCwKKyAgICAgIDI1MywgMTcyMywgMTMzNSwgMTUwNiwgIDI1MiwgIDI1MSwgMTUwNSwgMTMzNSwgMTMzNSwgMTMzNSwKKyAgICAgMTMzNSwgMTMzNSwgMTMzNSwgMTQyOCwgMTQyOCwgMTQyOCwgMTQyOCwgMTQyOCwgMTQyOCwgMTQyOCwKKyAgICAgMTcyMywgMTQzNywgMTQzNywgMTQzNywgMTQzNywgMTQzNywgMTQzNywgMTQzNywgMTUwOSwgMTUwOSwKKyAgICAgMTQ0NiwgMTQ0NiwgMTQ0NiwgMTQ0NiwgMTQ0NiwgMTQ0NiwgMTQ0NiwgMTUxMywgMTUxMywgIDI1MCwKKyAgICAgIDI0OSwgIDI0OCwgMTUxMCwgMTcyMywgIDI0NywgMTcyMywgMTUxNywgMTUxNywgIDI0NiwgIDI0NSwKKyAgICAgIDI0MiwgMTUxNCwgMTcyMywgMTQ1NSwgMTQ1NSwgMTQ1NSwgMTQ1NSwgMTQ1NSwgMTQ1NSwgMTQ1NSwKKyAgICAgMTUxOCwgMTcyMywgIDIzOSwgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMywgMTUxMCwgMTcyMywgMTUyMSwKKyAgICAgMTUyMiwgMTUyMiwgMTUyMiwgMTUyMiwgMTUyMiwgMTUyMiwgMTUxNCwgMTcyMywgMTUyNCwgMTUyNSwKKyAgICAgMTUyNSwgMTUyNSwgMTUyNSwgMTUyNSwgMTUyNSwgMTUxOCwgMTcyMywgICA1MSwgICA1MSwgICA1MSwKIAotICAgICAxNTU4LCAxNTU4LCAxNTU4LCAxNTU4LCAxNTU4LCAxNTYxLCAxNTYyLCAxNTYyLCAxNTYyLCAxNTYyLAotICAgICAxNTYyLCAxNTYyLCAxNTY1LCAxNTY2LCAxNTY2LCAxNTY2LCAxNTY2LCAxNTY2LCAxNTY2LCAxNTY5LAotICAgICAxNTcwLCAxNTcwLCAxNTcwLCAxNTcwLCAxNTcwLCAxNTcwLCAxNTI3LCAxNTI3LCAxNTI3LCAxNTI3LAotICAgICAxNTI3LCAxNTI3LCAxNTI3LCAxNTczLCAxNTczLCAgIDU1LCAgIDU1LCAgIDU1LCAxNTg5LCAxNTkwLAotICAgICAxNTkwLCAxNTkwLCAxNTkwLCAxNTkwLCAxNTkwLCAxNzI4LCAxNzI4LCAxNTc0LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAgIDU1LCAgIDU1LCAgIDU1LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNTc4LCAxNTg1LCAxNTg4LCAxNTU0LCAxNTU0LCAxNTU0LCAxNTU0LCAxNTU0LAotICAgICAxNTU0LCAxNTU0LCAxNzI4LCAxNTc0LCAxNzI4LCAxNTU4LCAxNTU4LCAxNTU4LCAxNTU4LCAxNTU4LAotICAgICAxNTU4LCAxNTU4LCAxNTYyLCAxNTYyLCAxNTYyLCAxNTYyLCAxNTYyLCAxNTYyLCAxNTYyLCAxNTY2LAotICAgICAxNTY2LCAxNTY2LCAxNTY2LCAxNTY2LCAxNTY2LCAxNTY2LCAxNTcwLCAxNTcwLCAxNTcwLCAxNTcwLAorICAgICAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgMjMwLCAgMjI5LCAgIDUxLCAgMjI4LAorICAgICAgMjI3LCAgMjI2LCAgMjI1LCAgMjI0LCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLAorICAgICAgIDUxLCAgIDUxLCAgIDUxLCAxNTMwLCAxNTMxLCAgIDUxLCAxNTMzLCAxNTM0LCAxNTM1LCAxNTM2LAorICAgICAxNTM3LCAxNTM4LCAxNTQ2LCAxNTQwLCAxNTQ2LCAgMjIzLCAgMjIyLCAxNTQzLCAxNTQ4LCAxNTQ5LAorICAgICAxNTQ5LCAxNTQ5LCAxNTQ5LCAxNTQ5LCAxNTQ5LCAgMjIxLCAxNTQ3LCAgMjIwLCAxNzIzLCAxNTUyLAorICAgICAxNTUzLCAxNTUzLCAxNTUzLCAxNTUzLCAxNTUzLCAxNTUzLCAxNTU2LCAxNTU3LCAxNTU3LCAxNTU3LAorICAgICAxNTU3LCAxNTU3LCAxNTU3LCAxNTYwLCAxNTYxLCAxNTYxLCAxNTYxLCAxNTYxLCAxNTYxLCAxNTYxLAorICAgICAgMjE5LCAxNTQ3LCAgMjE4LCAxNzIzLCAxNTY0LCAxNTY1LCAxNTY1LCAxNTY1LCAxNTY1LCAxNTY1LAorICAgICAxNTY1LCAxNTIyLCAxNTIyLCAxNTIyLCAxNTIyLCAxNTIyLCAxNTIyLCAxNTIyLCAxNTY4LCAxNTY4LAorICAgICAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLAogCi0gICAgIDE1NzAsIDE1NzAsIDE1NzAsIDE1OTgsIDE1OTksIDE1OTksIDE1OTksIDE1OTksIDE1OTksIDE1OTksCi0gICAgICAgNTUsICAgNTUsIDE3MjgsICAgNTUsICAgNTUsICAgNTUsICAgNTUsICAgNTUsIDE1OTAsIDE1OTAsCi0gICAgIDE1OTAsIDE1OTAsIDE1OTAsIDE1OTAsIDE1OTAsICAgNTUsICAgNTUsIDE3MjgsICAgNTUsICAgNTUsCi0gICAgIDE2MDUsICAgNTUsICAgNTUsICAgNTUsICAgNTUsICAgNTUsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE2MTEsICAgNTUsICAgNTUsIDE2MDEsICAgNTUsIDE2MDYsICAgNTUsICAgNTUsCi0gICAgIDE2MDcsIDE2MDgsIDE2MDksIDE2MTIsIDE1OTksIDE1OTksIDE1OTksIDE1OTksIDE1OTksIDE1OTksCi0gICAgIDE1OTksICAgNTUsIDE2MjAsIDE2MjgsICAgNTUsICAgNTUsICAgNTUsICAgNTUsICAgNTUsICAgNTUsCi0gICAgIDE3MjgsICAgNTUsICAgNTUsIDE2MjEsICAgNTUsICAgNTUsICAgNTUsICAgNTUsIDE3MjgsICAgNTUsCi0gICAgIDE2MjMsIDE2MjUsICAgNTUsICAgNTUsIDE3MjgsIDE3MjgsICAgNTUsICAgNTUsIDE2MjksICAgNTUsCi0gICAgICAgNTUsICAgNTUsICAgNTUsICAgNTUsICAgNTUsICAgNTUsIDE2NDcsIDE2MzAsIDE2MzcsIDE3MjgsCisgICAgICAyMTcsICAyMTYsIDE1NjksIDE3MjMsICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAgNTEsCisgICAgICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAgNTEsIDE1NzMsIDE1ODAsIDE1ODMsCisgICAgICAyMTUsICAgNTEsICAgNTEsICAgNTEsICAyMTEsICAyMTAsIDE1NzEsIDE1NjksIDE3MjMsIDE1NzQsCisgICAgIDE1NzUsIDE1NzcsIDE1OTYsICAyMDAsIDE1NzgsIDE1ODEsICAxOTksIDE2MTcsICAxOTgsIDE2MDQsCisgICAgIDE1ODIsIDE1ODQsIDE1ODUsIDE1ODUsIDE1ODUsIDE1ODUsIDE1ODUsIDE1ODUsIDE1NDksIDE1NDksCisgICAgIDE1NDksIDE1NDksIDE1NDksIDE1NDksIDE1NDksIDE1NTMsIDE1NTMsIDE1NTMsIDE1NTMsIDE1NTMsCisgICAgIDE1NTMsIDE1NTMsIDE1NTcsIDE1NTcsIDE1NTcsIDE1NTcsIDE1NTcsIDE1NTcsIDE1NTcsIDE1NjEsCisgICAgIDE1NjEsIDE1NjEsIDE1NjEsIDE1NjEsIDE1NjEsIDE1NjEsIDE1NjUsIDE1NjUsIDE1NjUsIDE1NjUsCisgICAgIDE1NjUsIDE1NjUsIDE1NjUsIDE1OTMsIDE1OTQsIDE1OTQsIDE1OTQsIDE1OTQsIDE1OTQsIDE1OTQsCisgICAgICAgNTEsICAxOTUsICAgNTEsICAgNTEsICAgNTEsICAgNTEsIDE1ODUsIDE1ODUsIDE1ODUsIDE1ODUsCiAKLSAgICAgICA1NSwgICA1NSwgMTYzOCwgMTY0NSwgICA1NSwgMTYzMywgMTY0MSwgMTYzOSwgMTcyOCwgICA1NSwKLSAgICAgICA1NSwgMTY0MCwgICA1NSwgMTY0OCwgMTY0OSwgICA1NSwgMTY1MCwgMTY1MSwgMTcyOCwgICA1NSwKLSAgICAgICA1NSwgMTcyOCwgICA1NSwgICA1NSwgICA1NSwgICA1NSwgMTY1MiwgMTcyOCwgICA1NSwgMTcyOCwKLSAgICAgICA1NSwgICA1NSwgICA1NSwgICA1NSwgMTcyOCwgICA1NSwgMTY1MywgICA1NSwgICA1NSwgMTY1NCwKLSAgICAgMTcyOCwgICA1NSwgICA1NSwgICA1NSwgMTY1OCwgMTY1NiwgMTY2NiwgMTY2NSwgMTcyOCwgICA1NSwKLSAgICAgICA1NSwgICA1NSwgMTY2NCwgICA1NSwgMTY3MCwgICA1NSwgMTY3NSwgICA1NSwgMTY2NywgMTY2OCwKLSAgICAgMTY3NywgICA1NSwgICA1NSwgICA1NSwgICA1NSwgMTcyOCwgMTY3MSwgICA1NSwgMTY3MywgICA1NSwKLSAgICAgMTY3NCwgICA1NSwgICA1NSwgMTY3NiwgMTcyOCwgICA1NSwgICA1NSwgMTcyOCwgICA1NSwgICA1NSwKLSAgICAgICA1NSwgICA1NSwgICA1NSwgMTY3OCwgMTcyOCwgICA1NSwgICA1NSwgMTcyOCwgMTY4MiwgICA1NSwKLSAgICAgICA1NSwgICA1NSwgMTY4MywgMTcyOCwgICA1NSwgMTY3OSwgICA1NSwgMTY4NSwgMTY4NCwgMTY4OCwKKyAgICAgMTU4NSwgMTU4NSwgMTU4NSwgIDE5NCwgICA1MSwgICA1MSwgICA1MSwgICA1MSwgMTYwMCwgICA1MSwKKyAgICAgICA1MSwgICA1MSwgICA1MSwgMTU5NCwgMTU5NCwgMTU5NCwgMTU5NCwgMTU5NCwgMTU5NCwgMTU5NCwKKyAgICAgMTYwNiwgICA1MSwgICA1MSwgICA1MSwgICA1MSwgMTYwMSwgICA1MSwgICA1MSwgMTYwMiwgMTYwMywKKyAgICAgICA1MSwgMTYwNywgMTYxNiwgICA1MSwgICA1MSwgICA1MSwgMTYxOCwgICA1MSwgIDE4OSwgICA1MSwKKyAgICAgMTYxNSwgICA1MSwgICA1MSwgICA1MSwgICA1MSwgIDE4OCwgIDE4NywgICA1MSwgICA1MSwgICA1MSwKKyAgICAgICA1MSwgICA1MSwgICA1MSwgMTYyNCwgICA1MSwgMTYyMCwgICA1MSwgIDE4NiwgICA1MSwgICA1MSwKKyAgICAgICA1MSwgMTYyNSwgMTYyMywgMTYzMiwgICA1MSwgICA1MSwgICA1MSwgMTYzMywgICA1MSwgMTYyOCwKKyAgICAgICA1MSwgICA1MSwgMTYzMSwgMTYzNCwgMTY0MCwgICA1MSwgMTY0MiwgICA1MSwgMTYzNSwgMTYzNiwKKyAgICAgIDE4NSwgICA1MSwgICA1MSwgICA1MSwgICA1MSwgICA1MSwgICA1MSwgICA1MSwgICA1MSwgICA1MSwKKyAgICAgICA1MSwgMTY1MywgICA1MSwgMTY0MywgMTY0NCwgICA1MSwgIDE4NCwgMTY0NSwgMTY0NiwgICA1MSwKIAotICAgICAgIDU1LCAxNzI4LCAxNjg5LCAgIDU1LCAgIDU1LCAxNjkxLCAgIDU1LCAgIDU1LCAxNzI4LCAgIDU1LAotICAgICAxNjk1LCAxNjkyLCAgIDU1LCAgIDU1LCAgIDU1LCAgIDU1LCAxNzI4LCAxNzI4LCAgIDU1LCAxNjk2LAotICAgICAxNjk3LCAgIDU1LCAgIDU1LCAxNzI4LCAgIDU1LCAgIDU1LCAxNzAxLCAgIDU1LCAgIDU1LCAxNjk5LAotICAgICAgIDU1LCAgIDU1LCAgIDU1LCAgIDU1LCAxNzA0LCAxNzAyLCAgIDU1LCAgIDU1LCAgIDU1LCAxNzI4LAotICAgICAgIDU1LCAxNzA2LCAxNzA5LCAxNzAzLCAxNzA1LCAgIDU1LCAgIDU1LCAgIDU1LCAgIDU1LCAgIDU1LAotICAgICAgIDU1LCAxNzI4LCAxNzA3LCAxNzI4LCAgIDU1LCAgIDU1LCAgIDU1LCAxNzExLCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzE2LCAxNzEyLCAgIDU1LCAgIDU1LCAgIDU1LCAgIDU1LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzEzLCAxNzI4LCAxNzE4LCAxNzIxLCAxNzIyLCAgIDU1LCAxNzI4LCAxNzI4LAotICAgICAxNzI2LCAxNzI3LCAxNzI4LCAxNzIwLCAxNzI4LCAxNzI0LCAxNzI4LCAxNzI1LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAgIDU1LCAgIDQ2LCAxNzI4LCAxNzI4LCAxNzI4LAorICAgICAgIDUxLCAgIDUxLCAxNjQ3LCAgIDUxLCAxNjQ4LCAxNjQ5LCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLAorICAgICAxNjYwLCAxNjYxLCAgIDUxLCAgMTgzLCAgIDUxLCAgIDUxLCAxNjUxLCAgIDUxLCAgIDUxLCAgMTgyLAorICAgICAxNjU1LCAgIDUxLCAxNjU5LCAxNjYyLCAxNjYzLCAgIDUxLCAxNjY2LCAxNjY0LCAgIDUxLCAgIDUxLAorICAgICAxNjY4LCAgIDUxLCAgIDUxLCAxNjcwLCAgIDUxLCAgIDUxLCAxNjY1LCAgMTgxLCAgIDUxLCAgIDUxLAorICAgICAgIDUxLCAgMTgwLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAxNjY5LCAxNjczLAorICAgICAxNjcxLCAgMTc2LCAgIDUxLCAxNjcyLCAxNjc3LCAgMTc1LCAgIDUxLCAgIDUxLCAxNjc0LCAgIDUxLAorICAgICAgIDUxLCAgIDUxLCAgIDUxLCAxNjc5LCAgIDUxLCAgIDUxLCAgMTc0LCAgIDUxLCAxNjc4LCAgIDUxLAorICAgICAgIDUxLCAgIDUxLCAxNjgwLCAxNjgzLCAxNjg0LCAxNjg2LCAgIDUxLCAgMTczLCAgMTcyLCAgIDUxLAorICAgICAgIDUxLCAxNjg3LCAgIDUxLCAxNjkwLCAgIDUxLCAgMTcxLCAgMTcwLCAgIDUxLCAgIDUxLCAgMTY5LAorICAgICAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAxNjkxLCAxNjkyLCAgIDUxLCAgIDUxLCAxNjk0LCAgIDUxLAogCi0gICAgIDE3MjgsICAgNDYsICAgNDYsICAgNDYsICAgNjQsIDE3MjgsICAgNjQsICAgNjQsICAgNjQsICAgNjQsCi0gICAgICAgNjQsICAgNjQsICAgNjQsICAxNTIsIDE3MjgsICAxNTIsICAxNTksICAxNTksICAxNTksICAyNzEsCi0gICAgICAyNzEsICAyNzEsICAyODAsICAyODAsICAyODAsICAzNTksICAzNTksICAzNTksICAzNjIsICAzNjIsCi0gICAgICAzNjIsICAzNjMsICAzNjMsICAzNjMsICAzNzAsICAzNzAsICAzNzAsICAzNjgsICAzNjgsICAzNjgsCi0gICAgICAzNzQsICAzNzQsICAzNzQsICAzNzgsIDE3MjgsICAzNzgsICA0NDMsICA0NDMsICA0NDMsICA0NDgsCi0gICAgICA0NDgsICA0NDgsICA0NDksICA0NDksICA0NDksICA0NTgsICA0NTgsICA0NTgsICA0NjIsIDE3MjgsCi0gICAgICA0NjIsICA0NjMsICA0NjMsICA0NjMsICAzNzIsICAzNzIsIDE3MjgsIDE3MjgsICAzNzIsICA0NjcsCi0gICAgICA0NjcsICA0NjcsICA0NzEsICA0NzEsICA0NzEsICAzNjIsICAzNjIsICAzNjIsICA1MzIsICA1MzIsCi0gICAgICA1MzIsICA1MzYsICA1MzYsICA1MzYsICA1MzcsICA1MzcsICA1MzcsICA1MzgsICA1MzgsICA1MzgsCi0gICAgICAzNzAsICAzNzAsICAzNzAsICA1NDMsICA1NDMsICA1NDMsICA0NTYsICA0NTYsIDE3MjgsIDE3MjgsCisgICAgICAgNTEsIDE2OTYsIDE2OTcsIDE2OTMsICAgNTEsICAxNjgsIDE2OTksICAgNTEsICAgNTEsICAgNTEsCisgICAgICAgNTEsICAgNTEsIDE2OTgsICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAgNTEsIDE3MDEsCisgICAgIDE3MDAsICAgNTEsIDE3MDQsICAgNTEsICAgNTEsICAgNTEsICAxNjcsICAgNTEsICAgNTEsIDE3MDIsCisgICAgICAxNjYsICAgNTEsICAgNTEsIDE3MDYsICAxNjUsICAgNTEsIDE3MDcsICAxNjQsICAxNjMsIDE3MDgsCisgICAgICAgNTEsICAgNTEsICAgNTEsICAxNjIsIDE3MTEsICAxNjEsICAxNjAsIDE3MTMsICAxNTUsIDE3MTUsCisgICAgIDE3MTcsIDE3MTYsICAxNDYsICAxNDUsICAgNTEsICAxNDAsIDE3MTgsIDE3MjEsIDE3MjIsIDE3MTksCisgICAgICAgNTUsIDE3MjAsICAgNTIsICAgNDMsICAgNDEsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsIDE3MjMsCisgICAgIDE3MjMsICAgNTEsICAgNDIsIDE3MjMsICAgNDIsICAgNTksIDE3MjMsICAgNTksICAgNTksICAgNTksCisgICAgICAgNTksICAgNTksICAgNTksICAxNDcsIDE3MjMsICAxNDcsICAxNTQsICAxNTQsICAxNTQsICAyNjYsCisgICAgICAyNjYsICAyNjYsICAyNzUsICAyNzUsICAyNzUsICAzNTQsICAzNTQsICAzNTQsICAzNTcsICAzNTcsCiAKLSAgICAgIDQ1NiwgIDU0OCwgIDU0OCwgIDU0OCwgIDU1MiwgIDU1MiwgIDU1MiwgIDU1NiwgMTcyOCwgIDU1NiwKLSAgICAgIDU1NywgIDU1NywgIDU1NywgIDU2MSwgIDU2MSwgIDU2MSwgIDU2NSwgMTcyOCwgIDU2NSwgIDYyNCwKLSAgICAgIDYyNCwgIDYyNCwgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDYzMiwgIDYzMiwgIDYzMiwgIDYzMywgIDYzMywKLSAgICAgIDYzMywgIDY0MSwgIDY0MSwgIDY0MSwgIDY0NSwgMTcyOCwgIDY0NSwgIDY0OCwgMTcyOCwgIDY0OCwKLSAgICAgIDY0OSwgIDY0OSwgIDY0OSwgIDY1MywgIDY1MywgIDY1MywgIDY1NywgMTcyOCwgIDY1NywgIDU1NSwKLSAgICAgIDU1NSwgMTcyOCwgMTcyOCwgIDU1NSwgIDU1OSwgIDU1OSwgMTcyOCwgMTcyOCwgIDU1OSwgIDY2MywKLSAgICAgIDY2MywgIDY2MywgIDY2NywgIDY2NywgIDY2NywgIDU2NSwgIDU2NSwgMTcyOCwgIDU2NSwgIDUzNywKLSAgICAgIDUzNywgIDUzNywgIDcxMywgIDcxMywgIDcxMywgIDcxNywgIDcxNywgIDcxNywgIDcyMCwgIDcyMCwKLSAgICAgIDcyMCwgIDcyMSwgIDcyMSwgIDcyMSwgIDcyMiwgIDcyMiwgIDcyMiwgIDcyNywgIDcyNywgIDcyNywKLSAgICAgIDYzOSwgIDYzOSwgMTcyOCwgMTcyOCwgIDYzOSwgIDczMiwgIDczMiwgIDczMiwgIDczNiwgIDczNiwKKyAgICAgIDM1NywgIDM1OCwgIDM1OCwgIDM1OCwgIDM2NSwgIDM2NSwgIDM2NSwgIDM2MywgIDM2MywgIDM2MywKKyAgICAgIDM2OSwgIDM2OSwgIDM2OSwgIDM3MywgMTcyMywgIDM3MywgIDQzOCwgIDQzOCwgIDQzOCwgIDQ0MywKKyAgICAgIDQ0MywgIDQ0MywgIDQ0NCwgIDQ0NCwgIDQ0NCwgIDQ1MywgIDQ1MywgIDQ1MywgIDQ1NywgMTcyMywKKyAgICAgIDQ1NywgIDQ1OCwgIDQ1OCwgIDQ1OCwgIDM2NywgIDM2NywgMTcyMywgMTcyMywgIDM2NywgIDQ2MiwKKyAgICAgIDQ2MiwgIDQ2MiwgIDQ2NiwgIDQ2NiwgIDQ2NiwgIDM1NywgIDM1NywgIDM1NywgIDUyNywgIDUyNywKKyAgICAgIDUyNywgIDUzMSwgIDUzMSwgIDUzMSwgIDUzMiwgIDUzMiwgIDUzMiwgIDUzMywgIDUzMywgIDUzMywKKyAgICAgIDM2NSwgIDM2NSwgIDM2NSwgIDUzOCwgIDUzOCwgIDUzOCwgIDQ1MSwgIDQ1MSwgMTcyMywgMTcyMywKKyAgICAgIDQ1MSwgIDU0MywgIDU0MywgIDU0MywgIDU0NywgIDU0NywgIDU0NywgIDU1MSwgMTcyMywgIDU1MSwKKyAgICAgIDU1MiwgIDU1MiwgIDU1MiwgIDU1NiwgIDU1NiwgIDU1NiwgIDU2MCwgMTcyMywgIDU2MCwgIDYxOSwKKyAgICAgIDYxOSwgIDYxOSwgIDQ1MywgIDQ1MywgIDQ1MywgIDYyNywgIDYyNywgIDYyNywgIDYyOCwgIDYyOCwKIAotICAgICAgNzM2LCAgNjQ1LCAgNjQ1LCAxNzI4LCAgNjQ1LCAgNjQ3LCAgNjQ3LCAxNzI4LCAxNzI4LCAgNjQ3LAotICAgICAgNjQ4LCAgNjQ4LCAxNzI4LCAgNjQ4LCAgNjQ5LCAgNjQ5LCAgNjUxLCAgNjUxLCAxNzI4LCAxNzI4LAotICAgICAgNjUxLCAgNzQzLCAgNzQzLCAgNzQzLCAgNzQ3LCAgNzQ3LCAgNzQ3LCAgNjU3LCAgNjU3LCAxNzI4LAotICAgICAgNjU3LCAgNzUxLCAxNzI4LCAgNzUxLCAgNzU0LCAxNzI4LCAgNzU0LCAgNzU1LCAgNzU1LCAgNzU1LAotICAgICAgNzU5LCAgNzU5LCAgNzU5LCAgNzYzLCAxNzI4LCAgNzYzLCAgODAyLCAgODAyLCAgODAyLCAgNjQxLAotICAgICAgNjQxLCAgNjQxLCAgNjUzLCAgNjUzLCAgNjUzLCAgODEzLCAgODEzLCAgODEzLCAgODE0LCAgODE0LAotICAgICAgODE0LCAgODIyLCAgODIyLCAgODIyLCAgODI2LCAxNzI4LCAgODI2LCAgODI5LCAxNzI4LCAgODI5LAotICAgICAgODMwLCAgODMwLCAgODMwLCAgODM0LCAgODM0LCAgODM0LCAgODM4LCAxNzI4LCAgODM4LCAgODQxLAotICAgICAxNzI4LCAgODQxLCAgODQ0LCAxNzI4LCAgODQ0LCAgODQ1LCAgODQ1LCAgODQ1LCAgODQ5LCAgODQ5LAotICAgICAgODQ5LCAgODUzLCAxNzI4LCAgODUzLCAgNzUwLCAxNzI4LCAxNzI4LCAgNzUwLCAgNzUxLCAgNzUxLAorICAgICAgNjI4LCAgNjM2LCAgNjM2LCAgNjM2LCAgNjQwLCAxNzIzLCAgNjQwLCAgNjQzLCAxNzIzLCAgNjQzLAorICAgICAgNjQ0LCAgNjQ0LCAgNjQ0LCAgNjQ4LCAgNjQ4LCAgNjQ4LCAgNjUyLCAxNzIzLCAgNjUyLCAgNTUwLAorICAgICAgNTUwLCAxNzIzLCAxNzIzLCAgNTUwLCAgNTU0LCAgNTU0LCAxNzIzLCAxNzIzLCAgNTU0LCAgNjU4LAorICAgICAgNjU4LCAgNjU4LCAgNjYyLCAgNjYyLCAgNjYyLCAgNTYwLCAgNTYwLCAxNzIzLCAgNTYwLCAgNTMyLAorICAgICAgNTMyLCAgNTMyLCAgNzA4LCAgNzA4LCAgNzA4LCAgNzEyLCAgNzEyLCAgNzEyLCAgNzE1LCAgNzE1LAorICAgICAgNzE1LCAgNzE2LCAgNzE2LCAgNzE2LCAgNzE3LCAgNzE3LCAgNzE3LCAgNzIyLCAgNzIyLCAgNzIyLAorICAgICAgNjM0LCAgNjM0LCAxNzIzLCAxNzIzLCAgNjM0LCAgNzI3LCAgNzI3LCAgNzI3LCAgNzMxLCAgNzMxLAorICAgICAgNzMxLCAgNjQwLCAgNjQwLCAxNzIzLCAgNjQwLCAgNjQyLCAgNjQyLCAxNzIzLCAxNzIzLCAgNjQyLAorICAgICAgNjQzLCAgNjQzLCAxNzIzLCAgNjQzLCAgNjQ0LCAgNjQ0LCAgNjQ2LCAgNjQ2LCAxNzIzLCAxNzIzLAorICAgICAgNjQ2LCAgNzM4LCAgNzM4LCAgNzM4LCAgNzQyLCAgNzQyLCAgNzQyLCAgNjUyLCAgNjUyLCAxNzIzLAogCi0gICAgIDE3MjgsICA3NTEsICA3NTMsICA3NTMsIDE3MjgsIDE3MjgsICA3NTMsICA3NTQsICA3NTQsIDE3MjgsCi0gICAgICA3NTQsICA3NTUsICA3NTUsICA3NTcsICA3NTcsIDE3MjgsIDE3MjgsICA3NTcsICA4NjAsICA4NjAsCi0gICAgICA4NjAsICA4NjQsICA4NjQsICA4NjQsICA3NjMsICA3NjMsIDE3MjgsICA3NjMsICAgNTMsICAgNTMsCi0gICAgICAgNTMsIDE3MjgsICAgNTMsICAgNTMsICA3MjEsICA3MjEsICA3MjEsICA4OTYsICA4OTYsICA4OTYsCi0gICAgICA5MDAsICA5MDAsICA5MDAsICA5MDMsICA5MDMsICA5MDMsICA5MDYsICA5MDYsICA5MDYsICA5MDcsCi0gICAgICA5MDcsICA5MDcsICA5MDgsICA5MDgsICA5MDgsICA5MTMsICA5MTMsICA5MTMsICA4MjAsICA4MjAsCi0gICAgIDE3MjgsIDE3MjgsICA4MjAsICA5MTgsICA5MTgsICA5MTgsICA5MjIsICA5MjIsICA5MjIsICA4MjYsCi0gICAgICA4MjYsIDE3MjgsICA4MjYsICA4MjgsICA4MjgsIDE3MjgsIDE3MjgsICA4MjgsICA4MjksICA4MjksCi0gICAgIDE3MjgsICA4MjksICA4MzAsICA4MzAsICA4MzIsICA4MzIsIDE3MjgsIDE3MjgsICA4MzIsICA5MjksCi0gICAgICA5MjksICA5MjksICA5MzMsICA5MzMsICA5MzMsICA4MzgsICA4MzgsIDE3MjgsICA4MzgsICA4NDAsCisgICAgICA2NTIsICA3NDYsIDE3MjMsICA3NDYsICA3NDksIDE3MjMsICA3NDksICA3NTAsICA3NTAsICA3NTAsCisgICAgICA3NTQsICA3NTQsICA3NTQsICA3NTgsIDE3MjMsICA3NTgsICA3OTcsICA3OTcsICA3OTcsICA2MzYsCisgICAgICA2MzYsICA2MzYsICA2NDgsICA2NDgsICA2NDgsICA4MDgsICA4MDgsICA4MDgsICA4MDksICA4MDksCisgICAgICA4MDksICA4MTcsICA4MTcsICA4MTcsICA4MjEsIDE3MjMsICA4MjEsICA4MjQsIDE3MjMsICA4MjQsCisgICAgICA4MjUsICA4MjUsICA4MjUsICA4MjksICA4MjksICA4MjksICA4MzMsIDE3MjMsICA4MzMsICA4MzYsCisgICAgIDE3MjMsICA4MzYsICA4MzksIDE3MjMsICA4MzksICA4NDAsICA4NDAsICA4NDAsICA4NDQsICA4NDQsCisgICAgICA4NDQsICA4NDgsIDE3MjMsICA4NDgsICA3NDUsIDE3MjMsIDE3MjMsICA3NDUsICA3NDYsICA3NDYsCisgICAgIDE3MjMsICA3NDYsICA3NDgsICA3NDgsIDE3MjMsIDE3MjMsICA3NDgsICA3NDksICA3NDksIDE3MjMsCisgICAgICA3NDksICA3NTAsICA3NTAsICA3NTIsICA3NTIsIDE3MjMsIDE3MjMsICA3NTIsICA4NTUsICA4NTUsCisgICAgICA4NTUsICA4NTksICA4NTksICA4NTksICA3NTgsICA3NTgsIDE3MjMsICA3NTgsICAgNDksICAgNDksCiAKLSAgICAgMTcyOCwgMTcyOCwgIDg0MCwgIDg0MSwgIDg0MSwgMTcyOCwgIDg0MSwgIDg0MywgIDg0MywgMTcyOCwKLSAgICAgMTcyOCwgIDg0MywgIDg0NCwgIDg0NCwgMTcyOCwgIDg0NCwgIDg0NSwgIDg0NSwgIDg0NywgIDg0NywKLSAgICAgMTcyOCwgMTcyOCwgIDg0NywgIDk0MSwgIDk0MSwgIDk0MSwgIDk0NSwgIDk0NSwgIDk0NSwgIDg1MywKLSAgICAgIDg1MywgMTcyOCwgIDg1MywgIDk0NywgMTcyOCwgIDk0NywgIDk1MCwgMTcyOCwgIDk1MCwgIDk1MywKLSAgICAgMTcyOCwgIDk1MywgIDk1NCwgIDk1NCwgIDk1NCwgIDk1OCwgIDk1OCwgIDk1OCwgIDk2MiwgMTcyOCwKLSAgICAgIDk2MiwgICA1MywgICA1MywgICA1MywgMTcyOCwgICA1MywgICA1MywgIDk5MCwgIDk5MCwgIDk5MCwKLSAgICAgIDgyMiwgIDgyMiwgIDgyMiwgIDgzNCwgIDgzNCwgIDgzNCwgIDg0OSwgIDg0OSwgIDg0OSwgMTAwNCwKLSAgICAgMTAwNCwgMTAwNCwgMTAwNSwgMTAwNSwgMTAwNSwgMTAxMywgMTAxMywgMTAxMywgMTAxNywgMTcyOCwKLSAgICAgMTAxNywgMTAyMCwgMTcyOCwgMTAyMCwgMTAyMSwgMTAyMSwgMTAyMSwgMTAyNSwgMTAyNSwgMTAyNSwKLSAgICAgMTAyOSwgMTcyOCwgMTAyOSwgMTAzMiwgMTcyOCwgMTAzMiwgMTAzNSwgMTcyOCwgMTAzNSwgMTAzNiwKKyAgICAgICA0OSwgMTcyMywgICA0OSwgICA0OSwgIDcxNiwgIDcxNiwgIDcxNiwgIDg5MSwgIDg5MSwgIDg5MSwKKyAgICAgIDg5NSwgIDg5NSwgIDg5NSwgIDg5OCwgIDg5OCwgIDg5OCwgIDkwMSwgIDkwMSwgIDkwMSwgIDkwMiwKKyAgICAgIDkwMiwgIDkwMiwgIDkwMywgIDkwMywgIDkwMywgIDkwOCwgIDkwOCwgIDkwOCwgIDgxNSwgIDgxNSwKKyAgICAgMTcyMywgMTcyMywgIDgxNSwgIDkxMywgIDkxMywgIDkxMywgIDkxNywgIDkxNywgIDkxNywgIDgyMSwKKyAgICAgIDgyMSwgMTcyMywgIDgyMSwgIDgyMywgIDgyMywgMTcyMywgMTcyMywgIDgyMywgIDgyNCwgIDgyNCwKKyAgICAgMTcyMywgIDgyNCwgIDgyNSwgIDgyNSwgIDgyNywgIDgyNywgMTcyMywgMTcyMywgIDgyNywgIDkyNCwKKyAgICAgIDkyNCwgIDkyNCwgIDkyOCwgIDkyOCwgIDkyOCwgIDgzMywgIDgzMywgMTcyMywgIDgzMywgIDgzNSwKKyAgICAgMTcyMywgMTcyMywgIDgzNSwgIDgzNiwgIDgzNiwgMTcyMywgIDgzNiwgIDgzOCwgIDgzOCwgMTcyMywKKyAgICAgMTcyMywgIDgzOCwgIDgzOSwgIDgzOSwgMTcyMywgIDgzOSwgIDg0MCwgIDg0MCwgIDg0MiwgIDg0MiwKKyAgICAgMTcyMywgMTcyMywgIDg0MiwgIDkzNiwgIDkzNiwgIDkzNiwgIDk0MCwgIDk0MCwgIDk0MCwgIDg0OCwKIAotICAgICAxMDM2LCAxMDM2LCAxMDQwLCAxMDQwLCAxMDQwLCAxMDQ0LCAxNzI4LCAxMDQ0LCAxMDQ1LCAxNzI4LAotICAgICAxMDQ1LCAxMDQ4LCAxNzI4LCAxMDQ4LCAxMDUxLCAxNzI4LCAxMDUxLCAxMDUyLCAxMDUyLCAxMDUyLAotICAgICAxMDU2LCAxMDU2LCAxMDU2LCAxMDYwLCAxNzI4LCAxMDYwLCAgOTQ3LCAxNzI4LCAgOTQ3LCAgOTQ5LAotICAgICAxNzI4LCAxNzI4LCAgOTQ5LCAgOTUwLCAgOTUwLCAxNzI4LCAgOTUwLCAgOTUyLCAgOTUyLCAxNzI4LAotICAgICAxNzI4LCAgOTUyLCAgOTUzLCAgOTUzLCAxNzI4LCAgOTUzLCAgOTU0LCAgOTU0LCAgOTU2LCAgOTU2LAotICAgICAxNzI4LCAxNzI4LCAgOTU2LCAxMDY3LCAxMDY3LCAxMDY3LCAxMDcxLCAxMDcxLCAxMDcxLCAgOTYyLAotICAgICAgOTYyLCAxNzI4LCAgOTYyLCAgIDUzLCAgIDUzLCAgIDUzLCAxNzI4LCAgIDUzLCAgIDUzLCAgOTA3LAotICAgICAgOTA3LCAgOTA3LCAxMDk4LCAxMDk4LCAxMDk4LCAxMTAyLCAxMTAyLCAxMTAyLCAxMTA1LCAxMTA1LAotICAgICAxMTA1LCAxMTA4LCAxMTA4LCAxMTA4LCAxMTExLCAxMTExLCAxMTExLCAxMTEyLCAxMTEyLCAxMTEyLAotICAgICAxMTIwLCAxMTIwLCAxMTIwLCAxMDExLCAxMDExLCAxNzI4LCAxNzI4LCAxMDExLCAxMTI1LCAxMTI1LAorICAgICAgODQ4LCAxNzIzLCAgODQ4LCAgOTQyLCAxNzIzLCAgOTQyLCAgOTQ1LCAxNzIzLCAgOTQ1LCAgOTQ4LAorICAgICAxNzIzLCAgOTQ4LCAgOTQ5LCAgOTQ5LCAgOTQ5LCAgOTUzLCAgOTUzLCAgOTUzLCAgOTU3LCAxNzIzLAorICAgICAgOTU3LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAxNzIzLCAgIDQ5LCAgIDQ5LCAgOTg1LCAgOTg1LCAgOTg1LAorICAgICAgODE3LCAgODE3LCAgODE3LCAgODI5LCAgODI5LCAgODI5LCAgODQ0LCAgODQ0LCAgODQ0LCAgOTk5LAorICAgICAgOTk5LCAgOTk5LCAxMDAwLCAxMDAwLCAxMDAwLCAxMDA4LCAxMDA4LCAxMDA4LCAxMDEyLCAxNzIzLAorICAgICAxMDEyLCAxMDE1LCAxNzIzLCAxMDE1LCAxMDE2LCAxMDE2LCAxMDE2LCAxMDIwLCAxMDIwLCAxMDIwLAorICAgICAxMDI0LCAxNzIzLCAxMDI0LCAxMDI3LCAxNzIzLCAxMDI3LCAxMDMwLCAxNzIzLCAxMDMwLCAxMDMxLAorICAgICAxMDMxLCAxMDMxLCAxMDM1LCAxMDM1LCAxMDM1LCAxMDM5LCAxNzIzLCAxMDM5LCAxMDQwLCAxNzIzLAorICAgICAxMDQwLCAxMDQzLCAxNzIzLCAxMDQzLCAxMDQ2LCAxNzIzLCAxMDQ2LCAxMDQ3LCAxMDQ3LCAxMDQ3LAorICAgICAxMDUxLCAxMDUxLCAxMDUxLCAxMDU1LCAxNzIzLCAxMDU1LCAgOTQyLCAxNzIzLCAgOTQyLCAgOTQ0LAogCi0gICAgIDExMjUsIDExMjksIDExMjksIDExMjksIDEwMTcsIDEwMTcsIDE3MjgsIDEwMTcsIDEwMTksIDEwMTksCi0gICAgIDE3MjgsIDE3MjgsIDEwMTksIDEwMjAsIDEwMjAsIDE3MjgsIDEwMjAsIDEwMjEsIDEwMjEsIDEwMjMsCi0gICAgIDEwMjMsIDE3MjgsIDE3MjgsIDEwMjMsIDExMzYsIDExMzYsIDExMzYsIDExNDAsIDExNDAsIDExNDAsCi0gICAgIDEwMjksIDEwMjksIDE3MjgsIDEwMjksIDEwMzEsIDE3MjgsIDE3MjgsIDEwMzEsIDEwMzIsIDEwMzIsCi0gICAgIDE3MjgsIDEwMzIsIDEwMzQsIDEwMzQsIDE3MjgsIDE3MjgsIDEwMzQsIDEwMzUsIDEwMzUsIDE3MjgsCi0gICAgIDEwMzUsIDEwMzYsIDEwMzYsIDEwMzgsIDEwMzgsIDE3MjgsIDE3MjgsIDEwMzgsIDExNDgsIDExNDgsCi0gICAgIDExNDgsIDExNTIsIDExNTIsIDExNTIsIDEwNDQsIDEwNDQsIDE3MjgsIDEwNDQsIDEwNDUsIDE3MjgsCi0gICAgIDEwNDUsIDEwNDcsIDE3MjgsIDE3MjgsIDEwNDcsIDEwNDgsIDEwNDgsIDE3MjgsIDEwNDgsIDEwNTAsCi0gICAgIDEwNTAsIDE3MjgsIDE3MjgsIDEwNTAsIDEwNTEsIDEwNTEsIDE3MjgsIDEwNTEsIDEwNTIsIDEwNTIsCi0gICAgIDEwNTQsIDEwNTQsIDE3MjgsIDE3MjgsIDEwNTQsIDExNjAsIDExNjAsIDExNjAsIDExNjQsIDExNjQsCisgICAgIDE3MjMsIDE3MjMsICA5NDQsICA5NDUsICA5NDUsIDE3MjMsICA5NDUsICA5NDcsICA5NDcsIDE3MjMsCisgICAgIDE3MjMsICA5NDcsICA5NDgsICA5NDgsIDE3MjMsICA5NDgsICA5NDksICA5NDksICA5NTEsICA5NTEsCisgICAgIDE3MjMsIDE3MjMsICA5NTEsIDEwNjIsIDEwNjIsIDEwNjIsIDEwNjYsIDEwNjYsIDEwNjYsICA5NTcsCisgICAgICA5NTcsIDE3MjMsICA5NTcsICAgNDksICAgNDksICAgNDksIDE3MjMsICAgNDksICAgNDksICA5MDIsCisgICAgICA5MDIsICA5MDIsIDEwOTMsIDEwOTMsIDEwOTMsIDEwOTcsIDEwOTcsIDEwOTcsIDExMDAsIDExMDAsCisgICAgIDExMDAsIDExMDMsIDExMDMsIDExMDMsIDExMDYsIDExMDYsIDExMDYsIDExMDcsIDExMDcsIDExMDcsCisgICAgIDExMTUsIDExMTUsIDExMTUsIDEwMDYsIDEwMDYsIDE3MjMsIDE3MjMsIDEwMDYsIDExMjAsIDExMjAsCisgICAgIDExMjAsIDExMjQsIDExMjQsIDExMjQsIDEwMTIsIDEwMTIsIDE3MjMsIDEwMTIsIDEwMTQsIDEwMTQsCisgICAgIDE3MjMsIDE3MjMsIDEwMTQsIDEwMTUsIDEwMTUsIDE3MjMsIDEwMTUsIDEwMTYsIDEwMTYsIDEwMTgsCisgICAgIDEwMTgsIDE3MjMsIDE3MjMsIDEwMTgsIDExMzEsIDExMzEsIDExMzEsIDExMzUsIDExMzUsIDExMzUsCiAKLSAgICAgMTE2NCwgMTA2MCwgMTA2MCwgMTcyOCwgMTA2MCwgMTE2NiwgMTcyOCwgMTE2NiwgMTE2OSwgMTcyOCwKLSAgICAgMTE2OSwgMTE3MiwgMTcyOCwgMTE3MiwgMTE3MywgMTE3MywgMTE3MywgMTE3NywgMTE3NywgMTE3NywKLSAgICAgMTE4MSwgMTcyOCwgMTE4MSwgICA1MywgICA1MywgICA1MywgMTcyOCwgICA1MywgICA1MywgMTIwNSwKLSAgICAgMTIwNSwgMTIwNSwgMTAxMywgMTAxMywgMTAxMywgMTAyNSwgMTAyNSwgMTAyNSwgMTA0MCwgMTA0MCwKLSAgICAgMTA0MCwgMTA1NiwgMTA1NiwgMTA1NiwgMTIyMiwgMTIyMiwgMTIyMiwgMTIyOCwgMTIyOCwgMTIyOCwKLSAgICAgMTIyNiwgMTIyNiwgMTIyNiwgMTIzMywgMTIzMywgMTIzMywgMTIzMiwgMTIzMiwgMTIzMiwgMTIzNCwKLSAgICAgMTcyOCwgMTIzNCwgMTIzNywgMTcyOCwgMTIzNywgMTIzOCwgMTIzOCwgMTIzOCwgMTI0MywgMTI0MywKLSAgICAgMTI0MywgMTI0MiwgMTI0MiwgMTI0MiwgMTI0NCwgMTcyOCwgMTI0NCwgMTI0NywgMTcyOCwgMTI0NywKLSAgICAgMTI1MCwgMTcyOCwgMTI1MCwgMTI1MSwgMTI1MSwgMTI1MSwgMTI1NiwgMTI1NiwgMTI1NiwgMTI1NSwKLSAgICAgMTI1NSwgMTI1NSwgMTI1NywgMTcyOCwgMTI1NywgMTI1OCwgMTcyOCwgMTI1OCwgMTI2MSwgMTcyOCwKKyAgICAgMTAyNCwgMTAyNCwgMTcyMywgMTAyNCwgMTAyNiwgMTcyMywgMTcyMywgMTAyNiwgMTAyNywgMTAyNywKKyAgICAgMTcyMywgMTAyNywgMTAyOSwgMTAyOSwgMTcyMywgMTcyMywgMTAyOSwgMTAzMCwgMTAzMCwgMTcyMywKKyAgICAgMTAzMCwgMTAzMSwgMTAzMSwgMTAzMywgMTAzMywgMTcyMywgMTcyMywgMTAzMywgMTE0MywgMTE0MywKKyAgICAgMTE0MywgMTE0NywgMTE0NywgMTE0NywgMTAzOSwgMTAzOSwgMTcyMywgMTAzOSwgMTA0MCwgMTcyMywKKyAgICAgMTA0MCwgMTA0MiwgMTcyMywgMTcyMywgMTA0MiwgMTA0MywgMTA0MywgMTcyMywgMTA0MywgMTA0NSwKKyAgICAgMTA0NSwgMTcyMywgMTcyMywgMTA0NSwgMTA0NiwgMTA0NiwgMTcyMywgMTA0NiwgMTA0NywgMTA0NywKKyAgICAgMTA0OSwgMTA0OSwgMTcyMywgMTcyMywgMTA0OSwgMTE1NSwgMTE1NSwgMTE1NSwgMTE1OSwgMTE1OSwKKyAgICAgMTE1OSwgMTA1NSwgMTA1NSwgMTcyMywgMTA1NSwgMTE2MSwgMTcyMywgMTE2MSwgMTE2NCwgMTcyMywKKyAgICAgMTE2NCwgMTE2NywgMTcyMywgMTE2NywgMTE2OCwgMTE2OCwgMTE2OCwgMTE3MiwgMTE3MiwgMTE3MiwKKyAgICAgMTE3NiwgMTcyMywgMTE3NiwgICA0OSwgICA0OSwgICA0OSwgMTcyMywgICA0OSwgICA0OSwgMTIwMCwKIAotICAgICAxMjYxLCAxMjY0LCAxNzI4LCAxMjY0LCAxMjY1LCAxMjY1LCAxMjY1LCAxMjcwLCAxMjcwLCAxMjcwLAotICAgICAxMjY5LCAxMjY5LCAxMjY5LCAxMjcxLCAxNzI4LCAxMjcxLCAxMjcyLCAxNzI4LCAxMjcyLCAxMjc1LAotICAgICAxNzI4LCAxMjc1LCAxMjc4LCAxNzI4LCAxMjc4LCAxMjc5LCAxMjc5LCAxMjc5LCAxMjg0LCAxMjg0LAotICAgICAxMjg0LCAxMjgzLCAxMjgzLCAxMjgzLCAxMjg1LCAxNzI4LCAxMjg1LCAxMTY2LCAxNzI4LCAxMTY2LAotICAgICAxMTY4LCAxNzI4LCAxNzI4LCAxMTY4LCAxMTY5LCAxMTY5LCAxNzI4LCAxMTY5LCAxMTcxLCAxMTcxLAotICAgICAxNzI4LCAxNzI4LCAxMTcxLCAxMTcyLCAxMTcyLCAxNzI4LCAxMTcyLCAxMTczLCAxMTczLCAxMTc1LAotICAgICAxMTc1LCAxNzI4LCAxNzI4LCAxMTc1LCAxMjkyLCAxMjkyLCAxMjkyLCAxMjk2LCAxMjk2LCAxMjk2LAotICAgICAxMTgxLCAxMTgxLCAxNzI4LCAxMTgxLCAgIDUzLCAgIDUzLCAgIDUzLCAxNzI4LCAgIDUzLCAgIDUzLAotICAgICAxMTEyLCAxMTEyLCAxMTEyLCAxMzI0LCAxMzI0LCAxMzI0LCAxMzI3LCAxMzI3LCAxMzI3LCAxMzMwLAotICAgICAxMzMwLCAxMzMwLCAxMzMzLCAxMzMzLCAxMzMzLCAxMzM2LCAxMzM2LCAxMzM2LCAxMzQxLCAxMzQxLAorICAgICAxMjAwLCAxMjAwLCAxMDA4LCAxMDA4LCAxMDA4LCAxMDIwLCAxMDIwLCAxMDIwLCAxMDM1LCAxMDM1LAorICAgICAxMDM1LCAxMDUxLCAxMDUxLCAxMDUxLCAxMjE3LCAxMjE3LCAxMjE3LCAxMjIzLCAxMjIzLCAxMjIzLAorICAgICAxMjIxLCAxMjIxLCAxMjIxLCAxMjI4LCAxMjI4LCAxMjI4LCAxMjI3LCAxMjI3LCAxMjI3LCAxMjI5LAorICAgICAxNzIzLCAxMjI5LCAxMjMyLCAxNzIzLCAxMjMyLCAxMjMzLCAxMjMzLCAxMjMzLCAxMjM4LCAxMjM4LAorICAgICAxMjM4LCAxMjM3LCAxMjM3LCAxMjM3LCAxMjM5LCAxNzIzLCAxMjM5LCAxMjQyLCAxNzIzLCAxMjQyLAorICAgICAxMjQ1LCAxNzIzLCAxMjQ1LCAxMjQ2LCAxMjQ2LCAxMjQ2LCAxMjUxLCAxMjUxLCAxMjUxLCAxMjUwLAorICAgICAxMjUwLCAxMjUwLCAxMjUyLCAxNzIzLCAxMjUyLCAxMjUzLCAxNzIzLCAxMjUzLCAxMjU2LCAxNzIzLAorICAgICAxMjU2LCAxMjU5LCAxNzIzLCAxMjU5LCAxMjYwLCAxMjYwLCAxMjYwLCAxMjY1LCAxMjY1LCAxMjY1LAorICAgICAxMjY0LCAxMjY0LCAxMjY0LCAxMjY2LCAxNzIzLCAxMjY2LCAxMjY3LCAxNzIzLCAxMjY3LCAxMjcwLAorICAgICAxNzIzLCAxMjcwLCAxMjczLCAxNzIzLCAxMjczLCAxMjc0LCAxMjc0LCAxMjc0LCAxMjc5LCAxMjc5LAogCi0gICAgIDEzNDEsIDEzNDAsIDEzNDAsIDEzNDAsIDEzNDMsIDE3MjgsIDEzNDMsIDEzNDQsIDEzNDQsIDEzNDQsCi0gICAgIDEyMzAsIDEyMzAsIDE3MjgsIDE3MjgsIDEyMzAsIDEzNDgsIDEzNDgsIDEzNDgsIDEzNDksIDEzNDksCi0gICAgIDEzNDksIDEyMzQsIDEyMzQsIDE3MjgsIDEyMzQsIDEyMzYsIDEyMzYsIDE3MjgsIDE3MjgsIDEyMzYsCi0gICAgIDEyMzcsIDEyMzcsIDE3MjgsIDEyMzcsIDEyMzgsIDEyMzgsIDEyNDAsIDEyNDAsIDE3MjgsIDE3MjgsCi0gICAgIDEyNDAsIDEzNTUsIDEzNTUsIDEzNTUsIDEzNTYsIDEzNTYsIDEzNTYsIDEyNDQsIDEyNDQsIDE3MjgsCi0gICAgIDEyNDQsIDEyNDYsIDE3MjgsIDE3MjgsIDEyNDYsIDEyNDcsIDEyNDcsIDE3MjgsIDEyNDcsIDEyNDksCi0gICAgIDEyNDksIDE3MjgsIDE3MjgsIDEyNDksIDEyNTAsIDEyNTAsIDE3MjgsIDEyNTAsIDEyNTEsIDEyNTEsCi0gICAgIDEyNTMsIDEyNTMsIDE3MjgsIDE3MjgsIDEyNTMsIDEzNjMsIDEzNjMsIDEzNjMsIDEzNjQsIDEzNjQsCi0gICAgIDEzNjQsIDEyNTcsIDEyNTcsIDE3MjgsIDEyNTcsIDEyNTgsIDE3MjgsIDEyNTgsIDEyNjAsIDE3MjgsCi0gICAgIDE3MjgsIDEyNjAsIDEyNjEsIDEyNjEsIDE3MjgsIDEyNjEsIDEyNjMsIDEyNjMsIDE3MjgsIDE3MjgsCisgICAgIDEyNzksIDEyNzgsIDEyNzgsIDEyNzgsIDEyODAsIDE3MjMsIDEyODAsIDExNjEsIDE3MjMsIDExNjEsCisgICAgIDExNjMsIDE3MjMsIDE3MjMsIDExNjMsIDExNjQsIDExNjQsIDE3MjMsIDExNjQsIDExNjYsIDExNjYsCisgICAgIDE3MjMsIDE3MjMsIDExNjYsIDExNjcsIDExNjcsIDE3MjMsIDExNjcsIDExNjgsIDExNjgsIDExNzAsCisgICAgIDExNzAsIDE3MjMsIDE3MjMsIDExNzAsIDEyODcsIDEyODcsIDEyODcsIDEyOTEsIDEyOTEsIDEyOTEsCisgICAgIDExNzYsIDExNzYsIDE3MjMsIDExNzYsICAgNDksICAgNDksICAgNDksIDE3MjMsICAgNDksICAgNDksCisgICAgIDExMDcsIDExMDcsIDExMDcsIDEzMTksIDEzMTksIDEzMTksIDEzMjIsIDEzMjIsIDEzMjIsIDEzMjUsCisgICAgIDEzMjUsIDEzMjUsIDEzMjgsIDEzMjgsIDEzMjgsIDEzMzEsIDEzMzEsIDEzMzEsIDEzMzYsIDEzMzYsCisgICAgIDEzMzYsIDEzMzUsIDEzMzUsIDEzMzUsIDEzMzgsIDE3MjMsIDEzMzgsIDEzMzksIDEzMzksIDEzMzksCisgICAgIDEyMjUsIDEyMjUsIDE3MjMsIDE3MjMsIDEyMjUsIDEzNDMsIDEzNDMsIDEzNDMsIDEzNDQsIDEzNDQsCisgICAgIDEzNDQsIDEyMjksIDEyMjksIDE3MjMsIDEyMjksIDEyMzEsIDEyMzEsIDE3MjMsIDE3MjMsIDEyMzEsCiAKLSAgICAgMTI2MywgMTI2NCwgMTI2NCwgMTcyOCwgMTI2NCwgMTI2NSwgMTI2NSwgMTI2NywgMTI2NywgMTcyOCwKLSAgICAgMTcyOCwgMTI2NywgMTM3MSwgMTM3MSwgMTM3MSwgMTM3MiwgMTM3MiwgMTM3MiwgMTI3MSwgMTI3MSwKLSAgICAgMTcyOCwgMTI3MSwgMTI3MiwgMTcyOCwgMTI3MiwgMTI3NCwgMTcyOCwgMTcyOCwgMTI3NCwgMTI3NSwKLSAgICAgMTI3NSwgMTcyOCwgMTI3NSwgMTI3NywgMTI3NywgMTcyOCwgMTcyOCwgMTI3NywgMTI3OCwgMTI3OCwKLSAgICAgMTcyOCwgMTI3OCwgMTI3OSwgMTI3OSwgMTI4MSwgMTI4MSwgMTcyOCwgMTcyOCwgMTI4MSwgMTM3OSwKLSAgICAgMTM3OSwgMTM3OSwgMTM4MCwgMTM4MCwgMTM4MCwgMTI4NSwgMTI4NSwgMTcyOCwgMTI4NSwgMTM4MSwKLSAgICAgMTcyOCwgMTM4MSwgMTM4NCwgMTcyOCwgMTM4NCwgMTM4NywgMTcyOCwgMTM4NywgMTM4OCwgMTM4OCwKLSAgICAgMTM4OCwgMTM5MywgMTcyOCwgMTM5MywgMTM5MiwgMTM5MiwgMTM5MiwgMTM5NCwgMTcyOCwgMTM5NCwKLSAgICAgICA1MywgICA1MywgICA1MywgMTcyOCwgICA1MywgICA1MywgMTQxNSwgMTcyOCwgMTQxNSwgMTQxNCwKLSAgICAgMTQxNCwgMTQxNCwgMTQxNiwgMTcyOCwgMTQxNiwgMTIzMiwgMTIzMiwgMTIzMiwgMTQxNywgMTcyOCwKKyAgICAgMTIzMiwgMTIzMiwgMTcyMywgMTIzMiwgMTIzMywgMTIzMywgMTIzNSwgMTIzNSwgMTcyMywgMTcyMywKKyAgICAgMTIzNSwgMTM1MCwgMTM1MCwgMTM1MCwgMTM1MSwgMTM1MSwgMTM1MSwgMTIzOSwgMTIzOSwgMTcyMywKKyAgICAgMTIzOSwgMTI0MSwgMTcyMywgMTcyMywgMTI0MSwgMTI0MiwgMTI0MiwgMTcyMywgMTI0MiwgMTI0NCwKKyAgICAgMTI0NCwgMTcyMywgMTcyMywgMTI0NCwgMTI0NSwgMTI0NSwgMTcyMywgMTI0NSwgMTI0NiwgMTI0NiwKKyAgICAgMTI0OCwgMTI0OCwgMTcyMywgMTcyMywgMTI0OCwgMTM1OCwgMTM1OCwgMTM1OCwgMTM1OSwgMTM1OSwKKyAgICAgMTM1OSwgMTI1MiwgMTI1MiwgMTcyMywgMTI1MiwgMTI1MywgMTcyMywgMTI1MywgMTI1NSwgMTcyMywKKyAgICAgMTcyMywgMTI1NSwgMTI1NiwgMTI1NiwgMTcyMywgMTI1NiwgMTI1OCwgMTI1OCwgMTcyMywgMTcyMywKKyAgICAgMTI1OCwgMTI1OSwgMTI1OSwgMTcyMywgMTI1OSwgMTI2MCwgMTI2MCwgMTI2MiwgMTI2MiwgMTcyMywKKyAgICAgMTcyMywgMTI2MiwgMTM2NiwgMTM2NiwgMTM2NiwgMTM2NywgMTM2NywgMTM2NywgMTI2NiwgMTI2NiwKKyAgICAgMTcyMywgMTI2NiwgMTI2NywgMTcyMywgMTI2NywgMTI2OSwgMTcyMywgMTcyMywgMTI2OSwgMTI3MCwKIAotICAgICAxNDE3LCAxMjQyLCAxMjQyLCAxMjQyLCAxNDE4LCAxNzI4LCAxNDE4LCAxMjU1LCAxMjU1LCAxMjU1LAotICAgICAxNDE5LCAxNzI4LCAxNDE5LCAxMjY5LCAxMjY5LCAxMjY5LCAxNDIwLCAxNzI4LCAxNDIwLCAxMjgzLAotICAgICAxMjgzLCAxMjgzLCAxMzM4LCAxMzM4LCAxNzI4LCAxNzI4LCAxMzM4LCAxNDI0LCAxNDI0LCAxNDI0LAotICAgICAxNDI1LCAxNDI1LCAxNDI1LCAgMzcwLCAgMzcwLCAgMzcwLCAxMzQzLCAxMzQzLCAxNzI4LCAxMzQzLAotICAgICAxNDI2LCAxNDI2LCAxNDI2LCAxNDI5LCAxNzI4LCAxNDI5LCAxNDMwLCAxNDMwLCAxNDMwLCAxNDMxLAotICAgICAxNDMxLCAxNDMxLCAxNDM0LCAxNzI4LCAxNDM0LCAxNDM3LCAxNzI4LCAxNDM3LCAxNDM4LCAxNDM4LAotICAgICAxNDM4LCAxNDM5LCAxNDM5LCAxNDM5LCAxNDQwLCAxNzI4LCAxNDQwLCAxNDQzLCAxNzI4LCAxNDQzLAotICAgICAxNDQ2LCAxNzI4LCAxNDQ2LCAxNDQ3LCAxNDQ3LCAxNDQ3LCAxNDQ4LCAxNDQ4LCAxNDQ4LCAxNDQ5LAotICAgICAxNzI4LCAxNDQ5LCAxNDUyLCAxNzI4LCAxNDUyLCAxNDU1LCAxNzI4LCAxNDU1LCAxNDU2LCAxNDU2LAotICAgICAxNDU2LCAxNDU3LCAxNDU3LCAxNDU3LCAxNDU4LCAxNzI4LCAxNDU4LCAxNDYxLCAxNzI4LCAxNDYxLAorICAgICAxMjcwLCAxNzIzLCAxMjcwLCAxMjcyLCAxMjcyLCAxNzIzLCAxNzIzLCAxMjcyLCAxMjczLCAxMjczLAorICAgICAxNzIzLCAxMjczLCAxMjc0LCAxMjc0LCAxMjc2LCAxMjc2LCAxNzIzLCAxNzIzLCAxMjc2LCAxMzc0LAorICAgICAxMzc0LCAxMzc0LCAxMzc1LCAxMzc1LCAxMzc1LCAxMjgwLCAxMjgwLCAxNzIzLCAxMjgwLCAxMzc2LAorICAgICAxNzIzLCAxMzc2LCAxMzc5LCAxNzIzLCAxMzc5LCAxMzgyLCAxNzIzLCAxMzgyLCAxMzgzLCAxMzgzLAorICAgICAxMzgzLCAxMzg4LCAxNzIzLCAxMzg4LCAxMzg3LCAxMzg3LCAxMzg3LCAxMzg5LCAxNzIzLCAxMzg5LAorICAgICAgIDQ5LCAgIDQ5LCAgIDQ5LCAxNzIzLCAgIDQ5LCAgIDQ5LCAxNDEwLCAxNzIzLCAxNDEwLCAxNDA5LAorICAgICAxNDA5LCAxNDA5LCAxNDExLCAxNzIzLCAxNDExLCAxMjI3LCAxMjI3LCAxMjI3LCAxNDEyLCAxNzIzLAorICAgICAxNDEyLCAxMjM3LCAxMjM3LCAxMjM3LCAxNDEzLCAxNzIzLCAxNDEzLCAxMjUwLCAxMjUwLCAxMjUwLAorICAgICAxNDE0LCAxNzIzLCAxNDE0LCAxMjY0LCAxMjY0LCAxMjY0LCAxNDE1LCAxNzIzLCAxNDE1LCAxMjc4LAorICAgICAxMjc4LCAxMjc4LCAxMzMzLCAxMzMzLCAxNzIzLCAxNzIzLCAxMzMzLCAxNDE5LCAxNDE5LCAxNDE5LAogCi0gICAgIDE0NjQsIDE3MjgsIDE0NjQsIDE0NjUsIDE0NjUsIDE0NjUsIDE0NjYsIDE0NjYsIDE0NjYsIDEzODEsCi0gICAgIDE3MjgsIDEzODEsIDEzODMsIDE3MjgsIDE3MjgsIDEzODMsIDEzODQsIDEzODQsIDE3MjgsIDEzODQsCi0gICAgIDEzODYsIDEzODYsIDE3MjgsIDE3MjgsIDEzODYsIDEzODcsIDEzODcsIDE3MjgsIDEzODcsIDEzODgsCi0gICAgIDEzODgsIDEzOTAsIDEzOTAsIDE3MjgsIDE3MjgsIDEzOTAsIDE0NzMsIDE0NzMsIDE0NzMsIDE0NzQsCi0gICAgIDE3MjgsIDE0NzQsIDEzOTQsIDEzOTQsIDE3MjgsIDEzOTQsICAgNTMsICAgNTMsICAgNTMsIDE3MjgsCi0gICAgICAgNTMsICAgNTMsIDE0OTIsIDE0OTIsIDE0OTIsIDEzNDAsIDEzNDAsIDEzNDAsIDE0OTQsIDE3MjgsCi0gICAgIDE0OTQsIDE0OTUsIDE3MjgsIDE0OTUsIDE0OTYsIDE3MjgsIDE0OTYsIDE0OTcsIDE3MjgsIDE0OTcsCi0gICAgIDE0OTgsIDE3MjgsIDE0OTgsIDE0OTksIDE3MjgsIDE0OTksIDE1MDIsIDE3MjgsIDE1MDIsIDE1MDMsCi0gICAgIDE1MDMsIDE1MDMsIDE1MDQsIDE1MDQsIDE1MDQsIDE1MDUsIDE3MjgsIDE1MDUsIDE0MjgsIDE0MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE0MjgsIDE0MjksIDE0MjksIDE3MjgsIDE0MjksIDE0MzAsIDE0MzAsIDE1MDgsCisgICAgIDE0MjAsIDE0MjAsIDE0MjAsICAzNjUsICAzNjUsICAzNjUsIDEzMzgsIDEzMzgsIDE3MjMsIDEzMzgsCisgICAgIDE0MjEsIDE0MjEsIDE0MjEsIDE0MjQsIDE3MjMsIDE0MjQsIDE0MjUsIDE0MjUsIDE0MjUsIDE0MjYsCisgICAgIDE0MjYsIDE0MjYsIDE0MjksIDE3MjMsIDE0MjksIDE0MzIsIDE3MjMsIDE0MzIsIDE0MzMsIDE0MzMsCisgICAgIDE0MzMsIDE0MzQsIDE0MzQsIDE0MzQsIDE0MzUsIDE3MjMsIDE0MzUsIDE0MzgsIDE3MjMsIDE0MzgsCisgICAgIDE0NDEsIDE3MjMsIDE0NDEsIDE0NDIsIDE0NDIsIDE0NDIsIDE0NDMsIDE0NDMsIDE0NDMsIDE0NDQsCisgICAgIDE3MjMsIDE0NDQsIDE0NDcsIDE3MjMsIDE0NDcsIDE0NTAsIDE3MjMsIDE0NTAsIDE0NTEsIDE0NTEsCisgICAgIDE0NTEsIDE0NTIsIDE0NTIsIDE0NTIsIDE0NTMsIDE3MjMsIDE0NTMsIDE0NTYsIDE3MjMsIDE0NTYsCisgICAgIDE0NTksIDE3MjMsIDE0NTksIDE0NjAsIDE0NjAsIDE0NjAsIDE0NjEsIDE0NjEsIDE0NjEsIDEzNzYsCisgICAgIDE3MjMsIDEzNzYsIDEzNzgsIDE3MjMsIDE3MjMsIDEzNzgsIDEzNzksIDEzNzksIDE3MjMsIDEzNzksCisgICAgIDEzODEsIDEzODEsIDE3MjMsIDE3MjMsIDEzODEsIDEzODIsIDEzODIsIDE3MjMsIDEzODIsIDEzODMsCiAKLSAgICAgMTcyOCwgMTUwOCwgMTQzMywgMTcyOCwgMTcyOCwgMTQzMywgMTQzNCwgMTQzNCwgMTcyOCwgMTQzNCwKLSAgICAgMTQzNiwgMTQzNiwgMTcyOCwgMTcyOCwgMTQzNiwgMTQzNywgMTQzNywgMTcyOCwgMTQzNywgMTQzOCwKLSAgICAgMTQzOCwgMTUxMiwgMTcyOCwgMTUxMiwgMTQ0MCwgMTcyOCwgMTQ0MCwgMTQ0MiwgMTcyOCwgMTcyOCwKLSAgICAgMTQ0MiwgMTQ0MywgMTQ0MywgMTcyOCwgMTQ0MywgMTQ0NSwgMTQ0NSwgMTcyOCwgMTcyOCwgMTQ0NSwKLSAgICAgMTQ0NiwgMTQ0NiwgMTcyOCwgMTQ0NiwgMTQ0NywgMTQ0NywgMTUxNiwgMTcyOCwgMTUxNiwgMTQ0OSwKLSAgICAgMTcyOCwgMTQ0OSwgMTQ1MSwgMTcyOCwgMTcyOCwgMTQ1MSwgMTQ1MiwgMTQ1MiwgMTcyOCwgMTQ1MiwKLSAgICAgMTQ1NCwgMTQ1NCwgMTcyOCwgMTcyOCwgMTQ1NCwgMTQ1NSwgMTQ1NSwgMTcyOCwgMTQ1NSwgMTQ1NiwKLSAgICAgMTQ1NiwgMTUyMCwgMTcyOCwgMTUyMCwgMTQ1OCwgMTcyOCwgMTQ1OCwgMTQ2MCwgMTcyOCwgMTcyOCwKLSAgICAgMTQ2MCwgMTQ2MSwgMTQ2MSwgMTcyOCwgMTQ2MSwgMTQ2MywgMTQ2MywgMTcyOCwgMTcyOCwgMTQ2MywKLSAgICAgMTQ2NCwgMTQ2NCwgMTcyOCwgMTQ2NCwgMTQ2NSwgMTQ2NSwgMTUyNCwgMTcyOCwgMTUyNCwgMTUyNSwKKyAgICAgMTM4MywgMTM4NSwgMTM4NSwgMTcyMywgMTcyMywgMTM4NSwgMTQ2OCwgMTQ2OCwgMTQ2OCwgMTQ2OSwKKyAgICAgMTcyMywgMTQ2OSwgMTM4OSwgMTM4OSwgMTcyMywgMTM4OSwgICA0OSwgICA0OSwgICA0OSwgMTcyMywKKyAgICAgICA0OSwgICA0OSwgMTQ4NywgMTQ4NywgMTQ4NywgMTMzNSwgMTMzNSwgMTMzNSwgMTQ4OSwgMTcyMywKKyAgICAgMTQ4OSwgMTQ5MCwgMTcyMywgMTQ5MCwgMTQ5MSwgMTcyMywgMTQ5MSwgMTQ5MiwgMTcyMywgMTQ5MiwKKyAgICAgMTQ5MywgMTcyMywgMTQ5MywgMTQ5NCwgMTcyMywgMTQ5NCwgMTQ5NywgMTcyMywgMTQ5NywgMTQ5OCwKKyAgICAgMTQ5OCwgMTQ5OCwgMTQ5OSwgMTQ5OSwgMTQ5OSwgMTUwMCwgMTcyMywgMTUwMCwgMTQyMywgMTQyMywKKyAgICAgMTcyMywgMTcyMywgMTQyMywgMTQyNCwgMTQyNCwgMTcyMywgMTQyNCwgMTQyNSwgMTQyNSwgMTUwMywKKyAgICAgMTcyMywgMTUwMywgMTQyOCwgMTcyMywgMTcyMywgMTQyOCwgMTQyOSwgMTQyOSwgMTcyMywgMTQyOSwKKyAgICAgMTQzMSwgMTQzMSwgMTcyMywgMTcyMywgMTQzMSwgMTQzMiwgMTQzMiwgMTcyMywgMTQzMiwgMTQzMywKKyAgICAgMTQzMywgMTUwNywgMTcyMywgMTUwNywgMTQzNSwgMTcyMywgMTQzNSwgMTQzNywgMTcyMywgMTcyMywKIAotICAgICAxNzI4LCAxNTI1LCAxNTI4LCAxNzI4LCAxNTI4LCAxNTMxLCAxNzI4LCAxNTMxLCAxNTMyLCAxNTMyLAotICAgICAxNTMyLCAxNTMzLCAxNzI4LCAxNTMzLCAgIDUzLCAgIDUzLCAgIDUzLCAxNzI4LCAgIDUzLCAgIDUzLAotICAgICAxNTUwLCAxNzI4LCAxNTUwLCAxNDI2LCAxNzI4LCAxNDI2LCAxNDMxLCAxNzI4LCAxNDMxLCAxNDM5LAotICAgICAxNzI4LCAxNDM5LCAxNDQ4LCAxNzI4LCAxNDQ4LCAxNDU3LCAxNzI4LCAxNDU3LCAxNDY2LCAxNzI4LAotICAgICAxNDY2LCAxNTAxLCAxNTAxLCAxNzI4LCAxNzI4LCAxNTAxLCAxNTAyLCAxNTAyLCAxNzI4LCAxNTAyLAotICAgICAxNTAzLCAxNTAzLCAxNDkzLCAxNzI4LCAxNDkzLCAxNTU1LCAxNzI4LCAxNTU1LCAxNTU2LCAxNzI4LAotICAgICAxNTU2LCAxNTU5LCAxNzI4LCAxNTU5LCAxNTYwLCAxNzI4LCAxNTYwLCAxNTYzLCAxNzI4LCAxNTYzLAotICAgICAxNTY0LCAxNzI4LCAxNTY0LCAxNTY3LCAxNzI4LCAxNTY3LCAxNTY4LCAxNzI4LCAxNTY4LCAxNTcxLAotICAgICAxNzI4LCAxNTcxLCAxNTI3LCAxNzI4LCAxNzI4LCAxNTI3LCAxNTMwLCAxNTMwLCAxNzI4LCAxNzI4LAotICAgICAxNTMwLCAxNTc1LCAxNzI4LCAxNTc1LCAxNTA0LCAxNzI4LCAxNTA0LCAxNTkxLCAxNzI4LCAxNTkxLAorICAgICAxNDM3LCAxNDM4LCAxNDM4LCAxNzIzLCAxNDM4LCAxNDQwLCAxNDQwLCAxNzIzLCAxNzIzLCAxNDQwLAorICAgICAxNDQxLCAxNDQxLCAxNzIzLCAxNDQxLCAxNDQyLCAxNDQyLCAxNTExLCAxNzIzLCAxNTExLCAxNDQ0LAorICAgICAxNzIzLCAxNDQ0LCAxNDQ2LCAxNzIzLCAxNzIzLCAxNDQ2LCAxNDQ3LCAxNDQ3LCAxNzIzLCAxNDQ3LAorICAgICAxNDQ5LCAxNDQ5LCAxNzIzLCAxNzIzLCAxNDQ5LCAxNDUwLCAxNDUwLCAxNzIzLCAxNDUwLCAxNDUxLAorICAgICAxNDUxLCAxNTE1LCAxNzIzLCAxNTE1LCAxNDUzLCAxNzIzLCAxNDUzLCAxNDU1LCAxNzIzLCAxNzIzLAorICAgICAxNDU1LCAxNDU2LCAxNDU2LCAxNzIzLCAxNDU2LCAxNDU4LCAxNDU4LCAxNzIzLCAxNzIzLCAxNDU4LAorICAgICAxNDU5LCAxNDU5LCAxNzIzLCAxNDU5LCAxNDYwLCAxNDYwLCAxNTE5LCAxNzIzLCAxNTE5LCAxNTIwLAorICAgICAxNzIzLCAxNTIwLCAxNTIzLCAxNzIzLCAxNTIzLCAxNTI2LCAxNzIzLCAxNTI2LCAxNTI3LCAxNTI3LAorICAgICAxNTI3LCAxNTI4LCAxNzIzLCAxNTI4LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAxNzIzLCAgIDQ5LCAgIDQ5LAorICAgICAxNTQ1LCAxNzIzLCAxNTQ1LCAxNDIxLCAxNzIzLCAxNDIxLCAxNDI2LCAxNzIzLCAxNDI2LCAxNDM0LAogCi0gICAgIDE1NTQsIDE3MjgsIDE3MjgsIDE1NTQsIDE1NTgsIDE3MjgsIDE3MjgsIDE1NTgsIDE1NjIsIDE3MjgsCi0gICAgIDE3MjgsIDE1NjIsIDE1NjYsIDE3MjgsIDE3MjgsIDE1NjYsIDE1NzAsIDE3MjgsIDE3MjgsIDE1NzAsCi0gICAgIDE1OTcsIDE3MjgsIDE1OTcsIDE2MDAsIDE3MjgsIDE2MDAsIDE1OTAsIDE3MjgsIDE3MjgsIDE1OTAsCi0gICAgIDE2MTQsIDE3MjgsIDE2MTQsIDE2MTUsIDE3MjgsIDE2MTUsIDE2MTYsIDE3MjgsIDE2MTYsIDE2MTcsCi0gICAgIDE3MjgsIDE2MTcsIDE2MTgsIDE3MjgsIDE2MTgsIDE1OTksIDE3MjgsIDE3MjgsIDE1OTksIDE2MzEsCi0gICAgIDE3MjgsIDE2MzEsIDE2MzIsIDE3MjgsIDE2MzIsICAgIDMsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsCisgICAgIDE3MjMsIDE0MzQsIDE0NDMsIDE3MjMsIDE0NDMsIDE0NTIsIDE3MjMsIDE0NTIsIDE0NjEsIDE3MjMsCisgICAgIDE0NjEsIDE0OTYsIDE0OTYsIDE3MjMsIDE3MjMsIDE0OTYsIDE0OTcsIDE0OTcsIDE3MjMsIDE0OTcsCisgICAgIDE0OTgsIDE0OTgsIDE0ODgsIDE3MjMsIDE0ODgsIDE1NTAsIDE3MjMsIDE1NTAsIDE1NTEsIDE3MjMsCisgICAgIDE1NTEsIDE1NTQsIDE3MjMsIDE1NTQsIDE1NTUsIDE3MjMsIDE1NTUsIDE1NTgsIDE3MjMsIDE1NTgsCisgICAgIDE1NTksIDE3MjMsIDE1NTksIDE1NjIsIDE3MjMsIDE1NjIsIDE1NjMsIDE3MjMsIDE1NjMsIDE1NjYsCisgICAgIDE3MjMsIDE1NjYsIDE1MjIsIDE3MjMsIDE3MjMsIDE1MjIsIDE1MjUsIDE1MjUsIDE3MjMsIDE3MjMsCisgICAgIDE1MjUsIDE1NzAsIDE3MjMsIDE1NzAsIDE0OTksIDE3MjMsIDE0OTksIDE1ODYsIDE3MjMsIDE1ODYsCisgICAgIDE1NDksIDE3MjMsIDE3MjMsIDE1NDksIDE1NTMsIDE3MjMsIDE3MjMsIDE1NTMsIDE1NTcsIDE3MjMsCisgICAgIDE3MjMsIDE1NTcsIDE1NjEsIDE3MjMsIDE3MjMsIDE1NjEsIDE1NjUsIDE3MjMsIDE3MjMsIDE1NjUsCisgICAgIDE1OTIsIDE3MjMsIDE1OTIsIDE1OTUsIDE3MjMsIDE1OTUsIDE1ODUsIDE3MjMsIDE3MjMsIDE1ODUsCiAKLSAgICAgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOCwgMTcyOAorICAgICAxNjA5LCAxNzIzLCAxNjA5LCAxNjEwLCAxNzIzLCAxNjEwLCAxNjExLCAxNzIzLCAxNjExLCAxNjEyLAorICAgICAxNzIzLCAxNjEyLCAxNjEzLCAxNzIzLCAxNjEzLCAxNTk0LCAxNzIzLCAxNzIzLCAxNTk0LCAxNjI2LAorICAgICAxNzIzLCAxNjI2LCAxNjI3LCAxNzIzLCAxNjI3LCAgICAzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLAorICAgICAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzLCAxNzIzCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNzkxMF0gPQorc3RhdGljIGNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNzY3OV0gPQogICAgIHsgICAwLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICA0LCAgIDE1LCAgMTA2LCAgICA0LCAgICA3LCAgICA0LCAgICA0LAotICAgICAgICA3LCAgMTA2LCAgICA3LCAgICA3LCAgICA5LCAgIDE3LCAgIDE3LCAgICA5LCAgMTM4LCAgICA5LAotICAgICAgICA5LCAgICA0LCAgIDE5LCAgIDE5LCAgIDI0LCAgICA3LCAgIDI3LCAgIDI3LCAgMTM4LCAgICA0LAotICAgICAgIDE1LCAgIDEwLCAgICA5LCAgICA3LCAgIDEwLCAgMTAyLCAgIDEwLCAgIDEwLCAgIDI0LCAgIDI4LAotICAgICAgICA5LCAgIDM0LCAgIDI2LCAxMjc4LCAgIDI4LCAgIDI0LCAgIDI2LCAgNTg2LCAgIDk0LCAgIDEwLAorICAgICAgICAxLCAgICAxLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLAorICAgICAgIDExLCAgIDExLCAgIDE0LCAgIDE0LCAgNjc0LCAgIDExLCAgIDExLCAgIDExLCAgNjc0LCAgIDExLAorICAgICAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLAorICAgICAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDExLAorICAgICAgIDExLCAgIDExLCAgIDExLCAgIDExLCAgIDEyLCAgIDE2LCAgIDE2LCAgIDIwLCAgIDIzLCAgIDIwLAogCi0gICAgICAgMzQsICAgOTQsICAgMjYsICA1ODYsICAgOTUsICAgMjYsICAgOTUsICAgMTAsICAgMTQsICAgMTQsCi0gICAgICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAxMDIsICAgOTgsCi0gICAgIDEyNzksICAgMTQsICAgMTQsICAgMTQsICAgOTgsICAgODMsICAgMTQsICAgMTQsICAgMTQsICAgMTQsCi0gICAgICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsCi0gICAgICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsCi0gICAgICAgMTQsICAgMTYsICAgODMsICAgMjUsICAgMTYsICA2NzEsICAgMTYsICAgMTYsICAgODMsICAxMjksCi0gICAgICAgMjksICA2NzEsICAxMDcsICAgMjUsICAgMjksICAyNTIsICAgMjUsICAxMDcsICAgMjIsICAgMTYsCi0gICAgICAgMjUsICAgMjIsICAxMjksICAgMjIsICAgMjIsICAxMDMsICAgMjksICAgMTYsICAgMjAsICAgMjAsCi0gICAgICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjIsICAxMzQsICAgMjMsICAyNTIsCi0gICAgICAgMjMsICAgMjMsICAgMjAsICA2NzMsICAgMjIsICAgMjMsICA2NzMsICAyNTEsICAgMzUsICAyNTEsCisgICAgICAgMjAsICAgMzEsICAgMjMsICA0MDgsICAgMjAsICAgMjQsICAgMjQsICAgMjUsICAgMjMsICAgMjAsCisgICAgICAgMzEsICAgMjMsICAgMjUsICAgMjAsICAgMjEsICAgMjAsICAgOTAsICA0MDgsICAgOTAsICAgMTIsCisgICAgICAgMTcsICAgMTcsICAgMTcsICAgMTcsICAgMTcsICAgMTcsICAgMTcsICAgMTcsICAgMjEsICAgMjIsCisgICAgICAgODksIDEyNzAsICAgMjYsICAgODksICAgMTcsICAgMjEsICAgMjYsICAgMzQsICAxMDEsICAgMjIsCisgICAgICAgOTcsICAgMzQsICAgMjIsICAgMjcsICAxMDEsICAgMjcsICAgMjIsICAgOTMsICAgMjYsICAgMzQsCisgICAgICAgMjcsICAgMjcsICAgOTMsICAgMjcsICAgMzQsIDEyNzMsICAgMzQsICAgMjcsICAxMjksICAgMTcsCisgICAgICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsCisgICAgICAgMjksICAgMjksICAgOTcsICAgMTgsIDEyNzQsICAgMzYsICAxMjksICAgMzYsICAgMTgsICAgMTgsCisgICAgICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMjgsICAgMjksIDEyNzgsICAgMjgsICAgMjgsICAgMjksCisgICAgICAgMjgsICAgMzYsICAgMjgsICAgMjksICAgMjgsICAgMjksICAgMjgsICAgMzAsICAgMzYsICAgMjgsCiAKLSAgICAgICAyMywgICAzMCwgIDEwMywgICAzMCwgICAyMywgIDEzNCwgICAyMywgIDEwMywgICAzMCwgICAzMCwKLSAgICAgICAzNSwgICAzMCwgICAzNSwgMTI4MywgICAzNSwgICAzMCwgMTI4NCwgICAzNSwgICAyMCwgICAyMSwKLSAgICAgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAzMiwKLSAgICAgICAzMiwgIDExMCwgICAyMSwgIDY3NSwgIDExMCwgMTI4NSwgIDExMCwgIDEzNiwgICAyMSwgICAyMSwKLSAgICAgICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAzMSwgICAzMiwgIDEzNiwgICAzMSwgICAzMSwgICAzMiwKLSAgICAgICAzMSwgIDY3NSwgICAzMSwgICAzMiwgICAzMSwgICAzMiwgICAzMSwgICAzMywgICAzNiwgICAzMSwKLSAgICAgIDE1NSwgICAzMywgICAzMiwgICAzNiwgICAzNiwgICAzNywgICAzNiwgICAzNiwgIDcxMCwgICAzNywKLSAgICAgICAzMywgICAzMywgIDE2MywgICAzOCwgICAzMywgIDIyMiwgICAzMywgICAzNywgICAzOSwgICAzOCwKLSAgICAgICAzOSwgICAzOCwgICAzNywgICAzOCwgICAzNywgICA0MSwgIDE1NSwgICAzOCwgIDIyMiwgICAzOCwKLSAgICAgICAzOCwgIDI2NywgIDI2NywgICA0MSwgICAzOSwgIDQzNywgIDQzNywgICA0MSwgIDE2MywgICA0MSwKKyAgICAgICAzMywgICAzMCwgICAyOSwgICAzMiwgIDE1MCwgICAzMywgICAzMywgIDEwMiwgICAzMywgICAzMywKKyAgICAgICAzMCwgICAzMCwgIDEwMiwgICAzOCwgICAzMCwgICAzMiwgICAzMCwgICAzMiwgICAzNSwgICAzMiwKKyAgICAgICA5OCwgICAzOCwgICAzMiwgIDEzMywgICAzNSwgICAzOCwgICAzNSwgICAzOCwgICAzNSwgIDE1MCwKKyAgICAgIDEyNCwgIDIxNywgICAzNSwgIDEzMywgICAzNSwgICAzNSwgICA0NCwgICA0NCwgICA0NCwgICA0NCwKKyAgICAgICA0NCwgICA0NCwgICA0NCwgIDEyNCwgIDIxNywgIDEwNSwgICA5OCwgICA0NCwgIDEwNSwgIDI0NywKKyAgICAgIDEwNSwgICA5OCwgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0NSwgICA0NSwKKyAgICAgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgIDE1OCwgIDI0NiwgIDU4MSwgIDI0NiwgICA0NSwKKyAgICAgIDI2MiwgIDI2MiwgIDI0NywgIDU4MSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwKKyAgICAgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgICA0NiwgIDY2OCwgIDMzNCwKKyAgICAgIDE1OCwgIDY2OCwgICA0NiwgICA3OCwgIDMzNCwgIDI2OSwgIDM0NiwgICA0NiwgICA0NiwgICA0NiwKIAotICAgICAgIDQ0LCAgIDM5LCAgMzk3LCAgIDQ0LCAgNzEwLCAgIDQ0LCAgIDQ0LCAgIDYyLCAgIDYyLCAgIDYyLAotICAgICAgIDYyLCAgIDYyLCAgIDYyLCAgIDYyLCAgMjc0LCAgMzM5LCAgIDYzLCAgMzUxLCAgIDQ0LCAgIDYzLAotICAgICAgMzM5LCAgIDYzLCAgIDYzLCAgMzk3LCAgNDEwLCAxMjkyLCAgIDQ0LCAgIDQ4LCAgIDQ4LCAgIDQ4LAotICAgICAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDYzLCAgNjE5LCAgNjE5LCAgNDEwLCAgIDQ4LCAgMzk3LAotICAgICAgMjc0LCAgNjgwLCAgIDYzLCAgMzUxLCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LAotICAgICAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgMzc2LCAgNDM5LCAgNjgwLAotICAgICAgNDQ2LCAgIDQ5LCAgMjg0LCAgMjg0LCAgMjg0LCAgMjg0LCAxMjk2LCAgIDQ5LCAgIDQ5LCAgIDQ5LAotICAgICAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLAotICAgICAgIDUwLCAgNDY2LCAgMjg0LCAgMzc2LCAgNDM5LCAgIDUwLCAgNDQ2LCAgNDUyLCAgNDYwLCAgNDY2LAotICAgICAxMzIxLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUyLCAgIDUyLCAgIDUyLAorICAgICAgIDQ2LCAgIDQ2LCAgIDQ2LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LAorICAgICAgIDQ4LCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgMzcxLCAgIDc4LAorICAgICAgMjY5LCAgMzQ2LCAgIDUwLCAgNDMyLCAgNDMyLCAgIDc4LCAxMjc5LCAgIDUwLCAgIDUwLCAgIDUwLAorICAgICAgIDUwLCAgIDUwLCAgIDUwLCAgIDUyLCAgIDUyLCAgIDUyLCAgIDUyLCAgIDUyLCAgIDUyLCAgIDUyLAorICAgICAgNjE0LCAgNjE0LCAgNjY3LCAgMzcxLCAgIDUyLCAgNjY1LCAgNjY1LCAgNjY3LCAgNDM0LCAgIDUyLAorICAgICAgIDUyLCAgIDUyLCAgIDUyLCAgIDUyLCAgIDUyLCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LCAgIDU4LAorICAgICAgIDU4LCAgIDU4LCAgMTMxLCAgMjYxLCAgMjYxLCAgMjYxLCAgMjYxLCAgMjYxLCAgMjYxLCAgMjYxLAorICAgICAgMzUwLCAgMTMxLCAgMTQ4LCAgNDM0LCAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ4LAorICAgICAgMTQ4LCAgNDQxLCAgNDQ3LCAxMjgwLCAgMzUwLCAgMTQ4LCAgMjc5LCAgMjc5LCAgMjc5LCAgMjc5LAorICAgICAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ5LCAgMTQ5LCAgMTQ5LCAgMTQ5LAogCi0gICAgICAgNTIsICAgNTIsICAgNTIsICAgNTIsICAgNTIsICAgNTQsICAgNTQsICAgNTQsICAgNTQsICAgNTQsCi0gICAgICAgNTQsICAgNTQsICA0ODYsICA0NTIsICA0NjAsICAzNTUsICAgNTQsIDEzMjQsICA0MTMsICA2NzAsCi0gICAgICA2NzAsICA0ODYsICAgNTQsICAgNTQsICAgNTQsICAgNTQsICAgNTQsICAgNTQsICAgNTYsICAzNTUsCi0gICAgICA2NzIsICAgNTYsICA0MTMsICAgNTYsICAgNTYsICA2NzIsIDEzMjcsICAzNzEsICAzNzIsICAgNTYsCi0gICAgICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICA1MjMsICA1NjMsICA2NzksCi0gICAgICAgNTYsICAzNzEsICAzNzIsICA2NzksICAgNTYsICAzNTUsICAgNTYsICAgNTYsICAgNTYsICAgNTYsCi0gICAgICAgNTYsICAgNTYsICAxNTMsICA0ODgsICAxNTMsICAxNTMsICAxNTMsICAxNTMsICAxNTMsICAxNTMsCi0gICAgICAxNTMsICA1NDcsICA0ODgsICA1MjMsICA1NjMsICAxNTMsICA2MjcsICAzNzEsICAzNzIsICA1NDcsCi0gICAgICA2ODYsICAxNTMsICAxNTMsICAxNTMsICAxNTMsICAxNTMsICAxNTMsICAxNTQsICAxNTQsICAxNTQsCi0gICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAxNTQsICA1NTcsICA2NjIsICA2ODYsIDEzMzAsICAxNTQsCisgICAgICAxNDksICAxNDksICAxNDksICAxNDksICA0NjEsICAyNzksICA0NDEsICA0NDcsICAxNDksICAzNTAsCisgICAgICAxNDksIDEyODcsICA0NjEsICAxNDksICAxNDksICAxNDksICAxNDksICAxNDksICAxNDksICAyNzIsCisgICAgICAyNzIsICAyNzIsICAyNzIsICAyNzIsICAyNzIsICAyNzIsICAzNTYsICAzNTYsICAzNTYsICAzNTYsCisgICAgICAzNTYsICAzNTYsICAzNTYsICAzNjYsICA2ODEsICAxNDksICAxNTEsICAxNTEsICAxNTEsICAxNTEsCisgICAgICAxNTEsICAxNTEsICAxNTEsICAxNTEsICA0NTUsICA1MTgsICA2NjYsICAzNjYsICAxNTEsICA1NTgsCisgICAgICA2MjIsICA2ODEsICA2NjYsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTIsCisgICAgICAxNTIsICAxNTIsICAxNTIsICAxNTIsICAxNTIsICAxNTIsICAxNTIsICAxNTIsIDEyOTEsICA0NTUsCisgICAgICA1MTgsICAxNTIsICAzNjYsICA2MjUsICA1NTgsICA2MjIsICAxNTIsICAxNTIsICAxNTIsICAxNTIsCisgICAgICAxNTIsICAxNTIsICAxNTMsICAxNTMsICAxNTMsICAxNTMsICAxNTMsICAxNTMsICAxNTMsICAxNTMsCisgICAgICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICA2MjUsICA2ODYsCiAKLSAgICAgIDYzMCwgIDE1NCwgIDYyNywgIDU1NywgIDY2MiwgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwKLSAgICAgIDE1NCwgIDI2NiwgIDI2NiwgIDI2NiwgIDI2NiwgIDI2NiwgIDI2NiwgIDI2NiwgIDI3NywgIDI3NywKLSAgICAgIDI3NywgIDI3NywgIDI3NywgIDI3NywgIDI3NywgIDQ1NSwgIDYzMCwgIDE1NCwgIDE1NiwgIDE1NiwKLSAgICAgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDU4NywgIDYzNiwgMTMzMywgIDQ1NSwKLSAgICAgIDE1NiwgIDU2NiwgIDU2NiwgIDU2NiwgIDU2NiwgIDU4NywgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwKLSAgICAgIDE1NiwgIDE1NiwgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywKLSAgICAgIDE1NywgIDY4NCwgMTMzNiwgIDYzNiwgIDE1NywgIDQ1NSwgIDY0MywgIDY1NSwgIDY4NCwgMTM0MCwKLSAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1OCwgIDE1OCwgIDE1OCwgIDE1OCwKLSAgICAgIDE1OCwgIDE1OCwgIDE1OCwgIDE1OCwgIDE2MCwgIDE2MCwgIDE2MCwgIDE2MCwgIDE2MCwgIDE2MCwKLSAgICAgIDE2MCwgIDE2MCwgIDY0MywgIDY1NSwgIDY3OCwgIDE2MCwgIDY3OCwgIDY4MiwgMTM0MSwgIDY4MiwKKyAgICAgIDY4NiwgIDE1NSwgIDU2MSwgIDU2MSwgIDU2MSwgIDU2MSwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwKKyAgICAgIDE1NSwgIDE1NSwgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywKKyAgICAgIDE1NywgIDM2NywgIDYzMSwgMTMxNiwgIDE1NywgIDM5MiwgIDE1NywgIDc1OSwgIDMwNCwgIDE1NywKKyAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDM2NywgIDMwNCwgIDM2MCwgIDM2MCwgIDM2MCwKKyAgICAgIDM2MCwgIDM2MCwgIDM2MCwgIDM2MCwgIDc1OSwgIDM5MiwgIDQwNSwgIDYzMSwgIDMwNCwgIDY3MCwKKyAgICAgMTMxOSwgIDE1NywgIDI1NSwgIDI1NSwgIDI1NSwgIDI1NSwgIDI1NSwgIDI1NSwgIDI1NSwgIDQwNSwKKyAgICAgIDM2NywgIDM5MiwgIDYzOCwgIDI1NSwgIDMwNCwgIDY3NSwgMTMyMiwgIDY3MCwgIDI1NSwgIDI1NSwKKyAgICAgIDI1NSwgIDI1NSwgIDI1NSwgIDI1NSwgIDI1NywgIDI1NywgIDI1NywgIDI1NywgIDI1NywgIDI1NywKKyAgICAgIDI1NywgIDU0MiwgIDY3MywgIDY3NSwgIDY3MywgIDI1NywgMTMyNSwgIDYzOCwgIDY1MCwgIDU0MiwKKyAgICAgIDI1NywgIDI1NywgIDI1NywgIDI1NywgIDI1NywgIDI1NywgIDI1OCwgIDI1OCwgIDI1OCwgIDI1OCwKIAotICAgICAxMzQyLCAgMTYwLCAgMTYwLCAgMTYwLCAgMTYwLCAgMTYwLCAgMTYwLCAgMTYyLCAgMTYyLCAgMTYyLAotICAgICAgMTYyLCAgMTYyLCAgMTYyLCAgMTYyLCAgMTYyLCAgMTYyLCAgNjg3LCAgNjkxLCAgNjkxLCAgMTYyLAotICAgICAxMzQzLCAgMTYyLCAxMzQ0LCAgMzA5LCAgNjg3LCAgMTYyLCAgMTYyLCAgMTYyLCAgMTYyLCAgMTYyLAotICAgICAgMTYyLCAgMzA5LCAgMzYxLCAgMzYxLCAgMzYxLCAgMzYxLCAgMzYxLCAgMzYxLCAgMzYxLCAgNzAxLAotICAgICAgNzAxLCAgNDU2LCAxMzQ4LCAgNTI3LCAgMzA5LCAgNzY0LCAgNjc2LCAgMTYyLCAgMjYwLCAgMjYwLAotICAgICAgMjYwLCAgMjYwLCAgMjYwLCAgMjYwLCAgMjYwLCAgNDU2LCAgNjc2LCAgNTI3LCAgNzA4LCAgMjYwLAotICAgICAgMzA5LCAxMzQ5LCAgNzY2LCAgNzY0LCAgNjg5LCAgMjYwLCAgMjYwLCAgMjYwLCAgMjYwLCAgMjYwLAotICAgICAgMjYwLCAgMjYyLCAgMjYyLCAgMjYyLCAgMjYyLCAgMjYyLCAgMjYyLCAgMjYyLCAgNTg4LCAgNjg5LAotICAgICAgNzY2LCAgNDU2LCAgMjYyLCAgNTI3LCAgNzA4LCAgNzQ5LCAgNzYxLCAgNTg4LCAgMjYyLCAgMjYyLAotICAgICAgMjYyLCAgMjYyLCAgMjYyLCAgMjYyLCAgMjYzLCAgMjYzLCAgMjYzLCAgMjYzLCAgMjYzLCAgMjYzLAorICAgICAgMjU4LCAgMjU4LCAgMjU4LCAgMjU4LCAgMjYwLCAgMjYwLCAgMjYwLCAgMjYwLCAgMjYwLCAgMjYwLAorICAgICAgMjYwLCAgNTUyLCAgNjc3LCAgNjUwLCAgNjc3LCAgMjYwLCAgNjk2LCAgNjk2LCAxMzI4LCAgNTUyLAorICAgICAgMjYwLCAgMjYwLCAgMjYwLCAgMjYwLCAgMjYwLCAgMjYwLCAgMjYzLCAgMjYzLCAgMjYzLCAgMjYzLAorICAgICAgMjYzLCAgMjYzLCAgMjYzLCAgMjYzLCAgNjU3LCAgNzA1LCAxMzMxLCAxMzM1LCAgMjYzLCAxMzM2LAorICAgICAxMzM3LCAgNzAzLCAgNjU3LCAgMjYzLCAgMjYzLCAgMjYzLCAgMjYzLCAgMjYzLCAgMjYzLCAgMjY1LAorICAgICAgMjY1LCAgMjY1LCAgMjY1LCAgMjY1LCAgMjY1LCAgMjY1LCAgMjY1LCAgMjY4LCAgMjY4LCAgMjY4LAorICAgICAgMjY4LCAgMjY4LCAgMjY4LCAgMjY4LCAgMjY4LCAgMjY4LCAgNzAzLCAxMzM4LCAxMzM5LCAgMjY4LAorICAgICAgNzA1LCAgMjY4LCAgNzYxLCAgNDUwLCAgMjY4LCAgMjY4LCAgMjY4LCAgMjY4LCAgMjY4LCAgMjY4LAorICAgICAgNDMxLCAgNDMxLCAgNDMxLCAgNDMxLCAgNDMxLCAgNDMxLCAgNDMxLCAgNDUwLCAgNjc5LCAgNzYxLAorICAgICAxMzQzLCAxMzQ0LCAgNjc2LCAgNDUxLCAgNTIyLCAgNjc5LCAgMjY4LCAgMjczLCAgMjczLCAgMjczLAogCi0gICAgICAyNjMsICAyNjMsICAyNjUsICAyNjUsICAyNjUsICAyNjUsICAyNjUsICAyNjUsICAyNjUsICA2NzQsCi0gICAgICA4MDUsICA3NDksICA3NjEsICAyNjUsIDEzNTUsIDEzNTYsIDEzNjMsICA3NzIsICA2NzQsICAyNjUsCi0gICAgICAyNjUsICAyNjUsICAyNjUsICAyNjUsICAyNjUsICAyNjgsICAyNjgsICAyNjgsICAyNjgsICAyNjgsCi0gICAgICAyNjgsICAyNjgsICAyNjgsICA3MzEsICA3NDIsICA3NzIsICA4MDUsICAyNjgsIDEzNjQsIDEzNzEsCi0gICAgICA3NzIsICA3MzEsICA3NDIsICAyNjgsICAyNjgsICAyNjgsICAyNjgsICAyNjgsICAyNjgsICAyNzAsCi0gICAgICAyNzAsICAyNzAsICAyNzAsICAyNzAsICAyNzAsICAyNzAsICAyNzAsICAyNzMsICAyNzMsICAyNzMsCi0gICAgICAyNzMsICAyNzMsICAyNzMsICAyNzMsICAyNzMsICAyNzMsICA4NTksIDEzNzIsIDEzNzksICAyNzMsCi0gICAgIDEzODAsICAyNzMsIDEzODQsIDEzODcsICA4NTksICAyNzMsICAyNzMsICAyNzMsICAyNzMsICAyNzMsCi0gICAgICAyNzMsICAzNjUsICAzNjUsICAzNjUsICAzNjUsICAzNjUsICAzNjUsICAzNjUsICA0MzYsICA0MzYsCi0gICAgICA0MzYsICA0MzYsICA0MzYsICA0MzYsICA0MzYsICA1NTQsICA2ODMsICAyNzMsICAyNzgsICAyNzgsCisgICAgICAyNzMsICAyNzMsICAyNzMsICAyNzMsICAyNzMsICAyNzMsICA2NzYsICA0NTEsICA1MjIsICAyNzMsCisgICAgIDEzNTAsICA3NzEsICA0NTAsICA2ODAsICAyNzMsICAyNzMsICAyNzMsICAyNzMsICAyNzMsICAyNzMsCisgICAgICAyNzQsICAyNzQsICAyNzQsICAyNzQsICAyNzQsICAyNzQsICAyNzQsICA2ODAsICA3NzEsICA3NzEsCisgICAgICA3NDQsICAyNzQsICA0NTEsICA1MjIsICA0ODEsICA2NzEsICAyNzQsICAyNzQsICAyNzQsICAyNzQsCisgICAgICAyNzQsICAyNzQsICAzMzksICA0ODEsICAzMzksICA2NzEsICAzMzksICAzMzksICA0NTksICA0NTksCisgICAgICA0NTksICA0NTksICA0NTksICA0NTksICA0NTksICA3NDQsICAzMzksICA1NDksICAzMzksICAzMzksCisgICAgICA1NTAsICAzMzksICAzNDQsICA0ODMsICAzNDQsICAzNDQsICAzNDQsICAzNDQsICAzNDQsICAzNDQsCisgICAgICAzNDQsICA1NDksICA0ODMsIDEzNTEsICA1NTAsICAzNDQsICA3NTYsIDEzNTgsICA3ODIsIDEzNTksCisgICAgICAzNDQsICAzNDQsICAzNDQsICAzNDQsICAzNDQsICAzNDQsICAzNDUsICAzNDUsICAzNDUsICAzNDUsCisgICAgICAzNDUsICAzNDUsICAzNDUsICAzNDUsICA2ODIsICA3ODIsICA1NDksIDEzNjYsICAzNDUsICA1NTAsCiAKLSAgICAgIDI3OCwgIDI3OCwgIDI3OCwgIDI3OCwgIDI3OCwgIDI3OCwgIDI3OCwgIDY4MywgMTM4OCwgIDU1NCwKLSAgICAgIDI3OCwgMTM5MiwgIDc2NSwgIDc3OSwgMTM5NCwgIDY4MSwgIDI3OCwgIDI3OCwgIDI3OCwgIDI3OCwKLSAgICAgIDI3OCwgIDI3OCwgIDI3OSwgIDI3OSwgIDI3OSwgIDI3OSwgIDI3OSwgIDI3OSwgIDI3OSwgIDY4MSwKLSAgICAgIDc2NSwgIDc3OSwgIDY4NSwgIDI3OSwgIDU1NSwgIDU1NCwgIDc3OSwgIDc2NSwgMTQxMywgIDI3OSwKLSAgICAgIDI3OSwgIDI3OSwgIDI3OSwgIDI3OSwgIDI3OSwgIDM0NCwgIDY4NSwgIDM0NCwgIDU1NSwgIDM0NCwKLSAgICAgIDM0NCwgIDQ2NCwgIDQ2NCwgIDQ2NCwgIDQ2NCwgIDQ2NCwgIDQ2NCwgIDQ2NCwgIDc3MywgIDM0NCwKLSAgICAgIDY5MCwgIDM0NCwgIDM0NCwgIDU1OCwgIDM0NCwgIDM0OSwgIDU1OSwgIDM0OSwgIDM0OSwgIDM0OSwKLSAgICAgIDM0OSwgIDM0OSwgIDM0OSwgIDM0OSwgIDU1NSwgIDY5MCwgIDc3MywgIDU1OCwgIDM0OSwgIDc3MywKLSAgICAgIDU1OSwgIDc3NiwgMTQxNCwgIDc4NywgIDM0OSwgIDM0OSwgIDM0OSwgIDM0OSwgIDM0OSwgIDM0OSwKLSAgICAgIDM1MCwgIDM1MCwgIDM1MCwgIDM1MCwgIDM1MCwgIDM1MCwgIDM1MCwgIDM1MCwgMTQyNCwgIDc3NiwKKyAgICAgIDM0NSwgIDc1NiwgIDY4MiwgIDM0NSwgIDM0NSwgIDM0NSwgIDM0NSwgIDM0NSwgIDM0NSwgIDQ2MywKKyAgICAgIDQ2MywgIDQ2MywgIDQ2MywgIDQ2MywgIDQ2MywgIDQ2MywgIDUzNSwgIDUzNSwgIDUzNSwgIDUzNSwKKyAgICAgIDUzNSwgIDUzNSwgIDUzNSwgIDU1MywgIDY3OCwgIDM0NSwgIDM0NywgIDM0NywgIDM0NywgIDM0NywKKyAgICAgIDM0NywgIDM0NywgIDM0NywgIDM0NywgIDgwMCwgIDY3OCwgMTM2NywgIDU1MywgIDM0NywgMTM3NCwKKyAgICAgIDc4MywgIDc2OCwgIDU1NCwgIDM0NywgIDM0NywgIDM0NywgIDM0NywgIDM0NywgIDM0NywgIDM1MSwKKyAgICAgIDM1MSwgIDM1MSwgIDM1MSwgIDM1MSwgIDM1MSwgIDM1MSwgIDU1NCwgIDc4MywgIDc2OCwgIDgwMCwKKyAgICAgIDM1MSwgIDc2OCwgIDU1MywgIDc2MCwgIDY4NCwgIDM1MSwgIDM1MSwgIDM1MSwgIDM1MSwgIDM1MSwKKyAgICAgIDM1MSwgIDM1MiwgIDM1MiwgIDM1MiwgIDM1MiwgIDM1MiwgIDM1MiwgIDM1MiwgIDM1MiwgIDY4NCwKKyAgICAgIDc2MCwgIDU1NCwgMTM3NSwgIDM1MiwgIDgwMywgIDgwNiwgIDgxMiwgIDc2MCwgIDM1MiwgIDM1MiwKKyAgICAgIDM1MiwgIDM1MiwgIDM1MiwgIDM1MiwgIDM1MywgIDM1MywgIDM1MywgIDM1MywgIDM1MywgIDM1MywKIAotICAgICAgNzc2LCAgNzg3LCAgMzUwLCAgNTU4LCAgMzUwLCAxNDI1LCAgNTU5LCAxNDI5LCAgMzUwLCAgMzUwLAotICAgICAgMzUwLCAgMzUwLCAgMzUwLCAgMzUwLCAgNDY4LCAgNDY4LCAgNDY4LCAgNDY4LCAgNDY4LCAgNDY4LAotICAgICAgNDY4LCAgNTQwLCAgNTQwLCAgNTQwLCAgNTQwLCAgNTQwLCAgNTQwLCAgNTQwLCAgNjM4LCAgNjg4LAotICAgICAgMzUwLCAgMzUyLCAgMzUyLCAgMzUyLCAgMzUyLCAgMzUyLCAgMzUyLCAgMzUyLCAgMzUyLCAgNjg4LAotICAgICAxNDMwLCAxNDM0LCAgNjM4LCAgMzUyLCAxNDM3LCAgNzgzLCAgNzc0LCAgNzg4LCAgNjM5LCAgMzUyLAotICAgICAgMzUyLCAgMzUyLCAgMzUyLCAgMzUyLCAgMzUyLCAgMzU2LCAgMzU2LCAgMzU2LCAgMzU2LCAgMzU2LAotICAgICAgMzU2LCAgMzU2LCAgNjM5LCAgNzgzLCAgNzc0LCAgNzg4LCAgMzU2LCAgNzc0LCAgNjM4LCAgNzg0LAotICAgICAgNzgzLCAgNzkwLCAgMzU2LCAgMzU2LCAgMzU2LCAgMzU2LCAgMzU2LCAgMzU2LCAgMzU3LCAgMzU3LAotICAgICAgMzU3LCAgMzU3LCAgMzU3LCAgMzU3LCAgMzU3LCAgMzU3LCAxNDM4LCAgNzg0LCAgNjM5LCAgNzkwLAotICAgICAgMzU3LCAgODA4LCAgNzg0LCAgODExLCAgODE3LCAxNDQzLCAgMzU3LCAgMzU3LCAgMzU3LCAgMzU3LAorICAgICAgMzUzLCAgMzUzLCAgMzU1LCAgMzU1LCAgMzU1LCAgMzU1LCAgMzU1LCAgMzU1LCAgMzU1LCAgODAzLAorICAgICAgODA2LCAgODEyLCAgODE5LCAgMzU1LCAxMzc5LCAxMzgyLCAgNzY3LCAgNjg1LCAgMzU1LCAgMzU1LAorICAgICAgMzU1LCAgMzU1LCAgMzU1LCAgMzU1LCAgMzU5LCAgMzU5LCAgMzU5LCAgMzU5LCAgMzU5LCAgMzU5LAorICAgICAgMzU5LCAgMzU5LCAgNjg1LCAgNzY3LCAxMzgzLCAgMzU5LCAxMzg3LCAgODE5LCAgNzY3LCAgNzY5LAorICAgICAgMzU5LCAgMzU5LCAgMzU5LCAgMzU5LCAgMzU5LCAgMzU5LCAgMzYxLCAgMzYxLCAgMzYxLCAgMzYxLAorICAgICAgMzYxLCAgMzYxLCAgMzYxLCAgMzYxLCAgMzYxLCAxMzg5LCAgNzY5LCAxNDA4LCAgMzYxLCAgNzY5LAorICAgICAgNzc0LCAgNzg0LCAgNzc5LCAgMzYxLCAgMzYxLCAgMzYxLCAgMzYxLCAgMzYxLCAgMzYxLCAgMzYyLAorICAgICAgMzYyLCAgMzYyLCAgMzYyLCAgMzYyLCAgMzYyLCAgMzYyLCAgMzYyLCAgNzc0LCAgNzg0LCAgNzc5LAorICAgICAgMzYyLCAgNzg0LCAgNzc0LCAgNzc4LCAgNzc5LCAgMzYyLCAgMzYyLCAgMzYyLCAgMzYyLCAgMzYyLAorICAgICAgMzYyLCAgMzY4LCAgMzY4LCAgMzY4LCAgMzY4LCAgMzY4LCAgMzY4LCAgMzY4LCAgMzY4LCAgMzY4LAogCi0gICAgICAzNTcsICAzNTcsICAzNTgsICAzNTgsICAzNTgsICAzNTgsICAzNTgsICAzNTgsICAzNTgsICAzNTgsCi0gICAgICAzNjAsICAzNjAsICAzNjAsICAzNjAsICAzNjAsICAzNjAsICAzNjAsICA4MDgsICA5MTcsICA4MTEsCi0gICAgICA4MTcsICAzNjAsIDE0NDYsICA3OTEsICA3ODksICA3OTUsICA5MTcsICAzNjAsICAzNjAsICAzNjAsCi0gICAgICAzNjAsICAzNjAsICAzNjAsICAzNjQsICAzNjQsICAzNjQsICAzNjQsICAzNjQsICAzNjQsICAzNjQsCi0gICAgICAzNjQsICA3OTEsICA3ODksICA3OTUsICAzNjQsICA3ODksICA4MjQsICA3OTcsICA3OTcsIDE0NDcsCi0gICAgICAzNjQsICAzNjQsICAzNjQsICAzNjQsICAzNjQsICAzNjQsICAzNjYsICAzNjYsICAzNjYsICAzNjYsCi0gICAgICAzNjYsICAzNjYsICAzNjYsICAzNjYsICAzNjYsICA3OTcsICA4MzYsICA4MzksICAzNjYsICA4NTEsCi0gICAgICA4NjYsICA4NjcsICA4MjQsIDE0NTIsICAzNjYsICAzNjYsICAzNjYsICAzNjYsICAzNjYsICAzNjYsCi0gICAgICAzNjcsICAzNjcsICAzNjcsICAzNjcsICAzNjcsICAzNjcsICAzNjcsICAzNjcsICA4NjYsICA4NjcsCi0gICAgICA4OTIsICAzNjcsICA4MzYsICA4MzksICA4NjcsICA4NTEsICA4NjgsICAzNjcsICAzNjcsICAzNjcsCisgICAgICA3NzgsIDE0MDksICA4MzEsICAzNjgsIDE0MTksIDE0MjAsICA3ODUsICA3NzgsICAzNjgsICAzNjgsCisgICAgICAzNjgsICAzNjgsICAzNjgsICAzNjgsICAzNzAsICAzNzAsICAzNzAsICAzNzAsICAzNzAsICAzNzAsCisgICAgICAzNzAsICAzNzAsICAzNzAsICA3ODUsIDE0MjQsIDE0MjUsICAzNzAsICA4MzEsICAzNzAsICA1ODIsCisgICAgICA2ODcsICAzNzAsICAzNzAsICAzNzAsICAzNzAsICAzNzAsICAzNzAsICA0ODUsICA1ODIsICA0ODUsCisgICAgICA1ODMsICA2MzMsICA0ODUsICA0ODUsICA2ODcsICA2MzQsICA0ODUsICA0ODUsICA2NjksICA1ODMsCisgICAgICA2ODMsICA0ODUsICA2OTUsICAzNzAsICAzOTEsICA2MzMsIDE0MjksICA2NjksICAzOTEsICA2MzQsCisgICAgICA2ODMsICAzOTEsICA2OTUsICA2NDEsICAzOTEsICA2NDIsICAzOTEsICAzOTEsICAzOTEsICAzOTEsCisgICAgICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA0MjUsICA2NDEsIDE0MzIsICA2NDIsCisgICAgICA2MzMsICA0MjUsICA4MzQsICA3ODYsICA2MzQsICA2ODgsICA0MjUsICA0MjUsICA0MjUsICA0MjUsCisgICAgICA0MjUsICA0MjUsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA0MjcsICA2ODgsCiAKLSAgICAgIDM2NywgIDM2NywgIDM2NywgIDM3MywgIDM3MywgIDM3MywgIDM3MywgIDM3MywgIDM3MywgIDM3MywKLSAgICAgIDM3MywgIDM3MywgMTQ1NSwgMTQ1NiwgIDg2OCwgIDM3MywgIDg5MiwgMTQ2MSwgIDg3OSwgIDg2OCwKLSAgICAgIDg2OSwgIDM3MywgIDM3MywgIDM3MywgIDM3MywgIDM3MywgIDM3MywgIDM3NSwgIDM3NSwgIDM3NSwKLSAgICAgIDM3NSwgIDM3NSwgIDM3NSwgIDM3NSwgIDM3NSwgIDM3NSwgIDg3OSwgIDg3OSwgIDg2OSwgIDM3NSwKLSAgICAgIDY5MiwgIDM3NSwgMTQ2NCwgIDg2OSwgIDY5MywgIDM3NSwgIDM3NSwgIDM3NSwgIDM3NSwgIDM3NSwKLSAgICAgIDM3NSwgIDQ5MCwgIDY0NiwgIDQ5MCwgIDY5MiwgIDY5NiwgIDQ5MCwgIDQ5MCwgIDY5MywgIDY0NywKLSAgICAgIDQ5MCwgIDQ5MCwgIDY5OSwgIDkyOCwgIDcwMCwgIDQ5MCwgIDY0NiwgIDM3NSwgIDM5NiwgIDY5NiwKLSAgICAgMTQ2NSwgIDkyOCwgIDM5NiwgIDY0NywgIDcwMCwgIDM5NiwgIDY5OSwgIDY1MCwgIDM5NiwgIDY1MSwKLSAgICAgIDM5NiwgIDM5NiwgIDM5NiwgIDM5NiwgIDQzMCwgIDQzMCwgIDQzMCwgIDQzMCwgIDQzMCwgIDQzMCwKLSAgICAgIDQzMCwgIDY1MCwgIDY0NiwgIDY1MSwgMTQ3MywgIDQzMCwgIDc4MCwgIDg3MSwgIDg3MywgIDY0NywKKyAgICAgIDc4NiwgMTQzMywgIDY0MSwgIDQyNywgIDY0MiwgIDg0NiwgIDg4NywgIDgzNCwgIDQyNywgIDQyNywKKyAgICAgIDQyNywgIDQyNywgIDQyNywgIDQyNywgIDQyOCwgIDQyOCwgIDQyOCwgIDQyOCwgIDQyOCwgIDQyOCwKKyAgICAgIDQyOCwgIDQyOCwgIDQzMCwgIDQzMCwgIDQzMCwgIDQzMCwgIDQzMCwgIDQzMCwgIDQzMCwgIDcyNiwKKyAgICAgIDg0NiwgIDg4NywgIDk0MywgIDQzMCwgIDk1NSwgMTQzOCwgIDc5MCwgIDcyNiwgIDQzMCwgIDQzMCwKKyAgICAgIDQzMCwgIDQzMCwgIDQzMCwgIDQzMCwgIDQzMywgIDQzMywgIDQzMywgIDQzMywgIDQzMywgIDQzMywKKyAgICAgIDQzMywgIDQzMywgIDczNywgIDc5MCwgMTQ0MSwgMTQ0MiwgIDQzMywgIDk0MywgIDQzMywgIDk1NSwKKyAgICAgIDczNywgIDQzMywgIDQzMywgIDQzMywgIDQzMywgIDQzMywgIDQzMywgIDU0MCwgIDU0MCwgIDU0MCwKKyAgICAgIDU0MCwgIDU0MCwgIDU0MCwgIDU0MCwgIDU0NCwgIDU0NCwgIDU0NCwgIDU0NCwgIDU0NCwgIDU0NCwKKyAgICAgIDU0NCwgIDc2MiwgIDY0NSwgIDQzMywgIDQzNSwgIDQzNSwgIDQzNSwgIDQzNSwgIDQzNSwgIDQzNSwKKyAgICAgIDQzNSwgIDk4OCwgMTQ0NywgIDk5MSwgIDk5NCwgIDQzNSwgIDY0NSwgIDg2MSwgIDc2MiwgIDY5MSwKIAotICAgICAxNTAyLCAgNDMwLCAgNDMwLCAgNDMwLCAgNDMwLCAgNDMwLCAgNDMwLCAgNDMyLCAgNDMyLCAgNDMyLAotICAgICAgNDMyLCAgNDMyLCAgNDMyLCAgNDMyLCAgNzgwLCAgODcxLCAgODczLCAgNjUwLCAgNDMyLCAgNjUxLAotICAgICAgODcxLCAgODczLCAgOTQ4LCAgNzgwLCAgNDMyLCAgNDMyLCAgNDMyLCAgNDMyLCAgNDMyLCAgNDMyLAotICAgICAgNDMzLCAgNDMzLCAgNDMzLCAgNDMzLCAgNDMzLCAgNDMzLCAgNDMzLCAgNDMzLCAgNDM1LCAgNDM1LAotICAgICAgNDM1LCAgNDM1LCAgNDM1LCAgNDM1LCAgNDM1LCAxNTAzLCAxNTI4LCAxNTMxLCAgOTQ4LCAgNDM1LAotICAgICAxNTU1LCAgNzgxLCAgODgwLCAgODc0LCAgODg4LCAgNDM1LCAgNDM1LCAgNDM1LCAgNDM1LCAgNDM1LAotICAgICAgNDM1LCAgNDM4LCAgNDM4LCAgNDM4LCAgNDM4LCAgNDM4LCAgNDM4LCAgNDM4LCAgNDM4LCAgNzgxLAotICAgICAgODgwLCAgODc0LCAgODg4LCAgNDM4LCAxNTU5LCAgNDM4LCAgODc0LCAgODgwLCAgNzgxLCAgNDM4LAotICAgICAgNDM4LCAgNDM4LCAgNDM4LCAgNDM4LCAgNDM4LCAgNTQ1LCAgNTQ1LCAgNTQ1LCAgNTQ1LCAgNTQ1LAotICAgICAgNTQ1LCAgNTQ1LCAgNTQ5LCAgNTQ5LCAgNTQ5LCAgNTQ5LCAgNTQ5LCAgNTQ5LCAgNTQ5LCAgNzY3LAorICAgICAgNDM1LCAgNDM1LCAgNDM1LCAgNDM1LCAgNDM1LCAgNDM1LCAgNDM2LCAgNDM2LCAgNDM2LCAgNDM2LAorICAgICAgNDM2LCAgNDM2LCAgNDM2LCAgNjkxLCAgODYxLCAgNzYyLCAgOTg4LCAgNDM2LCAgOTkxLCAgOTk0LAorICAgICAxNDUwLCAgNjQ1LCAgNDM2LCAgNDM2LCAgNDM2LCAgNDM2LCAgNDM2LCAgNDM2LCAgNDM3LCAgNDM3LAorICAgICAgNDM3LCAgNDM3LCAgNDM3LCAgNDM3LCAgNDM3LCAgNDM3LCAgNDQwLCAgNDQwLCAgNDQwLCAgNDQwLAorICAgICAgNDQwLCAgNDQwLCAgNDQwLCAgNDQwLCAgNDQwLCAgNjk0LCAgNjQ2LCAxNDUxLCAgNDQwLCAxNDU2LAorICAgICAgNDQwLCAxNDU5LCAxNDYwLCAgNDQwLCAgNDQwLCAgNDQwLCAgNDQwLCAgNDQwLCAgNDQwLCAgNjk0LAorICAgICAgNjQ2LCAgNjUzLCAgNjUzLCAgNjUzLCAgNjUzLCAgNjUzLCAgNjUzLCAgNjUzLCAgNjU1LCAgNjU1LAorICAgICAgNjU1LCAgNjU1LCAgNjU1LCAgNjU1LCAgNjU1LCAgNDQwLCAgNDQ2LCAgNDQ2LCAgNDQ2LCAgNDQ2LAorICAgICAgNDQ2LCAgNDQ2LCAgNDQ2LCAgNDQ2LCAgNDQ2LCAgNjQ2LCAxNDY4LCAxNDk3LCAgNDQ2LCAxNDk4LAorICAgICAgNDQ2LCAxNTIzLCAxNTI2LCAgNDQ2LCAgNDQ2LCAgNDQ2LCAgNDQ2LCAgNDQ2LCAgNDQ2LCAgNjU5LAogCi0gICAgICA3NTIsICA0MzgsICA0NDAsICA0NDAsICA0NDAsICA0NDAsICA0NDAsICA0NDAsICA0NDAsICA5NjAsCi0gICAgICA5NDAsICA5OTMsICA5OTYsICA0NDAsICA3NTIsICA4ODMsIDE1NjMsICA3NjcsICA5NDAsICA0NDAsCi0gICAgICA0NDAsICA0NDAsICA0NDAsICA0NDAsICA0NDAsICA0NDEsICA0NDEsICA0NDEsICA0NDEsICA0NDEsCi0gICAgICA0NDEsICA0NDEsIDE1NjcsICA4ODMsICA3NjcsICA5NjAsICA0NDEsICA5OTMsICA5OTYsICA5OTksCi0gICAgICA3NTIsICA4ODMsICA0NDEsICA0NDEsICA0NDEsICA0NDEsICA0NDEsICA0NDEsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDUsICA0NDUsICA0NDUsICA0NDUsCi0gICAgICA0NDUsICA0NDUsICA0NDUsICA0NDUsICA0NDUsICA5OTksIDE1NzEsIDE1OTEsICA0NDUsIDEwMDIsCi0gICAgICA0NDUsIDE2MDAsIDEyNzUsIDEyNzEsICA0NDUsICA0NDUsICA0NDUsICA0NDUsICA0NDUsICA0NDUsCi0gICAgICA2NTgsICA2NTgsICA2NTgsICA2NTgsICA2NTgsICA2NTgsICA2NTgsICA2NjAsICA2NjAsICA2NjAsCi0gICAgICA2NjAsICA2NjAsICA2NjAsICA2NjAsICA5NzMsIDEwMDIsICA0NDUsICA0NTEsICA0NTEsICA0NTEsCisgICAgICA2NTksICA2NTksICA2NTksICA2NTksICA2NTksICA2NTksICA3MTksICA3MTksICA3MTksICA3MTksCisgICAgICA3MTksICA3MTksICA3MTksICA3NDcsICA3NjMsICA0NDYsICA0NTIsICA0NTIsICA0NTIsICA0NTIsCisgICAgICA0NTIsICA0NTIsICA0NTIsICA0NTIsICA0NTIsICA5OTcsIDE1NTAsICA3NDcsICA0NTIsIDE1NTQsCisgICAgIDEwMDMsICA3NjMsICA4NjIsICA0NTIsICA0NTIsICA0NTIsICA0NTIsICA0NTIsICA0NTIsICA0NTQsCisgICAgICA0NTQsICA0NTQsICA0NTQsICA0NTQsICA0NTQsICA0NTQsICA0NTQsICA0NTQsICA3NjMsICA4NjIsCisgICAgICA5OTcsICA0NTQsICA3NDcsICA0NTQsICA4NjIsIDEwMDMsICA0NTQsICA0NTQsICA0NTQsICA0NTQsCisgICAgICA0NTQsICA0NTQsICA3MjQsICA3MjQsICA3MjQsICA3MjQsICA3MjQsICA3MjQsICA3MjQsICA3MjgsCisgICAgICA3MjgsICA3MjgsICA3MjgsICA3MjgsICA3MjgsICA3MjgsICA3NDgsICA3NjQsICA0NTQsICA0NjQsCisgICAgICA0NjQsICA0NjQsICA0NjQsICA0NjQsICA0NjQsICA0NjQsICA0NjQsICA0NjQsIDE1NTgsIDEwMTAsCisgICAgICA3NDgsICA0NjQsIDE1NjIsICA4ODMsICA3NjQsICA3NTEsICA0NjQsICA0NjQsICA0NjQsICA0NjQsCiAKLSAgICAgIDQ1MSwgIDQ1MSwgIDQ1MSwgIDQ1MSwgIDQ1MSwgIDQ1MSwgMTA2NiwgMTI3MCwgMTI2OSwgIDQ1MSwKLSAgICAgMTI2NSwgIDQ1MSwgIDk3MywgIDk3MywgMTA2NiwgIDQ1MSwgIDQ1MSwgIDQ1MSwgIDQ1MSwgIDQ1MSwKLSAgICAgIDQ1MSwgIDY2NCwgIDY2NCwgIDY2NCwgIDY2NCwgIDY2NCwgIDY2NCwgIDY2NCwgIDcyNCwgIDcyNCwKLSAgICAgIDcyNCwgIDcyNCwgIDcyNCwgIDcyNCwgIDcyNCwgIDc1MywgIDc2OCwgIDQ1MSwgIDQ1NywgIDQ1NywKLSAgICAgIDQ1NywgIDQ1NywgIDQ1NywgIDQ1NywgIDQ1NywgIDQ1NywgIDQ1NywgMTI2NCwgMTI2MSwgIDc1MywKLSAgICAgIDQ1NywgMTAwOCwgMTI1NywgMTAxNSwgIDc2OCwgIDg4NiwgIDQ1NywgIDQ1NywgIDQ1NywgIDQ1NywKLSAgICAgIDQ1NywgIDQ1NywgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ1OSwKLSAgICAgIDQ1OSwgIDc2OCwgMTI1NiwgIDg4NiwgIDQ1OSwgIDc1MywgIDQ1OSwgMTAwOCwgIDg4NiwgMTAxNSwKLSAgICAgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDQ1OSwgIDcyOSwgIDcyOSwgIDcyOSwgIDcyOSwKLSAgICAgIDcyOSwgIDcyOSwgIDcyOSwgIDczMywgIDczMywgIDczMywgIDczMywgIDczMywgIDczMywgIDczMywKKyAgICAgIDQ2NCwgIDQ2NCwgIDQ2NSwgIDQ2NSwgIDQ2NSwgIDQ2NSwgIDQ2NSwgIDQ2NSwgIDQ2NSwgIDc1MSwKKyAgICAgIDg4MywgIDc2NCwgMTU2NiwgIDQ2NSwgMTAxMCwgIDc0OCwgIDc5MiwgIDc5MiwgIDQ2NSwgIDQ2NSwKKyAgICAgIDQ2NSwgIDQ2NSwgIDQ2NSwgIDQ2NSwgIDUxNiwgIDc1MiwgIDUxNiwgIDUxNiwgIDUxNiwgIDUxNiwKKyAgICAgIDUxNiwgIDUxNiwgIDUxNiwgIDc5MiwgIDc1MSwgMTU4NiwgMTAyMiwgIDUxNiwgMTU5NSwgIDc1MiwKKyAgICAgIDk3NCwgIDg2MywgIDUxNiwgIDUxNiwgIDUxNiwgIDUxNiwgIDUxNiwgIDUxNiwgIDUxNywgIDUxNywKKyAgICAgIDUxNywgIDUxNywgIDUxNywgIDUxNywgIDUxNywgIDUxNywgMTI2NiwgIDk3NCwgIDg2MywgIDk3NCwKKyAgICAgIDUxNywgMTAyMiwgIDUxNywgIDg2MywgIDc1MiwgIDUxNywgIDUxNywgIDUxNywgIDUxNywgIDUxNywKKyAgICAgIDUxNywgIDczMywgIDczMywgIDczMywgIDczMywgIDczMywgIDczMywgIDczMywgIDczNSwgIDczNSwKKyAgICAgIDczNSwgIDczNSwgIDczNSwgIDczNSwgIDczNSwgIDc2NiwgIDc3MiwgIDUxNywgIDUxOSwgIDUxOSwKKyAgICAgIDUxOSwgIDUxOSwgIDUxOSwgIDUxOSwgIDUxOSwgIDUxOSwgIDg1NCwgMTI2NSwgMTI2NCwgMTAyNSwKIAotICAgICAgNzU2LCAgNzY5LCAgNDU5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LAotICAgICAgNDY5LCAgNDY5LCAxMjU1LCAxMDI3LCAgNzU2LCAgNDY5LCAxMjUxLCAgOTc1LCAxMjUwLCAgNzY5LAotICAgICAgNzU3LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDY5LCAgNDcwLCAgNDcwLCAgNDcwLAotICAgICAgNDcwLCAgNDcwLCAgNDcwLCAgNDcwLCAgNzU3LCAgOTc1LCAgNzY5LCAxMjQ3LCAgNDcwLCAxMDI3LAotICAgICAgNzU2LCAgNzg1LCAgOTc1LCAgODc2LCAgNDcwLCAgNDcwLCAgNDcwLCAgNDcwLCAgNDcwLCAgNDcwLAotICAgICAgNTIxLCAgODE5LCAgNTIxLCAgNTIxLCAgNTIxLCAgNTIxLCAgNTIxLCAgNTIxLCAgNTIxLCAgNzg1LAotICAgICAgNzU3LCAgODc2LCAxMjQ0LCAgNTIxLCAgODc2LCAgODE5LCAgOTcyLCAgOTY3LCAgNzg1LCAgNTIxLAotICAgICAgNTIxLCAgNTIxLCAgNTIxLCAgNTIxLCAgNTIxLCAgNTIyLCAgNTIyLCAgNTIyLCAgNTIyLCAgNTIyLAotICAgICAgNTIyLCAgNTIyLCAgNTIyLCAxMjQzLCAgOTcyLCAgOTY3LCAxMjQyLCAgNTIyLCAgOTY3LCAgNTIyLAotICAgICAxMjM4LCAgODE5LCAgOTcyLCAgNTIyLCAgNTIyLCAgNTIyLCAgNTIyLCAgNTIyLCAgNTIyLCAgNzM4LAotCi0gICAgICA3MzgsICA3MzgsICA3MzgsICA3MzgsICA3MzgsICA3MzgsICA3NDAsICA3NDAsICA3NDAsICA3NDAsCi0gICAgICA3NDAsICA3NDAsICA3NDAsICA3NzEsICA3NzcsICA1MjIsICA1MjQsICA1MjQsICA1MjQsICA1MjQsCi0gICAgICA1MjQsICA1MjQsICA1MjQsICA1MjQsIDEwMzAsIDExMjQsIDEyMzcsIDEwNDIsICA1MjQsIDEwNDYsCi0gICAgIDEwNTgsICA3NzEsICA3NzcsIDExMjQsICA1MjQsICA1MjQsICA1MjQsICA1MjQsICA1MjQsICA1MjQsCi0gICAgICA1MjgsICA1MjgsICA1MjgsICA1MjgsICA1MjgsICA1MjgsICA1MjgsICA1MjgsICA3NzEsIDExMzUsCi0gICAgIDEwMzAsICA3NzcsICA1MjgsIDEwNDIsIDExMTQsIDEwNDYsIDEwNTgsIDExMzUsICA1MjgsICA1MjgsCisgICAgICA1MTksIDEwMzcsICA3NjYsICA3NzIsICA4NTQsICA1MTksICA1MTksICA1MTksICA1MTksICA1MTksCisgICAgICA1MTksICA1MjMsICA1MjMsICA1MjMsICA1MjMsICA1MjMsICA1MjMsICA1MjMsICA1MjMsICA3NjYsCisgICAgIDEyNjAsIDEyNTksICA3NzIsICA1MjMsIDEwMjUsIDEwNDEsIDEwMzcsIDEwNTMsICA1MjMsICA1MjMsCisgICAgICA1MjMsICA1MjMsICA1MjMsICA1MjMsICA1MjQsICA1MjQsICA1MjQsICA1MjQsICA1MjQsICA1MjQsCisgICAgICA1MjQsICA1MjQsICA1MjUsICA1MjUsICA1MjUsICA1MjUsICA1MjUsICA1MjUsICA1MjUsICA5MTIsCisgICAgIDEwNDEsIDEyNTYsIDEwNTMsICA1MjUsIDExMDksIDExNjIsIDExNzQsICA5MTIsICA1MjUsICA1MjUsCisgICAgICA1MjUsICA1MjUsICA1MjUsICA1MjUsICA1MjYsICA1MjYsICA1MjYsICA1MjYsICA1MjYsICA1MjYsCisgICAgICA1MjYsICA1MjYsICA1MjgsICA1MjgsICA1MjgsICA1MjgsICA1MjgsICA1MjgsICA1MjgsIDExMDksCisgICAgIDExNjIsIDExNzQsIDEyMDMsICA1MjgsIDEyNTIsIDEyNTEsICA4NjQsICA4NjYsICA1MjgsICA1MjgsCiAgICAgICA1MjgsICA1MjgsICA1MjgsICA1MjgsICA1MjksICA1MjksICA1MjksICA1MjksICA1MjksICA1MjksCi0gICAgICA1MjksICA1MjksICA1MzAsICA1MzAsICA1MzAsICA1MzAsICA1MzAsICA1MzAsICA1MzAsIDExNDcsCi0gICAgIDExMTQsIDEyMzQsIDEyMzMsICA1MzAsIDExNjcsIDExNzksIDEyMDgsIDExNDcsIDEyMzIsICA1MzAsCi0gICAgICA1MzAsICA1MzAsICA1MzAsICA1MzAsICA1MzAsICA1MzEsICA1MzEsICA1MzEsICA1MzEsICA1MzEsCiAKLSAgICAgIDUzMSwgIDUzMSwgIDUzMSwgIDUzMywgIDUzMywgIDUzMywgIDUzMywgIDUzMywgIDUzMywgIDUzMywKLSAgICAgMTE2NywgMTE3OSwgMTIwOCwgMTIxMSwgIDUzMywgMTIyOCwgMTIyNiwgIDk3MCwgIDk3NCwgIDk3NywKLSAgICAgIDUzMywgIDUzMywgIDUzMywgIDUzMywgIDUzMywgIDUzMywgIDUzNCwgIDUzNCwgIDUzNCwgIDUzNCwKLSAgICAgIDUzNCwgIDUzNCwgIDUzNCwgIDUzNCwgIDUzNCwgIDk3MCwgIDk3NCwgIDk3NywgIDUzNCwgMTIxMSwKLSAgICAgIDk3MCwgIDk3NCwgIDk3NywgIDgyMCwgIDUzNCwgIDUzNCwgIDUzNCwgIDUzNCwgIDUzNCwgIDUzNCwKLSAgICAgIDUzNSwgIDUzNSwgIDUzNSwgIDUzNSwgIDUzNSwgIDUzNSwgIDUzNSwgIDgyMCwgMTE1OSwgMTIyNSwKLSAgICAgMTIxNCwgIDUzNSwgMTIyMiwgIDk3NiwgIDk3OCwgMTIyMSwgMTE1OSwgIDUzNSwgIDUzNSwgIDUzNSwKLSAgICAgIDUzNSwgIDUzNSwgIDUzNSwgIDUzOSwgIDUzOSwgIDUzOSwgIDUzOSwgIDUzOSwgIDUzOSwgIDUzOSwKLSAgICAgIDUzOSwgIDk3NiwgIDk3OCwgIDgyMCwgIDUzOSwgIDk3OCwgMTIxNCwgIDk3OSwgIDk4MSwgIDk3NiwKLSAgICAgIDUzOSwgIDUzOSwgIDUzOSwgIDUzOSwgIDUzOSwgIDUzOSwgIDU0MSwgIDU0MSwgIDU0MSwgIDU0MSwKKyAgICAgIDUyOSwgIDUyOSwgIDUyOSwgIDg2NCwgIDg2NiwgMTI1MCwgIDUyOSwgMTIwMywgIDg2NCwgIDg2NiwKKyAgICAgIDgxNCwgIDUyOSwgIDUyOSwgIDUyOSwgIDUyOSwgIDUyOSwgIDUyOSwgIDUzMCwgIDUzMCwgIDUzMCwKKyAgICAgIDUzMCwgIDUzMCwgIDUzMCwgIDUzMCwgIDgxNCwgMTI0NiwgMTIwNiwgMTI0NSwgIDUzMCwgMTI0MiwKKyAgICAgIDg2OCwgIDg2OSwgMTIzOSwgIDUzMCwgIDUzMCwgIDUzMCwgIDUzMCwgIDUzMCwgIDUzMCwgIDUzNCwKKyAgICAgIDUzNCwgIDUzNCwgIDUzNCwgIDUzNCwgIDUzNCwgIDUzNCwgIDUzNCwgIDg2OCwgIDg2OSwgIDgxNCwKKyAgICAgIDUzNCwgMTIwNiwgIDg2OCwgIDg2OSwgIDg3MSwgIDUzNCwgIDUzNCwgIDUzNCwgIDUzNCwgIDUzNCwKKyAgICAgIDUzNCwgIDUzNiwgIDUzNiwgIDUzNiwgIDUzNiwgIDUzNiwgIDUzNiwgIDUzNiwgIDUzNiwgIDUzNiwKKyAgICAgMTIzOCwgIDg3MSwgMTIwOSwgIDUzNiwgIDg3MSwgIDg3NCwgMTIzNywgIDg4MSwgIDUzNiwgIDUzNiwKKyAgICAgIDUzNiwgIDUzNiwgIDUzNiwgIDUzNiwgIDUzNywgIDUzNywgIDUzNywgIDUzNywgIDUzNywgIDUzNywKKyAgICAgIDUzNywgIDUzNywgIDg3NCwgIDg3NCwgIDg4MSwgIDUzNywgMTIzMywgMTIwOSwgIDg3NSwgIDg4MSwKIAotICAgICAgNTQxLCAgNTQxLCAgNTQxLCAgNTQxLCAgNTQxLCAgOTc5LCAgOTgxLCAgOTc5LCAgNTQxLCAxMjE4LAotICAgICAgOTgzLCAgOTgxLCAgOTg0LCAxMjE1LCAgNTQxLCAgNTQxLCAgNTQxLCAgNTQxLCAgNTQxLCAgNTQxLAotICAgICAgNTQyLCAgNTQyLCAgNTQyLCAgNTQyLCAgNTQyLCAgNTQyLCAgNTQyLCAgNTQyLCAgOTgzLCAxMjEyLAotICAgICAgOTg0LCAgNTQyLCAxMjA5LCAxMjA1LCAgOTg1LCAgOTg5LCAxMDc2LCAgNTQyLCAgNTQyLCAgNTQyLAotICAgICAgNTQyLCAgNTQyLCAgNTQyLCAgNTUwLCAgNTUwLCAgNTUwLCAgNTUwLCAgNTUwLCAgNTUwLCAgNTUwLAotICAgICAgNTUwLCAgNTUwLCAgOTg1LCAgOTg5LCAxMDc2LCAgNTUwLCAxMTgxLCAxMDc5LCAxMDgyLCAxMDgzLAotICAgICAxMTgwLCAgNTUwLCAgNTUwLCAgNTUwLCAgNTUwLCAgNTUwLCAgNTUwLCAgNTUxLCAgNTUxLCAgNTUxLAotICAgICAgNTUxLCAgNTUxLCAgNTUxLCAgNTUxLCAgNTUxLCAxMDc5LCAxMDgyLCAxMDgzLCAgNTUxLCAxMDc5LAotICAgICAxMDgyLCAxMDg0LCAxMDgzLCAxMDg3LCAgNTUxLCAgNTUxLCAgNTUxLCAgNTUxLCAgNTUxLCAgNTUxLAotICAgICAgNTYwLCAgNTYwLCAgNTYwLCAgNTYwLCAgNTYwLCAgNTYwLCAgNTYwLCAgNTYwLCAgNTYwLCAxMDg0LAorICAgICAgNTM3LCAgNTM3LCAgNTM3LCAgNTM3LCAgNTM3LCAgNTM3LCAgNTQ1LCAgNTQ1LCAgNTQ1LCAgNTQ1LAorICAgICAgNTQ1LCAgNTQ1LCAgNTQ1LCAgNTQ1LCAgNTQ1LCAgODc1LCAxMjMyLCAxMjI5LCAgNTQ1LCAxMjEyLAorICAgICAgOTY1LCAgOTYyLCAgODc1LCAgNTQ1LCAgNTQ1LCAgNTQ1LCAgNTQ1LCAgNTQ1LCAgNTQ1LCAgNTQ2LAorICAgICAgNTQ2LCAgNTQ2LCAgNTQ2LCAgNTQ2LCAgNTQ2LCAgNTQ2LCAgNTQ2LCAgOTY1LCAgOTYyLCAxMjE1LAorICAgICAgNTQ2LCAgOTYyLCAgOTY1LCAgOTY4LCAxMjEyLCAgNTQ2LCAgNTQ2LCAgNTQ2LCAgNTQ2LCAgNTQ2LAorICAgICAgNTQ2LCAgNTU1LCAgNTU1LCAgNTU1LCAgNTU1LCAgNTU1LCAgNTU1LCAgNTU1LCAgNTU1LCAgNTU1LAorICAgICAgOTY4LCAgOTY4LCAxMjQwLCAgNTU1LCAxMjE1LCAxMjI4LCAgOTcwLCAgOTY5LCAgNTU1LCAgNTU1LAorICAgICAgNTU1LCAgNTU1LCAgNTU1LCAgNTU1LCAgNTU3LCAgNTU3LCAgNTU3LCAgNTU3LCAgNTU3LCAgNTU3LAorICAgICAgNTU3LCAgNTU3LCAgNTU3LCAgOTcwLCAgOTY5LCAxMjI3LCAgNTU3LCAxMjQwLCAgNTU3LCAgOTY5LAorICAgICAgOTcwLCAgNTU3LCAgNTU3LCAgNTU3LCAgNTU3LCAgNTU3LCAgNTU3LCAgNzM5LCAgNzM5LCAgNzM5LAogCi0gICAgIDExNzcsIDEwODcsICA1NjAsIDEyMTcsIDEyMjAsIDEwODgsIDEwODcsIDExNzMsICA1NjAsICA1NjAsCi0gICAgICA1NjAsICA1NjAsICA1NjAsICA1NjAsICA1NjIsICA1NjIsICA1NjIsICA1NjIsICA1NjIsICA1NjIsCi0gICAgICA1NjIsICA1NjIsICA1NjIsIDEwODgsIDExNzIsIDEwODgsICA1NjIsIDExNjksICA1NjIsIDEyMTcsCi0gICAgIDEyMjAsIDExNjQsICA1NjIsICA1NjIsICA1NjIsICA1NjIsICA1NjIsICA1NjIsICA3NDQsICA3NDQsCi0gICAgICA3NDQsICA3NDQsICA3NDQsICA3NDQsICA3NDQsICA3NTAsICA3NTAsICA3NTAsICA3NTAsICA3NTAsCi0gICAgICA3NTAsICA3NTAsICA4NzIsICA3NzgsICA1NjIsICA2MTMsICA2MTMsICA2MTMsICA2MTMsICA2MTMsCi0gICAgICA2MTMsICA2MTMsIDEyNDUsIDExNjMsIDEyNTksIDEyNzMsICA2MTMsIDEzMTksIDEwOTIsIDExNjAsCi0gICAgICA4NzIsICA3NzgsICA2MTMsICA2MTMsICA2MTMsICA2MTMsICA2MTMsICA2MTMsICA2MTUsICA2MTUsCi0gICAgICA2MTUsICA2MTUsICA2MTUsICA2MTUsICA2MTUsICA3NzgsIDEwOTIsICA4NzIsIDEyNDUsICA2MTUsCi0gICAgIDEyNTksIDEyNzMsIDEwOTIsIDEzMTksIDExNTIsICA2MTUsICA2MTUsICA2MTUsICA2MTUsICA2MTUsCisgICAgICA3MzksICA3MzksICA3MzksICA3MzksICA3NDUsICA3NDUsICA3NDUsICA3NDUsICA3NDUsICA3NDUsCisgICAgICA3NDUsICA4NjcsICA3NzMsICA1NTcsICA2MDgsICA2MDgsICA2MDgsICA2MDgsICA2MDgsICA2MDgsCisgICAgICA2MDgsIDEyNTQsIDEyMjMsIDEyNjgsIDEyMjEsICA2MDgsIDEzMTQsICA5NzIsICA4NjcsICA3NzMsCisgICAgICA2MDgsICA2MDgsICA2MDgsICA2MDgsICA2MDgsICA2MDgsICA2MTAsICA2MTAsICA2MTAsICA2MTAsCisgICAgICA2MTAsICA2MTAsICA2MTAsICA3NzMsICA5NzIsICA4NjcsIDEyNTQsICA2MTAsIDEyNjgsICA5NzIsCisgICAgIDEzNzcsIDEzMTQsICA2MTAsICA2MTAsICA2MTAsICA2MTAsICA2MTAsICA2MTAsICA2MTEsICA2MTEsCisgICAgICA2MTEsICA2MTEsICA2MTEsICA2MTEsICA2MTEsICA2MTEsICA2MTMsICA2MTMsICA2MTMsICA2MTMsCisgICAgICA2MTMsICA2MTMsICA2MTMsICA5MjMsIDE0MjcsIDEzNzcsIDE0MzYsICA2MTMsIDE0NDUsICA4NzgsCisgICAgICA5NzYsICA5MjMsICA2MTMsICA2MTMsICA2MTMsICA2MTMsICA2MTMsICA2MTMsICA2MTUsICA2MTUsCisgICAgICA2MTUsICA2MTUsICA2MTUsICA2MTUsICA2MTUsICA2MTUsICA4NzgsICA5NzYsIDEyMjAsIDE0MjcsCiAKLSAgICAgIDYxNSwgIDYxNiwgIDYxNiwgIDYxNiwgIDYxNiwgIDYxNiwgIDYxNiwgIDYxNiwgIDYxNiwgIDYxOCwKLSAgICAgIDYxOCwgIDYxOCwgIDYxOCwgIDYxOCwgIDYxOCwgIDYxOCwgMTI5MSwgMTE1MSwgMTE0OCwgMTM4MiwKLSAgICAgIDYxOCwgMTQzMiwgIDg4MiwgMTA5MCwgMTI5MSwgMTA5MywgIDYxOCwgIDYxOCwgIDYxOCwgIDYxOCwKLSAgICAgIDYxOCwgIDYxOCwgIDYyMCwgIDYyMCwgIDYyMCwgIDYyMCwgIDYyMCwgIDYyMCwgIDYyMCwgIDYyMCwKLSAgICAgIDg4MiwgMTA5MCwgMTA5MCwgMTA5MywgIDYyMCwgMTM4MiwgMTA5MywgMTQzMiwgMTQ0MSwgIDg4MiwKLSAgICAgIDYyMCwgIDYyMCwgIDYyMCwgIDYyMCwgIDYyMCwgIDYyMCwgIDYyMSwgIDYyMSwgIDYyMSwgIDYyMSwKLSAgICAgIDYyMSwgIDYyMSwgIDYyMSwgIDYyMSwgIDYyMiwgIDYyMiwgIDYyMiwgIDYyMiwgIDYyMiwgIDYyMiwKLSAgICAgIDYyMiwgMTM0NywgMTM1NCwgMTE0MCwgMTQ0MSwgIDYyMiwgMTEzOSwgMTEzNiwgMTEyOSwgMTM0NywKLSAgICAgMTM1NCwgIDYyMiwgIDYyMiwgIDYyMiwgIDYyMiwgIDYyMiwgIDYyMiwgIDYyMywgIDYyMywgIDYyMywKLSAgICAgIDYyMywgIDYyMywgIDYyMywgIDYyMywgIDYyMywgIDYyNiwgIDYyNiwgIDYyNiwgIDYyNiwgIDYyNiwKKyAgICAgIDYxNSwgMTQzNiwgIDk3NiwgMTQ0NSwgIDg3OCwgIDYxNSwgIDYxNSwgIDYxNSwgIDYxNSwgIDYxNSwKKyAgICAgIDYxNSwgIDYxNiwgIDYxNiwgIDYxNiwgIDYxNiwgIDYxNiwgIDYxNiwgIDYxNiwgIDYxNiwgIDYxNywKKyAgICAgIDYxNywgIDYxNywgIDYxNywgIDYxNywgIDYxNywgIDYxNywgIDkzNSwgMTIxNywgMTIxNiwgMTIxMywKKyAgICAgIDYxNywgMTIxMCwgMTIwNywgMTIwNCwgIDkzNSwgIDYxNywgIDYxNywgIDYxNywgIDYxNywgIDYxNywKKyAgICAgIDYxNywgIDYxOCwgIDYxOCwgIDYxOCwgIDYxOCwgIDYxOCwgIDYxOCwgIDYxOCwgIDYxOCwgIDYyMSwKKyAgICAgIDYyMSwgIDYyMSwgIDYyMSwgIDYyMSwgIDYyMSwgIDYyMSwgIDYyMSwgIDYyMSwgIDc2NSwgIDc3NSwKKyAgICAgIDc3NiwgIDYyMSwgIDc3NywgIDYyMSwgIDk3MywgIDk3OCwgIDYyMSwgIDYyMSwgIDYyMSwgIDYyMSwKKyAgICAgIDYyMSwgIDYyMSwgMTA2MSwgMTIwMCwgMTE3NiwgIDc2NSwgIDc3NSwgIDc3NiwgMTE3NSwgIDc3NywKKyAgICAgMTA2MSwgIDk3MywgIDk3OCwgIDc3MCwgIDk3MywgIDc3NSwgIDc3NiwgIDc2NSwgIDYyMSwgIDYyNCwKKyAgICAgIDYyNCwgIDYyNCwgIDYyNCwgIDYyNCwgIDYyNCwgIDYyNCwgIDYyNCwgIDYyNCwgIDc3NywgIDc4MCwKIAotICAgICAgNjI2LCAgNjI2LCAgNjI2LCAgNjI2LCAgNzcwLCAgODg0LCAgODI3LCAgNjI2LCAgNzgyLCAgNjI2LAotICAgICAgNzg2LCAxMTgyLCAxMTg2LCAgNjI2LCAgNjI2LCAgNjI2LCAgNjI2LCAgNjI2LCAgNjI2LCAxMzYyLAotICAgICAgODI3LCAxMTI4LCAgNzcwLCAgODg0LCAxMTI1LCAxMTIwLCAgNzgyLCAxMzYyLCAgNzg2LCAxMTgyLAotICAgICAxMTg2LCAgNzc1LCAgODg0LCAgNzkyLCAgNzcwLCAgNjI2LCAgNjI5LCAgNjI5LCAgNjI5LCAgNjI5LAotICAgICAgNjI5LCAgNjI5LCAgNjI5LCAgNjI5LCAgNjI5LCAgNzgyLCAgODI3LCAgNzg2LCAgNjI5LCAgNzc1LAotICAgICAgNjI5LCAgNzkyLCAxMzcwLCAxMTgyLCAgNjI5LCAgNjI5LCAgNjI5LCAgNjI5LCAgNjI5LCAgNjI5LAotICAgICAxMzcwLCAgNzc1LCAxMTE5LCAxMTE2LCAgNzkyLCAgNzk5LCAgNzk5LCAgNzk5LCAgNzk5LCAgNzk5LAotICAgICAgNzk5LCAgNzk5LCAgNzkzLCAgODI4LCAgODMxLCAxNDUwLCAgNjI5LCAgNjM1LCAgNjM1LCAgNjM1LAotICAgICAgNjM1LCAgNjM1LCAgNjM1LCAgNjM1LCAgNjM1LCAgNjM1LCAxMTgzLCAgODI4LCAgODMxLCAgNjM1LAotICAgICAgNzkzLCAgNjM1LCAgODMyLCAgODQyLCAgODQzLCAgNjM1LCAgNjM1LCAgNjM1LCAgNjM1LCAgNjM1LAorICAgICAgNzcwLCAgNjI0LCAgNzgxLCAgNjI0LCAgOTc5LCAxMTE5LCAgNjI0LCAgNjI0LCAgNjI0LCAgNjI0LAorICAgICAgNjI0LCAgNjI0LCAgNzcwLCAxMTE5LCAxMTcyLCAxMTMwLCAgNzgwLCAxNDU0LCAxMTY4LCAgNzgxLAorICAgICAxMTY3LCAgOTc5LCAgNzg3LCAxMTMwLCAxMTY0LCAgNzgwLCAgODE1LCAgNzg4LCAgNjI0LCAgNjMwLAorICAgICAgNjMwLCAgNjMwLCAgNjMwLCAgNjMwLCAgNjMwLCAgNjMwLCAgNjMwLCAgNjMwLCAgNzgxLCAgNzg3LAorICAgICAgODE1LCAgNjMwLCAxNDU0LCAgNjMwLCAgNzg4LCAxMTQyLCAgNjMwLCAgNjMwLCAgNjMwLCAgNjMwLAorICAgICAgNjMwLCAgNjMwLCAgNzg3LCAxMTQyLCAxNTIxLCAxMTU5LCAgNzg4LCAgNzk0LCAgNzk0LCAgNzk0LAorICAgICAgNzk0LCAgNzk0LCAgNzk0LCAgNzk0LCAgODIyLCAgODE1LCAgODIzLCAgODczLCAgNjMwLCAgNjM1LAorICAgICAgNjM1LCAgNjM1LCAgNjM1LCAgNjM1LCAgNjM1LCAgNjM1LCAgNjM1LCAgNjM1LCAgODIyLCAxNTIxLAorICAgICAgODIzLCAgNjM1LCAxMTU4LCAxNTQ4LCAgODczLCAxMTU1LCAgNjM1LCAgNjM1LCAgNjM1LCAgNjM1LAorICAgICAgNjM1LCAgNjM1LCAgNjM3LCAgNjM3LCAgNjM3LCAgNjM3LCAgNjM3LCAgNjM3LCAgNjM3LCAgNjM3LAogCi0gICAgICA2MzUsIDE0NTAsICA3OTMsIDEzNzgsIDExODMsIDE0NTksICA4MzIsICA4NDIsICA4NDMsIDExODQsCi0gICAgIDExMTUsIDEzNzgsIDExMTIsICA4MjgsICA4MzEsICA4NDYsIDExMTEsICA2MzUsICA2NDAsICA2NDAsCi0gICAgICA2NDAsICA2NDAsICA2NDAsICA2NDAsICA2NDAsICA2NDAsICA2NDAsIDExODQsIDExODMsICA4NDYsCi0gICAgICA2NDAsIDE0NTksICA4MzIsICA4NDIsICA4NDMsIDExODksICA2NDAsICA2NDAsICA2NDAsICA2NDAsCi0gICAgICA2NDAsICA2NDAsICA2NDIsICA2NDIsICA2NDIsICA2NDIsICA2NDIsICA2NDIsICA2NDIsICA2NDIsCi0gICAgICA2NDIsIDExODQsIDExMDgsIDExODksICA2NDIsICA4NDYsICA2NDIsIDExMDUsIDExODksICA4NDcsCi0gICAgICA2NDIsICA2NDIsICA2NDIsICA2NDIsICA2NDIsICA2NDIsICA4NDAsICA4NDAsICA4NDAsICA4NDAsCi0gICAgICA4NDAsICA4NDAsICA4NDAsICA4NDcsICA4NTUsICA4NTUsICA4NTUsICA4NTUsICA4NTUsICA4NTUsCi0gICAgICA4NTUsIDExMDIsICA2NDIsICA2NTIsICA2NTIsICA2NTIsICA2NTIsICA2NTIsICA2NTIsICA2NTIsCi0gICAgICA2NTIsICA2NTIsIDE0MjMsIDEwOTgsIDE1MjYsICA2NTIsIDE1NTMsIDE1NTcsIDExODUsICA4NDcsCisgICAgICA2MzcsICA4NzMsICA4MjYsICA4MjIsICA2MzcsICA4MjMsICA2MzcsICA4MjcsIDE1NDgsICA2MzcsCisgICAgICA2MzcsICA2MzcsICA2MzcsICA2MzcsICA2MzcsIDExNDcsICA4MjYsIDE1NTIsIDExNDYsIDExNDMsCisgICAgIDE1NTYsICA4MjcsICA4MzUsICA4MzUsICA4MzUsICA4MzUsICA4MzUsICA4MzUsICA4MzUsICA4MzcsCisgICAgICA5ODAsICA2MzcsICA2NDcsICA2NDcsICA2NDcsICA2NDcsICA2NDcsICA2NDcsICA2NDcsICA2NDcsCisgICAgICA2NDcsICA4MjYsIDE1NTIsICA4MzcsICA2NDcsIDE1NTYsICA4MjcsICA5ODAsIDExMzUsICA2NDcsCisgICAgICA2NDcsICA2NDcsICA2NDcsICA2NDcsICA2NDcsICA2NDksICA2NDksICA2NDksICA2NDksICA2NDksCisgICAgICA2NDksICA2NDksICA2NDksICA2NDksICA4NzYsICA4MzgsICA4NDEsICA2NDksICA4MzcsICA2NDksCisgICAgICA4NDIsIDExMzQsICA2NDksICA2NDksICA2NDksICA2NDksICA2NDksICA2NDksIDExMzEsICA4MzgsCisgICAgICA4NDEsICA4NzYsIDExMjQsIDE1NjAsICA4NDIsICA4NTAsICA4NTAsICA4NTAsICA4NTAsICA4NTAsCisgICAgICA4NTAsICA4NTAsICA4NzYsICA4NjUsICA2NDksICA2NjAsICA2NjAsICA2NjAsICA2NjAsICA2NjAsCiAKLSAgICAgMTQyMywgIDY1MiwgIDY1MiwgIDY1MiwgIDY1MiwgIDY1MiwgIDY1MiwgIDY1NCwgIDY1NCwgIDY1NCwKLSAgICAgIDY1NCwgIDY1NCwgIDY1NCwgIDY1NCwgIDY1NCwgIDY1NCwgMTE4NSwgMTA3MSwgMTE4NSwgIDY1NCwKLSAgICAgMTUyNiwgIDY1NCwgMTU1MywgMTU1NywgMTA2NywgIDY1NCwgIDY1NCwgIDY1NCwgIDY1NCwgIDY1NCwKLSAgICAgIDY1NCwgIDg1NywgIDg1NywgIDg1NywgIDg1NywgIDg1NywgIDg1NywgIDg1NywgIDg2MSwgIDg2MSwKLSAgICAgIDg2MSwgIDg2MSwgIDg2MSwgIDg2MSwgIDg2MSwgIDg3OCwgIDg3MCwgIDY1NCwgIDY2NSwgIDY2NSwKLSAgICAgIDY2NSwgIDY2NSwgIDY2NSwgIDY2NSwgIDY2NSwgIDY2NSwgIDY2NSwgMTQ3MiwgMTA2MCwgMTA1OSwKLSAgICAgIDY2NSwgMTA1NiwgMTU2MSwgIDg3OCwgIDg3MCwgMTQ3MiwgIDY2NSwgIDY2NSwgIDY2NSwgIDY2NSwKLSAgICAgIDY2NSwgIDY2NSwgIDY2NiwgIDY2NiwgIDY2NiwgIDY2NiwgIDY2NiwgIDY2NiwgIDY2NiwgIDg3MCwKLSAgICAgIDg3OCwgMTA1MiwgMTA1MSwgIDY2NiwgIDg4NywgIDg3NSwgIDg3NywgIDg4NSwgMTU2MSwgIDY2NiwKLSAgICAgIDY2NiwgIDY2NiwgIDY2NiwgIDY2NiwgIDY2NiwgIDY2OSwgIDY2OSwgIDY2OSwgIDY2OSwgIDY2OSwKKyAgICAgIDY2MCwgIDY2MCwgIDY2MCwgIDY2MCwgIDgzOCwgIDg0MSwgMTEyMywgIDY2MCwgMTU2MCwgIDg0MiwKKyAgICAgIDg2NSwgIDg4MiwgIDY2MCwgIDY2MCwgIDY2MCwgIDY2MCwgIDY2MCwgIDY2MCwgIDY2MSwgIDY2MSwKKyAgICAgIDY2MSwgIDY2MSwgIDY2MSwgIDY2MSwgIDY2MSwgIDg2NSwgMTEyMCwgMTExNSwgIDg4MiwgIDY2MSwKKyAgICAgMTExNCwgIDk4NCwgMTA3MSwgMTA3OSwgIDY2MSwgIDY2MSwgIDY2MSwgIDY2MSwgIDY2MSwgIDY2MSwKKyAgICAgIDY2NCwgIDY2NCwgIDY2NCwgIDY2NCwgIDY2NCwgIDY2NCwgIDY2NCwgIDg4MiwgIDk4NCwgMTA3MSwKKyAgICAgMTA3OSwgIDY2NCwgIDg3MCwgIDg3MiwgIDk1OCwgIDg4MCwgIDY2NCwgIDY2NCwgIDY2NCwgIDY2NCwKKyAgICAgIDY2NCwgIDY2NCwgIDg1MiwgIDg1MiwgIDg1MiwgIDg1MiwgIDg1MiwgIDg1MiwgIDg1MiwgIDg3MCwKKyAgICAgIDg3MiwgIDk1OCwgIDg4MCwgIDk0NiwgIDY2NCwgIDY5OSwgIDk0NywgIDY5OSwgIDY5OSwgIDY5OSwKKyAgICAgIDY5OSwgIDY5OSwgIDY5OSwgIDY5OSwgIDg3MCwgIDg3MiwgIDk1OCwgIDk0NiwgIDY5OSwgIDg4MCwKKyAgICAgIDk0NywgMTA4MywgMTA3NCwgIDY5OSwgIDY5OSwgIDY5OSwgIDY5OSwgIDY5OSwgIDY5OSwgIDcwMCwKIAotICAgICAgNjY5LCAgNjY5LCAgODg3LCAgODc1LCAgODc3LCAgODg1LCAgNjY5LCAgOTY2LCAxMDc4LCAgOTUxLAotICAgICAgOTYzLCAgODgxLCAgNjY5LCAgNjY5LCAgNjY5LCAgNjY5LCAgNjY5LCAgNjY5LCAgODc1LCAgODc3LAotICAgICAxNTY1LCAgODg3LCAgODg1LCAgOTUxLCAxNTMyLCAgOTY2LCAxMDc4LCAgOTUyLCAgOTYzLCAgODgxLAotICAgICAgNjY5LCAgNzA0LCAxNTMyLCAgNzA0LCAgNzA0LCAgNzA0LCAgNzA0LCAgNzA0LCAgNzA0LCAgNzA0LAotICAgICAgODgxLCAgOTUyLCAgOTY2LCAgOTYzLCAgNzA0LCAxMDc4LCAxNTY1LCAgOTY0LCAxMDQ4LCAgOTUxLAotICAgICAgNzA0LCAgNzA0LCAgNzA0LCAgNzA0LCAgNzA0LCAgNzA0LCAgOTEwLCAgOTEwLCAgOTEwLCAgOTEwLAotICAgICAgOTEwLCAgOTEwLCAgOTEwLCAgOTU1LCAgOTU2LCAgOTY0LCAgOTY4LCAgOTUyLCAgNzA0LCAgNzA1LAotICAgICAgNzA1LCAgNzA1LCAgNzA1LCAgNzA1LCAgNzA1LCAgNzA1LCAgNzA1LCAgOTU1LCAgOTU2LCAxMDQ0LAotICAgICAgOTY0LCAgNzA1LCAxMTkwLCAxMjk4LCAgOTY4LCAgOTY4LCAxMDQzLCAgNzA1LCAgNzA1LCAgNzA1LAotICAgICAgNzA1LCAgNzA1LCAgNzA1LCAgOTE1LCAgOTE1LCAgOTE1LCAgOTE1LCAgOTE1LCAgOTE1LCAgOTE1LAorICAgICAgNzAwLCAgNzAwLCAgNzAwLCAgNzAwLCAgNzAwLCAgNzAwLCAgNzAwLCAxMTExLCAxMDgzLCAxMDc0LAorICAgICAxMDgzLCAgNzAwLCAgOTQ2LCAxMDc0LCAxMTEwLCAgOTQ3LCAgNzAwLCAgNzAwLCAgNzAwLCAgNzAwLAorICAgICAgNzAwLCAgNzAwLCAgNzAxLCAgNzAxLCAgNzAxLCAgNzAxLCAgNzAxLCAgNzAxLCAgNzAxLCAgODU2LAorICAgICAgODU2LCAgODU2LCAgODU2LCAgODU2LCAgODU2LCAgODU2LCAgOTYxLCAgOTU5LCAgODc3LCAgOTA1LAorICAgICAgOTA1LCAgOTA1LCAgOTA1LCAgOTA1LCAgOTA1LCAgOTA1LCAgOTEwLCAgOTEwLCAgOTEwLCAgOTEwLAorICAgICAgOTEwLCAgOTEwLCAgOTEwLCAgOTYxLCAgOTU5LCAgODc3LCAgNzAxLCAgNzAyLCAgNzAyLCAgNzAyLAorICAgICAgNzAyLCAgNzAyLCAgNzAyLCAgNzAyLCAgODc3LCAxMTA3LCAxMTA2LCAxMTAzLCAgNzAyLCAgOTU5LAorICAgICAgOTYxLCAxNTY0LCAxNTg0LCAgNzAyLCAgNzAyLCAgNzAyLCAgNzAyLCAgNzAyLCAgNzAyLCAgNzA0LAorICAgICAgNzA0LCAgNzA0LCAgNzA0LCAgNzA0LCAgNzA0LCAgNzA0LCAgNzA0LCAgNzA2LCAgNzA2LCAgNzA2LAorICAgICAgNzA2LCAgNzA2LCAgNzA2LCAgNzA2LCAgNzA2LCAxMTU0LCAxNTY0LCAxNTg0LCAxMTAwLCAgNzA2LAogCi0gICAgIDExOTAsIDEyOTgsICA5NjgsICA5NTUsICA5NTYsICA3MDUsICA3MDYsICA3MDYsICA3MDYsICA3MDYsCi0gICAgICA3MDYsICA3MDYsICA3MDYsICA5MTksICA5MTksICA5MTksICA5MTksICA5MTksICA5MTksICA5MTksCi0gICAgICA5MjQsICA5MjQsICA5MjQsICA5MjQsICA5MjQsICA5MjQsICA5MjQsICA5MjYsICA5MjYsICA5MjYsCi0gICAgICA5MjYsICA5MjYsICA5MjYsICA5MjYsICA5MzAsICA5MzAsICA5MzAsICA5MzAsICA5MzAsICA5MzAsCi0gICAgICA5MzAsICA3MDYsICA3MDcsICA3MDcsICA3MDcsICA3MDcsICA3MDcsICA3MDcsICA3MDcsIDEwNDAsCi0gICAgIDEwMzYsIDEwMzUsIDEwMzIsICA3MDcsIDEwMjksIDE1NjksIDE1ODksIDE1OTgsIDEwMjgsICA3MDcsCi0gICAgICA3MDcsICA3MDcsICA3MDcsICA3MDcsICA3MDcsICA3MDksICA3MDksICA3MDksICA3MDksICA3MDksCi0gICAgICA3MDksICA3MDksICA3MDksICA3MTEsICA3MTEsICA3MTEsICA3MTEsICA3MTEsICA3MTEsICA3MTEsCi0gICAgICA3MTEsIDE1NjksIDE1ODksIDE1OTgsIDEwMjUsICA3MTEsIDEwMjEsIDEwMjAsIDEwMTcsIDEwMTYsCi0gICAgIDEwMTMsICA3MTEsICA3MTEsICA3MTEsICA3MTEsICA3MTEsICA3MTEsICA3MTIsICA3MTIsICA3MTIsCisgICAgIDE1OTMsIDEwOTcsIDEwOTMsIDExNTQsICA3MDYsICA3MDYsICA3MDYsICA3MDYsICA3MDYsICA3MDYsCisgICAgICA3MDcsICA3MDcsICA3MDcsICA3MDcsICA3MDcsICA3MDcsICA3MDcsICA3MDcsICA3MDksICA3MDksCisgICAgICA3MDksICA3MDksICA3MDksICA3MDksICA3MDksIDE1OTMsIDEwNjYsIDEwNjIsIDEwNTUsICA3MDksCisgICAgIDEwNTQsIDEwNTEsIDEwNzcsIDEwNzgsICA3MDksICA3MDksICA3MDksICA3MDksICA3MDksICA3MDksCisgICAgICA3MTAsICA3MTAsICA3MTAsICA3MTAsICA3MTAsICA3MTAsICA3MTAsICA3MTAsICA3MTAsIDEwNzcsCisgICAgIDEwNzgsIDEwNDcsICA3MTAsIDEwNzcsIDEwODIsIDEwNzgsICA5NTAsICA3MTAsICA3MTAsICA3MTAsCisgICAgICA3MTAsICA3MTAsICA3MTAsICA3MTEsICA3MTEsICA3MTEsICA3MTEsICA3MTEsICA3MTEsICA3MTEsCisgICAgICA5NTAsIDEwODIsIDEwNDYsIDEwNDMsICA3MTEsIDEwMzksIDEwODIsIDEwODcsIDEwMzgsICA3MTEsCisgICAgICA3MTEsICA3MTEsICA3MTEsICA3MTEsICA3MTEsICA3MTMsICA3MTMsICA3MTMsICA3MTMsICA3MTMsCisgICAgICA3MTMsICA3MTMsICA3MTMsICA3MTMsIDEwODcsICA5NTAsIDEwMzUsICA3MTMsIDEwMzEsIDEwODUsCiAKLSAgICAgIDcxMiwgIDcxMiwgIDcxMiwgIDcxMiwgIDcxMiwgIDcxNCwgIDcxNCwgIDcxNCwgIDcxNCwgIDcxNCwKLSAgICAgIDcxNCwgIDcxNCwgMTAwOSwgMTAwNSwgMTAwNCwgMTAwMywgIDcxNCwgMTAwMCwgIDk5NywgMTIwMSwKLSAgICAgMTIwMiwgMTE4NywgIDcxNCwgIDcxNCwgIDcxNCwgIDcxNCwgIDcxNCwgIDcxNCwgIDcxNSwgIDcxNSwKLSAgICAgIDcxNSwgIDcxNSwgIDcxNSwgIDcxNSwgIDcxNSwgIDcxNSwgIDcxNSwgMTIwMSwgMTIwMiwgMTE4NywKLSAgICAgIDcxNSwgMTIwMSwgIDk5NCwgMTIwMiwgMTI5OSwgMTAxMCwgIDcxNSwgIDcxNSwgIDcxNSwgIDcxNSwKLSAgICAgIDcxNSwgIDcxNSwgIDcxNiwgIDcxNiwgIDcxNiwgIDcxNiwgIDcxNiwgIDcxNiwgIDcxNiwgMTAxMCwKLSAgICAgMTE4NywgIDk5MSwgMTI5OSwgIDcxNiwgIDk5MCwgIDk2MiwgMTMwMCwgIDk2MSwgMTMwMSwgIDcxNiwKLSAgICAgIDcxNiwgIDcxNiwgIDcxNiwgIDcxNiwgIDcxNiwgIDcxOCwgIDcxOCwgIDcxOCwgIDcxOCwgIDcxOCwKLSAgICAgIDcxOCwgIDcxOCwgIDcxOCwgIDcxOCwgMTMwMCwgMTAxMCwgMTMwMSwgIDcxOCwgIDk1OCwgMTE5MiwKLSAgICAgMTMwMiwgMTMxMCwgMTAxMSwgIDcxOCwgIDcxOCwgIDcxOCwgIDcxOCwgIDcxOCwgIDcxOCwgIDcxOSwKKyAgICAgMTA4NywgIDk1MSwgIDcxMywgIDcxMywgIDcxMywgIDcxMywgIDcxMywgIDcxMywgIDcxNCwgIDcxNCwKKyAgICAgIDcxNCwgIDcxNCwgIDcxNCwgIDcxNCwgIDcxNCwgIDk1MSwgMTA4NSwgMTA4NSwgMTAzMCwgIDcxNCwKKyAgICAgMTAyNywgMTE3NywgMTA4OCwgMTAyNCwgIDcxNCwgIDcxNCwgIDcxNCwgIDcxNCwgIDcxNCwgIDcxNCwKKyAgICAgIDcxOCwgIDcxOCwgIDcxOCwgIDcxOCwgIDcxOCwgIDcxOCwgIDcxOCwgIDcxOCwgMTE3NywgMTA4OCwKKyAgICAgIDk1MSwgIDcxOCwgMTA4OCwgMTAyMywgMTE3OCwgMTAyMCwgIDcxOCwgIDcxOCwgIDcxOCwgIDcxOCwKKyAgICAgIDcxOCwgIDcxOCwgIDcyMCwgIDcyMCwgIDcyMCwgIDcyMCwgIDcyMCwgIDcyMCwgIDcyMCwgIDcyMCwKKyAgICAgIDcyMCwgMTE3OCwgMTE3NywgMTAxNiwgIDcyMCwgMTAxNSwgMTE3OSwgMTE4MSwgMTAxMiwgIDcyMCwKKyAgICAgIDcyMCwgIDcyMCwgIDcyMCwgIDcyMCwgIDcyMCwgIDcyMSwgIDcyMSwgIDcyMSwgIDcyMSwgIDcyMSwKKyAgICAgIDcyMSwgIDcyMSwgIDcyMSwgMTE3OSwgMTE4MSwgMTE3OCwgIDcyMSwgMTAxMSwgMTAwOCwgMTE4MCwKKyAgICAgMTAwNCwgIDcyMSwgIDcyMSwgIDcyMSwgIDcyMSwgIDcyMSwgIDcyMSwgIDcyOSwgIDcyOSwgIDcyOSwKIAotICAgICAgNzE5LCAgNzE5LCAgNzE5LCAgNzE5LCAgNzE5LCAgNzE5LCAxMDExLCAxMTkyLCAxMzAyLCAxMzEwLAotICAgICAgNzE5LCAgOTU0LCAxMzA3LCAxMzAyLCAxMzEwLCAxMTkyLCAgNzE5LCAgNzE5LCAgNzE5LCAgNzE5LAotICAgICAgNzE5LCAgNzE5LCAgNzIzLCAgNzIzLCAgNzIzLCAgNzIzLCAgNzIzLCAgNzIzLCAgNzIzLCAgNzIzLAotICAgICAxMzA3LCAgOTUzLCAxMDExLCAgNzIzLCAgOTUwLCAgOTQ1LCAgOTQxLCAxMzE0LCAxMzE1LCAgNzIzLAotICAgICAgNzIzLCAgNzIzLCAgNzIzLCAgNzIzLCAgNzIzLCAgNzI1LCAgNzI1LCAgNzI1LCAgNzI1LCAgNzI1LAotICAgICAgNzI1LCAgNzI1LCAgNzI1LCAgNzI1LCAxMzA3LCAxMzE0LCAxMzE1LCAgNzI1LCAgOTMzLCAgOTI5LAotICAgICAxMzk2LCAxMzk3LCAgOTIyLCAgNzI1LCAgNzI1LCAgNzI1LCAgNzI1LCAgNzI1LCAgNzI1LCAgNzI2LAotICAgICAgNzI2LCAgNzI2LCAgNzI2LCAgNzI2LCAgNzI2LCAgNzI2LCAgNzI2LCAxMzE1LCAxMzk2LCAxMzk3LAotICAgICAgNzI2LCAxMzk2LCAxMzk3LCAxMzk4LCAxMzk5LCAxNDAxLCAgNzI2LCAgNzI2LCAgNzI2LCAgNzI2LAotICAgICAgNzI2LCAgNzI2LCAgNzM0LCAgNzM0LCAgNzM0LCAgNzM0LCAgNzM0LCAgNzM0LCAgNzM0LCAgNzM0LAorICAgICAgNzI5LCAgNzI5LCAgNzI5LCAgNzI5LCAgNzI5LCAgNzI5LCAxMTgwLCAxMTc5LCAxMTgwLCAgNzI5LAorICAgICAxMDAwLCAxMTg0LCAxMTg1LCAxMTgyLCAgNzI5LCAgNzI5LCAgNzI5LCAgNzI5LCAgNzI5LCAgNzI5LAorICAgICAgNzMwLCAgNzMwLCAgNzMwLCAgNzMwLCAgNzMwLCAgNzMwLCAgNzMwLCAgNzMwLCAxMTg0LCAxMTg1LAorICAgICAxMTgyLCAgNzMwLCAgOTk5LCAxMTg0LCAgOTk4LCAxMTk2LCAgNzMwLCAgNzMwLCAgNzMwLCAgNzMwLAorICAgICAgNzMwLCAgNzMwLCAgNzQwLCAgNzQwLCAgNzQwLCAgNzQwLCAgNzQwLCAgNzQwLCAgNzQwLCAgNzQwLAorICAgICAgNzQwLCAxMTgyLCAxMTk2LCAgOTk1LCAgNzQwLCAgOTkyLCAxMTk2LCAxMTk3LCAxMjkzLCAgNzQwLAorICAgICAgNzQwLCAgNzQwLCAgNzQwLCAgNzQwLCAgNzQwLCAgNzQxLCAgNzQxLCAgNzQxLCAgNzQxLCAgNzQxLAorICAgICAgNzQxLCAgNzQxLCAgNzQxLCAgOTg5LCAxMTk3LCAxMjkzLCAgNzQxLCAgOTg2LCAgOTg1LCAxMTk3LAorICAgICAxMjk0LCAgNzQxLCAgNzQxLCAgNzQxLCAgNzQxLCAgNzQxLCAgNzQxLCAgNzUzLCAgNzUzLCAgNzUzLAorICAgICAgNzUzLCAgNzUzLCAgNzUzLCAgNzUzLCAgNzUzLCAgNzUzLCAgOTU3LCAxMjk0LCAgOTU2LCAgNzUzLAogCi0gICAgICA3MzQsIDEzOTgsIDEzOTksIDE0MDEsICA3MzQsICA5MTgsIDEzOTksICA5MTMsIDE0MDIsICA5MDgsCi0gICAgICA3MzQsICA3MzQsICA3MzQsICA3MzQsICA3MzQsICA3MzQsICA3MzUsICA3MzUsICA3MzUsICA3MzUsCi0gICAgICA3MzUsICA3MzUsICA3MzUsICA3MzUsICA5MDcsIDEzOTgsIDE0MDIsICA3MzUsICA5MDYsICA5MDMsCi0gICAgIDE0MDIsIDE0MDMsIDE0MDQsICA3MzUsICA3MzUsICA3MzUsICA3MzUsICA3MzUsICA3MzUsICA3NDUsCi0gICAgICA3NDUsICA3NDUsICA3NDUsICA3NDUsICA3NDUsICA3NDUsICA3NDUsICA3NDUsICA5MDAsIDE0MDMsCi0gICAgIDE0MDQsICA3NDUsICA4OTYsIDE0MDMsIDE0MDYsIDE0MDksIDE0MDQsICA3NDUsICA3NDUsICA3NDUsCi0gICAgICA3NDUsICA3NDUsICA3NDUsICA3NDYsICA3NDYsICA3NDYsICA3NDYsICA3NDYsICA3NDYsICA3NDYsCi0gICAgICA3NDYsICA4NjQsIDE0MDYsIDE0MDksICA3NDYsICA4NjAsIDE0MDYsIDE0NzcsIDE0MDksIDE0NzgsCi0gICAgICA3NDYsICA3NDYsICA3NDYsICA3NDYsICA3NDYsICA3NDYsICA3NTgsICA3NTgsICA3NTgsICA3NTgsCi0gICAgICA3NTgsICA3NTgsICA3NTgsICA3NTgsICA3NTgsIDE0NzcsICA4NTMsIDE0NzgsICA3NTgsICA4NTIsCisgICAgICA5NTMsICA5NDksICA5NDgsICA5NzUsICA3NTMsICA3NTMsICA3NTMsICA3NTMsICA3NTMsICA3NTMsCisgICAgICA3NTUsICA3NTUsICA3NTUsICA3NTUsICA3NTUsICA3NTUsICA3NTUsICA3NTUsICA3NTUsICA4NzksCisgICAgICA5NzUsIDEwMDUsICA3NTUsICA5NDUsICA3NTUsICA5NDAsICA5MzYsICA3NTUsICA3NTUsICA3NTUsCisgICAgICA3NTUsICA3NTUsICA3NTUsICA5NzUsICA5NjcsIDEwMDUsICA4NzksICA5MTQsICA5MTQsICA5MTQsCisgICAgICA5MTQsICA5MTQsICA5MTQsICA5MTQsIDEwNzYsICA4NzksICA5MjgsICA5NjMsIDEwMDYsICA3NTUsCisgICAgICA3ODksICA5NjcsICA3ODksICA3ODksICA3ODksICA3ODksICA3ODksICA3ODksICA3ODksICA5NjcsCisgICAgIDEwMDUsIDEwNzYsIDEwMDYsICA3ODksICA5NjMsICA5NjMsIDEyOTUsICA3ODksICA3ODksICA3ODksCisgICAgICA3ODksICA3ODksICA3ODksICA3ODksICA3OTEsICA3OTEsICA3OTEsICA3OTEsICA3OTEsICA3OTEsCisgICAgICA3OTEsIDEwNzYsICA5NjMsIDEyOTUsICA5MjQsICA3OTEsICA5NzEsIDEwMDYsIDEyOTYsIDEzMDksCisgICAgICA3OTEsICA3OTEsICA3OTEsICA3OTEsICA3OTEsICA3OTEsICA3OTMsICA3OTMsICA3OTMsICA3OTMsCiAKLSAgICAgIDg0OSwgMTQ4OCwgIDg0NSwgMTQ3NywgIDc1OCwgIDc1OCwgIDc1OCwgIDc1OCwgIDc1OCwgIDc1OCwKLSAgICAgIDc2MCwgIDc2MCwgIDc2MCwgIDc2MCwgIDc2MCwgIDc2MCwgIDc2MCwgIDc2MCwgIDc2MCwgMTQ4OCwKLSAgICAgMTQ4OCwgIDg0NCwgIDc2MCwgIDg0MSwgIDc2MCwgIDgzOCwgIDgzNywgIDgzNCwgIDc2MCwgIDc2MCwKLSAgICAgIDc2MCwgIDc2MCwgIDc2MCwgIDc2MCwgIDkzNiwgIDkzNiwgIDkzNiwgIDkzNiwgIDkzNiwgIDkzNiwKLSAgICAgIDkzNiwgIDkzOCwgIDkzOCwgIDkzOCwgIDkzOCwgIDkzOCwgIDkzOCwgIDkzOCwgMTAxOCwgIDk2OSwKLSAgICAgIDc2MCwgIDc5NCwgMTAxOSwgIDc5NCwgIDc5NCwgIDc5NCwgIDc5NCwgIDc5NCwgIDc5NCwgIDc5NCwKLSAgICAgIDgzMCwgIDgyOSwgMTAxOCwgIDgyNiwgIDc5NCwgIDgyNSwgMTAxOSwgIDk2OSwgMTA4MSwgIDc5NCwKLSAgICAgIDc5NCwgIDc5NCwgIDc5NCwgIDc5NCwgIDc5NCwgIDc5NCwgIDc5NiwgIDc5NiwgIDc5NiwgIDc5NiwKLSAgICAgIDc5NiwgIDc5NiwgIDc5NiwgIDk2OSwgIDgyMiwgIDgxOCwgMTA4MSwgIDc5NiwgMTAxOCwgMTUzNCwKLSAgICAgMTQ5MSwgMTUzNiwgMTAxOSwgIDc5NiwgIDc5NiwgIDc5NiwgIDc5NiwgIDc5NiwgIDc5NiwgIDc5OCwKKyAgICAgIDc5MywgIDc5MywgIDc5MywgIDk3MSwgIDkxNywgMTI5NiwgMTMwOSwgIDc5MywgIDkxMywgMTE4NywKKyAgICAgMTI5NywgIDk3MSwgIDc5MywgIDc5MywgIDc5MywgIDc5MywgIDc5MywgIDc5MywgIDc5NSwgIDc5NSwKKyAgICAgIDc5NSwgIDc5NSwgIDc5NSwgIDc5NSwgIDc5NSwgIDc5NSwgMTE4NywgMTI5NywgIDkwOCwgIDkwMywKKyAgICAgIDc5NSwgIDkwMiwgMTI5NywgIDkwMSwgMTE4NywgIDc5NSwgIDc5NSwgIDc5NSwgIDc5NSwgIDc5NSwKKyAgICAgIDc5NSwgIDc5NiwgIDc5NiwgIDc5NiwgIDc5NiwgIDc5NiwgIDc5NiwgIDc5NiwgIDc5NiwgIDc5OSwKKyAgICAgIDc5OSwgIDc5OSwgIDc5OSwgIDc5OSwgIDc5OSwgIDc5OSwgIDc5OSwgIDc5OSwgIDg5OCwgIDg5NSwKKyAgICAgIDg5MSwgIDc5OSwgIDg1OSwgIDc5OSwgIDg1NSwgIDg0OCwgIDc5OSwgIDc5OSwgIDc5OSwgIDc5OSwKKyAgICAgIDc5OSwgIDc5OSwgIDkxOSwgIDkxOSwgIDkxOSwgIDkxOSwgIDkxOSwgIDkxOSwgIDkxOSwgIDkyMSwKKyAgICAgIDkyMSwgIDkyMSwgIDkyMSwgIDkyMSwgIDkyMSwgIDkyMSwgIDg0NywgMTM5NiwgIDc5OSwgIDgwMiwKKyAgICAgIDgwMiwgIDgwMiwgIDgwMiwgIDgwMiwgIDgwMiwgIDgwMiwgIDgwMiwgIDgwMiwgIDg0NCwgIDg0MCwKIAotICAgICAgNzk4LCAgNzk4LCAgNzk4LCAgNzk4LCAgNzk4LCAgNzk4LCAxMDgxLCAxNTM0LCAxNDkxLCAxNTM2LAotICAgICAgNzk4LCAxNDkxLCAxMzAzLCAxNTM3LCAxNTQ0LCAxNTQ4LCAgNzk4LCAgNzk4LCAgNzk4LCAgNzk4LAotICAgICAgNzk4LCAgNzk4LCAgODAwLCAgODAwLCAgODAwLCAgODAwLCAgODAwLCAgODAwLCAgODAwLCAgODAwLAotICAgICAxMzAzLCAxNTM3LCAxNTQ0LCAxNTQ4LCAgODAwLCAgODE1LCAxNTM3LCAxNTQ0LCAgODE0LCAxMzAzLAotICAgICAgODAwLCAgODAwLCAgODAwLCAgODAwLCAgODAwLCAgODAwLCAgODAxLCAgODAxLCAgODAxLCAgODAxLAotICAgICAgODAxLCAgODAxLCAgODAxLCAgODAxLCAgODA0LCAgODA0LCAgODA0LCAgODA0LCAgODA0LCAgODA0LAotICAgICAgODA0LCAgODA0LCAgODA0LCAgODEzLCAgODEyLCAgODA5LCAgODA0LCAgODA2LCAgODA0LCAgODAzLAotICAgICAgODAyLCAgNzYzLCAgODA0LCAgODA0LCAgODA0LCAgODA0LCAgODA0LCAgODA0LCAgOTQyLCAgOTQyLAotICAgICAgOTQyLCAgOTQyLCAgOTQyLCAgOTQyLCAgOTQyLCAgOTQ5LCAgOTQ5LCAgOTQ5LCAgOTQ5LCAgOTQ5LAotICAgICAgOTQ5LCAgOTQ5LCAgOTY1LCAgOTcxLCAgODA0LCAgODA3LCAgODA3LCAgODA3LCAgODA3LCAgODA3LAorICAgICAgODM5LCAgODAyLCAgODM2LCAgODAyLCAxMzk2LCAgODMzLCAgODAyLCAgODAyLCAgODAyLCAgODAyLAorICAgICAgODAyLCAgODAyLCAgOTI1LCAgOTI1LCAgOTI1LCAgOTI1LCAgOTI1LCAgOTI1LCAgOTI1LCAgOTMxLAorICAgICAgOTMxLCAgOTMxLCAgOTMxLCAgOTMxLCAgOTMxLCAgOTMxLCAgODMyLCAxNDczLCAgODAyLCAgODA1LAorICAgICAgODA1LCAgODA1LCAgODA1LCAgODA1LCAgODA1LCAgODA1LCAgODA1LCAgODA1LCAgODI5LCAgODI1LAorICAgICAgODI0LCAgODA1LCAgODIxLCAgODA1LCAxNDczLCAgODIwLCAgODA1LCAgODA1LCAgODA1LCAgODA1LAorICAgICAgODA1LCAgODA1LCAgOTMzLCAgOTMzLCAgOTMzLCAgOTMzLCAgOTMzLCAgOTMzLCAgOTMzLCAgOTM3LAorICAgICAgOTM3LCAgOTM3LCAgOTM3LCAgOTM3LCAgOTM3LCAgOTM3LCAxMDEzLCAgOTYwLCAgODA1LCAgODExLAorICAgICAgODExLCAgODExLCAgODExLCAgODExLCAgODExLCAgODExLCAgODExLCAgODExLCAgODE3LCAgODEzLAorICAgICAxMDEzLCAgODExLCAgODEwLCAgODExLCAgOTYwLCAgOTY0LCAgODExLCAgODExLCAgODExLCAgODExLAorICAgICAgODExLCAgODExLCAgOTQ0LCAgOTQ0LCAgOTQ0LCAgOTQ0LCAgOTQ0LCAgOTQ0LCAgOTQ0LCAgOTYwLAogCi0gICAgICA4MDcsICA4MDcsICA4MDcsICA4MDcsIDEwNzMsIDEwNzQsIDEwMjIsICA4MDcsICA3NjIsICA4MDcsCi0gICAgICA5NjUsICA5NzEsIDE0NzksICA4MDcsICA4MDcsICA4MDcsICA4MDcsICA4MDcsICA4MDcsICA3NTksCi0gICAgIDEwMjIsICA3NTUsIDEwNzMsIDEwNzQsICA3NTQsICA5NjUsICA5NjUsICA5ODIsICA5NzEsICA5ODAsCi0gICAgIDE0NzksIDEwNzcsICA3NTEsIDEwNzMsIDEwNzQsICA4MDcsICA4MTAsICA4MTAsICA4MTAsICA4MTAsCi0gICAgICA4MTAsICA4MTAsICA4MTAsICA4MTAsICA4MTAsICA5ODIsIDEwMjIsICA5ODAsICA4MTAsIDEwNzcsCi0gICAgICA4MTAsIDE0NzksIDEwMjMsICA3NDcsICA4MTAsICA4MTAsICA4MTAsICA4MTAsICA4MTAsICA4MTAsCi0gICAgICA5ODAsIDEwMzMsICA5ODIsIDEwNzcsICA3NDMsICA3MzYsIDEwMjMsIDEwMzEsIDEwMzEsIDEwMzEsCi0gICAgIDEwMzEsIDEwMzEsIDEwMzEsIDEwMzEsIDEwMzQsIDEwMzMsICA4MTAsICA4MTYsICA4MTYsICA4MTYsCi0gICAgICA4MTYsICA4MTYsICA4MTYsICA4MTYsICA4MTYsICA4MTYsIDE1NzYsIDEwNzUsIDEwMzQsICA4MTYsCi0gICAgICA3MzIsICA4MTYsIDEwMjMsIDEwMzcsIDEwMzgsICA4MTYsICA4MTYsICA4MTYsICA4MTYsICA4MTYsCisgICAgICA5NjAsICA4MDksICA5NjQsICA4MDgsICA4MDcsIDEwMTMsIDEwMTQsICA5NjYsICA4MTEsICA4MTYsCisgICAgICA4MTYsICA4MTYsICA4MTYsICA4MTYsICA4MTYsICA4MTYsICA4MTYsICA4MTYsICA5NjQsICA4MDQsCisgICAgIDEwMTQsICA4MTYsICA4MDEsICA3OTgsICA5NjYsICA5NzcsICA4MTYsICA4MTYsICA4MTYsICA4MTYsCisgICAgICA4MTYsICA4MTYsICA4MTgsICA4MTgsICA4MTgsICA4MTgsICA4MTgsICA4MTgsICA4MTgsICA4MTgsCisgICAgICA4MTgsICA5NjYsICA5NzcsIDEwMTcsICA4MTgsIDEwMTQsICA4MTgsIDEwMTgsIDEyODYsICA4MTgsCisgICAgICA4MTgsICA4MTgsICA4MTgsICA4MTgsICA4MTgsICA3OTcsIDEyODYsIDEwMTcsICA3NTgsICA5NzcsCisgICAgICA3NTcsIDEwMTgsIDEwMjYsIDEwMjYsIDEwMjYsIDEwMjYsIDEwMjYsIDEwMjYsIDEwMjYsIDEwMjgsCisgICAgICA3NTQsICA4MTgsICA4MjgsICA4MjgsICA4MjgsICA4MjgsICA4MjgsICA4MjgsICA4MjgsICA4MjgsCisgICAgICA4MjgsICA3NTAsIDEwMTcsIDEwMjgsICA4MjgsICA3NDksIDEwMTgsIDEwNzIsICA3NDYsICA4MjgsCisgICAgICA4MjgsICA4MjgsICA4MjgsICA4MjgsICA4MjgsICA4MzAsICA4MzAsICA4MzAsICA4MzAsICA4MzAsCiAKLSAgICAgIDgxNiwgMTAzMywgIDcyNywgIDcyMiwgMTU3NiwgMTA3NSwgIDcyMSwgMTAzNywgMTAzOCwgIDcyMCwKLSAgICAgMTU0MSwgIDcxNywgIDcxMywgMTA0OSwgMTAzNCwgMTA1MCwgMTA3NSwgIDgxNiwgIDgyMSwgIDgyMSwKLSAgICAgIDgyMSwgIDgyMSwgIDgyMSwgIDgyMSwgIDgyMSwgIDgyMSwgIDgyMSwgMTA0OSwgMTU0MSwgMTA1MCwKLSAgICAgIDgyMSwgIDcwMywgIDcwMiwgMTAzNywgMTAzOCwgIDY5OCwgIDgyMSwgIDgyMSwgIDgyMSwgIDgyMSwKLSAgICAgIDgyMSwgIDgyMSwgIDgyMywgIDgyMywgIDgyMywgIDgyMywgIDgyMywgIDgyMywgIDgyMywgIDgyMywKLSAgICAgIDgyMywgMTU0MSwgIDY5NywgMTA0OSwgIDgyMywgMTA1MCwgIDgyMywgMTA4NSwgMTE5NiwgMTA1MywKLSAgICAgIDgyMywgIDgyMywgIDgyMywgIDgyMywgIDgyMywgIDgyMywgMTA0NywgMTA0NywgMTA0NywgMTA0NywKLSAgICAgMTA0NywgMTA0NywgMTA0NywgMTA1MywgIDY5NSwgMTA4NSwgMTE5NiwgIDY5NCwgMTA1NCwgMTQxMCwKLSAgICAgMTE5NywgIDY3NywgIDgyMywgIDgzMywgIDgzMywgIDgzMywgIDgzMywgIDgzMywgIDgzMywgIDgzMywKLSAgICAgIDgzMywgIDgzMywgMTA1NCwgMTE5NiwgMTA4NSwgIDgzMywgIDY2NywgMTQxMCwgMTE5NywgMTA1MywKKyAgICAgIDgzMCwgIDgzMCwgIDgzMCwgIDgzMCwgMTA3MiwgMTAyOSwgMTAzMiwgIDgzMCwgMTAyOCwgIDgzMCwKKyAgICAgMTAzMywgIDc0MiwgIDgzMCwgIDgzMCwgIDgzMCwgIDgzMCwgIDgzMCwgIDgzMCwgMTA3MiwgMTAyOSwKKyAgICAgMTAzMiwgIDczOCwgIDczMSwgIDcyNywgMTAzMywgMTA0MiwgMTA0MiwgMTA0MiwgMTA0MiwgMTA0MiwKKyAgICAgMTA0MiwgMTA0MiwgMTA0NCwgMTMwMiwgIDgzMCwgIDg0MywgIDg0MywgIDg0MywgIDg0MywgIDg0MywKKyAgICAgIDg0MywgIDg0MywgIDg0MywgIDg0MywgMTAyOSwgMTAzMiwgMTA0NCwgIDg0MywgIDcyMiwgMTAzMywKKyAgICAgMTMwMiwgIDcxNywgIDg0MywgIDg0MywgIDg0MywgIDg0MywgIDg0MywgIDg0MywgIDg0NSwgIDg0NSwKKyAgICAgIDg0NSwgIDg0NSwgIDg0NSwgIDg0NSwgIDg0NSwgIDg0NSwgIDg0NSwgMTA2OCwgMTA0NSwgMTA0OCwKKyAgICAgIDg0NSwgMTA0NCwgIDg0NSwgMTA0OSwgMTMwMiwgIDg0NSwgIDg0NSwgIDg0NSwgIDg0NSwgIDg0NSwKKyAgICAgIDg0NSwgIDcxNiwgMTA0NSwgMTA0OCwgMTA2OCwgIDcxNSwgIDcxMiwgMTA0OSwgMTA1NywgMTA1NywKKyAgICAgMTA1NywgMTA1NywgMTA1NywgMTA1NywgMTA1NywgMTA2OCwgIDcwOCwgIDg0NSwgIDg1NywgIDg1NywKIAotICAgICAgNjYzLCAgODMzLCAgODMzLCAgODMzLCAgODMzLCAgODMzLCAgODMzLCAgODM1LCAgODM1LCAgODM1LAotICAgICAgODM1LCAgODM1LCAgODM1LCAgODM1LCAgODM1LCAgODM1LCAxMTk3LCAxNDEwLCAxMDU0LCAgODM1LAotICAgICAgNjU3LCAgODM1LCAgNjU2LCAgNjUzLCAgNjQ5LCAgODM1LCAgODM1LCAgODM1LCAgODM1LCAgODM1LAotICAgICAgODM1LCAxMDYyLCAxMDYyLCAxMDYyLCAxMDYyLCAxMDYyLCAxMDYyLCAxMDYyLCAxMDY0LCAxMDY0LAotICAgICAxMDY0LCAxMDY0LCAxMDY0LCAxMDY0LCAxMDY0LCAxMTcwLCAxMDk0LCAgODM1LCAgODQ4LCAgODQ4LAotICAgICAgODQ4LCAgODQ4LCAgODQ4LCAgODQ4LCAgODQ4LCAgODQ4LCAgODQ4LCAgNjQ4LCAgNjQ1LCAxMTcwLAotICAgICAgODQ4LCAgNjQ0LCAgNjQxLCAgNjM3LCAxMDk0LCAxMDk0LCAgODQ4LCAgODQ4LCAgODQ4LCAgODQ4LAotICAgICAgODQ4LCAgODQ4LCAgODUwLCAgODUwLCAgODUwLCAgODUwLCAgODUwLCAgODUwLCAgODUwLCAgODUwLAotICAgICAgODUwLCAxMDk0LCAxMDk0LCAgNjM0LCAgODUwLCAxMTcwLCAgODUwLCAxNTg3LCAxNDg2LCAxMDg2LAotICAgICAgODUwLCAgODUwLCAgODUwLCAgODUwLCAgODUwLCAgODUwLCAxMDY4LCAxMDY4LCAxMDY4LCAxMDY4LAorICAgICAgODU3LCAgODU3LCAgODU3LCAgODU3LCAgODU3LCAgODU3LCAgODU3LCAxMDQ1LCAxMDQ4LCAgNjk4LAorICAgICAgODU3LCAgNjk3LCAxMDQ5LCAxMDc1LCAxMTY1LCAgODU3LCAgODU3LCAgODU3LCAgODU3LCAgODU3LAorICAgICAgODU3LCAgODU4LCAgODU4LCAgODU4LCAgODU4LCAgODU4LCAgODU4LCAgODU4LCAxMTY1LCAgNjkzLAorICAgICAxMDc1LCAgNjkyLCAgODU4LCAgNjkwLCAgNjg5LCAxMzA1LCAgNjcyLCAgODU4LCAgODU4LCAgODU4LAorICAgICAgODU4LCAgODU4LCAgODU4LCAgODg0LCAxMDc1LCAgODg0LCAgODg0LCAgODg0LCAgODg0LCAgODg0LAorICAgICAgODg0LCAgODg0LCAxMzA1LCAxMTY1LCAgNjYyLCAgNjU4LCAgODg0LCAxMzA1LCAxMzkzLCAxMzEwLAorICAgICAgODg0LCAgODg0LCAgODg0LCAgODg0LCAgODg0LCAgODg0LCAgODg0LCAgODg1LCAgODg1LCAgODg1LAorICAgICAgODg1LCAgODg1LCAgODg1LCAgODg1LCAxMzQyLCAxMzkzLCAxMzEwLCAgNjUyLCAgODg1LCAgNjUxLAorICAgICAgNjQ4LCAxMzk0LCAxMzQyLCAgODg1LCAgODg1LCAgODg1LCAgODg1LCAgODg1LCAgODg1LCAgODg2LAorICAgICAgODg2LCAgODg2LCAgODg2LCAgODg2LCAgODg2LCAgODg2LCAgODg2LCAxMzEwLCAxMzk0LCAxMzkzLAogCi0gICAgIDEwNjgsIDEwNjgsIDEwNjgsICA2MzMsICA2MzIsIDE1ODcsIDE0ODYsIDEwODYsIDEyMDAsIDExNzEsCi0gICAgIDExNzQsICA2MzEsICA4NTAsICA4NjIsICA4NjIsICA4NjIsICA4NjIsICA4NjIsICA4NjIsICA4NjIsCi0gICAgICA4NjIsICA4NjIsIDEwODYsIDExNzEsIDExNzQsICA4NjIsIDEyMDAsIDE0ODYsIDE2MTIsIDEwODAsCi0gICAgIDExNzUsICA4NjIsICA4NjIsICA4NjIsICA4NjIsICA4NjIsICA4NjIsICA4NjMsICA4NjMsICA4NjMsCi0gICAgICA4NjMsICA4NjMsICA4NjMsICA4NjMsIDExNzUsIDEyMDAsIDE2MTIsIDEwODAsICA4NjMsIDExNzEsCi0gICAgIDExNzQsIDE1NzgsICA2MjgsIDE1NzksICA4NjMsICA4NjMsICA4NjMsICA4NjMsICA4NjMsICA4NjMsCi0gICAgICA4ODksIDEwODAsICA4ODksICA4ODksICA4ODksICA4ODksICA4ODksICA4ODksICA4ODksIDE1NzgsCi0gICAgIDExNzUsIDE1NzksIDE1NzgsICA4ODksIDE1NzksIDE2MjAsIDE1ODAsIDE2MjgsICA4ODksICA4ODksCi0gICAgICA4ODksICA4ODksICA4ODksICA4ODksICA4ODksICA4OTAsICA4OTAsICA4OTAsICA4OTAsICA4OTAsCi0gICAgICA4OTAsICA4OTAsICA2MjUsIDE2MjAsIDE1ODAsIDE2MjgsICA4OTAsIDE1ODAsIDE0MTEsIDEwODksCisgICAgICA2NDQsICA4ODYsIDEzOTQsICA4ODYsICA2NDMsICA2NDAsICA4ODYsICA4ODYsICA4ODYsICA4ODYsCisgICAgICA4ODYsICA4ODYsIDEwNTksIDEwNTksIDEwNTksIDEwNTksIDEwNTksIDEwNTksIDEwNTksIDEwNjMsCisgICAgIDEwNjMsIDEwNjMsIDEwNjMsIDEwNjMsIDEwNjMsIDEwNjMsIDEwNzMsIDEwODEsICA4ODYsICA4ODgsCisgICAgICA4ODgsICA4ODgsICA4ODgsICA4ODgsICA4ODgsICA4ODgsICA2MzksICA2MzYsICA2MzIsICA2MjksCisgICAgICA4ODgsICA2MjgsICA2MjcsIDEwNzMsIDEwODEsICA4ODgsICA4ODgsICA4ODgsICA4ODgsICA4ODgsCisgICAgICA4ODgsICA4ODksICA4ODksICA4ODksICA4ODksICA4ODksICA4ODksICA4ODksICA4ODksIDEwODEsCisgICAgICA2MjYsICA2MjMsIDEwNzMsICA4ODksICA2MjAsICA2MTksICA2MTIsICA2MDksICA4ODksICA4ODksCisgICAgICA4ODksICA4ODksICA4ODksICA4ODksICA4OTAsICA4OTAsICA4OTAsICA4OTAsICA4OTAsICA4OTAsCisgICAgICA4OTAsICA4OTAsICA4OTIsICA4OTIsICA4OTIsICA4OTIsICA4OTIsICA4OTIsICA4OTIsIDEzNDksCisgICAgICA2MDcsICA2MDMsICA1OTcsICA4OTIsICA1OTYsICA1OTUsIDEzOTcsIDEzNDksICA4OTIsICA4OTIsCiAKLSAgICAgMTU4NSwgMTA5MSwgIDg5MCwgIDg5MCwgIDg5MCwgIDg5MCwgIDg5MCwgIDg5MCwgIDg5MSwgIDg5MSwKLSAgICAgIDg5MSwgIDg5MSwgIDg5MSwgIDg5MSwgIDg5MSwgIDg5MSwgMTQxMSwgMTA4OSwgMTU4NSwgMTA5MSwKLSAgICAgIDg5MSwgMTU4NSwgIDg5MSwgIDYyNCwgIDYxNywgMTQxMSwgIDg5MSwgIDg5MSwgIDg5MSwgIDg5MSwKLSAgICAgIDg5MSwgIDg5MSwgMTA4OSwgMTA5MSwgMTExNywgMTExNywgMTExNywgMTExNywgMTExNywgMTExNywKLSAgICAgMTExNywgMTEyMiwgMTEyMiwgMTEyMiwgMTEyMiwgMTEyMiwgMTEyMiwgMTEyMiwgIDg5MSwgIDg5MywKLSAgICAgIDg5MywgIDg5MywgIDg5MywgIDg5MywgIDg5MywgIDg5MywgIDYxNCwgIDYxMiwgIDYwOCwgIDYwMiwKLSAgICAgIDg5MywgIDYwMSwgMTQ3NiwgMTYwNSwgMTYwNywgMTYwOCwgIDg5MywgIDg5MywgIDg5MywgIDg5MywKLSAgICAgIDg5MywgIDg5MywgIDg5NCwgIDg5NCwgIDg5NCwgIDg5NCwgIDg5NCwgIDg5NCwgIDg5NCwgIDg5NCwKLSAgICAgMTQ3NiwgMTYwNSwgMTYwNywgMTYwOCwgIDg5NCwgMTYwNSwgIDYwMCwgMTYwNywgMTYwOCwgMTQ3NiwKLSAgICAgIDg5NCwgIDg5NCwgIDg5NCwgIDg5NCwgIDg5NCwgIDg5NCwgIDg5NSwgIDg5NSwgIDg5NSwgIDg5NSwKKyAgICAgIDg5MiwgIDg5MiwgIDg5MiwgIDg5MiwgIDg5MywgIDg5MywgIDg5MywgIDg5MywgIDg5MywgIDg5MywKKyAgICAgIDg5MywgIDg5MywgIDg5MywgMTM5NywgIDU5NCwgIDU5MCwgIDg5MywgMTM5NywgMTQwNCwgMTM5MSwKKyAgICAgMTE2NiwgIDg5MywgIDg5MywgIDg5MywgIDg5MywgIDg5MywgIDg5MywgIDg5NCwgIDg5NCwgIDg5NCwKKyAgICAgIDg5NCwgIDg5NCwgIDg5NCwgIDg5NCwgMTE2NiwgMTQwNCwgMTM5MSwgIDU4OSwgIDg5NCwgMTM5MSwKKyAgICAgMTQwNCwgMTM5OCwgIDU4NywgIDg5NCwgIDg5NCwgIDg5NCwgIDg5NCwgIDg5NCwgIDg5NCwgIDg5NiwKKyAgICAgIDg5NiwgIDg5NiwgIDg5NiwgIDg5NiwgIDg5NiwgIDg5NiwgIDg5NiwgIDg5NiwgMTM5OCwgMTE2NiwKKyAgICAgIDU4NiwgIDg5NiwgMTM5OCwgMTM5OSwgMTM5MiwgMTE2OSwgIDg5NiwgIDg5NiwgIDg5NiwgIDg5NiwKKyAgICAgIDg5NiwgIDg5NiwgIDg5NywgIDg5NywgIDg5NywgIDg5NywgIDg5NywgIDg5NywgIDg5NywgMTE2OSwKKyAgICAgMTM5OSwgMTM5MiwgIDU4NSwgIDg5NywgMTM5MiwgIDU4NCwgMTM5OSwgIDU4MCwgIDg5NywgIDg5NywKKyAgICAgIDg5NywgIDg5NywgIDg5NywgIDg5NywgIDg5OSwgIDg5OSwgIDg5OSwgIDg5OSwgIDg5OSwgIDg5OSwKIAotICAgICAgODk1LCAgODk1LCAgODk1LCAgODk1LCAgODk3LCAgODk3LCAgODk3LCAgODk3LCAgODk3LCAgODk3LAotICAgICAgODk3LCAgNTk5LCAgNTk1LCAgNTk0LCAgNTkyLCAgODk3LCAgNTkxLCAgNTkwLCAxNjMzLCAxNjM0LAotICAgICAxNjIyLCAgODk3LCAgODk3LCAgODk3LCAgODk3LCAgODk3LCAgODk3LCAgODk4LCAgODk4LCAgODk4LAotICAgICAgODk4LCAgODk4LCAgODk4LCAgODk4LCAgODk4LCAgODk4LCAxNjMzLCAxNjM0LCAxNjIyLCAgODk4LAotICAgICAgNTg5LCAgNTg1LCAxNjM0LCAxNjM1LCAxMjI5LCAgODk4LCAgODk4LCAgODk4LCAgODk4LCAgODk4LAotICAgICAgODk4LCAgODk5LCAgODk5LCAgODk5LCAgODk5LCAgODk5LCAgODk5LCAgODk5LCAxMjI5LCAxNjIyLAotICAgICAgNTg0LCAxNjM1LCAgODk5LCAgNTgzLCAgNTgyLCAxNjM2LCAxNjM1LCAxNjIzLCAgODk5LCAgODk5LAotICAgICAgODk5LCAgODk5LCAgODk5LCAgODk5LCAgOTAxLCAgOTAxLCAgOTAxLCAgOTAxLCAgOTAxLCAgOTAxLAotICAgICAgOTAxLCAgOTAxLCAgOTAxLCAxNjM2LCAxMjI5LCAxNjIzLCAgOTAxLCAgNTgxLCAxNjM2LCAxNjM4LAotICAgICAxNjQwLCAxMjMwLCAgOTAxLCAgOTAxLCAgOTAxLCAgOTAxLCAgOTAxLCAgOTAxLCAgOTAyLCAgOTAyLAorICAgICAgODk5LCAgODk5LCAgODk5LCAgNTc5LCAxMTY5LCAgNTc4LCAgODk5LCAgNTc3LCAxNDAxLCAxNDc0LAorICAgICAxMTcwLCAgODk5LCAgODk5LCAgODk5LCAgODk5LCAgODk5LCAgODk5LCAgOTAwLCAgOTAwLCAgOTAwLAorICAgICAgOTAwLCAgOTAwLCAgOTAwLCAgOTAwLCAxMTcwLCAxNDAxLCAxNDc0LCAgNTc2LCAgOTAwLCAxNDAxLAorICAgICAgNTc1LCAxNDg2LCAgNTc0LCAgOTAwLCAgOTAwLCAgOTAwLCAgOTAwLCAgOTAwLCAgOTAwLCAgOTA0LAorICAgICAgOTA0LCAgOTA0LCAgOTA0LCAgOTA0LCAgOTA0LCAgOTA0LCAgOTA0LCAxNDc0LCAxNDg2LCAxMTcwLAorICAgICAgOTA0LCAxNDg2LCAgNTczLCAxNTI5LCAxNDgxLCAgOTA0LCAgOTA0LCAgOTA0LCAgOTA0LCAgOTA0LAorICAgICAgOTA0LCAgOTA2LCAgOTA2LCAgOTA2LCAgOTA2LCAgOTA2LCAgOTA2LCAgOTA2LCAgOTA2LCAgOTA2LAorICAgICAxNTI5LCAxNDgxLCAgNTcyLCAgOTA2LCAgNTcxLCAgNTcwLCAxNDgzLCAgNTY5LCAgOTA2LCAgOTA2LAorICAgICAgOTA2LCAgOTA2LCAgOTA2LCAgOTA2LCAgOTA3LCAgOTA3LCAgOTA3LCAgOTA3LCAgOTA3LCAgOTA3LAorICAgICAgOTA3LCAgOTA3LCAxNDgxLCAxNDgzLCAxNDgzLCAgOTA3LCAgNTY4LCAgNTY3LCAxNTMxLCAxNTMyLAogCi0gICAgICA5MDIsICA5MDIsICA5MDIsICA5MDIsICA5MDIsIDEyMzAsIDE2MjMsIDE2MzgsIDE2NDAsICA5MDIsCi0gICAgICA1ODAsICA1NzksIDE2MzgsICA1NzgsIDE2MjQsICA5MDIsICA5MDIsICA5MDIsICA5MDIsICA5MDIsCi0gICAgICA5MDIsICA5MDQsICA5MDQsICA5MDQsICA5MDQsICA5MDQsICA5MDQsICA5MDQsICA5MDQsICA5MDQsCi0gICAgICA1NzcsIDEyMzAsIDE2MjQsICA5MDQsICA1NzYsICA1NzUsIDE2NDUsIDE2NDcsIDEyMzUsICA5MDQsCi0gICAgICA5MDQsICA5MDQsICA5MDQsICA5MDQsICA5MDQsICA5MDUsICA5MDUsICA5MDUsICA5MDUsICA5MDUsCi0gICAgICA5MDUsICA5MDUsIDEyMzUsIDE2MjQsIDE2NDUsIDE2NDcsICA5MDUsIDE2NDUsIDE2NDksIDE2NDcsCi0gICAgICA1NzQsICA1NzMsICA5MDUsICA5MDUsICA5MDUsICA5MDUsICA5MDUsICA5MDUsICA5MDksICA5MDksCi0gICAgICA5MDksICA5MDksICA5MDksICA5MDksICA5MDksICA5MDksIDE2NDksICA1NzIsIDEyMzUsICA5MDksCi0gICAgICA1NjksIDE2NDksIDE2NTEsIDE2NTIsIDE2NTcsICA5MDksICA5MDksICA5MDksICA5MDksICA5MDksCi0gICAgICA5MDksICA5MTEsICA5MTEsICA5MTEsICA5MTEsICA5MTEsICA5MTEsICA5MTEsICA5MTEsICA5MTEsCisgICAgICA5MDcsICA5MDcsICA5MDcsICA5MDcsICA5MDcsICA5MDcsICA5MTUsICA5MTUsICA5MTUsICA5MTUsCisgICAgICA5MTUsICA5MTUsICA5MTUsICA5MTUsICA5MTUsIDE1MzEsIDE1MzIsICA1NjQsICA5MTUsICA1NjMsCisgICAgIDE1MzYsIDE1MzIsIDE1MzksICA5MTUsICA5MTUsICA5MTUsICA5MTUsICA5MTUsICA5MTUsICA5MTYsCisgICAgICA5MTYsICA5MTYsICA5MTYsICA5MTYsICA5MTYsICA5MTYsICA5MTYsIDE1MzYsICA1NjIsIDE1MzksCisgICAgICA5MTYsICA1NjAsICA1NTksICA1NTYsIDE1MzksICA5MTYsICA5MTYsICA5MTYsICA5MTYsICA5MTYsCisgICAgICA5MTYsICA5MjYsICA5MjYsICA5MjYsICA5MjYsICA5MjYsICA5MjYsICA5MjYsICA5MjYsICA5MjYsCisgICAgIDE1MzYsICA1NTEsICA1NDcsICA5MjYsICA1NDMsIDE1NDMsIDE1NzEsIDE1NzMsICA5MjYsICA5MjYsCisgICAgICA5MjYsICA5MjYsICA5MjYsICA5MjYsICA5MjcsICA5MjcsICA5MjcsICA5MjcsICA5MjcsICA5MjcsCisgICAgICA5MjcsICA5MjcsIDE1NDMsIDE1NzEsIDE1NzMsICA5MjcsICA1MzgsIDE1NzMsIDE1ODIsIDE1NzQsCisgICAgICA5MjcsICA5MjcsICA5MjcsICA5MjcsICA5MjcsICA5MjcsICA5MzgsICA5MzgsICA5MzgsICA5MzgsCiAKLSAgICAgMTY1MSwgMTY1MiwgMTY1NywgIDkxMSwgIDU2OCwgMTY1MSwgMTY1MywgIDU2NywgIDU2NSwgIDkxMSwKLSAgICAgIDkxMSwgIDkxMSwgIDkxMSwgIDkxMSwgIDkxMSwgIDkxMiwgIDkxMiwgIDkxMiwgIDkxMiwgIDkxMiwKLSAgICAgIDkxMiwgIDkxMiwgIDkxMiwgMTY1NywgMTY1MywgMTY1MiwgIDkxMiwgIDU2NCwgIDU2MSwgMTY2MCwKLSAgICAgIDU1NiwgMTY2NCwgIDkxMiwgIDkxMiwgIDkxMiwgIDkxMiwgIDkxMiwgIDkxMiwgIDkyMCwgIDkyMCwKLSAgICAgIDkyMCwgIDkyMCwgIDkyMCwgIDkyMCwgIDkyMCwgIDkyMCwgIDkyMCwgMTY2MCwgMTY1MywgMTY2NCwKLSAgICAgIDkyMCwgIDU1MiwgMTY2MCwgMTY2OCwgMTY2OSwgIDU0OCwgIDkyMCwgIDkyMCwgIDkyMCwgIDkyMCwKLSAgICAgIDkyMCwgIDkyMCwgIDkyMSwgIDkyMSwgIDkyMSwgIDkyMSwgIDkyMSwgIDkyMSwgIDkyMSwgIDkyMSwKLSAgICAgIDU0MywgMTY2OCwgMTY2OSwgIDkyMSwgIDUzOCwgIDUzNywgMTY2OCwgMTY2OSwgMTY3NCwgIDkyMSwKLSAgICAgIDkyMSwgIDkyMSwgIDkyMSwgIDkyMSwgIDkyMSwgIDkzMSwgIDkzMSwgIDkzMSwgIDkzMSwgIDkzMSwKLSAgICAgIDkzMSwgIDkzMSwgIDkzMSwgIDkzMSwgIDUzNiwgIDUzMiwgMTY3NCwgIDkzMSwgIDUyNiwgMTY3NSwKKyAgICAgIDkzOCwgIDkzOCwgIDkzOCwgIDkzOCwgIDkzOCwgMTU4MiwgMTU3NCwgIDUzMywgIDkzOCwgMTU3NCwKKyAgICAgMTYwNywgMTU3NSwgMTU4MCwgIDkzOCwgIDkzOCwgIDkzOCwgIDkzOCwgIDkzOCwgIDkzOCwgIDkzOSwKKyAgICAgIDkzOSwgIDkzOSwgIDkzOSwgIDkzOSwgIDkzOSwgIDkzOSwgIDkzOSwgMTYwNywgMTU3NSwgMTU4MCwKKyAgICAgIDkzOSwgMTU3NSwgMTU4MCwgMTYwMCwgMTYwMiwgIDkzOSwgIDkzOSwgIDkzOSwgIDkzOSwgIDkzOSwKKyAgICAgIDkzOSwgIDk1MiwgIDk1MiwgIDk1MiwgIDk1MiwgIDk1MiwgIDk1MiwgIDk1MiwgIDk1MiwgIDk1MiwKKyAgICAgMTYwMCwgMTYwMiwgIDUzMiwgIDk1MiwgMTYwMCwgIDUzMSwgMTYwMiwgIDUyNywgIDk1MiwgIDk1MiwKKyAgICAgIDk1MiwgIDk1MiwgIDk1MiwgIDk1MiwgIDk1NCwgIDk1NCwgIDk1NCwgIDk1NCwgIDk1NCwgIDk1NCwKKyAgICAgIDk1NCwgIDk1NCwgIDk1NCwgMTA2OSwgMTA3MCwgIDUyMSwgIDk1NCwgMTA4MCwgIDk1NCwgMTIyNCwKKyAgICAgMTA4OSwgIDk1NCwgIDk1NCwgIDk1NCwgIDk1NCwgIDk1NCwgIDk1NCwgMTM1NywgMTM2NSwgIDUyMCwKKyAgICAgMTA2OSwgMTA3MCwgMTM3MywgMTIyNCwgMTA4MCwgMTM1NywgMTM2NSwgMTA4OSwgMTA4OSwgMTYxNSwKIAotICAgICAxNjc3LCAxNjc0LCAgNTI1LCAgOTMxLCAgOTMxLCAgOTMxLCAgOTMxLCAgOTMxLCAgOTMxLCAgOTMyLAotICAgICAgOTMyLCAgOTMyLCAgOTMyLCAgOTMyLCAgOTMyLCAgOTMyLCAgOTMyLCAxNjc1LCAxNjc3LCAgNTIwLAotICAgICAgOTMyLCAxNjc1LCAgNTE5LCAxNjc5LCAxNjgyLCAxNjgzLCAgOTMyLCAgOTMyLCAgOTMyLCAgOTMyLAotICAgICAgOTMyLCAgOTMyLCAgOTQzLCAgOTQzLCAgOTQzLCAgOTQzLCAgOTQzLCAgOTQzLCAgOTQzLCAgOTQzLAotICAgICAgOTQzLCAxNjc5LCAxNjgyLCAxNjgzLCAgOTQzLCAxNjgyLCAxNjc5LCAxNjg0LCAxNjg5LCAgNTE4LAotICAgICAgOTQzLCAgOTQzLCAgOTQzLCAgOTQzLCAgOTQzLCAgOTQzLCAgOTQ0LCAgOTQ0LCAgOTQ0LCAgOTQ0LAotICAgICAgOTQ0LCAgOTQ0LCAgOTQ0LCAgOTQ0LCAgNTE3LCAxNjg0LCAxNjg5LCAgOTQ0LCAgNTE2LCAgNTE1LAotICAgICAxNjk0LCAxNjg5LCAxNjk4LCAgOTQ0LCAgOTQ0LCAgOTQ0LCAgOTQ0LCAgOTQ0LCAgOTQ0LCAgOTU3LAotICAgICAgOTU3LCAgOTU3LCAgOTU3LCAgOTU3LCAgOTU3LCAgOTU3LCAgOTU3LCAgOTU3LCAxNjk0LCAxNjg0LAotICAgICAxNjk4LCAgOTU3LCAgNTE0LCAgNTEzLCAxNzAwLCAxNjk4LCAxNzAzLCAgOTU3LCAgOTU3LCAgOTU3LAorICAgICAxMzczLCAxMDY5LCAxMDcwLCAgOTU0LCAgOTgxLCAgOTgxLCAgOTgxLCAgOTgxLCAgOTgxLCAgOTgxLAorICAgICAgOTgxLCAgOTgxLCAgOTgxLCAxMDgwLCAxMDg5LCAxMDg5LCAxNjE1LCAgOTgxLCAxMjI0LCAgNTE1LAorICAgICAgNTE0LCAgOTgxLCAgOTgxLCAgOTgxLCAgOTgxLCAgOTgxLCAgOTgxLCAgOTgxLCAgOTgyLCAgOTgyLAorICAgICAgOTgyLCAgOTgyLCAgOTgyLCAgOTgyLCAgOTgyLCAgOTgyLCAgOTgzLCAgOTgzLCAgOTgzLCAgOTgzLAorICAgICAgOTgzLCAgOTgzLCAgOTgzLCAgOTgzLCAgOTgzLCAgNTEzLCAxMDg0LCAxMTg5LCAxMDg2LCAgNTEyLAorICAgICAxNjIzLCAgNTExLCAxMTk1LCAgOTgzLCAgOTg3LCAgOTg3LCAgOTg3LCAgOTg3LCAgOTg3LCAgOTg3LAorICAgICAgOTg3LCAgOTg3LCAgOTg3LCAxMDg0LCAxMTg5LCAxMDg2LCAgOTg3LCAxNjIzLCAgOTg3LCAxMTk1LAorICAgICAxMTkxLCAgOTg3LCAgOTg3LCAgOTg3LCAgOTg3LCAgOTg3LCAgOTg3LCAxMTg5LCAxMDg0LCAxMDg2LAorICAgICAxMTEyLCAxMTEyLCAxMTEyLCAxMTEyLCAxMTEyLCAxMTEyLCAxMTEyLCAxMTkxLCAxMTk1LCAgNTEwLAorICAgICAxNjI4LCAgNTA5LCAxNjM1LCAgOTg3LCAgOTkwLCAgOTkwLCAgOTkwLCAgOTkwLCAgOTkwLCAgOTkwLAogCi0gICAgICA5NTcsICA5NTcsICA5NTcsICA5NTksICA5NTksICA5NTksICA5NTksICA5NTksICA5NTksICA5NTksCi0gICAgICA5NTksICA5NTksIDE3MDAsICA1MTIsIDE3MDMsICA5NTksICA1MTEsICA5NTksICA1MTAsICA1MDksCi0gICAgICA1MDgsICA5NTksICA5NTksICA5NTksICA5NTksICA5NTksICA5NTksIDExMjYsIDExMjYsIDExMjYsCi0gICAgIDExMjYsIDExMjYsIDExMjYsIDExMjYsIDExMzEsIDExMzEsIDExMzEsIDExMzEsIDExMzEsIDExMzEsCi0gICAgIDExMzEsIDE3MTAsIDE3MTIsICA5NTksICA5ODYsICA5ODYsICA5ODYsICA5ODYsICA5ODYsICA5ODYsCi0gICAgICA5ODYsICA5ODYsICA5ODYsICA1MDYsICA1MDMsICA1MDIsICA1MDEsICA5ODYsICA1MDAsIDE3MTAsCi0gICAgIDE3MTIsICA0OTksICA5ODYsICA5ODYsICA5ODYsICA5ODYsICA5ODYsICA5ODYsICA5ODYsICA5ODcsCi0gICAgICA5ODcsICA5ODcsICA5ODcsICA5ODcsICA5ODcsICA5ODcsICA5ODcsICA5ODgsICA5ODgsICA5ODgsCi0gICAgICA5ODgsICA5ODgsICA5ODgsICA5ODgsICA5ODgsICA5ODgsIDExMzMsIDExMzMsIDExMzMsIDExMzMsCi0gICAgIDExMzMsIDExMzMsIDExMzMsIDE3MDEsIDE3MTQsICA5ODgsICA5OTIsICA5OTIsICA5OTIsICA5OTIsCisgICAgICA5OTAsICA5OTAsICA5OTAsICA1MDgsIDExOTEsICA1MDcsICA5OTAsIDE2MjgsICA5OTAsIDE2MzUsCisgICAgICA1MDYsICA5OTAsICA5OTAsICA5OTAsICA5OTAsICA5OTAsICA5OTAsIDExMTcsIDExMTcsIDExMTcsCisgICAgIDExMTcsIDExMTcsIDExMTcsIDExMTcsIDExMjEsIDExMjEsIDExMjEsIDExMjEsIDExMjEsIDExMjEsCisgICAgIDExMjEsICA1MDUsIDE2NTksICA5OTAsICA5OTMsICA5OTMsICA5OTMsICA5OTMsICA5OTMsICA5OTMsCisgICAgICA5OTMsICA5OTMsICA5OTMsICA1MDQsICA1MDMsICA1MDEsICA5OTMsICA0OTgsICA5OTMsIDE2NTksCisgICAgICA0OTcsICA5OTMsICA5OTMsICA5OTMsICA5OTMsICA5OTMsICA5OTMsIDExMjYsIDExMjYsIDExMjYsCisgICAgIDExMjYsIDExMjYsIDExMjYsIDExMjYsIDExMjgsIDExMjgsIDExMjgsIDExMjgsIDExMjgsIDExMjgsCisgICAgIDExMjgsICA0OTYsIDE2NzIsICA5OTMsICA5OTYsICA5OTYsICA5OTYsICA5OTYsICA5OTYsICA5OTYsCisgICAgICA5OTYsICA5OTYsICA5OTYsICA0OTUsICA0OTQsICA0OTMsICA5OTYsICA0OTIsICA5OTYsIDE2NzIsCisgICAgICA0OTAsICA5OTYsICA5OTYsICA5OTYsICA5OTYsICA5OTYsICA5OTYsIDExMzIsIDExMzIsIDExMzIsCiAKLSAgICAgIDk5MiwgIDk5MiwgIDk5MiwgIDk5MiwgIDk5MiwgIDQ5OCwgIDQ5NywgIDQ5NSwgIDk5MiwgIDQ5NCwKLSAgICAgIDk5MiwgMTcwMSwgMTcxNCwgIDQ5MywgIDk5MiwgIDk5MiwgIDk5MiwgIDk5MiwgIDk5MiwgIDk5MiwKLSAgICAgMTEzNywgMTEzNywgMTEzNywgMTEzNywgMTEzNywgMTEzNywgMTEzNywgMTE0MywgMTE0MywgMTE0MywKLSAgICAgMTE0MywgMTE0MywgMTE0MywgMTE0MywgMTcwNiwgMTcwMSwgIDk5MiwgIDk5NSwgIDk5NSwgIDk5NSwKLSAgICAgIDk5NSwgIDk5NSwgIDk5NSwgIDk5NSwgIDk5NSwgIDk5NSwgIDQ5MiwgIDQ5MSwgIDQ4OSwgIDk5NSwKLSAgICAgIDQ4NywgIDk5NSwgMTcwNiwgIDQ4NSwgIDQ4NCwgIDk5NSwgIDk5NSwgIDk5NSwgIDk5NSwgIDk5NSwKLSAgICAgIDk5NSwgMTE0NSwgMTE0NSwgMTE0NSwgMTE0NSwgMTE0NSwgMTE0NSwgMTE0NSwgMTE0OSwgMTE0OSwKLSAgICAgMTE0OSwgMTE0OSwgMTE0OSwgMTE0OSwgMTE0OSwgMTcxOSwgMTcwNiwgIDk5NSwgIDk5OCwgIDk5OCwKLSAgICAgIDk5OCwgIDk5OCwgIDk5OCwgIDk5OCwgIDk5OCwgIDk5OCwgIDk5OCwgIDQ4MywgIDQ4MiwgIDQ4MSwKLSAgICAgIDk5OCwgIDQ3OSwgIDk5OCwgMTcxOSwgIDQ3OCwgIDQ3NiwgIDk5OCwgIDk5OCwgIDk5OCwgIDk5OCwKKyAgICAgMTEzMiwgMTEzMiwgMTEzMiwgMTEzMiwgMTEzOCwgMTEzOCwgMTEzOCwgMTEzOCwgMTEzOCwgMTEzOCwKKyAgICAgMTEzOCwgMTE5MiwgMTIyNSwgIDk5NiwgMTAwMSwgMTAwMSwgMTAwMSwgMTAwMSwgMTAwMSwgMTAwMSwKKyAgICAgMTAwMSwgMTAwMSwgIDQ4OSwgIDQ4OCwgIDQ4NywgMTAwMSwgMTIyNSwgIDQ4NiwgMTE5MiwgIDQ4NCwKKyAgICAgMTAwMSwgMTAwMSwgMTAwMSwgMTAwMSwgMTAwMSwgMTAwMSwgMTAwMiwgMTAwMiwgMTAwMiwgMTAwMiwKKyAgICAgMTAwMiwgMTAwMiwgMTAwMiwgMTAwMiwgMTAwMiwgIDQ4MiwgMTE5MiwgIDQ4MCwgMTAwMiwgIDQ3OSwKKyAgICAgMTAwMiwgMTIyNSwgIDQ3OCwgMTAwMiwgMTAwMiwgMTAwMiwgMTAwMiwgMTAwMiwgMTAwMiwgMTE0MCwKKyAgICAgMTE0MCwgMTE0MCwgMTE0MCwgMTE0MCwgMTE0MCwgMTE0MCwgMTE0NCwgMTE0NCwgMTE0NCwgMTE0NCwKKyAgICAgMTE0NCwgMTE0NCwgMTE0NCwgMTIzMCwgMTE5MywgMTAwMiwgMTAwNywgMTAwNywgMTAwNywgMTAwNywKKyAgICAgMTAwNywgMTAwNywgMTAwNywgMTAwNywgMTAwNywgIDQ3NywgIDQ3NiwgMTIzMCwgMTAwNywgIDQ3NCwKKyAgICAgIDQ3MywgMTE5MywgMTYwMywgMTAwNywgMTAwNywgMTAwNywgMTAwNywgMTAwNywgMTAwNywgMTAwOSwKIAotICAgICAgOTk4LCAgOTk4LCAxMTU1LCAxMTU1LCAxMTU1LCAxMTU1LCAxMTU1LCAxMTU1LCAxMTU1LCAxMTU3LAotICAgICAxMTU3LCAxMTU3LCAxMTU3LCAxMTU3LCAxMTU3LCAxMTU3LCAxNzIxLCAxNzI0LCAgOTk4LCAxMDAxLAotICAgICAxMDAxLCAxMDAxLCAxMDAxLCAxMDAxLCAxMDAxLCAxMDAxLCAxMDAxLCAxMDAxLCAgNDc1LCAgNDc0LAotICAgICAgNDcxLCAxMDAxLCAgNDY3LCAxMDAxLCAxNzIxLCAxNzI0LCAgNDYzLCAxMDAxLCAxMDAxLCAxMDAxLAotICAgICAxMDAxLCAxMDAxLCAxMDAxLCAxMTYxLCAxMTYxLCAxMTYxLCAxMTYxLCAxMTYxLCAxMTYxLCAxMTYxLAotICAgICAxMTY4LCAxMTY4LCAxMTY4LCAxMTY4LCAxMTY4LCAxMTY4LCAxMTY4LCAgNDYyLCAgNDYxLCAxMDAxLAotICAgICAxMDA2LCAxMDA2LCAxMDA2LCAxMDA2LCAxMDA2LCAxMDA2LCAxMDA2LCAxMDA2LCAgNDU4LCAgNDU0LAotICAgICAgNDUzLCAxMDA2LCAgNDUwLCAgNDQ5LCAgNDQ4LCAxMTkxLCAxMTk0LCAxMDA2LCAxMDA2LCAxMDA2LAotICAgICAxMDA2LCAxMDA2LCAxMDA2LCAxMDA3LCAxMDA3LCAxMDA3LCAxMDA3LCAxMDA3LCAxMDA3LCAxMDA3LAotICAgICAxMDA3LCAxMDA3LCAxMTg4LCAxMTkxLCAxMTk0LCAxMDA3LCAxNTQzLCAxMDA3LCAxMTk4LCAxMjM2LAorICAgICAxMDA5LCAxMDA5LCAxMDA5LCAxMDA5LCAxMDA5LCAxMDA5LCAxMDA5LCAxMDA5LCAxMTkzLCAxNjAzLAorICAgICAgNDcxLCAxMDA5LCAxMjMwLCAxMDA5LCAxNjAzLCAgNDcwLCAxMDA5LCAxMDA5LCAxMDA5LCAxMDA5LAorICAgICAxMDA5LCAxMDA5LCAxMTUwLCAxMTUwLCAxMTUwLCAxMTUwLCAxMTUwLCAxMTUwLCAxMTUwLCAxMTUyLAorICAgICAxMTUyLCAxMTUyLCAxMTUyLCAxMTUyLCAxMTUyLCAxMTUyLCAxMjMxLCAxMzAxLCAxMDA5LCAxMDE5LAorICAgICAxMDE5LCAxMDE5LCAxMDE5LCAxMDE5LCAxMDE5LCAxMDE5LCAxMDE5LCAxMDE5LCAgNDY5LCAgNDY2LAorICAgICAxMjMxLCAxMDE5LCAgNDYyLCAgNDU4LCAxMzAxLCAxMzAxLCAxMDE5LCAxMDE5LCAxMDE5LCAxMDE5LAorICAgICAxMDE5LCAxMDE5LCAxMDIxLCAxMDIxLCAxMDIxLCAxMDIxLCAxMDIxLCAxMDIxLCAxMDIxLCAxMDIxLAorICAgICAxMDIxLCAgNDU3LCAxMzAxLCAgNDU2LCAxMDIxLCAxMjMxLCAxMDIxLCAgNDUzLCAgNDQ5LCAxMDIxLAorICAgICAxMDIxLCAxMDIxLCAxMDIxLCAxMDIxLCAxMDIxLCAxMTU2LCAxMTU2LCAxMTU2LCAxMTU2LCAxMTU2LAorICAgICAxMTU2LCAxMTU2LCAxMTYzLCAxMTYzLCAxMTYzLCAxMTYzLCAxMTYzLCAxMTYzLCAxMTYzLCAxMjM0LAogCi0gICAgIDEzMDgsIDEwMDcsIDEwMDcsIDEwMDcsIDEwMDcsIDEwMDcsIDEwMDcsIDExOTQsIDExOTEsICA0NDcsCi0gICAgIDExODgsICA0NDQsICA0NDMsIDEyMzYsIDE1NDMsICA0MzQsIDExOTgsIDE3MDksIDEzMDgsICA0MzEsCi0gICAgICA0MjksIDExODgsICA0MjgsIDEwMDcsIDEwMTIsIDEwMTIsIDEwMTIsIDEwMTIsIDEwMTIsIDEwMTIsCi0gICAgIDEwMTIsIDEwMTIsIDEwMTIsIDExOTgsIDE1NDMsIDE3MDksIDEwMTIsIDEzMDgsIDE3MDksIDEyMzYsCi0gICAgIDExOTUsIDExOTksIDEwMTIsIDEwMTIsIDEwMTIsIDEwMTIsIDEwMTIsIDEwMTIsIDEwMTQsIDEwMTQsCi0gICAgIDEwMTQsIDEwMTQsIDEwMTQsIDEwMTQsIDEwMTQsIDEwMTQsIDEwMTQsIDExOTMsIDExOTUsIDExOTksCi0gICAgIDEwMTQsICA0MjcsIDEwMTQsICA0MjYsICA0MjUsIDEzMDksIDEwMTQsIDEwMTQsIDEwMTQsIDEwMTQsCi0gICAgIDEwMTQsIDEwMTQsIDExOTUsIDExOTksICA0MjQsIDExOTMsIDEyMjMsIDEyMjMsIDEyMjMsIDEyMjMsCi0gICAgIDEyMjMsIDEyMjMsIDEyMjMsIDEzMDksIDEyMzksIDEzMTEsIDExOTMsICA0MjMsIDEwMTQsIDEwMjQsCi0gICAgIDEwMjQsIDEwMjQsIDEwMjQsIDEwMjQsIDEwMjQsIDEwMjQsIDEwMjQsIDEwMjQsIDEyMzksICA0MjIsCisgICAgIDEzMDMsIDEwMjEsIDEwMzQsIDEwMzQsIDEwMzQsIDEwMzQsIDEwMzQsIDEwMzQsIDEwMzQsIDEwMzQsCisgICAgIDEwMzQsICA0NDgsICA0NDUsIDEyMzQsIDEwMzQsICA0NDQsICA0NDMsIDEzMDMsIDExODYsIDEwMzQsCisgICAgIDEwMzQsIDEwMzQsIDEwMzQsIDEwMzQsIDEwMzQsIDEwMzYsIDEwMzYsIDEwMzYsIDEwMzYsIDEwMzYsCisgICAgIDEwMzYsIDEwMzYsIDEwMzYsIDEwMzYsIDExODMsIDExODYsIDEzMDMsIDEwMzYsIDEyMzQsIDEwMzYsCisgICAgIDE0MTgsIDE0NjcsIDEwMzYsIDEwMzYsIDEwMzYsIDEwMzYsIDEwMzYsIDEwMzYsIDE0MTgsIDE0NjcsCisgICAgIDExODYsIDExODMsIDEyMTgsIDEyMTgsIDEyMTgsIDEyMTgsIDEyMTgsIDEyMTgsIDEyMTgsIDE2NDAsCisgICAgIDEyMzUsIDE2NzgsIDExODMsIDE2MTcsIDEwMzYsIDEwNTAsIDEwNTAsIDEwNTAsIDEwNTAsIDEwNTAsCisgICAgIDEwNTAsIDEwNTAsIDEwNTAsIDEwNTAsIDEyMzUsICA0NDIsIDE2NDAsIDEwNTAsIDE2NzgsIDE2NDAsCisgICAgIDE2MTcsIDExOTAsIDEwNTAsIDEwNTAsIDEwNTAsIDEwNTAsIDEwNTAsIDEwNTAsIDEwNTIsIDEwNTIsCisgICAgIDEwNTIsIDEwNTIsIDEwNTIsIDEwNTIsIDEwNTIsIDEwNTIsIDEwNTIsIDExODgsIDExOTAsIDEyMzUsCiAKLSAgICAgMTMwOSwgMTAyNCwgIDQyMSwgMTMxMSwgIDQyMCwgMTIwMywgIDQxOSwgMTAyNCwgMTAyNCwgMTAyNCwKLSAgICAgMTAyNCwgMTAyNCwgMTAyNCwgMTAyNiwgMTAyNiwgMTAyNiwgMTAyNiwgMTAyNiwgMTAyNiwgMTAyNiwKLSAgICAgMTAyNiwgMTAyNiwgMTMxMSwgMTIwMywgMTIzOSwgMTAyNiwgIDQxOCwgMTAyNiwgMTI0MCwgIDQxNywKLSAgICAgIDQxNiwgMTAyNiwgMTAyNiwgMTAyNiwgMTAyNiwgMTAyNiwgMTAyNiwgMTIwMywgIDQxNCwgIDQxMiwKLSAgICAgIDQxMSwgIDQwOSwgMTI0MCwgMTI0NiwgMTI0NiwgMTI0NiwgMTI0NiwgMTI0NiwgMTI0NiwgMTI0NiwKLSAgICAgIDQwOCwgMTI0OCwgMTMxMywgMTAyNiwgMTAzOSwgMTAzOSwgMTAzOSwgMTAzOSwgMTAzOSwgMTAzOSwKLSAgICAgMTAzOSwgMTAzOSwgMTAzOSwgIDQwNSwgIDQwNCwgMTI0OCwgMTAzOSwgIDQwMiwgMTI0MCwgIDQwMCwKLSAgICAgMTMxMywgIDM5OSwgMTAzOSwgMTAzOSwgMTAzOSwgMTAzOSwgMTAzOSwgMTAzOSwgMTA0MSwgMTA0MSwKLSAgICAgMTA0MSwgMTA0MSwgMTA0MSwgMTA0MSwgMTA0MSwgMTA0MSwgMTA0MSwgMTMxMywgMTI0OSwgMTI1MiwKLSAgICAgMTA0MSwgMTI0OCwgMTA0MSwgMTI1MywgIDM5OCwgIDM5MywgMTA0MSwgMTA0MSwgMTA0MSwgMTA0MSwKKyAgICAgMTA1MiwgMTYxNywgMTA1MiwgMTUyNywgIDQzOSwgMTA1MiwgMTA1MiwgMTA1MiwgMTA1MiwgMTA1MiwKKyAgICAgMTA1MiwgMTUyNywgMTE5MCwgIDQzOCwgMTE4OCwgMTI0MSwgMTI0MSwgMTI0MSwgMTI0MSwgMTI0MSwKKyAgICAgMTI0MSwgMTI0MSwgMTQwNSwgIDQyOSwgMTI0MywgMTE4OCwgMTMwNCwgMTA1MiwgMTA2NCwgMTA2NCwKKyAgICAgMTA2NCwgMTA2NCwgMTA2NCwgMTA2NCwgMTA2NCwgMTA2NCwgMTA2NCwgIDQyNiwgMTI0MywgMTQwNSwKKyAgICAgMTA2NCwgIDQyNCwgIDQyMywgMTMwNCwgMTI0NCwgMTA2NCwgMTA2NCwgMTA2NCwgMTA2NCwgMTA2NCwKKyAgICAgMTA2NCwgMTA2NSwgMTA2NSwgMTA2NSwgMTA2NSwgMTA2NSwgMTA2NSwgMTA2NSwgMTI0NCwgMTQwNSwKKyAgICAgMTMwNCwgIDQyMiwgMTA2NSwgMTI0MywgIDQyMSwgMTYyOSwgIDQyMCwgMTA2NSwgMTA2NSwgMTA2NSwKKyAgICAgMTA2NSwgMTA2NSwgMTA2NSwgMTA5MCwgMTA5MCwgMTA5MCwgMTA5MCwgMTA5MCwgMTA5MCwgMTA5MCwKKyAgICAgMTA5MCwgMTA5MCwgMTYyOSwgMTI0NCwgIDQxOSwgIDQxOCwgMTA5MCwgMTYyOSwgIDQxNywgIDQxNiwKKyAgICAgMTA5MCwgMTA5MCwgMTA5MCwgMTA5MCwgMTA5MCwgMTA5MCwgMTA5MCwgMTA5MSwgMTA5MSwgMTA5MSwKIAotICAgICAxMDQxLCAxMDQxLCAxMjQ5LCAxMjUyLCAgMzkyLCAgMzkxLCAgMzg5LCAxMjUzLCAxMjYwLCAxMjYwLAotICAgICAxMjYwLCAxMjYwLCAxMjYwLCAxMjYwLCAxMjYwLCAgMzg4LCAxMjYyLCAxMzk1LCAxMDQxLCAxMDU1LAotICAgICAxMDU1LCAxMDU1LCAxMDU1LCAxMDU1LCAxMDU1LCAxMDU1LCAxMDU1LCAxMDU1LCAxMjQ5LCAxMjUyLAotICAgICAxMjYyLCAxMDU1LCAgMzg3LCAxMjUzLCAgMzg2LCAxMzk1LCAgMzg0LCAxMDU1LCAxMDU1LCAxMDU1LAotICAgICAxMDU1LCAxMDU1LCAxMDU1LCAxMDU3LCAxMDU3LCAxMDU3LCAxMDU3LCAxMDU3LCAxMDU3LCAxMDU3LAotICAgICAxMDU3LCAxMDU3LCAxMzk1LCAxMjYzLCAxMjY2LCAxMDU3LCAxMjYyLCAxMDU3LCAxMjY3LCAgMzc5LAotICAgICAgMzc4LCAxMDU3LCAxMDU3LCAxMDU3LCAxMDU3LCAxMDU3LCAxMDU3LCAxMjYzLCAxMjY2LCAgMzc3LAotICAgICAgMzc0LCAgMzcwLCAxMjY3LCAxMjc0LCAxMjc0LCAxMjc0LCAxMjc0LCAxMjc0LCAxMjc0LCAxMjc0LAotICAgICAgMzY4LCAxMjc2LCAxNDg5LCAxMDU3LCAxMDY5LCAxMDY5LCAxMDY5LCAxMDY5LCAxMDY5LCAxMDY5LAotICAgICAxMDY5LCAxMDY5LCAxMDY5LCAxMjYzLCAxMjY2LCAxMjc2LCAxMDY5LCAgMzYzLCAxMjY3LCAgMzYyLAorICAgICAxMDkxLCAxMDkxLCAxMDkxLCAxMDkxLCAxMDkxLCAxMDkyLCAxMDkyLCAxMDkyLCAxMDkyLCAxMDkyLAorICAgICAxMDkyLCAxMDkyLCAxMDkyLCAxMDkyLCAgNDE1LCAxNjQyLCAxMjQ3LCAxMjQ4LCAgNDE0LCAxMjU3LAorICAgICAxMzA4LCAxMjU4LCAxMDkyLCAxMDk0LCAxMDk0LCAxMDk0LCAxMDk0LCAxMDk0LCAxMDk0LCAxMDk0LAorICAgICAxMjQ3LCAxMjQ4LCAxNjQyLCAxMjU3LCAxMDk0LCAxMjU4LCAxNjQyLCAxMzA4LCAgNDEzLCAxMDk0LAorICAgICAxMDk0LCAxMDk0LCAxMDk0LCAxMDk0LCAxMDk0LCAxMDk1LCAxMDk1LCAxMDk1LCAxMDk1LCAxMDk1LAorICAgICAxMDk1LCAxMDk1LCAxMDk1LCAxMDk1LCAxMzA4LCAxMjQ3LCAxMjQ4LCAxMDk1LCAxMjU3LCAxNjMwLAorICAgICAxMjU4LCAxMjYxLCAxMDk1LCAxMDk1LCAxMDk1LCAxMDk1LCAxMDk1LCAxMDk1LCAxMDk2LCAxMDk2LAorICAgICAxMDk2LCAxMDk2LCAxMDk2LCAxMDk2LCAxMDk2LCAxMjYxLCAxNjMwLCAgNDEyLCAgNDExLCAxMDk2LAorICAgICAgNDA5LCAxNjMwLCAxNjMxLCAgNDA3LCAxMDk2LCAxMDk2LCAxMDk2LCAxMDk2LCAxMDk2LCAxMDk2LAorICAgICAxMDk4LCAxMDk4LCAxMDk4LCAxMDk4LCAxMDk4LCAxMDk4LCAxMDk4LCAxMDk4LCAxMDk4LCAxNjMxLAogCi0gICAgIDE0ODksIDEyNzcsIDEwNjksIDEwNjksIDEwNjksIDEwNjksIDEwNjksIDEwNjksIDEwNzAsIDEwNzAsCi0gICAgIDEwNzAsIDEwNzAsIDEwNzAsIDEwNzAsIDEwNzAsIDEyNzcsICAzNTksIDE0ODksICAzNTQsIDEwNzAsCi0gICAgICAzNTMsIDEyNzYsIDE3MDcsICAzNDUsIDE3MTMsIDEwNzAsIDEwNzAsIDEwNzAsIDEwNzAsIDEwNzAsCi0gICAgIDEwNzAsIDEwOTUsIDEwOTUsIDEwOTUsIDEwOTUsIDEwOTUsIDEwOTUsIDEwOTUsIDEwOTUsIDEwOTUsCi0gICAgIDE3MDcsIDEyNzcsIDE3MTMsICAzNDMsIDEwOTUsIDE3MDcsICAzNDIsIDE3MTMsICAzMzcsIDEwOTUsCi0gICAgIDEwOTUsIDEwOTUsIDEwOTUsIDEwOTUsIDEwOTUsIDEwOTUsIDEwOTYsIDEwOTYsIDEwOTYsIDEwOTYsCi0gICAgIDEwOTYsIDEwOTYsIDEwOTYsIDEwOTYsIDEwOTcsIDEwOTcsIDEwOTcsIDEwOTcsIDEwOTcsIDEwOTcsCi0gICAgIDEwOTcsIDEwOTcsIDEwOTcsICAzMzUsIDE3MjUsIDE3MjYsIDEyODAsIDEyODEsIDE3MjcsIDEzMDYsCi0gICAgICAzMzMsIDEzMzcsIDEwOTcsIDEwOTksIDEwOTksIDEwOTksIDEwOTksIDEwOTksIDEwOTksIDEwOTksCi0gICAgIDEyODAsIDEyODEsIDE3MjUsIDE3MjYsIDEwOTksIDEzMzcsIDE3MjcsIDEzMDYsIDEzMDYsICAzMzIsCisgICAgIDEyNjEsICA0MDYsIDEwOTgsICA0MDQsIDE2MzEsIDE2MzMsIDEyNjIsIDEwOTgsIDEwOTgsIDEwOTgsCisgICAgIDEwOTgsIDEwOTgsIDEwOTgsIDEwOTksIDEwOTksIDEwOTksIDEwOTksIDEwOTksIDEwOTksIDEwOTksCisgICAgIDEyNjIsICA0MDMsIDE2MzMsICA0MDAsIDEwOTksICAzOTksICAzOTcsIDE2MzMsICAzOTUsIDEwOTksCisgICAgIDEwOTksIDEwOTksIDEwOTksIDEwOTksIDEwOTksIDExMDEsIDExMDEsIDExMDEsIDExMDEsIDExMDEsCisgICAgIDExMDEsIDExMDEsIDExMDEsIDExMDEsICAzOTQsIDEyNjIsICAzOTMsIDExMDEsICAzODgsIDE2NDQsCisgICAgIDE2NDcsIDEyNzEsIDExMDEsIDExMDEsIDExMDEsIDExMDEsIDExMDEsIDExMDEsIDExMDIsIDExMDIsCisgICAgIDExMDIsIDExMDIsIDExMDIsIDExMDIsIDExMDIsIDEyNzEsIDE2NDQsIDE2NDcsICAzODcsIDExMDIsCisgICAgICAzODYsIDE2NDQsIDE2MTgsICAzODQsIDExMDIsIDExMDIsIDExMDIsIDExMDIsIDExMDIsIDExMDIsCisgICAgIDExMDQsIDExMDQsIDExMDQsIDExMDQsIDExMDQsIDExMDQsIDExMDQsIDExMDQsIDExMDQsIDE2MTgsCisgICAgIDEyNzEsIDE2NDcsIDExMDQsICAzODMsIDE2NDYsIDE2NDgsIDE2ODksIDExMDQsIDExMDQsIDExMDQsCiAKLSAgICAgMTA5OSwgMTA5OSwgMTA5OSwgMTA5OSwgMTA5OSwgMTA5OSwgMTEwMCwgMTEwMCwgMTEwMCwgMTEwMCwKLSAgICAgMTEwMCwgMTEwMCwgMTEwMCwgMTEwMCwgMTEwMCwgMTMwNiwgMTI4MCwgMTI4MSwgMTEwMCwgIDMzMSwKLSAgICAgIDMzMCwgMTMzNywgIDMyOSwgMTMzOCwgMTEwMCwgMTEwMCwgMTEwMCwgMTEwMCwgMTEwMCwgMTEwMCwKLSAgICAgMTEwMSwgMTEwMSwgMTEwMSwgMTEwMSwgMTEwMSwgMTEwMSwgMTEwMSwgMTMzOCwgIDMyOCwgIDMyNywKLSAgICAgIDMyNSwgMTEwMSwgIDMyNCwgIDMyMywgIDMxOCwgIDMxNSwgMTY4NywgMTEwMSwgMTEwMSwgMTEwMSwKLSAgICAgMTEwMSwgMTEwMSwgMTEwMSwgMTEwMywgMTEwMywgMTEwMywgMTEwMywgMTEwMywgMTEwMywgMTEwMywKLSAgICAgMTEwMywgMTEwMywgIDMxNCwgMTMzOCwgMTY4NywgMTEwMywgIDMxMywgIDMxMCwgIDMwMywgIDMwMiwKLSAgICAgMTM4NSwgMTEwMywgMTEwMywgMTEwMywgMTEwMywgMTEwMywgMTEwMywgMTEwNCwgMTEwNCwgMTEwNCwKLSAgICAgMTEwNCwgMTEwNCwgMTEwNCwgMTEwNCwgMTM4NSwgMTY4NywgIDMwMCwgIDI5OSwgMTEwNCwgIDI5OCwKLSAgICAgIDI5NiwgIDI5NCwgIDI5MywgMTcxOCwgMTEwNCwgMTEwNCwgMTEwNCwgMTEwNCwgMTEwNCwgMTEwNCwKKyAgICAgMTEwNCwgMTEwNCwgMTEwNCwgMTEwNSwgMTEwNSwgMTEwNSwgMTEwNSwgMTEwNSwgMTEwNSwgMTEwNSwKKyAgICAgMTYxOCwgMTY0NiwgMTY0OCwgMTY4OSwgMTEwNSwgIDM4MiwgMTY0NiwgMTE5NCwgMTE5OCwgMTEwNSwKKyAgICAgMTEwNSwgMTEwNSwgMTEwNSwgMTEwNSwgMTEwNSwgMTEwOCwgMTEwOCwgMTEwOCwgMTEwOCwgMTEwOCwKKyAgICAgMTEwOCwgMTEwOCwgMTEwOCwgMTEwOCwgMTE5NCwgMTE5OCwgMTY0OCwgMTEwOCwgIDM4MSwgMTEwOCwKKyAgICAgIDM3OSwgIDM3NCwgMTEwOCwgMTEwOCwgMTEwOCwgMTEwOCwgMTEwOCwgMTEwOCwgMTE5NCwgMTE5OCwKKyAgICAgMTI1NSwgMTI1NSwgMTI1NSwgMTI1NSwgMTI1NSwgMTI1NSwgMTI1NSwgMTI2OSwgMTI2OSwgMTI2OSwKKyAgICAgMTI2OSwgMTI2OSwgMTI2OSwgMTI2OSwgMTEwOCwgMTExMywgMTExMywgMTExMywgMTExMywgMTExMywKKyAgICAgMTExMywgMTExMywgMTExMywgMTExMywgIDM3MywgIDM3MiwgIDM2OSwgMTExMywgIDM2NSwgIDM2MywKKyAgICAgMTY1NSwgMTY2MywgMTExMywgMTExMywgMTExMywgMTExMywgMTExMywgMTExMywgMTEyMiwgMTEyMiwKKyAgICAgMTEyMiwgMTEyMiwgMTEyMiwgMTEyMiwgMTEyMiwgMTEyMiwgMTEyMiwgMTY1NSwgMTY2MywgIDM1OCwKIAotICAgICAxMTA2LCAxMTA2LCAxMTA2LCAxMTA2LCAxMTA2LCAxMTA2LCAxMTA2LCAxMTA2LCAxMTA2LCAgMjkyLAotICAgICAxMzg1LCAxNzE4LCAxMTA2LCAgMjkwLCAgMjg2LCAgMjg1LCAgMjgzLCAxMzg2LCAxMTA2LCAxMTA2LAotICAgICAxMTA2LCAxMTA2LCAxMTA2LCAxMTA2LCAxMTA3LCAxMTA3LCAxMTA3LCAxMTA3LCAxMTA3LCAxMTA3LAotICAgICAxMTA3LCAxMzg2LCAxNzE4LCAgMjgwLCAgMjc2LCAxMTA3LCAgMjc1LCAgMjcyLCAgMjcxLCAgMjY5LAotICAgICAgMjY0LCAxMTA3LCAxMTA3LCAxMTA3LCAxMTA3LCAxMTA3LCAxMTA3LCAxMTA5LCAxMTA5LCAxMTA5LAotICAgICAxMTA5LCAxMTA5LCAxMTA5LCAxMTA5LCAxMTA5LCAxMTA5LCAgMjYxLCAxMzg2LCAgMjU5LCAxMTA5LAotICAgICAgMjU4LCAgMjU2LCAgMjUzLCAgMjQ5LCAxMzg5LCAxMTA5LCAxMTA5LCAxMTA5LCAxMTA5LCAxMTA5LAotICAgICAxMTA5LCAxMTEwLCAxMTEwLCAxMTEwLCAxMTEwLCAxMTEwLCAxMTEwLCAxMTEwLCAxMzg5LCAgMjQ1LAotICAgICAgMjQzLCAgMjQxLCAxMTEwLCAgMjQwLCAgMjM4LCAgMjM3LCAgMjM2LCAgMjM1LCAxMTEwLCAxMTEwLAotICAgICAxMTEwLCAxMTEwLCAxMTEwLCAxMTEwLCAxMTEzLCAxMTEzLCAxMTEzLCAxMTEzLCAxMTEzLCAxMTEzLAorICAgICAxMTIyLCAgMzU3LCAxNjU1LCAxNjYzLCAxNjY0LCAxMTIyLCAxMTIyLCAxMTIyLCAxMTIyLCAxMTIyLAorICAgICAxMTIyLCAxMTMzLCAxMTMzLCAxMTMzLCAxMTMzLCAxMTMzLCAxMTMzLCAxMTMzLCAxMTMzLCAxMTMzLAorICAgICAgMzU0LCAxNjY0LCAgMzQ5LCAxMTMzLCAgMzQ4LCAgMzQwLCAxNjY0LCAxNjY5LCAxMTMzLCAxMTMzLAorICAgICAxMTMzLCAxMTMzLCAxMTMzLCAxMTMzLCAxMTQ1LCAxMTQ1LCAxMTQ1LCAxMTQ1LCAxMTQ1LCAxMTQ1LAorICAgICAxMTQ1LCAxMTQ1LCAxMTQ1LCAgMzM4LCAxNjY5LCAgMzM3LCAxMTQ1LCAgMzMyLCAgMzMwLCAxNjY5LAorICAgICAxNjcwLCAxMTQ1LCAxMTQ1LCAxMTQ1LCAxMTQ1LCAxMTQ1LCAxMTQ1LCAxMTU3LCAxMTU3LCAxMTU3LAorICAgICAxMTU3LCAxMTU3LCAxMTU3LCAxMTU3LCAxMTU3LCAxMTU3LCAgMzI4LCAxNjcwLCAgMzI3LCAxMTU3LAorICAgICAgMzI2LCAxNjcwLCAxNjc0LCAxNjc3LCAxMTU3LCAxMTU3LCAxMTU3LCAxMTU3LCAxMTU3LCAxMTU3LAorICAgICAxMTcxLCAxMTcxLCAxMTcxLCAxMTcxLCAxMTcxLCAxMTcxLCAxMTcxLCAxMTcxLCAxMTcxLCAxNjc0LAorICAgICAxNjc3LCAgMzI1LCAxMTcxLCAxNjc3LCAxNjc0LCAgMzI0LCAgMzIzLCAxMTcxLCAxMTcxLCAxMTcxLAogCi0gICAgIDExMTMsIDExMTMsIDExMTMsICAyMzQsIDEzODksICAyMzMsIDExMTMsICAyMzIsIDExMTMsICAyMzAsCi0gICAgICAyMjgsICAyMjYsIDExMTMsIDExMTMsIDExMTMsIDExMTMsIDExMTMsIDExMTMsIDEyODcsIDEyODcsCi0gICAgIDEyODcsIDEyODcsIDEyODcsIDEyODcsIDEyODcsIDEyODksIDEyODksIDEyODksIDEyODksIDEyODksCi0gICAgIDEyODksIDEyODksIDEzMTIsICAyMjUsIDExMTMsIDExMTgsIDExMTgsIDExMTgsIDExMTgsIDExMTgsCi0gICAgIDExMTgsIDExMTgsIDExMTgsIDExMTgsICAyMjMsICAyMjEsICAyMjAsIDExMTgsICAyMTgsICAyMTUsCi0gICAgIDEzMTIsIDEzMTIsICAyMTQsIDExMTgsIDExMTgsIDExMTgsIDExMTgsIDExMTgsIDExMTgsIDExMjcsCi0gICAgIDExMjcsIDExMjcsIDExMjcsIDExMjcsIDExMjcsIDExMjcsIDExMjcsIDExMjcsIDEzMTIsICAyMTMsCi0gICAgICAyMTEsIDExMjcsICAyMDksICAyMDgsICAyMDUsICAyMDQsICAyMDIsIDExMjcsIDExMjcsIDExMjcsCi0gICAgIDExMjcsIDExMjcsIDExMjcsIDExMzgsIDExMzgsIDExMzgsIDExMzgsIDExMzgsIDExMzgsIDExMzgsCi0gICAgIDExMzgsIDExMzgsICAyMDEsICAyMDAsICAxOTksIDExMzgsICAxOTgsICAxOTcsICAxOTYsICAxOTUsCisgICAgIDExNzEsIDExNzEsIDExNzEsIDExNzMsIDExNzMsIDExNzMsIDExNzMsIDExNzMsIDExNzMsIDExNzMsCisgICAgIDExNzMsIDExNzMsIDEyOTgsIDEyNzIsIDEyNzUsIDExNzMsIDEyNzYsIDExNzMsICAzMjIsICAzMjAsCisgICAgIDExNzMsIDExNzMsIDExNzMsIDExNzMsIDExNzMsIDExNzMsICAzMTksIDEyNzIsIDEyNzUsIDEyOTgsCisgICAgIDEyNzYsIDEyODIsIDEyODIsIDEyODIsIDEyODIsIDEyODIsIDEyODIsIDEyODIsIDEyOTgsIDEyOTksCisgICAgIDEzMDYsIDEzMTEsIDExNzMsIDExOTksIDExOTksIDExOTksIDExOTksIDExOTksIDExOTksIDExOTksCisgICAgIDExOTksIDExOTksIDEyNzIsIDEyNzUsICAzMTgsIDEyNzYsIDEyOTksIDEzMDYsIDEzMTEsIDEzMzIsCisgICAgIDExOTksIDEyMDEsIDEyMDEsIDEyMDEsIDEyMDEsIDEyMDEsIDEyMDEsIDEyMDEsIDEyMDEsIDEyOTksCisgICAgICAzMTMsIDEzMTEsIDEyMDEsIDEzMzIsICAzMTAsIDE2OTUsIDEzMDYsIDEyMDEsIDEyMDEsIDEyMDEsCisgICAgIDEyMDEsIDEyMDEsIDEyMDEsIDEyMDIsIDEyMDIsIDEyMDIsIDEyMDIsIDEyMDIsIDEyMDIsIDEyMDIsCisgICAgIDEyMDIsIDEyMDIsIDE2OTUsICAzMDksICAzMDgsIDEyMDIsICAzMDUsIDEyMDIsIDEzMzIsICAyOTgsCiAKLSAgICAgIDE5NCwgMTEzOCwgMTEzOCwgMTEzOCwgMTEzOCwgMTEzOCwgMTEzOCwgMTE1MCwgMTE1MCwgMTE1MCwKLSAgICAgMTE1MCwgMTE1MCwgMTE1MCwgMTE1MCwgMTE1MCwgMTE1MCwgIDE5MywgIDE5MiwgIDE5MSwgMTE1MCwKLSAgICAgIDE5MCwgIDE4OSwgIDE4OCwgIDE4NywgIDE4NiwgMTE1MCwgMTE1MCwgMTE1MCwgMTE1MCwgMTE1MCwKLSAgICAgMTE1MCwgMTE2MiwgMTE2MiwgMTE2MiwgMTE2MiwgMTE2MiwgMTE2MiwgMTE2MiwgMTE2MiwgMTE2MiwKLSAgICAgIDE4NSwgIDE4MywgIDE4MiwgMTE2MiwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwgMTE2MiwKLSAgICAgMTE2MiwgMTE2MiwgMTE2MiwgMTE2MiwgMTE2MiwgMTE3NiwgMTE3NiwgMTE3NiwgMTE3NiwgMTE3NiwKLSAgICAgMTE3NiwgMTE3NiwgMTE3NiwgMTE3NiwgIDE3NCwgIDE3MywgIDE3MiwgMTE3NiwgIDE3MCwgIDE2NywKLSAgICAgIDE2NiwgIDE2NSwgIDE2NCwgMTE3NiwgMTE3NiwgMTE3NiwgMTE3NiwgMTE3NiwgMTE3NiwgMTE3OCwKLSAgICAgMTE3OCwgMTE3OCwgMTE3OCwgMTE3OCwgMTE3OCwgMTE3OCwgMTE3OCwgMTE3OCwgIDE2MSwgIDE1OSwKLSAgICAgIDE1MCwgMTE3OCwgIDE0OSwgMTE3OCwgMTQ3NSwgMTUzNSwgMTM5MCwgMTE3OCwgMTE3OCwgMTE3OCwKKyAgICAgMTIwMiwgMTIwMiwgMTIwMiwgMTIwMiwgMTIwMiwgMTIwMiwgMTI4NCwgMTI4NCwgMTI4NCwgMTI4NCwKKyAgICAgMTI4NCwgMTI4NCwgMTI4NCwgMTI4OCwgMTI4OCwgMTI4OCwgMTI4OCwgMTI4OCwgMTI4OCwgMTI4OCwKKyAgICAgMTMzMywgMTMwMCwgMTIwMiwgMTIwNSwgMTIwNSwgMTIwNSwgMTIwNSwgMTIwNSwgMTIwNSwgMTIwNSwKKyAgICAgMTIwNSwgMTIwNSwgIDI5NywgMTMxMiwgMTMzMywgMTIwNSwgMTQ3MCwgMTIwNSwgMTMwMCwgMTMwNywKKyAgICAgMTIwNSwgMTIwNSwgMTIwNSwgMTIwNSwgMTIwNSwgMTIwNSwgIDI5NSwgIDI5NCwgIDI5MywgMTMwMCwKKyAgICAgMTMxMiwgIDI5MSwgIDI4OSwgMTQ3MCwgIDI4OCwgIDI4NywgMTMwNywgMTMwNywgIDI4NSwgMTMzMywKKyAgICAgIDI4MSwgMTMxMiwgMTIwNSwgMTIwOCwgMTIwOCwgMTIwOCwgMTIwOCwgMTIwOCwgMTIwOCwgMTIwOCwKKyAgICAgMTIwOCwgMTIwOCwgMTQ3MCwgIDI4MCwgMTMwNywgMTIwOCwgIDI3OCwgMTIwOCwgIDI3NSwgIDI3MSwKKyAgICAgMTIwOCwgMTIwOCwgMTIwOCwgMTIwOCwgMTIwOCwgMTIwOCwgMTM0MCwgMTM0MCwgMTM0MCwgMTM0MCwKKyAgICAgMTM0MCwgMTM0MCwgMTM0MCwgMTM0NSwgMTM0NSwgMTM0NSwgMTM0NSwgMTM0NSwgMTM0NSwgMTM0NSwKIAotICAgICAxMTc4LCAxMTc4LCAxMTc4LCAxMjkzLCAxMjkzLCAxMjkzLCAxMjkzLCAxMjkzLCAxMjkzLCAxMjkzLAotICAgICAxMzkwLCAxNjUwLCAxNDc1LCAxNTM1LCAgMTQ4LCAxNTQ2LCAxMzA0LCAxMzE2LCAgMTQ3LCAxMTc4LAotICAgICAxMjA0LCAxMjA0LCAxMjA0LCAxMjA0LCAxMjA0LCAxMjA0LCAxMjA0LCAxMjA0LCAxMjA0LCAxNjUwLAotICAgICAgMTQ2LCAxNDc1LCAxNTM1LCAxNTQ2LCAxMzA0LCAxMzE2LCAxMzkwLCAxNDI3LCAxMjA0LCAxMjA2LAotICAgICAxMjA2LCAxMjA2LCAxMjA2LCAxMjA2LCAxMjA2LCAxMjA2LCAxMjA2LCAxMzA0LCAxMzE2LCAxNjUwLAotICAgICAxMjA2LCAxNDI3LCAxNTQ2LCAgMTQ1LCAgMTQ0LCAxNDAwLCAxMjA2LCAxMjA2LCAxMjA2LCAxMjA2LAotICAgICAxMjA2LCAxMjA2LCAxMjA3LCAxMjA3LCAxMjA3LCAxMjA3LCAxMjA3LCAxMjA3LCAxMjA3LCAxMjA3LAotICAgICAxMjA3LCAxMzA1LCAxMzE3LCAxNDAwLCAxMjA3LCAgMTQyLCAxMjA3LCAxNDI3LCAgMTQwLCAgMTM5LAotICAgICAxMjA3LCAxMjA3LCAxMjA3LCAxMjA3LCAxMjA3LCAxMjA3LCAgMTM3LCAxNDAwLCAgMTM1LCAxMzA1LAotICAgICAxMzE3LCAxMzQ1LCAxMzQ1LCAxMzQ1LCAxMzQ1LCAxMzQ1LCAxMzQ1LCAxMzQ1LCAgMTMzLCAgMTMyLAorICAgICAgMjcwLCAxNjk4LCAxMjA4LCAxMjExLCAxMjExLCAxMjExLCAxMjExLCAxMjExLCAxMjExLCAxMjExLAorICAgICAxMjExLCAxMjExLCAgMjY3LCAgMjY2LCAgMjY0LCAxMjExLCAgMjU5LCAxMjExLCAxNjk4LCAgMjU2LAorICAgICAxMjExLCAxMjExLCAxMjExLCAxMjExLCAxMjExLCAxMjExLCAxMzQ3LCAxMzQ3LCAxMzQ3LCAxMzQ3LAorICAgICAxMzQ3LCAxMzQ3LCAxMzQ3LCAxMzUzLCAxMzUzLCAxMzUzLCAxMzUzLCAxMzUzLCAxMzUzLCAxMzUzLAorICAgICAgMjU0LCAxNzA1LCAxMjExLCAxMjE0LCAxMjE0LCAxMjE0LCAxMjE0LCAxMjE0LCAxMjE0LCAxMjE0LAorICAgICAxMjE0LCAxMjE0LCAgMjUzLCAgMjUxLCAgMjQ4LCAxMjE0LCAgMjQ0LCAxMjE0LCAxNzA1LCAgMjQwLAorICAgICAxMjE0LCAxMjE0LCAxMjE0LCAxMjE0LCAxMjE0LCAxMjE0LCAxMzU1LCAxMzU1LCAxMzU1LCAxMzU1LAorICAgICAxMzU1LCAxMzU1LCAxMzU1LCAxMzYxLCAxMzYxLCAxMzYxLCAxMzYxLCAxMzYxLCAxMzYxLCAxMzYxLAorICAgICAxMzgwLCAxMzkwLCAxMjE0LCAxMjE5LCAxMjE5LCAxMjE5LCAxMjE5LCAxMjE5LCAxMjE5LCAxMjE5LAorICAgICAxMjE5LCAxMjE5LCAgMjM4LCAgMjM2LCAxMzgwLCAxMjE5LCAgMjM1LCAgMjMzLCAxMzkwLCAxNjc5LAogCi0gICAgIDEzMDUsIDEzMTcsIDEyMDcsIDEyMTAsIDEyMTAsIDEyMTAsIDEyMTAsIDEyMTAsIDEyMTAsIDEyMTAsCi0gICAgIDEyMTAsIDEyMTAsICAxMzEsICAxMzAsICAxMjgsIDEyMTAsICAxMjcsIDEyMTAsICAxMjYsICAxMjUsCi0gICAgICAxMjQsIDEyMTAsIDEyMTAsIDEyMTAsIDEyMTAsIDEyMTAsIDEyMTAsIDEzNTAsIDEzNTAsIDEzNTAsCi0gICAgIDEzNTAsIDEzNTAsIDEzNTAsIDEzNTAsIDEzNTIsIDEzNTIsIDEzNTIsIDEzNTIsIDEzNTIsIDEzNTIsCi0gICAgIDEzNTIsICAxMjMsICAxMjEsIDEyMTAsIDEyMTMsIDEyMTMsIDEyMTMsIDEyMTMsIDEyMTMsIDEyMTMsCi0gICAgIDEyMTMsIDEyMTMsIDEyMTMsICAxMTksICAxMTgsICAxMTcsIDEyMTMsICAxMTYsIDEyMTMsICAxMTUsCi0gICAgICAxMTQsICAxMTMsIDEyMTMsIDEyMTMsIDEyMTMsIDEyMTMsIDEyMTMsIDEyMTMsIDEzNTgsIDEzNTgsCi0gICAgIDEzNTgsIDEzNTgsIDEzNTgsIDEzNTgsIDEzNTgsIDEzNjAsIDEzNjAsIDEzNjAsIDEzNjAsIDEzNjAsCi0gICAgIDEzNjAsIDEzNjAsICAxMTIsICAxMTEsIDEyMTMsIDEyMTYsIDEyMTYsIDEyMTYsIDEyMTYsIDEyMTYsCi0gICAgIDEyMTYsIDEyMTYsIDEyMTYsIDEyMTYsICAxMDksICAxMDgsICAxMDEsIDEyMTYsICAxMDAsIDEyMTYsCisgICAgIDEyMTksIDEyMTksIDEyMTksIDEyMTksIDEyMTksIDEyMTksIDEyMjYsIDEyMjYsIDEyMjYsIDEyMjYsCisgICAgIDEyMjYsIDEyMjYsIDEyMjYsIDEyMjYsIDEyMjYsIDEzOTAsIDE2NzksICAyMzIsIDEyMjYsIDEzODAsCisgICAgICAyMzEsIDE2ODQsIDE2OTMsIDEyMjYsIDEyMjYsIDEyMjYsIDEyMjYsIDEyMjYsIDEyMjYsIDEyMzYsCisgICAgIDEyMzYsIDEyMzYsIDEyMzYsIDEyMzYsIDEyMzYsIDEyMzYsIDEyMzYsIDEyMzYsIDE2ODQsIDE2OTMsCisgICAgIDE2NzksIDEyMzYsICAyMzAsIDE2ODQsIDE2OTMsIDE2OTYsIDEyMzYsIDEyMzYsIDEyMzYsIDEyMzYsCisgICAgIDEyMzYsIDEyMzYsIDEyNDksIDEyNDksIDEyNDksIDEyNDksIDEyNDksIDEyNDksIDEyNDksIDEyNDksCisgICAgIDEyNDksICAyMjksIDE2OTYsICAyMjgsIDEyNDksICAyMjcsICAyMjUsIDE3MDEsIDE3MDIsIDEyNDksCisgICAgIDEyNDksIDEyNDksIDEyNDksIDEyNDksIDEyNDksIDEyNjMsIDEyNjMsIDEyNjMsIDEyNjMsIDEyNjMsCisgICAgIDEyNjMsIDEyNjMsIDEyNjMsIDEyNjMsIDE3MDEsIDE3MDIsIDE2OTYsIDEyNjMsICAyMjMsICAyMjEsCisgICAgIDE3MDIsICAyMjAsIDEyNjMsIDEyNjMsIDEyNjMsIDEyNjMsIDEyNjMsIDEyNjMsIDEyNzcsIDEyNzcsCiAKLSAgICAgICA5OSwgICA5NywgICA5NiwgMTIxNiwgMTIxNiwgMTIxNiwgMTIxNiwgMTIxNiwgMTIxNiwgMTM2NiwKLSAgICAgMTM2NiwgMTM2NiwgMTM2NiwgMTM2NiwgMTM2NiwgMTM2NiwgMTM2OCwgMTM2OCwgMTM2OCwgMTM2OCwKLSAgICAgMTM2OCwgMTM2OCwgMTM2OCwgICA5MywgICA5MiwgMTIxNiwgMTIxOSwgMTIxOSwgMTIxOSwgMTIxOSwKLSAgICAgMTIxOSwgMTIxOSwgMTIxOSwgMTIxOSwgMTIxOSwgICA5MSwgICA5MCwgICA4OSwgMTIxOSwgICA4OCwKLSAgICAgMTIxOSwgICA4NywgICA4NiwgICA4NSwgMTIxOSwgMTIxOSwgMTIxOSwgMTIxOSwgMTIxOSwgMTIxOSwKLSAgICAgMTM3NCwgMTM3NCwgMTM3NCwgMTM3NCwgMTM3NCwgMTM3NCwgMTM3NCwgMTM3NiwgMTM3NiwgMTM3NiwKLSAgICAgMTM3NiwgMTM3NiwgMTM3NiwgMTM3NiwgMTQyOCwgMTUzOSwgMTIxOSwgMTIyNCwgMTIyNCwgMTIyNCwKLSAgICAgMTIyNCwgMTIyNCwgMTIyNCwgMTIyNCwgMTIyNCwgMTIyNCwgICA4NCwgICA4MiwgMTQyOCwgMTIyNCwKLSAgICAgICA4MSwgICA4MCwgICA3OSwgMTUzOSwgICA3OCwgMTIyNCwgMTIyNCwgMTIyNCwgMTIyNCwgMTIyNCwKLSAgICAgMTIyNCwgMTIzMSwgMTIzMSwgMTIzMSwgMTIzMSwgMTIzMSwgMTIzMSwgMTIzMSwgMTIzMSwgMTIzMSwKKyAgICAgMTI3NywgMTI3NywgMTI3NywgMTI3NywgMTI3NywgMTI3NywgMTI3NywgIDIxOCwgMTcwMSwgIDIxNiwKKyAgICAgMTI3NywgIDIxNSwgIDIxMywgMTcwNywgMTcwNCwgMTI3NywgMTI3NywgMTI3NywgMTI3NywgMTI3NywKKyAgICAgMTI3NywgMTI4OSwgMTI4OSwgMTI4OSwgMTI4OSwgMTI4OSwgMTI4OSwgMTI4OSwgMTI4OSwgMTI4OSwKKyAgICAgMTcwNywgMTcwNCwgIDIxMCwgMTI4OSwgMTcwNCwgIDIwOSwgMTcwOSwgMTcwOCwgMTI4OSwgMTI4OSwKKyAgICAgMTI4OSwgMTI4OSwgMTI4OSwgMTI4OSwgMTMxMywgMTMxMywgMTMxMywgMTMxMywgMTMxMywgMTMxMywKKyAgICAgMTMxMywgMTMxMywgMTMxMywgMTcwOSwgMTcwOCwgIDIwOCwgMTMxMywgIDIwNiwgMTMxMywgMTcwOCwKKyAgICAgIDIwNCwgMTMxMywgMTMxMywgMTMxMywgMTMxMywgMTMxMywgMTMxMywgMTM2MywgMTM2MywgMTM2MywKKyAgICAgMTM2MywgMTM2MywgMTM2MywgMTM2MywgMTM2OSwgMTM2OSwgMTM2OSwgMTM2OSwgMTM2OSwgMTM2OSwKKyAgICAgMTM2OSwgMTM4MSwgMTQ4NCwgMTMxMywgMTMxNywgMTMxNywgMTMxNywgMTMxNywgMTMxNywgMTMxNywKKyAgICAgMTMxNywgMTMxNywgMTMxNywgIDIwMywgIDIwMCwgMTM4MSwgMTMxNywgIDE5OSwgIDE5NywgMTQ4NCwKIAotICAgICAgIDc3LCAxNTM5LCAgIDc2LCAxMjMxLCAxNDI4LCAgIDc1LCAgIDc0LCAgIDczLCAgIDcyLCAxMjMxLAotICAgICAxMjMxLCAxMjMxLCAxMjMxLCAxMjMxLCAxMjMxLCAxMjQxLCAxMjQxLCAxMjQxLCAxMjQxLCAxMjQxLAotICAgICAxMjQxLCAxMjQxLCAxMjQxLCAxMjQxLCAgIDcxLCAgIDcwLCAgIDY5LCAxMjQxLCAgIDY3LCAgIDY2LAotICAgICAgIDY1LCAgIDUxLCAgIDQzLCAxMjQxLCAxMjQxLCAxMjQxLCAxMjQxLCAxMjQxLCAxMjQxLCAxMjU0LAotICAgICAxMjU0LCAxMjU0LCAxMjU0LCAxMjU0LCAxMjU0LCAxMjU0LCAxMjU0LCAxMjU0LCAgIDQyLCAgIDQwLAotICAgICAgIDE4LCAxMjU0LCAgIDExLCAgICA4LCAgICAzLCAgICAwLCAgICAwLCAxMjU0LCAxMjU0LCAxMjU0LAotICAgICAxMjU0LCAxMjU0LCAxMjU0LCAxMjY4LCAxMjY4LCAxMjY4LCAxMjY4LCAxMjY4LCAxMjY4LCAxMjY4LAotICAgICAxMjY4LCAxMjY4LCAgICAwLCAgICAwLCAgICAwLCAxMjY4LCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgICAwLCAxMjY4LCAxMjY4LCAxMjY4LCAxMjY4LCAxMjY4LCAxMjY4LCAxMjgyLCAxMjgyLCAxMjgyLAotICAgICAxMjgyLCAxMjgyLCAxMjgyLCAxMjgyLCAxMjgyLCAxMjgyLCAgICAwLCAgICAwLCAgICAwLCAxMjgyLAorICAgICAxNzE0LCAxMzE3LCAxMzE3LCAxMzE3LCAxMzE3LCAxMzE3LCAxMzE3LCAxMzIwLCAxMzIwLCAxMzIwLAorICAgICAxMzIwLCAxMzIwLCAxMzIwLCAxMzIwLCAxMzIwLCAxMzIwLCAxNDg0LCAxNzE0LCAgMTk2LCAxMzIwLAorICAgICAxMzgxLCAgMTk1LCAxNzE2LCAxNzE5LCAxMzIwLCAxMzIwLCAxMzIwLCAxMzIwLCAxMzIwLCAxMzIwLAorICAgICAxMzIzLCAxMzIzLCAxMzIzLCAxMzIzLCAxMzIzLCAxMzIzLCAxMzIzLCAxMzIzLCAxMzIzLCAxNzE2LAorICAgICAxNzE5LCAgMTk0LCAxMzIzLCAgMTkzLCAgMTkyLCAxNzIwLCAxNzIxLCAxMzIzLCAxMzIzLCAxMzIzLAorICAgICAxMzIzLCAxMzIzLCAxMzIzLCAxMzI2LCAxMzI2LCAxMzI2LCAxMzI2LCAxMzI2LCAxMzI2LCAxMzI2LAorICAgICAxMzI2LCAxMzI2LCAxNzIwLCAxNzIxLCAgMTkxLCAxMzI2LCAgMTkwLCAgMTg5LCAxNzIyLCAgMTg4LAorICAgICAxMzI2LCAxMzI2LCAxMzI2LCAxMzI2LCAxMzI2LCAxMzI2LCAxMzI5LCAxMzI5LCAxMzI5LCAxMzI5LAorICAgICAxMzI5LCAxMzI5LCAxMzI5LCAxMzI5LCAxMzI5LCAxNzIyLCAgMTg3LCAgMTg2LCAxMzI5LCAgMTg1LAorICAgICAgMTg0LCAgMTgzLCAgMTgyLCAxMzI5LCAxMzI5LCAxMzI5LCAxMzI5LCAxMzI5LCAxMzI5LCAxMzM0LAogCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsIDEyODIsIDEyODIsIDEyODIsIDEyODIsIDEyODIsCi0gICAgIDEyODIsIDEyOTQsIDEyOTQsIDEyOTQsIDEyOTQsIDEyOTQsIDEyOTQsIDEyOTQsIDEyOTQsIDEyOTQsCi0gICAgICAgIDAsICAgIDAsICAgIDAsIDEyOTQsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsIDEyOTQsCi0gICAgIDEyOTQsIDEyOTQsIDEyOTQsIDEyOTQsIDEyOTQsIDEzMTgsIDEzMTgsIDEzMTgsIDEzMTgsIDEzMTgsCi0gICAgIDEzMTgsIDEzMTgsIDEzMTgsIDEzMTgsICAgIDAsICAgIDAsICAgIDAsIDEzMTgsICAgIDAsIDEzMTgsCi0gICAgICAgIDAsICAgIDAsICAgIDAsIDEzMTgsIDEzMTgsIDEzMTgsIDEzMTgsIDEzMTgsIDEzMTgsIDEzODMsCi0gICAgIDEzODMsIDEzODMsIDEzODMsIDEzODMsIDEzODMsIDEzODMsIDE0MjEsIDE0MjEsIDE0MjEsIDE0MjEsCi0gICAgIDE0MjEsIDE0MjEsIDE0MjEsIDE0MzUsIDE1NDAsIDEzMTgsIDEzMjIsIDEzMjIsIDEzMjIsIDEzMjIsCi0gICAgIDEzMjIsIDEzMjIsIDEzMjIsIDEzMjIsIDEzMjIsICAgIDAsICAgIDAsIDE0MzUsIDEzMjIsICAgIDAsCi0gICAgICAgIDAsICAgIDAsIDE1NDAsICAgIDAsIDEzMjIsIDEzMjIsIDEzMjIsIDEzMjIsIDEzMjIsIDEzMjIsCisgICAgIDEzMzQsIDEzMzQsIDEzMzQsIDEzMzQsIDEzMzQsIDEzMzQsIDEzMzQsIDEzMzQsICAxODEsICAxODAsCisgICAgICAxNzgsIDEzMzQsICAxNzcsICAxNzQsICAxNzMsICAxNzIsIDEzMzQsIDEzMzQsIDEzMzQsIDEzMzQsCisgICAgIDEzMzQsIDEzMzQsIDEzNzEsIDEzNzEsIDEzNzEsIDEzNzEsIDEzNzEsIDEzNzEsIDEzNzEsIDEzNzgsCisgICAgIDEzNzgsIDEzNzgsIDEzNzgsIDEzNzgsIDEzNzgsIDEzNzgsIDEzODQsIDEzODUsIDEzOTUsIDE0MDAsCisgICAgIDE0MDIsIDE0MDMsIDE0MDYsIDE0MTYsIDE0MTYsIDE0MTYsIDE0MTYsIDE0MTYsIDE0MTYsIDE0MTYsCisgICAgIDEzODQsIDEzODUsIDE0MjIsICAxNzEsICAxNzAsIDEzOTUsIDE0MDAsIDE0MDIsIDE0MDMsIDE0MDYsCisgICAgICAxNjksICAxNjgsICAxNjcsICAxNjUsICAxNjIsICAxNjEsIDE0MjIsIDE0MDAsIDE0MDYsIDEzOTUsCisgICAgIDE0MDMsIDE0MDIsIDE0MjMsIDE0MDAsIDE0MzAsIDEzODQsIDEzODUsIDEzODYsIDEzODYsIDEzODYsCisgICAgIDEzODYsIDEzODYsIDEzODYsIDEzODYsIDEzODYsIDEzODYsIDE0MjMsICAxNjAsIDE0MzAsIDEzODYsCisgICAgICAxNTksIDE0MjIsICAxNTYsICAxNTQsIDEzODYsIDEzODYsIDEzODYsIDEzODYsIDEzODYsIDEzODYsCiAKLSAgICAgMTMyNSwgMTMyNSwgMTMyNSwgMTMyNSwgMTMyNSwgMTMyNSwgMTMyNSwgMTMyNSwgMTMyNSwgICAgMCwKLSAgICAgMTU0MCwgICAgMCwgMTMyNSwgMTQzNSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgMTMyNSwgMTMyNSwKLSAgICAgMTMyNSwgMTMyNSwgMTMyNSwgMTMyNSwgMTMyOCwgMTMyOCwgMTMyOCwgMTMyOCwgMTMyOCwgMTMyOCwKLSAgICAgMTMyOCwgMTMyOCwgMTMyOCwgICAgMCwgICAgMCwgICAgMCwgMTMyOCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgMTMyOCwgMTMyOCwgMTMyOCwgMTMyOCwgMTMyOCwgMTMyOCwgMTMzMSwgMTMzMSwKLSAgICAgMTMzMSwgMTMzMSwgMTMzMSwgMTMzMSwgMTMzMSwgMTMzMSwgMTMzMSwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgMTMzMSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgMTMzMSwgMTMzMSwgMTMzMSwgMTMzMSwKLSAgICAgMTMzMSwgMTMzMSwgMTMzNCwgMTMzNCwgMTMzNCwgMTMzNCwgMTMzNCwgMTMzNCwgMTMzNCwgMTMzNCwKLSAgICAgMTMzNCwgICAgMCwgICAgMCwgICAgMCwgMTMzNCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgMTMzNCwgMTMzNCwgMTMzNCwgMTMzNCwgMTMzNCwgMTMzNCwgMTMzOSwgMTMzOSwgMTMzOSwgMTMzOSwKKyAgICAgMTQwNywgMTQwNywgMTQwNywgMTQwNywgMTQwNywgMTQwNywgMTQwNywgMTQwNywgMTQwNywgIDE0NSwKKyAgICAgIDE0NCwgMTQyMywgMTQwNywgMTQzMCwgIDE0MywgIDE0MiwgMTQzMSwgMTQwNywgMTQwNywgMTQwNywKKyAgICAgMTQwNywgMTQwNywgMTQwNywgMTQyOCwgMTQyOCwgMTQyOCwgMTQyOCwgMTQyOCwgMTQyOCwgMTQyOCwKKyAgICAgMTQzMSwgMTQzNywgMTQzNywgMTQzNywgMTQzNywgMTQzNywgMTQzNywgMTQzNywgMTQzOSwgMTQ0MCwKKyAgICAgMTQ0NiwgMTQ0NiwgMTQ0NiwgMTQ0NiwgMTQ0NiwgMTQ0NiwgMTQ0NiwgMTQ0OCwgMTQ0OSwgIDE0MSwKKyAgICAgIDE0MCwgIDEzOSwgMTQzOSwgMTQ0MCwgIDEzNywgMTQzMSwgMTQ1NywgMTQ1OCwgIDEzNSwgIDEzNCwKKyAgICAgIDEzMiwgMTQ0OCwgMTQ0OSwgMTQ1NSwgMTQ1NSwgMTQ1NSwgMTQ1NSwgMTQ1NSwgMTQ1NSwgMTQ1NSwKKyAgICAgMTQ1NywgMTQ1OCwgIDEzMCwgIDEyOCwgIDEyNywgIDEyNiwgIDEyNSwgMTQzOSwgMTQ0MCwgMTQ2MywKKyAgICAgMTQ2MywgMTQ2MywgMTQ2MywgMTQ2MywgMTQ2MywgMTQ2MywgMTQ0OCwgMTQ0OSwgMTQ2NSwgMTQ2NSwKKyAgICAgMTQ2NSwgMTQ2NSwgMTQ2NSwgMTQ2NSwgMTQ2NSwgMTQ1NywgMTQ1OCwgMTQ3MSwgMTQ3NSwgMTQ3MiwKIAotICAgICAxMzM5LCAxMzM5LCAxMzM5LCAxMzM5LCAxMzM5LCAgICAwLCAgICAwLCAgICAwLCAxMzM5LCAgICAwLAotICAgICAgICAwLCAgICAwLCAxNDA3LCAgICAwLCAxMzM5LCAxMzM5LCAxMzM5LCAxMzM5LCAxMzM5LCAxMzM5LAotICAgICAxMzkxLCAxMzkxLCAxMzkxLCAxMzkxLCAxMzkxLCAxMzkxLCAxMzkxLCAxMzkxLCAxMzkxLCAxNDA1LAotICAgICAxNDA3LCAxNDA4LCAxMzkxLCAgICAwLCAxNDM2LCAgICAwLCAgICAwLCAgICAwLCAxMzkxLCAxMzkxLAotICAgICAxMzkxLCAxMzkxLCAxMzkxLCAxMzkxLCAxNDA3LCAxNDkwLCAgICAwLCAxNDA1LCAxNDM2LCAxNDA4LAotICAgICAxNDMzLCAxNDMzLCAxNDMzLCAxNDMzLCAxNDMzLCAxNDMzLCAxNDMzLCAgICAwLCAxNDA1LCAgICAwLAotICAgICAgICAwLCAxNDA4LCAxNDQ0LCAxNDkwLCAxNDA1LCAxNDEyLCAxNDEyLCAxNDEyLCAxNDEyLCAxNDEyLAotICAgICAxNDEyLCAxNDEyLCAxNDEyLCAxNDEyLCAxNDM2LCAxNDkwLCAxNDQ0LCAxNDEyLCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAwLCAxNDQ1LCAxNDEyLCAxNDEyLCAxNDEyLCAxNDEyLCAxNDEyLCAxNDEyLCAxNDQyLAotICAgICAxNDQyLCAxNDQyLCAxNDQyLCAxNDQyLCAxNDQyLCAxNDQyLCAxNDQ1LCAxNDUzLCAxNDU0LCAgICAwLAorICAgICAxNDgwLCAxNDc2LCAxNDc3LCAxNDc4LCAxNDc5LCAxNDgyLCAgMTIzLCAgMTIyLCAxNDg1LCAgMTIxLAorICAgICAgMTIwLCAgMTE5LCAgMTE4LCAgMTE2LCAxNDcxLCAxNDc1LCAxNDcyLCAxNDgwLCAxNDc2LCAxNDc3LAorICAgICAxNDc4LCAxNDc5LCAxNDgyLCAxNDcxLCAxNDcyLCAxNDg1LCAxNDc1LCAxNDc2LCAxNDc3LCAxNDc4LAorICAgICAxNDc5LCAxNDgwLCAxNDk1LCAxNDgyLCAxNDk2LCAgMTE0LCAgMTEzLCAxNDg1LCAxNTAxLCAxNTAxLAorICAgICAxNTAxLCAxNTAxLCAxNTAxLCAxNTAxLCAxNTAxLCAgMTEyLCAxNDk1LCAgMTExLCAxNDk2LCAxNTA1LAorICAgICAxNTA1LCAxNTA1LCAxNTA1LCAxNTA1LCAxNTA1LCAxNTA1LCAxNTA5LCAxNTA5LCAxNTA5LCAxNTA5LAorICAgICAxNTA5LCAxNTA5LCAxNTA5LCAxNTEzLCAxNTEzLCAxNTEzLCAxNTEzLCAxNTEzLCAxNTEzLCAxNTEzLAorICAgICAgMTEwLCAxNDk1LCAgMTA5LCAxNDk2LCAxNTE3LCAxNTE3LCAxNTE3LCAxNTE3LCAxNTE3LCAxNTE3LAorICAgICAxNTE3LCAxNTIyLCAxNTIyLCAxNTIyLCAxNTIyLCAxNTIyLCAxNTIyLCAxNTIyLCAxNTI0LCAxNTI1LAorICAgICAxNTMwLCAxNTMzLCAxNTQwLCAxNTQ0LCAxNTM0LCAxNTM1LCAxNTM3LCAxNTM4LCAxNTcyLCAxNTQxLAogCi0gICAgICAgIDAsICAgIDAsIDE0NDQsIDE0NTEsIDE0NTEsIDE0NTEsIDE0NTEsIDE0NTEsIDE0NTEsIDE0NTEsCi0gICAgIDE0NjIsIDE0NTMsIDE0NTQsIDE0NjAsIDE0NjAsIDE0NjAsIDE0NjAsIDE0NjAsIDE0NjAsIDE0NjAsCi0gICAgIDE0NjMsICAgIDAsIDE0NDUsICAgIDAsIDE0NjIsIDE0NjgsIDE0NjgsIDE0NjgsIDE0NjgsIDE0NjgsCi0gICAgIDE0NjgsIDE0NjgsICAgIDAsIDE0ODAsIDE0NjMsIDE0ODUsIDE0ODEsIDE0NTMsIDE0NTQsIDE0NzAsCi0gICAgIDE0NzAsIDE0NzAsIDE0NzAsIDE0NzAsIDE0NzAsIDE0NzAsIDE0ODIsIDE0ODMsIDE0ODQsICAgIDAsCi0gICAgIDE0NjIsIDE0ODAsIDE0ODcsIDE0ODUsIDE0ODEsIDE1MDAsICAgIDAsIDE1MDEsIDE1NDIsIDE1NDcsCi0gICAgIDE0NjMsIDE2MDMsIDE0ODAsIDE0ODEsIDE0ODIsIDE0ODMsIDE0ODQsIDE0ODUsICAgIDAsIDE1MDAsCi0gICAgIDE0ODcsIDE1MDEsICAgIDAsIDE0ODIsIDE0ODMsIDE0ODQsIDE1NDIsIDE1NDcsICAgIDAsIDE2MDMsCi0gICAgICAgIDAsIDE0ODcsIDE1MDYsIDE1MDYsIDE1MDYsIDE1MDYsIDE1MDYsIDE1MDYsIDE1MDYsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsIDE2MDMsIDE1NDIsIDE1MDAsIDE1NDcsIDE1MDEsIDE1MTAsIDE1MTAsCisgICAgICAxMDgsICAxMDcsIDE1MjQsIDE1MjUsIDE1NDIsIDE1NzksIDE1OTgsIDE1MzAsIDE1MzMsIDE1NDAsCisgICAgIDE1NDQsIDE1MzQsIDE1MzUsIDE1MzcsIDE1MzgsIDE1NzIsIDE1NDEsIDE1MzMsIDE1NDAsIDE1NDQsCisgICAgICAxMDYsIDE1NDIsIDE1NzksIDE1OTgsICAxMDQsICAxMDMsIDE1MzAsIDE1MjQsIDE1MjUsIDE1MzQsCisgICAgIDE1MzUsIDE1MzcsIDE1NzIsICAgOTYsIDE1MzgsIDE1NDEsICAgOTUsIDE1OTgsICAgOTQsIDE1NzksCisgICAgIDE1NDIsIDE1NDYsIDE1NDYsIDE1NDYsIDE1NDYsIDE1NDYsIDE1NDYsIDE1NDYsIDE1NDksIDE1NDksCisgICAgIDE1NDksIDE1NDksIDE1NDksIDE1NDksIDE1NDksIDE1NTMsIDE1NTMsIDE1NTMsIDE1NTMsIDE1NTMsCisgICAgIDE1NTMsIDE1NTMsIDE1NTcsIDE1NTcsIDE1NTcsIDE1NTcsIDE1NTcsIDE1NTcsIDE1NTcsIDE1NjEsCisgICAgIDE1NjEsIDE1NjEsIDE1NjEsIDE1NjEsIDE1NjEsIDE1NjEsIDE1NjUsIDE1NjUsIDE1NjUsIDE1NjUsCisgICAgIDE1NjUsIDE1NjUsIDE1NjUsIDE1NjgsIDE1NjgsIDE1NjgsIDE1NjgsIDE1NjgsIDE1NjgsIDE1NjgsCisgICAgIDE1NzYsICAgOTIsIDE1NzcsIDE1NzgsIDE1ODEsIDE1ODMsIDE1ODUsIDE1ODUsIDE1ODUsIDE1ODUsCiAKLSAgICAgMTUxMCwgMTUxMCwgMTUxMCwgMTUxMCwgMTUxMCwgMTUxNCwgMTUxNCwgMTUxNCwgMTUxNCwgMTUxNCwKLSAgICAgMTUxNCwgMTUxNCwgMTUxOCwgMTUxOCwgMTUxOCwgMTUxOCwgMTUxOCwgMTUxOCwgMTUxOCwgMTUyMiwKLSAgICAgMTUyMiwgMTUyMiwgMTUyMiwgMTUyMiwgMTUyMiwgMTUyMiwgMTUyNywgMTUyNywgMTUyNywgMTUyNywKLSAgICAgMTUyNywgMTUyNywgMTUyNywgMTUyOSwgMTUzMCwgMTUzOCwgMTU0NSwgMTU0OSwgMTU1MSwgMTU1MSwKLSAgICAgMTU1MSwgMTU1MSwgMTU1MSwgMTU1MSwgMTU1MSwgICAgMCwgICAgMCwgMTUyOSwgMTUzMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgMTUzOCwgMTU0NSwgMTU0OSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgMTUzOCwgMTU0NSwgMTU0OSwgMTU1NCwgMTU1NCwgMTU1NCwgMTU1NCwgMTU1NCwKLSAgICAgMTU1NCwgMTU1NCwgICAgMCwgMTUyOSwgMTUzMCwgMTU1OCwgMTU1OCwgMTU1OCwgMTU1OCwgMTU1OCwKLSAgICAgMTU1OCwgMTU1OCwgMTU2MiwgMTU2MiwgMTU2MiwgMTU2MiwgMTU2MiwgMTU2MiwgMTU2MiwgMTU2NiwKLSAgICAgMTU2NiwgMTU2NiwgMTU2NiwgMTU2NiwgMTU2NiwgMTU2NiwgMTU3MCwgMTU3MCwgMTU3MCwgMTU3MCwKKyAgICAgMTU4NSwgMTU4NSwgMTU4NSwgICA5MSwgMTU5NiwgMTU5OSwgMTU5NywgMTU3NiwgMTU3NiwgMTU3NywKKyAgICAgMTU3OCwgMTU4MSwgMTU4MywgMTU5NCwgMTU5NCwgMTU5NCwgMTU5NCwgMTU5NCwgMTU5NCwgMTU5NCwKKyAgICAgMTU4MSwgMTU5NiwgMTU5OSwgMTU5NywgMTYwMSwgMTU3NiwgMTYwNCwgMTYwNSwgMTU3NywgMTU3OCwKKyAgICAgMTYwNiwgMTU4MywgMTU5NywgMTYxNiwgMTYxOSwgMTYyMCwgMTU5OSwgMTYyMSwgICA4OCwgMTYyMiwKKyAgICAgMTU5NiwgMTYwMSwgMTYyNCwgMTYwNCwgMTYwNSwgICA4NywgICA4NiwgMTYwNiwgMTYzMiwgMTYyNSwKKyAgICAgMTYxNiwgMTYxOSwgMTYyMCwgMTYwNSwgMTYyMSwgMTYwMSwgMTYyMiwgICA4NSwgMTYzNCwgMTYyNCwKKyAgICAgMTY0MywgMTYwNiwgMTYwNCwgMTYyMCwgMTYzNiwgMTYzMiwgMTYyNSwgMTYyMSwgMTYzNywgMTYxNiwKKyAgICAgMTYzOCwgMTYzOSwgMTYxOSwgMTYyMiwgMTYzMiwgMTYzNCwgMTYzNCwgMTY0MywgMTYyNCwgMTYyNSwKKyAgICAgICA4NCwgMTYzNiwgMTY0MSwgMTY0NSwgMTY1MCwgMTYzNywgMTY0OSwgMTYzOCwgMTYzOSwgMTY1MiwKKyAgICAgMTY1MSwgMTY0MywgMTY1NCwgMTYzNCwgMTYzNCwgMTY1NiwgICA4MywgMTYzNiwgMTYzNiwgMTY0MSwKIAotICAgICAxNTcwLCAxNTcwLCAxNTcwLCAxNTczLCAxNTczLCAxNTczLCAxNTczLCAxNTczLCAxNTczLCAxNTczLAotICAgICAxNTc3LCAxNTgxLCAgICAwLCAxNTgyLCAxNTgzLCAxNTg2LCAxNTg4LCAxNTg0LCAxNTkwLCAxNTkwLAotICAgICAxNTkwLCAxNTkwLCAxNTkwLCAxNTkwLCAxNTkwLCAxNjAxLCAxNjA5LCAgICAwLCAxNTc3LCAxNTgxLAotICAgICAxNTgxLCAxNTgyLCAxNTgzLCAxNTg2LCAxNTg4LCAxNTg0LCAgICAwLCAgICAwLCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAwLCAxNTg2LCAxNjAxLCAxNjA5LCAxNTc3LCAxNjAyLCAxNTgxLCAxNjA0LCAxNjA2LAotICAgICAxNTgyLCAxNTgzLCAxNTg0LCAxNTg4LCAxNTk5LCAxNTk5LCAxNTk5LCAxNTk5LCAxNTk5LCAxNTk5LAotICAgICAxNTk5LCAxNjEwLCAxNjAxLCAxNjA5LCAxNjAyLCAxNjExLCAxNjA0LCAxNjA2LCAxNjIxLCAxNjI1LAotICAgICAgICAwLCAxNjI2LCAxNjI3LCAxNjAyLCAxNjI5LCAxNjMwLCAxNjM3LCAxNjM5LCAgICAwLCAxNjEwLAotICAgICAxNjA0LCAxNjA2LCAxNjQxLCAxNjExLCAgICAwLCAgICAwLCAxNjIxLCAxNjI1LCAxNjEwLCAxNjI2LAotICAgICAxNjI3LCAxNjQyLCAxNjI5LCAxNjMwLCAxNjM3LCAxNjM5LCAxNjM5LCAxNjExLCAxNjI1LCAgICAwLAorICAgICAxNjQ1LCAxNjUwLCAxNjM3LCAxNjQ5LCAxNjM4LCAxNjM5LCAxNjUyLCAxNjUxLCAxNjUzLCAxNjU0LAorICAgICAxNjUwLCAxNjUxLCAxNjU2LCAgIDgyLCAxNjU3LCAxNjU4LCAxNjQxLCAxNjYwLCAxNjYxLCAgIDgxLAorICAgICAxNjQ1LCAxNjYyLCAxNjQ5LCAxNjUxLCAxNjUxLCAxNjUzLCAxNjU0LCAxNjUyLCAxNjY1LCAxNjY3LAorICAgICAxNjU2LCAxNjU3LCAxNjU4LCAxNjU4LCAxNjYwLCAxNjYxLCAxNjUzLCAgIDgwLCAxNjYyLCAxNjY2LAorICAgICAxNjY4LCAgIDc5LCAxNjcxLCAxNjc1LCAxNjczLCAxNjY1LCAxNjY3LCAxNjc2LCAxNjU3LCAxNjYxLAorICAgICAxNjU4LCAgIDc3LCAxNjgwLCAxNjYwLCAxNjY1LCAgIDc2LCAxNjY2LCAxNjY4LCAxNjYyLCAxNjcxLAorICAgICAxNjc1LCAxNjczLCAxNjgxLCAxNjY3LCAxNjc2LCAxNjgyLCAgIDc1LCAxNjg1LCAxNjY2LCAxNjgwLAorICAgICAxNjgzLCAxNjg2LCAxNjY4LCAxNjcxLCAxNjczLCAxNjc1LCAxNjg3LCAgIDc0LCAgIDczLCAxNjgxLAorICAgICAxNjg4LCAxNjc2LCAxNjgyLCAxNjgwLCAxNjg1LCAgIDcyLCAgIDcxLCAxNjgzLCAxNjg2LCAgIDcwLAorICAgICAxNjkwLCAxNjkxLCAxNjkyLCAxNjg3LCAxNjgxLCAxNjgxLCAxNjk0LCAxNjg4LCAxNjgzLCAxNjk3LAogCi0gICAgIDE2NDEsIDE2NDMsIDE2MjYsIDE2MzcsIDE2NDQsIDE2MjEsIDE2MzAsIDE2MjcsICAgIDAsIDE2NDIsCi0gICAgIDE2NDYsIDE2MjksIDE2NDgsIDE2MzksIDE2MzksIDE2NTQsIDE2NDEsIDE2NDEsICAgIDAsIDE2NDMsCi0gICAgIDE2NTUsICAgIDAsIDE2NDQsIDE2NjUsIDE2NTYsIDE2NTgsIDE2NDIsICAgIDAsIDE2NDYsICAgIDAsCi0gICAgIDE2NDgsIDE2NTksIDE2NjEsIDE2NTQsICAgIDAsIDE2NjIsIDE2NDMsIDE2NjMsIDE2NTUsIDE2NDQsCi0gICAgICAgIDAsIDE2NjUsIDE2NTYsIDE2NTgsIDE2NDgsIDE2NDYsIDE2NTYsIDE2NTUsICAgIDAsIDE2NTksCi0gICAgIDE2NjEsIDE2NjYsIDE2NTQsIDE2NjIsIDE2NTgsIDE2NjMsIDE2NjMsIDE2NjcsIDE2NTYsIDE2NTYsCi0gICAgIDE2NjUsIDE2NzAsIDE2NzEsIDE2NzIsIDE2NzMsICAgIDAsIDE2NTksIDE2NzYsIDE2NjEsIDE2NjYsCi0gICAgIDE2NjIsIDE2NzgsIDE2ODAsIDE2NjMsICAgIDAsIDE2NjcsIDE2ODEsICAgIDAsIDE2ODUsIDE2NzAsCi0gICAgIDE2NzEsIDE2NzIsIDE2NzMsIDE2NjYsICAgIDAsIDE2NzYsIDE2ODYsICAgIDAsIDE2NzAsIDE2NzgsCi0gICAgIDE2ODAsIDE2OTAsIDE2NzEsICAgIDAsIDE2ODEsIDE2NjcsIDE2ODUsIDE2NzMsIDE2NzIsIDE2NzYsCisgICAgIDE2OTksIDE2ODUsIDE2ODYsIDE2ODIsIDE3MDAsICAgNjksIDE2ODgsIDE2OTAsIDE2OTEsIDE2OTIsCisgICAgIDE3MDMsIDE3MDYsIDE2ODcsIDE2OTQsIDE3MTAsIDE3MTEsIDE2OTcsIDE2OTksIDE3MTMsIDE2OTEsCisgICAgIDE2OTAsIDE3MDAsIDE2OTQsIDE3MTUsIDE3MTIsIDE3MTcsICAgNjgsIDE3MDMsIDE3MDYsIDE2OTIsCisgICAgICAgNjcsIDE3MTAsIDE3MTEsIDE2OTcsICAgNjYsIDE3MTMsIDE2OTksICAgNjUsICAgNjQsIDE3MDAsCisgICAgIDE3MTUsIDE3MTIsIDE3MTcsICAgNjIsIDE3MDMsICAgNjEsICAgNjAsIDE3MDYsICAgNDcsIDE3MTAsCisgICAgIDE3MTIsIDE3MTEsICAgNDAsICAgMzksIDE3MTgsICAgMzcsIDE3MTMsIDE3MTgsIDE3MTgsIDE3MTUsCisgICAgICAgMTUsIDE3MTcsICAgMTMsICAgMTAsICAgIDcsICAgIDMsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAgIDAsIDE3MTgsIDE3MjQsICAgIDAsIDE3MjQsIDE3MjUsICAgIDAsIDE3MjUsIDE3MjUsIDE3MjUsCisgICAgIDE3MjUsIDE3MjUsIDE3MjUsIDE3MjYsICAgIDAsIDE3MjYsIDE3MjcsIDE3MjcsIDE3MjcsIDE3MjgsCisgICAgIDE3MjgsIDE3MjgsIDE3MjksIDE3MjksIDE3MjksIDE3MzAsIDE3MzAsIDE3MzAsIDE3MzEsIDE3MzEsCiAKLSAgICAgMTY4OCwgICAgMCwgMTY3OCwgMTY5MSwgMTY4NiwgMTY4MCwgMTY5MiwgMTY5MywgICAgMCwgMTY5MCwKLSAgICAgMTY4NSwgMTY4MSwgMTY5NiwgMTY5NSwgMTY5NywgMTY5OSwgICAgMCwgICAgMCwgMTY4OCwgMTY4NiwKLSAgICAgMTY4NiwgMTY5MSwgMTcwMiwgICAgMCwgMTY5MiwgMTY5MywgMTY5MCwgMTcwNCwgMTcwOCwgMTY4OCwKLSAgICAgMTY5NiwgMTY5NSwgMTY5NywgMTY5OSwgMTY5MywgMTY5MSwgMTcwNSwgMTcxMSwgMTcxNiwgICAgMCwKLSAgICAgMTcwMiwgMTY5NiwgMTY5OSwgMTY5MiwgMTY5NSwgMTcwNCwgMTcwOCwgMTcxNSwgMTcyMCwgMTcxNywKLSAgICAgMTcyMiwgICAgMCwgMTY5NywgICAgMCwgMTcwNSwgMTcxMSwgMTcxNiwgMTcwMiwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgMTcwOCwgMTcwNCwgMTcxNSwgMTcyMCwgMTcxNywgMTcyMiwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgMTcwNSwgICAgMCwgMTcxMSwgMTcxNiwgMTcxNywgMTcyMywgICAgMCwgICAgMCwKLSAgICAgMTcyMywgMTcyMywgICAgMCwgMTcxNSwgICAgMCwgMTcyMCwgICAgMCwgMTcyMiwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgMTcyMywgMTcyOSwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgMTczMSwgMTczMiwgMTczMiwgMTczMiwgMTczMywgMTczMywgMTczMywgMTczNCwgMTczNCwgMTczNCwKKyAgICAgMTczNSwgMTczNSwgMTczNSwgMTczNiwgICAgMCwgMTczNiwgMTczNywgMTczNywgMTczNywgMTczOCwKKyAgICAgMTczOCwgMTczOCwgMTczOSwgMTczOSwgMTczOSwgMTc0MCwgMTc0MCwgMTc0MCwgMTc0MSwgICAgMCwKKyAgICAgMTc0MSwgMTc0MiwgMTc0MiwgMTc0MiwgMTc0MywgMTc0MywgICAgMCwgICAgMCwgMTc0MywgMTc0NCwKKyAgICAgMTc0NCwgMTc0NCwgMTc0NSwgMTc0NSwgMTc0NSwgMTc0NiwgMTc0NiwgMTc0NiwgMTc0NywgMTc0NywKKyAgICAgMTc0NywgMTc0OCwgMTc0OCwgMTc0OCwgMTc0OSwgMTc0OSwgMTc0OSwgMTc1MCwgMTc1MCwgMTc1MCwKKyAgICAgMTc1MSwgMTc1MSwgMTc1MSwgMTc1MiwgMTc1MiwgMTc1MiwgMTc1MywgMTc1MywgICAgMCwgICAgMCwKKyAgICAgMTc1MywgMTc1NCwgMTc1NCwgMTc1NCwgMTc1NSwgMTc1NSwgMTc1NSwgMTc1NiwgICAgMCwgMTc1NiwKKyAgICAgMTc1NywgMTc1NywgMTc1NywgMTc1OCwgMTc1OCwgMTc1OCwgMTc1OSwgICAgMCwgMTc1OSwgMTc2MCwKKyAgICAgMTc2MCwgMTc2MCwgMTc2MSwgMTc2MSwgMTc2MSwgMTc2MiwgMTc2MiwgMTc2MiwgMTc2MywgMTc2MywKIAotICAgICAgICAwLCAxNzI5LCAxNzI5LCAxNzI5LCAxNzMwLCAgICAwLCAxNzMwLCAxNzMwLCAxNzMwLCAxNzMwLAotICAgICAxNzMwLCAxNzMwLCAxNzMwLCAxNzMxLCAgICAwLCAxNzMxLCAxNzMyLCAxNzMyLCAxNzMyLCAxNzMzLAotICAgICAxNzMzLCAxNzMzLCAxNzM0LCAxNzM0LCAxNzM0LCAxNzM1LCAxNzM1LCAxNzM1LCAxNzM2LCAxNzM2LAotICAgICAxNzM2LCAxNzM3LCAxNzM3LCAxNzM3LCAxNzM4LCAxNzM4LCAxNzM4LCAxNzM5LCAxNzM5LCAxNzM5LAotICAgICAxNzQwLCAxNzQwLCAxNzQwLCAxNzQxLCAgICAwLCAxNzQxLCAxNzQyLCAxNzQyLCAxNzQyLCAxNzQzLAotICAgICAxNzQzLCAxNzQzLCAxNzQ0LCAxNzQ0LCAxNzQ0LCAxNzQ1LCAxNzQ1LCAxNzQ1LCAxNzQ2LCAgICAwLAotICAgICAxNzQ2LCAxNzQ3LCAxNzQ3LCAxNzQ3LCAxNzQ4LCAxNzQ4LCAgICAwLCAgICAwLCAxNzQ4LCAxNzQ5LAotICAgICAxNzQ5LCAxNzQ5LCAxNzUwLCAxNzUwLCAxNzUwLCAxNzUxLCAxNzUxLCAxNzUxLCAxNzUyLCAxNzUyLAotICAgICAxNzUyLCAxNzUzLCAxNzUzLCAxNzUzLCAxNzU0LCAxNzU0LCAxNzU0LCAxNzU1LCAxNzU1LCAxNzU1LAotICAgICAxNzU2LCAxNzU2LCAxNzU2LCAxNzU3LCAxNzU3LCAxNzU3LCAxNzU4LCAxNzU4LCAgICAwLCAgICAwLAorICAgICAxNzYzLCAxNzY0LCAxNzY0LCAxNzY0LCAxNzY1LCAgICAwLCAxNzY1LCAxNzY2LCAgICAwLCAxNzY2LAorICAgICAxNzY3LCAxNzY3LCAxNzY3LCAxNzY4LCAxNzY4LCAxNzY4LCAxNzY5LCAgICAwLCAxNzY5LCAxNzcwLAorICAgICAxNzcwLCAgICAwLCAgICAwLCAxNzcwLCAxNzcxLCAxNzcxLCAgICAwLCAgICAwLCAxNzcxLCAxNzcyLAorICAgICAxNzcyLCAxNzcyLCAxNzczLCAxNzczLCAxNzczLCAxNzc0LCAxNzc0LCAgICAwLCAxNzc0LCAxNzc1LAorICAgICAxNzc1LCAxNzc1LCAxNzc2LCAxNzc2LCAxNzc2LCAxNzc3LCAxNzc3LCAxNzc3LCAxNzc4LCAxNzc4LAorICAgICAxNzc4LCAxNzc5LCAxNzc5LCAxNzc5LCAxNzgwLCAxNzgwLCAxNzgwLCAxNzgxLCAxNzgxLCAxNzgxLAorICAgICAxNzgyLCAxNzgyLCAgICAwLCAgICAwLCAxNzgyLCAxNzgzLCAxNzgzLCAxNzgzLCAxNzg0LCAxNzg0LAorICAgICAxNzg0LCAxNzg1LCAxNzg1LCAgICAwLCAxNzg1LCAxNzg2LCAxNzg2LCAgICAwLCAgICAwLCAxNzg2LAorICAgICAxNzg3LCAxNzg3LCAgICAwLCAxNzg3LCAxNzg4LCAxNzg4LCAxNzg5LCAxNzg5LCAgICAwLCAgICAwLAorICAgICAxNzg5LCAxNzkwLCAxNzkwLCAxNzkwLCAxNzkxLCAxNzkxLCAxNzkxLCAxNzkyLCAxNzkyLCAgICAwLAogCi0gICAgIDE3NTgsIDE3NTksIDE3NTksIDE3NTksIDE3NjAsIDE3NjAsIDE3NjAsIDE3NjEsICAgIDAsIDE3NjEsCi0gICAgIDE3NjIsIDE3NjIsIDE3NjIsIDE3NjMsIDE3NjMsIDE3NjMsIDE3NjQsICAgIDAsIDE3NjQsIDE3NjUsCi0gICAgIDE3NjUsIDE3NjUsIDE3NjYsIDE3NjYsIDE3NjYsIDE3NjcsIDE3NjcsIDE3NjcsIDE3NjgsIDE3NjgsCi0gICAgIDE3NjgsIDE3NjksIDE3NjksIDE3NjksIDE3NzAsICAgIDAsIDE3NzAsIDE3NzEsICAgIDAsIDE3NzEsCi0gICAgIDE3NzIsIDE3NzIsIDE3NzIsIDE3NzMsIDE3NzMsIDE3NzMsIDE3NzQsICAgIDAsIDE3NzQsIDE3NzUsCi0gICAgIDE3NzUsICAgIDAsICAgIDAsIDE3NzUsIDE3NzYsIDE3NzYsICAgIDAsICAgIDAsIDE3NzYsIDE3NzcsCi0gICAgIDE3NzcsIDE3NzcsIDE3NzgsIDE3NzgsIDE3NzgsIDE3NzksIDE3NzksICAgIDAsIDE3NzksIDE3ODAsCi0gICAgIDE3ODAsIDE3ODAsIDE3ODEsIDE3ODEsIDE3ODEsIDE3ODIsIDE3ODIsIDE3ODIsIDE3ODMsIDE3ODMsCi0gICAgIDE3ODMsIDE3ODQsIDE3ODQsIDE3ODQsIDE3ODUsIDE3ODUsIDE3ODUsIDE3ODYsIDE3ODYsIDE3ODYsCi0gICAgIDE3ODcsIDE3ODcsICAgIDAsICAgIDAsIDE3ODcsIDE3ODgsIDE3ODgsIDE3ODgsIDE3ODksIDE3ODksCisgICAgIDE3OTIsIDE3OTMsICAgIDAsIDE3OTMsIDE3OTQsICAgIDAsIDE3OTQsIDE3OTUsIDE3OTUsIDE3OTUsCisgICAgIDE3OTYsIDE3OTYsIDE3OTYsIDE3OTcsICAgIDAsIDE3OTcsIDE3OTgsIDE3OTgsIDE3OTgsIDE3OTksCisgICAgIDE3OTksIDE3OTksIDE4MDAsIDE4MDAsIDE4MDAsIDE4MDEsIDE4MDEsIDE4MDEsIDE4MDIsIDE4MDIsCisgICAgIDE4MDIsIDE4MDMsIDE4MDMsIDE4MDMsIDE4MDQsICAgIDAsIDE4MDQsIDE4MDUsICAgIDAsIDE4MDUsCisgICAgIDE4MDYsIDE4MDYsIDE4MDYsIDE4MDcsIDE4MDcsIDE4MDcsIDE4MDgsICAgIDAsIDE4MDgsIDE4MDksCisgICAgICAgIDAsIDE4MDksIDE4MTAsICAgIDAsIDE4MTAsIDE4MTEsIDE4MTEsIDE4MTEsIDE4MTIsIDE4MTIsCisgICAgIDE4MTIsIDE4MTMsICAgIDAsIDE4MTMsIDE4MTQsICAgIDAsICAgIDAsIDE4MTQsIDE4MTUsIDE4MTUsCisgICAgICAgIDAsIDE4MTUsIDE4MTYsIDE4MTYsICAgIDAsICAgIDAsIDE4MTYsIDE4MTcsIDE4MTcsICAgIDAsCisgICAgIDE4MTcsIDE4MTgsIDE4MTgsIDE4MTksIDE4MTksICAgIDAsICAgIDAsIDE4MTksIDE4MjAsIDE4MjAsCisgICAgIDE4MjAsIDE4MjEsIDE4MjEsIDE4MjEsIDE4MjIsIDE4MjIsICAgIDAsIDE4MjIsIDE4MjMsIDE4MjMsCiAKLSAgICAgMTc4OSwgMTc5MCwgMTc5MCwgICAgMCwgMTc5MCwgMTc5MSwgMTc5MSwgICAgMCwgICAgMCwgMTc5MSwKLSAgICAgMTc5MiwgMTc5MiwgICAgMCwgMTc5MiwgMTc5MywgMTc5MywgMTc5NCwgMTc5NCwgICAgMCwgICAgMCwKLSAgICAgMTc5NCwgMTc5NSwgMTc5NSwgMTc5NSwgMTc5NiwgMTc5NiwgMTc5NiwgMTc5NywgMTc5NywgICAgMCwKLSAgICAgMTc5NywgMTc5OCwgICAgMCwgMTc5OCwgMTc5OSwgICAgMCwgMTc5OSwgMTgwMCwgMTgwMCwgMTgwMCwKLSAgICAgMTgwMSwgMTgwMSwgMTgwMSwgMTgwMiwgICAgMCwgMTgwMiwgMTgwMywgMTgwMywgMTgwMywgMTgwNCwKLSAgICAgMTgwNCwgMTgwNCwgMTgwNSwgMTgwNSwgMTgwNSwgMTgwNiwgMTgwNiwgMTgwNiwgMTgwNywgMTgwNywKLSAgICAgMTgwNywgMTgwOCwgMTgwOCwgMTgwOCwgMTgwOSwgICAgMCwgMTgwOSwgMTgxMCwgICAgMCwgMTgxMCwKLSAgICAgMTgxMSwgMTgxMSwgMTgxMSwgMTgxMiwgMTgxMiwgMTgxMiwgMTgxMywgICAgMCwgMTgxMywgMTgxNCwKLSAgICAgICAgMCwgMTgxNCwgMTgxNSwgICAgMCwgMTgxNSwgMTgxNiwgMTgxNiwgMTgxNiwgMTgxNywgMTgxNywKLSAgICAgMTgxNywgMTgxOCwgICAgMCwgMTgxOCwgMTgxOSwgICAgMCwgICAgMCwgMTgxOSwgMTgyMCwgMTgyMCwKKyAgICAgMTgyMywgICAgMCwgMTgyMywgMTgyMywgMTgyNCwgMTgyNCwgMTgyNCwgMTgyNSwgMTgyNSwgMTgyNSwKKyAgICAgMTgyNiwgMTgyNiwgMTgyNiwgMTgyNywgMTgyNywgMTgyNywgMTgyOCwgMTgyOCwgMTgyOCwgMTgyOSwKKyAgICAgMTgyOSwgMTgyOSwgMTgzMCwgMTgzMCwgMTgzMCwgMTgzMSwgMTgzMSwgMTgzMSwgMTgzMiwgMTgzMiwKKyAgICAgICAgMCwgICAgMCwgMTgzMiwgMTgzMywgMTgzMywgMTgzMywgMTgzNCwgMTgzNCwgMTgzNCwgMTgzNSwKKyAgICAgMTgzNSwgICAgMCwgMTgzNSwgMTgzNiwgMTgzNiwgICAgMCwgICAgMCwgMTgzNiwgMTgzNywgMTgzNywKKyAgICAgICAgMCwgMTgzNywgMTgzOCwgMTgzOCwgMTgzOSwgMTgzOSwgICAgMCwgICAgMCwgMTgzOSwgMTg0MCwKKyAgICAgMTg0MCwgMTg0MCwgMTg0MSwgMTg0MSwgMTg0MSwgMTg0MiwgMTg0MiwgICAgMCwgMTg0MiwgMTg0MywKKyAgICAgICAgMCwgICAgMCwgMTg0MywgMTg0NCwgMTg0NCwgICAgMCwgMTg0NCwgMTg0NSwgMTg0NSwgICAgMCwKKyAgICAgICAgMCwgMTg0NSwgMTg0NiwgMTg0NiwgICAgMCwgMTg0NiwgMTg0NywgMTg0NywgMTg0OCwgMTg0OCwKKyAgICAgICAgMCwgICAgMCwgMTg0OCwgMTg0OSwgMTg0OSwgMTg0OSwgMTg1MCwgMTg1MCwgMTg1MCwgMTg1MSwKIAotICAgICAgICAwLCAxODIwLCAxODIxLCAxODIxLCAgICAwLCAgICAwLCAxODIxLCAxODIyLCAxODIyLCAgICAwLAotICAgICAxODIyLCAxODIzLCAxODIzLCAxODI0LCAxODI0LCAgICAwLCAgICAwLCAxODI0LCAxODI1LCAxODI1LAotICAgICAxODI1LCAxODI2LCAxODI2LCAxODI2LCAxODI3LCAxODI3LCAgICAwLCAxODI3LCAxODI4LCAxODI4LAotICAgICAxODI4LCAgICAwLCAxODI4LCAxODI4LCAxODI5LCAxODI5LCAxODI5LCAxODMwLCAxODMwLCAxODMwLAotICAgICAxODMxLCAxODMxLCAxODMxLCAxODMyLCAxODMyLCAxODMyLCAxODMzLCAxODMzLCAxODMzLCAxODM0LAotICAgICAxODM0LCAxODM0LCAxODM1LCAxODM1LCAxODM1LCAxODM2LCAxODM2LCAxODM2LCAxODM3LCAxODM3LAotICAgICAgICAwLCAgICAwLCAxODM3LCAxODM4LCAxODM4LCAxODM4LCAxODM5LCAxODM5LCAxODM5LCAxODQwLAotICAgICAxODQwLCAgICAwLCAxODQwLCAxODQxLCAxODQxLCAgICAwLCAgICAwLCAxODQxLCAxODQyLCAxODQyLAotICAgICAgICAwLCAxODQyLCAxODQzLCAxODQzLCAxODQ0LCAxODQ0LCAgICAwLCAgICAwLCAxODQ0LCAxODQ1LAotICAgICAxODQ1LCAxODQ1LCAxODQ2LCAxODQ2LCAxODQ2LCAxODQ3LCAxODQ3LCAgICAwLCAxODQ3LCAxODQ4LAorICAgICAxODUxLCAgICAwLCAxODUxLCAxODUyLCAgICAwLCAxODUyLCAxODUzLCAgICAwLCAxODUzLCAxODU0LAorICAgICAgICAwLCAxODU0LCAxODU1LCAxODU1LCAxODU1LCAxODU2LCAxODU2LCAxODU2LCAxODU3LCAgICAwLAorICAgICAxODU3LCAxODU4LCAxODU4LCAxODU4LCAgICAwLCAxODU4LCAxODU4LCAxODU5LCAxODU5LCAxODU5LAorICAgICAxODYwLCAxODYwLCAxODYwLCAxODYxLCAxODYxLCAxODYxLCAxODYyLCAxODYyLCAxODYyLCAxODYzLAorICAgICAxODYzLCAxODYzLCAxODY0LCAxODY0LCAxODY0LCAxODY1LCAxODY1LCAxODY1LCAxODY2LCAgICAwLAorICAgICAxODY2LCAxODY3LCAgICAwLCAxODY3LCAxODY4LCAxODY4LCAxODY4LCAxODY5LCAxODY5LCAxODY5LAorICAgICAxODcwLCAgICAwLCAxODcwLCAxODcxLCAgICAwLCAxODcxLCAxODcyLCAgICAwLCAxODcyLCAxODczLAorICAgICAxODczLCAxODczLCAxODc0LCAxODc0LCAxODc0LCAxODc1LCAgICAwLCAxODc1LCAxODc2LCAgICAwLAorICAgICAxODc2LCAxODc3LCAgICAwLCAxODc3LCAxODc4LCAgICAwLCAxODc4LCAxODc5LCAxODc5LCAxODc5LAorICAgICAxODgwLCAxODgwLCAxODgwLCAxODgxLCAgICAwLCAxODgxLCAxODgyLCAgICAwLCAxODgyLCAxODgzLAogCi0gICAgICAgIDAsICAgIDAsIDE4NDgsIDE4NDksIDE4NDksICAgIDAsIDE4NDksIDE4NTAsIDE4NTAsICAgIDAsCi0gICAgICAgIDAsIDE4NTAsIDE4NTEsIDE4NTEsICAgIDAsIDE4NTEsIDE4NTIsIDE4NTIsIDE4NTMsIDE4NTMsCi0gICAgICAgIDAsICAgIDAsIDE4NTMsIDE4NTQsIDE4NTQsIDE4NTQsIDE4NTUsIDE4NTUsIDE4NTUsIDE4NTYsCi0gICAgIDE4NTYsICAgIDAsIDE4NTYsIDE4NTcsICAgIDAsIDE4NTcsIDE4NTgsICAgIDAsIDE4NTgsIDE4NTksCi0gICAgICAgIDAsIDE4NTksIDE4NjAsIDE4NjAsIDE4NjAsIDE4NjEsIDE4NjEsIDE4NjEsIDE4NjIsICAgIDAsCi0gICAgIDE4NjIsIDE4NjMsIDE4NjMsIDE4NjMsICAgIDAsIDE4NjMsIDE4NjMsIDE4NjQsIDE4NjQsIDE4NjQsCi0gICAgIDE4NjUsIDE4NjUsIDE4NjUsIDE4NjYsIDE4NjYsIDE4NjYsIDE4NjcsIDE4NjcsIDE4NjcsIDE4NjgsCi0gICAgIDE4NjgsIDE4NjgsIDE4NjksIDE4NjksIDE4NjksIDE4NzAsIDE4NzAsIDE4NzAsIDE4NzEsICAgIDAsCi0gICAgIDE4NzEsIDE4NzIsICAgIDAsIDE4NzIsIDE4NzMsIDE4NzMsIDE4NzMsIDE4NzQsIDE4NzQsIDE4NzQsCi0gICAgIDE4NzUsICAgIDAsIDE4NzUsIDE4NzYsICAgIDAsIDE4NzYsIDE4NzcsICAgIDAsIDE4NzcsIDE4NzgsCisgICAgICAgIDAsICAgIDAsIDE4ODMsIDE4ODQsIDE4ODQsICAgIDAsIDE4ODQsIDE4ODUsIDE4ODUsICAgIDAsCisgICAgICAgIDAsIDE4ODUsIDE4ODYsIDE4ODYsICAgIDAsIDE4ODYsIDE4ODcsIDE4ODcsIDE4ODgsIDE4ODgsCisgICAgICAgIDAsICAgIDAsIDE4ODgsIDE4ODksIDE4ODksIDE4ODksIDE4OTAsIDE4OTAsIDE4OTAsIDE4OTEsCisgICAgIDE4OTEsICAgIDAsIDE4OTEsIDE4OTIsIDE4OTIsIDE4OTIsICAgIDAsIDE4OTIsIDE4OTIsIDE4OTMsCisgICAgIDE4OTMsIDE4OTMsIDE4OTQsIDE4OTQsIDE4OTQsIDE4OTUsIDE4OTUsIDE4OTUsIDE4OTYsIDE4OTYsCisgICAgIDE4OTYsIDE4OTcsIDE4OTcsIDE4OTcsIDE4OTgsIDE4OTgsIDE4OTgsIDE4OTksIDE4OTksIDE4OTksCisgICAgIDE5MDAsIDE5MDAsIDE5MDAsIDE5MDEsIDE5MDEsICAgIDAsICAgIDAsIDE5MDEsIDE5MDIsIDE5MDIsCisgICAgIDE5MDIsIDE5MDMsIDE5MDMsIDE5MDMsIDE5MDQsIDE5MDQsICAgIDAsIDE5MDQsIDE5MDUsIDE5MDUsCisgICAgICAgIDAsICAgIDAsIDE5MDUsIDE5MDYsIDE5MDYsICAgIDAsIDE5MDYsIDE5MDcsIDE5MDcsIDE5MDgsCisgICAgIDE5MDgsICAgIDAsICAgIDAsIDE5MDgsIDE5MDksIDE5MDksIDE5MDksIDE5MTAsIDE5MTAsIDE5MTAsCiAKLSAgICAgMTg3OCwgMTg3OCwgMTg3OSwgMTg3OSwgMTg3OSwgMTg4MCwgICAgMCwgMTg4MCwgMTg4MSwgICAgMCwKLSAgICAgMTg4MSwgMTg4MiwgICAgMCwgMTg4MiwgMTg4MywgICAgMCwgMTg4MywgMTg4NCwgMTg4NCwgMTg4NCwKLSAgICAgMTg4NSwgMTg4NSwgMTg4NSwgMTg4NiwgICAgMCwgMTg4NiwgMTg4NywgICAgMCwgMTg4NywgMTg4OCwKLSAgICAgICAgMCwgICAgMCwgMTg4OCwgMTg4OSwgMTg4OSwgICAgMCwgMTg4OSwgMTg5MCwgMTg5MCwgICAgMCwKLSAgICAgICAgMCwgMTg5MCwgMTg5MSwgMTg5MSwgICAgMCwgMTg5MSwgMTg5MiwgMTg5MiwgMTg5MywgMTg5MywKLSAgICAgICAgMCwgICAgMCwgMTg5MywgMTg5NCwgMTg5NCwgMTg5NCwgMTg5NSwgMTg5NSwgMTg5NSwgMTg5NiwKLSAgICAgMTg5NiwgICAgMCwgMTg5NiwgMTg5NywgMTg5NywgMTg5NywgICAgMCwgMTg5NywgMTg5NywgMTg5OCwKLSAgICAgMTg5OCwgMTg5OCwgMTg5OSwgMTg5OSwgMTg5OSwgMTkwMCwgMTkwMCwgMTkwMCwgMTkwMSwgMTkwMSwKLSAgICAgMTkwMSwgMTkwMiwgMTkwMiwgMTkwMiwgMTkwMywgMTkwMywgMTkwMywgMTkwNCwgMTkwNCwgMTkwNCwKLSAgICAgMTkwNSwgMTkwNSwgMTkwNSwgMTkwNiwgMTkwNiwgICAgMCwgICAgMCwgMTkwNiwgMTkwNywgMTkwNywKKyAgICAgMTkxMSwgMTkxMSwgICAgMCwgMTkxMSwgMTkxMiwgICAgMCwgICAgMCwgMTkxMiwgMTkxMywgMTkxMywKKyAgICAgICAgMCwgMTkxMywgMTkxNCwgMTkxNCwgICAgMCwgICAgMCwgMTkxNCwgMTkxNSwgMTkxNSwgICAgMCwKKyAgICAgMTkxNSwgMTkxNiwgMTkxNiwgMTkxNywgMTkxNywgICAgMCwgICAgMCwgMTkxNywgMTkxOCwgMTkxOCwKKyAgICAgMTkxOCwgMTkxOSwgMTkxOSwgMTkxOSwgMTkyMCwgMTkyMCwgICAgMCwgMTkyMCwgMTkyMSwgICAgMCwKKyAgICAgMTkyMSwgMTkyMiwgICAgMCwgICAgMCwgMTkyMiwgMTkyMywgMTkyMywgICAgMCwgMTkyMywgMTkyNCwKKyAgICAgMTkyNCwgICAgMCwgICAgMCwgMTkyNCwgMTkyNSwgMTkyNSwgICAgMCwgMTkyNSwgMTkyNiwgMTkyNiwKKyAgICAgMTkyNywgMTkyNywgICAgMCwgICAgMCwgMTkyNywgMTkyOCwgMTkyOCwgMTkyOCwgMTkyOSwgMTkyOSwKKyAgICAgMTkyOSwgMTkzMCwgMTkzMCwgICAgMCwgMTkzMCwgMTkzMSwgICAgMCwgMTkzMSwgMTkzMiwgICAgMCwKKyAgICAgMTkzMiwgMTkzMywgICAgMCwgMTkzMywgMTkzNCwgMTkzNCwgMTkzNCwgMTkzNSwgMTkzNSwgMTkzNSwKKyAgICAgMTkzNiwgICAgMCwgMTkzNiwgMTkzNywgMTkzNywgMTkzNywgICAgMCwgMTkzNywgMTkzNywgMTkzOCwKIAotICAgICAxOTA3LCAxOTA4LCAxOTA4LCAxOTA4LCAxOTA5LCAxOTA5LCAgICAwLCAxOTA5LCAxOTEwLCAxOTEwLAotICAgICAgICAwLCAgICAwLCAxOTEwLCAxOTExLCAxOTExLCAgICAwLCAxOTExLCAxOTEyLCAxOTEyLCAxOTEzLAotICAgICAxOTEzLCAgICAwLCAgICAwLCAxOTEzLCAxOTE0LCAxOTE0LCAxOTE0LCAxOTE1LCAxOTE1LCAxOTE1LAotICAgICAxOTE2LCAxOTE2LCAgICAwLCAxOTE2LCAxOTE3LCAgICAwLCAgICAwLCAxOTE3LCAxOTE4LCAxOTE4LAotICAgICAgICAwLCAxOTE4LCAxOTE5LCAxOTE5LCAgICAwLCAgICAwLCAxOTE5LCAxOTIwLCAxOTIwLCAgICAwLAotICAgICAxOTIwLCAxOTIxLCAxOTIxLCAxOTIyLCAxOTIyLCAgICAwLCAgICAwLCAxOTIyLCAxOTIzLCAxOTIzLAotICAgICAxOTIzLCAxOTI0LCAxOTI0LCAxOTI0LCAxOTI1LCAxOTI1LCAgICAwLCAxOTI1LCAxOTI2LCAgICAwLAotICAgICAxOTI2LCAxOTI3LCAgICAwLCAgICAwLCAxOTI3LCAxOTI4LCAxOTI4LCAgICAwLCAxOTI4LCAxOTI5LAotICAgICAxOTI5LCAgICAwLCAgICAwLCAxOTI5LCAxOTMwLCAxOTMwLCAgICAwLCAxOTMwLCAxOTMxLCAxOTMxLAotICAgICAxOTMyLCAxOTMyLCAgICAwLCAgICAwLCAxOTMyLCAxOTMzLCAxOTMzLCAxOTMzLCAxOTM0LCAxOTM0LAorICAgICAxOTM4LCAxOTM4LCAxOTM5LCAxOTM5LCAxOTM5LCAxOTQwLCAxOTQwLCAxOTQwLCAxOTQxLCAxOTQxLAorICAgICAxOTQxLCAxOTQyLCAxOTQyLCAxOTQyLCAxOTQzLCAxOTQzLCAxOTQzLCAxOTQ0LCAxOTQ0LCAxOTQ0LAorICAgICAxOTQ1LCAxOTQ1LCAxOTQ1LCAxOTQ2LCAxOTQ2LCAxOTQ2LCAxOTQ3LCAxOTQ3LCAxOTQ3LCAxOTQ4LAorICAgICAgICAwLCAxOTQ4LCAxOTQ5LCAgICAwLCAxOTQ5LCAxOTUwLCAxOTUwLCAxOTUwLCAxOTUxLCAxOTUxLAorICAgICAxOTUxLCAxOTUyLCAxOTUyLCAxOTUyLCAxOTUzLCAgICAwLCAxOTUzLCAxOTU0LCAgICAwLCAxOTU0LAorICAgICAxOTU1LCAgICAwLCAxOTU1LCAxOTU2LCAxOTU2LCAxOTU2LCAxOTU3LCAxOTU3LCAxOTU3LCAxOTU4LAorICAgICAxOTU4LCAxOTU4LCAxOTU5LCAgICAwLCAxOTU5LCAxOTYwLCAgICAwLCAxOTYwLCAxOTYxLCAgICAwLAorICAgICAxOTYxLCAxOTYyLCAgICAwLCAxOTYyLCAxOTYzLCAxOTYzLCAxOTYzLCAxOTY0LCAxOTY0LCAxOTY0LAorICAgICAxOTY1LCAxOTY1LCAxOTY1LCAxOTY2LCAgICAwLCAxOTY2LCAxOTY3LCAgICAwLCAxOTY3LCAxOTY4LAorICAgICAgICAwLCAxOTY4LCAxOTY5LCAgICAwLCAxOTY5LCAxOTcwLCAxOTcwLCAxOTcwLCAxOTcxLCAxOTcxLAogCi0gICAgIDE5MzQsIDE5MzUsIDE5MzUsICAgIDAsIDE5MzUsIDE5MzYsICAgIDAsIDE5MzYsIDE5MzcsICAgIDAsCi0gICAgIDE5MzcsIDE5MzgsICAgIDAsIDE5MzgsIDE5MzksIDE5MzksIDE5MzksIDE5NDAsIDE5NDAsIDE5NDAsCi0gICAgIDE5NDEsICAgIDAsIDE5NDEsIDE5NDIsIDE5NDIsIDE5NDIsICAgIDAsIDE5NDIsIDE5NDIsIDE5NDMsCi0gICAgIDE5NDMsIDE5NDMsIDE5NDQsIDE5NDQsIDE5NDQsIDE5NDUsIDE5NDUsIDE5NDUsIDE5NDYsIDE5NDYsCi0gICAgIDE5NDYsIDE5NDcsIDE5NDcsIDE5NDcsIDE5NDgsIDE5NDgsIDE5NDgsIDE5NDksIDE5NDksIDE5NDksCi0gICAgIDE5NTAsIDE5NTAsIDE5NTAsIDE5NTEsIDE5NTEsIDE5NTEsIDE5NTIsIDE5NTIsIDE5NTIsIDE5NTMsCi0gICAgICAgIDAsIDE5NTMsIDE5NTQsICAgIDAsIDE5NTQsIDE5NTUsIDE5NTUsIDE5NTUsIDE5NTYsIDE5NTYsCi0gICAgIDE5NTYsIDE5NTcsIDE5NTcsIDE5NTcsIDE5NTgsICAgIDAsIDE5NTgsIDE5NTksICAgIDAsIDE5NTksCi0gICAgIDE5NjAsICAgIDAsIDE5NjAsIDE5NjEsIDE5NjEsIDE5NjEsIDE5NjIsIDE5NjIsIDE5NjIsIDE5NjMsCi0gICAgIDE5NjMsIDE5NjMsIDE5NjQsICAgIDAsIDE5NjQsIDE5NjUsICAgIDAsIDE5NjUsIDE5NjYsICAgIDAsCisgICAgIDE5NzEsIDE5NzIsIDE5NzIsIDE5NzIsIDE5NzMsICAgIDAsIDE5NzMsIDE5NzQsICAgIDAsIDE5NzQsCisgICAgIDE5NzUsICAgIDAsICAgIDAsIDE5NzUsIDE5NzYsIDE5NzYsICAgIDAsIDE5NzYsIDE5NzcsIDE5NzcsCisgICAgICAgIDAsICAgIDAsIDE5NzcsIDE5NzgsIDE5NzgsICAgIDAsIDE5NzgsIDE5NzksIDE5NzksIDE5ODAsCisgICAgIDE5ODAsICAgIDAsICAgIDAsIDE5ODAsIDE5ODEsIDE5ODEsIDE5ODEsIDE5ODIsIDE5ODIsIDE5ODIsCisgICAgIDE5ODMsIDE5ODMsICAgIDAsIDE5ODMsIDE5ODQsIDE5ODQsIDE5ODQsICAgIDAsIDE5ODQsIDE5ODQsCisgICAgIDE5ODUsIDE5ODUsIDE5ODUsIDE5ODYsIDE5ODYsIDE5ODYsIDE5ODcsIDE5ODcsIDE5ODcsIDE5ODgsCisgICAgIDE5ODgsIDE5ODgsIDE5ODksIDE5ODksIDE5ODksIDE5OTAsIDE5OTAsIDE5OTAsIDE5OTEsIDE5OTEsCisgICAgIDE5OTEsIDE5OTIsIDE5OTIsIDE5OTIsIDE5OTMsICAgIDAsIDE5OTMsIDE5OTQsIDE5OTQsIDE5OTQsCisgICAgIDE5OTUsIDE5OTUsICAgIDAsICAgIDAsIDE5OTUsIDE5OTYsIDE5OTYsIDE5OTYsIDE5OTcsIDE5OTcsCisgICAgIDE5OTcsIDE5OTgsIDE5OTgsICAgIDAsIDE5OTgsIDE5OTksIDE5OTksICAgIDAsICAgIDAsIDE5OTksCiAKLSAgICAgMTk2NiwgMTk2NywgICAgMCwgMTk2NywgMTk2OCwgMTk2OCwgMTk2OCwgMTk2OSwgMTk2OSwgMTk2OSwKLSAgICAgMTk3MCwgMTk3MCwgMTk3MCwgMTk3MSwgICAgMCwgMTk3MSwgMTk3MiwgICAgMCwgMTk3MiwgMTk3MywKLSAgICAgICAgMCwgMTk3MywgMTk3NCwgICAgMCwgMTk3NCwgMTk3NSwgMTk3NSwgMTk3NSwgMTk3NiwgMTk3NiwKLSAgICAgMTk3NiwgMTk3NywgMTk3NywgMTk3NywgMTk3OCwgICAgMCwgMTk3OCwgMTk3OSwgICAgMCwgMTk3OSwKLSAgICAgMTk4MCwgICAgMCwgICAgMCwgMTk4MCwgMTk4MSwgMTk4MSwgICAgMCwgMTk4MSwgMTk4MiwgMTk4MiwKLSAgICAgICAgMCwgICAgMCwgMTk4MiwgMTk4MywgMTk4MywgICAgMCwgMTk4MywgMTk4NCwgMTk4NCwgMTk4NSwKLSAgICAgMTk4NSwgICAgMCwgICAgMCwgMTk4NSwgMTk4NiwgMTk4NiwgMTk4NiwgMTk4NywgMTk4NywgMTk4NywKLSAgICAgMTk4OCwgMTk4OCwgICAgMCwgMTk4OCwgMTk4OSwgMTk4OSwgMTk4OSwgICAgMCwgMTk4OSwgMTk4OSwKLSAgICAgMTk5MCwgMTk5MCwgMTk5MCwgMTk5MSwgMTk5MSwgMTk5MSwgMTk5MiwgMTk5MiwgMTk5MiwgMTk5MywKLSAgICAgMTk5MywgMTk5MywgMTk5NCwgMTk5NCwgMTk5NCwgMTk5NSwgMTk5NSwgMTk5NSwgMTk5NiwgMTk5NiwKKyAgICAgMjAwMCwgMjAwMCwgICAgMCwgMjAwMCwgMjAwMSwgMjAwMSwgMjAwMiwgMjAwMiwgICAgMCwgICAgMCwKKyAgICAgMjAwMiwgMjAwMywgMjAwMywgMjAwMywgMjAwNCwgMjAwNCwgMjAwNCwgMjAwNSwgMjAwNSwgICAgMCwKKyAgICAgMjAwNSwgMjAwNiwgICAgMCwgICAgMCwgMjAwNiwgMjAwNywgMjAwNywgICAgMCwgMjAwNywgMjAwOCwKKyAgICAgMjAwOCwgICAgMCwgICAgMCwgMjAwOCwgMjAwOSwgMjAwOSwgICAgMCwgMjAwOSwgMjAxMCwgMjAxMCwKKyAgICAgMjAxMSwgMjAxMSwgICAgMCwgICAgMCwgMjAxMSwgMjAxMiwgMjAxMiwgMjAxMiwgMjAxMywgMjAxMywKKyAgICAgMjAxMywgMjAxNCwgMjAxNCwgICAgMCwgMjAxNCwgMjAxNSwgICAgMCwgMjAxNSwgMjAxNiwgICAgMCwKKyAgICAgICAgMCwgMjAxNiwgMjAxNywgMjAxNywgICAgMCwgMjAxNywgMjAxOCwgMjAxOCwgICAgMCwgICAgMCwKKyAgICAgMjAxOCwgMjAxOSwgMjAxOSwgICAgMCwgMjAxOSwgMjAyMCwgMjAyMCwgMjAyMSwgMjAyMSwgICAgMCwKKyAgICAgICAgMCwgMjAyMSwgMjAyMiwgMjAyMiwgMjAyMiwgMjAyMywgMjAyMywgMjAyMywgMjAyNCwgMjAyNCwKKyAgICAgICAgMCwgMjAyNCwgMjAyNSwgICAgMCwgMjAyNSwgMjAyNiwgICAgMCwgICAgMCwgMjAyNiwgMjAyNywKIAotICAgICAxOTk2LCAxOTk3LCAxOTk3LCAxOTk3LCAxOTk4LCAgICAwLCAxOTk4LCAxOTk5LCAxOTk5LCAxOTk5LAotICAgICAyMDAwLCAyMDAwLCAgICAwLCAgICAwLCAyMDAwLCAyMDAxLCAyMDAxLCAyMDAxLCAyMDAyLCAyMDAyLAotICAgICAyMDAyLCAyMDAzLCAyMDAzLCAgICAwLCAyMDAzLCAyMDA0LCAyMDA0LCAgICAwLCAgICAwLCAyMDA0LAotICAgICAyMDA1LCAyMDA1LCAgICAwLCAyMDA1LCAyMDA2LCAyMDA2LCAyMDA3LCAyMDA3LCAgICAwLCAgICAwLAotICAgICAyMDA3LCAyMDA4LCAyMDA4LCAyMDA4LCAyMDA5LCAyMDA5LCAyMDA5LCAyMDEwLCAyMDEwLCAgICAwLAotICAgICAyMDEwLCAyMDExLCAgICAwLCAgICAwLCAyMDExLCAyMDEyLCAyMDEyLCAgICAwLCAyMDEyLCAyMDEzLAotICAgICAyMDEzLCAgICAwLCAgICAwLCAyMDEzLCAyMDE0LCAyMDE0LCAgICAwLCAyMDE0LCAyMDE1LCAyMDE1LAotICAgICAyMDE2LCAyMDE2LCAgICAwLCAgICAwLCAyMDE2LCAyMDE3LCAyMDE3LCAyMDE3LCAyMDE4LCAyMDE4LAotICAgICAyMDE4LCAyMDE5LCAyMDE5LCAgICAwLCAyMDE5LCAyMDIwLCAgICAwLCAyMDIwLCAyMDIxLCAgICAwLAotICAgICAgICAwLCAyMDIxLCAyMDIyLCAyMDIyLCAgICAwLCAyMDIyLCAyMDIzLCAyMDIzLCAgICAwLCAgICAwLAorICAgICAyMDI3LCAgICAwLCAyMDI3LCAyMDI4LCAyMDI4LCAgICAwLCAgICAwLCAyMDI4LCAyMDI5LCAyMDI5LAorICAgICAgICAwLCAyMDI5LCAyMDMwLCAyMDMwLCAyMDMxLCAyMDMxLCAgICAwLCAgICAwLCAyMDMxLCAyMDMyLAorICAgICAyMDMyLCAyMDMyLCAyMDMzLCAyMDMzLCAyMDMzLCAyMDM0LCAyMDM0LCAgICAwLCAyMDM0LCAyMDM1LAorICAgICAgICAwLCAyMDM1LCAyMDM2LCAgICAwLCAyMDM2LCAyMDM3LCAgICAwLCAyMDM3LCAyMDM4LCAyMDM4LAorICAgICAyMDM4LCAyMDM5LCAgICAwLCAyMDM5LCAyMDQwLCAyMDQwLCAyMDQwLCAyMDQxLCAgICAwLCAyMDQxLAorICAgICAyMDQyLCAyMDQyLCAyMDQyLCAgICAwLCAyMDQyLCAyMDQyLCAyMDQzLCAgICAwLCAyMDQzLCAyMDQ0LAorICAgICAyMDQ0LCAyMDQ0LCAyMDQ1LCAgICAwLCAyMDQ1LCAyMDQ2LCAyMDQ2LCAyMDQ2LCAyMDQ3LCAgICAwLAorICAgICAyMDQ3LCAyMDQ4LCAyMDQ4LCAyMDQ4LCAyMDQ5LCAgICAwLCAyMDQ5LCAyMDUwLCAyMDUwLCAyMDUwLAorICAgICAyMDUxLCAgICAwLCAyMDUxLCAyMDUyLCAyMDUyLCAyMDUyLCAyMDUzLCAgICAwLCAyMDUzLCAyMDU0LAorICAgICAyMDU0LCAyMDU0LCAyMDU1LCAyMDU1LCAgICAwLCAgICAwLCAyMDU1LCAyMDU2LCAyMDU2LCAyMDU2LAogCi0gICAgIDIwMjMsIDIwMjQsIDIwMjQsICAgIDAsIDIwMjQsIDIwMjUsIDIwMjUsIDIwMjYsIDIwMjYsICAgIDAsCi0gICAgICAgIDAsIDIwMjYsIDIwMjcsIDIwMjcsIDIwMjcsIDIwMjgsIDIwMjgsIDIwMjgsIDIwMjksIDIwMjksCi0gICAgICAgIDAsIDIwMjksIDIwMzAsICAgIDAsIDIwMzAsIDIwMzEsICAgIDAsICAgIDAsIDIwMzEsIDIwMzIsCi0gICAgIDIwMzIsICAgIDAsIDIwMzIsIDIwMzMsIDIwMzMsICAgIDAsICAgIDAsIDIwMzMsIDIwMzQsIDIwMzQsCi0gICAgICAgIDAsIDIwMzQsIDIwMzUsIDIwMzUsIDIwMzYsIDIwMzYsICAgIDAsICAgIDAsIDIwMzYsIDIwMzcsCi0gICAgIDIwMzcsIDIwMzcsIDIwMzgsIDIwMzgsIDIwMzgsIDIwMzksIDIwMzksICAgIDAsIDIwMzksIDIwNDAsCi0gICAgICAgIDAsIDIwNDAsIDIwNDEsICAgIDAsIDIwNDEsIDIwNDIsICAgIDAsIDIwNDIsIDIwNDMsIDIwNDMsCi0gICAgIDIwNDMsIDIwNDQsICAgIDAsIDIwNDQsIDIwNDUsIDIwNDUsIDIwNDUsIDIwNDYsICAgIDAsIDIwNDYsCi0gICAgIDIwNDcsIDIwNDcsIDIwNDcsICAgIDAsIDIwNDcsIDIwNDcsIDIwNDgsICAgIDAsIDIwNDgsIDIwNDksCi0gICAgIDIwNDksIDIwNDksIDIwNTAsICAgIDAsIDIwNTAsIDIwNTEsIDIwNTEsIDIwNTEsIDIwNTIsICAgIDAsCisgICAgIDIwNTcsIDIwNTcsIDIwNTcsIDIwNTgsIDIwNTgsIDIwNTgsIDIwNTksIDIwNTksICAgIDAsIDIwNTksCisgICAgIDIwNjAsIDIwNjAsIDIwNjAsIDIwNjEsICAgIDAsIDIwNjEsIDIwNjIsIDIwNjIsIDIwNjIsIDIwNjMsCisgICAgIDIwNjMsIDIwNjMsIDIwNjQsICAgIDAsIDIwNjQsIDIwNjUsICAgIDAsIDIwNjUsIDIwNjYsIDIwNjYsCisgICAgIDIwNjYsIDIwNjcsIDIwNjcsIDIwNjcsIDIwNjgsICAgIDAsIDIwNjgsIDIwNjksICAgIDAsIDIwNjksCisgICAgIDIwNzAsICAgIDAsIDIwNzAsIDIwNzEsIDIwNzEsIDIwNzEsIDIwNzIsIDIwNzIsIDIwNzIsIDIwNzMsCisgICAgICAgIDAsIDIwNzMsIDIwNzQsICAgIDAsIDIwNzQsIDIwNzUsICAgIDAsIDIwNzUsIDIwNzYsIDIwNzYsCisgICAgIDIwNzYsIDIwNzcsIDIwNzcsIDIwNzcsIDIwNzgsICAgIDAsIDIwNzgsIDIwNzksICAgIDAsIDIwNzksCisgICAgIDIwODAsICAgIDAsIDIwODAsIDIwODEsIDIwODEsIDIwODEsIDIwODIsIDIwODIsIDIwODIsIDIwODMsCisgICAgICAgIDAsIDIwODMsIDIwODQsICAgIDAsICAgIDAsIDIwODQsIDIwODUsIDIwODUsICAgIDAsIDIwODUsCisgICAgIDIwODYsIDIwODYsICAgIDAsICAgIDAsIDIwODYsIDIwODcsIDIwODcsICAgIDAsIDIwODcsIDIwODgsCiAKLSAgICAgMjA1MiwgMjA1MywgMjA1MywgMjA1MywgMjA1NCwgICAgMCwgMjA1NCwgMjA1NSwgMjA1NSwgMjA1NSwKLSAgICAgMjA1NiwgICAgMCwgMjA1NiwgMjA1NywgMjA1NywgMjA1NywgMjA1OCwgICAgMCwgMjA1OCwgMjA1OSwKLSAgICAgMjA1OSwgMjA1OSwgMjA2MCwgMjA2MCwgICAgMCwgICAgMCwgMjA2MCwgMjA2MSwgMjA2MSwgMjA2MSwKLSAgICAgMjA2MiwgMjA2MiwgMjA2MiwgMjA2MywgMjA2MywgMjA2MywgMjA2NCwgMjA2NCwgICAgMCwgMjA2NCwKLSAgICAgMjA2NSwgMjA2NSwgMjA2NSwgMjA2NiwgICAgMCwgMjA2NiwgMjA2NywgMjA2NywgMjA2NywgMjA2OCwKLSAgICAgMjA2OCwgMjA2OCwgMjA2OSwgICAgMCwgMjA2OSwgMjA3MCwgICAgMCwgMjA3MCwgMjA3MSwgMjA3MSwKLSAgICAgMjA3MSwgMjA3MiwgMjA3MiwgMjA3MiwgMjA3MywgICAgMCwgMjA3MywgMjA3NCwgICAgMCwgMjA3NCwKLSAgICAgMjA3NSwgICAgMCwgMjA3NSwgMjA3NiwgMjA3NiwgMjA3NiwgMjA3NywgMjA3NywgMjA3NywgMjA3OCwKLSAgICAgICAgMCwgMjA3OCwgMjA3OSwgICAgMCwgMjA3OSwgMjA4MCwgICAgMCwgMjA4MCwgMjA4MSwgMjA4MSwKLSAgICAgMjA4MSwgMjA4MiwgMjA4MiwgMjA4MiwgMjA4MywgICAgMCwgMjA4MywgMjA4NCwgICAgMCwgMjA4NCwKKyAgICAgMjA4OCwgMjA4OSwgMjA4OSwgICAgMCwgICAgMCwgMjA4OSwgMjA5MCwgMjA5MCwgMjA5MCwgMjA5MSwKKyAgICAgICAgMCwgMjA5MSwgMjA5MiwgMjA5MiwgICAgMCwgMjA5MiwgMjA5MywgMjA5MywgMjA5MywgICAgMCwKKyAgICAgMjA5MywgMjA5MywgMjA5NCwgMjA5NCwgMjA5NCwgMjA5NSwgMjA5NSwgMjA5NSwgMjA5NiwgICAgMCwKKyAgICAgMjA5NiwgMjA5NywgICAgMCwgMjA5NywgMjA5OCwgICAgMCwgMjA5OCwgMjA5OSwgICAgMCwgMjA5OSwKKyAgICAgMjEwMCwgICAgMCwgMjEwMCwgMjEwMSwgICAgMCwgMjEwMSwgMjEwMiwgICAgMCwgMjEwMiwgMjEwMywKKyAgICAgMjEwMywgMjEwMywgMjEwNCwgMjEwNCwgMjEwNCwgMjEwNSwgICAgMCwgMjEwNSwgMjEwNiwgMjEwNiwKKyAgICAgICAgMCwgICAgMCwgMjEwNiwgMjEwNywgMjEwNywgICAgMCwgMjEwNywgMjEwOCwgMjEwOCwgMjEwOSwKKyAgICAgICAgMCwgMjEwOSwgMjExMCwgICAgMCwgICAgMCwgMjExMCwgMjExMSwgMjExMSwgICAgMCwgMjExMSwKKyAgICAgMjExMiwgMjExMiwgICAgMCwgICAgMCwgMjExMiwgMjExMywgMjExMywgICAgMCwgMjExMywgMjExNCwKKyAgICAgMjExNCwgMjExNSwgICAgMCwgMjExNSwgMjExNiwgICAgMCwgMjExNiwgMjExNywgICAgMCwgICAgMCwKIAotICAgICAyMDg1LCAgICAwLCAyMDg1LCAyMDg2LCAyMDg2LCAyMDg2LCAyMDg3LCAyMDg3LCAyMDg3LCAyMDg4LAotICAgICAgICAwLCAyMDg4LCAyMDg5LCAgICAwLCAgICAwLCAyMDg5LCAyMDkwLCAyMDkwLCAgICAwLCAyMDkwLAotICAgICAyMDkxLCAyMDkxLCAgICAwLCAgICAwLCAyMDkxLCAyMDkyLCAyMDkyLCAgICAwLCAyMDkyLCAyMDkzLAotICAgICAyMDkzLCAyMDk0LCAyMDk0LCAgICAwLCAgICAwLCAyMDk0LCAyMDk1LCAyMDk1LCAyMDk1LCAyMDk2LAotICAgICAgICAwLCAyMDk2LCAyMDk3LCAyMDk3LCAgICAwLCAyMDk3LCAyMDk4LCAyMDk4LCAyMDk4LCAgICAwLAotICAgICAyMDk4LCAyMDk4LCAyMDk5LCAyMDk5LCAyMDk5LCAyMTAwLCAyMTAwLCAyMTAwLCAyMTAxLCAgICAwLAotICAgICAyMTAxLCAyMTAyLCAgICAwLCAyMTAyLCAyMTAzLCAgICAwLCAyMTAzLCAyMTA0LCAgICAwLCAyMTA0LAotICAgICAyMTA1LCAgICAwLCAyMTA1LCAyMTA2LCAgICAwLCAyMTA2LCAyMTA3LCAgICAwLCAyMTA3LCAyMTA4LAotICAgICAyMTA4LCAyMTA4LCAyMTA5LCAyMTA5LCAyMTA5LCAyMTEwLCAgICAwLCAyMTEwLCAyMTExLCAyMTExLAotICAgICAgICAwLCAgICAwLCAyMTExLCAyMTEyLCAyMTEyLCAgICAwLCAyMTEyLCAyMTEzLCAyMTEzLCAyMTE0LAorICAgICAyMTE3LCAyMTE4LCAyMTE4LCAgICAwLCAyMTE4LCAyMTE5LCAyMTE5LCAgICAwLCAgICAwLCAyMTE5LAorICAgICAyMTIwLCAyMTIwLCAgICAwLCAyMTIwLCAyMTIxLCAyMTIxLCAyMTIyLCAgICAwLCAyMTIyLCAyMTIzLAorICAgICAgICAwLCAyMTIzLCAyMTI0LCAgICAwLCAgICAwLCAyMTI0LCAyMTI1LCAyMTI1LCAgICAwLCAyMTI1LAorICAgICAyMTI2LCAyMTI2LCAgICAwLCAgICAwLCAyMTI2LCAyMTI3LCAyMTI3LCAgICAwLCAyMTI3LCAyMTI4LAorICAgICAyMTI4LCAyMTI5LCAgICAwLCAyMTI5LCAyMTMwLCAgICAwLCAyMTMwLCAyMTMxLCAgICAwLCAgICAwLAorICAgICAyMTMxLCAyMTMyLCAyMTMyLCAgICAwLCAyMTMyLCAyMTMzLCAyMTMzLCAgICAwLCAgICAwLCAyMTMzLAorICAgICAyMTM0LCAyMTM0LCAgICAwLCAyMTM0LCAyMTM1LCAyMTM1LCAyMTM2LCAgICAwLCAyMTM2LCAyMTM3LAorICAgICAgICAwLCAyMTM3LCAyMTM4LCAgICAwLCAyMTM4LCAyMTM5LCAgICAwLCAyMTM5LCAyMTQwLCAyMTQwLAorICAgICAyMTQwLCAyMTQxLCAgICAwLCAyMTQxLCAyMTQyLCAyMTQyLCAyMTQyLCAgICAwLCAyMTQyLCAyMTQyLAorICAgICAyMTQzLCAgICAwLCAyMTQzLCAyMTQ0LCAgICAwLCAyMTQ0LCAyMTQ1LCAgICAwLCAyMTQ1LCAyMTQ2LAogCi0gICAgICAgIDAsIDIxMTQsIDIxMTUsICAgIDAsICAgIDAsIDIxMTUsIDIxMTYsIDIxMTYsICAgIDAsIDIxMTYsCi0gICAgIDIxMTcsIDIxMTcsICAgIDAsICAgIDAsIDIxMTcsIDIxMTgsIDIxMTgsICAgIDAsIDIxMTgsIDIxMTksCi0gICAgIDIxMTksIDIxMjAsICAgIDAsIDIxMjAsIDIxMjEsICAgIDAsIDIxMjEsIDIxMjIsICAgIDAsICAgIDAsCi0gICAgIDIxMjIsIDIxMjMsIDIxMjMsICAgIDAsIDIxMjMsIDIxMjQsIDIxMjQsICAgIDAsICAgIDAsIDIxMjQsCi0gICAgIDIxMjUsIDIxMjUsICAgIDAsIDIxMjUsIDIxMjYsIDIxMjYsIDIxMjcsICAgIDAsIDIxMjcsIDIxMjgsCi0gICAgICAgIDAsIDIxMjgsIDIxMjksICAgIDAsICAgIDAsIDIxMjksIDIxMzAsIDIxMzAsICAgIDAsIDIxMzAsCi0gICAgIDIxMzEsIDIxMzEsICAgIDAsICAgIDAsIDIxMzEsIDIxMzIsIDIxMzIsICAgIDAsIDIxMzIsIDIxMzMsCi0gICAgIDIxMzMsIDIxMzQsICAgIDAsIDIxMzQsIDIxMzUsICAgIDAsIDIxMzUsIDIxMzYsICAgIDAsICAgIDAsCi0gICAgIDIxMzYsIDIxMzcsIDIxMzcsICAgIDAsIDIxMzcsIDIxMzgsIDIxMzgsICAgIDAsICAgIDAsIDIxMzgsCi0gICAgIDIxMzksIDIxMzksICAgIDAsIDIxMzksIDIxNDAsIDIxNDAsIDIxNDEsICAgIDAsIDIxNDEsIDIxNDIsCisgICAgICAgIDAsIDIxNDYsIDIxNDcsICAgIDAsIDIxNDcsIDIxNDgsICAgIDAsIDIxNDgsIDIxNDksICAgIDAsCisgICAgIDIxNDksIDIxNTAsIDIxNTAsICAgIDAsICAgIDAsIDIxNTAsIDIxNTEsIDIxNTEsICAgIDAsIDIxNTEsCisgICAgIDIxNTIsIDIxNTIsIDIxNTMsICAgIDAsIDIxNTMsIDIxNTQsICAgIDAsIDIxNTQsIDIxNTUsICAgIDAsCisgICAgIDIxNTUsIDIxNTYsICAgIDAsIDIxNTYsIDIxNTcsICAgIDAsIDIxNTcsIDIxNTgsICAgIDAsIDIxNTgsCisgICAgIDIxNTksICAgIDAsIDIxNTksIDIxNjAsICAgIDAsIDIxNjAsIDIxNjEsICAgIDAsIDIxNjEsIDIxNjIsCisgICAgICAgIDAsIDIxNjIsIDIxNjMsICAgIDAsICAgIDAsIDIxNjMsIDIxNjQsIDIxNjQsICAgIDAsICAgIDAsCisgICAgIDIxNjQsIDIxNjUsICAgIDAsIDIxNjUsIDIxNjYsICAgIDAsIDIxNjYsIDIxNjcsICAgIDAsIDIxNjcsCisgICAgIDIxNjgsICAgIDAsICAgIDAsIDIxNjgsIDIxNjksICAgIDAsICAgIDAsIDIxNjksIDIxNzAsICAgIDAsCisgICAgICAgIDAsIDIxNzAsIDIxNzEsICAgIDAsICAgIDAsIDIxNzEsIDIxNzIsICAgIDAsICAgIDAsIDIxNzIsCisgICAgIDIxNzMsICAgIDAsIDIxNzMsIDIxNzQsICAgIDAsIDIxNzQsIDIxNzUsICAgIDAsICAgIDAsIDIxNzUsCiAKLSAgICAgICAgMCwgMjE0MiwgMjE0MywgICAgMCwgMjE0MywgMjE0NCwgICAgMCwgMjE0NCwgMjE0NSwgMjE0NSwKLSAgICAgMjE0NSwgMjE0NiwgICAgMCwgMjE0NiwgMjE0NywgMjE0NywgMjE0NywgICAgMCwgMjE0NywgMjE0NywKLSAgICAgMjE0OCwgICAgMCwgMjE0OCwgMjE0OSwgICAgMCwgMjE0OSwgMjE1MCwgICAgMCwgMjE1MCwgMjE1MSwKLSAgICAgICAgMCwgMjE1MSwgMjE1MiwgICAgMCwgMjE1MiwgMjE1MywgICAgMCwgMjE1MywgMjE1NCwgICAgMCwKLSAgICAgMjE1NCwgMjE1NSwgMjE1NSwgICAgMCwgICAgMCwgMjE1NSwgMjE1NiwgMjE1NiwgICAgMCwgMjE1NiwKLSAgICAgMjE1NywgMjE1NywgMjE1OCwgICAgMCwgMjE1OCwgMjE1OSwgICAgMCwgMjE1OSwgMjE2MCwgICAgMCwKLSAgICAgMjE2MCwgMjE2MSwgICAgMCwgMjE2MSwgMjE2MiwgICAgMCwgMjE2MiwgMjE2MywgICAgMCwgMjE2MywKLSAgICAgMjE2NCwgICAgMCwgMjE2NCwgMjE2NSwgICAgMCwgMjE2NSwgMjE2NiwgICAgMCwgMjE2NiwgMjE2NywKLSAgICAgICAgMCwgMjE2NywgMjE2OCwgICAgMCwgICAgMCwgMjE2OCwgMjE2OSwgMjE2OSwgICAgMCwgICAgMCwKLSAgICAgMjE2OSwgMjE3MCwgICAgMCwgMjE3MCwgMjE3MSwgICAgMCwgMjE3MSwgMjE3MiwgICAgMCwgMjE3MiwKLQotICAgICAyMTczLCAgICAwLCAgICAwLCAyMTczLCAyMTc0LCAgICAwLCAgICAwLCAyMTc0LCAyMTc1LCAgICAwLAotICAgICAgICAwLCAyMTc1LCAyMTc2LCAgICAwLCAgICAwLCAyMTc2LCAyMTc3LCAgICAwLCAgICAwLCAyMTc3LAotICAgICAyMTc4LCAgICAwLCAyMTc4LCAyMTc5LCAgICAwLCAyMTc5LCAyMTgwLCAgICAwLCAgICAwLCAyMTgwLAotICAgICAyMTgxLCAgICAwLCAyMTgxLCAyMTgyLCAgICAwLCAyMTgyLCAyMTgzLCAgICAwLCAyMTgzLCAyMTg0LAotICAgICAgICAwLCAyMTg0LCAyMTg1LCAgICAwLCAyMTg1LCAyMTg2LCAgICAwLCAgICAwLCAyMTg2LCAyMTg3LAotICAgICAgICAwLCAyMTg3LCAyMTg4LCAgICAwLCAyMTg4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotICAgICAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LCAxNzI4LAotCi0gICAgIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgsIDE3MjgKKyAgICAgMjE3NiwgICAgMCwgMjE3NiwgMjE3NywgICAgMCwgMjE3NywgMjE3OCwgICAgMCwgMjE3OCwgMjE3OSwKKyAgICAgICAgMCwgMjE3OSwgMjE4MCwgICAgMCwgMjE4MCwgMjE4MSwgICAgMCwgICAgMCwgMjE4MSwgMjE4MiwKKyAgICAgICAgMCwgMjE4MiwgMjE4MywgICAgMCwgMjE4MywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywKKyAgICAgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMywgMTcyMwogICAgIH0gOwogCiAvKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaApAQCAtMjk3OCw3ICszMTQwLDggQEAKICAqLwogRElBR19PRkZfRkxFWAogCi0jbGluZSAyOTgyICJzY2FubmVyLmMiCisjbGluZSAzMTQ0ICJzY2FubmVyLmMiCisjbGluZSAzMTQ1ICJzY2FubmVyLmMiCiAKICNkZWZpbmUgSU5JVElBTCAwCiAKQEAgLTMwMjgsNTIgKzMxOTEsNTIgQEAKIAogICAgIH07IC8qIGVuZCBzdHJ1Y3QgeXlndXRzX3QgKi8KIAotc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAogICAgIC8qIFRoaXMgbXVzdCBnbyBoZXJlIGJlY2F1c2UgWVlTVFlQRSBhbmQgWVlMVFlQRSBhcmUgaW5jbHVkZWQKICAgICAgKiBmcm9tIGJpc29uIG91dHB1dCBpbiBzZWN0aW9uIDEuKi8KICAgICAjICAgIGRlZmluZSB5eWx2YWwgeXlnLT55eWx2YWxfcgogICAgIAotaW50IHBjYXBfbGV4X2luaXQgKHl5c2Nhbl90KiBzY2FubmVyKTsKK2ludCB5eWxleF9pbml0ICh5eXNjYW5fdCogc2Nhbm5lcik7CiAKLWludCBwY2FwX2xleF9pbml0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCx5eXNjYW5fdCogc2Nhbm5lcik7CitpbnQgeXlsZXhfaW5pdF9leHRyYSAoIFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkLCB5eXNjYW5fdCogc2Nhbm5lcik7CiAKIC8qIEFjY2Vzc29yIG1ldGhvZHMgdG8gZ2xvYmFscy4KICAgIFRoZXNlIGFyZSBtYWRlIHZpc2libGUgdG8gbm9uLXJlZW50cmFudCBzY2FubmVycyBmb3IgY29udmVuaWVuY2UuICovCiAKLWludCBwY2FwX2xleF9kZXN0cm95ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK2ludCB5eWxleF9kZXN0cm95ICggeXlzY2FuX3QgeXlzY2FubmVyICk7CiAKLWludCBwY2FwX2dldF9kZWJ1ZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitpbnQgeXlnZXRfZGVidWcgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAotdm9pZCBwY2FwX3NldF9kZWJ1ZyAoaW50IGRlYnVnX2ZsYWcgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eXNldF9kZWJ1ZyAoIGludCBkZWJ1Z19mbGFnICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CiAKLVlZX0VYVFJBX1RZUEUgcGNhcF9nZXRfZXh0cmEgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfRVhUUkFfVFlQRSB5eWdldF9leHRyYSAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCi12b2lkIHBjYXBfc2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5c2V0X2V4dHJhICggWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAotRklMRSAqcGNhcF9nZXRfaW4gKHl5c2Nhbl90IHl5c2Nhbm5lciApOworRklMRSAqeXlnZXRfaW4gKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAotdm9pZCBwY2FwX3NldF9pbiAgKEZJTEUgKiBfaW5fc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlzZXRfaW4gICggRklMRSAqIF9pbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAotRklMRSAqcGNhcF9nZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK0ZJTEUgKnl5Z2V0X291dCAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCi12b2lkIHBjYXBfc2V0X291dCAgKEZJTEUgKiBfb3V0X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5c2V0X291dCAgKCBGSUxFICogX291dF9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAotCQkJaW50IHBjYXBfZ2V0X2xlbmcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCQkJaW50IHl5Z2V0X2xlbmcgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAotY2hhciAqcGNhcF9nZXRfdGV4dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitjaGFyICp5eWdldF90ZXh0ICggeXlzY2FuX3QgeXlzY2FubmVyICk7CiAKLWludCBwY2FwX2dldF9saW5lbm8gKHl5c2Nhbl90IHl5c2Nhbm5lciApOworaW50IHl5Z2V0X2xpbmVubyAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCi12b2lkIHBjYXBfc2V0X2xpbmVubyAoaW50IF9saW5lX251bWJlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5c2V0X2xpbmVubyAoIGludCBfbGluZV9udW1iZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAotaW50IHBjYXBfZ2V0X2NvbHVtbiAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworaW50IHl5Z2V0X2NvbHVtbiAgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAotdm9pZCBwY2FwX3NldF9jb2x1bW4gKGludCBfY29sdW1uX25vICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlzZXRfY29sdW1uICggaW50IF9jb2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAotWVlTVFlQRSAqIHBjYXBfZ2V0X2x2YWwgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlTVFlQRSAqIHl5Z2V0X2x2YWwgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAotdm9pZCBwY2FwX3NldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlzZXRfbHZhbCAoIFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAogLyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KICAqIHNlY3Rpb24gMS4KQEAgLTMwODEsOSArMzI0NCw5IEBACiAKICNpZm5kZWYgWVlfU0tJUF9ZWVdSQVAKICNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiBpbnQgcGNhcF93cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK2V4dGVybiAiQyIgaW50IHl5d3JhcCAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOwogI2Vsc2UKLWV4dGVybiBpbnQgcGNhcF93cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK2V4dGVybiBpbnQgeXl3cmFwICggeXlzY2FuX3QgeXlzY2FubmVyICk7CiAjZW5kaWYKICNlbmRpZgogCkBAIC0zMDkyLDE5ICszMjU1LDE4IEBACiAjZW5kaWYKIAogI2lmbmRlZiB5eXRleHRfcHRyCi1zdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixpbnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50ICwgeXlzY2FuX3QgeXlzY2FubmVyKTsKICNlbmRpZgogCiAjaWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqICx5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoIGNvbnN0IGNoYXIgKiAsIHl5c2Nhbl90IHl5c2Nhbm5lcik7CiAjZW5kaWYKIAogI2lmbmRlZiBZWV9OT19JTlBVVAotCiAjaWZkZWYgX19jcGx1c3BsdXMKLXN0YXRpYyBpbnQgeXlpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgaW50IHl5aW5wdXQgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKICNlbHNlCi1zdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyBpbnQgaW5wdXQgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKICNlbmRpZgogCiAjZW5kaWYKQEAgLTMxMzUsNyArMzI5Nyw3IEBACiAJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlICkgXAogCQl7IFwKIAkJaW50IGMgPSAnKic7IFwKLQkJc2l6ZV90IG47IFwKKwkJaW50IG47IFwKIAkJZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCiAJCQkgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCiAJCQlidWZbbl0gPSAoY2hhcikgYzsgXApAQCAtMzE0OCw3ICszMzEwLDcgQEAKIAllbHNlIFwKIAkJeyBcCiAJCWVycm5vPTA7IFwKLQkJd2hpbGUgKCAocmVzdWx0ID0gKGludCkgZnJlYWQoYnVmLCAxLCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAorCQl3aGlsZSAoIChyZXN1bHQgPSAoaW50KSBmcmVhZChidWYsIDEsICh5eV9zaXplX3QpIG1heF9zaXplLCB5eWluKSkgPT0gMCAmJiBmZXJyb3IoeXlpbikpIFwKIAkJCXsgXAogCQkJaWYoIGVycm5vICE9IEVJTlRSKSBcCiAJCQkJeyBcCkBAIC0zMTg5LDEwICszMzUxLDEwIEBACiAjaWZuZGVmIFlZX0RFQ0wKICNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKIAotZXh0ZXJuIGludCBwY2FwX2xleCBcCi0gICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyKTsKK2V4dGVybiBpbnQgeXlsZXggXAorICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpOwogCi0jZGVmaW5lIFlZX0RFQ0wgaW50IHBjYXBfbGV4IFwKKyNkZWZpbmUgWVlfREVDTCBpbnQgeXlsZXggXAogICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiAjZW5kaWYgLyogIVlZX0RFQ0wgKi8KIApAQCAtMzI0MCwxOCArMzQwMiwxOCBAQAogCQkJeXlvdXQgPSBzdGRvdXQ7CiAKIAkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgewotCQkJcGNhcF9lbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQkJeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwogCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KLQkJCQlwY2FwX19jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7CisJCQkJeXlfY3JlYXRlX2J1ZmZlciggeXlpbiwgWVlfQlVGX1NJWkUgLCB5eXNjYW5uZXIpOwogCQl9CiAKLQkJcGNhcF9fbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJCXl5X2xvYWRfYnVmZmVyX3N0YXRlKCB5eXNjYW5uZXIgKTsKIAkJfQogCiAJewogI2xpbmUgMjU0ICJzY2FubmVyLmwiCiAKLSNsaW5lIDMyNTUgInNjYW5uZXIuYyIKKyNsaW5lIDM0MTcgInNjYW5uZXIuYyIKIAogCXdoaWxlICggLypDT05TVENPTkQqLzEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLwogCQl7CkBAIC0zMjc4LDEzICszNDQwLDEzIEBACiAJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCQkJewogCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDE3MjkgKQotCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gMTcyNCApCisJCQkJCXl5X2MgPSB5eV9tZXRhW3l5X2NdOwogCQkJCX0KLQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIChmbGV4X2ludDE2X3QpIHl5X2NdOworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY107CiAJCQkrK3l5X2NwOwogCQkJfQotCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gMTcyOCApOworCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gMTcyMyApOwogCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKIAkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CiAKQEAgLTM1NTcsNzA1ICszNzE5LDY5MCBAQAogY2FzZSA1MToKIFlZX1JVTEVfU0VUVVAKICNsaW5lIDMxNCAic2Nhbm5lci5sIgotewotI2lmZGVmIE5PX1BST1RPQ0hBSU4KLQkJICBicGZfZXJyb3IoeXlleHRyYSwgIiVzIG5vdCBzdXBwb3J0ZWQiLCB5eXRleHQpOwotI2Vsc2UKLQkJICByZXR1cm4gUFJPVE9DSEFJTjsKLSNlbmRpZgotCQl9CityZXR1cm4gUFJPVE9DSEFJTjsKIAlZWV9CUkVBSwogY2FzZSA1MjoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDMyMiAic2Nhbm5lci5sIgorI2xpbmUgMzE2ICJzY2FubmVyLmwiCiByZXR1cm4gR0FURVdBWTsKIAlZWV9CUkVBSwogY2FzZSA1MzoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDMyNCAic2Nhbm5lci5sIgorI2xpbmUgMzE4ICJzY2FubmVyLmwiCiByZXR1cm4gVFlQRTsKIAlZWV9CUkVBSwogY2FzZSA1NDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDMyNSAic2Nhbm5lci5sIgorI2xpbmUgMzE5ICJzY2FubmVyLmwiCiByZXR1cm4gU1VCVFlQRTsKIAlZWV9CUkVBSwogY2FzZSA1NToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDMyNiAic2Nhbm5lci5sIgorI2xpbmUgMzIwICJzY2FubmVyLmwiCiByZXR1cm4gRElSOwogCVlZX0JSRUFLCiBjYXNlIDU2OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzI3ICJzY2FubmVyLmwiCisjbGluZSAzMjEgInNjYW5uZXIubCIKIHJldHVybiBBRERSMTsKIAlZWV9CUkVBSwogY2FzZSA1NzoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDMyOCAic2Nhbm5lci5sIgorI2xpbmUgMzIyICJzY2FubmVyLmwiCiByZXR1cm4gQUREUjI7CiAJWVlfQlJFQUsKIGNhc2UgNTg6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAzMjkgInNjYW5uZXIubCIKKyNsaW5lIDMyMyAic2Nhbm5lci5sIgogcmV0dXJuIEFERFIzOwogCVlZX0JSRUFLCiBjYXNlIDU5OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzMwICJzY2FubmVyLmwiCisjbGluZSAzMjQgInNjYW5uZXIubCIKIHJldHVybiBBRERSNDsKIAlZWV9CUkVBSwogY2FzZSA2MDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDMzMSAic2Nhbm5lci5sIgorI2xpbmUgMzI1ICJzY2FubmVyLmwiCiByZXR1cm4gUkE7CiAJWVlfQlJFQUsKIGNhc2UgNjE6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAzMzIgInNjYW5uZXIubCIKKyNsaW5lIDMyNiAic2Nhbm5lci5sIgogcmV0dXJuIFRBOwogCVlZX0JSRUFLCiBjYXNlIDYyOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzM0ICJzY2FubmVyLmwiCisjbGluZSAzMjggInNjYW5uZXIubCIKIHJldHVybiBMRVNTOwogCVlZX0JSRUFLCiBjYXNlIDYzOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzM1ICJzY2FubmVyLmwiCisjbGluZSAzMjkgInNjYW5uZXIubCIKIHJldHVybiBHUkVBVEVSOwogCVlZX0JSRUFLCiBjYXNlIDY0OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzM2ICJzY2FubmVyLmwiCisjbGluZSAzMzAgInNjYW5uZXIubCIKIHJldHVybiBDQllURTsKIAlZWV9CUkVBSwogY2FzZSA2NToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDMzNyAic2Nhbm5lci5sIgorI2xpbmUgMzMxICJzY2FubmVyLmwiCiByZXR1cm4gVEtfQlJPQURDQVNUOwogCVlZX0JSRUFLCiBjYXNlIDY2OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzM4ICJzY2FubmVyLmwiCisjbGluZSAzMzIgInNjYW5uZXIubCIKIHJldHVybiBUS19NVUxUSUNBU1Q7CiAJWVlfQlJFQUsKIGNhc2UgNjc6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAzNDAgInNjYW5uZXIubCIKKyNsaW5lIDMzNCAic2Nhbm5lci5sIgogcmV0dXJuIEFORDsKIAlZWV9CUkVBSwogY2FzZSA2ODoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM0MSAic2Nhbm5lci5sIgorI2xpbmUgMzM1ICJzY2FubmVyLmwiCiByZXR1cm4gT1I7CiAJWVlfQlJFQUsKIGNhc2UgNjk6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAzNDIgInNjYW5uZXIubCIKKyNsaW5lIDMzNiAic2Nhbm5lci5sIgogcmV0dXJuICchJzsKIAlZWV9CUkVBSwogY2FzZSA3MDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM0NCAic2Nhbm5lci5sIgorI2xpbmUgMzM4ICJzY2FubmVyLmwiCiByZXR1cm4gTEVOOwogCVlZX0JSRUFLCiBjYXNlIDcxOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzQ1ICJzY2FubmVyLmwiCisjbGluZSAzMzkgInNjYW5uZXIubCIKIHJldHVybiBJTkJPVU5EOwogCVlZX0JSRUFLCiBjYXNlIDcyOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzQ2ICJzY2FubmVyLmwiCisjbGluZSAzNDAgInNjYW5uZXIubCIKIHJldHVybiBPVVRCT1VORDsKIAlZWV9CUkVBSwogY2FzZSA3MzoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM0OCAic2Nhbm5lci5sIgorI2xpbmUgMzQyICJzY2FubmVyLmwiCiByZXR1cm4gVkxBTjsKIAlZWV9CUkVBSwogY2FzZSA3NDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM0OSAic2Nhbm5lci5sIgorI2xpbmUgMzQzICJzY2FubmVyLmwiCiByZXR1cm4gTVBMUzsKIAlZWV9CUkVBSwogY2FzZSA3NToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM1MCAic2Nhbm5lci5sIgorI2xpbmUgMzQ0ICJzY2FubmVyLmwiCiByZXR1cm4gUFBQT0VEOwogCVlZX0JSRUFLCiBjYXNlIDc2OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzUxICJzY2FubmVyLmwiCisjbGluZSAzNDUgInNjYW5uZXIubCIKIHJldHVybiBQUFBPRVM7CiAJWVlfQlJFQUsKIGNhc2UgNzc6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAzNTIgInNjYW5uZXIubCIKKyNsaW5lIDM0NiAic2Nhbm5lci5sIgogcmV0dXJuIEdFTkVWRTsKIAlZWV9CUkVBSwogY2FzZSA3ODoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM1NCAic2Nhbm5lci5sIgorI2xpbmUgMzQ4ICJzY2FubmVyLmwiCiByZXR1cm4gTEFORTsKIAlZWV9CUkVBSwogY2FzZSA3OToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM1NSAic2Nhbm5lci5sIgorI2xpbmUgMzQ5ICJzY2FubmVyLmwiCiByZXR1cm4gTExDOwogCVlZX0JSRUFLCiBjYXNlIDgwOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzU2ICJzY2FubmVyLmwiCisjbGluZSAzNTAgInNjYW5uZXIubCIKIHJldHVybiBNRVRBQzsKIAlZWV9CUkVBSwogY2FzZSA4MToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM1NyAic2Nhbm5lci5sIgorI2xpbmUgMzUxICJzY2FubmVyLmwiCiByZXR1cm4gQkNDOwogCVlZX0JSRUFLCiBjYXNlIDgyOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzU4ICJzY2FubmVyLmwiCisjbGluZSAzNTIgInNjYW5uZXIubCIKIHJldHVybiBPQU07CiAJWVlfQlJFQUsKIGNhc2UgODM6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAzNTkgInNjYW5uZXIubCIKKyNsaW5lIDM1MyAic2Nhbm5lci5sIgogcmV0dXJuIE9BTUY0OwogCVlZX0JSRUFLCiBjYXNlIDg0OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzYwICJzY2FubmVyLmwiCisjbGluZSAzNTQgInNjYW5uZXIubCIKIHJldHVybiBPQU1GNEVDOwogCVlZX0JSRUFLCiBjYXNlIDg1OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzYxICJzY2FubmVyLmwiCisjbGluZSAzNTUgInNjYW5uZXIubCIKIHJldHVybiBPQU1GNFNDOwogCVlZX0JSRUFLCiBjYXNlIDg2OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzYyICJzY2FubmVyLmwiCisjbGluZSAzNTYgInNjYW5uZXIubCIKIHJldHVybiBTQzsKIAlZWV9CUkVBSwogY2FzZSA4NzoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM2MyAic2Nhbm5lci5sIgorI2xpbmUgMzU3ICJzY2FubmVyLmwiCiByZXR1cm4gSUxNSUM7CiAJWVlfQlJFQUsKIGNhc2UgODg6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAzNjQgInNjYW5uZXIubCIKKyNsaW5lIDM1OCAic2Nhbm5lci5sIgogcmV0dXJuIFZQSTsKIAlZWV9CUkVBSwogY2FzZSA4OToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM2NSAic2Nhbm5lci5sIgorI2xpbmUgMzU5ICJzY2FubmVyLmwiCiByZXR1cm4gVkNJOwogCVlZX0JSRUFLCiBjYXNlIDkwOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzY2ICJzY2FubmVyLmwiCisjbGluZSAzNjAgInNjYW5uZXIubCIKIHJldHVybiBDT05ORUNUTVNHOwogCVlZX0JSRUFLCiBjYXNlIDkxOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzY3ICJzY2FubmVyLmwiCisjbGluZSAzNjEgInNjYW5uZXIubCIKIHJldHVybiBNRVRBQ09OTkVDVDsKIAlZWV9CUkVBSwogY2FzZSA5MjoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM2OSAic2Nhbm5lci5sIgorI2xpbmUgMzYzICJzY2FubmVyLmwiCiByZXR1cm4gUEZfSUZOQU1FOwogCVlZX0JSRUFLCiBjYXNlIDkzOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzcwICJzY2FubmVyLmwiCisjbGluZSAzNjQgInNjYW5uZXIubCIKIHJldHVybiBQRl9SU0VUOwogCVlZX0JSRUFLCiBjYXNlIDk0OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzcxICJzY2FubmVyLmwiCisjbGluZSAzNjUgInNjYW5uZXIubCIKIHJldHVybiBQRl9STlI7CiAJWVlfQlJFQUsKIGNhc2UgOTU6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAzNzIgInNjYW5uZXIubCIKKyNsaW5lIDM2NiAic2Nhbm5lci5sIgogcmV0dXJuIFBGX1NSTlI7CiAJWVlfQlJFQUsKIGNhc2UgOTY6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAzNzMgInNjYW5uZXIubCIKKyNsaW5lIDM2NyAic2Nhbm5lci5sIgogcmV0dXJuIFBGX1JFQVNPTjsKIAlZWV9CUkVBSwogY2FzZSA5NzoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM3NCAic2Nhbm5lci5sIgorI2xpbmUgMzY4ICJzY2FubmVyLmwiCiByZXR1cm4gUEZfQUNUSU9OOwogCVlZX0JSRUFLCiBjYXNlIDk4OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzc2ICJzY2FubmVyLmwiCisjbGluZSAzNzAgInNjYW5uZXIubCIKIHJldHVybiBGSVNVOwogCVlZX0JSRUFLCiBjYXNlIDk5OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzc3ICJzY2FubmVyLmwiCisjbGluZSAzNzEgInNjYW5uZXIubCIKIHJldHVybiBMU1NVOwogCVlZX0JSRUFLCiBjYXNlIDEwMDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM3OCAic2Nhbm5lci5sIgorI2xpbmUgMzcyICJzY2FubmVyLmwiCiByZXR1cm4gTFNTVTsKIAlZWV9CUkVBSwogY2FzZSAxMDE6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAzNzkgInNjYW5uZXIubCIKKyNsaW5lIDM3MyAic2Nhbm5lci5sIgogcmV0dXJuIE1TVTsKIAlZWV9CUkVBSwogY2FzZSAxMDI6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAzODAgInNjYW5uZXIubCIKKyNsaW5lIDM3NCAic2Nhbm5lci5sIgogcmV0dXJuIEhGSVNVOwogCVlZX0JSRUFLCiBjYXNlIDEwMzoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM4MSAic2Nhbm5lci5sIgorI2xpbmUgMzc1ICJzY2FubmVyLmwiCiByZXR1cm4gSExTU1U7CiAJWVlfQlJFQUsKIGNhc2UgMTA0OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzgyICJzY2FubmVyLmwiCisjbGluZSAzNzYgInNjYW5uZXIubCIKIHJldHVybiBITVNVOwogCVlZX0JSRUFLCiBjYXNlIDEwNToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM4MyAic2Nhbm5lci5sIgorI2xpbmUgMzc3ICJzY2FubmVyLmwiCiByZXR1cm4gU0lPOwogCVlZX0JSRUFLCiBjYXNlIDEwNjoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM4NCAic2Nhbm5lci5sIgorI2xpbmUgMzc4ICJzY2FubmVyLmwiCiByZXR1cm4gT1BDOwogCVlZX0JSRUFLCiBjYXNlIDEwNzoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM4NSAic2Nhbm5lci5sIgorI2xpbmUgMzc5ICJzY2FubmVyLmwiCiByZXR1cm4gRFBDOwogCVlZX0JSRUFLCiBjYXNlIDEwODoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM4NiAic2Nhbm5lci5sIgorI2xpbmUgMzgwICJzY2FubmVyLmwiCiByZXR1cm4gU0xTOwogCVlZX0JSRUFLCiBjYXNlIDEwOToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM4NyAic2Nhbm5lci5sIgorI2xpbmUgMzgxICJzY2FubmVyLmwiCiByZXR1cm4gSFNJTzsKIAlZWV9CUkVBSwogY2FzZSAxMTA6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAzODggInNjYW5uZXIubCIKKyNsaW5lIDM4MiAic2Nhbm5lci5sIgogcmV0dXJuIEhPUEM7CiAJWVlfQlJFQUsKIGNhc2UgMTExOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzg5ICJzY2FubmVyLmwiCisjbGluZSAzODMgInNjYW5uZXIubCIKIHJldHVybiBIRFBDOwogCVlZX0JSRUFLCiBjYXNlIDExMjoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM5MCAic2Nhbm5lci5sIgorI2xpbmUgMzg0ICJzY2FubmVyLmwiCiByZXR1cm4gSFNMUzsKIAlZWV9CUkVBSwogY2FzZSAxMTM6CiAvKiBydWxlIDExMyBjYW4gbWF0Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCi0jbGluZSAzOTIgInNjYW5uZXIubCIKKyNsaW5lIDM4NiAic2Nhbm5lci5sIgogOwogCVlZX0JSRUFLCiBjYXNlIDExNDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM5MyAic2Nhbm5lci5sIgorI2xpbmUgMzg3ICJzY2FubmVyLmwiCiByZXR1cm4geXl0ZXh0WzBdOwogCVlZX0JSRUFLCiBjYXNlIDExNToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM5NCAic2Nhbm5lci5sIgorI2xpbmUgMzg4ICJzY2FubmVyLmwiCiByZXR1cm4gR0VROwogCVlZX0JSRUFLCiBjYXNlIDExNjoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM5NSAic2Nhbm5lci5sIgorI2xpbmUgMzg5ICJzY2FubmVyLmwiCiByZXR1cm4gTEVROwogCVlZX0JSRUFLCiBjYXNlIDExNzoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM5NiAic2Nhbm5lci5sIgorI2xpbmUgMzkwICJzY2FubmVyLmwiCiByZXR1cm4gTkVROwogCVlZX0JSRUFLCiBjYXNlIDExODoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM5NyAic2Nhbm5lci5sIgorI2xpbmUgMzkxICJzY2FubmVyLmwiCiByZXR1cm4gJz0nOwogCVlZX0JSRUFLCiBjYXNlIDExOToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM5OCAic2Nhbm5lci5sIgorI2xpbmUgMzkyICJzY2FubmVyLmwiCiByZXR1cm4gTFNIOwogCVlZX0JSRUFLCiBjYXNlIDEyMDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDM5OSAic2Nhbm5lci5sIgorI2xpbmUgMzkzICJzY2FubmVyLmwiCiByZXR1cm4gUlNIOwogCVlZX0JSRUFLCiBjYXNlIDEyMToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDQwMCAic2Nhbm5lci5sIgoteyB5eWx2YWwtPmUgPSBwY2FwX2V0aGVyX2F0b24oKChjaGFyICopeXl0ZXh0KSsxKTsKLQkJCSAgaWYgKHl5bHZhbC0+ZSA9PSBOVUxMKQotCQkJCWJwZl9lcnJvcih5eWV4dHJhLCAibWFsbG9jIik7Ci0JCQkgIHJldHVybiBBSUQ7IH0KKyNsaW5lIDM5NCAic2Nhbm5lci5sIgoreyB5eWx2YWwtPnMgPSBzZHVwKHl5ZXh0cmEsIHl5dGV4dCk7IHJldHVybiBBSUQ7IH0KIAlZWV9CUkVBSwogY2FzZSAxMjI6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSA0MDQgInNjYW5uZXIubCIKLXsgeXlsdmFsLT5lID0gcGNhcF9ldGhlcl9hdG9uKChjaGFyICopeXl0ZXh0KTsKLQkJCSAgaWYgKHl5bHZhbC0+ZSA9PSBOVUxMKQotCQkJCWJwZl9lcnJvcih5eWV4dHJhLCAibWFsbG9jIik7Ci0JCQkgIHJldHVybiBFSUQ7IH0KKyNsaW5lIDM5NSAic2Nhbm5lci5sIgoreyB5eWx2YWwtPnMgPSBzZHVwKHl5ZXh0cmEsIHl5dGV4dCk7IHJldHVybiBFSUQ7IH0KIAlZWV9CUkVBSwogY2FzZSAxMjM6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSA0MDggInNjYW5uZXIubCIKKyNsaW5lIDM5NiAic2Nhbm5lci5sIgogeyB5eWx2YWwtPmkgPSBzdG9pKChjaGFyICopeXl0ZXh0KTsgcmV0dXJuIE5VTTsgfQogCVlZX0JSRUFLCiBjYXNlIDEyNDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDQwOSAic2Nhbm5lci5sIgorI2xpbmUgMzk3ICJzY2FubmVyLmwiCiB7CiAJCQl5eWx2YWwtPnMgPSBzZHVwKHl5ZXh0cmEsIChjaGFyICopeXl0ZXh0KTsgcmV0dXJuIEhJRDsgfQogCVlZX0JSRUFLCiBjYXNlIDEyNToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDQxMSAic2Nhbm5lci5sIgorI2xpbmUgMzk5ICJzY2FubmVyLmwiCiB7CiAjaWZkZWYgSU5FVDYKIAkJCSAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqcmVzOwogCQkJICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKIAkJCSAgaGludHMuYWlfZmFtaWx5ID0gQUZfSU5FVDY7CiAJCQkgIGhpbnRzLmFpX2ZsYWdzID0gQUlfTlVNRVJJQ0hPU1Q7Ci0JCQkgIGlmIChnZXRhZGRyaW5mbyh5eXRleHQsIE5VTEwsICZoaW50cywgJnJlcykpCi0JCQkJYnBmX2Vycm9yKHl5ZXh0cmEsICJib2d1cyBJUHY2IGFkZHJlc3MgJXMiLCB5eXRleHQpOwotCQkJICBlbHNlIHsKKwkJCSAgaWYgKGdldGFkZHJpbmZvKHl5dGV4dCwgTlVMTCwgJmhpbnRzLCAmcmVzKSkgeworCQkJCWJwZl9zZXRfZXJyb3IoeXlleHRyYSwgImJvZ3VzIElQdjYgYWRkcmVzcyAlcyIsIHl5dGV4dCk7CisJCQkJeXlsdmFsLT5zID0gTlVMTDsKKwkJCSAgfSBlbHNlIHsKIAkJCQlmcmVlYWRkcmluZm8ocmVzKTsKLQkJCQl5eWx2YWwtPnMgPSBzZHVwKHl5ZXh0cmEsIChjaGFyICopeXl0ZXh0KTsgcmV0dXJuIEhJRDY7CisJCQkJeXlsdmFsLT5zID0gc2R1cCh5eWV4dHJhLCAoY2hhciAqKXl5dGV4dCk7CiAJCQkgIH0KICNlbHNlCi0JCQkgIGJwZl9lcnJvcih5eWV4dHJhLCAiSVB2NiBhZGRyZXNzICVzIG5vdCBzdXBwb3J0ZWQiLCB5eXRleHQpOworCQkJICBicGZfc2V0X2Vycm9yKHl5ZXh0cmEsICJJUHY2IGFkZHJlc3MgJXMgbm90IHN1cHBvcnRlZCIsIHl5dGV4dCk7CisJCQkgIHl5bHZhbC0+cyA9IE5VTEw7CiAjZW5kaWYgLypJTkVUNiovCisJCQkgIHJldHVybiBISUQ2OwogCQkJfQogCVlZX0JSRUFLCiBjYXNlIDEyNjoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDQyNyAic2Nhbm5lci5sIgoteyBicGZfZXJyb3IoeXlleHRyYSwgImJvZ3VzIGV0aGVybmV0IGFkZHJlc3MgJXMiLCB5eXRleHQpOyB9CisjbGluZSA0MTggInNjYW5uZXIubCIKK3sgYnBmX3NldF9lcnJvcih5eWV4dHJhLCAiYm9ndXMgZXRoZXJuZXQgYWRkcmVzcyAlcyIsIHl5dGV4dCk7IHl5bHZhbC0+cyA9IE5VTEw7IHJldHVybiBFSUQ7IH0KIAlZWV9CUkVBSwogY2FzZSAxMjc6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSA0MjggInNjYW5uZXIubCIKKyNsaW5lIDQxOSAic2Nhbm5lci5sIgogeyB5eWx2YWwtPmkgPSAwOyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTI4OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDI5ICJzY2FubmVyLmwiCisjbGluZSA0MjAgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTsgcmV0dXJuIE5VTTsgfQogCVlZX0JSRUFLCiBjYXNlIDEyOToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDQzMCAic2Nhbm5lci5sIgorI2xpbmUgNDIxICJzY2FubmVyLmwiCiB7IHl5bHZhbC0+aSA9IDA7IHJldHVybiBOVU07IH0KIAlZWV9CUkVBSwogY2FzZSAxMzA6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSA0MzEgInNjYW5uZXIubCIKKyNsaW5lIDQyMiAic2Nhbm5lci5sIgogeyB5eWx2YWwtPmkgPSAzOyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTMxOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDMyICJzY2FubmVyLmwiCisjbGluZSA0MjMgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gNDsgcmV0dXJuIE5VTTsgfQogCVlZX0JSRUFLCiBjYXNlIDEzMjoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDQzMyAic2Nhbm5lci5sIgorI2xpbmUgNDI0ICJzY2FubmVyLmwiCiB7IHl5bHZhbC0+aSA9IDU7IHJldHVybiBOVU07IH0KIAlZWV9CUkVBSwogY2FzZSAxMzM6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSA0MzQgInNjYW5uZXIubCIKKyNsaW5lIDQyNSAic2Nhbm5lci5sIgogeyB5eWx2YWwtPmkgPSA4OyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTM0OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDM1ICJzY2FubmVyLmwiCisjbGluZSA0MjYgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gOTsgcmV0dXJuIE5VTTsgfQogCVlZX0JSRUFLCiBjYXNlIDEzNToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDQzNiAic2Nhbm5lci5sIgorI2xpbmUgNDI3ICJzY2FubmVyLmwiCiB7IHl5bHZhbC0+aSA9IDEwOyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTM2OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDM3ICJzY2FubmVyLmwiCisjbGluZSA0MjggInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTE7IHJldHVybiBOVU07IH0KIAlZWV9CUkVBSwogY2FzZSAxMzc6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSA0MzggInNjYW5uZXIubCIKKyNsaW5lIDQyOSAic2Nhbm5lci5sIgogeyB5eWx2YWwtPmkgPSAxMjsgcmV0dXJuIE5VTTsgfQogCVlZX0JSRUFLCiBjYXNlIDEzODoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDQzOSAic2Nhbm5lci5sIgorI2xpbmUgNDMwICJzY2FubmVyLmwiCiB7IHl5bHZhbC0+aSA9IDEzOyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTM5OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDQwICJzY2FubmVyLmwiCisjbGluZSA0MzEgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTQ7IHJldHVybiBOVU07IH0KIAlZWV9CUkVBSwogY2FzZSAxNDA6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSA0NDEgInNjYW5uZXIubCIKKyNsaW5lIDQzMiAic2Nhbm5lci5sIgogeyB5eWx2YWwtPmkgPSAxNTsgcmV0dXJuIE5VTTsgfQogCVlZX0JSRUFLCiBjYXNlIDE0MToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDQ0MiAic2Nhbm5lci5sIgorI2xpbmUgNDMzICJzY2FubmVyLmwiCiB7IHl5bHZhbC0+aSA9IDE2OyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTQyOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDQzICJzY2FubmVyLmwiCisjbGluZSA0MzQgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTc7IHJldHVybiBOVU07IH0KIAlZWV9CUkVBSwogY2FzZSAxNDM6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSA0NDQgInNjYW5uZXIubCIKKyNsaW5lIDQzNSAic2Nhbm5lci5sIgogeyB5eWx2YWwtPmkgPSAxODsgcmV0dXJuIE5VTTsgfQogCVlZX0JSRUFLCiBjYXNlIDE0NDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDQ0NiAic2Nhbm5lci5sIgorI2xpbmUgNDM3ICJzY2FubmVyLmwiCiB7IHl5bHZhbC0+aSA9IDA7IHJldHVybiBOVU07IH0KIAlZWV9CUkVBSwogY2FzZSAxNDU6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSA0NDcgInNjYW5uZXIubCIKKyNsaW5lIDQzOCAic2Nhbm5lci5sIgogeyB5eWx2YWwtPmkgPSAxOyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTQ2OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDQ5ICJzY2FubmVyLmwiCisjbGluZSA0NDAgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTI4OyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTQ3OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDUwICJzY2FubmVyLmwiCisjbGluZSA0NDEgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTI5OyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTQ4OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDUxICJzY2FubmVyLmwiCisjbGluZSA0NDIgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTMwOyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTQ5OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDUyICJzY2FubmVyLmwiCisjbGluZSA0NDMgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTMxOyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTUwOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDUzICJzY2FubmVyLmwiCisjbGluZSA0NDQgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTMyOyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTUxOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDU0ICJzY2FubmVyLmwiCisjbGluZSA0NDUgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTMzOyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTUyOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDU1ICJzY2FubmVyLmwiCisjbGluZSA0NDYgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTM0OyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTUzOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDU2ICJzY2FubmVyLmwiCisjbGluZSA0NDcgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTM1OyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTU0OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDU3ICJzY2FubmVyLmwiCisjbGluZSA0NDggInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTM2OyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTU1OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDU4ICJzY2FubmVyLmwiCisjbGluZSA0NDkgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTM3OyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTU2OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDU5ICJzY2FubmVyLmwiCisjbGluZSA0NTAgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTM4OyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTU3OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDYwICJzY2FubmVyLmwiCisjbGluZSA0NTEgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTM5OyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTU4OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDYxICJzY2FubmVyLmwiCisjbGluZSA0NTIgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTQwOyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTU5OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDYyICJzY2FubmVyLmwiCisjbGluZSA0NTMgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTQxOyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTYwOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDYzICJzY2FubmVyLmwiCisjbGluZSA0NTQgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTQyOyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTYxOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDY0ICJzY2FubmVyLmwiCisjbGluZSA0NTUgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTQzOyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTYyOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDY1ICJzY2FubmVyLmwiCisjbGluZSA0NTYgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTQ0OyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTYzOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDY2ICJzY2FubmVyLmwiCisjbGluZSA0NTcgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTQ1OyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTY0OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDY3ICJzY2FubmVyLmwiCisjbGluZSA0NTggInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTQ2OyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTY1OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDY4ICJzY2FubmVyLmwiCisjbGluZSA0NTkgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTQ3OyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTY2OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDY5ICJzY2FubmVyLmwiCisjbGluZSA0NjAgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTQ4OyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTY3OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDcwICJzY2FubmVyLmwiCisjbGluZSA0NjEgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTQ5OyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTY4OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDcxICJzY2FubmVyLmwiCisjbGluZSA0NjIgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTUxOyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTY5OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDcyICJzY2FubmVyLmwiCisjbGluZSA0NjMgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTUyOyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTcwOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDczICJzY2FubmVyLmwiCisjbGluZSA0NjQgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTUzOyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTcxOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDc1ICJzY2FubmVyLmwiCisjbGluZSA0NjYgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMTM7IHJldHVybiBOVU07IH0KIAlZWV9CUkVBSwogY2FzZSAxNzI6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSA0NzYgInNjYW5uZXIubCIKKyNsaW5lIDQ2NyAic2Nhbm5lci5sIgogeyB5eWx2YWwtPmkgPSAweDAxOyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTczOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDc3ICJzY2FubmVyLmwiCisjbGluZSA0NjggInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMHgwMjsgcmV0dXJuIE5VTTsgfQogCVlZX0JSRUFLCiBjYXNlIDE3NDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDQ3OCAic2Nhbm5lci5sIgorI2xpbmUgNDY5ICJzY2FubmVyLmwiCiB7IHl5bHZhbC0+aSA9IDB4MDQ7IHJldHVybiBOVU07IH0KIAlZWV9CUkVBSwogY2FzZSAxNzU6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSA0NzkgInNjYW5uZXIubCIKKyNsaW5lIDQ3MCAic2Nhbm5lci5sIgogeyB5eWx2YWwtPmkgPSAweDA4OyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTc2OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDgwICJzY2FubmVyLmwiCisjbGluZSA0NzEgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMHgxMDsgcmV0dXJuIE5VTTsgfQogCVlZX0JSRUFLCiBjYXNlIDE3NzoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDQ4MSAic2Nhbm5lci5sIgorI2xpbmUgNDcyICJzY2FubmVyLmwiCiB7IHl5bHZhbC0+aSA9IDB4MjA7IHJldHVybiBOVU07IH0KIAlZWV9CUkVBSwogY2FzZSAxNzg6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSA0ODIgInNjYW5uZXIubCIKKyNsaW5lIDQ3MyAic2Nhbm5lci5sIgogeyB5eWx2YWwtPmkgPSAweDQwOyByZXR1cm4gTlVNOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTc5OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDgzICJzY2FubmVyLmwiCisjbGluZSA0NzQgInNjYW5uZXIubCIKIHsgeXlsdmFsLT5pID0gMHg4MDsgcmV0dXJuIE5VTTsgfQogCVlZX0JSRUFLCiBjYXNlIDE4MDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDQ4NCAic2Nhbm5lci5sIgorI2xpbmUgNDc1ICJzY2FubmVyLmwiCiB7CiAJCQkgeXlsdmFsLT5zID0gc2R1cCh5eWV4dHJhLCAoY2hhciAqKXl5dGV4dCk7IHJldHVybiBJRDsgfQogCVlZX0JSRUFLCiBjYXNlIDE4MToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDQ4NiAic2Nhbm5lci5sIgorI2xpbmUgNDc3ICJzY2FubmVyLmwiCiB7IHl5bHZhbC0+cyA9IHNkdXAoeXlleHRyYSwgKGNoYXIgKil5eXRleHQgKyAxKTsgcmV0dXJuIElEOyB9CiAJWVlfQlJFQUsKIGNhc2UgMTgyOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgNDg3ICJzY2FubmVyLmwiCi17Ci0JCQlicGZfZXJyb3IoeXlleHRyYSwgImlsbGVnYWwgdG9rZW46ICVzIiwgeXl0ZXh0KTsgfQorI2xpbmUgNDc4ICJzY2FubmVyLmwiCit7IHJldHVybiBMRVhfRVJST1I7IH0KIAlZWV9CUkVBSwogY2FzZSAxODM6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSA0ODkgInNjYW5uZXIubCIKLXsgYnBmX2Vycm9yKHl5ZXh0cmEsICJpbGxlZ2FsIGNoYXIgJyVjJyIsICp5eXRleHQpOyB9Ci0JWVlfQlJFQUsKLWNhc2UgMTg0OgotWVlfUlVMRV9TRVRVUAotI2xpbmUgNDkwICJzY2FubmVyLmwiCisjbGluZSA0NzkgInNjYW5uZXIubCIKIEVDSE87CiAJWVlfQlJFQUsKLSNsaW5lIDQyNTkgInNjYW5uZXIuYyIKKyNsaW5lIDQ0MDYgInNjYW5uZXIuYyIKIGNhc2UgWVlfU1RBVEVfRU9GKElOSVRJQUwpOgogCXl5dGVybWluYXRlKCk7CiAKQEAgLTQyNzMsNyArNDQyMCw3IEBACiAJCQkvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MKIAkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1c2VyCiAJCQkgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNhbGxlZAotCQkJICogcGNhcF9sZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJlCisJCQkgKiB5eWxleCgpLiAgSWYgc28sIHRoZW4gd2UgaGF2ZSB0byBhc3N1cmUKIAkJCSAqIGNvbnNpc3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9CVUZGRVIgYW5kIG91cgogCQkJICogZ2xvYmFscy4gIEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIHNvLCBiZWNhdXNlCiAJCQkgKiB0aGlzIGlzIHRoZSBmaXJzdCBhY3Rpb24gKG90aGVyIHRoYW4gcG9zc2libHkgYQpAQCAtNDMzNCw3ICs0NDgxLDcgQEAKIAkJCQl7CiAJCQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOwogCi0JCQkJaWYgKCBwY2FwX3dyYXAoeXlzY2FubmVyICkgKQorCQkJCWlmICggeXl3cmFwKCB5eXNjYW5uZXIgKSApCiAJCQkJCXsKIAkJCQkJLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJlIGluCiAJCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0IHVwCkBAIC00Mzg4LDcgKzQ1MzUsNyBAQAogCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KIAkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCiAJfSAvKiBlbmQgb2YgdXNlcidzIGRlY2xhcmF0aW9ucyAqLwotfSAvKiBlbmQgb2YgcGNhcF9sZXggKi8KK30gLyogZW5kIG9mIHl5bGV4ICovCiAKIC8qIHl5X2dldF9uZXh0X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgogICoKQEAgLTQ0NjcsNyArNDYxNCw4IEBACiAKIAkJCQliLT55eV9jaF9idWYgPSAoY2hhciAqKQogCQkJCQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLwotCQkJCQlwY2FwX3JlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7CisJCQkJCXl5cmVhbGxvYyggKHZvaWQgKikgYi0+eXlfY2hfYnVmLAorCQkJCQkJCSAoeXlfc2l6ZV90KSAoYi0+eXlfYnVmX3NpemUgKyAyKSAsIHl5c2Nhbm5lciApOwogCQkJCX0KIAkJCWVsc2UKIAkJCQkvKiBDYW4ndCBncm93IGl0LCB3ZSBkb24ndCBvd24gaXQuICovCkBAIC00NDk5LDcgKzQ2NDcsNyBAQAogCQlpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkKIAkJCXsKIAkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOwotCQkJcGNhcF9yZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOworCQkJeXlyZXN0YXJ0KCB5eWluICAsIHl5c2Nhbm5lcik7CiAJCQl9CiAKIAkJZWxzZQpAQCAtNDUxNiw5ICs0NjY0LDEyIEBACiAJaWYgKCh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7CiAJCS8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCiAJCWludCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAxKTsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSBwY2FwX3JlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5cmVhbGxvYygKKwkJCSh2b2lkICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLCAoeXlfc2l6ZV90KSBuZXdfc2l6ZSAsIHl5c2Nhbm5lciApOwogCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQogCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7CisJCS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplID0gKGludCkgKG5ld19zaXplIC0gMik7CiAJfQogCiAJeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOwpAQCAtNDU1MSwxMCArNDcwMiwxMCBAQAogCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCQl7CiAJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDE3MjkgKQotCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDE3MjQgKQorCQkJCXl5X2MgPSB5eV9tZXRhW3l5X2NdOwogCQkJfQotCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAoZmxleF9pbnQxNl90KSB5eV9jXTsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY107CiAJCX0KIAogCXJldHVybiB5eV9jdXJyZW50X3N0YXRlOwpAQCAtNDU4MCwxMSArNDczMSwxMSBAQAogCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJewogCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gMTcyOSApCi0JCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDE3MjQgKQorCQkJeXlfYyA9IHl5X21ldGFbeXlfY107CiAJCX0KLQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAoZmxleF9pbnQxNl90KSB5eV9jXTsKLQl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSAxNzI4KTsKKwl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXTsKKwl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSAxNzIzKTsKIAogCSh2b2lkKXl5ZzsKIAlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7CkBAIC00NjE5LDcgKzQ3NzAsNyBAQAogCiAJCWVsc2UKIAkJCXsgLyogbmVlZCBtb3JlIGlucHV0ICovCi0JCQlpbnQgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOworCQkJaW50IG9mZnNldCA9IChpbnQpICh5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIpOwogCQkJKyt5eWctPnl5X2NfYnVmX3A7CiAKIAkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQpAQCAtNDYzNiwxMyArNDc4NywxMyBAQAogCQkJCQkgKi8KIAogCQkJCQkvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLwotCQkJCQlwY2FwX3Jlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsKKwkJCQkJeXlyZXN0YXJ0KCB5eWluICwgeXlzY2FubmVyKTsKIAogCQkJCQkvKkZBTExUSFJPVUdIKi8KIAogCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKIAkJCQkJewotCQkJCQlpZiAoIHBjYXBfd3JhcCh5eXNjYW5uZXIgKSApCisJCQkJCWlmICggeXl3cmFwKCB5eXNjYW5uZXIgKSApCiAJCQkJCQlyZXR1cm4gMDsKIAogCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQpAQCAtNDY3NCwzNCArNDgyNSwzNCBAQAogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCiAgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJlc2V0IHRoZSBzdGFydCBjb25kaXRpb24gdG8gQGMgSU5JVElBTCAuCiAgKi8KLSAgICB2b2lkIHBjYXBfcmVzdGFydCAgKEZJTEUgKiBpbnB1dF9maWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQorICAgIHZvaWQgeXlyZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCiAJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7Ci0gICAgICAgIHBjYXBfZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKyAgICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwogCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQotICAgICAgICAgICAgcGNhcF9fY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOworICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlciggeXlpbiwgWVlfQlVGX1NJWkUgLCB5eXNjYW5uZXIpOwogCX0KIAotCXBjYXBfX2luaXRfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSLGlucHV0X2ZpbGUgLHl5c2Nhbm5lcik7Ci0JcGNhcF9fbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJeXlfaW5pdF9idWZmZXIoIFlZX0NVUlJFTlRfQlVGRkVSLCBpbnB1dF9maWxlICwgeXlzY2FubmVyKTsKKwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSggeXlzY2FubmVyICk7CiB9CiAKIC8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgYnVmZmVyLgogICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIuCiAgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KICAqLwotICAgIHZvaWQgcGNhcF9fc3dpdGNoX3RvX2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyAgICB2b2lkIHl5X3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCiAJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CiAJICogd2l0aAotCSAqCQlwY2FwX3BvcF9idWZmZXJfc3RhdGUoKTsKLQkgKgkJcGNhcF9wdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKKwkgKgkJeXlwb3BfYnVmZmVyX3N0YXRlKCk7CisJICoJCXl5cHVzaF9idWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7CiAgICAgICovCi0JcGNhcF9lbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKIAlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIgKQogCQlyZXR1cm47CiAKQEAgLTQ3MTQsMTcgKzQ4NjUsMTcgQEAKIAkJfQogCiAJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKLQlwY2FwX19sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSggeXlzY2FubmVyICk7CiAKIAkvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZwotCSAqIEVPRiAocGNhcF93cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMgZmxhZwotCSAqIGlzIGxvb2tlZCBhdCBpcyBhZnRlciBwY2FwX3dyYXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQorCSAqIEVPRiAoeXl3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMgZmxhZworCSAqIGlzIGxvb2tlZCBhdCBpcyBhZnRlciB5eXdyYXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQogCSAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgogCSAqLwogCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKIH0KIAotc3RhdGljIHZvaWQgcGNhcF9fbG9hZF9idWZmZXJfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCitzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAJeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOwpAQCAtNDczOSwzNSArNDg5MCwzNSBAQAogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCiAgKiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlLgogICovCi0gICAgWVlfQlVGRkVSX1NUQVRFIHBjYXBfX2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQorICAgIFlZX0JVRkZFUl9TVEFURSB5eV9jcmVhdGVfYnVmZmVyICAoRklMRSAqIGZpbGUsIGludCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKIAlZWV9CVUZGRVJfU1RBVEUgYjsKICAgICAKLQliID0gKFlZX0JVRkZFUl9TVEFURSkgcGNhcF9hbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2MoIHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICwgeXlzY2FubmVyICk7CiAJaWYgKCAhIGIgKQotCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwY2FwX19jcmVhdGVfYnVmZmVyKCkiICk7CisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKIAotCWItPnl5X2J1Zl9zaXplID0gKHl5X3NpemVfdClzaXplOworCWItPnl5X2J1Zl9zaXplID0gc2l6ZTsKIAogCS8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKIAkgKiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4KIAkgKi8KLQliLT55eV9jaF9idWYgPSAoY2hhciAqKSBwY2FwX2FsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7CisJYi0+eXlfY2hfYnVmID0gKGNoYXIgKikgeXlhbGxvYyggKHl5X3NpemVfdCkgKGItPnl5X2J1Zl9zaXplICsgMikgLCB5eXNjYW5uZXIgKTsKIAlpZiAoICEgYi0+eXlfY2hfYnVmICkKLQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gcGNhcF9fY3JlYXRlX2J1ZmZlcigpIiApOworCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkiICk7CiAKIAliLT55eV9pc19vdXJfYnVmZmVyID0gMTsKIAotCXBjYXBfX2luaXRfYnVmZmVyKGIsZmlsZSAseXlzY2FubmVyKTsKKwl5eV9pbml0X2J1ZmZlciggYiwgZmlsZSAsIHl5c2Nhbm5lcik7CiAKIAlyZXR1cm4gYjsKIH0KIAogLyoqIERlc3Ryb3kgdGhlIGJ1ZmZlci4KLSAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCBwY2FwX19jcmVhdGVfYnVmZmVyKCkKKyAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCB5eV9jcmVhdGVfYnVmZmVyKCkKICAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgogICovCi0gICAgdm9pZCBwY2FwX19kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisgICAgdm9pZCB5eV9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCkBAIC00Nzc4LDI4ICs0OTI5LDI4IEBACiAJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CiAKIAlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQotCQlwY2FwX2ZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsKKwkJeXlmcmVlKCAodm9pZCAqKSBiLT55eV9jaF9idWYgLCB5eXNjYW5uZXIgKTsKIAotCXBjYXBfZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKKwl5eWZyZWUoICh2b2lkICopIGIgLCB5eXNjYW5uZXIgKTsKIH0KIAogLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KICAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBidWZmZXIsCi0gKiBzdWNoIGFzIGR1cmluZyBhIHBjYXBfcmVzdGFydCgpIG9yIGF0IEVPRi4KKyAqIHN1Y2ggYXMgZHVyaW5nIGEgeXlyZXN0YXJ0KCkgb3IgYXQgRU9GLgogICovCi0gICAgc3RhdGljIHZvaWQgcGNhcF9faW5pdF9idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQorICAgIHN0YXRpYyB2b2lkIHl5X2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIAogewogCWludCBvZXJybm8gPSBlcnJubzsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKLQlwY2FwX19mbHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsKKwl5eV9mbHVzaF9idWZmZXIoIGIgLCB5eXNjYW5uZXIpOwogCiAJYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7CiAJYi0+eXlfZmlsbF9idWZmZXIgPSAxOwogCi0gICAgLyogSWYgYiBpcyB0aGUgY3VycmVudCBidWZmZXIsIHRoZW4gcGNhcF9faW5pdF9idWZmZXIgd2FzIF9wcm9iYWJseV8KLSAgICAgKiBjYWxsZWQgZnJvbSBwY2FwX3Jlc3RhcnQoKSBvciB0aHJvdWdoIHl5X2dldF9uZXh0X2J1ZmZlci4KKyAgICAvKiBJZiBiIGlzIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiB5eV9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5XworICAgICAqIGNhbGxlZCBmcm9tIHl5cmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25leHRfYnVmZmVyLgogICAgICAqIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byByZXNldCB0aGUgbGluZW5vIG9yIGNvbHVtbi4KICAgICAgKi8KICAgICBpZiAoYiAhPSBZWV9DVVJSRU5UX0JVRkZFUil7CkBAIC00ODE2LDcgKzQ5NjcsNyBAQAogICogQHBhcmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0byBiZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJFTlRfQlVGRkVSLgogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCiAgKi8KLSAgICB2b2lkIHBjYXBfX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQorICAgIHZvaWQgeXlfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCWlmICggISBiICkKQEAgLTQ4MzcsNyArNDk4OCw3IEBACiAJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CiAKIAlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKQotCQlwY2FwX19sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJeXlfbG9hZF9idWZmZXJfc3RhdGUoIHl5c2Nhbm5lciApOwogfQogCiAvKiogUHVzaGVzIHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRoZSBuZXcgc3RhdGUgYmVjb21lcwpAQCAtNDg0NiwxNSArNDk5NywxNSBAQAogICogIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgc3RhdGUuCiAgKiAgQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCiAgKi8KLXZvaWQgcGNhcF9wdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit2b2lkIHl5cHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlwY2FwX2Vuc3VyZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsKKwl5eWVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsKIAotCS8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20gcGNhcF9fc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwkvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIuICovCiAJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCiAJCXsKIAkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwpAQCAtNDg2OCw4ICs1MDE5LDggQEAKIAkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wKys7CiAJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKIAotCS8qIGNvcGllZCBmcm9tIHBjYXBfX3N3aXRjaF90b19idWZmZXIuICovCi0JcGNhcF9fbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJLyogY29waWVkIGZyb20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSggeXlzY2FubmVyICk7CiAJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwogfQogCkBAIC00ODc3LDE5ICs1MDI4LDE5IEBACiAgKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVzIHRoZSBuZXcgdG9wLgogICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgogICovCi12b2lkIHBjYXBfcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQordm9pZCB5eXBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAJaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKIAkJcmV0dXJuOwogCi0JcGNhcF9fZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKTsKKwl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICwgeXlzY2FubmVyKTsKIAlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOwogCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPiAwKQogCQktLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKIAogCWlmIChZWV9DVVJSRU5UX0JVRkZFUikgewotCQlwY2FwX19sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJeXlfbG9hZF9idWZmZXJfc3RhdGUoIHl5c2Nhbm5lciApOwogCQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7CiAJfQogfQpAQCAtNDg5Nyw5ICs1MDQ4LDkgQEAKIC8qIEFsbG9jYXRlcyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCiAgKiAgR3VhcmFudGVlcyBzcGFjZSBmb3IgYXQgbGVhc3Qgb25lIHB1c2guCiAgKi8KLXN0YXRpYyB2b2lkIHBjYXBfZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQorc3RhdGljIHZvaWQgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0JaW50IG51bV90b19hbGxvYzsKKwl5eV9zaXplX3QgbnVtX3RvX2FsbG9jOwogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAogCWlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKQEAgLTQ5MDksMTEgKzUwNjAsMTEgQEAKIAkJICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KICAgICAgICAgICovCiAgICAgICBudW1fdG9fYWxsb2MgPSAxOyAvKiBBZnRlciBhbGwgdGhhdCB0YWxrLCB0aGlzIHdhcyBzZXQgdG8gMSBhbnl3YXlzLi4uICovCi0JCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKilwY2FwX2FsbG9jCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eWFsbG9jCiAJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCiAJCQkJCQkJCSwgeXlzY2FubmVyKTsKIAkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLQkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBjYXBfZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CiAKIAkJbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrLCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKIApAQCAtNDkyOCwxMiArNTA3OSwxMiBAQAogCQl5eV9zaXplX3QgZ3Jvd19zaXplID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOwogCiAJCW51bV90b19hbGxvYyA9IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCArIGdyb3dfc2l6ZTsKLQkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXBjYXBfcmVhbGxvYworCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlyZWFsbG9jCiAJCQkJCQkJCSh5eWctPnl5X2J1ZmZlcl9zdGFjaywKIAkJCQkJCQkJbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQogCQkJCQkJCQksIHl5c2Nhbm5lcik7CiAJCWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCi0JCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwY2FwX2Vuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwogCiAJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCiAJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CkBAIC00OTQ3LDcgKzUwOTgsNyBAQAogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCiAgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KICAqLwotWVlfQlVGRkVSX1NUQVRFIHBjYXBfX3NjYW5fYnVmZmVyICAoY2hhciAqIGJhc2UsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAJWVlfQlVGRkVSX1NUQVRFIGI7CiAgICAgCkBAIC00OTU3LDExICs1MTA4LDExIEBACiAJCS8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KIAkJcmV0dXJuIE5VTEw7CiAKLQliID0gKFlZX0JVRkZFUl9TVEFURSkgcGNhcF9hbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2MoIHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICwgeXlzY2FubmVyICk7CiAJaWYgKCAhIGIgKQotCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiBwY2FwX19zY2FuX2J1ZmZlcigpIiApOworCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9zY2FuX2J1ZmZlcigpIiApOwogCi0JYi0+eXlfYnVmX3NpemUgPSBzaXplIC0gMjsJLyogIi0gMiIgdG8gdGFrZSBjYXJlIG9mIEVPQidzICovCisJYi0+eXlfYnVmX3NpemUgPSAoaW50KSAoc2l6ZSAtIDIpOwkvKiAiLSAyIiB0byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KIAliLT55eV9idWZfcG9zID0gYi0+eXlfY2hfYnVmID0gYmFzZTsKIAliLT55eV9pc19vdXJfYnVmZmVyID0gMDsKIAliLT55eV9pbnB1dF9maWxlID0gTlVMTDsKQEAgLTQ5NzEsMzMgKzUxMjIsMzMgQEAKIAliLT55eV9maWxsX2J1ZmZlciA9IDA7CiAJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CiAKLQlwY2FwX19zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOworCXl5X3N3aXRjaF90b19idWZmZXIoIGIgLCB5eXNjYW5uZXIgKTsKIAogCXJldHVybiBiOwogfQogCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIHBjYXBfbGV4KCkgd2lsbAorLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQgY2FsbCB0byB5eWxleCgpIHdpbGwKICAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgc3RyLgogICogQHBhcmFtIHl5c3RyIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHNjYW4KICAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgogICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCiAgKiBAbm90ZSBJZiB5b3Ugd2FudCB0byBzY2FuIGJ5dGVzIHRoYXQgbWF5IGNvbnRhaW4gTlVMIHZhbHVlcywgdGhlbiB1c2UKLSAqICAgICAgIHBjYXBfX3NjYW5fYnl0ZXMoKSBpbnN0ZWFkLgorICogICAgICAgeXlfc2Nhbl9ieXRlcygpIGluc3RlYWQuCiAgKi8KLVlZX0JVRkZFUl9TVEFURSBwY2FwX19zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogeXlzdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKGNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICAKLQlyZXR1cm4gcGNhcF9fc2Nhbl9ieXRlcyh5eXN0ciwoaW50KSBzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOworCXJldHVybiB5eV9zY2FuX2J5dGVzKCB5eXN0ciwgKGludCkgc3RybGVuKHl5c3RyKSAsIHl5c2Nhbm5lcik7CiB9CiAKLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHBjYXBfbGV4KCkgd2lsbAorLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCiAgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgogICogQHBhcmFtIHl5Ynl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KICAqIEBwYXJhbSBfeXlieXRlc19sZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCiAgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KICAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgogICovCi1ZWV9CVUZGRVJfU1RBVEUgcGNhcF9fc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQorWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgIChjb25zdCBjaGFyICogeXlieXRlcywgaW50ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAJWVlfQlVGRkVSX1NUQVRFIGI7CiAJY2hhciAqYnVmOwpAQCAtNTAwNiwxOCArNTE1NywxOCBAQAogICAgIAogCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLwogCW4gPSAoeXlfc2l6ZV90KSAoX3l5Ynl0ZXNfbGVuICsgMik7Ci0JYnVmID0gKGNoYXIgKikgcGNhcF9hbGxvYyhuICx5eXNjYW5uZXIgKTsKKwlidWYgPSAoY2hhciAqKSB5eWFsbG9jKCBuICwgeXlzY2FubmVyICk7CiAJaWYgKCAhIGJ1ZiApCi0JCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHBjYXBfX3NjYW5fYnl0ZXMoKSIgKTsKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9ieXRlcygpIiApOwogCiAJZm9yICggaSA9IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSApCiAJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CiAKIAlidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CiAKLQliID0gcGNhcF9fc2Nhbl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5lcik7CisJYiA9IHl5X3NjYW5fYnVmZmVyKCBidWYsIG4gLCB5eXNjYW5uZXIpOwogCWlmICggISBiICkKLQkJWVlfRkFUQUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHBjYXBfX3NjYW5fYnl0ZXMoKSIgKTsKKwkJWVlfRkFUQUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsKIAogCS8qIEl0J3Mgb2theSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBzaG91bGQgdGhyb3cgaXQKIAkgKiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KQEAgLTUwMzEsMTEgKzUxODIsMTEgQEAKICNkZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIKICNlbmRpZgogCi1zdGF0aWMgdm9pZCB5eW5vcmV0dXJuIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIqIG1zZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3N0YXRpYyB2b2lkIHl5bm9yZXR1cm4geXlfZmF0YWxfZXJyb3IgKGNvbnN0IGNoYXIqIG1zZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKIAlzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAJKHZvaWQpeXlnOwotCSh2b2lkKSBmcHJpbnRmKCBzdGRlcnIsICIlc1xuIiwgbXNnICk7CisJZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOwogCWV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOwogfQogCkBAIC01MDYxLDcgKzUyMTIsNyBAQAogLyoqIEdldCB0aGUgdXNlci1kZWZpbmVkIGRhdGEgZm9yIHRoaXMgc2Nhbm5lci4KICAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgogICovCi1ZWV9FWFRSQV9UWVBFIHBjYXBfZ2V0X2V4dHJhICAoeXlzY2FuX3QgeXlzY2FubmVyKQorWVlfRVhUUkFfVFlQRSB5eWdldF9leHRyYSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAgICAgcmV0dXJuIHl5ZXh0cmE7CkBAIC01MDcwLDcgKzUyMjEsNyBAQAogLyoqIEdldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KICAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgogICovCi1pbnQgcGNhcF9nZXRfbGluZW5vICAoeXlzY2FuX3QgeXlzY2FubmVyKQoraW50IHl5Z2V0X2xpbmVubyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKQEAgLTUwODMsNyArNTIzNCw3IEBACiAvKiogR2V0IHRoZSBjdXJyZW50IGNvbHVtbiBudW1iZXIuCiAgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KICAqLwotaW50IHBjYXBfZ2V0X2NvbHVtbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK2ludCB5eWdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCkBAIC01MDk2LDcgKzUyNDcsNyBAQAogLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFtLgogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCiAgKi8KLUZJTEUgKnBjYXBfZ2V0X2luICAoeXlzY2FuX3QgeXlzY2FubmVyKQorRklMRSAqeXlnZXRfaW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogICAgIHJldHVybiB5eWluOwpAQCAtNTEwNSw3ICs1MjU2LDcgQEAKIC8qKiBHZXQgdGhlIG91dHB1dCBzdHJlYW0uCiAgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KICAqLwotRklMRSAqcGNhcF9nZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQorRklMRSAqeXlnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQogewogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKICAgICByZXR1cm4geXlvdXQ7CkBAIC01MTE0LDcgKzUyNjUsNyBAQAogLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2VuLgogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCiAgKi8KLWludCBwY2FwX2dldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQoraW50IHl5Z2V0X2xlbmcgICh5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogICAgIHJldHVybiB5eWxlbmc7CkBAIC01MTI0LDcgKzUyNzUsNyBAQAogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCiAgKi8KIAotY2hhciAqcGNhcF9nZXRfdGV4dCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK2NoYXIgKnl5Z2V0X3RleHQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogICAgIHJldHVybiB5eXRleHQ7CkBAIC01MTM0LDcgKzUyODUsNyBAQAogICogQHBhcmFtIHVzZXJfZGVmaW5lZCBUaGUgZGF0YSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzY2FubmVyLgogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCiAgKi8KLXZvaWQgcGNhcF9zZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgIHVzZXJfZGVmaW5lZCAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3ZvaWQgeXlzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgIHVzZXJfZGVmaW5lZCAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAgICAgeXlleHRyYSA9IHVzZXJfZGVmaW5lZCA7CkBAIC01MTQ0LDEzICs1Mjk1LDEzIEBACiAgKiBAcGFyYW0gX2xpbmVfbnVtYmVyIGxpbmUgbnVtYmVyCiAgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KICAqLwotdm9pZCBwY2FwX3NldF9saW5lbm8gKGludCAgX2xpbmVfbnVtYmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQordm9pZCB5eXNldF9saW5lbm8gKGludCAgX2xpbmVfbnVtYmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAogICAgICAgICAvKiBsaW5lbm8gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLwogICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAicGNhcF9zZXRfbGluZW5vIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgKTsKKyAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJ5eXNldF9saW5lbm8gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiApOwogICAgIAogICAgIHl5bGluZW5vID0gX2xpbmVfbnVtYmVyOwogfQpAQCAtNTE1OSwxMyArNTMxMCwxMyBAQAogICogQHBhcmFtIF9jb2x1bW5fbm8gY29sdW1uIG51bWJlcgogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCiAgKi8KLXZvaWQgcGNhcF9zZXRfY29sdW1uIChpbnQgIF9jb2x1bW5fbm8gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit2b2lkIHl5c2V0X2NvbHVtbiAoaW50ICBfY29sdW1uX25vICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAogICAgICAgICAvKiBjb2x1bW4gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLwogICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAicGNhcF9zZXRfY29sdW1uIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgKTsKKyAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJ5eXNldF9jb2x1bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiApOwogICAgIAogICAgIHl5Y29sdW1uID0gX2NvbHVtbl9ubzsKIH0KQEAgLTUxNzQsMjcgKzUzMjUsMjcgQEAKICAqIGlucHV0IGJ1ZmZlci4KICAqIEBwYXJhbSBfaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLgogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCi0gKiBAc2VlIHBjYXBfX3N3aXRjaF90b19idWZmZXIKKyAqIEBzZWUgeXlfc3dpdGNoX3RvX2J1ZmZlcgogICovCi12b2lkIHBjYXBfc2V0X2luIChGSUxFICogIF9pbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit2b2lkIHl5c2V0X2luIChGSUxFICogIF9pbl9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogICAgIHl5aW4gPSBfaW5fc3RyIDsKIH0KIAotdm9pZCBwY2FwX3NldF9vdXQgKEZJTEUgKiAgX291dF9zdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit2b2lkIHl5c2V0X291dCAoRklMRSAqICBfb3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAgICAgeXlvdXQgPSBfb3V0X3N0ciA7CiB9CiAKLWludCBwY2FwX2dldF9kZWJ1ZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK2ludCB5eWdldF9kZWJ1ZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAgICAgcmV0dXJuIHl5X2ZsZXhfZGVidWc7CiB9CiAKLXZvaWQgcGNhcF9zZXRfZGVidWcgKGludCAgX2JkZWJ1ZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3ZvaWQgeXlzZXRfZGVidWcgKGludCAgX2JkZWJ1ZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAgICAgeXlfZmxleF9kZWJ1ZyA9IF9iZGVidWcgOwpAQCAtNTIwMiwxMyArNTM1MywxMyBAQAogCiAvKiBBY2Nlc3NvciBtZXRob2RzIGZvciB5eWx2YWwgYW5kIHl5bGxvYyAqLwogCi1ZWVNUWVBFICogcGNhcF9nZXRfbHZhbCAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK1lZU1RZUEUgKiB5eWdldF9sdmFsICAoeXlzY2FuX3QgeXlzY2FubmVyKQogewogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKICAgICByZXR1cm4geXlsdmFsOwogfQogCi12b2lkIHBjYXBfc2V0X2x2YWwgKFlZU1RZUEUgKiAgeXlsdmFsX3BhcmFtICwgeXlzY2FuX3QgeXlzY2FubmVyKQordm9pZCB5eXNldF9sdmFsIChZWVNUWVBFICogIHl5bHZhbF9wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAgICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOwpAQCAtNTIxNiwyMCArNTM2NywxOCBAQAogCiAvKiBVc2VyLXZpc2libGUgQVBJICovCiAKLS8qIHBjYXBfbGV4X2luaXQgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGNyZWF0ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBzbyBpdCBpcworLyogeXlsZXhfaW5pdCBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgY3JlYXRlcyB0aGUgc2Nhbm5lciBpdHNlbGYsIHNvIGl0IGlzCiAgKiB0aGUgT05MWSByZWVudHJhbnQgZnVuY3Rpb24gdGhhdCBkb2Vzbid0IHRha2UgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuCiAgKiBUaGF0J3Mgd2h5IHdlIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBkZWNsYXJhdGlvbiwgaW5zdGVhZCBvZiB1c2luZyBvdXIgbWFjcm9zLgogICovCi0KLWludCBwY2FwX2xleF9pbml0KHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscykKLQoraW50IHl5bGV4X2luaXQoeXlzY2FuX3QqIHB0cl95eV9nbG9iYWxzKQogewogICAgIGlmIChwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKICAgICAgICAgZXJybm8gPSBFSU5WQUw7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KIAotICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgcGNhcF9hbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksIE5VTEwgKTsKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHl5YWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7CiAKICAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpewogICAgICAgICBlcnJubyA9IEVOT01FTTsKQEAgLTUyNDIsMjcgKzUzOTEsMjUgQEAKICAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7CiB9CiAKLS8qIHBjYXBfbGV4X2luaXRfZXh0cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgcGNhcF9sZXhfaW5pdCwgYnV0IGZvbGxvd3MgdGhlCisvKiB5eWxleF9pbml0X2V4dHJhIGhhcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzIHl5bGV4X2luaXQsIGJ1dCBmb2xsb3dzIHRoZQogICogY29udmVudGlvbiBvZiB0YWtpbmcgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuIE5vdGUgaG93ZXZlciwgdGhhdAogICogdGhpcyBpcyBhICpwb2ludGVyKiB0byBhIHNjYW5uZXIsIGFzIGl0IHdpbGwgYmUgYWxsb2NhdGVkIGJ5IHRoaXMgY2FsbCAoYW5kCiAgKiBpcyB0aGUgcmVhc29uLCB0b28sIHdoeSB0aGlzIGZ1bmN0aW9uIGFsc28gbXVzdCBoYW5kbGUgaXRzIG93biBkZWNsYXJhdGlvbikuCi0gKiBUaGUgdXNlciBkZWZpbmVkIHZhbHVlIGluIHRoZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJlIGF2YWlsYWJsZSB0byBwY2FwX2FsbG9jIGluCisgKiBUaGUgdXNlciBkZWZpbmVkIHZhbHVlIGluIHRoZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJlIGF2YWlsYWJsZSB0byB5eWFsbG9jIGluCiAgKiB0aGUgeXlleHRyYSBmaWVsZC4KICAqLwotCi1pbnQgcGNhcF9sZXhfaW5pdF9leHRyYShZWV9FWFRSQV9UWVBFIHl5X3VzZXJfZGVmaW5lZCx5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMgKQotCitpbnQgeXlsZXhfaW5pdF9leHRyYSggWVlfRVhUUkFfVFlQRSB5eV91c2VyX2RlZmluZWQsIHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFscyApCiB7CiAgICAgc3RydWN0IHl5Z3V0c190IGR1bW15X3l5Z3V0czsKIAotICAgIHBjYXBfc2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICZkdW1teV95eWd1dHMpOworICAgIHl5c2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICZkdW1teV95eWd1dHMpOwogCiAgICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpewogICAgICAgICBlcnJubyA9IEVJTlZBTDsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCi0gICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSBwY2FwX2FsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOworICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgeXlhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksICZkdW1teV95eWd1dHMgKTsKIAogICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CiAgICAgICAgIGVycm5vID0gRU5PTUVNOwpAQCAtNTI3Myw3ICs1NDIwLDcgQEAKICAgICB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVhc2VzLiAqLwogICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5Z3V0c190KSk7CiAKLSAgICBwY2FwX3NldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAqcHRyX3l5X2dsb2JhbHMpOworICAgIHl5c2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICpwdHJfeXlfZ2xvYmFscyk7CiAKICAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxzICk7CiB9CkBAIC01MjgyLDcgKzU0MjksNyBAQAogewogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKICAgICAvKiBJbml0aWFsaXphdGlvbiBpcyB0aGUgc2FtZSBhcyBmb3IgdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4KLSAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHBjYXBfbGV4X2Rlc3Ryb3koKSwgc28gZG9uJ3QgYWxsb2NhdGUgaGVyZS4KKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHl5bGV4X2Rlc3Ryb3koKSwgc28gZG9uJ3QgYWxsb2NhdGUgaGVyZS4KICAgICAgKi8KIAogICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKQEAgLTUzMDYsMzcgKzU0NTMsMzcgQEAKICNlbmRpZgogCiAgICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBlcnJubyBvbiBlcnJvciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQotICAgICAqIHBjYXBfbGV4X2luaXQoKQorICAgICAqIHl5bGV4X2luaXQoKQogICAgICAqLwogICAgIHJldHVybiAwOwogfQogCi0vKiBwY2FwX2xleF9kZXN0cm95IGlzIGZvciBib3RoIHJlZW50cmFudCBhbmQgbm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KLWludCBwY2FwX2xleF9kZXN0cm95ICAoeXlzY2FuX3QgeXlzY2FubmVyKQorLyogeXlsZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQgYW5kIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMuICovCitpbnQgeXlsZXhfZGVzdHJveSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKICAgICAvKiBQb3AgdGhlIGJ1ZmZlciBzdGFjaywgZGVzdHJveWluZyBlYWNoIGVsZW1lbnQuICovCiAJd2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpewotCQlwY2FwX19kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIgKTsKKwkJeXlfZGVsZXRlX2J1ZmZlciggWVlfQ1VSUkVOVF9CVUZGRVIgLCB5eXNjYW5uZXIgKTsKIAkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKLQkJcGNhcF9wb3BfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lcik7CisJCXl5cG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOwogCX0KIAogCS8qIERlc3Ryb3kgdGhlIHN0YWNrIGl0c2VsZi4gKi8KLQlwY2FwX2ZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7CisJeXlmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICwgeXlzY2FubmVyKTsKIAl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7CiAKICAgICAvKiBEZXN0cm95IHRoZSBzdGFydCBjb25kaXRpb24gc3RhY2suICovCi0gICAgICAgIHBjYXBfZnJlZSh5eWctPnl5X3N0YXJ0X3N0YWNrICx5eXNjYW5uZXIgKTsKKyAgICAgICAgeXlmcmVlKCB5eWctPnl5X3N0YXJ0X3N0YWNrICwgeXlzY2FubmVyICk7CiAgICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSBOVUxMOwogCiAgICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGluIGEgbm9uLXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUKLSAgICAgKiBwY2FwX2xleCgpIGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8KKyAgICAgKiB5eWxleCgpIGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8KICAgICB5eV9pbml0X2dsb2JhbHMoIHl5c2Nhbm5lcik7CiAKICAgICAvKiBEZXN0cm95IHRoZSBtYWluIHN0cnVjdCAocmVlbnRyYW50IG9ubHkpLiAqLwotICAgIHBjYXBfZnJlZSAoIHl5c2Nhbm5lciAsIHl5c2Nhbm5lciApOworICAgIHl5ZnJlZSAoIHl5c2Nhbm5lciAsIHl5c2Nhbm5lciApOwogICAgIHl5c2Nhbm5lciA9IE5VTEw7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC01MzQ2LDcgKzU0OTMsNyBAQAogICovCiAKICNpZm5kZWYgeXl0ZXh0X3B0cgotc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2FubmVyKQorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgY29uc3QgY2hhciAqIHMyLCBpbnQgbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKIAlzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAJKHZvaWQpeXlnOwpAQCAtNTM1OCw3ICs1NTA1LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgWVlfTkVFRF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuIChjb25zdCBjaGFyICogcyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKIAlpbnQgbjsKIAlmb3IgKCBuID0gMDsgc1tuXTsgKytuICkKQEAgLTUzNjgsMTQgKzU1MTUsMTQgQEAKIH0KICNlbmRpZgogCi12b2lkICpwY2FwX2FsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit2b2lkICp5eWFsbG9jICh5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAJc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCSh2b2lkKXl5ZzsKIAlyZXR1cm4gbWFsbG9jKHNpemUpOwogfQogCi12b2lkICpwY2FwX3JlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit2b2lkICp5eXJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAJc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCSh2b2lkKXl5ZzsKQEAgLTUzOTAsMTcgKzU1MzcsMTYgQEAKIAlyZXR1cm4gcmVhbGxvYyhwdHIsIHNpemUpOwogfQogCi12b2lkIHBjYXBfZnJlZSAodm9pZCAqIHB0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3ZvaWQgeXlmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewogCXN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAkodm9pZCl5eWc7Ci0JZnJlZSggKGNoYXIgKikgcHRyICk7CS8qIHNlZSBwY2FwX3JlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLworCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBzZWUgeXlyZWFsbG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8KIH0KIAogI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKIAotI2xpbmUgNDkwICJzY2FubmVyLmwiCi0KKyNsaW5lIDQ3OSAic2Nhbm5lci5sIgogCiAKIC8qCmRpZmYgLS1naXQgYS9zY2FubmVyLmggYi9zY2FubmVyLmgKaW5kZXggZGM0NjRiZC4uOGVmYzQ3MCAxMDA2NDQKLS0tIGEvc2Nhbm5lci5oCisrKyBiL3NjYW5uZXIuaApAQCAtMzksMTEgKzM5LDIzMyBAQAogI2RlZmluZSBGTEVYX1NDQU5ORVIKICNkZWZpbmUgWVlfRkxFWF9NQUpPUl9WRVJTSU9OIDIKICNkZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJTSU9OIDYKLSNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDEKKyNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDQKICNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAwCiAjZGVmaW5lIEZMRVhfQkVUQQogI2VuZGlmCiAKKyNpZmRlZiB5eV9jcmVhdGVfYnVmZmVyCisjZGVmaW5lIHBjYXBfX2NyZWF0ZV9idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9jcmVhdGVfYnVmZmVyIHBjYXBfX2NyZWF0ZV9idWZmZXIKKyNlbmRpZgorCisjaWZkZWYgeXlfZGVsZXRlX2J1ZmZlcgorI2RlZmluZSBwY2FwX19kZWxldGVfYnVmZmVyX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlfZGVsZXRlX2J1ZmZlciBwY2FwX19kZWxldGVfYnVmZmVyCisjZW5kaWYKKworI2lmZGVmIHl5X3NjYW5fYnVmZmVyCisjZGVmaW5lIHBjYXBfX3NjYW5fYnVmZmVyX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlfc2Nhbl9idWZmZXIgcGNhcF9fc2Nhbl9idWZmZXIKKyNlbmRpZgorCisjaWZkZWYgeXlfc2Nhbl9zdHJpbmcKKyNkZWZpbmUgcGNhcF9fc2Nhbl9zdHJpbmdfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9zY2FuX3N0cmluZyBwY2FwX19zY2FuX3N0cmluZworI2VuZGlmCisKKyNpZmRlZiB5eV9zY2FuX2J5dGVzCisjZGVmaW5lIHBjYXBfX3NjYW5fYnl0ZXNfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9zY2FuX2J5dGVzIHBjYXBfX3NjYW5fYnl0ZXMKKyNlbmRpZgorCisjaWZkZWYgeXlfaW5pdF9idWZmZXIKKyNkZWZpbmUgcGNhcF9faW5pdF9idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eV9pbml0X2J1ZmZlciBwY2FwX19pbml0X2J1ZmZlcgorI2VuZGlmCisKKyNpZmRlZiB5eV9mbHVzaF9idWZmZXIKKyNkZWZpbmUgcGNhcF9fZmx1c2hfYnVmZmVyX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlfZmx1c2hfYnVmZmVyIHBjYXBfX2ZsdXNoX2J1ZmZlcgorI2VuZGlmCisKKyNpZmRlZiB5eV9sb2FkX2J1ZmZlcl9zdGF0ZQorI2RlZmluZSBwY2FwX19sb2FkX2J1ZmZlcl9zdGF0ZV9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5X2xvYWRfYnVmZmVyX3N0YXRlIHBjYXBfX2xvYWRfYnVmZmVyX3N0YXRlCisjZW5kaWYKKworI2lmZGVmIHl5X3N3aXRjaF90b19idWZmZXIKKyNkZWZpbmUgcGNhcF9fc3dpdGNoX3RvX2J1ZmZlcl9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5X3N3aXRjaF90b19idWZmZXIgcGNhcF9fc3dpdGNoX3RvX2J1ZmZlcgorI2VuZGlmCisKKyNpZmRlZiB5eXB1c2hfYnVmZmVyX3N0YXRlCisjZGVmaW5lIHBjYXBfcHVzaF9idWZmZXJfc3RhdGVfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXB1c2hfYnVmZmVyX3N0YXRlIHBjYXBfcHVzaF9idWZmZXJfc3RhdGUKKyNlbmRpZgorCisjaWZkZWYgeXlwb3BfYnVmZmVyX3N0YXRlCisjZGVmaW5lIHBjYXBfcG9wX2J1ZmZlcl9zdGF0ZV9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5cG9wX2J1ZmZlcl9zdGF0ZSBwY2FwX3BvcF9idWZmZXJfc3RhdGUKKyNlbmRpZgorCisjaWZkZWYgeXllbnN1cmVfYnVmZmVyX3N0YWNrCisjZGVmaW5lIHBjYXBfZW5zdXJlX2J1ZmZlcl9zdGFja19BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayBwY2FwX2Vuc3VyZV9idWZmZXJfc3RhY2sKKyNlbmRpZgorCisjaWZkZWYgeXlsZXgKKyNkZWZpbmUgcGNhcF9sZXhfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWxleCBwY2FwX2xleAorI2VuZGlmCisKKyNpZmRlZiB5eXJlc3RhcnQKKyNkZWZpbmUgcGNhcF9yZXN0YXJ0X0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlyZXN0YXJ0IHBjYXBfcmVzdGFydAorI2VuZGlmCisKKyNpZmRlZiB5eWxleF9pbml0CisjZGVmaW5lIHBjYXBfbGV4X2luaXRfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWxleF9pbml0IHBjYXBfbGV4X2luaXQKKyNlbmRpZgorCisjaWZkZWYgeXlsZXhfaW5pdF9leHRyYQorI2RlZmluZSBwY2FwX2xleF9pbml0X2V4dHJhX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlsZXhfaW5pdF9leHRyYSBwY2FwX2xleF9pbml0X2V4dHJhCisjZW5kaWYKKworI2lmZGVmIHl5bGV4X2Rlc3Ryb3kKKyNkZWZpbmUgcGNhcF9sZXhfZGVzdHJveV9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5bGV4X2Rlc3Ryb3kgcGNhcF9sZXhfZGVzdHJveQorI2VuZGlmCisKKyNpZmRlZiB5eWdldF9kZWJ1ZworI2RlZmluZSBwY2FwX2dldF9kZWJ1Z19BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X2RlYnVnIHBjYXBfZ2V0X2RlYnVnCisjZW5kaWYKKworI2lmZGVmIHl5c2V0X2RlYnVnCisjZGVmaW5lIHBjYXBfc2V0X2RlYnVnX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlzZXRfZGVidWcgcGNhcF9zZXRfZGVidWcKKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfZXh0cmEKKyNkZWZpbmUgcGNhcF9nZXRfZXh0cmFfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWdldF9leHRyYSBwY2FwX2dldF9leHRyYQorI2VuZGlmCisKKyNpZmRlZiB5eXNldF9leHRyYQorI2RlZmluZSBwY2FwX3NldF9leHRyYV9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5c2V0X2V4dHJhIHBjYXBfc2V0X2V4dHJhCisjZW5kaWYKKworI2lmZGVmIHl5Z2V0X2luCisjZGVmaW5lIHBjYXBfZ2V0X2luX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlnZXRfaW4gcGNhcF9nZXRfaW4KKyNlbmRpZgorCisjaWZkZWYgeXlzZXRfaW4KKyNkZWZpbmUgcGNhcF9zZXRfaW5fQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXNldF9pbiBwY2FwX3NldF9pbgorI2VuZGlmCisKKyNpZmRlZiB5eWdldF9vdXQKKyNkZWZpbmUgcGNhcF9nZXRfb3V0X0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlnZXRfb3V0IHBjYXBfZ2V0X291dAorI2VuZGlmCisKKyNpZmRlZiB5eXNldF9vdXQKKyNkZWZpbmUgcGNhcF9zZXRfb3V0X0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlzZXRfb3V0IHBjYXBfc2V0X291dAorI2VuZGlmCisKKyNpZmRlZiB5eWdldF9sZW5nCisjZGVmaW5lIHBjYXBfZ2V0X2xlbmdfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWdldF9sZW5nIHBjYXBfZ2V0X2xlbmcKKyNlbmRpZgorCisjaWZkZWYgeXlnZXRfdGV4dAorI2RlZmluZSBwY2FwX2dldF90ZXh0X0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlnZXRfdGV4dCBwY2FwX2dldF90ZXh0CisjZW5kaWYKKworI2lmZGVmIHl5Z2V0X2xpbmVubworI2RlZmluZSBwY2FwX2dldF9saW5lbm9fQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWdldF9saW5lbm8gcGNhcF9nZXRfbGluZW5vCisjZW5kaWYKKworI2lmZGVmIHl5c2V0X2xpbmVubworI2RlZmluZSBwY2FwX3NldF9saW5lbm9fQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXNldF9saW5lbm8gcGNhcF9zZXRfbGluZW5vCisjZW5kaWYKKworI2lmZGVmIHl5Z2V0X2NvbHVtbgorI2RlZmluZSBwY2FwX2dldF9jb2x1bW5fQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWdldF9jb2x1bW4gcGNhcF9nZXRfY29sdW1uCisjZW5kaWYKKworI2lmZGVmIHl5c2V0X2NvbHVtbgorI2RlZmluZSBwY2FwX3NldF9jb2x1bW5fQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXNldF9jb2x1bW4gcGNhcF9zZXRfY29sdW1uCisjZW5kaWYKKworI2lmZGVmIHl5d3JhcAorI2RlZmluZSBwY2FwX3dyYXBfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXdyYXAgcGNhcF93cmFwCisjZW5kaWYKKworI2lmZGVmIHl5Z2V0X2x2YWwKKyNkZWZpbmUgcGNhcF9nZXRfbHZhbF9BTFJFQURZX0RFRklORUQKKyNlbHNlCisjZGVmaW5lIHl5Z2V0X2x2YWwgcGNhcF9nZXRfbHZhbAorI2VuZGlmCisKKyNpZmRlZiB5eXNldF9sdmFsCisjZGVmaW5lIHBjYXBfc2V0X2x2YWxfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXNldF9sdmFsIHBjYXBfc2V0X2x2YWwKKyNlbmRpZgorCisjaWZkZWYgeXlhbGxvYworI2RlZmluZSBwY2FwX2FsbG9jX0FMUkVBRFlfREVGSU5FRAorI2Vsc2UKKyNkZWZpbmUgeXlhbGxvYyBwY2FwX2FsbG9jCisjZW5kaWYKKworI2lmZGVmIHl5cmVhbGxvYworI2RlZmluZSBwY2FwX3JlYWxsb2NfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eXJlYWxsb2MgcGNhcF9yZWFsbG9jCisjZW5kaWYKKworI2lmZGVmIHl5ZnJlZQorI2RlZmluZSBwY2FwX2ZyZWVfQUxSRUFEWV9ERUZJTkVECisjZWxzZQorI2RlZmluZSB5eWZyZWUgcGNhcF9mcmVlCisjZW5kaWYKKwogLyogRmlyc3QsIHdlIGRlYWwgd2l0aCAgcGxhdGZvcm0tc3BlY2lmaWMgb3IgY29tcGlsZXItc3BlY2lmaWMgaXNzdWVzLiAqLwogCiAvKiBiZWdpbiBzdGFuZGFyZCBDIGhlYWRlcnMuICovCkBAIC0xMTQsMTAgKzMzNiwxNiBAQAogI2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKICNlbmRpZgogCisjaWZuZGVmIFNJWkVfTUFYCisjZGVmaW5lIFNJWkVfTUFYICAgICAgICAgICAgICAgKH4oc2l6ZV90KTApCisjZW5kaWYKKwogI2VuZGlmIC8qICEgQzk5ICovCiAKICNlbmRpZiAvKiAhIEZMRVhJTlRfSCAqLwogCisvKiBiZWdpbiBzdGFuZGFyZCBDKysgaGVhZGVycy4gKi8KKwogLyogVE9ETzogdGhpcyBpcyBhbHdheXMgZGVmaW5lZCwgc28gaW5saW5lIGl0ICovCiAjZGVmaW5lIHl5Y29uc3QgY29uc3QKIApAQCAtMjE4LDIxICs0NDYsMjEgQEAKIAl9OwogI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCiAKLXZvaWQgcGNhcF9yZXN0YXJ0IChGSUxFICppbnB1dF9maWxlICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcGNhcF9fc3dpdGNoX3RvX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotWVlfQlVGRkVSX1NUQVRFIHBjYXBfX2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwY2FwX19kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBjYXBfX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCBwY2FwX3B1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci12b2lkIHBjYXBfcG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5cmVzdGFydCAoIEZJTEUgKmlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlfc3dpdGNoX3RvX2J1ZmZlciAoIFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9CVUZGRVJfU1RBVEUgeXlfY3JlYXRlX2J1ZmZlciAoIEZJTEUgKmZpbGUsIGludCBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5X2RlbGV0ZV9idWZmZXIgKCBZWV9CVUZGRVJfU1RBVEUgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eV9mbHVzaF9idWZmZXIgKCBZWV9CVUZGRVJfU1RBVEUgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlICggWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICggeXlzY2FuX3QgeXlzY2FubmVyICk7CiAKLVlZX0JVRkZFUl9TVEFURSBwY2FwX19zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Ci1ZWV9CVUZGRVJfU1RBVEUgcGNhcF9fc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLVlZX0JVRkZFUl9TVEFURSBwY2FwX19zY2FuX2J5dGVzICh5eWNvbnN0IGNoYXIgKmJ5dGVzLGludCBsZW4gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyICggY2hhciAqYmFzZSwgeXlfc2l6ZV90IHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoIGNvbnN0IGNoYXIgKnl5X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKCBjb25zdCBjaGFyICpieXRlcywgaW50IGxlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCi12b2lkICpwY2FwX2FsbG9jICh5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwotdm9pZCAqcGNhcF9yZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKLXZvaWQgcGNhcF9mcmVlICh2b2lkICogLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCAqeXlhbGxvYyAoIHl5X3NpemVfdCAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCAqeXlyZWFsbG9jICggdm9pZCAqLCB5eV9zaXplX3QgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlmcmVlICggdm9pZCAqICwgeXlzY2FuX3QgeXlzY2FubmVyICk7CiAKIC8qIEJlZ2luIHVzZXIgc2VjdDMgKi8KIApAQCAtMjU2LDQ2ICs0ODQsNDYgQEAKIAogI2RlZmluZSBZWV9FWFRSQV9UWVBFIGNvbXBpbGVyX3N0YXRlX3QgKgogCi1pbnQgcGNhcF9sZXhfaW5pdCAoeXlzY2FuX3QqIHNjYW5uZXIpOworaW50IHl5bGV4X2luaXQgKHl5c2Nhbl90KiBzY2FubmVyKTsKIAotaW50IHBjYXBfbGV4X2luaXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBzY2FubmVyKTsKK2ludCB5eWxleF9pbml0X2V4dHJhICggWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQsIHl5c2Nhbl90KiBzY2FubmVyKTsKIAogLyogQWNjZXNzb3IgbWV0aG9kcyB0byBnbG9iYWxzLgogICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5jZS4gKi8KIAotaW50IHBjYXBfbGV4X2Rlc3Ryb3kgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworaW50IHl5bGV4X2Rlc3Ryb3kgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAotaW50IHBjYXBfZ2V0X2RlYnVnICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK2ludCB5eWdldF9kZWJ1ZyAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCi12b2lkIHBjYXBfc2V0X2RlYnVnIChpbnQgZGVidWdfZmxhZyAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5c2V0X2RlYnVnICggaW50IGRlYnVnX2ZsYWcgLCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAotWVlfRVhUUkFfVFlQRSBwY2FwX2dldF9leHRyYSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitZWV9FWFRSQV9UWVBFIHl5Z2V0X2V4dHJhICggeXlzY2FuX3QgeXlzY2FubmVyICk7CiAKLXZvaWQgcGNhcF9zZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlzZXRfZXh0cmEgKCBZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCi1GSUxFICpwY2FwX2dldF9pbiAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitGSUxFICp5eWdldF9pbiAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCi12b2lkIHBjYXBfc2V0X2luICAoRklMRSAqIF9pbl9zdHIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eXNldF9pbiAgKCBGSUxFICogX2luX3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCi1GSUxFICpwY2FwX2dldF9vdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworRklMRSAqeXlnZXRfb3V0ICggeXlzY2FuX3QgeXlzY2FubmVyICk7CiAKLXZvaWQgcGNhcF9zZXRfb3V0ICAoRklMRSAqIF9vdXRfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlzZXRfb3V0ICAoIEZJTEUgKiBfb3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCi0JCQlpbnQgcGNhcF9nZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisJCQlpbnQgeXlnZXRfbGVuZyAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCi1jaGFyICpwY2FwX2dldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK2NoYXIgKnl5Z2V0X3RleHQgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAotaW50IHBjYXBfZ2V0X2xpbmVubyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitpbnQgeXlnZXRfbGluZW5vICggeXlzY2FuX3QgeXlzY2FubmVyICk7CiAKLXZvaWQgcGNhcF9zZXRfbGluZW5vIChpbnQgX2xpbmVfbnVtYmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlzZXRfbGluZW5vICggaW50IF9saW5lX251bWJlciAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCi1pbnQgcGNhcF9nZXRfY29sdW1uICAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitpbnQgeXlnZXRfY29sdW1uICAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCi12b2lkIHBjYXBfc2V0X2NvbHVtbiAoaW50IF9jb2x1bW5fbm8gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eXNldF9jb2x1bW4gKCBpbnQgX2NvbHVtbl9ubyAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCi1ZWVNUWVBFICogcGNhcF9nZXRfbHZhbCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitZWVNUWVBFICogeXlnZXRfbHZhbCAoIHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCi12b2lkIHBjYXBfc2V0X2x2YWwgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eXNldF9sdmFsICggWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCiAvKiBNYWNyb3MgYWZ0ZXIgdGhpcyBwb2ludCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0aW9ucyBpbgogICogc2VjdGlvbiAxLgpAQCAtMzAzLDE4ICs1MzEsMTggQEAKIAogI2lmbmRlZiBZWV9TS0lQX1lZV1JBUAogI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIGludCBwY2FwX3dyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworZXh0ZXJuICJDIiBpbnQgeXl3cmFwICggeXlzY2FuX3QgeXlzY2FubmVyICk7CiAjZWxzZQotZXh0ZXJuIGludCBwY2FwX3dyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworZXh0ZXJuIGludCB5eXdyYXAgKCB5eXNjYW5fdCB5eXNjYW5uZXIgKTsKICNlbmRpZgogI2VuZGlmCiAKICNpZm5kZWYgeXl0ZXh0X3B0cgotc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyICoseXljb25zdCBjaGFyICosaW50ICx5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5ICggY2hhciAqLCBjb25zdCBjaGFyICosIGludCAsIHl5c2Nhbl90IHl5c2Nhbm5lcik7CiAjZW5kaWYKIAogI2lmZGVmIFlZX05FRURfU1RSTEVOCi1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiAseXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKCBjb25zdCBjaGFyICogLCB5eXNjYW5fdCB5eXNjYW5uZXIpOwogI2VuZGlmCiAKICNpZm5kZWYgWVlfTk9fSU5QVVQKQEAgLTM0MiwxMCArNTcwLDEwIEBACiAjaWZuZGVmIFlZX0RFQ0wKICNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDEKIAotZXh0ZXJuIGludCBwY2FwX2xleCBcCi0gICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyKTsKK2V4dGVybiBpbnQgeXlsZXggXAorICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpOwogCi0jZGVmaW5lIFlZX0RFQ0wgaW50IHBjYXBfbGV4IFwKKyNkZWZpbmUgWVlfREVDTCBpbnQgeXlsZXggXAogICAgICAgICAgICAgICAgKFlZU1RZUEUgKiB5eWx2YWxfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiAjZW5kaWYgLyogIVlZX0RFQ0wgKi8KIApAQCAtMzYzLDkgKzU5MSwxNTQgQEAKICN1bmRlZiBZWV9ERUNMCiAjZW5kaWYKIAotI2xpbmUgNDkwICJzY2FubmVyLmwiCisjaWZuZGVmIHBjYXBfX2NyZWF0ZV9idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlfY3JlYXRlX2J1ZmZlcgorI2VuZGlmCisjaWZuZGVmIHBjYXBfX2RlbGV0ZV9idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlfZGVsZXRlX2J1ZmZlcgorI2VuZGlmCisjaWZuZGVmIHBjYXBfX3NjYW5fYnVmZmVyX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5X3NjYW5fYnVmZmVyCisjZW5kaWYKKyNpZm5kZWYgcGNhcF9fc2Nhbl9zdHJpbmdfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlfc2Nhbl9zdHJpbmcKKyNlbmRpZgorI2lmbmRlZiBwY2FwX19zY2FuX2J5dGVzX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5X3NjYW5fYnl0ZXMKKyNlbmRpZgorI2lmbmRlZiBwY2FwX19pbml0X2J1ZmZlcl9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eV9pbml0X2J1ZmZlcgorI2VuZGlmCisjaWZuZGVmIHBjYXBfX2ZsdXNoX2J1ZmZlcl9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eV9mbHVzaF9idWZmZXIKKyNlbmRpZgorI2lmbmRlZiBwY2FwX19sb2FkX2J1ZmZlcl9zdGF0ZV9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eV9sb2FkX2J1ZmZlcl9zdGF0ZQorI2VuZGlmCisjaWZuZGVmIHBjYXBfX3N3aXRjaF90b19idWZmZXJfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlfc3dpdGNoX3RvX2J1ZmZlcgorI2VuZGlmCisjaWZuZGVmIHBjYXBfcHVzaF9idWZmZXJfc3RhdGVfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlwdXNoX2J1ZmZlcl9zdGF0ZQorI2VuZGlmCisjaWZuZGVmIHBjYXBfcG9wX2J1ZmZlcl9zdGF0ZV9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eXBvcF9idWZmZXJfc3RhdGUKKyNlbmRpZgorI2lmbmRlZiBwY2FwX2Vuc3VyZV9idWZmZXJfc3RhY2tfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXllbnN1cmVfYnVmZmVyX3N0YWNrCisjZW5kaWYKKyNpZm5kZWYgcGNhcF9sZXhfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlsZXgKKyNlbmRpZgorI2lmbmRlZiBwY2FwX3Jlc3RhcnRfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlyZXN0YXJ0CisjZW5kaWYKKyNpZm5kZWYgcGNhcF9sZXhfaW5pdF9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eWxleF9pbml0CisjZW5kaWYKKyNpZm5kZWYgcGNhcF9sZXhfaW5pdF9leHRyYV9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eWxleF9pbml0X2V4dHJhCisjZW5kaWYKKyNpZm5kZWYgcGNhcF9sZXhfZGVzdHJveV9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eWxleF9kZXN0cm95CisjZW5kaWYKKyNpZm5kZWYgcGNhcF9nZXRfZGVidWdfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlnZXRfZGVidWcKKyNlbmRpZgorI2lmbmRlZiBwY2FwX3NldF9kZWJ1Z19BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eXNldF9kZWJ1ZworI2VuZGlmCisjaWZuZGVmIHBjYXBfZ2V0X2V4dHJhX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5Z2V0X2V4dHJhCisjZW5kaWYKKyNpZm5kZWYgcGNhcF9zZXRfZXh0cmFfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlzZXRfZXh0cmEKKyNlbmRpZgorI2lmbmRlZiBwY2FwX2dldF9pbl9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eWdldF9pbgorI2VuZGlmCisjaWZuZGVmIHBjYXBfc2V0X2luX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5c2V0X2luCisjZW5kaWYKKyNpZm5kZWYgcGNhcF9nZXRfb3V0X0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5Z2V0X291dAorI2VuZGlmCisjaWZuZGVmIHBjYXBfc2V0X291dF9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eXNldF9vdXQKKyNlbmRpZgorI2lmbmRlZiBwY2FwX2dldF9sZW5nX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5Z2V0X2xlbmcKKyNlbmRpZgorI2lmbmRlZiBwY2FwX2dldF90ZXh0X0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5Z2V0X3RleHQKKyNlbmRpZgorI2lmbmRlZiBwY2FwX2dldF9saW5lbm9fQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlnZXRfbGluZW5vCisjZW5kaWYKKyNpZm5kZWYgcGNhcF9zZXRfbGluZW5vX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5c2V0X2xpbmVubworI2VuZGlmCisjaWZuZGVmIHBjYXBfZ2V0X2NvbHVtbl9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eWdldF9jb2x1bW4KKyNlbmRpZgorI2lmbmRlZiBwY2FwX3NldF9jb2x1bW5fQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlzZXRfY29sdW1uCisjZW5kaWYKKyNpZm5kZWYgcGNhcF93cmFwX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5d3JhcAorI2VuZGlmCisjaWZuZGVmIHBjYXBfZ2V0X2x2YWxfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlnZXRfbHZhbAorI2VuZGlmCisjaWZuZGVmIHBjYXBfc2V0X2x2YWxfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlzZXRfbHZhbAorI2VuZGlmCisjaWZuZGVmIHBjYXBfZ2V0X2xsb2NfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlnZXRfbGxvYworI2VuZGlmCisjaWZuZGVmIHBjYXBfc2V0X2xsb2NfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlzZXRfbGxvYworI2VuZGlmCisjaWZuZGVmIHBjYXBfYWxsb2NfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlhbGxvYworI2VuZGlmCisjaWZuZGVmIHBjYXBfcmVhbGxvY19BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eXJlYWxsb2MKKyNlbmRpZgorI2lmbmRlZiBwY2FwX2ZyZWVfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlmcmVlCisjZW5kaWYKKyNpZm5kZWYgcGNhcF90ZXh0X0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5dGV4dAorI2VuZGlmCisjaWZuZGVmIHBjYXBfbGVuZ19BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eWxlbmcKKyNlbmRpZgorI2lmbmRlZiBwY2FwX2luX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5aW4KKyNlbmRpZgorI2lmbmRlZiBwY2FwX291dF9BTFJFQURZX0RFRklORUQKKyN1bmRlZiB5eW91dAorI2VuZGlmCisjaWZuZGVmIHBjYXBfX2ZsZXhfZGVidWdfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXlfZmxleF9kZWJ1ZworI2VuZGlmCisjaWZuZGVmIHBjYXBfbGluZW5vX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5bGluZW5vCisjZW5kaWYKKyNpZm5kZWYgcGNhcF90YWJsZXNfZmxvYWRfQUxSRUFEWV9ERUZJTkVECisjdW5kZWYgeXl0YWJsZXNfZmxvYWQKKyNlbmRpZgorI2lmbmRlZiBwY2FwX3RhYmxlc19kZXN0cm95X0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5dGFibGVzX2Rlc3Ryb3kKKyNlbmRpZgorI2lmbmRlZiBwY2FwX1RBQkxFU19OQU1FX0FMUkVBRFlfREVGSU5FRAorI3VuZGVmIHl5VEFCTEVTX05BTUUKKyNlbmRpZgorCisjbGluZSA0NzkgInNjYW5uZXIubCIKIAogCi0jbGluZSAzNzAgInNjYW5uZXIuaCIKKyNsaW5lIDc0MyAic2Nhbm5lci5oIgogI3VuZGVmIHBjYXBfSU5fSEVBREVSCiAjZW5kaWYgLyogcGNhcF9IRUFERVJfSCAqLwpkaWZmIC0tZ2l0IGEvc2Nhbm5lci5sIGIvc2Nhbm5lci5sCmluZGV4IGUwODkwYjQuLjA2YjlhY2MgMTAwNjQ0Ci0tLSBhL3NjYW5uZXIubAorKysgYi9zY2FubmVyLmwKQEAgLTg1LDcgKzg1LDYgQEAKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KIAotI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKICNpbmNsdWRlICJwY2FwLWludC5oIgpAQCAtMTQ3LDggKzE0Niw3IEBACiAjaW5jbHVkZSAib3MtcHJvdG8uaCIKICNlbmRpZgogCi1zdGF0aWMgaW50IHN0b2koY2hhciAqKTsKLXN0YXRpYyBpbmxpbmUgaW50IHhkdG9pKGludCk7CitzdGF0aWMgaW50IHN0b3UoY2hhciAqLCBZWVNUWVBFICosIGNvbXBpbGVyX3N0YXRlX3QgKik7CiAKIC8qCiAgKiBEaXNhYmxlIGRpYWdub3N0aWNzIGluIHRoZSBjb2RlIGdlbmVyYXRlZCBieSBGbGV4LgpAQCAtMzExLDEzICszMDksNyBAQAogcG9ydAkJcmV0dXJuIFBPUlQ7CiBwb3J0cmFuZ2UJcmV0dXJuIFBPUlRSQU5HRTsKIHByb3RvCQlyZXR1cm4gUFJPVE87Ci1wcm90b2NoYWluCXsKLSNpZmRlZiBOT19QUk9UT0NIQUlOCi0JCSAgYnBmX2Vycm9yKHl5ZXh0cmEsICIlcyBub3Qgc3VwcG9ydGVkIiwgeXl0ZXh0KTsKLSNlbHNlCi0JCSAgcmV0dXJuIFBST1RPQ0hBSU47Ci0jZW5kaWYKLQkJfQorcHJvdG9jaGFpbglyZXR1cm4gUFJPVE9DSEFJTjsKIAogZ2F0ZXdheQkJcmV0dXJuIEdBVEVXQVk7CiAKQEAgLTM0NSw2ICszMzcsOCBAQAogaW5ib3VuZAkJcmV0dXJuIElOQk9VTkQ7CiBvdXRib3VuZAlyZXR1cm4gT1VUQk9VTkQ7CiAKK2lmaW5kZXgJCXJldHVybiBJRklOREVYOworCiB2bGFuCQlyZXR1cm4gVkxBTjsKIG1wbHMJCXJldHVybiBNUExTOwogcHBwb2VkCQlyZXR1cm4gUFBQT0VEOwpAQCAtMzk3LDE1ICszOTEsOSBAQAogIj09IgkJCXJldHVybiAnPSc7CiAiPDwiCQkJcmV0dXJuIExTSDsKICI+PiIJCQlyZXR1cm4gUlNIOwotJHtCfQkJCXsgeXlsdmFsLT5lID0gcGNhcF9ldGhlcl9hdG9uKCgoY2hhciAqKXl5dGV4dCkrMSk7Ci0JCQkgIGlmICh5eWx2YWwtPmUgPT0gTlVMTCkKLQkJCQlicGZfZXJyb3IoeXlleHRyYSwgIm1hbGxvYyIpOwotCQkJICByZXR1cm4gQUlEOyB9Ci17TUFDfQkJCXsgeXlsdmFsLT5lID0gcGNhcF9ldGhlcl9hdG9uKChjaGFyICopeXl0ZXh0KTsKLQkJCSAgaWYgKHl5bHZhbC0+ZSA9PSBOVUxMKQotCQkJCWJwZl9lcnJvcih5eWV4dHJhLCAibWFsbG9jIik7Ci0JCQkgIHJldHVybiBFSUQ7IH0KLXtOfQkJCXsgeXlsdmFsLT5pID0gc3RvaSgoY2hhciAqKXl5dGV4dCk7IHJldHVybiBOVU07IH0KKyR7Qn0JCQl7IHl5bHZhbC0+cyA9IHNkdXAoeXlleHRyYSwgeXl0ZXh0KTsgcmV0dXJuIEFJRDsgfQore01BQ30JCQl7IHl5bHZhbC0+cyA9IHNkdXAoeXlleHRyYSwgeXl0ZXh0KTsgcmV0dXJuIEVJRDsgfQore059CQkJeyByZXR1cm4gc3RvdSh5eXRleHQsIHl5bHZhbCwgeXlleHRyYSk7IH0KICh7Tn1cLntOfSl8KHtOfVwue059XC57Tn0pfCh7Tn1cLntOfVwue059XC57Tn0pCXsKIAkJCXl5bHZhbC0+cyA9IHNkdXAoeXlleHRyYSwgKGNoYXIgKil5eXRleHQpOyByZXR1cm4gSElEOyB9CiB7VjZ9CQkJewpAQCAtNDE0LDc5ICs0MDIsODQgQEAKIAkJCSAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CiAJCQkgIGhpbnRzLmFpX2ZhbWlseSA9IEFGX0lORVQ2OwogCQkJICBoaW50cy5haV9mbGFncyA9IEFJX05VTUVSSUNIT1NUOwotCQkJICBpZiAoZ2V0YWRkcmluZm8oeXl0ZXh0LCBOVUxMLCAmaGludHMsICZyZXMpKQotCQkJCWJwZl9lcnJvcih5eWV4dHJhLCAiYm9ndXMgSVB2NiBhZGRyZXNzICVzIiwgeXl0ZXh0KTsKLQkJCSAgZWxzZSB7CisJCQkgIGlmIChnZXRhZGRyaW5mbyh5eXRleHQsIE5VTEwsICZoaW50cywgJnJlcykpIHsKKwkJCQlicGZfc2V0X2Vycm9yKHl5ZXh0cmEsICJib2d1cyBJUHY2IGFkZHJlc3MgJXMiLCB5eXRleHQpOworCQkJCXl5bHZhbC0+cyA9IE5VTEw7CisJCQkgIH0gZWxzZSB7CiAJCQkJZnJlZWFkZHJpbmZvKHJlcyk7Ci0JCQkJeXlsdmFsLT5zID0gc2R1cCh5eWV4dHJhLCAoY2hhciAqKXl5dGV4dCk7IHJldHVybiBISUQ2OworCQkJCXl5bHZhbC0+cyA9IHNkdXAoeXlleHRyYSwgKGNoYXIgKil5eXRleHQpOwogCQkJICB9CiAjZWxzZQotCQkJICBicGZfZXJyb3IoeXlleHRyYSwgIklQdjYgYWRkcmVzcyAlcyBub3Qgc3VwcG9ydGVkIiwgeXl0ZXh0KTsKKwkJCSAgYnBmX3NldF9lcnJvcih5eWV4dHJhLCAiSVB2NiBhZGRyZXNzICVzIG5vdCBzdXBwb3J0ZWQiLCB5eXRleHQpOworCQkJICB5eWx2YWwtPnMgPSBOVUxMOwogI2VuZGlmIC8qSU5FVDYqLworCQkJICByZXR1cm4gSElENjsKIAkJCX0KLXtCfTorKHtCfTorKSsJCXsgYnBmX2Vycm9yKHl5ZXh0cmEsICJib2d1cyBldGhlcm5ldCBhZGRyZXNzICVzIiwgeXl0ZXh0KTsgfQotaWNtcHR5cGUJCXsgeXlsdmFsLT5pID0gMDsgcmV0dXJuIE5VTTsgfQotaWNtcGNvZGUJCXsgeXlsdmFsLT5pID0gMTsgcmV0dXJuIE5VTTsgfQotaWNtcC1lY2hvcmVwbHkJCXsgeXlsdmFsLT5pID0gMDsgcmV0dXJuIE5VTTsgfQotaWNtcC11bnJlYWNoCQl7IHl5bHZhbC0+aSA9IDM7IHJldHVybiBOVU07IH0KLWljbXAtc291cmNlcXVlbmNoCXsgeXlsdmFsLT5pID0gNDsgcmV0dXJuIE5VTTsgfQotaWNtcC1yZWRpcmVjdAkJeyB5eWx2YWwtPmkgPSA1OyByZXR1cm4gTlVNOyB9Ci1pY21wLWVjaG8JCXsgeXlsdmFsLT5pID0gODsgcmV0dXJuIE5VTTsgfQotaWNtcC1yb3V0ZXJhZHZlcnQJeyB5eWx2YWwtPmkgPSA5OyByZXR1cm4gTlVNOyB9Ci1pY21wLXJvdXRlcnNvbGljaXQJeyB5eWx2YWwtPmkgPSAxMDsgcmV0dXJuIE5VTTsgfQotaWNtcC10aW14Y2VlZAkJeyB5eWx2YWwtPmkgPSAxMTsgcmV0dXJuIE5VTTsgfQotaWNtcC1wYXJhbXByb2IJCXsgeXlsdmFsLT5pID0gMTI7IHJldHVybiBOVU07IH0KLWljbXAtdHN0YW1wCQl7IHl5bHZhbC0+aSA9IDEzOyByZXR1cm4gTlVNOyB9Ci1pY21wLXRzdGFtcHJlcGx5CXsgeXlsdmFsLT5pID0gMTQ7IHJldHVybiBOVU07IH0KLWljbXAtaXJlcQkJeyB5eWx2YWwtPmkgPSAxNTsgcmV0dXJuIE5VTTsgfQotaWNtcC1pcmVxcmVwbHkJCXsgeXlsdmFsLT5pID0gMTY7IHJldHVybiBOVU07IH0KLWljbXAtbWFza3JlcQkJeyB5eWx2YWwtPmkgPSAxNzsgcmV0dXJuIE5VTTsgfQotaWNtcC1tYXNrcmVwbHkJCXsgeXlsdmFsLT5pID0gMTg7IHJldHVybiBOVU07IH0KK3tCfTorKHtCfTorKSsJCXsgYnBmX3NldF9lcnJvcih5eWV4dHJhLCAiYm9ndXMgZXRoZXJuZXQgYWRkcmVzcyAlcyIsIHl5dGV4dCk7IHl5bHZhbC0+cyA9IE5VTEw7IHJldHVybiBFSUQ7IH0KK2ljbXB0eXBlCQl7IHl5bHZhbC0+aCA9IDA7IHJldHVybiBOVU07IH0KK2ljbXBjb2RlCQl7IHl5bHZhbC0+aCA9IDE7IHJldHVybiBOVU07IH0KK2ljbXAtZWNob3JlcGx5CQl7IHl5bHZhbC0+aCA9IDA7IHJldHVybiBOVU07IH0KK2ljbXAtdW5yZWFjaAkJeyB5eWx2YWwtPmggPSAzOyByZXR1cm4gTlVNOyB9CitpY21wLXNvdXJjZXF1ZW5jaAl7IHl5bHZhbC0+aCA9IDQ7IHJldHVybiBOVU07IH0KK2ljbXAtcmVkaXJlY3QJCXsgeXlsdmFsLT5oID0gNTsgcmV0dXJuIE5VTTsgfQoraWNtcC1lY2hvCQl7IHl5bHZhbC0+aCA9IDg7IHJldHVybiBOVU07IH0KK2ljbXAtcm91dGVyYWR2ZXJ0CXsgeXlsdmFsLT5oID0gOTsgcmV0dXJuIE5VTTsgfQoraWNtcC1yb3V0ZXJzb2xpY2l0CXsgeXlsdmFsLT5oID0gMTA7IHJldHVybiBOVU07IH0KK2ljbXAtdGlteGNlZWQJCXsgeXlsdmFsLT5oID0gMTE7IHJldHVybiBOVU07IH0KK2ljbXAtcGFyYW1wcm9iCQl7IHl5bHZhbC0+aCA9IDEyOyByZXR1cm4gTlVNOyB9CitpY21wLXRzdGFtcAkJeyB5eWx2YWwtPmggPSAxMzsgcmV0dXJuIE5VTTsgfQoraWNtcC10c3RhbXByZXBseQl7IHl5bHZhbC0+aCA9IDE0OyByZXR1cm4gTlVNOyB9CitpY21wLWlyZXEJCXsgeXlsdmFsLT5oID0gMTU7IHJldHVybiBOVU07IH0KK2ljbXAtaXJlcXJlcGx5CQl7IHl5bHZhbC0+aCA9IDE2OyByZXR1cm4gTlVNOyB9CitpY21wLW1hc2tyZXEJCXsgeXlsdmFsLT5oID0gMTc7IHJldHVybiBOVU07IH0KK2ljbXAtbWFza3JlcGx5CQl7IHl5bHZhbC0+aCA9IDE4OyByZXR1cm4gTlVNOyB9CiAKLWljbXA2dHlwZSAgICAgICB7IHl5bHZhbC0+aSA9IDA7IHJldHVybiBOVU07IH0KLWljbXA2Y29kZSAgICAgICB7IHl5bHZhbC0+aSA9IDE7IHJldHVybiBOVU07IH0KK2ljbXA2dHlwZSAgICAgICB7IHl5bHZhbC0+aCA9IDA7IHJldHVybiBOVU07IH0KK2ljbXA2Y29kZSAgICAgICB7IHl5bHZhbC0+aCA9IDE7IHJldHVybiBOVU07IH0KIAotaWNtcDYtZWNobyAgICAgIHsgeXlsdmFsLT5pID0gMTI4OyByZXR1cm4gTlVNOyB9Ci1pY21wNi1lY2hvcmVwbHkgeyB5eWx2YWwtPmkgPSAxMjk7IHJldHVybiBOVU07IH0KLWljbXA2LW11bHRpY2FzdGxpc3RlbmVycXVlcnkgICAgeyB5eWx2YWwtPmkgPSAxMzA7IHJldHVybiBOVU07IH0KLWljbXA2LW11bHRpY2FzdGxpc3RlbmVycmVwb3J0djEgeyB5eWx2YWwtPmkgPSAxMzE7IHJldHVybiBOVU07IH0KLWljbXA2LW11bHRpY2FzdGxpc3RlbmVyZG9uZSAgICAgeyB5eWx2YWwtPmkgPSAxMzI7IHJldHVybiBOVU07IH0KLWljbXA2LXJvdXRlcnNvbGljaXQgICB7IHl5bHZhbC0+aSA9IDEzMzsgcmV0dXJuIE5VTTsgfQotaWNtcDYtcm91dGVyYWR2ZXJ0ICAgIHsgeXlsdmFsLT5pID0gMTM0OyByZXR1cm4gTlVNOyB9Ci1pY21wNi1uZWlnaGJvcnNvbGljaXQgeyB5eWx2YWwtPmkgPSAxMzU7IHJldHVybiBOVU07IH0KLWljbXA2LW5laWdoYm9yYWR2ZXJ0ICB7IHl5bHZhbC0+aSA9IDEzNjsgcmV0dXJuIE5VTTsgfQotaWNtcDYtcmVkaXJlY3QgICAgeyB5eWx2YWwtPmkgPSAxMzc7IHJldHVybiBOVU07IH0KLWljbXA2LXJvdXRlcnJlbnVtIHsgeXlsdmFsLT5pID0gMTM4OyByZXR1cm4gTlVNOyB9Ci1pY21wNi1ub2RlaW5mb3JtYXRpb25xdWVyeSAgICAgIHsgeXlsdmFsLT5pID0gMTM5OyByZXR1cm4gTlVNOyB9Ci1pY21wNi1ub2RlaW5mb3JtYXRpb25yZXNwb25zZSAgIHsgeXlsdmFsLT5pID0gMTQwOyByZXR1cm4gTlVNOyB9Ci1pY21wNi1pbmVpZ2hib3JkaXNjb3Zlcnlzb2xpY2l0IHsgeXlsdmFsLT5pID0gMTQxOyByZXR1cm4gTlVNOyB9Ci1pY21wNi1pbmVpZ2hib3JkaXNjb3ZlcnlhZHZlcnQgIHsgeXlsdmFsLT5pID0gMTQyOyByZXR1cm4gTlVNOyB9Ci1pY21wNi1tdWx0aWNhc3RsaXN0ZW5lcnJlcG9ydHYyIHsgeXlsdmFsLT5pID0gMTQzOyByZXR1cm4gTlVNOyB9Ci1pY21wNi1ob21lYWdlbnRkaXNjb3ZlcnlyZXF1ZXN0IHsgeXlsdmFsLT5pID0gMTQ0OyByZXR1cm4gTlVNOyB9Ci1pY21wNi1ob21lYWdlbnRkaXNjb3ZlcnlyZXBseSAgIHsgeXlsdmFsLT5pID0gMTQ1OyByZXR1cm4gTlVNOyB9Ci1pY21wNi1tb2JpbGVwcmVmaXhzb2xpY2l0ICAgICAgIHsgeXlsdmFsLT5pID0gMTQ2OyByZXR1cm4gTlVNOyB9Ci1pY21wNi1tb2JpbGVwcmVmaXhhZHZlcnQgICAgICAgIHsgeXlsdmFsLT5pID0gMTQ3OyByZXR1cm4gTlVNOyB9Ci1pY21wNi1jZXJ0cGF0aHNvbGljaXQgICAgICAgICAgIHsgeXlsdmFsLT5pID0gMTQ4OyByZXR1cm4gTlVNOyB9Ci1pY21wNi1jZXJ0cGF0aGFkdmVydCAgICAgICAgICAgIHsgeXlsdmFsLT5pID0gMTQ5OyByZXR1cm4gTlVNOyB9Ci1pY21wNi1tdWx0aWNhc3Ryb3V0ZXJhZHZlcnQgICAgIHsgeXlsdmFsLT5pID0gMTUxOyByZXR1cm4gTlVNOyB9Ci1pY21wNi1tdWx0aWNhc3Ryb3V0ZXJzb2xpY2l0ICAgIHsgeXlsdmFsLT5pID0gMTUyOyByZXR1cm4gTlVNOyB9Ci1pY21wNi1tdWx0aWNhc3Ryb3V0ZXJ0ZXJtICAgICAgIHsgeXlsdmFsLT5pID0gMTUzOyByZXR1cm4gTlVNOyB9CitpY21wNi1kZXN0aW5hdGlvbnVucmVhY2gJeyB5eWx2YWwtPmggPSAxOyByZXR1cm4gTlVNOyB9CitpY21wNi1wYWNrZXR0b29iaWcJCXsgeXlsdmFsLT5oID0gMjsgcmV0dXJuIE5VTTsgfQoraWNtcDYtdGltZWV4Y2VlZGVkCQl7IHl5bHZhbC0+aCA9IDM7IHJldHVybiBOVU07IH0KK2ljbXA2LXBhcmFtZXRlcnByb2JsZW0JCXsgeXlsdmFsLT5oID0gNDsgcmV0dXJuIE5VTTsgfQoraWNtcDYtZWNobyAgICAgIHsgeXlsdmFsLT5oID0gMTI4OyByZXR1cm4gTlVNOyB9CitpY21wNi1lY2hvcmVwbHkgeyB5eWx2YWwtPmggPSAxMjk7IHJldHVybiBOVU07IH0KK2ljbXA2LW11bHRpY2FzdGxpc3RlbmVycXVlcnkgICAgeyB5eWx2YWwtPmggPSAxMzA7IHJldHVybiBOVU07IH0KK2ljbXA2LW11bHRpY2FzdGxpc3RlbmVycmVwb3J0djEgeyB5eWx2YWwtPmggPSAxMzE7IHJldHVybiBOVU07IH0KK2ljbXA2LW11bHRpY2FzdGxpc3RlbmVyZG9uZSAgICAgeyB5eWx2YWwtPmggPSAxMzI7IHJldHVybiBOVU07IH0KK2ljbXA2LXJvdXRlcnNvbGljaXQgICB7IHl5bHZhbC0+aCA9IDEzMzsgcmV0dXJuIE5VTTsgfQoraWNtcDYtcm91dGVyYWR2ZXJ0ICAgIHsgeXlsdmFsLT5oID0gMTM0OyByZXR1cm4gTlVNOyB9CitpY21wNi1uZWlnaGJvcnNvbGljaXQgeyB5eWx2YWwtPmggPSAxMzU7IHJldHVybiBOVU07IH0KK2ljbXA2LW5laWdoYm9yYWR2ZXJ0ICB7IHl5bHZhbC0+aCA9IDEzNjsgcmV0dXJuIE5VTTsgfQoraWNtcDYtcmVkaXJlY3QgICAgeyB5eWx2YWwtPmggPSAxMzc7IHJldHVybiBOVU07IH0KK2ljbXA2LXJvdXRlcnJlbnVtIHsgeXlsdmFsLT5oID0gMTM4OyByZXR1cm4gTlVNOyB9CitpY21wNi1ub2RlaW5mb3JtYXRpb25xdWVyeSAgICAgIHsgeXlsdmFsLT5oID0gMTM5OyByZXR1cm4gTlVNOyB9CitpY21wNi1ub2RlaW5mb3JtYXRpb25yZXNwb25zZSAgIHsgeXlsdmFsLT5oID0gMTQwOyByZXR1cm4gTlVNOyB9CitpY21wNi1pbmVpZ2hib3JkaXNjb3Zlcnlzb2xpY2l0IHsgeXlsdmFsLT5oID0gMTQxOyByZXR1cm4gTlVNOyB9CitpY21wNi1pbmVpZ2hib3JkaXNjb3ZlcnlhZHZlcnQgIHsgeXlsdmFsLT5oID0gMTQyOyByZXR1cm4gTlVNOyB9CitpY21wNi1tdWx0aWNhc3RsaXN0ZW5lcnJlcG9ydHYyIHsgeXlsdmFsLT5oID0gMTQzOyByZXR1cm4gTlVNOyB9CitpY21wNi1ob21lYWdlbnRkaXNjb3ZlcnlyZXF1ZXN0IHsgeXlsdmFsLT5oID0gMTQ0OyByZXR1cm4gTlVNOyB9CitpY21wNi1ob21lYWdlbnRkaXNjb3ZlcnlyZXBseSAgIHsgeXlsdmFsLT5oID0gMTQ1OyByZXR1cm4gTlVNOyB9CitpY21wNi1tb2JpbGVwcmVmaXhzb2xpY2l0ICAgICAgIHsgeXlsdmFsLT5oID0gMTQ2OyByZXR1cm4gTlVNOyB9CitpY21wNi1tb2JpbGVwcmVmaXhhZHZlcnQgICAgICAgIHsgeXlsdmFsLT5oID0gMTQ3OyByZXR1cm4gTlVNOyB9CitpY21wNi1jZXJ0cGF0aHNvbGljaXQgICAgICAgICAgIHsgeXlsdmFsLT5oID0gMTQ4OyByZXR1cm4gTlVNOyB9CitpY21wNi1jZXJ0cGF0aGFkdmVydCAgICAgICAgICAgIHsgeXlsdmFsLT5oID0gMTQ5OyByZXR1cm4gTlVNOyB9CitpY21wNi1tdWx0aWNhc3Ryb3V0ZXJhZHZlcnQgICAgIHsgeXlsdmFsLT5oID0gMTUxOyByZXR1cm4gTlVNOyB9CitpY21wNi1tdWx0aWNhc3Ryb3V0ZXJzb2xpY2l0ICAgIHsgeXlsdmFsLT5oID0gMTUyOyByZXR1cm4gTlVNOyB9CitpY21wNi1tdWx0aWNhc3Ryb3V0ZXJ0ZXJtICAgICAgIHsgeXlsdmFsLT5oID0gMTUzOyByZXR1cm4gTlVNOyB9CiAKLXRjcGZsYWdzCQl7IHl5bHZhbC0+aSA9IDEzOyByZXR1cm4gTlVNOyB9Ci10Y3AtZmluCQkJeyB5eWx2YWwtPmkgPSAweDAxOyByZXR1cm4gTlVNOyB9Ci10Y3Atc3luCQkJeyB5eWx2YWwtPmkgPSAweDAyOyByZXR1cm4gTlVNOyB9Ci10Y3AtcnN0CQkJeyB5eWx2YWwtPmkgPSAweDA0OyByZXR1cm4gTlVNOyB9Ci10Y3AtcHVzaAkJeyB5eWx2YWwtPmkgPSAweDA4OyByZXR1cm4gTlVNOyB9Ci10Y3AtYWNrCQkJeyB5eWx2YWwtPmkgPSAweDEwOyByZXR1cm4gTlVNOyB9Ci10Y3AtdXJnCQkJeyB5eWx2YWwtPmkgPSAweDIwOyByZXR1cm4gTlVNOyB9Ci10Y3AtZWNlCQkJeyB5eWx2YWwtPmkgPSAweDQwOyByZXR1cm4gTlVNOyB9Ci10Y3AtY3dyCQkJeyB5eWx2YWwtPmkgPSAweDgwOyByZXR1cm4gTlVNOyB9Cit0Y3BmbGFncwkJeyB5eWx2YWwtPmggPSAxMzsgcmV0dXJuIE5VTTsgfQordGNwLWZpbgkJCXsgeXlsdmFsLT5oID0gMHgwMTsgcmV0dXJuIE5VTTsgfQordGNwLXN5bgkJCXsgeXlsdmFsLT5oID0gMHgwMjsgcmV0dXJuIE5VTTsgfQordGNwLXJzdAkJCXsgeXlsdmFsLT5oID0gMHgwNDsgcmV0dXJuIE5VTTsgfQordGNwLXB1c2gJCXsgeXlsdmFsLT5oID0gMHgwODsgcmV0dXJuIE5VTTsgfQordGNwLWFjawkJCXsgeXlsdmFsLT5oID0gMHgxMDsgcmV0dXJuIE5VTTsgfQordGNwLXVyZwkJCXsgeXlsdmFsLT5oID0gMHgyMDsgcmV0dXJuIE5VTTsgfQordGNwLWVjZQkJCXsgeXlsdmFsLT5oID0gMHg0MDsgcmV0dXJuIE5VTTsgfQordGNwLWN3cgkJCXsgeXlsdmFsLT5oID0gMHg4MDsgcmV0dXJuIE5VTTsgfQogW0EtWmEtejAtOV0oWy1fLkEtWmEtejAtOV0qWy5BLVphLXowLTldKT8gewogCQkJIHl5bHZhbC0+cyA9IHNkdXAoeXlleHRyYSwgKGNoYXIgKil5eXRleHQpOyByZXR1cm4gSUQ7IH0KICJcXCJbXiAhKClcblx0XSsJeyB5eWx2YWwtPnMgPSBzZHVwKHl5ZXh0cmEsIChjaGFyICopeXl0ZXh0ICsgMSk7IHJldHVybiBJRDsgfQotW14gXFtcXVx0XG5cLV8uQS1aYS16MC05ITw+KCkmfD1dKyB7Ci0JCQlicGZfZXJyb3IoeXlleHRyYSwgImlsbGVnYWwgdG9rZW46ICVzIiwgeXl0ZXh0KTsgfQotLgkJCXsgYnBmX2Vycm9yKHl5ZXh0cmEsICJpbGxlZ2FsIGNoYXIgJyVjJyIsICp5eXRleHQpOyB9CisuCQkJeyByZXR1cm4gTEVYX0VSUk9SOyB9CiAlJQogCiAvKgpAQCAtNDk0LDQwICs0ODcsMTEwIEBACiAgKi8KIERJQUdfT05fRkxFWAogCi0vKiBIZXggZGlnaXQgdG8gaW50ZWdlci4gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci14ZHRvaShpbnQgYykKLXsKLQlpZiAoaXNkaWdpdChjKSkKLQkJcmV0dXJuIGMgLSAnMCc7Ci0JZWxzZSBpZiAoaXNsb3dlcihjKSkKLQkJcmV0dXJuIGMgLSAnYScgKyAxMDsKLQllbHNlCi0JCXJldHVybiBjIC0gJ0EnICsgMTA7Ci19Ci0KIC8qCi0gKiBDb252ZXJ0IHN0cmluZyB0byBpbnRlZ2VyLiAgSnVzdCBsaWtlIGF0b2koKSwgYnV0IGNoZWNrcyBmb3IKKyAqIENvbnZlcnQgc3RyaW5nIHRvIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyLiAgSnVzdCBsaWtlIGF0b2koKSwgYnV0IGNoZWNrcyBmb3IKICAqIHByZWNlZGluZyAweCBvciAwIGFuZCB1c2VzIGhleCBvciBvY3RhbCBpbnN0ZWFkIG9mIGRlY2ltYWwuCisgKgorICogT24gc3VjY2Vzcywgc2V0cyB5eWx2YWwtPmggdG8gdGhlIHZhbHVlIGFuZCByZXR1cm5zIE5VTS4KKyAqIE9uIGZhaWx1cmUsIHNldHMgdGhlIEJQRiBlcnJvciBzdHJpbmcgYW5kIHJldHVybnMgTEVYX0VSUk9SLCB0byBmb3JjZQorICogdGhlIHBhcnNlIHRvIHN0b3AuCiAgKi8KIHN0YXRpYyBpbnQKLXN0b2koY2hhciAqcykKK3N0b3UoY2hhciAqeXl0ZXh0X2FyZywgWVlTVFlQRSAqeXlsdmFsX2FyZywgY29tcGlsZXJfc3RhdGVfdCAqeXlleHRyYV9hcmcpCiB7Ci0JaW50IGJhc2UgPSAxMDsKLQlpbnQgbiA9IDA7CisJYnBmX3VfaW50MzIgbiA9IDA7CisJdW5zaWduZWQgaW50IGRpZ2l0OworCWNoYXIgKnMgPSB5eXRleHRfYXJnOwogCisJLyoKKwkgKiB5eXRleHRfYXJnIGlzIGd1YXJhbnRlZWQgZWl0aGVyIHRvIGJlIGEgc3RyaW5nIG9mIGRlY2ltYWwgZGlnaXRzCisJICogb3IgMFt4WF0gZm9sbG93ZWQgYnkgYSBzdHJpbmcgb2YgaGV4IGRpZ2l0cy4KKwkgKi8KIAlpZiAoKnMgPT0gJzAnKSB7CiAJCWlmIChzWzFdID09ICd4JyB8fCBzWzFdID09ICdYJykgewotCQkJcyArPSAyOwotCQkJYmFzZSA9IDE2OwotCQl9Ci0JCWVsc2UgewotCQkJYmFzZSA9IDg7CisJCQkvKgorCQkJICogQmVnaW5zIHdpdGggMHggb3IgMFgsIHNvIGhleC4KKwkJCSAqIEd1YXJhbnRlZWQgdG8gYmUgYWxsIGhleCBkaWdpdHMgZm9sbG93aW5nIHRoZQorCQkJICogcHJlZml4LCBzbyBhbnl0aGluZyB0aGF0J3Mgbm90IDAtOSBvciBhLWYgaXMKKwkJCSAqIEEtRi4KKwkJCSAqLworCQkJcyArPSAyOwkvKiBza2lwIHRoZSBwcmVmaXggKi8KKwkJCXdoaWxlICgoZGlnaXQgPSAqcysrKSAhPSAnXDAnKSB7CisJCQkJaWYgKGRpZ2l0ID49ICcwJyAmJiBkaWdpdCA8PSAnOScpCisJCQkJCWRpZ2l0ID0gZGlnaXQgLSAnMCc7CisJCQkJZWxzZSBpZiAoZGlnaXQgPj0gJ2EnICYmIGRpZ2l0IDw9ICdmJykKKwkJCQkJZGlnaXQgPSBkaWdpdCAtICdhJyArIDEwOworCQkJCWVsc2UKKwkJCQkJZGlnaXQgPSBkaWdpdCAtICdBJyArIDEwOworCisJCQkJLyoKKwkJCQkgKiBDaGVjayBmb3Igb3ZlcmZsb3cuCisJCQkJICovCisJCQkJaWYgKG4gPiAweEZGRkZGRkZVKSB7CisJCQkJCS8qCisJCQkJCSAqIFdlIGhhdmUgbW9yZSB0aGFuIDI4IGJpdHMgb2YKKwkJCQkJICogbnVtYmVyLCBhbmQgYXJlIGFib3V0IHRvCisJCQkJCSAqIGFkZCA0IG1vcmU7IHRoYXQgd29uJ3QgZml0CisJCQkJCSAqIGluIDMyIGJpdHMuCisJCQkJCSAqLworCQkJCQlicGZfc2V0X2Vycm9yKHl5ZXh0cmFfYXJnLAorCQkJCQkgICAgIm51bWJlciAlcyBvdmVyZmxvd3MgMzIgYml0cyIsCisJCQkJCSAgICB5eXRleHRfYXJnKTsKKwkJCQkJcmV0dXJuIExFWF9FUlJPUjsKKwkJCQl9CisJCQkJbiA9IChuIDw8IDQpICsgZGlnaXQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQmVnaW5zIHdpdGggMCwgYnV0IG5vdCAweCBvciAwWCwgc28gb2N0YWwuCisJCQkgKiBHdWFyYW50ZWVkIHRvIGJlIGFsbCAqZGVjaW1hbCogZGlnaXRzIGZvbGxvd2luZworCQkJICogdGhlIHByZWZpeCwgc28gd2UgbmVlZCB0byBjYXRjaCA4IGFuZCA5IGFuZAorCQkJICogcmVwb3J0IGFuIGVycm9yLgorCQkJICovCiAJCQlzICs9IDE7CisJCQl3aGlsZSAoKGRpZ2l0ID0gKnMrKykgIT0gJ1wwJykgeworCQkJCWlmIChkaWdpdCA+PSAnMCcgJiYgZGlnaXQgPD0gJzcnKQorCQkJCQlkaWdpdCA9IGRpZ2l0IC0gJzAnOworCQkJCWVsc2UgeworCQkJCQlicGZfc2V0X2Vycm9yKHl5ZXh0cmFfYXJnLAorCQkJCQkgICAgIm51bWJlciAlcyBjb250YWlucyBub24tb2N0YWwgZGlnaXQiLAorCQkJCQkgICAgeXl0ZXh0X2FyZyk7CisJCQkJCXJldHVybiBMRVhfRVJST1I7CisJCQkJfQorCQkJCWlmIChuID4gMDM3Nzc3Nzc3NzdVKSB7CisJCQkJCS8qCisJCQkJCSAqIFdlIGhhdmUgbW9yZSB0aGFuIDI5IGJpdHMgb2YKKwkJCQkJICogbnVtYmVyLCBhbmQgYXJlIGFib3V0IHRvIGFkZAorCQkJCQkgKiAzIG1vcmU7IHRoYXQgd29uJ3QgZml0IGluCisJCQkJCSAqIDMyIGJpdHMuCisJCQkJCSAqLworCQkJCQlicGZfc2V0X2Vycm9yKHl5ZXh0cmFfYXJnLAorCQkJCQkgICAgIm51bWJlciAlcyBvdmVyZmxvd3MgMzIgYml0cyIsCisJCQkJCSAgICB5eXRleHRfYXJnKTsKKwkJCQkJcmV0dXJuIExFWF9FUlJPUjsKKwkJCQl9CisJCQkJbiA9IChuIDw8IDMpICsgZGlnaXQ7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBEZWNpbWFsLgorCQkgKi8KKwkJd2hpbGUgKChkaWdpdCA9ICpzKyspICE9ICdcMCcpIHsKKwkJCWRpZ2l0ID0gZGlnaXQgLSAnMCc7CisjZGVmaW5lIENVVE9GRl9ERUMJKDB4RkZGRkZGRkZVIC8gMTBVKQorI2RlZmluZSBDVVRMSU1fREVDCSgweEZGRkZGRkZGVSAlIDEwVSkKKwkJCWlmIChuID4gQ1VUT0ZGX0RFQyB8fAorCQkJICAgIChuID09IENVVE9GRl9ERUMgJiYgZGlnaXQgPiBDVVRMSU1fREVDKSkgeworCQkJCWJwZl9zZXRfZXJyb3IoeXlleHRyYV9hcmcsCisJCQkJICAgICJudW1iZXIgJXMgb3ZlcmZsb3dzIDMyIGJpdHMiLAorCQkJCSAgICB5eXRleHRfYXJnKTsKKwkJCQlyZXR1cm4gTEVYX0VSUk9SOworCQkJfQorCQkJbiA9IChuICogMTApICsgZGlnaXQ7CiAJCX0KIAl9Ci0Jd2hpbGUgKCpzKQotCQluID0gbiAqIGJhc2UgKyB4ZHRvaSgqcysrKTsKIAotCXJldHVybiBuOworCXl5bHZhbF9hcmctPmggPSBuOworCXJldHVybiBOVU07CiB9CmRpZmYgLS1naXQgYS9zZi1wY2FwLmMgYi9zZi1wY2FwLmMKaW5kZXggOTZjYjMwOC4uZDg0NDNlOSAxMDA2NDQKLS0tIGEvc2YtcGNhcC5jCisrKyBiL3NmLXBjYXAuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+IC8qIGZvciBJTlRfTUFYICovCiAKICNpbmNsdWRlICJwY2FwLWludC5oIgogCkBAIC0xMDksNiArMTEwLDIwIEBACiAKIHN0YXRpYyBpbnQgcGNhcF9uZXh0X3BhY2tldChwY2FwX3QgKnAsIHN0cnVjdCBwY2FwX3BrdGhkciAqaGRyLCB1X2NoYXIgKipkYXRhcCk7CiAKKyNpZmRlZiBfV0lOMzIKKy8qCisgKiBUaGlzIGlzbid0IGV4cG9ydGVkIG9uIFdpbmRvd3MsIGJlY2F1c2UgaXQgd291bGQgb25seSB3b3JrIGlmIGJvdGgKKyAqIGxpYnBjYXAgYW5kIHRoZSBjb2RlIHVzaW5nIGl0IHdlcmUgdXNpbmcgdGhlIHNhbWUgQyBydW50aW1lOyBvdGhlcndpc2UgdGhleQorICogd291bGQgYmUgdXNpbmcgZGlmZmVyZW50IGRlZmluaXRpb25zIG9mIGEgRklMRSBzdHJ1Y3R1cmUuCisgKgorICogSW5zdGVhZCB3ZSBkZWZpbmUgdGhpcyBhcyBhIG1hY3JvIGluIHBjYXAvcGNhcC5oIHRoYXQgd3JhcHMgdGhlIGhvcGVuCisgKiB2ZXJzaW9uIHRoYXQgd2UgZG8gZXhwb3J0LCBwYXNzaW5nIGl0IGEgcmF3IE9TIEhBTkRMRSwgYXMgZGVmaW5lZCBieSB0aGUKKyAqIFdpbjMyIC8gV2luNjQgQUJJLCBvYnRhaW5lZCBmcm9tIHRoZSBfZmlsZW5vKCkgYW5kIF9nZXRfb3NmaGFuZGxlKCkKKyAqIGZ1bmN0aW9ucyBvZiB0aGUgYXBwcm9wcmlhdGUgQ1JULgorICovCitzdGF0aWMgcGNhcF9kdW1wZXJfdCAqcGNhcF9kdW1wX2ZvcGVuKHBjYXBfdCAqcCwgRklMRSAqZik7CisjZW5kaWYgLyogX1dJTjMyICovCisKIC8qCiAgKiBQcml2YXRlIGRhdGEgZm9yIHJlYWRpbmcgcGNhcCBzYXZlZmlsZXMuCiAgKi8KQEAgLTEzNSw5ICsxNTAsMTAgQEAKICAqIHJlbGV2YW50IGluZm9ybWF0aW9uIGZyb20gdGhlIGhlYWRlci4KICAqLwogcGNhcF90ICoKLXBjYXBfY2hlY2tfaGVhZGVyKGJwZl91X2ludDMyIG1hZ2ljLCBGSUxFICpmcCwgdV9pbnQgcHJlY2lzaW9uLCBjaGFyICplcnJidWYsCitwY2FwX2NoZWNrX2hlYWRlcihjb25zdCB1aW50OF90ICptYWdpYywgRklMRSAqZnAsIHVfaW50IHByZWNpc2lvbiwgY2hhciAqZXJyYnVmLAogCQkgIGludCAqZXJyKQogeworCWJwZl91X2ludDMyIG1hZ2ljX2ludDsKIAlzdHJ1Y3QgcGNhcF9maWxlX2hlYWRlciBoZHI7CiAJc2l6ZV90IGFtdF9yZWFkOwogCXBjYXBfdCAqcDsKQEAgLTE1NCwxMSArMTcwLDE0IEBACiAJICogbnVtYmVyIGZvciBhIHBjYXAgc2F2ZWZpbGUsIG9yIGZvciBhIGJ5dGUtc3dhcHBlZCBwY2FwCiAJICogc2F2ZWZpbGUuCiAJICovCi0JaWYgKG1hZ2ljICE9IFRDUERVTVBfTUFHSUMgJiYgbWFnaWMgIT0gS1VaTkVUWk9WX1RDUERVTVBfTUFHSUMgJiYKLQkgICAgbWFnaWMgIT0gTlNFQ19UQ1BEVU1QX01BR0lDKSB7Ci0JCW1hZ2ljID0gU1dBUExPTkcobWFnaWMpOwotCQlpZiAobWFnaWMgIT0gVENQRFVNUF9NQUdJQyAmJiBtYWdpYyAhPSBLVVpORVRaT1ZfVENQRFVNUF9NQUdJQyAmJgotCQkgICAgbWFnaWMgIT0gTlNFQ19UQ1BEVU1QX01BR0lDKQorCW1lbWNweSgmbWFnaWNfaW50LCBtYWdpYywgc2l6ZW9mKG1hZ2ljX2ludCkpOworCWlmIChtYWdpY19pbnQgIT0gVENQRFVNUF9NQUdJQyAmJgorCSAgICBtYWdpY19pbnQgIT0gS1VaTkVUWk9WX1RDUERVTVBfTUFHSUMgJiYKKwkgICAgbWFnaWNfaW50ICE9IE5TRUNfVENQRFVNUF9NQUdJQykgeworCQltYWdpY19pbnQgPSBTV0FQTE9ORyhtYWdpY19pbnQpOworCQlpZiAobWFnaWNfaW50ICE9IFRDUERVTVBfTUFHSUMgJiYKKwkJICAgIG1hZ2ljX2ludCAhPSBLVVpORVRaT1ZfVENQRFVNUF9NQUdJQyAmJgorCQkgICAgbWFnaWNfaW50ICE9IE5TRUNfVENQRFVNUF9NQUdJQykKIAkJCXJldHVybiAoTlVMTCk7CS8qIG5vcGUgKi8KIAkJc3dhcHBlZCA9IDE7CiAJfQpAQCAtMTY3LDcgKzE4Niw3IEBACiAJICogVGhleSBhcmUuICBQdXQgdGhlIG1hZ2ljIG51bWJlciBpbiB0aGUgaGVhZGVyLCBhbmQgcmVhZAogCSAqIHRoZSByZXN0IG9mIHRoZSBoZWFkZXIuCiAJICovCi0JaGRyLm1hZ2ljID0gbWFnaWM7CisJaGRyLm1hZ2ljID0gbWFnaWNfaW50OwogCWFtdF9yZWFkID0gZnJlYWQoKChjaGFyICopJmhkcikgKyBzaXplb2YgaGRyLm1hZ2ljLCAxLAogCSAgICBzaXplb2YoaGRyKSAtIHNpemVvZihoZHIubWFnaWMpLCBmcCk7CiAJaWYgKGFtdF9yZWFkICE9IHNpemVvZihoZHIpIC0gc2l6ZW9mKGhkci5tYWdpYykpIHsKQEAgLTE3NSwxMCArMTk0LDkgQEAKIAkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJICAgIGVycm5vLCAiZXJyb3IgcmVhZGluZyBkdW1wIGZpbGUiKTsKIAkJfSBlbHNlIHsKLQkJCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkJICAgICJ0cnVuY2F0ZWQgZHVtcCBmaWxlOyB0cmllZCB0byByZWFkICVsdSBmaWxlIGhlYWRlciBieXRlcywgb25seSBnb3QgJWx1IiwKLQkJCSAgICAodW5zaWduZWQgbG9uZylzaXplb2YoaGRyKSwKLQkJCSAgICAodW5zaWduZWQgbG9uZylhbXRfcmVhZCk7CisJCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkgICAgInRydW5jYXRlZCBkdW1wIGZpbGU7IHRyaWVkIHRvIHJlYWQgJXp1IGZpbGUgaGVhZGVyIGJ5dGVzLCBvbmx5IGdvdCAlenUiLAorCQkJICAgIHNpemVvZihoZHIpLCBhbXRfcmVhZCk7CiAJCX0KIAkJKmVyciA9IDE7CiAJCXJldHVybiAoTlVMTCk7CkBAIC0xOTcsNyArMjE1LDcgQEAKIAl9CiAKIAlpZiAoaGRyLnZlcnNpb25fbWFqb3IgPCBQQ0FQX1ZFUlNJT05fTUFKT1IpIHsKLQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICJhcmNoYWljIHBjYXAgc2F2ZWZpbGUgZm9ybWF0Iik7CiAJCSplcnIgPSAxOwogCQlyZXR1cm4gKE5VTEwpOwpAQCAtMjExLDcgKzIyOSw3IEBACiAJCWhkci52ZXJzaW9uX21pbm9yIDw9IFBDQVBfVkVSU0lPTl9NSU5PUikgfHwKIAkgICAgICAgKGhkci52ZXJzaW9uX21ham9yID09IDU0MyAmJgogCQloZHIudmVyc2lvbl9taW5vciA9PSAwKSkpIHsKLQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAidW5zdXBwb3J0ZWQgcGNhcCBzYXZlZmlsZSB2ZXJzaW9uICV1LiV1IiwKIAkJCSBoZHIudmVyc2lvbl9tYWpvciwgaGRyLnZlcnNpb25fbWlub3IpOwogCQkqZXJyID0gMTsKQEAgLTIyMiw3ICsyNDAsNyBAQAogCSAqIE9LLCB0aGlzIGlzIGEgZ29vZCBwY2FwIGZpbGUuCiAJICogQWxsb2NhdGUgYSBwY2FwX3QgZm9yIGl0LgogCSAqLwotCXAgPSBwY2FwX29wZW5fb2ZmbGluZV9jb21tb24oZXJyYnVmLCBzaXplb2YgKHN0cnVjdCBwY2FwX3NmKSk7CisJcCA9IFBDQVBfT1BFTl9PRkZMSU5FX0NPTU1PTihlcnJidWYsIHN0cnVjdCBwY2FwX3NmKTsKIAlpZiAocCA9PSBOVUxMKSB7CiAJCS8qIEFsbG9jYXRpb24gZmFpbGVkLiAqLwogCQkqZXJyID0gMTsKQEAgLTIzMSwyMSArMjQ5LDkgQEAKIAlwLT5zd2FwcGVkID0gc3dhcHBlZDsKIAlwLT52ZXJzaW9uX21ham9yID0gaGRyLnZlcnNpb25fbWFqb3I7CiAJcC0+dmVyc2lvbl9taW5vciA9IGhkci52ZXJzaW9uX21pbm9yOwotCXAtPnR6b2ZmID0gaGRyLnRoaXN6b25lOwotCXAtPnNuYXBzaG90ID0gaGRyLnNuYXBsZW47Ci0JaWYgKHAtPnNuYXBzaG90IDw9IDApIHsKLQkJLyoKLQkJICogQm9ndXMgc25hcHNob3QgbGVuZ3RoOyB1c2UgdGhlIG1heGltdW0gZm9yIHRoaXMKLQkJICogbGluay1sYXllciB0eXBlIGFzIGEgZmFsbGJhY2suCi0JCSAqCi0JCSAqIFhYWCAtIHRoZSBvbmx5IHJlYXNvbiB3aHkgc25hcHNob3QgaXMgc2lnbmVkIGlzCi0JCSAqIHRoYXQgcGNhcF9zbmFwc2hvdCgpIHJldHVybnMgYW4gaW50LCBub3QgYW4KLQkJICogdW5zaWduZWQgaW50LgotCQkgKi8KLQkJcC0+c25hcHNob3QgPSBtYXhfc25hcGxlbl9mb3JfZGx0KGhkci5saW5rdHlwZSk7Ci0JfQogCXAtPmxpbmt0eXBlID0gbGlua3R5cGVfdG9fZGx0KExUX0xJTktUWVBFKGhkci5saW5rdHlwZSkpOwogCXAtPmxpbmt0eXBlX2V4dCA9IExUX0xJTktUWVBFX0VYVChoZHIubGlua3R5cGUpOworCXAtPnNuYXBzaG90ID0gcGNhcF9hZGp1c3Rfc25hcHNob3QocC0+bGlua3R5cGUsIGhkci5zbmFwbGVuKTsKIAogCXAtPm5leHRfcGFja2V0X29wID0gcGNhcF9uZXh0X3BhY2tldDsKIApAQCAtMjYwLDcgKzI2Niw3IEBACiAJc3dpdGNoIChwcmVjaXNpb24pIHsKIAogCWNhc2UgUENBUF9UU1RBTVBfUFJFQ0lTSU9OX01JQ1JPOgotCQlpZiAobWFnaWMgPT0gTlNFQ19UQ1BEVU1QX01BR0lDKSB7CisJCWlmIChtYWdpY19pbnQgPT0gTlNFQ19UQ1BEVU1QX01BR0lDKSB7CiAJCQkvKgogCQkJICogVGhlIGZpbGUgaGFzIG5hbm9zZWNvbmRzLCB0aGUgdXNlcgogCQkJICogd2FudHMgbWljcm9zZWNvbmRzOyBzY2FsZSB0aGUKQEAgLTI3Nyw3ICsyODMsNyBAQAogCQlicmVhazsKIAogCWNhc2UgUENBUF9UU1RBTVBfUFJFQ0lTSU9OX05BTk86Ci0JCWlmIChtYWdpYyA9PSBOU0VDX1RDUERVTVBfTUFHSUMpIHsKKwkJaWYgKG1hZ2ljX2ludCA9PSBOU0VDX1RDUERVTVBfTUFHSUMpIHsKIAkJCS8qCiAJCQkgKiBUaGUgZmlsZSBoYXMgbmFub3NlY29uZHMsIHRoZQogCQkJICogdXNlciB3YW50cyBuYW5vc2Vjb25kczsgbm90aGluZyB0byBkby4KQEAgLTI4NSw3ICsyOTEsNyBAQAogCQkJcHMtPnNjYWxlX3R5cGUgPSBQQVNTX1RIUk9VR0g7CiAJCX0gZWxzZSB7CiAJCQkvKgotCQkJICogVGhlIGZpbGUgaGFzIG1pY3Jvb3NlY29uZHMsIHRoZSB1c2VyCisJCQkgKiBUaGUgZmlsZSBoYXMgbWljcm9zZWNvbmRzLCB0aGUgdXNlcgogCQkJICogd2FudHMgbmFub3NlY29uZHM7IHNjYWxlIHRoZQogCQkJICogcHJlY2lzaW9uIHVwLgogCQkJICovCkBAIC0yOTQsNyArMzAwLDcgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkgICAgInVua25vd24gdGltZSBzdGFtcCByZXNvbHV0aW9uICV1IiwgcHJlY2lzaW9uKTsKIAkJZnJlZShwKTsKIAkJKmVyciA9IDE7CkBAIC0zMzEsNyArMzM3LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKG1hZ2ljID09IEtVWk5FVFpPVl9UQ1BEVU1QX01BR0lDKSB7CisJaWYgKG1hZ2ljX2ludCA9PSBLVVpORVRaT1ZfVENQRFVNUF9NQUdJQykgewogCQkvKgogCQkgKiBYWFggLSB0aGUgcGF0Y2ggdGhhdCdzIGluIHNvbWUgdmVyc2lvbnMgb2YgbGlicGNhcAogCQkgKiBjaGFuZ2VzIHRoZSBwYWNrZXQgaGVhZGVyIGJ1dCBub3QgdGhlIG1hZ2ljIG51bWJlciwKQEAgLTM3MSw4ICszNzcsMTQgQEAKIAkJCSAqIGxlbmd0aCB3aWxsIGJlIG1pc2xlYWRpbmcgaWYgeW91IHVzZSBpdCB0byBmaWd1cmUKIAkJCSAqIG91dCB3aHkgYSBjYXB0dXJlIGRvZXNuJ3QgaGF2ZSBhbGwgdGhlIHBhY2tldCBkYXRhLAogCQkJICogYnV0IHRoZXJlJ3Mgbm90IG11Y2ggd2UgY2FuIGRvIHRvIGF2b2lkIHRoYXQuCisJCQkgKgorCQkJICogQnV0IGRvbid0IGdyb3cgdGhlIHNuYXBzaG90IGxlbmd0aCBwYXN0IHRoZQorCQkJICogbWF4aW11bSB2YWx1ZSBvZiBhbiBpbnQuCiAJCQkgKi8KLQkJCXAtPnNuYXBzaG90ICs9IDE0OworCQkJaWYgKHAtPnNuYXBzaG90IDw9IElOVF9NQVggLSAxNCkKKwkJCQlwLT5zbmFwc2hvdCArPSAxNDsKKwkJCWVsc2UKKwkJCQlwLT5zbmFwc2hvdCA9IElOVF9NQVg7CiAJCX0KIAl9IGVsc2UKIAkJcHMtPmhkcnNpemUgPSBzaXplb2Yoc3RydWN0IHBjYXBfc2ZfcGt0aGRyKTsKQEAgLTM5MSw3ICs0MDMsNyBAQAogCQlwLT5idWZzaXplID0gMjA0ODsKIAlwLT5idWZmZXIgPSBtYWxsb2MocC0+YnVmc2l6ZSk7CiAJaWYgKHAtPmJ1ZmZlciA9PSBOVUxMKSB7Ci0JCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAib3V0IG9mIG1lbW9yeSIpOworCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJvdXQgb2YgbWVtb3J5Iik7CiAJCWZyZWUocCk7CiAJCSplcnIgPSAxOwogCQlyZXR1cm4gKE5VTEwpOwpAQCAtNDEyLDcgKzQyNCw3IEBACiAKIAliaWdnZXJfYnVmZmVyID0gcmVhbGxvYyhwLT5idWZmZXIsIGJ1ZnNpemUpOwogCWlmIChiaWdnZXJfYnVmZmVyID09IE5VTEwpIHsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJvdXQgb2YgbWVtb3J5Iik7CisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIm91dCBvZiBtZW1vcnkiKTsKIAkJcmV0dXJuICgwKTsKIAl9CiAJcC0+YnVmZmVyID0gYmlnZ2VyX2J1ZmZlcjsKQEAgLTQ0OSwxMCArNDYxLDkgQEAKIAkJCXJldHVybiAoLTEpOwogCQl9IGVsc2UgewogCQkJaWYgKGFtdF9yZWFkICE9IDApIHsKLQkJCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJCQkgICAgInRydW5jYXRlZCBkdW1wIGZpbGU7IHRyaWVkIHRvIHJlYWQgJWx1IGhlYWRlciBieXRlcywgb25seSBnb3QgJWx1IiwKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcpcHMtPmhkcnNpemUsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nKWFtdF9yZWFkKTsKKwkJCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkJICAgICJ0cnVuY2F0ZWQgZHVtcCBmaWxlOyB0cmllZCB0byByZWFkICV6dSBoZWFkZXIgYnl0ZXMsIG9ubHkgZ290ICV6dSIsCisJCQkJICAgIHBzLT5oZHJzaXplLCBhbXRfcmVhZCk7CiAJCQkJcmV0dXJuICgtMSk7CiAJCQl9CiAJCQkvKiBFT0YgKi8KQEAgLTUzNCwxMSArNTQ1LDExIEBACiAJCSAqIGJlbG93LikKIAkJICovCiAJCWlmIChoZHItPmNhcGxlbiA+IChicGZfdV9pbnQzMilwLT5zbmFwc2hvdCkgewotCQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgICAgImludmFsaWQgcGFja2V0IGNhcHR1cmUgbGVuZ3RoICV1LCBiaWdnZXIgdGhhbiAiCiAJCQkgICAgInNuYXBsZW4gb2YgJWQiLCBoZHItPmNhcGxlbiwgcC0+c25hcHNob3QpOwogCQl9IGVsc2UgewotCQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgICAgImludmFsaWQgcGFja2V0IGNhcHR1cmUgbGVuZ3RoICV1LCBiaWdnZXIgdGhhbiAiCiAJCQkgICAgIm1heGltdW0gb2YgJXUiLCBoZHItPmNhcGxlbiwKIAkJCSAgICBtYXhfc25hcGxlbl9mb3JfZGx0KHAtPmxpbmt0eXBlKSk7CkBAIC02MTAsOSArNjIxLDkgQEAKIAkJCQkgKiB0aGF0IHdvdWxkIGZhaWwgYmVjYXVzZSB3ZSBnb3QgRU9GIGJlZm9yZQogCQkJCSAqIHRoZSByZWFkIGZpbmlzaGVkLgogCQkJCSAqLwotCQkJCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkJCSAgICAidHJ1bmNhdGVkIGR1bXAgZmlsZTsgdHJpZWQgdG8gcmVhZCAldSBjYXB0dXJlZCBieXRlcywgb25seSBnb3QgJWx1IiwKLQkJCQkgICAgcC0+c25hcHNob3QsICh1bnNpZ25lZCBsb25nKWFtdF9yZWFkKTsKKwkJCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkJICAgICJ0cnVuY2F0ZWQgZHVtcCBmaWxlOyB0cmllZCB0byByZWFkICV1IGNhcHR1cmVkIGJ5dGVzLCBvbmx5IGdvdCAlenUiLAorCQkJCSAgICBwLT5zbmFwc2hvdCwgYW10X3JlYWQpOwogCQkJfQogCQkJcmV0dXJuICgtMSk7CiAJCX0KQEAgLTYzNCw5ICs2NDUsOSBAQAogCQkJCQkgICAgUENBUF9FUlJCVUZfU0laRSwgZXJybm8sCiAJCQkJCSAgICAiZXJyb3IgcmVhZGluZyBkdW1wIGZpbGUiKTsKIAkJCQl9IGVsc2UgewotCQkJCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJCQkJICAgICJ0cnVuY2F0ZWQgZHVtcCBmaWxlOyB0cmllZCB0byByZWFkICV1IGNhcHR1cmVkIGJ5dGVzLCBvbmx5IGdvdCAlbHUiLAotCQkJCQkgICAgaGRyLT5jYXBsZW4sICh1bnNpZ25lZCBsb25nKWJ5dGVzX3JlYWQpOworCQkJCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkJCSAgICAidHJ1bmNhdGVkIGR1bXAgZmlsZTsgdHJpZWQgdG8gcmVhZCAldSBjYXB0dXJlZCBieXRlcywgb25seSBnb3QgJXp1IiwKKwkJCQkJICAgIGhkci0+Y2FwbGVuLCBieXRlc19yZWFkKTsKIAkJCQl9CiAJCQkJcmV0dXJuICgtMSk7CiAJCQl9CkBAIC02NDksNiArNjYwLDkgQEAKIAkJICovCiAJCWhkci0+Y2FwbGVuID0gcC0+c25hcHNob3Q7CiAJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhlIHBhY2tldCBpcyB3aXRoaW4gdGhlIHNuYXBzaG90IGxlbmd0aCBmb3IgdGhpcyBmaWxlLgorCQkgKi8KIAkJaWYgKGhkci0+Y2FwbGVuID4gcC0+YnVmc2l6ZSkgewogCQkJLyoKIAkJCSAqIEdyb3cgdGhlIGJ1ZmZlciB0byB0aGUgbmV4dCBwb3dlciBvZiAyLCBvcgpAQCAtNjU4LDcgKzY3Miw3IEBACiAKIAkJCW5ld19idWZzaXplID0gaGRyLT5jYXBsZW47CiAJCQkvKgotCQkJICogaHR0cDovL2dyYXBoaWNzLnN0YW5mb3JkLmVkdS9+c2VhbmRlci9iaXRoYWNrcy5odG1sI1JvdW5kVXBQb3dlck9mMgorCQkJICogaHR0cHM6Ly9ncmFwaGljcy5zdGFuZm9yZC5lZHUvfnNlYW5kZXIvYml0aGFja3MuaHRtbCNSb3VuZFVwUG93ZXJPZjIKIAkJCSAqLwogCQkJbmV3X2J1ZnNpemUtLTsKIAkJCW5ld19idWZzaXplIHw9IG5ld19idWZzaXplID4+IDE7CkBAIC02ODMsOSArNjk3LDkgQEAKIAkJCQkgICAgUENBUF9FUlJCVUZfU0laRSwgZXJybm8sCiAJCQkJICAgICJlcnJvciByZWFkaW5nIGR1bXAgZmlsZSIpOwogCQkJfSBlbHNlIHsKLQkJCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJCQkgICAgInRydW5jYXRlZCBkdW1wIGZpbGU7IHRyaWVkIHRvIHJlYWQgJXUgY2FwdHVyZWQgYnl0ZXMsIG9ubHkgZ290ICVsdSIsCi0JCQkJICAgIGhkci0+Y2FwbGVuLCAodW5zaWduZWQgbG9uZylhbXRfcmVhZCk7CisJCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJCSAgICAidHJ1bmNhdGVkIGR1bXAgZmlsZTsgdHJpZWQgdG8gcmVhZCAldSBjYXB0dXJlZCBieXRlcywgb25seSBnb3QgJXp1IiwKKwkJCQkgICAgaGRyLT5jYXBsZW4sIGFtdF9yZWFkKTsKIAkJCX0KIAkJCXJldHVybiAoLTEpOwogCQl9CkBAIC02OTksNyArNzEzLDcgQEAKIH0KIAogc3RhdGljIGludAotc2Zfd3JpdGVfaGVhZGVyKHBjYXBfdCAqcCwgRklMRSAqZnAsIGludCBsaW5rdHlwZSwgaW50IHRoaXN6b25lLCBpbnQgc25hcGxlbikKK3NmX3dyaXRlX2hlYWRlcihwY2FwX3QgKnAsIEZJTEUgKmZwLCBpbnQgbGlua3R5cGUsIGludCBzbmFwbGVuKQogewogCXN0cnVjdCBwY2FwX2ZpbGVfaGVhZGVyIGhkcjsKIApAQCAtNzA3LDkgKzcyMSwxNSBAQAogCWhkci52ZXJzaW9uX21ham9yID0gUENBUF9WRVJTSU9OX01BSk9SOwogCWhkci52ZXJzaW9uX21pbm9yID0gUENBUF9WRVJTSU9OX01JTk9SOwogCi0JaGRyLnRoaXN6b25lID0gdGhpc3pvbmU7Ci0JaGRyLnNuYXBsZW4gPSBzbmFwbGVuOworCS8qCisJICogaHR0cHM6Ly93d3cudGNwZHVtcC5vcmcvbWFucGFnZXMvcGNhcC1zYXZlZmlsZS41LnR4dCBzdGF0ZXM6CisJICogdGhpc3pvbmU6IDQtYnl0ZSB0aW1lIHpvbmUgb2Zmc2V0OyB0aGlzIGlzIGFsd2F5cyAwLgorCSAqIHNpZ2ZpZ3M6ICA0LWJ5dGUgbnVtYmVyIGdpdmluZyB0aGUgYWNjdXJhY3kgb2YgdGltZSBzdGFtcHMKKwkgKiAgICAgICAgICAgaW4gdGhlIGZpbGU7IHRoaXMgaXMgYWx3YXlzIDAuCisJICovCisJaGRyLnRoaXN6b25lID0gMDsKIAloZHIuc2lnZmlncyA9IDA7CisJaGRyLnNuYXBsZW4gPSBzbmFwbGVuOwogCWhkci5saW5rdHlwZSA9IGxpbmt0eXBlOwogCiAJaWYgKGZ3cml0ZSgoY2hhciAqKSZoZHIsIHNpemVvZihoZHIpLCAxLCBmcCkgIT0gMSkKQEAgLTcyOCw4ICs3NDgsMTIgQEAKIAlzdHJ1Y3QgcGNhcF9zZl9wa3RoZHIgc2ZfaGRyOwogCiAJZiA9IChGSUxFICopdXNlcjsKLQlzZl9oZHIudHMudHZfc2VjICA9IGgtPnRzLnR2X3NlYzsKLQlzZl9oZHIudHMudHZfdXNlYyA9IGgtPnRzLnR2X3VzZWM7CisJLyoKKwkgKiBCZXR0ZXIgbm90IHRyeSB3cml0aW5nIHBjYXAgZmlsZXMgYWZ0ZXIKKwkgKiAyMDM4LTAxLTE5IDAzOjE0OjA3IFVUQzsgc3dpdGNoIHRvIHBjYXBuZy4KKwkgKi8KKwlzZl9oZHIudHMudHZfc2VjICA9IChicGZfaW50MzIpaC0+dHMudHZfc2VjOworCXNmX2hkci50cy50dl91c2VjID0gKGJwZl9pbnQzMiloLT50cy50dl91c2VjOwogCXNmX2hkci5jYXBsZW4gICAgID0gaC0+Y2FwbGVuOwogCXNmX2hkci5sZW4gICAgICAgID0gaC0+bGVuOwogCS8qIFhYWCB3ZSBzaG91bGQgY2hlY2sgdGhlIHJldHVybiBzdGF0dXMgKi8KQEAgLTc1NCw3ICs3NzgsNyBAQAogCWVsc2UKIAkJc2V0dmJ1ZihmLCBOVUxMLCBfSU9OQkYsIDApOwogI2VuZGlmCi0JaWYgKHNmX3dyaXRlX2hlYWRlcihwLCBmLCBsaW5rdHlwZSwgcC0+dHpvZmYsIHAtPnNuYXBzaG90KSA9PSAtMSkgeworCWlmIChzZl93cml0ZV9oZWFkZXIocCwgZiwgbGlua3R5cGUsIHAtPnNuYXBzaG90KSA9PSAtMSkgewogCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgIGVycm5vLCAiQ2FuJ3Qgd3JpdGUgdG8gJXMiLCBmbmFtZSk7CiAJCWlmIChmICE9IHN0ZG91dCkKQEAgLTc3OCwxNCArODAyLDE0IEBACiAJICogbGluay1sYXllciB0eXBlLCBzbyB3ZSBjYW4ndCB1c2UgaXQuCiAJICovCiAJaWYgKCFwLT5hY3RpdmF0ZWQpIHsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICIlczogbm90LXlldC1hY3RpdmF0ZWQgcGNhcF90IHBhc3NlZCB0byBwY2FwX2R1bXBfb3BlbiIsCiAJCSAgICBmbmFtZSk7CiAJCXJldHVybiAoTlVMTCk7CiAJfQogCWxpbmt0eXBlID0gZGx0X3RvX2xpbmt0eXBlKHAtPmxpbmt0eXBlKTsKIAlpZiAobGlua3R5cGUgPT0gLTEpIHsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICIlczogbGluay1sYXllciB0eXBlICVkIGlzbid0IHN1cHBvcnRlZCBpbiBzYXZlZmlsZXMiLAogCQkgICAgZm5hbWUsIHAtPmxpbmt0eXBlKTsKIAkJcmV0dXJuIChOVUxMKTsKQEAgLTc5Myw3ICs4MTcsNyBAQAogCWxpbmt0eXBlIHw9IHAtPmxpbmt0eXBlX2V4dDsKIAogCWlmIChmbmFtZSA9PSBOVUxMKSB7Ci0JCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICAiQSBudWxsIHBvaW50ZXIgd2FzIHN1cHBsaWVkIGFzIHRoZSBmaWxlIG5hbWUiKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtODA3LDcgKzgzMSw3IEBACiAJCSAqIHJlcXVpcmVkIG9uIFdpbmRvd3MsIGFzIHRoZSBmaWxlIGlzIGEgYmluYXJ5IGZpbGUKIAkJICogYW5kIG11c3QgYmUgd3JpdHRlbiBpbiBiaW5hcnkgbW9kZS4KIAkJICovCi0JCWYgPSBmb3BlbihmbmFtZSwgIndiIik7CisJCWYgPSBjaGFyc2V0X2ZvcGVuKGZuYW1lLCAid2IiKTsKIAkJaWYgKGYgPT0gTlVMTCkgewogCQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgICAgZXJybm8sICIlcyIsIGZuYW1lKTsKQEAgLTgxNyw5ICs4NDEsNDIgQEAKIAlyZXR1cm4gKHBjYXBfc2V0dXBfZHVtcChwLCBsaW5rdHlwZSwgZiwgZm5hbWUpKTsKIH0KIAorI2lmZGVmIF9XSU4zMgorLyoKKyAqIEluaXRpYWxpemUgc28gdGhhdCBzZl93cml0ZSgpIHdpbGwgb3V0cHV0IHRvIGEgc3RyZWFtIHdyYXBwaW5nIHRoZSBnaXZlbiByYXcKKyAqIE9TIGZpbGUgSEFORExFLgorICovCitwY2FwX2R1bXBlcl90ICoKK3BjYXBfZHVtcF9ob3BlbihwY2FwX3QgKnAsIGludHB0cl90IG9zZmQpCit7CisJaW50IGZkOworCUZJTEUgKmZpbGU7CisKKwlmZCA9IF9vcGVuX29zZmhhbmRsZShvc2ZkLCBfT19BUFBFTkQpOworCWlmIChmZCA8IDApIHsKKwkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICBlcnJubywgIl9vcGVuX29zZmhhbmRsZSIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlmaWxlID0gX2Zkb3BlbihmZCwgIndiIik7CisJaWYgKGZpbGUgPT0gTlVMTCkgeworCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJICAgIGVycm5vLCAiX2Zkb3BlbiIpOworCQlfY2xvc2UoZmQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gcGNhcF9kdW1wX2ZvcGVuKHAsIGZpbGUpOworfQorI2VuZGlmIC8qIF9XSU4zMiAqLworCiAvKgogICogSW5pdGlhbGl6ZSBzbyB0aGF0IHNmX3dyaXRlKCkgd2lsbCBvdXRwdXQgdG8gdGhlIGdpdmVuIHN0cmVhbS4KICAqLworI2lmZGVmIF9XSU4zMgorc3RhdGljCisjZW5kaWYgLyogX1dJTjMyICovCiBwY2FwX2R1bXBlcl90ICoKIHBjYXBfZHVtcF9mb3BlbihwY2FwX3QgKnAsIEZJTEUgKmYpCiB7CkBAIC04MjcsNyArODg0LDcgQEAKIAogCWxpbmt0eXBlID0gZGx0X3RvX2xpbmt0eXBlKHAtPmxpbmt0eXBlKTsKIAlpZiAobGlua3R5cGUgPT0gLTEpIHsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICJzdHJlYW06IGxpbmstbGF5ZXIgdHlwZSAlZCBpc24ndCBzdXBwb3J0ZWQgaW4gc2F2ZWZpbGVzIiwKIAkJICAgIHAtPmxpbmt0eXBlKTsKIAkJcmV0dXJuIChOVUxMKTsKQEAgLTg0NywxNCArOTA0LDE0IEBACiAKIAlsaW5rdHlwZSA9IGRsdF90b19saW5rdHlwZShwLT5saW5rdHlwZSk7CiAJaWYgKGxpbmt0eXBlID09IC0xKSB7Ci0JCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICAiJXM6IGxpbmstbGF5ZXIgdHlwZSAlZCBpc24ndCBzdXBwb3J0ZWQgaW4gc2F2ZWZpbGVzIiwKIAkJICAgIGZuYW1lLCBsaW5rdHlwZSk7CiAJCXJldHVybiAoTlVMTCk7CiAJfQogCiAJaWYgKGZuYW1lID09IE5VTEwpIHsKLQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICJBIG51bGwgcG9pbnRlciB3YXMgc3VwcGxpZWQgYXMgdGhlIGZpbGUgbmFtZSIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC04NjIsMTEgKzkxOSwxOSBAQAogCQlyZXR1cm4gKHBjYXBfc2V0dXBfZHVtcChwLCBsaW5rdHlwZSwgc3Rkb3V0LCAic3RhbmRhcmQgb3V0cHV0IikpOwogCiAJLyoKKwkgKiAiYSIgd2lsbCBjYXVzZSB0aGUgZmlsZSAqbm90KiB0byBiZSB0cnVuY2F0ZWQgaWYgaXQgZXhpc3RzCisJICogYnV0IHdpbGwgY2F1c2UgaXQgdG8gYmUgY3JlYXRlZCBpZiBpdCBkb2Vzbid0LiAgSXQgd2lsbAorCSAqIGFsc28gY2F1c2UgYWxsIHdyaXRlcyB0byBiZSBkb25lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUsCisJICogYnV0IHdpbGwgYWxsb3cgcmVhZHMgdG8gYmUgZG9uZSBhbnl3aGVyZSBpbiB0aGUgZmlsZS4gIFRoaXMKKwkgKiBpcyB3aGF0IHdlIG5lZWQsIGJlY2F1c2Ugd2UgbmVlZCB0byByZWFkIGZyb20gdGhlIGJlZ2lubmluZworCSAqIG9mIHRoZSBmaWxlIHRvIHNlZSBpZiBpdCBhbHJlYWR5IGhhcyBhIGhlYWRlciBhbmQgcGFja2V0cworCSAqIG9yIGlmIGl0IGRvZXNuJ3QuCisJICoKIAkgKiAiYiIgaXMgc3VwcG9ydGVkIGFzIG9mIEM5MCwgc28gKmFsbCogVU4qWGVzIHNob3VsZCBzdXBwb3J0IGl0LAogCSAqIGV2ZW4gdGhvdWdoIGl0IGRvZXMgbm90aGluZy4gIEl0J3MgcmVxdWlyZWQgb24gV2luZG93cywgYXMgdGhlCiAJICogZmlsZSBpcyBhIGJpbmFyeSBmaWxlIGFuZCBtdXN0IGJlIHJlYWQgaW4gYmluYXJ5IG1vZGUuCiAJICovCi0JZiA9IGZvcGVuKGZuYW1lLCAicmIrIik7CisJZiA9IGNoYXJzZXRfZm9wZW4oZm5hbWUsICJhYisiKTsKIAlpZiAoZiA9PSBOVUxMKSB7CiAJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8ocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkgICAgZXJybm8sICIlcyIsIGZuYW1lKTsKQEAgLTg3NSwxOCArOTQwLDMzIEBACiAKIAkvKgogCSAqIFRyeSB0byByZWFkIGEgcGNhcCBoZWFkZXIuCisJICoKKwkgKiBXZSBkbyBub3QgYXNzdW1lIHRoYXQgdGhlIGZpbGUgd2lsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZQorCSAqIGJlZ2lubmluZyBpbW1lZGlhdGVseSBhZnRlciB3ZSd2ZSBvcGVuZWQgaXQgLSB3ZSBzZWVrIHRvCisJICogdGhlIGJlZ2lubmluZy4gIElTTyBDIHNheXMgaXQncyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkCisJICogd2hldGhlciB0aGUgZmlsZSBwb3NpdGlvbiBpbmRpY2F0b3IgaXMgYXQgdGhlIGJlZ2lubmluZworCSAqIG9yIHRoZSBlbmQgb2YgdGhlIGZpbGUgYWZ0ZXIgYW4gYXBwZW5kLW1vZGUgb3BlbiwgYW5kCisJICogaXQgd2Fzbid0IG9idmlvdXMgZnJvbSB0aGUgU2luZ2xlIFVOSVggU3BlY2lmaWNhdGlvbgorCSAqIG9yIHRoZSBNaWNyb3NvZnQgZG9jdW1lbnRhdGlvbiBob3cgdGhhdCB3b3JrcyBvbiBTVVMtCisJICogY29tcGxpYW50IHN5c3RlbXMgb3Igb24gV2luZG93cy4KIAkgKi8KKwlpZiAoZnNlZWsoZiwgMCwgU0VFS19TRVQpID09IC0xKSB7CisJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8ocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkgICAgZXJybm8sICJDYW4ndCBzZWVrIHRvIHRoZSBiZWdpbm5pbmcgb2YgJXMiLCBmbmFtZSk7CisJCSh2b2lkKWZjbG9zZShmKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CiAJYW10X3JlYWQgPSBmcmVhZCgmcGgsIDEsIHNpemVvZiAocGgpLCBmKTsKIAlpZiAoYW10X3JlYWQgIT0gc2l6ZW9mIChwaCkpIHsKIAkJaWYgKGZlcnJvcihmKSkgewogCQkJcGNhcF9mbXRfZXJybXNnX2Zvcl9lcnJubyhwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgICAgZXJybm8sICIlcyIsIGZuYW1lKTsKLQkJCWZjbG9zZShmKTsKKwkJCSh2b2lkKWZjbG9zZShmKTsKIAkJCXJldHVybiAoTlVMTCk7CiAJCX0gZWxzZSBpZiAoZmVvZihmKSAmJiBhbXRfcmVhZCA+IDApIHsKLQkJCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJICAgICIlczogdHJ1bmNhdGVkIHBjYXAgZmlsZSBoZWFkZXIiLCBmbmFtZSk7Ci0JCQlmY2xvc2UoZik7CisJCQkodm9pZClmY2xvc2UoZik7CiAJCQlyZXR1cm4gKE5VTEwpOwogCQl9CiAJfQpAQCAtOTIwLDQyICsxMDAwLDQyIEBACiAKIAkJY2FzZSBUQ1BEVU1QX01BR0lDOgogCQkJaWYgKHAtPm9wdC50c3RhbXBfcHJlY2lzaW9uICE9IFBDQVBfVFNUQU1QX1BSRUNJU0lPTl9NSUNSTykgewotCQkJCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCQkgICAgIiVzOiBkaWZmZXJlbnQgdGltZSBzdGFtcCBwcmVjaXNpb24sIGNhbm5vdCBhcHBlbmQgdG8gZmlsZSIsIGZuYW1lKTsKLQkJCQlmY2xvc2UoZik7CisJCQkJKHZvaWQpZmNsb3NlKGYpOwogCQkJCXJldHVybiAoTlVMTCk7CiAJCQl9CiAJCQlicmVhazsKIAogCQljYXNlIE5TRUNfVENQRFVNUF9NQUdJQzoKIAkJCWlmIChwLT5vcHQudHN0YW1wX3ByZWNpc2lvbiAhPSBQQ0FQX1RTVEFNUF9QUkVDSVNJT05fTkFOTykgewotCQkJCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCQkgICAgIiVzOiBkaWZmZXJlbnQgdGltZSBzdGFtcCBwcmVjaXNpb24sIGNhbm5vdCBhcHBlbmQgdG8gZmlsZSIsIGZuYW1lKTsKLQkJCQlmY2xvc2UoZik7CisJCQkJKHZvaWQpZmNsb3NlKGYpOwogCQkJCXJldHVybiAoTlVMTCk7CiAJCQl9CiAJCQlicmVhazsKIAogCQljYXNlIFNXQVBMT05HKFRDUERVTVBfTUFHSUMpOgogCQljYXNlIFNXQVBMT05HKE5TRUNfVENQRFVNUF9NQUdJQyk6Ci0JCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAgICAiJXM6IGRpZmZlcmVudCBieXRlIG9yZGVyLCBjYW5ub3QgYXBwZW5kIHRvIGZpbGUiLCBmbmFtZSk7Ci0JCQlmY2xvc2UoZik7CisJCQkodm9pZClmY2xvc2UoZik7CiAJCQlyZXR1cm4gKE5VTEwpOwogCiAJCWNhc2UgS1VaTkVUWk9WX1RDUERVTVBfTUFHSUM6CiAJCWNhc2UgU1dBUExPTkcoS1VaTkVUWk9WX1RDUERVTVBfTUFHSUMpOgogCQljYXNlIE5BVlRFTF9UQ1BEVU1QX01BR0lDOgogCQljYXNlIFNXQVBMT05HKE5BVlRFTF9UQ1BEVU1QX01BR0lDKToKLQkJCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJICAgICIlczogbm90IGEgcGNhcCBmaWxlIHRvIHdoaWNoIHdlIGNhbiBhcHBlbmQiLCBmbmFtZSk7Ci0JCQlmY2xvc2UoZik7CisJCQkodm9pZClmY2xvc2UoZik7CiAJCQlyZXR1cm4gKE5VTEwpOwogCiAJCWRlZmF1bHQ6Ci0JCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAgICAiJXM6IG5vdCBhIHBjYXAgZmlsZSIsIGZuYW1lKTsKLQkJCWZjbG9zZShmKTsKKwkJCSh2b2lkKWZjbG9zZShmKTsKIAkJCXJldHVybiAoTlVMTCk7CiAJCX0KIApAQCAtOTY0LDI5ICsxMDQ0LDI5IEBACiAJCSAqLwogCQlpZiAocGgudmVyc2lvbl9tYWpvciAhPSBQQ0FQX1ZFUlNJT05fTUFKT1IgfHwKIAkJICAgIHBoLnZlcnNpb25fbWlub3IgIT0gUENBUF9WRVJTSU9OX01JTk9SKSB7Ci0JCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAgICAiJXM6IHZlcnNpb24gaXMgJXUuJXUsIGNhbm5vdCBhcHBlbmQgdG8gZmlsZSIsIGZuYW1lLAogCQkJICAgIHBoLnZlcnNpb25fbWFqb3IsIHBoLnZlcnNpb25fbWlub3IpOwotCQkJZmNsb3NlKGYpOworCQkJKHZvaWQpZmNsb3NlKGYpOwogCQkJcmV0dXJuIChOVUxMKTsKIAkJfQogCQlpZiAoKGJwZl91X2ludDMyKWxpbmt0eXBlICE9IHBoLmxpbmt0eXBlKSB7Ci0JCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAgICAiJXM6IGRpZmZlcmVudCBsaW5rdHlwZSwgY2Fubm90IGFwcGVuZCB0byBmaWxlIiwgZm5hbWUpOwotCQkJZmNsb3NlKGYpOworCQkJKHZvaWQpZmNsb3NlKGYpOwogCQkJcmV0dXJuIChOVUxMKTsKIAkJfQogCQlpZiAoKGJwZl91X2ludDMyKXAtPnNuYXBzaG90ICE9IHBoLnNuYXBsZW4pIHsKLQkJCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJICAgICIlczogZGlmZmVyZW50IHNuYXBsZW4sIGNhbm5vdCBhcHBlbmQgdG8gZmlsZSIsIGZuYW1lKTsKLQkJCWZjbG9zZShmKTsKKwkJCSh2b2lkKWZjbG9zZShmKTsKIAkJCXJldHVybiAoTlVMTCk7CiAJCX0KIAl9IGVsc2UgewogCQkvKgogCQkgKiBBIGhlYWRlciBpc24ndCBwcmVzZW50OyBhdHRlbXB0IHRvIHdyaXRlIGl0LgogCQkgKi8KLQkJaWYgKHNmX3dyaXRlX2hlYWRlcihwLCBmLCBsaW5rdHlwZSwgcC0+dHpvZmYsIHAtPnNuYXBzaG90KSA9PSAtMSkgeworCQlpZiAoc2Zfd3JpdGVfaGVhZGVyKHAsIGYsIGxpbmt0eXBlLCBwLT5zbmFwc2hvdCkgPT0gLTEpIHsKIAkJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8ocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJICAgIGVycm5vLCAiQ2FuJ3Qgd3JpdGUgdG8gJXMiLCBmbmFtZSk7CiAJCQkodm9pZClmY2xvc2UoZik7CkBAIC05OTYsMTAgKzEwNzYsMTQgQEAKIAogCS8qCiAJICogU3RhcnQgd3JpdGluZyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgorCSAqCisJICogWFhYIC0gdGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LCBnaXZlbiB0aGF0IHdlJ3JlIG9wZW5pbmcKKwkgKiB0aGUgZmlsZSBpbiBhcHBlbmQgbW9kZSwgYW5kIElTTyBDIHNwZWNpZmllcyB0aGF0IGFsbCB3cml0ZXMKKwkgKiBhcmUgZG9uZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGluIHRoYXQgbW9kZS4KIAkgKi8KIAlpZiAoZnNlZWsoZiwgMCwgU0VFS19FTkQpID09IC0xKSB7CiAJCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8ocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAotCQkgICAgZXJybm8sICJDYW4ndCBzZWVrIHRvIGVuZCBvZiAlcyIsIGZuYW1lKTsKKwkJICAgIGVycm5vLCAiQ2FuJ3Qgc2VlayB0byB0aGUgZW5kIG9mICVzIiwgZm5hbWUpOwogCQkodm9pZClmY2xvc2UoZik7CiAJCXJldHVybiAoTlVMTCk7CiAJfQpkaWZmIC0tZ2l0IGEvc2YtcGNhcC5oIGIvc2YtcGNhcC5oCmluZGV4IGU5YzdlYWYuLmJjNzE1MGYgMTAwNjQ0Ci0tLSBhL3NmLXBjYXAuaAorKysgYi9zZi1wY2FwLmgKQEAgLTMxLDcgKzMxLDcgQEAKICNpZm5kZWYgc2ZfcGNhcF9oCiAjZGVmaW5lCXNmX3BjYXBfaAogCi1leHRlcm4gcGNhcF90ICpwY2FwX2NoZWNrX2hlYWRlcihicGZfdV9pbnQzMiBtYWdpYywgRklMRSAqZnAsCitleHRlcm4gcGNhcF90ICpwY2FwX2NoZWNrX2hlYWRlcihjb25zdCB1aW50OF90ICptYWdpYywgRklMRSAqZnAsCiAgICAgdV9pbnQgcHJlY2lzaW9uLCBjaGFyICplcnJidWYsIGludCAqZXJyKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9zZi1wY2FwbmcuYyBiL3NmLXBjYXBuZy5jCmluZGV4IDhjOGU5M2UuLmY3ZjQxM2QgMTAwNjQ0Ci0tLSBhL3NmLXBjYXBuZy5jCisrKyBiL3NmLXBjYXBuZy5jCkBAIC04NSw3ICs4NSw3IEBACiAgKiBTZWN0aW9uIEhlYWRlciBCbG9jay4KICAqLwogI2RlZmluZSBCVF9TSEIJCQkweDBBMEQwRDBBCi0KKyNkZWZpbmUgQlRfU0hCX0lOU0FORV9NQVggICAgICAgMTAyNFUqMTAyNFUqMVUgIC8qIDFNQiBzaG91bGQgYmUgZW5vdWdoICovCiBzdHJ1Y3Qgc2VjdGlvbl9oZWFkZXJfYmxvY2sgewogCWJwZl91X2ludDMyCWJ5dGVfb3JkZXJfbWFnaWM7CiAJdV9zaG9ydAkJbWFqb3JfdmVyc2lvbjsKQEAgLTE5Nyw2ICsxOTcsNyBAQAogICogUGVyLWludGVyZmFjZSBpbmZvcm1hdGlvbi4KICAqLwogc3RydWN0IHBjYXBfbmdfaWYgeworCXVpbnQzMl90IHNuYXBsZW47CQkvKiBzbmFwc2hvdCBsZW5ndGggKi8KIAl1aW50NjRfdCB0c3Jlc29sOwkJLyogdGltZSBzdGFtcCByZXNvbHV0aW9uICovCiAJdHN0YW1wX3NjYWxlX3R5cGVfdCBzY2FsZV90eXBlOwkvKiBob3cgdG8gc2NhbGUgKi8KIAl1aW50NjRfdCBzY2FsZV9mYWN0b3I7CQkvKiB0aW1lIHN0YW1wIHNjYWxlIGZhY3RvciBmb3IgcG93ZXItb2YtMTAgdHNyZXNvbCAqLwpAQCAtMjMxLDE2ICsyMzIsMjEgQEAKIH07CiAKIC8qCi0gKiBNYXhpbXVtIGJsb2NrIHNpemUgZm9yIGEgZ2l2ZW4gbWF4aW11bSBzbmFwc2hvdCBsZW5ndGg7IHdlIGNhbGN1bGF0ZQotICogdGhpcyBiYXNlZAotICoKLSAqIFdlIGRlZmluZSBpdCBhcyB0aGUgc2l6ZSBvZiBhbiBFUEIgd2l0aCBhIG1heF9zbmFwbGVuLXNpemVkCi0gKiBwYWNrZXQgYW5kIDEyOEtCIG9mIG9wdGlvbnMuCisgKiBUaGUgbWF4aW11bSBibG9jayBzaXplIHdlIHN0YXJ0IHdpdGg7IHdlIHVzZSBhbiBhcmJpdHJhcnkgdmFsdWUgb2YKKyAqIDE2IE1pQi4KICAqLwotI2RlZmluZSBNQVhfQkxPQ0tTSVpFKG1heF9zbmFwbGVuKQkoc2l6ZW9mIChzdHJ1Y3QgYmxvY2tfaGVhZGVyKSArIFwKLQkJCQkJIHNpemVvZiAoc3RydWN0IGVuaGFuY2VkX3BhY2tldF9ibG9jaykgKyBcCi0JCQkJCSAobWF4X3NuYXBsZW4pICsgMTMxMDcyICsgXAotCQkJCQkgc2l6ZW9mIChzdHJ1Y3QgYmxvY2tfdHJhaWxlcikpCisjZGVmaW5lIElOSVRJQUxfTUFYX0JMT0NLU0laRQkoMTYqMTAyNCoxMDI0KQorCisvKgorICogTWF4aW11bSBibG9jayBzaXplIGZvciBhIGdpdmVuIG1heGltdW0gc25hcHNob3QgbGVuZ3RoOyB3ZSBkZWZpbmUgaXQKKyAqIGFzIHRoZSBzaXplIG9mIGFuIEVQQiB3aXRoIGEgbWF4X3NuYXBsZW4tc2l6ZWQgcGFja2V0IGFuZCAxMjhLQiBvZgorICogb3B0aW9ucy4KKyAqLworI2RlZmluZSBNQVhfQkxPQ0tTSVpFX0ZPUl9TTkFQTEVOKG1heF9zbmFwbGVuKSBcCisJKHNpemVvZiAoc3RydWN0IGJsb2NrX2hlYWRlcikgKyBcCisJIHNpemVvZiAoc3RydWN0IGVuaGFuY2VkX3BhY2tldF9ibG9jaykgKyBcCisJIChtYXhfc25hcGxlbikgKyAxMzEwNzIgKyBcCisJIHNpemVvZiAoc3RydWN0IGJsb2NrX3RyYWlsZXIpKQogCiBzdGF0aWMgdm9pZCBwY2FwX25nX2NsZWFudXAocGNhcF90ICpwKTsKIHN0YXRpYyBpbnQgcGNhcF9uZ19uZXh0X3BhY2tldChwY2FwX3QgKnAsIHN0cnVjdCBwY2FwX3BrdGhkciAqaGRyLApAQCAtMjYwLDEwICsyNjYsOSBAQAogCQl9IGVsc2UgewogCQkJaWYgKGFtdF9yZWFkID09IDAgJiYgIWZhaWxfb25fZW9mKQogCQkJCXJldHVybiAoMCk7CS8qIEVPRiAqLwotCQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCi0JCQkgICAgInRydW5jYXRlZCBkdW1wIGZpbGU7IHRyaWVkIHRvIHJlYWQgJWx1IGJ5dGVzLCBvbmx5IGdvdCAlbHUiLAotCQkJICAgICh1bnNpZ25lZCBsb25nKWJ5dGVzX3RvX3JlYWQsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpYW10X3JlYWQpOworCQkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJICAgICJ0cnVuY2F0ZWQgcGNhcG5nIGR1bXAgZmlsZTsgdHJpZWQgdG8gcmVhZCAlenUgYnl0ZXMsIG9ubHkgZ290ICV6dSIsCisJCQkgICAgYnl0ZXNfdG9fcmVhZCwgYW10X3JlYWQpOwogCQl9CiAJCXJldHVybiAoLTEpOwogCX0KQEAgLTI3Niw2ICsyODEsNyBAQAogCXN0cnVjdCBwY2FwX25nX3NmICpwczsKIAlpbnQgc3RhdHVzOwogCXN0cnVjdCBibG9ja19oZWFkZXIgYmhkcjsKKwlzdHJ1Y3QgYmxvY2tfdHJhaWxlciAqYnRybHI7CiAJdV9jaGFyICpiZGF0YTsKIAlzaXplX3QgZGF0YV9yZW1haW5pbmc7CiAKQEAgLTI5MSwyOSArMjk3LDI4IEBACiAJfQogCiAJLyoKLQkgKiBJcyB0aGlzIGJsb2NrICJ0b28gYmlnIj8KLQkgKgotCSAqIFdlIGNob29zZSAxNk1CIGFzICJ0b28gYmlnIiwgZm9yIG5vdywgc28gdGhhdCB3ZSBoYW5kbGUKLQkgKiAicmVhc29uYWJseSIgbGFyZ2UgYnVmZmVycyBidXQgZG9uJ3QgY2hldyB1cCBhbGwgdGhlCi0JICogbWVtb3J5IGlmIHdlIHJlYWQgYSBtYWxmb3JtZWQgZmlsZS4KLQkgKi8KLQlpZiAoYmhkci50b3RhbF9sZW5ndGggPiAxNioxMDI0KjEwMjQpIHsKLQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCi0JCSAgICAicGNhcG5nIGJsb2NrIHNpemUgJXUgPiBtYXhpbXVtICV1IiwKLQkJICAgIGJoZHIudG90YWxfbGVuZ3RoLCAxNioxMDI0KjEwMjQpOwotCQkgICAgcmV0dXJuICgtMSk7Ci0JfQotCi0JLyoKIAkgKiBJcyB0aGlzIGJsb2NrICJ0b28gc21hbGwiIC0gaS5lLiwgaXMgaXQgc2hvcnRlciB0aGFuIGEgYmxvY2sKIAkgKiBoZWFkZXIgcGx1cyBhIGJsb2NrIHRyYWlsZXI/CiAJICovCiAJaWYgKGJoZHIudG90YWxfbGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBibG9ja19oZWFkZXIpICsKIAkgICAgc2l6ZW9mKHN0cnVjdCBibG9ja190cmFpbGVyKSkgewotCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJICAgICJibG9jayBpbiBwY2FwbmcgZHVtcCBmaWxlIGhhcyBhIGxlbmd0aCBvZiAldSA8ICVsdSIsCisJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJICAgICJibG9jayBpbiBwY2FwbmcgZHVtcCBmaWxlIGhhcyBhIGxlbmd0aCBvZiAldSA8ICV6dSIsCiAJCSAgICBiaGRyLnRvdGFsX2xlbmd0aCwKLQkJICAgICh1bnNpZ25lZCBsb25nKShzaXplb2Yoc3RydWN0IGJsb2NrX2hlYWRlcikgKyBzaXplb2Yoc3RydWN0IGJsb2NrX3RyYWlsZXIpKSk7CisJCSAgICBzaXplb2Yoc3RydWN0IGJsb2NrX2hlYWRlcikgKyBzaXplb2Yoc3RydWN0IGJsb2NrX3RyYWlsZXIpKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJLyoKKwkgKiBJcyB0aGUgYmxvY2sgdG90YWwgbGVuZ3RoIGEgbXVsdGlwbGUgb2YgND8KKwkgKi8KKwlpZiAoKGJoZHIudG90YWxfbGVuZ3RoICUgNCkgIT0gMCkgeworCQkvKgorCQkgKiBOby4gIFJlcG9ydCB0aGF0IGFzIGFuIGVycm9yLgorCQkgKi8KKwkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkgICAgImJsb2NrIGluIHBjYXBuZyBkdW1wIGZpbGUgaGFzIGEgbGVuZ3RoIG9mICV1IHRoYXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgNCIsCisJCSAgICBiaGRyLnRvdGFsX2xlbmd0aCk7CiAJCXJldHVybiAoLTEpOwogCX0KIApAQCAtMzIyLDE4ICszMjcsMTkgQEAKIAkgKi8KIAlpZiAocC0+YnVmc2l6ZSA8IGJoZHIudG90YWxfbGVuZ3RoKSB7CiAJCS8qCi0JCSAqIE5vIC0gbWFrZSBpdCBiaWcgZW5vdWdoLCB1bmxlc3MgaXQncyB0b28gYmlnLgorCQkgKiBObyAtIG1ha2UgaXQgYmlnIGVub3VnaCwgdW5sZXNzIGl0J3MgdG9vIGJpZywgaW4KKwkJICogd2hpY2ggY2FzZSB3ZSBmYWlsLgogCQkgKi8KIAkJdm9pZCAqYmlnZ2VyX2J1ZmZlcjsKIAogCQlpZiAoYmhkci50b3RhbF9sZW5ndGggPiBwcy0+bWF4X2Jsb2Nrc2l6ZSkgewotCQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJibG9jayBpcyBsYXJnZXIgdGhhbiBtYXhpbXVtIGJsb2NrIHNpemUgJXUiLAorCQkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAicGNhcG5nIGJsb2NrIHNpemUgJXUgPiBtYXhpbXVtICV1IiwgYmhkci50b3RhbF9sZW5ndGgsCiAJCQkgICAgcHMtPm1heF9ibG9ja3NpemUpOwogCQkJcmV0dXJuICgtMSk7CiAJCX0KIAkJYmlnZ2VyX2J1ZmZlciA9IHJlYWxsb2MocC0+YnVmZmVyLCBiaGRyLnRvdGFsX2xlbmd0aCk7CiAJCWlmIChiaWdnZXJfYnVmZmVyID09IE5VTEwpIHsKLQkJCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAib3V0IG9mIG1lbW9yeSIpOworCQkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLCAib3V0IG9mIG1lbW9yeSIpOwogCQkJcmV0dXJuICgtMSk7CiAJCX0KIAkJcC0+YnVmZmVyID0gYmlnZ2VyX2J1ZmZlcjsKQEAgLTM1MCw2ICszNTYsMjYgQEAKIAkJcmV0dXJuICgtMSk7CiAKIAkvKgorCSAqIEdldCB0aGUgYmxvY2sgc2l6ZSBmcm9tIHRoZSB0cmFpbGVyLgorCSAqLworCWJ0cmxyID0gKHN0cnVjdCBibG9ja190cmFpbGVyICopKGJkYXRhICsgZGF0YV9yZW1haW5pbmcgLSBzaXplb2YgKHN0cnVjdCBibG9ja190cmFpbGVyKSk7CisJaWYgKHAtPnN3YXBwZWQpCisJCWJ0cmxyLT50b3RhbF9sZW5ndGggPSBTV0FQTE9ORyhidHJsci0+dG90YWxfbGVuZ3RoKTsKKworCS8qCisJICogSXMgdGhlIHRvdGFsIGxlbmd0aCBmcm9tIHRoZSB0cmFpbGVyIHRoZSBzYW1lIGFzIHRoZSB0b3RhbAorCSAqIGxlbmd0aCBmcm9tIHRoZSBoZWFkZXI/CisJICovCisJaWYgKGJoZHIudG90YWxfbGVuZ3RoICE9IGJ0cmxyLT50b3RhbF9sZW5ndGgpIHsKKwkJLyoKKwkJICogTm8uCisJCSAqLworCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCSAgICAiYmxvY2sgdG90YWwgbGVuZ3RoIGluIGhlYWRlciBhbmQgdHJhaWxlciBkb24ndCBtYXRjaCIpOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwkvKgogCSAqIEluaXRpYWxpemUgdGhlIGN1cnNvci4KIAkgKi8KIAljdXJzb3ItPmRhdGEgPSBiZGF0YTsKQEAgLTM2OSw3ICszOTUsNyBAQAogCSAqIHRoZSBibG9jayBkYXRhLgogCSAqLwogCWlmIChjdXJzb3ItPmRhdGFfcmVtYWluaW5nIDwgY2h1bmtfc2l6ZSkgewotCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkgICAgImJsb2NrIG9mIHR5cGUgJXUgaW4gcGNhcG5nIGR1bXAgZmlsZSBpcyB0b28gc2hvcnQiLAogCQkgICAgY3Vyc29yLT5ibG9ja190eXBlKTsKIAkJcmV0dXJuIChOVUxMKTsKQEAgLTQ3MCw3ICs0OTYsNyBAQAogCiAJCWNhc2UgT1BUX0VORE9GT1BUOgogCQkJaWYgKG9wdGhkci0+b3B0aW9uX2xlbmd0aCAhPSAwKSB7Ci0JCQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJCSAgICAiSW50ZXJmYWNlIERlc2NyaXB0aW9uIEJsb2NrIGhhcyBvcHRfZW5kb2ZvcHQgb3B0aW9uIHdpdGggbGVuZ3RoICV1ICE9IDAiLAogCQkJCSAgICBvcHRoZHItPm9wdGlvbl9sZW5ndGgpOwogCQkJCXJldHVybiAoLTEpOwpAQCAtNDc5LDEzICs1MDUsMTMgQEAKIAogCQljYXNlIElGX1RTUkVTT0w6CiAJCQlpZiAob3B0aGRyLT5vcHRpb25fbGVuZ3RoICE9IDEpIHsKLQkJCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkJICAgICJJbnRlcmZhY2UgRGVzY3JpcHRpb24gQmxvY2sgaGFzIGlmX3RzcmVzb2wgb3B0aW9uIHdpdGggbGVuZ3RoICV1ICE9IDEiLAogCQkJCSAgICBvcHRoZHItPm9wdGlvbl9sZW5ndGgpOwogCQkJCXJldHVybiAoLTEpOwogCQkJfQogCQkJaWYgKHNhd190c3Jlc29sKSB7Ci0JCQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJCSAgICAiSW50ZXJmYWNlIERlc2NyaXB0aW9uIEJsb2NrIGhhcyBtb3JlIHRoYW4gb25lIGlmX3RzcmVzb2wgb3B0aW9uIik7CiAJCQkJcmV0dXJuICgtMSk7CiAJCQl9CkBAIC01MDIsNyArNTI4LDcgQEAKIAkJCQkJICogUmVzb2x1dGlvbiBpcyB0b28gaGlnaDsgMl4te3Jlc30KIAkJCQkJICogd29uJ3QgZml0IGluIGEgNjQtYml0IHZhbHVlLgogCQkJCQkgKi8KLQkJCQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCQkJICAgICJJbnRlcmZhY2UgRGVzY3JpcHRpb24gQmxvY2sgaWZfdHNyZXNvbCBvcHRpb24gcmVzb2x1dGlvbiAyXi0ldSBpcyB0b28gaGlnaCIsCiAJCQkJCSAgICB0c3Jlc29sX3NoaWZ0KTsKIAkJCQkJcmV0dXJuICgtMSk7CkBAIC01MjIsNyArNTQ4LDcgQEAKIAkJCQkJICogdGhlIGxhcmdlc3QgNjQtYml0IHVuc2lnbmVkCiAJCQkJCSAqIHZhbHVlIGlzIH4xLjgqMTBeMTkpLgogCQkJCQkgKi8KLQkJCQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCQkJICAgICJJbnRlcmZhY2UgRGVzY3JpcHRpb24gQmxvY2sgaWZfdHNyZXNvbCBvcHRpb24gcmVzb2x1dGlvbiAxMF4tJXUgaXMgdG9vIGhpZ2giLAogCQkJCQkgICAgdHNyZXNvbF9vcHQpOwogCQkJCQlyZXR1cm4gKC0xKTsKQEAgLTUzNiwxMyArNTYyLDEzIEBACiAKIAkJY2FzZSBJRl9UU09GRlNFVDoKIAkJCWlmIChvcHRoZHItPm9wdGlvbl9sZW5ndGggIT0gOCkgewotCQkJCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCQkgICAgIkludGVyZmFjZSBEZXNjcmlwdGlvbiBCbG9jayBoYXMgaWZfdHNvZmZzZXQgb3B0aW9uIHdpdGggbGVuZ3RoICV1ICE9IDgiLAogCQkJCSAgICBvcHRoZHItPm9wdGlvbl9sZW5ndGgpOwogCQkJCXJldHVybiAoLTEpOwogCQkJfQogCQkJaWYgKHNhd190c29mZnNldCkgewotCQkJCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCQkgICAgIkludGVyZmFjZSBEZXNjcmlwdGlvbiBCbG9jayBoYXMgbW9yZSB0aGFuIG9uZSBpZl90c29mZnNldCBvcHRpb24iKTsKIAkJCQlyZXR1cm4gKC0xKTsKIAkJCX0KQEAgLTU2Miw3ICs1ODgsOCBAQAogfQogCiBzdGF0aWMgaW50Ci1hZGRfaW50ZXJmYWNlKHBjYXBfdCAqcCwgc3RydWN0IGJsb2NrX2N1cnNvciAqY3Vyc29yLCBjaGFyICplcnJidWYpCithZGRfaW50ZXJmYWNlKHBjYXBfdCAqcCwgc3RydWN0IGludGVyZmFjZV9kZXNjcmlwdGlvbl9ibG9jayAqaWRicCwKKyAgICBzdHJ1Y3QgYmxvY2tfY3Vyc29yICpjdXJzb3IsIGNoYXIgKmVycmJ1ZikKIHsKIAlzdHJ1Y3QgcGNhcF9uZ19zZiAqcHM7CiAJdWludDY0X3QgdHNyZXNvbDsKQEAgLTYxOSw3ICs2NDYsNyBAQAogCQkJCSAqIHBvc3NpYmxlIDMyLWJpdCBwb3dlciBvZiAyLCBhcyB3ZSBkbwogCQkJCSAqIHNpemUgZG91YmxpbmcuCiAJCQkJICovCi0JCQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJCSAgICAibW9yZSB0aGFuICV1IGludGVyZmFjZXMgaW4gdGhlIGZpbGUiLAogCQkJCSAgICAweDgwMDAwMDAwVSk7CiAJCQkJcmV0dXJuICgwKTsKQEAgLTY1MCw3ICs2NzcsNyBAQAogCQkJCSAqICh1bnNpZ25lZCkgdmFsdWUgZGl2aWRlZCBieQogCQkJCSAqIHNpemVvZiAoc3RydWN0IHBjYXBfbmdfaWYpLgogCQkJCSAqLwotCQkJCXBjYXBfc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCQkgICAgIm1vcmUgdGhhbiAldSBpbnRlcmZhY2VzIGluIHRoZSBmaWxlIiwKIAkJCQkgICAgMHhGRkZGRkZGRlUgLyAoKHVfaW50KXNpemVvZiAoc3RydWN0IHBjYXBfbmdfaWYpKSk7CiAJCQkJcmV0dXJuICgwKTsKQEAgLTY2Miw3ICs2ODksNyBAQAogCQkJICogV2UgcmFuIG91dCBvZiBtZW1vcnkuCiAJCQkgKiBHaXZlIHVwLgogCQkJICovCi0JCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAgICAib3V0IG9mIG1lbW9yeSBmb3IgcGVyLWludGVyZmFjZSBpbmZvcm1hdGlvbiAoJXUgaW50ZXJmYWNlcykiLAogCQkJICAgIHBzLT5pZmNvdW50KTsKIAkJCXJldHVybiAoMCk7CkBAIC02NzEsNiArNjk4LDggQEAKIAkJcHMtPmlmYWNlcyA9IG5ld19pZmFjZXM7CiAJfQogCisJcHMtPmlmYWNlc1twcy0+aWZjb3VudCAtIDFdLnNuYXBsZW4gPSBpZGJwLT5zbmFwbGVuOworCiAJLyoKIAkgKiBTZXQgdGhlIGRlZmF1bHQgdGltZSBzdGFtcCByZXNvbHV0aW9uIGFuZCBvZmZzZXQuCiAJICovCkBAIC03MzYsOSArNzY1LDEwIEBACiAgKiByZWxldmFudCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBoZWFkZXIuCiAgKi8KIHBjYXBfdCAqCi1wY2FwX25nX2NoZWNrX2hlYWRlcihicGZfdV9pbnQzMiBtYWdpYywgRklMRSAqZnAsIHVfaW50IHByZWNpc2lvbiwgY2hhciAqZXJyYnVmLAotICAgIGludCAqZXJyKQorcGNhcF9uZ19jaGVja19oZWFkZXIoY29uc3QgdWludDhfdCAqbWFnaWMsIEZJTEUgKmZwLCB1X2ludCBwcmVjaXNpb24sCisgICAgY2hhciAqZXJyYnVmLCBpbnQgKmVycikKIHsKKwlicGZfdV9pbnQzMiBtYWdpY19pbnQ7CiAJc2l6ZV90IGFtdF9yZWFkOwogCWJwZl91X2ludDMyIHRvdGFsX2xlbmd0aDsKIAlicGZfdV9pbnQzMiBieXRlX29yZGVyX21hZ2ljOwpAQCAtNzYwLDcgKzc5MCw4IEBACiAJICogQ2hlY2sgd2hldGhlciB0aGUgZmlyc3QgNCBieXRlcyBvZiB0aGUgZmlsZSBhcmUgdGhlIGJsb2NrCiAJICogdHlwZSBmb3IgYSBwY2Fwbmcgc2F2ZWZpbGUuCiAJICovCi0JaWYgKG1hZ2ljICE9IEJUX1NIQikgeworCW1lbWNweSgmbWFnaWNfaW50LCBtYWdpYywgc2l6ZW9mKG1hZ2ljX2ludCkpOworCWlmIChtYWdpY19pbnQgIT0gQlRfU0hCKSB7CiAJCS8qCiAJCSAqIFhYWCAtIGNoZWNrIHdoZXRoZXIgdGhpcyBsb29rcyBsaWtlIHdoYXQgdGhlIGJsb2NrCiAJCSAqIHR5cGUgd291bGQgYmUgYWZ0ZXIgYmVpbmcgbXVuZ2VkIGJ5IG1hcHBpbmcgYmV0d2VlbgpAQCAtODI5LDExICs4NjAsMTQgQEAKIAkvKgogCSAqIENoZWNrIHRoZSBzYW5pdHkgb2YgdGhlIHRvdGFsIGxlbmd0aC4KIAkgKi8KLQlpZiAodG90YWxfbGVuZ3RoIDwgc2l6ZW9mKCpiaGRycCkgKyBzaXplb2YoKnNoYnApICsgc2l6ZW9mKHN0cnVjdCBibG9ja190cmFpbGVyKSkgewotCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJICAgICJTZWN0aW9uIEhlYWRlciBCbG9jayBpbiBwY2FwbmcgZHVtcCBmaWxlIGhhcyBhIGxlbmd0aCBvZiAldSA8ICVsdSIsCisJaWYgKHRvdGFsX2xlbmd0aCA8IHNpemVvZigqYmhkcnApICsgc2l6ZW9mKCpzaGJwKSArIHNpemVvZihzdHJ1Y3QgYmxvY2tfdHJhaWxlcikgfHwKKyAgICAgICAgICAgICh0b3RhbF9sZW5ndGggPiBCVF9TSEJfSU5TQU5FX01BWCkpIHsKKwkJc25wcmludGYoZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkgICAgIlNlY3Rpb24gSGVhZGVyIEJsb2NrIGluIHBjYXBuZyBkdW1wIGZpbGUgaGFzIGludmFsaWQgbGVuZ3RoICV6dSA8IF8ldV8gPCAldSAoQlRfU0hCX0lOU0FORV9NQVgpIiwKKwkJICAgIHNpemVvZigqYmhkcnApICsgc2l6ZW9mKCpzaGJwKSArIHNpemVvZihzdHJ1Y3QgYmxvY2tfdHJhaWxlciksCiAJCSAgICB0b3RhbF9sZW5ndGgsCi0JCSAgICAodW5zaWduZWQgbG9uZykoc2l6ZW9mKCpiaGRycCkgKyBzaXplb2YoKnNoYnApICsgc2l6ZW9mKHN0cnVjdCBibG9ja190cmFpbGVyKSkpOworCQkgICAgQlRfU0hCX0lOU0FORV9NQVgpOworCiAJCSplcnIgPSAxOwogCQlyZXR1cm4gKE5VTEwpOwogCX0KQEAgLTg0Miw3ICs4NzYsNyBAQAogCSAqIE9LLCB0aGlzIGlzIGEgZ29vZCBwY2FwbmcgZmlsZS4KIAkgKiBBbGxvY2F0ZSBhIHBjYXBfdCBmb3IgaXQuCiAJICovCi0JcCA9IHBjYXBfb3Blbl9vZmZsaW5lX2NvbW1vbihlcnJidWYsIHNpemVvZiAoc3RydWN0IHBjYXBfbmdfc2YpKTsKKwlwID0gUENBUF9PUEVOX09GRkxJTkVfQ09NTU9OKGVycmJ1Ziwgc3RydWN0IHBjYXBfbmdfc2YpOwogCWlmIChwID09IE5VTEwpIHsKIAkJLyogQWxsb2NhdGlvbiBmYWlsZWQuICovCiAJCSplcnIgPSAxOwpAQCAtODY1LDcgKzg5OSw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICJ1bmtub3duIHRpbWUgc3RhbXAgcmVzb2x1dGlvbiAldSIsIHByZWNpc2lvbik7CiAJCWZyZWUocCk7CiAJCSplcnIgPSAxOwpAQCAtODg1LDIyICs5MTksMjIgQEAKIAkgKglsZWF2aW5nIHJvb20gZm9yIHNvbWUgb3B0aW9ucy4KIAkgKgogCSAqIElmIHdlIGZpbmQgYSBiaWdnZXIgYmxvY2ssIHdlIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlciwgdXAgdG8KLQkgKiB0aGUgbWF4aW11bSBzaXplLiAgV2Ugc3RhcnQgb3V0IHdpdGggYSBtYXhpbXVtIHNpemUgYmFzZWQKLQkgKiBvbiBhIG1heGltdW0gc25hcHNob3QgbGVuZ3RoIG9mIE1BWElNVU1fU05BUExFTjsgaWYgd2Ugc2VlCi0JICogYW55IGxpbmstbGF5ZXIgaGVhZGVyIHR5cGVzIHdpdGggYSBsYXJnZXIgbWF4aW11bSBzbmFwc2hvdAotCSAqIGxlbmd0aCwgd2UgYm9vc3QgdGhlIG1heGltdW0uCisJICogdGhlIG1heGltdW0gc2l6ZS4gIFdlIHN0YXJ0IG91dCB3aXRoIGEgbWF4aW11bSBzaXplIG9mCisJICogSU5JVElBTF9NQVhfQkxPQ0tTSVpFOyBpZiB3ZSBzZWUgYW55IGxpbmstbGF5ZXIgaGVhZGVyIHR5cGVzCisJICogd2l0aCBhIG1heGltdW0gc25hcHNob3QgdGhhdCByZXN1bHRzIGluIGEgbGFyZ2VyIG1heGltdW0KKwkgKiBibG9jayBsZW5ndGgsIHdlIGJvb3N0IHRoZSBtYXhpbXVtLgogCSAqLwogCXAtPmJ1ZnNpemUgPSAyMDQ4OwogCWlmIChwLT5idWZzaXplIDwgdG90YWxfbGVuZ3RoKQogCQlwLT5idWZzaXplID0gdG90YWxfbGVuZ3RoOwogCXAtPmJ1ZmZlciA9IG1hbGxvYyhwLT5idWZzaXplKTsKIAlpZiAocC0+YnVmZmVyID09IE5VTEwpIHsKLQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsICJvdXQgb2YgbWVtb3J5Iik7CisJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIm91dCBvZiBtZW1vcnkiKTsKIAkJZnJlZShwKTsKIAkJKmVyciA9IDE7CiAJCXJldHVybiAoTlVMTCk7CiAJfQotCXBzLT5tYXhfYmxvY2tzaXplID0gTUFYX0JMT0NLU0laRShNQVhJTVVNX1NOQVBMRU4pOworCXBzLT5tYXhfYmxvY2tzaXplID0gSU5JVElBTF9NQVhfQkxPQ0tTSVpFOwogCiAJLyoKIAkgKiBDb3B5IHRoZSBzdHVmZiB3ZSd2ZSByZWFkIHRvIHRoZSBidWZmZXIsIGFuZCByZWFkIHRoZSByZXN0CkBAIC05MDgsMTIgKzk0MiwxMiBAQAogCSAqLwogCWJoZHJwID0gKHN0cnVjdCBibG9ja19oZWFkZXIgKilwLT5idWZmZXI7CiAJc2hicCA9IChzdHJ1Y3Qgc2VjdGlvbl9oZWFkZXJfYmxvY2sgKikoKHVfY2hhciAqKXAtPmJ1ZmZlciArIHNpemVvZihzdHJ1Y3QgYmxvY2tfaGVhZGVyKSk7Ci0JYmhkcnAtPmJsb2NrX3R5cGUgPSBtYWdpYzsKKwliaGRycC0+YmxvY2tfdHlwZSA9IG1hZ2ljX2ludDsKIAliaGRycC0+dG90YWxfbGVuZ3RoID0gdG90YWxfbGVuZ3RoOwogCXNoYnAtPmJ5dGVfb3JkZXJfbWFnaWMgPSBieXRlX29yZGVyX21hZ2ljOwogCWlmIChyZWFkX2J5dGVzKGZwLAotCSAgICAodV9jaGFyICopcC0+YnVmZmVyICsgKHNpemVvZihtYWdpYykgKyBzaXplb2YodG90YWxfbGVuZ3RoKSArIHNpemVvZihieXRlX29yZGVyX21hZ2ljKSksCi0JICAgIHRvdGFsX2xlbmd0aCAtIChzaXplb2YobWFnaWMpICsgc2l6ZW9mKHRvdGFsX2xlbmd0aCkgKyBzaXplb2YoYnl0ZV9vcmRlcl9tYWdpYykpLAorCSAgICAodV9jaGFyICopcC0+YnVmZmVyICsgKHNpemVvZihtYWdpY19pbnQpICsgc2l6ZW9mKHRvdGFsX2xlbmd0aCkgKyBzaXplb2YoYnl0ZV9vcmRlcl9tYWdpYykpLAorCSAgICB0b3RhbF9sZW5ndGggLSAoc2l6ZW9mKG1hZ2ljX2ludCkgKyBzaXplb2YodG90YWxfbGVuZ3RoKSArIHNpemVvZihieXRlX29yZGVyX21hZ2ljKSksCiAJICAgIDEsIGVycmJ1ZikgPT0gLTEpCiAJCWdvdG8gZmFpbDsKIApAQCAtOTMxLDcgKzk2NSw3IEBACiAJLyogY3VycmVudGx5IG9ubHkgU0hCIHZlcnNpb24gMS4wIGlzIHN1cHBvcnRlZCAqLwogCWlmICghIChzaGJwLT5tYWpvcl92ZXJzaW9uID09IFBDQVBfTkdfVkVSU0lPTl9NQUpPUiAmJgogCSAgICAgICBzaGJwLT5taW5vcl92ZXJzaW9uID09IFBDQVBfTkdfVkVSU0lPTl9NSU5PUikpIHsKLQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJICAgICJ1bnN1cHBvcnRlZCBwY2Fwbmcgc2F2ZWZpbGUgdmVyc2lvbiAldS4ldSIsCiAJCSAgICBzaGJwLT5tYWpvcl92ZXJzaW9uLCBzaGJwLT5taW5vcl92ZXJzaW9uKTsKIAkJZ290byBmYWlsOwpAQCAtOTU0LDcgKzk4OCw3IEBACiAJCXN0YXR1cyA9IHJlYWRfYmxvY2soZnAsIHAsICZjdXJzb3IsIGVycmJ1Zik7CiAJCWlmIChzdGF0dXMgPT0gMCkgewogCQkJLyogRU9GIC0gbm8gSURCIGluIHRoaXMgZmlsZSAqLwotCQkJcGNhcF9zbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQlzbnByaW50ZihlcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkgICAgInRoZSBjYXB0dXJlIGZpbGUgaGFzIG5vIEludGVyZmFjZSBEZXNjcmlwdGlvbiBCbG9ja3MiKTsKIAkJCWdvdG8gZmFpbDsKIAkJfQpAQCAtOTgzLDcgKzEwMTcsNyBAQAogCQkJLyoKIAkJCSAqIFRyeSB0byBhZGQgdGhpcyBpbnRlcmZhY2UuCiAJCQkgKi8KLQkJCWlmICghYWRkX2ludGVyZmFjZShwLCAmY3Vyc29yLCBlcnJidWYpKQorCQkJaWYgKCFhZGRfaW50ZXJmYWNlKHAsIGlkYnAsICZjdXJzb3IsIGVycmJ1ZikpCiAJCQkJZ290byBmYWlsOwogCiAJCQlnb3RvIGRvbmU7CkBAIC05OTYsNyArMTAzMCw3IEBACiAJCQkgKiBub3QgdmFsaWQsIGFzIHdlIGRvbid0IGtub3cgd2hhdCBsaW5rLWxheWVyCiAJCQkgKiBlbmNhcHN1bGF0aW9uIHRoZSBwYWNrZXQgaGFzLgogCQkJICovCi0JCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCXNucHJpbnRmKGVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCSAgICAidGhlIGNhcHR1cmUgZmlsZSBoYXMgYSBwYWNrZXQgYmxvY2sgYmVmb3JlIGFueSBJbnRlcmZhY2UgRGVzY3JpcHRpb24gQmxvY2tzIik7CiAJCQlnb3RvIGZhaWw7CiAKQEAgLTEwMDksMjAgKzEwNDMsOCBAQAogCX0KIAogZG9uZToKLQlwLT50em9mZiA9IDA7CS8qIFhYWCAtIG5vdCB1c2VkIGluIHBjYXAgKi8KLQlwLT5zbmFwc2hvdCA9IGlkYnAtPnNuYXBsZW47Ci0JaWYgKHAtPnNuYXBzaG90IDw9IDApIHsKLQkJLyoKLQkJICogQm9ndXMgc25hcHNob3QgbGVuZ3RoOyB1c2UgdGhlIG1heGltdW0gZm9yIHRoaXMKLQkJICogbGluay1sYXllciB0eXBlIGFzIGEgZmFsbGJhY2suCi0JCSAqCi0JCSAqIFhYWCAtIHRoZSBvbmx5IHJlYXNvbiB3aHkgc25hcHNob3QgaXMgc2lnbmVkIGlzCi0JCSAqIHRoYXQgcGNhcF9zbmFwc2hvdCgpIHJldHVybnMgYW4gaW50LCBub3QgYW4KLQkJICogdW5zaWduZWQgaW50LgotCQkgKi8KLQkJcC0+c25hcHNob3QgPSBtYXhfc25hcGxlbl9mb3JfZGx0KGlkYnAtPmxpbmt0eXBlKTsKLQl9CiAJcC0+bGlua3R5cGUgPSBsaW5rdHlwZV90b19kbHQoaWRicC0+bGlua3R5cGUpOworCXAtPnNuYXBzaG90ID0gcGNhcF9hZGp1c3Rfc25hcHNob3QocC0+bGlua3R5cGUsIGlkYnAtPnNuYXBsZW4pOwogCXAtPmxpbmt0eXBlX2V4dCA9IDA7CiAKIAkvKgpAQCAtMTAzMCw4ICsxMDUyLDggQEAKIAkgKiBzbmFwc2hvdCBsZW5ndGggZm9yIHRoaXMgRExUXyBpcyBiaWdnZXIgdGhhbiB0aGUgY3VycmVudAogCSAqIG1heGltdW0gYmxvY2sgc2l6ZSwgaW5jcmVhc2UgdGhlIG1heGltdW0uCiAJICovCi0JaWYgKE1BWF9CTE9DS1NJWkUobWF4X3NuYXBsZW5fZm9yX2RsdChwLT5saW5rdHlwZSkpID4gcHMtPm1heF9ibG9ja3NpemUpCi0JCXBzLT5tYXhfYmxvY2tzaXplID0gTUFYX0JMT0NLU0laRShtYXhfc25hcGxlbl9mb3JfZGx0KHAtPmxpbmt0eXBlKSk7CisJaWYgKE1BWF9CTE9DS1NJWkVfRk9SX1NOQVBMRU4obWF4X3NuYXBsZW5fZm9yX2RsdChwLT5saW5rdHlwZSkpID4gcHMtPm1heF9ibG9ja3NpemUpCisJCXBzLT5tYXhfYmxvY2tzaXplID0gTUFYX0JMT0NLU0laRV9GT1JfU05BUExFTihtYXhfc25hcGxlbl9mb3JfZGx0KHAtPmxpbmt0eXBlKSk7CiAKIAlwLT5uZXh0X3BhY2tldF9vcCA9IHBjYXBfbmdfbmV4dF9wYWNrZXQ7CiAJcC0+Y2xlYW51cF9vcCA9IHBjYXBfbmdfY2xlYW51cDsKQEAgLTEyMTIsMTQgKzEyMzQsMjAgQEAKIAkJCSAqIGludGVyZmFjZXM/CiAJCQkgKi8KIAkJCWlmIChwLT5saW5rdHlwZSAhPSBpZGJwLT5saW5rdHlwZSkgewotCQkJCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQkJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKIAkJCQkgICAgImFuIGludGVyZmFjZSBoYXMgYSB0eXBlICV1IGRpZmZlcmVudCBmcm9tIHRoZSB0eXBlIG9mIHRoZSBmaXJzdCBpbnRlcmZhY2UiLAogCQkJCSAgICBpZGJwLT5saW5rdHlwZSk7CiAJCQkJcmV0dXJuICgtMSk7CiAJCQl9Ci0JCQlpZiAoKGJwZl91X2ludDMyKXAtPnNuYXBzaG90ICE9IGlkYnAtPnNuYXBsZW4pIHsKLQkJCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKLQkJCQkgICAgImFuIGludGVyZmFjZSBoYXMgYSBzbmFwc2hvdCBsZW5ndGggJXUgZGlmZmVyZW50IGZyb20gdGhlIHR5cGUgb2YgdGhlIGZpcnN0IGludGVyZmFjZSIsCisKKwkJCS8qCisJCQkgKiBDaGVjayBhZ2FpbnN0IHRoZSAqYWRqdXN0ZWQqIHZhbHVlIG9mIHRoaXMgSURCJ3MKKwkJCSAqIHNuYXBzaG90IGxlbmd0aC4KKwkJCSAqLworCQkJaWYgKChicGZfdV9pbnQzMilwLT5zbmFwc2hvdCAhPQorCQkJICAgIHBjYXBfYWRqdXN0X3NuYXBzaG90KHAtPmxpbmt0eXBlLCBpZGJwLT5zbmFwbGVuKSkgeworCQkJCXNucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQkgICAgImFuIGludGVyZmFjZSBoYXMgYSBzbmFwc2hvdCBsZW5ndGggJXUgZGlmZmVyZW50IGZyb20gdGhlIHNuYXBzaG90IGxlbmd0aCBvZiB0aGUgZmlyc3QgaW50ZXJmYWNlIiwKIAkJCQkgICAgaWRicC0+c25hcGxlbik7CiAJCQkJcmV0dXJuICgtMSk7CiAJCQl9CkBAIC0xMjI3LDcgKzEyNTUsNyBAQAogCQkJLyoKIAkJCSAqIFRyeSB0byBhZGQgdGhpcyBpbnRlcmZhY2UuCiAJCQkgKi8KLQkJCWlmICghYWRkX2ludGVyZmFjZShwLCAmY3Vyc29yLCBwLT5lcnJidWYpKQorCQkJaWYgKCFhZGRfaW50ZXJmYWNlKHAsIGlkYnAsICZjdXJzb3IsIHAtPmVycmJ1ZikpCiAJCQkJcmV0dXJuICgtMSk7CiAJCQlicmVhazsKIApAQCAtMTI3MCw3ICsxMjk4LDcgQEAKIAkJCQkvKgogCQkJCSAqIEJ5dGUgb3JkZXIgY2hhbmdlcy4KIAkJCQkgKi8KLQkJCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkJICAgICJ0aGUgZmlsZSBoYXMgc2VjdGlvbnMgd2l0aCBkaWZmZXJlbnQgYnl0ZSBvcmRlcnMiKTsKIAkJCQlyZXR1cm4gKC0xKTsKIApAQCAtMTI3OCw3ICsxMzA2LDcgQEAKIAkJCQkvKgogCQkJCSAqIE5vdCBhIHZhbGlkIFNIQi4KIAkJCQkgKi8KLQkJCQlwY2FwX3NucHJpbnRmKHAtPmVycmJ1ZiwgUENBUF9FUlJCVUZfU0laRSwKKwkJCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCQkJICAgICJ0aGUgZmlsZSBoYXMgYSBzZWN0aW9uIHdpdGggYSBiYWQgYnl0ZSBvcmRlciBtYWdpYyBmaWVsZCIpOwogCQkJCXJldHVybiAoLTEpOwogCQkJfQpAQCAtMTI4OCw3ICsxMzE2LDcgQEAKIAkJCSAqIHdlIGhhbmRsZS4KIAkJCSAqLwogCQkJaWYgKHNoYnAtPm1ham9yX3ZlcnNpb24gIT0gUENBUF9OR19WRVJTSU9OX01BSk9SKSB7Ci0JCQkJcGNhcF9zbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCisJCQkJc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAogCQkJCSAgICAidW5rbm93biBwY2Fwbmcgc2F2ZWZpbGUgbWFqb3IgdmVyc2lvbiBudW1iZXIgJXUiLAogCQkJCSAgICBzaGJwLT5tYWpvcl92ZXJzaW9uKTsKIAkJCQlyZXR1cm4gKC0xKTsKQEAgLTEzMjIsMTQgKzEzNTAsMTQgQEAKIAkJLyoKIAkJICogWWVzLiAgRmFpbC4KIAkJICovCi0JCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICAiYSBwYWNrZXQgYXJyaXZlZCBvbiBpbnRlcmZhY2UgJXUsIGJ1dCB0aGVyZSdzIG5vIEludGVyZmFjZSBEZXNjcmlwdGlvbiBCbG9jayBmb3IgdGhhdCBpbnRlcmZhY2UiLAogCQkgICAgaW50ZXJmYWNlX2lkKTsKIAkJcmV0dXJuICgtMSk7CiAJfQogCiAJaWYgKGhkci0+Y2FwbGVuID4gKGJwZl91X2ludDMyKXAtPnNuYXBzaG90KSB7Ci0JCXBjYXBfc25wcmludGYocC0+ZXJyYnVmLCBQQ0FQX0VSUkJVRl9TSVpFLAorCQlzbnByaW50ZihwLT5lcnJidWYsIFBDQVBfRVJSQlVGX1NJWkUsCiAJCSAgICAiaW52YWxpZCBwYWNrZXQgY2FwdHVyZSBsZW5ndGggJXUsIGJpZ2dlciB0aGFuICIKIAkJICAgICJzbmFwbGVuIG9mICVkIiwgaGRyLT5jYXBsZW4sIHAtPnNuYXBzaG90KTsKIAkJcmV0dXJuICgtMSk7CmRpZmYgLS1naXQgYS9zZi1wY2FwbmcuaCBiL3NmLXBjYXBuZy5oCmluZGV4IGQ5OWIwZDQuLjgzNTA4MmEgMTAwNjQ0Ci0tLSBhL3NmLXBjYXBuZy5oCisrKyBiL3NmLXBjYXBuZy5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIHNmX3BjYXBuZ19oCiAjZGVmaW5lCXNmX3BjYXBuZ19oCiAKLWV4dGVybiBwY2FwX3QgKnBjYXBfbmdfY2hlY2tfaGVhZGVyKGJwZl91X2ludDMyIG1hZ2ljLCBGSUxFICpmcCwKK2V4dGVybiBwY2FwX3QgKnBjYXBfbmdfY2hlY2tfaGVhZGVyKGNvbnN0IHVpbnQ4X3QgKm1hZ2ljLCBGSUxFICpmcCwKICAgICB1X2ludCBwcmVjaXNpb24sIGNoYXIgKmVycmJ1ZiwgaW50ICplcnIpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvY2t1dGlscy5jIGIvc29ja3V0aWxzLmMKaW5kZXggZWYzZmU3Ni4uYzFlYzlhNSAxMDA2NDQKLS0tIGEvc29ja3V0aWxzLmMKKysrIGIvc29ja3V0aWxzLmMKQEAgLTU2LDExICs1Niw3IEBACiAjaW5jbHVkZSA8ZXJybm8uaD4JLyogZm9yIHRoZSBlcnJubyB2YXJpYWJsZSAqLwogI2luY2x1ZGUgPHN0ZGlvLmg+CS8qIGZvciB0aGUgc3RkZXJyIGZpbGUgKi8KICNpbmNsdWRlIDxzdGRsaWIuaD4JLyogZm9yIG1hbGxvYygpIGFuZCBmcmVlKCkgKi8KLSNpZmRlZiBIQVZFX0xJTUlUU19ICi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotI2RlZmluZSBJTlRfTUFYCQkyMTQ3NDgzNjQ3Ci0jZW5kaWYKKyNpbmNsdWRlIDxsaW1pdHMuaD4JLyogZm9yIElOVF9NQVggKi8KIAogI2luY2x1ZGUgInBjYXAtaW50LmgiCiAKQEAgLTcxLDcgKzY3LDcgQEAKICAgLyoKICAgICogV2luc29jayBpbml0aWFsaXphdGlvbi4KICAgICoKLSAgICogQXNrIGZvciBXaW5Tb2NrIDIuMi4KKyAgICogQXNrIGZvciBXaW5zb2NrIDIuMi4KICAgICovCiAgICNkZWZpbmUgV0lOU09DS19NQUpPUl9WRVJTSU9OIDIKICAgI2RlZmluZSBXSU5TT0NLX01JTk9SX1ZFUlNJT04gMgpAQCAtMTI0LDUwICsxMjAsNDQgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2lmZGVmIEZVWlpJTkdfQlVJTERfTU9ERV9VTlNBRkVfRk9SX1BST0RVQ1RJT04KK2NvbnN0IHVpbnQ4X3QgKmZ1enpCdWZmZXI7CitzaXplX3QgZnV6elNpemU7CitzaXplX3QgZnV6elBvczsKKwordm9pZCBzb2NrX2luaXRmdXp6KGNvbnN0IHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplKSB7CisJZnV6elBvcyA9IDA7CisJZnV6elNpemUgPSBTaXplOworCWZ1enpCdWZmZXIgPSBEYXRhOworfQorCitzdGF0aWMgaW50IGZ1enpfcmVjdihjaGFyICpidWZwLCBpbnQgcmVtYWluaW5nKSB7CisJaWYgKHJlbWFpbmluZyA+IGZ1enpTaXplIC0gZnV6elBvcykgeworCQlyZW1haW5pbmcgPSBmdXp6U2l6ZSAtIGZ1enpQb3M7CisJfQorCWlmIChmdXp6UG9zIDwgZnV6elNpemUpIHsKKwkJbWVtY3B5KGJ1ZnAsIGZ1enpCdWZmZXIgKyBmdXp6UG9zLCByZW1haW5pbmcpOworCX0KKwlmdXp6UG9zICs9IHJlbWFpbmluZzsKKwlyZXR1cm4gcmVtYWluaW5nOworfQorI2VuZGlmCisKIC8qCi0gKiBGb3JtYXQgYW4gZXJyb3IgbWVzc2FnZSBnaXZlbiBhbiBlcnJubyB2YWx1ZSAoVU4qWCkgb3IgYSBXaW5Tb2NrIGVycm9yCisgKiBGb3JtYXQgYW4gZXJyb3IgbWVzc2FnZSBnaXZlbiBhbiBlcnJubyB2YWx1ZSAoVU4qWCkgb3IgYSBXaW5zb2NrIGVycm9yCiAgKiAoV2luZG93cykuCiAgKi8KIHZvaWQgc29ja19mbXRlcnJvcihjb25zdCBjaGFyICpjYWxsZXIsIGludCBlcnJjb2RlLCBjaGFyICplcnJidWYsIGludCBlcnJidWZsZW4pCiB7CisJaWYgKGVycmJ1ZiA9PSBOVUxMKQorCQlyZXR1cm47CisKICNpZmRlZiBfV0lOMzIKLQlpbnQgcmV0dmFsOwotCWNoYXIgbWVzc2FnZVtTT0NLX0VSUkJVRl9TSVpFXTsJLyogV2UncmUgZm9yY2luZyAiQU5TSSIgKi8KLQotCWlmIChlcnJidWYgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JcmV0dmFsID0gRm9ybWF0TWVzc2FnZUEoRk9STUFUX01FU1NBR0VfRlJPTV9TWVNURU0gfCBGT1JNQVRfTUVTU0FHRV9JR05PUkVfSU5TRVJUUyB8Ci0JCUZPUk1BVF9NRVNTQUdFX01BWF9XSURUSF9NQVNLLAotCQlOVUxMLCBlcnJjb2RlLCBNQUtFTEFOR0lEKExBTkdfTkVVVFJBTCwgU1VCTEFOR19ERUZBVUxUKSwKLQkJbWVzc2FnZSwgc2l6ZW9mKG1lc3NhZ2UpIC8gc2l6ZW9mKFRDSEFSKSwgTlVMTCk7Ci0KLQlpZiAocmV0dmFsID09IDApCi0JewotCQlpZiAoKGNhbGxlcikgJiYgKCpjYWxsZXIpKQotCQkJcGNhcF9zbnByaW50ZihlcnJidWYsIGVycmJ1ZmxlbiwgIiVzVW5hYmxlIHRvIGdldCB0aGUgZXhhY3QgZXJyb3IgbWVzc2FnZSIsIGNhbGxlcik7Ci0JCWVsc2UKLQkJCXBjYXBfc25wcmludGYoZXJyYnVmLCBlcnJidWZsZW4sICJVbmFibGUgdG8gZ2V0IHRoZSBleGFjdCBlcnJvciBtZXNzYWdlIik7Ci0JfQotCWVsc2UKLQl7Ci0JCWlmICgoY2FsbGVyKSAmJiAoKmNhbGxlcikpCi0JCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLCAiJXMlcyAoY29kZSAlZCkiLCBjYWxsZXIsIG1lc3NhZ2UsIGVycmNvZGUpOwotCQllbHNlCi0JCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLCAiJXMgKGNvZGUgJWQpIiwgbWVzc2FnZSwgZXJyY29kZSk7Ci0JfQorCXBjYXBfZm10X2Vycm1zZ19mb3Jfd2luMzJfZXJyKGVycmJ1ZiwgZXJyYnVmbGVuLCBlcnJjb2RlLAorCSAgICAiJXMiLCBjYWxsZXIpOwogI2Vsc2UKLQljaGFyICptZXNzYWdlOwotCi0JaWYgKGVycmJ1ZiA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQltZXNzYWdlID0gc3RyZXJyb3IoZXJyY29kZSk7Ci0KLQlpZiAoKGNhbGxlcikgJiYgKCpjYWxsZXIpKQotCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLCAiJXMlcyAoY29kZSAlZCkiLCBjYWxsZXIsIG1lc3NhZ2UsIGVycmNvZGUpOwotCWVsc2UKLQkJcGNhcF9zbnByaW50ZihlcnJidWYsIGVycmJ1ZmxlbiwgIiVzIChjb2RlICVkKSIsIG1lc3NhZ2UsIGVycmNvZGUpOworCXBjYXBfZm10X2Vycm1zZ19mb3JfZXJybm8oZXJyYnVmLCBlcnJidWZsZW4sIGVycmNvZGUsCisJICAgICIlcyIsIGNhbGxlcik7CiAjZW5kaWYKIH0KIApAQCAtMTgwLDcgKzE3MCw3IEBACiAgKgogICogXHBhcmFtIGNhbGxlcjogYSBwb2ludGVyIHRvIGEgdXNlci1hbGxvY2F0ZWQgc3RyaW5nIHdoaWNoIGNvbnRhaW5zIGEgbWVzc2FnZSB0aGF0IGhhcwogICogdG8gYmUgcHJpbnRlZCAqYmVmb3JlKiB0aGUgdHJ1ZSBlcnJvciBtZXNzYWdlLiBJdCBjb3VsZCBiZSwgZm9yIGV4YW1wbGUsICd0aGlzIGVycm9yCi0gKiBjb21lcyBmcm9tIHRoZSByZWN2KCkgY2FsbCBhdCBsaW5lIDMxJy4gSXQgbWF5IGJlIE5VTEwuCisgKiBjb21lcyBmcm9tIHRoZSByZWN2KCkgY2FsbCBhdCBsaW5lIDMxJy4KICAqCiAgKiBccGFyYW0gZXJyYnVmOiBhIHBvaW50ZXIgdG8gYW4gdXNlci1hbGxvY2F0ZWQgYnVmZmVyIHRoYXQgd2lsbCBjb250YWluIHRoZSBjb21wbGV0ZQogICogZXJyb3IgbWVzc2FnZS4gVGhpcyBidWZmZXIgaGFzIHRvIGJlIGF0IGxlYXN0ICdlcnJidWZsZW4nIGluIGxlbmd0aC4KQEAgLTE5NCwzMSArMTg0LDMwIEBACiB2b2lkIHNvY2tfZ2V0ZXJyb3IoY29uc3QgY2hhciAqY2FsbGVyLCBjaGFyICplcnJidWYsIGludCBlcnJidWZsZW4pCiB7CiAjaWZkZWYgX1dJTjMyCi0JaWYgKGVycmJ1ZiA9PSBOVUxMKQotCQlyZXR1cm47CiAJc29ja19mbXRlcnJvcihjYWxsZXIsIEdldExhc3RFcnJvcigpLCBlcnJidWYsIGVycmJ1Zmxlbik7CiAjZWxzZQotCWlmIChlcnJidWYgPT0gTlVMTCkKLQkJcmV0dXJuOwogCXNvY2tfZm10ZXJyb3IoY2FsbGVyLCBlcnJubywgZXJyYnVmLCBlcnJidWZsZW4pOwogI2VuZGlmCiB9CiAKIC8qCi0gKiBcYnJpZWYgSXQgaW5pdGlhbGl6ZXMgc29ja2V0cy4KKyAqIFxicmllZiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBzb2NrZXQgbWVjaGFuaXNtIGlmIGl0IGhhc24ndAorICogYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkIG9yIHJlaW5pdGlhbGl6ZXMgaXQgYWZ0ZXIgaXQgaGFzIGJlZW4KKyAqIGNsZWFuZWQgdXAuCiAgKgotICogVGhpcyBmdW5jdGlvbiBpcyBwcmV0dHkgdXNlbGVzcyBvbiBVTklYLCBzaW5jZSBzb2NrZXQgaW5pdGlhbGl6YXRpb24gaXMgbm90IHJlcXVpcmVkLgotICogSG93ZXZlciBpdCBpcyByZXF1aXJlZCBvbiBXaW4zMi4gSW4gVU5JWCwgdGhpcyBmdW5jdGlvbiBhcHBlYXJzIHRvIGJlIGNvbXBsZXRlbHkgZW1wdHkuCisgKiBPbiBVTipYZXMsIGl0IGRvZXNuJ3QgbmVlZCB0byBkbyBhbnl0aGluZzsgb24gV2luZG93cywgaXQgbmVlZHMgdG8KKyAqIGluaXRpYWxpemUgV2luc29jay4KICAqCi0gKiBccGFyYW0gZXJyYnVmOiBhIHBvaW50ZXIgdG8gYW4gdXNlci1hbGxvY2F0ZWQgYnVmZmVyIHRoYXQgd2lsbCBjb250YWluIHRoZSBjb21wbGV0ZQotICogZXJyb3IgbWVzc2FnZS4gVGhpcyBidWZmZXIgaGFzIHRvIGJlIGF0IGxlYXN0ICdlcnJidWZsZW4nIGluIGxlbmd0aC4KLSAqIEl0IGNhbiBiZSBOVUxMOyBpbiB0aGlzIGNhc2UgdGhlIGVycm9yIGNhbm5vdCBiZSBwcmludGVkLgorICogXHBhcmFtIGVycmJ1ZjogYSBwb2ludGVyIHRvIGFuIHVzZXItYWxsb2NhdGVkIGJ1ZmZlciB0aGF0IHdpbGwgY29udGFpbgorICogdGhlIGNvbXBsZXRlIGVycm9yIG1lc3NhZ2UuIFRoaXMgYnVmZmVyIGhhcyB0byBiZSBhdCBsZWFzdCAnZXJyYnVmbGVuJworICogaW4gbGVuZ3RoLiBJdCBjYW4gYmUgTlVMTDsgaW4gdGhpcyBjYXNlIG5vIGVycm9yIG1lc3NhZ2UgaXMgc3VwcGxpZWQuCiAgKgotICogXHBhcmFtIGVycmJ1ZmxlbjogbGVuZ3RoIG9mIHRoZSBidWZmZXIgdGhhdCB3aWxsIGNvbnRhaW5zIHRoZSBlcnJvci4gVGhlIGVycm9yIG1lc3NhZ2UgY2Fubm90IGJlCi0gKiBsYXJnZXIgdGhhbiAnZXJyYnVmbGVuIC0gMScgYmVjYXVzZSB0aGUgbGFzdCBjaGFyIGlzIHJlc2VydmVkIGZvciB0aGUgc3RyaW5nIHRlcm1pbmF0b3IuCisgKiBccGFyYW0gZXJyYnVmbGVuOiBsZW5ndGggb2YgdGhlIGJ1ZmZlciB0aGF0IHdpbGwgY29udGFpbnMgdGhlIGVycm9yLgorICogVGhlIGVycm9yIG1lc3NhZ2UgY2Fubm90IGJlIGxhcmdlciB0aGFuICdlcnJidWZsZW4gLSAxJyBiZWNhdXNlIHRoZQorICogbGFzdCBjaGFyIGlzIHJlc2VydmVkIGZvciB0aGUgc3RyaW5nIHRlcm1pbmF0b3IuCiAgKgotICogXHJldHVybiAnMCcgaWYgZXZlcnl0aGluZyBpcyBmaW5lLCAnLTEnIGlmIHNvbWUgZXJyb3JzIG9jY3VycmVkLiBUaGUgZXJyb3IgbWVzc2FnZSBpcyByZXR1cm5lZAotICogaW4gdGhlICdlcnJidWYnIHZhcmlhYmxlLgorICogXHJldHVybiAnMCcgaWYgZXZlcnl0aGluZyBpcyBmaW5lLCAnLTEnIGlmIHNvbWUgZXJyb3JzIG9jY3VycmVkLiBUaGUKKyAqIGVycm9yIG1lc3NhZ2UgaXMgcmV0dXJuZWQgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5ICdlcnJidWYnIHZhcmlhYmxlLgogICovCiAjaWZkZWYgX1dJTjMyCiBpbnQgc29ja19pbml0KGNoYXIgKmVycmJ1ZiwgaW50IGVycmJ1ZmxlbikKQEAgLTIzMSw3ICsyMjAsNyBAQAogCQkgICAgV0lOU09DS19NSU5PUl9WRVJTSU9OKSwgJndzYURhdGEpICE9IDApCiAJCXsKIAkJCWlmIChlcnJidWYpCi0JCQkJcGNhcF9zbnByaW50ZihlcnJidWYsIGVycmJ1ZmxlbiwgIkZhaWxlZCB0byBpbml0aWFsaXplIFdpbnNvY2tcbiIpOworCQkJCXNucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLCAiRmFpbGVkIHRvIGluaXRpYWxpemUgV2luc29ja1xuIik7CiAKIAkJCVdTQUNsZWFudXAoKTsKIApAQCAtMjQwLDE4ICsyMjksMjQgQEAKIAl9CiAKIAlzb2NrY291bnQrKzsKKwlyZXR1cm4gMDsKK30KICNlbHNlCiBpbnQgc29ja19pbml0KGNoYXIgKmVycmJ1ZiBfVV8sIGludCBlcnJidWZsZW4gX1VfKQogewotI2VuZGlmCisJLyoKKwkgKiBOb3RoaW5nIHRvIGRvIG9uIFVOKlhlcy4KKwkgKi8KIAlyZXR1cm4gMDsKIH0KKyNlbmRpZgogCiAvKgotICogXGJyaWVmIEl0IGRlYWxsb2NhdGVzIHNvY2tldHMuCisgKiBcYnJpZWYgVGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgdGhlIHNvY2tldCBtZWNoYW5pc20gaWYgd2UgaGF2ZSBubworICogc29ja2V0cyBsZWZ0IG9wZW4uCiAgKgotICogVGhpcyBmdW5jdGlvbiBpcyBwcmV0dHkgdXNlbGVzcyBvbiBVTklYLCBzaW5jZSBzb2NrZXQgZGVhbGxvY2F0aW9uIGlzIG5vdCByZXF1aXJlZC4KLSAqIEhvd2V2ZXIgaXQgaXMgcmVxdWlyZWQgb24gV2luMzIuIEluIFVOSVgsIHRoaXMgZnVuY3Rpb24gYXBwZWFycyB0byBiZSBjb21wbGV0ZWx5IGVtcHR5LgorICogT24gVU4qWGVzLCBpdCBkb2Vzbid0IG5lZWQgdG8gZG8gYW55dGhpbmc7IG9uIFdpbmRvd3MsIGl0IG5lZWRzCisgKiB0byBjbGVhbiB1cCBXaW5zb2NrLgogICoKICAqIFxyZXR1cm4gTm8gZXJyb3IgdmFsdWVzLgogICovCkBAIC0yOTUsNyArMjkwLDcgQEAKICAqCiAgKiBJbiBjYXNlIG9mIGEgc2VydmVyIHNvY2tldCwgdGhlIGZ1bmN0aW9uIGNhbGxzIHNvY2tldCgpLCBiaW5kKCkgYW5kIGxpc3RlbigpLgogICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBwcmVjZWVkZWQgYnkgdGhlIHNvY2tfaW5pdGFkZHJlc3MoKS4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBwcmVjZWRlZCBieSB0aGUgc29ja19pbml0YWRkcmVzcygpLgogICoKICAqIFxwYXJhbSBhZGRyaW5mbzogcG9pbnRlciB0byBhbiBhZGRyaW5mbyB2YXJpYWJsZSB3aGljaCB3aWxsIGJlIHVzZWQgdG8KICAqIG9wZW4gdGhlIHNvY2tldCBhbmQgc3VjaC4gVGhpcyB2YXJpYWJsZSBpcyB0aGUgb25lIHJldHVybmVkIGJ5IHRoZSBwcmV2aW91cyBjYWxsIHRvCkBAIC0zMjcsNyArMzIyLDcgQEAKIAlzb2NrID0gc29ja2V0KGFkZHJpbmZvLT5haV9mYW1pbHksIGFkZHJpbmZvLT5haV9zb2NrdHlwZSwgYWRkcmluZm8tPmFpX3Byb3RvY29sKTsKIAlpZiAoc29jayA9PSBJTlZBTElEX1NPQ0tFVCkKIAl7Ci0JCXNvY2tfZ2V0ZXJyb3IoInNvY2tldCgpOiAiLCBlcnJidWYsIGVycmJ1Zmxlbik7CisJCXNvY2tfZ2V0ZXJyb3IoInNvY2tldCgpIiwgZXJyYnVmLCBlcnJidWZsZW4pOwogCQlyZXR1cm4gSU5WQUxJRF9TT0NLRVQ7CiAJfQogCkBAIC0zNTAsNiArMzQ1LDE2IEBACiAJLyogVGhpcyBpcyBhIHNlcnZlciBzb2NrZXQgKi8KIAlpZiAoc2VydmVyKQogCXsKKwkJLyoKKwkJICogQWxsb3cgYSBuZXcgc2VydmVyIHRvIGJpbmQgdGhlIHNvY2tldCBhZnRlciB0aGUgb2xkIG9uZQorCQkgKiBleGl0ZWQsIGV2ZW4gaWYgbGluZ2VyaW5nIHNvY2tldHMgYXJlIHN0aWxsIHByZXNlbnQuCisJCSAqCisJCSAqIERvbid0IHRyZWF0IGFuIGVycm9yIGFzIGEgZmFpbHVyZS4KKwkJICovCisJCWludCBvcHR2YWwgPSAxOworCQkodm9pZClzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwKKwkJICAgIChjaGFyICopJm9wdHZhbCwgc2l6ZW9mIChvcHR2YWwpKTsKKwogI2lmIGRlZmluZWQoSVBWNl9WNk9OTFkpIHx8IGRlZmluZWQoSVBWNl9CSU5EVjZPTkxZKQogCQkvKgogCQkgKiBGb3JjZSB0aGUgdXNlIG9mIElQdjYtb25seSBhZGRyZXNzZXMuCkBAIC0zODksNyArMzk0LDcgQEAKIAkJCSAgICAoY2hhciAqKSZvbiwgc2l6ZW9mIChpbnQpKSA9PSAtMSkKIAkJCXsKIAkJCQlpZiAoZXJyYnVmKQotCQkJCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLCAic2V0c29ja29wdChJUFY2X1Y2T05MWSkiKTsKKwkJCQkJc25wcmludGYoZXJyYnVmLCBlcnJidWZsZW4sICJzZXRzb2Nrb3B0KElQVjZfVjZPTkxZKSIpOwogCQkJCWNsb3Nlc29ja2V0KHNvY2spOwogCQkJCXJldHVybiBJTlZBTElEX1NPQ0tFVDsKIAkJCX0KQEAgLTM5OSw3ICs0MDQsNyBAQAogCQkvKiBXQVJOSU5HOiBpZiB0aGUgYWRkcmVzcyBpcyBhIG1jYXN0IG9uZSwgSSBzaG91bGQgcGxhY2UgdGhlIHByb3BlciBXaW4zMiBjb2RlIGhlcmUgKi8KIAkJaWYgKGJpbmQoc29jaywgYWRkcmluZm8tPmFpX2FkZHIsIChpbnQpIGFkZHJpbmZvLT5haV9hZGRybGVuKSAhPSAwKQogCQl7Ci0JCQlzb2NrX2dldGVycm9yKCJiaW5kKCk6ICIsIGVycmJ1ZiwgZXJyYnVmbGVuKTsKKwkJCXNvY2tfZ2V0ZXJyb3IoImJpbmQoKSIsIGVycmJ1ZiwgZXJyYnVmbGVuKTsKIAkJCWNsb3Nlc29ja2V0KHNvY2spOwogCQkJcmV0dXJuIElOVkFMSURfU09DS0VUOwogCQl9CkBAIC00MDcsNyArNDEyLDcgQEAKIAkJaWYgKGFkZHJpbmZvLT5haV9zb2NrdHlwZSA9PSBTT0NLX1NUUkVBTSkKIAkJCWlmIChsaXN0ZW4oc29jaywgbmNvbm4pID09IC0xKQogCQkJewotCQkJCXNvY2tfZ2V0ZXJyb3IoImxpc3RlbigpOiAiLCBlcnJidWYsIGVycmJ1Zmxlbik7CisJCQkJc29ja19nZXRlcnJvcigibGlzdGVuKCkiLCBlcnJidWYsIGVycmJ1Zmxlbik7CiAJCQkJY2xvc2Vzb2NrZXQoc29jayk7CiAJCQkJcmV0dXJuIElOVkFMSURfU09DS0VUOwogCQkJfQpAQCAtNDMzLDcgKzQzOCw5IEBACiAJCSAqLwogCQl3aGlsZSAodGVtcGFkZHJpbmZvKQogCQl7Ci0KKyNpZmRlZiBGVVpaSU5HX0JVSUxEX01PREVfVU5TQUZFX0ZPUl9QUk9EVUNUSU9OCisJCQlicmVhazsKKyNlbmRpZgogCQkJaWYgKGNvbm5lY3Qoc29jaywgdGVtcGFkZHJpbmZvLT5haV9hZGRyLCAoaW50KSB0ZW1wYWRkcmluZm8tPmFpX2FkZHJsZW4pID09IC0xKQogCQkJewogCQkJCXNpemVfdCBtc2dsZW47CkBAIC00NDQsMTMgKzQ1MSwxNCBAQAogCQkJCSAqIFdlIGhhdmUgdG8gcmV0cmlldmUgdGhlIGVycm9yIG1lc3NhZ2UgYmVmb3JlIGFueSBvdGhlciBzb2NrZXQgY2FsbCBjb21wbGV0ZXMsIG90aGVyd2lzZQogCQkJCSAqIHRoZSBlcnJvciBtZXNzYWdlIGlzIGxvc3QKIAkJCQkgKi8KLQkJCQlzb2NrX2dldGVycm9yKE5VTEwsIFNvY2tldEVycm9yTWVzc2FnZSwgc2l6ZW9mKFNvY2tldEVycm9yTWVzc2FnZSkpOworCQkJCXNvY2tfZ2V0ZXJyb3IoIkNvbm5lY3QgdG8gc29ja2V0IGZhaWxlZCIsCisJCQkJICAgIFNvY2tldEVycm9yTWVzc2FnZSwgc2l6ZW9mKFNvY2tldEVycm9yTWVzc2FnZSkpOwogCiAJCQkJLyogUmV0dXJucyB0aGUgbnVtZXJpYyBhZGRyZXNzIG9mIHRoZSBob3N0IHRoYXQgdHJpZ2dlcmVkIHRoZSBlcnJvciAqLwogCQkJCXNvY2tfZ2V0YXNjaWlfYWRkcnBvcnQoKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICopIHRlbXBhZGRyaW5mby0+YWlfYWRkciwgVG1wQnVmZmVyLCBzaXplb2YoVG1wQnVmZmVyKSwgTlVMTCwgMCwgTklfTlVNRVJJQ0hPU1QsIFRtcEJ1ZmZlciwgc2l6ZW9mKFRtcEJ1ZmZlcikpOwogCi0JCQkJcGNhcF9zbnByaW50ZihlcnJidWZwdHIsIGJ1ZnNwYWNlbGVmdCwKLQkJCQkgICAgIklzIHRoZSBzZXJ2ZXIgcHJvcGVybHkgaW5zdGFsbGVkIG9uICVzPyAgY29ubmVjdCgpIGZhaWxlZDogJXMiLCBUbXBCdWZmZXIsIFNvY2tldEVycm9yTWVzc2FnZSk7CisJCQkJc25wcmludGYoZXJyYnVmcHRyLCBidWZzcGFjZWxlZnQsCisJCQkJICAgICJJcyB0aGUgc2VydmVyIHByb3Blcmx5IGluc3RhbGxlZCBvbiAlcz8gICVzIiwgVG1wQnVmZmVyLCBTb2NrZXRFcnJvck1lc3NhZ2UpOwogCiAJCQkJLyogSW4gY2FzZSBtb3JlIHRoZW4gb25lICdjb25uZWN0JyBmYWlscywgd2UgbWFuYWdlIHRvIGtlZXAgYWxsIHRoZSBlcnJvciBtZXNzYWdlcyAqLwogCQkJCW1zZ2xlbiA9IHN0cmxlbihlcnJidWZwdHIpOwpAQCAtNTA4LDcgKzUxNiw3IEBACiAJICovCiAJaWYgKHNodXRkb3duKHNvY2ssIFNIVVRfV1IpKQogCXsKLQkJc29ja19nZXRlcnJvcigic2h1dGRvd24oKTogIiwgZXJyYnVmLCBlcnJidWZsZW4pOworCQlzb2NrX2dldGVycm9yKCJzaHV0ZG93bigpIiwgZXJyYnVmLCBlcnJidWZsZW4pOwogCQkvKiBjbG9zZSB0aGUgc29ja2V0IGFueXdheSAqLwogCQljbG9zZXNvY2tldChzb2NrKTsKIAkJcmV0dXJuIC0xOwpAQCAtNTE5LDYgKzUyNywxNTcgQEAKIH0KIAogLyoKKyAqIGdhaV9lcnJzdHJpbmcoKSBoYXMgc29tZSBwcm9ibGVtczoKKyAqCisgKiAxKSBvbiBXaW5kb3dzLCBNaWNyb3NvZnQgZXhwbGljaXRseSBzYXlzIGl0J3Mgbm90IHRocmVhZC1zYWZlOworICogMikgb24gVU4qWCwgdGhlIFNpbmdsZSBVTklYIFNwZWNpZmljYXRpb24gZG9lc24ndCBzYXkgaXQgKmlzKgorICogICAgdGhyZWFkLXNhZmUsIHNvIGFuIGltcGxlbWVudGF0aW9uIG1pZ2h0IHVzZSBhIHN0YXRpYyBidWZmZXIKKyAqICAgIGZvciB1bmtub3duIGVycm9yIGNvZGVzOworICogMykgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBtb3N0IGxpa2VseSBlcnJvciwgRUFJX05PTkFNRSwgaXMKKyAqICAgIHRydWx5IGhvcnJpYmxlIG9uIHNldmVyYWwgcGxhdGZvcm1zICgibm9kZW5hbWUgbm9yIHNlcnZuYW1lCisgKiAgICBwcm92aWRlZCwgb3Igbm90IGtub3duIj8gIEl0J3MgdHlwaWNhbGx5IGdvaW5nIHRvIGJlICJub3QKKyAqICAgIGtub3duIiwgbm90ICJvb3BzaWUsIEkgcGFzc2VkIG51bGwgcG9pbnRlcnMgZm9yIHRoZSBob3N0IG5hbWUKKyAqICAgIGFuZCBzZXJ2aWNlIG5hbWUiLCBub3QgdG8gbWVudGlvbiB0aGV5IGZvcmdvdCB0aGUgIm5laXRoZXIiKTsKKyAqCisgKiBzbyB3ZSByb2xsIG91ciBvd24uCisgKi8KK3N0YXRpYyB2b2lkCitnZXRfZ2FpX2VycnN0cmluZyhjaGFyICplcnJidWYsIGludCBlcnJidWZsZW4sIGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IGVyciwKKyAgICBjb25zdCBjaGFyICpob3N0bmFtZSwgY29uc3QgY2hhciAqcG9ydG5hbWUpCit7CisJY2hhciBob3N0cG9ydFtQQ0FQX0VSUkJVRl9TSVpFXTsKKworCWlmIChob3N0bmFtZSAhPSBOVUxMICYmIHBvcnRuYW1lICE9IE5VTEwpCisJCXNucHJpbnRmKGhvc3Rwb3J0LCBQQ0FQX0VSUkJVRl9TSVpFLCAiJXM6JXMiLAorCQkgICAgaG9zdG5hbWUsIHBvcnRuYW1lKTsKKwllbHNlIGlmIChob3N0bmFtZSAhPSBOVUxMKQorCQlzbnByaW50Zihob3N0cG9ydCwgUENBUF9FUlJCVUZfU0laRSwgIiVzIiwKKwkJICAgIGhvc3RuYW1lKTsKKwllbHNlIGlmIChwb3J0bmFtZSAhPSBOVUxMKQorCQlzbnByaW50Zihob3N0cG9ydCwgUENBUF9FUlJCVUZfU0laRSwgIjolcyIsCisJCSAgICBwb3J0bmFtZSk7CisJZWxzZQorCQlzbnByaW50Zihob3N0cG9ydCwgUENBUF9FUlJCVUZfU0laRSwgIjxubyBob3N0IG9yIHBvcnQhPiIpOworCXN3aXRjaCAoZXJyKQorCXsKKyNpZmRlZiBFQUlfQUREUkZBTUlMWQorCQljYXNlIEVBSV9BRERSRkFNSUxZOgorCQkJc25wcmludGYoZXJyYnVmLCBlcnJidWZsZW4sCisJCQkgICAgIiVzQWRkcmVzcyBmYW1pbHkgZm9yICVzIG5vdCBzdXBwb3J0ZWQiLAorCQkJICAgIHByZWZpeCwgaG9zdHBvcnQpOworCQkJYnJlYWs7CisjZW5kaWYKKworCQljYXNlIEVBSV9BR0FJTjoKKwkJCXNucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLAorCQkJICAgICIlcyVzIGNvdWxkIG5vdCBiZSByZXNvbHZlZCBhdCB0aGlzIHRpbWUiLAorCQkJICAgIHByZWZpeCwgaG9zdHBvcnQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBFQUlfQkFERkxBR1M6CisJCQlzbnByaW50ZihlcnJidWYsIGVycmJ1ZmxlbiwKKwkJCSAgICAiJXNUaGUgYWlfZmxhZ3MgcGFyYW1ldGVyIGZvciBsb29raW5nIHVwICVzIGhhZCBhbiBpbnZhbGlkIHZhbHVlIiwKKwkJCSAgICBwcmVmaXgsIGhvc3Rwb3J0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgRUFJX0ZBSUw6CisJCQlzbnByaW50ZihlcnJidWYsIGVycmJ1ZmxlbiwKKwkJCSAgICAiJXNBIG5vbi1yZWNvdmVyYWJsZSBlcnJvciBvY2N1cnJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gcmVzb2x2ZSAlcyIsCisJCQkgICAgcHJlZml4LCBob3N0cG9ydCk7CisJCQlicmVhazsKKworCQljYXNlIEVBSV9GQU1JTFk6CisJCQlzbnByaW50ZihlcnJidWYsIGVycmJ1ZmxlbiwKKwkJCSAgICAiJXNUaGUgYWRkcmVzcyBmYW1pbHkgZm9yIGxvb2tpbmcgdXAgJXMgd2FzIG5vdCByZWNvZ25pemVkIiwKKwkJCSAgICBwcmVmaXgsIGhvc3Rwb3J0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgRUFJX01FTU9SWToKKwkJCXNucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLAorCQkJICAgICIlc091dCBvZiBtZW1vcnkgdHJ5aW5nIHRvIGFsbG9jYXRlIHN0b3JhZ2Ugd2hlbiBsb29raW5nIHVwICVzIiwKKwkJCSAgICBwcmVmaXgsIGhvc3Rwb3J0KTsKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIFJGQyAyNTUzIGhhZCBib3RoIEVBSV9OT0RBVEEgYW5kIEVBSV9OT05BTUUuCisJCSAqCisJCSAqIFJGQyAzNDkzIGhhcyBvbmx5IEVBSV9OT05BTUUuCisJCSAqCisJCSAqIFNvbWUgaW1wbGVtZW50YXRpb25zIGRlZmluZSBFQUlfTk9EQVRBIGFuZCBFQUlfTk9OQU1FCisJCSAqIHRvIHRoZSBzYW1lIHZhbHVlLCBvdGhlcnMgZG9uJ3QuICBJZiBFQUlfTk9EQVRBIGlzCisJCSAqIGRlZmluZWQgYW5kIGlzbid0IHRoZSBzYW1lIGFzIEVBSV9OT05BTUUsIHdlIGhhbmRsZQorCQkgKiBFQUlfTk9EQVRBLgorCQkgKi8KKyNpZiBkZWZpbmVkKEVBSV9OT0RBVEEpICYmIEVBSV9OT0RBVEEgIT0gRUFJX05PTkFNRQorCQljYXNlIEVBSV9OT0RBVEE6CisJCQlzbnByaW50ZihlcnJidWYsIGVycmJ1ZmxlbiwKKwkJCSAgICAiJXNObyBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCAlcyIsCisJCQkgICAgcHJlZml4LCBob3N0cG9ydCk7CisJCQlicmVhazsKKyNlbmRpZgorCisJCWNhc2UgRUFJX05PTkFNRToKKwkJCXNucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLAorCQkJICAgICIlc1RoZSBob3N0IG5hbWUgJXMgY291bGRuJ3QgYmUgcmVzb2x2ZWQiLAorCQkJICAgIHByZWZpeCwgaG9zdHBvcnQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBFQUlfU0VSVklDRToKKwkJCXNucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLAorCQkJICAgICIlc1RoZSBzZXJ2aWNlIHZhbHVlIHNwZWNpZmllZCB3aGVuIGxvb2tpbmcgdXAgJXMgYXMgbm90IHJlY29nbml6ZWQgZm9yIHRoZSBzb2NrZXQgdHlwZSIsCisJCQkgICAgcHJlZml4LCBob3N0cG9ydCk7CisJCQlicmVhazsKKworCQljYXNlIEVBSV9TT0NLVFlQRToKKwkJCXNucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLAorCQkJICAgICIlc1RoZSBzb2NrZXQgdHlwZSBzcGVjaWZpZWQgd2hlbiBsb29raW5nIHVwICVzIGFzIG5vdCByZWNvZ25pemVkIiwKKwkJCSAgICBwcmVmaXgsIGhvc3Rwb3J0KTsKKwkJCWJyZWFrOworCisjaWZkZWYgRUFJX1NZU1RFTQorCQljYXNlIEVBSV9TWVNURU06CisJCQkvKgorCQkJICogQXNzdW1lZCB0byBiZSBVTipYLgorCQkJICovCisJCQlwY2FwX2ZtdF9lcnJtc2dfZm9yX2Vycm5vKGVycmJ1ZiwgZXJyYnVmbGVuLCBlcnJubywKKwkJCSAgICAiJXNBbiBlcnJvciBvY2N1cnJlZCB3aGVuIGxvb2tpbmcgdXAgJXMiLAorCQkJICAgIHByZWZpeCwgaG9zdHBvcnQpOworCQkJYnJlYWs7CisjZW5kaWYKKworI2lmZGVmIEVBSV9CQURISU5UUworCQljYXNlIEVBSV9CQURISU5UUzoKKwkJCXNucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLAorCQkJICAgICIlc0ludmFsaWQgdmFsdWUgZm9yIGhpbnRzIHdoZW4gbG9va2luZyB1cCAlcyIsCisJCQkgICAgcHJlZml4LCBob3N0cG9ydCk7CisJCQlicmVhazsKKyNlbmRpZgorCisjaWZkZWYgRUFJX1BST1RPQ09MCisJCWNhc2UgRUFJX1BST1RPQ09MOgorCQkJc25wcmludGYoZXJyYnVmLCBlcnJidWZsZW4sCisJCQkgICAgIiVzUmVzb2x2ZWQgcHJvdG9jb2wgd2hlbiBsb29raW5nIHVwICVzIGlzIHVua25vd24iLAorCQkJICAgIHByZWZpeCwgaG9zdHBvcnQpOworCQkJYnJlYWs7CisjZW5kaWYKKworI2lmZGVmIEVBSV9PVkVSRkxPVworCQljYXNlIEVBSV9PVkVSRkxPVzoKKwkJCXNucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLAorCQkJICAgICIlc0FyZ3VtZW50IGJ1ZmZlciBvdmVyZmxvdyB3aGVuIGxvb2tpbmcgdXAgJXMiLAorCQkJICAgIHByZWZpeCwgaG9zdHBvcnQpOworCQkJYnJlYWs7CisjZW5kaWYKKworCQlkZWZhdWx0OgorCQkJc25wcmludGYoZXJyYnVmLCBlcnJidWZsZW4sCisJCQkgICAgIiVzZ2V0YWRkcmluZm8oKSBlcnJvciAlZCB3aGVuIGxvb2tpbmcgdXAgJXMiLAorCQkJICAgIHByZWZpeCwgZXJyLCBob3N0cG9ydCk7CisJCQlicmVhazsKKwl9Cit9CisKKy8qCiAgKiBcYnJpZWYgQ2hlY2tzIHRoYXQgdGhlIGFkZHJlc3MsIHBvcnQgYW5kIGZsYWdzIGdpdmVuIGFyZSB2YWxpZHMgYW5kIGl0IHJldHVybnMgYW4gJ2FkZHJpbmZvJyBzdHJ1Y3R1cmUuCiAgKgogICogVGhpcyBmdW5jdGlvbiBiYXNpY2FsbHkgY2FsbHMgdGhlIGdldGFkZHJpbmZvKCkgY2FsbHMsIGFuZCBpdCBwZXJmb3JtcyBhIHNldCBvZiBzYW5pdHkgY2hlY2tzCkBAIC01NjQsMTcgKzcyMywxMCBAQAogCXJldHZhbCA9IGdldGFkZHJpbmZvKGhvc3QsIHBvcnQsIGhpbnRzLCBhZGRyaW5mbyk7CiAJaWYgKHJldHZhbCAhPSAwKQogCXsKLQkJLyoKLQkJICogaWYgdGhlIGdldGFkZHJpbmZvKCkgZmFpbHMsIHlvdSBoYXZlIHRvIHVzZSBnYWlfc3RyZXJyb3IoKSwgaW5zdGVhZCBvZiB1c2luZyB0aGUgc3RhbmRhcmQKLQkJICogZXJyb3Igcm91dGluZXMgKGVycm5vKSBpbiBVTklYOyBXaW5zb2NrIHN1Z2dlc3RzIHVzaW5nIHRoZSBHZXRMYXN0RXJyb3IoKSBpbnN0ZWFkLgotCQkgKi8KIAkJaWYgKGVycmJ1ZikKIAkJewotI2lmZGVmIF9XSU4zMgotCQkJc29ja19nZXRlcnJvcigiZ2V0YWRkcmluZm8oKTogIiwgZXJyYnVmLCBlcnJidWZsZW4pOwotI2Vsc2UKLQkJCXBjYXBfc25wcmludGYoZXJyYnVmLCBlcnJidWZsZW4sICJnZXRhZGRyaW5mbygpICVzIiwgZ2FpX3N0cmVycm9yKHJldHZhbCkpOwotI2VuZGlmCisJCQlnZXRfZ2FpX2VycnN0cmluZyhlcnJidWYsIGVycmJ1ZmxlbiwgIiIsIHJldHZhbCwKKwkJCSAgICBob3N0LCBwb3J0KTsKIAkJfQogCQlyZXR1cm4gLTE7CiAJfQpAQCAtNTk1LDcgKzc0Nyw3IEBACiAJICAgICgoKmFkZHJpbmZvKS0+YWlfZmFtaWx5ICE9IFBGX0lORVQ2KSkKIAl7CiAJCWlmIChlcnJidWYpCi0JCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLCAiZ2V0YWRkcmluZm8oKTogc29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZCIpOworCQkJc25wcmludGYoZXJyYnVmLCBlcnJidWZsZW4sICJnZXRhZGRyaW5mbygpOiBzb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkIik7CiAJCWZyZWVhZGRyaW5mbygqYWRkcmluZm8pOwogCQkqYWRkcmluZm8gPSBOVUxMOwogCQlyZXR1cm4gLTE7CkBAIC02MDgsNyArNzYwLDcgQEAKIAkgICAgKHNvY2tfaXNtY2FzdGFkZHIoKCphZGRyaW5mbyktPmFpX2FkZHIpID09IDApKQogCXsKIAkJaWYgKGVycmJ1ZikKLQkJCXBjYXBfc25wcmludGYoZXJyYnVmLCBlcnJidWZsZW4sICJnZXRhZGRyaW5mbygpOiBtdWx0aWNhc3QgYWRkcmVzc2VzIGFyZSBub3QgdmFsaWQgd2hlbiB1c2luZyBUQ1Agc3RyZWFtcyIpOworCQkJc25wcmludGYoZXJyYnVmLCBlcnJidWZsZW4sICJnZXRhZGRyaW5mbygpOiBtdWx0aWNhc3QgYWRkcmVzc2VzIGFyZSBub3QgdmFsaWQgd2hlbiB1c2luZyBUQ1Agc3RyZWFtcyIpOwogCQlmcmVlYWRkcmluZm8oKmFkZHJpbmZvKTsKIAkJKmFkZHJpbmZvID0gTlVMTDsKIAkJcmV0dXJuIC0xOwpAQCAtNjQ0LDcgKzc5Niw3IEBACiAgKiAnLTInIGlmIHdlIGdvdCBvbmUgb2YgdGhvc2UgZXJyb3JzLgogICogRm9yIGVycm9ycywgYW4gZXJyb3IgbWVzc2FnZSBpcyByZXR1cm5lZCBpbiB0aGUgJ2VycmJ1ZicgdmFyaWFibGUuCiAgKi8KLWludCBzb2NrX3NlbmQoU09DS0VUIHNvY2ssIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCitpbnQgc29ja19zZW5kKFNPQ0tFVCBzb2NrLCBTU0wgKnNzbCBfVV9OT1NTTF8sIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCiAgICAgY2hhciAqZXJyYnVmLCBpbnQgZXJyYnVmbGVuKQogewogCWludCByZW1haW5pbmc7CkBAIC02NTQsOCArODA2LDggQEAKIAl7CiAJCWlmIChlcnJidWYpCiAJCXsKLQkJCXBjYXBfc25wcmludGYoZXJyYnVmLCBlcnJidWZsZW4sCi0JCQkgICAgIkNhbid0IHNlbmQgbW9yZSB0aGFuICV1IGJ5dGVzIHdpdGggc29ja19yZWN2IiwKKwkJCXNucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLAorCQkJICAgICJDYW4ndCBzZW5kIG1vcmUgdGhhbiAldSBieXRlcyB3aXRoIHNvY2tfc2VuZCIsCiAJCQkgICAgSU5UX01BWCk7CiAJCX0KIAkJcmV0dXJuIC0xOwpAQCAtNjYzLDYgKzgxNSwxMyBAQAogCXJlbWFpbmluZyA9IChpbnQpc2l6ZTsKIAogCWRvIHsKKyNpZmRlZiBIQVZFX09QRU5TU0wKKwkJaWYgKHNzbCkgcmV0dXJuIHNzbF9zZW5kKHNzbCwgYnVmZmVyLCByZW1haW5pbmcsIGVycmJ1ZiwgZXJyYnVmbGVuKTsKKyNlbmRpZgorCisjaWZkZWYgRlVaWklOR19CVUlMRF9NT0RFX1VOU0FGRV9GT1JfUFJPRFVDVElPTgorCQluc2VudCA9IHJlbWFpbmluZzsKKyNlbHNlCiAjaWZkZWYgTVNHX05PU0lHTkFMCiAJCS8qCiAJCSAqIFNlbmQgd2l0aCBNU0dfTk9TSUdOQUwsIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IFNJR1BJUEUKQEAgLTY3NCw2ICs4MzMsNyBAQAogI2Vsc2UKIAkJbnNlbnQgPSBzZW5kKHNvY2ssIGJ1ZmZlciwgcmVtYWluaW5nLCAwKTsKICNlbmRpZgorI2VuZGlmIC8vRlVaWklOR19CVUlMRF9NT0RFX1VOU0FGRV9GT1JfUFJPRFVDVElPTgogCiAJCWlmIChuc2VudCA9PSAtMSkKIAkJewpAQCAtNjk3LDcgKzg1Nyw3IEBACiAJCQkJICovCiAJCQkJcmV0dXJuIC0yOwogCQkJfQotCQkJc29ja19mbXRlcnJvcigic2VuZCgpOiAiLCBlcnJjb2RlLCBlcnJidWYsIGVycmJ1Zmxlbik7CisJCQlzb2NrX2ZtdGVycm9yKCJzZW5kKCkiLCBlcnJjb2RlLCBlcnJidWYsIGVycmJ1Zmxlbik7CiAjZWxzZQogCQkJZXJyY29kZSA9IGVycm5vOwogCQkJaWYgKGVycmNvZGUgPT0gRUNPTk5SRVNFVCB8fCBlcnJjb2RlID09IEVQSVBFKQpAQCAtNzA5LDcgKzg2OSw3IEBACiAJCQkJICovCiAJCQkJcmV0dXJuIC0yOwogCQkJfQotCQkJc29ja19mbXRlcnJvcigic2VuZCgpOiAiLCBlcnJjb2RlLCBlcnJidWYsIGVycmJ1Zmxlbik7CisJCQlzb2NrX2ZtdGVycm9yKCJzZW5kKCkiLCBlcnJjb2RlLCBlcnJidWYsIGVycmJ1Zmxlbik7CiAjZW5kaWYKIAkJCXJldHVybiAtMTsKIAkJfQpAQCAtNzgxLDcgKzk0MSw3IEBACiAJaWYgKCgqb2Zmc2V0ICsgc2l6ZSkgPiB0b3RzaXplKQogCXsKIAkJaWYgKGVycmJ1ZikKLQkJCXBjYXBfc25wcmludGYoZXJyYnVmLCBlcnJidWZsZW4sICJOb3QgZW5vdWdoIHNwYWNlIGluIHRoZSB0ZW1wb3Jhcnkgc2VuZCBidWZmZXIuIik7CisJCQlzbnByaW50ZihlcnJidWYsIGVycmJ1ZmxlbiwgIk5vdCBlbm91Z2ggc3BhY2UgaW4gdGhlIHRlbXBvcmFyeSBzZW5kIGJ1ZmZlci4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtODM5LDI5ICs5OTksMzIgQEAKICAqIFRoZSBlcnJvciBtZXNzYWdlIGlzIHJldHVybmVkIGluIHRoZSAnZXJyYnVmJyB2YXJpYWJsZS4KICAqLwogCi1pbnQgc29ja19yZWN2KFNPQ0tFVCBzb2NrLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsCi0gICAgY2hhciAqZXJyYnVmLCBpbnQgZXJyYnVmbGVuKQoraW50IHNvY2tfcmVjdihTT0NLRVQgc29jaywgU1NMICpzc2wgX1VfTk9TU0xfLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAorICAgIGludCBmbGFncywgY2hhciAqZXJyYnVmLCBpbnQgZXJyYnVmbGVuKQogeworCWludCByZWN2X2ZsYWdzID0gMDsKIAljaGFyICpidWZwID0gYnVmZmVyOwogCWludCByZW1haW5pbmc7CiAJc3NpemVfdCBucmVhZDsKIAogCWlmIChzaXplID09IDApCiAJewotCQlTT0NLX0RFQlVHX01FU1NBR0UoIkkgaGF2ZSBiZWVuIHJlcXVlc3RlZCB0byByZWFkIHplcm8gYnl0ZXMiKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChzaXplID4gSU5UX01BWCkKIAl7CiAJCWlmIChlcnJidWYpCiAJCXsKLQkJCXBjYXBfc25wcmludGYoZXJyYnVmLCBlcnJidWZsZW4sCisJCQlzbnByaW50ZihlcnJidWYsIGVycmJ1ZmxlbiwKIAkJCSAgICAiQ2FuJ3QgcmVhZCBtb3JlIHRoYW4gJXUgYnl0ZXMgd2l0aCBzb2NrX3JlY3YiLAogCQkJICAgIElOVF9NQVgpOwogCQl9CiAJCXJldHVybiAtMTsKIAl9CiAKKwlpZiAoZmxhZ3MgJiBTT0NLX01TR19QRUVLKQorCQlyZWN2X2ZsYWdzIHw9IE1TR19QRUVLOworCiAJYnVmcCA9IChjaGFyICopIGJ1ZmZlcjsKIAlyZW1haW5pbmcgPSAoaW50KSBzaXplOwogCkBAIC04NzAsNyArMTAzMywyMiBAQAogCSAqIFdpbjMyLgogCSAqLwogCWZvciAoOzspIHsKLQkJbnJlYWQgPSByZWN2KHNvY2ssIGJ1ZnAsIHJlbWFpbmluZywgMCk7CisjaWZkZWYgRlVaWklOR19CVUlMRF9NT0RFX1VOU0FGRV9GT1JfUFJPRFVDVElPTgorCQlucmVhZCA9IGZ1enpfcmVjdihidWZwLCByZW1haW5pbmcpOworI2VsaWYgZGVmaW5lZChIQVZFX09QRU5TU0wpCisJCWlmIChzc2wpCisJCXsKKwkJCS8qCisJCQkgKiBYWFggLSB3aGF0IGFib3V0IE1TR19QRUVLPworCQkJICovCisJCQlucmVhZCA9IHNzbF9yZWN2KHNzbCwgYnVmcCwgcmVtYWluaW5nLCBlcnJidWYsIGVycmJ1Zmxlbik7CisJCQlpZiAobnJlYWQgPT0gLTIpIHJldHVybiAtMTsKKwkJfQorCQllbHNlCisJCQlucmVhZCA9IHJlY3Yoc29jaywgYnVmcCwgcmVtYWluaW5nLCByZWN2X2ZsYWdzKTsKKyNlbHNlCisJCW5yZWFkID0gcmVjdihzb2NrLCBidWZwLCByZW1haW5pbmcsIHJlY3ZfZmxhZ3MpOworI2VuZGlmCiAKIAkJaWYgKG5yZWFkID09IC0xKQogCQl7CkBAIC04NzgsNyArMTA1Niw3IEBACiAJCQlpZiAoZXJybm8gPT0gRUlOVFIpCiAJCQkJcmV0dXJuIC0zOwogI2VuZGlmCi0JCQlzb2NrX2dldGVycm9yKCJyZWN2KCk6ICIsIGVycmJ1ZiwgZXJyYnVmbGVuKTsKKwkJCXNvY2tfZ2V0ZXJyb3IoInJlY3YoKSIsIGVycmJ1ZiwgZXJyYnVmbGVuKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCkBAIC04OTQsNyArMTA3Miw3IEBACiAJCQkJICovCiAJCQkJaWYgKGVycmJ1ZikKIAkJCQl7Ci0JCQkJCXBjYXBfc25wcmludGYoZXJyYnVmLCBlcnJidWZsZW4sCisJCQkJCXNucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLAogCQkJCQkgICAgIlRoZSBvdGhlciBob3N0IHRlcm1pbmF0ZWQgdGhlIGNvbm5lY3Rpb24uIik7CiAJCQkJfQogCQkJCXJldHVybiAtMTsKQEAgLTkyOCw3ICsxMTA2LDcgQEAKICAqCiAgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBkYXRhZ3JhbSBvbiBzdWNjZXNzIG9yIC0xIG9uIGVycm9yLgogICovCi1pbnQgc29ja19yZWN2X2RncmFtKFNPQ0tFVCBzb2NrLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAoraW50IHNvY2tfcmVjdl9kZ3JhbShTT0NLRVQgc29jaywgU1NMICpzc2wgX1VfTk9TU0xfLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAogICAgIGNoYXIgKmVycmJ1ZiwgaW50IGVycmJ1ZmxlbikKIHsKIAlzc2l6ZV90IG5yZWFkOwpAQCAtOTM5LDI3ICsxMTE3LDM1IEBACiAKIAlpZiAoc2l6ZSA9PSAwKQogCXsKLQkJU09DS19ERUJVR19NRVNTQUdFKCJJIGhhdmUgYmVlbiByZXF1ZXN0ZWQgdG8gcmVhZCB6ZXJvIGJ5dGVzIik7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoc2l6ZSA+IElOVF9NQVgpCiAJewogCQlpZiAoZXJyYnVmKQogCQl7Ci0JCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLAorCQkJc25wcmludGYoZXJyYnVmLCBlcnJidWZsZW4sCiAJCQkgICAgIkNhbid0IHJlYWQgbW9yZSB0aGFuICV1IGJ5dGVzIHdpdGggc29ja19yZWN2X2RncmFtIiwKIAkJCSAgICBJTlRfTUFYKTsKIAkJfQogCQlyZXR1cm4gLTE7CiAJfQogCisjaWZkZWYgSEFWRV9PUEVOU1NMCisJLy8gVE9ETzogRFRMUworCWlmIChzc2wpCisJeworCQlzbnByaW50ZihlcnJidWYsIGVycmJ1ZmxlbiwgIkRUTFMgbm90IGltcGxlbWVudGVkIHlldCIpOworCQlyZXR1cm4gLTE7CisJfQorI2VuZGlmCisKIAkvKgogCSAqIFRoaXMgc2hvdWxkIGJlIGEgZGF0YWdyYW0gc29ja2V0LCBzbyB3ZSBzaG91bGQgZ2V0IHRoZQogCSAqIGVudGlyZSBkYXRhZ3JhbSBpbiBvbmUgcmVjdigpIG9yIHJlY3Ztc2coKSBjYWxsLCBhbmQKIAkgKiBkb24ndCBuZWVkIHRvIGxvb3AuCiAJICovCiAjaWZkZWYgX1dJTjMyCi0JbnJlYWQgPSByZWN2KHNvY2ssIGJ1ZmZlciwgc2l6ZSwgMCk7CisJbnJlYWQgPSByZWN2KHNvY2ssIGJ1ZmZlciwgKGludClzaXplLCAwKTsKIAlpZiAobnJlYWQgPT0gU09DS0VUX0VSUk9SKQogCXsKIAkJLyoKQEAgLTk3NSw3ICsxMTYxLDcgQEAKIAkJICogc3VwcGxpZWQgdG8gdXMsIHRoZSBleGNlc3MgZGF0YSBpcyBkaXNjYXJkZWQsCiAJCSAqIGFuZCB3ZSdsbCByZXBvcnQgYW4gZXJyb3IuCiAJCSAqLwotCQlzb2NrX2dldGVycm9yKCJyZWN2KCk6ICIsIGVycmJ1ZiwgZXJyYnVmbGVuKTsKKwkJc29ja19nZXRlcnJvcigicmVjdigpIiwgZXJyYnVmLCBlcnJidWZsZW4pOwogCQlyZXR1cm4gLTE7CiAJfQogI2Vsc2UgLyogX1dJTjMyICovCkBAIC0xMDAzLDEyICsxMTg5LDE2IEBACiAjaWZkZWYgSEFWRV9TVFJVQ1RfTVNHSERSX01TR19GTEFHUwogCW1lc3NhZ2UubXNnX2ZsYWdzID0gMDsKICNlbmRpZgorI2lmZGVmIEZVWlpJTkdfQlVJTERfTU9ERV9VTlNBRkVfRk9SX1BST0RVQ1RJT04KKwlucmVhZCA9IGZ1enpfcmVjdihidWZmZXIsIHNpemUpOworI2Vsc2UKIAlucmVhZCA9IHJlY3Ztc2coc29jaywgJm1lc3NhZ2UsIDApOworI2VuZGlmCiAJaWYgKG5yZWFkID09IC0xKQogCXsKIAkJaWYgKGVycm5vID09IEVJTlRSKQogCQkJcmV0dXJuIC0zOwotCQlzb2NrX2dldGVycm9yKCJyZWN2KCk6ICIsIGVycmJ1ZiwgZXJyYnVmbGVuKTsKKwkJc29ja19nZXRlcnJvcigicmVjdigpIiwgZXJyYnVmLCBlcnJidWZsZW4pOwogCQlyZXR1cm4gLTE7CiAJfQogI2lmZGVmIEhBVkVfU1RSVUNUX01TR0hEUl9NU0dfRkxBR1MKQEAgLTEwMjUsNyArMTIxNSw3IEBACiAJCSAqIFJlcG9ydCB0aGlzIGFzIGFuIGVycm9yLCBhcyB0aGUgTWljcm9zb2Z0IGRvY3VtZW50YXRpb24KIAkJICogaW1wbGllcyB3ZSdkIGRvIGluIGEgc2ltaWxhciBjYXNlIG9uIFdpbmRvd3MuCiAJCSAqLwotCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLCAicmVjdigpOiBNZXNzYWdlIHRvbyBsb25nIik7CisJCXNucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLCAicmVjdigpOiBNZXNzYWdlIHRvbyBsb25nIik7CiAJCXJldHVybiAtMTsKIAl9CiAjZW5kaWYgLyogSEFWRV9TVFJVQ1RfTVNHSERSX01TR19GTEFHUyAqLwpAQCAtMTA2Myw3ICsxMjUzLDcgQEAKICAqIFxyZXR1cm4gJzAnIGlmIGV2ZXJ5dGhpbmcgaXMgZmluZSwgJy0xJyBpZiBzb21lIGVycm9ycyBvY2N1cnJlZC4KICAqIFRoZSBlcnJvciBtZXNzYWdlIGlzIHJldHVybmVkIGluIHRoZSAnZXJyYnVmJyB2YXJpYWJsZS4KICAqLwotaW50IHNvY2tfZGlzY2FyZChTT0NLRVQgc29jaywgaW50IHNpemUsIGNoYXIgKmVycmJ1ZiwgaW50IGVycmJ1ZmxlbikKK2ludCBzb2NrX2Rpc2NhcmQoU09DS0VUIHNvY2ssIFNTTCAqc3NsLCBpbnQgc2l6ZSwgY2hhciAqZXJyYnVmLCBpbnQgZXJyYnVmbGVuKQogewogI2RlZmluZSBURU1QX0JVRl9TSVpFIDMyNzY4CiAKQEAgLTEwNzksNyArMTI2OSw3IEBACiAJICovCiAJd2hpbGUgKHNpemUgPiBURU1QX0JVRl9TSVpFKQogCXsKLQkJaWYgKHNvY2tfcmVjdihzb2NrLCBidWZmZXIsIFRFTVBfQlVGX1NJWkUsIFNPQ0tfUkVDRUlWRUFMTF9ZRVMsIGVycmJ1ZiwgZXJyYnVmbGVuKSA9PSAtMSkKKwkJaWYgKHNvY2tfcmVjdihzb2NrLCBzc2wsIGJ1ZmZlciwgVEVNUF9CVUZfU0laRSwgU09DS19SRUNFSVZFQUxMX1lFUywgZXJyYnVmLCBlcnJidWZsZW4pID09IC0xKQogCQkJcmV0dXJuIC0xOwogCiAJCXNpemUgLT0gVEVNUF9CVUZfU0laRTsKQEAgLTEwOTEsMTIgKzEyODEsMTAgQEAKIAkgKi8KIAlpZiAoc2l6ZSkKIAl7Ci0JCWlmIChzb2NrX3JlY3Yoc29jaywgYnVmZmVyLCBzaXplLCBTT0NLX1JFQ0VJVkVBTExfWUVTLCBlcnJidWYsIGVycmJ1ZmxlbikgPT0gLTEpCisJCWlmIChzb2NrX3JlY3Yoc29jaywgc3NsLCBidWZmZXIsIHNpemUsIFNPQ0tfUkVDRUlWRUFMTF9ZRVMsIGVycmJ1ZiwgZXJyYnVmbGVuKSA9PSAtMSkKIAkJCXJldHVybiAtMTsKIAl9CiAKLQlTT0NLX0RFQlVHX01FU1NBR0UoIkknbSBjdXJyZW50bHkgZGlzY2FyZGluZyBkYXRhXG4iKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0xMTM3LDYgKzEzMjUsNyBAQAogCQlzdHJ1Y3QgYWRkcmluZm8gKmFkZHJpbmZvLCAqYWlfbmV4dDsKIAkJY2hhciAqdGVtcGhvc3RsaXN0OwogCQljaGFyICpsYXN0czsKKwkJaW50IGdldGFkZHJpbmZvX2ZhaWxlZCA9IDA7CiAKIAkJLyoKIAkJICogVGhlIHByb2JsZW0gaXMgdGhhdCBzdHJ0b2sgbW9kaWZpZXMgdGhlIG9yaWdpbmFsIHZhcmlhYmxlIGJ5IHB1dHRpbmcgJzAnIGF0IHRoZSBlbmQgb2YgZWFjaCB0b2tlbgpAQCAtMTE2NCwxMyArMTM1MywxOSBAQAogCQkJaGludHMuYWlfZmFtaWx5ID0gUEZfVU5TUEVDOwogCQkJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKIAotCQkJcmV0dmFsID0gZ2V0YWRkcmluZm8odG9rZW4sICIwIiwgJmhpbnRzLCAmYWRkcmluZm8pOworCQkJcmV0dmFsID0gZ2V0YWRkcmluZm8odG9rZW4sIE5VTEwsICZoaW50cywgJmFkZHJpbmZvKTsKIAkJCWlmIChyZXR2YWwgIT0gMCkKIAkJCXsKIAkJCQlpZiAoZXJyYnVmKQotCQkJCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLCAiZ2V0YWRkcmluZm8oKSAlcyIsIGdhaV9zdHJlcnJvcihyZXR2YWwpKTsKKwkJCQkJZ2V0X2dhaV9lcnJzdHJpbmcoZXJyYnVmLCBlcnJidWZsZW4sCisJCQkJCSAgICAiQWxsb3dlZCBob3N0IGxpc3QgZXJyb3I6ICIsCisJCQkJCSAgICByZXR2YWwsIHRva2VuLCBOVUxMKTsKIAotCQkJCVNPQ0tfREVCVUdfTUVTU0FHRShlcnJidWYpOworCQkJCS8qCisJCQkJICogTm90ZSB0aGF0IGF0IGxlYXN0IG9uZSBjYWxsIHRvIGdldGFkZHJpbmZvKCkKKwkJCQkgKiBmYWlsZWQuCisJCQkJICovCisJCQkJZ2V0YWRkcmluZm9fZmFpbGVkID0gMTsKIAogCQkJCS8qIEdldCBuZXh0IHRva2VuICovCiAJCQkJdG9rZW4gPSBwY2FwX3N0cnRva19yKE5VTEwsIHNlcCwgJmxhc3RzKTsKQEAgLTEyMDgsMTEgKzE0MDMsMjUgQEAKIAkJCWFkZHJpbmZvID0gTlVMTDsKIAkJfQogCi0JCWlmIChlcnJidWYpCi0JCQlwY2FwX3NucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLCAiVGhlIGhvc3QgaXMgbm90IGluIHRoZSBhbGxvd2VkIGhvc3QgbGlzdC4gQ29ubmVjdGlvbiByZWZ1c2VkLiIpOwotCiAJCWZyZWUodGVtcGhvc3RsaXN0KTsKLQkJcmV0dXJuIC0xOworCisJCWlmIChnZXRhZGRyaW5mb19mYWlsZWQpIHsKKwkJCS8qCisJCQkgKiBBdCBsZWFzdCBvbmUgZ2V0YWRkcmluZm8oKSBjYWxsIGZhaWxlZDsKKwkJCSAqIHRyZWF0IHRoYXQgYXMgYW4gZXJyb3IsIHNvIHJwY2FwZCBrbm93cworCQkJICogdGhhdCBpdCBzaG91bGQgbG9nIGl0IGxvY2FsbHkgYXMgd2VsbAorCQkJICogYXMgdGVsbGluZyB0aGUgY2xpZW50IGFib3V0IGl0LgorCQkJICovCisJCQlyZXR1cm4gLTI7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQWxsIGdldGFkZHJpbmZvKCkgY2FsbHMgc3VjY2VlZGVkLCBidXQKKwkJCSAqIHRoZSBob3N0IHdhc24ndCBpbiB0aGUgbGlzdC4KKwkJCSAqLworCQkJaWYgKGVycmJ1ZikKKwkJCQlzbnByaW50ZihlcnJidWYsIGVycmJ1ZmxlbiwgIlRoZSBob3N0IGlzIG5vdCBpbiB0aGUgYWxsb3dlZCBob3N0IGxpc3QuIENvbm5lY3Rpb24gcmVmdXNlZC4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQogCX0KIAogCS8qIE5vIGhvc3RsaXN0LCBzbyB3ZSBoYXZlIHRvIHJldHVybiAnZW1wdHkgbGlzdCcgKi8KQEAgLTEzMTEsNyArMTUyMCw3IEBACiAKIAlpZiAoZ2V0c29ja25hbWUoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmbXlzb2NrYWRkciwgJnNvY2thZGRybGVuKSA9PSAtMSkKIAl7Ci0JCXNvY2tfZ2V0ZXJyb3IoImdldHNvY2tuYW1lKCk6ICIsIGVycmJ1ZiwgZXJyYnVmbGVuKTsKKwkJc29ja19nZXRlcnJvcigiZ2V0c29ja25hbWUoKSIsIGVycmJ1ZiwgZXJyYnVmbGVuKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMzg5LDcgKzE1OTgsNyBAQAogCQkJKG1lbWNtcCgmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIHNvY2thZGRyKS0+c2luNl9hZGRyLCAiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgPT0gMCkpCiAJCXsKIAkJCWlmIChhZGRyZXNzKQotCQkJCXN0cmxjcHkoYWRkcmVzcywgU09DS0VUX05BTUVfTlVMTF9EQUQsIGFkZHJsZW4pOworCQkJCXBjYXBfc3RybGNweShhZGRyZXNzLCBTT0NLRVRfTkFNRV9OVUxMX0RBRCwgYWRkcmxlbik7CiAJCQlyZXR1cm4gcmV0dmFsOwogCQl9CiAJfQpAQCAtMTM5OSwxOSArMTYwOCwxOSBAQAogCQkvKiBJZiB0aGUgdXNlciB3YW50cyB0byByZWNlaXZlIGFuIGVycm9yIG1lc3NhZ2UgKi8KIAkJaWYgKGVycmJ1ZikKIAkJewotCQkJc29ja19nZXRlcnJvcigiZ2V0bmFtZWluZm8oKTogIiwgZXJyYnVmLCBlcnJidWZsZW4pOworCQkJc29ja19nZXRlcnJvcigiZ2V0bmFtZWluZm8oKSIsIGVycmJ1ZiwgZXJyYnVmbGVuKTsKIAkJCWVycmJ1ZltlcnJidWZsZW4gLSAxXSA9IDA7CiAJCX0KIAogCQlpZiAoYWRkcmVzcykKIAkJewotCQkJc3RybGNweShhZGRyZXNzLCBTT0NLRVRfTk9fTkFNRV9BVkFJTEFCTEUsIGFkZHJsZW4pOworCQkJcGNhcF9zdHJsY3B5KGFkZHJlc3MsIFNPQ0tFVF9OT19OQU1FX0FWQUlMQUJMRSwgYWRkcmxlbik7CiAJCQlhZGRyZXNzW2FkZHJsZW4gLSAxXSA9IDA7CiAJCX0KIAogCQlpZiAocG9ydCkKIAkJewotCQkJc3RybGNweShwb3J0LCBTT0NLRVRfTk9fUE9SVF9BVkFJTEFCTEUsIHBvcnRsZW4pOworCQkJcGNhcF9zdHJsY3B5KHBvcnQsIFNPQ0tFVF9OT19QT1JUX0FWQUlMQUJMRSwgcG9ydGxlbik7CiAJCQlwb3J0W3BvcnRsZW4gLSAxXSA9IDA7CiAJCX0KIApAQCAtMTQ4MCw3ICsxNjg5LDcgQEAKIAkJZnJlZWFkZHJpbmZvKGFkZHJpbmZvKTsKIAogCQlpZiAoZXJyYnVmKQotCQkJcGNhcF9zbnByaW50ZihlcnJidWYsIGVycmJ1ZmxlbiwgIk1vcmUgdGhhbiBvbmUgc29ja2V0IHJlcXVlc3RlZDsgdXNpbmcgdGhlIGZpcnN0IG9uZSByZXR1cm5lZCIpOworCQkJc25wcmludGYoZXJyYnVmLCBlcnJidWZsZW4sICJNb3JlIHRoYW4gb25lIHNvY2tldCByZXF1ZXN0ZWQ7IHVzaW5nIHRoZSBmaXJzdCBvbmUgcmV0dXJuZWQiKTsKIAkJcmV0dXJuIC0yOwogCX0KIApkaWZmIC0tZ2l0IGEvc29ja3V0aWxzLmggYi9zb2NrdXRpbHMuaAppbmRleCAxZGYxZWY3Li5lNzQ4NjYyIDEwMDY0NAotLS0gYS9zb2NrdXRpbHMuaAorKysgYi9zb2NrdXRpbHMuaApAQCAtMzcsNTQgKzM3LDExIEBACiAjcHJhZ21hIG9uY2UKICNlbmRpZgogCi0jaWZkZWYgX1dJTjMyCi0gIC8qIE5lZWQgd2luZGVmLmggZm9yIGRlZmluZXMgdXNlZCBpbiB3aW5zb2NrMi5oIHVuZGVyIE1pbmdXMzIgKi8KLSAgI2lmZGVmIF9fTUlOR1czMl9fCi0gICAgI2luY2x1ZGUgPHdpbmRlZi5oPgotICAjZW5kaWYKLSAgI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0gICNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2luY2x1ZGUgInBjYXAvc29ja2V0LmgiCiAKLSAgLyoKLSAgICogV2luc29jayBkb2Vzbid0IGhhdmUgdGhpcyBVTipYIHR5cGU7IGl0J3MgdXNlZCBpbiB0aGUgVU4qWAotICAgKiBzb2NrZXRzIEFQSS4KLSAgICoKLSAgICogWFhYIC0gZG8gd2UgbmVlZCB0byB3b3JyeSBhYm91dCBVTipYZXMgc28gb2xkIHRoYXQgKnRoZXkqCi0gICAqIGRvbid0IGhhdmUgaXQsIGVpdGhlcj8KLSAgICovCi0gIHR5cGVkZWYgaW50IHNvY2tsZW5fdDsKLSNlbHNlCisjaWZuZGVmIF9XSU4zMgogICAvKiBVTipYICovCi0gICNpbmNsdWRlIDxzdGRpby5oPgotICAjaW5jbHVkZSA8c3RyaW5nLmg+CS8qIGZvciBtZW1zZXQoKSAqLwotICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0gICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0gICNpbmNsdWRlIDxuZXRkYi5oPgkvKiBETlMgbG9va3VwICovCiAgICNpbmNsdWRlIDx1bmlzdGQuaD4JLyogY2xvc2UoKSAqLwotICAjaW5jbHVkZSA8ZXJybm8uaD4JLyogZXJybm8oKSAqLwotICAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPiAvKiBmb3Igc29ja2FkZHJfaW4sIGluIEJTRCBhdCBsZWFzdCAqLwotICAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0gICNpbmNsdWRlIDxuZXQvaWYuaD4KLQotICAvKiEKLSAgICogXGJyaWVmIEluIFdpbnNvY2ssIGEgc29ja2V0IGhhbmRsZSBpcyBvZiB0eXBlIFNPQ0tFVDsgaW4gVU4qWCwgaXQncwotICAgKiBhIGZpbGUgZGVzY3JpcHRvciwgYW5kIHRoZXJlZm9yZSBhIHNpZ25lZCBpbnRlZ2VyLgotICAgKiBXZSBkZWZpbmUgU09DS0VUIHRvIGJlIGEgc2lnbmVkIGludGVnZXIgb24gVU4qWCwgc28gdGhhdCBpdCBjYW4KLSAgICogYmUgdXNlZCBvbiBib3RoIHBsYXRmb3Jtcy4KLSAgICovCi0gICNpZm5kZWYgU09DS0VUCi0gICAgI2RlZmluZSBTT0NLRVQgaW50Ci0gICNlbmRpZgotCi0gIC8qIQotICAgKiBcYnJpZWYgSW4gV2luc29jaywgdGhlIGVycm9yIHJldHVybiBpZiBzb2NrZXQoKSBmYWlscyBpcyBJTlZBTElEX1NPQ0tFVDsKLSAgICogaW4gVU4qWCwgaXQncyAtMS4KLSAgICogV2UgZGVmaW5lIElOVkFMSURfU09DS0VUIHRvIGJlIC0xIG9uIFVOKlgsIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgb24KLSAgICogYm90aCBwbGF0Zm9ybXMuCi0gICAqLwotICAjaWZuZGVmIElOVkFMSURfU09DS0VUCi0gICAgI2RlZmluZSBJTlZBTElEX1NPQ0tFVCAtMQotICAjZW5kaWYKIAogICAvKiEKICAgICogXGJyaWVmIEluIFdpbnNvY2ssIHRoZSBjbG9zZSgpIGNhbGwgY2Fubm90IGJlIHVzZWQgb24gYSBzb2NrZXQ7CkBAIC05NSw2ICs1Miw4IEBACiAgICNkZWZpbmUgY2xvc2Vzb2NrZXQoYSkgY2xvc2UoYSkKICNlbmRpZgogCisjaW5jbHVkZSAic3NsdXRpbHMuaCIgIC8vIGZvciBTU0wgdHlwZSwgd2hhdGV2ZXIgdGhhdCB0dXJucyBvdXQgdG8gYmUKKwogLyoKICAqIE1pbmdXIGhlYWRlcnMgaW5jbHVkZSB0aGlzIGRlZmluaXRpb24sIGJ1dCBvbmx5IGZvciBXaW5kb3dzIFhQIGFuZCBhYm92ZS4KICAqIE1TRE4gc3RhdGVzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgZm9yIG1vc3QgdmVyc2lvbnMgb24gV2luZG93cy4KQEAgLTEyMiwzNSArODEsNiBAQAogICogXHsKICAqLwogCi0vKgotICogXGJyaWVmIERFQlVHIGZhY2lsaXR5OiBpdCBwcmludHMgYW4gZXJyb3IgbWVzc2FnZSBvbiB0aGUgc2NyZWVuIChzdGRlcnIpCi0gKgotICogVGhpcyBtYWNybyBwcmludHMgdGhlIGVycm9yIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0gKHN0ZGVycik7Ci0gKiBpZiB3ZSBhcmUgd29ya2luZyBpbiBkZWJ1ZyBtb2RlIChpLmUuIHRoZXJlIGlzIG5vIE5ERUJVRyBkZWZpbmVkKSBhbmQgd2UgYXJlIGluCi0gKiBNaWNyb3NvZnQgVmlzdWFsIEMrKywgdGhlIGVycm9yIG1lc3NhZ2Ugd2lsbCBhcHBlYXIgb24gdGhlIE1TVkMgY29uc29sZSBhcyB3ZWxsLgotICoKLSAqIFdoZW4gTkRFQlVHIGlzIGRlZmluZWQsIHRoaXMgbWFjcm8gaXMgZW1wdHkuCi0gKgotICogXHBhcmFtIG1zZzogdGhlIG1lc3NhZ2UgeW91IHdhbnQgdG8gcHJpbnQuCi0gKgotICogXHBhcmFtIGV4cHI6ICdmYWxzZScgaWYgeW91IHdhbnQgdG8gYWJvcnQgdGhlIHByb2dyYW0sICd0cnVlJyBpdCB5b3Ugd2FudAotICogdG8gcHJpbnQgdGhlIG1lc3NhZ2UgYW5kIGNvbnRpbnVlLgotICoKLSAqIFxyZXR1cm4gTm8gcmV0dXJuIHZhbHVlcy4KLSAqLwotI2lmZGVmIE5ERUJVRwotICAjZGVmaW5lIFNPQ0tfREVCVUdfTUVTU0FHRShtc2cpICgodm9pZCkwKQotI2Vsc2UKLSAgI2lmIChkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChfTVNDX1ZFUikpCi0gICAgI2luY2x1ZGUgPGNydGRiZy5oPgkJCQkvKiBmb3IgX0NydERiZ1JlcG9ydCAqLwotICAgIC8qIFVzZSBNZXNzYWdlQm94KE5VTEwsIG1zZywgIndhcm5pbmciLCBNQl9PSyknIGluc3RlYWQgb2YgdGhlIG90aGVyIGNhbGxzIGlmIHlvdSB3YW50IHRvIGRlYnVnIGEgV2luMzIgc2VydmljZSAqLwotICAgIC8qIFJlbWVtYmVyIHRvIGFjdGl2YXRlIHRoZSAnYWxsb3cgc2VydmljZSB0byBpbnRlcmFjdCB3aXRoIGRlc2t0b3AnIGZsYWcgb2YgdGhlIHNlcnZpY2UgKi8KLSAgICAjZGVmaW5lIFNPQ0tfREVCVUdfTUVTU0FHRShtc2cpIHsgX0NydERiZ1JlcG9ydChfQ1JUX1dBUk4sIE5VTEwsIDAsIE5VTEwsICIlc1xuIiwgbXNnKTsgZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnKTsgfQotICAjZWxzZQotICAgICNkZWZpbmUgU09DS19ERUJVR19NRVNTQUdFKG1zZykgeyBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBtc2cpOyB9Ci0gICNlbmRpZgotI2VuZGlmCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogRXhwb3J0ZWQgZnVuY3Rpb25zIC8gZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICoKQEAgLTE3Niw2ICsxMDYsOCBAQAogI2RlZmluZSBTT0NLX0VPRl9JU05UX0VSUk9SCTB4MDAwMDAwMDAJLyogUmV0dXJuIDAgb24gRU9GICovCiAjZGVmaW5lIFNPQ0tfRU9GX0lTX0VSUk9SCTB4MDAwMDAwMDIJLyogUmV0dXJuIGFuIGVycm9yIG9uIEVPRiAqLwogCisjZGVmaW5lIFNPQ0tfTVNHX1BFRUsJCTB4MDAwMDAwMDQJLyogUmV0dXJuIGRhdGEgYnV0IGxlYXZlIGl0IGluIHRoZSBzb2NrZXQgcXVldWUgKi8KKwogLyoKICAqIFx9CiAgKi8KQEAgLTIwMCwxNyArMTMyLDE3IEBACiBpbnQgc29ja19pbml0YWRkcmVzcyhjb25zdCBjaGFyICphZGRyZXNzLCBjb25zdCBjaGFyICpwb3J0LAogICAgIHN0cnVjdCBhZGRyaW5mbyAqaGludHMsIHN0cnVjdCBhZGRyaW5mbyAqKmFkZHJpbmZvLAogICAgIGNoYXIgKmVycmJ1ZiwgaW50IGVycmJ1Zmxlbik7Ci1pbnQgc29ja19yZWN2KFNPQ0tFVCBzb2NrLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgcmVjZWl2ZWFsbCwKK2ludCBzb2NrX3JlY3YoU09DS0VUIHNvY2ssIFNTTCAqLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgcmVjZWl2ZWFsbCwKICAgICBjaGFyICplcnJidWYsIGludCBlcnJidWZsZW4pOwotaW50IHNvY2tfcmVjdl9kZ3JhbShTT0NLRVQgc29jaywgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwKK2ludCBzb2NrX3JlY3ZfZGdyYW0oU09DS0VUIHNvY2ssIFNTTCAqLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLAogICAgIGNoYXIgKmVycmJ1ZiwgaW50IGVycmJ1Zmxlbik7CiBTT0NLRVQgc29ja19vcGVuKHN0cnVjdCBhZGRyaW5mbyAqYWRkcmluZm8sIGludCBzZXJ2ZXIsIGludCBuY29ubiwgY2hhciAqZXJyYnVmLCBpbnQgZXJyYnVmbGVuKTsKIGludCBzb2NrX2Nsb3NlKFNPQ0tFVCBzb2NrLCBjaGFyICplcnJidWYsIGludCBlcnJidWZsZW4pOwogCi1pbnQgc29ja19zZW5kKFNPQ0tFVCBzb2NrLCBjb25zdCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplLAoraW50IHNvY2tfc2VuZChTT0NLRVQgc29jaywgU1NMICosIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCiAgICAgY2hhciAqZXJyYnVmLCBpbnQgZXJyYnVmbGVuKTsKIGludCBzb2NrX2J1ZmZlcml6ZShjb25zdCBjaGFyICpidWZmZXIsIGludCBzaXplLCBjaGFyICp0ZW1wYnVmLCBpbnQgKm9mZnNldCwgaW50IHRvdHNpemUsIGludCBjaGVja29ubHksIGNoYXIgKmVycmJ1ZiwgaW50IGVycmJ1Zmxlbik7Ci1pbnQgc29ja19kaXNjYXJkKFNPQ0tFVCBzb2NrLCBpbnQgc2l6ZSwgY2hhciAqZXJyYnVmLCBpbnQgZXJyYnVmbGVuKTsKK2ludCBzb2NrX2Rpc2NhcmQoU09DS0VUIHNvY2ssIFNTTCAqLCBpbnQgc2l6ZSwgY2hhciAqZXJyYnVmLCBpbnQgZXJyYnVmbGVuKTsKIGludAlzb2NrX2NoZWNrX2hvc3RsaXN0KGNoYXIgKmhvc3RsaXN0LCBjb25zdCBjaGFyICpzZXAsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpmcm9tLCBjaGFyICplcnJidWYsIGludCBlcnJidWZsZW4pOwogaW50IHNvY2tfY21wYWRkcihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqZmlyc3QsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpzZWNvbmQpOwogCmRpZmYgLS1naXQgYS9zc2x1dGlscy5jIGIvc3NsdXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mjc0Y2MzCi0tLSAvZGV2L251bGwKKysrIGIvc3NsdXRpbHMuYwpAQCAtMCwwICsxLDIzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMiAtIDIwMDMKKyAqIE5ldEdyb3VwLCBQb2xpdGVjbmljbyBkaSBUb3Jpbm8gKEl0YWx5KQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBQb2xpdGVjbmljbyBkaSBUb3Jpbm8gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfT1BFTlNTTAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAicG9ydGFiaWxpdHkuaCIKKworI2luY2x1ZGUgInNzbHV0aWxzLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpzc2xfa2V5ZmlsZSA9ICIiOyAgIC8vITwgZmlsZSBjb250YWluaW5nIHRoZSBwcml2YXRlIGtleSBpbiBQRU0gZm9ybWF0CitzdGF0aWMgY29uc3QgY2hhciAqc3NsX2NlcnRmaWxlID0gIiI7ICAvLyE8IGZpbGUgY29udGFpbmluZyB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUgaW4gUEVNIGZvcm1hdAorc3RhdGljIGNvbnN0IGNoYXIgKnNzbF9yb290ZmlsZSA9ICIiOyAgLy8hPCBmaWxlIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgQ0FzIHRydXN0ZWQgYnkgdGhlIGNsaWVudAorLy8gVE9ETzogYSB3YXkgdG8gc2V0IHNzbF9yb290ZmlsZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIG9yIGFuIGVudnZhcj8KKworLy8gVE9ETzogbG9jaz8KK3N0YXRpYyBTU0xfQ1RYICpjdHg7CisKK3ZvaWQgc3NsX3NldF9jZXJ0ZmlsZShjb25zdCBjaGFyICpjZXJ0ZmlsZSkKK3sKKwlzc2xfY2VydGZpbGUgPSBjZXJ0ZmlsZTsKK30KKwordm9pZCBzc2xfc2V0X2tleWZpbGUoY29uc3QgY2hhciAqa2V5ZmlsZSkKK3sKKwlzc2xfa2V5ZmlsZSA9IGtleWZpbGU7Cit9CisKK2ludCBzc2xfaW5pdF9vbmNlKGludCBpc19zZXJ2ZXIsIGludCBlbmFibGVfY29tcHJlc3Npb24sIGNoYXIgKmVycmJ1Ziwgc2l6ZV90IGVycmJ1ZmxlbikKK3sKKwlzdGF0aWMgaW50IGluaXRlZCA9IDA7CisJaWYgKGluaXRlZCkgcmV0dXJuIDA7CisKKwlTU0xfbGlicmFyeV9pbml0KCk7CisJU1NMX2xvYWRfZXJyb3Jfc3RyaW5ncygpOworCU9wZW5TU0xfYWRkX3NzbF9hbGdvcml0aG1zKCk7CisJaWYgKGVuYWJsZV9jb21wcmVzc2lvbikKKwkJU1NMX0NPTVBfZ2V0X2NvbXByZXNzaW9uX21ldGhvZHMoKTsKKworCVNTTF9NRVRIT0QgY29uc3QgKm1ldGggPQorCSAgICBpc19zZXJ2ZXIgPyBTU0x2MjNfc2VydmVyX21ldGhvZCgpIDogU1NMdjIzX2NsaWVudF9tZXRob2QoKTsKKwljdHggPSBTU0xfQ1RYX25ldyhtZXRoKTsKKwlpZiAoISBjdHgpCisJeworCQlzbnByaW50ZihlcnJidWYsIGVycmJ1ZmxlbiwgIkNhbm5vdCBnZXQgYSBuZXcgU1NMIGNvbnRleHQ6ICVzIiwgRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsKKwkJZ290byBkaWU7CisJfQorCisJU1NMX0NUWF9zZXRfbW9kZShjdHgsIFNTTF9NT0RFX0FVVE9fUkVUUlkpOworCisJaWYgKGlzX3NlcnZlcikKKwl7CisJCWNoYXIgY29uc3QgKmNlcnRmaWxlID0gc3NsX2NlcnRmaWxlWzBdID8gc3NsX2NlcnRmaWxlIDogImNlcnQucGVtIjsKKwkJaWYgKDEgIT0gU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfZmlsZShjdHgsIGNlcnRmaWxlLCBTU0xfRklMRVRZUEVfUEVNKSkKKwkJeworCQkJc25wcmludGYoZXJyYnVmLCBlcnJidWZsZW4sICJDYW5ub3QgcmVhZCBjZXJ0aWZpY2F0ZSBmaWxlICVzOiAlcyIsIGNlcnRmaWxlLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOworCQkJZ290byBkaWU7CisJCX0KKworCQljaGFyIGNvbnN0ICprZXlmaWxlID0gc3NsX2tleWZpbGVbMF0gPyBzc2xfa2V5ZmlsZSA6ICJrZXkucGVtIjsKKwkJaWYgKDEgIT0gU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlKGN0eCwga2V5ZmlsZSwgU1NMX0ZJTEVUWVBFX1BFTSkpCisJCXsKKwkJCXNucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLCAiQ2Fubm90IHJlYWQgcHJpdmF0ZSBrZXkgZmlsZSAlczogJXMiLCBrZXlmaWxlLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOworCQkJZ290byBkaWU7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJaWYgKHNzbF9yb290ZmlsZVswXSkKKwkJeworCQkJaWYgKCEgU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY3R4LCBzc2xfcm9vdGZpbGUsIDApKQorCQkJeworCQkJCXNucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLCAiQ2Fubm90IHJlYWQgQ0EgbGlzdCBmcm9tICVzIiwgc3NsX3Jvb3RmaWxlKTsKKwkJCQlnb3RvIGRpZTsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCVNTTF9DVFhfc2V0X3ZlcmlmeShjdHgsIFNTTF9WRVJJRllfTk9ORSwgTlVMTCk7CisJCX0KKwl9CisKKyNpZiAwCisJaWYgKCEgUkFORF9sb2FkX2ZpbGUoUkFORE9NLCAxMDI0KjEwMjQpKQorCXsKKwkJc25wcmludGYoZXJyYnVmLCBlcnJidWZsZW4sICJDYW5ub3QgaW5pdCByYW5kb20iKTsKKwkJZ290byBkaWU7CisJfQorCisJaWYgKGlzX3NlcnZlcikKKwl7CisJCVNTTF9DVFhfc2V0X3Nlc3Npb25faWRfY29udGV4dChjdHgsICh2b2lkICopJnNfc2VydmVyX3Nlc3Npb25faWRfY29udGV4dCwgc2l6ZW9mKHNfc2VydmVyX3Nlc3Npb25faWRfY29udGV4dCkpOworCX0KKyNlbmRpZgorCisJaW5pdGVkID0gMTsKKwlyZXR1cm4gMDsKKworZGllOgorCXJldHVybiAtMTsKK30KKworU1NMICpzc2xfcHJvbW90aW9uKGludCBpc19zZXJ2ZXIsIFNPQ0tFVCBzLCBjaGFyICplcnJidWYsIHNpemVfdCBlcnJidWZsZW4pCit7CisJaWYgKHNzbF9pbml0X29uY2UoaXNfc2VydmVyLCAxLCBlcnJidWYsIGVycmJ1ZmxlbikgPCAwKSB7CisJCXJldHVybiBOVUxMOworCX0KKworCVNTTCAqc3NsID0gU1NMX25ldyhjdHgpOyAvLyBUT0RPOiBhbHNvIGEgRFRMUyBjb250ZXh0CisJU1NMX3NldF9mZChzc2wsIChpbnQpcyk7CisKKwlpZiAoaXNfc2VydmVyKSB7CisJCWlmIChTU0xfYWNjZXB0KHNzbCkgPD0gMCkgeworCQkJc25wcmludGYoZXJyYnVmLCBlcnJidWZsZW4sICJTU0xfYWNjZXB0KCk6ICVzIiwKKwkJCQkJRVJSX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCksIE5VTEwpKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKFNTTF9jb25uZWN0KHNzbCkgPD0gMCkgeworCQkJc25wcmludGYoZXJyYnVmLCBlcnJidWZsZW4sICJTU0xfY29ubmVjdCgpOiAlcyIsCisJCQkJCUVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCXJldHVybiBzc2w7Cit9CisKKy8vIEZpbmlzaCB1c2luZyBhbiBTU0wgaGFuZGxlOyBzaHV0IGRvd24gdGhlIGNvbm5lY3Rpb24gYW5kIGZyZWUgdGhlCisvLyBoYW5kbGUuCit2b2lkIHNzbF9maW5pc2goU1NMICpzc2wpCit7CisJLy8KKwkvLyBXZSB3b24ndCBiZSB1c2luZyB0aGlzIGFnYWluLCBzbyB3ZSBjYW4ganVzdCBzZW5kIHRoZQorCS8vIHNodXRkb3duIGFsZXJ0IGFuZCBmcmVlIHVwIHRoZSBoYW5kbGUsIGFuZCBoYXZlIG91cgorCS8vIGNhbGxlciBjbG9zZSB0aGUgc29ja2V0LgorCS8vCisJLy8gWFhYIC0gcHJlc3VtYWJseSwgaWYgdGhlIGNvbm5lY3Rpb24gaXMgc2h1dCBkb3duIG9uCisJLy8gb3VyIHNpZGUsIGVpdGhlciBvdXIgcGVlciB3b24ndCBoYXZlIGEgcHJvYmxlbSBzZW5kaW5nCisJLy8gdGhlaXIgc2h1dGRvd24gYWxlcnQgb3Igd2lsbCBub3QgdHJlYXQgc3VjaCBhIHByb2JsZW0KKwkvLyBhcyBhbiBlcnJvci4gIElmIHRoaXMgY2F1c2VzIGVycm9ycyB0byBiZSByZXBvcnRlZCwKKwkvLyBmaXggdGhhdCBhcyBhcHByb3ByaWF0ZS4KKwkvLworCVNTTF9zaHV0ZG93bihzc2wpOworCVNTTF9mcmVlKHNzbCk7Cit9CisKKy8vIFNhbWUgcmV0dXJuIHZhbHVlIGFzIHNvY2tfc2VuZDoKKy8vIDAgb24gT0ssIC0xIG9uIGVycm9yIGJ1dCBjbG9zZWQgY29ubmVjdGlvbiAoLTIpLgoraW50IHNzbF9zZW5kKFNTTCAqc3NsLCBjaGFyIGNvbnN0ICpidWZmZXIsIGludCBzaXplLCBjaGFyICplcnJidWYsIHNpemVfdCBlcnJidWZsZW4pCit7CisJaW50IHN0YXR1cyA9IFNTTF93cml0ZShzc2wsIGJ1ZmZlciwgc2l6ZSk7CisJaWYgKHN0YXR1cyA+IDApCisJeworCQkvLyAiU1NMX3dyaXRlKCkgd2lsbCBvbmx5IHJldHVybiB3aXRoIHN1Y2Nlc3MsIHdoZW4gdGhlIGNvbXBsZXRlIGNvbnRlbnRzICguLi4pIGhhcyBiZWVuIHdyaXR0ZW4uIgorCQlyZXR1cm4gMDsKKwl9CisJZWxzZQorCXsKKwkJaW50IHNzbF9lcnIgPSBTU0xfZ2V0X2Vycm9yKHNzbCwgc3RhdHVzKTsgLy8gVE9ETzogZG9lcyBpdCBwb3AgdGhlIGVycm9yPworCQlpZiAoc3NsX2VyciA9PSBTU0xfRVJST1JfWkVST19SRVRVUk4pCisJCXsKKwkJCXJldHVybiAtMjsKKwkJfQorCQllbHNlIGlmIChzc2xfZXJyID09IFNTTF9FUlJPUl9TWVNDQUxMKQorCQl7CisjaWZuZGVmIF9XSU4zMgorCQkJaWYgKGVycm5vID09IEVDT05OUkVTRVQgfHwgZXJybm8gPT0gRVBJUEUpIHJldHVybiAtMjsKKyNlbmRpZgorCQl9CisJCXNucHJpbnRmKGVycmJ1ZiwgZXJyYnVmbGVuLCAiU1NMX3dyaXRlKCk6ICVzIiwKKwkJICAgIEVSUl9lcnJvcl9zdHJpbmcoRVJSX2dldF9lcnJvcigpLCBOVUxMKSk7CisJCXJldHVybiAtMTsKKwl9Cit9CisKKy8vIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkLCBvciAtMSBvbiBzeXNlcnJvciwgb3IgLTIgb24gU1NMIGVycm9yLgoraW50IHNzbF9yZWN2KFNTTCAqc3NsLCBjaGFyICpidWZmZXIsIGludCBzaXplLCBjaGFyICplcnJidWYsIHNpemVfdCBlcnJidWZsZW4pCit7CisJaW50IHN0YXR1cyA9IFNTTF9yZWFkKHNzbCwgYnVmZmVyLCBzaXplKTsKKwlpZiAoc3RhdHVzIDw9IDApCisJeworCQlpbnQgc3NsX2VyciA9IFNTTF9nZXRfZXJyb3Ioc3NsLCBzdGF0dXMpOworCQlpZiAoc3NsX2VyciA9PSBTU0xfRVJST1JfWkVST19SRVRVUk4pCisJCXsKKwkJCXJldHVybiAwOworCQl9CisJCWVsc2UgaWYgKHNzbF9lcnIgPT0gU1NMX0VSUk9SX1NZU0NBTEwpCisJCXsKKwkJCXJldHVybiAtMTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIFNob3VsZCBub3QgaGFwcGVuCisJCQlzbnByaW50ZihlcnJidWYsIGVycmJ1ZmxlbiwgIlNTTF9yZWFkKCk6ICVzIiwKKwkJCSAgICBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOworCQkJcmV0dXJuIC0yOworCQl9CisJfQorCWVsc2UKKwl7CisJCXJldHVybiBzdGF0dXM7CisJfQorfQorCisjZW5kaWYgLy8gSEFWRV9PUEVOU1NMCmRpZmYgLS1naXQgYS9zc2x1dGlscy5oIGIvc3NsdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzE2MzY0Ci0tLSAvZGV2L251bGwKKysrIGIvc3NsdXRpbHMuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAyIC0gMjAwMworICogTmV0R3JvdXAsIFBvbGl0ZWNuaWNvIGRpIFRvcmlubyAoSXRhbHkpCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFBvbGl0ZWNuaWNvIGRpIFRvcmlubyBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfX1NTTFVUSUxTX0hfXworI2RlZmluZSBfX1NTTFVUSUxTX0hfXworCisjaWZkZWYgSEFWRV9PUEVOU1NMCisjaW5jbHVkZSAicGNhcC9zb2NrZXQuaCIgIC8vIGZvciBTT0NLRVQKKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisKKy8qCisgKiBVdGlsaXR5IGZ1bmN0aW9ucworICovCisKK3ZvaWQgc3NsX3NldF9jZXJ0ZmlsZShjb25zdCBjaGFyICpjZXJ0ZmlsZSk7Cit2b2lkIHNzbF9zZXRfa2V5ZmlsZShjb25zdCBjaGFyICprZXlmaWxlKTsKK2ludCBzc2xfaW5pdF9vbmNlKGludCBpc19zZXJ2ZXIsIGludCBlbmFibGVfY29tcHJlc3Npb24sIGNoYXIgKmVycmJ1Ziwgc2l6ZV90IGVycmJ1Zmxlbik7CitTU0wgKnNzbF9wcm9tb3Rpb24oaW50IGlzX3NlcnZlciwgU09DS0VUIHMsIGNoYXIgKmVycmJ1Ziwgc2l6ZV90IGVycmJ1Zmxlbik7Cit2b2lkIHNzbF9maW5pc2goU1NMICpzc2wpOworaW50IHNzbF9zZW5kKFNTTCAqLCBjaGFyIGNvbnN0ICpidWZmZXIsIGludCBzaXplLCBjaGFyICplcnJidWYsIHNpemVfdCBlcnJidWZsZW4pOworaW50IHNzbF9yZWN2KFNTTCAqLCBjaGFyICpidWZmZXIsIGludCBzaXplLCBjaGFyICplcnJidWYsIHNpemVfdCBlcnJidWZsZW4pOworCisvLyBUaGUgU1NMIHBhcmFtZXRlcnMgYXJlIHVzZWQKKyNkZWZpbmUgX1VfTk9TU0xfCisKKyNlbHNlICAgLy8gSEFWRV9PUEVOU1NMCisKKy8vIFRoaXMgc2F2ZXMgdXMgZnJvbSBhIGxvdCBvZiBpZmRlZnM6CisjZGVmaW5lIFNTTCB2b2lkIGNvbnN0CisKKy8vIFRoZSBTU0wgcGFyYW1ldGVycyBhcmUgdW51c2VkCisjZGVmaW5lIF9VX05PU1NMXwlfVV8KKworI2VuZGlmICAvLyBIQVZFX09QRU5TU0wKKworI2VuZGlmICAvLyBfX1NTTFVUSUxTX0hfXwpkaWZmIC0tZ2l0IGEvdGVzdHByb2dzLy5naXRpZ25vcmUgYi90ZXN0cHJvZ3MvLmdpdGlnbm9yZQppbmRleCBiOTE3OGI0Li5iNTdjN2JiIDEwMDY0NAotLS0gYS90ZXN0cHJvZ3MvLmdpdGlnbm9yZQorKysgYi90ZXN0cHJvZ3MvLmdpdGlnbm9yZQpAQCAtNyw3ICs3LDkgQEAKIGNhbl9zZXRfcmZtb25fdGVzdAogZmlsdGVydGVzdAogZmluZGFsbGRldnN0ZXN0CitmaW5kYWxsZGV2c3Rlc3QtcGVyZgogb3BlbnRlc3QKIHJlYWN0aXZhdGV0ZXN0CiBzZWxwb2xsdGVzdAogdGhyZWFkc2lnbmFsdGVzdAord3JpdGVjYXB0ZXN0CmRpZmYgLS1naXQgYS90ZXN0cHJvZ3MvQlBGLzEudHh0IGIvdGVzdHByb2dzL0JQRi8xLnR4dAppbmRleCA2NjA4Njk1Li43MzM2NTFlIDEwMDY0NAotLS0gYS90ZXN0cHJvZ3MvQlBGLzEudHh0CisrKyBiL3Rlc3Rwcm9ncy9CUEYvMS50eHQKQEAgLTEsMiArMSwyIEBACi0jIGNvbW1vbiBibG9jayBtZXJnaW5nLCBzYW1lIGJsb2NrIGVsaW1pbmF0aW9uLCByZXN1bHQgcHJvcG9nYXRpb24KKyMgY29tbW9uIGJsb2NrIG1lcmdpbmcsIHNhbWUgYmxvY2sgZWxpbWluYXRpb24sIHJlc3VsdCBwcm9wYWdhdGlvbgogaG9zdCAxOTIuMTY4LjEuMQpkaWZmIC0tZ2l0IGEvdGVzdHByb2dzL0NNYWtlTGlzdHMudHh0IGIvdGVzdHByb2dzL0NNYWtlTGlzdHMudHh0CmluZGV4IGI4ZWY5YjcuLmJmNTczNjEgMTAwNjQ0Ci0tLSBhL3Rlc3Rwcm9ncy9DTWFrZUxpc3RzLnR4dAorKysgYi90ZXN0cHJvZ3MvQ01ha2VMaXN0cy50eHQKQEAgLTE5LDYgKzE5LDEwIEBACiAgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKCR7X2V4ZWN1dGFibGV9CiAgICAgICAke0FSR059ICR7TElCUkFSWV9OQU1FfV9zdGF0aWMgJHtQQ0FQX0xJTktfTElCUkFSSUVTfSkKICAgZW5kaWYoV0lOMzIpCisgIGlmKE5PVCAiJHtMSU5LRVJfRkxBR1N9IiBTVFJFUVVBTCAiIikKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoJHtfZXhlY3V0YWJsZX0gUFJPUEVSVElFUworICAgICAgTElOS19GTEFHUyAiJHtMSU5LRVJfRkxBR1N9IikKKyAgZW5kaWYoKQogICBhZGRfZGVwZW5kZW5jaWVzKHRlc3Rwcm9ncyAke19leGVjdXRhYmxlfSkKIGVuZG1hY3JvKCkKIApAQCAtMjYsOCArMzAsMTAgQEAKIGFkZF90ZXN0X2V4ZWN1dGFibGUoY2FwdHVyZXRlc3QpCiBhZGRfdGVzdF9leGVjdXRhYmxlKGZpbHRlcnRlc3QpCiBhZGRfdGVzdF9leGVjdXRhYmxlKGZpbmRhbGxkZXZzdGVzdCkKK2FkZF90ZXN0X2V4ZWN1dGFibGUoZmluZGFsbGRldnN0ZXN0LXBlcmYpCiBhZGRfdGVzdF9leGVjdXRhYmxlKG9wZW50ZXN0KQogYWRkX3Rlc3RfZXhlY3V0YWJsZShyZWFjdGl2YXRldGVzdCkKK2FkZF90ZXN0X2V4ZWN1dGFibGUod3JpdGVjYXB0ZXN0KQogCiBpZihOT1QgV0lOMzIpCiAgIGFkZF90ZXN0X2V4ZWN1dGFibGUoc2VscG9sbHRlc3QpCkBAIC0zOCwzICs0NCw1IEBACiBpZihOT1QgV0lOMzIpCiAgIGFkZF90ZXN0X2V4ZWN1dGFibGUodmFsZ3JpbmR0ZXN0KQogZW5kaWYoKQorCithZGRfc3ViZGlyZWN0b3J5KGZ1enopCmRpZmYgLS1naXQgYS90ZXN0cHJvZ3MvTWFrZWZpbGUuaW4gYi90ZXN0cHJvZ3MvTWFrZWZpbGUuaW4KaW5kZXggZWMwYTQ3Mi4uNDNhZjU2MSAxMDA2NDQKLS0tIGEvdGVzdHByb2dzL01ha2VmaWxlLmluCisrKyBiL3Rlc3Rwcm9ncy9NYWtlZmlsZS5pbgpAQCAtMzgsNiArMzgsNyBAQAogCiAjIFZQQVRICiBzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAogVlBBVEggPSBAc3JjZGlyQAogCiAjCkBAIC03OSwxNCArODAsMTYgQEAKIAkkKENDKSAkKEZVTExfQ0ZMQUdTKSAtYyAkKHNyY2RpcikvJCouYwogCiBTUkMgPSBAVkFMR1JJTkRURVNUX1NSQ0AgXAotCWNhcHR1cmV0ZXN0LmMgXAogCWNhbl9zZXRfcmZtb25fdGVzdC5jIFwKKwljYXB0dXJldGVzdC5jIFwKIAlmaWx0ZXJ0ZXN0LmMgXAorCWZpbmRhbGxkZXZzdGVzdC1wZXJmLmMgXAogCWZpbmRhbGxkZXZzdGVzdC5jIFwKIAlvcGVudGVzdC5jIFwKIAlyZWFjdGl2YXRldGVzdC5jIFwKIAlzZWxwb2xsdGVzdC5jIFwKLQl0aHJlYWRzaWduYWx0ZXN0LmMKKwl0aHJlYWRzaWduYWx0ZXN0LmMgXAorCXdyaXRlY2FwdGVzdC5jCiAKIFRFU1RTID0gJChTUkM6LmM9KQogCkBAIC0xMDksNiArMTEyLDkgQEAKIGZpbmRhbGxkZXZzdGVzdDogJChzcmNkaXIpL2ZpbmRhbGxkZXZzdGVzdC5jIC4uL2xpYnBjYXAuYQogCSQoQ0MpICQoRlVMTF9DRkxBR1MpIC1JLiAtTC4gLW8gZmluZGFsbGRldnN0ZXN0ICQoc3JjZGlyKS9maW5kYWxsZGV2c3Rlc3QuYyAuLi9saWJwY2FwLmEgJChFWFRSQV9ORVRXT1JLX0xJQlMpICQoTElCUykKIAorZmluZGFsbGRldnN0ZXN0LXBlcmY6ICQoc3JjZGlyKS9maW5kYWxsZGV2c3Rlc3QtcGVyZi5jIC4uL2xpYnBjYXAuYQorCSQoQ0MpICQoRlVMTF9DRkxBR1MpIC1JLiAtTC4gLW8gZmluZGFsbGRldnN0ZXN0LXBlcmYgJChzcmNkaXIpL2ZpbmRhbGxkZXZzdGVzdC1wZXJmLmMgLi4vbGlicGNhcC5hICQoRVhUUkFfTkVUV09SS19MSUJTKSAkKExJQlMpCisKIG9wZW50ZXN0OiAkKHNyY2Rpcikvb3BlbnRlc3QuYyAuLi9saWJwY2FwLmEKIAkkKENDKSAkKEZVTExfQ0ZMQUdTKSAtSS4gLUwuIC1vIG9wZW50ZXN0ICQoc3JjZGlyKS9vcGVudGVzdC5jIC4uL2xpYnBjYXAuYSAkKExJQlMpCiAKQEAgLTEyNCw2ICsxMzAsOSBAQAogdmFsZ3JpbmR0ZXN0OiAkKHNyY2RpcikvdmFsZ3JpbmR0ZXN0LmMgLi4vbGlicGNhcC5hCiAJJChDQykgJChGVUxMX0NGTEFHUykgLUkuIC1MLiAtbyB2YWxncmluZHRlc3QgJChzcmNkaXIpL3ZhbGdyaW5kdGVzdC5jIC4uL2xpYnBjYXAuYSAkKExJQlMpCiAKK3dyaXRlY2FwdGVzdDogJChzcmNkaXIpL3dyaXRlY2FwdGVzdC5jIC4uL2xpYnBjYXAuYQorCSQoQ0MpICQoRlVMTF9DRkxBR1MpIC1JLiAtTC4gLW8gd3JpdGVjYXB0ZXN0ICQoc3JjZGlyKS93cml0ZWNhcHRlc3QuYyAuLi9saWJwY2FwLmEgJChMSUJTKQorCiBjbGVhbjoKIAlybSAtZiAkKENMRUFORklMRVMpCiAJcm0gLXJmICouZFNZTQpAQCAtMTQxLDQgKzE1MCw0IEBACiAJY3RhZ3MgLXd0ZCAkKFRBR0ZJTEVTKQogCiBkZXBlbmQ6Ci0JLi4vJChNS0RFUCkgLWMgIiQoQ0MpIiAtbSAiJChERVBFTkRFTkNZX0NGTEFHKSIgJChDRkxBR1MpICQoREVGUykgJChJTkNMUykgJChTUkMpCisJJChNS0RFUCkgLWMgIiQoQ0MpIiAtbSAiJChERVBFTkRFTkNZX0NGTEFHKSIgLXMgIiQoc3JjZGlyKSIgJChDRkxBR1MpICQoREVGUykgJChJTkNMUykgJChTUkMpCmRpZmYgLS1naXQgYS90ZXN0cHJvZ3MvY2FuX3NldF9yZm1vbl90ZXN0LmMgYi90ZXN0cHJvZ3MvY2FuX3NldF9yZm1vbl90ZXN0LmMKaW5kZXggZjYxODhiYS4uOTY4MTZmOSAxMDA2NDQKLS0tIGEvdGVzdHByb2dzL2Nhbl9zZXRfcmZtb25fdGVzdC5jCisrKyBiL3Rlc3Rwcm9ncy9jYW5fc2V0X3JmbW9uX3Rlc3QuYwpAQCAtNzAsNyArNzAsNiBAQAogCQllbHNlCiAJCQllcnJvcigiJXM6IHBjYXBfY2FuX3NldF9yZm1vbiBmYWlsZWQ6ICVzIiwgYXJndlsxXSwKIAkJCSAgICBwY2FwX3N0YXR1c3Rvc3RyKHN0YXR1cykpOwotCQlyZXR1cm4gMTsKIAl9CiAJcHJpbnRmKCIlczogTW9uaXRvciBtb2RlICVzIGJlIHNldFxuIiwgYXJndlsxXSwgc3RhdHVzID8gImNhbiIgOiAiY2Fubm90Iik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS90ZXN0cHJvZ3MvY2FwdHVyZXRlc3QuYyBiL3Rlc3Rwcm9ncy9jYXB0dXJldGVzdC5jCmluZGV4IGQ2MjVjYjQuLjRlYWRkMzMgMTAwNjQ0Ci0tLSBhL3Rlc3Rwcm9ncy9jYXB0dXJldGVzdC5jCisrKyBiL3Rlc3Rwcm9ncy9jYXB0dXJldGVzdC5jCkBAIC0zOCw2ICszOCw5IEBACiAgICNpbmNsdWRlIDx1bmlzdGQuaD4KICNlbmRpZgogI2luY2x1ZGUgPGVycm5vLmg+CisjaWZuZGVmIF9XSU4zMgorICAjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAogI2luY2x1ZGUgPHBjYXAuaD4KQEAgLTU4LDYgKzYxLDM3IEBACiBzdGF0aWMgY2hhciAqY29weV9hcmd2KGNoYXIgKiopOwogCiBzdGF0aWMgcGNhcF90ICpwZDsKKyNpZm5kZWYgX1dJTjMyCitzdGF0aWMgaW50IGJyZWFrc2lnaW50ID0gMDsKKyNlbmRpZgorCisjaWZuZGVmIF9XSU4zMgorc3RhdGljIHZvaWQKK3NpZ2ludF9oYW5kbGVyKGludCBzaWdudW0gX1VfKQoreworCWlmIChicmVha3NpZ2ludCkKKwkJcGNhcF9icmVha2xvb3AocGQpOworfQorI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKy8qCisgKiBXZSBkb24ndCBoYXZlIFVOKlgtc3R5bGUgc2lnbmFscywgc28gd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byB0ZXN0LgorICovCisjZGVmaW5lIEJfT1BUSU9OCSIiCisjZGVmaW5lIFJfT1BUSU9OCSIiCisjZGVmaW5lIFNfT1BUSU9OCSIiCisjZWxzZQorLyoKKyAqIFdlIGRvIGhhdmUgVU4qWC1zdHlsZSBzaWduYWxzICh3ZSBhc3N1bWUgdGhhdCAibm90IFdpbmRvd3MiIG1lYW5zICJVTipYIikuCisgKi8KKyNkZWZpbmUgQl9PUFRJT04JImIiCisjZGVmaW5lIFJfT1BUSU9OCSJyIgorI2RlZmluZSBTX09QVElPTgkicyIKKyNlbmRpZgorCisjZGVmaW5lIENPTU1BTkRfT1BUSU9OUwlCX09QVElPTiAiaTptbiIgUl9PUFRJT04gU19PUFRJT04gInQ6IgorI2RlZmluZSBVU0FHRV9PUFRJT05TCSItIiBCX09QVElPTiAibW4iIFJfT1BUSU9OIFNfT1BUSU9OCiAKIGludAogbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCkBAIC02OSw2ICsxMDMsMTAgQEAKIAlpbnQgdGltZW91dCA9IDEwMDA7CiAJaW50IGltbWVkaWF0ZSA9IDA7CiAJaW50IG5vbmJsb2NrID0gMDsKKyNpZm5kZWYgX1dJTjMyCisJaW50IHNpZ3Jlc3RhcnQgPSAwOworCWludCBjYXRjaHNpZ2ludCA9IDA7CisjZW5kaWYKIAlwY2FwX2lmX3QgKmRldmxpc3Q7CiAJYnBmX3VfaW50MzIgbG9jYWxuZXQsIG5ldG1hc2s7CiAJc3RydWN0IGJwZl9wcm9ncmFtIGZjb2RlOwpAQCAtODMsOSArMTIxLDE1IEBACiAJCXByb2dyYW1fbmFtZSA9IGFyZ3ZbMF07CiAKIAlvcHRlcnIgPSAwOwotCXdoaWxlICgob3AgPSBnZXRvcHQoYXJnYywgYXJndiwgImk6bW50OiIpKSAhPSAtMSkgeworCXdoaWxlICgob3AgPSBnZXRvcHQoYXJnYywgYXJndiwgQ09NTUFORF9PUFRJT05TKSkgIT0gLTEpIHsKIAkJc3dpdGNoIChvcCkgewogCisjaWZuZGVmIF9XSU4zMgorCQljYXNlICdiJzoKKwkJCWJyZWFrc2lnaW50ID0gMTsKKwkJCWJyZWFrOworI2VuZGlmCisKIAkJY2FzZSAnaSc6CiAJCQlkZXZpY2UgPSBvcHRhcmc7CiAJCQlicmVhazsKQEAgLTk4LDYgKzE0MiwxNiBAQAogCQkJbm9uYmxvY2sgPSAxOwogCQkJYnJlYWs7CiAKKyNpZm5kZWYgX1dJTjMyCisJCWNhc2UgJ3InOgorCQkJc2lncmVzdGFydCA9IDE7CisJCQlicmVhazsKKworCQljYXNlICdzJzoKKwkJCWNhdGNoc2lnaW50ID0gMTsKKwkJCWJyZWFrOworI2VuZGlmCisKIAkJY2FzZSAndCc6CiAJCQlsb25nYXJnID0gc3RydG9sKG9wdGFyZywgJnAsIDEwKTsKIAkJCWlmIChwID09IG9wdGFyZyB8fCAqcCAhPSAnXDAnKSB7CkBAIC0xMzIsNiArMTg2LDI4IEBACiAJCXBjYXBfZnJlZWFsbGRldnMoZGV2bGlzdCk7CiAJfQogCSplYnVmID0gJ1wwJzsKKworI2lmbmRlZiBfV0lOMzIKKwkvKgorCSAqIElmIHdlIHdlcmUgdG9sZCB0byBjYXRjaCBTSUdJTlQsIGRvIHNvLgorCSAqLworCWlmIChjYXRjaHNpZ2ludCkgeworCQlzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKworCQlhY3Rpb24uc2FfaGFuZGxlciA9IHNpZ2ludF9oYW5kbGVyOworCQlzaWdlbXB0eXNldCgmYWN0aW9uLnNhX21hc2spOworCisJCS8qCisJCSAqIFNob3VsZCBTSUdJTlQgaW50ZXJydXB0LCBvciByZXN0YXJ0LCBzeXN0ZW0gY2FsbHM/CisJCSAqLworCQlhY3Rpb24uc2FfZmxhZ3MgPSBzaWdyZXN0YXJ0ID8gU0FfUkVTVEFSVCA6IDA7CisKKwkJaWYgKHNpZ2FjdGlvbihTSUdJTlQsICZhY3Rpb24sIE5VTEwpID09IC0xKQorCQkJZXJyb3IoIkNhbid0IGNhdGNoIFNJR0lOVDogJXNcbiIsCisJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisjZW5kaWYKKwogCXBkID0gcGNhcF9jcmVhdGUoZGV2aWNlLCBlYnVmKTsKIAlpZiAocGQgPT0gTlVMTCkKIAkJZXJyb3IoIiVzIiwgZWJ1Zik7CkBAIC0xODgsNiArMjY0LDEwIEBACiAJCWlmIChzdGF0dXMgIT0gMCkgewogCQkJcHJpbnRmKCIlZCBwYWNrZXRzIHNlZW4sICVkIHBhY2tldHMgY291bnRlZCBhZnRlciBwY2FwX2Rpc3BhdGNoIHJldHVybnNcbiIsCiAJCQkgICAgc3RhdHVzLCBwYWNrZXRfY291bnQpOworCQkJc3RydWN0IHBjYXBfc3RhdCBwczsKKwkJCXBjYXBfc3RhdHMocGQsICZwcyk7CisJCQlwcmludGYoIiVkIHBzX3JlY3YsICVkIHBzX2Ryb3AsICVkIHBzX2lmZHJvcFxuIiwKKwkJCSAgICBwcy5wc19yZWN2LCBwcy5wc19kcm9wLCBwcy5wc19pZmRyb3ApOwogCQl9CiAJfQogCWlmIChzdGF0dXMgPT0gLTIpIHsKQEAgLTE5NywxMyArMjc3LDE0IEBACiAJCSAqIFByaW50IGFuIGV4dHJhIG5ld2xpbmUsIGp1c3QgaW4gY2FzZS4KIAkJICovCiAJCXB1dGNoYXIoJ1xuJyk7CisJCXByaW50ZigiQnJva2VuIG91dCBvZiBsb29wIGZyb20gU0lHSU5UIGhhbmRsZXJcbiIpOwogCX0KIAkodm9pZClmZmx1c2goc3Rkb3V0KTsKIAlpZiAoc3RhdHVzID09IC0xKSB7CiAJCS8qCiAJCSAqIEVycm9yLiAgUmVwb3J0IGl0LgogCQkgKi8KLQkJKHZvaWQpZnByaW50ZihzdGRlcnIsICIlczogcGNhcF9sb29wOiAlc1xuIiwKKwkJKHZvaWQpZnByaW50ZihzdGRlcnIsICIlczogcGNhcF9kaXNwYXRjaDogJXNcbiIsCiAJCSAgICBwcm9ncmFtX25hbWUsIHBjYXBfZ2V0ZXJyKHBkKSk7CiAJfQogCXBjYXBfY2xvc2UocGQpOwpAQCAtMjIzLDcgKzMwNCw3IEBACiBzdGF0aWMgdm9pZAogdXNhZ2Uodm9pZCkKIHsKLQkodm9pZClmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBbIC1tbiBdIFsgLWkgaW50ZXJmYWNlIF0gWyAtdCB0aW1lb3V0XSBbZXhwcmVzc2lvbl1cbiIsCisJKHZvaWQpZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgWyAiIFVTQUdFX09QVElPTlMgIiBdIFsgLWkgaW50ZXJmYWNlIF0gWyAtdCB0aW1lb3V0XSBbZXhwcmVzc2lvbl1cbiIsCiAJICAgIHByb2dyYW1fbmFtZSk7CiAJZXhpdCgxKTsKIH0KQEAgLTI3MSw3ICszNTIsNyBAQAogY29weV9hcmd2KHJlZ2lzdGVyIGNoYXIgKiphcmd2KQogewogCXJlZ2lzdGVyIGNoYXIgKipwOwotCXJlZ2lzdGVyIHVfaW50IGxlbiA9IDA7CisJcmVnaXN0ZXIgc2l6ZV90IGxlbiA9IDA7CiAJY2hhciAqYnVmOwogCWNoYXIgKnNyYywgKmRzdDsKIApkaWZmIC0tZ2l0IGEvdGVzdHByb2dzL2ZpbHRlcnRlc3QuYyBiL3Rlc3Rwcm9ncy9maWx0ZXJ0ZXN0LmMKaW5kZXggN2UyZDZkNi4uNDQwYjU1MCAxMDA2NDQKLS0tIGEvdGVzdHByb2dzL2ZpbHRlcnRlc3QuYworKysgYi90ZXN0cHJvZ3MvZmlsdGVydGVzdC5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CiAjaWZkZWYgX1dJTjMyCiAgICNpbmNsdWRlICJnZXRvcHQuaCIKICAgI2luY2x1ZGUgInVuaXguaCIKQEAgLTU2LDYgKzU3LDggQEAKIAogI2luY2x1ZGUgInBjYXAvZnVuY2F0dHJzLmgiCiAKKyNkZWZpbmUgTUFYSU1VTV9TTkFQTEVOCQkyNjIxNDQKKwogI2lmZGVmIEJERUJVRwogLyoKICAqIFdlIGhhdmUgcGNhcF9zZXRfb3B0aW1pemVyX2RlYnVnKCkgYW5kIHBjYXBfc2V0X3ByaW50X2RvdF9ncmFwaCgpIGluCkBAIC05OSwxMSArMTAyLDIxIEBACiAJaWYgKGZzdGF0KGZkLCAmYnVmKSA8IDApCiAJCWVycm9yKCJjYW4ndCBzdGF0ICVzOiAlcyIsIGZuYW1lLCBwY2FwX3N0cmVycm9yKGVycm5vKSk7CiAKKwkvKgorCSAqIF9yZWFkKCksIG9uIFdpbmRvd3MsIGhhcyBhbiB1bnNpZ25lZCBpbnQgYnl0ZSBjb3VudCBhbmQgYW4KKwkgKiBpbnQgcmV0dXJuIHZhbHVlLCBzbyB3ZSBjYW4ndCBoYW5kbGUgYSBmaWxlIGJpZ2dlciB0aGFuCisJICogSU5UX01BWCAtIDEgYnl0ZXMgKGFuZCBoYXZlIG5vIHJlYXNvbiB0byBkbyBzbzsgYSBmaWx0ZXIgKnRoYXQqCisJICogYmlnIHdpbGwgdGFrZSBmb3JldmVyIHRvIGNvbXBpbGUpLiAgKFRoZSAtMSBpcyBmb3IgdGhlICdcMCcgYXQKKwkgKiB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuKQorCSAqLworCWlmIChidWYuc3Rfc2l6ZSA+IElOVF9NQVggLSAxKQorCQllcnJvcigiJXMgaXMgbGFyZ2VyIHRoYW4gJWQgYnl0ZXM7IHRoYXQncyB0b28gbGFyZ2UiLCBmbmFtZSwKKwkJICAgIElOVF9NQVggLSAxKTsKIAljcCA9IG1hbGxvYygodV9pbnQpYnVmLnN0X3NpemUgKyAxKTsKIAlpZiAoY3AgPT0gTlVMTCkKIAkJZXJyb3IoIm1hbGxvYyglZCkgZm9yICVzOiAlcyIsICh1X2ludClidWYuc3Rfc2l6ZSArIDEsCiAJCQlmbmFtZSwgcGNhcF9zdHJlcnJvcihlcnJubykpOwotCWNjID0gcmVhZChmZCwgY3AsICh1X2ludClidWYuc3Rfc2l6ZSk7CisJY2MgPSAoaW50KXJlYWQoZmQsIGNwLCAodV9pbnQpYnVmLnN0X3NpemUpOwogCWlmIChjYyA8IDApCiAJCWVycm9yKCJyZWFkICVzOiAlcyIsIGZuYW1lLCBwY2FwX3N0cmVycm9yKGVycm5vKSk7CiAJaWYgKGNjICE9IGJ1Zi5zdF9zaXplKQpAQCAtMTYzLDcgKzE3Niw3IEBACiBjb3B5X2FyZ3YocmVnaXN0ZXIgY2hhciAqKmFyZ3YpCiB7CiAJcmVnaXN0ZXIgY2hhciAqKnA7Ci0JcmVnaXN0ZXIgdV9pbnQgbGVuID0gMDsKKwlyZWdpc3RlciBzaXplX3QgbGVuID0gMDsKIAljaGFyICpidWY7CiAJY2hhciAqc3JjLCAqZHN0OwogCkBAIC0xOTYsMTAgKzIwOSwxMiBAQAogCWNoYXIgKmNwOwogCWludCBvcDsKIAlpbnQgZGZsYWc7CisjaWZkZWYgQkRFQlVHCiAJaW50IGdmbGFnOworI2VuZGlmCiAJY2hhciAqaW5maWxlOwogCWludCBPZmxhZzsKLQlsb25nIHNuYXBsZW47CisJaW50IHNuYXBsZW47CiAJY2hhciAqcDsKIAlpbnQgZGx0OwogCWludCBoYXZlX2Zjb2RlID0gMDsKQEAgLTIxNCwxMSArMjI5LDEzIEBACiAjZW5kaWYgLyogX1dJTjMyICovCiAKIAlkZmxhZyA9IDE7CisjaWZkZWYgQkRFQlVHCiAJZ2ZsYWcgPSAwOworI2VuZGlmCiAKIAlpbmZpbGUgPSBOVUxMOwogCU9mbGFnID0gMTsKLQlzbmFwbGVuID0gNjg7CisJc25hcGxlbiA9IE1BWElNVU1fU05BUExFTjsKIAogCWlmICgoY3AgPSBzdHJyY2hyKGFyZ3ZbMF0sICcvJykpICE9IE5VTEwpCiAJCXByb2dyYW1fbmFtZSA9IGNwICsgMTsKQEAgLTI3MiwxMyArMjg5LDE5IEBACiAKIAkJY2FzZSAncyc6IHsKIAkJCWNoYXIgKmVuZDsKKwkJCWxvbmcgbG9uZ19zbmFwbGVuOwogCi0JCQlzbmFwbGVuID0gc3RydG9sKG9wdGFyZywgJmVuZCwgMCk7CisJCQlsb25nX3NuYXBsZW4gPSBzdHJ0b2wob3B0YXJnLCAmZW5kLCAwKTsKIAkJCWlmIChvcHRhcmcgPT0gZW5kIHx8ICplbmQgIT0gJ1wwJwotCQkJICAgIHx8IHNuYXBsZW4gPCAwIHx8IHNuYXBsZW4gPiA2NTUzNSkKKwkJCSAgICB8fCBsb25nX3NuYXBsZW4gPCAwCisJCQkgICAgfHwgbG9uZ19zbmFwbGVuID4gTUFYSU1VTV9TTkFQTEVOKQogCQkJCWVycm9yKCJpbnZhbGlkIHNuYXBsZW4gJXMiLCBvcHRhcmcpOwotCQkJZWxzZSBpZiAoc25hcGxlbiA9PSAwKQotCQkJCXNuYXBsZW4gPSA2NTUzNTsKKwkJCWVsc2UgeworCQkJCWlmIChzbmFwbGVuID09IDApCisJCQkJCXNuYXBsZW4gPSBNQVhJTVVNX1NOQVBMRU47CisJCQkJZWxzZQorCQkJCQlzbmFwbGVuID0gKGludClsb25nX3NuYXBsZW47CisJCQl9CiAJCQlicmVhazsKIAkJfQogCmRpZmYgLS1naXQgYS90ZXN0cHJvZ3MvZmluZGFsbGRldnN0ZXN0LXBlcmYuYyBiL3Rlc3Rwcm9ncy9maW5kYWxsZGV2c3Rlc3QtcGVyZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwODc1NjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cHJvZ3MvZmluZGFsbGRldnN0ZXN0LXBlcmYuYwpAQCAtMCwwICsxLDEwMCBAQAorI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgX1dJTjMyCisgICNpbmNsdWRlIDx3aW5zb2NrMi5oPgorICAjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyAgI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbHNlCisgICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAgI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxwY2FwLmg+CisKKyNpbmNsdWRlICJ2YXJhdHRycy5oIgorI2luY2x1ZGUgInBjYXAvZnVuY2F0dHJzLmgiCisKKyNpZmRlZiBfV0lOMzIKKyNpbmNsdWRlICJwb3J0YWJpbGl0eS5oIgorI2VuZGlmCisKK2ludCBtYWluKGludCBhcmdjIF9VXywgY2hhciAqKmFyZ3YgX1VfKQoreworICBwY2FwX2lmX3QgKmFsbGRldnM7CisgIGludCBleGl0X3N0YXR1cyA9IDA7CisgIGNoYXIgZXJyYnVmW1BDQVBfRVJSQlVGX1NJWkUrMV07CisjaWZkZWYgX1dJTjMyCisgIEZJTEVUSU1FIHN0YXJ0X2t0aW1lLCBzdGFydF91dGltZSwgZW5kX2t0aW1lLCBlbmRfdXRpbWU7CisgIEZJTEVUSU1FIGR1bW15MSwgZHVtbXkyOworICBVTEFSR0VfSU5URUdFUiBzdGFydF9rdGlja3MsIGVuZF9rdGlja3MsIHN0YXJ0X3V0aWNrcywgZW5kX3V0aWNrczsKKyAgVUxPTkdMT05HIGt0aW1lLCB1dGltZSwgdG90dGltZTsKKyNlbHNlCisgIHN0cnVjdCBydXNhZ2Ugc3RhcnRfcnVzYWdlLCBlbmRfcnVzYWdlOworICBzdHJ1Y3QgdGltZXZhbCBrdGltZSwgdXRpbWUsIHRvdHRpbWU7CisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorICBpZiAoIUdldFByb2Nlc3NUaW1lcyhHZXRDdXJyZW50UHJvY2VzcygpLCAmZHVtbXkxLCAmZHVtbXkyLAorICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnRfa3RpbWUsICZzdGFydF91dGltZSkpCisgIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkdldFByb2Nlc3NUaW1lcygpIGZhaWxzIGF0IHN0YXJ0XG4iKTsKKyAgICBleGl0KDEpOworICB9CisgIHN0YXJ0X2t0aWNrcy5Mb3dQYXJ0ID0gc3RhcnRfa3RpbWUuZHdMb3dEYXRlVGltZTsKKyAgc3RhcnRfa3RpY2tzLkhpZ2hQYXJ0ID0gc3RhcnRfa3RpbWUuZHdIaWdoRGF0ZVRpbWU7CisgIHN0YXJ0X3V0aWNrcy5Mb3dQYXJ0ID0gc3RhcnRfdXRpbWUuZHdMb3dEYXRlVGltZTsKKyAgc3RhcnRfdXRpY2tzLkhpZ2hQYXJ0ID0gc3RhcnRfdXRpbWUuZHdIaWdoRGF0ZVRpbWU7CisjZWxzZQorICBpZiAoZ2V0cnVzYWdlKFJVU0FHRV9TRUxGLCAmc3RhcnRfcnVzYWdlKSA9PSAtMSkgeworICAgIGZwcmludGYoc3RkZXJyLCAiZ2V0cnVzYWdlKCkgZmFpbHMgYXQgc3RhcnRcbiIpOworICAgIGV4aXQoMSk7CisgIH0KKyNlbmRpZgorICBmb3IgKGludCBpID0gMDsgaSA8IDUwMDsgaSsrKQorICB7CisgICAgaWYgKHBjYXBfZmluZGFsbGRldnMoJmFsbGRldnMsIGVycmJ1ZikgPT0gLTEpCisgICAgeworICAgICAgZnByaW50ZihzdGRlcnIsIkVycm9yIGluIHBjYXBfZmluZGFsbGRldnM6ICVzXG4iLGVycmJ1Zik7CisgICAgICBleGl0KDEpOworICAgIH0KKyAgICBwY2FwX2ZyZWVhbGxkZXZzKGFsbGRldnMpOworICB9CisKKyNpZmRlZiBfV0lOMzIKKyAgaWYgKCFHZXRQcm9jZXNzVGltZXMoR2V0Q3VycmVudFByb2Nlc3MoKSwgJmR1bW15MSwgJmR1bW15MiwKKyAgICAgICAgICAgICAgICAgICAgICAgJmVuZF9rdGltZSwgJmVuZF91dGltZSkpCisgIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkdldFByb2Nlc3NUaW1lcygpIGZhaWxzIGF0IGVuZFxuIik7CisgICAgZXhpdCgxKTsKKyAgfQorICBlbmRfa3RpY2tzLkxvd1BhcnQgPSBlbmRfa3RpbWUuZHdMb3dEYXRlVGltZTsKKyAgZW5kX2t0aWNrcy5IaWdoUGFydCA9IGVuZF9rdGltZS5kd0hpZ2hEYXRlVGltZTsKKyAgZW5kX3V0aWNrcy5Mb3dQYXJ0ID0gZW5kX3V0aW1lLmR3TG93RGF0ZVRpbWU7CisgIGVuZF91dGlja3MuSGlnaFBhcnQgPSBlbmRfdXRpbWUuZHdIaWdoRGF0ZVRpbWU7CisgIGt0aW1lID0gZW5kX2t0aWNrcy5RdWFkUGFydCAtIHN0YXJ0X2t0aWNrcy5RdWFkUGFydDsKKyAgdXRpbWUgPSBlbmRfdXRpY2tzLlF1YWRQYXJ0IC0gc3RhcnRfdXRpY2tzLlF1YWRQYXJ0OworICB0b3R0aW1lID0ga3RpbWUgKyB1dGltZTsKKyAgcHJpbnRmKCJUb3RhbCBDUFUgc2Vjczoga2VybmVsICVnLCB1c2VyICVnLCB0b3RhbCAlZ1xuIiwKKyAgICAgICgoZG91YmxlKWt0aW1lKSAvIDEwMDAwMDAwLjAsCisgICAgICAoKGRvdWJsZSl1dGltZSkgLyAxMDAwMDAwMC4wLAorICAgICAgKChkb3VibGUpdG90dGltZSkgLyAxMDAwMDAwMC4wKTsKKyNlbHNlCisgIGlmIChnZXRydXNhZ2UoUlVTQUdFX1NFTEYsICZlbmRfcnVzYWdlKSA9PSAtMSkgeworICAgIGZwcmludGYoc3RkZXJyLCAiZ2V0cnVzYWdlKCkgZmFpbHMgYXQgZW5kXG4iKTsKKyAgICBleGl0KDEpOworICB9CisgIHRpbWVyc3ViKCZlbmRfcnVzYWdlLnJ1X3N0aW1lLCAmc3RhcnRfcnVzYWdlLnJ1X3N0aW1lLCAma3RpbWUpOworICB0aW1lcnN1YigmZW5kX3J1c2FnZS5ydV91dGltZSwgJnN0YXJ0X3J1c2FnZS5ydV91dGltZSwgJnV0aW1lKTsKKyAgdGltZXJhZGQoJmt0aW1lLCAmdXRpbWUsICZ0b3R0aW1lKTsKKyAgcHJpbnRmKCJUb3RhbCBDUFUgc2Vjczoga2VybmVsICVnLCB1c2VyICVnLCB0b3RhbCAlZ1xuIiwKKyAgICAgIChkb3VibGUpa3RpbWUudHZfc2VjICsgKChkb3VibGUpa3RpbWUudHZfdXNlYyAvIDEwMDAwMDAuMCksCisgICAgICAoZG91YmxlKXV0aW1lLnR2X3NlYyArICgoZG91YmxlKXV0aW1lLnR2X3VzZWMgLyAxMDAwMDAwLjApLAorICAgICAgKGRvdWJsZSl0b3R0aW1lLnR2X3NlYyArICgoZG91YmxlKXRvdHRpbWUudHZfdXNlYyAvIDEwMDAwMDAuMCkpOworI2VuZGlmCisgIGV4aXQoZXhpdF9zdGF0dXMpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHByb2dzL2ZpbmRhbGxkZXZzdGVzdC5jIGIvdGVzdHByb2dzL2ZpbmRhbGxkZXZzdGVzdC5jCmluZGV4IGU1MzVlMjUuLjA5MmZkMDQgMTAwNjQ0Ci0tLSBhL3Rlc3Rwcm9ncy9maW5kYWxsZGV2c3Rlc3QuYworKysgYi90ZXN0cHJvZ3MvZmluZGFsbGRldnN0ZXN0LmMKQEAgLTE5LDYgKzE5LDcgQEAKIAogI2luY2x1ZGUgPHBjYXAuaD4KIAorI2luY2x1ZGUgInZhcmF0dHJzLmgiCiAjaW5jbHVkZSAicGNhcC9mdW5jYXR0cnMuaCIKIAogc3RhdGljIGludCBpZnByaW50KHBjYXBfaWZfdCAqZCk7CkBAIC05NCw3ICs5NSwxMSBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBFTkFCTEVfUkVNT1RFCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisjZWxzZQoraW50IG1haW4oaW50IGFyZ2MgX1VfLCBjaGFyICoqYXJndiBfVV8pCisjZW5kaWYKIHsKICAgcGNhcF9pZl90ICphbGxkZXZzOwogICBwY2FwX2lmX3QgKmQ7CkBAIC0xNTIsOCArMTU3LDI0IEBACiAgIHsKICAgICBpZiAocGNhcF9sb29rdXBuZXQoYWxsZGV2cy0+bmFtZSwgJm5ldCwgJm1hc2ssIGVycmJ1ZikgPCAwKQogICAgIHsKLSAgICAgIGZwcmludGYoc3RkZXJyLCJFcnJvciBpbiBwY2FwX2xvb2t1cG5ldDogJXNcbiIsZXJyYnVmKTsKLSAgICAgIGV4aXRfc3RhdHVzID0gMjsKKyAgICAgIC8qCisgICAgICAgKiBYWFggLSB0aGlzIGRvZXNuJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiAiYSByZWFsIGVycm9yCisgICAgICAgKiBvY2N1cnJlZCIgYW5kICJ0aGlzIGludGVyZmFjZSBkb2Vzbid0ICpoYXZlKiBhbiBJUHY0CisgICAgICAgKiBhZGRyZXNzIi4gIFRoZSBsYXR0ZXIgc2hvdWxkbid0IGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuCisgICAgICAgKgorICAgICAgICogV2UgbG9vayBmb3IgdGhlIGludGVyZmFjZSBuYW1lLCBmb2xsb3dlZCBieSBhIGNvbG9uIGFuZAorICAgICAgICogYSBzcGFjZSwgYW5kLCBpZiB3ZSBmaW5kIGl0LHcgZSBzZWUgaWYgd2hhdCBmb2xsb3dzIGl0CisgICAgICAgKiBpcyAibm8gSVB2NCBhZGRyZXNzIGFzc2lnbmVkIi4KKyAgICAgICAqLworICAgICAgc2l6ZV90IGRldm5hbWVsZW4gPSBzdHJsZW4oYWxsZGV2cy0+bmFtZSk7CisgICAgICBpZiAoc3RybmNtcChlcnJidWYsIGFsbGRldnMtPm5hbWUsIGRldm5hbWVsZW4pID09IDAgJiYKKyAgICAgICAgICBzdHJuY21wKGVycmJ1ZiArIGRldm5hbWVsZW4sICI6ICIsIDIpID09IDAgJiYKKyAgICAgICAgICBzdHJjbXAoZXJyYnVmICsgZGV2bmFtZWxlbiArIDIsICJubyBJUHY0IGFkZHJlc3MgYXNzaWduZWQiKSA9PSAwKQorICAgICAgICBwcmludGYoIlByZWZlcnJlZCBkZXZpY2UgaXMgbm90IG9uIGFuIElQdjQgbmV0d29ya1xuIik7CisgICAgICBlbHNlIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIkVycm9yIGluIHBjYXBfbG9va3VwbmV0OiAlc1xuIixlcnJidWYpOworICAgICAgICBleGl0X3N0YXR1cyA9IDI7CisgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7CmRpZmYgLS1naXQgYS90ZXN0cHJvZ3MvZnV6ei9DTWFrZUxpc3RzLnR4dCBiL3Rlc3Rwcm9ncy9mdXp6L0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MjUwY2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cHJvZ3MvZnV6ei9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDQzIEBACithZGRfZXhlY3V0YWJsZShmdXp6X3BjYXAgb25lZmlsZS5jIGZ1enpfcGNhcC5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGZ1enpfcGNhcCAke0FSR059ICR7TElCUkFSWV9OQU1FfV9zdGF0aWMgJHtQQ0FQX0xJTktfTElCUkFSSUVTfSkKK2lmKE5PVCAiJHtTQU5JVElaRVJfRkxBR1N9IiBTVFJFUVVBTCAiIikKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGZ1enpfcGNhcCBQUk9QRVJUSUVTCisgICAgICBMSU5LX0ZMQUdTICIke1NBTklUSVpFUl9GTEFHU30iKQorZW5kaWYoKQorCithZGRfZXhlY3V0YWJsZShmdXp6X2ZpbHRlciBvbmVmaWxlLmMgZnV6el9maWx0ZXIuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhmdXp6X2ZpbHRlciAke0FSR059ICR7TElCUkFSWV9OQU1FfV9zdGF0aWMgJHtQQ0FQX0xJTktfTElCUkFSSUVTfSkKK2lmKE5PVCAiJHtTQU5JVElaRVJfRkxBR1N9IiBTVFJFUVVBTCAiIikKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGZ1enpfZmlsdGVyIFBST1BFUlRJRVMKKyAgICAgIExJTktfRkxBR1MgIiR7U0FOSVRJWkVSX0ZMQUdTfSIpCitlbmRpZigpCisKK2FkZF9leGVjdXRhYmxlKGZ1enpfYm90aCBvbmVmaWxlLmMgZnV6el9ib3RoLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoZnV6el9ib3RoICR7QVJHTn0gJHtMSUJSQVJZX05BTUV9X3N0YXRpYyAke1BDQVBfTElOS19MSUJSQVJJRVN9KQoraWYoTk9UICIke1NBTklUSVpFUl9GTEFHU30iIFNUUkVRVUFMICIiKQorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoZnV6el9ib3RoIFBST1BFUlRJRVMKKyAgICAgIExJTktfRkxBR1MgIiR7U0FOSVRJWkVSX0ZMQUdTfSIpCitlbmRpZigpCisKK2lmKEVOQUJMRV9SRU1PVEUgQU5EICIkRU5We0NGTEFHU30iIE1BVENIRVMgIi1ERlVaWklOR19CVUlMRF9NT0RFX1VOU0FGRV9GT1JfUFJPRFVDVElPTiIpCithZGRfZXhlY3V0YWJsZShmdXp6X3JjbGllbnQgb25lZmlsZS5jIGZ1enpfcmNsaWVudC5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGZ1enpfcmNsaWVudCAke0FSR059ICR7TElCUkFSWV9OQU1FfV9zdGF0aWMgJHtQQ0FQX0xJTktfTElCUkFSSUVTfSkKK2lmKE5PVCAiJHtTQU5JVElaRVJfRkxBR1N9IiBTVFJFUVVBTCAiIikKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGZ1enpfcmNsaWVudCBQUk9QRVJUSUVTCisgICAgICBMSU5LX0ZMQUdTICIke1NBTklUSVpFUl9GTEFHU30iKQorZW5kaWYoKQorCithZGRfZXhlY3V0YWJsZShmdXp6X3JzZXJ2ZXIgb25lZmlsZS5jIGZ1enpfcnNlcnZlci5jIC4uLy4uL3JwY2FwZC9kYWVtb24uYykKK2NoZWNrX2Z1bmN0aW9uX2V4aXN0cyhjcnlwdCBIQVZFX0NSWVBUX0lOX1NZU1RFTV9MSUJSQVJJRVMpCitpZihIQVZFX0NSWVBUX0lOX1NZU1RFTV9MSUJSQVJJRVMpCisgICAgc2V0KEhBVkVfQ1JZUFQgVFJVRSkKK2Vsc2UoSEFWRV9DUllQVF9JTl9TWVNURU1fTElCUkFSSUVTKQorICAgICBzZXQoUENBUF9MSU5LX0xJQlJBUklFUyAke1BDQVBfTElOS19MSUJSQVJJRVN9IGNyeXB0KQorZW5kaWYoSEFWRV9DUllQVF9JTl9TWVNURU1fTElCUkFSSUVTKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGZ1enpfcnNlcnZlciAke0FSR059ICR7TElCUkFSWV9OQU1FfV9zdGF0aWMgJHtQQ0FQX0xJTktfTElCUkFSSUVTfSkKKworaWYoTk9UICIke1NBTklUSVpFUl9GTEFHU30iIFNUUkVRVUFMICIiKQorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoZnV6el9yc2VydmVyIFBST1BFUlRJRVMKKyAgICAgIExJTktfRkxBR1MgIiR7U0FOSVRJWkVSX0ZMQUdTfSIpCitlbmRpZigpCitlbmRpZihFTkFCTEVfUkVNT1RFIEFORCAiJEVOVntDRkxBR1N9IiBNQVRDSEVTICItREZVWlpJTkdfQlVJTERfTU9ERV9VTlNBRkVfRk9SX1BST0RVQ1RJT04iKQpkaWZmIC0tZ2l0IGEvdGVzdHByb2dzL2Z1enovZnV6el9ib3RoLmMgYi90ZXN0cHJvZ3MvZnV6ei9mdXp6X2JvdGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWUzZDQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHByb2dzL2Z1enovZnV6el9ib3RoLmMKQEAgLTAsMCArMSwxMDEgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPHBjYXAvcGNhcC5oPgorCitGSUxFICogb3V0ZmlsZSA9IE5VTEw7CisKK3N0YXRpYyBpbnQgYnVmZmVyVG9GaWxlKGNvbnN0IGNoYXIgKiBuYW1lLCBjb25zdCB1aW50OF90ICpEYXRhLCBzaXplX3QgU2l6ZSkgeworICAgIEZJTEUgKiBmZDsKKyAgICBpZiAocmVtb3ZlKG5hbWUpICE9IDApIHsKKyAgICAgICAgaWYgKGVycm5vICE9IEVOT0VOVCkgeworICAgICAgICAgICAgcHJpbnRmKCJmYWlsZWQgcmVtb3ZlLCBlcnJubz0lZFxuIiwgZXJybm8pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIGZkID0gZm9wZW4obmFtZSwgIndiIik7CisgICAgaWYgKGZkID09IE5VTEwpIHsKKyAgICAgICAgcHJpbnRmKCJmYWlsZWQgb3BlbiwgZXJybm89JWRcbiIsIGVycm5vKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKyAgICBpZiAoZndyaXRlIChEYXRhLCAxLCBTaXplLCBmZCkgIT0gU2l6ZSkgeworICAgICAgICBmY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gLTM7CisgICAgfQorICAgIGZjbG9zZShmZCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgZnV6el9vcGVuRmlsZShjb25zdCBjaGFyICogbmFtZSkgeworICAgIGlmIChvdXRmaWxlICE9IE5VTEwpIHsKKyAgICAgICAgZmNsb3NlKG91dGZpbGUpOworICAgIH0KKyAgICBvdXRmaWxlID0gZm9wZW4obmFtZSwgInciKTsKK30KKworaW50IExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoY29uc3QgdWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUpIHsKKyAgICBwY2FwX3QgKiBwa3RzOworICAgIGNoYXIgZXJyYnVmW1BDQVBfRVJSQlVGX1NJWkVdOworICAgIGNvbnN0IHVfY2hhciAqcGt0OworICAgIHN0cnVjdCBwY2FwX3BrdGhkciAqaGVhZGVyOworICAgIGludCByOworICAgIHNpemVfdCBmaWx0ZXJTaXplOworICAgIGNoYXIgKiBmaWx0ZXI7CisgICAgc3RydWN0IGJwZl9wcm9ncmFtIGJwZjsKKworCisgICAgLy9pbml0aWFsaXplIG91dHB1dCBmaWxlCisgICAgaWYgKG91dGZpbGUgPT0gTlVMTCkgeworICAgICAgICBvdXRmaWxlID0gZm9wZW4oIi9kZXYvbnVsbCIsICJ3Iik7CisgICAgICAgIGlmIChvdXRmaWxlID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKFNpemUgPCAxKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBmaWx0ZXJTaXplID0gRGF0YVswXTsKKyAgICBpZiAoU2l6ZSA8IDErZmlsdGVyU2l6ZSB8fCBmaWx0ZXJTaXplID09IDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy9yZXdyaXRlIGJ1ZmZlciB0byBhIGZpbGUgYXMgbGlicGNhcCBkb2VzIG5vdCBoYXZlIGJ1ZmZlciBpbnB1dHMKKyAgICBpZiAoYnVmZmVyVG9GaWxlKCIvdG1wL2Z1enoucGNhcCIsIERhdGErMStmaWx0ZXJTaXplLCBTaXplLSgxK2ZpbHRlclNpemUpKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy9pbml0aWFsaXplIHN0cnVjdHVyZQorICAgIHBrdHMgPSBwY2FwX29wZW5fb2ZmbGluZSgiL3RtcC9mdXp6LnBjYXAiLCBlcnJidWYpOworICAgIGlmIChwa3RzID09IE5VTEwpIHsKKyAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiQ291bGRuJ3Qgb3BlbiBwY2FwIGZpbGUgJXNcbiIsIGVycmJ1Zik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGZpbHRlciA9IG1hbGxvYyhmaWx0ZXJTaXplKTsKKyAgICBtZW1jcHkoZmlsdGVyLCBEYXRhKzEsIGZpbHRlclNpemUpOworICAgIC8vbnVsbCB0ZXJtaW5hdGUgc3RyaW5nCisgICAgZmlsdGVyW2ZpbHRlclNpemUtMV0gPSAwOworCisgICAgaWYgKHBjYXBfY29tcGlsZShwa3RzLCAmYnBmLCBmaWx0ZXIsIDEsIFBDQVBfTkVUTUFTS19VTktOT1dOKSA9PSAwKSB7CisgICAgICAgIC8vbG9vcCBvdmVyIHBhY2tldHMKKyAgICAgICAgciA9IHBjYXBfbmV4dF9leChwa3RzLCAmaGVhZGVyLCAmcGt0KTsKKyAgICAgICAgd2hpbGUgKHIgPiAwKSB7CisgICAgICAgICAgICAvL2NoZWNrcyBmaWx0ZXIKKyAgICAgICAgICAgIGZwcmludGYob3V0ZmlsZSwgInBhY2tldCBsZW5ndGg9JWQvJWQgZmlsdGVyPSVkXG4iLGhlYWRlci0+Y2FwbGVuLCBoZWFkZXItPmxlbiwgcGNhcF9vZmZsaW5lX2ZpbHRlcigmYnBmLCBoZWFkZXIsIHBrdCkpOworICAgICAgICAgICAgciA9IHBjYXBfbmV4dF9leChwa3RzLCAmaGVhZGVyLCAmcGt0KTsKKyAgICAgICAgfQorICAgICAgICAvL2Nsb3NlIHN0cnVjdHVyZQorICAgICAgICBwY2FwX2Nsb3NlKHBrdHMpOworICAgICAgICBwY2FwX2ZyZWVjb2RlKCZicGYpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcGNhcF9jbG9zZShwa3RzKTsKKyAgICB9CisgICAgZnJlZShmaWx0ZXIpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0cHJvZ3MvZnV6ei9mdXp6X2JvdGgub3B0aW9ucyBiL3Rlc3Rwcm9ncy9mdXp6L2Z1enpfYm90aC5vcHRpb25zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MjRiMTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cHJvZ3MvZnV6ei9mdXp6X2JvdGgub3B0aW9ucwpAQCAtMCwwICsxLDIgQEAKK1tsaWJmdXp6ZXJdCittYXhfbGVuID0gNjU1MzUKZGlmZiAtLWdpdCBhL3Rlc3Rwcm9ncy9mdXp6L2Z1enpfZmlsdGVyLmMgYi90ZXN0cHJvZ3MvZnV6ei9mdXp6X2ZpbHRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMzUwNjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cHJvZ3MvZnV6ei9mdXp6X2ZpbHRlci5jCkBAIC0wLDAgKzEsNDMgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8cGNhcC9wY2FwLmg+CisKK3ZvaWQgZnV6el9vcGVuRmlsZShjb25zdCBjaGFyICogbmFtZSl7CisgICAgLy9kbyBub3RoaW5nCit9CisKK2ludCBMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNvbnN0IHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplKSB7CisgICAgcGNhcF90ICogcGt0czsKKyAgICBzdHJ1Y3QgYnBmX3Byb2dyYW0gYnBmOworICAgIGNoYXIgKiBmaWx0ZXI7CisKKyAgICAvL3dlIG5lZWQgYXQgbGVhc3QgMSBieXRlIGZvciBsaW5rdHlwZQorICAgIGlmIChTaXplIDwgMSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvL2luaXRpYWxpemUgc3RydWN0dXJlIHNuYXBsZW4gPSA2NTUzNQorICAgIHBrdHMgPSBwY2FwX29wZW5fZGVhZChEYXRhW1NpemUtMV0sIDB4RkZGRik7CisgICAgaWYgKHBrdHMgPT0gTlVMTCkgeworICAgICAgICBwcmludGYoInBjYXBfb3Blbl9kZWFkIGZhaWxlZFxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBmaWx0ZXIgPSBtYWxsb2MoU2l6ZSk7CisgICAgbWVtY3B5KGZpbHRlciwgRGF0YSwgU2l6ZSk7CisgICAgLy9udWxsIHRlcm1pbmF0ZSBzdHJpbmcKKyAgICBmaWx0ZXJbU2l6ZS0xXSA9IDA7CisKKyAgICBpZiAocGNhcF9jb21waWxlKHBrdHMsICZicGYsIGZpbHRlciwgMSwgUENBUF9ORVRNQVNLX1VOS05PV04pID09IDApIHsKKyAgICAgICAgcGNhcF9zZXRmaWx0ZXIocGt0cywgJmJwZik7CisgICAgICAgIHBjYXBfY2xvc2UocGt0cyk7CisgICAgICAgIHBjYXBfZnJlZWNvZGUoJmJwZik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBwY2FwX2Nsb3NlKHBrdHMpOworICAgIH0KKyAgICBmcmVlKGZpbHRlcik7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3Rwcm9ncy9mdXp6L2Z1enpfZmlsdGVyLm9wdGlvbnMgYi90ZXN0cHJvZ3MvZnV6ei9mdXp6X2ZpbHRlci5vcHRpb25zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZGE5M2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cHJvZ3MvZnV6ei9mdXp6X2ZpbHRlci5vcHRpb25zCkBAIC0wLDAgKzEsMiBAQAorW2xpYmZ1enplcl0KK21heF9sZW4gPSA0MDk2CmRpZmYgLS1naXQgYS90ZXN0cHJvZ3MvZnV6ei9mdXp6X3BjYXAuYyBiL3Rlc3Rwcm9ncy9mdXp6L2Z1enpfcGNhcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYTUzMTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cHJvZ3MvZnV6ei9mdXp6X3BjYXAuYwpAQCAtMCwwICsxLDgwIEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxwY2FwL3BjYXAuaD4KKworRklMRSAqIG91dGZpbGUgPSBOVUxMOworCitzdGF0aWMgaW50IGJ1ZmZlclRvRmlsZShjb25zdCBjaGFyICogbmFtZSwgY29uc3QgdWludDhfdCAqRGF0YSwgc2l6ZV90IFNpemUpIHsKKyAgICBGSUxFICogZmQ7CisgICAgaWYgKHJlbW92ZShuYW1lKSAhPSAwKSB7CisgICAgICAgIGlmIChlcnJubyAhPSBFTk9FTlQpIHsKKyAgICAgICAgICAgIHByaW50ZigiZmFpbGVkIHJlbW92ZSwgZXJybm89JWRcbiIsIGVycm5vKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmZCA9IGZvcGVuKG5hbWUsICJ3YiIpOworICAgIGlmIChmZCA9PSBOVUxMKSB7CisgICAgICAgIHByaW50ZigiZmFpbGVkIG9wZW4sIGVycm5vPSVkXG4iLCBlcnJubyk7CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisgICAgaWYgKGZ3cml0ZSAoRGF0YSwgMSwgU2l6ZSwgZmQpICE9IFNpemUpIHsKKyAgICAgICAgZmNsb3NlKGZkKTsKKyAgICAgICAgcmV0dXJuIC0zOworICAgIH0KKyAgICBmY2xvc2UoZmQpOworICAgIHJldHVybiAwOworfQorCit2b2lkIGZ1enpfb3BlbkZpbGUoY29uc3QgY2hhciAqIG5hbWUpIHsKKyAgICBpZiAob3V0ZmlsZSAhPSBOVUxMKSB7CisgICAgICAgIGZjbG9zZShvdXRmaWxlKTsKKyAgICB9CisgICAgb3V0ZmlsZSA9IGZvcGVuKG5hbWUsICJ3Iik7Cit9CisKK2ludCBMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNvbnN0IHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplKSB7CisgICAgcGNhcF90ICogcGt0czsKKyAgICBjaGFyIGVycmJ1ZltQQ0FQX0VSUkJVRl9TSVpFXTsKKyAgICBjb25zdCB1X2NoYXIgKnBrdDsKKyAgICBzdHJ1Y3QgcGNhcF9wa3RoZHIgKmhlYWRlcjsKKyAgICBzdHJ1Y3QgcGNhcF9zdGF0IHN0YXRzOworICAgIGludCByOworCisgICAgLy9pbml0aWFsaXplIG91dHB1dCBmaWxlCisgICAgaWYgKG91dGZpbGUgPT0gTlVMTCkgeworICAgICAgICBvdXRmaWxlID0gZm9wZW4oIi9kZXYvbnVsbCIsICJ3Iik7CisgICAgICAgIGlmIChvdXRmaWxlID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgLy9yZXdyaXRlIGJ1ZmZlciB0byBhIGZpbGUgYXMgbGlicGNhcCBkb2VzIG5vdCBoYXZlIGJ1ZmZlciBpbnB1dHMKKyAgICBpZiAoYnVmZmVyVG9GaWxlKCIvdG1wL2Z1enoucGNhcCIsIERhdGEsIFNpemUpIDwgMCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvL2luaXRpYWxpemUgc3RydWN0dXJlCisgICAgcGt0cyA9IHBjYXBfb3Blbl9vZmZsaW5lKCIvdG1wL2Z1enoucGNhcCIsIGVycmJ1Zik7CisgICAgaWYgKHBrdHMgPT0gTlVMTCkgeworICAgICAgICBmcHJpbnRmKG91dGZpbGUsICJDb3VsZG4ndCBvcGVuIHBjYXAgZmlsZSAlc1xuIiwgZXJyYnVmKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy9sb29wIG92ZXIgcGFja2V0cworICAgIHIgPSBwY2FwX25leHRfZXgocGt0cywgJmhlYWRlciwgJnBrdCk7CisgICAgd2hpbGUgKHIgPiAwKSB7CisgICAgICAgIC8vVE9ETyBwY2FwX29mZmxpbmVfZmlsdGVyCisgICAgICAgIGZwcmludGYob3V0ZmlsZSwgInBhY2tldCBsZW5ndGg9JWQvJWRcbiIsaGVhZGVyLT5jYXBsZW4sIGhlYWRlci0+bGVuKTsKKyAgICAgICAgciA9IHBjYXBfbmV4dF9leChwa3RzLCAmaGVhZGVyLCAmcGt0KTsKKyAgICB9CisgICAgaWYgKHBjYXBfc3RhdHMocGt0cywgJnN0YXRzKSA9PSAwKSB7CisgICAgICAgIGZwcmludGYob3V0ZmlsZSwgIm51bWJlciBvZiBwYWNrZXRzPSVkXG4iLCBzdGF0cy5wc19yZWN2KTsKKyAgICB9CisgICAgLy9jbG9zZSBzdHJ1Y3R1cmUKKyAgICBwY2FwX2Nsb3NlKHBrdHMpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0cHJvZ3MvZnV6ei9mdXp6X3BjYXAub3B0aW9ucyBiL3Rlc3Rwcm9ncy9mdXp6L2Z1enpfcGNhcC5vcHRpb25zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MjRiMTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cHJvZ3MvZnV6ei9mdXp6X3BjYXAub3B0aW9ucwpAQCAtMCwwICsxLDIgQEAKK1tsaWJmdXp6ZXJdCittYXhfbGVuID0gNjU1MzUKZGlmZiAtLWdpdCBhL3Rlc3Rwcm9ncy9mdXp6L2Z1enpfcmNsaWVudC5jIGIvdGVzdHByb2dzL2Z1enovZnV6el9yY2xpZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVhNmE5MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3Rwcm9ncy9mdXp6L2Z1enpfcmNsaWVudC5jCkBAIC0wLDAgKzEsNTYgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgPHBjYXAvcGNhcC5oPgorCitGSUxFICogb3V0ZmlsZSA9IE5VTEw7CitzdHJ1Y3QgcGNhcF9ybXRhdXRoIGF1dGg7CisKK3ZvaWQgZnV6el9vcGVuRmlsZShjb25zdCBjaGFyICogbmFtZSkgeworICAgIGlmIChvdXRmaWxlICE9IE5VTEwpIHsKKyAgICAgICAgZmNsb3NlKG91dGZpbGUpOworICAgIH0KKyAgICBvdXRmaWxlID0gZm9wZW4obmFtZSwgInciKTsKKyAgICBhdXRoLnR5cGUgPSBSUENBUF9STVRBVVRIX1BXRDsKKyAgICBhdXRoLnVzZXJuYW1lID0gInVzZXIiOworICAgIGF1dGgucGFzc3dvcmQgPSAicGFzcyI7Cit9CisKK3ZvaWQgc29ja19pbml0ZnV6eihjb25zdCB1aW50OF90ICpEYXRhLCBzaXplX3QgU2l6ZSk7CitpbnQgTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCB1aW50OF90ICpEYXRhLCBzaXplX3QgU2l6ZSkgeworICAgIHBjYXBfdCAqIHBrdHM7CisgICAgY2hhciBlcnJidWZbUENBUF9FUlJCVUZfU0laRV07CisgICAgY29uc3QgdV9jaGFyICpwa3Q7CisgICAgc3RydWN0IHBjYXBfcGt0aGRyICpoZWFkZXI7CisgICAgc3RydWN0IHBjYXBfc3RhdCBzdGF0czsKKyAgICBpbnQgcjsKKworICAgIC8vaW5pdGlhbGl6YXRpb24KKyAgICBpZiAob3V0ZmlsZSA9PSBOVUxMKSB7CisgICAgICAgIGZ1enpfb3BlbkZpbGUoIi9kZXYvbnVsbCIpOworICAgIH0KKworICAgIHNvY2tfaW5pdGZ1enooRGF0YSwgU2l6ZSk7CisgICAgLy9pbml0aWFsaXplIHN0cnVjdHVyZQorICAgIHBrdHMgPSBwY2FwX29wZW4oInJwY2FwOi8vMTI3LjAuMC4xL2Z1enoucGNhcCIsIDAsIDAsIDEwMDAsICZhdXRoLCBlcnJidWYpOworICAgIGlmIChwa3RzID09IE5VTEwpIHsKKyAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiQ291bGRuJ3Qgb3BlbiBwY2FwIGZpbGUgJXNcbiIsIGVycmJ1Zik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vbG9vcCBvdmVyIHBhY2tldHMKKyAgICByID0gcGNhcF9uZXh0X2V4KHBrdHMsICZoZWFkZXIsICZwa3QpOworICAgIHdoaWxlIChyID4gMCkgeworICAgICAgICBmcHJpbnRmKG91dGZpbGUsICJwYWNrZXQgbGVuZ3RoPSVkLyVkXG4iLGhlYWRlci0+Y2FwbGVuLCBoZWFkZXItPmxlbik7CisgICAgICAgIHIgPSBwY2FwX25leHRfZXgocGt0cywgJmhlYWRlciwgJnBrdCk7CisgICAgfQorICAgIGlmIChwY2FwX3N0YXRzKHBrdHMsICZzdGF0cykgPT0gMCkgeworICAgICAgICBmcHJpbnRmKG91dGZpbGUsICJudW1iZXIgb2YgcGFja2V0cz0lZFxuIiwgc3RhdHMucHNfcmVjdik7CisgICAgfQorICAgIC8vY2xvc2Ugc3RydWN0dXJlCisgICAgcGNhcF9jbG9zZShwa3RzKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdHByb2dzL2Z1enovZnV6el9yc2VydmVyLmMgYi90ZXN0cHJvZ3MvZnV6ei9mdXp6X3JzZXJ2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzlhMzczCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHByb2dzL2Z1enovZnV6el9yc2VydmVyLmMKQEAgLTAsMCArMSw1NiBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaW5jbHVkZSA8cGNhcC9wY2FwLmg+CisKK0ZJTEUgKiBvdXRmaWxlID0gTlVMTDsKKwordm9pZCBmdXp6X29wZW5GaWxlKGNvbnN0IGNoYXIgKiBuYW1lKSB7CisgICAgaWYgKG91dGZpbGUgIT0gTlVMTCkgeworICAgICAgICBmY2xvc2Uob3V0ZmlsZSk7CisgICAgfQorICAgIG91dGZpbGUgPSBmb3BlbihuYW1lLCAidyIpOworfQorCit0eXBlZGVmIGVudW0geworICAgIExPR1BSSU9fREVCVUcsCisgICAgTE9HUFJJT19JTkZPLAorICAgIExPR1BSSU9fV0FSTklORywKKyAgICBMT0dQUklPX0VSUk9SCit9IGxvZ19wcmlvcml0eTsKKwordm9pZCBycGNhcGRfbG9nKGxvZ19wcmlvcml0eSBwcmlvcml0eSwgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQoreworICAgIHZhX2xpc3QgYXA7CisKKyAgICB2YV9zdGFydChhcCwgbWVzc2FnZSk7CisgICAgZnByaW50ZihvdXRmaWxlLCAicnBjYXBkWyVkXToiLCBwcmlvcml0eSk7CisgICAgdmZwcmludGYob3V0ZmlsZSwgbWVzc2FnZSwgYXApOworICAgIHB1dGMoJ1xuJywgb3V0ZmlsZSk7CisgICAgdmFfZW5kKGFwKTsKK30KKwordm9pZCBzb2NrX2luaXRmdXp6KGNvbnN0IHVpbnQ4X3QgKkRhdGEsIHNpemVfdCBTaXplKTsKK2ludCBkYWVtb25fc2VydmljZWxvb3AoaW50IHNvY2tjdHJsLCBpbnQgaXNhY3RpdmUsIGNoYXIgKnBhc3NpdmVDbGllbnRzLCBpbnQgbnVsbEF1dGhBbGxvd2VkLCBpbnQgdXNlc19zc2wpOworCitpbnQgTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCB1aW50OF90ICpEYXRhLCBzaXplX3QgU2l6ZSkgeworICAgIGludCBzb2NrOworCisgICAgLy9pbml0aWFsaXphdGlvbgorICAgIGlmIChvdXRmaWxlID09IE5VTEwpIHsKKyAgICAgICAgZnV6el9vcGVuRmlsZSgiL2Rldi9udWxsIik7CisgICAgfQorCisgICAgc29ja19pbml0ZnV6eihEYXRhLCBTaXplKTsKKyAgICBzb2NrID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgICBpZiAoc29jayA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgICAgICBhYm9ydCgpOworICAgIH0KKyAgICAvL2R1bW15IHNvY2tldCwgYWN0aXZlLCBudWxsIGF1dGggYWxsb3dlZCwgbm8gc3NsCisgICAgZGFlbW9uX3NlcnZpY2Vsb29wKHNvY2ssIDEsIG1hbGxvYygwKSwgMSwgMCk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3Rwcm9ncy9mdXp6L29uZWZpbGUuYyBiL3Rlc3Rwcm9ncy9mdXp6L29uZWZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTBhNjNiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHByb2dzL2Z1enovb25lZmlsZS5jCkBAIC0wLDAgKzEsNTQgQEAKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCB1aW50OF90ICpEYXRhLCBzaXplX3QgU2l6ZSk7Cit2b2lkIGZ1enpfb3BlbkZpbGUoY29uc3QgY2hhciAqIG5hbWUpOworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgRklMRSAqIGZwOworICAgIHVpbnQ4X3QgKkRhdGE7CisgICAgc2l6ZV90IFNpemU7CisKKyAgICBpZiAoYXJnYyA9PSAzKSB7CisgICAgICAgIGZ1enpfb3BlbkZpbGUoYXJndlsyXSk7CisgICAgfSBlbHNlIGlmIChhcmdjICE9IDIpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIC8vb3BlbnMgdGhlIGZpbGUsIGdldCBpdHMgc2l6ZSwgYW5kIHJlYWRzIGl0IGludG8gYSBidWZmZXIKKyAgICBmcCA9IGZvcGVuKGFyZ3ZbMV0sICJyYiIpOworICAgIGlmIChmcCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAyOworICAgIH0KKyAgICBpZiAoZnNlZWsoZnAsIDBMLCBTRUVLX0VORCkgIT0gMCkgeworICAgICAgICBmY2xvc2UoZnApOworICAgICAgICByZXR1cm4gMjsKKyAgICB9CisgICAgU2l6ZSA9IGZ0ZWxsKGZwKTsKKyAgICBpZiAoU2l6ZSA9PSAoc2l6ZV90KSAtMSkgeworICAgICAgICBmY2xvc2UoZnApOworICAgICAgICByZXR1cm4gMjsKKyAgICB9CisgICAgaWYgKGZzZWVrKGZwLCAwTCwgU0VFS19TRVQpICE9IDApIHsKKyAgICAgICAgZmNsb3NlKGZwKTsKKyAgICAgICAgcmV0dXJuIDI7CisgICAgfQorICAgIERhdGEgPSBtYWxsb2MoU2l6ZSk7CisgICAgaWYgKERhdGEgPT0gTlVMTCkgeworICAgICAgICBmY2xvc2UoZnApOworICAgICAgICByZXR1cm4gMjsKKyAgICB9CisgICAgaWYgKGZyZWFkKERhdGEsIFNpemUsIDEsIGZwKSAhPSAxKSB7CisgICAgICAgIGZjbG9zZShmcCk7CisgICAgICAgIGZyZWUoRGF0YSk7CisgICAgICAgIHJldHVybiAyOworICAgIH0KKworICAgIC8vbGF1bmNoIGZ1enplcgorICAgIExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoRGF0YSwgU2l6ZSk7CisgICAgZnJlZShEYXRhKTsKKyAgICBmY2xvc2UoZnApOworICAgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS90ZXN0cHJvZ3Mvb3BlbnRlc3QuYyBiL3Rlc3Rwcm9ncy9vcGVudGVzdC5jCmluZGV4IGJhZDM4ZWIuLmE0NDFkZGEgMTAwNjQ0Ci0tLSBhL3Rlc3Rwcm9ncy9vcGVudGVzdC5jCisrKyBiL3Rlc3Rwcm9ncy9vcGVudGVzdC5jCkBAIC00NSw3ICs0NSw3IEBACiAgICNpbmNsdWRlICJwb3J0YWJpbGl0eS5oIgogI2VuZGlmCiAKLSNkZWZpbmUgTUFYSU1VTV9TTkFQTEVOCQk2NTUzNQorI2RlZmluZSBNQVhJTVVNX1NOQVBMRU4JCTI2MjE0NAogCiBzdGF0aWMgY2hhciAqcHJvZ3JhbV9uYW1lOwogCkBAIC04MSw3ICs4MSw3IEBACiAJCXN3aXRjaCAob3ApIHsKIAogCQljYXNlICdpJzoKLQkJCWRldmljZSA9IG9wdGFyZzsKKwkJCWRldmljZSA9IHN0cmR1cChvcHRhcmcpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAnSSc6CkBAIC05NSwxMyArOTUsMTkgQEAKIAogCQljYXNlICdzJzogewogCQkJY2hhciAqZW5kOworCQkJbG9uZyBsb25nX3NuYXBsZW47CiAKLQkJCXNuYXBsZW4gPSBzdHJ0b2wob3B0YXJnLCAmZW5kLCAwKTsKKwkJCWxvbmdfc25hcGxlbiA9IHN0cnRvbChvcHRhcmcsICZlbmQsIDApOwogCQkJaWYgKG9wdGFyZyA9PSBlbmQgfHwgKmVuZCAhPSAnXDAnCi0JCQkgICAgfHwgc25hcGxlbiA8IDAgfHwgc25hcGxlbiA+IE1BWElNVU1fU05BUExFTikKKwkJCSAgICB8fCBsb25nX3NuYXBsZW4gPCAwCisJCQkgICAgfHwgbG9uZ19zbmFwbGVuID4gTUFYSU1VTV9TTkFQTEVOKQogCQkJCWVycm9yKCJpbnZhbGlkIHNuYXBsZW4gJXMiLCBvcHRhcmcpOwotCQkJZWxzZSBpZiAoc25hcGxlbiA9PSAwKQotCQkJCXNuYXBsZW4gPSBNQVhJTVVNX1NOQVBMRU47CisJCQllbHNlIHsKKwkJCQlpZiAoc25hcGxlbiA9PSAwKQorCQkJCQlzbmFwbGVuID0gTUFYSU1VTV9TTkFQTEVOOworCQkJCWVsc2UKKwkJCQkJc25hcGxlbiA9IChpbnQpbG9uZ19zbmFwbGVuOworCQkJfQogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTg2LDYgKzE5Miw3IEBACiAJCWVsc2UKIAkJCXByaW50ZigiJXMgb3BlbmVkIHN1Y2Nlc3NmdWxseVxuIiwgZGV2aWNlKTsKIAl9CisJZnJlZShkZXZpY2UpOwogCXBjYXBfY2xvc2UocGQpOwogCWV4aXQoc3RhdHVzIDwgMCA/IDEgOiAwKTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3Rwcm9ncy9yZWFjdGl2YXRldGVzdC5jIGIvdGVzdHByb2dzL3JlYWN0aXZhdGV0ZXN0LmMKaW5kZXggZDdmM2UzMi4uYTljOTg3YSAxMDA2NDQKLS0tIGEvdGVzdHByb2dzL3JlYWN0aXZhdGV0ZXN0LmMKKysrIGIvdGVzdHByb2dzL3JlYWN0aXZhdGV0ZXN0LmMKQEAgLTUxLDcgKzUxLDYgQEAKIAkJaWYgKHBkID09IE5VTEwpIHsKIAkJCWVycm9yKCJOZWl0aGVyIGxvMCBub3IgbG8gY291bGQgYmUgb3BlbmVkOiAlcyIsCiAJCQkgICAgZWJ1Zik7Ci0JCQlyZXR1cm4gMjsKIAkJfQogCX0KIAlzdGF0dXMgPSBwY2FwX2FjdGl2YXRlKHBkKTsKZGlmZiAtLWdpdCBhL3Rlc3Rwcm9ncy9zZWxwb2xsdGVzdC5jIGIvdGVzdHByb2dzL3NlbHBvbGx0ZXN0LmMKaW5kZXggMzI5MjgxZC4uNTY5YzgyOSAxMDA2NDQKLS0tIGEvdGVzdHByb2dzL3NlbHBvbGx0ZXN0LmMKKysrIGIvdGVzdHByb2dzL3NlbHBvbGx0ZXN0LmMKQEAgLTY5LDEzICs2OSwxMyBAQAogCXJlZ2lzdGVyIGludCBvcDsKIAlicGZfdV9pbnQzMiBsb2NhbG5ldCwgbmV0bWFzazsKIAlyZWdpc3RlciBjaGFyICpjcCwgKmNtZGJ1ZiwgKmRldmljZTsKLQlpbnQgZG9zZWxlY3QsIGRvcG9sbCwgZG90aW1lb3V0LCBkb25vbmJsb2NrOworCWludCBkb3NlbGVjdCwgZG9wb2xsLCBkb3RpbWVvdXQsIGRvbm9uYmxvY2ssIHF1aWV0OwogCWNvbnN0IGNoYXIgKm1lY2hhbmlzbTsKIAlzdHJ1Y3QgYnBmX3Byb2dyYW0gZmNvZGU7CiAJY2hhciBlYnVmW1BDQVBfRVJSQlVGX1NJWkVdOwogCXBjYXBfaWZfdCAqZGV2bGlzdDsKIAlpbnQgc2VsZWN0YWJsZV9mZDsKLQlzdHJ1Y3QgdGltZXZhbCAqcmVxdWlyZWRfdGltZW91dDsKKwljb25zdCBzdHJ1Y3QgdGltZXZhbCAqcmVxdWlyZWRfdGltZW91dDsKIAlpbnQgc3RhdHVzOwogCWludCBwYWNrZXRfY291bnQ7CiAKQEAgLTg1LDEzICs4NSwxNCBAQAogCW1lY2hhbmlzbSA9IE5VTEw7CiAJZG90aW1lb3V0ID0gMDsKIAlkb25vbmJsb2NrID0gMDsKKwlxdWlldCA9IDA7CiAJaWYgKChjcCA9IHN0cnJjaHIoYXJndlswXSwgJy8nKSkgIT0gTlVMTCkKIAkJcHJvZ3JhbV9uYW1lID0gY3AgKyAxOwogCWVsc2UKIAkJcHJvZ3JhbV9uYW1lID0gYXJndlswXTsKIAogCW9wdGVyciA9IDA7Ci0Jd2hpbGUgKChvcCA9IGdldG9wdChhcmdjLCBhcmd2LCAiaTpzcHRuIikpICE9IC0xKSB7CisJd2hpbGUgKChvcCA9IGdldG9wdChhcmdjLCBhcmd2LCAiaTpzcHRucSIpKSAhPSAtMSkgewogCQlzd2l0Y2ggKG9wKSB7CiAKIAkJY2FzZSAnaSc6CkBAIC0xMTYsNiArMTE3LDEwIEBACiAJCQlkb25vbmJsb2NrID0gMTsKIAkJCWJyZWFrOwogCisJCWNhc2UgJ3EnOgorCQkJcXVpZXQgPSAxOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCXVzYWdlKCk7CiAJCQkvKiBOT1RSRUFDSEVEICovCkBAIC0xOTYsNiArMjAxLDcgQEAKIAkJZm9yICg7OykgewogCQkJZmRfc2V0IHNldHJlYWQsIHNldGV4Y2VwdDsKIAkJCXN0cnVjdCB0aW1ldmFsIHNlbHRpbWVvdXQ7CisJCQlzdHJ1Y3QgdGltZXZhbCAqdGltZW91dHA7CiAKIAkJCUZEX1pFUk8oJnNldHJlYWQpOwogCQkJaWYgKHNlbGVjdGFibGVfZmQgIT0gLTEpIHsKQEAgLTIwMyw2ICsyMDksNyBAQAogCQkJCUZEX1pFUk8oJnNldGV4Y2VwdCk7CiAJCQkJRkRfU0VUKHNlbGVjdGFibGVfZmQsICZzZXRleGNlcHQpOwogCQkJfQorCQkJcmVxdWlyZWRfdGltZW91dCA9IHBjYXBfZ2V0X3JlcXVpcmVkX3NlbGVjdF90aW1lb3V0KHBkKTsKIAkJCWlmIChkb3RpbWVvdXQpIHsKIAkJCQlzZWx0aW1lb3V0LnR2X3NlYyA9IDA7CiAJCQkJaWYgKHJlcXVpcmVkX3RpbWVvdXQgIT0gTlVMTCAmJgpAQCAtMjEwLDM3ICsyMTcsMzQgQEAKIAkJCQkJc2VsdGltZW91dC50dl91c2VjID0gcmVxdWlyZWRfdGltZW91dC0+dHZfdXNlYzsKIAkJCQllbHNlCiAJCQkJCXNlbHRpbWVvdXQudHZfdXNlYyA9IDEwMDA7Ci0JCQkJc3RhdHVzID0gc2VsZWN0KHNlbGVjdGFibGVfZmQgKyAxLCAmc2V0cmVhZCwKLQkJCQkgICAgTlVMTCwgJnNldGV4Y2VwdCwgJnNlbHRpbWVvdXQpOworCQkJCXRpbWVvdXRwID0gJnNlbHRpbWVvdXQ7CiAJCQl9IGVsc2UgaWYgKHJlcXVpcmVkX3RpbWVvdXQgIT0gTlVMTCkgewogCQkJCXNlbHRpbWVvdXQgPSAqcmVxdWlyZWRfdGltZW91dDsKLQkJCQlzdGF0dXMgPSBzZWxlY3Qoc2VsZWN0YWJsZV9mZCArIDEsICZzZXRyZWFkLAotCQkJCSAgICBOVUxMLCAmc2V0ZXhjZXB0LCAmc2VsdGltZW91dCk7CisJCQkJdGltZW91dHAgPSAmc2VsdGltZW91dDsKIAkJCX0gZWxzZSB7Ci0JCQkJc3RhdHVzID0gc2VsZWN0KChzZWxlY3RhYmxlX2ZkID09IC0xKSA/Ci0JCQkJICAgIDAgOiBzZWxlY3RhYmxlX2ZkICsgMSwgJnNldHJlYWQsCi0JCQkJICAgIE5VTEwsICZzZXRleGNlcHQsIE5VTEwpOworCQkJCXRpbWVvdXRwID0gTlVMTDsKIAkJCX0KKwkJCXN0YXR1cyA9IHNlbGVjdCgoc2VsZWN0YWJsZV9mZCA9PSAtMSkgPworCQkJICAgIDAgOiBzZWxlY3RhYmxlX2ZkICsgMSwgJnNldHJlYWQsIE5VTEwsICZzZXRleGNlcHQsCisJCQkgICAgdGltZW91dHApOwogCQkJaWYgKHN0YXR1cyA9PSAtMSkgewogCQkJCXByaW50ZigiU2VsZWN0IHJldHVybnMgZXJyb3IgKCVzKVxuIiwKIAkJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKIAkJCX0gZWxzZSB7Ci0JCQkJaWYgKHNlbGVjdGFibGVfZmQgPT0gLTEpIHsKLQkJCQkJaWYgKHN0YXR1cyAhPSAwKQotCQkJCQkJcHJpbnRmKCJTZWxlY3QgcmV0dXJuZWQgYSBkZXNjcmlwdG9yXG4iKTsKLQkJCQl9IGVsc2UgeworCQkJCWlmICghcXVpZXQpIHsKIAkJCQkJaWYgKHN0YXR1cyA9PSAwKQogCQkJCQkJcHJpbnRmKCJTZWxlY3QgdGltZWQgb3V0OiAiKTsKLQkJCQkJZWxzZQorCQkJCQllbHNlewogCQkJCQkJcHJpbnRmKCJTZWxlY3QgcmV0dXJuZWQgYSBkZXNjcmlwdG9yOiAiKTsKLQkJCQkJaWYgKEZEX0lTU0VUKHNlbGVjdGFibGVfZmQsICZzZXRyZWFkKSkKLQkJCQkJCXByaW50ZigicmVhZGFibGUsICIpOwotCQkJCQllbHNlCi0JCQkJCQlwcmludGYoIm5vdCByZWFkYWJsZSwgIik7Ci0JCQkJCWlmIChGRF9JU1NFVChzZWxlY3RhYmxlX2ZkLCAmc2V0ZXhjZXB0KSkKLQkJCQkJCXByaW50ZigiZXhjZXB0aW9uYWwgY29uZGl0aW9uXG4iKTsKLQkJCQkJZWxzZQotCQkJCQkJcHJpbnRmKCJubyBleGNlcHRpb25hbCBjb25kaXRpb25cbiIpOworCQkJCQkJaWYgKEZEX0lTU0VUKHNlbGVjdGFibGVfZmQsICZzZXRyZWFkKSkKKwkJCQkJCQlwcmludGYoInJlYWRhYmxlLCAiKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlwcmludGYoIm5vdCByZWFkYWJsZSwgIik7CisJCQkJCQlpZiAoRkRfSVNTRVQoc2VsZWN0YWJsZV9mZCwgJnNldGV4Y2VwdCkpCisJCQkJCQkJcHJpbnRmKCJleGNlcHRpb25hbCBjb25kaXRpb25cbiIpOworCQkJCQkJZWxzZQorCQkJCQkJCXByaW50Zigibm8gZXhjZXB0aW9uYWwgY29uZGl0aW9uXG4iKTsKKwkJCQkJfQogCQkJCX0KIAkJCQlwYWNrZXRfY291bnQgPSAwOwogCQkJCXN0YXR1cyA9IHBjYXBfZGlzcGF0Y2gocGQsIC0xLCBjb3VudG1lLApAQCAtMjY4LDExICsyNzIsMTIgQEAKIAogCQkJZmQuZmQgPSBzZWxlY3RhYmxlX2ZkOwogCQkJZmQuZXZlbnRzID0gUE9MTElOOworCQkJcmVxdWlyZWRfdGltZW91dCA9IHBjYXBfZ2V0X3JlcXVpcmVkX3NlbGVjdF90aW1lb3V0KHBkKTsKIAkJCWlmIChkb3RpbWVvdXQpCiAJCQkJcG9sbHRpbWVvdXQgPSAxOwogCQkJZWxzZSBpZiAocmVxdWlyZWRfdGltZW91dCAhPSBOVUxMICYmCiAJCQkgICAgcmVxdWlyZWRfdGltZW91dC0+dHZfdXNlYyA+PSAxMDAwKQotCQkJCXBvbGx0aW1lb3V0ID0gcmVxdWlyZWRfdGltZW91dC0+dHZfdXNlYy8xMDAwOworCQkJCXBvbGx0aW1lb3V0ID0gKGludCkocmVxdWlyZWRfdGltZW91dC0+dHZfdXNlYy8xMDAwKTsKIAkJCWVsc2UKIAkJCQlwb2xsdGltZW91dCA9IC0xOwogCQkJc3RhdHVzID0gcG9sbCgmZmQsIChzZWxlY3RhYmxlX2ZkID09IC0xKSA/IDAgOiAxLCBwb2xsdGltZW91dCk7CkBAIC0yODAsMTAgKzI4NSw3IEBACiAJCQkJcHJpbnRmKCJQb2xsIHJldHVybnMgZXJyb3IgKCVzKVxuIiwKIAkJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKIAkJCX0gZWxzZSB7Ci0JCQkJaWYgKHNlbGVjdGFibGVfZmQgPT0gLTEpIHsKLQkJCQkJaWYgKHN0YXR1cyAhPSAwKQotCQkJCQkJcHJpbnRmKCJQb2xsIHJldHVybmVkIGEgZGVzY3JpcHRvclxuIik7Ci0JCQkJfSBlbHNlIHsKKwkJCQlpZiAoIXF1aWV0KSB7CiAJCQkJCWlmIChzdGF0dXMgPT0gMCkKIAkJCQkJCXByaW50ZigiUG9sbCB0aW1lZCBvdXRcbiIpOwogCQkJCQllbHNlIHsKQEAgLTM0OSw3ICszNTEsNyBAQAogCQkvKgogCQkgKiBFcnJvci4gIFJlcG9ydCBpdC4KIAkJICovCi0JCSh2b2lkKWZwcmludGYoc3RkZXJyLCAiJXM6IHBjYXBfbG9vcDogJXNcbiIsCisJCSh2b2lkKWZwcmludGYoc3RkZXJyLCAiJXM6IHBjYXBfZGlzcGF0Y2g6ICVzXG4iLAogCQkgICAgcHJvZ3JhbV9uYW1lLCBwY2FwX2dldGVycihwZCkpOwogCX0KIAlwY2FwX2Nsb3NlKHBkKTsKQEAgLTM2Nyw3ICszNjksNyBAQAogc3RhdGljIHZvaWQKIHVzYWdlKHZvaWQpCiB7Ci0JKHZvaWQpZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgWyAtc3B0biBdIFsgLWkgaW50ZXJmYWNlIF0gW2V4cHJlc3Npb25dXG4iLAorCSh2b2lkKWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIFsgLXNwdG5xIF0gWyAtaSBpbnRlcmZhY2UgXSBbZXhwcmVzc2lvbl1cbiIsCiAJICAgIHByb2dyYW1fbmFtZSk7CiAJZXhpdCgxKTsKIH0KQEAgLTQxNSw3ICs0MTcsNyBAQAogY29weV9hcmd2KHJlZ2lzdGVyIGNoYXIgKiphcmd2KQogewogCXJlZ2lzdGVyIGNoYXIgKipwOwotCXJlZ2lzdGVyIHVfaW50IGxlbiA9IDA7CisJcmVnaXN0ZXIgc2l6ZV90IGxlbiA9IDA7CiAJY2hhciAqYnVmOwogCWNoYXIgKnNyYywgKmRzdDsKIApkaWZmIC0tZ2l0IGEvdGVzdHByb2dzL3RocmVhZHNpZ25hbHRlc3QuYyBiL3Rlc3Rwcm9ncy90aHJlYWRzaWduYWx0ZXN0LmMKaW5kZXggYTYwYmI0OS4uYzlhZGU3NiAxMDA2NDQKLS0tIGEvdGVzdHByb2dzL3RocmVhZHNpZ25hbHRlc3QuYworKysgYi90ZXN0cHJvZ3MvdGhyZWFkc2lnbmFsdGVzdC5jCkBAIC0xNTcsNyArMTU3LDcgQEAKIAkJfSBlbHNlCiAJCQlwcmludGYoIk5vIHBhY2tldHMgc2VlbiBieSBwY2FwX2Rpc3BhdGNoXG4iKTsKIAl9Ci0JaWYgKHN0YXR1cyA9PSAtMikgeworCWlmIChzdGF0dXMgPT0gUENBUF9FUlJPUl9CUkVBSykgewogCQkvKgogCQkgKiBXZSBnb3QgaW50ZXJydXB0ZWQsIHNvIHBlcmhhcHMgd2UgZGlkbid0CiAJCSAqIG1hbmFnZSB0byBmaW5pc2ggYSBsaW5lIHdlIHdlcmUgcHJpbnRpbmcuCkBAIC0xNjcsMTEgKzE2NywxMSBAQAogCQlwcmludGYoIkxvb3AgZ290IGJyb2tlblxuIik7CiAJfQogCSh2b2lkKWZmbHVzaChzdGRvdXQpOwotCWlmIChzdGF0dXMgPT0gLTEpIHsKKwlpZiAoc3RhdHVzID09IFBDQVBfRVJST1IpIHsKIAkJLyoKIAkJICogRXJyb3IuICBSZXBvcnQgaXQuCiAJCSAqLwotCQkodm9pZClmcHJpbnRmKHN0ZGVyciwgIiVzOiBwY2FwX2xvb3A6ICVzXG4iLAorCQkodm9pZClmcHJpbnRmKHN0ZGVyciwgIiVzOiBwY2FwX2Rpc3BhdGNoOiAlc1xuIiwKIAkJICAgIHByb2dyYW1fbmFtZSwgcGNhcF9nZXRlcnIocGQpKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xODIsNyArMTgyLDcgQEAKIHsKIAlyZWdpc3RlciBpbnQgb3A7CiAJcmVnaXN0ZXIgY2hhciAqY3AsICpjbWRidWYsICpkZXZpY2U7Ci0JaW50IGltbWVkaWF0ZSA9IDA7CisJaW50IGRvX3dha2V1cCA9IDE7CiAJcGNhcF9pZl90ICpkZXZsaXN0OwogCWJwZl91X2ludDMyIGxvY2FsbmV0LCBuZXRtYXNrOwogCXN0cnVjdCBicGZfcHJvZ3JhbSBmY29kZTsKQEAgLTIwMCwxMyArMjAwLDE3IEBACiAJCXByb2dyYW1fbmFtZSA9IGFyZ3ZbMF07CiAKIAlvcHRlcnIgPSAwOwotCXdoaWxlICgob3AgPSBnZXRvcHQoYXJnYywgYXJndiwgImk6IikpICE9IC0xKSB7CisJd2hpbGUgKChvcCA9IGdldG9wdChhcmdjLCBhcmd2LCAiaTpuIikpICE9IC0xKSB7CiAJCXN3aXRjaCAob3ApIHsKIAogCQljYXNlICdpJzoKIAkJCWRldmljZSA9IG9wdGFyZzsKIAkJCWJyZWFrOwogCisJCWNhc2UgJ24nOgorCQkJZG9fd2FrZXVwID0gMDsKKwkJCWJyZWFrOworCiAJCWRlZmF1bHQ6CiAJCQl1c2FnZSgpOwogCQkJLyogTk9UUkVBQ0hFRCAqLwpAQCAtMjI5LDEyICsyMzMsNiBAQAogCWlmIChzdGF0dXMgIT0gMCkKIAkJZXJyb3IoIiVzOiBwY2FwX3NldF9zbmFwbGVuIGZhaWxlZDogJXMiLAogCQkJICAgIGRldmljZSwgcGNhcF9zdGF0dXN0b3N0cihzdGF0dXMpKTsKLQlpZiAoaW1tZWRpYXRlKSB7Ci0JCXN0YXR1cyA9IHBjYXBfc2V0X2ltbWVkaWF0ZV9tb2RlKHBkLCAxKTsKLQkJaWYgKHN0YXR1cyAhPSAwKQotCQkJZXJyb3IoIiVzOiBwY2FwX3NldF9pbW1lZGlhdGVfbW9kZSBmYWlsZWQ6ICVzIiwKLQkJCSAgICBkZXZpY2UsIHBjYXBfc3RhdHVzdG9zdHIoc3RhdHVzKSk7Ci0JfQogCXN0YXR1cyA9IHBjYXBfc2V0X3RpbWVvdXQocGQsIDUqNjAqMTAwMCk7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQllcnJvcigiJXM6IHBjYXBfc2V0X3RpbWVvdXQgZmFpbGVkOiAlcyIsCkBAIC0yODAsMjEgKzI3OCwzOSBAQAogCQllcnJvcigiQ2FuJ3QgY3JlYXRlIGNhcHR1cmUgdGhyZWFkOiAlcyIsIHN0cmVycm9yKHN0YXR1cykpOwogI2VuZGlmCiAJc2xlZXBfc2Vjcyg2MCk7CisJcHJpbnRmKCJEb2luZyBwY2FwX2JyZWFrbG9vcCgpXG4iKTsKIAlwY2FwX2JyZWFrbG9vcChwZCk7CisJaWYgKGRvX3dha2V1cCkgeworCQkvKgorCQkgKiBGb3JjZSBhIHdha2V1cCBpbiB0aGUgY2FwdHVyZSB0aHJlYWQuCisJCSAqCisJCSAqIE9uIHNvbWUgcGxhdGZvcm1zLCB3aXRoIHNvbWUgZGV2aWNlcywsIHBjYXBfYnJlYWtsb29wKCkKKwkJICogY2FuJ3QgZG8gdGhhdCBpdHNlbGYuICBPbiBXaW5kb3dzLCBwb2tlIHRoZSBkZXZpY2UncworCQkgKiBldmVudCBoYW5kbGU7IG9uIFVOKlgsIHNlbmQgYSBTSUdVU1IxIHRvIHRoZSB0aHJlYWQuCisJCSAqLwogI2lmZGVmIF9XSU4zMgotCXByaW50ZigiU2V0dGluZyBldmVudFxuIik7Ci0JaWYgKCFTZXRFdmVudChwY2FwX2dldGV2ZW50KHBkKSkpCi0JCWVycm9yKCJDYW4ndCBzZXQgZXZlbnQgZm9yIHBjYXBfdDogJXMiLAotCQkgICAgd2luMzJfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCkpKTsKKwkJcHJpbnRmKCJTZXR0aW5nIGV2ZW50XG4iKTsKKwkJaWYgKCFTZXRFdmVudChwY2FwX2dldGV2ZW50KHBkKSkpCisJCQllcnJvcigiQ2FuJ3Qgc2V0IGV2ZW50IGZvciBwY2FwX3Q6ICVzIiwKKwkJCSAgICB3aW4zMl9zdHJlcnJvcihHZXRMYXN0RXJyb3IoKSkpOworI2Vsc2UKKwkJcHJpbnRmKCJTZW5kaW5nIFNJR1VTUjFcbiIpOworCQlzdGF0dXMgPSBwdGhyZWFkX2tpbGwoY2FwdHVyZV90aHJlYWQsIFNJR1VTUjEpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQl3YXJuaW5nKCJDYW4ndCBpbnRlcnJ1cHQgY2FwdHVyZSB0aHJlYWQ6ICVzIiwKKwkJCXN0cmVycm9yKHN0YXR1cykpOworI2VuZGlmCisJfQorCisJLyoKKwkgKiBOb3cgd2FpdCBmb3IgdGhlIGNhcHR1cmUgdGhyZWFkIHRvIHRlcm1pbmF0ZS4KKwkgKi8KKyNpZmRlZiBfV0lOMzIKIAlpZiAoV2FpdEZvclNpbmdsZU9iamVjdChjYXB0dXJlX3RocmVhZCwgSU5GSU5JVEUpID09IFdBSVRfRkFJTEVEKQogCQllcnJvcigiV2FpdCBmb3IgdGhyZWFkIHRlcm1pbmF0aW9uIGZhaWxlZDogJXMiLAogCQkgICAgd2luMzJfc3RyZXJyb3IoR2V0TGFzdEVycm9yKCkpKTsKIAlDbG9zZUhhbmRsZShjYXB0dXJlX3RocmVhZCk7CiAjZWxzZQotCXByaW50ZigiU2VuZGluZyBTSUdVU1IxXG4iKTsKLQlzdGF0dXMgPSBwdGhyZWFkX2tpbGwoY2FwdHVyZV90aHJlYWQsIFNJR1VTUjEpOwotCWlmIChzdGF0dXMgIT0gMCkKLQkJd2FybmluZygiQ2FuJ3QgaW50ZXJydXB0IGNhcHR1cmUgdGhyZWFkOiAlcyIsIHN0cmVycm9yKHN0YXR1cykpOwogCXN0YXR1cyA9IHB0aHJlYWRfam9pbihjYXB0dXJlX3RocmVhZCwgJnJldHZhbCk7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQllcnJvcigiV2FpdCBmb3IgdGhyZWFkIHRlcm1pbmF0aW9uIGZhaWxlZDogJXMiLApAQCAtMzE3LDcgKzMzMyw3IEBACiBzdGF0aWMgdm9pZAogdXNhZ2Uodm9pZCkKIHsKLQkodm9pZClmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBbIC1tIF0gWyAtaSBpbnRlcmZhY2UgXSBbIC10IHRpbWVvdXRdIFtleHByZXNzaW9uXVxuIiwKKwkodm9pZClmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyBbIC1uIF0gWyAtaSBpbnRlcmZhY2UgXSBbIGV4cHJlc3Npb24gXVxuIiwKIAkgICAgcHJvZ3JhbV9uYW1lKTsKIAlleGl0KDEpOwogfQpAQCAtMzY1LDcgKzM4MSw3IEBACiBjb3B5X2FyZ3YocmVnaXN0ZXIgY2hhciAqKmFyZ3YpCiB7CiAJcmVnaXN0ZXIgY2hhciAqKnA7Ci0JcmVnaXN0ZXIgdV9pbnQgbGVuID0gMDsKKwlyZWdpc3RlciBzaXplX3QgbGVuID0gMDsKIAljaGFyICpidWY7CiAJY2hhciAqc3JjLCAqZHN0OwogCmRpZmYgLS1naXQgYS90ZXN0cHJvZ3MvdmFsZ3JpbmR0ZXN0LmMgYi90ZXN0cHJvZ3MvdmFsZ3JpbmR0ZXN0LmMKaW5kZXggMTA0ZWY2YS4uMDU4YjE4YiAxMDA2NDQKLS0tIGEvdGVzdHByb2dzL3ZhbGdyaW5kdGVzdC5jCisrKyBiL3Rlc3Rwcm9ncy92YWxncmluZHRlc3QuYwpAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KQEAgLTk5LDYgKzEwMCwyMyBAQAogCiAjZW5kaWYKIAorLyoKKyAqIFNxdWVsY2ggYSB3YXJuaW5nLgorICoKKyAqIFdlIGluY2x1ZGUgc3lzdGVtIGhlYWRlcnMgdG8gYmUgYWJsZSB0byBkaXJlY3RseSBzZXQgdGhlIGZpbHRlciB0bworICogYSBwcm9ncmFtIHdpdGggdW5pbml0aWFsaXplZCBjb250ZW50LCB0byBtYWtlIHN1cmUgd2hhdCB3ZSdyZSB0ZXN0aW5nCisgKiBpcyBWYWxncmluZCdzIGNoZWNraW5nIG9mIHRoZSBzeXN0ZW0gY2FsbCB0byBzZXQgdGhlIGZpbHRlciwgYW5kIHdlCisgKiBhbHNvIGluY2x1ZGUgPHBjYXAuaD4gdG8gb3BlbiB0aGUgZGV2aWNlIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHRoYXQKKyAqIG1lYW5zIHRoYXQgd2UgbWF5IGdldCBjb2xsaXNpb25zIGJldHdlZW4gdGhlaXIgZGVmaW5pdGlvbnMgb2YKKyAqIEJQRl9TVE1UIGFuZCBCUEZfSlVNUCAtIGFuZCBkbywgaW4gZmFjdCwgZ2V0IHRoZW0gb24gTGludXggKHRoZQorICogZGVmaW5pdG9ucyBtYXkgYmUgc2VtYW50aWNhbGx5IHRoZSBzYW1lLCBidXQgdGhhdCdzIG5vdCBzdWZmaWNpZW50IHRvCisgKiBhdm9pZCB0aGUgd2FybmluZ3MsIGFzIHRoZSBwcmVwcm9jZXNzb3IgZG9lc24ndCBrbm93IHRoYXQgdV9zaG9ydCBpcworICoganVzdCB1bnNpZ25lZCBzaG9ydCkuCisgKgorICogU28gd2UgdW5kZWZpbmUgQlBGX1NUTVQgYW5kIEJQRl9KVU1QIHRvIGF2b2lkIHRoZSB3YXJuaW5nLgorICovCisjdW5kZWYgQlBGX1NUTVQKKyN1bmRlZiBCUEZfSlVNUAogI2luY2x1ZGUgPHBjYXAuaD4KIAogc3RhdGljIGNoYXIgKnByb2dyYW1fbmFtZTsKQEAgLTEzMiwxMSArMTUwLDIxIEBACiAJaWYgKGZzdGF0KGZkLCAmYnVmKSA8IDApCiAJCWVycm9yKCJjYW4ndCBzdGF0ICVzOiAlcyIsIGZuYW1lLCBwY2FwX3N0cmVycm9yKGVycm5vKSk7CiAKKwkvKgorCSAqIF9yZWFkKCksIG9uIFdpbmRvd3MsIGhhcyBhbiB1bnNpZ25lZCBpbnQgYnl0ZSBjb3VudCBhbmQgYW4KKwkgKiBpbnQgcmV0dXJuIHZhbHVlLCBzbyB3ZSBjYW4ndCBoYW5kbGUgYSBmaWxlIGJpZ2dlciB0aGFuCisJICogSU5UX01BWCAtIDEgYnl0ZXMgKGFuZCBoYXZlIG5vIHJlYXNvbiB0byBkbyBzbzsgYSBmaWx0ZXIgKnRoYXQqCisJICogYmlnIHdpbGwgdGFrZSBmb3JldmVyIHRvIGNvbXBpbGUpLiAgKFRoZSAtMSBpcyBmb3IgdGhlICdcMCcgYXQKKwkgKiB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuKQorCSAqLworCWlmIChidWYuc3Rfc2l6ZSA+IElOVF9NQVggLSAxKQorCQllcnJvcigiJXMgaXMgbGFyZ2VyIHRoYW4gJWQgYnl0ZXM7IHRoYXQncyB0b28gbGFyZ2UiLCBmbmFtZSwKKwkJICAgIElOVF9NQVggLSAxKTsKIAljcCA9IG1hbGxvYygodV9pbnQpYnVmLnN0X3NpemUgKyAxKTsKIAlpZiAoY3AgPT0gTlVMTCkKIAkJZXJyb3IoIm1hbGxvYyglZCkgZm9yICVzOiAlcyIsICh1X2ludClidWYuc3Rfc2l6ZSArIDEsCiAJCQlmbmFtZSwgcGNhcF9zdHJlcnJvcihlcnJubykpOwotCWNjID0gcmVhZChmZCwgY3AsICh1X2ludClidWYuc3Rfc2l6ZSk7CisJY2MgPSAoaW50KXJlYWQoZmQsIGNwLCAodV9pbnQpYnVmLnN0X3NpemUpOwogCWlmIChjYyA8IDApCiAJCWVycm9yKCJyZWFkICVzOiAlcyIsIGZuYW1lLCBwY2FwX3N0cmVycm9yKGVycm5vKSk7CiAJaWYgKGNjICE9IGJ1Zi5zdF9zaXplKQpAQCAtMTk2LDcgKzIyNCw3IEBACiBjb3B5X2FyZ3YocmVnaXN0ZXIgY2hhciAqKmFyZ3YpCiB7CiAJcmVnaXN0ZXIgY2hhciAqKnA7Ci0JcmVnaXN0ZXIgdV9pbnQgbGVuID0gMDsKKwlyZWdpc3RlciBzaXplX3QgbGVuID0gMDsKIAljaGFyICpidWY7CiAJY2hhciAqc3JjLCAqZHN0OwogCkBAIC00MjEsNyArNDQ5LDcgQEAKIAkodm9pZClmcHJpbnRmKHN0ZGVyciwgIiVzLCB3aXRoICVzXG4iLCBwcm9ncmFtX25hbWUsCiAJICAgIHBjYXBfbGliX3ZlcnNpb24oKSk7CiAJKHZvaWQpZnByaW50ZihzdGRlcnIsCi0JICAgICJVc2FnZTogJXMgWy1hSV0gWyAtRiBmaWxlIF0gWyAtSSBpbnRlcmZhY2UgXSBbIGV4cHJlc3Npb24gXVxuIiwKKwkgICAgIlVzYWdlOiAlcyBbLWFJXSBbIC1GIGZpbGUgXSBbIC1pIGludGVyZmFjZSBdIFsgZXhwcmVzc2lvbiBdXG4iLAogCSAgICBwcm9ncmFtX25hbWUpOwogCWV4aXQoMSk7CiB9CmRpZmYgLS1naXQgYS90ZXN0cHJvZ3Mvdmlzb3B0cy5weSBiL3Rlc3Rwcm9ncy92aXNvcHRzLnB5CmluZGV4IDAzYWE4MDQuLjgwYzE0NjMgMTAwNzU1Ci0tLSBhL3Rlc3Rwcm9ncy92aXNvcHRzLnB5CisrKyBiL3Rlc3Rwcm9ncy92aXNvcHRzLnB5CkBAIC0xLDcgKzEsNyBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAKICIiIgotVGhpcyBwcm9ncmFtIHBhcnNlIHRoZSBvdXRwdXQgZnJvbSBwY2FwX2NvbXBpbGUoKSB0byB2aXN1YWxpemUgdGhlIENGRyBhZnRlcgorVGhpcyBwcm9ncmFtIHBhcnNlcyB0aGUgb3V0cHV0IGZyb20gcGNhcF9jb21waWxlKCkgdG8gdmlzdWFsaXplIHRoZSBDRkcgYWZ0ZXIKIGVhY2ggb3B0aW1pemUgcGhhc2UuCiAKIFVzYWdlIGd1aWRlOgpAQCAtMTUsMjMgKzE1LDI0IEBACiAgICAgICAgdGVzdHByb2dzL2ZpbHRlcnRlc3QgLWcgRU4xME1CIGhvc3QgMTkyLjE2OC4xLjEgPiBhLnR4dAogMy4gU2VuZCBhLnR4dCB0byB0aGlzIHByb2dyYW0ncyBzdGFuZGFyZCBpbnB1dAogICAgICAgIGNhdCBhLnR4dCB8IHRlc3Rwcm9ncy92aXNvcHRzLnB5CisgICAoR3JhcGh2aXogbXVzdCBiZSBpbnN0YWxsZWQpCiA0LiBTdGVwIDImMyBjYW4gYmUgbWVyZ2VkOgogICAgICAgIHRlc3Rwcm9ncy9maWx0ZXJ0ZXN0IC1nIEVOMTBNQiBob3N0IDE5Mi4xNjguMS4xIHwgdGVzdHByb2dzL3Zpc29wdHMucHkKIDUuIFRoZSBzdGFuZGFyZCBvdXRwdXQgaXMgc29tZXRoaW5nIGxpa2UgdGhpczoKICAgICAgICBnZW5lcmF0ZWQgZmlsZXMgdW5kZXIgZGlyZWN0b3J5OiAvdG1wL3Zpc29wdHMtVzlla0J3CiAgICAgICAgICB0aGUgZGlyZWN0b3J5IHdpbGwgYmUgcmVtb3ZlZCB3aGVuIHRoaXMgcHJvZ3JhbXMgZmluaXNoZWQuCiAgICAgICAgb3BlbiB0aGlzIGxpbms6IGh0dHA6Ly9sb2NhbGhvc3Q6MzkwNjIvZXhwcjEuaHRtbAotNi4gVXNpbmcgb3BlbiBsaW5rIGF0IHRoZSAzcmQgbGluZSBgaHR0cDovL2xvY2FsaG9zdDozOTA2Mi9leHByMS5odG1sJworNi4gT3BlbiB0aGUgVVJMIGF0IHRoZSAzcmQgbGluZSBpbiBhIGJyb3dzZXIuCiAKIE5vdGU6Ci0xLiBUaGUgQ0ZHIGlzIHRyYW5zbGF0ZWQgdG8gU1ZHIGFuIGRvY3VtZW50LCBleHByMS5odG1sIGVtYmVkZWQgdGhlbSBhcyBleHRlcm5hbAotICAgZG9jdW1lbnQuIElmIHlvdSBvcGVuIGV4cHIxLmh0bWwgYXMgbG9jYWwgZmlsZSB1c2luZyBmaWxlOi8vIHByb3RvY29sLCBzb21lCi0gICBicm93c2VycyB3aWxsIGRlbnkgc3VjaCByZXF1ZXN0cyBzbyB0aGUgd2ViIHBhZ2VzIHdpbGwgbm90IHNob3duIHByb3Blcmx5LgotICAgRm9yIGNocm9tZSwgeW91IGNhbiBydW4gaXQgdXNpbmcgZm9sbG93aW5nIGNvbW1hbmQgdG8gYXZvaWQgdGhpczoKKzEuIFRoZSBDRkcgaXMgdHJhbnNsYXRlZCB0byBTVkcgaW1hZ2VzLCBleHByMS5odG1sIGVtYmVkcyB0aGVtIGFzIGV4dGVybmFsCisgICBkb2N1bWVudHMuIElmIHlvdSBvcGVuIGV4cHIxLmh0bWwgYXMgbG9jYWwgZmlsZSB1c2luZyBmaWxlOi8vIHByb3RvY29sLCBzb21lCisgICBicm93c2VycyB3aWxsIGRlbnkgc3VjaCByZXF1ZXN0cyBzbyB0aGUgd2ViIHBhZ2Ugd2lsbCBub3Qgd29yayBwcm9wZXJseS4KKyAgIEZvciBDaHJvbWUsIHlvdSBjYW4gcnVuIGl0IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBhdm9pZCB0aGlzOgogICAgICAgIGNocm9taXVtIC0tZGlzYWJsZS13ZWItc2VjdXJpdHkKLSAgIFRoYXQncyB3aHkgdGhpcyBwcm9ncmFtIHN0YXJ0IGEgbG9jYWxob3N0IGh0dHAgc2VydmVyLgotMi4gZXhwcjEuaHRtbCB1c2UganF1ZXJ5IGZyb20gaHR0cDovL2FqYXguZ29vZ2xlYXBpcy5jb20sIHNvIHlvdSBuZWVkIGludGVybmV0Ci0gICBhY2Nlc3MgdG8gc2hvdyB0aGUgd2ViIHBhZ2UuCisgICBUaGF0J3Mgd2h5IHRoaXMgcHJvZ3JhbSBzdGFydHMgYSBsb2NhbGhvc3QgSFRUUCBzZXJ2ZXIuCisyLiBleHByMS5odG1sIHVzZXMgalF1ZXJ5IGZyb20gaHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29tLCBzbyBpdCBuZWVkcyBJbnRlcm5ldAorICAgYWNjZXNzIHRvIHdvcmsuCiAiIiIKIAogaW1wb3J0IHN5cywgb3MKQEAgLTUyLDcgKzUzLDcgQEAKICAgICAgIH0KICAgICA8L3N0eWxlPgogCi0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjEwLjIvanF1ZXJ5Lm1pbi5qcyIvPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuMTAuMi9qcXVlcnkubWluLmpzIi8+PC9zY3JpcHQ+CiAgICAgPCEtLXNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9qcXVlcnkubWluLmpzIi8+PC9zY3JpcHQtLT4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICB2YXIgZXhwciA9ICckZXhwcic7CkBAIC0xNDIsNyArMTQzLDcgQEAKICAgICAgIH0KICAgICAgIGZ1bmN0aW9uIGxvYWRfbGVmdChpbmRleCkgewogICAgICAgICB2YXIgdXJsID0gZ3VybChpbmRleCk7Ci0gICAgICAgIHZhciBmcmFnID0gIjxlbWJlZCBpZD0nbGVmdHN2Z2MnICB0eXBlPSdpbWFnZS9zdmcreG1sJyBwbHVnaW5zcGFnZT0naHR0cDovL3d3dy5hZG9iZS5jb20vc3ZnL3ZpZXdlci9pbnN0YWxsLycgc3JjPSciICsgdXJsICsgIicvPiI7CisgICAgICAgIHZhciBmcmFnID0gIjxlbWJlZCBpZD0nbGVmdHN2Z2MnICB0eXBlPSdpbWFnZS9zdmcreG1sJyBwbHVnaW5zcGFnZT0naHR0cHM6Ly93d3cuYWRvYmUuY29tL3N2Zy92aWV3ZXIvaW5zdGFsbC8nIHNyYz0nIiArIHVybCArICInLz4iOwogICAgICAgICAkJCgiI2xzdmciKS5odG1sKGZyYWcpOwogICAgICAgICAkJCgiI2xjb21tZW50IikuaHRtbChsb2dzW2luZGV4XSk7CiAgICAgICAgICQkKCIjbHN2Z2xpbmsiKS5hdHRyKCJocmVmIiwgdXJsKTsKQEAgLTE1MSw3ICsxNTIsNyBAQAogICAgICAgfQogICAgICAgZnVuY3Rpb24gbG9hZF9yaWdodChpbmRleCkgewogICAgICAgICB2YXIgdXJsID0gZ3VybChpbmRleCk7Ci0gICAgICAgIHZhciBmcmFnID0gIjxlbWJlZCBpZD0ncmlnaHRzdmdjJyB0eXBlPSdpbWFnZS9zdmcreG1sJyBwbHVnaW5zcGFnZT0naHR0cDovL3d3dy5hZG9iZS5jb20vc3ZnL3ZpZXdlci9pbnN0YWxsLycgc3JjPSciICsgdXJsICsgIicvPiI7CisgICAgICAgIHZhciBmcmFnID0gIjxlbWJlZCBpZD0ncmlnaHRzdmdjJyB0eXBlPSdpbWFnZS9zdmcreG1sJyBwbHVnaW5zcGFnZT0naHR0cHM6Ly93d3cuYWRvYmUuY29tL3N2Zy92aWV3ZXIvaW5zdGFsbC8nIHNyYz0nIiArIHVybCArICInLz4iOwogICAgICAgICAkJCgiI3JzdmciKS5odG1sKGZyYWcpOwogICAgICAgICAkJCgiI3Jjb21tZW50IikuaHRtbChsb2dzW2luZGV4XSk7CiAgICAgICAgICQkKCIjcnN2Z2xpbmsiKS5hdHRyKCJocmVmIiwgdXJsKTsKQEAgLTI1NSw3ICsyNTYsMTMgQEAKICAgICAgICAgICAgIGxvZyArPSBsaW5lCiAKICAgICAgICAgaWYgaW5kb3QgPT0gMjoKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsnZG90JywgJy1Uc3ZnJ10sIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbJ2RvdCcsICctVHN2ZyddLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgIkZhaWxlZCB0byBydW4gJ2RvdCc6Iiwgb3NlCisgICAgICAgICAgICAgICAgcHJpbnQgIihJcyBHcmFwaHZpeiBpbnN0YWxsZWQ/KSIKKyAgICAgICAgICAgICAgICBleGl0KDEpCisKICAgICAgICAgICAgIHN2ZyA9IHAuY29tbXVuaWNhdGUoZG90KVswXQogICAgICAgICAgICAgd2l0aCBmaWxlKCJleHByMV9nJTAzZC5zdmciICUgKGdpZCksICJ3dCIpIGFzIGY6CiAgICAgICAgICAgICAgICAgZi53cml0ZShzdmcpCkBAIC0yOTYsNyArMzAzLDcgQEAKICAgICBvcy5jaGRpcih0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0idmlzb3B0cy0iKSkKICAgICBhdGV4aXQucmVnaXN0ZXIoc2h1dGlsLnJtdHJlZSwgb3MuZ2V0Y3dkKCkpCiAgICAgcHJpbnQgImdlbmVyYXRlZCBmaWxlcyB1bmRlciBkaXJlY3Rvcnk6ICVzIiAlIG9zLmdldGN3ZCgpCi0gICAgcHJpbnQgIiAgdGhlIGRpcmVjdG9yeSB3aWxsIGJlIHJlbW92ZWQgd2hlbiB0aGlzIHByb2dyYW1zIGZpbmlzaGVkLiIKKyAgICBwcmludCAiICB0aGUgZGlyZWN0b3J5IHdpbGwgYmUgcmVtb3ZlZCB3aGVuIHRoaXMgcHJvZ3JhbSBoYXMgZmluaXNoZWQuIgogCiAgICAgaWYgbm90IHJlbmRlcl9vbl9odG1sKHN5cy5zdGRpbik6CiAgICAgICAgIHJldHVybiAxCmRpZmYgLS1naXQgYS90ZXN0cHJvZ3Mvd3JpdGVjYXB0ZXN0LmMgYi90ZXN0cHJvZ3Mvd3JpdGVjYXB0ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRiNTMyYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3Rwcm9ncy93cml0ZWNhcHRlc3QuYwpAQCAtMCwwICsxLDU1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OCwgMTk4OSwgMTk5MCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMjAwMAorICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdDogKDEpIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbnMKKyAqIHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5LCAoMikKKyAqIGRpc3RyaWJ1dGlvbnMgaW5jbHVkaW5nIGJpbmFyeSBjb2RlIGluY2x1ZGUgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kCisgKiB0aGlzIHBhcmFncmFwaCBpbiBpdHMgZW50aXJldHkgaW4gdGhlIGRvY3VtZW50YXRpb24gb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24sIGFuZCAoMykgYWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nCisgKiBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogYGBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsCisgKiBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IGFuZCBpdHMgY29udHJpYnV0b3JzLicnIE5laXRoZXIgdGhlIG5hbWUgb2YKKyAqIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlCisgKiBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlICJ2YXJhdHRycy5oIgorCisjaWZuZGVmIGxpbnQKK3N0YXRpYyBjb25zdCBjaGFyIGNvcHlyaWdodFtdIF9VXyA9CisgICAgIkAoIykgQ29weXJpZ2h0IChjKSAxOTg4LCAxOTg5LCAxOTkwLCAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAyMDAwXG5cCitUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiI7CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaWZkZWYgX1dJTjMyCisgICNpbmNsdWRlICJnZXRvcHQuaCIKKyNlbHNlCisgICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGVycm5vLmg+CisjaWZuZGVmIF9XSU4zMgorICAjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPHBjYXAuaD4KKworI2luY2x1ZGUgInBjYXAvZnVuY2F0dHJzLmgiCisKKyNpZmRlZiBfV0lOMzIKKyAgI2luY2x1ZGUgInBvcnRhYmlsaXR5LmgiCisjZW5kaWYKKworc3RhdGljIGNoYXIgKnByb2dyYW1fbmFtZTsKKworLyogRm9yd2FyZHMgKi8KK3N0YXRpYyB2b2lkIFBDQVBfTk9SRVRVUk4gdXNhZ2Uodm9pZCk7CitzdGF0aWMgdm9pZCBQQ0FQX05PUkVUVVJOIGVycm9yKGNvbnN0IGNoYXIgKiwgLi4uKSBQQ0FQX1BSSU5URkxJS0UoMSwgMik7CitzdGF0aWMgdm9pZCB3YXJuaW5nKGNvbnN0IGNoYXIgKiwgLi4uKSBQQ0FQX1BSSU5URkxJS0UoMSwgMik7CitzdGF0aWMgY2hhciAqY29weV9hcmd2KGNoYXIgKiopOworCitzdGF0aWMgcGNhcF90ICpwZDsKKworI2lmZGVmIF9XSU4zMgorc3RhdGljIEJPT0wgV0lOQVBJCitzdG9wX2NhcHR1cmUoRFdPUkQgY3RybHR5cGUgX1VfKQoreworCXBjYXBfYnJlYWtsb29wKHBkKTsKKwlyZXR1cm4gVFJVRTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZAorc3RvcF9jYXB0dXJlKGludCBzaWdudW0gX1VfKQoreworCXBjYXBfYnJlYWtsb29wKHBkKTsKK30KKyNlbmRpZgorCitzdGF0aWMgbG9uZworcGFyc2VfaW50ZXJmYWNlX251bWJlcihjb25zdCBjaGFyICpkZXZpY2UpCit7CisJY29uc3QgY2hhciAqcDsKKwlsb25nIGRldm51bTsKKwljaGFyICplbmQ7CisKKwkvKgorCSAqIFNlYXJjaCBmb3IgYSBjb2xvbiwgdGVybWluYXRpbmcgYW55IHNjaGVtZSBhdCB0aGUgYmVnaW5uaW5nCisJICogb2YgdGhlIGRldmljZS4KKwkgKi8KKwlwID0gc3RyY2hyKGRldmljZSwgJzonKTsKKwlpZiAocCAhPSBOVUxMKSB7CisJCS8qCisJCSAqIFdlIGZvdW5kIGl0LiAgSXMgaXQgZm9sbG93ZWQgYnkgIi8vIj8KKwkJICovCisJCXArKzsJLyogc2tpcCB0aGUgOiAqLworCQlpZiAoc3RybmNtcChwLCAiLy8iLCAyKSA9PSAwKSB7CisJCQkvKgorCQkJICogWWVzLiAgU2VhcmNoIGZvciB0aGUgbmV4dCAvLCBhdCB0aGUgZW5kIG9mIHRoZQorCQkJICogYXV0aG9yaXR5IHBhcnQgb2YgdGhlIFVSTC4KKwkJCSAqLworCQkJcCArPSAyOwkvKiBza2lwIHRoZSAvLyAqLworCQkJcCA9IHN0cmNocihwLCAnLycpOworCQkJaWYgKHAgIT0gTlVMTCkgeworCQkJCS8qCisJCQkJICogT0ssIHBhc3QgdGhlIC8gaXMgdGhlIHBhdGguCisJCQkJICovCisJCQkJZGV2aWNlID0gcCArIDE7CisJCQl9CisJCX0KKwl9CisJZGV2bnVtID0gc3RydG9sKGRldmljZSwgJmVuZCwgMTApOworCWlmIChkZXZpY2UgIT0gZW5kICYmICplbmQgPT0gJ1wwJykgeworCQkvKgorCQkgKiBJdCdzIGFsbC1udW1lcmljLCBidXQgaXMgaXQgYSB2YWxpZCBudW1iZXI/CisJCSAqLworCQlpZiAoZGV2bnVtIDw9IDApIHsKKwkJCS8qCisJCQkgKiBObywgaXQncyBub3QgYW4gb3JkaW5hbC4KKwkJCSAqLworCQkJZXJyb3IoIkludmFsaWQgYWRhcHRlciBpbmRleCIpOworCQl9CisJCXJldHVybiAoZGV2bnVtKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBJdCdzIG5vdCBhbGwtbnVtZXJpYzsgcmV0dXJuIC0xLCBzbyBvdXIgY2FsbGVyCisJCSAqIGtub3dzIHRoYXQuCisJCSAqLworCQlyZXR1cm4gKC0xKTsKKwl9Cit9CisKK3N0YXRpYyBjaGFyICoKK2ZpbmRfaW50ZXJmYWNlX2J5X251bWJlcihsb25nIGRldm51bSkKK3sKKwlwY2FwX2lmX3QgKmRldiwgKmRldmxpc3Q7CisJbG9uZyBpOworCWNoYXIgZWJ1ZltQQ0FQX0VSUkJVRl9TSVpFXTsKKwljaGFyICpkZXZpY2U7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHBjYXBfZmluZGFsbGRldnMoJmRldmxpc3QsIGVidWYpOworCWlmIChzdGF0dXMgPCAwKQorCQllcnJvcigiJXMiLCBlYnVmKTsKKwkvKgorCSAqIExvb2sgZm9yIHRoZSBkZXZudW0tdGggZW50cnkgaW4gdGhlIGxpc3Qgb2YgZGV2aWNlcyAoMS1iYXNlZCkuCisJICovCisJZm9yIChpID0gMCwgZGV2ID0gZGV2bGlzdDsgaSA8IGRldm51bS0xICYmIGRldiAhPSBOVUxMOworCSAgICBpKyssIGRldiA9IGRldi0+bmV4dCkKKwkJOworCWlmIChkZXYgPT0gTlVMTCkKKwkJZXJyb3IoIkludmFsaWQgYWRhcHRlciBpbmRleCIpOworCWRldmljZSA9IHN0cmR1cChkZXYtPm5hbWUpOworCXBjYXBfZnJlZWFsbGRldnMoZGV2bGlzdCk7CisJcmV0dXJuIChkZXZpY2UpOworfQorCitzdGF0aWMgcGNhcF90ICoKK29wZW5faW50ZXJmYWNlKGNvbnN0IGNoYXIgKmRldmljZSwgaW50IHNuYXBsZW5fc2V0LCBpbnQgc25hcGxlbiwgY2hhciAqZWJ1ZikKK3sKKwlwY2FwX3QgKnBjOworCWludCBzdGF0dXM7CisJY2hhciAqY3A7CisKKwlwYyA9IHBjYXBfY3JlYXRlKGRldmljZSwgZWJ1Zik7CisJaWYgKHBjID09IE5VTEwpIHsKKwkJLyoKKwkJICogSWYgdGhpcyBmYWlsZWQgd2l0aCAiTm8gc3VjaCBkZXZpY2UiLCB0aGF0IG1lYW5zCisJCSAqIHRoZSBpbnRlcmZhY2UgZG9lc24ndCBleGlzdDsgcmV0dXJuIE5VTEwsIHNvIHRoYXQKKwkJICogdGhlIGNhbGxlciBjYW4gc2VlIHdoZXRoZXIgdGhlIGRldmljZSBuYW1lIGlzCisJCSAqIGFjdHVhbGx5IGFuIGludGVyZmFjZSBpbmRleC4KKwkJICovCisJCWlmIChzdHJzdHIoZWJ1ZiwgIk5vIHN1Y2ggZGV2aWNlIikgIT0gTlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisJCWVycm9yKCIlcyIsIGVidWYpOworCX0KKwlpZiAoc25hcGxlbl9zZXQpIHsKKwkJc3RhdHVzID0gcGNhcF9zZXRfc25hcGxlbihwYywgc25hcGxlbik7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWVycm9yKCIlczogcGNhcF9zZXRfc25hcGxlbiBmYWlsZWQ6ICVzIiwKKwkJCSAgICBkZXZpY2UsIHBjYXBfc3RhdHVzdG9zdHIoc3RhdHVzKSk7CisJfQorCXN0YXR1cyA9IHBjYXBfc2V0X3RpbWVvdXQocGMsIDEwMCk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQllcnJvcigiJXM6IHBjYXBfc2V0X3RpbWVvdXQgZmFpbGVkOiAlcyIsCisJCSAgICBkZXZpY2UsIHBjYXBfc3RhdHVzdG9zdHIoc3RhdHVzKSk7CisJc3RhdHVzID0gcGNhcF9hY3RpdmF0ZShwYyk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJLyoKKwkJICogcGNhcF9hY3RpdmF0ZSgpIGZhaWxlZC4KKwkJICovCisJCWNwID0gcGNhcF9nZXRlcnIocGMpOworCQlpZiAoc3RhdHVzID09IFBDQVBfRVJST1IpCisJCQllcnJvcigiJXMiLCBjcCk7CisJCWVsc2UgaWYgKHN0YXR1cyA9PSBQQ0FQX0VSUk9SX05PX1NVQ0hfREVWSUNFKSB7CisJCQkvKgorCQkJICogUmV0dXJuIGFuIGVycm9yIGZvciBvdXIgY2FsbGVyIHRvIGhhbmRsZS4KKwkJCSAqLworCQkJc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIiVzOiAlc1xuKCVzKSIsCisJCQkgICAgZGV2aWNlLCBwY2FwX3N0YXR1c3Rvc3RyKHN0YXR1cyksIGNwKTsKKwkJfSBlbHNlIGlmIChzdGF0dXMgPT0gUENBUF9FUlJPUl9QRVJNX0RFTklFRCAmJiAqY3AgIT0gJ1wwJykKKwkJCWVycm9yKCIlczogJXNcbiglcykiLCBkZXZpY2UsCisJCQkgICAgcGNhcF9zdGF0dXN0b3N0cihzdGF0dXMpLCBjcCk7CisJCWVsc2UKKwkJCWVycm9yKCIlczogJXMiLCBkZXZpY2UsCisJCQkgICAgcGNhcF9zdGF0dXN0b3N0cihzdGF0dXMpKTsKKwkJcGNhcF9jbG9zZShwYyk7CisJCXJldHVybiAoTlVMTCk7CisJfSBlbHNlIGlmIChzdGF0dXMgPiAwKSB7CisJCS8qCisJCSAqIHBjYXBfYWN0aXZhdGUoKSBzdWNjZWVkZWQsIGJ1dCBpdCdzIHdhcm5pbmcgdXMKKwkJICogb2YgYSBwcm9ibGVtIGl0IGhhZC4KKwkJICovCisJCWNwID0gcGNhcF9nZXRlcnIocGMpOworCQlpZiAoc3RhdHVzID09IFBDQVBfV0FSTklORykKKwkJCXdhcm5pbmcoIiVzIiwgY3ApOworCQllbHNlIGlmIChzdGF0dXMgPT0gUENBUF9XQVJOSU5HX1BST01JU0NfTk9UU1VQICYmCisJCSAgICAgICAgICpjcCAhPSAnXDAnKQorCQkJd2FybmluZygiJXM6ICVzXG4oJXMpIiwgZGV2aWNlLAorCQkJICAgIHBjYXBfc3RhdHVzdG9zdHIoc3RhdHVzKSwgY3ApOworCQllbHNlCisJCQl3YXJuaW5nKCIlczogJXMiLCBkZXZpY2UsCisJCQkgICAgcGNhcF9zdGF0dXN0b3N0cihzdGF0dXMpKTsKKwl9CisJcmV0dXJuIChwYyk7Cit9CisKKyNkZWZpbmUgQ09NTUFORF9PUFRJT05TCSJETGk6czp3Onk6IgorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBvcDsKKwljaGFyICpjcCwgKmNtZGJ1ZiA9IE5VTEwsICpkZXZpY2UsICplbmQsICpzYXZlZmlsZSA9IE5VTEw7CisJaW50IHNuYXBsZW4gPSAwOworCWludCBzbmFwbGVuX3NldCA9IDA7CisJcGNhcF9pZl90ICpkZXZsaXN0OworCWxvbmcgZGV2bnVtOworCWludCBzaG93X2ludGVyZmFjZXMgPSAwOworCWludCBzaG93X2RsdF90eXBlcyA9IDA7CisJaW50IG5kbHRzOworCWludCAqZGx0czsKKwlicGZfdV9pbnQzMiBsb2NhbG5ldCwgbmV0bWFzazsKKwlzdHJ1Y3QgYnBmX3Byb2dyYW0gZmNvZGU7CisJY2hhciBlYnVmW1BDQVBfRVJSQlVGX1NJWkVdOworI2lmbmRlZiBfV0lOMzIKKwlzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKyNlbmRpZgorCWludCBkbHQ7CisJY29uc3QgY2hhciAqZGx0X25hbWUgPSBOVUxMOworCWludCBzdGF0dXM7CisJcGNhcF9kdW1wZXJfdCAqcGRkOworCisJZGV2aWNlID0gTlVMTDsKKwlpZiAoKGNwID0gc3RycmNocihhcmd2WzBdLCAnLycpKSAhPSBOVUxMKQorCQlwcm9ncmFtX25hbWUgPSBjcCArIDE7CisJZWxzZQorCQlwcm9ncmFtX25hbWUgPSBhcmd2WzBdOworCisJb3B0ZXJyID0gMDsKKwl3aGlsZSAoKG9wID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIENPTU1BTkRfT1BUSU9OUykpICE9IC0xKSB7CisJCXN3aXRjaCAob3ApIHsKKworCQljYXNlICdEJzoKKwkJCXNob3dfaW50ZXJmYWNlcyA9IDE7CisJCQlicmVhazsKKworCQljYXNlICdMJzoKKwkJCXNob3dfZGx0X3R5cGVzID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ2knOgorCQkJZGV2aWNlID0gb3B0YXJnOworCQkJYnJlYWs7CisKKwkJY2FzZSAncyc6CisJCQlzbmFwbGVuID0gKGludClzdHJ0b2wob3B0YXJnLCAmZW5kLCAwKTsKKwkJCWlmIChvcHRhcmcgPT0gZW5kIHx8ICplbmQgIT0gJ1wwJyB8fCBzbmFwbGVuIDwgMCkKKwkJCQllcnJvcigiaW52YWxpZCBzbmFwbGVuICVzIChtdXN0IGJlID49IDApIiwKKwkJCQkgICAgb3B0YXJnKTsKKwkJCXNuYXBsZW5fc2V0ID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ3cnOgorCQkJc2F2ZWZpbGUgPSBvcHRhcmc7CisJCQlicmVhazsKKworCQljYXNlICd5JzoKKwkJCWRsdF9uYW1lID0gb3B0YXJnOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXVzYWdlKCk7CisJCQkvKiBOT1RSRUFDSEVEICovCisJCX0KKwl9CisKKwlpZiAoc2hvd19pbnRlcmZhY2VzKSB7CisJCXBjYXBfaWZfdCAqZGV2OworCQlpbnQgaTsKKworCQlpZiAocGNhcF9maW5kYWxsZGV2cygmZGV2bGlzdCwgZWJ1ZikgPCAwKQorCQkJZXJyb3IoIiVzIiwgZWJ1Zik7CisJCWZvciAoaSA9IDAsIGRldiA9IGRldmxpc3Q7IGRldiAhPSBOVUxMOyBpKyssIGRldiA9IGRldi0+bmV4dCkgeworCQkJcHJpbnRmKCIlZC4lcyIsIGkrMSwgZGV2LT5uYW1lKTsKKwkJCWlmIChkZXYtPmRlc2NyaXB0aW9uICE9IE5VTEwpCisJCQkJcHJpbnRmKCIgKCVzKSIsIGRldi0+ZGVzY3JpcHRpb24pOworCQkJcHJpbnRmKCJcbiIpOworCQl9CisJCXBjYXBfZnJlZWFsbGRldnMoZGV2bGlzdCk7CisJCXJldHVybiAoMCk7CisJfQorCisJaWYgKGRldmljZSA9PSBOVUxMKSB7CisJCWlmIChwY2FwX2ZpbmRhbGxkZXZzKCZkZXZsaXN0LCBlYnVmKSA9PSAtMSkKKwkJCWVycm9yKCIlcyIsIGVidWYpOworCQlpZiAoZGV2bGlzdCA9PSBOVUxMKQorCQkJZXJyb3IoIm5vIGludGVyZmFjZXMgYXZhaWxhYmxlIGZvciBjYXB0dXJlIik7CisJCWRldmljZSA9IHN0cmR1cChkZXZsaXN0LT5uYW1lKTsKKwkJcGNhcF9mcmVlYWxsZGV2cyhkZXZsaXN0KTsKKwl9CisJaWYgKHNob3dfZGx0X3R5cGVzKSB7CisJCXBkID0gcGNhcF9jcmVhdGUoZGV2aWNlLCBlYnVmKTsKKwkJaWYgKHBkID09IE5VTEwpCisJCQllcnJvcigiJXMiLCBlYnVmKTsKKwkJc3RhdHVzID0gcGNhcF9hY3RpdmF0ZShwZCk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkvKgorCQkJICogcGNhcF9hY3RpdmF0ZSgpIGZhaWxlZC4KKwkJCSAqLworCQkJZXJyb3IoIiVzOiAlc1xuKCVzKSIsIGRldmljZSwKKwkJCSAgICBwY2FwX3N0YXR1c3Rvc3RyKHN0YXR1cyksIHBjYXBfZ2V0ZXJyKHBkKSk7CisJCX0KKwkJbmRsdHMgPSBwY2FwX2xpc3RfZGF0YWxpbmtzKHBkLCAmZGx0cyk7CisJCWlmIChuZGx0cyA8IDApIHsKKwkJCS8qCisJCQkgKiBwY2FwX2xpc3RfZGF0YWxpbmtzKCkgZmFpbGVkLgorCQkJICovCisJCQllcnJvcigiJXM6ICVzXG4oJXMpIiwgZGV2aWNlLAorCQkJICAgIHBjYXBfc3RhdHVzdG9zdHIoc3RhdHVzKSwgcGNhcF9nZXRlcnIocGQpKTsKKwkJfQorCQlmb3IgKGludCBpID0gMDsgaSA8IG5kbHRzOyBpKyspIHsKKwkJCWRsdF9uYW1lID0gcGNhcF9kYXRhbGlua192YWxfdG9fbmFtZShkbHRzW2ldKTsKKwkJCWlmIChkbHRfbmFtZSA9PSBOVUxMKQorCQkJCXByaW50ZigiRExUICVkIiwgZGx0c1tpXSk7CisJCQllbHNlCisJCQkJcHJpbnRmKCIlcyIsIGRsdF9uYW1lKTsKKwkJCXByaW50ZigiXG4iKTsKKwkJfQorCQlwY2FwX2ZyZWVfZGF0YWxpbmtzKGRsdHMpOworCQlwY2FwX2Nsb3NlKHBkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHNhdmVmaWxlID09IE5VTEwpCisJCWVycm9yKCJubyBzYXZlZmlsZSBzcGVjaWZpZWQiKTsKKworCSplYnVmID0gJ1wwJzsKKworCXBkID0gb3Blbl9pbnRlcmZhY2UoZGV2aWNlLCBzbmFwbGVuX3NldCwgc25hcGxlbiwgZWJ1Zik7CisJaWYgKHBkID09IE5VTEwpIHsKKwkJLyoKKwkJICogVGhhdCBmYWlsZWQgYmVjYXVzZSB0aGUgaW50ZXJmYWNlIGNvdWxkbid0IGJlIGZvdW5kLgorCQkgKgorCQkgKiBJZiB3ZSBjYW4gZ2V0IGEgbGlzdCBvZiBpbnRlcmZhY2VzLCBhbmQgdGhlIGludGVyZmFjZSBuYW1lCisJCSAqIGlzIHB1cmVseSBudW1lcmljLCB0cnkgdG8gdXNlIGl0IGFzIGEgMS1iYXNlZCBpbmRleAorCQkgKiBpbiB0aGUgbGlzdCBvZiBpbnRlcmZhY2VzLgorCQkgKi8KKwkJZGV2bnVtID0gcGFyc2VfaW50ZXJmYWNlX251bWJlcihkZXZpY2UpOworCQlpZiAoZGV2bnVtID09IC0xKSB7CisJCQkvKgorCQkJICogSXQncyBub3QgYSBudW1iZXI7IGp1c3QgcmVwb3J0CisJCQkgKiB0aGUgb3BlbiBlcnJvciBhbmQgZmFpbC4KKwkJCSAqLworCQkJZXJyb3IoIiVzIiwgZWJ1Zik7CisJCX0KKworCQkvKgorCQkgKiBPSywgaXQncyBhIG51bWJlcjsgdHJ5IHRvIGZpbmQgdGhlCisJCSAqIGludGVyZmFjZSB3aXRoIHRoYXQgaW5kZXgsIGFuZCB0cnkKKwkJICogdG8gb3BlbiBpdC4KKwkJICoKKwkJICogZmluZF9pbnRlcmZhY2VfYnlfbnVtYmVyKCkgZXhpdHMgaWYgaXQKKwkJICogY291bGRuJ3QgYmUgZm91bmQuCisJCSAqLworCQlkZXZpY2UgPSBmaW5kX2ludGVyZmFjZV9ieV9udW1iZXIoZGV2bnVtKTsKKwkJcGQgPSBvcGVuX2ludGVyZmFjZShkZXZpY2UsIHNuYXBsZW5fc2V0LCBzbmFwbGVuLCBlYnVmKTsKKwkJaWYgKHBkID09IE5VTEwpCisJCQllcnJvcigiJXMiLCBlYnVmKTsKKwl9CisKKwlpZiAocGNhcF9sb29rdXBuZXQoZGV2aWNlLCAmbG9jYWxuZXQsICZuZXRtYXNrLCBlYnVmKSA8IDApIHsKKwkJbG9jYWxuZXQgPSAwOworCQluZXRtYXNrID0gMDsKKwkJd2FybmluZygiJXMiLCBlYnVmKTsKKwl9CisKKwlpZiAoZGx0X25hbWUgIT0gTlVMTCkgeworCQlkbHQgPSBwY2FwX2RhdGFsaW5rX25hbWVfdG9fdmFsKGRsdF9uYW1lKTsKKwkJaWYgKGRsdCA9PSBQQ0FQX0VSUk9SKQorCQkJZXJyb3IoIiVzIGlzbid0IGEgdmFsaWQgRExUIG5hbWUiLCBkbHRfbmFtZSk7CisJCWlmIChwY2FwX3NldF9kYXRhbGluayhwZCwgZGx0KSA9PSBQQ0FQX0VSUk9SKQorCQkJZXJyb3IoIiVzOiAlcyIsIGRldmljZSwgcGNhcF9nZXRlcnIocGQpKTsKKwl9CisKKwkvKgorCSAqIERvbid0IHNldCBhIGZpbHRlciB1bmxlc3Mgd2Ugd2VyZSBnaXZlbiBvbmUgb24gdGhlCisJICogY29tbWFuZCBsaW5lOyBpZiBjYXB0dXJpbmcgZG9lc24ndCB3b3JrLCBvciBkb2Vzbid0CisJICogdXNlIHRoZSBzbmFwc2hvdCBsZW5ndGgsIHdpdGhvdXQgYSBmaWx0ZXIsIHRoYXQncworCSAqIGEgYnVnLgorCSAqLworCWlmIChvcHRpbmQgPCBhcmdjKSB7CisJCWNtZGJ1ZiA9IGNvcHlfYXJndigmYXJndltvcHRpbmRdKTsKKworCQlpZiAocGNhcF9jb21waWxlKHBkLCAmZmNvZGUsIGNtZGJ1ZiwgMSwgbmV0bWFzaykgPCAwKQorCQkJZXJyb3IoIiVzIiwgcGNhcF9nZXRlcnIocGQpKTsKKworCQlpZiAocGNhcF9zZXRmaWx0ZXIocGQsICZmY29kZSkgPCAwKQorCQkJZXJyb3IoIiVzIiwgcGNhcF9nZXRlcnIocGQpKTsKKwl9CisKKwlwZGQgPSBwY2FwX2R1bXBfb3BlbihwZCwgc2F2ZWZpbGUpOworCWlmIChwZGQgPT0gTlVMTCkKKwkJZXJyb3IoIiVzIiwgcGNhcF9nZXRlcnIocGQpKTsKKworI2lmZGVmIF9XSU4zMgorCVNldENvbnNvbGVDdHJsSGFuZGxlcihzdG9wX2NhcHR1cmUsIFRSVUUpOworI2Vsc2UKKwlhY3Rpb24uc2FfaGFuZGxlciA9IHN0b3BfY2FwdHVyZTsKKwlzaWdlbXB0eXNldCgmYWN0aW9uLnNhX21hc2spOworCWFjdGlvbi5zYV9mbGFncyA9IDA7CisJaWYgKHNpZ2FjdGlvbihTSUdJTlQsICZhY3Rpb24sIE5VTEwpID09IC0xKQorCQllcnJvcigiQ2FuJ3QgY2F0Y2ggU0lHSU5UOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyNlbmRpZgorCisJcHJpbnRmKCJMaXN0ZW5pbmcgb24gJXMsIGxpbmstdHlwZSAiLCBkZXZpY2UpOworCWRsdCA9IHBjYXBfZGF0YWxpbmsocGQpOworCWRsdF9uYW1lID0gcGNhcF9kYXRhbGlua192YWxfdG9fbmFtZShkbHQpOworCWlmIChkbHRfbmFtZSA9PSBOVUxMKQorCQlwcmludGYoIkRMVCAlZCIsIGRsdCk7CisJZWxzZQorCQlwcmludGYoIiVzIiwgZGx0X25hbWUpOworCXByaW50ZigiXG4iKTsKKwlmb3IgKDs7KSB7CisJCXN0YXR1cyA9IHBjYXBfZGlzcGF0Y2gocGQsIC0xLCBwY2FwX2R1bXAsICh1X2NoYXIgKilwZGQpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOworCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCXByaW50ZigiJWQgcGFja2V0cyBzZWVuXG4iLCBzdGF0dXMpOworCQkJc3RydWN0IHBjYXBfc3RhdCBwczsKKwkJCXBjYXBfc3RhdHMocGQsICZwcyk7CisJCQlwcmludGYoIiVkIHBzX3JlY3YsICVkIHBzX2Ryb3AsICVkIHBzX2lmZHJvcFxuIiwKKwkJCSAgICBwcy5wc19yZWN2LCBwcy5wc19kcm9wLCBwcy5wc19pZmRyb3ApOworCQl9CisJfQorCWlmIChzdGF0dXMgPT0gLTIpIHsKKwkJLyoKKwkJICogV2UgZ290IGludGVycnVwdGVkLCBzbyBwZXJoYXBzIHdlIGRpZG4ndAorCQkgKiBtYW5hZ2UgdG8gZmluaXNoIGEgbGluZSB3ZSB3ZXJlIHByaW50aW5nLgorCQkgKiBQcmludCBhbiBleHRyYSBuZXdsaW5lLCBqdXN0IGluIGNhc2UuCisJCSAqLworCQlwdXRjaGFyKCdcbicpOworCQlwcmludGYoIkJyb2tlbiBvdXQgb2YgbG9vcCBmcm9tIFNJR0lOVCBoYW5kbGVyXG4iKTsKKwl9CisJKHZvaWQpZmZsdXNoKHN0ZG91dCk7CisJaWYgKHN0YXR1cyA9PSAtMSkgeworCQkvKgorCQkgKiBFcnJvci4gIFJlcG9ydCBpdC4KKwkJICovCisJCSh2b2lkKWZwcmludGYoc3RkZXJyLCAiJXM6IHBjYXBfZGlzcGF0Y2g6ICVzXG4iLAorCQkgICAgcHJvZ3JhbV9uYW1lLCBwY2FwX2dldGVycihwZCkpOworCX0KKwlwY2FwX2Nsb3NlKHBkKTsKKwlpZiAoY21kYnVmICE9IE5VTEwpIHsKKwkJcGNhcF9mcmVlY29kZSgmZmNvZGUpOworCQlmcmVlKGNtZGJ1Zik7CisJfQorCWV4aXQoc3RhdHVzID09IC0xID8gMSA6IDApOworfQorCitzdGF0aWMgdm9pZAordXNhZ2Uodm9pZCkKK3sKKwkodm9pZClmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyAtRCAtTCBbIC1pIGludGVyZmFjZSBdIFsgLXMgc25hcGxlbiBdIFsgLXcgZmlsZSBdIFsgLXkgZGx0IF0gW2V4cHJlc3Npb25dXG4iLAorCSAgICBwcm9ncmFtX25hbWUpOworCWV4aXQoMSk7Cit9CisKKy8qIFZBUkFSR1MgKi8KK3N0YXRpYyB2b2lkCitlcnJvcihjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJKHZvaWQpZnByaW50ZihzdGRlcnIsICIlczogIiwgcHJvZ3JhbV9uYW1lKTsKKwl2YV9zdGFydChhcCwgZm10KTsKKwkodm9pZCl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJaWYgKCpmbXQpIHsKKwkJZm10ICs9IHN0cmxlbihmbXQpOworCQlpZiAoZm10Wy0xXSAhPSAnXG4nKQorCQkJKHZvaWQpZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwl9CisJZXhpdCgxKTsKKwkvKiBOT1RSRUFDSEVEICovCit9CisKKy8qIFZBUkFSR1MgKi8KK3N0YXRpYyB2b2lkCit3YXJuaW5nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwkodm9pZClmcHJpbnRmKHN0ZGVyciwgIiVzOiBXQVJOSU5HOiAiLCBwcm9ncmFtX25hbWUpOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCSh2b2lkKXZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKwlpZiAoKmZtdCkgeworCQlmbXQgKz0gc3RybGVuKGZtdCk7CisJCWlmIChmbXRbLTFdICE9ICdcbicpCisJCQkodm9pZClmcHV0YygnXG4nLCBzdGRlcnIpOworCX0KK30KKworLyoKKyAqIENvcHkgYXJnIHZlY3RvciBpbnRvIGEgbmV3IGJ1ZmZlciwgY29uY2F0ZW5hdGluZyBhcmd1bWVudHMgd2l0aCBzcGFjZXMuCisgKi8KK3N0YXRpYyBjaGFyICoKK2NvcHlfYXJndihyZWdpc3RlciBjaGFyICoqYXJndikKK3sKKwlyZWdpc3RlciBjaGFyICoqcDsKKwlyZWdpc3RlciBzaXplX3QgbGVuID0gMDsKKwljaGFyICpidWY7CisJY2hhciAqc3JjLCAqZHN0OworCisJcCA9IGFyZ3Y7CisJaWYgKCpwID09IDApCisJCXJldHVybiAwOworCisJd2hpbGUgKCpwKQorCQlsZW4gKz0gc3RybGVuKCpwKyspICsgMTsKKworCWJ1ZiA9IChjaGFyICopbWFsbG9jKGxlbik7CisJaWYgKGJ1ZiA9PSBOVUxMKQorCQllcnJvcigiY29weV9hcmd2OiBtYWxsb2MiKTsKKworCXAgPSBhcmd2OworCWRzdCA9IGJ1ZjsKKwl3aGlsZSAoKHNyYyA9ICpwKyspICE9IE5VTEwpIHsKKwkJd2hpbGUgKCgqZHN0KysgPSAqc3JjKyspICE9ICdcMCcpCisJCQk7CisJCWRzdFstMV0gPSAnICc7CisJfQorCWRzdFstMV0gPSAnXDAnOworCisJcmV0dXJuIGJ1ZjsKK30K