Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wT9Ev-000LbD-2K for pgsql-hackers@arkaria.postgresql.org; Sat, 30 May 2026 02:15:54 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wT9Eu-0054z7-0Q for pgsql-hackers@arkaria.postgresql.org; Sat, 30 May 2026 02:15:52 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wT9Et-0054yx-0R for pgsql-hackers@lists.postgresql.org; Sat, 30 May 2026 02:15:52 +0000 Received: from mail-ed1-x536.google.com ([2a00:1450:4864:20::536]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wT9En-00000000CyS-0n4s for pgsql-hackers@postgresql.org; Sat, 30 May 2026 02:15:50 +0000 Received: by mail-ed1-x536.google.com with SMTP id 4fb4d7f45d1cf-68bac6e24fdso2710861a12.1 for ; Fri, 29 May 2026 19:15:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1780107344; cv=none; d=google.com; s=arc-20240605; b=fT+Ltw9N/iMfGeQUBHgIUnFPmzXgUA6MOJXUOpA5Wi1SdECRDHBwLPzidXf++Y/TSv CDmeVgJbGrLOoqIpA1ZjAda8PtzZpk9Bohnm+lOGUH6bbTVOG0b3esO4tXOllQuFpngV f+DaP7tZRDYfBBu6d2sBCvD9h7caREWKgOc6MF6za4dO8PzNVhQRPeNr64k6Mlp/bmZr G9BmFVV20NAFr7BnkKmkr6L8jyx5L4n/W5KoMU2q4H1XGx/0/LAVd+ojA7n5vjNXM4WK 8h29NnEi3KX9OfocCV/MDcT27rXM/N92921a7S8/OtMEZjBiGra+qsJ2DECN1a7069Jn JvhA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=FWmOQf/GU/BvjNZTbJD5VO41KH4NqWhR6pn2MIoByyE=; fh=uqaFqNrYI8BanjCkBA3wRFUOs+utYRup+YPmG3CyJ5k=; b=h7M6tMHMMe0MHe9MmHdA85Pufy5bIOK3EBA79TqQvQTd4MpMCBjrXwZzh6lqA9Xp4E x8C/Ci39PIN867/YBcXombv2MS+6n2nJd06GPbSCigjBQGaT6/DdOAxRbnF84hXqXumH OR/Md0l3Vdf2Hgl5Sb0iUflTPOmgUWaRPOFoYtLtoPWP8qJp/xYUnz5jjF4Qqp+FZ5Cd MgPbsxEfcVegJ5Cxywvb1p6s+6V1UWmJIU5HC8PuHCDjScnBwoCg1Wk2huKDWdfSFDFA yMy8dSAqb2lVMOP7NSHv/gvIaGVSuH+NLuHLXTvZDNr+zHBkS5geT3Cy5cCzHiOnmRO9 f9ig==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780107344; x=1780712144; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=FWmOQf/GU/BvjNZTbJD5VO41KH4NqWhR6pn2MIoByyE=; b=SCiYwF1gMzisi5bDrpW+XxOZCphKKGHp2Iqe6/hd/u8kkcxBqw6/H15gIHNw2CrFW5 0mFbJ0v+fNd6wjUkYvyb/TljiX7TMh0LuEFwwe78iVxJxmWZjxNsHKeEfz/vS/ixSbY5 ZK/4sY5suNZe0pzhM6d8DRCUkLku4h+bgAiM6vhh/GHeAmTj4aaR4si9oAjYsokKSAq4 H0A1+ptloFLEG7LJ+yMq4n7QOLGJWwYMlTRxxucbjhFc4IQb9/+sXzHzDmhJ9sNObY9M QFm08ffq2PPPGPPPk4B5xyZ9gjaP/PJGn1hu5qOtwJwyGw19MACFxTG3rEuj/eukqwQY +jcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780107344; x=1780712144; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=FWmOQf/GU/BvjNZTbJD5VO41KH4NqWhR6pn2MIoByyE=; b=e0VeAdXi6yrICZsx0iH1lp3BFe0sySENMqLI7Dz1xFxGZeQCItbPcJ3B0DlnLvaN/i uT9zg+IYOt94JMEVVs0++LGQ+U3DWFCz6XKVSU44iHEzuvUNRUvXHoYntD/1ACojV27E uSszPRZLoP69yINQMRsyXOpIGitRfriEBkHymZgR+MJAJpvb6lcNjlf8yNxcM11D0TFr CkwmRp+PYR6GNSgiTkqnrEinWrd3iLvsQE8xAAQV1Ir+IiLR9d41MLgy0KQW/8aRUD3x 6Xj0kKE+slJlzTK0PFDuBrn5buXu3NbM8NaF1xt0XKI1bMYj9gqVZDx03TxgWtRh1JPw m60Q== X-Gm-Message-State: AOJu0YyWNGDF9qmPizZ7MxRVTq30tZeS7Zp/Xk/qs1FTMP6NDqok2d8S rCSA/i9hrBeL32+3nDV2MO8oTMGNko4hFTdPWzAndzILqNrJ/Fa467tIkLnBuvKEM2F0oxgWAhD oAMiFd4BTry9iJNZciPQyr1JG0TfwKyqUaEXD X-Gm-Gg: Acq92OFoqh+9rzbTw4mM9bdPHOfkMbZvy+W/nc8AZdzUWsAKWxrdF9ViFN4B+nsQO3d tMgUNHSh3zS0bdT4BeDX7wdLkSHLUKeUrgEvk0mn6O+3DJbK30TRt7ooCkzi05hVuXnrwHJ5eJG TvYPE+d652VOUg/eiHPEkmNwshtGyreO+h5NK/TxQ0e2tO5TU3FuWwsnvoo5uR6AS4hfUU/lzMf kq5oUjLUrGEKN8Q8KjfVqPkX6rxnjpj5519//mhMAGMF8w+stUzzshX/AbqCZEmBarQNF4zs5bs AH2EKOAizc8YaEF3oWWX51MYoE9E6z628Sou7EqMLsoS92IG0w== X-Received: by 2002:a17:907:1b16:b0:bda:a98:e584 with SMTP id a640c23a62f3a-beab1a9b8cemr105760366b.23.1780107343865; Fri, 29 May 2026 19:15:43 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Sami Imseih Date: Fri, 29 May 2026 21:15:31 -0500 X-Gm-Features: AVHnY4IPfXTRdghX3ppby-6PabcoXwbGk0mcD0t9fp1_YHQSnaRCcYu5cMr5r2U Message-ID: Subject: Re: Improve pg_stat_statements scalability To: Lukas Fittl Cc: pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000e4fcc10652ff8975" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e4fcc10652ff8975 Content-Type: text/plain; charset="UTF-8" >> I've created a new wiki page combining the prior 2025 discussion, and >> notes from today: >> >> https://wiki.postgresql.org/wiki/Scalability_of_pg_stat_statements >Thank you, Lukas! Thanks for the feedback on v2, and for the productive unconference discussion in PGConf.dev. I've been iterating on the patches/benchmarks and wanted to post an updated series that addresses the major design points raised. Addressing the feedback from the unconference session: 1/ Eviction The concern in the design presented in which entries are skipped until a single threaded eviction completed was that on a steady workload with max=5000, the 5001st unique query would always be immediately evicted. This was considered unacceptable, and rightly so. It may be fine for high churn, pathological cases, but for slow churn cases it would be unacceptable. Andres mentioned that eviction should occur in parallel, which I understood as multiple backends should evict a subset of the entries in the dshash concurrently. To do this, I implemented a parallel clock-sweep in which eviction sweeps a partition decrementing refcounts, and only entries that have decayed to zero are evicted. A genuinely new query that just arrived has a fresh refcount and survives the sweep, and if it becomes popular in the meantime, it will survive for longer. So the algorithm wants an entry to prove itself to remain considered "hot", else it's swept. There's a 5% headroom using the already existing USAGE_DEALLOC_PERCENT in which we evict until count (across all partitions) drops to 95% of max, so there's always room for new arrivals before the next sweep. I chose not to use a background worker for eviction, as discussed earlier, based on the consensus that backpressure is important, and a background worker being asynchronous in nature will not provide that. Also, it could be complicated where a background worker cannot be spun up for whatever reason. However, to implement parallel eviction as described above, I needed 2 core changes: - pgstat_drop_entry must be able to optionally tolerate a dropped entry, as there could be a delay between the time an entry is marked as dropped and garbage collection, and within that time multiple evictions may attempt to drop the same entry. - Implement a seq scan API for dshash that scans a specific partition. This will allow eviction to cycle through partitions, i.e. clock-sweep. The eviction does not attempt to make room in the bucket for an entry that triggered it. The main point is to keep forward progress in making room. We don't need to be more strict here. Also the fact that pg_stat_statements.max is dynamic means a user can increase this value to manage high churn without a restart. The dealloc counter in pg_stat_statements_info now counts individual entries evicted rather than the number of times eviction was invoked. I think this is more useful, but it does change the semantics between versions. With the new design, a single eviction pass can remove many entries across a partition, so counting evictions no longer tells you much. Open to other thoughts here on this. Profiling revealed that pgstat_request_entry_refs_gc(), which is the standard pattern for less frequently removed entries in other places, was too expensive when called on every entry drop or every partition sweep. Now it is only called once per full rotation across all partitions, which showed much better results in benchmarks. 2/ DSA only query text storage Rather than a "performance cliff" that Lukas mentioned above when we switch between DSA and disk for query text storage, the consensus is to just store all query text in memory. Andres made a point that even now, transient memory usage for loading the query text for the purpose of garbage-collection or reading the query stats in pg_stat_statements means that a user's machine must have enough memory to handle this. So, why not just throw all query text in memory. The memory is capped by a new GUC pg_stat_statements.query_text_memory (default of 4MB but up for discussion). It is also possible to store more entries due to .max than .query_text_memory can support, so empty query text columns could be possible. In the case a user increases .query_text_memory if they observe empty query columns, the next time an entry is touched, it will backfill the query text and normalize the string if it can. The last part could be improved and actually guaranteed if we make JumbleState available to all hooks (I did not work on this part, but open for discussion). Some other comments from Lukas's earlier review: > It appears you've moved the equivalent of the "if (!entry)" check > into the pgss_store_query_text function, and we now unconditionally > call generate_normalized_query. Fixed. v3 series is now 5 patches: 0001: pgstat: Introduce pg_stat_report_anytime() Nothing changes from v2. 0002: pgstat: tolerate already-dropped entries in pgstat_drop_entry() Required for the parallel eviction design. With multiple backends sweeping different partitions concurrently, the same entry can be targeted for drop more than once before garbage collection runs. A skip_dropped flag makes this safe rather than throwing ERROR. 0003: dshash: add partition-scoped sequential scan Adds dshash_seq_init_partition() to restrict a scan to a single partition. This is the building block for per-partition clock-sweep; a backend only locks and sweeps one partition at a time. 0004: pg_stat_statements: modernize entry storage with pgstat kind The main patch. Replaces ShmemInitHash with dshash via DSM registry, and replaces per-entry spinlock counter updates with a custom pgstat kind that uses the core pgstat infrastructure. Eviction changes from qsort-all-entries to clock-sweep with an atomic rotating hand. Each entry carries a refcount (capped at 10) that decays on sweep; entries reaching zero are evicted. Hot queries keep their refcount topped up proportionally to access frequency. pg_stat_statements.max becomes PGC_SIGHUP. 0005: pg_stat_statements: store query text in DSA instead of file Moves query text from pgss_query_texts.stat into a DSA area via GetNamedDSA. Adds pg_stat_statements.query_text_memory (PGC_SIGHUP, default 4MB) controlling DSA size. Eliminates the GC machinery entirely. When DSA is exhausted, entries are still tracked but query text is stored as NULL. A backfill mechanism recovers text on subsequent executions once space becomes available. Benchmark: Attached are the benchmark scripts I used for v3 (and will keep using going forward) with the results in the benchmark_v3.txt file comparing patch vs upstream. The benchmark performs various workloads: "high churn", "light churn", "multi stmt", and simple "select1". I am also tracking query retention (hot/cold entry retention) to verify the clock-sweep behaves as expected. I attached the .sql scripts used to benchmark. The select1 result shows a 1.0% regression. This workload has no contention, so it purely measures pgstat infrastructure overhead; perf profiling shows pgstat_get_entry_ref() at the top. However, on machines with higher core count the upstream spinlock on the counters becomes a bottleneck, which is where the dshash design should win back this overhead and maybe more. I still plan to benchmark this on a larger machine. You will notice that cold_calls in the patched churn case are much lower (805 vs 4,458). This is because entries get evicted sooner under per-partition sweep. Hot and cold query retention lines up w ith current upstream (1000/1000 hot entries survive continuous churn). The deallocs count is much higher in the patch (11.9M vs 38.5K in high churn). per-partition sweep fires frequently to keep the table at target capacity, whereas upstream batches fewer, larger deallocations. We can maybe look into reducing USAGE_DEALLOC_PERCENT to increase retention of "colder" entries. We also see much less LWLock contention in the patched churn case. The top wait is PgStatsDSA (502 total) vs pg_stat_statements (7,757) in upstream, a 15x reduction. Looking forward to your feedback! -- Sami Imseih Amazon Web Services (AWS) --000000000000e4fcc10652ff8975 Content-Type: text/plain; charset="US-ASCII"; name="benchmark_v3.txt" Content-Disposition: attachment; filename="benchmark_v3.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mprpru419 TWFjaGluZToKICBDUFVzOiAxNiAoOCBjb3JlcywgMiB0aHJlYWRzL2NvcmUsIDEgc29ja2V0KQog IENQVSBtb2RlbDogSW50ZWwoUikgWGVvbihSKSBDUFUgRTUtMjY4MCB2MiBAIDIuODBHSHoKICBS QU06IDI5R2kKCkJ1aWxkIGNvbmZpZ3VyYXRpb25zOgogIHJlbGVhc2U6ICAgICAgICBidWlsZHR5 cGU9cmVsZWFzZSwgY2Fzc2VydD1mYWxzZSwgbmRlYnVnPXRydWUKCkJlbmNobWFyazoKICBGb3Ig ZWFjaCB0ZXN0OiBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSwgdGhlbiBwZ2JlbmNoIChzZWUg cGVyLXRlc3QgY29tbWFuZCBiZWxvdykuCiAgV2hpbGUgcGdiZW5jaCBpcyBydW5uaW5nOgogICAg LSBzYW1wbGUgcGdfc3RhdF9hY3Rpdml0eSB3YWl0IGV2ZW50cyAoV0hFUkUgc3RhdGUgPSAnYWN0 aXZlJykgZXZlcnkgMXMKICAgIC0gcXVlcnkgcGdfc3RhdF9zdGF0ZW1lbnRzIChlbnRyaWVzLCBo b3QvY29sZCBjYWxscykgZXZlcnkgMjBzCiAgICAgIGhvdF9jYWxscyA9IHN1bShjYWxscykgRklM VEVSIChXSEVSRSBxdWVyeSBMSUtFICclaG90JScpCiAgICAgIGNvbGRfY2FsbHMgPSBzdW0oY2Fs bHMpIEZJTFRFUiAoV0hFUkUgcXVlcnkgTk9UIExJS0UgJyVob3QlJyBBTkQgcXVlcnkgSVMgTk9U IE5VTEwpCgoKPT09IGNodXJuIChyZWxlYXNlLCBzaW1wbGUpID09PQogIHBnYmVuY2ggLWYgYmVu Y2hfY2h1cm4uc3FsIC1jIDY0IC1qIDE2IC1UIDMwMCAtTSBzaW1wbGUKKy0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSsKfCAgICAgICAgICAgICAgIHwgcGF0Y2ggICAgICAgICAgICAgICAg ICAgfCB1cHN0cmVhbSAgICAgICAgICAgICAgICAgICAgICAgICB8IGRlbHRhICAgIHwKKy0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKfCBUUFMgICAgICAgICAgIHwgICAgICAgICAgICAg ICAgICAyMDY5NTkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2NTgzMCB8ICAgKzI0Ljgl IHwKfCBlbnRyaWVzICAgICAgIHwgICAgICAgICAgICAgICAgICAgIDQ5NjggfCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgNDk0NyB8ICAgICAgICAgIHwKfCBob3RfZW50KGF2ZykgIHwgICAg ICAgICAgICAgICAgICAgIDEwMDAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMCB8 ICAgICAgICAgIHwKfCBjb2xkX2VudChhdmcpIHwgICAgICAgICAgICAgICAgICAgIDM4NzggfCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMzg4MyB8ICAgICAgICAgIHwKfCBob3RfY2FsKGF2 ZykgIHwgICAgICAgICAgICAgICAgMjU2MDE2MTEgfCAgICAgICAgICAgICAgICAgICAgICAgICAx OTg3MjUzNiB8ICAgICAgICAgIHwKfCBjb2xkX2NhbChhdmcpIHwgICAgICAgICAgICAgICAgICAg ICA4MDUgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDQ1OCB8ICAgICAgICAgIHwKfCBk ZWFsbG9jcyAgICAgIHwgICAgICAgICAgICAgICAgMTE5MzU0MzMgfCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAzODUwMSB8ICAgICAgICAgIHwKfCB0b3Bfd2FpdCAgICAgIHwgTFdMb2NrOlBn U3RhdHNEU0EgKDUwMikgfCBMV0xvY2s6cGdfc3RhdF9zdGF0ZW1lbnRzICg3NzU3KSB8ICAgICAg ICAgIHwKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKCj09PSBsaWdodF9jaHVybiAo cmVsZWFzZSwgc2ltcGxlKSA9PT0KICBwZ2JlbmNoIC1mIGJlbmNoX2xpZ2h0X2NodXJuLnNxbCAt YyA2NCAtaiAxNiAtVCAzMDAgLU0gc2ltcGxlCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCnwgICAgICAg ICAgICAgICB8IHBhdGNoICAgICAgICB8IHVwc3RyZWFtICAgICAgICAgICAgICAgICAgICAgICAg fCBkZWx0YSAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCnwgVFBTICAgICAgICAgICB8ICAgICAg IDI0MjE2NyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAyMzgxMzkgfCAgICArMS42JSB8Cnwg ZW50cmllcyAgICAgICB8ICAgICAgICAgNDk5MiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg IDQ4MzkgfCAgICAgICAgICB8CnwgaG90X2VudChhdmcpICB8ICAgICAgICAgMTAwMCB8ICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDEwMDAgfCAgICAgICAgICB8CnwgY29sZF9lbnQoYXZnKSB8 ICAgICAgICAgMzk4OCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM5MDAgfCAgICAgICAg ICB8CnwgaG90X2NhbChhdmcpICB8ICAgICAzNjIyODk3NCB8ICAgICAgICAgICAgICAgICAgICAg ICAgMzY5NDI5NDggfCAgICAgICAgICB8CnwgY29sZF9jYWwoYXZnKSB8ICAgICAgICAgOTU0NSB8 ICAgICAgICAgICAgICAgICAgICAgICAgICAgNTYxNzggfCAgICAgICAgICB8CnwgZGVhbGxvY3Mg ICAgICB8ICAgICAgIDIxNTA3OSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4NjQgfCAg ICAgICAgICB8CnwgdG9wX3dhaXQgICAgICB8IG5vbmUgICAgICAgICB8IExXTG9jazpwZ19zdGF0 X3N0YXRlbWVudHMgKDMyMCkgfCAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCgo9PT0g bXVsdGlfc3RtdCAocmVsZWFzZSwgc2ltcGxlKSA9PT0KICBwZ2JlbmNoIC1mIGJlbmNoX211bHRp X3N0bXQuc3FsIC1jIDY0IC1qIDE2IC1UIDMwMCAtTSBzaW1wbGUKKy0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKwp8ICAgICAgICAgICAgICAg fCBwYXRjaCAgICAgICAgfCB1cHN0cmVhbSAgICAgfCBkZWx0YSAgICB8CistLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKfCBUUFMgICAgICAg ICAgIHwgICAgICAgIDE4MTg2IHwgICAgICAgIDE3ODE1IHwgICAgKzIuMCUgfAp8IGVudHJpZXMg ICAgICAgfCAgICAgICAgICAgIDYgfCAgICAgICAgICAgIDYgfCAgICAgICAgICB8CnwgZGVhbGxv Y3MgICAgICB8ICAgICAgICAgICAgMCB8ICAgICAgICAgICAgMCB8ICAgICAgICAgIHwKfCB0b3Bf d2FpdCAgICAgIHwgbm9uZSAgICAgICAgIHwgbm9uZSAgICAgICAgIHwgICAgICAgICAgfAorLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCgo9 PT0gc2VsZWN0MSAocmVsZWFzZSwgc2ltcGxlKSA9PT0KICBwZ2JlbmNoIC1mIGJlbmNoX3NlbGVj dDEuc3FsIC1jIDY0IC1qIDE2IC1UIDMwMCAtTSBzaW1wbGUKKy0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKwp8ICAgICAgICAgICAgICAgfCBw YXRjaCAgICAgICAgfCB1cHN0cmVhbSAgICAgfCBkZWx0YSAgICB8CistLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKfCBUUFMgICAgICAgICAg IHwgICAgICAgMjg2NDQ0IHwgICAgICAgMjg5NjE2IHwgICAgLTEuMCUgfAp8IGVudHJpZXMgICAg ICAgfCAgICAgICAgICAgIDQgfCAgICAgICAgICAgIDQgfCAgICAgICAgICB8CnwgZGVhbGxvY3Mg ICAgICB8ICAgICAgICAgICAgMCB8ICAgICAgICAgICAgMCB8ICAgICAgICAgIHwKfCB0b3Bfd2Fp dCAgICAgIHwgbm9uZSAgICAgICAgIHwgbm9uZSAgICAgICAgIHwgICAgICAgICAgfAorLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r --000000000000e4fcc10652ff8975 Content-Type: application/sql; name="bench_select1.sql" Content-Disposition: attachment; filename="bench_select1.sql" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpreg8cq8 U0VMRUNUIDE7Cg== --000000000000e4fcc10652ff8975 Content-Type: application/sql; name="bench_churn.sql" Content-Disposition: attachment; filename="bench_churn.sql" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpreg8bv5 XHNldCByb2xsIHJhbmRvbSgxLCAxMDApClxzZXQgaG90IHJhbmRvbSgxLCAxMDAwKQpcc2V0IGNo dXJuIHJhbmRvbSgxLCAxMDAwMDApClxpZiA6cm9sbCA8PSA4MApXSVRIIGhvdDpob3QgQVMgKFNF TEVDVCAxKSBTRUxFQ1QgRlJPTSBob3Q6aG90ClxlbHNlCldJVEggdDpjaHVybiBBUyAoU0VMRUNU IDEpIFNFTEVDVCBGUk9NIHQ6Y2h1cm4KXGVuZGlmCg== --000000000000e4fcc10652ff8975 Content-Type: application/sql; name="bench_light_churn.sql" Content-Disposition: attachment; filename="bench_light_churn.sql" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpreg8cc6 XHNldCByb2xsIHJhbmRvbSgxLCAxMDAwKQpcc2V0IGhvdCByYW5kb20oMSwgMTAwMCkKXHNldCBj b2xkIHJhbmRvbSgxLCAxMDAwMCkKXGlmIDpyb2xsIDw9IDk5NQpXSVRIIGhvdDpob3QgQVMgKFNF TEVDVCAxKSBTRUxFQ1QgRlJPTSBob3Q6aG90ClxlbHNlCldJVEggdDpjb2xkIEFTIChTRUxFQ1Qg MSkgU0VMRUNUIEZST00gdDpjb2xkClxlbmRpZgo= --000000000000e4fcc10652ff8975 Content-Type: application/sql; name="bench_multi_stmt.sql" Content-Disposition: attachment; filename="bench_multi_stmt.sql" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpreg8ck7 XHNldCBhIHJhbmRvbSgxLCAxMDAwMDApCkJFR0lOOwpTRUxFQ1QgOmE7ClxzbGVlcCA1MDAgdXMK U0VMRUNUIDphOwpcc2xlZXAgNTAwIHVzClNFTEVDVCA6YTsKXHNsZWVwIDUwMCB1cwpTRUxFQ1Qg OmE7ClxzbGVlcCA1MDAgdXMKU0VMRUNUIDphOwpcc2xlZXAgNTAwIHVzClNFTEVDVCA6YTsKQ09N TUlUOwo= --000000000000e4fcc10652ff8975 Content-Type: application/x-patch; name="v3-0001-pgstat-Introduce-pg_stat_report_anytime-for-mid-t.patch" Content-Disposition: attachment; filename="v3-0001-pgstat-Introduce-pg_stat_report_anytime-for-mid-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mprga8kl8 RnJvbSBkNWUwNjBmZGNjM2FmYWU0NDc0OTZmMTYzNDI0MWM0NDAzYTIwZGNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEltc2VpaCA8c2FtaW1zZWloQGdtYWlsLmNvbT4KRGF0 ZTogU3VuLCAxMCBNYXkgMjAyNiAwNzowNjowNCAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjMgMS81 XSBwZ3N0YXQ6IEludHJvZHVjZSBwZ19zdGF0X3JlcG9ydF9hbnl0aW1lKCkgZm9yCiBtaWQtdHJh bnNhY3Rpb24gc3RhdHMgZmx1c2gKCkFkZCBhbiBBUEkgdG8gZmx1c2ggcGVuZGluZyBzdGF0cyB0 aGF0IGFyZSBzYWZlIHRvIHJlcG9ydCBpbnNpZGUgYQp0cmFuc2FjdGlvbiB3aXRob3V0IHdhaXRp bmcgZm9yIHRyYW5zYWN0aW9uIGVuZC4gUmVsYXRpb24gd3JpdGUKY291bnRlcnMgKHR1cGxlcyBp bnNlcnRlZCwgdXBkYXRlZCwgZGVsZXRlZCkgZm9yIHRhYmxlcyBtb2RpZmllZCBpbgp0aGUgY3Vy cmVudCB0cmFuc2FjdGlvbiBhcmUgZXhjbHVkZWQsIHNpbmNlIHRoZWlyIGZpbmFsIHZhbHVlcyBk ZXBlbmQKb24gY29tbWl0L2Fib3J0IG91dGNvbWUuCgpUaGUgU1FMIGZ1bmN0aW9uIHBnX3N0YXRf cmVwb3J0X2FueXRpbWUocGlkKSBmbHVzaGVzIHRoZSB0YXJnZXQKYmFja2VuZCdzIHBlbmRpbmcg c3RhdHM6IGlmIHRoZSBQSUQgbWF0Y2hlcyB0aGUgY2FsbGVyJ3Mgb3duIGJhY2tlbmQKaXQgZmx1 c2hlcyBpbW1lZGlhdGVseSwgb3RoZXJ3aXNlIGl0IHNpZ25hbHMgdGhlIHRhcmdldCB0byBmbHVz aCBhdAppdHMgbmV4dCBDSEVDS19GT1JfSU5URVJSVVBUUyAoZm9yIHJlZ3VsYXIgYmFja2VuZHMp IG9yIG1haW4tbG9vcAppdGVyYXRpb24gKGZvciBhdXhpbGlhcnkgcHJvY2Vzc2VzKS4gVGhlIEMg ZnVuY3Rpb24KcGdzdGF0X3JlcG9ydF9hbnl0aW1lX3N0YXQoKSBmbHVzaGVzIHBlbmRpbmcgc3Rh dHMgaW4gdGhlIGNhbGxpbmcKYmFja2VuZCBvbmx5LgotLS0KIGRvYy9zcmMvc2dtbC9tb25pdG9y aW5nLnNnbWwgICAgICAgICAgICAgICAgIHwgIDI2ICsrKysKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvYXV0b3ZhY3V1bS5jICAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv Y2hlY2twb2ludGVyLmMgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvaW50 ZXJydXB0LmMgICAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNo LmMgICAgICAgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1cC5j ICAgICAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXpl ci5jICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyAg ICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyAgICAgICAgICAgICAg ICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdC5jICAgICAgICAg IHwgIDYxICsrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9yZWxh dGlvbi5jIHwgIDk3ICsrKysrKysrKy0tLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3Rh dGZ1bmNzLmMgICAgICAgICAgfCAgNDAgKysrKysrCiBzcmMvYmFja2VuZC91dGlscy9pbml0L2ds b2JhbHMuYyAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0ICAgICAgICAgICAgICB8ICAgNiArCiBzcmMvaW5jbHVkZS9taXNjYWRtaW4uaCAgICAgICAg ICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9wZ3N0YXQuaCAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaCAgICAg ICAgICAgICB8ICAgMiArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzLm91dCAgICAg ICAgICB8IDEyMiArKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zdGF0 cy5zcWwgICAgICAgICAgICAgICB8ICA4MSArKysrKysrKysrKysKIDE5IGZpbGVzIGNoYW5nZWQs IDQzMSBpbnNlcnRpb25zKCspLCAzNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3Jj L3NnbWwvbW9uaXRvcmluZy5zZ21sIGIvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbAppbmRl eCAwOGQ1YjgyNDU1Mi4uYmI2YzkyOGUzZTcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9tb25p dG9yaW5nLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbApAQCAtNTYwNyw2 ICs1NjA3LDMyIEBAIGRlc2NyaXB0aW9uIHwgV2FpdGluZyBmb3IgYSBuZXdseSBpbml0aWFsaXpl ZCBXQUwgZmlsZSB0byByZWFjaCBkdXJhYmxlIHN0b3JhZ2UKICAgICAgICA8L3BhcmE+PC9lbnRy eT4KICAgICAgIDwvcm93PgogCisgICAgICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5j X3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRl eHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5wZ19zdGF0X3JlcG9ydF9hbnl0aW1lPC9wcmltYXJ5 PgorICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnBnX3N0YXRfcmVwb3J0 X2FueXRpbWU8L2Z1bmN0aW9uPiAoIDx0eXBlPmludGVnZXI8L3R5cGU+ICkKKyAgICAgICAgPHJl dHVybnZhbHVlPmJvb2xlYW48L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8 cGFyYT4KKyAgICAgICAgRm9yY2UgZmx1c2ggb2YgcGVuZGluZyBzdGF0aXN0aWNzIHRvIHNoYXJl ZCBtZW1vcnkgZm9yIHRoZSBiYWNrZW5kCisgICAgICAgIHdpdGggdGhlIHNwZWNpZmllZCBwcm9j ZXNzIElELiBVbmxpa2Ugbm9ybWFsIHN0YXRpc3RpY3MgcmVwb3J0aW5nLAorICAgICAgICB0aGlz IGNhbiBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYSB0cmFuc2FjdGlvbi4gRm9yIHJlbGF0aW9ucyBt b2RpZmllZAorICAgICAgICBieSA8Y29tbWFuZD5JTlNFUlQ8L2NvbW1hbmQ+LCA8Y29tbWFuZD5V UERBVEU8L2NvbW1hbmQ+LCBvcgorICAgICAgICA8Y29tbWFuZD5ERUxFVEU8L2NvbW1hbmQ+IGlu IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLCBvbmx5IHJlYWQKKyAgICAgICAgY291bnRlcnMgKHNj YW5zLCB0dXBsZXMgZmV0Y2hlZCwgYmxvY2tzIGhpdCkgYXJlIGZsdXNoZWQKKyAgICAgICAgaW1t ZWRpYXRlbHk7IHdyaXRlIGNvdW50ZXJzICh0dXBsZXMgaW5zZXJ0ZWQsIHVwZGF0ZWQsIGRlbGV0 ZWQpCisgICAgICAgIGFyZSBkZWZlcnJlZCB1bnRpbCB0aGUgdHJhbnNhY3Rpb24gZW5kcy4KKyAg ICAgICAgUmV0dXJucyA8bGl0ZXJhbD50cnVlPC9saXRlcmFsPiBpZiB0aGUgZmx1c2ggd2FzIHN1 Y2Nlc3NmdWxseQorICAgICAgICB0cmlnZ2VyZWQsIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFsPiBv dGhlcndpc2UuCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGZ1 bmN0aW9uIGlzIHJlc3RyaWN0ZWQgdG8gc3VwZXJ1c2VycyBieSBkZWZhdWx0LCBidXQgb3RoZXIg dXNlcnMKKyAgICAgICAgY2FuIGJlIGdyYW50ZWQgRVhFQ1VURSB0byBydW4gdGhlIGZ1bmN0aW9u LgorICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAgPC9yb3c+CisKICAgICAgIDxyb3c+CiAg ICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2ln bmF0dXJlIj4KICAgICAgICAgPGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvYXV0b3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVt LmMKaW5kZXggYTVhOGRiMmZmODguLmM1ZmRkZjc1ZGFiIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1 dG92YWN1dW0uYwpAQCAtODI1LDYgKzgyNSw5IEBAIFByb2Nlc3NBdXRvVmFjTGF1bmNoZXJJbnRl cnJ1cHRzKHZvaWQpCiAJaWYgKExvZ01lbW9yeUNvbnRleHRQZW5kaW5nKQogCQlQcm9jZXNzTG9n TWVtb3J5Q29udGV4dEludGVycnVwdCgpOwogCisJaWYgKFJlcG9ydEFueXRpbWVTdGF0c1BlbmRp bmcpCisJCVByb2Nlc3NSZXBvcnRBbnl0aW1lU3RhdHNJbnRlcnJ1cHQoKTsKKwogCS8qIFByb2Nl c3Mgc2ludmFsIGNhdGNodXAgaW50ZXJydXB0cyB0aGF0IGhhcHBlbmVkIHdoaWxlIHNsZWVwaW5n ICovCiAJUHJvY2Vzc0NhdGNodXBJbnRlcnJ1cHQoKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2No ZWNrcG9pbnRlci5jCmluZGV4IDA4NzEyMGRiMDkwLi44NzRjY2ViMzk3MCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYworKysgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2NoZWNrcG9pbnRlci5jCkBAIC02OTQsNiArNjk0LDkgQEAgUHJvY2Vzc0NoZWNr cG9pbnRlckludGVycnVwdHModm9pZCkKIAkvKiBQZXJmb3JtIGxvZ2dpbmcgb2YgbWVtb3J5IGNv bnRleHRzIG9mIHRoaXMgcHJvY2VzcyAqLwogCWlmIChMb2dNZW1vcnlDb250ZXh0UGVuZGluZykK IAkJUHJvY2Vzc0xvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQoKTsKKworCWlmIChSZXBvcnRBbnl0 aW1lU3RhdHNQZW5kaW5nKQorCQlQcm9jZXNzUmVwb3J0QW55dGltZVN0YXRzSW50ZXJydXB0KCk7 CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2ludGVycnVwdC5j IGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9pbnRlcnJ1cHQuYwppbmRleCBhMmMwZmYwMTJjNS4u NGUwOWU5M2Y4ZGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvaW50ZXJydXB0 LmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9pbnRlcnJ1cHQuYwpAQCAtMTcsNiArMTcs NyBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5j bHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNs dWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKQEAgLTQ4LDYg KzQ5LDkgQEAgUHJvY2Vzc01haW5Mb29wSW50ZXJydXB0cyh2b2lkKQogCS8qIFBlcmZvcm0gbG9n Z2luZyBvZiBtZW1vcnkgY29udGV4dHMgb2YgdGhpcyBwcm9jZXNzICovCiAJaWYgKExvZ01lbW9y eUNvbnRleHRQZW5kaW5nKQogCQlQcm9jZXNzTG9nTWVtb3J5Q29udGV4dEludGVycnVwdCgpOwor CisJaWYgKFJlcG9ydEFueXRpbWVTdGF0c1BlbmRpbmcpCisJCVByb2Nlc3NSZXBvcnRBbnl0aW1l U3RhdHNJbnRlcnJ1cHQoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvcGdhcmNoLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jCmluZGV4IDBm MjA3YWMwMzU2Li5kODNhNWZkYTg2MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9wZ2FyY2guYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jCkBAIC04NzAs NiArODcwLDkgQEAgUHJvY2Vzc1BnQXJjaEludGVycnVwdHModm9pZCkKIAlpZiAoTG9nTWVtb3J5 Q29udGV4dFBlbmRpbmcpCiAJCVByb2Nlc3NMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CiAK KwlpZiAoUmVwb3J0QW55dGltZVN0YXRzUGVuZGluZykKKwkJUHJvY2Vzc1JlcG9ydEFueXRpbWVT dGF0c0ludGVycnVwdCgpOworCiAJaWYgKENvbmZpZ1JlbG9hZFBlbmRpbmcpCiAJewogCQljaGFy CSAgICphcmNoaXZlTGliID0gcHN0cmR1cChYTG9nQXJjaGl2ZUxpYnJhcnkpOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zdGFydHVwLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL3N0YXJ0dXAuYwppbmRleCBiNDZiYWM2ODFmZS4uNGE1NTM0YThmOWIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1cC5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvc3RhcnR1cC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hsb2d1 dGlscy5oIgogI2luY2x1ZGUgImxpYnBxL3Bxc2lnbmFsLmgiCiAjaW5jbHVkZSAibWlzY2FkbWlu LmgiCisjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXhwcm9jZXNz LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9zdGFydHVwLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9p cGMuaCIKQEAgLTE5Miw2ICsxOTMsOSBAQCBQcm9jZXNzU3RhcnR1cFByb2NJbnRlcnJ1cHRzKHZv aWQpCiAJLyogUGVyZm9ybSBsb2dnaW5nIG9mIG1lbW9yeSBjb250ZXh0cyBvZiB0aGlzIHByb2Nl c3MgKi8KIAlpZiAoTG9nTWVtb3J5Q29udGV4dFBlbmRpbmcpCiAJCVByb2Nlc3NMb2dNZW1vcnlD b250ZXh0SW50ZXJydXB0KCk7CisKKwlpZiAoUmVwb3J0QW55dGltZVN0YXRzUGVuZGluZykKKwkJ UHJvY2Vzc1JlcG9ydEFueXRpbWVTdGF0c0ludGVycnVwdCgpOwogfQogCiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jIGIvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci93YWxzdW1tYXJpemVyLmMKaW5kZXggNGYxMmVhZjJjODUuLmIxMjM5Y2JiMDdmIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYworKysgYi9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYwpAQCAtODc2LDYgKzg3Niw5IEBA IFByb2Nlc3NXYWxTdW1tYXJpemVySW50ZXJydXB0cyh2b2lkKQogCS8qIFBlcmZvcm0gbG9nZ2lu ZyBvZiBtZW1vcnkgY29udGV4dHMgb2YgdGhpcyBwcm9jZXNzICovCiAJaWYgKExvZ01lbW9yeUNv bnRleHRQZW5kaW5nKQogCQlQcm9jZXNzTG9nTWVtb3J5Q29udGV4dEludGVycnVwdCgpOworCisJ aWYgKFJlcG9ydEFueXRpbWVTdGF0c1BlbmRpbmcpCisJCVByb2Nlc3NSZXBvcnRBbnl0aW1lU3Rh dHNJbnRlcnJ1cHQoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL3Byb2NzaWduYWwuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwpp bmRleCAyNjRlNGMyMmNhNi4uNDAwMjNhYzk4ODggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3Byb2NzaWduYWwuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9j c2lnbmFsLmMKQEAgLTcxMSw2ICs3MTEsOSBAQCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxlcihT SUdOQUxfQVJHUykKIAlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfUkVQQUNLX01FU1NBR0Up KQogCQlIYW5kbGVSZXBhY2tNZXNzYWdlSW50ZXJydXB0KCk7CiAKKwlpZiAoQ2hlY2tQcm9jU2ln bmFsKFBST0NTSUdfUkVQT1JUX0FOWVRJTUVfU1RBVFMpKQorCQlIYW5kbGVSZXBvcnRBbnl0aW1l U3RhdHNJbnRlcnJ1cHQoKTsKKwogCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19TTE9UU1lO Q19NRVNTQUdFKSkKIAkJSGFuZGxlU2xvdFN5bmNNZXNzYWdlSW50ZXJydXB0KCk7CiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9z dGdyZXMuYwppbmRleCBkYmVmNzM0YTkzZi4uZGJjYTM3MmEzZjEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMK QEAgLTM2MDksNiArMzYwOSw5IEBAIFByb2Nlc3NJbnRlcnJ1cHRzKHZvaWQpCiAJaWYgKExvZ01l bW9yeUNvbnRleHRQZW5kaW5nKQogCQlQcm9jZXNzTG9nTWVtb3J5Q29udGV4dEludGVycnVwdCgp OwogCisJaWYgKFJlcG9ydEFueXRpbWVTdGF0c1BlbmRpbmcpCisJCVByb2Nlc3NSZXBvcnRBbnl0 aW1lU3RhdHNJbnRlcnJ1cHQoKTsKKwogCWlmIChQYXJhbGxlbEFwcGx5TWVzc2FnZVBlbmRpbmcp CiAJCVByb2Nlc3NQYXJhbGxlbEFwcGx5TWVzc2FnZXMoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0LmMgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0 eS9wZ3N0YXQuYwppbmRleCBiNjdkYTg4YzdkYy4uOWI1ZDliZjA5Y2IgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FjdGl2aXR5L3Bnc3RhdC5jCkBAIC0xMDYsNiArMTA2LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vz cy94YWN0LmgiCiAjaW5jbHVkZSAibGliL2RzaGFzaC5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRl ICJzdG9yYWdlL2lwYy5oIgpAQCAtODQ1LDYgKzg0Niw1NyBAQCBwZ3N0YXRfZm9yY2VfbmV4dF9m bHVzaCh2b2lkKQogCXBnU3RhdEZvcmNlTmV4dEZsdXNoID0gdHJ1ZTsKIH0KIAorLyoKKyAqIElt bWVkaWF0ZWx5IGZsdXNoIGFsbCBwZW5kaW5nIHN0YXRpc3RpY3MgZW50cmllcyB0byBzaGFyZWQg bWVtb3J5LgorICoKKyAqIFVubGlrZSBwZ3N0YXRfcmVwb3J0X3N0YXQoKSwgdGhpcyBjYW4gYmUg Y2FsbGVkIGFueXRpbWUsIGluY2x1ZGluZworICogd2l0aGluIGEgdHJhbnNhY3Rpb24uCisgKi8K K3ZvaWQKK3Bnc3RhdF9yZXBvcnRfYW55dGltZV9zdGF0KHZvaWQpCit7CisJcGdzdGF0X2ZsdXNo X3BlbmRpbmdfZW50cmllcyhmYWxzZSk7CisKKwlmb3IgKFBnU3RhdF9LaW5kIGtpbmQgPSBQR1NU QVRfS0lORF9NSU47IGtpbmQgPD0gUEdTVEFUX0tJTkRfTUFYOyBraW5kKyspCisJeworCQljb25z dCBQZ1N0YXRfS2luZEluZm8gKmtpbmRfaW5mbyA9IHBnc3RhdF9nZXRfa2luZF9pbmZvKGtpbmQp OworCisJCWlmICgha2luZF9pbmZvIHx8ICFraW5kX2luZm8tPmZsdXNoX3N0YXRpY19jYikKKwkJ CWNvbnRpbnVlOworCisJCWtpbmRfaW5mby0+Zmx1c2hfc3RhdGljX2NiKGZhbHNlKTsKKwl9Cit9 CisKKy8qCisgKiBIYW5kbGVSZXBvcnRBbnl0aW1lU3RhdHNJbnRlcnJ1cHQKKyAqCQlIYW5kbGUg cmVjZWlwdCBvZiBhbiBpbnRlcnJ1cHQgcmVxdWVzdGluZyBhbiBhbnl0aW1lIHN0YXRzIHJlcG9y dC4KKyAqCisgKiBBbGwgdGhlIGFjdHVhbCB3b3JrIGlzIGRlZmVycmVkIHRvIFByb2Nlc3NSZXBv cnRBbnl0aW1lU3RhdHNJbnRlcnJ1cHQoKSwKKyAqIGJlY2F1c2Ugd2UgY2Fubm90IHNhZmVseSBh Y3F1aXJlIGxvY2tzIGluc2lkZSB0aGUgc2lnbmFsIGhhbmRsZXIuCisgKi8KK3ZvaWQKK0hhbmRs ZVJlcG9ydEFueXRpbWVTdGF0c0ludGVycnVwdCh2b2lkKQoreworCUludGVycnVwdFBlbmRpbmcg PSB0cnVlOworCVJlcG9ydEFueXRpbWVTdGF0c1BlbmRpbmcgPSB0cnVlOworCS8qIGxhdGNoIHdp bGwgYmUgc2V0IGJ5IHByb2NzaWduYWxfc2lndXNyMV9oYW5kbGVyICovCit9CisKKy8qCisgKiBQ cm9jZXNzUmVwb3J0QW55dGltZVN0YXRzSW50ZXJydXB0CisgKgkJUmVwb3J0IGFsbCBwZW5kaW5n IHN0YXRpc3RpY3MgdG8gc2hhcmVkIG1lbW9yeS4KKyAqCisgKiBDYWxsZWQgZnJvbSBQcm9jZXNz SW50ZXJydXB0cygpIHdoZW4gUmVwb3J0QW55dGltZVN0YXRzUGVuZGluZyBpcyBzZXQuCisgKi8K K3ZvaWQKK1Byb2Nlc3NSZXBvcnRBbnl0aW1lU3RhdHNJbnRlcnJ1cHQodm9pZCkKK3sKKwlSZXBv cnRBbnl0aW1lU3RhdHNQZW5kaW5nID0gZmFsc2U7CisKKwlwZ3N0YXRfcmVwb3J0X2FueXRpbWVf c3RhdCgpOworfQorCiAvKgogICogT25seSBmb3IgdXNlIGJ5IHBnc3RhdF9yZXNldF9jb3VudGVy cygpCiAgKi8KQEAgLTE0MTQsNyArMTQ2NiwxNCBAQCBwZ3N0YXRfZmx1c2hfcGVuZGluZ19lbnRy aWVzKGJvb2wgbm93YWl0KQogCQkvKiBmbHVzaCB0aGUgc3RhdHMsIGlmIHBvc3NpYmxlICovCiAJ CWRpZF9mbHVzaCA9IGtpbmRfaW5mby0+Zmx1c2hfcGVuZGluZ19jYihlbnRyeV9yZWYsIG5vd2Fp dCk7CiAKLQkJQXNzZXJ0KGRpZF9mbHVzaCB8fCBub3dhaXQpOworCQkvKgorCQkgKiBXaGVuIG5v d2FpdCBpcyBmYWxzZSB3ZSBibG9jayBmb3IgdGhlIGxvY2ssIHNvIHRoZSBvbmx5IHJlYXNvbiBh CisJCSAqIGZsdXNoX3BlbmRpbmdfY2IgY2FuIGxlZ2l0aW1hdGVseSByZXR1cm4gZmFsc2UgaXMg dGhhdCB0aGUgZW50cnkKKwkJICogaGFzIGFjdGl2ZSB0cmFuc2FjdGlvbiBzdGF0ZSB0aGF0IG11 c3Qgbm90IGJlIGZyZWVkIHlldCAoZS5nLgorCQkgKiByZWxhdGlvbiBzdGF0cyB3aXRoIHRyYW5z ICE9IE5VTEwpLiAgVGhhdCBzaXR1YXRpb24gb25seSBhcmlzZXMKKwkJICogbWlkLXRyYW5zYWN0 aW9uLCBoZW5jZSB0aGUgSXNUcmFuc2FjdGlvbk9yVHJhbnNhY3Rpb25CbG9jaygpIGNoZWNrLgor CQkgKi8KKwkJQXNzZXJ0KGRpZF9mbHVzaCB8fCBub3dhaXQgfHwgSXNUcmFuc2FjdGlvbk9yVHJh bnNhY3Rpb25CbG9jaygpKTsKIAogCQkvKiBkZXRlcm1pbmUgbmV4dCBlbnRyeSwgYmVmb3JlIGRl bGV0aW5nIHRoZSBwZW5kaW5nIGVudHJ5ICovCiAJCWlmIChkbGlzdF9oYXNfbmV4dCgmcGdTdGF0 UGVuZGluZywgY3VyKSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bn c3RhdF9yZWxhdGlvbi5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X3JlbGF0 aW9uLmMKaW5kZXggYjJjYTI4ZjgzYmEuLjg0ODY4N2E5ZjdlIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfcmVsYXRpb24uYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hY3Rpdml0eS9wZ3N0YXRfcmVsYXRpb24uYwpAQCAtODI4LDY0ICs4MjgsNzYgQEAgcGdz dGF0X3JlbGF0aW9uX2ZsdXNoX2NiKFBnU3RhdF9FbnRyeVJlZiAqZW50cnlfcmVmLCBib29sIG5v d2FpdCkKIAogCS8qCiAJICogSWdub3JlIGVudHJpZXMgdGhhdCBkaWRuJ3QgYWNjdW11bGF0ZSBh bnkgYWN0dWFsIGNvdW50cywgc3VjaCBhcwotCSAqIGluZGV4ZXMgdGhhdCB3ZXJlIG9wZW5lZCBi eSB0aGUgcGxhbm5lciBidXQgbm90IHVzZWQuCisJICogaW5kZXhlcyB0aGF0IHdlcmUgb3BlbmVk IGJ5IHRoZSBwbGFubmVyIGJ1dCBub3QgdXNlZC4gIFRoZSBlbnRyeSBjYW5ub3QKKwkgKiBiZSBm cmVlZCBpZiB0aGVyZSBpcyBhY3RpdmUgdHJhbnNhY3Rpb24gc3RhdGUsIHNpbmNlCisJICogQXRF T1hhY3RfUGdTdGF0X1JlbGF0aW9ucyB3aWxsIHN0aWxsIG1lcmdlIGNvdW50ZXJzIGludG8gaXQu CiAJICovCiAJaWYgKHBnX21lbW9yeV9pc19hbGxfemVyb3MoJmxzdGF0cy0+Y291bnRzLAogCQkJ CQkJCSAgIHNpemVvZihzdHJ1Y3QgUGdTdGF0X1RhYmxlQ291bnRzKSkpCi0JCXJldHVybiB0cnVl OworCQlyZXR1cm4gKGxzdGF0cy0+dHJhbnMgPT0gTlVMTCk7CiAKIAlpZiAoIXBnc3RhdF9sb2Nr X2VudHJ5KGVudHJ5X3JlZiwgbm93YWl0KSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JLyogYWRkIHRo ZSB2YWx1ZXMgdG8gdGhlIHNoYXJlZCBlbnRyeS4gKi8KKwkvKiBVcGRhdGUgY291bnRlcnMgdGhh dCBhcmUgYWx3YXlzIHNhZmUgdG8gZmx1c2guICovCiAJdGFiZW50cnkgPSAmc2h0YWJzdGF0cy0+ c3RhdHM7CiAKIAl0YWJlbnRyeS0+bnVtc2NhbnMgKz0gbHN0YXRzLT5jb3VudHMubnVtc2NhbnM7 CiAJaWYgKGxzdGF0cy0+Y291bnRzLm51bXNjYW5zKQogCXsKLQkJVGltZXN0YW1wVHogdCA9IEdl dEN1cnJlbnRUcmFuc2FjdGlvblN0b3BUaW1lc3RhbXAoKTsKKwkJVGltZXN0YW1wVHogdCA9IElz VHJhbnNhY3Rpb25PclRyYW5zYWN0aW9uQmxvY2soKSA/CisJCQlHZXRDdXJyZW50U3RhdGVtZW50 U3RhcnRUaW1lc3RhbXAoKSA6CisJCQlHZXRDdXJyZW50VHJhbnNhY3Rpb25TdG9wVGltZXN0YW1w KCk7CiAKIAkJaWYgKHQgPiB0YWJlbnRyeS0+bGFzdHNjYW4pCiAJCQl0YWJlbnRyeS0+bGFzdHNj YW4gPSB0OwogCX0KIAl0YWJlbnRyeS0+dHVwbGVzX3JldHVybmVkICs9IGxzdGF0cy0+Y291bnRz LnR1cGxlc19yZXR1cm5lZDsKIAl0YWJlbnRyeS0+dHVwbGVzX2ZldGNoZWQgKz0gbHN0YXRzLT5j b3VudHMudHVwbGVzX2ZldGNoZWQ7Ci0JdGFiZW50cnktPnR1cGxlc19pbnNlcnRlZCArPSBsc3Rh dHMtPmNvdW50cy50dXBsZXNfaW5zZXJ0ZWQ7Ci0JdGFiZW50cnktPnR1cGxlc191cGRhdGVkICs9 IGxzdGF0cy0+Y291bnRzLnR1cGxlc191cGRhdGVkOwotCXRhYmVudHJ5LT50dXBsZXNfZGVsZXRl ZCArPSBsc3RhdHMtPmNvdW50cy50dXBsZXNfZGVsZXRlZDsKIAl0YWJlbnRyeS0+dHVwbGVzX2hv dF91cGRhdGVkICs9IGxzdGF0cy0+Y291bnRzLnR1cGxlc19ob3RfdXBkYXRlZDsKIAl0YWJlbnRy eS0+dHVwbGVzX25ld3BhZ2VfdXBkYXRlZCArPSBsc3RhdHMtPmNvdW50cy50dXBsZXNfbmV3cGFn ZV91cGRhdGVkOworCXRhYmVudHJ5LT5ibG9ja3NfZmV0Y2hlZCArPSBsc3RhdHMtPmNvdW50cy5i bG9ja3NfZmV0Y2hlZDsKKwl0YWJlbnRyeS0+YmxvY2tzX2hpdCArPSBsc3RhdHMtPmNvdW50cy5i bG9ja3NfaGl0OwogCiAJLyoKLQkgKiBJZiB0YWJsZSB3YXMgdHJ1bmNhdGVkL2Ryb3BwZWQsIGZp cnN0IHJlc2V0IHRoZSBsaXZlL2RlYWQgY291bnRlcnMuCisJICogVXBkYXRlIGNvdW50ZXJzIHRo YXQgYXJlIG9ubHkgc2FmZSB0byBmbHVzaCBvdXRzaWRlIG9mIGEgdHJhbnNhY3Rpb24KKwkgKiB0 aGF0IGhhcyBtb2RpZmllZCB0aGlzIHJlbGF0aW9uLgogCSAqLwotCWlmIChsc3RhdHMtPmNvdW50 cy50cnVuY2Ryb3BwZWQpCisJaWYgKGxzdGF0cy0+dHJhbnMgPT0gTlVMTCkKIAl7Ci0JCXRhYmVu dHJ5LT5saXZlX3R1cGxlcyA9IDA7Ci0JCXRhYmVudHJ5LT5kZWFkX3R1cGxlcyA9IDA7Ci0JCXRh YmVudHJ5LT5pbnNfc2luY2VfdmFjdXVtID0gMDsKLQl9CisJCXRhYmVudHJ5LT50dXBsZXNfaW5z ZXJ0ZWQgKz0gbHN0YXRzLT5jb3VudHMudHVwbGVzX2luc2VydGVkOworCQl0YWJlbnRyeS0+dHVw bGVzX3VwZGF0ZWQgKz0gbHN0YXRzLT5jb3VudHMudHVwbGVzX3VwZGF0ZWQ7CisJCXRhYmVudHJ5 LT50dXBsZXNfZGVsZXRlZCArPSBsc3RhdHMtPmNvdW50cy50dXBsZXNfZGVsZXRlZDsKIAotCXRh YmVudHJ5LT5saXZlX3R1cGxlcyArPSBsc3RhdHMtPmNvdW50cy5kZWx0YV9saXZlX3R1cGxlczsK LQl0YWJlbnRyeS0+ZGVhZF90dXBsZXMgKz0gbHN0YXRzLT5jb3VudHMuZGVsdGFfZGVhZF90dXBs ZXM7Ci0JdGFiZW50cnktPm1vZF9zaW5jZV9hbmFseXplICs9IGxzdGF0cy0+Y291bnRzLmNoYW5n ZWRfdHVwbGVzOworCQkvKgorCQkgKiBJZiB0YWJsZSB3YXMgdHJ1bmNhdGVkL2Ryb3BwZWQsIGZp cnN0IHJlc2V0IHRoZSBsaXZlL2RlYWQgY291bnRlcnMuCisJCSAqLworCQlpZiAobHN0YXRzLT5j b3VudHMudHJ1bmNkcm9wcGVkKQorCQl7CisJCQl0YWJlbnRyeS0+bGl2ZV90dXBsZXMgPSAwOwor CQkJdGFiZW50cnktPmRlYWRfdHVwbGVzID0gMDsKKwkJCXRhYmVudHJ5LT5pbnNfc2luY2VfdmFj dXVtID0gMDsKKwkJfQogCi0JLyoKLQkgKiBVc2luZyB0dXBsZXNfaW5zZXJ0ZWQgdG8gdXBkYXRl IGluc19zaW5jZV92YWN1dW0gZG9lcyBtZWFuIHRoYXQgd2UnbGwKLQkgKiB0cmFjayBhYm9ydGVk IGluc2VydHMgdG9vLiAgVGhpcyBpc24ndCBpZGVhbCwgYnV0IG90aGVyd2lzZSBwcm9iYWJseQot CSAqIG5vdCB3b3J0aCBhZGRpbmcgYW4gZXh0cmEgZmllbGQgZm9yLiAgSXQgbWF5IGp1c3QgYW1v dW50IHRvIGF1dG92YWN1dW1zCi0JICogdHJpZ2dlcmluZyBmb3IgaW5zZXJ0cyBtb3JlIG9mdGVu IHRoYW4gdGhleSBtYXliZSBzaG91bGQsIHdoaWNoIGlzCi0JICogcHJvYmFibHkgbm90IGdvaW5n IHRvIGJlIGNvbW1vbiBlbm91Z2ggdG8gYmUgdG9vIGNvbmNlcm5lZCBhYm91dCBoZXJlLgotCSAq LwotCXRhYmVudHJ5LT5pbnNfc2luY2VfdmFjdXVtICs9IGxzdGF0cy0+Y291bnRzLnR1cGxlc19p bnNlcnRlZDsKKwkJdGFiZW50cnktPmxpdmVfdHVwbGVzICs9IGxzdGF0cy0+Y291bnRzLmRlbHRh X2xpdmVfdHVwbGVzOworCQl0YWJlbnRyeS0+ZGVhZF90dXBsZXMgKz0gbHN0YXRzLT5jb3VudHMu ZGVsdGFfZGVhZF90dXBsZXM7CisJCXRhYmVudHJ5LT5tb2Rfc2luY2VfYW5hbHl6ZSArPSBsc3Rh dHMtPmNvdW50cy5jaGFuZ2VkX3R1cGxlczsKIAotCXRhYmVudHJ5LT5ibG9ja3NfZmV0Y2hlZCAr PSBsc3RhdHMtPmNvdW50cy5ibG9ja3NfZmV0Y2hlZDsKLQl0YWJlbnRyeS0+YmxvY2tzX2hpdCAr PSBsc3RhdHMtPmNvdW50cy5ibG9ja3NfaGl0OworCQkvKgorCQkgKiBVc2luZyB0dXBsZXNfaW5z ZXJ0ZWQgdG8gdXBkYXRlIGluc19zaW5jZV92YWN1dW0gZG9lcyBtZWFuIHRoYXQKKwkJICogd2Un bGwgdHJhY2sgYWJvcnRlZCBpbnNlcnRzIHRvby4gIFRoaXMgaXNuJ3QgaWRlYWwsIGJ1dCBvdGhl cndpc2UKKwkJICogcHJvYmFibHkgbm90IHdvcnRoIGFkZGluZyBhbiBleHRyYSBmaWVsZCBmb3Iu ICBJdCBtYXkganVzdCBhbW91bnQKKwkJICogdG8gYXV0b3ZhY3V1bXMgdHJpZ2dlcmluZyBmb3Ig aW5zZXJ0cyBtb3JlIG9mdGVuIHRoYW4gdGhleSBtYXliZQorCQkgKiBzaG91bGQsIHdoaWNoIGlz IHByb2JhYmx5IG5vdCBnb2luZyB0byBiZSBjb21tb24gZW5vdWdoIHRvIGJlIHRvbworCQkgKiBj b25jZXJuZWQgYWJvdXQgaGVyZS4KKwkJICovCisJCXRhYmVudHJ5LT5pbnNfc2luY2VfdmFjdXVt ICs9IGxzdGF0cy0+Y291bnRzLnR1cGxlc19pbnNlcnRlZDsKIAotCS8qIENsYW1wIGxpdmVfdHVw bGVzIGluIGNhc2Ugb2YgbmVnYXRpdmUgZGVsdGFfbGl2ZV90dXBsZXMgKi8KLQl0YWJlbnRyeS0+ bGl2ZV90dXBsZXMgPSBNYXgodGFiZW50cnktPmxpdmVfdHVwbGVzLCAwKTsKLQkvKiBMaWtld2lz ZSBmb3IgZGVhZF90dXBsZXMgKi8KLQl0YWJlbnRyeS0+ZGVhZF90dXBsZXMgPSBNYXgodGFiZW50 cnktPmRlYWRfdHVwbGVzLCAwKTsKKwkJLyogQ2xhbXAgbGl2ZV90dXBsZXMgaW4gY2FzZSBvZiBu ZWdhdGl2ZSBkZWx0YV9saXZlX3R1cGxlcyAqLworCQl0YWJlbnRyeS0+bGl2ZV90dXBsZXMgPSBN YXgodGFiZW50cnktPmxpdmVfdHVwbGVzLCAwKTsKKwkJLyogTGlrZXdpc2UgZm9yIGRlYWRfdHVw bGVzICovCisJCXRhYmVudHJ5LT5kZWFkX3R1cGxlcyA9IE1heCh0YWJlbnRyeS0+ZGVhZF90dXBs ZXMsIDApOworCX0KIAogCXBnc3RhdF91bmxvY2tfZW50cnkoZW50cnlfcmVmKTsKIApAQCAtODkz LDEzICs5MDUsMzAgQEAgcGdzdGF0X3JlbGF0aW9uX2ZsdXNoX2NiKFBnU3RhdF9FbnRyeVJlZiAq ZW50cnlfcmVmLCBib29sIG5vd2FpdCkKIAlkYmVudHJ5ID0gcGdzdGF0X3ByZXBfZGF0YWJhc2Vf cGVuZGluZyhkYm9pZCk7CiAJZGJlbnRyeS0+dHVwbGVzX3JldHVybmVkICs9IGxzdGF0cy0+Y291 bnRzLnR1cGxlc19yZXR1cm5lZDsKIAlkYmVudHJ5LT50dXBsZXNfZmV0Y2hlZCArPSBsc3RhdHMt PmNvdW50cy50dXBsZXNfZmV0Y2hlZDsKLQlkYmVudHJ5LT50dXBsZXNfaW5zZXJ0ZWQgKz0gbHN0 YXRzLT5jb3VudHMudHVwbGVzX2luc2VydGVkOwotCWRiZW50cnktPnR1cGxlc191cGRhdGVkICs9 IGxzdGF0cy0+Y291bnRzLnR1cGxlc191cGRhdGVkOwotCWRiZW50cnktPnR1cGxlc19kZWxldGVk ICs9IGxzdGF0cy0+Y291bnRzLnR1cGxlc19kZWxldGVkOwogCWRiZW50cnktPmJsb2Nrc19mZXRj aGVkICs9IGxzdGF0cy0+Y291bnRzLmJsb2Nrc19mZXRjaGVkOwogCWRiZW50cnktPmJsb2Nrc19o aXQgKz0gbHN0YXRzLT5jb3VudHMuYmxvY2tzX2hpdDsKIAotCXJldHVybiB0cnVlOworCWlmIChs c3RhdHMtPnRyYW5zID09IE5VTEwpCisJeworCQlkYmVudHJ5LT50dXBsZXNfaW5zZXJ0ZWQgKz0g bHN0YXRzLT5jb3VudHMudHVwbGVzX2luc2VydGVkOworCQlkYmVudHJ5LT50dXBsZXNfdXBkYXRl ZCArPSBsc3RhdHMtPmNvdW50cy50dXBsZXNfdXBkYXRlZDsKKwkJZGJlbnRyeS0+dHVwbGVzX2Rl bGV0ZWQgKz0gbHN0YXRzLT5jb3VudHMudHVwbGVzX2RlbGV0ZWQ7CisJCXJldHVybiB0cnVlOwor CX0KKworCS8qCisJICogVGhpcyBpcyBhIHBhcnRpYWwsIGluLXRyYW5zYWN0aW9uIGZsdXNoLiAg WmVybyBvdXQgdGhlIGNvdW50ZXJzIHdlCisJICogYWxyZWFkeSBmbHVzaGVkIHNvIHRoZXkgYXJl bid0IGRvdWJsZS1jb3VudGVkIG9uIHRoZSBuZXh0IGZsdXNoLgorCSAqLworCWxzdGF0cy0+Y291 bnRzLm51bXNjYW5zID0gMDsKKwlsc3RhdHMtPmNvdW50cy50dXBsZXNfcmV0dXJuZWQgPSAwOwor CWxzdGF0cy0+Y291bnRzLnR1cGxlc19mZXRjaGVkID0gMDsKKwlsc3RhdHMtPmNvdW50cy50dXBs ZXNfaG90X3VwZGF0ZWQgPSAwOworCWxzdGF0cy0+Y291bnRzLnR1cGxlc19uZXdwYWdlX3VwZGF0 ZWQgPSAwOworCWxzdGF0cy0+Y291bnRzLmJsb2Nrc19mZXRjaGVkID0gMDsKKwlsc3RhdHMtPmNv dW50cy5ibG9ja3NfaGl0ID0gMDsKKworCXJldHVybiBmYWxzZTsKIH0KIAogdm9pZApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3RhdGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvcGdzdGF0ZnVuY3MuYwppbmRleCA2ZjljOWM3MmRlNS4uZWIyMjQ5MGRjMmMgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVk ZSAicmVwbGljYXRpb24vbG9naWNhbGxhdW5jaGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9j LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3By b2NzaWduYWwuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgpAQCAtMTkyOSw2ICsxOTMwLDQ1 IEBAIHBnX3N0YXRfZm9yY2VfbmV4dF9mbHVzaChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVS Tl9WT0lEKCk7CiB9CiAKKy8qCisgKiBTaWduYWwgYSBiYWNrZW5kIHRvIHJlcG9ydCBhbGwgaXRz IHBlbmRpbmcgc3RhdGlzdGljcyB0byBzaGFyZWQgbWVtb3J5LgorICogSWYgdGhlIHRhcmdldCBp cyB0aGUgY3VycmVudCBiYWNrZW5kLCB0aGUgcmVwb3J0IGhhcHBlbnMgaW1tZWRpYXRlbHkuCisg Ki8KK0RhdHVtCitwZ19zdGF0X3JlcG9ydF9hbnl0aW1lKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJ aW50CQkJcGlkID0gUEdfR0VUQVJHX0lOVDMyKDApOworCVBHUFJPQwkgICAqcHJvYzsKKwlQcm9j TnVtYmVyCXByb2NOdW1iZXIgPSBJTlZBTElEX1BST0NfTlVNQkVSOworCisJaWYgKHBpZCA9PSBN eVByb2NQaWQpCisJeworCQlwZ3N0YXRfcmVwb3J0X2FueXRpbWVfc3RhdCgpOworCQlQR19SRVRV Uk5fQk9PTCh0cnVlKTsKKwl9CisKKwlwcm9jID0gQmFja2VuZFBpZEdldFByb2MocGlkKTsKKwlp ZiAocHJvYyA9PSBOVUxMKQorCQlwcm9jID0gQXV4aWxpYXJ5UGlkR2V0UHJvYyhwaWQpOworCisJ aWYgKHByb2MgPT0gTlVMTCkKKwl7CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJybXNnKCJQ SUQgJWQgaXMgbm90IGEgUG9zdGdyZVNRTCBzZXJ2ZXIgcHJvY2VzcyIsIHBpZCkpKTsKKwkJUEdf UkVUVVJOX0JPT0woZmFsc2UpOworCX0KKworCXByb2NOdW1iZXIgPSBHZXROdW1iZXJGcm9tUEdQ cm9jKHByb2MpOworCWlmIChTZW5kUHJvY1NpZ25hbChwaWQsIFBST0NTSUdfUkVQT1JUX0FOWVRJ TUVfU1RBVFMsIHByb2NOdW1iZXIpIDwgMCkKKwl7CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQko ZXJybXNnKCJjb3VsZCBub3Qgc2VuZCBzaWduYWwgdG8gcHJvY2VzcyAlZDogJW0iLCBwaWQpKSk7 CisJCVBHX1JFVFVSTl9CT09MKGZhbHNlKTsKKwl9CisKKwlQR19SRVRVUk5fQk9PTCh0cnVlKTsK K30KKwogCiAvKiBSZXNldCBhbGwgY291bnRlcnMgZm9yIHRoZSBjdXJyZW50IGRhdGFiYXNlICov CiBEYXR1bQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgYi9z cmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwppbmRleCBiYmQyOGQxNGQ5OS4uMWI1YjNk NTljM2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCkBAIC0zOSw2ICszOSw3IEBAIHZvbGF0 aWxlIHNpZ19hdG9taWNfdCBUcmFuc2FjdGlvblRpbWVvdXRQZW5kaW5nID0gZmFsc2U7CiB2b2xh dGlsZSBzaWdfYXRvbWljX3QgSWRsZVNlc3Npb25UaW1lb3V0UGVuZGluZyA9IGZhbHNlOwogdm9s YXRpbGUgc2lnX2F0b21pY190IFByb2NTaWduYWxCYXJyaWVyUGVuZGluZyA9IGZhbHNlOwogdm9s YXRpbGUgc2lnX2F0b21pY190IExvZ01lbW9yeUNvbnRleHRQZW5kaW5nID0gZmFsc2U7Cit2b2xh dGlsZSBzaWdfYXRvbWljX3QgUmVwb3J0QW55dGltZVN0YXRzUGVuZGluZyA9IGZhbHNlOwogdm9s YXRpbGUgc2lnX2F0b21pY190IElkbGVTdGF0c1VwZGF0ZVRpbWVvdXRQZW5kaW5nID0gZmFsc2U7 CiB2b2xhdGlsZSB1aW50MzIgSW50ZXJydXB0SG9sZG9mZkNvdW50ID0gMDsKIHZvbGF0aWxlIHVp bnQzMiBRdWVyeUNhbmNlbEhvbGRvZmZDb3VudCA9IDA7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApp bmRleCBiZTE1N2E1ZmJlOS4uNDA2NjI4MDI1YjEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApA QCAtNjIwOSw2ICs2MjA5LDEyIEBACiAgIHByb25hbWUgPT4gJ3BnX3N0YXRfZm9yY2VfbmV4dF9m bHVzaCcsIHByb2lzc3RyaWN0ID0+ICdmJywgcHJvdm9sYXRpbGUgPT4gJ3YnLAogICBwcm9wYXJh bGxlbCA9PiAncicsIHByb3JldHR5cGUgPT4gJ3ZvaWQnLCBwcm9hcmd0eXBlcyA9PiAnJywKICAg cHJvc3JjID0+ICdwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2gnIH0sCit7IG9pZCA9PiAnOTk1Mycs CisgIGRlc2NyID0+ICdzdGF0aXN0aWNzOiBmb3JjZSBmbHVzaCBvZiBwZW5kaW5nIHN0YXRzIHRv IHNoYXJlZCBtZW1vcnksIGluY2x1ZGluZyBmcm9tIHdpdGhpbiBhIHRyYW5zYWN0aW9uJywKKyAg cHJvbmFtZSA9PiAncGdfc3RhdF9yZXBvcnRfYW55dGltZScsIHByb3ZvbGF0aWxlID0+ICd2JywK KyAgcHJvcmV0dHlwZSA9PiAnYm9vbCcsIHByb2FyZ3R5cGVzID0+ICdpbnQ0JywKKyAgcHJvc3Jj ID0+ICdwZ19zdGF0X3JlcG9ydF9hbnl0aW1lJywKKyAgcHJvYWNsID0+ICd7UE9TVEdSRVM9WH0n IH0sCiB7IG9pZCA9PiAnMjI3NCcsCiAgIGRlc2NyID0+ICdzdGF0aXN0aWNzOiByZXNldCBjb2xs ZWN0ZWQgc3RhdGlzdGljcyBmb3IgY3VycmVudCBkYXRhYmFzZScsCiAgIHByb25hbWUgPT4gJ3Bn X3N0YXRfcmVzZXQnLCBwcm9pc3N0cmljdCA9PiAnZicsIHByb3ZvbGF0aWxlID0+ICd2JywKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWlu LmgKaW5kZXggN2RlMGExMTU0MDIuLjUyZTk3YjMxYjI4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9taXNjYWRtaW4uaAorKysgYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaApAQCAtOTcsNiArOTcs NyBAQCBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFRyYW5zYWN0aW9u VGltZW91dFBlbmRpbmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190 IElkbGVTZXNzaW9uVGltZW91dFBlbmRpbmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUg c2lnX2F0b21pY190IFByb2NTaWduYWxCYXJyaWVyUGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9S VCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgTG9nTWVtb3J5Q29udGV4dFBlbmRpbmc7CitleHRlcm4g UEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFJlcG9ydEFueXRpbWVTdGF0c1BlbmRp bmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVTdGF0c1Vw ZGF0ZVRpbWVvdXRQZW5kaW5nOwogCiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0 b21pY190IENoZWNrQ2xpZW50Q29ubmVjdGlvblBlbmRpbmc7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9wZ3N0YXQuaCBiL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCmluZGV4IGRmYTJlODM3NjM4Li44 N2RlZjNiMDhlMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGdzdGF0LmgKKysrIGIvc3JjL2lu Y2x1ZGUvcGdzdGF0LmgKQEAgLTU1Miw2ICs1NTIsOSBAQCBleHRlcm4gdm9pZCBwZ3N0YXRfaW5p dGlhbGl6ZSh2b2lkKTsKIC8qIEZ1bmN0aW9ucyBjYWxsZWQgZnJvbSBiYWNrZW5kcyAqLwogZXh0 ZXJuIGxvbmcgcGdzdGF0X3JlcG9ydF9zdGF0KGJvb2wgZm9yY2UpOwogZXh0ZXJuIHZvaWQgcGdz dGF0X2ZvcmNlX25leHRfZmx1c2godm9pZCk7CitleHRlcm4gdm9pZCBwZ3N0YXRfcmVwb3J0X2Fu eXRpbWVfc3RhdCh2b2lkKTsKK2V4dGVybiB2b2lkIEhhbmRsZVJlcG9ydEFueXRpbWVTdGF0c0lu dGVycnVwdCh2b2lkKTsKK2V4dGVybiB2b2lkIFByb2Nlc3NSZXBvcnRBbnl0aW1lU3RhdHNJbnRl cnJ1cHQodm9pZCk7CiAKIGV4dGVybiB2b2lkIHBnc3RhdF9yZXNldF9jb3VudGVycyh2b2lkKTsK IGV4dGVybiB2b2lkIHBnc3RhdF9yZXNldChQZ1N0YXRfS2luZCBraW5kLCBPaWQgZGJvaWQsIHVp bnQ2NCBvYmppZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCmluZGV4IGFhYTE1OGJmZDY2Li5h MTg0ZDQ0OWViYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgK KysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgKQEAgLTM4LDYgKzM4LDggQEAg dHlwZWRlZiBlbnVtCiAJUFJPQ1NJR19QQVJBTExFTF9BUFBMWV9NRVNTQUdFLCAvKiBNZXNzYWdl IGZyb20gcGFyYWxsZWwgYXBwbHkgd29ya2VycyAqLwogCVBST0NTSUdfU0xPVFNZTkNfTUVTU0FH RSwJLyogYXNrIHNsb3Qgc3luY2hyb25pemF0aW9uIHRvIHN0b3AgKi8KIAlQUk9DU0lHX1JFUEFD S19NRVNTQUdFLAkJLyogTWVzc2FnZSBmcm9tIHJlcGFjayB3b3JrZXIgKi8KKwlQUk9DU0lHX1JF UE9SVF9BTllUSU1FX1NUQVRTLAkvKiBhc2sgYmFja2VuZCB0byByZXBvcnQgYW55dGltZQorCQkJ CQkJCQkJICogc3RhdGlzdGljcyAqLwogCVBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1QsCS8qIGJh Y2tlbmQgaXMgYmxvY2tpbmcgcmVjb3ZlcnksIGNoZWNrCiAJCQkJCQkJCSAqIFBHUFJPQy0+cGVu ZGluZ1JlY292ZXJ5Q29uZmxpY3RzIGZvciB0aGUKIAkJCQkJCQkJICogcmVhc29uICovCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N0YXRzLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvc3RhdHMub3V0CmluZGV4IGM1NTFhYmIxMTc4Li42NmI2ODM5NjVhNiAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0cy5vdXQKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdGF0cy5vdXQKQEAgLTIwNDAsNCArMjA0MCwxMjYgQEAg U0VMRUNUIGZhc3RwYXRoX2V4Y2VlZGVkID4gOmZhc3RwYXRoX2V4Y2VlZGVkX2JlZm9yZSBGUk9N IHBnX3N0YXRfbG9jayBXSEVSRSBsb2MKICgxIHJvdykKIAogRFJPUCBUQUJMRSBwYXJ0X3Rlc3Q7 CistLQorLS0gVGVzdCBwZ19zdGF0X3JlcG9ydF9hbnl0aW1lCistLQorQ1JFQVRFIFRBQkxFIHBh cnRpYWxfZmx1c2goaWQgaW50KTsKK0lOU0VSVCBJTlRPIHBhcnRpYWxfZmx1c2ggVkFMVUVTICgx KSwgKDIpLCAoMyk7CitTRUxFQ1QgcGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNoKCk7CisgcGdfc3Rh dF9mb3JjZV9uZXh0X2ZsdXNoIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJv dykKKworLS0gUmVjb3JkIGNvdW50ZXJzIGJlZm9yZSB0aGUgZXhwbGljaXQgdHJhbnNhY3Rpb24K K1NFTEVDVCBzZXFfc2NhbiBBUyBzZXFfc2Nhbl9iZWZvcmUsCisgICAgICAgc2VxX3R1cF9yZWFk IEFTIHNlcV90dXBfcmVhZF9iZWZvcmUsCisgICAgICAgbl90dXBfaW5zIEFTIG5fdHVwX2luc19i ZWZvcmUsCisgICAgICAgbl90dXBfdXBkIEFTIG5fdHVwX3VwZF9iZWZvcmUKKyAgRlJPTSBwZ19z dGF0X3VzZXJfdGFibGVzIFdIRVJFIHJlbG5hbWUgPSAncGFydGlhbF9mbHVzaCcgXGdzZXQKK0JF R0lOOworU0VUIExPQ0FMIHN0YXRzX2ZldGNoX2NvbnNpc3RlbmN5ID0gbm9uZTsKKy0tIEdlbmVy YXRlIGJvdGggdHJhbnNhY3Rpb24tc2FmZSBhbmQgdHJhbnNhY3Rpb24tdW5zYWZlIGNvdW50ZXJz LgorU0VMRUNUIGNvdW50KCopIEZST00gcGFydGlhbF9mbHVzaDsKKyBjb3VudCAKKy0tLS0tLS0K KyAgICAgMworKDEgcm93KQorCitJTlNFUlQgSU5UTyBwYXJ0aWFsX2ZsdXNoIFZBTFVFUyAoNCks ICg1KTsKK1VQREFURSBwYXJ0aWFsX2ZsdXNoIFNFVCBpZCA9IGlkIFdIRVJFIGlkID0gMTsKKy0t IEZsdXNoIG1pZC10cmFuc2FjdGlvbgorU0VMRUNUIHBnX3N0YXRfcmVwb3J0X2FueXRpbWUocGdf YmFja2VuZF9waWQoKSk7CisgcGdfc3RhdF9yZXBvcnRfYW55dGltZSAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworLS0gVHJhbnNhY3Rpb24tc2FmZSBjb3VudGVycyBz aG91bGQgYmUgdmlzaWJsZSBtaWQtdHJhbnNhY3Rpb24uCistLSBUcmFuc2FjdGlvbi11bnNhZmUg Y291bnRlcnMgKGlucywgdXBkKSBzaG91bGQgTk9UIGJlIGZsdXNoZWQgeWV0LAorLS0gc2luY2Ug dGhlaXIgZmluYWwgdmFsdWVzIGRlcGVuZCBvbiB3aGV0aGVyIHRoZSB0cmFuc2FjdGlvbiBjb21t aXRzLgorU0VMRUNUIHNlcV9zY2FuIC0gOnNlcV9zY2FuX2JlZm9yZSBBUyBzZXFfc2Nhbl9kZWx0 YSwKKyAgICAgICBzZXFfdHVwX3JlYWQgLSA6c2VxX3R1cF9yZWFkX2JlZm9yZSBBUyBzZXFfdHVw X3JlYWRfZGVsdGEsCisgICAgICAgbl90dXBfaW5zIC0gOm5fdHVwX2luc19iZWZvcmUgQVMgbl90 dXBfaW5zX2RlbHRhLAorICAgICAgIG5fdHVwX3VwZCAtIDpuX3R1cF91cGRfYmVmb3JlIEFTIG5f dHVwX3VwZF9kZWx0YQorICBGUk9NIHBnX3N0YXRfdXNlcl90YWJsZXMgV0hFUkUgcmVsbmFtZSA9 ICdwYXJ0aWFsX2ZsdXNoJzsKKyBzZXFfc2Nhbl9kZWx0YSB8IHNlcV90dXBfcmVhZF9kZWx0YSB8 IG5fdHVwX2luc19kZWx0YSB8IG5fdHVwX3VwZF9kZWx0YSAKKy0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0KKyAg ICAgICAgICAgICAgMiB8ICAgICAgICAgICAgICAgICAgOCB8ICAgICAgICAgICAgICAgMCB8ICAg ICAgICAgICAgICAgMAorKDEgcm93KQorCistLSBHZW5lcmF0ZSBtb3JlIHRyYW5zYWN0aW9uLXNh ZmUgYWN0aXZpdHkgdG8gdmVyaWZ5IG5vIGRvdWJsZSBjb3VudGluZy4KK1NFTEVDVCBjb3VudCgq KSBGUk9NIHBhcnRpYWxfZmx1c2g7CisgY291bnQgCistLS0tLS0tCisgICAgIDUKKygxIHJvdykK KworLS0gRmx1c2ggYWdhaW4gbWlkLXRyYW5zYWN0aW9uCitTRUxFQ1QgcGdfc3RhdF9yZXBvcnRf YW55dGltZShwZ19iYWNrZW5kX3BpZCgpKTsKKyBwZ19zdGF0X3JlcG9ydF9hbnl0aW1lIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCistLSBTaG91bGQgc2hvdyBjdW11 bGF0aXZlIHRvdGFscywgbm90IGRvdWJsZS1jb3VudGVkLgorU0VMRUNUIHNlcV9zY2FuIC0gOnNl cV9zY2FuX2JlZm9yZSBBUyBzZXFfc2Nhbl9kZWx0YSwKKyAgICAgICBzZXFfdHVwX3JlYWQgLSA6 c2VxX3R1cF9yZWFkX2JlZm9yZSBBUyBzZXFfdHVwX3JlYWRfZGVsdGEsCisgICAgICAgbl90dXBf aW5zIC0gOm5fdHVwX2luc19iZWZvcmUgQVMgbl90dXBfaW5zX2RlbHRhLAorICAgICAgIG5fdHVw X3VwZCAtIDpuX3R1cF91cGRfYmVmb3JlIEFTIG5fdHVwX3VwZF9kZWx0YQorICBGUk9NIHBnX3N0 YXRfdXNlcl90YWJsZXMgV0hFUkUgcmVsbmFtZSA9ICdwYXJ0aWFsX2ZsdXNoJzsKKyBzZXFfc2Nh bl9kZWx0YSB8IHNlcV90dXBfcmVhZF9kZWx0YSB8IG5fdHVwX2luc19kZWx0YSB8IG5fdHVwX3Vw ZF9kZWx0YSAKKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgMyB8ICAgICAgICAgICAg ICAgICAxMyB8ICAgICAgICAgICAgICAgMCB8ICAgICAgICAgICAgICAgMAorKDEgcm93KQorCitD T01NSVQ7CistLSBBZnRlciBjb21taXQsIGFsbCBjb3VudGVycyBzaG91bGQgYmUgZmx1c2hlZC4K K1NFTEVDVCBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2goKTsKKyBwZ19zdGF0X2ZvcmNlX25leHRf Zmx1c2ggCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1Qg c2VxX3NjYW4gLSA6c2VxX3NjYW5fYmVmb3JlIEFTIHNlcV9zY2FuX2RlbHRhLAorICAgICAgIHNl cV90dXBfcmVhZCAtIDpzZXFfdHVwX3JlYWRfYmVmb3JlIEFTIHNlcV90dXBfcmVhZF9kZWx0YSwK KyAgICAgICBuX3R1cF9pbnMgLSA6bl90dXBfaW5zX2JlZm9yZSBBUyBuX3R1cF9pbnNfZGVsdGEs CisgICAgICAgbl90dXBfdXBkIC0gOm5fdHVwX3VwZF9iZWZvcmUgQVMgbl90dXBfdXBkX2RlbHRh CisgIEZST00gcGdfc3RhdF91c2VyX3RhYmxlcyBXSEVSRSByZWxuYW1lID0gJ3BhcnRpYWxfZmx1 c2gnOworIHNlcV9zY2FuX2RlbHRhIHwgc2VxX3R1cF9yZWFkX2RlbHRhIHwgbl90dXBfaW5zX2Rl bHRhIHwgbl90dXBfdXBkX2RlbHRhIAorLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAz IHwgICAgICAgICAgICAgICAgIDEzIHwgICAgICAgICAgICAgICAyIHwgICAgICAgICAgICAgICAx CisoMSByb3cpCisKK0RST1AgVEFCTEUgcGFydGlhbF9mbHVzaDsKKy0tIFRlc3QgdGhhdCBwZ19z dGF0X3JlcG9ydF9hbnl0aW1lIGFsc28gZmx1c2hlcyBub24tcmVsYXRpb24gc3RhdHMuCitDUkVB VEUgVEFCTEUgd2FsX2ZsdXNoX3Rlc3QoaWQgaW50KTsKK1NFTEVDVCBwZ19zdGF0X2ZvcmNlX25l eHRfZmx1c2goKTsKKyBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2ggCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1Qgd2FsX3JlY29yZHMgQVMgd2FsX3JlY29y ZHNfYmVmb3JlCisgIEZST00gcGdfc3RhdF9nZXRfYmFja2VuZF93YWwocGdfYmFja2VuZF9waWQo KSkgXGdzZXQKK0JFR0lOOworU0VUIExPQ0FMIHN0YXRzX2ZldGNoX2NvbnNpc3RlbmN5ID0gbm9u ZTsKKy0tIEdlbmVyYXRlIFdBTCBpbnNpZGUgdGhlIHRyYW5zYWN0aW9uLgorSU5TRVJUIElOVE8g d2FsX2ZsdXNoX3Rlc3QgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMCk7CistLSBGbHVzaCBt aWQtdHJhbnNhY3Rpb247IFdBTCBzdGF0cyBzaG91bGQgYmVjb21lIHZpc2libGUgaW1tZWRpYXRl bHkuCitTRUxFQ1QgcGdfc3RhdF9yZXBvcnRfYW55dGltZShwZ19iYWNrZW5kX3BpZCgpKTsKKyBw Z19zdGF0X3JlcG9ydF9hbnl0aW1lIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAorKDEg cm93KQorCitTRUxFQ1Qgd2FsX3JlY29yZHMgPiA6d2FsX3JlY29yZHNfYmVmb3JlIEFTIHdhbF9m bHVzaGVkCisgIEZST00gcGdfc3RhdF9nZXRfYmFja2VuZF93YWwocGdfYmFja2VuZF9waWQoKSk7 Cisgd2FsX2ZsdXNoZWQgCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitDT01NSVQ7CitE Uk9QIFRBQkxFIHdhbF9mbHVzaF90ZXN0OwogLS0gRW5kIG9mIFN0YXRzIFRlc3QKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3N0YXRzLnNxbAppbmRleCA2MTBmZDIxZmFlNC4uYzhiYzBmMjJmMjcgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3N0YXRzLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9z dGF0cy5zcWwKQEAgLTEwMDgsNCArMTAwOCw4NSBAQCBTRUxFQ1QgZmFzdHBhdGhfZXhjZWVkZWQg PiA6ZmFzdHBhdGhfZXhjZWVkZWRfYmVmb3JlIEZST00gcGdfc3RhdF9sb2NrIFdIRVJFIGxvYwog CiBEUk9QIFRBQkxFIHBhcnRfdGVzdDsKIAorLS0KKy0tIFRlc3QgcGdfc3RhdF9yZXBvcnRfYW55 dGltZQorLS0KK0NSRUFURSBUQUJMRSBwYXJ0aWFsX2ZsdXNoKGlkIGludCk7CitJTlNFUlQgSU5U TyBwYXJ0aWFsX2ZsdXNoIFZBTFVFUyAoMSksICgyKSwgKDMpOworU0VMRUNUIHBnX3N0YXRfZm9y Y2VfbmV4dF9mbHVzaCgpOworCistLSBSZWNvcmQgY291bnRlcnMgYmVmb3JlIHRoZSBleHBsaWNp dCB0cmFuc2FjdGlvbgorU0VMRUNUIHNlcV9zY2FuIEFTIHNlcV9zY2FuX2JlZm9yZSwKKyAgICAg ICBzZXFfdHVwX3JlYWQgQVMgc2VxX3R1cF9yZWFkX2JlZm9yZSwKKyAgICAgICBuX3R1cF9pbnMg QVMgbl90dXBfaW5zX2JlZm9yZSwKKyAgICAgICBuX3R1cF91cGQgQVMgbl90dXBfdXBkX2JlZm9y ZQorICBGUk9NIHBnX3N0YXRfdXNlcl90YWJsZXMgV0hFUkUgcmVsbmFtZSA9ICdwYXJ0aWFsX2Zs dXNoJyBcZ3NldAorCitCRUdJTjsKK1NFVCBMT0NBTCBzdGF0c19mZXRjaF9jb25zaXN0ZW5jeSA9 IG5vbmU7CisKKy0tIEdlbmVyYXRlIGJvdGggdHJhbnNhY3Rpb24tc2FmZSBhbmQgdHJhbnNhY3Rp b24tdW5zYWZlIGNvdW50ZXJzLgorU0VMRUNUIGNvdW50KCopIEZST00gcGFydGlhbF9mbHVzaDsK K0lOU0VSVCBJTlRPIHBhcnRpYWxfZmx1c2ggVkFMVUVTICg0KSwgKDUpOworVVBEQVRFIHBhcnRp YWxfZmx1c2ggU0VUIGlkID0gaWQgV0hFUkUgaWQgPSAxOworCistLSBGbHVzaCBtaWQtdHJhbnNh Y3Rpb24KK1NFTEVDVCBwZ19zdGF0X3JlcG9ydF9hbnl0aW1lKHBnX2JhY2tlbmRfcGlkKCkpOwor CistLSBUcmFuc2FjdGlvbi1zYWZlIGNvdW50ZXJzIHNob3VsZCBiZSB2aXNpYmxlIG1pZC10cmFu c2FjdGlvbi4KKy0tIFRyYW5zYWN0aW9uLXVuc2FmZSBjb3VudGVycyAoaW5zLCB1cGQpIHNob3Vs ZCBOT1QgYmUgZmx1c2hlZCB5ZXQsCistLSBzaW5jZSB0aGVpciBmaW5hbCB2YWx1ZXMgZGVwZW5k IG9uIHdoZXRoZXIgdGhlIHRyYW5zYWN0aW9uIGNvbW1pdHMuCitTRUxFQ1Qgc2VxX3NjYW4gLSA6 c2VxX3NjYW5fYmVmb3JlIEFTIHNlcV9zY2FuX2RlbHRhLAorICAgICAgIHNlcV90dXBfcmVhZCAt IDpzZXFfdHVwX3JlYWRfYmVmb3JlIEFTIHNlcV90dXBfcmVhZF9kZWx0YSwKKyAgICAgICBuX3R1 cF9pbnMgLSA6bl90dXBfaW5zX2JlZm9yZSBBUyBuX3R1cF9pbnNfZGVsdGEsCisgICAgICAgbl90 dXBfdXBkIC0gOm5fdHVwX3VwZF9iZWZvcmUgQVMgbl90dXBfdXBkX2RlbHRhCisgIEZST00gcGdf c3RhdF91c2VyX3RhYmxlcyBXSEVSRSByZWxuYW1lID0gJ3BhcnRpYWxfZmx1c2gnOworCistLSBH ZW5lcmF0ZSBtb3JlIHRyYW5zYWN0aW9uLXNhZmUgYWN0aXZpdHkgdG8gdmVyaWZ5IG5vIGRvdWJs ZSBjb3VudGluZy4KK1NFTEVDVCBjb3VudCgqKSBGUk9NIHBhcnRpYWxfZmx1c2g7CisKKy0tIEZs dXNoIGFnYWluIG1pZC10cmFuc2FjdGlvbgorU0VMRUNUIHBnX3N0YXRfcmVwb3J0X2FueXRpbWUo cGdfYmFja2VuZF9waWQoKSk7CisKKy0tIFNob3VsZCBzaG93IGN1bXVsYXRpdmUgdG90YWxzLCBu b3QgZG91YmxlLWNvdW50ZWQuCitTRUxFQ1Qgc2VxX3NjYW4gLSA6c2VxX3NjYW5fYmVmb3JlIEFT IHNlcV9zY2FuX2RlbHRhLAorICAgICAgIHNlcV90dXBfcmVhZCAtIDpzZXFfdHVwX3JlYWRfYmVm b3JlIEFTIHNlcV90dXBfcmVhZF9kZWx0YSwKKyAgICAgICBuX3R1cF9pbnMgLSA6bl90dXBfaW5z X2JlZm9yZSBBUyBuX3R1cF9pbnNfZGVsdGEsCisgICAgICAgbl90dXBfdXBkIC0gOm5fdHVwX3Vw ZF9iZWZvcmUgQVMgbl90dXBfdXBkX2RlbHRhCisgIEZST00gcGdfc3RhdF91c2VyX3RhYmxlcyBX SEVSRSByZWxuYW1lID0gJ3BhcnRpYWxfZmx1c2gnOworCitDT01NSVQ7CisKKy0tIEFmdGVyIGNv bW1pdCwgYWxsIGNvdW50ZXJzIHNob3VsZCBiZSBmbHVzaGVkLgorU0VMRUNUIHBnX3N0YXRfZm9y Y2VfbmV4dF9mbHVzaCgpOworCitTRUxFQ1Qgc2VxX3NjYW4gLSA6c2VxX3NjYW5fYmVmb3JlIEFT IHNlcV9zY2FuX2RlbHRhLAorICAgICAgIHNlcV90dXBfcmVhZCAtIDpzZXFfdHVwX3JlYWRfYmVm b3JlIEFTIHNlcV90dXBfcmVhZF9kZWx0YSwKKyAgICAgICBuX3R1cF9pbnMgLSA6bl90dXBfaW5z X2JlZm9yZSBBUyBuX3R1cF9pbnNfZGVsdGEsCisgICAgICAgbl90dXBfdXBkIC0gOm5fdHVwX3Vw ZF9iZWZvcmUgQVMgbl90dXBfdXBkX2RlbHRhCisgIEZST00gcGdfc3RhdF91c2VyX3RhYmxlcyBX SEVSRSByZWxuYW1lID0gJ3BhcnRpYWxfZmx1c2gnOworCitEUk9QIFRBQkxFIHBhcnRpYWxfZmx1 c2g7CisKKy0tIFRlc3QgdGhhdCBwZ19zdGF0X3JlcG9ydF9hbnl0aW1lIGFsc28gZmx1c2hlcyBu b24tcmVsYXRpb24gc3RhdHMuCitDUkVBVEUgVEFCTEUgd2FsX2ZsdXNoX3Rlc3QoaWQgaW50KTsK K1NFTEVDVCBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2goKTsKK1NFTEVDVCB3YWxfcmVjb3JkcyBB UyB3YWxfcmVjb3Jkc19iZWZvcmUKKyAgRlJPTSBwZ19zdGF0X2dldF9iYWNrZW5kX3dhbChwZ19i YWNrZW5kX3BpZCgpKSBcZ3NldAorCitCRUdJTjsKK1NFVCBMT0NBTCBzdGF0c19mZXRjaF9jb25z aXN0ZW5jeSA9IG5vbmU7CisKKy0tIEdlbmVyYXRlIFdBTCBpbnNpZGUgdGhlIHRyYW5zYWN0aW9u LgorSU5TRVJUIElOVE8gd2FsX2ZsdXNoX3Rlc3QgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAx MCk7CisKKy0tIEZsdXNoIG1pZC10cmFuc2FjdGlvbjsgV0FMIHN0YXRzIHNob3VsZCBiZWNvbWUg dmlzaWJsZSBpbW1lZGlhdGVseS4KK1NFTEVDVCBwZ19zdGF0X3JlcG9ydF9hbnl0aW1lKHBnX2Jh Y2tlbmRfcGlkKCkpOworCitTRUxFQ1Qgd2FsX3JlY29yZHMgPiA6d2FsX3JlY29yZHNfYmVmb3Jl IEFTIHdhbF9mbHVzaGVkCisgIEZST00gcGdfc3RhdF9nZXRfYmFja2VuZF93YWwocGdfYmFja2Vu ZF9waWQoKSk7CisKK0NPTU1JVDsKK0RST1AgVEFCTEUgd2FsX2ZsdXNoX3Rlc3Q7CisKIC0tIEVu ZCBvZiBTdGF0cyBUZXN0Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgo= --000000000000e4fcc10652ff8975 Content-Type: application/x-patch; name="v3-0002-pgstat-tolerate-already-dropped-entries-in-pgstat.patch" Content-Disposition: attachment; filename="v3-0002-pgstat-tolerate-already-dropped-entries-in-pgstat.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mprga8kh7 RnJvbSAxODFmMDUxYTc5ZTU2NWVhZWQyNWZjY2VkZGMxZjJjOTBhZGFhZTFmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEltc2VpaCA8c2FtaW1zZWloQGdtYWlsLmNvbT4KRGF0 ZTogVGh1LCAyOCBNYXkgMjAyNiAxMjowMjoyMSArMDAwMApTdWJqZWN0OiBbUEFUQ0ggdjMgMi81 XSBwZ3N0YXQ6IHRvbGVyYXRlIGFscmVhZHktZHJvcHBlZCBlbnRyaWVzIGluCiBwZ3N0YXRfZHJv cF9lbnRyeSgpCgpUaGVyZSBhcmUgdmFsaWQgY2FzZXMgaW4gd2hpY2ggcGdzdGF0X2Ryb3BfZW50 cnkgY291bGQgYmUgY2FsbGVkCm11bHRpcGxlIHRpbWVzIGJlZm9yZSBhIGdhcmJhZ2UtY29sbGVj dGlvbiBvY2N1cnMsIGxlYWRpbmcgdG8gYW4KRVJST1IgaWYgdGhlIGVudHJ5IHdhcyBhbHJlYWR5 IG1hcmtlZCBkZWFkLiAgQSBjYWxsZXIgc2hvdWxkIGJlCmFibGUgdG8gdG9sZXJhdGUgc3VjaCBj YXNlcyBieSBzdXBwbHlpbmcgYSBza2lwX2Ryb3BwZWQgPSB0cnVlCmFyZ3VtZW50LgoKVGhpcyB3 aWxsIGJlIG5lZWRlZCBmb3IgZnV0dXJlIHdvcmsgaW4gd2hpY2ggcGFyYWxsZWwgYmFja2VuZHMK bWF5IGF0dGVtcHQgdG8gZHJvcCBhbiBlbnRyeSBieSBoYXNoLWtleS4KLS0tCiBzcmMvYmFja2Vu ZC91dGlscy9hY3Rpdml0eS9wZ3N0YXQuYyAgICAgICAgICAgICAgICAgIHwgIDIgKy0KIHNyYy9i YWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9mdW5jdGlvbi5jICAgICAgICAgfCAgMiArLQog c3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X3JlcGxzbG90LmMgICAgICAgICB8ICAy ICstCiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfc2htZW0uYyAgICAgICAgICAg IHwgMTIgKysrKysrKysrKy0tCiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfeGFj dC5jICAgICAgICAgICAgIHwgIDggKysrKy0tLS0KIHNyYy9pbmNsdWRlL3V0aWxzL3Bnc3RhdF9p bnRlcm5hbC5oICAgICAgICAgICAgICAgICAgfCAgMiArLQogLi4uL3Rlc3RfY3VzdG9tX3N0YXRz L3Rlc3RfY3VzdG9tX3Zhcl9zdGF0cy5jICAgICAgICB8ICAyICstCiA3IGZpbGVzIGNoYW5nZWQs IDE5IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkv cGdzdGF0LmMKaW5kZXggOWI1ZDliZjA5Y2IuLmU5MmRiZDM4ZThkIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9h Y3Rpdml0eS9wZ3N0YXQuYwpAQCAtNjUxLDcgKzY1MSw3IEBAIHBnc3RhdF9zaHV0ZG93bl9ob29r KGludCBjb2RlLCBEYXR1bSBhcmcpCiAJZGxpc3RfaW5pdCgmcGdTdGF0UGVuZGluZyk7CiAKIAkv KiBkcm9wIHRoZSBiYWNrZW5kIHN0YXRzIGVudHJ5ICovCi0JaWYgKCFwZ3N0YXRfZHJvcF9lbnRy eShQR1NUQVRfS0lORF9CQUNLRU5ELCBJbnZhbGlkT2lkLCBNeVByb2NOdW1iZXIpKQorCWlmICgh cGdzdGF0X2Ryb3BfZW50cnkoUEdTVEFUX0tJTkRfQkFDS0VORCwgSW52YWxpZE9pZCwgTXlQcm9j TnVtYmVyLCBmYWxzZSkpCiAJCXBnc3RhdF9yZXF1ZXN0X2VudHJ5X3JlZnNfZ2MoKTsKIAogCXBn c3RhdF9kZXRhY2hfc2htZW0oKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2 aXR5L3Bnc3RhdF9mdW5jdGlvbi5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0 X2Z1bmN0aW9uLmMKaW5kZXggZDQ3ZDA1ZTNkOTIuLjg4YWM2ZDA4ZTY5IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfZnVuY3Rpb24uYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfZnVuY3Rpb24uYwpAQCAtMTEzLDcgKzExMyw3IEBA IHBnc3RhdF9pbml0X2Z1bmN0aW9uX3VzYWdlKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQlp ZiAoIVNlYXJjaFN5c0NhY2hlRXhpc3RzMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKGZjaW5m by0+ZmxpbmZvLT5mbl9vaWQpKSkKIAkJewogCQkJcGdzdGF0X2Ryb3BfZW50cnkoUEdTVEFUX0tJ TkRfRlVOQ1RJT04sIE15RGF0YWJhc2VJZCwKLQkJCQkJCQkgIGZjaW5mby0+ZmxpbmZvLT5mbl9v aWQpOworCQkJCQkJCSAgZmNpbmZvLT5mbGluZm8tPmZuX29pZCwgZmFsc2UpOwogCQkJZXJlcG9y dChFUlJPUiwgZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9GVU5DVElPTiksCiAJCQkJCWVycm1z ZygiZnVuY3Rpb24gY2FsbCB0byBkcm9wcGVkIGZ1bmN0aW9uIikpOwogCQl9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfcmVwbHNsb3QuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9yZXBsc2xvdC5jCmluZGV4IDBkMDBkZDVkOTNhLi5h MzJiNzBhMDM3MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0 X3JlcGxzbG90LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X3JlcGxz bG90LmMKQEAgLTE4OCw3ICsxODgsNyBAQCBwZ3N0YXRfZHJvcF9yZXBsc2xvdChSZXBsaWNhdGlv blNsb3QgKnNsb3QpCiAJQXNzZXJ0KExXTG9ja0hlbGRCeU1lSW5Nb2RlKFJlcGxpY2F0aW9uU2xv dEFsbG9jYXRpb25Mb2NrLCBMV19FWENMVVNJVkUpKTsKIAogCWlmICghcGdzdGF0X2Ryb3BfZW50 cnkoUEdTVEFUX0tJTkRfUkVQTFNMT1QsIEludmFsaWRPaWQsCi0JCQkJCQkgICBSZXBsaWNhdGlv blNsb3RJbmRleChzbG90KSkpCisJCQkJCQkgICBSZXBsaWNhdGlvblNsb3RJbmRleChzbG90KSwg ZmFsc2UpKQogCQlwZ3N0YXRfcmVxdWVzdF9lbnRyeV9yZWZzX2djKCk7CiB9CiAKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9zaG1lbS5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X3NobWVtLmMKaW5kZXggYjhmMzU0YzgxOGEuLjQwM2Ux MWEwZGE4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfc2ht ZW0uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfc2htZW0uYwpAQCAt OTk4LDcgKzk5OCw4IEBAIHBnc3RhdF9kcm9wX2RhdGFiYXNlX2FuZF9jb250ZW50cyhPaWQgZGJv aWQpCiAgKiBEcm9wIGEgc2luZ2xlIHN0YXRzIGVudHJ5LgogICoKICAqIFRoaXMgcm91dGluZSBy ZXR1cm5zIGZhbHNlIGlmIHRoZSBzdGF0cyBlbnRyeSBvZiB0aGUgZHJvcHBlZCBvYmplY3QgY291 bGQKLSAqIG5vdCBiZSBmcmVlZCwgdHJ1ZSBvdGhlcndpc2UuCisgKiBub3QgYmUgZnJlZWQsIHRy dWUgb3RoZXJ3aXNlLiAgSWYgc2tpcF9kcm9wcGVkIGlzIHRydWUsIGFscmVhZHktZHJvcHBlZAor ICogZW50cmllcyBhcmUgdG9sZXJhdGVkIGFuZCB0cmVhdGVkIGFzIHN1Y2Nlc3MuCiAgKgogICog VGhlIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgY2FsbCBwZ3N0YXRfcmVxdWVzdF9l bnRyeV9yZWZzX2djKCkKICAqIGlmIHRoZSBzdGF0cyBlbnRyeSBjb3VsZCBub3QgYmUgZnJlZWQs IHRvIGVuc3VyZSB0aGF0IHRoaXMgZW50cnkncyBtZW1vcnkKQEAgLTEwMDYsNyArMTAwNyw3IEBA IHBnc3RhdF9kcm9wX2RhdGFiYXNlX2FuZF9jb250ZW50cyhPaWQgZGJvaWQpCiAgKiBwZ3N0YXRf Z2NfZW50cnlfcmVmcygpLgogICovCiBib29sCi1wZ3N0YXRfZHJvcF9lbnRyeShQZ1N0YXRfS2lu ZCBraW5kLCBPaWQgZGJvaWQsIHVpbnQ2NCBvYmppZCkKK3Bnc3RhdF9kcm9wX2VudHJ5KFBnU3Rh dF9LaW5kIGtpbmQsIE9pZCBkYm9pZCwgdWludDY0IG9iamlkLCBib29sIHNraXBfZHJvcHBlZCkK IHsKIAlQZ1N0YXRfSGFzaEtleSBrZXkgPSB7MH07CiAJUGdTdGF0U2hhcmVkX0hhc2hFbnRyeSAq c2hlbnQ7CkBAIC0xMDMxLDYgKzEwMzIsMTMgQEAgcGdzdGF0X2Ryb3BfZW50cnkoUGdTdGF0X0tp bmQga2luZCwgT2lkIGRib2lkLCB1aW50NjQgb2JqaWQpCiAJc2hlbnQgPSBkc2hhc2hfZmluZChw Z1N0YXRMb2NhbC5zaGFyZWRfaGFzaCwgJmtleSwgdHJ1ZSk7CiAJaWYgKHNoZW50KQogCXsKKwkJ LyogYWxyZWFkeSBkcm9wcGVkIGJ5IGFub3RoZXIgYmFja2VuZCwgbm90aGluZyB0byBkbyAqLwor CQlpZiAoc2hlbnQtPmRyb3BwZWQgJiYgc2tpcF9kcm9wcGVkKQorCQl7CisJCQlkc2hhc2hfcmVs ZWFzZV9sb2NrKHBnU3RhdExvY2FsLnNoYXJlZF9oYXNoLCBzaGVudCk7CisJCQlyZXR1cm4gdHJ1 ZTsKKwkJfQorCiAJCWZyZWVkID0gcGdzdGF0X2Ryb3BfZW50cnlfaW50ZXJuYWwoc2hlbnQsIE5V TEwpOwogCiAJCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0 YXRfeGFjdC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X3hhY3QuYwppbmRl eCA1ZTJkNjllNjI5Ny4uOTI3YjYyNjhmYzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FjdGl2aXR5L3Bnc3RhdF94YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkv cGdzdGF0X3hhY3QuYwpAQCAtODUsNyArODUsNyBAQCBBdEVPWGFjdF9QZ1N0YXRfRHJvcHBlZFN0 YXRzKFBnU3RhdF9TdWJYYWN0U3RhdHVzICp4YWN0X3N0YXRlLCBib29sIGlzQ29tbWl0KQogCQkJ ICogVHJhbnNhY3Rpb24gdGhhdCBkcm9wcGVkIGFuIG9iamVjdCBjb21taXR0ZWQuIERyb3AgdGhl IHN0YXRzCiAJCQkgKiB0b28uCiAJCQkgKi8KLQkJCWlmICghcGdzdGF0X2Ryb3BfZW50cnkoaXQt PmtpbmQsIGl0LT5kYm9pZCwgb2JqaWQpKQorCQkJaWYgKCFwZ3N0YXRfZHJvcF9lbnRyeShpdC0+ a2luZCwgaXQtPmRib2lkLCBvYmppZCwgZmFsc2UpKQogCQkJCW5vdF9mcmVlZF9jb3VudCsrOwog CQl9CiAJCWVsc2UgaWYgKCFpc0NvbW1pdCAmJiBwZW5kaW5nLT5pc19jcmVhdGUpCkBAIC05NCw3 ICs5NCw3IEBAIEF0RU9YYWN0X1BnU3RhdF9Ecm9wcGVkU3RhdHMoUGdTdGF0X1N1YlhhY3RTdGF0 dXMgKnhhY3Rfc3RhdGUsIGJvb2wgaXNDb21taXQpCiAJCQkgKiBUcmFuc2FjdGlvbiB0aGF0IGNy ZWF0ZWQgYW4gb2JqZWN0IGFib3J0ZWQuIERyb3AgdGhlIHN0YXRzCiAJCQkgKiBhc3NvY2lhdGVk IHdpdGggdGhlIG9iamVjdC4KIAkJCSAqLwotCQkJaWYgKCFwZ3N0YXRfZHJvcF9lbnRyeShpdC0+ a2luZCwgaXQtPmRib2lkLCBvYmppZCkpCisJCQlpZiAoIXBnc3RhdF9kcm9wX2VudHJ5KGl0LT5r aW5kLCBpdC0+ZGJvaWQsIG9iamlkLCBmYWxzZSkpCiAJCQkJbm90X2ZyZWVkX2NvdW50Kys7CiAJ CX0KIApAQCAtMTYwLDcgKzE2MCw3IEBAIEF0RU9TdWJYYWN0X1BnU3RhdF9Ecm9wcGVkU3RhdHMo UGdTdGF0X1N1YlhhY3RTdGF0dXMgKnhhY3Rfc3RhdGUsCiAJCQkgKiBTdWJ0cmFuc2FjdGlvbiBj cmVhdGluZyBhIG5ldyBzdGF0cyBvYmplY3QgYWJvcnRlZC4gRHJvcCB0aGUKIAkJCSAqIHN0YXRz IG9iamVjdC4KIAkJCSAqLwotCQkJaWYgKCFwZ3N0YXRfZHJvcF9lbnRyeShpdC0+a2luZCwgaXQt PmRib2lkLCBvYmppZCkpCisJCQlpZiAoIXBnc3RhdF9kcm9wX2VudHJ5KGl0LT5raW5kLCBpdC0+ ZGJvaWQsIG9iamlkLCBmYWxzZSkpCiAJCQkJbm90X2ZyZWVkX2NvdW50Kys7CiAJCQlwZnJlZShw ZW5kaW5nKTsKIAkJfQpAQCAtMzIzLDcgKzMyMyw3IEBAIHBnc3RhdF9leGVjdXRlX3RyYW5zYWN0 aW9uYWxfZHJvcHMoaW50IG5kcm9wcywgc3RydWN0IHhsX3hhY3Rfc3RhdHNfaXRlbSAqaXRlbXMs CiAJCXhsX3hhY3Rfc3RhdHNfaXRlbSAqaXQgPSAmaXRlbXNbaV07CiAJCXVpbnQ2NAkJb2JqaWQg PSAoKHVpbnQ2NCkgaXQtPm9iamlkX2hpKSA8PCAzMiB8IGl0LT5vYmppZF9sbzsKIAotCQlpZiAo IXBnc3RhdF9kcm9wX2VudHJ5KGl0LT5raW5kLCBpdC0+ZGJvaWQsIG9iamlkKSkKKwkJaWYgKCFw Z3N0YXRfZHJvcF9lbnRyeShpdC0+a2luZCwgaXQtPmRib2lkLCBvYmppZCwgZmFsc2UpKQogCQkJ bm90X2ZyZWVkX2NvdW50Kys7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9w Z3N0YXRfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bnc3RhdF9pbnRlcm5hbC5oCmlu ZGV4IGZlNDYzZmFhZjYzLi45NmYxODllMGRjMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRp bHMvcGdzdGF0X2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdzdGF0X2ludGVy bmFsLmgKQEAgLTgwNyw3ICs4MDcsNyBAQCBleHRlcm4gUGdTdGF0X0VudHJ5UmVmICpwZ3N0YXRf Z2V0X2VudHJ5X3JlZihQZ1N0YXRfS2luZCBraW5kLCBPaWQgZGJvaWQsIHVpbnQ2NAogZXh0ZXJu IGJvb2wgcGdzdGF0X2xvY2tfZW50cnkoUGdTdGF0X0VudHJ5UmVmICplbnRyeV9yZWYsIGJvb2wg bm93YWl0KTsKIGV4dGVybiBib29sIHBnc3RhdF9sb2NrX2VudHJ5X3NoYXJlZChQZ1N0YXRfRW50 cnlSZWYgKmVudHJ5X3JlZiwgYm9vbCBub3dhaXQpOwogZXh0ZXJuIHZvaWQgcGdzdGF0X3VubG9j a19lbnRyeShQZ1N0YXRfRW50cnlSZWYgKmVudHJ5X3JlZik7Ci1leHRlcm4gYm9vbCBwZ3N0YXRf ZHJvcF9lbnRyeShQZ1N0YXRfS2luZCBraW5kLCBPaWQgZGJvaWQsIHVpbnQ2NCBvYmppZCk7Citl eHRlcm4gYm9vbCBwZ3N0YXRfZHJvcF9lbnRyeShQZ1N0YXRfS2luZCBraW5kLCBPaWQgZGJvaWQs IHVpbnQ2NCBvYmppZCwgYm9vbCBza2lwX2Ryb3BwZWQpOwogZXh0ZXJuIHZvaWQgcGdzdGF0X2Ry b3BfYWxsX2VudHJpZXModm9pZCk7CiBleHRlcm4gdm9pZCBwZ3N0YXRfZHJvcF9tYXRjaGluZ19l bnRyaWVzKGJvb2wgKCpkb19kcm9wKSAoUGdTdGF0U2hhcmVkX0hhc2hFbnRyeSAqLCBEYXR1bSks CiAJCQkJCQkJCQkJIERhdHVtIG1hdGNoX2RhdGEpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90ZXN0X2N1c3RvbV92YXJfc3RhdHMuYyBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0b21fdmFyX3N0YXRzLmMKaW5kZXgg NWM0ODcxZWQzN2MuLjg2M2Q2YTUyNDkyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfY3VzdG9tX3N0YXRzL3Rlc3RfY3VzdG9tX3Zhcl9zdGF0cy5jCisrKyBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0b21fdmFyX3N0YXRzLmMKQEAgLTYwMCw3 ICs2MDAsNyBAQCB0ZXN0X2N1c3RvbV9zdGF0c192YXJfZHJvcChQR19GVU5DVElPTl9BUkdTKQog CiAJLyogRHJvcCBlbnRyeSBhbmQgcmVxdWVzdCBHQyBpZiB0aGUgZW50cnkgY291bGQgbm90IGJl IGZyZWVkICovCiAJaWYgKCFwZ3N0YXRfZHJvcF9lbnRyeShQR1NUQVRfS0lORF9URVNUX0NVU1RP TV9WQVJfU1RBVFMsIEludmFsaWRPaWQsCi0JCQkJCQkgICBQR1NUQVRfQ1VTVE9NX1ZBUl9TVEFU U19JRFgoc3RhdF9uYW1lKSkpCisJCQkJCQkgICBQR1NUQVRfQ1VTVE9NX1ZBUl9TVEFUU19JRFgo c3RhdF9uYW1lKSwgZmFsc2UpKQogCQlwZ3N0YXRfcmVxdWVzdF9lbnRyeV9yZWZzX2djKCk7CiAK IAlQR19SRVRVUk5fVk9JRCgpOwotLSAKMi41MC4xIChBcHBsZSBHaXQtMTU1KQoK --000000000000e4fcc10652ff8975 Content-Type: application/x-patch; name="v3-0003-dshash-add-partition-scoped-sequential-scan.patch" Content-Disposition: attachment; filename="v3-0003-dshash-add-partition-scoped-sequential-scan.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mprga8ka6 RnJvbSBiZjA4MzA1MDU5ZDMzYjY1OTUzYTQyNDI0M2Q0NTJhYzkwZjAwNzg2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEltc2VpaCA8c2FtaW1zZWloQGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCAyNyBNYXkgMjAyNiAxMDowMjo1NSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjMgMy81 XSBkc2hhc2g6IGFkZCBwYXJ0aXRpb24tc2NvcGVkIHNlcXVlbnRpYWwgc2NhbgoKQWRkIGRzaGFz aF9zZXFfaW5pdF9wYXJ0aXRpb24oKSwgd2hpY2ggcmVzdHJpY3RzIGEgc2VxdWVudGlhbCBzY2Fu IHRvCmEgc2luZ2xlIHBhcnRpdGlvbi4gIFRoaXMgYWxsb3dzIG11bHRpcGxlIGJhY2tlbmRzIHRv IHNjYW4gYSBkc2hhc2gKdGFibGUgaW4gcGFyYWxsZWwgYnkgZGl2aWRpbmcgcGFydGl0aW9ucyBh bW9uZyB0aGVtLCB3aGljaCBhIGZ1dHVyZQpjb21taXQgd2lsbCB1c2UgdG8gaW1wbGVtZW50IHBh cmFsbGVsIGNsb2NrLXN3ZWVwIGV2aWN0aW9uLgoKQWxzbyBtb3ZlIHRoZSBEU0hBU0hfTlVNX1BB UlRJVElPTlMgbWFjcm9zIHRvIGRzaGFzaC5oIHNvIHRoYXQgY2FsbGVycwpjYW4gZGV0ZXJtaW5l IHRoZSBwYXJ0aXRpb24gY291bnQuCgpSZW5hbWUgZHNoYXNoX3NlcV9zdGF0dXMubmJ1Y2tldHMg dG8gZW5kYnVja2V0LCBzaW5jZSB0aGUgZmllbGQKcmVwcmVzZW50cyB0aGUgZXhjbHVzaXZlIHVw cGVyLWJvdW5kIGJ1Y2tldCBpbmRleCBhdCB3aGljaCB0aGUgc2Nhbgp0ZXJtaW5hdGVzLCBub3Qg YSBjb3VudC4gIFRoaXMgaXMgY2xlYXJlciBub3cgdGhhdCBwYXJ0aXRpb24tc2NvcGVkCnNjYW5z IHNldCBpdCB0byB0aGUgZmlyc3QgYnVja2V0IG9mIHRoZSBuZXh0IHBhcnRpdGlvbiByYXRoZXIg dGhhbgp0aGUgdG90YWwgbnVtYmVyIG9mIGJ1Y2tldHMuCi0tLQogc3JjL2JhY2tlbmQvbGliL2Rz aGFzaC5jIHwgNDQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQogc3Jj L2luY2x1ZGUvbGliL2RzaGFzaC5oIHwgMTQgKysrKysrKysrKysrLQogMiBmaWxlcyBjaGFuZ2Vk LCA0NSBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9saWIvZHNoYXNoLmMgYi9zcmMvYmFja2VuZC9saWIvZHNoYXNoLmMKaW5kZXggMTk5OTk4 OWMxNGYuLjAxZTY3ODU2ZjQzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWIvZHNoYXNoLmMK KysrIGIvc3JjL2JhY2tlbmQvbGliL2RzaGFzaC5jCkBAIC01MiwxNSArNTIsNiBAQCBzdHJ1Y3Qg ZHNoYXNoX3RhYmxlX2l0ZW0KIAkvKiBUaGUgdXNlcidzIGVudHJ5IG9iamVjdCBmb2xsb3dzIGhl cmUuICBTZWUgRU5UUllfRlJPTV9JVEVNKGl0ZW0pLiAqLwogfTsKIAotLyoKLSAqIFRoZSBudW1i ZXIgb2YgcGFydGl0aW9ucyBmb3IgbG9ja2luZyBwdXJwb3Nlcy4gIFRoaXMgaXMgc2V0IHRvIG1h dGNoCi0gKiBOVU1fQlVGRkVSX1BBUlRJVElPTlMgZm9yIG5vdywgb24gdGhlIGJhc2lzIHRoYXQg d2hhdGV2ZXIncyBnb29kIGVub3VnaCBmb3IKLSAqIHRoZSBidWZmZXIgcG9vbCBtdXN0IGJlIGdv b2QgZW5vdWdoIGZvciBhbnkgb3RoZXIgcHVycG9zZS4gIFRoaXMgY291bGQKLSAqIGJlY29tZSBh IHJ1bnRpbWUgcGFyYW1ldGVyIGluIGZ1dHVyZS4KLSAqLwotI2RlZmluZSBEU0hBU0hfTlVNX1BB UlRJVElPTlNfTE9HMiA3Ci0jZGVmaW5lIERTSEFTSF9OVU1fUEFSVElUSU9OUyAoMSA8PCBEU0hB U0hfTlVNX1BBUlRJVElPTlNfTE9HMikKLQogLyogQSBtYWdpYyB2YWx1ZSB1c2VkIHRvIGlkZW50 aWZ5IG91ciBoYXNoIHRhYmxlcy4gKi8KICNkZWZpbmUgRFNIQVNIX01BR0lDIDB4NzVmZjZhMjAK IApAQCAtNjYxLDEzICs2NTIsNDIgQEAgZHNoYXNoX3NlcV9pbml0KGRzaGFzaF9zZXFfc3RhdHVz ICpzdGF0dXMsIGRzaGFzaF90YWJsZSAqaGFzaF90YWJsZSwKIHsKIAlzdGF0dXMtPmhhc2hfdGFi bGUgPSBoYXNoX3RhYmxlOwogCXN0YXR1cy0+Y3VyYnVja2V0ID0gMDsKLQlzdGF0dXMtPm5idWNr ZXRzID0gMDsKKwlzdGF0dXMtPmVuZGJ1Y2tldCA9IDA7CiAJc3RhdHVzLT5jdXJpdGVtID0gTlVM TDsKIAlzdGF0dXMtPnBuZXh0aXRlbSA9IEludmFsaWREc2FQb2ludGVyOwogCXN0YXR1cy0+Y3Vy cGFydGl0aW9uID0gLTE7CiAJc3RhdHVzLT5leGNsdXNpdmUgPSBleGNsdXNpdmU7CiB9CiAKKy8q CisgKiBJbml0aWFsaXplIGEgc2VxdWVudGlhbCBzY2FuIHJlc3RyaWN0ZWQgdG8gYSBzaW5nbGUg cGFydGl0aW9uLgorICoKKyAqIE9ubHkgZW50cmllcyBpbiB0aGUgc3BlY2lmaWVkIHBhcnRpdGlv biBhcmUgdmlzaXRlZC4gIFRoZSBjYWxsZXIgbXVzdAorICogZW5zdXJlIHRoYXQgMCA8PSBwYXJ0 aXRpb24gPCBEU0hBU0hfTlVNX1BBUlRJVElPTlMuCisgKi8KK3ZvaWQKK2RzaGFzaF9zZXFfaW5p dF9wYXJ0aXRpb24oZHNoYXNoX3NlcV9zdGF0dXMgKnN0YXR1cywgZHNoYXNoX3RhYmxlICpoYXNo X3RhYmxlLAorCQkJCQkJICBib29sIGV4Y2x1c2l2ZSwgaW50IHBhcnRpdGlvbikKK3sKKwlBc3Nl cnQocGFydGl0aW9uID49IDAgJiYgcGFydGl0aW9uIDwgRFNIQVNIX05VTV9QQVJUSVRJT05TKTsK KworCXN0YXR1cy0+aGFzaF90YWJsZSA9IGhhc2hfdGFibGU7CisJc3RhdHVzLT5jdXJpdGVtID0g TlVMTDsKKwlzdGF0dXMtPnBuZXh0aXRlbSA9IEludmFsaWREc2FQb2ludGVyOworCXN0YXR1cy0+ ZXhjbHVzaXZlID0gZXhjbHVzaXZlOworCisJTFdMb2NrQWNxdWlyZShQQVJUSVRJT05fTE9DSyho YXNoX3RhYmxlLCBwYXJ0aXRpb24pLAorCQkJCSAgZXhjbHVzaXZlID8gTFdfRVhDTFVTSVZFIDog TFdfU0hBUkVEKTsKKwllbnN1cmVfdmFsaWRfYnVja2V0X3BvaW50ZXJzKGhhc2hfdGFibGUpOwor CisJc3RhdHVzLT5jdXJwYXJ0aXRpb24gPSBwYXJ0aXRpb247CisJc3RhdHVzLT5lbmRidWNrZXQg PQorCQlCVUNLRVRfSU5ERVhfRk9SX1BBUlRJVElPTihwYXJ0aXRpb24gKyAxLCBoYXNoX3RhYmxl LT5zaXplX2xvZzIpOworCS8qIFNldCB0byBvbmUgYmVmb3JlIGZpcnN0IGJ1Y2tldCBhcyB0aGUg c2VxIHNjYW4gd2lsbCArK2N1cmJ1Y2tldCAqLworCXN0YXR1cy0+Y3VyYnVja2V0ID0KKwkJQlVD S0VUX0lOREVYX0ZPUl9QQVJUSVRJT04ocGFydGl0aW9uLCBoYXNoX3RhYmxlLT5zaXplX2xvZzIp IC0gMTsKK30KKwogLyoKICAqIFJldHVybnMgdGhlIG5leHQgZWxlbWVudC4KICAqCkBAIC03MDEs NyArNzIxLDcgQEAgZHNoYXNoX3NlcV9uZXh0KGRzaGFzaF9zZXFfc3RhdHVzICpzdGF0dXMpCiAK IAkJZW5zdXJlX3ZhbGlkX2J1Y2tldF9wb2ludGVycyhzdGF0dXMtPmhhc2hfdGFibGUpOwogCi0J CXN0YXR1cy0+bmJ1Y2tldHMgPQorCQlzdGF0dXMtPmVuZGJ1Y2tldCA9CiAJCQlOVU1fQlVDS0VU UyhzdGF0dXMtPmhhc2hfdGFibGUtPmNvbnRyb2wtPnNpemVfbG9nMik7CiAJCW5leHRfaXRlbV9w b2ludGVyID0gc3RhdHVzLT5oYXNoX3RhYmxlLT5idWNrZXRzW3N0YXR1cy0+Y3VyYnVja2V0XTsK IAl9CkBAIC03MTcsNyArNzM3LDcgQEAgZHNoYXNoX3NlcV9uZXh0KGRzaGFzaF9zZXFfc3RhdHVz ICpzdGF0dXMpCiAJewogCQlpbnQJCQluZXh0X3BhcnRpdGlvbjsKIAotCQlpZiAoKytzdGF0dXMt PmN1cmJ1Y2tldCA+PSBzdGF0dXMtPm5idWNrZXRzKQorCQlpZiAoKytzdGF0dXMtPmN1cmJ1Y2tl dCA+PSBzdGF0dXMtPmVuZGJ1Y2tldCkKIAkJewogCQkJLyogYWxsIGJ1Y2tldHMgaGF2ZSBiZWVu IHNjYW5uZWQuIGZpbmlzaC4gKi8KIAkJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbGliL2RzaGFzaC5oIGIvc3JjL2luY2x1ZGUvbGliL2RzaGFzaC5oCmluZGV4IDY0Yjc1 OGIzODFiLi42NTViMDI1Yjk5NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbGliL2RzaGFzaC5o CisrKyBiL3NyYy9pbmNsdWRlL2xpYi9kc2hhc2guaApAQCAtNzMsNyArNzMsNyBAQCB0eXBlZGVm IHN0cnVjdCBkc2hhc2hfc2VxX3N0YXR1cwogewogCWRzaGFzaF90YWJsZSAqaGFzaF90YWJsZTsJ LyogZHNoYXNoIHRhYmxlIHdvcmtpbmcgb24gKi8KIAlpbnQJCQljdXJidWNrZXQ7CQkvKiBidWNr ZXQgbnVtYmVyIHdlIGFyZSBhdCAqLwotCWludAkJCW5idWNrZXRzOwkJLyogdG90YWwgbnVtYmVy IG9mIGJ1Y2tldHMgaW4gdGhlIGRzaGFzaCAqLworCWludAkJCWVuZGJ1Y2tldDsJCS8qIGZpcnN0 IGJ1Y2tldCBiZXlvbmQgc2NhbiByYW5nZSAqLwogCWRzaGFzaF90YWJsZV9pdGVtICpjdXJpdGVt OyAvKiBpdGVtIHdlIGFyZSBjdXJyZW50bHkgYXQgKi8KIAlkc2FfcG9pbnRlciBwbmV4dGl0ZW07 CQkvKiBkc2EtcG9pbnRlciB0byB0aGUgbmV4dCBpdGVtICovCiAJaW50CQkJY3VycGFydGl0aW9u OwkvKiBwYXJ0aXRpb24gbnVtYmVyIHdlIGFyZSBhdCAqLwpAQCAtMTA5LDkgKzEwOSwyMSBAQCBl eHRlcm4gdm9pZCBkc2hhc2hfcmVsZWFzZV9sb2NrKGRzaGFzaF90YWJsZSAqaGFzaF90YWJsZSwg dm9pZCAqZW50cnkpOwogI2RlZmluZSBkc2hhc2hfZmluZF9vcl9pbnNlcnQoaGFzaF90YWJsZSwg a2V5LCBmb3VuZCkgXAogCWRzaGFzaF9maW5kX29yX2luc2VydF9leHRlbmRlZChoYXNoX3RhYmxl LCBrZXksIGZvdW5kLCAwKQogCisvKgorICogVGhlIG51bWJlciBvZiBwYXJ0aXRpb25zIGZvciBs b2NraW5nIHB1cnBvc2VzLiAgVGhpcyBpcyBzZXQgdG8gbWF0Y2gKKyAqIE5VTV9CVUZGRVJfUEFS VElUSU9OUyBmb3Igbm93LCBvbiB0aGUgYmFzaXMgdGhhdCB3aGF0ZXZlcidzIGdvb2QgZW5vdWdo IGZvcgorICogdGhlIGJ1ZmZlciBwb29sIG11c3QgYmUgZ29vZCBlbm91Z2ggZm9yIGFueSBvdGhl ciBwdXJwb3NlLiAgVGhpcyBjb3VsZAorICogYmVjb21lIGEgcnVudGltZSBwYXJhbWV0ZXIgaW4g ZnV0dXJlLgorICovCisjZGVmaW5lIERTSEFTSF9OVU1fUEFSVElUSU9OU19MT0cyIDcKKyNkZWZp bmUgRFNIQVNIX05VTV9QQVJUSVRJT05TICgxIDw8IERTSEFTSF9OVU1fUEFSVElUSU9OU19MT0cy KQorCiAvKiBzZXEgc2NhbiBzdXBwb3J0ICovCiBleHRlcm4gdm9pZCBkc2hhc2hfc2VxX2luaXQo ZHNoYXNoX3NlcV9zdGF0dXMgKnN0YXR1cywgZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxlLAogCQkJ CQkJCWJvb2wgZXhjbHVzaXZlKTsKK2V4dGVybiB2b2lkIGRzaGFzaF9zZXFfaW5pdF9wYXJ0aXRp b24oZHNoYXNoX3NlcV9zdGF0dXMgKnN0YXR1cywKKwkJCQkJCQkJCSAgZHNoYXNoX3RhYmxlICpo YXNoX3RhYmxlLAorCQkJCQkJCQkJICBib29sIGV4Y2x1c2l2ZSwgaW50IHBhcnRpdGlvbik7CiBl eHRlcm4gdm9pZCAqZHNoYXNoX3NlcV9uZXh0KGRzaGFzaF9zZXFfc3RhdHVzICpzdGF0dXMpOwog ZXh0ZXJuIHZvaWQgZHNoYXNoX3NlcV90ZXJtKGRzaGFzaF9zZXFfc3RhdHVzICpzdGF0dXMpOwog ZXh0ZXJuIHZvaWQgZHNoYXNoX2RlbGV0ZV9jdXJyZW50KGRzaGFzaF9zZXFfc3RhdHVzICpzdGF0 dXMpOwotLSAKMi41MC4xIChBcHBsZSBHaXQtMTU1KQoK --000000000000e4fcc10652ff8975 Content-Type: application/x-patch; name="v3-0005-pg_stat_statements-store-query-text-in-DSA-instea.patch" Content-Disposition: attachment; filename="v3-0005-pg_stat_statements-store-query-text-in-DSA-instea.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mprga8jh4 RnJvbSA0OGNjMWNmZjViMzhkZGE3MzhjMDcwOTlhYTMyNWI4MzNkNWVjMWMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEltc2VpaCA8c2FtaW1zZWloQGdtYWlsLmNvbT4KRGF0 ZTogRnJpLCAyOSBNYXkgMjAyNiAwOToyMDoyOSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjMgNS81 XSBwZ19zdGF0X3N0YXRlbWVudHM6IHN0b3JlIHF1ZXJ5IHRleHQgaW4gRFNBIGluc3RlYWQgb2YK IGZpbGUKClJlcGxhY2UgdGhlIGZpbGUtYmFzZWQgcXVlcnkgdGV4dCBzdG9yYWdlIChwZ3NzX3F1 ZXJ5X3RleHRzLnN0YXQpIHdpdGgKYSBEU0EgYXJlYSBvYnRhaW5lZCB2aWEgR2V0TmFtZWREU0Eu ICBFYWNoIGRzaGFzaCBlbnRyeSBub3cgc3RvcmVzIGEKZHNhX3BvaW50ZXIgdG8gaXRzIHF1ZXJ5 IHRleHQgaW5zdGVhZCBvZiBhIGZpbGUgb2Zmc2V0LCBlbGltaW5hdGluZwpleHRlcm5hbCBmaWxl IEkvTyBhbmQgdGhlIGFzc29jaWF0ZWQgZ2FyYmFnZSBjb2xsZWN0aW9uIG1hY2hpbmVyeS4KCkFk ZCBhIG5ldyBHVUMgcGdfc3RhdF9zdGF0ZW1lbnRzLnF1ZXJ5X3RleHRfbWVtb3J5IChQR0NfU0lH SFVQLApkZWZhdWx0IDRNQikgdGhhdCBjb250cm9scyB0aGUgRFNBIHNpemUgbGltaXQuICBXaGVu IHRoZSBEU0EgaXMKZXhoYXVzdGVkLCBuZXcgZW50cmllcyBhcmUgc3RpbGwgdHJhY2tlZCB3aXRo IGZ1bGwgY291bnRlcnMgYnV0IHRoZWlyCnF1ZXJ5IHRleHQgaXMgc3RvcmVkIGFzIE5VTEwuCgpB ZGQgYmFja2ZpbGwgbG9naWM6IHdoZW4gYW4gZXhpc3RpbmcgZW50cnkgd2l0aCBOVUxMIHRleHQg aXMgYWNjZXNzZWQKYWdhaW4gKGUuZy4gYWZ0ZXIgYSBsaW1pdCBpbmNyZWFzZSArIHJlbG9hZCks IHRoZSB0ZXh0IGlzIHdyaXR0ZW4gaW50bwp0aGUgbm93LWF2YWlsYWJsZSBEU0Egc3BhY2UsIHJl Y292ZXJpbmcgZnJvbSBlYXJsaWVyIGV4aGF1c3Rpb24gd2l0aG91dApyZXF1aXJpbmcgYSByZXNl dC4KCkFkZCBxdWVyeV90ZXh0X3NpemUgY29sdW1uIHRvIHBnX3N0YXRfc3RhdGVtZW50c19pbmZv IHNob3dpbmcgY3VycmVudApEU0EgdG90YWwgc2l6ZSwgaGVscGluZyBvcGVyYXRvcnMgbW9uaXRv ciB0ZXh0IG1lbW9yeSB1c2FnZS4KCkFkZCAwMDJfcXVlcnlfdGV4dF9tZW1vcnkucGwgVEFQIHRl c3QgdGhhdCBleGVyY2lzZXMgRFNBIGV4aGF1c3Rpb24sCnZlcmlmaWVzIGVudHJpZXMgc3RpbGwg dHJhY2sgY291bnRlcnMgd2l0aCBOVUxMIHRleHQsIGFuZCBjb25maXJtcwpiYWNrZmlsbCB3b3Jr cyBhZnRlciByYWlzaW5nIHRoZSBsaW1pdC4KClJlbmFtZSAwMTBfcmVzdGFydC5wbCB0byAwMDFf cmVzdGFydC5wbCBmb3IgbmFtaW5nIGNvbnNpc3RlbmN5LgotLS0KIGNvbnRyaWIvcGdfc3RhdF9z dGF0ZW1lbnRzL21lc29uLmJ1aWxkICAgICAgICB8ICAgMSArCiAuLi4vcGdfc3RhdF9zdGF0ZW1l bnRzLS0xLjEzLS0xLjE0LnNxbCAgICAgICAgfCAgMjAgKwogLi4uL3BnX3N0YXRfc3RhdGVtZW50 cy9wZ19zdGF0X3N0YXRlbWVudHMuYyAgIHwgNjk1ICsrKystLS0tLS0tLS0tLS0tLQogLi4uL3Qv ezAxMF9yZXN0YXJ0LnBsID0+IDAwMV9yZXN0YXJ0LnBsfSAgICAgIHwgICAwCiAuLi4vdC8wMDJf cXVlcnlfdGV4dF9tZW1vcnkucGwgICAgICAgICAgICAgICAgfCAxMjQgKysrKwogNSBmaWxlcyBj aGFuZ2VkLCAyODUgaW5zZXJ0aW9ucygrKSwgNTU1IGRlbGV0aW9ucygtKQogcmVuYW1lIGNvbnRy aWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3QvezAxMF9yZXN0YXJ0LnBsID0+IDAwMV9yZXN0YXJ0LnBs fSAoMTAwJSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy90 LzAwMl9xdWVyeV90ZXh0X21lbW9yeS5wbAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9z dGF0ZW1lbnRzL21lc29uLmJ1aWxkIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvbWVzb24u YnVpbGQKaW5kZXggN2ZmYzg5NjQ0OTQuLmEzOTIwNjY5NTQxIDEwMDY0NAotLS0gYS9jb250cmli L3BnX3N0YXRfc3RhdGVtZW50cy9tZXNvbi5idWlsZAorKysgYi9jb250cmliL3BnX3N0YXRfc3Rh dGVtZW50cy9tZXNvbi5idWlsZApAQCAtNzEsNiArNzEsNyBAQCB0ZXN0cyArPSB7CiAgICd0YXAn OiB7CiAgICAgJ3Rlc3RzJzogWwogICAgICAgJ3QvMDAxX3Jlc3RhcnQucGwnLAorICAgICAgJ3Qv MDAyX3F1ZXJ5X3RleHRfbWVtb3J5LnBsJywKICAgICBdLAogICB9LAogfQpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjEzLS0xLjE0 LnNxbCBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy0tMS4x My0tMS4xNC5zcWwKaW5kZXggN2VkNGMxOWViNWEuLjQyYzQxODIzODQwIDEwMDY0NAotLS0gYS9j b250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMtLTEuMTMtLTEuMTQu c3FsCisrKyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy0t MS4xMy0tMS4xNC5zcWwKQEAgLTc5LDMgKzc5LDIzIEBAIEdSQU5UIFNFTEVDVCBPTiBwZ19zdGF0 X3N0YXRlbWVudHMgVE8gUFVCTElDOwogCiAvKiBNYXJrIHJlc2V0IGZ1bmN0aW9ucyBhcyBQQVJB TExFTCBSRVNUUklDVEVEICovCiBBTFRFUiBGVU5DVElPTiBwZ19zdGF0X3N0YXRlbWVudHNfcmVz ZXQoT2lkLCBPaWQsIGJpZ2ludCwgYm9vbGVhbikgUEFSQUxMRUwgUkVTVFJJQ1RFRDsKKworLyog UmVjcmVhdGUgcGdfc3RhdF9zdGF0ZW1lbnRzX2luZm8gd2l0aCBxdWVyeV90ZXh0X3NpemUgY29s dW1uICovCitBTFRFUiBFWFRFTlNJT04gcGdfc3RhdF9zdGF0ZW1lbnRzIERST1AgVklFVyBwZ19z dGF0X3N0YXRlbWVudHNfaW5mbzsKK0FMVEVSIEVYVEVOU0lPTiBwZ19zdGF0X3N0YXRlbWVudHMg RFJPUCBGVU5DVElPTiBwZ19zdGF0X3N0YXRlbWVudHNfaW5mbygpOworRFJPUCBWSUVXIHBnX3N0 YXRfc3RhdGVtZW50c19pbmZvOworRFJPUCBGVU5DVElPTiBwZ19zdGF0X3N0YXRlbWVudHNfaW5m bygpOworCitDUkVBVEUgRlVOQ1RJT04gcGdfc3RhdF9zdGF0ZW1lbnRzX2luZm8oCisgICAgT1VU IGRlYWxsb2MgYmlnaW50LAorICAgIE9VVCBzdGF0c19yZXNldCB0aW1lc3RhbXAgd2l0aCB0aW1l IHpvbmUsCisgICAgT1VUIHF1ZXJ5X3RleHRfc2l6ZSBiaWdpbnQKKykKK1JFVFVSTlMgcmVjb3Jk CitBUyAnTU9EVUxFX1BBVEhOQU1FJworTEFOR1VBR0UgQyBTVFJJQ1QgVk9MQVRJTEUgUEFSQUxM RUwgU0FGRTsKKworQ1JFQVRFIFZJRVcgcGdfc3RhdF9zdGF0ZW1lbnRzX2luZm8gQVMKKyAgU0VM RUNUICogRlJPTSBwZ19zdGF0X3N0YXRlbWVudHNfaW5mbygpOworCitHUkFOVCBTRUxFQ1QgT04g cGdfc3RhdF9zdGF0ZW1lbnRzX2luZm8gVE8gUFVCTElDOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9w Z19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMgYi9jb250cmliL3BnX3N0YXRf c3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYwppbmRleCAyMDA0Y2FkOTFmNy4uYzVmZDhh MDhkYjQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3Rh dGVtZW50cy5jCisrKyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVt ZW50cy5jCkBAIC01LDkgKzUsMTEgQEAKICAqCQl1c2FnZSBhY3Jvc3MgYSB3aG9sZSBkYXRhYmFz ZSBjbHVzdGVyLgogICoKICAqIEV4ZWN1dGlvbiBjb3N0cyBhcmUgdG90YWxlZCBmb3IgZWFjaCBk aXN0aW5jdCBzb3VyY2UgcXVlcnksIGFuZCBrZXB0IGluCi0gKiBhIGRzaGFzaCB0YWJsZSByZWdp c3RlcmVkIHZpYSBEU00gcmVnaXN0cnkuICAoV2UgYXR0ZW1wdCB0byBrZWVwIG5vIG1vcmUKLSAq IGRpc3RpbmN0IHF1ZXJpZXMgdGhhbiB0aGUgY29uZmlndXJlZCBsaW1pdCwgYnV0IGJlY2F1c2Ug ZHluYW1pYyBzaGFyZWQKLSAqIG1lbW9yeSBpcyB1c2VkLCB0aGUgY291bnQgbWF5IGJyaWVmbHkg ZXhjZWVkIGl0LikKKyAqIGEgZHNoYXNoIHRhYmxlIHJlZ2lzdGVyZWQgdmlhIERTTSByZWdpc3Ry eS4gIFF1ZXJ5IHRleHQgaXMgc3RvcmVkIGluIGEKKyAqIHNlcGFyYXRlIERTQSBhcmVhIChhbHNv IHZpYSBEU00gcmVnaXN0cnkpLCBlbGltaW5hdGluZyB0aGUgbmVlZCBmb3IKKyAqIGV4dGVybmFs IGZpbGUgSS9PLiAgKFdlIGF0dGVtcHQgdG8ga2VlcCBubyBtb3JlIGRpc3RpbmN0IHF1ZXJpZXMg dGhhbgorICogdGhlIGNvbmZpZ3VyZWQgbGltaXQsIGJ1dCBiZWNhdXNlIGR5bmFtaWMgc2hhcmVk IG1lbW9yeSBpcyB1c2VkLCB0aGUKKyAqIGNvdW50IG1heSBicmllZmx5IGV4Y2VlZCBpdC4pCiAg KgogICogU3RhcnRpbmcgaW4gUG9zdGdyZXMgOS4yLCB0aGlzIG1vZHVsZSBub3JtYWxpemVkIHF1 ZXJ5IGVudHJpZXMuICBBcyBvZgogICogUG9zdGdyZXMgMTQsIHRoZSBub3JtYWxpemF0aW9uIGlz IGRvbmUgYnkgdGhlIGNvcmUgaWYgY29tcHV0ZV9xdWVyeV9pZCBpcwpAQCAtMTUsMTMgKzE3LDEw IEBACiAgKgogICogVG8gZmFjaWxpdGF0ZSBwcmVzZW50aW5nIGVudHJpZXMgdG8gdXNlcnMsIHdl IGNyZWF0ZSAicmVwcmVzZW50YXRpdmUiIHF1ZXJ5CiAgKiBzdHJpbmdzIGluIHdoaWNoIGNvbnN0 YW50cyBhcmUgcmVwbGFjZWQgd2l0aCBwYXJhbWV0ZXIgc3ltYm9scyAoJG4pLCB0bwotICogbWFr ZSBpdCBjbGVhcmVyIHdoYXQgYSBub3JtYWxpemVkIGVudHJ5IGNhbiByZXByZXNlbnQuICBUbyBh dm9pZCBoYXZpbmcKLSAqIHRvIHRydW5jYXRlIG92ZXJzaXplZCBxdWVyeSBzdHJpbmdzLCB3ZSBz dG9yZSB0aGVzZSBzdHJpbmdzIGluIGEgdGVtcG9yYXJ5Ci0gKiBleHRlcm5hbCBxdWVyeS10ZXh0 cyBmaWxlLiAgT2Zmc2V0cyBpbnRvIHRoaXMgZmlsZSBhcmUga2VwdCBpbiB0aGUgZHNoYXNoCi0g KiBlbnRyaWVzLgorICogbWFrZSBpdCBjbGVhcmVyIHdoYXQgYSBub3JtYWxpemVkIGVudHJ5IGNh biByZXByZXNlbnQuCiAgKgogICogVGhlIGRzaGFzaCBzZXJ2ZXMgYXMgdGhlIHNvdXJjZS1vZi10 cnV0aCByZWdpc3RyeSBvZiB0cmFja2VkIHF1ZXJpZXMsCi0gKiBzdG9yaW5nIHRoZSBrZXksIGZp bGUgb2Zmc2V0cyB0byB0aGUgcXVlcnkgdGV4dCwgYW5kIGFuIGF0b21pYyByZWZjb3VudAorICog c3RvcmluZyB0aGUga2V5LCBhIERTQSBwb2ludGVyIHRvIHRoZSBxdWVyeSB0ZXh0LCBhbmQgYW4g YXRvbWljIHJlZmNvdW50CiAgKiB1c2VkIGZvciBjbG9jay1zd2VlcCBldmljdGlvbi4gIEFjdHVh bCBjb3VudGVycyAoY2FsbHMsIHRpbWluZywgYnVmZmVycywKICAqIGV0Yy4pIGFyZSBtYWludGFp bmVkIHZpYSBhIGN1c3RvbSBwZ3N0YXQga2luZCB1c2luZyB0aGUgcGVuZGluZy9mbHVzaAogICog aW5mcmFzdHJ1Y3R1cmUsIHNvIGJhY2tlbmRzIGFjY3VtdWxhdGUgc3RhdHMgbG9jYWxseSBhbmQg Zmx1c2ggdGhlbQpAQCAtNTUsOCArNTQsNiBAQAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKICNp bmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDx1bmlzdGQu aD4KIAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3Mv cGFyYWxsZWwuaCIKQEAgLTczLDEyICs3MCwxMCBAQAogI2luY2x1ZGUgIm9wdGltaXplci9wbGFu bmVyLmgiCiAjaW5jbHVkZSAicGFyc2VyL2FuYWx5emUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Rz bV9yZWdpc3RyeS5oIgotI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKLSNpbmNsdWRlICJzdG9yYWdl L2lwYy5oIgotI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgogI2luY2x1ZGUgInRjb3AvdXRpbGl0 eS5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgi CisjaW5jbHVkZSAidXRpbHMvZHNhLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCiAjaW5jbHVk ZSAidXRpbHMvbnVtZXJpYy5oIgogI2luY2x1ZGUgInV0aWxzL3Bnc3RhdF9pbnRlcm5hbC5oIgpA QCAtOTAsMTEgKzg1LDYgQEAgUEdfTU9EVUxFX01BR0lDX0VYVCgKIAkJCQkJLnZlcnNpb24gPSBQ R19WRVJTSU9OCiApOwogCi0vKgotICogTG9jYXRpb24gb2YgZXh0ZXJuYWwgcXVlcnkgdGV4dCBm aWxlLgotICovCi0jZGVmaW5lIFBHU1NfVEVYVF9GSUxFCVBHX1NUQVRfVE1QX0RJUiAiL3Bnc3Nf cXVlcnlfdGV4dHMuc3RhdCIKLQogLyogQ3VzdG9tIHBnc3RhdCBraW5kIElEICovCiAjZGVmaW5l IFBHU1RBVF9LSU5EX1BHU1MJMjUKIApAQCAtMjI1LDEwICsyMTUsNiBAQCB0eXBlZGVmIHN0cnVj dCBQZ1N0YXRTaGFyZWRfUGdzcwogLyoKICAqIEVudHJ5IGluIHRoZSBkc2hhc2ggc291cmNlLW9m LXRydXRoIHJlZ2lzdHJ5LgogICoKLSAqIE5vdGU6IGluIGV2ZW50IG9mIGEgZmFpbHVyZSBpbiBn YXJiYWdlIGNvbGxlY3Rpb24gb2YgdGhlIHF1ZXJ5IHRleHQgZmlsZSwKLSAqIHdlIHJlc2V0IHF1 ZXJ5X29mZnNldCB0byB6ZXJvIGFuZCBxdWVyeV9sZW4gdG8gLTEuICBUaGlzIHdpbGwgYmUgc2Vl biBhcwotICogYW4gaW52YWxpZCBzdGF0ZSBieSBxdGV4dF9mZXRjaCgpLgotICoKICAqIE5vdGU6 IEtleSBtdXN0IGJlIGZpcnN0IGZvciBkc2hhc2guCiAgKi8KIHR5cGVkZWYgc3RydWN0IHBnc3NF bnRyeQpAQCAtMjM2LDcgKzIyMiw3IEBAIHR5cGVkZWYgc3RydWN0IHBnc3NFbnRyeQogCXBnc3NI YXNoS2V5IGtleTsKIAlwZ19hdG9taWNfdWludDMyIHJlZmNvdW50OwkvKiBjbG9jay1zd2VlcDog ZGVjcmVtZW50ZWQgb24gc3dlZXAsIGV2aWN0IGF0CiAJCQkJCQkJCSAqIDAgKi8KLQlTaXplCQlx dWVyeV9vZmZzZXQ7CS8qIHF1ZXJ5IHRleHQgb2Zmc2V0IGluIGV4dGVybmFsIGZpbGUgKi8KKwlk c2FfcG9pbnRlciBxdWVyeV90ZXh0OwkJLyogRFNBIHBvaW50ZXIgdG8gcXVlcnkgdGV4dCAqLwog CWludAkJCXF1ZXJ5X2xlbjsJCS8qICMgb2YgdmFsaWQgYnl0ZXMgaW4gcXVlcnkgc3RyaW5nLCBv ciAtMSAqLwogCWludAkJCWVuY29kaW5nOwkJLyogcXVlcnkgdGV4dCBlbmNvZGluZyAqLwogCVRp bWVzdGFtcFR6IHN0YXRzX3NpbmNlOwkvKiB0aW1lc3RhbXAgb2YgZW50cnkgYWxsb2NhdGlvbiAq LwpAQCAtMjUzLDEwICsyMzksNiBAQCB0eXBlZGVmIHN0cnVjdCBwZ3NzU2hhcmVkU3RhdGUKIAlw Z19hdG9taWNfdWludDMyIHN3ZWVwX3BhcnRpdGlvbjsJLyogcm90YXRpbmcgaGFuZDogbmV4dCBw YXJ0aXRpb24gdG8KIAkJCQkJCQkJCQkgKiBzd2VlcCAqLwogCVRpbWVzdGFtcFR6IHN0YXRzX3Jl c2V0OwkvKiB0aW1lc3RhbXAgd2l0aCBhbGwgc3RhdHMgcmVzZXQgKi8KLQlzbG9ja190CQltdXRl eDsJCQkvKiBwcm90ZWN0cyBmb2xsb3dpbmcgZmllbGRzIG9ubHk6ICovCi0JU2l6ZQkJZXh0ZW50 OwkJCS8qIGN1cnJlbnQgZXh0ZW50IG9mIHF1ZXJ5IGZpbGUgKi8KLQlpbnQJCQluX3dyaXRlcnM7 CQkvKiBudW1iZXIgb2YgYWN0aXZlIHdyaXRlcnMgdG8gcXVlcnkgZmlsZSAqLwotCWludAkJCWdj X2NvdW50OwkJLyogcXVlcnkgZmlsZSBnYXJiYWdlIGNvbGxlY3Rpb24gY3ljbGUgY291bnQgKi8K IH0gcGdzc1NoYXJlZFN0YXRlOwogCiAvKiBCYWNrZW5kLWxvY2FsIHBlbmRpbmcgZW50cnkgKi8K QEAgLTI4NCw2ICsyNjYsOSBAQCBzdGF0aWMgY29uc3QgZHNoYXNoX3BhcmFtZXRlcnMgcGdzc19k c2hfcGFyYW1zID0gewogLyogR2xvYmFsIHNoYXJlZCBzdGF0ZSAqLwogc3RhdGljIHBnc3NTaGFy ZWRTdGF0ZSAqcGdzc19zaGFyZWQgPSBOVUxMOwogCisvKiBRdWVyeSB0ZXh0IGRzYSBhcmVhICov CitzdGF0aWMgZHNhX2FyZWEgKnBnc3NfcXRleHRfZHNhID0gTlVMTDsKKwogLyogc291cmNlLW9m LXRydXRoIGRzaGFzaCB0YWJsZSAqLwogc3RhdGljIGRzaGFzaF90YWJsZSAqcGdzc19oYXNoID0g TlVMTDsKIApAQCAtMzIyLDE5ICszMDcsMTMgQEAgc3RhdGljIGJvb2wgcGdzc190cmFja191dGls aXR5ID0gdHJ1ZTsJLyogd2hldGhlciB0byB0cmFjayB1dGlsaXR5IGNvbW1hbmRzICovCiBzdGF0 aWMgYm9vbCBwZ3NzX3RyYWNrX3BsYW5uaW5nID0gZmFsc2U7CS8qIHdoZXRoZXIgdG8gdHJhY2sg cGxhbm5pbmcKIAkJCQkJCQkJCQkJICogZHVyYXRpb24gKi8KIHN0YXRpYyBib29sIHBnc3Nfc2F2 ZSA9IHRydWU7CS8qIHdoZXRoZXIgdG8gc2F2ZSBzdGF0cyBhY3Jvc3Mgc2h1dGRvd24gKi8KK3N0 YXRpYyBpbnQJcGdzc19xdWVyeV90ZXh0X21lbW9yeSA9IDQwOTY7CS8qIGluIEtCICovCiAKICNk ZWZpbmUgcGdzc19lbmFibGVkKGxldmVsKSBcCiAJKCFJc1BhcmFsbGVsV29ya2VyKCkgJiYgXAog CShwZ3NzX3RyYWNrID09IFBHU1NfVFJBQ0tfQUxMIHx8IFwKIAkocGdzc190cmFjayA9PSBQR1NT X1RSQUNLX1RPUCAmJiAobGV2ZWwpID09IDApKSkKIAotI2RlZmluZSByZWNvcmRfZ2NfcXRleHRz KCkgXAotCWRvIHsgXAotCQlTcGluTG9ja0FjcXVpcmUoJnBnc3Nfc2hhcmVkLT5tdXRleCk7IFwK LQkJcGdzc19zaGFyZWQtPmdjX2NvdW50Kys7IFwKLQkJU3BpbkxvY2tSZWxlYXNlKCZwZ3NzX3No YXJlZC0+bXV0ZXgpOyBcCi0JfSB3aGlsZSgwKQotCiAvKi0tLS0gRnVuY3Rpb24gZGVjbGFyYXRp b25zIC0tLS0qLwogCiBQR19GVU5DVElPTl9JTkZPX1YxKHBnX3N0YXRfc3RhdGVtZW50c19yZXNl dCk7CkBAIC0zODIsMTYgKzM2MSw5IEBAIHN0YXRpYyB2b2lkIHBnc3Nfc3RvcmUoY29uc3QgY2hh ciAqcXVlcnksIGludDY0IHF1ZXJ5SWQsCiAJCQkJCSAgIFBsYW5uZWRTdG10T3JpZ2luIHBsYW5P cmlnaW4pOwogCiBzdGF0aWMgdm9pZCBlbnRyeV9kZWFsbG9jKHZvaWQpOworc3RhdGljIHZvaWQg cGdzc19hc3NpZ25fcXVlcnlfdGV4dF9tZW1vcnkoaW50IG5ld3ZhbCwgdm9pZCAqZXh0cmEpOwog c3RhdGljIFRpbWVzdGFtcFR6IGVudHJ5X3Jlc2V0KE9pZCB1c2VyaWQsIE9pZCBkYmlkLCBpbnQ2 NCBxdWVyeWlkLCBib29sIG1pbm1heF9vbmx5KTsKIHN0YXRpYyB1aW50NjQgcGdzc19oYXNoX2tl eShwZ3NzSGFzaEtleSAqa2V5KTsKLQotc3RhdGljIGJvb2wgcXRleHRfc3RvcmUoY29uc3QgY2hh ciAqcXVlcnksIGludCBxdWVyeV9sZW4sCi0JCQkJCQlTaXplICpxdWVyeV9vZmZzZXQsIGludCAq Z2NfY291bnQpOwotc3RhdGljIGNoYXIgKnF0ZXh0X2xvYWRfZmlsZShTaXplICpidWZmZXJfc2l6 ZSk7Ci1zdGF0aWMgY2hhciAqcXRleHRfZmV0Y2goU2l6ZSBxdWVyeV9vZmZzZXQsIGludCBxdWVy eV9sZW4sCi0JCQkJCQkgY2hhciAqYnVmZmVyLCBTaXplIGJ1ZmZlcl9zaXplKTsKLXN0YXRpYyBi b29sIG5lZWRfZ2NfcXRleHRzKHZvaWQpOwotc3RhdGljIHZvaWQgZ2NfcXRleHRzKHZvaWQpOwog c3RhdGljIGNoYXIgKmdlbmVyYXRlX25vcm1hbGl6ZWRfcXVlcnkoY29uc3QgSnVtYmxlU3RhdGUg KmpzdGF0ZSwKIAkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnF1ZXJ5LAogCQkJCQkJCQkJICAgaW50 IHF1ZXJ5X2xvYywgaW50ICpxdWVyeV9sZW5fcCk7CkBAIC00MDcsNyArMzc5LDYgQEAgc3RhdGlj IHZvaWQgcGdzc190b19zZXJpYWxpemVkX2RhdGEoY29uc3QgUGdTdGF0X0hhc2hLZXkgKmtleSwK IHN0YXRpYyBib29sIHBnc3NfZnJvbV9zZXJpYWxpemVkX2RhdGEoY29uc3QgUGdTdGF0X0hhc2hL ZXkgKmtleSwKIAkJCQkJCQkJCSAgUGdTdGF0U2hhcmVkX0NvbW1vbiAqaGVhZGVyLAogCQkJCQkJ CQkJICBGSUxFICpzdGF0ZmlsZSk7Ci1zdGF0aWMgdm9pZCBwZ3NzX2ZpbmlzaChQZ1N0YXRfU3Rh dHNGaWxlT3Agc3RhdHVzKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQ3VzdG9tIHBnc3Rh dCBraW5kIGRlZmluaXRpb24KQEAgLTQyNyw3ICszOTgsNiBAQCBzdGF0aWMgY29uc3QgUGdTdGF0 X0tpbmRJbmZvIHBnc3Nfa2luZF9pbmZvID0gewogCS5mbHVzaF9wZW5kaW5nX2NiID0gcGdzc19m bHVzaF9wZW5kaW5nX2NiLAogCS50b19zZXJpYWxpemVkX2RhdGEgPSBwZ3NzX3RvX3NlcmlhbGl6 ZWRfZGF0YSwKIAkuZnJvbV9zZXJpYWxpemVkX2RhdGEgPSBwZ3NzX2Zyb21fc2VyaWFsaXplZF9k YXRhLAotCS5maW5pc2ggPSBwZ3NzX2ZpbmlzaCwKIH07CiAKIHN0YXRpYyB1aW50NjQKQEAgLTQ0 NiwxMCArNDE2LDEzIEBAIHBnc3NfaW5pdF9zaG1lbSh2b2lkICpwdHIsIHZvaWQgKmFyZykKIAlw Z19hdG9taWNfaW5pdF91NjQoJnN0YXRlLT5kZWFsbG9jLCAwKTsKIAlwZ19hdG9taWNfaW5pdF91 MzIoJnN0YXRlLT5zd2VlcF9wYXJ0aXRpb24sIDApOwogCXN0YXRlLT5zdGF0c19yZXNldCA9IEdl dEN1cnJlbnRUaW1lc3RhbXAoKTsKLQlTcGluTG9ja0luaXQoJnN0YXRlLT5tdXRleCk7Ci0Jc3Rh dGUtPmV4dGVudCA9IDA7Ci0Jc3RhdGUtPm5fd3JpdGVycyA9IDA7Ci0Jc3RhdGUtPmdjX2NvdW50 ID0gMDsKK30KKworc3RhdGljIHZvaWQKK3Bnc3NfYXNzaWduX3F1ZXJ5X3RleHRfbWVtb3J5KGlu dCBuZXd2YWwsIHZvaWQgKmV4dHJhKQoreworCWlmIChwZ3NzX3F0ZXh0X2RzYSkKKwkJZHNhX3Nl dF9zaXplX2xpbWl0KHBnc3NfcXRleHRfZHNhLCAoc2l6ZV90KSBuZXd2YWwgKiAxMDI0KTsKIH0K IAogc3RhdGljIHZvaWQKQEAgLTQ2OCw2ICs0NDEsMTIgQEAgcGdzc19hdHRhY2hfc2htZW0odm9p ZCkKIAlpZiAocGdzc19oYXNoID09IE5VTEwpCiAJCXBnc3NfaGFzaCA9IEdldE5hbWVkRFNIYXNo KCJwZ19zdGF0X3N0YXRlbWVudHMiLCAmcGdzc19kc2hfcGFyYW1zLAogCQkJCQkJCQkgICAmZm91 bmQpOworCisJaWYgKHBnc3NfcXRleHRfZHNhID09IE5VTEwpCisJeworCQlwZ3NzX3F0ZXh0X2Rz YSA9IEdldE5hbWVkRFNBKCJwZ19zdGF0X3N0YXRlbWVudHNfcXRleHQiLCAmZm91bmQpOworCQlk c2Ffc2V0X3NpemVfbGltaXQocGdzc19xdGV4dF9kc2EsIChzaXplX3QpIHBnc3NfcXVlcnlfdGV4 dF9tZW1vcnkgKiAxMDI0KTsKKwl9CiB9CiAKIC8qCkBAIC01NDMsNiArNTIyLDE5IEBAIF9QR19p bml0KHZvaWQpCiAJCQkJCQkJIE5VTEwsCiAJCQkJCQkJIE5VTEwpOwogCisJRGVmaW5lQ3VzdG9t SW50VmFyaWFibGUoInBnX3N0YXRfc3RhdGVtZW50cy5xdWVyeV90ZXh0X21lbW9yeSIsCisJCQkJ CQkJIlNldHMgdGhlIG1lbW9yeSBsaW1pdCBmb3IgcXVlcnkgdGV4dCBzdG9yYWdlLiIsCisJCQkJ CQkJTlVMTCwKKwkJCQkJCQkmcGdzc19xdWVyeV90ZXh0X21lbW9yeSwKKwkJCQkJCQk0MDk2LAor CQkJCQkJCTI1NiwKKwkJCQkJCQlNQVhfS0lMT0JZVEVTLAorCQkJCQkJCVBHQ19TSUdIVVAsCisJ CQkJCQkJR1VDX1VOSVRfS0IsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlwZ3NzX2Fzc2lnbl9xdWVy eV90ZXh0X21lbW9yeSwKKwkJCQkJCQlOVUxMKTsKKwogCU1hcmtHVUNQcmVmaXhSZXNlcnZlZCgi cGdfc3RhdF9zdGF0ZW1lbnRzIik7CiAKIAkvKgpAQCAtNjc4LDkgKzY3MCw2IEBAIHBnc3NfdG9f c2VyaWFsaXplZF9kYXRhKGNvbnN0IFBnU3RhdF9IYXNoS2V5ICprZXksCiAJCQkJCQljb25zdCBQ Z1N0YXRTaGFyZWRfQ29tbW9uICpoZWFkZXIsCiAJCQkJCQlGSUxFICpzdGF0ZmlsZSkKIHsKLQlz dGF0aWMgY2hhciAqcWJ1ZmZlciA9IE5VTEw7Ci0Jc3RhdGljIFNpemUgcWJ1ZmZlcl9zaXplID0g MDsKLQogCVBnU3RhdFNoYXJlZF9QZ3NzICpzaHBnc3MgPSAoUGdTdGF0U2hhcmVkX1Bnc3MgKikg aGVhZGVyOwogCXBnc3NFbnRyeSAgKmVudHJ5OwogCWJvb2wJCWZvdW5kID0gZmFsc2U7CkBAIC03 MTMsMTMgKzcwMiw5IEBAIHBnc3NfdG9fc2VyaWFsaXplZF9kYXRhKGNvbnN0IFBnU3RhdF9IYXNo S2V5ICprZXksCiAKIAlwZ3N0YXRfd3JpdGVfY2h1bmtfcyhzdGF0ZmlsZSwgJnNlcmlhbGl6ZWQp OwogCi0JLyogTG9hZCBxdWVyeSB0ZXh0IGZpbGUgb25jZSwgcmV1c2UgYWNyb3NzIGFsbCBlbnRy aWVzICovCi0JaWYgKCFxYnVmZmVyKQotCQlxYnVmZmVyID0gcXRleHRfbG9hZF9maWxlKCZxYnVm ZmVyX3NpemUpOwotCi0JaWYgKHNlcmlhbGl6ZWQucXVlcnlfbGVuID49IDAgJiYgcWJ1ZmZlcikK LQkJcXRleHQgPSBxdGV4dF9mZXRjaChzZXJpYWxpemVkLnF1ZXJ5X29mZnNldCwgc2VyaWFsaXpl ZC5xdWVyeV9sZW4sCi0JCQkJCQkJcWJ1ZmZlciwgcWJ1ZmZlcl9zaXplKTsKKwkvKiBMb2FkIHF1 ZXJ5IHRleHQgKi8KKwlpZiAoRHNhUG9pbnRlcklzVmFsaWQoc2VyaWFsaXplZC5xdWVyeV90ZXh0 KSAmJiBzZXJpYWxpemVkLnF1ZXJ5X2xlbiA+PSAwKQorCQlxdGV4dCA9IGRzYV9nZXRfYWRkcmVz cyhwZ3NzX3F0ZXh0X2RzYSwgc2VyaWFsaXplZC5xdWVyeV90ZXh0KTsKIAogCWlmIChxdGV4dCkK IAl7CkBAIC03MzYsNyArNzIxLDcgQEAgcGdzc190b19zZXJpYWxpemVkX2RhdGEoY29uc3QgUGdT dGF0X0hhc2hLZXkgKmtleSwKIAogLyoKICAqIERlc2VyaWFsaXplIGF1eGlsaWFyeSBkYXRhOiBy ZWNyZWF0ZSB0aGUgZHNoYXNoIGVudHJ5IGFuZCBzdG9yZSBxdWVyeQotICogdGV4dCBpbiB0aGUg ZmlsZS4KKyAqIHRleHQgaW4gcGdzc19xdGV4dF9kc2EuCiAgKi8KIHN0YXRpYyBib29sCiBwZ3Nz X2Zyb21fc2VyaWFsaXplZF9kYXRhKGNvbnN0IFBnU3RhdF9IYXNoS2V5ICprZXksCkBAIC03Nzcs NyArNzYyLDcgQEAgcGdzc19mcm9tX3NlcmlhbGl6ZWRfZGF0YShjb25zdCBQZ1N0YXRfSGFzaEtl eSAqa2V5LAogCQlpZiAocXRleHRfbGVuID49IDApCiAJCXsKIAkJCWNoYXIJICAgKnF0ZXh0Owot CQkJU2l6ZQkJcXVlcnlfb2Zmc2V0OworCQkJZHNhX3BvaW50ZXIgZHA7CiAKIAkJCXF0ZXh0ID0g cGFsbG9jKHF0ZXh0X2xlbiArIDEpOwogCQkJaWYgKCFwZ3N0YXRfcmVhZF9jaHVuayhzdGF0Zmls ZSwgcXRleHQsIHF0ZXh0X2xlbiArIDEpKQpAQCAtNzg3LDE1ICs3NzIsMTYgQEAgcGdzc19mcm9t X3NlcmlhbGl6ZWRfZGF0YShjb25zdCBQZ1N0YXRfSGFzaEtleSAqa2V5LAogCQkJCXJldHVybiBm YWxzZTsKIAkJCX0KIAotCQkJLyogU3RvcmUgaW4gdGhlIHRleHQgZmlsZSAqLwotCQkJaWYgKHF0 ZXh0X3N0b3JlKHF0ZXh0LCBxdGV4dF9sZW4sICZxdWVyeV9vZmZzZXQsIE5VTEwpKQorCQkJZHAg PSBkc2FfYWxsb2NhdGVfZXh0ZW5kZWQocGdzc19xdGV4dF9kc2EsIHF0ZXh0X2xlbiArIDEsIERT QV9BTExPQ19OT19PT00pOworCQkJaWYgKERzYVBvaW50ZXJJc1ZhbGlkKGRwKSkKIAkJCXsKLQkJ CQlkc2hfZW50cnktPnF1ZXJ5X29mZnNldCA9IHF1ZXJ5X29mZnNldDsKKwkJCQltZW1jcHkoZHNh X2dldF9hZGRyZXNzKHBnc3NfcXRleHRfZHNhLCBkcCksIHF0ZXh0LCBxdGV4dF9sZW4gKyAxKTsK KwkJCQlkc2hfZW50cnktPnF1ZXJ5X3RleHQgPSBkcDsKIAkJCQlkc2hfZW50cnktPnF1ZXJ5X2xl biA9IHF0ZXh0X2xlbjsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCQlkc2hfZW50cnktPnF1ZXJ5 X29mZnNldCA9IDA7CisJCQkJZHNoX2VudHJ5LT5xdWVyeV90ZXh0ID0gSW52YWxpZERzYVBvaW50 ZXI7CiAJCQkJZHNoX2VudHJ5LT5xdWVyeV9sZW4gPSAtMTsKIAkJCX0KIApAQCAtODAzLDcgKzc4 OSw3IEBAIHBnc3NfZnJvbV9zZXJpYWxpemVkX2RhdGEoY29uc3QgUGdTdGF0X0hhc2hLZXkgKmtl eSwKIAkJfQogCQllbHNlCiAJCXsKLQkJCWRzaF9lbnRyeS0+cXVlcnlfb2Zmc2V0ID0gMDsKKwkJ CWRzaF9lbnRyeS0+cXVlcnlfdGV4dCA9IEludmFsaWREc2FQb2ludGVyOwogCQkJZHNoX2VudHJ5 LT5xdWVyeV9sZW4gPSAtMTsKIAkJfQogCkBAIC04MjYsMzEgKzgxMiw2IEBAIHBnc3NfZnJvbV9z ZXJpYWxpemVkX2RhdGEoY29uc3QgUGdTdGF0X0hhc2hLZXkgKmtleSwKIAlyZXR1cm4gdHJ1ZTsK IH0KIAotc3RhdGljIHZvaWQKLXBnc3NfZmluaXNoKFBnU3RhdF9TdGF0c0ZpbGVPcCBzdGF0dXMp Ci17Ci0Jc3dpdGNoIChzdGF0dXMpCi0JewotCQljYXNlIFNUQVRTX1dSSVRFOgotCi0JCQkvKgot CQkJICogVGV4dCBoYXMgYmVlbiBzZXJpYWxpemVkIGludG8gdGhlIHBnc3RhdCBmaWxlOyByZW1v dmUgdGhlCi0JCQkgKiBvcmlnaW5hbC4KLQkJCSAqLwotCQkJdW5saW5rKFBHU1NfVEVYVF9GSUxF KTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgU1RBVFNfUkVBRDoKLQkJCS8qIFRleHQgZmlsZSB3YXMg cmVidWlsdCBieSBmcm9tX3NlcmlhbGl6ZWRfZGF0YTsga2VlcCBpdC4gKi8KLQkJCWJyZWFrOwot Ci0JCWNhc2UgU1RBVFNfRElTQ0FSRDoKLQkJCS8qIFN0YXRzIGRpc2NhcmRlZDsgcmVtb3ZlIG9y cGhhbmVkIHRleHQgZmlsZS4gKi8KLQkJCXVubGluayhQR1NTX1RFWFRfRklMRSk7Ci0JCQlicmVh azsKLQl9Ci19Ci0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIHBnc3Nfc3RvcmU6IFJlY29yZCBz dGF0aXN0aWNzIGZvciBvbmUgc3RhdGVtZW50IGV4ZWN1dGlvbi4KICAqCkBAIC05MTIsNyArODcz LDYwIEBAIHBnc3Nfc3RvcmUoY29uc3QgY2hhciAqcXVlcnksIGludDY0IHF1ZXJ5SWQsCiAJCWlm IChjdXIgPCBQR1NTX1JFRl9DQVApCiAJCQlwZ19hdG9taWNfY29tcGFyZV9leGNoYW5nZV91MzIo JmRzaF9lbnRyeS0+cmVmY291bnQsICZjdXIsIGN1ciArIDEpOwogCi0JCWRzaGFzaF9yZWxlYXNl X2xvY2socGdzc19oYXNoLCBkc2hfZW50cnkpOworCQkvKgorCQkgKiBJZiB0ZXh0IHdhcyBsb3N0 IGR1ZSB0byBEU0EgZXhoYXVzdGlvbiwgdHJ5IHRvIGJhY2tmaWxsIG5vdyB0aGF0CisJCSAqIG1v cmUgbWVtb3J5IG1heSBiZSBhdmFpbGFibGUgKGUuZy4gYWZ0ZXIgYSBsaW1pdCBpbmNyZWFzZSAr CisJCSAqIHJlbG9hZCkuCisJCSAqLworCQlpZiAoIURzYVBvaW50ZXJJc1ZhbGlkKGRzaF9lbnRy eS0+cXVlcnlfdGV4dCkpCisJCXsKKwkJCWRzYV9wb2ludGVyIGRwOworCQkJY29uc3QgY2hhciAq c3RvcmVfcXVlcnk7CisJCQlpbnQJCQlzdG9yZV9sZW4gPSBxdWVyeV9sZW47CisKKwkJCS8qCisJ CQkgKiBVcGdyYWRlIHRvIGV4Y2x1c2l2ZSBsb2NrIGZvciBiYWNrZmlsbC4gIEJldHdlZW4gcmVs ZWFzZSBhbmQKKwkJCSAqIHJlLWFjcXVpcmUgdGhlIGVudHJ5IGNvdWxkIGJlIGV2aWN0ZWQgYW5k IHJlLWluc2VydGVkOyB0aGUKKwkJCSAqIHJlLWNoZWNrIGJlbG93IGhhbmRsZXMgdGhhdCBoYXJt bGVzc2x5LgorCQkJICoKKwkJCSAqIFdoZW4ganN0YXRlIGlzIGF2YWlsYWJsZSAoaS5lLiBjYWxs ZWQgZnJvbSBwb3N0X3BhcnNlX2FuYWx5emUpLAorCQkJICogd2Ugbm9ybWFsaXplLiAgV2hlbiBj YWxsZWQgZnJvbSBleGVjdXRvci91dGlsaXR5IGhvb2tzLCBqc3RhdGUKKwkJCSAqIGlzIE5VTEwg c28gd2Ugc3RvcmUgdGhlIHJhdyBxdWVyeSB0ZXh0LgorCQkJICovCisJCQlpZiAoanN0YXRlICYm IGpzdGF0ZS0+Y2xvY2F0aW9uc19jb3VudCA+IDApCisJCQkJbm9ybV9xdWVyeSA9IGdlbmVyYXRl X25vcm1hbGl6ZWRfcXVlcnkoanN0YXRlLCBxdWVyeSwKKwkJCQkJCQkJCQkJCQkgICBxdWVyeV9s b2NhdGlvbiwKKwkJCQkJCQkJCQkJCQkgICAmc3RvcmVfbGVuKTsKKwkJCXN0b3JlX3F1ZXJ5ID0g bm9ybV9xdWVyeSA/IG5vcm1fcXVlcnkgOiBxdWVyeTsKKworCQkJZHNoYXNoX3JlbGVhc2VfbG9j ayhwZ3NzX2hhc2gsIGRzaF9lbnRyeSk7CisJCQlkc2hfZW50cnkgPSBkc2hhc2hfZmluZChwZ3Nz X2hhc2gsICZrZXksIHRydWUpOworCQkJaWYgKGRzaF9lbnRyeSAmJiAhRHNhUG9pbnRlcklzVmFs aWQoZHNoX2VudHJ5LT5xdWVyeV90ZXh0KSkKKwkJCXsKKwkJCQlkcCA9IGRzYV9hbGxvY2F0ZV9l eHRlbmRlZChwZ3NzX3F0ZXh0X2RzYSwgc3RvcmVfbGVuICsgMSwKKwkJCQkJCQkJCQkgICBEU0Ff QUxMT0NfTk9fT09NKTsKKwkJCQlpZiAoRHNhUG9pbnRlcklzVmFsaWQoZHApKQorCQkJCXsKKwkJ CQkJY2hhcgkgICAqZHN0ID0gZHNhX2dldF9hZGRyZXNzKHBnc3NfcXRleHRfZHNhLCBkcCk7CisK KwkJCQkJbWVtY3B5KGRzdCwgc3RvcmVfcXVlcnksIHN0b3JlX2xlbik7CisJCQkJCWRzdFtzdG9y ZV9sZW5dID0gJ1wwJzsKKwkJCQkJZHNoX2VudHJ5LT5xdWVyeV90ZXh0ID0gZHA7CisJCQkJCWRz aF9lbnRyeS0+cXVlcnlfbGVuID0gc3RvcmVfbGVuOworCQkJCQlkc2hfZW50cnktPmVuY29kaW5n ID0gZW5jb2Rpbmc7CisJCQkJfQorCQkJfQorCQkJaWYgKGRzaF9lbnRyeSkKKwkJCQlkc2hhc2hf cmVsZWFzZV9sb2NrKHBnc3NfaGFzaCwgZHNoX2VudHJ5KTsKKworCQkJaWYgKG5vcm1fcXVlcnkp CisJCQl7CisJCQkJcGZyZWUobm9ybV9xdWVyeSk7CisJCQkJbm9ybV9xdWVyeSA9IE5VTEw7CisJ CQl9CisJCX0KKwkJZWxzZQorCQkJZHNoYXNoX3JlbGVhc2VfbG9jayhwZ3NzX2hhc2gsIGRzaF9l bnRyeSk7CiAKIAkJLyogSWYganN0YXRlIGlzIHByb3ZpZGVkIGFuZCBraW5kIGlzIFBHU1NfSU5W QUxJRCwgbm90aGluZyBtb3JlIHRvIGRvICovCiAJCWlmIChqc3RhdGUgJiYga2luZCA9PSBQR1NT X0lOVkFMSUQpCkBAIC05MjAsNDUgKzkzNCwzOSBAQCBwZ3NzX3N0b3JlKGNvbnN0IGNoYXIgKnF1 ZXJ5LCBpbnQ2NCBxdWVyeUlkLAogCX0KIAllbHNlCiAJewotCQlTaXplCQlxdWVyeV9vZmZzZXQ7 Ci0JCWludAkJCWdjX2NvdW50OwotCQlib29sCQlzdG9yZWQ7Ci0JCWJvb2wJCWRvX2djOwotCiAJ CS8qIFNsb3cgcGF0aDogaW5zZXJ0IHdpdGggZXhjbHVzaXZlIGxvY2sgKi8KLQkJaWYgKGpzdGF0 ZSkKLQkJewotCQkJbm9ybV9xdWVyeSA9IGdlbmVyYXRlX25vcm1hbGl6ZWRfcXVlcnkoanN0YXRl LCBxdWVyeSwKLQkJCQkJCQkJCQkJCSAgIHF1ZXJ5X2xvY2F0aW9uLAotCQkJCQkJCQkJCQkJICAg JnF1ZXJ5X2xlbik7Ci0JCX0KLQotCQkvKiBTdG9yZSBxdWVyeSB0ZXh0IGluIHRoZSBmaWxlICov Ci0JCXN0b3JlZCA9IHF0ZXh0X3N0b3JlKG5vcm1fcXVlcnkgPyBub3JtX3F1ZXJ5IDogcXVlcnks IHF1ZXJ5X2xlbiwKLQkJCQkJCQkgJnF1ZXJ5X29mZnNldCwgJmdjX2NvdW50KTsKLQotCQkvKgot CQkgKiBEZXRlcm1pbmUgd2hldGhlciB3ZSBuZWVkIHRvIGdhcmJhZ2UgY29sbGVjdCBleHRlcm5h bCBxdWVyeSB0ZXh0cy4KLQkJICovCi0JCWRvX2djID0gbmVlZF9nY19xdGV4dHMoKTsKLQogCQlk c2hfZW50cnkgPSBkc2hhc2hfZmluZF9vcl9pbnNlcnQocGdzc19oYXNoLCAma2V5LCAmZm91bmQp OwogCQlpZiAoIWZvdW5kKQogCQl7CisJCQlkc2FfcG9pbnRlciBkcDsKKwogCQkJcGdfYXRvbWlj X2luaXRfdTMyKCZkc2hfZW50cnktPnJlZmNvdW50LCAxKTsKIAkJCWRzaF9lbnRyeS0+c3RhdHNf c2luY2UgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CiAJCQlkc2hfZW50cnktPm1pbm1heF9zdGF0 c19zaW5jZSA9IGRzaF9lbnRyeS0+c3RhdHNfc2luY2U7Ci0JCQlkc2hfZW50cnktPmVuY29kaW5n ID0gZW5jb2Rpbmc7CiAKLQkJCWlmIChzdG9yZWQpCisJCQlpZiAoanN0YXRlKQorCQkJeworCQkJ CW5vcm1fcXVlcnkgPSBnZW5lcmF0ZV9ub3JtYWxpemVkX3F1ZXJ5KGpzdGF0ZSwgcXVlcnksCisJ CQkJCQkJCQkJCQkJICAgcXVlcnlfbG9jYXRpb24sCisJCQkJCQkJCQkJCQkJICAgJnF1ZXJ5X2xl bik7CisJCQl9CisKKwkJCWRwID0gZHNhX2FsbG9jYXRlX2V4dGVuZGVkKHBnc3NfcXRleHRfZHNh LCBxdWVyeV9sZW4gKyAxLCBEU0FfQUxMT0NfTk9fT09NKTsKKwkJCWlmIChEc2FQb2ludGVySXNW YWxpZChkcCkpCiAJCQl7Ci0JCQkJZHNoX2VudHJ5LT5xdWVyeV9vZmZzZXQgPSBxdWVyeV9vZmZz ZXQ7CisJCQkJY2hhcgkgICAqZHN0ID0gZHNhX2dldF9hZGRyZXNzKHBnc3NfcXRleHRfZHNhLCBk cCk7CisKKwkJCQltZW1jcHkoZHN0LCBub3JtX3F1ZXJ5ID8gbm9ybV9xdWVyeSA6IHF1ZXJ5LCBx dWVyeV9sZW4pOworCQkJCWRzdFtxdWVyeV9sZW5dID0gJ1wwJzsKKwkJCQlkc2hfZW50cnktPnF1 ZXJ5X3RleHQgPSBkcDsKIAkJCQlkc2hfZW50cnktPnF1ZXJ5X2xlbiA9IHF1ZXJ5X2xlbjsKKwkJ CQlkc2hfZW50cnktPmVuY29kaW5nID0gZW5jb2Rpbmc7CiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0J CQkJZHNoX2VudHJ5LT5xdWVyeV9vZmZzZXQgPSAwOworCQkJCWRzaF9lbnRyeS0+cXVlcnlfdGV4 dCA9IEludmFsaWREc2FQb2ludGVyOwogCQkJCWRzaF9lbnRyeS0+cXVlcnlfbGVuID0gLTE7CisJ CQkJZHNoX2VudHJ5LT5lbmNvZGluZyA9IGVuY29kaW5nOwogCQkJfQogCiAJCQlkc2hhc2hfcmVs ZWFzZV9sb2NrKHBnc3NfaGFzaCwgZHNoX2VudHJ5KTsKQEAgLTk2NiwxMCArOTc0LDYgQEAgcGdz c19zdG9yZShjb25zdCBjaGFyICpxdWVyeSwgaW50NjQgcXVlcnlJZCwKIAkJCXBnX2F0b21pY19m ZXRjaF9hZGRfdTY0KCZwZ3NzX3NoYXJlZC0+bmVudHJpZXMsIDEpOwogCQkJZW50cnlfZGVhbGxv YygpOwogCi0JCQkvKiBJZiBuZWVkZWQsIHBlcmZvcm0gZ2FyYmFnZSBjb2xsZWN0aW9uICovCi0J CQlpZiAoZG9fZ2MpCi0JCQkJZ2NfcXRleHRzKCk7Ci0KIAkJCWlmIChqc3RhdGUgJiYga2luZCA9 PSBQR1NTX0lOVkFMSUQpCiAJCQl7CiAJCQkJaWYgKG5vcm1fcXVlcnkpCkBAIC05ODcsMTEgKzk5 MSw3IEBAIHBnc3Nfc3RvcmUoY29uc3QgY2hhciAqcXVlcnksIGludDY0IHF1ZXJ5SWQsCiAJCQlk c2hhc2hfcmVsZWFzZV9sb2NrKHBnc3NfaGFzaCwgZHNoX2VudHJ5KTsKIAogCQkJaWYgKGpzdGF0 ZSAmJiBraW5kID09IFBHU1NfSU5WQUxJRCkKLQkJCXsKLQkJCQlpZiAobm9ybV9xdWVyeSkKLQkJ CQkJcGZyZWUobm9ybV9xdWVyeSk7CiAJCQkJcmV0dXJuOwotCQkJfQogCQl9CiAJfQogCkBAIC0x NTk0LDggKzE1OTQsNiBAQCBwZ19zdGF0X3N0YXRlbWVudHNfaW50ZXJuYWwoRnVuY3Rpb25DYWxs SW5mbyBmY2luZm8sCiAJcGdzc0VudHJ5ICAqZW50cnk7CiAJT2lkCQkJdXNlcmlkID0gR2V0VXNl cklkKCk7CiAJYm9vbAkJaXNfYWxsb3dlZF9yb2xlOwotCWNoYXIJICAgKnFidWZmZXIgPSBOVUxM OwotCVNpemUJCXFidWZmZXJfc2l6ZSA9IDA7CiAKIAlpc19hbGxvd2VkX3JvbGUgPSBoYXNfcHJp dnNfb2Zfcm9sZSh1c2VyaWQsIFJPTEVfUEdfUkVBRF9BTExfU1RBVFMpOwogCkBAIC0xNjU5LDEw ICsxNjU3LDYgQEAgcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8g ZmNpbmZvLAogCQkJZWxvZyhFUlJPUiwgImluY29ycmVjdCBudW1iZXIgb2Ygb3V0cHV0IGFyZ3Vt ZW50cyIpOwogCX0KIAotCS8qIExvYWQgdGhlIHF1ZXJ5IHRleHQgZmlsZSAqLwotCWlmIChzaG93 dGV4dCkKLQkJcWJ1ZmZlciA9IHF0ZXh0X2xvYWRfZmlsZSgmcWJ1ZmZlcl9zaXplKTsKLQogCWRz aGFzaF9zZXFfaW5pdCgmc3RhdHVzLCBwZ3NzX2hhc2gsIGZhbHNlKTsKIAl3aGlsZSAoKGVudHJ5 ID0gZHNoYXNoX3NlcV9uZXh0KCZzdGF0dXMpKSAhPSBOVUxMKQogCXsKQEAgLTE3MDQsMTMgKzE2 OTgsOSBAQCBwZ19zdGF0X3N0YXRlbWVudHNfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2lu Zm8sCiAKIAkJCWlmIChzaG93dGV4dCkKIAkJCXsKLQkJCQljaGFyCSAgICpxc3RyID0gcXRleHRf ZmV0Y2goZW50cnktPnF1ZXJ5X29mZnNldCwKLQkJCQkJCQkJCQkJICAgZW50cnktPnF1ZXJ5X2xl biwKLQkJCQkJCQkJCQkJICAgcWJ1ZmZlciwKLQkJCQkJCQkJCQkJICAgcWJ1ZmZlcl9zaXplKTsK LQotCQkJCWlmIChxc3RyKQorCQkJCWlmIChEc2FQb2ludGVySXNWYWxpZChlbnRyeS0+cXVlcnlf dGV4dCkgJiYgZW50cnktPnF1ZXJ5X2xlbiA+PSAwKQogCQkJCXsKKwkJCQkJY2hhcgkgICAqcXN0 ciA9IGRzYV9nZXRfYWRkcmVzcyhwZ3NzX3F0ZXh0X2RzYSwgZW50cnktPnF1ZXJ5X3RleHQpOwog CQkJCQljaGFyCSAgICplbmMgPSBwZ19hbnlfdG9fc2VydmVyKHFzdHIsIGVudHJ5LT5xdWVyeV9s ZW4sIGVudHJ5LT5lbmNvZGluZyk7CiAKIAkJCQkJdmFsdWVzW2krK10gPSBDU3RyaW5nR2V0VGV4 dERhdHVtKGVuYyk7CkBAIC0xODUwLDEzICsxODQwLDEwIEBAIHBnX3N0YXRfc3RhdGVtZW50c19p bnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMo cnNpbmZvLT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywgdmFsdWVzLCBudWxscyk7CiAJfQog CWRzaGFzaF9zZXFfdGVybSgmc3RhdHVzKTsKLQotCWlmIChxYnVmZmVyKQotCQlwZnJlZShxYnVm ZmVyKTsKIH0KIAogLyogTnVtYmVyIG9mIG91dHB1dCBhcmd1bWVudHMgKGNvbHVtbnMpIGZvciBw Z19zdGF0X3N0YXRlbWVudHNfaW5mbyAqLwotI2RlZmluZSBQR19TVEFUX1NUQVRFTUVOVFNfSU5G T19DT0xTCTIKKyNkZWZpbmUgUEdfU1RBVF9TVEFURU1FTlRTX0lORk9fQ09MUwkzCiAKIC8qCiAg KiBSZXR1cm4gc3RhdGlzdGljcyBvZiBwZ19zdGF0X3N0YXRlbWVudHMuCkBAIC0xODc1LDYgKzE4 NjIsNyBAQCBwZ19zdGF0X3N0YXRlbWVudHNfaW5mbyhQR19GVU5DVElPTl9BUkdTKQogCiAJdmFs dWVzWzBdID0gSW50NjRHZXREYXR1bSgoaW50NjQpIHBnX2F0b21pY19yZWFkX3U2NCgmcGdzc19z aGFyZWQtPmRlYWxsb2MpKTsKIAl2YWx1ZXNbMV0gPSBUaW1lc3RhbXBUekdldERhdHVtKHBnc3Nf c2hhcmVkLT5zdGF0c19yZXNldCk7CisJdmFsdWVzWzJdID0gSW50NjRHZXREYXR1bSgoaW50NjQp IGRzYV9nZXRfdG90YWxfc2l6ZShwZ3NzX3F0ZXh0X2RzYSkpOwogCiAJUEdfUkVUVVJOX0RBVFVN KEhlYXBUdXBsZUdldERhdHVtKGhlYXBfZm9ybV90dXBsZSh0dXBkZXNjLCB2YWx1ZXMsIG51bGxz KSkpOwogfQpAQCAtMTk1MSw2ICsxOTM5LDEwIEBAIGVudHJ5X2RlYWxsb2Modm9pZCkKIAkJCQlj b250aW51ZTsKIAkJfQogCisJCS8qIEZyZWUgdGhlIERTQSBxdWVyeSB0ZXh0IGJlZm9yZSBldmlj dGluZyAqLworCQlpZiAoRHNhUG9pbnRlcklzVmFsaWQoZW50cnktPnF1ZXJ5X3RleHQpKQorCQkJ ZHNhX2ZyZWUocGdzc19xdGV4dF9kc2EsIGVudHJ5LT5xdWVyeV90ZXh0KTsKKwogCQkvKiBFdmlj dDogZHJvcCBmcm9tIHBnc3RhdCwgdGhlbiBkZWxldGUgZnJvbSBkc2hhc2ggKi8KIAkJcGdzdGF0 X2Ryb3BfZW50cnkoUEdTVEFUX0tJTkRfUEdTUywgZW50cnktPmtleS5kYmlkLAogCQkJCQkJICBw Z3NzX2hhc2hfa2V5KCZlbnRyeS0+a2V5KSwgdHJ1ZSk7CkBAIC0yMDU5LDYgKzIwNTEsOCBAQCBl bnRyeV9yZXNldChPaWQgdXNlcmlkLCBPaWQgZGJpZCwgaW50NjQgcXVlcnlpZCwgYm9vbCBtaW5t YXhfb25seSkKIAkJewogCQkJdWludDY0CQlvYmppZCA9IHBnc3NfaGFzaF9rZXkoJmtleSk7CiAK KwkJCWlmIChEc2FQb2ludGVySXNWYWxpZChlbnRyeS0+cXVlcnlfdGV4dCkpCisJCQkJZHNhX2Zy ZWUocGdzc19xdGV4dF9kc2EsIGVudHJ5LT5xdWVyeV90ZXh0KTsKIAkJCWRzaGFzaF9kZWxldGVf ZW50cnkocGdzc19oYXNoLCBlbnRyeSk7CiAJCQlwZ19hdG9taWNfZmV0Y2hfc3ViX3U2NCgmcGdz c19zaGFyZWQtPm5lbnRyaWVzLCAxKTsKIAkJCW51bV9yZW1vdmUrKzsKQEAgLTIwNzMsNiArMjA2 Nyw4IEBAIGVudHJ5X3Jlc2V0KE9pZCB1c2VyaWQsIE9pZCBkYmlkLCBpbnQ2NCBxdWVyeWlkLCBi b29sIG1pbm1heF9vbmx5KQogCQl7CiAJCQl1aW50NjQJCW9iamlkID0gcGdzc19oYXNoX2tleSgm a2V5KTsKIAorCQkJaWYgKERzYVBvaW50ZXJJc1ZhbGlkKGVudHJ5LT5xdWVyeV90ZXh0KSkKKwkJ CQlkc2FfZnJlZShwZ3NzX3F0ZXh0X2RzYSwgZW50cnktPnF1ZXJ5X3RleHQpOwogCQkJZHNoYXNo X2RlbGV0ZV9lbnRyeShwZ3NzX2hhc2gsIGVudHJ5KTsKIAkJCXBnX2F0b21pY19mZXRjaF9zdWJf dTY0KCZwZ3NzX3NoYXJlZC0+bmVudHJpZXMsIDEpOwogCQkJbnVtX3JlbW92ZSsrOwpAQCAtMjA5 NCw2ICsyMDkwLDkgQEAgZW50cnlfcmVzZXQoT2lkIHVzZXJpZCwgT2lkIGRiaWQsIGludDY0IHF1 ZXJ5aWQsIGJvb2wgbWlubWF4X29ubHkpCiAJCQkJcGdzc0hhc2hLZXkgZWtleSA9IGVudHJ5LT5r ZXk7CiAJCQkJdWludDY0CQlvYmppZCA9IHBnc3NfaGFzaF9rZXkoJmVrZXkpOwogCisJCQkJaWYg KERzYVBvaW50ZXJJc1ZhbGlkKGVudHJ5LT5xdWVyeV90ZXh0KSkKKwkJCQkJZHNhX2ZyZWUocGdz c19xdGV4dF9kc2EsIGVudHJ5LT5xdWVyeV90ZXh0KTsKKwogCQkJCWRzaGFzaF9kZWxldGVfY3Vy cmVudCgmc3RhdHVzKTsKIAkJCQlwZ19hdG9taWNfZmV0Y2hfc3ViX3U2NCgmcGdzc19zaGFyZWQt Pm5lbnRyaWVzLCAxKTsKIAkJCQludW1fcmVtb3ZlKys7CkBAIC0yMTA1LDQzMCArMjEwNCwxNiBA QCBlbnRyeV9yZXNldChPaWQgdXNlcmlkLCBPaWQgZGJpZCwgaW50NjQgcXVlcnlpZCwgYm9vbCBt aW5tYXhfb25seSkKIAkJZHNoYXNoX3NlcV90ZXJtKCZzdGF0dXMpOwogCX0KIAotCS8qIElmIGFs bCBlbnRyaWVzIHdlcmUgcmVtb3ZlZCwgcmVzZXQgZ2xvYmFsIHN0YXRpc3RpY3MgYW5kIHRleHQg ZmlsZSAqLworCS8qIElmIGFsbCBlbnRyaWVzIHdlcmUgcmVtb3ZlZCwgcmVzZXQgZ2xvYmFsIHN0 YXRpc3RpY3MgKi8KIAlpZiAobnVtX3JlbW92ZSA+IDAgJiYgbnVtX2VudHJpZXMgPT0gbnVtX3Jl bW92ZSkKIAl7Ci0JCUZJTEUJICAgKnFmaWxlOwotCiAJCXBnX2F0b21pY193cml0ZV91NjQoJnBn c3Nfc2hhcmVkLT5kZWFsbG9jLCAwKTsKIAkJcGdzc19zaGFyZWQtPnN0YXRzX3Jlc2V0ID0gc3Rh dHNfcmVzZXQ7Ci0KLQkJLyogV3JpdGUgbmV3IGVtcHR5IHF1ZXJ5IGZpbGUgKi8KLQkJcWZpbGUg PSBBbGxvY2F0ZUZpbGUoUEdTU19URVhUX0ZJTEUsIFBHX0JJTkFSWV9XKTsKLQkJaWYgKHFmaWxl ID09IE5VTEwpCi0JCXsKLQkJCWVyZXBvcnQoTE9HLAotCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9h Y2Nlc3MoKSwKLQkJCQkJIGVycm1zZygiY291bGQgbm90IGNyZWF0ZSBmaWxlIFwiJXNcIjogJW0i LAotCQkJCQkJCVBHU1NfVEVYVF9GSUxFKSkpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJaWYgKGZ0 cnVuY2F0ZShmaWxlbm8ocWZpbGUpLCAwKSAhPSAwKQotCQkJCWVyZXBvcnQoTE9HLAotCQkJCQkJ KGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgdHJ1 bmNhdGUgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJCQkJUEdTU19URVhUX0ZJTEUpKSk7Ci0JCQlG cmVlRmlsZShxZmlsZSk7Ci0JCX0KLQotCQlTcGluTG9ja0FjcXVpcmUoJnBnc3Nfc2hhcmVkLT5t dXRleCk7Ci0JCXBnc3Nfc2hhcmVkLT5leHRlbnQgPSAwOwotCQlTcGluTG9ja1JlbGVhc2UoJnBn c3Nfc2hhcmVkLT5tdXRleCk7Ci0JCXJlY29yZF9nY19xdGV4dHMoKTsKIAl9CiAKIAlyZXR1cm4g c3RhdHNfcmVzZXQ7CiB9CiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFF1ZXJ5IHRleHQgZmls ZSBtYW5hZ2VtZW50Ci0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotLyoKLSAqIFN0b3JlIHF1 ZXJ5IHRleHQgaW4gdGhlIGV4dGVybmFsIGZpbGUuCi0gKgotICogSWYgc3VjY2Vzc2Z1bCwgcmV0 dXJucyB0cnVlLCBhbmQgc3RvcmVzIHRoZSBuZXcgZW50cnkncyBvZmZzZXQgaW4gdGhlIGZpbGUK LSAqIGludG8gKnF1ZXJ5X29mZnNldC4gIEFsc28sIGlmIGdjX2NvdW50IGlzbid0IE5VTEwsICpn Y19jb3VudCBpcyBzZXQgdG8gdGhlCi0gKiBudW1iZXIgb2YgZ2FyYmFnZSBjb2xsZWN0aW9ucyB0 aGF0IGhhdmUgb2NjdXJyZWQgc28gZmFyLgotICoKLSAqIE9uIGZhaWx1cmUsIHJldHVybnMgZmFs c2UuCi0gKi8KLXN0YXRpYyBib29sCi1xdGV4dF9zdG9yZShjb25zdCBjaGFyICpxdWVyeSwgaW50 IHF1ZXJ5X2xlbiwKLQkJCVNpemUgKnF1ZXJ5X29mZnNldCwgaW50ICpnY19jb3VudCkKLXsKLQlT aXplCQlvZmY7Ci0JaW50CQkJZmQ7Ci0KLQkvKgotCSAqIFdlIHVzZSBhIHNwaW5sb2NrIHRvIHBy b3RlY3QgZXh0ZW50L25fd3JpdGVycy9nY19jb3VudCwgc28gdGhhdAotCSAqIG11bHRpcGxlIHBy b2Nlc3NlcyBtYXkgZXhlY3V0ZSB0aGlzIGZ1bmN0aW9uIGNvbmN1cnJlbnRseS4KLQkgKi8KLQlT cGluTG9ja0FjcXVpcmUoJnBnc3Nfc2hhcmVkLT5tdXRleCk7Ci0Jb2ZmID0gcGdzc19zaGFyZWQt PmV4dGVudDsKLQlwZ3NzX3NoYXJlZC0+ZXh0ZW50ICs9IHF1ZXJ5X2xlbiArIDE7Ci0JcGdzc19z aGFyZWQtPm5fd3JpdGVycysrOwotCWlmIChnY19jb3VudCkKLQkJKmdjX2NvdW50ID0gcGdzc19z aGFyZWQtPmdjX2NvdW50OwotCVNwaW5Mb2NrUmVsZWFzZSgmcGdzc19zaGFyZWQtPm11dGV4KTsK LQotCSpxdWVyeV9vZmZzZXQgPSBvZmY7Ci0KLQkvKgotCSAqIERvbid0IGFsbG93IHRoZSBmaWxl IHRvIGdyb3cgbGFyZ2VyIHRoYW4gd2hhdCBxdGV4dF9sb2FkX2ZpbGUgY2FuCi0JICogKHRoZW9y ZXRpY2FsbHkpIGhhbmRsZS4gIFRoaXMgaGFzIGJlZW4gc2VlbiB0byBiZSByZWFjaGFibGUgb24g MzItYml0Ci0JICogcGxhdGZvcm1zLgotCSAqLwotCWlmICh1bmxpa2VseShxdWVyeV9sZW4gPj0g TWF4QWxsb2NIdWdlU2l6ZSAtIG9mZikpCi0JewotCQllcnJubyA9IEVGQklHOwotCQlmZCA9IC0x OwotCQlnb3RvIGVycm9yOwotCX0KLQotCS8qIE5vdyB3cml0ZSB0aGUgZGF0YSBpbnRvIHRoZSBz dWNjZXNzZnVsbHktcmVzZXJ2ZWQgcGFydCBvZiB0aGUgZmlsZSAqLwotCWZkID0gT3BlblRyYW5z aWVudEZpbGUoUEdTU19URVhUX0ZJTEUsIE9fUkRXUiB8IE9fQ1JFQVQgfCBQR19CSU5BUlkpOwot CWlmIChmZCA8IDApCi0JCWdvdG8gZXJyb3I7Ci0KLQlpZiAocGdfcHdyaXRlKGZkLCBxdWVyeSwg cXVlcnlfbGVuLCBvZmYpICE9IHF1ZXJ5X2xlbikKLQkJZ290byBlcnJvcjsKLQlpZiAocGdfcHdy aXRlKGZkLCAiXDAiLCAxLCBvZmYgKyBxdWVyeV9sZW4pICE9IDEpCi0JCWdvdG8gZXJyb3I7Ci0K LQlDbG9zZVRyYW5zaWVudEZpbGUoZmQpOwotCi0JLyogTWFyayBvdXIgd3JpdGUgY29tcGxldGUg Ki8KLQlTcGluTG9ja0FjcXVpcmUoJnBnc3Nfc2hhcmVkLT5tdXRleCk7Ci0JcGdzc19zaGFyZWQt Pm5fd3JpdGVycy0tOwotCVNwaW5Mb2NrUmVsZWFzZSgmcGdzc19zaGFyZWQtPm11dGV4KTsKLQot CXJldHVybiB0cnVlOwotCi1lcnJvcjoKLQllcmVwb3J0KExPRywKLQkJCShlcnJjb2RlX2Zvcl9m aWxlX2FjY2VzcygpLAotCQkJIGVycm1zZygiY291bGQgbm90IHdyaXRlIGZpbGUgXCIlc1wiOiAl bSIsCi0JCQkJCVBHU1NfVEVYVF9GSUxFKSkpOwotCi0JaWYgKGZkID49IDApCi0JCUNsb3NlVHJh bnNpZW50RmlsZShmZCk7Ci0KLQkvKiBNYXJrIG91ciB3cml0ZSBjb21wbGV0ZSAqLwotCVNwaW5M b2NrQWNxdWlyZSgmcGdzc19zaGFyZWQtPm11dGV4KTsKLQlwZ3NzX3NoYXJlZC0+bl93cml0ZXJz LS07Ci0JU3BpbkxvY2tSZWxlYXNlKCZwZ3NzX3NoYXJlZC0+bXV0ZXgpOwotCi0JcmV0dXJuIGZh bHNlOwotfQotCi0vKgotICogUmVhZCB0aGUgZXh0ZXJuYWwgcXVlcnkgdGV4dCBmaWxlIGludG8g YSBwYWxsb2MnZCBidWZmZXIuCi0gKgotICogUmV0dXJucyBOVUxMICh3aXRob3V0IHRocm93aW5n IGFuIGVycm9yKSBpZiB1bmFibGUgdG8gcmVhZCwgZWcKLSAqIGZpbGUgbm90IHRoZXJlIG9yIGlu c3VmZmljaWVudCBtZW1vcnkuCi0gKgotICogT24gc3VjY2VzcywgdGhlIGJ1ZmZlciBzaXplIGlz IGFsc28gcmV0dXJuZWQgaW50byAqYnVmZmVyX3NpemUuCi0gKi8KLXN0YXRpYyBjaGFyICoKLXF0 ZXh0X2xvYWRfZmlsZShTaXplICpidWZmZXJfc2l6ZSkKLXsKLQljaGFyCSAgICpidWY7Ci0JaW50 CQkJZmQ7Ci0Jc3RydWN0IHN0YXQgc3RhdDsKLQlTaXplCQlucmVhZDsKLQotCWZkID0gT3BlblRy YW5zaWVudEZpbGUoUEdTU19URVhUX0ZJTEUsIE9fUkRPTkxZIHwgUEdfQklOQVJZKTsKLQlpZiAo ZmQgPCAwKQotCXsKLQkJaWYgKGVycm5vICE9IEVOT0VOVCkKLQkJCWVyZXBvcnQoTE9HLAotCQkJ CQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkJIGVycm1zZygiY291bGQgbm90IHJl YWQgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJCQlQR1NTX1RFWFRfRklMRSkpKTsKLQkJcmV0dXJu IE5VTEw7Ci0JfQotCi0JLyogR2V0IGZpbGUgbGVuZ3RoICovCi0JaWYgKGZzdGF0KGZkLCAmc3Rh dCkpCi0JewotCQllcmVwb3J0KExPRywKLQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwK LQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgc3RhdCBmaWxlIFwiJXNcIjogJW0iLAotCQkJCQkJUEdT U19URVhUX0ZJTEUpKSk7Ci0JCUNsb3NlVHJhbnNpZW50RmlsZShmZCk7Ci0JCXJldHVybiBOVUxM OwotCX0KLQotCS8qIEFsbG9jYXRlIGJ1ZmZlcjsgYmV3YXJlIHRoYXQgb2ZmX3QgbWlnaHQgYmUg d2lkZXIgdGhhbiBzaXplX3QgKi8KLQlpZiAoc3RhdC5zdF9zaXplIDw9IE1heEFsbG9jSHVnZVNp emUpCi0JCWJ1ZiA9IChjaGFyICopIHBhbGxvY19leHRlbmRlZChzdGF0LnN0X3NpemUsIE1DWFRf QUxMT0NfSFVHRSB8IE1DWFRfQUxMT0NfTk9fT09NKTsKLQllbHNlCi0JCWJ1ZiA9IE5VTEw7Ci0J aWYgKGJ1ZiA9PSBOVUxMKQotCXsKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycmNvZGUoRVJSQ09E RV9PVVRfT0ZfTUVNT1JZKSwKLQkJCQkgZXJybXNnKCJvdXQgb2YgbWVtb3J5IiksCi0JCQkJIGVy cmRldGFpbCgiQ291bGQgbm90IGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgdG8gcmVhZCBmaWxlIFwi JXNcIi4iLAotCQkJCQkJICAgUEdTU19URVhUX0ZJTEUpKSk7Ci0JCUNsb3NlVHJhbnNpZW50Rmls ZShmZCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCS8qCi0JICogT0ssIHNsdXJwIGluIHRoZSBm aWxlLiAgUmVhZCBpbiAxR0Igc2VnbWVudHMgdG8gYXZvaWQgaXNzdWVzIG9uIHNvbWUKLQkgKiBw bGF0Zm9ybXMuCi0JICovCi0JbnJlYWQgPSAwOwotCXdoaWxlIChucmVhZCA8IHN0YXQuc3Rfc2l6 ZSkKLQl7Ci0JCWludAkJCXRvcmVhZCA9IE1pbigxMDI0ICogMTAyNCAqIDEwMjQsIHN0YXQuc3Rf c2l6ZSAtIG5yZWFkKTsKLQotCQllcnJubyA9IDA7Ci0JCWlmIChyZWFkKGZkLCBidWYgKyBucmVh ZCwgdG9yZWFkKSAhPSB0b3JlYWQpCi0JCXsKLQkJCWlmIChlcnJubykKLQkJCQllcmVwb3J0KExP RywKLQkJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkJIGVycm1zZygiY291 bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJCQkJUEdTU19URVhUX0ZJTEUpKSk7 Ci0JCQlwZnJlZShidWYpOwotCQkJQ2xvc2VUcmFuc2llbnRGaWxlKGZkKTsKLQkJCXJldHVybiBO VUxMOwotCQl9Ci0JCW5yZWFkICs9IHRvcmVhZDsKLQl9Ci0KLQlpZiAoQ2xvc2VUcmFuc2llbnRG aWxlKGZkKSAhPSAwKQotCQllcmVwb3J0KExPRywKLQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nl c3MoKSwKLQkJCQkgZXJybXNnKCJjb3VsZCBub3QgY2xvc2UgZmlsZSBcIiVzXCI6ICVtIiwgUEdT U19URVhUX0ZJTEUpKSk7Ci0KLQkqYnVmZmVyX3NpemUgPSBucmVhZDsKLQlyZXR1cm4gYnVmOwot fQotCi0vKgotICogTG9jYXRlIGEgcXVlcnkgdGV4dCBpbiB0aGUgZmlsZSBpbWFnZSBwcmV2aW91 c2x5IHJlYWQgYnkgcXRleHRfbG9hZF9maWxlKCkuCi0gKgotICogV2UgdmFsaWRhdGUgdGhlIGdp dmVuIG9mZnNldC9sZW5ndGgsIGFuZCByZXR1cm4gTlVMTCBpZiBib2d1cy4gIE90aGVyd2lzZSwK LSAqIHRoZSByZXN1bHQgcG9pbnRzIHRvIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyB3aXRoaW4g dGhlIGJ1ZmZlci4KLSAqLwotc3RhdGljIGNoYXIgKgotcXRleHRfZmV0Y2goU2l6ZSBxdWVyeV9v ZmZzZXQsIGludCBxdWVyeV9sZW4sCi0JCQljaGFyICpidWZmZXIsIFNpemUgYnVmZmVyX3NpemUp Ci17Ci0JLyogRmlsZSByZWFkIGZhaWxlZD8gKi8KLQlpZiAoYnVmZmVyID09IE5VTEwpCi0JCXJl dHVybiBOVUxMOwotCS8qIEJvZ3VzIG9mZnNldC9sZW5ndGg/ICovCi0JaWYgKHF1ZXJ5X2xlbiA8 IDAgfHwKLQkJcXVlcnlfb2Zmc2V0ICsgcXVlcnlfbGVuID49IGJ1ZmZlcl9zaXplKQotCQlyZXR1 cm4gTlVMTDsKLQkvKiBBcyBhIGZ1cnRoZXIgc2FuaXR5IGNoZWNrLCBtYWtlIHN1cmUgdGhlcmUn cyBhIHRyYWlsaW5nIG51bGwgKi8KLQlpZiAoYnVmZmVyW3F1ZXJ5X29mZnNldCArIHF1ZXJ5X2xl bl0gIT0gJ1wwJykKLQkJcmV0dXJuIE5VTEw7Ci0JLyogTG9va3MgT0sgKi8KLQlyZXR1cm4gYnVm ZmVyICsgcXVlcnlfb2Zmc2V0OwotfQotCi0vKgotICogRG8gd2UgbmVlZCB0byBnYXJiYWdlLWNv bGxlY3QgdGhlIGV4dGVybmFsIHF1ZXJ5IHRleHQgZmlsZT8KLSAqCi0gKiBXZSBjaGVjayB3aGV0 aGVyIHRoZSBmaWxlIGhhcyBncm93biBleGNlc3NpdmVseSByZWxhdGl2ZSB0byB0aGUgbnVtYmVy Ci0gKiBvZiBlbnRyaWVzIHRyYWNrZWQuCi0gKi8KLXN0YXRpYyBib29sCi1uZWVkX2djX3F0ZXh0 cyh2b2lkKQotewotCVNpemUJCWV4dGVudDsKLQlpbnQJCQluZW50cmllczsKLQotCS8qIFJlYWQg c2hhcmVkIGV4dGVudCBwb2ludGVyICovCi0JU3BpbkxvY2tBY3F1aXJlKCZwZ3NzX3NoYXJlZC0+ bXV0ZXgpOwotCWV4dGVudCA9IHBnc3Nfc2hhcmVkLT5leHRlbnQ7Ci0JU3BpbkxvY2tSZWxlYXNl KCZwZ3NzX3NoYXJlZC0+bXV0ZXgpOwotCi0JbmVudHJpZXMgPSAoaW50KSBwZ19hdG9taWNfcmVh ZF91NjQoJnBnc3Nfc2hhcmVkLT5uZW50cmllcyk7Ci0KLQkvKgotCSAqIERvbid0IHByb2NlZWQg aWYgZmlsZSBkb2VzIG5vdCBleGNlZWQgNTEyIGJ5dGVzIHBlciBwb3NzaWJsZSBlbnRyeS4KLQkg Ki8KLQlpZiAoKHVpbnQ2NCkgZXh0ZW50IDwgKHVpbnQ2NCkgNTEyICogcGdzc19tYXgpCi0JCXJl dHVybiBmYWxzZTsKLQotCS8qCi0JICogRG9uJ3QgcHJvY2VlZCBpZiBmaWxlIGlzIGxlc3MgdGhh biBhYm91dCA1MCUgYmxvYXQuICBXZSBlc3RpbWF0ZSBtZWFuCi0JICogcXVlcnkgbGVuZ3RoIGZy b20gdGhlIGZpbGUgc2l6ZSBhbmQgZW50cnkgY291bnQuCi0JICovCi0JaWYgKG5lbnRyaWVzID4g MCkKLQl7Ci0JCVNpemUJCW1lYW5fcXVlcnlfbGVuID0gZXh0ZW50IC8gbmVudHJpZXM7Ci0KLQkJ aWYgKCh1aW50NjQpIGV4dGVudCA8ICh1aW50NjQpIG1lYW5fcXVlcnlfbGVuICogcGdzc19tYXgg KiAyKQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi0vKgotICog R2FyYmFnZS1jb2xsZWN0IG9ycGhhbmVkIHF1ZXJ5IHRleHRzIGluIGV4dGVybmFsIGZpbGUuCi0g KgotICogVGhpcyByZXdyaXRlcyB0aGUgcXVlcnkgdGV4dCBmaWxlLCBrZWVwaW5nIG9ubHkgdGV4 dHMgcmVmZXJlbmNlZCBieQotICogY3VycmVudCBkc2hhc2ggZW50cmllcywgYW5kIHVwZGF0ZXMg dGhlaXIgb2Zmc2V0cyBhY2NvcmRpbmdseS4KLSAqCi0gKiBOb3RlOiB1bmxpa2UgdGhlIHVwc3Ry ZWFtIGltcGxlbWVudGF0aW9uIHdoaWNoIHJlcXVpcmVkIExXTG9jayBleGNsdXNpdmUsCi0gKiB0 aGlzIHVzZXMgZHNoYXNoIHBhcnRpdGlvbi1sZXZlbCBleGNsdXNpdmUgbG9ja3MgdmlhIHNlcXVl bnRpYWwgc2NhbiB3aXRoCi0gKiBleGNsdXNpdmU9dHJ1ZS4gIFRoaXMgaXMgc2FmZSBiZWNhdXNl IHdlJ3JlIHVwZGF0aW5nIGVudHJ5IG9mZnNldHMgaW4tcGxhY2UKLSAqIGFuZCB0aGUgZmlsZSBp cyBndWFyYW50ZWVkIG5vdCB0byBncm93IGR1cmluZyBHQyAobm8gbmV3IHdyaXRlcnMgY2FuIGdl dAotICogb2Zmc2V0cyBpbnRvIHRoZSBvbGQgcmVnaW9uIGFmdGVyIHdlJ3ZlIHJlc2V0IHRoZSBl eHRlbnQpLgotICovCi1zdGF0aWMgdm9pZAotZ2NfcXRleHRzKHZvaWQpCi17Ci0JY2hhcgkgICAq cWJ1ZmZlcjsKLQlTaXplCQlxYnVmZmVyX3NpemU7Ci0JRklMRQkgICAqcWZpbGUgPSBOVUxMOwot CWRzaGFzaF9zZXFfc3RhdHVzIHN0YXR1czsKLQlwZ3NzRW50cnkgICplbnRyeTsKLQlTaXplCQll eHRlbnQ7Ci0KLQlpZiAoIW5lZWRfZ2NfcXRleHRzKCkpCi0JCXJldHVybjsKLQotCS8qCi0JICog TG9hZCB0aGUgb2xkIHRleHRzIGZpbGUuICBJZiB3ZSBmYWlsIChvdXQgb2YgbWVtb3J5LCBmb3Ig aW5zdGFuY2UpLAotCSAqIGludmFsaWRhdGUgcXVlcnkgdGV4dHMuCi0JICovCi0JcWJ1ZmZlciA9 IHF0ZXh0X2xvYWRfZmlsZSgmcWJ1ZmZlcl9zaXplKTsKLQlpZiAocWJ1ZmZlciA9PSBOVUxMKQot CQlnb3RvIGdjX2ZhaWw7Ci0KLQkvKgotCSAqIFdlIG92ZXJ3cml0ZSB0aGUgcXVlcnkgdGV4dHMg ZmlsZSBpbiBwbGFjZSwgc28gYXMgdG8gcmVkdWNlIHRoZSByaXNrIG9mCi0JICogYW4gb3V0LW9m LWRpc2stc3BhY2UgZmFpbHVyZS4KLQkgKi8KLQlxZmlsZSA9IEFsbG9jYXRlRmlsZShQR1NTX1RF WFRfRklMRSwgUEdfQklOQVJZX1cpOwotCWlmIChxZmlsZSA9PSBOVUxMKQotCXsKLQkJZXJlcG9y dChMT0csCi0JCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJIGVycm1zZygiY291 bGQgbm90IHdyaXRlIGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJCQlQR1NTX1RFWFRfRklMRSkpKTsK LQkJZ290byBnY19mYWlsOwotCX0KLQotCWV4dGVudCA9IDA7Ci0KLQlkc2hhc2hfc2VxX2luaXQo JnN0YXR1cywgcGdzc19oYXNoLCB0cnVlKTsKLQl3aGlsZSAoKGVudHJ5ID0gZHNoYXNoX3NlcV9u ZXh0KCZzdGF0dXMpKSAhPSBOVUxMKQotCXsKLQkJaW50CQkJcXVlcnlfbGVuID0gZW50cnktPnF1 ZXJ5X2xlbjsKLQkJY2hhcgkgICAqcXJ5ID0gcXRleHRfZmV0Y2goZW50cnktPnF1ZXJ5X29mZnNl dCwKLQkJCQkJCQkJCSAgcXVlcnlfbGVuLAotCQkJCQkJCQkJICBxYnVmZmVyLAotCQkJCQkJCQkJ ICBxYnVmZmVyX3NpemUpOwotCi0JCWlmIChxcnkgPT0gTlVMTCkKLQkJewotCQkJLyogVHJvdWJs ZSAuLi4gZHJvcCB0aGUgdGV4dCAqLwotCQkJZW50cnktPnF1ZXJ5X29mZnNldCA9IDA7Ci0JCQll bnRyeS0+cXVlcnlfbGVuID0gLTE7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChmd3JpdGUo cXJ5LCAxLCBxdWVyeV9sZW4gKyAxLCBxZmlsZSkgIT0gcXVlcnlfbGVuICsgMSkKLQkJewotCQkJ ZXJlcG9ydChMT0csCi0JCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkgZXJy bXNnKCJjb3VsZCBub3Qgd3JpdGUgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJCQlQR1NTX1RFWFRf RklMRSkpKTsKLQkJCWRzaGFzaF9zZXFfdGVybSgmc3RhdHVzKTsKLQkJCWdvdG8gZ2NfZmFpbDsK LQkJfQotCi0JCWVudHJ5LT5xdWVyeV9vZmZzZXQgPSBleHRlbnQ7Ci0JCWV4dGVudCArPSBxdWVy eV9sZW4gKyAxOwotCX0KLQlkc2hhc2hfc2VxX3Rlcm0oJnN0YXR1cyk7Ci0KLQkvKgotCSAqIFRy dW5jYXRlIGF3YXkgYW55IG5vdy11bnVzZWQgc3BhY2UuCi0JICovCi0JaWYgKGZ0cnVuY2F0ZShm aWxlbm8ocWZpbGUpLCBleHRlbnQpICE9IDApCi0JCWVyZXBvcnQoTE9HLAotCQkJCShlcnJjb2Rl X2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCSBlcnJtc2coImNvdWxkIG5vdCB0cnVuY2F0ZSBmaWxl IFwiJXNcIjogJW0iLAotCQkJCQkJUEdTU19URVhUX0ZJTEUpKSk7Ci0KLQlpZiAoRnJlZUZpbGUo cWZpbGUpKQotCXsKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNz KCksCi0JCQkJIGVycm1zZygiY291bGQgbm90IHdyaXRlIGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJ CQlQR1NTX1RFWFRfRklMRSkpKTsKLQkJcWZpbGUgPSBOVUxMOwotCQlnb3RvIGdjX2ZhaWw7Ci0J fQotCi0JZWxvZyhERUJVRzEsICJwZ3NzIGdjIG9mIHF1ZXJpZXMgZmlsZSBzaHJ1bmsgc2l6ZSBm cm9tICV6dSB0byAlenUiLAotCQkgcGdzc19zaGFyZWQtPmV4dGVudCwgZXh0ZW50KTsKLQotCS8q IFJlc2V0IHRoZSBzaGFyZWQgZXh0ZW50IHBvaW50ZXIgKi8KLQlTcGluTG9ja0FjcXVpcmUoJnBn c3Nfc2hhcmVkLT5tdXRleCk7Ci0JcGdzc19zaGFyZWQtPmV4dGVudCA9IGV4dGVudDsKLQlTcGlu TG9ja1JlbGVhc2UoJnBnc3Nfc2hhcmVkLT5tdXRleCk7Ci0KLQlwZnJlZShxYnVmZmVyKTsKLQot CXJlY29yZF9nY19xdGV4dHMoKTsKLQotCXJldHVybjsKLQotZ2NfZmFpbDoKLQkvKiBjbGVhbiB1 cCByZXNvdXJjZXMgKi8KLQlpZiAocWZpbGUpCi0JCUZyZWVGaWxlKHFmaWxlKTsKLQlpZiAocWJ1 ZmZlcikKLQkJcGZyZWUocWJ1ZmZlcik7Ci0KLQkvKgotCSAqIFNpbmNlIHRoZSBjb250ZW50cyBv ZiB0aGUgZXh0ZXJuYWwgZmlsZSBhcmUgbm93IHVuY2VydGFpbiwgbWFyayBhbGwKLQkgKiBkc2hh c2ggZW50cmllcyBhcyBoYXZpbmcgaW52YWxpZCB0ZXh0cy4KLQkgKi8KLQlkc2hhc2hfc2VxX2lu aXQoJnN0YXR1cywgcGdzc19oYXNoLCB0cnVlKTsKLQl3aGlsZSAoKGVudHJ5ID0gZHNoYXNoX3Nl cV9uZXh0KCZzdGF0dXMpKSAhPSBOVUxMKQotCXsKLQkJZW50cnktPnF1ZXJ5X29mZnNldCA9IDA7 Ci0JCWVudHJ5LT5xdWVyeV9sZW4gPSAtMTsKLQl9Ci0JZHNoYXNoX3NlcV90ZXJtKCZzdGF0dXMp OwotCi0JLyoKLQkgKiBEZXN0cm95IHRoZSBxdWVyeSB0ZXh0IGZpbGUgYW5kIGNyZWF0ZSBhIG5l dywgZW1wdHkgb25lCi0JICovCi0JKHZvaWQpIHVubGluayhQR1NTX1RFWFRfRklMRSk7Ci0JcWZp bGUgPSBBbGxvY2F0ZUZpbGUoUEdTU19URVhUX0ZJTEUsIFBHX0JJTkFSWV9XKTsKLQlpZiAocWZp bGUgPT0gTlVMTCkKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNz KCksCi0JCQkJIGVycm1zZygiY291bGQgbm90IHJlY3JlYXRlIGZpbGUgXCIlc1wiOiAlbSIsCi0J CQkJCQlQR1NTX1RFWFRfRklMRSkpKTsKLQllbHNlCi0JCUZyZWVGaWxlKHFmaWxlKTsKLQotCS8q IFJlc2V0IHRoZSBzaGFyZWQgZXh0ZW50IHBvaW50ZXIgKi8KLQlTcGluTG9ja0FjcXVpcmUoJnBn c3Nfc2hhcmVkLT5tdXRleCk7Ci0JcGdzc19zaGFyZWQtPmV4dGVudCA9IDA7Ci0JU3BpbkxvY2tS ZWxlYXNlKCZwZ3NzX3NoYXJlZC0+bXV0ZXgpOwotCi0JcmVjb3JkX2djX3F0ZXh0cygpOwotfQot CiAvKgogICogR2VuZXJhdGUgYSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIHF1ZXJ5IHN0cmlu ZyB0aGF0IHdpbGwgYmUgdXNlZCB0bwogICogcmVwcmVzZW50IGFsbCBzaW1pbGFyIHF1ZXJpZXMu CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy90LzAxMF9yZXN0YXJ0LnBs IGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvdC8wMDFfcmVzdGFydC5wbApzaW1pbGFyaXR5 IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvdC8wMTBf cmVzdGFydC5wbApyZW5hbWUgdG8gY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvdC8wMDFfcmVz dGFydC5wbApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvdC8wMDJfcXVl cnlfdGV4dF9tZW1vcnkucGwgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy90LzAwMl9xdWVy eV90ZXh0X21lbW9yeS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u NTBiMDAxNTM2MjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50 cy90LzAwMl9xdWVyeV90ZXh0X21lbW9yeS5wbApAQCAtMCwwICsxLDEyNCBAQAorIyBDb3B5cmln aHQgKGMpIDIwMDgtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwor IyBUZXN0cyBmb3IgcGdfc3RhdF9zdGF0ZW1lbnRzLnF1ZXJ5X3RleHRfbWVtb3J5IGJlaGF2aW9y LgorIyBWZXJpZmllcyB0aGF0IHdoZW4gdGhlIHF1ZXJ5IHRleHQgRFNBIGlzIGV4aGF1c3RlZDoK KyMgICAtIGVudHJpZXMgYXJlIHN0aWxsIHRyYWNrZWQgd2l0aCBjb3VudGVycyBhY2N1bXVsYXRp bmcKKyMgICAtIHF1ZXJ5IHRleHQgaXMgTlVMTCBmb3IgZW50cmllcyB0aGF0IGNvdWxkIG5vdCBz dG9yZSB0ZXh0CisjICAgLSBib3RoIHNob3d0ZXh0PXRydWUgYW5kIHNob3d0ZXh0PWZhbHNlIHJl dHVybiBhbGwgZW50cmllcworIyAgIC0gYWZ0ZXIgcmFpc2luZyB0aGUgbGltaXQgYW5kIHJlLWV4 ZWN1dGluZywgdGV4dCBpcyBiYWNrZmlsbGVkCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3Mg RkFUQUwgPT4gJ2FsbCc7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0 Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkbm9kZSA9IFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbWFpbicpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+ YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsIHFxeworc2hhcmVkX3ByZWxvYWRfbGlicmFy aWVzID0gJ3BnX3N0YXRfc3RhdGVtZW50cycKK3BnX3N0YXRfc3RhdGVtZW50cy5xdWVyeV90ZXh0 X21lbW9yeSA9IDJNQgorfSk7Ciskbm9kZS0+c3RhcnQ7CisKKyRub2RlLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgJ0NSRUFURSBFWFRFTlNJT04gcGdfc3RhdF9zdGF0ZW1lbnRzJyk7Ciskbm9kZS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdTRUxFQ1QgcGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkn KTsKKworbXkgJG1lbSA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0hPVyBwZ19z dGF0X3N0YXRlbWVudHMucXVlcnlfdGV4dF9tZW1vcnkiKTsKK2lzKCRtZW0sICcyTUInLCAncXVl cnlfdGV4dF9tZW1vcnkgaXMgMk1CJyk7CisKKyMgR2VuZXJhdGUgdW5pcXVlIHF1ZXJpZXMgdG8g ZXhoYXVzdCB0aGUgdGV4dCBEU0EgKHNldCB0byAyTUIpLgorIyBFYWNoIENURSBxdWVyeSB3aXRo IDIwMCBpbnRlZ2VyIGNvbnN0YW50cyBpcyB+MTAwMCBieXRlcyBvZiB0ZXh0LgorbXkgJGNvbHMg PSBqb2luKCcsICcsIG1hcCB7ICIkXyIgfSAoMSAuLiAyMDApKTsKK215ICRzcWwgPSAnJzsKK2Zv ciBteSAkaSAoMSAuLiAyNTAwKQoreworCSRzcWwgLj0gIldJVEggdCR7aX0gQVMgKFNFTEVDVCAk Y29scykgU0VMRUNUIEZST00gdCR7aX07XG4iOworfQorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAkc3FsKTsKKworbXkgJG51bGxfY291bnQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIHF7CitTRUxFQ1QgY291bnQoKikKK0ZST00gcGdfc3RhdF9zdGF0ZW1lbnRzCitXSEVSRSBx dWVyeSBJUyBOVUxMIEFORCBxdWVyeWlkIElTIE5PVCBOVUxMCit9KTsKKworZGlhZygiJG51bGxf Y291bnQgZW50cmllcyB3aXRob3V0IHRleHQgYWZ0ZXIgMjUwMCBxdWVyaWVzIik7CisKK2NtcF9v aygkbnVsbF9jb3VudCwgJz4nLCAwLAorCSJzb21lIGVudHJpZXMgaGF2ZSBOVUxMIHF1ZXJ5IHRl eHQgYWZ0ZXIgRFNBIGV4aGF1c3Rpb24gKCRudWxsX2NvdW50KSIpOworCisjIEVudHJpZXMgd2l0 aG91dCB0ZXh0IHN0aWxsIGhhdmUgY2FsbHMgPiAwCitteSAkdHJhY2tlZCA9ICRub2RlLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcXsKK1NFTEVDVCBjb3VudCgqKQorRlJPTSBwZ19zdGF0X3N0YXRl bWVudHMKK1dIRVJFIHF1ZXJ5IElTIE5VTEwgQU5EIHF1ZXJ5aWQgSVMgTk9UIE5VTEwgQU5EIGNh bGxzID4gMAorfSk7CitjbXBfb2soJHRyYWNrZWQsICc+JywgMCwKKwkiZW50cmllcyB3aXRob3V0 IHRleHQgc3RpbGwgdHJhY2sgY291bnRlcnMgKCR0cmFja2VkKSIpOworCisjIEVudHJpZXMgd2l0 aCB0ZXh0IGFsc28gZXhpc3QgKGVhcmx5IGVudHJpZXMgZ290IHRleHQgYmVmb3JlIGV4aGF1c3Rp b24pCitteSAkd2l0aF90ZXh0ID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxeworU0VM RUNUIGNvdW50KCopCitGUk9NIHBnX3N0YXRfc3RhdGVtZW50cworV0hFUkUgcXVlcnkgSVMgTk9U IE5VTEwgQU5EIHF1ZXJ5IExJS0UgJ1dJVEggdCUnCit9KTsKK2NtcF9vaygkd2l0aF90ZXh0LCAn PicsIDAsCisJInNvbWUgZW50cmllcyBzdGlsbCBoYXZlIHF1ZXJ5IHRleHQgKCR3aXRoX3RleHQp Iik7CisKKyMgQm90aCBzaG93dGV4dD10cnVlIGFuZCBzaG93dGV4dD1mYWxzZSBzaG91bGQgcmV0 dXJuIGFsbCBlbnRyaWVzCitteSAkY291bnRfdHJ1ZSA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgcXsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3N0YXRfc3RhdGVtZW50cyh0cnVlKQor fSk7CitteSAkY291bnRfZmFsc2UgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHF7CitT RUxFQ1QgY291bnQoKikgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMoZmFsc2UpCit9KTsKK2NtcF9v aygkY291bnRfdHJ1ZSwgJz49JywgMjUwMCwKKwkic2hvd3RleHQ9dHJ1ZSByZXR1cm5zIGFsbCBl bnRyaWVzICgkY291bnRfdHJ1ZSkiKTsKK2NtcF9vaygkY291bnRfZmFsc2UsICc+PScsIDI1MDAs CisJInNob3d0ZXh0PWZhbHNlIHJldHVybnMgYWxsIGVudHJpZXMgKCRjb3VudF9mYWxzZSkiKTsK KworIyBSdW4gYSBwcm9iZSBxdWVyeSB3aXRoIGNvbnN0YW50cyB3aGlsZSBEU0EgaXMgZXhoYXVz dGVkLgorIyBTaW5jZSBuZW50cmllcyA8IHBnX3N0YXRfc3RhdGVtZW50cy5tYXgsIGVudHJ5X2Rl YWxsb2Mgd29uJ3QgZXZpY3Qgb3IKKyMgZnJlZSBhbnkgRFNBIHNwYWNlLCBzbyB0aGlzIGVudHJ5 IHNob3VsZCByZW1haW4gd2l0aCBOVUxMIHRleHQuCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICdTRUxFQ1QgMTExMTEgKyAyMjIyMiArIDMzMzMzJyk7CisKK215ICRwcm9iZV9iZWZvcmUg PSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHF7CitTRUxFQ1QgY291bnQoKikgRlJPTSBw Z19zdGF0X3N0YXRlbWVudHMgV0hFUkUgcXVlcnkgPSAnU0VMRUNUICQxICsgJDIgKyAkMycKK30p OworaXMoJHByb2JlX2JlZm9yZSwgJzAnLAorCSdwcm9iZSBxdWVyeSB0ZXh0IGlzIE5VTEwgd2hp bGUgRFNBIGlzIGV4aGF1c3RlZCcpOworCisjIFBoYXNlIDI6IFJhaXNlIGxpbWl0IGFuZCB2ZXJp ZnkgYmFja2ZpbGwuCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNZU1RF TSBTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnF1ZXJ5X3RleHRfbWVtb3J5ID0gJzEwME1CJyIpOwor JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHBnX3JlbG9hZF9jb25mKCkiKTsK KworIyBSZS1ydW4gdGhlIHByb2JlIHF1ZXJ5IGluIGEgbmV3IGNvbm5lY3Rpb24gdG8gdHJpZ2dl ciBiYWNrZmlsbC4KKyMgTm9ybWFsaXphdGlvbiBpcyBub3QgZ3VhcmFudGVlZCBmb3IgYWxsIGJh Y2tmaWxscyAoZS5nLiB3aGVuIHRyaWdnZXJlZAorIyBmcm9tIEV4ZWN1dG9yRW5kIHdoZXJlIGpz dGF0ZSBpcyB1bmF2YWlsYWJsZSksIGJ1dCB3aGVuIHRoZSBiYWNrZmlsbAorIyBvY2N1cnMgdmlh IHBvc3RfcGFyc2VfYW5hbHl6ZSwganN0YXRlIGlzIGF2YWlsYWJsZSBhbmQgdGhlIHRleHQgc2hv dWxkCisjIGJlIHN0b3JlZCBpbiBub3JtYWxpemVkIGZvcm0uCiskbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICdTRUxFQ1QgMTExMTEgKyAyMjIyMiArIDMzMzMzJyk7CisKK215ICRub3JtX2Fm dGVyID0gJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxeworU0VMRUNUIHF1ZXJ5IEZST00g cGdfc3RhdF9zdGF0ZW1lbnRzIFdIRVJFIHF1ZXJ5ID0gJ1NFTEVDVCAkMSArICQyICsgJDMnCit9 KTsKK2lzKCRub3JtX2FmdGVyLCAnU0VMRUNUICQxICsgJDIgKyAkMycsCisJJ2JhY2tmaWxsZWQg dGV4dCBpcyBzdG9yZWQgaW4gbm9ybWFsaXplZCBmb3JtJyk7CisKKyMgQWxzbyByZS1ydW4gdGhl IGJ1bGsgcXVlcmllcyB0byB0cmlnZ2VyIHRoZWlyIGJhY2tmaWxsCiskbm9kZS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICRzcWwpOworCitteSAkbnVsbF9hZnRlciA9ICRub2RlLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgcXsKK1NFTEVDVCBjb3VudCgqKQorRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMK K1dIRVJFIHF1ZXJ5IElTIE5VTEwgQU5EIHF1ZXJ5aWQgSVMgTk9UIE5VTEwKK30pOworZGlhZygi YWZ0ZXIgYmFja2ZpbGw6ICRudWxsX2FmdGVyIGVudHJpZXMgd2l0aG91dCB0ZXh0Iik7CitjbXBf b2soJG51bGxfYWZ0ZXIsICc8JywgJG51bGxfY291bnQsCisJImJhY2tmaWxsIHJlZHVjZWQgTlVM TCB0ZXh0IGVudHJpZXMgKCRudWxsX2NvdW50IC0+ICRudWxsX2FmdGVyKSIpOworCiskbm9kZS0+ c3RvcDsKK2RvbmVfdGVzdGluZygpOwotLSAKMi41MC4xIChBcHBsZSBHaXQtMTU1KQoK --000000000000e4fcc10652ff8975 Content-Type: application/x-patch; name="v3-0004-pg_stat_statements-modernize-entry-storage-with-p.patch" Content-Disposition: attachment; filename="v3-0004-pg_stat_statements-modernize-entry-storage-with-p.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mprga8jz5 RnJvbSA3MTU5MzVjNzhiYTlmN2NkMTY4MDZkZjEyZTE5Y2M3ZDYwNWEzYTRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEltc2VpaCA8c2FtaW1zZWloQGdtYWlsLmNvbT4KRGF0 ZTogRnJpLCAyOSBNYXkgMjAyNiAwOToyMDoxMyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjMgNC81 XSBwZ19zdGF0X3N0YXRlbWVudHM6IG1vZGVybml6ZSBlbnRyeSBzdG9yYWdlIHdpdGgKIHBnc3Rh dCBraW5kCgpSZXBsYWNlIHRoZSBzaGFyZWQtbWVtb3J5IGhhc2ggdGFibGUgKFNobWVtSW5pdEhh c2gpIHdpdGggYSBkc2hhc2gKdGFibGUgcmVnaXN0ZXJlZCB2aWEgRFNNIHJlZ2lzdHJ5LCBhbmQg cmVwbGFjZSBwZXItZW50cnkgc3BpbmxvY2sKY291bnRlciB1cGRhdGVzIHdpdGggYSBjdXN0b20g cGdzdGF0IGtpbmQgdGhhdCB1c2VzIHRoZSBjb3JlIHBnc3RhdAppbmZyYXN0cnVjdHVyZS4KCkV2 aWN0aW9uIHN3aXRjaGVzIGZyb20gc29ydC1iYXNlZCAocXNvcnQgYWxsIGVudHJpZXMgYnkgdXNh Z2UgZmFjdG9yKQp0byBjbG9jay1zd2VlcCB3aXRoIGFuIGF0b21pYyByb3RhdGluZyBoYW5kLiAg RWFjaCBlbnRyeSBjYXJyaWVzIGEKcmVmY291bnQgKGNhcHBlZCBhdCBQR1NTX1JFRl9DQVAgPSAx MCkgdGhhdCBpcyBkZWNyZW1lbnRlZCBvbiBzd2VlcDsKZW50cmllcyByZWFjaGluZyB6ZXJvIGFy ZSBldmljdGVkLiAgSG90IHF1ZXJpZXMga2VlcCB0aGVpciByZWZjb3VudAp0b3BwZWQgdXAgcHJv cG9ydGlvbmFsbHkgdG8gYWNjZXNzIGZyZXF1ZW5jeS4gIEV2aWN0aW9uIGlzIGd1YXJhbnRlZWQK dG8gbWFrZSBmb3J3YXJkIHByb2dyZXNzLgoKVGhlIHBnX3N0YXRfc3RhdGVtZW50cy5tYXggR1VD IGlzIGNoYW5nZWQgZnJvbSBQR0NfUE9TVE1BU1RFUiB0bwpQR0NfU0lHSFVQIHNvIHRoZSBsaW1p dCBjYW4gYmUgYWRqdXN0ZWQgd2l0aG91dCBhIHJlc3RhcnQuCgpRdWVyeSB0ZXh0IHN0b3JhZ2Ug cmVtYWlucyBmaWxlLWJhc2VkIChwZ3NzX3F1ZXJ5X3RleHRzLnN0YXQpIGFzIGluCnRoZSBvcmln aW5hbCBpbXBsZW1lbnRhdGlvbiwgd2l0aCB0aGUgc2FtZSBxdGV4dF9zdG9yZSAvIHF0ZXh0X2xv YWRfZmlsZSAvCmdjX3F0ZXh0cyBpbmZyYXN0cnVjdHVyZSBhZGFwdGVkIHRvIHdvcmsgd2l0aCB0 aGUgZHNoYXNoIGVudHJpZXMuCgpUaGUgZXh0ZW5zaW9uIGlzIGJ1bXBlZCB0byB2ZXJzaW9uIDEu MTQgd2l0aCBQQVJBTExFTCBSRVNUUklDVEVECm1hcmtpbmcgb24gdGhlIG1haW4gZnVuY3Rpb24s IHNpbmNlIHBhcmFsbGVsIHdvcmtlcnMgY2Fubm90IGZsdXNoCnN0YXRzIGFjY3VtdWxhdGVkIGJ5 IHRoZSBsZWFkZXIgdmlhIHRoZSBhbnl0aW1lIEFQSS4KLS0tCiAuLi4vZXhwZWN0ZWQvb2xkZXh0 dmVyc2lvbnMub3V0ICAgICAgICAgICAgICAgfCAgIDY3ICsKIGNvbnRyaWIvcGdfc3RhdF9zdGF0 ZW1lbnRzL21lc29uLmJ1aWxkICAgICAgICB8ICAgIDMgKy0KIC4uLi9wZ19zdGF0X3N0YXRlbWVu dHMtLTEuMTMtLTEuMTQuc3FsICAgICAgICB8ICAgODEgKwogLi4uL3BnX3N0YXRfc3RhdGVtZW50 cy9wZ19zdGF0X3N0YXRlbWVudHMuYyAgIHwgMjM1OSArKysrKysrKy0tLS0tLS0tLQogLi4uL3Bn X3N0YXRfc3RhdGVtZW50cy5jb25mICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiAuLi4vcGdf c3RhdF9zdGF0ZW1lbnRzLmNvbnRyb2wgICAgICAgICAgICAgICAgfCAgICAyICstCiAuLi4vcGdf c3RhdF9zdGF0ZW1lbnRzL3NxbC9vbGRleHR2ZXJzaW9ucy5zcWwgfCAgICA1ICsKIGRvYy9zcmMv c2dtbC9wZ3N0YXRzdGF0ZW1lbnRzLnNnbWwgICAgICAgICAgICB8ICAgMzkgKy0KIDggZmlsZXMg Y2hhbmdlZCwgMTIyOSBpbnNlcnRpb25zKCspLCAxMzI4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy0t MS4xMy0tMS4xNC5zcWwKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9l eHBlY3RlZC9vbGRleHR2ZXJzaW9ucy5vdXQgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9l eHBlY3RlZC9vbGRleHR2ZXJzaW9ucy5vdXQKaW5kZXggNzI2MzgzYTk5ZDcuLjVkNjVlYjZiNTIx IDEwMDY0NAotLS0gYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9leHBlY3RlZC9vbGRleHR2 ZXJzaW9ucy5vdXQKKysrIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvZXhwZWN0ZWQvb2xk ZXh0dmVyc2lvbnMub3V0CkBAIC00NzQsNCArNDc0LDcxIEBAIFNFTEVDVCBjb3VudCgqKSA+IDAg QVMgaGFzX2RhdGEgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHM7CiAgdAogKDEgcm93KQogCistLSBG dW5jdGlvbnMgbWFya2VkIFBBUkFMTEVMIFJFU1RSSUNURUQgaW4gMS4xNAorQWxURVIgRVhURU5T SU9OIHBnX3N0YXRfc3RhdGVtZW50cyBVUERBVEUgVE8gJzEuMTQnOworXGQgcGdfc3RhdF9zdGF0 ZW1lbnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyAicHVibGljLnBnX3N0YXRf c3RhdGVtZW50cyIKKyAgICAgICAgICAgQ29sdW1uICAgICAgICAgICB8ICAgICAgICAgICBUeXBl ICAgICAgICAgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0tLS0KKyB1c2VyaWQgICAgICAgICAgICAgICAgICAgICB8IG9pZCAg ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgZGJpZCAgICAg ICAgICAgICAgICAgICAgICAgfCBvaWQgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg fCAgICAgICAgICB8IAorIHRvcGxldmVsICAgICAgICAgICAgICAgICAgIHwgYm9vbGVhbiAgICAg ICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKKyBxdWVyeWlkICAgICAgICAg ICAgICAgICAgICB8IGJpZ2ludCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAg ICAgIHwgCisgcXVlcnkgICAgICAgICAgICAgICAgICAgICAgfCB0ZXh0ICAgICAgICAgICAgICAg ICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorIHBsYW5zICAgICAgICAgICAgICAgICAg ICAgIHwgYmlnaW50ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAK KyB0b3RhbF9wbGFuX3RpbWUgICAgICAgICAgICB8IGRvdWJsZSBwcmVjaXNpb24gICAgICAgICB8 ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgbWluX3BsYW5fdGltZSAgICAgICAgICAgICAgfCBk b3VibGUgcHJlY2lzaW9uICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorIG1heF9w bGFuX3RpbWUgICAgICAgICAgICAgIHwgZG91YmxlIHByZWNpc2lvbiAgICAgICAgIHwgICAgICAg ICAgIHwgICAgICAgICAgfCAKKyBtZWFuX3BsYW5fdGltZSAgICAgICAgICAgICB8IGRvdWJsZSBw cmVjaXNpb24gICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgc3RkZGV2X3BsYW5f dGltZSAgICAgICAgICAgfCBkb3VibGUgcHJlY2lzaW9uICAgICAgICAgfCAgICAgICAgICAgfCAg ICAgICAgICB8IAorIGNhbGxzICAgICAgICAgICAgICAgICAgICAgIHwgYmlnaW50ICAgICAgICAg ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKKyB0b3RhbF9leGVjX3RpbWUgICAg ICAgICAgICB8IGRvdWJsZSBwcmVjaXNpb24gICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAg IHwgCisgbWluX2V4ZWNfdGltZSAgICAgICAgICAgICAgfCBkb3VibGUgcHJlY2lzaW9uICAgICAg ICAgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorIG1heF9leGVjX3RpbWUgICAgICAgICAgICAg IHwgZG91YmxlIHByZWNpc2lvbiAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKKyBt ZWFuX2V4ZWNfdGltZSAgICAgICAgICAgICB8IGRvdWJsZSBwcmVjaXNpb24gICAgICAgICB8ICAg ICAgICAgICB8ICAgICAgICAgIHwgCisgc3RkZGV2X2V4ZWNfdGltZSAgICAgICAgICAgfCBkb3Vi bGUgcHJlY2lzaW9uICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorIHJvd3MgICAg ICAgICAgICAgICAgICAgICAgIHwgYmlnaW50ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg IHwgICAgICAgICAgfCAKKyBzaGFyZWRfYmxrc19oaXQgICAgICAgICAgICB8IGJpZ2ludCAgICAg ICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgc2hhcmVkX2Jsa3NfcmVh ZCAgICAgICAgICAgfCBiaWdpbnQgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAg ICAgICB8IAorIHNoYXJlZF9ibGtzX2RpcnRpZWQgICAgICAgIHwgYmlnaW50ICAgICAgICAgICAg ICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKKyBzaGFyZWRfYmxrc193cml0dGVuICAg ICAgICB8IGJpZ2ludCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwg CisgbG9jYWxfYmxrc19oaXQgICAgICAgICAgICAgfCBiaWdpbnQgICAgICAgICAgICAgICAgICAg fCAgICAgICAgICAgfCAgICAgICAgICB8IAorIGxvY2FsX2Jsa3NfcmVhZCAgICAgICAgICAgIHwg YmlnaW50ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKKyBsb2Nh bF9ibGtzX2RpcnRpZWQgICAgICAgICB8IGJpZ2ludCAgICAgICAgICAgICAgICAgICB8ICAgICAg ICAgICB8ICAgICAgICAgIHwgCisgbG9jYWxfYmxrc193cml0dGVuICAgICAgICAgfCBiaWdpbnQg ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorIHRlbXBfYmxrc19y ZWFkICAgICAgICAgICAgIHwgYmlnaW50ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwg ICAgICAgICAgfCAKKyB0ZW1wX2Jsa3Nfd3JpdHRlbiAgICAgICAgICB8IGJpZ2ludCAgICAgICAg ICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgc2hhcmVkX2Jsa19yZWFkX3Rp bWUgICAgICAgfCBkb3VibGUgcHJlY2lzaW9uICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAg ICB8IAorIHNoYXJlZF9ibGtfd3JpdGVfdGltZSAgICAgIHwgZG91YmxlIHByZWNpc2lvbiAgICAg ICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKKyBsb2NhbF9ibGtfcmVhZF90aW1lICAgICAg ICB8IGRvdWJsZSBwcmVjaXNpb24gICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisg bG9jYWxfYmxrX3dyaXRlX3RpbWUgICAgICAgfCBkb3VibGUgcHJlY2lzaW9uICAgICAgICAgfCAg ICAgICAgICAgfCAgICAgICAgICB8IAorIHRlbXBfYmxrX3JlYWRfdGltZSAgICAgICAgIHwgZG91 YmxlIHByZWNpc2lvbiAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKKyB0ZW1wX2Js a193cml0ZV90aW1lICAgICAgICB8IGRvdWJsZSBwcmVjaXNpb24gICAgICAgICB8ICAgICAgICAg ICB8ICAgICAgICAgIHwgCisgd2FsX3JlY29yZHMgICAgICAgICAgICAgICAgfCBiaWdpbnQgICAg ICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorIHdhbF9mcGkgICAgICAg ICAgICAgICAgICAgIHwgYmlnaW50ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAg ICAgICAgfCAKKyB3YWxfYnl0ZXMgICAgICAgICAgICAgICAgICB8IG51bWVyaWMgICAgICAgICAg ICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgd2FsX2J1ZmZlcnNfZnVsbCAgICAg ICAgICAgfCBiaWdpbnQgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8 IAorIGppdF9mdW5jdGlvbnMgICAgICAgICAgICAgIHwgYmlnaW50ICAgICAgICAgICAgICAgICAg IHwgICAgICAgICAgIHwgICAgICAgICAgfCAKKyBqaXRfZ2VuZXJhdGlvbl90aW1lICAgICAgICB8 IGRvdWJsZSBwcmVjaXNpb24gICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgaml0 X2lubGluaW5nX2NvdW50ICAgICAgICAgfCBiaWdpbnQgICAgICAgICAgICAgICAgICAgfCAgICAg ICAgICAgfCAgICAgICAgICB8IAorIGppdF9pbmxpbmluZ190aW1lICAgICAgICAgIHwgZG91Ymxl IHByZWNpc2lvbiAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKKyBqaXRfb3B0aW1p emF0aW9uX2NvdW50ICAgICB8IGJpZ2ludCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8 ICAgICAgICAgIHwgCisgaml0X29wdGltaXphdGlvbl90aW1lICAgICAgfCBkb3VibGUgcHJlY2lz aW9uICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorIGppdF9lbWlzc2lvbl9jb3Vu dCAgICAgICAgIHwgYmlnaW50ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAg ICAgfCAKKyBqaXRfZW1pc3Npb25fdGltZSAgICAgICAgICB8IGRvdWJsZSBwcmVjaXNpb24gICAg ICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgaml0X2RlZm9ybV9jb3VudCAgICAgICAg ICAgfCBiaWdpbnQgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8IAor IGppdF9kZWZvcm1fdGltZSAgICAgICAgICAgIHwgZG91YmxlIHByZWNpc2lvbiAgICAgICAgIHwg ICAgICAgICAgIHwgICAgICAgICAgfCAKKyBwYXJhbGxlbF93b3JrZXJzX3RvX2xhdW5jaCB8IGJp Z2ludCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCisgcGFyYWxs ZWxfd29ya2Vyc19sYXVuY2hlZCAgfCBiaWdpbnQgICAgICAgICAgICAgICAgICAgfCAgICAgICAg ICAgfCAgICAgICAgICB8IAorIGdlbmVyaWNfcGxhbl9jYWxscyAgICAgICAgIHwgYmlnaW50ICAg ICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKKyBjdXN0b21fcGxhbl9j YWxscyAgICAgICAgICB8IGJpZ2ludCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8ICAg ICAgICAgIHwgCisgc3RhdHNfc2luY2UgICAgICAgICAgICAgICAgfCB0aW1lc3RhbXAgd2l0aCB0 aW1lIHpvbmUgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorIG1pbm1heF9zdGF0c19zaW5jZSAg ICAgICAgIHwgdGltZXN0YW1wIHdpdGggdGltZSB6b25lIHwgICAgICAgICAgIHwgICAgICAgICAg fCAKKworU0VMRUNUIGNvdW50KCopID4gMCBBUyBoYXNfZGF0YSBGUk9NIHBnX3N0YXRfc3RhdGVt ZW50czsKKyBoYXNfZGF0YSAKKy0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKIERST1AgRVhURU5T SU9OIHBnX3N0YXRfc3RhdGVtZW50czsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0 ZW1lbnRzL21lc29uLmJ1aWxkIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvbWVzb24uYnVp bGQKaW5kZXggOWQ3OGNiODhiN2QuLjdmZmM4OTY0NDk0IDEwMDY0NAotLS0gYS9jb250cmliL3Bn X3N0YXRfc3RhdGVtZW50cy9tZXNvbi5idWlsZAorKysgYi9jb250cmliL3BnX3N0YXRfc3RhdGVt ZW50cy9tZXNvbi5idWlsZApAQCAtMjEsNiArMjEsNyBAQCBjb250cmliX3RhcmdldHMgKz0gcGdf c3RhdF9zdGF0ZW1lbnRzCiBpbnN0YWxsX2RhdGEoCiAgICdwZ19zdGF0X3N0YXRlbWVudHMuY29u dHJvbCcsCiAgICdwZ19zdGF0X3N0YXRlbWVudHMtLTEuNC5zcWwnLAorICAncGdfc3RhdF9zdGF0 ZW1lbnRzLS0xLjEzLS0xLjE0LnNxbCcsCiAgICdwZ19zdGF0X3N0YXRlbWVudHMtLTEuMTItLTEu MTMuc3FsJywKICAgJ3BnX3N0YXRfc3RhdGVtZW50cy0tMS4xMS0tMS4xMi5zcWwnLAogICAncGdf c3RhdF9zdGF0ZW1lbnRzLS0xLjEwLS0xLjExLnNxbCcsCkBAIC02OSw3ICs3MCw3IEBAIHRlc3Rz ICs9IHsKICAgfSwKICAgJ3RhcCc6IHsKICAgICAndGVzdHMnOiBbCi0gICAgICAndC8wMTBfcmVz dGFydC5wbCcsCisgICAgICAndC8wMDFfcmVzdGFydC5wbCcsCiAgICAgXSwKICAgfSwKIH0KZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy0t MS4xMy0tMS4xNC5zcWwgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRl bWVudHMtLTEuMTMtLTEuMTQuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi43ZWQ0YzE5ZWI1YQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0 ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy0tMS4xMy0tMS4xNC5zcWwKQEAgLTAsMCArMSw4MSBA QAorLyogY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjEz LS0xLjE0LnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3Fs LCByYXRoZXIgdGhhbiB2aWEgQUxURVIgRVhURU5TSU9OCitcZWNobyBVc2UgIkFMVEVSIEVYVEVO U0lPTiBwZ19zdGF0X3N0YXRlbWVudHMgVVBEQVRFIFRPICcxLjE0JyIgdG8gbG9hZCB0aGlzIGZp bGUuIFxxdWl0CisKKy8qIEZpcnN0IHdlIGhhdmUgdG8gcmVtb3ZlIHRoZW0gZnJvbSB0aGUgZXh0 ZW5zaW9uICovCitBTFRFUiBFWFRFTlNJT04gcGdfc3RhdF9zdGF0ZW1lbnRzIERST1AgVklFVyBw Z19zdGF0X3N0YXRlbWVudHM7CitBTFRFUiBFWFRFTlNJT04gcGdfc3RhdF9zdGF0ZW1lbnRzIERS T1AgRlVOQ1RJT04gcGdfc3RhdF9zdGF0ZW1lbnRzKGJvb2xlYW4pOworCisvKiBUaGVuIHdlIGNh biBkcm9wIHRoZW0gKi8KK0RST1AgVklFVyBwZ19zdGF0X3N0YXRlbWVudHM7CitEUk9QIEZVTkNU SU9OIHBnX3N0YXRfc3RhdGVtZW50cyhib29sZWFuKTsKKworLyogTm93IHJlZGVmaW5lIHdpdGgg UEFSQUxMRUwgUkVTVFJJQ1RFRCAqLworQ1JFQVRFIEZVTkNUSU9OIHBnX3N0YXRfc3RhdGVtZW50 cyhJTiBzaG93dGV4dCBib29sZWFuLAorICAgIE9VVCB1c2VyaWQgb2lkLAorICAgIE9VVCBkYmlk IG9pZCwKKyAgICBPVVQgdG9wbGV2ZWwgYm9vbCwKKyAgICBPVVQgcXVlcnlpZCBiaWdpbnQsCisg ICAgT1VUIHF1ZXJ5IHRleHQsCisgICAgT1VUIHBsYW5zIGludDgsCisgICAgT1VUIHRvdGFsX3Bs YW5fdGltZSBmbG9hdDgsCisgICAgT1VUIG1pbl9wbGFuX3RpbWUgZmxvYXQ4LAorICAgIE9VVCBt YXhfcGxhbl90aW1lIGZsb2F0OCwKKyAgICBPVVQgbWVhbl9wbGFuX3RpbWUgZmxvYXQ4LAorICAg IE9VVCBzdGRkZXZfcGxhbl90aW1lIGZsb2F0OCwKKyAgICBPVVQgY2FsbHMgaW50OCwKKyAgICBP VVQgdG90YWxfZXhlY190aW1lIGZsb2F0OCwKKyAgICBPVVQgbWluX2V4ZWNfdGltZSBmbG9hdDgs CisgICAgT1VUIG1heF9leGVjX3RpbWUgZmxvYXQ4LAorICAgIE9VVCBtZWFuX2V4ZWNfdGltZSBm bG9hdDgsCisgICAgT1VUIHN0ZGRldl9leGVjX3RpbWUgZmxvYXQ4LAorICAgIE9VVCByb3dzIGlu dDgsCisgICAgT1VUIHNoYXJlZF9ibGtzX2hpdCBpbnQ4LAorICAgIE9VVCBzaGFyZWRfYmxrc19y ZWFkIGludDgsCisgICAgT1VUIHNoYXJlZF9ibGtzX2RpcnRpZWQgaW50OCwKKyAgICBPVVQgc2hh cmVkX2Jsa3Nfd3JpdHRlbiBpbnQ4LAorICAgIE9VVCBsb2NhbF9ibGtzX2hpdCBpbnQ4LAorICAg IE9VVCBsb2NhbF9ibGtzX3JlYWQgaW50OCwKKyAgICBPVVQgbG9jYWxfYmxrc19kaXJ0aWVkIGlu dDgsCisgICAgT1VUIGxvY2FsX2Jsa3Nfd3JpdHRlbiBpbnQ4LAorICAgIE9VVCB0ZW1wX2Jsa3Nf cmVhZCBpbnQ4LAorICAgIE9VVCB0ZW1wX2Jsa3Nfd3JpdHRlbiBpbnQ4LAorICAgIE9VVCBzaGFy ZWRfYmxrX3JlYWRfdGltZSBmbG9hdDgsCisgICAgT1VUIHNoYXJlZF9ibGtfd3JpdGVfdGltZSBm bG9hdDgsCisgICAgT1VUIGxvY2FsX2Jsa19yZWFkX3RpbWUgZmxvYXQ4LAorICAgIE9VVCBsb2Nh bF9ibGtfd3JpdGVfdGltZSBmbG9hdDgsCisgICAgT1VUIHRlbXBfYmxrX3JlYWRfdGltZSBmbG9h dDgsCisgICAgT1VUIHRlbXBfYmxrX3dyaXRlX3RpbWUgZmxvYXQ4LAorICAgIE9VVCB3YWxfcmVj b3JkcyBpbnQ4LAorICAgIE9VVCB3YWxfZnBpIGludDgsCisgICAgT1VUIHdhbF9ieXRlcyBudW1l cmljLAorICAgIE9VVCB3YWxfYnVmZmVyc19mdWxsIGludDgsCisgICAgT1VUIGppdF9mdW5jdGlv bnMgaW50OCwKKyAgICBPVVQgaml0X2dlbmVyYXRpb25fdGltZSBmbG9hdDgsCisgICAgT1VUIGpp dF9pbmxpbmluZ19jb3VudCBpbnQ4LAorICAgIE9VVCBqaXRfaW5saW5pbmdfdGltZSBmbG9hdDgs CisgICAgT1VUIGppdF9vcHRpbWl6YXRpb25fY291bnQgaW50OCwKKyAgICBPVVQgaml0X29wdGlt aXphdGlvbl90aW1lIGZsb2F0OCwKKyAgICBPVVQgaml0X2VtaXNzaW9uX2NvdW50IGludDgsCisg ICAgT1VUIGppdF9lbWlzc2lvbl90aW1lIGZsb2F0OCwKKyAgICBPVVQgaml0X2RlZm9ybV9jb3Vu dCBpbnQ4LAorICAgIE9VVCBqaXRfZGVmb3JtX3RpbWUgZmxvYXQ4LAorICAgIE9VVCBwYXJhbGxl bF93b3JrZXJzX3RvX2xhdW5jaCBpbnQ4LAorICAgIE9VVCBwYXJhbGxlbF93b3JrZXJzX2xhdW5j aGVkIGludDgsCisgICAgT1VUIGdlbmVyaWNfcGxhbl9jYWxscyBpbnQ4LAorICAgIE9VVCBjdXN0 b21fcGxhbl9jYWxscyBpbnQ4LAorICAgIE9VVCBzdGF0c19zaW5jZSB0aW1lc3RhbXAgd2l0aCB0 aW1lIHpvbmUsCisgICAgT1VUIG1pbm1heF9zdGF0c19zaW5jZSB0aW1lc3RhbXAgd2l0aCB0aW1l IHpvbmUKKykKK1JFVFVSTlMgU0VUT0YgcmVjb3JkCitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3Bn X3N0YXRfc3RhdGVtZW50c18xXzEzJworTEFOR1VBR0UgQyBTVFJJQ1QgVk9MQVRJTEUgUEFSQUxM RUwgUkVTVFJJQ1RFRDsKKworQ1JFQVRFIFZJRVcgcGdfc3RhdF9zdGF0ZW1lbnRzIEFTCisgIFNF TEVDVCAqIEZST00gcGdfc3RhdF9zdGF0ZW1lbnRzKHRydWUpOworCitHUkFOVCBTRUxFQ1QgT04g cGdfc3RhdF9zdGF0ZW1lbnRzIFRPIFBVQkxJQzsKKworLyogTWFyayByZXNldCBmdW5jdGlvbnMg YXMgUEFSQUxMRUwgUkVTVFJJQ1RFRCAqLworQUxURVIgRlVOQ1RJT04gcGdfc3RhdF9zdGF0ZW1l bnRzX3Jlc2V0KE9pZCwgT2lkLCBiaWdpbnQsIGJvb2xlYW4pIFBBUkFMTEVMIFJFU1RSSUNURUQ7 CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVu dHMuYyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCmlu ZGV4IDkyMzE1NjI3OTE2Li4yMDA0Y2FkOTFmNyAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19zdGF0 X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKKysrIGIvY29udHJpYi9wZ19zdGF0X3N0 YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKQEAgLTUsOCArNSw5IEBACiAgKgkJdXNhZ2Ug YWNyb3NzIGEgd2hvbGUgZGF0YWJhc2UgY2x1c3Rlci4KICAqCiAgKiBFeGVjdXRpb24gY29zdHMg YXJlIHRvdGFsZWQgZm9yIGVhY2ggZGlzdGluY3Qgc291cmNlIHF1ZXJ5LCBhbmQga2VwdCBpbgot ICogYSBzaGFyZWQgaGFzaHRhYmxlLiAgKFdlIHRyYWNrIG9ubHkgYXMgbWFueSBkaXN0aW5jdCBx dWVyaWVzIGFzIHdpbGwgZml0Ci0gKiBpbiB0aGUgZGVzaWduYXRlZCBhbW91bnQgb2Ygc2hhcmVk IG1lbW9yeS4pCisgKiBhIGRzaGFzaCB0YWJsZSByZWdpc3RlcmVkIHZpYSBEU00gcmVnaXN0cnku ICAoV2UgYXR0ZW1wdCB0byBrZWVwIG5vIG1vcmUKKyAqIGRpc3RpbmN0IHF1ZXJpZXMgdGhhbiB0 aGUgY29uZmlndXJlZCBsaW1pdCwgYnV0IGJlY2F1c2UgZHluYW1pYyBzaGFyZWQKKyAqIG1lbW9y eSBpcyB1c2VkLCB0aGUgY291bnQgbWF5IGJyaWVmbHkgZXhjZWVkIGl0LikKICAqCiAgKiBTdGFy dGluZyBpbiBQb3N0Z3JlcyA5LjIsIHRoaXMgbW9kdWxlIG5vcm1hbGl6ZWQgcXVlcnkgZW50cmll cy4gIEFzIG9mCiAgKiBQb3N0Z3JlcyAxNCwgdGhlIG5vcm1hbGl6YXRpb24gaXMgZG9uZSBieSB0 aGUgY29yZSBpZiBjb21wdXRlX3F1ZXJ5X2lkIGlzCkBAIC0xNCwyNSArMTUsMzUgQEAKICAqCiAg KiBUbyBmYWNpbGl0YXRlIHByZXNlbnRpbmcgZW50cmllcyB0byB1c2Vycywgd2UgY3JlYXRlICJy ZXByZXNlbnRhdGl2ZSIgcXVlcnkKICAqIHN0cmluZ3MgaW4gd2hpY2ggY29uc3RhbnRzIGFyZSBy ZXBsYWNlZCB3aXRoIHBhcmFtZXRlciBzeW1ib2xzICgkbiksIHRvCi0gKiBtYWtlIGl0IGNsZWFy ZXIgd2hhdCBhIG5vcm1hbGl6ZWQgZW50cnkgY2FuIHJlcHJlc2VudC4gIFRvIHNhdmUgb24gc2hh cmVkCi0gKiBtZW1vcnksIGFuZCB0byBhdm9pZCBoYXZpbmcgdG8gdHJ1bmNhdGUgb3ZlcnNpemVk IHF1ZXJ5IHN0cmluZ3MsIHdlIHN0b3JlCi0gKiB0aGVzZSBzdHJpbmdzIGluIGEgdGVtcG9yYXJ5 IGV4dGVybmFsIHF1ZXJ5LXRleHRzIGZpbGUuICBPZmZzZXRzIGludG8gdGhpcwotICogZmlsZSBh cmUga2VwdCBpbiBzaGFyZWQgbWVtb3J5LgorICogbWFrZSBpdCBjbGVhcmVyIHdoYXQgYSBub3Jt YWxpemVkIGVudHJ5IGNhbiByZXByZXNlbnQuICBUbyBhdm9pZCBoYXZpbmcKKyAqIHRvIHRydW5j YXRlIG92ZXJzaXplZCBxdWVyeSBzdHJpbmdzLCB3ZSBzdG9yZSB0aGVzZSBzdHJpbmdzIGluIGEg dGVtcG9yYXJ5CisgKiBleHRlcm5hbCBxdWVyeS10ZXh0cyBmaWxlLiAgT2Zmc2V0cyBpbnRvIHRo aXMgZmlsZSBhcmUga2VwdCBpbiB0aGUgZHNoYXNoCisgKiBlbnRyaWVzLgogICoKLSAqIE5vdGUg YWJvdXQgbG9ja2luZyBpc3N1ZXM6IHRvIGNyZWF0ZSBvciBkZWxldGUgYW4gZW50cnkgaW4gdGhl IHNoYXJlZAotICogaGFzaHRhYmxlLCBvbmUgbXVzdCBob2xkIHBnc3MtPmxvY2sgZXhjbHVzaXZl bHkuICBNb2RpZnlpbmcgYW55IGZpZWxkCi0gKiBpbiBhbiBlbnRyeSBleGNlcHQgdGhlIGNvdW50 ZXJzIHJlcXVpcmVzIHRoZSBzYW1lLiAgVG8gbG9vayB1cCBhbiBlbnRyeSwKLSAqIG9uZSBtdXN0 IGhvbGQgdGhlIGxvY2sgc2hhcmVkLiAgVG8gcmVhZCBvciB1cGRhdGUgdGhlIGNvdW50ZXJzIHdp dGhpbgotICogYW4gZW50cnksIG9uZSBtdXN0IGhvbGQgdGhlIGxvY2sgc2hhcmVkIG9yIGV4Y2x1 c2l2ZSAoc28gdGhlIGVudHJ5IGRvZXNuJ3QKLSAqIGRpc2FwcGVhciEpIGFuZCBhbHNvIHRha2Ug dGhlIGVudHJ5J3MgbXV0ZXggc3BpbmxvY2suCi0gKiBUaGUgc2hhcmVkIHN0YXRlIHZhcmlhYmxl IHBnc3MtPmV4dGVudCAodGhlIG5leHQgZnJlZSBzcG90IGluIHRoZSBleHRlcm5hbAotICogcXVl cnktdGV4dCBmaWxlKSBzaG91bGQgYmUgYWNjZXNzZWQgb25seSB3aGlsZSBob2xkaW5nIGVpdGhl ciB0aGUKLSAqIHBnc3MtPm11dGV4IHNwaW5sb2NrLCBvciBleGNsdXNpdmUgbG9jayBvbiBwZ3Nz LT5sb2NrLiAgV2UgdXNlIHRoZSBtdXRleCB0bwotICogYWxsb3cgcmVzZXJ2aW5nIGZpbGUgc3Bh Y2Ugd2hpbGUgaG9sZGluZyBvbmx5IHNoYXJlZCBsb2NrIG9uIHBnc3MtPmxvY2suCi0gKiBSZXdy aXRpbmcgdGhlIGVudGlyZSBleHRlcm5hbCBxdWVyeS10ZXh0IGZpbGUsIGVnIGZvciBnYXJiYWdl IGNvbGxlY3Rpb24sCi0gKiByZXF1aXJlcyBob2xkaW5nIHBnc3MtPmxvY2sgZXhjbHVzaXZlbHk7 IHRoaXMgYWxsb3dzIGluZGl2aWR1YWwgZW50cmllcwotICogaW4gdGhlIGZpbGUgdG8gYmUgcmVh ZCBvciB3cml0dGVuIHdoaWxlIGhvbGRpbmcgb25seSBzaGFyZWQgbG9jay4KKyAqIFRoZSBkc2hh c2ggc2VydmVzIGFzIHRoZSBzb3VyY2Utb2YtdHJ1dGggcmVnaXN0cnkgb2YgdHJhY2tlZCBxdWVy aWVzLAorICogc3RvcmluZyB0aGUga2V5LCBmaWxlIG9mZnNldHMgdG8gdGhlIHF1ZXJ5IHRleHQs IGFuZCBhbiBhdG9taWMgcmVmY291bnQKKyAqIHVzZWQgZm9yIGNsb2NrLXN3ZWVwIGV2aWN0aW9u LiAgQWN0dWFsIGNvdW50ZXJzIChjYWxscywgdGltaW5nLCBidWZmZXJzLAorICogZXRjLikgYXJl IG1haW50YWluZWQgdmlhIGEgY3VzdG9tIHBnc3RhdCBraW5kIHVzaW5nIHRoZSBwZW5kaW5nL2Zs dXNoCisgKiBpbmZyYXN0cnVjdHVyZSwgc28gYmFja2VuZHMgYWNjdW11bGF0ZSBzdGF0cyBsb2Nh bGx5IGFuZCBmbHVzaCB0aGVtCisgKiB3aXRob3V0IGNvbnRlbmRpbmcgb24gc2hhcmVkIHN0YXRl LgogICoKKyAqIE5vdGUgYWJvdXQgbG9ja2luZzogdG8gbG9vayB1cCBhbiBleGlzdGluZyBlbnRy eSwgYSBiYWNrZW5kIHRha2VzIGEKKyAqIHNoYXJlZCBsb2NrIG9uIHRoZSBlbnRyeSdzIGRzaGFz aCBwYXJ0aXRpb24gYW5kIGJ1bXBzIHRoZSByZWZjb3VudAorICogYXRvbWljYWxseS4gIFRvIGlu c2VydCBhIG5ldyBlbnRyeSwgYW4gZXhjbHVzaXZlIHBhcnRpdGlvbiBsb2NrIGlzCisgKiByZXF1 aXJlZCBidXQgb25seSBvbiB0aGF0IHNpbmdsZSBwYXJ0aXRpb24uICBXaGVuIHRoZSBlbnRyeSBj b3VudCBleGNlZWRzCisgKiBwZ19zdGF0X3N0YXRlbWVudHMubWF4LCBhIGNsb2NrLXN3ZWVwIGV2 aWN0aW9uIHBhc3MgY2xhaW1zIGEgcGFydGl0aW9uCisgKiB2aWEgYW4gYXRvbWljIHJvdGF0aW5n IGhhbmQgYW5kIHN3ZWVwcyBpdCB1bmRlciBleGNsdXNpdmUgbG9jaywgZXZpY3RpbmcKKyAqIGVu dHJpZXMgd2hvc2UgcmVmY291bnQgaGFzIHJlYWNoZWQgemVyby4KKyAqCisgKiBBIGJhY2tlbmQg dGhhdCB0cmlnZ2VycyBldmljdGlvbiBkb2VzIG5vdCBuZWNlc3NhcmlseSBldmljdCBmcm9tIHRo ZSBzYW1lCisgKiBwYXJ0aXRpb24gaXQgaXMgaW5zZXJ0aW5nIGludG8uICBUaGUgcG9pbnQgb2Yg dGhlIGNsb2NrLXN3ZWVwIGlzIHRvCisgKiBjb250aW51YWxseSBtYWtlIHByb2dyZXNzIG9uIGtl ZXBpbmcgdGhlIHRvdGFsIGVudHJ5IGNvdW50IGluIGNoZWNrLAorICogc3ByZWFkaW5nIGV2aWN0 aW9uIHdvcmsgYWNyb3NzIGFsbCBwYXJ0aXRpb25zIG92ZXIgdGltZS4gIFRoZSByZWZjb3VudAor ICogaXMgY2FwcGVkIGF0IFBHU1NfUkVGX0NBUCwgc28gYW55IGVudHJ5IHdpbGwgcmVhY2ggemVy byBhZnRlciBhdCBtb3N0CisgKiB0aGF0IG1hbnkgc3dlZXAgcGFzc2VzIHJlZ2FyZGxlc3Mgb2Yg aG93IGZyZXF1ZW50bHkgaXQgaXMgYWNjZXNzZWQuICBObworICogZW50cnkgY2FuIGJlY29tZSBw ZXJtYW5lbnRseSBpbW11bmUgdG8gZXZpY3Rpb24uICBGdXJ0aGVybW9yZSwgYmVjYXVzZQorICog dGhlIHN3ZWVwIGhvbGRzIHRoZSBwYXJ0aXRpb24ncyBleGNsdXNpdmUgbG9jaywgbm8gYmFja2Vu ZCBjYW4gcmUtYnVtcAorICogdGhlIHJlZmNvdW50IG9mIGFuIGVudHJ5IHdoaWxlIGl0IGlzIGJl aW5nIGNvbnNpZGVyZWQgZm9yIGV2aWN0aW9uLgogICoKICAqIENvcHlyaWdodCAoYykgMjAwOC0y MDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogICoKQEAgLTUwLDI0ICs2 MSwyNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nl c3MvcGFyYWxsZWwuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2F1dGhpZC5oIgorI2luY2x1ZGUg ImNvbW1vbi9oYXNoZm4uaCIKICNpbmNsdWRlICJleGVjdXRvci9pbnN0cnVtZW50LmgiCiAjaW5j bHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgImppdC9qaXQuaCIKKyNpbmNsdWRlICJsaWIvZHNo YXNoLmgiCiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIK KyNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJub2Rlcy9xdWVyeWp1bWJsZS5oIgogI2lu Y2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCiAjaW5jbHVkZSAicGFyc2VyL2FuYWx5emUuaCIK LSNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2RzbV9yZWdpc3RyeS5oIgog I2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgotI2luY2x1 ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9zaG1lbS5oIgogI2luY2x1 ZGUgInN0b3JhZ2Uvc3Bpbi5oIgogI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgogI2luY2x1ZGUg InV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCi0jaW5jbHVkZSAidXRp bHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9u dW1lcmljLmgiCisjaW5jbHVkZSAidXRpbHMvcGdzdGF0X2ludGVybmFsLmgiCiAjaW5jbHVkZSAi dXRpbHMvdGltZXN0YW1wLmgiCiAjaW5jbHVkZSAidXRpbHMvdHVwbGVzdG9yZS5oIgogCkBAIC03 NiwyOSArOTAsMTggQEAgUEdfTU9EVUxFX01BR0lDX0VYVCgKIAkJCQkJLnZlcnNpb24gPSBQR19W RVJTSU9OCiApOwogCi0vKiBMb2NhdGlvbiBvZiBwZXJtYW5lbnQgc3RhdHMgZmlsZSAodmFsaWQg d2hlbiBkYXRhYmFzZSBpcyBzaHV0IGRvd24pICovCi0jZGVmaW5lIFBHU1NfRFVNUF9GSUxFCVBH U1RBVF9TVEFUX1BFUk1BTkVOVF9ESVJFQ1RPUlkgIi9wZ19zdGF0X3N0YXRlbWVudHMuc3RhdCIK LQogLyoKICAqIExvY2F0aW9uIG9mIGV4dGVybmFsIHF1ZXJ5IHRleHQgZmlsZS4KICAqLwogI2Rl ZmluZSBQR1NTX1RFWFRfRklMRQlQR19TVEFUX1RNUF9ESVIgIi9wZ3NzX3F1ZXJ5X3RleHRzLnN0 YXQiCiAKLS8qIE1hZ2ljIG51bWJlciBpZGVudGlmeWluZyB0aGUgc3RhdHMgZmlsZSBmb3JtYXQg Ki8KLXN0YXRpYyBjb25zdCB1aW50MzIgUEdTU19GSUxFX0hFQURFUiA9IDB4MjAyNTA3MzE7Cisv KiBDdXN0b20gcGdzdGF0IGtpbmQgSUQgKi8KKyNkZWZpbmUgUEdTVEFUX0tJTkRfUEdTUwkyNQog Ci0vKiBQb3N0Z3JlU1FMIG1ham9yIHZlcnNpb24gbnVtYmVyLCBjaGFuZ2VzIGluIHdoaWNoIGlu dmFsaWRhdGUgYWxsIGVudHJpZXMgKi8KLXN0YXRpYyBjb25zdCB1aW50MzIgUEdTU19QR19NQUpP Ul9WRVJTSU9OID0gUEdfVkVSU0lPTl9OVU0gLyAxMDA7Ci0KLS8qIFhYWDogU2hvdWxkIFVTQUdF X0VYRUMgcmVmbGVjdCBleGVjdXRpb24gdGltZSBhbmQvb3IgYnVmZmVyIHVzYWdlPyAqLwotI2Rl ZmluZSBVU0FHRV9FWEVDKGR1cmF0aW9uKQkoMS4wKQotI2RlZmluZSBVU0FHRV9JTklUCQkJCSgx LjApCS8qIGluY2x1ZGluZyBpbml0aWFsIHBsYW5uaW5nICovCi0jZGVmaW5lIEFTU1VNRURfTUVE SUFOX0lOSVQJCSgxMC4wKQkvKiBpbml0aWFsIGFzc3VtZWQgbWVkaWFuIHVzYWdlICovCi0jZGVm aW5lIEFTU1VNRURfTEVOR1RIX0lOSVQJCTEwMjQJLyogaW5pdGlhbCBhc3N1bWVkIG1lYW4gcXVl cnkgbGVuZ3RoICovCi0jZGVmaW5lIFVTQUdFX0RFQ1JFQVNFX0ZBQ1RPUgkoMC45OSkJLyogZGVj cmVhc2VkIGV2ZXJ5IGVudHJ5X2RlYWxsb2MgKi8KLSNkZWZpbmUgU1RJQ0tZX0RFQ1JFQVNFX0ZB Q1RPUgkoMC41MCkJLyogZmFjdG9yIGZvciBzdGlja3kgZW50cmllcyAqLwotI2RlZmluZSBVU0FH RV9ERUFMTE9DX1BFUkNFTlQJNQkvKiBmcmVlIHRoaXMgJSBvZiBlbnRyaWVzIGF0IG9uY2UgKi8K LSNkZWZpbmUgSVNfU1RJQ0tZKGMpCSgoYy5jYWxsc1tQR1NTX1BMQU5dICsgYy5jYWxsc1tQR1NT X0VYRUNdKSA9PSAwKQorLyogQ2xvY2stc3dlZXAgc2V0dGluZ3MgKi8KKyNkZWZpbmUgVVNBR0Vf REVBTExPQ19QRVJDRU5UICA1CS8qIGV2aWN0IHVudGlsIHRvdGFsIGVudHJpZXMgZHJvcCB0byB0 aGlzCisJCQkJCQkJCQkgKiAlIGJlbG93IG1heCAqLworI2RlZmluZSBQR1NTX1JFRl9DQVAJMTAJ CS8qIG1heGltdW0gcmVmY291bnQgZm9yIGNsb2NrLXN3ZWVwICovCiAKIC8qCiAgKiBFeHRlbnNp b24gdmVyc2lvbiBudW1iZXIsIGZvciBzdXBwb3J0aW5nIG9sZGVyIGV4dGVuc2lvbiB2ZXJzaW9u cycgb2JqZWN0cwpAQCAtMTMzLDEyICsxMzYsOSBAQCB0eXBlZGVmIGVudW0gcGdzc1N0b3JlS2lu ZAogI2RlZmluZSBQR1NTX05VTUtJTkQgKFBHU1NfRVhFQyArIDEpCiAKIC8qCi0gKiBIYXNodGFi bGUga2V5IHRoYXQgZGVmaW5lcyB0aGUgaWRlbnRpdHkgb2YgYSBoYXNodGFibGUgZW50cnkuICBX ZSBzZXBhcmF0ZQorICogSGFzaHRhYmxlIGtleSB0aGF0IGRlZmluZXMgdGhlIGlkZW50aXR5IG9m IGEgdHJhY2tlZCBzdGF0ZW1lbnQuCisgKiBUaGlzIGlzIHVzZWQgaW4gdGhlIGRzaGFzaCAoc291 cmNlLW9mLXRydXRoIHJlZ2lzdHJ5KS4gIFdlIHNlcGFyYXRlCiAgKiBxdWVyaWVzIGJ5IHVzZXIg YW5kIGJ5IGRhdGFiYXNlIGV2ZW4gaWYgdGhleSBhcmUgb3RoZXJ3aXNlIGlkZW50aWNhbC4KLSAq Ci0gKiBJZiB5b3UgYWRkIGEgbmV3IGtleSB0byB0aGlzIHN0cnVjdCwgbWFrZSBzdXJlIHRvIHRl YWNoIHBnc3Nfc3RvcmUoKSB0bwotICogemVybyB0aGUgcGFkZGluZyBieXRlcy4gIE90aGVyd2lz ZSwgdGhpbmdzIHdpbGwgYnJlYWssIGJlY2F1c2UgcGdzc19oYXNoIGlzCi0gKiBjcmVhdGVkIHVz aW5nIEhBU0hfQkxPQlMsIGFuZCB0aHVzIHRhZ19oYXNoIGlzIHVzZWQgdG8gaGFzaCB0aGlzLgog ICovCiB0eXBlZGVmIHN0cnVjdCBwZ3NzSGFzaEtleQogewpAQCAtMTQ5LDkgKzE0OSw5IEBAIHR5 cGVkZWYgc3RydWN0IHBnc3NIYXNoS2V5CiB9IHBnc3NIYXNoS2V5OwogCiAvKgotICogVGhlIGFj dHVhbCBzdGF0cyBjb3VudGVycyBrZXB0IHdpdGhpbiBwZ3NzRW50cnkuCisgKiBUaGUgYWN0dWFs IHN0YXRzIGNvdW50ZXJzIGtlcHQgd2l0aGluIHRoZSBjdXN0b20gcGdzdGF0IGtpbmQuCiAgKi8K LXR5cGVkZWYgc3RydWN0IENvdW50ZXJzCit0eXBlZGVmIHN0cnVjdCBwZ3NzQ291bnRlcnMKIHsK IAlpbnQ2NAkJY2FsbHNbUEdTU19OVU1LSU5EXTsJLyogIyBvZiB0aW1lcyBwbGFubmVkL2V4ZWN1 dGVkICovCiAJZG91YmxlCQl0b3RhbF90aW1lW1BHU1NfTlVNS0lORF07CS8qIHRvdGFsIHBsYW5u aW5nL2V4ZWN1dGlvbiB0aW1lLApAQCAtMjEyLDY1ICsyMTIsODEgQEAgdHlwZWRlZiBzdHJ1Y3Qg Q291bnRlcnMKIAkJCQkJCQkJCQkJICogbGF1bmNoZWQgKi8KIAlpbnQ2NAkJZ2VuZXJpY19wbGFu X2NhbGxzOyAvKiBudW1iZXIgb2YgY2FsbHMgdXNpbmcgYSBnZW5lcmljIHBsYW4gKi8KIAlpbnQ2 NAkJY3VzdG9tX3BsYW5fY2FsbHM7CS8qIG51bWJlciBvZiBjYWxscyB1c2luZyBhIGN1c3RvbSBw bGFuICovCi19IENvdW50ZXJzOworfQkJCXBnc3NDb3VudGVyczsKIAotLyoKLSAqIEdsb2JhbCBz dGF0aXN0aWNzIGZvciBwZ19zdGF0X3N0YXRlbWVudHMKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgcGdz c0dsb2JhbFN0YXRzCisvKiBTaGFyZWQgcGdzdGF0IGVudHJ5ICovCit0eXBlZGVmIHN0cnVjdCBQ Z1N0YXRTaGFyZWRfUGdzcwogewotCWludDY0CQlkZWFsbG9jOwkJLyogIyBvZiB0aW1lcyBlbnRy aWVzIHdlcmUgZGVhbGxvY2F0ZWQgKi8KLQlUaW1lc3RhbXBUeiBzdGF0c19yZXNldDsJLyogdGlt ZXN0YW1wIHdpdGggYWxsIHN0YXRzIHJlc2V0ICovCi19IHBnc3NHbG9iYWxTdGF0czsKKwlQZ1N0 YXRTaGFyZWRfQ29tbW9uIGhlYWRlcjsKKwlwZ3NzSGFzaEtleSBrZXk7CisJcGdzc0NvdW50ZXJz IGNvdW50ZXJzOworfQkJCVBnU3RhdFNoYXJlZF9QZ3NzOwogCiAvKgotICogU3RhdGlzdGljcyBw ZXIgc3RhdGVtZW50CisgKiBFbnRyeSBpbiB0aGUgZHNoYXNoIHNvdXJjZS1vZi10cnV0aCByZWdp c3RyeS4KICAqCiAgKiBOb3RlOiBpbiBldmVudCBvZiBhIGZhaWx1cmUgaW4gZ2FyYmFnZSBjb2xs ZWN0aW9uIG9mIHRoZSBxdWVyeSB0ZXh0IGZpbGUsCiAgKiB3ZSByZXNldCBxdWVyeV9vZmZzZXQg dG8gemVybyBhbmQgcXVlcnlfbGVuIHRvIC0xLiAgVGhpcyB3aWxsIGJlIHNlZW4gYXMKICAqIGFu IGludmFsaWQgc3RhdGUgYnkgcXRleHRfZmV0Y2goKS4KKyAqCisgKiBOb3RlOiBLZXkgbXVzdCBi ZSBmaXJzdCBmb3IgZHNoYXNoLgogICovCiB0eXBlZGVmIHN0cnVjdCBwZ3NzRW50cnkKIHsKLQlw Z3NzSGFzaEtleSBrZXk7CQkJLyogaGFzaCBrZXkgb2YgZW50cnkgLSBNVVNUIEJFIEZJUlNUICov Ci0JQ291bnRlcnMJY291bnRlcnM7CQkvKiB0aGUgc3RhdGlzdGljcyBmb3IgdGhpcyBxdWVyeSAq LworCXBnc3NIYXNoS2V5IGtleTsKKwlwZ19hdG9taWNfdWludDMyIHJlZmNvdW50OwkvKiBjbG9j ay1zd2VlcDogZGVjcmVtZW50ZWQgb24gc3dlZXAsIGV2aWN0IGF0CisJCQkJCQkJCSAqIDAgKi8K IAlTaXplCQlxdWVyeV9vZmZzZXQ7CS8qIHF1ZXJ5IHRleHQgb2Zmc2V0IGluIGV4dGVybmFsIGZp bGUgKi8KIAlpbnQJCQlxdWVyeV9sZW47CQkvKiAjIG9mIHZhbGlkIGJ5dGVzIGluIHF1ZXJ5IHN0 cmluZywgb3IgLTEgKi8KIAlpbnQJCQllbmNvZGluZzsJCS8qIHF1ZXJ5IHRleHQgZW5jb2Rpbmcg Ki8KIAlUaW1lc3RhbXBUeiBzdGF0c19zaW5jZTsJLyogdGltZXN0YW1wIG9mIGVudHJ5IGFsbG9j YXRpb24gKi8KIAlUaW1lc3RhbXBUeiBtaW5tYXhfc3RhdHNfc2luY2U7IC8qIHRpbWVzdGFtcCBv ZiBsYXN0IG1pbi9tYXggdmFsdWVzIHJlc2V0ICovCi0Jc2xvY2tfdAkJbXV0ZXg7CQkJLyogcHJv dGVjdHMgdGhlIGNvdW50ZXJzIG9ubHkgKi8KIH0gcGdzc0VudHJ5OwogCiAvKgotICogR2xvYmFs IHNoYXJlZCBzdGF0ZQorICogR2xvYmFsIHNoYXJlZCBzdGF0ZSBzdG9yZWQgaW4gRFNNIHNlZ21l bnQKICAqLwogdHlwZWRlZiBzdHJ1Y3QgcGdzc1NoYXJlZFN0YXRlCiB7Ci0JTFdMb2NrUGFkZGVk IGxvY2s7CQkJLyogcHJvdGVjdHMgaGFzaHRhYmxlIHNlYXJjaC9tb2RpZmljYXRpb24gKi8KLQlk b3VibGUJCWN1cl9tZWRpYW5fdXNhZ2U7CS8qIGN1cnJlbnQgbWVkaWFuIHVzYWdlIGluIGhhc2h0 YWJsZSAqLwotCVNpemUJCW1lYW5fcXVlcnlfbGVuOyAvKiBjdXJyZW50IG1lYW4gZW50cnkgdGV4 dCBsZW5ndGggKi8KKwlwZ19hdG9taWNfdWludDY0IG5lbnRyaWVzOwkvKiBjdXJyZW50IG51bWJl ciBvZiB0cmFja2VkIGVudHJpZXMgKi8KKwlwZ19hdG9taWNfdWludDY0IGRlYWxsb2M7CS8qIHRv dGFsICMgb2YgZW50cmllcyBldmljdGVkICovCisJcGdfYXRvbWljX3VpbnQzMiBzd2VlcF9wYXJ0 aXRpb247CS8qIHJvdGF0aW5nIGhhbmQ6IG5leHQgcGFydGl0aW9uIHRvCisJCQkJCQkJCQkJICog c3dlZXAgKi8KKwlUaW1lc3RhbXBUeiBzdGF0c19yZXNldDsJLyogdGltZXN0YW1wIHdpdGggYWxs IHN0YXRzIHJlc2V0ICovCiAJc2xvY2tfdAkJbXV0ZXg7CQkJLyogcHJvdGVjdHMgZm9sbG93aW5n IGZpZWxkcyBvbmx5OiAqLwogCVNpemUJCWV4dGVudDsJCQkvKiBjdXJyZW50IGV4dGVudCBvZiBx dWVyeSBmaWxlICovCiAJaW50CQkJbl93cml0ZXJzOwkJLyogbnVtYmVyIG9mIGFjdGl2ZSB3cml0 ZXJzIHRvIHF1ZXJ5IGZpbGUgKi8KIAlpbnQJCQlnY19jb3VudDsJCS8qIHF1ZXJ5IGZpbGUgZ2Fy YmFnZSBjb2xsZWN0aW9uIGN5Y2xlIGNvdW50ICovCi0JcGdzc0dsb2JhbFN0YXRzIHN0YXRzOwkJ LyogZ2xvYmFsIHN0YXRpc3RpY3MgZm9yIHBnc3MgKi8KIH0gcGdzc1NoYXJlZFN0YXRlOwogCi0v KiBMaW5rcyB0byBzaGFyZWQgbWVtb3J5IHN0YXRlICovCi1zdGF0aWMgcGdzc1NoYXJlZFN0YXRl ICpwZ3NzOwotc3RhdGljIEhUQUIgKnBnc3NfaGFzaDsKKy8qIEJhY2tlbmQtbG9jYWwgcGVuZGlu ZyBlbnRyeSAqLwordHlwZWRlZiBzdHJ1Y3QgUGdTdGF0X1Bnc3NQZW5kaW5nCit7CisJcGdzc0hh c2hLZXkga2V5OworCXBnc3NDb3VudGVycyBjb3VudGVyczsKK30JCQlQZ1N0YXRfUGdzc1BlbmRp bmc7CiAKLXN0YXRpYyB2b2lkIHBnc3Nfc2htZW1fcmVxdWVzdCh2b2lkICphcmcpOwotc3RhdGlj IHZvaWQgcGdzc19zaG1lbV9pbml0KHZvaWQgKmFyZyk7CisvKgorICogc291cmNlLW9mLXRydXRo IHJlZ2lzdHJ5IHN0b3JlZCBpbiBkc2hhc2gKKyAqLwogCi1zdGF0aWMgY29uc3QgU2htZW1DYWxs YmFja3MgcGdzc19zaG1lbV9jYWxsYmFja3MgPSB7Ci0JLnJlcXVlc3RfZm4gPSBwZ3NzX3NobWVt X3JlcXVlc3QsCi0JLmluaXRfZm4gPSBwZ3NzX3NobWVtX2luaXQsCitzdGF0aWMgY29uc3QgZHNo YXNoX3BhcmFtZXRlcnMgcGdzc19kc2hfcGFyYW1zID0geworCXNpemVvZihwZ3NzSGFzaEtleSks CisJc2l6ZW9mKHBnc3NFbnRyeSksCisJZHNoYXNoX21lbWNtcCwKKwlkc2hhc2hfbWVtaGFzaCwK Kwlkc2hhc2hfbWVtY3B5LAorCUxXVFJBTkNIRV9GSVJTVF9VU0VSX0RFRklORUQsCiB9OwogCiAv Ki0tLS0gTG9jYWwgdmFyaWFibGVzIC0tLS0qLwogCisvKiBHbG9iYWwgc2hhcmVkIHN0YXRlICov CitzdGF0aWMgcGdzc1NoYXJlZFN0YXRlICpwZ3NzX3NoYXJlZCA9IE5VTEw7CisKKy8qIHNvdXJj ZS1vZi10cnV0aCBkc2hhc2ggdGFibGUgKi8KK3N0YXRpYyBkc2hhc2hfdGFibGUgKnBnc3NfaGFz aCA9IE5VTEw7CisKIC8qIEN1cnJlbnQgbmVzdGluZyBkZXB0aCBvZiBwbGFubmVyL0V4ZWN1dG9y UnVuL1Byb2Nlc3NVdGlsaXR5IGNhbGxzICovCiBzdGF0aWMgaW50CW5lc3RpbmdfbGV2ZWwgPSAw OwogCkBAIC0zMTQsOSArMzMwLDkgQEAgc3RhdGljIGJvb2wgcGdzc19zYXZlID0gdHJ1ZTsJLyog d2hldGhlciB0byBzYXZlIHN0YXRzIGFjcm9zcyBzaHV0ZG93biAqLwogCiAjZGVmaW5lIHJlY29y ZF9nY19xdGV4dHMoKSBcCiAJZG8geyBcCi0JCVNwaW5Mb2NrQWNxdWlyZSgmcGdzcy0+bXV0ZXgp OyBcCi0JCXBnc3MtPmdjX2NvdW50Kys7IFwKLQkJU3BpbkxvY2tSZWxlYXNlKCZwZ3NzLT5tdXRl eCk7IFwKKwkJU3BpbkxvY2tBY3F1aXJlKCZwZ3NzX3NoYXJlZC0+bXV0ZXgpOyBcCisJCXBnc3Nf c2hhcmVkLT5nY19jb3VudCsrOyBcCisJCVNwaW5Mb2NrUmVsZWFzZSgmcGdzc19zaGFyZWQtPm11 dGV4KTsgXAogCX0gd2hpbGUoMCkKIAogLyotLS0tIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAtLS0t Ki8KQEAgLTMzNSw3ICszNTEsNiBAQCBQR19GVU5DVElPTl9JTkZPX1YxKHBnX3N0YXRfc3RhdGVt ZW50c18xXzEzKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdfc3RhdF9zdGF0ZW1lbnRzKTsKIFBH X0ZVTkNUSU9OX0lORk9fVjEocGdfc3RhdF9zdGF0ZW1lbnRzX2luZm8pOwogCi1zdGF0aWMgdm9p ZCBwZ3NzX3NobWVtX3NodXRkb3duKGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQg cGdzc19wb3N0X3BhcnNlX2FuYWx5emUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBRdWVyeSAqcXVlcnks CiAJCQkJCQkJCQljb25zdCBKdW1ibGVTdGF0ZSAqanN0YXRlKTsKIHN0YXRpYyBQbGFubmVkU3Rt dCAqcGdzc19wbGFubmVyKFF1ZXJ5ICpwYXJzZSwKQEAgLTM2NSwxMiArMzgwLDExIEBAIHN0YXRp YyB2b2lkIHBnc3Nfc3RvcmUoY29uc3QgY2hhciAqcXVlcnksIGludDY0IHF1ZXJ5SWQsCiAJCQkJ CSAgIGludCBwYXJhbGxlbF93b3JrZXJzX3RvX2xhdW5jaCwKIAkJCQkJICAgaW50IHBhcmFsbGVs X3dvcmtlcnNfbGF1bmNoZWQsCiAJCQkJCSAgIFBsYW5uZWRTdG10T3JpZ2luIHBsYW5PcmlnaW4p Owotc3RhdGljIHZvaWQgcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKEZ1bmN0aW9uQ2FsbElu Zm8gZmNpbmZvLAotCQkJCQkJCQkJCXBnc3NWZXJzaW9uIGFwaV92ZXJzaW9uLAotCQkJCQkJCQkJ CWJvb2wgc2hvd3RleHQpOwotc3RhdGljIHBnc3NFbnRyeSAqZW50cnlfYWxsb2MocGdzc0hhc2hL ZXkgKmtleSwgU2l6ZSBxdWVyeV9vZmZzZXQsIGludCBxdWVyeV9sZW4sCi0JCQkJCQkJICBpbnQg ZW5jb2RpbmcsIGJvb2wgc3RpY2t5KTsKKwogc3RhdGljIHZvaWQgZW50cnlfZGVhbGxvYyh2b2lk KTsKK3N0YXRpYyBUaW1lc3RhbXBUeiBlbnRyeV9yZXNldChPaWQgdXNlcmlkLCBPaWQgZGJpZCwg aW50NjQgcXVlcnlpZCwgYm9vbCBtaW5tYXhfb25seSk7CitzdGF0aWMgdWludDY0IHBnc3NfaGFz aF9rZXkocGdzc0hhc2hLZXkgKmtleSk7CisKIHN0YXRpYyBib29sIHF0ZXh0X3N0b3JlKGNvbnN0 IGNoYXIgKnF1ZXJ5LCBpbnQgcXVlcnlfbGVuLAogCQkJCQkJU2l6ZSAqcXVlcnlfb2Zmc2V0LCBp bnQgKmdjX2NvdW50KTsKIHN0YXRpYyBjaGFyICpxdGV4dF9sb2FkX2ZpbGUoU2l6ZSAqYnVmZmVy X3NpemUpOwpAQCAtMzc4LDM3ICszOTIsOTkgQEAgc3RhdGljIGNoYXIgKnF0ZXh0X2ZldGNoKFNp emUgcXVlcnlfb2Zmc2V0LCBpbnQgcXVlcnlfbGVuLAogCQkJCQkJIGNoYXIgKmJ1ZmZlciwgU2l6 ZSBidWZmZXJfc2l6ZSk7CiBzdGF0aWMgYm9vbCBuZWVkX2djX3F0ZXh0cyh2b2lkKTsKIHN0YXRp YyB2b2lkIGdjX3F0ZXh0cyh2b2lkKTsKLXN0YXRpYyBUaW1lc3RhbXBUeiBlbnRyeV9yZXNldChP aWQgdXNlcmlkLCBPaWQgZGJpZCwgaW50NjQgcXVlcnlpZCwgYm9vbCBtaW5tYXhfb25seSk7CiBz dGF0aWMgY2hhciAqZ2VuZXJhdGVfbm9ybWFsaXplZF9xdWVyeShjb25zdCBKdW1ibGVTdGF0ZSAq anN0YXRlLAogCQkJCQkJCQkJICAgY29uc3QgY2hhciAqcXVlcnksCiAJCQkJCQkJCQkgICBpbnQg cXVlcnlfbG9jLCBpbnQgKnF1ZXJ5X2xlbl9wKTsKIAorc3RhdGljIHZvaWQgcGdfc3RhdF9zdGF0 ZW1lbnRzX2ludGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAorCQkJCQkJCQkJCXBnc3NW ZXJzaW9uIGFwaV92ZXJzaW9uLAorCQkJCQkJCQkJCWJvb2wgc2hvd3RleHQpOworCitzdGF0aWMg Ym9vbCBwZ3NzX2ZsdXNoX3BlbmRpbmdfY2IoUGdTdGF0X0VudHJ5UmVmICplbnRyeV9yZWYsIGJv b2wgbm93YWl0KTsKK3N0YXRpYyB2b2lkIHBnc3NfdG9fc2VyaWFsaXplZF9kYXRhKGNvbnN0IFBn U3RhdF9IYXNoS2V5ICprZXksCisJCQkJCQkJCQljb25zdCBQZ1N0YXRTaGFyZWRfQ29tbW9uICpo ZWFkZXIsCisJCQkJCQkJCQlGSUxFICpzdGF0ZmlsZSk7CitzdGF0aWMgYm9vbCBwZ3NzX2Zyb21f c2VyaWFsaXplZF9kYXRhKGNvbnN0IFBnU3RhdF9IYXNoS2V5ICprZXksCisJCQkJCQkJCQkgIFBn U3RhdFNoYXJlZF9Db21tb24gKmhlYWRlciwKKwkJCQkJCQkJCSAgRklMRSAqc3RhdGZpbGUpOwor c3RhdGljIHZvaWQgcGdzc19maW5pc2goUGdTdGF0X1N0YXRzRmlsZU9wIHN0YXR1cyk7CisKKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqIEN1c3RvbSBwZ3N0YXQga2luZCBkZWZpbml0aW9uCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RhdGljIGNvbnN0IFBnU3RhdF9LaW5kSW5mbyBwZ3Nz X2tpbmRfaW5mbyA9IHsKKwkubmFtZSA9ICJwZ19zdGF0X3N0YXRlbWVudHMiLAorCS5maXhlZF9h bW91bnQgPSBmYWxzZSwKKwkud3JpdGVfdG9fZmlsZSA9IHRydWUsCisJLnRyYWNrX2VudHJ5X2Nv dW50ID0gdHJ1ZSwKKwkuYWNjZXNzZWRfYWNyb3NzX2RhdGFiYXNlcyA9IHRydWUsCisJLnNoYXJl ZF9zaXplID0gc2l6ZW9mKFBnU3RhdFNoYXJlZF9QZ3NzKSwKKwkuc2hhcmVkX2RhdGFfb2ZmID0g b2Zmc2V0b2YoUGdTdGF0U2hhcmVkX1Bnc3MsIGNvdW50ZXJzKSwKKwkuc2hhcmVkX2RhdGFfbGVu ID0gc2l6ZW9mKHBnc3NDb3VudGVycyksCisJLnBlbmRpbmdfc2l6ZSA9IHNpemVvZihQZ1N0YXRf UGdzc1BlbmRpbmcpLAorCS5mbHVzaF9wZW5kaW5nX2NiID0gcGdzc19mbHVzaF9wZW5kaW5nX2Ni LAorCS50b19zZXJpYWxpemVkX2RhdGEgPSBwZ3NzX3RvX3NlcmlhbGl6ZWRfZGF0YSwKKwkuZnJv bV9zZXJpYWxpemVkX2RhdGEgPSBwZ3NzX2Zyb21fc2VyaWFsaXplZF9kYXRhLAorCS5maW5pc2gg PSBwZ3NzX2ZpbmlzaCwKK307CisKK3N0YXRpYyB1aW50NjQKK3Bnc3NfaGFzaF9rZXkocGdzc0hh c2hLZXkgKmtleSkKK3sKKwlyZXR1cm4gaGFzaF9ieXRlc19leHRlbmRlZCgoY29uc3QgdW5zaWdu ZWQgY2hhciAqKSBrZXksCisJCQkJCQkJICAgc2l6ZW9mKHBnc3NIYXNoS2V5KSwgMCk7Cit9CisK K3N0YXRpYyB2b2lkCitwZ3NzX2luaXRfc2htZW0odm9pZCAqcHRyLCB2b2lkICphcmcpCit7CisJ cGdzc1NoYXJlZFN0YXRlICpzdGF0ZSA9IChwZ3NzU2hhcmVkU3RhdGUgKikgcHRyOworCisJcGdf YXRvbWljX2luaXRfdTY0KCZzdGF0ZS0+bmVudHJpZXMsIDApOworCXBnX2F0b21pY19pbml0X3U2 NCgmc3RhdGUtPmRlYWxsb2MsIDApOworCXBnX2F0b21pY19pbml0X3UzMigmc3RhdGUtPnN3ZWVw X3BhcnRpdGlvbiwgMCk7CisJc3RhdGUtPnN0YXRzX3Jlc2V0ID0gR2V0Q3VycmVudFRpbWVzdGFt cCgpOworCVNwaW5Mb2NrSW5pdCgmc3RhdGUtPm11dGV4KTsKKwlzdGF0ZS0+ZXh0ZW50ID0gMDsK KwlzdGF0ZS0+bl93cml0ZXJzID0gMDsKKwlzdGF0ZS0+Z2NfY291bnQgPSAwOworfQorCitzdGF0 aWMgdm9pZAorcGdzc19hdHRhY2hfc2htZW0odm9pZCkKK3sKKwlib29sCQlmb3VuZDsKKworCWlm IChwZ3NzX3NoYXJlZCAhPSBOVUxMKQorCQlyZXR1cm47CisKKwlwZ3NzX3NoYXJlZCA9IEdldE5h bWVkRFNNU2VnbWVudCgicGdfc3RhdF9zdGF0ZW1lbnRzX3N0YXRlIiwKKwkJCQkJCQkJCSBzaXpl b2YocGdzc1NoYXJlZFN0YXRlKSwKKwkJCQkJCQkJCSBwZ3NzX2luaXRfc2htZW0sCisJCQkJCQkJ CQkgJmZvdW5kLCBOVUxMKTsKKworCWlmIChwZ3NzX2hhc2ggPT0gTlVMTCkKKwkJcGdzc19oYXNo ID0gR2V0TmFtZWREU0hhc2goInBnX3N0YXRfc3RhdGVtZW50cyIsICZwZ3NzX2RzaF9wYXJhbXMs CisJCQkJCQkJCSAgICZmb3VuZCk7Cit9CisKIC8qCiAgKiBNb2R1bGUgbG9hZCBjYWxsYmFjawog ICovCiB2b2lkCiBfUEdfaW5pdCh2b2lkKQogewotCS8qCi0JICogSW4gb3JkZXIgdG8gY3JlYXRl IG91ciBzaGFyZWQgbWVtb3J5IGFyZWEsIHdlIGhhdmUgdG8gYmUgbG9hZGVkIHZpYQotCSAqIHNo YXJlZF9wcmVsb2FkX2xpYnJhcmllcy4gIElmIG5vdCwgZmFsbCBvdXQgd2l0aG91dCBob29raW5n IGludG8gYW55IG9mCi0JICogdGhlIG1haW4gc3lzdGVtLiAgKFdlIGRvbid0IHRocm93IGVycm9y IGhlcmUgYmVjYXVzZSBpdCBzZWVtcyB1c2VmdWwgdG8KLQkgKiBhbGxvdyB0aGUgcGdfc3RhdF9z dGF0ZW1lbnRzIGZ1bmN0aW9ucyB0byBiZSBjcmVhdGVkIGV2ZW4gd2hlbiB0aGUKLQkgKiBtb2R1 bGUgaXNuJ3QgYWN0aXZlLiAgVGhlIGZ1bmN0aW9ucyBtdXN0IHByb3RlY3QgdGhlbXNlbHZlcyBh Z2FpbnN0Ci0JICogYmVpbmcgY2FsbGVkIHRoZW4sIGhvd2V2ZXIuKQotCSAqLwogCWlmICghcHJv Y2Vzc19zaGFyZWRfcHJlbG9hZF9saWJyYXJpZXNfaW5fcHJvZ3Jlc3MpCiAJCXJldHVybjsKIAot CS8qCi0JICogSW5mb3JtIHRoZSBwb3N0bWFzdGVyIHRoYXQgd2Ugd2FudCB0byBlbmFibGUgcXVl cnlfaWQgY2FsY3VsYXRpb24gaWYKLQkgKiBjb21wdXRlX3F1ZXJ5X2lkIGlzIHNldCB0byBhdXRv LgotCSAqLwogCUVuYWJsZVF1ZXJ5SWQoKTsKIAotCS8qCi0JICogRGVmaW5lIChvciByZWRlZmlu ZSkgY3VzdG9tIEdVQyB2YXJpYWJsZXMuCi0JICovCisJLyogUmVnaXN0ZXIgY3VzdG9tIHBnc3Rh dCBraW5kICovCisJcGdzdGF0X3JlZ2lzdGVyX2tpbmQoUEdTVEFUX0tJTkRfUEdTUywgJnBnc3Nf a2luZF9pbmZvKTsKKworCS8qIERlZmluZSBHVUNzICovCiAJRGVmaW5lQ3VzdG9tSW50VmFyaWFi bGUoInBnX3N0YXRfc3RhdGVtZW50cy5tYXgiLAogCQkJCQkJCSJTZXRzIHRoZSBtYXhpbXVtIG51 bWJlciBvZiBzdGF0ZW1lbnRzIHRyYWNrZWQgYnkgcGdfc3RhdF9zdGF0ZW1lbnRzLiIsCiAJCQkJ CQkJTlVMTCwKQEAgLTQxNiw3ICs0OTIsNyBAQCBfUEdfaW5pdCh2b2lkKQogCQkJCQkJCTUwMDAs CiAJCQkJCQkJMTAwLAogCQkJCQkJCUlOVF9NQVggLyAyLAotCQkJCQkJCVBHQ19QT1NUTUFTVEVS LAorCQkJCQkJCVBHQ19TSUdIVVAsCiAJCQkJCQkJMCwKIAkJCQkJCQlOVUxMLAogCQkJCQkJCU5V TEwsCkBAIC00NTcsNyArNTMzLDcgQEAgX1BHX2luaXQodm9pZCkKIAkJCQkJCQkgTlVMTCk7CiAK IAlEZWZpbmVDdXN0b21Cb29sVmFyaWFibGUoInBnX3N0YXRfc3RhdGVtZW50cy5zYXZlIiwKLQkJ CQkJCQkgIlNhdmUgcGdfc3RhdF9zdGF0ZW1lbnRzIHN0YXRpc3RpY3MgYWNyb3NzIHNlcnZlciBz aHV0ZG93bnMuIiwKKwkJCQkJCQkgIlNhdmUgcGdfc3RhdF9zdGF0ZW1lbnRzIGRhdGEgYWNyb3Nz IHNlcnZlciBzaHV0ZG93bnMuIiwKIAkJCQkJCQkgTlVMTCwKIAkJCQkJCQkgJnBnc3Nfc2F2ZSwK IAkJCQkJCQkgdHJ1ZSwKQEAgLTQ2OSwxMSArNTQ1LDYgQEAgX1BHX2luaXQodm9pZCkKIAogCU1h cmtHVUNQcmVmaXhSZXNlcnZlZCgicGdfc3RhdF9zdGF0ZW1lbnRzIik7CiAKLQkvKgotCSAqIFJl Z2lzdGVyIG91ciBzaGFyZWQgbWVtb3J5IG5lZWRzLgotCSAqLwotCVJlZ2lzdGVyU2htZW1DYWxs YmFja3MoJnBnc3Nfc2htZW1fY2FsbGJhY2tzKTsKLQogCS8qCiAJICogSW5zdGFsbCBob29rcy4K IAkgKi8KQEAgLTQ5MywzNjkgKzU2NCw1NjggQEAgX1BHX2luaXQodm9pZCkKIAlQcm9jZXNzVXRp bGl0eV9ob29rID0gcGdzc19Qcm9jZXNzVXRpbGl0eTsKIH0KIAotLyoKLSAqIHNobWVtIHJlcXVl c3QgY2FsbGJhY2s6IFJlcXVlc3Qgc2hhcmVkIG1lbW9yeSByZXNvdXJjZXMuCi0gKgotICogVGhp cyBpcyBjYWxsZWQgYXQgcG9zdG1hc3RlciBzdGFydHVwLiAgTm90ZSB0aGF0IHRoZSBzaGFyZWQg bWVtb3J5IGlzbid0Ci0gKiBhbGxvY2F0ZWQgaGVyZSB5ZXQsIHRoaXMgbWVyZWx5IHJlZ2lzdGVy IG91ciBuZWVkcy4KLSAqCi0gKiBJbiBFWEVDX0JBQ0tFTkQgbW9kZSwgdGhpcyBpcyBhbHNvIGNh bGxlZCBpbiBlYWNoIGJhY2tlbmQsIHRvIHJlLWF0dGFjaCB0bwotICogdGhlIHNoYXJlZCBtZW1v cnkgYXJlYSB0aGF0IHdhcyBhbHJlYWR5IGluaXRpYWxpemVkLgotICovCi1zdGF0aWMgdm9pZAot cGdzc19zaG1lbV9yZXF1ZXN0KHZvaWQgKmFyZykKLXsKLQlTaG1lbVJlcXVlc3RIYXNoKC5uYW1l ID0gInBnX3N0YXRfc3RhdGVtZW50cyBoYXNoIiwKLQkJCQkJIC5uZWxlbXMgPSBwZ3NzX21heCwK LQkJCQkJIC5oYXNoX2luZm8ua2V5c2l6ZSA9IHNpemVvZihwZ3NzSGFzaEtleSksCi0JCQkJCSAu aGFzaF9pbmZvLmVudHJ5c2l6ZSA9IHNpemVvZihwZ3NzRW50cnkpLAotCQkJCQkgLmhhc2hfZmxh Z3MgPSBIQVNIX0VMRU0gfCBIQVNIX0JMT0JTLAotCQkJCQkgLnB0ciA9ICZwZ3NzX2hhc2gsCi0J CSk7Ci0JU2htZW1SZXF1ZXN0U3RydWN0KC5uYW1lID0gInBnX3N0YXRfc3RhdGVtZW50cyIsCi0J CQkJCSAgIC5zaXplID0gc2l6ZW9mKHBnc3NTaGFyZWRTdGF0ZSksCi0JCQkJCSAgIC5wdHIgPSAo dm9pZCAqKikgJnBnc3MsCi0JCSk7Ci19Ci0KLS8qCi0gKiBzaG1lbSBpbml0IGNhbGxiYWNrOiBJ bml0aWFsaXplIG91ciBzaGFyZWQgbWVtb3J5IGRhdGEgc3RydWN0dXJlcyBhdAotICogcG9zdG1h c3RlciBzdGFydHVwLgotICoKLSAqIExvYWQgYW55IHByZS1leGlzdGluZyBzdGF0aXN0aWNzIGZy b20gZmlsZS4gIEFsc28gY3JlYXRlIGFuZCBsb2FkIHRoZQotICogcXVlcnktdGV4dHMgZmlsZSwg d2hpY2ggaXMgZXhwZWN0ZWQgdG8gZXhpc3QgKGV2ZW4gaWYgZW1wdHkpIHdoaWxlIHRoZQotICog bW9kdWxlIGlzIGVuYWJsZWQuCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBwZ3N0YXQgZmx1c2gg aGVscGVyczogbWVyZ2UgcGVyLWtpbmQgdGltaW5nIGNvdW50ZXJzIGludG8gc2hhcmVkIG1lbW9y eQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBzdGF0aWMgdm9pZAotcGdzc19zaG1lbV9pbml0 KHZvaWQgKmFyZykKK3Bnc3NfZmx1c2hfa2luZChwZ3NzQ291bnRlcnMgKiBzaGFyZWQsIHBnc3ND b3VudGVycyAqIHBlbmRpbmcsIHBnc3NTdG9yZUtpbmQga2luZCkKIHsKLQlpbnQJCQl0cmFuY2hl X2lkOwotCUZJTEUJICAgKmZpbGUgPSBOVUxMOwotCUZJTEUJICAgKnFmaWxlID0gTlVMTDsKLQl1 aW50MzIJCWhlYWRlcjsKLQlpbnQzMgkJbnVtOwotCWludDMyCQlwZ3ZlcjsKLQlpbnQzMgkJaTsK LQlpbnQJCQlidWZmZXJfc2l6ZTsKLQljaGFyCSAgICpidWZmZXIgPSBOVUxMOwotCi0JLyoKLQkg KiBXZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB3ZSdyZSBsb2FkZWQgZnJvbSBzaGFyZWRfcHJlbG9h ZF9saWJyYXJpZXMgaW4KLQkgKiBfUEdfaW5pdCgpLCBzbyB3ZSBzaG91bGQgbm90IGdldCBoZXJl IGFmdGVyIHBvc3RtYXN0ZXIgc3RhcnR1cC4KLQkgKi8KLQlBc3NlcnQoIUlzVW5kZXJQb3N0bWFz dGVyKTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgc2htZW0gYXJlYSB3aXRoIG5vIHN0YXRp c3RpY3MuCi0JICovCi0JdHJhbmNoZV9pZCA9IExXTG9ja05ld1RyYW5jaGVJZCgicGdfc3RhdF9z dGF0ZW1lbnRzIik7Ci0JTFdMb2NrSW5pdGlhbGl6ZSgmcGdzcy0+bG9jay5sb2NrLCB0cmFuY2hl X2lkKTsKLQlwZ3NzLT5jdXJfbWVkaWFuX3VzYWdlID0gQVNTVU1FRF9NRURJQU5fSU5JVDsKLQlw Z3NzLT5tZWFuX3F1ZXJ5X2xlbiA9IEFTU1VNRURfTEVOR1RIX0lOSVQ7Ci0JU3BpbkxvY2tJbml0 KCZwZ3NzLT5tdXRleCk7Ci0JcGdzcy0+ZXh0ZW50ID0gMDsKLQlwZ3NzLT5uX3dyaXRlcnMgPSAw OwotCXBnc3MtPmdjX2NvdW50ID0gMDsKLQlwZ3NzLT5zdGF0cy5kZWFsbG9jID0gMDsKLQlwZ3Nz LT5zdGF0cy5zdGF0c19yZXNldCA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKLQotCS8qIFRoZSBo YXNoIHRhYmxlIG11c3QndmUgYWxzbyBiZWVuIGluaXRpYWxpemVkIGJ5IG5vdyAqLwotCUFzc2Vy dChwZ3NzX2hhc2ggIT0gTlVMTCk7Ci0KLQkvKgotCSAqIFNldCB1cCBhIHNobWVtIGV4aXQgaG9v ayB0byBkdW1wIHRoZSBzdGF0aXN0aWNzIHRvIGRpc2sgb24gcG9zdG1hc3RlcgotCSAqIChvciBz dGFuZGFsb25lIGJhY2tlbmQpIGV4aXQuCi0JICovCi0Jb25fc2htZW1fZXhpdChwZ3NzX3NobWVt X3NodXRkb3duLCAoRGF0dW0pIDApOworCWludDY0CQluX2EsCisJCQkJbl9iOworCWRvdWJsZQkJ ZGVsdGE7CiAKLQkvKgotCSAqIExvYWQgYW55IHByZS1leGlzdGluZyBzdGF0aXN0aWNzIGZyb20g ZmlsZS4KLQkgKgotCSAqIE5vdGU6IHdlIGRvbid0IGJvdGhlciB3aXRoIGxvY2tzIGhlcmUsIGJl Y2F1c2UgdGhlcmUgc2hvdWxkIGJlIG5vIG90aGVyCi0JICogcHJvY2Vzc2VzIHJ1bm5pbmcgd2hl biB0aGlzIGNvZGUgaXMgcmVhY2hlZC4KLQkgKi8KKwluX2EgPSBzaGFyZWQtPmNhbGxzW2tpbmRd OworCW5fYiA9IHBlbmRpbmctPmNhbGxzW2tpbmRdOwogCi0JLyogVW5saW5rIHF1ZXJ5IHRleHQg ZmlsZSBwb3NzaWJseSBsZWZ0IG92ZXIgZnJvbSBjcmFzaCAqLwotCXVubGluayhQR1NTX1RFWFRf RklMRSk7Ci0KLQkvKiBBbGxvY2F0ZSBuZXcgcXVlcnkgdGV4dCB0ZW1wIGZpbGUgKi8KLQlxZmls ZSA9IEFsbG9jYXRlRmlsZShQR1NTX1RFWFRfRklMRSwgUEdfQklOQVJZX1cpOwotCWlmIChxZmls ZSA9PSBOVUxMKQotCQlnb3RvIHdyaXRlX2Vycm9yOworCXNoYXJlZC0+Y2FsbHNba2luZF0gKz0g bl9iOworCXNoYXJlZC0+dG90YWxfdGltZVtraW5kXSArPSBwZW5kaW5nLT50b3RhbF90aW1lW2tp bmRdOwogCi0JLyoKLQkgKiBJZiB3ZSB3ZXJlIHRvbGQgbm90IHRvIGxvYWQgb2xkIHN0YXRpc3Rp Y3MsIHdlJ3JlIGRvbmUuICAoTm90ZSB3ZSBkbwotCSAqIG5vdCB0cnkgdG8gdW5saW5rIGFueSBv bGQgZHVtcCBmaWxlIGluIHRoaXMgY2FzZS4gIFRoaXMgc2VlbXMgYSBiaXQKLQkgKiBxdWVzdGlv bmFibGUgYnV0IGl0J3MgdGhlIGhpc3RvcmljYWwgYmVoYXZpb3IuKQotCSAqLwotCWlmICghcGdz c19zYXZlKQorCWlmIChuX2EgPT0gMCkKIAl7Ci0JCUZyZWVGaWxlKHFmaWxlKTsKLQkJcmV0dXJu OworCQlzaGFyZWQtPm1pbl90aW1lW2tpbmRdID0gcGVuZGluZy0+bWluX3RpbWVba2luZF07CisJ CXNoYXJlZC0+bWF4X3RpbWVba2luZF0gPSBwZW5kaW5nLT5tYXhfdGltZVtraW5kXTsKKwkJc2hh cmVkLT5tZWFuX3RpbWVba2luZF0gPSBwZW5kaW5nLT5tZWFuX3RpbWVba2luZF07CisJCXNoYXJl ZC0+c3VtX3Zhcl90aW1lW2tpbmRdID0gcGVuZGluZy0+c3VtX3Zhcl90aW1lW2tpbmRdOwogCX0K LQotCS8qCi0JICogQXR0ZW1wdCB0byBsb2FkIG9sZCBzdGF0aXN0aWNzIGZyb20gdGhlIGR1bXAg ZmlsZS4KLQkgKi8KLQlmaWxlID0gQWxsb2NhdGVGaWxlKFBHU1NfRFVNUF9GSUxFLCBQR19CSU5B UllfUik7Ci0JaWYgKGZpbGUgPT0gTlVMTCkKKwllbHNlCiAJewotCQlpZiAoZXJybm8gIT0gRU5P RU5UKQotCQkJZ290byByZWFkX2Vycm9yOwotCQkvKiBObyBleGlzdGluZyBwZXJzaXN0ZWQgc3Rh dHMgZmlsZSwgc28gd2UncmUgZG9uZSAqLwotCQlGcmVlRmlsZShxZmlsZSk7Ci0JCXJldHVybjsK KwkJaWYgKHBlbmRpbmctPm1pbl90aW1lW2tpbmRdIDwgc2hhcmVkLT5taW5fdGltZVtraW5kXSkK KwkJCXNoYXJlZC0+bWluX3RpbWVba2luZF0gPSBwZW5kaW5nLT5taW5fdGltZVtraW5kXTsKKwkJ aWYgKHBlbmRpbmctPm1heF90aW1lW2tpbmRdID4gc2hhcmVkLT5tYXhfdGltZVtraW5kXSkKKwkJ CXNoYXJlZC0+bWF4X3RpbWVba2luZF0gPSBwZW5kaW5nLT5tYXhfdGltZVtraW5kXTsKKworCQkv KgorCQkgKiBDaGFuJ3MgcGFyYWxsZWwgdmFyaWFuY2UgYWxnb3JpdGhtOiBjb21iaW5lIHR3byBz ZXRzIG9mIChjb3VudCwKKwkJICogbWVhbiwgc3VtX29mX3NxdWFyZWRfZGV2aWF0aW9ucykuIFNl ZQorCQkgKiA8aHR0cDovL3d3dy5qb2huZGNvb2suY29tL2Jsb2cvc3RhbmRhcmRfZGV2aWF0aW9u Lz4KKwkJICovCisJCWRlbHRhID0gcGVuZGluZy0+bWVhbl90aW1lW2tpbmRdIC0gc2hhcmVkLT5t ZWFuX3RpbWVba2luZF07CisJCXNoYXJlZC0+c3VtX3Zhcl90aW1lW2tpbmRdICs9CisJCQlwZW5k aW5nLT5zdW1fdmFyX3RpbWVba2luZF0gKworCQkJZGVsdGEgKiBkZWx0YSAqIChkb3VibGUpIG5f YSAqIChkb3VibGUpIG5fYiAvIChkb3VibGUpIChuX2EgKyBuX2IpOworCQlzaGFyZWQtPm1lYW5f dGltZVtraW5kXSA9CisJCQlzaGFyZWQtPnRvdGFsX3RpbWVba2luZF0gLyBzaGFyZWQtPmNhbGxz W2tpbmRdOwogCX0KK30KIAotCWJ1ZmZlcl9zaXplID0gMjA0ODsKLQlidWZmZXIgPSAoY2hhciAq KSBwYWxsb2MoYnVmZmVyX3NpemUpOworc3RhdGljIGJvb2wKK3Bnc3NfZmx1c2hfcGVuZGluZ19j YihQZ1N0YXRfRW50cnlSZWYgKmVudHJ5X3JlZiwgYm9vbCBub3dhaXQpCit7CisJUGdTdGF0X1Bn c3NQZW5kaW5nICpwZW5kaW5nOworCVBnU3RhdFNoYXJlZF9QZ3NzICpzaGFyZWQ7CiAKLQlpZiAo ZnJlYWQoJmhlYWRlciwgc2l6ZW9mKHVpbnQzMiksIDEsIGZpbGUpICE9IDEgfHwKLQkJZnJlYWQo JnBndmVyLCBzaXplb2YodWludDMyKSwgMSwgZmlsZSkgIT0gMSB8fAotCQlmcmVhZCgmbnVtLCBz aXplb2YoaW50MzIpLCAxLCBmaWxlKSAhPSAxKQotCQlnb3RvIHJlYWRfZXJyb3I7CisJcGVuZGlu ZyA9IChQZ1N0YXRfUGdzc1BlbmRpbmcgKikgZW50cnlfcmVmLT5wZW5kaW5nOworCXNoYXJlZCA9 IChQZ1N0YXRTaGFyZWRfUGdzcyAqKSBlbnRyeV9yZWYtPnNoYXJlZF9zdGF0czsKIAotCWlmICho ZWFkZXIgIT0gUEdTU19GSUxFX0hFQURFUiB8fAotCQlwZ3ZlciAhPSBQR1NTX1BHX01BSk9SX1ZF UlNJT04pCi0JCWdvdG8gZGF0YV9lcnJvcjsKKwlpZiAoIXBnc3RhdF9sb2NrX2VudHJ5KGVudHJ5 X3JlZiwgbm93YWl0KSkKKwkJcmV0dXJuIGZhbHNlOwogCi0JZm9yIChpID0gMDsgaSA8IG51bTsg aSsrKQotCXsKLQkJcGdzc0VudHJ5CXRlbXA7Ci0JCXBnc3NFbnRyeSAgKmVudHJ5OwotCQlTaXpl CQlxdWVyeV9vZmZzZXQ7CisJc2hhcmVkLT5rZXkgPSBwZW5kaW5nLT5rZXk7CisKKwlwZ3NzX2Zs dXNoX2tpbmQoJnNoYXJlZC0+Y291bnRlcnMsICZwZW5kaW5nLT5jb3VudGVycywgUEdTU19FWEVD KTsKKworCWlmIChwZ3NzX3RyYWNrX3BsYW5uaW5nICYmIHBlbmRpbmctPmNvdW50ZXJzLmNhbGxz W1BHU1NfUExBTl0gPiAwKQorCQlwZ3NzX2ZsdXNoX2tpbmQoJnNoYXJlZC0+Y291bnRlcnMsICZw ZW5kaW5nLT5jb3VudGVycywgUEdTU19QTEFOKTsKKworCXNoYXJlZC0+Y291bnRlcnMucm93cyAr PSBwZW5kaW5nLT5jb3VudGVycy5yb3dzOworCXNoYXJlZC0+Y291bnRlcnMuc2hhcmVkX2Jsa3Nf aGl0ICs9IHBlbmRpbmctPmNvdW50ZXJzLnNoYXJlZF9ibGtzX2hpdDsKKwlzaGFyZWQtPmNvdW50 ZXJzLnNoYXJlZF9ibGtzX3JlYWQgKz0gcGVuZGluZy0+Y291bnRlcnMuc2hhcmVkX2Jsa3NfcmVh ZDsKKwlzaGFyZWQtPmNvdW50ZXJzLnNoYXJlZF9ibGtzX2RpcnRpZWQgKz0gcGVuZGluZy0+Y291 bnRlcnMuc2hhcmVkX2Jsa3NfZGlydGllZDsKKwlzaGFyZWQtPmNvdW50ZXJzLnNoYXJlZF9ibGtz X3dyaXR0ZW4gKz0gcGVuZGluZy0+Y291bnRlcnMuc2hhcmVkX2Jsa3Nfd3JpdHRlbjsKKwlzaGFy ZWQtPmNvdW50ZXJzLmxvY2FsX2Jsa3NfaGl0ICs9IHBlbmRpbmctPmNvdW50ZXJzLmxvY2FsX2Js a3NfaGl0OworCXNoYXJlZC0+Y291bnRlcnMubG9jYWxfYmxrc19yZWFkICs9IHBlbmRpbmctPmNv dW50ZXJzLmxvY2FsX2Jsa3NfcmVhZDsKKwlzaGFyZWQtPmNvdW50ZXJzLmxvY2FsX2Jsa3NfZGly dGllZCArPSBwZW5kaW5nLT5jb3VudGVycy5sb2NhbF9ibGtzX2RpcnRpZWQ7CisJc2hhcmVkLT5j b3VudGVycy5sb2NhbF9ibGtzX3dyaXR0ZW4gKz0gcGVuZGluZy0+Y291bnRlcnMubG9jYWxfYmxr c193cml0dGVuOworCXNoYXJlZC0+Y291bnRlcnMudGVtcF9ibGtzX3JlYWQgKz0gcGVuZGluZy0+ Y291bnRlcnMudGVtcF9ibGtzX3JlYWQ7CisJc2hhcmVkLT5jb3VudGVycy50ZW1wX2Jsa3Nfd3Jp dHRlbiArPSBwZW5kaW5nLT5jb3VudGVycy50ZW1wX2Jsa3Nfd3JpdHRlbjsKKwlzaGFyZWQtPmNv dW50ZXJzLnNoYXJlZF9ibGtfcmVhZF90aW1lICs9IHBlbmRpbmctPmNvdW50ZXJzLnNoYXJlZF9i bGtfcmVhZF90aW1lOworCXNoYXJlZC0+Y291bnRlcnMuc2hhcmVkX2Jsa193cml0ZV90aW1lICs9 IHBlbmRpbmctPmNvdW50ZXJzLnNoYXJlZF9ibGtfd3JpdGVfdGltZTsKKwlzaGFyZWQtPmNvdW50 ZXJzLmxvY2FsX2Jsa19yZWFkX3RpbWUgKz0gcGVuZGluZy0+Y291bnRlcnMubG9jYWxfYmxrX3Jl YWRfdGltZTsKKwlzaGFyZWQtPmNvdW50ZXJzLmxvY2FsX2Jsa193cml0ZV90aW1lICs9IHBlbmRp bmctPmNvdW50ZXJzLmxvY2FsX2Jsa193cml0ZV90aW1lOworCXNoYXJlZC0+Y291bnRlcnMudGVt cF9ibGtfcmVhZF90aW1lICs9IHBlbmRpbmctPmNvdW50ZXJzLnRlbXBfYmxrX3JlYWRfdGltZTsK KwlzaGFyZWQtPmNvdW50ZXJzLnRlbXBfYmxrX3dyaXRlX3RpbWUgKz0gcGVuZGluZy0+Y291bnRl cnMudGVtcF9ibGtfd3JpdGVfdGltZTsKKwlzaGFyZWQtPmNvdW50ZXJzLndhbF9yZWNvcmRzICs9 IHBlbmRpbmctPmNvdW50ZXJzLndhbF9yZWNvcmRzOworCXNoYXJlZC0+Y291bnRlcnMud2FsX2Zw aSArPSBwZW5kaW5nLT5jb3VudGVycy53YWxfZnBpOworCXNoYXJlZC0+Y291bnRlcnMud2FsX2J5 dGVzICs9IHBlbmRpbmctPmNvdW50ZXJzLndhbF9ieXRlczsKKwlzaGFyZWQtPmNvdW50ZXJzLndh bF9idWZmZXJzX2Z1bGwgKz0gcGVuZGluZy0+Y291bnRlcnMud2FsX2J1ZmZlcnNfZnVsbDsKKwlz aGFyZWQtPmNvdW50ZXJzLmppdF9mdW5jdGlvbnMgKz0gcGVuZGluZy0+Y291bnRlcnMuaml0X2Z1 bmN0aW9uczsKKwlzaGFyZWQtPmNvdW50ZXJzLmppdF9nZW5lcmF0aW9uX3RpbWUgKz0gcGVuZGlu Zy0+Y291bnRlcnMuaml0X2dlbmVyYXRpb25fdGltZTsKKwlzaGFyZWQtPmNvdW50ZXJzLmppdF9p bmxpbmluZ19jb3VudCArPSBwZW5kaW5nLT5jb3VudGVycy5qaXRfaW5saW5pbmdfY291bnQ7CisJ c2hhcmVkLT5jb3VudGVycy5qaXRfaW5saW5pbmdfdGltZSArPSBwZW5kaW5nLT5jb3VudGVycy5q aXRfaW5saW5pbmdfdGltZTsKKwlzaGFyZWQtPmNvdW50ZXJzLmppdF9vcHRpbWl6YXRpb25fY291 bnQgKz0gcGVuZGluZy0+Y291bnRlcnMuaml0X29wdGltaXphdGlvbl9jb3VudDsKKwlzaGFyZWQt PmNvdW50ZXJzLmppdF9vcHRpbWl6YXRpb25fdGltZSArPSBwZW5kaW5nLT5jb3VudGVycy5qaXRf b3B0aW1pemF0aW9uX3RpbWU7CisJc2hhcmVkLT5jb3VudGVycy5qaXRfZW1pc3Npb25fY291bnQg Kz0gcGVuZGluZy0+Y291bnRlcnMuaml0X2VtaXNzaW9uX2NvdW50OworCXNoYXJlZC0+Y291bnRl cnMuaml0X2VtaXNzaW9uX3RpbWUgKz0gcGVuZGluZy0+Y291bnRlcnMuaml0X2VtaXNzaW9uX3Rp bWU7CisJc2hhcmVkLT5jb3VudGVycy5qaXRfZGVmb3JtX2NvdW50ICs9IHBlbmRpbmctPmNvdW50 ZXJzLmppdF9kZWZvcm1fY291bnQ7CisJc2hhcmVkLT5jb3VudGVycy5qaXRfZGVmb3JtX3RpbWUg Kz0gcGVuZGluZy0+Y291bnRlcnMuaml0X2RlZm9ybV90aW1lOworCXNoYXJlZC0+Y291bnRlcnMu cGFyYWxsZWxfd29ya2Vyc190b19sYXVuY2ggKz0gcGVuZGluZy0+Y291bnRlcnMucGFyYWxsZWxf d29ya2Vyc190b19sYXVuY2g7CisJc2hhcmVkLT5jb3VudGVycy5wYXJhbGxlbF93b3JrZXJzX2xh dW5jaGVkICs9IHBlbmRpbmctPmNvdW50ZXJzLnBhcmFsbGVsX3dvcmtlcnNfbGF1bmNoZWQ7CisJ c2hhcmVkLT5jb3VudGVycy5nZW5lcmljX3BsYW5fY2FsbHMgKz0gcGVuZGluZy0+Y291bnRlcnMu Z2VuZXJpY19wbGFuX2NhbGxzOworCXNoYXJlZC0+Y291bnRlcnMuY3VzdG9tX3BsYW5fY2FsbHMg Kz0gcGVuZGluZy0+Y291bnRlcnMuY3VzdG9tX3BsYW5fY2FsbHM7CisKKwlwZ3N0YXRfdW5sb2Nr X2VudHJ5KGVudHJ5X3JlZik7CiAKLQkJaWYgKGZyZWFkKCZ0ZW1wLCBzaXplb2YocGdzc0VudHJ5 KSwgMSwgZmlsZSkgIT0gMSkKLQkJCWdvdG8gcmVhZF9lcnJvcjsKKwlyZXR1cm4gdHJ1ZTsKK30K IAotCQkvKiBFbmNvZGluZyBpcyB0aGUgb25seSBmaWVsZCB3ZSBjYW4gZWFzaWx5IHNhbml0eS1j aGVjayAqLwotCQlpZiAoIVBHX1ZBTElEX0JFX0VOQ09ESU5HKHRlbXAuZW5jb2RpbmcpKQotCQkJ Z290byBkYXRhX2Vycm9yOworLyoKKyAqIFNlcmlhbGl6ZSBkc2hhc2ggZW50cnkgZGF0YSArIHF1 ZXJ5IHRleHQgaW5saW5lIGFsb25nc2lkZSBlYWNoIHBnc3RhdCBlbnRyeS4KKyAqIE9uIHJlc3Rh cnQsIGZyb21fc2VyaWFsaXplZF9kYXRhIHJlY29uc3RydWN0cyBib3RoLgorICovCitzdGF0aWMg dm9pZAorcGdzc190b19zZXJpYWxpemVkX2RhdGEoY29uc3QgUGdTdGF0X0hhc2hLZXkgKmtleSwK KwkJCQkJCWNvbnN0IFBnU3RhdFNoYXJlZF9Db21tb24gKmhlYWRlciwKKwkJCQkJCUZJTEUgKnN0 YXRmaWxlKQoreworCXN0YXRpYyBjaGFyICpxYnVmZmVyID0gTlVMTDsKKwlzdGF0aWMgU2l6ZSBx YnVmZmVyX3NpemUgPSAwOwogCi0JCS8qIFJlc2l6ZSBidWZmZXIgYXMgbmVlZGVkICovCi0JCWlm ICh0ZW1wLnF1ZXJ5X2xlbiA+PSBidWZmZXJfc2l6ZSkKLQkJewotCQkJYnVmZmVyX3NpemUgPSBN YXgoYnVmZmVyX3NpemUgKiAyLCB0ZW1wLnF1ZXJ5X2xlbiArIDEpOwotCQkJYnVmZmVyID0gcmVw YWxsb2MoYnVmZmVyLCBidWZmZXJfc2l6ZSk7Ci0JCX0KKwlQZ1N0YXRTaGFyZWRfUGdzcyAqc2hw Z3NzID0gKFBnU3RhdFNoYXJlZF9QZ3NzICopIGhlYWRlcjsKKwlwZ3NzRW50cnkgICplbnRyeTsK Kwlib29sCQlmb3VuZCA9IGZhbHNlOworCXBnc3NFbnRyeQlzZXJpYWxpemVkOworCWNoYXIJICAg KnF0ZXh0ID0gTlVMTDsKKwlpbnQJCQlxdGV4dF9sZW4gPSAwOwogCi0JCWlmIChmcmVhZChidWZm ZXIsIDEsIHRlbXAucXVlcnlfbGVuICsgMSwgZmlsZSkgIT0gdGVtcC5xdWVyeV9sZW4gKyAxKQot CQkJZ290byByZWFkX2Vycm9yOworCWlmICghcGdzc19zYXZlKQorCXsKKwkJcGdzdGF0X3dyaXRl X2NodW5rX3Moc3RhdGZpbGUsICZmb3VuZCk7CisJCXJldHVybjsKKwl9CiAKLQkJLyogU2hvdWxk IGhhdmUgYSB0cmFpbGluZyBudWxsLCBidXQgbGV0J3MgbWFrZSBzdXJlICovCi0JCWJ1ZmZlclt0 ZW1wLnF1ZXJ5X2xlbl0gPSAnXDAnOworCXBnc3NfYXR0YWNoX3NobWVtKCk7CiAKLQkJLyogU2tp cCBsb2FkaW5nICJzdGlja3kiIGVudHJpZXMgKi8KLQkJaWYgKElTX1NUSUNLWSh0ZW1wLmNvdW50 ZXJzKSkKLQkJCWNvbnRpbnVlOworCW1lbXNldCgmc2VyaWFsaXplZCwgMCwgc2l6ZW9mKHBnc3NF bnRyeSkpOwogCi0JCS8qIFN0b3JlIHRoZSBxdWVyeSB0ZXh0ICovCi0JCXF1ZXJ5X29mZnNldCA9 IHBnc3MtPmV4dGVudDsKLQkJaWYgKGZ3cml0ZShidWZmZXIsIDEsIHRlbXAucXVlcnlfbGVuICsg MSwgcWZpbGUpICE9IHRlbXAucXVlcnlfbGVuICsgMSkKLQkJCWdvdG8gd3JpdGVfZXJyb3I7Ci0J CXBnc3MtPmV4dGVudCArPSB0ZW1wLnF1ZXJ5X2xlbiArIDE7Ci0KLQkJLyogbWFrZSB0aGUgaGFz aHRhYmxlIGVudHJ5IChkaXNjYXJkcyBvbGQgZW50cmllcyBpZiB0b28gbWFueSkgKi8KLQkJZW50 cnkgPSBlbnRyeV9hbGxvYygmdGVtcC5rZXksIHF1ZXJ5X29mZnNldCwgdGVtcC5xdWVyeV9sZW4s Ci0JCQkJCQkJdGVtcC5lbmNvZGluZywKLQkJCQkJCQlmYWxzZSk7Ci0KLQkJLyogY29weSBpbiB0 aGUgYWN0dWFsIHN0YXRzICovCi0JCWVudHJ5LT5jb3VudGVycyA9IHRlbXAuY291bnRlcnM7Ci0J CWVudHJ5LT5zdGF0c19zaW5jZSA9IHRlbXAuc3RhdHNfc2luY2U7Ci0JCWVudHJ5LT5taW5tYXhf c3RhdHNfc2luY2UgPSB0ZW1wLm1pbm1heF9zdGF0c19zaW5jZTsKKwllbnRyeSA9IGRzaGFzaF9m aW5kKHBnc3NfaGFzaCwgJnNocGdzcy0+a2V5LCBmYWxzZSk7CisJaWYgKGVudHJ5KQorCXsKKwkJ c2VyaWFsaXplZCA9ICplbnRyeTsKKwkJZm91bmQgPSB0cnVlOworCQlkc2hhc2hfcmVsZWFzZV9s b2NrKHBnc3NfaGFzaCwgZW50cnkpOwogCX0KIAotCS8qIFJlYWQgZ2xvYmFsIHN0YXRpc3RpY3Mg Zm9yIHBnX3N0YXRfc3RhdGVtZW50cyAqLwotCWlmIChmcmVhZCgmcGdzcy0+c3RhdHMsIHNpemVv ZihwZ3NzR2xvYmFsU3RhdHMpLCAxLCBmaWxlKSAhPSAxKQotCQlnb3RvIHJlYWRfZXJyb3I7CisJ cGdzdGF0X3dyaXRlX2NodW5rX3Moc3RhdGZpbGUsICZmb3VuZCk7CiAKLQlwZnJlZShidWZmZXIp OwotCUZyZWVGaWxlKGZpbGUpOwotCUZyZWVGaWxlKHFmaWxlKTsKKwlpZiAoIWZvdW5kKQorCQly ZXR1cm47CiAKLQkvKgotCSAqIFJlbW92ZSB0aGUgcGVyc2lzdGVkIHN0YXRzIGZpbGUgc28gaXQn cyBub3QgaW5jbHVkZWQgaW4KLQkgKiBiYWNrdXBzL3JlcGxpY2F0aW9uIHN0YW5kYnlzLCBldGMu ICBBIG5ldyBmaWxlIHdpbGwgYmUgd3JpdHRlbiBvbiBuZXh0Ci0JICogc2h1dGRvd24uCi0JICoK LQkgKiBOb3RlOiBpdCdzIG9rYXkgaWYgdGhlIFBHU1NfVEVYVF9GSUxFIGlzIGluY2x1ZGVkIGlu IGEgYmFzZWJhY2t1cCwKLQkgKiBiZWNhdXNlIHdlIHJlbW92ZSB0aGF0IGZpbGUgb24gc3RhcnR1 cDsgaXQgYWN0cyBpbnZlcnNlbHkgdG8KLQkgKiBQR1NTX0RVTVBfRklMRSwgaW4gdGhhdCBpdCBp cyBvbmx5IHN1cHBvc2VkIHRvIGJlIGFyb3VuZCB3aGVuIHRoZQotCSAqIHNlcnZlciBpcyBydW5u aW5nLCB3aGVyZWFzIFBHU1NfRFVNUF9GSUxFIGlzIG9ubHkgc3VwcG9zZWQgdG8gYmUgYXJvdW5k Ci0JICogd2hlbiB0aGUgc2VydmVyIGlzIG5vdCBydW5uaW5nLiAgTGVhdmluZyB0aGUgZmlsZSBj cmVhdGVzIG5vIGRhbmdlciBvZgotCSAqIGEgbmV3bHkgcmVzdG9yZWQgZGF0YWJhc2UgaGF2aW5n IGEgc3B1cmlvdXMgcmVjb3JkIG9mIGV4ZWN1dGlvbiBjb3N0cywKLQkgKiB3aGljaCBpcyB3aGF0 IHdlJ3JlIHJlYWxseSBjb25jZXJuZWQgYWJvdXQgaGVyZS4KLQkgKi8KLQl1bmxpbmsoUEdTU19E VU1QX0ZJTEUpOworCXBnc3RhdF93cml0ZV9jaHVua19zKHN0YXRmaWxlLCAmc2VyaWFsaXplZCk7 CiAKLQlyZXR1cm47CisJLyogTG9hZCBxdWVyeSB0ZXh0IGZpbGUgb25jZSwgcmV1c2UgYWNyb3Nz IGFsbCBlbnRyaWVzICovCisJaWYgKCFxYnVmZmVyKQorCQlxYnVmZmVyID0gcXRleHRfbG9hZF9m aWxlKCZxYnVmZmVyX3NpemUpOwogCi1yZWFkX2Vycm9yOgotCWVyZXBvcnQoTE9HLAotCQkJKGVy cmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkgZXJybXNnKCJjb3VsZCBub3QgcmVhZCBmaWxl IFwiJXNcIjogJW0iLAotCQkJCQlQR1NTX0RVTVBfRklMRSkpKTsKLQlnb3RvIGZhaWw7Ci1kYXRh X2Vycm9yOgotCWVyZXBvcnQoTE9HLAotCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCi0JCQkgZXJybXNnKCJpZ25vcmluZyBpbnZhbGlkIGRhdGEgaW4gZmlsZSBc IiVzXCIiLAotCQkJCQlQR1NTX0RVTVBfRklMRSkpKTsKLQlnb3RvIGZhaWw7Ci13cml0ZV9lcnJv cjoKLQllcmVwb3J0KExPRywKLQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJIGVy cm1zZygiY291bGQgbm90IHdyaXRlIGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJCVBHU1NfVEVYVF9G SUxFKSkpOwotZmFpbDoKLQlpZiAoYnVmZmVyKQotCQlwZnJlZShidWZmZXIpOwotCWlmIChmaWxl KQotCQlGcmVlRmlsZShmaWxlKTsKLQlpZiAocWZpbGUpCi0JCUZyZWVGaWxlKHFmaWxlKTsKLQkv KiBJZiBwb3NzaWJsZSwgdGhyb3cgYXdheSB0aGUgYm9ndXMgZmlsZTsgaWdub3JlIGFueSBlcnJv ciAqLwotCXVubGluayhQR1NTX0RVTVBfRklMRSk7CisJaWYgKHNlcmlhbGl6ZWQucXVlcnlfbGVu ID49IDAgJiYgcWJ1ZmZlcikKKwkJcXRleHQgPSBxdGV4dF9mZXRjaChzZXJpYWxpemVkLnF1ZXJ5 X29mZnNldCwgc2VyaWFsaXplZC5xdWVyeV9sZW4sCisJCQkJCQkJcWJ1ZmZlciwgcWJ1ZmZlcl9z aXplKTsKIAotCS8qCi0JICogRG9uJ3QgdW5saW5rIFBHU1NfVEVYVF9GSUxFIGhlcmU7IGl0IHNo b3VsZCBhbHdheXMgYmUgYXJvdW5kIHdoaWxlIHRoZQotCSAqIHNlcnZlciBpcyBydW5uaW5nIHdp dGggcGdfc3RhdF9zdGF0ZW1lbnRzIGVuYWJsZWQKLQkgKi8KKwlpZiAocXRleHQpCisJeworCQlx dGV4dF9sZW4gPSBzZXJpYWxpemVkLnF1ZXJ5X2xlbjsKKwkJcGdzdGF0X3dyaXRlX2NodW5rX3Mo c3RhdGZpbGUsICZxdGV4dF9sZW4pOworCQlwZ3N0YXRfd3JpdGVfY2h1bmsoc3RhdGZpbGUsIHF0 ZXh0LCBxdGV4dF9sZW4gKyAxKTsKKwl9CisJZWxzZQorCXsKKwkJcXRleHRfbGVuID0gLTE7CisJ CXBnc3RhdF93cml0ZV9jaHVua19zKHN0YXRmaWxlLCAmcXRleHRfbGVuKTsKKwl9CiB9CiAKIC8q Ci0gKiBzaG1lbV9zaHV0ZG93biBob29rOiBEdW1wIHN0YXRpc3RpY3MgaW50byBmaWxlLgotICoK LSAqIE5vdGU6IHdlIGRvbid0IGJvdGhlciB3aXRoIGFjcXVpcmluZyBsb2NrLCBiZWNhdXNlIHRo ZXJlIHNob3VsZCBiZSBubwotICogb3RoZXIgcHJvY2Vzc2VzIHJ1bm5pbmcgd2hlbiB0aGlzIGlz IGNhbGxlZC4KKyAqIERlc2VyaWFsaXplIGF1eGlsaWFyeSBkYXRhOiByZWNyZWF0ZSB0aGUgZHNo YXNoIGVudHJ5IGFuZCBzdG9yZSBxdWVyeQorICogdGV4dCBpbiB0aGUgZmlsZS4KICAqLwotc3Rh dGljIHZvaWQKLXBnc3Nfc2htZW1fc2h1dGRvd24oaW50IGNvZGUsIERhdHVtIGFyZykKK3N0YXRp YyBib29sCitwZ3NzX2Zyb21fc2VyaWFsaXplZF9kYXRhKGNvbnN0IFBnU3RhdF9IYXNoS2V5ICpr ZXksCisJCQkJCQkgIFBnU3RhdFNoYXJlZF9Db21tb24gKmhlYWRlciwKKwkJCQkJCSAgRklMRSAq c3RhdGZpbGUpCiB7Ci0JRklMRQkgICAqZmlsZTsKLQljaGFyCSAgICpxYnVmZmVyID0gTlVMTDsK LQlTaXplCQlxYnVmZmVyX3NpemUgPSAwOwotCUhBU0hfU0VRX1NUQVRVUyBoYXNoX3NlcTsKLQlp bnQzMgkJbnVtX2VudHJpZXM7Ci0JcGdzc0VudHJ5ICAqZW50cnk7Ci0KLQkvKiBEb24ndCB0cnkg dG8gZHVtcCBkdXJpbmcgYSBjcmFzaC4gKi8KLQlpZiAoY29kZSkKLQkJcmV0dXJuOworCWJvb2wJ CWhhZF9lbnRyeTsKKwlwZ3NzRW50cnkJc2VyaWFsaXplZDsKKwlwZ3NzRW50cnkgICpkc2hfZW50 cnk7CisJYm9vbAkJZm91bmQ7CisJaW50CQkJcXRleHRfbGVuOwogCi0JLyogU2FmZXR5IGNoZWNr IC4uLiBzaG91bGRuJ3QgZ2V0IGhlcmUgdW5sZXNzIHNobWVtIGlzIHNldCB1cC4gKi8KLQlpZiAo IXBnc3MgfHwgIXBnc3NfaGFzaCkKLQkJcmV0dXJuOworCWlmICghcGdzdGF0X3JlYWRfY2h1bmtf cyhzdGF0ZmlsZSwgJmhhZF9lbnRyeSkpCisJCXJldHVybiBmYWxzZTsKIAotCS8qIERvbid0IGR1 bXAgaWYgdG9sZCBub3QgdG8uICovCi0JaWYgKCFwZ3NzX3NhdmUpCi0JCXJldHVybjsKKwlpZiAo IWhhZF9lbnRyeSkKKwl7CisJCXBnc3RhdF9kcm9wX2VudHJ5KFBHU1RBVF9LSU5EX1BHU1MsIGtl eS0+ZGJvaWQsIGtleS0+b2JqaWQsIGZhbHNlKTsKKwkJcmV0dXJuIHRydWU7CisJfQogCi0JZmls ZSA9IEFsbG9jYXRlRmlsZShQR1NTX0RVTVBfRklMRSAiLnRtcCIsIFBHX0JJTkFSWV9XKTsKLQlp ZiAoZmlsZSA9PSBOVUxMKQotCQlnb3RvIGVycm9yOworCWlmICghcGdzdGF0X3JlYWRfY2h1bmtf cyhzdGF0ZmlsZSwgJnNlcmlhbGl6ZWQpKQorCQlyZXR1cm4gZmFsc2U7CiAKLQlpZiAoZndyaXRl KCZQR1NTX0ZJTEVfSEVBREVSLCBzaXplb2YodWludDMyKSwgMSwgZmlsZSkgIT0gMSkKLQkJZ290 byBlcnJvcjsKLQlpZiAoZndyaXRlKCZQR1NTX1BHX01BSk9SX1ZFUlNJT04sIHNpemVvZih1aW50 MzIpLCAxLCBmaWxlKSAhPSAxKQotCQlnb3RvIGVycm9yOwotCW51bV9lbnRyaWVzID0gaGFzaF9n ZXRfbnVtX2VudHJpZXMocGdzc19oYXNoKTsKLQlpZiAoZndyaXRlKCZudW1fZW50cmllcywgc2l6 ZW9mKGludDMyKSwgMSwgZmlsZSkgIT0gMSkKLQkJZ290byBlcnJvcjsKKwlpZiAoIXBnc3RhdF9y ZWFkX2NodW5rX3Moc3RhdGZpbGUsICZxdGV4dF9sZW4pKQorCQlyZXR1cm4gZmFsc2U7CiAKLQlx YnVmZmVyID0gcXRleHRfbG9hZF9maWxlKCZxYnVmZmVyX3NpemUpOwotCWlmIChxYnVmZmVyID09 IE5VTEwpCi0JCWdvdG8gZXJyb3I7CisJcGdzc19hdHRhY2hfc2htZW0oKTsKIAotCS8qCi0JICog V2hlbiBzZXJpYWxpemluZyB0byBkaXNrLCB3ZSBzdG9yZSBxdWVyeSB0ZXh0cyBpbW1lZGlhdGVs eSBhZnRlciB0aGVpcgotCSAqIGVudHJ5IGRhdGEuICBBbnkgb3JwaGFuZWQgcXVlcnkgdGV4dHMg YXJlIHRoZXJlYnkgZXhjbHVkZWQuCi0JICovCi0JaGFzaF9zZXFfaW5pdCgmaGFzaF9zZXEsIHBn c3NfaGFzaCk7Ci0Jd2hpbGUgKChlbnRyeSA9IGhhc2hfc2VxX3NlYXJjaCgmaGFzaF9zZXEpKSAh PSBOVUxMKQorCWRzaF9lbnRyeSA9IGRzaGFzaF9maW5kX29yX2luc2VydChwZ3NzX2hhc2gsICZz ZXJpYWxpemVkLmtleSwgJmZvdW5kKTsKKwlpZiAoIWZvdW5kKQogCXsKLQkJaW50CQkJbGVuID0g ZW50cnktPnF1ZXJ5X2xlbjsKLQkJY2hhcgkgICAqcXN0ciA9IHF0ZXh0X2ZldGNoKGVudHJ5LT5x dWVyeV9vZmZzZXQsIGxlbiwKLQkJCQkJCQkJCSAgIHFidWZmZXIsIHFidWZmZXJfc2l6ZSk7CisJ CXBnX2F0b21pY19pbml0X3UzMigmZHNoX2VudHJ5LT5yZWZjb3VudCwgcGdfYXRvbWljX3JlYWRf dTMyKCZzZXJpYWxpemVkLnJlZmNvdW50KSk7CisJCWRzaF9lbnRyeS0+ZW5jb2RpbmcgPSBzZXJp YWxpemVkLmVuY29kaW5nOworCQlkc2hfZW50cnktPnN0YXRzX3NpbmNlID0gc2VyaWFsaXplZC5z dGF0c19zaW5jZTsKKwkJZHNoX2VudHJ5LT5taW5tYXhfc3RhdHNfc2luY2UgPSBzZXJpYWxpemVk Lm1pbm1heF9zdGF0c19zaW5jZTsKKworCQlpZiAocXRleHRfbGVuID49IDApCisJCXsKKwkJCWNo YXIJICAgKnF0ZXh0OworCQkJU2l6ZQkJcXVlcnlfb2Zmc2V0OworCisJCQlxdGV4dCA9IHBhbGxv YyhxdGV4dF9sZW4gKyAxKTsKKwkJCWlmICghcGdzdGF0X3JlYWRfY2h1bmsoc3RhdGZpbGUsIHF0 ZXh0LCBxdGV4dF9sZW4gKyAxKSkKKwkJCXsKKwkJCQlkc2hhc2hfcmVsZWFzZV9sb2NrKHBnc3Nf aGFzaCwgZHNoX2VudHJ5KTsKKwkJCQlwZnJlZShxdGV4dCk7CisJCQkJcmV0dXJuIGZhbHNlOwor CQkJfQogCi0JCWlmIChxc3RyID09IE5VTEwpCi0JCQljb250aW51ZTsJCQkvKiBJZ25vcmUgYW55 IGVudHJpZXMgd2l0aCBib2d1cyB0ZXh0cyAqLworCQkJLyogU3RvcmUgaW4gdGhlIHRleHQgZmls ZSAqLworCQkJaWYgKHF0ZXh0X3N0b3JlKHF0ZXh0LCBxdGV4dF9sZW4sICZxdWVyeV9vZmZzZXQs IE5VTEwpKQorCQkJeworCQkJCWRzaF9lbnRyeS0+cXVlcnlfb2Zmc2V0ID0gcXVlcnlfb2Zmc2V0 OworCQkJCWRzaF9lbnRyeS0+cXVlcnlfbGVuID0gcXRleHRfbGVuOworCQkJfQorCQkJZWxzZQor CQkJeworCQkJCWRzaF9lbnRyeS0+cXVlcnlfb2Zmc2V0ID0gMDsKKwkJCQlkc2hfZW50cnktPnF1 ZXJ5X2xlbiA9IC0xOworCQkJfQogCi0JCWlmIChmd3JpdGUoZW50cnksIHNpemVvZihwZ3NzRW50 cnkpLCAxLCBmaWxlKSAhPSAxIHx8Ci0JCQlmd3JpdGUocXN0ciwgMSwgbGVuICsgMSwgZmlsZSkg IT0gbGVuICsgMSkKKwkJCXBmcmVlKHF0ZXh0KTsKKwkJfQorCQllbHNlCiAJCXsKLQkJCS8qIG5v dGU6IHdlIGFzc3VtZSBoYXNoX3NlcV90ZXJtIHdvbid0IGNoYW5nZSBlcnJubyAqLwotCQkJaGFz aF9zZXFfdGVybSgmaGFzaF9zZXEpOwotCQkJZ290byBlcnJvcjsKKwkJCWRzaF9lbnRyeS0+cXVl cnlfb2Zmc2V0ID0gMDsKKwkJCWRzaF9lbnRyeS0+cXVlcnlfbGVuID0gLTE7CiAJCX0KKworCQlw Z19hdG9taWNfZmV0Y2hfYWRkX3U2NCgmcGdzc19zaGFyZWQtPm5lbnRyaWVzLCAxKTsKIAl9CisJ ZWxzZQorCXsKKwkJLyogRW50cnkgYWxyZWFkeSBleGlzdHMgKHJhY2UpLCBza2lwIHRoZSB0ZXh0 ICovCisJCWlmIChxdGV4dF9sZW4gPj0gMCkKKwkJeworCQkJY2hhcgkgICAqZGlzY2FyZCA9IHBh bGxvYyhxdGV4dF9sZW4gKyAxKTsKIAotCS8qIER1bXAgZ2xvYmFsIHN0YXRpc3RpY3MgZm9yIHBn X3N0YXRfc3RhdGVtZW50cyAqLwotCWlmIChmd3JpdGUoJnBnc3MtPnN0YXRzLCBzaXplb2YocGdz c0dsb2JhbFN0YXRzKSwgMSwgZmlsZSkgIT0gMSkKLQkJZ290byBlcnJvcjsKKwkJCXBnc3RhdF9y ZWFkX2NodW5rKHN0YXRmaWxlLCBkaXNjYXJkLCBxdGV4dF9sZW4gKyAxKTsKKwkJCXBmcmVlKGRp c2NhcmQpOworCQl9CisJfQogCi0JcGZyZWUocWJ1ZmZlcik7Ci0JcWJ1ZmZlciA9IE5VTEw7CisJ ZHNoYXNoX3JlbGVhc2VfbG9jayhwZ3NzX2hhc2gsIGRzaF9lbnRyeSk7CiAKLQlpZiAoRnJlZUZp bGUoZmlsZSkpCi0JewotCQlmaWxlID0gTlVMTDsKLQkJZ290byBlcnJvcjsKLQl9CisJcmV0dXJu IHRydWU7Cit9CiAKLQkvKgotCSAqIFJlbmFtZSBmaWxlIGludG8gcGxhY2UsIHNvIHdlIGF0b21p Y2FsbHkgcmVwbGFjZSBhbnkgb2xkIG9uZS4KLQkgKi8KLQkodm9pZCkgZHVyYWJsZV9yZW5hbWUo UEdTU19EVU1QX0ZJTEUgIi50bXAiLCBQR1NTX0RVTVBfRklMRSwgTE9HKTsKK3N0YXRpYyB2b2lk CitwZ3NzX2ZpbmlzaChQZ1N0YXRfU3RhdHNGaWxlT3Agc3RhdHVzKQoreworCXN3aXRjaCAoc3Rh dHVzKQorCXsKKwkJY2FzZSBTVEFUU19XUklURToKIAotCS8qIFVubGluayBxdWVyeS10ZXh0cyBm aWxlOyBpdCdzIG5vdCBuZWVkZWQgd2hpbGUgc2h1dGRvd24gKi8KLQl1bmxpbmsoUEdTU19URVhU X0ZJTEUpOworCQkJLyoKKwkJCSAqIFRleHQgaGFzIGJlZW4gc2VyaWFsaXplZCBpbnRvIHRoZSBw Z3N0YXQgZmlsZTsgcmVtb3ZlIHRoZQorCQkJICogb3JpZ2luYWwuCisJCQkgKi8KKwkJCXVubGlu ayhQR1NTX1RFWFRfRklMRSk7CisJCQlicmVhazsKIAotCXJldHVybjsKKwkJY2FzZSBTVEFUU19S RUFEOgorCQkJLyogVGV4dCBmaWxlIHdhcyByZWJ1aWx0IGJ5IGZyb21fc2VyaWFsaXplZF9kYXRh OyBrZWVwIGl0LiAqLworCQkJYnJlYWs7CiAKLWVycm9yOgotCWVyZXBvcnQoTE9HLAotCQkJKGVy cmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkgZXJybXNnKCJjb3VsZCBub3Qgd3JpdGUgZmls ZSBcIiVzXCI6ICVtIiwKLQkJCQkJUEdTU19EVU1QX0ZJTEUgIi50bXAiKSkpOwotCWlmIChxYnVm ZmVyKQotCQlwZnJlZShxYnVmZmVyKTsKLQlpZiAoZmlsZSkKLQkJRnJlZUZpbGUoZmlsZSk7Ci0J dW5saW5rKFBHU1NfRFVNUF9GSUxFICIudG1wIik7Ci0JdW5saW5rKFBHU1NfVEVYVF9GSUxFKTsK KwkJY2FzZSBTVEFUU19ESVNDQVJEOgorCQkJLyogU3RhdHMgZGlzY2FyZGVkOyByZW1vdmUgb3Jw aGFuZWQgdGV4dCBmaWxlLiAqLworCQkJdW5saW5rKFBHU1NfVEVYVF9GSUxFKTsKKwkJCWJyZWFr OworCX0KIH0KIAotLyoKLSAqIFBvc3QtcGFyc2UtYW5hbHlzaXMgaG9vazogbWFyayBxdWVyeSB3 aXRoIGEgcXVlcnlJZAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcGdzc19zdG9yZTogUmVjb3Jk IHN0YXRpc3RpY3MgZm9yIG9uZSBzdGF0ZW1lbnQgZXhlY3V0aW9uLgorICoKKyAqIENyZWF0ZXMg ZHNoYXNoIGVudHJ5IGlmIG5ldywgdGhlbiBhY2N1bXVsYXRlcyBjb3VudGVycyBpbiB0aGUgcGVu ZGluZworICogcGdzdGF0IGVudHJ5LgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBzdGF0aWMg dm9pZAotcGdzc19wb3N0X3BhcnNlX2FuYWx5emUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBRdWVyeSAq cXVlcnksIGNvbnN0IEp1bWJsZVN0YXRlICpqc3RhdGUpCitwZ3NzX3N0b3JlKGNvbnN0IGNoYXIg KnF1ZXJ5LCBpbnQ2NCBxdWVyeUlkLAorCQkgICBpbnQgcXVlcnlfbG9jYXRpb24sIGludCBxdWVy eV9sZW4sCisJCSAgIHBnc3NTdG9yZUtpbmQga2luZCwKKwkJICAgZG91YmxlIHRvdGFsX3RpbWUs IHVpbnQ2NCByb3dzLAorCQkgICBjb25zdCBCdWZmZXJVc2FnZSAqYnVmdXNhZ2UsCisJCSAgIGNv bnN0IFdhbFVzYWdlICp3YWx1c2FnZSwKKwkJICAgY29uc3Qgc3RydWN0IEppdEluc3RydW1lbnRh dGlvbiAqaml0dXNhZ2UsCisJCSAgIGNvbnN0IEp1bWJsZVN0YXRlICpqc3RhdGUsCisJCSAgIGlu dCBwYXJhbGxlbF93b3JrZXJzX3RvX2xhdW5jaCwKKwkJICAgaW50IHBhcmFsbGVsX3dvcmtlcnNf bGF1bmNoZWQsCisJCSAgIFBsYW5uZWRTdG10T3JpZ2luIHBsYW5PcmlnaW4pCiB7Ci0JaWYgKHBy ZXZfcG9zdF9wYXJzZV9hbmFseXplX2hvb2spCi0JCXByZXZfcG9zdF9wYXJzZV9hbmFseXplX2hv b2socHN0YXRlLCBxdWVyeSwganN0YXRlKTsKKwlwZ3NzSGFzaEtleSBrZXk7CisJcGdzc0VudHJ5 ICAqZHNoX2VudHJ5OworCWJvb2wJCWZvdW5kOworCXVpbnQ2NAkJb2JqaWQ7CisJUGdTdGF0X0Vu dHJ5UmVmICplbnRyeV9yZWY7CisJUGdTdGF0X1Bnc3NQZW5kaW5nICpwZW5kaW5nOworCWNoYXIJ ICAgKm5vcm1fcXVlcnkgPSBOVUxMOworCWludAkJCWVuY29kaW5nID0gR2V0RGF0YWJhc2VFbmNv ZGluZygpOworCisJQXNzZXJ0KHF1ZXJ5ICE9IE5VTEwpOwogCi0JLyogU2FmZXR5IGNoZWNrLi4u ICovCi0JaWYgKCFwZ3NzIHx8ICFwZ3NzX2hhc2ggfHwgIXBnc3NfZW5hYmxlZChuZXN0aW5nX2xl dmVsKSkKKwlpZiAocXVlcnlJZCA9PSBJTlQ2NENPTlNUKDApKQogCQlyZXR1cm47CiAKIAkvKgot CSAqIElmIGl0J3MgRVhFQ1VURSwgY2xlYXIgdGhlIHF1ZXJ5SWQgc28gdGhhdCBzdGF0cyB3aWxs IGFjY3VtdWxhdGUgZm9yCi0JICogdGhlIHVuZGVybHlpbmcgUFJFUEFSRS4gIEJ1dCBkb24ndCBk byB0aGlzIGlmIHdlJ3JlIG5vdCB0cmFja2luZwotCSAqIHV0aWxpdHkgc3RhdGVtZW50cywgdG8g YXZvaWQgbWVzc2luZyB1cCBhbm90aGVyIGV4dGVuc2lvbiB0aGF0IG1pZ2h0IGJlCi0JICogdHJh Y2tpbmcgdGhlbS4KKwkgKiBDb25maW5lIG91ciBhdHRlbnRpb24gdG8gdGhlIHJlbGV2YW50IHBh cnQgb2YgdGhlIHN0cmluZywgaWYgdGhlIHF1ZXJ5CisJICogaXMgYSBwb3J0aW9uIG9mIGEgbXVs dGktc3RhdGVtZW50IHNvdXJjZSBzdHJpbmcsIGFuZCB1cGRhdGUgcXVlcnkKKwkgKiBsb2NhdGlv biBhbmQgbGVuZ3RoIGlmIG5lZWRlZC4KIAkgKi8KLQlpZiAocXVlcnktPnV0aWxpdHlTdG10KQor CXF1ZXJ5ID0gQ2xlYW5RdWVyeXRleHQocXVlcnksICZxdWVyeV9sb2NhdGlvbiwgJnF1ZXJ5X2xl bik7CisKKwkvKiBCdWlsZCBrZXkgKi8KKwltZW1zZXQoJmtleSwgMCwgc2l6ZW9mKHBnc3NIYXNo S2V5KSk7CisJa2V5LnVzZXJpZCA9IEdldFVzZXJJZCgpOworCWtleS5kYmlkID0gTXlEYXRhYmFz ZUlkOworCWtleS5xdWVyeWlkID0gcXVlcnlJZDsKKwlrZXkudG9wbGV2ZWwgPSAobmVzdGluZ19s ZXZlbCA9PSAwKTsKKworCS8qIENyZWF0ZSBvciB1cGRhdGUgZHNoYXNoIHJlZ2lzdHJ5IGVudHJ5 ICovCisJcGdzc19hdHRhY2hfc2htZW0oKTsKKworCS8qIEZhc3QgcGF0aDogbG9vayB1cCB3aXRo IHNoYXJlZCBsb2NrIG9ubHkgKi8KKwlkc2hfZW50cnkgPSBkc2hhc2hfZmluZChwZ3NzX2hhc2gs ICZrZXksIGZhbHNlKTsKKwlpZiAoZHNoX2VudHJ5KQogCXsKLQkJaWYgKHBnc3NfdHJhY2tfdXRp bGl0eSAmJiBJc0EocXVlcnktPnV0aWxpdHlTdG10LCBFeGVjdXRlU3RtdCkpCi0JCXsKLQkJCXF1 ZXJ5LT5xdWVyeUlkID0gSU5UNjRDT05TVCgwKTsKKwkJLyogQnVtcCByZWZjb3VudCBhdG9taWNh bGx5IHVuZGVyIHNoYXJlZCBsb2NrICovCisJCXVpbnQzMgkJY3VyID0gcGdfYXRvbWljX3JlYWRf dTMyKCZkc2hfZW50cnktPnJlZmNvdW50KTsKKworCQlpZiAoY3VyIDwgUEdTU19SRUZfQ0FQKQor CQkJcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTMyKCZkc2hfZW50cnktPnJlZmNvdW50LCAm Y3VyLCBjdXIgKyAxKTsKKworCQlkc2hhc2hfcmVsZWFzZV9sb2NrKHBnc3NfaGFzaCwgZHNoX2Vu dHJ5KTsKKworCQkvKiBJZiBqc3RhdGUgaXMgcHJvdmlkZWQgYW5kIGtpbmQgaXMgUEdTU19JTlZB TElELCBub3RoaW5nIG1vcmUgdG8gZG8gKi8KKwkJaWYgKGpzdGF0ZSAmJiBraW5kID09IFBHU1Nf SU5WQUxJRCkKIAkJCXJldHVybjsKLQkJfQogCX0KLQotCS8qCisJZWxzZQorCXsKKwkJU2l6ZQkJ cXVlcnlfb2Zmc2V0OworCQlpbnQJCQlnY19jb3VudDsKKwkJYm9vbAkJc3RvcmVkOworCQlib29s CQlkb19nYzsKKworCQkvKiBTbG93IHBhdGg6IGluc2VydCB3aXRoIGV4Y2x1c2l2ZSBsb2NrICov CisJCWlmIChqc3RhdGUpCisJCXsKKwkJCW5vcm1fcXVlcnkgPSBnZW5lcmF0ZV9ub3JtYWxpemVk X3F1ZXJ5KGpzdGF0ZSwgcXVlcnksCisJCQkJCQkJCQkJCQkgICBxdWVyeV9sb2NhdGlvbiwKKwkJ CQkJCQkJCQkJCSAgICZxdWVyeV9sZW4pOworCQl9CisKKwkJLyogU3RvcmUgcXVlcnkgdGV4dCBp biB0aGUgZmlsZSAqLworCQlzdG9yZWQgPSBxdGV4dF9zdG9yZShub3JtX3F1ZXJ5ID8gbm9ybV9x dWVyeSA6IHF1ZXJ5LCBxdWVyeV9sZW4sCisJCQkJCQkJICZxdWVyeV9vZmZzZXQsICZnY19jb3Vu dCk7CisKKwkJLyoKKwkJICogRGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byBnYXJiYWdlIGNv bGxlY3QgZXh0ZXJuYWwgcXVlcnkgdGV4dHMuCisJCSAqLworCQlkb19nYyA9IG5lZWRfZ2NfcXRl eHRzKCk7CisKKwkJZHNoX2VudHJ5ID0gZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0KHBnc3NfaGFzaCwg JmtleSwgJmZvdW5kKTsKKwkJaWYgKCFmb3VuZCkKKwkJeworCQkJcGdfYXRvbWljX2luaXRfdTMy KCZkc2hfZW50cnktPnJlZmNvdW50LCAxKTsKKwkJCWRzaF9lbnRyeS0+c3RhdHNfc2luY2UgPSBH ZXRDdXJyZW50VGltZXN0YW1wKCk7CisJCQlkc2hfZW50cnktPm1pbm1heF9zdGF0c19zaW5jZSA9 IGRzaF9lbnRyeS0+c3RhdHNfc2luY2U7CisJCQlkc2hfZW50cnktPmVuY29kaW5nID0gZW5jb2Rp bmc7CisKKwkJCWlmIChzdG9yZWQpCisJCQl7CisJCQkJZHNoX2VudHJ5LT5xdWVyeV9vZmZzZXQg PSBxdWVyeV9vZmZzZXQ7CisJCQkJZHNoX2VudHJ5LT5xdWVyeV9sZW4gPSBxdWVyeV9sZW47CisJ CQl9CisJCQllbHNlCisJCQl7CisJCQkJZHNoX2VudHJ5LT5xdWVyeV9vZmZzZXQgPSAwOworCQkJ CWRzaF9lbnRyeS0+cXVlcnlfbGVuID0gLTE7CisJCQl9CisKKwkJCWRzaGFzaF9yZWxlYXNlX2xv Y2socGdzc19oYXNoLCBkc2hfZW50cnkpOworCisJCQlwZ19hdG9taWNfZmV0Y2hfYWRkX3U2NCgm cGdzc19zaGFyZWQtPm5lbnRyaWVzLCAxKTsKKwkJCWVudHJ5X2RlYWxsb2MoKTsKKworCQkJLyog SWYgbmVlZGVkLCBwZXJmb3JtIGdhcmJhZ2UgY29sbGVjdGlvbiAqLworCQkJaWYgKGRvX2djKQor CQkJCWdjX3F0ZXh0cygpOworCisJCQlpZiAoanN0YXRlICYmIGtpbmQgPT0gUEdTU19JTlZBTElE KQorCQkJeworCQkJCWlmIChub3JtX3F1ZXJ5KQorCQkJCQlwZnJlZShub3JtX3F1ZXJ5KTsKKwkJ CQlyZXR1cm47CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBBbm90aGVyIGJhY2tlbmQg aW5zZXJ0ZWQgaXQgY29uY3VycmVudGx5ICovCisJCQl1aW50MzIJCWN1ciA9IHBnX2F0b21pY19y ZWFkX3UzMigmZHNoX2VudHJ5LT5yZWZjb3VudCk7CisKKwkJCWlmIChjdXIgPCBQR1NTX1JFRl9D QVApCisJCQkJcGdfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfdTMyKCZkc2hfZW50cnktPnJlZmNv dW50LCAmY3VyLCBjdXIgKyAxKTsKKwkJCWRzaGFzaF9yZWxlYXNlX2xvY2socGdzc19oYXNoLCBk c2hfZW50cnkpOworCisJCQlpZiAoanN0YXRlICYmIGtpbmQgPT0gUEdTU19JTlZBTElEKQorCQkJ eworCQkJCWlmIChub3JtX3F1ZXJ5KQorCQkJCQlwZnJlZShub3JtX3F1ZXJ5KTsKKwkJCQlyZXR1 cm47CisJCQl9CisJCX0KKwl9CisKKwlpZiAobm9ybV9xdWVyeSkKKwkJcGZyZWUobm9ybV9xdWVy eSk7CisKKwkvKiBBY2N1bXVsYXRlIGNvdW50ZXJzIGluIHBlbmRpbmcgcGdzdGF0IGVudHJ5ICov CisJQXNzZXJ0KGtpbmQgPT0gUEdTU19QTEFOIHx8IGtpbmQgPT0gUEdTU19FWEVDKTsKKworCW9i amlkID0gcGdzc19oYXNoX2tleSgma2V5KTsKKworCWVudHJ5X3JlZiA9IHBnc3RhdF9wcmVwX3Bl bmRpbmdfZW50cnkoUEdTVEFUX0tJTkRfUEdTUywga2V5LmRiaWQsCisJCQkJCQkJCQkJICBvYmpp ZCwgTlVMTCk7CisJcGVuZGluZyA9IChQZ1N0YXRfUGdzc1BlbmRpbmcgKikgZW50cnlfcmVmLT5w ZW5kaW5nOworCXBlbmRpbmctPmtleSA9IGtleTsKKworCXBlbmRpbmctPmNvdW50ZXJzLmNhbGxz W2tpbmRdKys7CisJcGVuZGluZy0+Y291bnRlcnMudG90YWxfdGltZVtraW5kXSArPSB0b3RhbF90 aW1lOworCisJaWYgKHBlbmRpbmctPmNvdW50ZXJzLmNhbGxzW2tpbmRdID09IDEpCisJeworCQlw ZW5kaW5nLT5jb3VudGVycy5taW5fdGltZVtraW5kXSA9IHRvdGFsX3RpbWU7CisJCXBlbmRpbmct PmNvdW50ZXJzLm1heF90aW1lW2tpbmRdID0gdG90YWxfdGltZTsKKwkJcGVuZGluZy0+Y291bnRl cnMubWVhbl90aW1lW2tpbmRdID0gdG90YWxfdGltZTsKKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJ ICogV2VsZm9yZCdzIG9ubGluZSBhbGdvcml0aG0gZm9yIGFjY3VtdWxhdGluZyBtZWFuIGFuZCBz dW0gb2Ygc3F1YXJlZAorCQkgKiBkZXZpYXRpb25zLiBTZWUgPGh0dHA6Ly93d3cuam9obmRjb29r LmNvbS9ibG9nL3N0YW5kYXJkX2RldmlhdGlvbi8+CisJCSAqLworCQlkb3VibGUJCW9sZF9tZWFu ID0gcGVuZGluZy0+Y291bnRlcnMubWVhbl90aW1lW2tpbmRdOworCisJCXBlbmRpbmctPmNvdW50 ZXJzLm1lYW5fdGltZVtraW5kXSArPQorCQkJKHRvdGFsX3RpbWUgLSBvbGRfbWVhbikgLyBwZW5k aW5nLT5jb3VudGVycy5jYWxsc1traW5kXTsKKwkJcGVuZGluZy0+Y291bnRlcnMuc3VtX3Zhcl90 aW1lW2tpbmRdICs9CisJCQkodG90YWxfdGltZSAtIG9sZF9tZWFuKSAqICh0b3RhbF90aW1lIC0g cGVuZGluZy0+Y291bnRlcnMubWVhbl90aW1lW2tpbmRdKTsKKworCQlpZiAocGVuZGluZy0+Y291 bnRlcnMubWluX3RpbWVba2luZF0gPiB0b3RhbF90aW1lKQorCQkJcGVuZGluZy0+Y291bnRlcnMu bWluX3RpbWVba2luZF0gPSB0b3RhbF90aW1lOworCQlpZiAocGVuZGluZy0+Y291bnRlcnMubWF4 X3RpbWVba2luZF0gPCB0b3RhbF90aW1lKQorCQkJcGVuZGluZy0+Y291bnRlcnMubWF4X3RpbWVb a2luZF0gPSB0b3RhbF90aW1lOworCX0KKworCXBlbmRpbmctPmNvdW50ZXJzLnJvd3MgKz0gcm93 czsKKworCWlmIChidWZ1c2FnZSkKKwl7CisJCXBlbmRpbmctPmNvdW50ZXJzLnNoYXJlZF9ibGtz X2hpdCArPSBidWZ1c2FnZS0+c2hhcmVkX2Jsa3NfaGl0OworCQlwZW5kaW5nLT5jb3VudGVycy5z aGFyZWRfYmxrc19yZWFkICs9IGJ1ZnVzYWdlLT5zaGFyZWRfYmxrc19yZWFkOworCQlwZW5kaW5n LT5jb3VudGVycy5zaGFyZWRfYmxrc19kaXJ0aWVkICs9IGJ1ZnVzYWdlLT5zaGFyZWRfYmxrc19k aXJ0aWVkOworCQlwZW5kaW5nLT5jb3VudGVycy5zaGFyZWRfYmxrc193cml0dGVuICs9IGJ1ZnVz YWdlLT5zaGFyZWRfYmxrc193cml0dGVuOworCQlwZW5kaW5nLT5jb3VudGVycy5sb2NhbF9ibGtz X2hpdCArPSBidWZ1c2FnZS0+bG9jYWxfYmxrc19oaXQ7CisJCXBlbmRpbmctPmNvdW50ZXJzLmxv Y2FsX2Jsa3NfcmVhZCArPSBidWZ1c2FnZS0+bG9jYWxfYmxrc19yZWFkOworCQlwZW5kaW5nLT5j b3VudGVycy5sb2NhbF9ibGtzX2RpcnRpZWQgKz0gYnVmdXNhZ2UtPmxvY2FsX2Jsa3NfZGlydGll ZDsKKwkJcGVuZGluZy0+Y291bnRlcnMubG9jYWxfYmxrc193cml0dGVuICs9IGJ1ZnVzYWdlLT5s b2NhbF9ibGtzX3dyaXR0ZW47CisJCXBlbmRpbmctPmNvdW50ZXJzLnRlbXBfYmxrc19yZWFkICs9 IGJ1ZnVzYWdlLT50ZW1wX2Jsa3NfcmVhZDsKKwkJcGVuZGluZy0+Y291bnRlcnMudGVtcF9ibGtz X3dyaXR0ZW4gKz0gYnVmdXNhZ2UtPnRlbXBfYmxrc193cml0dGVuOworCQlwZW5kaW5nLT5jb3Vu dGVycy5zaGFyZWRfYmxrX3JlYWRfdGltZSArPSBJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhidWZ1 c2FnZS0+c2hhcmVkX2Jsa19yZWFkX3RpbWUpOworCQlwZW5kaW5nLT5jb3VudGVycy5zaGFyZWRf YmxrX3dyaXRlX3RpbWUgKz0gSU5TVFJfVElNRV9HRVRfTUlMTElTRUMoYnVmdXNhZ2UtPnNoYXJl ZF9ibGtfd3JpdGVfdGltZSk7CisJCXBlbmRpbmctPmNvdW50ZXJzLmxvY2FsX2Jsa19yZWFkX3Rp bWUgKz0gSU5TVFJfVElNRV9HRVRfTUlMTElTRUMoYnVmdXNhZ2UtPmxvY2FsX2Jsa19yZWFkX3Rp bWUpOworCQlwZW5kaW5nLT5jb3VudGVycy5sb2NhbF9ibGtfd3JpdGVfdGltZSArPSBJTlNUUl9U SU1FX0dFVF9NSUxMSVNFQyhidWZ1c2FnZS0+bG9jYWxfYmxrX3dyaXRlX3RpbWUpOworCQlwZW5k aW5nLT5jb3VudGVycy50ZW1wX2Jsa19yZWFkX3RpbWUgKz0gSU5TVFJfVElNRV9HRVRfTUlMTElT RUMoYnVmdXNhZ2UtPnRlbXBfYmxrX3JlYWRfdGltZSk7CisJCXBlbmRpbmctPmNvdW50ZXJzLnRl bXBfYmxrX3dyaXRlX3RpbWUgKz0gSU5TVFJfVElNRV9HRVRfTUlMTElTRUMoYnVmdXNhZ2UtPnRl bXBfYmxrX3dyaXRlX3RpbWUpOworCX0KKworCWlmICh3YWx1c2FnZSkKKwl7CisJCXBlbmRpbmct PmNvdW50ZXJzLndhbF9yZWNvcmRzICs9IHdhbHVzYWdlLT53YWxfcmVjb3JkczsKKwkJcGVuZGlu Zy0+Y291bnRlcnMud2FsX2ZwaSArPSB3YWx1c2FnZS0+d2FsX2ZwaTsKKwkJcGVuZGluZy0+Y291 bnRlcnMud2FsX2J5dGVzICs9IHdhbHVzYWdlLT53YWxfYnl0ZXM7CisJCXBlbmRpbmctPmNvdW50 ZXJzLndhbF9idWZmZXJzX2Z1bGwgKz0gd2FsdXNhZ2UtPndhbF9idWZmZXJzX2Z1bGw7CisJfQor CisJaWYgKGppdHVzYWdlKQorCXsKKwkJcGVuZGluZy0+Y291bnRlcnMuaml0X2Z1bmN0aW9ucyAr PSBqaXR1c2FnZS0+Y3JlYXRlZF9mdW5jdGlvbnM7CisJCXBlbmRpbmctPmNvdW50ZXJzLmppdF9n ZW5lcmF0aW9uX3RpbWUgKz0gSU5TVFJfVElNRV9HRVRfTUlMTElTRUMoaml0dXNhZ2UtPmdlbmVy YXRpb25fY291bnRlcik7CisKKwkJaWYgKElOU1RSX1RJTUVfR0VUX01JTExJU0VDKGppdHVzYWdl LT5kZWZvcm1fY291bnRlcikpCisJCQlwZW5kaW5nLT5jb3VudGVycy5qaXRfZGVmb3JtX2NvdW50 Kys7CisJCXBlbmRpbmctPmNvdW50ZXJzLmppdF9kZWZvcm1fdGltZSArPSBJTlNUUl9USU1FX0dF VF9NSUxMSVNFQyhqaXR1c2FnZS0+ZGVmb3JtX2NvdW50ZXIpOworCisJCWlmIChJTlNUUl9USU1F X0dFVF9NSUxMSVNFQyhqaXR1c2FnZS0+aW5saW5pbmdfY291bnRlcikpCisJCQlwZW5kaW5nLT5j b3VudGVycy5qaXRfaW5saW5pbmdfY291bnQrKzsKKwkJcGVuZGluZy0+Y291bnRlcnMuaml0X2lu bGluaW5nX3RpbWUgKz0gSU5TVFJfVElNRV9HRVRfTUlMTElTRUMoaml0dXNhZ2UtPmlubGluaW5n X2NvdW50ZXIpOworCisJCWlmIChJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhqaXR1c2FnZS0+b3B0 aW1pemF0aW9uX2NvdW50ZXIpKQorCQkJcGVuZGluZy0+Y291bnRlcnMuaml0X29wdGltaXphdGlv bl9jb3VudCsrOworCQlwZW5kaW5nLT5jb3VudGVycy5qaXRfb3B0aW1pemF0aW9uX3RpbWUgKz0g SU5TVFJfVElNRV9HRVRfTUlMTElTRUMoaml0dXNhZ2UtPm9wdGltaXphdGlvbl9jb3VudGVyKTsK KworCQlpZiAoSU5TVFJfVElNRV9HRVRfTUlMTElTRUMoaml0dXNhZ2UtPmVtaXNzaW9uX2NvdW50 ZXIpKQorCQkJcGVuZGluZy0+Y291bnRlcnMuaml0X2VtaXNzaW9uX2NvdW50Kys7CisJCXBlbmRp bmctPmNvdW50ZXJzLmppdF9lbWlzc2lvbl90aW1lICs9IElOU1RSX1RJTUVfR0VUX01JTExJU0VD KGppdHVzYWdlLT5lbWlzc2lvbl9jb3VudGVyKTsKKwl9CisKKwlwZW5kaW5nLT5jb3VudGVycy5w YXJhbGxlbF93b3JrZXJzX3RvX2xhdW5jaCArPSBwYXJhbGxlbF93b3JrZXJzX3RvX2xhdW5jaDsK KwlwZW5kaW5nLT5jb3VudGVycy5wYXJhbGxlbF93b3JrZXJzX2xhdW5jaGVkICs9IHBhcmFsbGVs X3dvcmtlcnNfbGF1bmNoZWQ7CisKKwlpZiAocGxhbk9yaWdpbiA9PSBQTEFOX1NUTVRfQ0FDSEVf R0VORVJJQykKKwkJcGVuZGluZy0+Y291bnRlcnMuZ2VuZXJpY19wbGFuX2NhbGxzKys7CisJZWxz ZSBpZiAocGxhbk9yaWdpbiA9PSBQTEFOX1NUTVRfQ0FDSEVfQ1VTVE9NKQorCQlwZW5kaW5nLT5j b3VudGVycy5jdXN0b21fcGxhbl9jYWxscysrOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KiBIb29rIGltcGxlbWVudGF0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0YXRp YyB2b2lkCitwZ3NzX3Bvc3RfcGFyc2VfYW5hbHl6ZShQYXJzZVN0YXRlICpwc3RhdGUsIFF1ZXJ5 ICpxdWVyeSwKKwkJCQkJCWNvbnN0IEp1bWJsZVN0YXRlICpqc3RhdGUpCit7CisJaWYgKHByZXZf cG9zdF9wYXJzZV9hbmFseXplX2hvb2spCisJCXByZXZfcG9zdF9wYXJzZV9hbmFseXplX2hvb2so cHN0YXRlLCBxdWVyeSwganN0YXRlKTsKKworCWlmICghcGdzc19lbmFibGVkKG5lc3RpbmdfbGV2 ZWwpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENsZWFyIHF1ZXJ5SWQgZm9yIEVYRUNVVEUgc28g c3RhdHMgYWNjdW11bGF0ZSB1bmRlciB0aGUgUFJFUEFSRSdzCisJICogcXVlcnlJZCBpbnN0ZWFk LgorCSAqLworCWlmIChxdWVyeS0+dXRpbGl0eVN0bXQpCisJeworCQlpZiAocGdzc190cmFja191 dGlsaXR5ICYmIElzQShxdWVyeS0+dXRpbGl0eVN0bXQsIEV4ZWN1dGVTdG10KSkKKwkJeworCQkJ cXVlcnktPnF1ZXJ5SWQgPSBJTlQ2NENPTlNUKDApOworCQkJcmV0dXJuOworCQl9CisJfQorCisJ LyoKIAkgKiBJZiBxdWVyeSBqdW1ibGluZyB3ZXJlIGFibGUgdG8gaWRlbnRpZnkgYW55IGlnbm9y YWJsZSBjb25zdGFudHMsIHdlCiAJICogaW1tZWRpYXRlbHkgY3JlYXRlIGEgaGFzaCB0YWJsZSBl bnRyeSBmb3IgdGhlIHF1ZXJ5LCBzbyB0aGF0IHdlIGNhbgogCSAqIHJlY29yZCB0aGUgbm9ybWFs aXplZCBmb3JtIG9mIHRoZSBxdWVyeSBzdHJpbmcuICBJZiB0aGVyZSB3ZXJlIG5vIHN1Y2gKQEAg LTg3OSwxMCArMTE0OSw2IEBAIHBnc3NfcG9zdF9wYXJzZV9hbmFseXplKFBhcnNlU3RhdGUgKnBz dGF0ZSwgUXVlcnkgKnF1ZXJ5LCBjb25zdCBKdW1ibGVTdGF0ZSAqanN0CiAJCQkJICAgUExBTl9T VE1UX1VOS05PV04pOwogfQogCi0vKgotICogUGxhbm5lciBob29rOiBmb3J3YXJkIHRvIHJlZ3Vs YXIgcGxhbm5lciwgYnV0IG1lYXN1cmUgcGxhbm5pbmcgdGltZQotICogaWYgbmVlZGVkLgotICov CiBzdGF0aWMgUGxhbm5lZFN0bXQgKgogcGdzc19wbGFubmVyKFF1ZXJ5ICpwYXJzZSwKIAkJCSBj b25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCkBAIC05MDgsMTMgKzExNzQsNyBAQCBwZ3NzX3BsYW5u ZXIoUXVlcnkgKnBhcnNlLAogCQlXYWxVc2FnZQl3YWx1c2FnZV9zdGFydCwKIAkJCQkJd2FsdXNh Z2U7CiAKLQkJLyogV2UgbmVlZCB0byB0cmFjayBidWZmZXIgdXNhZ2UgYXMgdGhlIHBsYW5uZXIg Y2FuIGFjY2VzcyB0aGVtLiAqLwogCQlidWZ1c2FnZV9zdGFydCA9IHBnQnVmZmVyVXNhZ2U7Ci0K LQkJLyoKLQkJICogU2ltaWxhcmx5IHRoZSBwbGFubmVyIGNvdWxkIHdyaXRlIHNvbWUgV0FMIHJl Y29yZHMgaW4gc29tZSBjYXNlcwotCQkgKiAoZS5nLiBzZXR0aW5nIGEgaGludCBiaXQgd2l0aCB0 aG9zZSBiZWluZyBXQUwtbG9nZ2VkKQotCQkgKi8KIAkJd2FsdXNhZ2Vfc3RhcnQgPSBwZ1dhbFVz YWdlOwogCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHN0YXJ0KTsKIApAQCAtOTM3LDExICsxMTk3 LDkgQEAgcGdzc19wbGFubmVyKFF1ZXJ5ICpwYXJzZSwKIAkJSU5TVFJfVElNRV9TRVRfQ1VSUkVO VChkdXJhdGlvbik7CiAJCUlOU1RSX1RJTUVfU1VCVFJBQ1QoZHVyYXRpb24sIHN0YXJ0KTsKIAot CQkvKiBjYWxjIGRpZmZlcmVuY2VzIG9mIGJ1ZmZlciBjb3VudGVycy4gKi8KIAkJbWVtc2V0KCZi dWZ1c2FnZSwgMCwgc2l6ZW9mKEJ1ZmZlclVzYWdlKSk7CiAJCUJ1ZmZlclVzYWdlQWNjdW1EaWZm KCZidWZ1c2FnZSwgJnBnQnVmZmVyVXNhZ2UsICZidWZ1c2FnZV9zdGFydCk7CiAKLQkJLyogY2Fs YyBkaWZmZXJlbmNlcyBvZiBXQUwgY291bnRlcnMuICovCiAJCW1lbXNldCgmd2FsdXNhZ2UsIDAs IHNpemVvZihXYWxVc2FnZSkpOwogCQlXYWxVc2FnZUFjY3VtRGlmZigmd2FsdXNhZ2UsICZwZ1dh bFVzYWdlLCAmd2FsdXNhZ2Vfc3RhcnQpOwogCkBAIC05NTYsMTcgKzEyMTQsMTEgQEAgcGdzc19w bGFubmVyKFF1ZXJ5ICpwYXJzZSwKIAkJCQkgICAmd2FsdXNhZ2UsCiAJCQkJICAgTlVMTCwKIAkJ CQkgICBOVUxMLAotCQkJCSAgIDAsCi0JCQkJICAgMCwKKwkJCQkgICAwLCAwLAogCQkJCSAgIHJl c3VsdC0+cGxhbk9yaWdpbik7CiAJfQogCWVsc2UKIAl7Ci0JCS8qCi0JCSAqIEV2ZW4gdGhvdWdo IHdlJ3JlIG5vdCB0cmFja2luZyBwbGFuIHRpbWUgZm9yIHRoaXMgc3RhdGVtZW50LCB3ZQotCQkg KiBtdXN0IHN0aWxsIGluY3JlbWVudCB0aGUgbmVzdGluZyBsZXZlbCwgdG8gZW5zdXJlIHRoYXQg ZnVuY3Rpb25zCi0JCSAqIGV2YWx1YXRlZCBkdXJpbmcgcGxhbm5pbmcgYXJlIG5vdCBzZWVuIGFz IHRvcC1sZXZlbCBjYWxscy4KLQkJICovCiAJCW5lc3RpbmdfbGV2ZWwrKzsKIAkJUEdfVFJZKCk7 CiAJCXsKQEAgLTk4NywyMCArMTIzOSwxMiBAQCBwZ3NzX3BsYW5uZXIoUXVlcnkgKnBhcnNlLAog CXJldHVybiByZXN1bHQ7CiB9CiAKLS8qCi0gKiBFeGVjdXRvclN0YXJ0IGhvb2s6IHN0YXJ0IHVw IHRyYWNraW5nIGlmIG5lZWRlZAotICovCiBzdGF0aWMgdm9pZAogcGdzc19FeGVjdXRvclN0YXJ0 KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogewotCS8qCi0JICogSWYgcXVlcnkg aGFzIHF1ZXJ5SWQgemVybywgZG9uJ3QgdHJhY2sgaXQuICBUaGlzIHByZXZlbnRzIGRvdWJsZQot CSAqIGNvdW50aW5nIG9mIG9wdGltaXphYmxlIHN0YXRlbWVudHMgdGhhdCBhcmUgZGlyZWN0bHkg Y29udGFpbmVkIGluCi0JICogdXRpbGl0eSBzdGF0ZW1lbnRzLgotCSAqLwotCWlmIChwZ3NzX2Vu YWJsZWQobmVzdGluZ19sZXZlbCkgJiYgcXVlcnlEZXNjLT5wbGFubmVkc3RtdC0+cXVlcnlJZCAh PSBJTlQ2NENPTlNUKDApKQorCWlmIChwZ3NzX2VuYWJsZWQobmVzdGluZ19sZXZlbCkgJiYKKwkJ cXVlcnlEZXNjLT5wbGFubmVkc3RtdC0+cXVlcnlJZCAhPSBJTlQ2NENPTlNUKDApKQogCXsKLQkJ LyogUmVxdWVzdCBhbGwgc3VtbWFyeSBpbnN0cnVtZW50YXRpb24sIGkuZS4gdGltaW5nLCBidWZm ZXJzIGFuZCBXQUwgKi8KIAkJcXVlcnlEZXNjLT5xdWVyeV9pbnN0cl9vcHRpb25zIHw9IElOU1RS VU1FTlRfQUxMOwogCX0KIApAQCAtMTAxMCw5ICsxMjU0LDYgQEAgcGdzc19FeGVjdXRvclN0YXJ0 KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdzKQogCQlzdGFuZGFyZF9FeGVjdXRvclN0 YXJ0KHF1ZXJ5RGVzYywgZWZsYWdzKTsKIH0KIAotLyoKLSAqIEV4ZWN1dG9yUnVuIGhvb2s6IGFs bCB3ZSBuZWVkIGRvIGlzIHRyYWNrIG5lc3RpbmcgZGVwdGgKLSAqLwogc3RhdGljIHZvaWQKIHBn c3NfRXhlY3V0b3JSdW4oUXVlcnlEZXNjICpxdWVyeURlc2MsIFNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uLCB1aW50NjQgY291bnQpCiB7CkBAIC0xMDMxLDkgKzEyNzIsNiBAQCBwZ3NzX0V4ZWN1dG9y UnVuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgdWludDY0 IGNvdW50KQogCVBHX0VORF9UUlkoKTsKIH0KIAotLyoKLSAqIEV4ZWN1dG9yRmluaXNoIGhvb2s6 IGFsbCB3ZSBuZWVkIGRvIGlzIHRyYWNrIG5lc3RpbmcgZGVwdGgKLSAqLwogc3RhdGljIHZvaWQK IHBnc3NfRXhlY3V0b3JGaW5pc2goUXVlcnlEZXNjICpxdWVyeURlc2MpCiB7CkBAIC0xMDUyLDkg KzEyOTAsNiBAQCBwZ3NzX0V4ZWN1dG9yRmluaXNoKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKQogCVBH X0VORF9UUlkoKTsKIH0KIAotLyoKLSAqIEV4ZWN1dG9yRW5kIGhvb2s6IHN0b3JlIHJlc3VsdHMg aWYgbmVlZGVkCi0gKi8KIHN0YXRpYyB2b2lkCiBwZ3NzX0V4ZWN1dG9yRW5kKFF1ZXJ5RGVzYyAq cXVlcnlEZXNjKQogewpAQCAtMTA4NSw5ICsxMzIwLDYgQEAgcGdzc19FeGVjdXRvckVuZChRdWVy eURlc2MgKnF1ZXJ5RGVzYykKIAkJc3RhbmRhcmRfRXhlY3V0b3JFbmQocXVlcnlEZXNjKTsKIH0K IAotLyoKLSAqIFByb2Nlc3NVdGlsaXR5IGhvb2sKLSAqLwogc3RhdGljIHZvaWQKIHBnc3NfUHJv Y2Vzc1V0aWxpdHkoUGxhbm5lZFN0bXQgKnBzdG10LCBjb25zdCBjaGFyICpxdWVyeVN0cmluZywK IAkJCQkJYm9vbCByZWFkT25seVRyZWUsCkBAIC0xMTAyLDM2ICsxMzM0LDkgQEAgcGdzc19Qcm9j ZXNzVXRpbGl0eShQbGFubmVkU3RtdCAqcHN0bXQsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAog CVBsYW5uZWRTdG10T3JpZ2luIHNhdmVkX3BsYW5PcmlnaW4gPSBwc3RtdC0+cGxhbk9yaWdpbjsK IAlib29sCQllbmFibGVkID0gcGdzc190cmFja191dGlsaXR5ICYmIHBnc3NfZW5hYmxlZChuZXN0 aW5nX2xldmVsKTsKIAotCS8qCi0JICogRm9yY2UgdXRpbGl0eSBzdGF0ZW1lbnRzIHRvIGdldCBx dWVyeUlkIHplcm8uICBXZSBkbyB0aGlzIGV2ZW4gaW4gY2FzZXMKLQkgKiB3aGVyZSB0aGUgc3Rh dGVtZW50IGNvbnRhaW5zIGFuIG9wdGltaXphYmxlIHN0YXRlbWVudCBmb3Igd2hpY2ggYQotCSAq IHF1ZXJ5SWQgY291bGQgYmUgZGVyaXZlZCAoc3VjaCBhcyBFWFBMQUlOIG9yIERFQ0xBUkUgQ1VS U09SKS4gIEZvciBzdWNoCi0JICogY2FzZXMsIHJ1bnRpbWUgY29udHJvbCB3aWxsIGZpcnN0IGdv IHRocm91Z2ggUHJvY2Vzc1V0aWxpdHkgYW5kIHRoZW4KLQkgKiB0aGUgZXhlY3V0b3IsIGFuZCB3 ZSBkb24ndCB3YW50IHRoZSBleGVjdXRvciBob29rcyB0byBkbyBhbnl0aGluZywKLQkgKiBzaW5j ZSB3ZSBhcmUgYWxyZWFkeSBtZWFzdXJpbmcgdGhlIHN0YXRlbWVudCdzIGNvc3RzIGF0IHRoZSB1 dGlsaXR5Ci0JICogbGV2ZWwuCi0JICoKLQkgKiBOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IGRvbmUg aWYgcGdfc3RhdF9zdGF0ZW1lbnRzIGlzIGVuYWJsZWQgYW5kCi0JICogY29uZmlndXJlZCB0byB0 cmFjayB1dGlsaXR5IHN0YXRlbWVudHMsIGluIHRoZSB1bmxpa2VseSBwb3NzaWJpbGl0eQotCSAq IHRoYXQgdXNlciBjb25maWd1cmVkIGFub3RoZXIgZXh0ZW5zaW9uIHRvIGhhbmRsZSB1dGlsaXR5 IHN0YXRlbWVudHMKLQkgKiBvbmx5LgotCSAqLwogCWlmIChlbmFibGVkKQogCQlwc3RtdC0+cXVl cnlJZCA9IElOVDY0Q09OU1QoMCk7CiAKLQkvKgotCSAqIElmIGl0J3MgYW4gRVhFQ1VURSBzdGF0 ZW1lbnQsIHdlIGRvbid0IHRyYWNrIGl0IGFuZCBkb24ndCBpbmNyZW1lbnQgdGhlCi0JICogbmVz dGluZyBsZXZlbC4gIFRoaXMgYWxsb3dzIHRoZSBjeWNsZXMgdG8gYmUgY2hhcmdlZCB0byB0aGUg dW5kZXJseWluZwotCSAqIFBSRVBBUkUgaW5zdGVhZCAoYnkgdGhlIEV4ZWN1dG9yIGhvb2tzKSwg d2hpY2ggaXMgbXVjaCBtb3JlIHVzZWZ1bC4KLQkgKgotCSAqIFdlIGFsc28gZG9uJ3QgdHJhY2sg ZXhlY3V0aW9uIG9mIFBSRVBBUkUuICBJZiB3ZSBkaWQsIHdlIHdvdWxkIGdldCBvbmUKLQkgKiBo YXNoIHRhYmxlIGVudHJ5IGZvciB0aGUgUFJFUEFSRSAod2l0aCBoYXNoIGNhbGN1bGF0ZWQgZnJv bSB0aGUgcXVlcnkKLQkgKiBzdHJpbmcpLCBhbmQgdGhlbiBhIGRpZmZlcmVudCBvbmUgd2l0aCB0 aGUgc2FtZSBxdWVyeSBzdHJpbmcgKGJ1dCBoYXNoCi0JICogY2FsY3VsYXRlZCBmcm9tIHRoZSBx dWVyeSB0cmVlKSB3b3VsZCBiZSB1c2VkIHRvIGFjY3VtdWxhdGUgY29zdHMgb2YKLQkgKiBlbnN1 aW5nIEVYRUNVVEVzLiAgVGhpcyB3b3VsZCBiZSBjb25mdXNpbmcuICBTaW5jZSBQUkVQQVJFIGRv ZXNuJ3QKLQkgKiBhY3R1YWxseSBydW4gdGhlIHBsYW5uZXIgKG9ubHkgcGFyc2UrcmV3cml0ZSks IGl0cyBjb3N0cyBhcmUgZ2VuZXJhbGx5Ci0JICogcHJldHR5IG5lZ2xpZ2libGUgYW5kIGl0IHNl ZW1zIG9rYXkgdG8ganVzdCBpZ25vcmUgaXQuCi0JICovCiAJaWYgKGVuYWJsZWQgJiYKIAkJIUlz QShwYXJzZXRyZWUsIEV4ZWN1dGVTdG10KSAmJgogCQkhSXNBKHBhcnNldHJlZSwgUHJlcGFyZVN0 bXQpKQpAQCAtMTE2NiwzNiArMTM3MSwyMCBAQCBwZ3NzX1Byb2Nlc3NVdGlsaXR5KFBsYW5uZWRT dG10ICpwc3RtdCwgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCiAJCX0KIAkJUEdfRU5EX1RSWSgp OwogCi0JCS8qCi0JCSAqIENBVVRJT046IGRvIG5vdCBhY2Nlc3MgdGhlICpwc3RtdCBkYXRhIHN0 cnVjdHVyZSBhZ2FpbiBiZWxvdyBoZXJlLgotCQkgKiBJZiBpdCB3YXMgYSBST0xMQkFDSyBvciBz aW1pbGFyLCB0aGF0IGRhdGEgc3RydWN0dXJlIG1heSBoYXZlIGJlZW4KLQkJICogZnJlZWQuICBX ZSBtdXN0IGNvcHkgZXZlcnl0aGluZyB3ZSBzdGlsbCBuZWVkIGludG8gbG9jYWwgdmFyaWFibGVz LAotCQkgKiB3aGljaCB3ZSBkaWQgYWJvdmUuCi0JCSAqCi0JCSAqIEZvciB0aGUgc2FtZSByZWFz b24sIHdlIGNhbid0IHJpc2sgcmVzdG9yaW5nIHBzdG10LT5xdWVyeUlkIHRvIGl0cwotCQkgKiBm b3JtZXIgdmFsdWUsIHdoaWNoJ2Qgb3RoZXJ3aXNlIGJlIGEgZ29vZCBpZGVhLgotCQkgKi8KIAkJ cHN0bXQgPSBOVUxMOwogCiAJCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoZHVyYXRpb24pOwogCQlJ TlNUUl9USU1FX1NVQlRSQUNUKGR1cmF0aW9uLCBzdGFydCk7CiAKLQkJLyoKLQkJICogVHJhY2sg dGhlIHRvdGFsIG51bWJlciBvZiByb3dzIHJldHJpZXZlZCBvciBhZmZlY3RlZCBieSB0aGUgdXRp bGl0eQotCQkgKiBzdGF0ZW1lbnRzIG9mIENPUFksIEZFVENILCBDUkVBVEUgVEFCTEUgQVMsIENS RUFURSBNQVRFUklBTElaRUQKLQkJICogVklFVywgUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVyBh bmQgU0VMRUNUIElOVE8uCi0JCSAqLwogCQlyb3dzID0gKHFjICYmIChxYy0+Y29tbWFuZFRhZyA9 PSBDTURUQUdfQ09QWSB8fAogCQkJCQkgICBxYy0+Y29tbWFuZFRhZyA9PSBDTURUQUdfRkVUQ0gg fHwKIAkJCQkJICAgcWMtPmNvbW1hbmRUYWcgPT0gQ01EVEFHX1NFTEVDVCB8fAogCQkJCQkgICBx Yy0+Y29tbWFuZFRhZyA9PSBDTURUQUdfUkVGUkVTSF9NQVRFUklBTElaRURfVklFVykpID8KIAkJ CXFjLT5ucHJvY2Vzc2VkIDogMDsKIAotCQkvKiBjYWxjIGRpZmZlcmVuY2VzIG9mIGJ1ZmZlciBj b3VudGVycy4gKi8KIAkJbWVtc2V0KCZidWZ1c2FnZSwgMCwgc2l6ZW9mKEJ1ZmZlclVzYWdlKSk7 CiAJCUJ1ZmZlclVzYWdlQWNjdW1EaWZmKCZidWZ1c2FnZSwgJnBnQnVmZmVyVXNhZ2UsICZidWZ1 c2FnZV9zdGFydCk7CiAKLQkJLyogY2FsYyBkaWZmZXJlbmNlcyBvZiBXQUwgY291bnRlcnMuICov CiAJCW1lbXNldCgmd2FsdXNhZ2UsIDAsIHNpemVvZihXYWxVc2FnZSkpOwogCQlXYWxVc2FnZUFj Y3VtRGlmZigmd2FsdXNhZ2UsICZwZ1dhbFVzYWdlLCAmd2FsdXNhZ2Vfc3RhcnQpOwogCkBAIC0x MjEwLDI0ICsxMzk5LDExIEBAIHBnc3NfUHJvY2Vzc1V0aWxpdHkoUGxhbm5lZFN0bXQgKnBzdG10 LCBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKIAkJCQkgICAmd2FsdXNhZ2UsCiAJCQkJICAgTlVM TCwKIAkJCQkgICBOVUxMLAotCQkJCSAgIDAsCi0JCQkJICAgMCwKKwkJCQkgICAwLCAwLAogCQkJ CSAgIHNhdmVkX3BsYW5PcmlnaW4pOwogCX0KIAllbHNlCiAJewotCQkvKgotCQkgKiBFdmVuIHRo b3VnaCB3ZSdyZSBub3QgdHJhY2tpbmcgZXhlY3V0aW9uIHRpbWUgZm9yIHRoaXMgc3RhdGVtZW50 LAotCQkgKiB3ZSBtdXN0IHN0aWxsIGluY3JlbWVudCB0aGUgbmVzdGluZyBsZXZlbCwgdG8gZW5z dXJlIHRoYXQgZnVuY3Rpb25zCi0JCSAqIGV2YWx1YXRlZCB3aXRoaW4gaXQgYXJlIG5vdCBzZWVu IGFzIHRvcC1sZXZlbCBjYWxscy4gIEJ1dCBkb24ndCBkbwotCQkgKiBzbyBmb3IgRVhFQ1VURTsg dGhhdCB3YXksIHdoZW4gY29udHJvbCByZWFjaGVzIHBnc3NfcGxhbm5lciBvcgotCQkgKiBwZ3Nz X0V4ZWN1dG9yU3RhcnQsIHdlIHdpbGwgdHJlYXQgdGhlIGNvc3RzIGFzIHRvcC1sZXZlbCBpZgot CQkgKiBhcHByb3ByaWF0ZS4gIExpa2V3aXNlLCBkb24ndCBidW1wIGZvciBQUkVQQVJFLCBzbyB0 aGF0IHBhcnNlCi0JCSAqIGFuYWx5c2lzIHdpbGwgdHJlYXQgdGhlIHN0YXRlbWVudCBhcyB0b3At bGV2ZWwgaWYgYXBwcm9wcmlhdGUuCi0JCSAqCi0JCSAqIFRvIGJlIGFic29sdXRlbHkgY2VydGFp biB3ZSBkb24ndCBtZXNzIHVwIHRoZSBuZXN0aW5nIGxldmVsLAotCQkgKiBldmFsdWF0ZSB0aGUg YnVtcF9sZXZlbCBjb25kaXRpb24ganVzdCBvbmNlLgotCQkgKi8KIAkJYm9vbAkJYnVtcF9sZXZl bCA9CiAJCQkhSXNBKHBhcnNldHJlZSwgRXhlY3V0ZVN0bXQpICYmCiAJCQkhSXNBKHBhcnNldHJl ZSwgUHJlcGFyZVN0bXQpOwpAQCAtMTI1NCwyNTEgKzE0MzAsMzMgQEAgcGdzc19Qcm9jZXNzVXRp bGl0eShQbGFubmVkU3RtdCAqcHN0bXQsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogCX0KIH0K IAotLyoKLSAqIFN0b3JlIHNvbWUgc3RhdGlzdGljcyBmb3IgYSBzdGF0ZW1lbnQuCi0gKgotICog SWYganN0YXRlIGlzIG5vdCBOVUxMIHRoZW4gd2UncmUgdHJ5aW5nIHRvIGNyZWF0ZSBhbiBlbnRy eSBmb3Igd2hpY2gKLSAqIHdlIGhhdmUgbm8gc3RhdGlzdGljcyBhcyB5ZXQ7IHdlIGp1c3Qgd2Fu dCB0byByZWNvcmQgdGhlIG5vcm1hbGl6ZWQKLSAqIHF1ZXJ5IHN0cmluZy4gIHRvdGFsX3RpbWUs IHJvd3MsIGJ1ZnVzYWdlIGFuZCB3YWx1c2FnZSBhcmUgaWdub3JlZCBpbiB0aGlzCi0gKiBjYXNl LgotICoKLSAqIElmIGtpbmQgaXMgUEdTU19QTEFOIG9yIFBHU1NfRVhFQywgaXRzIHZhbHVlIGlz IHVzZWQgYXMgdGhlIGFycmF5IHBvc2l0aW9uCi0gKiBmb3IgdGhlIGFycmF5cyBpbiB0aGUgQ291 bnRlcnMgZmllbGQuCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTUUwtY2FsbGFibGUgZnVuY3Rp b25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KLXN0YXRpYyB2b2lkCi1wZ3NzX3N0b3JlKGNv bnN0IGNoYXIgKnF1ZXJ5LCBpbnQ2NCBxdWVyeUlkLAotCQkgICBpbnQgcXVlcnlfbG9jYXRpb24s IGludCBxdWVyeV9sZW4sCi0JCSAgIHBnc3NTdG9yZUtpbmQga2luZCwKLQkJICAgZG91YmxlIHRv dGFsX3RpbWUsIHVpbnQ2NCByb3dzLAotCQkgICBjb25zdCBCdWZmZXJVc2FnZSAqYnVmdXNhZ2Us Ci0JCSAgIGNvbnN0IFdhbFVzYWdlICp3YWx1c2FnZSwKLQkJICAgY29uc3Qgc3RydWN0IEppdElu c3RydW1lbnRhdGlvbiAqaml0dXNhZ2UsCi0JCSAgIGNvbnN0IEp1bWJsZVN0YXRlICpqc3RhdGUs Ci0JCSAgIGludCBwYXJhbGxlbF93b3JrZXJzX3RvX2xhdW5jaCwKLQkJICAgaW50IHBhcmFsbGVs X3dvcmtlcnNfbGF1bmNoZWQsCi0JCSAgIFBsYW5uZWRTdG10T3JpZ2luIHBsYW5PcmlnaW4pCi17 Ci0JcGdzc0hhc2hLZXkga2V5OwotCXBnc3NFbnRyeSAgKmVudHJ5OwotCWNoYXIJICAgKm5vcm1f cXVlcnkgPSBOVUxMOwotCWludAkJCWVuY29kaW5nID0gR2V0RGF0YWJhc2VFbmNvZGluZygpOwot Ci0JQXNzZXJ0KHF1ZXJ5ICE9IE5VTEwpOwotCi0JLyogU2FmZXR5IGNoZWNrLi4uICovCi0JaWYg KCFwZ3NzIHx8ICFwZ3NzX2hhc2gpCi0JCXJldHVybjsKLQotCS8qCi0JICogTm90aGluZyB0byBk byBpZiBjb21wdXRlX3F1ZXJ5X2lkIGlzbid0IGVuYWJsZWQgYW5kIG5vIG90aGVyIG1vZHVsZQot CSAqIGNvbXB1dGVkIGEgcXVlcnkgaWRlbnRpZmllci4KLQkgKi8KLQlpZiAocXVlcnlJZCA9PSBJ TlQ2NENPTlNUKDApKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIENvbmZpbmUgb3VyIGF0dGVudGlv biB0byB0aGUgcmVsZXZhbnQgcGFydCBvZiB0aGUgc3RyaW5nLCBpZiB0aGUgcXVlcnkKLQkgKiBp cyBhIHBvcnRpb24gb2YgYSBtdWx0aS1zdGF0ZW1lbnQgc291cmNlIHN0cmluZywgYW5kIHVwZGF0 ZSBxdWVyeQotCSAqIGxvY2F0aW9uIGFuZCBsZW5ndGggaWYgbmVlZGVkLgotCSAqLwotCXF1ZXJ5 ID0gQ2xlYW5RdWVyeXRleHQocXVlcnksICZxdWVyeV9sb2NhdGlvbiwgJnF1ZXJ5X2xlbik7Ci0K LQkvKiBTZXQgdXAga2V5IGZvciBoYXNodGFibGUgc2VhcmNoICovCi0KLQkvKiBjbGVhciBwYWRk aW5nICovCi0JbWVtc2V0KCZrZXksIDAsIHNpemVvZihwZ3NzSGFzaEtleSkpOwotCi0Ja2V5LnVz ZXJpZCA9IEdldFVzZXJJZCgpOwotCWtleS5kYmlkID0gTXlEYXRhYmFzZUlkOwotCWtleS5xdWVy eWlkID0gcXVlcnlJZDsKLQlrZXkudG9wbGV2ZWwgPSAobmVzdGluZ19sZXZlbCA9PSAwKTsKLQot CS8qIExvb2t1cCB0aGUgaGFzaCB0YWJsZSBlbnRyeSB3aXRoIHNoYXJlZCBsb2NrLiAqLwotCUxX TG9ja0FjcXVpcmUoJnBnc3MtPmxvY2subG9jaywgTFdfU0hBUkVEKTsKLQotCWVudHJ5ID0gKHBn c3NFbnRyeSAqKSBoYXNoX3NlYXJjaChwZ3NzX2hhc2gsICZrZXksIEhBU0hfRklORCwgTlVMTCk7 Ci0KLQkvKiBDcmVhdGUgbmV3IGVudHJ5LCBpZiBub3QgcHJlc2VudCAqLwotCWlmICghZW50cnkp Ci0JewotCQlTaXplCQlxdWVyeV9vZmZzZXQ7Ci0JCWludAkJCWdjX2NvdW50OwotCQlib29sCQlz dG9yZWQ7Ci0JCWJvb2wJCWRvX2djOwotCi0JCS8qCi0JCSAqIENyZWF0ZSBhIG5ldywgbm9ybWFs aXplZCBxdWVyeSBzdHJpbmcgaWYgY2FsbGVyIGFza2VkLiAgV2UgZG9uJ3QKLQkJICogbmVlZCB0 byBob2xkIHRoZSBsb2NrIHdoaWxlIGRvaW5nIHRoaXMgd29yay4gIChOb3RlOiBpbiBhbnkgY2Fz ZSwKLQkJICogaXQncyBwb3NzaWJsZSB0aGF0IHNvbWVvbmUgZWxzZSBjcmVhdGVzIGEgZHVwbGlj YXRlIGhhc2h0YWJsZSBlbnRyeQotCQkgKiBpbiB0aGUgaW50ZXJ2YWwgd2hlcmUgd2UgZG9uJ3Qg aG9sZCB0aGUgbG9jayBiZWxvdy4gIFRoYXQgY2FzZSBpcwotCQkgKiBoYW5kbGVkIGJ5IGVudHJ5 X2FsbG9jLikKLQkJICovCi0JCWlmIChqc3RhdGUpCi0JCXsKLQkJCUxXTG9ja1JlbGVhc2UoJnBn c3MtPmxvY2subG9jayk7Ci0JCQlub3JtX3F1ZXJ5ID0gZ2VuZXJhdGVfbm9ybWFsaXplZF9xdWVy eShqc3RhdGUsIHF1ZXJ5LAotCQkJCQkJCQkJCQkJICAgcXVlcnlfbG9jYXRpb24sCi0JCQkJCQkJ CQkJCQkgICAmcXVlcnlfbGVuKTsKLQkJCUxXTG9ja0FjcXVpcmUoJnBnc3MtPmxvY2subG9jaywg TFdfU0hBUkVEKTsKLQkJfQogCi0JCS8qIEFwcGVuZCBuZXcgcXVlcnkgdGV4dCB0byBmaWxlIHdp dGggb25seSBzaGFyZWQgbG9jayBoZWxkICovCi0JCXN0b3JlZCA9IHF0ZXh0X3N0b3JlKG5vcm1f cXVlcnkgPyBub3JtX3F1ZXJ5IDogcXVlcnksIHF1ZXJ5X2xlbiwKLQkJCQkJCQkgJnF1ZXJ5X29m ZnNldCwgJmdjX2NvdW50KTsKLQotCQkvKgotCQkgKiBEZXRlcm1pbmUgd2hldGhlciB3ZSBuZWVk IHRvIGdhcmJhZ2UgY29sbGVjdCBleHRlcm5hbCBxdWVyeSB0ZXh0cwotCQkgKiB3aGlsZSB0aGUg c2hhcmVkIGxvY2sgaXMgc3RpbGwgaGVsZC4gIFRoaXMgbWljcm8tb3B0aW1pemF0aW9uCi0JCSAq IGF2b2lkcyB0YWtpbmcgdGhlIHRpbWUgdG8gZGVjaWRlIHRoaXMgd2hpbGUgaG9sZGluZyBleGNs dXNpdmUgbG9jay4KLQkJICovCi0JCWRvX2djID0gbmVlZF9nY19xdGV4dHMoKTsKLQotCQkvKiBO ZWVkIGV4Y2x1c2l2ZSBsb2NrIHRvIG1ha2UgYSBuZXcgaGFzaHRhYmxlIGVudHJ5IC0gcHJvbW90 ZSAqLwotCQlMV0xvY2tSZWxlYXNlKCZwZ3NzLT5sb2NrLmxvY2spOwotCQlMV0xvY2tBY3F1aXJl KCZwZ3NzLT5sb2NrLmxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkJLyoKLQkJICogQSBnYXJiYWdl IGNvbGxlY3Rpb24gbWF5IGhhdmUgb2NjdXJyZWQgd2hpbGUgd2Ugd2VyZW4ndCBob2xkaW5nIHRo ZQotCQkgKiBsb2NrLiAgSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgdGhpcyBoYXBwZW5zLCB0 aGUgcXVlcnkgdGV4dCB3ZQotCQkgKiBzdG9yZWQgYWJvdmUgd2lsbCBoYXZlIGJlZW4gZ2FyYmFn ZSBjb2xsZWN0ZWQsIHNvIHdyaXRlIGl0IGFnYWluLgotCQkgKiBUaGlzIHNob3VsZCBiZSBpbmZy ZXF1ZW50IGVub3VnaCB0aGF0IGRvaW5nIGl0IHdoaWxlIGhvbGRpbmcKLQkJICogZXhjbHVzaXZl IGxvY2sgaXNuJ3QgYSBwZXJmb3JtYW5jZSBwcm9ibGVtLgotCQkgKi8KLQkJaWYgKCFzdG9yZWQg fHwgcGdzcy0+Z2NfY291bnQgIT0gZ2NfY291bnQpCi0JCQlzdG9yZWQgPSBxdGV4dF9zdG9yZShu b3JtX3F1ZXJ5ID8gbm9ybV9xdWVyeSA6IHF1ZXJ5LCBxdWVyeV9sZW4sCi0JCQkJCQkJCSAmcXVl cnlfb2Zmc2V0LCBOVUxMKTsKLQotCQkvKiBJZiB3ZSBmYWlsZWQgdG8gd3JpdGUgdG8gdGhlIHRl eHQgZmlsZSwgZ2l2ZSB1cCAqLwotCQlpZiAoIXN0b3JlZCkKLQkJCWdvdG8gZG9uZTsKLQotCQkv KiBPSyB0byBjcmVhdGUgYSBuZXcgaGFzaHRhYmxlIGVudHJ5ICovCi0JCWVudHJ5ID0gZW50cnlf YWxsb2MoJmtleSwgcXVlcnlfb2Zmc2V0LCBxdWVyeV9sZW4sIGVuY29kaW5nLAotCQkJCQkJCWpz dGF0ZSAhPSBOVUxMKTsKLQotCQkvKiBJZiBuZWVkZWQsIHBlcmZvcm0gZ2FyYmFnZSBjb2xsZWN0 aW9uIHdoaWxlIGV4Y2x1c2l2ZSBsb2NrIGhlbGQgKi8KLQkJaWYgKGRvX2djKQotCQkJZ2NfcXRl eHRzKCk7Ci0JfQotCi0JLyogSW5jcmVtZW50IHRoZSBjb3VudHMsIGV4Y2VwdCB3aGVuIGpzdGF0 ZSBpcyBub3QgTlVMTCAqLwotCWlmICghanN0YXRlKQotCXsKLQkJQXNzZXJ0KGtpbmQgPT0gUEdT U19QTEFOIHx8IGtpbmQgPT0gUEdTU19FWEVDKTsKLQotCQkvKgotCQkgKiBHcmFiIHRoZSBzcGlu bG9jayB3aGlsZSB1cGRhdGluZyB0aGUgY291bnRlcnMgKHNlZSBjb21tZW50IGFib3V0Ci0JCSAq IGxvY2tpbmcgcnVsZXMgYXQgdGhlIGhlYWQgb2YgdGhlIGZpbGUpCi0JCSAqLwotCQlTcGluTG9j a0FjcXVpcmUoJmVudHJ5LT5tdXRleCk7Ci0KLQkJLyogIlVuc3RpY2siIGVudHJ5IGlmIGl0IHdh cyBwcmV2aW91c2x5IHN0aWNreSAqLwotCQlpZiAoSVNfU1RJQ0tZKGVudHJ5LT5jb3VudGVycykp Ci0JCQllbnRyeS0+Y291bnRlcnMudXNhZ2UgPSBVU0FHRV9JTklUOwotCi0JCWVudHJ5LT5jb3Vu dGVycy5jYWxsc1traW5kXSArPSAxOwotCQllbnRyeS0+Y291bnRlcnMudG90YWxfdGltZVtraW5k XSArPSB0b3RhbF90aW1lOwotCi0JCWlmIChlbnRyeS0+Y291bnRlcnMuY2FsbHNba2luZF0gPT0g MSkKLQkJewotCQkJZW50cnktPmNvdW50ZXJzLm1pbl90aW1lW2tpbmRdID0gdG90YWxfdGltZTsK LQkJCWVudHJ5LT5jb3VudGVycy5tYXhfdGltZVtraW5kXSA9IHRvdGFsX3RpbWU7Ci0JCQllbnRy eS0+Y291bnRlcnMubWVhbl90aW1lW2tpbmRdID0gdG90YWxfdGltZTsKLQkJfQotCQllbHNlCi0J CXsKLQkJCS8qCi0JCQkgKiBXZWxmb3JkJ3MgbWV0aG9kIGZvciBhY2N1cmF0ZWx5IGNvbXB1dGlu ZyB2YXJpYW5jZS4gU2VlCi0JCQkgKiA8aHR0cDovL3d3dy5qb2huZGNvb2suY29tL2Jsb2cvc3Rh bmRhcmRfZGV2aWF0aW9uLz4KLQkJCSAqLwotCQkJZG91YmxlCQlvbGRfbWVhbiA9IGVudHJ5LT5j b3VudGVycy5tZWFuX3RpbWVba2luZF07Ci0KLQkJCWVudHJ5LT5jb3VudGVycy5tZWFuX3RpbWVb a2luZF0gKz0KLQkJCQkodG90YWxfdGltZSAtIG9sZF9tZWFuKSAvIGVudHJ5LT5jb3VudGVycy5j YWxsc1traW5kXTsKLQkJCWVudHJ5LT5jb3VudGVycy5zdW1fdmFyX3RpbWVba2luZF0gKz0KLQkJ CQkodG90YWxfdGltZSAtIG9sZF9tZWFuKSAqICh0b3RhbF90aW1lIC0gZW50cnktPmNvdW50ZXJz Lm1lYW5fdGltZVtraW5kXSk7Ci0KLQkJCS8qCi0JCQkgKiBDYWxjdWxhdGUgbWluIGFuZCBtYXgg dGltZS4gbWluID0gMCBhbmQgbWF4ID0gMCBtZWFucyB0aGF0IHRoZQotCQkJICogbWluL21heCBz dGF0aXN0aWNzIHdlcmUgcmVzZXQKLQkJCSAqLwotCQkJaWYgKGVudHJ5LT5jb3VudGVycy5taW5f dGltZVtraW5kXSA9PSAwCi0JCQkJJiYgZW50cnktPmNvdW50ZXJzLm1heF90aW1lW2tpbmRdID09 IDApCi0JCQl7Ci0JCQkJZW50cnktPmNvdW50ZXJzLm1pbl90aW1lW2tpbmRdID0gdG90YWxfdGlt ZTsKLQkJCQllbnRyeS0+Y291bnRlcnMubWF4X3RpbWVba2luZF0gPSB0b3RhbF90aW1lOwotCQkJ fQotCQkJZWxzZQotCQkJewotCQkJCWlmIChlbnRyeS0+Y291bnRlcnMubWluX3RpbWVba2luZF0g PiB0b3RhbF90aW1lKQotCQkJCQllbnRyeS0+Y291bnRlcnMubWluX3RpbWVba2luZF0gPSB0b3Rh bF90aW1lOwotCQkJCWlmIChlbnRyeS0+Y291bnRlcnMubWF4X3RpbWVba2luZF0gPCB0b3RhbF90 aW1lKQotCQkJCQllbnRyeS0+Y291bnRlcnMubWF4X3RpbWVba2luZF0gPSB0b3RhbF90aW1lOwot CQkJfQotCQl9Ci0JCWVudHJ5LT5jb3VudGVycy5yb3dzICs9IHJvd3M7Ci0JCWVudHJ5LT5jb3Vu dGVycy5zaGFyZWRfYmxrc19oaXQgKz0gYnVmdXNhZ2UtPnNoYXJlZF9ibGtzX2hpdDsKLQkJZW50 cnktPmNvdW50ZXJzLnNoYXJlZF9ibGtzX3JlYWQgKz0gYnVmdXNhZ2UtPnNoYXJlZF9ibGtzX3Jl YWQ7Ci0JCWVudHJ5LT5jb3VudGVycy5zaGFyZWRfYmxrc19kaXJ0aWVkICs9IGJ1ZnVzYWdlLT5z aGFyZWRfYmxrc19kaXJ0aWVkOwotCQllbnRyeS0+Y291bnRlcnMuc2hhcmVkX2Jsa3Nfd3JpdHRl biArPSBidWZ1c2FnZS0+c2hhcmVkX2Jsa3Nfd3JpdHRlbjsKLQkJZW50cnktPmNvdW50ZXJzLmxv Y2FsX2Jsa3NfaGl0ICs9IGJ1ZnVzYWdlLT5sb2NhbF9ibGtzX2hpdDsKLQkJZW50cnktPmNvdW50 ZXJzLmxvY2FsX2Jsa3NfcmVhZCArPSBidWZ1c2FnZS0+bG9jYWxfYmxrc19yZWFkOwotCQllbnRy eS0+Y291bnRlcnMubG9jYWxfYmxrc19kaXJ0aWVkICs9IGJ1ZnVzYWdlLT5sb2NhbF9ibGtzX2Rp cnRpZWQ7Ci0JCWVudHJ5LT5jb3VudGVycy5sb2NhbF9ibGtzX3dyaXR0ZW4gKz0gYnVmdXNhZ2Ut PmxvY2FsX2Jsa3Nfd3JpdHRlbjsKLQkJZW50cnktPmNvdW50ZXJzLnRlbXBfYmxrc19yZWFkICs9 IGJ1ZnVzYWdlLT50ZW1wX2Jsa3NfcmVhZDsKLQkJZW50cnktPmNvdW50ZXJzLnRlbXBfYmxrc193 cml0dGVuICs9IGJ1ZnVzYWdlLT50ZW1wX2Jsa3Nfd3JpdHRlbjsKLQkJZW50cnktPmNvdW50ZXJz LnNoYXJlZF9ibGtfcmVhZF90aW1lICs9IElOU1RSX1RJTUVfR0VUX01JTExJU0VDKGJ1ZnVzYWdl LT5zaGFyZWRfYmxrX3JlYWRfdGltZSk7Ci0JCWVudHJ5LT5jb3VudGVycy5zaGFyZWRfYmxrX3dy aXRlX3RpbWUgKz0gSU5TVFJfVElNRV9HRVRfTUlMTElTRUMoYnVmdXNhZ2UtPnNoYXJlZF9ibGtf d3JpdGVfdGltZSk7Ci0JCWVudHJ5LT5jb3VudGVycy5sb2NhbF9ibGtfcmVhZF90aW1lICs9IElO U1RSX1RJTUVfR0VUX01JTExJU0VDKGJ1ZnVzYWdlLT5sb2NhbF9ibGtfcmVhZF90aW1lKTsKLQkJ ZW50cnktPmNvdW50ZXJzLmxvY2FsX2Jsa193cml0ZV90aW1lICs9IElOU1RSX1RJTUVfR0VUX01J TExJU0VDKGJ1ZnVzYWdlLT5sb2NhbF9ibGtfd3JpdGVfdGltZSk7Ci0JCWVudHJ5LT5jb3VudGVy cy50ZW1wX2Jsa19yZWFkX3RpbWUgKz0gSU5TVFJfVElNRV9HRVRfTUlMTElTRUMoYnVmdXNhZ2Ut PnRlbXBfYmxrX3JlYWRfdGltZSk7Ci0JCWVudHJ5LT5jb3VudGVycy50ZW1wX2Jsa193cml0ZV90 aW1lICs9IElOU1RSX1RJTUVfR0VUX01JTExJU0VDKGJ1ZnVzYWdlLT50ZW1wX2Jsa193cml0ZV90 aW1lKTsKLQkJZW50cnktPmNvdW50ZXJzLnVzYWdlICs9IFVTQUdFX0VYRUModG90YWxfdGltZSk7 Ci0JCWVudHJ5LT5jb3VudGVycy53YWxfcmVjb3JkcyArPSB3YWx1c2FnZS0+d2FsX3JlY29yZHM7 Ci0JCWVudHJ5LT5jb3VudGVycy53YWxfZnBpICs9IHdhbHVzYWdlLT53YWxfZnBpOwotCQllbnRy eS0+Y291bnRlcnMud2FsX2J5dGVzICs9IHdhbHVzYWdlLT53YWxfYnl0ZXM7Ci0JCWVudHJ5LT5j b3VudGVycy53YWxfYnVmZmVyc19mdWxsICs9IHdhbHVzYWdlLT53YWxfYnVmZmVyc19mdWxsOwot CQlpZiAoaml0dXNhZ2UpCi0JCXsKLQkJCWVudHJ5LT5jb3VudGVycy5qaXRfZnVuY3Rpb25zICs9 IGppdHVzYWdlLT5jcmVhdGVkX2Z1bmN0aW9uczsKLQkJCWVudHJ5LT5jb3VudGVycy5qaXRfZ2Vu ZXJhdGlvbl90aW1lICs9IElOU1RSX1RJTUVfR0VUX01JTExJU0VDKGppdHVzYWdlLT5nZW5lcmF0 aW9uX2NvdW50ZXIpOwotCi0JCQlpZiAoSU5TVFJfVElNRV9HRVRfTUlMTElTRUMoaml0dXNhZ2Ut PmRlZm9ybV9jb3VudGVyKSkKLQkJCQllbnRyeS0+Y291bnRlcnMuaml0X2RlZm9ybV9jb3VudCsr OwotCQkJZW50cnktPmNvdW50ZXJzLmppdF9kZWZvcm1fdGltZSArPSBJTlNUUl9USU1FX0dFVF9N SUxMSVNFQyhqaXR1c2FnZS0+ZGVmb3JtX2NvdW50ZXIpOwotCi0JCQlpZiAoSU5TVFJfVElNRV9H RVRfTUlMTElTRUMoaml0dXNhZ2UtPmlubGluaW5nX2NvdW50ZXIpKQotCQkJCWVudHJ5LT5jb3Vu dGVycy5qaXRfaW5saW5pbmdfY291bnQrKzsKLQkJCWVudHJ5LT5jb3VudGVycy5qaXRfaW5saW5p bmdfdGltZSArPSBJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhqaXR1c2FnZS0+aW5saW5pbmdfY291 bnRlcik7Ci0KLQkJCWlmIChJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhqaXR1c2FnZS0+b3B0aW1p emF0aW9uX2NvdW50ZXIpKQotCQkJCWVudHJ5LT5jb3VudGVycy5qaXRfb3B0aW1pemF0aW9uX2Nv dW50Kys7Ci0JCQllbnRyeS0+Y291bnRlcnMuaml0X29wdGltaXphdGlvbl90aW1lICs9IElOU1RS X1RJTUVfR0VUX01JTExJU0VDKGppdHVzYWdlLT5vcHRpbWl6YXRpb25fY291bnRlcik7Ci0KLQkJ CWlmIChJTlNUUl9USU1FX0dFVF9NSUxMSVNFQyhqaXR1c2FnZS0+ZW1pc3Npb25fY291bnRlcikp Ci0JCQkJZW50cnktPmNvdW50ZXJzLmppdF9lbWlzc2lvbl9jb3VudCsrOwotCQkJZW50cnktPmNv dW50ZXJzLmppdF9lbWlzc2lvbl90aW1lICs9IElOU1RSX1RJTUVfR0VUX01JTExJU0VDKGppdHVz YWdlLT5lbWlzc2lvbl9jb3VudGVyKTsKLQkJfQotCi0JCS8qIHBhcmFsbGVsIHdvcmtlciBjb3Vu dGVycyAqLwotCQllbnRyeS0+Y291bnRlcnMucGFyYWxsZWxfd29ya2Vyc190b19sYXVuY2ggKz0g cGFyYWxsZWxfd29ya2Vyc190b19sYXVuY2g7Ci0JCWVudHJ5LT5jb3VudGVycy5wYXJhbGxlbF93 b3JrZXJzX2xhdW5jaGVkICs9IHBhcmFsbGVsX3dvcmtlcnNfbGF1bmNoZWQ7Ci0KLQkJLyogcGxh biBjYWNoZSBjb3VudGVycyAqLwotCQlpZiAocGxhbk9yaWdpbiA9PSBQTEFOX1NUTVRfQ0FDSEVf R0VORVJJQykKLQkJCWVudHJ5LT5jb3VudGVycy5nZW5lcmljX3BsYW5fY2FsbHMrKzsKLQkJZWxz ZSBpZiAocGxhbk9yaWdpbiA9PSBQTEFOX1NUTVRfQ0FDSEVfQ1VTVE9NKQotCQkJZW50cnktPmNv dW50ZXJzLmN1c3RvbV9wbGFuX2NhbGxzKys7Ci0KLQkJU3BpbkxvY2tSZWxlYXNlKCZlbnRyeS0+ bXV0ZXgpOwotCX0KKy8qIE51bWJlciBvZiBvdXRwdXQgYXJndW1lbnRzIChjb2x1bW5zKSBmb3Ig dmFyaW91cyBBUEkgdmVyc2lvbnMgKi8KKyNkZWZpbmUgUEdfU1RBVF9TVEFURU1FTlRTX0NPTFNf VjFfMAkxNAorI2RlZmluZSBQR19TVEFUX1NUQVRFTUVOVFNfQ09MU19WMV8xCTE4CisjZGVmaW5l IFBHX1NUQVRfU1RBVEVNRU5UU19DT0xTX1YxXzIJMTkKKyNkZWZpbmUgUEdfU1RBVF9TVEFURU1F TlRTX0NPTFNfVjFfMwkyMworI2RlZmluZSBQR19TVEFUX1NUQVRFTUVOVFNfQ09MU19WMV84CTMy CisjZGVmaW5lIFBHX1NUQVRfU1RBVEVNRU5UU19DT0xTX1YxXzkJMzMKKyNkZWZpbmUgUEdfU1RB VF9TVEFURU1FTlRTX0NPTFNfVjFfMTAJNDMKKyNkZWZpbmUgUEdfU1RBVF9TVEFURU1FTlRTX0NP TFNfVjFfMTEJNDkKKyNkZWZpbmUgUEdfU1RBVF9TVEFURU1FTlRTX0NPTFNfVjFfMTIJNTIKKyNk ZWZpbmUgUEdfU1RBVF9TVEFURU1FTlRTX0NPTFNfVjFfMTMJNTQKKyNkZWZpbmUgUEdfU1RBVF9T VEFURU1FTlRTX0NPTFMJCQk1NAkvKiBtYXhpbXVtIG9mIGFib3ZlICovCiAKLWRvbmU6Ci0JTFdM b2NrUmVsZWFzZSgmcGdzcy0+bG9jay5sb2NrKTsKKy8qCisgKiBSZXNldCBzdGF0ZW1lbnQgc3Rh dGlzdGljcy4KKyAqLworRGF0dW0KK3BnX3N0YXRfc3RhdGVtZW50c19yZXNldChQR19GVU5DVElP Tl9BUkdTKQoreworCWVudHJ5X3Jlc2V0KDAsIDAsIDAsIGZhbHNlKTsKIAotCS8qIFdlIHBvc3Rw b25lIHRoaXMgY2xlYW4tdXAgdW50aWwgd2UncmUgb3V0IG9mIHRoZSBsb2NrICovCi0JaWYgKG5v cm1fcXVlcnkpCi0JCXBmcmVlKG5vcm1fcXVlcnkpOworCVBHX1JFVFVSTl9WT0lEKCk7CiB9CiAK IC8qCkBAIC0xNTM2LDEyMyArMTQ5NCw4MCBAQCBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXRfMV8x MShQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9USU1FU1RBTVBUWihlbnRyeV9yZXNldCh1 c2VyaWQsIGRiaWQsIHF1ZXJ5aWQsIG1pbm1heF9vbmx5KSk7CiB9CiAKLS8qCi0gKiBSZXNldCBz dGF0ZW1lbnQgc3RhdGlzdGljcy4KLSAqLwotRGF0dW0KLXBnX3N0YXRfc3RhdGVtZW50c19yZXNl dChQR19GVU5DVElPTl9BUkdTKQotewotCWVudHJ5X3Jlc2V0KDAsIDAsIDAsIGZhbHNlKTsKLQot CVBHX1JFVFVSTl9WT0lEKCk7Ci19Ci0KLS8qIE51bWJlciBvZiBvdXRwdXQgYXJndW1lbnRzIChj b2x1bW5zKSBmb3IgdmFyaW91cyBBUEkgdmVyc2lvbnMgKi8KLSNkZWZpbmUgUEdfU1RBVF9TVEFU RU1FTlRTX0NPTFNfVjFfMAkxNAotI2RlZmluZSBQR19TVEFUX1NUQVRFTUVOVFNfQ09MU19WMV8x CTE4Ci0jZGVmaW5lIFBHX1NUQVRfU1RBVEVNRU5UU19DT0xTX1YxXzIJMTkKLSNkZWZpbmUgUEdf U1RBVF9TVEFURU1FTlRTX0NPTFNfVjFfMwkyMwotI2RlZmluZSBQR19TVEFUX1NUQVRFTUVOVFNf Q09MU19WMV84CTMyCi0jZGVmaW5lIFBHX1NUQVRfU1RBVEVNRU5UU19DT0xTX1YxXzkJMzMKLSNk ZWZpbmUgUEdfU1RBVF9TVEFURU1FTlRTX0NPTFNfVjFfMTAJNDMKLSNkZWZpbmUgUEdfU1RBVF9T VEFURU1FTlRTX0NPTFNfVjFfMTEJNDkKLSNkZWZpbmUgUEdfU1RBVF9TVEFURU1FTlRTX0NPTFNf VjFfMTIJNTIKLSNkZWZpbmUgUEdfU1RBVF9TVEFURU1FTlRTX0NPTFNfVjFfMTMJNTQKLSNkZWZp bmUgUEdfU1RBVF9TVEFURU1FTlRTX0NPTFMJCQk1NAkvKiBtYXhpbXVtIG9mIGFib3ZlICovCi0K LS8qCi0gKiBSZXRyaWV2ZSBzdGF0ZW1lbnQgc3RhdGlzdGljcy4KLSAqCi0gKiBUaGUgU1FMIEFQ SSBvZiB0aGlzIGZ1bmN0aW9uIGhhcyBjaGFuZ2VkIG11bHRpcGxlIHRpbWVzLCBhbmQgd2lsbCBs aWtlbHkKLSAqIGRvIHNvIGFnYWluIGluIGZ1dHVyZS4gIFRvIHN1cHBvcnQgdGhlIGNhc2Ugd2hl cmUgYSBuZXdlciB2ZXJzaW9uIG9mIHRoaXMKLSAqIGxvYWRhYmxlIG1vZHVsZSBpcyBiZWluZyB1 c2VkIHdpdGggYW4gb2xkIFNRTCBkZWNsYXJhdGlvbiBvZiB0aGUgZnVuY3Rpb24sCi0gKiB3ZSBj b250aW51ZSB0byBzdXBwb3J0IHRoZSBvbGRlciBBUEkgdmVyc2lvbnMuICBGb3IgMS4yIGFuZCBs YXRlciwgdGhlCi0gKiBleHBlY3RlZCBBUEkgdmVyc2lvbiBpcyBpZGVudGlmaWVkIGJ5IGVtYmVk ZGluZyBpdCBpbiB0aGUgQyBuYW1lIG9mIHRoZQotICogZnVuY3Rpb24uICBVbmZvcnR1bmF0ZWx5 IHdlIHdlcmVuJ3QgYnJpZ2h0IGVub3VnaCB0byBkbyB0aGF0IGZvciAxLjEuCi0gKi8KIERhdHVt Ci1wZ19zdGF0X3N0YXRlbWVudHNfMV8xMyhQR19GVU5DVElPTl9BUkdTKQorcGdfc3RhdF9zdGF0 ZW1lbnRzXzFfMihQR19GVU5DVElPTl9BUkdTKQogewogCWJvb2wJCXNob3d0ZXh0ID0gUEdfR0VU QVJHX0JPT0woMCk7CiAKLQlwZ19zdGF0X3N0YXRlbWVudHNfaW50ZXJuYWwoZmNpbmZvLCBQR1NT X1YxXzEzLCBzaG93dGV4dCk7Ci0KKwlwZ19zdGF0X3N0YXRlbWVudHNfaW50ZXJuYWwoZmNpbmZv LCBQR1NTX1YxXzIsIHNob3d0ZXh0KTsKIAlyZXR1cm4gKERhdHVtKSAwOwogfQogCiBEYXR1bQot cGdfc3RhdF9zdGF0ZW1lbnRzXzFfMTIoUEdfRlVOQ1RJT05fQVJHUykKK3BnX3N0YXRfc3RhdGVt ZW50c18xXzMoUEdfRlVOQ1RJT05fQVJHUykKIHsKIAlib29sCQlzaG93dGV4dCA9IFBHX0dFVEFS R19CT09MKDApOwogCi0JcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKGZjaW5mbywgUEdTU19W MV8xMiwgc2hvd3RleHQpOwotCisJcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKGZjaW5mbywg UEdTU19WMV8zLCBzaG93dGV4dCk7CiAJcmV0dXJuIChEYXR1bSkgMDsKIH0KIAogRGF0dW0KLXBn X3N0YXRfc3RhdGVtZW50c18xXzExKFBHX0ZVTkNUSU9OX0FSR1MpCitwZ19zdGF0X3N0YXRlbWVu dHNfMV84KFBHX0ZVTkNUSU9OX0FSR1MpCiB7CiAJYm9vbAkJc2hvd3RleHQgPSBQR19HRVRBUkdf Qk9PTCgwKTsKIAotCXBnX3N0YXRfc3RhdGVtZW50c19pbnRlcm5hbChmY2luZm8sIFBHU1NfVjFf MTEsIHNob3d0ZXh0KTsKLQorCXBnX3N0YXRfc3RhdGVtZW50c19pbnRlcm5hbChmY2luZm8sIFBH U1NfVjFfOCwgc2hvd3RleHQpOwogCXJldHVybiAoRGF0dW0pIDA7CiB9CiAKIERhdHVtCi1wZ19z dGF0X3N0YXRlbWVudHNfMV8xMChQR19GVU5DVElPTl9BUkdTKQorcGdfc3RhdF9zdGF0ZW1lbnRz XzFfOShQR19GVU5DVElPTl9BUkdTKQogewogCWJvb2wJCXNob3d0ZXh0ID0gUEdfR0VUQVJHX0JP T0woMCk7CiAKLQlwZ19zdGF0X3N0YXRlbWVudHNfaW50ZXJuYWwoZmNpbmZvLCBQR1NTX1YxXzEw LCBzaG93dGV4dCk7Ci0KKwlwZ19zdGF0X3N0YXRlbWVudHNfaW50ZXJuYWwoZmNpbmZvLCBQR1NT X1YxXzksIHNob3d0ZXh0KTsKIAlyZXR1cm4gKERhdHVtKSAwOwogfQogCiBEYXR1bQotcGdfc3Rh dF9zdGF0ZW1lbnRzXzFfOShQR19GVU5DVElPTl9BUkdTKQorcGdfc3RhdF9zdGF0ZW1lbnRzXzFf MTAoUEdfRlVOQ1RJT05fQVJHUykKIHsKIAlib29sCQlzaG93dGV4dCA9IFBHX0dFVEFSR19CT09M KDApOwogCi0JcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKGZjaW5mbywgUEdTU19WMV85LCBz aG93dGV4dCk7Ci0KKwlwZ19zdGF0X3N0YXRlbWVudHNfaW50ZXJuYWwoZmNpbmZvLCBQR1NTX1Yx XzEwLCBzaG93dGV4dCk7CiAJcmV0dXJuIChEYXR1bSkgMDsKIH0KIAogRGF0dW0KLXBnX3N0YXRf c3RhdGVtZW50c18xXzgoUEdfRlVOQ1RJT05fQVJHUykKK3BnX3N0YXRfc3RhdGVtZW50c18xXzEx KFBHX0ZVTkNUSU9OX0FSR1MpCiB7CiAJYm9vbAkJc2hvd3RleHQgPSBQR19HRVRBUkdfQk9PTCgw KTsKIAotCXBnX3N0YXRfc3RhdGVtZW50c19pbnRlcm5hbChmY2luZm8sIFBHU1NfVjFfOCwgc2hv d3RleHQpOwotCisJcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKGZjaW5mbywgUEdTU19WMV8x MSwgc2hvd3RleHQpOwogCXJldHVybiAoRGF0dW0pIDA7CiB9CiAKIERhdHVtCi1wZ19zdGF0X3N0 YXRlbWVudHNfMV8zKFBHX0ZVTkNUSU9OX0FSR1MpCitwZ19zdGF0X3N0YXRlbWVudHNfMV8xMihQ R19GVU5DVElPTl9BUkdTKQogewogCWJvb2wJCXNob3d0ZXh0ID0gUEdfR0VUQVJHX0JPT0woMCk7 CiAKLQlwZ19zdGF0X3N0YXRlbWVudHNfaW50ZXJuYWwoZmNpbmZvLCBQR1NTX1YxXzMsIHNob3d0 ZXh0KTsKLQorCXBnX3N0YXRfc3RhdGVtZW50c19pbnRlcm5hbChmY2luZm8sIFBHU1NfVjFfMTIs IHNob3d0ZXh0KTsKIAlyZXR1cm4gKERhdHVtKSAwOwogfQogCiBEYXR1bQotcGdfc3RhdF9zdGF0 ZW1lbnRzXzFfMihQR19GVU5DVElPTl9BUkdTKQorcGdfc3RhdF9zdGF0ZW1lbnRzXzFfMTMoUEdf RlVOQ1RJT05fQVJHUykKIHsKLQlib29sCQlzaG93dGV4dCA9IFBHX0dFVEFSR19CT09MKDApOwot Ci0JcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKGZjaW5mbywgUEdTU19WMV8yLCBzaG93dGV4 dCk7CisJYm9vbAkJc2hvd3RleHQgPSBQR19HRVRBUkdfQk9PTCgwKTsKIAorCXBnX3N0YXRfc3Rh dGVtZW50c19pbnRlcm5hbChmY2luZm8sIFBHU1NfVjFfMTMsIHNob3d0ZXh0KTsKIAlyZXR1cm4g KERhdHVtKSAwOwogfQogCiAvKgogICogTGVnYWN5IGVudHJ5IHBvaW50IGZvciBwZ19zdGF0X3N0 YXRlbWVudHMoKSBBUEkgdmVyc2lvbnMgMS4wIGFuZCAxLjEuCi0gKiBUaGlzIGNhbiBiZSByZW1v dmVkIHNvbWVkYXksIHBlcmhhcHMuCiAgKi8KIERhdHVtCiBwZ19zdGF0X3N0YXRlbWVudHMoUEdf RlVOQ1RJT05fQVJHUykKQEAgLTE2NjMsMzMgKzE1NzgsMzEgQEAgcGdfc3RhdF9zdGF0ZW1lbnRz KFBHX0ZVTkNUSU9OX0FSR1MpCiAJcmV0dXJuIChEYXR1bSkgMDsKIH0KIAotLyogQ29tbW9uIGNv ZGUgZm9yIGFsbCB2ZXJzaW9ucyBvZiBwZ19zdGF0X3N0YXRlbWVudHMoKSAqLworLyoKKyAqIHBn X3N0YXRfc3RhdGVtZW50c19pbnRlcm5hbAorICoKKyAqIFNjYW4gdGhlIGRzaGFzaCBmb3IgYWxs IHRyYWNrZWQgZW50cmllcywgZmV0Y2ggdGhlaXIgY291bnRlcnMgZnJvbQorICogcGdzdGF0LCBh bmQgcmV0dXJuIHRoZSBjb21iaW5lZCByZXN1bHQgc2V0LiBWZXJzaW9uLWF3YXJlIGNvbHVtbiBl bWlzc2lvbi4KKyAqLwogc3RhdGljIHZvaWQKIHBnX3N0YXRfc3RhdGVtZW50c19pbnRlcm5hbChG dW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJCQkJCQlwZ3NzVmVyc2lvbiBhcGlfdmVyc2lvbiwK IAkJCQkJCQlib29sIHNob3d0ZXh0KQogewogCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1 cm5TZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlkc2hhc2hfc2VxX3N0YXR1cyBzdGF0 dXM7CisJcGdzc0VudHJ5ICAqZW50cnk7CiAJT2lkCQkJdXNlcmlkID0gR2V0VXNlcklkKCk7Ci0J Ym9vbAkJaXNfYWxsb3dlZF9yb2xlID0gZmFsc2U7CisJYm9vbAkJaXNfYWxsb3dlZF9yb2xlOwog CWNoYXIJICAgKnFidWZmZXIgPSBOVUxMOwogCVNpemUJCXFidWZmZXJfc2l6ZSA9IDA7Ci0JU2l6 ZQkJZXh0ZW50ID0gMDsKLQlpbnQJCQlnY19jb3VudCA9IDA7Ci0JSEFTSF9TRVFfU1RBVFVTIGhh c2hfc2VxOwotCXBnc3NFbnRyeSAgKmVudHJ5OwogCi0JLyoKLQkgKiBTdXBlcnVzZXJzIG9yIHJv bGVzIHdpdGggdGhlIHByaXZpbGVnZXMgb2YgcGdfcmVhZF9hbGxfc3RhdHMgbWVtYmVycwotCSAq IGFyZSBhbGxvd2VkCi0JICovCiAJaXNfYWxsb3dlZF9yb2xlID0gaGFzX3ByaXZzX29mX3JvbGUo dXNlcmlkLCBST0xFX1BHX1JFQURfQUxMX1NUQVRTKTsKIAotCS8qIGhhc2ggdGFibGUgbXVzdCBl eGlzdCBhbHJlYWR5ICovCi0JaWYgKCFwZ3NzIHx8ICFwZ3NzX2hhc2gpCi0JCWVyZXBvcnQoRVJS T1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFU RSksCi0JCQkJIGVycm1zZygicGdfc3RhdF9zdGF0ZW1lbnRzIG11c3QgYmUgbG9hZGVkIHZpYSBc InNoYXJlZF9wcmVsb2FkX2xpYnJhcmllc1wiIikpKTsKKwlwZ3NzX2F0dGFjaF9zaG1lbSgpOwor CisJLyogRmx1c2ggcGVuZGluZyBzdGF0cyBzbyB3ZSBjYW4gcmVhZCB1cC10by1kYXRlIGNvdW50 ZXJzICovCisJcGdzdGF0X3JlcG9ydF9hbnl0aW1lX3N0YXQoKTsKIAogCUluaXRNYXRlcmlhbGl6 ZWRTUkYoZmNpbmZvLCAwKTsKIApAQCAtMTc0Niw4MiArMTY1OSwzOSBAQCBwZ19zdGF0X3N0YXRl bWVudHNfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQllbG9nKEVSUk9SLCAi aW5jb3JyZWN0IG51bWJlciBvZiBvdXRwdXQgYXJndW1lbnRzIik7CiAJfQogCi0JLyoKLQkgKiBX ZSdkIGxpa2UgdG8gbG9hZCB0aGUgcXVlcnkgdGV4dCBmaWxlIChpZiBuZWVkZWQpIHdoaWxlIG5v dCBob2xkaW5nIGFueQotCSAqIGxvY2sgb24gcGdzcy0+bG9jay4gIEluIHRoZSB3b3JzdCBjYXNl IHdlJ2xsIGhhdmUgdG8gZG8gdGhpcyBhZ2FpbgotCSAqIGFmdGVyIHdlIGhhdmUgdGhlIGxvY2ss IGJ1dCBpdCdzIHVubGlrZWx5IGVub3VnaCB0byBtYWtlIHRoaXMgYSB3aW4KLQkgKiBkZXNwaXRl IG9jY2FzaW9uYWwgZHVwbGljYXRlZCB3b3JrLiAgV2UgbmVlZCB0byByZWxvYWQgaWYgYW55Ym9k eQotCSAqIHdyaXRlcyB0byB0aGUgZmlsZSAoZWl0aGVyIGEgcmV0YWlsIHF0ZXh0X3N0b3JlKCks IG9yIGEgZ2FyYmFnZQotCSAqIGNvbGxlY3Rpb24pIGJldHdlZW4gdGhpcyBwb2ludCBhbmQgd2hl cmUgd2UndmUgZ290dGVuIHNoYXJlZCBsb2NrLiAgSWYKLQkgKiBhIHF0ZXh0X3N0b3JlIGlzIGFj dHVhbGx5IGluIHByb2dyZXNzIHdoZW4gd2UgbG9vaywgd2UgbWlnaHQgYXMgd2VsbAotCSAqIHNr aXAgdGhlIHNwZWN1bGF0aXZlIGxvYWQgZW50aXJlbHkuCi0JICovCi0JaWYgKHNob3d0ZXh0KQot CXsKLQkJaW50CQkJbl93cml0ZXJzOwotCi0JCS8qIFRha2UgdGhlIG11dGV4IHNvIHdlIGNhbiBl eGFtaW5lIHZhcmlhYmxlcyAqLwotCQlTcGluTG9ja0FjcXVpcmUoJnBnc3MtPm11dGV4KTsKLQkJ ZXh0ZW50ID0gcGdzcy0+ZXh0ZW50OwotCQluX3dyaXRlcnMgPSBwZ3NzLT5uX3dyaXRlcnM7Ci0J CWdjX2NvdW50ID0gcGdzcy0+Z2NfY291bnQ7Ci0JCVNwaW5Mb2NrUmVsZWFzZSgmcGdzcy0+bXV0 ZXgpOwotCi0JCS8qIE5vIHBvaW50IGluIGxvYWRpbmcgZmlsZSBub3cgaWYgdGhlcmUgYXJlIGFj dGl2ZSB3cml0ZXJzICovCi0JCWlmIChuX3dyaXRlcnMgPT0gMCkKLQkJCXFidWZmZXIgPSBxdGV4 dF9sb2FkX2ZpbGUoJnFidWZmZXJfc2l6ZSk7Ci0JfQotCi0JLyoKLQkgKiBHZXQgc2hhcmVkIGxv Y2ssIGxvYWQgb3IgcmVsb2FkIHRoZSBxdWVyeSB0ZXh0IGZpbGUgaWYgd2UgbXVzdCwgYW5kCi0J ICogaXRlcmF0ZSBvdmVyIHRoZSBoYXNodGFibGUgZW50cmllcy4KLQkgKgotCSAqIFdpdGggYSBs YXJnZSBoYXNoIHRhYmxlLCB3ZSBtaWdodCBiZSBob2xkaW5nIHRoZSBsb2NrIHJhdGhlciBsb25n ZXIKLQkgKiB0aGFuIG9uZSBjb3VsZCB3aXNoLiAgSG93ZXZlciwgdGhpcyBvbmx5IGJsb2NrcyBj cmVhdGlvbiBvZiBuZXcgaGFzaAotCSAqIHRhYmxlIGVudHJpZXMsIGFuZCB0aGUgbGFyZ2VyIHRo ZSBoYXNoIHRhYmxlIHRoZSBsZXNzIGxpa2VseSB0aGF0IGlzIHRvCi0JICogYmUgbmVlZGVkLiAg U28gd2UgY2FuIGhvcGUgdGhpcyBpcyBva2F5LiAgUGVyaGFwcyBzb21lZGF5IHdlJ2xsIGRlY2lk ZQotCSAqIHdlIG5lZWQgdG8gcGFydGl0aW9uIHRoZSBoYXNoIHRhYmxlIHRvIGxpbWl0IHRoZSB0 aW1lIHNwZW50IGhvbGRpbmcgYW55Ci0JICogb25lIGxvY2suCi0JICovCi0JTFdMb2NrQWNxdWly ZSgmcGdzcy0+bG9jay5sb2NrLCBMV19TSEFSRUQpOwotCisJLyogTG9hZCB0aGUgcXVlcnkgdGV4 dCBmaWxlICovCiAJaWYgKHNob3d0ZXh0KQotCXsKLQkJLyoKLQkJICogSGVyZSBpdCBpcyBzYWZl IHRvIGV4YW1pbmUgZXh0ZW50IGFuZCBnY19jb3VudCB3aXRob3V0IHRha2luZyB0aGUKLQkJICog bXV0ZXguICBOb3RlIHRoYXQgYWx0aG91Z2ggb3RoZXIgcHJvY2Vzc2VzIG1pZ2h0IGNoYW5nZQot CQkgKiBwZ3NzLT5leHRlbnQganVzdCBhZnRlciB3ZSBsb29rIGF0IGl0LCB0aGUgc3RyaW5ncyB0 aGV5IHRoZW4gd3JpdGUKLQkJICogaW50byB0aGUgZmlsZSBjYW5ub3QgeWV0IGJlIHJlZmVyZW5j ZWQgaW4gdGhlIGhhc2h0YWJsZSwgc28gd2UKLQkJICogZG9uJ3QgY2FyZSB3aGV0aGVyIHdlIHNl ZSB0aGVtIG9yIG5vdC4KLQkJICoKLQkJICogSWYgcXRleHRfbG9hZF9maWxlIGZhaWxzLCB3ZSBq dXN0IHByZXNzIG9uOyB3ZSdsbCByZXR1cm4gTlVMTCBmb3IKLQkJICogZXZlcnkgcXVlcnkgdGV4 dC4KLQkJICovCi0JCWlmIChxYnVmZmVyID09IE5VTEwgfHwKLQkJCXBnc3MtPmV4dGVudCAhPSBl eHRlbnQgfHwKLQkJCXBnc3MtPmdjX2NvdW50ICE9IGdjX2NvdW50KQotCQl7Ci0JCQlpZiAocWJ1 ZmZlcikKLQkJCQlwZnJlZShxYnVmZmVyKTsKLQkJCXFidWZmZXIgPSBxdGV4dF9sb2FkX2ZpbGUo JnFidWZmZXJfc2l6ZSk7Ci0JCX0KLQl9CisJCXFidWZmZXIgPSBxdGV4dF9sb2FkX2ZpbGUoJnFi dWZmZXJfc2l6ZSk7CiAKLQloYXNoX3NlcV9pbml0KCZoYXNoX3NlcSwgcGdzc19oYXNoKTsKLQl3 aGlsZSAoKGVudHJ5ID0gaGFzaF9zZXFfc2VhcmNoKCZoYXNoX3NlcSkpICE9IE5VTEwpCisJZHNo YXNoX3NlcV9pbml0KCZzdGF0dXMsIHBnc3NfaGFzaCwgZmFsc2UpOworCXdoaWxlICgoZW50cnkg PSBkc2hhc2hfc2VxX25leHQoJnN0YXR1cykpICE9IE5VTEwpCiAJewogCQlEYXR1bQkJdmFsdWVz W1BHX1NUQVRfU1RBVEVNRU5UU19DT0xTXTsKIAkJYm9vbAkJbnVsbHNbUEdfU1RBVF9TVEFURU1F TlRTX0NPTFNdOwogCQlpbnQJCQlpID0gMDsKLQkJQ291bnRlcnMJdG1wOworCQl1aW50NjQJCW9i amlkOworCQlwZ3NzQ291bnRlcnMgKmNvdW50ZXJzOworCQlwZ3NzQ291bnRlcnMgdG1wOwogCQlk b3VibGUJCXN0ZGRldjsKLQkJaW50NjQJCXF1ZXJ5aWQgPSBlbnRyeS0+a2V5LnF1ZXJ5aWQ7Ci0J CVRpbWVzdGFtcFR6IHN0YXRzX3NpbmNlOwotCQlUaW1lc3RhbXBUeiBtaW5tYXhfc3RhdHNfc2lu Y2U7CisJCWJvb2wJCW1heV9mcmVlID0gZmFsc2U7CiAKIAkJbWVtc2V0KHZhbHVlcywgMCwgc2l6 ZW9mKHZhbHVlcykpOwogCQltZW1zZXQobnVsbHMsIDAsIHNpemVvZihudWxscykpOwogCisJCS8q IEZldGNoIGNvdW50ZXJzIGZyb20gcGdzdGF0ICovCisJCW9iamlkID0gcGdzc19oYXNoX2tleSgo cGdzc0hhc2hLZXkgKikgJmVudHJ5LT5rZXkpOworCQljb3VudGVycyA9IChwZ3NzQ291bnRlcnMg KikKKwkJCXBnc3RhdF9mZXRjaF9lbnRyeShQR1NUQVRfS0lORF9QR1NTLCBlbnRyeS0+a2V5LmRi aWQsIG9iamlkLAorCQkJCQkJCSAgICZtYXlfZnJlZSk7CisKKwkJaWYgKCFjb3VudGVycykKKwkJ CWNvbnRpbnVlOworCisJCXRtcCA9ICpjb3VudGVyczsKKwkJaWYgKG1heV9mcmVlKQorCQkJcGZy ZWUoY291bnRlcnMpOworCisKIAkJdmFsdWVzW2krK10gPSBPYmplY3RJZEdldERhdHVtKGVudHJ5 LT5rZXkudXNlcmlkKTsKIAkJdmFsdWVzW2krK10gPSBPYmplY3RJZEdldERhdHVtKGVudHJ5LT5r ZXkuZGJpZCk7CiAJCWlmIChhcGlfdmVyc2lvbiA+PSBQR1NTX1YxXzkpCkBAIC0xODMwLDcgKzE3 MDAsNyBAQCBwZ19zdGF0X3N0YXRlbWVudHNfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2lu Zm8sCiAJCWlmIChpc19hbGxvd2VkX3JvbGUgfHwgZW50cnktPmtleS51c2VyaWQgPT0gdXNlcmlk KQogCQl7CiAJCQlpZiAoYXBpX3ZlcnNpb24gPj0gUEdTU19WMV8yKQotCQkJCXZhbHVlc1tpKytd ID0gSW50NjRHZXREYXR1bUZhc3QocXVlcnlpZCk7CisJCQkJdmFsdWVzW2krK10gPSBJbnQ2NEdl dERhdHVtRmFzdChlbnRyeS0+a2V5LnF1ZXJ5aWQpOwogCiAJCQlpZiAoc2hvd3RleHQpCiAJCQl7 CkBAIC0xODQxLDYyICsxNzExLDMwIEBAIHBnX3N0YXRfc3RhdGVtZW50c19pbnRlcm5hbChGdW5j dGlvbkNhbGxJbmZvIGZjaW5mbywKIAogCQkJCWlmIChxc3RyKQogCQkJCXsKLQkJCQkJY2hhcgkg ICAqZW5jOwotCi0JCQkJCWVuYyA9IHBnX2FueV90b19zZXJ2ZXIocXN0ciwKLQkJCQkJCQkJCQkg ICBlbnRyeS0+cXVlcnlfbGVuLAotCQkJCQkJCQkJCSAgIGVudHJ5LT5lbmNvZGluZyk7CisJCQkJ CWNoYXIJICAgKmVuYyA9IHBnX2FueV90b19zZXJ2ZXIocXN0ciwgZW50cnktPnF1ZXJ5X2xlbiwg ZW50cnktPmVuY29kaW5nKTsKIAogCQkJCQl2YWx1ZXNbaSsrXSA9IENTdHJpbmdHZXRUZXh0RGF0 dW0oZW5jKTsKLQogCQkJCQlpZiAoZW5jICE9IHFzdHIpCiAJCQkJCQlwZnJlZShlbmMpOwogCQkJ CX0KIAkJCQllbHNlCi0JCQkJewotCQkJCQkvKiBKdXN0IHJldHVybiBhIG51bGwgaWYgd2UgZmFp bCB0byBmaW5kIHRoZSB0ZXh0ICovCiAJCQkJCW51bGxzW2krK10gPSB0cnVlOwotCQkJCX0KIAkJ CX0KIAkJCWVsc2UKLQkJCXsKLQkJCQkvKiBRdWVyeSB0ZXh0IG5vdCByZXF1ZXN0ZWQgKi8KIAkJ CQludWxsc1tpKytdID0gdHJ1ZTsKLQkJCX0KIAkJfQogCQllbHNlCiAJCXsKLQkJCS8qIERvbid0 IHNob3cgcXVlcnlpZCAqLwogCQkJaWYgKGFwaV92ZXJzaW9uID49IFBHU1NfVjFfMikKIAkJCQlu dWxsc1tpKytdID0gdHJ1ZTsKIAotCQkJLyoKLQkJCSAqIERvbid0IHNob3cgcXVlcnkgdGV4dCwg YnV0IGhpbnQgYXMgdG8gdGhlIHJlYXNvbiBmb3Igbm90IGRvaW5nCi0JCQkgKiBzbyBpZiBpdCB3 YXMgcmVxdWVzdGVkCi0JCQkgKi8KIAkJCWlmIChzaG93dGV4dCkKIAkJCQl2YWx1ZXNbaSsrXSA9 IENTdHJpbmdHZXRUZXh0RGF0dW0oIjxpbnN1ZmZpY2llbnQgcHJpdmlsZWdlPiIpOwogCQkJZWxz ZQogCQkJCW51bGxzW2krK10gPSB0cnVlOwogCQl9CiAKLQkJLyogY29weSBjb3VudGVycyB0byBh IGxvY2FsIHZhcmlhYmxlIHRvIGtlZXAgbG9ja2luZyB0aW1lIHNob3J0ICovCi0JCVNwaW5Mb2Nr QWNxdWlyZSgmZW50cnktPm11dGV4KTsKLQkJdG1wID0gZW50cnktPmNvdW50ZXJzOwotCQlTcGlu TG9ja1JlbGVhc2UoJmVudHJ5LT5tdXRleCk7Ci0KLQkJLyoKLQkJICogVGhlIHNwaW5sb2NrIGlz IG5vdCByZXF1aXJlZCB3aGVuIHJlYWRpbmcgdGhlc2UgdHdvIGFzIHRoZXkgYXJlCi0JCSAqIGFs d2F5cyB1cGRhdGVkIHdoZW4gaG9sZGluZyBwZ3NzLT5sb2NrIGV4Y2x1c2l2ZWx5LgotCQkgKi8K LQkJc3RhdHNfc2luY2UgPSBlbnRyeS0+c3RhdHNfc2luY2U7Ci0JCW1pbm1heF9zdGF0c19zaW5j ZSA9IGVudHJ5LT5taW5tYXhfc3RhdHNfc2luY2U7Ci0KLQkJLyogU2tpcCBlbnRyeSBpZiB1bmV4 ZWN1dGVkIChpZSwgaXQncyBhIHBlbmRpbmcgInN0aWNreSIgZW50cnkpICovCi0JCWlmIChJU19T VElDS1kodG1wKSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIE5vdGUgdGhhdCB3ZSByZWx5IG9uIFBH U1NfUExBTiBiZWluZyAwIGFuZCBQR1NTX0VYRUMgYmVpbmcgMS4gKi8KKwkJLyogTm90ZTogUEdT U19QTEFOIGlzIDAsIFBHU1NfRVhFQyBpcyAxICovCiAJCWZvciAoaW50IGtpbmQgPSAwOyBraW5k IDwgUEdTU19OVU1LSU5EOyBraW5kKyspCiAJCXsKIAkJCWlmIChraW5kID09IFBHU1NfRVhFQyB8 fCBhcGlfdmVyc2lvbiA+PSBQR1NTX1YxXzgpCkBAIC0xOTEyLDEyICsxNzUwLDYgQEAgcGdfc3Rh dF9zdGF0ZW1lbnRzX2ludGVybmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJCXZhbHVl c1tpKytdID0gRmxvYXQ4R2V0RGF0dW1GYXN0KHRtcC5tYXhfdGltZVtraW5kXSk7CiAJCQkJdmFs dWVzW2krK10gPSBGbG9hdDhHZXREYXR1bUZhc3QodG1wLm1lYW5fdGltZVtraW5kXSk7CiAKLQkJ CQkvKgotCQkJCSAqIE5vdGUgd2UgYXJlIGNhbGN1bGF0aW5nIHRoZSBwb3B1bGF0aW9uIHZhcmlh bmNlIGhlcmUsIG5vdAotCQkJCSAqIHRoZSBzYW1wbGUgdmFyaWFuY2UsIGFzIHdlIGhhdmUgZGF0 YSBmb3IgdGhlIHdob2xlCi0JCQkJICogcG9wdWxhdGlvbiwgc28gQmVzc2VsJ3MgY29ycmVjdGlv biBpcyBub3QgdXNlZCwgYW5kIHdlCi0JCQkJICogZG9uJ3QgZGl2aWRlIGJ5IHRtcC5jYWxscyAt IDEuCi0JCQkJICovCiAJCQkJaWYgKHRtcC5jYWxsc1traW5kXSA+IDEpCiAJCQkJCXN0ZGRldiA9 IHNxcnQodG1wLnN1bV92YXJfdGltZVtraW5kXSAvIHRtcC5jYWxsc1traW5kXSk7CiAJCQkJZWxz ZQpAQCAtMTkyNSw2ICsxNzU3LDcgQEAgcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKEZ1bmN0 aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJCXZhbHVlc1tpKytdID0gRmxvYXQ4R2V0RGF0dW1GYXN0 KHN0ZGRldik7CiAJCQl9CiAJCX0KKwogCQl2YWx1ZXNbaSsrXSA9IEludDY0R2V0RGF0dW1GYXN0 KHRtcC5yb3dzKTsKIAkJdmFsdWVzW2krK10gPSBJbnQ2NEdldERhdHVtRmFzdCh0bXAuc2hhcmVk X2Jsa3NfaGl0KTsKIAkJdmFsdWVzW2krK10gPSBJbnQ2NEdldERhdHVtRmFzdCh0bXAuc2hhcmVk X2Jsa3NfcmVhZCk7CkBAIC0xOTYyLDggKzE3OTUsNiBAQCBwZ19zdGF0X3N0YXRlbWVudHNfaW50 ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQl2YWx1ZXNbaSsrXSA9IEludDY0R2V0 RGF0dW1GYXN0KHRtcC53YWxfZnBpKTsKIAogCQkJc25wcmludGYoYnVmLCBzaXplb2YgYnVmLCBV SU5UNjRfRk9STUFULCB0bXAud2FsX2J5dGVzKTsKLQotCQkJLyogQ29udmVydCB0byBudW1lcmlj LiAqLwogCQkJd2FsX2J5dGVzID0gRGlyZWN0RnVuY3Rpb25DYWxsMyhudW1lcmljX2luLAogCQkJ CQkJCQkJCQlDU3RyaW5nR2V0RGF0dW0oYnVmKSwKIAkJCQkJCQkJCQkJT2JqZWN0SWRHZXREYXR1 bSgwKSwKQEAgLTE5NzEsOSArMTgwMiw3IEBAIHBnX3N0YXRfc3RhdGVtZW50c19pbnRlcm5hbChG dW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJCXZhbHVlc1tpKytdID0gd2FsX2J5dGVzOwogCQl9 CiAJCWlmIChhcGlfdmVyc2lvbiA+PSBQR1NTX1YxXzEyKQotCQl7CiAJCQl2YWx1ZXNbaSsrXSA9 IEludDY0R2V0RGF0dW1GYXN0KHRtcC53YWxfYnVmZmVyc19mdWxsKTsKLQkJfQogCQlpZiAoYXBp X3ZlcnNpb24gPj0gUEdTU19WMV8xMCkKIAkJewogCQkJdmFsdWVzW2krK10gPSBJbnQ2NEdldERh dHVtRmFzdCh0bXAuaml0X2Z1bmN0aW9ucyk7CkBAIC0yMDAyLDggKzE4MzEsOCBAQCBwZ19zdGF0 X3N0YXRlbWVudHNfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCX0KIAkJaWYg KGFwaV92ZXJzaW9uID49IFBHU1NfVjFfMTEpCiAJCXsKLQkJCXZhbHVlc1tpKytdID0gVGltZXN0 YW1wVHpHZXREYXR1bShzdGF0c19zaW5jZSk7Ci0JCQl2YWx1ZXNbaSsrXSA9IFRpbWVzdGFtcFR6 R2V0RGF0dW0obWlubWF4X3N0YXRzX3NpbmNlKTsKKwkJCXZhbHVlc1tpKytdID0gVGltZXN0YW1w VHpHZXREYXR1bShlbnRyeS0+c3RhdHNfc2luY2UpOworCQkJdmFsdWVzW2krK10gPSBUaW1lc3Rh bXBUekdldERhdHVtKGVudHJ5LT5taW5tYXhfc3RhdHNfc2luY2UpOwogCQl9CiAKIAkJQXNzZXJ0 KGkgPT0gKGFwaV92ZXJzaW9uID09IFBHU1NfVjFfMCA/IFBHX1NUQVRfU1RBVEVNRU5UU19DT0xT X1YxXzAgOgpAQCAtMjAyMCw4ICsxODQ5LDcgQEAgcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFs KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCiAJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5m by0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsIHZhbHVlcywgbnVsbHMpOwogCX0KLQotCUxX TG9ja1JlbGVhc2UoJnBnc3MtPmxvY2subG9jayk7CisJZHNoYXNoX3NlcV90ZXJtKCZzdGF0dXMp OwogCiAJaWYgKHFidWZmZXIpCiAJCXBmcmVlKHFidWZmZXIpOwpAQCAtMjAzNiwxOTYgKzE4NjQs Mjk2IEBAIHBnX3N0YXRfc3RhdGVtZW50c19pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5m bywKIERhdHVtCiBwZ19zdGF0X3N0YXRlbWVudHNfaW5mbyhQR19GVU5DVElPTl9BUkdTKQogewot CXBnc3NHbG9iYWxTdGF0cyBzdGF0czsKIAlUdXBsZURlc2MJdHVwZGVzYzsKIAlEYXR1bQkJdmFs dWVzW1BHX1NUQVRfU1RBVEVNRU5UU19JTkZPX0NPTFNdID0gezB9OwogCWJvb2wJCW51bGxzW1BH X1NUQVRfU1RBVEVNRU5UU19JTkZPX0NPTFNdID0gezB9OwogCi0JaWYgKCFwZ3NzIHx8ICFwZ3Nz X2hhc2gpCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9U X0lOX1BSRVJFUVVJU0lURV9TVEFURSksCi0JCQkJIGVycm1zZygicGdfc3RhdF9zdGF0ZW1lbnRz IG11c3QgYmUgbG9hZGVkIHZpYSBcInNoYXJlZF9wcmVsb2FkX2xpYnJhcmllc1wiIikpKTsKLQot CS8qIEJ1aWxkIGEgdHVwbGUgZGVzY3JpcHRvciBmb3Igb3VyIHJlc3VsdCB0eXBlICovCiAJaWYg KGdldF9jYWxsX3Jlc3VsdF90eXBlKGZjaW5mbywgTlVMTCwgJnR1cGRlc2MpICE9IFRZUEVGVU5D X0NPTVBPU0lURSkKIAkJZWxvZyhFUlJPUiwgInJldHVybiB0eXBlIG11c3QgYmUgYSByb3cgdHlw ZSIpOwogCi0JLyogUmVhZCBnbG9iYWwgc3RhdGlzdGljcyBmb3IgcGdfc3RhdF9zdGF0ZW1lbnRz ICovCi0JU3BpbkxvY2tBY3F1aXJlKCZwZ3NzLT5tdXRleCk7Ci0Jc3RhdHMgPSBwZ3NzLT5zdGF0 czsKLQlTcGluTG9ja1JlbGVhc2UoJnBnc3MtPm11dGV4KTsKKwlwZ3NzX2F0dGFjaF9zaG1lbSgp OwogCi0JdmFsdWVzWzBdID0gSW50NjRHZXREYXR1bShzdGF0cy5kZWFsbG9jKTsKLQl2YWx1ZXNb MV0gPSBUaW1lc3RhbXBUekdldERhdHVtKHN0YXRzLnN0YXRzX3Jlc2V0KTsKKwl2YWx1ZXNbMF0g PSBJbnQ2NEdldERhdHVtKChpbnQ2NCkgcGdfYXRvbWljX3JlYWRfdTY0KCZwZ3NzX3NoYXJlZC0+ ZGVhbGxvYykpOworCXZhbHVlc1sxXSA9IFRpbWVzdGFtcFR6R2V0RGF0dW0ocGdzc19zaGFyZWQt PnN0YXRzX3Jlc2V0KTsKIAogCVBHX1JFVFVSTl9EQVRVTShIZWFwVHVwbGVHZXREYXR1bShoZWFw X2Zvcm1fdHVwbGUodHVwZGVzYywgdmFsdWVzLCBudWxscykpKTsKIH0KIAogLyoKLSAqIEFsbG9j YXRlIGEgbmV3IGhhc2h0YWJsZSBlbnRyeS4KLSAqIGNhbGxlciBtdXN0IGhvbGQgYW4gZXhjbHVz aXZlIGxvY2sgb24gcGdzcy0+bG9jaworICogRXZpY3QgZW50cmllcyB1c2luZyBjbG9jay1zd2Vl cCB3aXRoIHJlZmVyZW5jZSBjb3VudCBkZWNheS4KICAqCi0gKiAicXVlcnkiIG5lZWQgbm90IGJl IG51bGwtdGVybWluYXRlZDsgd2UgcmVseSBvbiBxdWVyeV9sZW4gaW5zdGVhZAorICogTXVsdGlw bGUgYmFja2VuZHMgY2FuIHN3ZWVwIGNvbmN1cnJlbnRseSwgZWFjaCBjbGFpbWluZyB0aGUgbmV4 dCBwYXJ0aXRpb24KKyAqIHZpYSBhdG9taWMgaW5jcmVtZW50IG9mIHN3ZWVwX3BhcnRpdGlvbiAo cm90YXRpbmcgaGFuZCkuICBFYWNoIGJhY2tlbmQKKyAqIHN3ZWVwcyBvbmUgcGFydGl0aW9uIHBl ciBpbnZvY2F0aW9uOiBkZWNyZW1lbnRpbmcgcmVmY291bnRzIGFuZCBldmljdGluZworICogZW50 cmllcyB0aGF0IHJlYWNoIHplcm8gdmlhIGRzaGFzaF9kZWxldGVfY3VycmVudC4gIEVudHJpZXMg c3RpbGwgYWJvdmUgMAorICogc3Vydml2ZS4gIEhvdCBxdWVyaWVzIHRoYXQgZXhlY3V0ZSBmcmVx dWVudGx5IGtlZXAgdGhlaXIgcmVmY291bnQgdG9wcGVkCisgKiB1cCAoY2FwcGVkIGF0IFBHU1Nf UkVGX0NBUCksIGdpdmluZyB0aGVtIHByb3BvcnRpb25hbCBwcm90ZWN0aW9uLgogICoKLSAqIElm ICJzdGlja3kiIGlzIHRydWUsIG1ha2UgdGhlIG5ldyBlbnRyeSBhcnRpZmljaWFsbHkgc3RpY2t5 IHNvIHRoYXQgaXQgd2lsbAotICogcHJvYmFibHkgc3RpbGwgYmUgdGhlcmUgd2hlbiB0aGUgcXVl cnkgZmluaXNoZXMgZXhlY3V0aW9uLiAgV2UgZG8gdGhpcyBieQotICogZ2l2aW5nIGl0IGEgbWVk aWFuIHVzYWdlIHZhbHVlIHJhdGhlciB0aGFuIHRoZSBub3JtYWwgdmFsdWUuICAoU3RyaWN0bHkK LSAqIHNwZWFraW5nLCBxdWVyeSBzdHJpbmdzIGFyZSBub3JtYWxpemVkIG9uIGEgYmVzdCBlZmZv cnQgYmFzaXMsIHRob3VnaCBpdAotICogd291bGQgYmUgZGlmZmljdWx0IHRvIGRlbW9uc3RyYXRl IHRoaXMgZXZlbiB1bmRlciBhcnRpZmljaWFsIGNvbmRpdGlvbnMuKQorICogVGhlIGhhbmQgYWR2 YW5jZXMgYWNyb3NzIGludm9jYXRpb25zIHNvIGVhY2ggc3dlZXAgcGlja3MgdXAgd2hlcmUgdGhl IGxhc3QKKyAqIG9uZSBsZWZ0IG9mZiwgcHJvdmlkaW5nIGNsb2NrLXN3ZWVwIGJlaGF2aW9yLiAg RXZpY3Rpb24gc3RvcHMgd2l0aGluIGEKKyAqIHBhcnRpdGlvbiBhcyBzb29uIGFzIG5lbnRyaWVz IGRyb3BzIGJhY2sgdG8gcGdzc19tYXguCiAgKgotICogTm90ZTogZGVzcGl0ZSBuZWVkaW5nIGV4 Y2x1c2l2ZSBsb2NrLCBpdCdzIG5vdCBhbiBlcnJvciBmb3IgdGhlIHRhcmdldAotICogZW50cnkg dG8gYWxyZWFkeSBleGlzdC4gIFRoaXMgaXMgYmVjYXVzZSBwZ3NzX3N0b3JlIHJlbGVhc2VzIGFu ZAotICogcmVhY3F1aXJlcyBsb2NrIGFmdGVyIGZhaWxpbmcgdG8gZmluZCBhIG1hdGNoOyBzbyBz b21lb25lIGVsc2UgY291bGQKLSAqIGhhdmUgbWFkZSB0aGUgZW50cnkgd2hpbGUgd2Ugd2FpdGVk IHRvIGdldCBleGNsdXNpdmUgbG9jay4KKyAqIE5vdGU6IHRoZSBwYXJ0aXRpb24gc3dlcHQgaXMg ZGV0ZXJtaW5lZCBieSB0aGUgcm90YXRpbmcgaGFuZCwgbm90IGJ5IHRoZQorICoga2V5IGp1c3Qg aW5zZXJ0ZWQuICBFdmljdGlvbiBpcyBhIGNvbnRpbnVvdXMgYmFja2dyb3VuZCBwcmVzc3VyZSBt ZWNoYW5pc20KKyAqIHRvIGtlZXAgdG90YWwgZW50cmllcyBuZWFyIHBnc3NfbWF4LCBub3QgYSB0 YXJnZXRlZCBvcGVyYXRpb24gdG8gbWFrZSByb29tCisgKiBmb3IgdGhlIGN1cnJlbnQgZW50cnkg c3BlY2lmaWNhbGx5LgorICoKKyAqIEd1YXJhbnRlZWQgZXZpY3Rpb246IGFueSBlbnRyeSB0aGF0 IHN0b3BzIGJlaW5nIGFjY2Vzc2VkIHdpbGwgcmVhY2ggMAorICogYWZ0ZXIgYXQgbW9zdCBQR1NT X1JFRl9DQVAgc3dlZXBzLgogICovCi1zdGF0aWMgcGdzc0VudHJ5ICoKLWVudHJ5X2FsbG9jKHBn c3NIYXNoS2V5ICprZXksIFNpemUgcXVlcnlfb2Zmc2V0LCBpbnQgcXVlcnlfbGVuLCBpbnQgZW5j b2RpbmcsCi0JCQlib29sIHN0aWNreSkKK3N0YXRpYyB2b2lkCitlbnRyeV9kZWFsbG9jKHZvaWQp CiB7CisJZHNoYXNoX3NlcV9zdGF0dXMgc3RhdHVzOwogCXBnc3NFbnRyeSAgKmVudHJ5OwotCWJv b2wJCWZvdW5kOworCWludAkJCW5lbnRyaWVzOworCWludAkJCWV2aWN0ZWQgPSAwOworCXVpbnQz MgkJbXlfcGFydGl0aW9uOworCXVpbnQzMgkJc3dlZXBfdmFsOworCXVpbnQzMgkJY3VyOworCisJ bmVudHJpZXMgPSAoaW50KSBwZ19hdG9taWNfcmVhZF91NjQoJnBnc3Nfc2hhcmVkLT5uZW50cmll cyk7CisJaWYgKG5lbnRyaWVzIDw9IHBnc3NfbWF4KQorCQlyZXR1cm47CiAKLQkvKiBNYWtlIHNw YWNlIGlmIG5lZWRlZCAqLwotCXdoaWxlIChoYXNoX2dldF9udW1fZW50cmllcyhwZ3NzX2hhc2gp ID49IHBnc3NfbWF4KQotCQllbnRyeV9kZWFsbG9jKCk7CisJLyoKKwkgKiBDbGFpbSB0aGUgbmV4 dCBwYXJ0aXRpb24gYnkgYXRvbWljYWxseSBhZHZhbmNpbmcgdGhlIGhhbmQuICBNdWx0aXBsZQor CSAqIGJhY2tlbmRzIGNhbiBzd2VlcCBjb25jdXJyZW50bHksIGVhY2ggb24gYSBkaWZmZXJlbnQg cGFydGl0aW9uLgorCSAqLworCXN3ZWVwX3ZhbCA9IHBnX2F0b21pY19mZXRjaF9hZGRfdTMyKCZw Z3NzX3NoYXJlZC0+c3dlZXBfcGFydGl0aW9uLCAxKTsKKwlteV9wYXJ0aXRpb24gPSBzd2VlcF92 YWwgJSBEU0hBU0hfTlVNX1BBUlRJVElPTlM7CiAKLQkvKiBGaW5kIG9yIGNyZWF0ZSBhbiBlbnRy eSB3aXRoIGRlc2lyZWQgaGFzaCBjb2RlICovCi0JZW50cnkgPSAocGdzc0VudHJ5ICopIGhhc2hf c2VhcmNoKHBnc3NfaGFzaCwga2V5LCBIQVNIX0VOVEVSLCAmZm91bmQpOworCS8qIFJlLWNoZWNr OiBhbm90aGVyIGJhY2tlbmQgbWF5IGhhdmUgYWxyZWFkeSByZXNvbHZlZCB0aGUgb3ZlcnNob290 ICovCisJaWYgKChpbnQpIHBnX2F0b21pY19yZWFkX3U2NCgmcGdzc19zaGFyZWQtPm5lbnRyaWVz KSA8PSBwZ3NzX21heCkKKwkJcmV0dXJuOwogCi0JaWYgKCFmb3VuZCkKKwkvKgorCSAqIFN3ZWVw IG9uZSBwYXJ0aXRpb246IGRlY3JlbWVudCBlYWNoIGVudHJ5J3MgcmVmY291bnQsIGV2aWN0IGVu dHJpZXMKKwkgKiB0aGF0IHJlYWNoIHplcm8uICBTdG9wIGlmIG5lbnRyaWVzIGRyb3BzIGJhY2sg dG8gcGdzc19tYXguCisJICovCisJZHNoYXNoX3NlcV9pbml0X3BhcnRpdGlvbigmc3RhdHVzLCBw Z3NzX2hhc2gsIHRydWUsIG15X3BhcnRpdGlvbik7CisJd2hpbGUgKChlbnRyeSA9IGRzaGFzaF9z ZXFfbmV4dCgmc3RhdHVzKSkgIT0gTlVMTCkKIAl7Ci0JCS8qIE5ldyBlbnRyeSwgaW5pdGlhbGl6 ZSBpdCAqLwotCi0JCS8qIHJlc2V0IHRoZSBzdGF0aXN0aWNzICovCi0JCW1lbXNldCgmZW50cnkt PmNvdW50ZXJzLCAwLCBzaXplb2YoQ291bnRlcnMpKTsKLQkJLyogc2V0IHRoZSBhcHByb3ByaWF0 ZSBpbml0aWFsIHVzYWdlIGNvdW50ICovCi0JCWVudHJ5LT5jb3VudGVycy51c2FnZSA9IHN0aWNr eSA/IHBnc3MtPmN1cl9tZWRpYW5fdXNhZ2UgOiBVU0FHRV9JTklUOwotCQkvKiByZS1pbml0aWFs aXplIHRoZSBtdXRleCBlYWNoIHRpbWUgLi4uIHdlIGFzc3VtZSBubyBvbmUgdXNpbmcgaXQgKi8K LQkJU3BpbkxvY2tJbml0KCZlbnRyeS0+bXV0ZXgpOwotCQkvKiAuLi4gYW5kIGRvbid0IGZvcmdl dCB0aGUgcXVlcnkgdGV4dCBtZXRhZGF0YSAqLwotCQlBc3NlcnQocXVlcnlfbGVuID49IDApOwot CQllbnRyeS0+cXVlcnlfb2Zmc2V0ID0gcXVlcnlfb2Zmc2V0OwotCQllbnRyeS0+cXVlcnlfbGVu ID0gcXVlcnlfbGVuOwotCQllbnRyeS0+ZW5jb2RpbmcgPSBlbmNvZGluZzsKLQkJZW50cnktPnN0 YXRzX3NpbmNlID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwotCQllbnRyeS0+bWlubWF4X3N0YXRz X3NpbmNlID0gZW50cnktPnN0YXRzX3NpbmNlOwotCX0KKwkJaWYgKChpbnQpIHBnX2F0b21pY19y ZWFkX3U2NCgmcGdzc19zaGFyZWQtPm5lbnRyaWVzKSA8PSBwZ3NzX21heCAqICgxMDAgLSBVU0FH RV9ERUFMTE9DX1BFUkNFTlQpIC8gMTAwKQorCQkJYnJlYWs7CiAKLQlyZXR1cm4gZW50cnk7Ci19 CisJCS8qCisJCSAqIERlY3JlbWVudCByZWZjb3VudDsgZXZpY3QgaWYgaXQgcmVhY2hlcyB6ZXJv LiAgR3VhcmQgYWdhaW5zdAorCQkgKiB1bmRlcmZsb3cg4oCUIGEgcHJpb3Igc3dlZXAgbWF5IGhh dmUgYWxyZWFkeSBkZWNyZW1lbnRlZCB0byB6ZXJvCisJCSAqIHdpdGhvdXQgZXZpY3RpbmcgKGJl Y2F1c2UgbmVudHJpZXMgZHJvcHBlZCBiZWxvdyB0aHJlc2hvbGQpLiBObyBDQVMKKwkJICogbmVl ZGVkOiB3ZSBob2xkIHRoZSBwYXJ0aXRpb24gbG9jayBleGNsdXNpdmVseS4KKwkJICovCisJCWN1 ciA9IHBnX2F0b21pY19yZWFkX3UzMigmZW50cnktPnJlZmNvdW50KTsKKwkJaWYgKGN1ciA+IDAp CisJCXsKKwkJCXBnX2F0b21pY193cml0ZV91MzIoJmVudHJ5LT5yZWZjb3VudCwgY3VyIC0gMSk7 CisJCQlpZiAoY3VyIC0gMSA+IDApCisJCQkJY29udGludWU7CisJCX0KIAotLyoKLSAqIHFzb3J0 IGNvbXBhcmF0b3IgZm9yIHNvcnRpbmcgaW50byBpbmNyZWFzaW5nIHVzYWdlIG9yZGVyCi0gKi8K LXN0YXRpYyBpbnQKLWVudHJ5X2NtcChjb25zdCB2b2lkICpsaHMsIGNvbnN0IHZvaWQgKnJocykK LXsKLQlkb3VibGUJCWxfdXNhZ2UgPSAoKihwZ3NzRW50cnkgKmNvbnN0ICopIGxocyktPmNvdW50 ZXJzLnVzYWdlOwotCWRvdWJsZQkJcl91c2FnZSA9ICgqKHBnc3NFbnRyeSAqY29uc3QgKikgcmhz KS0+Y291bnRlcnMudXNhZ2U7CisJCS8qIEV2aWN0OiBkcm9wIGZyb20gcGdzdGF0LCB0aGVuIGRl bGV0ZSBmcm9tIGRzaGFzaCAqLworCQlwZ3N0YXRfZHJvcF9lbnRyeShQR1NUQVRfS0lORF9QR1NT LCBlbnRyeS0+a2V5LmRiaWQsCisJCQkJCQkgIHBnc3NfaGFzaF9rZXkoJmVudHJ5LT5rZXkpLCB0 cnVlKTsKIAotCWlmIChsX3VzYWdlIDwgcl91c2FnZSkKLQkJcmV0dXJuIC0xOwotCWVsc2UgaWYg KGxfdXNhZ2UgPiByX3VzYWdlKQotCQlyZXR1cm4gKzE7Ci0JZWxzZQotCQlyZXR1cm4gMDsKKwkJ ZHNoYXNoX2RlbGV0ZV9jdXJyZW50KCZzdGF0dXMpOworCQlwZ19hdG9taWNfZmV0Y2hfc3ViX3U2 NCgmcGdzc19zaGFyZWQtPm5lbnRyaWVzLCAxKTsKKwkJZXZpY3RlZCsrOworCX0KKwlkc2hhc2hf c2VxX3Rlcm0oJnN0YXR1cyk7CisKKwlpZiAoZXZpY3RlZCA+IDApCisJeworCQlwZ19hdG9taWNf ZmV0Y2hfYWRkX3U2NCgmcGdzc19zaGFyZWQtPmRlYWxsb2MsIGV2aWN0ZWQpOworCisJCS8qIFJl cXVlc3QgcGdzdGF0IGVudHJ5IHJlZiBHQyBvbmNlIHBlciBmdWxsIHJvdGF0aW9uICovCisJCWlm IChteV9wYXJ0aXRpb24gPT0gRFNIQVNIX05VTV9QQVJUSVRJT05TIC0gMSkKKwkJCXBnc3RhdF9y ZXF1ZXN0X2VudHJ5X3JlZnNfZ2MoKTsKKwl9CiB9CiAKIC8qCi0gKiBEZWFsbG9jYXRlIGxlYXN0 LXVzZWQgZW50cmllcy4KLSAqCi0gKiBDYWxsZXIgbXVzdCBob2xkIGFuIGV4Y2x1c2l2ZSBsb2Nr IG9uIHBnc3MtPmxvY2suCisgKiBSZXNldCBlbnRyaWVzIGNvcnJlc3BvbmRpbmcgdG8gcGFyYW1l dGVycyBwYXNzZWQuCisgKiBJdGVyYXRlcyB0aGUgZHNoYXNoIHRvIGZpbmQgbWF0Y2hpbmcgZW50 cmllcywgZGVsZXRlcyB0aGVtIGZyb20gdGhlCisgKiBkc2hhc2gsIGFuZCBkcm9wcyB0aGVpciBw Z3N0YXQgZW50cmllcy4KICAqLwotc3RhdGljIHZvaWQKLWVudHJ5X2RlYWxsb2Modm9pZCkKK3N0 YXRpYyBUaW1lc3RhbXBUegorZW50cnlfcmVzZXQoT2lkIHVzZXJpZCwgT2lkIGRiaWQsIGludDY0 IHF1ZXJ5aWQsIGJvb2wgbWlubWF4X29ubHkpCiB7Ci0JSEFTSF9TRVFfU1RBVFVTIGhhc2hfc2Vx OwotCXBnc3NFbnRyeSAqKmVudHJpZXM7CisJZHNoYXNoX3NlcV9zdGF0dXMgc3RhdHVzOwogCXBn c3NFbnRyeSAgKmVudHJ5OwotCWludAkJCW52aWN0aW1zOwotCWludAkJCWk7Ci0JU2l6ZQkJdG90 dGV4dGxlbjsKLQlpbnQJCQludmFsaWR0ZXh0czsKKwlUaW1lc3RhbXBUeiBzdGF0c19yZXNldDsK KwlpbnQ2NAkJbnVtX2VudHJpZXM7CisJaW50NjQJCW51bV9yZW1vdmUgPSAwOwogCi0JLyoKLQkg KiBTb3J0IGVudHJpZXMgYnkgdXNhZ2UgYW5kIGRlYWxsb2NhdGUgVVNBR0VfREVBTExPQ19QRVJD RU5UIG9mIHRoZW0uCi0JICogV2hpbGUgd2UncmUgc2Nhbm5pbmcgdGhlIHRhYmxlLCBhcHBseSB0 aGUgZGVjYXkgZmFjdG9yIHRvIHRoZSB1c2FnZQotCSAqIHZhbHVlcywgYW5kIHVwZGF0ZSB0aGUg bWVhbiBxdWVyeSBsZW5ndGguCi0JICoKLQkgKiBOb3RlIHRoYXQgdGhlIG1lYW4gcXVlcnkgbGVu Z3RoIGlzIGFsbW9zdCBpbW1lZGlhdGVseSBvYnNvbGV0ZSwgc2luY2UKLQkgKiB3ZSBjb21wdXRl IGl0IGJlZm9yZSBub3QgYWZ0ZXIgZGlzY2FyZGluZyB0aGUgbGVhc3QtdXNlZCBlbnRyaWVzLgot CSAqIEhvcGVmdWxseSwgdGhhdCBkb2Vzbid0IGFmZmVjdCB0aGUgbWVhbiB0b28gbXVjaDsgaXQg ZG9lc24ndCBzZWVtIHdvcnRoCi0JICogbWFraW5nIHR3byBwYXNzZXMgdG8gZ2V0IGEgbW9yZSBj dXJyZW50IHJlc3VsdC4gIExpa2V3aXNlLCB0aGUgbmV3Ci0JICogY3VyX21lZGlhbl91c2FnZSBp bmNsdWRlcyB0aGUgZW50cmllcyB3ZSdyZSBhYm91dCB0byB6YXAuCi0JICovCisJcGdzc19hdHRh Y2hfc2htZW0oKTsKIAotCWVudHJpZXMgPSBwYWxsb2MoaGFzaF9nZXRfbnVtX2VudHJpZXMocGdz c19oYXNoKSAqIHNpemVvZihwZ3NzRW50cnkgKikpOworCS8qIEZsdXNoIHBlbmRpbmcgc3RhdHMg YmVmb3JlIHJlc2V0IHNvIHdlIGRvbid0IHJlLWNyZWF0ZSBkcm9wcGVkIGVudHJpZXMgKi8KKwlw Z3N0YXRfcmVwb3J0X2FueXRpbWVfc3RhdCgpOwogCi0JaSA9IDA7Ci0JdG90dGV4dGxlbiA9IDA7 Ci0JbnZhbGlkdGV4dHMgPSAwOworCXN0YXRzX3Jlc2V0ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgp OworCW51bV9lbnRyaWVzID0gKGludDY0KSBwZ19hdG9taWNfcmVhZF91NjQoJnBnc3Nfc2hhcmVk LT5uZW50cmllcyk7CiAKLQloYXNoX3NlcV9pbml0KCZoYXNoX3NlcSwgcGdzc19oYXNoKTsKLQl3 aGlsZSAoKGVudHJ5ID0gaGFzaF9zZXFfc2VhcmNoKCZoYXNoX3NlcSkpICE9IE5VTEwpCisJaWYg KG1pbm1heF9vbmx5KQogCXsKLQkJZW50cmllc1tpKytdID0gZW50cnk7Ci0JCS8qICJTdGlja3ki IGVudHJpZXMgZ2V0IGEgZGlmZmVyZW50IHVzYWdlIGRlY2F5IHJhdGUuICovCi0JCWlmIChJU19T VElDS1koZW50cnktPmNvdW50ZXJzKSkKLQkJCWVudHJ5LT5jb3VudGVycy51c2FnZSAqPSBTVElD S1lfREVDUkVBU0VfRkFDVE9SOwotCQllbHNlCi0JCQllbnRyeS0+Y291bnRlcnMudXNhZ2UgKj0g VVNBR0VfREVDUkVBU0VfRkFDVE9SOwotCQkvKiBJbiB0aGUgbWVhbiBsZW5ndGggY29tcHV0YXRp b24sIGlnbm9yZSBkcm9wcGVkIHRleHRzLiAqLwotCQlpZiAoZW50cnktPnF1ZXJ5X2xlbiA+PSAw KQorCQkvKgorCQkgKiBSZXNldCBvbmx5IG1pbi9tYXggdGltaW5nIHZhbHVlcyBhbmQgdXBkYXRl IG1pbm1heF9zdGF0c19zaW5jZS4KKwkJICogSXRlcmF0ZSBtYXRjaGluZyBlbnRyaWVzIGluIHRo ZSBkc2hhc2gsIHJlc2V0IHRoZSBjb3JyZXNwb25kaW5nCisJCSAqIHBnc3RhdCBjb3VudGVycycg bWluL21heCBmaWVsZHMuCisJCSAqLworCQlkc2hhc2hfc2VxX2luaXQoJnN0YXR1cywgcGdzc19o YXNoLCB0cnVlKTsKKwkJd2hpbGUgKChlbnRyeSA9IGRzaGFzaF9zZXFfbmV4dCgmc3RhdHVzKSkg IT0gTlVMTCkKIAkJewotCQkJdG90dGV4dGxlbiArPSBlbnRyeS0+cXVlcnlfbGVuICsgMTsKLQkJ CW52YWxpZHRleHRzKys7CisJCQlpZiAoKCF1c2VyaWQgfHwgZW50cnktPmtleS51c2VyaWQgPT0g dXNlcmlkKSAmJgorCQkJCSghZGJpZCB8fCBlbnRyeS0+a2V5LmRiaWQgPT0gZGJpZCkgJiYKKwkJ CQkoIXF1ZXJ5aWQgfHwgZW50cnktPmtleS5xdWVyeWlkID09IHF1ZXJ5aWQpKQorCQkJeworCQkJ CXVpbnQ2NAkJb2JqaWQgPSBwZ3NzX2hhc2hfa2V5KCZlbnRyeS0+a2V5KTsKKwkJCQlQZ1N0YXRf RW50cnlSZWYgKmVudHJ5X3JlZjsKKworCQkJCWVudHJ5LT5taW5tYXhfc3RhdHNfc2luY2UgPSBz dGF0c19yZXNldDsKKworCQkJCWVudHJ5X3JlZiA9IHBnc3RhdF9nZXRfZW50cnlfcmVmKFBHU1RB VF9LSU5EX1BHU1MsCisJCQkJCQkJCQkJCQkgZW50cnktPmtleS5kYmlkLCBvYmppZCwKKwkJCQkJ CQkJCQkJCSBmYWxzZSwgTlVMTCk7CisJCQkJaWYgKGVudHJ5X3JlZikKKwkJCQl7CisJCQkJCVBn U3RhdFNoYXJlZF9QZ3NzICpzaGFyZWQ7CisKKwkJCQkJc2hhcmVkID0gKFBnU3RhdFNoYXJlZF9Q Z3NzICopIGVudHJ5X3JlZi0+c2hhcmVkX3N0YXRzOworCQkJCQlpZiAoIXBnc3RhdF9sb2NrX2Vu dHJ5KGVudHJ5X3JlZiwgZmFsc2UpKQorCQkJCQkJY29udGludWU7CisKKwkJCQkJZm9yIChpbnQg a2luZCA9IDA7IGtpbmQgPCBQR1NTX05VTUtJTkQ7IGtpbmQrKykKKwkJCQkJeworCQkJCQkJc2hh cmVkLT5jb3VudGVycy5taW5fdGltZVtraW5kXSA9IDA7CisJCQkJCQlzaGFyZWQtPmNvdW50ZXJz Lm1heF90aW1lW2tpbmRdID0gMDsKKwkJCQkJCXNoYXJlZC0+Y291bnRlcnMubWVhbl90aW1lW2tp bmRdID0gMDsKKwkJCQkJCXNoYXJlZC0+Y291bnRlcnMuc3VtX3Zhcl90aW1lW2tpbmRdID0gMDsK KwkJCQkJfQorCisJCQkJCXBnc3RhdF91bmxvY2tfZW50cnkoZW50cnlfcmVmKTsKKwkJCQl9CisJ CQl9CiAJCX0KKwkJZHNoYXNoX3NlcV90ZXJtKCZzdGF0dXMpOworCisJCXJldHVybiBzdGF0c19y ZXNldDsKIAl9CiAKLQkvKiBTb3J0IGludG8gaW5jcmVhc2luZyBvcmRlciBieSB1c2FnZSAqLwot CXFzb3J0KGVudHJpZXMsIGksIHNpemVvZihwZ3NzRW50cnkgKiksIGVudHJ5X2NtcCk7CisJaWYg KHVzZXJpZCAhPSAwICYmIGRiaWQgIT0gMCAmJiBxdWVyeWlkICE9IElOVDY0Q09OU1QoMCkpCisJ eworCQkvKgorCQkgKiBGYXN0IHBhdGg6IHNwZWNpZmljIGVudHJ5IGlkZW50aWZpZWQgYnkgYWxs IHRocmVlIGtleSBjb21wb25lbnRzLgorCQkgKiBUcnkgYm90aCB0b3BsZXZlbD10cnVlIGFuZCB0 b3BsZXZlbD1mYWxzZS4KKwkJICovCisJCXBnc3NIYXNoS2V5IGtleTsKIAotCS8qIFJlY29yZCB0 aGUgKGFwcHJveGltYXRlKSBtZWRpYW4gdXNhZ2UgKi8KLQlpZiAoaSA+IDApCi0JCXBnc3MtPmN1 cl9tZWRpYW5fdXNhZ2UgPSBlbnRyaWVzW2kgLyAyXS0+Y291bnRlcnMudXNhZ2U7Ci0JLyogUmVj b3JkIHRoZSBtZWFuIHF1ZXJ5IGxlbmd0aCAqLwotCWlmIChudmFsaWR0ZXh0cyA+IDApCi0JCXBn c3MtPm1lYW5fcXVlcnlfbGVuID0gdG90dGV4dGxlbiAvIG52YWxpZHRleHRzOwotCWVsc2UKLQkJ cGdzcy0+bWVhbl9xdWVyeV9sZW4gPSBBU1NVTUVEX0xFTkdUSF9JTklUOworCQltZW1zZXQoJmtl eSwgMCwgc2l6ZW9mKHBnc3NIYXNoS2V5KSk7CisJCWtleS51c2VyaWQgPSB1c2VyaWQ7CisJCWtl eS5kYmlkID0gZGJpZDsKKwkJa2V5LnF1ZXJ5aWQgPSBxdWVyeWlkOworCisJCWtleS50b3BsZXZl bCA9IGZhbHNlOworCQllbnRyeSA9IGRzaGFzaF9maW5kKHBnc3NfaGFzaCwgJmtleSwgdHJ1ZSk7 CisJCWlmIChlbnRyeSkKKwkJeworCQkJdWludDY0CQlvYmppZCA9IHBnc3NfaGFzaF9rZXkoJmtl eSk7CisKKwkJCWRzaGFzaF9kZWxldGVfZW50cnkocGdzc19oYXNoLCBlbnRyeSk7CisJCQlwZ19h dG9taWNfZmV0Y2hfc3ViX3U2NCgmcGdzc19zaGFyZWQtPm5lbnRyaWVzLCAxKTsKKwkJCW51bV9y ZW1vdmUrKzsKIAotCS8qIE5vdyB6YXAgYW4gYXBwcm9wcmlhdGUgZnJhY3Rpb24gb2YgbG93ZXN0 LXVzYWdlIGVudHJpZXMgKi8KLQludmljdGltcyA9IE1heCgxMCwgaSAqIFVTQUdFX0RFQUxMT0Nf UEVSQ0VOVCAvIDEwMCk7Ci0JbnZpY3RpbXMgPSBNaW4obnZpY3RpbXMsIGkpOworCQkJaWYgKCFw Z3N0YXRfZHJvcF9lbnRyeShQR1NUQVRfS0lORF9QR1NTLCBrZXkuZGJpZCwgb2JqaWQsIHRydWUp KQorCQkJCXBnc3RhdF9yZXF1ZXN0X2VudHJ5X3JlZnNfZ2MoKTsKKwkJfQorCisJCWtleS50b3Bs ZXZlbCA9IHRydWU7CisJCWVudHJ5ID0gZHNoYXNoX2ZpbmQocGdzc19oYXNoLCAma2V5LCB0cnVl KTsKKwkJaWYgKGVudHJ5KQorCQl7CisJCQl1aW50NjQJCW9iamlkID0gcGdzc19oYXNoX2tleSgm a2V5KTsKIAotCWZvciAoaSA9IDA7IGkgPCBudmljdGltczsgaSsrKQorCQkJZHNoYXNoX2RlbGV0 ZV9lbnRyeShwZ3NzX2hhc2gsIGVudHJ5KTsKKwkJCXBnX2F0b21pY19mZXRjaF9zdWJfdTY0KCZw Z3NzX3NoYXJlZC0+bmVudHJpZXMsIDEpOworCQkJbnVtX3JlbW92ZSsrOworCisJCQlpZiAoIXBn c3RhdF9kcm9wX2VudHJ5KFBHU1RBVF9LSU5EX1BHU1MsIGtleS5kYmlkLCBvYmppZCwgdHJ1ZSkp CisJCQkJcGdzdGF0X3JlcXVlc3RfZW50cnlfcmVmc19nYygpOworCQl9CisJfQorCWVsc2UKIAl7 Ci0JCWhhc2hfc2VhcmNoKHBnc3NfaGFzaCwgJmVudHJpZXNbaV0tPmtleSwgSEFTSF9SRU1PVkUs IE5VTEwpOworCQkvKiBJdGVyYXRlIGFsbCBlbnRyaWVzIGFuZCByZW1vdmUgdGhvc2UgbWF0Y2hp bmcgdGhlIGZpbHRlciAqLworCQlkc2hhc2hfc2VxX2luaXQoJnN0YXR1cywgcGdzc19oYXNoLCB0 cnVlKTsKKwkJd2hpbGUgKChlbnRyeSA9IGRzaGFzaF9zZXFfbmV4dCgmc3RhdHVzKSkgIT0gTlVM TCkKKwkJeworCQkJaWYgKCghdXNlcmlkIHx8IGVudHJ5LT5rZXkudXNlcmlkID09IHVzZXJpZCkg JiYKKwkJCQkoIWRiaWQgfHwgZW50cnktPmtleS5kYmlkID09IGRiaWQpICYmCisJCQkJKCFxdWVy eWlkIHx8IGVudHJ5LT5rZXkucXVlcnlpZCA9PSBxdWVyeWlkKSkKKwkJCXsKKwkJCQlwZ3NzSGFz aEtleSBla2V5ID0gZW50cnktPmtleTsKKwkJCQl1aW50NjQJCW9iamlkID0gcGdzc19oYXNoX2tl eSgmZWtleSk7CisKKwkJCQlkc2hhc2hfZGVsZXRlX2N1cnJlbnQoJnN0YXR1cyk7CisJCQkJcGdf YXRvbWljX2ZldGNoX3N1Yl91NjQoJnBnc3Nfc2hhcmVkLT5uZW50cmllcywgMSk7CisJCQkJbnVt X3JlbW92ZSsrOworCisJCQkJaWYgKCFwZ3N0YXRfZHJvcF9lbnRyeShQR1NUQVRfS0lORF9QR1NT LCBla2V5LmRiaWQsIG9iamlkLCB0cnVlKSkKKwkJCQkJcGdzdGF0X3JlcXVlc3RfZW50cnlfcmVm c19nYygpOworCQkJfQorCQl9CisJCWRzaGFzaF9zZXFfdGVybSgmc3RhdHVzKTsKIAl9CiAKLQlw ZnJlZShlbnRyaWVzKTsKKwkvKiBJZiBhbGwgZW50cmllcyB3ZXJlIHJlbW92ZWQsIHJlc2V0IGds b2JhbCBzdGF0aXN0aWNzIGFuZCB0ZXh0IGZpbGUgKi8KKwlpZiAobnVtX3JlbW92ZSA+IDAgJiYg bnVtX2VudHJpZXMgPT0gbnVtX3JlbW92ZSkKKwl7CisJCUZJTEUJICAgKnFmaWxlOworCisJCXBn X2F0b21pY193cml0ZV91NjQoJnBnc3Nfc2hhcmVkLT5kZWFsbG9jLCAwKTsKKwkJcGdzc19zaGFy ZWQtPnN0YXRzX3Jlc2V0ID0gc3RhdHNfcmVzZXQ7CisKKwkJLyogV3JpdGUgbmV3IGVtcHR5IHF1 ZXJ5IGZpbGUgKi8KKwkJcWZpbGUgPSBBbGxvY2F0ZUZpbGUoUEdTU19URVhUX0ZJTEUsIFBHX0JJ TkFSWV9XKTsKKwkJaWYgKHFmaWxlID09IE5VTEwpCisJCXsKKwkJCWVyZXBvcnQoTE9HLAorCQkJ CQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkJIGVycm1zZygiY291bGQgbm90IGNy ZWF0ZSBmaWxlIFwiJXNcIjogJW0iLAorCQkJCQkJCVBHU1NfVEVYVF9GSUxFKSkpOworCQl9CisJ CWVsc2UKKwkJeworCQkJaWYgKGZ0cnVuY2F0ZShmaWxlbm8ocWZpbGUpLCAwKSAhPSAwKQorCQkJ CWVyZXBvcnQoTE9HLAorCQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJCQkg ZXJybXNnKCJjb3VsZCBub3QgdHJ1bmNhdGUgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJCQkJUEdT U19URVhUX0ZJTEUpKSk7CisJCQlGcmVlRmlsZShxZmlsZSk7CisJCX0KKworCQlTcGluTG9ja0Fj cXVpcmUoJnBnc3Nfc2hhcmVkLT5tdXRleCk7CisJCXBnc3Nfc2hhcmVkLT5leHRlbnQgPSAwOwor CQlTcGluTG9ja1JlbGVhc2UoJnBnc3Nfc2hhcmVkLT5tdXRleCk7CisJCXJlY29yZF9nY19xdGV4 dHMoKTsKKwl9CiAKLQkvKiBJbmNyZW1lbnQgdGhlIG51bWJlciBvZiB0aW1lcyBlbnRyaWVzIGFy ZSBkZWFsbG9jYXRlZCAqLwotCVNwaW5Mb2NrQWNxdWlyZSgmcGdzcy0+bXV0ZXgpOwotCXBnc3Mt PnN0YXRzLmRlYWxsb2MgKz0gMTsKLQlTcGluTG9ja1JlbGVhc2UoJnBnc3MtPm11dGV4KTsKKwly ZXR1cm4gc3RhdHNfcmVzZXQ7CiB9CiAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFF1ZXJ5IHRl eHQgZmlsZSBtYW5hZ2VtZW50CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwogLyoKLSAqIEdp dmVuIGEgcXVlcnkgc3RyaW5nIChub3QgbmVjZXNzYXJpbHkgbnVsbC10ZXJtaW5hdGVkKSwgYWxs b2NhdGUgYSBuZXcKLSAqIGVudHJ5IGluIHRoZSBleHRlcm5hbCBxdWVyeSB0ZXh0IGZpbGUgYW5k IHN0b3JlIHRoZSBzdHJpbmcgdGhlcmUuCisgKiBTdG9yZSBxdWVyeSB0ZXh0IGluIHRoZSBleHRl cm5hbCBmaWxlLgogICoKICAqIElmIHN1Y2Nlc3NmdWwsIHJldHVybnMgdHJ1ZSwgYW5kIHN0b3Jl cyB0aGUgbmV3IGVudHJ5J3Mgb2Zmc2V0IGluIHRoZSBmaWxlCiAgKiBpbnRvICpxdWVyeV9vZmZz ZXQuICBBbHNvLCBpZiBnY19jb3VudCBpc24ndCBOVUxMLCAqZ2NfY291bnQgaXMgc2V0IHRvIHRo ZQogICogbnVtYmVyIG9mIGdhcmJhZ2UgY29sbGVjdGlvbnMgdGhhdCBoYXZlIG9jY3VycmVkIHNv IGZhci4KICAqCiAgKiBPbiBmYWlsdXJlLCByZXR1cm5zIGZhbHNlLgotICoKLSAqIEF0IGxlYXN0 IGEgc2hhcmVkIGxvY2sgb24gcGdzcy0+bG9jayBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlciwg c28gYXMKLSAqIHRvIHByZXZlbnQgYSBjb25jdXJyZW50IGdhcmJhZ2UgY29sbGVjdGlvbi4gIFNo YXJlLWxvY2staG9sZGluZyBjYWxsZXJzCi0gKiBzaG91bGQgcGFzcyBhIGdjX2NvdW50IHBvaW50 ZXIgdG8gb2J0YWluIHRoZSBudW1iZXIgb2YgZ2FyYmFnZSBjb2xsZWN0aW9ucywKLSAqIHNvIHRo YXQgdGhleSBjYW4gcmVjaGVjayB0aGUgY291bnQgYWZ0ZXIgb2J0YWluaW5nIGV4Y2x1c2l2ZSBs b2NrIHRvCi0gKiBkZXRlY3Qgd2hldGhlciBhIGdhcmJhZ2UgY29sbGVjdGlvbiBvY2N1cnJlZCAo YW5kIHJlbW92ZWQgdGhpcyBlbnRyeSkuCiAgKi8KIHN0YXRpYyBib29sCiBxdGV4dF9zdG9yZShj b25zdCBjaGFyICpxdWVyeSwgaW50IHF1ZXJ5X2xlbiwKQEAgLTIyMzgsMTMgKzIxNjYsMTMgQEAg cXRleHRfc3RvcmUoY29uc3QgY2hhciAqcXVlcnksIGludCBxdWVyeV9sZW4sCiAJICogV2UgdXNl IGEgc3BpbmxvY2sgdG8gcHJvdGVjdCBleHRlbnQvbl93cml0ZXJzL2djX2NvdW50LCBzbyB0aGF0 CiAJICogbXVsdGlwbGUgcHJvY2Vzc2VzIG1heSBleGVjdXRlIHRoaXMgZnVuY3Rpb24gY29uY3Vy cmVudGx5LgogCSAqLwotCVNwaW5Mb2NrQWNxdWlyZSgmcGdzcy0+bXV0ZXgpOwotCW9mZiA9IHBn c3MtPmV4dGVudDsKLQlwZ3NzLT5leHRlbnQgKz0gcXVlcnlfbGVuICsgMTsKLQlwZ3NzLT5uX3dy aXRlcnMrKzsKKwlTcGluTG9ja0FjcXVpcmUoJnBnc3Nfc2hhcmVkLT5tdXRleCk7CisJb2ZmID0g cGdzc19zaGFyZWQtPmV4dGVudDsKKwlwZ3NzX3NoYXJlZC0+ZXh0ZW50ICs9IHF1ZXJ5X2xlbiAr IDE7CisJcGdzc19zaGFyZWQtPm5fd3JpdGVycysrOwogCWlmIChnY19jb3VudCkKLQkJKmdjX2Nv dW50ID0gcGdzcy0+Z2NfY291bnQ7Ci0JU3BpbkxvY2tSZWxlYXNlKCZwZ3NzLT5tdXRleCk7CisJ CSpnY19jb3VudCA9IHBnc3Nfc2hhcmVkLT5nY19jb3VudDsKKwlTcGluTG9ja1JlbGVhc2UoJnBn c3Nfc2hhcmVkLT5tdXRleCk7CiAKIAkqcXVlcnlfb2Zmc2V0ID0gb2ZmOwogCkBAIC0yMjU1LDcg KzIxODMsNyBAQCBxdGV4dF9zdG9yZShjb25zdCBjaGFyICpxdWVyeSwgaW50IHF1ZXJ5X2xlbiwK IAkgKi8KIAlpZiAodW5saWtlbHkocXVlcnlfbGVuID49IE1heEFsbG9jSHVnZVNpemUgLSBvZmYp KQogCXsKLQkJZXJybm8gPSBFRkJJRzsJCQkvKiBub3QgcXVpdGUgcmlnaHQsIGJ1dCBpdCdsbCBk byAqLworCQllcnJubyA9IEVGQklHOwogCQlmZCA9IC0xOwogCQlnb3RvIGVycm9yOwogCX0KQEAg LTIyNzMsOSArMjIwMSw5IEBAIHF0ZXh0X3N0b3JlKGNvbnN0IGNoYXIgKnF1ZXJ5LCBpbnQgcXVl cnlfbGVuLAogCUNsb3NlVHJhbnNpZW50RmlsZShmZCk7CiAKIAkvKiBNYXJrIG91ciB3cml0ZSBj b21wbGV0ZSAqLwotCVNwaW5Mb2NrQWNxdWlyZSgmcGdzcy0+bXV0ZXgpOwotCXBnc3MtPm5fd3Jp dGVycy0tOwotCVNwaW5Mb2NrUmVsZWFzZSgmcGdzcy0+bXV0ZXgpOworCVNwaW5Mb2NrQWNxdWly ZSgmcGdzc19zaGFyZWQtPm11dGV4KTsKKwlwZ3NzX3NoYXJlZC0+bl93cml0ZXJzLS07CisJU3Bp bkxvY2tSZWxlYXNlKCZwZ3NzX3NoYXJlZC0+bXV0ZXgpOwogCiAJcmV0dXJuIHRydWU7CiAKQEAg LTIyODksOSArMjIxNyw5IEBAIGVycm9yOgogCQlDbG9zZVRyYW5zaWVudEZpbGUoZmQpOwogCiAJ LyogTWFyayBvdXIgd3JpdGUgY29tcGxldGUgKi8KLQlTcGluTG9ja0FjcXVpcmUoJnBnc3MtPm11 dGV4KTsKLQlwZ3NzLT5uX3dyaXRlcnMtLTsKLQlTcGluTG9ja1JlbGVhc2UoJnBnc3MtPm11dGV4 KTsKKwlTcGluTG9ja0FjcXVpcmUoJnBnc3Nfc2hhcmVkLT5tdXRleCk7CisJcGdzc19zaGFyZWQt Pm5fd3JpdGVycy0tOworCVNwaW5Mb2NrUmVsZWFzZSgmcGdzc19zaGFyZWQtPm11dGV4KTsKIAog CXJldHVybiBmYWxzZTsKIH0KQEAgLTIzMDMsOSArMjIzMSw2IEBAIGVycm9yOgogICogZmlsZSBu b3QgdGhlcmUgb3IgaW5zdWZmaWNpZW50IG1lbW9yeS4KICAqCiAgKiBPbiBzdWNjZXNzLCB0aGUg YnVmZmVyIHNpemUgaXMgYWxzbyByZXR1cm5lZCBpbnRvICpidWZmZXJfc2l6ZS4KLSAqCi0gKiBU aGlzIGNhbiBiZSBjYWxsZWQgd2l0aG91dCBhbnkgbG9jayBvbiBwZ3NzLT5sb2NrLCBidXQgaW4g dGhhdCBjYXNlCi0gKiB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciB2ZXJpZnlpbmcgdGhh dCB0aGUgcmVzdWx0IGlzIHNhbmUuCiAgKi8KIHN0YXRpYyBjaGFyICoKIHF0ZXh0X2xvYWRfZmls ZShTaXplICpidWZmZXJfc2l6ZSkKQEAgLTIzNTQsMjIgKzIyNzksMTQgQEAgcXRleHRfbG9hZF9m aWxlKFNpemUgKmJ1ZmZlcl9zaXplKQogCX0KIAogCS8qCi0JICogT0ssIHNsdXJwIGluIHRoZSBm aWxlLiAgV2luZG93cyBmYWlscyBpZiB3ZSB0cnkgdG8gcmVhZCBtb3JlIHRoYW4KLQkgKiBJTlRf TUFYIGJ5dGVzIGF0IG9uY2UsIGFuZCBvdGhlciBwbGF0Zm9ybXMgbWlnaHQgbm90IGxpa2UgdGhh dCBlaXRoZXIsCi0JICogc28gcmVhZCBhIHZlcnkgbGFyZ2UgZmlsZSBpbiAxR0Igc2VnbWVudHMu CisJICogT0ssIHNsdXJwIGluIHRoZSBmaWxlLiAgUmVhZCBpbiAxR0Igc2VnbWVudHMgdG8gYXZv aWQgaXNzdWVzIG9uIHNvbWUKKwkgKiBwbGF0Zm9ybXMuCiAJICovCiAJbnJlYWQgPSAwOwogCXdo aWxlIChucmVhZCA8IHN0YXQuc3Rfc2l6ZSkKIAl7CiAJCWludAkJCXRvcmVhZCA9IE1pbigxMDI0 ICogMTAyNCAqIDEwMjQsIHN0YXQuc3Rfc2l6ZSAtIG5yZWFkKTsKIAotCQkvKgotCQkgKiBJZiB3 ZSBnZXQgYSBzaG9ydCByZWFkIGFuZCBlcnJubyBkb2Vzbid0IGdldCBzZXQsIHRoZSByZWFzb24g aXMKLQkJICogcHJvYmFibHkgdGhhdCBnYXJiYWdlIGNvbGxlY3Rpb24gdHJ1bmNhdGVkIHRoZSBm aWxlIHNpbmNlIHdlIGRpZAotCQkgKiB0aGUgZnN0YXQoKSwgc28gd2UgZG9uJ3QgbG9nIGEgY29t cGxhaW50IC0tLSBidXQgd2UgZG9uJ3QgcmV0dXJuCi0JCSAqIHRoZSBkYXRhLCBlaXRoZXIsIHNp bmNlIGl0J3MgbW9zdCBsaWtlbHkgY29ycnVwdCBkdWUgdG8gY29uY3VycmVudAotCQkgKiB3cml0 ZXMgZnJvbSBnYXJiYWdlIGNvbGxlY3Rpb24uCi0JCSAqLwogCQllcnJubyA9IDA7CiAJCWlmIChy ZWFkKGZkLCBidWYgKyBucmVhZCwgdG9yZWFkKSAhPSB0b3JlYWQpCiAJCXsKQEAgLTI0MjEsMzcg KzIzMzgsMzkgQEAgcXRleHRfZmV0Y2goU2l6ZSBxdWVyeV9vZmZzZXQsIGludCBxdWVyeV9sZW4s CiAvKgogICogRG8gd2UgbmVlZCB0byBnYXJiYWdlLWNvbGxlY3QgdGhlIGV4dGVybmFsIHF1ZXJ5 IHRleHQgZmlsZT8KICAqCi0gKiBDYWxsZXIgc2hvdWxkIGhvbGQgYXQgbGVhc3QgYSBzaGFyZWQg bG9jayBvbiBwZ3NzLT5sb2NrLgorICogV2UgY2hlY2sgd2hldGhlciB0aGUgZmlsZSBoYXMgZ3Jv d24gZXhjZXNzaXZlbHkgcmVsYXRpdmUgdG8gdGhlIG51bWJlcgorICogb2YgZW50cmllcyB0cmFj a2VkLgogICovCiBzdGF0aWMgYm9vbAogbmVlZF9nY19xdGV4dHModm9pZCkKIHsKIAlTaXplCQll eHRlbnQ7CisJaW50CQkJbmVudHJpZXM7CiAKIAkvKiBSZWFkIHNoYXJlZCBleHRlbnQgcG9pbnRl ciAqLwotCVNwaW5Mb2NrQWNxdWlyZSgmcGdzcy0+bXV0ZXgpOwotCWV4dGVudCA9IHBnc3MtPmV4 dGVudDsKLQlTcGluTG9ja1JlbGVhc2UoJnBnc3MtPm11dGV4KTsKKwlTcGluTG9ja0FjcXVpcmUo JnBnc3Nfc2hhcmVkLT5tdXRleCk7CisJZXh0ZW50ID0gcGdzc19zaGFyZWQtPmV4dGVudDsKKwlT cGluTG9ja1JlbGVhc2UoJnBnc3Nfc2hhcmVkLT5tdXRleCk7CisKKwluZW50cmllcyA9IChpbnQp IHBnX2F0b21pY19yZWFkX3U2NCgmcGdzc19zaGFyZWQtPm5lbnRyaWVzKTsKIAogCS8qCiAJICog RG9uJ3QgcHJvY2VlZCBpZiBmaWxlIGRvZXMgbm90IGV4Y2VlZCA1MTIgYnl0ZXMgcGVyIHBvc3Np YmxlIGVudHJ5LgotCSAqCi0JICogSGVyZSBhbmQgaW4gdGhlIG5leHQgdGVzdCwgMzItYml0IG1h Y2hpbmVzIGhhdmUgb3ZlcmZsb3cgaGF6YXJkcyBpZgotCSAqIHBnc3NfbWF4IGFuZC9vciBtZWFu X3F1ZXJ5X2xlbiBhcmUgbGFyZ2UuICBGb3JjZSB0aGUgbXVsdGlwbGljYXRpb25zCi0JICogYW5k IGNvbXBhcmlzb25zIHRvIGJlIGRvbmUgaW4gdWludDY0IGFyaXRobWV0aWMgdG8gZm9yZXN0YWxs IHRyb3VibGUuCiAJICovCiAJaWYgKCh1aW50NjQpIGV4dGVudCA8ICh1aW50NjQpIDUxMiAqIHBn c3NfbWF4KQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgotCSAqIERvbid0IHByb2NlZWQgaWYgZmls ZSBpcyBsZXNzIHRoYW4gYWJvdXQgNTAlIGJsb2F0LiAgTm90aGluZyBjYW4gb3IKLQkgKiBzaG91 bGQgYmUgZG9uZSBpbiB0aGUgZXZlbnQgb2YgdW51c3VhbGx5IGxhcmdlIHF1ZXJ5IHRleHRzIGFj Y291bnRpbmcKLQkgKiBmb3IgZmlsZSdzIGxhcmdlIHNpemUuICBXZSBnbyB0byB0aGUgdHJvdWJs ZSBvZiBtYWludGFpbmluZyB0aGUgbWVhbgotCSAqIHF1ZXJ5IGxlbmd0aCBpbiBvcmRlciB0byBw cmV2ZW50IGdhcmJhZ2UgY29sbGVjdGlvbiBmcm9tIHRocmFzaGluZwotCSAqIHVzZWxlc3NseS4K KwkgKiBEb24ndCBwcm9jZWVkIGlmIGZpbGUgaXMgbGVzcyB0aGFuIGFib3V0IDUwJSBibG9hdC4g IFdlIGVzdGltYXRlIG1lYW4KKwkgKiBxdWVyeSBsZW5ndGggZnJvbSB0aGUgZmlsZSBzaXplIGFu ZCBlbnRyeSBjb3VudC4KIAkgKi8KLQlpZiAoKHVpbnQ2NCkgZXh0ZW50IDwgKHVpbnQ2NCkgcGdz cy0+bWVhbl9xdWVyeV9sZW4gKiBwZ3NzX21heCAqIDIpCi0JCXJldHVybiBmYWxzZTsKKwlpZiAo bmVudHJpZXMgPiAwKQorCXsKKwkJU2l6ZQkJbWVhbl9xdWVyeV9sZW4gPSBleHRlbnQgLyBuZW50 cmllczsKKworCQlpZiAoKHVpbnQ2NCkgZXh0ZW50IDwgKHVpbnQ2NCkgbWVhbl9xdWVyeV9sZW4g KiBwZ3NzX21heCAqIDIpCisJCQlyZXR1cm4gZmFsc2U7CisJfQogCiAJcmV0dXJuIHRydWU7CiB9 CkBAIC0yNDU5LDE4ICsyMzc4LDE0IEBAIG5lZWRfZ2NfcXRleHRzKHZvaWQpCiAvKgogICogR2Fy YmFnZS1jb2xsZWN0IG9ycGhhbmVkIHF1ZXJ5IHRleHRzIGluIGV4dGVybmFsIGZpbGUuCiAgKgot ICogVGhpcyB3b24ndCBiZSBjYWxsZWQgb2Z0ZW4gaW4gdGhlIHR5cGljYWwgY2FzZSwgc2luY2Ug aXQncyBsaWtlbHkgdGhhdAotICogdGhlcmUgd29uJ3QgYmUgdG9vIG11Y2ggY2h1cm4sIGFuZCBi ZXNpZGVzLCBhIHNpbWlsYXIgY29tcGFjdGlvbiBwcm9jZXNzCi0gKiBvY2N1cnMgd2hlbiBzZXJp YWxpemluZyB0byBkaXNrIGF0IHNodXRkb3duIG9yIGFzIHBhcnQgb2YgcmVzZXR0aW5nLgotICog RGVzcGl0ZSB0aGlzLCBpdCBzZWVtcyBwcnVkZW50IHRvIHBsYW4gZm9yIHRoZSBlZGdlIGNhc2Ug d2hlcmUgdGhlIGZpbGUKLSAqIGJlY29tZXMgdW5yZWFzb25hYmx5IGxhcmdlLCB3aXRoIG5vIG90 aGVyIG1ldGhvZCBvZiBjb21wYWN0aW9uIGxpa2VseSB0bwotICogb2NjdXIgaW4gdGhlIGZvcmVz ZWVhYmxlIGZ1dHVyZS4KKyAqIFRoaXMgcmV3cml0ZXMgdGhlIHF1ZXJ5IHRleHQgZmlsZSwga2Vl cGluZyBvbmx5IHRleHRzIHJlZmVyZW5jZWQgYnkKKyAqIGN1cnJlbnQgZHNoYXNoIGVudHJpZXMs IGFuZCB1cGRhdGVzIHRoZWlyIG9mZnNldHMgYWNjb3JkaW5nbHkuCiAgKgotICogVGhlIGNhbGxl ciBtdXN0IGhvbGQgYW4gZXhjbHVzaXZlIGxvY2sgb24gcGdzcy0+bG9jay4KLSAqCi0gKiBBdCB0 aGUgZmlyc3Qgc2lnbiBvZiB0cm91YmxlIHdlIHVubGluayB0aGUgcXVlcnkgdGV4dCBmaWxlIHRv IGdldCBhIGNsZWFuCi0gKiBzbGF0ZSAoYWx0aG91Z2ggZXhpc3Rpbmcgc3RhdGlzdGljcyBhcmUg cmV0YWluZWQpLCByYXRoZXIgdGhhbiByaXNrCi0gKiB0aHJhc2hpbmcgYnkgYWxsb3dpbmcgdGhl IHNhbWUgcHJvYmxlbSBjYXNlIHRvIHJlY3VyIGluZGVmaW5pdGVseS4KKyAqIE5vdGU6IHVubGlr ZSB0aGUgdXBzdHJlYW0gaW1wbGVtZW50YXRpb24gd2hpY2ggcmVxdWlyZWQgTFdMb2NrIGV4Y2x1 c2l2ZSwKKyAqIHRoaXMgdXNlcyBkc2hhc2ggcGFydGl0aW9uLWxldmVsIGV4Y2x1c2l2ZSBsb2Nr cyB2aWEgc2VxdWVudGlhbCBzY2FuIHdpdGgKKyAqIGV4Y2x1c2l2ZT10cnVlLiAgVGhpcyBpcyBz YWZlIGJlY2F1c2Ugd2UncmUgdXBkYXRpbmcgZW50cnkgb2Zmc2V0cyBpbi1wbGFjZQorICogYW5k IHRoZSBmaWxlIGlzIGd1YXJhbnRlZWQgbm90IHRvIGdyb3cgZHVyaW5nIEdDIChubyBuZXcgd3Jp dGVycyBjYW4gZ2V0CisgKiBvZmZzZXRzIGludG8gdGhlIG9sZCByZWdpb24gYWZ0ZXIgd2UndmUg cmVzZXQgdGhlIGV4dGVudCkuCiAgKi8KIHN0YXRpYyB2b2lkCiBnY19xdGV4dHModm9pZCkKQEAg LTI0NzgsMjUgKzIzOTMsMTYgQEAgZ2NfcXRleHRzKHZvaWQpCiAJY2hhcgkgICAqcWJ1ZmZlcjsK IAlTaXplCQlxYnVmZmVyX3NpemU7CiAJRklMRQkgICAqcWZpbGUgPSBOVUxMOwotCUhBU0hfU0VR X1NUQVRVUyBoYXNoX3NlcTsKKwlkc2hhc2hfc2VxX3N0YXR1cyBzdGF0dXM7CiAJcGdzc0VudHJ5 ICAqZW50cnk7CiAJU2l6ZQkJZXh0ZW50OwotCWludAkJCW5lbnRyaWVzOwogCi0JLyoKLQkgKiBX aGVuIGNhbGxlZCBmcm9tIHBnc3Nfc3RvcmUsIHNvbWUgb3RoZXIgc2Vzc2lvbiBtaWdodCBoYXZl IHByb2NlZWRlZAotCSAqIHdpdGggZ2FyYmFnZSBjb2xsZWN0aW9uIGluIHRoZSBuby1sb2NrLWhl bGQgaW50ZXJpbSBvZiBsb2NrIHN0cmVuZ3RoCi0JICogZXNjYWxhdGlvbi4gIENoZWNrIG9uY2Ug bW9yZSB0aGF0IHRoaXMgaXMgYWN0dWFsbHkgbmVjZXNzYXJ5LgotCSAqLwogCWlmICghbmVlZF9n Y19xdGV4dHMoKSkKIAkJcmV0dXJuOwogCiAJLyoKIAkgKiBMb2FkIHRoZSBvbGQgdGV4dHMgZmls ZS4gIElmIHdlIGZhaWwgKG91dCBvZiBtZW1vcnksIGZvciBpbnN0YW5jZSksCi0JICogaW52YWxp ZGF0ZSBxdWVyeSB0ZXh0cy4gIEhvcGVmdWxseSB0aGlzIGlzIHJhcmUuICBJdCBtaWdodCBzZWVt IGJldHRlcgotCSAqIHRvIGxlYXZlIHRoaW5ncyBhbG9uZSBvbiBhbiBPT00gZmFpbHVyZSwgYnV0 IHRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlCi0JICogZmlsZSBpcyBvbmx5IGdvaW5nIHRvIGdldCBi aWdnZXI7IGhvcGluZyBmb3IgYSBmdXR1cmUgbm9uLU9PTSByZXN1bHQgaXMKLQkgKiByaXNreSBh bmQgY2FuIGVhc2lseSBsZWFkIHRvIGNvbXBsZXRlIGRlbmlhbCBvZiBzZXJ2aWNlLgorCSAqIGlu dmFsaWRhdGUgcXVlcnkgdGV4dHMuCiAJICovCiAJcWJ1ZmZlciA9IHF0ZXh0X2xvYWRfZmlsZSgm cWJ1ZmZlcl9zaXplKTsKIAlpZiAocWJ1ZmZlciA9PSBOVUxMKQpAQCAtMjUwNCw5ICsyNDEwLDcg QEAgZ2NfcXRleHRzKHZvaWQpCiAKIAkvKgogCSAqIFdlIG92ZXJ3cml0ZSB0aGUgcXVlcnkgdGV4 dHMgZmlsZSBpbiBwbGFjZSwgc28gYXMgdG8gcmVkdWNlIHRoZSByaXNrIG9mCi0JICogYW4gb3V0 LW9mLWRpc2stc3BhY2UgZmFpbHVyZS4gIFNpbmNlIHRoZSBmaWxlIGlzIGd1YXJhbnRlZWQgbm90 IHRvIGdldAotCSAqIGxhcmdlciwgdGhpcyBzaG91bGQgYWx3YXlzIHdvcmsgb24gdHJhZGl0aW9u YWwgZmlsZXN5c3RlbXM7IHRob3VnaCB3ZQotCSAqIGNvdWxkIHN0aWxsIGxvc2Ugb24gY29weS1v bi13cml0ZSBmaWxlc3lzdGVtcy4KKwkgKiBhbiBvdXQtb2YtZGlzay1zcGFjZSBmYWlsdXJlLgog CSAqLwogCXFmaWxlID0gQWxsb2NhdGVGaWxlKFBHU1NfVEVYVF9GSUxFLCBQR19CSU5BUllfVyk7 CiAJaWYgKHFmaWxlID09IE5VTEwpCkBAIC0yNTE5LDEwICsyNDIzLDkgQEAgZ2NfcXRleHRzKHZv aWQpCiAJfQogCiAJZXh0ZW50ID0gMDsKLQluZW50cmllcyA9IDA7CiAKLQloYXNoX3NlcV9pbml0 KCZoYXNoX3NlcSwgcGdzc19oYXNoKTsKLQl3aGlsZSAoKGVudHJ5ID0gaGFzaF9zZXFfc2VhcmNo KCZoYXNoX3NlcSkpICE9IE5VTEwpCisJZHNoYXNoX3NlcV9pbml0KCZzdGF0dXMsIHBnc3NfaGFz aCwgdHJ1ZSk7CisJd2hpbGUgKChlbnRyeSA9IGRzaGFzaF9zZXFfbmV4dCgmc3RhdHVzKSkgIT0g TlVMTCkKIAl7CiAJCWludAkJCXF1ZXJ5X2xlbiA9IGVudHJ5LT5xdWVyeV9sZW47CiAJCWNoYXIJ ICAgKnFyeSA9IHF0ZXh0X2ZldGNoKGVudHJ5LT5xdWVyeV9vZmZzZXQsCkBAIC0yNTM1LDcgKzI0 MzgsNiBAQCBnY19xdGV4dHModm9pZCkKIAkJCS8qIFRyb3VibGUgLi4uIGRyb3AgdGhlIHRleHQg Ki8KIAkJCWVudHJ5LT5xdWVyeV9vZmZzZXQgPSAwOwogCQkJZW50cnktPnF1ZXJ5X2xlbiA9IC0x OwotCQkJLyogZW50cnkgd2lsbCBub3QgYmUgY291bnRlZCBpbiBtZWFuIHF1ZXJ5IGxlbmd0aCBj b21wdXRhdGlvbiAqLwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMjU0NSwxOCArMjQ0NywxNyBA QCBnY19xdGV4dHModm9pZCkKIAkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCiAJCQkJ CSBlcnJtc2coImNvdWxkIG5vdCB3cml0ZSBmaWxlIFwiJXNcIjogJW0iLAogCQkJCQkJCVBHU1Nf VEVYVF9GSUxFKSkpOwotCQkJaGFzaF9zZXFfdGVybSgmaGFzaF9zZXEpOworCQkJZHNoYXNoX3Nl cV90ZXJtKCZzdGF0dXMpOwogCQkJZ290byBnY19mYWlsOwogCQl9CiAKIAkJZW50cnktPnF1ZXJ5 X29mZnNldCA9IGV4dGVudDsKIAkJZXh0ZW50ICs9IHF1ZXJ5X2xlbiArIDE7Ci0JCW5lbnRyaWVz Kys7CiAJfQorCWRzaGFzaF9zZXFfdGVybSgmc3RhdHVzKTsKIAogCS8qCi0JICogVHJ1bmNhdGUg YXdheSBhbnkgbm93LXVudXNlZCBzcGFjZS4gIElmIHRoaXMgZmFpbHMgZm9yIHNvbWUgb2RkIHJl YXNvbiwKLQkgKiB3ZSBsb2cgaXQsIGJ1dCB0aGVyZSdzIG5vIG5lZWQgdG8gZmFpbC4KKwkgKiBU cnVuY2F0ZSBhd2F5IGFueSBub3ctdW51c2VkIHNwYWNlLgogCSAqLwogCWlmIChmdHJ1bmNhdGUo ZmlsZW5vKHFmaWxlKSwgZXh0ZW50KSAhPSAwKQogCQllcmVwb3J0KExPRywKQEAgLTI1NzUsMjkg KzI0NzYsMTUgQEAgZ2NfcXRleHRzKHZvaWQpCiAJfQogCiAJZWxvZyhERUJVRzEsICJwZ3NzIGdj IG9mIHF1ZXJpZXMgZmlsZSBzaHJ1bmsgc2l6ZSBmcm9tICV6dSB0byAlenUiLAotCQkgcGdzcy0+ ZXh0ZW50LCBleHRlbnQpOworCQkgcGdzc19zaGFyZWQtPmV4dGVudCwgZXh0ZW50KTsKIAogCS8q IFJlc2V0IHRoZSBzaGFyZWQgZXh0ZW50IHBvaW50ZXIgKi8KLQlwZ3NzLT5leHRlbnQgPSBleHRl bnQ7Ci0KLQkvKgotCSAqIEFsc28gdXBkYXRlIHRoZSBtZWFuIHF1ZXJ5IGxlbmd0aCwgdG8gYmUg c3VyZSB0aGF0IG5lZWRfZ2NfcXRleHRzKCkKLQkgKiB3b24ndCBzdGlsbCB0aGluayB3ZSBoYXZl IGEgcHJvYmxlbS4KLQkgKi8KLQlpZiAobmVudHJpZXMgPiAwKQotCQlwZ3NzLT5tZWFuX3F1ZXJ5 X2xlbiA9IGV4dGVudCAvIG5lbnRyaWVzOwotCWVsc2UKLQkJcGdzcy0+bWVhbl9xdWVyeV9sZW4g PSBBU1NVTUVEX0xFTkdUSF9JTklUOworCVNwaW5Mb2NrQWNxdWlyZSgmcGdzc19zaGFyZWQtPm11 dGV4KTsKKwlwZ3NzX3NoYXJlZC0+ZXh0ZW50ID0gZXh0ZW50OworCVNwaW5Mb2NrUmVsZWFzZSgm cGdzc19zaGFyZWQtPm11dGV4KTsKIAogCXBmcmVlKHFidWZmZXIpOwogCi0JLyoKLQkgKiBPSywg Y291bnQgYSBnYXJiYWdlIGNvbGxlY3Rpb24gY3ljbGUuICAoTm90ZTogZXZlbiB0aG91Z2ggd2Ug aGF2ZQotCSAqIGV4Y2x1c2l2ZSBsb2NrIG9uIHBnc3MtPmxvY2ssIHdlIG11c3QgdGFrZSBwZ3Nz LT5tdXRleCBmb3IgdGhpcywgc2luY2UKLQkgKiBvdGhlciBwcm9jZXNzZXMgbWF5IGV4YW1pbmUg Z2NfY291bnQgd2hpbGUgaG9sZGluZyBvbmx5IHRoZSBtdXRleC4KLQkgKiBBbHNvLCB3ZSBoYXZl IHRvIGFkdmFuY2UgdGhlIGNvdW50ICphZnRlciogd2UndmUgcmV3cml0dGVuIHRoZSBmaWxlLAot CSAqIGVsc2Ugb3RoZXIgcHJvY2Vzc2VzIG1pZ2h0IG5vdCByZWFsaXplIHRoZXkgcmVhZCBhIHN0 YWxlIGZpbGUuKQotCSAqLwogCXJlY29yZF9nY19xdGV4dHMoKTsKIAogCXJldHVybjsKQEAgLTI2 MTEsMTQgKzI0OTgsMTUgQEAgZ2NfZmFpbDoKIAogCS8qCiAJICogU2luY2UgdGhlIGNvbnRlbnRz IG9mIHRoZSBleHRlcm5hbCBmaWxlIGFyZSBub3cgdW5jZXJ0YWluLCBtYXJrIGFsbAotCSAqIGhh c2h0YWJsZSBlbnRyaWVzIGFzIGhhdmluZyBpbnZhbGlkIHRleHRzLgorCSAqIGRzaGFzaCBlbnRy aWVzIGFzIGhhdmluZyBpbnZhbGlkIHRleHRzLgogCSAqLwotCWhhc2hfc2VxX2luaXQoJmhhc2hf c2VxLCBwZ3NzX2hhc2gpOwotCXdoaWxlICgoZW50cnkgPSBoYXNoX3NlcV9zZWFyY2goJmhhc2hf c2VxKSkgIT0gTlVMTCkKKwlkc2hhc2hfc2VxX2luaXQoJnN0YXR1cywgcGdzc19oYXNoLCB0cnVl KTsKKwl3aGlsZSAoKGVudHJ5ID0gZHNoYXNoX3NlcV9uZXh0KCZzdGF0dXMpKSAhPSBOVUxMKQog CXsKIAkJZW50cnktPnF1ZXJ5X29mZnNldCA9IDA7CiAJCWVudHJ5LT5xdWVyeV9sZW4gPSAtMTsK IAl9CisJZHNoYXNoX3NlcV90ZXJtKCZzdGF0dXMpOwogCiAJLyoKIAkgKiBEZXN0cm95IHRoZSBx dWVyeSB0ZXh0IGZpbGUgYW5kIGNyZWF0ZSBhIG5ldywgZW1wdHkgb25lCkBAIC0yNjM0LDE2MCAr MjUyMiwxMSBAQCBnY19mYWlsOgogCQlGcmVlRmlsZShxZmlsZSk7CiAKIAkvKiBSZXNldCB0aGUg c2hhcmVkIGV4dGVudCBwb2ludGVyICovCi0JcGdzcy0+ZXh0ZW50ID0gMDsKLQotCS8qIFJlc2V0 IG1lYW5fcXVlcnlfbGVuIHRvIG1hdGNoIHRoZSBuZXcgc3RhdGUgKi8KLQlwZ3NzLT5tZWFuX3F1 ZXJ5X2xlbiA9IEFTU1VNRURfTEVOR1RIX0lOSVQ7Ci0KLQkvKgotCSAqIEJ1bXAgdGhlIEdDIGNv dW50IGV2ZW4gdGhvdWdoIHdlIGZhaWxlZC4KLQkgKgotCSAqIFRoaXMgaXMgbmVlZGVkIHRvIG1h a2UgY29uY3VycmVudCByZWFkZXJzIG9mIGZpbGUgd2l0aG91dCBhbnkgbG9jayBvbgotCSAqIHBn c3MtPmxvY2sgbm90aWNlIGV4aXN0ZW5jZSBvZiBuZXcgdmVyc2lvbiBvZiBmaWxlLiAgT25jZSBy ZWFkZXJzCi0JICogc3Vic2VxdWVudGx5IG9ic2VydmUgYSBjaGFuZ2UgaW4gR0MgY291bnQgd2l0 aCBwZ3NzLT5sb2NrIGhlbGQsIHRoYXQKLQkgKiBmb3JjZXMgYSBzYWZlIHJlb3BlbiBvZiBmaWxl LiAgV3JpdGVycyBhbHNvIHJlcXVpcmUgdGhhdCB3ZSBidW1wIGhlcmUsCi0JICogb2YgY291cnNl LiAgKEFzIHJlcXVpcmVkIGJ5IGxvY2tpbmcgcHJvdG9jb2wsIHJlYWRlcnMgYW5kIHdyaXRlcnMg ZG9uJ3QKLQkgKiB0cnVzdCBlYXJsaWVyIGZpbGUgY29udGVudHMgdW50aWwgZ2NfY291bnQgaXMg Zm91bmQgdW5jaGFuZ2VkIGFmdGVyCi0JICogcGdzcy0+bG9jayBhY3F1aXJlZCBpbiBzaGFyZWQg b3IgZXhjbHVzaXZlIG1vZGUgcmVzcGVjdGl2ZWx5LikKLQkgKi8KLQlyZWNvcmRfZ2NfcXRleHRz KCk7Ci19Ci0KLSNkZWZpbmUgU0lOR0xFX0VOVFJZX1JFU0VUKGUpIFwKLWlmIChlKSB7IFwKLQlp ZiAobWlubWF4X29ubHkpIHsgXAotCQkvKiBXaGVuIHJlcXVlc3RlZCByZXNldCBvbmx5IG1pbi9t YXggc3RhdGlzdGljcyBvZiBhbiBlbnRyeSAqLyBcCi0JCWZvciAoaW50IGtpbmQgPSAwOyBraW5k IDwgUEdTU19OVU1LSU5EOyBraW5kKyspIFwKLQkJeyBcCi0JCQllLT5jb3VudGVycy5tYXhfdGlt ZVtraW5kXSA9IDA7IFwKLQkJCWUtPmNvdW50ZXJzLm1pbl90aW1lW2tpbmRdID0gMDsgXAotCQl9 IFwKLQkJZS0+bWlubWF4X3N0YXRzX3NpbmNlID0gc3RhdHNfcmVzZXQ7IFwKLQl9IFwKLQllbHNl IFwKLQl7IFwKLQkJLyogUmVtb3ZlIHRoZSBrZXkgb3RoZXJ3aXNlICAqLyBcCi0JCWhhc2hfc2Vh cmNoKHBnc3NfaGFzaCwgJmUtPmtleSwgSEFTSF9SRU1PVkUsIE5VTEwpOyBcCi0JCW51bV9yZW1v dmUrKzsgXAotCX0gXAotfQotCi0vKgotICogUmVzZXQgZW50cmllcyBjb3JyZXNwb25kaW5nIHRv IHBhcmFtZXRlcnMgcGFzc2VkLgotICovCi1zdGF0aWMgVGltZXN0YW1wVHoKLWVudHJ5X3Jlc2V0 KE9pZCB1c2VyaWQsIE9pZCBkYmlkLCBpbnQ2NCBxdWVyeWlkLCBib29sIG1pbm1heF9vbmx5KQot ewotCUhBU0hfU0VRX1NUQVRVUyBoYXNoX3NlcTsKLQlwZ3NzRW50cnkgICplbnRyeTsKLQlGSUxF CSAgICpxZmlsZTsKLQlpbnQ2NAkJbnVtX2VudHJpZXM7Ci0JaW50NjQJCW51bV9yZW1vdmUgPSAw OwotCXBnc3NIYXNoS2V5IGtleTsKLQlUaW1lc3RhbXBUeiBzdGF0c19yZXNldDsKLQotCWlmICgh cGdzcyB8fCAhcGdzc19oYXNoKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNP REVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAotCQkJCSBlcnJtc2coInBnX3N0 YXRfc3RhdGVtZW50cyBtdXN0IGJlIGxvYWRlZCB2aWEgXCJzaGFyZWRfcHJlbG9hZF9saWJyYXJp ZXNcIiIpKSk7Ci0KLQlMV0xvY2tBY3F1aXJlKCZwZ3NzLT5sb2NrLmxvY2ssIExXX0VYQ0xVU0lW RSk7Ci0JbnVtX2VudHJpZXMgPSBoYXNoX2dldF9udW1fZW50cmllcyhwZ3NzX2hhc2gpOwotCi0J c3RhdHNfcmVzZXQgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7Ci0KLQlpZiAodXNlcmlkICE9IDAg JiYgZGJpZCAhPSAwICYmIHF1ZXJ5aWQgIT0gSU5UNjRDT05TVCgwKSkKLQl7Ci0JCS8qIElmIGFs bCB0aGUgcGFyYW1ldGVycyBhcmUgYXZhaWxhYmxlLCB1c2UgdGhlIGZhc3QgcGF0aC4gKi8KLQkJ bWVtc2V0KCZrZXksIDAsIHNpemVvZihwZ3NzSGFzaEtleSkpOwotCQlrZXkudXNlcmlkID0gdXNl cmlkOwotCQlrZXkuZGJpZCA9IGRiaWQ7Ci0JCWtleS5xdWVyeWlkID0gcXVlcnlpZDsKLQotCQkv KgotCQkgKiBSZXNldCB0aGUgZW50cnkgaWYgaXQgZXhpc3RzLCBzdGFydGluZyB3aXRoIHRoZSBu b24tdG9wLWxldmVsCi0JCSAqIGVudHJ5LgotCQkgKi8KLQkJa2V5LnRvcGxldmVsID0gZmFsc2U7 Ci0JCWVudHJ5ID0gKHBnc3NFbnRyeSAqKSBoYXNoX3NlYXJjaChwZ3NzX2hhc2gsICZrZXksIEhB U0hfRklORCwgTlVMTCk7Ci0KLQkJU0lOR0xFX0VOVFJZX1JFU0VUKGVudHJ5KTsKLQotCQkvKiBB bHNvIHJlc2V0IHRoZSB0b3AtbGV2ZWwgZW50cnkgaWYgaXQgZXhpc3RzLiAqLwotCQlrZXkudG9w bGV2ZWwgPSB0cnVlOwotCQllbnRyeSA9IChwZ3NzRW50cnkgKikgaGFzaF9zZWFyY2gocGdzc19o YXNoLCAma2V5LCBIQVNIX0ZJTkQsIE5VTEwpOwotCi0JCVNJTkdMRV9FTlRSWV9SRVNFVChlbnRy eSk7Ci0JfQotCWVsc2UgaWYgKHVzZXJpZCAhPSAwIHx8IGRiaWQgIT0gMCB8fCBxdWVyeWlkICE9 IElOVDY0Q09OU1QoMCkpCi0JewotCQkvKiBSZXNldCBlbnRyaWVzIGNvcnJlc3BvbmRpbmcgdG8g dmFsaWQgcGFyYW1ldGVycy4gKi8KLQkJaGFzaF9zZXFfaW5pdCgmaGFzaF9zZXEsIHBnc3NfaGFz aCk7Ci0JCXdoaWxlICgoZW50cnkgPSBoYXNoX3NlcV9zZWFyY2goJmhhc2hfc2VxKSkgIT0gTlVM TCkKLQkJewotCQkJaWYgKCghdXNlcmlkIHx8IGVudHJ5LT5rZXkudXNlcmlkID09IHVzZXJpZCkg JiYKLQkJCQkoIWRiaWQgfHwgZW50cnktPmtleS5kYmlkID09IGRiaWQpICYmCi0JCQkJKCFxdWVy eWlkIHx8IGVudHJ5LT5rZXkucXVlcnlpZCA9PSBxdWVyeWlkKSkKLQkJCXsKLQkJCQlTSU5HTEVf RU5UUllfUkVTRVQoZW50cnkpOwotCQkJfQotCQl9Ci0JfQotCWVsc2UKLQl7Ci0JCS8qIFJlc2V0 IGFsbCBlbnRyaWVzLiAqLwotCQloYXNoX3NlcV9pbml0KCZoYXNoX3NlcSwgcGdzc19oYXNoKTsK LQkJd2hpbGUgKChlbnRyeSA9IGhhc2hfc2VxX3NlYXJjaCgmaGFzaF9zZXEpKSAhPSBOVUxMKQot CQl7Ci0JCQlTSU5HTEVfRU5UUllfUkVTRVQoZW50cnkpOwotCQl9Ci0JfQotCi0JLyogQWxsIGVu dHJpZXMgYXJlIHJlbW92ZWQ/ICovCi0JaWYgKG51bV9lbnRyaWVzICE9IG51bV9yZW1vdmUpCi0J CWdvdG8gcmVsZWFzZV9sb2NrOwotCi0JLyoKLQkgKiBSZXNldCBnbG9iYWwgc3RhdGlzdGljcyBm b3IgcGdfc3RhdF9zdGF0ZW1lbnRzIHNpbmNlIGFsbCBlbnRyaWVzIGFyZQotCSAqIHJlbW92ZWQu Ci0JICovCi0JU3BpbkxvY2tBY3F1aXJlKCZwZ3NzLT5tdXRleCk7Ci0JcGdzcy0+c3RhdHMuZGVh bGxvYyA9IDA7Ci0JcGdzcy0+c3RhdHMuc3RhdHNfcmVzZXQgPSBzdGF0c19yZXNldDsKLQlTcGlu TG9ja1JlbGVhc2UoJnBnc3MtPm11dGV4KTsKLQotCS8qCi0JICogV3JpdGUgbmV3IGVtcHR5IHF1 ZXJ5IGZpbGUsIHBlcmhhcHMgZXZlbiBjcmVhdGluZyBhIG5ldyBvbmUgdG8gcmVjb3ZlcgotCSAq IGlmIHRoZSBmaWxlIHdhcyBtaXNzaW5nLgotCSAqLwotCXFmaWxlID0gQWxsb2NhdGVGaWxlKFBH U1NfVEVYVF9GSUxFLCBQR19CSU5BUllfVyk7Ci0JaWYgKHFmaWxlID09IE5VTEwpCi0JewotCQll cmVwb3J0KExPRywKLQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkgZXJybXNn KCJjb3VsZCBub3QgY3JlYXRlIGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJCQlQR1NTX1RFWFRfRklM RSkpKTsKLQkJZ290byBkb25lOwotCX0KLQotCS8qIElmIGZ0cnVuY2F0ZSBmYWlscywgbG9nIGl0 LCBidXQgaXQncyBub3QgYSBmYXRhbCBwcm9ibGVtICovCi0JaWYgKGZ0cnVuY2F0ZShmaWxlbm8o cWZpbGUpLCAwKSAhPSAwKQotCQllcmVwb3J0KExPRywKLQkJCQkoZXJyY29kZV9mb3JfZmlsZV9h Y2Nlc3MoKSwKLQkJCQkgZXJybXNnKCJjb3VsZCBub3QgdHJ1bmNhdGUgZmlsZSBcIiVzXCI6ICVt IiwKLQkJCQkJCVBHU1NfVEVYVF9GSUxFKSkpOworCVNwaW5Mb2NrQWNxdWlyZSgmcGdzc19zaGFy ZWQtPm11dGV4KTsKKwlwZ3NzX3NoYXJlZC0+ZXh0ZW50ID0gMDsKKwlTcGluTG9ja1JlbGVhc2Uo JnBnc3Nfc2hhcmVkLT5tdXRleCk7CiAKLQlGcmVlRmlsZShxZmlsZSk7Ci0KLWRvbmU6Ci0JcGdz cy0+ZXh0ZW50ID0gMDsKLQkvKiBUaGlzIGNvdW50cyBhcyBhIHF1ZXJ5IHRleHQgZ2FyYmFnZSBj b2xsZWN0aW9uIGZvciBvdXIgcHVycG9zZXMgKi8KIAlyZWNvcmRfZ2NfcXRleHRzKCk7Ci0KLXJl bGVhc2VfbG9jazoKLQlMV0xvY2tSZWxlYXNlKCZwZ3NzLT5sb2NrLmxvY2spOwotCi0JcmV0dXJu IHN0YXRzX3Jlc2V0OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRl bWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmNvbmYgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50 cy9wZ19zdGF0X3N0YXRlbWVudHMuY29uZgppbmRleCAwZTkwMGQ3MTE5Yi4uMjFhMTBjNDFkMDkg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50 cy5jb25mCisrKyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50 cy5jb25mCkBAIC0xLDIgKzEsMyBAQAogc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzID0gJ3BnX3N0 YXRfc3RhdGVtZW50cycKIG1heF9wcmVwYXJlZF90cmFuc2FjdGlvbnMgPSA1CittYXhfcGFyYWxs ZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0 YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmNvbnRyb2wgYi9jb250cmliL3BnX3N0YXRfc3Rh dGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuY29udHJvbAppbmRleCAyZWVlMGNlZmZhOC4uNjFh ZTQxZWZjMTQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRf c3RhdGVtZW50cy5jb250cm9sCisrKyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0 YXRfc3RhdGVtZW50cy5jb250cm9sCkBAIC0xLDUgKzEsNSBAQAogIyBwZ19zdGF0X3N0YXRlbWVu dHMgZXh0ZW5zaW9uCiBjb21tZW50ID0gJ3RyYWNrIHBsYW5uaW5nIGFuZCBleGVjdXRpb24gc3Rh dGlzdGljcyBvZiBhbGwgU1FMIHN0YXRlbWVudHMgZXhlY3V0ZWQnCi1kZWZhdWx0X3ZlcnNpb24g PSAnMS4xMycKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjE0JwogbW9kdWxlX3BhdGhuYW1lID0gJyRs aWJkaXIvcGdfc3RhdF9zdGF0ZW1lbnRzJwogcmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQg YS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9zcWwvb2xkZXh0dmVyc2lvbnMuc3FsIGIvY29u dHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvc3FsL29sZGV4dHZlcnNpb25zLnNxbAppbmRleCBlNDE2 ZWZlOWZmYi4uYjIwOTBiZTYyNjcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1l bnRzL3NxbC9vbGRleHR2ZXJzaW9ucy5zcWwKKysrIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVu dHMvc3FsL29sZGV4dHZlcnNpb25zLnNxbApAQCAtNjgsNCArNjgsOSBAQCBBbFRFUiBFWFRFTlNJ T04gcGdfc3RhdF9zdGF0ZW1lbnRzIFVQREFURSBUTyAnMS4xMyc7CiBcZCBwZ19zdGF0X3N0YXRl bWVudHMKIFNFTEVDVCBjb3VudCgqKSA+IDAgQVMgaGFzX2RhdGEgRlJPTSBwZ19zdGF0X3N0YXRl bWVudHM7CiAKKy0tIEZ1bmN0aW9ucyBtYXJrZWQgUEFSQUxMRUwgUkVTVFJJQ1RFRCBpbiAxLjE0 CitBbFRFUiBFWFRFTlNJT04gcGdfc3RhdF9zdGF0ZW1lbnRzIFVQREFURSBUTyAnMS4xNCc7Citc ZCBwZ19zdGF0X3N0YXRlbWVudHMKK1NFTEVDVCBjb3VudCgqKSA+IDAgQVMgaGFzX2RhdGEgRlJP TSBwZ19zdGF0X3N0YXRlbWVudHM7CisKIERST1AgRVhURU5TSU9OIHBnX3N0YXRfc3RhdGVtZW50 czsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9wZ3N0YXRzdGF0ZW1lbnRzLnNnbWwgYi9kb2Mv c3JjL3NnbWwvcGdzdGF0c3RhdGVtZW50cy5zZ21sCmluZGV4IGQ3NTNkZTU4MzZlLi44NDcwMjUw ZmY2NiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3Bnc3RhdHN0YXRlbWVudHMuc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvcGdzdGF0c3RhdGVtZW50cy5zZ21sCkBAIC0xNiwxMiArMTYsMTMgQEAK ICA8cGFyYT4KICAgVGhlIG1vZHVsZSBtdXN0IGJlIGxvYWRlZCBieSBhZGRpbmcgPGxpdGVyYWw+ cGdfc3RhdF9zdGF0ZW1lbnRzPC9saXRlcmFsPiB0bwogICA8eHJlZiBsaW5rZW5kPSJndWMtc2hh cmVkLXByZWxvYWQtbGlicmFyaWVzIi8+IGluCi0gIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8 L2ZpbGVuYW1lPiwgYmVjYXVzZSBpdCByZXF1aXJlcyBhZGRpdGlvbmFsIHNoYXJlZCBtZW1vcnku Ci0gIFRoaXMgbWVhbnMgdGhhdCBhIHNlcnZlciByZXN0YXJ0IGlzIG5lZWRlZCB0byBhZGQgb3Ig cmVtb3ZlIHRoZSBtb2R1bGUuCi0gIEluIGFkZGl0aW9uLCBxdWVyeSBpZGVudGlmaWVyIGNhbGN1 bGF0aW9uIG11c3QgYmUgZW5hYmxlZCBpbiBvcmRlciBmb3IgdGhlCi0gIG1vZHVsZSB0byBiZSBh Y3RpdmUsIHdoaWNoIGlzIGRvbmUgYXV0b21hdGljYWxseSBpZiA8eHJlZiBsaW5rZW5kPSJndWMt Y29tcHV0ZS1xdWVyeS1pZCIvPgotICBpcyBzZXQgdG8gPGxpdGVyYWw+YXV0bzwvbGl0ZXJhbD4g b3IgPGxpdGVyYWw+b248L2xpdGVyYWw+LCBvciBhbnkgdGhpcmQtcGFydHkKLSAgbW9kdWxlIHRo YXQgY2FsY3VsYXRlcyBxdWVyeSBpZGVudGlmaWVycyBpcyBsb2FkZWQuCisgIDxmaWxlbmFtZT5w b3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPiwgYmVjYXVzZSBpdCBtdXN0IHJlZ2lzdGVyIGhvb2tz IGFuZCBhCisgIGN1c3RvbSBzdGF0aXN0aWNzIGtpbmQgYXQgc2VydmVyIHN0YXJ0LiBUaGlzIG1l YW5zIHRoYXQgYSBzZXJ2ZXIgcmVzdGFydCBpcworICBuZWVkZWQgdG8gYWRkIG9yIHJlbW92ZSB0 aGUgbW9kdWxlLiBJbiBhZGRpdGlvbiwgcXVlcnkgaWRlbnRpZmllciBjYWxjdWxhdGlvbgorICBt dXN0IGJlIGVuYWJsZWQgaW4gb3JkZXIgZm9yIHRoZSBtb2R1bGUgdG8gYmUgYWN0aXZlLCB3aGlj aCBpcyBkb25lIGF1dG9tYXRpY2FsbHkKKyAgaWYgPHhyZWYgbGlua2VuZD0iZ3VjLWNvbXB1dGUt cXVlcnktaWQiLz4gaXMgc2V0IHRvIDxsaXRlcmFsPmF1dG88L2xpdGVyYWw+IG9yCisgIDxsaXRl cmFsPm9uPC9saXRlcmFsPiwgb3IgYW55IHRoaXJkLXBhcnR5IG1vZHVsZSB0aGF0IGNhbGN1bGF0 ZXMgcXVlcnkgaWRlbnRpZmllcnMKKyAgaXMgbG9hZGVkLgogIDwvcGFyYT4KIAogIDxwYXJhPgpA QCAtNzk0LDEwICs3OTUsMTIgQEAgY2FsbHMgfCAyCiAgICAgICAgPHN0cnVjdGZpZWxkPmRlYWxs b2M8L3N0cnVjdGZpZWxkPiA8dHlwZT5iaWdpbnQ8L3R5cGU+CiAgICAgICA8L3BhcmE+CiAgICAg ICA8cGFyYT4KLSAgICAgICBUb3RhbCBudW1iZXIgb2YgdGltZXMgPHN0cnVjdG5hbWU+cGdfc3Rh dF9zdGF0ZW1lbnRzPC9zdHJ1Y3RuYW1lPgotICAgICAgIGVudHJpZXMgYWJvdXQgdGhlIGxlYXN0 LWV4ZWN1dGVkIHN0YXRlbWVudHMgd2VyZSBkZWFsbG9jYXRlZAotICAgICAgIGJlY2F1c2UgbW9y ZSBkaXN0aW5jdCBzdGF0ZW1lbnRzIHRoYW4KLSAgICAgICA8dmFybmFtZT5wZ19zdGF0X3N0YXRl bWVudHMubWF4PC92YXJuYW1lPiB3ZXJlIG9ic2VydmVkCisgICAgICAgVG90YWwgbnVtYmVyIG9m IDxzdHJ1Y3RuYW1lPnBnX3N0YXRfc3RhdGVtZW50czwvc3RydWN0bmFtZT4KKyAgICAgICBlbnRy aWVzIGV2aWN0ZWQgYmVjYXVzZSBtb3JlIGRpc3RpbmN0IHN0YXRlbWVudHMgdGhhbgorICAgICAg IDx2YXJuYW1lPnBnX3N0YXRfc3RhdGVtZW50cy5tYXg8L3Zhcm5hbWU+IHdlcmUgb2JzZXJ2ZWQu CisgICAgICAgQSBoaWdoIHZhbHVlIHJlbGF0aXZlIHRvIDx2YXJuYW1lPnBnX3N0YXRfc3RhdGVt ZW50cy5tYXg8L3Zhcm5hbWU+CisgICAgICAgaW5kaWNhdGVzIHNpZ25pZmljYW50IHF1ZXJ5IGNo dXJuIGFuZCB0aGF0CisgICAgICAgPHZhcm5hbWU+cGdfc3RhdF9zdGF0ZW1lbnRzLm1heDwvdmFy bmFtZT4gc2hvdWxkIGJlIGluY3JlYXNlZAogICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgIDwv cm93PgogICAgICA8cm93PgpAQCAtOTEwLDEyICs5MTMsMTUgQEAgY2FsbHMgfCAyCiAgICAgICA8 dmFybmFtZT5wZ19zdGF0X3N0YXRlbWVudHMubWF4PC92YXJuYW1lPiBpcyB0aGUgbWF4aW11bSBu dW1iZXIgb2YKICAgICAgIHN0YXRlbWVudHMgdHJhY2tlZCBieSB0aGUgbW9kdWxlIChpLmUuLCB0 aGUgbWF4aW11bSBudW1iZXIgb2Ygcm93cwogICAgICAgaW4gdGhlIDxzdHJ1Y3RuYW1lPnBnX3N0 YXRfc3RhdGVtZW50czwvc3RydWN0bmFtZT4gdmlldykuICBJZiBtb3JlIGRpc3RpbmN0Ci0gICAg ICBzdGF0ZW1lbnRzIHRoYW4gdGhhdCBhcmUgb2JzZXJ2ZWQsIGluZm9ybWF0aW9uIGFib3V0IHRo ZSBsZWFzdC1leGVjdXRlZAorICAgICAgc3RhdGVtZW50cyB0aGFuIHRoYXQgYXJlIG9ic2VydmVk LCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGVhc3QtcmVjZW50bHktdXNlZAogICAgICAgc3RhdGVt ZW50cyBpcyBkaXNjYXJkZWQuICBUaGUgbnVtYmVyIG9mIHRpbWVzIHN1Y2ggaW5mb3JtYXRpb24g d2FzCiAgICAgICBkaXNjYXJkZWQgY2FuIGJlIHNlZW4gaW4gdGhlCiAgICAgICA8c3RydWN0bmFt ZT5wZ19zdGF0X3N0YXRlbWVudHNfaW5mbzwvc3RydWN0bmFtZT4gdmlldy4KKyAgICAgIFRoaXMg aXMgYSBzb2Z0IGxpbWl0OyB0aGUgYWN0dWFsIG51bWJlciBvZiB0cmFja2VkIHN0YXRlbWVudHMg bWF5CisgICAgICBicmllZmx5IGV4Y2VlZCBpdCB1bnRpbCBldmljdGlvbiByZWNsYWltcyBzcGFj ZS4KICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDUwMDAuCi0gICAgICBUaGlzIHBhcmFtZXRl ciBjYW4gb25seSBiZSBzZXQgYXQgc2VydmVyIHN0YXJ0LgorICAgICAgVGhpcyBwYXJhbWV0ZXIg Y2FuIG9ubHkgYmUgc2V0IGluIHRoZSA8ZmlsZW5hbWU+cG9zdGdyZXNxbC5jb25mPC9maWxlbmFt ZT4KKyAgICAgIGZpbGUgb3Igb24gdGhlIHNlcnZlciBjb21tYW5kIGxpbmUuCiAgICAgIDwvcGFy YT4KICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+CkBAIC0xMDA3LDEwICsxMDEz LDExIEBAIGNhbGxzIHwgMgogICA8L3ZhcmlhYmxlbGlzdD4KIAogICA8cGFyYT4KLSAgIFRoZSBt b2R1bGUgcmVxdWlyZXMgYWRkaXRpb25hbCBzaGFyZWQgbWVtb3J5IHByb3BvcnRpb25hbCB0bwot ICAgPHZhcm5hbWU+cGdfc3RhdF9zdGF0ZW1lbnRzLm1heDwvdmFybmFtZT4uICBOb3RlIHRoYXQg dGhpcwotICAgbWVtb3J5IGlzIGNvbnN1bWVkIHdoZW5ldmVyIHRoZSBtb2R1bGUgaXMgbG9hZGVk LCBldmVuIGlmCi0gICA8dmFybmFtZT5wZ19zdGF0X3N0YXRlbWVudHMudHJhY2s8L3Zhcm5hbWU+ IGlzIHNldCB0byA8bGl0ZXJhbD5ub25lPC9saXRlcmFsPi4KKyAgIFRoZSBtb2R1bGUgdXNlcyBk eW5hbWljIHNoYXJlZCBtZW1vcnkgdGhhdCBncm93cyBhcyBzdGF0ZW1lbnRzIGFyZQorICAgdHJh Y2tlZCwgdXAgdG8gdGhlIGxpbWl0IHNldCBieQorICAgPHZhcm5hbWU+cGdfc3RhdF9zdGF0ZW1l bnRzLm1heDwvdmFybmFtZT4uICBOb3RlIHRoYXQgdGhpcyBtZW1vcnkgaXMKKyAgIG5vdCByZWNs YWltZWQgd2hlbiBlbnRyaWVzIGFyZSBkZWFsbG9jYXRlZDsgaXQgaXMgcmV1c2VkIGZvciBuZXcK KyAgIGVudHJpZXMgYnV0IHRoZSBvdmVyYWxsIHNoYXJlZCBtZW1vcnkgZm9vdHByaW50IGRvZXMg bm90IHNocmluay4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotLSAKMi41MC4xIChBcHBsZSBHaXQt MTU1KQoK --000000000000e4fcc10652ff8975--