<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>17480</bug_id>
          
          <creation_ts>2008-02-21 15:28:26 -0800</creation_ts>
          <short_desc>Implement speculative preloading</short_desc>
          <delta_ts>2008-03-13 14:33:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Antti Koivisto">koivisto</assigned_to>
          <cc>ap</cc>
    
    <cc>hyatt</cc>
    
    <cc>koivisto</cc>
    
    <cc>mbelshe</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>71428</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-02-21 15:28:26 -0800</bug_when>
    <thetext>Currently when the parser encounters an external script resource it halts parsing and continues only after the resource has been received from the network. A problem with this is that we are not issuing any more load requests to the network layer. Loading performance depends heavily on parallel loading to hide network latency. With parser halted we quickly run out of things to load leading to poor network bandwidth utilizations.

This effect can be can reduced by introducing a side parser that parses the document source after the resource that halted the main parse. It searches for resources that are likely to be needed to complete the load and issues requests for them. This also makes it possible to schedule script and stylesheet requests (which block rendering) before any image requests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71450</commentid>
    <comment_count>1</comment_count>
      <attachid>19269</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-02-21 18:18:33 -0800</bug_when>
    <thetext>Created attachment 19269
preliminary patch

The patch implements speculative preloading. It also implements reordering of resource loads to schedule scripts and stylesheets first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71462</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-02-21 21:42:44 -0800</bug_when>
    <thetext>See also: bug 7722, bug 11838, bug 17040.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72124</commentid>
    <comment_count>3</comment_count>
      <attachid>19398</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-02-26 23:47:10 -0800</bug_when>
    <thetext>Created attachment 19398
updated patch

Added code to track how well preloads are utilized and debug output that shows some hit rate statistics after page load. Some minor bug fixes too and made it apply to current ToT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72973</commentid>
    <comment_count>4</comment_count>
      <attachid>19580</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-03-07 00:13:29 -0800</bug_when>
    <thetext>Created attachment 19580
another updated patch

- maintain preloads in DocLoader, not HTMLPreloadTokenizer 
- preparse document.write() output, a major performance win in some cases
- fix reversed load ordering</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73415</commentid>
    <comment_count>5</comment_count>
      <attachid>19691</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-03-11 17:19:02 -0700</bug_when>
    <thetext>Created attachment 19691
yet another updated patch

Some cleanups and more optimal loading for file: protocol. Performance looks ok in PLT too.

Flipping the review bit to troll for comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73418</commentid>
    <comment_count>6</comment_count>
      <attachid>19691</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-11 17:32:23 -0700</bug_when>
    <thetext>Comment on attachment 19691
yet another updated patch

The basic structure of the code looks really good!

+// FIXME main tokenizer includes this too, are we getting two copies of the code and data?

We are! We should fix that.

I am sad to see so much of the HTML tokenizing/parsing code copied and pasted, but I don&apos;t have a better suggestion.

+    class HTMLPreloadTokenizer : Noncopyable
+    {

Please move brace up.

+        HTMLPreloadTokenizer(Document* doc);

Please omit the name &quot;doc&quot; here.

+        void emitCharacter(UChar c);
+        
+        void tokenizeCSS(UChar c);

And the &quot;c&quot; here.

+    , m_preloadTokenizer(0)

Not needed. OwnPtr gets initialized to 0 automatically.

     bool referenced() const { return !m_clients.isEmpty(); }
+    enum PreloadResult {

I think a blank line here would make this read better.

+#if PRELOAD_DEBUG
+#include &quot;CString.h&quot;
+#endif

+#if REQUEST_DEBUG
+#include &quot;CString.h&quot;
+#endif

I think it&apos;s OK to include this header unconditionally in these places.

+    void registerPreload(CachedResource* resource);

No need for the word resource here.

+// Match the parallel connection count used by the networking layer
+// FIXME should not hardcode something like this
+const unsigned maxRequestsInFlightPerHost = 4;
+// Having a limit might still help getting more important resources first
+const unsigned maxRequestsInFlightForNonHTTPProtocols= 20;

These should be &quot;static const&quot; rather than just &quot;const&quot;.

+        case CachedResource::ImageResource:
+            return Low;
+        default:
+            ASSERT_NOT_REACHED();
+            return Low;

Moving the default case out of hte switch will cause us to get a warning if there are any unhandled cases.

+    KURL url(resource-&gt;url());

If you use a const KURL&amp; you can save a little refcount thrashing.

+    bool isHTTP = url.protocol() == &quot;http&quot; || url.protocol() == &quot;https&quot;;

This should use the new protocolIs function. For one thing, it makes us not be case sensitive. And it&apos;s also more efficient.

+    if (priority &gt; Low || !isHTTP)
+        // Try to request important resources immediately
+        host-&gt;servePendingRequests(priority);
+    else
+        // Handle asynchronously so early low priority requests don&apos;t get scheduled before later high priority ones
+        scheduleServePendingRequests();

Please put braces around these multiline bodies, even though they are one statement (the comma makes it two lines).

+        enum Priority {
+            Low, Medium, High
+        };

I&apos;d like this better all on a single line.

+        Priority determinePriority(const CachedResource* resource) const;

No need for the word resource here.

+            void cancelPendingRequests(RequestQueue&amp; requestsPending, DocLoader* docLoader);

No need for the word &quot;docLoader&quot; here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73437</commentid>
    <comment_count>7</comment_count>
      <attachid>19694</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-03-12 00:25:49 -0700</bug_when>
    <thetext>Created attachment 19694
Darin&apos;s comments etc.

- Implemented Darin&apos;s comments
- Renamed the preloader class to PreloadScanner as suggested by Mitz
- ChangeLogs
- Some other minor tweaks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73586</commentid>
    <comment_count>8</comment_count>
      <attachid>19694</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-13 10:18:48 -0700</bug_when>
    <thetext>Comment on attachment 19694
Darin&apos;s comments etc.

+// FIXME: temporary, add PreloadScanner to all build files
+#if PLATFORM(MAC)
+#define PRELOAD_SCANNER_ENABLED 1
+#else
+#define PRELOAD_SCANNER_ENABLED 0
+#endif

I think this should go in the header, not the .cpp file.

+            // printf(&quot;DOCUMENT.WRITE PRELOAD\n&quot;);

Please don&apos;t check in commented-out printf.

+#include &quot;config.h&quot;
+
+#include &quot;PreloadScanner.h&quot;

Normally we don&apos;t leave a blank line there.

+    // FIXME there is a table for more exceptions in the spec

We&apos;d normally use a colon and use a sentence (capital first letter, period) in a comment like this one.

It would be good to say which specification you&apos;re talking about. In general it seems that a comment saying that this was derived from the HTML 5 specification and which draft you used would be helpful.

+#define PreloadScanner_h
+
+#include &quot;AtomicString.h&quot;
+#include &quot;PlatformString.h&quot;
+#include &quot;SegmentedString.h&quot;

No need to include PlatformString.h here.

+#include &lt;wtf/ListHashSet.h&gt;
+#include &lt;wtf/Noncopyable.h&gt;
+#include &lt;wtf/OwnPtr.h&gt;

No reason to include ListHashSet.h or OwnPtr.h in this header.

+    unsigned m_preloadCount;
+    PreloadResult m_preloadResult;
+    bool m_requestedFromNetworkingLayer;

Why are these protected rather than private? Please make things private unless there is a reason not to.

+static const unsigned maxRequestsInFlightForNonHTTPProtocols= 20;

+static const unsigned maxRequestsInFlightForNonHTTPProtocols= 10000;

Missing space before &quot;=&quot;.

+#if REQUEST_DEBUG
+    KURL u(resource-&gt;url());
+    printf(&quot;HOST %s COUNT %d RECEIVED %s\n&quot;, u.host().latin1().data(), m_requestsLoading.size(), resource-&gt;url().latin1().data());
+#endif

I think we need to add easier ways to log things. All this x.latin1().data() and x.utf8().data() gets tiring after a while!

These are all minor editorial comments, so r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73590</commentid>
    <comment_count>9</comment_count>
    <who name="Mike Belshe">mbelshe</who>
    <bug_when>2008-03-13 10:42:29 -0700</bug_when>
    <thetext>Note:

I believe in CancelRequests, the &apos;;&apos; at the end of the if statement is a bug:
+        if (host-&gt;hasRequests());
+            host-&gt;cancelRequests(docLoader);
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73597</commentid>
    <comment_count>10</comment_count>
    <who name="Mike Belshe">mbelshe</who>
    <bug_when>2008-03-13 11:19:32 -0700</bug_when>
    <thetext>In PreloadScanner::tokenize
   if (!match || (!isWhitespace(tmpChar) &amp;&amp; tmpChar != &apos;&gt;&apos; &amp; tmpChar != &apos;/&apos;)) {

I believe that should be a &quot;&amp;&amp;&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73632</commentid>
    <comment_count>11</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-03-13 14:33:48 -0700</bug_when>
    <thetext>r31038 plus fixes to issues spotted by Mike in r31041</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19269</attachid>
            <date>2008-02-21 18:18:33 -0800</date>
            <delta_ts>2008-02-26 23:47:10 -0800</delta_ts>
            <desc>preliminary patch</desc>
            <filename>speculative-loading-4.patch</filename>
            <type>text/plain</type>
            <size>66425</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAzMDQ2NSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0zNzY2LDYgKzM3NjYsOCBAQAogCQlFNDQ2MTQzQzBDRDY4OUNDMDBG
QURBNzUgLyogSlNIVE1MU291cmNlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNDIzNzIwQ0JGQjZFMDAwQUYyRUNFIC8qIEpTSFRNTFNv
dXJjZUVsZW1lbnQuaCAqLzsgfTsKIAkJRTQ0NjE0NTEwQ0Q2OEEzNTAwRkFEQTc1IC8qIFJlbmRl
clZpZGVvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0QjQxRTMzMENCRkI2MDkwMEFGMkVDRSAvKiBSZW5kZXJWaWRlby5jcHAgKi87IH07CiAJCUU0
NDYxNDUyMENENjhBMzUwMEZBREE3NSAvKiBSZW5kZXJWaWRlby5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNDFFMzQwQ0JGQjYwOTAwQUYyRUNFIC8q
IFJlbmRlclZpZGVvLmggKi87IH07CisJCUU0QUI4OEExMEQ1QkY0MjUwMEEzNUJEMyAvKiBIVE1M
UHJlbG9hZFRva2VuaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTRBQjg4OUYwRDVCRjQyNTAwQTM1QkQzIC8qIEhUTUxQcmVsb2FkVG9rZW5pemVy
LmggKi87IH07CisJCUU0QUI4OEEyMEQ1QkY0MjUwMEEzNUJEMyAvKiBIVE1MUHJlbG9hZFRva2Vu
aXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NEFCODhBMDBENUJGNDI1MDBBMzVCRDMgLyogSFRNTFByZWxvYWRUb2tlbml6ZXIuY3BwICovOyB9
OwogCQlFNEMyNzk1ODBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDMjc5NTYwQ0Y5NzQxOTAw
RTk3Qjk4IC8qIFJlbmRlck1lZGlhLmNwcCAqLzsgfTsKIAkJRTRDMjc5NTkwQ0Y5NzQxOTAwRTk3
Qjk4IC8qIFJlbmRlck1lZGlhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNEMyNzk1NzBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuaCAqLzsg
fTsKIAkJRTRFRUZGQzgwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEVFRkZDNjBE
MzQ1NTBDMDA0NjlBNTggLyogSlNBdWRpb0NvbnN0cnVjdG9yLmNwcCAqLzsgfTsKQEAgLTc4NjMs
NiArNzg2NSw4IEBACiAJCUU0NDYxNDExMENENjgyNjkwMEZBREE3NSAvKiBKU01lZGlhRXJyb3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZWRpYUVycm9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDYxNDEyMENENjgyNjkwMEZBREE3NSAvKiBKU1Rp
bWVSYW5nZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUaW1l
UmFuZ2VzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ0NjE0MTMwQ0Q2ODI2
OTAwRkFEQTc1IC8qIEpTVGltZVJhbmdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1RpbWVSYW5nZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRBQjg4
OUYwRDVCRjQyNTAwQTM1QkQzIC8qIEhUTUxQcmVsb2FkVG9rZW5pemVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxQcmVsb2FkVG9rZW5pemVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUU0QUI4OEEwMEQ1QkY0MjUwMEEzNUJEMyAvKiBIVE1MUHJlbG9h
ZFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1M
UHJlbG9hZFRva2VuaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QjQx
RTAxMENCRjhFQUEwMEFGMkVDRSAvKiBQcm9ncmVzc0V2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb2dyZXNzRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNEI0MUUwMjBDQkY4RUFBMDBBRjJFQ0UgLyogUHJvZ3Jlc3NFdmVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9ncmVzc0V2ZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QjQxRTAzMENCRjhFQUEwMEFGMkVDRSAvKiBQcm9n
cmVzc0V2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQcm9ncmVzc0V2ZW50LmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3NzgsNiArOTc4Miw4IEBACiAJCTkzRUVD
MUVDMDlDMjg3NzcwMEM1MTVEMSAvKiBodG1sICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQlFNEFCODg5RjBENUJGNDI1MDBBMzVCRDMgLyogSFRNTFByZWxv
YWRUb2tlbml6ZXIuaCAqLywKKwkJCQlFNEFCODhBMDBENUJGNDI1MDBBMzVCRDMgLyogSFRNTFBy
ZWxvYWRUb2tlbml6ZXIuY3BwICovLAogCQkJCTkzRUVDMUYwMDlDMjg3NzcwMEM1MTVEMSAvKiBD
YW52YXNHcmFkaWVudC5jcHAgKi8sCiAJCQkJOTNFRUMxRjEwOUMyODc3NzAwQzUxNUQxIC8qIENh
bnZhc0dyYWRpZW50LmggKi8sCiAJCQkJOTMwQ0FCODgwOUM0OUVGQTAwMjI5QzA0IC8qIENhbnZh
c0dyYWRpZW50LmlkbCAqLywKQEAgLTE0MjQ0LDYgKzE0MjUwLDcgQEAKIAkJCQk1MUE5MjY3RjBE
NTNGMDU3MDA2M0VDQzIgLyogT3JpZ2luVXNhZ2VSZWNvcmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVEQ0Y4MzZEMEQ1OTE1OTgwMDk1M0JDNiAvKiBQbHVnaW5JbmZvU3RvcmUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUMwMjk0REY0MEQ1QTZGRDgwMENDN0Q2QiAvKiBVc2VyU3R5bGVTaGVldExvYWRl
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTRBQjg4QTEwRDVCRjQyNTAwQTM1QkQzIC8qIEhUTUxQ
cmVsb2FkVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMURFMUMwODBENUNFNENGMDAz
NEMzOEYgLyogTWVzc2FnZVF1ZXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzN0Y4MThGRDBENjU3
NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0M1NzMzNTBENjk1QkJFMDA2RUY1MTcgLyogRE9NUHJvZ3Jlc3NFdmVudC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xNTg0MCw2ICsxNTg0Nyw3IEBACiAJCQkJNTFBOTI2N0MwRDUzRjA1NzAwNjNFQ0My
IC8qIE9yaWdpblF1b3RhTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUE5MjY3RTBE
NTNGMDU3MDA2M0VDQzIgLyogT3JpZ2luVXNhZ2VSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQzAyOTRERjMwRDVBNkZEODAwQ0M3RDZCIC8qIFVzZXJTdHlsZVNoZWV0TG9hZGVyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUU0QUI4OEEyMEQ1QkY0MjUwMEEzNUJEMyAvKiBIVE1MUHJlbG9h
ZFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0Y4MThGRTBENjU3NjA2MDA1RTFG
MDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDNTczMzYw
RDY5NUJCRTAwNkVGNTE3IC8qIERPTVByb2dyZXNzRXZlbnQubW0gaW4gU291cmNlcyAqLywKIAkJ
CSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkocmV2aXNpb24gMzA0NjUpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcg
KzEwNCw3IEBAIFN0eWxlU2hlZXQqIEhUTUxMaW5rRWxlbWVudDo6c2hlZXQoKSBjb24KIHZvaWQg
SFRNTExpbmtFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0
dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSByZWxBdHRyKSB7Ci0gICAgICAgIHRva2Vu
aXplUmVsQXR0cmlidXRlKGF0dHItPnZhbHVlKCkpOworICAgICAgICB0b2tlbml6ZVJlbEF0dHJp
YnV0ZShhdHRyLT52YWx1ZSgpLCBtX2lzU3R5bGVTaGVldCwgbV9hbHRlcm5hdGUsIG1faXNJY29u
KTsKICAgICAgICAgcHJvY2VzcygpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGhy
ZWZBdHRyKSB7CiAgICAgICAgIG1fdXJsID0gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwocGFyc2VV
UkwoYXR0ci0+dmFsdWUoKSkpLnN0cmluZygpOwpAQCAtMTI0LDE3ICsxMjQsMjAgQEAgdm9pZCBI
VE1MTGlua0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogICAgIH0KIH0KIAotdm9pZCBIVE1M
TGlua0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgcmVs
U3RyKQordm9pZCBIVE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmlidXRlKGNvbnN0IEF0
b21pY1N0cmluZyYgcmVsU3RyLCBib29sJiBzdHlsZVNoZWV0LCBib29sJiBhbHRlcm5hdGUsIGJv
b2wmIGljb24pCiB7Ci0gICAgbV9pc1N0eWxlU2hlZXQgPSBtX2lzSWNvbiA9IG1fYWx0ZXJuYXRl
ID0gZmFsc2U7CisgICAgc3R5bGVTaGVldCA9IGZhbHNlOworICAgIGljb24gPSBmYWxzZTsgCisg
ICAgYWx0ZXJuYXRlID0gZmFsc2U7CiAgICAgU3RyaW5nIHJlbCA9IHJlbFN0ci5zdHJpbmcoKS5s
b3dlcigpOwogICAgIGlmIChyZWwgPT0gInN0eWxlc2hlZXQiKQotICAgICAgICBtX2lzU3R5bGVT
aGVldCA9IHRydWU7CisgICAgICAgIHN0eWxlU2hlZXQgPSB0cnVlOwogICAgIGVsc2UgaWYgKHJl
bCA9PSAiaWNvbiIgfHwgcmVsID09ICJzaG9ydGN1dCBpY29uIikKLSAgICAgICAgbV9pc0ljb24g
PSB0cnVlOwotICAgIGVsc2UgaWYgKHJlbCA9PSAiYWx0ZXJuYXRlIHN0eWxlc2hlZXQiIHx8IHJl
bCA9PSAic3R5bGVzaGVldCBhbHRlcm5hdGUiKQotICAgICAgICBtX2lzU3R5bGVTaGVldCA9IG1f
YWx0ZXJuYXRlID0gdHJ1ZTsKLSAgICBlbHNlIHsKKyAgICAgICAgaWNvbiA9IHRydWU7CisgICAg
ZWxzZSBpZiAocmVsID09ICJhbHRlcm5hdGUgc3R5bGVzaGVldCIgfHwgcmVsID09ICJzdHlsZXNo
ZWV0IGFsdGVybmF0ZSIpIHsKKyAgICAgICAgc3R5bGVTaGVldCA9IHRydWU7CisgICAgICAgIGFs
dGVybmF0ZSA9IHRydWU7CisgICAgfSBlbHNlIHsKICAgICAgICAgLy8gVG9rZW5pemUgdGhlIHJl
bCBhdHRyaWJ1dGUgYW5kIHNldCBiaXRzIGJhc2VkIG9uIHNwZWNpZmljIGtleXdvcmRzIHRoYXQg
d2UgZmluZC4KICAgICAgICAgcmVsLnJlcGxhY2UoJ1xuJywgJyAnKTsKICAgICAgICAgVmVjdG9y
PFN0cmluZz4gbGlzdDsKQEAgLTE0MiwxMSArMTQ1LDExIEBAIHZvaWQgSFRNTExpbmtFbGVtZW50
Ojp0b2tlbml6ZVJlbEF0dHJpYnUKICAgICAgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGxpc3QuZW5kKCk7CiAgICAgICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbGlzdC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
ICAgIGlmICgqaXQgPT0gInN0eWxlc2hlZXQiKQotICAgICAgICAgICAgICAgIG1faXNTdHlsZVNo
ZWV0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzdHlsZVNoZWV0ID0gdHJ1ZTsKICAgICAgICAg
ICAgIGVsc2UgaWYgKCppdCA9PSAiYWx0ZXJuYXRlIikKLSAgICAgICAgICAgICAgICBtX2FsdGVy
bmF0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlID0gdHJ1ZTsKICAgICAgICAg
ICAgIGVsc2UgaWYgKCppdCA9PSAiaWNvbiIpCi0gICAgICAgICAgICAgICAgbV9pc0ljb24gPSB0
cnVlOworICAgICAgICAgICAgICAgIGljb24gPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogfQpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuaAkocmV2aXNpb24gMzA0NjUpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTExpbmtFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0
OwogICAgIAotICAgIHZvaWQgdG9rZW5pemVSZWxBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5n
JiByZWwpOworICAgIHN0YXRpYyB2b2lkIHRva2VuaXplUmVsQXR0cmlidXRlKGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUsIGJvb2wmIHN0eWxlc2hlZXQsIGJvb2wmIGFsdGVybmF0ZSwgYm9vbCYg
aWNvbik7CiAKIHByb3RlY3RlZDoKICAgICBDYWNoZWRDU1NTdHlsZVNoZWV0KiBtX2NhY2hlZFNo
ZWV0OwpAQCAtMTAwLDEwICsxMDAsMTAgQEAgcHJvdGVjdGVkOgogICAgIFN0cmluZyBtX3R5cGU7
CiAgICAgU3RyaW5nIG1fbWVkaWE7CiAgICAgaW50IG1fZGlzYWJsZWRTdGF0ZTsgLy8gMD11bnNl
dChkZWZhdWx0KSwgMT1lbmFibGVkIHZpYSBzY3JpcHQsIDI9ZGlzYWJsZWQKLSAgICBib29sIG1f
bG9hZGluZyA6IDE7Ci0gICAgYm9vbCBtX2FsdGVybmF0ZSA6IDE7Ci0gICAgYm9vbCBtX2lzU3R5
bGVTaGVldCA6IDE7Ci0gICAgYm9vbCBtX2lzSWNvbiA6IDE7CisgICAgYm9vbCBtX2xvYWRpbmc7
CisgICAgYm9vbCBtX2FsdGVybmF0ZTsKKyAgICBib29sIG1faXNTdHlsZVNoZWV0OworICAgIGJv
b2wgbV9pc0ljb247CiB9OwogCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TFByZWxvYWRUb2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUHJl
bG9hZFRva2VuaXplci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvSFRNTFByZWxv
YWRUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg4NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJIVE1MUHJlbG9hZFRva2VuaXplci5oIgorCisjaW5j
bHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiQ2FjaGUuaCIKKyNpbmNsdWRlICJDYWNo
ZWRDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJD
YWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5j
bHVkZSAiQ2FjaGVkU2NyaXB0LmgiCisjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCisjaW5jbHVkZSAi
RG9jTG9hZGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgorCisjaW5jbHVk
ZSAiSFRNTEVudGl0eU5hbWVzLmMiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKyAgICAKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK2NvbnN0IGNo
YXIqIGRlYnVnVVJMKERvY3VtZW50KiBkb2MpCit7CisgICAgU3RyaW5nIHVybCA9IGRvYy0+dXJs
KCk7CisgICAgaWYgKHVybC5sZW5ndGgoKSA+IDYwKSB7CisgICAgICAgIHVybCA9IHVybC5sZWZ0
KDYwKTsKKyAgICAgICAgdXJsICs9ICIuLi4iOworICAgIH0KKyAgICBzdGF0aWMgQ1N0cmluZyBj
OworICAgIGMgPSB1cmwubGF0aW4xKCk7CisgICAgcmV0dXJuIGMuZGF0YSgpOworfQorCisgICAg
CitIVE1MUHJlbG9hZFRva2VuaXplcjo6SFRNTFByZWxvYWRUb2tlbml6ZXIoRG9jdW1lbnQqIGRv
YykKKyAgICA6IG1faW5Qcm9ncmVzcyhmYWxzZSkKKyAgICAsIG1fdGltZVVzZWQoMCkKKyAgICAs
IG1fZG9jKGRvYykKK3sKKyAgICBwcmludGYoIkNSRUFUSU5HIFBSRUxPQUQgVE9LRU5JWkVSICgl
cylcbiIsIGRlYnVnVVJMKG1fZG9jKSk7Cit9CisgICAgCitIVE1MUHJlbG9hZFRva2VuaXplcjo6
fkhUTUxQcmVsb2FkVG9rZW5pemVyKCkKK3sKKyAgICBwcmludGYoIkRFTEVUSU5HIFBSRUxPQUQg
VE9LRU5JWkVSICglcylcbiIsIGRlYnVnVVJMKG1fZG9jKSk7CisgICAgY2xlYXJQcmVsb2Fkcygp
OworICAgIHByaW50ZigiVE9UQUwgVElNRSBVU0VEICUuNGZzXG4iLCBtX3RpbWVVc2VkKTsKK30K
KyAgICAKK3ZvaWQgSFRNTFByZWxvYWRUb2tlbml6ZXI6OmJlZ2luKCkgCit7IAorICAgIC8vL3By
aW50ZigiUFJFTE9BRCBUT0tFTklaRVIgQkVHSU4gKCVzKVxuIiwgZGVidWdVUkwobV9kb2MpKTsK
KyAgICBBU1NFUlQoIW1faW5Qcm9ncmVzcyk7IAorICAgIHJlc2V0KCk7IAorICAgIG1faW5Qcm9n
cmVzcyA9IHRydWU7IAorfQorICAgIAordm9pZCBIVE1MUHJlbG9hZFRva2VuaXplcjo6ZW5kKCkg
Cit7IAorICAgIC8vcHJpbnRmKCJQUkVMT0FEIFRPS0VOSVpFUiBFTkQgKCVzKVxuIiwgZGVidWdV
UkwobV9kb2MpKTsKKyAgICBBU1NFUlQobV9pblByb2dyZXNzKTsgCisgICAgbV9pblByb2dyZXNz
ID0gZmFsc2U7IAorfQorICAgIAordm9pZCBIVE1MUHJlbG9hZFRva2VuaXplcjo6Y2xlYXJQcmVs
b2FkcygpCit7CisgICAgdW5zaWduZWQgc2NyaXB0cyA9IDA7CisgICAgdW5zaWduZWQgc3R5bGVz
aGVldHMgPSAwOworICAgIHVuc2lnbmVkIGltYWdlcyA9IDA7CisgICAgTGlzdEhhc2hTZXQ8Q2Fj
aGVkUmVzb3VyY2UqPjo6aXRlcmF0b3IgZW5kID0gbV9wcmVsb2Fkcy5lbmQoKTsKKyAgICBmb3Ig
KExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj46Oml0ZXJhdG9yIGl0ID0gbV9wcmVsb2Fkcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlcyA9
ICppdDsKKyAgICAgICAgaWYgKCFyZXMtPmhhc0JlZW5SZWZlcmVuY2VkKCkpIHsKKyAgICAgICAg
ICAgIHByaW50ZigiVU5SRUZFUkVOQ0VEIFBSRUxPQUQgJXNcbiIsIHJlcy0+dXJsKCkubGF0aW4x
KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNhY2hlKCktPnJlbW92ZShyZXMpOworICAgICAgICB9
CisgICAgCisgICAgICAgIGlmIChyZXMtPnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0
KQorICAgICAgICAgICAgc2NyaXB0cysrOworICAgICAgICBlbHNlIGlmIChyZXMtPnR5cGUoKSA9
PSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCkKKyAgICAgICAgICAgIHN0eWxlc2hlZXRz
Kys7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGltYWdlcysrOworICAgICAgICAgICAgCisg
ICAgICAgIGlmIChyZXMtPmVycm9yT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIGNhY2hlKCktPnJl
bW92ZShyZXMpOworICAgICAgICAgICAgCisgICAgICAgIHJlcy0+ZGVjcmVhc2VQcmVsb2FkQ291
bnQoKTsKKyAgICB9CisgICAgbV9wcmVsb2Fkcy5jbGVhcigpOworICAgIAorICAgIGlmIChzY3Jp
cHRzKQorICAgICAgICBwcmludGYoIlNDUklQVFM6ICVkXG4iLCBzY3JpcHRzKTsKKyAgICBpZiAo
c3R5bGVzaGVldHMpCisgICAgICAgIHByaW50ZigiU1RZTEVTSEVFVFM6ICVkXG4iLCBzdHlsZXNo
ZWV0cyk7CisgICAgaWYgKGltYWdlcykKKyAgICAgICAgcHJpbnRmKCJJTUFHRVM6ICVkXG4iLCBp
bWFnZXMpOworfQorCit2b2lkIEhUTUxQcmVsb2FkVG9rZW5pemVyOjpyZXNldCgpCit7CisgICAg
bV9zb3VyY2UuY2xlYXIoKTsKKyAgICAKKyAgICBtX3N0YXRlID0gRGF0YTsKKyAgICBtX2VzY2Fw
ZSA9IGZhbHNlOworICAgIG1fY29udGVudE1vZGVsID0gUENEQVRBOworICAgIG1fY29tbWVudFBv
cyA9IDA7CisKKyAgICBtX2Nsb3NlVGFnID0gZmFsc2U7CisgICAgbV90YWdOYW1lLmNsZWFyKCk7
CisgICAgbV9hdHRyaWJ1dGVOYW1lLmNsZWFyKCk7CisgICAgbV9hdHRyaWJ1dGVWYWx1ZS5jbGVh
cigpOworICAgIG1fbGFzdFN0YXJ0VGFnID0gQXRvbWljU3RyaW5nKCk7CisgICAgCisgICAgbV91
cmxUb0xvYWQgPSAiIjsKKyAgICBtX2xpbmtJc1N0eWxlU2hlZXQgPSBmYWxzZTsKKyAgICBtX2xh
c3RDaGFyYWN0ZXJJbmRleCA9IDA7CisgICAgY2xlYXJMYXN0Q2hhcmFjdGVycygpOworICAgIAor
ICAgIG1fY3NzU3RhdGUgPSBDU1NJbml0aWFsOworICAgIG1fY3NzUnVsZS5jbGVhcigpOworICAg
IG1fY3NzUnVsZVZhbHVlLmNsZWFyKCk7Cit9CisgICAgCit2b2lkIEhUTUxQcmVsb2FkVG9rZW5p
emVyOjp3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKK3sKKyAgICBkb3VibGUg
c3RhcnRUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICB0b2tlbml6ZShzb3VyY2UpOworICAgIG1f
dGltZVVzZWQgKz0gY3VycmVudFRpbWUoKSAtIHN0YXJ0VGltZTsKK30KKyAgICAKK3N0YXRpYyBp
bmxpbmUgYm9vbCBpc1doaXRlc3BhY2UoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gYyA9PSAnICcg
fHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJyB8fCBjID09ICdcdCc7Cit9CisgICAgCitpbmxpbmUg
dm9pZCBIVE1MUHJlbG9hZFRva2VuaXplcjo6Y2xlYXJMYXN0Q2hhcmFjdGVycygpCit7CisgICAg
bWVtc2V0KG1fbGFzdENoYXJhY3RlcnMsIDAsIGxhc3RDaGFyYWN0ZXJzQnVmZmVyU2l6ZSAqIHNp
emVvZihVQ2hhcikpOworfQorICAgIAoraW5saW5lIHZvaWQgSFRNTFByZWxvYWRUb2tlbml6ZXI6
OnJlbWVtYmVyQ2hhcmFjdGVyKFVDaGFyIGMpCit7CisgICAgbV9sYXN0Q2hhcmFjdGVySW5kZXgg
PSAobV9sYXN0Q2hhcmFjdGVySW5kZXggKyAxKSAlIGxhc3RDaGFyYWN0ZXJzQnVmZmVyU2l6ZTsK
KyAgICBtX2xhc3RDaGFyYWN0ZXJzW21fbGFzdENoYXJhY3RlckluZGV4XSA9IGM7Cit9CisgICAg
CitpbmxpbmUgYm9vbCBIVE1MUHJlbG9hZFRva2VuaXplcjo6bGFzdENoYXJhY3RlcnNNYXRjaChj
b25zdCBjaGFyKiBjaGFycywgdW5zaWduZWQgY291bnQpIGNvbnN0Cit7CisgICAgdW5zaWduZWQg
cG9zID0gbV9sYXN0Q2hhcmFjdGVySW5kZXg7CisgICAgd2hpbGUgKGNvdW50KSB7CisgICAgICAg
IGlmIChjaGFyc1tjb3VudCAtIDFdICE9IG1fbGFzdENoYXJhY3RlcnNbcG9zXSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLS1jb3VudDsKKyAgICAgICAgaWYgKCFwb3MpCisg
ICAgICAgICAgICBwb3MgPSBsYXN0Q2hhcmFjdGVyc0J1ZmZlclNpemU7CisgICAgICAgIC0tcG9z
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKK3N0YXRpYyBpbmxpbmUgdW5zaWdu
ZWQgbGVnYWxFbnRpdHlGb3IodW5zaWduZWQgdmFsdWUpCit7CisgICAgLy8gRklYTUUgdGhlcmUg
aXMgYSB0YWJsZSBmb3IgbW9yZSBleGNlcHRpb25zIGluIHRoZSBzcGVjCisgICAgaWYgKHZhbHVl
ID09IDAgfHwgdmFsdWUgPiAweDEwRkZGRiB8fCAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9
IDB4REZGRikpCisgICAgICAgIHJldHVybiAweEZGRkQ7CisgICAgcmV0dXJuIHZhbHVlOworfQor
ICAgIAorVUNoYXIgSFRNTFByZWxvYWRUb2tlbml6ZXI6OmNvbnN1bWVFbnRpdHkoU2VnbWVudGVk
U3RyaW5nJiBzb3VyY2UsIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMpCit7CisgICAgZW51bSBF
bnRpdHlTdGF0ZSB7CisgICAgICAgIEluaXRpYWwsCisgICAgICAgIE51bWJlclR5cGUsCisgICAg
ICAgIE1heWJlSGV4LAorICAgICAgICBIZXgsCisgICAgICAgIERlY2ltYWwsCisgICAgICAgIE5h
bWVkCisgICAgfTsKKyAgICBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZSA9IEluaXRpYWw7CisgICAg
dW5zaWduZWQgcmVzdWx0ID0gMDsKKyAgICBWZWN0b3I8VUNoYXIsIDEwPiBzZWVuQ2hhcnM7Cisg
ICAgVmVjdG9yPGNoYXIsIDEwPiBlbnRpdHlOYW1lOworICAgIAorICAgIHdoaWxlICghc291cmNl
LmlzRW1wdHkoKSkgeworICAgICAgICBVQ2hhciBjYyA9ICpzb3VyY2U7CisgICAgICAgIHNlZW5D
aGFycy5hcHBlbmQoY2MpOworICAgICAgICBzd2l0Y2ggKGVudGl0eVN0YXRlKSB7CisgICAgICAg
IGNhc2UgSW5pdGlhbDoKKyAgICAgICAgICAgIGlmIChpc1doaXRlc3BhY2UoY2MpIHx8IGNjID09
ICc8JyB8fCBjYyA9PSAnJicpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoY2MgPT0gJyMnKSAKKyAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9
IE51bWJlclR5cGU7CisgICAgICAgICAgICBlbHNlIGlmICgoY2MgPj0gJ2EnICYmIGNjIDw9ICd6
JykgfHwgKGNjID49ICdBJyAmJiBjYyA8PSAnWicpKSB7CisgICAgICAgICAgICAgICAgZW50aXR5
TmFtZS5hcHBlbmQoY2MpOworICAgICAgICAgICAgICAgIGVudGl0eVN0YXRlID0gTmFtZWQ7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVHlwZToKKyAgICAg
ICAgICAgIGlmIChjYyA9PSAneCcgfHwgY2MgPT0gJ1gnKQorICAgICAgICAgICAgICAgIGVudGl0
eVN0YXRlID0gTWF5YmVIZXg7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA+PSAnMCcgJiYgY2Mg
PD0gJzknKSB7CisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBEZWNpbWFsOworICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IGNjIC0gJzAnOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBzb3VyY2UucHVzaCgnIycpOworICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWF5YmVIZXg6
CisgICAgICAgICAgICBpZiAoY2MgPj0gJzAnICYmIGNjIDw9ICc5JykKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSBjYyAtICcwJzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNjID49ICdhJyAmJiBj
YyA8PSAnZicpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gMTAgKyBjYyAtICdhJzsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGNjID49ICdBJyAmJiBjYyA8PSAnRicpCisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gMTAgKyBjYyAtICdBJzsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIHNvdXJjZS5wdXNoKHNlZW5DaGFyc1sxXSk7CisgICAgICAgICAgICAgICAgc291cmNlLnB1
c2goJyMnKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVudGl0eVN0YXRlID0gSGV4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSGV4OgorICAgICAgICAgICAgaWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpCisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMTYgKyBjYyAtICcwJzsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGNjID49ICdhJyAmJiBjYyA8PSAnZicpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
cmVzdWx0ICogMTYgKyAxMCArIGNjIC0gJ2EnOworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0g
J0EnICYmIGNjIDw9ICdGJykKKyAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxNiAr
IDEwICsgY2MgLSAnQSc7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnOycpIHsKKyAgICAg
ICAgICAgICAgICBzb3VyY2UuYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBsZWdh
bEVudGl0eUZvcihyZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlIAorICAgICAgICAgICAgICAg
IHJldHVybiBsZWdhbEVudGl0eUZvcihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRGVjaW1hbDoKKyAgICAgICAgICAgIGlmIChjYyA+PSAnMCcgJiYgY2MgPD0gJzkn
KQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDEwICsgY2MgLSAnMCc7CisgICAg
ICAgICAgICBlbHNlIGlmIChjYyA9PSAnOycpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UuYWR2
YW5jZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBsZWdhbEVudGl0eUZvcihyZXN1bHQpOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGxlZ2FsRW50aXR5Rm9y
KHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBOYW1lZDoKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGF0dHJpYnV0ZSBvbmx5IHZlcnNp
b24sIGdlbmVyaWMgdmVyc2lvbiBtYXRjaGVzIHNvbWV3aGF0IGRpZmZlcmVudGx5CisgICAgICAg
ICAgICB3aGlsZSAoZW50aXR5TmFtZS5zaXplKCkgPD0gOCkgeworICAgICAgICAgICAgICAgIGlm
IChjYyA9PSAnOycpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgRW50aXR5KiBlbnRpdHkg
PSBmaW5kRW50aXR5KGVudGl0eU5hbWUuZGF0YSgpLCBlbnRpdHlOYW1lLnNpemUoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChlbnRpdHkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNv
dXJjZS5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50aXR5LT5j
b2RlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIShjYyA+PSAnYScgJiYgY2Mg
PD0gJ3onKSAmJiAhKGNjID49ICdBJyAmJiBjYyA8PSAnWicpICYmICEoY2MgPj0gJzAnICYmIGNj
IDw9ICc5JykpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgRW50aXR5KiBlbnRpdHkgPSBm
aW5kRW50aXR5KGVudGl0eU5hbWUuZGF0YSgpLCBlbnRpdHlOYW1lLnNpemUoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChlbnRpdHkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZW50aXR5LT5jb2RlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZW50aXR5TmFtZS5hcHBlbmQoY2MpOworICAgICAgICAgICAg
ICAgIHNvdXJjZS5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0T2ZDaGFyYWN0ZXJzOworICAgICAgICAg
ICAgICAgIGNjID0gKnNvdXJjZTsKKyAgICAgICAgICAgICAgICBzZWVuQ2hhcnMuYXBwZW5kKGNj
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzZWVuQ2hhcnMuc2l6ZSgpID09IDIp
CisgICAgICAgICAgICAgICAgc291cmNlLnB1c2goc2VlbkNoYXJzWzBdKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKHNlZW5DaGFycy5zaXplKCkgPT0gMykgeworICAgICAgICAgICAgICAgIHNvdXJj
ZS5wdXNoKHNlZW5DaGFyc1sxXSk7CisgICAgICAgICAgICAgICAgc291cmNlLnB1c2goc2VlbkNo
YXJzWzBdKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHNvdXJjZS5wcmVw
ZW5kKFNlZ21lbnRlZFN0cmluZyhTdHJpbmcoc2VlbkNoYXJzLmRhdGEoKSwgc2VlbkNoYXJzLnNp
emUoKSAtIDEpKSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBz
b3VyY2UuYWR2YW5jZSgpOworICAgIH0KK291dE9mQ2hhcmFjdGVyczoKKyAgICBub3RFbm91Z2hD
aGFyYWN0ZXJzID0gdHJ1ZTsKKyAgICBzb3VyY2UucHJlcGVuZChTZWdtZW50ZWRTdHJpbmcoU3Ry
aW5nKHNlZW5DaGFycy5kYXRhKCksIHNlZW5DaGFycy5zaXplKCkpKSk7CisgICAgcmV0dXJuIDA7
Cit9CisKK3ZvaWQgSFRNTFByZWxvYWRUb2tlbml6ZXI6OnRva2VuaXplKGNvbnN0IFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlKQoreworICAgIEFTU0VSVChtX2luUHJvZ3Jlc3MpOworICAgIAorICAg
IG1fc291cmNlLmFwcGVuZChzb3VyY2UpOworCisgICAgLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQg
SFRNTDUgVG9rZW5pemVyCisgICAgd2hpbGUgKCFtX3NvdXJjZS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgVUNoYXIgY2MgPSAqbV9zb3VyY2U7CisgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAg
ICAgICBjYXNlIERhdGE6CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAg
IHJlbWVtYmVyQ2hhcmFjdGVyKGNjKTsKKyAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJyYnKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2NvbnRlbnRNb2RlbCA9PSBQQ0RBVEEgfHwgbV9j
b250ZW50TW9kZWwgPT0gUkNEQVRBKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRl
ID0gRW50aXR5RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnLScpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKChtX2NvbnRlbnRNb2RlbCA9PSBSQ0RBVEEgfHwgbV9jb250
ZW50TW9kZWwgPT0gQ0RBVEEpICYmICFtX2VzY2FwZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGxhc3RDaGFyYWN0ZXJzTWF0Y2goIjwhLS0iLCA0KSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2VzY2FwZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGNjID09ICc8JykgeworICAgICAgICAgICAgICAgICAgICBp
ZiAobV9jb250ZW50TW9kZWwgPT0gUENEQVRBIHx8ICgobV9jb250ZW50TW9kZWwgPT0gUkNEQVRB
IHx8IG1fY29udGVudE1vZGVsID09IENEQVRBKSAmJiAhbV9lc2NhcGUpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlID0gVGFnT3BlbjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChjYyA9PSAnPicpIHsKKyAgICAgICAgICAgICAgICAgICAgIGlmICgobV9jb250ZW50TW9kZWwg
PT0gUkNEQVRBIHx8IG1fY29udGVudE1vZGVsID09IENEQVRBKSAmJiBtX2VzY2FwZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0Q2hhcmFjdGVyc01hdGNoKCItLT4iLCAzKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lc2NhcGUgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW1pdENo
YXJhY3RlcihjYyk7CisgICAgICAgICAgICAgICAgbV9zb3VyY2UuYWR2YW5jZSgpOworICAgICAg
ICAgICAgICAgIGlmIChtX3NvdXJjZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgY2MgPSAqbV9zb3VyY2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbnRpdHlEYXRhOgorICAgICAgICAgICAg
Ly8gc2hvdWxkIHRyeSB0byBjb25zdW1lIHRoZSBlbnRpdHkgYnV0IHdlIGRvbid0IGNhcmUKKyAg
ICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVGFnT3BlbjoKKyAgICAgICAgICAgIGlmIChtX2NvbnRlbnRNb2RlbCA9PSBSQ0RBVEEgfHwg
bV9jb250ZW50TW9kZWwgPT0gQ0RBVEEpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJy8n
KQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gQ2xvc2VUYWdPcGVuOworICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSBlbHNlIGlmIChtX2NvbnRlbnRNb2RlbCA9PSBQQ0RBVEEpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoY2MgPT0gJyEnKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gTWFya3VwRGVjbGFy
YXRpb25PcGVuOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICcvJykKKyAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZSA9IENsb3NlVGFnT3BlbjsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChjYyA+PSAnQScgJiYgY2MgPD0gJ1onKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdGFn
TmFtZS5jbGVhcigpOworICAgICAgICAgICAgICAgICAgICBtX3RhZ05hbWUuYXBwZW5kKGNjICsg
MHgyMCk7CisgICAgICAgICAgICAgICAgICAgIG1fY2xvc2VUYWcgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZSA9IFRhZ05hbWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChjYyA+PSAnYScgJiYgY2MgPD0gJ3onKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdGFnTmFt
ZS5jbGVhcigpOworICAgICAgICAgICAgICAgICAgICBtX3RhZ05hbWUuYXBwZW5kKGNjKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9jbG9zZVRhZyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICBtX3N0YXRlID0gVGFnTmFtZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNjID09ICc+
JykgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGNjID09ICc/JykgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0g
Qm9ndXNDb21tZW50OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBDbG9zZVRhZ09wZW46CisgICAgICAgICAgICBpZiAobV9jb250ZW50TW9kZWwgPT0gUkNE
QVRBIHx8IG1fY29udGVudE1vZGVsID09IENEQVRBKSB7CisgICAgICAgICAgICAgICAgaWYgKCFt
X2xhc3RTdGFydFRhZy5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0g
RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmIChtX3NvdXJjZS5sZW5ndGgoKSA8IG1fbGFzdFN0YXJ0VGFnLmxl
bmd0aCgpICsgMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IFZlY3RvcjxVQ2hhcj4gdG1wU3RyaW5nOworICAgICAgICAgICAgICAgIFVDaGFyIHRtcENoYXI7
CisgICAgICAgICAgICAgICAgYm9vbCBtYXRjaCA9IHRydWU7CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBuID0gMDsgbiA8IG1fbGFzdFN0YXJ0VGFnLmxlbmd0aCgpICsgMTsgbisrKSB7
CisgICAgICAgICAgICAgICAgICAgIHRtcENoYXIgPSB1X3RvbG93ZXIoKm1fc291cmNlKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG4gPCBtX2xhc3RTdGFydFRhZy5sZW5ndGgoKSAmJiB0bXBD
aGFyICE9IG1fbGFzdFN0YXJ0VGFnW25dKQorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2gg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgdG1wU3RyaW5nLmFwcGVuZCh0bXBDaGFyKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9zb3VyY2UuYWR2YW5jZSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBtX3NvdXJjZS5wcmVwZW5kKFNlZ21lbnRlZFN0cmluZyhTdHJp
bmcodG1wU3RyaW5nLmRhdGEoKSwgdG1wU3RyaW5nLnNpemUoKSkpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIW1hdGNoIHx8ICghaXNXaGl0ZXNwYWNlKHRtcENoYXIpICYmIHRtcENoYXIgIT0gJz4n
ICYgdG1wQ2hhciAhPSAnLycpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRh
OworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2MgPj0gJ0EnICYmIGNjIDw9ICdaJykgeworICAg
ICAgICAgICAgICAgIG1fdGFnTmFtZS5jbGVhcigpOworICAgICAgICAgICAgICAgIG1fdGFnTmFt
ZS5hcHBlbmQoY2MgKyAweDIwKTsKKyAgICAgICAgICAgICAgICBtX2Nsb3NlVGFnID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBtX3N0YXRlID0gVGFnTmFtZTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoY2MgPj0gJ2EnICYmIGNjIDw9ICd6JykgeworICAgICAgICAgICAgICAgIG1fdGFnTmFtZS5j
bGVhcigpOworICAgICAgICAgICAgICAgIG1fdGFnTmFtZS5hcHBlbmQoY2MpOworICAgICAgICAg
ICAgICAgIG1fY2xvc2VUYWcgPSB0cnVlOworICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBUYWdO
YW1lOworICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnPicpIHsKKyAgICAgICAgICAgICAg
ICBtX3N0YXRlID0gRGF0YTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1f
c3RhdGUgPSBCb2d1c0NvbW1lbnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBU
YWdOYW1lOgorICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNX
aGl0ZXNwYWNlKGNjKSkgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gQmVmb3JlQXR0
cmlidXRlTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnPicpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZW1pdFRhZygpOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
IChjYyA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEJlZm9yZUF0dHJp
YnV0ZU5hbWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAoY2MgPj0gJ0EnICYmIGNjIDw9ICdaJykKKyAgICAgICAgICAg
ICAgICAgICAgbV90YWdOYW1lLmFwcGVuZChjYyArIDB4MjApOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgbV90YWdOYW1lLmFwcGVuZChjYyk7CisgICAgICAgICAg
ICAgICAgbV9zb3VyY2UuYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIGlmIChtX3NvdXJjZS5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBj
YyA9ICptX3NvdXJjZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEJlZm9yZUF0dHJpYnV0ZU5hbWU6CisgICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNl
KGNjKSkKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnPicp
IHsKKyAgICAgICAgICAgICAgICBlbWl0VGFnKCk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9
IERhdGE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNjID49ICdBJyAmJiBjYyA8PSAnWicpIHsK
KyAgICAgICAgICAgICAgICBtX2F0dHJpYnV0ZU5hbWUuY2xlYXIoKTsKKyAgICAgICAgICAgICAg
ICBtX2F0dHJpYnV0ZVZhbHVlLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVO
YW1lLmFwcGVuZChjYyArIDB4MjApOworICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBBdHRyaWJ1
dGVOYW1lOworICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnLycpCisgICAgICAgICAgICAg
ICAgOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVOYW1l
LmNsZWFyKCk7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVWYWx1ZS5jbGVhcigpOworICAg
ICAgICAgICAgICAgIG1fYXR0cmlidXRlTmFtZS5hcHBlbmQoY2MpOworICAgICAgICAgICAgICAg
IG1fc3RhdGUgPSBBdHRyaWJ1dGVOYW1lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQXR0cmlidXRlTmFtZToKKyAgICAgICAgICAgIHdoaWxlICgxKSB7
CisgICAgICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjYykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbV9zdGF0ZSA9IEFmdGVyQXR0cmlidXRlTmFtZTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnPScp
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEJlZm9yZUF0dHJpYnV0ZVZhbHVlOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKGNjID09ICc+JykgeworICAgICAgICAgICAgICAgICAgICBlbWl0VGFnKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnLycp
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEJlZm9yZUF0dHJpYnV0ZU5hbWU7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoY2MgPj0gJ0EnICYmIGNjIDw9ICdaJykKKyAgICAgICAgICAgICAgICAgICAgbV9h
dHRyaWJ1dGVOYW1lLmFwcGVuZChjYyArIDB4MjApOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVOYW1lLmFwcGVuZChjYyk7CisgICAgICAgICAg
ICAgICAgbV9zb3VyY2UuYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIGlmIChtX3NvdXJjZS5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBj
YyA9ICptX3NvdXJjZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFmdGVyQXR0cmlidXRlTmFtZToKKyAgICAgICAgICAgIGlmIChpc1doaXRlc3BhY2Uo
Y2MpKQorICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc9JykK
KyAgICAgICAgICAgICAgICBtX3N0YXRlID0gQmVmb3JlQXR0cmlidXRlVmFsdWU7IAorICAgICAg
ICAgICAgZWxzZSBpZiAoY2MgPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgZW1pdFRhZygpOwor
ICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgfSBlbHNlIGlmIChj
YyA+PSAnQScgJiYgY2MgPD0gJ1onKSB7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVOYW1l
LmNsZWFyKCk7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVWYWx1ZS5jbGVhcigpOworICAg
ICAgICAgICAgICAgIG1fYXR0cmlidXRlTmFtZS5hcHBlbmQoY2MgKyAweDIwKTsKKyAgICAgICAg
ICAgICAgICBtX3N0YXRlID0gQXR0cmlidXRlTmFtZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
Y2MgPT0gJy8nKQorICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBCZWZvcmVBdHRyaWJ1dGVOYW1l
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVOYW1lLmNs
ZWFyKCk7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVWYWx1ZS5jbGVhcigpOworICAgICAg
ICAgICAgICAgIG1fYXR0cmlidXRlTmFtZS5hcHBlbmQoY2MpOworICAgICAgICAgICAgICAgIG1f
c3RhdGUgPSBBdHRyaWJ1dGVOYW1lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQmVmb3JlQXR0cmlidXRlVmFsdWU6CisgICAgICAgICAgICBpZiAoaXNX
aGl0ZXNwYWNlKGNjKSkKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlIGlmIChj
YyA9PSAnIicpCisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEF0dHJpYnV0ZVZhbHVlRG91Ymxl
UXVvdGVkOworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPT0gJyYnKSB7CisgICAgICAgICAgICAg
ICAgbV9zdGF0ZSA9IEF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQ7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNjID09ICdcJycpCisgICAgICAgICAgICAg
ICAgbV9zdGF0ZSA9IEF0dHJpYnV0ZVZhbHVlU2luZ2xlUXVvdGVkOworICAgICAgICAgICAgZWxz
ZSBpZiAoY2MgPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgZW1pdFRhZygpOworICAgICAgICAg
ICAgICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBtX2F0dHJpYnV0ZVZhbHVlLmFwcGVuZChjYyk7CisgICAgICAgICAgICAgICAgbV9zdGF0
ZSA9IEF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBBdHRyaWJ1dGVWYWx1ZURvdWJsZVF1b3RlZDoKKyAgICAgICAg
ICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgaWYgKGNjID09ICciJykgeworICAgICAg
ICAgICAgICAgICAgICBwcm9jZXNzQXR0cmlidXRlKCk7CisgICAgICAgICAgICAgICAgICAgIG1f
c3RhdGUgPSBCZWZvcmVBdHRyaWJ1dGVOYW1lOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNjID09ICcmJykgeworICAg
ICAgICAgICAgICAgICAgICBtX3N0YXRlQmVmb3JlRW50aXR5SW5BdHRyaWJ1dGVWYWx1ZSA9IG1f
c3RhdGU7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBFbnRpdHlJbkF0dHJpYnV0ZVZh
bHVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IAorICAg
ICAgICAgICAgICAgIG1fYXR0cmlidXRlVmFsdWUuYXBwZW5kKGNjKTsKKyAgICAgICAgICAgICAg
ICBtX3NvdXJjZS5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgaWYgKG1fc291cmNlLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGNjID0g
Km1fc291cmNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQXR0cmlidXRlVmFsdWVTaW5nbGVRdW90ZWQ6CisgICAgICAgICAgICB3aGlsZSAoMSkgewor
ICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnXCcnKSB7CisgICAgICAgICAgICAgICAgICAgIHBy
b2Nlc3NBdHRyaWJ1dGUoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEJlZm9yZUF0
dHJpYnV0ZU5hbWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJyYnKSB7CisgICAgICAgICAgICAgICAgICAg
IG1fc3RhdGVCZWZvcmVFbnRpdHlJbkF0dHJpYnV0ZVZhbHVlID0gbV9zdGF0ZTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZSA9IEVudGl0eUluQXR0cmlidXRlVmFsdWU7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgbV9h
dHRyaWJ1dGVWYWx1ZS5hcHBlbmQoY2MpOworICAgICAgICAgICAgICAgIG1fc291cmNlLmFkdmFu
Y2UoKTsKKyAgICAgICAgICAgICAgICBpZiAobV9zb3VyY2UuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY2MgPSAqbV9zb3VyY2U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBdHRyaWJ1dGVWYWx1
ZVVucXVvdGVkOgorICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBpZiAo
aXNXaGl0ZXNwYWNlKGNjKSkgeworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0cmlidXRl
KCk7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBCZWZvcmVBdHRyaWJ1dGVOYW1lOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKGNjID09ICcmJykgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQmVmb3Jl
RW50aXR5SW5BdHRyaWJ1dGVWYWx1ZSA9IG1fc3RhdGU7CisgICAgICAgICAgICAgICAgICAgIG1f
c3RhdGUgPSBFbnRpdHlJbkF0dHJpYnV0ZVZhbHVlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNjID09ICc+Jykgewor
ICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0cmlidXRlKCk7CisgICAgICAgICAgICAgICAg
ICAgIGVtaXRUYWcoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBtX2F0dHJpYnV0ZVZhbHVlLmFwcGVuZChjYyk7CisgICAgICAgICAgICAgICAgbV9zb3VyY2Uu
YWR2YW5jZSgpOworICAgICAgICAgICAgICAgIGlmIChtX3NvdXJjZS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjYyA9ICptX3NvdXJjZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVudGl0eUlu
QXR0cmlidXRlVmFsdWU6IAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgbm90
RW5vdWdoQ2hhcmFjdGVycyA9IGZhbHNlOyAKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBlbnRp
dHkgPSBjb25zdW1lRW50aXR5KG1fc291cmNlLCBub3RFbm91Z2hDaGFyYWN0ZXJzKTsKKyAgICAg
ICAgICAgICAgICBpZiAobm90RW5vdWdoQ2hhcmFjdGVycykKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIGlmIChlbnRpdHkgPiAweEZGRkYpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbV9hdHRyaWJ1dGVWYWx1ZS5hcHBlbmQoVTE2X0xFQUQoZW50aXR5KSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlVmFsdWUuYXBwZW5kKFUxNl9UUkFJTChlbnRp
dHkpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVudGl0eSkKKyAgICAgICAgICAgICAg
ICAgICAgbV9hdHRyaWJ1dGVWYWx1ZS5hcHBlbmQoZW50aXR5KTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlVmFsdWUuYXBwZW5kKCcmJyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBtX3N0YXRlID0gbV9zdGF0ZUJlZm9yZUVudGl0eUlu
QXR0cmlidXRlVmFsdWU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBCb2d1
c0NvbW1lbnQ6CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIGlmIChj
YyA9PSAnPicpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBt
X3NvdXJjZS5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgaWYgKG1fc291cmNlLmlzRW1wdHko
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGNjID0gKm1f
c291cmNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
TWFya3VwRGVjbGFyYXRpb25PcGVuOiB7CisgICAgICAgICAgICBpZiAoY2MgPT0gJy0nKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG1fc291cmNlLmxlbmd0aCgpIDwgMikKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIG1fc291cmNlLmFkdmFuY2UoKTsKKyAgICAg
ICAgICAgICAgICBjYyA9ICptX3NvdXJjZTsKKyAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJy0n
KQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gQ29tbWVudFN0YXJ0OworICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gQm9ndXNDb21tZW50
OworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAvL30gZWxzZSBpZiAoY2MgPT0gJ0QnKSB7CisgICAgICAgICAgICAgICAgLy8gZW50
ZXIgRE9DVFlQRSBzdGF0ZQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBt
X3N0YXRlID0gQm9ndXNDb21tZW50OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb21t
ZW50U3RhcnQ6CisgICAgICAgICAgICBpZiAoY2MgPT0gJy0nKQorICAgICAgICAgICAgICAgIG1f
c3RhdGUgPSBDb21tZW50U3RhcnREYXNoOworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPT0gJz4n
KQorICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIG1fc3RhdGUgPSBDb21tZW50OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ29tbWVudFN0YXJ0RGFzaDoKKyAgICAgICAgICAgIGlmIChjYyA9PSAnLScpCisg
ICAgICAgICAgICAgICAgbV9zdGF0ZSA9IENvbW1lbnRFbmQ7CisgICAgICAgICAgICBlbHNlIGlm
IChjYyA9PSAnPicpCisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IENvbW1lbnQ7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb21tZW50OgorICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoY2MgPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgICAgIG1fc3Rh
dGUgPSBDb21tZW50RW5kRGFzaDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fc291cmNlLmFkdmFuY2UoKTsKKyAgICAgICAg
ICAgICAgICBpZiAobV9zb3VyY2UuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgY2MgPSAqbV9zb3VyY2U7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb21tZW50RW5kRGFzaDoKKyAgICAgICAgICAg
IGlmIChjYyA9PSAnLScpCisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IENvbW1lbnRFbmQ7Cisg
ICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBDb21tZW50OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29tbWVudEVuZDoKKyAgICAgICAgICAgIGlm
IChjYyA9PSAnPicpCisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7CisgICAgICAgICAg
ICBlbHNlIGlmIChjYyA9PSAnLScpCisgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgZWxz
ZSAKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gQ29tbWVudDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIG1fc291cmNlLmFkdmFuY2UoKTsKKyAgICB9Cit9CisgICAg
Cit2b2lkIEhUTUxQcmVsb2FkVG9rZW5pemVyOjpwcm9jZXNzQXR0cmlidXRlKCkKK3sKKyAgICBB
dG9taWNTdHJpbmcgdGFnID0gQXRvbWljU3RyaW5nKG1fdGFnTmFtZS5kYXRhKCksIG1fdGFnTmFt
ZS5zaXplKCkpOworICAgIEF0b21pY1N0cmluZyBhdHRyaWJ1dGUgPSBBdG9taWNTdHJpbmcobV9h
dHRyaWJ1dGVOYW1lLmRhdGEoKSwgbV9hdHRyaWJ1dGVOYW1lLnNpemUoKSk7CisgICAgCisgICAg
U3RyaW5nIHZhbHVlKG1fYXR0cmlidXRlVmFsdWUuZGF0YSgpLCBtX2F0dHJpYnV0ZVZhbHVlLnNp
emUoKSk7CisgICAgaWYgKHRhZyA9PSBzY3JpcHRUYWcgfHwgdGFnID09IGltZ1RhZykgeworICAg
ICAgICBpZiAoYXR0cmlidXRlID09IHNyY0F0dHIgJiYgbV91cmxUb0xvYWQuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgbV91cmxUb0xvYWQgPSBwYXJzZVVSTCh2YWx1ZSk7CisgICAgfSBlbHNlIGlm
ICh0YWcgPT0gbGlua1RhZykgeworICAgICAgICBpZiAoYXR0cmlidXRlID09IGhyZWZBdHRyICYm
IG1fdXJsVG9Mb2FkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fdXJsVG9Mb2FkID0gcGFyc2VV
UkwodmFsdWUpOworICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGUgPT0gcmVsQXR0cikgeworICAg
ICAgICAgICAgYm9vbCBzdHlsZVNoZWV0ID0gZmFsc2U7CisgICAgICAgICAgICBib29sIGFsdGVy
bmF0ZSA9IGZhbHNlOworICAgICAgICAgICAgYm9vbCBpY29uID0gZmFsc2U7CisgICAgICAgICAg
ICBIVE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmlidXRlKHZhbHVlLCBzdHlsZVNoZWV0
LCBhbHRlcm5hdGUsIGljb24pOworICAgICAgICAgICAgbV9saW5rSXNTdHlsZVNoZWV0ID0gc3R5
bGVTaGVldCAmJiAhYWx0ZXJuYXRlICYmICFpY29uOworICAgICAgICB9CisgICAgfQorfQorICAg
IAoraW5saW5lIHZvaWQgSFRNTFByZWxvYWRUb2tlbml6ZXI6OmVtaXRDaGFyYWN0ZXIoVUNoYXIg
YykKK3sKKyAgICBpZiAobV9jb250ZW50TW9kZWwgPT0gQ0RBVEEgJiYgbV9sYXN0U3RhcnRUYWcg
PT0gc3R5bGVUYWcpIAorICAgICAgICB0b2tlbml6ZUNTUyhjKTsKK30KKyAgICAKK2lubGluZSB2
b2lkIEhUTUxQcmVsb2FkVG9rZW5pemVyOjp0b2tlbml6ZUNTUyhVQ2hhciBjKQoreyAgICAKKyAg
ICAvLyBXZSBhcmUganVzdCBpbnRlcmVzdGVkIGluIEBpbXBvcnQgcnVsZXMsIG5vIG5lZWQgZm9y
IHJlYWwgdG9rZW5pemF0aW9uIGhlcmUKKyAgICAvLyBTZWFyY2hpbmcgZm9yIG90aGVyIHR5cGVz
IG9mIHJlc291cmNlcyBpcyBwcm9iYWJseSBsb3cgcGF5b2ZmCisgICAgc3dpdGNoIChtX2Nzc1N0
YXRlKSB7CisgICAgY2FzZSBDU1NJbml0aWFsOgorICAgICAgICBpZiAoYyA9PSAnQCcpCisgICAg
ICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTUnVsZVN0YXJ0OworICAgICAgICBlbHNlIGlmIChjID09
ICcvJykKKyAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NNYXliZUNvbW1lbnQ7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ1NTTWF5YmVDb21tZW50OgorICAgICAgICBpZiAoYyA9PSAnKicp
CisgICAgICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTQ29tbWVudDsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbV9jc3NTdGF0ZSA9IENTU0luaXRpYWw7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ1NTQ29tbWVudDoKKyAgICAgICAgaWYgKGMgPT0gJyonKQorICAgICAgICAgICAgbV9jc3NT
dGF0ZSA9IENTU01heWJlQ29tbWVudEVuZDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NN
YXliZUNvbW1lbnRFbmQ6CisgICAgICAgIGlmIChjID09ICcvJykKKyAgICAgICAgICAgIG1fY3Nz
U3RhdGUgPSBDU1NJbml0aWFsOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Nzc1N0YXRl
ID0gQ1NTQ29tbWVudDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NSdWxlU3RhcnQ6Cisg
ICAgICAgIGlmICgoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8IChjID49ICdhJyAmJiBjIDw9ICd6
JykpIHsKKyAgICAgICAgICAgIG1fY3NzUnVsZS5jbGVhcigpOworICAgICAgICAgICAgbV9jc3NS
dWxlVmFsdWUuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fY3NzUnVsZS5hcHBlbmQoYyk7CisgICAg
ICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTUnVsZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBtX2Nzc1N0YXRlID0gQ1NTSW5pdGlhbDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NS
dWxlOgorICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGMpKQorICAgICAgICAgICAgbV9jc3NTdGF0
ZSA9IENTU0FmdGVyUnVsZTsKKyAgICAgICAgZWxzZSBpZiAoYyA9PSAnOycpCisgICAgICAgICAg
ICBtX2Nzc1N0YXRlID0gQ1NTSW5pdGlhbDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9j
c3NSdWxlLmFwcGVuZChjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NBZnRlclJ1bGU6
CisgICAgICAgIGlmIChpc1doaXRlc3BhY2UoYykpCisgICAgICAgICAgICA7CisgICAgICAgIGVs
c2UgaWYgKGMgPT0gJzsnKQorICAgICAgICAgICAgbV9jc3NTdGF0ZSA9IENTU0luaXRpYWw7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9jc3NTdGF0ZSA9IENTU1J1bGVWYWx1ZTsKKyAg
ICAgICAgICAgIG1fY3NzUnVsZVZhbHVlLmFwcGVuZChjKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENTU1J1bGVWYWx1ZToKKyAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShj
KSkKKyAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NBZmVyUnVsZVZhbHVlOworICAgICAgICBl
bHNlIGlmIChjID09ICc7JykgeworICAgICAgICAgICAgZW1pdENTU1J1bGUoKTsKKyAgICAgICAg
ICAgIG1fY3NzU3RhdGUgPSBDU1NJbml0aWFsOworICAgICAgICB9IGVsc2UgCisgICAgICAgICAg
ICBtX2Nzc1J1bGVWYWx1ZS5hcHBlbmQoYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NT
QWZlclJ1bGVWYWx1ZToKKyAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjKSkKKyAgICAgICAgICAg
IDsKKyAgICAgICAgZWxzZSBpZiAoYyA9PSAnOycpIHsKKyAgICAgICAgICAgIGVtaXRDU1NSdWxl
KCk7CisgICAgICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTSW5pdGlhbDsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIEZJWE1FIG1lZGlhIHJ1bGVzCisgICAgICAgICAgICAgbV9jc3NT
dGF0ZSA9IENTU0luaXRpYWw7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
ICAgIAordm9pZCBIVE1MUHJlbG9hZFRva2VuaXplcjo6ZW1pdFRhZygpCit7CisgICAgCisgICAg
aWYgKG1fY2xvc2VUYWcpIHsKKyAgICAgICAgbV9jb250ZW50TW9kZWwgPSBQQ0RBVEE7CisgICAg
ICAgIG1fY3NzU3RhdGUgPSBDU1NJbml0aWFsOworICAgICAgICBjbGVhckxhc3RDaGFyYWN0ZXJz
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQXRvbWljU3RyaW5nIHRhZyht
X3RhZ05hbWUuZGF0YSgpLCBtX3RhZ05hbWUuc2l6ZSgpKTsKKyAgICAKKyAgICBtX2xhc3RTdGFy
dFRhZyA9IHRhZzsKKyAgICAKKyAgICBpZiAodGFnID09IHRleHRhcmVhVGFnIHx8IHRhZyA9PSB0
aXRsZVRhZykKKyAgICAgICAgbV9jb250ZW50TW9kZWwgPSBSQ0RBVEE7CisgICAgZWxzZSBpZiAo
dGFnID09IHN0eWxlVGFnIHx8IHRhZyA9PSB4bXBUYWcgfHwgdGFnID09IHNjcmlwdFRhZyB8fCB0
YWcgPT0gaWZyYW1lVGFnIHx8IHRhZyA9PSBub2VtYmVkVGFnIHx8IHRhZyA9PSBub2ZyYW1lc1Rh
ZykKKyAgICAgICAgbV9jb250ZW50TW9kZWwgPSBDREFUQTsKKyAgICBlbHNlIGlmICh0YWcgPT0g
bm9zY3JpcHRUYWcpCisgICAgICAgIC8vIHdlIHdvdWxkbid0IGJlIGhlcmUgaWYgc2NyaXB0cyB3
ZXJlIGRpc2FibGVkCisgICAgICAgIG1fY29udGVudE1vZGVsID0gQ0RBVEE7CisgICAgZWxzZSBp
ZiAodGFnID09IHBsYWludGV4dFRhZykKKyAgICAgICAgbV9jb250ZW50TW9kZWwgPSBQTEFJTlRF
WFQ7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRlbnRNb2RlbCA9IFBDREFUQTsKKyAgICAKKyAg
ICBpZiAoIW1fdXJsVG9Mb2FkLmlzRW1wdHkoKSkgeworICAgICAgICBDYWNoZWRSZXNvdXJjZSog
cmVzb3VyY2UgPSAwOworICAgICAgICAKKyAgICAgICAgaWYgKHRhZyA9PSBzY3JpcHRUYWcpCisg
ICAgICAgICAgICByZXNvdXJjZSA9IG1fZG9jLT5kb2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdCht
X3VybFRvTG9hZCwgbV9kb2MtPmZyYW1lKCktPmxvYWRlcigpLT5lbmNvZGluZygpKTsgCisgICAg
ICAgIGVsc2UgaWYgKHRhZyA9PSBpbWdUYWcpIAorICAgICAgICAgICAgcmVzb3VyY2UgPSBtX2Rv
Yy0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShtX3VybFRvTG9hZCk7CisgICAgICAgIGVsc2Ug
aWYgKHRhZyA9PSBsaW5rVGFnICYmIG1fbGlua0lzU3R5bGVTaGVldCkgCisgICAgICAgICAgICBy
ZXNvdXJjZSA9IG1fZG9jLT5kb2NMb2FkZXIoKS0+cmVxdWVzdENTU1N0eWxlU2hlZXQobV91cmxU
b0xvYWQsIG1fZG9jLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKSk7CisgICAgICAgIHJl
Z2lzdGVyUHJlbG9hZChyZXNvdXJjZSk7CisgICAgfQorICAgICAgICAKKyAgICBtX3VybFRvTG9h
ZCA9ICIiOworICAgIG1fbGlua0lzU3R5bGVTaGVldCA9IGZhbHNlOworfQorICAgIAordm9pZCBI
VE1MUHJlbG9hZFRva2VuaXplcjo6ZW1pdENTU1J1bGUoKQoreworICAgIFN0cmluZyBydWxlKG1f
Y3NzUnVsZS5kYXRhKCksIG1fY3NzUnVsZS5zaXplKCkpOworICAgIGlmIChydWxlLmxvd2VyKCkg
PT0gImltcG9ydCIgJiYgIW1fY3NzUnVsZVZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICBTdHJp
bmcgdmFsdWUobV9jc3NSdWxlVmFsdWUuZGF0YSgpLCBtX2Nzc1J1bGVWYWx1ZS5zaXplKCkpOwor
ICAgICAgICBTdHJpbmcgdXJsID0gcGFyc2VVUkwodmFsdWUpOworICAgICAgICBpZiAoIXVybC5p
c0VtcHR5KCkpCisgICAgICAgICAgICByZWdpc3RlclByZWxvYWQobV9kb2MtPmRvY0xvYWRlcigp
LT5yZXF1ZXN0Q1NTU3R5bGVTaGVldCh1cmwsIG1fZG9jLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZW5j
b2RpbmcoKSkpOworLy8gICAgICAgIHByaW50ZigiQElNUE9SVCAlc1xuIiwgdXJsLmxhdGluMSgp
LmRhdGEoKSk7CisgICAgfQorICAgIG1fY3NzUnVsZS5jbGVhcigpOworICAgIG1fY3NzUnVsZVZh
bHVlLmNsZWFyKCk7Cit9CisgICAgCit2b2lkIEhUTUxQcmVsb2FkVG9rZW5pemVyOjpyZWdpc3Rl
clByZWxvYWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQoreworICAgIGlmICghcmVzb3VyY2Ug
fHwgcmVzb3VyY2UtPmlzTG9hZGVkKCkgfHwgbV9wcmVsb2Fkcy5jb250YWlucyhyZXNvdXJjZSkp
CisgICAgICAgIHJldHVybjsKKyAgICByZXNvdXJjZS0+aW5jcmVhc2VQcmVsb2FkQ291bnQoKTsK
KyAgICBtX3ByZWxvYWRzLmFkZChyZXNvdXJjZSk7CisvLyAgICBwcmludGYoIlBSRUxPQURJTkcg
JXNcbiIsICByZXNvdXJjZS0+dXJsKCkubGF0aW4xKCkuZGF0YSgpKTsKK30KKworICAgICAgICAg
ICAgICAgIAorfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQcmVsb2FkVG9rZW5pemVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQcmVsb2FkVG9rZW5pemVyLmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL2h0bWwvSFRNTFByZWxvYWRUb2tlbml6ZXIuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBIVE1MUHJlbG9hZFRva2VuaXplcl9oCisjZGVm
aW5lIEhUTUxQcmVsb2FkVG9rZW5pemVyX2gKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgi
CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIGNsYXNzIENhY2hlZFJlc291cmNlOworICAg
IGNsYXNzIENhY2hlZFJlc291cmNlQ2xpZW50OworICAgIGNsYXNzIERvY3VtZW50OworICAgIAor
ICAgIGNsYXNzIEhUTUxQcmVsb2FkVG9rZW5pemVyIDogTm9uY29weWFibGUKKyAgICB7CisgICAg
cHVibGljOgorICAgICAgICBIVE1MUHJlbG9hZFRva2VuaXplcihEb2N1bWVudCogZG9jKTsKKyAg
ICAgICAgfkhUTUxQcmVsb2FkVG9rZW5pemVyKCk7CisgICAgICAgIHZvaWQgd3JpdGUoY29uc3Qg
U2VnbWVudGVkU3RyaW5nJik7CisgICAgICAgIHZvaWQgYmVnaW4oKTsKKyAgICAgICAgdm9pZCBl
bmQoKTsKKyAgICAgICAgYm9vbCBpblByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9pblByb2dy
ZXNzOyB9CisgICAgICAgIHZvaWQgY2xlYXJQcmVsb2FkcygpOworICAgICAgICAKKyAgICAgICAg
c3RhdGljIFVDaGFyIGNvbnN1bWVFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiwgYm9vbCYgbm90RW5v
dWdoQ2hhcmFjdGVycyk7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgdG9r
ZW5pemUoY29uc3QgU2VnbWVudGVkU3RyaW5nJik7CisgICAgICAgIHZvaWQgcmVzZXQoKTsKKyAg
ICAgICAgCisgICAgICAgIHZvaWQgZW1pdFRhZygpOworICAgICAgICB2b2lkIGVtaXRDaGFyYWN0
ZXIoVUNoYXIgYyk7CisgICAgICAgIAorICAgICAgICB2b2lkIHRva2VuaXplQ1NTKFVDaGFyIGMp
OworICAgICAgICB2b2lkIGVtaXRDU1NSdWxlKCk7CisgICAgICAgIAorICAgICAgICB2b2lkIHBy
b2Nlc3NBdHRyaWJ1dGUoKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcmVnaXN0ZXJQcmVsb2Fk
KENhY2hlZFJlc291cmNlKiByZXNvdXJjZSk7CisgICAgICAgIAorICAgICAgICB2b2lkIGNsZWFy
TGFzdENoYXJhY3RlcnMoKTsKKyAgICAgICAgdm9pZCByZW1lbWJlckNoYXJhY3RlcihVQ2hhcik7
CisgICAgICAgIGJvb2wgbGFzdENoYXJhY3RlcnNNYXRjaChjb25zdCBjaGFyKiwgdW5zaWduZWQg
Y291bnQpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgYm9vbCBtX2luUHJvZ3Jlc3M7CisgICAg
ICAgIFNlZ21lbnRlZFN0cmluZyBtX3NvdXJjZTsKKyAgICAgICAgCisgICAgICAgIGVudW0gU3Rh
dGUgeworICAgICAgICAgICAgRGF0YSwKKyAgICAgICAgICAgIEVudGl0eURhdGEsCisgICAgICAg
ICAgICBUYWdPcGVuLAorICAgICAgICAgICAgQ2xvc2VUYWdPcGVuLAorICAgICAgICAgICAgVGFn
TmFtZSwKKyAgICAgICAgICAgIEJlZm9yZUF0dHJpYnV0ZU5hbWUsCisgICAgICAgICAgICBBdHRy
aWJ1dGVOYW1lLAorICAgICAgICAgICAgQWZ0ZXJBdHRyaWJ1dGVOYW1lLAorICAgICAgICAgICAg
QmVmb3JlQXR0cmlidXRlVmFsdWUsCisgICAgICAgICAgICBBdHRyaWJ1dGVWYWx1ZURvdWJsZVF1
b3RlZCwKKyAgICAgICAgICAgIEF0dHJpYnV0ZVZhbHVlU2luZ2xlUXVvdGVkLAorICAgICAgICAg
ICAgQXR0cmlidXRlVmFsdWVVbnF1b3RlZCwKKyAgICAgICAgICAgIEVudGl0eUluQXR0cmlidXRl
VmFsdWUsCisgICAgICAgICAgICBCb2d1c0NvbW1lbnQsCisgICAgICAgICAgICBNYXJrdXBEZWNs
YXJhdGlvbk9wZW4sCisgICAgICAgICAgICBDb21tZW50U3RhcnQsCisgICAgICAgICAgICBDb21t
ZW50U3RhcnREYXNoLAorICAgICAgICAgICAgQ29tbWVudCwKKyAgICAgICAgICAgIENvbW1lbnRF
bmREYXNoLAorICAgICAgICAgICAgQ29tbWVudEVuZAorICAgICAgICB9OworICAgICAgICBTdGF0
ZSBtX3N0YXRlOworICAgICAgICBib29sIG1fZXNjYXBlOworICAgICAgICBlbnVtIENvbnRlbnRN
b2RlbCB7CisgICAgICAgICAgICBQQ0RBVEEsCisgICAgICAgICAgICBSQ0RBVEEsCisgICAgICAg
ICAgICBDREFUQSwKKyAgICAgICAgICAgIFBMQUlOVEVYVAorICAgICAgICB9OworICAgICAgICBD
b250ZW50TW9kZWwgbV9jb250ZW50TW9kZWw7CisgICAgICAgIHVuc2lnbmVkIG1fY29tbWVudFBv
czsKKyAgICAgICAgU3RhdGUgbV9zdGF0ZUJlZm9yZUVudGl0eUluQXR0cmlidXRlVmFsdWU7Cisg
ICAgICAgIAorICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbGFzdENoYXJhY3RlcnNCdWZm
ZXJTaXplID0gODsKKyAgICAgICAgVUNoYXIgbV9sYXN0Q2hhcmFjdGVyc1tsYXN0Q2hhcmFjdGVy
c0J1ZmZlclNpemVdOworICAgICAgICB1bnNpZ25lZCBtX2xhc3RDaGFyYWN0ZXJJbmRleDsKKyAg
ICAgICAgCisgICAgICAgIGJvb2wgbV9jbG9zZVRhZzsKKyAgICAgICAgVmVjdG9yPFVDaGFyLCAz
Mj4gbV90YWdOYW1lOworICAgICAgICBWZWN0b3I8VUNoYXIsIDMyPiBtX2F0dHJpYnV0ZU5hbWU7
CisgICAgICAgIFZlY3RvcjxVQ2hhcj4gbV9hdHRyaWJ1dGVWYWx1ZTsKKyAgICAgICAgQXRvbWlj
U3RyaW5nIG1fbGFzdFN0YXJ0VGFnOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIG1fdXJsVG9M
b2FkOworICAgICAgICBib29sIG1fbGlua0lzU3R5bGVTaGVldDsKKyAgICAgICAgCisgICAgICAg
IGVudW0gQ1NTU3RhdGUgeworICAgICAgICAgICAgQ1NTSW5pdGlhbCwKKyAgICAgICAgICAgIENT
U01heWJlQ29tbWVudCwKKyAgICAgICAgICAgIENTU0NvbW1lbnQsCisgICAgICAgICAgICBDU1NN
YXliZUNvbW1lbnRFbmQsCisgICAgICAgICAgICBDU1NSdWxlU3RhcnQsCisgICAgICAgICAgICBD
U1NSdWxlLAorICAgICAgICAgICAgQ1NTQWZ0ZXJSdWxlLAorICAgICAgICAgICAgQ1NTUnVsZVZh
bHVlLAorICAgICAgICAgICAgQ1NTQWZlclJ1bGVWYWx1ZQorICAgICAgICB9OworICAgICAgICBD
U1NTdGF0ZSBtX2Nzc1N0YXRlOworICAgICAgICBWZWN0b3I8VUNoYXIsIDE2PiBtX2Nzc1J1bGU7
CisgICAgICAgIFZlY3RvcjxVQ2hhcj4gbV9jc3NSdWxlVmFsdWU7CisgICAgICAgIAorICAgICAg
ICBMaXN0SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+IG1fcHJlbG9hZHM7CisgICAgICAgIAorICAg
ICAgICBkb3VibGUgbV90aW1lVXNlZDsKKyAgICAgICAgCisgICAgICAgIERvY3VtZW50KiBtX2Rv
YzsKKyAgICB9OworCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAkocmV2
aXNpb24gMzA0NjUpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TFByZWxvYWRUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJI
VE1MUGFyc2VyLmgiCiAjaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKQEAgLTE2MSw2ICsx
NjIsNyBAQCBIVE1MVG9rZW5pemVyOjpIVE1MVG9rZW5pemVyKEhUTUxEb2N1bWVuCiAgICAgLCBw
YXJzZXIobmV3IEhUTUxQYXJzZXIoZG9jLCByZXBvcnRFcnJvcnMpKQogICAgICwgaW5Xcml0ZShm
YWxzZSkKICAgICAsIG1fZnJhZ21lbnQoZmFsc2UpCisgICAgLCBtX3ByZWxvYWRUb2tlbml6ZXIo
MCkKIHsKICAgICBiZWdpbigpOwogfQpAQCAtNDk5LDYgKzUwMSwxNSBAQCBIVE1MVG9rZW5pemVy
OjpTdGF0ZSBIVE1MVG9rZW5pemVyOjpzY3JpCiAgICAgICAgICAgICB3cml0ZShwcmVwZW5kaW5n
U3JjLCBmYWxzZSk7CiAgICAgICAgICAgICBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgICAgIH0KKyAg
ICB9IAorICAgIAorICAgIGlmICghcGVuZGluZ1NjcmlwdHMuaXNFbXB0eSgpICYmICFtX2V4ZWN1
dGluZ1NjcmlwdCkgeworICAgICAgICBpZiAoIW1fcHJlbG9hZFRva2VuaXplcikKKyAgICAgICAg
ICAgIG1fcHJlbG9hZFRva2VuaXplci5zZXQobmV3IEhUTUxQcmVsb2FkVG9rZW5pemVyKG1fZG9j
KSk7CisgICAgICAgIGlmICghbV9wcmVsb2FkVG9rZW5pemVyLT5pblByb2dyZXNzKCkpIHsKKyAg
ICAgICAgICAgIG1fcHJlbG9hZFRva2VuaXplci0+YmVnaW4oKTsKKyAgICAgICAgICAgIG1fcHJl
bG9hZFRva2VuaXplci0+d3JpdGUocGVuZGluZ1NyYyk7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICBjdXJyZW50UHJlcGVuZGluZ1NyYyA9IHNhdmVkUHJlcGVuZGluZ1NyYzsKQEAgLTE1ODUsMTAg
KzE1OTYsMTYgQEAgYm9vbCBIVE1MVG9rZW5pemVyOjp3cml0ZShjb25zdCBTZWdtZW50ZQogICAg
ICAgICAvLyBkb24ndCBwYXJzZTsgd2Ugd2lsbCBkbyB0aGlzIGxhdGVyCiAgICAgICAgIGlmIChj
dXJyZW50UHJlcGVuZGluZ1NyYykKICAgICAgICAgICAgIGN1cnJlbnRQcmVwZW5kaW5nU3JjLT5h
cHBlbmQoc291cmNlKTsKLSAgICAgICAgZWxzZQorICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IHBlbmRpbmdTcmMuYXBwZW5kKHNvdXJjZSk7CisgICAgICAgICAgICBpZiAobV9wcmVsb2FkVG9r
ZW5pemVyICYmIG1fcHJlbG9hZFRva2VuaXplci0+aW5Qcm9ncmVzcygpICYmIGFwcGVuZERhdGEp
CisgICAgICAgICAgICAgICAgbV9wcmVsb2FkVG9rZW5pemVyLT53cml0ZShzb3VyY2UpOworICAg
ICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisgICAgCisgICAgaWYgKG1fcHJl
bG9hZFRva2VuaXplciAmJiBtX3ByZWxvYWRUb2tlbml6ZXItPmluUHJvZ3Jlc3MoKSAmJiBhcHBl
bmREYXRhKQorICAgICAgICBtX3ByZWxvYWRUb2tlbml6ZXItPmVuZCgpOwogCiAgICAgaWYgKCFz
cmMuaXNFbXB0eSgpKQogICAgICAgICBzcmMuYXBwZW5kKHNvdXJjZSk7CkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTFRva2VuaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVG9r
ZW5pemVyLmgJKHJldmlzaW9uIDMwNDY1KQorKysgV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBjbGFzcyBIVE1MRG9jdW1lbnQ7CiBj
bGFzcyBIVE1MVmlld1NvdXJjZURvY3VtZW50OwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgSFRN
TFBhcnNlcjsKK2NsYXNzIEhUTUxQcmVsb2FkVG9rZW5pemVyOwogY2xhc3MgTm9kZTsKIAogLyoq
CkBAIC00MDIsNiArNDAzLDggQEAgcHJpdmF0ZToKICAgICBIVE1MUGFyc2VyKiBwYXJzZXI7CiAg
ICAgYm9vbCBpbldyaXRlOwogICAgIGJvb2wgbV9mcmFnbWVudDsKKyAgICAKKyAgICBPd25QdHI8
SFRNTFByZWxvYWRUb2tlbml6ZXI+IG1fcHJlbG9hZFRva2VuaXplcjsKIH07CiAKIHZvaWQgcGFy
c2VIVE1MRG9jdW1lbnRGcmFnbWVudChjb25zdCBTdHJpbmcmLCBEb2N1bWVudEZyYWdtZW50Kik7
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvQ2FjaGUuY3BwCShyZXZpc2lvbiAzMDQ2NSkKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOCBAQAogI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlLmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgogCisjaW5jbHVkZSAiQ1N0cmluZy5o
IgorCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yMjgs
NyArMjMwLDcgQEAgdm9pZCBDYWNoZTo6cHJ1bmVEZWFkUmVzb3VyY2VzKCkKICAgICAgICAgLy8g
Rmlyc3QgZmx1c2ggYWxsIHRoZSBkZWNvZGVkIGRhdGEgaW4gdGhpcyBxdWV1ZS4KICAgICAgICAg
d2hpbGUgKGN1cnJlbnQpIHsKICAgICAgICAgICAgIENhY2hlZFJlc291cmNlKiBwcmV2ID0gY3Vy
cmVudC0+bV9wcmV2SW5BbGxSZXNvdXJjZXNMaXN0OwotICAgICAgICAgICAgaWYgKCFjdXJyZW50
LT5yZWZlcmVuY2VkKCkgJiYgY3VycmVudC0+aXNMb2FkZWQoKSAmJiBjdXJyZW50LT5kZWNvZGVk
U2l6ZSgpKSB7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQtPnJlZmVyZW5jZWQoKSAmJiAhY3Vy
cmVudC0+aXNQcmVsb2FkZWQoKSAmJiBjdXJyZW50LT5pc0xvYWRlZCgpICYmIGN1cnJlbnQtPmRl
Y29kZWRTaXplKCkpIHsKICAgICAgICAgICAgICAgICAvLyBEZXN0cm95IG91ciBkZWNvZGVkIGRh
dGEuIFRoaXMgd2lsbCByZW1vdmUgdXMgZnJvbSAKICAgICAgICAgICAgICAgICAvLyBtX2xpdmVE
ZWNvZGVkUmVzb3VyY2VzLCBhbmQgcG9zc2libHkgbW92ZSB1cyB0byBhIGRpZmZlcm50IAogICAg
ICAgICAgICAgICAgIC8vIExSVSBsaXN0IGluIG1fYWxsUmVzb3VyY2VzLgpAQCAtMjQ0LDcgKzI0
Niw3IEBAIHZvaWQgQ2FjaGU6OnBydW5lRGVhZFJlc291cmNlcygpCiAgICAgICAgIGN1cnJlbnQg
PSBtX2FsbFJlc291cmNlc1tpXS5tX3RhaWw7CiAgICAgICAgIHdoaWxlIChjdXJyZW50KSB7CiAg
ICAgICAgICAgICBDYWNoZWRSZXNvdXJjZSogcHJldiA9IGN1cnJlbnQtPm1fcHJldkluQWxsUmVz
b3VyY2VzTGlzdDsKLSAgICAgICAgICAgIGlmICghY3VycmVudC0+cmVmZXJlbmNlZCgpKSB7Cisg
ICAgICAgICAgICBpZiAoIWN1cnJlbnQtPnJlZmVyZW5jZWQoKSAmJiAhY3VycmVudC0+aXNQcmVs
b2FkZWQoKSkgewogICAgICAgICAgICAgICAgIHJlbW92ZShjdXJyZW50KTsKIAogICAgICAgICAg
ICAgICAgIGlmIChtX2RlYWRTaXplIDw9IHRhcmdldFNpemUpCkBAIC0yNzQsNiArMjc2LDkgQEAg
dm9pZCBDYWNoZTo6c2V0Q2FwYWNpdGllcyh1bnNpZ25lZCBtaW5EZQogCiB2b2lkIENhY2hlOjpy
ZW1vdmUoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQogeworICAgIC8vaWYgKHJlc291cmNlLT51
cmwoKS5jb250YWlucygiY29udGV4dHdlYiIpKSB7CisgICAgLy8gICAgcHJpbnRmKCJSRU1PVkUg
JXNcbiIsIHJlc291cmNlLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOworICAgIC8vfQogICAgIC8v
IFRoZSByZXNvdXJjZSBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBieSBzb21lb25lIG90
aGVyIHRoYW4gb3VyIGNhbGxlciwKICAgICAvLyB3aG8gbmVlZGVkIGEgZnJlc2ggY29weSBmb3Ig
YSByZWxvYWQuIFNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0
NzkjYzY+LgogICAgIGlmIChyZXNvdXJjZS0+aW5DYWNoZSgpKSB7CkluZGV4OiBXZWJDb3JlL2xv
YWRlci9DYWNoZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
SW1hZ2UuY3BwCShyZXZpc2lvbiAzMDQ2NSkKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDcgKzIwOSw3IEBAIHZvaWQgQ2FjaGVkSW1hZ2U6
OmRhdGEoUGFzc1JlZlB0cjxTaGFyZWQKICAgICAgICAgaWYgKG1faW1hZ2UtPmlzTnVsbCgpKSB7
CiAgICAgICAgICAgICAvLyBGSVhNRTogSSdtIG5vdCBjb252aW5jZWQgdGhpcyBjYXNlIGNhbiBl
dmVuIGJlIGhpdC4KICAgICAgICAgICAgIGVycm9yKCk7Ci0gICAgICAgICAgICBpZiAoaW5DYWNo
ZSgpKQorICAgICAgICAgICAgaWYgKGluQ2FjaGUoKSAmJiAhaXNQcmVsb2FkZWQoKSkKICAgICAg
ICAgICAgICAgICBjYWNoZSgpLT5yZW1vdmUodGhpcyk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDMwNDY1
KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MCw2ICs0MCw4IEBAIENhY2hlZFJlc291cmNlOjpDYWNoZWRSZXNvdXJjZShjb25zdCBTdHIK
ICAgICAsIG1fbGFzdERlY29kZWRBY2Nlc3NUaW1lKDApCiAgICAgLCBtX3NlbmRSZXNvdXJjZUxv
YWRDYWxsYmFja3Moc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKICAgICAsIG1faW5DYWNoZShm
b3JDYWNoZSkKKyAgICAsIG1fcHJlbG9hZENvdW50KDApCisgICAgLCBtX2hhc0JlZW5SZWZlcmVu
Y2VkKGZhbHNlKQogICAgICwgbV9kb2NMb2FkZXIoMCkKIHsKICAgICBtX3R5cGUgPSB0eXBlOwpA
QCAtMTAxLDYgKzEwMyw3IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldFJlcXVlc3QoUmVxdWVz
dCoKIAogdm9pZCBDYWNoZWRSZXNvdXJjZTo6cmVmKENhY2hlZFJlc291cmNlQ2xpZW50ICpjKQog
eworICAgIG1faGFzQmVlblJlZmVyZW5jZWQgPSB0cnVlOwogICAgIGlmICghcmVmZXJlbmNlZCgp
ICYmIGluQ2FjaGUoKSkKICAgICAgICAgY2FjaGUoKS0+YWRkVG9MaXZlUmVzb3VyY2VzU2l6ZSh0
aGlzKTsKICAgICBtX2NsaWVudHMuYWRkKGMpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVk
UmVzb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5o
CShyZXZpc2lvbiAzMDQ2NSkKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBy
ZWYoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKICAgICB2b2lkIGRlcmVmKENhY2hlZFJlc291cmNl
Q2xpZW50Kik7CiAgICAgYm9vbCByZWZlcmVuY2VkKCkgY29uc3QgeyByZXR1cm4gIW1fY2xpZW50
cy5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhhc0JlZW5SZWZlcmVuY2VkKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNCZWVuUmVmZXJlbmNlZDsgfQogICAgIHZpcnR1YWwgdm9pZCBhbGxSZWZlcmVuY2Vz
UmVtb3ZlZCgpIHt9OwogCiAgICAgdW5zaWduZWQgY291bnQoKSBjb25zdCB7IHJldHVybiBtX2Ns
aWVudHMuc2l6ZSgpOyB9CkBAIC0xMTcsNyArMTE4LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpIHsgbV9yZXNwb25zZSA9
IHJlc3BvbnNlOyB9CiAgICAgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25z
dCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9CiAgICAgCi0gICAgYm9vbCBjYW5EZWxldGUoKSBjb25z
dCB7IHJldHVybiAhcmVmZXJlbmNlZCgpICYmICFtX3JlcXVlc3Q7IH0KKyAgICBib29sIGNhbkRl
bGV0ZSgpIGNvbnN0IHsgcmV0dXJuICFyZWZlcmVuY2VkKCkgJiYgIW1fcmVxdWVzdCAmJiAhbV9w
cmVsb2FkQ291bnQ7IH0KIAogICAgIGJvb2wgaXNFeHBpcmVkKCkgY29uc3Q7CiAKQEAgLTEzNiw2
ICsxMzcsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXREb2NMb2FkZXIoRG9jTG9hZGVyKiBk
b2NMb2FkZXIpIHsgbV9kb2NMb2FkZXIgPSBkb2NMb2FkZXI7IH0KICAgICAKKyAgICBib29sIGlz
UHJlbG9hZGVkKCkgY29uc3QgeyByZXR1cm4gbV9wcmVsb2FkQ291bnQ7IH0KKyAgICB2b2lkIGlu
Y3JlYXNlUHJlbG9hZENvdW50KCkgeyArK21fcHJlbG9hZENvdW50OyB9CisgICAgdm9pZCBkZWNy
ZWFzZVByZWxvYWRDb3VudCgpIHsgQVNTRVJUKG1fcHJlbG9hZENvdW50KTsgLS1tX3ByZWxvYWRD
b3VudDsgfQorICAgIAogcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0RW5jb2RlZFNpemUodW5zaWdu
ZWQpOwogICAgIHZvaWQgc2V0RGVjb2RlZFNpemUodW5zaWduZWQpOwpAQCAtMTcxLDYgKzE3Niw4
IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1fZGVsZXRlZDsKICAgICB1bnNpZ25lZCBtX2xydUlu
ZGV4OwogI2VuZGlmCisgICAgdW5zaWduZWQgbV9wcmVsb2FkQ291bnQ7CisgICAgYm9vbCBtX2hh
c0JlZW5SZWZlcmVuY2VkOwogCiBwcml2YXRlOgogICAgIENhY2hlZFJlc291cmNlKiBtX25leHRJ
bkFsbFJlc291cmNlc0xpc3Q7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY0xvYWRlci5jcHAJKHJldmlzaW9uIDMwNDY1
KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NiArMzcsOCBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAibG9hZGVyLmgi
CiAKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRG9jTG9h
ZGVyOjpEb2NMb2FkZXIoRnJhbWUgKmZyYW1lLCBEb2N1bWVudCogZG9jKQpAQCAtNzEsMjMgKzcz
LDI3IEBAIHZvaWQgRG9jTG9hZGVyOjpjaGVja0ZvclJlbG9hZChjb25zdCBLVVIKICAgICBpZiAo
bV9jYWNoZVBvbGljeSA9PSBDYWNoZVBvbGljeVZlcmlmeSkgewogICAgICAgIGlmICghbV9yZWxv
YWRlZFVSTHMuY29udGFpbnMoZnVsbFVSTC5zdHJpbmcoKSkpIHsKICAgICAgICAgICBDYWNoZWRS
ZXNvdXJjZSogZXhpc3RpbmcgPSBjYWNoZSgpLT5yZXNvdXJjZUZvclVSTChmdWxsVVJMLnN0cmlu
ZygpKTsKLSAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmctPmlzRXhwaXJlZCgpKSB7
CisgICAgICAgICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nLT5pc0V4cGlyZWQoKSAmJiAhZXhp
c3RpbmctPmlzUHJlbG9hZGVkKCkpIHsKICAgICAgICAgICAgICBjYWNoZSgpLT5yZW1vdmUoZXhp
c3RpbmcpOwogICAgICAgICAgICAgIG1fcmVsb2FkZWRVUkxzLmFkZChmdWxsVVJMLnN0cmluZygp
KTsKICAgICAgICAgICB9CiAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoKG1fY2FjaGVQb2xpY3kg
PT0gQ2FjaGVQb2xpY3lSZWxvYWQpIHx8IChtX2NhY2hlUG9saWN5ID09IENhY2hlUG9saWN5UmVm
cmVzaCkpIHsKICAgICAgICBpZiAoIW1fcmVsb2FkZWRVUkxzLmNvbnRhaW5zKGZ1bGxVUkwuc3Ry
aW5nKCkpKSB7Ci0gICAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5nID0gY2FjaGUoKS0+
cmVzb3VyY2VGb3JVUkwoZnVsbFVSTC5zdHJpbmcoKSk7Ci0gICAgICAgICAgaWYgKGV4aXN0aW5n
KQotICAgICAgICAgICAgIGNhY2hlKCktPnJlbW92ZShleGlzdGluZyk7Ci0gICAgICAgICAgbV9y
ZWxvYWRlZFVSTHMuYWRkKGZ1bGxVUkwuc3RyaW5nKCkpOworICAgICAgICAgICBDYWNoZWRSZXNv
dXJjZSogZXhpc3RpbmcgPSBjYWNoZSgpLT5yZXNvdXJjZUZvclVSTChmdWxsVVJMLnN0cmluZygp
KTsKKyAgICAgICAgICAgaWYgKGV4aXN0aW5nICYmICFleGlzdGluZy0+aXNQcmVsb2FkZWQoKSkg
eworICAgICAgICAgICAgICAgY2FjaGUoKS0+cmVtb3ZlKGV4aXN0aW5nKTsKKyAgICAgICAgICAg
ICAgIG1fcmVsb2FkZWRVUkxzLmFkZChmdWxsVVJMLnN0cmluZygpKTsKKyAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICB9CiB9CiAKIENhY2hlZEltYWdlKiBEb2NMb2FkZXI6OnJlcXVlc3RJbWFn
ZShjb25zdCBTdHJpbmcmIHVybCkKIHsKKyAgICAvL2lmICh1cmwuY29udGFpbnMoImNvbnRleHR3
ZWIiKSkgeworICAgIC8vICAgIHByaW50ZigiSU1BR0UgJXNcbiIsIHVybC5sYXRpbjEoKS5kYXRh
KCkpOworICAgIC8vfQogICAgIENhY2hlZEltYWdlKiByZXNvdXJjZSA9IHN0YXRpY19jYXN0PENh
Y2hlZEltYWdlKj4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNl
LCB1cmwpKTsKICAgICBpZiAoYXV0b0xvYWRJbWFnZXMoKSAmJiByZXNvdXJjZSAmJiByZXNvdXJj
ZS0+c3RpbGxOZWVkc0xvYWQoKSkgewogICAgICAgICByZXNvdXJjZS0+c2V0TG9hZGluZyh0cnVl
KTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHJldmlzaW9uIDMwNDY1KQorKysg
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw3IEBACiAKICNpbmNsdWRlICJDYWNoZWRQYWdlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKQEAgLTQ2NiwxMCArNDY3LDEzIEBA
IGJvb2wgRG9jdW1lbnRMb2FkZXI6OmlzTG9hZGluZ0luQVBJU2Vuc2UKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICBpZiAoIW1fc3VicmVzb3VyY2VMb2FkZXJzLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoRG9jdW1lbnQqIGRvYyA9IG1f
ZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIGlmIChEb2N1bWVudCogZG9jID0gbV9mcmFtZS0+
ZG9jdW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKGRvYy0+ZG9jTG9hZGVyKCktPnJlcXVlc3RD
b3VudCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgaWYgKFRv
a2VuaXplciogdG9rID0gZG9jLT50b2tlbml6ZXIoKSkKICAgICAgICAgICAgICAgICBpZiAodG9r
LT5wcm9jZXNzaW5nRGF0YSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZnJhbWVMb2FkZXIoKS0+c3ViZnJhbWVJc0xvYWRp
bmcoKTsKIH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAkocmV2aXNpb24gMzA0NjUpCisrKyBXZWJDb3JlL2xv
YWRlci9sb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2MyArMzksMjEyIEBACiAjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKKyNpbmNs
dWRlICJDU3RyaW5nLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKyNkZWZpbmUgRkFT
VCAxCiAKKyNpZiBGQVNUCisvLyBNYXRjaCB0aGUgcGFyYWxsZWwgY29ubmVjdGlvbiBjb3VudCB1
c2VkIGJ5IHRoZSBuZXR3b3JraW5nIGxheWVyCisvLyBGSVhNRSBzaG91bGQgbm90IGhhcmRjb2Rl
IHRoaXMKK2NvbnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRQZXJIb3N0ID0gNDsKKy8v
IEhhdmluZyBhIGxpbWl0IG1pZ2h0IHN0aWxsIGhlbHAgZ2V0dGluZyBtb3JlIGltcG9ydGFudCBy
ZXNvdXJjZXMgZmlyc3QKK2NvbnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JMb2Nh
bFByb3RvY29sPSA1MDsKKyNlbHNlCitjb25zdCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0
UGVySG9zdCA9IDEwMDA7Citjb25zdCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0Rm9yTG9j
YWxQcm90b2NvbD0gMTAwMDsKKyNlbmRpZgorICAgIAorICAgIAogTG9hZGVyOjpMb2FkZXIoKQor
ICAgIDogbV9yZXF1ZXN0VGltZXIodGhpcywgJkxvYWRlcjo6cmVxdWVzdFRpbWVyRmlyZWQpCiB7
Ci0gICAgbV9yZXF1ZXN0c1BlbmRpbmcuc2V0QXV0b0RlbGV0ZSh0cnVlKTsKIH0KIAogTG9hZGVy
Ojp+TG9hZGVyKCkKIHsKLSAgICBkZWxldGVBbGxWYWx1ZXMobV9yZXF1ZXN0c0xvYWRpbmcpOwor
ICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2hvc3RzKTsKK30KKyAgICAKK0xvYWRlcjo6UHJpb3JpdHkg
TG9hZGVyOjpkZXRlcm1pbmVQcmlvcml0eShjb25zdCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2Up
IGNvbnN0Cit7CisjaWYgRkFTVAorICAgIHN3aXRjaCAocmVzb3VyY2UtPnR5cGUoKSkgeworICAg
ICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6IAorI2lmIEVOQUJMRShYQkwpCisgICAg
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhCTDoKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJu
IEhpZ2g7CisgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6CisgICAg
ICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZToKKyNpZiBFTkFCTEUoWFNMVCkK
KyAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKKyNlbmRpZgorICAg
ICAgICAgICAgcmV0dXJuIE1lZGl1bTsKKyAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1h
Z2VSZXNvdXJjZToKKyAgICAgICAgICAgIHJldHVybiBMb3c7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgICAgICByZXR1cm4gTG93OworICAgIH0KKyNl
bHNlCisgICAgcmV0dXJuIEhpZ2g7CisjZW5kaWYKIH0KIAotdm9pZCBMb2FkZXI6OmxvYWQoRG9j
TG9hZGVyKiBkbCwgQ2FjaGVkUmVzb3VyY2UqIG9iamVjdCwgYm9vbCBpbmNyZW1lbnRhbCwgYm9v
bCBza2lwQ2FuTG9hZENoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCit2b2lk
IExvYWRlcjo6bG9hZChEb2NMb2FkZXIqIGRsLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGJv
b2wgaW5jcmVtZW50YWwsIGJvb2wgc2tpcENhbkxvYWRDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VM
b2FkQ2FsbGJhY2tzKQogewogICAgIEFTU0VSVChkbCk7Ci0gICAgUmVxdWVzdCogcmVxID0gbmV3
IFJlcXVlc3QoZGwsIG9iamVjdCwgaW5jcmVtZW50YWwsIHNraXBDYW5Mb2FkQ2hlY2ssIHNlbmRS
ZXNvdXJjZUxvYWRDYWxsYmFja3MpOwotICAgIG1fcmVxdWVzdHNQZW5kaW5nLmFwcGVuZChyZXEp
OworICAgIFJlcXVlc3QqIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChkbCwgcmVzb3VyY2UsIGluY3Jl
bWVudGFsLCBza2lwQ2FuTG9hZENoZWNrLCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKyAg
ICAKKyAgICBLVVJMIHVybChyZXNvdXJjZS0+dXJsKCkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAg
ICBTdHJpbmcgaG9zdEtleTsKKyAgICB1bnNpZ25lZCByZXF1ZXN0TGltaXQ7CisgICAgYm9vbCBp
c0hUVFAgPSB1cmwucHJvdG9jb2woKSA9PSAiaHR0cCIgfHwgdXJsLnByb3RvY29sKCkgPT0gImh0
dHBzIjsKKyAgICBpZiAoaXNIVFRQKSB7CisgICAgICAgIGhvc3RLZXkgPSB1cmwuaG9zdCgpOwor
ICAgICAgICByZXF1ZXN0TGltaXQgPSBtYXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdDsKKyAgICB9
IGVsc2UgeworICAgICAgICAvLyB1c2UgcHJvdG9jb2wgYXMgdGhlIGtleSwgYWRkICI6IiBzaW5j
ZSBpdCBjYW4ndCBvY2N1ciBpbiByZWFsIGhvc3QgbmFtZXMgCisgICAgICAgIGhvc3RLZXkgPSBT
dHJpbmcodXJsLnByb3RvY29sKCkpICsgIjoiOyAgICAKKyAgICAgICAgcmVxdWVzdExpbWl0ID0g
bWF4UmVxdWVzdHNJbkZsaWdodEZvckxvY2FsUHJvdG9jb2w7CisgICAgfQorCisgICAgSG9zdCog
aG9zdCA9IG1faG9zdHMuZ2V0KGhvc3RLZXkpOworICAgIGlmICghaG9zdCkgeworICAgICAgICBo
b3N0ID0gbmV3IEhvc3QocmVxdWVzdExpbWl0KTsKKyAgICAgICAgbV9ob3N0cy5hZGQoaG9zdEtl
eSwgaG9zdCk7CisgICAgfQorICAgIAorICAgIFByaW9yaXR5IHByaW9yaXR5ID0gZGV0ZXJtaW5l
UHJpb3JpdHkocmVzb3VyY2UpOworCisgICAgaG9zdC0+YWRkUmVxdWVzdChyZXF1ZXN0LCBwcmlv
cml0eSk7CiAgICAgZGwtPmluY3JlbWVudFJlcXVlc3RDb3VudCgpOworICAgIAorICAgIGlmIChw
cmlvcml0eSA+IExvdyB8fCAhaXNIVFRQKQorICAgICAgICAvLyBUcnkgdG8gcmVxdWVzdCBpbXBv
cnRhbnQgcmVzb3VyY2VzIGltbWVkaWF0ZWx5CisgICAgICAgIGhvc3QtPnNlcnZlUGVuZGluZ1Jl
cXVlc3RzKHByaW9yaXR5KTsKKyAgICBlbHNlCisgICAgICAgIC8vIEhhbmRsZSBhc3luY2hyb25v
dXNseSBzbyBlYXJseSBsb3cgcHJpb3JpdHkgcmVxdWVzdHMgZG9uJ3QgZ2V0IHNjaGVkdWxlZCBi
ZWZvcmUgbGF0ZXIgaGlnaCBwcmlvcml0eSBvbmVzCisgICAgICAgIHNjaGVkdWxlU2VydmVQZW5k
aW5nUmVxdWVzdHMoKTsKK30KKyAgICAKK3ZvaWQgTG9hZGVyOjpzY2hlZHVsZVNlcnZlUGVuZGlu
Z1JlcXVlc3RzKCkKK3sKKyAgICBpZiAoIW1fcmVxdWVzdFRpbWVyLmlzQWN0aXZlKCkpCisgICAg
ICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBMb2FkZXI6OnJl
cXVlc3RUaW1lckZpcmVkKFRpbWVyPExvYWRlcj4qKSAKK3sKICAgICBzZXJ2ZVBlbmRpbmdSZXF1
ZXN0cygpOwogfQogCi12b2lkIExvYWRlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoKQordm9pZCBM
b2FkZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSkKIHsK
LSAgICB3aGlsZSAoIW1fcmVxdWVzdHNQZW5kaW5nLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBn
ZXQgdGhlIGZpcnN0IHBlbmRpbmcgcmVxdWVzdAotICAgICAgICBSZXF1ZXN0KiByZXEgPSBtX3Jl
cXVlc3RzUGVuZGluZy50YWtlKDApOwotICAgICAgICBEb2NMb2FkZXIqIGRsID0gcmVxLT5kb2NM
b2FkZXIoKTsKLSAgICAgICAgZGwtPmRlY3JlbWVudFJlcXVlc3RDb3VudCgpOworICAgIG1fcmVx
dWVzdFRpbWVyLnN0b3AoKTsKIAotICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChyZXEt
PmNhY2hlZFJlc291cmNlKCktPnVybCgpKTsKKyAgICBIb3N0TWFwOjppdGVyYXRvciBlbmQgPSBt
X2hvc3RzLmVuZCgpOworICAgIFZlY3RvcjxTdHJpbmc+IHRvUmVtb3ZlOworICAgIGZvciAoSG9z
dE1hcDo6aXRlcmF0b3IgaXQgPSBtX2hvc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewor
ICAgICAgICBIb3N0KiByZXF1ZXN0SG9zdCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChyZXF1
ZXN0SG9zdC0+aGFzUmVxdWVzdHMoKSkKKyAgICAgICAgICAgIHJlcXVlc3RIb3N0LT5zZXJ2ZVBl
bmRpbmdSZXF1ZXN0cyhtaW5pbXVtUHJpb3JpdHkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICB0b1JlbW92ZS5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICAgICAgICAgIAorICAgIH0KKyAgICBm
b3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgdG9SZW1vdmUuc2l6ZSgpOyArK24pIHsKKyAgICAgICAg
SG9zdE1hcDo6aXRlcmF0b3IgaXQgPSBtX2hvc3RzLmZpbmQodG9SZW1vdmVbbl0pOworICAgICAg
ICBkZWxldGUgaXQtPnNlY29uZDsKKyAgICAgICAgbV9ob3N0cy5yZW1vdmUoaXQpOworICAgIH0K
K30KKyAgICAKK3ZvaWQgTG9hZGVyOjpjYW5jZWxSZXF1ZXN0cyhEb2NMb2FkZXIqIGRsKQorewor
ICAgIEhvc3RNYXA6Oml0ZXJhdG9yIGVuZCA9IG1faG9zdHMuZW5kKCk7CisgICAgZm9yIChIb3N0
TWFwOjppdGVyYXRvciBpdCA9IG1faG9zdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIEhvc3QqIHJlcXVlc3RIb3N0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgcmVxdWVzdEhv
c3QtPmNhbmNlbFJlcXVlc3RzKGRsKTsKKyAgICB9CisgICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdS
ZXF1ZXN0cygpOworICAgIAorICAgIGlmIChkbC0+bG9hZEluUHJvZ3Jlc3MoKSkKKyAgICAgICAg
QVNTRVJUKGRsLT5yZXF1ZXN0Q291bnQoKSA9PSAxKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VS
VChkbC0+cmVxdWVzdENvdW50KCkgPT0gMCk7Cit9CisgICAgCitMb2FkZXI6Okhvc3Q6Okhvc3Qo
dW5zaWduZWQgbWF4UmVxdWVzdHNJbkZsaWdodCkKKyAgICA6IG1fbWF4UmVxdWVzdHNJbkZsaWdo
dChtYXhSZXF1ZXN0c0luRmxpZ2h0KQoreworICAgIGZvciAodW5zaWduZWQgcCA9IDA7IHAgPD0g
SGlnaDsgcCsrKQorICAgICAgICBtX3JlcXVlc3RzUGVuZGluZ1twXS5zZXRBdXRvRGVsZXRlKHRy
dWUpOworfQogCi0gICAgICAgIGlmICghcmVxLT5jYWNoZWRSZXNvdXJjZSgpLT5hY2NlcHQoKS5p
c0VtcHR5KCkpCi0gICAgICAgICAgICByZXF1ZXN0LnNldEhUVFBBY2NlcHQocmVxLT5jYWNoZWRS
ZXNvdXJjZSgpLT5hY2NlcHQoKSk7CitMb2FkZXI6Okhvc3Q6On5Ib3N0KCkKK3sKKyAgICBkZWxl
dGVBbGxWYWx1ZXMobV9yZXF1ZXN0c0xvYWRpbmcpOworfQorICAgIAordm9pZCBMb2FkZXI6Okhv
c3Q6OmFkZFJlcXVlc3QoY29uc3QgUmVxdWVzdCogcmVxdWVzdCwgUHJpb3JpdHkgcHJpb3JpdHkp
Cit7CisgICAgbV9yZXF1ZXN0c1BlbmRpbmdbcHJpb3JpdHldLmFwcGVuZChyZXF1ZXN0KTsKK30K
KyAgICAKK2Jvb2wgTG9hZGVyOjpIb3N0OjpoYXNSZXF1ZXN0cygpIGNvbnN0Cit7CisgICAgaWYg
KG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZm9y
ICh1bnNpZ25lZCBwID0gMDsgcCA8PSBIaWdoOyBwKyspIHsKKyAgICAgICAgaWYgKCFtX3JlcXVl
c3RzUGVuZGluZ1twXS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQogCit2b2lkIExvYWRlcjo6SG9zdDo6c2VydmVQZW5kaW5n
UmVxdWVzdHMoTG9hZGVyOjpQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkpCit7CisgICAgZm9yICh1
bnNpZ25lZCBwID0gbWluaW11bVByaW9yaXR5OyBwIDw9IEhpZ2g7IHArKykKKyAgICAgICAgc2Vy
dmVQZW5kaW5nUmVxdWVzdHMobV9yZXF1ZXN0c1BlbmRpbmdbcF0pOworfQorICAgIAordm9pZCBM
b2FkZXI6Okhvc3Q6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKERlcHJlY2F0ZWRQdHJMaXN0PFJlcXVl
c3Q+JiByZXF1ZXN0c1BlbmRpbmcpCit7CisgICAgd2hpbGUgKG1fcmVxdWVzdHNMb2FkaW5nLnNp
emUoKSA8IG1fbWF4UmVxdWVzdHNJbkZsaWdodCAmJiAhcmVxdWVzdHNQZW5kaW5nLmlzRW1wdHko
KSkgeyAgICAgICAgCisgICAgICAgIFJlcXVlc3QqIHJlcSA9IHJlcXVlc3RzUGVuZGluZy50YWtl
KDApOworICAgICAgICBEb2NMb2FkZXIqIGRsID0gcmVxLT5kb2NMb2FkZXIoKTsKKyAgICAgICAg
ZGwtPmRlY3JlbWVudFJlcXVlc3RDb3VudCgpOworICAgICAgICAKKyAgICAgICAgUmVzb3VyY2VS
ZXF1ZXN0IHJlc291cmNlUmVxdWVzdChyZXEtPmNhY2hlZFJlc291cmNlKCktPnVybCgpKTsKKyAg
ICAgICAgCisgICAgICAgIGlmICghcmVxLT5jYWNoZWRSZXNvdXJjZSgpLT5hY2NlcHQoKS5pc0Vt
cHR5KCkpCisgICAgICAgICAgICByZXNvdXJjZVJlcXVlc3Quc2V0SFRUUEFjY2VwdChyZXEtPmNh
Y2hlZFJlc291cmNlKCktPmFjY2VwdCgpKTsKKyAgICAgICAgCiAgICAgICAgIEtVUkwgciA9IGRs
LT5kb2MoKS0+dXJsKCk7CiAgICAgICAgIGlmICgoci5wcm90b2NvbElzKCJodHRwIikgfHwgci5w
cm90b2NvbElzKCJodHRwcyIpKSAmJiByLnBhdGgoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBy
LnNldFBhdGgoIi8iKTsKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQUmVmZXJyZXIoci5zdHJpbmco
KSk7CisgICAgICAgIHJlc291cmNlUmVxdWVzdC5zZXRIVFRQUmVmZXJyZXIoci5zdHJpbmcoKSk7
CiAKICAgICAgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJj
ZUxvYWRlcjo6Y3JlYXRlKGRsLT5kb2MoKS0+ZnJhbWUoKSwKLSAgICAgICAgICAgIHRoaXMsIHJl
cXVlc3QsIHJlcS0+c2hvdWxkU2tpcENhbkxvYWRDaGVjaygpLCByZXEtPnNlbmRSZXNvdXJjZUxv
YWRDYWxsYmFja3MoKSk7Ci0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsIHJlc291cmNlUmVxdWVzdCwgcmVx
LT5zaG91bGRTa2lwQ2FuTG9hZENoZWNrKCksIHJlcS0+c2VuZFJlc291cmNlTG9hZENhbGxiYWNr
cygpKTsKKyAgICAgICAgCiAgICAgICAgIGlmIChsb2FkZXIpIHsKICAgICAgICAgICAgIG1fcmVx
dWVzdHNMb2FkaW5nLmFkZChsb2FkZXIucmVsZWFzZSgpLCByZXEpOwogICAgICAgICAgICAgZGwt
PmluY3JlbWVudFJlcXVlc3RDb3VudCgpOwotICAgICAgICAgICAgYnJlYWs7CisvLyAgICAgICAg
ICAgIHByaW50ZigiSE9TVCAlcyBDT1VOVCAlZCBMT0FESU5HICVzXG4iLCByZXNvdXJjZVJlcXVl
c3QudXJsKCkuaG9zdCgpLmxhdGluMSgpLCBtX3JlcXVlc3RzTG9hZGluZy5zaXplKCksIHJlcS0+
Y2FjaGVkUmVzb3VyY2UoKS0+dXJsKCkuZGVwcmVjYXRlZFN0cmluZygpLmxhdGluMSgpKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRsLT5zZXRMb2FkSW5Qcm9ncmVzcyh0cnVlKTsK
KyAgICAgICAgICAgIHJlcS0+Y2FjaGVkUmVzb3VyY2UoKS0+ZXJyb3IoKTsKKyAgICAgICAgICAg
IGRsLT5zZXRMb2FkSW5Qcm9ncmVzcyhmYWxzZSk7CisgICAgICAgICAgICBkZWxldGUgcmVxOwog
ICAgICAgICB9Ci0KLSAgICAgICAgZGwtPnNldExvYWRJblByb2dyZXNzKHRydWUpOwotICAgICAg
ICByZXEtPmNhY2hlZFJlc291cmNlKCktPmVycm9yKCk7Ci0gICAgICAgIGRsLT5zZXRMb2FkSW5Q
cm9ncmVzcyhmYWxzZSk7Ci0KLSAgICAgICAgZGVsZXRlIHJlcTsKICAgICB9CiB9CiAKLXZvaWQg
TG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIpCit2b2lk
IExvYWRlcjo6SG9zdDo6ZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVy
KQogewogICAgIFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGkgPSBtX3JlcXVlc3RzTG9hZGluZy5maW5k
KGxvYWRlcik7CiAgICAgaWYgKGkgPT0gbV9yZXF1ZXN0c0xvYWRpbmcuZW5kKCkpCkBAIC0xMTUs
MTYgKzI2NCwxOSBAQCB2b2lkIExvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJjCiAg
ICAgb2JqZWN0LT5maW5pc2goKTsKIAogICAgIGRlbGV0ZSByZXE7CisgICAgCisvLyAgICBLVVJM
IHUob2JqZWN0LT51cmwoKS5kZXByZWNhdGVkU3RyaW5nKCkpOworLy8gICAgcHJpbnRmKCJIT1NU
ICVzIENPVU5UICVkIFJFQ0VJVkVEICVzXG4iLCB1Lmhvc3QoKS5sYXRpbjEoKSwgbV9yZXF1ZXN0
c0xvYWRpbmcuc2l6ZSgpLCBvYmplY3QtPnVybCgpLmRlcHJlY2F0ZWRTdHJpbmcoKS5sYXRpbjEo
KSk7CiAKICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwogfQogCi12b2lkIExvYWRlcjo6ZGlk
RmFpbChTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJikKK3Zv
aWQgTG9hZGVyOjpIb3N0OjpkaWRGYWlsKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0
IFJlc291cmNlRXJyb3ImKQogewogICAgIGRpZEZhaWwobG9hZGVyKTsKIH0KIAotdm9pZCBMb2Fk
ZXI6OmRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgYm9vbCBjYW5jZWxsZWQpCit2
b2lkIExvYWRlcjo6SG9zdDo6ZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBib29s
IGNhbmNlbGxlZCkKIHsKICAgICBSZXF1ZXN0TWFwOjppdGVyYXRvciBpID0gbV9yZXF1ZXN0c0xv
YWRpbmcuZmluZChsb2FkZXIpOwogICAgIGlmIChpID09IG1fcmVxdWVzdHNMb2FkaW5nLmVuZCgp
KQpAQCAtMTQ0LDE0ICsyOTYsMTUgQEAgdm9pZCBMb2FkZXI6OmRpZEZhaWwoU3VicmVzb3VyY2VM
b2FkZXIqIAogICAgIH0KICAgICAKICAgICBkb2NMb2FkZXItPnNldExvYWRJblByb2dyZXNzKGZh
bHNlKTsKLSAgICBjYWNoZSgpLT5yZW1vdmUob2JqZWN0KTsKKyAgICBpZiAoY2FuY2VsbGVkIHx8
ICFvYmplY3QtPmlzUHJlbG9hZGVkKCkpCisgICAgICAgIGNhY2hlKCktPnJlbW92ZShvYmplY3Qp
OwogCiAgICAgZGVsZXRlIHJlcTsKIAogICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7CiB9CiAK
LXZvaWQgTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRl
ciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit2b2lkIExvYWRlcjo6SG9zdDo6
ZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIFJlcXVlc3QqIHJlcSA9IG1fcmVxdWVzdHNM
b2FkaW5nLmdldChsb2FkZXIpOwogICAgIApAQCAtMTg3LDcgKzM0MCw3IEBAIHZvaWQgTG9hZGVy
OjpkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3UKICAgICB9CiB9CiAKLXZvaWQgTG9hZGVyOjpk
aWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRh
LCBpbnQgc2l6ZSkKK3ZvaWQgTG9hZGVyOjpIb3N0OjpkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJj
ZUxvYWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSkKIHsKICAgICBSZXF1
ZXN0KiByZXF1ZXN0ID0gbV9yZXF1ZXN0c0xvYWRpbmcuZ2V0KGxvYWRlcik7CiAgICAgaWYgKCFy
ZXF1ZXN0KQpAQCAtMjEyLDI1ICszNjUsMzEgQEAgdm9pZCBMb2FkZXI6OmRpZFJlY2VpdmVEYXRh
KFN1YnJlc291cmNlTAogICAgIH0gZWxzZSBpZiAocmVxdWVzdC0+aXNJbmNyZW1lbnRhbCgpKQog
ICAgICAgICBvYmplY3QtPmRhdGEobG9hZGVyLT5yZXNvdXJjZURhdGEoKSwgZmFsc2UpOwogfQot
Ci12b2lkIExvYWRlcjo6Y2FuY2VsUmVxdWVzdHMoRG9jTG9hZGVyKiBkbCkKKyAgICAKK3ZvaWQg
Y2FuY2VsUGVuZGluZ1JlcXVlc3RzKERlcHJlY2F0ZWRQdHJMaXN0PFJlcXVlc3Q+JiByZXF1ZXN0
c1BlbmRpbmcsIERvY0xvYWRlciogZG9jTG9hZGVyKQogewotICAgIERlcHJlY2F0ZWRQdHJMaXN0
SXRlcmF0b3I8UmVxdWVzdD4gcEl0KG1fcmVxdWVzdHNQZW5kaW5nKTsKKyAgICBEZXByZWNhdGVk
UHRyTGlzdEl0ZXJhdG9yPFJlcXVlc3Q+IHBJdChyZXF1ZXN0c1BlbmRpbmcpOwogICAgIHdoaWxl
IChwSXQuY3VycmVudCgpKSB7Ci0gICAgICAgIGlmIChwSXQuY3VycmVudCgpLT5kb2NMb2FkZXIo
KSA9PSBkbCkgeworICAgICAgICBpZiAocEl0LmN1cnJlbnQoKS0+ZG9jTG9hZGVyKCkgPT0gZG9j
TG9hZGVyKSB7CiAgICAgICAgICAgICBjYWNoZSgpLT5yZW1vdmUocEl0LmN1cnJlbnQoKS0+Y2Fj
aGVkUmVzb3VyY2UoKSk7Ci0gICAgICAgICAgICBtX3JlcXVlc3RzUGVuZGluZy5yZW1vdmUocEl0
KTsKLSAgICAgICAgICAgIGRsLT5kZWNyZW1lbnRSZXF1ZXN0Q291bnQoKTsKKyAgICAgICAgICAg
IHJlcXVlc3RzUGVuZGluZy5yZW1vdmUocEl0KTsKKyAgICAgICAgICAgIGRvY0xvYWRlci0+ZGVj
cmVtZW50UmVxdWVzdENvdW50KCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgKytwSXQ7
CiAgICAgfQorfQorCit2b2lkIExvYWRlcjo6SG9zdDo6Y2FuY2VsUmVxdWVzdHMoRG9jTG9hZGVy
KiBkb2NMb2FkZXIpCit7CisgICAgZm9yICh1bnNpZ25lZCBwID0gMDsgcCA8PSBIaWdoOyBwKysp
CisgICAgICAgIGNhbmNlbFBlbmRpbmdSZXF1ZXN0cyhtX3JlcXVlc3RzUGVuZGluZ1twXSwgZG9j
TG9hZGVyKTsKIAogICAgIFZlY3RvcjxTdWJyZXNvdXJjZUxvYWRlciosIDI1Nj4gbG9hZGVyc1Rv
Q2FuY2VsOwogCiAgICAgUmVxdWVzdE1hcDo6aXRlcmF0b3IgZW5kID0gbV9yZXF1ZXN0c0xvYWRp
bmcuZW5kKCk7CiAgICAgZm9yIChSZXF1ZXN0TWFwOjppdGVyYXRvciBpID0gbV9yZXF1ZXN0c0xv
YWRpbmcuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewogICAgICAgICBSZXF1ZXN0KiByID0gaS0+
c2Vjb25kOwotICAgICAgICBpZiAoci0+ZG9jTG9hZGVyKCkgPT0gZGwpCisgICAgICAgIGlmIChy
LT5kb2NMb2FkZXIoKSA9PSBkb2NMb2FkZXIpCiAgICAgICAgICAgICBsb2FkZXJzVG9DYW5jZWwu
YXBwZW5kKGktPmZpcnN0LmdldCgpKTsKICAgICB9CiAKQEAgLTIzOCwxMSArMzk3LDYgQEAgdm9p
ZCBMb2FkZXI6OmNhbmNlbFJlcXVlc3RzKERvY0xvYWRlciogZAogICAgICAgICBTdWJyZXNvdXJj
ZUxvYWRlciogbG9hZGVyID0gbG9hZGVyc1RvQ2FuY2VsW2ldOwogICAgICAgICBkaWRGYWlsKGxv
YWRlciwgdHJ1ZSk7CiAgICAgfQotICAgIAotICAgIGlmIChkbC0+bG9hZEluUHJvZ3Jlc3MoKSkK
LSAgICAgICAgQVNTRVJUKGRsLT5yZXF1ZXN0Q291bnQoKSA9PSAxKTsKLSAgICBlbHNlCi0gICAg
ICAgIEFTU0VSVChkbC0+cmVxdWVzdENvdW50KCkgPT0gMCk7CiB9CiAKIH0gLy9uYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9sb2FkZXIvbG9hZGVyLmgJKHJldmlzaW9uIDMwNDY1KQorKysgV2ViQ29yZS9sb2FkZXIv
bG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDkgQEAKIAogI2luY2x1ZGUgIkRl
cHJlY2F0ZWRQdHJMaXN0LmgiCiAjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNp
bmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTMyLDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IERvY0xvYWRlcjsKICAgICBjbGFzcyBSZXF1ZXN0OwogCi0gICAgY2xhc3MgTG9hZGVyIDogcHJp
dmF0ZSBTdWJyZXNvdXJjZUxvYWRlckNsaWVudCB7CisgICAgY2xhc3MgTG9hZGVyIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIExvYWRlcigpOwogICAgICAgICB+TG9hZGVyKCk7CkBAIC00MCwxOSAr
NDMsNDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGxvYWQoRG9jTG9hZGVy
KiwgQ2FjaGVkUmVzb3VyY2UqLCBib29sIGluY3JlbWVudGFsID0gdHJ1ZSwgYm9vbCBza2lwQ2Fu
TG9hZENoZWNrID0gZmFsc2UsIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyA9IHRydWUp
OwogCiAgICAgICAgIHZvaWQgY2FuY2VsUmVxdWVzdHMoRG9jTG9hZGVyKik7CisgICAgICAgIAor
ICAgICAgICBlbnVtIFByaW9yaXR5IHsKKyAgICAgICAgICAgIExvdywgTWVkaXVtLCBIaWdoCisg
ICAgICAgIH07CisgICAgICAgIHZvaWQgc2VydmVQZW5kaW5nUmVxdWVzdHMoUHJpb3JpdHkgbWlu
aW11bVByaW9yaXR5ID0gTG93KTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJj
ZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmlu
aXNoTG9hZGluZyhTdWJyZXNvdXJjZUxvYWRlciopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
RmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLSAgICAgICAg
dm9pZCBkaWRGYWlsKFN1YnJlc291cmNlTG9hZGVyKiwgYm9vbCBjYW5jZWxsZWQgPSBmYWxzZSk7
Ci0KLSAgICAgICAgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwotCi0gICAgICAgIERlcHJl
Y2F0ZWRQdHJMaXN0PFJlcXVlc3Q+IG1fcmVxdWVzdHNQZW5kaW5nOwotICAgICAgICB0eXBlZGVm
IEhhc2hNYXA8UmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiwgUmVxdWVzdCo+IFJlcXVlc3RNYXA7
Ci0gICAgICAgIFJlcXVlc3RNYXAgbV9yZXF1ZXN0c0xvYWRpbmc7CisgICAgICAgIFByaW9yaXR5
IGRldGVybWluZVByaW9yaXR5KGNvbnN0IENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkgY29uc3Q7
CisgICAgICAgIHZvaWQgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOworICAgICAgICAK
KyAgICAgICAgdm9pZCByZXF1ZXN0VGltZXJGaXJlZChUaW1lcjxMb2FkZXI+Kik7CisKKyAgICAg
ICAgY2xhc3MgSG9zdCA6IHByaXZhdGUgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQgeworICAgICAg
ICBwdWJsaWM6CisgICAgICAgICAgICBIb3N0KHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHQp
OworICAgICAgICAgICAgfkhvc3QoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdm9pZCBh
ZGRSZXF1ZXN0KGNvbnN0IFJlcXVlc3QqLCBQcmlvcml0eSk7CisgICAgICAgICAgICB2b2lkIHNl
cnZlUGVuZGluZ1JlcXVlc3RzKFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSA9IExvdyk7CisgICAg
ICAgICAgICB2b2lkIGNhbmNlbFJlcXVlc3RzKERvY0xvYWRlciopOworICAgICAgICAgICAgYm9v
bCBoYXNSZXF1ZXN0cygpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIq
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKKyAgICAg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKik7
CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGNv
bnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdm9pZCBzZXJ2
ZVBlbmRpbmdSZXF1ZXN0cyhEZXByZWNhdGVkUHRyTGlzdDxSZXF1ZXN0PiYgcmVxdWVzdHNQZW5k
aW5nKTsKKyAgICAgICAgICAgIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGJvb2wg
Y2FuY2VsbGVkID0gZmFsc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBEZXByZWNhdGVk
UHRyTGlzdDxSZXF1ZXN0PiBtX3JlcXVlc3RzUGVuZGluZ1tIaWdoICsgMV07CisgICAgICAgICAg
ICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiwgUmVxdWVzdCo+IFJl
cXVlc3RNYXA7CisgICAgICAgICAgICBSZXF1ZXN0TWFwIG1fcmVxdWVzdHNMb2FkaW5nOworICAg
ICAgICAgICAgY29uc3QgaW50IG1fbWF4UmVxdWVzdHNJbkZsaWdodDsKKyAgICAgICAgfTsKKyAg
ICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSG9zdCo+IEhvc3RNYXA7CisgICAgICAgIEhv
c3RNYXAgbV9ob3N0czsKKyAgICAgICAgCisgICAgICAgIFRpbWVyPExvYWRlcj4gbV9yZXF1ZXN0
VGltZXI7CiAgICAgfTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19398</attachid>
            <date>2008-02-26 23:47:10 -0800</date>
            <delta_ts>2008-03-07 00:13:29 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>speculative-loading-6.patch</filename>
            <type>text/plain</type>
            <size>68562</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAzMDYxNikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0zNzcwLDYgKzM3NzAsOCBAQAogCQlFNDQ2MTQ1MjBDRDY4QTM1MDBG
QURBNzUgLyogUmVuZGVyVmlkZW8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0QjQxRTM0MENCRkI2MDkwMEFGMkVDRSAvKiBSZW5kZXJWaWRlby5oICov
OyB9OwogCQlFNEMyNzk1ODBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDMjc5NTYwQ0Y5NzQx
OTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmNwcCAqLzsgfTsKIAkJRTRDMjc5NTkwQ0Y5NzQxOTAw
RTk3Qjk4IC8qIFJlbmRlck1lZGlhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNEMyNzk1NzBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuaCAq
LzsgfTsKKwkJRTRENEFCRTIwRDc1NDJGMTAwRjk2ODY5IC8qIEhUTUxQcmVsb2FkVG9rZW5pemVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RDRB
QkUwMEQ3NTQyRjAwMEY5Njg2OSAvKiBIVE1MUHJlbG9hZFRva2VuaXplci5jcHAgKi87IH07CisJ
CUU0RDRBQkUzMEQ3NTQyRjEwMEY5Njg2OSAvKiBIVE1MUHJlbG9hZFRva2VuaXplci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRENEFCRTEwRDc1NDJG
MTAwRjk2ODY5IC8qIEhUTUxQcmVsb2FkVG9rZW5pemVyLmggKi87IH07CiAJCUU0RUVGRkM4MEQz
NDU1MEMwMDQ2OUE1OCAvKiBKU0F1ZGlvQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRFRUZGQzYwRDM0NTUwQzAwNDY5QTU4IC8q
IEpTQXVkaW9Db25zdHJ1Y3Rvci5jcHAgKi87IH07CiAJCUU0RUVGRkM5MEQzNDU1MEMwMDQ2OUE1
OCAvKiBKU0F1ZGlvQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0RUVGRkM3MEQzNDU1MEMwMDQ2OUE1OCAvKiBKU0F1ZGlvQ29uc3Ry
dWN0b3IuaCAqLzsgfTsKIAkJRUQwNDhBQkMwODMzRjEzMjAwNkUxRTY3IC8qIHRleHRBcmVhUmVz
aXplQ29ybmVyLnRpZmYgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEVEMDQ4QUJCMDgzM0YxMzIwMDZFMUU2NyAvKiB0ZXh0QXJlYVJlc2l6ZUNvcm5lci50
aWZmICovOyB9OwpAQCAtNzg4OCw2ICs3ODkwLDggQEAKIAkJRTRCNDIzODYwQ0JGQjczQzAwQUYy
RUNFIC8qIEpTUHJvZ3Jlc3NFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1Byb2dyZXNzRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDMjc5
NTYwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1lZGlhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTRDMjc5NTcwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlhLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1lZGlhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUU0RDRBQkUwMEQ3NTQyRjAwMEY5Njg2OSAvKiBIVE1MUHJlbG9hZFRv
a2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MUHJl
bG9hZFRva2VuaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0RDRBQkUx
MEQ3NTQyRjEwMEY5Njg2OSAvKiBIVE1MUHJlbG9hZFRva2VuaXplci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MUHJlbG9hZFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNEVFRkZDNjBEMzQ1NTBDMDA0NjlBNTggLyogSlNBdWRpb0NvbnN0
cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXVkaW9D
b25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RUVGRkM3MEQz
NDU1MEMwMDQ2OUE1OCAvKiBKU0F1ZGlvQ29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNBdWRpb0NvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUVEMDQ4QUJCMDgzM0YxMzIwMDZFMUU2NyAvKiB0ZXh0QXJlYVJlc2l6ZUNvcm5l
ci50aWZmICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
aW1hZ2UudGlmZjsgcGF0aCA9IHRleHRBcmVhUmVzaXplQ29ybmVyLnRpZmY7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC05Nzc1LDYgKzk3NzksOCBAQAogCQk5M0VFQzFFQzA5QzI4Nzc3
MDBDNTE1RDEgLyogaHRtbCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJRTRENEFCRTAwRDc1NDJGMDAwRjk2ODY5IC8qIEhUTUxQcmVsb2FkVG9rZW5pemVy
LmNwcCAqLywKKwkJCQlFNEQ0QUJFMTBENzU0MkYxMDBGOTY4NjkgLyogSFRNTFByZWxvYWRUb2tl
bml6ZXIuaCAqLywKIAkJCQlBNzc5NzkxMDBENkI5RDBDMDAzODUxQjkgLyogQ2FudmFzUGl4ZWxB
cnJheS5jcHAgKi8sCiAJCQkJQTc3OTc5MTEwRDZCOUQwQzAwMzg1MUI5IC8qIENhbnZhc1BpeGVs
QXJyYXkuaCAqLywKIAkJCQlBNzc5NzkxMjBENkI5RDBDMDAzODUxQjkgLyogQ2FudmFzUGl4ZWxB
cnJheS5pZGwgKi8sCkBAIC0xNDI0Nyw2ICsxNDI1Myw3IEBACiAJCQkJQTc3OTc5MUEwRDZCOUQw
QzAwMzg1MUI5IC8qIEltYWdlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3OTc5MjcwRDZC
OUU2NDAwMzg1MUI5IC8qIEpTQ2FudmFzUGl4ZWxBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc3OTc5MjkwRDZCOUU2NDAwMzg1MUI5IC8qIEpTSW1hZ2VEYXRhLmggaW4gSGVhZGVycyAqLywK
KwkJCQlFNEQ0QUJFMzBENzU0MkYxMDBGOTY4NjkgLyogSFRNTFByZWxvYWRUb2tlbml6ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpAQCAtMTU4NDIsNiArMTU4NDksNyBAQAogCQkJCUE3Nzk3OTI2MEQ2QjlF
NjQwMDM4NTFCOSAvKiBKU0NhbnZhc1BpeGVsQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTc3OTc5MjgwRDZCOUU2NDAwMzg1MUI5IC8qIEpTSW1hZ2VEYXRhLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3NjZGMzUzMEQ2QkRFMzUwMEFCRERCMyAvKiBKU0NhbnZhc1BpeGVsQXJyYXlDdXN0
b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTRENEFCRTIwRDc1NDJGMTAwRjk2ODY5IC8qIEhU
TUxQcmVsb2FkVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxMaW5rRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMaW5r
RWxlbWVudC5jcHAJKHJldmlzaW9uIDMwNjE2KQorKysgV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCBTdHlsZVNoZWV0KiBI
VE1MTGlua0VsZW1lbnQ6OnNoZWV0KCkgY29uCiB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gcmVsQXR0cikgewotICAgICAgICB0b2tlbml6ZVJlbEF0dHJpYnV0ZShhdHRyLT52
YWx1ZSgpKTsKKyAgICAgICAgdG9rZW5pemVSZWxBdHRyaWJ1dGUoYXR0ci0+dmFsdWUoKSwgbV9p
c1N0eWxlU2hlZXQsIG1fYWx0ZXJuYXRlLCBtX2lzSWNvbik7CiAgICAgICAgIHByb2Nlc3MoKTsK
ICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBocmVmQXR0cikgewogICAgICAgICBtX3Vy
bCA9IGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHBhcnNlVVJMKGF0dHItPnZhbHVlKCkpKS5zdHJp
bmcoKTsKQEAgLTEyNCwxNyArMTI0LDIwIEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnUKICAgICB9CiB9CiAKLXZvaWQgSFRNTExpbmtFbGVtZW50Ojp0b2tlbml6ZVJl
bEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIHJlbFN0cikKK3ZvaWQgSFRNTExpbmtFbGVt
ZW50Ojp0b2tlbml6ZVJlbEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIHJlbFN0ciwgYm9v
bCYgc3R5bGVTaGVldCwgYm9vbCYgYWx0ZXJuYXRlLCBib29sJiBpY29uKQogewotICAgIG1faXNT
dHlsZVNoZWV0ID0gbV9pc0ljb24gPSBtX2FsdGVybmF0ZSA9IGZhbHNlOworICAgIHN0eWxlU2hl
ZXQgPSBmYWxzZTsKKyAgICBpY29uID0gZmFsc2U7IAorICAgIGFsdGVybmF0ZSA9IGZhbHNlOwog
ICAgIFN0cmluZyByZWwgPSByZWxTdHIuc3RyaW5nKCkubG93ZXIoKTsKICAgICBpZiAocmVsID09
ICJzdHlsZXNoZWV0IikKLSAgICAgICAgbV9pc1N0eWxlU2hlZXQgPSB0cnVlOworICAgICAgICBz
dHlsZVNoZWV0ID0gdHJ1ZTsKICAgICBlbHNlIGlmIChyZWwgPT0gImljb24iIHx8IHJlbCA9PSAi
c2hvcnRjdXQgaWNvbiIpCi0gICAgICAgIG1faXNJY29uID0gdHJ1ZTsKLSAgICBlbHNlIGlmIChy
ZWwgPT0gImFsdGVybmF0ZSBzdHlsZXNoZWV0IiB8fCByZWwgPT0gInN0eWxlc2hlZXQgYWx0ZXJu
YXRlIikKLSAgICAgICAgbV9pc1N0eWxlU2hlZXQgPSBtX2FsdGVybmF0ZSA9IHRydWU7Ci0gICAg
ZWxzZSB7CisgICAgICAgIGljb24gPSB0cnVlOworICAgIGVsc2UgaWYgKHJlbCA9PSAiYWx0ZXJu
YXRlIHN0eWxlc2hlZXQiIHx8IHJlbCA9PSAic3R5bGVzaGVldCBhbHRlcm5hdGUiKSB7CisgICAg
ICAgIHN0eWxlU2hlZXQgPSB0cnVlOworICAgICAgICBhbHRlcm5hdGUgPSB0cnVlOworICAgIH0g
ZWxzZSB7CiAgICAgICAgIC8vIFRva2VuaXplIHRoZSByZWwgYXR0cmlidXRlIGFuZCBzZXQgYml0
cyBiYXNlZCBvbiBzcGVjaWZpYyBrZXl3b3JkcyB0aGF0IHdlIGZpbmQuCiAgICAgICAgIHJlbC5y
ZXBsYWNlKCdcbicsICcgJyk7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGxpc3Q7CkBAIC0xNDIs
MTEgKzE0NSwxMSBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6dG9rZW5pemVSZWxBdHRyaWJ1CiAg
ICAgICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBsaXN0LmVuZCgpOwog
ICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxpc3QuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgICAgICBpZiAoKml0ID09ICJzdHlsZXNo
ZWV0IikKLSAgICAgICAgICAgICAgICBtX2lzU3R5bGVTaGVldCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgc3R5bGVTaGVldCA9IHRydWU7CiAgICAgICAgICAgICBlbHNlIGlmICgqaXQgPT0gImFs
dGVybmF0ZSIpCi0gICAgICAgICAgICAgICAgbV9hbHRlcm5hdGUgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGFsdGVybmF0ZSA9IHRydWU7CiAgICAgICAgICAgICBlbHNlIGlmICgqaXQgPT0gImlj
b24iKQotICAgICAgICAgICAgICAgIG1faXNJY29uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBp
Y29uID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
TGlua0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50
LmgJKHJldmlzaW9uIDMwNjE2KQorKysgV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9v
bCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25zdDsKICAgICAKLSAgICB2b2lkIHRva2Vu
aXplUmVsQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgcmVsKTsKKyAgICBzdGF0aWMgdm9p
ZCB0b2tlbml6ZVJlbEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBib29sJiBz
dHlsZXNoZWV0LCBib29sJiBhbHRlcm5hdGUsIGJvb2wmIGljb24pOwogCiBwcm90ZWN0ZWQ6CiAg
ICAgQ2FjaGVkQ1NTU3R5bGVTaGVldCogbV9jYWNoZWRTaGVldDsKQEAgLTEwMCwxMCArMTAwLDEw
IEBAIHByb3RlY3RlZDoKICAgICBTdHJpbmcgbV90eXBlOwogICAgIFN0cmluZyBtX21lZGlhOwog
ICAgIGludCBtX2Rpc2FibGVkU3RhdGU7IC8vIDA9dW5zZXQoZGVmYXVsdCksIDE9ZW5hYmxlZCB2
aWEgc2NyaXB0LCAyPWRpc2FibGVkCi0gICAgYm9vbCBtX2xvYWRpbmcgOiAxOwotICAgIGJvb2wg
bV9hbHRlcm5hdGUgOiAxOwotICAgIGJvb2wgbV9pc1N0eWxlU2hlZXQgOiAxOwotICAgIGJvb2wg
bV9pc0ljb24gOiAxOworICAgIGJvb2wgbV9sb2FkaW5nOworICAgIGJvb2wgbV9hbHRlcm5hdGU7
CisgICAgYm9vbCBtX2lzU3R5bGVTaGVldDsKKyAgICBib29sIG1faXNJY29uOwogfTsKIAogfSAv
L25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQcmVsb2FkVG9rZW5pemVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFByZWxvYWRUb2tlbml6ZXIuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9odG1sL0hUTUxQcmVsb2FkVG9rZW5pemVyLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw5MTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiSFRNTFByZWxvYWRUb2tlbml6ZXIuaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgor
I2luY2x1ZGUgIkNhY2hlLmgiCisjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIgorI2lu
Y2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgor
I2luY2x1ZGUgIkNTU0hlbHBlci5oIgorI2luY2x1ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgorI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
I2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKKworI2luY2x1ZGUgIkhUTUxFbnRpdHlOYW1lcy5jIgor
CisjaW5jbHVkZSAiQ1N0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitjb25zdCBjaGFyKiBkZWJ1Z1VSTChEb2N1bWVudCog
ZG9jKQoreworICAgIFN0cmluZyB1cmwgPSBkb2MtPnVybCgpOworICAgIGlmICh1cmwubGVuZ3Ro
KCkgPiA4MCkgeworICAgICAgICB1cmwgPSB1cmwubGVmdCg4MCk7CisgICAgICAgIHVybCArPSAi
Li4uIjsKKyAgICB9CisgICAgc3RhdGljIENTdHJpbmcgYzsKKyAgICBjID0gdXJsLmxhdGluMSgp
OworICAgIHJldHVybiBjLmRhdGEoKTsKK30KKworICAgIAorSFRNTFByZWxvYWRUb2tlbml6ZXI6
OkhUTUxQcmVsb2FkVG9rZW5pemVyKERvY3VtZW50KiBkb2MpCisgICAgOiBtX2luUHJvZ3Jlc3Mo
ZmFsc2UpCisgICAgLCBtX3RpbWVVc2VkKDApCisgICAgLCBtX2RvYyhkb2MpCit7CisgICAgcHJp
bnRmKCJDUkVBVElORyBQUkVMT0FEIFRPS0VOSVpFUiAoJXMpXG4iLCBkZWJ1Z1VSTChtX2RvYykp
OworfQorICAgIAorSFRNTFByZWxvYWRUb2tlbml6ZXI6On5IVE1MUHJlbG9hZFRva2VuaXplcigp
Cit7CisgICAgcHJpbnRmKCJERUxFVElORyBQUkVMT0FEIFRPS0VOSVpFUiAoJXMpXG4iLCBkZWJ1
Z1VSTChtX2RvYykpOworICAgIHByaW50U3RhdHMoKTsKKyAgICBwcmludGYoIlRPVEFMIFRJTUUg
VVNFRCAlLjRmc1xuIiwgbV90aW1lVXNlZCk7CisgICAgY2xlYXJQcmVsb2FkcygpOworfQorICAg
IAordm9pZCBIVE1MUHJlbG9hZFRva2VuaXplcjo6YmVnaW4oKSAKK3sgCisgICAgLy8vcHJpbnRm
KCJQUkVMT0FEIFRPS0VOSVpFUiBCRUdJTiAoJXMpXG4iLCBkZWJ1Z1VSTChtX2RvYykpOworICAg
IEFTU0VSVCghbV9pblByb2dyZXNzKTsgCisgICAgcmVzZXQoKTsgCisgICAgbV9pblByb2dyZXNz
ID0gdHJ1ZTsgCit9CisgICAgCit2b2lkIEhUTUxQcmVsb2FkVG9rZW5pemVyOjplbmQoKSAKK3sg
CisgICAgLy9wcmludGYoIlBSRUxPQUQgVE9LRU5JWkVSIEVORCAoJXMpXG4iLCBkZWJ1Z1VSTCht
X2RvYykpOworICAgIEFTU0VSVChtX2luUHJvZ3Jlc3MpOyAKKyAgICBtX2luUHJvZ3Jlc3MgPSBm
YWxzZTsgCit9CisgICAgCit2b2lkIEhUTUxQcmVsb2FkVG9rZW5pemVyOjpwcmludFN0YXRzKCkK
K3sKKyAgICB1bnNpZ25lZCBzY3JpcHRzID0gMDsKKyAgICB1bnNpZ25lZCBzY3JpcHRNaXNzZXMg
PSAwOworICAgIHVuc2lnbmVkIHN0eWxlc2hlZXRzID0gMDsKKyAgICB1bnNpZ25lZCBzdHlsZXNo
ZWV0TWlzc2VzID0gMDsKKyAgICB1bnNpZ25lZCBpbWFnZXMgPSAwOworICAgIHVuc2lnbmVkIGlt
YWdlTWlzc2VzID0gMDsKKyAgICBMaXN0SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+OjppdGVyYXRv
ciBlbmQgPSBtX3ByZWxvYWRzLmVuZCgpOworICAgIGZvciAoTGlzdEhhc2hTZXQ8Q2FjaGVkUmVz
b3VyY2UqPjo6aXRlcmF0b3IgaXQgPSBtX3ByZWxvYWRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzID0gKml0OworICAgICAgICBpZiAocmVz
LT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlByZWxvYWROb3RSZWZlcmVuY2Vk
KSB7CisgICAgICAgICAgICBwcmludGYoIlVOUkVGRVJFTkNFRCBQUkVMT0FEICVzXG4iLCByZXMt
PnVybCgpLmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgICAgICBjYWNoZSgpLT5yZW1vdmUocmVz
KTsKKyAgICAgICAgfSBlbHNlIGlmIChyZXMtPnByZWxvYWRSZXN1bHQoKSA9PSBDYWNoZWRSZXNv
dXJjZTo6UHJlbG9hZFJlZmVyZW5jZWRXaGlsZUNvbXBsZXRlKSB7CisgICAgICAgICAgICBwcmlu
dGYoIkhJVCBDT01QTEVURSBQUkVMT0FEICVzXG4iLCByZXMtPnVybCgpLmxhdGluMSgpLmRhdGEo
KSk7CisgICAgICAgIH0gZWxzZSBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVz
b3VyY2U6OlByZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2FkaW5nKSB7CisgICAgICAgICAgICBwcmlu
dGYoIkhJVCBMT0FESU5HIFBSRUxPQUQgJXNcbiIsIHJlcy0+dXJsKCkubGF0aW4xKCkuZGF0YSgp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHJlcy0+dHlwZSgpID09IENhY2hl
ZFJlc291cmNlOjpTY3JpcHQpIHsKKyAgICAgICAgICAgIHNjcmlwdHMrKzsKKyAgICAgICAgICAg
IGlmIChyZXMtPnByZWxvYWRSZXN1bHQoKSA8IENhY2hlZFJlc291cmNlOjpQcmVsb2FkUmVmZXJl
bmNlZFdoaWxlTG9hZGluZykKKyAgICAgICAgICAgICAgICBzY3JpcHRNaXNzZXMrKzsKKyAgICAg
ICAgfSBlbHNlIGlmIChyZXMtPnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVl
dCkgeworICAgICAgICAgICAgc3R5bGVzaGVldHMrKzsKKyAgICAgICAgICAgIGlmIChyZXMtPnBy
ZWxvYWRSZXN1bHQoKSA8IENhY2hlZFJlc291cmNlOjpQcmVsb2FkUmVmZXJlbmNlZFdoaWxlTG9h
ZGluZykKKyAgICAgICAgICAgICAgICBzdHlsZXNoZWV0TWlzc2VzKys7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBpbWFnZXMrKzsKKyAgICAgICAgICAgIGlmIChyZXMtPnByZWxvYWRS
ZXN1bHQoKSA8IENhY2hlZFJlc291cmNlOjpQcmVsb2FkUmVmZXJlbmNlZFdoaWxlTG9hZGluZykK
KyAgICAgICAgICAgICAgICBpbWFnZU1pc3NlcysrOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAocmVzLT5lcnJvck9jY3VycmVkKCkpCisgICAgICAgICAgICBjYWNoZSgpLT5yZW1v
dmUocmVzKTsKKyAgICAgICAgCisgICAgICAgIHJlcy0+ZGVjcmVhc2VQcmVsb2FkQ291bnQoKTsK
KyAgICB9CisgICAgbV9wcmVsb2Fkcy5jbGVhcigpOworICAgIAorICAgIGlmIChzY3JpcHRzKQor
ICAgICAgICBwcmludGYoIlNDUklQVFM6ICVkICglZCBoaXRzLCBoaXQgcmF0ZSAlZCUlKVxuIiwg
c2NyaXB0cywgc2NyaXB0cyAtIHNjcmlwdE1pc3NlcywgKHNjcmlwdHMgLSBzY3JpcHRNaXNzZXMp
ICogMTAwIC8gc2NyaXB0cyk7CisgICAgaWYgKHN0eWxlc2hlZXRzKQorICAgICAgICBwcmludGYo
IlNUWUxFU0hFRVRTOiAlZCAoJWQgaGl0cywgaGl0IHJhdGUgJWQlJSlcbiIsIHN0eWxlc2hlZXRz
LCBzdHlsZXNoZWV0cyAtIHN0eWxlc2hlZXRNaXNzZXMsIChzdHlsZXNoZWV0cyAtIHN0eWxlc2hl
ZXRNaXNzZXMpICogMTAwIC8gc3R5bGVzaGVldHMpOworICAgIGlmIChpbWFnZXMpCisgICAgICAg
IHByaW50ZigiSU1BR0VTOiAgJWQgKCVkIGhpdHMsIGhpdCByYXRlICVkJSUpXG4iLCBpbWFnZXMs
IGltYWdlcyAtIGltYWdlTWlzc2VzLCAoaW1hZ2VzIC0gaW1hZ2VNaXNzZXMpICogMTAwIC8gaW1h
Z2VzKTsKK30KKyAgICAKK3ZvaWQgSFRNTFByZWxvYWRUb2tlbml6ZXI6OmNsZWFyUHJlbG9hZHMo
KQoreworICAgIExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj46Oml0ZXJhdG9yIGVuZCA9IG1f
cHJlbG9hZHMuZW5kKCk7CisgICAgZm9yIChMaXN0SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+Ojpp
dGVyYXRvciBpdCA9IG1fcHJlbG9hZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgIENhY2hlZFJlc291cmNlKiByZXMgPSAqaXQ7CisgICAgICAgIGlmIChyZXMtPnByZWxvYWRS
ZXN1bHQoKSA9PSBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZE5vdFJlZmVyZW5jZWQpCisgICAgICAg
ICAgICBjYWNoZSgpLT5yZW1vdmUocmVzKTsKKyAgICAgICAgcmVzLT5kZWNyZWFzZVByZWxvYWRD
b3VudCgpOworICAgIH0KKyAgICBtX3ByZWxvYWRzLmNsZWFyKCk7Cit9CisKK3ZvaWQgSFRNTFBy
ZWxvYWRUb2tlbml6ZXI6OnJlc2V0KCkKK3sKKyAgICBtX3NvdXJjZS5jbGVhcigpOworICAgIAor
ICAgIG1fc3RhdGUgPSBEYXRhOworICAgIG1fZXNjYXBlID0gZmFsc2U7CisgICAgbV9jb250ZW50
TW9kZWwgPSBQQ0RBVEE7CisgICAgbV9jb21tZW50UG9zID0gMDsKKworICAgIG1fY2xvc2VUYWcg
PSBmYWxzZTsKKyAgICBtX3RhZ05hbWUuY2xlYXIoKTsKKyAgICBtX2F0dHJpYnV0ZU5hbWUuY2xl
YXIoKTsKKyAgICBtX2F0dHJpYnV0ZVZhbHVlLmNsZWFyKCk7CisgICAgbV9sYXN0U3RhcnRUYWcg
PSBBdG9taWNTdHJpbmcoKTsKKyAgICAKKyAgICBtX3VybFRvTG9hZCA9ICIiOworICAgIG1fbGlu
a0lzU3R5bGVTaGVldCA9IGZhbHNlOworICAgIG1fbGFzdENoYXJhY3RlckluZGV4ID0gMDsKKyAg
ICBjbGVhckxhc3RDaGFyYWN0ZXJzKCk7CisgICAgCisgICAgbV9jc3NTdGF0ZSA9IENTU0luaXRp
YWw7CisgICAgbV9jc3NSdWxlLmNsZWFyKCk7CisgICAgbV9jc3NSdWxlVmFsdWUuY2xlYXIoKTsK
K30KKyAgICAKK3ZvaWQgSFRNTFByZWxvYWRUb2tlbml6ZXI6OndyaXRlKGNvbnN0IFNlZ21lbnRl
ZFN0cmluZyYgc291cmNlKQoreworICAgIGRvdWJsZSBzdGFydFRpbWUgPSBjdXJyZW50VGltZSgp
OworICAgIHRva2VuaXplKHNvdXJjZSk7CisgICAgbV90aW1lVXNlZCArPSBjdXJyZW50VGltZSgp
IC0gc3RhcnRUaW1lOworfQorICAgIAorc3RhdGljIGlubGluZSBib29sIGlzV2hpdGVzcGFjZShV
Q2hhciBjKQoreworICAgIHJldHVybiBjID09ICcgJyB8fCBjID09ICdcbicgfHwgYyA9PSAnXHIn
IHx8IGMgPT0gJ1x0JzsKK30KKyAgICAKK2lubGluZSB2b2lkIEhUTUxQcmVsb2FkVG9rZW5pemVy
OjpjbGVhckxhc3RDaGFyYWN0ZXJzKCkKK3sKKyAgICBtZW1zZXQobV9sYXN0Q2hhcmFjdGVycywg
MCwgbGFzdENoYXJhY3RlcnNCdWZmZXJTaXplICogc2l6ZW9mKFVDaGFyKSk7Cit9CisgICAgCitp
bmxpbmUgdm9pZCBIVE1MUHJlbG9hZFRva2VuaXplcjo6cmVtZW1iZXJDaGFyYWN0ZXIoVUNoYXIg
YykKK3sKKyAgICBtX2xhc3RDaGFyYWN0ZXJJbmRleCA9IChtX2xhc3RDaGFyYWN0ZXJJbmRleCAr
IDEpICUgbGFzdENoYXJhY3RlcnNCdWZmZXJTaXplOworICAgIG1fbGFzdENoYXJhY3RlcnNbbV9s
YXN0Q2hhcmFjdGVySW5kZXhdID0gYzsKK30KKyAgICAKK2lubGluZSBib29sIEhUTUxQcmVsb2Fk
VG9rZW5pemVyOjpsYXN0Q2hhcmFjdGVyc01hdGNoKGNvbnN0IGNoYXIqIGNoYXJzLCB1bnNpZ25l
ZCBjb3VudCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBwb3MgPSBtX2xhc3RDaGFyYWN0ZXJJbmRl
eDsKKyAgICB3aGlsZSAoY291bnQpIHsKKyAgICAgICAgaWYgKGNoYXJzW2NvdW50IC0gMV0gIT0g
bV9sYXN0Q2hhcmFjdGVyc1twb3NdKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAtLWNvdW50OworICAgICAgICBpZiAoIXBvcykKKyAgICAgICAgICAgIHBvcyA9IGxhc3RDaGFy
YWN0ZXJzQnVmZmVyU2l6ZTsKKyAgICAgICAgLS1wb3M7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorICAgIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsZWdhbEVudGl0eUZvcih1bnNpZ25l
ZCB2YWx1ZSkKK3sKKyAgICAvLyBGSVhNRSB0aGVyZSBpcyBhIHRhYmxlIGZvciBtb3JlIGV4Y2Vw
dGlvbnMgaW4gdGhlIHNwZWMKKyAgICBpZiAodmFsdWUgPT0gMCB8fCB2YWx1ZSA+IDB4MTBGRkZG
IHx8ICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhERkZGKSkKKyAgICAgICAgcmV0dXJu
IDB4RkZGRDsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisgICAgCit1bnNpZ25lZCBIVE1MUHJlbG9h
ZFRva2VuaXplcjo6Y29uc3VtZUVudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgYm9vbCYg
bm90RW5vdWdoQ2hhcmFjdGVycykKK3sKKyAgICBlbnVtIEVudGl0eVN0YXRlIHsKKyAgICAgICAg
SW5pdGlhbCwKKyAgICAgICAgTnVtYmVyVHlwZSwKKyAgICAgICAgTWF5YmVIZXgsCisgICAgICAg
IEhleCwKKyAgICAgICAgRGVjaW1hbCwKKyAgICAgICAgTmFtZWQKKyAgICB9OworICAgIEVudGl0
eVN0YXRlIGVudGl0eVN0YXRlID0gSW5pdGlhbDsKKyAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwor
ICAgIFZlY3RvcjxVQ2hhciwgMTA+IHNlZW5DaGFyczsKKyAgICBWZWN0b3I8Y2hhciwgMTA+IGVu
dGl0eU5hbWU7CisgICAgCisgICAgd2hpbGUgKCFzb3VyY2UuaXNFbXB0eSgpKSB7CisgICAgICAg
IFVDaGFyIGNjID0gKnNvdXJjZTsKKyAgICAgICAgc2VlbkNoYXJzLmFwcGVuZChjYyk7CisgICAg
ICAgIHN3aXRjaCAoZW50aXR5U3RhdGUpIHsKKyAgICAgICAgY2FzZSBJbml0aWFsOgorICAgICAg
ICAgICAgaWYgKGlzV2hpdGVzcGFjZShjYykgfHwgY2MgPT0gJzwnIHx8IGNjID09ICcmJykgewor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAn
IycpIAorICAgICAgICAgICAgICAgIGVudGl0eVN0YXRlID0gTnVtYmVyVHlwZTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKChjYyA+PSAnYScgJiYgY2MgPD0gJ3onKSB8fCAoY2MgPj0gJ0EnICYmIGNj
IDw9ICdaJykpIHsKKyAgICAgICAgICAgICAgICBlbnRpdHlOYW1lLmFwcGVuZChjYyk7CisgICAg
ICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBOYW1lZDsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBOdW1iZXJUeXBlOgorICAgICAgICAgICAgaWYgKGNjID09ICd4JyB8
fCBjYyA9PSAnWCcpCisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBNYXliZUhleDsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpIHsKKyAgICAgICAgICAg
ICAgICBlbnRpdHlTdGF0ZSA9IERlY2ltYWw7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY2Mg
LSAnMCc7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNvdXJjZS5wdXNo
KCcjJyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNYXliZUhleDoKKyAgICAgICAgICAgIGlmIChjYyA+
PSAnMCcgJiYgY2MgPD0gJzknKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNjIC0gJzAnOwor
ICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0gJ2EnICYmIGNjIDw9ICdmJykKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSAxMCArIGNjIC0gJ2EnOworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0g
J0EnICYmIGNjIDw9ICdGJykKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAxMCArIGNjIC0gJ0En
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc291cmNlLnB1c2goc2VlbkNo
YXJzWzFdKTsKKyAgICAgICAgICAgICAgICBzb3VyY2UucHVzaCgnIycpOworICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBI
ZXg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBIZXg6CisgICAgICAgICAgICBp
ZiAoY2MgPj0gJzAnICYmIGNjIDw9ICc5JykKKyAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1
bHQgKiAxNiArIGNjIC0gJzAnOworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0gJ2EnICYmIGNj
IDw9ICdmJykKKyAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxNiArIDEwICsgY2Mg
LSAnYSc7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA+PSAnQScgJiYgY2MgPD0gJ0YnKQorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDE2ICsgMTAgKyBjYyAtICdBJzsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGNjID09ICc7JykgeworICAgICAgICAgICAgICAgIHNvdXJjZS5hZHZh
bmNlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxlZ2FsRW50aXR5Rm9yKHJlc3VsdCk7Cisg
ICAgICAgICAgICB9IGVsc2UgCisgICAgICAgICAgICAgICAgcmV0dXJuIGxlZ2FsRW50aXR5Rm9y
KHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEZWNpbWFsOgorICAg
ICAgICAgICAgaWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpCisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gcmVzdWx0ICogMTAgKyBjYyAtICcwJzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNjID09
ICc7JykgeworICAgICAgICAgICAgICAgIHNvdXJjZS5hZHZhbmNlKCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGxlZ2FsRW50aXR5Rm9yKHJlc3VsdCk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbGVnYWxFbnRpdHlGb3IocmVzdWx0KTsKKyAgICAgICAgICAg
IGJyZWFrOyAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIE5hbWVkOgorICAgICAgICAgICAg
Ly8gVGhpcyBpcyB0aGUgYXR0cmlidXRlIG9ubHkgdmVyc2lvbiwgZ2VuZXJpYyB2ZXJzaW9uIG1h
dGNoZXMgc29tZXdoYXQgZGlmZmVyZW50bHkKKyAgICAgICAgICAgIHdoaWxlIChlbnRpdHlOYW1l
LnNpemUoKSA8PSA4KSB7CisgICAgICAgICAgICAgICAgaWYgKGNjID09ICc7JykgeworICAgICAg
ICAgICAgICAgICAgICBjb25zdCBFbnRpdHkqIGVudGl0eSA9IGZpbmRFbnRpdHkoZW50aXR5TmFt
ZS5kYXRhKCksIGVudGl0eU5hbWUuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVu
dGl0eSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmFkdmFuY2UoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRpdHktPmNvZGU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICghKGNjID49ICdhJyAmJiBjYyA8PSAneicpICYmICEoY2MgPj0gJ0En
ICYmIGNjIDw9ICdaJykgJiYgIShjYyA+PSAnMCcgJiYgY2MgPD0gJzknKSkgeworICAgICAgICAg
ICAgICAgICAgICBjb25zdCBFbnRpdHkqIGVudGl0eSA9IGZpbmRFbnRpdHkoZW50aXR5TmFtZS5k
YXRhKCksIGVudGl0eU5hbWUuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVudGl0
eSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRpdHktPmNvZGU7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bnRpdHlOYW1lLmFwcGVuZChjYyk7CisgICAgICAgICAgICAgICAgc291cmNlLmFkdmFuY2UoKTsK
KyAgICAgICAgICAgICAgICBpZiAoc291cmNlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAg
ICAgZ290byBvdXRPZkNoYXJhY3RlcnM7CisgICAgICAgICAgICAgICAgY2MgPSAqc291cmNlOwor
ICAgICAgICAgICAgICAgIHNlZW5DaGFycy5hcHBlbmQoY2MpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHNlZW5DaGFycy5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICBzb3Vy
Y2UucHVzaChzZWVuQ2hhcnNbMF0pOworICAgICAgICAgICAgZWxzZSBpZiAoc2VlbkNoYXJzLnNp
emUoKSA9PSAzKSB7CisgICAgICAgICAgICAgICAgc291cmNlLnB1c2goc2VlbkNoYXJzWzFdKTsK
KyAgICAgICAgICAgICAgICBzb3VyY2UucHVzaChzZWVuQ2hhcnNbMF0pOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgc291cmNlLnByZXBlbmQoU2VnbWVudGVkU3RyaW5nKFN0
cmluZyhzZWVuQ2hhcnMuZGF0YSgpLCBzZWVuQ2hhcnMuc2l6ZSgpIC0gMSkpKTsKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHNvdXJjZS5hZHZhbmNlKCk7CisgICAg
fQorb3V0T2ZDaGFyYWN0ZXJzOgorICAgIG5vdEVub3VnaENoYXJhY3RlcnMgPSB0cnVlOworICAg
IHNvdXJjZS5wcmVwZW5kKFNlZ21lbnRlZFN0cmluZyhTdHJpbmcoc2VlbkNoYXJzLmRhdGEoKSwg
c2VlbkNoYXJzLnNpemUoKSkpKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBIVE1MUHJlbG9h
ZFRva2VuaXplcjo6dG9rZW5pemUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCit7Cisg
ICAgQVNTRVJUKG1faW5Qcm9ncmVzcyk7CisgICAgCisgICAgbV9zb3VyY2UuYXBwZW5kKHNvdXJj
ZSk7CisKKyAgICAvLyBUaGlzIGlzIGEgc2ltcGxpZmllZCBIVE1MNSBUb2tlbml6ZXIKKyAgICB3
aGlsZSAoIW1fc291cmNlLmlzRW1wdHkoKSkgeworICAgICAgICBVQ2hhciBjYyA9ICptX3NvdXJj
ZTsKKyAgICAgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgICAgIGNhc2UgRGF0YToKKyAgICAg
ICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgcmVtZW1iZXJDaGFyYWN0ZXIoY2Mp
OworICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnJicpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG1fY29udGVudE1vZGVsID09IFBDREFUQSB8fCBtX2NvbnRlbnRNb2RlbCA9PSBSQ0RBVEEp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBFbnRpdHlEYXRhOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGNjID09ICctJykgeworICAgICAgICAgICAgICAgICAgICBpZiAo
KG1fY29udGVudE1vZGVsID09IFJDREFUQSB8fCBtX2NvbnRlbnRNb2RlbCA9PSBDREFUQSkgJiYg
IW1fZXNjYXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdENoYXJhY3RlcnNN
YXRjaCgiPCEtLSIsIDQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZXNjYXBlID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
Y2MgPT0gJzwnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2NvbnRlbnRNb2RlbCA9PSBQ
Q0RBVEEgfHwgKChtX2NvbnRlbnRNb2RlbCA9PSBSQ0RBVEEgfHwgbV9jb250ZW50TW9kZWwgPT0g
Q0RBVEEpICYmICFtX2VzY2FwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUg
PSBUYWdPcGVuOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNjID09ICc+JykgeworICAgICAg
ICAgICAgICAgICAgICAgaWYgKChtX2NvbnRlbnRNb2RlbCA9PSBSQ0RBVEEgfHwgbV9jb250ZW50
TW9kZWwgPT0gQ0RBVEEpICYmIG1fZXNjYXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGxhc3RDaGFyYWN0ZXJzTWF0Y2goIi0tPiIsIDMpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2VzY2FwZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbWl0Q2hhcmFjdGVyKGNjKTsKKyAgICAgICAg
ICAgICAgICBtX3NvdXJjZS5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgaWYgKG1fc291cmNl
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICBjYyA9ICptX3NvdXJjZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEVudGl0eURhdGE6CisgICAgICAgICAgICAvLyBzaG91bGQgdHJ5IHRvIGNvbnN1
bWUgdGhlIGVudGl0eSBidXQgd2UgZG9uJ3QgY2FyZQorICAgICAgICAgICAgbV9zdGF0ZSA9IERh
dGE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUYWdPcGVuOgorICAgICAgICAg
ICAgaWYgKG1fY29udGVudE1vZGVsID09IFJDREFUQSB8fCBtX2NvbnRlbnRNb2RlbCA9PSBDREFU
QSkgeworICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnLycpCisgICAgICAgICAgICAgICAgICAg
IG1fc3RhdGUgPSBDbG9zZVRhZ09wZW47CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fY29udGVudE1v
ZGVsID09IFBDREFUQSkgeworICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnIScpCisgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUgPSBNYXJrdXBEZWNsYXJhdGlvbk9wZW47CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoY2MgPT0gJy8nKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0g
Q2xvc2VUYWdPcGVuOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNjID49ICdBJyAmJiBjYyA8
PSAnWicpIHsKKyAgICAgICAgICAgICAgICAgICAgbV90YWdOYW1lLmNsZWFyKCk7CisgICAgICAg
ICAgICAgICAgICAgIG1fdGFnTmFtZS5hcHBlbmQoY2MgKyAweDIwKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9jbG9zZVRhZyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0g
VGFnTmFtZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNjID49ICdhJyAmJiBjYyA8PSAn
eicpIHsKKyAgICAgICAgICAgICAgICAgICAgbV90YWdOYW1lLmNsZWFyKCk7CisgICAgICAgICAg
ICAgICAgICAgIG1fdGFnTmFtZS5hcHBlbmQoY2MpOworICAgICAgICAgICAgICAgICAgICBtX2Ns
b3NlVGFnID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBUYWdOYW1lOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gJz4nKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gJz8n
KSB7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBCb2d1c0NvbW1lbnQ7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENsb3NlVGFnT3BlbjoKKyAg
ICAgICAgICAgIGlmIChtX2NvbnRlbnRNb2RlbCA9PSBSQ0RBVEEgfHwgbV9jb250ZW50TW9kZWwg
PT0gQ0RBVEEpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fbGFzdFN0YXJ0VGFnLmxlbmd0aCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1f
c291cmNlLmxlbmd0aCgpIDwgbV9sYXN0U3RhcnRUYWcubGVuZ3RoKCkgKyAxKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiB0bXBTdHJp
bmc7CisgICAgICAgICAgICAgICAgVUNoYXIgdG1wQ2hhcjsKKyAgICAgICAgICAgICAgICBib29s
IG1hdGNoID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwg
bV9sYXN0U3RhcnRUYWcubGVuZ3RoKCkgKyAxOyBuKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
dG1wQ2hhciA9IHVfdG9sb3dlcigqbV9zb3VyY2UpOworICAgICAgICAgICAgICAgICAgICBpZiAo
biA8IG1fbGFzdFN0YXJ0VGFnLmxlbmd0aCgpICYmIHRtcENoYXIgIT0gbV9sYXN0U3RhcnRUYWdb
bl0pCisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICB0bXBTdHJpbmcuYXBwZW5kKHRtcENoYXIpOworICAgICAgICAgICAgICAgICAgICBt
X3NvdXJjZS5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1f
c291cmNlLnByZXBlbmQoU2VnbWVudGVkU3RyaW5nKFN0cmluZyh0bXBTdHJpbmcuZGF0YSgpLCB0
bXBTdHJpbmcuc2l6ZSgpKSkpOworICAgICAgICAgICAgICAgIGlmICghbWF0Y2ggfHwgKCFpc1do
aXRlc3BhY2UodG1wQ2hhcikgJiYgdG1wQ2hhciAhPSAnPicgJiB0bXBDaGFyICE9ICcvJykpIHsK
KyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChjYyA+PSAnQScgJiYgY2MgPD0gJ1onKSB7CisgICAgICAgICAgICAgICAgbV90YWdOYW1l
LmNsZWFyKCk7CisgICAgICAgICAgICAgICAgbV90YWdOYW1lLmFwcGVuZChjYyArIDB4MjApOwor
ICAgICAgICAgICAgICAgIG1fY2xvc2VUYWcgPSB0cnVlOworICAgICAgICAgICAgICAgIG1fc3Rh
dGUgPSBUYWdOYW1lOworICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA+PSAnYScgJiYgY2MgPD0g
J3onKSB7CisgICAgICAgICAgICAgICAgbV90YWdOYW1lLmNsZWFyKCk7CisgICAgICAgICAgICAg
ICAgbV90YWdOYW1lLmFwcGVuZChjYyk7CisgICAgICAgICAgICAgICAgbV9jbG9zZVRhZyA9IHRy
dWU7CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IFRhZ05hbWU7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKGNjID09ICc+JykgeworICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOworICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEJvZ3VzQ29tbWVudDsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRhZ05hbWU6CisgICAgICAgICAgICB3
aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIGlmIChpc1doaXRlc3BhY2UoY2MpKSB7CisgICAg
ICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBCZWZvcmVBdHRyaWJ1dGVOYW1lOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KGNjID09ICc+JykgeworICAgICAgICAgICAgICAgICAgICBlbWl0VGFnKCk7CisgICAgICAgICAg
ICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNjID09ICcvJykgeworICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlID0gQmVmb3JlQXR0cmlidXRlTmFtZTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChj
YyA+PSAnQScgJiYgY2MgPD0gJ1onKQorICAgICAgICAgICAgICAgICAgICBtX3RhZ05hbWUuYXBw
ZW5kKGNjICsgMHgyMCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBtX3RhZ05hbWUuYXBwZW5kKGNjKTsKKyAgICAgICAgICAgICAgICBtX3NvdXJjZS5hZHZhbmNl
KCk7CisgICAgICAgICAgICAgICAgaWYgKG1fc291cmNlLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGNjID0gKm1fc291cmNlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQmVmb3JlQXR0cmlidXRl
TmFtZToKKyAgICAgICAgICAgIGlmIChpc1doaXRlc3BhY2UoY2MpKQorICAgICAgICAgICAgICAg
IDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc+JykgeworICAgICAgICAgICAgICAgIGVt
aXRUYWcoKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY2MgPj0gJ0EnICYmIGNjIDw9ICdaJykgeworICAgICAgICAgICAgICAgIG1fYXR0
cmlidXRlTmFtZS5jbGVhcigpOworICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlVmFsdWUuY2xl
YXIoKTsKKyAgICAgICAgICAgICAgICBtX2F0dHJpYnV0ZU5hbWUuYXBwZW5kKGNjICsgMHgyMCk7
CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEF0dHJpYnV0ZU5hbWU7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKGNjID09ICcvJykKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBtX2F0dHJpYnV0ZU5hbWUuY2xlYXIoKTsKKyAgICAgICAgICAg
ICAgICBtX2F0dHJpYnV0ZVZhbHVlLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1
dGVOYW1lLmFwcGVuZChjYyk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEF0dHJpYnV0ZU5h
bWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBdHRy
aWJ1dGVOYW1lOgorICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBpZiAo
aXNXaGl0ZXNwYWNlKGNjKSkgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gQWZ0ZXJB
dHRyaWJ1dGVOYW1lOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgaWYgKGNjID09ICc9JykgeworICAgICAgICAgICAgICAgICAg
ICBtX3N0YXRlID0gQmVmb3JlQXR0cmlidXRlVmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJz4nKSB7
CisgICAgICAgICAgICAgICAgICAgIGVtaXRUYWcoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9z
dGF0ZSA9IERhdGE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0gCisgICAgICAgICAgICAgICAgaWYgKGNjID09ICcvJykgeworICAgICAgICAgICAgICAgICAg
ICBtX3N0YXRlID0gQmVmb3JlQXR0cmlidXRlTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjYyA+PSAnQScgJiYg
Y2MgPD0gJ1onKQorICAgICAgICAgICAgICAgICAgICBtX2F0dHJpYnV0ZU5hbWUuYXBwZW5kKGNj
ICsgMHgyMCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtX2F0
dHJpYnV0ZU5hbWUuYXBwZW5kKGNjKTsKKyAgICAgICAgICAgICAgICBtX3NvdXJjZS5hZHZhbmNl
KCk7CisgICAgICAgICAgICAgICAgaWYgKG1fc291cmNlLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGNjID0gKm1fc291cmNlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWZ0ZXJBdHRyaWJ1dGVO
YW1lOgorICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjYykpCisgICAgICAgICAgICAgICAg
OworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPT0gJz0nKQorICAgICAgICAgICAgICAgIG1fc3Rh
dGUgPSBCZWZvcmVBdHRyaWJ1dGVWYWx1ZTsgCisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAn
PicpIHsKKyAgICAgICAgICAgICAgICBlbWl0VGFnKCk7CisgICAgICAgICAgICAgICAgbV9zdGF0
ZSA9IERhdGE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNjID49ICdBJyAmJiBjYyA8PSAnWicp
IHsKKyAgICAgICAgICAgICAgICBtX2F0dHJpYnV0ZU5hbWUuY2xlYXIoKTsKKyAgICAgICAgICAg
ICAgICBtX2F0dHJpYnV0ZVZhbHVlLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1
dGVOYW1lLmFwcGVuZChjYyArIDB4MjApOworICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBBdHRy
aWJ1dGVOYW1lOworICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnLycpCisgICAgICAgICAg
ICAgICAgbV9zdGF0ZSA9IEJlZm9yZUF0dHJpYnV0ZU5hbWU7CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBtX2F0dHJpYnV0ZU5hbWUuY2xlYXIoKTsKKyAgICAgICAgICAgICAg
ICBtX2F0dHJpYnV0ZVZhbHVlLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVO
YW1lLmFwcGVuZChjYyk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEF0dHJpYnV0ZU5hbWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCZWZvcmVB
dHRyaWJ1dGVWYWx1ZToKKyAgICAgICAgICAgIGlmIChpc1doaXRlc3BhY2UoY2MpKQorICAgICAg
ICAgICAgICAgIDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICciJykKKyAgICAgICAgICAg
ICAgICBtX3N0YXRlID0gQXR0cmlidXRlVmFsdWVEb3VibGVRdW90ZWQ7CisgICAgICAgICAgICBl
bHNlIGlmIChjYyA9PSAnJicpIHsKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gQXR0cmlidXRl
VmFsdWVVbnF1b3RlZDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY2MgPT0gJ1wnJykKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gQXR0cmlidXRl
VmFsdWVTaW5nbGVRdW90ZWQ7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnPicpIHsKKyAg
ICAgICAgICAgICAgICBlbWl0VGFnKCk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlVmFsdWUu
YXBwZW5kKGNjKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gQXR0cmlidXRlVmFsdWVVbnF1
b3RlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEF0
dHJpYnV0ZVZhbHVlRG91YmxlUXVvdGVkOgorICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY2MgPT0gJyInKSB7CisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NB
dHRyaWJ1dGUoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEJlZm9yZUF0dHJpYnV0
ZU5hbWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoY2MgPT0gJyYnKSB7CisgICAgICAgICAgICAgICAgICAgIG1fc3Rh
dGVCZWZvcmVFbnRpdHlJbkF0dHJpYnV0ZVZhbHVlID0gbV9zdGF0ZTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9zdGF0ZSA9IEVudGl0eUluQXR0cmlidXRlVmFsdWU7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1
dGVWYWx1ZS5hcHBlbmQoY2MpOworICAgICAgICAgICAgICAgIG1fc291cmNlLmFkdmFuY2UoKTsK
KyAgICAgICAgICAgICAgICBpZiAobV9zb3VyY2UuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY2MgPSAqbV9zb3VyY2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBdHRyaWJ1dGVWYWx1ZVNpbmds
ZVF1b3RlZDoKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgaWYgKGNj
ID09ICdcJycpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0F0dHJpYnV0ZSgpOworICAg
ICAgICAgICAgICAgICAgICBtX3N0YXRlID0gQmVmb3JlQXR0cmlidXRlTmFtZTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
IChjYyA9PSAnJicpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZUJlZm9yZUVudGl0eUlu
QXR0cmlidXRlVmFsdWUgPSBtX3N0YXRlOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0g
RW50aXR5SW5BdHRyaWJ1dGVWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICBtX2F0dHJpYnV0ZVZhbHVlLmFwcGVuZChj
Yyk7CisgICAgICAgICAgICAgICAgbV9zb3VyY2UuYWR2YW5jZSgpOworICAgICAgICAgICAgICAg
IGlmIChtX3NvdXJjZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICBjYyA9ICptX3NvdXJjZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQ6CisgICAgICAgICAg
ICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIGlmIChpc1doaXRlc3BhY2UoY2MpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHByb2Nlc3NBdHRyaWJ1dGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9zdGF0ZSA9IEJlZm9yZUF0dHJpYnV0ZU5hbWU7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJyYnKSB7
CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGVCZWZvcmVFbnRpdHlJbkF0dHJpYnV0ZVZhbHVl
ID0gbV9zdGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEVudGl0eUluQXR0cmli
dXRlVmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgICAgIHBy
b2Nlc3NBdHRyaWJ1dGUoKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdFRhZygpOworICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlVmFsdWUuYXBw
ZW5kKGNjKTsKKyAgICAgICAgICAgICAgICBtX3NvdXJjZS5hZHZhbmNlKCk7CisgICAgICAgICAg
ICAgICAgaWYgKG1fc291cmNlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIGNjID0gKm1fc291cmNlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW50aXR5SW5BdHRyaWJ1dGVWYWx1ZTogCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbCBub3RFbm91Z2hDaGFyYWN0ZXJzID0gZmFs
c2U7IAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGVudGl0eSA9IGNvbnN1bWVFbnRpdHkobV9z
b3VyY2UsIG5vdEVub3VnaENoYXJhY3RlcnMpOworICAgICAgICAgICAgICAgIGlmIChub3RFbm91
Z2hDaGFyYWN0ZXJzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgaWYgKGVudGl0eSA+IDB4RkZGRikgeworICAgICAgICAgICAgICAgICAgICBtX2F0dHJpYnV0
ZVZhbHVlLmFwcGVuZChVMTZfTEVBRChlbnRpdHkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9h
dHRyaWJ1dGVWYWx1ZS5hcHBlbmQoVTE2X1RSQUlMKGVudGl0eSkpOworICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoZW50aXR5KQorICAgICAgICAgICAgICAgICAgICBtX2F0dHJpYnV0ZVZhbHVl
LmFwcGVuZChlbnRpdHkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgbV9hdHRyaWJ1dGVWYWx1ZS5hcHBlbmQoJyYnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG1fc3RhdGUgPSBtX3N0YXRlQmVmb3JlRW50aXR5SW5BdHRyaWJ1dGVWYWx1ZTsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYXNlIEJvZ3VzQ29tbWVudDoKKyAgICAgICAgICAg
IHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgaWYgKGNjID09ICc+JykgeworICAgICAgICAg
ICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fc291cmNlLmFkdmFuY2UoKTsKKyAg
ICAgICAgICAgICAgICBpZiAobV9zb3VyY2UuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgY2MgPSAqbV9zb3VyY2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNYXJrdXBEZWNsYXJhdGlvbk9wZW46
IHsKKyAgICAgICAgICAgIGlmIChjYyA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9z
b3VyY2UubGVuZ3RoKCkgPCAyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgbV9zb3VyY2UuYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIGNjID0gKm1fc291
cmNlOworICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnLScpCisgICAgICAgICAgICAgICAgICAg
IG1fc3RhdGUgPSBDb21tZW50U3RhcnQ7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUgPSBCb2d1c0NvbW1lbnQ7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vfSBlbHNlIGlmIChj
YyA9PSAnRCcpIHsKKyAgICAgICAgICAgICAgICAvLyBlbnRlciBET0NUWVBFIHN0YXRlCisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBCb2d1c0NvbW1lbnQ7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvbW1lbnRTdGFydDoKKyAgICAgICAgICAg
IGlmIChjYyA9PSAnLScpCisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IENvbW1lbnRTdGFydERh
c2g7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnPicpCisgICAgICAgICAgICAgICAgbV9z
dGF0ZSA9IERhdGE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9
IENvbW1lbnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb21tZW50U3RhcnRE
YXNoOgorICAgICAgICAgICAgaWYgKGNjID09ICctJykKKyAgICAgICAgICAgICAgICBtX3N0YXRl
ID0gQ29tbWVudEVuZDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc+JykKKyAgICAgICAg
ICAgICAgICBtX3N0YXRlID0gRGF0YTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBtX3N0YXRlID0gQ29tbWVudDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENv
bW1lbnQ6CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIGlmIChjYyA9
PSAnLScpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IENvbW1lbnRFbmREYXNoOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgbV9zb3VyY2UuYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIGlmIChtX3NvdXJjZS5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBj
YyA9ICptX3NvdXJjZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENvbW1lbnRFbmREYXNoOgorICAgICAgICAgICAgaWYgKGNjID09ICctJykKKyAgICAg
ICAgICAgICAgICBtX3N0YXRlID0gQ29tbWVudEVuZDsKKyAgICAgICAgICAgIGVsc2UgCisgICAg
ICAgICAgICAgICAgbV9zdGF0ZSA9IENvbW1lbnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDb21tZW50RW5kOgorICAgICAgICAgICAgaWYgKGNjID09ICc+JykKKyAgICAgICAg
ICAgICAgICBtX3N0YXRlID0gRGF0YTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICctJykK
KyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgIG1f
c3RhdGUgPSBDb21tZW50OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
bV9zb3VyY2UuYWR2YW5jZSgpOworICAgIH0KK30KKyAgICAKK3ZvaWQgSFRNTFByZWxvYWRUb2tl
bml6ZXI6OnByb2Nlc3NBdHRyaWJ1dGUoKQoreworICAgIEF0b21pY1N0cmluZyB0YWcgPSBBdG9t
aWNTdHJpbmcobV90YWdOYW1lLmRhdGEoKSwgbV90YWdOYW1lLnNpemUoKSk7CisgICAgQXRvbWlj
U3RyaW5nIGF0dHJpYnV0ZSA9IEF0b21pY1N0cmluZyhtX2F0dHJpYnV0ZU5hbWUuZGF0YSgpLCBt
X2F0dHJpYnV0ZU5hbWUuc2l6ZSgpKTsKKyAgICAKKyAgICBTdHJpbmcgdmFsdWUobV9hdHRyaWJ1
dGVWYWx1ZS5kYXRhKCksIG1fYXR0cmlidXRlVmFsdWUuc2l6ZSgpKTsKKyAgICBpZiAodGFnID09
IHNjcmlwdFRhZyB8fCB0YWcgPT0gaW1nVGFnKSB7CisgICAgICAgIGlmIChhdHRyaWJ1dGUgPT0g
c3JjQXR0ciAmJiBtX3VybFRvTG9hZC5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX3VybFRvTG9h
ZCA9IHBhcnNlVVJMKHZhbHVlKTsKKyAgICB9IGVsc2UgaWYgKHRhZyA9PSBsaW5rVGFnKSB7Cisg
ICAgICAgIGlmIChhdHRyaWJ1dGUgPT0gaHJlZkF0dHIgJiYgbV91cmxUb0xvYWQuaXNFbXB0eSgp
KQorICAgICAgICAgICAgbV91cmxUb0xvYWQgPSBwYXJzZVVSTCh2YWx1ZSk7CisgICAgICAgIGVs
c2UgaWYgKGF0dHJpYnV0ZSA9PSByZWxBdHRyKSB7CisgICAgICAgICAgICBib29sIHN0eWxlU2hl
ZXQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJvb2wgYWx0ZXJuYXRlID0gZmFsc2U7CisgICAgICAg
ICAgICBib29sIGljb24gPSBmYWxzZTsKKyAgICAgICAgICAgIEhUTUxMaW5rRWxlbWVudDo6dG9r
ZW5pemVSZWxBdHRyaWJ1dGUodmFsdWUsIHN0eWxlU2hlZXQsIGFsdGVybmF0ZSwgaWNvbik7Cisg
ICAgICAgICAgICBtX2xpbmtJc1N0eWxlU2hlZXQgPSBzdHlsZVNoZWV0ICYmICFhbHRlcm5hdGUg
JiYgIWljb247CisgICAgICAgIH0KKyAgICB9Cit9CisgICAgCitpbmxpbmUgdm9pZCBIVE1MUHJl
bG9hZFRva2VuaXplcjo6ZW1pdENoYXJhY3RlcihVQ2hhciBjKQoreworICAgIGlmIChtX2NvbnRl
bnRNb2RlbCA9PSBDREFUQSAmJiBtX2xhc3RTdGFydFRhZyA9PSBzdHlsZVRhZykgCisgICAgICAg
IHRva2VuaXplQ1NTKGMpOworfQorICAgIAoraW5saW5lIHZvaWQgSFRNTFByZWxvYWRUb2tlbml6
ZXI6OnRva2VuaXplQ1NTKFVDaGFyIGMpCit7ICAgIAorICAgIC8vIFdlIGFyZSBqdXN0IGludGVy
ZXN0ZWQgaW4gQGltcG9ydCBydWxlcywgbm8gbmVlZCBmb3IgcmVhbCB0b2tlbml6YXRpb24gaGVy
ZQorICAgIC8vIFNlYXJjaGluZyBmb3Igb3RoZXIgdHlwZXMgb2YgcmVzb3VyY2VzIGlzIHByb2Jh
Ymx5IGxvdyBwYXlvZmYKKyAgICBzd2l0Y2ggKG1fY3NzU3RhdGUpIHsKKyAgICBjYXNlIENTU0lu
aXRpYWw6CisgICAgICAgIGlmIChjID09ICdAJykKKyAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBD
U1NSdWxlU3RhcnQ7CisgICAgICAgIGVsc2UgaWYgKGMgPT0gJy8nKQorICAgICAgICAgICAgbV9j
c3NTdGF0ZSA9IENTU01heWJlQ29tbWVudDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NN
YXliZUNvbW1lbnQ6CisgICAgICAgIGlmIChjID09ICcqJykKKyAgICAgICAgICAgIG1fY3NzU3Rh
dGUgPSBDU1NDb21tZW50OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Nzc1N0YXRlID0g
Q1NTSW5pdGlhbDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NDb21tZW50OgorICAgICAg
ICBpZiAoYyA9PSAnKicpCisgICAgICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTTWF5YmVDb21tZW50
RW5kOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU01heWJlQ29tbWVudEVuZDoKKyAgICAg
ICAgaWYgKGMgPT0gJy8nKQorICAgICAgICAgICAgbV9jc3NTdGF0ZSA9IENTU0luaXRpYWw7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NDb21tZW50OworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENTU1J1bGVTdGFydDoKKyAgICAgICAgaWYgKChjID49ICdBJyAm
JiBjIDw9ICdaJykgfHwgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSkgeworICAgICAgICAgICAgbV9j
c3NSdWxlLmNsZWFyKCk7CisgICAgICAgICAgICBtX2Nzc1J1bGVWYWx1ZS5jbGVhcigpOworICAg
ICAgICAgICAgbV9jc3NSdWxlLmFwcGVuZChjKTsKKyAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBD
U1NSdWxlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NJbml0
aWFsOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1J1bGU6CisgICAgICAgIGlmIChpc1do
aXRlc3BhY2UoYykpCisgICAgICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTQWZ0ZXJSdWxlOworICAg
ICAgICBlbHNlIGlmIChjID09ICc7JykKKyAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NJbml0
aWFsOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Nzc1J1bGUuYXBwZW5kKGMpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENTU0FmdGVyUnVsZToKKyAgICAgICAgaWYgKGlzV2hpdGVz
cGFjZShjKSkKKyAgICAgICAgICAgIDsKKyAgICAgICAgZWxzZSBpZiAoYyA9PSAnOycpCisgICAg
ICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTSW5pdGlhbDsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBtX2Nzc1N0YXRlID0gQ1NTUnVsZVZhbHVlOworICAgICAgICAgICAgbV9jc3NSdWxlVmFs
dWUuYXBwZW5kKGMpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUnVs
ZVZhbHVlOgorICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGMpKQorICAgICAgICAgICAgbV9jc3NT
dGF0ZSA9IENTU0FmZXJSdWxlVmFsdWU7CisgICAgICAgIGVsc2UgaWYgKGMgPT0gJzsnKSB7Cisg
ICAgICAgICAgICBlbWl0Q1NTUnVsZSgpOworICAgICAgICAgICAgbV9jc3NTdGF0ZSA9IENTU0lu
aXRpYWw7CisgICAgICAgIH0gZWxzZSAKKyAgICAgICAgICAgIG1fY3NzUnVsZVZhbHVlLmFwcGVu
ZChjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NBZmVyUnVsZVZhbHVlOgorICAgICAg
ICBpZiAoaXNXaGl0ZXNwYWNlKGMpKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlIGlmIChj
ID09ICc7JykgeworICAgICAgICAgICAgZW1pdENTU1J1bGUoKTsKKyAgICAgICAgICAgIG1fY3Nz
U3RhdGUgPSBDU1NJbml0aWFsOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRklY
TUUgbWVkaWEgcnVsZXMKKyAgICAgICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTSW5pdGlhbDsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9Cit9CisgICAgCit2b2lkIEhUTUxQcmVsb2Fk
VG9rZW5pemVyOjplbWl0VGFnKCkKK3sKKyAgICAKKyAgICBpZiAobV9jbG9zZVRhZykgeworICAg
ICAgICBtX2NvbnRlbnRNb2RlbCA9IFBDREFUQTsKKyAgICAgICAgbV9jc3NTdGF0ZSA9IENTU0lu
aXRpYWw7CisgICAgICAgIGNsZWFyTGFzdENoYXJhY3RlcnMoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBBdG9taWNTdHJpbmcgdGFnKG1fdGFnTmFtZS5kYXRhKCksIG1fdGFn
TmFtZS5zaXplKCkpOworICAgIAorICAgIG1fbGFzdFN0YXJ0VGFnID0gdGFnOworICAgIAorICAg
IGlmICh0YWcgPT0gdGV4dGFyZWFUYWcgfHwgdGFnID09IHRpdGxlVGFnKQorICAgICAgICBtX2Nv
bnRlbnRNb2RlbCA9IFJDREFUQTsKKyAgICBlbHNlIGlmICh0YWcgPT0gc3R5bGVUYWcgfHwgdGFn
ID09IHhtcFRhZyB8fCB0YWcgPT0gc2NyaXB0VGFnIHx8IHRhZyA9PSBpZnJhbWVUYWcgfHwgdGFn
ID09IG5vZW1iZWRUYWcgfHwgdGFnID09IG5vZnJhbWVzVGFnKQorICAgICAgICBtX2NvbnRlbnRN
b2RlbCA9IENEQVRBOworICAgIGVsc2UgaWYgKHRhZyA9PSBub3NjcmlwdFRhZykKKyAgICAgICAg
Ly8gd2Ugd291bGRuJ3QgYmUgaGVyZSBpZiBzY3JpcHRzIHdlcmUgZGlzYWJsZWQKKyAgICAgICAg
bV9jb250ZW50TW9kZWwgPSBDREFUQTsKKyAgICBlbHNlIGlmICh0YWcgPT0gcGxhaW50ZXh0VGFn
KQorICAgICAgICBtX2NvbnRlbnRNb2RlbCA9IFBMQUlOVEVYVDsKKyAgICBlbHNlCisgICAgICAg
IG1fY29udGVudE1vZGVsID0gUENEQVRBOworICAgIAorICAgIGlmICghbV91cmxUb0xvYWQuaXNF
bXB0eSgpKSB7CisgICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IDA7CisgICAgICAg
IAorICAgICAgICBpZiAodGFnID09IHNjcmlwdFRhZykKKyAgICAgICAgICAgIHJlc291cmNlID0g
bV9kb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KG1fdXJsVG9Mb2FkLCBtX2RvYy0+ZnJh
bWUoKS0+bG9hZGVyKCktPmVuY29kaW5nKCkpOyAKKyAgICAgICAgZWxzZSBpZiAodGFnID09IGlt
Z1RhZykgCisgICAgICAgICAgICByZXNvdXJjZSA9IG1fZG9jLT5kb2NMb2FkZXIoKS0+cmVxdWVz
dEltYWdlKG1fdXJsVG9Mb2FkKTsKKyAgICAgICAgZWxzZSBpZiAodGFnID09IGxpbmtUYWcgJiYg
bV9saW5rSXNTdHlsZVNoZWV0KSAKKyAgICAgICAgICAgIHJlc291cmNlID0gbV9kb2MtPmRvY0xv
YWRlcigpLT5yZXF1ZXN0Q1NTU3R5bGVTaGVldChtX3VybFRvTG9hZCwgbV9kb2MtPmZyYW1lKCkt
PmxvYWRlcigpLT5lbmNvZGluZygpKTsKKyAgICAgICAgcmVnaXN0ZXJQcmVsb2FkKHJlc291cmNl
KTsKKyAgICB9CisgICAgICAgIAorICAgIG1fdXJsVG9Mb2FkID0gIiI7CisgICAgbV9saW5rSXNT
dHlsZVNoZWV0ID0gZmFsc2U7Cit9CisgICAgCit2b2lkIEhUTUxQcmVsb2FkVG9rZW5pemVyOjpl
bWl0Q1NTUnVsZSgpCit7CisgICAgU3RyaW5nIHJ1bGUobV9jc3NSdWxlLmRhdGEoKSwgbV9jc3NS
dWxlLnNpemUoKSk7CisgICAgaWYgKHJ1bGUubG93ZXIoKSA9PSAiaW1wb3J0IiAmJiAhbV9jc3NS
dWxlVmFsdWUuaXNFbXB0eSgpKSB7CisgICAgICAgIFN0cmluZyB2YWx1ZShtX2Nzc1J1bGVWYWx1
ZS5kYXRhKCksIG1fY3NzUnVsZVZhbHVlLnNpemUoKSk7CisgICAgICAgIFN0cmluZyB1cmwgPSBw
YXJzZVVSTCh2YWx1ZSk7CisgICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJlZ2lzdGVyUHJlbG9hZChtX2RvYy0+ZG9jTG9hZGVyKCktPnJlcXVlc3RDU1NTdHlsZVNoZWV0
KHVybCwgbV9kb2MtPmZyYW1lKCktPmxvYWRlcigpLT5lbmNvZGluZygpKSk7CisvLyAgICAgICAg
cHJpbnRmKCJASU1QT1JUICVzXG4iLCB1cmwubGF0aW4xKCkuZGF0YSgpKTsKKyAgICB9CisgICAg
bV9jc3NSdWxlLmNsZWFyKCk7CisgICAgbV9jc3NSdWxlVmFsdWUuY2xlYXIoKTsKK30KKyAgICAK
K3ZvaWQgSFRNTFByZWxvYWRUb2tlbml6ZXI6OnJlZ2lzdGVyUHJlbG9hZChDYWNoZWRSZXNvdXJj
ZSogcmVzb3VyY2UpCit7CisgICAgaWYgKCFyZXNvdXJjZSB8fCByZXNvdXJjZS0+aXNMb2FkZWQo
KSB8fCBtX3ByZWxvYWRzLmNvbnRhaW5zKHJlc291cmNlKSkKKyAgICAgICAgcmV0dXJuOworICAg
IHJlc291cmNlLT5pbmNyZWFzZVByZWxvYWRDb3VudCgpOworICAgIG1fcHJlbG9hZHMuYWRkKHJl
c291cmNlKTsKKy8vICAgIHByaW50ZigiUFJFTE9BRElORyAlc1xuIiwgIHJlc291cmNlLT51cmwo
KS5sYXRpbjEoKS5kYXRhKCkpOworfQorCisgICAgICAgICAgICAgICAgCit9CkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTFByZWxvYWRUb2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTFByZWxvYWRUb2tlbml6ZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9I
VE1MUHJlbG9hZFRva2VuaXplci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisj
aWZuZGVmIEhUTUxQcmVsb2FkVG9rZW5pemVyX2gKKyNkZWZpbmUgSFRNTFByZWxvYWRUb2tlbml6
ZXJfaAorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdEhh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgCisgICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CisgICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2VD
bGllbnQ7CisgICAgY2xhc3MgRG9jdW1lbnQ7CisgICAgCisgICAgY2xhc3MgSFRNTFByZWxvYWRU
b2tlbml6ZXIgOiBOb25jb3B5YWJsZQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEhUTUxQ
cmVsb2FkVG9rZW5pemVyKERvY3VtZW50KiBkb2MpOworICAgICAgICB+SFRNTFByZWxvYWRUb2tl
bml6ZXIoKTsKKyAgICAgICAgdm9pZCB3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKKyAg
ICAgICAgdm9pZCBiZWdpbigpOworICAgICAgICB2b2lkIGVuZCgpOworICAgICAgICBib29sIGlu
UHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX2luUHJvZ3Jlc3M7IH0KKyAgICAgICAgdm9pZCBj
bGVhclByZWxvYWRzKCk7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgY29uc3Vt
ZUVudGl0eShTZWdtZW50ZWRTdHJpbmcmLCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzKTsKKyAg
ICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCB0b2tlbml6ZShjb25zdCBTZWdtZW50
ZWRTdHJpbmcmKTsKKyAgICAgICAgdm9pZCByZXNldCgpOworICAgICAgICAKKyAgICAgICAgdm9p
ZCBlbWl0VGFnKCk7CisgICAgICAgIHZvaWQgZW1pdENoYXJhY3RlcihVQ2hhciBjKTsKKyAgICAg
ICAgCisgICAgICAgIHZvaWQgdG9rZW5pemVDU1MoVUNoYXIgYyk7CisgICAgICAgIHZvaWQgZW1p
dENTU1J1bGUoKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcHJvY2Vzc0F0dHJpYnV0ZSgpOwor
ICAgICAgICAKKyAgICAgICAgdm9pZCByZWdpc3RlclByZWxvYWQoQ2FjaGVkUmVzb3VyY2UqIHJl
c291cmNlKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgY2xlYXJMYXN0Q2hhcmFjdGVycygpOwor
ICAgICAgICB2b2lkIHJlbWVtYmVyQ2hhcmFjdGVyKFVDaGFyKTsKKyAgICAgICAgYm9vbCBsYXN0
Q2hhcmFjdGVyc01hdGNoKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBjb3VudCkgY29uc3Q7CisgICAg
ICAgIAorICAgICAgICB2b2lkIHByaW50U3RhdHMoKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wg
bV9pblByb2dyZXNzOworICAgICAgICBTZWdtZW50ZWRTdHJpbmcgbV9zb3VyY2U7CisgICAgICAg
IAorICAgICAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgICAgIERhdGEsCisgICAgICAgICAgICBF
bnRpdHlEYXRhLAorICAgICAgICAgICAgVGFnT3BlbiwKKyAgICAgICAgICAgIENsb3NlVGFnT3Bl
biwKKyAgICAgICAgICAgIFRhZ05hbWUsCisgICAgICAgICAgICBCZWZvcmVBdHRyaWJ1dGVOYW1l
LAorICAgICAgICAgICAgQXR0cmlidXRlTmFtZSwKKyAgICAgICAgICAgIEFmdGVyQXR0cmlidXRl
TmFtZSwKKyAgICAgICAgICAgIEJlZm9yZUF0dHJpYnV0ZVZhbHVlLAorICAgICAgICAgICAgQXR0
cmlidXRlVmFsdWVEb3VibGVRdW90ZWQsCisgICAgICAgICAgICBBdHRyaWJ1dGVWYWx1ZVNpbmds
ZVF1b3RlZCwKKyAgICAgICAgICAgIEF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQsCisgICAgICAgICAg
ICBFbnRpdHlJbkF0dHJpYnV0ZVZhbHVlLAorICAgICAgICAgICAgQm9ndXNDb21tZW50LAorICAg
ICAgICAgICAgTWFya3VwRGVjbGFyYXRpb25PcGVuLAorICAgICAgICAgICAgQ29tbWVudFN0YXJ0
LAorICAgICAgICAgICAgQ29tbWVudFN0YXJ0RGFzaCwKKyAgICAgICAgICAgIENvbW1lbnQsCisg
ICAgICAgICAgICBDb21tZW50RW5kRGFzaCwKKyAgICAgICAgICAgIENvbW1lbnRFbmQKKyAgICAg
ICAgfTsKKyAgICAgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICAgICAgYm9vbCBtX2VzY2FwZTsKKyAg
ICAgICAgZW51bSBDb250ZW50TW9kZWwgeworICAgICAgICAgICAgUENEQVRBLAorICAgICAgICAg
ICAgUkNEQVRBLAorICAgICAgICAgICAgQ0RBVEEsCisgICAgICAgICAgICBQTEFJTlRFWFQKKyAg
ICAgICAgfTsKKyAgICAgICAgQ29udGVudE1vZGVsIG1fY29udGVudE1vZGVsOworICAgICAgICB1
bnNpZ25lZCBtX2NvbW1lbnRQb3M7CisgICAgICAgIFN0YXRlIG1fc3RhdGVCZWZvcmVFbnRpdHlJ
bkF0dHJpYnV0ZVZhbHVlOworICAgICAgICAKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGxhc3RDaGFyYWN0ZXJzQnVmZmVyU2l6ZSA9IDg7CisgICAgICAgIFVDaGFyIG1fbGFzdENoYXJh
Y3RlcnNbbGFzdENoYXJhY3RlcnNCdWZmZXJTaXplXTsKKyAgICAgICAgdW5zaWduZWQgbV9sYXN0
Q2hhcmFjdGVySW5kZXg7CisgICAgICAgIAorICAgICAgICBib29sIG1fY2xvc2VUYWc7CisgICAg
ICAgIFZlY3RvcjxVQ2hhciwgMzI+IG1fdGFnTmFtZTsKKyAgICAgICAgVmVjdG9yPFVDaGFyLCAz
Mj4gbV9hdHRyaWJ1dGVOYW1lOworICAgICAgICBWZWN0b3I8VUNoYXI+IG1fYXR0cmlidXRlVmFs
dWU7CisgICAgICAgIEF0b21pY1N0cmluZyBtX2xhc3RTdGFydFRhZzsKKyAgICAgICAgCisgICAg
ICAgIFN0cmluZyBtX3VybFRvTG9hZDsKKyAgICAgICAgYm9vbCBtX2xpbmtJc1N0eWxlU2hlZXQ7
CisgICAgICAgIAorICAgICAgICBlbnVtIENTU1N0YXRlIHsKKyAgICAgICAgICAgIENTU0luaXRp
YWwsCisgICAgICAgICAgICBDU1NNYXliZUNvbW1lbnQsCisgICAgICAgICAgICBDU1NDb21tZW50
LAorICAgICAgICAgICAgQ1NTTWF5YmVDb21tZW50RW5kLAorICAgICAgICAgICAgQ1NTUnVsZVN0
YXJ0LAorICAgICAgICAgICAgQ1NTUnVsZSwKKyAgICAgICAgICAgIENTU0FmdGVyUnVsZSwKKyAg
ICAgICAgICAgIENTU1J1bGVWYWx1ZSwKKyAgICAgICAgICAgIENTU0FmZXJSdWxlVmFsdWUKKyAg
ICAgICAgfTsKKyAgICAgICAgQ1NTU3RhdGUgbV9jc3NTdGF0ZTsKKyAgICAgICAgVmVjdG9yPFVD
aGFyLCAxNj4gbV9jc3NSdWxlOworICAgICAgICBWZWN0b3I8VUNoYXI+IG1fY3NzUnVsZVZhbHVl
OworICAgICAgICAKKyAgICAgICAgTGlzdEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPiBtX3ByZWxv
YWRzOworICAgICAgICAKKyAgICAgICAgZG91YmxlIG1fdGltZVVzZWQ7CisgICAgICAgIAorICAg
ICAgICBEb2N1bWVudCogbV9kb2M7CisgICAgfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TFRva2VuaXplci5jcHAJKHJldmlzaW9uIDMwNjE2KQorKysgV2ViQ29yZS9odG1sL0hUTUxUb2tl
bml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxQcmVsb2FkVG9rZW5pemVyLmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlci5oIgogI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVt
ZW50LmgiCkBAIC0xNjEsNiArMTYyLDcgQEAgSFRNTFRva2VuaXplcjo6SFRNTFRva2VuaXplcihI
VE1MRG9jdW1lbgogICAgICwgcGFyc2VyKG5ldyBIVE1MUGFyc2VyKGRvYywgcmVwb3J0RXJyb3Jz
KSkKICAgICAsIGluV3JpdGUoZmFsc2UpCiAgICAgLCBtX2ZyYWdtZW50KGZhbHNlKQorICAgICwg
bV9wcmVsb2FkVG9rZW5pemVyKDApCiB7CiAgICAgYmVnaW4oKTsKIH0KQEAgLTQ5OSw2ICs1MDEs
MTUgQEAgSFRNTFRva2VuaXplcjo6U3RhdGUgSFRNTFRva2VuaXplcjo6c2NyaQogICAgICAgICAg
ICAgd3JpdGUocHJlcGVuZGluZ1NyYywgZmFsc2UpOwogICAgICAgICAgICAgc3RhdGUgPSBtX3N0
YXRlOwogICAgICAgICB9CisgICAgfSAKKyAgICAKKyAgICBpZiAoIXBlbmRpbmdTY3JpcHRzLmlz
RW1wdHkoKSAmJiAhbV9leGVjdXRpbmdTY3JpcHQpIHsKKyAgICAgICAgaWYgKCFtX3ByZWxvYWRU
b2tlbml6ZXIpCisgICAgICAgICAgICBtX3ByZWxvYWRUb2tlbml6ZXIuc2V0KG5ldyBIVE1MUHJl
bG9hZFRva2VuaXplcihtX2RvYykpOworICAgICAgICBpZiAoIW1fcHJlbG9hZFRva2VuaXplci0+
aW5Qcm9ncmVzcygpKSB7CisgICAgICAgICAgICBtX3ByZWxvYWRUb2tlbml6ZXItPmJlZ2luKCk7
CisgICAgICAgICAgICBtX3ByZWxvYWRUb2tlbml6ZXItPndyaXRlKHBlbmRpbmdTcmMpOworICAg
ICAgICB9CiAgICAgfQogCiAgICAgY3VycmVudFByZXBlbmRpbmdTcmMgPSBzYXZlZFByZXBlbmRp
bmdTcmM7CkBAIC0xNTg1LDEwICsxNTk2LDE2IEBAIGJvb2wgSFRNTFRva2VuaXplcjo6d3JpdGUo
Y29uc3QgU2VnbWVudGUKICAgICAgICAgLy8gZG9uJ3QgcGFyc2U7IHdlIHdpbGwgZG8gdGhpcyBs
YXRlcgogICAgICAgICBpZiAoY3VycmVudFByZXBlbmRpbmdTcmMpCiAgICAgICAgICAgICBjdXJy
ZW50UHJlcGVuZGluZ1NyYy0+YXBwZW5kKHNvdXJjZSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICBwZW5kaW5nU3JjLmFwcGVuZChzb3VyY2UpOworICAgICAgICAg
ICAgaWYgKG1fcHJlbG9hZFRva2VuaXplciAmJiBtX3ByZWxvYWRUb2tlbml6ZXItPmluUHJvZ3Jl
c3MoKSAmJiBhcHBlbmREYXRhKQorICAgICAgICAgICAgICAgIG1fcHJlbG9hZFRva2VuaXplci0+
d3JpdGUoc291cmNlKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQor
ICAgIAorICAgIGlmIChtX3ByZWxvYWRUb2tlbml6ZXIgJiYgbV9wcmVsb2FkVG9rZW5pemVyLT5p
blByb2dyZXNzKCkgJiYgYXBwZW5kRGF0YSkKKyAgICAgICAgbV9wcmVsb2FkVG9rZW5pemVyLT5l
bmQoKTsKIAogICAgIGlmICghc3JjLmlzRW1wdHkoKSkKICAgICAgICAgc3JjLmFwcGVuZChzb3Vy
Y2UpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5oCShyZXZpc2lvbiAzMDYxNikKKysrIFdlYkNvcmUv
aHRtbC9IVE1MVG9rZW5pemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgY2xh
c3MgSFRNTERvY3VtZW50OwogY2xhc3MgSFRNTFZpZXdTb3VyY2VEb2N1bWVudDsKIGNsYXNzIEZy
YW1lVmlldzsKIGNsYXNzIEhUTUxQYXJzZXI7CitjbGFzcyBIVE1MUHJlbG9hZFRva2VuaXplcjsK
IGNsYXNzIE5vZGU7CiAKIC8qKgpAQCAtNDAyLDYgKzQwMyw4IEBAIHByaXZhdGU6CiAgICAgSFRN
TFBhcnNlciogcGFyc2VyOwogICAgIGJvb2wgaW5Xcml0ZTsKICAgICBib29sIG1fZnJhZ21lbnQ7
CisgICAgCisgICAgT3duUHRyPEhUTUxQcmVsb2FkVG9rZW5pemVyPiBtX3ByZWxvYWRUb2tlbml6
ZXI7CiB9OwogCiB2b2lkIHBhcnNlSFRNTERvY3VtZW50RnJhZ21lbnQoY29uc3QgU3RyaW5nJiwg
RG9jdW1lbnRGcmFnbWVudCopOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlLmNwcAkocmV2aXNpb24gMzA2MTYpCisrKyBX
ZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDggQEAK
ICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAjaW5jbHVkZSA8c3RkaW8uaD4KIAorI2luY2x1ZGUg
IkNTdHJpbmcuaCIKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtMjI5LDcgKzIzMSw3IEBAIHZvaWQgQ2FjaGU6OnBydW5lRGVhZFJlc291cmNlcygpCiAg
ICAgICAgIC8vIEZpcnN0IGZsdXNoIGFsbCB0aGUgZGVjb2RlZCBkYXRhIGluIHRoaXMgcXVldWUu
CiAgICAgICAgIHdoaWxlIChjdXJyZW50KSB7CiAgICAgICAgICAgICBDYWNoZWRSZXNvdXJjZSog
cHJldiA9IGN1cnJlbnQtPm1fcHJldkluQWxsUmVzb3VyY2VzTGlzdDsKLSAgICAgICAgICAgIGlm
ICghY3VycmVudC0+cmVmZXJlbmNlZCgpICYmIGN1cnJlbnQtPmlzTG9hZGVkKCkgJiYgY3VycmVu
dC0+ZGVjb2RlZFNpemUoKSkgeworICAgICAgICAgICAgaWYgKCFjdXJyZW50LT5yZWZlcmVuY2Vk
KCkgJiYgIWN1cnJlbnQtPmlzUHJlbG9hZGVkKCkgJiYgY3VycmVudC0+aXNMb2FkZWQoKSAmJiBj
dXJyZW50LT5kZWNvZGVkU2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gRGVzdHJveSBvdXIg
ZGVjb2RlZCBkYXRhLiBUaGlzIHdpbGwgcmVtb3ZlIHVzIGZyb20gCiAgICAgICAgICAgICAgICAg
Ly8gbV9saXZlRGVjb2RlZFJlc291cmNlcywgYW5kIHBvc3NpYmx5IG1vdmUgdXMgdG8gYSBkaWZm
ZXJudCAKICAgICAgICAgICAgICAgICAvLyBMUlUgbGlzdCBpbiBtX2FsbFJlc291cmNlcy4KQEAg
LTI0NSw3ICsyNDcsNyBAQCB2b2lkIENhY2hlOjpwcnVuZURlYWRSZXNvdXJjZXMoKQogICAgICAg
ICBjdXJyZW50ID0gbV9hbGxSZXNvdXJjZXNbaV0ubV90YWlsOwogICAgICAgICB3aGlsZSAoY3Vy
cmVudCkgewogICAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHByZXYgPSBjdXJyZW50LT5tX3By
ZXZJbkFsbFJlc291cmNlc0xpc3Q7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnQtPnJlZmVyZW5j
ZWQoKSkgeworICAgICAgICAgICAgaWYgKCFjdXJyZW50LT5yZWZlcmVuY2VkKCkgJiYgIWN1cnJl
bnQtPmlzUHJlbG9hZGVkKCkpIHsKICAgICAgICAgICAgICAgICByZW1vdmUoY3VycmVudCk7CiAK
ICAgICAgICAgICAgICAgICBpZiAobV9kZWFkU2l6ZSA8PSB0YXJnZXRTaXplKQpAQCAtMjc1LDYg
KzI3Nyw5IEBAIHZvaWQgQ2FjaGU6OnNldENhcGFjaXRpZXModW5zaWduZWQgbWluRGUKIAogdm9p
ZCBDYWNoZTo6cmVtb3ZlKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKIHsKKyAgICAvL2lmIChy
ZXNvdXJjZS0+dXJsKCkuY29udGFpbnMoImNvbnRleHR3ZWIiKSkgeworICAgIC8vICAgIHByaW50
ZigiUkVNT1ZFICVzXG4iLCByZXNvdXJjZS0+dXJsKCkubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAv
L30KICAgICAvLyBUaGUgcmVzb3VyY2UgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQgYnkg
c29tZW9uZSBvdGhlciB0aGFuIG91ciBjYWxsZXIsCiAgICAgLy8gd2hvIG5lZWRlZCBhIGZyZXNo
IGNvcHkgZm9yIGEgcmVsb2FkLiBTZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyNDc5I2M2Pi4KICAgICBpZiAocmVzb3VyY2UtPmluQ2FjaGUoKSkgewpJbmRleDog
V2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZEltYWdlLmNwcAkocmV2aXNpb24gMzA2MTYpCisrKyBXZWJDb3JlL2xvYWRlci9D
YWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw3ICsyMDksNyBAQCB2b2lkIENh
Y2hlZEltYWdlOjpkYXRhKFBhc3NSZWZQdHI8U2hhcmVkCiAgICAgICAgIGlmIChtX2ltYWdlLT5p
c051bGwoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IEknbSBub3QgY29udmluY2VkIHRoaXMg
Y2FzZSBjYW4gZXZlbiBiZSBoaXQuCiAgICAgICAgICAgICBlcnJvcigpOwotICAgICAgICAgICAg
aWYgKGluQ2FjaGUoKSkKKyAgICAgICAgICAgIGlmIChpbkNhY2hlKCkgJiYgIWlzUHJlbG9hZGVk
KCkpCiAgICAgICAgICAgICAgICAgY2FjaGUoKS0+cmVtb3ZlKHRoaXMpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCShyZXZp
c2lvbiAzMDYxNikKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsOSBAQCBDYWNoZWRSZXNvdXJjZTo6Q2FjaGVkUmVzb3VyY2Uo
Y29uc3QgU3RyCiAgICAgLCBtX2xhc3REZWNvZGVkQWNjZXNzVGltZSgwKQogICAgICwgbV9zZW5k
UmVzb3VyY2VMb2FkQ2FsbGJhY2tzKHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCiAgICAgLCBt
X2luQ2FjaGUoZm9yQ2FjaGUpCisgICAgLCBtX3ByZWxvYWRDb3VudCgwKQorICAgICwgbV9wcmVs
b2FkUmVzdWx0KFByZWxvYWROb3RSZWZlcmVuY2VkKQorICAgICwgbV9yZXF1ZXN0ZWRGcm9tTmV0
d29ya2luZ0xheWVyKGZhbHNlKQogICAgICwgbV9kb2NMb2FkZXIoMCkKIHsKICAgICBtX3R5cGUg
PSB0eXBlOwpAQCAtMTAxLDYgKzEwNCwxNCBAQCB2b2lkIENhY2hlZFJlc291cmNlOjpzZXRSZXF1
ZXN0KFJlcXVlc3QqCiAKIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnJlZihDYWNoZWRSZXNvdXJjZUNs
aWVudCAqYykKIHsKKyAgICBpZiAobV9wcmVsb2FkUmVzdWx0ID09IFByZWxvYWROb3RSZWZlcmVu
Y2VkKSB7CisgICAgICAgIGlmIChpc0xvYWRlZCgpKQorICAgICAgICAgICAgbV9wcmVsb2FkUmVz
dWx0ID0gUHJlbG9hZFJlZmVyZW5jZWRXaGlsZUNvbXBsZXRlOworICAgICAgICBlbHNlIGlmICht
X3JlcXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIpCisgICAgICAgICAgICBtX3ByZWxvYWRSZXN1
bHQgPSBQcmVsb2FkUmVmZXJlbmNlZFdoaWxlTG9hZGluZzsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9wcmVsb2FkUmVzdWx0ID0gUHJlbG9hZFJlZmVyZW5jZWQ7CisgICAgfQogICAgIGlm
ICghcmVmZXJlbmNlZCgpICYmIGluQ2FjaGUoKSkKICAgICAgICAgY2FjaGUoKS0+YWRkVG9MaXZl
UmVzb3VyY2VzU2l6ZSh0aGlzKTsKICAgICBtX2NsaWVudHMuYWRkKGMpOwpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9D
YWNoZWRSZXNvdXJjZS5oCShyZXZpc2lvbiAzMDYxNikKKysrIFdlYkNvcmUvbG9hZGVyL0NhY2hl
ZFJlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDE1IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgcmVmKENhY2hlZFJlc291cmNlQ2xpZW50Kik7CiAgICAgdm9pZCBkZXJl
ZihDYWNoZWRSZXNvdXJjZUNsaWVudCopOwogICAgIGJvb2wgcmVmZXJlbmNlZCgpIGNvbnN0IHsg
cmV0dXJuICFtX2NsaWVudHMuaXNFbXB0eSgpOyB9CisgICAgZW51bSBQcmVsb2FkUmVzdWx0IHsK
KyAgICAgICAgUHJlbG9hZE5vdFJlZmVyZW5jZWQsCisgICAgICAgIFByZWxvYWRSZWZlcmVuY2Vk
LAorICAgICAgICBQcmVsb2FkUmVmZXJlbmNlZFdoaWxlTG9hZGluZywKKyAgICAgICAgUHJlbG9h
ZFJlZmVyZW5jZWRXaGlsZUNvbXBsZXRlCisgICAgfTsKKyAgICBQcmVsb2FkUmVzdWx0IHByZWxv
YWRSZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX3ByZWxvYWRSZXN1bHQ7IH0KKyAgICB2b2lkIHNl
dFJlcXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIoKSB7IG1fcmVxdWVzdGVkRnJvbU5ldHdvcmtp
bmdMYXllciA9IHRydWU7IH0KKyAgICAgICAgCiAgICAgdmlydHVhbCB2b2lkIGFsbFJlZmVyZW5j
ZXNSZW1vdmVkKCkge307CiAKICAgICB1bnNpZ25lZCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2xpZW50cy5zaXplKCk7IH0KQEAgLTExNyw3ICsxMjYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkgeyBtX3Jlc3BvbnNl
ID0gcmVzcG9uc2U7IH0KICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVzcG9uc2U7IH0KICAgICAKLSAgICBib29sIGNhbkRlbGV0ZSgpIGNv
bnN0IHsgcmV0dXJuICFyZWZlcmVuY2VkKCkgJiYgIW1fcmVxdWVzdDsgfQorICAgIGJvb2wgY2Fu
RGVsZXRlKCkgY29uc3QgeyByZXR1cm4gIXJlZmVyZW5jZWQoKSAmJiAhbV9yZXF1ZXN0ICYmICFt
X3ByZWxvYWRDb3VudDsgfQogCiAgICAgYm9vbCBpc0V4cGlyZWQoKSBjb25zdDsKIApAQCAtMTM2
LDYgKzE0NSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldERvY0xvYWRlcihEb2NMb2FkZXIq
IGRvY0xvYWRlcikgeyBtX2RvY0xvYWRlciA9IGRvY0xvYWRlcjsgfQogICAgIAorICAgIGJvb2wg
aXNQcmVsb2FkZWQoKSBjb25zdCB7IHJldHVybiBtX3ByZWxvYWRDb3VudDsgfQorICAgIHZvaWQg
aW5jcmVhc2VQcmVsb2FkQ291bnQoKSB7ICsrbV9wcmVsb2FkQ291bnQ7IH0KKyAgICB2b2lkIGRl
Y3JlYXNlUHJlbG9hZENvdW50KCkgeyBBU1NFUlQobV9wcmVsb2FkQ291bnQpOyAtLW1fcHJlbG9h
ZENvdW50OyB9CisgICAgCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRFbmNvZGVkU2l6ZSh1bnNp
Z25lZCk7CiAgICAgdm9pZCBzZXREZWNvZGVkU2l6ZSh1bnNpZ25lZCk7CkBAIC0xNzEsNiArMTg0
LDkgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgbV9kZWxldGVkOwogICAgIHVuc2lnbmVkIG1fbHJ1
SW5kZXg7CiAjZW5kaWYKKyAgICB1bnNpZ25lZCBtX3ByZWxvYWRDb3VudDsKKyAgICBQcmVsb2Fk
UmVzdWx0IG1fcHJlbG9hZFJlc3VsdDsKKyAgICBib29sIG1fcmVxdWVzdGVkRnJvbU5ldHdvcmtp
bmdMYXllcjsKIAogcHJpdmF0ZToKICAgICBDYWNoZWRSZXNvdXJjZSogbV9uZXh0SW5BbGxSZXNv
dXJjZXNMaXN0OwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwCShyZXZpc2lvbiAzMDYxNikKKysrIFdl
YkNvcmUvbG9hZGVyL0RvY0xvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDgg
QEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgImxvYWRlci5oIgogCisjaW5j
bHVkZSAiQ1N0cmluZy5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERvY0xvYWRlcjo6RG9j
TG9hZGVyKEZyYW1lICpmcmFtZSwgRG9jdW1lbnQqIGRvYykKQEAgLTcxLDIzICs3MywyNyBAQCB2
b2lkIERvY0xvYWRlcjo6Y2hlY2tGb3JSZWxvYWQoY29uc3QgS1VSCiAgICAgaWYgKG1fY2FjaGVQ
b2xpY3kgPT0gQ2FjaGVQb2xpY3lWZXJpZnkpIHsKICAgICAgICBpZiAoIW1fcmVsb2FkZWRVUkxz
LmNvbnRhaW5zKGZ1bGxVUkwuc3RyaW5nKCkpKSB7CiAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2Uq
IGV4aXN0aW5nID0gY2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwoZnVsbFVSTC5zdHJpbmcoKSk7Ci0g
ICAgICAgICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nLT5pc0V4cGlyZWQoKSkgeworICAgICAg
ICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZy0+aXNFeHBpcmVkKCkgJiYgIWV4aXN0aW5nLT5p
c1ByZWxvYWRlZCgpKSB7CiAgICAgICAgICAgICAgY2FjaGUoKS0+cmVtb3ZlKGV4aXN0aW5nKTsK
ICAgICAgICAgICAgICBtX3JlbG9hZGVkVVJMcy5hZGQoZnVsbFVSTC5zdHJpbmcoKSk7CiAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICB9IGVsc2UgaWYgKChtX2NhY2hlUG9saWN5ID09IENhY2hl
UG9saWN5UmVsb2FkKSB8fCAobV9jYWNoZVBvbGljeSA9PSBDYWNoZVBvbGljeVJlZnJlc2gpKSB7
CiAgICAgICAgaWYgKCFtX3JlbG9hZGVkVVJMcy5jb250YWlucyhmdWxsVVJMLnN0cmluZygpKSkg
ewotICAgICAgICAgIENhY2hlZFJlc291cmNlKiBleGlzdGluZyA9IGNhY2hlKCktPnJlc291cmNl
Rm9yVVJMKGZ1bGxVUkwuc3RyaW5nKCkpOwotICAgICAgICAgIGlmIChleGlzdGluZykKLSAgICAg
ICAgICAgICBjYWNoZSgpLT5yZW1vdmUoZXhpc3RpbmcpOwotICAgICAgICAgIG1fcmVsb2FkZWRV
UkxzLmFkZChmdWxsVVJMLnN0cmluZygpKTsKKyAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGV4
aXN0aW5nID0gY2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwoZnVsbFVSTC5zdHJpbmcoKSk7CisgICAg
ICAgICAgIGlmIChleGlzdGluZyAmJiAhZXhpc3RpbmctPmlzUHJlbG9hZGVkKCkpIHsKKyAgICAg
ICAgICAgICAgIGNhY2hlKCktPnJlbW92ZShleGlzdGluZyk7CisgICAgICAgICAgICAgICBtX3Jl
bG9hZGVkVVJMcy5hZGQoZnVsbFVSTC5zdHJpbmcoKSk7CisgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgfQogfQogCiBDYWNoZWRJbWFnZSogRG9jTG9hZGVyOjpyZXF1ZXN0SW1hZ2UoY29uc3Qg
U3RyaW5nJiB1cmwpCiB7CisgICAgLy9pZiAodXJsLmNvbnRhaW5zKCJjb250ZXh0d2ViIikpIHsK
KyAgICAvLyAgICBwcmludGYoIklNQUdFICVzXG4iLCB1cmwubGF0aW4xKCkuZGF0YSgpKTsKKyAg
ICAvL30KICAgICBDYWNoZWRJbWFnZSogcmVzb3VyY2UgPSBzdGF0aWNfY2FzdDxDYWNoZWRJbWFn
ZSo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSwgdXJsKSk7
CiAgICAgaWYgKGF1dG9Mb2FkSW1hZ2VzKCkgJiYgcmVzb3VyY2UgJiYgcmVzb3VyY2UtPnN0aWxs
TmVlZHNMb2FkKCkpIHsKICAgICAgICAgcmVzb3VyY2UtPnNldExvYWRpbmcodHJ1ZSk7CkluZGV4
OiBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCShyZXZpc2lvbiAzMDYxNikKKysrIFdlYkNvcmUv
bG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBA
QAogCiAjaW5jbHVkZSAiQ2FjaGVkUGFnZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5j
bHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCkBAIC00NjYsMTAgKzQ2NywxMyBAQCBib29sIERv
Y3VtZW50TG9hZGVyOjppc0xvYWRpbmdJbkFQSVNlbnNlCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgaWYgKCFtX3N1YnJlc291cmNlTG9hZGVycy5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKERvY3VtZW50KiBkb2MgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpKQorICAgICAgICBpZiAoRG9jdW1lbnQqIGRvYyA9IG1fZnJhbWUtPmRvY3VtZW50
KCkpIHsKKyAgICAgICAgICAgIGlmIChkb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0Q291bnQoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGlmIChUb2tlbml6ZXIq
IHRvayA9IGRvYy0+dG9rZW5pemVyKCkpCiAgICAgICAgICAgICAgICAgaWYgKHRvay0+cHJvY2Vz
c2luZ0RhdGEoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
ICAgICB9CiAgICAgcmV0dXJuIGZyYW1lTG9hZGVyKCktPnN1YmZyYW1lSXNMb2FkaW5nKCk7CiB9
CkluZGV4OiBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL2xvYWRlci5jcHAJKHJldmlzaW9uIDMwNjE2KQorKysgV2ViQ29yZS9sb2FkZXIvbG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNjMgKzM5LDIxMyBAQAogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCisjaW5jbHVkZSAiQ1N0
cmluZy5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisjZGVmaW5lIEZBU1QgMQogCisj
aWYgRkFTVAorLy8gTWF0Y2ggdGhlIHBhcmFsbGVsIGNvbm5lY3Rpb24gY291bnQgdXNlZCBieSB0
aGUgbmV0d29ya2luZyBsYXllcgorLy8gRklYTUUgc2hvdWxkIG5vdCBoYXJkY29kZSB0aGlzCitj
b25zdCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdCA9IDQ7CisvLyBIYXZpbmcg
YSBsaW1pdCBtaWdodCBzdGlsbCBoZWxwIGdldHRpbmcgbW9yZSBpbXBvcnRhbnQgcmVzb3VyY2Vz
IGZpcnN0Citjb25zdCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0Rm9yTG9jYWxQcm90b2Nv
bD0gNTA7CisjZWxzZQorY29uc3QgdW5zaWduZWQgbWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3Qg
PSAxMDAwOworY29uc3QgdW5zaWduZWQgbWF4UmVxdWVzdHNJbkZsaWdodEZvckxvY2FsUHJvdG9j
b2w9IDEwMDA7CisjZW5kaWYKKyAgICAKKyAgICAKIExvYWRlcjo6TG9hZGVyKCkKKyAgICA6IG1f
cmVxdWVzdFRpbWVyKHRoaXMsICZMb2FkZXI6OnJlcXVlc3RUaW1lckZpcmVkKQogewotICAgIG1f
cmVxdWVzdHNQZW5kaW5nLnNldEF1dG9EZWxldGUodHJ1ZSk7CiB9CiAKIExvYWRlcjo6fkxvYWRl
cigpCiB7Ci0gICAgZGVsZXRlQWxsVmFsdWVzKG1fcmVxdWVzdHNMb2FkaW5nKTsKKyAgICBkZWxl
dGVBbGxWYWx1ZXMobV9ob3N0cyk7Cit9CisgICAgCitMb2FkZXI6OlByaW9yaXR5IExvYWRlcjo6
ZGV0ZXJtaW5lUHJpb3JpdHkoY29uc3QgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKSBjb25zdAor
eworI2lmIEZBU1QKKyAgICBzd2l0Y2ggKHJlc291cmNlLT50eXBlKCkpIHsKKyAgICAgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OiAKKyNpZiBFTkFCTEUoWEJMKQorICAgICAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpYQkw6CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBIaWdoOwor
ICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgorICAgICAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6CisjaWYgRU5BQkxFKFhTTFQpCisgICAgICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6CisjZW5kaWYKKyAgICAgICAgICAg
IHJldHVybiBNZWRpdW07CisgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3Vy
Y2U6CisgICAgICAgICAgICByZXR1cm4gTG93OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgQVNTRVJUKDApOworICAgICAgICAgICAgcmV0dXJuIExvdzsKKyAgICB9CisjZWxzZQorICAg
IHJldHVybiBIaWdoOworI2VuZGlmCiB9CiAKLXZvaWQgTG9hZGVyOjpsb2FkKERvY0xvYWRlciog
ZGwsIENhY2hlZFJlc291cmNlKiBvYmplY3QsIGJvb2wgaW5jcmVtZW50YWwsIGJvb2wgc2tpcENh
bkxvYWRDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQordm9pZCBMb2FkZXI6
OmxvYWQoRG9jTG9hZGVyKiBkbCwgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlLCBib29sIGluY3Jl
bWVudGFsLCBib29sIHNraXBDYW5Mb2FkQ2hlY2ssIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxi
YWNrcykKIHsKICAgICBBU1NFUlQoZGwpOwotICAgIFJlcXVlc3QqIHJlcSA9IG5ldyBSZXF1ZXN0
KGRsLCBvYmplY3QsIGluY3JlbWVudGFsLCBza2lwQ2FuTG9hZENoZWNrLCBzZW5kUmVzb3VyY2VM
b2FkQ2FsbGJhY2tzKTsKLSAgICBtX3JlcXVlc3RzUGVuZGluZy5hcHBlbmQocmVxKTsKKyAgICBS
ZXF1ZXN0KiByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoZGwsIHJlc291cmNlLCBpbmNyZW1lbnRhbCwg
c2tpcENhbkxvYWRDaGVjaywgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CisgICAgCisgICAg
S1VSTCB1cmwocmVzb3VyY2UtPnVybCgpKTsKKyAgICBTdHJpbmcgaG9zdEtleTsKKyAgICB1bnNp
Z25lZCByZXF1ZXN0TGltaXQ7CisgICAgYm9vbCBpc0hUVFAgPSB1cmwucHJvdG9jb2woKSA9PSAi
aHR0cCIgfHwgdXJsLnByb3RvY29sKCkgPT0gImh0dHBzIjsKKyAgICBpZiAoaXNIVFRQKSB7Cisg
ICAgICAgIGhvc3RLZXkgPSB1cmwuaG9zdCgpOworICAgICAgICByZXF1ZXN0TGltaXQgPSBtYXhS
ZXF1ZXN0c0luRmxpZ2h0UGVySG9zdDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyB1c2UgcHJv
dG9jb2wgYXMgdGhlIGtleSwgYWRkICI6IiBzaW5jZSBpdCBjYW4ndCBvY2N1ciBpbiByZWFsIGhv
c3QgbmFtZXMgCisgICAgICAgIGhvc3RLZXkgPSBTdHJpbmcodXJsLnByb3RvY29sKCkpICsgIjoi
OyAgICAKKyAgICAgICAgcmVxdWVzdExpbWl0ID0gbWF4UmVxdWVzdHNJbkZsaWdodEZvckxvY2Fs
UHJvdG9jb2w7CisgICAgfQorCisgICAgSG9zdCogaG9zdCA9IG1faG9zdHMuZ2V0KGhvc3RLZXkp
OworICAgIGlmICghaG9zdCkgeworICAgICAgICBob3N0ID0gbmV3IEhvc3QocmVxdWVzdExpbWl0
KTsKKyAgICAgICAgbV9ob3N0cy5hZGQoaG9zdEtleSwgaG9zdCk7CisgICAgfQorICAgIAorICAg
IFByaW9yaXR5IHByaW9yaXR5ID0gZGV0ZXJtaW5lUHJpb3JpdHkocmVzb3VyY2UpOworCisgICAg
aG9zdC0+YWRkUmVxdWVzdChyZXF1ZXN0LCBwcmlvcml0eSk7CiAgICAgZGwtPmluY3JlbWVudFJl
cXVlc3RDb3VudCgpOworICAgIAorICAgIGlmIChwcmlvcml0eSA+IExvdyB8fCAhaXNIVFRQKQor
ICAgICAgICAvLyBUcnkgdG8gcmVxdWVzdCBpbXBvcnRhbnQgcmVzb3VyY2VzIGltbWVkaWF0ZWx5
CisgICAgICAgIGhvc3QtPnNlcnZlUGVuZGluZ1JlcXVlc3RzKHByaW9yaXR5KTsKKyAgICBlbHNl
CisgICAgICAgIC8vIEhhbmRsZSBhc3luY2hyb25vdXNseSBzbyBlYXJseSBsb3cgcHJpb3JpdHkg
cmVxdWVzdHMgZG9uJ3QgZ2V0IHNjaGVkdWxlZCBiZWZvcmUgbGF0ZXIgaGlnaCBwcmlvcml0eSBv
bmVzCisgICAgICAgIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKK30KKyAgICAKK3Zv
aWQgTG9hZGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCkKK3sKKyAgICBpZiAoIW1f
cmVxdWVzdFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fcmVxdWVzdFRpbWVyLnN0YXJ0T25l
U2hvdCgwKTsKK30KKwordm9pZCBMb2FkZXI6OnJlcXVlc3RUaW1lckZpcmVkKFRpbWVyPExvYWRl
cj4qKSAKK3sKICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwogfQogCi12b2lkIExvYWRlcjo6
c2VydmVQZW5kaW5nUmVxdWVzdHMoKQordm9pZCBMb2FkZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3Rz
KFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSkKIHsKLSAgICB3aGlsZSAoIW1fcmVxdWVzdHNQZW5k
aW5nLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBnZXQgdGhlIGZpcnN0IHBlbmRpbmcgcmVxdWVz
dAotICAgICAgICBSZXF1ZXN0KiByZXEgPSBtX3JlcXVlc3RzUGVuZGluZy50YWtlKDApOwotICAg
ICAgICBEb2NMb2FkZXIqIGRsID0gcmVxLT5kb2NMb2FkZXIoKTsKLSAgICAgICAgZGwtPmRlY3Jl
bWVudFJlcXVlc3RDb3VudCgpOworICAgIG1fcmVxdWVzdFRpbWVyLnN0b3AoKTsKIAotICAgICAg
ICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChyZXEtPmNhY2hlZFJlc291cmNlKCktPnVybCgpKTsK
KyAgICBIb3N0TWFwOjppdGVyYXRvciBlbmQgPSBtX2hvc3RzLmVuZCgpOworICAgIFZlY3RvcjxT
dHJpbmc+IHRvUmVtb3ZlOworICAgIGZvciAoSG9zdE1hcDo6aXRlcmF0b3IgaXQgPSBtX2hvc3Rz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBIb3N0KiByZXF1ZXN0SG9zdCA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChyZXF1ZXN0SG9zdC0+aGFzUmVxdWVzdHMoKSkKKyAg
ICAgICAgICAgIHJlcXVlc3RIb3N0LT5zZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhtaW5pbXVtUHJpb3Jp
dHkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXQtPmZpcnN0
KTsKKyAgICAgICAgICAgIAorICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgdG9S
ZW1vdmUuc2l6ZSgpOyArK24pIHsKKyAgICAgICAgSG9zdE1hcDo6aXRlcmF0b3IgaXQgPSBtX2hv
c3RzLmZpbmQodG9SZW1vdmVbbl0pOworICAgICAgICBkZWxldGUgaXQtPnNlY29uZDsKKyAgICAg
ICAgbV9ob3N0cy5yZW1vdmUoaXQpOworICAgIH0KK30KKyAgICAKK3ZvaWQgTG9hZGVyOjpjYW5j
ZWxSZXF1ZXN0cyhEb2NMb2FkZXIqIGRsKQoreworICAgIEhvc3RNYXA6Oml0ZXJhdG9yIGVuZCA9
IG1faG9zdHMuZW5kKCk7CisgICAgZm9yIChIb3N0TWFwOjppdGVyYXRvciBpdCA9IG1faG9zdHMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEhvc3QqIHJlcXVlc3RIb3N0ID0g
aXQtPnNlY29uZDsKKyAgICAgICAgcmVxdWVzdEhvc3QtPmNhbmNlbFJlcXVlc3RzKGRsKTsKKyAg
ICB9CisgICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOworICAgIAorICAgIGlmIChk
bC0+bG9hZEluUHJvZ3Jlc3MoKSkKKyAgICAgICAgQVNTRVJUKGRsLT5yZXF1ZXN0Q291bnQoKSA9
PSAxKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVChkbC0+cmVxdWVzdENvdW50KCkgPT0gMCk7
Cit9CisgICAgCitMb2FkZXI6Okhvc3Q6Okhvc3QodW5zaWduZWQgbWF4UmVxdWVzdHNJbkZsaWdo
dCkKKyAgICA6IG1fbWF4UmVxdWVzdHNJbkZsaWdodChtYXhSZXF1ZXN0c0luRmxpZ2h0KQorewor
ICAgIGZvciAodW5zaWduZWQgcCA9IDA7IHAgPD0gSGlnaDsgcCsrKQorICAgICAgICBtX3JlcXVl
c3RzUGVuZGluZ1twXS5zZXRBdXRvRGVsZXRlKHRydWUpOworfQogCi0gICAgICAgIGlmICghcmVx
LT5jYWNoZWRSZXNvdXJjZSgpLT5hY2NlcHQoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXF1
ZXN0LnNldEhUVFBBY2NlcHQocmVxLT5jYWNoZWRSZXNvdXJjZSgpLT5hY2NlcHQoKSk7CitMb2Fk
ZXI6Okhvc3Q6On5Ib3N0KCkKK3sKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9yZXF1ZXN0c0xvYWRp
bmcpOworfQorICAgIAordm9pZCBMb2FkZXI6Okhvc3Q6OmFkZFJlcXVlc3QoY29uc3QgUmVxdWVz
dCogcmVxdWVzdCwgUHJpb3JpdHkgcHJpb3JpdHkpCit7CisgICAgbV9yZXF1ZXN0c1BlbmRpbmdb
cHJpb3JpdHldLmFwcGVuZChyZXF1ZXN0KTsKK30KKyAgICAKK2Jvb2wgTG9hZGVyOjpIb3N0Ojpo
YXNSZXF1ZXN0cygpIGNvbnN0Cit7CisgICAgaWYgKG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZm9yICh1bnNpZ25lZCBwID0gMDsgcCA8PSBIaWdo
OyBwKyspIHsKKyAgICAgICAgaWYgKCFtX3JlcXVlc3RzUGVuZGluZ1twXS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQogCit2
b2lkIExvYWRlcjo6SG9zdDo6c2VydmVQZW5kaW5nUmVxdWVzdHMoTG9hZGVyOjpQcmlvcml0eSBt
aW5pbXVtUHJpb3JpdHkpCit7CisgICAgZm9yICh1bnNpZ25lZCBwID0gbWluaW11bVByaW9yaXR5
OyBwIDw9IEhpZ2g7IHArKykKKyAgICAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMobV9yZXF1ZXN0
c1BlbmRpbmdbcF0pOworfQorICAgIAordm9pZCBMb2FkZXI6Okhvc3Q6OnNlcnZlUGVuZGluZ1Jl
cXVlc3RzKERlcHJlY2F0ZWRQdHJMaXN0PFJlcXVlc3Q+JiByZXF1ZXN0c1BlbmRpbmcpCit7Cisg
ICAgd2hpbGUgKG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSA8IG1fbWF4UmVxdWVzdHNJbkZsaWdo
dCAmJiAhcmVxdWVzdHNQZW5kaW5nLmlzRW1wdHkoKSkgeyAgICAgICAgCisgICAgICAgIFJlcXVl
c3QqIHJlcSA9IHJlcXVlc3RzUGVuZGluZy50YWtlKDApOworICAgICAgICBEb2NMb2FkZXIqIGRs
ID0gcmVxLT5kb2NMb2FkZXIoKTsKKyAgICAgICAgZGwtPmRlY3JlbWVudFJlcXVlc3RDb3VudCgp
OworICAgICAgICAKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlc291cmNlUmVxdWVzdChyZXEt
PmNhY2hlZFJlc291cmNlKCktPnVybCgpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghcmVxLT5j
YWNoZWRSZXNvdXJjZSgpLT5hY2NlcHQoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXNvdXJj
ZVJlcXVlc3Quc2V0SFRUUEFjY2VwdChyZXEtPmNhY2hlZFJlc291cmNlKCktPmFjY2VwdCgpKTsK
KyAgICAgICAgCiAgICAgICAgIEtVUkwgciA9IGRsLT5kb2MoKS0+dXJsKCk7CiAgICAgICAgIGlm
ICgoci5wcm90b2NvbElzKCJodHRwIikgfHwgci5wcm90b2NvbElzKCJodHRwcyIpKSAmJiByLnBh
dGgoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICByLnNldFBhdGgoIi8iKTsKLSAgICAgICAgcmVx
dWVzdC5zZXRIVFRQUmVmZXJyZXIoci5zdHJpbmcoKSk7CisgICAgICAgIHJlc291cmNlUmVxdWVz
dC5zZXRIVFRQUmVmZXJyZXIoci5zdHJpbmcoKSk7CiAKICAgICAgICAgUmVmUHRyPFN1YnJlc291
cmNlTG9hZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGRsLT5kb2MoKS0+
ZnJhbWUoKSwKLSAgICAgICAgICAgIHRoaXMsIHJlcXVlc3QsIHJlcS0+c2hvdWxkU2tpcENhbkxv
YWRDaGVjaygpLCByZXEtPnNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSk7Ci0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMsIHJlc291cmNlUmVxdWVzdCwgcmVxLT5zaG91bGRTa2lwQ2FuTG9hZENoZWNrKCks
IHJlcS0+c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygpKTsKKyAgICAgICAgCiAgICAgICAgIGlm
IChsb2FkZXIpIHsKICAgICAgICAgICAgIG1fcmVxdWVzdHNMb2FkaW5nLmFkZChsb2FkZXIucmVs
ZWFzZSgpLCByZXEpOwogICAgICAgICAgICAgZGwtPmluY3JlbWVudFJlcXVlc3RDb3VudCgpOwot
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXEtPmNhY2hlZFJlc291cmNlKCktPnNl
dFJlcXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIoKTsKKy8vICAgICAgICAgICAgcHJpbnRmKCJI
T1NUICVzIENPVU5UICVkIExPQURJTkcgJXNcbiIsIHJlc291cmNlUmVxdWVzdC51cmwoKS5ob3N0
KCkubGF0aW4xKCksIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSwgcmVxLT5jYWNoZWRSZXNvdXJj
ZSgpLT51cmwoKS5kZXByZWNhdGVkU3RyaW5nKCkubGF0aW4xKCkpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgZGwtPnNldExvYWRJblByb2dyZXNzKHRydWUpOworICAgICAgICAgICAg
cmVxLT5jYWNoZWRSZXNvdXJjZSgpLT5lcnJvcigpOworICAgICAgICAgICAgZGwtPnNldExvYWRJ
blByb2dyZXNzKGZhbHNlKTsKKyAgICAgICAgICAgIGRlbGV0ZSByZXE7CiAgICAgICAgIH0KLQot
ICAgICAgICBkbC0+c2V0TG9hZEluUHJvZ3Jlc3ModHJ1ZSk7Ci0gICAgICAgIHJlcS0+Y2FjaGVk
UmVzb3VyY2UoKS0+ZXJyb3IoKTsKLSAgICAgICAgZGwtPnNldExvYWRJblByb2dyZXNzKGZhbHNl
KTsKLQotICAgICAgICBkZWxldGUgcmVxOwogICAgIH0KIH0KIAotdm9pZCBMb2FkZXI6OmRpZEZp
bmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlcikKK3ZvaWQgTG9hZGVyOjpIb3N0
OjpkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIpCiB7CiAgICAgUmVx
dWVzdE1hcDo6aXRlcmF0b3IgaSA9IG1fcmVxdWVzdHNMb2FkaW5nLmZpbmQobG9hZGVyKTsKICAg
ICBpZiAoaSA9PSBtX3JlcXVlc3RzTG9hZGluZy5lbmQoKSkKQEAgLTExOSwxNiArMjY5LDE5IEBA
IHZvaWQgTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmMKICAgICB9CiAKICAgICBk
ZWxldGUgcmVxOworICAgIAorLy8gICAgS1VSTCB1KG9iamVjdC0+dXJsKCkuZGVwcmVjYXRlZFN0
cmluZygpKTsKKy8vICAgIHByaW50ZigiSE9TVCAlcyBDT1VOVCAlZCBSRUNFSVZFRCAlc1xuIiwg
dS5ob3N0KCkubGF0aW4xKCksIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSwgb2JqZWN0LT51cmwo
KS5kZXByZWNhdGVkU3RyaW5nKCkubGF0aW4xKCkpOwogCiAgICAgc2VydmVQZW5kaW5nUmVxdWVz
dHMoKTsKIH0KIAotdm9pZCBMb2FkZXI6OmRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRl
ciwgY29uc3QgUmVzb3VyY2VFcnJvciYpCit2b2lkIExvYWRlcjo6SG9zdDo6ZGlkRmFpbChTdWJy
ZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJikKIHsKICAgICBkaWRG
YWlsKGxvYWRlcik7CiB9CiAKLXZvaWQgTG9hZGVyOjpkaWRGYWlsKFN1YnJlc291cmNlTG9hZGVy
KiBsb2FkZXIsIGJvb2wgY2FuY2VsbGVkKQordm9pZCBMb2FkZXI6Okhvc3Q6OmRpZEZhaWwoU3Vi
cmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgYm9vbCBjYW5jZWxsZWQpCiB7CiAgICAgUmVxdWVzdE1h
cDo6aXRlcmF0b3IgaSA9IG1fcmVxdWVzdHNMb2FkaW5nLmZpbmQobG9hZGVyKTsKICAgICBpZiAo
aSA9PSBtX3JlcXVlc3RzTG9hZGluZy5lbmQoKSkKQEAgLTE0OCwxNCArMzAxLDE1IEBAIHZvaWQg
TG9hZGVyOjpkaWRGYWlsKFN1YnJlc291cmNlTG9hZGVyKiAKICAgICB9CiAgICAgCiAgICAgZG9j
TG9hZGVyLT5zZXRMb2FkSW5Qcm9ncmVzcyhmYWxzZSk7Ci0gICAgY2FjaGUoKS0+cmVtb3ZlKG9i
amVjdCk7CisgICAgaWYgKGNhbmNlbGxlZCB8fCAhb2JqZWN0LT5pc1ByZWxvYWRlZCgpKQorICAg
ICAgICBjYWNoZSgpLT5yZW1vdmUob2JqZWN0KTsKIAogICAgIGRlbGV0ZSByZXE7CiAKICAgICBz
ZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwogfQogCi12b2lkIExvYWRlcjo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQordm9pZCBMb2FkZXI6Okhvc3Q6OmRpZFJlY2VpdmVSZXNwb25zZShTdWJyZXNvdXJj
ZUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAg
ICBSZXF1ZXN0KiByZXEgPSBtX3JlcXVlc3RzTG9hZGluZy5nZXQobG9hZGVyKTsKICAgICAKQEAg
LTE5MSw3ICszNDUsNyBAQCB2b2lkIExvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291
CiAgICAgfQogfQogCi12b2lkIExvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2Fk
ZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUpCit2b2lkIExvYWRlcjo6SG9z
dDo6ZGlkUmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciog
ZGF0YSwgaW50IHNpemUpCiB7CiAgICAgUmVxdWVzdCogcmVxdWVzdCA9IG1fcmVxdWVzdHNMb2Fk
aW5nLmdldChsb2FkZXIpOwogICAgIGlmICghcmVxdWVzdCkKQEAgLTIxNiwyNSArMzcwLDMxIEBA
IHZvaWQgTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUwKICAgICB9IGVsc2UgaWYg
KHJlcXVlc3QtPmlzSW5jcmVtZW50YWwoKSkKICAgICAgICAgb2JqZWN0LT5kYXRhKGxvYWRlci0+
cmVzb3VyY2VEYXRhKCksIGZhbHNlKTsKIH0KLQotdm9pZCBMb2FkZXI6OmNhbmNlbFJlcXVlc3Rz
KERvY0xvYWRlciogZGwpCisgICAgCit2b2lkIGNhbmNlbFBlbmRpbmdSZXF1ZXN0cyhEZXByZWNh
dGVkUHRyTGlzdDxSZXF1ZXN0PiYgcmVxdWVzdHNQZW5kaW5nLCBEb2NMb2FkZXIqIGRvY0xvYWRl
cikKIHsKLSAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPFJlcXVlc3Q+IHBJdChtX3JlcXVl
c3RzUGVuZGluZyk7CisgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxSZXF1ZXN0PiBwSXQo
cmVxdWVzdHNQZW5kaW5nKTsKICAgICB3aGlsZSAocEl0LmN1cnJlbnQoKSkgewotICAgICAgICBp
ZiAocEl0LmN1cnJlbnQoKS0+ZG9jTG9hZGVyKCkgPT0gZGwpIHsKKyAgICAgICAgaWYgKHBJdC5j
dXJyZW50KCktPmRvY0xvYWRlcigpID09IGRvY0xvYWRlcikgewogICAgICAgICAgICAgY2FjaGUo
KS0+cmVtb3ZlKHBJdC5jdXJyZW50KCktPmNhY2hlZFJlc291cmNlKCkpOwotICAgICAgICAgICAg
bV9yZXF1ZXN0c1BlbmRpbmcucmVtb3ZlKHBJdCk7Ci0gICAgICAgICAgICBkbC0+ZGVjcmVtZW50
UmVxdWVzdENvdW50KCk7CisgICAgICAgICAgICByZXF1ZXN0c1BlbmRpbmcucmVtb3ZlKHBJdCk7
CisgICAgICAgICAgICBkb2NMb2FkZXItPmRlY3JlbWVudFJlcXVlc3RDb3VudCgpOwogICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgICsrcEl0OwogICAgIH0KK30KKwordm9pZCBMb2FkZXI6Okhv
c3Q6OmNhbmNlbFJlcXVlc3RzKERvY0xvYWRlciogZG9jTG9hZGVyKQoreworICAgIGZvciAodW5z
aWduZWQgcCA9IDA7IHAgPD0gSGlnaDsgcCsrKQorICAgICAgICBjYW5jZWxQZW5kaW5nUmVxdWVz
dHMobV9yZXF1ZXN0c1BlbmRpbmdbcF0sIGRvY0xvYWRlcik7CiAKICAgICBWZWN0b3I8U3VicmVz
b3VyY2VMb2FkZXIqLCAyNTY+IGxvYWRlcnNUb0NhbmNlbDsKIAogICAgIFJlcXVlc3RNYXA6Oml0
ZXJhdG9yIGVuZCA9IG1fcmVxdWVzdHNMb2FkaW5nLmVuZCgpOwogICAgIGZvciAoUmVxdWVzdE1h
cDo6aXRlcmF0b3IgaSA9IG1fcmVxdWVzdHNMb2FkaW5nLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kp
IHsKICAgICAgICAgUmVxdWVzdCogciA9IGktPnNlY29uZDsKLSAgICAgICAgaWYgKHItPmRvY0xv
YWRlcigpID09IGRsKQorICAgICAgICBpZiAoci0+ZG9jTG9hZGVyKCkgPT0gZG9jTG9hZGVyKQog
ICAgICAgICAgICAgbG9hZGVyc1RvQ2FuY2VsLmFwcGVuZChpLT5maXJzdC5nZXQoKSk7CiAgICAg
fQogCkBAIC0yNDIsMTEgKzQwMiw2IEBAIHZvaWQgTG9hZGVyOjpjYW5jZWxSZXF1ZXN0cyhEb2NM
b2FkZXIqIGQKICAgICAgICAgU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciA9IGxvYWRlcnNUb0Nh
bmNlbFtpXTsKICAgICAgICAgZGlkRmFpbChsb2FkZXIsIHRydWUpOwogICAgIH0KLSAgICAKLSAg
ICBpZiAoZGwtPmxvYWRJblByb2dyZXNzKCkpCi0gICAgICAgIEFTU0VSVChkbC0+cmVxdWVzdENv
dW50KCkgPT0gMSk7Ci0gICAgZWxzZQotICAgICAgICBBU1NFUlQoZGwtPnJlcXVlc3RDb3VudCgp
ID09IDApOwogfQogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L2xvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5oCShyZXZpc2lv
biAzMDYxNikKKysrIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCw2ICsyNCw5IEBACiAKICNpbmNsdWRlICJEZXByZWNhdGVkUHRyTGlzdC5oIgogI2luY2x1ZGUg
IlN1YnJlc291cmNlTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMiw3ICszNSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBEb2NMb2FkZXI7CiAgICAgY2xhc3MgUmVxdWVz
dDsKIAotICAgIGNsYXNzIExvYWRlciA6IHByaXZhdGUgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQg
eworICAgIGNsYXNzIExvYWRlciB7CiAgICAgcHVibGljOgogICAgICAgICBMb2FkZXIoKTsKICAg
ICAgICAgfkxvYWRlcigpOwpAQCAtNDAsMTkgKzQzLDQ2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdm9pZCBsb2FkKERvY0xvYWRlciosIENhY2hlZFJlc291cmNlKiwgYm9vbCBpbmNy
ZW1lbnRhbCA9IHRydWUsIGJvb2wgc2tpcENhbkxvYWRDaGVjayA9IGZhbHNlLCBib29sIHNlbmRS
ZXNvdXJjZUxvYWRDYWxsYmFja3MgPSB0cnVlKTsKIAogICAgICAgICB2b2lkIGNhbmNlbFJlcXVl
c3RzKERvY0xvYWRlciopOworICAgICAgICAKKyAgICAgICAgZW51bSBQcmlvcml0eSB7CisgICAg
ICAgICAgICBMb3csIE1lZGl1bSwgSGlnaAorICAgICAgICB9OworICAgICAgICB2b2lkIHNlcnZl
UGVuZGluZ1JlcXVlc3RzKFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSA9IExvdyk7CiAKICAgICBw
cml2YXRlOgotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291
cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsK
LSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIq
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25z
dCBSZXNvdXJjZUVycm9yJik7Ci0gICAgICAgIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRl
ciosIGJvb2wgY2FuY2VsbGVkID0gZmFsc2UpOwotCi0gICAgICAgIHZvaWQgc2VydmVQZW5kaW5n
UmVxdWVzdHMoKTsKLQotICAgICAgICBEZXByZWNhdGVkUHRyTGlzdDxSZXF1ZXN0PiBtX3JlcXVl
c3RzUGVuZGluZzsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdWJyZXNvdXJjZUxv
YWRlcj4sIFJlcXVlc3QqPiBSZXF1ZXN0TWFwOwotICAgICAgICBSZXF1ZXN0TWFwIG1fcmVxdWVz
dHNMb2FkaW5nOworICAgICAgICBQcmlvcml0eSBkZXRlcm1pbmVQcmlvcml0eShjb25zdCBDYWNo
ZWRSZXNvdXJjZSogcmVzb3VyY2UpIGNvbnN0OworICAgICAgICB2b2lkIHNjaGVkdWxlU2VydmVQ
ZW5kaW5nUmVxdWVzdHMoKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcmVxdWVzdFRpbWVyRmly
ZWQoVGltZXI8TG9hZGVyPiopOworCisgICAgICAgIGNsYXNzIEhvc3QgOiBwcml2YXRlIFN1YnJl
c291cmNlTG9hZGVyQ2xpZW50IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSG9zdCh1
bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0KTsKKyAgICAgICAgICAgIH5Ib3N0KCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHZvaWQgYWRkUmVxdWVzdChjb25zdCBSZXF1ZXN0KiwgUHJp
b3JpdHkpOworICAgICAgICAgICAgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhQcmlvcml0eSBt
aW5pbXVtUHJpb3JpdHkgPSBMb3cpOworICAgICAgICAgICAgdm9pZCBjYW5jZWxSZXF1ZXN0cyhE
b2NMb2FkZXIqKTsKKyAgICAgICAgICAgIGJvb2wgaGFzUmVxdWVzdHMoKSBjb25zdDsKKyAgICAg
ICAgCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwor
ICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVy
KiwgY29uc3QgY2hhciosIGludCk7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNo
TG9hZGluZyhTdWJyZXNvdXJjZUxvYWRlciopOworICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHZvaWQgc2VydmVQZW5kaW5nUmVxdWVzdHMoRGVwcmVjYXRlZFB0
ckxpc3Q8UmVxdWVzdD4mIHJlcXVlc3RzUGVuZGluZyk7CisgICAgICAgICAgICB2b2lkIGRpZEZh
aWwoU3VicmVzb3VyY2VMb2FkZXIqLCBib29sIGNhbmNlbGxlZCA9IGZhbHNlKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3Q8UmVxdWVzdD4gbV9yZXF1ZXN0c1Bl
bmRpbmdbSGlnaCArIDFdOworICAgICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdWJy
ZXNvdXJjZUxvYWRlcj4sIFJlcXVlc3QqPiBSZXF1ZXN0TWFwOworICAgICAgICAgICAgUmVxdWVz
dE1hcCBtX3JlcXVlc3RzTG9hZGluZzsKKyAgICAgICAgICAgIGNvbnN0IGludCBtX21heFJlcXVl
c3RzSW5GbGlnaHQ7CisgICAgICAgIH07CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IEhvc3QqPiBIb3N0TWFwOworICAgICAgICBIb3N0TWFwIG1faG9zdHM7CisgICAgICAgIAorICAg
ICAgICBUaW1lcjxMb2FkZXI+IG1fcmVxdWVzdFRpbWVyOwogICAgIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19580</attachid>
            <date>2008-03-07 00:13:29 -0800</date>
            <delta_ts>2008-03-11 17:19:02 -0700</delta_ts>
            <desc>another updated patch</desc>
            <filename>speculative-loading-7.patch</filename>
            <type>text/plain</type>
            <size>70947</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAzMDgxNCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0zODE5LDYgKzM4MTksOCBAQAogCQlFNDQ2MTQzQzBDRDY4OUNDMDBG
QURBNzUgLyogSlNIVE1MU291cmNlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNDIzNzIwQ0JGQjZFMDAwQUYyRUNFIC8qIEpTSFRNTFNv
dXJjZUVsZW1lbnQuaCAqLzsgfTsKIAkJRTQ0NjE0NTEwQ0Q2OEEzNTAwRkFEQTc1IC8qIFJlbmRl
clZpZGVvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0QjQxRTMzMENCRkI2MDkwMEFGMkVDRSAvKiBSZW5kZXJWaWRlby5jcHAgKi87IH07CiAJCUU0
NDYxNDUyMENENjhBMzUwMEZBREE3NSAvKiBSZW5kZXJWaWRlby5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNDFFMzQwQ0JGQjYwOTAwQUYyRUNFIC8q
IFJlbmRlclZpZGVvLmggKi87IH07CisJCUU0OTYyNkMyMEQ4MEQ5NDgwMEUzNDA1QyAvKiBIVE1M
UHJlbG9hZFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNEQ0QUJFMDBENzU0MkYwMDBGOTY4NjkgLyogSFRNTFByZWxvYWRUb2tlbml6
ZXIuY3BwICovOyB9OworCQlFNDk2MjZDMzBEODBEOTQ5MDBFMzQwNUMgLyogSFRNTFByZWxvYWRU
b2tlbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0RDRBQkUxMEQ3NTQyRjEwMEY5Njg2OSAvKiBIVE1MUHJlbG9hZFRva2VuaXplci5oICovOyB9
OwogCQlFNEMyNzk1ODBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDMjc5NTYwQ0Y5NzQxOTAw
RTk3Qjk4IC8qIFJlbmRlck1lZGlhLmNwcCAqLzsgfTsKIAkJRTRDMjc5NTkwQ0Y5NzQxOTAwRTk3
Qjk4IC8qIFJlbmRlck1lZGlhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNEMyNzk1NzBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuaCAqLzsg
fTsKIAkJRTRFRUZGQzgwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEVFRkZDNjBE
MzQ1NTBDMDA0NjlBNTggLyogSlNBdWRpb0NvbnN0cnVjdG9yLmNwcCAqLzsgfTsKQEAgLTc5OTAs
NiArNzk5Miw4IEBACiAJCUU0QjQyMzg2MENCRkI3M0MwMEFGMkVDRSAvKiBKU1Byb2dyZXNzRXZl
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQcm9ncmVzc0V2ZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QzI3OTU2MENGOTc0MTkwMEU5N0I5OCAv
KiBSZW5kZXJNZWRpYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJNZWRpYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QzI3OTU3MENG
OTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJNZWRpYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEQ0
QUJFMDBENzU0MkYwMDBGOTY4NjkgLyogSFRNTFByZWxvYWRUb2tlbml6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFByZWxvYWRUb2tlbml6ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEQ0QUJFMTBENzU0MkYxMDBGOTY4NjkgLyog
SFRNTFByZWxvYWRUb2tlbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SFRNTFByZWxvYWRUb2tlbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRF
RUZGQzYwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0F1ZGlvQ29uc3RydWN0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEVFRkZDNzBEMzQ1NTBDMDA0NjlBNTggLyogSlNB
dWRpb0NvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXVk
aW9Db25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFRDA0OEFCQjA4
MzNGMTMyMDA2RTFFNjcgLyogdGV4dEFyZWFSZXNpemVDb3JuZXIudGlmZiAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLnRpZmY7IHBhdGggPSB0
ZXh0QXJlYVJlc2l6ZUNvcm5lci50aWZmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
OTkzOCw2ICs5OTQyLDggQEAKIAkJOTNFRUMxRUMwOUMyODc3NzAwQzUxNUQxIC8qIGh0bWwgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUU0RDRBQkUwMEQ3
NTQyRjAwMEY5Njg2OSAvKiBIVE1MUHJlbG9hZFRva2VuaXplci5jcHAgKi8sCisJCQkJRTRENEFC
RTEwRDc1NDJGMTAwRjk2ODY5IC8qIEhUTUxQcmVsb2FkVG9rZW5pemVyLmggKi8sCiAJCQkJQTc3
OTc5MTAwRDZCOUQwQzAwMzg1MUI5IC8qIENhbnZhc1BpeGVsQXJyYXkuY3BwICovLAogCQkJCUE3
Nzk3OTExMEQ2QjlEMEMwMDM4NTFCOSAvKiBDYW52YXNQaXhlbEFycmF5LmggKi8sCiAJCQkJQTc3
OTc5MTIwRDZCOUQwQzAwMzg1MUI5IC8qIENhbnZhc1BpeGVsQXJyYXkuaWRsICovLApAQCAtMTQ0
NDEsNiArMTQ0NDcsNyBAQAogCQkJCTFBNTY5RDIzMEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1l
X29iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMjUwRDdFMkI4MjAwN0MzOTgzIC8q
IHJ1bnRpbWVfcm9vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2OTMyNzQwRDdFMjkzOTAwQUU0
NEQxIC8qIEpTRE9NV2luZG93QmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ5NjI2QzMwRDgw
RDk0OTAwRTM0MDVDIC8qIEhUTUxQcmVsb2FkVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAg
LTE2MDYzLDYgKzE2MDcwLDcgQEAKIAkJCQkxQTU2OUQyMjBEN0UyQjgyMDA3QzM5ODMgLyogcnVu
dGltZV9vYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE1NjlEMjQwRDdFMkI4MjAwN0Mz
OTgzIC8qIHJ1bnRpbWVfcm9vdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzY5MzI3MzBEN0Uy
OTM5MDBBRTQ0RDEgLyogSlNET01XaW5kb3dCYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0
OTYyNkMyMEQ4MEQ5NDgwMEUzNDA1QyAvKiBIVE1MUHJlbG9hZFRva2VuaXplci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDMwODE0KQorKysgV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDY0LDYgKzE0NjQsOSBAQCB2b2lkIERv
Y3VtZW50OjppbXBsaWNpdENsb3NlKCkKICAgICBkZWxldGUgbV90b2tlbml6ZXI7CiAgICAgbV90
b2tlbml6ZXIgPSAwOwogCisgICAgLy8gUGFyc2VyIHNob3VsZCBoYXZlIHBpY2tlZCB1cCBhbGwg
cHJlbG9hZHMgYnkgbm93CisgICAgbV9kb2NMb2FkZXItPmNsZWFyUHJlbG9hZHMoKTsKKwogICAg
IC8vIENyZWF0ZSBhIGJvZHkgZWxlbWVudCBpZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiBT
ZWUgUmFkYXIgMzc1ODc4NS4KICAgICBpZiAoIXRoaXMtPmJvZHkoKSAmJiBpc0hUTUxEb2N1bWVu
dCgpKSB7CiAgICAgICAgIGlmIChOb2RlKiBkb2N1bWVudEVsZW1lbnQgPSB0aGlzLT5kb2N1bWVu
dEVsZW1lbnQoKSkgewpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHJldmlzaW9uIDMw
ODE0KQorKysgV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNCw3ICsxMDQsNyBAQCBTdHlsZVNoZWV0KiBIVE1MTGlua0VsZW1lbnQ6OnNoZWV0KCkg
Y29uCiB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlICphdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gcmVsQXR0cikgewotICAg
ICAgICB0b2tlbml6ZVJlbEF0dHJpYnV0ZShhdHRyLT52YWx1ZSgpKTsKKyAgICAgICAgdG9rZW5p
emVSZWxBdHRyaWJ1dGUoYXR0ci0+dmFsdWUoKSwgbV9pc1N0eWxlU2hlZXQsIG1fYWx0ZXJuYXRl
LCBtX2lzSWNvbik7CiAgICAgICAgIHByb2Nlc3MoKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBocmVmQXR0cikgewogICAgICAgICBtX3VybCA9IGRvY3VtZW50KCktPmNvbXBsZXRl
VVJMKHBhcnNlVVJMKGF0dHItPnZhbHVlKCkpKS5zdHJpbmcoKTsKQEAgLTEyNCwxNyArMTI0LDIw
IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnUKICAgICB9CiB9CiAK
LXZvaWQgSFRNTExpbmtFbGVtZW50Ojp0b2tlbml6ZVJlbEF0dHJpYnV0ZShjb25zdCBBdG9taWNT
dHJpbmcmIHJlbFN0cikKK3ZvaWQgSFRNTExpbmtFbGVtZW50Ojp0b2tlbml6ZVJlbEF0dHJpYnV0
ZShjb25zdCBBdG9taWNTdHJpbmcmIHJlbFN0ciwgYm9vbCYgc3R5bGVTaGVldCwgYm9vbCYgYWx0
ZXJuYXRlLCBib29sJiBpY29uKQogewotICAgIG1faXNTdHlsZVNoZWV0ID0gbV9pc0ljb24gPSBt
X2FsdGVybmF0ZSA9IGZhbHNlOworICAgIHN0eWxlU2hlZXQgPSBmYWxzZTsKKyAgICBpY29uID0g
ZmFsc2U7IAorICAgIGFsdGVybmF0ZSA9IGZhbHNlOwogICAgIFN0cmluZyByZWwgPSByZWxTdHIu
c3RyaW5nKCkubG93ZXIoKTsKICAgICBpZiAocmVsID09ICJzdHlsZXNoZWV0IikKLSAgICAgICAg
bV9pc1N0eWxlU2hlZXQgPSB0cnVlOworICAgICAgICBzdHlsZVNoZWV0ID0gdHJ1ZTsKICAgICBl
bHNlIGlmIChyZWwgPT0gImljb24iIHx8IHJlbCA9PSAic2hvcnRjdXQgaWNvbiIpCi0gICAgICAg
IG1faXNJY29uID0gdHJ1ZTsKLSAgICBlbHNlIGlmIChyZWwgPT0gImFsdGVybmF0ZSBzdHlsZXNo
ZWV0IiB8fCByZWwgPT0gInN0eWxlc2hlZXQgYWx0ZXJuYXRlIikKLSAgICAgICAgbV9pc1N0eWxl
U2hlZXQgPSBtX2FsdGVybmF0ZSA9IHRydWU7Ci0gICAgZWxzZSB7CisgICAgICAgIGljb24gPSB0
cnVlOworICAgIGVsc2UgaWYgKHJlbCA9PSAiYWx0ZXJuYXRlIHN0eWxlc2hlZXQiIHx8IHJlbCA9
PSAic3R5bGVzaGVldCBhbHRlcm5hdGUiKSB7CisgICAgICAgIHN0eWxlU2hlZXQgPSB0cnVlOwor
ICAgICAgICBhbHRlcm5hdGUgPSB0cnVlOworICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRva2Vu
aXplIHRoZSByZWwgYXR0cmlidXRlIGFuZCBzZXQgYml0cyBiYXNlZCBvbiBzcGVjaWZpYyBrZXl3
b3JkcyB0aGF0IHdlIGZpbmQuCiAgICAgICAgIHJlbC5yZXBsYWNlKCdcbicsICcgJyk7CiAgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IGxpc3Q7CkBAIC0xNDIsMTEgKzE0NSwxMSBAQCB2b2lkIEhUTUxM
aW5rRWxlbWVudDo6dG9rZW5pemVSZWxBdHRyaWJ1CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBsaXN0LmVuZCgpOwogICAgICAgICBmb3IgKFZlY3RvcjxTdHJp
bmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxpc3QuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CiAgICAgICAgICAgICBpZiAoKml0ID09ICJzdHlsZXNoZWV0IikKLSAgICAgICAgICAgICAgICBt
X2lzU3R5bGVTaGVldCA9IHRydWU7CisgICAgICAgICAgICAgICAgc3R5bGVTaGVldCA9IHRydWU7
CiAgICAgICAgICAgICBlbHNlIGlmICgqaXQgPT0gImFsdGVybmF0ZSIpCi0gICAgICAgICAgICAg
ICAgbV9hbHRlcm5hdGUgPSB0cnVlOworICAgICAgICAgICAgICAgIGFsdGVybmF0ZSA9IHRydWU7
CiAgICAgICAgICAgICBlbHNlIGlmICgqaXQgPT0gImljb24iKQotICAgICAgICAgICAgICAgIG1f
aXNJY29uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpY29uID0gdHJ1ZTsKICAgICAgICAgfQog
ICAgIH0KIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHJldmlzaW9uIDMwODE0KQorKysg
V2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5
MSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1
dGUqKSBjb25zdDsKICAgICAKLSAgICB2b2lkIHRva2VuaXplUmVsQXR0cmlidXRlKGNvbnN0IEF0
b21pY1N0cmluZyYgcmVsKTsKKyAgICBzdGF0aWMgdm9pZCB0b2tlbml6ZVJlbEF0dHJpYnV0ZShj
b25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBib29sJiBzdHlsZXNoZWV0LCBib29sJiBhbHRlcm5h
dGUsIGJvb2wmIGljb24pOwogCiBwcm90ZWN0ZWQ6CiAgICAgQ2FjaGVkQ1NTU3R5bGVTaGVldCog
bV9jYWNoZWRTaGVldDsKQEAgLTEwMCwxMCArMTAwLDEwIEBAIHByb3RlY3RlZDoKICAgICBTdHJp
bmcgbV90eXBlOwogICAgIFN0cmluZyBtX21lZGlhOwogICAgIGludCBtX2Rpc2FibGVkU3RhdGU7
IC8vIDA9dW5zZXQoZGVmYXVsdCksIDE9ZW5hYmxlZCB2aWEgc2NyaXB0LCAyPWRpc2FibGVkCi0g
ICAgYm9vbCBtX2xvYWRpbmcgOiAxOwotICAgIGJvb2wgbV9hbHRlcm5hdGUgOiAxOwotICAgIGJv
b2wgbV9pc1N0eWxlU2hlZXQgOiAxOwotICAgIGJvb2wgbV9pc0ljb24gOiAxOworICAgIGJvb2wg
bV9sb2FkaW5nOworICAgIGJvb2wgbV9hbHRlcm5hdGU7CisgICAgYm9vbCBtX2lzU3R5bGVTaGVl
dDsKKyAgICBib29sIG1faXNJY29uOwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxQcmVsb2FkVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTFByZWxvYWRUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9odG1s
L0hUTUxQcmVsb2FkVG9rZW5pemVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NDAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSFRNTFByZWxvYWRUb2tlbml6ZXIu
aCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIkNhY2hlLmgiCisjaW5j
bHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVu
dC5oIgorI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgorI2luY2x1ZGUgIkNTU0hlbHBlci5oIgor
I2luY2x1ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkhUTUxMaW5rRWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIK
KworI2luY2x1ZGUgIkhUTUxFbnRpdHlOYW1lcy5jIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwor
Citjb25zdCBjaGFyKiBkZWJ1Z1VSTChEb2N1bWVudCogZG9jKQoreworICAgIFN0cmluZyB1cmwg
PSBkb2MtPnVybCgpOworICAgIGlmICh1cmwubGVuZ3RoKCkgPiA4MCkgeworICAgICAgICB1cmwg
PSB1cmwubGVmdCg4MCk7CisgICAgICAgIHVybCArPSAiLi4uIjsKKyAgICB9CisgICAgc3RhdGlj
IENTdHJpbmcgYzsKKyAgICBjID0gdXJsLmxhdGluMSgpOworICAgIHJldHVybiBjLmRhdGEoKTsK
K30KKworICAgIAorSFRNTFByZWxvYWRUb2tlbml6ZXI6OkhUTUxQcmVsb2FkVG9rZW5pemVyKERv
Y3VtZW50KiBkb2MpCisgICAgOiBtX2luUHJvZ3Jlc3MoZmFsc2UpCisgICAgLCBtX3RpbWVVc2Vk
KDApCisgICAgLCBtX2RvY3VtZW50KGRvYykKK3sKKyAgICBwcmludGYoIkNSRUFUSU5HIFBSRUxP
QUQgVE9LRU5JWkVSICglcylcbiIsIGRlYnVnVVJMKG1fZG9jdW1lbnQpKTsKK30KKyAgICAKK0hU
TUxQcmVsb2FkVG9rZW5pemVyOjp+SFRNTFByZWxvYWRUb2tlbml6ZXIoKQoreworICAgIHByaW50
ZigiREVMRVRJTkcgUFJFTE9BRCBUT0tFTklaRVIgKCVzKVxuIiwgZGVidWdVUkwobV9kb2N1bWVu
dCkpOworICAgIC8vcHJpbnRTdGF0cygpOworICAgIHByaW50ZigiVE9UQUwgVElNRSBVU0VEICUu
NGZzXG4iLCBtX3RpbWVVc2VkKTsKK30KKyAgICAKK3ZvaWQgSFRNTFByZWxvYWRUb2tlbml6ZXI6
OmJlZ2luKCkgCit7IAorICAgIC8vL3ByaW50ZigiUFJFTE9BRCBUT0tFTklaRVIgQkVHSU4gKCVz
KVxuIiwgZGVidWdVUkwobV9kb2N1bWVudCkpOworICAgIEFTU0VSVCghbV9pblByb2dyZXNzKTsg
CisgICAgcmVzZXQoKTsgCisgICAgbV9pblByb2dyZXNzID0gdHJ1ZTsgCit9CisgICAgCit2b2lk
IEhUTUxQcmVsb2FkVG9rZW5pemVyOjplbmQoKSAKK3sgCisgICAgLy9wcmludGYoIlBSRUxPQUQg
VE9LRU5JWkVSIEVORCAoJXMpXG4iLCBkZWJ1Z1VSTChtX2RvY3VtZW50KSk7CisgICAgQVNTRVJU
KG1faW5Qcm9ncmVzcyk7IAorICAgIG1faW5Qcm9ncmVzcyA9IGZhbHNlOyAKK30KKwordm9pZCBI
VE1MUHJlbG9hZFRva2VuaXplcjo6cmVzZXQoKQoreworICAgIG1fc291cmNlLmNsZWFyKCk7Cisg
ICAgCisgICAgbV9zdGF0ZSA9IERhdGE7CisgICAgbV9lc2NhcGUgPSBmYWxzZTsKKyAgICBtX2Nv
bnRlbnRNb2RlbCA9IFBDREFUQTsKKyAgICBtX2NvbW1lbnRQb3MgPSAwOworCisgICAgbV9jbG9z
ZVRhZyA9IGZhbHNlOworICAgIG1fdGFnTmFtZS5jbGVhcigpOworICAgIG1fYXR0cmlidXRlTmFt
ZS5jbGVhcigpOworICAgIG1fYXR0cmlidXRlVmFsdWUuY2xlYXIoKTsKKyAgICBtX2xhc3RTdGFy
dFRhZyA9IEF0b21pY1N0cmluZygpOworICAgIAorICAgIG1fdXJsVG9Mb2FkID0gIiI7CisgICAg
bV9saW5rSXNTdHlsZVNoZWV0ID0gZmFsc2U7CisgICAgbV9sYXN0Q2hhcmFjdGVySW5kZXggPSAw
OworICAgIGNsZWFyTGFzdENoYXJhY3RlcnMoKTsKKyAgICAKKyAgICBtX2Nzc1N0YXRlID0gQ1NT
SW5pdGlhbDsKKyAgICBtX2Nzc1J1bGUuY2xlYXIoKTsKKyAgICBtX2Nzc1J1bGVWYWx1ZS5jbGVh
cigpOworfQorICAgIAordm9pZCBIVE1MUHJlbG9hZFRva2VuaXplcjo6d3JpdGUoY29uc3QgU2Vn
bWVudGVkU3RyaW5nJiBzb3VyY2UpCit7CisgICAgZG91YmxlIHN0YXJ0VGltZSA9IGN1cnJlbnRU
aW1lKCk7CisgICAgdG9rZW5pemUoc291cmNlKTsKKyAgICBtX3RpbWVVc2VkICs9IGN1cnJlbnRU
aW1lKCkgLSBzdGFydFRpbWU7Cit9CisgICAgCitzdGF0aWMgaW5saW5lIGJvb2wgaXNXaGl0ZXNw
YWNlKFVDaGFyIGMpCit7CisgICAgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1xuJyB8fCBjID09
ICdccicgfHwgYyA9PSAnXHQnOworfQorICAgIAoraW5saW5lIHZvaWQgSFRNTFByZWxvYWRUb2tl
bml6ZXI6OmNsZWFyTGFzdENoYXJhY3RlcnMoKQoreworICAgIG1lbXNldChtX2xhc3RDaGFyYWN0
ZXJzLCAwLCBsYXN0Q2hhcmFjdGVyc0J1ZmZlclNpemUgKiBzaXplb2YoVUNoYXIpKTsKK30KKyAg
ICAKK2lubGluZSB2b2lkIEhUTUxQcmVsb2FkVG9rZW5pemVyOjpyZW1lbWJlckNoYXJhY3RlcihV
Q2hhciBjKQoreworICAgIG1fbGFzdENoYXJhY3RlckluZGV4ID0gKG1fbGFzdENoYXJhY3Rlcklu
ZGV4ICsgMSkgJSBsYXN0Q2hhcmFjdGVyc0J1ZmZlclNpemU7CisgICAgbV9sYXN0Q2hhcmFjdGVy
c1ttX2xhc3RDaGFyYWN0ZXJJbmRleF0gPSBjOworfQorICAgIAoraW5saW5lIGJvb2wgSFRNTFBy
ZWxvYWRUb2tlbml6ZXI6Omxhc3RDaGFyYWN0ZXJzTWF0Y2goY29uc3QgY2hhciogY2hhcnMsIHVu
c2lnbmVkIGNvdW50KSBjb25zdAoreworICAgIHVuc2lnbmVkIHBvcyA9IG1fbGFzdENoYXJhY3Rl
ckluZGV4OworICAgIHdoaWxlIChjb3VudCkgeworICAgICAgICBpZiAoY2hhcnNbY291bnQgLSAx
XSAhPSBtX2xhc3RDaGFyYWN0ZXJzW3Bvc10pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIC0tY291bnQ7CisgICAgICAgIGlmICghcG9zKQorICAgICAgICAgICAgcG9zID0gbGFz
dENoYXJhY3RlcnNCdWZmZXJTaXplOworICAgICAgICAtLXBvczsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisgICAgCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxlZ2FsRW50aXR5Rm9yKHVu
c2lnbmVkIHZhbHVlKQoreworICAgIC8vIEZJWE1FIHRoZXJlIGlzIGEgdGFibGUgZm9yIG1vcmUg
ZXhjZXB0aW9ucyBpbiB0aGUgc3BlYworICAgIGlmICh2YWx1ZSA9PSAwIHx8IHZhbHVlID4gMHgx
MEZGRkYgfHwgKHZhbHVlID49IDB4RDgwMCAmJiB2YWx1ZSA8PSAweERGRkYpKQorICAgICAgICBy
ZXR1cm4gMHhGRkZEOworICAgIHJldHVybiB2YWx1ZTsKK30KKyAgICAKK3Vuc2lnbmVkIEhUTUxQ
cmVsb2FkVG9rZW5pemVyOjpjb25zdW1lRW50aXR5KFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBi
b29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzKQoreworICAgIGVudW0gRW50aXR5U3RhdGUgeworICAg
ICAgICBJbml0aWFsLAorICAgICAgICBOdW1iZXJUeXBlLAorICAgICAgICBNYXliZUhleCwKKyAg
ICAgICAgSGV4LAorICAgICAgICBEZWNpbWFsLAorICAgICAgICBOYW1lZAorICAgIH07CisgICAg
RW50aXR5U3RhdGUgZW50aXR5U3RhdGUgPSBJbml0aWFsOworICAgIHVuc2lnbmVkIHJlc3VsdCA9
IDA7CisgICAgVmVjdG9yPFVDaGFyLCAxMD4gc2VlbkNoYXJzOworICAgIFZlY3RvcjxjaGFyLCAx
MD4gZW50aXR5TmFtZTsKKyAgICAKKyAgICB3aGlsZSAoIXNvdXJjZS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgVUNoYXIgY2MgPSAqc291cmNlOworICAgICAgICBzZWVuQ2hhcnMuYXBwZW5kKGNjKTsK
KyAgICAgICAgc3dpdGNoIChlbnRpdHlTdGF0ZSkgeworICAgICAgICBjYXNlIEluaXRpYWw6Cisg
ICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNjKSB8fCBjYyA9PSAnPCcgfHwgY2MgPT0gJyYn
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNj
ID09ICcjJykgCisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBOdW1iZXJUeXBlOworICAg
ICAgICAgICAgZWxzZSBpZiAoKGNjID49ICdhJyAmJiBjYyA8PSAneicpIHx8IChjYyA+PSAnQScg
JiYgY2MgPD0gJ1onKSkgeworICAgICAgICAgICAgICAgIGVudGl0eU5hbWUuYXBwZW5kKGNjKTsK
KyAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IE5hbWVkOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIE51bWJlclR5cGU6CisgICAgICAgICAgICBpZiAoY2MgPT0g
J3gnIHx8IGNjID09ICdYJykKKyAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IE1heWJlSGV4
OworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0gJzAnICYmIGNjIDw9ICc5JykgeworICAgICAg
ICAgICAgICAgIGVudGl0eVN0YXRlID0gRGVjaW1hbDsKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSBjYyAtICcwJzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc291cmNl
LnB1c2goJyMnKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1heWJlSGV4OgorICAgICAgICAgICAgaWYg
KGNjID49ICcwJyAmJiBjYyA8PSAnOScpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY2MgLSAn
MCc7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA+PSAnYScgJiYgY2MgPD0gJ2YnKQorICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IDEwICsgY2MgLSAnYSc7CisgICAgICAgICAgICBlbHNlIGlmIChj
YyA+PSAnQScgJiYgY2MgPD0gJ0YnKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IDEwICsgY2Mg
LSAnQSc7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UucHVzaChz
ZWVuQ2hhcnNbMV0pOworICAgICAgICAgICAgICAgIHNvdXJjZS5wdXNoKCcjJyk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbnRpdHlTdGF0
ZSA9IEhleDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEhleDoKKyAgICAgICAg
ICAgIGlmIChjYyA+PSAnMCcgJiYgY2MgPD0gJzknKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHJlc3VsdCAqIDE2ICsgY2MgLSAnMCc7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA+PSAnYScg
JiYgY2MgPD0gJ2YnKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDE2ICsgMTAg
KyBjYyAtICdhJzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNjID49ICdBJyAmJiBjYyA8PSAnRicp
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMTYgKyAxMCArIGNjIC0gJ0EnOwor
ICAgICAgICAgICAgZWxzZSBpZiAoY2MgPT0gJzsnKSB7CisgICAgICAgICAgICAgICAgc291cmNl
LmFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbGVnYWxFbnRpdHlGb3IocmVzdWx0
KTsKKyAgICAgICAgICAgIH0gZWxzZSAKKyAgICAgICAgICAgICAgICByZXR1cm4gbGVnYWxFbnRp
dHlGb3IocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERlY2ltYWw6
CisgICAgICAgICAgICBpZiAoY2MgPj0gJzAnICYmIGNjIDw9ICc5JykKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSByZXN1bHQgKiAxMCArIGNjIC0gJzAnOworICAgICAgICAgICAgZWxzZSBpZiAo
Y2MgPT0gJzsnKSB7CisgICAgICAgICAgICAgICAgc291cmNlLmFkdmFuY2UoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbGVnYWxFbnRpdHlGb3IocmVzdWx0KTsKKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIHJldHVybiBsZWdhbEVudGl0eUZvcihyZXN1bHQpOworICAgICAg
ICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTmFtZWQ6CisgICAgICAg
ICAgICAvLyBUaGlzIGlzIHRoZSBhdHRyaWJ1dGUgb25seSB2ZXJzaW9uLCBnZW5lcmljIHZlcnNp
b24gbWF0Y2hlcyBzb21ld2hhdCBkaWZmZXJlbnRseQorICAgICAgICAgICAgd2hpbGUgKGVudGl0
eU5hbWUuc2l6ZSgpIDw9IDgpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJzsnKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEVudGl0eSogZW50aXR5ID0gZmluZEVudGl0eShlbnRp
dHlOYW1lLmRhdGEoKSwgZW50aXR5TmFtZS5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoZW50aXR5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UuYWR2YW5jZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudGl0eS0+Y29kZTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKCEoY2MgPj0gJ2EnICYmIGNjIDw9ICd6JykgJiYgIShjYyA+
PSAnQScgJiYgY2MgPD0gJ1onKSAmJiAhKGNjID49ICcwJyAmJiBjYyA8PSAnOScpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEVudGl0eSogZW50aXR5ID0gZmluZEVudGl0eShlbnRpdHlO
YW1lLmRhdGEoKSwgZW50aXR5TmFtZS5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAo
ZW50aXR5KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudGl0eS0+Y29kZTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVudGl0eU5hbWUuYXBwZW5kKGNjKTsKKyAgICAgICAgICAgICAgICBzb3VyY2UuYWR2YW5j
ZSgpOworICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpKQorICAgICAgICAgICAg
ICAgICAgICBnb3RvIG91dE9mQ2hhcmFjdGVyczsKKyAgICAgICAgICAgICAgICBjYyA9ICpzb3Vy
Y2U7CisgICAgICAgICAgICAgICAgc2VlbkNoYXJzLmFwcGVuZChjYyk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoc2VlbkNoYXJzLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAg
IHNvdXJjZS5wdXNoKHNlZW5DaGFyc1swXSk7CisgICAgICAgICAgICBlbHNlIGlmIChzZWVuQ2hh
cnMuc2l6ZSgpID09IDMpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UucHVzaChzZWVuQ2hhcnNb
MV0pOworICAgICAgICAgICAgICAgIHNvdXJjZS5wdXNoKHNlZW5DaGFyc1swXSk7CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzb3VyY2UucHJlcGVuZChTZWdtZW50ZWRTdHJp
bmcoU3RyaW5nKHNlZW5DaGFycy5kYXRhKCksIHNlZW5DaGFycy5zaXplKCkgLSAxKSkpOworICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgc291cmNlLmFkdmFuY2UoKTsK
KyAgICB9CitvdXRPZkNoYXJhY3RlcnM6CisgICAgbm90RW5vdWdoQ2hhcmFjdGVycyA9IHRydWU7
CisgICAgc291cmNlLnByZXBlbmQoU2VnbWVudGVkU3RyaW5nKFN0cmluZyhzZWVuQ2hhcnMuZGF0
YSgpLCBzZWVuQ2hhcnMuc2l6ZSgpKSkpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEhUTUxQ
cmVsb2FkVG9rZW5pemVyOjp0b2tlbml6ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkK
K3sKKyAgICBBU1NFUlQobV9pblByb2dyZXNzKTsKKyAgICAKKyAgICBtX3NvdXJjZS5hcHBlbmQo
c291cmNlKTsKKworICAgIC8vIFRoaXMgaXMgYSBzaW1wbGlmaWVkIEhUTUw1IFRva2VuaXplcgor
ICAgIHdoaWxlICghbV9zb3VyY2UuaXNFbXB0eSgpKSB7CisgICAgICAgIFVDaGFyIGNjID0gKm1f
c291cmNlOworICAgICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICAgICAgY2FzZSBEYXRhOgor
ICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICByZW1lbWJlckNoYXJhY3Rl
cihjYyk7CisgICAgICAgICAgICAgICAgaWYgKGNjID09ICcmJykgeworICAgICAgICAgICAgICAg
ICAgICBpZiAobV9jb250ZW50TW9kZWwgPT0gUENEQVRBIHx8IG1fY29udGVudE1vZGVsID09IFJD
REFUQSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEVudGl0eURhdGE7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICgobV9jb250ZW50TW9kZWwgPT0gUkNEQVRBIHx8IG1fY29udGVudE1vZGVsID09IENEQVRB
KSAmJiAhbV9lc2NhcGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0Q2hhcmFj
dGVyc01hdGNoKCI8IS0tIiwgNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lc2Nh
cGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChjYyA9PSAnPCcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fY29udGVudE1vZGVs
ID09IFBDREFUQSB8fCAoKG1fY29udGVudE1vZGVsID09IFJDREFUQSB8fCBtX2NvbnRlbnRNb2Rl
bCA9PSBDREFUQSkgJiYgIW1fZXNjYXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9z
dGF0ZSA9IFRhZ09wZW47CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gJz4nKSB7Cisg
ICAgICAgICAgICAgICAgICAgICBpZiAoKG1fY29udGVudE1vZGVsID09IFJDREFUQSB8fCBtX2Nv
bnRlbnRNb2RlbCA9PSBDREFUQSkgJiYgbV9lc2NhcGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobGFzdENoYXJhY3RlcnNNYXRjaCgiLS0+IiwgMykpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZXNjYXBlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVtaXRDaGFyYWN0ZXIoY2MpOworICAg
ICAgICAgICAgICAgIG1fc291cmNlLmFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICBpZiAobV9z
b3VyY2UuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIGNjID0gKm1fc291cmNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRW50aXR5RGF0YToKKyAgICAgICAgICAgIC8vIHNob3VsZCB0cnkgdG8g
Y29uc3VtZSB0aGUgZW50aXR5IGJ1dCB3ZSBkb24ndCBjYXJlCisgICAgICAgICAgICBtX3N0YXRl
ID0gRGF0YTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRhZ09wZW46CisgICAg
ICAgICAgICBpZiAobV9jb250ZW50TW9kZWwgPT0gUkNEQVRBIHx8IG1fY29udGVudE1vZGVsID09
IENEQVRBKSB7CisgICAgICAgICAgICAgICAgaWYgKGNjID09ICcvJykKKyAgICAgICAgICAgICAg
ICAgICAgbV9zdGF0ZSA9IENsb3NlVGFnT3BlbjsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9jb250
ZW50TW9kZWwgPT0gUENEQVRBKSB7CisgICAgICAgICAgICAgICAgaWYgKGNjID09ICchJykKKyAg
ICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IE1hcmt1cERlY2xhcmF0aW9uT3BlbjsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnLycpCisgICAgICAgICAgICAgICAgICAgIG1fc3Rh
dGUgPSBDbG9zZVRhZ09wZW47CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0gJ0EnICYm
IGNjIDw9ICdaJykgeworICAgICAgICAgICAgICAgICAgICBtX3RhZ05hbWUuY2xlYXIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV90YWdOYW1lLmFwcGVuZChjYyArIDB4MjApOworICAgICAgICAg
ICAgICAgICAgICBtX2Nsb3NlVGFnID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIG1fc3Rh
dGUgPSBUYWdOYW1lOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2MgPj0gJ2EnICYmIGNj
IDw9ICd6JykgeworICAgICAgICAgICAgICAgICAgICBtX3RhZ05hbWUuY2xlYXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV90YWdOYW1lLmFwcGVuZChjYyk7CisgICAgICAgICAgICAgICAgICAg
IG1fY2xvc2VUYWcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IFRhZ05h
bWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnPicpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZSA9IERhdGE7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA9
PSAnPycpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEJvZ3VzQ29tbWVudDsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0
YTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2xvc2VUYWdPcGVu
OgorICAgICAgICAgICAgaWYgKG1fY29udGVudE1vZGVsID09IFJDREFUQSB8fCBtX2NvbnRlbnRN
b2RlbCA9PSBDREFUQSkgeworICAgICAgICAgICAgICAgIGlmICghbV9sYXN0U3RhcnRUYWcubGVu
Z3RoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAobV9zb3VyY2UubGVuZ3RoKCkgPCBtX2xhc3RTdGFydFRhZy5sZW5ndGgoKSArIDEpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBWZWN0b3I8VUNoYXI+IHRt
cFN0cmluZzsKKyAgICAgICAgICAgICAgICBVQ2hhciB0bXBDaGFyOworICAgICAgICAgICAgICAg
IGJvb2wgbWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbiA9IDA7
IG4gPCBtX2xhc3RTdGFydFRhZy5sZW5ndGgoKSArIDE7IG4rKykgeworICAgICAgICAgICAgICAg
ICAgICB0bXBDaGFyID0gdV90b2xvd2VyKCptX3NvdXJjZSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChuIDwgbV9sYXN0U3RhcnRUYWcubGVuZ3RoKCkgJiYgdG1wQ2hhciAhPSBtX2xhc3RTdGFy
dFRhZ1tuXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgIHRtcFN0cmluZy5hcHBlbmQodG1wQ2hhcik7CisgICAgICAgICAgICAgICAg
ICAgIG1fc291cmNlLmFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgbV9zb3VyY2UucHJlcGVuZChTZWdtZW50ZWRTdHJpbmcoU3RyaW5nKHRtcFN0cmluZy5kYXRh
KCksIHRtcFN0cmluZy5zaXplKCkpKSk7CisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCB8fCAo
IWlzV2hpdGVzcGFjZSh0bXBDaGFyKSAmJiB0bXBDaGFyICE9ICc+JyAmIHRtcENoYXIgIT0gJy8n
KSkgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGNjID49ICdBJyAmJiBjYyA8PSAnWicpIHsKKyAgICAgICAgICAgICAgICBtX3Rh
Z05hbWUuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBtX3RhZ05hbWUuYXBwZW5kKGNjICsgMHgy
MCk7CisgICAgICAgICAgICAgICAgbV9jbG9zZVRhZyA9IHRydWU7CisgICAgICAgICAgICAgICAg
bV9zdGF0ZSA9IFRhZ05hbWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNjID49ICdhJyAmJiBj
YyA8PSAneicpIHsKKyAgICAgICAgICAgICAgICBtX3RhZ05hbWUuY2xlYXIoKTsKKyAgICAgICAg
ICAgICAgICBtX3RhZ05hbWUuYXBwZW5kKGNjKTsKKyAgICAgICAgICAgICAgICBtX2Nsb3NlVGFn
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gVGFnTmFtZTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoY2MgPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gQm9ndXNDb21t
ZW50OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGFnTmFtZToKKyAgICAgICAg
ICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjYykpIHsK
KyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEJlZm9yZUF0dHJpYnV0ZU5hbWU7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoY2MgPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRUYWcoKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJy8nKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBCZWZvcmVBdHRyaWJ1dGVOYW1lOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKGNjID49ICdBJyAmJiBjYyA8PSAnWicpCisgICAgICAgICAgICAgICAgICAgIG1fdGFnTmFt
ZS5hcHBlbmQoY2MgKyAweDIwKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIG1fdGFnTmFtZS5hcHBlbmQoY2MpOworICAgICAgICAgICAgICAgIG1fc291cmNlLmFk
dmFuY2UoKTsKKyAgICAgICAgICAgICAgICBpZiAobV9zb3VyY2UuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY2MgPSAqbV9zb3VyY2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCZWZvcmVBdHRy
aWJ1dGVOYW1lOgorICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjYykpCisgICAgICAgICAg
ICAgICAgOworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPT0gJz4nKSB7CisgICAgICAgICAgICAg
ICAgZW1pdFRhZygpOworICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChjYyA+PSAnQScgJiYgY2MgPD0gJ1onKSB7CisgICAgICAgICAgICAgICAg
bV9hdHRyaWJ1dGVOYW1lLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVWYWx1
ZS5jbGVhcigpOworICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlTmFtZS5hcHBlbmQoY2MgKyAw
eDIwKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gQXR0cmlidXRlTmFtZTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoY2MgPT0gJy8nKQorICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlTmFtZS5jbGVhcigpOworICAgICAg
ICAgICAgICAgIG1fYXR0cmlidXRlVmFsdWUuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBtX2F0
dHJpYnV0ZU5hbWUuYXBwZW5kKGNjKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gQXR0cmli
dXRlTmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEF0dHJpYnV0ZU5hbWU6CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAg
IGlmIChpc1doaXRlc3BhY2UoY2MpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBB
ZnRlckF0dHJpYnV0ZU5hbWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJz0nKSB7CisgICAgICAgICAgICAg
ICAgICAgIG1fc3RhdGUgPSBCZWZvcmVBdHRyaWJ1dGVWYWx1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjYyA9PSAn
PicpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdFRhZygpOworICAgICAgICAgICAgICAgICAg
ICBtX3N0YXRlID0gRGF0YTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfSAKKyAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJy8nKSB7CisgICAgICAgICAgICAg
ICAgICAgIG1fc3RhdGUgPSBCZWZvcmVBdHRyaWJ1dGVOYW1lOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNjID49ICdB
JyAmJiBjYyA8PSAnWicpCisgICAgICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlTmFtZS5hcHBl
bmQoY2MgKyAweDIwKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IG1fYXR0cmlidXRlTmFtZS5hcHBlbmQoY2MpOworICAgICAgICAgICAgICAgIG1fc291cmNlLmFk
dmFuY2UoKTsKKyAgICAgICAgICAgICAgICBpZiAobV9zb3VyY2UuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY2MgPSAqbV9zb3VyY2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBZnRlckF0dHJp
YnV0ZU5hbWU6CisgICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNjKSkKKyAgICAgICAgICAg
ICAgICA7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnPScpCisgICAgICAgICAgICAgICAg
bV9zdGF0ZSA9IEJlZm9yZUF0dHJpYnV0ZVZhbHVlOyAKKyAgICAgICAgICAgIGVsc2UgaWYgKGNj
ID09ICc+JykgeworICAgICAgICAgICAgICAgIGVtaXRUYWcoKTsKKyAgICAgICAgICAgICAgICBt
X3N0YXRlID0gRGF0YTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2MgPj0gJ0EnICYmIGNjIDw9
ICdaJykgeworICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlTmFtZS5jbGVhcigpOworICAgICAg
ICAgICAgICAgIG1fYXR0cmlidXRlVmFsdWUuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBtX2F0
dHJpYnV0ZU5hbWUuYXBwZW5kKGNjICsgMHgyMCk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9
IEF0dHJpYnV0ZU5hbWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNjID09ICcvJykKKyAgICAg
ICAgICAgICAgICBtX3N0YXRlID0gQmVmb3JlQXR0cmlidXRlTmFtZTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlTmFtZS5jbGVhcigpOworICAgICAgICAg
ICAgICAgIG1fYXR0cmlidXRlVmFsdWUuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBtX2F0dHJp
YnV0ZU5hbWUuYXBwZW5kKGNjKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gQXR0cmlidXRl
TmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJl
Zm9yZUF0dHJpYnV0ZVZhbHVlOgorICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjYykpCisg
ICAgICAgICAgICAgICAgOworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPT0gJyInKQorICAgICAg
ICAgICAgICAgIG1fc3RhdGUgPSBBdHRyaWJ1dGVWYWx1ZURvdWJsZVF1b3RlZDsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGNjID09ICcmJykgeworICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBBdHRy
aWJ1dGVWYWx1ZVVucXVvdGVkOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChjYyA9PSAnXCcnKQorICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBBdHRy
aWJ1dGVWYWx1ZVNpbmdsZVF1b3RlZDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc+Jykg
eworICAgICAgICAgICAgICAgIGVtaXRUYWcoKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0g
RGF0YTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVW
YWx1ZS5hcHBlbmQoY2MpOworICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBBdHRyaWJ1dGVWYWx1
ZVVucXVvdGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQXR0cmlidXRlVmFsdWVEb3VibGVRdW90ZWQ6CisgICAgICAgICAgICB3aGlsZSAoMSkgewor
ICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnIicpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJv
Y2Vzc0F0dHJpYnV0ZSgpOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gQmVmb3JlQXR0
cmlidXRlTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnJicpIHsKKyAgICAgICAgICAgICAgICAgICAg
bV9zdGF0ZUJlZm9yZUVudGl0eUluQXR0cmlidXRlVmFsdWUgPSBtX3N0YXRlOworICAgICAgICAg
ICAgICAgICAgICBtX3N0YXRlID0gRW50aXR5SW5BdHRyaWJ1dGVWYWx1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICBtX2F0
dHJpYnV0ZVZhbHVlLmFwcGVuZChjYyk7CisgICAgICAgICAgICAgICAgbV9zb3VyY2UuYWR2YW5j
ZSgpOworICAgICAgICAgICAgICAgIGlmIChtX3NvdXJjZS5pc0VtcHR5KCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjYyA9ICptX3NvdXJjZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEF0dHJpYnV0ZVZhbHVl
U2luZ2xlUXVvdGVkOgorICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoY2MgPT0gJ1wnJykgeworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0cmlidXRlKCk7
CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBCZWZvcmVBdHRyaWJ1dGVOYW1lOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKGNjID09ICcmJykgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQmVmb3JlRW50
aXR5SW5BdHRyaWJ1dGVWYWx1ZSA9IG1fc3RhdGU7CisgICAgICAgICAgICAgICAgICAgIG1fc3Rh
dGUgPSBFbnRpdHlJbkF0dHJpYnV0ZVZhbHVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlVmFsdWUuYXBw
ZW5kKGNjKTsKKyAgICAgICAgICAgICAgICBtX3NvdXJjZS5hZHZhbmNlKCk7CisgICAgICAgICAg
ICAgICAgaWYgKG1fc291cmNlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIGNjID0gKm1fc291cmNlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXR0cmlidXRlVmFsdWVVbnF1b3RlZDoKKyAgICAg
ICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjYykp
IHsKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0F0dHJpYnV0ZSgpOworICAgICAgICAgICAg
ICAgICAgICBtX3N0YXRlID0gQmVmb3JlQXR0cmlidXRlTmFtZTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjYyA9PSAn
JicpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZUJlZm9yZUVudGl0eUluQXR0cmlidXRl
VmFsdWUgPSBtX3N0YXRlOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gRW50aXR5SW5B
dHRyaWJ1dGVWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnPicpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcHJvY2Vzc0F0dHJpYnV0ZSgpOworICAgICAgICAgICAgICAgICAgICBlbWl0VGFnKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVWYWx1
ZS5hcHBlbmQoY2MpOworICAgICAgICAgICAgICAgIG1fc291cmNlLmFkdmFuY2UoKTsKKyAgICAg
ICAgICAgICAgICBpZiAobV9zb3VyY2UuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgY2MgPSAqbV9zb3VyY2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbnRpdHlJbkF0dHJpYnV0ZVZhbHVlOiAK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sIG5vdEVub3VnaENoYXJhY3RlcnMg
PSBmYWxzZTsgCisgICAgICAgICAgICAgICAgdW5zaWduZWQgZW50aXR5ID0gY29uc3VtZUVudGl0
eShtX3NvdXJjZSwgbm90RW5vdWdoQ2hhcmFjdGVycyk7CisgICAgICAgICAgICAgICAgaWYgKG5v
dEVub3VnaENoYXJhY3RlcnMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICBpZiAoZW50aXR5ID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgICAgIG1fYXR0
cmlidXRlVmFsdWUuYXBwZW5kKFUxNl9MRUFEKGVudGl0eSkpOworICAgICAgICAgICAgICAgICAg
ICBtX2F0dHJpYnV0ZVZhbHVlLmFwcGVuZChVMTZfVFJBSUwoZW50aXR5KSk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChlbnRpdHkpCisgICAgICAgICAgICAgICAgICAgIG1fYXR0cmlidXRl
VmFsdWUuYXBwZW5kKGVudGl0eSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICBtX2F0dHJpYnV0ZVZhbHVlLmFwcGVuZCgnJicpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbV9zdGF0ZSA9IG1fc3RhdGVCZWZvcmVFbnRpdHlJbkF0dHJpYnV0ZVZhbHVlOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgQm9ndXNDb21tZW50OgorICAgICAg
ICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJz4nKSB7CisgICAg
ICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9zb3VyY2UuYWR2YW5jZSgp
OworICAgICAgICAgICAgICAgIGlmIChtX3NvdXJjZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjYyA9ICptX3NvdXJjZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1hcmt1cERlY2xhcmF0aW9u
T3BlbjogeworICAgICAgICAgICAgaWYgKGNjID09ICctJykgeworICAgICAgICAgICAgICAgIGlm
IChtX3NvdXJjZS5sZW5ndGgoKSA8IDIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICBtX3NvdXJjZS5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgY2MgPSAq
bV9zb3VyY2U7CisgICAgICAgICAgICAgICAgaWYgKGNjID09ICctJykKKyAgICAgICAgICAgICAg
ICAgICAgbV9zdGF0ZSA9IENvbW1lbnRTdGFydDsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEJvZ3VzQ29tbWVudDsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgLy99IGVsc2Ug
aWYgKGNjID09ICdEJykgeworICAgICAgICAgICAgICAgIC8vIGVudGVyIERPQ1RZUEUgc3RhdGUK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEJvZ3VzQ29t
bWVudDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29tbWVudFN0YXJ0OgorICAgICAg
ICAgICAgaWYgKGNjID09ICctJykKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gQ29tbWVudFN0
YXJ0RGFzaDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc+JykKKyAgICAgICAgICAgICAg
ICBtX3N0YXRlID0gRGF0YTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3N0
YXRlID0gQ29tbWVudDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbW1lbnRT
dGFydERhc2g6CisgICAgICAgICAgICBpZiAoY2MgPT0gJy0nKQorICAgICAgICAgICAgICAgIG1f
c3RhdGUgPSBDb21tZW50RW5kOworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPT0gJz4nKQorICAg
ICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIG1fc3RhdGUgPSBDb21tZW50OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ29tbWVudDoKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgaWYg
KGNjID09ICctJykgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gQ29tbWVudEVuZERh
c2g7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBtX3NvdXJjZS5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgaWYgKG1fc291
cmNlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIGNjID0gKm1fc291cmNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ29tbWVudEVuZERhc2g6CisgICAgICAgICAgICBpZiAoY2MgPT0gJy0nKQor
ICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBDb21tZW50RW5kOworICAgICAgICAgICAgZWxzZSAK
KyAgICAgICAgICAgICAgICBtX3N0YXRlID0gQ29tbWVudDsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENvbW1lbnRFbmQ6CisgICAgICAgICAgICBpZiAoY2MgPT0gJz4nKQorICAg
ICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPT0g
Jy0nKQorICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAg
ICAgbV9zdGF0ZSA9IENvbW1lbnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBtX3NvdXJjZS5hZHZhbmNlKCk7CisgICAgfQorfQorICAgIAordm9pZCBIVE1MUHJlbG9h
ZFRva2VuaXplcjo6cHJvY2Vzc0F0dHJpYnV0ZSgpCit7CisgICAgQXRvbWljU3RyaW5nIHRhZyA9
IEF0b21pY1N0cmluZyhtX3RhZ05hbWUuZGF0YSgpLCBtX3RhZ05hbWUuc2l6ZSgpKTsKKyAgICBB
dG9taWNTdHJpbmcgYXR0cmlidXRlID0gQXRvbWljU3RyaW5nKG1fYXR0cmlidXRlTmFtZS5kYXRh
KCksIG1fYXR0cmlidXRlTmFtZS5zaXplKCkpOworICAgIAorICAgIFN0cmluZyB2YWx1ZShtX2F0
dHJpYnV0ZVZhbHVlLmRhdGEoKSwgbV9hdHRyaWJ1dGVWYWx1ZS5zaXplKCkpOworICAgIGlmICh0
YWcgPT0gc2NyaXB0VGFnIHx8IHRhZyA9PSBpbWdUYWcpIHsKKyAgICAgICAgaWYgKGF0dHJpYnV0
ZSA9PSBzcmNBdHRyICYmIG1fdXJsVG9Mb2FkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fdXJs
VG9Mb2FkID0gcGFyc2VVUkwodmFsdWUpOworICAgIH0gZWxzZSBpZiAodGFnID09IGxpbmtUYWcp
IHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZSA9PSBocmVmQXR0ciAmJiBtX3VybFRvTG9hZC5pc0Vt
cHR5KCkpCisgICAgICAgICAgICBtX3VybFRvTG9hZCA9IHBhcnNlVVJMKHZhbHVlKTsKKyAgICAg
ICAgZWxzZSBpZiAoYXR0cmlidXRlID09IHJlbEF0dHIpIHsKKyAgICAgICAgICAgIGJvb2wgc3R5
bGVTaGVldCA9IGZhbHNlOworICAgICAgICAgICAgYm9vbCBhbHRlcm5hdGUgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGJvb2wgaWNvbiA9IGZhbHNlOworICAgICAgICAgICAgSFRNTExpbmtFbGVtZW50
Ojp0b2tlbml6ZVJlbEF0dHJpYnV0ZSh2YWx1ZSwgc3R5bGVTaGVldCwgYWx0ZXJuYXRlLCBpY29u
KTsKKyAgICAgICAgICAgIG1fbGlua0lzU3R5bGVTaGVldCA9IHN0eWxlU2hlZXQgJiYgIWFsdGVy
bmF0ZSAmJiAhaWNvbjsKKyAgICAgICAgfQorICAgIH0KK30KKyAgICAKK2lubGluZSB2b2lkIEhU
TUxQcmVsb2FkVG9rZW5pemVyOjplbWl0Q2hhcmFjdGVyKFVDaGFyIGMpCit7CisgICAgaWYgKG1f
Y29udGVudE1vZGVsID09IENEQVRBICYmIG1fbGFzdFN0YXJ0VGFnID09IHN0eWxlVGFnKSAKKyAg
ICAgICAgdG9rZW5pemVDU1MoYyk7Cit9CisgICAgCitpbmxpbmUgdm9pZCBIVE1MUHJlbG9hZFRv
a2VuaXplcjo6dG9rZW5pemVDU1MoVUNoYXIgYykKK3sgICAgCisgICAgLy8gV2UgYXJlIGp1c3Qg
aW50ZXJlc3RlZCBpbiBAaW1wb3J0IHJ1bGVzLCBubyBuZWVkIGZvciByZWFsIHRva2VuaXphdGlv
biBoZXJlCisgICAgLy8gU2VhcmNoaW5nIGZvciBvdGhlciB0eXBlcyBvZiByZXNvdXJjZXMgaXMg
cHJvYmFibHkgbG93IHBheW9mZgorICAgIHN3aXRjaCAobV9jc3NTdGF0ZSkgeworICAgIGNhc2Ug
Q1NTSW5pdGlhbDoKKyAgICAgICAgaWYgKGMgPT0gJ0AnKQorICAgICAgICAgICAgbV9jc3NTdGF0
ZSA9IENTU1J1bGVTdGFydDsKKyAgICAgICAgZWxzZSBpZiAoYyA9PSAnLycpCisgICAgICAgICAg
ICBtX2Nzc1N0YXRlID0gQ1NTTWF5YmVDb21tZW50OworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENTU01heWJlQ29tbWVudDoKKyAgICAgICAgaWYgKGMgPT0gJyonKQorICAgICAgICAgICAgbV9j
c3NTdGF0ZSA9IENTU0NvbW1lbnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY3NzU3Rh
dGUgPSBDU1NJbml0aWFsOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU0NvbW1lbnQ6Cisg
ICAgICAgIGlmIChjID09ICcqJykKKyAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NNYXliZUNv
bW1lbnRFbmQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTTWF5YmVDb21tZW50RW5kOgor
ICAgICAgICBpZiAoYyA9PSAnLycpCisgICAgICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTSW5pdGlh
bDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jc3NTdGF0ZSA9IENTU0NvbW1lbnQ7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUnVsZVN0YXJ0OgorICAgICAgICBpZiAoKGMgPj0g
J0EnICYmIGMgPD0gJ1onKSB8fCAoYyA+PSAnYScgJiYgYyA8PSAneicpKSB7CisgICAgICAgICAg
ICBtX2Nzc1J1bGUuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fY3NzUnVsZVZhbHVlLmNsZWFyKCk7
CisgICAgICAgICAgICBtX2Nzc1J1bGUuYXBwZW5kKGMpOworICAgICAgICAgICAgbV9jc3NTdGF0
ZSA9IENTU1J1bGU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9jc3NTdGF0ZSA9IENT
U0luaXRpYWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUnVsZToKKyAgICAgICAgaWYg
KGlzV2hpdGVzcGFjZShjKSkKKyAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NBZnRlclJ1bGU7
CisgICAgICAgIGVsc2UgaWYgKGMgPT0gJzsnKQorICAgICAgICAgICAgbV9jc3NTdGF0ZSA9IENT
U0luaXRpYWw7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY3NzUnVsZS5hcHBlbmQoYyk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTQWZ0ZXJSdWxlOgorICAgICAgICBpZiAoaXNX
aGl0ZXNwYWNlKGMpKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlIGlmIChjID09ICc7JykK
KyAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NJbml0aWFsOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NSdWxlVmFsdWU7CisgICAgICAgICAgICBtX2Nzc1J1
bGVWYWx1ZS5hcHBlbmQoYyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
U1NSdWxlVmFsdWU6CisgICAgICAgIGlmIChpc1doaXRlc3BhY2UoYykpCisgICAgICAgICAgICBt
X2Nzc1N0YXRlID0gQ1NTQWZlclJ1bGVWYWx1ZTsKKyAgICAgICAgZWxzZSBpZiAoYyA9PSAnOycp
IHsKKyAgICAgICAgICAgIGVtaXRDU1NSdWxlKCk7CisgICAgICAgICAgICBtX2Nzc1N0YXRlID0g
Q1NTSW5pdGlhbDsKKyAgICAgICAgfSBlbHNlIAorICAgICAgICAgICAgbV9jc3NSdWxlVmFsdWUu
YXBwZW5kKGMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU0FmZXJSdWxlVmFsdWU6Cisg
ICAgICAgIGlmIChpc1doaXRlc3BhY2UoYykpCisgICAgICAgICAgICA7CisgICAgICAgIGVsc2Ug
aWYgKGMgPT0gJzsnKSB7CisgICAgICAgICAgICBlbWl0Q1NTUnVsZSgpOworICAgICAgICAgICAg
bV9jc3NTdGF0ZSA9IENTU0luaXRpYWw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBGSVhNRSBtZWRpYSBydWxlcworICAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NJbml0aWFs
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKyAgICAKK3ZvaWQgSFRNTFBy
ZWxvYWRUb2tlbml6ZXI6OmVtaXRUYWcoKQoreworICAgIAorICAgIGlmIChtX2Nsb3NlVGFnKSB7
CisgICAgICAgIG1fY29udGVudE1vZGVsID0gUENEQVRBOworICAgICAgICBtX2Nzc1N0YXRlID0g
Q1NTSW5pdGlhbDsKKyAgICAgICAgY2xlYXJMYXN0Q2hhcmFjdGVycygpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIEF0b21pY1N0cmluZyB0YWcobV90YWdOYW1lLmRhdGEoKSwg
bV90YWdOYW1lLnNpemUoKSk7CisgICAgCisgICAgbV9sYXN0U3RhcnRUYWcgPSB0YWc7CisgICAg
CisgICAgaWYgKHRhZyA9PSB0ZXh0YXJlYVRhZyB8fCB0YWcgPT0gdGl0bGVUYWcpCisgICAgICAg
IG1fY29udGVudE1vZGVsID0gUkNEQVRBOworICAgIGVsc2UgaWYgKHRhZyA9PSBzdHlsZVRhZyB8
fCB0YWcgPT0geG1wVGFnIHx8IHRhZyA9PSBzY3JpcHRUYWcgfHwgdGFnID09IGlmcmFtZVRhZyB8
fCB0YWcgPT0gbm9lbWJlZFRhZyB8fCB0YWcgPT0gbm9mcmFtZXNUYWcpCisgICAgICAgIG1fY29u
dGVudE1vZGVsID0gQ0RBVEE7CisgICAgZWxzZSBpZiAodGFnID09IG5vc2NyaXB0VGFnKQorICAg
ICAgICAvLyB3ZSB3b3VsZG4ndCBiZSBoZXJlIGlmIHNjcmlwdHMgd2VyZSBkaXNhYmxlZAorICAg
ICAgICBtX2NvbnRlbnRNb2RlbCA9IENEQVRBOworICAgIGVsc2UgaWYgKHRhZyA9PSBwbGFpbnRl
eHRUYWcpCisgICAgICAgIG1fY29udGVudE1vZGVsID0gUExBSU5URVhUOworICAgIGVsc2UKKyAg
ICAgICAgbV9jb250ZW50TW9kZWwgPSBQQ0RBVEE7CisgICAgCisgICAgaWYgKCFtX3VybFRvTG9h
ZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gMDsKKyAg
ICAgICAgCisgICAgICAgIGlmICh0YWcgPT0gc2NyaXB0VGFnKQorICAgICAgICAgICAgcmVzb3Vy
Y2UgPSBtX2RvY3VtZW50LT5kb2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChtX3VybFRvTG9hZCwg
bV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmVuY29kaW5nKCkpOyAKKyAgICAgICAgZWxz
ZSBpZiAodGFnID09IGltZ1RhZykgCisgICAgICAgICAgICByZXNvdXJjZSA9IG1fZG9jdW1lbnQt
PmRvY0xvYWRlcigpLT5yZXF1ZXN0SW1hZ2UobV91cmxUb0xvYWQpOworICAgICAgICBlbHNlIGlm
ICh0YWcgPT0gbGlua1RhZyAmJiBtX2xpbmtJc1N0eWxlU2hlZXQpIAorICAgICAgICAgICAgcmVz
b3VyY2UgPSBtX2RvY3VtZW50LT5kb2NMb2FkZXIoKS0+cmVxdWVzdENTU1N0eWxlU2hlZXQobV91
cmxUb0xvYWQsIG1fZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5lbmNvZGluZygpKTsKKyAg
ICAgICAgbV9kb2N1bWVudC0+ZG9jTG9hZGVyKCktPnJlZ2lzdGVyUHJlbG9hZChyZXNvdXJjZSk7
CisgICAgfQorICAgICAgICAKKyAgICBtX3VybFRvTG9hZCA9ICIiOworICAgIG1fbGlua0lzU3R5
bGVTaGVldCA9IGZhbHNlOworfQorICAgIAordm9pZCBIVE1MUHJlbG9hZFRva2VuaXplcjo6ZW1p
dENTU1J1bGUoKQoreworICAgIFN0cmluZyBydWxlKG1fY3NzUnVsZS5kYXRhKCksIG1fY3NzUnVs
ZS5zaXplKCkpOworICAgIGlmIChydWxlLmxvd2VyKCkgPT0gImltcG9ydCIgJiYgIW1fY3NzUnVs
ZVZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICBTdHJpbmcgdmFsdWUobV9jc3NSdWxlVmFsdWUu
ZGF0YSgpLCBtX2Nzc1J1bGVWYWx1ZS5zaXplKCkpOworICAgICAgICBTdHJpbmcgdXJsID0gcGFy
c2VVUkwodmFsdWUpOworICAgICAgICBpZiAoIXVybC5pc0VtcHR5KCkpCisgICAgICAgICAgICBt
X2RvY3VtZW50LT5kb2NMb2FkZXIoKS0+cmVnaXN0ZXJQcmVsb2FkKG1fZG9jdW1lbnQtPmRvY0xv
YWRlcigpLT5yZXF1ZXN0Q1NTU3R5bGVTaGVldCh1cmwsIG1fZG9jdW1lbnQtPmZyYW1lKCktPmxv
YWRlcigpLT5lbmNvZGluZygpKSk7CisvLyAgICAgICAgcHJpbnRmKCJASU1QT1JUICVzXG4iLCB1
cmwubGF0aW4xKCkuZGF0YSgpKTsKKyAgICB9CisgICAgbV9jc3NSdWxlLmNsZWFyKCk7CisgICAg
bV9jc3NSdWxlVmFsdWUuY2xlYXIoKTsKK30KKyAgICAgICAgICAgICAgICAKK30KSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MUHJlbG9hZFRva2VuaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MUHJlbG9hZFRva2VuaXplci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9odG1s
L0hUTUxQcmVsb2FkVG9rZW5pemVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisK
KyNpZm5kZWYgSFRNTFByZWxvYWRUb2tlbml6ZXJfaAorI2RlZmluZSBIVE1MUHJlbG9hZFRva2Vu
aXplcl9oCisKKyNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KyAgICAKKyAgICBjbGFzcyBDYWNoZWRSZXNvdXJjZTsKKyAgICBjbGFzcyBDYWNoZWRSZXNvdXJj
ZUNsaWVudDsKKyAgICBjbGFzcyBEb2N1bWVudDsKKyAgICAKKyAgICBjbGFzcyBIVE1MUHJlbG9h
ZFRva2VuaXplciA6IE5vbmNvcHlhYmxlCisgICAgeworICAgIHB1YmxpYzoKKyAgICAgICAgSFRN
TFByZWxvYWRUb2tlbml6ZXIoRG9jdW1lbnQqIGRvYyk7CisgICAgICAgIH5IVE1MUHJlbG9hZFRv
a2VuaXplcigpOworICAgICAgICB2b2lkIHdyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpOwor
ICAgICAgICB2b2lkIGJlZ2luKCk7CisgICAgICAgIHZvaWQgZW5kKCk7CisgICAgICAgIGJvb2wg
aW5Qcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1faW5Qcm9ncmVzczsgfQorICAgICAgICAKKyAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIGNvbnN1bWVFbnRpdHkoU2VnbWVudGVkU3RyaW5nJiwgYm9v
bCYgbm90RW5vdWdoQ2hhcmFjdGVycyk7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IHZvaWQgdG9rZW5pemUoY29uc3QgU2VnbWVudGVkU3RyaW5nJik7CisgICAgICAgIHZvaWQgcmVz
ZXQoKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgZW1pdFRhZygpOworICAgICAgICB2b2lkIGVt
aXRDaGFyYWN0ZXIoVUNoYXIgYyk7CisgICAgICAgIAorICAgICAgICB2b2lkIHRva2VuaXplQ1NT
KFVDaGFyIGMpOworICAgICAgICB2b2lkIGVtaXRDU1NSdWxlKCk7CisgICAgICAgIAorICAgICAg
ICB2b2lkIHByb2Nlc3NBdHRyaWJ1dGUoKTsKKworICAgICAgICAKKyAgICAgICAgdm9pZCBjbGVh
ckxhc3RDaGFyYWN0ZXJzKCk7CisgICAgICAgIHZvaWQgcmVtZW1iZXJDaGFyYWN0ZXIoVUNoYXIp
OworICAgICAgICBib29sIGxhc3RDaGFyYWN0ZXJzTWF0Y2goY29uc3QgY2hhciosIHVuc2lnbmVk
IGNvdW50KSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIGJvb2wgbV9pblByb2dyZXNzOworICAg
ICAgICBTZWdtZW50ZWRTdHJpbmcgbV9zb3VyY2U7CisgICAgICAgIAorICAgICAgICBlbnVtIFN0
YXRlIHsKKyAgICAgICAgICAgIERhdGEsCisgICAgICAgICAgICBFbnRpdHlEYXRhLAorICAgICAg
ICAgICAgVGFnT3BlbiwKKyAgICAgICAgICAgIENsb3NlVGFnT3BlbiwKKyAgICAgICAgICAgIFRh
Z05hbWUsCisgICAgICAgICAgICBCZWZvcmVBdHRyaWJ1dGVOYW1lLAorICAgICAgICAgICAgQXR0
cmlidXRlTmFtZSwKKyAgICAgICAgICAgIEFmdGVyQXR0cmlidXRlTmFtZSwKKyAgICAgICAgICAg
IEJlZm9yZUF0dHJpYnV0ZVZhbHVlLAorICAgICAgICAgICAgQXR0cmlidXRlVmFsdWVEb3VibGVR
dW90ZWQsCisgICAgICAgICAgICBBdHRyaWJ1dGVWYWx1ZVNpbmdsZVF1b3RlZCwKKyAgICAgICAg
ICAgIEF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQsCisgICAgICAgICAgICBFbnRpdHlJbkF0dHJpYnV0
ZVZhbHVlLAorICAgICAgICAgICAgQm9ndXNDb21tZW50LAorICAgICAgICAgICAgTWFya3VwRGVj
bGFyYXRpb25PcGVuLAorICAgICAgICAgICAgQ29tbWVudFN0YXJ0LAorICAgICAgICAgICAgQ29t
bWVudFN0YXJ0RGFzaCwKKyAgICAgICAgICAgIENvbW1lbnQsCisgICAgICAgICAgICBDb21tZW50
RW5kRGFzaCwKKyAgICAgICAgICAgIENvbW1lbnRFbmQKKyAgICAgICAgfTsKKyAgICAgICAgU3Rh
dGUgbV9zdGF0ZTsKKyAgICAgICAgYm9vbCBtX2VzY2FwZTsKKyAgICAgICAgZW51bSBDb250ZW50
TW9kZWwgeworICAgICAgICAgICAgUENEQVRBLAorICAgICAgICAgICAgUkNEQVRBLAorICAgICAg
ICAgICAgQ0RBVEEsCisgICAgICAgICAgICBQTEFJTlRFWFQKKyAgICAgICAgfTsKKyAgICAgICAg
Q29udGVudE1vZGVsIG1fY29udGVudE1vZGVsOworICAgICAgICB1bnNpZ25lZCBtX2NvbW1lbnRQ
b3M7CisgICAgICAgIFN0YXRlIG1fc3RhdGVCZWZvcmVFbnRpdHlJbkF0dHJpYnV0ZVZhbHVlOwor
ICAgICAgICAKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxhc3RDaGFyYWN0ZXJzQnVm
ZmVyU2l6ZSA9IDg7CisgICAgICAgIFVDaGFyIG1fbGFzdENoYXJhY3RlcnNbbGFzdENoYXJhY3Rl
cnNCdWZmZXJTaXplXTsKKyAgICAgICAgdW5zaWduZWQgbV9sYXN0Q2hhcmFjdGVySW5kZXg7Cisg
ICAgICAgIAorICAgICAgICBib29sIG1fY2xvc2VUYWc7CisgICAgICAgIFZlY3RvcjxVQ2hhciwg
MzI+IG1fdGFnTmFtZTsKKyAgICAgICAgVmVjdG9yPFVDaGFyLCAzMj4gbV9hdHRyaWJ1dGVOYW1l
OworICAgICAgICBWZWN0b3I8VUNoYXI+IG1fYXR0cmlidXRlVmFsdWU7CisgICAgICAgIEF0b21p
Y1N0cmluZyBtX2xhc3RTdGFydFRhZzsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBtX3VybFRv
TG9hZDsKKyAgICAgICAgYm9vbCBtX2xpbmtJc1N0eWxlU2hlZXQ7CisgICAgICAgIAorICAgICAg
ICBlbnVtIENTU1N0YXRlIHsKKyAgICAgICAgICAgIENTU0luaXRpYWwsCisgICAgICAgICAgICBD
U1NNYXliZUNvbW1lbnQsCisgICAgICAgICAgICBDU1NDb21tZW50LAorICAgICAgICAgICAgQ1NT
TWF5YmVDb21tZW50RW5kLAorICAgICAgICAgICAgQ1NTUnVsZVN0YXJ0LAorICAgICAgICAgICAg
Q1NTUnVsZSwKKyAgICAgICAgICAgIENTU0FmdGVyUnVsZSwKKyAgICAgICAgICAgIENTU1J1bGVW
YWx1ZSwKKyAgICAgICAgICAgIENTU0FmZXJSdWxlVmFsdWUKKyAgICAgICAgfTsKKyAgICAgICAg
Q1NTU3RhdGUgbV9jc3NTdGF0ZTsKKyAgICAgICAgVmVjdG9yPFVDaGFyLCAxNj4gbV9jc3NSdWxl
OworICAgICAgICBWZWN0b3I8VUNoYXI+IG1fY3NzUnVsZVZhbHVlOworICAgICAgICAKKyAgICAg
ICAgZG91YmxlIG1fdGltZVVzZWQ7CisgICAgICAgIAorICAgICAgICBEb2N1bWVudCogbV9kb2N1
bWVudDsKKyAgICB9OworCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUb2tl
bml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAko
cmV2aXNpb24gMzA4MTQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAi
SFRNTFByZWxvYWRUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRl
ICJIVE1MUGFyc2VyLmgiCiAjaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKQEAgLTE2MSw2
ICsxNjIsNyBAQCBIVE1MVG9rZW5pemVyOjpIVE1MVG9rZW5pemVyKEhUTUxEb2N1bWVuCiAgICAg
LCBwYXJzZXIobmV3IEhUTUxQYXJzZXIoZG9jLCByZXBvcnRFcnJvcnMpKQogICAgICwgaW5Xcml0
ZShmYWxzZSkKICAgICAsIG1fZnJhZ21lbnQoZmFsc2UpCisgICAgLCBtX3ByZWxvYWRUb2tlbml6
ZXIoMCkKIHsKICAgICBiZWdpbigpOwogfQpAQCAtNDk5LDYgKzUwMSwxNSBAQCBIVE1MVG9rZW5p
emVyOjpTdGF0ZSBIVE1MVG9rZW5pemVyOjpzY3JpCiAgICAgICAgICAgICB3cml0ZShwcmVwZW5k
aW5nU3JjLCBmYWxzZSk7CiAgICAgICAgICAgICBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgICAgIH0K
KyAgICB9IAorICAgIAorICAgIGlmICghcGVuZGluZ1NjcmlwdHMuaXNFbXB0eSgpICYmICFtX2V4
ZWN1dGluZ1NjcmlwdCkgeworICAgICAgICBpZiAoIW1fcHJlbG9hZFRva2VuaXplcikKKyAgICAg
ICAgICAgIG1fcHJlbG9hZFRva2VuaXplci5zZXQobmV3IEhUTUxQcmVsb2FkVG9rZW5pemVyKG1f
ZG9jKSk7CisgICAgICAgIGlmICghbV9wcmVsb2FkVG9rZW5pemVyLT5pblByb2dyZXNzKCkpIHsK
KyAgICAgICAgICAgIG1fcHJlbG9hZFRva2VuaXplci0+YmVnaW4oKTsKKyAgICAgICAgICAgIG1f
cHJlbG9hZFRva2VuaXplci0+d3JpdGUocGVuZGluZ1NyYyk7CisgICAgICAgIH0KICAgICB9CiAK
ICAgICBjdXJyZW50UHJlcGVuZGluZ1NyYyA9IHNhdmVkUHJlcGVuZGluZ1NyYzsKQEAgLTU1Miw2
ICs1NjMsMTUgQEAgSFRNTFRva2VuaXplcjo6U3RhdGUgSFRNTFRva2VuaXplcjo6c2NyaQogICAg
ICAgICAgICAgICAgIGN1cnJlbnRQcmVwZW5kaW5nU3JjLT5hcHBlbmQocHJlcGVuZGluZ1NyYyk7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcGVuZGluZ1NyYy5wcmVwZW5kKHBy
ZXBlbmRpbmdTcmMpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSBhcmUgc3R1Y2sg
d2FpdGluZyBmb3IgYW5vdGhlciBzY3JpcHQuIExldHMgY2hlY2sgdGhlIHNvdXJjZSB0aGF0Cisg
ICAgICAgICAgICAvLyB3YXMganVzdCBkb2N1bWVudC53cml0ZSgpbiBmb3IgYW55dGhpbmcgdG8g
bG9hZC4KKyAgICAgICAgICAgIHByaW50ZigiRE9DVU1FTlQgV1JJVEUgUFJFTE9BRFxuIik7Cisg
ICAgICAgICAgICBIVE1MUHJlbG9hZFRva2VuaXplciBkb2N1bWVudFdyaXRlUHJlbG9hZFRva2Vu
aXplcihtX2RvYyk7CisgICAgICAgICAgICBkb2N1bWVudFdyaXRlUHJlbG9hZFRva2VuaXplci5i
ZWdpbigpOworICAgICAgICAgICAgZG9jdW1lbnRXcml0ZVByZWxvYWRUb2tlbml6ZXIud3JpdGUo
cHJlcGVuZGluZ1NyYyk7CisgICAgICAgICAgICBkb2N1bWVudFdyaXRlUHJlbG9hZFRva2VuaXpl
ci5lbmQoKTsKKyAgICAgICAgICAgIHByaW50ZigiL0RPQ1VNRU5UIFdSSVRFIFBSRUxPQURcbiIp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9zdGF0ZSA9IHN0YXRlOwogICAgICAg
ICAgICAgd3JpdGUocHJlcGVuZGluZ1NyYywgZmFsc2UpOwpAQCAtMTU4NSwxMCArMTYwNSwxNiBA
QCBib29sIEhUTUxUb2tlbml6ZXI6OndyaXRlKGNvbnN0IFNlZ21lbnRlCiAgICAgICAgIC8vIGRv
bid0IHBhcnNlOyB3ZSB3aWxsIGRvIHRoaXMgbGF0ZXIKICAgICAgICAgaWYgKGN1cnJlbnRQcmVw
ZW5kaW5nU3JjKQogICAgICAgICAgICAgY3VycmVudFByZXBlbmRpbmdTcmMtPmFwcGVuZChzb3Vy
Y2UpOwotICAgICAgICBlbHNlCisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcGVuZGluZ1Ny
Yy5hcHBlbmQoc291cmNlKTsKKyAgICAgICAgICAgIGlmIChtX3ByZWxvYWRUb2tlbml6ZXIgJiYg
bV9wcmVsb2FkVG9rZW5pemVyLT5pblByb2dyZXNzKCkgJiYgYXBwZW5kRGF0YSkKKyAgICAgICAg
ICAgICAgICBtX3ByZWxvYWRUb2tlbml6ZXItPndyaXRlKHNvdXJjZSk7CisgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICAKKyAgICBpZiAobV9wcmVsb2FkVG9rZW5p
emVyICYmIG1fcHJlbG9hZFRva2VuaXplci0+aW5Qcm9ncmVzcygpICYmIGFwcGVuZERhdGEpCisg
ICAgICAgIG1fcHJlbG9hZFRva2VuaXplci0+ZW5kKCk7CiAKICAgICBpZiAoIXNyYy5pc0VtcHR5
KCkpCiAgICAgICAgIHNyYy5hcHBlbmQoc291cmNlKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
VG9rZW5pemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuaAko
cmV2aXNpb24gMzA4MTQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIGNsYXNzIEhUTUxEb2N1bWVudDsKIGNsYXNzIEhUTUxW
aWV3U291cmNlRG9jdW1lbnQ7CiBjbGFzcyBGcmFtZVZpZXc7CiBjbGFzcyBIVE1MUGFyc2VyOwor
Y2xhc3MgSFRNTFByZWxvYWRUb2tlbml6ZXI7CiBjbGFzcyBOb2RlOwogCiAvKioKQEAgLTQwMiw2
ICs0MDMsOCBAQCBwcml2YXRlOgogICAgIEhUTUxQYXJzZXIqIHBhcnNlcjsKICAgICBib29sIGlu
V3JpdGU7CiAgICAgYm9vbCBtX2ZyYWdtZW50OworICAgIAorICAgIE93blB0cjxIVE1MUHJlbG9h
ZFRva2VuaXplcj4gbV9wcmVsb2FkVG9rZW5pemVyOwogfTsKIAogdm9pZCBwYXJzZUhUTUxEb2N1
bWVudEZyYWdtZW50KGNvbnN0IFN0cmluZyYsIERvY3VtZW50RnJhZ21lbnQqKTsKSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL0NhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNo
ZS5jcHAJKHJldmlzaW9uIDMwODE0KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgogI2lu
Y2x1ZGUgPHN0ZGlvLmg+CiAKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisKIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIyOSw3ICsyMzEsNyBAQCB2b2lkIENh
Y2hlOjpwcnVuZURlYWRSZXNvdXJjZXMoKQogICAgICAgICAvLyBGaXJzdCBmbHVzaCBhbGwgdGhl
IGRlY29kZWQgZGF0YSBpbiB0aGlzIHF1ZXVlLgogICAgICAgICB3aGlsZSAoY3VycmVudCkgewog
ICAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHByZXYgPSBjdXJyZW50LT5tX3ByZXZJbkFsbFJl
c291cmNlc0xpc3Q7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnQtPnJlZmVyZW5jZWQoKSAmJiBj
dXJyZW50LT5pc0xvYWRlZCgpICYmIGN1cnJlbnQtPmRlY29kZWRTaXplKCkpIHsKKyAgICAgICAg
ICAgIGlmICghY3VycmVudC0+cmVmZXJlbmNlZCgpICYmICFjdXJyZW50LT5pc1ByZWxvYWRlZCgp
ICYmIGN1cnJlbnQtPmlzTG9hZGVkKCkgJiYgY3VycmVudC0+ZGVjb2RlZFNpemUoKSkgewogICAg
ICAgICAgICAgICAgIC8vIERlc3Ryb3kgb3VyIGRlY29kZWQgZGF0YS4gVGhpcyB3aWxsIHJlbW92
ZSB1cyBmcm9tIAogICAgICAgICAgICAgICAgIC8vIG1fbGl2ZURlY29kZWRSZXNvdXJjZXMsIGFu
ZCBwb3NzaWJseSBtb3ZlIHVzIHRvIGEgZGlmZmVybnQgCiAgICAgICAgICAgICAgICAgLy8gTFJV
IGxpc3QgaW4gbV9hbGxSZXNvdXJjZXMuCkBAIC0yNDUsNyArMjQ3LDcgQEAgdm9pZCBDYWNoZTo6
cHJ1bmVEZWFkUmVzb3VyY2VzKCkKICAgICAgICAgY3VycmVudCA9IG1fYWxsUmVzb3VyY2VzW2ld
Lm1fdGFpbDsKICAgICAgICAgd2hpbGUgKGN1cnJlbnQpIHsKICAgICAgICAgICAgIENhY2hlZFJl
c291cmNlKiBwcmV2ID0gY3VycmVudC0+bV9wcmV2SW5BbGxSZXNvdXJjZXNMaXN0OwotICAgICAg
ICAgICAgaWYgKCFjdXJyZW50LT5yZWZlcmVuY2VkKCkpIHsKKyAgICAgICAgICAgIGlmICghY3Vy
cmVudC0+cmVmZXJlbmNlZCgpICYmICFjdXJyZW50LT5pc1ByZWxvYWRlZCgpKSB7CiAgICAgICAg
ICAgICAgICAgcmVtb3ZlKGN1cnJlbnQpOwogCiAgICAgICAgICAgICAgICAgaWYgKG1fZGVhZFNp
emUgPD0gdGFyZ2V0U2l6ZSkKQEAgLTI3NSw2ICsyNzcsOSBAQCB2b2lkIENhY2hlOjpzZXRDYXBh
Y2l0aWVzKHVuc2lnbmVkIG1pbkRlCiAKIHZvaWQgQ2FjaGU6OnJlbW92ZShDYWNoZWRSZXNvdXJj
ZSogcmVzb3VyY2UpCiB7CisgICAgLy9pZiAocmVzb3VyY2UtPnVybCgpLmNvbnRhaW5zKCJjb250
ZXh0d2ViIikpIHsKKyAgICAvLyAgICBwcmludGYoIlJFTU9WRSAlc1xuIiwgcmVzb3VyY2UtPnVy
bCgpLmxhdGluMSgpLmRhdGEoKSk7CisgICAgLy99CiAgICAgLy8gVGhlIHJlc291cmNlIG1heSBo
YXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGJ5IHNvbWVvbmUgb3RoZXIgdGhhbiBvdXIgY2FsbGVy
LAogICAgIC8vIHdobyBuZWVkZWQgYSBmcmVzaCBjb3B5IGZvciBhIHJlbG9hZC4gU2VlIDxodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ3OSNjNj4uCiAgICAgaWYgKHJl
c291cmNlLT5pbkNhY2hlKCkpIHsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZEltYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRJbWFnZS5jcHAJKHJldmlzaW9u
IDMwODE0KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDksNyArMjA5LDcgQEAgdm9pZCBDYWNoZWRJbWFnZTo6ZGF0YShQYXNzUmVmUHRyPFNo
YXJlZAogICAgICAgICBpZiAobV9pbWFnZS0+aXNOdWxsKCkpIHsKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBJJ20gbm90IGNvbnZpbmNlZCB0aGlzIGNhc2UgY2FuIGV2ZW4gYmUgaGl0LgogICAgICAg
ICAgICAgZXJyb3IoKTsKLSAgICAgICAgICAgIGlmIChpbkNhY2hlKCkpCisgICAgICAgICAgICBp
ZiAoaW5DYWNoZSgpICYmICFpc1ByZWxvYWRlZCgpKQogICAgICAgICAgICAgICAgIGNhY2hlKCkt
PnJlbW92ZSh0aGlzKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL0NhY2hlZFJlc291cmNlLmNwcAkocmV2aXNpb24gMzA4MTQpCisrKyBXZWJDb3JlL2xvYWRl
ci9DYWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDkgQEAgQ2Fj
aGVkUmVzb3VyY2U6OkNhY2hlZFJlc291cmNlKGNvbnN0IFN0cgogICAgICwgbV9sYXN0RGVjb2Rl
ZEFjY2Vzc1RpbWUoMCkKICAgICAsIG1fc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyhzZW5kUmVz
b3VyY2VMb2FkQ2FsbGJhY2tzKQogICAgICwgbV9pbkNhY2hlKGZvckNhY2hlKQorICAgICwgbV9w
cmVsb2FkQ291bnQoMCkKKyAgICAsIG1fcHJlbG9hZFJlc3VsdChQcmVsb2FkTm90UmVmZXJlbmNl
ZCkKKyAgICAsIG1fcmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllcihmYWxzZSkKICAgICAsIG1f
ZG9jTG9hZGVyKDApCiB7CiAgICAgbV90eXBlID0gdHlwZTsKQEAgLTEwMSw2ICsxMDQsMTQgQEAg
dm9pZCBDYWNoZWRSZXNvdXJjZTo6c2V0UmVxdWVzdChSZXF1ZXN0KgogCiB2b2lkIENhY2hlZFJl
c291cmNlOjpyZWYoQ2FjaGVkUmVzb3VyY2VDbGllbnQgKmMpCiB7CisgICAgaWYgKG1fcHJlbG9h
ZFJlc3VsdCA9PSBQcmVsb2FkTm90UmVmZXJlbmNlZCkgeworICAgICAgICBpZiAoaXNMb2FkZWQo
KSkKKyAgICAgICAgICAgIG1fcHJlbG9hZFJlc3VsdCA9IFByZWxvYWRSZWZlcmVuY2VkV2hpbGVD
b21wbGV0ZTsKKyAgICAgICAgZWxzZSBpZiAobV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVy
KQorICAgICAgICAgICAgbV9wcmVsb2FkUmVzdWx0ID0gUHJlbG9hZFJlZmVyZW5jZWRXaGlsZUxv
YWRpbmc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcHJlbG9hZFJlc3VsdCA9IFByZWxv
YWRSZWZlcmVuY2VkOworICAgIH0KICAgICBpZiAoIXJlZmVyZW5jZWQoKSAmJiBpbkNhY2hlKCkp
CiAgICAgICAgIGNhY2hlKCktPmFkZFRvTGl2ZVJlc291cmNlc1NpemUodGhpcyk7CiAgICAgbV9j
bGllbnRzLmFkZChjKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkocmV2aXNpb24gMzA4
MTQpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03OSw2ICs3OSwxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlZihDYWNoZWRSZXNv
dXJjZUNsaWVudCopOwogICAgIHZvaWQgZGVyZWYoQ2FjaGVkUmVzb3VyY2VDbGllbnQqKTsKICAg
ICBib29sIHJlZmVyZW5jZWQoKSBjb25zdCB7IHJldHVybiAhbV9jbGllbnRzLmlzRW1wdHkoKTsg
fQorICAgIGVudW0gUHJlbG9hZFJlc3VsdCB7CisgICAgICAgIFByZWxvYWROb3RSZWZlcmVuY2Vk
LAorICAgICAgICBQcmVsb2FkUmVmZXJlbmNlZCwKKyAgICAgICAgUHJlbG9hZFJlZmVyZW5jZWRX
aGlsZUxvYWRpbmcsCisgICAgICAgIFByZWxvYWRSZWZlcmVuY2VkV2hpbGVDb21wbGV0ZQorICAg
IH07CisgICAgUHJlbG9hZFJlc3VsdCBwcmVsb2FkUmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9w
cmVsb2FkUmVzdWx0OyB9CisgICAgdm9pZCBzZXRSZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVy
KCkgeyBtX3JlcXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIgPSB0cnVlOyB9CisgICAgICAgIAog
ICAgIHZpcnR1YWwgdm9pZCBhbGxSZWZlcmVuY2VzUmVtb3ZlZCgpIHt9OwogCiAgICAgdW5zaWdu
ZWQgY291bnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudHMuc2l6ZSgpOyB9CkBAIC0xMTcsNyAr
MTI2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UpIHsgbV9yZXNwb25zZSA9IHJlc3BvbnNlOyB9CiAgICAgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlOyB9CiAg
ICAgCi0gICAgYm9vbCBjYW5EZWxldGUoKSBjb25zdCB7IHJldHVybiAhcmVmZXJlbmNlZCgpICYm
ICFtX3JlcXVlc3Q7IH0KKyAgICBib29sIGNhbkRlbGV0ZSgpIGNvbnN0IHsgcmV0dXJuICFyZWZl
cmVuY2VkKCkgJiYgIW1fcmVxdWVzdCAmJiAhbV9wcmVsb2FkQ291bnQ7IH0KIAogICAgIGJvb2wg
aXNFeHBpcmVkKCkgY29uc3Q7CiAKQEAgLTEzNiw2ICsxNDUsMTAgQEAgcHVibGljOgogCiAgICAg
dm9pZCBzZXREb2NMb2FkZXIoRG9jTG9hZGVyKiBkb2NMb2FkZXIpIHsgbV9kb2NMb2FkZXIgPSBk
b2NMb2FkZXI7IH0KICAgICAKKyAgICBib29sIGlzUHJlbG9hZGVkKCkgY29uc3QgeyByZXR1cm4g
bV9wcmVsb2FkQ291bnQ7IH0KKyAgICB2b2lkIGluY3JlYXNlUHJlbG9hZENvdW50KCkgeyArK21f
cHJlbG9hZENvdW50OyB9CisgICAgdm9pZCBkZWNyZWFzZVByZWxvYWRDb3VudCgpIHsgQVNTRVJU
KG1fcHJlbG9hZENvdW50KTsgLS1tX3ByZWxvYWRDb3VudDsgfQorICAgIAogcHJvdGVjdGVkOgog
ICAgIHZvaWQgc2V0RW5jb2RlZFNpemUodW5zaWduZWQpOwogICAgIHZvaWQgc2V0RGVjb2RlZFNp
emUodW5zaWduZWQpOwpAQCAtMTcxLDYgKzE4NCw5IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1f
ZGVsZXRlZDsKICAgICB1bnNpZ25lZCBtX2xydUluZGV4OwogI2VuZGlmCisgICAgdW5zaWduZWQg
bV9wcmVsb2FkQ291bnQ7CisgICAgUHJlbG9hZFJlc3VsdCBtX3ByZWxvYWRSZXN1bHQ7CisgICAg
Ym9vbCBtX3JlcXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXI7CiAKIHByaXZhdGU6CiAgICAgQ2Fj
aGVkUmVzb3VyY2UqIG1fbmV4dEluQWxsUmVzb3VyY2VzTGlzdDsKSW5kZXg6IFdlYkNvcmUvbG9h
ZGVyL0RvY0xvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVy
LmNwcAkocmV2aXNpb24gMzA4MTQpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw4IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
ICNpbmNsdWRlICJsb2FkZXIuaCIKIAorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBEb2NMb2FkZXI6OkRvY0xvYWRlcihGcmFtZSAqZnJhbWUsIERvY3VtZW50
KiBkb2MpCkBAIC03MSwyMyArNzMsMjcgQEAgdm9pZCBEb2NMb2FkZXI6OmNoZWNrRm9yUmVsb2Fk
KGNvbnN0IEtVUgogICAgIGlmIChtX2NhY2hlUG9saWN5ID09IENhY2hlUG9saWN5VmVyaWZ5KSB7
CiAgICAgICAgaWYgKCFtX3JlbG9hZGVkVVJMcy5jb250YWlucyhmdWxsVVJMLnN0cmluZygpKSkg
ewogICAgICAgICAgIENhY2hlZFJlc291cmNlKiBleGlzdGluZyA9IGNhY2hlKCktPnJlc291cmNl
Rm9yVVJMKGZ1bGxVUkwuc3RyaW5nKCkpOwotICAgICAgICAgIGlmIChleGlzdGluZyAmJiBleGlz
dGluZy0+aXNFeHBpcmVkKCkpIHsKKyAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3Rpbmct
PmlzRXhwaXJlZCgpICYmICFleGlzdGluZy0+aXNQcmVsb2FkZWQoKSkgewogICAgICAgICAgICAg
IGNhY2hlKCktPnJlbW92ZShleGlzdGluZyk7CiAgICAgICAgICAgICAgbV9yZWxvYWRlZFVSTHMu
YWRkKGZ1bGxVUkwuc3RyaW5nKCkpOwogICAgICAgICAgIH0KICAgICAgICB9CiAgICAgfSBlbHNl
IGlmICgobV9jYWNoZVBvbGljeSA9PSBDYWNoZVBvbGljeVJlbG9hZCkgfHwgKG1fY2FjaGVQb2xp
Y3kgPT0gQ2FjaGVQb2xpY3lSZWZyZXNoKSkgewogICAgICAgIGlmICghbV9yZWxvYWRlZFVSTHMu
Y29udGFpbnMoZnVsbFVSTC5zdHJpbmcoKSkpIHsKLSAgICAgICAgICBDYWNoZWRSZXNvdXJjZSog
ZXhpc3RpbmcgPSBjYWNoZSgpLT5yZXNvdXJjZUZvclVSTChmdWxsVVJMLnN0cmluZygpKTsKLSAg
ICAgICAgICBpZiAoZXhpc3RpbmcpCi0gICAgICAgICAgICAgY2FjaGUoKS0+cmVtb3ZlKGV4aXN0
aW5nKTsKLSAgICAgICAgICBtX3JlbG9hZGVkVVJMcy5hZGQoZnVsbFVSTC5zdHJpbmcoKSk7Cisg
ICAgICAgICAgIENhY2hlZFJlc291cmNlKiBleGlzdGluZyA9IGNhY2hlKCktPnJlc291cmNlRm9y
VVJMKGZ1bGxVUkwuc3RyaW5nKCkpOworICAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgIWV4aXN0
aW5nLT5pc1ByZWxvYWRlZCgpKSB7CisgICAgICAgICAgICAgICBjYWNoZSgpLT5yZW1vdmUoZXhp
c3RpbmcpOworICAgICAgICAgICAgICAgbV9yZWxvYWRlZFVSTHMuYWRkKGZ1bGxVUkwuc3RyaW5n
KCkpOworICAgICAgICAgICB9CiAgICAgICAgfQogICAgIH0KIH0KIAogQ2FjaGVkSW1hZ2UqIERv
Y0xvYWRlcjo6cmVxdWVzdEltYWdlKGNvbnN0IFN0cmluZyYgdXJsKQogeworICAgIC8vaWYgKHVy
bC5jb250YWlucygiY29udGV4dHdlYiIpKSB7CisgICAgLy8gICAgcHJpbnRmKCJJTUFHRSAlc1xu
IiwgdXJsLmxhdGluMSgpLmRhdGEoKSk7CisgICAgLy99CiAgICAgQ2FjaGVkSW1hZ2UqIHJlc291
cmNlID0gc3RhdGljX2Nhc3Q8Q2FjaGVkSW1hZ2UqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVz
b3VyY2U6OkltYWdlUmVzb3VyY2UsIHVybCkpOwogICAgIGlmIChhdXRvTG9hZEltYWdlcygpICYm
IHJlc291cmNlICYmIHJlc291cmNlLT5zdGlsbE5lZWRzTG9hZCgpKSB7CiAgICAgICAgIHJlc291
cmNlLT5zZXRMb2FkaW5nKHRydWUpOwpAQCAtMjQzLDUgKzI0OSw3NyBAQCBpbnQgRG9jTG9hZGVy
OjpyZXF1ZXN0Q291bnQoKQogICAgICAgICAgcmV0dXJuIG1fcmVxdWVzdENvdW50ICsgMTsKICAg
ICByZXR1cm4gbV9yZXF1ZXN0Q291bnQ7CiB9CisgICAgCit2b2lkIERvY0xvYWRlcjo6cmVnaXN0
ZXJQcmVsb2FkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKK3sKKyAgICBpZiAoIXJlc291cmNl
IHx8IHJlc291cmNlLT5pc0xvYWRlZCgpIHx8IG1fcHJlbG9hZHMuY29udGFpbnMocmVzb3VyY2Up
KQorICAgICAgICByZXR1cm47CisgICAgcmVzb3VyY2UtPmluY3JlYXNlUHJlbG9hZENvdW50KCk7
CisgICAgbV9wcmVsb2Fkcy5hZGQocmVzb3VyY2UpOworICAgIHByaW50ZigiUFJFTE9BRElORyAl
c1xuIiwgIHJlc291cmNlLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOworfQorCit2b2lkIERvY0xv
YWRlcjo6Y2xlYXJQcmVsb2FkcygpCit7CisgICAgcHJpbnRQcmVsb2FkU3RhdHMoKTsKKworICAg
IExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj46Oml0ZXJhdG9yIGVuZCA9IG1fcHJlbG9hZHMu
ZW5kKCk7CisgICAgZm9yIChMaXN0SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+OjppdGVyYXRvciBp
dCA9IG1fcHJlbG9hZHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIENhY2hl
ZFJlc291cmNlKiByZXMgPSAqaXQ7CisgICAgICAgIGlmIChyZXMtPnByZWxvYWRSZXN1bHQoKSA9
PSBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZE5vdFJlZmVyZW5jZWQpCisgICAgICAgICAgICBjYWNo
ZSgpLT5yZW1vdmUocmVzKTsKKyAgICAgICAgcmVzLT5kZWNyZWFzZVByZWxvYWRDb3VudCgpOwor
ICAgIH0KKyAgICBtX3ByZWxvYWRzLmNsZWFyKCk7Cit9CisKK3ZvaWQgRG9jTG9hZGVyOjpwcmlu
dFByZWxvYWRTdGF0cygpCit7CisgICAgdW5zaWduZWQgc2NyaXB0cyA9IDA7CisgICAgdW5zaWdu
ZWQgc2NyaXB0TWlzc2VzID0gMDsKKyAgICB1bnNpZ25lZCBzdHlsZXNoZWV0cyA9IDA7CisgICAg
dW5zaWduZWQgc3R5bGVzaGVldE1pc3NlcyA9IDA7CisgICAgdW5zaWduZWQgaW1hZ2VzID0gMDsK
KyAgICB1bnNpZ25lZCBpbWFnZU1pc3NlcyA9IDA7CisgICAgTGlzdEhhc2hTZXQ8Q2FjaGVkUmVz
b3VyY2UqPjo6aXRlcmF0b3IgZW5kID0gbV9wcmVsb2Fkcy5lbmQoKTsKKyAgICBmb3IgKExpc3RI
YXNoU2V0PENhY2hlZFJlc291cmNlKj46Oml0ZXJhdG9yIGl0ID0gbV9wcmVsb2Fkcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlcyA9ICppdDsK
KyAgICAgICAgaWYgKHJlcy0+cHJlbG9hZFJlc3VsdCgpID09IENhY2hlZFJlc291cmNlOjpQcmVs
b2FkTm90UmVmZXJlbmNlZCkgeworICAgICAgICAgICAgcHJpbnRmKCJVTlJFRkVSRU5DRUQgUFJF
TE9BRCAlc1xuIiwgcmVzLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOworICAgICAgICAgICAgY2Fj
aGUoKS0+cmVtb3ZlKHJlcyk7CisgICAgICAgIH0gZWxzZSBpZiAocmVzLT5wcmVsb2FkUmVzdWx0
KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlByZWxvYWRSZWZlcmVuY2VkV2hpbGVDb21wbGV0ZSkgewor
ICAgICAgICAgICAgcHJpbnRmKCJISVQgQ09NUExFVEUgUFJFTE9BRCAlc1xuIiwgcmVzLT51cmwo
KS5sYXRpbjEoKS5kYXRhKCkpOworICAgICAgICB9IGVsc2UgaWYgKHJlcy0+cHJlbG9hZFJlc3Vs
dCgpID09IENhY2hlZFJlc291cmNlOjpQcmVsb2FkUmVmZXJlbmNlZFdoaWxlTG9hZGluZykgewor
ICAgICAgICAgICAgcHJpbnRmKCJISVQgTE9BRElORyBQUkVMT0FEICVzXG4iLCByZXMtPnVybCgp
LmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChyZXMt
PnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0KSB7CisgICAgICAgICAgICBzY3JpcHRz
Kys7CisgICAgICAgICAgICBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPCBDYWNoZWRSZXNvdXJj
ZTo6UHJlbG9hZFJlZmVyZW5jZWRXaGlsZUxvYWRpbmcpCisgICAgICAgICAgICAgICAgc2NyaXB0
TWlzc2VzKys7CisgICAgICAgIH0gZWxzZSBpZiAocmVzLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3Vy
Y2U6OkNTU1N0eWxlU2hlZXQpIHsKKyAgICAgICAgICAgIHN0eWxlc2hlZXRzKys7CisgICAgICAg
ICAgICBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPCBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZFJl
ZmVyZW5jZWRXaGlsZUxvYWRpbmcpCisgICAgICAgICAgICAgICAgc3R5bGVzaGVldE1pc3Nlcysr
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW1hZ2VzKys7CisgICAgICAgICAgICBp
ZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPCBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZFJlZmVyZW5j
ZWRXaGlsZUxvYWRpbmcpCisgICAgICAgICAgICAgICAgaW1hZ2VNaXNzZXMrKzsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKHJlcy0+ZXJyb3JPY2N1cnJlZCgpKQorICAgICAgICAg
ICAgY2FjaGUoKS0+cmVtb3ZlKHJlcyk7CisgICAgICAgIAorICAgICAgICByZXMtPmRlY3JlYXNl
UHJlbG9hZENvdW50KCk7CisgICAgfQorICAgIG1fcHJlbG9hZHMuY2xlYXIoKTsKKyAgICAKKyAg
ICBpZiAoc2NyaXB0cykKKyAgICAgICAgcHJpbnRmKCJTQ1JJUFRTOiAlZCAoJWQgaGl0cywgaGl0
IHJhdGUgJWQlJSlcbiIsIHNjcmlwdHMsIHNjcmlwdHMgLSBzY3JpcHRNaXNzZXMsIChzY3JpcHRz
IC0gc2NyaXB0TWlzc2VzKSAqIDEwMCAvIHNjcmlwdHMpOworICAgIGlmIChzdHlsZXNoZWV0cykK
KyAgICAgICAgcHJpbnRmKCJTVFlMRVNIRUVUUzogJWQgKCVkIGhpdHMsIGhpdCByYXRlICVkJSUp
XG4iLCBzdHlsZXNoZWV0cywgc3R5bGVzaGVldHMgLSBzdHlsZXNoZWV0TWlzc2VzLCAoc3R5bGVz
aGVldHMgLSBzdHlsZXNoZWV0TWlzc2VzKSAqIDEwMCAvIHN0eWxlc2hlZXRzKTsKKyAgICBpZiAo
aW1hZ2VzKQorICAgICAgICBwcmludGYoIklNQUdFUzogICVkICglZCBoaXRzLCBoaXQgcmF0ZSAl
ZCUlKVxuIiwgaW1hZ2VzLCBpbWFnZXMgLSBpbWFnZU1pc3NlcywgKGltYWdlcyAtIGltYWdlTWlz
c2VzKSAqIDEwMCAvIGltYWdlcyk7Cit9CiAKIH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY0xv
YWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY0xvYWRlci5oCShyZXZpc2lv
biAzMDgxNCkKKysrIFdlYkNvcmUvbG9hZGVyL0RvY0xvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdEhh
c2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05Miw2ICs5MywxMSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBpbmNyZW1lbnRSZXF1ZXN0Q291bnQoKTsKICAgICB2b2lkIGRlY3JlbWVu
dFJlcXVlc3RDb3VudCgpOwogICAgIGludCByZXF1ZXN0Q291bnQoKTsKKyAgICAKKyAgICB2b2lk
IGNsZWFyUHJlbG9hZHMoKTsKKyAgICB2b2lkIHJlZ2lzdGVyUHJlbG9hZChDYWNoZWRSZXNvdXJj
ZSogcmVzb3VyY2UpOworICAgIHZvaWQgcHJpbnRQcmVsb2FkU3RhdHMoKTsKKyAgICAKIHByaXZh
dGU6CiAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlcXVlc3RSZXNvdXJjZShDYWNoZWRSZXNvdXJjZTo6
VHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyogY2hhcnNldCA9IDAsIGJvb2wg
c2tpcENhbkxvYWRDaGVjayA9IGZhbHNlLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3Mg
PSB0cnVlKTsKIApAQCAtMTA3LDYgKzExMyw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgaW50IG1f
cmVxdWVzdENvdW50OwogICAgIAorICAgIExpc3RIYXNoU2V0PENhY2hlZFJlc291cmNlKj4gbV9w
cmVsb2FkczsKKyAgICAKICAgICAvLzI5IGJpdHMgbGVmdAogICAgIGJvb2wgbV9hdXRvTG9hZElt
YWdlcyA6IDE7CiAgICAgYm9vbCBtX2xvYWRJblByb2dyZXNzIDogMTsKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9E
b2N1bWVudExvYWRlci5jcHAJKHJldmlzaW9uIDMwODE0KQorKysgV2ViQ29yZS9sb2FkZXIvRG9j
dW1lbnRMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNs
dWRlICJDYWNoZWRQYWdlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2NM
b2FkZXIuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKQEAgLTQ2NiwxMCArNDY3LDEzIEBAIGJvb2wgRG9jdW1lbnRMb2Fk
ZXI6OmlzTG9hZGluZ0luQVBJU2Vuc2UKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICBpZiAoIW1fc3VicmVzb3VyY2VMb2FkZXJzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBpZiAoRG9jdW1lbnQqIGRvYyA9IG1fZnJhbWUtPmRvY3VtZW50KCkp
CisgICAgICAgIGlmIChEb2N1bWVudCogZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkgeworICAg
ICAgICAgICAgaWYgKGRvYy0+ZG9jTG9hZGVyKCktPnJlcXVlc3RDb3VudCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgaWYgKFRva2VuaXplciogdG9rID0gZG9j
LT50b2tlbml6ZXIoKSkKICAgICAgICAgICAgICAgICBpZiAodG9rLT5wcm9jZXNzaW5nRGF0YSgp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KICAg
ICByZXR1cm4gZnJhbWVMb2FkZXIoKS0+c3ViZnJhbWVJc0xvYWRpbmcoKTsKIH0KSW5kZXg6IFdl
YkNvcmUvbG9hZGVyL2xvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvbG9h
ZGVyLmNwcAkocmV2aXNpb24gMzA4MTQpCisrKyBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw2MyArMzksMjEzIEBACiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKyNkZWZpbmUgRkFTVCAxCiAKKyNpZiBGQVNUCisv
LyBNYXRjaCB0aGUgcGFyYWxsZWwgY29ubmVjdGlvbiBjb3VudCB1c2VkIGJ5IHRoZSBuZXR3b3Jr
aW5nIGxheWVyCisvLyBGSVhNRSBzaG91bGQgbm90IGhhcmRjb2RlIHRoaXMKK2NvbnN0IHVuc2ln
bmVkIG1heFJlcXVlc3RzSW5GbGlnaHRQZXJIb3N0ID0gNDsKKy8vIEhhdmluZyBhIGxpbWl0IG1p
Z2h0IHN0aWxsIGhlbHAgZ2V0dGluZyBtb3JlIGltcG9ydGFudCByZXNvdXJjZXMgZmlyc3QKK2Nv
bnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHRGb3JMb2NhbFByb3RvY29sPSA1MDsKKyNl
bHNlCitjb25zdCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdCA9IDEwMDA7Citj
b25zdCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0Rm9yTG9jYWxQcm90b2NvbD0gMTAwMDsK
KyNlbmRpZgorICAgIAorICAgIAogTG9hZGVyOjpMb2FkZXIoKQorICAgIDogbV9yZXF1ZXN0VGlt
ZXIodGhpcywgJkxvYWRlcjo6cmVxdWVzdFRpbWVyRmlyZWQpCiB7Ci0gICAgbV9yZXF1ZXN0c1Bl
bmRpbmcuc2V0QXV0b0RlbGV0ZSh0cnVlKTsKIH0KIAogTG9hZGVyOjp+TG9hZGVyKCkKIHsKLSAg
ICBkZWxldGVBbGxWYWx1ZXMobV9yZXF1ZXN0c0xvYWRpbmcpOworICAgIGRlbGV0ZUFsbFZhbHVl
cyhtX2hvc3RzKTsKK30KKyAgICAKK0xvYWRlcjo6UHJpb3JpdHkgTG9hZGVyOjpkZXRlcm1pbmVQ
cmlvcml0eShjb25zdCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpIGNvbnN0Cit7CisjaWYgRkFT
VAorICAgIHN3aXRjaCAocmVzb3VyY2UtPnR5cGUoKSkgeworICAgICAgICBjYXNlIENhY2hlZFJl
c291cmNlOjpTY3JpcHQ6IAorI2lmIEVOQUJMRShYQkwpCisgICAgICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6OlhCTDoKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIEhpZ2g7CisgICAgICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6CisgICAgICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6OkZvbnRSZXNvdXJjZToKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICAgICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE1l
ZGl1bTsKKyAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKKyAgICAg
ICAgICAgIHJldHVybiBMb3c7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlQo
MCk7CisgICAgICAgICAgICByZXR1cm4gTG93OworICAgIH0KKyNlbHNlCisgICAgcmV0dXJuIEhp
Z2g7CisjZW5kaWYKIH0KIAotdm9pZCBMb2FkZXI6OmxvYWQoRG9jTG9hZGVyKiBkbCwgQ2FjaGVk
UmVzb3VyY2UqIG9iamVjdCwgYm9vbCBpbmNyZW1lbnRhbCwgYm9vbCBza2lwQ2FuTG9hZENoZWNr
LCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCit2b2lkIExvYWRlcjo6bG9hZChEb2NM
b2FkZXIqIGRsLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGJvb2wgaW5jcmVtZW50YWwsIGJv
b2wgc2tpcENhbkxvYWRDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKQogewog
ICAgIEFTU0VSVChkbCk7Ci0gICAgUmVxdWVzdCogcmVxID0gbmV3IFJlcXVlc3QoZGwsIG9iamVj
dCwgaW5jcmVtZW50YWwsIHNraXBDYW5Mb2FkQ2hlY2ssIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFj
a3MpOwotICAgIG1fcmVxdWVzdHNQZW5kaW5nLmFwcGVuZChyZXEpOworICAgIFJlcXVlc3QqIHJl
cXVlc3QgPSBuZXcgUmVxdWVzdChkbCwgcmVzb3VyY2UsIGluY3JlbWVudGFsLCBza2lwQ2FuTG9h
ZENoZWNrLCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKyAgICAKKyAgICBLVVJMIHVybChy
ZXNvdXJjZS0+dXJsKCkpOworICAgIFN0cmluZyBob3N0S2V5OworICAgIHVuc2lnbmVkIHJlcXVl
c3RMaW1pdDsKKyAgICBib29sIGlzSFRUUCA9IHVybC5wcm90b2NvbCgpID09ICJodHRwIiB8fCB1
cmwucHJvdG9jb2woKSA9PSAiaHR0cHMiOworICAgIGlmIChpc0hUVFApIHsKKyAgICAgICAgaG9z
dEtleSA9IHVybC5ob3N0KCk7CisgICAgICAgIHJlcXVlc3RMaW1pdCA9IG1heFJlcXVlc3RzSW5G
bGlnaHRQZXJIb3N0OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIHVzZSBwcm90b2NvbCBhcyB0
aGUga2V5LCBhZGQgIjoiIHNpbmNlIGl0IGNhbid0IG9jY3VyIGluIHJlYWwgaG9zdCBuYW1lcyAK
KyAgICAgICAgaG9zdEtleSA9IFN0cmluZyh1cmwucHJvdG9jb2woKSkgKyAiOiI7ICAgIAorICAg
ICAgICByZXF1ZXN0TGltaXQgPSBtYXhSZXF1ZXN0c0luRmxpZ2h0Rm9yTG9jYWxQcm90b2NvbDsK
KyAgICB9CisKKyAgICBIb3N0KiBob3N0ID0gbV9ob3N0cy5nZXQoaG9zdEtleSk7CisgICAgaWYg
KCFob3N0KSB7CisgICAgICAgIGhvc3QgPSBuZXcgSG9zdChyZXF1ZXN0TGltaXQpOworICAgICAg
ICBtX2hvc3RzLmFkZChob3N0S2V5LCBob3N0KTsKKyAgICB9CisgICAgCisgICAgUHJpb3JpdHkg
cHJpb3JpdHkgPSBkZXRlcm1pbmVQcmlvcml0eShyZXNvdXJjZSk7CisKKyAgICBob3N0LT5hZGRS
ZXF1ZXN0KHJlcXVlc3QsIHByaW9yaXR5KTsKICAgICBkbC0+aW5jcmVtZW50UmVxdWVzdENvdW50
KCk7CisgICAgCisgICAgaWYgKHByaW9yaXR5ID4gTG93IHx8ICFpc0hUVFApCisgICAgICAgIC8v
IFRyeSB0byByZXF1ZXN0IGltcG9ydGFudCByZXNvdXJjZXMgaW1tZWRpYXRlbHkKKyAgICAgICAg
aG9zdC0+c2VydmVQZW5kaW5nUmVxdWVzdHMocHJpb3JpdHkpOworICAgIGVsc2UKKyAgICAgICAg
Ly8gSGFuZGxlIGFzeW5jaHJvbm91c2x5IHNvIGVhcmx5IGxvdyBwcmlvcml0eSByZXF1ZXN0cyBk
b24ndCBnZXQgc2NoZWR1bGVkIGJlZm9yZSBsYXRlciBoaWdoIHByaW9yaXR5IG9uZXMKKyAgICAg
ICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOworfQorICAgIAordm9pZCBMb2FkZXI6
OnNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKQoreworICAgIGlmICghbV9yZXF1ZXN0VGlt
ZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDApOwor
fQorCit2b2lkIExvYWRlcjo6cmVxdWVzdFRpbWVyRmlyZWQoVGltZXI8TG9hZGVyPiopIAorewog
ICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7CiB9CiAKLXZvaWQgTG9hZGVyOjpzZXJ2ZVBlbmRp
bmdSZXF1ZXN0cygpCit2b2lkIExvYWRlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoUHJpb3JpdHkg
bWluaW11bVByaW9yaXR5KQogewotICAgIHdoaWxlICghbV9yZXF1ZXN0c1BlbmRpbmcuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIC8vIGdldCB0aGUgZmlyc3QgcGVuZGluZyByZXF1ZXN0Ci0gICAgICAg
IFJlcXVlc3QqIHJlcSA9IG1fcmVxdWVzdHNQZW5kaW5nLnRha2UoMCk7Ci0gICAgICAgIERvY0xv
YWRlciogZGwgPSByZXEtPmRvY0xvYWRlcigpOwotICAgICAgICBkbC0+ZGVjcmVtZW50UmVxdWVz
dENvdW50KCk7CisgICAgbV9yZXF1ZXN0VGltZXIuc3RvcCgpOwogCi0gICAgICAgIFJlc291cmNl
UmVxdWVzdCByZXF1ZXN0KHJlcS0+Y2FjaGVkUmVzb3VyY2UoKS0+dXJsKCkpOworICAgIEhvc3RN
YXA6Oml0ZXJhdG9yIGVuZCA9IG1faG9zdHMuZW5kKCk7CisgICAgVmVjdG9yPFN0cmluZz4gdG9S
ZW1vdmU7CisgICAgZm9yIChIb3N0TWFwOjppdGVyYXRvciBpdCA9IG1faG9zdHMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEhvc3QqIHJlcXVlc3RIb3N0ID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgaWYgKHJlcXVlc3RIb3N0LT5oYXNSZXF1ZXN0cygpKQorICAgICAgICAgICAg
cmVxdWVzdEhvc3QtPnNlcnZlUGVuZGluZ1JlcXVlc3RzKG1pbmltdW1Qcmlvcml0eSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAg
ICAgICAgCisgICAgfQorICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCB0b1JlbW92ZS5zaXpl
KCk7ICsrbikgeworICAgICAgICBIb3N0TWFwOjppdGVyYXRvciBpdCA9IG1faG9zdHMuZmluZCh0
b1JlbW92ZVtuXSk7CisgICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kOworICAgICAgICBtX2hvc3Rz
LnJlbW92ZShpdCk7CisgICAgfQorfQorICAgIAordm9pZCBMb2FkZXI6OmNhbmNlbFJlcXVlc3Rz
KERvY0xvYWRlciogZGwpCit7CisgICAgSG9zdE1hcDo6aXRlcmF0b3IgZW5kID0gbV9ob3N0cy5l
bmQoKTsKKyAgICBmb3IgKEhvc3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9ob3N0cy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgSG9zdCogcmVxdWVzdEhvc3QgPSBpdC0+c2Vjb25k
OworICAgICAgICByZXF1ZXN0SG9zdC0+Y2FuY2VsUmVxdWVzdHMoZGwpOworICAgIH0KKyAgICBz
Y2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7CisgICAgCisgICAgaWYgKGRsLT5sb2FkSW5Q
cm9ncmVzcygpKQorICAgICAgICBBU1NFUlQoZGwtPnJlcXVlc3RDb3VudCgpID09IDEpOworICAg
IGVsc2UKKyAgICAgICAgQVNTRVJUKGRsLT5yZXF1ZXN0Q291bnQoKSA9PSAwKTsKK30KKyAgICAK
K0xvYWRlcjo6SG9zdDo6SG9zdCh1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0KQorICAgIDog
bV9tYXhSZXF1ZXN0c0luRmxpZ2h0KG1heFJlcXVlc3RzSW5GbGlnaHQpCit7CisgICAgZm9yICh1
bnNpZ25lZCBwID0gMDsgcCA8PSBIaWdoOyBwKyspCisgICAgICAgIG1fcmVxdWVzdHNQZW5kaW5n
W3BdLnNldEF1dG9EZWxldGUodHJ1ZSk7Cit9CiAKLSAgICAgICAgaWYgKCFyZXEtPmNhY2hlZFJl
c291cmNlKCktPmFjY2VwdCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRU
UEFjY2VwdChyZXEtPmNhY2hlZFJlc291cmNlKCktPmFjY2VwdCgpKTsKK0xvYWRlcjo6SG9zdDo6
fkhvc3QoKQoreworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3JlcXVlc3RzTG9hZGluZyk7Cit9Cisg
ICAgCit2b2lkIExvYWRlcjo6SG9zdDo6YWRkUmVxdWVzdChjb25zdCBSZXF1ZXN0KiByZXF1ZXN0
LCBQcmlvcml0eSBwcmlvcml0eSkKK3sKKyAgICBtX3JlcXVlc3RzUGVuZGluZ1twcmlvcml0eV0u
YXBwZW5kKHJlcXVlc3QpOworfQorICAgIAorYm9vbCBMb2FkZXI6Okhvc3Q6Omhhc1JlcXVlc3Rz
KCkgY29uc3QKK3sKKyAgICBpZiAobV9yZXF1ZXN0c0xvYWRpbmcuc2l6ZSgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBmb3IgKHVuc2lnbmVkIHAgPSAwOyBwIDw9IEhpZ2g7IHArKykgewor
ICAgICAgICBpZiAoIW1fcmVxdWVzdHNQZW5kaW5nW3BdLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKK3ZvaWQgTG9hZGVy
OjpIb3N0OjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhMb2FkZXI6OlByaW9yaXR5IG1pbmltdW1Qcmlv
cml0eSkKK3sKKyAgICBmb3IgKGludCBwcmlvcml0eSA9IEhpZ2g7IHByaW9yaXR5ID49IG1pbmlt
dW1Qcmlvcml0eTsgLS1wcmlvcml0eSkKKyAgICAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMobV9y
ZXF1ZXN0c1BlbmRpbmdbcHJpb3JpdHldKTsKK30KKyAgICAKK3ZvaWQgTG9hZGVyOjpIb3N0Ojpz
ZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhEZXByZWNhdGVkUHRyTGlzdDxSZXF1ZXN0PiYgcmVxdWVzdHNQ
ZW5kaW5nKQoreworICAgIHdoaWxlIChtX3JlcXVlc3RzTG9hZGluZy5zaXplKCkgPCBtX21heFJl
cXVlc3RzSW5GbGlnaHQgJiYgIXJlcXVlc3RzUGVuZGluZy5pc0VtcHR5KCkpIHsgICAgICAgIAor
ICAgICAgICBSZXF1ZXN0KiByZXEgPSByZXF1ZXN0c1BlbmRpbmcudGFrZSgwKTsKKyAgICAgICAg
RG9jTG9hZGVyKiBkbCA9IHJlcS0+ZG9jTG9hZGVyKCk7CisgICAgICAgIGRsLT5kZWNyZW1lbnRS
ZXF1ZXN0Q291bnQoKTsKKyAgICAgICAgCisgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXNvdXJj
ZVJlcXVlc3QocmVxLT5jYWNoZWRSZXNvdXJjZSgpLT51cmwoKSk7CisgICAgICAgIAorICAgICAg
ICBpZiAoIXJlcS0+Y2FjaGVkUmVzb3VyY2UoKS0+YWNjZXB0KCkuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgcmVzb3VyY2VSZXF1ZXN0LnNldEhUVFBBY2NlcHQocmVxLT5jYWNoZWRSZXNvdXJjZSgp
LT5hY2NlcHQoKSk7CisgICAgICAgIAogICAgICAgICBLVVJMIHIgPSBkbC0+ZG9jKCktPnVybCgp
OwogICAgICAgICBpZiAoKHIucHJvdG9jb2xJcygiaHR0cCIpIHx8IHIucHJvdG9jb2xJcygiaHR0
cHMiKSkgJiYgci5wYXRoKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgci5zZXRQYXRoKCIvIik7
Ci0gICAgICAgIHJlcXVlc3Quc2V0SFRUUFJlZmVycmVyKHIuc3RyaW5nKCkpOworICAgICAgICBy
ZXNvdXJjZVJlcXVlc3Quc2V0SFRUUFJlZmVycmVyKHIuc3RyaW5nKCkpOwogCiAgICAgICAgIFJl
ZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0
ZShkbC0+ZG9jKCktPmZyYW1lKCksCi0gICAgICAgICAgICB0aGlzLCByZXF1ZXN0LCByZXEtPnNo
b3VsZFNraXBDYW5Mb2FkQ2hlY2soKSwgcmVxLT5zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkp
OwotCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLCByZXNvdXJjZVJlcXVlc3QsIHJlcS0+c2hvdWxkU2tpcENh
bkxvYWRDaGVjaygpLCByZXEtPnNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSk7CisgICAgICAg
IAogICAgICAgICBpZiAobG9hZGVyKSB7CiAgICAgICAgICAgICBtX3JlcXVlc3RzTG9hZGluZy5h
ZGQobG9hZGVyLnJlbGVhc2UoKSwgcmVxKTsKICAgICAgICAgICAgIGRsLT5pbmNyZW1lbnRSZXF1
ZXN0Q291bnQoKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmVxLT5jYWNoZWRS
ZXNvdXJjZSgpLT5zZXRSZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyKCk7CisvLyAgICAgICAg
ICAgIHByaW50ZigiSE9TVCAlcyBDT1VOVCAlZCBMT0FESU5HICVzXG4iLCByZXNvdXJjZVJlcXVl
c3QudXJsKCkuaG9zdCgpLmxhdGluMSgpLCBtX3JlcXVlc3RzTG9hZGluZy5zaXplKCksIHJlcS0+
Y2FjaGVkUmVzb3VyY2UoKS0+dXJsKCkuZGVwcmVjYXRlZFN0cmluZygpLmxhdGluMSgpKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRsLT5zZXRMb2FkSW5Qcm9ncmVzcyh0cnVlKTsK
KyAgICAgICAgICAgIHJlcS0+Y2FjaGVkUmVzb3VyY2UoKS0+ZXJyb3IoKTsKKyAgICAgICAgICAg
IGRsLT5zZXRMb2FkSW5Qcm9ncmVzcyhmYWxzZSk7CisgICAgICAgICAgICBkZWxldGUgcmVxOwog
ICAgICAgICB9Ci0KLSAgICAgICAgZGwtPnNldExvYWRJblByb2dyZXNzKHRydWUpOwotICAgICAg
ICByZXEtPmNhY2hlZFJlc291cmNlKCktPmVycm9yKCk7Ci0gICAgICAgIGRsLT5zZXRMb2FkSW5Q
cm9ncmVzcyhmYWxzZSk7Ci0KLSAgICAgICAgZGVsZXRlIHJlcTsKICAgICB9CiB9CiAKLXZvaWQg
TG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIpCit2b2lk
IExvYWRlcjo6SG9zdDo6ZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVy
KQogewogICAgIFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGkgPSBtX3JlcXVlc3RzTG9hZGluZy5maW5k
KGxvYWRlcik7CiAgICAgaWYgKGkgPT0gbV9yZXF1ZXN0c0xvYWRpbmcuZW5kKCkpCkBAIC0xMjAs
MTYgKzI3MCwxOSBAQCB2b2lkIExvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJjCiAg
ICAgZG9jTG9hZGVyLT5zZXRMb2FkSW5Qcm9ncmVzcyhmYWxzZSk7CiAKICAgICBkZWxldGUgcmVx
OworICAgIAorLy8gICAgS1VSTCB1KG9iamVjdC0+dXJsKCkuZGVwcmVjYXRlZFN0cmluZygpKTsK
Ky8vICAgIHByaW50ZigiSE9TVCAlcyBDT1VOVCAlZCBSRUNFSVZFRCAlc1xuIiwgdS5ob3N0KCku
bGF0aW4xKCksIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSwgb2JqZWN0LT51cmwoKS5kZXByZWNh
dGVkU3RyaW5nKCkubGF0aW4xKCkpOwogCiAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMoKTsKIH0K
IAotdm9pZCBMb2FkZXI6OmRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3Qg
UmVzb3VyY2VFcnJvciYpCit2b2lkIExvYWRlcjo6SG9zdDo6ZGlkRmFpbChTdWJyZXNvdXJjZUxv
YWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJikKIHsKICAgICBkaWRGYWlsKGxvYWRl
cik7CiB9CiAKLXZvaWQgTG9hZGVyOjpkaWRGYWlsKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIs
IGJvb2wgY2FuY2VsbGVkKQordm9pZCBMb2FkZXI6Okhvc3Q6OmRpZEZhaWwoU3VicmVzb3VyY2VM
b2FkZXIqIGxvYWRlciwgYm9vbCBjYW5jZWxsZWQpCiB7CiAgICAgUmVxdWVzdE1hcDo6aXRlcmF0
b3IgaSA9IG1fcmVxdWVzdHNMb2FkaW5nLmZpbmQobG9hZGVyKTsKICAgICBpZiAoaSA9PSBtX3Jl
cXVlc3RzTG9hZGluZy5lbmQoKSkKQEAgLTE0OSwxNCArMzAyLDE1IEBAIHZvaWQgTG9hZGVyOjpk
aWRGYWlsKFN1YnJlc291cmNlTG9hZGVyKiAKICAgICB9CiAgICAgCiAgICAgZG9jTG9hZGVyLT5z
ZXRMb2FkSW5Qcm9ncmVzcyhmYWxzZSk7Ci0gICAgY2FjaGUoKS0+cmVtb3ZlKG9iamVjdCk7Cisg
ICAgaWYgKGNhbmNlbGxlZCB8fCAhb2JqZWN0LT5pc1ByZWxvYWRlZCgpKQorICAgICAgICBjYWNo
ZSgpLT5yZW1vdmUob2JqZWN0KTsKIAogICAgIGRlbGV0ZSByZXE7CiAKICAgICBzZXJ2ZVBlbmRp
bmdSZXF1ZXN0cygpOwogfQogCi12b2lkIExvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJl
c291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQor
dm9pZCBMb2FkZXI6Okhvc3Q6OmRpZFJlY2VpdmVSZXNwb25zZShTdWJyZXNvdXJjZUxvYWRlciog
bG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBSZXF1ZXN0
KiByZXEgPSBtX3JlcXVlc3RzTG9hZGluZy5nZXQobG9hZGVyKTsKICAgICAKQEAgLTE5Miw3ICsz
NDYsNyBAQCB2b2lkIExvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291CiAgICAgfQog
fQogCi12b2lkIExvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRl
ciwgY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUpCit2b2lkIExvYWRlcjo6SG9zdDo6ZGlkUmVj
ZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50
IHNpemUpCiB7CiAgICAgUmVxdWVzdCogcmVxdWVzdCA9IG1fcmVxdWVzdHNMb2FkaW5nLmdldChs
b2FkZXIpOwogICAgIGlmICghcmVxdWVzdCkKQEAgLTIxNywyNSArMzcxLDMxIEBAIHZvaWQgTG9h
ZGVyOjpkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUwKICAgICB9IGVsc2UgaWYgKHJlcXVlc3Qt
PmlzSW5jcmVtZW50YWwoKSkKICAgICAgICAgb2JqZWN0LT5kYXRhKGxvYWRlci0+cmVzb3VyY2VE
YXRhKCksIGZhbHNlKTsKIH0KLQotdm9pZCBMb2FkZXI6OmNhbmNlbFJlcXVlc3RzKERvY0xvYWRl
ciogZGwpCisgICAgCit2b2lkIGNhbmNlbFBlbmRpbmdSZXF1ZXN0cyhEZXByZWNhdGVkUHRyTGlz
dDxSZXF1ZXN0PiYgcmVxdWVzdHNQZW5kaW5nLCBEb2NMb2FkZXIqIGRvY0xvYWRlcikKIHsKLSAg
ICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPFJlcXVlc3Q+IHBJdChtX3JlcXVlc3RzUGVuZGlu
Zyk7CisgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxSZXF1ZXN0PiBwSXQocmVxdWVzdHNQ
ZW5kaW5nKTsKICAgICB3aGlsZSAocEl0LmN1cnJlbnQoKSkgewotICAgICAgICBpZiAocEl0LmN1
cnJlbnQoKS0+ZG9jTG9hZGVyKCkgPT0gZGwpIHsKKyAgICAgICAgaWYgKHBJdC5jdXJyZW50KCkt
PmRvY0xvYWRlcigpID09IGRvY0xvYWRlcikgewogICAgICAgICAgICAgY2FjaGUoKS0+cmVtb3Zl
KHBJdC5jdXJyZW50KCktPmNhY2hlZFJlc291cmNlKCkpOwotICAgICAgICAgICAgbV9yZXF1ZXN0
c1BlbmRpbmcucmVtb3ZlKHBJdCk7Ci0gICAgICAgICAgICBkbC0+ZGVjcmVtZW50UmVxdWVzdENv
dW50KCk7CisgICAgICAgICAgICByZXF1ZXN0c1BlbmRpbmcucmVtb3ZlKHBJdCk7CisgICAgICAg
ICAgICBkb2NMb2FkZXItPmRlY3JlbWVudFJlcXVlc3RDb3VudCgpOwogICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICsrcEl0OwogICAgIH0KK30KKwordm9pZCBMb2FkZXI6Okhvc3Q6OmNhbmNl
bFJlcXVlc3RzKERvY0xvYWRlciogZG9jTG9hZGVyKQoreworICAgIGZvciAodW5zaWduZWQgcCA9
IDA7IHAgPD0gSGlnaDsgcCsrKQorICAgICAgICBjYW5jZWxQZW5kaW5nUmVxdWVzdHMobV9yZXF1
ZXN0c1BlbmRpbmdbcF0sIGRvY0xvYWRlcik7CiAKICAgICBWZWN0b3I8U3VicmVzb3VyY2VMb2Fk
ZXIqLCAyNTY+IGxvYWRlcnNUb0NhbmNlbDsKIAogICAgIFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fcmVxdWVzdHNMb2FkaW5nLmVuZCgpOwogICAgIGZvciAoUmVxdWVzdE1hcDo6aXRlcmF0
b3IgaSA9IG1fcmVxdWVzdHNMb2FkaW5nLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsKICAgICAg
ICAgUmVxdWVzdCogciA9IGktPnNlY29uZDsKLSAgICAgICAgaWYgKHItPmRvY0xvYWRlcigpID09
IGRsKQorICAgICAgICBpZiAoci0+ZG9jTG9hZGVyKCkgPT0gZG9jTG9hZGVyKQogICAgICAgICAg
ICAgbG9hZGVyc1RvQ2FuY2VsLmFwcGVuZChpLT5maXJzdC5nZXQoKSk7CiAgICAgfQogCkBAIC0y
NDMsMTEgKzQwMyw2IEBAIHZvaWQgTG9hZGVyOjpjYW5jZWxSZXF1ZXN0cyhEb2NMb2FkZXIqIGQK
ICAgICAgICAgU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciA9IGxvYWRlcnNUb0NhbmNlbFtpXTsK
ICAgICAgICAgZGlkRmFpbChsb2FkZXIsIHRydWUpOwogICAgIH0KLSAgICAKLSAgICBpZiAoZGwt
PmxvYWRJblByb2dyZXNzKCkpCi0gICAgICAgIEFTU0VSVChkbC0+cmVxdWVzdENvdW50KCkgPT0g
MSk7Ci0gICAgZWxzZQotICAgICAgICBBU1NFUlQoZGwtPnJlcXVlc3RDb3VudCgpID09IDApOwog
fQogCiB9IC8vbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2xvYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5oCShyZXZpc2lvbiAzMDgxNCkK
KysrIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw5
IEBACiAKICNpbmNsdWRlICJEZXByZWNhdGVkUHRyTGlzdC5oIgogI2luY2x1ZGUgIlN1YnJlc291
cmNlTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRl
ICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMiw3ICszNSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBjbGFzcyBEb2NMb2FkZXI7CiAgICAgY2xhc3MgUmVxdWVzdDsKIAotICAg
IGNsYXNzIExvYWRlciA6IHByaXZhdGUgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQgeworICAgIGNs
YXNzIExvYWRlciB7CiAgICAgcHVibGljOgogICAgICAgICBMb2FkZXIoKTsKICAgICAgICAgfkxv
YWRlcigpOwpAQCAtNDAsMTkgKzQzLDQ2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCBsb2FkKERvY0xvYWRlciosIENhY2hlZFJlc291cmNlKiwgYm9vbCBpbmNyZW1lbnRhbCA9
IHRydWUsIGJvb2wgc2tpcENhbkxvYWRDaGVjayA9IGZhbHNlLCBib29sIHNlbmRSZXNvdXJjZUxv
YWRDYWxsYmFja3MgPSB0cnVlKTsKIAogICAgICAgICB2b2lkIGNhbmNlbFJlcXVlc3RzKERvY0xv
YWRlciopOworICAgICAgICAKKyAgICAgICAgZW51bSBQcmlvcml0eSB7CisgICAgICAgICAgICBM
b3csIE1lZGl1bSwgSGlnaAorICAgICAgICB9OworICAgICAgICB2b2lkIHNlcnZlUGVuZGluZ1Jl
cXVlc3RzKFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSA9IExvdyk7CiAKICAgICBwcml2YXRlOgot
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVy
KiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKLSAgICAgICAg
dmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqKTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJj
ZUVycm9yJik7Ci0gICAgICAgIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGJvb2wg
Y2FuY2VsbGVkID0gZmFsc2UpOwotCi0gICAgICAgIHZvaWQgc2VydmVQZW5kaW5nUmVxdWVzdHMo
KTsKLQotICAgICAgICBEZXByZWNhdGVkUHRyTGlzdDxSZXF1ZXN0PiBtX3JlcXVlc3RzUGVuZGlu
ZzsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4sIFJl
cXVlc3QqPiBSZXF1ZXN0TWFwOwotICAgICAgICBSZXF1ZXN0TWFwIG1fcmVxdWVzdHNMb2FkaW5n
OworICAgICAgICBQcmlvcml0eSBkZXRlcm1pbmVQcmlvcml0eShjb25zdCBDYWNoZWRSZXNvdXJj
ZSogcmVzb3VyY2UpIGNvbnN0OworICAgICAgICB2b2lkIHNjaGVkdWxlU2VydmVQZW5kaW5nUmVx
dWVzdHMoKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcmVxdWVzdFRpbWVyRmlyZWQoVGltZXI8
TG9hZGVyPiopOworCisgICAgICAgIGNsYXNzIEhvc3QgOiBwcml2YXRlIFN1YnJlc291cmNlTG9h
ZGVyQ2xpZW50IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSG9zdCh1bnNpZ25lZCBt
YXhSZXF1ZXN0c0luRmxpZ2h0KTsKKyAgICAgICAgICAgIH5Ib3N0KCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHZvaWQgYWRkUmVxdWVzdChjb25zdCBSZXF1ZXN0KiwgUHJpb3JpdHkpOwor
ICAgICAgICAgICAgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhQcmlvcml0eSBtaW5pbXVtUHJp
b3JpdHkgPSBMb3cpOworICAgICAgICAgICAgdm9pZCBjYW5jZWxSZXF1ZXN0cyhEb2NMb2FkZXIq
KTsKKyAgICAgICAgICAgIGJvb2wgaGFzUmVxdWVzdHMoKSBjb25zdDsKKyAgICAgICAgCisgICAg
ICAgIHByaXZhdGU6CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNl
KFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3Qg
Y2hhciosIGludCk7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhT
dWJyZXNvdXJjZUxvYWRlciopOworICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3Vi
cmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHZvaWQgc2VydmVQZW5kaW5nUmVxdWVzdHMoRGVwcmVjYXRlZFB0ckxpc3Q8UmVx
dWVzdD4mIHJlcXVlc3RzUGVuZGluZyk7CisgICAgICAgICAgICB2b2lkIGRpZEZhaWwoU3VicmVz
b3VyY2VMb2FkZXIqLCBib29sIGNhbmNlbGxlZCA9IGZhbHNlKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3Q8UmVxdWVzdD4gbV9yZXF1ZXN0c1BlbmRpbmdbSGln
aCArIDFdOworICAgICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdWJyZXNvdXJjZUxv
YWRlcj4sIFJlcXVlc3QqPiBSZXF1ZXN0TWFwOworICAgICAgICAgICAgUmVxdWVzdE1hcCBtX3Jl
cXVlc3RzTG9hZGluZzsKKyAgICAgICAgICAgIGNvbnN0IGludCBtX21heFJlcXVlc3RzSW5GbGln
aHQ7CisgICAgICAgIH07CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEhvc3QqPiBI
b3N0TWFwOworICAgICAgICBIb3N0TWFwIG1faG9zdHM7CisgICAgICAgIAorICAgICAgICBUaW1l
cjxMb2FkZXI+IG1fcmVxdWVzdFRpbWVyOwogICAgIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19691</attachid>
            <date>2008-03-11 17:19:02 -0700</date>
            <delta_ts>2008-03-12 00:25:49 -0700</delta_ts>
            <desc>yet another updated patch</desc>
            <filename>speculative-loading-9.patch</filename>
            <type>text/plain</type>
            <size>71729</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAzMDgxNCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0zODE5LDYgKzM4MTksOCBAQAogCQlFNDQ2MTQzQzBDRDY4OUNDMDBG
QURBNzUgLyogSlNIVE1MU291cmNlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNDIzNzIwQ0JGQjZFMDAwQUYyRUNFIC8qIEpTSFRNTFNv
dXJjZUVsZW1lbnQuaCAqLzsgfTsKIAkJRTQ0NjE0NTEwQ0Q2OEEzNTAwRkFEQTc1IC8qIFJlbmRl
clZpZGVvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0QjQxRTMzMENCRkI2MDkwMEFGMkVDRSAvKiBSZW5kZXJWaWRlby5jcHAgKi87IH07CiAJCUU0
NDYxNDUyMENENjhBMzUwMEZBREE3NSAvKiBSZW5kZXJWaWRlby5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNDFFMzQwQ0JGQjYwOTAwQUYyRUNFIC8q
IFJlbmRlclZpZGVvLmggKi87IH07CisJCUU0OTYyNkMyMEQ4MEQ5NDgwMEUzNDA1QyAvKiBIVE1M
UHJlbG9hZFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNEQ0QUJFMDBENzU0MkYwMDBGOTY4NjkgLyogSFRNTFByZWxvYWRUb2tlbml6
ZXIuY3BwICovOyB9OworCQlFNDk2MjZDMzBEODBEOTQ5MDBFMzQwNUMgLyogSFRNTFByZWxvYWRU
b2tlbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0RDRBQkUxMEQ3NTQyRjEwMEY5Njg2OSAvKiBIVE1MUHJlbG9hZFRva2VuaXplci5oICovOyB9
OwogCQlFNEMyNzk1ODBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDMjc5NTYwQ0Y5NzQxOTAw
RTk3Qjk4IC8qIFJlbmRlck1lZGlhLmNwcCAqLzsgfTsKIAkJRTRDMjc5NTkwQ0Y5NzQxOTAwRTk3
Qjk4IC8qIFJlbmRlck1lZGlhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNEMyNzk1NzBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuaCAqLzsg
fTsKIAkJRTRFRUZGQzgwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEVFRkZDNjBE
MzQ1NTBDMDA0NjlBNTggLyogSlNBdWRpb0NvbnN0cnVjdG9yLmNwcCAqLzsgfTsKQEAgLTc5OTAs
NiArNzk5Miw4IEBACiAJCUU0QjQyMzg2MENCRkI3M0MwMEFGMkVDRSAvKiBKU1Byb2dyZXNzRXZl
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQcm9ncmVzc0V2ZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QzI3OTU2MENGOTc0MTkwMEU5N0I5OCAv
KiBSZW5kZXJNZWRpYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJNZWRpYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QzI3OTU3MENG
OTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJNZWRpYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEQ0
QUJFMDBENzU0MkYwMDBGOTY4NjkgLyogSFRNTFByZWxvYWRUb2tlbml6ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFByZWxvYWRUb2tlbml6ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEQ0QUJFMTBENzU0MkYxMDBGOTY4NjkgLyog
SFRNTFByZWxvYWRUb2tlbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SFRNTFByZWxvYWRUb2tlbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRF
RUZGQzYwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0F1ZGlvQ29uc3RydWN0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEVFRkZDNzBEMzQ1NTBDMDA0NjlBNTggLyogSlNB
dWRpb0NvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQXVk
aW9Db25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFRDA0OEFCQjA4
MzNGMTMyMDA2RTFFNjcgLyogdGV4dEFyZWFSZXNpemVDb3JuZXIudGlmZiAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLnRpZmY7IHBhdGggPSB0
ZXh0QXJlYVJlc2l6ZUNvcm5lci50aWZmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
OTkzOCw2ICs5OTQyLDggQEAKIAkJOTNFRUMxRUMwOUMyODc3NzAwQzUxNUQxIC8qIGh0bWwgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUU0RDRBQkUwMEQ3
NTQyRjAwMEY5Njg2OSAvKiBIVE1MUHJlbG9hZFRva2VuaXplci5jcHAgKi8sCisJCQkJRTRENEFC
RTEwRDc1NDJGMTAwRjk2ODY5IC8qIEhUTUxQcmVsb2FkVG9rZW5pemVyLmggKi8sCiAJCQkJQTc3
OTc5MTAwRDZCOUQwQzAwMzg1MUI5IC8qIENhbnZhc1BpeGVsQXJyYXkuY3BwICovLAogCQkJCUE3
Nzk3OTExMEQ2QjlEMEMwMDM4NTFCOSAvKiBDYW52YXNQaXhlbEFycmF5LmggKi8sCiAJCQkJQTc3
OTc5MTIwRDZCOUQwQzAwMzg1MUI5IC8qIENhbnZhc1BpeGVsQXJyYXkuaWRsICovLApAQCAtMTQ0
NDEsNiArMTQ0NDcsNyBAQAogCQkJCTFBNTY5RDIzMEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1l
X29iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMjUwRDdFMkI4MjAwN0MzOTgzIC8q
IHJ1bnRpbWVfcm9vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2OTMyNzQwRDdFMjkzOTAwQUU0
NEQxIC8qIEpTRE9NV2luZG93QmFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTQ5NjI2QzMwRDgw
RDk0OTAwRTM0MDVDIC8qIEhUTUxQcmVsb2FkVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAg
LTE2MDYzLDYgKzE2MDcwLDcgQEAKIAkJCQkxQTU2OUQyMjBEN0UyQjgyMDA3QzM5ODMgLyogcnVu
dGltZV9vYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE1NjlEMjQwRDdFMkI4MjAwN0Mz
OTgzIC8qIHJ1bnRpbWVfcm9vdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzY5MzI3MzBEN0Uy
OTM5MDBBRTQ0RDEgLyogSlNET01XaW5kb3dCYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0
OTYyNkMyMEQ4MEQ5NDgwMEUzNDA1QyAvKiBIVE1MUHJlbG9hZFRva2VuaXplci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDMwODE0KQorKysgV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDY0LDYgKzE0NjQsOSBAQCB2b2lkIERv
Y3VtZW50OjppbXBsaWNpdENsb3NlKCkKICAgICBkZWxldGUgbV90b2tlbml6ZXI7CiAgICAgbV90
b2tlbml6ZXIgPSAwOwogCisgICAgLy8gUGFyc2VyIHNob3VsZCBoYXZlIHBpY2tlZCB1cCBhbGwg
cHJlbG9hZHMgYnkgbm93CisgICAgbV9kb2NMb2FkZXItPmNsZWFyUHJlbG9hZHMoKTsKKwogICAg
IC8vIENyZWF0ZSBhIGJvZHkgZWxlbWVudCBpZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiBT
ZWUgUmFkYXIgMzc1ODc4NS4KICAgICBpZiAoIXRoaXMtPmJvZHkoKSAmJiBpc0hUTUxEb2N1bWVu
dCgpKSB7CiAgICAgICAgIGlmIChOb2RlKiBkb2N1bWVudEVsZW1lbnQgPSB0aGlzLT5kb2N1bWVu
dEVsZW1lbnQoKSkgewpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHJldmlzaW9uIDMw
ODE0KQorKysgV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNCw3ICsxMDQsNyBAQCBTdHlsZVNoZWV0KiBIVE1MTGlua0VsZW1lbnQ6OnNoZWV0KCkg
Y29uCiB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlICphdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gcmVsQXR0cikgewotICAg
ICAgICB0b2tlbml6ZVJlbEF0dHJpYnV0ZShhdHRyLT52YWx1ZSgpKTsKKyAgICAgICAgdG9rZW5p
emVSZWxBdHRyaWJ1dGUoYXR0ci0+dmFsdWUoKSwgbV9pc1N0eWxlU2hlZXQsIG1fYWx0ZXJuYXRl
LCBtX2lzSWNvbik7CiAgICAgICAgIHByb2Nlc3MoKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBocmVmQXR0cikgewogICAgICAgICBtX3VybCA9IGRvY3VtZW50KCktPmNvbXBsZXRl
VVJMKHBhcnNlVVJMKGF0dHItPnZhbHVlKCkpKS5zdHJpbmcoKTsKQEAgLTEyNCwxNyArMTI0LDIw
IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnUKICAgICB9CiB9CiAK
LXZvaWQgSFRNTExpbmtFbGVtZW50Ojp0b2tlbml6ZVJlbEF0dHJpYnV0ZShjb25zdCBBdG9taWNT
dHJpbmcmIHJlbFN0cikKK3ZvaWQgSFRNTExpbmtFbGVtZW50Ojp0b2tlbml6ZVJlbEF0dHJpYnV0
ZShjb25zdCBBdG9taWNTdHJpbmcmIHJlbFN0ciwgYm9vbCYgc3R5bGVTaGVldCwgYm9vbCYgYWx0
ZXJuYXRlLCBib29sJiBpY29uKQogewotICAgIG1faXNTdHlsZVNoZWV0ID0gbV9pc0ljb24gPSBt
X2FsdGVybmF0ZSA9IGZhbHNlOworICAgIHN0eWxlU2hlZXQgPSBmYWxzZTsKKyAgICBpY29uID0g
ZmFsc2U7IAorICAgIGFsdGVybmF0ZSA9IGZhbHNlOwogICAgIFN0cmluZyByZWwgPSByZWxTdHIu
c3RyaW5nKCkubG93ZXIoKTsKICAgICBpZiAocmVsID09ICJzdHlsZXNoZWV0IikKLSAgICAgICAg
bV9pc1N0eWxlU2hlZXQgPSB0cnVlOworICAgICAgICBzdHlsZVNoZWV0ID0gdHJ1ZTsKICAgICBl
bHNlIGlmIChyZWwgPT0gImljb24iIHx8IHJlbCA9PSAic2hvcnRjdXQgaWNvbiIpCi0gICAgICAg
IG1faXNJY29uID0gdHJ1ZTsKLSAgICBlbHNlIGlmIChyZWwgPT0gImFsdGVybmF0ZSBzdHlsZXNo
ZWV0IiB8fCByZWwgPT0gInN0eWxlc2hlZXQgYWx0ZXJuYXRlIikKLSAgICAgICAgbV9pc1N0eWxl
U2hlZXQgPSBtX2FsdGVybmF0ZSA9IHRydWU7Ci0gICAgZWxzZSB7CisgICAgICAgIGljb24gPSB0
cnVlOworICAgIGVsc2UgaWYgKHJlbCA9PSAiYWx0ZXJuYXRlIHN0eWxlc2hlZXQiIHx8IHJlbCA9
PSAic3R5bGVzaGVldCBhbHRlcm5hdGUiKSB7CisgICAgICAgIHN0eWxlU2hlZXQgPSB0cnVlOwor
ICAgICAgICBhbHRlcm5hdGUgPSB0cnVlOworICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRva2Vu
aXplIHRoZSByZWwgYXR0cmlidXRlIGFuZCBzZXQgYml0cyBiYXNlZCBvbiBzcGVjaWZpYyBrZXl3
b3JkcyB0aGF0IHdlIGZpbmQuCiAgICAgICAgIHJlbC5yZXBsYWNlKCdcbicsICcgJyk7CiAgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IGxpc3Q7CkBAIC0xNDIsMTEgKzE0NSwxMSBAQCB2b2lkIEhUTUxM
aW5rRWxlbWVudDo6dG9rZW5pemVSZWxBdHRyaWJ1CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBsaXN0LmVuZCgpOwogICAgICAgICBmb3IgKFZlY3RvcjxTdHJp
bmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxpc3QuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CiAgICAgICAgICAgICBpZiAoKml0ID09ICJzdHlsZXNoZWV0IikKLSAgICAgICAgICAgICAgICBt
X2lzU3R5bGVTaGVldCA9IHRydWU7CisgICAgICAgICAgICAgICAgc3R5bGVTaGVldCA9IHRydWU7
CiAgICAgICAgICAgICBlbHNlIGlmICgqaXQgPT0gImFsdGVybmF0ZSIpCi0gICAgICAgICAgICAg
ICAgbV9hbHRlcm5hdGUgPSB0cnVlOworICAgICAgICAgICAgICAgIGFsdGVybmF0ZSA9IHRydWU7
CiAgICAgICAgICAgICBlbHNlIGlmICgqaXQgPT0gImljb24iKQotICAgICAgICAgICAgICAgIG1f
aXNJY29uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpY29uID0gdHJ1ZTsKICAgICAgICAgfQog
ICAgIH0KIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHJldmlzaW9uIDMwODE0KQorKysg
V2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5
MSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1
dGUqKSBjb25zdDsKICAgICAKLSAgICB2b2lkIHRva2VuaXplUmVsQXR0cmlidXRlKGNvbnN0IEF0
b21pY1N0cmluZyYgcmVsKTsKKyAgICBzdGF0aWMgdm9pZCB0b2tlbml6ZVJlbEF0dHJpYnV0ZShj
b25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBib29sJiBzdHlsZXNoZWV0LCBib29sJiBhbHRlcm5h
dGUsIGJvb2wmIGljb24pOwogCiBwcm90ZWN0ZWQ6CiAgICAgQ2FjaGVkQ1NTU3R5bGVTaGVldCog
bV9jYWNoZWRTaGVldDsKQEAgLTEwMCwxMCArMTAwLDEwIEBAIHByb3RlY3RlZDoKICAgICBTdHJp
bmcgbV90eXBlOwogICAgIFN0cmluZyBtX21lZGlhOwogICAgIGludCBtX2Rpc2FibGVkU3RhdGU7
IC8vIDA9dW5zZXQoZGVmYXVsdCksIDE9ZW5hYmxlZCB2aWEgc2NyaXB0LCAyPWRpc2FibGVkCi0g
ICAgYm9vbCBtX2xvYWRpbmcgOiAxOwotICAgIGJvb2wgbV9hbHRlcm5hdGUgOiAxOwotICAgIGJv
b2wgbV9pc1N0eWxlU2hlZXQgOiAxOwotICAgIGJvb2wgbV9pc0ljb24gOiAxOworICAgIGJvb2wg
bV9sb2FkaW5nOworICAgIGJvb2wgbV9hbHRlcm5hdGU7CisgICAgYm9vbCBtX2lzU3R5bGVTaGVl
dDsKKyAgICBib29sIG1faXNJY29uOwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxQcmVsb2FkVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTFByZWxvYWRUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9odG1s
L0hUTUxQcmVsb2FkVG9rZW5pemVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MzMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSFRNTFByZWxvYWRUb2tlbml6ZXIu
aCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIkNhY2hlLmgiCisjaW5j
bHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVu
dC5oIgorI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgorI2luY2x1ZGUgIkNTU0hlbHBlci5oIgor
I2luY2x1ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkhUTUxMaW5rRWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIK
KworLy8gRklYTUUgbWFpbiB0b2tlbml6ZXIgaW5jbHVkZXMgdGhpcyB0b28sIGFyZSB3ZSBnZXR0
aW5nIHR3byBjb3BpZXMgb2YgdGhlIGNvZGUgYW5kIGRhdGE/CisjaW5jbHVkZSAiSFRNTEVudGl0
eU5hbWVzLmMiCisKKyNkZWZpbmUgUFJFTE9BRF9ERUJVRyAwCisKKyNpZiBQUkVMT0FEX0RFQlVH
CisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAg
ICAKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisgICAgCitIVE1MUHJlbG9hZFRva2VuaXpl
cjo6SFRNTFByZWxvYWRUb2tlbml6ZXIoRG9jdW1lbnQqIGRvYykKKyAgICA6IG1faW5Qcm9ncmVz
cyhmYWxzZSkKKyAgICAsIG1fdGltZVVzZWQoMCkKKyAgICAsIG1fZG9jdW1lbnQoZG9jKQorewor
I2lmIFBSRUxPQURfREVCVUcKKyAgICBwcmludGYoIkNSRUFUSU5HIFBSRUxPQUQgVE9LRU5JWkVS
IEZPUiAlc1xuIiwgbV9kb2N1bWVudC0+dXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsK
KyNlbmRpZgorfQorICAgIAorSFRNTFByZWxvYWRUb2tlbml6ZXI6On5IVE1MUHJlbG9hZFRva2Vu
aXplcigpCit7CisjaWYgUFJFTE9BRF9ERUJVRworICAgIHByaW50ZigiREVMRVRJTkcgUFJFTE9B
RCBUT0tFTklaRVIgRk9SICVzXG4iLCBtX2RvY3VtZW50LT51cmwoKS5zdHJpbmcoKS5sYXRpbjEo
KS5kYXRhKCkpOworICAgIHByaW50ZigiVE9UQUwgVElNRSBVU0VEICUuNGZzXG4iLCBtX3RpbWVV
c2VkKTsKKyNlbmRpZgorfQorICAgIAordm9pZCBIVE1MUHJlbG9hZFRva2VuaXplcjo6YmVnaW4o
KSAKK3sgCisgICAgQVNTRVJUKCFtX2luUHJvZ3Jlc3MpOyAKKyAgICByZXNldCgpOyAKKyAgICBt
X2luUHJvZ3Jlc3MgPSB0cnVlOyAKK30KKyAgICAKK3ZvaWQgSFRNTFByZWxvYWRUb2tlbml6ZXI6
OmVuZCgpIAoreyAKKyAgICBBU1NFUlQobV9pblByb2dyZXNzKTsgCisgICAgbV9pblByb2dyZXNz
ID0gZmFsc2U7IAorfQorCit2b2lkIEhUTUxQcmVsb2FkVG9rZW5pemVyOjpyZXNldCgpCit7Cisg
ICAgbV9zb3VyY2UuY2xlYXIoKTsKKyAgICAKKyAgICBtX3N0YXRlID0gRGF0YTsKKyAgICBtX2Vz
Y2FwZSA9IGZhbHNlOworICAgIG1fY29udGVudE1vZGVsID0gUENEQVRBOworICAgIG1fY29tbWVu
dFBvcyA9IDA7CisKKyAgICBtX2Nsb3NlVGFnID0gZmFsc2U7CisgICAgbV90YWdOYW1lLmNsZWFy
KCk7CisgICAgbV9hdHRyaWJ1dGVOYW1lLmNsZWFyKCk7CisgICAgbV9hdHRyaWJ1dGVWYWx1ZS5j
bGVhcigpOworICAgIG1fbGFzdFN0YXJ0VGFnID0gQXRvbWljU3RyaW5nKCk7CisgICAgCisgICAg
bV91cmxUb0xvYWQgPSAiIjsKKyAgICBtX2xpbmtJc1N0eWxlU2hlZXQgPSBmYWxzZTsKKyAgICBt
X2xhc3RDaGFyYWN0ZXJJbmRleCA9IDA7CisgICAgY2xlYXJMYXN0Q2hhcmFjdGVycygpOworICAg
IAorICAgIG1fY3NzU3RhdGUgPSBDU1NJbml0aWFsOworICAgIG1fY3NzUnVsZS5jbGVhcigpOwor
ICAgIG1fY3NzUnVsZVZhbHVlLmNsZWFyKCk7Cit9CisgICAgCit2b2lkIEhUTUxQcmVsb2FkVG9r
ZW5pemVyOjp3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSkKK3sKKyAgICBkb3Vi
bGUgc3RhcnRUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICB0b2tlbml6ZShzb3VyY2UpOworICAg
IG1fdGltZVVzZWQgKz0gY3VycmVudFRpbWUoKSAtIHN0YXJ0VGltZTsKK30KKyAgICAKK3N0YXRp
YyBpbmxpbmUgYm9vbCBpc1doaXRlc3BhY2UoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gYyA9PSAn
ICcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJyB8fCBjID09ICdcdCc7Cit9CisgICAgCitpbmxp
bmUgdm9pZCBIVE1MUHJlbG9hZFRva2VuaXplcjo6Y2xlYXJMYXN0Q2hhcmFjdGVycygpCit7Cisg
ICAgbWVtc2V0KG1fbGFzdENoYXJhY3RlcnMsIDAsIGxhc3RDaGFyYWN0ZXJzQnVmZmVyU2l6ZSAq
IHNpemVvZihVQ2hhcikpOworfQorICAgIAoraW5saW5lIHZvaWQgSFRNTFByZWxvYWRUb2tlbml6
ZXI6OnJlbWVtYmVyQ2hhcmFjdGVyKFVDaGFyIGMpCit7CisgICAgbV9sYXN0Q2hhcmFjdGVySW5k
ZXggPSAobV9sYXN0Q2hhcmFjdGVySW5kZXggKyAxKSAlIGxhc3RDaGFyYWN0ZXJzQnVmZmVyU2l6
ZTsKKyAgICBtX2xhc3RDaGFyYWN0ZXJzW21fbGFzdENoYXJhY3RlckluZGV4XSA9IGM7Cit9Cisg
ICAgCitpbmxpbmUgYm9vbCBIVE1MUHJlbG9hZFRva2VuaXplcjo6bGFzdENoYXJhY3RlcnNNYXRj
aChjb25zdCBjaGFyKiBjaGFycywgdW5zaWduZWQgY291bnQpIGNvbnN0Cit7CisgICAgdW5zaWdu
ZWQgcG9zID0gbV9sYXN0Q2hhcmFjdGVySW5kZXg7CisgICAgd2hpbGUgKGNvdW50KSB7CisgICAg
ICAgIGlmIChjaGFyc1tjb3VudCAtIDFdICE9IG1fbGFzdENoYXJhY3RlcnNbcG9zXSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLS1jb3VudDsKKyAgICAgICAgaWYgKCFwb3Mp
CisgICAgICAgICAgICBwb3MgPSBsYXN0Q2hhcmFjdGVyc0J1ZmZlclNpemU7CisgICAgICAgIC0t
cG9zOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKK3N0YXRpYyBpbmxpbmUgdW5z
aWduZWQgbGVnYWxFbnRpdHlGb3IodW5zaWduZWQgdmFsdWUpCit7CisgICAgLy8gRklYTUUgdGhl
cmUgaXMgYSB0YWJsZSBmb3IgbW9yZSBleGNlcHRpb25zIGluIHRoZSBzcGVjCisgICAgaWYgKHZh
bHVlID09IDAgfHwgdmFsdWUgPiAweDEwRkZGRiB8fCAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVl
IDw9IDB4REZGRikpCisgICAgICAgIHJldHVybiAweEZGRkQ7CisgICAgcmV0dXJuIHZhbHVlOwor
fQorICAgIAordW5zaWduZWQgSFRNTFByZWxvYWRUb2tlbml6ZXI6OmNvbnN1bWVFbnRpdHkoU2Vn
bWVudGVkU3RyaW5nJiBzb3VyY2UsIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMpCit7CisgICAg
ZW51bSBFbnRpdHlTdGF0ZSB7CisgICAgICAgIEluaXRpYWwsCisgICAgICAgIE51bWJlclR5cGUs
CisgICAgICAgIE1heWJlSGV4LAorICAgICAgICBIZXgsCisgICAgICAgIERlY2ltYWwsCisgICAg
ICAgIE5hbWVkCisgICAgfTsKKyAgICBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZSA9IEluaXRpYWw7
CisgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKKyAgICBWZWN0b3I8VUNoYXIsIDEwPiBzZWVuQ2hh
cnM7CisgICAgVmVjdG9yPGNoYXIsIDEwPiBlbnRpdHlOYW1lOworICAgIAorICAgIHdoaWxlICgh
c291cmNlLmlzRW1wdHkoKSkgeworICAgICAgICBVQ2hhciBjYyA9ICpzb3VyY2U7CisgICAgICAg
IHNlZW5DaGFycy5hcHBlbmQoY2MpOworICAgICAgICBzd2l0Y2ggKGVudGl0eVN0YXRlKSB7Cisg
ICAgICAgIGNhc2UgSW5pdGlhbDoKKyAgICAgICAgICAgIGlmIChpc1doaXRlc3BhY2UoY2MpIHx8
IGNjID09ICc8JyB8fCBjYyA9PSAnJicpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gJyMnKSAKKyAgICAgICAgICAgICAgICBlbnRpdHlT
dGF0ZSA9IE51bWJlclR5cGU7CisgICAgICAgICAgICBlbHNlIGlmICgoY2MgPj0gJ2EnICYmIGNj
IDw9ICd6JykgfHwgKGNjID49ICdBJyAmJiBjYyA8PSAnWicpKSB7CisgICAgICAgICAgICAgICAg
ZW50aXR5TmFtZS5hcHBlbmQoY2MpOworICAgICAgICAgICAgICAgIGVudGl0eVN0YXRlID0gTmFt
ZWQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTnVtYmVyVHlwZToK
KyAgICAgICAgICAgIGlmIChjYyA9PSAneCcgfHwgY2MgPT0gJ1gnKQorICAgICAgICAgICAgICAg
IGVudGl0eVN0YXRlID0gTWF5YmVIZXg7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA+PSAnMCcg
JiYgY2MgPD0gJzknKSB7CisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBEZWNpbWFsOwor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNjIC0gJzAnOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBzb3VyY2UucHVzaCgnIycpOworICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWF5
YmVIZXg6CisgICAgICAgICAgICBpZiAoY2MgPj0gJzAnICYmIGNjIDw9ICc5JykKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSBjYyAtICcwJzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNjID49ICdh
JyAmJiBjYyA8PSAnZicpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gMTAgKyBjYyAtICdhJzsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGNjID49ICdBJyAmJiBjYyA8PSAnRicpCisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gMTAgKyBjYyAtICdBJzsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIHNvdXJjZS5wdXNoKHNlZW5DaGFyc1sxXSk7CisgICAgICAgICAgICAgICAgc291
cmNlLnB1c2goJyMnKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVudGl0eVN0YXRlID0gSGV4OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSGV4OgorICAgICAgICAgICAgaWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpCisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMTYgKyBjYyAtICcwJzsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGNjID49ICdhJyAmJiBjYyA8PSAnZicpCisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gcmVzdWx0ICogMTYgKyAxMCArIGNjIC0gJ2EnOworICAgICAgICAgICAgZWxzZSBpZiAo
Y2MgPj0gJ0EnICYmIGNjIDw9ICdGJykKKyAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQg
KiAxNiArIDEwICsgY2MgLSAnQSc7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnOycpIHsK
KyAgICAgICAgICAgICAgICBzb3VyY2UuYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHJldHVy
biBsZWdhbEVudGl0eUZvcihyZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlIAorICAgICAgICAg
ICAgICAgIHJldHVybiBsZWdhbEVudGl0eUZvcihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRGVjaW1hbDoKKyAgICAgICAgICAgIGlmIChjYyA+PSAnMCcgJiYgY2Mg
PD0gJzknKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDEwICsgY2MgLSAnMCc7
CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnOycpIHsKKyAgICAgICAgICAgICAgICBzb3Vy
Y2UuYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBsZWdhbEVudGl0eUZvcihyZXN1
bHQpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGxlZ2FsRW50
aXR5Rm9yKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBOYW1lZDoKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGF0dHJpYnV0ZSBvbmx5
IHZlcnNpb24sIGdlbmVyaWMgdmVyc2lvbiBtYXRjaGVzIHNvbWV3aGF0IGRpZmZlcmVudGx5Cisg
ICAgICAgICAgICB3aGlsZSAoZW50aXR5TmFtZS5zaXplKCkgPD0gOCkgeworICAgICAgICAgICAg
ICAgIGlmIChjYyA9PSAnOycpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgRW50aXR5KiBl
bnRpdHkgPSBmaW5kRW50aXR5KGVudGl0eU5hbWUuZGF0YSgpLCBlbnRpdHlOYW1lLnNpemUoKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChlbnRpdHkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNvdXJjZS5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50
aXR5LT5jb2RlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIShjYyA+PSAnYScg
JiYgY2MgPD0gJ3onKSAmJiAhKGNjID49ICdBJyAmJiBjYyA8PSAnWicpICYmICEoY2MgPj0gJzAn
ICYmIGNjIDw9ICc5JykpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgRW50aXR5KiBlbnRp
dHkgPSBmaW5kRW50aXR5KGVudGl0eU5hbWUuZGF0YSgpLCBlbnRpdHlOYW1lLnNpemUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChlbnRpdHkpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZW50aXR5LT5jb2RlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZW50aXR5TmFtZS5hcHBlbmQoY2MpOworICAgICAg
ICAgICAgICAgIHNvdXJjZS5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0T2ZDaGFyYWN0ZXJzOworICAg
ICAgICAgICAgICAgIGNjID0gKnNvdXJjZTsKKyAgICAgICAgICAgICAgICBzZWVuQ2hhcnMuYXBw
ZW5kKGNjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzZWVuQ2hhcnMuc2l6ZSgp
ID09IDIpCisgICAgICAgICAgICAgICAgc291cmNlLnB1c2goc2VlbkNoYXJzWzBdKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKHNlZW5DaGFycy5zaXplKCkgPT0gMykgeworICAgICAgICAgICAgICAg
IHNvdXJjZS5wdXNoKHNlZW5DaGFyc1sxXSk7CisgICAgICAgICAgICAgICAgc291cmNlLnB1c2go
c2VlbkNoYXJzWzBdKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHNvdXJj
ZS5wcmVwZW5kKFNlZ21lbnRlZFN0cmluZyhTdHJpbmcoc2VlbkNoYXJzLmRhdGEoKSwgc2VlbkNo
YXJzLnNpemUoKSAtIDEpKSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAg
ICAgICBzb3VyY2UuYWR2YW5jZSgpOworICAgIH0KK291dE9mQ2hhcmFjdGVyczoKKyAgICBub3RF
bm91Z2hDaGFyYWN0ZXJzID0gdHJ1ZTsKKyAgICBzb3VyY2UucHJlcGVuZChTZWdtZW50ZWRTdHJp
bmcoU3RyaW5nKHNlZW5DaGFycy5kYXRhKCksIHNlZW5DaGFycy5zaXplKCkpKSk7CisgICAgcmV0
dXJuIDA7Cit9CisKK3ZvaWQgSFRNTFByZWxvYWRUb2tlbml6ZXI6OnRva2VuaXplKGNvbnN0IFNl
Z21lbnRlZFN0cmluZyYgc291cmNlKQoreworICAgIEFTU0VSVChtX2luUHJvZ3Jlc3MpOworICAg
IAorICAgIG1fc291cmNlLmFwcGVuZChzb3VyY2UpOworCisgICAgLy8gVGhpcyBpcyBhIHNpbXBs
aWZpZWQgSFRNTDUgVG9rZW5pemVyCisgICAgd2hpbGUgKCFtX3NvdXJjZS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgVUNoYXIgY2MgPSAqbV9zb3VyY2U7CisgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkg
eworICAgICAgICBjYXNlIERhdGE6CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAg
ICAgICAgIHJlbWVtYmVyQ2hhcmFjdGVyKGNjKTsKKyAgICAgICAgICAgICAgICBpZiAoY2MgPT0g
JyYnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2NvbnRlbnRNb2RlbCA9PSBQQ0RBVEEg
fHwgbV9jb250ZW50TW9kZWwgPT0gUkNEQVRBKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X3N0YXRlID0gRW50aXR5RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnLScp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChtX2NvbnRlbnRNb2RlbCA9PSBSQ0RBVEEgfHwg
bV9jb250ZW50TW9kZWwgPT0gQ0RBVEEpICYmICFtX2VzY2FwZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGxhc3RDaGFyYWN0ZXJzTWF0Y2goIjwhLS0iLCA0KSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2VzY2FwZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNjID09ICc8JykgeworICAgICAgICAgICAgICAg
ICAgICBpZiAobV9jb250ZW50TW9kZWwgPT0gUENEQVRBIHx8ICgobV9jb250ZW50TW9kZWwgPT0g
UkNEQVRBIHx8IG1fY29udGVudE1vZGVsID09IENEQVRBKSAmJiAhbV9lc2NhcGUpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gVGFnT3BlbjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChjYyA9PSAnPicpIHsKKyAgICAgICAgICAgICAgICAgICAgIGlmICgobV9jb250ZW50
TW9kZWwgPT0gUkNEQVRBIHx8IG1fY29udGVudE1vZGVsID09IENEQVRBKSAmJiBtX2VzY2FwZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0Q2hhcmFjdGVyc01hdGNoKCItLT4i
LCAzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lc2NhcGUgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZW1pdENoYXJhY3RlcihjYyk7CisgICAgICAgICAgICAgICAgbV9zb3VyY2UuYWR2YW5jZSgpOwor
ICAgICAgICAgICAgICAgIGlmIChtX3NvdXJjZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY2MgPSAqbV9zb3VyY2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbnRpdHlEYXRhOgorICAgICAg
ICAgICAgLy8gc2hvdWxkIHRyeSB0byBjb25zdW1lIHRoZSBlbnRpdHkgYnV0IHdlIG9ubHkgY2Fy
ZSBhYm91dCBlbnRpdGllcyBpbiBhdHRyaWJ1dGVzCisgICAgICAgICAgICBtX3N0YXRlID0gRGF0
YTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRhZ09wZW46CisgICAgICAgICAg
ICBpZiAobV9jb250ZW50TW9kZWwgPT0gUkNEQVRBIHx8IG1fY29udGVudE1vZGVsID09IENEQVRB
KSB7CisgICAgICAgICAgICAgICAgaWYgKGNjID09ICcvJykKKyAgICAgICAgICAgICAgICAgICAg
bV9zdGF0ZSA9IENsb3NlVGFnT3BlbjsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9jb250ZW50TW9k
ZWwgPT0gUENEQVRBKSB7CisgICAgICAgICAgICAgICAgaWYgKGNjID09ICchJykKKyAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZSA9IE1hcmt1cERlY2xhcmF0aW9uT3BlbjsKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChjYyA9PSAnLycpCisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBD
bG9zZVRhZ09wZW47CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0gJ0EnICYmIGNjIDw9
ICdaJykgeworICAgICAgICAgICAgICAgICAgICBtX3RhZ05hbWUuY2xlYXIoKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV90YWdOYW1lLmFwcGVuZChjYyArIDB4MjApOworICAgICAgICAgICAgICAg
ICAgICBtX2Nsb3NlVGFnID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBU
YWdOYW1lOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2MgPj0gJ2EnICYmIGNjIDw9ICd6
JykgeworICAgICAgICAgICAgICAgICAgICBtX3RhZ05hbWUuY2xlYXIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV90YWdOYW1lLmFwcGVuZChjYyk7CisgICAgICAgICAgICAgICAgICAgIG1fY2xv
c2VUYWcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IFRhZ05hbWU7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnPicpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbV9zdGF0ZSA9IERhdGE7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnPycp
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEJvZ3VzQ29tbWVudDsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2xvc2VUYWdPcGVuOgorICAg
ICAgICAgICAgaWYgKG1fY29udGVudE1vZGVsID09IFJDREFUQSB8fCBtX2NvbnRlbnRNb2RlbCA9
PSBDREFUQSkgeworICAgICAgICAgICAgICAgIGlmICghbV9sYXN0U3RhcnRUYWcubGVuZ3RoKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobV9z
b3VyY2UubGVuZ3RoKCkgPCBtX2xhc3RTdGFydFRhZy5sZW5ndGgoKSArIDEpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBWZWN0b3I8VUNoYXI+IHRtcFN0cmlu
ZzsKKyAgICAgICAgICAgICAgICBVQ2hhciB0bXBDaGFyOworICAgICAgICAgICAgICAgIGJvb2wg
bWF0Y2ggPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBt
X2xhc3RTdGFydFRhZy5sZW5ndGgoKSArIDE7IG4rKykgeworICAgICAgICAgICAgICAgICAgICB0
bXBDaGFyID0gdV90b2xvd2VyKCptX3NvdXJjZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChu
IDwgbV9sYXN0U3RhcnRUYWcubGVuZ3RoKCkgJiYgdG1wQ2hhciAhPSBtX2xhc3RTdGFydFRhZ1tu
XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIHRtcFN0cmluZy5hcHBlbmQodG1wQ2hhcik7CisgICAgICAgICAgICAgICAgICAgIG1f
c291cmNlLmFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9z
b3VyY2UucHJlcGVuZChTZWdtZW50ZWRTdHJpbmcoU3RyaW5nKHRtcFN0cmluZy5kYXRhKCksIHRt
cFN0cmluZy5zaXplKCkpKSk7CisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCB8fCAoIWlzV2hp
dGVzcGFjZSh0bXBDaGFyKSAmJiB0bXBDaGFyICE9ICc+JyAmIHRtcENoYXIgIT0gJy8nKSkgewor
ICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGNjID49ICdBJyAmJiBjYyA8PSAnWicpIHsKKyAgICAgICAgICAgICAgICBtX3RhZ05hbWUu
Y2xlYXIoKTsKKyAgICAgICAgICAgICAgICBtX3RhZ05hbWUuYXBwZW5kKGNjICsgMHgyMCk7Cisg
ICAgICAgICAgICAgICAgbV9jbG9zZVRhZyA9IHRydWU7CisgICAgICAgICAgICAgICAgbV9zdGF0
ZSA9IFRhZ05hbWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNjID49ICdhJyAmJiBjYyA8PSAn
eicpIHsKKyAgICAgICAgICAgICAgICBtX3RhZ05hbWUuY2xlYXIoKTsKKyAgICAgICAgICAgICAg
ICBtX3RhZ05hbWUuYXBwZW5kKGNjKTsKKyAgICAgICAgICAgICAgICBtX2Nsb3NlVGFnID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gVGFnTmFtZTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY2MgPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7CisgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gQm9ndXNDb21tZW50Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGFnTmFtZToKKyAgICAgICAgICAgIHdo
aWxlICgxKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjYykpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEJlZm9yZUF0dHJpYnV0ZU5hbWU7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
Y2MgPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRUYWcoKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZSA9IERhdGE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJy8nKSB7CisgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUgPSBCZWZvcmVBdHRyaWJ1dGVOYW1lOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNj
ID49ICdBJyAmJiBjYyA8PSAnWicpCisgICAgICAgICAgICAgICAgICAgIG1fdGFnTmFtZS5hcHBl
bmQoY2MgKyAweDIwKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IG1fdGFnTmFtZS5hcHBlbmQoY2MpOworICAgICAgICAgICAgICAgIG1fc291cmNlLmFkdmFuY2Uo
KTsKKyAgICAgICAgICAgICAgICBpZiAobV9zb3VyY2UuaXNFbXB0eSgpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY2MgPSAqbV9zb3VyY2U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCZWZvcmVBdHRyaWJ1dGVO
YW1lOgorICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjYykpCisgICAgICAgICAgICAgICAg
OworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgZW1p
dFRhZygpOworICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgfSBl
bHNlIGlmIChjYyA+PSAnQScgJiYgY2MgPD0gJ1onKSB7CisgICAgICAgICAgICAgICAgbV9hdHRy
aWJ1dGVOYW1lLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVWYWx1ZS5jbGVh
cigpOworICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlTmFtZS5hcHBlbmQoY2MgKyAweDIwKTsK
KyAgICAgICAgICAgICAgICBtX3N0YXRlID0gQXR0cmlidXRlTmFtZTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY2MgPT0gJy8nKQorICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlTmFtZS5jbGVhcigpOworICAgICAgICAgICAg
ICAgIG1fYXR0cmlidXRlVmFsdWUuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBtX2F0dHJpYnV0
ZU5hbWUuYXBwZW5kKGNjKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gQXR0cmlidXRlTmFt
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEF0dHJp
YnV0ZU5hbWU6CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIGlmIChp
c1doaXRlc3BhY2UoY2MpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBBZnRlckF0
dHJpYnV0ZU5hbWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJz0nKSB7CisgICAgICAgICAgICAgICAgICAg
IG1fc3RhdGUgPSBCZWZvcmVBdHRyaWJ1dGVWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnPicpIHsK
KyAgICAgICAgICAgICAgICAgICAgZW1pdFRhZygpOworICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlID0gRGF0YTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fSAKKyAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAg
IG1fc3RhdGUgPSBCZWZvcmVBdHRyaWJ1dGVOYW1lOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNjID49ICdBJyAmJiBj
YyA8PSAnWicpCisgICAgICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlTmFtZS5hcHBlbmQoY2Mg
KyAweDIwKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1fYXR0
cmlidXRlTmFtZS5hcHBlbmQoY2MpOworICAgICAgICAgICAgICAgIG1fc291cmNlLmFkdmFuY2Uo
KTsKKyAgICAgICAgICAgICAgICBpZiAobV9zb3VyY2UuaXNFbXB0eSgpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY2MgPSAqbV9zb3VyY2U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBZnRlckF0dHJpYnV0ZU5h
bWU6CisgICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNjKSkKKyAgICAgICAgICAgICAgICA7
CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnPScpCisgICAgICAgICAgICAgICAgbV9zdGF0
ZSA9IEJlZm9yZUF0dHJpYnV0ZVZhbHVlOyAKKyAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc+
JykgeworICAgICAgICAgICAgICAgIGVtaXRUYWcoKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRl
ID0gRGF0YTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2MgPj0gJ0EnICYmIGNjIDw9ICdaJykg
eworICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlTmFtZS5jbGVhcigpOworICAgICAgICAgICAg
ICAgIG1fYXR0cmlidXRlVmFsdWUuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBtX2F0dHJpYnV0
ZU5hbWUuYXBwZW5kKGNjICsgMHgyMCk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEF0dHJp
YnV0ZU5hbWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNjID09ICcvJykKKyAgICAgICAgICAg
ICAgICBtX3N0YXRlID0gQmVmb3JlQXR0cmlidXRlTmFtZTsKKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlTmFtZS5jbGVhcigpOworICAgICAgICAgICAgICAg
IG1fYXR0cmlidXRlVmFsdWUuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBtX2F0dHJpYnV0ZU5h
bWUuYXBwZW5kKGNjKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gQXR0cmlidXRlTmFtZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJlZm9yZUF0
dHJpYnV0ZVZhbHVlOgorICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjYykpCisgICAgICAg
ICAgICAgICAgOworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPT0gJyInKQorICAgICAgICAgICAg
ICAgIG1fc3RhdGUgPSBBdHRyaWJ1dGVWYWx1ZURvdWJsZVF1b3RlZDsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGNjID09ICcmJykgeworICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBBdHRyaWJ1dGVW
YWx1ZVVucXVvdGVkOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBl
bHNlIGlmIChjYyA9PSAnXCcnKQorICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBBdHRyaWJ1dGVW
YWx1ZVNpbmdsZVF1b3RlZDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc+JykgeworICAg
ICAgICAgICAgICAgIGVtaXRUYWcoKTsKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVWYWx1ZS5h
cHBlbmQoY2MpOworICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBBdHRyaWJ1dGVWYWx1ZVVucXVv
dGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXR0
cmlidXRlVmFsdWVEb3VibGVRdW90ZWQ6CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAg
ICAgICAgICAgIGlmIChjYyA9PSAnIicpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0F0
dHJpYnV0ZSgpOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gQmVmb3JlQXR0cmlidXRl
TmFtZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChjYyA9PSAnJicpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0
ZUJlZm9yZUVudGl0eUluQXR0cmlidXRlVmFsdWUgPSBtX3N0YXRlOworICAgICAgICAgICAgICAg
ICAgICBtX3N0YXRlID0gRW50aXR5SW5BdHRyaWJ1dGVWYWx1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgICAgICBtX2F0dHJpYnV0
ZVZhbHVlLmFwcGVuZChjYyk7CisgICAgICAgICAgICAgICAgbV9zb3VyY2UuYWR2YW5jZSgpOwor
ICAgICAgICAgICAgICAgIGlmIChtX3NvdXJjZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjYyA9ICptX3NvdXJjZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEF0dHJpYnV0ZVZhbHVlU2luZ2xl
UXVvdGVkOgorICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2Mg
PT0gJ1wnJykgeworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0cmlidXRlKCk7CisgICAg
ICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBCZWZvcmVBdHRyaWJ1dGVOYW1lOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KGNjID09ICcmJykgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQmVmb3JlRW50aXR5SW5B
dHRyaWJ1dGVWYWx1ZSA9IG1fc3RhdGU7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBF
bnRpdHlJbkF0dHJpYnV0ZVZhbHVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlVmFsdWUuYXBwZW5kKGNj
KTsKKyAgICAgICAgICAgICAgICBtX3NvdXJjZS5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAg
aWYgKG1fc291cmNlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIGNjID0gKm1fc291cmNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQXR0cmlidXRlVmFsdWVVbnF1b3RlZDoKKyAgICAgICAgICAg
IHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjYykpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcHJvY2Vzc0F0dHJpYnV0ZSgpOworICAgICAgICAgICAgICAgICAg
ICBtX3N0YXRlID0gQmVmb3JlQXR0cmlidXRlTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnJicpIHsK
KyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZUJlZm9yZUVudGl0eUluQXR0cmlidXRlVmFsdWUg
PSBtX3N0YXRlOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gRW50aXR5SW5BdHRyaWJ1
dGVWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnPicpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJv
Y2Vzc0F0dHJpYnV0ZSgpOworICAgICAgICAgICAgICAgICAgICBlbWl0VGFnKCk7CisgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVWYWx1ZS5hcHBl
bmQoY2MpOworICAgICAgICAgICAgICAgIG1fc291cmNlLmFkdmFuY2UoKTsKKyAgICAgICAgICAg
ICAgICBpZiAobV9zb3VyY2UuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgY2MgPSAqbV9zb3VyY2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbnRpdHlJbkF0dHJpYnV0ZVZhbHVlOiAKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sIG5vdEVub3VnaENoYXJhY3RlcnMgPSBmYWxz
ZTsgCisgICAgICAgICAgICAgICAgdW5zaWduZWQgZW50aXR5ID0gY29uc3VtZUVudGl0eShtX3Nv
dXJjZSwgbm90RW5vdWdoQ2hhcmFjdGVycyk7CisgICAgICAgICAgICAgICAgaWYgKG5vdEVub3Vn
aENoYXJhY3RlcnMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICBpZiAoZW50aXR5ID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgICAgIG1fYXR0cmlidXRl
VmFsdWUuYXBwZW5kKFUxNl9MRUFEKGVudGl0eSkpOworICAgICAgICAgICAgICAgICAgICBtX2F0
dHJpYnV0ZVZhbHVlLmFwcGVuZChVMTZfVFJBSUwoZW50aXR5KSk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChlbnRpdHkpCisgICAgICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlVmFsdWUu
YXBwZW5kKGVudGl0eSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBtX2F0dHJpYnV0ZVZhbHVlLmFwcGVuZCgnJicpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbV9zdGF0ZSA9IG1fc3RhdGVCZWZvcmVFbnRpdHlJbkF0dHJpYnV0ZVZhbHVlOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgQm9ndXNDb21tZW50OgorICAgICAgICAgICAg
d2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJz4nKSB7CisgICAgICAgICAg
ICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9zb3VyY2UuYWR2YW5jZSgpOworICAg
ICAgICAgICAgICAgIGlmIChtX3NvdXJjZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICBjYyA9ICptX3NvdXJjZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1hcmt1cERlY2xhcmF0aW9uT3Blbjog
eworICAgICAgICAgICAgaWYgKGNjID09ICctJykgeworICAgICAgICAgICAgICAgIGlmIChtX3Nv
dXJjZS5sZW5ndGgoKSA8IDIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICBtX3NvdXJjZS5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgY2MgPSAqbV9zb3Vy
Y2U7CisgICAgICAgICAgICAgICAgaWYgKGNjID09ICctJykKKyAgICAgICAgICAgICAgICAgICAg
bV9zdGF0ZSA9IENvbW1lbnRTdGFydDsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZSA9IEJvZ3VzQ29tbWVudDsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gSWYgd2UgY2FyZWQg
YWJvdXQgdGhlIERPQ1RZUEUgd2Ugd291bGQgdGVzdCB0byBlbnRlciB0aG9zZSBzdGF0ZXMgaGVy
ZQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gQm9ndXND
b21tZW50OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb21tZW50U3RhcnQ6CisgICAg
ICAgICAgICBpZiAoY2MgPT0gJy0nKQorICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBDb21tZW50
U3RhcnREYXNoOworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPT0gJz4nKQorICAgICAgICAgICAg
ICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1f
c3RhdGUgPSBDb21tZW50OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29tbWVu
dFN0YXJ0RGFzaDoKKyAgICAgICAgICAgIGlmIChjYyA9PSAnLScpCisgICAgICAgICAgICAgICAg
bV9zdGF0ZSA9IENvbW1lbnRFbmQ7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnPicpCisg
ICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9zdGF0ZSA9IENvbW1lbnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBDb21tZW50OgorICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoY2MgPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBDb21tZW50RW5k
RGFzaDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIG1fc291cmNlLmFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICBpZiAobV9z
b3VyY2UuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgY2MgPSAqbV9zb3VyY2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDb21tZW50RW5kRGFzaDoKKyAgICAgICAgICAgIGlmIChjYyA9PSAnLScp
CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IENvbW1lbnRFbmQ7CisgICAgICAgICAgICBlbHNl
IAorICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBDb21tZW50OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ29tbWVudEVuZDoKKyAgICAgICAgICAgIGlmIChjYyA9PSAnPicpCisg
ICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9
PSAnLScpCisgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAg
ICAgICBtX3N0YXRlID0gQ29tbWVudDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIG1fc291cmNlLmFkdmFuY2UoKTsKKyAgICB9Cit9CisgICAgCit2b2lkIEhUTUxQcmVs
b2FkVG9rZW5pemVyOjpwcm9jZXNzQXR0cmlidXRlKCkKK3sKKyAgICBBdG9taWNTdHJpbmcgdGFn
ID0gQXRvbWljU3RyaW5nKG1fdGFnTmFtZS5kYXRhKCksIG1fdGFnTmFtZS5zaXplKCkpOworICAg
IEF0b21pY1N0cmluZyBhdHRyaWJ1dGUgPSBBdG9taWNTdHJpbmcobV9hdHRyaWJ1dGVOYW1lLmRh
dGEoKSwgbV9hdHRyaWJ1dGVOYW1lLnNpemUoKSk7CisgICAgCisgICAgU3RyaW5nIHZhbHVlKG1f
YXR0cmlidXRlVmFsdWUuZGF0YSgpLCBtX2F0dHJpYnV0ZVZhbHVlLnNpemUoKSk7CisgICAgaWYg
KHRhZyA9PSBzY3JpcHRUYWcgfHwgdGFnID09IGltZ1RhZykgeworICAgICAgICBpZiAoYXR0cmli
dXRlID09IHNyY0F0dHIgJiYgbV91cmxUb0xvYWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV91
cmxUb0xvYWQgPSBwYXJzZVVSTCh2YWx1ZSk7CisgICAgfSBlbHNlIGlmICh0YWcgPT0gbGlua1Rh
ZykgeworICAgICAgICBpZiAoYXR0cmlidXRlID09IGhyZWZBdHRyICYmIG1fdXJsVG9Mb2FkLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIG1fdXJsVG9Mb2FkID0gcGFyc2VVUkwodmFsdWUpOworICAg
ICAgICBlbHNlIGlmIChhdHRyaWJ1dGUgPT0gcmVsQXR0cikgeworICAgICAgICAgICAgYm9vbCBz
dHlsZVNoZWV0ID0gZmFsc2U7CisgICAgICAgICAgICBib29sIGFsdGVybmF0ZSA9IGZhbHNlOwor
ICAgICAgICAgICAgYm9vbCBpY29uID0gZmFsc2U7CisgICAgICAgICAgICBIVE1MTGlua0VsZW1l
bnQ6OnRva2VuaXplUmVsQXR0cmlidXRlKHZhbHVlLCBzdHlsZVNoZWV0LCBhbHRlcm5hdGUsIGlj
b24pOworICAgICAgICAgICAgbV9saW5rSXNTdHlsZVNoZWV0ID0gc3R5bGVTaGVldCAmJiAhYWx0
ZXJuYXRlICYmICFpY29uOworICAgICAgICB9CisgICAgfQorfQorICAgIAoraW5saW5lIHZvaWQg
SFRNTFByZWxvYWRUb2tlbml6ZXI6OmVtaXRDaGFyYWN0ZXIoVUNoYXIgYykKK3sKKyAgICBpZiAo
bV9jb250ZW50TW9kZWwgPT0gQ0RBVEEgJiYgbV9sYXN0U3RhcnRUYWcgPT0gc3R5bGVUYWcpIAor
ICAgICAgICB0b2tlbml6ZUNTUyhjKTsKK30KKyAgICAKK2lubGluZSB2b2lkIEhUTUxQcmVsb2Fk
VG9rZW5pemVyOjp0b2tlbml6ZUNTUyhVQ2hhciBjKQoreyAgICAKKyAgICAvLyBXZSBhcmUganVz
dCBpbnRlcmVzdGVkIGluIEBpbXBvcnQgcnVsZXMsIG5vIG5lZWQgZm9yIHJlYWwgdG9rZW5pemF0
aW9uIGhlcmUKKyAgICAvLyBTZWFyY2hpbmcgZm9yIG90aGVyIHR5cGVzIG9mIHJlc291cmNlcyBp
cyBwcm9iYWJseSBsb3cgcGF5b2ZmCisgICAgc3dpdGNoIChtX2Nzc1N0YXRlKSB7CisgICAgY2Fz
ZSBDU1NJbml0aWFsOgorICAgICAgICBpZiAoYyA9PSAnQCcpCisgICAgICAgICAgICBtX2Nzc1N0
YXRlID0gQ1NTUnVsZVN0YXJ0OworICAgICAgICBlbHNlIGlmIChjID09ICcvJykKKyAgICAgICAg
ICAgIG1fY3NzU3RhdGUgPSBDU1NNYXliZUNvbW1lbnQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ1NTTWF5YmVDb21tZW50OgorICAgICAgICBpZiAoYyA9PSAnKicpCisgICAgICAgICAgICBt
X2Nzc1N0YXRlID0gQ1NTQ29tbWVudDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jc3NT
dGF0ZSA9IENTU0luaXRpYWw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTQ29tbWVudDoK
KyAgICAgICAgaWYgKGMgPT0gJyonKQorICAgICAgICAgICAgbV9jc3NTdGF0ZSA9IENTU01heWJl
Q29tbWVudEVuZDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NNYXliZUNvbW1lbnRFbmQ6
CisgICAgICAgIGlmIChjID09ICcvJykKKyAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NJbml0
aWFsOworICAgICAgICBlbHNlIGlmIChjID09ICcqJykKKyAgICAgICAgICAgIDsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV9jc3NTdGF0ZSA9IENTU0NvbW1lbnQ7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ1NTUnVsZVN0YXJ0OgorICAgICAgICBpZiAoKGMgPj0gJ0EnICYmIGMgPD0g
J1onKSB8fCAoYyA+PSAnYScgJiYgYyA8PSAneicpKSB7CisgICAgICAgICAgICBtX2Nzc1J1bGUu
Y2xlYXIoKTsKKyAgICAgICAgICAgIG1fY3NzUnVsZVZhbHVlLmNsZWFyKCk7CisgICAgICAgICAg
ICBtX2Nzc1J1bGUuYXBwZW5kKGMpOworICAgICAgICAgICAgbV9jc3NTdGF0ZSA9IENTU1J1bGU7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9jc3NTdGF0ZSA9IENTU0luaXRpYWw7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUnVsZToKKyAgICAgICAgaWYgKGlzV2hpdGVzcGFj
ZShjKSkKKyAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NBZnRlclJ1bGU7CisgICAgICAgIGVs
c2UgaWYgKGMgPT0gJzsnKQorICAgICAgICAgICAgbV9jc3NTdGF0ZSA9IENTU0luaXRpYWw7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY3NzUnVsZS5hcHBlbmQoYyk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ1NTQWZ0ZXJSdWxlOgorICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGMp
KQorICAgICAgICAgICAgOworICAgICAgICBlbHNlIGlmIChjID09ICc7JykKKyAgICAgICAgICAg
IG1fY3NzU3RhdGUgPSBDU1NJbml0aWFsOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1f
Y3NzU3RhdGUgPSBDU1NSdWxlVmFsdWU7CisgICAgICAgICAgICBtX2Nzc1J1bGVWYWx1ZS5hcHBl
bmQoYyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NSdWxlVmFsdWU6
CisgICAgICAgIGlmIChpc1doaXRlc3BhY2UoYykpCisgICAgICAgICAgICBtX2Nzc1N0YXRlID0g
Q1NTQWZlclJ1bGVWYWx1ZTsKKyAgICAgICAgZWxzZSBpZiAoYyA9PSAnOycpIHsKKyAgICAgICAg
ICAgIGVtaXRDU1NSdWxlKCk7CisgICAgICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTSW5pdGlhbDsK
KyAgICAgICAgfSBlbHNlIAorICAgICAgICAgICAgbV9jc3NSdWxlVmFsdWUuYXBwZW5kKGMpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU0FmZXJSdWxlVmFsdWU6CisgICAgICAgIGlmIChp
c1doaXRlc3BhY2UoYykpCisgICAgICAgICAgICA7CisgICAgICAgIGVsc2UgaWYgKGMgPT0gJzsn
KSB7CisgICAgICAgICAgICBlbWl0Q1NTUnVsZSgpOworICAgICAgICAgICAgbV9jc3NTdGF0ZSA9
IENTU0luaXRpYWw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRSBtZWRp
YSBydWxlcworICAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NJbml0aWFsOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKyAgICAKK3ZvaWQgSFRNTFByZWxvYWRUb2tlbml6
ZXI6OmVtaXRUYWcoKQoreworICAgIAorICAgIGlmIChtX2Nsb3NlVGFnKSB7CisgICAgICAgIG1f
Y29udGVudE1vZGVsID0gUENEQVRBOworICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTSW5pdGlhbDsK
KyAgICAgICAgY2xlYXJMYXN0Q2hhcmFjdGVycygpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIEF0b21pY1N0cmluZyB0YWcobV90YWdOYW1lLmRhdGEoKSwgbV90YWdOYW1lLnNp
emUoKSk7CisgICAgCisgICAgbV9sYXN0U3RhcnRUYWcgPSB0YWc7CisgICAgCisgICAgaWYgKHRh
ZyA9PSB0ZXh0YXJlYVRhZyB8fCB0YWcgPT0gdGl0bGVUYWcpCisgICAgICAgIG1fY29udGVudE1v
ZGVsID0gUkNEQVRBOworICAgIGVsc2UgaWYgKHRhZyA9PSBzdHlsZVRhZyB8fCB0YWcgPT0geG1w
VGFnIHx8IHRhZyA9PSBzY3JpcHRUYWcgfHwgdGFnID09IGlmcmFtZVRhZyB8fCB0YWcgPT0gbm9l
bWJlZFRhZyB8fCB0YWcgPT0gbm9mcmFtZXNUYWcpCisgICAgICAgIG1fY29udGVudE1vZGVsID0g
Q0RBVEE7CisgICAgZWxzZSBpZiAodGFnID09IG5vc2NyaXB0VGFnKQorICAgICAgICAvLyB3ZSB3
b3VsZG4ndCBiZSBoZXJlIGlmIHNjcmlwdHMgd2VyZSBkaXNhYmxlZAorICAgICAgICBtX2NvbnRl
bnRNb2RlbCA9IENEQVRBOworICAgIGVsc2UgaWYgKHRhZyA9PSBwbGFpbnRleHRUYWcpCisgICAg
ICAgIG1fY29udGVudE1vZGVsID0gUExBSU5URVhUOworICAgIGVsc2UKKyAgICAgICAgbV9jb250
ZW50TW9kZWwgPSBQQ0RBVEE7CisgICAgCisgICAgaWYgKCFtX3VybFRvTG9hZC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gMDsKKyAgICAgICAgCisgICAg
ICAgIGlmICh0YWcgPT0gc2NyaXB0VGFnKQorICAgICAgICAgICAgcmVzb3VyY2UgPSBtX2RvY3Vt
ZW50LT5kb2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChtX3VybFRvTG9hZCwgbV9kb2N1bWVudC0+
ZnJhbWUoKS0+bG9hZGVyKCktPmVuY29kaW5nKCkpOyAKKyAgICAgICAgZWxzZSBpZiAodGFnID09
IGltZ1RhZykgCisgICAgICAgICAgICByZXNvdXJjZSA9IG1fZG9jdW1lbnQtPmRvY0xvYWRlcigp
LT5yZXF1ZXN0SW1hZ2UobV91cmxUb0xvYWQpOworICAgICAgICBlbHNlIGlmICh0YWcgPT0gbGlu
a1RhZyAmJiBtX2xpbmtJc1N0eWxlU2hlZXQpIAorICAgICAgICAgICAgcmVzb3VyY2UgPSBtX2Rv
Y3VtZW50LT5kb2NMb2FkZXIoKS0+cmVxdWVzdENTU1N0eWxlU2hlZXQobV91cmxUb0xvYWQsIG1f
ZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5lbmNvZGluZygpKTsKKyAgICAgICAgbV9kb2N1
bWVudC0+ZG9jTG9hZGVyKCktPnJlZ2lzdGVyUHJlbG9hZChyZXNvdXJjZSk7CisgICAgfQorICAg
ICAgICAKKyAgICBtX3VybFRvTG9hZCA9ICIiOworICAgIG1fbGlua0lzU3R5bGVTaGVldCA9IGZh
bHNlOworfQorICAgIAordm9pZCBIVE1MUHJlbG9hZFRva2VuaXplcjo6ZW1pdENTU1J1bGUoKQor
eworICAgIFN0cmluZyBydWxlKG1fY3NzUnVsZS5kYXRhKCksIG1fY3NzUnVsZS5zaXplKCkpOwor
ICAgIGlmIChydWxlLmxvd2VyKCkgPT0gImltcG9ydCIgJiYgIW1fY3NzUnVsZVZhbHVlLmlzRW1w
dHkoKSkgeworICAgICAgICBTdHJpbmcgdmFsdWUobV9jc3NSdWxlVmFsdWUuZGF0YSgpLCBtX2Nz
c1J1bGVWYWx1ZS5zaXplKCkpOworICAgICAgICBTdHJpbmcgdXJsID0gcGFyc2VVUkwodmFsdWUp
OworICAgICAgICBpZiAoIXVybC5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2RvY3VtZW50LT5k
b2NMb2FkZXIoKS0+cmVnaXN0ZXJQcmVsb2FkKG1fZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5yZXF1
ZXN0Q1NTU3R5bGVTaGVldCh1cmwsIG1fZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5lbmNv
ZGluZygpKSk7CisgICAgfQorICAgIG1fY3NzUnVsZS5jbGVhcigpOworICAgIG1fY3NzUnVsZVZh
bHVlLmNsZWFyKCk7Cit9CisgICAgICAgICAgICAgICAgCit9CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTFByZWxvYWRUb2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBy
ZWxvYWRUb2tlbml6ZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MUHJlbG9h
ZFRva2VuaXplci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIEhU
TUxQcmVsb2FkVG9rZW5pemVyX2gKKyNkZWZpbmUgSFRNTFByZWxvYWRUb2tlbml6ZXJfaAorCisj
aW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNp
bmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAg
Y2xhc3MgQ2FjaGVkUmVzb3VyY2U7CisgICAgY2xhc3MgQ2FjaGVkUmVzb3VyY2VDbGllbnQ7Cisg
ICAgY2xhc3MgRG9jdW1lbnQ7CisgICAgCisgICAgY2xhc3MgSFRNTFByZWxvYWRUb2tlbml6ZXIg
OiBOb25jb3B5YWJsZQorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEhUTUxQcmVsb2FkVG9r
ZW5pemVyKERvY3VtZW50KiBkb2MpOworICAgICAgICB+SFRNTFByZWxvYWRUb2tlbml6ZXIoKTsK
KyAgICAgICAgdm9pZCB3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKKyAgICAgICAgdm9p
ZCBiZWdpbigpOworICAgICAgICB2b2lkIGVuZCgpOworICAgICAgICBib29sIGluUHJvZ3Jlc3Mo
KSBjb25zdCB7IHJldHVybiBtX2luUHJvZ3Jlc3M7IH0KKyAgICAgICAgCisgICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBjb25zdW1lRW50aXR5KFNlZ21lbnRlZFN0cmluZyYsIGJvb2wmIG5vdEVub3Vn
aENoYXJhY3RlcnMpOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHRva2Vu
aXplKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYpOworICAgICAgICB2b2lkIHJlc2V0KCk7CisgICAg
ICAgIAorICAgICAgICB2b2lkIGVtaXRUYWcoKTsKKyAgICAgICAgdm9pZCBlbWl0Q2hhcmFjdGVy
KFVDaGFyIGMpOworICAgICAgICAKKyAgICAgICAgdm9pZCB0b2tlbml6ZUNTUyhVQ2hhciBjKTsK
KyAgICAgICAgdm9pZCBlbWl0Q1NTUnVsZSgpOworICAgICAgICAKKyAgICAgICAgdm9pZCBwcm9j
ZXNzQXR0cmlidXRlKCk7CisKKyAgICAgICAgCisgICAgICAgIHZvaWQgY2xlYXJMYXN0Q2hhcmFj
dGVycygpOworICAgICAgICB2b2lkIHJlbWVtYmVyQ2hhcmFjdGVyKFVDaGFyKTsKKyAgICAgICAg
Ym9vbCBsYXN0Q2hhcmFjdGVyc01hdGNoKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBjb3VudCkgY29u
c3Q7CisgICAgICAgIAorICAgICAgICBib29sIG1faW5Qcm9ncmVzczsKKyAgICAgICAgU2VnbWVu
dGVkU3RyaW5nIG1fc291cmNlOworICAgICAgICAKKyAgICAgICAgZW51bSBTdGF0ZSB7CisgICAg
ICAgICAgICBEYXRhLAorICAgICAgICAgICAgRW50aXR5RGF0YSwKKyAgICAgICAgICAgIFRhZ09w
ZW4sCisgICAgICAgICAgICBDbG9zZVRhZ09wZW4sCisgICAgICAgICAgICBUYWdOYW1lLAorICAg
ICAgICAgICAgQmVmb3JlQXR0cmlidXRlTmFtZSwKKyAgICAgICAgICAgIEF0dHJpYnV0ZU5hbWUs
CisgICAgICAgICAgICBBZnRlckF0dHJpYnV0ZU5hbWUsCisgICAgICAgICAgICBCZWZvcmVBdHRy
aWJ1dGVWYWx1ZSwKKyAgICAgICAgICAgIEF0dHJpYnV0ZVZhbHVlRG91YmxlUXVvdGVkLAorICAg
ICAgICAgICAgQXR0cmlidXRlVmFsdWVTaW5nbGVRdW90ZWQsCisgICAgICAgICAgICBBdHRyaWJ1
dGVWYWx1ZVVucXVvdGVkLAorICAgICAgICAgICAgRW50aXR5SW5BdHRyaWJ1dGVWYWx1ZSwKKyAg
ICAgICAgICAgIEJvZ3VzQ29tbWVudCwKKyAgICAgICAgICAgIE1hcmt1cERlY2xhcmF0aW9uT3Bl
biwKKyAgICAgICAgICAgIENvbW1lbnRTdGFydCwKKyAgICAgICAgICAgIENvbW1lbnRTdGFydERh
c2gsCisgICAgICAgICAgICBDb21tZW50LAorICAgICAgICAgICAgQ29tbWVudEVuZERhc2gsCisg
ICAgICAgICAgICBDb21tZW50RW5kCisgICAgICAgIH07CisgICAgICAgIFN0YXRlIG1fc3RhdGU7
CisgICAgICAgIGJvb2wgbV9lc2NhcGU7CisgICAgICAgIGVudW0gQ29udGVudE1vZGVsIHsKKyAg
ICAgICAgICAgIFBDREFUQSwKKyAgICAgICAgICAgIFJDREFUQSwKKyAgICAgICAgICAgIENEQVRB
LAorICAgICAgICAgICAgUExBSU5URVhUCisgICAgICAgIH07CisgICAgICAgIENvbnRlbnRNb2Rl
bCBtX2NvbnRlbnRNb2RlbDsKKyAgICAgICAgdW5zaWduZWQgbV9jb21tZW50UG9zOworICAgICAg
ICBTdGF0ZSBtX3N0YXRlQmVmb3JlRW50aXR5SW5BdHRyaWJ1dGVWYWx1ZTsKKyAgICAgICAgCisg
ICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsYXN0Q2hhcmFjdGVyc0J1ZmZlclNpemUgPSA4
OworICAgICAgICBVQ2hhciBtX2xhc3RDaGFyYWN0ZXJzW2xhc3RDaGFyYWN0ZXJzQnVmZmVyU2l6
ZV07CisgICAgICAgIHVuc2lnbmVkIG1fbGFzdENoYXJhY3RlckluZGV4OworICAgICAgICAKKyAg
ICAgICAgYm9vbCBtX2Nsb3NlVGFnOworICAgICAgICBWZWN0b3I8VUNoYXIsIDMyPiBtX3RhZ05h
bWU7CisgICAgICAgIFZlY3RvcjxVQ2hhciwgMzI+IG1fYXR0cmlidXRlTmFtZTsKKyAgICAgICAg
VmVjdG9yPFVDaGFyPiBtX2F0dHJpYnV0ZVZhbHVlOworICAgICAgICBBdG9taWNTdHJpbmcgbV9s
YXN0U3RhcnRUYWc7CisgICAgICAgIAorICAgICAgICBTdHJpbmcgbV91cmxUb0xvYWQ7CisgICAg
ICAgIGJvb2wgbV9saW5rSXNTdHlsZVNoZWV0OworICAgICAgICAKKyAgICAgICAgZW51bSBDU1NT
dGF0ZSB7CisgICAgICAgICAgICBDU1NJbml0aWFsLAorICAgICAgICAgICAgQ1NTTWF5YmVDb21t
ZW50LAorICAgICAgICAgICAgQ1NTQ29tbWVudCwKKyAgICAgICAgICAgIENTU01heWJlQ29tbWVu
dEVuZCwKKyAgICAgICAgICAgIENTU1J1bGVTdGFydCwKKyAgICAgICAgICAgIENTU1J1bGUsCisg
ICAgICAgICAgICBDU1NBZnRlclJ1bGUsCisgICAgICAgICAgICBDU1NSdWxlVmFsdWUsCisgICAg
ICAgICAgICBDU1NBZmVyUnVsZVZhbHVlCisgICAgICAgIH07CisgICAgICAgIENTU1N0YXRlIG1f
Y3NzU3RhdGU7CisgICAgICAgIFZlY3RvcjxVQ2hhciwgMTY+IG1fY3NzUnVsZTsKKyAgICAgICAg
VmVjdG9yPFVDaGFyPiBtX2Nzc1J1bGVWYWx1ZTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBt
X3RpbWVVc2VkOworICAgICAgICAKKyAgICAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAg
fTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDMw
ODE0KQorKysgV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxQcmVsb2Fk
VG9rZW5pemVyLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNl
ci5oIgogI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50LmgiCkBAIC0xNjEsNiArMTYyLDcgQEAg
SFRNTFRva2VuaXplcjo6SFRNTFRva2VuaXplcihIVE1MRG9jdW1lbgogICAgICwgcGFyc2VyKG5l
dyBIVE1MUGFyc2VyKGRvYywgcmVwb3J0RXJyb3JzKSkKICAgICAsIGluV3JpdGUoZmFsc2UpCiAg
ICAgLCBtX2ZyYWdtZW50KGZhbHNlKQorICAgICwgbV9wcmVsb2FkVG9rZW5pemVyKDApCiB7CiAg
ICAgYmVnaW4oKTsKIH0KQEAgLTQ5OSw2ICs1MDEsMTUgQEAgSFRNTFRva2VuaXplcjo6U3RhdGUg
SFRNTFRva2VuaXplcjo6c2NyaQogICAgICAgICAgICAgd3JpdGUocHJlcGVuZGluZ1NyYywgZmFs
c2UpOwogICAgICAgICAgICAgc3RhdGUgPSBtX3N0YXRlOwogICAgICAgICB9CisgICAgfSAKKyAg
ICAKKyAgICBpZiAoIXBlbmRpbmdTY3JpcHRzLmlzRW1wdHkoKSAmJiAhbV9leGVjdXRpbmdTY3Jp
cHQpIHsKKyAgICAgICAgaWYgKCFtX3ByZWxvYWRUb2tlbml6ZXIpCisgICAgICAgICAgICBtX3By
ZWxvYWRUb2tlbml6ZXIuc2V0KG5ldyBIVE1MUHJlbG9hZFRva2VuaXplcihtX2RvYykpOworICAg
ICAgICBpZiAoIW1fcHJlbG9hZFRva2VuaXplci0+aW5Qcm9ncmVzcygpKSB7CisgICAgICAgICAg
ICBtX3ByZWxvYWRUb2tlbml6ZXItPmJlZ2luKCk7CisgICAgICAgICAgICBtX3ByZWxvYWRUb2tl
bml6ZXItPndyaXRlKHBlbmRpbmdTcmMpOworICAgICAgICB9CiAgICAgfQogCiAgICAgY3VycmVu
dFByZXBlbmRpbmdTcmMgPSBzYXZlZFByZXBlbmRpbmdTcmM7CkBAIC01NTIsNiArNTYzLDE0IEBA
IEhUTUxUb2tlbml6ZXI6OlN0YXRlIEhUTUxUb2tlbml6ZXI6OnNjcmkKICAgICAgICAgICAgICAg
ICBjdXJyZW50UHJlcGVuZGluZ1NyYy0+YXBwZW5kKHByZXBlbmRpbmdTcmMpOwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIHBlbmRpbmdTcmMucHJlcGVuZChwcmVwZW5kaW5nU3Jj
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2UgYXJlIHN0dWNrIHdhaXRpbmcgZm9y
IGFub3RoZXIgc2NyaXB0LiBMZXRzIGNoZWNrIHRoZSBzb3VyY2UgdGhhdAorICAgICAgICAgICAg
Ly8gd2FzIGp1c3QgZG9jdW1lbnQud3JpdGUoKW4gZm9yIGFueXRoaW5nIHRvIGxvYWQuCisgICAg
ICAgICAgICAvLyBwcmludGYoIkRPQ1VNRU5ULldSSVRFIFBSRUxPQURcbiIpOworICAgICAgICAg
ICAgSFRNTFByZWxvYWRUb2tlbml6ZXIgZG9jdW1lbnRXcml0ZVByZWxvYWRUb2tlbml6ZXIobV9k
b2MpOworICAgICAgICAgICAgZG9jdW1lbnRXcml0ZVByZWxvYWRUb2tlbml6ZXIuYmVnaW4oKTsK
KyAgICAgICAgICAgIGRvY3VtZW50V3JpdGVQcmVsb2FkVG9rZW5pemVyLndyaXRlKHByZXBlbmRp
bmdTcmMpOworICAgICAgICAgICAgZG9jdW1lbnRXcml0ZVByZWxvYWRUb2tlbml6ZXIuZW5kKCk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX3N0YXRlID0gc3RhdGU7CiAgICAgICAg
ICAgICB3cml0ZShwcmVwZW5kaW5nU3JjLCBmYWxzZSk7CkBAIC0xNTg1LDEwICsxNjA0LDE2IEBA
IGJvb2wgSFRNTFRva2VuaXplcjo6d3JpdGUoY29uc3QgU2VnbWVudGUKICAgICAgICAgLy8gZG9u
J3QgcGFyc2U7IHdlIHdpbGwgZG8gdGhpcyBsYXRlcgogICAgICAgICBpZiAoY3VycmVudFByZXBl
bmRpbmdTcmMpCiAgICAgICAgICAgICBjdXJyZW50UHJlcGVuZGluZ1NyYy0+YXBwZW5kKHNvdXJj
ZSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBwZW5kaW5nU3Jj
LmFwcGVuZChzb3VyY2UpOworICAgICAgICAgICAgaWYgKG1fcHJlbG9hZFRva2VuaXplciAmJiBt
X3ByZWxvYWRUb2tlbml6ZXItPmluUHJvZ3Jlc3MoKSAmJiBhcHBlbmREYXRhKQorICAgICAgICAg
ICAgICAgIG1fcHJlbG9hZFRva2VuaXplci0+d3JpdGUoc291cmNlKTsKKyAgICAgICAgfQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIAorICAgIGlmIChtX3ByZWxvYWRUb2tlbml6
ZXIgJiYgbV9wcmVsb2FkVG9rZW5pemVyLT5pblByb2dyZXNzKCkgJiYgYXBwZW5kRGF0YSkKKyAg
ICAgICAgbV9wcmVsb2FkVG9rZW5pemVyLT5lbmQoKTsKIAogICAgIGlmICghc3JjLmlzRW1wdHko
KSkKICAgICAgICAgc3JjLmFwcGVuZChzb3VyY2UpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxU
b2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5oCShy
ZXZpc2lvbiAzMDgxNCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDYgKzQyLDcgQEAgY2xhc3MgSFRNTERvY3VtZW50OwogY2xhc3MgSFRNTFZp
ZXdTb3VyY2VEb2N1bWVudDsKIGNsYXNzIEZyYW1lVmlldzsKIGNsYXNzIEhUTUxQYXJzZXI7Citj
bGFzcyBIVE1MUHJlbG9hZFRva2VuaXplcjsKIGNsYXNzIE5vZGU7CiAKIC8qKgpAQCAtNDAyLDYg
KzQwMyw4IEBAIHByaXZhdGU6CiAgICAgSFRNTFBhcnNlciogcGFyc2VyOwogICAgIGJvb2wgaW5X
cml0ZTsKICAgICBib29sIG1fZnJhZ21lbnQ7CisgICAgCisgICAgT3duUHRyPEhUTUxQcmVsb2Fk
VG9rZW5pemVyPiBtX3ByZWxvYWRUb2tlbml6ZXI7CiB9OwogCiB2b2lkIHBhcnNlSFRNTERvY3Vt
ZW50RnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnRGcmFnbWVudCopOwpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hl
LmNwcAkocmV2aXNpb24gMzA4MTQpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIENhY2hlOjpwcnVuZURlYWRSZXNvdXJj
ZXMoKQogICAgICAgICAvLyBGaXJzdCBmbHVzaCBhbGwgdGhlIGRlY29kZWQgZGF0YSBpbiB0aGlz
IHF1ZXVlLgogICAgICAgICB3aGlsZSAoY3VycmVudCkgewogICAgICAgICAgICAgQ2FjaGVkUmVz
b3VyY2UqIHByZXYgPSBjdXJyZW50LT5tX3ByZXZJbkFsbFJlc291cmNlc0xpc3Q7Ci0gICAgICAg
ICAgICBpZiAoIWN1cnJlbnQtPnJlZmVyZW5jZWQoKSAmJiBjdXJyZW50LT5pc0xvYWRlZCgpICYm
IGN1cnJlbnQtPmRlY29kZWRTaXplKCkpIHsKKyAgICAgICAgICAgIGlmICghY3VycmVudC0+cmVm
ZXJlbmNlZCgpICYmICFjdXJyZW50LT5pc1ByZWxvYWRlZCgpICYmIGN1cnJlbnQtPmlzTG9hZGVk
KCkgJiYgY3VycmVudC0+ZGVjb2RlZFNpemUoKSkgewogICAgICAgICAgICAgICAgIC8vIERlc3Ry
b3kgb3VyIGRlY29kZWQgZGF0YS4gVGhpcyB3aWxsIHJlbW92ZSB1cyBmcm9tIAogICAgICAgICAg
ICAgICAgIC8vIG1fbGl2ZURlY29kZWRSZXNvdXJjZXMsIGFuZCBwb3NzaWJseSBtb3ZlIHVzIHRv
IGEgZGlmZmVybnQgCiAgICAgICAgICAgICAgICAgLy8gTFJVIGxpc3QgaW4gbV9hbGxSZXNvdXJj
ZXMuCkBAIC0yNDUsNyArMjQ1LDcgQEAgdm9pZCBDYWNoZTo6cHJ1bmVEZWFkUmVzb3VyY2VzKCkK
ICAgICAgICAgY3VycmVudCA9IG1fYWxsUmVzb3VyY2VzW2ldLm1fdGFpbDsKICAgICAgICAgd2hp
bGUgKGN1cnJlbnQpIHsKICAgICAgICAgICAgIENhY2hlZFJlc291cmNlKiBwcmV2ID0gY3VycmVu
dC0+bV9wcmV2SW5BbGxSZXNvdXJjZXNMaXN0OwotICAgICAgICAgICAgaWYgKCFjdXJyZW50LT5y
ZWZlcmVuY2VkKCkpIHsKKyAgICAgICAgICAgIGlmICghY3VycmVudC0+cmVmZXJlbmNlZCgpICYm
ICFjdXJyZW50LT5pc1ByZWxvYWRlZCgpKSB7CiAgICAgICAgICAgICAgICAgcmVtb3ZlKGN1cnJl
bnQpOwogCiAgICAgICAgICAgICAgICAgaWYgKG1fZGVhZFNpemUgPD0gdGFyZ2V0U2l6ZSkKSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDMwODE0KQorKysgV2ViQ29y
ZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw5
IEBAIENhY2hlZFJlc291cmNlOjpDYWNoZWRSZXNvdXJjZShjb25zdCBTdHIKICAgICAsIG1fbGFz
dERlY29kZWRBY2Nlc3NUaW1lKDApCiAgICAgLCBtX3NlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3Mo
c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcykKICAgICAsIG1faW5DYWNoZShmb3JDYWNoZSkKKyAg
ICAsIG1fcHJlbG9hZENvdW50KDApCisgICAgLCBtX3ByZWxvYWRSZXN1bHQoUHJlbG9hZE5vdFJl
ZmVyZW5jZWQpCisgICAgLCBtX3JlcXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIoZmFsc2UpCiAg
ICAgLCBtX2RvY0xvYWRlcigwKQogewogICAgIG1fdHlwZSA9IHR5cGU7CkBAIC0xMDEsNiArMTA0
LDE0IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2U6OnNldFJlcXVlc3QoUmVxdWVzdCoKIAogdm9pZCBD
YWNoZWRSZXNvdXJjZTo6cmVmKENhY2hlZFJlc291cmNlQ2xpZW50ICpjKQogeworICAgIGlmICht
X3ByZWxvYWRSZXN1bHQgPT0gUHJlbG9hZE5vdFJlZmVyZW5jZWQpIHsKKyAgICAgICAgaWYgKGlz
TG9hZGVkKCkpCisgICAgICAgICAgICBtX3ByZWxvYWRSZXN1bHQgPSBQcmVsb2FkUmVmZXJlbmNl
ZFdoaWxlQ29tcGxldGU7CisgICAgICAgIGVsc2UgaWYgKG1fcmVxdWVzdGVkRnJvbU5ldHdvcmtp
bmdMYXllcikKKyAgICAgICAgICAgIG1fcHJlbG9hZFJlc3VsdCA9IFByZWxvYWRSZWZlcmVuY2Vk
V2hpbGVMb2FkaW5nOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3ByZWxvYWRSZXN1bHQg
PSBQcmVsb2FkUmVmZXJlbmNlZDsKKyAgICB9CiAgICAgaWYgKCFyZWZlcmVuY2VkKCkgJiYgaW5D
YWNoZSgpKQogICAgICAgICBjYWNoZSgpLT5hZGRUb0xpdmVSZXNvdXJjZXNTaXplKHRoaXMpOwog
ICAgIG1fY2xpZW50cy5hZGQoYyk7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHJldmlz
aW9uIDMwODE0KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNzksNiArNzksMTUgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZWYoQ2Fj
aGVkUmVzb3VyY2VDbGllbnQqKTsKICAgICB2b2lkIGRlcmVmKENhY2hlZFJlc291cmNlQ2xpZW50
Kik7CiAgICAgYm9vbCByZWZlcmVuY2VkKCkgY29uc3QgeyByZXR1cm4gIW1fY2xpZW50cy5pc0Vt
cHR5KCk7IH0KKyAgICBlbnVtIFByZWxvYWRSZXN1bHQgeworICAgICAgICBQcmVsb2FkTm90UmVm
ZXJlbmNlZCwKKyAgICAgICAgUHJlbG9hZFJlZmVyZW5jZWQsCisgICAgICAgIFByZWxvYWRSZWZl
cmVuY2VkV2hpbGVMb2FkaW5nLAorICAgICAgICBQcmVsb2FkUmVmZXJlbmNlZFdoaWxlQ29tcGxl
dGUKKyAgICB9OworICAgIFByZWxvYWRSZXN1bHQgcHJlbG9hZFJlc3VsdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJlbG9hZFJlc3VsdDsgfQorICAgIHZvaWQgc2V0UmVxdWVzdGVkRnJvbU5ldHdvcmtp
bmdMYXllcigpIHsgbV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyID0gdHJ1ZTsgfQorICAg
ICAgICAKICAgICB2aXJ0dWFsIHZvaWQgYWxsUmVmZXJlbmNlc1JlbW92ZWQoKSB7fTsKIAogICAg
IHVuc2lnbmVkIGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRzLnNpemUoKTsgfQpAQCAt
MTE3LDcgKzEyNiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJlc3BvbnNlKGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKSB7IG1fcmVzcG9uc2UgPSByZXNwb25zZTsgfQogICAgIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25z
ZTsgfQogICAgIAotICAgIGJvb2wgY2FuRGVsZXRlKCkgY29uc3QgeyByZXR1cm4gIXJlZmVyZW5j
ZWQoKSAmJiAhbV9yZXF1ZXN0OyB9CisgICAgYm9vbCBjYW5EZWxldGUoKSBjb25zdCB7IHJldHVy
biAhcmVmZXJlbmNlZCgpICYmICFtX3JlcXVlc3QgJiYgIW1fcHJlbG9hZENvdW50OyB9CiAKICAg
ICBib29sIGlzRXhwaXJlZCgpIGNvbnN0OwogCkBAIC0xMzYsNiArMTQ1LDEwIEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgc2V0RG9jTG9hZGVyKERvY0xvYWRlciogZG9jTG9hZGVyKSB7IG1fZG9jTG9h
ZGVyID0gZG9jTG9hZGVyOyB9CiAgICAgCisgICAgYm9vbCBpc1ByZWxvYWRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fcHJlbG9hZENvdW50OyB9CisgICAgdm9pZCBpbmNyZWFzZVByZWxvYWRDb3VudCgp
IHsgKyttX3ByZWxvYWRDb3VudDsgfQorICAgIHZvaWQgZGVjcmVhc2VQcmVsb2FkQ291bnQoKSB7
IEFTU0VSVChtX3ByZWxvYWRDb3VudCk7IC0tbV9wcmVsb2FkQ291bnQ7IH0KKyAgICAKIHByb3Rl
Y3RlZDoKICAgICB2b2lkIHNldEVuY29kZWRTaXplKHVuc2lnbmVkKTsKICAgICB2b2lkIHNldERl
Y29kZWRTaXplKHVuc2lnbmVkKTsKQEAgLTE3MSw2ICsxODQsOSBAQCBwcm90ZWN0ZWQ6CiAgICAg
Ym9vbCBtX2RlbGV0ZWQ7CiAgICAgdW5zaWduZWQgbV9scnVJbmRleDsKICNlbmRpZgorICAgIHVu
c2lnbmVkIG1fcHJlbG9hZENvdW50OworICAgIFByZWxvYWRSZXN1bHQgbV9wcmVsb2FkUmVzdWx0
OworICAgIGJvb2wgbV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyOwogCiBwcml2YXRlOgog
ICAgIENhY2hlZFJlc291cmNlKiBtX25leHRJbkFsbFJlc291cmNlc0xpc3Q7CkluZGV4OiBXZWJD
b3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Rv
Y0xvYWRlci5jcHAJKHJldmlzaW9uIDMwODE0KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTIgQEAKICNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgogI2luY2x1ZGUgImxvYWRlci5oIgogCisjZGVmaW5lIFBSRUxPQURfREVCVUcgMAor
CisjaWYgUFJFTE9BRF9ERUJVRworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNlbmRpZgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIERvY0xvYWRlcjo6RG9jTG9hZGVyKEZyYW1lICpmcmFtZSwgRG9j
dW1lbnQqIGRvYykKQEAgLTU0LDYgKzYwLDcgQEAgRG9jTG9hZGVyOjpEb2NMb2FkZXIoRnJhbWUg
KmZyYW1lLCBEb2N1bQogCiBEb2NMb2FkZXI6On5Eb2NMb2FkZXIoKQogeworICAgIGNsZWFyUHJl
bG9hZHMoKTsKICAgICBIYXNoTWFwPFN0cmluZywgQ2FjaGVkUmVzb3VyY2UqPjo6aXRlcmF0b3Ig
ZW5kID0gbV9kb2NSZXNvdXJjZXMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgQ2Fj
aGVkUmVzb3VyY2UqPjo6aXRlcmF0b3IgaXQgPSBtX2RvY1Jlc291cmNlcy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCiAgICAgICAgIGl0LT5zZWNvbmQtPnNldERvY0xvYWRlcigwKTsKQEAgLTcx
LDE3ICs3OCwxOCBAQCB2b2lkIERvY0xvYWRlcjo6Y2hlY2tGb3JSZWxvYWQoY29uc3QgS1VSCiAg
ICAgaWYgKG1fY2FjaGVQb2xpY3kgPT0gQ2FjaGVQb2xpY3lWZXJpZnkpIHsKICAgICAgICBpZiAo
IW1fcmVsb2FkZWRVUkxzLmNvbnRhaW5zKGZ1bGxVUkwuc3RyaW5nKCkpKSB7CiAgICAgICAgICAg
Q2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5nID0gY2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwoZnVsbFVS
TC5zdHJpbmcoKSk7Ci0gICAgICAgICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nLT5pc0V4cGly
ZWQoKSkgeworICAgICAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZy0+aXNFeHBpcmVkKCkg
JiYgIWV4aXN0aW5nLT5pc1ByZWxvYWRlZCgpKSB7CiAgICAgICAgICAgICAgY2FjaGUoKS0+cmVt
b3ZlKGV4aXN0aW5nKTsKICAgICAgICAgICAgICBtX3JlbG9hZGVkVVJMcy5hZGQoZnVsbFVSTC5z
dHJpbmcoKSk7CiAgICAgICAgICAgfQogICAgICAgIH0KICAgICB9IGVsc2UgaWYgKChtX2NhY2hl
UG9saWN5ID09IENhY2hlUG9saWN5UmVsb2FkKSB8fCAobV9jYWNoZVBvbGljeSA9PSBDYWNoZVBv
bGljeVJlZnJlc2gpKSB7CiAgICAgICAgaWYgKCFtX3JlbG9hZGVkVVJMcy5jb250YWlucyhmdWxs
VVJMLnN0cmluZygpKSkgewotICAgICAgICAgIENhY2hlZFJlc291cmNlKiBleGlzdGluZyA9IGNh
Y2hlKCktPnJlc291cmNlRm9yVVJMKGZ1bGxVUkwuc3RyaW5nKCkpOwotICAgICAgICAgIGlmIChl
eGlzdGluZykKLSAgICAgICAgICAgICBjYWNoZSgpLT5yZW1vdmUoZXhpc3RpbmcpOwotICAgICAg
ICAgIG1fcmVsb2FkZWRVUkxzLmFkZChmdWxsVVJMLnN0cmluZygpKTsKKyAgICAgICAgICAgQ2Fj
aGVkUmVzb3VyY2UqIGV4aXN0aW5nID0gY2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwoZnVsbFVSTC5z
dHJpbmcoKSk7CisgICAgICAgICAgIGlmIChleGlzdGluZyAmJiAhZXhpc3RpbmctPmlzUHJlbG9h
ZGVkKCkpIHsKKyAgICAgICAgICAgICAgIGNhY2hlKCktPnJlbW92ZShleGlzdGluZyk7CisgICAg
ICAgICAgICAgICBtX3JlbG9hZGVkVVJMcy5hZGQoZnVsbFVSTC5zdHJpbmcoKSk7CisgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgfQogfQpAQCAtMjQzLDUgKzI1MSw4MiBAQCBpbnQgRG9jTG9h
ZGVyOjpyZXF1ZXN0Q291bnQoKQogICAgICAgICAgcmV0dXJuIG1fcmVxdWVzdENvdW50ICsgMTsK
ICAgICByZXR1cm4gbV9yZXF1ZXN0Q291bnQ7CiB9CisgICAgCit2b2lkIERvY0xvYWRlcjo6cmVn
aXN0ZXJQcmVsb2FkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKK3sKKyAgICBpZiAoIXJlc291
cmNlIHx8IHJlc291cmNlLT5pc0xvYWRlZCgpIHx8IG1fcHJlbG9hZHMuY29udGFpbnMocmVzb3Vy
Y2UpKQorICAgICAgICByZXR1cm47CisgICAgcmVzb3VyY2UtPmluY3JlYXNlUHJlbG9hZENvdW50
KCk7CisgICAgbV9wcmVsb2Fkcy5hZGQocmVzb3VyY2UpOworI2lmIFBSRUxPQURfREVCVUcKKyAg
ICBwcmludGYoIlBSRUxPQURJTkcgJXNcbiIsICByZXNvdXJjZS0+dXJsKCkubGF0aW4xKCkuZGF0
YSgpKTsKKyNlbmRpZgorfQorCit2b2lkIERvY0xvYWRlcjo6Y2xlYXJQcmVsb2FkcygpCit7Cisj
aWYgUFJFTE9BRF9ERUJVRworICAgIHByaW50UHJlbG9hZFN0YXRzKCk7CisjZW5kaWYKKyAgICBM
aXN0SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+OjppdGVyYXRvciBlbmQgPSBtX3ByZWxvYWRzLmVu
ZCgpOworICAgIGZvciAoTGlzdEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPjo6aXRlcmF0b3IgaXQg
PSBtX3ByZWxvYWRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBDYWNoZWRS
ZXNvdXJjZSogcmVzID0gKml0OworICAgICAgICBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPT0g
Q2FjaGVkUmVzb3VyY2U6OlByZWxvYWROb3RSZWZlcmVuY2VkKQorICAgICAgICAgICAgY2FjaGUo
KS0+cmVtb3ZlKHJlcyk7CisgICAgICAgIHJlcy0+ZGVjcmVhc2VQcmVsb2FkQ291bnQoKTsKKyAg
ICB9CisgICAgbV9wcmVsb2Fkcy5jbGVhcigpOworfQogCisjaWYgUFJFTE9BRF9ERUJVRwordm9p
ZCBEb2NMb2FkZXI6OnByaW50UHJlbG9hZFN0YXRzKCkKK3sKKyAgICB1bnNpZ25lZCBzY3JpcHRz
ID0gMDsKKyAgICB1bnNpZ25lZCBzY3JpcHRNaXNzZXMgPSAwOworICAgIHVuc2lnbmVkIHN0eWxl
c2hlZXRzID0gMDsKKyAgICB1bnNpZ25lZCBzdHlsZXNoZWV0TWlzc2VzID0gMDsKKyAgICB1bnNp
Z25lZCBpbWFnZXMgPSAwOworICAgIHVuc2lnbmVkIGltYWdlTWlzc2VzID0gMDsKKyAgICBMaXN0
SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+OjppdGVyYXRvciBlbmQgPSBtX3ByZWxvYWRzLmVuZCgp
OworICAgIGZvciAoTGlzdEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPjo6aXRlcmF0b3IgaXQgPSBt
X3ByZWxvYWRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBDYWNoZWRSZXNv
dXJjZSogcmVzID0gKml0OworICAgICAgICBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2Fj
aGVkUmVzb3VyY2U6OlByZWxvYWROb3RSZWZlcmVuY2VkKSB7CisgICAgICAgICAgICBwcmludGYo
IlVOUkVGRVJFTkNFRCBQUkVMT0FEICVzXG4iLCByZXMtPnVybCgpLmxhdGluMSgpLmRhdGEoKSk7
CisgICAgICAgICAgICBjYWNoZSgpLT5yZW1vdmUocmVzKTsKKyAgICAgICAgfSBlbHNlIGlmIChy
ZXMtPnByZWxvYWRSZXN1bHQoKSA9PSBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZFJlZmVyZW5jZWRX
aGlsZUNvbXBsZXRlKSB7CisgICAgICAgICAgICBwcmludGYoIkhJVCBDT01QTEVURSBQUkVMT0FE
ICVzXG4iLCByZXMtPnVybCgpLmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgIH0gZWxzZSBpZiAo
cmVzLT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlByZWxvYWRSZWZlcmVuY2Vk
V2hpbGVMb2FkaW5nKSB7CisgICAgICAgICAgICBwcmludGYoIkhJVCBMT0FESU5HIFBSRUxPQUQg
JXNcbiIsIHJlcy0+dXJsKCkubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKHJlcy0+dHlwZSgpID09IENhY2hlZFJlc291cmNlOjpTY3JpcHQpIHsKKyAg
ICAgICAgICAgIHNjcmlwdHMrKzsKKyAgICAgICAgICAgIGlmIChyZXMtPnByZWxvYWRSZXN1bHQo
KSA8IENhY2hlZFJlc291cmNlOjpQcmVsb2FkUmVmZXJlbmNlZFdoaWxlTG9hZGluZykKKyAgICAg
ICAgICAgICAgICBzY3JpcHRNaXNzZXMrKzsKKyAgICAgICAgfSBlbHNlIGlmIChyZXMtPnR5cGUo
KSA9PSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldCkgeworICAgICAgICAgICAgc3R5bGVz
aGVldHMrKzsKKyAgICAgICAgICAgIGlmIChyZXMtPnByZWxvYWRSZXN1bHQoKSA8IENhY2hlZFJl
c291cmNlOjpQcmVsb2FkUmVmZXJlbmNlZFdoaWxlTG9hZGluZykKKyAgICAgICAgICAgICAgICBz
dHlsZXNoZWV0TWlzc2VzKys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbWFnZXMr
KzsKKyAgICAgICAgICAgIGlmIChyZXMtPnByZWxvYWRSZXN1bHQoKSA8IENhY2hlZFJlc291cmNl
OjpQcmVsb2FkUmVmZXJlbmNlZFdoaWxlTG9hZGluZykKKyAgICAgICAgICAgICAgICBpbWFnZU1p
c3NlcysrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVzLT5lcnJvck9jY3Vy
cmVkKCkpCisgICAgICAgICAgICBjYWNoZSgpLT5yZW1vdmUocmVzKTsKKyAgICAgICAgCisgICAg
ICAgIHJlcy0+ZGVjcmVhc2VQcmVsb2FkQ291bnQoKTsKKyAgICB9CisgICAgbV9wcmVsb2Fkcy5j
bGVhcigpOworICAgIAorICAgIGlmIChzY3JpcHRzKQorICAgICAgICBwcmludGYoIlNDUklQVFM6
ICVkICglZCBoaXRzLCBoaXQgcmF0ZSAlZCUlKVxuIiwgc2NyaXB0cywgc2NyaXB0cyAtIHNjcmlw
dE1pc3NlcywgKHNjcmlwdHMgLSBzY3JpcHRNaXNzZXMpICogMTAwIC8gc2NyaXB0cyk7CisgICAg
aWYgKHN0eWxlc2hlZXRzKQorICAgICAgICBwcmludGYoIlNUWUxFU0hFRVRTOiAlZCAoJWQgaGl0
cywgaGl0IHJhdGUgJWQlJSlcbiIsIHN0eWxlc2hlZXRzLCBzdHlsZXNoZWV0cyAtIHN0eWxlc2hl
ZXRNaXNzZXMsIChzdHlsZXNoZWV0cyAtIHN0eWxlc2hlZXRNaXNzZXMpICogMTAwIC8gc3R5bGVz
aGVldHMpOworICAgIGlmIChpbWFnZXMpCisgICAgICAgIHByaW50ZigiSU1BR0VTOiAgJWQgKCVk
IGhpdHMsIGhpdCByYXRlICVkJSUpXG4iLCBpbWFnZXMsIGltYWdlcyAtIGltYWdlTWlzc2VzLCAo
aW1hZ2VzIC0gaW1hZ2VNaXNzZXMpICogMTAwIC8gaW1hZ2VzKTsKK30KKyNlbmRpZgorICAgIAog
fQpJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvRG9jTG9hZGVyLmgJKHJldmlzaW9uIDMwODE0KQorKysgV2ViQ29yZS9sb2FkZXIv
RG9jTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJT
dHJpbmdIYXNoLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTkyLDYgKzkzLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGluY3JlbWVudFJlcXVl
c3RDb3VudCgpOwogICAgIHZvaWQgZGVjcmVtZW50UmVxdWVzdENvdW50KCk7CiAgICAgaW50IHJl
cXVlc3RDb3VudCgpOworICAgIAorICAgIHZvaWQgY2xlYXJQcmVsb2FkcygpOworICAgIHZvaWQg
cmVnaXN0ZXJQcmVsb2FkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSk7CisgICAgdm9pZCBwcmlu
dFByZWxvYWRTdGF0cygpOworICAgIAogcHJpdmF0ZToKICAgICBDYWNoZWRSZXNvdXJjZSogcmVx
dWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpUeXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29u
c3QgU3RyaW5nKiBjaGFyc2V0ID0gMCwgYm9vbCBza2lwQ2FuTG9hZENoZWNrID0gZmFsc2UsIGJv
b2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyA9IHRydWUpOwogCkBAIC0xMDcsNiArMTEzLDgg
QEAgcHJpdmF0ZToKICAgICAKICAgICBpbnQgbV9yZXF1ZXN0Q291bnQ7CiAgICAgCisgICAgTGlz
dEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPiBtX3ByZWxvYWRzOworICAgIAogICAgIC8vMjkgYml0
cyBsZWZ0CiAgICAgYm9vbCBtX2F1dG9Mb2FkSW1hZ2VzIDogMTsKICAgICBib29sIG1fbG9hZElu
UHJvZ3Jlc3MgOiAxOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAkocmV2aXNpb24g
MzA4MTQpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkNhY2hlZFBhZ2UuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkV2ZW50Lmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtNDY2LDEw
ICs0NjcsMTMgQEAgYm9vbCBEb2N1bWVudExvYWRlcjo6aXNMb2FkaW5nSW5BUElTZW5zZQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmICghbV9zdWJyZXNvdXJjZUxvYWRlcnMu
aXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChEb2N1bWVu
dCogZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgaWYgKERvY3VtZW50KiBkb2Mg
PSBtX2ZyYW1lLT5kb2N1bWVudCgpKSB7CisgICAgICAgICAgICBpZiAoZG9jLT5kb2NMb2FkZXIo
KS0+cmVxdWVzdENvdW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICBpZiAoVG9rZW5pemVyKiB0b2sgPSBkb2MtPnRva2VuaXplcigpKQogICAgICAgICAgICAg
ICAgIGlmICh0b2stPnByb2Nlc3NpbmdEYXRhKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBmcmFtZUxvYWRlcigpLT5zdWJm
cmFtZUlzTG9hZGluZygpOwogfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9sb2FkZXIuY3BwCShyZXZpc2lvbiAzMDgxNCkKKysr
IFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYzICszOSwy
MTggQEAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAorI2RlZmluZSBSRVFVRVNUX01BTkFHRU1FTlRfRU5BQkxFRCAxCisjZGVmaW5lIFJFUVVF
U1RfREVCVUcgMAorCisjaWYgUkVRVUVTVF9ERUJVRworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBSRVFVRVNUX01BTkFHRU1FTlRfRU5B
QkxFRAorLy8gTWF0Y2ggdGhlIHBhcmFsbGVsIGNvbm5lY3Rpb24gY291bnQgdXNlZCBieSB0aGUg
bmV0d29ya2luZyBsYXllcgorLy8gRklYTUUgc2hvdWxkIG5vdCBoYXJkY29kZSBzb21ldGhpbmcg
bGlrZSB0aGlzCitjb25zdCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0UGVySG9zdCA9IDQ7
CisvLyBIYXZpbmcgYSBsaW1pdCBtaWdodCBzdGlsbCBoZWxwIGdldHRpbmcgbW9yZSBpbXBvcnRh
bnQgcmVzb3VyY2VzIGZpcnN0Citjb25zdCB1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0Rm9y
Tm9uSFRUUFByb3RvY29scz0gMjA7CisjZWxzZQorY29uc3QgdW5zaWduZWQgbWF4UmVxdWVzdHNJ
bkZsaWdodFBlckhvc3QgPSAxMDAwMDsKK2NvbnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGln
aHRGb3JOb25IVFRQUHJvdG9jb2xzPSAxMDAwMDsKKyNlbmRpZgorICAgIAorICAgIAogTG9hZGVy
OjpMb2FkZXIoKQorICAgIDogbV9ub25IVFRQUHJvdG9jb2xIb3N0KG1heFJlcXVlc3RzSW5GbGln
aHRGb3JOb25IVFRQUHJvdG9jb2xzKQorICAgICwgbV9yZXF1ZXN0VGltZXIodGhpcywgJkxvYWRl
cjo6cmVxdWVzdFRpbWVyRmlyZWQpCiB7Ci0gICAgbV9yZXF1ZXN0c1BlbmRpbmcuc2V0QXV0b0Rl
bGV0ZSh0cnVlKTsKIH0KIAogTG9hZGVyOjp+TG9hZGVyKCkKK3sgICAgCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisgICAgCitMb2FkZXI6OlByaW9yaXR5IExvYWRlcjo6ZGV0ZXJtaW5l
UHJpb3JpdHkoY29uc3QgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKSBjb25zdAogewotICAgIGRl
bGV0ZUFsbFZhbHVlcyhtX3JlcXVlc3RzTG9hZGluZyk7CisjaWYgUkVRVUVTVF9NQU5BR0VNRU5U
X0VOQUJMRUQKKyAgICBzd2l0Y2ggKHJlc291cmNlLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6U2NyaXB0OiAKKyNpZiBFTkFCTEUoWEJMKQorICAgICAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpYQkw6CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBIaWdoOworICAg
ICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgorICAgICAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6CisjaWYgRU5BQkxFKFhTTFQpCisgICAgICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6CisjZW5kaWYKKyAgICAgICAgICAgIHJl
dHVybiBNZWRpdW07CisgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2U6
CisgICAgICAgICAgICByZXR1cm4gTG93OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gTG93OworICAgIH0KKyNl
bHNlCisgICAgcmV0dXJuIEhpZ2g7CisjZW5kaWYKIH0KIAotdm9pZCBMb2FkZXI6OmxvYWQoRG9j
TG9hZGVyKiBkbCwgQ2FjaGVkUmVzb3VyY2UqIG9iamVjdCwgYm9vbCBpbmNyZW1lbnRhbCwgYm9v
bCBza2lwQ2FuTG9hZENoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MpCit2b2lk
IExvYWRlcjo6bG9hZChEb2NMb2FkZXIqIGRsLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGJv
b2wgaW5jcmVtZW50YWwsIGJvb2wgc2tpcENhbkxvYWRDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VM
b2FkQ2FsbGJhY2tzKQogewogICAgIEFTU0VSVChkbCk7Ci0gICAgUmVxdWVzdCogcmVxID0gbmV3
IFJlcXVlc3QoZGwsIG9iamVjdCwgaW5jcmVtZW50YWwsIHNraXBDYW5Mb2FkQ2hlY2ssIHNlbmRS
ZXNvdXJjZUxvYWRDYWxsYmFja3MpOwotICAgIG1fcmVxdWVzdHNQZW5kaW5nLmFwcGVuZChyZXEp
OworICAgIFJlcXVlc3QqIHJlcXVlc3QgPSBuZXcgUmVxdWVzdChkbCwgcmVzb3VyY2UsIGluY3Jl
bWVudGFsLCBza2lwQ2FuTG9hZENoZWNrLCBzZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKTsKKyAg
ICAKKyAgICBLVVJMIHVybChyZXNvdXJjZS0+dXJsKCkpOworICAgIEhvc3QqIGhvc3Q7CisgICAg
Ym9vbCBpc0hUVFAgPSB1cmwucHJvdG9jb2woKSA9PSAiaHR0cCIgfHwgdXJsLnByb3RvY29sKCkg
PT0gImh0dHBzIjsKKyAgICBpZiAoaXNIVFRQKSB7CisgICAgICAgIFN0cmluZyBob3N0TmFtZSA9
IHVybC5ob3N0KCk7CisgICAgICAgIGhvc3QgPSBtX2hvc3RzLmdldChob3N0TmFtZSk7CisgICAg
ICAgIGlmICghaG9zdCkgeworICAgICAgICAgICAgaG9zdCA9IG5ldyBIb3N0KG1heFJlcXVlc3Rz
SW5GbGlnaHRQZXJIb3N0KTsKKyAgICAgICAgICAgIG1faG9zdHMuYWRkKGhvc3ROYW1lLCBob3N0
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSAKKyAgICAgICAgaG9zdCA9ICZtX25vbkhUVFBQcm90
b2NvbEhvc3Q7CisgICAgCisgICAgUHJpb3JpdHkgcHJpb3JpdHkgPSBkZXRlcm1pbmVQcmlvcml0
eShyZXNvdXJjZSk7CisgICAgaG9zdC0+YWRkUmVxdWVzdChyZXF1ZXN0LCBwcmlvcml0eSk7CiAg
ICAgZGwtPmluY3JlbWVudFJlcXVlc3RDb3VudCgpOworCisgICAgaWYgKHByaW9yaXR5ID4gTG93
IHx8ICFpc0hUVFApCisgICAgICAgIC8vIFRyeSB0byByZXF1ZXN0IGltcG9ydGFudCByZXNvdXJj
ZXMgaW1tZWRpYXRlbHkKKyAgICAgICAgaG9zdC0+c2VydmVQZW5kaW5nUmVxdWVzdHMocHJpb3Jp
dHkpOworICAgIGVsc2UKKyAgICAgICAgLy8gSGFuZGxlIGFzeW5jaHJvbm91c2x5IHNvIGVhcmx5
IGxvdyBwcmlvcml0eSByZXF1ZXN0cyBkb24ndCBnZXQgc2NoZWR1bGVkIGJlZm9yZSBsYXRlciBo
aWdoIHByaW9yaXR5IG9uZXMKKyAgICAgICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygp
OworfQorICAgIAordm9pZCBMb2FkZXI6OnNjaGVkdWxlU2VydmVQZW5kaW5nUmVxdWVzdHMoKQor
eworICAgIGlmICghbV9yZXF1ZXN0VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9yZXF1ZXN0
VGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIExvYWRlcjo6cmVxdWVzdFRpbWVyRmly
ZWQoVGltZXI8TG9hZGVyPiopIAorewogICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7CiB9CiAK
LXZvaWQgTG9hZGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpCit2b2lkIExvYWRlcjo6c2VydmVQ
ZW5kaW5nUmVxdWVzdHMoUHJpb3JpdHkgbWluaW11bVByaW9yaXR5KQoreworICAgIG1fcmVxdWVz
dFRpbWVyLnN0b3AoKTsKKyAgICAKKyAgICBtX25vbkhUVFBQcm90b2NvbEhvc3Quc2VydmVQZW5k
aW5nUmVxdWVzdHMobWluaW11bVByaW9yaXR5KTsKKworICAgIEhvc3RNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1faG9zdHMuZW5kKCk7CisgICAgVmVjdG9yPFN0cmluZz4gdG9SZW1vdmU7CisgICAgZm9y
IChIb3N0TWFwOjppdGVyYXRvciBpdCA9IG1faG9zdHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIEhvc3QqIHJlcXVlc3RIb3N0ID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYg
KHJlcXVlc3RIb3N0LT5oYXNSZXF1ZXN0cygpKQorICAgICAgICAgICAgcmVxdWVzdEhvc3QtPnNl
cnZlUGVuZGluZ1JlcXVlc3RzKG1pbmltdW1Qcmlvcml0eSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHRvUmVtb3ZlLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICAgICAgCisgICAgfQor
ICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCB0b1JlbW92ZS5zaXplKCk7ICsrbikgeworICAg
ICAgICBIb3N0TWFwOjppdGVyYXRvciBpdCA9IG1faG9zdHMuZmluZCh0b1JlbW92ZVtuXSk7Cisg
ICAgICAgIGRlbGV0ZSBpdC0+c2Vjb25kOworICAgICAgICBtX2hvc3RzLnJlbW92ZShpdCk7Cisg
ICAgfQorfQorICAgIAordm9pZCBMb2FkZXI6OmNhbmNlbFJlcXVlc3RzKERvY0xvYWRlciogZG9j
TG9hZGVyKQoreworICAgIGlmIChtX25vbkhUVFBQcm90b2NvbEhvc3QuaGFzUmVxdWVzdHMoKSkK
KyAgICAgICAgbV9ub25IVFRQUHJvdG9jb2xIb3N0LmNhbmNlbFJlcXVlc3RzKGRvY0xvYWRlcik7
CisgICAgCisgICAgSG9zdE1hcDo6aXRlcmF0b3IgZW5kID0gbV9ob3N0cy5lbmQoKTsKKyAgICBm
b3IgKEhvc3RNYXA6Oml0ZXJhdG9yIGl0ID0gbV9ob3N0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgSG9zdCogcmVxdWVzdEhvc3QgPSBpdC0+c2Vjb25kOworICAgICAgICBp
ZiAocmVxdWVzdEhvc3QtPmhhc1JlcXVlc3RzKCkpOworICAgICAgICAgICAgcmVxdWVzdEhvc3Qt
PmNhbmNlbFJlcXVlc3RzKGRvY0xvYWRlcik7CisgICAgfQorICAgIHNjaGVkdWxlU2VydmVQZW5k
aW5nUmVxdWVzdHMoKTsKKyAgICAKKyAgICBpZiAoZG9jTG9hZGVyLT5sb2FkSW5Qcm9ncmVzcygp
KQorICAgICAgICBBU1NFUlQoZG9jTG9hZGVyLT5yZXF1ZXN0Q291bnQoKSA9PSAxKTsKKyAgICBl
bHNlCisgICAgICAgIEFTU0VSVChkb2NMb2FkZXItPnJlcXVlc3RDb3VudCgpID09IDApOworfQor
ICAgIAorTG9hZGVyOjpIb3N0OjpIb3N0KHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHQpCisg
ICAgOiBtX21heFJlcXVlc3RzSW5GbGlnaHQobWF4UmVxdWVzdHNJbkZsaWdodCkKK3sKK30KKwor
TG9hZGVyOjpIb3N0Ojp+SG9zdCgpCit7CisgICAgQVNTRVJUKG1fcmVxdWVzdHNMb2FkaW5nLmlz
RW1wdHkoKSk7CisgICAgZm9yICh1bnNpZ25lZCBwID0gMDsgcCA8PSBIaWdoOyBwKyspCisgICAg
ICAgIEFTU0VSVChtX3JlcXVlc3RzUGVuZGluZ1twXS5pc0VtcHR5KCkpOworfQorICAgIAordm9p
ZCBMb2FkZXI6Okhvc3Q6OmFkZFJlcXVlc3QoUmVxdWVzdCogcmVxdWVzdCwgUHJpb3JpdHkgcHJp
b3JpdHkpCit7CisgICAgbV9yZXF1ZXN0c1BlbmRpbmdbcHJpb3JpdHldLmFwcGVuZChyZXF1ZXN0
KTsKK30KKyAgICAKK2Jvb2wgTG9hZGVyOjpIb3N0OjpoYXNSZXF1ZXN0cygpIGNvbnN0CiB7Ci0g
ICAgd2hpbGUgKCFtX3JlcXVlc3RzUGVuZGluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gZ2V0
IHRoZSBmaXJzdCBwZW5kaW5nIHJlcXVlc3QKLSAgICAgICAgUmVxdWVzdCogcmVxID0gbV9yZXF1
ZXN0c1BlbmRpbmcudGFrZSgwKTsKLSAgICAgICAgRG9jTG9hZGVyKiBkbCA9IHJlcS0+ZG9jTG9h
ZGVyKCk7Ci0gICAgICAgIGRsLT5kZWNyZW1lbnRSZXF1ZXN0Q291bnQoKTsKLQotICAgICAgICBS
ZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChyZXEtPmNhY2hlZFJlc291cmNlKCktPnVybCgpKTsKLQot
ICAgICAgICBpZiAoIXJlcS0+Y2FjaGVkUmVzb3VyY2UoKS0+YWNjZXB0KCkuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQQWNjZXB0KHJlcS0+Y2FjaGVkUmVzb3VyY2UoKS0+
YWNjZXB0KCkpOwotCi0gICAgICAgIEtVUkwgciA9IGRsLT5kb2MoKS0+dXJsKCk7Ci0gICAgICAg
IGlmICgoci5wcm90b2NvbElzKCJodHRwIikgfHwgci5wcm90b2NvbElzKCJodHRwcyIpKSAmJiBy
LnBhdGgoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByLnNldFBhdGgoIi8iKTsKLSAgICAgICAg
cmVxdWVzdC5zZXRIVFRQUmVmZXJyZXIoci5zdHJpbmcoKSk7CisgICAgaWYgKCFtX3JlcXVlc3Rz
TG9hZGluZy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGZvciAodW5zaWdu
ZWQgcCA9IDA7IHAgPD0gSGlnaDsgcCsrKSB7CisgICAgICAgIGlmICghbV9yZXF1ZXN0c1BlbmRp
bmdbcF0uaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KIAotICAgICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IGxvYWRl
ciA9IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoZGwtPmRvYygpLT5mcmFtZSgpLAotICAgICAg
ICAgICAgdGhpcywgcmVxdWVzdCwgcmVxLT5zaG91bGRTa2lwQ2FuTG9hZENoZWNrKCksIHJlcS0+
c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygpKTsKK3ZvaWQgTG9hZGVyOjpIb3N0OjpzZXJ2ZVBl
bmRpbmdSZXF1ZXN0cyhMb2FkZXI6OlByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSkKK3sKKyAgICBm
b3IgKGludCBwcmlvcml0eSA9IEhpZ2g7IHByaW9yaXR5ID49IG1pbmltdW1Qcmlvcml0eTsgLS1w
cmlvcml0eSkKKyAgICAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMobV9yZXF1ZXN0c1BlbmRpbmdb
cHJpb3JpdHldKTsKK30KKyAgICAKK3ZvaWQgTG9hZGVyOjpIb3N0OjpzZXJ2ZVBlbmRpbmdSZXF1
ZXN0cyhSZXF1ZXN0UXVldWUmIHJlcXVlc3RzUGVuZGluZykKK3sKKyAgICB3aGlsZSAobV9yZXF1
ZXN0c0xvYWRpbmcuc2l6ZSgpIDwgbV9tYXhSZXF1ZXN0c0luRmxpZ2h0ICYmICFyZXF1ZXN0c1Bl
bmRpbmcuaXNFbXB0eSgpKSB7ICAgICAgICAKKyAgICAgICAgUmVxdWVzdCogcmVxdWVzdCA9IHJl
cXVlc3RzUGVuZGluZy5maXJzdCgpOworICAgICAgICByZXF1ZXN0c1BlbmRpbmcucmVtb3ZlRmly
c3QoKTsKIAorICAgICAgICBEb2NMb2FkZXIqIGRvY0xvYWRlciA9IHJlcXVlc3QtPmRvY0xvYWRl
cigpOworICAgICAgICAKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlc291cmNlUmVxdWVzdChy
ZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpLT51cmwoKSk7CisgICAgICAgIAorICAgICAgICBpZiAo
IXJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCktPmFjY2VwdCgpLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIHJlc291cmNlUmVxdWVzdC5zZXRIVFRQQWNjZXB0KHJlcXVlc3QtPmNhY2hlZFJlc291cmNl
KCktPmFjY2VwdCgpKTsKKyAgICAgICAgCisgICAgICAgIEtVUkwgcmVmZXJyZXIgPSBkb2NMb2Fk
ZXItPmRvYygpLT51cmwoKTsKKyAgICAgICAgaWYgKChyZWZlcnJlci5wcm90b2NvbElzKCJodHRw
IikgfHwgcmVmZXJyZXIucHJvdG9jb2xJcygiaHR0cHMiKSkgJiYgcmVmZXJyZXIucGF0aCgpLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIHJlZmVycmVyLnNldFBhdGgoIi8iKTsKKyAgICAgICAgcmVz
b3VyY2VSZXF1ZXN0LnNldEhUVFBSZWZlcnJlcihyZWZlcnJlci5zdHJpbmcoKSk7CisKKyAgICAg
ICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBTdWJyZXNvdXJjZUxvYWRlcjo6
Y3JlYXRlKGRvY0xvYWRlci0+ZG9jKCktPmZyYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLCByZXNv
dXJjZVJlcXVlc3QsIHJlcXVlc3QtPnNob3VsZFNraXBDYW5Mb2FkQ2hlY2soKSwgcmVxdWVzdC0+
c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygpKTsKICAgICAgICAgaWYgKGxvYWRlcikgewotICAg
ICAgICAgICAgbV9yZXF1ZXN0c0xvYWRpbmcuYWRkKGxvYWRlci5yZWxlYXNlKCksIHJlcSk7Ci0g
ICAgICAgICAgICBkbC0+aW5jcmVtZW50UmVxdWVzdENvdW50KCk7Ci0gICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIG1fcmVxdWVzdHNMb2FkaW5nLmFkZChsb2FkZXIucmVsZWFzZSgpLCBy
ZXF1ZXN0KTsKKyAgICAgICAgICAgIHJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCktPnNldFJlcXVl
c3RlZEZyb21OZXR3b3JraW5nTGF5ZXIoKTsKKyNpZiBSRVFVRVNUX0RFQlVHCisgICAgICAgICAg
ICBwcmludGYoIkhPU1QgJXMgQ09VTlQgJWQgTE9BRElORyAlc1xuIiwgcmVzb3VyY2VSZXF1ZXN0
LnVybCgpLmhvc3QoKS5sYXRpbjEoKS5kYXRhKCksIG1fcmVxdWVzdHNMb2FkaW5nLnNpemUoKSwg
cmVxLT5jYWNoZWRSZXNvdXJjZSgpLT51cmwoKS5sYXRpbjEoKS5kYXRhKCkpOworI2VuZGlmCisg
ICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgCisgICAgICAgICAgICBkb2NMb2FkZXItPmRlY3Jl
bWVudFJlcXVlc3RDb3VudCgpOworICAgICAgICAgICAgZG9jTG9hZGVyLT5zZXRMb2FkSW5Qcm9n
cmVzcyh0cnVlKTsKKyAgICAgICAgICAgIHJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCktPmVycm9y
KCk7CisgICAgICAgICAgICBkb2NMb2FkZXItPnNldExvYWRJblByb2dyZXNzKGZhbHNlKTsKKyAg
ICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0OwogICAgICAgICB9Ci0KLSAgICAgICAgZGwtPnNldExv
YWRJblByb2dyZXNzKHRydWUpOwotICAgICAgICByZXEtPmNhY2hlZFJlc291cmNlKCktPmVycm9y
KCk7Ci0gICAgICAgIGRsLT5zZXRMb2FkSW5Qcm9ncmVzcyhmYWxzZSk7Ci0KLSAgICAgICAgZGVs
ZXRlIHJlcTsKICAgICB9CiB9CiAKLXZvaWQgTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFN1YnJl
c291cmNlTG9hZGVyKiBsb2FkZXIpCit2b2lkIExvYWRlcjo6SG9zdDo6ZGlkRmluaXNoTG9hZGlu
ZyhTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyKQogewogICAgIFJlcXVlc3RNYXA6Oml0ZXJhdG9y
IGkgPSBtX3JlcXVlc3RzTG9hZGluZy5maW5kKGxvYWRlcik7CiAgICAgaWYgKGkgPT0gbV9yZXF1
ZXN0c0xvYWRpbmcuZW5kKCkpCkBAIC0xMjEsMjcgKzI3NiwzMSBAQCB2b2lkIExvYWRlcjo6ZGlk
RmluaXNoTG9hZGluZyhTdWJyZXNvdXJjCiAKICAgICBkZWxldGUgcmVxOwogCisjaWYgUkVRVUVT
VF9ERUJVRworICAgIEtVUkwgdShvYmplY3QtPnVybCgpKTsKKyAgICBwcmludGYoIkhPU1QgJXMg
Q09VTlQgJWQgUkVDRUlWRUQgJXNcbiIsIHUuaG9zdCgpLmxhdGluMSgpLmRhdGEoKSwgbV9yZXF1
ZXN0c0xvYWRpbmcuc2l6ZSgpLCBvYmplY3QtPnVybCgpLmxhdGluMSgpLmRhdGEoKSk7CisjZW5k
aWYKICAgICBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwogfQogCi12b2lkIExvYWRlcjo6ZGlkRmFp
bChTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJikKK3ZvaWQg
TG9hZGVyOjpIb3N0OjpkaWRGYWlsKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJl
c291cmNlRXJyb3ImKQogewogICAgIGRpZEZhaWwobG9hZGVyKTsKIH0KIAotdm9pZCBMb2FkZXI6
OmRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgYm9vbCBjYW5jZWxsZWQpCit2b2lk
IExvYWRlcjo6SG9zdDo6ZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBib29sIGNh
bmNlbGxlZCkKIHsKICAgICBSZXF1ZXN0TWFwOjppdGVyYXRvciBpID0gbV9yZXF1ZXN0c0xvYWRp
bmcuZmluZChsb2FkZXIpOwogICAgIGlmIChpID09IG1fcmVxdWVzdHNMb2FkaW5nLmVuZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBSZXF1ZXN0KiByZXEgPSBpLT5zZWNvbmQ7CisgICAgUmVx
dWVzdCogcmVxdWVzdCA9IGktPnNlY29uZDsKICAgICBtX3JlcXVlc3RzTG9hZGluZy5yZW1vdmUo
aSk7Ci0gICAgRG9jTG9hZGVyKiBkb2NMb2FkZXIgPSByZXEtPmRvY0xvYWRlcigpOwotICAgIGlm
ICghcmVxLT5pc011bHRpcGFydCgpKQorICAgIERvY0xvYWRlciogZG9jTG9hZGVyID0gcmVxdWVz
dC0+ZG9jTG9hZGVyKCk7CisgICAgaWYgKCFyZXF1ZXN0LT5pc011bHRpcGFydCgpKQogICAgICAg
ICBkb2NMb2FkZXItPmRlY3JlbWVudFJlcXVlc3RDb3VudCgpOwogCi0gICAgQ2FjaGVkUmVzb3Vy
Y2UqIG9iamVjdCA9IHJlcS0+Y2FjaGVkUmVzb3VyY2UoKTsKKyAgICBDYWNoZWRSZXNvdXJjZSog
b2JqZWN0ID0gcmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2UoKTsKIAogICAgIGlmICghY2FuY2VsbGVk
KSB7CiAgICAgICAgIGRvY0xvYWRlci0+c2V0TG9hZEluUHJvZ3Jlc3ModHJ1ZSk7CkBAIC0xNDks
MTQgKzMwOCwxNSBAQCB2b2lkIExvYWRlcjo6ZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciogCiAg
ICAgfQogICAgIAogICAgIGRvY0xvYWRlci0+c2V0TG9hZEluUHJvZ3Jlc3MoZmFsc2UpOwotICAg
IGNhY2hlKCktPnJlbW92ZShvYmplY3QpOworICAgIGlmIChjYW5jZWxsZWQgfHwgIW9iamVjdC0+
aXNQcmVsb2FkZWQoKSkKKyAgICAgICAgY2FjaGUoKS0+cmVtb3ZlKG9iamVjdCk7CiAKLSAgICBk
ZWxldGUgcmVxOworICAgIGRlbGV0ZSByZXF1ZXN0OwogCiAgICAgc2VydmVQZW5kaW5nUmVxdWVz
dHMoKTsKIH0KIAotdm9pZCBMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShTdWJyZXNvdXJjZUxv
YWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3ZvaWQgTG9h
ZGVyOjpIb3N0OjpkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgUmVxdWVzdCogcmVxID0g
bV9yZXF1ZXN0c0xvYWRpbmcuZ2V0KGxvYWRlcik7CiAgICAgCkBAIC0xOTIsNyArMzUyLDcgQEAg
dm9pZCBMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShTdWJyZXNvdQogICAgIH0KIH0KIAotdm9p
ZCBMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0
IGNoYXIqIGRhdGEsIGludCBzaXplKQordm9pZCBMb2FkZXI6Okhvc3Q6OmRpZFJlY2VpdmVEYXRh
KFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBzaXplKQog
ewogICAgIFJlcXVlc3QqIHJlcXVlc3QgPSBtX3JlcXVlc3RzTG9hZGluZy5nZXQobG9hZGVyKTsK
ICAgICBpZiAoIXJlcXVlc3QpCkBAIC0yMTcsMjUgKzM3NywzNCBAQCB2b2lkIExvYWRlcjo6ZGlk
UmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMCiAgICAgfSBlbHNlIGlmIChyZXF1ZXN0LT5pc0luY3Jl
bWVudGFsKCkpCiAgICAgICAgIG9iamVjdC0+ZGF0YShsb2FkZXItPnJlc291cmNlRGF0YSgpLCBm
YWxzZSk7CiB9Ci0KLXZvaWQgTG9hZGVyOjpjYW5jZWxSZXF1ZXN0cyhEb2NMb2FkZXIqIGRsKQor
ICAgIAordm9pZCBMb2FkZXI6Okhvc3Q6OmNhbmNlbFBlbmRpbmdSZXF1ZXN0cyhSZXF1ZXN0UXVl
dWUmIHJlcXVlc3RzUGVuZGluZywgRG9jTG9hZGVyKiBkb2NMb2FkZXIpCiB7Ci0gICAgRGVwcmVj
YXRlZFB0ckxpc3RJdGVyYXRvcjxSZXF1ZXN0PiBwSXQobV9yZXF1ZXN0c1BlbmRpbmcpOwotICAg
IHdoaWxlIChwSXQuY3VycmVudCgpKSB7Ci0gICAgICAgIGlmIChwSXQuY3VycmVudCgpLT5kb2NM
b2FkZXIoKSA9PSBkbCkgewotICAgICAgICAgICAgY2FjaGUoKS0+cmVtb3ZlKHBJdC5jdXJyZW50
KCktPmNhY2hlZFJlc291cmNlKCkpOwotICAgICAgICAgICAgbV9yZXF1ZXN0c1BlbmRpbmcucmVt
b3ZlKHBJdCk7Ci0gICAgICAgICAgICBkbC0+ZGVjcmVtZW50UmVxdWVzdENvdW50KCk7CisgICAg
UmVxdWVzdFF1ZXVlIHJlbWFpbmluZzsKKyAgICBSZXF1ZXN0UXVldWU6Oml0ZXJhdG9yIGVuZCA9
IHJlcXVlc3RzUGVuZGluZy5lbmQoKTsKKyAgICBmb3IgKFJlcXVlc3RRdWV1ZTo6aXRlcmF0b3Ig
aXQgPSByZXF1ZXN0c1BlbmRpbmcuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IFJlcXVlc3QqIHJlcXVlc3QgPSAqaXQ7CisgICAgICAgIGlmIChyZXF1ZXN0LT5kb2NMb2FkZXIo
KSA9PSBkb2NMb2FkZXIpIHsKKyAgICAgICAgICAgIGNhY2hlKCktPnJlbW92ZShyZXF1ZXN0LT5j
YWNoZWRSZXNvdXJjZSgpKTsKKyAgICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0OworICAgICAgICAg
ICAgZG9jTG9hZGVyLT5kZWNyZW1lbnRSZXF1ZXN0Q291bnQoKTsKICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICArK3BJdDsKKyAgICAgICAgICAgIHJlbWFpbmluZy5hcHBlbmQocmVxdWVzdCk7
CiAgICAgfQorICAgIHJlcXVlc3RzUGVuZGluZy5zd2FwKHJlbWFpbmluZyk7Cit9CisKK3ZvaWQg
TG9hZGVyOjpIb3N0OjpjYW5jZWxSZXF1ZXN0cyhEb2NMb2FkZXIqIGRvY0xvYWRlcikKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIHAgPSAwOyBwIDw9IEhpZ2g7IHArKykKKyAgICAgICAgY2FuY2VsUGVu
ZGluZ1JlcXVlc3RzKG1fcmVxdWVzdHNQZW5kaW5nW3BdLCBkb2NMb2FkZXIpOwogCiAgICAgVmVj
dG9yPFN1YnJlc291cmNlTG9hZGVyKiwgMjU2PiBsb2FkZXJzVG9DYW5jZWw7CiAKICAgICBSZXF1
ZXN0TWFwOjppdGVyYXRvciBlbmQgPSBtX3JlcXVlc3RzTG9hZGluZy5lbmQoKTsKICAgICBmb3Ig
KFJlcXVlc3RNYXA6Oml0ZXJhdG9yIGkgPSBtX3JlcXVlc3RzTG9hZGluZy5iZWdpbigpOyBpICE9
IGVuZDsgKytpKSB7CiAgICAgICAgIFJlcXVlc3QqIHIgPSBpLT5zZWNvbmQ7Ci0gICAgICAgIGlm
IChyLT5kb2NMb2FkZXIoKSA9PSBkbCkKKyAgICAgICAgaWYgKHItPmRvY0xvYWRlcigpID09IGRv
Y0xvYWRlcikKICAgICAgICAgICAgIGxvYWRlcnNUb0NhbmNlbC5hcHBlbmQoaS0+Zmlyc3QuZ2V0
KCkpOwogICAgIH0KIApAQCAtMjQzLDExICs0MTIsNiBAQCB2b2lkIExvYWRlcjo6Y2FuY2VsUmVx
dWVzdHMoRG9jTG9hZGVyKiBkCiAgICAgICAgIFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIgPSBs
b2FkZXJzVG9DYW5jZWxbaV07CiAgICAgICAgIGRpZEZhaWwobG9hZGVyLCB0cnVlKTsKICAgICB9
Ci0gICAgCi0gICAgaWYgKGRsLT5sb2FkSW5Qcm9ncmVzcygpKQotICAgICAgICBBU1NFUlQoZGwt
PnJlcXVlc3RDb3VudCgpID09IDEpOwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUKGRsLT5yZXF1
ZXN0Q291bnQoKSA9PSAwKTsKIH0KIAogfSAvL25hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL2xvYWRlci9sb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9sb2FkZXIu
aAkocmV2aXNpb24gMzA4MTQpCisrKyBXZWJDb3JlL2xvYWRlci9sb2FkZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjIsOSArMjIsMTMgQEAKICNpZm5kZWYgbG9hZGVyX2gKICNkZWZpbmUgbG9hZGVy
X2gKIAotI2luY2x1ZGUgIkRlcHJlY2F0ZWRQdHJMaXN0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiU3VicmVzb3VyY2VM
b2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzIsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgRG9jTG9hZGVyOwogICAgIGNsYXNzIFJlcXVlc3Q7CiAKLSAgICBj
bGFzcyBMb2FkZXIgOiBwcml2YXRlIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50IHsKKyAgICBjbGFz
cyBMb2FkZXIgOiBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgogICAgICAgICBMb2FkZXIoKTsK
ICAgICAgICAgfkxvYWRlcigpOwpAQCAtNDAsMTkgKzQ0LDQ5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdm9pZCBsb2FkKERvY0xvYWRlciosIENhY2hlZFJlc291cmNlKiwgYm9vbCBp
bmNyZW1lbnRhbCA9IHRydWUsIGJvb2wgc2tpcENhbkxvYWRDaGVjayA9IGZhbHNlLCBib29sIHNl
bmRSZXNvdXJjZUxvYWRDYWxsYmFja3MgPSB0cnVlKTsKIAogICAgICAgICB2b2lkIGNhbmNlbFJl
cXVlc3RzKERvY0xvYWRlciopOworICAgICAgICAKKyAgICAgICAgZW51bSBQcmlvcml0eSB7Cisg
ICAgICAgICAgICBMb3csIE1lZGl1bSwgSGlnaAorICAgICAgICB9OworICAgICAgICB2b2lkIHNl
cnZlUGVuZGluZ1JlcXVlc3RzKFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSA9IExvdyk7CiAKICAg
ICBwcml2YXRlOgotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJl
c291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2Fk
ZXIqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqLCBj
b25zdCBSZXNvdXJjZUVycm9yJik7Ci0gICAgICAgIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxv
YWRlciosIGJvb2wgY2FuY2VsbGVkID0gZmFsc2UpOwotCi0gICAgICAgIHZvaWQgc2VydmVQZW5k
aW5nUmVxdWVzdHMoKTsKLQotICAgICAgICBEZXByZWNhdGVkUHRyTGlzdDxSZXF1ZXN0PiBtX3Jl
cXVlc3RzUGVuZGluZzsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdWJyZXNvdXJj
ZUxvYWRlcj4sIFJlcXVlc3QqPiBSZXF1ZXN0TWFwOwotICAgICAgICBSZXF1ZXN0TWFwIG1fcmVx
dWVzdHNMb2FkaW5nOworICAgICAgICBQcmlvcml0eSBkZXRlcm1pbmVQcmlvcml0eShjb25zdCBD
YWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpIGNvbnN0OworICAgICAgICB2b2lkIHNjaGVkdWxlU2Vy
dmVQZW5kaW5nUmVxdWVzdHMoKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcmVxdWVzdFRpbWVy
RmlyZWQoVGltZXI8TG9hZGVyPiopOworCisgICAgICAgIGNsYXNzIEhvc3QgOiBwcml2YXRlIFN1
YnJlc291cmNlTG9hZGVyQ2xpZW50IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSG9z
dCh1bnNpZ25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0KTsKKyAgICAgICAgICAgIH5Ib3N0KCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHZvaWQgYWRkUmVxdWVzdChSZXF1ZXN0KiwgUHJpb3Jp
dHkpOworICAgICAgICAgICAgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhQcmlvcml0eSBtaW5p
bXVtUHJpb3JpdHkgPSBMb3cpOworICAgICAgICAgICAgdm9pZCBjYW5jZWxSZXF1ZXN0cyhEb2NM
b2FkZXIqKTsKKyAgICAgICAgICAgIGJvb2wgaGFzUmVxdWVzdHMoKSBjb25zdDsKKyAgICAgICAg
CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJl
c3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAg
ICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFN1YnJlc291cmNlTG9hZGVyKiwg
Y29uc3QgY2hhciosIGludCk7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9h
ZGluZyhTdWJyZXNvdXJjZUxvYWRlciopOworICAgICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZh
aWwoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHR5cGVkZWYgRGVxdWU8UmVxdWVzdCo+IFJlcXVlc3RRdWV1ZTsKKyAg
ICAgICAgICAgIHZvaWQgc2VydmVQZW5kaW5nUmVxdWVzdHMoUmVxdWVzdFF1ZXVlJiByZXF1ZXN0
c1BlbmRpbmcpOworICAgICAgICAgICAgdm9pZCBkaWRGYWlsKFN1YnJlc291cmNlTG9hZGVyKiwg
Ym9vbCBjYW5jZWxsZWQgPSBmYWxzZSk7CisgICAgICAgICAgICB2b2lkIGNhbmNlbFBlbmRpbmdS
ZXF1ZXN0cyhSZXF1ZXN0UXVldWUmIHJlcXVlc3RzUGVuZGluZywgRG9jTG9hZGVyKiBkb2NMb2Fk
ZXIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSZXF1ZXN0UXVldWUgbV9yZXF1ZXN0c1Bl
bmRpbmdbSGlnaCArIDFdOworICAgICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTdWJy
ZXNvdXJjZUxvYWRlcj4sIFJlcXVlc3QqPiBSZXF1ZXN0TWFwOworICAgICAgICAgICAgUmVxdWVz
dE1hcCBtX3JlcXVlc3RzTG9hZGluZzsKKyAgICAgICAgICAgIGNvbnN0IGludCBtX21heFJlcXVl
c3RzSW5GbGlnaHQ7CisgICAgICAgIH07CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IEhvc3QqPiBIb3N0TWFwOworICAgICAgICBIb3N0TWFwIG1faG9zdHM7CisgICAgICAgIEhvc3Qg
bV9ub25IVFRQUHJvdG9jb2xIb3N0OworICAgICAgICAKKyAgICAgICAgVGltZXI8TG9hZGVyPiBt
X3JlcXVlc3RUaW1lcjsKICAgICB9OwogCiB9CkluZGV4OiBXZWJLaXQvbWFjL0ZvcndhcmRpbmdI
ZWFkZXJzL3d0Zi9EZXF1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvRm9yd2FyZGluZ0hl
YWRlcnMvd3RmL0RlcXVlLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvbWFjL0ZvcndhcmRpbmdI
ZWFkZXJzL3d0Zi9EZXF1ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9EZXF1ZS5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19694</attachid>
            <date>2008-03-12 00:25:49 -0700</date>
            <delta_ts>2008-03-13 10:18:48 -0700</delta_ts>
            <desc>Darin&apos;s comments etc.</desc>
            <filename>speculative-loading-10.patch</filename>
            <type>text/plain</type>
            <size>81783</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzMDk3OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIxIEBACisyMDA4LTAzLTExICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIE1ha2UgcGFnZSBsb2FkcyBnbyBmYXN0LgorICAgICAgICAKKyAgICAgICAgaHR0cDov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0ODAKKworICAgICAgICAtIEltcGxl
bWVudCBzcGVjdWxhdGl2ZSBwcmVsb2FkaW5nLiBXaGVuIGEgc2NyaXB0IGxvYWQgYmxvY2tzIHRo
ZSBtYWluIHBhcnNlciwgdXNlIGEgc2lkZSAKKyAgICAgICAgICBwYXJzZXIgdG8gcGljayB1cCBt
b3JlIHJlc291cmNlcy4KKyAgICAgICAgLSBJbXBsZW1lbnQgcGVyLWhvc3QgbG9hZCBxdWV1ZXMs
IHByaW9yaXRpemUgc2NyaXB0cyBhbmQgc3R5bGVzaGVldHMgb3ZlciBpbWFnZXMuCisgICAgICAg
IAorICAgICAgICBEZXBlbmRpbmcgb24gY29udGVudCBhbmQgbmV0d29yayBsYXRlbmN5IHRoaXMg
bWF5IHNwZWVkIHRoaW5ncyB1cCBxdWl0ZSBhIGJpdC4KKworICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmltcGxpY2l0Q2xvc2UpOgorICAgICAgICBDbGVhciB0
aGUgcHJlbG9hZHMgYWZ0ZXIgbGFvZGluZyBjb21wbGV0ZXMuCisgICAgICAgIAorICAgICAgICAq
IGh0bWwvSFRNTExpbmtFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtF
bGVtZW50Ojp0b2tlbml6ZVJlbEF0dHJpYnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MTGlua0Vs
ZW1lbnQuaDoKKyAgICAgICAgTWFrZSB0b2tlbml6ZVJlbEF0dHJpYnV0ZSgpIHB1YmxpYyBzdGF0
aWMgc28gaXQgY2FuIGJlIHVzZWQgZnJvbSBlbHNld2hlcmUuCisgICAgICAgIEVsaW1pbmF0ZSBh
IHBvaW50bGVzcyBiaXRmaWVsZCBzbyBJIGNhbiBnZXQgcmVmZXJlbmNlcy4KKyAgICAgICAgCisg
ICAgICAgICogaHRtbC9IVE1MVG9rZW5pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxU
b2tlbml6ZXI6OnNjcmlwdEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXpl
cjo6c2NyaXB0RXhlY3V0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6Ondy
aXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxUb2tlbml6ZXIuaDoKKyAgICAgICAgU3BpbiB1cCB0
aGUgcHJlbG9hZCBzY2FubmVyIHdoZW5ldmVyIGEgc2NyaXB0IGxvYWQgYmxvY2tzIHRoZSBwYXJz
ZXIuIE9uZSBzY2FubmVyIHRyYWNrcyB0aGUgZW5kIG9mIAorICAgICAgICB0aGUgZG9jdW1lbnQg
d2hpbGUgdGVtcG9yYXJ5IG9uZXMgYXJlIGNyZWF0ZWQgYXMgbmVlZGVkIHRvIHNjYW4gZG9jdW1l
bnQud3JpdGUoKSBvdXRwdXQuCisgICAgICAgIAorICAgICAgICAqIGh0bWwvUHJlbG9hZFNjYW5u
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlByZWxvYWRTY2FubmVyOjpQcmVsb2Fk
U2Nhbm5lcik6CisgICAgICAgIChXZWJDb3JlOjpQcmVsb2FkU2Nhbm5lcjo6flByZWxvYWRTY2Fu
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlByZWxvYWRTY2FubmVyOjpiZWdpbik6CisgICAgICAg
IChXZWJDb3JlOjpQcmVsb2FkU2Nhbm5lcjo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlByZWxv
YWRTY2FubmVyOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpQcmVsb2FkU2Nhbm5lcjo6d3Jp
dGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNXaGl0ZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlByZWxvYWRTY2FubmVyOjpjbGVhckxhc3RDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OlByZWxvYWRTY2FubmVyOjpyZW1lbWJlckNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpQ
cmVsb2FkU2Nhbm5lcjo6bGFzdENoYXJhY3RlcnNNYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjps
ZWdhbEVudGl0eUZvcik6CisgICAgICAgIChXZWJDb3JlOjpQcmVsb2FkU2Nhbm5lcjo6Y29uc3Vt
ZUVudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpQcmVsb2FkU2Nhbm5lcjo6dG9rZW5pemUpOgor
ICAgICAgICAoV2ViQ29yZTo6UHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UHJlbG9hZFNjYW5uZXI6OmVtaXRDaGFyYWN0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UHJlbG9hZFNjYW5uZXI6OnRva2VuaXplQ1NTKToKKyAgICAgICAgKFdlYkNvcmU6
OlByZWxvYWRTY2FubmVyOjplbWl0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OlByZWxvYWRTY2Fu
bmVyOjplbWl0Q1NTUnVsZSk6CisgICAgICAgICogaHRtbC9QcmVsb2FkU2Nhbm5lci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlByZWxvYWRTY2FubmVyOjppblByb2dyZXNzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlByZWxvYWRTY2FubmVyOjopOgorICAgICAgICBIVE1MNSB0b2tlbml6YXRp
b24gcGx1cyBzb21lIGdsdWUgY29kZS4gRmFrZSBDU1MgcGFyc2luZyB0aHJvd24gaW4ganVzdCBm
b3IgZnVuLgorICAgICAgICAKKyAgICAgICAgKiBsb2FkZXIvQ2FjaGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGU6OnBydW5lRGVhZFJlc291cmNlcyk6CisgICAgICAgIFByZWxvYWRzIGhh
dmUgemVybyByZWZjb3VudCwgYXZvaWQga2lja2luZyB0aGVtIG91dCB0b28gZWFybHkuCisgICAg
ICAgIAorICAgICAgICAqIGxvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRSZXNvdXJjZTo6Q2FjaGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkUmVzb3VyY2U6OnJlZik6CisgICAgICAgICogbG9hZGVyL0NhY2hlZFJlc291cmNlLmg6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6KToKKyAgICAgICAgKFdlYkNvcmU6
OkNhY2hlZFJlc291cmNlOjpwcmVsb2FkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
ZFJlc291cmNlOjpzZXRSZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhY2hlZFJlc291cmNlOjpjYW5EZWxldGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fj
aGVkUmVzb3VyY2U6OmlzUHJlbG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291
cmNlOjppbmNyZWFzZVByZWxvYWRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNv
dXJjZTo6ZGVjcmVhc2VQcmVsb2FkQ291bnQpOgorICAgICAgICBLZWVwIHRyYWNrIHdoaWNoIHJl
c291cmNlcyBhcmUgcHJlbG9hZHMuIEF2b2lkIGRlbGV0aW5nIHRoZW0uIFRyYWNrCisgICAgICAg
IGF0IHdoaWNoIHBvaW50IG9mIHRoZSBsb2FkaW5nIHByZWxvYWRzIGdldCB1dGlsaXplZCB0byBl
bmFibGUgc29tZSBpbnRlcmVzdGluZyAKKyAgICAgICAgc3RhdGlzdGljcy4KKyAgICAgICAgCisg
ICAgICAgICogbG9hZGVyL0RvY0xvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2NMb2Fk
ZXI6On5Eb2NMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jTG9hZGVyOjpjaGVja0ZvclJl
bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpEb2NMb2FkZXI6OnJlZ2lzdGVyUHJlbG9hZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2NMb2FkZXI6OmNsZWFyUHJlbG9hZHMpOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jTG9hZGVyOjpwcmludFByZWxvYWRTdGF0cyk6CisgICAgICAgICogbG9hZGVyL0Rv
Y0xvYWRlci5oOgorICAgICAgICBFbnN1cmUgd2UgdXRpbGl6ZSBwcmVsb2FkZWQgcmVzb3VyY2Vz
IGR1cmluZyByZWxvYWRzLgorICAgICAgICBLZWVwIGEgbGlzdCBvZiBhbGwgcHJlbG9hZHMgaW4g
dGhlIGRvY3VtZW50LiBDbGVhciB0aGUgcHJlbG9hZHMgYWZ0ZXIKKyAgICAgICAgcGFyc2luZyBp
cyBjb21wbGV0ZS4gU29tZSBkZWJ1ZyBzdGF0aXN0aWNzLgorICAgICAgICAKKyAgICAgICAgKiBs
b2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2Fk
ZXI6OmlzTG9hZGluZ0luQVBJU2Vuc2UpOgorICAgICAgICBBdm9pZCBzaWduYWxpbmcgdGhhdCBs
b2FkaW5nIGlzIGNvbXBsZXRlIHRvbyBlYXJseS4gCisgICAgICAgIAorICAgICAgICAqIGxvYWRl
ci9sb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpMb2FkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TG9hZGVyOjp+TG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlcjo6
ZGV0ZXJtaW5lUHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpsb2FkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxvYWRlcjo6c2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMb2FkZXI6OnJlcXVlc3RUaW1lckZpcmVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkxvYWRlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMpOgorICAgICAgICAoV2ViQ29yZTo6
TG9hZGVyOjpjYW5jZWxSZXF1ZXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Okhvc3Q6
Okhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpIb3N0Ojp+SG9zdCk6CisgICAgICAg
IChXZWJDb3JlOjpMb2FkZXI6Okhvc3Q6OmFkZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TG9hZGVyOjpIb3N0OjpoYXNSZXF1ZXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Okhv
c3Q6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkxvYWRlcjo6SG9z
dDo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Okhvc3Q6OmRp
ZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpIb3N0OjpkaWRSZWNlaXZlUmVzcG9u
c2UpOgorICAgICAgICAoV2ViQ29yZTo6TG9hZGVyOjpIb3N0OjpkaWRSZWNlaXZlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Okhvc3Q6OmNhbmNlbFBlbmRpbmdSZXF1ZXN0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Okhvc3Q6OmNhbmNlbFJlcXVlc3RzKToKKyAgICAgICAg
KiBsb2FkZXIvbG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpMb2FkZXI6Oik6CisgICAgICAg
IERpc3RyaWJ1dGUgbG9hZCByZXF1ZXN0cyB0byBwZXItaG9zdCBwcmlvcml0eSBxdWV1ZXMuIExp
bWl0IHRoZSBudW1iZXIgb2YgbG9hZHMgaXNzdWVkIHRvIHRoZSAKKyAgICAgICAgbmV0d29ya2lu
ZyBsYXllciBzbyB3ZSBoYXZlIGJldHRlciBjaGFuZ2VzIG9mIGdldHRpbmcgaW1wb3J0YW50IHJl
cXVlc3RzIHRocm91Z2ggZmlyc3QuCisgICAgICAgIFByaW9yaXRpemUgc2NyaXB0cyA+IHN0eWxl
c2hlZXRzID4gaW1hZ2VzLgorCiAyMDA4LTAzLTExICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KIAogICAgICAgICAtIGZpeCBSZWxlYXNlIGJ1aWxkCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzA4MTQpCisrKyBXZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzgx
OSw2ICszODE5LDggQEAKIAkJRTQ0NjE0M0MwQ0Q2ODlDQzAwRkFEQTc1IC8qIEpTSFRNTFNvdXJj
ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEU0QjQyMzcyMENCRkI2RTAwMEFGMkVDRSAvKiBKU0hUTUxTb3VyY2VFbGVtZW50LmggKi87IH07
CiAJCUU0NDYxNDUxMENENjhBMzUwMEZBREE3NSAvKiBSZW5kZXJWaWRlby5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI0MUUzMzBDQkZCNjA5MDBB
RjJFQ0UgLyogUmVuZGVyVmlkZW8uY3BwICovOyB9OwogCQlFNDQ2MTQ1MjBDRDY4QTM1MDBGQURB
NzUgLyogUmVuZGVyVmlkZW8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0QjQxRTM0MENCRkI2MDkwMEFGMkVDRSAvKiBSZW5kZXJWaWRlby5oICovOyB9
OworCQlFNDk2MjZDMjBEODBEOTQ4MDBFMzQwNUMgLyogUHJlbG9hZFNjYW5uZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRENEFCRTAwRDc1NDJG
MDAwRjk2ODY5IC8qIFByZWxvYWRTY2FubmVyLmNwcCAqLzsgfTsKKwkJRTQ5NjI2QzMwRDgwRDk0
OTAwRTM0MDVDIC8qIFByZWxvYWRTY2FubmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNEQ0QUJFMTBENzU0MkYxMDBGOTY4NjkgLyogUHJlbG9hZFNj
YW5uZXIuaCAqLzsgfTsKIAkJRTRDMjc5NTgwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1lZGlh
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzI3
OTU2MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5jcHAgKi87IH07CiAJCUU0QzI3OTU5
MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDMjc5NTcwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRl
ck1lZGlhLmggKi87IH07CiAJCUU0RUVGRkM4MEQzNDU1MEMwMDQ2OUE1OCAvKiBKU0F1ZGlvQ29u
c3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTRFRUZGQzYwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5jcHAgKi87
IH07CkBAIC03OTkwLDYgKzc5OTIsOCBAQAogCQlFNEI0MjM4NjBDQkZCNzNDMDBBRjJFQ0UgLyog
SlNQcm9ncmVzc0V2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUHJv
Z3Jlc3NFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEMyNzk1NjBDRjk3
NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVuZGVyTWVkaWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNEMyNzk1NzBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTWVkaWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTRENEFCRTAwRDc1NDJGMDAwRjk2ODY5IC8qIFByZWxvYWRTY2FubmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZWxvYWRTY2FubmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRENEFCRTEwRDc1NDJGMTAwRjk2ODY5IC8q
IFByZWxvYWRTY2FubmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByZWxv
YWRTY2FubmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0RUVGRkM2MEQzNDU1
MEMwMDQ2OUE1OCAvKiBKU0F1ZGlvQ29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNBdWRpb0NvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTRFRUZGQzcwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1
Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0F1ZGlvQ29uc3RydWN0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRUQwNDhBQkIwODMzRjEzMjAwNkUx
RTY3IC8qIHRleHRBcmVhUmVzaXplQ29ybmVyLnRpZmYgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS50aWZmOyBwYXRoID0gdGV4dEFyZWFSZXNp
emVDb3JuZXIudGlmZjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk5MzgsNiArOTk0
Miw4IEBACiAJCTkzRUVDMUVDMDlDMjg3NzcwMEM1MTVEMSAvKiBodG1sICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlFNEQ0QUJFMDBENzU0MkYwMDBGOTY4
NjkgLyogUHJlbG9hZFNjYW5uZXIuY3BwICovLAorCQkJCUU0RDRBQkUxMEQ3NTQyRjEwMEY5Njg2
OSAvKiBQcmVsb2FkU2Nhbm5lci5oICovLAogCQkJCUE3Nzk3OTEwMEQ2QjlEMEMwMDM4NTFCOSAv
KiBDYW52YXNQaXhlbEFycmF5LmNwcCAqLywKIAkJCQlBNzc5NzkxMTBENkI5RDBDMDAzODUxQjkg
LyogQ2FudmFzUGl4ZWxBcnJheS5oICovLAogCQkJCUE3Nzk3OTEyMEQ2QjlEMEMwMDM4NTFCOSAv
KiBDYW52YXNQaXhlbEFycmF5LmlkbCAqLywKQEAgLTE0NDQxLDYgKzE0NDQ3LDcgQEAKIAkJCQkx
QTU2OUQyMzBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9vYmplY3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBNTY5RDI1MEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX3Jvb3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDNjkzMjc0MEQ3RTI5MzkwMEFFNDREMSAvKiBKU0RPTVdpbmRvd0Jhc2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCUU0OTYyNkMzMEQ4MEQ5NDkwMEUzNDA1QyAvKiBQcmVsb2Fk
U2Nhbm5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNjA2Myw2ICsxNjA3MCw3IEBACiAJCQkJMUE1
NjlEMjIwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfb2JqZWN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBNTY5RDI0MEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX3Jvb3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkM2OTMyNzMwRDdFMjkzOTAwQUU0NEQxIC8qIEpTRE9NV2luZG93QmFz
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNDk2MjZDMjBEODBEOTQ4MDBFMzQwNUMgLyogUHJl
bG9hZFNjYW5uZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAz
MDgxNCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ2
NCw2ICsxNDY0LDkgQEAgdm9pZCBEb2N1bWVudDo6aW1wbGljaXRDbG9zZSgpCiAgICAgZGVsZXRl
IG1fdG9rZW5pemVyOwogICAgIG1fdG9rZW5pemVyID0gMDsKIAorICAgIC8vIFBhcnNlciBzaG91
bGQgaGF2ZSBwaWNrZWQgdXAgYWxsIHByZWxvYWRzIGJ5IG5vdworICAgIG1fZG9jTG9hZGVyLT5j
bGVhclByZWxvYWRzKCk7CisKICAgICAvLyBDcmVhdGUgYSBib2R5IGVsZW1lbnQgaWYgd2UgZG9u
J3QgYWxyZWFkeSBoYXZlIG9uZS4gU2VlIFJhZGFyIDM3NTg3ODUuCiAgICAgaWYgKCF0aGlzLT5i
b2R5KCkgJiYgaXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICBpZiAoTm9kZSogZG9jdW1lbnRF
bGVtZW50ID0gdGhpcy0+ZG9jdW1lbnRFbGVtZW50KCkpIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MTGlua0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTGlua0Vs
ZW1lbnQuY3BwCShyZXZpc2lvbiAzMDgxNCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgU3R5bGVTaGVldCogSFRN
TExpbmtFbGVtZW50OjpzaGVldCgpIGNvbgogdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IHJlbEF0dHIpIHsKLSAgICAgICAgdG9rZW5pemVSZWxBdHRyaWJ1dGUoYXR0ci0+dmFs
dWUoKSk7CisgICAgICAgIHRva2VuaXplUmVsQXR0cmlidXRlKGF0dHItPnZhbHVlKCksIG1faXNT
dHlsZVNoZWV0LCBtX2FsdGVybmF0ZSwgbV9pc0ljb24pOwogICAgICAgICBwcm9jZXNzKCk7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaHJlZkF0dHIpIHsKICAgICAgICAgbV91cmwg
PSBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChwYXJzZVVSTChhdHRyLT52YWx1ZSgpKSkuc3RyaW5n
KCk7CkBAIC0xMjQsMTcgKzEyNCwyMCBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1CiAgICAgfQogfQogCi12b2lkIEhUTUxMaW5rRWxlbWVudDo6dG9rZW5pemVSZWxB
dHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiByZWxTdHIpCit2b2lkIEhUTUxMaW5rRWxlbWVu
dDo6dG9rZW5pemVSZWxBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiByZWxTdHIsIGJvb2wm
IHN0eWxlU2hlZXQsIGJvb2wmIGFsdGVybmF0ZSwgYm9vbCYgaWNvbikKIHsKLSAgICBtX2lzU3R5
bGVTaGVldCA9IG1faXNJY29uID0gbV9hbHRlcm5hdGUgPSBmYWxzZTsKKyAgICBzdHlsZVNoZWV0
ID0gZmFsc2U7CisgICAgaWNvbiA9IGZhbHNlOyAKKyAgICBhbHRlcm5hdGUgPSBmYWxzZTsKICAg
ICBTdHJpbmcgcmVsID0gcmVsU3RyLnN0cmluZygpLmxvd2VyKCk7CiAgICAgaWYgKHJlbCA9PSAi
c3R5bGVzaGVldCIpCi0gICAgICAgIG1faXNTdHlsZVNoZWV0ID0gdHJ1ZTsKKyAgICAgICAgc3R5
bGVTaGVldCA9IHRydWU7CiAgICAgZWxzZSBpZiAocmVsID09ICJpY29uIiB8fCByZWwgPT0gInNo
b3J0Y3V0IGljb24iKQotICAgICAgICBtX2lzSWNvbiA9IHRydWU7Ci0gICAgZWxzZSBpZiAocmVs
ID09ICJhbHRlcm5hdGUgc3R5bGVzaGVldCIgfHwgcmVsID09ICJzdHlsZXNoZWV0IGFsdGVybmF0
ZSIpCi0gICAgICAgIG1faXNTdHlsZVNoZWV0ID0gbV9hbHRlcm5hdGUgPSB0cnVlOwotICAgIGVs
c2UgeworICAgICAgICBpY29uID0gdHJ1ZTsKKyAgICBlbHNlIGlmIChyZWwgPT0gImFsdGVybmF0
ZSBzdHlsZXNoZWV0IiB8fCByZWwgPT0gInN0eWxlc2hlZXQgYWx0ZXJuYXRlIikgeworICAgICAg
ICBzdHlsZVNoZWV0ID0gdHJ1ZTsKKyAgICAgICAgYWx0ZXJuYXRlID0gdHJ1ZTsKKyAgICB9IGVs
c2UgewogICAgICAgICAvLyBUb2tlbml6ZSB0aGUgcmVsIGF0dHJpYnV0ZSBhbmQgc2V0IGJpdHMg
YmFzZWQgb24gc3BlY2lmaWMga2V5d29yZHMgdGhhdCB3ZSBmaW5kLgogICAgICAgICByZWwucmVw
bGFjZSgnXG4nLCAnICcpOwogICAgICAgICBWZWN0b3I8U3RyaW5nPiBsaXN0OwpAQCAtMTQyLDEx
ICsxNDUsMTEgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnRva2VuaXplUmVsQXR0cmlidQogICAg
ICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGlzdC5lbmQoKTsKICAg
ICAgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBsaXN0LmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgaWYgKCppdCA9PSAic3R5bGVzaGVl
dCIpCi0gICAgICAgICAgICAgICAgbV9pc1N0eWxlU2hlZXQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIHN0eWxlU2hlZXQgPSB0cnVlOwogICAgICAgICAgICAgZWxzZSBpZiAoKml0ID09ICJhbHRl
cm5hdGUiKQotICAgICAgICAgICAgICAgIG1fYWx0ZXJuYXRlID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBhbHRlcm5hdGUgPSB0cnVlOwogICAgICAgICAgICAgZWxzZSBpZiAoKml0ID09ICJpY29u
IikKLSAgICAgICAgICAgICAgICBtX2lzSWNvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgaWNv
biA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExp
bmtFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5o
CShyZXZpc2lvbiAzMDgxNCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7CiAgICAgCi0gICAgdm9pZCB0b2tlbml6
ZVJlbEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIHJlbCk7CisgICAgc3RhdGljIHZvaWQg
dG9rZW5pemVSZWxBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgYm9vbCYgc3R5
bGVzaGVldCwgYm9vbCYgYWx0ZXJuYXRlLCBib29sJiBpY29uKTsKIAogcHJvdGVjdGVkOgogICAg
IENhY2hlZENTU1N0eWxlU2hlZXQqIG1fY2FjaGVkU2hlZXQ7CkBAIC0xMDAsMTAgKzEwMCwxMCBA
QCBwcm90ZWN0ZWQ6CiAgICAgU3RyaW5nIG1fdHlwZTsKICAgICBTdHJpbmcgbV9tZWRpYTsKICAg
ICBpbnQgbV9kaXNhYmxlZFN0YXRlOyAvLyAwPXVuc2V0KGRlZmF1bHQpLCAxPWVuYWJsZWQgdmlh
IHNjcmlwdCwgMj1kaXNhYmxlZAotICAgIGJvb2wgbV9sb2FkaW5nIDogMTsKLSAgICBib29sIG1f
YWx0ZXJuYXRlIDogMTsKLSAgICBib29sIG1faXNTdHlsZVNoZWV0IDogMTsKLSAgICBib29sIG1f
aXNJY29uIDogMTsKKyAgICBib29sIG1fbG9hZGluZzsKKyAgICBib29sIG1fYWx0ZXJuYXRlOwor
ICAgIGJvb2wgbV9pc1N0eWxlU2hlZXQ7CisgICAgYm9vbCBtX2lzSWNvbjsKIH07CiAKIH0gLy9u
YW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDMwODE0KQorKysg
V2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0
MSw3IEBACiAjaW5jbHVkZSAiSFRNTFBhcnNlci5oIgogI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5oIgorI2luY2x1ZGUgIlBy
ZWxvYWRTY2FubmVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTeXN0ZW1U
aW1lLmgiCiAjaW5jbHVkZSAia2pzX3Byb3h5LmgiCkBAIC00OCw2ICs0OSwxMyBAQAogCiAjaW5j
bHVkZSAiSFRNTEVudGl0eU5hbWVzLmMiCiAKKy8vIEZJWE1FOiB0ZW1wb3JhcnksIGFkZCBQcmVs
b2FkU2Nhbm5lciB0byBhbGwgYnVpbGQgZmlsZXMKKyNpZiBQTEFURk9STShNQUMpCisjZGVmaW5l
IFBSRUxPQURfU0NBTk5FUl9FTkFCTEVEIDEKKyNlbHNlCisjZGVmaW5lIFBSRUxPQURfU0NBTk5F
Ul9FTkFCTEVEIDAKKyNlbmRpZgorCiAvLyAjZGVmaW5lIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVE
VUxJTkcgMQogCiAjaWYgTU9CSUxFCkBAIC00OTksOCArNTA3LDE4IEBAIEhUTUxUb2tlbml6ZXI6
OlN0YXRlIEhUTUxUb2tlbml6ZXI6OnNjcmkKICAgICAgICAgICAgIHdyaXRlKHByZXBlbmRpbmdT
cmMsIGZhbHNlKTsKICAgICAgICAgICAgIHN0YXRlID0gbV9zdGF0ZTsKICAgICAgICAgfQorICAg
IH0gCisgICAgCisjaWYgUFJFTE9BRF9TQ0FOTkVSX0VOQUJMRUQKKyAgICBpZiAoIXBlbmRpbmdT
Y3JpcHRzLmlzRW1wdHkoKSAmJiAhbV9leGVjdXRpbmdTY3JpcHQpIHsKKyAgICAgICAgaWYgKCFt
X3ByZWxvYWRTY2FubmVyKQorICAgICAgICAgICAgbV9wcmVsb2FkU2Nhbm5lci5zZXQobmV3IFBy
ZWxvYWRTY2FubmVyKG1fZG9jKSk7CisgICAgICAgIGlmICghbV9wcmVsb2FkU2Nhbm5lci0+aW5Q
cm9ncmVzcygpKSB7CisgICAgICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5iZWdpbigpOworICAg
ICAgICAgICAgbV9wcmVsb2FkU2Nhbm5lci0+d3JpdGUocGVuZGluZ1NyYyk7CisgICAgICAgIH0K
ICAgICB9Ci0KKyNlbmRpZgogICAgIGN1cnJlbnRQcmVwZW5kaW5nU3JjID0gc2F2ZWRQcmVwZW5k
aW5nU3JjOwogCiAgICAgcmV0dXJuIHN0YXRlOwpAQCAtNTUyLDYgKzU3MCwxNiBAQCBIVE1MVG9r
ZW5pemVyOjpTdGF0ZSBIVE1MVG9rZW5pemVyOjpzY3JpCiAgICAgICAgICAgICAgICAgY3VycmVu
dFByZXBlbmRpbmdTcmMtPmFwcGVuZChwcmVwZW5kaW5nU3JjKTsKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICBwZW5kaW5nU3JjLnByZXBlbmQocHJlcGVuZGluZ1NyYyk7CisgICAg
ICAgICAgICAKKyNpZiBQUkVMT0FEX1NDQU5ORVJfRU5BQkxFRAorICAgICAgICAgICAgLy8gV2Ug
YXJlIHN0dWNrIHdhaXRpbmcgZm9yIGFub3RoZXIgc2NyaXB0LiBMZXRzIGNoZWNrIHRoZSBzb3Vy
Y2UgdGhhdAorICAgICAgICAgICAgLy8gd2FzIGp1c3QgZG9jdW1lbnQud3JpdGUoKW4gZm9yIGFu
eXRoaW5nIHRvIGxvYWQuCisgICAgICAgICAgICAvLyBwcmludGYoIkRPQ1VNRU5ULldSSVRFIFBS
RUxPQURcbiIpOworICAgICAgICAgICAgUHJlbG9hZFNjYW5uZXIgZG9jdW1lbnRXcml0ZVByZWxv
YWRTY2FubmVyKG1fZG9jKTsKKyAgICAgICAgICAgIGRvY3VtZW50V3JpdGVQcmVsb2FkU2Nhbm5l
ci5iZWdpbigpOworICAgICAgICAgICAgZG9jdW1lbnRXcml0ZVByZWxvYWRTY2FubmVyLndyaXRl
KHByZXBlbmRpbmdTcmMpOworICAgICAgICAgICAgZG9jdW1lbnRXcml0ZVByZWxvYWRTY2FubmVy
LmVuZCgpOworI2VuZGlmCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX3N0YXRlID0g
c3RhdGU7CiAgICAgICAgICAgICB3cml0ZShwcmVwZW5kaW5nU3JjLCBmYWxzZSk7CkBAIC0xNTg1
LDEwICsxNjEzLDIwIEBAIGJvb2wgSFRNTFRva2VuaXplcjo6d3JpdGUoY29uc3QgU2VnbWVudGUK
ICAgICAgICAgLy8gZG9uJ3QgcGFyc2U7IHdlIHdpbGwgZG8gdGhpcyBsYXRlcgogICAgICAgICBp
ZiAoY3VycmVudFByZXBlbmRpbmdTcmMpCiAgICAgICAgICAgICBjdXJyZW50UHJlcGVuZGluZ1Ny
Yy0+YXBwZW5kKHNvdXJjZSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICBwZW5kaW5nU3JjLmFwcGVuZChzb3VyY2UpOworI2lmIFBSRUxPQURfU0NBTk5FUl9FTkFC
TEVECisgICAgICAgICAgICBpZiAobV9wcmVsb2FkU2Nhbm5lciAmJiBtX3ByZWxvYWRTY2FubmVy
LT5pblByb2dyZXNzKCkgJiYgYXBwZW5kRGF0YSkKKyAgICAgICAgICAgICAgICBtX3ByZWxvYWRT
Y2FubmVyLT53cml0ZShzb3VyY2UpOworI2VuZGlmCisgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KKyAgICAKKyNpZiBQUkVMT0FEX1NDQU5ORVJfRU5BQkxFRAorICAgIGlm
IChtX3ByZWxvYWRTY2FubmVyICYmIG1fcHJlbG9hZFNjYW5uZXItPmluUHJvZ3Jlc3MoKSAmJiBh
cHBlbmREYXRhKQorICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5lbmQoKTsKKyNlbmRpZgogCiAg
ICAgaWYgKCFzcmMuaXNFbXB0eSgpKQogICAgICAgICBzcmMuYXBwZW5kKHNvdXJjZSk7CkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MVG9rZW5pemVyLmgJKHJldmlzaW9uIDMwODE0KQorKysgV2ViQ29yZS9odG1sL0hUTUxU
b2tlbml6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBjbGFzcyBIVE1MVmll
d1NvdXJjZURvY3VtZW50OwogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgSFRNTFBhcnNlcjsKIGNs
YXNzIE5vZGU7CitjbGFzcyBQcmVsb2FkU2Nhbm5lcjsKIAogLyoqCiAgKiBAaW50ZXJuYWwKQEAg
LTQwMiw2ICs0MDMsMTEgQEAgcHJpdmF0ZToKICAgICBIVE1MUGFyc2VyKiBwYXJzZXI7CiAgICAg
Ym9vbCBpbldyaXRlOwogICAgIGJvb2wgbV9mcmFnbWVudDsKKworLy8gRklYTUU6IHRlbXBvcmFy
eSwgYWRkIFByZWxvYWRTY2FubmVyIHRvIGFsbCBidWlsZCBmaWxlcworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBPd25QdHI8UHJlbG9hZFNjYW5uZXI+IG1fcHJlbG9hZFNjYW5uZXI7CisjZW5kaWYK
IH07CiAKIHZvaWQgcGFyc2VIVE1MRG9jdW1lbnRGcmFnbWVudChjb25zdCBTdHJpbmcmLCBEb2N1
bWVudEZyYWdtZW50Kik7CkluZGV4OiBXZWJDb3JlL2h0bWwvUHJlbG9hZFNjYW5uZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9QcmVsb2FkU2Nhbm5lci5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL2h0bWwvUHJlbG9hZFNjYW5uZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDgyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUHJlbG9hZFNjYW5u
ZXIuaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIkNhY2hlLmgiCisj
aW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgi
CisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNs
aWVudC5oIgorI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgorI2luY2x1ZGUgIkNTU0hlbHBlci5o
IgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEb2NMb2FkZXIuaCIKKyNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKKyNpbmNsdWRlICJIVE1MTGlua0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
KyNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCisKKy8vIFRoZSBtYWluIHRva2VuaXplciBpbmNsdWRl
cyB0aGlzIHRvbyBzbyB3ZSBhcmUgZ2V0dGluZyB0d28gY29waWVzIG9mIHRoZSBkYXRhLiBIb3dl
dmVyLCB0aGlzIHdheSB0aGUgY29kZSBnZXRzIGlubGluZWQuCisjaW5jbHVkZSAiSFRNTEVudGl0
eU5hbWVzLmMiCisKKyNkZWZpbmUgUFJFTE9BRF9ERUJVRyAwCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKyAgICAKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisgICAgCitQcmVsb2FkU2Nhbm5l
cjo6UHJlbG9hZFNjYW5uZXIoRG9jdW1lbnQqIGRvYykKKyAgICA6IG1faW5Qcm9ncmVzcyhmYWxz
ZSkKKyAgICAsIG1fdGltZVVzZWQoMCkKKyAgICAsIG1fZG9jdW1lbnQoZG9jKQoreworI2lmIFBS
RUxPQURfREVCVUcKKyAgICBwcmludGYoIkNSRUFUSU5HIFBSRUxPQUQgU0NBTk5FUiBGT1IgJXNc
biIsIG1fZG9jdW1lbnQtPnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CisjZW5kaWYK
K30KKyAgICAKK1ByZWxvYWRTY2FubmVyOjp+UHJlbG9hZFNjYW5uZXIoKQoreworI2lmIFBSRUxP
QURfREVCVUcKKyAgICBwcmludGYoIkRFTEVUSU5HIFBSRUxPQUQgU0NBTk5FUiBGT1IgJXNcbiIs
IG1fZG9jdW1lbnQtPnVybCgpLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7CisgICAgcHJpbnRm
KCJUT1RBTCBUSU1FIFVTRUQgJS40ZnNcbiIsIG1fdGltZVVzZWQpOworI2VuZGlmCit9CisgICAg
Cit2b2lkIFByZWxvYWRTY2FubmVyOjpiZWdpbigpIAoreyAKKyAgICBBU1NFUlQoIW1faW5Qcm9n
cmVzcyk7IAorICAgIHJlc2V0KCk7IAorICAgIG1faW5Qcm9ncmVzcyA9IHRydWU7IAorfQorICAg
IAordm9pZCBQcmVsb2FkU2Nhbm5lcjo6ZW5kKCkgCit7IAorICAgIEFTU0VSVChtX2luUHJvZ3Jl
c3MpOyAKKyAgICBtX2luUHJvZ3Jlc3MgPSBmYWxzZTsgCit9CisKK3ZvaWQgUHJlbG9hZFNjYW5u
ZXI6OnJlc2V0KCkKK3sKKyAgICBtX3NvdXJjZS5jbGVhcigpOworICAgIAorICAgIG1fc3RhdGUg
PSBEYXRhOworICAgIG1fZXNjYXBlID0gZmFsc2U7CisgICAgbV9jb250ZW50TW9kZWwgPSBQQ0RB
VEE7CisgICAgbV9jb21tZW50UG9zID0gMDsKKworICAgIG1fY2xvc2VUYWcgPSBmYWxzZTsKKyAg
ICBtX3RhZ05hbWUuY2xlYXIoKTsKKyAgICBtX2F0dHJpYnV0ZU5hbWUuY2xlYXIoKTsKKyAgICBt
X2F0dHJpYnV0ZVZhbHVlLmNsZWFyKCk7CisgICAgbV9sYXN0U3RhcnRUYWcgPSBBdG9taWNTdHJp
bmcoKTsKKyAgICAKKyAgICBtX3VybFRvTG9hZCA9ICIiOworICAgIG1fbGlua0lzU3R5bGVTaGVl
dCA9IGZhbHNlOworICAgIG1fbGFzdENoYXJhY3RlckluZGV4ID0gMDsKKyAgICBjbGVhckxhc3RD
aGFyYWN0ZXJzKCk7CisgICAgCisgICAgbV9jc3NTdGF0ZSA9IENTU0luaXRpYWw7CisgICAgbV9j
c3NSdWxlLmNsZWFyKCk7CisgICAgbV9jc3NSdWxlVmFsdWUuY2xlYXIoKTsKK30KKyAgICAKK3Zv
aWQgUHJlbG9hZFNjYW5uZXI6OndyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc291cmNlKQor
eworICAgIGRvdWJsZSBzdGFydFRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIHRva2VuaXplKHNv
dXJjZSk7CisgICAgbV90aW1lVXNlZCArPSBjdXJyZW50VGltZSgpIC0gc3RhcnRUaW1lOworfQor
ICAgIAorc3RhdGljIGlubGluZSBib29sIGlzV2hpdGVzcGFjZShVQ2hhciBjKQoreworICAgIHJl
dHVybiBjID09ICcgJyB8fCBjID09ICdcbicgfHwgYyA9PSAnXHInIHx8IGMgPT0gJ1x0JzsKK30K
KyAgICAKK2lubGluZSB2b2lkIFByZWxvYWRTY2FubmVyOjpjbGVhckxhc3RDaGFyYWN0ZXJzKCkK
K3sKKyAgICBtZW1zZXQobV9sYXN0Q2hhcmFjdGVycywgMCwgbGFzdENoYXJhY3RlcnNCdWZmZXJT
aXplICogc2l6ZW9mKFVDaGFyKSk7Cit9CisgICAgCitpbmxpbmUgdm9pZCBQcmVsb2FkU2Nhbm5l
cjo6cmVtZW1iZXJDaGFyYWN0ZXIoVUNoYXIgYykKK3sKKyAgICBtX2xhc3RDaGFyYWN0ZXJJbmRl
eCA9IChtX2xhc3RDaGFyYWN0ZXJJbmRleCArIDEpICUgbGFzdENoYXJhY3RlcnNCdWZmZXJTaXpl
OworICAgIG1fbGFzdENoYXJhY3RlcnNbbV9sYXN0Q2hhcmFjdGVySW5kZXhdID0gYzsKK30KKyAg
ICAKK2lubGluZSBib29sIFByZWxvYWRTY2FubmVyOjpsYXN0Q2hhcmFjdGVyc01hdGNoKGNvbnN0
IGNoYXIqIGNoYXJzLCB1bnNpZ25lZCBjb3VudCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBwb3Mg
PSBtX2xhc3RDaGFyYWN0ZXJJbmRleDsKKyAgICB3aGlsZSAoY291bnQpIHsKKyAgICAgICAgaWYg
KGNoYXJzW2NvdW50IC0gMV0gIT0gbV9sYXN0Q2hhcmFjdGVyc1twb3NdKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAtLWNvdW50OworICAgICAgICBpZiAoIXBvcykKKyAgICAg
ICAgICAgIHBvcyA9IGxhc3RDaGFyYWN0ZXJzQnVmZmVyU2l6ZTsKKyAgICAgICAgLS1wb3M7Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworfQorICAgIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBs
ZWdhbEVudGl0eUZvcih1bnNpZ25lZCB2YWx1ZSkKK3sKKyAgICAvLyBGSVhNRSB0aGVyZSBpcyBh
IHRhYmxlIGZvciBtb3JlIGV4Y2VwdGlvbnMgaW4gdGhlIHNwZWMKKyAgICBpZiAodmFsdWUgPT0g
MCB8fCB2YWx1ZSA+IDB4MTBGRkZGIHx8ICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhE
RkZGKSkKKyAgICAgICAgcmV0dXJuIDB4RkZGRDsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisgICAg
Cit1bnNpZ25lZCBQcmVsb2FkU2Nhbm5lcjo6Y29uc3VtZUVudGl0eShTZWdtZW50ZWRTdHJpbmcm
IHNvdXJjZSwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycykKK3sKKyAgICBlbnVtIEVudGl0eVN0
YXRlIHsKKyAgICAgICAgSW5pdGlhbCwKKyAgICAgICAgTnVtYmVyVHlwZSwKKyAgICAgICAgTWF5
YmVIZXgsCisgICAgICAgIEhleCwKKyAgICAgICAgRGVjaW1hbCwKKyAgICAgICAgTmFtZWQKKyAg
ICB9OworICAgIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlID0gSW5pdGlhbDsKKyAgICB1bnNpZ25l
ZCByZXN1bHQgPSAwOworICAgIFZlY3RvcjxVQ2hhciwgMTA+IHNlZW5DaGFyczsKKyAgICBWZWN0
b3I8Y2hhciwgMTA+IGVudGl0eU5hbWU7CisgICAgCisgICAgd2hpbGUgKCFzb3VyY2UuaXNFbXB0
eSgpKSB7CisgICAgICAgIFVDaGFyIGNjID0gKnNvdXJjZTsKKyAgICAgICAgc2VlbkNoYXJzLmFw
cGVuZChjYyk7CisgICAgICAgIHN3aXRjaCAoZW50aXR5U3RhdGUpIHsKKyAgICAgICAgY2FzZSBJ
bml0aWFsOgorICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjYykgfHwgY2MgPT0gJzwnIHx8
IGNjID09ICcmJykKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKGNjID09ICcjJykgCisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBOdW1iZXJUeXBl
OworICAgICAgICAgICAgZWxzZSBpZiAoKGNjID49ICdhJyAmJiBjYyA8PSAneicpIHx8IChjYyA+
PSAnQScgJiYgY2MgPD0gJ1onKSkgeworICAgICAgICAgICAgICAgIGVudGl0eU5hbWUuYXBwZW5k
KGNjKTsKKyAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IE5hbWVkOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBOdW1iZXJUeXBlOgorICAgICAgICAgICAgaWYgKGNjID09ICd4JyB8fCBjYyA9
PSAnWCcpCisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBNYXliZUhleDsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpIHsKKyAgICAgICAgICAgICAgICBl
bnRpdHlTdGF0ZSA9IERlY2ltYWw7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY2MgLSAnMCc7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNvdXJjZS5wdXNoKCcjJyk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBNYXliZUhleDoKKyAgICAgICAgICAgIGlmIChjYyA+PSAnMCcg
JiYgY2MgPD0gJzknKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNjIC0gJzAnOworICAgICAg
ICAgICAgZWxzZSBpZiAoY2MgPj0gJ2EnICYmIGNjIDw9ICdmJykKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgPSAxMCArIGNjIC0gJ2EnOworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0gJ0EnICYm
IGNjIDw9ICdGJykKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAxMCArIGNjIC0gJ0EnOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc291cmNlLnB1c2goc2VlbkNoYXJzWzFd
KTsKKyAgICAgICAgICAgICAgICBzb3VyY2UucHVzaCgnIycpOworICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBIZXg7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBIZXg6CisgICAgICAgICAgICBpZiAoY2Mg
Pj0gJzAnICYmIGNjIDw9ICc5JykKKyAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAx
NiArIGNjIC0gJzAnOworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0gJ2EnICYmIGNjIDw9ICdm
JykKKyAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxNiArIDEwICsgY2MgLSAnYSc7
CisgICAgICAgICAgICBlbHNlIGlmIChjYyA+PSAnQScgJiYgY2MgPD0gJ0YnKQorICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDE2ICsgMTAgKyBjYyAtICdBJzsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGNjID09ICc7JykgeworICAgICAgICAgICAgICAgIHNvdXJjZS5hZHZhbmNlKCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGxlZ2FsRW50aXR5Rm9yKHJlc3VsdCk7CisgICAgICAg
ICAgICB9IGVsc2UgCisgICAgICAgICAgICAgICAgcmV0dXJuIGxlZ2FsRW50aXR5Rm9yKHJlc3Vs
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEZWNpbWFsOgorICAgICAgICAg
ICAgaWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
cmVzdWx0ICogMTAgKyBjYyAtICcwJzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc7Jykg
eworICAgICAgICAgICAgICAgIHNvdXJjZS5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGxlZ2FsRW50aXR5Rm9yKHJlc3VsdCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbGVnYWxFbnRpdHlGb3IocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFr
OyAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIE5hbWVkOgorICAgICAgICAgICAgLy8gVGhp
cyBpcyB0aGUgYXR0cmlidXRlIG9ubHkgdmVyc2lvbiwgZ2VuZXJpYyB2ZXJzaW9uIG1hdGNoZXMg
c29tZXdoYXQgZGlmZmVyZW50bHkKKyAgICAgICAgICAgIHdoaWxlIChlbnRpdHlOYW1lLnNpemUo
KSA8PSA4KSB7CisgICAgICAgICAgICAgICAgaWYgKGNjID09ICc7JykgeworICAgICAgICAgICAg
ICAgICAgICBjb25zdCBFbnRpdHkqIGVudGl0eSA9IGZpbmRFbnRpdHkoZW50aXR5TmFtZS5kYXRh
KCksIGVudGl0eU5hbWUuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVudGl0eSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmFkdmFuY2UoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlbnRpdHktPmNvZGU7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmICghKGNjID49ICdhJyAmJiBjYyA8PSAneicpICYmICEoY2MgPj0gJ0EnICYmIGNj
IDw9ICdaJykgJiYgIShjYyA+PSAnMCcgJiYgY2MgPD0gJzknKSkgeworICAgICAgICAgICAgICAg
ICAgICBjb25zdCBFbnRpdHkqIGVudGl0eSA9IGZpbmRFbnRpdHkoZW50aXR5TmFtZS5kYXRhKCks
IGVudGl0eU5hbWUuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVudGl0eSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRpdHktPmNvZGU7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbnRpdHlO
YW1lLmFwcGVuZChjYyk7CisgICAgICAgICAgICAgICAgc291cmNlLmFkdmFuY2UoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoc291cmNlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgZ290
byBvdXRPZkNoYXJhY3RlcnM7CisgICAgICAgICAgICAgICAgY2MgPSAqc291cmNlOworICAgICAg
ICAgICAgICAgIHNlZW5DaGFycy5hcHBlbmQoY2MpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKHNlZW5DaGFycy5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICBzb3VyY2UucHVz
aChzZWVuQ2hhcnNbMF0pOworICAgICAgICAgICAgZWxzZSBpZiAoc2VlbkNoYXJzLnNpemUoKSA9
PSAzKSB7CisgICAgICAgICAgICAgICAgc291cmNlLnB1c2goc2VlbkNoYXJzWzFdKTsKKyAgICAg
ICAgICAgICAgICBzb3VyY2UucHVzaChzZWVuQ2hhcnNbMF0pOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgc291cmNlLnByZXBlbmQoU2VnbWVudGVkU3RyaW5nKFN0cmluZyhz
ZWVuQ2hhcnMuZGF0YSgpLCBzZWVuQ2hhcnMuc2l6ZSgpIC0gMSkpKTsKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICB9CisgICAgICAgIHNvdXJjZS5hZHZhbmNlKCk7CisgICAgfQorb3V0
T2ZDaGFyYWN0ZXJzOgorICAgIG5vdEVub3VnaENoYXJhY3RlcnMgPSB0cnVlOworICAgIHNvdXJj
ZS5wcmVwZW5kKFNlZ21lbnRlZFN0cmluZyhTdHJpbmcoc2VlbkNoYXJzLmRhdGEoKSwgc2VlbkNo
YXJzLnNpemUoKSkpKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBQcmVsb2FkU2Nhbm5lcjo6
dG9rZW5pemUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UpCit7CisgICAgQVNTRVJUKG1f
aW5Qcm9ncmVzcyk7CisgICAgCisgICAgbV9zb3VyY2UuYXBwZW5kKHNvdXJjZSk7CisKKyAgICAv
LyBUaGlzIGlzIGEgc2ltcGxpZmllZCBIVE1MNSBUb2tlbml6ZXIKKyAgICB3aGlsZSAoIW1fc291
cmNlLmlzRW1wdHkoKSkgeworICAgICAgICBVQ2hhciBjYyA9ICptX3NvdXJjZTsKKyAgICAgICAg
c3dpdGNoIChtX3N0YXRlKSB7CisgICAgICAgIGNhc2UgRGF0YToKKyAgICAgICAgICAgIHdoaWxl
ICgxKSB7CisgICAgICAgICAgICAgICAgcmVtZW1iZXJDaGFyYWN0ZXIoY2MpOworICAgICAgICAg
ICAgICAgIGlmIChjYyA9PSAnJicpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fY29udGVu
dE1vZGVsID09IFBDREFUQSB8fCBtX2NvbnRlbnRNb2RlbCA9PSBSQ0RBVEEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBFbnRpdHlEYXRhOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGNjID09ICctJykgeworICAgICAgICAgICAgICAgICAgICBpZiAoKG1fY29udGVudE1v
ZGVsID09IFJDREFUQSB8fCBtX2NvbnRlbnRNb2RlbCA9PSBDREFUQSkgJiYgIW1fZXNjYXBlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdENoYXJhY3RlcnNNYXRjaCgiPCEtLSIs
IDQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZXNjYXBlID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2MgPT0gJzwnKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2NvbnRlbnRNb2RlbCA9PSBQQ0RBVEEgfHwgKCht
X2NvbnRlbnRNb2RlbCA9PSBSQ0RBVEEgfHwgbV9jb250ZW50TW9kZWwgPT0gQ0RBVEEpICYmICFt
X2VzY2FwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBUYWdPcGVuOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNjID09ICc+JykgeworICAgICAgICAgICAgICAgICAg
ICAgaWYgKChtX2NvbnRlbnRNb2RlbCA9PSBSQ0RBVEEgfHwgbV9jb250ZW50TW9kZWwgPT0gQ0RB
VEEpICYmIG1fZXNjYXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RDaGFy
YWN0ZXJzTWF0Y2goIi0tPiIsIDMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Vz
Y2FwZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbWl0Q2hhcmFjdGVyKGNjKTsKKyAgICAgICAgICAgICAgICBtX3Nv
dXJjZS5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgaWYgKG1fc291cmNlLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjYyA9ICptX3Nv
dXJjZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVu
dGl0eURhdGE6CisgICAgICAgICAgICAvLyBzaG91bGQgdHJ5IHRvIGNvbnN1bWUgdGhlIGVudGl0
eSBidXQgd2Ugb25seSBjYXJlIGFib3V0IGVudGl0aWVzIGluIGF0dHJpYnV0ZXMKKyAgICAgICAg
ICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGFn
T3BlbjoKKyAgICAgICAgICAgIGlmIChtX2NvbnRlbnRNb2RlbCA9PSBSQ0RBVEEgfHwgbV9jb250
ZW50TW9kZWwgPT0gQ0RBVEEpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJy8nKQorICAg
ICAgICAgICAgICAgICAgICBtX3N0YXRlID0gQ2xvc2VUYWdPcGVuOworICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IGlmIChtX2NvbnRlbnRNb2RlbCA9PSBQQ0RBVEEpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2Mg
PT0gJyEnKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gTWFya3VwRGVjbGFyYXRpb25P
cGVuOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICcvJykKKyAgICAgICAgICAgICAg
ICAgICAgbV9zdGF0ZSA9IENsb3NlVGFnT3BlbjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChj
YyA+PSAnQScgJiYgY2MgPD0gJ1onKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdGFnTmFtZS5j
bGVhcigpOworICAgICAgICAgICAgICAgICAgICBtX3RhZ05hbWUuYXBwZW5kKGNjICsgMHgyMCk7
CisgICAgICAgICAgICAgICAgICAgIG1fY2xvc2VUYWcgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9zdGF0ZSA9IFRhZ05hbWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA+
PSAnYScgJiYgY2MgPD0gJ3onKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdGFnTmFtZS5jbGVh
cigpOworICAgICAgICAgICAgICAgICAgICBtX3RhZ05hbWUuYXBwZW5kKGNjKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9jbG9zZVRhZyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlID0gVGFnTmFtZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNjID09ICc+Jykgewor
ICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGNjID09ICc/JykgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gQm9ndXND
b21tZW50OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1f
c3RhdGUgPSBEYXRhOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
bG9zZVRhZ09wZW46CisgICAgICAgICAgICBpZiAobV9jb250ZW50TW9kZWwgPT0gUkNEQVRBIHx8
IG1fY29udGVudE1vZGVsID09IENEQVRBKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX2xhc3RT
dGFydFRhZy5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChtX3NvdXJjZS5sZW5ndGgoKSA8IG1fbGFzdFN0YXJ0VGFnLmxlbmd0aCgp
ICsgMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIFZlY3Rv
cjxVQ2hhcj4gdG1wU3RyaW5nOworICAgICAgICAgICAgICAgIFVDaGFyIHRtcENoYXI7CisgICAg
ICAgICAgICAgICAgYm9vbCBtYXRjaCA9IHRydWU7CisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBuID0gMDsgbiA8IG1fbGFzdFN0YXJ0VGFnLmxlbmd0aCgpICsgMTsgbisrKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRtcENoYXIgPSB1X3RvbG93ZXIoKm1fc291cmNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG4gPCBtX2xhc3RTdGFydFRhZy5sZW5ndGgoKSAmJiB0bXBDaGFyICE9
IG1fbGFzdFN0YXJ0VGFnW25dKQorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgdG1wU3RyaW5nLmFwcGVuZCh0bXBDaGFyKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9zb3VyY2UuYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBtX3NvdXJjZS5wcmVwZW5kKFNlZ21lbnRlZFN0cmluZyhTdHJpbmcodG1w
U3RyaW5nLmRhdGEoKSwgdG1wU3RyaW5nLnNpemUoKSkpKTsKKyAgICAgICAgICAgICAgICBpZiAo
IW1hdGNoIHx8ICghaXNXaGl0ZXNwYWNlKHRtcENoYXIpICYmIHRtcENoYXIgIT0gJz4nICYgdG1w
Q2hhciAhPSAnLycpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOworICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoY2MgPj0gJ0EnICYmIGNjIDw9ICdaJykgeworICAgICAgICAg
ICAgICAgIG1fdGFnTmFtZS5jbGVhcigpOworICAgICAgICAgICAgICAgIG1fdGFnTmFtZS5hcHBl
bmQoY2MgKyAweDIwKTsKKyAgICAgICAgICAgICAgICBtX2Nsb3NlVGFnID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBtX3N0YXRlID0gVGFnTmFtZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2Mg
Pj0gJ2EnICYmIGNjIDw9ICd6JykgeworICAgICAgICAgICAgICAgIG1fdGFnTmFtZS5jbGVhcigp
OworICAgICAgICAgICAgICAgIG1fdGFnTmFtZS5hcHBlbmQoY2MpOworICAgICAgICAgICAgICAg
IG1fY2xvc2VUYWcgPSB0cnVlOworICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBUYWdOYW1lOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnPicpIHsKKyAgICAgICAgICAgICAgICBtX3N0
YXRlID0gRGF0YTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1fc3RhdGUg
PSBCb2d1c0NvbW1lbnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUYWdOYW1l
OgorICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNXaGl0ZXNw
YWNlKGNjKSkgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gQmVmb3JlQXR0cmlidXRl
TmFtZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChjYyA9PSAnPicpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdFRh
ZygpOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjYyA9
PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEJlZm9yZUF0dHJpYnV0ZU5h
bWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoY2MgPj0gJ0EnICYmIGNjIDw9ICdaJykKKyAgICAgICAgICAgICAgICAg
ICAgbV90YWdOYW1lLmFwcGVuZChjYyArIDB4MjApOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgbV90YWdOYW1lLmFwcGVuZChjYyk7CisgICAgICAgICAgICAgICAg
bV9zb3VyY2UuYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIGlmIChtX3NvdXJjZS5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjYyA9ICpt
X3NvdXJjZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEJlZm9yZUF0dHJpYnV0ZU5hbWU6CisgICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNjKSkK
KyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnPicpIHsKKyAg
ICAgICAgICAgICAgICBlbWl0VGFnKCk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNjID49ICdBJyAmJiBjYyA8PSAnWicpIHsKKyAgICAg
ICAgICAgICAgICBtX2F0dHJpYnV0ZU5hbWUuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBtX2F0
dHJpYnV0ZVZhbHVlLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVOYW1lLmFw
cGVuZChjYyArIDB4MjApOworICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBBdHRyaWJ1dGVOYW1l
OworICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA9PSAnLycpCisgICAgICAgICAgICAgICAgOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVOYW1lLmNsZWFy
KCk7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVWYWx1ZS5jbGVhcigpOworICAgICAgICAg
ICAgICAgIG1fYXR0cmlidXRlTmFtZS5hcHBlbmQoY2MpOworICAgICAgICAgICAgICAgIG1fc3Rh
dGUgPSBBdHRyaWJ1dGVOYW1lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQXR0cmlidXRlTmFtZToKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjYykpIHsKKyAgICAgICAgICAgICAgICAgICAg
bV9zdGF0ZSA9IEFmdGVyQXR0cmlidXRlTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnPScpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEJlZm9yZUF0dHJpYnV0ZVZhbHVlOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKGNjID09ICc+JykgeworICAgICAgICAgICAgICAgICAgICBlbWl0VGFnKCk7CisgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnLycpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEJlZm9yZUF0dHJpYnV0ZU5hbWU7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoY2MgPj0gJ0EnICYmIGNjIDw9ICdaJykKKyAgICAgICAgICAgICAgICAgICAgbV9hdHRyaWJ1
dGVOYW1lLmFwcGVuZChjYyArIDB4MjApOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgbV9hdHRyaWJ1dGVOYW1lLmFwcGVuZChjYyk7CisgICAgICAgICAgICAgICAg
bV9zb3VyY2UuYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIGlmIChtX3NvdXJjZS5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjYyA9ICpt
X3NvdXJjZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEFmdGVyQXR0cmlidXRlTmFtZToKKyAgICAgICAgICAgIGlmIChpc1doaXRlc3BhY2UoY2MpKQor
ICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc9JykKKyAgICAg
ICAgICAgICAgICBtX3N0YXRlID0gQmVmb3JlQXR0cmlidXRlVmFsdWU7IAorICAgICAgICAgICAg
ZWxzZSBpZiAoY2MgPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgZW1pdFRhZygpOworICAgICAg
ICAgICAgICAgIG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgfSBlbHNlIGlmIChjYyA+PSAn
QScgJiYgY2MgPD0gJ1onKSB7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVOYW1lLmNsZWFy
KCk7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVWYWx1ZS5jbGVhcigpOworICAgICAgICAg
ICAgICAgIG1fYXR0cmlidXRlTmFtZS5hcHBlbmQoY2MgKyAweDIwKTsKKyAgICAgICAgICAgICAg
ICBtX3N0YXRlID0gQXR0cmlidXRlTmFtZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2MgPT0g
Jy8nKQorICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBCZWZvcmVBdHRyaWJ1dGVOYW1lOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVOYW1lLmNsZWFyKCk7
CisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVWYWx1ZS5jbGVhcigpOworICAgICAgICAgICAg
ICAgIG1fYXR0cmlidXRlTmFtZS5hcHBlbmQoY2MpOworICAgICAgICAgICAgICAgIG1fc3RhdGUg
PSBBdHRyaWJ1dGVOYW1lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQmVmb3JlQXR0cmlidXRlVmFsdWU6CisgICAgICAgICAgICBpZiAoaXNXaGl0ZXNw
YWNlKGNjKSkKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAn
IicpCisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEF0dHJpYnV0ZVZhbHVlRG91YmxlUXVvdGVk
OworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPT0gJyYnKSB7CisgICAgICAgICAgICAgICAgbV9z
dGF0ZSA9IEF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQ7CisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNjID09ICdcJycpCisgICAgICAgICAgICAgICAgbV9z
dGF0ZSA9IEF0dHJpYnV0ZVZhbHVlU2luZ2xlUXVvdGVkOworICAgICAgICAgICAgZWxzZSBpZiAo
Y2MgPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgZW1pdFRhZygpOworICAgICAgICAgICAgICAg
IG1fc3RhdGUgPSBEYXRhOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBt
X2F0dHJpYnV0ZVZhbHVlLmFwcGVuZChjYyk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEF0
dHJpYnV0ZVZhbHVlVW5xdW90ZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBdHRyaWJ1dGVWYWx1ZURvdWJsZVF1b3RlZDoKKyAgICAgICAgICAgIHdo
aWxlICgxKSB7CisgICAgICAgICAgICAgICAgaWYgKGNjID09ICciJykgeworICAgICAgICAgICAg
ICAgICAgICBwcm9jZXNzQXR0cmlidXRlKCk7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUg
PSBCZWZvcmVBdHRyaWJ1dGVOYW1lOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNjID09ICcmJykgeworICAgICAgICAg
ICAgICAgICAgICBtX3N0YXRlQmVmb3JlRW50aXR5SW5BdHRyaWJ1dGVWYWx1ZSA9IG1fc3RhdGU7
CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBFbnRpdHlJbkF0dHJpYnV0ZVZhbHVlOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IAorICAgICAgICAg
ICAgICAgIG1fYXR0cmlidXRlVmFsdWUuYXBwZW5kKGNjKTsKKyAgICAgICAgICAgICAgICBtX3Nv
dXJjZS5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgaWYgKG1fc291cmNlLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGNjID0gKm1fc291
cmNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXR0
cmlidXRlVmFsdWVTaW5nbGVRdW90ZWQ6CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAg
ICAgICAgICAgIGlmIChjYyA9PSAnXCcnKSB7CisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NB
dHRyaWJ1dGUoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IEJlZm9yZUF0dHJpYnV0
ZU5hbWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoY2MgPT0gJyYnKSB7CisgICAgICAgICAgICAgICAgICAgIG1fc3Rh
dGVCZWZvcmVFbnRpdHlJbkF0dHJpYnV0ZVZhbHVlID0gbV9zdGF0ZTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9zdGF0ZSA9IEVudGl0eUluQXR0cmlidXRlVmFsdWU7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1
dGVWYWx1ZS5hcHBlbmQoY2MpOworICAgICAgICAgICAgICAgIG1fc291cmNlLmFkdmFuY2UoKTsK
KyAgICAgICAgICAgICAgICBpZiAobV9zb3VyY2UuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY2MgPSAqbV9zb3VyY2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBdHRyaWJ1dGVWYWx1ZVVucXVv
dGVkOgorICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNXaGl0
ZXNwYWNlKGNjKSkgeworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQXR0cmlidXRlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBCZWZvcmVBdHRyaWJ1dGVOYW1lOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKGNjID09ICcmJykgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlQmVmb3JlRW50aXR5
SW5BdHRyaWJ1dGVWYWx1ZSA9IG1fc3RhdGU7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUg
PSBFbnRpdHlJbkF0dHJpYnV0ZVZhbHVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNjID09ICc+JykgeworICAgICAg
ICAgICAgICAgICAgICBwcm9jZXNzQXR0cmlidXRlKCk7CisgICAgICAgICAgICAgICAgICAgIGVt
aXRUYWcoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2F0
dHJpYnV0ZVZhbHVlLmFwcGVuZChjYyk7CisgICAgICAgICAgICAgICAgbV9zb3VyY2UuYWR2YW5j
ZSgpOworICAgICAgICAgICAgICAgIGlmIChtX3NvdXJjZS5pc0VtcHR5KCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjYyA9ICptX3NvdXJjZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVudGl0eUluQXR0cmli
dXRlVmFsdWU6IAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgbm90RW5vdWdo
Q2hhcmFjdGVycyA9IGZhbHNlOyAKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBlbnRpdHkgPSBj
b25zdW1lRW50aXR5KG1fc291cmNlLCBub3RFbm91Z2hDaGFyYWN0ZXJzKTsKKyAgICAgICAgICAg
ICAgICBpZiAobm90RW5vdWdoQ2hhcmFjdGVycykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIGlmIChlbnRpdHkgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbV9hdHRyaWJ1dGVWYWx1ZS5hcHBlbmQoVTE2X0xFQUQoZW50aXR5KSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fYXR0cmlidXRlVmFsdWUuYXBwZW5kKFUxNl9UUkFJTChlbnRpdHkpKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVudGl0eSkKKyAgICAgICAgICAgICAgICAgICAg
bV9hdHRyaWJ1dGVWYWx1ZS5hcHBlbmQoZW50aXR5KTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIG1fYXR0cmlidXRlVmFsdWUuYXBwZW5kKCcmJyk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBtX3N0YXRlID0gbV9zdGF0ZUJlZm9yZUVudGl0eUluQXR0cmli
dXRlVmFsdWU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSBCb2d1c0NvbW1l
bnQ6CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIGlmIChjYyA9PSAn
PicpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX3NvdXJj
ZS5hZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgaWYgKG1fc291cmNlLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGNjID0gKm1fc291cmNl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWFya3Vw
RGVjbGFyYXRpb25PcGVuOiB7CisgICAgICAgICAgICBpZiAoY2MgPT0gJy0nKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG1fc291cmNlLmxlbmd0aCgpIDwgMikKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIG1fc291cmNlLmFkdmFuY2UoKTsKKyAgICAgICAgICAg
ICAgICBjYyA9ICptX3NvdXJjZTsKKyAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJy0nKQorICAg
ICAgICAgICAgICAgICAgICBtX3N0YXRlID0gQ29tbWVudFN0YXJ0OworICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlID0gQm9ndXNDb21tZW50OworICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyBJZiB3ZSBjYXJlZCBhYm91dCB0aGUgRE9DVFlQRSB3ZSB3b3VsZCB0ZXN0IHRvIGVudGVy
IHRob3NlIHN0YXRlcyBoZXJlCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IG1fc3RhdGUgPSBCb2d1c0NvbW1lbnQ7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENv
bW1lbnRTdGFydDoKKyAgICAgICAgICAgIGlmIChjYyA9PSAnLScpCisgICAgICAgICAgICAgICAg
bV9zdGF0ZSA9IENvbW1lbnRTdGFydERhc2g7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAn
PicpCisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IERhdGE7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbV9zdGF0ZSA9IENvbW1lbnQ7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDb21tZW50U3RhcnREYXNoOgorICAgICAgICAgICAgaWYgKGNjID09ICctJykK
KyAgICAgICAgICAgICAgICBtX3N0YXRlID0gQ29tbWVudEVuZDsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKGNjID09ICc+JykKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gQ29tbWVudDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENvbW1lbnQ6CisgICAgICAgICAgICB3aGlsZSAoMSkgewor
ICAgICAgICAgICAgICAgIGlmIChjYyA9PSAnLScpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9z
dGF0ZSA9IENvbW1lbnRFbmREYXNoOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9zb3VyY2UuYWR2YW5jZSgpOworICAgICAg
ICAgICAgICAgIGlmIChtX3NvdXJjZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICBjYyA9ICptX3NvdXJjZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbW1lbnRFbmREYXNoOgorICAgICAgICAg
ICAgaWYgKGNjID09ICctJykKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gQ29tbWVudEVuZDsK
KyAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IENvbW1lbnQ7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb21tZW50RW5kOgorICAgICAgICAgICAg
aWYgKGNjID09ICc+JykKKyAgICAgICAgICAgICAgICBtX3N0YXRlID0gRGF0YTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGNjID09ICctJykKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBl
bHNlIAorICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBDb21tZW50OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgbV9zb3VyY2UuYWR2YW5jZSgpOworICAgIH0KK30KKyAg
ICAKK3ZvaWQgUHJlbG9hZFNjYW5uZXI6OnByb2Nlc3NBdHRyaWJ1dGUoKQoreworICAgIEF0b21p
Y1N0cmluZyB0YWcgPSBBdG9taWNTdHJpbmcobV90YWdOYW1lLmRhdGEoKSwgbV90YWdOYW1lLnNp
emUoKSk7CisgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZSA9IEF0b21pY1N0cmluZyhtX2F0dHJp
YnV0ZU5hbWUuZGF0YSgpLCBtX2F0dHJpYnV0ZU5hbWUuc2l6ZSgpKTsKKyAgICAKKyAgICBTdHJp
bmcgdmFsdWUobV9hdHRyaWJ1dGVWYWx1ZS5kYXRhKCksIG1fYXR0cmlidXRlVmFsdWUuc2l6ZSgp
KTsKKyAgICBpZiAodGFnID09IHNjcmlwdFRhZyB8fCB0YWcgPT0gaW1nVGFnKSB7CisgICAgICAg
IGlmIChhdHRyaWJ1dGUgPT0gc3JjQXR0ciAmJiBtX3VybFRvTG9hZC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBtX3VybFRvTG9hZCA9IHBhcnNlVVJMKHZhbHVlKTsKKyAgICB9IGVsc2UgaWYgKHRh
ZyA9PSBsaW5rVGFnKSB7CisgICAgICAgIGlmIChhdHRyaWJ1dGUgPT0gaHJlZkF0dHIgJiYgbV91
cmxUb0xvYWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV91cmxUb0xvYWQgPSBwYXJzZVVSTCh2
YWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZSA9PSByZWxBdHRyKSB7CisgICAgICAg
ICAgICBib29sIHN0eWxlU2hlZXQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJvb2wgYWx0ZXJuYXRl
ID0gZmFsc2U7CisgICAgICAgICAgICBib29sIGljb24gPSBmYWxzZTsKKyAgICAgICAgICAgIEhU
TUxMaW5rRWxlbWVudDo6dG9rZW5pemVSZWxBdHRyaWJ1dGUodmFsdWUsIHN0eWxlU2hlZXQsIGFs
dGVybmF0ZSwgaWNvbik7CisgICAgICAgICAgICBtX2xpbmtJc1N0eWxlU2hlZXQgPSBzdHlsZVNo
ZWV0ICYmICFhbHRlcm5hdGUgJiYgIWljb247CisgICAgICAgIH0KKyAgICB9Cit9CisgICAgCitp
bmxpbmUgdm9pZCBQcmVsb2FkU2Nhbm5lcjo6ZW1pdENoYXJhY3RlcihVQ2hhciBjKQoreworICAg
IGlmIChtX2NvbnRlbnRNb2RlbCA9PSBDREFUQSAmJiBtX2xhc3RTdGFydFRhZyA9PSBzdHlsZVRh
ZykgCisgICAgICAgIHRva2VuaXplQ1NTKGMpOworfQorICAgIAoraW5saW5lIHZvaWQgUHJlbG9h
ZFNjYW5uZXI6OnRva2VuaXplQ1NTKFVDaGFyIGMpCit7ICAgIAorICAgIC8vIFdlIGFyZSBqdXN0
IGludGVyZXN0ZWQgaW4gQGltcG9ydCBydWxlcywgbm8gbmVlZCBmb3IgcmVhbCB0b2tlbml6YXRp
b24gaGVyZQorICAgIC8vIFNlYXJjaGluZyBmb3Igb3RoZXIgdHlwZXMgb2YgcmVzb3VyY2VzIGlz
IHByb2JhYmx5IGxvdyBwYXlvZmYKKyAgICBzd2l0Y2ggKG1fY3NzU3RhdGUpIHsKKyAgICBjYXNl
IENTU0luaXRpYWw6CisgICAgICAgIGlmIChjID09ICdAJykKKyAgICAgICAgICAgIG1fY3NzU3Rh
dGUgPSBDU1NSdWxlU3RhcnQ7CisgICAgICAgIGVsc2UgaWYgKGMgPT0gJy8nKQorICAgICAgICAg
ICAgbV9jc3NTdGF0ZSA9IENTU01heWJlQ29tbWVudDsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDU1NNYXliZUNvbW1lbnQ6CisgICAgICAgIGlmIChjID09ICcqJykKKyAgICAgICAgICAgIG1f
Y3NzU3RhdGUgPSBDU1NDb21tZW50OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Nzc1N0
YXRlID0gQ1NTSW5pdGlhbDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NDb21tZW50Ogor
ICAgICAgICBpZiAoYyA9PSAnKicpCisgICAgICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTTWF5YmVD
b21tZW50RW5kOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU01heWJlQ29tbWVudEVuZDoK
KyAgICAgICAgaWYgKGMgPT0gJy8nKQorICAgICAgICAgICAgbV9jc3NTdGF0ZSA9IENTU0luaXRp
YWw7CisgICAgICAgIGVsc2UgaWYgKGMgPT0gJyonKQorICAgICAgICAgICAgOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTQ29tbWVudDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDU1NSdWxlU3RhcnQ6CisgICAgICAgIGlmICgoYyA+PSAnQScgJiYgYyA8PSAn
WicpIHx8IChjID49ICdhJyAmJiBjIDw9ICd6JykpIHsKKyAgICAgICAgICAgIG1fY3NzUnVsZS5j
bGVhcigpOworICAgICAgICAgICAgbV9jc3NSdWxlVmFsdWUuY2xlYXIoKTsKKyAgICAgICAgICAg
IG1fY3NzUnVsZS5hcHBlbmQoYyk7CisgICAgICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTUnVsZTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTSW5pdGlhbDsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NSdWxlOgorICAgICAgICBpZiAoaXNXaGl0ZXNwYWNl
KGMpKQorICAgICAgICAgICAgbV9jc3NTdGF0ZSA9IENTU0FmdGVyUnVsZTsKKyAgICAgICAgZWxz
ZSBpZiAoYyA9PSAnOycpCisgICAgICAgICAgICBtX2Nzc1N0YXRlID0gQ1NTSW5pdGlhbDsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9jc3NSdWxlLmFwcGVuZChjKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDU1NBZnRlclJ1bGU6CisgICAgICAgIGlmIChpc1doaXRlc3BhY2UoYykp
CisgICAgICAgICAgICA7CisgICAgICAgIGVsc2UgaWYgKGMgPT0gJzsnKQorICAgICAgICAgICAg
bV9jc3NTdGF0ZSA9IENTU0luaXRpYWw7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9j
c3NTdGF0ZSA9IENTU1J1bGVWYWx1ZTsKKyAgICAgICAgICAgIG1fY3NzUnVsZVZhbHVlLmFwcGVu
ZChjKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1J1bGVWYWx1ZToK
KyAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjKSkKKyAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBD
U1NBZmVyUnVsZVZhbHVlOworICAgICAgICBlbHNlIGlmIChjID09ICc7JykgeworICAgICAgICAg
ICAgZW1pdENTU1J1bGUoKTsKKyAgICAgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NJbml0aWFsOwor
ICAgICAgICB9IGVsc2UgCisgICAgICAgICAgICBtX2Nzc1J1bGVWYWx1ZS5hcHBlbmQoYyk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTQWZlclJ1bGVWYWx1ZToKKyAgICAgICAgaWYgKGlz
V2hpdGVzcGFjZShjKSkKKyAgICAgICAgICAgIDsKKyAgICAgICAgZWxzZSBpZiAoYyA9PSAnOycp
IHsKKyAgICAgICAgICAgIGVtaXRDU1NSdWxlKCk7CisgICAgICAgICAgICBtX2Nzc1N0YXRlID0g
Q1NTSW5pdGlhbDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FIG1lZGlh
IHJ1bGVzCisgICAgICAgICAgICAgbV9jc3NTdGF0ZSA9IENTU0luaXRpYWw7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorICAgIAordm9pZCBQcmVsb2FkU2Nhbm5lcjo6ZW1p
dFRhZygpCit7CisgICAgaWYgKG1fY2xvc2VUYWcpIHsKKyAgICAgICAgbV9jb250ZW50TW9kZWwg
PSBQQ0RBVEE7CisgICAgICAgIG1fY3NzU3RhdGUgPSBDU1NJbml0aWFsOworICAgICAgICBjbGVh
ckxhc3RDaGFyYWN0ZXJzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQXRv
bWljU3RyaW5nIHRhZyhtX3RhZ05hbWUuZGF0YSgpLCBtX3RhZ05hbWUuc2l6ZSgpKTsKKyAgICBt
X2xhc3RTdGFydFRhZyA9IHRhZzsKKyAgICAKKyAgICBpZiAodGFnID09IHRleHRhcmVhVGFnIHx8
IHRhZyA9PSB0aXRsZVRhZykKKyAgICAgICAgbV9jb250ZW50TW9kZWwgPSBSQ0RBVEE7CisgICAg
ZWxzZSBpZiAodGFnID09IHN0eWxlVGFnIHx8IHRhZyA9PSB4bXBUYWcgfHwgdGFnID09IHNjcmlw
dFRhZyB8fCB0YWcgPT0gaWZyYW1lVGFnIHx8IHRhZyA9PSBub2VtYmVkVGFnIHx8IHRhZyA9PSBu
b2ZyYW1lc1RhZykKKyAgICAgICAgbV9jb250ZW50TW9kZWwgPSBDREFUQTsKKyAgICBlbHNlIGlm
ICh0YWcgPT0gbm9zY3JpcHRUYWcpCisgICAgICAgIC8vIHdlIHdvdWxkbid0IGJlIGhlcmUgaWYg
c2NyaXB0cyB3ZXJlIGRpc2FibGVkCisgICAgICAgIG1fY29udGVudE1vZGVsID0gQ0RBVEE7Cisg
ICAgZWxzZSBpZiAodGFnID09IHBsYWludGV4dFRhZykKKyAgICAgICAgbV9jb250ZW50TW9kZWwg
PSBQTEFJTlRFWFQ7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRlbnRNb2RlbCA9IFBDREFUQTsK
KyAgICAKKyAgICBpZiAoIW1fdXJsVG9Mb2FkLmlzRW1wdHkoKSkgeworICAgICAgICBDYWNoZWRS
ZXNvdXJjZSogcmVzb3VyY2UgPSAwOworICAgICAgICBpZiAodGFnID09IHNjcmlwdFRhZykKKyAg
ICAgICAgICAgIHJlc291cmNlID0gbV9kb2N1bWVudC0+ZG9jTG9hZGVyKCktPnJlcXVlc3RTY3Jp
cHQobV91cmxUb0xvYWQsIG1fZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5lbmNvZGluZygp
KTsgCisgICAgICAgIGVsc2UgaWYgKHRhZyA9PSBpbWdUYWcpIAorICAgICAgICAgICAgcmVzb3Vy
Y2UgPSBtX2RvY3VtZW50LT5kb2NMb2FkZXIoKS0+cmVxdWVzdEltYWdlKG1fdXJsVG9Mb2FkKTsK
KyAgICAgICAgZWxzZSBpZiAodGFnID09IGxpbmtUYWcgJiYgbV9saW5rSXNTdHlsZVNoZWV0KSAK
KyAgICAgICAgICAgIHJlc291cmNlID0gbV9kb2N1bWVudC0+ZG9jTG9hZGVyKCktPnJlcXVlc3RD
U1NTdHlsZVNoZWV0KG1fdXJsVG9Mb2FkLCBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+
ZW5jb2RpbmcoKSk7CisgICAgICAgIG1fZG9jdW1lbnQtPmRvY0xvYWRlcigpLT5yZWdpc3RlclBy
ZWxvYWQocmVzb3VyY2UpOworICAgIH0KKyAgICAgICAgCisgICAgbV91cmxUb0xvYWQgPSAiIjsK
KyAgICBtX2xpbmtJc1N0eWxlU2hlZXQgPSBmYWxzZTsKK30KKyAgICAKK3ZvaWQgUHJlbG9hZFNj
YW5uZXI6OmVtaXRDU1NSdWxlKCkKK3sKKyAgICBTdHJpbmcgcnVsZShtX2Nzc1J1bGUuZGF0YSgp
LCBtX2Nzc1J1bGUuc2l6ZSgpKTsKKyAgICBpZiAocnVsZS5sb3dlcigpID09ICJpbXBvcnQiICYm
ICFtX2Nzc1J1bGVWYWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlKG1fY3Nz
UnVsZVZhbHVlLmRhdGEoKSwgbV9jc3NSdWxlVmFsdWUuc2l6ZSgpKTsKKyAgICAgICAgU3RyaW5n
IHVybCA9IHBhcnNlVVJMKHZhbHVlKTsKKyAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgbV9kb2N1bWVudC0+ZG9jTG9hZGVyKCktPnJlZ2lzdGVyUHJlbG9hZChtX2RvY3Vt
ZW50LT5kb2NMb2FkZXIoKS0+cmVxdWVzdENTU1N0eWxlU2hlZXQodXJsLCBtX2RvY3VtZW50LT5m
cmFtZSgpLT5sb2FkZXIoKS0+ZW5jb2RpbmcoKSkpOworICAgIH0KKyAgICBtX2Nzc1J1bGUuY2xl
YXIoKTsKKyAgICBtX2Nzc1J1bGVWYWx1ZS5jbGVhcigpOworfQorICAgICAgICAgICAgICAgIAor
fQpJbmRleDogV2ViQ29yZS9odG1sL1ByZWxvYWRTY2FubmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL1ByZWxvYWRTY2FubmVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwv
UHJlbG9hZFNjYW5uZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRl
ZiBQcmVsb2FkU2Nhbm5lcl9oCisjZGVmaW5lIFByZWxvYWRTY2FubmVyX2gKKworI2luY2x1ZGUg
IkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAi
U2VnbWVudGVkU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIGNsYXNzIENh
Y2hlZFJlc291cmNlOworICAgIGNsYXNzIENhY2hlZFJlc291cmNlQ2xpZW50OworICAgIGNsYXNz
IERvY3VtZW50OworICAgIAorICAgIGNsYXNzIFByZWxvYWRTY2FubmVyIDogTm9uY29weWFibGUg
eworICAgIHB1YmxpYzoKKyAgICAgICAgUHJlbG9hZFNjYW5uZXIoRG9jdW1lbnQqKTsKKyAgICAg
ICAgflByZWxvYWRTY2FubmVyKCk7CisgICAgICAgIHZvaWQgd3JpdGUoY29uc3QgU2VnbWVudGVk
U3RyaW5nJik7CisgICAgICAgIHZvaWQgYmVnaW4oKTsKKyAgICAgICAgdm9pZCBlbmQoKTsKKyAg
ICAgICAgYm9vbCBpblByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9pblByb2dyZXNzOyB9Cisg
ICAgICAgIAorICAgICAgICBzdGF0aWMgdW5zaWduZWQgY29uc3VtZUVudGl0eShTZWdtZW50ZWRT
dHJpbmcmLCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzKTsKKyAgICAgICAgCisgICAgcHJpdmF0
ZToKKyAgICAgICAgdm9pZCB0b2tlbml6ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmKTsKKyAgICAg
ICAgdm9pZCByZXNldCgpOworICAgICAgICAKKyAgICAgICAgdm9pZCBlbWl0VGFnKCk7CisgICAg
ICAgIHZvaWQgZW1pdENoYXJhY3RlcihVQ2hhcik7CisgICAgICAgIAorICAgICAgICB2b2lkIHRv
a2VuaXplQ1NTKFVDaGFyKTsKKyAgICAgICAgdm9pZCBlbWl0Q1NTUnVsZSgpOworICAgICAgICAK
KyAgICAgICAgdm9pZCBwcm9jZXNzQXR0cmlidXRlKCk7CisKKyAgICAgICAgCisgICAgICAgIHZv
aWQgY2xlYXJMYXN0Q2hhcmFjdGVycygpOworICAgICAgICB2b2lkIHJlbWVtYmVyQ2hhcmFjdGVy
KFVDaGFyKTsKKyAgICAgICAgYm9vbCBsYXN0Q2hhcmFjdGVyc01hdGNoKGNvbnN0IGNoYXIqLCB1
bnNpZ25lZCBjb3VudCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICBib29sIG1faW5Qcm9ncmVz
czsKKyAgICAgICAgU2VnbWVudGVkU3RyaW5nIG1fc291cmNlOworICAgICAgICAKKyAgICAgICAg
ZW51bSBTdGF0ZSB7CisgICAgICAgICAgICBEYXRhLAorICAgICAgICAgICAgRW50aXR5RGF0YSwK
KyAgICAgICAgICAgIFRhZ09wZW4sCisgICAgICAgICAgICBDbG9zZVRhZ09wZW4sCisgICAgICAg
ICAgICBUYWdOYW1lLAorICAgICAgICAgICAgQmVmb3JlQXR0cmlidXRlTmFtZSwKKyAgICAgICAg
ICAgIEF0dHJpYnV0ZU5hbWUsCisgICAgICAgICAgICBBZnRlckF0dHJpYnV0ZU5hbWUsCisgICAg
ICAgICAgICBCZWZvcmVBdHRyaWJ1dGVWYWx1ZSwKKyAgICAgICAgICAgIEF0dHJpYnV0ZVZhbHVl
RG91YmxlUXVvdGVkLAorICAgICAgICAgICAgQXR0cmlidXRlVmFsdWVTaW5nbGVRdW90ZWQsCisg
ICAgICAgICAgICBBdHRyaWJ1dGVWYWx1ZVVucXVvdGVkLAorICAgICAgICAgICAgRW50aXR5SW5B
dHRyaWJ1dGVWYWx1ZSwKKyAgICAgICAgICAgIEJvZ3VzQ29tbWVudCwKKyAgICAgICAgICAgIE1h
cmt1cERlY2xhcmF0aW9uT3BlbiwKKyAgICAgICAgICAgIENvbW1lbnRTdGFydCwKKyAgICAgICAg
ICAgIENvbW1lbnRTdGFydERhc2gsCisgICAgICAgICAgICBDb21tZW50LAorICAgICAgICAgICAg
Q29tbWVudEVuZERhc2gsCisgICAgICAgICAgICBDb21tZW50RW5kCisgICAgICAgIH07CisgICAg
ICAgIFN0YXRlIG1fc3RhdGU7CisgICAgICAgIGJvb2wgbV9lc2NhcGU7CisgICAgICAgIGVudW0g
Q29udGVudE1vZGVsIHsKKyAgICAgICAgICAgIFBDREFUQSwKKyAgICAgICAgICAgIFJDREFUQSwK
KyAgICAgICAgICAgIENEQVRBLAorICAgICAgICAgICAgUExBSU5URVhUCisgICAgICAgIH07Cisg
ICAgICAgIENvbnRlbnRNb2RlbCBtX2NvbnRlbnRNb2RlbDsKKyAgICAgICAgdW5zaWduZWQgbV9j
b21tZW50UG9zOworICAgICAgICBTdGF0ZSBtX3N0YXRlQmVmb3JlRW50aXR5SW5BdHRyaWJ1dGVW
YWx1ZTsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsYXN0Q2hhcmFj
dGVyc0J1ZmZlclNpemUgPSA4OworICAgICAgICBVQ2hhciBtX2xhc3RDaGFyYWN0ZXJzW2xhc3RD
aGFyYWN0ZXJzQnVmZmVyU2l6ZV07CisgICAgICAgIHVuc2lnbmVkIG1fbGFzdENoYXJhY3Rlcklu
ZGV4OworICAgICAgICAKKyAgICAgICAgYm9vbCBtX2Nsb3NlVGFnOworICAgICAgICBWZWN0b3I8
VUNoYXIsIDMyPiBtX3RhZ05hbWU7CisgICAgICAgIFZlY3RvcjxVQ2hhciwgMzI+IG1fYXR0cmli
dXRlTmFtZTsKKyAgICAgICAgVmVjdG9yPFVDaGFyPiBtX2F0dHJpYnV0ZVZhbHVlOworICAgICAg
ICBBdG9taWNTdHJpbmcgbV9sYXN0U3RhcnRUYWc7CisgICAgICAgIAorICAgICAgICBTdHJpbmcg
bV91cmxUb0xvYWQ7CisgICAgICAgIGJvb2wgbV9saW5rSXNTdHlsZVNoZWV0OworICAgICAgICAK
KyAgICAgICAgZW51bSBDU1NTdGF0ZSB7CisgICAgICAgICAgICBDU1NJbml0aWFsLAorICAgICAg
ICAgICAgQ1NTTWF5YmVDb21tZW50LAorICAgICAgICAgICAgQ1NTQ29tbWVudCwKKyAgICAgICAg
ICAgIENTU01heWJlQ29tbWVudEVuZCwKKyAgICAgICAgICAgIENTU1J1bGVTdGFydCwKKyAgICAg
ICAgICAgIENTU1J1bGUsCisgICAgICAgICAgICBDU1NBZnRlclJ1bGUsCisgICAgICAgICAgICBD
U1NSdWxlVmFsdWUsCisgICAgICAgICAgICBDU1NBZmVyUnVsZVZhbHVlCisgICAgICAgIH07Cisg
ICAgICAgIENTU1N0YXRlIG1fY3NzU3RhdGU7CisgICAgICAgIFZlY3RvcjxVQ2hhciwgMTY+IG1f
Y3NzUnVsZTsKKyAgICAgICAgVmVjdG9yPFVDaGFyPiBtX2Nzc1J1bGVWYWx1ZTsKKyAgICAgICAg
CisgICAgICAgIGRvdWJsZSBtX3RpbWVVc2VkOworICAgICAgICAKKyAgICAgICAgRG9jdW1lbnQq
IG1fZG9jdW1lbnQ7CisgICAgfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L0NhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZS5jcHAJKHJldmlz
aW9uIDMwODE0KQorKysgV2ViQ29yZS9sb2FkZXIvQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjksNyArMjI5LDcgQEAgdm9pZCBDYWNoZTo6cHJ1bmVEZWFkUmVzb3VyY2VzKCkKICAgICAg
ICAgLy8gRmlyc3QgZmx1c2ggYWxsIHRoZSBkZWNvZGVkIGRhdGEgaW4gdGhpcyBxdWV1ZS4KICAg
ICAgICAgd2hpbGUgKGN1cnJlbnQpIHsKICAgICAgICAgICAgIENhY2hlZFJlc291cmNlKiBwcmV2
ID0gY3VycmVudC0+bV9wcmV2SW5BbGxSZXNvdXJjZXNMaXN0OwotICAgICAgICAgICAgaWYgKCFj
dXJyZW50LT5yZWZlcmVuY2VkKCkgJiYgY3VycmVudC0+aXNMb2FkZWQoKSAmJiBjdXJyZW50LT5k
ZWNvZGVkU2l6ZSgpKSB7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQtPnJlZmVyZW5jZWQoKSAm
JiAhY3VycmVudC0+aXNQcmVsb2FkZWQoKSAmJiBjdXJyZW50LT5pc0xvYWRlZCgpICYmIGN1cnJl
bnQtPmRlY29kZWRTaXplKCkpIHsKICAgICAgICAgICAgICAgICAvLyBEZXN0cm95IG91ciBkZWNv
ZGVkIGRhdGEuIFRoaXMgd2lsbCByZW1vdmUgdXMgZnJvbSAKICAgICAgICAgICAgICAgICAvLyBt
X2xpdmVEZWNvZGVkUmVzb3VyY2VzLCBhbmQgcG9zc2libHkgbW92ZSB1cyB0byBhIGRpZmZlcm50
IAogICAgICAgICAgICAgICAgIC8vIExSVSBsaXN0IGluIG1fYWxsUmVzb3VyY2VzLgpAQCAtMjQ1
LDcgKzI0NSw3IEBAIHZvaWQgQ2FjaGU6OnBydW5lRGVhZFJlc291cmNlcygpCiAgICAgICAgIGN1
cnJlbnQgPSBtX2FsbFJlc291cmNlc1tpXS5tX3RhaWw7CiAgICAgICAgIHdoaWxlIChjdXJyZW50
KSB7CiAgICAgICAgICAgICBDYWNoZWRSZXNvdXJjZSogcHJldiA9IGN1cnJlbnQtPm1fcHJldklu
QWxsUmVzb3VyY2VzTGlzdDsKLSAgICAgICAgICAgIGlmICghY3VycmVudC0+cmVmZXJlbmNlZCgp
KSB7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQtPnJlZmVyZW5jZWQoKSAmJiAhY3VycmVudC0+
aXNQcmVsb2FkZWQoKSkgewogICAgICAgICAgICAgICAgIHJlbW92ZShjdXJyZW50KTsKIAogICAg
ICAgICAgICAgICAgIGlmIChtX2RlYWRTaXplIDw9IHRhcmdldFNpemUpCkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9DYWNoZWRSZXNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
Q2FjaGVkUmVzb3VyY2UuY3BwCShyZXZpc2lvbiAzMDgxNCkKKysrIFdlYkNvcmUvbG9hZGVyL0Nh
Y2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOSBAQCBDYWNoZWRS
ZXNvdXJjZTo6Q2FjaGVkUmVzb3VyY2UoY29uc3QgU3RyCiAgICAgLCBtX2xhc3REZWNvZGVkQWNj
ZXNzVGltZSgwKQogICAgICwgbV9zZW5kUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKHNlbmRSZXNvdXJj
ZUxvYWRDYWxsYmFja3MpCiAgICAgLCBtX2luQ2FjaGUoZm9yQ2FjaGUpCisgICAgLCBtX3ByZWxv
YWRDb3VudCgwKQorICAgICwgbV9wcmVsb2FkUmVzdWx0KFByZWxvYWROb3RSZWZlcmVuY2VkKQor
ICAgICwgbV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyKGZhbHNlKQogICAgICwgbV9kb2NM
b2FkZXIoMCkKIHsKICAgICBtX3R5cGUgPSB0eXBlOwpAQCAtMTAxLDYgKzEwNCwxNCBAQCB2b2lk
IENhY2hlZFJlc291cmNlOjpzZXRSZXF1ZXN0KFJlcXVlc3QqCiAKIHZvaWQgQ2FjaGVkUmVzb3Vy
Y2U6OnJlZihDYWNoZWRSZXNvdXJjZUNsaWVudCAqYykKIHsKKyAgICBpZiAobV9wcmVsb2FkUmVz
dWx0ID09IFByZWxvYWROb3RSZWZlcmVuY2VkKSB7CisgICAgICAgIGlmIChpc0xvYWRlZCgpKQor
ICAgICAgICAgICAgbV9wcmVsb2FkUmVzdWx0ID0gUHJlbG9hZFJlZmVyZW5jZWRXaGlsZUNvbXBs
ZXRlOworICAgICAgICBlbHNlIGlmIChtX3JlcXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIpCisg
ICAgICAgICAgICBtX3ByZWxvYWRSZXN1bHQgPSBQcmVsb2FkUmVmZXJlbmNlZFdoaWxlTG9hZGlu
ZzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9wcmVsb2FkUmVzdWx0ID0gUHJlbG9hZFJl
ZmVyZW5jZWQ7CisgICAgfQogICAgIGlmICghcmVmZXJlbmNlZCgpICYmIGluQ2FjaGUoKSkKICAg
ICAgICAgY2FjaGUoKS0+YWRkVG9MaXZlUmVzb3VyY2VzU2l6ZSh0aGlzKTsKICAgICBtX2NsaWVu
dHMuYWRkKGMpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvQ2FjaGVkUmVzb3VyY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNoZWRSZXNvdXJjZS5oCShyZXZpc2lvbiAzMDgxNCkK
KysrIFdlYkNvcmUvbG9hZGVyL0NhY2hlZFJlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5
LDYgKzc5LDE2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVmKENhY2hlZFJlc291cmNl
Q2xpZW50Kik7CiAgICAgdm9pZCBkZXJlZihDYWNoZWRSZXNvdXJjZUNsaWVudCopOwogICAgIGJv
b2wgcmVmZXJlbmNlZCgpIGNvbnN0IHsgcmV0dXJuICFtX2NsaWVudHMuaXNFbXB0eSgpOyB9CisK
KyAgICBlbnVtIFByZWxvYWRSZXN1bHQgeworICAgICAgICBQcmVsb2FkTm90UmVmZXJlbmNlZCwK
KyAgICAgICAgUHJlbG9hZFJlZmVyZW5jZWQsCisgICAgICAgIFByZWxvYWRSZWZlcmVuY2VkV2hp
bGVMb2FkaW5nLAorICAgICAgICBQcmVsb2FkUmVmZXJlbmNlZFdoaWxlQ29tcGxldGUKKyAgICB9
OworICAgIFByZWxvYWRSZXN1bHQgcHJlbG9hZFJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJl
bG9hZFJlc3VsdDsgfQorICAgIHZvaWQgc2V0UmVxdWVzdGVkRnJvbU5ldHdvcmtpbmdMYXllcigp
IHsgbV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyID0gdHJ1ZTsgfQorICAgICAgICAKICAg
ICB2aXJ0dWFsIHZvaWQgYWxsUmVmZXJlbmNlc1JlbW92ZWQoKSB7fTsKIAogICAgIHVuc2lnbmVk
IGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRzLnNpemUoKTsgfQpAQCAtMTE3LDcgKzEy
Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlKSB7IG1fcmVzcG9uc2UgPSByZXNwb25zZTsgfQogICAgIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNwb25zZTsgfQogICAg
IAotICAgIGJvb2wgY2FuRGVsZXRlKCkgY29uc3QgeyByZXR1cm4gIXJlZmVyZW5jZWQoKSAmJiAh
bV9yZXF1ZXN0OyB9CisgICAgYm9vbCBjYW5EZWxldGUoKSBjb25zdCB7IHJldHVybiAhcmVmZXJl
bmNlZCgpICYmICFtX3JlcXVlc3QgJiYgIW1fcHJlbG9hZENvdW50OyB9CiAKICAgICBib29sIGlz
RXhwaXJlZCgpIGNvbnN0OwogCkBAIC0xMzYsNiArMTQ2LDEwIEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgc2V0RG9jTG9hZGVyKERvY0xvYWRlciogZG9jTG9hZGVyKSB7IG1fZG9jTG9hZGVyID0gZG9j
TG9hZGVyOyB9CiAgICAgCisgICAgYm9vbCBpc1ByZWxvYWRlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
cHJlbG9hZENvdW50OyB9CisgICAgdm9pZCBpbmNyZWFzZVByZWxvYWRDb3VudCgpIHsgKyttX3By
ZWxvYWRDb3VudDsgfQorICAgIHZvaWQgZGVjcmVhc2VQcmVsb2FkQ291bnQoKSB7IEFTU0VSVCht
X3ByZWxvYWRDb3VudCk7IC0tbV9wcmVsb2FkQ291bnQ7IH0KKyAgICAKIHByb3RlY3RlZDoKICAg
ICB2b2lkIHNldEVuY29kZWRTaXplKHVuc2lnbmVkKTsKICAgICB2b2lkIHNldERlY29kZWRTaXpl
KHVuc2lnbmVkKTsKQEAgLTE3MSw2ICsxODUsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX2Rl
bGV0ZWQ7CiAgICAgdW5zaWduZWQgbV9scnVJbmRleDsKICNlbmRpZgorICAgIHVuc2lnbmVkIG1f
cHJlbG9hZENvdW50OworICAgIFByZWxvYWRSZXN1bHQgbV9wcmVsb2FkUmVzdWx0OworICAgIGJv
b2wgbV9yZXF1ZXN0ZWRGcm9tTmV0d29ya2luZ0xheWVyOwogCiBwcml2YXRlOgogICAgIENhY2hl
ZFJlc291cmNlKiBtX25leHRJbkFsbFJlc291cmNlc0xpc3Q7CkluZGV4OiBXZWJDb3JlL2xvYWRl
ci9Eb2NMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0RvY0xvYWRlci5j
cHAJKHJldmlzaW9uIDMwODE0KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsMTEgKzMyLDE0IEBACiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIK
ICNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKICNpbmNsdWRlICJDYWNoZWRYU0xTdHlsZVNoZWV0
LmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgImxvYWRlci5o
IgogCisjZGVmaW5lIFBSRUxPQURfREVCVUcgMAorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERv
Y0xvYWRlcjo6RG9jTG9hZGVyKEZyYW1lICpmcmFtZSwgRG9jdW1lbnQqIGRvYykKQEAgLTU0LDYg
KzU3LDcgQEAgRG9jTG9hZGVyOjpEb2NMb2FkZXIoRnJhbWUgKmZyYW1lLCBEb2N1bQogCiBEb2NM
b2FkZXI6On5Eb2NMb2FkZXIoKQogeworICAgIGNsZWFyUHJlbG9hZHMoKTsKICAgICBIYXNoTWFw
PFN0cmluZywgQ2FjaGVkUmVzb3VyY2UqPjo6aXRlcmF0b3IgZW5kID0gbV9kb2NSZXNvdXJjZXMu
ZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPFN0cmluZywgQ2FjaGVkUmVzb3VyY2UqPjo6aXRlcmF0
b3IgaXQgPSBtX2RvY1Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAg
IGl0LT5zZWNvbmQtPnNldERvY0xvYWRlcigwKTsKQEAgLTcxLDE3ICs3NSwxOCBAQCB2b2lkIERv
Y0xvYWRlcjo6Y2hlY2tGb3JSZWxvYWQoY29uc3QgS1VSCiAgICAgaWYgKG1fY2FjaGVQb2xpY3kg
PT0gQ2FjaGVQb2xpY3lWZXJpZnkpIHsKICAgICAgICBpZiAoIW1fcmVsb2FkZWRVUkxzLmNvbnRh
aW5zKGZ1bGxVUkwuc3RyaW5nKCkpKSB7CiAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGV4aXN0
aW5nID0gY2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwoZnVsbFVSTC5zdHJpbmcoKSk7Ci0gICAgICAg
ICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nLT5pc0V4cGlyZWQoKSkgeworICAgICAgICAgIGlm
IChleGlzdGluZyAmJiBleGlzdGluZy0+aXNFeHBpcmVkKCkgJiYgIWV4aXN0aW5nLT5pc1ByZWxv
YWRlZCgpKSB7CiAgICAgICAgICAgICAgY2FjaGUoKS0+cmVtb3ZlKGV4aXN0aW5nKTsKICAgICAg
ICAgICAgICBtX3JlbG9hZGVkVVJMcy5hZGQoZnVsbFVSTC5zdHJpbmcoKSk7CiAgICAgICAgICAg
fQogICAgICAgIH0KICAgICB9IGVsc2UgaWYgKChtX2NhY2hlUG9saWN5ID09IENhY2hlUG9saWN5
UmVsb2FkKSB8fCAobV9jYWNoZVBvbGljeSA9PSBDYWNoZVBvbGljeVJlZnJlc2gpKSB7CiAgICAg
ICAgaWYgKCFtX3JlbG9hZGVkVVJMcy5jb250YWlucyhmdWxsVVJMLnN0cmluZygpKSkgewotICAg
ICAgICAgIENhY2hlZFJlc291cmNlKiBleGlzdGluZyA9IGNhY2hlKCktPnJlc291cmNlRm9yVVJM
KGZ1bGxVUkwuc3RyaW5nKCkpOwotICAgICAgICAgIGlmIChleGlzdGluZykKLSAgICAgICAgICAg
ICBjYWNoZSgpLT5yZW1vdmUoZXhpc3RpbmcpOwotICAgICAgICAgIG1fcmVsb2FkZWRVUkxzLmFk
ZChmdWxsVVJMLnN0cmluZygpKTsKKyAgICAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGV4aXN0aW5n
ID0gY2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwoZnVsbFVSTC5zdHJpbmcoKSk7CisgICAgICAgICAg
IGlmIChleGlzdGluZyAmJiAhZXhpc3RpbmctPmlzUHJlbG9hZGVkKCkpIHsKKyAgICAgICAgICAg
ICAgIGNhY2hlKCktPnJlbW92ZShleGlzdGluZyk7CisgICAgICAgICAgICAgICBtX3JlbG9hZGVk
VVJMcy5hZGQoZnVsbFVSTC5zdHJpbmcoKSk7CisgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
fQogfQpAQCAtMjQzLDUgKzI0OCw4MiBAQCBpbnQgRG9jTG9hZGVyOjpyZXF1ZXN0Q291bnQoKQog
ICAgICAgICAgcmV0dXJuIG1fcmVxdWVzdENvdW50ICsgMTsKICAgICByZXR1cm4gbV9yZXF1ZXN0
Q291bnQ7CiB9CisgICAgCit2b2lkIERvY0xvYWRlcjo6cmVnaXN0ZXJQcmVsb2FkKENhY2hlZFJl
c291cmNlKiByZXNvdXJjZSkKK3sKKyAgICBpZiAoIXJlc291cmNlIHx8IHJlc291cmNlLT5pc0xv
YWRlZCgpIHx8IG1fcHJlbG9hZHMuY29udGFpbnMocmVzb3VyY2UpKQorICAgICAgICByZXR1cm47
CisgICAgcmVzb3VyY2UtPmluY3JlYXNlUHJlbG9hZENvdW50KCk7CisgICAgbV9wcmVsb2Fkcy5h
ZGQocmVzb3VyY2UpOworI2lmIFBSRUxPQURfREVCVUcKKyAgICBwcmludGYoIlBSRUxPQURJTkcg
JXNcbiIsICByZXNvdXJjZS0+dXJsKCkubGF0aW4xKCkuZGF0YSgpKTsKKyNlbmRpZgorfQorCit2
b2lkIERvY0xvYWRlcjo6Y2xlYXJQcmVsb2FkcygpCit7CisjaWYgUFJFTE9BRF9ERUJVRworICAg
IHByaW50UHJlbG9hZFN0YXRzKCk7CisjZW5kaWYKKyAgICBMaXN0SGFzaFNldDxDYWNoZWRSZXNv
dXJjZSo+OjppdGVyYXRvciBlbmQgPSBtX3ByZWxvYWRzLmVuZCgpOworICAgIGZvciAoTGlzdEhh
c2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPjo6aXRlcmF0b3IgaXQgPSBtX3ByZWxvYWRzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzID0gKml0Owor
ICAgICAgICBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlByZWxv
YWROb3RSZWZlcmVuY2VkKQorICAgICAgICAgICAgY2FjaGUoKS0+cmVtb3ZlKHJlcyk7CisgICAg
ICAgIHJlcy0+ZGVjcmVhc2VQcmVsb2FkQ291bnQoKTsKKyAgICB9CisgICAgbV9wcmVsb2Fkcy5j
bGVhcigpOworfQogCisjaWYgUFJFTE9BRF9ERUJVRwordm9pZCBEb2NMb2FkZXI6OnByaW50UHJl
bG9hZFN0YXRzKCkKK3sKKyAgICB1bnNpZ25lZCBzY3JpcHRzID0gMDsKKyAgICB1bnNpZ25lZCBz
Y3JpcHRNaXNzZXMgPSAwOworICAgIHVuc2lnbmVkIHN0eWxlc2hlZXRzID0gMDsKKyAgICB1bnNp
Z25lZCBzdHlsZXNoZWV0TWlzc2VzID0gMDsKKyAgICB1bnNpZ25lZCBpbWFnZXMgPSAwOworICAg
IHVuc2lnbmVkIGltYWdlTWlzc2VzID0gMDsKKyAgICBMaXN0SGFzaFNldDxDYWNoZWRSZXNvdXJj
ZSo+OjppdGVyYXRvciBlbmQgPSBtX3ByZWxvYWRzLmVuZCgpOworICAgIGZvciAoTGlzdEhhc2hT
ZXQ8Q2FjaGVkUmVzb3VyY2UqPjo6aXRlcmF0b3IgaXQgPSBtX3ByZWxvYWRzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBDYWNoZWRSZXNvdXJjZSogcmVzID0gKml0OworICAg
ICAgICBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlByZWxvYWRO
b3RSZWZlcmVuY2VkKSB7CisgICAgICAgICAgICBwcmludGYoIlVOUkVGRVJFTkNFRCBQUkVMT0FE
ICVzXG4iLCByZXMtPnVybCgpLmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgICAgICBjYWNoZSgp
LT5yZW1vdmUocmVzKTsKKyAgICAgICAgfSBlbHNlIGlmIChyZXMtPnByZWxvYWRSZXN1bHQoKSA9
PSBDYWNoZWRSZXNvdXJjZTo6UHJlbG9hZFJlZmVyZW5jZWRXaGlsZUNvbXBsZXRlKSB7CisgICAg
ICAgICAgICBwcmludGYoIkhJVCBDT01QTEVURSBQUkVMT0FEICVzXG4iLCByZXMtPnVybCgpLmxh
dGluMSgpLmRhdGEoKSk7CisgICAgICAgIH0gZWxzZSBpZiAocmVzLT5wcmVsb2FkUmVzdWx0KCkg
PT0gQ2FjaGVkUmVzb3VyY2U6OlByZWxvYWRSZWZlcmVuY2VkV2hpbGVMb2FkaW5nKSB7CisgICAg
ICAgICAgICBwcmludGYoIkhJVCBMT0FESU5HIFBSRUxPQUQgJXNcbiIsIHJlcy0+dXJsKCkubGF0
aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHJlcy0+dHlw
ZSgpID09IENhY2hlZFJlc291cmNlOjpTY3JpcHQpIHsKKyAgICAgICAgICAgIHNjcmlwdHMrKzsK
KyAgICAgICAgICAgIGlmIChyZXMtPnByZWxvYWRSZXN1bHQoKSA8IENhY2hlZFJlc291cmNlOjpQ
cmVsb2FkUmVmZXJlbmNlZFdoaWxlTG9hZGluZykKKyAgICAgICAgICAgICAgICBzY3JpcHRNaXNz
ZXMrKzsKKyAgICAgICAgfSBlbHNlIGlmIChyZXMtPnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6
Q1NTU3R5bGVTaGVldCkgeworICAgICAgICAgICAgc3R5bGVzaGVldHMrKzsKKyAgICAgICAgICAg
IGlmIChyZXMtPnByZWxvYWRSZXN1bHQoKSA8IENhY2hlZFJlc291cmNlOjpQcmVsb2FkUmVmZXJl
bmNlZFdoaWxlTG9hZGluZykKKyAgICAgICAgICAgICAgICBzdHlsZXNoZWV0TWlzc2VzKys7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbWFnZXMrKzsKKyAgICAgICAgICAgIGlmIChy
ZXMtPnByZWxvYWRSZXN1bHQoKSA8IENhY2hlZFJlc291cmNlOjpQcmVsb2FkUmVmZXJlbmNlZFdo
aWxlTG9hZGluZykKKyAgICAgICAgICAgICAgICBpbWFnZU1pc3NlcysrOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAocmVzLT5lcnJvck9jY3VycmVkKCkpCisgICAgICAgICAgICBj
YWNoZSgpLT5yZW1vdmUocmVzKTsKKyAgICAgICAgCisgICAgICAgIHJlcy0+ZGVjcmVhc2VQcmVs
b2FkQ291bnQoKTsKKyAgICB9CisgICAgbV9wcmVsb2Fkcy5jbGVhcigpOworICAgIAorICAgIGlm
IChzY3JpcHRzKQorICAgICAgICBwcmludGYoIlNDUklQVFM6ICVkICglZCBoaXRzLCBoaXQgcmF0
ZSAlZCUlKVxuIiwgc2NyaXB0cywgc2NyaXB0cyAtIHNjcmlwdE1pc3NlcywgKHNjcmlwdHMgLSBz
Y3JpcHRNaXNzZXMpICogMTAwIC8gc2NyaXB0cyk7CisgICAgaWYgKHN0eWxlc2hlZXRzKQorICAg
ICAgICBwcmludGYoIlNUWUxFU0hFRVRTOiAlZCAoJWQgaGl0cywgaGl0IHJhdGUgJWQlJSlcbiIs
IHN0eWxlc2hlZXRzLCBzdHlsZXNoZWV0cyAtIHN0eWxlc2hlZXRNaXNzZXMsIChzdHlsZXNoZWV0
cyAtIHN0eWxlc2hlZXRNaXNzZXMpICogMTAwIC8gc3R5bGVzaGVldHMpOworICAgIGlmIChpbWFn
ZXMpCisgICAgICAgIHByaW50ZigiSU1BR0VTOiAgJWQgKCVkIGhpdHMsIGhpdCByYXRlICVkJSUp
XG4iLCBpbWFnZXMsIGltYWdlcyAtIGltYWdlTWlzc2VzLCAoaW1hZ2VzIC0gaW1hZ2VNaXNzZXMp
ICogMTAwIC8gaW1hZ2VzKTsKK30KKyNlbmRpZgorICAgIAogfQpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvRG9jTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmgJ
KHJldmlzaW9uIDMwODE0KQorKysgV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9MaXN0SGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTkyLDYgKzkzLDEx
IEBAIHB1YmxpYzoKICAgICB2b2lkIGluY3JlbWVudFJlcXVlc3RDb3VudCgpOwogICAgIHZvaWQg
ZGVjcmVtZW50UmVxdWVzdENvdW50KCk7CiAgICAgaW50IHJlcXVlc3RDb3VudCgpOworICAgIAor
ICAgIHZvaWQgY2xlYXJQcmVsb2FkcygpOworICAgIHZvaWQgcmVnaXN0ZXJQcmVsb2FkKENhY2hl
ZFJlc291cmNlKik7CisgICAgdm9pZCBwcmludFByZWxvYWRTdGF0cygpOworICAgIAogcHJpdmF0
ZToKICAgICBDYWNoZWRSZXNvdXJjZSogcmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpU
eXBlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nKiBjaGFyc2V0ID0gMCwgYm9vbCBz
a2lwQ2FuTG9hZENoZWNrID0gZmFsc2UsIGJvb2wgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyA9
IHRydWUpOwogCkBAIC0xMDcsNiArMTEzLDggQEAgcHJpdmF0ZToKICAgICAKICAgICBpbnQgbV9y
ZXF1ZXN0Q291bnQ7CiAgICAgCisgICAgTGlzdEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPiBtX3By
ZWxvYWRzOworICAgIAogICAgIC8vMjkgYml0cyBsZWZ0CiAgICAgYm9vbCBtX2F1dG9Mb2FkSW1h
Z2VzIDogMTsKICAgICBib29sIG1fbG9hZEluUHJvZ3Jlc3MgOiAxOwpJbmRleDogV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0Rv
Y3VtZW50TG9hZGVyLmNwcAkocmV2aXNpb24gMzA4MTQpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1
bWVudExvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJEb2N1bWVudExvYWRlci5oIgogCiAjaW5jbHVkZSAiQ2FjaGVkUGFnZS5oIgorI2luY2x1ZGUg
IkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtNDY2LDEwICs0NjcsMTMgQEAgYm9vbCBEb2N1bWVudExv
YWRlcjo6aXNMb2FkaW5nSW5BUElTZW5zZQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIGlmICghbV9zdWJyZXNvdXJjZUxvYWRlcnMuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGlmIChEb2N1bWVudCogZG9jID0gbV9mcmFtZS0+ZG9jdW1lbnQo
KSkKKyAgICAgICAgaWYgKERvY3VtZW50KiBkb2MgPSBtX2ZyYW1lLT5kb2N1bWVudCgpKSB7Cisg
ICAgICAgICAgICBpZiAoZG9jLT5kb2NMb2FkZXIoKS0+cmVxdWVzdENvdW50KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBpZiAoVG9rZW5pemVyKiB0b2sgPSBk
b2MtPnRva2VuaXplcigpKQogICAgICAgICAgICAgICAgIGlmICh0b2stPnByb2Nlc3NpbmdEYXRh
KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQog
ICAgIHJldHVybiBmcmFtZUxvYWRlcigpLT5zdWJmcmFtZUlzTG9hZGluZygpOwogfQpJbmRleDog
V2ViQ29yZS9sb2FkZXIvbG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9s
b2FkZXIuY3BwCShyZXZpc2lvbiAzMDgxNCkKKysrIFdlYkNvcmUvbG9hZGVyL2xvYWRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDYWNoZS5oIgogI2lu
Y2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNs
dWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtMzksMTcyICs0MCwzMjUgQEAKICNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI2RlZmlu
ZSBSRVFVRVNUX01BTkFHRU1FTlRfRU5BQkxFRCAxCisjZGVmaW5lIFJFUVVFU1RfREVCVUcgMAor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBSRVFVRVNUX01BTkFHRU1FTlRfRU5BQkxFRAor
Ly8gTWF0Y2ggdGhlIHBhcmFsbGVsIGNvbm5lY3Rpb24gY291bnQgdXNlZCBieSB0aGUgbmV0d29y
a2luZyBsYXllcgorLy8gRklYTUUgc2hvdWxkIG5vdCBoYXJkY29kZSBzb21ldGhpbmcgbGlrZSB0
aGlzCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3QgPSA0
OworLy8gSGF2aW5nIGEgbGltaXQgbWlnaHQgc3RpbGwgaGVscCBnZXR0aW5nIG1vcmUgaW1wb3J0
YW50IHJlc291cmNlcyBmaXJzdAorc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heFJlcXVlc3RzSW5G
bGlnaHRGb3JOb25IVFRQUHJvdG9jb2xzPSAyMDsKKyNlbHNlCitzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgbWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3QgPSAxMDAwMDsKK3N0YXRpYyBjb25zdCB1bnNp
Z25lZCBtYXhSZXF1ZXN0c0luRmxpZ2h0Rm9yTm9uSFRUUFByb3RvY29scz0gMTAwMDA7CisjZW5k
aWYKKyAgICAKKyAgICAKIExvYWRlcjo6TG9hZGVyKCkKKyAgICA6IG1fbm9uSFRUUFByb3RvY29s
SG9zdChtYXhSZXF1ZXN0c0luRmxpZ2h0Rm9yTm9uSFRUUFByb3RvY29scykKKyAgICAsIG1fcmVx
dWVzdFRpbWVyKHRoaXMsICZMb2FkZXI6OnJlcXVlc3RUaW1lckZpcmVkKQogewotICAgIG1fcmVx
dWVzdHNQZW5kaW5nLnNldEF1dG9EZWxldGUodHJ1ZSk7CiB9CiAKIExvYWRlcjo6fkxvYWRlcigp
Cit7ICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorICAgIAorTG9hZGVyOjpQcmlv
cml0eSBMb2FkZXI6OmRldGVybWluZVByaW9yaXR5KGNvbnN0IENhY2hlZFJlc291cmNlKiByZXNv
dXJjZSkgY29uc3QKK3sKKyNpZiBSRVFVRVNUX01BTkFHRU1FTlRfRU5BQkxFRAorICAgIHN3aXRj
aCAocmVzb3VyY2UtPnR5cGUoKSkgeworICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3Jp
cHQ6IAorI2lmIEVOQUJMRShYQkwpCisgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhCTDoK
KyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIEhpZ2g7CisgICAgICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6OkNTU1N0eWxlU2hlZXQ6CisgICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRS
ZXNvdXJjZToKKyNpZiBFTkFCTEUoWFNMVCkKKyAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
WFNMU3R5bGVTaGVldDoKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE1lZGl1bTsKKyAgICAg
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKKyAgICAgICAgICAgIHJldHVy
biBMb3c7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBMb3c7
CisjZWxzZQorICAgIHJldHVybiBIaWdoOworI2VuZGlmCit9CisKK3ZvaWQgTG9hZGVyOjpsb2Fk
KERvY0xvYWRlciogZG9jTG9hZGVyLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UsIGJvb2wgaW5j
cmVtZW50YWwsIGJvb2wgc2tpcENhbkxvYWRDaGVjaywgYm9vbCBzZW5kUmVzb3VyY2VMb2FkQ2Fs
bGJhY2tzKQoreworICAgIEFTU0VSVChkb2NMb2FkZXIpOworICAgIFJlcXVlc3QqIHJlcXVlc3Qg
PSBuZXcgUmVxdWVzdChkb2NMb2FkZXIsIHJlc291cmNlLCBpbmNyZW1lbnRhbCwgc2tpcENhbkxv
YWRDaGVjaywgc2VuZFJlc291cmNlTG9hZENhbGxiYWNrcyk7CisKKyAgICBIb3N0KiBob3N0Owor
ICAgIEtVUkwgdXJsKHJlc291cmNlLT51cmwoKSk7CisgICAgYm9vbCBpc0hUVFAgPSB1cmwucHJv
dG9jb2xJcygiaHR0cCIpIHx8IHVybC5wcm90b2NvbElzKCJodHRwcyIpOworICAgIGlmIChpc0hU
VFApIHsKKyAgICAgICAgU3RyaW5nIGhvc3ROYW1lID0gdXJsLmhvc3QoKTsKKyAgICAgICAgaG9z
dCA9IG1faG9zdHMuZ2V0KGhvc3ROYW1lKTsKKyAgICAgICAgaWYgKCFob3N0KSB7CisgICAgICAg
ICAgICBob3N0ID0gbmV3IEhvc3QobWF4UmVxdWVzdHNJbkZsaWdodFBlckhvc3QpOworICAgICAg
ICAgICAgbV9ob3N0cy5hZGQoaG9zdE5hbWUsIGhvc3QpOworICAgICAgICB9CisgICAgfSBlbHNl
IAorICAgICAgICBob3N0ID0gJm1fbm9uSFRUUFByb3RvY29sSG9zdDsKKyAgICAKKyAgICBQcmlv
cml0eSBwcmlvcml0eSA9IGRldGVybWluZVByaW9yaXR5KHJlc291cmNlKTsKKyAgICBob3N0LT5h
ZGRSZXF1ZXN0KHJlcXVlc3QsIHByaW9yaXR5KTsKKyAgICBkb2NMb2FkZXItPmluY3JlbWVudFJl
cXVlc3RDb3VudCgpOworCisgICAgaWYgKHByaW9yaXR5ID4gTG93IHx8ICFpc0hUVFApIHsKKyAg
ICAgICAgLy8gVHJ5IHRvIHJlcXVlc3QgaW1wb3J0YW50IHJlc291cmNlcyBpbW1lZGlhdGVseQor
ICAgICAgICBob3N0LT5zZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhwcmlvcml0eSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gSGFuZGxlIGFzeW5jaHJvbm91c2x5IHNvIGVhcmx5IGxvdyBwcmlvcml0
eSByZXF1ZXN0cyBkb24ndCBnZXQgc2NoZWR1bGVkIGJlZm9yZSBsYXRlciBoaWdoIHByaW9yaXR5
IG9uZXMKKyAgICAgICAgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOworICAgIH0KK30K
KyAgICAKK3ZvaWQgTG9hZGVyOjpzY2hlZHVsZVNlcnZlUGVuZGluZ1JlcXVlc3RzKCkKIHsKLSAg
ICBkZWxldGVBbGxWYWx1ZXMobV9yZXF1ZXN0c0xvYWRpbmcpOworICAgIGlmICghbV9yZXF1ZXN0
VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9yZXF1ZXN0VGltZXIuc3RhcnRPbmVTaG90KDAp
OwogfQogCi12b2lkIExvYWRlcjo6bG9hZChEb2NMb2FkZXIqIGRsLCBDYWNoZWRSZXNvdXJjZSog
b2JqZWN0LCBib29sIGluY3JlbWVudGFsLCBib29sIHNraXBDYW5Mb2FkQ2hlY2ssIGJvb2wgc2Vu
ZFJlc291cmNlTG9hZENhbGxiYWNrcykKK3ZvaWQgTG9hZGVyOjpyZXF1ZXN0VGltZXJGaXJlZChU
aW1lcjxMb2FkZXI+KikgCiB7Ci0gICAgQVNTRVJUKGRsKTsKLSAgICBSZXF1ZXN0KiByZXEgPSBu
ZXcgUmVxdWVzdChkbCwgb2JqZWN0LCBpbmNyZW1lbnRhbCwgc2tpcENhbkxvYWRDaGVjaywgc2Vu
ZFJlc291cmNlTG9hZENhbGxiYWNrcyk7Ci0gICAgbV9yZXF1ZXN0c1BlbmRpbmcuYXBwZW5kKHJl
cSk7Ci0gICAgZGwtPmluY3JlbWVudFJlcXVlc3RDb3VudCgpOwogICAgIHNlcnZlUGVuZGluZ1Jl
cXVlc3RzKCk7CiB9CiAKLXZvaWQgTG9hZGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpCit2b2lk
IExvYWRlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoUHJpb3JpdHkgbWluaW11bVByaW9yaXR5KQog
ewotICAgIHdoaWxlICghbV9yZXF1ZXN0c1BlbmRpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8v
IGdldCB0aGUgZmlyc3QgcGVuZGluZyByZXF1ZXN0Ci0gICAgICAgIFJlcXVlc3QqIHJlcSA9IG1f
cmVxdWVzdHNQZW5kaW5nLnRha2UoMCk7Ci0gICAgICAgIERvY0xvYWRlciogZGwgPSByZXEtPmRv
Y0xvYWRlcigpOwotICAgICAgICBkbC0+ZGVjcmVtZW50UmVxdWVzdENvdW50KCk7Ci0KLSAgICAg
ICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QocmVxLT5jYWNoZWRSZXNvdXJjZSgpLT51cmwoKSk7
Ci0KLSAgICAgICAgaWYgKCFyZXEtPmNhY2hlZFJlc291cmNlKCktPmFjY2VwdCgpLmlzRW1wdHko
KSkKLSAgICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEFjY2VwdChyZXEtPmNhY2hlZFJlc291cmNl
KCktPmFjY2VwdCgpKTsKLQotICAgICAgICBLVVJMIHIgPSBkbC0+ZG9jKCktPnVybCgpOwotICAg
ICAgICBpZiAoKHIucHJvdG9jb2xJcygiaHR0cCIpIHx8IHIucHJvdG9jb2xJcygiaHR0cHMiKSkg
JiYgci5wYXRoKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgci5zZXRQYXRoKCIvIik7Ci0gICAg
ICAgIHJlcXVlc3Quc2V0SFRUUFJlZmVycmVyKHIuc3RyaW5nKCkpOworICAgIG1fcmVxdWVzdFRp
bWVyLnN0b3AoKTsKKyAgICAKKyAgICBtX25vbkhUVFBQcm90b2NvbEhvc3Quc2VydmVQZW5kaW5n
UmVxdWVzdHMobWluaW11bVByaW9yaXR5KTsKIAotICAgICAgICBSZWZQdHI8U3VicmVzb3VyY2VM
b2FkZXI+IGxvYWRlciA9IFN1YnJlc291cmNlTG9hZGVyOjpjcmVhdGUoZGwtPmRvYygpLT5mcmFt
ZSgpLAotICAgICAgICAgICAgdGhpcywgcmVxdWVzdCwgcmVxLT5zaG91bGRTa2lwQ2FuTG9hZENo
ZWNrKCksIHJlcS0+c2VuZFJlc291cmNlTG9hZENhbGxiYWNrcygpKTsKKyAgICBIb3N0TWFwOjpp
dGVyYXRvciBlbmQgPSBtX2hvc3RzLmVuZCgpOworICAgIFZlY3RvcjxTdHJpbmc+IHRvUmVtb3Zl
OworICAgIGZvciAoSG9zdE1hcDo6aXRlcmF0b3IgaXQgPSBtX2hvc3RzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgeworICAgICAgICBIb3N0KiBob3N0ID0gaXQtPnNlY29uZDsKKyAgICAgICAg
aWYgKGhvc3QtPmhhc1JlcXVlc3RzKCkpCisgICAgICAgICAgICBob3N0LT5zZXJ2ZVBlbmRpbmdS
ZXF1ZXN0cyhtaW5pbXVtUHJpb3JpdHkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0b1Jl
bW92ZS5hcHBlbmQoaXQtPmZpcnN0KTsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsg
biA8IHRvUmVtb3ZlLnNpemUoKTsgKytuKSB7CisgICAgICAgIEhvc3RNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9ob3N0cy5maW5kKHRvUmVtb3ZlW25dKTsKKyAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQ7
CisgICAgICAgIG1faG9zdHMucmVtb3ZlKGl0KTsKKyAgICB9Cit9CisgICAgCit2b2lkIExvYWRl
cjo6Y2FuY2VsUmVxdWVzdHMoRG9jTG9hZGVyKiBkb2NMb2FkZXIpCit7CisgICAgaWYgKG1fbm9u
SFRUUFByb3RvY29sSG9zdC5oYXNSZXF1ZXN0cygpKQorICAgICAgICBtX25vbkhUVFBQcm90b2Nv
bEhvc3QuY2FuY2VsUmVxdWVzdHMoZG9jTG9hZGVyKTsKKyAgICAKKyAgICBIb3N0TWFwOjppdGVy
YXRvciBlbmQgPSBtX2hvc3RzLmVuZCgpOworICAgIGZvciAoSG9zdE1hcDo6aXRlcmF0b3IgaXQg
PSBtX2hvc3RzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBIb3N0KiBob3N0
ID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKGhvc3QtPmhhc1JlcXVlc3RzKCkpOworICAgICAg
ICAgICAgaG9zdC0+Y2FuY2VsUmVxdWVzdHMoZG9jTG9hZGVyKTsKKyAgICB9CisgICAgc2NoZWR1
bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOworICAgIAorICAgIGlmIChkb2NMb2FkZXItPmxvYWRJ
blByb2dyZXNzKCkpCisgICAgICAgIEFTU0VSVChkb2NMb2FkZXItPnJlcXVlc3RDb3VudCgpID09
IDEpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUKGRvY0xvYWRlci0+cmVxdWVzdENvdW50KCkg
PT0gMCk7Cit9CisgICAgCitMb2FkZXI6Okhvc3Q6Okhvc3QodW5zaWduZWQgbWF4UmVxdWVzdHNJ
bkZsaWdodCkKKyAgICA6IG1fbWF4UmVxdWVzdHNJbkZsaWdodChtYXhSZXF1ZXN0c0luRmxpZ2h0
KQoreworfQogCi0gICAgICAgIGlmIChsb2FkZXIpIHsKLSAgICAgICAgICAgIG1fcmVxdWVzdHNM
b2FkaW5nLmFkZChsb2FkZXIucmVsZWFzZSgpLCByZXEpOwotICAgICAgICAgICAgZGwtPmluY3Jl
bWVudFJlcXVlc3RDb3VudCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KK0xvYWRl
cjo6SG9zdDo6fkhvc3QoKQoreworICAgIEFTU0VSVChtX3JlcXVlc3RzTG9hZGluZy5pc0VtcHR5
KCkpOworICAgIGZvciAodW5zaWduZWQgcCA9IDA7IHAgPD0gSGlnaDsgcCsrKQorICAgICAgICBB
U1NFUlQobV9yZXF1ZXN0c1BlbmRpbmdbcF0uaXNFbXB0eSgpKTsKK30KKyAgICAKK3ZvaWQgTG9h
ZGVyOjpIb3N0OjphZGRSZXF1ZXN0KFJlcXVlc3QqIHJlcXVlc3QsIFByaW9yaXR5IHByaW9yaXR5
KQoreworICAgIG1fcmVxdWVzdHNQZW5kaW5nW3ByaW9yaXR5XS5hcHBlbmQocmVxdWVzdCk7Cit9
CisgICAgCitib29sIExvYWRlcjo6SG9zdDo6aGFzUmVxdWVzdHMoKSBjb25zdAoreworICAgIGlm
ICghbV9yZXF1ZXN0c0xvYWRpbmcuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBmb3IgKHVuc2lnbmVkIHAgPSAwOyBwIDw9IEhpZ2g7IHArKykgeworICAgICAgICBpZiAoIW1f
cmVxdWVzdHNQZW5kaW5nW3BdLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKLSAgICAgICAgZGwtPnNldExvYWRJblByb2dy
ZXNzKHRydWUpOwotICAgICAgICByZXEtPmNhY2hlZFJlc291cmNlKCktPmVycm9yKCk7Ci0gICAg
ICAgIGRsLT5zZXRMb2FkSW5Qcm9ncmVzcyhmYWxzZSk7Cit2b2lkIExvYWRlcjo6SG9zdDo6c2Vy
dmVQZW5kaW5nUmVxdWVzdHMoTG9hZGVyOjpQcmlvcml0eSBtaW5pbXVtUHJpb3JpdHkpCit7Cisg
ICAgZm9yIChpbnQgcHJpb3JpdHkgPSBIaWdoOyBwcmlvcml0eSA+PSBtaW5pbXVtUHJpb3JpdHk7
IC0tcHJpb3JpdHkpCisgICAgICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKG1fcmVxdWVzdHNQZW5k
aW5nW3ByaW9yaXR5XSk7Cit9CisgICAgCit2b2lkIExvYWRlcjo6SG9zdDo6c2VydmVQZW5kaW5n
UmVxdWVzdHMoUmVxdWVzdFF1ZXVlJiByZXF1ZXN0c1BlbmRpbmcpCit7CisgICAgd2hpbGUgKG1f
cmVxdWVzdHNMb2FkaW5nLnNpemUoKSA8IG1fbWF4UmVxdWVzdHNJbkZsaWdodCAmJiAhcmVxdWVz
dHNQZW5kaW5nLmlzRW1wdHkoKSkgeyAgICAgICAgCisgICAgICAgIFJlcXVlc3QqIHJlcXVlc3Qg
PSByZXF1ZXN0c1BlbmRpbmcuZmlyc3QoKTsKKyAgICAgICAgcmVxdWVzdHNQZW5kaW5nLnJlbW92
ZUZpcnN0KCk7CiAKLSAgICAgICAgZGVsZXRlIHJlcTsKKyAgICAgICAgRG9jTG9hZGVyKiBkb2NM
b2FkZXIgPSByZXF1ZXN0LT5kb2NMb2FkZXIoKTsKKyAgICAgICAgCisgICAgICAgIFJlc291cmNl
UmVxdWVzdCByZXNvdXJjZVJlcXVlc3QocmVxdWVzdC0+Y2FjaGVkUmVzb3VyY2UoKS0+dXJsKCkp
OworICAgICAgICAKKyAgICAgICAgaWYgKCFyZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpLT5hY2Nl
cHQoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXNvdXJjZVJlcXVlc3Quc2V0SFRUUEFjY2Vw
dChyZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpLT5hY2NlcHQoKSk7CisgICAgICAgIAorICAgICAg
ICBLVVJMIHJlZmVycmVyID0gZG9jTG9hZGVyLT5kb2MoKS0+dXJsKCk7CisgICAgICAgIGlmICgo
cmVmZXJyZXIucHJvdG9jb2xJcygiaHR0cCIpIHx8IHJlZmVycmVyLnByb3RvY29sSXMoImh0dHBz
IikpICYmIHJlZmVycmVyLnBhdGgoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZWZlcnJlci5z
ZXRQYXRoKCIvIik7CisgICAgICAgIHJlc291cmNlUmVxdWVzdC5zZXRIVFRQUmVmZXJyZXIocmVm
ZXJyZXIuc3RyaW5nKCkpOworCisgICAgICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9h
ZGVyID0gU3VicmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShkb2NMb2FkZXItPmRvYygpLT5mcmFtZSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcywgcmVzb3VyY2VSZXF1ZXN0LCByZXF1ZXN0LT5zaG91bGRTa2lw
Q2FuTG9hZENoZWNrKCksIHJlcXVlc3QtPnNlbmRSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSk7Cisg
ICAgICAgIGlmIChsb2FkZXIpIHsKKyAgICAgICAgICAgIG1fcmVxdWVzdHNMb2FkaW5nLmFkZChs
b2FkZXIucmVsZWFzZSgpLCByZXF1ZXN0KTsKKyAgICAgICAgICAgIHJlcXVlc3QtPmNhY2hlZFJl
c291cmNlKCktPnNldFJlcXVlc3RlZEZyb21OZXR3b3JraW5nTGF5ZXIoKTsKKyNpZiBSRVFVRVNU
X0RFQlVHCisgICAgICAgICAgICBwcmludGYoIkhPU1QgJXMgQ09VTlQgJWQgTE9BRElORyAlc1xu
IiwgcmVzb3VyY2VSZXF1ZXN0LnVybCgpLmhvc3QoKS5sYXRpbjEoKS5kYXRhKCksIG1fcmVxdWVz
dHNMb2FkaW5nLnNpemUoKSwgcmVxLT5jYWNoZWRSZXNvdXJjZSgpLT51cmwoKS5sYXRpbjEoKS5k
YXRhKCkpOworI2VuZGlmCisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgCisgICAgICAgICAg
ICBkb2NMb2FkZXItPmRlY3JlbWVudFJlcXVlc3RDb3VudCgpOworICAgICAgICAgICAgZG9jTG9h
ZGVyLT5zZXRMb2FkSW5Qcm9ncmVzcyh0cnVlKTsKKyAgICAgICAgICAgIHJlcXVlc3QtPmNhY2hl
ZFJlc291cmNlKCktPmVycm9yKCk7CisgICAgICAgICAgICBkb2NMb2FkZXItPnNldExvYWRJblBy
b2dyZXNzKGZhbHNlKTsKKyAgICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0OworICAgICAgICB9CiAg
ICAgfQogfQogCi12b2lkIExvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJjZUxvYWRl
ciogbG9hZGVyKQordm9pZCBMb2FkZXI6Okhvc3Q6OmRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3Vy
Y2VMb2FkZXIqIGxvYWRlcikKIHsKICAgICBSZXF1ZXN0TWFwOjppdGVyYXRvciBpID0gbV9yZXF1
ZXN0c0xvYWRpbmcuZmluZChsb2FkZXIpOwogICAgIGlmIChpID09IG1fcmVxdWVzdHNMb2FkaW5n
LmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZXF1ZXN0KiByZXEgPSBpLT5zZWNvbmQ7
CisgICAgUmVxdWVzdCogcmVxdWVzdCA9IGktPnNlY29uZDsKICAgICBtX3JlcXVlc3RzTG9hZGlu
Zy5yZW1vdmUoaSk7Ci0gICAgRG9jTG9hZGVyKiBkb2NMb2FkZXIgPSByZXEtPmRvY0xvYWRlcigp
OwotICAgIGlmICghcmVxLT5pc011bHRpcGFydCgpKQorICAgIERvY0xvYWRlciogZG9jTG9hZGVy
ID0gcmVxdWVzdC0+ZG9jTG9hZGVyKCk7CisgICAgaWYgKCFyZXF1ZXN0LT5pc011bHRpcGFydCgp
KQogICAgICAgICBkb2NMb2FkZXItPmRlY3JlbWVudFJlcXVlc3RDb3VudCgpOwogCi0gICAgQ2Fj
aGVkUmVzb3VyY2UqIG9iamVjdCA9IHJlcS0+Y2FjaGVkUmVzb3VyY2UoKTsKKyAgICBDYWNoZWRS
ZXNvdXJjZSogcmVzb3VyY2UgPSByZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpOworICAgIGRlbGV0
ZSByZXF1ZXN0OwogCiAgICAgLy8gSWYgd2UgZ290IGEgNHh4IHJlc3BvbnNlLCB3ZSdyZSBwcmV0
ZW5kaW5nIHRvIGhhdmUgcmVjZWl2ZWQgYSBuZXR3b3JrCiAgICAgLy8gZXJyb3IsIHNvIHdlIGNh
bid0IHNlbmQgdGhlIHN1Y2Nlc3NmdWwgZGF0YSgpIGFuZCBmaW5pc2goKSBjYWxsYmFja3MuCi0g
ICAgaWYgKCFvYmplY3QtPmVycm9yT2NjdXJyZWQoKSkgeworICAgIGlmICghcmVzb3VyY2UtPmVy
cm9yT2NjdXJyZWQoKSkgewogICAgICAgICBkb2NMb2FkZXItPnNldExvYWRJblByb2dyZXNzKHRy
dWUpOwotICAgICAgICBvYmplY3QtPmRhdGEobG9hZGVyLT5yZXNvdXJjZURhdGEoKSwgdHJ1ZSk7
Ci0gICAgICAgIG9iamVjdC0+ZmluaXNoKCk7CisgICAgICAgIHJlc291cmNlLT5kYXRhKGxvYWRl
ci0+cmVzb3VyY2VEYXRhKCksIHRydWUpOworICAgICAgICByZXNvdXJjZS0+ZmluaXNoKCk7CiAg
ICAgfQogCiAgICAgZG9jTG9hZGVyLT5zZXRMb2FkSW5Qcm9ncmVzcyhmYWxzZSk7CiAKLSAgICBk
ZWxldGUgcmVxOwotCisjaWYgUkVRVUVTVF9ERUJVRworICAgIEtVUkwgdShyZXNvdXJjZS0+dXJs
KCkpOworICAgIHByaW50ZigiSE9TVCAlcyBDT1VOVCAlZCBSRUNFSVZFRCAlc1xuIiwgdS5ob3N0
KCkubGF0aW4xKCkuZGF0YSgpLCBtX3JlcXVlc3RzTG9hZGluZy5zaXplKCksIHJlc291cmNlLT51
cmwoKS5sYXRpbjEoKS5kYXRhKCkpOworI2VuZGlmCiAgICAgc2VydmVQZW5kaW5nUmVxdWVzdHMo
KTsKIH0KIAotdm9pZCBMb2FkZXI6OmRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwg
Y29uc3QgUmVzb3VyY2VFcnJvciYpCit2b2lkIExvYWRlcjo6SG9zdDo6ZGlkRmFpbChTdWJyZXNv
dXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJikKIHsKICAgICBkaWRGYWls
KGxvYWRlcik7CiB9CiAKLXZvaWQgTG9hZGVyOjpkaWRGYWlsKFN1YnJlc291cmNlTG9hZGVyKiBs
b2FkZXIsIGJvb2wgY2FuY2VsbGVkKQordm9pZCBMb2FkZXI6Okhvc3Q6OmRpZEZhaWwoU3VicmVz
b3VyY2VMb2FkZXIqIGxvYWRlciwgYm9vbCBjYW5jZWxsZWQpCiB7CiAgICAgUmVxdWVzdE1hcDo6
aXRlcmF0b3IgaSA9IG1fcmVxdWVzdHNMb2FkaW5nLmZpbmQobG9hZGVyKTsKICAgICBpZiAoaSA9
PSBtX3JlcXVlc3RzTG9hZGluZy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVxdWVz
dCogcmVxID0gaS0+c2Vjb25kOworICAgIFJlcXVlc3QqIHJlcXVlc3QgPSBpLT5zZWNvbmQ7CiAg
ICAgbV9yZXF1ZXN0c0xvYWRpbmcucmVtb3ZlKGkpOwotICAgIERvY0xvYWRlciogZG9jTG9hZGVy
ID0gcmVxLT5kb2NMb2FkZXIoKTsKLSAgICBpZiAoIXJlcS0+aXNNdWx0aXBhcnQoKSkKKyAgICBE
b2NMb2FkZXIqIGRvY0xvYWRlciA9IHJlcXVlc3QtPmRvY0xvYWRlcigpOworICAgIGlmICghcmVx
dWVzdC0+aXNNdWx0aXBhcnQoKSkKICAgICAgICAgZG9jTG9hZGVyLT5kZWNyZW1lbnRSZXF1ZXN0
Q291bnQoKTsKIAotICAgIENhY2hlZFJlc291cmNlKiBvYmplY3QgPSByZXEtPmNhY2hlZFJlc291
cmNlKCk7CisgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gcmVxdWVzdC0+Y2FjaGVkUmVz
b3VyY2UoKTsKKyAgICBkZWxldGUgcmVxdWVzdDsKIAogICAgIGlmICghY2FuY2VsbGVkKSB7CiAg
ICAgICAgIGRvY0xvYWRlci0+c2V0TG9hZEluUHJvZ3Jlc3ModHJ1ZSk7Ci0gICAgICAgIG9iamVj
dC0+ZXJyb3IoKTsKKyAgICAgICAgcmVzb3VyY2UtPmVycm9yKCk7CiAgICAgfQogICAgIAogICAg
IGRvY0xvYWRlci0+c2V0TG9hZEluUHJvZ3Jlc3MoZmFsc2UpOwotICAgIGNhY2hlKCktPnJlbW92
ZShvYmplY3QpOwotCi0gICAgZGVsZXRlIHJlcTsKKyAgICBpZiAoY2FuY2VsbGVkIHx8ICFyZXNv
dXJjZS0+aXNQcmVsb2FkZWQoKSkKKyAgICAgICAgY2FjaGUoKS0+cmVtb3ZlKHJlc291cmNlKTsK
IAogICAgIHNlcnZlUGVuZGluZ1JlcXVlc3RzKCk7CiB9CiAKLXZvaWQgTG9hZGVyOjpkaWRSZWNl
aXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UpCit2b2lkIExvYWRlcjo6SG9zdDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFN1
YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQogewotICAgIFJlcXVlc3QqIHJlcSA9IG1fcmVxdWVzdHNMb2FkaW5nLmdldChsb2FkZXIpOwor
ICAgIFJlcXVlc3QqIHJlcXVlc3QgPSBtX3JlcXVlc3RzTG9hZGluZy5nZXQobG9hZGVyKTsKICAg
ICAKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIDxyZGFyOi8vcHJvYmxl
bS81MjM2ODQzPgogICAgIC8vIElmIGEgbG9hZCBzdGFydHMgd2hpbGUgdGhlIGZyYW1lIGlzIHN0
aWxsIGluIHRoZSBwcm92aXNpb25hbCBzdGF0ZSAKICAgICAvLyAodGhpcyBjYW4gYmUgdGhlIGNh
c2Ugd2hlbiBsb2FkaW5nIHRoZSB1c2VyIHN0eWxlIHNoZWV0KSwgY29tbWl0dGluZyB0aGUgbG9h
ZCB0aGVuIGNhdXNlcyBhbGwKLSAgICAvLyByZXF1ZXN0cyB0byBiZSByZW1vdmVkIGZyb20gdGhl
IG1fcmVxdWVzdHNMb2FkaW5nIG1hcC4gVGhpcyBtZWFucyB0aGF0IHJlcSBtaWdodCBiZSBudWxs
IGhlcmUuCisgICAgLy8gcmVxdWVzdHMgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBtX3JlcXVlc3Rz
TG9hZGluZyBtYXAuIFRoaXMgbWVhbnMgdGhhdCByZXF1ZXN0IG1pZ2h0IGJlIG51bGwgaGVyZS4K
ICAgICAvLyBJbiB0aGF0IGNhc2Ugd2UganVzdCByZXR1cm4gZWFybHkuIAotICAgIC8vIEFTU0VS
VChyZXEpOwotICAgIGlmICghcmVxKQorICAgIC8vIEFTU0VSVChyZXF1ZXN0KTsKKyAgICBpZiAo
IXJlcXVlc3QpCiAgICAgICAgIHJldHVybjsKLSAgICByZXEtPmNhY2hlZFJlc291cmNlKCktPnNl
dFJlc3BvbnNlKHJlc3BvbnNlKTsKKyAgICByZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpLT5zZXRS
ZXNwb25zZShyZXNwb25zZSk7CiAgICAgCiAgICAgU3RyaW5nIGVuY29kaW5nID0gcmVzcG9uc2Uu
dGV4dEVuY29kaW5nTmFtZSgpOwogICAgIGlmICghZW5jb2RpbmcuaXNOdWxsKCkpCi0gICAgICAg
IHJlcS0+Y2FjaGVkUmVzb3VyY2UoKS0+c2V0RW5jb2RpbmcoZW5jb2RpbmcpOworICAgICAgICBy
ZXF1ZXN0LT5jYWNoZWRSZXNvdXJjZSgpLT5zZXRFbmNvZGluZyhlbmNvZGluZyk7CiAgICAgCi0g
ICAgaWYgKHJlcS0+aXNNdWx0aXBhcnQoKSkgewotICAgICAgICBBU1NFUlQocmVxLT5jYWNoZWRS
ZXNvdXJjZSgpLT5pc0ltYWdlKCkpOwotICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZSo+
KHJlcS0+Y2FjaGVkUmVzb3VyY2UoKSktPmNsZWFyKCk7Ci0gICAgICAgIGlmIChyZXEtPmRvY0xv
YWRlcigpLT5mcmFtZSgpKQotICAgICAgICAgICAgcmVxLT5kb2NMb2FkZXIoKS0+ZnJhbWUoKS0+
bG9hZGVyKCktPmNoZWNrQ29tcGxldGVkKCk7CisgICAgaWYgKHJlcXVlc3QtPmlzTXVsdGlwYXJ0
KCkpIHsKKyAgICAgICAgQVNTRVJUKHJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCktPmlzSW1hZ2Uo
KSk7CisgICAgICAgIHN0YXRpY19jYXN0PENhY2hlZEltYWdlKj4ocmVxdWVzdC0+Y2FjaGVkUmVz
b3VyY2UoKSktPmNsZWFyKCk7CisgICAgICAgIGlmIChyZXF1ZXN0LT5kb2NMb2FkZXIoKS0+ZnJh
bWUoKSkKKyAgICAgICAgICAgIHJlcXVlc3QtPmRvY0xvYWRlcigpLT5mcmFtZSgpLT5sb2FkZXIo
KS0+Y2hlY2tDb21wbGV0ZWQoKTsKICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmlzTXVsdGlwYXJ0
KCkpIHsKLSAgICAgICAgcmVxLT5zZXRJc011bHRpcGFydCh0cnVlKTsKKyAgICAgICAgcmVxdWVz
dC0+c2V0SXNNdWx0aXBhcnQodHJ1ZSk7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBkb24ndCBj
b3VudCBtdWx0aVBhcnRzIGluIGEgRG9jTG9hZGVyJ3MgcmVxdWVzdCBjb3VudAotICAgICAgICBy
ZXEtPmRvY0xvYWRlcigpLT5kZWNyZW1lbnRSZXF1ZXN0Q291bnQoKTsKKyAgICAgICAgcmVxdWVz
dC0+ZG9jTG9hZGVyKCktPmRlY3JlbWVudFJlcXVlc3RDb3VudCgpOwogICAgICAgICAgICAgCiAg
ICAgICAgIC8vIElmIHdlIGdldCBhIG11bHRpcGFydCByZXNwb25zZSwgd2UgbXVzdCBoYXZlIGEg
aGFuZGxlCiAgICAgICAgIEFTU0VSVChsb2FkZXItPmhhbmRsZSgpKTsKLSAgICAgICAgaWYgKCFy
ZXEtPmNhY2hlZFJlc291cmNlKCktPmlzSW1hZ2UoKSkKKyAgICAgICAgaWYgKCFyZXF1ZXN0LT5j
YWNoZWRSZXNvdXJjZSgpLT5pc0ltYWdlKCkpCiAgICAgICAgICAgICBsb2FkZXItPmhhbmRsZSgp
LT5jYW5jZWwoKTsKICAgICB9CiB9CiAKLXZvaWQgTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShTdWJy
ZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSkKK3ZvaWQg
TG9hZGVyOjpIb3N0OjpkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRlciogbG9hZGVyLCBj
b25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSkKIHsKICAgICBSZXF1ZXN0KiByZXF1ZXN0ID0gbV9y
ZXF1ZXN0c0xvYWRpbmcuZ2V0KGxvYWRlcik7CiAgICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBDYWNoZWRSZXNvdXJjZSogb2JqZWN0ID0gcmVxdWVzdC0+Y2FjaGVkUmVz
b3VyY2UoKTsgICAgCi0gICAgaWYgKG9iamVjdC0+ZXJyb3JPY2N1cnJlZCgpKQorICAgIENhY2hl
ZFJlc291cmNlKiByZXNvdXJjZSA9IHJlcXVlc3QtPmNhY2hlZFJlc291cmNlKCk7ICAgIAorICAg
IGlmIChyZXNvdXJjZS0+ZXJyb3JPY2N1cnJlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgaWYgKG9iamVjdC0+cmVzcG9uc2UoKS5odHRwU3RhdHVzQ29kZSgpIC8gMTAwID09IDQpIHsK
KyAgICBpZiAocmVzb3VyY2UtPnJlc3BvbnNlKCkuaHR0cFN0YXR1c0NvZGUoKSAvIDEwMCA9PSA0
KSB7CiAgICAgICAgIC8vIFRyZWF0IGEgNHh4IHJlc3BvbnNlIGxpa2UgYSBuZXR3b3JrIGVycm9y
LgotICAgICAgICBvYmplY3QtPmVycm9yKCk7CisgICAgICAgIHJlc291cmNlLT5lcnJvcigpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yMTMsMjkgKzM2NywzOCBAQCB2b2lkIExvYWRl
cjo6ZGlkUmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMCiAgICAgICAgIC8vIFRoZSBsb2FkZXIgZGVs
aXZlcnMgdGhlIGRhdGEgaW4gYSBtdWx0aXBhcnQgc2VjdGlvbiBhbGwgYXQgb25jZSwgc2VuZCBl
b2YuCiAgICAgICAgIC8vIFRoZSByZXNvdXJjZSBkYXRhIHdpbGwgY2hhbmdlIGFzIHRoZSBuZXh0
IHBhcnQgaXMgbG9hZGVkLCBzbyB3ZSBuZWVkIHRvIG1ha2UgYSBjb3B5LgogICAgICAgICBTaGFy
ZWRCdWZmZXIqIGNvcGllZERhdGEgPSBuZXcgU2hhcmVkQnVmZmVyKGRhdGEsIHNpemUpOwotICAg
ICAgICBvYmplY3QtPmRhdGEoY29waWVkRGF0YSwgdHJ1ZSk7CisgICAgICAgIHJlc291cmNlLT5k
YXRhKGNvcGllZERhdGEsIHRydWUpOwogICAgIH0gZWxzZSBpZiAocmVxdWVzdC0+aXNJbmNyZW1l
bnRhbCgpKQotICAgICAgICBvYmplY3QtPmRhdGEobG9hZGVyLT5yZXNvdXJjZURhdGEoKSwgZmFs
c2UpOworICAgICAgICByZXNvdXJjZS0+ZGF0YShsb2FkZXItPnJlc291cmNlRGF0YSgpLCBmYWxz
ZSk7CiB9Ci0KLXZvaWQgTG9hZGVyOjpjYW5jZWxSZXF1ZXN0cyhEb2NMb2FkZXIqIGRsKQorICAg
IAordm9pZCBMb2FkZXI6Okhvc3Q6OmNhbmNlbFBlbmRpbmdSZXF1ZXN0cyhSZXF1ZXN0UXVldWUm
IHJlcXVlc3RzUGVuZGluZywgRG9jTG9hZGVyKiBkb2NMb2FkZXIpCiB7Ci0gICAgRGVwcmVjYXRl
ZFB0ckxpc3RJdGVyYXRvcjxSZXF1ZXN0PiBwSXQobV9yZXF1ZXN0c1BlbmRpbmcpOwotICAgIHdo
aWxlIChwSXQuY3VycmVudCgpKSB7Ci0gICAgICAgIGlmIChwSXQuY3VycmVudCgpLT5kb2NMb2Fk
ZXIoKSA9PSBkbCkgewotICAgICAgICAgICAgY2FjaGUoKS0+cmVtb3ZlKHBJdC5jdXJyZW50KCkt
PmNhY2hlZFJlc291cmNlKCkpOwotICAgICAgICAgICAgbV9yZXF1ZXN0c1BlbmRpbmcucmVtb3Zl
KHBJdCk7Ci0gICAgICAgICAgICBkbC0+ZGVjcmVtZW50UmVxdWVzdENvdW50KCk7CisgICAgUmVx
dWVzdFF1ZXVlIHJlbWFpbmluZzsKKyAgICBSZXF1ZXN0UXVldWU6Oml0ZXJhdG9yIGVuZCA9IHJl
cXVlc3RzUGVuZGluZy5lbmQoKTsKKyAgICBmb3IgKFJlcXVlc3RRdWV1ZTo6aXRlcmF0b3IgaXQg
PSByZXF1ZXN0c1BlbmRpbmcuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIFJl
cXVlc3QqIHJlcXVlc3QgPSAqaXQ7CisgICAgICAgIGlmIChyZXF1ZXN0LT5kb2NMb2FkZXIoKSA9
PSBkb2NMb2FkZXIpIHsKKyAgICAgICAgICAgIGNhY2hlKCktPnJlbW92ZShyZXF1ZXN0LT5jYWNo
ZWRSZXNvdXJjZSgpKTsKKyAgICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0OworICAgICAgICAgICAg
ZG9jTG9hZGVyLT5kZWNyZW1lbnRSZXF1ZXN0Q291bnQoKTsKICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICArK3BJdDsKKyAgICAgICAgICAgIHJlbWFpbmluZy5hcHBlbmQocmVxdWVzdCk7CiAg
ICAgfQorICAgIHJlcXVlc3RzUGVuZGluZy5zd2FwKHJlbWFpbmluZyk7Cit9CisKK3ZvaWQgTG9h
ZGVyOjpIb3N0OjpjYW5jZWxSZXF1ZXN0cyhEb2NMb2FkZXIqIGRvY0xvYWRlcikKK3sKKyAgICBm
b3IgKHVuc2lnbmVkIHAgPSAwOyBwIDw9IEhpZ2g7IHArKykKKyAgICAgICAgY2FuY2VsUGVuZGlu
Z1JlcXVlc3RzKG1fcmVxdWVzdHNQZW5kaW5nW3BdLCBkb2NMb2FkZXIpOwogCiAgICAgVmVjdG9y
PFN1YnJlc291cmNlTG9hZGVyKiwgMjU2PiBsb2FkZXJzVG9DYW5jZWw7CiAKICAgICBSZXF1ZXN0
TWFwOjppdGVyYXRvciBlbmQgPSBtX3JlcXVlc3RzTG9hZGluZy5lbmQoKTsKICAgICBmb3IgKFJl
cXVlc3RNYXA6Oml0ZXJhdG9yIGkgPSBtX3JlcXVlc3RzTG9hZGluZy5iZWdpbigpOyBpICE9IGVu
ZDsgKytpKSB7CiAgICAgICAgIFJlcXVlc3QqIHIgPSBpLT5zZWNvbmQ7Ci0gICAgICAgIGlmIChy
LT5kb2NMb2FkZXIoKSA9PSBkbCkKKyAgICAgICAgaWYgKHItPmRvY0xvYWRlcigpID09IGRvY0xv
YWRlcikKICAgICAgICAgICAgIGxvYWRlcnNUb0NhbmNlbC5hcHBlbmQoaS0+Zmlyc3QuZ2V0KCkp
OwogICAgIH0KIApAQCAtMjQzLDExICs0MDYsNiBAQCB2b2lkIExvYWRlcjo6Y2FuY2VsUmVxdWVz
dHMoRG9jTG9hZGVyKiBkCiAgICAgICAgIFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIgPSBsb2Fk
ZXJzVG9DYW5jZWxbaV07CiAgICAgICAgIGRpZEZhaWwobG9hZGVyLCB0cnVlKTsKICAgICB9Ci0g
ICAgCi0gICAgaWYgKGRsLT5sb2FkSW5Qcm9ncmVzcygpKQotICAgICAgICBBU1NFUlQoZGwtPnJl
cXVlc3RDb3VudCgpID09IDEpOwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUKGRsLT5yZXF1ZXN0
Q291bnQoKSA9PSAwKTsKIH0KIAogfSAvL25hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9sb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9sb2FkZXIuaAko
cmV2aXNpb24gMzA4MTQpCisrKyBXZWJDb3JlL2xvYWRlci9sb2FkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjIsOSArMjIsMTMgQEAKICNpZm5kZWYgbG9hZGVyX2gKICNkZWZpbmUgbG9hZGVyX2gK
IAotI2luY2x1ZGUgIkRlcHJlY2F0ZWRQdHJMaXN0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2Fk
ZXJDbGllbnQuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzIsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgRG9jTG9hZGVyOwogICAgIGNsYXNzIFJlcXVlc3Q7CiAKLSAgICBjbGFz
cyBMb2FkZXIgOiBwcml2YXRlIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50IHsKKyAgICBjbGFzcyBM
b2FkZXIgOiBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgogICAgICAgICBMb2FkZXIoKTsKICAg
ICAgICAgfkxvYWRlcigpOwpAQCAtNDAsMTkgKzQ0LDQ3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdm9pZCBsb2FkKERvY0xvYWRlciosIENhY2hlZFJlc291cmNlKiwgYm9vbCBpbmNy
ZW1lbnRhbCA9IHRydWUsIGJvb2wgc2tpcENhbkxvYWRDaGVjayA9IGZhbHNlLCBib29sIHNlbmRS
ZXNvdXJjZUxvYWRDYWxsYmFja3MgPSB0cnVlKTsKIAogICAgICAgICB2b2lkIGNhbmNlbFJlcXVl
c3RzKERvY0xvYWRlciopOworICAgICAgICAKKyAgICAgICAgZW51bSBQcmlvcml0eSB7IExvdywg
TWVkaXVtLCBIaWdoIH07CisgICAgICAgIHZvaWQgc2VydmVQZW5kaW5nUmVxdWVzdHMoUHJpb3Jp
dHkgbWluaW11bVByaW9yaXR5ID0gTG93KTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShTdWJy
ZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJjZUxvYWRlciopOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLSAg
ICAgICAgdm9pZCBkaWRGYWlsKFN1YnJlc291cmNlTG9hZGVyKiwgYm9vbCBjYW5jZWxsZWQgPSBm
YWxzZSk7Ci0KLSAgICAgICAgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOwotCi0gICAgICAg
IERlcHJlY2F0ZWRQdHJMaXN0PFJlcXVlc3Q+IG1fcmVxdWVzdHNQZW5kaW5nOwotICAgICAgICB0
eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiwgUmVxdWVzdCo+IFJlcXVl
c3RNYXA7Ci0gICAgICAgIFJlcXVlc3RNYXAgbV9yZXF1ZXN0c0xvYWRpbmc7CisgICAgICAgIFBy
aW9yaXR5IGRldGVybWluZVByaW9yaXR5KGNvbnN0IENhY2hlZFJlc291cmNlKikgY29uc3Q7Cisg
ICAgICAgIHZvaWQgc2NoZWR1bGVTZXJ2ZVBlbmRpbmdSZXF1ZXN0cygpOworICAgICAgICAKKyAg
ICAgICAgdm9pZCByZXF1ZXN0VGltZXJGaXJlZChUaW1lcjxMb2FkZXI+Kik7CisKKyAgICAgICAg
Y2xhc3MgSG9zdCA6IHByaXZhdGUgU3VicmVzb3VyY2VMb2FkZXJDbGllbnQgeworICAgICAgICBw
dWJsaWM6CisgICAgICAgICAgICBIb3N0KHVuc2lnbmVkIG1heFJlcXVlc3RzSW5GbGlnaHQpOwor
ICAgICAgICAgICAgfkhvc3QoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdm9pZCBhZGRS
ZXF1ZXN0KFJlcXVlc3QqLCBQcmlvcml0eSk7CisgICAgICAgICAgICB2b2lkIHNlcnZlUGVuZGlu
Z1JlcXVlc3RzKFByaW9yaXR5IG1pbmltdW1Qcmlvcml0eSA9IExvdyk7CisgICAgICAgICAgICB2
b2lkIGNhbmNlbFJlcXVlc3RzKERvY0xvYWRlciopOworICAgICAgICAgICAgYm9vbCBoYXNSZXF1
ZXN0cygpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURh
dGEoU3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKKyAgICAgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKik7CisgICAgICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IFJlc291
cmNlRXJyb3ImKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdHlwZWRlZiBEZXF1ZTxSZXF1
ZXN0Kj4gUmVxdWVzdFF1ZXVlOworICAgICAgICAgICAgdm9pZCBzZXJ2ZVBlbmRpbmdSZXF1ZXN0
cyhSZXF1ZXN0UXVldWUmIHJlcXVlc3RzUGVuZGluZyk7CisgICAgICAgICAgICB2b2lkIGRpZEZh
aWwoU3VicmVzb3VyY2VMb2FkZXIqLCBib29sIGNhbmNlbGxlZCA9IGZhbHNlKTsKKyAgICAgICAg
ICAgIHZvaWQgY2FuY2VsUGVuZGluZ1JlcXVlc3RzKFJlcXVlc3RRdWV1ZSYgcmVxdWVzdHNQZW5k
aW5nLCBEb2NMb2FkZXIqKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUmVxdWVzdFF1ZXVl
IG1fcmVxdWVzdHNQZW5kaW5nW0hpZ2ggKyAxXTsKKyAgICAgICAgICAgIHR5cGVkZWYgSGFzaE1h
cDxSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+LCBSZXF1ZXN0Kj4gUmVxdWVzdE1hcDsKKyAgICAg
ICAgICAgIFJlcXVlc3RNYXAgbV9yZXF1ZXN0c0xvYWRpbmc7CisgICAgICAgICAgICBjb25zdCBp
bnQgbV9tYXhSZXF1ZXN0c0luRmxpZ2h0OworICAgICAgICB9OworICAgICAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBIb3N0Kj4gSG9zdE1hcDsKKyAgICAgICAgSG9zdE1hcCBtX2hvc3RzOwor
ICAgICAgICBIb3N0IG1fbm9uSFRUUFByb3RvY29sSG9zdDsKKyAgICAgICAgCisgICAgICAgIFRp
bWVyPExvYWRlcj4gbV9yZXF1ZXN0VGltZXI7CiAgICAgfTsKIAogfQpJbmRleDogV2ViS2l0L21h
Yy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDMwOTc4KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSw5IEBACisyMDA4LTAzLTExICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEZvcndhcmRp
bmdIZWFkZXJzL3d0Zi9EZXF1ZS5oOiBBZGRlZC4KKwogMjAwOC0wMy0xMSAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzLgpJbmRleDog
V2ViS2l0L21hYy9Gb3J3YXJkaW5nSGVhZGVycy93dGYvRGVxdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9EZXF1ZS5oCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0L21hYy9Gb3J3YXJkaW5nSGVhZGVycy93dGYvRGVxdWUuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSBAQAorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvRGVxdWUuaD4K
</data>
<flag name="review"
          id="8621"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>