From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-4322.protonmail.ch (mail-4322.protonmail.ch [185.70.43.22]) by sourceware.org (Postfix) with ESMTPS id A3E693858CDA for ; Sun, 5 Nov 2023 15:06:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A3E693858CDA Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=protonmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=protonmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org A3E693858CDA Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=185.70.43.22 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699196783; cv=none; b=nCRoeEJU7ADvHNCmSM//SpUTuuN1r3CZeWC9cldT/ECnxFRyxo6B7jBljz2vxH5l/ivzWjgvQsxd5a57oTiLzi3ECwh9OkfNG7N3IvB1i5kArIZMpZFGZpY1hYn/UHSCJ9yC46Sivz/X18gdxnh34zbQeo9isnUn+vGex3E5UVw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699196783; c=relaxed/simple; bh=OD2Pq6jdW8U70+Z0IrfEGAha5qJ5Y9vZClCd4oR32GA=; h=DKIM-Signature:Date:To:From:Subject:Message-ID:MIME-Version; b=sYhfoH4ZGwu9KUANjoTw6ApIJ94yMHCBmQZSVBt0WA1Rz7GvDYh2X5m3jz8rY41klG68H+BIZqqJ1F/K8xyODkt2EFzz1jY/cyXvuQiIgCtTXgR+2/hwMcVvmgO+GvmLvd2Ckdef5x5iJA/aDzNfT91HqIegGjEfDf3g9s0xmZQ= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1699196774; x=1699455974; bh=OD2Pq6jdW8U70+Z0IrfEGAha5qJ5Y9vZClCd4oR32GA=; h=Date:To:From:Cc:Subject:Message-ID:Feedback-ID:From:To:Cc:Date: Subject:Reply-To:Feedback-ID:Message-ID:BIMI-Selector; b=ipXacX9vrHLrXj/0WpweAPoCysVFVh/bx127ZNnDmYUS56ZcI7Mh0w47CMdHulJSO 3zvXFjRpK2X6TqXgM/iL8UsrXFTFGLC2skDJeNyi9vmUS6rCi4CcaxhQtTgzIzh7zh e2uXpHQlzQbu7yx4wapy6WSeTR3k1ownNqeH80RQeogBPVTd6hdARAbLAewO6I0xXG jLQUANwxYm9i80a8OC+emODHpSGmtAl367sTjwSEuNh/XllpmESjhwjUr85F5mDAud 0RiFKySmmYBzFUM200e/W3TaOAz2BZwv0IR5V8o0WMDnNjCRZ6eAlanMj+SbZ43HIi tv5HYo9jcl5mA== Date: Sun, 05 Nov 2023 15:06:09 +0000 To: waffl3x From: waffl3x Cc: Jason Merrill , "gcc-patches@gcc.gnu.org" Subject: [PATCH v4 1/2] c++: Initial support for P0847R7 (Deducing this) [PR102609] Message-ID: Feedback-ID: 14591686:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_TSNbO4fUsrsmWVSGcqHgiraI3NWIxzPrxylElkFAw" X-Spam-Status: No, score=-9.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --b1_TSNbO4fUsrsmWVSGcqHgiraI3NWIxzPrxylElkFAw Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Bootstrapped and tested on x86_64-linux with no regressions. I originally threw this e-mail together last night, but threw in the towel when I thought I saw tests failing and went to sleep. I did a proper bootstrap and comparison and whatnot and found that there were thankfully no regressions. Anyhow, the first patch feels ready for trunk, the second needs at least one review, I'll write more on that in the second e-mail though. I put quite a lot into the commit message, in hindsight I think I may have gone overboard, but that isn't something I'm going to rewrite at the moment. I really want to get these patches up for review so they can be finalized. I'm also including my usual musings on things that came up as I was polishing off the patches. I reckon some of them aren't all that important right now but I would rather toss them in here than forget about them. I'm starting to think that we should have a general macro that indicates whether an implicit object argument should be passed in the call. It might be more clear than what is currently present. I've also noticed that there's a fair amount of places where instead of using DECL_NONSTATIC_MEMBER_FUNCTION_P the code checks if tree_code of the type is a METHOD_TYPE, which is exactly what the aforementioned macro does. In build_min_non_dep_op_overload I reversed the branches of a condition because it made more sense with METHOD_TYPE first so it doesn't have to take xobj member functions into account on both branches. I am slightly concerned that flipping the branch around might have consequences, hence why I am mentioning it. Realistically I think it's probably fine though. I have a test prepared for diagnosing virtual specifiers on xobj member functions, but it's got some issues so I won't be including it with the following diagnostic patch. Diagnostics for virtual specifiers are still implemented, it's just the test that is having trouble. I mostly had a hard time working out edge cases, and the standard doesn't actually properly specify what the criteria for overriding a function is so I've been stumped on what behavior I want it to have. So for the time being, it only diagnoses uses of virtual on xobj member functions, while errors for final and override are handled by code that is already present. This can result in multiple errors, but again, I don't know how I want to handle it yet, especially since the standard doesn't specify this stuff very well. BTW let me know if there's anything you would prefer to be done differently in the changelog, I am still having trouble writing them and I'm usually uncertain if I'm writing them properly. Alex --b1_TSNbO4fUsrsmWVSGcqHgiraI3NWIxzPrxylElkFAw Content-Type: text/x-patch; name=0001-c-Initial-support-for-C-23-P0847R7-Deducing-this-PR1.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0001-c-Initial-support-for-C-23-P0847R7-Deducing-this-PR1.patch RnJvbSBlNzMwZGNiYTUxNTAzNDQ2Y2MzNjI5MDlmY2FiMTkzNjE5NzBiNDQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB3YWZmbDN4IDx3YWZmbDN4QHByb3Rvbm1haWwuY29tPgpEYXRl OiBTYXQsIDQgTm92IDIwMjMgMDU6MzU6MTAgLTA2MDAKU3ViamVjdDogW1BBVENIIDEvMl0gYysr OiBJbml0aWFsIHN1cHBvcnQgZm9yIEMrKzIzIFAwODQ3UjcgKERlZHVjaW5nIHRoaXMpCiBbUFIx MDI2MDldCgpUaGlzIHBhdGNoIGltcGxlbWVudHMgaW5pdGlhbCBzdXBwb3J0IGZvciBQMDg0N1I3 IHdpdGhvdXQgZGlhZ25vc3RpY3MuICBNeSBnb2FsCndhcyB0byBtaW5pbWl6ZSBjaGFuZ2VzIHRv IHRoZSBleGlzdGluZyBjb2RlLiAgVG8gYWNoaWV2ZSB0aGlzIEkgY2hvc2UgdG8gdHJlYXQKeG9i aiBtZW1iZXIgZnVuY3Rpb25zIGFzIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zLCB3aGlsZSBvcHRp bmcgaW50byBtZW1iZXIKZnVuY3Rpb24gaGFuZGxpbmcgd2hlbiBuZWNlc3NhcnkuICBUaGlzIHNl ZW1lZCB0byBiZSB0aGUgYmV0dGVyIGNob2ljZSBzaW5jZQptb3N0IG9mIHRoZSB0aW1lIHRoZXkg YXJlIG1vcmUgbGlrZSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucy4KClRoaXMgaXMgYWNoaWV2ZWQg YnkgaW5oaWJpdGluZyBjb252ZXJzaW9uIG9mIHRoZSBkZWNsYXJhdGlvbidzIHR5cGUgZnJvbQpG VU5DVElPTl9UWVBFIHRvIE1FVEhPRF9UWVBFLiAgTW9zdCBpZiBub3QgZXZlcnl0aGluZyBzZWVt cyB0byBkaWZmZXJlbnRpYXRlCmJldHdlZW4gbWVtYmVyIGZ1bmN0aW9ucyBhbmQgc3RhdGljIG1l bWJlciBmdW5jdGlvbnMgYnkgaW5zcGVjdGluZyB0aGUKRlVOQ1RJT05fREVDTCdzIHR5cGUsIHNv IGZvcmNpbmcgdGhpcyBpcyBzdWZmaWNpZW50LiAgQW4geG9iaiBtZW1iZXIgZnVuY3Rpb24KaXMg YW55IG1lbWJlciBmdW5jdGlvbiB0aGF0IGlzIGRlY2xhcmVkIHdpdGggYW4geG9iaiBwYXJhbWV0 ZXIgYXMgaXQncyBmaXJzdApwYXJhbWV0ZXIuICBUaGlzIGluZm9ybWF0aW9uIGlzIHBhc3NlZCB0 aHJvdWdoIHRoZSBkZWNsYXJhdG9yJ3MgcGFyYW1ldGVyIGxpc3QsCnN0b3JlZCBpbiB0aGUgcHVy cG9zZSBvZiB0aGUgcGFyYW1ldGVyJ3MgdHJlZV9saXN0IG5vZGUuICBOb3JtYWxseSB0aGlzIGlz IHVzZWQKdG8gc3RvcmUgZGVmYXVsdCBhcmd1bWVudHMsIGJ1dCBhcyBkZWZhdWx0IGFyZ3VtZW50 cyBhcmUgbm90IGFsbG93ZWQgZm9yIHhvYmoKcGFyYW1ldGVycyBpdCBpcyBmaW5lIGZvciB1cyB0 byBoaWphY2sgaXQuICBCeSB1dGlsaXppbmcgdGhpcyB3ZSBjYW4gcGFzcyB0aGlzCmluZm9ybWF0 aW9uIGZyb20gY3BfcGFyc2VyX3BhcmFtZXRlcl9kZWNsYXJhdGlvbiBvdmVyIHRvIGdyb2tkZWNs YXJhdG9yIHdpdGhvdXQKYWRkaW5nIGFueXRoaW5nIG5ldyB0byB0aGUgdHJlZSBzdHJ1Y3RzLgoK V2Ugc3RpbGwgbmVlZCB0byBkaWZmZXJlbnRpYXRlIHRoaXMgbmV3IGZ1bmN0aW9uIHZhcmlldHkg ZnJvbSBzdGF0aWMgbWVtYmVyCmZ1bmN0aW9ucyBhbmQgcmVndWxhciBmdW5jdGlvbnMsIGFuZCBz aW5jZSB0aGlzIGluZm9ybWF0aW9uIG5lZWRzIHRvIHN0aWNrIHRvCnRoZSBkZWNsYXJhdGlvbiB3 ZSBzaG91bGQgc2VsZWN0IGEgbW9yZSBjb25jcmV0ZSBwbGFjZSB0byBzdG9yZSBpdC4gIFVubGlr ZSB0aGUKcHJldmlvdXMgaGFjayBmb3IgcGFyYW1ldGVycywgd2UgaW5zdGVhZCBhZGQgYSBmbGFn IHRvIGxhbmdfZGVjbF9mbiwgIHRoZSBvbmx5Cm1vZGlmaWNhdGlvbiB0aGlzIHBhdGNoIG1ha2Vz IHRvIGFueSB0cmVlIGRhdGEtc3RydWN0dXJlcy4gIFdlIGNvdWxkIHByb2JhYmx5CnRyeSB0byBz dGljayB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIGRlY2wncyBwYXJhbWV0ZXJzIHNvbWV3aGVyZSwg YnV0IEkgdGhpbmsgYQpwcm9wZXIgZmxhZyBpcyBqdXN0aWZpZWQuICBUaGUgbmV3IGZsYWcgY2Fu IGJlIHNldCBhbmQgY2xlYXJlZCB0aHJvdWdoCkRFQ0xfRlVOQ1RJT05fWE9CSl9GTEFHLCBpdCBp cyBpbnZhbGlkIHRvIHVzZSB0aGlzIHdpdGggYW55dGhpbmcgb3RoZXIgdGhhbgpGVU5DVElPTl9E RUNMIG5vZGVzLiAgRm9yIGluc3BlY3RpbmcgdGhlIHZhbHVlIG9mIHRoaXMgZmxhZwpERUNMX1hP QkpfTUVNQkVSX0ZVTkNfUCBzaG91bGQgYmUgdXNlZCwgdGhpcyBtYWNybyBpcyBzYWZlIHRvIHVz ZSB3aXRoIGFueSBub2RlCnR5cGUgYW5kIHdpbGwgaGFybWxlc3NseSBldmFsdWF0ZSB0byBmYWxz ZSBmb3IgaW52YWxpZCBub2RlIHR5cGVzLgoKSXQgbmVlZHMgdG8gYmUgbm90ZWQgdGhhdCB3ZSBj YW4gbm90IGFkZCBjaGVja2luZyBmb3IgeG9iaiBtZW1iZXIgZnVuY3Rpb25zIHRvCkRFQ0xfTk9O U1RBVElDX01FTUJFUl9GVU5DVElPTl9QIGFzIGl0IGlzIHVzZWQgaW4gY3Atb2JqY3AtY29tbW9u LmNjLiAgV2hpbGUgaXQKbW9zdCBsaWtlbHkgd291bGQgYmUgZmluZSwgaXQncyBwb3NzaWJsZSBp dCBjb3VsZCBoYXZlIHVuaW50ZW5kZWQgZWZmZWN0cy4gIEluCmxpZ2h0IG9mIHRoaXMsIHdlIHdp bGwgbW9zdCBsaWtlbHkgbmVlZCB0byBkbyBzb21lIHJlZmFjdG9yaW5nLCBwb3NzaWJseQpyZW5h bWluZyBhbmQgcmVwbGFjaW5nIGl0LiAgSW4gY29udHJhc3QsIERFQ0xfRlVOQ1RJT05fTUVNQkVS X1AgaXMgbm90IHVzZWQKb3V0c2lkZSBvZiBDKysgY29kZSwgc28gd2UgY2FuIGFkZCBjaGVja2lu ZyBmb3IgeG9iaiBtZW1iZXIgZnVuY3Rpb25zIHRvIGl0CndpdGhvdXQgYW55IGNvbmNlcm5zLgoK VGhlcmUgYXJlIGEgZmV3IGtub3duIGlzc3VlcyBzdGlsbCBwcmVzZW50IGluIHRoaXMgcGF0Y2gu ICBNb3N0IGltcG9ydGFudGx5LAp0aGUgaW1wbGljaXQgb2JqZWN0IGFyZ3VtZW50IGZhaWxzIHRv IGNvbnZlcnQgd2hlbiBwYXNzZWQgdG8gYnktdmFsdWUgeG9iagpwYXJhbWV0ZXJzLiAgVGhpcyBv Y2N1cnMgYm90aCBmb3IgeG9iaiBwYXJhbWV0ZXJzIHRoYXQgbWF0Y2ggdGhlIGFyZ3VtZW50IHR5 cGUKYW5kIHhvYmogcGFyYW1ldGVycyB0aGF0IGFyZSB1bnJlbGF0ZWQgdG8gdGhlIG9iamVjdCB0 eXBlLCBidXQgaGF2ZSB2YWxpZApjb252ZXJzaW9ucyBhdmFpbGFibGUuICBUaGlzIGJlaGF2aW9y IGNhbiBiZSBvYnNlcnZlZCBpbiB0aGUKZXhwbGljaXQtb2JqLWJ5LXZhbHVlWzEtM10uQyB0ZXN0 cy4gIFRoZSBpbXBsaWNpdCBvYmplY3QgYXJndW1lbnQgYXBwZWFycyB0byBiZQpzaW1wbHkgcmVp bnRlcnByZXRlZCBpbnN0ZWFkIG9mIGFueSBjb252ZXJzaW9uIGFwcGxpZWQuICBUaGlzIGlzIGVs YWJvcmF0ZWQgb24KaW4gdGhlIHRlc3QgY2FzZXMuICBEZXNwaXRlIHRoaXMsIGNhbGxzIHdoZXJl IHRoZXJlIGlzIG5vIHZhbGlkIGNvbnZlcnNpb24KYXZhaWxhYmxlIGFyZSBjb3JyZWN0bHkgcmVq ZWN0ZWQsIHdoaWNoIEkgZmluZCBzdXJwcmlzaW5nLiAgVGhlCmV4cGxpY2l0LW9iai1ieS12YWx1 ZTQuQyB0ZXN0Y2FzZSBkZW1vbnN0cmF0ZXMgdGhpcyBvZGQgYnV0IGNvcnJlY3QgYmVoYXZpb3Iu Ck90aGVyIHRoYW4gdGhpcywgbGFtYmRhcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQsIGFuZCB0aGVy ZSBpcyBzb21lIG91dHN0YW5kaW5nCm9kZCBiZWhhdmlvciB3aGVyZSBpbnZhbGlkIGNhbGxzIHRv IG9wZXJhdG9ycyBhcmUgaW1wcm9wZXJseSBhY2NlcHRlZC4gIFRoZQp0ZXN0IGZvciB0aGlzIHV0 aWxpemVzIHJlcXVpcmVzIGV4cHJlc3Npb25zIHRvIG9wZXJhdGUgdGhvdWdoIHNvIGl0J3MgcG9z c2libGUKdGhhdCB0aGUgcHJvYmxlbXMgb3JpZ2luYXRlIGZyb20gdGhlcmUsIGJ1dCBJIGhhdmUg YSBodW5jaCB0aGV5IGFyZW4ndApyZXNwb25zaWJsZS4gIFNlZSBleHBsaWNpdC1vYmotb3BzLXJl cXVpcmVzLW1lbS5DIGFuZApleHBsaWNpdC1vYmotb3BzLXJlcXVpcmVzLW5vbi1tZW0uQyBmb3Ig dGhvc2UgdGVzdHMuCgpPbmUgb2YgdGhlIG1vcmUgaW52YXNpdmUgY2hhbmdlcyBJIGNob3NlIHRv IG1ha2UgaXMgaW4KYnVpbGRfbWluX25vbl9kZXBfb3Bfb3ZlcmxvYWQsIEkgZmxpcHBlZCB0aGUg aWYgYnJhbmNoZXMgYmVjYXVzZSB0aGUgY29uZGl0aW9ucwptYWtlIHNpZ25pZmljYW50bHkgbW9y ZSBzZW5zZSB3aGVuIE1FVEhPRF9UWVBFIGlzIHRlc3RlZCBmb3IgZmlyc3QuICBJdCBkaWQgbm90 CmFwcGVhciB0aGF0IHRoZSBwcmV2aW91cyBvcmRlcmluZyB3YXMgZm9yIGFueSBwYXJ0aWN1bGFy IHB1cnBvc2Ugc28gSSBmZWx0IGl0CndhcyBiZXR0ZXIgdG8gZmxpcCBpdCB0aGFuIG1ha2UgdGhl IGNvbmRpdGlvbnMgc2lnbmlmaWNhbnRseSBtb3JlIGNvbmZ1c2luZy4gIEkKZGlkIHdhbnQgdG8g bm90ZSB0aGlzIGNoYW5nZSBpbiBwYXJ0aWN1bGFyIGp1c3QgaW4gY2FzZS4KCglQUiBjKysvMTAy NjA5CgpnY2MvY3AvQ2hhbmdlTG9nOgoKCVBSIGMrKy8xMDI2MDkKCUluaXRpYWwgc3VwcG9ydCBm b3IgQysrMjMgUDA4NDdSNyAtIERlZHVjaW5nIHRoaXMuCgkqIGNhbGwuY2MgKGFkZF9jYW5kaWRh dGVzKTogQ2hlY2sgaWYgZm4gaXMgYW4geG9iaiBtZW1iZXIgZnVuY3Rpb24uCgkoYnVpbGRfb3Zl cl9jYWxsKTogRGl0dG8uCgkqIGNwLXRyZWUuaCAoc3RydWN0IGxhbmdfZGVjbF9mbjo6eG9ial9m dW5jKTogTmV3IGRhdGEgbWVtYmVyLgoJKERFQ0xfRlVOQ1RJT05fWE9CSl9GTEFHKTogRGVmaW5l LgoJKERFQ0xfWE9CSl9NRU1CRVJfRlVOQ19QKTogRGVmaW5lLgoJKERFQ0xfRlVOQ1RJT05fTUVN QkVSX1ApOiBBZGQgY2hlY2sgZm9yIHhvYmogbWVtYmVyIGZ1bmN0aW9ucy4KCShlbnVtIGNwX2Rl Y2xfc3BlYyk6IEFkZCBkc190aGlzLgoJKiBkZWNsLmNjIChncm9rZm5kZWNsKTogTmV3IHBhcmFt IFhPQkpfRlVOQ19QLCBmb3IgeG9iaiBtZW1iZXIKCWZ1bmN0aW9ucyBzZXQgREVDTF9GVU5DVElP Tl9YT0JKX0ZMQUcgYW5kIGRvbid0IHNldAoJREVDTF9TVEFUSUNfRlVOQ1RJT05fUC4KCShncm9r ZGVjbGFyYXRvcik6IENoZWNrIGZvciB4b2JqIHBhcmFtLCBjbGVhciBpdCdzIHB1cnBvc2UgYW5k IHNldAoJaXNfeG9ial9tZW1iZXJfZnVuY3Rpb24gaWYgaXQgaXMgcHJlc2VudC4gIFdoZW4gZmxh ZyBzZXQsIGRvbid0IGNoYW5nZQogICAgICAgIHR5cGUgdG8gTUVUSE9EX1RZUEUsIGtlZXAgaXQg YXMgRlVOQ1RJT05fVFlQRS4KCUFkanVzdCBjYWxsIHRvIGdyb2tmbmRlY2wsIHBhc3MgaXNfeG9i al9tZW1iZXJfZnVuY3Rpb24uCgkoZ3Jva19vcF9wcm9wZXJ0aWVzKTogVHJlYXQgeG9iaiBtZW1i ZXIgZnVuY3Rpb25zIGFzIGlvYmogbWVtYmVyCglmdW5jdGlvbnMuCgkqIHBhcnNlci5jYyAoY3Bf cGFyc2VyX2RlY2xfc3BlY2lmaWVyX3NlcSk6IEhhbmRsZSAidGhpcyIgc3BlY2lmaWVyLgoJKGNw X3BhcnNlcl9wYXJhbWV0ZXJfZGVjbGFyYXRpb24pOiBXaGVuICJ0aGlzIiBkZWNsIHNwZWMgcHJl c2VudCwgc2V0CglkZWZhdWx0X2FyZ3VtZW50IHRvIHRoaXNfaWRlbnRpZmllci4KCShzZXRfYW5k X2NoZWNrX2RlY2xfc3BlY19sb2MpIDxkZWNsX3NwZWNfbmFtZXM+OiBBZGQgInRoaXMiLgoJKiB0 cmVlLmNjIChidWlsZF9taW5fbm9uX2RlcF9vcF9vdmVybG9hZCk6IEZsaXAgaWYgYnJhbmNoZXMs IHRyZWF0Cgl4b2JqIG1lbWJlciBmdW5jdGlvbnMgYXMgaW9iaiBtZW1iZXIgZnVuY3Rpb25zLgoJ KiB0eXBlY2suY2MgKGNwX2J1aWxkX2FkZHJfZXhwcl8xKTogSGFuZGxlIHhvYmogbWVtYmVyIGZ1 bmN0aW9ucwoJd2l0aG91dCBvdmVybG9hZHMuCgpnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoKCglQ UiBjKysvMTAyNjA5CglJbml0aWFsIHN1cHBvcnQgZm9yIEMrKzIzIFAwODQ3UjcgLSBEZWR1Y2lu ZyB0aGlzLgoJKiBnKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqLWJhc2ljMS5DOiBOZXcgdGVzdC4K CSogZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iai1iYXNpYzIuQzogTmV3IHRlc3QuCgkqIGcrKy5k Zy9jcHAyMy9leHBsaWNpdC1vYmotYnktdmFsdWUxLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY3Bw MjMvZXhwbGljaXQtb2JqLWJ5LXZhbHVlMi5DOiBOZXcgdGVzdC4KCSogZysrLmRnL2NwcDIzL2V4 cGxpY2l0LW9iai1ieS12YWx1ZTMuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jcHAyMy9leHBsaWNp dC1vYmotYnktdmFsdWU0LkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY3BwMjMvZXhwbGljaXQtb2Jq LWxhbWJkYTEuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jcHAyMy9leHBsaWNpdC1vYmotb3BzLW1l bS1hcnJvdy5DOiBOZXcgdGVzdC4KCSogZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iai1vcHMtbWVt LWFzc2lnbm1lbnQuQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jcHAyMy9leHBsaWNpdC1vYmotb3Bz LW1lbS1jYWxsLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqLW9wcy1t ZW0tc3Vic2NyaXB0LkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqLW9w cy1ub24tbWVtLWRlcC5DOiBOZXcgdGVzdC4KCSogZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iai1v cHMtbm9uLW1lbS1ub24tZGVwLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY3BwMjMvZXhwbGljaXQt b2JqLW9wcy1ub24tbWVtLmg6IE5ldyB0ZXN0LgoJKiBnKysuZGcvY3BwMjMvZXhwbGljaXQtb2Jq LW9wcy1yZXF1aXJlcy1tZW0uQzogTmV3IHRlc3QuCgkqIGcrKy5kZy9jcHAyMy9leHBsaWNpdC1v Ymotb3BzLXJlcXVpcmVzLW5vbi1tZW0uQzogTmV3IHRlc3QuCgpTaWduZWQtb2ZmLWJ5OiB3YWZm bDN4IDx3YWZmbDN4QHByb3Rvbm1haWwuY29tPgotLS0KIGdjYy9jcC9jYWxsLmNjICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgOSArLQogZ2NjL2NwL2NwLXRyZWUuaCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgIDI1ICstCiBnY2MvY3AvZGVjbC5jYyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgNDQgKysrLQogZ2NjL2NwL3BhcnNlci5jYyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgIDIwICstCiBnY2MvY3AvdHJlZS5jYyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgMjYgKy0KIGdjYy9jcC90eXBlY2suY2MgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgNiArCiAuLi4vZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9i ai1iYXNpYzEuQyAgICAgICAgfCAxMTMgKysrKysrKysrCiAuLi4vZysrLmRnL2NwcDIzL2V4cGxp Y2l0LW9iai1iYXNpYzIuQyAgICAgICAgfCAgMjcgKysrCiAuLi4vZysrLmRnL2NwcDIzL2V4cGxp Y2l0LW9iai1ieS12YWx1ZTEuQyAgICAgfCAgNDkgKysrKwogLi4uL2crKy5kZy9jcHAyMy9leHBs aWNpdC1vYmotYnktdmFsdWUyLkMgICAgIHwgIDU5ICsrKysrCiAuLi4vZysrLmRnL2NwcDIzL2V4 cGxpY2l0LW9iai1ieS12YWx1ZTMuQyAgICAgfCAgNDIgKysrKwogLi4uL2crKy5kZy9jcHAyMy9l eHBsaWNpdC1vYmotYnktdmFsdWU0LkMgICAgIHwgIDE5ICsrCiAuLi4vZysrLmRnL2NwcDIzL2V4 cGxpY2l0LW9iai1sYW1iZGExLkMgICAgICAgfCAgMTEgKwogLi4uL2crKy5kZy9jcHAyMy9leHBs aWNpdC1vYmotb3BzLW1lbS1hcnJvdy5DIHwgIDI3ICsrKwogLi4uL2NwcDIzL2V4cGxpY2l0LW9i ai1vcHMtbWVtLWFzc2lnbm1lbnQuQyAgIHwgIDI2ICsrCiAuLi4vZysrLmRnL2NwcDIzL2V4cGxp Y2l0LW9iai1vcHMtbWVtLWNhbGwuQyAgfCAgMzkgKysrCiAuLi4vY3BwMjMvZXhwbGljaXQtb2Jq LW9wcy1tZW0tc3Vic2NyaXB0LkMgICAgfCAgMzkgKysrCiAuLi4vY3BwMjMvZXhwbGljaXQtb2Jq LW9wcy1ub24tbWVtLWRlcC5DICAgICAgfCAgNTcgKysrKysKIC4uLi9jcHAyMy9leHBsaWNpdC1v Ymotb3BzLW5vbi1tZW0tbm9uLWRlcC5DICB8ICA1NiArKysrKwogLi4uL2crKy5kZy9jcHAyMy9l eHBsaWNpdC1vYmotb3BzLW5vbi1tZW0uaCAgIHwgMjAyICsrKysrKysrKysrKysrKwogLi4uL2Nw cDIzL2V4cGxpY2l0LW9iai1vcHMtcmVxdWlyZXMtbWVtLkMgICAgIHwgMTcyICsrKysrKysrKysr KysKIC4uLi9jcHAyMy9leHBsaWNpdC1vYmotb3BzLXJlcXVpcmVzLW5vbi1tZW0uQyB8IDIyOSAr KysrKysrKysrKysrKysrKysKIDIyIGZpbGVzIGNoYW5nZWQsIDEyNjYgaW5zZXJ0aW9ucygrKSwg MzEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv Y3BwMjMvZXhwbGljaXQtb2JqLWJhc2ljMS5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqLWJhc2ljMi5DCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqLWJ5LXZhbHVlMS5DCiBj cmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2Jq LWJ5LXZhbHVlMi5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3Bw MjMvZXhwbGljaXQtb2JqLWJ5LXZhbHVlMy5DCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqLWJ5LXZhbHVlNC5DCiBjcmVhdGUgbW9kZSAx MDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqLWxhbWJkYTEuQwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9i ai1vcHMtbWVtLWFycm93LkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5k Zy9jcHAyMy9leHBsaWNpdC1vYmotb3BzLW1lbS1hc3NpZ25tZW50LkMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAyMy9leHBsaWNpdC1vYmotb3BzLW1lbS1jYWxs LkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAyMy9leHBsaWNp dC1vYmotb3BzLW1lbS1zdWJzY3JpcHQuQwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3Vp dGUvZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iai1vcHMtbm9uLW1lbS1kZXAuQwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iai1vcHMtbm9u LW1lbS1ub24tZGVwLkMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9j cHAyMy9leHBsaWNpdC1vYmotb3BzLW5vbi1tZW0uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90 ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iai1vcHMtcmVxdWlyZXMtbWVtLkMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAyMy9leHBsaWNpdC1vYmot b3BzLXJlcXVpcmVzLW5vbi1tZW0uQwoKZGlmZiAtLWdpdCBhL2djYy9jcC9jYWxsLmNjIGIvZ2Nj L2NwL2NhbGwuY2MKaW5kZXggMmViNTRiNWI2ZWQuLmM3Y2EzMmQxZDM0IDEwMDY0NAotLS0gYS9n Y2MvY3AvY2FsbC5jYworKysgYi9nY2MvY3AvY2FsbC5jYwpAQCAtNjUyNiw4ICs2NTI2LDEwIEBA IGFkZF9jYW5kaWRhdGVzICh0cmVlIGZucywgdHJlZSBmaXJzdF9hcmcsIGNvbnN0IHZlYzx0cmVl LCB2YV9nYz4gKmFyZ3MsCiAKICAgICAgIHRyZWUgZm5fZmlyc3RfYXJnID0gTlVMTF9UUkVFOwog ICAgICAgY29uc3QgdmVjPHRyZWUsIHZhX2djPiAqZm5fYXJncyA9IGFyZ3M7Ci0KLSAgICAgIGlm IChERUNMX05PTlNUQVRJQ19NRU1CRVJfRlVOQ1RJT05fUCAoZm4pKQorICAgICAgLyogV2UgY2Fu J3QgYWRkIHhvYmogbWVtYmVyIGZ1bmN0aW9ucyB0byBERUNMX05PTlNUQVRJQ19NRU1CRVJfRlVO Q1RJT05fUCwKKwkgZm9yIG5vdyBqdXN0IGNoZWNrIGZvciB0aGVtIHNwZWNpZmljYWxseS4gICov CisgICAgICBpZiAoREVDTF9OT05TVEFUSUNfTUVNQkVSX0ZVTkNUSU9OX1AgKGZuKQorCSAgfHwg REVDTF9YT0JKX01FTUJFUl9GVU5DX1AgKGZuKSkKIAl7CiAJICAvKiBGaWd1cmUgb3V0IHdoZXJl IHRoZSBvYmplY3QgYXJnIGNvbWVzIGZyb20uICBJZiB0aGlzCiAJICAgICBmdW5jdGlvbiBpcyBh IG5vbi1zdGF0aWMgbWVtYmVyIGFuZCB3ZSBkaWRuJ3QgZ2V0IGFuCkBAIC05OTQ5LDcgKzk5NTEs OCBAQCBidWlsZF9vdmVyX2NhbGwgKHN0cnVjdCB6X2NhbmRpZGF0ZSAqY2FuZCwgaW50IGZsYWdz LCB0c3Vic3RfZmxhZ3NfdCBjb21wbGFpbikKIAl9CiAgICAgfQogICAvKiBCeXBhc3MgYWNjZXNz IGNvbnRyb2wgZm9yICd0aGlzJyBwYXJhbWV0ZXIuICAqLwotICBlbHNlIGlmIChUUkVFX0NPREUg KFRSRUVfVFlQRSAoZm4pKSA9PSBNRVRIT0RfVFlQRSkKKyAgZWxzZSBpZiAoVFJFRV9DT0RFIChU UkVFX1RZUEUgKGZuKSkgPT0gTUVUSE9EX1RZUEUKKwkgICB8fCBERUNMX1hPQkpfTUVNQkVSX0ZV TkNfUCAoZm4pKQogICAgIHsKICAgICAgIHRyZWUgYXJnID0gYnVpbGRfdGhpcyAoZmlyc3RfYXJn ICE9IE5VTExfVFJFRQogCQkJICAgICA/IGZpcnN0X2FyZwpkaWZmIC0tZ2l0IGEvZ2NjL2NwL2Nw LXRyZWUuaCBiL2djYy9jcC9jcC10cmVlLmgKaW5kZXggOThiMjllOWNmODEuLjkwMWZiMWY0NjE2 IDEwMDY0NAotLS0gYS9nY2MvY3AvY3AtdHJlZS5oCisrKyBiL2djYy9jcC9jcC10cmVlLmgKQEAg LTI5MzgsOCArMjkzOCw5IEBAIHN0cnVjdCBHVFkoKCkpIGxhbmdfZGVjbF9mbiB7CiAgIHVuc2ln bmVkIG1heWJlX2RlbGV0ZWQgOiAxOwogICB1bnNpZ25lZCBjb3JvdXRpbmVfcCA6IDE7CiAgIHVu c2lnbmVkIGltcGxpY2l0X2NvbnN0ZXhwciA6IDE7CisgIHVuc2lnbmVkIHhvYmpfZnVuYyA6IDE7 CiAKLSAgdW5zaWduZWQgc3BhcmUgOiA5OworICB1bnNpZ25lZCBzcGFyZSA6IDg7CiAKICAgLyog MzItYml0cyBwYWRkaW5nIG9uIDY0LWJpdCBob3N0LiAgKi8KIApAQCAtMzMzOCwxNCArMzMzOSwy NSBAQCBzdHJ1Y3QgR1RZKCgpKSBsYW5nX2RlY2wgewogICAoTEFOR19ERUNMX0ZOX0NIRUNLIChO T0RFKS0+c3RhdGljX2Z1bmN0aW9uKQogCiAvKiBOb256ZXJvIGZvciBGVU5DVElPTl9ERUNMIG1l YW5zIHRoYXQgdGhpcyBkZWNsIGlzIGEgbm9uLXN0YXRpYwotICAgbWVtYmVyIGZ1bmN0aW9uLiAg Ki8KKyAgIG1lbWJlciBmdW5jdGlvbiwgVU5MRVNTIGl0IGlzIGFuIHhvYmogbWVtYmVyIGZ1bmN0 aW9uLgorICAgVGhpcyBpbmNvbnNpc3RlbmN5IHdpbGwgYmUgZml4ZWQgaW4gdGhlIGZ1dHVyZS4g ICovCiAjZGVmaW5lIERFQ0xfTk9OU1RBVElDX01FTUJFUl9GVU5DVElPTl9QKE5PREUpIFwKICAg KFRSRUVfQ09ERSAoVFJFRV9UWVBFIChOT0RFKSkgPT0gTUVUSE9EX1RZUEUpCiAKKy8qIFNpbXBs ZSBtZW1iZXIgYWNjZXNzLCBvbmx5IHZhbGlkIGZvciBGVU5DVElPTl9ERUNMIG5vZGVzLiAgKi8K KyNkZWZpbmUgREVDTF9GVU5DVElPTl9YT0JKX0ZMQUcoTk9ERSkJXAorICAoTEFOR19ERUNMX0ZO X0NIRUNLIChOT0RFKS0+eG9ial9mdW5jKQorLyogTm9uemVybyBpZiBOT0RFIGlzIGEgRlVOQ1RJ T05fREVDTCB0aGF0IGlzIGFuIHhvYmogbWVtYmVyIGZ1bmN0aW9uLAorICAgc2FmZWx5IGV2YWx1 YXRlcyB0byBmYWxzZSBmb3IgYWxsIG5vbiBGVU5DVElPTl9ERUNMIG5vZGVzLiAgKi8KKyNkZWZp bmUgREVDTF9YT0JKX01FTUJFUl9GVU5DX1AoTk9ERSkJCQlcCisgIChUUkVFX0NPREUgKFNUUklQ X1RFTVBMQVRFIChOT0RFKSkgPT0gRlVOQ1RJT05fREVDTAlcCisgICAmJiBERUNMX0ZVTkNUSU9O X1hPQkpfRkxBRyAoTk9ERSkgPT0gMSkKKwogLyogTm9uemVybyBmb3IgRlVOQ1RJT05fREVDTCBt ZWFucyB0aGF0IHRoaXMgZGVjbCBpcyBhIG1lbWJlciBmdW5jdGlvbgogICAgKHN0YXRpYyBvciBu b24tc3RhdGljKS4gICovCiAjZGVmaW5lIERFQ0xfRlVOQ1RJT05fTUVNQkVSX1AoTk9ERSkgXAot ICAoREVDTF9OT05TVEFUSUNfTUVNQkVSX0ZVTkNUSU9OX1AgKE5PREUpIHx8IERFQ0xfU1RBVElD X0ZVTkNUSU9OX1AgKE5PREUpKQorICAoREVDTF9OT05TVEFUSUNfTUVNQkVSX0ZVTkNUSU9OX1Ag KE5PREUpIHx8IERFQ0xfU1RBVElDX0ZVTkNUSU9OX1AgKE5PREUpIFwKKyAgfHwgREVDTF9YT0JK X01FTUJFUl9GVU5DX1AgKE5PREUpKQogCiAvKiBOb256ZXJvIGZvciBGVU5DVElPTl9ERUNMIG1l YW5zIHRoYXQgdGhpcyBtZW1iZXIgZnVuY3Rpb24KICAgIGhhcyBgdGhpcycgYXMgY29uc3QgWCAq Y29uc3QuICAqLwpAQCAtNjI2NCwxMSArNjI3NiwxMyBAQCBlbnVtIGNwX3N0b3JhZ2VfY2xhc3Mg ewogCiAvKiBBbiBpbmRpdmlkdWFsIGRlY2wtc3BlY2lmaWVyLiAgVGhpcyBpcyB1c2VkIHRvIGlu ZGV4IHRoZSBhcnJheSBvZgogICAgbG9jYXRpb25zIGZvciB0aGUgZGVjbHNwZWNzIGluIHN0cnVj dCBjcF9kZWNsX3NwZWNpZmllcl9zZXEKLSAgIGJlbG93LiAgKi8KKyAgIGJlbG93LgorICAgQSBz dWJzZXQgb2YgdGhlc2UgZW51bXMgYWxzbyBjb3JyZXNwb25kcyB0byBlbGVtZW50cyBvZgorICAg Y3BfcGFyc2VyX3NldF9kZWNsX3NwZWNfdHlwZTpkZWNsX3NwZWNfbmFtZXMgaW4gcGFyc2VyLmNj LiAgKi8KIAogZW51bSBjcF9kZWNsX3NwZWMgewogICBkc19maXJzdCwKLSAgZHNfc2lnbmVkID0g ZHNfZmlyc3QsCisgIGRzX3NpZ25lZCA9IGRzX2ZpcnN0LCAvKiBJbmRleCBvZiBmaXJzdCBlbGVt ZW50IG9mIGRlY2xfc3BlY19uYW1lcy4gICovCiAgIGRzX3Vuc2lnbmVkLAogICBkc19zaG9ydCwK ICAgZHNfbG9uZywKQEAgLTYyODUsNiArNjI5OSw3IEBAIGVudW0gY3BfZGVjbF9zcGVjIHsKICAg ZHNfY29tcGxleCwKICAgZHNfY29uc3Rpbml0LAogICBkc19jb25zdGV2YWwsCisgIGRzX3RoaXMs IC8qIEluZGV4IG9mIGxhc3QgZWxlbWVudCBvZiBkZWNsX3NwZWNfbmFtZXMuICAqLwogICBkc190 aHJlYWQsCiAgIGRzX3R5cGVfc3BlYywKICAgZHNfcmVkZWZpbmVkX2J1aWx0aW5fdHlwZV9zcGVj LApkaWZmIC0tZ2l0IGEvZ2NjL2NwL2RlY2wuY2MgYi9nY2MvY3AvZGVjbC5jYwppbmRleCAxNmFm NTlkZTY5Ni4uYzAyZDc4YjgxMDIgMTAwNjQ0Ci0tLSBhL2djYy9jcC9kZWNsLmNjCisrKyBiL2dj Yy9jcC9kZWNsLmNjCkBAIC0xMDMxOCw2ICsxMDMxOCw3IEBAIGdyb2tmbmRlY2wgKHRyZWUgY3R5 cGUsCiAJICAgIGludCBwdWJsaWNwLAogCSAgICBpbnQgaW5saW5lcCwKIAkgICAgYm9vbCBkZWxl dGVkcCwKKwkgICAgYm9vbCB4b2JqX2Z1bmNfcCwKIAkgICAgc3BlY2lhbF9mdW5jdGlvbl9raW5k IHNmaywKIAkgICAgYm9vbCBmdW5jZGVmX2ZsYWcsCiAJICAgIGJvb2wgbGF0ZV9yZXR1cm5fdHlw ZV9wLApAQCAtMTAzMjcsNyArMTAzMjgsNiBAQCBncm9rZm5kZWNsICh0cmVlIGN0eXBlLAogCSAg ICBsb2NhdGlvbl90IGxvY2F0aW9uKQogewogICB0cmVlIGRlY2w7Ci0gIGludCBzdGF0aWNwID0g Y3R5cGUgJiYgVFJFRV9DT0RFICh0eXBlKSA9PSBGVU5DVElPTl9UWVBFOwogICB0cmVlIHQ7CiAK ICAgaWYgKGxvY2F0aW9uID09IFVOS05PV05fTE9DQVRJT04pCkBAIC0xMDUyNSwxMiArMTA1MjUs OSBAQCBncm9rZm5kZWNsICh0cmVlIGN0eXBlLAogCQkgIChJREVOVElGSUVSX1BPSU5URVIgKGRl Y2xhcmF0b3IpKSkpKSkKICAgICBTRVRfREVDTF9MQU5HVUFHRSAoZGVjbCwgbGFuZ19jKTsKIAot ICAvKiBTaG91bGQgcHJvYmFibHkgcHJvcGFnYXRlIGNvbnN0IG91dCBmcm9tIHR5cGUgdG8gZGVj bCBJIGJldCAobXJzKS4gICovCi0gIGlmIChzdGF0aWNwKQotICAgIHsKLSAgICAgIERFQ0xfU1RB VElDX0ZVTkNUSU9OX1AgKGRlY2wpID0gMTsKLSAgICAgIERFQ0xfQ09OVEVYVCAoZGVjbCkgPSBj dHlwZTsKLSAgICB9CisgIERFQ0xfU1RBVElDX0ZVTkNUSU9OX1AgKGRlY2wpCisgICAgPSAheG9i al9mdW5jX3AgJiYgY3R5cGUgJiYgVFJFRV9DT0RFICh0eXBlKSA9PSBGVU5DVElPTl9UWVBFOwor ICBERUNMX0ZVTkNUSU9OX1hPQkpfRkxBRyAoZGVjbCkgPSB4b2JqX2Z1bmNfcDsKIAogICBpZiAo ZGVsZXRlZHApCiAgICAgREVDTF9ERUxFVEVEX0ZOIChkZWNsKSA9IDE7CkBAIC0xMjk5OCw2ICsx Mjk5NSw4IEBAIGdyb2tkZWNsYXJhdG9yIChjb25zdCBjcF9kZWNsYXJhdG9yICpkZWNsYXJhdG9y LAogICBpZiAoYXR0cmxpc3QpCiAgICAgZGlhZ25vc2VfbWlzYXBwbGllZF9jb250cmFjdHMgKCph dHRybGlzdCk7CiAKKyAgLyogU2tpcCBvdmVyIGJ1aWxkX21lbWZuX3R5cGUgd2hlbiBhIEZVTkNU SU9OX0RFQ0wgaXMgYW4geG9iaiBtZW1mbi4gICovCisgIGJvb2wgaXNfeG9ial9tZW1iZXJfZnVu Y3Rpb24gPSBmYWxzZTsKICAgLyogRGV0ZXJtaW5lIHRoZSB0eXBlIG9mIHRoZSBlbnRpdHkgZGVj bGFyZWQgYnkgcmVjdXJyaW5nIG9uIHRoZQogICAgICBkZWNsYXJhdG9yLiAgKi8KICAgZm9yICg7 IGRlY2xhcmF0b3I7IGRlY2xhcmF0b3IgPSBkZWNsYXJhdG9yLT5kZWNsYXJhdG9yKQpAQCAtMTMx MTMsNiArMTMxMTIsMjUgQEAgZ3Jva2RlY2xhcmF0b3IgKGNvbnN0IGNwX2RlY2xhcmF0b3IgKmRl Y2xhcmF0b3IsCiAJICAgIGlmIChyYWlzZXMgPT0gZXJyb3JfbWFya19ub2RlKQogCSAgICAgIHJh aXNlcyA9IE5VTExfVFJFRTsKIAorCSAgICBhdXRvIGZpbmRfeG9ial9wYXJtID0gW10odHJlZSBw YXJtX2xpc3QpCisJICAgICAgeworCQkvKiBUaGVyZSBpcyBubyBuZWVkIHRvIGl0ZXJhdGUgb3Zl ciB0aGUgbGlzdCwKKwkJICAgb25seSB0aGUgZmlyc3QgcGFybSBjYW4gYmUgYSB2YWxpZCB4b2Jq IHBhcm0uICAqLworCQlpZiAoIXBhcm1fbGlzdCB8fCBwYXJtX2xpc3QgPT0gdm9pZF9saXN0X25v ZGUpCisJCSAgcmV0dXJuIGZhbHNlOworCQlpZiAoVFJFRV9QVVJQT1NFIChwYXJtX2xpc3QpICE9 IHRoaXNfaWRlbnRpZmllcikKKwkJICByZXR1cm4gZmFsc2U7CisJCS8qIElmIHdlIG1ha2UgaXQg aGVyZSwgd2UgYXJlIGxvb2tpbmcgYXQgYW4geG9iaiBwYXJtLgorCisJCSAgIE5vbi1udWxsICdw dXJwb3NlJyB1c3VhbGx5IG1lYW5zIHRoZSBwYXJtIGhhcyBhIGRlZmF1bHQKKwkJICAgYXJndW1l bnQsIHdlIGRvbid0IHdhbnQgdG8gdmlvbGF0ZSB0aGlzIGFzc3VtcHRpb24uICAqLworCQlUUkVF X1BVUlBPU0UgKHBhcm1fbGlzdCkgPSBOVUxMX1RSRUU7CisJCXJldHVybiB0cnVlOworCSAgICAg IH07CisKKwkgICAgaXNfeG9ial9tZW1iZXJfZnVuY3Rpb24KKwkgICAgICA9IGZpbmRfeG9ial9w YXJtIChkZWNsYXJhdG9yLT51LmZ1bmN0aW9uLnBhcmFtZXRlcnMpOworCiAJICAgIGlmIChyZXFz KQogCSAgICAgIGVycm9yX2F0IChsb2NhdGlvbl9vZiAocmVxcyksICJyZXF1aXJlcy1jbGF1c2Ug b24gcmV0dXJuIHR5cGUiKTsKIAkgICAgcmVxcyA9IGRlY2xhcmF0b3ItPnUuZnVuY3Rpb24ucmVx dWlyZXNfY2xhdXNlOwpAQCAtMTQxNzcsNiArMTQxOTUsOCBAQCBncm9rZGVjbGFyYXRvciAoY29u c3QgY3BfZGVjbGFyYXRvciAqZGVjbGFyYXRvciwKICAgICB9CiAKICAgaWYgKGN0eXBlICYmIFRS RUVfQ09ERSAodHlwZSkgPT0gRlVOQ1RJT05fVFlQRSAmJiBzdGF0aWNwIDwgMgorICAgICAgLyog RG9uJ3QgY29udmVydCB4b2JqIG1lbWJlciBmdW5jdGlvbnMgdG8gTUVUSE9EX1RZUEUuICAqLwor ICAgICAgJiYgIWlzX3hvYmpfbWVtYmVyX2Z1bmN0aW9uCiAgICAgICAmJiAhKHVucXVhbGlmaWVk X2lkCiAJICAgJiYgaWRlbnRpZmllcl9wICh1bnF1YWxpZmllZF9pZCkKIAkgICAmJiBJREVOVElG SUVSX05FV0RFTF9PUF9QICh1bnF1YWxpZmllZF9pZCkpKQpAQCAtMTQzOTgsNyArMTQ0MTgsOCBA QCBncm9rZGVjbGFyYXRvciAoY29uc3QgY3BfZGVjbGFyYXRvciAqZGVjbGFyYXRvciwKIAkJCSAg ICAgICBmcmllbmRwID8gLTEgOiAwLCBmcmllbmRwLCBwdWJsaWNwLAogCQkJICAgICAgIGlubGlu ZXAgfCAoMiAqIGNvbnN0ZXhwcl9wKSB8ICg0ICogY29uY2VwdF9wKQogCQkJCSAgICAgICB8ICg4 ICogY29uc3RldmFsX3ApLAotCQkJICAgICAgIGluaXRpYWxpemVkID09IFNEX0RFTEVURUQsIHNm aywKKwkJCSAgICAgICBpbml0aWFsaXplZCA9PSBTRF9ERUxFVEVELAorCQkJICAgICAgIGlzX3hv YmpfbWVtYmVyX2Z1bmN0aW9uLCBzZmssCiAJCQkgICAgICAgZnVuY2RlZl9mbGFnLCBsYXRlX3Jl dHVybl90eXBlX3AsCiAJCQkgICAgICAgdGVtcGxhdGVfY291bnQsIGluX25hbWVzcGFjZSwKIAkJ CSAgICAgICBhdHRybGlzdCwgaWRfbG9jKTsKQEAgLTE0NzMzLDggKzE0NzU0LDggQEAgZ3Jva2Rl Y2xhcmF0b3IgKGNvbnN0IGNwX2RlY2xhcmF0b3IgKmRlY2xhcmF0b3IsCiAJCQkgICBpbmxpbmVw IHwgKDIgKiBjb25zdGV4cHJfcCkgfCAoNCAqIGNvbmNlcHRfcCkKIAkJCQkgICB8ICg4ICogY29u c3RldmFsX3ApLAogCQkJICAgaW5pdGlhbGl6ZWQgPT0gU0RfREVMRVRFRCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNmaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNkZWZf ZmxhZywKKwkJCSAgIGlzX3hvYmpfbWVtYmVyX2Z1bmN0aW9uLCBzZmssCisJCQkgICBmdW5jZGVm X2ZsYWcsCiAJCQkgICBsYXRlX3JldHVybl90eXBlX3AsCiAJCQkgICB0ZW1wbGF0ZV9jb3VudCwg aW5fbmFtZXNwYWNlLCBhdHRybGlzdCwKIAkJCSAgIGlkX2xvYyk7CkBAIC0xNTYyOCw3ICsxNTY0 OSw4IEBAIGdyb2tfb3BfcHJvcGVydGllcyAodHJlZSBkZWNsLCBib29sIGNvbXBsYWluKQogICAv KiBBbiBvcGVyYXRvciBmdW5jdGlvbiBtdXN0IGVpdGhlciBiZSBhIG5vbi1zdGF0aWMgbWVtYmVy IGZ1bmN0aW9uCiAgICAgIG9yIGhhdmUgYXQgbGVhc3Qgb25lIHBhcmFtZXRlciBvZiBhIGNsYXNz LCBhIHJlZmVyZW5jZSB0byBhIGNsYXNzLAogICAgICBhbiBlbnVtZXJhdGlvbiwgb3IgYSByZWZl cmVuY2UgdG8gYW4gZW51bWVyYXRpb24uICAxMy40LjAuNiAqLwotICBpZiAoISBtZXRob2RwIHx8 IERFQ0xfU1RBVElDX0ZVTkNUSU9OX1AgKGRlY2wpKQorICBpZiAoKCFtZXRob2RwICYmICFERUNM X1hPQkpfTUVNQkVSX0ZVTkNfUCAoZGVjbCkpCisgICAgICB8fCBERUNMX1NUQVRJQ19GVU5DVElP Tl9QIChkZWNsKSkKICAgICB7CiAgICAgICBpZiAob3BlcmF0b3JfY29kZSA9PSBUWVBFX0VYUFIK IAkgIHx8IG9wZXJhdG9yX2NvZGUgPT0gQ09NUE9ORU5UX1JFRgpkaWZmIC0tZ2l0IGEvZ2NjL2Nw L3BhcnNlci5jYyBiL2djYy9jcC9wYXJzZXIuY2MKaW5kZXggMjBlMTgzNjU5MDYuLjRmYmNjNTJj MjIyIDEwMDY0NAotLS0gYS9nY2MvY3AvcGFyc2VyLmNjCisrKyBiL2djYy9jcC9wYXJzZXIuY2MK QEAgLTE2MDkxLDYgKzE2MDkxLDE2IEBAIGNwX3BhcnNlcl9kZWNsX3NwZWNpZmllcl9zZXEgKGNw X3BhcnNlciogcGFyc2VyLAogCSAgICBkZWNsX3NwZWNzLT5sb2NhdGlvbnNbZHNfYXR0cmlidXRl XSA9IHRva2VuLT5sb2NhdGlvbjsKIAkgIGNvbnRpbnVlOwogCX0KKyAgICAgIC8qIFNwZWNpYWwg Y2FzZSBmb3IgInRoaXMiIHNwZWNpZmllciwgaW5kaWNhdGluZyBhIHBhcm0gaXMgYW4geG9iaiBw YXJtLgorCSBUaGUgInRoaXMiIHNwZWNpZmllciBtdXN0IGJlIHRoZSBmaXJzdCBzcGVjaWZpZXIg aW4gdGhlIGRlY2xhcmF0aW9uLAorCSBhZnRlciBhbnkgYXR0cmlidXRlcy4gICovCisgICAgICBp ZiAodG9rZW4tPmtleXdvcmQgPT0gUklEX1RISVMpCisJeworCSAgY3BfbGV4ZXJfY29uc3VtZV90 b2tlbiAocGFyc2VyLT5sZXhlcik7CisJICBzZXRfYW5kX2NoZWNrX2RlY2xfc3BlY19sb2MgKGRl Y2xfc3BlY3MsIGRzX3RoaXMsIHRva2VuKTsKKwkgIGNvbnRpbnVlOworCX0KKwogICAgICAgLyog QXNzdW1lIHdlIHdpbGwgZmluZCBhIGRlY2wtc3BlY2lmaWVyIGtleXdvcmQuICAqLwogICAgICAg Zm91bmRfZGVjbF9zcGVjID0gdHJ1ZTsKICAgICAgIC8qIElmIHRoZSBuZXh0IHRva2VuIGlzIGFu IGFwcHJvcHJpYXRlIGtleXdvcmQsIHdlIGNhbiBzaW1wbHkKQEAgLTI1NDk1LDYgKzI1NTA1LDEz IEBAIGNwX3BhcnNlcl9wYXJhbWV0ZXJfZGVjbGFyYXRpb24gKGNwX3BhcnNlciAqcGFyc2VyLAog ICBpZiAoZGVmYXVsdF9hcmd1bWVudCkKICAgICBTVFJJUF9BTllfTE9DQVRJT05fV1JBUFBFUiAo ZGVmYXVsdF9hcmd1bWVudCk7CiAKKyAgaWYgKGRlY2xfc3BlY19zZXFfaGFzX3NwZWNfcCAoJmRl Y2xfc3BlY2lmaWVycywgZHNfdGhpcykpCisgICAgeworICAgICAgLyogWG9iaiBwYXJhbWV0ZXJz IGNhbiBub3QgaGF2ZSBkZWZhdWx0IGFyZ3VtZW50cywgdGh1cworCSB3ZSBjYW4gcmV1c2UgdGhl IGRlZmF1bHQgYXJndW1lbnQgZmllbGQgdG8gZmxhZyB0aGUgcGFyYW0gYXMgc3VjaC4gICovCisg ICAgICBkZWZhdWx0X2FyZ3VtZW50ID0gdGhpc19pZGVudGlmaWVyOworICAgIH0KKwogICAvKiBH ZW5lcmF0ZSBhIGxvY2F0aW9uIGZvciB0aGUgcGFyYW1ldGVyLCByYW5naW5nIGZyb20gdGhlIHN0 YXJ0IG9mIHRoZQogICAgICBpbml0aWFsIHRva2VuIHRvIHRoZSBlbmQgb2YgdGhlIGZpbmFsIHRv a2VuICh1c2luZyBpbnB1dF9sb2NhdGlvbiBmb3IKICAgICAgdGhlIGxhdHRlciwgc2V0IHVwIGJ5 IGNwX2xleGVyX3NldF9zb3VyY2VfcG9zaXRpb25fZnJvbV90b2tlbiB3aGVuCkBAIC0zMzg3Myw3 ICszMzg5MCw4IEBAIHNldF9hbmRfY2hlY2tfZGVjbF9zcGVjX2xvYyAoY3BfZGVjbF9zcGVjaWZp ZXJfc2VxICpkZWNsX3NwZWNzLAogCSAgICAiY29uc3RleHByIiwKIAkgICAgIl9fY29tcGxleCIs CiAJICAgICJjb25zdGluaXQiLAotCSAgICAiY29uc3RldmFsIgorCSAgICAiY29uc3RldmFsIiwK KwkgICAgInRoaXMiCiAJICB9OwogCSAgZ2NjX3JpY2hfbG9jYXRpb24gcmljaGxvYyAobG9jYXRp b24pOwogCSAgcmljaGxvYy5hZGRfZml4aXRfcmVtb3ZlICgpOwpkaWZmIC0tZ2l0IGEvZ2NjL2Nw L3RyZWUuY2MgYi9nY2MvY3AvdHJlZS5jYwppbmRleCA0MTdjOTJiYTc2Zi4uYWI1ZmU3OTE0NmMg MTAwNjQ0Ci0tLSBhL2djYy9jcC90cmVlLmNjCisrKyBiL2djYy9jcC90cmVlLmNjCkBAIC0zNjYw LDYgKzM2NjAsNyBAQCBidWlsZF9taW5fbm9uX2RlcF9vcF9vdmVybG9hZCAoZW51bSB0cmVlX2Nv ZGUgb3AsCiAKICAgZXhwZWN0ZWRfbmFyZ3MgPSBjcF90cmVlX2NvZGVfbGVuZ3RoIChvcCk7CiAg IGlmIChUUkVFX0NPREUgKFRSRUVfVFlQRSAob3ZlcmxvYWQpKSA9PSBNRVRIT0RfVFlQRQorICAg ICAgfHwgREVDTF9YT0JKX01FTUJFUl9GVU5DX1AgKG92ZXJsb2FkKQogICAgICAgLyogRm9yIEFS UkFZX1JFRiwgb3BlcmF0b3JbXSBpcyBlaXRoZXIgYSBub24tc3RhdGljIG1lbWJlciBvciBuZXds eQogCSBzdGF0aWMgbWVtYmVyLCBuZXZlciBvdXQgb2YgY2xhc3MgYW5kIGZvciB0aGUgc3RhdGlj IG1lbWJlciBjYXNlCiAJIGlmIHVzZXIgdXNlcyBzaW5nbGUgaW5kZXggdGhlIG9wZXJhdG9yW10g bmVlZHMgdG8gaGF2ZSBhIHNpbmdsZQpAQCAtMzY3NywyNCArMzY3OCwyNiBAQCBidWlsZF9taW5f bm9uX2RlcF9vcF9vdmVybG9hZCAoZW51bSB0cmVlX2NvZGUgb3AsCiAgIHJlbGVhc2luZ192ZWMg YXJnczsKICAgdmFfc3RhcnQgKHAsIG92ZXJsb2FkKTsKIAotICBpZiAoVFJFRV9DT0RFIChUUkVF X1RZUEUgKG92ZXJsb2FkKSkgPT0gRlVOQ1RJT05fVFlQRSkKKyAgaWYgKFRSRUVfQ09ERSAoVFJF RV9UWVBFIChvdmVybG9hZCkpID09IE1FVEhPRF9UWVBFCisJICAgfHwgREVDTF9YT0JKX01FTUJF Ul9GVU5DX1AgKG92ZXJsb2FkKSkKICAgICB7Ci0gICAgICBmbiA9IG92ZXJsb2FkOwotICAgICAg aWYgKG9wID09IEFSUkFZX1JFRikKLQlvYmogPSB2YV9hcmcgKHAsIHRyZWUpOworICAgICAgdHJl ZSBvYmplY3QgPSB2YV9hcmcgKHAsIHRyZWUpOworICAgICAgdHJlZSBiaW5mbyA9IFRZUEVfQklO Rk8gKFRSRUVfVFlQRSAob2JqZWN0KSk7CisgICAgICB0cmVlIG1ldGhvZCA9IGJ1aWxkX2Jhc2Vs aW5rIChiaW5mbywgYmluZm8sIG92ZXJsb2FkLCBOVUxMX1RSRUUpOworICAgICAgZm4gPSBidWls ZF9taW4gKENPTVBPTkVOVF9SRUYsIFRSRUVfVFlQRSAob3ZlcmxvYWQpLAorCQkgICAgICBvYmpl Y3QsIG1ldGhvZCwgTlVMTF9UUkVFKTsKICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFyZ3M7 IGkrKykKIAl7CiAJICB0cmVlIGFyZyA9IHZhX2FyZyAocCwgdHJlZSk7CiAJICB2ZWNfc2FmZV9w dXNoIChhcmdzLCBhcmcpOwogCX0KICAgICB9Ci0gIGVsc2UgaWYgKFRSRUVfQ09ERSAoVFJFRV9U WVBFIChvdmVybG9hZCkpID09IE1FVEhPRF9UWVBFKQorICBlbHNlIGlmIChUUkVFX0NPREUgKFRS RUVfVFlQRSAob3ZlcmxvYWQpKSA9PSBGVU5DVElPTl9UWVBFKQogICAgIHsKLSAgICAgIHRyZWUg b2JqZWN0ID0gdmFfYXJnIChwLCB0cmVlKTsKLSAgICAgIHRyZWUgYmluZm8gPSBUWVBFX0JJTkZP IChUUkVFX1RZUEUgKG9iamVjdCkpOwotICAgICAgdHJlZSBtZXRob2QgPSBidWlsZF9iYXNlbGlu ayAoYmluZm8sIGJpbmZvLCBvdmVybG9hZCwgTlVMTF9UUkVFKTsKLSAgICAgIGZuID0gYnVpbGRf bWluIChDT01QT05FTlRfUkVGLCBUUkVFX1RZUEUgKG92ZXJsb2FkKSwKLQkJICAgICAgb2JqZWN0 LCBtZXRob2QsIE5VTExfVFJFRSk7CisgICAgICBnY2NfYXNzZXJ0ICghREVDTF9YT0JKX01FTUJF Ul9GVU5DX1AgKG92ZXJsb2FkKSk7CisgICAgICBmbiA9IG92ZXJsb2FkOworICAgICAgaWYgKG9w ID09IEFSUkFZX1JFRikKKwlvYmogPSB2YV9hcmcgKHAsIHRyZWUpOwogICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCBuYXJnczsgaSsrKQogCXsKIAkgIHRyZWUgYXJnID0gdmFfYXJnIChwLCB0cmVl KTsKQEAgLTM3MjksNyArMzczMiw4IEBAIGJ1aWxkX21pbl9ub25fZGVwX29wX292ZXJsb2FkICh0 cmVlIG5vbl9kZXAsIHRyZWUgb3ZlcmxvYWQsIHRyZWUgb2JqZWN0LAogCiAgIHVuc2lnbmVkIGlu dCBuYXJncyA9IGNhbGxfZXhwcl9uYXJncyAobm9uX2RlcCk7CiAgIHRyZWUgZm4gPSBvdmVybG9h ZDsKLSAgaWYgKFRSRUVfQ09ERSAoVFJFRV9UWVBFIChvdmVybG9hZCkpID09IE1FVEhPRF9UWVBF KQorICBpZiAoVFJFRV9DT0RFIChUUkVFX1RZUEUgKG92ZXJsb2FkKSkgPT0gTUVUSE9EX1RZUEUK KyAgICAgIHx8IERFQ0xfWE9CSl9NRU1CRVJfRlVOQ19QIChvdmVybG9hZCkpCiAgICAgewogICAg ICAgdHJlZSBiaW5mbyA9IFRZUEVfQklORk8gKFRSRUVfVFlQRSAob2JqZWN0KSk7CiAgICAgICB0 cmVlIG1ldGhvZCA9IGJ1aWxkX2Jhc2VsaW5rIChiaW5mbywgYmluZm8sIG92ZXJsb2FkLCBOVUxM X1RSRUUpOwpkaWZmIC0tZ2l0IGEvZ2NjL2NwL3R5cGVjay5jYyBiL2djYy9jcC90eXBlY2suY2MK aW5kZXggNDlhZmJkOGZiNWUuLjAwYjk5OWNlYzE5IDEwMDY0NAotLS0gYS9nY2MvY3AvdHlwZWNr LmNjCisrKyBiL2djYy9jcC90eXBlY2suY2MKQEAgLTcxNjQsNiArNzE2NCwxMiBAQCBjcF9idWls ZF9hZGRyX2V4cHJfMSAodHJlZSBhcmcsIGJvb2wgc3RyaWN0X2x2YWx1ZSwgdHN1YnN0X2ZsYWdz X3QgY29tcGxhaW4pCiAJICAgICYmICFtYXJrX3VzZWQgKHQsIGNvbXBsYWluKSAmJiAhKGNvbXBs YWluICYgdGZfZXJyb3IpKQogCSAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKIAorCS8qIEV4Y2Vw dGlvbiBmb3Igbm9uLW92ZXJsb2FkZWQgZXhwbGljaXQgb2JqZWN0IG1lbWJlciBmdW5jdGlvbi4K KwkgICBJIGFtIHByZXR0eSBzdXJlIHRoaXMgaXMgbm90IHBlcmZlY3QsIEkgdGhpbmsgd2UgYXJl bid0CisJICAgaGFuZGxpbmcgc29tZSBjb25zdGV4cHIgc3R1ZmYsIGJ1dCBJIGFtIGxlYXZpbmcg aXQgZm9yIG5vdy4gKi8KKwlpZiAoVFJFRV9DT0RFIChUUkVFX1RZUEUgKHQpKSA9PSBGVU5DVElP Tl9UWVBFKQorCSAgcmV0dXJuIGJ1aWxkX2FkZHJlc3MgKHQpOworCiAJdHlwZSA9IGJ1aWxkX3B0 cm1lbV90eXBlIChjb250ZXh0X2Zvcl9uYW1lX2xvb2t1cCAodCksCiAJCQkJICBUUkVFX1RZUEUg KHQpKTsKIAl0ID0gbWFrZV9wdHJtZW1fY3N0ICh0eXBlLCB0KTsKZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iai1iYXNpYzEuQyBiL2djYy90ZXN0c3Vp dGUvZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iai1iYXNpYzEuQwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMWU0NGM5MTIzYjcKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2crKy5kZy9jcHAyMy9leHBsaWNpdC1vYmotYmFzaWMxLkMKQEAgLTAsMCArMSwx MTMgQEAKKy8vIFAwODQ3UjcKKy8vIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCBjKysyMyB9IH0K KworLy8gYmFzaWMgdXNlIGNhc2VzIGFuZCBjYWxsaW5nCisKKy8vIG5vbi10cmFpbGluZyByZXR1 cm4KKy8vIGRlZmluaXRpb25zCitzdHJ1Y3QgUzAgeworICB2b2lkIGYwKHRoaXMgUzApIHt9Cisg IHZvaWQgZjEodGhpcyBTMCYpIHt9CisgIHZvaWQgZjIodGhpcyBTMCYmKSB7fQorICB2b2lkIGYz KHRoaXMgUzAgY29uc3QmKSB7fQorICB2b2lkIGY0KHRoaXMgUzAgY29uc3QmJikge30KKyAgdGVt cGxhdGU8dHlwZW5hbWUgU2VsZj4KKyAgdm9pZCBkMCh0aGlzIFNlbGYmJikge30KKyAgdm9pZCBk MSh0aGlzIGF1dG8mJikge30KK307CisvLyBkZWNsYXJhdGlvbnMKK3N0cnVjdCBTMSB7CisgIHZv aWQgZjAodGhpcyBTMSk7CisgIHZvaWQgZjEodGhpcyBTMSYpOworICB2b2lkIGYyKHRoaXMgUzEm Jik7CisgIHZvaWQgZjModGhpcyBTMSBjb25zdCYpOworICB2b2lkIGY0KHRoaXMgUzEgY29uc3Qm Jik7CisgIHRlbXBsYXRlPHR5cGVuYW1lIFNlbGY+CisgIHZvaWQgZDAodGhpcyBTZWxmJiYpOwor ICB2b2lkIGQxKHRoaXMgYXV0byYmKTsKK307CisvLyBvdXQgb2YgbGluZSBkZWZpbml0aW9ucwor dm9pZCBTMTo6ZjAodGhpcyBTMSkge30KK3ZvaWQgUzE6OmYxKHRoaXMgUzEmKSB7fQordm9pZCBT MTo6ZjIodGhpcyBTMSYmKSB7fQordm9pZCBTMTo6ZjModGhpcyBTMSBjb25zdCYpIHt9Cit2b2lk IFMxOjpmNCh0aGlzIFMxIGNvbnN0JiYpIHt9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBTZWxmPgordm9p ZCBTMTo6ZDAodGhpcyBTZWxmJiYpIHt9Cit2b2lkIFMxOjpkMSh0aGlzIGF1dG8mJikge30KKwor Ly8gdHJhaWxpbmcgcmV0dXJuCisvLyBkZWZpbml0aW9ucworc3RydWN0IFMyIHsKKyAgYXV0byBm MCh0aGlzIFMyKSAtPiB2b2lkIHt9CisgIGF1dG8gZjEodGhpcyBTMiYpIC0+IHZvaWQge30KKyAg YXV0byBmMih0aGlzIFMyJiYpIC0+IHZvaWQge30KKyAgYXV0byBmMyh0aGlzIFMyIGNvbnN0Jikg LT4gdm9pZCB7fQorICBhdXRvIGY0KHRoaXMgUzIgY29uc3QmJikgLT4gdm9pZCB7fQorICB0ZW1w bGF0ZTx0eXBlbmFtZSBTZWxmPgorICBhdXRvIGQwKHRoaXMgU2VsZiYmKSAtPiB2b2lkIHt9CisK KyAgYXV0byBkMSh0aGlzIGF1dG8mJikgLT4gdm9pZCB7fQorfTsKKy8vIGRlY2xhcmF0aW9ucwor c3RydWN0IFMzIHsKKyAgYXV0byBmMCh0aGlzIFMzKSAtPiB2b2lkOworICBhdXRvIGYxKHRoaXMg UzMmKSAtPiB2b2lkOworICBhdXRvIGYyKHRoaXMgUzMmJikgLT4gdm9pZDsKKyAgYXV0byBmMyh0 aGlzIFMzIGNvbnN0JikgLT4gdm9pZDsKKyAgYXV0byBmNCh0aGlzIFMzIGNvbnN0JiYpIC0+IHZv aWQ7CisgIHRlbXBsYXRlPHR5cGVuYW1lIFNlbGY+CisgIGF1dG8gZDAodGhpcyBTZWxmJiYpIC0+ IHZvaWQ7CisgIGF1dG8gZDEodGhpcyBhdXRvJiYpIC0+IHZvaWQ7Cit9OworLy8gb3V0IG9mIGxp bmUgZGVmaW5pdGlvbnMKK2F1dG8gUzM6OmYwKHRoaXMgUzMpIC0+IHZvaWQge30KK2F1dG8gUzM6 OmYxKHRoaXMgUzMmKSAtPiB2b2lkIHt9CithdXRvIFMzOjpmMih0aGlzIFMzJiYpIC0+IHZvaWQg e30KK2F1dG8gUzM6OmYzKHRoaXMgUzMgY29uc3QmKSAtPiB2b2lkIHt9CithdXRvIFMzOjpmNCh0 aGlzIFMzIGNvbnN0JiYpIC0+IHZvaWQge30KK3RlbXBsYXRlPHR5cGVuYW1lIFNlbGY+CithdXRv IFMzOjpkMCh0aGlzIFNlbGYmJikgLT4gdm9pZCB7fQorYXV0byBTMzo6ZDEodGhpcyBhdXRvJiYp IC0+IHZvaWQge30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgY2FsbF93aXRoX3F1YWxp ZmljYXRpb24oKQoreworICBUIG9iant9OworICAvLyBieSB2YWx1ZSBzaG91bGQgdGFrZSBhbnkg cXVhbGlmaWNhdGlvbiAoZjApCisgIFR7fS5mMCgpOworICBvYmouZjAoKTsKKyAgc3RhdGljX2Nh c3Q8VCYmPihvYmopLmYwKCk7IAorICBzdGF0aWNfY2FzdDxUIGNvbnN0Jj4ob2JqKS5mMCgpOwor ICBzdGF0aWNfY2FzdDxUIGNvbnN0JiY+KG9iaikuZjAoKTsKKyAgLy8gc3BlY2lmaWMgcXVhbGlm aWNhdGlvbiAoZjEgLSBmNCkKKyAgVHt9LmYyKCk7CisgIFR7fS5mMygpOworICBUe30uZjQoKTsK KyAgb2JqLmYxKCk7CisgIG9iai5mMygpOworICBzdGF0aWNfY2FzdDxUJiY+KG9iaikuZjIoKTsK KyAgc3RhdGljX2Nhc3Q8VCYmPihvYmopLmYzKCk7CisgIHN0YXRpY19jYXN0PFQmJj4ob2JqKS5m NCgpOworICBzdGF0aWNfY2FzdDxUIGNvbnN0Jj4ob2JqKS5mMygpOworICBzdGF0aWNfY2FzdDxU IGNvbnN0JiY+KG9iaikuZjQoKTsKKyAgLy8gZGVkdWNlZCBzaG91bGQgKG9idmlvdXNseSkgdGFr ZSBhbnkgcXVhbGlmaWNhdGlvbiAoZDAsIGQxKQorICBUe30uZDAoKTsKKyAgb2JqLmQwKCk7Cisg IHN0YXRpY19jYXN0PFQmJj4ob2JqKS5kMCgpOworICBzdGF0aWNfY2FzdDxUIGNvbnN0Jj4ob2Jq KS5kMCgpOworICBzdGF0aWNfY2FzdDxUIGNvbnN0JiY+KG9iaikuZDAoKTsKKyAgVHt9LmQxKCk7 CisgIG9iai5kMSgpOworICBzdGF0aWNfY2FzdDxUJiY+KG9iaikuZDEoKTsKKyAgc3RhdGljX2Nh c3Q8VCBjb25zdCY+KG9iaikuZDEoKTsKKyAgc3RhdGljX2Nhc3Q8VCBjb25zdCYmPihvYmopLmQx KCk7Cit9CisKK3ZvaWQgcGVyZm9ybV9jYWxscygpCit7CisgIGNhbGxfd2l0aF9xdWFsaWZpY2F0 aW9uPFMwPigpOworICBjYWxsX3dpdGhfcXVhbGlmaWNhdGlvbjxTMT4oKTsKKyAgY2FsbF93aXRo X3F1YWxpZmljYXRpb248UzI+KCk7CisgIGNhbGxfd2l0aF9xdWFsaWZpY2F0aW9uPFMzPigpOwor fQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqLWJh c2ljMi5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqLWJhc2ljMi5D Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yYzJiNjlhZDM2MgotLS0g L2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iai1i YXNpYzIuQwpAQCAtMCwwICsxLDI3IEBACisvLyBQMDg0N1I3CisvLyB7IGRnLWRvIHJ1biB7IHRh cmdldCBjKysyMyB9IH0KKworLy8gZXhwbGljaXQgb2JqZWN0IG1lbWJlciBmdW5jdGlvbiBwb2lu dGVyIHR5cGUgZGVkdWN0aW9uLAorLy8gY29udmVyc2lvbiB0byBmdW5jdGlvbiBwb2ludGVyLAor Ly8gYW5kIGNhbGxpbmcgdGhyb3VnaCBwb2ludGVyIHRvIGZ1bmN0aW9uCisKK3N0cnVjdCBTIHsK KyAgaW50IF9uOworICBpbnQgZih0aGlzIFMmIHNlbGYpIHsgcmV0dXJuIHNlbGYuX247IH0KK307 CisKK3VzaW5nIGZfdHlwZSA9IGludCgqKShTJik7CisKK3N0YXRpY19hc3NlcnQgKF9faXNfc2Ft ZSAoZl90eXBlLCBkZWNsdHlwZSAoJlM6OmYpKSk7CisKK2ludCBtYWluKCkKK3sKKyAgYXV0byBm cDAgPSAmUzo6ZjsKKyAgZl90eXBlIGZwMSA9ICZTOjpmOworICBzdGF0aWNfYXNzZXJ0IChfX2lz X3NhbWUgKGRlY2x0eXBlIChmcDApLCBkZWNsdHlwZSAoZnAxKSkpOworICBTIHN7NDJ9OworICBp ZiAoZnAwIChzKSAhPSA0MikKKyAgICBfX2J1aWx0aW5fYWJvcnQgKCk7CisgIGlmIChmcDEgKHMp ICE9IDQyKQorICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iai1ieS12YWx1ZTEuQyBiL2djYy90ZXN0c3Vp dGUvZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iai1ieS12YWx1ZTEuQwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTg1YzlhYjAzYjAKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2MvdGVzdHN1aXRlL2crKy5kZy9jcHAyMy9leHBsaWNpdC1vYmotYnktdmFsdWUxLkMKQEAgLTAs MCArMSw0OSBAQAorLy8gUDA4NDdSNworLy8geyBkZy1kbyBydW4geyB0YXJnZXQgYysrMjMgfSB9 CisKKy8vIGNvbnZlcnNpb24gb2YgdGhlIGltcGxpY2l0IG9iamVjdCBhcmd1bWVudCB0byBhbiB4 b2JqIHBhcmFtZXRlcgorLy8gd2hlbiBjYWxsaW5nIGJ5IHZhbHVlIHhvYmogbWVtYmVyIGZ1bmN0 aW9ucworCisvLyBUaGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiB4b2JqIG1lbWJlciBmdW5j dGlvbnMgaW5jb3JyZWN0bHkgZGlkIG5vdAorLy8gY29udmVydCB0aGUgaW1wbGljaXQgb2JqZWN0 IGFyZ3VtZW50IHdoZW4gYmluZGluZyB0byB0aGUgeG9iagorLy8gcGFyYW1ldGVyLiBJbiBzcGl0 ZSBvZiB0aGlzLCBpdCBkaWQgY29ycmVjdGx5IGNoZWNrIHRvIHNlZSBpZiBzdWNoIGEKKy8vIGNv bnZlcnNpb24gd291bGQgYmUgdmFsaWQsIHRodXMgbm8gZGlhZ25vc3RpYyB3b3VsZCBiZSBlbWl0 dGVkIHdoZW4gYQorLy8gY29udmVyc2lvbiB3YXMgdmFsaWQsIGJ1dCBpbnN0ZWFkIG9mIGFwcGx5 aW5nIHRoZSBjb252ZXJzaW9uLCB0aGUKKy8vIGFyZ3VtZW50IHdvdWxkIHNpbGVudGx5IGJlIHJl aW50ZXJwcmV0ZWQgYXMgdGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlci4gCisKKy8vIFRoaXMgaXMg d2h5IHdlIHVzZSB1aW50cHRyX3QgZm9yIHRoZSB2YWx1ZSBpbiBTIGFuZCBjb21wYXJlIHRoZSBy ZXN1bHQKKy8vIG9mIGYgdG8gJnMsIHdlIHdhbnQgdG8gdGVzdCBmb3Igc2ltcGxlIHJlaW50ZXJw cmV0YXRpb24gb2YgdGhlCisvLyBhcmd1bWVudC4gVG8gYWNjdXJhdGVseSB0ZXN0IGZvciB0aGlz IHdlIG1ha2Ugc3VyZSB0byB1c2UgYW4gb2JqZWN0CisvLyB0aGF0IGhhcyBhIGRpZmZlcmVudCBh ZGRyZXNzIHRoYW4gdGhlIHZhbHVlIG9mIG91ciBtYWdpYyBudW1iZXIuIEl0J3MKKy8vIGFuIGlt cG9zc2libHkgaW1wcm9iYWJsZSBlZGdlIGNhc2UgYnV0IGl0J3MgdHJpdmlhbCB0byB3b3JrIGFy b3VuZC4gV2UKKy8vIHN0aWxsIGNvbXBhcmUgYWdhaW5zdCBib3RoIHRoZSBhZGRyZXNzIG9mIHMg YW5kIHRoZSBtYWdpYyBudW1iZXIgc28gd2UKKy8vIGNhbiBhZGRpdGlvbmFsbHkgdGVzdCBmb3Ig YnVnZ2VkIGNvbnZlcnNpb25zLCB3aGlsZSBhbHNvCisvLyBkaWZmZXJlbnRpYXRpbmcgdGhhdCBj YXNlIGZyb20gcmVpbnRlcnByZXRhdGlvbiBvZiB0aGUgYXJndW1lbnQuCisKKy8vIHsgZGcteGZh aWwtcnVuLWlmICJieSB2YWx1ZSBleHBsaWNpdCBvYmplY3QgcGFyYW1ldGVyIGlzIG5vdCBzdXBw b3J0ZWQgeWV0IiB7ICotKi0qIH0gfQorCit1c2luZyB1aW50cHRyX3QgPSBfX1VJTlRQVFJfVFlQ RV9fOworaW5saW5lIGNvbnN0ZXhwciB1aW50cHRyX3QgbWFnaWMgPSA0MjsKKworc3RydWN0IFMg eworICAgIHVpbnRwdHJfdCBfdjsKKyAgICB1aW50cHRyX3QgZih0aGlzIFMgc2VsZikgeworICAg ICAgICByZXR1cm4gc2VsZi5fdjsKKyAgICB9Cit9OworCitpbnQgbWFpbigpIAoreworICBTIHMw e21hZ2ljfTsKKyAgUyBzMXttYWdpY307CisgIC8vIHByZXZlbnQgKGFic3VyZGx5IGltcHJvYmFi bGUpIGJvZ3VzIGZhaWx1cmVzCisgIFMmIHMgPSBtYWdpYyAhPSAodWludHB0cl90KSgmczApID8g czAgOiBzMTsKKworICB1aW50cHRyX3QgY29uc3QgcmV0ID0gcy5mKCk7CisgIC8vIGNoZWNrIGZv ciByZWludGVycHJldGF0aW9uIG9mIHRoZSBvYmplY3QgYXJndW1lbnQKKyAgaWYgKHJldCA9PSAo dWludHB0cl90KSgmcykpCisgICAgX19idWlsdGluX2Fib3J0ICgpOworICAvLyBjaGVjayBmb3Ig YSBidWdnZWQgY29udmVyc2lvbgorICBpZiAocmV0ICE9IG1hZ2ljKQorICAgIF9fYnVpbHRpbl9h Ym9ydCAoKTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2V4cGxp Y2l0LW9iai1ieS12YWx1ZTIuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2V4cGxpY2l0 LW9iai1ieS12YWx1ZTIuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u MDUxNDM5YmIxZGYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAy My9leHBsaWNpdC1vYmotYnktdmFsdWUyLkMKQEAgLTAsMCArMSw1OSBAQAorLy8gUDA4NDdSNwor Ly8geyBkZy1kbyBydW4geyB0YXJnZXQgYysrMjMgfSB9CisKKy8vIGNvbnZlcnNpb24gb2YgdGhl IGltcGxpY2l0IG9iamVjdCBhcmd1bWVudCB0byBhbiB4b2JqIHBhcmFtZXRlcgorLy8gdXNpbmcg YSB1c2VyIGRlZmluZWQgY29udmVyc2lvbiBvciBjb252ZXJ0aW5nIGNvbnN0cnVjdG9yCisvLyB3 aGVuIGNhbGxpbmcgYnkgdmFsdWUgeG9iaiBtZW1iZXIgZnVuY3Rpb25zCisKKy8vIHNlZSBleHBs aWNpdC1vYmotYnktdmFsdWUxLkMgZm9yIGRldGFpbHMgb24gdGhpcyB0ZXN0CisKKy8vIHsgZGct eGZhaWwtcnVuLWlmICJ1c2VyIGRlZmluZWQgY29udmVyc2lvbnMgZnJvbSBhbiBpbXBsaWNpdCBv YmplY3QgYXJndW1lbnQgdG8gYW4gZXhwbGljaXQgb2JqZWN0IHBhcmFtZXRlciBhcmUgbm90IHN1 cHBvcnRlZCB5ZXQiIHsgKi0qLSogfSB9CisKK3VzaW5nIHVpbnRwdHJfdCA9IF9fVUlOVFBUUl9U WVBFX187CitpbmxpbmUgY29uc3RleHByIHVpbnRwdHJfdCBtYWdpYyA9IDQyOworCitzdHJ1Y3Qg UzsKKworc3RydWN0IEZyb21TIHsKKyAgdWludHB0cl90IF92OworICBGcm9tUyhTKTsKK307CisK K3N0cnVjdCBTIHsKKyAgb3BlcmF0b3IgdWludHB0cl90KCkgY29uc3QgeworICAgIHJldHVybiBt YWdpYzsKKyAgfQorICB1aW50cHRyX3QgZih0aGlzIHVpbnRwdHJfdCBuKSB7CisgICAgcmV0dXJu IG47CisgIH0KKyAgdWludHB0cl90IGcodGhpcyBGcm9tUyBmcm9tX3MpIHsKKyAgICByZXR1cm4g ZnJvbV9zLl92OworICB9Cit9OworCitGcm9tUzo6RnJvbVMoUykgOiBfdihtYWdpYykge30KKwor CitpbnQgbWFpbigpIAoreworICBTIHMwe307CisgIFMgczF7fTsKKyAgLy8gcHJldmVudCAoYWJz dXJkbHkgaW1wcm9iYWJsZSkgYm9ndXMgZmFpbHVyZXMKKyAgUyYgcyA9IG1hZ2ljICE9ICh1aW50 cHRyX3QpKCZzMCkgPyBzMCA6IHMxOworCisgIHVpbnRwdHJfdCBjb25zdCByZXQwID0gcy5mKCk7 CisgIC8vIGNoZWNrIGZvciByZWludGVycHJldGF0aW9uIG9mIHRoZSBvYmplY3QgYXJndW1lbnQK KyAgaWYgKHJldDAgPT0gKHVpbnRwdHJfdCkoJnMpKQorICAgIF9fYnVpbHRpbl9hYm9ydCAoKTsK KyAgLy8gY2hlY2sgZm9yIGEgYnVnZ2VkIGNvbnZlcnNpb24KKyAgaWYgKHJldDAgIT0gbWFnaWMp CisgICAgX19idWlsdGluX2Fib3J0ICgpOworCisgIHVpbnRwdHJfdCBjb25zdCByZXQxID0gcy5n KCk7CisgIC8vIGNoZWNrIGZvciByZWludGVycHJldGF0aW9uIG9mIHRoZSBvYmplY3QgYXJndW1l bnQKKyAgaWYgKHJldDEgPT0gKHVpbnRwdHJfdCkoJnMpKQorICAgIF9fYnVpbHRpbl9hYm9ydCAo KTsKKyAgLy8gY2hlY2sgZm9yIGEgYnVnZ2VkIGNvbnZlcnNpb24KKyAgaWYgKHJldDEgIT0gbWFn aWMpCisgICAgX19idWlsdGluX2Fib3J0ICgpOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqLWJ5LXZhbHVlMy5DIGIvZ2NjL3Rlc3RzdWl0ZS9n KysuZGcvY3BwMjMvZXhwbGljaXQtb2JqLWJ5LXZhbHVlMy5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi4zMGU1NTZiZDZjYgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iai1ieS12YWx1ZTMuQwpAQCAtMCwwICsx LDQyIEBACisvLyBQMDg0N1I3CisvLyB7IGRnLWRvIHJ1biB7IHRhcmdldCBjKysyMyB9IH0KKwor Ly8gY29ycmVjdCBjb25zdHJ1Y3RvciBzZWxlY3Rpb24gd2hlbiBpbml0aWFsaXppbmcgYSBieSB2 YWx1ZSB4b2JqIHBhcmFtZXRlcgorCisvLyBzZWUgZXhwbGljaXQtb2JqLWJ5LXZhbHVlMS5DIGZv ciBkZXRhaWxzIG9uIHRoaXMgdGVzdAorCisvLyB7IGRnLXhmYWlsLXJ1bi1pZiAiYnkgdmFsdWUg ZXhwbGljaXQgb2JqZWN0IHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIHlldCIgeyAqLSotKiB9 IH0KKwordXNpbmcgdWludHB0cl90ID0gX19VSU5UUFRSX1RZUEVfXzsKK2lubGluZSBjb25zdGV4 cHIgdWludHB0cl90IG1hZ2ljID0gNDI7CitpbmxpbmUgY29uc3RleHByIHVpbnRwdHJfdCBjb3B5 X21hZ2ljID0gNTsKK2lubGluZSBjb25zdGV4cHIgdWludHB0cl90IG1vdmVfbWFnaWMgPSAxMDsK Kworc3RydWN0IFMgeworICB1aW50cHRyX3QgX3Y7CisgIGV4cGxpY2l0IFModWludHB0cl90IHYp IDogX3Yodikge30KKyAgUyhTIGNvbnN0JiBvdGhlcikgOiBfdihvdGhlci5fdiArIGNvcHlfbWFn aWMpIHt9CisgIFMoUyYmIG90aGVyKSA6IF92KG90aGVyLl92ICsgbW92ZV9tYWdpYykge30KKyAg dWludHB0cl90IGYodGhpcyBTIHNlbGYpIHsKKyAgICByZXR1cm4gc2VsZi5fdjsKKyAgfQorfTsK KworaW50IG1haW4oKSAKK3sKKyAgUyBzMHttYWdpY307CisgIFMgczF7bWFnaWN9OworICAvLyBw cmV2ZW50IChhYnN1cmRseSBpbXByb2JhYmxlICheMikpIGJvZ3VzIHJlc3VsdHMKKyAgLy8gaXQn cyB2aXJ0dWFsbHkgaW1wb3NzaWJsZSBmb3IgYm90aCB0byBoYXZlIGEgYm9ndXMgcmVzdWx0LAor ICAvLyBidXQgd2UgY2FuIGd1YXJhbnRlZSBjb3JyZWN0IHJlc3VsdHMgZnJvbSBib3RoIGVhc2ls eSwgc28gd2h5IG5vdD8KKyAgUyYgc19jb3B5X2Zyb20gPSBtYWdpYyArIGNvcHlfbWFnaWMgIT0g KHVpbnRwdHJfdCkoJnMwKSA/IHMwIDogczE7CisgIFMmIHNfbW92ZV9mcm9tID0gbWFnaWMgKyBt b3ZlX21hZ2ljICE9ICh1aW50cHRyX3QpKCZzMCkgPyBzMCA6IHMxOworICB1aW50cHRyX3QgY29u c3QgY29weV9yZXQgPSBzdGF0aWNfY2FzdDxTIGNvbnN0Jj4oc19jb3B5X2Zyb20pLmYoKTsKKyAg dWludHB0cl90IGNvbnN0IG1vdmVfcmV0ID0gc3RhdGljX2Nhc3Q8UyYmPihzX21vdmVfZnJvbSku ZigpOworICAvLyB3ZSB0ZXN0IHNwZWNpZmljYWxseSBmb3IgcmVpbnRlcnByZXRhdGlvbiBpbiBv dGhlcgorICAvLyBieSB2YWx1ZSB0ZXN0cywgaXQncyB1bm5lY2Vzc2FyeSB0byBkbyBpdCBhZ2Fp biBoZXJlCisgIGlmIChjb3B5X3JldCAhPSBtYWdpYyArIGNvcHlfbWFnaWMpCisgICAgX19idWls dGluX2Fib3J0ICgpOworICBpZiAobW92ZV9yZXQgIT0gbWFnaWMgKyBtb3ZlX21hZ2ljKQorICAg IF9fYnVpbHRpbl9hYm9ydCAoKTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRn L2NwcDIzL2V4cGxpY2l0LW9iai1ieS12YWx1ZTQuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2Nw cDIzL2V4cGxpY2l0LW9iai1ieS12YWx1ZTQuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uZDNjNWUzOTNlN2IKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRl L2crKy5kZy9jcHAyMy9leHBsaWNpdC1vYmotYnktdmFsdWU0LkMKQEAgLTAsMCArMSwxOSBAQAor Ly8gUDA4NDdSNworLy8geyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IGMrKzIzIH0gfQorCisvLyBk aWFnbm9zaXMgb2YgaWxsLWZvcm1lZCBjYWxscyB0byBieS12YWx1ZSB4b2JqIG1lbWJlciBmdW5j dGlvbnMKKy8vIGR1ZSB0byBhbiBhYnNlbmNlIG9mIHZhbGlkIGNvbnZlcnNpb24gZnVuY3Rpb25z CisKK3N0cnVjdCBOb3RGcm9tUyB7fTsKKworc3RydWN0IFMgeworICB2b2lkIGYodGhpcyBpbnQp IHt9CisgIHZvaWQgZyh0aGlzIE5vdEZyb21TKSB7fQorfTsKKwordm9pZCB0ZXN0KCkKK3sKKyAg UyBze307CisgIHMuZigpOyAvLyB7IGRnLWVycm9yIHtjYW5ub3QgY29udmVydCAnUycgdG8gJ2lu dCd9IH0KKyAgcy5nKCk7IC8vIHsgZGctZXJyb3Ige2Nhbm5vdCBjb252ZXJ0ICdTJyB0byAnTm90 RnJvbVMnfSB9Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAyMy9leHBs aWNpdC1vYmotbGFtYmRhMS5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQt b2JqLWxhbWJkYTEuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTEz ZmIzY2E1Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAyMy9l eHBsaWNpdC1vYmotbGFtYmRhMS5DCkBAIC0wLDAgKzEsMTEgQEAKKy8vIFAwODQ3UjcKKy8vIHsg ZGctZG8gY29tcGlsZSB7IHRhcmdldCBjKysyMyB9IH0KKworLy8gbGFtYmRhIGRlY2xhcmF0aW9u IHdpdGggeG9iaiBwYXJhbWV0ZXIKKworLy8geyBkZy1leGNlc3MtZXJyb3JzICJleHBsaWNpdCBv YmplY3QgcGFyYW1ldGVyIHdpdGggbGFtYmRhcyBub3QgaW1wbGVtZW50ZWQgeWV0IiB7IHhmYWls ICotKi0qIH0gfQorCit2b2lkIHRlc3QoKQoreworICAodm9pZClbXSh0aGlzIGF1dG8mJiBzZWxm KXt9OworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQt b2JqLW9wcy1tZW0tYXJyb3cuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2V4cGxpY2l0 LW9iai1vcHMtbWVtLWFycm93LkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmM1YjJjODA1YTJmCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv Y3BwMjMvZXhwbGljaXQtb2JqLW9wcy1tZW0tYXJyb3cuQwpAQCAtMCwwICsxLDI3IEBACisvLyBQ MDg0N1I3CisvLyB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgYysrMjMgfSB9CisKKy8vIHVzZXMg b2YgbWVtYmVyIG9ubHkgb3BlcmF0b3JzIChhcnJvdykKKworc3RydWN0IFMgeworICBpbnQgX3Y7 CisgIFMqIG9wZXJhdG9yLT4odGhpcyBTJiBzZWxmKSB7IHJldHVybiAmc2VsZjsgfQorfTsKKwor dm9pZCBub25fZGVwKCkKK3sKKyAgUyBze307CisgICh2b2lkKXMtPl92OworfQorCit0ZW1wbGF0 ZTx0eXBlbmFtZSA9IHZvaWQ+Cit2b2lkIGRlcGVuZGVudCgpCit7CisgIFMgc3t9OworICAodm9p ZClzLT5fdjsKK30KKwordm9pZCBjYWxsKCkKK3sKKyAgZGVwZW5kZW50KCk7Cit9CmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAyMy9leHBsaWNpdC1vYmotb3BzLW1lbS1hc3Np Z25tZW50LkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAyMy9leHBsaWNpdC1vYmotb3BzLW1l bS1hc3NpZ25tZW50LkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgy OWM3MTM3YWJjCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMv ZXhwbGljaXQtb2JqLW9wcy1tZW0tYXNzaWdubWVudC5DCkBAIC0wLDAgKzEsMjYgQEAKKy8vIFAw ODQ3UjcKKy8vIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCBjKysyMyB9IH0KKworLy8gdXNlcyBv ZiBtZW1iZXIgb25seSBvcGVyYXRvcnMgKGFzc2lnbm1lbnQpCisKK3N0cnVjdCBTIHsKKyAgdm9p ZCBvcGVyYXRvcj0odGhpcyBTJiwgaW50KSB7fQorfTsKKwordm9pZCBub25fZGVwKCkKK3sKKyAg UyBze307CisgIHMgPSAwOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSA9IHZvaWQ+Cit2b2lkIGRl cGVuZGVudCgpCit7CisgIFMgc3t9OworICBzID0gMDsKK30KKwordm9pZCBjYWxsKCkKK3sKKyAg ZGVwZW5kZW50KCk7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAyMy9l eHBsaWNpdC1vYmotb3BzLW1lbS1jYWxsLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAyMy9l eHBsaWNpdC1vYmotb3BzLW1lbS1jYWxsLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjFkZmU3NjRkZTgzCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n KysuZGcvY3BwMjMvZXhwbGljaXQtb2JqLW9wcy1tZW0tY2FsbC5DCkBAIC0wLDAgKzEsMzkgQEAK Ky8vIFAwODQ3UjcKKy8vIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCBjKysyMyB9IH0KKworLy8g dXNlcyBvZiBtZW1iZXIgb25seSBvcGVyYXRvcnMgKGNhbGwgb3ApCisKKy8vIGV4ZWN1dGlvbiBw YXRocyBmb3Igc3Vic2NyaXB0IHdpdGggMSBhcmd1bWVudCBhbmQgMCBhbmQgMisgYXJndW1lbnRz IGFyZSBkaWZmZXJlbnQKKy8vIGp1c3QgdG8gYmUgc2FmZSwgYWxzbyB0ZXN0IDAgYW5kIDIgYXJn dW1lbnQgY2FzZXMgaGVyZSB0b28KKworc3RydWN0IFMgeworICB2b2lkIG9wZXJhdG9yKCkodGhp cyBTJikge30KKyAgdm9pZCBvcGVyYXRvcigpKHRoaXMgUyYsIGludCkge30KKyAgdm9pZCBvcGVy YXRvcigpKHRoaXMgUyYsIGludCwgaW50KSB7fQorICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdz PgorICB2b2lkIG9wZXJhdG9yKCkodGhpcyBTJiwgQXJncy4uLiBhcmdzKSB7fQorfTsKKwordm9p ZCBub25fZGVwKCkKK3sKKyAgUyBze307CisgIHMoKTsKKyAgcygwKTsKKyAgcygwLCAwKTsKKyAg cygwLCAwLCAwKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgPSB2b2lkPgordm9pZCBkZXBlbmRl bnQoKQoreworICBTIHN7fTsKKyAgcygpOworICBzKDApOworICBzKDAsIDApOworICBzKDAsIDAs IDApOworfQorCit2b2lkIGNhbGwoKQoreworICBkZXBlbmRlbnQoKTsKK30KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iai1vcHMtbWVtLXN1YnNjcmlw dC5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqLW9wcy1tZW0tc3Vi c2NyaXB0LkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNlZTVmNmUx MzVjCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMvZXhwbGlj aXQtb2JqLW9wcy1tZW0tc3Vic2NyaXB0LkMKQEAgLTAsMCArMSwzOSBAQAorLy8gUDA4NDdSNwor Ly8geyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IGMrKzIzIH0gfQorCisvLyB1c2VzIG9mIG1lbWJl ciBvbmx5IG9wZXJhdG9ycyAoc3Vic2NyaXB0KQorCisvLyBleGVjdXRpb24gcGF0aHMgZm9yIHN1 YnNjcmlwdCB3aXRoIDEgYXJndW1lbnQgYW5kIDAgYW5kIDIrIGFyZ3VtZW50cyBhcmUgZGlmZmVy ZW50CisvLyB0aGVyZWZvcmUgd2Ugc2hvdWxkIGFkZGl0aW9uYWxseSB0ZXN0IHRoZSAwIGFuZCAy IGFyZ3VtZW50IGNhc2VzIGFzIHdlbGwKKworc3RydWN0IFMgeworICB2b2lkIG9wZXJhdG9yW10o dGhpcyBTJikge30KKyAgdm9pZCBvcGVyYXRvcltdKHRoaXMgUyYsIGludCkge30KKyAgdm9pZCBv cGVyYXRvcltdKHRoaXMgUyYsIGludCwgaW50KSB7fQorICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB cmdzPgorICB2b2lkIG9wZXJhdG9yW10odGhpcyBTJiwgQXJncy4uLiBhcmdzKSB7fQorfTsKKwor dm9pZCBub25fZGVwKCkKK3sKKyAgUyBze307CisgIHNbXTsKKyAgc1swXTsKKyAgc1swLCAwXTsK KyAgc1swLCAwLCAwXTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgPSB2b2lkPgordm9pZCBkZXBl bmRlbnQoKQoreworICBTIHN7fTsKKyAgc1tdOworICBzWzBdOworICBzWzAsIDBdOworICBzWzAs IDAsIDBdOworfQorCit2b2lkIGNhbGwoKQoreworICBkZXBlbmRlbnQoKTsKK30KZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iai1vcHMtbm9uLW1lbS1k ZXAuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iai1vcHMtbm9uLW1l bS1kZXAuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2M5ZjkzZmJj YzIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAyMy9leHBsaWNp dC1vYmotb3BzLW5vbi1tZW0tZGVwLkMKQEAgLTAsMCArMSw1NyBAQAorLy8gUDA4NDdSNworLy8g eyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IGMrKzIzIH0gfQorCisvLyBvcGVyYXRvcnMgdGhhdCBh cmUgbm90IHJlcXVpcmVkIHRvIGJlIG1lbWJlcnMKKy8vIGNhbGxlZCBpbiBhIGRlcGVuZGVudCBj b250ZXh0IChhcyBub24gZGVwZW5kZW50IGV4cHJzKQorLy8gc2VlIGhlYWRlcgorI2luY2x1ZGUg ImV4cGxpY2l0LW9iai1vcHMtbm9uLW1lbS5oIgorCisvLyBub29wLCBpbmRpY2F0ZXMgd2hpY2gg dmVyc2lvbnMgYXJlIGlsbC1mb3JtZWQKKy8vIEkgY291bGQgbm90IGZpbmQgYSB3YXkgdG8gdGVz dCB0aGUgaW52YWxpZCBjYXNlcworLy8gd2l0aG91dCByZXF1aXJlcyBleHByZXNzaW9ucworI2Rl ZmluZSBURVNUX0lOVkFMSUQoWCkKKwordGVtcGxhdGU8dHlwZW5hbWUgVCA9IHZvaWQ+Cit2b2lk IGRvX2NhbGxzKCkKK3sKKyAgVmFsdWUgdmFsdWV7fTsKKyAgVEVTVF9PUFModmFsdWUpCisgIFRF U1RfT1BTKHN0YXRpY19jYXN0PFZhbHVlJiY+KHZhbHVlKSkKKyAgVEVTVF9PUFMoc3RhdGljX2Nh c3Q8VmFsdWUgY29uc3QmPih2YWx1ZSkpCisgIFRFU1RfT1BTKHN0YXRpY19jYXN0PFZhbHVlIGNv bnN0JiY+KHZhbHVlKSkKKyAgCisgIExSZWYgbF9yZWZ7fTsKKyAgVEVTVF9PUFMobF9yZWYpCisg IFRFU1RfSU5WQUxJRChzdGF0aWNfY2FzdDxMUmVmJiY+KGxfcmVmKSkKKyAgVEVTVF9JTlZBTElE KHN0YXRpY19jYXN0PExSZWYgY29uc3QmPihsX3JlZikpCisgIFRFU1RfSU5WQUxJRChzdGF0aWNf Y2FzdDxMUmVmIGNvbnN0JiY+KGxfcmVmKSkKKworICBSUmVmIHJfcmVme307CisgIFRFU1RfSU5W QUxJRChyX3JlZikKKyAgVEVTVF9PUFMoc3RhdGljX2Nhc3Q8UlJlZiYmPihyX3JlZikpCisgIFRF U1RfSU5WQUxJRChzdGF0aWNfY2FzdDxSUmVmIGNvbnN0Jj4ocl9yZWYpKQorICBURVNUX0lOVkFM SUQoc3RhdGljX2Nhc3Q8UlJlZiBjb25zdCYmPihyX3JlZikpCisKKyAgQ29uc3RMUmVmIGNvbnN0 X2xfcmVme307CisgIFRFU1RfT1BTKGNvbnN0X2xfcmVmKQorICBURVNUX09QUyhzdGF0aWNfY2Fz dDxDb25zdExSZWYmJj4oY29uc3RfbF9yZWYpKQorICBURVNUX09QUyhzdGF0aWNfY2FzdDxDb25z dExSZWYgY29uc3QmPihjb25zdF9sX3JlZikpCisgIFRFU1RfT1BTKHN0YXRpY19jYXN0PENvbnN0 TFJlZiBjb25zdCYmPihjb25zdF9sX3JlZikpCisKKyAgQ29uc3RSUmVmIGNvbnN0X3JfcmVme307 CisgIFRFU1RfSU5WQUxJRChjb25zdF9yX3JlZikKKyAgVEVTVF9JTlZBTElEKHN0YXRpY19jYXN0 PENvbnN0UlJlZiYmPihjb25zdF9yX3JlZikpCisgIFRFU1RfSU5WQUxJRChzdGF0aWNfY2FzdDxD b25zdFJSZWYgY29uc3QmPihjb25zdF9yX3JlZikpCisgIFRFU1RfT1BTKHN0YXRpY19jYXN0PENv bnN0UlJlZiBjb25zdCYmPihjb25zdF9yX3JlZikpCisKKyAgRGVkdWNlZCBkZWR1Y2Vke307Cisg IFRFU1RfT1BTKGRlZHVjZWQpCisgIFRFU1RfT1BTKHN0YXRpY19jYXN0PERlZHVjZWQmJj4oZGVk dWNlZCkpCisgIFRFU1RfT1BTKHN0YXRpY19jYXN0PERlZHVjZWQgY29uc3QmPihkZWR1Y2VkKSkK KyAgVEVTVF9PUFMoc3RhdGljX2Nhc3Q8RGVkdWNlZCBjb25zdCYmPihkZWR1Y2VkKSkKKworICBW QUxJREFURV9SRVRVUk5fVFlQRVMoZGVkdWNlZCwgRGVkdWNlZCYpCisgIFZBTElEQVRFX1JFVFVS Tl9UWVBFUyhzdGF0aWNfY2FzdDxEZWR1Y2VkJiY+KGRlZHVjZWQpLCBEZWR1Y2VkJiYpCisgIFZB TElEQVRFX1JFVFVSTl9UWVBFUyhzdGF0aWNfY2FzdDxEZWR1Y2VkIGNvbnN0Jj4oZGVkdWNlZCks IERlZHVjZWQgY29uc3QmKQorICBWQUxJREFURV9SRVRVUk5fVFlQRVMoc3RhdGljX2Nhc3Q8RGVk dWNlZCBjb25zdCYmPihkZWR1Y2VkKSwgRGVkdWNlZCBjb25zdCYmKQorfQpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqLW9wcy1ub24tbWVtLW5vbi1k ZXAuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2V4cGxpY2l0LW9iai1vcHMtbm9uLW1l bS1ub24tZGVwLkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc5MGE2 ZWMzNzlmCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMvZXhw bGljaXQtb2JqLW9wcy1ub24tbWVtLW5vbi1kZXAuQwpAQCAtMCwwICsxLDU2IEBACisvLyBQMDg0 N1I3CisvLyB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgYysrMjMgfSB9CisKKy8vIG9wZXJhdG9y cyB0aGF0IGFyZSBub3QgcmVxdWlyZWQgdG8gYmUgbWVtYmVycworLy8gY2FsbGVkIGluIGEgbm9u LWRlcGVuZGVudCBjb250ZXh0CisvLyBzZWUgaGVhZGVyCisjaW5jbHVkZSAiZXhwbGljaXQtb2Jq LW9wcy1ub24tbWVtLmgiCisKKy8vIG5vb3AsIGluZGljYXRlcyB3aGljaCB2ZXJzaW9ucyBhcmUg aWxsLWZvcm1lZAorLy8gSSBjb3VsZCBub3QgZmluZCBhIHdheSB0byB0ZXN0IHRoZSBpbnZhbGlk IGNhc2VzCisvLyB3aXRob3V0IHJlcXVpcmVzIGV4cHJlc3Npb25zCisjZGVmaW5lIFRFU1RfSU5W QUxJRChYKQorCit2b2lkIGRvX2NhbGxzKCkKK3sKKyAgVmFsdWUgdmFsdWV7fTsKKyAgVEVTVF9P UFModmFsdWUpCisgIFRFU1RfT1BTKHN0YXRpY19jYXN0PFZhbHVlJiY+KHZhbHVlKSkKKyAgVEVT VF9PUFMoc3RhdGljX2Nhc3Q8VmFsdWUgY29uc3QmPih2YWx1ZSkpCisgIFRFU1RfT1BTKHN0YXRp Y19jYXN0PFZhbHVlIGNvbnN0JiY+KHZhbHVlKSkKKyAgCisgIExSZWYgbF9yZWZ7fTsKKyAgVEVT VF9PUFMobF9yZWYpCisgIFRFU1RfSU5WQUxJRChzdGF0aWNfY2FzdDxMUmVmJiY+KGxfcmVmKSkK KyAgVEVTVF9JTlZBTElEKHN0YXRpY19jYXN0PExSZWYgY29uc3QmPihsX3JlZikpCisgIFRFU1Rf SU5WQUxJRChzdGF0aWNfY2FzdDxMUmVmIGNvbnN0JiY+KGxfcmVmKSkKKworICBSUmVmIHJfcmVm e307CisgIFRFU1RfSU5WQUxJRChyX3JlZikKKyAgVEVTVF9PUFMoc3RhdGljX2Nhc3Q8UlJlZiYm PihyX3JlZikpCisgIFRFU1RfSU5WQUxJRChzdGF0aWNfY2FzdDxSUmVmIGNvbnN0Jj4ocl9yZWYp KQorICBURVNUX0lOVkFMSUQoc3RhdGljX2Nhc3Q8UlJlZiBjb25zdCYmPihyX3JlZikpCisKKyAg Q29uc3RMUmVmIGNvbnN0X2xfcmVme307CisgIFRFU1RfT1BTKGNvbnN0X2xfcmVmKQorICBURVNU X09QUyhzdGF0aWNfY2FzdDxDb25zdExSZWYmJj4oY29uc3RfbF9yZWYpKQorICBURVNUX09QUyhz dGF0aWNfY2FzdDxDb25zdExSZWYgY29uc3QmPihjb25zdF9sX3JlZikpCisgIFRFU1RfT1BTKHN0 YXRpY19jYXN0PENvbnN0TFJlZiBjb25zdCYmPihjb25zdF9sX3JlZikpCisKKyAgQ29uc3RSUmVm IGNvbnN0X3JfcmVme307CisgIFRFU1RfSU5WQUxJRChjb25zdF9yX3JlZikKKyAgVEVTVF9JTlZB TElEKHN0YXRpY19jYXN0PENvbnN0UlJlZiYmPihjb25zdF9yX3JlZikpCisgIFRFU1RfSU5WQUxJ RChzdGF0aWNfY2FzdDxDb25zdFJSZWYgY29uc3QmPihjb25zdF9yX3JlZikpCisgIFRFU1RfT1BT KHN0YXRpY19jYXN0PENvbnN0UlJlZiBjb25zdCYmPihjb25zdF9yX3JlZikpCisKKyAgRGVkdWNl ZCBkZWR1Y2Vke307CisgIFRFU1RfT1BTKGRlZHVjZWQpCisgIFRFU1RfT1BTKHN0YXRpY19jYXN0 PERlZHVjZWQmJj4oZGVkdWNlZCkpCisgIFRFU1RfT1BTKHN0YXRpY19jYXN0PERlZHVjZWQgY29u c3QmPihkZWR1Y2VkKSkKKyAgVEVTVF9PUFMoc3RhdGljX2Nhc3Q8RGVkdWNlZCBjb25zdCYmPihk ZWR1Y2VkKSkKKworICBWQUxJREFURV9SRVRVUk5fVFlQRVMoZGVkdWNlZCwgRGVkdWNlZCYpCisg IFZBTElEQVRFX1JFVFVSTl9UWVBFUyhzdGF0aWNfY2FzdDxEZWR1Y2VkJiY+KGRlZHVjZWQpLCBE ZWR1Y2VkJiYpCisgIFZBTElEQVRFX1JFVFVSTl9UWVBFUyhzdGF0aWNfY2FzdDxEZWR1Y2VkIGNv bnN0Jj4oZGVkdWNlZCksIERlZHVjZWQgY29uc3QmKQorICBWQUxJREFURV9SRVRVUk5fVFlQRVMo c3RhdGljX2Nhc3Q8RGVkdWNlZCBjb25zdCYmPihkZWR1Y2VkKSwgRGVkdWNlZCBjb25zdCYmKQor fQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqLW9w cy1ub24tbWVtLmggYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAyMy9leHBsaWNpdC1vYmotb3Bz LW5vbi1tZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjk0ZTU2 YjFkZDYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAyMy9leHBs aWNpdC1vYmotb3BzLW5vbi1tZW0uaApAQCAtMCwwICsxLDIwMiBAQAorLy8gbWlzc2luZyB0ZXN0 IGZvciB0aHJlZS13YXktY29tcGFyZSAoSSBkb24ndCBrbm93IGhvdyB0byB3cml0ZSBpdCkKKy8v IG1pc3NpbmcgdGVzdCBmb3IgLT4qIChJIGRvbid0IGtub3cgaG93IHRvIHdyaXRlIGl0KQorCisv LyB0ZXN0cyBmb3Igb3BzIHRoYXQgbXVzdCBiZSBtZW1iZXIgZnVuY3Rpb25zIGFyZSBzZXBlcmF0 ZQorCisjZGVmaW5lIE1BS0VfU1RSVUNUX09QUyhUWVBFKSBcCisgIFRZUEUgb3BlcmF0b3IrPSh0 aGlzIFRZUEUgc2VsZiwgaW50KSB7IHJldHVybiBzZWxmOyB9CQlcCisgIFRZUEUgb3BlcmF0b3It PSh0aGlzIFRZUEUgc2VsZiwgaW50KSB7IHJldHVybiBzZWxmOyB9CQlcCisgIFRZUEUgb3BlcmF0 b3IqPSh0aGlzIFRZUEUgc2VsZiwgaW50KSB7IHJldHVybiBzZWxmOyB9CQlcCisgIFRZUEUgb3Bl cmF0b3IvPSh0aGlzIFRZUEUgc2VsZiwgaW50KSB7IHJldHVybiBzZWxmOyB9CQlcCisgIFRZUEUg b3BlcmF0b3IlPSh0aGlzIFRZUEUgc2VsZiwgaW50KSB7IHJldHVybiBzZWxmOyB9CQlcCisgIFRZ UEUgb3BlcmF0b3ImPSh0aGlzIFRZUEUgc2VsZiwgaW50KSB7IHJldHVybiBzZWxmOyB9CQlcCisg IFRZUEUgb3BlcmF0b3J8PSh0aGlzIFRZUEUgc2VsZiwgaW50KSB7IHJldHVybiBzZWxmOyB9CQlc CisgIFRZUEUgb3BlcmF0b3JePSh0aGlzIFRZUEUgc2VsZiwgaW50KSB7IHJldHVybiBzZWxmOyB9 CQlcCisgIFRZUEUgb3BlcmF0b3I8PD0odGhpcyBUWVBFIHNlbGYsIGludCkgeyByZXR1cm4gc2Vs ZjsgfQlcCisgIFRZUEUgb3BlcmF0b3I+Pj0odGhpcyBUWVBFIHNlbGYsIGludCkgeyByZXR1cm4g c2VsZjsgfQlcCisgIFRZUEUgb3BlcmF0b3IrKyh0aGlzIFRZUEUgc2VsZikgeyByZXR1cm4gc2Vs ZjsgfQkJXAorICBUWVBFIG9wZXJhdG9yLS0odGhpcyBUWVBFIHNlbGYpIHsgcmV0dXJuIHNlbGY7 IH0JCVwKKyAgVFlQRSBvcGVyYXRvcisrKHRoaXMgVFlQRSBzZWxmLCBpbnQpIHsgcmV0dXJuIHNl bGY7IH0JCVwKKyAgVFlQRSBvcGVyYXRvci0tKHRoaXMgVFlQRSBzZWxmLCBpbnQpIHsgcmV0dXJu IHNlbGY7IH0JCVwKKyAgVFlQRSBvcGVyYXRvcisodGhpcyBUWVBFIHNlbGYpIHsgcmV0dXJuIHNl bGY7IH0JCVwKKyAgVFlQRSBvcGVyYXRvci0odGhpcyBUWVBFIHNlbGYpIHsgcmV0dXJuIHNlbGY7 IH0JCVwKKyAgVFlQRSBvcGVyYXRvcisodGhpcyBUWVBFIHNlbGYsIGludCkgeyByZXR1cm4gc2Vs ZjsgfQkJXAorICBUWVBFIG9wZXJhdG9yLSh0aGlzIFRZUEUgc2VsZiwgaW50KSB7IHJldHVybiBz ZWxmOyB9CQlcCisgIFRZUEUgb3BlcmF0b3IqKHRoaXMgVFlQRSBzZWxmLCBpbnQpIHsgcmV0dXJu IHNlbGY7IH0JCVwKKyAgVFlQRSBvcGVyYXRvci8odGhpcyBUWVBFIHNlbGYsIGludCkgeyByZXR1 cm4gc2VsZjsgfQkJXAorICBUWVBFIG9wZXJhdG9yJSh0aGlzIFRZUEUgc2VsZiwgaW50KSB7IHJl dHVybiBzZWxmOyB9CQlcCisgIFRZUEUgb3BlcmF0b3ImKHRoaXMgVFlQRSBzZWxmLCBpbnQpIHsg cmV0dXJuIHNlbGY7IH0JCVwKKyAgVFlQRSBvcGVyYXRvcnwodGhpcyBUWVBFIHNlbGYsIGludCkg eyByZXR1cm4gc2VsZjsgfQkJXAorICBUWVBFIG9wZXJhdG9yXih0aGlzIFRZUEUgc2VsZiwgaW50 KSB7IHJldHVybiBzZWxmOyB9CQlcCisgIFRZUEUgb3BlcmF0b3I8PCh0aGlzIFRZUEUgc2VsZiwg aW50KSB7IHJldHVybiBzZWxmOyB9CQlcCisgIFRZUEUgb3BlcmF0b3I+Pih0aGlzIFRZUEUgc2Vs ZiwgaW50KSB7IHJldHVybiBzZWxmOyB9CQlcCisgIFRZUEUgb3BlcmF0b3IhKHRoaXMgVFlQRSBz ZWxmKSB7IHJldHVybiBzZWxmOyB9CQlcCisgIFRZUEUgb3BlcmF0b3ImJih0aGlzIFRZUEUgc2Vs ZiwgaW50IGNvbnN0JikgeyByZXR1cm4gc2VsZjsgfQlcCisgIFRZUEUgb3BlcmF0b3J8fCh0aGlz IFRZUEUgc2VsZiwgaW50IGNvbnN0JikgeyByZXR1cm4gc2VsZjsgfQlcCisgIFRZUEUgb3BlcmF0 b3I9PSh0aGlzIFRZUEUgc2VsZiwgaW50KSB7IHJldHVybiBzZWxmOyB9CQlcCisgIFRZUEUgb3Bl cmF0b3IhPSh0aGlzIFRZUEUgc2VsZiwgaW50KSB7IHJldHVybiBzZWxmOyB9CQlcCisgIFRZUEUg b3BlcmF0b3I8KHRoaXMgVFlQRSBzZWxmLCBpbnQpIHsgcmV0dXJuIHNlbGY7IH0JCVwKKyAgVFlQ RSBvcGVyYXRvcj4odGhpcyBUWVBFIHNlbGYsIGludCkgeyByZXR1cm4gc2VsZjsgfQkJXAorICBU WVBFIG9wZXJhdG9yPD0odGhpcyBUWVBFIHNlbGYsIGludCkgeyByZXR1cm4gc2VsZjsgfQkJXAor ICBUWVBFIG9wZXJhdG9yPj0odGhpcyBUWVBFIHNlbGYsIGludCkgeyByZXR1cm4gc2VsZjsgfQkJ XAorICBUWVBFIG9wZXJhdG9yKih0aGlzIFRZUEUgc2VsZikgeyByZXR1cm4gc2VsZjsgfQkJXAor ICBUWVBFIG9wZXJhdG9yJih0aGlzIFRZUEUgc2VsZikgeyByZXR1cm4gc2VsZjsgfQkJXAorICBU WVBFIG9wZXJhdG9yLCh0aGlzIFRZUEUgc2VsZiwgaW50KSB7IHJldHVybiBzZWxmOyB9CisKK3N0 cnVjdCBWYWx1ZSB7CisgIE1BS0VfU1RSVUNUX09QUyAoVmFsdWUpCit9OworCitzdHJ1Y3QgTFJl ZiB7CisgIE1BS0VfU1RSVUNUX09QUyAoTFJlZiYpCit9OworCitzdHJ1Y3QgUlJlZiB7CisgIE1B S0VfU1RSVUNUX09QUyAoUlJlZiYmKQorfTsKKworc3RydWN0IENvbnN0TFJlZiB7CisgIE1BS0Vf U1RSVUNUX09QUyAoQ29uc3RMUmVmIGNvbnN0JikKK307CisKK3N0cnVjdCBDb25zdFJSZWYgewor ICBNQUtFX1NUUlVDVF9PUFMgKENvbnN0UlJlZiBjb25zdCYmKQorfTsKKworI3VuZGVmIE1BS0Vf U1RSVUNUX09QUworCitzdHJ1Y3QgRGVkdWNlZCB7CisgIHRlbXBsYXRlPHR5cGVuYW1lIFNlbGY+ IFNlbGYmJiBvcGVyYXRvcis9KHRoaXMgU2VsZiYmIHNlbGYsIGludCkgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8U2VsZiYmPihzZWxmKTsgfQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBTZWxmPiBTZWxmJiYg b3BlcmF0b3ItPSh0aGlzIFNlbGYmJiBzZWxmLCBpbnQpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFNl bGYmJj4oc2VsZik7IH0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgU2VsZj4gU2VsZiYmIG9wZXJhdG9y Kj0odGhpcyBTZWxmJiYgc2VsZiwgaW50KSB7IHJldHVybiBzdGF0aWNfY2FzdDxTZWxmJiY+KHNl bGYpOyB9CisgIHRlbXBsYXRlPHR5cGVuYW1lIFNlbGY+IFNlbGYmJiBvcGVyYXRvci89KHRoaXMg U2VsZiYmIHNlbGYsIGludCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U2VsZiYmPihzZWxmKTsgfQor ICB0ZW1wbGF0ZTx0eXBlbmFtZSBTZWxmPiBTZWxmJiYgb3BlcmF0b3IlPSh0aGlzIFNlbGYmJiBz ZWxmLCBpbnQpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFNlbGYmJj4oc2VsZik7IH0KKyAgdGVtcGxh dGU8dHlwZW5hbWUgU2VsZj4gU2VsZiYmIG9wZXJhdG9yJj0odGhpcyBTZWxmJiYgc2VsZiwgaW50 KSB7IHJldHVybiBzdGF0aWNfY2FzdDxTZWxmJiY+KHNlbGYpOyB9CisgIHRlbXBsYXRlPHR5cGVu YW1lIFNlbGY+IFNlbGYmJiBvcGVyYXRvcnw9KHRoaXMgU2VsZiYmIHNlbGYsIGludCkgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8U2VsZiYmPihzZWxmKTsgfQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBTZWxm PiBTZWxmJiYgb3BlcmF0b3JePSh0aGlzIFNlbGYmJiBzZWxmLCBpbnQpIHsgcmV0dXJuIHN0YXRp Y19jYXN0PFNlbGYmJj4oc2VsZik7IH0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgU2VsZj4gU2VsZiYm IG9wZXJhdG9yPDw9KHRoaXMgU2VsZiYmIHNlbGYsIGludCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 U2VsZiYmPihzZWxmKTsgfQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBTZWxmPiBTZWxmJiYgb3BlcmF0 b3I+Pj0odGhpcyBTZWxmJiYgc2VsZiwgaW50KSB7IHJldHVybiBzdGF0aWNfY2FzdDxTZWxmJiY+ KHNlbGYpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgU2VsZj4gU2VsZiYmIG9wZXJhdG9yKyso dGhpcyBTZWxmJiYgc2VsZikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U2VsZiYmPihzZWxmKTsgfQor ICB0ZW1wbGF0ZTx0eXBlbmFtZSBTZWxmPiBTZWxmJiYgb3BlcmF0b3ItLSh0aGlzIFNlbGYmJiBz ZWxmKSB7IHJldHVybiBzdGF0aWNfY2FzdDxTZWxmJiY+KHNlbGYpOyB9CisgIHRlbXBsYXRlPHR5 cGVuYW1lIFNlbGY+IFNlbGYmJiBvcGVyYXRvcisrKHRoaXMgU2VsZiYmIHNlbGYsIGludCkgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8U2VsZiYmPihzZWxmKTsgfQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBT ZWxmPiBTZWxmJiYgb3BlcmF0b3ItLSh0aGlzIFNlbGYmJiBzZWxmLCBpbnQpIHsgcmV0dXJuIHN0 YXRpY19jYXN0PFNlbGYmJj4oc2VsZik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBTZWxmPiBT ZWxmJiYgb3BlcmF0b3IrKHRoaXMgU2VsZiYmIHNlbGYpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFNl bGYmJj4oc2VsZik7IH0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgU2VsZj4gU2VsZiYmIG9wZXJhdG9y LSh0aGlzIFNlbGYmJiBzZWxmKSB7IHJldHVybiBzdGF0aWNfY2FzdDxTZWxmJiY+KHNlbGYpOyB9 CisgIHRlbXBsYXRlPHR5cGVuYW1lIFNlbGY+IFNlbGYmJiBvcGVyYXRvcisodGhpcyBTZWxmJiYg c2VsZiwgaW50KSB7IHJldHVybiBzdGF0aWNfY2FzdDxTZWxmJiY+KHNlbGYpOyB9CisgIHRlbXBs YXRlPHR5cGVuYW1lIFNlbGY+IFNlbGYmJiBvcGVyYXRvci0odGhpcyBTZWxmJiYgc2VsZiwgaW50 KSB7IHJldHVybiBzdGF0aWNfY2FzdDxTZWxmJiY+KHNlbGYpOyB9CisgIHRlbXBsYXRlPHR5cGVu YW1lIFNlbGY+IFNlbGYmJiBvcGVyYXRvcioodGhpcyBTZWxmJiYgc2VsZiwgaW50KSB7IHJldHVy biBzdGF0aWNfY2FzdDxTZWxmJiY+KHNlbGYpOyB9CisgIHRlbXBsYXRlPHR5cGVuYW1lIFNlbGY+ IFNlbGYmJiBvcGVyYXRvci8odGhpcyBTZWxmJiYgc2VsZiwgaW50KSB7IHJldHVybiBzdGF0aWNf Y2FzdDxTZWxmJiY+KHNlbGYpOyB9CisgIHRlbXBsYXRlPHR5cGVuYW1lIFNlbGY+IFNlbGYmJiBv cGVyYXRvciUodGhpcyBTZWxmJiYgc2VsZiwgaW50KSB7IHJldHVybiBzdGF0aWNfY2FzdDxTZWxm JiY+KHNlbGYpOyB9CisgIHRlbXBsYXRlPHR5cGVuYW1lIFNlbGY+IFNlbGYmJiBvcGVyYXRvciYo dGhpcyBTZWxmJiYgc2VsZiwgaW50KSB7IHJldHVybiBzdGF0aWNfY2FzdDxTZWxmJiY+KHNlbGYp OyB9CisgIHRlbXBsYXRlPHR5cGVuYW1lIFNlbGY+IFNlbGYmJiBvcGVyYXRvcnwodGhpcyBTZWxm JiYgc2VsZiwgaW50KSB7IHJldHVybiBzdGF0aWNfY2FzdDxTZWxmJiY+KHNlbGYpOyB9CisgIHRl bXBsYXRlPHR5cGVuYW1lIFNlbGY+IFNlbGYmJiBvcGVyYXRvcl4odGhpcyBTZWxmJiYgc2VsZiwg aW50KSB7IHJldHVybiBzdGF0aWNfY2FzdDxTZWxmJiY+KHNlbGYpOyB9CisgIHRlbXBsYXRlPHR5 cGVuYW1lIFNlbGY+IFNlbGYmJiBvcGVyYXRvcjw8KHRoaXMgU2VsZiYmIHNlbGYsIGludCkgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8U2VsZiYmPihzZWxmKTsgfQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBT ZWxmPiBTZWxmJiYgb3BlcmF0b3I+Pih0aGlzIFNlbGYmJiBzZWxmLCBpbnQpIHsgcmV0dXJuIHN0 YXRpY19jYXN0PFNlbGYmJj4oc2VsZik7IH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBTZWxmPiBT ZWxmJiYgb3BlcmF0b3IhKHRoaXMgU2VsZiYmIHNlbGYpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFNl bGYmJj4oc2VsZik7IH0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgU2VsZj4gU2VsZiYmIG9wZXJhdG9y JiYodGhpcyBTZWxmJiYgc2VsZiwgaW50IGNvbnN0JikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U2Vs ZiYmPihzZWxmKTsgfQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBTZWxmPiBTZWxmJiYgb3BlcmF0b3J8 fCh0aGlzIFNlbGYmJiBzZWxmLCBpbnQgY29uc3QmKSB7IHJldHVybiBzdGF0aWNfY2FzdDxTZWxm JiY+KHNlbGYpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgU2VsZj4gU2VsZiYmIG9wZXJhdG9y PT0odGhpcyBTZWxmJiYgc2VsZiwgaW50KSB7IHJldHVybiBzdGF0aWNfY2FzdDxTZWxmJiY+KHNl bGYpOyB9CisgIHRlbXBsYXRlPHR5cGVuYW1lIFNlbGY+IFNlbGYmJiBvcGVyYXRvciE9KHRoaXMg U2VsZiYmIHNlbGYsIGludCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U2VsZiYmPihzZWxmKTsgfQor ICB0ZW1wbGF0ZTx0eXBlbmFtZSBTZWxmPiBTZWxmJiYgb3BlcmF0b3I8KHRoaXMgU2VsZiYmIHNl bGYsIGludCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U2VsZiYmPihzZWxmKTsgfQorICB0ZW1wbGF0 ZTx0eXBlbmFtZSBTZWxmPiBTZWxmJiYgb3BlcmF0b3I+KHRoaXMgU2VsZiYmIHNlbGYsIGludCkg eyByZXR1cm4gc3RhdGljX2Nhc3Q8U2VsZiYmPihzZWxmKTsgfQorICB0ZW1wbGF0ZTx0eXBlbmFt ZSBTZWxmPiBTZWxmJiYgb3BlcmF0b3I8PSh0aGlzIFNlbGYmJiBzZWxmLCBpbnQpIHsgcmV0dXJu IHN0YXRpY19jYXN0PFNlbGYmJj4oc2VsZik7IH0KKyAgdGVtcGxhdGU8dHlwZW5hbWUgU2VsZj4g U2VsZiYmIG9wZXJhdG9yPj0odGhpcyBTZWxmJiYgc2VsZiwgaW50KSB7IHJldHVybiBzdGF0aWNf Y2FzdDxTZWxmJiY+KHNlbGYpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgU2VsZj4gU2VsZiYm IG9wZXJhdG9yKih0aGlzIFNlbGYmJiBzZWxmKSB7IHJldHVybiBzdGF0aWNfY2FzdDxTZWxmJiY+ KHNlbGYpOyB9CisgIHRlbXBsYXRlPHR5cGVuYW1lIFNlbGY+IFNlbGYmJiBvcGVyYXRvciYodGhp cyBTZWxmJiYgc2VsZikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U2VsZiYmPihzZWxmKTsgfQorICB0 ZW1wbGF0ZTx0eXBlbmFtZSBTZWxmPiBTZWxmJiYgb3BlcmF0b3IsKHRoaXMgU2VsZiYmIHNlbGYs IGludCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U2VsZiYmPihzZWxmKTsgfQorfTsKKworI2RlZmlu ZSBURVNUX09QUyhPUEVSQU5EKSBcCisgIChPUEVSQU5EKSArPSAwOwlcCisgIChPUEVSQU5EKSAt PSAwOwlcCisgIChPUEVSQU5EKSAqPSAwOwlcCisgIChPUEVSQU5EKSAvPSAwOwlcCisgIChPUEVS QU5EKSAlPSAwOwlcCisgIChPUEVSQU5EKSAmPSAwOwlcCisgIChPUEVSQU5EKSB8PSAwOwlcCisg IChPUEVSQU5EKSBePSAwOwlcCisgIChPUEVSQU5EKSA8PD0gMDsJXAorICAoT1BFUkFORCkgPj49 IDA7CVwKKwkJCVwKKyAgKysoT1BFUkFORCk7CQlcCisgIC0tKE9QRVJBTkQpOwkJXAorICAoT1BF UkFORCkrKzsJCVwKKyAgKE9QRVJBTkQpLS07CQlcCisJCQlcCisgICsoT1BFUkFORCk7CQlcCisg IC0oT1BFUkFORCk7CQlcCisgIChPUEVSQU5EKSArIDA7CVwKKyAgKE9QRVJBTkQpIC0gMDsJXAor ICAoT1BFUkFORCkgKiAwOwlcCisgIChPUEVSQU5EKSAvIDA7CVwKKyAgKE9QRVJBTkQpICUgMDsJ XAorICAoT1BFUkFORCkgJiAwOwlcCisgIChPUEVSQU5EKSB8IDA7CVwKKyAgKE9QRVJBTkQpIF4g MDsJXAorICAoT1BFUkFORCkgPDwgMDsJXAorICAoT1BFUkFORCkgPj4gMDsJXAorCQkJXAorICAh KE9QRVJBTkQpOwkJXAorICAoT1BFUkFORCkgJiYgMDsJXAorICAoT1BFUkFORCkgfHwgMDsJXAor CQkJXAorICAoT1BFUkFORCkgPT0gMDsJXAorICAoT1BFUkFORCkgIT0gMDsJXAorICAoT1BFUkFO RCkgPCAwOwlcCisgIChPUEVSQU5EKSA+IDA7CVwKKyAgKE9QRVJBTkQpIDw9IDA7CVwKKyAgKE9Q RVJBTkQpID49IDA7CVwKKwkJCVwKKyAgKihPUEVSQU5EKTsJCVwKKyAgJihPUEVSQU5EKTsJCVwK KyAgKE9QRVJBTkQpLCAwOworCisjZGVmaW5lIFZBTElEQVRFX1JFVFVSTl9UWVBFUyhPUEVSQU5E LCBDT1JSRUNUX1RZUEUpIFwKKyAgc3RhdGljX2Fzc2VydChfX2lzX3NhbWUoQ09SUkVDVF9UWVBF LCBkZWNsdHlwZSgoT1BFUkFORCkgKz0gMCkpKTsJCVwKKyAgc3RhdGljX2Fzc2VydChfX2lzX3Nh bWUoQ09SUkVDVF9UWVBFLCBkZWNsdHlwZSgoT1BFUkFORCkgLT0gMCkpKTsJCVwKKyAgc3RhdGlj X2Fzc2VydChfX2lzX3NhbWUoQ09SUkVDVF9UWVBFLCBkZWNsdHlwZSgoT1BFUkFORCkgKj0gMCkp KTsJCVwKKyAgc3RhdGljX2Fzc2VydChfX2lzX3NhbWUoQ09SUkVDVF9UWVBFLCBkZWNsdHlwZSgo T1BFUkFORCkgLz0gMCkpKTsJCVwKKyAgc3RhdGljX2Fzc2VydChfX2lzX3NhbWUoQ09SUkVDVF9U WVBFLCBkZWNsdHlwZSgoT1BFUkFORCkgJT0gMCkpKTsJCVwKKyAgc3RhdGljX2Fzc2VydChfX2lz X3NhbWUoQ09SUkVDVF9UWVBFLCBkZWNsdHlwZSgoT1BFUkFORCkgJj0gMCkpKTsJCVwKKyAgc3Rh dGljX2Fzc2VydChfX2lzX3NhbWUoQ09SUkVDVF9UWVBFLCBkZWNsdHlwZSgoT1BFUkFORCkgfD0g MCkpKTsJCVwKKyAgc3RhdGljX2Fzc2VydChfX2lzX3NhbWUoQ09SUkVDVF9UWVBFLCBkZWNsdHlw ZSgoT1BFUkFORCkgXj0gMCkpKTsJCVwKKyAgc3RhdGljX2Fzc2VydChfX2lzX3NhbWUoQ09SUkVD VF9UWVBFLCBkZWNsdHlwZSgoT1BFUkFORCkgPDw9IDApKSk7CQlcCisgIHN0YXRpY19hc3NlcnQo X19pc19zYW1lKENPUlJFQ1RfVFlQRSwgZGVjbHR5cGUoKE9QRVJBTkQpID4+PSAwKSkpOwkJXAor CQkJCQkJCQkJCVwKKyAgc3RhdGljX2Fzc2VydChfX2lzX3NhbWUoQ09SUkVDVF9UWVBFLCBkZWNs dHlwZSgrKyhPUEVSQU5EKSkpKTsJCVwKKyAgc3RhdGljX2Fzc2VydChfX2lzX3NhbWUoQ09SUkVD VF9UWVBFLCBkZWNsdHlwZSgtLShPUEVSQU5EKSkpKTsJCVwKKyAgc3RhdGljX2Fzc2VydChfX2lz X3NhbWUoQ09SUkVDVF9UWVBFLCBkZWNsdHlwZSgoT1BFUkFORCkrKykpKTsJCVwKKyAgc3RhdGlj X2Fzc2VydChfX2lzX3NhbWUoQ09SUkVDVF9UWVBFLCBkZWNsdHlwZSgoT1BFUkFORCktLSkpKTsJ CVwKKwkJCQkJCQkJCQlcCisgIHN0YXRpY19hc3NlcnQoX19pc19zYW1lKENPUlJFQ1RfVFlQRSwg ZGVjbHR5cGUoKyhPUEVSQU5EKSkpKTsJCQlcCisgIHN0YXRpY19hc3NlcnQoX19pc19zYW1lKENP UlJFQ1RfVFlQRSwgZGVjbHR5cGUoLShPUEVSQU5EKSkpKTsJCQlcCisgIHN0YXRpY19hc3NlcnQo X19pc19zYW1lKENPUlJFQ1RfVFlQRSwgZGVjbHR5cGUoKE9QRVJBTkQpICsgMCkpKTsJCVwKKyAg c3RhdGljX2Fzc2VydChfX2lzX3NhbWUoQ09SUkVDVF9UWVBFLCBkZWNsdHlwZSgoT1BFUkFORCkg LSAwKSkpOwkJXAorICBzdGF0aWNfYXNzZXJ0KF9faXNfc2FtZShDT1JSRUNUX1RZUEUsIGRlY2x0 eXBlKChPUEVSQU5EKSAqIDApKSk7CQlcCisgIHN0YXRpY19hc3NlcnQoX19pc19zYW1lKENPUlJF Q1RfVFlQRSwgZGVjbHR5cGUoKE9QRVJBTkQpIC8gMCkpKTsJCVwKKyAgc3RhdGljX2Fzc2VydChf X2lzX3NhbWUoQ09SUkVDVF9UWVBFLCBkZWNsdHlwZSgoT1BFUkFORCkgJSAwKSkpOwkJXAorICBz dGF0aWNfYXNzZXJ0KF9faXNfc2FtZShDT1JSRUNUX1RZUEUsIGRlY2x0eXBlKChPUEVSQU5EKSAm IDApKSk7CQlcCisgIHN0YXRpY19hc3NlcnQoX19pc19zYW1lKENPUlJFQ1RfVFlQRSwgZGVjbHR5 cGUoKE9QRVJBTkQpIHwgMCkpKTsJCVwKKyAgc3RhdGljX2Fzc2VydChfX2lzX3NhbWUoQ09SUkVD VF9UWVBFLCBkZWNsdHlwZSgoT1BFUkFORCkgXiAwKSkpOwkJXAorICBzdGF0aWNfYXNzZXJ0KF9f aXNfc2FtZShDT1JSRUNUX1RZUEUsIGRlY2x0eXBlKChPUEVSQU5EKSA8PCAwKSkpOwkJXAorICBz dGF0aWNfYXNzZXJ0KF9faXNfc2FtZShDT1JSRUNUX1RZUEUsIGRlY2x0eXBlKChPUEVSQU5EKSA+ PiAwKSkpOwkJXAorCQkJCQkJCQkJCVwKKyAgc3RhdGljX2Fzc2VydChfX2lzX3NhbWUoQ09SUkVD VF9UWVBFLCBkZWNsdHlwZSghKE9QRVJBTkQpKSkpOwkJCVwKKyAgc3RhdGljX2Fzc2VydChfX2lz X3NhbWUoQ09SUkVDVF9UWVBFLCBkZWNsdHlwZSgoT1BFUkFORCkgJiYgMCkpKTsJCVwKKyAgc3Rh dGljX2Fzc2VydChfX2lzX3NhbWUoQ09SUkVDVF9UWVBFLCBkZWNsdHlwZSgoT1BFUkFORCkgfHwg MCkpKTsJCVwKKwkJCQkJCQkJCQlcCisgIHN0YXRpY19hc3NlcnQoX19pc19zYW1lKENPUlJFQ1Rf VFlQRSwgZGVjbHR5cGUoKE9QRVJBTkQpID09IDApKSk7CQlcCisgIHN0YXRpY19hc3NlcnQoX19p c19zYW1lKENPUlJFQ1RfVFlQRSwgZGVjbHR5cGUoKE9QRVJBTkQpICE9IDApKSk7CQlcCisgIHN0 YXRpY19hc3NlcnQoX19pc19zYW1lKENPUlJFQ1RfVFlQRSwgZGVjbHR5cGUoKE9QRVJBTkQpIDwg MCkpKTsJCVwKKyAgc3RhdGljX2Fzc2VydChfX2lzX3NhbWUoQ09SUkVDVF9UWVBFLCBkZWNsdHlw ZSgoT1BFUkFORCkgPiAwKSkpOwkJXAorICBzdGF0aWNfYXNzZXJ0KF9faXNfc2FtZShDT1JSRUNU X1RZUEUsIGRlY2x0eXBlKChPUEVSQU5EKSA8PSAwKSkpOwkJXAorICBzdGF0aWNfYXNzZXJ0KF9f aXNfc2FtZShDT1JSRUNUX1RZUEUsIGRlY2x0eXBlKChPUEVSQU5EKSA+PSAwKSkpOwkJXAorCQkJ CQkJCQkJCVwKKyAgc3RhdGljX2Fzc2VydChfX2lzX3NhbWUoQ09SUkVDVF9UWVBFLCBkZWNsdHlw ZSgqKE9QRVJBTkQpKSkpOwkJCVwKKyAgc3RhdGljX2Fzc2VydChfX2lzX3NhbWUoQ09SUkVDVF9U WVBFLCBkZWNsdHlwZSgmKE9QRVJBTkQpKSkpOwkJCVwKKyAgc3RhdGljX2Fzc2VydChfX2lzX3Nh bWUoQ09SUkVDVF9UWVBFLCBkZWNsdHlwZSgoT1BFUkFORCksIDApKSk7CmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2crKy5kZy9jcHAyMy9leHBsaWNpdC1vYmotb3BzLXJlcXVpcmVzLW1lbS5D IGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqLW9wcy1yZXF1aXJlcy1t ZW0uQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjVmODhjMzhmMzIK LS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jcHAyMy9leHBsaWNpdC1v Ymotb3BzLXJlcXVpcmVzLW1lbS5DCkBAIC0wLDAgKzEsMTcyIEBACisvLyBQMDg0N1I3CisvLyB7 IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgYysrMjMgfSB9CisKKy8vIHdlbGwtZm9ybWVkIGFuZCBp bGwtZm9ybWVkIHVzZXMgb2YgbWVtYmVyIG9ubHkgb3BlcmF0b3JzIGluIGEgcmVxdWlyZXMgZXhw cmVzc2lvbgorCisvLyBzdXBwcmVzcyB0aGUgd2FybmluZyBmb3IgVmFsdWUncyBhcnJvdyBvcGVy YXRvcgorLy8geyBkZy1vcHRpb25zICItV25vLXJldHVybi1sb2NhbC1hZGRyIiB9CisKKy8vIHsg ZGctZXhjZXNzLWVycm9ycyAiS25vd24gaXNzdWUgd2l0aCBvcGVyYXRvcnMiIHsgeGZhaWwgKi0q LSogfSB9CisKKy8vIEl0J3MgdmVyeSBoYXJkIHRvIHRlc3QgZm9yIGluY29ycmVjdCBzdWNjZXNz ZXMgd2l0aG91dCByZXF1aXJlcywgYW5kIGJ5IGV4dGVuc2lvbiBhIG5vbiBkZXBlbmRlbnQgdmFy aWFibGUKKy8vIHNvIGZvciB0aGUgdGltZSBiZWluZywgdGhlcmUgYXJlIG5vIG5vbiBkZXBlbmRl bnQgdGVzdHMgaW52YWxpZCBjYWxscy4KKworc3RydWN0IFZhbHVlIHsKKyAgaW50IF92OworICBW YWx1ZSBvcGVyYXRvcj0odGhpcyBWYWx1ZSBzZWxmLCBpbnQpIHsgcmV0dXJuIHNlbGY7IH0KKyAg VmFsdWUgb3BlcmF0b3IoKSh0aGlzIFZhbHVlIHNlbGYpIHsgcmV0dXJuIHNlbGY7IH0KKyAgVmFs dWUgb3BlcmF0b3JbXSh0aGlzIFZhbHVlIHNlbGYpIHsgcmV0dXJuIHNlbGY7IH0KKyAgVmFsdWUq IG9wZXJhdG9yLT4odGhpcyBWYWx1ZSBzZWxmKSB7IHJldHVybiAmc2VsZjsgfQorfTsKKworc3Ry dWN0IExSZWYgeworICBpbnQgX3Y7CisgIExSZWYmIG9wZXJhdG9yPSh0aGlzIExSZWYmIHNlbGYs IGludCkgeyByZXR1cm4gc2VsZjsgfQorICBMUmVmJiBvcGVyYXRvcigpKHRoaXMgTFJlZiYgc2Vs ZikgeyByZXR1cm4gc2VsZjsgfQorICBMUmVmJiBvcGVyYXRvcltdKHRoaXMgTFJlZiYgc2VsZikg eyByZXR1cm4gc2VsZjsgfQorICBMUmVmKiBvcGVyYXRvci0+KHRoaXMgTFJlZiYgc2VsZikgeyBy ZXR1cm4gJnNlbGY7IH0KK307CisKK3N0cnVjdCBSUmVmIHsKKyAgaW50IF92OworICBSUmVmJiYg b3BlcmF0b3I9KHRoaXMgUlJlZiYmIHNlbGYsIGludCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UlJl ZiYmPihzZWxmKTsgfQorICBSUmVmJiYgb3BlcmF0b3IoKSh0aGlzIFJSZWYmJiBzZWxmKSB7IHJl dHVybiBzdGF0aWNfY2FzdDxSUmVmJiY+KHNlbGYpIH0KKyAgUlJlZiYmIG9wZXJhdG9yW10odGhp cyBSUmVmJiYgc2VsZikgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UlJlZiYmPihzZWxmKSB9CisgIFJS ZWYqIG9wZXJhdG9yLT4odGhpcyBSUmVmJiYgc2VsZikgeyByZXR1cm4gJnNlbGY7IH0KK307CisK K3N0cnVjdCBDb25zdExSZWYgeworICBpbnQgX3Y7CisgIENvbnN0TFJlZiBjb25zdCYgb3BlcmF0 b3I9KHRoaXMgQ29uc3RMUmVmIGNvbnN0JiBzZWxmLCBpbnQpIHsgcmV0dXJuIHNlbGY7IH0KKyAg Q29uc3RMUmVmIGNvbnN0JiBvcGVyYXRvcigpKHRoaXMgQ29uc3RMUmVmIGNvbnN0JiBzZWxmKSB7 IHJldHVybiBzZWxmOyB9CisgIENvbnN0TFJlZiBjb25zdCYgb3BlcmF0b3JbXSh0aGlzIENvbnN0 TFJlZiBjb25zdCYgc2VsZikgeyByZXR1cm4gc2VsZjsgfQorICBDb25zdExSZWYgY29uc3QqIG9w ZXJhdG9yLT4odGhpcyBDb25zdExSZWYgY29uc3QmIHNlbGYpIHsgcmV0dXJuICZzZWxmOyB9Cit9 OworCitzdHJ1Y3QgQ29uc3RSUmVmIHsKKyAgaW50IF92OworICBDb25zdFJSZWYgY29uc3QmJiBv cGVyYXRvcj0odGhpcyBDb25zdFJSZWYgY29uc3QmJiBzZWxmLCBpbnQpIHsgcmV0dXJuIHN0YXRp Y19jYXN0PENvbnN0UlJlZiBjb25zdCYmPihzZWxmKTsgfQorICBDb25zdFJSZWYgY29uc3QmJiBv cGVyYXRvcigpKHRoaXMgQ29uc3RSUmVmIGNvbnN0JiYgc2VsZikgeyByZXR1cm4gc3RhdGljX2Nh c3Q8Q29uc3RSUmVmIGNvbnN0JiY+KHNlbGYpOyB9CisgIENvbnN0UlJlZiBjb25zdCYmIG9wZXJh dG9yW10odGhpcyBDb25zdFJSZWYgY29uc3QmJiBzZWxmKSB7IHJldHVybiBzdGF0aWNfY2FzdDxD b25zdFJSZWYgY29uc3QmJj4oc2VsZik7IH0KKyAgQ29uc3RSUmVmIGNvbnN0KiBvcGVyYXRvci0+ KHRoaXMgQ29uc3RSUmVmIGNvbnN0JiYgc2VsZikgeyByZXR1cm4gJnNlbGY7IH0KK307CisKKy8v IG5lZWRlZCB0byBpbXBsZW1lbnQgZGVkdWNlZCBvcGVyYXRvci0+Cit0ZW1wbGF0ZTx0eXBlbmFt ZSBUPiBzdHJ1Y3QgcmVtb3ZlX3JlZiB7IHVzaW5nIHR5cGUgPSBUOyB9OwordGVtcGxhdGU8dHlw ZW5hbWUgVD4gc3RydWN0IHJlbW92ZV9yZWY8VCY+IHsgdXNpbmcgdHlwZSA9IFQ7IH07Cit0ZW1w bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgcmVtb3ZlX3JlZjxUJiY+IHsgdXNpbmcgdHlwZSA9IFQ7 IH07Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyByZW1vdmVfcmVmX3QgPSB0eXBlbmFtZSBy ZW1vdmVfcmVmPFQ+Ojp0eXBlOworCitzdHJ1Y3QgRGVkdWNlZCB7CisgIGludCBfdjsKKyAgdGVt cGxhdGU8dHlwZW5hbWUgU2VsZj4KKyAgU2VsZiYmIG9wZXJhdG9yPSh0aGlzIFNlbGYmJiBzZWxm LCBpbnQpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFNlbGYmJj4oc2VsZik7IH0KKyAgdGVtcGxhdGU8 dHlwZW5hbWUgU2VsZj4KKyAgU2VsZiYmIG9wZXJhdG9yKCkodGhpcyBTZWxmJiYgc2VsZikgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8U2VsZiYmPihzZWxmKTsgfQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBT ZWxmPgorICBTZWxmJiYgb3BlcmF0b3JbXSh0aGlzIFNlbGYmJiBzZWxmKSB7IHJldHVybiBzdGF0 aWNfY2FzdDxTZWxmJiY+KHNlbGYpOyB9CisgIHRlbXBsYXRlPHR5cGVuYW1lIFNlbGY+CisgIHJl bW92ZV9yZWZfdDxTZWxmPiogb3BlcmF0b3ItPih0aGlzIFNlbGYmJiBzZWxmKSB7IHJldHVybiAm c2VsZjsgfQorfTsKKworI2RlZmluZSBURVNUX0lOVkFMSUQoT1BFUkFORCkgXAorICBzdGF0aWNf YXNzZXJ0KCFyZXF1aXJlc3sgKE9QRVJBTkQpID0gMDsgfSwgIlVuZXhwZWN0ZWQgc3VjY2VzcyBj YWxsaW5nIG9wZXJhdG9yID0gd2l0aCAiICNPUEVSQU5EKTsJXAorICBzdGF0aWNfYXNzZXJ0KCFy ZXF1aXJlc3sgKE9QRVJBTkQpKCk7IH0sICJVbmV4cGVjdGVkIHN1Y2Nlc3MgY2FsbGluZyBvcGVy YXRvciAoKSB3aXRoICIgI09QRVJBTkQpOwlcCisgIHN0YXRpY19hc3NlcnQoIXJlcXVpcmVzeyAo T1BFUkFORClbXTsgfSwgIlVuZXhwZWN0ZWQgc3VjY2VzcyBjYWxsaW5nIG9wZXJhdG9yIFtdIHdp dGggIiAjT1BFUkFORCk7CVwKKyAgc3RhdGljX2Fzc2VydCghcmVxdWlyZXN7IChPUEVSQU5EKS0+ X3Y7IH0sICJVbmV4cGVjdGVkIHN1Y2Nlc3MgY2FsbGluZyBvcGVyYXRvciAtPiB3aXRoICIgI09Q RVJBTkQpOworCisjZGVmaW5lIFRFU1RfVkFMSUQoT1BFUkFORCkgXAorICBzdGF0aWNfYXNzZXJ0 KHJlcXVpcmVzeyAoT1BFUkFORCkgPSAwOyB9LCAiVW5leHBlY3RlZCBmYWlsdXJlIGNhbGxpbmcg b3BlcmF0b3IgPSB3aXRoICIgI09QRVJBTkQpOwlcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7 IChPUEVSQU5EKSgpOyB9LCAiVW5leHBlY3RlZCBmYWlsdXJlIGNhbGxpbmcgb3BlcmF0b3IgKCkg d2l0aCAiICNPUEVSQU5EKTsJXAorICBzdGF0aWNfYXNzZXJ0KHJlcXVpcmVzeyAoT1BFUkFORClb XTsgfSwgIlVuZXhwZWN0ZWQgZmFpbHVyZSBjYWxsaW5nIG9wZXJhdG9yIFtdIHdpdGggIiAjT1BF UkFORCk7CVwKKyAgc3RhdGljX2Fzc2VydChyZXF1aXJlc3sgKE9QRVJBTkQpLT5fdjsgfSwgIlVu ZXhwZWN0ZWQgZmFpbHVyZSBjYWxsaW5nIG9wZXJhdG9yIC0+IHdpdGggIiAjT1BFUkFORCk7CisK K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Citjb25jZXB0IHNhbWVfYXMgPSBfX2lz X3NhbWUoVCwgVSk7CisKKyNkZWZpbmUgVEVTVF9WQUxJRF9XSVRIX1JFVFVSTl9UWVBFUyhPUEVS QU5ELCBDT1JSRUNUX1RZUEUpIFwKKyAgc3RhdGljX2Fzc2VydChyZXF1aXJlc3sgeyhPUEVSQU5E KSA9IDB9IC0+IHNhbWVfYXM8Q09SUkVDVF9UWVBFPjsgfSwiVW5leHBlY3RlZCBmYWlsdXJlIHdp dGggcmV0dXJuIHR5cGUgY2hlY2sgY2FsbGluZyBvcGVyYXRvciA9IHdpdGggIiAjT1BFUkFORCAi IC0+IGV4cGVjdGVkIHJldHVybiB0eXBlOiAiICNDT1JSRUNUX1RZUEUpOwlcCisgIHN0YXRpY19h c3NlcnQocmVxdWlyZXN7IHsoT1BFUkFORCkoKX0gLT4gc2FtZV9hczxDT1JSRUNUX1RZUEU+OyB9 LCAgIlVuZXhwZWN0ZWQgZmFpbHVyZSB3aXRoIHJldHVybiB0eXBlIGNoZWNrIGNhbGxpbmcgb3Bl cmF0b3IgKCkgd2l0aCAiICNPUEVSQU5EICIgLT4gZXhwZWN0ZWQgcmV0dXJuIHR5cGU6ICIgI0NP UlJFQ1RfVFlQRSk7CVwKKyAgc3RhdGljX2Fzc2VydChyZXF1aXJlc3sgeyhPUEVSQU5EKVtdfSAt PiBzYW1lX2FzPENPUlJFQ1RfVFlQRT47IH0sICAiVW5leHBlY3RlZCBmYWlsdXJlIHdpdGggcmV0 dXJuIHR5cGUgY2hlY2sgY2FsbGluZyBvcGVyYXRvciBbXSB3aXRoICIgI09QRVJBTkQgIiAtPiBl eHBlY3RlZCByZXR1cm4gdHlwZTogIiAjQ09SUkVDVF9UWVBFKTsKKyAgCisKK3RlbXBsYXRlPHR5 cGVuYW1lIERlcFZhbHVlID0gVmFsdWU+Cit2b2lkIHRlc3RfdmFsdWUoKQoreworICBEZXBWYWx1 ZSB2YWx1ZXt9OworICBURVNUX1ZBTElEKHZhbHVlKQorICBURVNUX1ZBTElEKHN0YXRpY19jYXN0 PERlcFZhbHVlJiY+KHZhbHVlKSkKKyAgVEVTVF9WQUxJRChzdGF0aWNfY2FzdDxEZXBWYWx1ZSBj b25zdCY+KHZhbHVlKSkKKyAgVEVTVF9WQUxJRChzdGF0aWNfY2FzdDxEZXBWYWx1ZSBjb25zdCYm Pih2YWx1ZSkpCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERlcExSZWYgPSBMUmVmPgordm9pZCB0 ZXN0X2xfcmVmKCkKK3sKKyAgRGVwTFJlZiBsX3JlZnt9OworICBURVNUX1ZBTElEKGxfcmVmKQor ICBURVNUX0lOVkFMSUQoc3RhdGljX2Nhc3Q8RGVwTFJlZiYmPihsX3JlZikpCisgIFRFU1RfSU5W QUxJRChzdGF0aWNfY2FzdDxEZXBMUmVmIGNvbnN0Jj4obF9yZWYpKQorICBURVNUX0lOVkFMSUQo c3RhdGljX2Nhc3Q8RGVwTFJlZiBjb25zdCYmPihsX3JlZikpCit9CisKK3RlbXBsYXRlPHR5cGVu YW1lIERlcFJSZWYgPSBSUmVmPgordm9pZCB0ZXN0X3JfcmVmKCkKK3sKKyAgRGVwUlJlZiByX3Jl Znt9OworICBURVNUX0lOVkFMSUQocl9yZWYpCisgIFRFU1RfVkFMSUQoc3RhdGljX2Nhc3Q8RGVw UlJlZiYmPihyX3JlZikpCisgIFRFU1RfSU5WQUxJRChzdGF0aWNfY2FzdDxEZXBSUmVmIGNvbnN0 Jj4ocl9yZWYpKQorICBURVNUX0lOVkFMSUQoc3RhdGljX2Nhc3Q8RGVwUlJlZiBjb25zdCYmPihy X3JlZikpCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERlcENvbnN0TFJlZiA9IENvbnN0TFJlZj4K K3ZvaWQgdGVzdF9jb25zdF9sX3JlZigpCit7CisgIERlcENvbnN0TFJlZiBjb25zdF9sX3JlZnt9 OworICBURVNUX1ZBTElEKGNvbnN0X2xfcmVmKQorICBURVNUX1ZBTElEKHN0YXRpY19jYXN0PERl cENvbnN0TFJlZiYmPihjb25zdF9sX3JlZikpCisgIFRFU1RfVkFMSUQoc3RhdGljX2Nhc3Q8RGVw Q29uc3RMUmVmIGNvbnN0Jj4oY29uc3RfbF9yZWYpKQorICBURVNUX1ZBTElEKHN0YXRpY19jYXN0 PERlcENvbnN0TFJlZiBjb25zdCYmPihjb25zdF9sX3JlZikpCit9CisKK3RlbXBsYXRlPHR5cGVu YW1lIERlcENvbnN0UlJlZiA9IENvbnN0UlJlZj4KK3ZvaWQgdGVzdF9jb25zdF9yX3JlZigpCit7 CisgIERlcENvbnN0UlJlZiBjb25zdF9yX3JlZnt9OworICBURVNUX0lOVkFMSUQoY29uc3Rfcl9y ZWYpCisgIFRFU1RfSU5WQUxJRChzdGF0aWNfY2FzdDxEZXBDb25zdFJSZWYmJj4oY29uc3Rfcl9y ZWYpKQorICBURVNUX0lOVkFMSUQoc3RhdGljX2Nhc3Q8RGVwQ29uc3RSUmVmIGNvbnN0Jj4oY29u c3Rfcl9yZWYpKQorICBURVNUX1ZBTElEKHN0YXRpY19jYXN0PERlcENvbnN0UlJlZiBjb25zdCYm Pihjb25zdF9yX3JlZikpCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERlcERlZHVjZWQgPSBEZWR1 Y2VkPgordm9pZCB0ZXN0X2RlZHVjZWQoKQoreworICBEZXBEZWR1Y2VkIGRlZHVjZWR7fTsKKwor ICBURVNUX1ZBTElEKGRlZHVjZWQpCisgIFRFU1RfVkFMSUQoc3RhdGljX2Nhc3Q8RGVwRGVkdWNl ZCYmPihkZWR1Y2VkKSkKKyAgVEVTVF9WQUxJRChzdGF0aWNfY2FzdDxEZXBEZWR1Y2VkIGNvbnN0 Jj4oZGVkdWNlZCkpCisgIFRFU1RfVkFMSUQoc3RhdGljX2Nhc3Q8RGVwRGVkdWNlZCBjb25zdCYm PihkZWR1Y2VkKSkKKworICBURVNUX1ZBTElEX1dJVEhfUkVUVVJOX1RZUEVTKGRlZHVjZWQsIERl cERlZHVjZWQmKQorICBURVNUX1ZBTElEX1dJVEhfUkVUVVJOX1RZUEVTKHN0YXRpY19jYXN0PERl cERlZHVjZWQmJj4oZGVkdWNlZCksIERlcERlZHVjZWQmJikKKyAgVEVTVF9WQUxJRF9XSVRIX1JF VFVSTl9UWVBFUyhzdGF0aWNfY2FzdDxEZXBEZWR1Y2VkIGNvbnN0Jj4oZGVkdWNlZCksIERlcERl ZHVjZWQgY29uc3QmKQorICBURVNUX1ZBTElEX1dJVEhfUkVUVVJOX1RZUEVTKHN0YXRpY19jYXN0 PERlcERlZHVjZWQgY29uc3QmJj4oZGVkdWNlZCksIERlcERlZHVjZWQgY29uc3QmJikKKyAgLy8g YXJyb3cgb3BlcmF0b3IgbmVlZHMgdG8gYmUgc2VwZXJhdGUgdG8gY2hlY2sgdGhlIHR5cGUgb2Yg X3YKKyAgc3RhdGljX2Fzc2VydChyZXF1aXJlc3sgeyhkZWR1Y2VkLT5fdil9IC0+IHNhbWVfYXM8 aW50Jj47IH0sICJVbmV4cGVjdGVkIGZhaWx1cmUgd2l0aCByZXR1cm4gdHlwZSBjaGVjayBjYWxs aW5nIG9wZXJhdG9yIC0+IHdpdGggZGVkdWNlZC0+X3YiKTsKKyAgc3RhdGljX2Fzc2VydChyZXF1 aXJlc3sgeyhzdGF0aWNfY2FzdDxEZXBEZWR1Y2VkJiY+KGRlZHVjZWQpLT5fdil9IC0+IHNhbWVf YXM8aW50IGNvbnN0Jj47IH0sICJVbmV4cGVjdGVkIGZhaWx1cmUgd2l0aCByZXR1cm4gdHlwZSBj aGVjayBjYWxsaW5nIG9wZXJhdG9yIC0+IHdpdGggc3RhdGljX2Nhc3Q8RGVwRGVkdWNlZCYmPihk ZWR1Y2VkKS0+X3YiKTsKKyAgc3RhdGljX2Fzc2VydChyZXF1aXJlc3sgeyhzdGF0aWNfY2FzdDxE ZXBEZWR1Y2VkIGNvbnN0Jj4oZGVkdWNlZCktPl92KX0gLT4gc2FtZV9hczxpbnQmPjsgfSwgIlVu ZXhwZWN0ZWQgZmFpbHVyZSB3aXRoIHJldHVybiB0eXBlIGNoZWNrIGNhbGxpbmcgb3BlcmF0b3Ig LT4gd2l0aCBzdGF0aWNfY2FzdDxEZXBEZWR1Y2VkIGNvbnN0Jj4oZGVkdWNlZCktPl92Iik7Cisg IHN0YXRpY19hc3NlcnQocmVxdWlyZXN7IHsoc3RhdGljX2Nhc3Q8RGVwRGVkdWNlZCBjb25zdCYm PihkZWR1Y2VkKS0+X3YpfSAtPiBzYW1lX2FzPGludCBjb25zdCY+OyB9LCAiVW5leHBlY3RlZCBm YWlsdXJlIHdpdGggcmV0dXJuIHR5cGUgY2hlY2sgY2FsbGluZyBvcGVyYXRvciAtPiB3aXRoIHN0 YXRpY19jYXN0PERlcERlZHVjZWQgY29uc3QmJj4oZGVkdWNlZCktPl92Iik7Cit9CisKK3ZvaWQg dGVzdCgpCit7CisgIHRlc3RfdmFsdWUoKTsKKyAgdGVzdF9sX3JlZigpOworICB0ZXN0X3JfcmVm KCk7CisgIHRlc3RfY29uc3RfbF9yZWYoKTsKKyAgdGVzdF9jb25zdF9yX3JlZigpOworICB0ZXN0 X2RlZHVjZWQoKTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NwcDIzL2V4 cGxpY2l0LW9iai1vcHMtcmVxdWlyZXMtbm9uLW1lbS5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv Y3BwMjMvZXhwbGljaXQtb2JqLW9wcy1yZXF1aXJlcy1ub24tbWVtLkMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk4MWFiMzliNzlkCi0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvY3BwMjMvZXhwbGljaXQtb2JqLW9wcy1yZXF1aXJlcy1ub24t bWVtLkMKQEAgLTAsMCArMSwyMjkgQEAKKy8vIFAwODQ3UjcKKy8vIHsgZGctZG8gY29tcGlsZSB7 IHRhcmdldCBjKysyMyB9IH0KKworLy8gd2VsbC1mb3JtZWQgYW5kIGlsbC1mb3JtZWQgdXNlcyBv ZiBub24tbWVtYmVyIGNhcGFibGUgb3BlcmF0b3JzIGluIGEgcmVxdWlyZXMgZXhwcmVzc2lvbgor CisvLyB7IGRnLWV4Y2Vzcy1lcnJvcnMgIktub3duIGlzc3VlIHdpdGggb3BlcmF0b3JzIiB7IHhm YWlsICotKi0qIH0gfQorCisjaW5jbHVkZSAiZXhwbGljaXQtb2JqLW9wcy1ub24tbWVtLmgiCisK Ky8vIHdlIG9ubHkgbmVlZCB0aGUgc3RydWN0cyBmcm9tIHRoZSBoZWFkZXIKKyN1bmRlZiBURVNU X09QUworI3VuZGVmIFZBTElEQVRFX1JFVFVSTl9UWVBFUworCisvLyBJdCdzIHZlcnkgaGFyZCB0 byB0ZXN0IGZvciBpbmNvcnJlY3Qgc3VjY2Vzc2VzIHdpdGhvdXQgcmVxdWlyZXMsIGFuZCBieSBl eHRlbnNpb24gYSBub24gZGVwZW5kZW50IHZhcmlhYmxlCisvLyBzbyBmb3IgdGhlIHRpbWUgYmVp bmcsIHRoZXJlIGFyZSBubyBub24gZGVwZW5kZW50IHRlc3RzIGludmFsaWQgY2FsbHMuCisKKyNk ZWZpbmUgVEVTVF9JTlZBTElEKE9QRVJBTkQpIFwKKyAgc3RhdGljX2Fzc2VydCghcmVxdWlyZXN7 IChPUEVSQU5EKSArPSAwOyB9LCAiVW5leHBlY3RlZCBzdWNjZXNzIGNhbGxpbmcgb3BlcmF0b3Ig Kz0gd2l0aCAiICNPUEVSQU5EKTsJCVwKKyAgc3RhdGljX2Fzc2VydCghcmVxdWlyZXN7IChPUEVS QU5EKSAtPSAwOyB9LCAiVW5leHBlY3RlZCBzdWNjZXNzIGNhbGxpbmcgb3BlcmF0b3IgLT0gd2l0 aCAiICNPUEVSQU5EKTsJCVwKKyAgc3RhdGljX2Fzc2VydCghcmVxdWlyZXN7IChPUEVSQU5EKSAq PSAwOyB9LCAiVW5leHBlY3RlZCBzdWNjZXNzIGNhbGxpbmcgb3BlcmF0b3IgKj0gd2l0aCAiICNP UEVSQU5EKTsJCVwKKyAgc3RhdGljX2Fzc2VydCghcmVxdWlyZXN7IChPUEVSQU5EKSAvPSAwOyB9 LCAiVW5leHBlY3RlZCBzdWNjZXNzIGNhbGxpbmcgb3BlcmF0b3IgLz0gd2l0aCAiICNPUEVSQU5E KTsJCVwKKyAgc3RhdGljX2Fzc2VydCghcmVxdWlyZXN7IChPUEVSQU5EKSAlPSAwOyB9LCAiVW5l eHBlY3RlZCBzdWNjZXNzIGNhbGxpbmcgb3BlcmF0b3IgJT0gd2l0aCAiICNPUEVSQU5EKTsJCVwK KyAgc3RhdGljX2Fzc2VydCghcmVxdWlyZXN7IChPUEVSQU5EKSAmPSAwOyB9LCAiVW5leHBlY3Rl ZCBzdWNjZXNzIGNhbGxpbmcgb3BlcmF0b3IgJj0gd2l0aCAiICNPUEVSQU5EKTsJCVwKKyAgc3Rh dGljX2Fzc2VydCghcmVxdWlyZXN7IChPUEVSQU5EKSB8PSAwOyB9LCAiVW5leHBlY3RlZCBzdWNj ZXNzIGNhbGxpbmcgb3BlcmF0b3IgfD0gd2l0aCAiICNPUEVSQU5EKTsJCVwKKyAgc3RhdGljX2Fz c2VydCghcmVxdWlyZXN7IChPUEVSQU5EKSBePSAwOyB9LCAiVW5leHBlY3RlZCBzdWNjZXNzIGNh bGxpbmcgb3BlcmF0b3IgXj0gd2l0aCAiICNPUEVSQU5EKTsJCVwKKyAgc3RhdGljX2Fzc2VydCgh cmVxdWlyZXN7IChPUEVSQU5EKSA8PD0gMDsgfSwgIlVuZXhwZWN0ZWQgc3VjY2VzcyBjYWxsaW5n IG9wZXJhdG9yIDw8PSB3aXRoICIgI09QRVJBTkQpOwlcCisgIHN0YXRpY19hc3NlcnQoIXJlcXVp cmVzeyAoT1BFUkFORCkgPj49IDA7IH0sICJVbmV4cGVjdGVkIHN1Y2Nlc3MgY2FsbGluZyBvcGVy YXRvciA+Pj0gd2l0aCAiICNPUEVSQU5EKTsJXAorCQkJCQkJCQkJCQkJCQlcCisgIHN0YXRpY19h c3NlcnQoIXJlcXVpcmVzeyArKyhPUEVSQU5EKTsgfSwgIlVuZXhwZWN0ZWQgc3VjY2VzcyBjYWxs aW5nIG9wZXJhdG9yIHByZSsrIHdpdGggIiAjT1BFUkFORCk7CQlcCisgIHN0YXRpY19hc3NlcnQo IXJlcXVpcmVzeyAtLShPUEVSQU5EKTsgfSwgIlVuZXhwZWN0ZWQgc3VjY2VzcyBjYWxsaW5nIG9w ZXJhdG9yIHByZS0tIHdpdGggIiAjT1BFUkFORCk7CQlcCisgIHN0YXRpY19hc3NlcnQoIXJlcXVp cmVzeyAoT1BFUkFORCkrKzsgfSwgIlVuZXhwZWN0ZWQgc3VjY2VzcyBjYWxsaW5nIG9wZXJhdG9y IHBvc3QrKyB3aXRoICIgI09QRVJBTkQpOwlcCisgIHN0YXRpY19hc3NlcnQoIXJlcXVpcmVzeyAo T1BFUkFORCktLTsgfSwgIlVuZXhwZWN0ZWQgc3VjY2VzcyBjYWxsaW5nIG9wZXJhdG9yIHBvc3Qt LSB3aXRoICIgI09QRVJBTkQpOwlcCisJCQkJCQkJCQkJCQkJCVwKKyAgc3RhdGljX2Fzc2VydCgh cmVxdWlyZXN7ICsoT1BFUkFORCk7IH0sICJVbmV4cGVjdGVkIHN1Y2Nlc3MgY2FsbGluZyBvcGVy YXRvciB1bmFyeSsgd2l0aCAiICNPUEVSQU5EKTsJCVwKKyAgc3RhdGljX2Fzc2VydCghcmVxdWly ZXN7IC0oT1BFUkFORCk7IH0sICJVbmV4cGVjdGVkIHN1Y2Nlc3MgY2FsbGluZyBvcGVyYXRvciB1 bmFyeS0gd2l0aCAiICNPUEVSQU5EKTsJCVwKKyAgc3RhdGljX2Fzc2VydCghcmVxdWlyZXN7IChP UEVSQU5EKSArIDA7IH0sICJVbmV4cGVjdGVkIHN1Y2Nlc3MgY2FsbGluZyBvcGVyYXRvciBiaW5h cnkrIHdpdGggIiAjT1BFUkFORCk7CVwKKyAgc3RhdGljX2Fzc2VydCghcmVxdWlyZXN7IChPUEVS QU5EKSAtIDA7IH0sICJVbmV4cGVjdGVkIHN1Y2Nlc3MgY2FsbGluZyBvcGVyYXRvciBiaW5hcnkt IHdpdGggIiAjT1BFUkFORCk7CVwKKyAgc3RhdGljX2Fzc2VydCghcmVxdWlyZXN7IChPUEVSQU5E KSAqIDA7IH0sICJVbmV4cGVjdGVkIHN1Y2Nlc3MgY2FsbGluZyBvcGVyYXRvciBiaW5hcnkqIHdp dGggIiAjT1BFUkFORCk7CVwKKyAgc3RhdGljX2Fzc2VydCghcmVxdWlyZXN7IChPUEVSQU5EKSAv IDA7IH0sICJVbmV4cGVjdGVkIHN1Y2Nlc3MgY2FsbGluZyBvcGVyYXRvciAvIHdpdGggIiAjT1BF UkFORCk7CQlcCisgIHN0YXRpY19hc3NlcnQoIXJlcXVpcmVzeyAoT1BFUkFORCkgJSAwOyB9LCAi VW5leHBlY3RlZCBzdWNjZXNzIGNhbGxpbmcgb3BlcmF0b3IgJSB3aXRoICIgI09QRVJBTkQpOwkJ XAorICBzdGF0aWNfYXNzZXJ0KCFyZXF1aXJlc3sgKE9QRVJBTkQpICYgMDsgfSwgIlVuZXhwZWN0 ZWQgc3VjY2VzcyBjYWxsaW5nIG9wZXJhdG9yIGJpbmFyeSYgd2l0aCAiICNPUEVSQU5EKTsJXAor ICBzdGF0aWNfYXNzZXJ0KCFyZXF1aXJlc3sgKE9QRVJBTkQpIHwgMDsgfSwgIlVuZXhwZWN0ZWQg c3VjY2VzcyBjYWxsaW5nIG9wZXJhdG9yIHwgd2l0aCAiICNPUEVSQU5EKTsJCVwKKyAgc3RhdGlj X2Fzc2VydCghcmVxdWlyZXN7IChPUEVSQU5EKSBeIDA7IH0sICJVbmV4cGVjdGVkIHN1Y2Nlc3Mg Y2FsbGluZyBvcGVyYXRvciBeIHdpdGggIiAjT1BFUkFORCk7CQlcCisgIHN0YXRpY19hc3NlcnQo IXJlcXVpcmVzeyAoT1BFUkFORCkgPDwgMDsgfSwgIlVuZXhwZWN0ZWQgc3VjY2VzcyBjYWxsaW5n IG9wZXJhdG9yIDw8IHdpdGggIiAjT1BFUkFORCk7CQlcCisgIHN0YXRpY19hc3NlcnQoIXJlcXVp cmVzeyAoT1BFUkFORCkgPj4gMDsgfSwgIlVuZXhwZWN0ZWQgc3VjY2VzcyBjYWxsaW5nIG9wZXJh dG9yID4+IHdpdGggIiAjT1BFUkFORCk7CQlcCisJCQkJCQkJCQkJCQkJCVwKKyAgc3RhdGljX2Fz c2VydCghcmVxdWlyZXN7ICEoT1BFUkFORCk7IH0sICJVbmV4cGVjdGVkIHN1Y2Nlc3MgY2FsbGlu ZyBvcGVyYXRvciAhIHdpdGggIiAjT1BFUkFORCk7CQlcCisgIHN0YXRpY19hc3NlcnQoIXJlcXVp cmVzeyAoT1BFUkFORCkgJiYgMDsgfSwgIlVuZXhwZWN0ZWQgc3VjY2VzcyBjYWxsaW5nIG9wZXJh dG9yICYmIHdpdGggIiAjT1BFUkFORCk7CQlcCisgIHN0YXRpY19hc3NlcnQoIXJlcXVpcmVzeyAo T1BFUkFORCkgfHwgMDsgfSwgIlVuZXhwZWN0ZWQgc3VjY2VzcyBjYWxsaW5nIG9wZXJhdG9yIHx8 IHdpdGggIiAjT1BFUkFORCk7CQlcCisJCQkJCQkJCQkJCQkJCVwKKyAgc3RhdGljX2Fzc2VydCgh cmVxdWlyZXN7IChPUEVSQU5EKSA9PSAwOyB9LCAiVW5leHBlY3RlZCBzdWNjZXNzIGNhbGxpbmcg b3BlcmF0b3IgPT0gd2l0aCAiICNPUEVSQU5EKTsJCVwKKyAgc3RhdGljX2Fzc2VydCghcmVxdWly ZXN7IChPUEVSQU5EKSAhPSAwOyB9LCAiVW5leHBlY3RlZCBzdWNjZXNzIGNhbGxpbmcgb3BlcmF0 b3IgIT0gd2l0aCAiICNPUEVSQU5EKTsJCVwKKyAgc3RhdGljX2Fzc2VydCghcmVxdWlyZXN7IChP UEVSQU5EKSA8IDA7IH0sICJVbmV4cGVjdGVkIHN1Y2Nlc3MgY2FsbGluZyBvcGVyYXRvciA8IHdp dGggIiAjT1BFUkFORCk7CQlcCisgIHN0YXRpY19hc3NlcnQoIXJlcXVpcmVzeyAoT1BFUkFORCkg PiAwOyB9LCAiVW5leHBlY3RlZCBzdWNjZXNzIGNhbGxpbmcgb3BlcmF0b3IgPiB3aXRoICIgI09Q RVJBTkQpOwkJXAorICBzdGF0aWNfYXNzZXJ0KCFyZXF1aXJlc3sgKE9QRVJBTkQpIDw9IDA7IH0s ICJVbmV4cGVjdGVkIHN1Y2Nlc3MgY2FsbGluZyBvcGVyYXRvciA8PSB3aXRoICIgI09QRVJBTkQp OwkJXAorICBzdGF0aWNfYXNzZXJ0KCFyZXF1aXJlc3sgKE9QRVJBTkQpID49IDA7IH0sICJVbmV4 cGVjdGVkIHN1Y2Nlc3MgY2FsbGluZyBvcGVyYXRvciA+PSB3aXRoICIgI09QRVJBTkQpOwkJXAor CQkJCQkJCQkJCQkJCQlcCisgIHN0YXRpY19hc3NlcnQoIXJlcXVpcmVzeyAqKE9QRVJBTkQpOyB9 LCAiVW5leHBlY3RlZCBzdWNjZXNzIGNhbGxpbmcgb3BlcmF0b3IgdW5hcnkqIHdpdGggIiAjT1BF UkFORCk7CQlcCisgIHN0YXRpY19hc3NlcnQoIXJlcXVpcmVzeyAmKE9QRVJBTkQpOyB9LCAiVW5l eHBlY3RlZCBzdWNjZXNzIGNhbGxpbmcgb3BlcmF0b3IgdW5hcnkmIHdpdGggIiAjT1BFUkFORCk7 CQlcCisgIHN0YXRpY19hc3NlcnQoIXJlcXVpcmVzeyAoT1BFUkFORCksIDA7IH0sICJVbmV4cGVj dGVkIHN1Y2Nlc3MgY2FsbGluZyBvcGVyYXRvciAsIHdpdGggIiAjT1BFUkFORCk7CisKKyNkZWZp bmUgVEVTVF9WQUxJRChPUEVSQU5EKSBcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7IChPUEVS QU5EKSArPSAwOyB9LCAiVW5leHBlY3RlZCBmYWlsdXJlIGNhbGxpbmcgb3BlcmF0b3IgKz0gd2l0 aCAiICNPUEVSQU5EKTsJCVwKKyAgc3RhdGljX2Fzc2VydChyZXF1aXJlc3sgKE9QRVJBTkQpIC09 IDA7IH0sICJVbmV4cGVjdGVkIGZhaWx1cmUgY2FsbGluZyBvcGVyYXRvciAtPSB3aXRoICIgI09Q RVJBTkQpOwkJXAorICBzdGF0aWNfYXNzZXJ0KHJlcXVpcmVzeyAoT1BFUkFORCkgKj0gMDsgfSwg IlVuZXhwZWN0ZWQgZmFpbHVyZSBjYWxsaW5nIG9wZXJhdG9yICo9IHdpdGggIiAjT1BFUkFORCk7 CQlcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7IChPUEVSQU5EKSAvPSAwOyB9LCAiVW5leHBl Y3RlZCBmYWlsdXJlIGNhbGxpbmcgb3BlcmF0b3IgLz0gd2l0aCAiICNPUEVSQU5EKTsJCVwKKyAg c3RhdGljX2Fzc2VydChyZXF1aXJlc3sgKE9QRVJBTkQpICU9IDA7IH0sICJVbmV4cGVjdGVkIGZh aWx1cmUgY2FsbGluZyBvcGVyYXRvciAlPSB3aXRoICIgI09QRVJBTkQpOwkJXAorICBzdGF0aWNf YXNzZXJ0KHJlcXVpcmVzeyAoT1BFUkFORCkgJj0gMDsgfSwgIlVuZXhwZWN0ZWQgZmFpbHVyZSBj YWxsaW5nIG9wZXJhdG9yICY9IHdpdGggIiAjT1BFUkFORCk7CQlcCisgIHN0YXRpY19hc3NlcnQo cmVxdWlyZXN7IChPUEVSQU5EKSB8PSAwOyB9LCAiVW5leHBlY3RlZCBmYWlsdXJlIGNhbGxpbmcg b3BlcmF0b3IgfD0gd2l0aCAiICNPUEVSQU5EKTsJCVwKKyAgc3RhdGljX2Fzc2VydChyZXF1aXJl c3sgKE9QRVJBTkQpIF49IDA7IH0sICJVbmV4cGVjdGVkIGZhaWx1cmUgY2FsbGluZyBvcGVyYXRv ciBePSB3aXRoICIgI09QRVJBTkQpOwkJXAorICBzdGF0aWNfYXNzZXJ0KHJlcXVpcmVzeyAoT1BF UkFORCkgPDw9IDA7IH0sICJVbmV4cGVjdGVkIGZhaWx1cmUgY2FsbGluZyBvcGVyYXRvciA8PD0g d2l0aCAiICNPUEVSQU5EKTsJXAorICBzdGF0aWNfYXNzZXJ0KHJlcXVpcmVzeyAoT1BFUkFORCkg Pj49IDA7IH0sICJVbmV4cGVjdGVkIGZhaWx1cmUgY2FsbGluZyBvcGVyYXRvciA+Pj0gd2l0aCAi ICNPUEVSQU5EKTsJXAorCQkJCQkJCQkJCQkJCQlcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7 ICsrKE9QRVJBTkQpOyB9LCAiVW5leHBlY3RlZCBmYWlsdXJlIGNhbGxpbmcgb3BlcmF0b3IgcHJl Kysgd2l0aCAiICNPUEVSQU5EKTsJCVwKKyAgc3RhdGljX2Fzc2VydChyZXF1aXJlc3sgLS0oT1BF UkFORCk7IH0sICJVbmV4cGVjdGVkIGZhaWx1cmUgY2FsbGluZyBvcGVyYXRvciBwcmUtLSB3aXRo ICIgI09QRVJBTkQpOwkJXAorICBzdGF0aWNfYXNzZXJ0KHJlcXVpcmVzeyAoT1BFUkFORCkrKzsg fSwgIlVuZXhwZWN0ZWQgZmFpbHVyZSBjYWxsaW5nIG9wZXJhdG9yIHBvc3QrKyB3aXRoICIgI09Q RVJBTkQpOwkJXAorICBzdGF0aWNfYXNzZXJ0KHJlcXVpcmVzeyAoT1BFUkFORCktLTsgfSwgIlVu ZXhwZWN0ZWQgZmFpbHVyZSBjYWxsaW5nIG9wZXJhdG9yIHBvc3QtLSB3aXRoICIgI09QRVJBTkQp OwkJXAorCQkJCQkJCQkJCQkJCQlcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7ICsoT1BFUkFO RCk7IH0sICJVbmV4cGVjdGVkIGZhaWx1cmUgY2FsbGluZyBvcGVyYXRvciB1bmFyeSsgd2l0aCAi ICNPUEVSQU5EKTsJCVwKKyAgc3RhdGljX2Fzc2VydChyZXF1aXJlc3sgLShPUEVSQU5EKTsgfSwg IlVuZXhwZWN0ZWQgZmFpbHVyZSBjYWxsaW5nIG9wZXJhdG9yIHVuYXJ5LSB3aXRoICIgI09QRVJB TkQpOwkJXAorICBzdGF0aWNfYXNzZXJ0KHJlcXVpcmVzeyAoT1BFUkFORCkgKyAwOyB9LCAiVW5l eHBlY3RlZCBmYWlsdXJlIGNhbGxpbmcgb3BlcmF0b3IgYmluYXJ5KyB3aXRoICIgI09QRVJBTkQp OwlcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7IChPUEVSQU5EKSAtIDA7IH0sICJVbmV4cGVj dGVkIGZhaWx1cmUgY2FsbGluZyBvcGVyYXRvciBiaW5hcnktIHdpdGggIiAjT1BFUkFORCk7CVwK KyAgc3RhdGljX2Fzc2VydChyZXF1aXJlc3sgKE9QRVJBTkQpICogMDsgfSwgIlVuZXhwZWN0ZWQg ZmFpbHVyZSBjYWxsaW5nIG9wZXJhdG9yIGJpbmFyeSogd2l0aCAiICNPUEVSQU5EKTsJXAorICBz dGF0aWNfYXNzZXJ0KHJlcXVpcmVzeyAoT1BFUkFORCkgLyAwOyB9LCAiVW5leHBlY3RlZCBmYWls dXJlIGNhbGxpbmcgb3BlcmF0b3IgLyB3aXRoICIgI09QRVJBTkQpOwkJXAorICBzdGF0aWNfYXNz ZXJ0KHJlcXVpcmVzeyAoT1BFUkFORCkgJSAwOyB9LCAiVW5leHBlY3RlZCBmYWlsdXJlIGNhbGxp bmcgb3BlcmF0b3IgJSB3aXRoICIgI09QRVJBTkQpOwkJXAorICBzdGF0aWNfYXNzZXJ0KHJlcXVp cmVzeyAoT1BFUkFORCkgJiAwOyB9LCAiVW5leHBlY3RlZCBmYWlsdXJlIGNhbGxpbmcgb3BlcmF0 b3IgYmluYXJ5JiB3aXRoICIgI09QRVJBTkQpOwlcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7 IChPUEVSQU5EKSB8IDA7IH0sICJVbmV4cGVjdGVkIGZhaWx1cmUgY2FsbGluZyBvcGVyYXRvciB8 IHdpdGggIiAjT1BFUkFORCk7CQlcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7IChPUEVSQU5E KSBeIDA7IH0sICJVbmV4cGVjdGVkIGZhaWx1cmUgY2FsbGluZyBvcGVyYXRvciBeIHdpdGggIiAj T1BFUkFORCk7CQlcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7IChPUEVSQU5EKSA8PCAwOyB9 LCAiVW5leHBlY3RlZCBmYWlsdXJlIGNhbGxpbmcgb3BlcmF0b3IgPDwgd2l0aCAiICNPUEVSQU5E KTsJCVwKKyAgc3RhdGljX2Fzc2VydChyZXF1aXJlc3sgKE9QRVJBTkQpID4+IDA7IH0sICJVbmV4 cGVjdGVkIGZhaWx1cmUgY2FsbGluZyBvcGVyYXRvciA+PiB3aXRoICIgI09QRVJBTkQpOwkJXAor CQkJCQkJCQkJCQkJCQlcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7ICEoT1BFUkFORCk7IH0s ICJVbmV4cGVjdGVkIGZhaWx1cmUgY2FsbGluZyBvcGVyYXRvciAhIHdpdGggIiAjT1BFUkFORCk7 CQlcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7IChPUEVSQU5EKSAmJiAwOyB9LCAiVW5leHBl Y3RlZCBmYWlsdXJlIGNhbGxpbmcgb3BlcmF0b3IgJiYgd2l0aCAiICNPUEVSQU5EKTsJCVwKKyAg c3RhdGljX2Fzc2VydChyZXF1aXJlc3sgKE9QRVJBTkQpIHx8IDA7IH0sICJVbmV4cGVjdGVkIGZh aWx1cmUgY2FsbGluZyBvcGVyYXRvciB8fCB3aXRoICIgI09QRVJBTkQpOwkJXAorCQkJCQkJCQkJ CQkJCQlcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7IChPUEVSQU5EKSA9PSAwOyB9LCAiVW5l eHBlY3RlZCBmYWlsdXJlIGNhbGxpbmcgb3BlcmF0b3IgPT0gd2l0aCAiICNPUEVSQU5EKTsJCVwK KyAgc3RhdGljX2Fzc2VydChyZXF1aXJlc3sgKE9QRVJBTkQpICE9IDA7IH0sICJVbmV4cGVjdGVk IGZhaWx1cmUgY2FsbGluZyBvcGVyYXRvciAhPSB3aXRoICIgI09QRVJBTkQpOwkJXAorICBzdGF0 aWNfYXNzZXJ0KHJlcXVpcmVzeyAoT1BFUkFORCkgPCAwOyB9LCAiVW5leHBlY3RlZCBmYWlsdXJl IGNhbGxpbmcgb3BlcmF0b3IgPCB3aXRoICIgI09QRVJBTkQpOwkJXAorICBzdGF0aWNfYXNzZXJ0 KHJlcXVpcmVzeyAoT1BFUkFORCkgPiAwOyB9LCAiVW5leHBlY3RlZCBmYWlsdXJlIGNhbGxpbmcg b3BlcmF0b3IgPiB3aXRoICIgI09QRVJBTkQpOwkJXAorICBzdGF0aWNfYXNzZXJ0KHJlcXVpcmVz eyAoT1BFUkFORCkgPD0gMDsgfSwgIlVuZXhwZWN0ZWQgZmFpbHVyZSBjYWxsaW5nIG9wZXJhdG9y IDw9IHdpdGggIiAjT1BFUkFORCk7CQlcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7IChPUEVS QU5EKSA+PSAwOyB9LCAiVW5leHBlY3RlZCBmYWlsdXJlIGNhbGxpbmcgb3BlcmF0b3IgPj0gd2l0 aCAiICNPUEVSQU5EKTsJCVwKKwkJCQkJCQkJCQkJCQkJXAorICBzdGF0aWNfYXNzZXJ0KHJlcXVp cmVzeyAqKE9QRVJBTkQpOyB9LCAiVW5leHBlY3RlZCBmYWlsdXJlIGNhbGxpbmcgb3BlcmF0b3Ig dW5hcnkqIHdpdGggIiAjT1BFUkFORCk7CQlcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7ICYo T1BFUkFORCk7IH0sICJVbmV4cGVjdGVkIGZhaWx1cmUgY2FsbGluZyBvcGVyYXRvciB1bmFyeSYg d2l0aCAiICNPUEVSQU5EKTsJCVwKKyAgc3RhdGljX2Fzc2VydChyZXF1aXJlc3sgKE9QRVJBTkQp LCAwOyB9LCAiVW5leHBlY3RlZCBmYWlsdXJlIGNhbGxpbmcgb3BlcmF0b3IgLCB3aXRoICIgI09Q RVJBTkQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorY29uY2VwdCBzYW1l X2FzID0gX19pc19zYW1lKFQsIFUpOworCisjZGVmaW5lIFRFU1RfVkFMSURfV0lUSF9SRVRVUk5f VFlQRVMoT1BFUkFORCwgQ09SUkVDVF9UWVBFKSBcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7 IHsoT1BFUkFORCkgKz0gMH0gLT4gc2FtZV9hczxDT1JSRUNUX1RZUEU+OyB9KTsJXAorICBzdGF0 aWNfYXNzZXJ0KHJlcXVpcmVzeyB7KE9QRVJBTkQpIC09IDB9IC0+IHNhbWVfYXM8Q09SUkVDVF9U WVBFPjsgfSk7CVwKKyAgc3RhdGljX2Fzc2VydChyZXF1aXJlc3sgeyhPUEVSQU5EKSAqPSAwfSAt PiBzYW1lX2FzPENPUlJFQ1RfVFlQRT47IH0pOwlcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7 IHsoT1BFUkFORCkgLz0gMH0gLT4gc2FtZV9hczxDT1JSRUNUX1RZUEU+OyB9KTsJXAorICBzdGF0 aWNfYXNzZXJ0KHJlcXVpcmVzeyB7KE9QRVJBTkQpICU9IDB9IC0+IHNhbWVfYXM8Q09SUkVDVF9U WVBFPjsgfSk7CVwKKyAgc3RhdGljX2Fzc2VydChyZXF1aXJlc3sgeyhPUEVSQU5EKSAmPSAwfSAt PiBzYW1lX2FzPENPUlJFQ1RfVFlQRT47IH0pOwlcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7 IHsoT1BFUkFORCkgfD0gMH0gLT4gc2FtZV9hczxDT1JSRUNUX1RZUEU+OyB9KTsJXAorICBzdGF0 aWNfYXNzZXJ0KHJlcXVpcmVzeyB7KE9QRVJBTkQpIF49IDB9IC0+IHNhbWVfYXM8Q09SUkVDVF9U WVBFPjsgfSk7CVwKKyAgc3RhdGljX2Fzc2VydChyZXF1aXJlc3sgeyhPUEVSQU5EKSA8PD0gMH0g LT4gc2FtZV9hczxDT1JSRUNUX1RZUEU+OyB9KTsJXAorICBzdGF0aWNfYXNzZXJ0KHJlcXVpcmVz eyB7KE9QRVJBTkQpID4+PSAwfSAtPiBzYW1lX2FzPENPUlJFQ1RfVFlQRT47IH0pOwlcCisJCQkJ CQkJCQkJXAorICBzdGF0aWNfYXNzZXJ0KHJlcXVpcmVzeyB7KysoT1BFUkFORCl9IC0+IHNhbWVf YXM8Q09SUkVDVF9UWVBFPjsgfSk7CQlcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7IHstLShP UEVSQU5EKX0gLT4gc2FtZV9hczxDT1JSRUNUX1RZUEU+OyB9KTsJCVwKKyAgc3RhdGljX2Fzc2Vy dChyZXF1aXJlc3sgeyhPUEVSQU5EKSsrfSAtPiBzYW1lX2FzPENPUlJFQ1RfVFlQRT47IH0pOwkJ XAorICBzdGF0aWNfYXNzZXJ0KHJlcXVpcmVzeyB7KE9QRVJBTkQpLS19IC0+IHNhbWVfYXM8Q09S UkVDVF9UWVBFPjsgfSk7CQlcCisJCQkJCQkJCQkJXAorICBzdGF0aWNfYXNzZXJ0KHJlcXVpcmVz eyB7KyhPUEVSQU5EKX0gLT4gc2FtZV9hczxDT1JSRUNUX1RZUEU+OyB9KTsJCVwKKyAgc3RhdGlj X2Fzc2VydChyZXF1aXJlc3sgey0oT1BFUkFORCl9IC0+IHNhbWVfYXM8Q09SUkVDVF9UWVBFPjsg fSk7CQlcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7IHsoT1BFUkFORCkgKyAwfSAtPiBzYW1l X2FzPENPUlJFQ1RfVFlQRT47IH0pOwkJXAorICBzdGF0aWNfYXNzZXJ0KHJlcXVpcmVzeyB7KE9Q RVJBTkQpIC0gMH0gLT4gc2FtZV9hczxDT1JSRUNUX1RZUEU+OyB9KTsJCVwKKyAgc3RhdGljX2Fz c2VydChyZXF1aXJlc3sgeyhPUEVSQU5EKSAqIDB9IC0+IHNhbWVfYXM8Q09SUkVDVF9UWVBFPjsg fSk7CQlcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7IHsoT1BFUkFORCkgLyAwfSAtPiBzYW1l X2FzPENPUlJFQ1RfVFlQRT47IH0pOwkJXAorICBzdGF0aWNfYXNzZXJ0KHJlcXVpcmVzeyB7KE9Q RVJBTkQpICUgMH0gLT4gc2FtZV9hczxDT1JSRUNUX1RZUEU+OyB9KTsJCVwKKyAgc3RhdGljX2Fz c2VydChyZXF1aXJlc3sgeyhPUEVSQU5EKSAmIDB9IC0+IHNhbWVfYXM8Q09SUkVDVF9UWVBFPjsg fSk7CQlcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7IHsoT1BFUkFORCkgfCAwfSAtPiBzYW1l X2FzPENPUlJFQ1RfVFlQRT47IH0pOwkJXAorICBzdGF0aWNfYXNzZXJ0KHJlcXVpcmVzeyB7KE9Q RVJBTkQpIF4gMH0gLT4gc2FtZV9hczxDT1JSRUNUX1RZUEU+OyB9KTsJCVwKKyAgc3RhdGljX2Fz c2VydChyZXF1aXJlc3sgeyhPUEVSQU5EKSA8PCAwfSAtPiBzYW1lX2FzPENPUlJFQ1RfVFlQRT47 IH0pOwlcCisgIHN0YXRpY19hc3NlcnQocmVxdWlyZXN7IHsoT1BFUkFORCkgPj4gMH0gLT4gc2Ft ZV9hczxDT1JSRUNUX1RZUEU+OyB9KTsJXAorCQkJCQkJCQkJCVwKKyAgc3RhdGljX2Fzc2VydChy ZXF1aXJlc3sgeyEoT1BFUkFORCl9IC0+IHNhbWVfYXM8Q09SUkVDVF9UWVBFPjsgfSk7CQlcCisg IHN0YXRpY19hc3NlcnQocmVxdWlyZXN7IHsoT1BFUkFORCkgJiYgMH0gLT4gc2FtZV9hczxDT1JS RUNUX1RZUEU+OyB9KTsJXAorICBzdGF0aWNfYXNzZXJ0KHJlcXVpcmVzeyB7KE9QRVJBTkQpIHx8 IDB9IC0+IHNhbWVfYXM8Q09SUkVDVF9UWVBFPjsgfSk7CVwKKwkJCQkJCQkJCQlcCisgIHN0YXRp Y19hc3NlcnQocmVxdWlyZXN7IHsoT1BFUkFORCkgPT0gMH0gLT4gc2FtZV9hczxDT1JSRUNUX1RZ UEU+OyB9KTsJXAorICBzdGF0aWNfYXNzZXJ0KHJlcXVpcmVzeyB7KE9QRVJBTkQpICE9IDB9IC0+ IHNhbWVfYXM8Q09SUkVDVF9UWVBFPjsgfSk7CVwKKyAgc3RhdGljX2Fzc2VydChyZXF1aXJlc3sg eyhPUEVSQU5EKSA8IDB9IC0+IHNhbWVfYXM8Q09SUkVDVF9UWVBFPjsgfSk7CQlcCisgIHN0YXRp Y19hc3NlcnQocmVxdWlyZXN7IHsoT1BFUkFORCkgPiAwfSAtPiBzYW1lX2FzPENPUlJFQ1RfVFlQ RT47IH0pOwkJXAorICBzdGF0aWNfYXNzZXJ0KHJlcXVpcmVzeyB7KE9QRVJBTkQpIDw9IDB9IC0+ IHNhbWVfYXM8Q09SUkVDVF9UWVBFPjsgfSk7CVwKKyAgc3RhdGljX2Fzc2VydChyZXF1aXJlc3sg eyhPUEVSQU5EKSA+PSAwfSAtPiBzYW1lX2FzPENPUlJFQ1RfVFlQRT47IH0pOwlcCisJCQkJCQkJ CQkJXAorICBzdGF0aWNfYXNzZXJ0KHJlcXVpcmVzeyB7KihPUEVSQU5EKX0gLT4gc2FtZV9hczxD T1JSRUNUX1RZUEU+OyB9KTsJCVwKKyAgc3RhdGljX2Fzc2VydChyZXF1aXJlc3sgeyYoT1BFUkFO RCl9IC0+IHNhbWVfYXM8Q09SUkVDVF9UWVBFPjsgfSk7CQlcCisgIHN0YXRpY19hc3NlcnQocmVx dWlyZXN7IHsoT1BFUkFORCksIDB9IC0+IHNhbWVfYXM8Q09SUkVDVF9UWVBFPjsgfSk7CisKK3Rl bXBsYXRlPHR5cGVuYW1lIERlcFZhbHVlID0gVmFsdWU+Cit2b2lkIHRlc3RfdmFsdWUoKQorewor ICBEZXBWYWx1ZSB2YWx1ZXt9OworICBURVNUX1ZBTElEKHZhbHVlKQorICBURVNUX1ZBTElEKHN0 YXRpY19jYXN0PERlcFZhbHVlJiY+KHZhbHVlKSkKKyAgVEVTVF9WQUxJRChzdGF0aWNfY2FzdDxE ZXBWYWx1ZSBjb25zdCY+KHZhbHVlKSkKKyAgVEVTVF9WQUxJRChzdGF0aWNfY2FzdDxEZXBWYWx1 ZSBjb25zdCYmPih2YWx1ZSkpCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERlcExSZWYgPSBMUmVm Pgordm9pZCB0ZXN0X2xfcmVmKCkKK3sKKyAgRGVwTFJlZiBsX3JlZnt9OworICBURVNUX1ZBTElE KGxfcmVmKQorICBURVNUX0lOVkFMSUQoc3RhdGljX2Nhc3Q8RGVwTFJlZiYmPihsX3JlZikpCisg IFRFU1RfSU5WQUxJRChzdGF0aWNfY2FzdDxEZXBMUmVmIGNvbnN0Jj4obF9yZWYpKQorICBURVNU X0lOVkFMSUQoc3RhdGljX2Nhc3Q8RGVwTFJlZiBjb25zdCYmPihsX3JlZikpCit9CisKK3RlbXBs YXRlPHR5cGVuYW1lIERlcFJSZWYgPSBSUmVmPgordm9pZCB0ZXN0X3JfcmVmKCkKK3sKKyAgRGVw UlJlZiByX3JlZnt9OworICBURVNUX0lOVkFMSUQocl9yZWYpCisgIFRFU1RfVkFMSUQoc3RhdGlj X2Nhc3Q8RGVwUlJlZiYmPihyX3JlZikpCisgIFRFU1RfSU5WQUxJRChzdGF0aWNfY2FzdDxEZXBS UmVmIGNvbnN0Jj4ocl9yZWYpKQorICBURVNUX0lOVkFMSUQoc3RhdGljX2Nhc3Q8RGVwUlJlZiBj b25zdCYmPihyX3JlZikpCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERlcENvbnN0TFJlZiA9IENv bnN0TFJlZj4KK3ZvaWQgdGVzdF9jb25zdF9sX3JlZigpCit7CisgIERlcENvbnN0TFJlZiBjb25z dF9sX3JlZnt9OworICBURVNUX1ZBTElEKGNvbnN0X2xfcmVmKQorICBURVNUX1ZBTElEKHN0YXRp Y19jYXN0PERlcENvbnN0TFJlZiYmPihjb25zdF9sX3JlZikpCisgIFRFU1RfVkFMSUQoc3RhdGlj X2Nhc3Q8RGVwQ29uc3RMUmVmIGNvbnN0Jj4oY29uc3RfbF9yZWYpKQorICBURVNUX1ZBTElEKHN0 YXRpY19jYXN0PERlcENvbnN0TFJlZiBjb25zdCYmPihjb25zdF9sX3JlZikpCit9CisKK3RlbXBs YXRlPHR5cGVuYW1lIERlcENvbnN0UlJlZiA9IENvbnN0UlJlZj4KK3ZvaWQgdGVzdF9jb25zdF9y X3JlZigpCit7CisgIERlcENvbnN0UlJlZiBjb25zdF9yX3JlZnt9OworICBURVNUX0lOVkFMSUQo Y29uc3Rfcl9yZWYpCisgIFRFU1RfSU5WQUxJRChzdGF0aWNfY2FzdDxEZXBDb25zdFJSZWYmJj4o Y29uc3Rfcl9yZWYpKQorICBURVNUX0lOVkFMSUQoc3RhdGljX2Nhc3Q8RGVwQ29uc3RSUmVmIGNv bnN0Jj4oY29uc3Rfcl9yZWYpKQorICBURVNUX1ZBTElEKHN0YXRpY19jYXN0PERlcENvbnN0UlJl ZiBjb25zdCYmPihjb25zdF9yX3JlZikpCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERlcERlZHVj ZWQgPSBEZWR1Y2VkPgordm9pZCB0ZXN0X2RlZHVjZWQoKQoreworICBEZXBEZWR1Y2VkIGRlZHVj ZWR7fTsKKworICBURVNUX1ZBTElEKGRlZHVjZWQpCisgIFRFU1RfVkFMSUQoc3RhdGljX2Nhc3Q8 RGVwRGVkdWNlZCYmPihkZWR1Y2VkKSkKKyAgVEVTVF9WQUxJRChzdGF0aWNfY2FzdDxEZXBEZWR1 Y2VkIGNvbnN0Jj4oZGVkdWNlZCkpCisgIFRFU1RfVkFMSUQoc3RhdGljX2Nhc3Q8RGVwRGVkdWNl ZCBjb25zdCYmPihkZWR1Y2VkKSkKKworICBURVNUX1ZBTElEX1dJVEhfUkVUVVJOX1RZUEVTKGRl ZHVjZWQsIERlcERlZHVjZWQmKQorICBURVNUX1ZBTElEX1dJVEhfUkVUVVJOX1RZUEVTKHN0YXRp Y19jYXN0PERlcERlZHVjZWQmJj4oZGVkdWNlZCksIERlcERlZHVjZWQmJikKKyAgVEVTVF9WQUxJ RF9XSVRIX1JFVFVSTl9UWVBFUyhzdGF0aWNfY2FzdDxEZXBEZWR1Y2VkIGNvbnN0Jj4oZGVkdWNl ZCksIERlcERlZHVjZWQgY29uc3QmKQorICBURVNUX1ZBTElEX1dJVEhfUkVUVVJOX1RZUEVTKHN0 YXRpY19jYXN0PERlcERlZHVjZWQgY29uc3QmJj4oZGVkdWNlZCksIERlcERlZHVjZWQgY29uc3Qm JikKK30KKwordm9pZCB0ZXN0KCkKK3sKKyAgdGVzdF92YWx1ZSgpOworICB0ZXN0X2xfcmVmKCk7 CisgIHRlc3Rfcl9yZWYoKTsKKyAgdGVzdF9jb25zdF9sX3JlZigpOworICB0ZXN0X2NvbnN0X3Jf cmVmKCk7CisgIHRlc3RfZGVkdWNlZCgpOworfQotLSAKMi40Mi4wCgo= --b1_TSNbO4fUsrsmWVSGcqHgiraI3NWIxzPrxylElkFAw--