From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from f169.i.mail.ru (f169.i.mail.ru [128.140.171.72]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 0A739469719 for ; Sun, 6 Sep 2020 16:19:59 +0300 (MSK) From: =?UTF-8?B?SWx5YSBLb3NhcmV2?= MIME-Version: 1.0 Date: Sun, 06 Sep 2020 16:19:58 +0300 Reply-To: =?UTF-8?B?SWx5YSBLb3NhcmV2?= Message-ID: <1599398398.275563907@f169.i.mail.ru> Content-Type: multipart/alternative; boundary="--ALT--40a4C23ca6Fa3eD9Bd44a09FeB61672a1599398398" In-Reply-To: <67586d6e-46aa-e4f4-1ee7-3fb733bd80db@tarantool.org> References: <20200904135149.2756-1-i.kosarev@tarantool.org> <67586d6e-46aa-e4f4-1ee7-3fb733bd80db@tarantool.org> Subject: Re: [Tarantool-patches] =?utf-8?q?=5BPATCH=5D_core=3A_introduce_evenl?= =?utf-8?q?y_distributed_int64_random_in_range?= List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?UTF-8?B?VmxhZGlzbGF2IFNocGlsZXZveQ==?= Cc: tarantool-patches@dev.tarantool.org ----ALT--40a4C23ca6Fa3eD9Bd44a09FeB61672a1599398398 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 CkhpIQrCoApUaGFua3MgZm9yIHlvdXIgcmV2aWV3LgrCoApTZWUgbXkgYW5zd2VycyAmIHF1ZXN0 aW9ucyBiZWxvdy4KwqAgCj7QodGD0LHQsdC+0YLQsCwgNSDRgdC10L3RgtGP0LHRgNGPIDIwMjAs IDE6MzkgKzAzOjAwINC+0YIgVmxhZGlzbGF2IFNocGlsZXZveSA8di5zaHBpbGV2b3lAdGFyYW50 b29sLm9yZz46Cj7CoAo+SGkhIFRoYW5rcyBmb3IgdGhlIHBhdGNoIQo+Cj5TZWUgMiBjb21tZW50 cyBiZWxvdy4KPgo+T24gMDQuMDkuMjAyMCAxNTo1MSwgSWx5YSBLb3NhcmV2IHdyb3RlOgo+PiBU YXJhbnRvb2wgY29kZWJhc2UgaGFkIGF0IGxlYXN0IHR3byBmdW5jdGlvbnMgdG8gZ2VuZXJhdGUg cmFuZG9tCj4+IGludGVnZXIgaW4gZ2l2ZW4gcmFuZ2UgYW5kIGJvdGggb2YgdGhlbSBoYWQgcHJv YmxlbXMgYXQgbGVhc3Qgd2l0aAo+PiBpbnRlZ2VyIG92ZXJmbG93LiBUaGlzIHBhdGNoIGJyaW5n cyBuaWNlIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHJhbmRvbQo+PiBpbnQ2NF90IGluIGdpdmVuIHJh bmdlIHdpdGhvdXQgb3ZlcmZsb3cgd2hpbGUgcHJlc2VydmluZyB1bmlmb3JtIHJhbmRvbQo+PiBn ZW5lcmF0b3IgZGlzdHJpYnV0aW9uLiBNb3N0IHJlbGV2YW50IHJlcGxhY2VtZW50cyBoYXZlIGJl ZW4gbWFkZS4KPj4KPj4gQ2xvc2VzICM1MDc1Cj4+IC0tLQo+PiBCcmFuY2g6ICBodHRwczovL2dp dGh1Yi5jb20vdGFyYW50b29sL3RhcmFudG9vbC90cmVlL2kua29zYXJldi9naC01MDc1LWZpbmUt cmFuZG9tLWluLXJhbmdlCj4+IElzc3VlOiAgaHR0cHM6Ly9naXRodWIuY29tL3RhcmFudG9vbC90 YXJhbnRvb2wvaXNzdWVzLzUwNzUKPj4KPj4gQENoYW5nZUxvZzoKPj4gKiBJbnRyb2R1Y2Ugb3Zl cmZsb3cgcmVzaXN0YW5kICYgZXZlbmx5IGRpc3RyaWJ1dGVkIHJhbmRvbSBpbiByYW5nZSAoZ2gt NTA3NSkuCj4KPjEuIHJlc2lzdGFuZCAtPiByZXNpc3RhbnQKPgo+Pgo+PiBzcmMvbGliL2NvcmUv cmFuZG9tLmMgfCA4ICsrKysrKysrCj4+IHNyYy9saWIvY29yZS9yYW5kb20uaCB8IDEyICsrKysr KysrKysrKwo+PiBzcmMvbGliL3N3aW0vc3dpbS5jIHwgMjYgKysrKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KPj4gdGVzdC91bml0L2hpc3RvZ3JhbS5jIHwgMTIgKysrLS0tLS0tLS0tCj4+IDQgZmls ZXMgY2hhbmdlZCwgMjcgaW5zZXJ0aW9ucygrKSwgMzEgZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYg LS1naXQgYS9zcmMvbGliL2NvcmUvcmFuZG9tLmMgYi9zcmMvbGliL2NvcmUvcmFuZG9tLmMKPj4g aW5kZXggZjRmYTc1YjFjMS4uMjIyOWM1ZmJiYyAxMDA2NDQKPj4gLS0tIGEvc3JjL2xpYi9jb3Jl L3JhbmRvbS5jCj4+ICsrKyBiL3NyYy9saWIvY29yZS9yYW5kb20uYwo+PiBAQCAtOTcsMyArOTcs MTEgQEAgcmFuZDoKPj4gd2hpbGUgKGdlbmVyYXRlZCA8IHNpemUpCj4+IGJ1ZltnZW5lcmF0ZWQr K10gPSByYW5kKCk7Cj4+IH0KPj4gKwo+PiAraW50NjRfdAo+PiArcmFuZG9tX2luX3JhbmdlKGlu dDY0X3QgbWluLCBpbnQ2NF90IG1heCkKPj4gK3sKPj4gKyBhc3NlcnQobWF4ID49IG1pbik7Cj4+ ICsgZG91YmxlIGRyYW5kID0gZHJhbmQ0OCgpOwo+PiArIHJldHVybiAoaW50NjRfdCkoZHJhbmQg KiBtYXggKyAoMSAtIGRyYW5kKSAqIG1pbik7Cj4+ICt9Cj4KPjIuIFRoZSBwcm9ibGVtIGhlcmUg aXMgdGhhdCB5b3Ugd29uJ3QgZ2V0IGFuIG92ZXJmbG93LCBidXQgeW91IHdvbid0IGdldCBhCj5j b21wbGV0ZWx5IHJhbmRvbSBudW1iZXIgZWl0aGVyLiBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBhYmxl IHRvIHJldHVybgo+YW55dGhpbmcgPiA0OCBiaXRzIHdpdGhvdXQgcHJlY2lzaW9uIGxvc3MuIFNv IGZvciBleGFtcGxlIGlmIEkgd2lsbCBnaXZlIGl0Cj5hIHJhbmdlIFtJTlQ2NF9NSU4sIElOVDY0 X01BWF0sIGl0IHdpbGwgbmV2ZXIgcmV0dXJuIGxvdHMgb2YgaW50ZWdlcnMgPiAyXjQ4Lgo+RXNw ZWNpYWxseSB0aGUgb25lcyA+IDJeNTMsIHNpbmNlIHN0YXJ0aW5nIGZyb20gdGhpcyBwb2ludCBk b3VibGUgd2lsbCBsb29zZQo+aW50ZWdlciBwcmVjaXNpb24uCiogIApPaywgcmlnaHQsIGkgc2Vl IHRoZSBwcm9ibGVtIGhlcmUuIERpZG7igJl0IHRoaW5rIGl0IHRocm91Z2ggZW5vdWdoLgo+Cj5J IGV4cGVjdCBhIHJhbmRvbSBmdW5jdGlvbiBiZSBhYmxlIHRvIHJldHVybiBhbnkgdmFsdWUgZnJv bSB0aGUgZ2l2ZW4gcmFuZ2UuCj5Ob3Qgb25seSBjZXJ0YWluIG9uZXMuCj4KPkluIG90aGVyIHdv cmRzLCB0aGlzIHNvbHV0aW9uIGlzIG5vdCBtdWNoIGJldHRlciB0aGFuIHJhbmQoKSAlLiBJdCBh bHNvIGlzIG5vdAo+YWJsZSB0byByZXR1cm4gdGhlIGNvbXBsZXRlIHJhbmdlLgo+Cj5JIHdhcyB0 aGlua2luZyBhYm91dCB0aGF0IGEgbG90LCBhbmQgdGhpcyBpcyB3aHkgSSBmaWxlZCBhIHRpY2tl dC4gSXQgaXMgbm90Cj5hIHRyaXZpYWwgdGFzay4KPgo+VGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBh YmxlIHRvIHJldHVybiBhbnkgdmFsdWUgZnJvbSAwIHRvIDJeNjQtMSB0byBjb3ZlciB0aGUKPmVu dGlyZSBbSU5UNjRfTUlOLCBJTlQ2NF9NQVhdLCBvciBbMCwgVUlOVDY0X01BWF0uCj4KPkkgd2Fz IHRoaW5raW5nIHdlIGNvdWxkIHVzZSByYW5kb21fYnl0ZXMoKSB0byBnZXQgYSB2YWx1ZSBbMCwg VUlOVDY0X01BWF0sIGFuZAo+dGhlbiBzY2FsZSBpdCBkb3duIHRvIHRoZSBnaXZlbiByYW5nZS4g Rm9yIGV4YW1wbGUsIGlmIHRoZSByYW5nZSBpcyBbQSwgQl0sIHRoZW4KPml0cyBsZW5ndGggTCA9 IEIgLSBBLiBBbmQgdGhlIHJhbmRvbSB2YWx1ZSBpcyBSLgo+Cj5UaGVuIGEgc2NhbGVkIGRvd24g dmFsdWUgd291bGQgYmUKPgo+wqDCoMKgwqBTID0gUiAvIFVJTlQ2NF9NQVggKiBMCj4KPlRoZSBw cm9ibGVtIGhlcmUgaXMgdGhlIHByZWNpc2lvbiBsb3NzIGFnYWluLiBXaGVuIHlvdSB3aWxsIGRp dmlkZSBSIC8gVUlOVDY0X01BWAo+dG8gZ2V0IGEgdmFsdWUgZnJvbSBbMCwgMV0gcmFuZ2UsIHRo ZSByZXN1bHQgaXMgbGlrZWx5IHRvIGJlIGdhcmJhZ2UuIERvdWJsZQo+Y2FuJ3QgaGFuZGxlIHRo YXQgcHJlY2lzaW9uLiBUaGlzIGlzIHdoZXJlIEkgc3RvcHBlZCBhbmQgZmlsZWQgdGhlIHRpY2tl dC4KKiAgCldlbGwsIHllcywgc2NhbGluZyBkb2VzbuKAmXQgcmVhbGx5IHNlZW0gdG8gd29yayBh cyBnb29kIGFzIHdlIHdhbnQgdG8uCkkgbG9va2VkIHRocm91Z2jCoHRoaXMgcGFnZTrCoCBodHRw czovL3d3dy5wY2ctcmFuZG9tLm9yZy9wb3N0cy9ib3VuZGVkLXJhbmRzLmh0bWwKb24gZ2VuZXJh dGlvbiBpbiByYW5nZSBhbmQgZm91bmQgb3V0IGHCoGJvdW5kaW5nwqBtZXRob2Qgd2hpY2ggaSB0 aGluayBpcwp0aGUgbW9zdCBzdWl0YWJsZSBmb3IgdXMuIEl0IHdvcmtzIGZvciBpbnQ2NF90IHRv byBhbmQgY2FuIGJlIHVzZWQgYm90aApmb3Igwqtjb21wbGV0ZcKgcmFuZG9twrsgYW5kIMKrcHNl dWRvLXJhbmRvbcK7OgpgYGAKdWludDMyX3QgYm91bmRlZF9yYW5kKHJuZ190JiBybmcsIHVpbnQz Ml90IHJhbmdlKSB7CiAgICB1aW50MzJfdCBtYXNrID0gfnVpbnQzMl90KDApOwogICAgLS1yYW5n ZTsKICAgIG1hc2sgPj49IF9fYnVpbHRpbl9jbHoocmFuZ2V8MSk7CiAgICB1aW50MzJfdCB4Owog ICAgZG8gewogICAgICAgIHggPSBybmcoKSAmIG1hc2s7CiAgICB9IHdoaWxlICh4ID4gcmFuZ2Up OwogICAgcmV0dXJuIHg7Cn0KYGBgCj5Bbm90aGVyIGlzc3VlIC0gcmFuZG9tX2J5dGVzKCkgaXMg ZWFzeSB0byB1c2UsIGJ1dCBpdCBpcyBub3QgcHNldWRvLXJhbmRvbS4gSXQgaXMKPmNvbXBsZXRl bHkgcmFuZG9tLiBUaGlzIGlzIGFjdHVhbGx5IGdvb2QgdXN1YWxseSwgYnV0IG5vdCBmb3IgdGhl IHRlc3RzLiBJbiBzd2ltCj51bml0IHRlc3RzIGtub3dpbmcgcmFuZG9tIHNlZWQgaXMgdGhlIG9u bHkgd2F5IHRvIHJlcHJvZHVjZSBhIGZhaWwuIFRoYXQgbWFrZXMgbWUKPnRoaW5rIHdlIG5lZWQg dHdvIHJhbmRvbSBmdW5jdGlvbnM6IGZvciBwc2V1ZG8tcmFuZG9tIHZhbHVlcyBhbmQgZm9yIHJl YWwgcmFuZG9tLgo+Cj5Qc2V1ZG8tcmFuZG9tIGNvdWxkIGJlIGdlbmVyYXRlZCBieSBjb25jYXRl bmF0aW9uIG9mIHNldmVyYWwgcmFuZCgpIGNhbGxzIHVzaW5nCj48PCBhbmQgfC4KPgo+QW5vdGhl ciBvcHRpb24gLSBpbXBsZW1lbnQgTWVyc2VubmUgdHdpc3RlciBhbGdvcml0aG0gb2YgcHNldWRv LXJhbmRvbSBudW1iZXJzIG9mCj51aW50NjRfdCB0eXBlLgo+Cj5BbHNvIEkgd291bGQgbG9vayBp bnRvIHdoYXQgc3RkOjogaGFzIGluIEMrKy4gSXRzIHJhbmRvbSBmdW5jdGlvbmFsaXR5IGlzIG11 Y2gKPnJpY2hlciB0aGFuIHJhbmQoKS4KKiAgClJpZ2h0LCBDKysgaGFzIG1lcnNlbm5lX3R3aXN0 ZXIgaW50NjRfdMKgaW1wbGVtZW50YXRpb24gYW5kIHNvbWUgc29sdXRpb24KdG8gZ2V0IGludDY0 X3QgaW4gcmFuZ2UgYXMgZm9sbG93aW5nOgrCoArCoApgYGAKc3RkOjpyYW5kb21fZGV2aWNlIHJk OwpzdGQ6Om10MTk5MzdfNjQgZ2VuZXJhdG9yKHJkKCkpOwpzdGQ6OnVuaWZvcm1faW50X2Rpc3Ry aWJ1dGlvbjxpbnQ2NF90PiByYW5nZShtaW4sIG1heCk7CnJldHVybiByYW5nZShnZW5lcmF0b3Ip OwpgYGAKSG93ZXZlciwgQysrIGltcGxlbWVudGF0aW9uIHNlZW1zIHRvIGJlIG92ZXJjb21wbGlj YXRlZC4KSSB0aGluayBpdCBpcyBiZXR0ZXIgaWRlYSB0byBpbXBsZW1lbnQgc29tZXRoaW5nIHNp bXBsZSAmIGZhc3QuCsKgCkZvciB0aGXCoG1lcnNlbm5lX3R3aXN0ZXLCoHRoZSBnb29kIGlkZWEg aXMgdG8gYWRvcHQgdGhpcyBpbXBsZW1lbnRhdGlvbiwKYXMgZmFyIGFzIGkgc2VlIGl0OgpodHRw Oi8vd3d3Lm1hdGguc2NpLmhpcm9zaGltYS11LmFjLmpwL35tLW1hdC9NVC9lbXQ2NC5odG1sCsKg CkJ1dCB3aGF0IGkgdGhpbmsgbWlnaHQgYmUgZXZlbiBiZXR0ZXIgaXMgdG8gdGFrZSBzb21ldGhp bmfCoGxlc3MgY2xhc3NpYwp3aGlsZSBtb3JlIHJlbGV2YW50LCBhY2NvcmRpbmcgdG8gdGhpcyBw YXBlcjrCoCBodHRwczovL2FyeGl2Lm9yZy9wZGYvMTkxMC4wNjQzNy5wZGYKwqAKSSB0aGluayB0 aGUgYmVzdCBvcHRpb24gZm9yIHVzwqBub3cgaXMgeG9zaGlybzI1NisrOiAgaHR0cDovL3Bybmcu ZGkudW5pbWkuaXQvCkl0IHNlZW1zIHRvIGJlIG11Y2ggZmFzdGVyIGFuZCBkb2VzbuKAmXQgZmFp bCBhbnkga25vd24gc3RhdGlzdGljYWwgdGVzdCBhcyBmYXIgYXMgaSBzZWUuClRoZSBpbXBsZW1l bnRhdGlvbiB0byBhZGFwdDrCoCBodHRwOi8vcHJuZy5kaS51bmltaS5pdC94b3NoaXJvMjU2cGx1 c3BsdXMuYwrCoAotLQpJbHlhIEtvc2FyZXYKwqA= ----ALT--40a4C23ca6Fa3eD9Bd44a09FeB61672a1599398398 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: base64 CjxIVE1MPjxCT0RZPjxkaXY+PGRpdj5IaSE8L2Rpdj48ZGl2PiZuYnNwOzwvZGl2PjxkaXY+VGhh bmtzIGZvciB5b3VyIHJldmlldy48L2Rpdj48ZGl2PiZuYnNwOzwvZGl2PjxkaXY+U2VlIG15IGFu c3dlcnMgJmFtcDsgcXVlc3Rpb25zIGJlbG93Ljxicj4mbmJzcDs8L2Rpdj48YmxvY2txdW90ZSBz dHlsZT0iYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICMwODU3QTY7IG1hcmdpbjoxMHB4OyBwYWRkaW5n OjAgMCAwIDEwcHg7Ij7QodGD0LHQsdC+0YLQsCwgNSDRgdC10L3RgtGP0LHRgNGPIDIwMjAsIDE6 MzkgKzAzOjAwINC+0YIgVmxhZGlzbGF2IFNocGlsZXZveSAmbHQ7di5zaHBpbGV2b3lAdGFyYW50 b29sLm9yZyZndDs6PGJyPiZuYnNwOzxkaXYgaWQ9IiI+PGRpdiBjbGFzcz0ianMtaGVscGVyIGpz LXJlYWRtc2ctbXNnIj48c3R5bGUgdHlwZT0idGV4dC9jc3MiPjwvc3R5bGU+PGRpdj48ZGl2IGlk PSJzdHlsZV8xNTk5MjU5MTUxMTYyNDcyNzU1N19CT0RZIj5IaSEgVGhhbmtzIGZvciB0aGUgcGF0 Y2ghPGJyPjxicj5TZWUgMiBjb21tZW50cyBiZWxvdy48YnI+PGJyPk9uIDA0LjA5LjIwMjAgMTU6 NTEsIElseWEgS29zYXJldiB3cm90ZTo8YnI+Jmd0OyBUYXJhbnRvb2wgY29kZWJhc2UgaGFkIGF0 IGxlYXN0IHR3byBmdW5jdGlvbnMgdG8gZ2VuZXJhdGUgcmFuZG9tPGJyPiZndDsgaW50ZWdlciBp biBnaXZlbiByYW5nZSBhbmQgYm90aCBvZiB0aGVtIGhhZCBwcm9ibGVtcyBhdCBsZWFzdCB3aXRo PGJyPiZndDsgaW50ZWdlciBvdmVyZmxvdy4gVGhpcyBwYXRjaCBicmluZ3MgbmljZSBmdW5jdGlv biB0byBnZW5lcmF0ZSByYW5kb208YnI+Jmd0OyBpbnQ2NF90IGluIGdpdmVuIHJhbmdlIHdpdGhv dXQgb3ZlcmZsb3cgd2hpbGUgcHJlc2VydmluZyB1bmlmb3JtIHJhbmRvbTxicj4mZ3Q7IGdlbmVy YXRvciBkaXN0cmlidXRpb24uIE1vc3QgcmVsZXZhbnQgcmVwbGFjZW1lbnRzIGhhdmUgYmVlbiBt YWRlLjxicj4mZ3Q7PGJyPiZndDsgQ2xvc2VzICM1MDc1PGJyPiZndDsgLS0tPGJyPiZndDsgQnJh bmNoOiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGFyYW50b29sL3RhcmFudG9vbC90cmVl L2kua29zYXJldi9naC01MDc1LWZpbmUtcmFuZG9tLWluLXJhbmdlIiB0YXJnZXQ9Il9ibGFuayI+ aHR0cHM6Ly9naXRodWIuY29tL3RhcmFudG9vbC90YXJhbnRvb2wvdHJlZS9pLmtvc2FyZXYvZ2gt NTA3NS1maW5lLXJhbmRvbS1pbi1yYW5nZTwvYT48YnI+Jmd0OyBJc3N1ZTogPGEgaHJlZj0iaHR0 cHM6Ly9naXRodWIuY29tL3RhcmFudG9vbC90YXJhbnRvb2wvaXNzdWVzLzUwNzUiIHRhcmdldD0i X2JsYW5rIj5odHRwczovL2dpdGh1Yi5jb20vdGFyYW50b29sL3RhcmFudG9vbC9pc3N1ZXMvNTA3 NTwvYT48YnI+Jmd0Ozxicj4mZ3Q7IEBDaGFuZ2VMb2c6PGJyPiZndDsgKiBJbnRyb2R1Y2Ugb3Zl cmZsb3cgcmVzaXN0YW5kICZhbXA7IGV2ZW5seSBkaXN0cmlidXRlZCByYW5kb20gaW4gcmFuZ2Ug KGdoLTUwNzUpLjxicj48YnI+MS4gcmVzaXN0YW5kIC0mZ3Q7IHJlc2lzdGFudDxicj48YnI+Jmd0 Ozxicj4mZ3Q7IHNyYy9saWIvY29yZS9yYW5kb20uYyB8IDggKysrKysrKys8YnI+Jmd0OyBzcmMv bGliL2NvcmUvcmFuZG9tLmggfCAxMiArKysrKysrKysrKys8YnI+Jmd0OyBzcmMvbGliL3N3aW0v c3dpbS5jIHwgMjYgKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS08YnI+Jmd0OyB0ZXN0L3VuaXQv aGlzdG9ncmFtLmMgfCAxMiArKystLS0tLS0tLS08YnI+Jmd0OyA0IGZpbGVzIGNoYW5nZWQsIDI3 IGluc2VydGlvbnMoKyksIDMxIGRlbGV0aW9ucygtKTxicj4mZ3Q7PGJyPiZndDsgZGlmZiAtLWdp dCBhL3NyYy9saWIvY29yZS9yYW5kb20uYyBiL3NyYy9saWIvY29yZS9yYW5kb20uYzxicj4mZ3Q7 IGluZGV4IGY0ZmE3NWIxYzEuLjIyMjljNWZiYmMgMTAwNjQ0PGJyPiZndDsgLS0tIGEvc3JjL2xp Yi9jb3JlL3JhbmRvbS5jPGJyPiZndDsgKysrIGIvc3JjL2xpYi9jb3JlL3JhbmRvbS5jPGJyPiZn dDsgQEAgLTk3LDMgKzk3LDExIEBAIHJhbmQ6PGJyPiZndDsgd2hpbGUgKGdlbmVyYXRlZCAmbHQ7 IHNpemUpPGJyPiZndDsgYnVmW2dlbmVyYXRlZCsrXSA9IHJhbmQoKTs8YnI+Jmd0OyB9PGJyPiZn dDsgKzxicj4mZ3Q7ICtpbnQ2NF90PGJyPiZndDsgK3JhbmRvbV9pbl9yYW5nZShpbnQ2NF90IG1p biwgaW50NjRfdCBtYXgpPGJyPiZndDsgK3s8YnI+Jmd0OyArIGFzc2VydChtYXggJmd0Oz0gbWlu KTs8YnI+Jmd0OyArIGRvdWJsZSBkcmFuZCA9IGRyYW5kNDgoKTs8YnI+Jmd0OyArIHJldHVybiAo aW50NjRfdCkoZHJhbmQgKiBtYXggKyAoMSAtIGRyYW5kKSAqIG1pbik7PGJyPiZndDsgK308YnI+ PGJyPjIuIFRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCB5b3Ugd29uJ3QgZ2V0IGFuIG92ZXJmbG93 LCBidXQgeW91IHdvbid0IGdldCBhPGJyPmNvbXBsZXRlbHkgcmFuZG9tIG51bWJlciBlaXRoZXIu IFRoaXMgZnVuY3Rpb24gaXMgbm90IGFibGUgdG8gcmV0dXJuPGJyPmFueXRoaW5nICZndDsgNDgg Yml0cyB3aXRob3V0IHByZWNpc2lvbiBsb3NzLiBTbyBmb3IgZXhhbXBsZSBpZiBJIHdpbGwgZ2l2 ZSBpdDxicj5hIHJhbmdlIFtJTlQ2NF9NSU4sIElOVDY0X01BWF0sIGl0IHdpbGwgbmV2ZXIgcmV0 dXJuIGxvdHMgb2YgaW50ZWdlcnMgJmd0OyAyXjQ4Ljxicj5Fc3BlY2lhbGx5IHRoZSBvbmVzICZn dDsgMl41Mywgc2luY2Ugc3RhcnRpbmcgZnJvbSB0aGlzIHBvaW50IGRvdWJsZSB3aWxsIGxvb3Nl PGJyPmludGVnZXIgcHJlY2lzaW9uLjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvYmxvY2txdW90 ZT48L2Rpdj48b2w+PGxpPk9rLCByaWdodCwgaSBzZWUgdGhlIHByb2JsZW0gaGVyZS4gRGlkbuKA mXQgdGhpbmsgaXQgdGhyb3VnaCBlbm91Z2guPC9saT48L29sPjxkaXY+PGJsb2NrcXVvdGUgc3R5 bGU9ImJvcmRlci1sZWZ0OjFweCBzb2xpZCAjMDg1N0E2OyBtYXJnaW46MTBweDsgcGFkZGluZzow IDAgMCAxMHB4OyI+PGRpdj48ZGl2IGNsYXNzPSJqcy1oZWxwZXIganMtcmVhZG1zZy1tc2ciPjxk aXY+PGRpdj48YnI+SSBleHBlY3QgYSByYW5kb20gZnVuY3Rpb24gYmUgYWJsZSB0byByZXR1cm4g YW55IHZhbHVlIGZyb20gdGhlIGdpdmVuIHJhbmdlLjxicj5Ob3Qgb25seSBjZXJ0YWluIG9uZXMu PGJyPjxicj5JbiBvdGhlciB3b3JkcywgdGhpcyBzb2x1dGlvbiBpcyBub3QgbXVjaCBiZXR0ZXIg dGhhbiByYW5kKCkgJS4gSXQgYWxzbyBpcyBub3Q8YnI+YWJsZSB0byByZXR1cm4gdGhlIGNvbXBs ZXRlIHJhbmdlLjxicj48YnI+SSB3YXMgdGhpbmtpbmcgYWJvdXQgdGhhdCBhIGxvdCwgYW5kIHRo aXMgaXMgd2h5IEkgZmlsZWQgYSB0aWNrZXQuIEl0IGlzIG5vdDxicj5hIHRyaXZpYWwgdGFzay48 YnI+PGJyPlRoZSBmdW5jdGlvbiBzaG91bGQgYmUgYWJsZSB0byByZXR1cm4gYW55IHZhbHVlIGZy b20gMCB0byAyXjY0LTEgdG8gY292ZXIgdGhlPGJyPmVudGlyZSBbSU5UNjRfTUlOLCBJTlQ2NF9N QVhdLCBvciBbMCwgVUlOVDY0X01BWF0uPGJyPjxicj5JIHdhcyB0aGlua2luZyB3ZSBjb3VsZCB1 c2UgcmFuZG9tX2J5dGVzKCkgdG8gZ2V0IGEgdmFsdWUgWzAsIFVJTlQ2NF9NQVhdLCBhbmQ8YnI+ dGhlbiBzY2FsZSBpdCBkb3duIHRvIHRoZSBnaXZlbiByYW5nZS4gRm9yIGV4YW1wbGUsIGlmIHRo ZSByYW5nZSBpcyBbQSwgQl0sIHRoZW48YnI+aXRzIGxlbmd0aCBMID0gQiAtIEEuIEFuZCB0aGUg cmFuZG9tIHZhbHVlIGlzIFIuPGJyPjxicj5UaGVuIGEgc2NhbGVkIGRvd24gdmFsdWUgd291bGQg YmU8YnI+PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1MgPSBSIC8gVUlOVDY0X01BWCAqIEw8 YnI+PGJyPlRoZSBwcm9ibGVtIGhlcmUgaXMgdGhlIHByZWNpc2lvbiBsb3NzIGFnYWluLiBXaGVu IHlvdSB3aWxsIGRpdmlkZSBSIC8gVUlOVDY0X01BWDxicj50byBnZXQgYSB2YWx1ZSBmcm9tIFsw LCAxXSByYW5nZSwgdGhlIHJlc3VsdCBpcyBsaWtlbHkgdG8gYmUgZ2FyYmFnZS4gRG91YmxlPGJy PmNhbid0IGhhbmRsZSB0aGF0IHByZWNpc2lvbi4gVGhpcyBpcyB3aGVyZSBJIHN0b3BwZWQgYW5k IGZpbGVkIHRoZSB0aWNrZXQuPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjwv ZGl2PjxvbCBzdGFydD0iMiI+PGxpPldlbGwsIHllcywgc2NhbGluZyBkb2VzbuKAmXQgcmVhbGx5 IHNlZW0gdG8gd29yayBhcyBnb29kIGFzIHdlIHdhbnQgdG8uPGJyPkkgbG9va2VkIHRocm91Z2gm bmJzcDt0aGlzIHBhZ2U6Jm5ic3A7PGEgaHJlZj0iaHR0cHM6Ly93d3cucGNnLXJhbmRvbS5vcmcv cG9zdHMvYm91bmRlZC1yYW5kcy5odG1sIj5odHRwczovL3d3dy5wY2ctcmFuZG9tLm9yZy9wb3N0 cy9ib3VuZGVkLXJhbmRzLmh0bWw8L2E+PGJyPm9uIGdlbmVyYXRpb24gaW4gcmFuZ2UgYW5kIGZv dW5kIG91dCBhJm5ic3A7Ym91bmRpbmcmbmJzcDttZXRob2Qgd2hpY2ggaSB0aGluayBpczxicj50 aGUgbW9zdCBzdWl0YWJsZSBmb3IgdXMuIEl0IHdvcmtzIGZvciBpbnQ2NF90IHRvbyBhbmQgY2Fu IGJlIHVzZWQgYm90aDxicj5mb3Igwqtjb21wbGV0ZSZuYnNwO3JhbmRvbcK7IGFuZCDCq3BzZXVk by1yYW5kb23Cuzo8cHJlPmBgYAp1aW50MzJfdCBib3VuZGVkX3JhbmQocm5nX3QmYW1wOyBybmcs IHVpbnQzMl90IHJhbmdlKSB7CiAgICB1aW50MzJfdCBtYXNrID0gfnVpbnQzMl90KDApOwogICAg LS1yYW5nZTsKICAgIG1hc2sgJmd0OyZndDs9IF9fYnVpbHRpbl9jbHoocmFuZ2V8MSk7CiAgICB1 aW50MzJfdCB4OwogICAgZG8gewogICAgICAgIHggPSBybmcoKSAmYW1wOyBtYXNrOwogICAgfSB3 aGlsZSAoeCAmZ3Q7IHJhbmdlKTsKICAgIHJldHVybiB4Owp9CmBgYDwvcHJlPjwvbGk+PC9vbD48 ZGl2PjxibG9ja3F1b3RlIHN0eWxlPSJib3JkZXItbGVmdDoxcHggc29saWQgIzA4NTdBNjsgbWFy Z2luOjEwcHg7IHBhZGRpbmc6MCAwIDAgMTBweDsiPjxkaXY+PGRpdiBjbGFzcz0ianMtaGVscGVy IGpzLXJlYWRtc2ctbXNnIj48ZGl2PjxkaXY+QW5vdGhlciBpc3N1ZSAtIHJhbmRvbV9ieXRlcygp IGlzIGVhc3kgdG8gdXNlLCBidXQgaXQgaXMgbm90IHBzZXVkby1yYW5kb20uIEl0IGlzPGJyPmNv bXBsZXRlbHkgcmFuZG9tLiBUaGlzIGlzIGFjdHVhbGx5IGdvb2QgdXN1YWxseSwgYnV0IG5vdCBm b3IgdGhlIHRlc3RzLiBJbiBzd2ltPGJyPnVuaXQgdGVzdHMga25vd2luZyByYW5kb20gc2VlZCBp cyB0aGUgb25seSB3YXkgdG8gcmVwcm9kdWNlIGEgZmFpbC4gVGhhdCBtYWtlcyBtZTxicj50aGlu ayB3ZSBuZWVkIHR3byByYW5kb20gZnVuY3Rpb25zOiBmb3IgcHNldWRvLXJhbmRvbSB2YWx1ZXMg YW5kIGZvciByZWFsIHJhbmRvbS48YnI+PGJyPlBzZXVkby1yYW5kb20gY291bGQgYmUgZ2VuZXJh dGVkIGJ5IGNvbmNhdGVuYXRpb24gb2Ygc2V2ZXJhbCByYW5kKCkgY2FsbHMgdXNpbmc8YnI+Jmx0 OyZsdDsgYW5kIHwuPGJyPjxicj5Bbm90aGVyIG9wdGlvbiAtIGltcGxlbWVudCBNZXJzZW5uZSB0 d2lzdGVyIGFsZ29yaXRobSBvZiBwc2V1ZG8tcmFuZG9tIG51bWJlcnMgb2Y8YnI+dWludDY0X3Qg dHlwZS48YnI+PGJyPkFsc28gSSB3b3VsZCBsb29rIGludG8gd2hhdCBzdGQ6OiBoYXMgaW4gQysr LiBJdHMgcmFuZG9tIGZ1bmN0aW9uYWxpdHkgaXMgbXVjaDxicj5yaWNoZXIgdGhhbiByYW5kKCku PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjwvZGl2PjxvbCBzdGFydD0iMyI+ PGxpPlJpZ2h0LCBDKysgaGFzIG1lcnNlbm5lX3R3aXN0ZXIgaW50NjRfdCZuYnNwO2ltcGxlbWVu dGF0aW9uIGFuZCBzb21lIHNvbHV0aW9uPGJyPnRvIGdldCBpbnQ2NF90IGluIHJhbmdlIGFzIGZv bGxvd2luZzo8cHJlIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY7IGNvbG9yOiMwODA4 MDg7IGZvbnQtZmFtaWx5OidKZXRCcmFpbnMgTW9ubycsbW9ub3NwYWNlOyBmb250LXNpemU6OS44 cHQiPiZuYnNwOzwvcHJlPjwvbGk+PC9vbD48ZGl2PiZuYnNwOzwvZGl2PjxwcmUgc3R5bGU9ImJh Y2tncm91bmQtY29sb3I6I2ZmZmZmZjsgY29sb3I6IzA4MDgwODsgZm9udC1mYW1pbHk6J0pldEJy YWlucyBNb25vJyxtb25vc3BhY2U7IGZvbnQtc2l6ZTo5LjhwdCI+YGBgCnN0ZDo6cmFuZG9tX2Rl dmljZSByZDsKc3RkOjptdDE5OTM3XzY0IGdlbmVyYXRvcihyZCgpKTsKc3RkOjp1bmlmb3JtX2lu dF9kaXN0cmlidXRpb24mbHQ7aW50NjRfdCZndDsgcmFuZ2UobWluLCBtYXgpOwpyZXR1cm4gcmFu Z2UoZ2VuZXJhdG9yKTsKYGBgCjwvcHJlPjxkaXY+SG93ZXZlciwgQysrIGltcGxlbWVudGF0aW9u IHNlZW1zIHRvIGJlIG92ZXJjb21wbGljYXRlZC48YnI+SSB0aGluayBpdCBpcyBiZXR0ZXIgaWRl YSB0byBpbXBsZW1lbnQgc29tZXRoaW5nIHNpbXBsZSAmYW1wOyBmYXN0LjwvZGl2PjxkaXY+Jm5i c3A7PC9kaXY+PGRpdj5Gb3IgdGhlJm5ic3A7bWVyc2VubmVfdHdpc3RlciZuYnNwO3RoZSBnb29k IGlkZWEgaXMgdG8gYWRvcHQgdGhpcyBpbXBsZW1lbnRhdGlvbiw8L2Rpdj48ZGl2PmFzIGZhciBh cyBpIHNlZSBpdDo8L2Rpdj48ZGl2PjxhIGhyZWY9Imh0dHA6Ly93d3cubWF0aC5zY2kuaGlyb3No aW1hLXUuYWMuanAvfm0tbWF0L01UL2VtdDY0Lmh0bWwiPmh0dHA6Ly93d3cubWF0aC5zY2kuaGly b3NoaW1hLXUuYWMuanAvfm0tbWF0L01UL2VtdDY0Lmh0bWw8L2E+PC9kaXY+PGRpdj4mbmJzcDs8 L2Rpdj48ZGl2PkJ1dCB3aGF0IGkgdGhpbmsgbWlnaHQgYmUgZXZlbiBiZXR0ZXIgaXMgdG8gdGFr ZSBzb21ldGhpbmcmbmJzcDtsZXNzIGNsYXNzaWM8L2Rpdj48ZGl2PndoaWxlIG1vcmUgcmVsZXZh bnQsIGFjY29yZGluZyB0byB0aGlzIHBhcGVyOiZuYnNwOzxhIGhyZWY9Imh0dHBzOi8vYXJ4aXYu b3JnL3BkZi8xOTEwLjA2NDM3LnBkZiI+aHR0cHM6Ly9hcnhpdi5vcmcvcGRmLzE5MTAuMDY0Mzcu cGRmPC9hPjwvZGl2PjxkaXY+Jm5ic3A7PC9kaXY+PGRpdj5JIHRoaW5rIHRoZSBiZXN0IG9wdGlv biBmb3IgdXMmbmJzcDtub3cgaXMgeG9zaGlybzI1NisrOiA8YSBocmVmPSJodHRwOi8vcHJuZy5k aS51bmltaS5pdC8iPmh0dHA6Ly9wcm5nLmRpLnVuaW1pLml0LzwvYT48L2Rpdj48ZGl2Pkl0IHNl ZW1zIHRvIGJlIG11Y2ggZmFzdGVyIGFuZCBkb2VzbuKAmXQgZmFpbCBhbnkga25vd24gc3RhdGlz dGljYWwgdGVzdCBhcyBmYXIgYXMgaSBzZWUuPC9kaXY+PGRpdj5UaGUgaW1wbGVtZW50YXRpb24g dG8gYWRhcHQ6Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3BybmcuZGkudW5pbWkuaXQveG9zaGlybzI1 NnBsdXNwbHVzLmMiPmh0dHA6Ly9wcm5nLmRpLnVuaW1pLml0L3hvc2hpcm8yNTZwbHVzcGx1cy5j PC9hPjwvZGl2PjxkaXY+Jm5ic3A7PC9kaXY+PGRpdj48ZGl2IGRhdGEtc2lnbmF0dXJlLXdpZGdl dD0iY29udGFpbmVyIj48ZGl2IGRhdGEtc2lnbmF0dXJlLXdpZGdldD0iY29udGVudCI+PGRpdj4t LTxicj5JbHlhIEtvc2FyZXY8L2Rpdj48L2Rpdj48L2Rpdj48ZGl2PiZuYnNwOzwvZGl2PjwvZGl2 PjwvQk9EWT48L0hUTUw+Cg== ----ALT--40a4C23ca6Fa3eD9Bd44a09FeB61672a1599398398--