[committed][RISC-V][PR target/108031] Expose address computations for atomic memory operations
Jeffrey Law <[email protected]> Tue, 4 Aug 2026 07:20:52 -0600
| Newsgroups | gmane.comp.gcc.patches |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format. --------------3OS6m1ih460aa6nODnHWJQpy Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit This is a patch from Shreya that takes a step towards fixing pr108031. Access to objects in static storage requires a high/lo_sum pair on RISC-V. Often, but not always, the lo_sum expression can be folded into the actual memory reference. One of the common cases where it can *not* fold in is atomic memory operations. So if (for example) we access nearby fields in a structure in static memory we'll often see lui a5,%hi(s) li a4,1 addi a5,a5,%lo(s) amoadd.w a0,a4,0(a5) lui a5,%hi(s+4) <-- this should be: addi a5, a5, 4 addi a5,a5,%lo(s+4) <-- this should be removed amoadd.w a3,a4,0(a5) add a0,a0,a3 We'd like to replace the second lui+addi pair with a single addi. That's normally a job for CSE, but due to implementation details of the RISC-V atomics we're failing to even expose those addresses to CSE. The core issue is the predicates on these instructions are wider than the constraints and as a result the lo_sum stays folded into the memory reference until LRA realizes the constraints don't match and the lo_sum part of the address computation gets reloaded. The fix is straightforward. Tighten the operand predicates. RISC-V only allows simple memory indirect operands for these instructions, yet surprisingly we didn't have a predicate for that kind of address. This patch adds an appropriate predicate, then uses it on the dozen or so relevant patterns/expanders. That's enough to expose the address calculation to CSE, schedulers, etc. In my (Jeff's) opinion the patch stands as an independent improvement, even though it doesn't fix 108031. The next (and final) step to fix 108031 will most likely be a costing model fix. ie, CSE will do the right thing with the addresses are fully exposed, but it rejects the changes because the RISC-V cost model is broken. This has been bootstrapped and regression tested on the c920. K3 bootstrap & regression test was just about done when a cat went crazy behind my desk and ultimately dislodged the power cable from the wall. It's restarted, but results are now 9 hours out :( riscv32-elf and riscv64-elf both worked fine, of course. I'm pushing this to the trunk of Shreya's behalf. Jeff --------------3OS6m1ih460aa6nODnHWJQpy Content-Type: text/plain; charset=UTF-8; name="0006-pr108031.patch" Content-Disposition: attachment; filename="0006-pr108031.patch" Content-Transfer-Encoding: base64 CVBSIHRhcmdldC8xMDgwMzEKZ2NjCgkqIGNvbmZpZy9yaXNjdi9wcmVkaWNhdGVzLm1kIChy aXNjdl9hdG9taWNfbWVtb3J5X29wZXJhbmQpOiBOZXcKCXByZWRpY2F0ZS4KCSogY29uZmln L3Jpc2N2L3N5bmMubWQgKDxhdG9taWNfb3B0YWI+PG1vZGU+IHBhdHRlcm4gYW5kIGV4cGFu ZGVyKToKCVVzZSByaXNjdl9hdG9taWNfbWVtb3J5X29wZXJhbmQuCgkoYW1vX2F0b21pY188 YXRvbWljX29wdGFiPjxtb2RlPik6IExpa2V3aXNlLgoJKGxyc2NfYXRvbWljXzxhdG9taWNf b3B0YWI+PG1vZGU+KTogTGlrZXdpc2UuCgkoYXRvbWljX2ZldGNoXzxhdG9taWNfb3B0YWI+ PG1vZGUpOiBMaWtld2lzZS4KCShhbW9fYXRvbWljX2ZldGNoXzxhdG9taWNfb3B0YWI+PG1v ZGU+KTogTGlrZXdpc2UuCgkobHJzY19hdG9taWNfZmV0Y2hfPGF0b21pY19vcHRhYj48bW9k ZT4pOiBMaWtld2lzZS4KCShzdWJ3b3JkX2F0b21pY19mZXRjaF9zdHJvbmdfPGF0b21pY19v cHRhYj4pOiBMaWtld2lzZS4KCShhdG9taWNfZmV0Y2hfbmFuZDxtb2RlPik6IExpa2V3aXNl LgoJKHN1YndvcmRfYXRvbWljX2ZldGNoX3N0cm9uZ19uYW5kKTogTGlrZXdpc2UuCgkoemFi aGFfYXRvbWljX2ZldGNoXzxhdG9taWNfb3B0YWI+PG1vZGU+KTogTGlrZXdpc2UuCgkobHJz Y19hdG9taWNfZmV0Y2hfPGF0b21pY19vcHRhYj48bW9kZT4pOiBMaWtld2lzZS4KCShhdG9t aWNfZXhjaGFuZ2U8bW9kZT4pOiBMaWtld2lzZS4KCShhbW9fYXRvbWljX2V4Y2hhbmdlPG1v ZGU+KTogTGlrZXdpc2UuCgkoYW1vX2F0b21pY19leGNoYW5nZTxtb2RlPl9leHRlbmRlZCk6 IExpa2V3aXNlLgoJKGxyc2NfYXRvbWljX2V4Y2hhbmdlPG1vZGU+KTogTGlrZXdpc2UuCgko c3Vid29yZF9hdG9taWNfZXhjaGFuZ2Vfc3Ryb25nKTogTGlrZXdpc2UuCgkoemFjYXNfYXRv bWljX2Nhc192YWx1ZV9zdHJvbmc8bW9kZT4pOiBMaWtld2lzZS4KCSh6YWxyc2NfYXRvbWlj X2Nhc192YWx1ZV9zdHJvbmc8bW9kZT4pOiBMaWtld2lzZS4KCShzdWJ3b3JkX2F0b21pY19j YXNfc3Ryb25nKTogTGlrZXdpc2UuCgkoYXRvbWljX3Rlc3RfYW5kX3NldCk6IExpa2V3aXNl LgoKZ2NjL3Rlc3RzdWl0ZQoJKiBnY2MudGFyZ2V0L3Jpc2N2L3ByMTA4MDMxLmM6IE5ldyB0 ZXN0LgoKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcmlzY3YvcHJlZGljYXRlcy5tZCBiL2dj Yy9jb25maWcvcmlzY3YvcHJlZGljYXRlcy5tZAppbmRleCBkZjFhNzYwNDlmNC4uM2VlOTA0 MmI5NDkgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvcmlzY3YvcHJlZGljYXRlcy5tZAorKysg Yi9nY2MvY29uZmlnL3Jpc2N2L3ByZWRpY2F0ZXMubWQKQEAgLTc5MCwzICs3OTAsNyBAQCAo ZGVmaW5lX3ByZWRpY2F0ZSAiYWRzX2V4dHJhY3Rfc2l6ZV9pbW1fc2kiCiAoZGVmaW5lX3By ZWRpY2F0ZSAiYWRzX2V4dHJhY3Rfc2l6ZV9pbW1fZGkiCiAgIChhbmQgKG1hdGNoX2NvZGUg ImNvbnN0X2ludCIpCiAJICAgKG1hdGNoX3Rlc3QgIklOX1JBTkdFIChJTlRWQUwgKG9wKSwg MSwgNjQpIikpKQorCisoZGVmaW5lX3ByZWRpY2F0ZSAicmlzY3ZfYXRvbWljX21lbW9yeV9v cGVyYW5kIgorICAoYW5kIChtYXRjaF9jb2RlICJtZW0iKQorICAgICAgIChtYXRjaF90ZXN0 ICJyZWdpc3Rlcl9vcGVyYW5kIChYRVhQIChvcCwgMCksIFBtb2RlKSIpKSkKZGlmZiAtLWdp dCBhL2djYy9jb25maWcvcmlzY3Yvc3luYy5tZCBiL2djYy9jb25maWcvcmlzY3Yvc3luYy5t ZAppbmRleCBhMDQ2NTE5YzgzNS4uMGQ5ODNjZTYwMjQgMTAwNjQ0Ci0tLSBhL2djYy9jb25m aWcvcmlzY3Yvc3luYy5tZAorKysgYi9nY2MvY29uZmlnL3Jpc2N2L3N5bmMubWQKQEAgLTk0 LDcgKzk0LDcgQEAgKGRlZmluZV9leHBhbmQgImF0b21pY19zdG9yZTxtb2RlPiIKIDs7IEFN TyBvcHMKIAogKGRlZmluZV9pbnNuICJhdG9taWNfPGF0b21pY19vcHRhYj48bW9kZT4iCi0g IFsoc2V0IChtYXRjaF9vcGVyYW5kOlNIT1JUIDAgIm1lbW9yeV9vcGVyYW5kIiAiK0EiKQor ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSE9SVCAwICJyaXNjdl9hdG9taWNfbWVtb3J5X29w ZXJhbmQiICIrQSIpCiAJKHVuc3BlY192b2xhdGlsZTpTSE9SVAogCSAgWyhhbnlfYXRvbWlj OlNIT1JUIChtYXRjaF9kdXAgMCkKIAkJICAgICAobWF0Y2hfb3BlcmFuZDpTSE9SVCAxICJy ZWdfb3JfMF9vcGVyYW5kIiAickoiKSkKQEAgLTEwNiw3ICsxMDYsNyBAQCAoZGVmaW5lX2lu c24gImF0b21pY188YXRvbWljX29wdGFiPjxtb2RlPiIKICAgIChzZXQgKGF0dHIgImxlbmd0 aCIpIChjb25zdF9pbnQgNCkpXSkKIAogKGRlZmluZV9leHBhbmQgImF0b21pY188YXRvbWlj X29wdGFiPjxtb2RlPiIKLSAgWyhhbnlfYXRvbWljOkdQUiAobWF0Y2hfb3BlcmFuZDpHUFIg MCAibWVtb3J5X29wZXJhbmQiKSAgICA7OyBtZW0gbG9jYXRpb24KKyAgWyhhbnlfYXRvbWlj OkdQUiAobWF0Y2hfb3BlcmFuZDpHUFIgMCAicmlzY3ZfYXRvbWljX21lbW9yeV9vcGVyYW5k IikgICAgOzsgbWVtIGxvY2F0aW9uCiAJCSAgIChtYXRjaF9vcGVyYW5kOkdQUiAxICJyZWdf b3JfMF9vcGVyYW5kIikpIDs7IHZhbHVlIGZvciBvcAogICAgKG1hdGNoX29wZXJhbmQ6U0kg MiAiY29uc3RfaW50X29wZXJhbmQiKV0JCSAgICAgOzsgbW9kZWwKICAgIlRBUkdFVF9aQUFN TyB8fCBUQVJHRVRfWkFMUlNDIgpAQCAtMTIxLDcgKzEyMSw3IEBAIChkZWZpbmVfZXhwYW5k ICJhdG9taWNfPGF0b21pY19vcHRhYj48bW9kZT4iCiB9KQogCiAoZGVmaW5lX2luc24gImFt b19hdG9taWNfPGF0b21pY19vcHRhYj48bW9kZT4iCi0gIFsoc2V0IChtYXRjaF9vcGVyYW5k OkdQUiAwICJtZW1vcnlfb3BlcmFuZCIgIitBIikKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 R1BSIDAgInJpc2N2X2F0b21pY19tZW1vcnlfb3BlcmFuZCIgIitBIikKIAkodW5zcGVjX3Zv bGF0aWxlOkdQUgogCSAgWyhhbnlfYXRvbWljOkdQUiAobWF0Y2hfZHVwIDApCiAJCSAgICAg KG1hdGNoX29wZXJhbmQ6R1BSIDEgInJlZ19vcl8wX29wZXJhbmQiICJySiIpKQpAQCAtMTMz LDcgKzEzMyw3IEBAIChkZWZpbmVfaW5zbiAiYW1vX2F0b21pY188YXRvbWljX29wdGFiPjxt b2RlPiIKICAgIChzZXQgKGF0dHIgImxlbmd0aCIpIChjb25zdF9pbnQgNCkpXSkKIAogKGRl ZmluZV9pbnNuICJscnNjX2F0b21pY188YXRvbWljX29wdGFiPjxtb2RlPiIKLSAgWyhzZXQg KG1hdGNoX29wZXJhbmQ6R1BSIDAgIm1lbW9yeV9vcGVyYW5kIiAiK0EiKQorICBbKHNldCAo bWF0Y2hfb3BlcmFuZDpHUFIgMCAicmlzY3ZfYXRvbWljX21lbW9yeV9vcGVyYW5kIiAiK0Ei KQogCSh1bnNwZWNfdm9sYXRpbGU6R1BSCiAJICBbKGFueV9hdG9taWM6R1BSIChtYXRjaF9k dXAgMCkKIAkJICAgICAobWF0Y2hfb3BlcmFuZDpHUFIgMSAicmVnX29yXzBfb3BlcmFuZCIg InJKIikpCkBAIC0xNTUsNyArMTU1LDcgQEAgKGRlZmluZV9pbnNuICJscnNjX2F0b21pY188 YXRvbWljX29wdGFiPjxtb2RlPiIKIAogKGRlZmluZV9leHBhbmQgImF0b21pY19mZXRjaF88 YXRvbWljX29wdGFiPjxtb2RlPiIKICAgWyhtYXRjaF9vcGVyYW5kOkdQUiAwICJyZWdpc3Rl cl9vcGVyYW5kIikJCSAgICAgOzsgb2xkIHZhbHVlIGF0IG1lbQotICAgKGFueV9hdG9taWM6 R1BSIChtYXRjaF9vcGVyYW5kOkdQUiAxICJtZW1vcnlfb3BlcmFuZCIpICAgIDs7IG1lbSBs b2NhdGlvbgorICAgKGFueV9hdG9taWM6R1BSIChtYXRjaF9vcGVyYW5kOkdQUiAxICJyaXNj dl9hdG9taWNfbWVtb3J5X29wZXJhbmQiKSAgICA7OyBtZW0gbG9jYXRpb24KIAkJICAgKG1h dGNoX29wZXJhbmQ6R1BSIDIgInJlZ19vcl8wX29wZXJhbmQiKSkgOzsgdmFsdWUgZm9yIG9w CiAgICAobWF0Y2hfb3BlcmFuZDpTSSAzICJjb25zdF9pbnRfb3BlcmFuZCIpXQkJICAgICA7 OyBtb2RlbAogICAiVEFSR0VUX1pBQU1PIHx8IFRBUkdFVF9aQUxSU0MiCkBAIC0xNzEsNyAr MTcxLDcgQEAgKGRlZmluZV9leHBhbmQgImF0b21pY19mZXRjaF88YXRvbWljX29wdGFiPjxt b2RlPiIKIAogKGRlZmluZV9pbnNuICJhbW9fYXRvbWljX2ZldGNoXzxhdG9taWNfb3B0YWI+ PG1vZGU+IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpHUFIgMCAicmVnaXN0ZXJfb3BlcmFu ZCIgIj0mciIpCi0JKG1hdGNoX29wZXJhbmQ6R1BSIDEgIm1lbW9yeV9vcGVyYW5kIiAiK0Ei KSkKKwkobWF0Y2hfb3BlcmFuZDpHUFIgMSAicmlzY3ZfYXRvbWljX21lbW9yeV9vcGVyYW5k IiAiK0EiKSkKICAgIChzZXQgKG1hdGNoX2R1cCAxKQogCSh1bnNwZWNfdm9sYXRpbGU6R1BS CiAJICBbKGFueV9hdG9taWM6R1BSIChtYXRjaF9kdXAgMSkKQEAgLTE4NSw3ICsxODUsNyBA QCAoZGVmaW5lX2luc24gImFtb19hdG9taWNfZmV0Y2hfPGF0b21pY19vcHRhYj48bW9kZT4i CiAKIChkZWZpbmVfaW5zbiAibHJzY19hdG9taWNfZmV0Y2hfPGF0b21pY19vcHRhYj48bW9k ZT4iCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQUiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAi PSZyIikKLQkobWF0Y2hfb3BlcmFuZDpHUFIgMSAibWVtb3J5X29wZXJhbmQiICIrQSIpKQor CShtYXRjaF9vcGVyYW5kOkdQUiAxICJyaXNjdl9hdG9taWNfbWVtb3J5X29wZXJhbmQiICIr QSIpKQogICAgKHNldCAobWF0Y2hfZHVwIDEpCiAJKHVuc3BlY192b2xhdGlsZTpHUFIKIAkg IFsoYW55X2F0b21pYzpHUFIgKG1hdGNoX2R1cCAxKQpAQCAtMjA2LDcgKzIwNiw3IEBAIChk ZWZpbmVfaW5zbiAibHJzY19hdG9taWNfZmV0Y2hfPGF0b21pY19vcHRhYj48bW9kZT4iCiAK IChkZWZpbmVfaW5zbiAic3Vid29yZF9hdG9taWNfZmV0Y2hfc3Ryb25nXzxhdG9taWNfb3B0 YWI+IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAi PSZyIikJCSAgIDs7IG9sZCB2YWx1ZSBhdCBtZW0KLQkobWF0Y2hfb3BlcmFuZDpTSSAxICJt ZW1vcnlfb3BlcmFuZCIgIitBIikpCQkgICA7OyBtZW0gbG9jYXRpb24KKwkobWF0Y2hfb3Bl cmFuZDpTSSAxICJyaXNjdl9hdG9taWNfbWVtb3J5X29wZXJhbmQiICIrQSIpKQkJICAgOzsg bWVtIGxvY2F0aW9uCiAgICAoc2V0IChtYXRjaF9kdXAgMSkKIAkodW5zcGVjX3ZvbGF0aWxl OlNJCiAJICBbKGFueV9hdG9taWM6U0kgKG1hdGNoX2R1cCAxKQpAQCAtMjMzLDcgKzIzMyw3 IEBAIChkZWZpbmVfaW5zbiAic3Vid29yZF9hdG9taWNfZmV0Y2hfc3Ryb25nXzxhdG9taWNf b3B0YWI+IgogCiAoZGVmaW5lX2V4cGFuZCAiYXRvbWljX2ZldGNoX25hbmQ8bW9kZT4iCiAg IFsobWF0Y2hfb3BlcmFuZDpTSE9SVCAwICJyZWdpc3Rlcl9vcGVyYW5kIikJCQkgICAgICA7 OyBvbGQgdmFsdWUgYXQgbWVtCi0gICAobm90OlNIT1JUIChhbmQ6U0hPUlQgKG1hdGNoX29w ZXJhbmQ6U0hPUlQgMSAibWVtb3J5X29wZXJhbmQiKSAgICAgOzsgbWVtIGxvY2F0aW9uCisg ICAobm90OlNIT1JUIChhbmQ6U0hPUlQgKG1hdGNoX29wZXJhbmQ6U0hPUlQgMSAicmlzY3Zf YXRvbWljX21lbW9yeV9vcGVyYW5kIikgICAgIDs7IG1lbSBsb2NhdGlvbgogCQkJIChtYXRj aF9vcGVyYW5kOlNIT1JUIDIgInJlZ19vcl8wX29wZXJhbmQiKSkpIDs7IHZhbHVlIGZvciBv cAogICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAiY29uc3RfaW50X29wZXJhbmQiKV0JCQkgICAg ICA7OyBtb2RlbAogICAiVEFSR0VUX1pBTFJTQyAmJiBUQVJHRVRfSU5MSU5FX1NVQldPUkRf QVRPTUlDIgpAQCAtMjczLDcgKzI3Myw3IEBAIChkZWZpbmVfZXhwYW5kICJhdG9taWNfZmV0 Y2hfbmFuZDxtb2RlPiIKIAogKGRlZmluZV9pbnNuICJzdWJ3b3JkX2F0b21pY19mZXRjaF9z dHJvbmdfbmFuZCIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3Bl cmFuZCIgIj0mciIpCQkJICA7OyBvbGQgdmFsdWUgYXQgbWVtCi0JKG1hdGNoX29wZXJhbmQ6 U0kgMSAibWVtb3J5X29wZXJhbmQiICIrQSIpKQkJCSAgOzsgbWVtIGxvY2F0aW9uCisJKG1h dGNoX29wZXJhbmQ6U0kgMSAicmlzY3ZfYXRvbWljX21lbW9yeV9vcGVyYW5kIiAiK0EiKSkJ CQkgIDs7IG1lbSBsb2NhdGlvbgogICAgKHNldCAobWF0Y2hfZHVwIDEpCiAJKHVuc3BlY192 b2xhdGlsZTpTSQogCSAgWyhub3Q6U0kgKGFuZDpTSSAobWF0Y2hfZHVwIDEpCkBAIC0zMDEs NyArMzAxLDcgQEAgKGRlZmluZV9pbnNuICJzdWJ3b3JkX2F0b21pY19mZXRjaF9zdHJvbmdf bmFuZCIKIAogKGRlZmluZV9leHBhbmQgImF0b21pY19mZXRjaF88YXRvbWljX29wdGFiPjxt b2RlPiIKICAgWyhtYXRjaF9vcGVyYW5kOlNIT1JUIDAgInJlZ2lzdGVyX29wZXJhbmQiKQkJ CSA7OyBvbGQgdmFsdWUgYXQgbWVtCi0gICAoYW55X2F0b21pYzpTSE9SVCAobWF0Y2hfb3Bl cmFuZDpTSE9SVCAxICJtZW1vcnlfb3BlcmFuZCIpCSA7OyBtZW0gbG9jYXRpb24KKyAgIChh bnlfYXRvbWljOlNIT1JUIChtYXRjaF9vcGVyYW5kOlNIT1JUIDEgInJpc2N2X2F0b21pY19t ZW1vcnlfb3BlcmFuZCIpCSA7OyBtZW0gbG9jYXRpb24KIAkJICAgICAobWF0Y2hfb3BlcmFu ZDpTSE9SVCAyICJyZWdfb3JfMF9vcGVyYW5kIikpIDs7IHZhbHVlIGZvciBvcAogICAgKG1h dGNoX29wZXJhbmQ6U0kgMyAiY29uc3RfaW50X29wZXJhbmQiKV0JCQkgOzsgbW9kZWwKICAg IihUQVJHRVRfWkFMUlNDICYmIFRBUkdFVF9JTkxJTkVfU1VCV09SRF9BVE9NSUMpIHx8IFRB UkdFVF9aQUJIQSIKQEAgLTMxNyw3ICszMTcsNyBAQCAoZGVmaW5lX2V4cGFuZCAiYXRvbWlj X2ZldGNoXzxhdG9taWNfb3B0YWI+PG1vZGU+IgogCiAoZGVmaW5lX2luc24gInphYmhhX2F0 b21pY19mZXRjaF88YXRvbWljX29wdGFiPjxtb2RlPiIKICAgWyhzZXQgKG1hdGNoX29wZXJh bmQ6U0hPUlQgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj0mciIpCi0JKG1hdGNoX29wZXJhbmQ6 U0hPUlQgMSAibWVtb3J5X29wZXJhbmQiICIrQSIpKQorCShtYXRjaF9vcGVyYW5kOlNIT1JU IDEgInJpc2N2X2F0b21pY19tZW1vcnlfb3BlcmFuZCIgIitBIikpCiAgICAoc2V0IChtYXRj aF9kdXAgMSkKIAkodW5zcGVjX3ZvbGF0aWxlOlNIT1JUCiAJICBbKGFueV9hdG9taWM6U0hP UlQgKG1hdGNoX2R1cCAxKQpAQCAtMzMxLDcgKzMzMSw3IEBAIChkZWZpbmVfaW5zbiAiemFi aGFfYXRvbWljX2ZldGNoXzxhdG9taWNfb3B0YWI+PG1vZGU+IgogCiAoZGVmaW5lX2V4cGFu ZCAibHJzY19hdG9taWNfZmV0Y2hfPGF0b21pY19vcHRhYj48bW9kZT4iCiAgIFsobWF0Y2hf b3BlcmFuZDpTSE9SVCAwICJyZWdpc3Rlcl9vcGVyYW5kIikJCQkgOzsgb2xkIHZhbHVlIGF0 IG1lbQotICAgKGFueV9hdG9taWM6U0hPUlQgKG1hdGNoX29wZXJhbmQ6U0hPUlQgMSAibWVt b3J5X29wZXJhbmQiKQkgOzsgbWVtIGxvY2F0aW9uCisgICAoYW55X2F0b21pYzpTSE9SVCAo bWF0Y2hfb3BlcmFuZDpTSE9SVCAxICJyaXNjdl9hdG9taWNfbWVtb3J5X29wZXJhbmQiKQkg OzsgbWVtIGxvY2F0aW9uCiAJCSAgICAgKG1hdGNoX29wZXJhbmQ6U0hPUlQgMiAicmVnX29y XzBfb3BlcmFuZCIpKSA7OyB2YWx1ZSBmb3Igb3AKICAgIChtYXRjaF9vcGVyYW5kOlNJIDMg ImNvbnN0X2ludF9vcGVyYW5kIildCQkJIDs7IG1vZGVsCiAgICIhVEFSR0VUX1pBQkhBICYm IFRBUkdFVF9aQUxSU0MgJiYgVEFSR0VUX0lOTElORV9TVUJXT1JEX0FUT01JQyIKQEAgLTM3 NCw3ICszNzQsNyBAQCAoZGVmaW5lX2V4cGFuZCAibHJzY19hdG9taWNfZmV0Y2hfPGF0b21p Y19vcHRhYj48bW9kZT4iCiAKIChkZWZpbmVfZXhwYW5kICJhdG9taWNfZXhjaGFuZ2U8bW9k ZT4iCiAgIFsobWF0Y2hfb3BlcmFuZDpHUFIgMCAicmVnaXN0ZXJfb3BlcmFuZCIpICA7OyBv bGQgdmFsdWUgYXQgbWVtCi0gICAobWF0Y2hfb3BlcmFuZDpHUFIgMSAibWVtb3J5X29wZXJh bmQiKSAgICA7OyBtZW0gbG9jYXRpb24KKyAgIChtYXRjaF9vcGVyYW5kOkdQUiAxICJyaXNj dl9hdG9taWNfbWVtb3J5X29wZXJhbmQiKSAgICA7OyBtZW0gbG9jYXRpb24KICAgIChtYXRj aF9vcGVyYW5kOkdQUiAyICJyZWdpc3Rlcl9vcGVyYW5kIikgIDs7IHZhbHVlIGZvciBvcAog ICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAiY29uc3RfaW50X29wZXJhbmQiKV0gOzsgbW9kZWwK ICAgIlRBUkdFVF9aQUFNTyB8fCBUQVJHRVRfWkFMUlNDIgpAQCAtNDAzLDcgKzQwMyw3IEBA IChkZWZpbmVfZXhwYW5kICJhdG9taWNfZXhjaGFuZ2U8bW9kZT4iCiAoZGVmaW5lX2luc24g ImFtb19hdG9taWNfZXhjaGFuZ2U8bW9kZT4iCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkdQ UiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQogCSh1bnNwZWNfdm9sYXRpbGU6R1BSCi0J ICBbKG1hdGNoX29wZXJhbmQ6R1BSIDEgIm1lbW9yeV9vcGVyYW5kIiAiK0EiKQorCSAgWyht YXRjaF9vcGVyYW5kOkdQUiAxICJyaXNjdl9hdG9taWNfbWVtb3J5X29wZXJhbmQiICIrQSIp CiAJICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAiY29uc3RfaW50X29wZXJhbmQiKV0gOzsgbW9k ZWwKIAkgIFVOU1BFQ1ZfU1lOQ19FWENIQU5HRSkpCiAgICAoc2V0IChtYXRjaF9kdXAgMSkK QEAgLTQxNiw3ICs0MTYsNyBAQCAoZGVmaW5lX2luc24gImFtb19hdG9taWNfZXhjaGFuZ2U8 bW9kZT4iCiAoZGVmaW5lX2luc24gImFtb19hdG9taWNfZXhjaGFuZ2VfZXh0ZW5kZWQiCiAg IFsoc2V0IChtYXRjaF9vcGVyYW5kOkRJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCiAg ICAgKHNpZ25fZXh0ZW5kOkRJICh1bnNwZWNfdm9sYXRpbGU6U0kKLSAgICAgIFsobWF0Y2hf b3BlcmFuZDpTSSAxICJtZW1vcnlfb3BlcmFuZCIgIitBIikKKyAgICAgIFsobWF0Y2hfb3Bl cmFuZDpTSSAxICJyaXNjdl9hdG9taWNfbWVtb3J5X29wZXJhbmQiICIrQSIpCiAgICAgICAg KG1hdGNoX29wZXJhbmQ6U0kgMyAiY29uc3RfaW50X29wZXJhbmQiKV0gOzsgbW9kZWwKICAg ICAgIFVOU1BFQ1ZfU1lOQ19FWENIQU5HRSkpKQogICAgKHNldCAobWF0Y2hfZHVwIDEpCkBA IC00MjksNyArNDI5LDcgQEAgKGRlZmluZV9pbnNuICJhbW9fYXRvbWljX2V4Y2hhbmdlX2V4 dGVuZGVkIgogKGRlZmluZV9pbnNuICJscnNjX2F0b21pY19leGNoYW5nZTxtb2RlPiIKICAg WyhzZXQgKG1hdGNoX29wZXJhbmQ6R1BSIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9JnIiKQog CSh1bnNwZWNfdm9sYXRpbGU6R1BSCi0JICBbKG1hdGNoX29wZXJhbmQ6R1BSIDEgIm1lbW9y eV9vcGVyYW5kIiAiK0EiKQorCSAgWyhtYXRjaF9vcGVyYW5kOkdQUiAxICJyaXNjdl9hdG9t aWNfbWVtb3J5X29wZXJhbmQiICIrQSIpCiAJICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAiY29u c3RfaW50X29wZXJhbmQiKV0gOzsgbW9kZWwKIAkgIFVOU1BFQ1ZfU1lOQ19FWENIQU5HRSkp CiAgICAoc2V0IChtYXRjaF9kdXAgMSkKQEAgLTQ0Nyw3ICs0NDcsNyBAQCAoZGVmaW5lX2lu c24gImxyc2NfYXRvbWljX2V4Y2hhbmdlPG1vZGU+IgogCiAoZGVmaW5lX2V4cGFuZCAiYXRv bWljX2V4Y2hhbmdlPG1vZGU+IgogICBbKG1hdGNoX29wZXJhbmQ6U0hPUlQgMCAicmVnaXN0 ZXJfb3BlcmFuZCIpIDs7IG9sZCB2YWx1ZSBhdCBtZW0KLSAgIChtYXRjaF9vcGVyYW5kOlNI T1JUIDEgIm1lbW9yeV9vcGVyYW5kIikgICA7OyBtZW0gbG9jYXRpb24KKyAgIChtYXRjaF9v cGVyYW5kOlNIT1JUIDEgInJpc2N2X2F0b21pY19tZW1vcnlfb3BlcmFuZCIpICAgOzsgbWVt IGxvY2F0aW9uCiAgICAobWF0Y2hfb3BlcmFuZDpTSE9SVCAyICJyZWdpc3Rlcl9vcGVyYW5k IikgOzsgdmFsdWUKICAgIChtYXRjaF9vcGVyYW5kOlNJIDMgImNvbnN0X2ludF9vcGVyYW5k IildICA7OyBtb2RlbAogICAiKFRBUkdFVF9aQUxSU0MgJiYgVEFSR0VUX0lOTElORV9TVUJX T1JEX0FUT01JQykgfHwgVEFSR0VUX1pBQkhBIgpAQCAtNDY0LDcgKzQ2NCw3IEBAIChkZWZp bmVfZXhwYW5kICJhdG9taWNfZXhjaGFuZ2U8bW9kZT4iCiAoZGVmaW5lX2luc24gInphYmhh X2F0b21pY19leGNoYW5nZTxtb2RlPiIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0hPUlQg MCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKIAkodW5zcGVjX3ZvbGF0aWxlOlNIT1JUCi0J ICBbKG1hdGNoX29wZXJhbmQ6U0hPUlQgMSAibWVtb3J5X29wZXJhbmQiICIrQSIpCisJICBb KG1hdGNoX29wZXJhbmQ6U0hPUlQgMSAicmlzY3ZfYXRvbWljX21lbW9yeV9vcGVyYW5kIiAi K0EiKQogCSAgIChtYXRjaF9vcGVyYW5kOlNJIDMgImNvbnN0X2ludF9vcGVyYW5kIildIDs7 IG1vZGVsCiAJICBVTlNQRUNWX1NZTkNfRVhDSEFOR0VfWkFCSEEpKQogICAgKHNldCAobWF0 Y2hfZHVwIDEpCkBAIC00NzYsNyArNDc2LDcgQEAgKGRlZmluZV9pbnNuICJ6YWJoYV9hdG9t aWNfZXhjaGFuZ2U8bW9kZT4iCiAKIChkZWZpbmVfZXhwYW5kICJscnNjX2F0b21pY19leGNo YW5nZTxtb2RlPiIKICAgWyhtYXRjaF9vcGVyYW5kOlNIT1JUIDAgInJlZ2lzdGVyX29wZXJh bmQiKSA7OyBvbGQgdmFsdWUgYXQgbWVtCi0gICAobWF0Y2hfb3BlcmFuZDpTSE9SVCAxICJt ZW1vcnlfb3BlcmFuZCIpICAgOzsgbWVtIGxvY2F0aW9uCisgICAobWF0Y2hfb3BlcmFuZDpT SE9SVCAxICJyaXNjdl9hdG9taWNfbWVtb3J5X29wZXJhbmQiKSAgIDs7IG1lbSBsb2NhdGlv bgogICAgKG1hdGNoX29wZXJhbmQ6U0hPUlQgMiAicmVnaXN0ZXJfb3BlcmFuZCIpIDs7IHZh bHVlCiAgICAobWF0Y2hfb3BlcmFuZDpTSSAzICJjb25zdF9pbnRfb3BlcmFuZCIpXSAgOzsg bW9kZWwKICAgIiFUQVJHRVRfWkFCSEEgJiYgVEFSR0VUX1pBTFJTQyAmJiBUQVJHRVRfSU5M SU5FX1NVQldPUkRfQVRPTUlDIgpAQCAtNTA5LDcgKzUwOSw3IEBAIChkZWZpbmVfZXhwYW5k ICJscnNjX2F0b21pY19leGNoYW5nZTxtb2RlPiIKIAogKGRlZmluZV9pbnNuICJzdWJ3b3Jk X2F0b21pY19leGNoYW5nZV9zdHJvbmciCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNJIDAg InJlZ2lzdGVyX29wZXJhbmQiICI9JnIiKQkgOzsgb2xkIHZhbHVlIGF0IG1lbQotCShtYXRj aF9vcGVyYW5kOlNJIDEgIm1lbW9yeV9vcGVyYW5kIiAiK0EiKSkJIDs7IG1lbSBsb2NhdGlv bgorCShtYXRjaF9vcGVyYW5kOlNJIDEgInJpc2N2X2F0b21pY19tZW1vcnlfb3BlcmFuZCIg IitBIikpCSA7OyBtZW0gbG9jYXRpb24KICAgIChzZXQgKG1hdGNoX2R1cCAxKQogCSh1bnNw ZWNfdm9sYXRpbGU6U0kKIAkgIFsobWF0Y2hfb3BlcmFuZDpTSSAyICJhcml0aF9vcGVyYW5k IiAickkiKQkgOzsgdmFsdWUKQEAgLTUzOCw3ICs1MzgsNyBAQCAoZGVmaW5lX2luc24gInN1 YndvcmRfYXRvbWljX2V4Y2hhbmdlX3N0cm9uZyIKIDs7IE1vcmUgZGV0YWlsczogaHR0cHM6 Ly9naXRodWIuY29tL3Jpc2N2LW5vbi1pc2EvcmlzY3YtZWxmLXBzYWJpLWRvYy9pc3N1ZXMv NDQ0CiAoZGVmaW5lX2luc24gInphY2FzX2F0b21pY19jYXNfdmFsdWVfc3Ryb25nPG1vZGU+ IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpHUFIgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj0m ciIpCQkJICAgIDs7IHZhbCBvdXRwdXQKLQkobWF0Y2hfb3BlcmFuZDpHUFIgMSAibWVtb3J5 X29wZXJhbmQiICIrQSIpKQkJCSAgICA7OyBtZW1vcnkKKwkobWF0Y2hfb3BlcmFuZDpHUFIg MSAicmlzY3ZfYXRvbWljX21lbW9yeV9vcGVyYW5kIiAiK0EiKSkJCQkgICAgOzsgbWVtb3J5 CiAgICAoc2V0IChtYXRjaF9kdXAgMSkKIAkodW5zcGVjX3ZvbGF0aWxlOkdQUiBbKG1hdGNo X29wZXJhbmQ6R1BSIDIgInJlZ2lzdGVyX29wZXJhbmQiICIwIikgIDs7IGV4cGVjdGVkIHZh bAogCQkJICAgICAgKG1hdGNoX29wZXJhbmQ6R1BSIDMgInJlZ19vcl8wX29wZXJhbmQiICJy SiIpIDs7IGRlc2lyZWQgdmFsCkBAIC01NjYsNyArNTY2LDcgQEAgKGRlZmluZV9pbnNuICJ6 YWNhc19hdG9taWNfY2FzX3ZhbHVlX3N0cm9uZzxtb2RlPiIKIAogKGRlZmluZV9pbnNuICJ6 YWxyc2NfYXRvbWljX2Nhc192YWx1ZV9zdHJvbmc8bW9kZT4iCiAgIFsoc2V0IChtYXRjaF9v cGVyYW5kOkdQUiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPSZyIikKLQkobWF0Y2hfb3BlcmFu ZDpHUFIgMSAibWVtb3J5X29wZXJhbmQiICIrQSIpKQorCShtYXRjaF9vcGVyYW5kOkdQUiAx ICJyaXNjdl9hdG9taWNfbWVtb3J5X29wZXJhbmQiICIrQSIpKQogICAgKHNldCAobWF0Y2hf ZHVwIDEpCiAJKHVuc3BlY192b2xhdGlsZTpHUFIgWyhtYXRjaF9vcGVyYW5kOkdQUiAyICJy ZWdfb3JfMF9vcGVyYW5kIiAickoiKQogCQkJICAgICAgKG1hdGNoX29wZXJhbmQ6R1BSIDMg InJlZ19vcl8wX29wZXJhbmQiICJySiIpCkBAIC01OTQsNyArNTk0LDcgQEAgKGRlZmluZV9p bnNuICJ6YWxyc2NfYXRvbWljX2Nhc192YWx1ZV9zdHJvbmc8bW9kZT4iCiAoZGVmaW5lX2V4 cGFuZCAiYXRvbWljX2NvbXBhcmVfYW5kX3N3YXA8bW9kZT4iCiAgIFsobWF0Y2hfb3BlcmFu ZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiIikgICA7OyBib29sIG91dHB1dAogICAgKG1h dGNoX29wZXJhbmQ6R1BSIDEgInJlZ2lzdGVyX29wZXJhbmQiICIiKSAgOzsgdmFsIG91dHB1 dAotICAgKG1hdGNoX29wZXJhbmQ6R1BSIDIgIm1lbW9yeV9vcGVyYW5kIiAiIikgICAgOzsg bWVtb3J5CisgICAobWF0Y2hfb3BlcmFuZDpHUFIgMiAicmlzY3ZfYXRvbWljX21lbW9yeV9v cGVyYW5kIiAiIikgICAgOzsgbWVtb3J5CiAgICAobWF0Y2hfb3BlcmFuZDpHUFIgMyAicmVn aXN0ZXJfb3BlcmFuZCIgIiIpICA7OyBleHBlY3RlZCB2YWx1ZQogICAgKG1hdGNoX29wZXJh bmQ6R1BSIDQgInJlZ19vcl8wX29wZXJhbmQiICIiKSAgOzsgZGVzaXJlZCB2YWx1ZQogICAg KG1hdGNoX29wZXJhbmQ6U0kgNSAiY29uc3RfaW50X29wZXJhbmQiICIiKSAgOzsgaXNfd2Vh awpAQCAtNjUxLDcgKzY1MSw3IEBAIChkZWZpbmVfZXhwYW5kICJhdG9taWNfY29tcGFyZV9h bmRfc3dhcDxtb2RlPiIKIDs7IE1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL3Jp c2N2LW5vbi1pc2EvcmlzY3YtZWxmLXBzYWJpLWRvYy9pc3N1ZXMvNDQ0CiAoZGVmaW5lX2lu c24gInphY2FzX2F0b21pY19jYXNfdmFsdWVfc3Ryb25nPG1vZGU+IgogICBbKHNldCAobWF0 Y2hfb3BlcmFuZDpTSE9SVCAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPSZyIikJCQk7OyB2YWwg b3V0cHV0Ci0JKG1hdGNoX29wZXJhbmQ6U0hPUlQgMSAibWVtb3J5X29wZXJhbmQiICIrQSIp KQkJCQk7OyBtZW1vcnkKKwkobWF0Y2hfb3BlcmFuZDpTSE9SVCAxICJyaXNjdl9hdG9taWNf bWVtb3J5X29wZXJhbmQiICIrQSIpKQkJCQk7OyBtZW1vcnkKICAgIChzZXQgKG1hdGNoX2R1 cCAxKQogCSh1bnNwZWNfdm9sYXRpbGU6U0hPUlQgWyhtYXRjaF9vcGVyYW5kOlNIT1JUIDIg InJlZ2lzdGVyX29wZXJhbmQiICIwIikgIDs7IGV4cGVjdGVkX3ZhbAogCQkJCShtYXRjaF9v cGVyYW5kOlNIT1JUIDMgInJlZ19vcl8wX29wZXJhbmQiICJySiIpIDs7IGRlc2lyZWRfdmFs CkBAIC02ODAsNyArNjgwLDcgQEAgKGRlZmluZV9pbnNuICJ6YWNhc19hdG9taWNfY2FzX3Zh bHVlX3N0cm9uZzxtb2RlPiIKIChkZWZpbmVfZXhwYW5kICJhdG9taWNfY29tcGFyZV9hbmRf c3dhcDxtb2RlPiIKICAgWyhtYXRjaF9vcGVyYW5kOlNJIDAgInJlZ2lzdGVyX29wZXJhbmQi KSAgICA7OyBib29sIG91dHB1dAogICAgKG1hdGNoX29wZXJhbmQ6U0hPUlQgMSAicmVnaXN0 ZXJfb3BlcmFuZCIpIDs7IHZhbCBvdXRwdXQKLSAgIChtYXRjaF9vcGVyYW5kOlNIT1JUIDIg Im1lbW9yeV9vcGVyYW5kIikgICA7OyBtZW1vcnkKKyAgIChtYXRjaF9vcGVyYW5kOlNIT1JU IDIgInJpc2N2X2F0b21pY19tZW1vcnlfb3BlcmFuZCIpICAgOzsgbWVtb3J5CiAgICAobWF0 Y2hfb3BlcmFuZDpTSE9SVCAzICJyZWdpc3Rlcl9vcGVyYW5kIikgOzsgZXhwZWN0ZWQgdmFs dWUKICAgIChtYXRjaF9vcGVyYW5kOlNIT1JUIDQgInJlZ19vcl8wX29wZXJhbmQiKSA7OyBk ZXNpcmVkIHZhbHVlCiAgICAobWF0Y2hfb3BlcmFuZDpTSSA1ICJjb25zdF9pbnRfb3BlcmFu ZCIpICAgOzsgaXNfd2VhawpAQCAtNzI4LDcgKzcyOCw3IEBAIChkZWZpbmVfZXhwYW5kICJh dG9taWNfY29tcGFyZV9hbmRfc3dhcDxtb2RlPiIKIAogKGRlZmluZV9leHBhbmQgInphbHJz Y19hdG9taWNfY2FzX3ZhbHVlX3N0cm9uZzxtb2RlPiIKICAgWyhtYXRjaF9vcGVyYW5kOlNI T1JUIDAgInJlZ2lzdGVyX29wZXJhbmQiKSA7OyB2YWwgb3V0cHV0Ci0gICAobWF0Y2hfb3Bl cmFuZDpTSE9SVCAxICJtZW1vcnlfb3BlcmFuZCIpICAgOzsgbWVtb3J5CisgICAobWF0Y2hf b3BlcmFuZDpTSE9SVCAxICJyaXNjdl9hdG9taWNfbWVtb3J5X29wZXJhbmQiKSAgIDs7IG1l bW9yeQogICAgKG1hdGNoX29wZXJhbmQ6U0hPUlQgMiAicmVnX29yXzBfb3BlcmFuZCIpIDs7 IGV4cGVjdGVkIHZhbHVlCiAgICAobWF0Y2hfb3BlcmFuZDpTSE9SVCAzICJyZWdfb3JfMF9v cGVyYW5kIikgOzsgZGVzaXJlZCB2YWx1ZQogICAgKG1hdGNoX29wZXJhbmQ6U0kgNCAiY29u c3RfaW50X29wZXJhbmQiKSAgIDs7IG1vZF9zCkBAIC03ODMsNyArNzgzLDcgQEAgKGRlZmlu ZV9leHBhbmQgInphbHJzY19hdG9taWNfY2FzX3ZhbHVlX3N0cm9uZzxtb2RlPiIKIAogKGRl ZmluZV9pbnNuICJzdWJ3b3JkX2F0b21pY19jYXNfc3Ryb25nIgogICBbKHNldCAobWF0Y2hf b3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPSZyIikJCQkgICA7OyBvbGQgdmFs dWUgYXQgbWVtCi0JKG1hdGNoX29wZXJhbmQ6U0kgMSAibWVtb3J5X29wZXJhbmQiICIrQSIp KQkJCSAgIDs7IG1lbSBsb2NhdGlvbgorCShtYXRjaF9vcGVyYW5kOlNJIDEgInJpc2N2X2F0 b21pY19tZW1vcnlfb3BlcmFuZCIgIitBIikpCQkJICAgOzsgbWVtIGxvY2F0aW9uCiAgICAo c2V0IChtYXRjaF9kdXAgMSkKIAkodW5zcGVjX3ZvbGF0aWxlOlNJIFsobWF0Y2hfb3BlcmFu ZDpTSSAyICJyZWdfb3JfMF9vcGVyYW5kIiAickoiKSAgOzsgZXhwZWN0ZWQgdmFsdWUKIAkJ CSAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMyAiYXJpdGhfb3BlcmFuZCIgInJJIildIDs7IGRl c2lyZWQgdmFsdWUKQEAgLTgwOSw3ICs4MDksNyBAQCAoZGVmaW5lX2luc24gInN1YndvcmRf YXRvbWljX2Nhc19zdHJvbmciCiAKIChkZWZpbmVfZXhwYW5kICJhdG9taWNfdGVzdF9hbmRf c2V0IgogICBbKG1hdGNoX29wZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIiIpICAg IDs7IGJvb2wgb3V0cHV0Ci0gICAobWF0Y2hfb3BlcmFuZDpRSSAxICJtZW1vcnlfb3BlcmFu ZCIgIitBIikgICAgOzsgbWVtb3J5CisgICAobWF0Y2hfb3BlcmFuZDpRSSAxICJyaXNjdl9h dG9taWNfbWVtb3J5X29wZXJhbmQiICIrQSIpICAgIDs7IG1lbW9yeQogICAgKG1hdGNoX29w ZXJhbmQ6U0kgMiAiY29uc3RfaW50X29wZXJhbmQiICIiKV0gIDs7IG1vZGVsCiAgICJUQVJH RVRfWkFBTU8gfHwgVEFSR0VUX1pBTFJTQyIKIHsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9yaXNjdi9wcjEwODAzMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L3Jpc2N2L3ByMTA4MDMxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjZmN2UxM2E0YjJiCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L3Jpc2N2L3ByMTA4MDMxLmMKQEAgLTAsMCArMSwzMSBAQAorLyogeyBkZy1k byBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tYXJjaD1ydjY0Z2MgLW1h Ymk9bHA2NGQgLWZkdW1wLXJ0bC1leHBhbmQgLWZkdW1wLXJ0bC1jc2UxIiB7IHRhcmdldCB7 IHJ2NjQgfSB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tYXJjaD1ydjMyZ2MgLW1h Ymk9aWxwMzJkIC1mZHVtcC1ydGwtZXhwYW5kIC1mZHVtcC1ydGwtY3NlMSIgeyB0YXJnZXQg eyBydjMyIH0gfSB9ICovCisKK3N0cnVjdCBzIHsKKyAgaW50IGE7CisgIGludCBiOworfTsK Kworc3RydWN0IHMgczsKKworaW50IGYodm9pZCkKK3sKKyAgcmV0dXJuIF9fYXRvbWljX2Zl dGNoX2FkZCgmcy5hLCAxLCAwKSArIF9fYXRvbWljX2ZldGNoX2FkZCgmcy5iLCAxLCAwKTsK K30KKworCitzdHJ1Y3QgczIgeworICBsb25nIGE7CisgIGxvbmcgYjsKK307CisKK3N0cnVj dCBzMiBzMjsKKworbG9uZyBmMih2b2lkKQoreworICByZXR1cm4gX19hdG9taWNfZmV0Y2hf YWRkKCZzMi5hLCAxLCAwKSArIF9fYXRvbWljX2ZldGNoX2FkZCgmczIuYiwgMSwgMCk7Cit9 CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXJ0bC1kdW1wLW5vdCAibWVtXFteXHJcbl0qbG9f c3VtIiAiZXhwYW5kIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXJ0bC1kdW1wLW5v dCAibWVtXFteXHJcbl0qbG9fc3VtIiAiY3NlMSIgfSB9ICovCg== --------------3OS6m1ih460aa6nODnHWJQpy--