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 1rscUc-008CMw-4H for pgsql-hackers@arkaria.postgresql.org; Fri, 05 Apr 2024 05:52:03 +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 1rscUa-002qo7-RE for pgsql-hackers@arkaria.postgresql.org; Fri, 05 Apr 2024 05:52:00 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rscUa-002qmG-Cr for pgsql-hackers@lists.postgresql.org; Fri, 05 Apr 2024 05:52:00 +0000 Received: from mail-lj1-x22a.google.com ([2a00:1450:4864:20::22a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rscUX-000jVi-8H for pgsql-hackers@lists.postgresql.org; Fri, 05 Apr 2024 05:51:59 +0000 Received: by mail-lj1-x22a.google.com with SMTP id 38308e7fff4ca-2d6fc3adaacso21834581fa.2 for ; Thu, 04 Apr 2024 22:51:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1712296316; x=1712901116; 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=Cn4nsLWKawnYDrCS+wib9P7Dc07NGyLL9/wyFCGlb1k=; b=A0uUKorItuvSfgUr/r45dvzKyOM0KAQlTSQv+s38zCl0WaSwUec5nxe2VWvNSo5TE3 8k3R2b+xrt+5uLlZ51M/5ZytlWLuuzT70fYIV8GRKtryyYLOiY1I/ifBnV2EMhlVlrPv L1vt0Cg/8Ow5Weyqv2rm2C4hcZ6dPRP88/iG/wdcGFmIcaVlBERIumpqFsCQF6K8Fh1o LPhNGd+R3ykTHAQQ2qf/cjzDeRMdliVwxxQDnseoYFbp0S5E6hQ6GgeQPmI1kRoluN1q d2G2jNlIMN4Vx67s7YxRP2ODaa6azoJXgwsu5FQ2sgqtfLVSo19RkNHbFXUfPfobmtc+ o9Ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712296316; x=1712901116; 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=Cn4nsLWKawnYDrCS+wib9P7Dc07NGyLL9/wyFCGlb1k=; b=Ce3FzdQysxtrK02TVP4NFwsKirPcjkoKglKWr7Ww/mhflPlfSCJQDM16fSiHnJeBBM WUY31cq9Rueppk2PHuPVQwYmtLFtMP2MX8JXs017T7Pg86783Kub5NisTGGkEZkW/d9z EALUNahwgmqfIus8244Lo8ze9DhqX8inH/RblUQy4HvGRd/AMelRAy82D5V9qSsg27Y+ kkjZV96qscE+0qRpBF2xFki3yhpJpo84RVvWPE45Ql8Ms7QrJlYVTU+WUIupTnulQczA cPzxaTNID+JeBIsmC0e46Ag6rSEnBnOzjQaZ3NYQnIMM0PRszumCVrd00haY+JSXkRyQ HzzA== X-Forwarded-Encrypted: i=1; AJvYcCVfooS1CmrmSt1Nj4Aq4m3UGy+N0lrW0TOkHtl54FmVQ09K5PUf5nwDUivmjtvgXM5IikTsAOWeL08ZDTkRfVZBmlKlxfrESOYMqCvDI13gLjoU X-Gm-Message-State: AOJu0YxhRafMcIuHOUCUy4QUKa/EXwTSvzbM+IFzxTvS6feUZJpmT8Rp J9QemujF78upiBIXowauFESjppBZBfbnZAKIuH7U8JVh2TmUtk27D40xPICKDR08Cie2Z0tsZF7 g1gOeqEzoycYiu+3vQQ7Yu+uIEPw= X-Google-Smtp-Source: AGHT+IH9guVdVcc8XLpf1bjpTQJCPyfy5S5z2KsNi5XxC+XUNqe2cxSmPJEWCOx38+BYo8wNgj0y5TjPP/aG93b0jjE= X-Received: by 2002:a2e:9819:0:b0:2d2:31b0:4f64 with SMTP id a25-20020a2e9819000000b002d231b04f64mr355814ljj.34.1712296315672; Thu, 04 Apr 2024 22:51:55 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Bharath Rupireddy Date: Fri, 5 Apr 2024 11:21:43 +0530 Message-ID: Subject: Re: Introduce XID age and inactive timeout based replication slot invalidation To: Bertrand Drouvot Cc: shveta malik , Masahiko Sawada , Amit Kapila , Nathan Bossart , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000a57c6d0615530d32" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a57c6d0615530d32 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Apr 3, 2024 at 9:57=E2=80=AFPM Bertrand Drouvot wrote: > > > > shouldn't the slot be dropped/recreated instead of updating inactive_= since? > > > > The sync slots that are invalidated on the primary aren't dropped and > > recreated on the standby. > > Yeah, right (I was confused with synced slots that are invalidated locall= y). > > > However, I > > found that the synced slot is acquired and released unnecessarily > > after the invalidation_reason is synced from the primary. I added a > > skip check in synchronize_one_slot to skip acquiring and releasing the > > slot if it's locally found inactive. With this, inactive_since won't > > get updated for invalidated sync slots on the standby as we don't > > acquire and release the slot. > > CR1 =3D=3D=3D > > Yeah, I can see: > > @@ -575,6 +575,13 @@ synchronize_one_slot(RemoteSlot *remote_slot, Oid re= mote_dbid) > " name slot \"%s\" alr= eady exists on the standby", > remote_slot->name)); > > + /* > + * Skip the sync if the local slot is already invalidated= . We do this > + * beforehand to save on slot acquire and release. > + */ > + if (slot->data.invalidated !=3D RS_INVAL_NONE) > + return false; > > Thanks to the drop_local_obsolete_slots() call I think we are not missing= the case > where the slot has been invalidated on the primary, invalidation reason h= as been > synced on the standby and later the slot is dropped/ recreated manually o= n the > primary (then it should be dropped/recreated on the standby too). > > Also it seems we are not missing the case where a sync slot is invalidate= d > locally due to wal removal (it should be dropped/recreated). Right. > > > CR5 =3D=3D=3D > > > > > > + /* > > > + * This function isn't expected to be called for inactive tim= eout based > > > + * invalidation. A separate function InvalidateInactiveReplic= ationSlot is > > > + * to be used for that. > > > > > > Do you think it's worth to explain why? > > > > Hm, I just wanted to point out the actual function here. I modified it > > to something like the following, if others feel we don't need that, I > > can remove it. > > Sorry If I was not clear but I meant to say "Do you think it's worth to e= xplain > why we decided to create a dedicated function"? (currently we "just" expl= ain that > we created one). We added a new function (InvalidateInactiveReplicationSlot) to invalidate slot based on inactive timeout because 1) we do the inactive timeout invalidation at slot level as opposed to InvalidateObsoleteReplicationSlots which does loop over all the slots, 2) InvalidatePossiblyObsoleteSlot does release the lock in some cases, has a lot of unneeded code for inactive timeout invalidation check, 3) we want some control over saving the slot to disk because we hook the inactive timeout invalidation into the loop that checkpoints the slot info to the disk in CheckPointReplicationSlots. I've added a comment atop InvalidateInactiveReplicationSlot. Please find the attached v36 patch. -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --000000000000a57c6d0615530d32 Content-Type: application/octet-stream; name="v36-0001-Add-inactive_timeout-based-replication-slot-inva.patch" Content-Disposition: attachment; filename="v36-0001-Add-inactive_timeout-based-replication-slot-inva.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lum8yshi0 RnJvbSAxNDEwMTM2ZjJkN2E1YjZjZjBiNTJkYmE2M2RlZDk2ZjE3NzA0NmE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IEZyaSwgNSBBcHIgMjAyNCAwNTo0ODoxNCArMDAw MApTdWJqZWN0OiBbUEFUQ0ggdjM2XSBBZGQgaW5hY3RpdmVfdGltZW91dCBiYXNlZCByZXBsaWNh dGlvbiBzbG90IGludmFsaWRhdGlvbi4KClRpbGwgbm93LCBwb3N0Z3JlcyBoYXMgdGhlIGFiaWxp dHkgdG8gaW52YWxpZGF0ZSBpbmFjdGl2ZQpyZXBsaWNhdGlvbiBzbG90cyBiYXNlZCBvbiB0aGUg YW1vdW50IG9mIFdBTCAoc2V0IHZpYQptYXhfc2xvdF93YWxfa2VlcF9zaXplIEdVQykgdGhhdCB3 aWxsIGJlIG5lZWRlZCBmb3IgdGhlIHNsb3RzIGluCmNhc2UgdGhleSBiZWNvbWUgYWN0aXZlLiBI b3dldmVyLCBjaG9vc2luZyBhIGRlZmF1bHQgdmFsdWUgZm9yCm1heF9zbG90X3dhbF9rZWVwX3Np emUgaXMgdHJpY2t5LiBCZWNhdXNlIHRoZSBhbW91bnQgb2YgV0FMIGEKY3VzdG9tZXIgZ2VuZXJh dGVzLCBhbmQgdGhlaXIgYWxsb2NhdGVkIHN0b3JhZ2Ugd2lsbCB2YXJ5IGdyZWF0bHkKaW4gcHJv ZHVjdGlvbiwgbWFraW5nIGl0IGRpZmZpY3VsdCB0byBwaW4gZG93biBhIG9uZS1zaXplLWZpdHMt YWxsCnZhbHVlLiBJdCBpcyBvZnRlbiBlYXN5IGZvciBkZXZlbG9wZXJzIHRvIHNldCBhIHRpbWVv dXQgb2Ygc2F5IDEKb3IgMiBvciAzIGRheXMgYXQgc2xvdCBsZXZlbCwgYWZ0ZXIgd2hpY2ggdGhl IGluYWN0aXZlIHNsb3RzIGdldAppbnZhbGlkYXRlZC4KClRvIGFjaGlldmUgdGhlIGFib3ZlLCBw b3N0Z3JlcyBpbnRyb2R1Y2VzIGEgR1VDIGFsbG93aW5nIHVzZXJzCnNldCBpbmFjdGl2ZSB0aW1l b3V0LiBUaGUgcmVwbGljYXRpb24gc2xvdHMgdGhhdCBhcmUgaW5hY3RpdmUKZm9yIGxvbmdlciB0 aGFuIHNwZWNpZmllZCBhbW91bnQgb2YgdGltZSBnZXQgaW52YWxpZGF0ZWQuCgpUaGUgaW52YWxp ZGF0aW9uIGNoZWNrIGhhcHBlbnMgYXQgdmFyaW91cyBsb2NhdGlvbnMgdG8gaGVscCBiZWluZwph cyBsYXRlc3QgYXMgcG9zc2libGUsIHRoZXNlIGxvY2F0aW9ucyBpbmNsdWRlIHRoZSBmb2xsb3dp bmc6Ci0gV2hlbmV2ZXIgdGhlIHNsb3QgaXMgYWNxdWlyZWQgYW5kIHRoZSBzbG90IGFjcXVpc2l0 aW9uIGVycm9ycwpvdXQgaWYgaW52YWxpZGF0ZWQuCi0gRHVyaW5nIGNoZWNrcG9pbnQKCk5vdGUg dGhhdCB0aGlzIG5ldyBpbnZhbGlkYXRpb24gbWVjaGFuaXNtIHdvbid0IGtpY2staW4gZm9yIHRo ZQpzbG90cyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgc3luY2VkIGZyb20gdGhlIHByaW1hcnkg dG8gdGhlCnN0YW5kYnkuCgpBdXRob3I6IEJoYXJhdGggUnVwaXJlZGR5ClJldmlld2VkLWJ5OiBC ZXJ0cmFuZCBEcm91dm90LCBBbWl0IEthcGlsYSwgU2h2ZXRhIE1hbGlrCkRpc2N1c3Npb246IGh0 dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvQ0FMajJBQ1c0YVVlLV91RlFPamRX Q0VOLXhYb0xHaG12UkZuTDhTTndfVFo1bkplK2F3QG1haWwuZ21haWwuY29tCi0tLQogZG9jL3Ny Yy9zZ21sL2NvbmZpZy5zZ21sICAgICAgICAgICAgICAgICAgICAgIHwgIDMyICsrCiBkb2Mvc3Jj L3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwgICAgICAgICAgICAgICAgfCAgIDcgKwogLi4uL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1bmNzLmMgICAgICAgIHwgICAyICstCiBzcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMgICAgfCAgMTEgKy0KIHNyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL3Nsb3QuYyAgICAgICAgICAgICAgICB8IDIxNSArKysrKysrKysrKysrLQog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdGZ1bmNzLmMgICAgICAgICAgIHwgICAyICstCiBz cmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYyAgICAgICAgICAgfCAgIDQgKy0KIHNy Yy9iYWNrZW5kL3V0aWxzL2FkdC9wZ191cGdyYWRlX3N1cHBvcnQuYyAgICB8ICAgMiArLQogc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAgICAgICAgIHwgIDEyICsKIHNyYy9i YWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBzcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9zbG90LmggICAgICAgICAgICAgICAgfCAgIDggKy0KIHNyYy90ZXN0 L3JlY292ZXJ5L21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9y ZWNvdmVyeS90LzA0NF9pbnZhbGlkYXRlX3Nsb3RzLnBsICAgfCAyNzQgKysrKysrKysrKysrKysr KysrCiAxMyBmaWxlcyBjaGFuZ2VkLCA1NDcgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wNDRfaW52YWxpZGF0ZV9z bG90cy5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMv c2dtbC9jb25maWcuc2dtbAppbmRleCA2MjQ1MThlMGIwLi42MjZlYWM3MTI1IDEwMDY0NAotLS0g YS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21s CkBAIC00NTQ3LDYgKzQ1NDcsMzggQEAgcmVzdG9yZV9jb21tYW5kID0gJ2NvcHkgIkM6XFxzZXJ2 ZXJcXGFyY2hpdmVkaXJcXCVmIiAiJXAiJyAgIyBXaW5kb3dzCiAgICAgICA8L2xpc3RpdGVtPgog ICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtcmVwbGlj YXRpb24tc2xvdC1pbmFjdGl2ZS10aW1lb3V0IiB4cmVmbGFiZWw9InJlcGxpY2F0aW9uX3Nsb3Rf aW5hY3RpdmVfdGltZW91dCI+CisgICAgICA8dGVybT48dmFybmFtZT5yZXBsaWNhdGlvbl9zbG90 X2luYWN0aXZlX3RpbWVvdXQ8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAg IDxpbmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cmVwbGljYXRpb25fc2xvdF9p bmFjdGl2ZV90aW1lb3V0PC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFy eT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgor ICAgICAgIDxwYXJhPgorICAgICAgICBJbnZhbGlkYXRlcyByZXBsaWNhdGlvbiBzbG90cyB0aGF0 IGFyZSBpbmFjdGl2ZSBmb3IgbG9uZ2VyIHRoYW4KKyAgICAgICAgc3BlY2lmaWVkIGFtb3VudCBv ZiB0aW1lLiBJZiB0aGlzIHZhbHVlIGlzIHNwZWNpZmllZCB3aXRob3V0IHVuaXRzLAorICAgICAg ICBpdCBpcyB0YWtlbiBhcyBzZWNvbmRzLiBBIHZhbHVlIG9mIHplcm8gKHdoaWNoIGlzIGRlZmF1 bHQpIGRpc2FibGVzCisgICAgICAgIHRoZSB0aW1lb3V0IG1lY2hhbmlzbS4gVGhpcyBwYXJhbWV0 ZXIgY2FuIG9ubHkgYmUgc2V0IGluCisgICAgICAgIHRoZSA8ZmlsZW5hbWU+cG9zdGdyZXNxbC5j b25mPC9maWxlbmFtZT4gZmlsZSBvciBvbiB0aGUgc2VydmVyCisgICAgICAgIGNvbW1hbmQgbGlu ZS4KKyAgICAgICA8L3BhcmE+CisKKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHRpbWVvdXQg aXMgbWVhc3VyZWQgZnJvbSB0aGUgdGltZSBzaW5jZSB0aGUgc2xvdCBoYXMgYmVjb21lCisgICAg ICAgIGluYWN0aXZlIChrbm93biBmcm9tIGl0cworICAgICAgICA8c3RydWN0ZmllbGQ+aW5hY3Rp dmVfc2luY2U8L3N0cnVjdGZpZWxkPiB2YWx1ZSkgdW50aWwgaXQgZ2V0cworICAgICAgICB1c2Vk IChpLmUuLCBpdHMgPHN0cnVjdGZpZWxkPmFjdGl2ZTwvc3RydWN0ZmllbGQ+IGlzIHNldCB0byB0 cnVlKS4KKyAgICAgICA8L3BhcmE+CisKKyAgICAgICA8cGFyYT4KKyAgICAgICAgTm90ZSB0aGF0 IHRoZSBpbmFjdGl2ZSB0aW1lb3V0IGludmFsaWRhdGlvbiBtZWNoYW5pc20gaXMgbm90CisgICAg ICAgIGFwcGxpY2FibGUgZm9yIHNsb3RzIG9uIHRoZSBzdGFuZGJ5IHRoYXQgYXJlIGJlaW5nIHN5 bmNlZCBmcm9tIGEKKyAgICAgICAgcHJpbWFyeSBzZXJ2ZXIgKHdob3NlIDxzdHJ1Y3RmaWVsZD5z eW5jZWQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcworICAgICAgICA8bGl0ZXJhbD50cnVlPC9saXRl cmFsPikuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0 ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLXRyYWNrLWNvbW1pdC10aW1lc3Rh bXAiIHhyZWZsYWJlbD0idHJhY2tfY29tbWl0X3RpbWVzdGFtcCI+CiAgICAgICA8dGVybT48dmFy bmFtZT50cmFja19jb21taXRfdGltZXN0YW1wPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlw ZT4pCiAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3N5c3RlbS12 aWV3cy5zZ21sIGIvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCmluZGV4IDdlZDYxNzE3 MGYuLjA2MzYzOGJlZGEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvc3lzdGVtLXZpZXdzLnNnbWwKQEAgLTI1ODAsNiArMjU4MCwx MyBAQCBTRUxFQ1QgKiBGUk9NIHBnX2xvY2tzIHBsIExFRlQgSk9JTiBwZ19wcmVwYXJlZF94YWN0 cyBwcHgKICAgICAgICAgICBwZXJmb3JtIGxvZ2ljYWwgZGVjb2RpbmcuICBJdCBpcyBzZXQgb25s eSBmb3IgbG9naWNhbCBzbG90cy4KICAgICAgICAgIDwvcGFyYT4KICAgICAgICAgPC9saXN0aXRl bT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGxpdGVy YWw+aW5hY3RpdmVfdGltZW91dDwvbGl0ZXJhbD4gbWVhbnMgdGhhdCB0aGUgc2xvdCBoYXMgYmVl bgorICAgICAgICAgIGluYWN0aXZlIGZvciB0aGUgZHVyYXRpb24gc3BlY2lmaWVkIGJ5CisgICAg ICAgICAgPHhyZWYgbGlua2VuZD0iZ3VjLXJlcGxpY2F0aW9uLXNsb3QtaW5hY3RpdmUtdGltZW91 dCIvPiBwYXJhbWV0ZXIuCisgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CiAg ICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgPC9yb3c+ CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWxmdW5j cy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsZnVuY3MuYwppbmRl eCBiNGRkNWNjZTc1Li41NmZjMWE0NWE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2xvZ2ljYWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvbG9naWNhbGZ1bmNzLmMKQEAgLTE5Nyw3ICsxOTcsNyBAQCBwZ19sb2dpY2FsX3Ns b3RfZ2V0X2NoYW5nZXNfZ3V0cyhGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgYm9vbCBjb25maXJt LCBib29sIGJpbgogCWVsc2UKIAkJZW5kX29mX3dhbCA9IEdldFhMb2dSZXBsYXlSZWNQdHIoTlVM TCk7CiAKLQlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKE5hbWVTdHIoKm5hbWUpLCB0cnVlKTsKKwlS ZXBsaWNhdGlvblNsb3RBY3F1aXJlKE5hbWVTdHIoKm5hbWUpLCB0cnVlLCB0cnVlKTsKIAogCVBH X1RSWSgpOwogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv c2xvdHN5bmMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2xvdHN5bmMuYwpp bmRleCBkMThlMmM3MzQyLi5lOTJmNTU5NTM5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9zbG90c3luYy5jCkBAIC0zNjIsNyArMzYyLDcgQEAgZHJvcF9sb2NhbF9vYnNvbGV0 ZV9zbG90cyhMaXN0ICpyZW1vdGVfc2xvdF9saXN0KQogCiAJCQlpZiAoc3luY2VkX3Nsb3QpCiAJ CQl7Ci0JCQkJUmVwbGljYXRpb25TbG90QWNxdWlyZShOYW1lU3RyKGxvY2FsX3Nsb3QtPmRhdGEu bmFtZSksIHRydWUpOworCQkJCVJlcGxpY2F0aW9uU2xvdEFjcXVpcmUoTmFtZVN0cihsb2NhbF9z bG90LT5kYXRhLm5hbWUpLCB0cnVlLCBmYWxzZSk7CiAJCQkJUmVwbGljYXRpb25TbG90RHJvcEFj cXVpcmVkKCk7CiAJCQl9CiAKQEAgLTU3NSw2ICs1NzUsMTMgQEAgc3luY2hyb25pemVfb25lX3Ns b3QoUmVtb3RlU2xvdCAqcmVtb3RlX3Nsb3QsIE9pZCByZW1vdGVfZGJpZCkKIAkJCQkJCSAgICIg bmFtZSBzbG90IFwiJXNcIiBhbHJlYWR5IGV4aXN0cyBvbiB0aGUgc3RhbmRieSIsCiAJCQkJCQkg ICByZW1vdGVfc2xvdC0+bmFtZSkpOwogCisJCS8qCisJCSAqIFNraXAgdGhlIHN5bmMgaWYgdGhl IGxvY2FsIHNsb3QgaXMgYWxyZWFkeSBpbnZhbGlkYXRlZC4gV2UgZG8gdGhpcworCQkgKiBiZWZv cmVoYW5kIHRvIGF2b2lkIHNsb3QgYWNxdWlyZSBhbmQgcmVsZWFzZS4KKwkJICovCisJCWlmIChz bG90LT5kYXRhLmludmFsaWRhdGVkICE9IFJTX0lOVkFMX05PTkUpCisJCQlyZXR1cm4gZmFsc2U7 CisKIAkJLyoKIAkJICogVGhlIHNsb3QgaGFzIGJlZW4gc3luY2hyb25pemVkIGJlZm9yZS4KIAkJ ICoKQEAgLTU5MSw3ICs1OTgsNyBAQCBzeW5jaHJvbml6ZV9vbmVfc2xvdChSZW1vdGVTbG90ICpy ZW1vdGVfc2xvdCwgT2lkIHJlbW90ZV9kYmlkKQogCQkgKiBwcmUtY2hlY2sgdG8gZW5zdXJlIHRo YXQgYXQgbGVhc3Qgb25lIG9mIHRoZSBzbG90IHByb3BlcnRpZXMgaXMKIAkJICogY2hhbmdlZCBi ZWZvcmUgYWNxdWlyaW5nIHRoZSBzbG90LgogCQkgKi8KLQkJUmVwbGljYXRpb25TbG90QWNxdWly ZShyZW1vdGVfc2xvdC0+bmFtZSwgdHJ1ZSk7CisJCVJlcGxpY2F0aW9uU2xvdEFjcXVpcmUocmVt b3RlX3Nsb3QtPm5hbWUsIHRydWUsIGZhbHNlKTsKIAogCQlBc3NlcnQoc2xvdCA9PSBNeVJlcGxp Y2F0aW9uU2xvdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3Qu YyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3QuYwppbmRleCAzYmRkYWFlMDIyLi43MDA2 YzJlMmZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90LmMKKysrIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vc2xvdC5jCkBAIC0xMDcsMTAgKzEwNywxMSBAQCBjb25z dCBjaGFyICpjb25zdCBTbG90SW52YWxpZGF0aW9uQ2F1c2VzW10gPSB7CiAJW1JTX0lOVkFMX1dB TF9SRU1PVkVEXSA9ICJ3YWxfcmVtb3ZlZCIsCiAJW1JTX0lOVkFMX0hPUklaT05dID0gInJvd3Nf cmVtb3ZlZCIsCiAJW1JTX0lOVkFMX1dBTF9MRVZFTF0gPSAid2FsX2xldmVsX2luc3VmZmljaWVu dCIsCisJW1JTX0lOVkFMX0lOQUNUSVZFX1RJTUVPVVRdID0gImluYWN0aXZlX3RpbWVvdXQiLAog fTsKIAogLyogTWF4aW11bSBudW1iZXIgb2YgaW52YWxpZGF0aW9uIGNhdXNlcyAqLwotI2RlZmlu ZQlSU19JTlZBTF9NQVhfQ0FVU0VTIFJTX0lOVkFMX1dBTF9MRVZFTAorI2RlZmluZQlSU19JTlZB TF9NQVhfQ0FVU0VTIFJTX0lOVkFMX0lOQUNUSVZFX1RJTUVPVVQKIAogU3RhdGljQXNzZXJ0RGVj bChsZW5ndGhvZihTbG90SW52YWxpZGF0aW9uQ2F1c2VzKSA9PSAoUlNfSU5WQUxfTUFYX0NBVVNF UyArIDEpLAogCQkJCSAiYXJyYXkgbGVuZ3RoIG1pc21hdGNoIik7CkBAIC0xNDAsNiArMTQxLDcg QEAgUmVwbGljYXRpb25TbG90ICpNeVJlcGxpY2F0aW9uU2xvdCA9IE5VTEw7CiAvKiBHVUMgdmFy aWFibGVzICovCiBpbnQJCQltYXhfcmVwbGljYXRpb25fc2xvdHMgPSAxMDsgLyogdGhlIG1heGlt dW0gbnVtYmVyIG9mIHJlcGxpY2F0aW9uCiAJCQkJCQkJCQkJICogc2xvdHMgKi8KK2ludAkJCXJl cGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGltZW91dCA9IDA7CiAKIC8qCiAgKiBUaGlzIEdVQyBs aXN0cyBzdHJlYW1pbmcgcmVwbGljYXRpb24gc3RhbmRieSBzZXJ2ZXIgc2xvdCBuYW1lcyB0aGF0 CkBAIC0xNTgsNiArMTYwLDcgQEAgc3RhdGljIFhMb2dSZWNQdHIgc3Nfb2xkZXN0X2ZsdXNoX2xz biA9IEludmFsaWRYTG9nUmVjUHRyOwogCiBzdGF0aWMgdm9pZCBSZXBsaWNhdGlvblNsb3RTaG1l bUV4aXQoaW50IGNvZGUsIERhdHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBSZXBsaWNhdGlvblNsb3RE cm9wUHRyKFJlcGxpY2F0aW9uU2xvdCAqc2xvdCk7CitzdGF0aWMgYm9vbCBJbnZhbGlkYXRlUG9z c2libHlJbmFjdGl2ZVNsb3QoUmVwbGljYXRpb25TbG90ICpzbG90KTsKIAogLyogaW50ZXJuYWwg cGVyc2lzdGVuY3kgZnVuY3Rpb25zICovCiBzdGF0aWMgdm9pZCBSZXN0b3JlU2xvdEZyb21EaXNr KGNvbnN0IGNoYXIgKm5hbWUpOwpAQCAtNTM1LDkgKzUzOCwxNCBAQCBSZXBsaWNhdGlvblNsb3RO YW1lKGludCBpbmRleCwgTmFtZSBuYW1lKQogICoKICAqIEFuIGVycm9yIGlzIHJhaXNlZCBpZiBu b3dhaXQgaXMgdHJ1ZSBhbmQgdGhlIHNsb3QgaXMgY3VycmVudGx5IGluIHVzZS4gSWYKICAqIG5v d2FpdCBpcyBmYWxzZSwgd2Ugc2xlZXAgdW50aWwgdGhlIHNsb3QgaXMgcmVsZWFzZWQgYnkgdGhl IG93bmluZyBwcm9jZXNzLgorICoKKyAqIElmIGNoZWNrX2Zvcl90aW1lb3V0X2ludmFsaWRhdGlv biBpcyB0cnVlLCB0aGUgc2xvdCBpcyBjaGVja2VkIGZvcgorICogaW52YWxpZGF0aW9uIGJhc2Vk IG9uIHJlcGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGltZW91dCBHVUMsIGFuZCBhbiBlcnJvciBp cworICogcmFpc2VkIGFmdGVyIG1ha2luZyB0aGUgc2xvdCBvdXJzLgogICovCiB2b2lkCi1SZXBs aWNhdGlvblNsb3RBY3F1aXJlKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgbm93YWl0KQorUmVwbGlj YXRpb25TbG90QWNxdWlyZShjb25zdCBjaGFyICpuYW1lLCBib29sIG5vd2FpdCwKKwkJCQkJICAg Ym9vbCBjaGVja19mb3JfdGltZW91dF9pbnZhbGlkYXRpb24pCiB7CiAJUmVwbGljYXRpb25TbG90 ICpzOwogCWludAkJCWFjdGl2ZV9waWQ7CkBAIC02MTUsNiArNjIzLDM0IEBAIHJldHJ5OgogCS8q IFdlIG1hZGUgdGhpcyBzbG90IGFjdGl2ZSwgc28gaXQncyBvdXJzIG5vdy4gKi8KIAlNeVJlcGxp Y2F0aW9uU2xvdCA9IHM7CiAKKwkvKgorCSAqIENoZWNrIGlmIHRoZSBnaXZlbiBzbG90IGNhbiBi ZSBpbnZhbGlkYXRlZCBiYXNlZCBvbiBpdHMgaW5hY3RpdmUKKwkgKiB0aW1lb3V0LiBJZiB5ZXMs IHBlcnNpc3QgdGhlIGludmFsaWRhdGVkIHN0YXRlIHRvIGRpc2sgYW5kIHRoZW4gZXJyb3IKKwkg KiBvdXQuIFdlIGRvIHRoaXMgb25seSBhZnRlciBtYWtpbmcgdGhlIHNsb3Qgb3VycyB0byBhdm9p ZCBhbnlvbmUgZWxzZQorCSAqIGFjcXVpcmluZyBpdCB3aGlsZSB3ZSBjaGVjayBmb3IgaXRzIGlu dmFsaWRhdGlvbi4KKwkgKi8KKwlpZiAoY2hlY2tfZm9yX3RpbWVvdXRfaW52YWxpZGF0aW9uKQor CXsKKwkJLyogVGhlIHNsb3QgaXMgb3VycyBieSBub3cgKi8KKwkJQXNzZXJ0KHMtPmFjdGl2ZV9w aWQgPT0gTXlQcm9jUGlkKTsKKworCQlpZiAoSW52YWxpZGF0ZUluYWN0aXZlUmVwbGljYXRpb25T bG90KHMsIHRydWUpKQorCQl7CisJCQkvKgorCQkJICogSWYgdGhlIHNsb3QgaGFzIGJlZW4gaW52 YWxpZGF0ZWQsIHJlY2FsY3VsYXRlIHRoZSByZXNvdXJjZQorCQkJICogbGltaXRzLgorCQkJICov CisJCQlSZXBsaWNhdGlvblNsb3RzQ29tcHV0ZVJlcXVpcmVkWG1pbihmYWxzZSk7CisJCQlSZXBs aWNhdGlvblNsb3RzQ29tcHV0ZVJlcXVpcmVkTFNOKCk7CisKKwkJCWVyZXBvcnQoRVJST1IsCisJ CQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAor CQkJCQkgZXJybXNnKCJjYW4gbm8gbG9uZ2VyIGdldCBjaGFuZ2VzIGZyb20gcmVwbGljYXRpb24g c2xvdCBcIiVzXCIiLAorCQkJCQkJCU5hbWVTdHIoTXlSZXBsaWNhdGlvblNsb3QtPmRhdGEubmFt ZSkpLAorCQkJCQkgZXJyZGV0YWlsKCJUaGlzIHNsb3QgaGFzIGJlZW4gaW52YWxpZGF0ZWQgYmVj YXVzZSBpdCB3YXMgaW5hY3RpdmUgZm9yIG1vcmUgdGhhbiByZXBsaWNhdGlvbl9zbG90X2luYWN0 aXZlX3RpbWVvdXQuIikpKTsKKwkJfQorCX0KKwogCS8qCiAJICogVGhlIGNhbGwgdG8gcGdzdGF0 X2FjcXVpcmVfcmVwbHNsb3QoKSBwcm90ZWN0cyBhZ2FpbnN0IHN0YXRzIGZvciBhCiAJICogZGlm ZmVyZW50IHNsb3QsIGZyb20gYmVmb3JlIGEgcmVzdGFydCBvciBzdWNoLCBiZWluZyBwcmVzZW50 IGR1cmluZwpAQCAtNzgxLDcgKzgxNyw3IEBAIFJlcGxpY2F0aW9uU2xvdERyb3AoY29uc3QgY2hh ciAqbmFtZSwgYm9vbCBub3dhaXQpCiB7CiAJQXNzZXJ0KE15UmVwbGljYXRpb25TbG90ID09IE5V TEwpOwogCi0JUmVwbGljYXRpb25TbG90QWNxdWlyZShuYW1lLCBub3dhaXQpOworCVJlcGxpY2F0 aW9uU2xvdEFjcXVpcmUobmFtZSwgbm93YWl0LCBmYWxzZSk7CiAKIAkvKgogCSAqIERvIG5vdCBh bGxvdyB1c2VycyB0byBkcm9wIHRoZSBzbG90cyB3aGljaCBhcmUgY3VycmVudGx5IGJlaW5nIHN5 bmNlZApAQCAtODA0LDcgKzg0MCw3IEBAIFJlcGxpY2F0aW9uU2xvdEFsdGVyKGNvbnN0IGNoYXIg Km5hbWUsIGJvb2wgZmFpbG92ZXIpCiB7CiAJQXNzZXJ0KE15UmVwbGljYXRpb25TbG90ID09IE5V TEwpOwogCi0JUmVwbGljYXRpb25TbG90QWNxdWlyZShuYW1lLCBmYWxzZSk7CisJUmVwbGljYXRp b25TbG90QWNxdWlyZShuYW1lLCBmYWxzZSwgdHJ1ZSk7CiAKIAlpZiAoU2xvdElzUGh5c2ljYWwo TXlSZXBsaWNhdGlvblNsb3QpKQogCQllcmVwb3J0KEVSUk9SLApAQCAtOTgwLDYgKzEwMTYsMjAg QEAgUmVwbGljYXRpb25TbG90RHJvcFB0cihSZXBsaWNhdGlvblNsb3QgKnNsb3QpCiAJTFdMb2Nr UmVsZWFzZShSZXBsaWNhdGlvblNsb3RBbGxvY2F0aW9uTG9jayk7CiB9CiAKKy8qCisgKiBIZWxw ZXIgZm9yIFJlcGxpY2F0aW9uU2xvdFNhdmUKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitTYXZl R2l2ZW5SZXBsaWNhdGlvblNsb3QoUmVwbGljYXRpb25TbG90ICpzbG90LCBpbnQgZWxldmVsKQor eworCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKKworCUFzc2VydChzbG90ICE9IE5VTEwpOworCisJ c3ByaW50ZihwYXRoLCAicGdfcmVwbHNsb3QvJXMiLCBOYW1lU3RyKHNsb3QtPmRhdGEubmFtZSkp OworCVNhdmVTbG90VG9QYXRoKHNsb3QsIHBhdGgsIGVsZXZlbCk7Cit9CisKIC8qCiAgKiBTZXJp YWxpemUgdGhlIGN1cnJlbnRseSBhY3F1aXJlZCBzbG90J3Mgc3RhdGUgZnJvbSBtZW1vcnkgdG8g ZGlzaywgdGhlcmVieQogICogZ3VhcmFudGVlaW5nIHRoZSBjdXJyZW50IHN0YXRlIHdpbGwgc3Vy dml2ZSBhIGNyYXNoLgpAQCAtOTg3LDEyICsxMDM3LDIxIEBAIFJlcGxpY2F0aW9uU2xvdERyb3BQ dHIoUmVwbGljYXRpb25TbG90ICpzbG90KQogdm9pZAogUmVwbGljYXRpb25TbG90U2F2ZSh2b2lk KQogewotCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKKwlTYXZlR2l2ZW5SZXBsaWNhdGlvblNsb3Qo TXlSZXBsaWNhdGlvblNsb3QsIEVSUk9SKTsKK30KIAotCUFzc2VydChNeVJlcGxpY2F0aW9uU2xv dCAhPSBOVUxMKTsKKy8qCisgKiBIZWxwZXIgZm9yIFJlcGxpY2F0aW9uU2xvdE1hcmtEaXJ0eQor ICovCitzdGF0aWMgaW5saW5lIHZvaWQKK01hcmtHaXZlblJlcGxpY2F0aW9uU2xvdERpcnR5KFJl cGxpY2F0aW9uU2xvdCAqc2xvdCkKK3sKKwlBc3NlcnQoc2xvdCAhPSBOVUxMKTsKIAotCXNwcmlu dGYocGF0aCwgInBnX3JlcGxzbG90LyVzIiwgTmFtZVN0cihNeVJlcGxpY2F0aW9uU2xvdC0+ZGF0 YS5uYW1lKSk7Ci0JU2F2ZVNsb3RUb1BhdGgoTXlSZXBsaWNhdGlvblNsb3QsIHBhdGgsIEVSUk9S KTsKKwlTcGluTG9ja0FjcXVpcmUoJnNsb3QtPm11dGV4KTsKKwlzbG90LT5qdXN0X2RpcnRpZWQg PSB0cnVlOworCXNsb3QtPmRpcnR5ID0gdHJ1ZTsKKwlTcGluTG9ja1JlbGVhc2UoJnNsb3QtPm11 dGV4KTsKIH0KIAogLyoKQEAgLTEwMDUsMTQgKzEwNjQsNyBAQCBSZXBsaWNhdGlvblNsb3RTYXZl KHZvaWQpCiB2b2lkCiBSZXBsaWNhdGlvblNsb3RNYXJrRGlydHkodm9pZCkKIHsKLQlSZXBsaWNh dGlvblNsb3QgKnNsb3QgPSBNeVJlcGxpY2F0aW9uU2xvdDsKLQotCUFzc2VydChNeVJlcGxpY2F0 aW9uU2xvdCAhPSBOVUxMKTsKLQotCVNwaW5Mb2NrQWNxdWlyZSgmc2xvdC0+bXV0ZXgpOwotCU15 UmVwbGljYXRpb25TbG90LT5qdXN0X2RpcnRpZWQgPSB0cnVlOwotCU15UmVwbGljYXRpb25TbG90 LT5kaXJ0eSA9IHRydWU7Ci0JU3BpbkxvY2tSZWxlYXNlKCZzbG90LT5tdXRleCk7CisJTWFya0dp dmVuUmVwbGljYXRpb25TbG90RGlydHkoTXlSZXBsaWNhdGlvblNsb3QpOwogfQogCiAvKgpAQCAt MTUwNiw2ICsxNTU4LDkgQEAgUmVwb3J0U2xvdEludmFsaWRhdGlvbihSZXBsaWNhdGlvblNsb3RJ bnZhbGlkYXRpb25DYXVzZSBjYXVzZSwKIAkJY2FzZSBSU19JTlZBTF9XQUxfTEVWRUw6CiAJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZlcnJfZGV0YWlsLCBfKCJMb2dpY2FsIGRlY29kaW5nIG9u IHN0YW5kYnkgcmVxdWlyZXMgd2FsX2xldmVsID49IGxvZ2ljYWwgb24gdGhlIHByaW1hcnkgc2Vy dmVyLiIpKTsKIAkJCWJyZWFrOworCQljYXNlIFJTX0lOVkFMX0lOQUNUSVZFX1RJTUVPVVQ6CisJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZlcnJfZGV0YWlsLCBfKCJUaGUgc2xvdCBoYXMgYmVl biBpbmFjdGl2ZSBmb3IgbW9yZSB0aGFuIHJlcGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGltZW91 dC4iKSk7CisJCQlicmVhazsKIAkJY2FzZSBSU19JTlZBTF9OT05FOgogCQkJcGdfdW5yZWFjaGFi bGUoKTsKIAl9CkBAIC0xNTUwLDYgKzE2MDUsMTIgQEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xl dGVTbG90KFJlcGxpY2F0aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIGNhdXNlLAogCVhMb2dSZWNQ dHIJaW5pdGlhbF9yZXN0YXJ0X2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwogCVJlcGxpY2F0aW9u U2xvdEludmFsaWRhdGlvbkNhdXNlIGludmFsaWRhdGlvbl9jYXVzZV9wcmV2IFBHX1VTRURfRk9S X0FTU0VSVFNfT05MWSA9IFJTX0lOVkFMX05PTkU7CiAKKwkvKgorCSAqIFVzZSBJbnZhbGlkYXRl SW5hY3RpdmVSZXBsaWNhdGlvblNsb3QgZm9yIGluYWN0aXZlIHRpbWVvdXQgYmFzZWQKKwkgKiBp bnZhbGlkYXRpb24uCisJICovCisJQXNzZXJ0KGNhdXNlICE9IFJTX0lOVkFMX0lOQUNUSVZFX1RJ TUVPVVQpOworCiAJZm9yICg7OykKIAl7CiAJCVhMb2dSZWNQdHIJcmVzdGFydF9sc247CkBAIC0x NjE5LDYgKzE2ODAsMTAgQEAgSW52YWxpZGF0ZVBvc3NpYmx5T2Jzb2xldGVTbG90KFJlcGxpY2F0 aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlIGNhdXNlLAogCQkJCQlpZiAoU2xvdElzTG9naWNhbChz KSkKIAkJCQkJCWludmFsaWRhdGlvbl9jYXVzZSA9IGNhdXNlOwogCQkJCQlicmVhazsKKwkJCQlj YXNlIFJTX0lOVkFMX0lOQUNUSVZFX1RJTUVPVVQ6CisJCQkJCS8qIG5vdCByZWFjaGFibGUgKi8K KwkJCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCQkJYnJlYWs7CiAJCQkJY2FzZSBSU19JTlZBTF9OT05F OgogCQkJCQlwZ191bnJlYWNoYWJsZSgpOwogCQkJfQpAQCAtMTc4Nyw2ICsxODUyLDEyIEBAIElu dmFsaWRhdGVPYnNvbGV0ZVJlcGxpY2F0aW9uU2xvdHMoUmVwbGljYXRpb25TbG90SW52YWxpZGF0 aW9uQ2F1c2UgY2F1c2UsCiAJQXNzZXJ0KGNhdXNlICE9IFJTX0lOVkFMX1dBTF9SRU1PVkVEIHx8 IG9sZGVzdFNlZ25vID4gMCk7CiAJQXNzZXJ0KGNhdXNlICE9IFJTX0lOVkFMX05PTkUpOwogCisJ LyoKKwkgKiBVc2UgSW52YWxpZGF0ZUluYWN0aXZlUmVwbGljYXRpb25TbG90IGZvciBpbmFjdGl2 ZSB0aW1lb3V0IGJhc2VkCisJICogaW52YWxpZGF0aW9uLgorCSAqLworCUFzc2VydChjYXVzZSAh PSBSU19JTlZBTF9JTkFDVElWRV9USU1FT1VUKTsKKwogCWlmIChtYXhfcmVwbGljYXRpb25fc2xv dHMgPT0gMCkKIAkJcmV0dXJuIGludmFsaWRhdGVkOwogCkBAIC0xODIzLDYgKzE4OTQsMTAzIEBA IHJlc3RhcnQ6CiAJcmV0dXJuIGludmFsaWRhdGVkOwogfQogCisvKgorICogSW52YWxpZGF0ZSBn aXZlbiBzbG90IGJhc2VkIG9uIHJlcGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGltZW91dCBHVUMu CisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBzbG90IGhhcyBnb3QgaW52YWxpZGF0ZWQuCisg KgorICogV2hldGhlciB0aGUgZ2l2ZW4gc2xvdCBuZWVkcyB0byBiZSBpbnZhbGlkYXRlZCBkZXBl bmRzIG9uIHRoZSBjYXVzZToKKyAqIC0gUlNfSU5WQUxfSU5BQ1RJVkVfVElNRU9VVDogaW5hY3Rp dmUgc2xvdCB0aW1lb3V0IG9jY3VycworICoKKyAqIE5CIC0gdGhpcyBmdW5jdGlvbiBhbHNvIHJ1 bnMgYXMgcGFydCBvZiBjaGVja3BvaW50LCBzbyBhdm9pZCByYWlzaW5nIGVycm9ycworICogaWYg cG9zc2libGUuCisgKgorICogTm90ZSB0aGF0IGhhdmluZyBhIG5ldyBmdW5jdGlvbiBmb3IgUlNf SU5WQUxfSU5BQ1RJVkVfVElNRU9VVCBjYXVzZSBpbnN0ZWFkCisgKiBvZiB1c2luZyBJbnZhbGlk YXRlT2Jzb2xldGVSZXBsaWNhdGlvblNsb3RzIHByb3ZpZGVzIGZsZXhpYmlsaXR5IGluIGNhbGxp bmcKKyAqIGl0IGF0IHNsb3QtbGV2ZWwgb3Bwb3J0dW5pc3RpY2FsbHksIGFuZCBjaG9vc2luZyB0 byBwZXJzaXN0IHRoZSBzbG90IGluZm8gdG8KKyAqIGRpc2suCisgKi8KK2Jvb2wKK0ludmFsaWRh dGVJbmFjdGl2ZVJlcGxpY2F0aW9uU2xvdChSZXBsaWNhdGlvblNsb3QgKnNsb3QsIGJvb2wgcGVy c2lzdF9zdGF0ZSkKK3sKKwlpZiAoIUludmFsaWRhdGVQb3NzaWJseUluYWN0aXZlU2xvdChzbG90 KSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogTWFrZSBzdXJlIHRoZSBpbnZhbGlkYXRlZCBzdGF0 ZSBwZXJzaXN0cyBhY3Jvc3Mgc2VydmVyIHJlc3RhcnQgKi8KKwlNYXJrR2l2ZW5SZXBsaWNhdGlv blNsb3REaXJ0eShzbG90KTsKKworCWlmIChwZXJzaXN0X3N0YXRlKQorCQlTYXZlR2l2ZW5SZXBs aWNhdGlvblNsb3Qoc2xvdCwgRVJST1IpOworCisJUmVwb3J0U2xvdEludmFsaWRhdGlvbihSU19J TlZBTF9JTkFDVElWRV9USU1FT1VULCBmYWxzZSwgMCwKKwkJCQkJCSAgIHNsb3QtPmRhdGEubmFt ZSwgSW52YWxpZFhMb2dSZWNQdHIsCisJCQkJCQkgICBJbnZhbGlkWExvZ1JlY1B0ciwgSW52YWxp ZFRyYW5zYWN0aW9uSWQpOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBIZWxwZXIgZm9y IEludmFsaWRhdGVJbmFjdGl2ZVJlcGxpY2F0aW9uU2xvdAorICovCitzdGF0aWMgYm9vbAorSW52 YWxpZGF0ZVBvc3NpYmx5SW5hY3RpdmVTbG90KFJlcGxpY2F0aW9uU2xvdCAqc2xvdCkKK3sKKwlS ZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZSBpbmF2aWRhdGlvbl9jYXVzZSA9IFJTX0lO VkFMX05PTkU7CisKKwkvKgorCSAqIE5vdGUgdGhhdCB3ZSBkb24ndCBpbnZhbGlkYXRlIHNsb3Qg b24gdGhlIHN0YW5kYnkgdGhhdCdzIGN1cnJlbnRseQorCSAqIGJlaW5nIHN5bmNlZCBmcm9tIHRo ZSBwcmltYXJ5LCBiZWNhdXNlIHN1Y2ggc2xvdHMgYXJlIHR5cGljYWxseQorCSAqIGNvbnNpZGVy ZWQgbm90IGFjdGl2ZSBhcyB0aGV5IGRvbid0IGFjdHVhbGx5IHBlcmZvcm0gbG9naWNhbCBkZWNv ZGluZy4KKwkgKi8KKwlpZiAoUmVjb3ZlcnlJblByb2dyZXNzKCkgJiYgc2xvdC0+ZGF0YS5zeW5j ZWQpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChyZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3Rp bWVvdXQgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHNsb3QtPmluYWN0aXZlX3NpbmNl ID4gMCkKKwl7CisJCVRpbWVzdGFtcFR6IG5vdzsKKworCQkvKgorCQkgKiBEbyBub3QgaW52YWxp ZGF0ZSB0aGUgc2xvdHMgd2hpY2ggYXJlIGN1cnJlbnRseSBiZWluZyBzeW5jZWQgZnJvbQorCQkg KiB0aGUgcHJpbWFyeSB0byB0aGUgc3RhbmRieS4KKwkJICovCisJCWlmIChSZWNvdmVyeUluUHJv Z3Jlc3MoKSAmJiBzbG90LT5kYXRhLnN5bmNlZCkKKwkJCXJldHVybiBmYWxzZTsKKworCQlMV0xv Y2tBY3F1aXJlKFJlcGxpY2F0aW9uU2xvdENvbnRyb2xMb2NrLCBMV19TSEFSRUQpOworCisJCS8q CisJCSAqIFdlIGdldCB0aGUgY3VycmVudCB0aW1lIGJlZm9yZWhhbmQgdG8gYXZvaWQgc3lzdGVt IGNhbGwgd2hpbGUKKwkJICogaG9sZGluZyB0aGUgc3BpbmxvY2suCisJCSAqLworCQlub3cgPSBH ZXRDdXJyZW50VGltZXN0YW1wKCk7CisKKwkJU3BpbkxvY2tBY3F1aXJlKCZzbG90LT5tdXRleCk7 CisKKwkJLyoKKwkJICogQ2hlY2sgaWYgdGhlIHNsb3QgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQg ZHVlIHRvCisJCSAqIHJlcGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGltZW91dCBHVUMuIFdlIGRv IHRoaXMgd2l0aCB0aGUgc3BpbmxvY2sKKwkJICogaGVsZCB0byBhdm9pZCByYWNlIGNvbmRpdGlv bnMgLS0gZm9yIGV4YW1wbGUgdGhlIGluYWN0aXZlX3NpbmNlCisJCSAqIGNvdWxkIGNoYW5nZSwg b3IgdGhlIHNsb3QgY291bGQgYmUgZHJvcHBlZC4KKwkJICovCisJCWlmIChUaW1lc3RhbXBEaWZm ZXJlbmNlRXhjZWVkcyhzbG90LT5pbmFjdGl2ZV9zaW5jZSwgbm93LAorCQkJCQkJCQkJICAgcmVw bGljYXRpb25fc2xvdF9pbmFjdGl2ZV90aW1lb3V0ICogMTAwMCkpCisJCXsKKwkJCWluYXZpZGF0 aW9uX2NhdXNlID0gUlNfSU5WQUxfSU5BQ1RJVkVfVElNRU9VVDsKKwkJCXNsb3QtPmRhdGEuaW52 YWxpZGF0ZWQgPSBSU19JTlZBTF9JTkFDVElWRV9USU1FT1VUOworCQl9CisKKwkJU3BpbkxvY2tS ZWxlYXNlKCZzbG90LT5tdXRleCk7CisJCUxXTG9ja1JlbGVhc2UoUmVwbGljYXRpb25TbG90Q29u dHJvbExvY2spOworCisJCXJldHVybiAoaW5hdmlkYXRpb25fY2F1c2UgPT0gUlNfSU5WQUxfSU5B Q1RJVkVfVElNRU9VVCk7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCiAvKgogICogRmx1c2gg YWxsIHJlcGxpY2F0aW9uIHNsb3RzIHRvIGRpc2suCiAgKgpAQCAtMTgzNSw2ICsyMDAzLDcgQEAg dm9pZAogQ2hlY2tQb2ludFJlcGxpY2F0aW9uU2xvdHMoYm9vbCBpc19zaHV0ZG93bikKIHsKIAlp bnQJCQlpOworCWJvb2wJCWludmFsaWRhdGVkID0gZmFsc2U7CiAKIAllbG9nKERFQlVHMSwgInBl cmZvcm1pbmcgcmVwbGljYXRpb24gc2xvdCBjaGVja3BvaW50Iik7CiAKQEAgLTE4NTgsNiArMjAy NywxMyBAQCBDaGVja1BvaW50UmVwbGljYXRpb25TbG90cyhib29sIGlzX3NodXRkb3duKQogCQkv KiBzYXZlIHRoZSBzbG90IHRvIGRpc2ssIGxvY2tpbmcgaXMgaGFuZGxlZCBpbiBTYXZlU2xvdFRv UGF0aCgpICovCiAJCXNwcmludGYocGF0aCwgInBnX3JlcGxzbG90LyVzIiwgTmFtZVN0cihzLT5k YXRhLm5hbWUpKTsKIAorCQkvKgorCQkgKiBIZXJlJ3MgYW4gb3Bwb3J0dW5pdHkgdG8gaW52YWxp ZGF0ZSBpbmFjdGl2ZSByZXBsaWNhdGlvbiBzbG90cworCQkgKiBiYXNlZCBvbiB0aW1lb3V0LCBz byBsZXQncyBkbyBpdC4KKwkJICovCisJCWlmIChJbnZhbGlkYXRlSW5hY3RpdmVSZXBsaWNhdGlv blNsb3QocywgZmFsc2UpKQorCQkJaW52YWxpZGF0ZWQgPSB0cnVlOworCiAJCS8qCiAJCSAqIFNs b3QncyBkYXRhIGlzIG5vdCBmbHVzaGVkIGVhY2ggdGltZSB0aGUgY29uZmlybWVkX2ZsdXNoIExT TiBpcwogCQkgKiB1cGRhdGVkIGFzIHRoYXQgY291bGQgbGVhZCB0byBmcmVxdWVudCB3cml0ZXMu ICBIb3dldmVyLCB3ZSBkZWNpZGUKQEAgLTE4ODQsNiArMjA2MCwxMyBAQCBDaGVja1BvaW50UmVw bGljYXRpb25TbG90cyhib29sIGlzX3NodXRkb3duKQogCQlTYXZlU2xvdFRvUGF0aChzLCBwYXRo LCBMT0cpOwogCX0KIAlMV0xvY2tSZWxlYXNlKFJlcGxpY2F0aW9uU2xvdEFsbG9jYXRpb25Mb2Nr KTsKKworCS8qIElmIHRoZSBzbG90IGhhcyBiZWVuIGludmFsaWRhdGVkLCByZWNhbGN1bGF0ZSB0 aGUgcmVzb3VyY2UgbGltaXRzICovCisJaWYgKGludmFsaWRhdGVkKQorCXsKKwkJUmVwbGljYXRp b25TbG90c0NvbXB1dGVSZXF1aXJlZFhtaW4oZmFsc2UpOworCQlSZXBsaWNhdGlvblNsb3RzQ29t cHV0ZVJlcXVpcmVkTFNOKCk7CisJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vc2xvdGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90ZnVu Y3MuYwppbmRleCBkZDZjMWQ1YTdlLi45YWQzZTU1NzA0IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9zbG90ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9z bG90ZnVuY3MuYwpAQCAtNTM5LDcgKzUzOSw3IEBAIHBnX3JlcGxpY2F0aW9uX3Nsb3RfYWR2YW5j ZShQR19GVU5DVElPTl9BUkdTKQogCQltb3ZldG8gPSBNaW4obW92ZXRvLCBHZXRYTG9nUmVwbGF5 UmVjUHRyKE5VTEwpKTsKIAogCS8qIEFjcXVpcmUgdGhlIHNsb3Qgc28gd2UgIm93biIgaXQgKi8K LQlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKE5hbWVTdHIoKnNsb3RuYW1lKSwgdHJ1ZSk7CisJUmVw bGljYXRpb25TbG90QWNxdWlyZShOYW1lU3RyKCpzbG90bmFtZSksIHRydWUsIHRydWUpOwogCiAJ LyogQSBzbG90IHdob3NlIHJlc3RhcnRfbHNuIGhhcyBuZXZlciBiZWVuIHJlc2VydmVkIGNhbm5v dCBiZSBhZHZhbmNlZCAqLwogCWlmIChYTG9nUmVjUHRySXNJbnZhbGlkKE15UmVwbGljYXRpb25T bG90LT5kYXRhLnJlc3RhcnRfbHNuKSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL3dhbHNlbmRlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKaW5k ZXggYmM0MGM0NTRkZS4uOTZlZWI4YjdkMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vd2Fsc2VuZGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVy LmMKQEAgLTg0Niw3ICs4NDYsNyBAQCBTdGFydFJlcGxpY2F0aW9uKFN0YXJ0UmVwbGljYXRpb25D bWQgKmNtZCkKIAogCWlmIChjbWQtPnNsb3RuYW1lKQogCXsKLQkJUmVwbGljYXRpb25TbG90QWNx dWlyZShjbWQtPnNsb3RuYW1lLCB0cnVlKTsKKwkJUmVwbGljYXRpb25TbG90QWNxdWlyZShjbWQt PnNsb3RuYW1lLCB0cnVlLCB0cnVlKTsKIAkJaWYgKFNsb3RJc0xvZ2ljYWwoTXlSZXBsaWNhdGlv blNsb3QpKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1Rf Tk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCkBAIC0xNDU5LDcgKzE0NTksNyBAQCBTdGFydExv Z2ljYWxSZXBsaWNhdGlvbihTdGFydFJlcGxpY2F0aW9uQ21kICpjbWQpCiAKIAlBc3NlcnQoIU15 UmVwbGljYXRpb25TbG90KTsKIAotCVJlcGxpY2F0aW9uU2xvdEFjcXVpcmUoY21kLT5zbG90bmFt ZSwgdHJ1ZSk7CisJUmVwbGljYXRpb25TbG90QWNxdWlyZShjbWQtPnNsb3RuYW1lLCB0cnVlLCB0 cnVlKTsKIAogCS8qCiAJICogRm9yY2UgYSBkaXNjb25uZWN0LCBzbyB0aGF0IHRoZSBkZWNvZGlu ZyBjb2RlIGRvZXNuJ3QgbmVlZCB0byBjYXJlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9hZHQvcGdfdXBncmFkZV9zdXBwb3J0LmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfdXBn cmFkZV9zdXBwb3J0LmMKaW5kZXggYzU0YjA4ZmUxOC4uODI5NTZkNThkMyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX3VwZ3JhZGVfc3VwcG9ydC5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9wZ191cGdyYWRlX3N1cHBvcnQuYwpAQCAtMjk5LDcgKzI5OSw3IEBAIGJp bmFyeV91cGdyYWRlX2xvZ2ljYWxfc2xvdF9oYXNfY2F1Z2h0X3VwKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJc2xvdF9uYW1lID0gUEdfR0VUQVJHX05BTUUoMCk7CiAKIAkvKiBBY3F1aXJlIHRoZSBnaXZl biBzbG90ICovCi0JUmVwbGljYXRpb25TbG90QWNxdWlyZShOYW1lU3RyKCpzbG90X25hbWUpLCB0 cnVlKTsKKwlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKE5hbWVTdHIoKnNsb3RfbmFtZSksIHRydWUs IGZhbHNlKTsKIAogCUFzc2VydChTbG90SXNMb2dpY2FsKE15UmVwbGljYXRpb25TbG90KSk7CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKaW5kZXggYzEyNzg0Y2JlYy4uNDE0OWZmMWZm ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKQEAgLTI5NzEsNiArMjk3MSwxOCBA QCBzdHJ1Y3QgY29uZmlnX2ludCBDb25maWd1cmVOYW1lc0ludFtdID0KIAkJTlVMTCwgTlVMTCwg TlVMTAogCX0sCiAKKwl7CisJCXsicmVwbGljYXRpb25fc2xvdF9pbmFjdGl2ZV90aW1lb3V0Iiwg UEdDX1NJR0hVUCwgUkVQTElDQVRJT05fU0VORElORywKKwkJCWdldHRleHRfbm9vcCgiU2V0cyB0 aGUgYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBiZWZvcmUgaW52YWxpZGF0aW5nIGFuICIKKwkJCQkJ CSAiaW5hY3RpdmUgcmVwbGljYXRpb24gc2xvdC4iKSwKKwkJCU5VTEwsCisJCQlHVUNfVU5JVF9T CisJCX0sCisJCSZyZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVvdXQsCisJCTAsIDAsIElO VF9NQVgsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCiAJewogCQl7ImNvbW1pdF9kZWxheSIs IFBHQ19TVVNFVCwgV0FMX1NFVFRJTkdTLAogCQkJZ2V0dGV4dF9ub29wKCJTZXRzIHRoZSBkZWxh eSBpbiBtaWNyb3NlY29uZHMgYmV0d2VlbiB0cmFuc2FjdGlvbiBjb21taXQgYW5kICIKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3Ny Yy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBiYWVjZGUy ODQxLi4yZTFhZDJlYWNhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn cmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3Fs LmNvbmYuc2FtcGxlCkBAIC0zMzUsNiArMzM1LDcgQEAKICN3YWxfc2VuZGVyX3RpbWVvdXQgPSA2 MHMJIyBpbiBtaWxsaXNlY29uZHM7IDAgZGlzYWJsZXMKICN0cmFja19jb21taXRfdGltZXN0YW1w ID0gb2ZmCSMgY29sbGVjdCB0aW1lc3RhbXAgb2YgdHJhbnNhY3Rpb24gY29tbWl0CiAJCQkJIyAo Y2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpCisjcmVwbGljYXRpb25fc2xvdF9pbmFjdGl2ZV90aW1l b3V0ID0gMAkjIGluIHNlY29uZHM7IDAgZGlzYWJsZXMKIAogIyAtIFByaW1hcnkgU2VydmVyIC0K IApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5oIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vc2xvdC5oCmluZGV4IDdiOTM3ZDFhMGMuLmYwYWMzMjRjZTkgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Nsb3QuaAorKysgYi9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9zbG90LmgKQEAgLTUzLDYgKzUzLDggQEAgdHlwZWRlZiBlbnVtIFJlcGxpY2F0 aW9uU2xvdEludmFsaWRhdGlvbkNhdXNlCiAJUlNfSU5WQUxfSE9SSVpPTiwKIAkvKiB3YWxfbGV2 ZWwgaW5zdWZmaWNpZW50IGZvciBzbG90ICovCiAJUlNfSU5WQUxfV0FMX0xFVkVMLAorCS8qIGlu YWN0aXZlIHNsb3QgdGltZW91dCBoYXMgb2NjdXJyZWQgKi8KKwlSU19JTlZBTF9JTkFDVElWRV9U SU1FT1VULAogfSBSZXBsaWNhdGlvblNsb3RJbnZhbGlkYXRpb25DYXVzZTsKIAogZXh0ZXJuIFBH RExMSU1QT1JUIGNvbnN0IGNoYXIgKmNvbnN0IFNsb3RJbnZhbGlkYXRpb25DYXVzZXNbXTsKQEAg LTIzMCw2ICsyMzIsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgUmVwbGljYXRpb25TbG90ICpNeVJl cGxpY2F0aW9uU2xvdDsKIC8qIEdVQ3MgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3Jl cGxpY2F0aW9uX3Nsb3RzOwogZXh0ZXJuIFBHRExMSU1QT1JUIGNoYXIgKnN0YW5kYnlfc2xvdF9u YW1lczsKK2V4dGVybiBQR0RMTElNUE9SVCBpbnQgcmVwbGljYXRpb25fc2xvdF9pbmFjdGl2ZV90 aW1lb3V0OwogCiAvKiBzaG1lbSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgKi8KIGV4dGVybiBT aXplIFJlcGxpY2F0aW9uU2xvdHNTaG1lbVNpemUodm9pZCk7CkBAIC0yNDUsNyArMjQ4LDggQEAg ZXh0ZXJuIHZvaWQgUmVwbGljYXRpb25TbG90RHJvcChjb25zdCBjaGFyICpuYW1lLCBib29sIG5v d2FpdCk7CiBleHRlcm4gdm9pZCBSZXBsaWNhdGlvblNsb3REcm9wQWNxdWlyZWQodm9pZCk7CiBl eHRlcm4gdm9pZCBSZXBsaWNhdGlvblNsb3RBbHRlcihjb25zdCBjaGFyICpuYW1lLCBib29sIGZh aWxvdmVyKTsKIAotZXh0ZXJuIHZvaWQgUmVwbGljYXRpb25TbG90QWNxdWlyZShjb25zdCBjaGFy ICpuYW1lLCBib29sIG5vd2FpdCk7CitleHRlcm4gdm9pZCBSZXBsaWNhdGlvblNsb3RBY3F1aXJl KGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgbm93YWl0LAorCQkJCQkJCQkgICBib29sIGNoZWNrX2Zv cl90aW1lb3V0X2ludmFsaWRhdGlvbik7CiBleHRlcm4gdm9pZCBSZXBsaWNhdGlvblNsb3RSZWxl YXNlKHZvaWQpOwogZXh0ZXJuIHZvaWQgUmVwbGljYXRpb25TbG90Q2xlYW51cCh2b2lkKTsKIGV4 dGVybiB2b2lkIFJlcGxpY2F0aW9uU2xvdFNhdmUodm9pZCk7CkBAIC0yNjQsNiArMjY4LDggQEAg ZXh0ZXJuIGJvb2wgSW52YWxpZGF0ZU9ic29sZXRlUmVwbGljYXRpb25TbG90cyhSZXBsaWNhdGlv blNsb3RJbnZhbGlkYXRpb25DYXVzZQogCQkJCQkJCQkJCQkgICBYTG9nU2VnTm8gb2xkZXN0U2Vn bm8sCiAJCQkJCQkJCQkJCSAgIE9pZCBkYm9pZCwKIAkJCQkJCQkJCQkJICAgVHJhbnNhY3Rpb25J ZCBzbmFwc2hvdENvbmZsaWN0SG9yaXpvbik7CitleHRlcm4gYm9vbCBJbnZhbGlkYXRlSW5hY3Rp dmVSZXBsaWNhdGlvblNsb3QoUmVwbGljYXRpb25TbG90ICpzbG90LAorCQkJCQkJCQkJCQkgIGJv b2wgcGVyc2lzdF9zdGF0ZSk7CiBleHRlcm4gUmVwbGljYXRpb25TbG90ICpTZWFyY2hOYW1lZFJl cGxpY2F0aW9uU2xvdChjb25zdCBjaGFyICpuYW1lLCBib29sIG5lZWRfbG9jayk7CiBleHRlcm4g aW50CVJlcGxpY2F0aW9uU2xvdEluZGV4KFJlcGxpY2F0aW9uU2xvdCAqc2xvdCk7CiBleHRlcm4g Ym9vbCBSZXBsaWNhdGlvblNsb3ROYW1lKGludCBpbmRleCwgTmFtZSBuYW1lKTsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlY292ZXJ5L21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvbWVz b24uYnVpbGQKaW5kZXggNzEyOTI0YzJmYS4uMDQzN2FiNWM0NiAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVjb3ZlcnkvbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvbWVzb24uYnVp bGQKQEAgLTUyLDYgKzUyLDcgQEAgdGVzdHMgKz0gewogICAgICAgJ3QvMDQxX2NoZWNrcG9pbnRf YXRfcHJvbW90ZS5wbCcsCiAgICAgICAndC8wNDJfbG93X2xldmVsX2JhY2t1cC5wbCcsCiAgICAg ICAndC8wNDNfd2FsX3JlcGxheV93YWl0LnBsJywKKyAgICAgICd0LzA0NF9pbnZhbGlkYXRlX3Ns b3RzLnBsJywKICAgICBdLAogICB9LAogfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3Zlcnkv dC8wNDRfaW52YWxpZGF0ZV9zbG90cy5wbCBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDQ0X2ludmFs aWRhdGVfc2xvdHMucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNmYx Y2NjZWE1NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlY292ZXJ5L3QvMDQ0X2ludmFs aWRhdGVfc2xvdHMucGwKQEAgLTAsMCArMSwyNzQgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI0LCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFRlc3QgZm9yIHJlcGxpY2F0 aW9uIHNsb3RzIGludmFsaWRhdGlvbgordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9 PiAnYWxsJzsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgVGVzdDo6TW9yZTsKK3VzZSBUaW1lOjpIaVJlcyBxdyh1c2xl ZXApOworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFRlc3RjYXNlIHN0YXJ0OiBJbnZhbGlk YXRlIHN0cmVhbWluZyBzdGFuZGJ5J3Mgc2xvdCBhcyB3ZWxsIGFzIGxvZ2ljYWwKKyMgZmFpbG92 ZXIgc2xvdCBvbiBwcmltYXJ5IGR1ZSB0byByZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVv dXQuIEFsc28sCisjIGNoZWNrIHRoZSBsb2dpY2FsIGZhaWxvdmVyIHNsb3Qgc3luY2VkIG9uIHRv IHRoZSBzdGFuZGJ5IGRvZXNuJ3QgaW52YWxpZGF0ZQorIyB0aGUgc2xvdCBvbiBpdHMgb3duLCBi dXQgZ2V0cyB0aGUgaW52YWxpZGF0ZWQgc3RhdGUgZnJvbSB0aGUgcmVtb3RlIHNsb3Qgb24KKyMg dGhlIHByaW1hcnkuCisKKyMgSW5pdGlhbGl6ZSBwcmltYXJ5IG5vZGUKK215ICRwcmltYXJ5ID0g UG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwcmltYXJ5Jyk7CiskcHJpbWFyeS0+aW5p dChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7CisKKyMgQXZvaWQgY2hlY2twb2ludCBk dXJpbmcgdGhlIHRlc3QsIG90aGVyd2lzZSwgdGhlIHRlc3QgY2FuIGdldCB1bnByZWRpY3RhYmxl CiskcHJpbWFyeS0+YXBwZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHF7CitjaGVja3Bv aW50X3RpbWVvdXQgPSAxaAorYXV0b3ZhY3V1bSA9IG9mZgorfSk7CiskcHJpbWFyeS0+c3RhcnQ7 CisKKyMgVGFrZSBiYWNrdXAKK215ICRiYWNrdXBfbmFtZSA9ICdteV9iYWNrdXAnOworJHByaW1h cnktPmJhY2t1cCgkYmFja3VwX25hbWUpOworCisjIENyZWF0ZSBhIHN0YW5kYnkgbGlua2luZyB0 byB0aGUgcHJpbWFyeSB1c2luZyB0aGUgcmVwbGljYXRpb24gc2xvdAorbXkgJHN0YW5kYnkxID0g UG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdGFuZGJ5MScpOworJHN0YW5kYnkxLT5p bml0X2Zyb21fYmFja3VwKCRwcmltYXJ5LCAkYmFja3VwX25hbWUsIGhhc19zdHJlYW1pbmcgPT4g MSk7CisKK215ICRjb25uc3RyXzEgPSAkcHJpbWFyeS0+Y29ubnN0cjsKKyRzdGFuZGJ5MS0+YXBw ZW5kX2NvbmYoCisJJ3Bvc3RncmVzcWwuY29uZicsIHFxKAoraG90X3N0YW5kYnlfZmVlZGJhY2sg PSBvbgorcHJpbWFyeV9zbG90X25hbWUgPSAnc2IxX3Nsb3QnCitwcmltYXJ5X2Nvbm5pbmZvID0g JyRjb25uc3RyXzEgZGJuYW1lPXBvc3RncmVzJworKSk7CisKKyMgQ3JlYXRlIHN5bmMgc2xvdCBv biB0aGUgcHJpbWFyeQorJHByaW1hcnktPnBzcWwoJ3Bvc3RncmVzJywKKwlxe1NFTEVDVCBwZ19j cmVhdGVfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KCdsc3ViMV9zeW5jX3Nsb3QnLCAndGVzdF9k ZWNvZGluZycsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7fQorKTsKKworJHByaW1hcnktPnNhZmVfcHNx bCgKKwkncG9zdGdyZXMnLCBxcVsKKyAgICBTRUxFQ1QgcGdfY3JlYXRlX3BoeXNpY2FsX3JlcGxp Y2F0aW9uX3Nsb3Qoc2xvdF9uYW1lIDo9ICdzYjFfc2xvdCcpOworXSk7CisKKyRzdGFuZGJ5MS0+ c3RhcnQ7CisKK215ICRzdGFuZGJ5MV9sb2dzdGFydCA9IC1zICRzdGFuZGJ5MS0+bG9nZmlsZTsK KworIyBXYWl0IHVudGlsIHN0YW5kYnkgaGFzIHJlcGxheWVkIGVub3VnaCBkYXRhCiskcHJpbWFy eS0+d2FpdF9mb3JfY2F0Y2h1cCgkc3RhbmRieTEpOworCisjIFN5bmNocm9uaXplIHRoZSBwcmlt YXJ5IHNlcnZlciBzbG90cyB0byB0aGUgc3RhbmRieQorJHN0YW5kYnkxLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlNFTEVDVCBwZ19zeW5jX3JlcGxpY2F0aW9uX3Nsb3RzKCk7Iik7CisKKyMgQ29u ZmlybSB0aGF0IHRoZSBsb2dpY2FsIGZhaWxvdmVyIHNsb3QgaXMgY3JlYXRlZCBvbiB0aGUgc3Rh bmRieSBhbmQgaXMKKyMgZmxhZ2dlZCBhcyAnc3luY2VkJy4KK2lzKCAkc3RhbmRieTEtPnNhZmVf cHNxbCgKKwkJJ3Bvc3RncmVzJywKKwkJcXtTRUxFQ1QgY291bnQoKikgPSAxIEZST00gcGdfcmVw bGljYXRpb25fc2xvdHMKKwkJICBXSEVSRSBzbG90X25hbWUgPSAnbHN1YjFfc3luY19zbG90JyBB TkQgc3luY2VkIEFORCBOT1QgdGVtcG9yYXJ5O30KKwkpLAorCSJ0IiwKKwknbG9naWNhbCBzbG90 IGhhcyBzeW5jZWQgYXMgdHJ1ZSBvbiBzdGFuZGJ5Jyk7CisKK215ICRsb2dzdGFydCA9IC1zICRw cmltYXJ5LT5sb2dmaWxlOworCisjIFNldCB0aW1lb3V0IHNvIHRoYXQgdGhlIG5leHQgY2hlY2tw b2ludCB3aWxsIGludmFsaWRhdGUgdGhlIGluYWN0aXZlCisjIHJlcGxpY2F0aW9uIHNsb3QuCisk cHJpbWFyeS0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxWworICAgIEFMVEVSIFNZU1RFTSBT RVQgcmVwbGljYXRpb25fc2xvdF9pbmFjdGl2ZV90aW1lb3V0IFRPICcycyc7CitdKTsKKyRwcmlt YXJ5LT5yZWxvYWQ7CisKKyMgV2FpdCBmb3IgdGhlIGxvZ2ljYWwgZmFpbG92ZXIgc2xvdCB0byBi ZWNvbWUgaW5hY3RpdmUgb24gdGhlIHByaW1hcnkuIE5vdGUKKyMgdGhhdCBub2JvZHkgaGFzIGFj cXVpcmVkIHRoYXQgc2xvdCB5ZXQsIHNvIGR1ZSB0bworIyByZXBsaWNhdGlvbl9zbG90X2luYWN0 aXZlX3RpbWVvdXQgc2V0dGluZyBhYm92ZSBpdCBtdXN0IGdldCBpbnZhbGlkYXRlZC4KK3dhaXRf Zm9yX3Nsb3RfaW52YWxpZGF0aW9uKCRwcmltYXJ5LCAnbHN1YjFfc3luY19zbG90JywgJGxvZ3N0 YXJ0KTsKKworIyBTZXQgdGltZW91dCBvbiB0aGUgc3RhbmRieSBhbHNvIHRvIGNoZWNrIHRoZSBz eW5jZWQgc2xvdHMgZG9uJ3QgZ2V0CisjIGludmFsaWRhdGVkIGR1ZSB0byB0aW1lb3V0IG9uIHRo ZSBzdGFuZGJ5LgorJHN0YW5kYnkxLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXFbCisgICAg QUxURVIgU1lTVEVNIFNFVCByZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVvdXQgVE8gJzJz JzsKK10pOworJHN0YW5kYnkxLT5yZWxvYWQ7CisKKyMgTm93LCBzeW5jIHRoZSBsb2dpY2FsIGZh aWxvdmVyIHNsb3QgZnJvbSB0aGUgcmVtb3RlIHNsb3Qgb24gdGhlIHByaW1hcnkuCisjIE5vdGUg dGhhdCB0aGUgcmVtb3RlIHNsb3QgaGFzIGFscmVhZHkgYmVlbiBpbnZhbGlkYXRlZCBkdWUgdG8g aW5hY3RpdmUKKyMgdGltZW91dC4gTm93LCB0aGUgc3RhbmRieSBtdXN0IGFsc28gc2VlIGl0IGFz IGludmFsaWRhdGVkLgorJHN0YW5kYnkxLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBw Z19zeW5jX3JlcGxpY2F0aW9uX3Nsb3RzKCk7Iik7CisKKyMgV2FpdCBmb3IgdGhlIGluYWN0aXZl IHJlcGxpY2F0aW9uIHNsb3QgdG8gYmUgaW52YWxpZGF0ZWQuCiskc3RhbmRieTEtPnBvbGxfcXVl cnlfdW50aWwoCisJJ3Bvc3RncmVzJywgcXFbCisJU0VMRUNUIENPVU5UKHNsb3RfbmFtZSkgPSAx IEZST00gcGdfcmVwbGljYXRpb25fc2xvdHMKKwkJV0hFUkUgc2xvdF9uYW1lID0gJ2xzdWIxX3N5 bmNfc2xvdCcgQU5ECisJCWludmFsaWRhdGlvbl9yZWFzb24gPSAnaW5hY3RpdmVfdGltZW91dCc7 CitdKQorICBvciBkaWUKKyAgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciByZXBsaWNhdGlv biBzbG90IGxzdWIxX3N5bmNfc2xvdCBpbnZhbGlkYXRpb24gdG8gYmUgc3luY2VkIG9uIHN0YW5k YnkiOworCisjIFN5bmNlZCBzbG90IG11c3RuJ3QgZ2V0IGludmFsaWRhdGVkIG9uIHRoZSBzdGFu ZGJ5LCBpdCBtdXN0IHN5bmMgaW52YWxpZGF0aW9uCisjIGZyb20gdGhlIHByaW1hcnkuIFNvLCB3 ZSBtdXN0IG5vdCBzZWUgdGhlIHNsb3QncyBpbnZhbGlkYXRpb24gbWVzc2FnZSBpbiBzZXJ2ZXIK KyMgbG9nLgorb2soICEkc3RhbmRieTEtPmxvZ19jb250YWlucygKKwkJImludmFsaWRhdGluZyBv YnNvbGV0ZSByZXBsaWNhdGlvbiBzbG90IFwibHN1YjFfc3luY19zbG90XCIiLAorCQkkc3RhbmRi eTFfbG9nc3RhcnQpLAorCSdjaGVjayB0aGF0IHN5bmVkIHNsb3QgaGFzIG5vdCBiZWVuIGludmFs aWRhdGVkIG9uIHRoZSBzdGFuZGJ5Jyk7CisKKyMgU3RvcCBzdGFuZGJ5IHRvIG1ha2UgdGhlIHN0 YW5kYnkncyByZXBsaWNhdGlvbiBzbG90IG9uIHRoZSBwcmltYXJ5IGluYWN0aXZlCiskc3RhbmRi eTEtPnN0b3A7CisKKyMgV2FpdCBmb3IgdGhlIHN0YW5kYnkncyByZXBsaWNhdGlvbiBzbG90IHRv IGJlY29tZSBpbmFjdGl2ZQord2FpdF9mb3Jfc2xvdF9pbnZhbGlkYXRpb24oJHByaW1hcnksICdz YjFfc2xvdCcsICRsb2dzdGFydCk7CisKKyMgVGVzdGNhc2UgZW5kOiBJbnZhbGlkYXRlIHN0cmVh bWluZyBzdGFuZGJ5J3Mgc2xvdCBhcyB3ZWxsIGFzIGxvZ2ljYWwgZmFpbG92ZXIKKyMgc2xvdCBv biBwcmltYXJ5IGR1ZSB0byByZXBsaWNhdGlvbl9zbG90X2luYWN0aXZlX3RpbWVvdXQuIEFsc28s IGNoZWNrIHRoZQorIyBsb2dpY2FsIGZhaWxvdmVyIHNsb3Qgc3luY2VkIG9uIHRvIHRoZSBzdGFu ZGJ5IGRvZXNuJ3QgaW52YWxpZGF0ZSB0aGUgc2xvdCBvbgorIyBpdHMgb3duLCBidXQgZ2V0cyB0 aGUgaW52YWxpZGF0ZWQgc3RhdGUgZnJvbSB0aGUgcmVtb3RlIHNsb3Qgb24gdGhlIHByaW1hcnku CisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgVGVz dGNhc2Ugc3RhcnQ6IEludmFsaWRhdGUgbG9naWNhbCBzdWJzY3JpYmVyJ3Mgc2xvdCBkdWUgdG8K KyMgcmVwbGljYXRpb25fc2xvdF9pbmFjdGl2ZV90aW1lb3V0LgorCitteSAkcHVibGlzaGVyID0g JHByaW1hcnk7CisKKyMgUHJlcGFyZSBmb3IgdGhlIG5leHQgdGVzdAorJHB1Ymxpc2hlci0+c2Fm ZV9wc3FsKAorCSdwb3N0Z3JlcycsIHFxWworICAgIEFMVEVSIFNZU1RFTSBTRVQgcmVwbGljYXRp b25fc2xvdF9pbmFjdGl2ZV90aW1lb3V0IFRPICcwJzsKK10pOworJHB1Ymxpc2hlci0+cmVsb2Fk OworCisjIENyZWF0ZSBzdWJzY3JpYmVyIG5vZGUKK215ICRzdWJzY3JpYmVyID0gUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdWInKTsKKyRzdWJzY3JpYmVyLT5pbml0OworJHN1YnNj cmliZXItPnN0YXJ0OworCisjIENyZWF0ZSB0YWJsZXMKKyRwdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRlc3RfdGJsIChpZCBpbnQpIik7Ciskc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdGVzdF90YmwgKGlkIGludCki KTsKKworIyBJbnNlcnQgc29tZSBkYXRhCiskc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIklOU0VSVCBJTlRPIHRlc3RfdGJsIFZBTFVFUyAoZ2VuZXJhdGVfc2VyaWVzKDEsIDUp KTsiKTsKKworIyBTZXR1cCBsb2dpY2FsIHJlcGxpY2F0aW9uCitteSAkcHVibGlzaGVyX2Nvbm5z dHIgPSAkcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJHB1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgUFVCTElDQVRJT04gcHViIEZPUiBBTEwg VEFCTEVTIik7CiskcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJJ3Bvc3RncmVzJywgcXFbCisgICAg U0VMRUNUIHBnX2NyZWF0ZV9sb2dpY2FsX3JlcGxpY2F0aW9uX3Nsb3Qoc2xvdF9uYW1lIDo9ICds c3ViMV9zbG90JywgcGx1Z2luIDo9ICdwZ291dHB1dCcpOworXSk7CisKKyRzdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQVElPTiBzdWIgQ09OTkVDVElP TiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNBVElPTiBwdWIgV0lUSCAoc2xvdF9uYW1lID0g J2xzdWIxX3Nsb3QnLCBjcmVhdGVfc2xvdCA9IGZhbHNlKSIKKyk7CisKKyRzdWJzY3JpYmVyLT53 YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkcHVibGlzaGVyLCAnc3ViJyk7CisKK215ICRyZXN1 bHQgPQorICAkc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgRlJPTSB0ZXN0X3RibCIpOworCitpcygkcmVzdWx0LCBxcSg1KSwgImNoZWNrIGluaXRpYWwg Y29weSB3YXMgZG9uZSIpOworCisjIFByZXBhcmUgZm9yIHRoZSBuZXh0IHRlc3QKKyRwdWJsaXNo ZXItPnNhZmVfcHNxbCgKKwkncG9zdGdyZXMnLCBxcVsKKyAgICBBTFRFUiBTWVNURU0gU0VUIHJl cGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGltZW91dCBUTyAnMnMnOworXSk7CiskcHVibGlzaGVy LT5yZWxvYWQ7CisKKyRsb2dzdGFydCA9IC1zICRwdWJsaXNoZXItPmxvZ2ZpbGU7CisKKyMgU3Rv cCBzdWJzY3JpYmVyIHRvIG1ha2UgdGhlIHJlcGxpY2F0aW9uIHNsb3Qgb24gcHVibGlzaGVyIGlu YWN0aXZlCiskc3Vic2NyaWJlci0+c3RvcDsKKworIyBXYWl0IGZvciB0aGUgcmVwbGljYXRpb24g c2xvdCB0byBiZWNvbWUgaW5hY3RpdmUgYW5kIHRoZW4gaW52YWxpZGF0ZWQgZHVlIHRvCisjIHRp bWVvdXQuCit3YWl0X2Zvcl9zbG90X2ludmFsaWRhdGlvbigkcHVibGlzaGVyLCAnbHN1YjFfc2xv dCcsICRsb2dzdGFydCk7CisKKyMgVGVzdGNhc2UgZW5kOiBJbnZhbGlkYXRlIGxvZ2ljYWwgc3Vi c2NyaWJlcidzIHNsb3QgZHVlIHRvCisjIHJlcGxpY2F0aW9uX3Nsb3RfaW5hY3RpdmVfdGltZW91 dC4KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworc3ViIHdhaXRfZm9yX3Nsb3RfaW52YWxpZGF0 aW9uCit7CisJbXkgKCRub2RlLCAkc2xvdF9uYW1lLCAkb2Zmc2V0KSA9IEBfOworCW15ICRuYW1l ID0gJG5vZGUtPm5hbWU7CisKKwkjIFdhaXQgZm9yIHRoZSByZXBsaWNhdGlvbiBzbG90IHRvIGJl Y29tZSBpbmFjdGl2ZQorCSRub2RlLT5wb2xsX3F1ZXJ5X3VudGlsKAorCQkncG9zdGdyZXMnLCBx cVsKKwkJU0VMRUNUIENPVU5UKHNsb3RfbmFtZSkgPSAxIEZST00gcGdfcmVwbGljYXRpb25fc2xv dHMKKwkJCVdIRVJFIHNsb3RfbmFtZSA9ICckc2xvdF9uYW1lJyBBTkQgYWN0aXZlID0gJ2YnOwor CV0pCisJICBvciBkaWUKKwkgICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3IgcmVwbGljYXRp b24gc2xvdCB0byBiZWNvbWUgaW5hY3RpdmUiOworCisJIyBXYWl0IGZvciB0aGUgcmVwbGljYXRp b24gc2xvdCBpbmZvIHRvIGJlIHVwZGF0ZWQKKwkkbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgKKwkJ J3Bvc3RncmVzJywgcXFbCisJCVNFTEVDVCBDT1VOVChzbG90X25hbWUpID0gMSBGUk9NIHBnX3Jl cGxpY2F0aW9uX3Nsb3RzCisJCQlXSEVSRSBpbmFjdGl2ZV9zaW5jZSBJUyBOT1QgTlVMTAorCQkJ CUFORCBzbG90X25hbWUgPSAnJHNsb3RfbmFtZScgQU5EIGFjdGl2ZSA9ICdmJzsKKwldKQorCSAg b3IgZGllCisJICAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGluZm8gb2YgcmVwbGljYXRp b24gc2xvdCAkc2xvdF9uYW1lIHRvIGJlIHVwZGF0ZWQgb24gbm9kZSAkbmFtZSI7CisKKwljaGVj a19mb3Jfc2xvdF9pbnZhbGlkYXRpb25faW5fc2VydmVyX2xvZygkbm9kZSwgJHNsb3RfbmFtZSwg JG9mZnNldCk7CisKKwkjIFdhaXQgZm9yIHRoZSBpbmFjdGl2ZSByZXBsaWNhdGlvbiBzbG90IHRv IGJlIGludmFsaWRhdGVkCisJJG5vZGUtPnBvbGxfcXVlcnlfdW50aWwoCisJCSdwb3N0Z3Jlcycs IHFxWworCQlTRUxFQ1QgQ09VTlQoc2xvdF9uYW1lKSA9IDEgRlJPTSBwZ19yZXBsaWNhdGlvbl9z bG90cworCQkJV0hFUkUgc2xvdF9uYW1lID0gJyRzbG90X25hbWUnIEFORAorCQkJaW52YWxpZGF0 aW9uX3JlYXNvbiA9ICdpbmFjdGl2ZV90aW1lb3V0JzsKKwldKQorCSAgb3IgZGllCisJICAiVGlt ZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGluYWN0aXZlIHJlcGxpY2F0aW9uIHNsb3QgJHNsb3Rf bmFtZSB0byBiZSBpbnZhbGlkYXRlZCBvbiBub2RlICRuYW1lIjsKKworCSMgQ2hlY2sgdGhhdCB0 aGUgaW52YWxpZGF0ZWQgc2xvdCBjYW5ub3QgYmUgYWNxdWlyZWQKKwlteSAoJHJlc3VsdCwgJHN0 ZG91dCwgJHN0ZGVycik7CisKKwkoJHJlc3VsdCwgJHN0ZG91dCwgJHN0ZGVycikgPSAkcHJpbWFy eS0+cHNxbCgKKwkJJ3Bvc3RncmVzJywgcXFbCisJCQlTRUxFQ1QgcGdfcmVwbGljYXRpb25fc2xv dF9hZHZhbmNlKCckc2xvdF9uYW1lJywgJzAvMScpOworCV0pOworCisJb2soICRzdGRlcnIgPX4K KwkJICAvY2FuIG5vIGxvbmdlciBnZXQgY2hhbmdlcyBmcm9tIHJlcGxpY2F0aW9uIHNsb3QgIiRz bG90X25hbWUiLywKKwkJImRldGVjdGVkIGVycm9yIHVwb24gdHJ5aW5nIHRvIGFjcXVpcmUgaW52 YWxpZGF0ZWQgc2xvdCAkc2xvdF9uYW1lIG9uIG5vZGUgJG5hbWUiCisJICApCisJICBvciBkaWUK KwkgICJjb3VsZCBub3QgZGV0ZWN0IGVycm9yIHVwb24gdHJ5aW5nIHRvIGFjcXVpcmUgaW52YWxp ZGF0ZWQgc2xvdCAkc2xvdF9uYW1lIjsKK30KKworIyBDaGVjayBmb3IgaW52YWxpZGF0aW9uIG9m IHNsb3QgaW4gc2VydmVyIGxvZworc3ViIGNoZWNrX2Zvcl9zbG90X2ludmFsaWRhdGlvbl9pbl9z ZXJ2ZXJfbG9nCit7CisJbXkgKCRub2RlLCAkc2xvdF9uYW1lLCAkb2Zmc2V0KSA9IEBfOworCW15 ICRpbnZhbGlkYXRlZCA9IDA7CisKKwlmb3IgKG15ICRpID0gMDsgJGkgPCAxMCAqICRQb3N0Z3Jl U1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0OyAkaSsrKQorCXsKKwkJJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ0hFQ0tQT0lOVCIpOworCQlpZiAoJG5vZGUtPmxvZ19jb250 YWlucygKKwkJCQkiaW52YWxpZGF0aW5nIG9ic29sZXRlIHJlcGxpY2F0aW9uIHNsb3QgXCIkc2xv dF9uYW1lXCIiLAorCQkJCSRvZmZzZXQpKQorCQl7CisJCQkkaW52YWxpZGF0ZWQgPSAxOworCQkJ bGFzdDsKKwkJfQorCQl1c2xlZXAoMTAwXzAwMCk7CisJfQorCW9rKCRpbnZhbGlkYXRlZCwKKwkJ ImNoZWNrIHRoYXQgc2xvdCAkc2xvdF9uYW1lIGludmFsaWRhdGlvbiBoYXMgYmVlbiBsb2dnZWQi KTsKK30KKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjM0LjEKCg== --000000000000a57c6d0615530d32--