Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1ho4Dx-0006Yc-5t for pgsql-interfaces@arkaria.postgresql.org; Thu, 18 Jul 2019 11:05:21 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1ho4Dv-0006pv-VC for pgsql-interfaces@arkaria.postgresql.org; Thu, 18 Jul 2019 11:05:19 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1ho4Dv-0006oa-Kv for pgsql-interfaces@lists.postgresql.org; Thu, 18 Jul 2019 11:05:19 +0000 Received: from mail-yw1-xc42.google.com ([2607:f8b0:4864:20::c42]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1ho4Ds-0005Cm-Mq; Thu, 18 Jul 2019 11:05:19 +0000 Received: by mail-yw1-xc42.google.com with SMTP id u141so12041339ywe.4; Thu, 18 Jul 2019 04:05:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to:cc; bh=KlwArK6Af6YWBk7AHC24lrxRLX0uAloO0Dn41xpWTG8=; b=FcLvf0Ls8klcT/ZhssOYbsAAYIeo5HLJVFcPj53nHo5EVtEJoI4L0yi55t3wmuJ69A oh58GuTk+gcIz0iXm0ndd/mRONNVftM4YX89Do6VmYGkQPHiPTLfWZPeSpqRh+9QBGHU OhYzrFacwqNQA22xgKx2TGzHe68nKr+UvFxb2vnk6E48366JNDCExxfngiAf7Y+lzXfE yAkMrxbZRBfzNEq4crMBIZLrUziRTn/xYXg2v2BdcBw0BQq17wC1Ck4BE5NMnRbsyarP by2ShFh48OFXeLaU+dDE8OuKq79ZKgDbuymOZnh7JcfhcfCfgYw+/G599qGezV8MAsfO 2VFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to:cc; bh=KlwArK6Af6YWBk7AHC24lrxRLX0uAloO0Dn41xpWTG8=; b=bqGooNJ5nsURtAscGjcx6zH3IzYlLVOv62bkEp3T8LP1nbgQvektlgbLGM8VKukxn2 ER3oXH4VFyPO846Bpng967BKZl3VvFS0BqhjuJFXJUo+9lovpHObl5sfcG+FtZ5aC8Yv unntwV+81qIpk4+cyisA5uGhsiRzVrWLNXAQujlS3HtKJ6mOv6pB5S0sx2prgISQRwfg aQt6XVmNnmhPaPUTGxxGh1sEZe7VfRG9Pj9A1THpTRhtRY/o5kAIxG12H5z0o+ipBe2a SjCI6TJQ2cuV67yQBip+DPW/Um1lpkAEtidbDDchMZBAYx7ethmD9z+3JLJeVqcn4pkT kuUQ== X-Gm-Message-State: APjAAAWUBzdOjwD7XdViLyLxZx3Ld3XU0QCfRkDUwtUlt5OOtA4Lrr3r ul6uGliWRVqMsaewLkrQO+pjmaysUY53toWZRgyCdXoL X-Google-Smtp-Source: APXvYqypM5PTlLbNHXYSujKSEgBGBPLxvhkcaUs8JOCD5Z0yftAKmhHJCJBxXGvQz8wjjFSCdEL4KcW0GXxF2BNCchQ= X-Received: by 2002:a81:990a:: with SMTP id q10mr25580339ywg.385.1563447913541; Thu, 18 Jul 2019 04:05:13 -0700 (PDT) MIME-Version: 1.0 From: Ashutosh Sharma Date: Thu, 18 Jul 2019 16:35:02 +0530 Message-ID: Subject: Support for CALL statement in ecpg To: pgsql-interfaces@postgresql.org Cc: Michael Meskes , Peter Eisentraut , peter_e@gmx.net Content-Type: multipart/mixed; boundary="0000000000008358c2058df295aa" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --0000000000008358c2058df295aa Content-Type: text/plain; charset="UTF-8" Hi All, In the current code for ecpg, we can't use CALL statement to call stored procedures. The attached patch adds the support for it. With the attached patch, we can now have the following SQL statement in ecpg application to call the stored procedures with IN or INOUT params. EXEC SQL CALL SP1(:hv1, :hv2); Additionally, we can also use indicator variables along with the arguments of stored procedure with CALL statement like shown below: EXEC SQL CALL SP1(:hv1 :ind1, :hv2, :ind2); The patch also adds some basic test-cases to verify if CALL statement in ecpg can be used to call stored procedures with different type of parameters. Please have a look and let me know your thoughts. Thank you. -- With Regards, Ashutosh Sharma EnterpriseDB:http://www.enterprisedb.com --0000000000008358c2058df295aa Content-Type: text/x-patch; charset="US-ASCII"; name="v1-support-for-CALL-stmt-ecpg.patch" Content-Disposition: attachment; filename="v1-support-for-CALL-stmt-ecpg.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jy8k6u8j0 ZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvcHJlcHJvYy9lY3BnLmFkZG9ucyBiL3Ny Yy9pbnRlcmZhY2VzL2VjcGcvcHJlcHJvYy9lY3BnLmFkZG9ucwppbmRleCA0ZTMwMzc1Li5mYjI0 ZjIzIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9lY3BnL3ByZXByb2MvZWNwZy5hZGRvbnMK KysrIGIvc3JjL2ludGVyZmFjZXMvZWNwZy9wcmVwcm9jL2VjcGcuYWRkb25zCkBAIC01NTUsMyAr NTU1LDE5IEBAIEVDUEc6IGxpbWl0X2NsYXVzZUxJTUlUc2VsZWN0X2xpbWl0X3ZhbHVlJywnc2Vs ZWN0X29mZnNldF92YWx1ZSBibG9jawogCX0KIEVDUEc6IFNpZ25lZEljb25zdEljb25zdCBydWxl CiAJfCBjaXZhcgl7ICQkID0gJDE7IH0KK0VDUEc6IENhbGxTdG10Q0FMTGZ1bmNfYXBwbGljYXRp b24KKwl7CisJCXN0cnVjdCBhcmd1bWVudHMgKnAgPSBhcmdzaW5zZXJ0OworCisJCSQkID0gY2F0 X3N0cigyLG1tX3N0cmR1cCgiY2FsbCIpLCQyKTsKKworCQkvKgorCQkgKiBDb3B5IGlucHV0IGFy Z3VtZW50cyB0byB0aGUgcmVzdWx0IGFyZ3VtZW50cyBsaXN0IHNvIHRoYXQgYWxsIHRoZQorCQkg KiBob3N0IHZhcmlhYmxlcyBnZXRzIHRyZWF0ZWQgYXMgSU5PVVQgcGFyYW1zLgorCQkgKi8KKwkJ d2hpbGUgKHAgIT0gTlVMTCkKKwkJeworCQkJYWRkX3ZhcmlhYmxlX3RvX3RhaWwoJmFyZ3NyZXN1 bHQsIHAtPnZhcmlhYmxlLCBwLT5pbmRpY2F0b3IpOworCQkJcCA9IHAtPm5leHQ7CisJCX0KKwl9 CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZWNwZ19zY2hlZHVsZSBiL3Ny Yy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9lY3BnX3NjaGVkdWxlCmluZGV4IGUwMzRjNWEuLjdlNmI1 YzcgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9lY3BnX3NjaGVkdWxlCisr KyBiL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9lY3BnX3NjaGVkdWxlCkBAIC0zMyw2ICszMyw3 IEBAIHRlc3Q6IHByZXByb2Mvd2hlbmV2ZXJfZG9fY29udGludWUKIHRlc3Q6IHNxbC9hcnJheQog dGVzdDogc3FsL2JpbmFyeQogdGVzdDogc3FsL2J5dGVhCit0ZXN0OiBzcWwvY2FsbAogdGVzdDog c3FsL2NvZGUxMDAKIHRlc3Q6IHNxbC9jb3B5c3Rkb3V0CiB0ZXN0OiBzcWwvY3JlYXRldGFibGVh cwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L2V4cGVjdGVkL3NxbC1jYWxs LmMgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZXhwZWN0ZWQvc3FsLWNhbGwuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODBjMWVlCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L2V4cGVjdGVkL3NxbC1jYWxsLmMKQEAgLTAsMCArMSwy MzEgQEAKKy8qIFByb2Nlc3NlZCBieSBlY3BnIChyZWdyZXNzaW9uIG1vZGUpICovCisvKiBUaGVz ZSBpbmNsdWRlIGZpbGVzIGFyZSBhZGRlZCBieSB0aGUgcHJlcHJvY2Vzc29yICovCisjaW5jbHVk ZSA8ZWNwZ2xpYi5oPgorI2luY2x1ZGUgPGVjcGdlcnJuby5oPgorI2luY2x1ZGUgPHNxbGNhLmg+ CisvKiBFbmQgb2YgYXV0b21hdGljIGluY2x1ZGUgc2VjdGlvbiAqLworI2RlZmluZSBFQ1BHZGVi dWcoWCxZKSBFQ1BHZGVidWcoKFgpKzEwMCwoWSkpCisKKyNsaW5lIDEgImNhbGwucGdjIgorI2lu Y2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKworI2xpbmUgMSAic3FsY2Eu aCIKKyNpZm5kZWYgUE9TVEdSRVNfU1FMQ0FfSAorI2RlZmluZSBQT1NUR1JFU19TUUxDQV9ICisK KyNpZm5kZWYgUEdETExJTVBPUlQKKyNpZiAgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfX0NZ R1dJTl9fKQorI2RlZmluZSBQR0RMTElNUE9SVCBfX2RlY2xzcGVjIChkbGxpbXBvcnQpCisjZWxz ZQorI2RlZmluZSBQR0RMTElNUE9SVAorI2VuZGlmCQkJCQkJCS8qIF9fQ1lHV0lOX18gKi8KKyNl bmRpZgkJCQkJCQkvKiBQR0RMTElNUE9SVCAqLworCisjZGVmaW5lIFNRTEVSUk1DX0xFTgkxNTAK KworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworc3RydWN0IHNx bGNhX3QKK3sKKwljaGFyCQlzcWxjYWlkWzhdOworCWxvbmcJCXNxbGFiYzsKKwlsb25nCQlzcWxj b2RlOworCXN0cnVjdAorCXsKKwkJaW50CQkJc3FsZXJybWw7CisJCWNoYXIJCXNxbGVycm1jW1NR TEVSUk1DX0xFTl07CisJfQkJCXNxbGVycm07CisJY2hhcgkJc3FsZXJycFs4XTsKKwlsb25nCQlz cWxlcnJkWzZdOworCS8qIEVsZW1lbnQgMDogZW1wdHkJCQkJCQkqLworCS8qIDE6IE9JRCBvZiBw cm9jZXNzZWQgdHVwbGUgaWYgYXBwbGljYWJsZQkJCSovCisJLyogMjogbnVtYmVyIG9mIHJvd3Mg cHJvY2Vzc2VkCQkJCSovCisJLyogYWZ0ZXIgYW4gSU5TRVJULCBVUERBVEUgb3IJCQkJKi8KKwkv KiBERUxFVEUgc3RhdGVtZW50CQkJCQkqLworCS8qIDM6IGVtcHR5CQkJCQkJKi8KKwkvKiA0OiBl bXB0eQkJCQkJCSovCisJLyogNTogZW1wdHkJCQkJCQkqLworCWNoYXIJCXNxbHdhcm5bOF07CisJ LyogRWxlbWVudCAwOiBzZXQgdG8gJ1cnIGlmIGF0IGxlYXN0IG9uZSBvdGhlciBpcyAnVycJKi8K KwkvKiAxOiBpZiAnVycgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBzdHJpbmcJCSovCisJLyogdmFs dWUgd2FzIHRydW5jYXRlZCB3aGVuIGl0IHdhcwkJCSovCisJLyogc3RvcmVkIGludG8gYSBob3N0 IHZhcmlhYmxlLiAgICAgICAgICAgICAqLworCisJLyoKKwkgKiAyOiBpZiAnVycgYSAoaG9wZWZ1 bGx5KSBub24tZmF0YWwgbm90aWNlIG9jY3VycmVkCisJICovCS8qIDM6IGVtcHR5ICovCisJLyog NDogZW1wdHkJCQkJCQkqLworCS8qIDU6IGVtcHR5CQkJCQkJKi8KKwkvKiA2OiBlbXB0eQkJCQkJ CSovCisJLyogNzogZW1wdHkJCQkJCQkqLworCisJY2hhcgkJc3Fsc3RhdGVbNV07Cit9OworCitz dHJ1Y3Qgc3FsY2FfdCAqRUNQR2dldF9zcWxjYSh2b2lkKTsKKworI2lmbmRlZiBQT1NUR1JFU19F Q1BHX0lOVEVSTkFMCisjZGVmaW5lIHNxbGNhICgqRUNQR2dldF9zcWxjYSgpKQorI2VuZGlmCisK KyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgorCisjbGluZSA0ICJjYWxs LnBnYyIKKworCisjbGluZSAxICJyZWdyZXNzaW9uLmgiCisKKworCisKKworCisjbGluZSA1ICJj YWxsLnBnYyIKKworCitpbnQKK21haW4odm9pZCkKK3sKKyAgIC8qIGV4ZWMgc3FsIGJlZ2luIGRl Y2xhcmUgc2VjdGlvbiAqLworICAgICAgICAKKyAgICAgICAgCisgICAgICAgIAorICAgICAgICAK KyAgIAorI2xpbmUgMTEgImNhbGwucGdjIgorIGludCBodjEgPSAxMCA7CisgCisjbGluZSAxMiAi Y2FsbC5wZ2MiCisgaW50IGh2MiA9IDIwIDsKKyAKKyNsaW5lIDEzICJjYWxsLnBnYyIKKyBpbnQg aW5kMSA9IDAgOworIAorI2xpbmUgMTQgImNhbGwucGdjIgorIGludCBpbmQyID0gMCA7CisvKiBl eGVjIHNxbCBlbmQgZGVjbGFyZSBzZWN0aW9uICovCisjbGluZSAxNSAiY2FsbC5wZ2MiCisKKwor ICAgLyogZXhlYyBzcWwgd2hlbmV2ZXIgc3FsZXJyb3IgIGRvIHNxbHByaW50ICggKSA7ICovCisj bGluZSAxNyAiY2FsbC5wZ2MiCisKKyAgIHsgRUNQR2Nvbm5lY3QoX19MSU5FX18sIDAsICJlY3Bn MV9yZWdyZXNzaW9uIiAsIE5VTEwsIE5VTEwgLCBOVUxMLCAwKTsgCisjbGluZSAxOCAiY2FsbC5w Z2MiCisKK2lmIChzcWxjYS5zcWxjb2RlIDwgMCkgc3FscHJpbnQgKCApO30KKyNsaW5lIDE4ICJj YWxsLnBnYyIKKzsKKworICAgLyogU3RhcnQgYSBuZXcgdHJhbnNhY3Rpb24uICovCisgICB7IEVD UEd0cmFucyhfX0xJTkVfXywgTlVMTCwgImJlZ2luIHRyYW5zYWN0aW9uIik7CisjbGluZSAyMSAi Y2FsbC5wZ2MiCisKK2lmIChzcWxjYS5zcWxjb2RlIDwgMCkgc3FscHJpbnQgKCApO30KKyNsaW5l IDIxICJjYWxsLnBnYyIKKworCisgICAvKiBDcmVhdGUgdGVzdCB0YWJsZXMuICovCisgICB7IEVD UEdkbyhfX0xJTkVfXywgMCwgMSwgTlVMTCwgMCwgRUNQR3N0X25vcm1hbCwgImNyZWF0ZSB0YWJs ZSB0MSAoIGEgaW50ICwgYiBpbnQgKSIsIEVDUEd0X0VPSVQsIEVDUEd0X0VPUlQpOworI2xpbmUg MjQgImNhbGwucGdjIgorCitpZiAoc3FsY2Euc3FsY29kZSA8IDApIHNxbHByaW50ICggKTt9Cisj bGluZSAyNCAiY2FsbC5wZ2MiCisKKyAgIHsgRUNQR2RvKF9fTElORV9fLCAwLCAxLCBOVUxMLCAw LCBFQ1BHc3Rfbm9ybWFsLCAiY3JlYXRlIHRhYmxlIHQyICggYSBpbnQgLCBiIGludCApIiwgRUNQ R3RfRU9JVCwgRUNQR3RfRU9SVCk7CisjbGluZSAyNSAiY2FsbC5wZ2MiCisKK2lmIChzcWxjYS5z cWxjb2RlIDwgMCkgc3FscHJpbnQgKCApO30KKyNsaW5lIDI1ICJjYWxsLnBnYyIKKworCisgICAv KiBJbnNlcnQgc29tZSBkYXRhIGludG8gdGVzdCB0YWJsZXMgY3JlYXRlZCBhYm92ZS4gKi8KKyAg IHsgRUNQR2RvKF9fTElORV9fLCAwLCAxLCBOVUxMLCAwLCBFQ1BHc3Rfbm9ybWFsLCAiaW5zZXJ0 IGludG8gdDEgdmFsdWVzICggMTAgLCAxMDAgKSAsICggMzAgLCAzMDAgKSAsICggNTAgLCA1MDAg KSIsIEVDUEd0X0VPSVQsIEVDUEd0X0VPUlQpOworI2xpbmUgMjggImNhbGwucGdjIgorCitpZiAo c3FsY2Euc3FsY29kZSA8IDApIHNxbHByaW50ICggKTt9CisjbGluZSAyOCAiY2FsbC5wZ2MiCisK KyAgIHsgRUNQR2RvKF9fTElORV9fLCAwLCAxLCBOVUxMLCAwLCBFQ1BHc3Rfbm9ybWFsLCAiaW5z ZXJ0IGludG8gdDIgdmFsdWVzICggMjAgLCAyMDAgKSAsICggNDAgLCA0MDAgKSAsICggNjAgLCA2 MDAgKSIsIEVDUEd0X0VPSVQsIEVDUEd0X0VPUlQpOworI2xpbmUgMjkgImNhbGwucGdjIgorCitp ZiAoc3FsY2Euc3FsY29kZSA8IDApIHNxbHByaW50ICggKTt9CisjbGluZSAyOSAiY2FsbC5wZ2Mi CisKKworICAgLyogQ3JlYXRlIHN0b3JlZCBwcm9jZWR1cmUgd2l0aCBJTk9VVCBwYXJhbXMuICov CisgICB7IEVDUEdkbyhfX0xJTkVfXywgMCwgMSwgTlVMTCwgMCwgRUNQR3N0X25vcm1hbCwgImNy ZWF0ZSBvciByZXBsYWNlIHByb2NlZHVyZSBzcDEgKCBpbm91dCB2MSBpbnQgLCBpbm91dCB2MiBp bnQgKSBhcyAkJFwKKyAgICAgYmVnaW5cCisgICAgIHYxIDo9IChzZWxlY3QgYiBmcm9tIHQxIHdo ZXJlIGEgPSB2MSk7XAorICAgICB2MiA6PSAoc2VsZWN0IGIgZnJvbSB0MiB3aGVyZSBhID0gdjIp O1wKKyAgICAgZW5kOyAkJCBsYW5ndWFnZSBwbHBnc3FsIiwgRUNQR3RfRU9JVCwgRUNQR3RfRU9S VCk7CisjbGluZSAzOCAiY2FsbC5wZ2MiCisKK2lmIChzcWxjYS5zcWxjb2RlIDwgMCkgc3FscHJp bnQgKCApO30KKyNsaW5lIDM4ICJjYWxsLnBnYyIKKworCisgICAvKiBDYWxsIHN0b3JlZCBwcm9j ZWR1cmUxIGFuZCBwcmludCBpdCdzIG91dHB1dC4gKi8KKyAgIHsgRUNQR2RvKF9fTElORV9fLCAw LCAxLCBOVUxMLCAwLCBFQ1BHc3Rfbm9ybWFsLCAiY2FsbCBzcDEgKCAkMSAgLCAkMiAgKSIsIAor CUVDUEd0X2ludCwmKGh2MSksKGxvbmcpMSwobG9uZykxLHNpemVvZihpbnQpLCAKKwlFQ1BHdF9O T19JTkRJQ0FUT1IsIE5VTEwgLCAwTCwgMEwsIDBMLCAKKwlFQ1BHdF9pbnQsJihodjIpLChsb25n KTEsKGxvbmcpMSxzaXplb2YoaW50KSwgCisJRUNQR3RfTk9fSU5ESUNBVE9SLCBOVUxMICwgMEws IDBMLCAwTCwgRUNQR3RfRU9JVCwgCisJRUNQR3RfaW50LCYoaHYxKSwobG9uZykxLChsb25nKTEs c2l6ZW9mKGludCksIAorCUVDUEd0X05PX0lORElDQVRPUiwgTlVMTCAsIDBMLCAwTCwgMEwsIAor CUVDUEd0X2ludCwmKGh2MiksKGxvbmcpMSwobG9uZykxLHNpemVvZihpbnQpLCAKKwlFQ1BHdF9O T19JTkRJQ0FUT1IsIE5VTEwgLCAwTCwgMEwsIDBMLCBFQ1BHdF9FT1JUKTsKKyNsaW5lIDQxICJj YWxsLnBnYyIKKworaWYgKHNxbGNhLnNxbGNvZGUgPCAwKSBzcWxwcmludCAoICk7fQorI2xpbmUg NDEgImNhbGwucGdjIgorCisKKyAgIHByaW50ZigiRmlyc3QgY2FsbCB0byBzdG9yZWQgcHJvY2Vk dXJlIHNwMSB3aXRob3V0IGluZGljYXRvciB2YXJpYWJsZXMuXG5cbiIpOworICAgcHJpbnRmKCJz cDEgb3V0cHV0OiBodjEgPSAlZCwgaHYyID0gJWRcbiIsIGh2MSwgaHYyKTsKKworICAgLyogQ2Fs bCBzdG9yZWQgcHJvY2VkdXJlMSB3aXRoIGluZGljYXRvciB2YXJpYWJsZXMgYW5kIHByaW50IGl0 J3Mgb3V0cHV0LiAqLworICAgeyBFQ1BHZG8oX19MSU5FX18sIDAsIDEsIE5VTEwsIDAsIEVDUEdz dF9ub3JtYWwsICJjYWxsIHNwMSAoICQxICAsICQyICApIiwgCisJRUNQR3RfaW50LCYoaHYxKSwo bG9uZykxLChsb25nKTEsc2l6ZW9mKGludCksIAorCUVDUEd0X2ludCwmKGluZDEpLChsb25nKTEs KGxvbmcpMSxzaXplb2YoaW50KSwgCisJRUNQR3RfaW50LCYoaHYyKSwobG9uZykxLChsb25nKTEs c2l6ZW9mKGludCksIAorCUVDUEd0X2ludCwmKGluZDIpLChsb25nKTEsKGxvbmcpMSxzaXplb2Yo aW50KSwgRUNQR3RfRU9JVCwgCisJRUNQR3RfaW50LCYoaHYxKSwobG9uZykxLChsb25nKTEsc2l6 ZW9mKGludCksIAorCUVDUEd0X2ludCwmKGluZDEpLChsb25nKTEsKGxvbmcpMSxzaXplb2YoaW50 KSwgCisJRUNQR3RfaW50LCYoaHYyKSwobG9uZykxLChsb25nKTEsc2l6ZW9mKGludCksIAorCUVD UEd0X2ludCwmKGluZDIpLChsb25nKTEsKGxvbmcpMSxzaXplb2YoaW50KSwgRUNQR3RfRU9SVCk7 CisjbGluZSA0NyAiY2FsbC5wZ2MiCisKK2lmIChzcWxjYS5zcWxjb2RlIDwgMCkgc3FscHJpbnQg KCApO30KKyNsaW5lIDQ3ICJjYWxsLnBnYyIKKworCisgICBwcmludGYoIlxuU2Vjb25kIGNhbGwg dG8gc3RvcmVkIHByb2NlZHVyZSBzcDEgdXNpbmcgaW5kaWNhdG9yIHZhcmlhYmxlcy5cbiIpOwor ICAgcHJpbnRmKCJJbmRpY2F0b3IgdmFyaWFibGVzIGluZDEgYW5kIGluZDIgbXVzdCBob2xkIG5l Z2F0aXZlIHZhbHVlcyBpbmRpY2F0aW5nIHRoYXQgc2VydmVyIHJldHVybmVkIE5VTEwgdmFsdWVz IHRoaXMgdGltZS5cblxuIik7CisgICBwcmludGYoInNwMSBvdXRwdXQ6IGh2MSA9ICVkIGluZDEg PSAlZCwgaHYyID0gJWQgaW5kMiA9ICVkXG4iLCBodjEsIGluZDEsIGh2MiwgaW5kMik7CisKKyAg IHsgRUNQR3RyYW5zKF9fTElORV9fLCBOVUxMLCAicm9sbGJhY2siKTsKKyNsaW5lIDUzICJjYWxs LnBnYyIKKworaWYgKHNxbGNhLnNxbGNvZGUgPCAwKSBzcWxwcmludCAoICk7fQorI2xpbmUgNTMg ImNhbGwucGdjIgorCisKKyAgIHsgRUNQR2Rpc2Nvbm5lY3QoX19MSU5FX18sICJDVVJSRU5UIik7 CisjbGluZSA1NSAiY2FsbC5wZ2MiCisKK2lmIChzcWxjYS5zcWxjb2RlIDwgMCkgc3FscHJpbnQg KCApO30KKyNsaW5lIDU1ICJjYWxsLnBnYyIKKworCisgICByZXR1cm4gMDsKK30KZGlmZiAtLWdp dCBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9leHBlY3RlZC9zcWwtY2FsbC5zdGRlcnIgYi9z cmMvaW50ZXJmYWNlcy9lY3BnL3Rlc3QvZXhwZWN0ZWQvc3FsLWNhbGwuc3RkZXJyCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKZGlmZiAtLWdpdCBhL3NyYy9pbnRl cmZhY2VzL2VjcGcvdGVzdC9leHBlY3RlZC9zcWwtY2FsbC5zdGRvdXQgYi9zcmMvaW50ZXJmYWNl cy9lY3BnL3Rlc3QvZXhwZWN0ZWQvc3FsLWNhbGwuc3Rkb3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjM5MWE1N2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW50ZXJmYWNl cy9lY3BnL3Rlc3QvZXhwZWN0ZWQvc3FsLWNhbGwuc3Rkb3V0CkBAIC0wLDAgKzEsOCBAQAorRmly c3QgY2FsbCB0byBzdG9yZWQgcHJvY2VkdXJlIHNwMSB3aXRob3V0IGluZGljYXRvciB2YXJpYWJs ZXMuCisKK3NwMSBvdXRwdXQ6IGh2MSA9IDEwMCwgaHYyID0gMjAwCisKK1NlY29uZCBjYWxsIHRv IHN0b3JlZCBwcm9jZWR1cmUgc3AxIHVzaW5nIGluZGljYXRvciB2YXJpYWJsZXMuCitJbmRpY2F0 b3IgdmFyaWFibGVzIGluZDEgYW5kIGluZDIgbXVzdCBob2xkIG5lZ2F0aXZlIHZhbHVlcyBpbmRp Y2F0aW5nIHRoYXQgc2VydmVyIHJldHVybmVkIE5VTEwgdmFsdWVzIHRoaXMgdGltZS4KKworc3Ax IG91dHB1dDogaHYxID0gMTAwIGluZDEgPSAtMSwgaHYyID0gMjAwIGluZDIgPSAtMQpkaWZmIC0t Z2l0IGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9NYWtlZmlsZSBiL3NyYy9pbnRlcmZh Y2VzL2VjcGcvdGVzdC9zcWwvTWFrZWZpbGUKaW5kZXggODc2Y2E4ZC4uMzgxNjlmNCAxMDA2NDQK LS0tIGEvc3JjL2ludGVyZmFjZXMvZWNwZy90ZXN0L3NxbC9NYWtlZmlsZQorKysgYi9zcmMvaW50 ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL01ha2VmaWxlCkBAIC0yOCw3ICsyOCw4IEBAIFRFU1RTID0g YXJyYXkgYXJyYXkuYyBcCiAgICAgICAgIGluc3VwZCBpbnN1cGQuYyBcCiAJCWRlY2xhcmUgZGVj bGFyZS5jIFwKIAkJYnl0ZWEgYnl0ZWEuYyBcCi0JCXByZXBhcmVhcyBwcmVwYXJlYXMuYworCQlw cmVwYXJlYXMgcHJlcGFyZWFzLmMgXAorCQljYWxsIGNhbGwuYwogCiBhbGw6ICQoVEVTVFMpCiAK ZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvdGVzdC9zcWwvY2FsbC5wZ2MgYi9zcmMv aW50ZXJmYWNlcy9lY3BnL3Rlc3Qvc3FsL2NhbGwucGdjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjA3ZGMyMmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW50ZXJmYWNlcy9l Y3BnL3Rlc3Qvc3FsL2NhbGwucGdjCkBAIC0wLDAgKzEsNTggQEAKKyNpbmNsdWRlIDxzdGRpby5o PgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitleGVjIHNxbCBpbmNsdWRlIHNxbGNhOworZXhlYyBz cWwgaW5jbHVkZSAuLi9yZWdyZXNzaW9uOworCitpbnQKK21haW4odm9pZCkKK3sKKyAgIGV4ZWMg c3FsIGJlZ2luIGRlY2xhcmUgc2VjdGlvbjsKKyAgICAgaW50IGh2MSA9IDEwOworICAgICBpbnQg aHYyID0gMjA7CisgICAgIGludCBpbmQxID0gMDsKKyAgICAgaW50IGluZDIgPSAwOworICAgZXhl YyBzcWwgZW5kIGRlY2xhcmUgc2VjdGlvbjsKKworICAgZXhlYyBzcWwgd2hlbmV2ZXIgc3FsZXJy b3IgZG8gc3FscHJpbnQoKTsKKyAgIGV4ZWMgc3FsIGNvbm5lY3QgdG8gUkVHUkVTU0RCMTs7CisK KyAgIC8qIFN0YXJ0IGEgbmV3IHRyYW5zYWN0aW9uLiAqLworICAgZXhlYyBzcWwgYmVnaW4gdHJh bnNhY3Rpb247CisKKyAgIC8qIENyZWF0ZSB0ZXN0IHRhYmxlcy4gKi8KKyAgIGV4ZWMgc3FsIGNy ZWF0ZSB0YWJsZSB0MShhIGludCwgYiBpbnQpOworICAgZXhlYyBzcWwgY3JlYXRlIHRhYmxlIHQy KGEgaW50LCBiIGludCk7CisKKyAgIC8qIEluc2VydCBzb21lIGRhdGEgaW50byB0ZXN0IHRhYmxl cyBjcmVhdGVkIGFib3ZlLiAqLworICAgZXhlYyBzcWwgaW5zZXJ0IGludG8gdDEgdmFsdWVzICgx MCwgMTAwKSwgKDMwLCAzMDApLCAoNTAsIDUwMCk7CisgICBleGVjIHNxbCBpbnNlcnQgaW50byB0 MiB2YWx1ZXMgKDIwLCAyMDApLCAoNDAsIDQwMCksICg2MCwgNjAwKTsKKworICAgLyogQ3JlYXRl IHN0b3JlZCBwcm9jZWR1cmUgd2l0aCBJTk9VVCBwYXJhbXMuICovCisgICBleGVjIHNxbCBjcmVh dGUgb3IgcmVwbGFjZSBwcm9jZWR1cmUgc3AxKElOT1VUIHYxIGludCwgSU5PVVQgdjIgaW50KQor ICAgICBhcyAkJAorICAgICBiZWdpbgorICAgICB2MSA6PSAoc2VsZWN0IGIgZnJvbSB0MSB3aGVy ZSBhID0gdjEpOworICAgICB2MiA6PSAoc2VsZWN0IGIgZnJvbSB0MiB3aGVyZSBhID0gdjIpOwor ICAgICBlbmQ7ICQkCisgICAgIGxhbmd1YWdlIHBscGdzcWw7CisKKyAgIC8qIENhbGwgc3RvcmVk IHByb2NlZHVyZTEgYW5kIHByaW50IGl0J3Mgb3V0cHV0LiAqLworICAgZXhlYyBzcWwgY2FsbCBz cDEoOmh2MSwgOmh2Mik7CisKKyAgIHByaW50ZigiRmlyc3QgY2FsbCB0byBzdG9yZWQgcHJvY2Vk dXJlIHNwMSB3aXRob3V0IGluZGljYXRvciB2YXJpYWJsZXMuXG5cbiIpOworICAgcHJpbnRmKCJz cDEgb3V0cHV0OiBodjEgPSAlZCwgaHYyID0gJWRcbiIsIGh2MSwgaHYyKTsKKworICAgLyogQ2Fs bCBzdG9yZWQgcHJvY2VkdXJlMSB3aXRoIGluZGljYXRvciB2YXJpYWJsZXMgYW5kIHByaW50IGl0 J3Mgb3V0cHV0LiAqLworICAgZXhlYyBzcWwgY2FsbCBzcDEoOmh2MSA6aW5kMSwgOmh2MiA6aW5k Mik7CisKKyAgIHByaW50ZigiXG5TZWNvbmQgY2FsbCB0byBzdG9yZWQgcHJvY2VkdXJlIHNwMSB1 c2luZyBpbmRpY2F0b3IgdmFyaWFibGVzLlxuIik7CisgICBwcmludGYoIkluZGljYXRvciB2YXJp YWJsZXMgaW5kMSBhbmQgaW5kMiBtdXN0IGhvbGQgbmVnYXRpdmUgdmFsdWVzIGluZGljYXRpbmcg dGhhdCBzZXJ2ZXIgcmV0dXJuZWQgTlVMTCB2YWx1ZXMgdGhpcyB0aW1lLlxuXG4iKTsKKyAgIHBy aW50Zigic3AxIG91dHB1dDogaHYxID0gJWQgaW5kMSA9ICVkLCBodjIgPSAlZCBpbmQyID0gJWRc biIsIGh2MSwgaW5kMSwgaHYyLCBpbmQyKTsKKworICAgZXhlYyBzcWwgcm9sbGJhY2s7CisKKyAg IGV4ZWMgc3FsIGRpc2Nvbm5lY3Q7CisKKyAgIHJldHVybiAwOworfQo= --0000000000008358c2058df295aa--