Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uBYUl-003KnZ-2V for pgsql-hackers@arkaria.postgresql.org; Sun, 04 May 2025 12:30:59 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uBYUj-000T0X-Ju for pgsql-hackers@arkaria.postgresql.org; Sun, 04 May 2025 12:30:57 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uBYUi-000T0P-UR for pgsql-hackers@lists.postgresql.org; Sun, 04 May 2025 12:30:57 +0000 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uBYUg-0006Y6-1E for pgsql-hackers@lists.postgresql.org; Sun, 04 May 2025 12:30:56 +0000 Received: by mail-pf1-x42d.google.com with SMTP id d2e1a72fcca58-7394945d37eso2931923b3a.3 for ; Sun, 04 May 2025 05:30:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746361854; x=1746966654; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=4S0YNUoenyJiCXi8ADptdkko5C6nbTYNqZWRZTgvc10=; b=TXEOwMUykvwINOqMYu2W+D3jrGw1CfILsquzWKMtYxFNaiErGZbsxLMp+gVZuP2r0N 8vZN5s+i645DcbSWAui70kk81lbDAwL74mvfJzZ/fNHfAtdTLz92NxNAR9AVETgOipMO 98OwIn6bmY1KCgODYKy/DhkoSSYNTtbjvrkGYmUf/qom3Tq/fzGe5aCDV0rXex3CTLr6 ZEDLYH3drclV6M0dtXphr4l4zcIo5NuqylME3+6HSvhED31U4TcnbXjYZhXWtwjycV0j lUDVSDFsg9sOTC9izpSAHlOpA0lMv5rpKJPVJqL7Mj/4qwWWttgak16E6xw7c5xVbVPY pSRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746361854; x=1746966654; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=4S0YNUoenyJiCXi8ADptdkko5C6nbTYNqZWRZTgvc10=; b=ekqePckTs3gDitXxHatkAMLdsiUt6bPDGT88c0j6valt40umM1K+/BEmFg2h38uxWa 9feoT64JspBYKcnzf467Sd5YEkUJ9Ww1O8MdG/2lnUI+7Ooco/lQAWaA7IQcyb9TR09V tWgDRlbYdShii/1HURvKwj/ocqYlTSoDaRP3kKkbOEcPsflN1CvZ+gdRz5YfBBHhThyZ b8Tb9IHUdjr7ITVhhGoc+7UeSSBw0BbddWJ69MsuodDFyMnkBrUJHK7ER+zqqyznkHEm 5Md8edvt1cggWXmjjNyQI9/7bu/veEIzi5uvdyltq60JxW7ZqBimjjA1X61Rw/eQqgUN Xp5g== X-Forwarded-Encrypted: i=1; AJvYcCWV6NCt6v+xcyeA+F9lPAYX5W/HyQ6LQsrsMZs40B8WMWGtEEyRR99brbLJwTzQoGyLqiGQNGjjFjWhOR4g@lists.postgresql.org X-Gm-Message-State: AOJu0YzNoGw3a8psg/WLpFS169rfLwnnIAEuIC/7zXvn4/RFkVXrfmL3 inV33ucH2GAPVk68z+0aMY/MAb6BHsVaJJJsJ1CkeSLzqSWlbpAGnuN4GeADAFg2P/QjMeyZzMn cZqhXJZR9O0ybNrkONs/up+iZYlY= X-Gm-Gg: ASbGncsfhzef8kEV8+2kN3PppSy+v1YIRdbW2gtnAwyEoGnZca+8aD+6qPvAL5C2ccH tINygM8IRCo4zSCFEMtOcQQPOfqfhr/8fPsyq8PJ++w6Hlj2lqKrT3kXJlRtTS+pvPJvfpaefpc oHNuLTl9qer6vSn4nR0zNBDu8sk+mki7BnjQoCwQCm2O2L3b2PRkmyrZWp X-Google-Smtp-Source: AGHT+IFUVfWkdFhabuzAvB7R2n/fk+nZh1Q1HR8wKV11TdqFL/6rrSEF5TgSKzUCE1GyD6CGIeKyGAmtWmlL9XQ98aA= X-Received: by 2002:a17:90b:5147:b0:2ee:e113:815d with SMTP id 98e67ed59e1d1-30a6198d023mr6212597a91.8.1746361853918; Sun, 04 May 2025 05:30:53 -0700 (PDT) MIME-Version: 1.0 References: <3660951.1741016970@sss.pgh.pa.us> In-Reply-To: From: Etsuro Fujita Date: Sun, 4 May 2025 21:30:42 +0900 X-Gm-Features: ATxdqUH7WZeXbu6zSvlASRlrlGYM-3Xp6AKn3aexPFRgZBwKybaNMa1yeL9wL5w Message-ID: Subject: =?UTF-8?Q?Re=3A_Options_to_control_remote_transactions=E2=80=99_access?= =?UTF-8?Q?=2Fdeferrable_modes_in_postgres=5Ffdw?= To: Ashutosh Bapat Cc: Tom Lane , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000f3e73106344e8d77" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f3e73106344e8d77 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Mar 30, 2025 at 7:14=E2=80=AFPM Etsuro Fujita wrote: > On Thu, Mar 27, 2025 at 1:25=E2=80=AFPM Ashutosh Bapat > wrote: > > On Tue, Mar 25, 2025 at 4:01=E2=80=AFPM Etsuro Fujita wrote: > > > In the patch I also fixed a bug; I trusted XactReadOnly to see if the > > > local transaction is READ ONLY, but I noticed that that is not 100% > > > correct, because a transaction which started as READ WRITE can show a= s > > > READ ONLY later within subtransactions, so I modified the patch so > > > that postgres_fdw opens remote transactions in READ ONLY mode if the > > > local transaction has been declared READ ONLY at the top level. > > > > Nice catch. postgres_fdw replicates the transaction stack on foreign > > server. I think we need to replicate it along with the transaction > > properties. And also we need a test which tests readonly > > subtransaction behaviour. > > Ok, will do. I noticed that we don=E2=80=99t need to replicate it. As read-only subtransactions can=E2=80=99t change to read-write, and a read-only main-transaction can=E2=80=99t change to read-write after first snapshot, either (note: begin_remote_xact is called after it), all we need to do is track the nesting level of the outermost read-only transaction in the local transaction and control the access mode of remote transactions based on it so that they have the same access mode as the local transaction at each subtransaction level, like the attached. This makes the patch pretty simple. I added the tests in the patch. What do you think about that? Best regards, Etsuro Fujita --000000000000f3e73106344e8d77 Content-Type: application/octet-stream; name="Inherit-xact-properties-in-postgres-fdw-v3.patch" Content-Disposition: attachment; filename="Inherit-xact-properties-in-postgres-fdw-v3.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ma9mnplz0 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYyBiL2NvbnRyaWIv cG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYwppbmRleCA5ZmE3ZjdlOTVjZC4uNjdhZmFiMmU0NTYg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYworKysgYi9jb250 cmliL3Bvc3RncmVzX2Zkdy9jb25uZWN0aW9uLmMKQEAgLTU4LDYgKzU4LDcgQEAgdHlwZWRlZiBz dHJ1Y3QgQ29ubkNhY2hlRW50cnkKIAkvKiBSZW1haW5pbmcgZmllbGRzIGFyZSBpbnZhbGlkIHdo ZW4gY29ubiBpcyBOVUxMOiAqLwogCWludAkJCXhhY3RfZGVwdGg7CQkvKiAwID0gbm8geGFjdCBv cGVuLCAxID0gbWFpbiB4YWN0IG9wZW4sIDIgPQogCQkJCQkJCQkgKiBvbmUgbGV2ZWwgb2Ygc3Vi eGFjdCBvcGVuLCBldGMgKi8KKwlib29sCQl4YWN0X3JlYWRfb25seTsgLyogeGFjdCByL28gc3Rh dGUgKi8KIAlib29sCQloYXZlX3ByZXBfc3RtdDsgLyogaGF2ZSB3ZSBwcmVwYXJlZCBhbnkgc3Rt dHMgaW4gdGhpcyB4YWN0PyAqLwogCWJvb2wJCWhhdmVfZXJyb3I7CQkvKiBoYXZlIGFueSBzdWJ4 YWN0cyBhYm9ydGVkIGluIHRoaXMgeGFjdD8gKi8KIAlib29sCQljaGFuZ2luZ194YWN0X3N0YXRl OwkvKiB4YWN0IHN0YXRlIGNoYW5nZSBpbiBwcm9jZXNzICovCkBAIC04NCw2ICs4NSwxMiBAQCBz dGF0aWMgdW5zaWduZWQgaW50IHByZXBfc3RtdF9udW1iZXIgPSAwOwogLyogdHJhY2tzIHdoZXRo ZXIgYW55IHdvcmsgaXMgbmVlZGVkIGluIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwogc3RhdGljIGJv b2wgeGFjdF9nb3RfY29ubmVjdGlvbiA9IGZhbHNlOwogCisvKgorICogdHJhY2tzIHRoZSBuZXN0 aW5nIGxldmVsIG9mIHRoZSB0b3Btb3N0IHJlYWQtb25seSB0cmFuc2FjdGlvbiBkZXRlcm1pbmVk CisgKiBieSBHZXRUb3BSZWFkT25seVRyYW5zYWN0aW9uTmVzdExldmVsKCkKKyAqLworc3RhdGlj IGludCB0b3BfcmVhZF9vbmx5X2xldmVsID0gMDsKKwogLyogY3VzdG9tIHdhaXQgZXZlbnQgdmFs dWVzLCByZXRyaWV2ZWQgZnJvbSBzaGFyZWQgbWVtb3J5ICovCiBzdGF0aWMgdWludDMyIHBnZmR3 X3dlX2NsZWFudXBfcmVzdWx0ID0gMDsKIHN0YXRpYyB1aW50MzIgcGdmZHdfd2VfY29ubmVjdCA9 IDA7CkBAIC0zNzIsNiArMzc5LDcgQEAgbWFrZV9uZXdfY29ubmVjdGlvbihDb25uQ2FjaGVFbnRy eSAqZW50cnksIFVzZXJNYXBwaW5nICp1c2VyKQogCiAJLyogUmVzZXQgYWxsIHRyYW5zaWVudCBz dGF0ZSBmaWVsZHMsIHRvIGJlIHN1cmUgYWxsIGFyZSBjbGVhbiAqLwogCWVudHJ5LT54YWN0X2Rl cHRoID0gMDsKKwllbnRyeS0+eGFjdF9yZWFkX29ubHkgPSBmYWxzZTsKIAllbnRyeS0+aGF2ZV9w cmVwX3N0bXQgPSBmYWxzZTsKIAllbnRyeS0+aGF2ZV9lcnJvciA9IGZhbHNlOwogCWVudHJ5LT5j aGFuZ2luZ194YWN0X3N0YXRlID0gZmFsc2U7CkBAIC04NDMsMjkgKzg1MSw4MCBAQCBkb19zcWxf Y29tbWFuZF9lbmQoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpzcWwsIGJvb2wgY29uc3VtZV9p bnB1dCkKICAqIHRob3NlIHNjYW5zLiAgQSBkaXNhZHZhbnRhZ2UgaXMgdGhhdCB3ZSBjYW4ndCBw cm92aWRlIHNhbmUgZW11bGF0aW9uIG9mCiAgKiBSRUFEIENPTU1JVFRFRCBiZWhhdmlvciAtLS0g aXQgd291bGQgYmUgbmljZSBpZiB3ZSBoYWQgc29tZSBvdGhlciB3YXkgdG8KICAqIGNvbnRyb2wg d2hpY2ggcmVtb3RlIHF1ZXJpZXMgc2hhcmUgYSBzbmFwc2hvdC4KKyAqCisgKiBOb3RlIGFsc28g dGhhdCB3ZSBhbHdheXMgc3RhcnQgdGhlIHJlbW90ZSB0cmFuc2FjdGlvbiB3aXRoIHRoZSBzYW1l CisgKiByZWFkL3dyaXRlIGFuZCBkZWZlcnJhYmxlIHByb3BlcnRpZXMgYXMgdGhlIGxvY2FsIHRy YW5zYWN0aW9uLCBhbmQgc3RhcnQKKyAqIHRoZSByZW1vdGUgc3VidHJhbnNhY3Rpb24gd2l0aCB0 aGUgc2FtZSByZWFkL3dyaXRlIHByb3BlcnR5IGFzIHRoZSBsb2NhbAorICogc3VidHJhbnNhY3Rp b24uCiAgKi8KIHN0YXRpYyB2b2lkCiBiZWdpbl9yZW1vdGVfeGFjdChDb25uQ2FjaGVFbnRyeSAq ZW50cnkpCiB7CiAJaW50CQkJY3VybGV2ZWwgPSBHZXRDdXJyZW50VHJhbnNhY3Rpb25OZXN0TGV2 ZWwoKTsKIAotCS8qIFN0YXJ0IG1haW4gdHJhbnNhY3Rpb24gaWYgd2UgaGF2ZW4ndCB5ZXQgKi8K KwkvKgorCSAqIFNldCB0aGUgbmVzdGluZyBsZXZlbCBvZiB0aGUgdG9wbW9zdCByZWFkLW9ubHkg dHJhbnNhY3Rpb24gaWYgdGhlCisJICogY3VycmVudCB0cmFuc2FjdGlvbiBpcyByZWFkLW9ubHkg YW5kIHdlIGhhdmVuJ3QgeWV0LiAgT25jZSBpdCdzIHNldCwKKwkgKiBpdCdzIHJldGFpbmVkIHVu dGlsIHRoYXQgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkL2Fib3J0ZWQuCisJICovCisJaWYgKFhh Y3RSZWFkT25seSkKKwl7CisJCWlmICh0b3BfcmVhZF9vbmx5X2xldmVsID09IDApCisJCQl0b3Bf cmVhZF9vbmx5X2xldmVsID0gR2V0VG9wUmVhZE9ubHlUcmFuc2FjdGlvbk5lc3RMZXZlbCgpOwor CQlBc3NlcnQodG9wX3JlYWRfb25seV9sZXZlbCA+IDApOworCX0KKwllbHNlCisJCUFzc2VydCh0 b3BfcmVhZF9vbmx5X2xldmVsID09IDApOworCisJLyoKKwkgKiBTdGFydCBtYWluIHRyYW5zYWN0 aW9uIGlmIHdlIGhhdmVuJ3QgeWV0OyBvdGhlcndpc2UsIGNoYW5nZSB0aGUKKwkgKiBhbHJlYWR5 LXN0YXJ0ZWQgcmVtb3RlIHRyYW5zYWN0aW9uL3N1YnRyYW5zYWN0aW9uIHRvIHJlYWQtb25seSBp ZiB0aGUKKwkgKiBsb2NhbCB0cmFuc2FjdGlvbi9zdWJ0cmFuc2FjdGlvbiBoYXZlIGJlZW4gZG9u ZSBzbyBhZnRlciBzdGFydGluZyB0aGVtCisJICogYW5kIHdlIGhhdmVuJ3QgeWV0LgorCSAqLwog CWlmIChlbnRyeS0+eGFjdF9kZXB0aCA8PSAwKQogCXsKLQkJY29uc3QgY2hhciAqc3FsOworCQlT dHJpbmdJbmZvRGF0YSBzcWw7CisJCWJvb2wJCXJvID0gKHRvcF9yZWFkX29ubHlfbGV2ZWwgPT0g MSk7CiAKIAkJZWxvZyhERUJVRzMsICJzdGFydGluZyByZW1vdGUgdHJhbnNhY3Rpb24gb24gY29u bmVjdGlvbiAlcCIsCiAJCQkgZW50cnktPmNvbm4pOwogCisJCWluaXRTdHJpbmdJbmZvKCZzcWwp OworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZzcWwsICJTVEFSVCBUUkFOU0FDVElPTiBJU09M QVRJT04gTEVWRUwgIik7CiAJCWlmIChJc29sYXRpb25Jc1NlcmlhbGl6YWJsZSgpKQotCQkJc3Fs ID0gIlNUQVJUIFRSQU5TQUNUSU9OIElTT0xBVElPTiBMRVZFTCBTRVJJQUxJWkFCTEUiOworCQkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZygmc3FsLCAiU0VSSUFMSVpBQkxFIik7CiAJCWVsc2UKLQkJ CXNxbCA9ICJTVEFSVCBUUkFOU0FDVElPTiBJU09MQVRJT04gTEVWRUwgUkVQRUFUQUJMRSBSRUFE IjsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnNxbCwgIlJFUEVBVEFCTEUgUkVBRCIpOwor CQlpZiAocm8pCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZzcWwsICIgUkVBRCBPTkxZIik7 CisJCWlmIChYYWN0RGVmZXJyYWJsZSkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnNxbCwg IiBERUZFUlJBQkxFIik7CiAJCWVudHJ5LT5jaGFuZ2luZ194YWN0X3N0YXRlID0gdHJ1ZTsKLQkJ ZG9fc3FsX2NvbW1hbmQoZW50cnktPmNvbm4sIHNxbCk7CisJCWRvX3NxbF9jb21tYW5kKGVudHJ5 LT5jb25uLCBzcWwuZGF0YSk7CiAJCWVudHJ5LT54YWN0X2RlcHRoID0gMTsKKwkJaWYgKHJvKQor CQl7CisJCQlBc3NlcnQoIWVudHJ5LT54YWN0X3JlYWRfb25seSk7CisJCQllbnRyeS0+eGFjdF9y ZWFkX29ubHkgPSB0cnVlOworCQl9CiAJCWVudHJ5LT5jaGFuZ2luZ194YWN0X3N0YXRlID0gZmFs c2U7CiAJfQorCWVsc2UgaWYgKCFlbnRyeS0+eGFjdF9yZWFkX29ubHkpCisJeworCQlBc3NlcnQo dG9wX3JlYWRfb25seV9sZXZlbCA9PSAwIHx8CisJCQkgICBlbnRyeS0+eGFjdF9kZXB0aCA8PSB0 b3BfcmVhZF9vbmx5X2xldmVsKTsKKwkJaWYgKGVudHJ5LT54YWN0X2RlcHRoID09IHRvcF9yZWFk X29ubHlfbGV2ZWwpCisJCXsKKwkJCWVudHJ5LT5jaGFuZ2luZ194YWN0X3N0YXRlID0gdHJ1ZTsK KwkJCWRvX3NxbF9jb21tYW5kKGVudHJ5LT5jb25uLCAiU0VUIHRyYW5zYWN0aW9uX3JlYWRfb25s eSA9IG9uIik7CisJCQllbnRyeS0+eGFjdF9yZWFkX29ubHkgPSB0cnVlOworCQkJZW50cnktPmNo YW5naW5nX3hhY3Rfc3RhdGUgPSBmYWxzZTsKKwkJfQorCX0KKwllbHNlCisJCUFzc2VydCh0b3Bf cmVhZF9vbmx5X2xldmVsID4gMCAmJgorCQkJICAgZW50cnktPnhhY3RfZGVwdGggPj0gdG9wX3Jl YWRfb25seV9sZXZlbCk7CiAKIAkvKgogCSAqIElmIHdlJ3JlIGluIGEgc3VidHJhbnNhY3Rpb24s IHN0YWNrIHVwIHNhdmVwb2ludHMgdG8gbWF0Y2ggb3VyIGxldmVsLgpAQCAtODc0LDEyICs5MzMs MjEgQEAgYmVnaW5fcmVtb3RlX3hhY3QoQ29ubkNhY2hlRW50cnkgKmVudHJ5KQogCSAqLwogCXdo aWxlIChlbnRyeS0+eGFjdF9kZXB0aCA8IGN1cmxldmVsKQogCXsKLQkJY2hhcgkJc3FsWzY0XTsK KwkJU3RyaW5nSW5mb0RhdGEgc3FsOworCQlib29sCQlybyA9IChlbnRyeS0+eGFjdF9kZXB0aCAr IDEgPT0gdG9wX3JlYWRfb25seV9sZXZlbCk7CiAKLQkJc25wcmludGYoc3FsLCBzaXplb2Yoc3Fs KSwgIlNBVkVQT0lOVCBzJWQiLCBlbnRyeS0+eGFjdF9kZXB0aCArIDEpOworCQlpbml0U3RyaW5n SW5mbygmc3FsKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmc3FsLCAiU0FWRVBPSU5UIHMlZCIsIGVu dHJ5LT54YWN0X2RlcHRoICsgMSk7CisJCWlmIChybykKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJnNxbCwgIjsgU0VUIHRyYW5zYWN0aW9uX3JlYWRfb25seSA9IG9uIik7CiAJCWVudHJ5LT5j aGFuZ2luZ194YWN0X3N0YXRlID0gdHJ1ZTsKLQkJZG9fc3FsX2NvbW1hbmQoZW50cnktPmNvbm4s IHNxbCk7CisJCWRvX3NxbF9jb21tYW5kKGVudHJ5LT5jb25uLCBzcWwuZGF0YSk7CiAJCWVudHJ5 LT54YWN0X2RlcHRoKys7CisJCWlmIChybykKKwkJeworCQkJQXNzZXJ0KCFlbnRyeS0+eGFjdF9y ZWFkX29ubHkpOworCQkJZW50cnktPnhhY3RfcmVhZF9vbmx5ID0gdHJ1ZTsKKwkJfQogCQllbnRy eS0+Y2hhbmdpbmdfeGFjdF9zdGF0ZSA9IGZhbHNlOwogCX0KIH0KQEAgLTExNzQsNiArMTI0Miw5 IEBAIHBnZmR3X3hhY3RfY2FsbGJhY2soWGFjdEV2ZW50IGV2ZW50LCB2b2lkICphcmcpCiAKIAkv KiBBbHNvIHJlc2V0IGN1cnNvciBudW1iZXJpbmcgZm9yIG5leHQgdHJhbnNhY3Rpb24gKi8KIAlj dXJzb3JfbnVtYmVyID0gMDsKKworCS8qIExpa2V3aXNlIGZvciB0b3BfcmVhZF9vbmx5X2xldmVs ICovCisJdG9wX3JlYWRfb25seV9sZXZlbCA9IDA7CiB9CiAKIC8qCkBAIC0xMjcyLDYgKzEzNDMs MTAgQEAgcGdmZHdfc3VieGFjdF9jYWxsYmFjayhTdWJYYWN0RXZlbnQgZXZlbnQsIFN1YlRyYW5z YWN0aW9uSWQgbXlTdWJpZCwKIAkJCQkJCQkJCSAgIGZhbHNlKTsKIAkJfQogCX0KKworCS8qIElm IGluIHRoZSB0b3Btb3N0IHJlYWQtb25seSB0cmFuc2FjdGlvbiwgcmVzZXQgdG9wX3JlYWRfb25s eV9sZXZlbCAqLworCWlmIChjdXJsZXZlbCA9PSB0b3BfcmVhZF9vbmx5X2xldmVsKQorCQl0b3Bf cmVhZF9vbmx5X2xldmVsID0gMDsKIH0KIAogLyoKQEAgLTEzNzQsNiArMTQ0OSw5IEBAIHBnZmR3 X3Jlc2V0X3hhY3Rfc3RhdGUoQ29ubkNhY2hlRW50cnkgKmVudHJ5LCBib29sIHRvcGxldmVsKQog CQkvKiBSZXNldCBzdGF0ZSB0byBzaG93IHdlJ3JlIG91dCBvZiBhIHRyYW5zYWN0aW9uICovCiAJ CWVudHJ5LT54YWN0X2RlcHRoID0gMDsKIAorCQkvKiBSZXNldCB4YWN0IHIvbyBzdGF0ZSAqLwor CQllbnRyeS0+eGFjdF9yZWFkX29ubHkgPSBmYWxzZTsKKwogCQkvKgogCQkgKiBJZiB0aGUgY29u bmVjdGlvbiBpc24ndCBpbiBhIGdvb2QgaWRsZSBzdGF0ZSwgaXQgaXMgbWFya2VkIGFzCiAJCSAq IGludmFsaWQgb3Iga2VlcF9jb25uZWN0aW9ucyBvcHRpb24gb2YgaXRzIHNlcnZlciBpcyBkaXNh YmxlZCwgdGhlbgpAQCAtMTM5NCw2ICsxNDcyLDEzIEBAIHBnZmR3X3Jlc2V0X3hhY3Rfc3RhdGUo Q29ubkNhY2hlRW50cnkgKmVudHJ5LCBib29sIHRvcGxldmVsKQogCXsKIAkJLyogUmVzZXQgc3Rh dGUgdG8gc2hvdyB3ZSdyZSBvdXQgb2YgYSBzdWJ0cmFuc2FjdGlvbiAqLwogCQllbnRyeS0+eGFj dF9kZXB0aC0tOworCisJCS8qIElmIGluIHRoZSB0b3Btb3N0IHJlYWQtb25seSB0cmFuc2FjdGlv biwgcmVzZXQgeGFjdCByL28gc3RhdGUgKi8KKwkJaWYgKGVudHJ5LT54YWN0X2RlcHRoICsgMSA9 PSB0b3BfcmVhZF9vbmx5X2xldmVsKQorCQl7CisJCQlBc3NlcnQoZW50cnktPnhhY3RfcmVhZF9v bmx5KTsKKwkJCWVudHJ5LT54YWN0X3JlYWRfb25seSA9IGZhbHNlOworCQl9CiAJfQogfQogCmRp ZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0 IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAppbmRleCAy NGZmNWY3MGNjZS4uZTVkNDRkYTlmYjUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3 L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhw ZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dApAQCAtMTIzMjAsNiArMTIzMjAsMTA4IEBAIFNFTEVDVCBj b3VudCgqKSBGUk9NIHJlbW90ZV9hcHBsaWNhdGlvbl9uYW1lCiBEUk9QIEZPUkVJR04gVEFCTEUg cmVtb3RlX2FwcGxpY2F0aW9uX25hbWU7CiBEUk9QIFZJRVcgbXlfYXBwbGljYXRpb25fbmFtZTsK IC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKy0tIHRlc3QgcmVhZC1vbmx5IGFuZC9vciBkZWZlcnJhYmxlIHRyYW5z YWN0aW9ucworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorQ1JFQVRFIFRBQkxFIGxvY3QgKGYxIGludCwgZjIgdGV4 dCk7CitDUkVBVEUgRlVOQ1RJT04gbG9jZigpIFJFVFVSTlMgU0VUT0YgbG9jdCBMQU5HVUFHRSBT UUwgQVMKKyAgJ1VQREFURSBwdWJsaWMubG9jdCBTRVQgZjIgPSBmMiB8fCBmMiBSRVRVUk5JTkcg Kic7CitDUkVBVEUgVklFVyBsb2N2IEFTIFNFTEVDVCB0LiogRlJPTSBsb2NmKCkgdDsKK0NSRUFU RSBGT1JFSUdOIFRBQkxFIHJlbXQgKGYxIGludCwgZjIgdGV4dCkKKyAgU0VSVkVSIGxvb3BiYWNr IE9QVElPTlMgKHRhYmxlX25hbWUgJ2xvY3YnKTsKK0lOU0VSVCBJTlRPIGxvY3QgVkFMVUVTICgx LCAnZm9vJyksICgyLCAnYmFyJyk7CitTVEFSVCBUUkFOU0FDVElPTiBSRUFEIE9OTFk7CitTQVZF UE9JTlQgczsKK1NFTEVDVCAqIEZST00gcmVtdDsgIC0tIHNob3VsZCBmYWlsCitFUlJPUjogIGNh bm5vdCBleGVjdXRlIFVQREFURSBpbiBhIHJlYWQtb25seSB0cmFuc2FjdGlvbgorQ09OVEVYVDog IFNRTCBmdW5jdGlvbiAibG9jZiIgc3RhdGVtZW50IDEKK3JlbW90ZSBTUUwgY29tbWFuZDogU0VM RUNUIGYxLCBmMiBGUk9NIHB1YmxpYy5sb2N2CitST0xMQkFDSyBUTyBzOworUkVMRUFTRSBTQVZF UE9JTlQgczsKK1NFTEVDVCAqIEZST00gcmVtdDsgIC0tIHNob3VsZCBmYWlsCitFUlJPUjogIGNh bm5vdCBleGVjdXRlIFVQREFURSBpbiBhIHJlYWQtb25seSB0cmFuc2FjdGlvbgorQ09OVEVYVDog IFNRTCBmdW5jdGlvbiAibG9jZiIgc3RhdGVtZW50IDEKK3JlbW90ZSBTUUwgY29tbWFuZDogU0VM RUNUIGYxLCBmMiBGUk9NIHB1YmxpYy5sb2N2CitST0xMQkFDSzsKK1NUQVJUIFRSQU5TQUNUSU9O OworU0FWRVBPSU5UIHM7CitTRVQgdHJhbnNhY3Rpb25fcmVhZF9vbmx5ID0gb247CitTRUxFQ1Qg KiBGUk9NIHJlbXQ7ICAtLSBzaG91bGQgZmFpbAorRVJST1I6ICBjYW5ub3QgZXhlY3V0ZSBVUERB VEUgaW4gYSByZWFkLW9ubHkgdHJhbnNhY3Rpb24KK0NPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gImxv Y2YiIHN0YXRlbWVudCAxCityZW1vdGUgU1FMIGNvbW1hbmQ6IFNFTEVDVCBmMSwgZjIgRlJPTSBw dWJsaWMubG9jdgorUk9MTEJBQ0sgVE8gczsKK1JFTEVBU0UgU0FWRVBPSU5UIHM7CitTRVQgdHJh bnNhY3Rpb25fcmVhZF9vbmx5ID0gb247CitTRUxFQ1QgKiBGUk9NIHJlbXQ7ICAtLSBzaG91bGQg ZmFpbAorRVJST1I6ICBjYW5ub3QgZXhlY3V0ZSBVUERBVEUgaW4gYSByZWFkLW9ubHkgdHJhbnNh Y3Rpb24KK0NPTlRFWFQ6ICBTUUwgZnVuY3Rpb24gImxvY2YiIHN0YXRlbWVudCAxCityZW1vdGUg U1FMIGNvbW1hbmQ6IFNFTEVDVCBmMSwgZjIgRlJPTSBwdWJsaWMubG9jdgorUk9MTEJBQ0s7CitT VEFSVCBUUkFOU0FDVElPTjsKK1NBVkVQT0lOVCBzOworU0VMRUNUICogRlJPTSByZW10OyAgLS0g c2hvdWxkIHdvcmsKKyBmMSB8ICAgZjIgICAKKy0tLS0rLS0tLS0tLS0KKyAgMSB8IGZvb2Zvbwor ICAyIHwgYmFyYmFyCisoMiByb3dzKQorCitTRVQgdHJhbnNhY3Rpb25fcmVhZF9vbmx5ID0gb247 CitTRUxFQ1QgKiBGUk9NIHJlbXQ7ICAtLSBzaG91bGQgZmFpbAorRVJST1I6ICBjYW5ub3QgZXhl Y3V0ZSBVUERBVEUgaW4gYSByZWFkLW9ubHkgdHJhbnNhY3Rpb24KK0NPTlRFWFQ6ICBTUUwgZnVu Y3Rpb24gImxvY2YiIHN0YXRlbWVudCAxCityZW1vdGUgU1FMIGNvbW1hbmQ6IFNFTEVDVCBmMSwg ZjIgRlJPTSBwdWJsaWMubG9jdgorUk9MTEJBQ0sgVE8gczsKK1JFTEVBU0UgU0FWRVBPSU5UIHM7 CitTRUxFQ1QgKiBGUk9NIHJlbXQ7ICAtLSBzaG91bGQgd29yaworIGYxIHwgICBmMiAgIAorLS0t LSstLS0tLS0tLQorICAxIHwgZm9vZm9vCisgIDIgfCBiYXJiYXIKKygyIHJvd3MpCisKK1NFVCB0 cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvbjsKK1NFTEVDVCAqIEZST00gcmVtdDsgIC0tIHNob3Vs ZCBmYWlsCitFUlJPUjogIGNhbm5vdCBleGVjdXRlIFVQREFURSBpbiBhIHJlYWQtb25seSB0cmFu c2FjdGlvbgorQ09OVEVYVDogIFNRTCBmdW5jdGlvbiAibG9jZiIgc3RhdGVtZW50IDEKK3JlbW90 ZSBTUUwgY29tbWFuZDogU0VMRUNUIGYxLCBmMiBGUk9NIHB1YmxpYy5sb2N2CitST0xMQkFDSzsK K0RST1AgRk9SRUlHTiBUQUJMRSByZW10OworQ1JFQVRFIEZPUkVJR04gVEFCTEUgcmVtdCAoZjEg aW50LCBmMiB0ZXh0KQorICBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnbG9j dCcpOworU1RBUlQgVFJBTlNBQ1RJT04gSVNPTEFUSU9OIExFVkVMIFNFUklBTElaQUJMRSBSRUFE IE9OTFk7CitTRUxFQ1QgKiBGUk9NIHJlbXQ7CisgZjEgfCBmMiAgCistLS0tKy0tLS0tCisgIDEg fCBmb28KKyAgMiB8IGJhcgorKDIgcm93cykKKworQ09NTUlUOworU1RBUlQgVFJBTlNBQ1RJT04g SVNPTEFUSU9OIExFVkVMIFNFUklBTElaQUJMRSBERUZFUlJBQkxFOworU0VMRUNUICogRlJPTSBy ZW10OworIGYxIHwgZjIgIAorLS0tLSstLS0tLQorICAxIHwgZm9vCisgIDIgfCBiYXIKKygyIHJv d3MpCisKK0NPTU1JVDsKK1NUQVJUIFRSQU5TQUNUSU9OIElTT0xBVElPTiBMRVZFTCBTRVJJQUxJ WkFCTEUgUkVBRCBPTkxZIERFRkVSUkFCTEU7CitTRUxFQ1QgKiBGUk9NIHJlbXQ7CisgZjEgfCBm MiAgCistLS0tKy0tLS0tCisgIDEgfCBmb28KKyAgMiB8IGJhcgorKDIgcm93cykKKworQ09NTUlU OworLS0gQ2xlYW4gdXAKK0RST1AgRk9SRUlHTiBUQUJMRSByZW10OworRFJPUCBWSUVXIGxvY3Y7 CitEUk9QIEZVTkNUSU9OIGxvY2YoKTsKK0RST1AgVEFCTEUgbG9jdDsKKy0tID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K IC0tIHRlc3QgcGFyYWxsZWwgY29tbWl0IGFuZCBwYXJhbGxlbCBhYm9ydAogLS0gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQogQUxURVIgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKEFERCBwYXJhbGxlbF9jb21taXQgJ3Ry dWUnKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcu c3FsIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKaW5kZXggMWYy NzI2MGJhZmUuLjMyNzM0OTMxYmU1IDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9z cWwvcG9zdGdyZXNfZmR3LnNxbAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdy ZXNfZmR3LnNxbApAQCAtNDE5NSw2ICs0MTk1LDY5IEBAIFNFTEVDVCBjb3VudCgqKSBGUk9NIHJl bW90ZV9hcHBsaWNhdGlvbl9uYW1lCiBEUk9QIEZPUkVJR04gVEFCTEUgcmVtb3RlX2FwcGxpY2F0 aW9uX25hbWU7CiBEUk9QIFZJRVcgbXlfYXBwbGljYXRpb25fbmFtZTsKIAorLS0gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorLS0gdGVzdCByZWFkLW9ubHkgYW5kL29yIGRlZmVycmFibGUgdHJhbnNhY3Rpb25zCistLSA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CitDUkVBVEUgVEFCTEUgbG9jdCAoZjEgaW50LCBmMiB0ZXh0KTsKK0NSRUFURSBG VU5DVElPTiBsb2NmKCkgUkVUVVJOUyBTRVRPRiBsb2N0IExBTkdVQUdFIFNRTCBBUworICAnVVBE QVRFIHB1YmxpYy5sb2N0IFNFVCBmMiA9IGYyIHx8IGYyIFJFVFVSTklORyAqJzsKK0NSRUFURSBW SUVXIGxvY3YgQVMgU0VMRUNUIHQuKiBGUk9NIGxvY2YoKSB0OworQ1JFQVRFIEZPUkVJR04gVEFC TEUgcmVtdCAoZjEgaW50LCBmMiB0ZXh0KQorICBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFi bGVfbmFtZSAnbG9jdicpOworSU5TRVJUIElOVE8gbG9jdCBWQUxVRVMgKDEsICdmb28nKSwgKDIs ICdiYXInKTsKKworU1RBUlQgVFJBTlNBQ1RJT04gUkVBRCBPTkxZOworU0FWRVBPSU5UIHM7CitT RUxFQ1QgKiBGUk9NIHJlbXQ7ICAtLSBzaG91bGQgZmFpbAorUk9MTEJBQ0sgVE8gczsKK1JFTEVB U0UgU0FWRVBPSU5UIHM7CitTRUxFQ1QgKiBGUk9NIHJlbXQ7ICAtLSBzaG91bGQgZmFpbAorUk9M TEJBQ0s7CisKK1NUQVJUIFRSQU5TQUNUSU9OOworU0FWRVBPSU5UIHM7CitTRVQgdHJhbnNhY3Rp b25fcmVhZF9vbmx5ID0gb247CitTRUxFQ1QgKiBGUk9NIHJlbXQ7ICAtLSBzaG91bGQgZmFpbAor Uk9MTEJBQ0sgVE8gczsKK1JFTEVBU0UgU0FWRVBPSU5UIHM7CitTRVQgdHJhbnNhY3Rpb25fcmVh ZF9vbmx5ID0gb247CitTRUxFQ1QgKiBGUk9NIHJlbXQ7ICAtLSBzaG91bGQgZmFpbAorUk9MTEJB Q0s7CisKK1NUQVJUIFRSQU5TQUNUSU9OOworU0FWRVBPSU5UIHM7CitTRUxFQ1QgKiBGUk9NIHJl bXQ7ICAtLSBzaG91bGQgd29yaworU0VUIHRyYW5zYWN0aW9uX3JlYWRfb25seSA9IG9uOworU0VM RUNUICogRlJPTSByZW10OyAgLS0gc2hvdWxkIGZhaWwKK1JPTExCQUNLIFRPIHM7CitSRUxFQVNF IFNBVkVQT0lOVCBzOworU0VMRUNUICogRlJPTSByZW10OyAgLS0gc2hvdWxkIHdvcmsKK1NFVCB0 cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvbjsKK1NFTEVDVCAqIEZST00gcmVtdDsgIC0tIHNob3Vs ZCBmYWlsCitST0xMQkFDSzsKKworRFJPUCBGT1JFSUdOIFRBQkxFIHJlbXQ7CitDUkVBVEUgRk9S RUlHTiBUQUJMRSByZW10IChmMSBpbnQsIGYyIHRleHQpCisgIFNFUlZFUiBsb29wYmFjayBPUFRJ T05TICh0YWJsZV9uYW1lICdsb2N0Jyk7CisKK1NUQVJUIFRSQU5TQUNUSU9OIElTT0xBVElPTiBM RVZFTCBTRVJJQUxJWkFCTEUgUkVBRCBPTkxZOworU0VMRUNUICogRlJPTSByZW10OworQ09NTUlU OworCitTVEFSVCBUUkFOU0FDVElPTiBJU09MQVRJT04gTEVWRUwgU0VSSUFMSVpBQkxFIERFRkVS UkFCTEU7CitTRUxFQ1QgKiBGUk9NIHJlbXQ7CitDT01NSVQ7CisKK1NUQVJUIFRSQU5TQUNUSU9O IElTT0xBVElPTiBMRVZFTCBTRVJJQUxJWkFCTEUgUkVBRCBPTkxZIERFRkVSUkFCTEU7CitTRUxF Q1QgKiBGUk9NIHJlbXQ7CitDT01NSVQ7CisKKy0tIENsZWFuIHVwCitEUk9QIEZPUkVJR04gVEFC TEUgcmVtdDsKK0RST1AgVklFVyBsb2N2OworRFJPUCBGVU5DVElPTiBsb2NmKCk7CitEUk9QIFRB QkxFIGxvY3Q7CisKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tIHRlc3QgcGFyYWxsZWwgY29tbWl0IGFuZCBw YXJhbGxlbCBhYm9ydAogLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3Bv c3RncmVzLWZkdy5zZ21sIGIvZG9jL3NyYy9zZ21sL3Bvc3RncmVzLWZkdy5zZ21sCmluZGV4IDc4 MWEwMTA2N2Y3Li40YzhlZTM4M2M2MyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3Bvc3RncmVz LWZkdy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9wb3N0Z3Jlcy1mZHcuc2dtbApAQCAtMTA3Nyw2 ICsxMDc3LDIxIEBAIHBvc3RncmVzPSMgU0VMRUNUIHBvc3RncmVzX2Zkd19kaXNjb25uZWN0X2Fs bCgpOwogICAgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiByZWxlYXNlIG1p Z2h0IG1vZGlmeSB0aGVzZSBydWxlcy4KICAgPC9wYXJhPgogCisgIDxwYXJhPgorICAgVGhlIHJl bW90ZSB0cmFuc2FjdGlvbiBpcyBvcGVuZWQgaW4gdGhlIHNhbWUgcmVhZC93cml0ZSBtb2RlIGFz IHRoZSBsb2NhbAorICAgdHJhbnNhY3Rpb246IGlmIHRoZSBsb2NhbCB0cmFuc2FjdGlvbiBpcyA8 bGl0ZXJhbD5SRUFEIE9OTFk8L2xpdGVyYWw+LAorICAgdGhlIHJlbW90ZSB0cmFuc2FjdGlvbiBp cyBvcGVuZWQgaW4gPGxpdGVyYWw+UkVBRCBPTkxZPC9saXRlcmFsPiBtb2RlLAorICAgb3RoZXJ3 aXNlIGl0IGlzIG9wZW5lZCBpbiA8bGl0ZXJhbD5SRUFEIFdSSVRFPC9saXRlcmFsPiBtb2RlLgor ICAgKFRoaXMgY29udHJvbCBpcyBhbHNvIGFwcGxpZWQgdG8gcmVtb3RlIGFuZCBsb2NhbCBzdWJ0 cmFuc2FjdGlvbnMuKQorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgcmVtb3RlIHRyYW5z YWN0aW9uIGlzIGFsc28gb3BlbmVkIGluIHRoZSBzYW1lIGRlZmVycmFibGUgbW9kZSBhcyB0aGUK KyAgIGxvY2FsIHRyYW5zYWN0aW9uOiBpZiB0aGUgbG9jYWwgdHJhbnNhY3Rpb24gaXMgPGxpdGVy YWw+REVGRVJSQUJMRTwvbGl0ZXJhbD4sCisgICB0aGUgcmVtb3RlIHRyYW5zYWN0aW9uIGlzIG9w ZW5lZCBpbiA8bGl0ZXJhbD5ERUZFUlJBQkxFPC9saXRlcmFsPiBtb2RlLAorICAgb3RoZXJ3aXNl IGl0IGlzIG9wZW5lZCBpbiA8bGl0ZXJhbD5OT1QgREVGRVJSQUJMRTwvbGl0ZXJhbD4gbW9kZS4K KyAgPC9wYXJhPgorCiAgIDxwYXJhPgogICAgTm90ZSB0aGF0IGl0IGlzIGN1cnJlbnRseSBub3Qg c3VwcG9ydGVkIGJ5CiAgICA8ZmlsZW5hbWU+cG9zdGdyZXNfZmR3PC9maWxlbmFtZT4gdG8gcHJl cGFyZSB0aGUgcmVtb3RlIHRyYW5zYWN0aW9uIGZvcgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5j CmluZGV4IGI4ODU1MTNmNzY1Li4yOTRkMWVlYTIxOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGFjdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hh Y3QuYwpAQCAtMTA0NCw2ICsxMDQ0LDMwIEBAIFRyYW5zYWN0aW9uU3RhcnRlZER1cmluZ1JlY292 ZXJ5KHZvaWQpCiAJcmV0dXJuIEN1cnJlbnRUcmFuc2FjdGlvblN0YXRlLT5zdGFydGVkSW5SZWNv dmVyeTsKIH0KIAorLyoKKyAqCUdldFRvcFJlYWRPbmx5VHJhbnNhY3Rpb25OZXN0TGV2ZWwKKyAq CisgKiBOb3RlOiB0aGlzIHdpbGwgcmV0dXJuIHplcm8gd2hlbiBub3QgaW5zaWRlIGFueSB0cmFu c2FjdGlvbiBvciB3aGVuIG5laXRoZXIKKyAqIGEgdG9wLWxldmVsIHRyYW5zYWN0aW9uIG5vciBz dWJ0cmFuc2FjdGlvbnMgYXJlIHJlYWQtb25seSwgb25lIHdoZW4gdGhlCisgKiB0b3AtbGV2ZWwg dHJhbnNhY3Rpb24gaXMgcmVhZC1vbmx5LCB0d28gd2hlbiBvbmUgbGV2ZWwgb2Ygc3VidHJhbnNh Y3Rpb24gaXMKKyAqIHJlYWQtb25seSwgZXRjLgorICovCitpbnQKK0dldFRvcFJlYWRPbmx5VHJh bnNhY3Rpb25OZXN0TGV2ZWwodm9pZCkKK3sKKwlUcmFuc2FjdGlvblN0YXRlIHMgPSBDdXJyZW50 VHJhbnNhY3Rpb25TdGF0ZTsKKworCWlmICghWGFjdFJlYWRPbmx5KQorCQlyZXR1cm4gMDsKKwl3 aGlsZSAocy0+bmVzdGluZ0xldmVsID4gMSkKKwl7CisJCWlmICghcy0+cHJldlhhY3RSZWFkT25s eSkKKwkJCXJldHVybiBzLT5uZXN0aW5nTGV2ZWw7CisJCXMgPSBzLT5wYXJlbnQ7CisJfQorCXJl dHVybiBzLT5uZXN0aW5nTGV2ZWw7Cit9CisKIC8qCiAgKglFbnRlclBhcmFsbGVsTW9kZQogICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGFjdC5oIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3hhY3QuaAppbmRleCBiMmJjMTBlZTA0MS4uN2YxMWI5MTk3OTkgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy94YWN0LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hhY3QuaApA QCAtNDU4LDYgKzQ1OCw3IEBAIGV4dGVybiBUaW1lc3RhbXBUeiBHZXRDdXJyZW50VHJhbnNhY3Rp b25TdG9wVGltZXN0YW1wKHZvaWQpOwogZXh0ZXJuIHZvaWQgU2V0Q3VycmVudFN0YXRlbWVudFN0 YXJ0VGltZXN0YW1wKHZvaWQpOwogZXh0ZXJuIGludAlHZXRDdXJyZW50VHJhbnNhY3Rpb25OZXN0 TGV2ZWwodm9pZCk7CiBleHRlcm4gYm9vbCBUcmFuc2FjdGlvbklkSXNDdXJyZW50VHJhbnNhY3Rp b25JZChUcmFuc2FjdGlvbklkIHhpZCk7CitleHRlcm4gaW50CUdldFRvcFJlYWRPbmx5VHJhbnNh Y3Rpb25OZXN0TGV2ZWwodm9pZCk7CiBleHRlcm4gdm9pZCBDb21tYW5kQ291bnRlckluY3JlbWVu dCh2b2lkKTsKIGV4dGVybiB2b2lkIEZvcmNlU3luY0NvbW1pdCh2b2lkKTsKIGV4dGVybiB2b2lk IFN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKHZvaWQpOwo= --000000000000f3e73106344e8d77--