From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28822 invoked by alias); 14 Jul 2016 23:50:25 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 28796 invoked by uid 89); 14 Jul 2016 23:50:24 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.6 required=5.0 tests=AWL,BAYES_00,KAM_ASCII_DIVIDERS,NO_RDNS_DOTCOM_HELO,RCVD_IN_DNSWL_LOW,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 spammy=2016-07-15, 20160715, edward, Edward X-Spam-User: qpsmtpd, 2 recipients X-HELO: vms173025pub.verizon.net Received: from vms173025pub.verizon.net (HELO vms173025pub.verizon.net) (206.46.173.25) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Thu, 14 Jul 2016 23:50:14 +0000 Received: from vz-proxy-l007.mx.aol.com ([64.236.82.157]) by vms173025.mailsrvcs.net (Oracle Communications Messaging Server 7.0.5.32.0 64bit (built Jul 16 2014)) with ESMTPA id <0OAB00GDFWVD9X60@vms173025.mailsrvcs.net>; Thu, 14 Jul 2016 18:50:02 -0500 (CDT) X-CMAE-Score: 0 X-CMAE-Analysis: v=2.1 cv=WpDWSorv c=1 sm=1 tr=0 a=EDyElNE8DnJcdewKkuvZJw==:117 a=hTZS6uLwhHpx5LOQAS/v3KalXBI=:19 a=cAmyUtKerLwA:10 a=r77TgQKjGQsHNAKrUKIA:9 a=GcBqaS38gA9bM9vVyX0A:9 a=QEXdDO2ut3YA:10 a=2itzioW3hLIA:10 a=o1OHuDzbAAAA:8 a=XFh8-BuExFa9XTJDcwoA:9 a=mDV3o1hIAAAA:8 a=pjIMvr14dnag6GJap28A:9 Received: by 71.121.253.69 with SMTP id 0b1beb10; Thu, 14 Jul 2016 23:50:01 GMT To: "libstdc++@gcc.gnu.org" , gcc-patches , Jonathan Wakely From: Ed Smith-Rowland <3dw4rd@verizon.net> Subject: [libstdc++] Add C++17clamp Message-id: <57882528.8010501@verizon.net> Date: Thu, 14 Jul 2016 23:50:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.8.0 MIME-version: 1.0 Content-type: multipart/mixed; boundary=------------070303090407010901080504 X-SW-Source: 2016-07/txt/msg00883.txt.bz2 This is a multi-part message in MIME format. --------------070303090407010901080504 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 240 Here is an implementation of P0025 An algorithm to "clamp" a value between a pair of boundary values. Testing is almost finished - looks good so far. OK if testing passes? I didn't see a feature test in any of the SD-6 papers or P0025. --------------070303090407010901080504 Content-Type: text/plain; charset=UTF-8; name="CL_clamp" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="CL_clamp" Content-length: 708 CjIwMTYtMDctMTUgIEVkd2FyZCBTbWl0aC1Sb3dsYW5kICA8M2R3NHJkQHZl cml6b24ubmV0PgoKCUltcGxlbWVudCBDKysxNyBQMDAyNSBjbGFtcC4KCSog aW5jbHVkZS9iaXRzL2FsZ29yaXRobWZ3ZC5oOiBEZWNsYXJlIGNsYW1wIG92 ZXJsb2Fkcy4KCSogaW5jbHVkZS9iaXRzL3N0bF9hbGdvLmg6IEltcGxlbWVu dCBjbGFtcC4KCSogdGVzdHN1aXRlLzI1X2FsZ29yaXRobXMvY2xhbXAvMS5j YzogTmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS8yNV9hbGdvcml0aG1zL2NsYW1w LzIuY2M6IE5ldyB0ZXN0LgoJKiB0ZXN0c3VpdGUvMjVfYWxnb3JpdGhtcy9j bGFtcC9jb25zdGV4cHIuY2M6IE5ldyB0ZXN0LgoJKiB0ZXN0c3VpdGUvMjVf YWxnb3JpdGhtcy9jbGFtcC9yZXF1aXJlbWVudHMvZXhwbGljaXRfaW5zdGFu dGlhdGlvbi8KCTEuY2M6IE5ldyB0ZXN0LgoJKiB0ZXN0c3VpdGUvMjVfYWxn b3JpdGhtcy9jbGFtcC9yZXF1aXJlbWVudHMvZXhwbGljaXRfaW5zdGFudGlh dGlvbi8KCXBvZC5jYzogTmV3IHRlc3QuCg== --------------070303090407010901080504 Content-Type: text/plain; charset=UTF-8; name="patch_clamp" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="patch_clamp" Content-length: 18256 SW5kZXg6IGluY2x1ZGUvYml0cy9hbGdvcml0aG1md2QuaAo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSBpbmNsdWRlL2JpdHMvYWxnb3JpdGhtZndkLmgJ KHJldmlzaW9uIDIzODMwMikKKysrIGluY2x1ZGUvYml0cy9hbGdvcml0aG1m d2QuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogICAgIGFs bF9vZiAoQysrMHgpCiAgICAgYW55X29mIChDKysweCkKICAgICBiaW5hcnlf c2VhcmNoCisgICAgY2xhbXAgKEMrKzE3KQogICAgIGNvcHkKICAgICBjb3B5 X2JhY2t3YXJkCiAgICAgY29weV9pZiAoQysrMHgpCkBAIC0yMDgsNiArMjA5 LDE4IEBACiAgICAgYm9vbCAKICAgICBiaW5hcnlfc2VhcmNoKF9GSXRlciwg X0ZJdGVyLCBjb25zdCBfVHAmLCBfQ29tcGFyZSk7CiAKKyNpZiBfX2NwbHVz cGx1cyA+IDIwMTQwMkwKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgorICAg IF9HTElCQ1hYMTRfQ09OU1RFWFBSCisgICAgY29uc3QgX1RwJgorICAgIGNs YW1wKGNvbnN0IF9UcCYsIGNvbnN0IF9UcCYsIGNvbnN0IF9UcCYpOworCisg IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+Cisg ICAgX0dMSUJDWFgxNF9DT05TVEVYUFIKKyAgICBjb25zdCBfVHAmCisgICAg Y2xhbXAoY29uc3QgX1RwJiwgY29uc3QgX1RwJiwgY29uc3QgX1RwJiwgX0Nv bXBhcmUpOworI2VuZGlmCisKICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJdGVy LCB0eXBlbmFtZSBfT0l0ZXI+CiAgICAgX09JdGVyIAogICAgIGNvcHkoX0lJ dGVyLCBfSUl0ZXIsIF9PSXRlcik7CkluZGV4OiBpbmNsdWRlL2JpdHMvc3Rs X2FsZ28uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBpbmNsdWRlL2Jp dHMvc3RsX2FsZ28uaAkocmV2aXNpb24gMjM4MzAyKQorKysgaW5jbHVkZS9i aXRzL3N0bF9hbGdvLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2OTgsOCArMzY5 OCw0NCBAQAogICAgICAgcmV0dXJuIHN0ZDo6X19pc19wZXJtdXRhdGlvbihf X2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAJCQkJICAg X19nbnVfY3h4OjpfX29wczo6X19pdGVyX2NvbXBfaXRlcihfX3ByZWQpKTsK ICAgICB9Ci0jZW5kaWYKIAorI2lmIF9fY3BsdXNwbHVzID4gMjAxNDAyTAor ICAvKioKKyAgICogIEBicmllZiAgUmV0dXJucyB0aGUgdmFsdWUgY2xhbXBl ZCBiZXR3ZWVuIGxvIGFuZCBoaS4KKyAgICogIEBpbmdyb3VwIHNvcnRpbmdf YWxnb3JpdGhtcworICAgKiAgQHBhcmFtICBfX3ZhbCAgQSB2YWx1ZSBvZiBh cmJpdHJhcnkgdHlwZS4KKyAgICogIEBwYXJhbSAgX19sbyAgIEEgbG93ZXIg bGltaXQgb2YgYXJiaXRyYXJ5IHR5cGUuCisgICAqICBAcGFyYW0gIF9faGkg ICBBbiB1cHBlciBsaW1pdCBvZiBhcmJpdHJhcnkgdHlwZS4KKyAgICogIEBy ZXR1cm4gbWF4KF9fdmFsLCBfX2xvKSBpZiBfX3ZhbCA8IF9faGkgb3IgbWlu KF9fdmFsLCBfX2hpKSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CisgICAgY29uc3RleHByIGNvbnN0IF9UcCYKKyAgICBj bGFtcChjb25zdCBfVHAmIF9fdmFsLCBjb25zdCBfVHAmIF9fbG8sIGNvbnN0 IF9UcCYgX19oaSkKKyAgICB7CisgICAgICBfX2dsaWJjeHhfYXNzZXJ0KCEo X19oaSA8IF9fbG8pKTsKKyAgICAgIHJldHVybiAoX192YWwgPCBfX2xvKSA/ IF9fbG8gOiAoX19oaSA8IF9fdmFsKSA/IF9faGkgOiBfX3ZhbDsKKyAgICB9 CisKKyAgLyoqCisgICAqICBAYnJpZWYgIFJldHVybnMgdGhlIHZhbHVlIGNs YW1wZWQgYmV0d2VlbiBsbyBhbmQgaGkuCisgICAqICBAaW5ncm91cCBzb3J0 aW5nX2FsZ29yaXRobXMKKyAgICogIEBwYXJhbSAgX192YWwgICBBIHZhbHVl IG9mIGFyYml0cmFyeSB0eXBlLgorICAgKiAgQHBhcmFtICBfX2xvICAgIEEg bG93ZXIgbGltaXQgb2YgYXJiaXRyYXJ5IHR5cGUuCisgICAqICBAcGFyYW0g IF9faGkgICAgQW4gdXBwZXIgbGltaXQgb2YgYXJiaXRyYXJ5IHR5cGUuCisg ICAqICBAcGFyYW0gIF9fY29tcCAgQSBjb21wYXJpc29uIGZ1bmN0b3IuCisg ICAqICBAcmV0dXJuIG1heChfX3ZhbCwgX19sbywgX19jb21wKSBpZiBfX2Nv bXAoX192YWwsIF9faGkpCisgICAqCSAgICAgIG9yIG1pbihfX3ZhbCwgX19o aSwgX19jb21wKSBvdGhlcndpc2UuCisgICAqLworICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgorICAgIGNvbnN0ZXhwciBj b25zdCBfVHAmCisgICAgY2xhbXAoY29uc3QgX1RwJiBfX3ZhbCwgY29uc3Qg X1RwJiBfX2xvLCBjb25zdCBfVHAmIF9faGksIF9Db21wYXJlIF9fY29tcCkK KyAgICB7CisgICAgICBfX2dsaWJjeHhfYXNzZXJ0KCFfX2NvbXAoX19oaSwg X19sbykpOworICAgICAgcmV0dXJuIF9fY29tcChfX3ZhbCwgX19sbykgPyBf X2xvIDogX19jb21wKF9faGksIF9fdmFsKSA/IF9faGkgOiBfX3ZhbDsKKyAg ICB9CisjZW5kaWYgLy8gQysrMTcKKyNlbmRpZiAvLyBDKysxNAorCiAjaWZk ZWYgX0dMSUJDWFhfVVNFX0M5OV9TVERJTlRfVFIxCiAgIC8qKgogICAgKiAg QGJyaWVmIFNodWZmbGUgdGhlIGVsZW1lbnRzIG9mIGEgc2VxdWVuY2UgdXNp bmcgYSB1bmlmb3JtIHJhbmRvbQpJbmRleDogdGVzdHN1aXRlLzI1X2FsZ29y aXRobXMvY2xhbXAvMS5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0 ZXN0c3VpdGUvMjVfYWxnb3JpdGhtcy9jbGFtcC8xLmNjCShub25leGlzdGVu dCkKKysrIHRlc3RzdWl0ZS8yNV9hbGdvcml0aG1zL2NsYW1wLzEuY2MJKHdv cmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLy8geyBkZy1vcHRpb25z ICItc3RkPWdudSsrMTciIH0KKworLy8gQ29weXJpZ2h0IChDKSAyMDE2IEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBs aWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVy IHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFy eTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8gPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjaW5jbHVkZSA8YWxn b3JpdGhtPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8dGVz dHN1aXRlX2hvb2tzLmg+CisKK3ZvaWQgdGVzdDAxKCkKK3sKKyAgYm9vbCB0 ZXN0IF9fYXR0cmlidXRlX18oKHVudXNlZCkpID0gdHJ1ZTsKKworICBjb25z dCBpbnQgeCA9IHN0ZDo6Y2xhbXAoMSwgMiwgNCk7CisgIGNvbnN0IGludCB5 ID0gc3RkOjpjbGFtcCgzLCAyLCA0KTsKKyAgY29uc3QgaW50IHogPSBzdGQ6 OmNsYW1wKDUsIDIsIDQpOworICBWRVJJRlkoIHggPT0gMiApOworICBWRVJJ RlkoIHkgPT0gMyApOworICBWRVJJRlkoIHogPT0gNCApOworCisgIGNvbnN0 IGludCB4YyA9IHN0ZDo6Y2xhbXAoMSwgMiwgNCwgc3RkOjpncmVhdGVyPGlu dD4oKSk7CisgIGNvbnN0IGludCB5YyA9IHN0ZDo6Y2xhbXAoMywgMiwgNCwg c3RkOjpncmVhdGVyPGludD4oKSk7CisgIGNvbnN0IGludCB6YyA9IHN0ZDo6 Y2xhbXAoNSwgMiwgNCwgc3RkOjpncmVhdGVyPGludD4oKSk7CisgIFZFUklG WSggeGMgPT0gNCApOworICBWRVJJRlkoIHljID09IDIgKTsKKyAgVkVSSUZZ KCB6YyA9PSAyICk7Cit9CisKK2ludAorbWFpbigpCit7CisgIHRlc3QwMSgp OworICByZXR1cm4gMDsKK30KSW5kZXg6IHRlc3RzdWl0ZS8yNV9hbGdvcml0 aG1zL2NsYW1wLzIuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdGVz dHN1aXRlLzI1X2FsZ29yaXRobXMvY2xhbXAvMi5jYwkobm9uZXhpc3RlbnQp CisrKyB0ZXN0c3VpdGUvMjVfYWxnb3JpdGhtcy9jbGFtcC8yLmNjCSh3b3Jr aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAyIEBACisvLyB7IGRnLW9wdGlvbnMg Ii1zdGQ9Z251KysxNyIgfQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAx NiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlz IGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRo aXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBs YXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisv LyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxp YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKy8v IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworI2luY2x1ZGUg PGFsZ29yaXRobT4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUg PHRlc3RzdWl0ZV9ob29rcy5oPgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor ICBzdHJ1Y3QgQSB7IHN0YXRpYyBjb25zdCBUIGE7IH07CisKK3RlbXBsYXRl PHR5cGVuYW1lIFQ+Citjb25zdCBUIEE8VD46OmEgPSBUKDMpOworCit2b2lk IHRlc3QwMigpCit7CisgIGJvb2wgdGVzdCBfX2F0dHJpYnV0ZV9fKCh1bnVz ZWQpKSA9IHRydWU7CisKKyAgVkVSSUZZKCAzID09IHN0ZDo6Y2xhbXAoQTxp bnQ+OjphLCAyLCA0KSApOworICBWRVJJRlkoIDIgPT0gc3RkOjpjbGFtcChB PGludD46OmEsIDEsIDIpICk7CisgIFZFUklGWSggNCA9PSBzdGQ6OmNsYW1w KEE8aW50Pjo6YSwgNCwgNikgKTsKKworICBWRVJJRlkoIDN1ID09IHN0ZDo6 Y2xhbXAoQTx1bnNpZ25lZCBpbnQ+OjphLCAydSwgNHUpICk7CisgIFZFUklG WSggMnUgPT0gc3RkOjpjbGFtcChBPHVuc2lnbmVkIGludD46OmEsIDF1LCAy dSkgKTsKKyAgVkVSSUZZKCA0dSA9PSBzdGQ6OmNsYW1wKEE8dW5zaWduZWQg aW50Pjo6YSwgNHUsIDZ1KSApOworCisgIFZFUklGWSggM2wgPT0gc3RkOjpj bGFtcChBPGxvbmc+OjphLCAybCwgNGwpICk7CisgIFZFUklGWSggMmwgPT0g c3RkOjpjbGFtcChBPGxvbmc+OjphLCAxbCwgMmwpICk7CisgIFZFUklGWSgg NGwgPT0gc3RkOjpjbGFtcChBPGxvbmc+OjphLCA0bCwgNmwpICk7CisKKyAg VkVSSUZZKCAzdWwgPT0gc3RkOjpjbGFtcChBPHVuc2lnbmVkIGxvbmc+Ojph LCAydWwsIDR1bCkgKTsKKyAgVkVSSUZZKCAydWwgPT0gc3RkOjpjbGFtcChB PHVuc2lnbmVkIGxvbmc+OjphLCAxdWwsIDJ1bCkgKTsKKyAgVkVSSUZZKCA0 dWwgPT0gc3RkOjpjbGFtcChBPHVuc2lnbmVkIGxvbmc+OjphLCA0dWwsIDZ1 bCkgKTsKKworI2lmZGVmIF9HTElCQ1hYX1VTRV9MT05HX0xPTkcKKyAgVkVS SUZZKCAzbGwgPT0gc3RkOjpjbGFtcChBPGxvbmcgbG9uZz46OmEsIDJsbCwg NGxsKSApOworICBWRVJJRlkoIDJsbCA9PSBzdGQ6OmNsYW1wKEE8bG9uZyBs b25nPjo6YSwgMWxsLCAybGwpICk7CisgIFZFUklGWSggNGxsID09IHN0ZDo6 Y2xhbXAoQTxsb25nIGxvbmc+OjphLCA0bGwsIDZsbCkgKTsKKworICBWRVJJ RlkoIDN1bGwgPT0gc3RkOjpjbGFtcChBPHVuc2lnbmVkIGxvbmcgbG9uZz46 OmEsIDJ1bGwsIDR1bGwpICk7CisgIFZFUklGWSggMnVsbCA9PSBzdGQ6OmNs YW1wKEE8dW5zaWduZWQgbG9uZyBsb25nPjo6YSwgMXVsbCwgMnVsbCkgKTsK KyAgVkVSSUZZKCA0dWxsID09IHN0ZDo6Y2xhbXAoQTx1bnNpZ25lZCBsb25n IGxvbmc+OjphLCA0dWxsLCA2dWxsKSApOworI2VuZGlmCisKKyAgVkVSSUZZ KCAoc2hvcnQpMyA9PSBzdGQ6OmNsYW1wKEE8c2hvcnQ+OjphLCAoc2hvcnQp MiwgKHNob3J0KTQpICk7CisgIFZFUklGWSggKHNob3J0KTIgPT0gc3RkOjpj bGFtcChBPHNob3J0Pjo6YSwgKHNob3J0KTEsIChzaG9ydCkyKSApOworICBW RVJJRlkoIChzaG9ydCk0ID09IHN0ZDo6Y2xhbXAoQTxzaG9ydD46OmEsIChz aG9ydCk0LCAoc2hvcnQpNikgKTsKKworICBWRVJJRlkoICh1bnNpZ25lZCBz aG9ydCkzID09IHN0ZDo6Y2xhbXAoQTx1bnNpZ25lZCBzaG9ydD46OmEsICh1 bnNpZ25lZCBzaG9ydCkyLCAodW5zaWduZWQgc2hvcnQpNCkgKTsKKyAgVkVS SUZZKCAodW5zaWduZWQgc2hvcnQpMiA9PSBzdGQ6OmNsYW1wKEE8dW5zaWdu ZWQgc2hvcnQ+OjphLCAodW5zaWduZWQgc2hvcnQpMSwgKHVuc2lnbmVkIHNo b3J0KTIpICk7CisgIFZFUklGWSggKHVuc2lnbmVkIHNob3J0KTQgPT0gc3Rk OjpjbGFtcChBPHVuc2lnbmVkIHNob3J0Pjo6YSwgKHVuc2lnbmVkIHNob3J0 KTQsICh1bnNpZ25lZCBzaG9ydCk2KSApOworCisgIFZFUklGWSggKGNoYXIp MyA9PSBzdGQ6OmNsYW1wKEE8Y2hhcj46OmEsIChjaGFyKTIsIChjaGFyKTQp ICk7CisgIFZFUklGWSggKGNoYXIpMiA9PSBzdGQ6OmNsYW1wKEE8Y2hhcj46 OmEsIChjaGFyKTEsIChjaGFyKTIpICk7CisgIFZFUklGWSggKGNoYXIpNCA9 PSBzdGQ6OmNsYW1wKEE8Y2hhcj46OmEsIChjaGFyKTQsIChjaGFyKTYpICk7 CisKKyAgVkVSSUZZKCAoc2lnbmVkIGNoYXIpMyA9PSBzdGQ6OmNsYW1wKEE8 c2lnbmVkIGNoYXI+OjphLCAoc2lnbmVkIGNoYXIpMiwgKHNpZ25lZCBjaGFy KTQpICk7CisgIFZFUklGWSggKHNpZ25lZCBjaGFyKTIgPT0gc3RkOjpjbGFt cChBPHNpZ25lZCBjaGFyPjo6YSwgKHNpZ25lZCBjaGFyKTEsIChzaWduZWQg Y2hhcikyKSApOworICBWRVJJRlkoIChzaWduZWQgY2hhcik0ID09IHN0ZDo6 Y2xhbXAoQTxzaWduZWQgY2hhcj46OmEsIChzaWduZWQgY2hhcik0LCAoc2ln bmVkIGNoYXIpNikgKTsKKworICBWRVJJRlkoICh1bnNpZ25lZCBjaGFyKTMg PT0gc3RkOjpjbGFtcChBPHVuc2lnbmVkIGNoYXI+OjphLCAodW5zaWduZWQg Y2hhcikyLCAodW5zaWduZWQgY2hhcik0KSApOworICBWRVJJRlkoICh1bnNp Z25lZCBjaGFyKTIgPT0gc3RkOjpjbGFtcChBPHVuc2lnbmVkIGNoYXI+Ojph LCAodW5zaWduZWQgY2hhcikxLCAodW5zaWduZWQgY2hhcikyKSApOworICBW RVJJRlkoICh1bnNpZ25lZCBjaGFyKTQgPT0gc3RkOjpjbGFtcChBPHVuc2ln bmVkIGNoYXI+OjphLCAodW5zaWduZWQgY2hhcik0LCAodW5zaWduZWQgY2hh cik2KSApOworCisgIFZFUklGWSggKHdjaGFyX3QpMyA9PSBzdGQ6OmNsYW1w KEE8d2NoYXJfdD46OmEsICh3Y2hhcl90KTIsICh3Y2hhcl90KTQpICk7Cisg IFZFUklGWSggKHdjaGFyX3QpMiA9PSBzdGQ6OmNsYW1wKEE8d2NoYXJfdD46 OmEsICh3Y2hhcl90KTEsICh3Y2hhcl90KTIpICk7CisgIFZFUklGWSggKHdj aGFyX3QpNCA9PSBzdGQ6OmNsYW1wKEE8d2NoYXJfdD46OmEsICh3Y2hhcl90 KTQsICh3Y2hhcl90KTYpICk7CisKKyAgVkVSSUZZKCAzLjAgPT0gc3RkOjpj bGFtcChBPGRvdWJsZT46OmEsIDIuMCwgNC4wKSApOworICBWRVJJRlkoIDIu MCA9PSBzdGQ6OmNsYW1wKEE8ZG91YmxlPjo6YSwgMS4wLCAyLjApICk7Cisg IFZFUklGWSggNC4wID09IHN0ZDo6Y2xhbXAoQTxkb3VibGU+OjphLCA0LjAs IDYuMCkgKTsKKworICBWRVJJRlkoIDMuMGYgPT0gc3RkOjpjbGFtcChBPGZs b2F0Pjo6YSwgMi4wZiwgNC4wZikgKTsKKyAgVkVSSUZZKCAyLjBmID09IHN0 ZDo6Y2xhbXAoQTxmbG9hdD46OmEsIDEuMGYsIDIuMGYpICk7CisgIFZFUklG WSggNC4wZiA9PSBzdGQ6OmNsYW1wKEE8ZmxvYXQ+OjphLCA0LjBmLCA2LjBm KSApOworCisgIFZFUklGWSggMy4wbCA9PSBzdGQ6OmNsYW1wKEE8bG9uZyBk b3VibGU+OjphLCAyLjBsLCA0LjBsKSApOworICBWRVJJRlkoIDIuMGwgPT0g c3RkOjpjbGFtcChBPGxvbmcgZG91YmxlPjo6YSwgMS4wbCwgMi4wbCkgKTsK KyAgVkVSSUZZKCA0LjBsID09IHN0ZDo6Y2xhbXAoQTxsb25nIGRvdWJsZT46 OmEsIDQuMGwsIDYuMGwpICk7Cit9CisKK2ludAorbWFpbigpCit7CisgIHRl c3QwMigpOworICByZXR1cm4gMDsKK30KSW5kZXg6IHRlc3RzdWl0ZS8yNV9h bGdvcml0aG1zL2NsYW1wL2NvbnN0ZXhwci5jYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSB0ZXN0c3VpdGUvMjVfYWxnb3JpdGhtcy9jbGFtcC9jb25z dGV4cHIuY2MJKG5vbmV4aXN0ZW50KQorKysgdGVzdHN1aXRlLzI1X2FsZ29y aXRobXMvY2xhbXAvY29uc3RleHByLmNjCSh3b3JraW5nIGNvcHkpCkBAIC0w LDAgKzEsMjUgQEAKKy8vIHsgZGctb3B0aW9ucyAiLXN0ZD1nbnUrKzE3IiB9 CisvLyB7IGRnLWRvIGNvbXBpbGUgfQorCisvLyBDb3B5cmlnaHQgKEMpIDIw MTYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhp cyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBU aGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkg bGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor Ly8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKy8vIHdpdGggdGhpcyBs aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisv LyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyNpbmNsdWRl IDxhbGdvcml0aG0+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKworc3RhdGlj X2Fzc2VydChzdGQ6OmNsYW1wKDIsIDAsIDEpID09IDEsICIiKTsKK3N0YXRp Y19hc3NlcnQoc3RkOjpjbGFtcCgyLCAwLCAxLCBzdGQ6OmdyZWF0ZXI8aW50 PigpKSA9PSAwLCAiIik7CkluZGV4OiB0ZXN0c3VpdGUvMjVfYWxnb3JpdGht cy9jbGFtcC9yZXF1aXJlbWVudHMvZXhwbGljaXRfaW5zdGFudGlhdGlvbi8x LmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRlc3RzdWl0ZS8yNV9h bGdvcml0aG1zL2NsYW1wL3JlcXVpcmVtZW50cy9leHBsaWNpdF9pbnN0YW50 aWF0aW9uLzEuY2MJKG5vbmV4aXN0ZW50KQorKysgdGVzdHN1aXRlLzI1X2Fs Z29yaXRobXMvY2xhbXAvcmVxdWlyZW1lbnRzL2V4cGxpY2l0X2luc3RhbnRp YXRpb24vMS5jYwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisv LyB7IGRnLW9wdGlvbnMgIi1zdGQ9Z251KysxNyIgfQorLy8geyBkZy1kbyBj b21waWxlIH0KKworLy8gQ29weXJpZ2h0IChDKSAyMDE2IEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlz IGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUK Ky8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g Mywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24u CisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo ZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgor I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8dGVzdHN1aXRlX2Fw aS5oPgorCituYW1lc3BhY2Ugc3RkCit7CisgIHVzaW5nIF9fZ251X3Rlc3Q6 Ok5vbkRlZmF1bHRDb25zdHJ1Y3RpYmxlOworCisgIHR5cGVkZWYgTm9uRGVm YXVsdENvbnN0cnVjdGlibGUJdmFsdWVfdHlwZTsKKyAgdHlwZWRlZiB2YWx1 ZV90eXBlKgkJCWl0ZXJhdG9yX3R5cGU7CisgIHR5cGVkZWYgc3RkOjpsZXNz PHZhbHVlX3R5cGU+CQljb21wYXJlX3R5cGU7CisKKyAgdGVtcGxhdGUgY29u c3QgdmFsdWVfdHlwZSYgY2xhbXAoY29uc3QgdmFsdWVfdHlwZSYsCisJCQkJ ICAgY29uc3QgdmFsdWVfdHlwZSYsIGNvbnN0IHZhbHVlX3R5cGUmKTsKKyAg dGVtcGxhdGUgY29uc3QgdmFsdWVfdHlwZSYgY2xhbXAoY29uc3QgdmFsdWVf dHlwZSYsCisJCQkJICAgY29uc3QgdmFsdWVfdHlwZSYsIGNvbnN0IHZhbHVl X3R5cGUmLAorCQkJCSAgIGNvbXBhcmVfdHlwZSk7Cit9CkluZGV4OiB0ZXN0 c3VpdGUvMjVfYWxnb3JpdGhtcy9jbGFtcC9yZXF1aXJlbWVudHMvZXhwbGlj aXRfaW5zdGFudGlhdGlvbi9wb2QuY2MKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gdGVzdHN1aXRlLzI1X2FsZ29yaXRobXMvY2xhbXAvcmVxdWlyZW1l bnRzL2V4cGxpY2l0X2luc3RhbnRpYXRpb24vcG9kLmNjCShub25leGlzdGVu dCkKKysrIHRlc3RzdWl0ZS8yNV9hbGdvcml0aG1zL2NsYW1wL3JlcXVpcmVt ZW50cy9leHBsaWNpdF9pbnN0YW50aWF0aW9uL3BvZC5jYwkod29ya2luZyBj b3B5KQpAQCAtMCwwICsxLDM4IEBACisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9 Z251KysxNyIgfQorLy8geyBkZy1kbyBjb21waWxlIH0KKworLy8gQ29weXJp Z2h0IChDKSAyMDE2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor Ly8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBM aWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVy IHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9u KQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFyeSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3 aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYg bm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgor CisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8dGVzdHN1aXRl X2NoYXJhY3Rlci5oPgorCituYW1lc3BhY2Ugc3RkCit7CisgIHVzaW5nIF9f Z251X3Rlc3Q6OnBvZF9pbnQ7CisKKyAgdHlwZWRlZiBwb2RfaW50IAkJdmFs dWVfdHlwZTsKKyAgdHlwZWRlZiB2YWx1ZV90eXBlKiAJCWl0ZXJhdG9yX3R5 cGU7CisgIHR5cGVkZWYgc3RkOjpsZXNzPHZhbHVlX3R5cGU+IGNvbXBhcmVf dHlwZTsKKworICB0ZW1wbGF0ZSBjb25zdCB2YWx1ZV90eXBlJiBjbGFtcChj b25zdCB2YWx1ZV90eXBlJiwKKwkJCQkgICBjb25zdCB2YWx1ZV90eXBlJiwg Y29uc3QgdmFsdWVfdHlwZSYpOworICB0ZW1wbGF0ZSBjb25zdCB2YWx1ZV90 eXBlJiBjbGFtcChjb25zdCB2YWx1ZV90eXBlJiwKKwkJCQkgICBjb25zdCB2 YWx1ZV90eXBlJiwgY29uc3QgdmFsdWVfdHlwZSYsCisJCQkJICAgY29tcGFy ZV90eXBlKTsKK30K --------------070303090407010901080504--