From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from out-184.mta1.migadu.com (out-184.mta1.migadu.com [IPv6:2001:41d0:203:375::b8]) by sourceware.org (Postfix) with ESMTPS id 6B3783858D34 for ; Sun, 14 Apr 2024 20:15:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6B3783858D34 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=sparen.no Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=sparen.no ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 6B3783858D34 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2001:41d0:203:375::b8 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1713125744; cv=none; b=N8IZidDUQJj0ukO7PRvV88irfoS1sAqzqH4Hf96GlUbxlSSKLUxaawnBR3nve6P2AQxkpAKHeKvlo1jExna3K2r/EZn6/uU3ydV2Ev+Z6kYhLozlkxCDKxxawCaW7i2mnkB6gYfpn4+Q2ux9Qo76Cuq8HMfiJenosxhnZ4gpSfA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1713125744; c=relaxed/simple; bh=dlynXS1hdXo1ppR+IOebBCo1mUBNN1sBp9DcBI8nTPs=; h=DKIM-Signature:Message-ID:Date:MIME-Version:To:From:Subject; b=qWYShqDwK19HhkxTztbLlb2wmE+1IsqSRQ3vsMpyh5ZiN+cz6z+WUW+BbTJWQTpmBQsAiX+8Vb3l/bKT35wFHlk5SMG/tfuQEya7809S3QLmTWmHmeHACk1mj9N5jp6RU+n/4K2qGxx3Nd3+q3SklRzU30BJymhRTw81lWkZx4c= ARC-Authentication-Results: i=1; server2.sourceware.org Content-Type: multipart/mixed; boundary="------------BBYn0a27UDU5RDhkmN0ZdUJv" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sparen.no; s=key1; t=1713125738; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=hTICsdXlVzyyZWLazHxtCCMgFX7rWo2jvdqSEXwusoE=; b=h+K+9xmJQZNwCfwEO4HGeNnKWYPt6c5ofY2iu318eE99B1jdyQ45jPKGBldUf26CpZ1iZ1 qzqd8ArjKc/HELm0giMJ0FoWuSQNHDA/qtmfeiHfCKO55FFTFNTJWDRO95YgTwGKdiQVJw WjIY9AzrKjpr+8iWEOe5pGNr1GDob+E= Message-ID: <0430a219-9de2-4777-abf3-ec4f1db7df03@sparen.no> Date: Sun, 14 Apr 2024 22:15:34 +0200 MIME-Version: 1.0 Content-Language: en-US To: libstdc++@gcc.gnu.org X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: =?UTF-8?Q?Teodor_Sp=C3=A6ren?= Subject: [PATCH] Want feedback for potential implementation of P2643R2 atomic features X-Migadu-Flow: FLOW_OUT X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------BBYn0a27UDU5RDhkmN0ZdUJv Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hello! Earlier I sent an email about wanting to try to implement the new features described in https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2643r2.html I've now gone and done that. I've added the support for all the commands for floats, and integer values, as well as atomic_flag. I've added tests for atomic_integer. I will of course finish all the types and add tests for all the types, but I wanted to know if this is work that is wanted or if it's to early to implement, and I also wanted some feedback. I have a couple of questions: 1. How should I feature test for this to be enabled or not? For the `wait` and `notify` functionality #if __glibcxx_atomic_wait is used, should I guard this behind a new type of flag? 2. How is the formatting? Is there a command to format all the files? 3. What timeout values should I use for tests? I don't want the waiting to take 2seconds, but I also don't want the tests to fail intermittently. I've tried to use 60ms buffer now, but this seems like a lot to me. 4. Why does "__atomic_wait_address_for_v" take the "old" parameter by rvalue reference? Immediately we call a function which takes the parameter by value. Is this just an oversight or is there some semantics here that I'm not aware of? I've attached the patches in what I hope is a good format, I hope that I've not butchered this completely! Best regards, Teodor Spæren --------------BBYn0a27UDU5RDhkmN0ZdUJv Content-Type: text/x-patch; charset=UTF-8; name="0004-Add-tests-for-atomic-integral.patch" Content-Disposition: attachment; filename="0004-Add-tests-for-atomic-integral.patch" Content-Transfer-Encoding: base64 RnJvbSBiMGJmZTk3MDc1MmU4NDQ5M2UyZTc5YzcyNDQzNzJkYWQzMmMyOWNiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/VGVvZG9yPTIwU3A9QzM9QTZyZW4/ PSA8dGVvZG9yQHNwYXJlbi5ubz4KRGF0ZTogU3VuLCAxNCBBcHIgMjAyNCAyMjowODozOCAr MDIwMApTdWJqZWN0OiBbUEFUQ0ggNC80XSBBZGQgdGVzdHMgZm9yIGF0b21pYyBpbnRlZ3Jh bAoKLS0tCiAuLi4vYXRvbWljX2ludGVncmFsL2V4dGVuZGVkX3dhaXQuY2MgICAgICAgICAg fCA2NTYgKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNjU2IGluc2VydGlv bnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvdGVzdHN1aXRlLzI5X2F0 b21pY3MvYXRvbWljX2ludGVncmFsL2V4dGVuZGVkX3dhaXQuY2MKCmRpZmYgLS1naXQgYS9s aWJzdGRjKystdjMvdGVzdHN1aXRlLzI5X2F0b21pY3MvYXRvbWljX2ludGVncmFsL2V4dGVu ZGVkX3dhaXQuY2MgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzI5X2F0b21pY3MvYXRvbWlj X2ludGVncmFsL2V4dGVuZGVkX3dhaXQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjZiOTE0NDBmOGJkCi0tLSAvZGV2L251bGwKKysrIGIvbGlic3RkYysr LXYzL3Rlc3RzdWl0ZS8yOV9hdG9taWNzL2F0b21pY19pbnRlZ3JhbC9leHRlbmRlZF93YWl0 LmNjCkBAIC0wLDAgKzEsNjU2IEBACisjaW5jbHVkZSA8YXRvbWljPgorI2luY2x1ZGUgPHRo cmVhZD4KKyNpbmNsdWRlIDxjaHJvbm8+CisKKy8vIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGMr KzIwIH0gfQorLy8geyBkZy1yZXF1aXJlLWd0aHJlYWRzICIiIH0KKy8vIHsgZGctYWRkLW9w dGlvbnMgbGliYXRvbWljIH0KKy8vIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItcHRocmVh ZCIgeyB0YXJnZXQgcHRocmVhZCB9IH0KKworLy8gQ29weXJpZ2h0IChDKSAyMDIwLTIwMjQg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBh cnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQor Ly8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQg dW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lv bi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYWxvbmcKKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMu ICBJZiBub3Qgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyNp bmNsdWRlIDx0ZXN0c3VpdGVfaG9va3MuaD4KKworc3RydWN0IFRpbWVyCit7CisgIHN0ZDo6 Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgc3RhcnR7CisgICAgc3RkOjpjaHJv bm86OnN0ZWFkeV9jbG9jazo6bm93KCkKKyAgfTsKKworICBbW25vZGlzY2FyZF1dIGF1dG8K KyAgZHVyYXRpb24oKSBjb25zdAorICB7CisgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpzdGVh ZHlfY2xvY2s6Om5vdygpIC0gc3RhcnQ7CisgIH0KK307CisKKwordGVtcGxhdGU8dHlwZW5h bWUgVD4KK3ZvaWQgY2hlY2soKQoreworICB1c2luZyBuYW1lc3BhY2Ugc3RkOjpjaHJvbm9f bGl0ZXJhbHM7CisKKyAgaW5saW5lIGNvbnN0ZXhwciBhdXRvIG1zX2J1ZmZlciA9IDYwbXM7 CisKKyAgLy8gV2FpdCB2YWx1ZSBzaG91bGQgcmV0dXJuIGltbWlkaWF0bHkgd2hlbiBpdCBo YXMgdGhlIHJpZ2h0IHZhbHVlCisgIHsKKyAgICBjb25zdCBUaW1lciB0OworICAgIHN0ZDo6 YXRvbWljPFQ+IHdvdyA9IDM0OworICAgIGNvbnN0IGF1dG8gbmV4dCA9IHdvdy53YWl0X3Zh bHVlKDEwMCk7CisgICAgVkVSSUZZKG5leHQgPT0gMzQpOworICAgIFZFUklGWSh0LmR1cmF0 aW9uKCkgPCAxbXMpOworICB9CisKKyAgLy8gIldhaXQgdmFsdWUgc2hvdWxkIHdhaXQgdW50 aWwgbm90aWZpZWQgYXRsZWFzdCIKKyAgeworICAgIHN0ZDo6YXRvbWljPFQ+IHdvdyA9IDM0 OworICAgIGNvbnN0IFRpbWVyIHQ7CisgICAgc3RkOjpqdGhyZWFkIG91dFRoZXJlKFsmd293 XSgpIHsKKyAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2Zvcig1MG1zKTsKKyAgICAg IHdvdy5zdG9yZSgxMDIsIHN0ZDo6bWVtb3J5X29yZGVyOjpyZWxlYXNlKTsKKyAgICAgIHdv dy5ub3RpZnlfYWxsKCk7CisgICAgfSk7CisKKyAgICBhdXRvIHJlcyA9IHdvdy53YWl0X3Zh bHVlKDM0KTsKKyAgICBWRVJJRlkocmVzID09IDEwMik7CisgICAgVkVSSUZZKDUwbXMgPD0g dC5kdXJhdGlvbigpKTsKKyAgICBWRVJJRlkodC5kdXJhdGlvbigpIDwgbXNfYnVmZmVyKTsK KyAgfQorCisgIC8vICJXYWl0IHZhbHVlIHNob3VsZCBub3QgcmV0dXJuIG9uIHVuY2hhbmdl ZCB2YWx1ZS4iCisgIHsKKyAgICBjb25zdCBUaW1lciB0OworICAgIHN0ZDo6YXRvbWljPFQ+ IHdvdyA9IDM0OworICAgIHN0ZDo6anRocmVhZCBvdXRUaGVyZShbJndvd10oKSB7CisgICAg ICBzdGQ6OnRoaXNfdGhyZWFkOjpzbGVlcF9mb3IoMjBtcyk7CisgICAgICB3b3cuc3RvcmUo MzQpOworICAgICAgd293Lm5vdGlmeV9hbGwoKTsKKyAgICAgIHN0ZDo6dGhpc190aHJlYWQ6 OnNsZWVwX2Zvcig0MG1zKTsKKyAgICAgIHdvdy5zdG9yZSgxMDIpOworICAgICAgd293Lm5v dGlmeV9hbGwoKTsKKyAgICB9KTsKKworICAgIGF1dG8gcmVzID0gd293LndhaXRfdmFsdWUo MzQpOworICAgIGNvbnN0IGF1dG8gZHVyID0gdC5kdXJhdGlvbigpOworICAgIFZFUklGWShy ZXMgPT0gMTAyKTsKKyAgICBWRVJJRlkoNjBtcyA8PSBkdXIpOworICAgIFZFUklGWShkdXIg PCBtc19idWZmZXIpOworICB9CisKKyAgLy8gInRyeSB3YWl0IHNob3VsZCByZXR1cm4gcmln aHQgYXdheSB3aGVuIGl0J3MgY29ycmVjdAorICB7CisgICAgY29uc3QgVGltZXIgdDsKKyAg ICBzdGQ6OmF0b21pYzxUPiB3b3cgPSAzNDsKKyAgICBhdXRvIHJlcyA9IHdvdy50cnlfd2Fp dCgxMDApOworICAgIFZFUklGWShyZXMpOworICAgIFZFUklGWSgqcmVzID09IDM0KTsKKyAg ICBWRVJJRlkodC5kdXJhdGlvbigpIDwgMW1zKTsKKyAgfQorCisgIC8vICJ0cnkgd2FpdCBz aG91bGQgcmV0dXJuIGFmdGVyIGEgbGl0dGxlIHdoaWxlIHdoZW4gaXQncyBub3QgY29ycmVj dAorICB7CisgICAgY29uc3QgVGltZXIgdDsKKyAgICBzdGQ6OmF0b21pYzxUPiB3b3cgPSAz NDsKKyAgICBhdXRvIHJlcyA9IHdvdy50cnlfd2FpdCgzNCk7CisgICAgVkVSSUZZKCFyZXMp OworICAgIFZFUklGWSh0LmR1cmF0aW9uKCkgPCAxMDBtcyk7CisgIH0KKworICAvLyAiV2Fp dEZvcjogTm8gd2FpdGluZyBpZiBpdCdzIGdvb2QKKyAgeworICAgIGNvbnN0IFRpbWVyIHQ7 CisgICAgc3RkOjphdG9taWM8VD4gd293ID0gMzQ7CisgICAgYXV0byByZXMgPSB3b3cud2Fp dF9mb3IoMTAwLCAxMHMpOworICAgIFZFUklGWShyZXMpOworICAgIFZFUklGWSgqcmVzID09 IDM0KTsKKyAgICBWRVJJRlkodC5kdXJhdGlvbigpIDwgMW1zKTsKKyAgfQorCisgIC8vICJX YWl0Rm9yOiBNYXggd2FpdGluZyBpZiBpdCBkb2Vzbid0IGNoYW5nZQorICB7CisgICAgY29u c3QgVGltZXIgdDsKKyAgICBzdGQ6OmF0b21pYzxUPiB3b3cgPSAzNDsKKyAgICBhdXRvIHJl cyA9IHdvdy53YWl0X2ZvcigzNCwgNTBtcyk7CisgICAgVkVSSUZZKCFyZXMpOworICAgIFZF UklGWSh0LmR1cmF0aW9uKCkgPCA2MG1zKTsKKyAgICBWRVJJRlkoNTBtcyA8PSB0LmR1cmF0 aW9uKCkpOworICB9CisKKyAgLy8gIldhaXRGb3I6IFdpbGwgd2FrZXVwIGlmIGNoYW5nZWQu CisgIHsKKyAgICBjb25zdCBUaW1lciB0OworICAgIHN0ZDo6YXRvbWljPFQ+IHdvdyA9IDM0 OworCisgICAgc3RkOjpqdGhyZWFkIG91dFRoZXJlKFsmd293XSgpIHsKKyAgICAgIHN0ZDo6 dGhpc190aHJlYWQ6OnNsZWVwX2Zvcig1MG1zKTsKKyAgICAgIHdvdy5zdG9yZSgxMDIpOwor ICAgICAgd293Lm5vdGlmeV9hbGwoKTsKKyAgICB9KTsKKworICAgIGF1dG8gcmVzID0gd293 LndhaXRfZm9yKDM0LCA1cyk7CisgICAgVkVSSUZZKHJlcyk7CisgICAgVkVSSUZZKCpyZXMg PT0gMTAyKTsKKyAgICBWRVJJRlkoNTBtcyA8PSB0LmR1cmF0aW9uKCkpOworICAgIFZFUklG WSh0LmR1cmF0aW9uKCkgPCA3MG1zKTsKKyAgfQorCisgIC8vICJXYWl0Rm9yOiBXaWxsIG5v dCByZXR1cm4gaWYgdmFsdWUgaXMgY2hhbmdlZCB0byBzYW1lIHZhbHVlLgorICB7CisgICAg Y29uc3QgVGltZXIgdDsKKyAgICBzdGQ6OmF0b21pYzxUPiB3b3cgPSAzNDsKKworICAgIHN0 ZDo6anRocmVhZCBvdXRUaGVyZShbJndvd10oKSB7CisgICAgICBmb3IgKGludCBpID0gMDsg aSA8IDI7IGkrKykKKyAgICAgICAgeworICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnNs ZWVwX2ZvcigyMG1zKTsKKyAgICAgICAgICB3b3cuc3RvcmUoMzQpOworICAgICAgICAgIHdv dy5ub3RpZnlfYWxsKCk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGF1dG8gcmVzID0g d293LndhaXRfZm9yKDM0LCA1MG1zKTsKKyAgICBhdXRvIHRha2VuID0gdC5kdXJhdGlvbigp OworICAgIFZFUklGWSghcmVzKTsKKyAgICBWRVJJRlkoNTBtcyA8PSB0YWtlbik7CisgICAg VkVSSUZZKHRha2VuIDwgMTAwbXMpOworICB9CisKKyAgLy8gIldhaXRVbnRpbDogV2lsbCBy ZXR1cm4gcmlnaHQgYXdheSBpZiB0aGUgdmFsdWUgaXMgdGhlIHNhbWUuCisgIHsKKyAgICBz dGQ6OmF0b21pYzxUPiB3b3cgPSAzNDsKKworICAgIGNvbnN0IGF1dG8gZGVhZExpbmUgPSBz dGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKSArIDEwMG1zOworICAgIGF1dG8gcmVz ID0gd293LndhaXRfdW50aWwoMTAyLCBkZWFkTGluZSk7CisgICAgY29uc3QgYXV0byBmaW5p c2hlZCA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOworICAgIFZFUklGWShy ZXMpOworICAgIFZFUklGWSgqcmVzID09IDM0KTsKKyAgICBWRVJJRlkoZmluaXNoZWQgPD0g ZGVhZExpbmUpOworICB9CisKKyAgLy8gIldhaXRVbnRpbDogV2lsbCBub3QgcmV0dXJuIGJl Zm9yZSBkZWFkbGluZSwgaWYgbm90IGhpdAorICB7CisgICAgc3RkOjphdG9taWM8VD4gd293 ID0gMzQ7CisgICAgY29uc3QgYXV0byBkZWFkTGluZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1f Y2xvY2s6Om5vdygpICsgMTAwbXM7CisgICAgYXV0byByZXMgPSB3b3cud2FpdF91bnRpbCgz NCwgZGVhZExpbmUpOworICAgIGNvbnN0IGF1dG8gZmluaXNoZWQgPSBzdGQ6OmNocm9ubzo6 c3lzdGVtX2Nsb2NrOjpub3coKTsKKyAgICBWRVJJRlkoIXJlcyk7CisgICAgVkVSSUZZKGRl YWRMaW5lIDw9IGZpbmlzaGVkKTsKKyAgICBWRVJJRlkoZmluaXNoZWQgPCBkZWFkTGluZSAr IDQwbXMpOworICB9CisKKyAgLy8gIldhaXRVbnRpbDogV2lsbCByZXR1cm4gaWYgY2hhbmdl ZCwgaWYgbm90IGhpdAorICB7CisgICAgc3RkOjphdG9taWM8VD4gd293ID0gMzQ7CisgICAg Y29uc3QgYXV0byBkZWFkTGluZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygp ICsgMTAwbXM7CisKKyAgICBzdGQ6Omp0aHJlYWQgb3V0VGhlcmUoWyZ3b3ddKCkgeworICAg ICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKDIwbXMpOworICAgICAgd293LnN0b3Jl KDEwMik7CisgICAgICB3b3cubm90aWZ5X2FsbCgpOworICAgIH0pOworICAgIGF1dG8gcmVz ID0gd293LndhaXRfdW50aWwoMzQsIGRlYWRMaW5lKTsKKyAgICBjb25zdCBhdXRvIGZpbmlz aGVkID0gc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCk7CisgICAgVkVSSUZZKHJl cyk7CisgICAgVkVSSUZZKCpyZXMgPT0gMTAyKTsKKyAgICBWRVJJRlkoZmluaXNoZWQgPCBk ZWFkTGluZSk7CisgIH0KKworICAvLyAiV2FpdFVudGlsOiBXaWxsIG5vdCByZXR1cm4gaWYg bm90IGNoYW5nZWQsIGlmIG5vdCBoaXQKKyAgeworICAgIHN0ZDo6YXRvbWljPFQ+IHdvdyA9 IDM0OworICAgIGNvbnN0IGF1dG8gZGVhZGxpbmUgPSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Ns b2NrOjpub3coKSArIDEwMG1zOworCisgICAgc3RkOjpqdGhyZWFkIG91dFRoZXJlKFsmd293 XSgpIHsKKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKQorICAgICAgICB7Cisg ICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKDIwbXMpOworICAgICAgICAg IHdvdy5zdG9yZSgzNCk7CisgICAgICAgICAgd293Lm5vdGlmeV9hbGwoKTsKKyAgICAgICAg fQorICAgIH0pOworCisgICAgYXV0byByZXMgPSB3b3cud2FpdF91bnRpbCgzNCwgZGVhZGxp bmUpOworICAgIGNvbnN0IGF1dG8gZmluaXNoZWQgPSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Ns b2NrOjpub3coKTsKKyAgICBWRVJJRlkoIXJlcyk7CisgICAgVkVSSUZZKGRlYWRsaW5lIDw9 IGZpbmlzaGVkKTsKKyAgICBWRVJJRlkoZmluaXNoZWQgPCBkZWFkbGluZSArIDQwbXMpOwor ICB9CisKKyAgLy8gIldhaXQgdmFsdWUgc2hvdWxkIHJldHVybiBpbW1pZGlhdGx5IHdoZW4g aXQgaGFzIHRoZSByaWdodCB2YWx1ZQorICB7CisgICAgc3RkOjphdG9taWM8VD4gd293ID0g MzQ7CisgICAgY29uc3QgVGltZXIgdDsKKyAgICBjb25zdCBhdXRvIG5leHQgPSB3b3cud2Fp dF92YWx1ZSgxMDApOworICAgIFZFUklGWShuZXh0ID09IDM0KTsKKyAgICBWRVJJRlkodC5k dXJhdGlvbigpIDwgMW1zKTsKKyAgfQorCisgIC8vICJXYWl0IHZhbHVlIHNob3VsZCB3YWl0 IHVudGlsIG5vdGlmaWVkIGF0bGVhc3QKKyAgeworICAgIHN0ZDo6YXRvbWljPFQ+IHdvdyA9 IDM0OworICAgIGNvbnN0IFRpbWVyIHQ7CisgICAgc3RkOjpqdGhyZWFkIG91dFRoZXJlKFsm d293XSgpIHsKKyAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2Zvcig1MG1zKTsKKyAg ICAgIHdvdy5zdG9yZSgxMDIsIHN0ZDo6bWVtb3J5X29yZGVyOjpyZWxlYXNlKTsKKyAgICAg IHdvdy5ub3RpZnlfYWxsKCk7CisgICAgfSk7CisKKyAgICBhdXRvIHJlcyA9IHdvdy53YWl0 X3ZhbHVlKDM0KTsKKyAgICBWRVJJRlkocmVzID09IDEwMik7CisgICAgVkVSSUZZKDUwbXMg PD0gdC5kdXJhdGlvbigpKTsKKyAgICBWRVJJRlkodC5kdXJhdGlvbigpIDwgNjBtcyk7Cisg IH0KKworICAvLyAiV2FpdCB2YWx1ZSBzaG91bGQgbm90IHJldHVybiBvbiB1bmNoYW5nZWQg dmFsdWUuCisgIHsKKyAgICBzdGQ6OmF0b21pYzxUPiB3b3cgPSAzNDsKKyAgICBjb25zdCBU aW1lciB0OworICAgIHN0ZDo6anRocmVhZCBvdXRUaGVyZShbJndvd10oKSB7CisgICAgICBz dGQ6OnRoaXNfdGhyZWFkOjpzbGVlcF9mb3IoMjBtcyk7CisgICAgICB3b3cuc3RvcmUoMzQp OworICAgICAgd293Lm5vdGlmeV9hbGwoKTsKKyAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnNs ZWVwX2Zvcig0MG1zKTsKKyAgICAgIHdvdy5zdG9yZSgxMDIpOworICAgICAgd293Lm5vdGlm eV9hbGwoKTsKKyAgICB9KTsKKworICAgIGF1dG8gcmVzID0gd293LndhaXRfdmFsdWUoMzQp OworICAgIGNvbnN0IGF1dG8gZHVyID0gdC5kdXJhdGlvbigpOworICAgIFZFUklGWShyZXMg PT0gMTAyKTsKKyAgICBWRVJJRlkoNjBtcyA8PSBkdXIpOworICAgIFZFUklGWShkdXIgPCA3 MG1zKTsKKyAgfQorCisgIC8vICJ0cnkgd2FpdCBzaG91bGQgcmV0dXJuIHJpZ2h0IGF3YXkg d2hlbiBpdCdzIGNvcnJlY3QKKyAgeworICAgIHN0ZDo6YXRvbWljPFQ+IHdvdyA9IDM0Owor ICAgIGNvbnN0IFRpbWVyIHQ7CisgICAgYXV0byByZXMgPSB3b3cudHJ5X3dhaXQoMTAwKTsK KyAgICBWRVJJRlkocmVzKTsKKyAgICBWRVJJRlkoKnJlcyA9PSAzNCk7CisgICAgVkVSSUZZ KHQuZHVyYXRpb24oKSA8IDFtcyk7CisgIH0KKworICAvLyAidHJ5IHdhaXQgc2hvdWxkIHJl dHVybiBhZnRlciBhIGxpdHRsZSB3aGlsZSB3aGVuIGl0J3Mgbm90IGNvcnJlY3QKKyAgewor ICAgIHN0ZDo6YXRvbWljPFQ+IHdvdyA9IDM0OworICAgIGNvbnN0IFRpbWVyIHQ7CisgICAg YXV0byByZXMgPSB3b3cudHJ5X3dhaXQoMzQpOworICAgIFZFUklGWSghcmVzKTsKKyAgICBW RVJJRlkodC5kdXJhdGlvbigpIDwgMTAwbXMpOworICB9CisKKyAgLy8gIldhaXRGb3I6IE5v IHdhaXRpbmcgaWYgaXQncyBnb29kCisgIHsKKyAgICBzdGQ6OmF0b21pYzxUPiB3b3cgPSAz NDsKKyAgICBjb25zdCBUaW1lciB0OworICAgIGF1dG8gcmVzID0gd293LndhaXRfZm9yKDEw MCwgMTBzKTsKKyAgICBWRVJJRlkocmVzKTsKKyAgICBWRVJJRlkoKnJlcyA9PSAzNCk7Cisg ICAgVkVSSUZZKHQuZHVyYXRpb24oKSA8IDFtcyk7CisgIH0KKworICAvLyAiV2FpdEZvcjog TWF4IHdhaXRpbmcgaWYgaXQgZG9lc24ndCBjaGFuZ2UKKyAgeworICAgIHN0ZDo6YXRvbWlj PFQ+IHdvdyA9IDM0OworICAgIGNvbnN0IFRpbWVyIHQ7CisgICAgYXV0byByZXMgPSB3b3cu d2FpdF9mb3IoMzQsIDUwbXMpOworICAgIFZFUklGWSghcmVzKTsKKyAgICBWRVJJRlkodC5k dXJhdGlvbigpIDwgNjBtcyk7CisgICAgVkVSSUZZKDUwbXMgPD0gdC5kdXJhdGlvbigpKTsK KyAgfQorCisgIC8vICJXYWl0Rm9yOiBXaWxsIHdha2V1cCBpZiBjaGFuZ2VkLgorICB7Cisg ICAgc3RkOjphdG9taWM8VD4gd293ID0gMzQ7CisgICAgY29uc3QgVGltZXIgdDsKKworICAg IHN0ZDo6anRocmVhZCBvdXRUaGVyZShbJndvd10oKSB7CisgICAgICBzdGQ6OnRoaXNfdGhy ZWFkOjpzbGVlcF9mb3IoNTBtcyk7CisgICAgICB3b3cuc3RvcmUoMTAyKTsKKyAgICAgIHdv dy5ub3RpZnlfYWxsKCk7CisgICAgfSk7CisKKyAgICBhdXRvIHJlcyA9IHdvdy53YWl0X2Zv cigzNCwgNXMpOworICAgIFZFUklGWShyZXMpOworICAgIFZFUklGWSgqcmVzID09IDEwMik7 CisgICAgVkVSSUZZKDUwbXMgPD0gdC5kdXJhdGlvbigpKTsKKyAgICBWRVJJRlkodC5kdXJh dGlvbigpIDwgNzBtcyk7CisgIH0KKworICAvLyAiV2FpdEZvcjogV2lsbCBub3QgcmV0dXJu IGlmIHZhbHVlIGlzIGNoYW5nZWQgdG8gc2FtZSB2YWx1ZS4KKyAgeworICAgIHN0ZDo6YXRv bWljPFQ+IHdvdyA9IDM0OworICAgIGNvbnN0IFRpbWVyIHQ7CisKKyAgICBzdGQ6Omp0aHJl YWQgb3V0VGhlcmUoWyZ3b3ddKCkgeworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBp KyspCisgICAgICAgIHsKKyAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjpzbGVlcF9mb3Io MjBtcyk7CisgICAgICAgICAgd293LnN0b3JlKDM0KTsKKyAgICAgICAgICB3b3cubm90aWZ5 X2FsbCgpOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBhdXRvIHJlcyA9IHdvdy53YWl0 X2ZvcigzNCwgNTBtcyk7CisgICAgYXV0byB0YWtlbiA9IHQuZHVyYXRpb24oKTsKKyAgICBW RVJJRlkoIXJlcyk7CisgICAgVkVSSUZZKDUwbXMgPD0gdGFrZW4pOworICAgIFZFUklGWSh0 YWtlbiA8IDEwMG1zKTsKKyAgfQorCisgIC8vICJXYWl0VW50aWw6IFdpbGwgcmV0dXJuIHJp Z2h0IGF3YXkgaWYgdGhlIHZhbHVlIGlzIHRoZSBzYW1lLgorICB7CisgICAgc3RkOjphdG9t aWM8VD4gd293ID0gMzQ7CisgICAgY29uc3QgYXV0byBkZWFkTGluZSA9IHN0ZDo6Y2hyb25v OjpzeXN0ZW1fY2xvY2s6Om5vdygpICsgMTAwbXM7CisgICAgYXV0byByZXMgPSB3b3cud2Fp dF91bnRpbCgxMDIsIGRlYWRMaW5lKTsKKyAgICBjb25zdCBhdXRvIGZpbmlzaGVkID0gc3Rk OjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCk7CisgICAgVkVSSUZZKHJlcyk7CisgICAg VkVSSUZZKCpyZXMgPT0gMzQpOworICAgIFZFUklGWShmaW5pc2hlZCA8PSBkZWFkTGluZSk7 CisgIH0KKworICAvLyAiV2FpdFVudGlsOiBXaWxsIG5vdCByZXR1cm4gYmVmb3JlIGRlYWRs aW5lLCBpZiBub3QgaGl0CisgIHsKKyAgICBzdGQ6OmF0b21pYzxUPiB3b3cgPSAzNDsKKyAg ICBjb25zdCBhdXRvIGRlYWRMaW5lID0gc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93 KCkgKyAxMDBtczsKKyAgICBhdXRvIHJlcyA9IHdvdy53YWl0X3VudGlsKDM0LCBkZWFkTGlu ZSk7CisgICAgY29uc3QgYXV0byBmaW5pc2hlZCA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xv Y2s6Om5vdygpOworICAgIFZFUklGWSghcmVzKTsKKyAgICBWRVJJRlkoZGVhZExpbmUgPD0g ZmluaXNoZWQpOworICAgIFZFUklGWShmaW5pc2hlZCA8IGRlYWRMaW5lICsgNDBtcyk7Cisg IH0KKworICAvLyAiV2FpdFVudGlsOiBXaWxsIHJldHVybiBpZiBjaGFuZ2VkLCBpZiBub3Qg aGl0CisgIHsKKyAgICBzdGQ6OmF0b21pYzxUPiB3b3cgPSAzNDsKKyAgICBjb25zdCBhdXRv IGRlYWRMaW5lID0gc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkgKyAxMDBtczsK KworICAgIHN0ZDo6anRocmVhZCBvdXRUaGVyZShbJndvd10oKSB7CisgICAgICBzdGQ6OnRo aXNfdGhyZWFkOjpzbGVlcF9mb3IoMjBtcyk7CisgICAgICB3b3cuc3RvcmUoMTAyKTsKKyAg ICAgIHdvdy5ub3RpZnlfYWxsKCk7CisgICAgfSk7CisgICAgYXV0byByZXMgPSB3b3cud2Fp dF91bnRpbCgzNCwgZGVhZExpbmUpOworICAgIGNvbnN0IGF1dG8gZmluaXNoZWQgPSBzdGQ6 OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKKyAgICBWRVJJRlkocmVzKTsKKyAgICBW RVJJRlkoKnJlcyA9PSAxMDIpOworICAgIFZFUklGWShmaW5pc2hlZCA8IGRlYWRMaW5lKTsK KyAgfQorCisgIC8vICJXYWl0VW50aWw6IFdpbGwgbm90IHJldHVybiBpZiBub3QgY2hhbmdl ZCwgaWYgbm90IGhpdAorICB7CisgICAgc3RkOjphdG9taWM8VD4gd293ID0gMzQ7CisgICAg Y29uc3QgYXV0byBkZWFkbGluZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygp ICsgMTAwbXM7CisKKyAgICBzdGQ6Omp0aHJlYWQgb3V0VGhlcmUoWyZ3b3ddKCkgeworICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICBz dGQ6OnRoaXNfdGhyZWFkOjpzbGVlcF9mb3IoMjBtcyk7CisgICAgICAgICAgd293LnN0b3Jl KDM0KTsKKyAgICAgICAgICB3b3cubm90aWZ5X2FsbCgpOworICAgICAgICB9CisgICAgfSk7 CisKKyAgICBhdXRvIHJlcyA9IHdvdy53YWl0X3VudGlsKDM0LCBkZWFkbGluZSk7CisgICAg Y29uc3QgYXV0byBmaW5pc2hlZCA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygp OworICAgIFZFUklGWSghcmVzKTsKKyAgICBWRVJJRlkoZGVhZGxpbmUgPD0gZmluaXNoZWQp OworICAgIFZFUklGWShmaW5pc2hlZCA8IGRlYWRsaW5lICsgNDBtcyk7CisgIH0KKworICAv LyBQcmVkaWNhdGUgYXBpCisKKworICAvLyBXYWl0IHByZWRpY2F0ZSBzaG91bGQgcmV0dXJu IGltbWlkaWF0bHkgd2hlbiBpdCBoYXMgdGhlIHJpZ2h0IHZhbHVlCisgIHsKKyAgICBzdGQ6 OmF0b21pYzxUPiB3b3cgPSAzNDsKKyAgICBjb25zdCBUaW1lciB0OworICAgIGNvbnN0IGF1 dG8gbmV4dAorICAgICAgICA9IHdvdy53YWl0X3dpdGhfcHJlZGljYXRlKFtdKGNvbnN0IGF1 dG8gaW4pIHsgcmV0dXJuIGluIDwgNDA7IH0pOworICAgIFZFUklGWShuZXh0ID09IDM0KTsK KyAgICBWRVJJRlkodC5kdXJhdGlvbigpIDwgMW1zKTsKKyAgfQorCisgIC8vICJXYWl0IHBy ZWRpY2F0ZSBzaG91bGQgd2FpdCB1bnRpbCBub3RpZmllZCBhdGxlYXN0CisgIHsKKyAgICBz dGQ6OmF0b21pYzxUPiB3b3cgPSAzNDsKKyAgICBjb25zdCBUaW1lciB0OworICAgIHN0ZDo6 anRocmVhZCBvdXRUaGVyZShbJndvd10oKSB7CisgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjpz bGVlcF9mb3IoNTBtcyk7CisgICAgICB3b3cuc3RvcmUoMTAyLCBzdGQ6Om1lbW9yeV9vcmRl cjo6cmVsZWFzZSk7CisgICAgICB3b3cubm90aWZ5X2FsbCgpOworICAgIH0pOworCisgICAg YXV0byByZXMgPSB3b3cud2FpdF93aXRoX3ByZWRpY2F0ZShbXShjb25zdCBhdXRvIGluKSB7 IHJldHVybiAxMDAgPCBpbjsgfSk7CisgICAgVkVSSUZZKHJlcyA9PSAxMDIpOworICAgIFZF UklGWSg1MG1zIDw9IHQuZHVyYXRpb24oKSk7CisgICAgVkVSSUZZKHQuZHVyYXRpb24oKSA8 IDYwbXMpOworICB9CisKKyAgLy8gIldhaXQgcHJlZGljYXRlIHNob3VsZCBub3QgcmV0dXJu IG9uIHVuY2hhbmdlZCB2YWx1ZS4KKyAgeworICAgIHN0ZDo6YXRvbWljPFQ+IHdvdyA9IDM0 OworCisgICAgY29uc3QgVGltZXIgdDsKKyAgICBzdGQ6Omp0aHJlYWQgb3V0VGhlcmUoWyZ3 b3ddKCkgeworICAgICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKDIwbXMpOworICAg ICAgd293LnN0b3JlKDM0KTsKKyAgICAgIHdvdy5ub3RpZnlfYWxsKCk7CisgICAgICBzdGQ6 OnRoaXNfdGhyZWFkOjpzbGVlcF9mb3IoNDBtcyk7CisgICAgICB3b3cuc3RvcmUoMTAyKTsK KyAgICAgIHdvdy5ub3RpZnlfYWxsKCk7CisgICAgfSk7CisKKyAgICBhdXRvIHJlcyA9IHdv dy53YWl0X3dpdGhfcHJlZGljYXRlKFtdKGNvbnN0IGF1dG8gaW4pIHsgcmV0dXJuIGluICE9 IDM0OyB9KTsKKyAgICBjb25zdCBhdXRvIGR1ciA9IHQuZHVyYXRpb24oKTsKKyAgICBWRVJJ RlkocmVzID09IDEwMik7CisgICAgVkVSSUZZKDYwbXMgPD0gZHVyKTsKKyAgICBWRVJJRlko ZHVyIDwgNzBtcyk7CisgIH0KKworICAvLyAidHJ5IHdhaXQgcHJlZGljYXRlIHNob3VsZCBy ZXR1cm4gcmlnaHQgYXdheSB3aGVuIGl0J3MgY29ycmVjdAorICB7CisgICAgc3RkOjphdG9t aWM8VD4gd293ID0gMzQ7CisgICAgY29uc3QgVGltZXIgdDsKKyAgICBhdXRvIHJlcworICAg ICAgICA9IHdvdy50cnlfd2FpdF93aXRoX3ByZWRpY2F0ZShbXShjb25zdCBhdXRvIGluKSB7 IHJldHVybiBpbiAhPSAxMDA7IH0pOworICAgIFZFUklGWShyZXMpOworICAgIFZFUklGWSgq cmVzID09IDM0KTsKKyAgICBWRVJJRlkodC5kdXJhdGlvbigpIDwgMW1zKTsKKyAgfQorCisg IC8vICJ0cnkgd2FpdCBwcmVkaWNhdGUgc2hvdWxkIHJldHVybiBhZnRlciBhIGxpdHRsZSB3 aGlsZSB3aGVuIGl0J3Mgbm90IGNvcnJlY3QKKyAgeworICAgIHN0ZDo6YXRvbWljPFQ+IHdv dyA9IDM0OworICAgIGNvbnN0IFRpbWVyIHQ7CisgICAgYXV0byByZXMKKyAgICAgICAgPSB3 b3cudHJ5X3dhaXRfd2l0aF9wcmVkaWNhdGUoW10oY29uc3QgYXV0byBpbikgeyByZXR1cm4g aW4gIT0gMzQ7IH0pOworICAgIFZFUklGWSghcmVzKTsKKyAgICBWRVJJRlkodC5kdXJhdGlv bigpIDwgMTAwbXMpOworICB9CisKKyAgLy8gV2FpdEZvciBwcmVkaWNhdGUgOiBObyB3YWl0 aW5nIGlmIGl0J3MgZ29vZAorICB7CisgICAgc3RkOjphdG9taWM8VD4gd293ID0gMzQ7Cisg ICAgY29uc3QgVGltZXIgdDsKKyAgICBhdXRvIHJlcyA9IHdvdy53YWl0X2Zvcl93aXRoX3By ZWRpY2F0ZSgKKyAgICAgICAgW10oY29uc3QgYXV0byBpbikgeyByZXR1cm4gaW4gIT0gMTAw OyB9LCAxMHMpOworICAgIFZFUklGWShyZXMpOworICAgIFZFUklGWSgqcmVzID09IDM0KTsK KyAgICBWRVJJRlkodC5kdXJhdGlvbigpIDwgMW1zKTsKKyAgfQorCisgIC8vIFdhaXRGb3Ig cHJlZGljYXRlIDogTWF4IHdhaXRpbmcgaWYgaXQgZG9lc24ndCBjaGFuZ2UKKyAgeworICAg IHN0ZDo6YXRvbWljPFQ+IHdvdyA9IDM0OworICAgIGNvbnN0IFRpbWVyIHQ7CisgICAgYXV0 byByZXMgPSB3b3cud2FpdF9mb3Jfd2l0aF9wcmVkaWNhdGUoCisgICAgICAgIFtdKGNvbnN0 IGF1dG8gaW4pIHsgcmV0dXJuIDUwIDwgaW47IH0sIDUwbXMpOworICAgIFZFUklGWSghcmVz KTsKKyAgICBWRVJJRlkodC5kdXJhdGlvbigpIDwgNjBtcyk7CisgICAgVkVSSUZZKDUwbXMg PD0gdC5kdXJhdGlvbigpKTsKKyAgfQorCisgIC8vIFdhaXRGb3IgcHJlZGljYXRlIDogV2ls bCB3YWtldXAgaWYgY2hhbmdlZC4KKyAgeworICAgIHN0ZDo6YXRvbWljPFQ+IHdvdyA9IDM0 OworICAgIGNvbnN0IFRpbWVyIHQ7CisKKyAgICBzdGQ6Omp0aHJlYWQgb3V0VGhlcmUoWyZ3 b3ddKCkgeworICAgICAgc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKDUwbXMpOworICAg ICAgd293LnN0b3JlKDEwMik7CisgICAgICB3b3cubm90aWZ5X2FsbCgpOworICAgIH0pOwor CisgICAgYXV0byByZXMgPSB3b3cud2FpdF9mb3Jfd2l0aF9wcmVkaWNhdGUoCisgICAgICAg IFtdKGNvbnN0IGF1dG8gaW4pIHsgcmV0dXJuIDEwMCA8IGluOyB9LCA1cyk7CisgICAgVkVS SUZZKHJlcyk7CisgICAgVkVSSUZZKCpyZXMgPT0gMTAyKTsKKyAgICBWRVJJRlkoNTBtcyA8 PSB0LmR1cmF0aW9uKCkpOworICAgIFZFUklGWSh0LmR1cmF0aW9uKCkgPCA3MG1zKTsKKyAg fQorCisgIC8vIFdhaXRGb3IgcHJlZGljYXRlIDogV2lsbCBub3QgcmV0dXJuIGlmIHZhbHVl IGlzIGNoYW5nZWQgdG8gc2FtZSB2YWx1ZS4KKyAgeworICAgIHN0ZDo6YXRvbWljPFQ+IHdv dyA9IDM0OworICAgIGNvbnN0IFRpbWVyIHQ7CisKKyAgICBzdGQ6Omp0aHJlYWQgb3V0VGhl cmUoWyZ3b3ddKCkgeworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspCisgICAg ICAgIHsKKyAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjpzbGVlcF9mb3IoMjBtcyk7Cisg ICAgICAgICAgd293LnN0b3JlKDM0KTsKKyAgICAgICAgICB3b3cubm90aWZ5X2FsbCgpOwor ICAgICAgICB9CisgICAgfSk7CisKKyAgICBhdXRvIHJlcyA9IHdvdy53YWl0X2Zvcl93aXRo X3ByZWRpY2F0ZSgKKyAgICAgICAgW10oY29uc3QgYXV0byBpbikgeyByZXR1cm4gaW4gPCAz MDsgfSwgNTBtcyk7CisgICAgYXV0byB0YWtlbiA9IHQuZHVyYXRpb24oKTsKKyAgICBWRVJJ RlkoIXJlcyk7CisgICAgVkVSSUZZKDUwbXMgPD0gdGFrZW4pOworICAgIFZFUklGWSh0YWtl biA8IDEwMG1zKTsKKyAgfQorCisgIC8vIFdhaXRVbnRpbCBwcmVkaWNhdGUgOiBXaWxsIHJl dHVybiByaWdodCBhd2F5IGlmIHRoZSB2YWx1ZSBpcyB0aGUgc2FtZS4KKyAgeworICAgIHN0 ZDo6YXRvbWljPFQ+IHdvdyA9IDM0OworICAgIGNvbnN0IGF1dG8gZGVhZExpbmUgPSBzdGQ6 OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKSArIDEwMG1zOworICAgIGF1dG8gcmVzID0g d293LndhaXRfdW50aWxfd2l0aF9wcmVkaWNhdGUoCisgICAgICAgIFtdKGNvbnN0IGF1dG8g aW4pIHsgcmV0dXJuIGluICE9IDEwMjsgfSwgZGVhZExpbmUpOworICAgIGNvbnN0IGF1dG8g ZmluaXNoZWQgPSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKKyAgICBWRVJJ RlkocmVzKTsKKyAgICBWRVJJRlkoKnJlcyA9PSAzNCk7CisgICAgVkVSSUZZKGZpbmlzaGVk IDw9IGRlYWRMaW5lKTsKKyAgfQorCisgIC8vIFdhaXRVbnRpbCBwcmVkaWNhdGUgOiBXaWxs IG5vdCByZXR1cm4gYmVmb3JlIGRlYWRsaW5lLCBpZiBub3QgaGl0CisgIHsKKyAgICBzdGQ6 OmF0b21pYzxUPiB3b3cgPSAzNDsKKyAgICBjb25zdCBhdXRvIGRlYWRMaW5lID0gc3RkOjpj aHJvbm86OnN5c3RlbV9jbG9jazo6bm93KCkgKyAxMDBtczsKKyAgICBhdXRvIHJlcyA9IHdv dy53YWl0X3VudGlsX3dpdGhfcHJlZGljYXRlKFtdKGNvbnN0IGF1dG8gaW4pCisgICAgewor ICAgICAgcmV0dXJuIDQwIDwgaW47CisgICAgfSwgZGVhZExpbmUpOworICAgIGNvbnN0IGF1 dG8gZmluaXNoZWQgPSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKKyAgICBW RVJJRlkoIXJlcyk7CisgICAgVkVSSUZZKGRlYWRMaW5lIDw9IGZpbmlzaGVkKTsKKyAgICBW RVJJRlkoZmluaXNoZWQgPCBkZWFkTGluZSArIDQwbXMpOworICB9CisKKyAgLy8gV2FpdFVu dGlsIHByZWRpY2F0ZTogV2lsbCByZXR1cm4gaWYgY2hhbmdlZCwgaWYgbm90IGhpdAorICB7 CisgICAgc3RkOjphdG9taWM8VD4gd293ID0gMzQ7CisgICAgY29uc3QgYXV0byBkZWFkTGlu ZSA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpICsgMTAwbXM7CisKKyAgICBz dGQ6Omp0aHJlYWQgb3V0VGhlcmUoWyZ3b3ddKCkgeworICAgICAgc3RkOjp0aGlzX3RocmVh ZDo6c2xlZXBfZm9yKDIwbXMpOworICAgICAgd293LnN0b3JlKDEwMik7CisgICAgICB3b3cu bm90aWZ5X2FsbCgpOworICAgIH0pOworCisgICAgYXV0byByZXMgPSB3b3cud2FpdF91bnRp bF93aXRoX3ByZWRpY2F0ZShbXShjb25zdCBhdXRvIGluKQorICAgIHsKKyAgICAgIHJldHVy biAxMDAgPCBpbjsKKyAgICB9LCBkZWFkTGluZSk7CisgICAgY29uc3QgYXV0byBmaW5pc2hl ZCA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOworICAgIFZFUklGWShyZXMp OworICAgIFZFUklGWSgqcmVzID09IDEwMik7CisgICAgVkVSSUZZKGZpbmlzaGVkIDwgZGVh ZExpbmUpOworICB9CisKKyAgLy8gV2FpdFVudGlsIHByZWRpY2F0ZTogV2lsbCBub3QgcmV0 dXJuIGlmIG5vdCBjaGFuZ2VkLCBpZiBub3QgaGl0CisgIHsKKyAgICBzdGQ6OmF0b21pYzxU PiB3b3cgPSAzNDsKKyAgICBjb25zdCBhdXRvIGRlYWRsaW5lID0gc3RkOjpjaHJvbm86OnN5 c3RlbV9jbG9jazo6bm93KCkgKyAxMDBtczsKKworICAgIHN0ZDo6anRocmVhZCBvdXRUaGVy ZShbJndvd10oKSB7CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykKKyAgICAg ICAgeworICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2ZvcigyMG1zKTsKKyAg ICAgICAgICB3b3cuc3RvcmUoMzQpOworICAgICAgICAgIHdvdy5ub3RpZnlfYWxsKCk7Cisg ICAgICAgIH0KKyAgICB9KTsKKworICAgIGF1dG8gcmVzID0gd293LndhaXRfdW50aWxfd2l0 aF9wcmVkaWNhdGUoW10oY29uc3QgYXV0byBpbikKKyAgICB7CisgICAgICByZXR1cm4gNDAg PCBpbjsKKyAgICB9LCBkZWFkbGluZSk7CisgICAgY29uc3QgYXV0byBmaW5pc2hlZCA9IHN0 ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOworICAgIFZFUklGWSghcmVzKTsKKyAg ICBWRVJJRlkoZGVhZGxpbmUgPD0gZmluaXNoZWQpOworICAgIFZFUklGWShmaW5pc2hlZCA8 IGRlYWRsaW5lICsgbXNfYnVmZmVyKTsKKyAgfQorCit9CisKKworaW50CittYWluICgpCit7 CisgIC8vIGNoZWNrPGJvb2w+IGJiOworICBjaGVjazxjaGFyPigpOworICBjaGVjazxzaWdu ZWQgY2hhcj4oKTsKKyAgY2hlY2s8dW5zaWduZWQgY2hhcj4oKTsKKyAgY2hlY2s8c2hvcnQ+ KCk7CisgIGNoZWNrPHVuc2lnbmVkIHNob3J0PigpOworICBjaGVjazxpbnQ+KCk7CisgIGNo ZWNrPHVuc2lnbmVkIGludD4oKTsKKyAgY2hlY2s8bG9uZz4oKTsKKyAgY2hlY2s8dW5zaWdu ZWQgbG9uZz4oKTsKKyAgY2hlY2s8bG9uZyBsb25nPigpOworICBjaGVjazx1bnNpZ25lZCBs b25nIGxvbmc+KCk7CisKKyAgY2hlY2s8d2NoYXJfdD4oKTsKKyAgY2hlY2s8Y2hhcjhfdD4o KTsKKyAgY2hlY2s8Y2hhcjE2X3Q+KCk7CisgIGNoZWNrPGNoYXIzMl90PigpOworCisgIGNo ZWNrPGludDhfdD4oKTsKKyAgY2hlY2s8aW50MTZfdD4oKTsKKyAgY2hlY2s8aW50MzJfdD4o KTsKKyAgY2hlY2s8aW50NjRfdD4oKTsKKworICBjaGVjazx1aW50OF90PigpOworICBjaGVj azx1aW50MTZfdD4oKTsKKyAgY2hlY2s8dWludDMyX3Q+KCk7CisgIGNoZWNrPHVpbnQ2NF90 PigpOworICByZXR1cm4gMDsKK30KLS0gCjIuNDQuMAoK --------------BBYn0a27UDU5RDhkmN0ZdUJv Content-Type: text/x-patch; charset=UTF-8; name="0003-Add-atomic-wait-for-floating-points.patch" Content-Disposition: attachment; filename="0003-Add-atomic-wait-for-floating-points.patch" Content-Transfer-Encoding: base64 RnJvbSA4MWUyNDI0ZDA5MzE0OGQ3YmEwNWE0NzFkMzliNTFlNWYzOTBhYWZiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/VGVvZG9yPTIwU3A9QzM9QTZyZW4/ PSA8dGVvZG9yQHNwYXJlbi5ubz4KRGF0ZTogV2VkLCAxMCBBcHIgMjAyNCAxNzo0NToxMSAr MDIwMApTdWJqZWN0OiBbUEFUQ0ggMy80XSBBZGQgYXRvbWljIHdhaXQgZm9yIGZsb2F0aW5n IHBvaW50cy4KCi0tLQogbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9hdG9taWNfYmFzZS5o IHwgMTA3ICsrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDEwNyBp bnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9h dG9taWNfYmFzZS5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9hdG9taWNfYmFzZS5o CmluZGV4IDhhMmVkNjVlYWYyLi41MDAzN2E4NGVkMiAxMDA2NDQKLS0tIGEvbGlic3RkYysr LXYzL2luY2x1ZGUvYml0cy9hdG9taWNfYmFzZS5oCisrKyBiL2xpYnN0ZGMrKy12My9pbmNs dWRlL2JpdHMvYXRvbWljX2Jhc2UuaApAQCAtMTY1Niw2ICsxNjU2LDExMyBAQCBfR0xJQkNY WF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgeyBfX2F0b21pY19pbXBsOjpub3Rp ZnlfYWxsKCZfTV9mcCk7IH0KIAogICAgICAgLy8gVE9ETyBhZGQgY29uc3Qgdm9sYXRpbGUg b3ZlcmxvYWQKKworICAJX0dMSUJDWFhfQUxXQVlTX0lOTElORSBfRnAKKyAgICAgIHdhaXRf dmFsdWUoX0ZwIF9fb2xkLAorICAgICAgICAgICAgICAgICBtZW1vcnlfb3JkZXIgX19tID0g bWVtb3J5X29yZGVyX3NlcV9jc3QpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICAgIAlyZXR1cm4g dGhpcy0+d2FpdF93aXRoX3ByZWRpY2F0ZShbX19vbGRdKGNvbnN0IGF1dG8gX19jdXIpIHsK KyAgICAgIAkJLy8gVE9ETyhySGVybWVzKTogY29uc2lkZXIgZG9pbmcgYXRvbWljIGNvbXBh cmlzb25zIGhlcmU/CisgICAgICAJCXJldHVybiBfX29sZCAhPSBfX2N1cjsKKyAgICAgIAl9 LCBfX20pOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgX19QcmVkPiByZXF1 aXJlcyBzdGQ6OnByZWRpY2F0ZTxfX1ByZWQsIF9GcD4KKyAgICAgIF9HTElCQ1hYX0FMV0FZ U19JTkxJTkUgX0ZwCisgICAgICB3YWl0X3dpdGhfcHJlZGljYXRlKF9fUHJlZCAmJl9fc3Rv cF93YWl0aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlfb3JkZXIgX19t ID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIGNvbnN0IHsKKyAgICAgICAgX0ZwIF9fcmV0Owor ICAgICAgICBzdGQ6Ol9fYXRvbWljX3dhaXRfYWRkcmVzcygmX01fZnAsIFtfX20sIHRoaXMs ICZfX3N0b3Bfd2FpdGluZywgJl9fcmV0XSB7CisgICAgICAgICAgX19yZXQgPSB0aGlzLT5s b2FkKF9fbSk7CisgICAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKF9fc3RvcF93YWl0aW5n LCBfX3JldCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gX19yZXQ7CisgICAgICB9 CisKKyAgICAgIHRlbXBsYXRlIDxjbGFzcyBfX1JlcCwgY2xhc3MgX19QZXJpb2Q+CisgICAg ICBfR0xJQkNYWF9BTFdBWVNfSU5MSU5FIHN0ZDo6b3B0aW9uYWw8X0ZwPgorICAgICAgd2Fp dF9mb3IoX0ZwIF9fb2xkLAorICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpjaHJvbm86OmR1 cmF0aW9uPF9fUmVwLCBfX1BlcmlvZD4gJl9fZHVyLAorICAgICAgICAgICAgICAgbWVtb3J5 X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBjb25zdCB7CisgICAgICAJLy8g dGhlIHJlc29uIGZvciB0aGlzLCBpcyB0aGF0IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhl IHByZWRpY2F0ZQorICAgICAgCS8vIGlzIGNhbGxlZCwgc28gd2UgYXJlIHN1cmUgdGhlIHZh bHVlIGhhcyBjaGFuZ2VkLCBhbmQgd2UgYXJlIGFibGUgdG8KKyAgICAgIAkvLyByZXR1cm4g aXQuCisgICAgICAJcmV0dXJuIHRoaXMtPndhaXRfZm9yX3dpdGhfcHJlZGljYXRlKFtfX29s ZF0oX0ZwIF9fY3VyKSB7CisgICAgICAJCS8vIFRPRE8ockhlcm1lcyk6IGNvbnNpZGVyIGRv aW5nIGF0b21pYyBjb21wYXJpc29ucyBoZXJlPworICAgICAgCQlyZXR1cm4gX19vbGQgIT0g X19jdXI7CisgICAgICAJfSwgX19kdXIsIF9fbSk7CisgICAgICB9CisKKyAgICAgIHRlbXBs YXRlIDxjbGFzcyBfX0Nsb2NrLCBjbGFzcyBfX0R1cmF0aW9uPgorICAgICAgX0dMSUJDWFhf QUxXQVlTX0lOTElORSBzdGQ6Om9wdGlvbmFsPF9GcD4KKyAgICAgIHdhaXRfdW50aWwoX0Zw IF9fb2xkLAorICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OmNocm9ubzo6dGltZV9wb2lu dDxfX0Nsb2NrLCBfX0R1cmF0aW9uPiAmX19kZWFkbGluZSwKKyAgICAgICAgICAgICAgICAg bWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBjb25zdCB7CisgICAg ICAJcmV0dXJuIHRoaXMtPndhaXRfdW50aWxfd2l0aF9wcmVkaWNhdGUoW19fb2xkXShjb25z dCBhdXRvIF9fY3VyKSB7CisgICAgICAJCS8vIFRPRE8ockhlcm1lcyk6IGNvbnNpZGVyIGRv aW5nIGF0b21pYyBjb21wYXJpc29ucyBoZXJlPworICAgICAgCQlyZXR1cm4gX19vbGQgIT0g X19jdXI7CisgICAgICAJfSwgX19kZWFkbGluZSwgX19tKTsKKyAgICAgIH0KKworICAgICAg X0dMSUJDWFhfQUxXQVlTX0lOTElORSBzdGQ6Om9wdGlvbmFsPF9GcD4KKyAgICAgIHRyeV93 YWl0KF9GcCBfX29sZCwKKyAgICAgICAgICAgICAgIG1lbW9yeV9vcmRlciBfX20gPSBtZW1v cnlfb3JkZXJfc2VxX2NzdCkgY29uc3Qgbm9leGNlcHQgeworICAgICAgICAvLyBUT0RPKHJI ZXJtZXMpOiBUaGlzIGlzIHJlYWxseSBub3QgYSBnb29kIGRlZmF1bHQsIEkgbmVlZCB0bwor ICAgICAgICAvLyBkaXNjdXNzIHdpdGhzb21lb25lIHNtYXJ0ZXIKKyAgICAgICAgcmV0dXJu IHdhaXRfZm9yKF9fb2xkLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDEwKSwgX19tKTsK KyAgICAgIH0KKworICAgICAgdGVtcGxhdGUgPGNsYXNzIF9fUHJlZCwgY2xhc3MgX19SZXAs IGNsYXNzIF9fUGVyaW9kPgorICAgICAgICByZXF1aXJlcyBzdGQ6OnByZWRpY2F0ZTxfX1By ZWQsIF9GcD4KKyAgICAgIF9HTElCQ1hYX0FMV0FZU19JTkxJTkUgc3RkOjpvcHRpb25hbDxf RnA+IHdhaXRfZm9yX3dpdGhfcHJlZGljYXRlKAorICAgICAgICAgIF9fUHJlZCAmJl9fc3Rv cF93YWl0aW5nLAorICAgICAgICAgIGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxfX1Jl cCwgX19QZXJpb2Q+ICZfX2R1ciwKKyAgICAgICAgICBtZW1vcnlfb3JkZXIgX19tID0gbWVt b3J5X29yZGVyX3NlcV9jc3QpIGNvbnN0IHsKKyAgICAgICAgX0ZwIF9fcmV0OworICAgICAg ICBhdXRvIF9fc3VjY2VlZGVkID0gc3RkOjpfX2F0b21pY193YWl0X2FkZHJlc3NfZm9yKAor ICAgICAgICAgICAgJl9NX2ZwLAorICAgICAgICAgICAgW19fbSwgdGhpcywgJl9fc3RvcF93 YWl0aW5nLCAmX19yZXRdIHsKKyAgICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5sb2FkKF9f bSk7CisgICAgICAgICAgICAgIHJldHVybiBzdGQ6Omludm9rZShfX3N0b3Bfd2FpdGluZywg X19yZXQpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF9fZHVyKTsKKworICAgICAg ICBpZiAoIV9fc3VjY2VlZGVkKQorICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK KyAgICAgICAgcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZSA8Y2xh c3MgX19QcmVkPgorICAgICAgICByZXF1aXJlcyBzdGQ6OnByZWRpY2F0ZTxfX1ByZWQsIF9G cD4KKyAgICAgIF9HTElCQ1hYX0FMV0FZU19JTkxJTkUgc3RkOjpvcHRpb25hbDxfRnA+Cisg ICAgICB0cnlfd2FpdF93aXRoX3ByZWRpY2F0ZShfX1ByZWQgJiZfX3N0b3Bfd2FpdGluZywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeV9vcmRlciBfX20gPSBtZW1v cnlfb3JkZXJfc2VxX2NzdCkgY29uc3QgeworICAgICAgICByZXR1cm4gd2FpdF9mb3Jfd2l0 aF9wcmVkaWNhdGUoc3RkOjpmb3J3YXJkPF9fUHJlZD4oX19zdG9wX3dhaXRpbmcpLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpjaHJvbm86Om1pbGxp c2Vjb25kcygxMCksIF9fbSk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlIDxjbGFzcyBf X1ByZWQsIGNsYXNzIF9fQ2xvY2ssIGNsYXNzIF9fRHVyYXRpb24+CisgICAgICAgIHJlcXVp cmVzIHN0ZDo6cHJlZGljYXRlPF9fUHJlZCwgX0ZwPgorICAgICAgX0dMSUJDWFhfQUxXQVlT X0lOTElORSBzdGQ6Om9wdGlvbmFsPF9GcD4KKyAgICAgIHdhaXRfdW50aWxfd2l0aF9wcmVk aWNhdGUoCisgICAgICAgICAgX19QcmVkICYmX19zdG9wX3dhaXRpbmcsCisgICAgICAgICAg Y29uc3Qgc3RkOjpjaHJvbm86OnRpbWVfcG9pbnQ8X19DbG9jaywgX19EdXJhdGlvbj4gJl9f ZGVhZGxpbmUsCisgICAgICAgICAgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9z ZXFfY3N0KSBjb25zdCB7CisgICAgICAgIF9GcCBfX3JldDsKKyAgICAgICAgYXV0byBfX3N1 Y2NlZWRlZCA9IHN0ZDo6X19hdG9taWNfd2FpdF9hZGRyZXNzX3VudGlsKAorICAgICAgICAg ICAgJl9NX2ZwLAorICAgICAgICAgICAgW19fbSwgdGhpcywgJl9fc3RvcF93YWl0aW5nLCAm X19yZXRdIHsKKyAgICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5sb2FkKF9fbSk7CisgICAg ICAgICAgICAgIHJldHVybiBzdGQ6Omludm9rZShfX3N0b3Bfd2FpdGluZywgX19yZXQpOwor ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF9fZGVhZGxpbmUpOworCisgICAgICAgIGlm ICghX19zdWNjZWVkZWQpCisgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg ICAgICByZXR1cm4gX19yZXQ7CisgICAgICB9CisKICNlbmRpZiAvLyBfX2dsaWJjeHhfYXRv bWljX3dhaXQKIAogICAgICAgdmFsdWVfdHlwZQotLSAKMi40NC4wCgo= --------------BBYn0a27UDU5RDhkmN0ZdUJv Content-Type: text/x-patch; charset=UTF-8; name="0002-Add-atomic-waits-to-atomic_flag.patch" Content-Disposition: attachment; filename="0002-Add-atomic-waits-to-atomic_flag.patch" Content-Transfer-Encoding: base64 RnJvbSAxODRiOTgzOTQ0MGU2M2M0MDc0NjM0NjY4ZmRlYTE4MDljNmEyOWE5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/VGVvZG9yPTIwU3A9QzM9QTZyZW4/ PSA8dGVvZG9yQHNwYXJlbi5ubz4KRGF0ZTogV2VkLCAxMCBBcHIgMjAyNCAxMjoxMTo1MCAr MDIwMApTdWJqZWN0OiBbUEFUQ0ggMi80XSBBZGQgYXRvbWljIHdhaXRzIHRvIGF0b21pY19m bGFnCgotLS0KIGxpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvYXRvbWljX2Jhc2UuaCB8IDEx MSArKysrKysrKysrKysrKysrKysrKystLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMDAgaW5zZXJ0 aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2lu Y2x1ZGUvYml0cy9hdG9taWNfYmFzZS5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9h dG9taWNfYmFzZS5oCmluZGV4IDNlMTJjYzkxN2I1Li44YTJlZDY1ZWFmMiAxMDA2NDQKLS0t IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9hdG9taWNfYmFzZS5oCisrKyBiL2xpYnN0 ZGMrKy12My9pbmNsdWRlL2JpdHMvYXRvbWljX2Jhc2UuaApAQCAtMjgwLDE2ICsyODAsMTA0 IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgbm90aWZ5X2FsbCgp IG5vZXhjZXB0CiAgICAgeyBzdGQ6Ol9fYXRvbWljX25vdGlmeV9hZGRyZXNzKCZfTV9pLCB0 cnVlKTsgfQogCi0gICAgX0dMSUJDWFhfQUxXQVlTX0lOTElORSBib29sCi0gICAgd2FpdF92 YWx1ZShib29sIF9fb2xkLAorICAgICAgdGVtcGxhdGUgPGNsYXNzIF9fUHJlZD4gcmVxdWly ZXMgc3RkOjpwcmVkaWNhdGU8X19QcmVkLCBib29sPgorICAgICAgX0dMSUJDWFhfQUxXQVlT X0lOTElORSBib29sCisgICAgICB3YWl0X3dpdGhfcHJlZGljYXRlKF9fUHJlZCAmJl9fc3Rv cF93YWl0aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlfb3JkZXIgX19t ID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIGNvbnN0IHsKKyAgICAgICAgYm9vbCBfX3JldDsK KyAgICAgICAgc3RkOjpfX2F0b21pY193YWl0X2FkZHJlc3MoJl9NX2ksIFtfX20sIHRoaXMs ICZfX3N0b3Bfd2FpdGluZywgJl9fcmV0XSB7CisgICAgICAgICAgX19yZXQgPSB0aGlzLT50 ZXN0KF9fbSk7CisgICAgICAgICAgcmV0dXJuIHN0ZDo6aW52b2tlKF9fc3RvcF93YWl0aW5n LCBfX3JldCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gX19yZXQ7CisgICAgICB9 CisKKyAgICAgIHRlbXBsYXRlIDxjbGFzcyBfX1JlcCwgY2xhc3MgX19QZXJpb2Q+CisgICAg ICBfR0xJQkNYWF9BTFdBWVNfSU5MSU5FIHN0ZDo6b3B0aW9uYWw8Ym9vbD4KKyAgICAgIHdh aXRfZm9yKGJvb2wgX19vbGQsCisgICAgICAgICAgICAgICBjb25zdCBzdGQ6OmNocm9ubzo6 ZHVyYXRpb248X19SZXAsIF9fUGVyaW9kPiAmX19kdXIsCisgICAgICAgICAgICAgICBtZW1v cnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIGNvbnN0IHsKKyAgICAgIAkv LyB0aGUgcmVzb24gZm9yIHRoaXMsIGlzIHRoYXQgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0 aGUgcHJlZGljYXRlCisgICAgICAJLy8gaXMgY2FsbGVkLCBzbyB3ZSBhcmUgc3VyZSB0aGUg dmFsdWUgaGFzIGNoYW5nZWQsIGFuZCB3ZSBhcmUgYWJsZSB0bworICAgICAgCS8vIHJldHVy biBpdC4KKyAgICAgIAlyZXR1cm4gdGhpcy0+d2FpdF9mb3Jfd2l0aF9wcmVkaWNhdGUoW19f b2xkXShjb25zdCBhdXRvIF9fY3VyKSB7CisgICAgICAJCS8vIFRPRE8ockhlcm1lcyk6IGNv bnNpZGVyIGRvaW5nIGF0b21pYyBjb21wYXJpc29ucyBoZXJlPworICAgICAgCQlyZXR1cm4g X19vbGQgIT0gX19jdXI7CisgICAgICAJfSwgX19kdXIsIF9fbSk7CisgICAgICB9CisKKyAg ICAgIHRlbXBsYXRlIDxjbGFzcyBfX0Nsb2NrLCBjbGFzcyBfX0R1cmF0aW9uPgorICAgICAg X0dMSUJDWFhfQUxXQVlTX0lOTElORSBzdGQ6Om9wdGlvbmFsPGJvb2w+CisgICAgICB3YWl0 X3VudGlsKGJvb2wgX19vbGQsCisgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6Y2hyb25v Ojp0aW1lX3BvaW50PF9fQ2xvY2ssIF9fRHVyYXRpb24+ICZfX2RlYWRsaW5lLAorICAgICAg ICAgICAgICAgICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIGNv bnN0IHsKKyAgICAgIAlyZXR1cm4gdGhpcy0+d2FpdF91bnRpbF93aXRoX3ByZWRpY2F0ZShb X19vbGRdKGNvbnN0IGF1dG8gX19jdXIpIHsKKyAgICAgIAkJLy8gVE9ETyhySGVybWVzKTog Y29uc2lkZXIgZG9pbmcgYXRvbWljIGNvbXBhcmlzb25zIGhlcmU/CisgICAgICAJCXJldHVy biBfX29sZCAhPSBfX2N1cjsKKyAgICAgIAl9LCBfX2RlYWRsaW5lLCBfX20pOworICAgICAg fQorCisgICAgICBfR0xJQkNYWF9BTFdBWVNfSU5MSU5FIHN0ZDo6b3B0aW9uYWw8Ym9vbD4K KyAgICAgIHRyeV93YWl0KGJvb2wgX19vbGQsCiAgICAgICAgICAgICAgICBtZW1vcnlfb3Jk ZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIGNvbnN0IG5vZXhjZXB0IHsKLSAgICAg IGJvb2wgX19yZXQ7Ci0gICAgICBzdGQ6Ol9fYXRvbWljX3dhaXRfYWRkcmVzc192KCZfTV9p LCBfX29sZCwgW19fbSwgdGhpcywgJl9fcmV0XSB7Ci0gICAgICAgIF9fcmV0ID0gX19hdG9t aWNfbG9hZF9uKCZfTV9pLCBpbnQoX19tKSk7CisgICAgICAgIC8vIFRPRE8ockhlcm1lcyk6 IFRoaXMgaXMgcmVhbGx5IG5vdCBhIGdvb2QgZGVmYXVsdCwgSSBuZWVkIHRvCisgICAgICAg IC8vIGRpc2N1c3Mgd2l0aHNvbWVvbmUgc21hcnRlcgorICAgICAgICByZXR1cm4gd2FpdF9m b3IoX19vbGQsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMTApLCBfX20pOworICAgICAg fQorCisgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgX19QcmVkLCBjbGFzcyBfX1JlcCwgY2xhc3Mg X19QZXJpb2Q+CisgICAgICAgIHJlcXVpcmVzIHN0ZDo6cHJlZGljYXRlPF9fUHJlZCwgYm9v bD4KKyAgICAgIF9HTElCQ1hYX0FMV0FZU19JTkxJTkUgc3RkOjpvcHRpb25hbDxib29sPiB3 YWl0X2Zvcl93aXRoX3ByZWRpY2F0ZSgKKyAgICAgICAgICBfX1ByZWQgJiZfX3N0b3Bfd2Fp dGluZywKKyAgICAgICAgICBjb25zdCBzdGQ6OmNocm9ubzo6ZHVyYXRpb248X19SZXAsIF9f UGVyaW9kPiAmX19kdXIsCisgICAgICAgICAgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9v cmRlcl9zZXFfY3N0KSBjb25zdCB7CisgICAgICAgIGJvb2wgX19yZXQ7CisgICAgICAgIGF1 dG8gX19zdWNjZWVkZWQgPSBzdGQ6Ol9fYXRvbWljX3dhaXRfYWRkcmVzc19mb3IoCisgICAg ICAgICAgICAmX01faSwKKyAgICAgICAgICAgIFtfX20sIHRoaXMsICZfX3N0b3Bfd2FpdGlu ZywgJl9fcmV0XSB7CisgICAgICAgICAgICAgIF9fcmV0ID0gdGhpcy0+dGVzdChfX20pOwor ICAgICAgICAgICAgICByZXR1cm4gc3RkOjppbnZva2UoX19zdG9wX3dhaXRpbmcsIF9fcmV0 KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBfX2R1cik7CisKKyAgICAgICAgaWYg KCFfX3N1Y2NlZWRlZCkKKyAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCiAgICAg ICAgIHJldHVybiBfX3JldDsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIF9fcmV0OwotICAg IH0KKyAgICAgIH0KKworICAgICAgdGVtcGxhdGUgPGNsYXNzIF9fUHJlZD4KKyAgICAgICAg cmVxdWlyZXMgc3RkOjpwcmVkaWNhdGU8X19QcmVkLCBib29sPgorICAgICAgX0dMSUJDWFhf QUxXQVlTX0lOTElORSBzdGQ6Om9wdGlvbmFsPGJvb2w+CisgICAgICB0cnlfd2FpdF93aXRo X3ByZWRpY2F0ZShfX1ByZWQgJiZfX3N0b3Bfd2FpdGluZywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkg Y29uc3QgeworCisgICAgCS8vIFRPRE8ockhlcm1lcyk6IFRoaXMgbmVlZHMgdG8gYmUgY2hh bmdlZCBvdXQgd2l0aCBhbiBhY3R1YWwgZ29vZCB2YWx1ZS4KKyAgICAgICAgcmV0dXJuIHdh aXRfZm9yX3dpdGhfcHJlZGljYXRlKHN0ZDo6Zm9yd2FyZDxfX1ByZWQ+KF9fc3RvcF93YWl0 aW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Y2hy b25vOjptaWxsaXNlY29uZHMoMTApLCBfX20pOworICAgICAgfQorCisgICAgICB0ZW1wbGF0 ZSA8Y2xhc3MgX19QcmVkLCBjbGFzcyBfX0Nsb2NrLCBjbGFzcyBfX0R1cmF0aW9uPgorICAg ICAgICByZXF1aXJlcyBzdGQ6OnByZWRpY2F0ZTxfX1ByZWQsIGJvb2w+CisgICAgICBfR0xJ QkNYWF9BTFdBWVNfSU5MSU5FIHN0ZDo6b3B0aW9uYWw8Ym9vbD4KKyAgICAgIHdhaXRfdW50 aWxfd2l0aF9wcmVkaWNhdGUoCisgICAgICAgICAgX19QcmVkICYmX19zdG9wX3dhaXRpbmcs CisgICAgICAgICAgY29uc3Qgc3RkOjpjaHJvbm86OnRpbWVfcG9pbnQ8X19DbG9jaywgX19E dXJhdGlvbj4gJl9fZGVhZGxpbmUsCisgICAgICAgICAgbWVtb3J5X29yZGVyIF9fbSA9IG1l bW9yeV9vcmRlcl9zZXFfY3N0KSBjb25zdCB7CisgICAgICAgIGJvb2wgX19yZXQ7CisgICAg ICAgIGF1dG8gX19zdWNjZWVkZWQgPSBzdGQ6Ol9fYXRvbWljX3dhaXRfYWRkcmVzc191bnRp bCgKKyAgICAgICAgICAgICZfTV9pLAorICAgICAgICAgICAgW19fbSwgdGhpcywgJl9fc3Rv cF93YWl0aW5nLCAmX19yZXRdIHsKKyAgICAgICAgICAgICAgX19yZXQgPSB0aGlzLT50ZXN0 KF9fbSk7CisgICAgICAgICAgICAgIHJldHVybiBzdGQ6Omludm9rZShfX3N0b3Bfd2FpdGlu ZywgX19yZXQpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIF9fZGVhZGxpbmUpOwor CisgICAgICAgIGlmICghX19zdWNjZWVkZWQpCisgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs bG9wdDsKKworICAgICAgICByZXR1cm4gX19yZXQ7CisgICAgICB9CiAKICAgICAvLyBUT0RP IGFkZCBjb25zdCB2b2xhdGlsZSBvdmVybG9hZAogI2VuZGlmIC8vIF9fZ2xpYmN4eF9hdG9t aWNfd2FpdApAQCAtNjk0LDcgKzc4Miw3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9W RVJTSU9OCiAgICAgICB9CiAKICAgICAgIHRlbXBsYXRlIDxjbGFzcyBfX1ByZWQsIGNsYXNz IF9fUmVwLCBjbGFzcyBfX1BlcmlvZD4KLSAgCXJlcXVpcmVzIHN0ZDo6cHJlZGljYXRlPF9f UHJlZCwgX19pbnRfdHlwZT4KKyAgICAgICAgcmVxdWlyZXMgc3RkOjpwcmVkaWNhdGU8X19Q cmVkLCBfX2ludF90eXBlPgogICAgICAgX0dMSUJDWFhfQUxXQVlTX0lOTElORSBzdGQ6Om9w dGlvbmFsPF9faW50X3R5cGU+IHdhaXRfZm9yX3dpdGhfcHJlZGljYXRlKAogICAgICAgICAg IF9fUHJlZCAmJl9fc3RvcF93YWl0aW5nLAogICAgICAgICAgIGNvbnN0IHN0ZDo6Y2hyb25v OjpkdXJhdGlvbjxfX1JlcCwgX19QZXJpb2Q+ICZfX2R1ciwKQEAgLTcxNCw3ICs4MDIsOCBA QCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgICByZXR1cm4gX19y ZXQ7CiAgICAgICB9CiAKLSAgICAgIHRlbXBsYXRlIDxjbGFzcyBfX1ByZWQ+IHJlcXVpcmVz IHN0ZDo6cHJlZGljYXRlPF9fUHJlZCwgX19pbnRfdHlwZT4KKyAgICAgIHRlbXBsYXRlIDxj bGFzcyBfX1ByZWQ+CisgICAgICAgIHJlcXVpcmVzIHN0ZDo6cHJlZGljYXRlPF9fUHJlZCwg X19pbnRfdHlwZT4KICAgICAgIF9HTElCQ1hYX0FMV0FZU19JTkxJTkUgc3RkOjpvcHRpb25h bDxfX2ludF90eXBlPgogICAgICAgdHJ5X3dhaXRfd2l0aF9wcmVkaWNhdGUoX19QcmVkICYm X19zdG9wX3dhaXRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlf b3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIGNvbnN0IHsKQEAgLTcyMyw3ICs4 MTIsNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgfQogCiAg ICAgICB0ZW1wbGF0ZSA8Y2xhc3MgX19QcmVkLCBjbGFzcyBfX0Nsb2NrLCBjbGFzcyBfX0R1 cmF0aW9uPgotICAJcmVxdWlyZXMgc3RkOjpwcmVkaWNhdGU8X19QcmVkLCBfX2ludF90eXBl PgorICAgICAgICByZXF1aXJlcyBzdGQ6OnByZWRpY2F0ZTxfX1ByZWQsIF9faW50X3R5cGU+ CiAgICAgICBfR0xJQkNYWF9BTFdBWVNfSU5MSU5FIHN0ZDo6b3B0aW9uYWw8X19pbnRfdHlw ZT4KICAgICAgIHdhaXRfdW50aWxfd2l0aF9wcmVkaWNhdGUoCiAgICAgICAgICAgX19QcmVk ICYmX19zdG9wX3dhaXRpbmcsCi0tIAoyLjQ0LjAKCg== --------------BBYn0a27UDU5RDhkmN0ZdUJv Content-Type: text/x-patch; charset=UTF-8; name="0001-Add-atomic-options-for-integers.patch" Content-Disposition: attachment; filename="0001-Add-atomic-options-for-integers.patch" Content-Transfer-Encoding: base64 RnJvbSA3NGJjOWYwNmUzZGUwMDg5YTFiNzI2YjRmMGEwZTBmYzE3MjVjNWU5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/VGVvZG9yPTIwU3A9QzM9QTZyZW4/ PSA8dGVvZG9yQHNwYXJlbi5ubz4KRGF0ZTogTW9uLCA4IEFwciAyMDI0IDIzOjU1OjAyICsw MjAwClN1YmplY3Q6IFtQQVRDSCAxLzRdIEFkZCBhdG9taWMgb3B0aW9ucyBmb3IgaW50ZWdl cnMKCi0tLQogbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9hdG9taWNfYmFzZS5oIHwgMTMz ICsrKysrKysrKysrKysrKysrKysrKysrKwogbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL2F0 b21pYyAgICAgICAgIHwgIDEwICsrCiAyIGZpbGVzIGNoYW5nZWQsIDE0MyBpbnNlcnRpb25z KCspCgpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9hdG9taWNfYmFz ZS5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9hdG9taWNfYmFzZS5oCmluZGV4IGRk MzYwMzAyZjgwLi4zZTEyY2M5MTdiNSAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1 ZGUvYml0cy9hdG9taWNfYmFzZS5oCisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMv YXRvbWljX2Jhc2UuaApAQCAtNDAsNiArNDAsMTEgQEAKIAogI2lmIF9fY3BsdXNwbHVzID4g MjAxNzAzTCAmJiBfR0xJQkNYWF9IT1NURUQKICNpbmNsdWRlIDxiaXRzL2F0b21pY193YWl0 Lmg+CisKKyNpbmNsdWRlIDxiaXRzL2F0b21pY190aW1lZF93YWl0Lmg+CisjaW5jbHVkZSA8 Y29uY2VwdHM+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxvcHRpb25hbD4K ICNlbmRpZgogCiAjaWZuZGVmIF9HTElCQ1hYX0FMV0FZU19JTkxJTkUKQEAgLTQ4LDYgKzUz LDcgQEAKIAogI2luY2x1ZGUgPGJpdHMvdmVyc2lvbi5oPgogCisKIG5hbWVzcGFjZSBzdGQg X0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQogewogX0dMSUJDWFhfQkVHSU5fTkFNRVNQ QUNFX1ZFUlNJT04KQEAgLTI3NCw2ICsyODAsMTcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQ QUNFX1ZFUlNJT04KICAgICBub3RpZnlfYWxsKCkgbm9leGNlcHQKICAgICB7IHN0ZDo6X19h dG9taWNfbm90aWZ5X2FkZHJlc3MoJl9NX2ksIHRydWUpOyB9CiAKKyAgICBfR0xJQkNYWF9B TFdBWVNfSU5MSU5FIGJvb2wKKyAgICB3YWl0X3ZhbHVlKGJvb2wgX19vbGQsCisgICAgICAg ICAgICAgICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3NlcV9jc3QpIGNvbnN0 IG5vZXhjZXB0IHsKKyAgICAgIGJvb2wgX19yZXQ7CisgICAgICBzdGQ6Ol9fYXRvbWljX3dh aXRfYWRkcmVzc192KCZfTV9pLCBfX29sZCwgW19fbSwgdGhpcywgJl9fcmV0XSB7CisgICAg ICAgIF9fcmV0ID0gX19hdG9taWNfbG9hZF9uKCZfTV9pLCBpbnQoX19tKSk7CisgICAgICAg IHJldHVybiBfX3JldDsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIF9fcmV0OworICAgIH0K KwogICAgIC8vIFRPRE8gYWRkIGNvbnN0IHZvbGF0aWxlIG92ZXJsb2FkCiAjZW5kaWYgLy8g X19nbGliY3h4X2F0b21pY193YWl0CiAKQEAgLTYyMiw2ICs2MzksMTExIEBAIF9HTElCQ1hY X0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICBub3RpZnlfYWxsKCkgbm9leGNlcHQK ICAgICAgIHsgc3RkOjpfX2F0b21pY19ub3RpZnlfYWRkcmVzcygmX01faSwgdHJ1ZSk7IH0K IAorICAgICAgX0dMSUJDWFhfQUxXQVlTX0lOTElORSBfX2ludF90eXBlCisgICAgICB3YWl0 X3ZhbHVlKF9faW50X3R5cGUgX19vbGQsCisgICAgICAgICAgICAgICAgIG1lbW9yeV9vcmRl ciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgY29uc3Qgbm9leGNlcHQgeworICAgICAg CXJldHVybiB0aGlzLT53YWl0X3dpdGhfcHJlZGljYXRlKFtfX29sZF0oY29uc3QgYXV0byBf X2N1cikgeworICAgICAgCQkvLyBUT0RPKHJIZXJtZXMpOiBjb25zaWRlciBkb2luZyBhdG9t aWMgY29tcGFyaXNvbnMgaGVyZT8KKyAgICAgIAkJcmV0dXJuIF9fb2xkICE9IF9fY3VyOwor ICAgICAgCX0sIF9fbSk7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlIDxjbGFzcyBfX1By ZWQ+IHJlcXVpcmVzIHN0ZDo6cHJlZGljYXRlPF9fUHJlZCwgX19pbnRfdHlwZT4KKyAgICAg IF9HTElCQ1hYX0FMV0FZU19JTkxJTkUgX19pbnRfdHlwZQorICAgICAgd2FpdF93aXRoX3By ZWRpY2F0ZShfX1ByZWQgJiZfX3N0b3Bfd2FpdGluZywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBjb25zdCB7 CisgICAgICAgIF9faW50X3R5cGUgX19yZXQ7CisgICAgICAgIHN0ZDo6X19hdG9taWNfd2Fp dF9hZGRyZXNzKCZfTV9pLCBbX19tLCB0aGlzLCAmX19zdG9wX3dhaXRpbmcsICZfX3JldF0g eworICAgICAgICAgIF9fcmV0ID0gdGhpcy0+bG9hZChfX20pOworICAgICAgICAgIHJldHVy biBzdGQ6Omludm9rZShfX3N0b3Bfd2FpdGluZywgX19yZXQpOworICAgICAgICB9KTsKKyAg ICAgICAgcmV0dXJuIF9fcmV0OworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZSA8Y2xhc3Mg X19SZXAsIGNsYXNzIF9fUGVyaW9kPgorICAgICAgX0dMSUJDWFhfQUxXQVlTX0lOTElORSBz dGQ6Om9wdGlvbmFsPF9faW50X3R5cGU+CisgICAgICB3YWl0X2ZvcihfX2ludF90eXBlIF9f b2xkLAorICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpjaHJvbm86OmR1cmF0aW9uPF9fUmVw LCBfX1BlcmlvZD4gJl9fZHVyLAorICAgICAgICAgICAgICAgbWVtb3J5X29yZGVyIF9fbSA9 IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBjb25zdCB7CisgICAgICAJLy8gdGhlIHJlc29uIGZv ciB0aGlzLCBpcyB0aGF0IHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHByZWRpY2F0ZQor ICAgICAgCS8vIGlzIGNhbGxlZCwgc28gd2UgYXJlIHN1cmUgdGhlIHZhbHVlIGhhcyBjaGFu Z2VkLCBhbmQgd2UgYXJlIGFibGUgdG8KKyAgICAgIAkvLyByZXR1cm4gaXQuCisgICAgICAJ cmV0dXJuIHRoaXMtPndhaXRfZm9yX3dpdGhfcHJlZGljYXRlKFtfX29sZF0oX19pbnRfdHlw ZSBfX2N1cikgeworICAgICAgCQkvLyBUT0RPKHJIZXJtZXMpOiBjb25zaWRlciBkb2luZyBh dG9taWMgY29tcGFyaXNvbnMgaGVyZT8KKyAgICAgIAkJcmV0dXJuIF9fb2xkICE9IF9fY3Vy OworICAgICAgCX0sIF9fZHVyLCBfX20pOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZSA8 Y2xhc3MgX19DbG9jaywgY2xhc3MgX19EdXJhdGlvbj4KKyAgICAgIF9HTElCQ1hYX0FMV0FZ U19JTkxJTkUgc3RkOjpvcHRpb25hbDxfX2ludF90eXBlPgorICAgICAgd2FpdF91bnRpbChf X2ludF90eXBlIF9fb2xkLAorICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OmNocm9ubzo6 dGltZV9wb2ludDxfX0Nsb2NrLCBfX0R1cmF0aW9uPiAmX19kZWFkbGluZSwKKyAgICAgICAg ICAgICAgICAgbWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBjb25z dCB7CisgICAgICAJcmV0dXJuIHRoaXMtPndhaXRfdW50aWxfd2l0aF9wcmVkaWNhdGUoW19f b2xkXShjb25zdCBhdXRvIF9fY3VyKSB7CisgICAgICAJCS8vIFRPRE8ockhlcm1lcyk6IGNv bnNpZGVyIGRvaW5nIGF0b21pYyBjb21wYXJpc29ucyBoZXJlPworICAgICAgCQlyZXR1cm4g X19vbGQgIT0gX19jdXI7CisgICAgICAJfSwgX19kZWFkbGluZSwgX19tKTsKKyAgICAgIH0K KworICAgICAgX0dMSUJDWFhfQUxXQVlTX0lOTElORSBzdGQ6Om9wdGlvbmFsPF9faW50X3R5 cGU+CisgICAgICB0cnlfd2FpdChfX2ludF90eXBlIF9fb2xkLAorICAgICAgICAgICAgICAg bWVtb3J5X29yZGVyIF9fbSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBjb25zdCBub2V4Y2Vw dCB7CisgICAgICAgIC8vIFRPRE8ockhlcm1lcyk6IFRoaXMgaXMgcmVhbGx5IG5vdCBhIGdv b2QgZGVmYXVsdCwgSSBuZWVkIHRvCisgICAgICAgIC8vIGRpc2N1c3Mgd2l0aHNvbWVvbmUg c21hcnRlcgorICAgICAgICByZXR1cm4gd2FpdF9mb3IoX19vbGQsIHN0ZDo6Y2hyb25vOjpt aWxsaXNlY29uZHMoMTApLCBfX20pOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZSA8Y2xh c3MgX19QcmVkLCBjbGFzcyBfX1JlcCwgY2xhc3MgX19QZXJpb2Q+CisgIAlyZXF1aXJlcyBz dGQ6OnByZWRpY2F0ZTxfX1ByZWQsIF9faW50X3R5cGU+CisgICAgICBfR0xJQkNYWF9BTFdB WVNfSU5MSU5FIHN0ZDo6b3B0aW9uYWw8X19pbnRfdHlwZT4gd2FpdF9mb3Jfd2l0aF9wcmVk aWNhdGUoCisgICAgICAgICAgX19QcmVkICYmX19zdG9wX3dhaXRpbmcsCisgICAgICAgICAg Y29uc3Qgc3RkOjpjaHJvbm86OmR1cmF0aW9uPF9fUmVwLCBfX1BlcmlvZD4gJl9fZHVyLAor ICAgICAgICAgIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgY29u c3QgeworICAgICAgICBfX2ludF90eXBlIF9fcmV0OworICAgICAgICBhdXRvIF9fc3VjY2Vl ZGVkID0gc3RkOjpfX2F0b21pY193YWl0X2FkZHJlc3NfZm9yKAorICAgICAgICAgICAgJl9N X2ksCisgICAgICAgICAgICBbX19tLCB0aGlzLCAmX19zdG9wX3dhaXRpbmcsICZfX3JldF0g eworICAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPmxvYWQoX19tKTsKKyAgICAgICAgICAg ICAgcmV0dXJuIHN0ZDo6aW52b2tlKF9fc3RvcF93YWl0aW5nLCBfX3JldCk7CisgICAgICAg ICAgICB9LAorICAgICAgICAgICAgX19kdXIpOworCisgICAgICAgIGlmICghX19zdWNjZWVk ZWQpCisgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAgICByZXR1cm4g X19yZXQ7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlIDxjbGFzcyBfX1ByZWQ+IHJlcXVp cmVzIHN0ZDo6cHJlZGljYXRlPF9fUHJlZCwgX19pbnRfdHlwZT4KKyAgICAgIF9HTElCQ1hY X0FMV0FZU19JTkxJTkUgc3RkOjpvcHRpb25hbDxfX2ludF90eXBlPgorICAgICAgdHJ5X3dh aXRfd2l0aF9wcmVkaWNhdGUoX19QcmVkICYmX19zdG9wX3dhaXRpbmcsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtZW1vcnlfb3JkZXIgX19tID0gbWVtb3J5X29yZGVyX3Nl cV9jc3QpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIHdhaXRfZm9yX3dpdGhfcHJlZGljYXRl KHN0ZDo6Zm9yd2FyZDxfX1ByZWQ+KF9fc3RvcF93YWl0aW5nKSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoMTAp LCBfX20pOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgX19QcmVkLCBjbGFz cyBfX0Nsb2NrLCBjbGFzcyBfX0R1cmF0aW9uPgorICAJcmVxdWlyZXMgc3RkOjpwcmVkaWNh dGU8X19QcmVkLCBfX2ludF90eXBlPgorICAgICAgX0dMSUJDWFhfQUxXQVlTX0lOTElORSBz dGQ6Om9wdGlvbmFsPF9faW50X3R5cGU+CisgICAgICB3YWl0X3VudGlsX3dpdGhfcHJlZGlj YXRlKAorICAgICAgICAgIF9fUHJlZCAmJl9fc3RvcF93YWl0aW5nLAorICAgICAgICAgIGNv bnN0IHN0ZDo6Y2hyb25vOjp0aW1lX3BvaW50PF9fQ2xvY2ssIF9fRHVyYXRpb24+ICZfX2Rl YWRsaW5lLAorICAgICAgICAgIG1lbW9yeV9vcmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2Vx X2NzdCkgY29uc3QgeworICAgICAgICBfX2ludF90eXBlIF9fcmV0OworICAgICAgICBhdXRv IF9fc3VjY2VlZGVkID0gc3RkOjpfX2F0b21pY193YWl0X2FkZHJlc3NfdW50aWwoCisgICAg ICAgICAgICAmX01faSwKKyAgICAgICAgICAgIFtfX20sIHRoaXMsICZfX3N0b3Bfd2FpdGlu ZywgJl9fcmV0XSB7CisgICAgICAgICAgICAgIF9fcmV0ID0gdGhpcy0+bG9hZChfX20pOwor ICAgICAgICAgICAgICByZXR1cm4gc3RkOjppbnZva2UoX19zdG9wX3dhaXRpbmcsIF9fcmV0 KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBfX2RlYWRsaW5lKTsKKworICAgICAg ICBpZiAoIV9fc3VjY2VlZGVkKQorICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK KyAgICAgICAgcmV0dXJuIF9fcmV0OworICAgICAgfQorCiAgICAgICAvLyBUT0RPIGFkZCBj b25zdCB2b2xhdGlsZSBvdmVybG9hZAogI2VuZGlmIC8vIF9fZ2xpYmN4eF9hdG9taWNfd2Fp dAogCkBAIC05MjUsNiArMTA0NywxNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVS U0lPTgogICAgICAgbm90aWZ5X2FsbCgpIGNvbnN0IG5vZXhjZXB0CiAgICAgICB7IHN0ZDo6 X19hdG9taWNfbm90aWZ5X2FkZHJlc3MoJl9NX3AsIHRydWUpOyB9CiAKKyAgICAgIF9HTElC Q1hYX0FMV0FZU19JTkxJTkUgX19wb2ludGVyX3R5cGUKKyAgICAgIHdhaXRfdmFsdWUoX19w b2ludGVyX3R5cGUgX19vbGQsCisgICAgICAgICAgICAgICAgIG1lbW9yeV9vcmRlciBfX20g PSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgY29uc3Qgbm9leGNlcHQgeworICAgICAgICBfX3Bv aW50ZXJfdHlwZSBfX3JldDsKKyAgICAgICAgc3RkOjpfX2F0b21pY193YWl0X2FkZHJlc3Nf digmX01fcCwgX19vbGQsIFtfX20sIHRoaXMsICZfX3JldF0geworICAgICAgICAgIF9fcmV0 ID0gdGhpcy0+bG9hZChfX20pOworICAgICAgICAgIHJldHVybiBfX3JldDsKKyAgICAgICAg fSk7CisgICAgICAgIHJldHVybiBfX3JldDsKKyAgICAgIH0KKwogICAgICAgLy8gVE9ETyBh ZGQgY29uc3Qgdm9sYXRpbGUgb3ZlcmxvYWQKICNlbmRpZiAvLyBfX2dsaWJjeHhfYXRvbWlj X3dhaXQKIApkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL2F0b21pYyBi L2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC9hdG9taWMKaW5kZXggMTQ2MmNmNWVjMjMuLjNl ZmNkZGM2OTM4IDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9zdGQvYXRvbWlj CisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC9hdG9taWMKQEAgLTE4Myw2ICsxODMs MTEgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICB2b2lkCiAgICAg bm90aWZ5X2FsbCgpIG5vZXhjZXB0CiAgICAgeyBfTV9iYXNlLm5vdGlmeV9hbGwoKTsgfQor CisgICAgYm9vbAorICAgIHdhaXRfdmFsdWUoYm9vbCBfX29sZCwgbWVtb3J5X29yZGVyIF9f bSA9IG1lbW9yeV9vcmRlcl9zZXFfY3N0KSBjb25zdCBub2V4Y2VwdCB7CisgICAgICByZXR1 cm4gX01fYmFzZS53YWl0X3ZhbHVlKF9fb2xkLCBfX20pOworICAgIH0KICNlbmRpZiAvLyBf X2NwcF9saWJfYXRvbWljX3dhaXQKICAgfTsKIApAQCAtNjYzLDYgKzY2OCwxMSBAQCBfR0xJ QkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgIHZvaWQKICAgICBub3RpZnlfYWxs KCkgbm9leGNlcHQKICAgICB7IF9NX2Iubm90aWZ5X2FsbCgpOyB9CisKKyAgICBfX3BvaW50 ZXJfdHlwZQorICAgIHdhaXRfdmFsdWUoX19wb2ludGVyX3R5cGUgX19vbGQsIG1lbW9yeV9v cmRlciBfX20gPSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgY29uc3Qgbm9leGNlcHQKKyAgICB7 IHJldHVybiBfTV9iLndhaXRfdmFsdWUoX19vbGQsIF9fbSk7IH0KKwogI2VuZGlmIC8vIF9f Y3BwX2xpYl9hdG9taWNfd2FpdAogCiAgICAgICBfX3BvaW50ZXJfdHlwZQotLSAKMi40NC4w Cgo= --------------BBYn0a27UDU5RDhkmN0ZdUJv--