T24gMzAgTWF5IDIwMTUgYXQgMTU6MTUsIFJ5YW4gTydDb25ub3IgPHJvY2lmaWVyQGdtYWlsLmNv bT4gd3JvdGU6Cgo+IE1heWJlIDM1NS8xMTMgaXMgYWN0dWFsbHkgdGhlIGRlZmluaXRpb24gb2Yg UEkgYW5kIGV2ZXJ5b25lIGVsc2UgZ290Cj4gaXQgd3JvbmcgbG9sCj4KPiDigItPbmx5IGluIGEg dW5pdmVyc2Ugd2l0aCBzdWl0YWJseSBjdXJ2ZWQgc3BhY2UuCgogICAgICAgICAgICBSdXNzZWxs 4oCLCgoKCj4gT24gMzAgTWF5IDIwMTUgYXQgMTU6MTMsIFJ5YW4gTydDb25ub3IgPHJvY2lmaWVy QGdtYWlsLmNvbT4gd3JvdGU6Cj4gPiBMb2wgb2sgNDQyNzAwNzA0NDYxNTExNTA1MDAzNDg1NDY0 ODUyNTY4NTg3MTU4NyAvCj4gPiAxNDA5MTYwMTA4NTA2Mjc2NzgzMDg1NzE4NDQwMjUyMzc1MDk5 NjUzIHRha2VzIHRoZSBjYWtlLgo+ID4KPiA+IE9uIDMwIE1heSAyMDE1IGF0IDA2OjM5LCBEYW5p ZWwgU2VycGVsbCA8ZGFuaWVsLnNlcnBlbGxAZ21haWwuY29tPgo+IHdyb3RlOgo+ID4+IEhpLAo+ ID4+Cj4gPj4gT24gRnJpLCBNYXkgMjksIDIwMTUgYXQgODozMyBBTSwgUnVzc2VsbE1jIDxhcHB0 ZWNobnpAZ21haWwuY29tPiB3cm90ZToKPiA+Pj4gSSBzYWlkOgo+ID4+Pgo+ID4+Pj4KPiA+Pj4g U29tZXRoaW5nIGJldHRlciB0aGFuIDM1NS8xMTMgbG9va3MgZHVlIHRvIHBvcCBvdXQgYXJvdW5k Cj4gPj4+PiAyNDg2MTAgLyA3OTEzNSAod2hpY2ggaXMgYSBtdWx0aXBsZSBvZiAzNTUvMTEzKQo+ ID4+Pgo+ID4+PiBUaGF0IHNob3VsZCBoYXZlIGJlZW46ICAyNDg1MDAgLyA3OTEwMC4KPiA+Pj4g Tm90ICB0aGUgMjQ4NjEwIC8gNzkxMzUgdGhhdCBJIHdyb3RlLCB3aGljaCB3YXMgZm9yIGEgbmVh cmJ5IGNlbGwgdGhhdAo+IHdhcwo+ID4+PiBhbiBpbmZlcmlvciBsb2NhbCBtYXhpbXVtLgo+ID4+ Cj4gPj4gVGhlcmUgYXJlIGRpZmZlcmVudCBtZXRyaWNzIG9mIHdoaWNoIGFwcHJveGltYXRpb24g aXMgImJldHRlciIuCj4gPj4KPiA+PiBJZiB5b3VyIG1ldHJpYyBpcyAibnVtYmVyIG9mIGJpdHMg b2YgbnVtZXJhdG9yICsgZGVub21pbmF0b3IgLSBudW1iZXIKPiBvZiBiaXRzCj4gPj4gb2YgdGhl IGFwcHJveGltYXRpb24iLCAzNTUvMTEzIGlzIHRoZSBiZXN0IDwgMTBeMjUwLCB3aXRoIDguNSAr IDYuOCAtCj4gPj4gMjEuOCA9IC02LjUKPiA+Pgo+ID4+IFNvLCAzNTUvMTEzIGhhcyA2LjUgYml0 cyBsZXNzIHRoYW4gdGhlIGVxdWl2YWxlbnQgIjMuMTQxNTkyOTMuLiIuCj4gPj4KPiA+PiBXaXRo IGEgYnJ1dGUtZm9yY2Ugc2VhcmNoLCB0aG9zZSBhcmUgb3RoZXIgImdvb2QiIGFwcHJveGltYXRp b25zOgo+ID4+Cj4gPj4gMyAvIDEgIGU6IDAuMTQyICAgYml0czogICAxLjYgKyAgMC4wIC0gMi44 ICA9IC0xLjIKPiA+PiAyMiAvIDcgIGU6IDAuMDAxMjYgICBiaXRzOiAgIDQuNSArICAyLjggLSA5 LjYgID0gLTIuNAo+ID4+IDM1NSAvIDExMyAgZTogMi42N2UtMDcgICBiaXRzOiAgIDguNSArICA2 LjggLSAyMS44ID0gLTYuNQo+ID4+IDU0MTkzNTEgLyAxNzI1MDMzICBlOiAyLjIxZS0xNCAgIGJp dHM6ICAyMi40ICsgMjAuNyAtIDQ1LjQgPSAtMi4zCj4gPj4gMjEwNTMzNDMxNDEgLyA2NzAxNDg3 MjU5ICBlOiAyLjYyZS0yMiAgIGJpdHM6ICAzNC4zICsgMzIuNiAtIDcxLjcgPSAtNC44Cj4gPj4g MjY0NjY5MzEyNTEzOTMwNDM0NSAvIDg0MjQ2ODU4NzQyNjUxMzIwNyAgZTogMS40MWUtMzggICBi aXRzOiAgNjEuMiArCj4gPj4gNTkuNSAtMTI1LjcgPSAtNS4wCj4gPj4gNDQyNzAwNzA0NDYxNTEx NTA1MDAzNDg1NDY0ODUyNTY4NTg3MTU4NyAvCj4gPj4gMTQwOTE2MDEwODUwNjI3Njc4MzA4NTcx ODQ0MDI1MjM3NTA5OTY1MyBlOiAzLjExZS04MSAgIGJpdHM6IDEzMS43Cj4gPj4gKzEzMC4xIC0y NjcuNCA9IC01LjcKPiA+Pgo+ID4+ICJlIiBpcyB0aGUgYWJzb2x1dGUgZXJyb3IgKGFwcm94LXBp KSwgdGhlIGJpdHMgaXMgYXMgZXhwbGFpbmVkIGFib3ZlLgo+ID4+IEFzIHlvdSBzZWUsIGV2ZW4K PiA+PiB3aXRoIDQwIGRpZ2l0IG51bWJlcnMgeW91IGNhbid0IGdhaW4gYXMgbXVjaCBiaXRzIGFz IHdpdGggMzU1LzExMy4KPiA+Pgo+ID4+IElmIHlvdXIgbWV0cmljIGlzIHNpbXBseSAiYmVzdCBh YnNvbHV0ZSBlcnJvciIsIHRoZW4gdGhlcmUgYXJlIG1hbnkKPiA+PiBhcHByb3hpbWF0aW9ucy4g SGVyZSBpcwo+ID4+IGEgdGFibGU6IGh0dHA6Ly9xaW4ubGF5YS5jb20vdGVjaF9wcm9qZWN0c19h cHByb3hwaS5odG1sCj4gPj4KPiA+PiBUaGUgZm9sbG93aW5nIHB5dGhvbiBwcm9ncmFtIGNhbiBn ZW5lcmF0ZSBhIHRhYmxlIHNpbWlsYXIgdG8gdGhlIGFib3ZlCj4gPj4gZm9yIGFueSBudW1iZXIK PiA+PiBzcGVjaWZpZWQgb24gY29tbWFuZCBsaW5lOgo+ID4+Cj4gPj4gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+PiAjIS91c3IvYmluL2VudiBweXRob24K PiA+PiBpbXBvcnQgZGVjaW1hbCwgc3lzLCBtYXRoCj4gPj4gZGVjaW1hbC5nZXRjb250ZXh0KCku cHJlYyA9IDI1MCAjIFVzZSBhIGJpZ2dlciBudW1iZXIgaWYgeW91IG5lZWQgbW9yZQo+IHByZWNp c2lvbgo+ID4+IGxvZzIgPSBtYXRoLmxvZygyKQo+ID4+IGJlc3QgPSAxMDAKPiA+Pgo+ID4+IGRl ZiB0ZXN0TnVtKG51bWVyLCBkZW5vbSwgbnVtKToKPiA+PiAgICAgZ2xvYmFsIGJlc3QKPiA+Pgo+ ID4+ICAgICB4ID0gZGVjaW1hbC5EZWNpbWFsKG51bWVyKSAvIGRlY2ltYWwuRGVjaW1hbChkZW5v bSkKPiA+PiAgICAgZSA9IGZsb2F0KHggLSBudW0pCj4gPj4KPiA+PiAgICAgcG9zID0gVHJ1ZQo+ ID4+ICAgICBpZiBlIDwgMCA6Cj4gPj4gICAgICAgICBlID0gLSBlCj4gPj4gICAgICAgICBwb3Mg PSBGYWxzZQo+ID4+Cj4gPj4gICAgICMgVW5jb21tZW50IG9uZSBvZiB0aG9zZSB0YXJnZXQgc2Vh cmNoOgo+ID4+ICMgICAgYiA9IGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyBCZXN0IGFic29sdXRlIGVycm9yCj4gPj4gICAgIGIgPSBudW1lciAqIGRlbm9tICogZSAg ICAgICAgICAgICAgICAgICAgICAgICMgQmVzdCB1c2Ugb2YgYml0cwo+ID4+ICMgICAgYiA9IGUg KiBtYXRoLnNxcnQobnVtZXIqbnVtZXIrZGVub20qZGVub20pICAgIyBCZXN0IGVycm9yCj4gPj4g cHJvcG9ydGlvbmFsIHRvIG51bWVyL2Rlbm9tCj4gPj4gICAgIGlmIGIgPCBiZXN0IDoKPiA+PiAg ICAgICAgIGRpYWcgPSBlICogbWF0aC5zcXJ0KG51bWVyKm51bWVyK2Rlbm9tKmRlbm9tKQo+ID4+ ICAgICAgICAgYml0MSA9IG1hdGgubG9nKG51bWVyKSAvIGxvZzIKPiA+PiAgICAgICAgIGJpdDIg PSBtYXRoLmxvZyhkZW5vbSkgLyBsb2cyCj4gPj4gICAgICAgICBpZiBlID09IDA6Cj4gPj4gICAg ICAgICAgICAgYml0ZSA9IDAKPiA+PiAgICAgICAgIGVsc2U6Cj4gPj4gICAgICAgICAgICAgYml0 ZSA9IG1hdGgubG9nKGUpIC8gbG9nMgo+ID4+ICAgICAgICAgYmVzdCA9IGIKPiA+PiAgICAgICAg IHByaW50ICJ7MDozMWR9L3sxOjMxZH0gPSB7MjouNjBmfSBlPXszOjguM2d9IChkaWFnOiB7ODo2 LjFnfSkKPiA+PiAoYml0czogezQ6LjFmfSt7NTouMWZ9LXs2Oi4xZn0gPSB7NzouMWZ9KSIuZm9y bWF0KAo+ID4+ICAgICAgICAgICAgIG51bWVyICwgZGVub20gLCB4ICwgZSwgYml0MSwgYml0Miwg LWJpdGUsIGJpdDErYml0MitiaXRlLAo+IGRpYWcpCj4gPj4KPiA+PiAgICAgcmV0dXJuIHBvcwo+ ID4+Cj4gPj4gIyBTdGFydGluZyBzZWFyY2ggdmFsdWVzLCB1c2VzIFN0ZXJu4oCTQnJvY290IHNl YXJjaCB0cmVlCj4gPj4gbjAgPSAwCj4gPj4gZDAgPSAxCj4gPj4gbjEgPSAxCj4gPj4gZDEgPSAw Cj4gPj4gIyBUYXJnZXQgdmFsdWUgc3BlY2lmaWVkIGluIGNvbW1hbmQgbGluZSAodXNlIGFzIG1h bnkgZGlnaXRzIGFzIHlvdQo+IG5lZWQpCj4gPj4gdGFyZ2V0ID0gZGVjaW1hbC5EZWNpbWFsKHN5 cy5hcmd2WzFdKQo+ID4+Cj4gPj4gd2hpbGUgZDAgPCAxZSs0MDoKPiA+PiAgICAgbnVtID0gbjAr bjEKPiA+PiAgICAgZGVuID0gZDArZDEKPiA+PiAgICAgaWYgdGVzdE51bShudW0sIGRlbiwgdGFy Z2V0KToKPiA+PiAgICAgICAgIG4xID0gbnVtCj4gPj4gICAgICAgICBkMSA9IGRlbgo+ID4+ICAg ICBlbHNlOgo+ID4+ICAgICAgICAgbjAgPSBudW0KPiA+PiAgICAgICAgIGQwID0gZGVuCj4gPj4g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+Pgo+ID4+IC0t Cj4gPj4gaHR0cDovL3d3dy5waWNsaXN0LmNvbS90ZWNocmVmL3BpY2xpc3QgUElDL1NYIEZBUSAm IGxpc3QgYXJjaGl2ZQo+ID4+IFZpZXcvY2hhbmdlIHlvdXIgbWVtYmVyc2hpcCBvcHRpb25zIGF0 Cj4gPj4gaHR0cDovL21haWxtYW4ubWl0LmVkdS9tYWlsbWFuL2xpc3RpbmZvL3BpY2xpc3QKPgo+ IC0tCj4gaHR0cDovL3d3dy5waWNsaXN0LmNvbS90ZWNocmVmL3BpY2xpc3QgUElDL1NYIEZBUSAm IGxpc3QgYXJjaGl2ZQo+IFZpZXcvY2hhbmdlIHlvdXIgbWVtYmVyc2hpcCBvcHRpb25zIGF0Cj4g aHR0cDovL21haWxtYW4ubWl0LmVkdS9tYWlsbWFuL2xpc3RpbmZvL3BpY2xpc3QKPgotLSAKaHR0 cDovL3d3dy5waWNsaXN0LmNvbS90ZWNocmVmL3BpY2xpc3QgUElDL1NYIEZBUSAmIGxpc3QgYXJj aGl2ZQpWaWV3L2NoYW5nZSB5b3VyIG1lbWJlcnNoaXAgb3B0aW9ucyBhdApodHRwOi8vbWFpbG1h bi5taXQuZWR1L21haWxtYW4vbGlzdGluZm8vcGljbGlzdAo= .