Re: master: Perform local common subexpression elimination for some memory loads
Stas Boukarev <[email protected]> Tue, 4 Aug 2026 07:04:24 +0300
| Newsgroups | gmane.lisp.steel-bank.cvs,gmane.lisp.steel-bank.devel |
|---|---|
| Message-ID | <CAF63=113B_8vtChqfr2wJ15w4sqzG12CGywQbG0QAV-8NKbM3A@mail.gmail.com> |
KGRlZnVuIGsgKHggbikKICAobGV0ICgoeSAoMSsgeCkpKQogICAgKHZhbHVlcyB5IHkKICAgICAg ICAgICAgKGVxIChjYXIgKGNvcHktdHJlZSBuKSkKICAgICAgICAgICAgICAgIChjYXIgKGNvcHkt dHJlZSBuKSkpKSkpCj0+CihrIDEgJygoMSkpKQo9PgoyCjIKVAoKT24gVHVlLCBBdWcgNCwgMjAy NiBhdCA2OjQ34oCvQU0gU3RhcyBCb3VrYXJldiA8c3Rhc3NhdHNAZ21haWwuY29tPiB3cm90ZToK Pgo+IChkZWZ1biBqICh4KQo+ICAgKGxldCAoKHkgKDErIHgpKSkKPiAgICAgKHZhbHVlcyB5IHkK PiAgICAgICAgICAgICAoY2FyICopCj4gICAgICAgICAgICAgKHNldGYgKiAnKGIpKQo+ICAgICAg ICAgICAgIChjYXIgKikpKSkKPiAobGV0ICgoKiAnKGEpKSkgKGogMSkpCj4gPT4KPiAyCj4gMgo+ IEEKPiAoQikKPiBBCj4KPiBPbiBUdWUsIEF1ZyA0LCAyMDI2IGF0IDQ6MjLigK9BTSBTdGFzIEJv dWthcmV2IDxzdGFzc2F0c0BnbWFpbC5jb20+IHdyb3RlOgo+ID4KPiA+IChkZWZzdHJ1Y3Qgcwo+ ID4gICAoeCAobWFrZS1hcnJheSAzKSkpCj4gPgo+ID4gKGxldCAoKikKPiA+ICAgKGxhbWJkYSAo KQo+ID4gICAgIChsZXQqICgocyAjLihtYWtlLXMpKQo+ID4gICAgICAgICAgICAoYSAocy14IHMp KQo+ID4gICAgICAgICAgICAoYiAocy14IHMpKSkKPiA+ICAgICAgICh2YWx1ZXMgKGFyZWYgYSAw KQo+ID4gICAgICAgICAgICAgICAoYXJlZiBiIDApKSkpKQo+ID4KPiA+Cj4gPiBkZWJ1Z2dlciBp bnZva2VkIG9uIGEgU0ItSU5UOkJVRyBAQjgwMDdCODVBRCBpbiB0aHJlYWQKPiA+ICM8VEhSRUFE IHRpZD0xOTg2NDAyICJtYWluIHRocmVhZCIgUlVOTklORyB7MTIwMTRGMDAwM30+Ogo+ID4gICAg IGZhaWxlZCBBVkVSOiAoRVEgRU5WIChMQU1CREEtRU5WSVJPTk1FTlQgKExBTUJEQS1WQVItSE9N RSBUSElORykpKQo+ID4KPiA+IE9uIFR1ZSwgQXVnIDQsIDIwMjYgYXQgMzo1OeKAr0FNIHNudWds YXMgdmlhIFNiY2wtY29tbWl0cwo+ID4gPHNiY2wtY29tbWl0c0BsaXN0cy5zb3VyY2Vmb3JnZS5u ZXQ+IHdyb3RlOgo+ID4gPgo+ID4gPiBUaGUgYnJhbmNoICJtYXN0ZXIiIGhhcyBiZWVuIHVwZGF0 ZWQgaW4gU0JDTDoKPiA+ID4gICAgICAgIHZpYSAgMTAwYzljMmJkY2RjYjg0ZmYwNGM4ZmVlZjk4 M2E1YjQ0Njk1Yzk3YSAoY29tbWl0KQo+ID4gPiAgICAgICBmcm9tICBiNTQxZjJmMjViMTRiNjJm Y2FiN2UxNGFhNTEyNGRiNWRkMWQ2YjIwIChjb21taXQpCj4gPiA+Cj4gPiA+IC0gTG9nIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCj4gPiA+IGNvbW1pdCAxMDBjOWMyYmRjZGNiODRmZjA0YzhmZWVmOTgzYTViNDQ2OTVjOTdh Cj4gPiA+IEF1dGhvcjogRG91Z2xhcyBLYXR6bWFuIDxkb3Vna0Bnb29nbGUuY29tPgo+ID4gPiBE YXRlOiAgIFR1ZSBBdWcgNCAwMDo1ODoyMSAyMDI2ICswMDAwCj4gPiA+Cj4gPiA+ICAgICBQZXJm b3JtIGxvY2FsIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uIGZvciBzb21lIG1lbW9y eSBsb2Fkcwo+ID4gPgo+ID4gPiAgICAgVGhlIHRlY2huaXF1ZSBpcyB0byBmaW5kICJlcXVpdmFs ZW50IiBsb2FkcyBpbiBiZXR3ZWVuIHdoaWNoIHRoZXJlIGlzIG5vCj4gPiA+ICAgICBjb21wdXRh dGlvbiB0aGF0IGFmZmVjdHMgdGhlIHJlc3VsdCBvZiB0aGUgbG9hZC4gQWxzbyBpdCBuZWVkcyBh IHN1cnJvdW5kaW5nCj4gPiA+ICAgICBMRVQsIHdoaWNoIGlzIGF1Z21lbnRlZCB3aXRoIGEgbmV3 IHRlbXAgdmFyaWFibGUgYXMgaWYgdGhlIHVzZXIgZGlkIHRoYXQuCj4gPiA+ICAgICBUaGlzIGlz IHNsaWdodGx5IGRlZmljaWVudCBmb3IgdmFyaW91cyByZWFzb25zOgo+ID4gPiAgICAgMS4gaXQg d29uJ3QgZG8gYW55dGhpbmcgd2l0aG91dCB0aGUgTEVUCj4gPiA+ICAgICAyLiB0aGUgbW9yZSBr aW5kcyBvZiBjb21tb24gc3ViZXhwcmVzc2lvbnMgd2UgYWxsb3cgKHN1Y2ggYXMgbWF0aCksCj4g PiA+ICAgICAgICB0aGUgc2xvd2VyIElSMS1PUFRJTUlaRS1DT01CSU5BVElPTiBpcyBnb2luZyB0 byBydW4KPiA+ID4gICAgIDMuIHRoZXJlIGFyZSBwb3NzaWJseSBvdGhlciBub2RlIHR5cGVzIHRo YXQgc2hvdWxkIGJlIGFsbG93ZWQgdG8gaW50ZXJ2ZW5lCj4gPiA+Cj4gPiA+ICAgICBPbiB0aGUg cGx1cyBzaWRlLCBpdCdzIG5vdCBhbGwgdGhhdCBoYXJkIHRvIGV4dGVuZCB0aGUgbG9naWMgdG8g YWNjZXB0Cj4gPiA+ICAgICBvdGhlciBmdW5jdGlvbnMgYXMgcGFydGljaXBhbnRzIGluIGNvbW1v biBzdWJleHByZXNzaW9ucy4KPiA+ID4KPiA+ID4gICAgIEFsbCB0ZXN0IGNhc2VzIHBsdXMgYSBs aXR0bGUgYml0IG9mIGFzc2lzdGFuY2UgZnJvbSBHZW1pbmkKPiA+ID4gLS0tCj4gPiA+ICBzcmMv Y29tcGlsZXIvaXIxb3B0Lmxpc3AgfCAxNzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCj4gPiA+ICB0ZXN0cy9sY3NlLnB1cmUubGlzcCAgICAgfCAyMzQgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ID4gIHhwZXJmZWN0aGFzaDMw Lmxpc3AtZXhwciB8ICAgMyArCj4gPiA+ICB4cGVyZmVjdGhhc2g2MS5saXNwLWV4cHIgfCAgIDMg Kwo+ID4gPiAgeHBlcmZlY3RoYXNoNjMubGlzcC1leHByIHwgICAzICsKPiA+ID4gIDUgZmlsZXMg Y2hhbmdlZCwgNDIyIGluc2VydGlvbnMoKykKPiA+ID4KPiA+ID4gZGlmZiAtLWdpdCBhL3NyYy9j b21waWxlci9pcjFvcHQubGlzcCBiL3NyYy9jb21waWxlci9pcjFvcHQubGlzcAo+ID4gPiBpbmRl eCA4NTU5ODI0ZjEuLmRhYzM5M2UzMSAxMDA2NDQKPiA+ID4gLS0tIGEvc3JjL2NvbXBpbGVyL2ly MW9wdC5saXNwCj4gPiA+ICsrKyBiL3NyYy9jb21waWxlci9pcjFvcHQubGlzcAo+ID4gPiBAQCAt MTIyMCw2ICsxMjIwLDE4MiBAQAo+ID4gPiAgICAgICAgICAgICAgKHNob3ctdHlwZS1kZXJpdmF0 aW9uIGNvbWJpbmF0aW9uIHJlcykpCj4gPiA+ICAgICAgICAgICAgKGNvZXJjZS10by12YWx1ZXMg cmVzKSkpKSkpCj4gPiA+Cj4gPiA+ICsoZGVmdW4gY29sbGVjdC1sdmFyLXZhcnMgKGx2YXIpCj4g PiA+ICsgIChkZWNsYXJlICh0eXBlIGx2YXIgbHZhcikpCj4gPiA+ICsgIChsZXQgKCh1c2UgKHBy aW5jaXBhbC1sdmFyLXVzZSBsdmFyKSkpCj4gPiA+ICsgICAgKGNvbmQgKChyZWYtcCB1c2UpCj4g PiA+ICsgICAgICAgICAgIChsZXQgKChsZWFmIChyZWYtbGVhZiB1c2UpKSkKPiA+ID4gKyAgICAg ICAgICAgICAod2hlbiAobGFtYmRhLXZhci1wIGxlYWYpCj4gPiA+ICsgICAgICAgICAgICAgICAo bGlzdCBsZWFmKSkpKQo+ID4gPiArICAgICAgICAgICgoY29tYmluYXRpb24tcCB1c2UpCj4gPiA+ ICsgICAgICAgICAgIChtYXBjYW4gIydjb2xsZWN0LWx2YXItdmFycyAoYmFzaWMtY29tYmluYXRp b24tYXJncyB1c2UpKSkKPiA+ID4gKyAgICAgICAgICAodCBuaWwpKSkpCj4gPiA+ICsKPiA+ID4g KyhkZWZ1biBmaW5kLWFjdGl2ZS1sZXQtbGFtYmRhIChub2RlKQo+ID4gPiArICAoZGVjbGFyZSAo dHlwZSBub2RlIG5vZGUpKQo+ID4gPiArICAobG9vcCBmb3IgZW52ID0gKG5vZGUtbGV4ZW52IG5v ZGUpIHRoZW4gKGxleGVudi1wYXJlbnQgZW52KQo+ID4gPiArICAgICAgICB3aGlsZSBlbnYKPiA+ ID4gKyAgICAgICAgZG8gKGxldCAoKGwgKGxleGVudi1sYW1iZGEgZW52KSkpCj4gPiA+ICsgICAg ICAgICAgICAgKHdoZW4gKGFuZCBsCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAoZnVu Y3Rpb25hbC1raW5kLWVxIGwgbGV0KQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgKG5v dCAoZnVuY3Rpb25hbC1raW5kLWVxIGwgem9tYmllKSkpCj4gPiA+ICsgICAgICAgICAgICAgICAo cmV0dXJuIGwpKSkpKQo+ID4gPiArCj4gPiA+ICsoZGVmdW4gYWRkLXZhcmlhYmxlLXRvLWxldC1s YW1iZGEgKGxldC1sYW1iZGEgdikKPiA+ID4gKyAgKGRlY2xhcmUgKHR5cGUgY2xhbWJkYSBsZXQt bGFtYmRhKQo+ID4gPiArICAgICAgICAgICAodHlwZSBsYW1iZGEtdmFyIHYpKQo+ID4gPiArICAo c2V0ZiAobGFtYmRhLXZhci1ob21lIHYpIGxldC1sYW1iZGEpCj4gPiA+ICsgIChzZXRmIChsYW1i ZGEtdmFycyBsZXQtbGFtYmRhKSAoYXBwZW5kIChsYW1iZGEtdmFycyBsZXQtbGFtYmRhKSAobGlz dCB2KSkpCj4gPiA+ICsgIDs7IFVwZGF0ZSB0aGUgY2FsbCB0byB0aGUgTEVUIGxhbWJkYQo+ID4g PiArICAobGV0KiAoKHJlZiAoY2FyIChsZWFmLXJlZnMgbGV0LWxhbWJkYSkpKQo+ID4gPiArICAg ICAgICAgKGNhbGwgKGFuZCByZWYKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgKG5vZGUtbHZh ciByZWYpCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgIChsdmFyLWRlc3QgKG5vZGUtbHZhciBy ZWYpKSkpKQo+ID4gPiArICAgICh3aGVuIChhbmQgY2FsbCAoY29tYmluYXRpb24tcCBjYWxsKSkK PiA+ID4gKyAgICAgIChsZXQgKChkdW1teS1sdmFyIChtYWtlLWx2YXIpKSkKPiA+ID4gKyAgICAg ICAgKHNldGYgKGx2YXItZGVzdCBkdW1teS1sdmFyKSBjYWxsKQo+ID4gPiArICAgICAgICAoc2V0 ZiAoYmFzaWMtY29tYmluYXRpb24tYXJncyBjYWxsKQo+ID4gPiArICAgICAgICAgICAgICAoYXBw ZW5kIChiYXNpYy1jb21iaW5hdGlvbi1hcmdzIGNhbGwpIChsaXN0IGR1bW15LWx2YXIpKSkKPiA+ ID4gKyAgICAgICAgKHNldGYgKGx2YXItZGVzdCBkdW1teS1sdmFyKSBjYWxsKSkpKSkKPiA+ID4g Kwo+ID4gPiArOzsgUmV1c2Ugb2YgU1lNQk9MLVZBTFVFIG9mIGEgc3BlY2lhbCB2YXIgd291bGQg YmUgbmljZSwKPiA+ID4gKzs7IGJ1dCBTWU1CT0wtVkFMVUUgaXQgaXMgbm90IHJlcHJlc2VudGVk IGFzIGEgY2FsbCBpbiBJUjEKPiA+ID4gKyhkZWZpbmUtbG9hZC10aW1lLWdsb2JhbCAqZWxpZGFi bGUtbWVtb3J5LWxvYWRzKgo+ID4gPiArICAgICcoY2FyIGNkciAlaW5zdGFuY2UtcmVmICVyYXct aW5zdGFuY2UtcmVmL3dvcmQgJXJhdy1pbnN0YW5jZS1yZWYvc2lnbmVkLXdvcmQKPiA+ID4gKyAg ICAgIHNhcC1yZWYtMTYgc2lnbmVkLXNhcC1yZWYtMTYgc2Itc3lzOjolc2FwLXJlZi0xNi1pbmRl eGVkIHNiLXN5czo6JXNpZ25lZC1zYXAtcmVmLTE2LWluZGV4ZWQKPiA+ID4gKyAgICAgIHNhcC1y ZWYtMzIgc2lnbmVkLXNhcC1yZWYtMzIgc2Itc3lzOjolc2FwLXJlZi0zMi1pbmRleGVkIHNiLXN5 czo6JXNpZ25lZC1zYXAtcmVmLTMyLWluZGV4ZWQKPiA+ID4gKyAgICAgIHNhcC1yZWYtNjQgc2ln bmVkLXNhcC1yZWYtNjQgc2Itc3lzOjolc2FwLXJlZi02NC1pbmRleGVkIHNiLXN5czo6JXNpZ25l ZC1zYXAtcmVmLTY0LWluZGV4ZWQKPiA+ID4gKyAgICAgIHNiLWFsaWVuOmRlcmVmCj4gPiA+ICsg ICAgICBzYi1hbGllbjphbGllbi1zYXApKQo+ID4gPiArCj4gPiA+ICs7OzsgTG9vayBmb3IgYW55 IG5vZGUgZXF1aXZhbGVudCB0byBNQVRDSCBjb25zZGVyaW5nIG5vZGVzIGluIHJldmVyc2Ugc3Rh cnRpbmcgYXQgRlJPTS4KPiA+ID4gKzs7OyBNZW1vcnkgbG9hZHMgZnJvbSB0aGUgc2FtZSBvYmpl Y3Qrc2xvdCBvciBTQVArb2Zmc2V0IGNvdWxkIGJlIGVxdWl2YWxlbnQuCj4gPiA+ICs7OzsgTm90 aGluZyBlbHNlIGNhbiBiZSBlcXVpdmFsZW50ICh1bnRpbCBJIGVuaGFuY2UgdGhpcykKPiA+ID4g KyhkZWZ1biBmaW5kLWVxdWl2YWxlbnQtbm9kZS1iYWNrd2FyZHMgKG1hdGNoIGZyb20pCj4gPiA+ ICsgIChsYWJlbHMgKChsdmFyLWVxdWl2YWxlbnQtcCAobDEgbDIpCj4gPiA+ICsgICAgICAgICAg ICAgKGRlY2xhcmUgKHR5cGUgbHZhciBsMSBsMikpCj4gPiA+ICsgICAgICAgICAgICAgKGNvbmQg KChlcSBsMSBsMikgdCkKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAoKGFuZCAoY29uc3RhbnQt bHZhci1wIGwxKSAoY29uc3RhbnQtbHZhci1wIGwyKSkKPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgKGVxbCAobHZhci12YWx1ZSBsMSkgKGx2YXItdmFsdWUgbDIpKSkKPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAodAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAobGV0ICgodTEgKHByaW5j aXBhbC1sdmFyLXVzZSBsMSkpCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICh1MiAo cHJpbmNpcGFsLWx2YXItdXNlIGwyKSkpCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgKGNv bmQgKChhbmQgKHJlZi1wIHUxKSAocmVmLXAgdTIpKQo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoZXEgKHJlZi1sZWFmIHUxKSAocmVmLWxlYWYgdTIpKSkKPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoKGFuZCAoY29tYmluYXRpb24tcCB1MSkgKGNvbWJpbmF0 aW9uLXAgdTIpCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVxIChi YXNpYy1jb21iaW5hdGlvbi1raW5kIHUxKSA6a25vd24pCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGVxIChiYXNpYy1jb21iaW5hdGlvbi1raW5kIHUyKSA6a25vd24p KQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tYmluYXRpb24tZXF1aXZh bGVudC1wIHUxIHUyKSkKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodCBuaWwp KSkpKSkKPiA+ID4gKyAgICAgICAgICAgKGNvbWJpbmF0aW9uLWVxdWl2YWxlbnQtcCAoYzEgYzIp Cj4gPiA+ICsgICAgICAgICAgICAgKGRlY2xhcmUgKHR5cGUgY29tYmluYXRpb24gYzEgYzIpKQo+ ID4gPiArICAgICAgICAgICAgIChhbmQgKGVxIChiYXNpYy1jb21iaW5hdGlvbi1mdW4taW5mbyBj MSkgKGJhc2ljLWNvbWJpbmF0aW9uLWZ1bi1pbmZvIGMyKSkKPiA+ID4gKyAgICAgICAgICAgICAg ICAgIChsZXQgKChhcmdzMSAoYmFzaWMtY29tYmluYXRpb24tYXJncyBjMSkpCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAoYXJnczIgKGJhc2ljLWNvbWJpbmF0aW9uLWFyZ3MgYzIpKSkK PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgKGFuZCAoPSAobGVuZ3RoIGFyZ3MxKSAobGVuZ3Ro IGFyZ3MyKSkKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAoZXZlcnkgIydsdmFyLWVx dWl2YWxlbnQtcCBhcmdzMSBhcmdzMikpKSkpKQo+ID4gPiArICAgIChkbyAoKG5vZGUgZnJvbSAo Y3RyYW4tdXNlIChub2RlLXByZXYgbm9kZSkpKSkgKChudWxsIG5vZGUpKQo+ID4gPiArICAgICAg KHdoZW4gKGFuZCAoY29tYmluYXRpb24tcCBub2RlKQo+ID4gPiArICAgICAgICAgICAgICAgICAo ZXEgKGNvbWJpbmF0aW9uLWtpbmQgbm9kZSkgOmtub3duKQo+ID4gPiArICAgICAgICAgICAgICAg ICAobm9kZS1sdmFyIG5vZGUpCj4gPiA+ICsgICAgICAgICAgICAgICAgIChjb21iaW5hdGlvbi1l cXVpdmFsZW50LXAgbm9kZSBtYXRjaCkpCj4gPiA+ICsgICAgICAgIChyZXR1cm4gbm9kZSkpCj4g PiA+ICsgICAgICAodHlwZWNhc2Ugbm9kZQo+ID4gPiArICAgICAgICAoKG9yIGNzZXQgcmVmIGNh c3QgY29tYmluYXRpb24gY2lmKSkKPiA+ID4gKyAgICAgICAgKHQKPiA+ID4gKyAgICAgICAgIDs7 IFJldHVybiA6RkFJTCB0byBhYm9ydCBxdWlja2x5LiBUaGlzIGNvdWxkIGNob29zZSB0byBmYWls IGlmIGEgbm9uLWZsdXNoYWJsZQo+ID4gPiArICAgICAgICAgOzsgY29tYmluYXRpb24gaXMgc2Vl biwgYnV0IGZvciBub3cgSSdtIGRlZmVycmluZyB0aGF0IHNvdW5kbmVzcyBjaGVjay4KPiA+ID4g KyAgICAgICAgIChyZXR1cm4tZnJvbSBmaW5kLWVxdWl2YWxlbnQtbm9kZS1iYWNrd2FyZHMgOmZh aWwpKSkpKSkKPiA+ID4gKwo+ID4gPiArOzs7IEF0dG1wdCB0byBmaW5kIGEgQ09NQklOQVRJT04g ZXF1aXZhbGVudCB0byBUSElTIHByZWNlZGluZyBpdCBpbiBub2RlIG9yZGVyLCB0aGUgdmFsdWUK PiA+ID4gKzs7OyBvZiB3aGljaCBjYW4gYmUgc3Vic3RpdHV0ZWQgZm9yIHRoZSBjYWxsIHRvIFRI SVMsIGFjdHVhbGx5IG1ha2luZyB0aGUgc3Vic3RpdHV0aW9uLgo+ID4gPiArOzs7IExvb2tpbmcg YmFja3dhcmRzIGF0IG1vc3QgYSBmZXcgYmxvY2tzIHRlbmRzIHRvIHdvcmsgd2VsbCBlbm91Z2gs IGFuZCBpbnBvcnRhbnRseQo+ID4gPiArOzs7IGxpbWl0cyB0aGUgd29yay4gU2Nhbm5pbmcgb25s eSB0aGUgY3VycmVudCBibG9jayBpcyBpbmFkZXF1YXRlIGFzIHRoZSBleGFtcGxlCj4gPiA+ICs7 OzsgaW4gOkxPT1AtT1ZFUi1ERVJFRiBzaG93cy4gVGhlIGltbWVkaWF0ZSBwcmVkZWNlc3NvciBp cyBzdGlsbCBub3QgZW5vdWdoLCBiZWNhdXNlIHRoZQo+ID4gPiArOzs7IHByZWRlY2Vzc29yIGNv dWxkIGhhdmUgYmVlbiBzcGxpdCwgbGVhdmluZyBhIHRpbnkgYmxvY2sgd2hlcmUgdGhlIG9ubHkg bm9kZSBpcwo+ID4gPiArOzs7IGEgdHJpdmlhbCBvcGVyYXRpb24uCj4gPiA+ICsoZGVmdW4gdHJ5 LXJldXNlLWV4cHItdmFsdWUgKHRoaXMpCj4gPiA+ICsgIChkZWNsYXJlICh0eXBlIGNvbWJpbmF0 aW9uIHRoaXMpKQo+ID4gPiArICAoYmluZGluZyoKPiA+ID4gKyAgICAgICgoaG9tZS1sYW1iZGEg KGZpbmQtYWN0aXZlLWxldC1sYW1iZGEgdGhpcykgOmV4aXQtaWYtbnVsbCkKPiA+ID4gKyAgICAg ICAobG9va2JhY2sgMCkKPiA+ID4gKyAgICAgICAoYzEKPiA+ID4gKyAgICAgICAgOzsgSW4gdGhp cyBibG9jaywgZXhwbGljaXRseSBnbyBiYWNrIGEgbm9kZSBzbyB0aGF0IEZJTkQtQkFDS1dBUkRT IGRvZXNuJ3QgY29uc2lkZXIgVEhJUwo+ID4gPiArICAgICAgICA7OyBhcyBlcXVpdmFsZW50IHRv IGl0c2VsZi4gRmFpbGluZyB0aGF0LCB0cnkgcHJlZGVjZXNzb3IgYmxvY2tzLCBidXQgb25seSBh cyBsb25nIGFzCj4gPiA+ICsgICAgICAgIDs7IHByZWQgaXMgdW5pcXVlIHNpbmNlIHdlIGhhdmUg bm8gaW5mb3JtYXRpb24gYWJvdXQgbm9kZXMgdGhhdCBkb21pbmF0ZSBUSElTLgo+ID4gPiArICAg ICAgICAob3IgKGZpbmQtZXF1aXZhbGVudC1ub2RlLWJhY2t3YXJkcyB0aGlzIChjdHJhbi11c2Ug KG5vZGUtcHJldiB0aGlzKSkpCj4gPiA+ICsgICAgICAgICAgICAoZG8gKChwcmVkIChibG9jay1w cmVkIChub2RlLWJsb2NrIHRoaXMpKSkpCj4gPiA+ICsgICAgICAgICAgICAgICAgKChvciAoPiBs b29rYmFjayAzKSAobm90IChzaW5nbGV0b24tcCBwcmVkKSkpKQo+ID4gPiArICAgICAgICAgICAg ICAoaW5jZiBsb29rYmFjaykKPiA+ID4gKyAgICAgICAgICAgICAgKGxldCAoKG5vZGUgKGJsb2Nr LWxhc3QgKGNhciBwcmVkKSkpKQo+ID4gPiArICAgICAgICAgICAgICAgICh3aGVuIChudWxsIG5v ZGUpIChyZXR1cm4pKQo+ID4gPiArICAgICAgICAgICAgICAgIChhd2hlbiAoZmluZC1lcXVpdmFs ZW50LW5vZGUtYmFja3dhcmRzIHRoaXMgbm9kZSkgKHJldHVybiBpdCkpCj4gPiA+ICsgICAgICAg ICAgICAgICAgKHNldHEgcHJlZCAoYmxvY2stcHJlZCAobm9kZS1ibG9jayBub2RlKSkpKSkpCj4g PiA+ICsgICAgICAgIDpleGl0LWlmLW51bGwpCj4gPiA+ICsgICAgICAgKHZhcnMgOyBjYW4ndCB1 c2UgOmV4aXQtaWYtbnVsbCBoZXJlIGJlY2F1c2UgVkFSUyBjYW4gYmUgYW5kIHVzdWFsbHkgaXMg TklMCj4gPiA+ICsgICAgICAgICh1bmxlc3MgKGVxIGMxIDpmYWlsKQo+ID4gPiArICAgICAgICAg IChtYXBjYW4gIydjb2xsZWN0LWx2YXItdmFycyAoYmFzaWMtY29tYmluYXRpb24tYXJncyBjMSkp KSkpCj4gPiA+ICsgICAgKHdoZW4gKGVxIGMxIDpmYWlsKQo+ID4gPiArICAgICAgKHJldHVybi1m cm9tIHRyeS1yZXVzZS1leHByLXZhbHVlIG5pbCkpCj4gPiA+ICsgICAgKGxhYmVscyAoKGFsbC1m bHVzaGFibGUgKGN0cmFuIGVuZC1ub2RlKQo+ID4gPiArICAgICAgICAgICAgICAgKGRlY2xhcmUg KGN0cmFuIGN0cmFuKSAodHlwZSAob3Igbm9kZSBudWxsKSBlbmQtbm9kZSkpCj4gPiA+ICsgICAg ICAgICAgICAgICAobG9vcCAobGV0ICgobm9kZSAoY3RyYW4tbmV4dCBjdHJhbikpKQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAoY29uZCAoKGVxIG5vZGUgZW5kLW5vZGUpIChyZXR1cm4g dCkpCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobm90IChvay10by1mbHVz aCBub2RlKSkgKHJldHVybiBuaWwpKQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoKGFuZCAobm90IGVuZC1ub2RlKSAobm90IChub2RlLW5leHQgbm9kZSkpKSAocmV0dXJuIHQp KSkKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgKHNldHEgY3RyYW4gKG5vZGUtbmV4dCBu b2RlKSkpKSkKPiA+ID4gKyAgICAgICAgICAgICAob2stdG8tZmx1c2ggKG5vZGUpCj4gPiA+ICsg ICAgICAgICAgICAgICAoY29uZCAoKHNldC1wIG5vZGUpIChub3QgKG1lbWJlciAoc2V0LXZhciBu b2RlKSB2YXJzKSkpCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAoKGNvbWJpbmF0aW9uLXAg bm9kZSkgKGZsdXNoYWJsZS1jb21iaW5hdGlvbi1wIG5vZGUpKQo+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgKChiYXNpYy1jb21iaW5hdGlvbi1wIG5vZGUpIG5pbCkKPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICh0IHQpKSkpIDsgYW55dGhpbmcgZWxzZSB0aGUgYmFja3dhcmRzIHNlYXJj aCBhbGxvd2VkIGlzIG9rCj4gPiA+ICsgICAgICA7OyBXaGVuIGxvb2tiYWNrPjAgaXQncyBwb3Nz aWJsZSBmb3IgdGhlIGVxdWl2YWxlbnQgbm9kZSB0byBiZSB0aGUgZmluYWwgbm9kZQo+ID4gPiAr ICAgICAgOzsgb2YgaXRzIGJsb2NrLCBpbiB3aGljaCBjYXNlIGl0cyBOT0RFLU5FWFQgaXMgbnVs bC4KPiA+ID4gKyAgICAgIChsZXQqICgodGhpcy1ibG9jayAobm9kZS1ibG9jayB0aGlzKSkKPiA+ ID4gKyAgICAgICAgICAgICAocHJlZCAoY2FyIChibG9jay1wcmVkIHRoaXMtYmxvY2spKSkpCj4g PiA+ICsgICAgICAgICh1bmxlc3MgKGlmICg9IGxvb2tiYWNrIDApCj4gPiA+ICsgICAgICAgICAg ICAgICAgICAgIChhbGwtZmx1c2hhYmxlIChub2RlLW5leHQgYzEpIHRoaXMpCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgIChhbmQKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIDs7IENoZWNr IHByZXYgYmxvY2sgZnJvbSBDMSB0byBpdHMgZW5kIG9mIGJsb2NrLCBhbmQgY3VycmVudCBibG9j ayB1cCB0byBUSElTCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAoYWNvbmQgKChub2RlLW5l eHQgYzEpIChhbGwtZmx1c2hhYmxlIGl0IG5pbCkpICh0IHQpKQo+ID4gPiArICAgICAgICAgICAg ICAgICAgICAgKGFsbC1mbHVzaGFibGUgKGJsb2NrLXN0YXJ0IHRoaXMtYmxvY2spIHRoaXMpCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICA7OyBBbGwgY2hlY2sgYWxsIG9mIG9uZSBvciBib3Ro IGludGVydmVuaW5nIGJsb2Nrcwo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgKG9yICg8IGxv b2tiYWNrIDIpCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgKGFsbC1mbHVzaGFibGUg KGJsb2NrLXN0YXJ0IHByZWQpIG5pbCkpCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAob3Ig KDwgbG9va2JhY2sgMykKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAoYWxsLWZsdXNo YWJsZSAoYmxvY2stc3RhcnQgKGNhciAoYmxvY2stcHJlZCBwcmVkKSkpIG5pbCkpKSkKPiA+ID4g KyAgICAgICAgICAocmV0dXJuLWZyb20gdHJ5LXJldXNlLWV4cHItdmFsdWUgbmlsKSkpKQo+ID4g PiArICAgIDs7IFN1YnN0aXR1dGUgQzEncyByZXN1bHQgaW4gZm9yIFRISVMKPiA+ID4gKyAgICAo YmluZGluZyogKChsdmFyLWMxIChub2RlLWx2YXIgYzEpIDpleGl0LWlmLW51bGwpCj4gPiA+ICsg ICAgICAgICAgICAgICAoY29uc3VtZXItMSAobHZhci1kZXN0IGx2YXItYzEpIDpleGl0LWlmLW51 bGwpCj4gPiA+ICsgICAgICAgICAgICAgICAoYzIgdGhpcykKPiA+ID4gKyAgICAgICAgICAgICAg IChsdmFyLWMyIChub2RlLWx2YXIgYzIpIDpleGl0LWlmLW51bGwpCj4gPiA+ICsgICAgICAgICAg ICAgICAodiAobWFrZS1sYW1iZGEtdmFyIChnZW5zeW0gIlJFVVNFRC1WQUwiKQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6dHlwZSAoc2luZ2xlLXZhbHVlLXR5cGUg KG5vZGUtZGVyaXZlZC10eXBlIGMxKSkpKQo+ID4gPiArICAgICAgICAgICAgICAgKGx2YXItbmV3 IChtYWtlLWx2YXIpKSkKPiA+ID4gKyAgICAgIChhZGQtdmFyaWFibGUtdG8tbGV0LWxhbWJkYSBo b21lLWxhbWJkYSB2KQo+ID4gPiArCj4gPiA+ICsgICAgICA7OyAxLiBSZWRpcmVjdCBjb25zdW1l ci0xIHRvIHJlYWQgZnJvbSBsdmFyLW5ldwo+ID4gPiArICAgICAgKHN1YnN0aXR1dGUtbHZhciBs dmFyLW5ldyBsdmFyLWMxKQo+ID4gPiArCj4gPiA+ICsgICAgICAod2l0aC1pcjEtZW52aXJvbm1l bnQtZnJvbS1ub2RlIGMxCj4gPiA+ICsgICAgICAgIDs7IDIuIE1ha2UgQzEgd3JpdGUgdG8gYSBu ZXcgTFZBUiwgYW5kIGxpbmsgaXQgdG8gYSBDU0VUIG9uIFYKPiA+ID4gKyAgICAgICAgKGxldCAo KGx2YXItYzEtbmV3IChtYWtlLWx2YXIpKSkKPiA+ID4gKyAgICAgICAgICAoJWRlbGV0ZS1sdmFy LXVzZSBjMSkKPiA+ID4gKyAgICAgICAgICAodXNlLWx2YXIgYzEgbHZhci1jMS1uZXcpCj4gPiA+ ICsgICAgICAgICAgOzsgMy4gQ3JlYXRlIFMxIChzZXQgViA9IGx2YXItYzEtbmV3KSBhbmQgaW5z ZXJ0IGFmdGVyIEMxCj4gPiA+ICsgICAgICAgICAgKGxldCAoKHMxIChtYWtlLXNldCB2IGx2YXIt YzEtbmV3KSkpCj4gPiA+ICsgICAgICAgICAgICAoc2V0ZiAobHZhci1kZXN0IGx2YXItYzEtbmV3 KSBzMSkKPiA+ID4gKyAgICAgICAgICAgIChwdXNoIHMxIChiYXNpYy12YXItc2V0cyB2KSkKPiA+ ID4gKyAgICAgICAgICAgIChpbnNlcnQtbm9kZS1hZnRlciBjMSBzMSkpKSkKPiA+ID4gKwo+ID4g PiArICAgICAgOzsgNC4gSW5zZXJ0IHJlZjEgYmVmb3JlIGNvbnN1bWVyLTEsIHdyaXRpbmcgdG8g bHZhci1uZXcKPiA+ID4gKyAgICAgIChpbnNlcnQtcmVmLWJlZm9yZSB2IGNvbnN1bWVyLTEgbHZh ci1uZXcpCj4gPiA+ICsgICAgICA7OyA1LiBJbnNlcnQgcmVmMiBiZWZvcmUgQzIsIHN0ZWFsaW5n IEMyJ3MgbHZhcgo+ID4gPiArICAgICAgKGluc2VydC1yZWYtYmVmb3JlIHYgYzIgdCkKPiA+ID4g KyAgICAgIDs7IEMyIGlzIG5vdyBkZWFkIGFuZCB3aWxsIGJlIGZsdXNoZWQgYnkgdGhlIGNhbGxl ciEKPiA+ID4gKyAgICAgIHQpKSkKPiA+ID4gKwo+ID4gPiAgOzs7IERvIElSMSBvcHRpbWl6YXRp b25zIG9uIGEgQ09NQklOQVRJT04gbm9kZS4KPiA+ID4gIChkZWZ1biBpcjEtb3B0aW1pemUtY29t YmluYXRpb24gKG5vZGUgJmF1eCAoc2hvdyAqc2hvdy10cmFuc2Zvcm1zLXAqKSkKPiA+ID4gICAg KGRlY2xhcmUgKHR5cGUgY29tYmluYXRpb24gbm9kZSkpCj4gPiA+IEBAIC0xMzA1LDYgKzE0ODEs OSBAQAo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICAobm90IChub2RlLWx2YXIgbm9kZSkp KQo+ID4gPiAgICAgICAgICAgICAgICAgICAgKHJldHVybi1mcm9tIGlyMS1vcHRpbWl6ZS1jb21i aW5hdGlvbiAoZmx1c2gtbm9kZSBub2RlKSkpCj4gPiA+ICAgICAgICAgICAgICAgICAgICgoZm9s ZC1jYWxsLWRlcml2ZWQtdG8tY29uc3RhbnQgbm9kZSkKPiA+ID4gKyAgICAgICAgICAgICAgICAg IChyZXR1cm4tZnJvbSBpcjEtb3B0aW1pemUtY29tYmluYXRpb24pKQo+ID4gPiArICAgICAgICAg ICAgICAgICAoKGFuZCAoY29tYmluYXRpb24taXMgbm9kZSAqZWxpZGFibGUtbWVtb3J5LWxvYWRz KikKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgKHRyeS1yZXVzZS1leHByLXZhbHVlIG5v ZGUpKQo+ID4gPiAgICAgICAgICAgICAgICAgICAgKHJldHVybi1mcm9tIGlyMS1vcHRpbWl6ZS1j b21iaW5hdGlvbikpKQo+ID4gPiAgICAgICAgICAgICAod2hlbiAoYW5kIChpcjEtYXR0cmlidXRl cCAoZnVuLWluZm8tYXR0cmlidXRlcyBpbmZvKSBjb21tdXRhdGl2ZSkKPiA+ID4gICAgICAgICAg ICAgICAgICAgICAgICAoPSAobGVuZ3RoIGFyZ3MpIDIpCj4gPiA+IGRpZmYgLS1naXQgYS90ZXN0 cy9sY3NlLnB1cmUubGlzcCBiL3Rlc3RzL2xjc2UucHVyZS5saXNwCj4gPiA+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gPiA+IGluZGV4IDAwMDAwMDAwMC4uNDNiMzRlOTk4Cj4gPiA+IC0tLSAvZGV2 L251bGwKPiA+ID4gKysrIGIvdGVzdHMvbGNzZS5wdXJlLmxpc3AKPiA+ID4gQEAgLTAsMCArMSwy MzQgQEAKPiA+ID4gKzs7OzsgVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBTQkNMIHN5c3Rl bS4gU2VlIHRoZSBSRUFETUUgZmlsZSBmb3IKPiA+ID4gKzs7OzsgbW9yZSBpbmZvcm1hdGlvbi4K PiA+ID4gKzs7OzsKPiA+ID4gKzs7OzsgV2hpbGUgbW9zdCBvZiBTQkNMIGlzIGRlcml2ZWQgZnJv bSB0aGUgQ01VIENMIHN5c3RlbSwgdGhlIHRlc3QKPiA+ID4gKzs7OzsgZmlsZXMgKGxpa2UgdGhp cyBvbmUpIHdlcmUgd3JpdHRlbiBmcm9tIHNjcmF0Y2ggYWZ0ZXIgdGhlIGZvcmsKPiA+ID4gKzs7 OzsgZnJvbSBDTVUgQ0wuCj4gPiA+ICs7Ozs7Cj4gPiA+ICs7Ozs7IFRoaXMgc29mdHdhcmUgaXMg aW4gdGhlIHB1YmxpYyBkb21haW4gYW5kIGlzIHByb3ZpZGVkIHdpdGgKPiA+ID4gKzs7OzsgYWJz b2x1dGVseSBubyB3YXJyYW50eS4gU2VlIHRoZSBDT1BZSU5HIGFuZCBDUkVESVRTIGZpbGVzIGZv cgo+ID4gPiArOzs7OyBtb3JlIGluZm9ybWF0aW9uLgo+ID4gPiArCj4gPiA+ICs7Ozs7IFRlc3Rz IG9mIGxvY2FsIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uCj4gPiA+ICsKPiA+ID4g KyhpbXBvcnQgJyhjdHU6aW5zcGVjdC1pcgo+ID4gPiArICAgICAgICAgIHNiLWM6OmNvbWJpbmF0 aW9uLWZ1bi1kZWJ1Zy1uYW1lCj4gPiA+ICsgICAgICAgICAgc2ItYzo6YmFzaWMtY29tYmluYXRp b24tcCkpCj4gPiA+ICsKPiA+ID4gKyhkZWZ1biBpci1jYWxscyAoZm9ybSkKPiA+ID4gKyAgKGxl dCAoY2FsbHMpCj4gPiA+ICsgICAgKGluc3BlY3QtaXIKPiA+ID4gKyAgICAgZm9ybQo+ID4gPiAr ICAgICAobGFtYmRhIChjb21wb25lbnQpCj4gPiA+ICsgICAgICAgKGN0dTpkby1ibG9ja3MgKGJs b2NrIGNvbXBvbmVudCkKPiA+ID4gKyAgICAgICAgIChjdHU6ZG8tbm9kZXMgKG5vZGUgbmlsIGJs b2NrKQo+ID4gPiArICAgICAgICAgICAod2hlbiAoYmFzaWMtY29tYmluYXRpb24tcCBub2RlKQo+ ID4gPiArICAgICAgICAgICAgIChwdXNoIG5vZGUgY2FsbHMpKSkpKSkKPiA+ID4gKyAgICBjYWxs cykpCj4gPiA+ICsKPiA+ID4gKyhkZWZtYWNybyBhc3NlcnQtY2FsbHMgKGZ1bi1uYW1lIGV4cGVj dGVkLWNvdW50ICgmcmVzdCBsYW1iZGEtYXJncykgJmJvZHkgYm9keSkKPiA+ID4gKyAgKHNiLWlu dDpiaW5kaW5nKgo+ID4gPiArICAgICAgKCgoZm9ybXMgZGVjbHMpIChzYi1pbnQ6cGFyc2UtYm9k eSBib2R5IG5pbCkpCj4gPiA+ICsgICAgICAgKGxleHByIGAobGFtYmRhICgsQGxhbWJkYS1hcmdz KQo+ID4gPiArICAgICAgICAgICAgICAgICAsQGRlY2xzCj4gPiA+ICsgICAgICAgICAgICAgICAg ICA7OyBXaXRob3V0IGEgY29udGFpbmluZyBMRVQgZm9ybSwgdGhlIGN1cnJlbnQgaW1wbGVtZW50 YXRpb24gb2YgQ1NFCj4gPiA+ICsgICAgICAgICAgICAgICAgICA7OyBpcyB1bndpbGxpbmcgdG8g YmluZCBhIHRlbXBvcmFyeSBsYW1iZGEgdmFyIGZvciByZXVzZS4KPiA+ID4gKyAgICAgICAgICAg ICAgICAgIChsZXQgKChhY3RpdmUtbGV0LXZhciAwKSkKPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgKHByaW50IGFjdGl2ZS1sZXQtdmFyKQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAoaW5j ZiBhY3RpdmUtbGV0LXZhciAocmFuZG9tIDUpKQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAo cHJpbnQgYWN0aXZlLWxldC12YXIpCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICxAZm9ybXMp KSkpCj4gPiA+ICsgICAgYChhc3NlcnQgKD0gKGNvdW50ICcsZnVuLW5hbWUgKGlyLWNhbGxzICcs bGV4cHIpIDprZXkgIydjb21iaW5hdGlvbi1mdW4tZGVidWctbmFtZSkKPiA+ID4gKyAgICAgICAg ICAgICAgICAsZXhwZWN0ZWQtY291bnQpKSkpCj4gPiA+ICsKPiA+ID4gKzs7OyBCYXNpYyB0ZXN0 czogYSBzYW1wbGluZyBvZiBlbGlkYWJsZSBsb2FkIHR5cGUgd2l0aCB0d28gaWRlbnRpY2FsIGxv YWRzCj4gPiA+ICsKPiA+ID4gKyh3aXRoLXRlc3QgKDpuYW1lICg6Y3NlIDpjYXIpKQo+ID4gPiAr ICAoYXNzZXJ0LWNhbGxzIGNhciAxIChjb25zKQo+ID4gPiArICAgIChkZWNsYXJlICh0eXBlIGNv bnMgY29ucykpCj4gPiA+ICsgICAgKGlmIChjYXIgY29ucykKPiA+ID4gKyAgICAgICAgKHByaW5j IChjYXIgY29ucykpCj4gPiA+ICsgICAgICAgIChwcmluYyAoY2RyIGNvbnMpKSkpKQo+ID4gPiAr Cj4gPiA+ICsod2l0aC10ZXN0ICg6bmFtZSAoOmNzZSA6ZGlmZmVyZW50LW5hbWVzLWZvci1zYW1l LW9iamVjdCkpCj4gPiA+ICsgIDs7IFkgYW5kIFggcmVmZXIgdG8gdGhlIHNhbWUgdGhpbmcsIGFu ZCBpdCBkb2Vzbid0IG1hdHRlcgo+ID4gPiArICA7OyB3aG9zZSBDRFIgd2UgdGFrZSBmaXJzdC4g T25seSBvbmUgQ0RSIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQKPiA+ID4gKyAgKGFzc2VydC1jYWxs cyBjZHIgMSAoeCkKPiA+ID4gKyAgICAoZGVjbGFyZSAodHlwZSBjb25zIHgpKQo+ID4gPiArICAg IChsZXQgKCh5IHgpKQo+ID4gPiArICAgICAgKGxpc3QgKGNkciB5KSAoY2RyIHgpKSkpCj4gPiA+ ICsgIChhc3NlcnQtY2FsbHMgY2RyIDEgKHgpCj4gPiA+ICsgICAgKGRlY2xhcmUgKHR5cGUgY29u cyB4KSkKPiA+ID4gKyAgICAobGV0ICgoeSB4KSkKPiA+ID4gKyAgICAgIChsaXN0IChjZHIgeCkg KGNkciB5KSkpKSkKPiA+ID4gKwo+ID4gPiArKHdpdGgtdGVzdCAoOm5hbWUgKDpjc2UgOmNvbXBv c2l0aW9uLW9mLWN4cikpCj4gPiA+ICsgIDs7IFRoZSBDQVIgZXh0cmFjdGlvbiB3aGljaCBpcyBw YXJ0IG9mIHRoZSBDREFSIGZ1bmN0aW9uIGNhbiBiZQo+ID4gPiArICA7OyByZXVzZWQgYmFzZWQg b24gdGhlIGZhY3QgdGhhdCB3ZSBldmFsdWF0ZWQgKExJU1RQIChDQVIgWCkpCj4gPiA+ICsgIChh c3NlcnQtY2FsbHMgY2FyIDEgKHgpCj4gPiA+ICsgICAgKGlmIChsaXN0cCAoY2FyIHgpKSAoY2Rh ciB4KSkpCj4gPiA+ICsgIDs7IG5lZ2F0aXZlIHRlc3QgLSBDREFSIG9uIGEgZGlmZmVyZW50IFkg aXMgYW5vdGhlciBDQVIgb3BlcmF0aW9uCj4gPiA+ICsgIChhc3NlcnQtY2FsbHMgY2FyIDIgKHgg eSkKPiA+ID4gKyAgICAoaWYgKGxpc3RwIChjYXIgeCkpIChjZGFyIHkpKSkpCj4gPiA+ICsKPiA+ ID4gKyhkZWZzdHJ1Y3QgY3NlLXRlc3QtZm9vIHNsb3QgKHdzbG90IDAgOnR5cGUgc2Itdm06d29y ZCkpCj4gPiA+ICsod2l0aC10ZXN0ICg6bmFtZSAoOmNzZSA6aW5zdGFuY2UtcmVmKSkKPiA+ID4g KyAgKGFzc2VydC1jYWxscyBzYi1rZXJuZWw6JWluc3RhbmNlLXJlZiAxICh4KQo+ID4gPiArICAg IDs7IERlcGVuZGluZyBvbiB3aGF0IFRSQU5TRk9STS1JTlNUQU5DRS1UWVBFUCBkb2VzLCBpdCBt aWdodCBhY2Nlc3MgaW5zdGFuY2UtbGF5b3V0Cj4gPiA+ICsgICAgOzsgdXNpbmcgJUlOU1RBTkNF LVJFRiB3aGljaCB3b3VsZCBoYXZlIHRvIGJlIGRpc2NvdW50ZWQgaW4gdGhlIGNhbGwgY291bnRp bmcuCj4gPiA+ICsgICAgOzsgSnVzdCBicnV0ZS1mb3JjZSB0aGUgdHlwZSB0byBhdm9pZCB0aGF0 IHNpdHVhdGlvbi4KPiA+ID4gKyAgICAobGV0ICgoeCAodHJ1bHktdGhlIGNzZS10ZXN0LWZvbyB4 KSkpCj4gPiA+ICsgICAgICAoaWYgKGNzZS10ZXN0LWZvby1zbG90IHgpCj4gPiA+ICsgICAgICAg ICAgKHByaW5jIChjc2UtdGVzdC1mb28tc2xvdCB4KSkKPiA+ID4gKyAgICAgICAgICBuaWwpKSkp Cj4gPiA+ICsKPiA+ID4gKyh3aXRoLXRlc3QgKDpuYW1lICg6Y3NlIDpyYXctaW5zdGFuY2UtcmVm L3dvcmQpKQo+ID4gPiArICAoYXNzZXJ0LWNhbGxzIHNiLWtlcm5lbDolcmF3LWluc3RhbmNlLXJl Zi93b3JkIDEgKHgpCj4gPiA+ICsgICAgKGRlY2xhcmUgKHR5cGUgY3NlLXRlc3QtZm9vIHgpKQo+ ID4gPiArICAgIChpZiAobG9ndGVzdCAoY3NlLXRlc3QtZm9vLXdzbG90IHgpICN4ZmYwMDApCj4g PiA+ICsgICAgICAgIChwcmluYyAoY3NlLXRlc3QtZm9vLXdzbG90IHgpKQo+ID4gPiArICAgICAg ICBuaWwpKSkKPiA+ID4gKwo+ID4gPiArKHdpdGgtdGVzdCAoOm5hbWUgKDpjc2UgOnNhcC1yZWYt MzIpKQo+ID4gPiArICAoYXNzZXJ0LWNhbGxzIHNiLXN5czpzYXAtcmVmLTMyIDEgKHNhcCBvZmZz ZXQpCj4gPiA+ICsgICAgKGRlY2xhcmUgKHR5cGUgc2Itc3lzOnN5c3RlbS1hcmVhLXBvaW50ZXIg c2FwKQo+ID4gPiArICAgICAgICAgICAgICh0eXBlIHNiLXZtOndvcmQgb2Zmc2V0KSkKPiA+ID4g KyAgICAoaWYgKHBsdXNwIChzYi1zeXM6c2FwLXJlZi0zMiBzYXAgb2Zmc2V0KSkKPiA+ID4gKyAg ICAgICAgKHByaW5jIChzYi1zeXM6c2FwLXJlZi0zMiBzYXAgb2Zmc2V0KSkKPiA+ID4gKyAgICAg ICAgbmlsKSkKPiA+ID4gKyAgKGFzc2VydC1jYWxscyBzYi1zeXM6c2lnbmVkLXNhcC1yZWYtMzIg MSAoc2FwIG9mZnNldCkKPiA+ID4gKyAgICAoZGVjbGFyZSAodHlwZSBzYi1zeXM6c3lzdGVtLWFy ZWEtcG9pbnRlciBzYXApCj4gPiA+ICsgICAgICAgICAgICAgKHR5cGUgc2Itdm06d29yZCBvZmZz ZXQpKQo+ID4gPiArICAgIChpZiAocGx1c3AgKHNiLXN5czpzaWduZWQtc2FwLXJlZi0zMiBzYXAg b2Zmc2V0KSkKPiA+ID4gKyAgICAgICAgKHByaW5jIChzYi1zeXM6c2lnbmVkLXNhcC1yZWYtMzIg c2FwIG9mZnNldCkpCj4gPiA+ICsgICAgICAgIG5pbCkpKQo+ID4gPiArCj4gPiA+ICsod2l0aC10 ZXN0ICg6bmFtZSAoOmNzZSA6c2FwLXJlZi02NCkgOnNraXBwZWQtb24gKDpub3QgOjY0LWJpdCkp Cj4gPiA+ICsgIChhc3NlcnQtY2FsbHMgc2Itc3lzOnNhcC1yZWYtNjQgMSAoc2FwIG9mZnNldCkK PiA+ID4gKyAgICAoZGVjbGFyZSAodHlwZSBzYi1zeXM6c3lzdGVtLWFyZWEtcG9pbnRlciBzYXAp Cj4gPiA+ICsgICAgICAgICAgICAgKHR5cGUgc2Itdm06d29yZCBvZmZzZXQpKQo+ID4gPiArICAg IChpZiAocGx1c3AgKHNiLXN5czpzYXAtcmVmLTY0IHNhcCBvZmZzZXQpKQo+ID4gPiArICAgICAg ICAocHJpbmMgKHNiLXN5czpzYXAtcmVmLTY0IHNhcCBvZmZzZXQpKQo+ID4gPiArICAgICAgICBu aWwpKQo+ID4gPiArICAoYXNzZXJ0LWNhbGxzIHNiLXN5czpzaWduZWQtc2FwLXJlZi02NCAxIChz YXAgb2Zmc2V0KQo+ID4gPiArICAgIChkZWNsYXJlICh0eXBlIHNiLXN5czpzeXN0ZW0tYXJlYS1w b2ludGVyIHNhcCkKPiA+ID4gKyAgICAgICAgICAgICAodHlwZSBzYi12bTp3b3JkIG9mZnNldCkp Cj4gPiA+ICsgICAgKGlmIChwbHVzcCAoc2Itc3lzOnNpZ25lZC1zYXAtcmVmLTY0IHNhcCBvZmZz ZXQpKQo+ID4gPiArICAgICAgICAocHJpbmMgKHNiLXN5czpzaWduZWQtc2FwLXJlZi02NCBzYXAg b2Zmc2V0KSkKPiA+ID4gKyAgICAgICAgbmlsKSkpCj4gPiA+ICsKPiA+ID4gKyh3aXRoLXRlc3Qg KDpuYW1lICg6Y3NlIDpsb29wLW92ZXItZGVyZWYpKQo+ID4gPiArICAobGV0ICgobGV4cHIKPiA+ ID4gKyAgICAgICAgICcobGFtYmRhIChmKQo+ID4gPiArICAgICAgICAgICAgKGRlY2xhcmUgKG9w dGltaXplIChzYi1jOjphbGllbi1mdW5jYWxsLXNhdmVzLWZwLWFuZC1wYyAwKQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzYi1jOjp0eXBlLWNoZWNrIDApKSkKPiA+ID4g KyAgICAgICAgICAgIDs7IEYgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBudWxsLXRlcm1pbmF0ZWQg YXJyYXkgb2YgdW5zaWduZWQtaW50Lgo+ID4gPiArICAgICAgICAgICAgOzsgVGhlIGRlcmVmIGZv ciB0aGUgbG9vcCB0ZXJtaW5hdGlvbiB0ZXN0LCBhbmQgYWdhaW4gaW4gdGhlIGJvZHkKPiA+ID4g KyAgICAgICAgICAgIDs7IHNob3VsZCB1c2UgYSBzaW5nbGUgbWVtb3J5IGxvYWQuCj4gPiA+ICsg ICAgICAgICAgICAobGV0ICgoYSAoYWxpZW4tZnVuY2FsbCAodGhlIChhbGllbiAoZnVuY3Rpb24g KCogdW5zaWduZWQpKSkgZikpKSkKPiA+ID4gKyAgICAgICAgICAgICAgKGRvICgoaW5kZXggMCAo MSsgaW5kZXgpKSkKPiA+ID4gKyAgICAgICAgICAgICAgICAgICgoemVyb3AgKGRlcmVmIGEgaW5k ZXgpKSkKPiA+ID4gKyAgICAgICAgICAgICAgICAocHJpbmMgKHRoZSBmaXhudW0gKGRlcmVmIGEg aW5kZXgpKSkpKSkpKQo+ID4gPiArICAgIChhc3NlcnQgKD0gKGNvdW50ICMrKG9yIGFybTY0IHg4 Ni02NCkgJ3NiLXN5czolc2FwLXJlZi02NC1pbmRleGVkCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIy0ob3IgYXJtNjQgeDg2LTY0KQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgIChw cm9nbiAjKzY0LWJpdCAnc2Itc3lzOnNhcC1yZWYtNjQgIy02NC1iaXQgJ3NiLXN5czpzYXAtcmVm LTMyKQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgIChpci1jYWxscyBsZXhwcikgOmtleSAj J2NvbWJpbmF0aW9uLWZ1bi1kZWJ1Zy1uYW1lKQo+ID4gPiArICAgICAgICAgICAgICAgMSkpKSkK PiA+ID4gKwo+ID4gPiArOzs7IFNFVFEgb2YgYSB2YXJpYWJsZSB1c2VkIGFzIGFuIGFyZ3VtZW50 IHRvIGFuIGVsaWRhYmxlIGxvYWQgcHJldmVudHMgQ1NFLgo+ID4gPiArOzs7IFdoZW4gYSB2YXJp YWJsZSB0aGF0IHBhcnRpY2lwYXRlcyBpbiB0aGUgbG9hZCBleHByZXNzaW9uIChlLmcuLCB0aGUg Y29ucwo+ID4gPiArOzs7IGJlaW5nIENBUidkKSBpcyBhc3NpZ25lZCBiZXR3ZWVuIHR3byBpZGVu dGljYWwgbG9hZHMsIHRoZSBzZWNvbmQgbG9hZAo+ID4gPiArOzs7IG11c3Qgbm90IGJlIGVsaW1p bmF0ZWQgYmVjYXVzZSB0aGUgdmFyaWFibGUgbWF5IHJlZmVyZW5jZSBhIGRpZmZlcmVudCBvYmpl Y3QuCj4gPiA+ICsod2l0aC10ZXN0ICg6bmFtZSAoOmNzZSA6c2V0cS1vZi1sb2FkLWFyZy1wcmV2 ZW50cy1jYXIpKQo+ID4gPiArICA7OyBDT05TIGlzIHRoZSBhcmd1bWVudCB0byBDQVIuIEFzc2ln bmluZyBDT05TIGJldHdlZW4gdHdvIChDQVIgQ09OUykKPiA+ID4gKyAgOzsgcHJldmVudHMgQ1NF Lgo+ID4gPiArICAoYXNzZXJ0LWNhbGxzIGNhciAyIChjb25zIG90aGVyKQo+ID4gPiArICAgIChk ZWNsYXJlICh0eXBlIGNvbnMgY29ucyBvdGhlcikpCj4gPiA+ICsgICAgKGxldCAoKGEgKGNhciBj b25zKSkpCj4gPiA+ICsgICAgICAoc2V0cSBjb25zIG90aGVyKQo+ID4gPiArICAgICAgKGxldCAo KGIgKGNhciBjb25zKSkpCj4gPiA+ICsgICAgICAgIChsaXN0IGEgYikpKSkpCj4gPiA+ICsKPiA+ ID4gKyh3aXRoLXRlc3QgKDpuYW1lICg6Y3NlIDpzZXRxLW9mLWxvYWQtYXJnLXByZXZlbnRzLWNk cikpCj4gPiA+ICsgIChhc3NlcnQtY2FsbHMgY2RyIDIgKGNvbnMgb3RoZXIpCj4gPiA+ICsgICAg KGRlY2xhcmUgKHR5cGUgY29ucyBjb25zIG90aGVyKSkKPiA+ID4gKyAgICAobGV0ICgoYSAoY2Ry IGNvbnMpKSkKPiA+ID4gKyAgICAgIChzZXRxIGNvbnMgb3RoZXIpCj4gPiA+ICsgICAgICAobGV0 ICgoYiAoY2RyIGNvbnMpKSkKPiA+ID4gKyAgICAgICAgKGxpc3QgYSBiKSkpKSkKPiA+ID4gKwo+ ID4gPiArKHdpdGgtdGVzdCAoOm5hbWUgKDpjc2UgOnNldHEtb2YtbG9hZC1hcmctcHJldmVudHMt aW5zdGFuY2UtcmVmKSkKPiA+ID4gKyAgOzsgQXNzaWduaW5nIHRoZSBzdHJ1Y3QgdmFyaWFibGUg YmV0d2VlbiB0d28gcmVhZHMgb2YgdGhlIHNhbWUgc2xvdCBwcmV2ZW50cyBDU0UuCj4gPiA+ICsg IChhc3NlcnQtY2FsbHMgc2Ita2VybmVsOiVpbnN0YW5jZS1yZWYgMiAoeCB5KQo+ID4gPiArICAg IChsZXQgKCh4ICh0cnVseS10aGUgY3NlLXRlc3QtZm9vIHgpKQo+ID4gPiArICAgICAgICAgICh5 ICh0cnVseS10aGUgY3NlLXRlc3QtZm9vIHkpKSkKPiA+ID4gKyAgICAgIChsZXQgKChhIChjc2Ut dGVzdC1mb28tc2xvdCB4KSkpCj4gPiA+ICsgICAgICAgIChzZXRxIHggeSkKPiA+ID4gKyAgICAg ICAgKGxldCAoKGIgKGNzZS10ZXN0LWZvby1zbG90IHgpKSkKPiA+ID4gKyAgICAgICAgICAobGlz dCBhIGIpKSkpKSkKPiA+ID4gKwo+ID4gPiArKHdpdGgtdGVzdCAoOm5hbWUgKDpjc2UgOnNldHEt b2YtbG9hZC1hcmctcHJldmVudHMtc2FwLXJlZikpCj4gPiA+ICsgIDs7IEFzc2lnbmluZyB0aGUg U0FQIHZhcmlhYmxlIGJldHdlZW4gdHdvIHJlYWRzIGF0IHRoZSBzYW1lIG9mZnNldAo+ID4gPiAr ICA7OyBtdXN0IHByZXZlbnQgQ1NFIHNpbmNlIHRoZSBzZWNvbmQgcmVhZCBtYXkgdXNlIGEgZGlm ZmVyZW50IFNBUC4KPiA+ID4gKyAgKGFzc2VydC1jYWxscyBzYi1zeXM6c2FwLXJlZi0zMiAyIChz YXAxIHNhcDIgb2Zmc2V0KQo+ID4gPiArICAgIChkZWNsYXJlICh0eXBlIHNiLXN5czpzeXN0ZW0t YXJlYS1wb2ludGVyIHNhcDEgc2FwMikKPiA+ID4gKyAgICAgICAgICAgICAodHlwZSBzYi12bTp3 b3JkIG9mZnNldCkpCj4gPiA+ICsgICAgKGxldCAoKGEgKHNiLXN5czpzYXAtcmVmLTMyIHNhcDEg b2Zmc2V0KSkpCj4gPiA+ICsgICAgICAoc2V0cSBzYXAxIHNhcDIpCj4gPiA+ICsgICAgICAobGV0 ICgoYiAoc2Itc3lzOnNhcC1yZWYtMzIgc2FwMSBvZmZzZXQpKSkKPiA+ID4gKyAgICAgICAgKGxp c3QgYSBiKSkpKSkKPiA+ID4gKwo+ID4gPiArOzs7IFNFVFEgb2YgYW4gKnVucmVsYXRlZCogdmFy aWFibGUgc2hvdWxkIE5PVCBwcmV2ZW50IENTRS4KPiA+ID4gKzs7OyBPbmx5IG11dGF0aW9ucyBv ZiB2YXJpYWJsZXMgdGhhdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgbG9hZCBtYXR0ZXIuCj4gPiA+ICso d2l0aC10ZXN0ICg6bmFtZSAoOmNzZSA6c2V0cS1vZi11bnJlbGF0ZWQtdmFyLWFsbG93cy1jc2Up KQo+ID4gPiArICA7OyBaIGlzIG5vdCBhbiBhcmd1bWVudCB0byBDQVIsIHNvIHNldHRpbmcgWiBk b2VzIG5vdCBpbmhpYml0IENTRS4KPiA+ID4gKyAgKGFzc2VydC1jYWxscyBjYXIgMSAoY29ucyB6 KQo+ID4gPiArICAgIChkZWNsYXJlICh0eXBlIGNvbnMgY29ucykpCj4gPiA+ICsgICAgKGxldCAo KGEgKGNhciBjb25zKSkpCj4gPiA+ICsgICAgICAoc2V0cSB6IGEpCj4gPiA+ICsgICAgICAobGV0 ICgoYiAoY2FyIGNvbnMpKSkKPiA+ID4gKyAgICAgICAgKGxpc3QgeiBiKSkpKSkKPiA+ID4gKwo+ ID4gPiArOzs7IFNCLVRIUkVBRDpCQVJSSUVSIG9mIGFueSBraW5kIHByZXZlbnRzIGVsaXNpb24g b2YgdGhlIHNlY29uZCBsb2FkCj4gPiA+ICs7Ozsgc2luY2UgdGhlIG1lbW9yeSBiYXJyaWVycyBp cyBub3QgZmx1c2hhYmxlLiBUaGlzIGlzIHRoZSBjb25zZXJ2YXRpdmUgc3RhbmNlLgo+ID4gPiAr Ozs7IFRoZSBhY3R1YWwgKGxvb3NlcikgcmVxdWlyZW1lbnRzIGFyZSBtb3JlIHN1YnRsZSB0aGFu IEkgY2FyZSB0byBkZWFsIHdpdGguCj4gPiA+ICsoZGVmbWFjcm8gYmFycmllci10ZXN0IChraW5k KQo+ID4gPiArICBgKHdpdGgtdGVzdCAoOm5hbWUgKDpjc2UgOmJhcnJpZXItcHJldmVudHMtY2Fy ICxraW5kKSkKPiA+ID4gKyAgICAgKGFzc2VydC1jYWxscyBjYXIgMiAoY29ucykKPiA+ID4gKyAg ICAgIChkZWNsYXJlICh0eXBlIGNvbnMgY29ucykpCj4gPiA+ICsgICAgICAobGV0ICgoYSAoY2Fy IGNvbnMpKSkKPiA+ID4gKyAgICAgICAgKHNiLXRocmVhZDpiYXJyaWVyICgsa2luZCkpCj4gPiA+ ICsgICAgICAgIChsZXQgKChiIChjYXIgY29ucykpKQo+ID4gPiArICAgICAgICAgIChsaXN0IGEg YikpKSkpKQo+ID4gPiArKGJhcnJpZXItdGVzdCA6cmVhZCkKPiA+ID4gKyhiYXJyaWVyLXRlc3Qg OndyaXRlKQo+ID4gPiArKGJhcnJpZXItdGVzdCA6bWVtb3J5KQo+ID4gPiArKGJhcnJpZXItdGVz dCA6Y29tcGlsZXIpCj4gPiA+ICsoYmFycmllci10ZXN0IDpkYXRhLWRlcGVuZGVuY3kpCj4gPiA+ ICsKPiA+ID4gKzs7OyBBbnkgbm9uLWZsdXNoYWJsZSBjYWxsIGJldHdlZW4gdHdvIGlkZW50aWNh bCBsb2FkcyBwcmV2ZW50cyBDU0UKPiA+ID4gKzs7OyBiZWNhdXNlIHRoZSBjYWxsIG1heSBoYXZl IHNpZGUgZWZmZWN0cyB0aGF0IG1vZGlmeSB0aGUgbG9hZGVkIG1lbW9yeS4KPiA+ID4gKwo+ID4g PiArKHdpdGgtdGVzdCAoOm5hbWUgKDpjc2UgOm5vbi1mbHVzaGFibGUtY2FsbC1wcmV2ZW50cy1j c2UpKQo+ID4gPiArICA7OyBQUklOQyBpcyBhIG5vbi1mbHVzaGFibGUKPiA+ID4gKyAgKGFzc2Vy dC1jYWxscyBjYXIgMiAoY29ucykKPiA+ID4gKyAgICAoZGVjbGFyZSAodHlwZSBjb25zIGNvbnMp KQo+ID4gPiArICAgIChsZXQgKChhIChjYXIgY29ucykpKQo+ID4gPiArICAgICAgKHByaW5jIDQy KQo+ID4gPiArICAgICAgKGxldCAoKGIgKGNhciBjb25zKSkpCj4gPiA+ICsgICAgICAgIChsaXN0 IGEgYikpKSkpCj4gPiA+ICsKPiA+ID4gKzs7OyBEaWZmZXJlbnQgZnVuY3Rpb25zIG9uIHRoZSBz YW1lIG9iamVjdCBhcmUgTk9UIGNvbnNpZGVyZWQgY29tbW9uIHN1YmV4cHJlc3Npb25zLgo+ID4g PiArOzs7IChDQVIgeCkgYW5kIChDRFIgeCkgYXJlIGRpZmZlcmVudCBsb2FkcyBldmVuIGlmIHgg aXMgdGhlIHNhbWUuCj4gPiA+ICsod2l0aC10ZXN0ICg6bmFtZSAoOmNzZSA6ZGlmZmVyZW50LWFj Y2Vzc29ycy1ub3QtY3NlKSkKPiA+ID4gKyAgOzsgQm90aCBDQVIgYW5kIENEUiBzaG91bGQgYXBw ZWFyLCBlYWNoIGV4YWN0bHkgb25jZS4KPiA+ID4gKyAgKGFzc2VydC1jYWxscyBjYXIgMSAoY29u cykKPiA+ID4gKyAgICAoZGVjbGFyZSAodHlwZSBjb25zIGNvbnMpKQo+ID4gPiArICAgIChpZiAo Y2FyIGNvbnMpCj4gPiA+ICsgICAgICAgIChwcmluYyAoY2RyIGNvbnMpKQo+ID4gPiArICAgICAg ICBuaWwpKQo+ID4gPiArICAoYXNzZXJ0LWNhbGxzIGNkciAxIChjb25zKQo+ID4gPiArICAgIChk ZWNsYXJlICh0eXBlIGNvbnMgY29ucykpCj4gPiA+ICsgICAgKGlmIChjYXIgY29ucykKPiA+ID4g KyAgICAgICAgKHByaW5jIChjZHIgY29ucykpCj4gPiA+ICsgICAgICAgIG5pbCkpKQo+ID4gPiBk aWZmIC0tZ2l0IGEveHBlcmZlY3RoYXNoMzAubGlzcC1leHByIGIveHBlcmZlY3RoYXNoMzAubGlz cC1leHByCj4gPiA+IGluZGV4IDZhNTAzYWNmMC4uMWI3MjI3Yzc4IDEwMDY0NAo+ID4gPiAtLS0g YS94cGVyZmVjdGhhc2gzMC5saXNwLWV4cHIKPiA+ID4gKysrIGIveHBlcmZlY3RoYXNoMzAubGlz cC1leHByCj4gPiA+IEBAIC0xNTA2LDYgKzE1MDYsOSBAQAo+ID4gPiAgKCMoMTBCRTcyNzcgMTIy MTRBRTggMTJFMkNCREEgMTk3Mzk1MzkgMUYzNTU2QzcgMUY2NDQzODcpCj4gPiA+ICAgIihJTlRF R0VSIEJJR05VTSBTQi1WTTo6VU5TSUdORUQtQllURS0zMSBTQi1WTTo6U0lHTkVELUJZVEUtMzIg RklYTlVNIFNCLVZNOjpQT1NJVElWRS1GSVhOVU0pIgo+ID4gPiAgICIoKCYgKF4gdmFsICg+PiB2 YWwgMjIpKSA3KSkiKQo+ID4gPiArKCMoMTBEMkVBNEUgMTIyNEM1NTcgMTVBNThEODUgMTVCNUEy QjUgMTc1MjRBNzggMTc2OUU0MTkgMTg5MDZEMDgpCj4gPiA+ICsgIihTQi1DOjpDU0VUIFNCLUM6 OlJFRiBERUxBWSBTQi1DOjpBUlJBWS1JTkRFWC1DQVNUIENBU1QgU0ItQzo6Q09NQklOQVRJT04g U0ItQzo6Q0lGKSIKPiA+ID4gKyAiKCgmICgrICg+PiB2YWwgMSkgKD4+IHZhbCA5KSkgNykpIikK PiA+ID4gICgjKDEwRDJFQTRFIDEyMjRDNTU3IDE1QTU4RDg1IDE1QjVBMkI1IDE3NTI0QTc4IDE3 NjlFNDE5IDE4OTA2RDA4IDE5NTc3NTM5IDFDMDY1Q0I4IDFENjZDOTMyKQo+ID4gPiAgICIjKCgo OlRZUEUgU0ItQzo6UkVGKSkgKCg6VFlQRSBTQi1DOjpDT01CSU5BVElPTikpICgoOlRZUEUgU0It Qzo6Q0lGKSkgKCg6VFlQRSBTQi1DOjpDUkVUVVJOKSkgKCg6VFlQRSBTQi1DOjpNVi1DT01CSU5B VElPTikpICgoOlRZUEUgRVhJVCkpICgoOlRZUEUgU0ItQzo6Q1NFVCkpICgoOlRZUEUgREVMQVkp ICg6VFlQRSBTQi1DOjpBUlJBWS1JTkRFWC1DQVNUKSAoOlRZUEUgQ0FTVCkpKSIKPiA+ID4gICAi KChsZXQgKCh0YWIgI2EoKDgpICh1bnNpZ25lZC1ieXRlIDgpIDAgNSAyIDggMTMgMyAwIDApKSkK PiA+ID4gZGlmZiAtLWdpdCBhL3hwZXJmZWN0aGFzaDYxLmxpc3AtZXhwciBiL3hwZXJmZWN0aGFz aDYxLmxpc3AtZXhwcgo+ID4gPiBpbmRleCA2ZWI3MjQ4NmIuLmIxYmMwMTRmYiAxMDA2NDQKPiA+ ID4gLS0tIGEveHBlcmZlY3RoYXNoNjEubGlzcC1leHByCj4gPiA+ICsrKyBiL3hwZXJmZWN0aGFz aDYxLmxpc3AtZXhwcgo+ID4gPiBAQCAtNDYzLDYgKzQ2Myw5IEBACj4gPiA+ICAoIyg5QTMyMEQ0 IDM5Q0FBMzM5IDQzQkJFRTE4IDRENjEzNjhGIDUzMjIyREZCIEJGQTg2MTg5IEVEQTEwMzdGIEZF RTk5QTk1KQo+ID4gPiAgICIjKCgoOlRZUEUgU0ItQzo6UkVGKSkgKCg6VFlQRSBTQi1DOjpDT01C SU5BVElPTikpICgoOlRZUEUgU0ItQzo6TVYtQ09NQklOQVRJT04pKSAoKDpUWVBFIEVYSVQpKSAo KDpUWVBFIFNCLUM6OkNTRVQpKSAoKDpUWVBFIERFTEFZKSAoOlRZUEUgU0ItQzo6QVJSQVktSU5E RVgtQ0FTVCkgKDpUWVBFIENBU1QpKSkiCj4gPiA+ICAgIigoJiAoLSAoPj4gdmFsIDMpICg+PiB2 YWwgMjkpKSA3KSkiKQo+ID4gPiArKCMoOUEzMjBENCAzOUNBQTMzOSA0M0JCRUUxOCA1MzIyMkRG QiA5MzgwODM3QyBCRkE4NjE4OSBGRUU5OUE5NSkKPiA+ID4gKyAiIygoKDpUWVBFIFNCLUM6OkNJ RikgKDpUWVBFIFNCLUM6OkNPTUJJTkFUSU9OKSAoOlRZUEUgREVMQVkpICg6VFlQRSBTQi1DOjpB UlJBWS1JTkRFWC1DQVNUKSAoOlRZUEUgQ0FTVCkgKDpUWVBFIFNCLUM6OlJFRikgKDpUWVBFIFNC LUM6OkNTRVQpKSkiCj4gPiA+ICsgIigoJiAoKyB2YWwgKD4+IHZhbCAzMSkpIDcpKSIpCj4gPiA+ ICAoIyg5QTMyMEQ0IDQzQkJFRTE4IDUzMjIyREZCIEE4QTRDN0QyIEJGQTg2MTg5IEVBQTNEQTVD IEZFRTk5QTk1KQo+ID4gPiAgICIjKCgoOlRZUEUgU0ItQzo6UkVGKSkgKCg6VFlQRSBERUxBWSkg KDpUWVBFIFNCLUM6OkFSUkFZLUlOREVYLUNBU1QpICg6VFlQRSBDQVNUKSkgKCg6VFlQRSBTQi1D OjpDT01CSU5BVElPTikpICgoOlRZUEUgU0ItQzo6RU5UUlkpKSAoKDpUWVBFIFNCLUM6OkVOQ0xP U0UpKSkiCj4gPiA+ICAgIigoJiAoXiAoPj4gdmFsIDcpICg+PiB2YWwgMjMpKSA3KSkiKQo+ID4g PiBkaWZmIC0tZ2l0IGEveHBlcmZlY3RoYXNoNjMubGlzcC1leHByIGIveHBlcmZlY3RoYXNoNjMu bGlzcC1leHByCj4gPiA+IGluZGV4IGNjODYxYmIzMy4uMTNiYjVkODVkIDEwMDY0NAo+ID4gPiAt LS0gYS94cGVyZmVjdGhhc2g2My5saXNwLWV4cHIKPiA+ID4gKysrIGIveHBlcmZlY3RoYXNoNjMu bGlzcC1leHByCj4gPiA+IEBAIC04NzAsNiArODcwLDkgQEAKPiA+ID4gICgjKDEyMTA2OEREIDRE NjEzNjhGIDU4MTEwRTdGIDY3RUUyRDFBIDZEOUE4ODNEIDc0NTg5RDgyIDg5N0I0NjU2IEE2OEEz OTY1KQo+ID4gPiAgICIjKCgoOlRZUEUgU0ItQzo6UkVGKSkgKCg6VFlQRSBTQi1DOjpDT01CSU5B VElPTikpICgoOlRZUEUgU0ItQzo6TVYtQ09NQklOQVRJT04pKSAoKDpUWVBFIEVYSVQpKSAoKDpU WVBFIFNCLUM6OkNTRVQpKSAoKDpUWVBFIERFTEFZKSAoOlRZUEUgU0ItQzo6QVJSQVktSU5ERVgt Q0FTVCkgKDpUWVBFIENBU1QpKSkiCj4gPiA+ICAgIigoJiAoLSAoPj4gdmFsIDQpICg+PiB2YWwg MTYpKSA3KSkiKQo+ID4gPiArKCMoMTIxMDY4REQgNTgxMTBFN0YgNjdFRTJEMUEgNkQ5QTg4M0Qg NzQyRDRDNTQgODk3QjQ2NTYgQTY4QTM5NjUpCj4gPiA+ICsgIiMoKCg6VFlQRSBTQi1DOjpDSUYp ICg6VFlQRSBTQi1DOjpDT01CSU5BVElPTikgKDpUWVBFIERFTEFZKSAoOlRZUEUgU0ItQzo6QVJS QVktSU5ERVgtQ0FTVCkgKDpUWVBFIENBU1QpICg6VFlQRSBTQi1DOjpSRUYpICg6VFlQRSBTQi1D OjpDU0VUKSkpIgo+ID4gPiArICIoKCYgKC0gKD4+IHZhbCA0KSAoPj4gdmFsIDE2KSkgNykpIikK PiA+ID4gICgjKDEyNkFEQjAyIDMxQjA5NUREIDQyRDgzRkZCIDQzNDFGN0Q4IDYzQzk3MUQ3IDdB ODBGMjAxIDdCNDA4ODgwIDhGNzkxMkQ2IEVCRDAxODcyKQo+ID4gPiAgICIoOkFMTE9XLU9USEVS LUtFWVMgOlRZUEUgOlJFU1VMVC1TUEVDUyA6QVJHLVNQRUNTIDpDQUxMRVIgOkRFUFMgOkZJUkVE IDpMRVhFTlYgOlNPVVJDRS1QQVRIKSIKPiA+ID4gICAiKChsZXQgKCh0YWIgI2EoKDgpICh1bnNp Z25lZC1ieXRlIDgpIDAgNSAwIDMgMCA1IDEyIDYpKSkKPiA+ID4KPiA+ID4gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KPiA+ID4KPiA+ID4KPiA+ID4gaG9va3MvcG9zdC1yZWNlaXZlCj4gPiA+IC0tCj4gPiA+IFNC Q0wKPiA+ID4KPiA+ID4KPiA+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KPiA+ID4gU2JjbC1jb21taXRzIG1haWxpbmcgbGlzdAo+ID4gPiBTYmNsLWNv bW1pdHNAbGlzdHMuc291cmNlZm9yZ2UubmV0Cj4gPiA+IGh0dHBzOi8vbGlzdHMuc291cmNlZm9y Z2UubmV0L2xpc3RzL2xpc3RpbmZvL3NiY2wtY29tbWl0cwoKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fClNiY2wtY29tbWl0cyBtYWlsaW5nIGxpc3QKU2Jj bC1jb21taXRzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldApodHRwczovL2xpc3RzLnNvdXJjZWZvcmdl Lm5ldC9saXN0cy9saXN0aW5mby9zYmNsLWNvbW1pdHMK