<?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>45410</bug_id>
          
          <creation_ts>2010-09-08 12:42:02 -0700</creation_ts>
          <short_desc>Decouple Blobs from ScriptExecutionContext.</short_desc>
          <delta_ts>2010-09-10 09:20:28 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</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>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Nordman">michaeln</reporter>
          <assigned_to name="Michael Nordman">michaeln</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>jianli</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>276001</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-09-08 12:42:02 -0700</bug_when>
    <thetext>There&apos;s no need to have this coupling. It makes it awkward to create instances, invites &quot;layering violations&quot;, and present problems with passing Blob references from context to context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276004</commentid>
    <comment_count>1</comment_count>
      <attachid>66930</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-09-08 12:47:21 -0700</bug_when>
    <thetext>Created attachment 66930
decouple</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276030</commentid>
    <comment_count>2</comment_count>
      <attachid>66930</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-09-08 13:35:10 -0700</bug_when>
    <thetext>Comment on attachment 66930
decouple

View in context: https://bugs.webkit.org/attachment.cgi?id=66930&amp;action=prettypatch

&gt; WebCore/ChangeLog:6
&gt; +        Decouple Blob from ScriptExecutionContext.
Normally we put the description line before the bug link line.

&gt; WebCore/ChangeLog:8
&gt; +        * Removes ScriptExecutionContext&apos;s collection of Blobs instance in that context.
Removes =&gt; Removed

&gt; WebCore/ChangeLog:14
&gt; +        No new tests. (OOPS!)
Please remove this line.

&gt; WebCore/bindings/js/SerializedScriptValue.cpp:957
&gt; +        file = File::create(String(path.ustring().impl()), KURL(KURL(), String(url.ustring().impl())), String(type.ustring().impl()));
This file is updated. Please merge and resolve.

&gt; WebCore/fileapi/FileReader.cpp:184
&gt; +    ThreadableBlobRegistry::unregisterBlobURL(readableURL);
I think we should unregister this temporary URL after we finish the reading or encounter an error. This is because otherwise we have to assume that the un-registration always happens after the loading. This might be risky depending on how ThreadableLoader is implemented. For example, suppose we invoke FileReader in workers. If ThreadableLoader implementation needs to call into main thread once and then call other method asynchronously, we will have a problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276076</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-09-08 14:32:06 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 66930 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=66930&amp;action=prettypatch
&gt; 
&gt; &gt; WebCore/ChangeLog:6
&gt; &gt; +        Decouple Blob from ScriptExecutionContext.
&gt; Normally we put the description line before the bug link line.
&gt; 
&gt; &gt; WebCore/ChangeLog:8
&gt; &gt; +        * Removes ScriptExecutionContext&apos;s collection of Blobs instance in that context.
&gt; Removes =&gt; Removed
&gt; 
&gt; &gt; WebCore/ChangeLog:14
&gt; &gt; +        No new tests. (OOPS!)
&gt; Please remove this line.
&gt; 
&gt; &gt; WebCore/bindings/js/SerializedScriptValue.cpp:957
&gt; &gt; +        file = File::create(String(path.ustring().impl()), KURL(KURL(), String(url.ustring().impl())), String(type.ustring().impl()));
&gt; This file is updated. Please merge and resolve.
&gt; 
&gt; &gt; WebCore/fileapi/FileReader.cpp:184
&gt; &gt; +    ThreadableBlobRegistry::unregisterBlobURL(readableURL);
&gt; I think we should unregister this temporary URL after we finish the reading or encounter an error. This is because otherwise we have to assume that the un-registration always happens after the loading. This might be risky depending on how ThreadableLoader is implemented. For example, suppose we invoke FileReader in workers. If ThreadableLoader implementation needs to call into main thread once and then call other method asynchronously, we will have a problem.

I buy that... more robust</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276182</commentid>
    <comment_count>4</comment_count>
      <attachid>66966</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-09-08 16:58:07 -0700</bug_when>
    <thetext>Created attachment 66966
decouple</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276206</commentid>
    <comment_count>5</comment_count>
      <attachid>66966</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-09-08 17:31:14 -0700</bug_when>
    <thetext>Comment on attachment 66966
decouple

Looks good except some minor issues.

View in context: https://bugs.webkit.org/attachment.cgi?id=66966&amp;action=prettypatch

&gt; WebCore/bindings/js/SerializedScriptValue.cpp:977
&gt; +        file = File::create(String(path.ustring().impl()), KURL(KURL(), String(url.ustring().impl())), String(type.ustring().impl()));
Do we need to keep m_isDOMGlobalObject check here? The blob reading part has this logic kept.
    if (!m_isDOMGlobalObject)
        return jsNull();

&gt; WebCore/fileapi/FileReader.cpp:164
&gt; +void FileReader::clearLoaderAndReadableURL()
Probably it is better to call it cleanup since we might put other cleanup logic in this function in the future.

&gt; WebCore/fileapi/FileReader.h:145
&gt; +    KURL m_readableURL;
m_readableURL sounds like to mean the URL is legible. Might be better to name it something like m_urlForReading. If you make this change, do not forget to update ChangeLog.

&gt; WebCore/fileapi/FileReaderSync.cpp:154
&gt; +    // The blob is read by routing through the request handling layer given the tempory public url.
tempory =&gt; temporary</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276218</commentid>
    <comment_count>6</comment_count>
      <attachid>66966</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-09-08 17:44:22 -0700</bug_when>
    <thetext>Comment on attachment 66966
decouple

View in context: https://bugs.webkit.org/attachment.cgi?id=66966&amp;action=prettypatch

&gt; WebCore/bindings/js/SerializedScriptValue.cpp:977
&gt; +        file = File::create(String(path.ustring().impl()), KURL(KURL(), String(url.ustring().impl())), String(type.ustring().impl()));
I couldn&apos;t tell you if this check is needed or not anymore in this code path. There was no way to construct an File w/o it previously, now there is. The &apos;blob&apos; reading calls toJS, which takes the m_globlObject as a param which explains why the test is needed in that code path.

I&apos;ll put the test base in to keep the deltas smaller.

&gt; WebCore/fileapi/FileReader.cpp:164
&gt; +void FileReader::clearLoaderAndReadableURL()
rename sounds good

&gt; WebCore/fileapi/FileReader.h:145
&gt; +    KURL m_readableURL;
rename sounds good here too

&gt; WebCore/fileapi/FileReaderSync.cpp:154
&gt; +    // The blob is read by routing through the request handling layer given the tempory public url.
spelling error, thnx</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276222</commentid>
    <comment_count>7</comment_count>
      <attachid>66966</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-09-08 17:56:19 -0700</bug_when>
    <thetext>Comment on attachment 66966
decouple

View in context: https://bugs.webkit.org/attachment.cgi?id=66966&amp;action=prettypatch

&gt; WebCore/fileapi/FileReader.cpp:177
&gt; +    ThreadableBlobRegistry::registerBlobURL(readableURL, m_blob-&gt;url());
ooops &apos;readableURL&apos;... that&apos;s a compile error

(of course, this isn&apos;t being compiled in regular webkit builds so i don&apos;t see that when poking at this in a std webkit client, i really despise moving files/patches around)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276232</commentid>
    <comment_count>8</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-09-08 18:06:53 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 66966 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=66966&amp;action=prettypatch
&gt; 
&gt; &gt; WebCore/fileapi/FileReader.cpp:177
&gt; &gt; +    ThreadableBlobRegistry::registerBlobURL(readableURL, m_blob-&gt;url());
&gt; ooops &apos;readableURL&apos;... that&apos;s a compile error
&gt; 
&gt; (of course, this isn&apos;t being compiled in regular webkit builds so i don&apos;t see that when poking at this in a std webkit client, i really despise moving files/patches around)

ENABLE(BLOB) is also turned on for WebKit Mac. If you have a mac machine, it is easy to build and test it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276241</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-09-08 18:22:05 -0700</bug_when>
    <thetext>&gt; ENABLE(BLOB) is also turned on for WebKit Mac. If you have a mac machine, it is easy to build and test it.

Of course, i&apos;ll just move the patch there in order to see compile errors... did i mention how much i despise moving patches around :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276245</commentid>
    <comment_count>10</comment_count>
      <attachid>66983</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-09-08 18:27:21 -0700</bug_when>
    <thetext>Created attachment 66983
decouple

minor mods mentioned above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276247</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-09-08 18:28:39 -0700</bug_when>
    <thetext>&gt; minor mods mentioned above

doh... forgot one of the minor mods</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276253</commentid>
    <comment_count>12</comment_count>
      <attachid>66985</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-09-08 18:32:26 -0700</bug_when>
    <thetext>Created attachment 66985
decouple

including the minor mod to only deserialize Files if (m_isDOMGlobalObject) for jsc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276266</commentid>
    <comment_count>13</comment_count>
      <attachid>66985</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-09-08 19:04:01 -0700</bug_when>
    <thetext>Comment on attachment 66985
decouple

r=me

Please fix the minor typo issue before you land.

View in context: https://bugs.webkit.org/attachment.cgi?id=66985&amp;action=prettypatch

&gt; WebCore/fileapi/FileReaderSync.cpp:154
&gt; +    // The blob is read by routing through the request handling layer given the tempory public url.
tempory =&gt; temporary</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276665</commentid>
    <comment_count>14</comment_count>
      <attachid>67079</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-09-09 12:26:14 -0700</bug_when>
    <thetext>Created attachment 67079
decouple

&gt; tempory =&gt; temporary

Fixed. Also renamed the local var in that method from readableURL to urlForReading.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276667</commentid>
    <comment_count>15</comment_count>
      <attachid>67079</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-09-09 12:31:16 -0700</bug_when>
    <thetext>Comment on attachment 67079
decouple

rs=me. previously r+&apos;d by jianli.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277241</commentid>
    <comment_count>16</comment_count>
      <attachid>67079</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-10 09:20:23 -0700</bug_when>
    <thetext>Comment on attachment 67079
decouple

Clearing flags on attachment: 67079

Committed r67208: &lt;http://trac.webkit.org/changeset/67208&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277242</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-10 09:20:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66930</attachid>
            <date>2010-09-08 12:47:21 -0700</date>
            <delta_ts>2010-09-08 16:58:07 -0700</delta_ts>
            <desc>decouple</desc>
            <filename>decouple.txt</filename>
            <type>text/plain</type>
            <size>38444</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzAwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzkgQEAKKzIwMTAtMDktMDggIE1pY2hhZWwgTm9yZG1hbiAgPG1pY2hhZWxuQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NDEwCisgICAgICAg
IERlY291cGxlIEJsb2IgZnJvbSBTY3JpcHRFeGVjdXRpb25Db250ZXh0LgorICAgICAgICAqIFJl
bW92ZWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBwb2ludGVycyBmcm9tIEJsb2IgYW5kIEZpbGUg
Y29uc3RydWN0b3JzLgorICAgICAgICAqIFJlbW92ZXMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCdz
IGNvbGxlY3Rpb24gb2YgQmxvYnMgaW5zdGFuY2UgaW4gdGhhdCBjb250ZXh0LgorICAgICAgICAq
IFJlZmFjdG9yZWQgQmxvYlVSTCB0byBtYWtlIGEgZGlzdGluY3Rpb24gYmV0d2VlbiAncHVibGlj
JyBibG9iIHVybHMgYW5kICdpbnRlcm5hbCcKKyAgICAgICAgICB1cmxzIHRoYXQgYXJlIHVzZWQg
c29sZWx5IGFzIGlkZW50aWZpZXJzLiBUaGUgZm9ybWVyIHJlcXVpcmVzIGEgU2VjdXJpdHlPcmln
aW4gdG8KKyAgICAgICAgICB0byBtYW51ZmFjdHVyZSwgdGhlIGxhdHRlciBkb2VzIG5vdC4KKyAg
ICAgICAgKiBBZGRlZCBhIGNvbnN0YW50IGFuZCBhY2Nlc3NvciBmb3IgdGhlIGJsb2IgcHJvdG9j
b2wgc2NoZW1lIG9uIHRoZSBCbG9iVVJMIGNsYXNzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
KE9PUFMhKQorCisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkRmlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZFRlcm1pbmFsKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6WmlnWmFnOjpSZWFkZXI6OnJlYWRCbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OlppZ1phZzo6
UmVhZGVyOjpyZWFkRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpaaWdaYWc6OlJlYWRlcjo6cmVh
ZEZpbGVMaXN0KToKKyAgICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojp+U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpjcmVh
dGVQdWJsaWNCbG9iVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OnJldm9rZVB1YmxpY0Jsb2JVUkwpOgorICAgICAgICAqIGRvbS9TY3JpcHRFeGVjdXRpb25D
b250ZXh0Lmg6CisgICAgICAgICogZmlsZWFwaS9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkJsb2I6OkJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6fkJsb2IpOgorICAgICAgICAo
V2ViQ29yZTo6QmxvYjo6c2xpY2UpOgorICAgICAgICAqIGZpbGVhcGkvQmxvYi5oOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnVybCk6
CisgICAgICAgICogZmlsZWFwaS9CbG9iLmlkbDoKKyAgICAgICAgKiBmaWxlYXBpL0Jsb2JCdWls
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JCdWlsZGVyOjpnZXRCbG9iKToKKyAgICAg
ICAgKiBmaWxlYXBpL0Jsb2JCdWlsZGVyLmg6CisgICAgICAgICogZmlsZWFwaS9CbG9iQnVpbGRl
ci5pZGw6CisgICAgICAgICogZmlsZWFwaS9CbG9iVVJMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkJsb2JVUkw6OmNyZWF0ZVB1YmxpY1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iVVJMOjpj
cmVhdGVJbnRlcm5hbFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iVVJMOjpnZXRPcmlnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6QmxvYlVSTDo6Z2V0SWRlbnRpZmllcik6CisgICAgICAgIChX
ZWJDb3JlOjpCbG9iVVJMOjpjcmVhdGVCbG9iVVJMKToKKyAgICAgICAgKiBmaWxlYXBpL0Jsb2JV
UkwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JVUkw6OmJsb2JQcm90b2NvbCk6CisgICAgICAg
IChXZWJDb3JlOjpCbG9iVVJMOjpCbG9iVVJMKToKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6RmlsZSk6CisgICAgICAgICogZmlsZWFwaS9GaWxl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpjcmVhdGUpOgorICAgICAgICAqIGZpbGVhcGkv
RmlsZVJlYWRlci5jcHA6IE1hbnVmYWN0dXJlIGEgcHVibGljIHVybCB0byBwZXJmb3JtIHRoZSBy
ZWFkLgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6c3RhcnQpOgorICAgICAgICAqIGZp
bGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlclN5
bmM6OnJlYWQpOiBNYW51ZmFjdHVyZSBhIHB1YmxpYyB1cmwgdG8gcGVyZm9ybSB0aGUgcmVhZC4K
KyAgICAgICAgKiBmaWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKToK
KyAgICAgICAgKiBmaWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaDoKKyAgICAgICAgKiBo
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6YXBwZW5kRm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dDo6c2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIpOgorICAgICAgICAqIHBhZ2UvU2VjdXJpdHlPcmln
aW4uY3BwOiBVc2UgQmxvYlVSTC5ibG9iUHJvdG9jb2woKS4KKyAgICAgICAgKFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46
OmNhblJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNhbkRpc3Bs
YXkpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpmaWxlcyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9h
cmRHdGs6OmZpbGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkTWFjOjpmaWxlcyk6CisgICAgICAgICogcGxhdGZv
cm0vd2luL0NsaXBib2FyZFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRXaW46
OmZpbGVzKToKKwogMjAxMC0wOS0wOCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gNjY5MDQpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk1NCwxMCArOTU0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgSWRlbnRpZmllciB0eXBl
OwogICAgICAgICBpZiAoIXJlYWRTdHJpbmdEYXRhKHR5cGUpKQogICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIGlmIChtX2lzRE9NR2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgICAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gc3RhdGljX2Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihtX2V4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICAgICAgICAgIGZpbGUgPSBGaWxlOjpjcmVhdGUoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgU3RyaW5nKHBhdGgudXN0cmluZygpLmltcGwoKSksIEtVUkwo
S1VSTCgpLCBTdHJpbmcodXJsLnVzdHJpbmcoKS5pbXBsKCkpKSwgU3RyaW5nKHR5cGUudXN0cmlu
ZygpLmltcGwoKSkpOwotICAgICAgICB9CisgICAgICAgIGZpbGUgPSBGaWxlOjpjcmVhdGUoU3Ry
aW5nKHBhdGgudXN0cmluZygpLmltcGwoKSksIEtVUkwoS1VSTCgpLCBTdHJpbmcodXJsLnVzdHJp
bmcoKS5pbXBsKCkpKSwgU3RyaW5nKHR5cGUudXN0cmluZygpLmltcGwoKSkpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTEwNTQsOSArMTA1MSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgICAgIGlmICghbV9pc0RPTUds
b2JhbE9iamVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgICAgICAg
ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gc3RhdGlj
X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2V4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICAgICAgICAgIEFTU0VSVChzY3JpcHRFeGVj
dXRpb25Db250ZXh0KTsKLSAgICAgICAgICAgIHJldHVybiB0b0pTKG1fZXhlYywgc3RhdGljX2Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2dsb2JhbE9iamVjdCksIEJsb2I6OmNyZWF0ZShzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LCBLVVJMKEtVUkwoKSwgdXJsLnVzdHJpbmcoKS5pbXBsKCkpLCBT
dHJpbmcodHlwZS51c3RyaW5nKCkuaW1wbCgpKSwgc2l6ZSkpOworICAgICAgICAgICAgcmV0dXJu
IHRvSlMobV9leGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fZ2xvYmFsT2Jq
ZWN0KSwgQmxvYjo6Y3JlYXRlKEtVUkwoS1VSTCgpLCB1cmwudXN0cmluZygpLmltcGwoKSksIFN0
cmluZyh0eXBlLnVzdHJpbmcoKS5pbXBsKCkpLCBzaXplKSk7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBTdHJpbmdUYWc6IHsKICAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnQ7CkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lv
biA2Njk0NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODc5LDcgKzg3OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghZG9SZWFkVWludDY0KCZzaXplKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgUGFzc1JlZlB0cjxCbG9iPiBibG9iID0gQmxv
Yjo6Y3JlYXRlKGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgS1VSTChQYXJzZWRVUkxTdHJp
bmcsIHVybCksIHR5cGUsIHNpemUpOworICAgICAgICBQYXNzUmVmUHRyPEJsb2I+IGJsb2IgPSBC
bG9iOjpjcmVhdGUoS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCksIHR5cGUsIHNpemUpOwogICAg
ICAgICAqdmFsdWUgPSB0b1Y4KGJsb2IpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBA
IC04OTUsNyArODk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgaWYgKCFyZWFkV2ViQ29yZVN0cmluZygmdHlwZSkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIFBhc3NSZWZQdHI8RmlsZT4gZmlsZSA9IEZpbGU6OmNyZWF0ZShnZXRT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHBhdGgsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwp
LCB0eXBlKTsKKyAgICAgICAgUGFzc1JlZlB0cjxGaWxlPiBmaWxlID0gRmlsZTo6Y3JlYXRlKHBh
dGgsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCB0eXBlKTsKICAgICAgICAgKnZhbHVlID0g
dG9WOChmaWxlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtOTE2LDcgKzkxNiw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
aWYgKCFyZWFkV2ViQ29yZVN0cmluZygmdHlwZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUoZ2V0U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLCBwYXRoLCBLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsU3RyaW5n
KSwgdHlwZSkpOworICAgICAgICAgICAgZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUocGF0
aCwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybFN0cmluZyksIHR5cGUpKTsKICAgICAgICAgfQog
ICAgICAgICAqdmFsdWUgPSB0b1Y4KGZpbGVMaXN0KTsKICAgICAgICAgcmV0dXJuIHRydWU7Cklu
ZGV4OiBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAkocmV2aXNpb24gNjY5NDQp
CisrKyBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTQsMTMgKzk0LDEwIEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6On5TY3JpcHRFeGVj
dXRpb24KICAgICB9CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8QmxvYio+OjppdGVyYXRvciBibG9i
c0VuZCA9IG1fYmxvYnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PEJsb2IqPjo6aXRlcmF0b3Ig
aXRlciA9IG1fYmxvYnMuYmVnaW4oKTsgaXRlciAhPSBibG9ic0VuZDsgKytpdGVyKQotICAgICAg
ICAoKml0ZXIpLT5jb250ZXh0RGVzdHJveWVkKCk7CiAjaWYgRU5BQkxFKEJMT0IpCiAgICAgSGFz
aFNldDxTdHJpbmc+OjppdGVyYXRvciBwdWJsaWNCbG9iVVJMc0VuZCA9IG1fcHVibGljQmxvYlVS
THMuZW5kKCk7CiAgICAgZm9yIChIYXNoU2V0PFN0cmluZz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3B1
YmxpY0Jsb2JVUkxzLmJlZ2luKCk7IGl0ZXIgIT0gcHVibGljQmxvYlVSTHNFbmQ7ICsraXRlcikK
LSAgICAgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwodGhpcywg
S1VSTChQYXJzZWRVUkxTdHJpbmcsICppdGVyKSk7CisgICAgICAgIFRocmVhZGFibGVCbG9iUmVn
aXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXRlcikpOwog
I2VuZGlmCiB9CiAKQEAgLTE3NSwxOCArMTcyLDYgQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0OjpkZXN0cm95ZWRNZQogICAgIG1fbWVzc2FnZVBvcnRzLnJlbW92ZShwb3J0KTsKIH0KIAot
dm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjphZGRCbG9iKEJsb2IqIGJsb2IpCi17Ci0gICAg
QVNTRVJUKGJsb2IpOwotICAgIG1fYmxvYnMuYWRkKGJsb2IpOwotfQotCi12b2lkIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OnJlbW92ZUJsb2IoQmxvYiogYmxvYikKLXsKLSAgICBBU1NFUlQoYmxv
Yik7Ci0gICAgbV9ibG9icy5yZW1vdmUoYmxvYik7Ci19Ci0KIGJvb2wgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoKQogewogICAgIC8vIE5vIHByb3Rl
Y3Rpb24gYWdhaW5zdCBtX2FjdGl2ZURPTU9iamVjdHMgY2hhbmdpbmcgZHVyaW5nIGl0ZXJhdGlv
bjogY2FuU3VzcGVuZCgpIHNob3VsZG4ndCBleGVjdXRlIGFyYml0cmFyeSBKUy4KQEAgLTI3Nyw4
ICsyNjIsOCBAQCBET01UaW1lciogU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZmluZFRpCiAjaWYg
RU5BQkxFKEJMT0IpCiBLVVJMIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmNyZWF0ZVB1YmxpY0Js
b2JVUkwoQmxvYiogYmxvYikKIHsKLSAgICBLVVJMIHB1YmxpY1VSTCA9IEJsb2JVUkw6OmNyZWF0
ZVVSTCh0aGlzKTsKLSAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwo
dGhpcywgcHVibGljVVJMLCBibG9iLT51cmwoKSk7CisgICAgS1VSTCBwdWJsaWNVUkwgPSBCbG9i
VVJMOjpjcmVhdGVQdWJsaWNVUkwoc2VjdXJpdHlPcmlnaW4oKSk7CisgICAgVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKHB1YmxpY1VSTCwgYmxvYi0+dXJsKCkpOwogICAg
IG1fcHVibGljQmxvYlVSTHMuYWRkKHB1YmxpY1VSTC5zdHJpbmcoKSk7CiAgICAgcmV0dXJuIHB1
YmxpY1VSTDsKIH0KQEAgLTI4Niw3ICsyNzEsNyBAQCBLVVJMIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OmNyZWF0ZVB1YmxpCiB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJldm9rZVB1Ymxp
Y0Jsb2JVUkwoY29uc3QgS1VSTCYgdXJsKQogewogICAgIGlmIChtX3B1YmxpY0Jsb2JVUkxzLmNv
bnRhaW5zKHVybC5zdHJpbmcoKSkpIHsKLSAgICAgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6
dW5yZWdpc3RlckJsb2JVUkwodGhpcywgdXJsKTsKKyAgICAgICAgVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeTo6dW5yZWdpc3RlckJsb2JVUkwodXJsKTsKICAgICAgICAgbV9wdWJsaWNCbG9iVVJMcy5y
ZW1vdmUodXJsLnN0cmluZygpKTsKICAgICB9CiB9CkluZGV4OiBXZWJDb3JlL2RvbS9TY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oCShyZXZpc2lvbiA2Njk0NCkKKysrIFdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDggKzEzMSw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCByZW1vdmVUaW1lb3V0KGludCB0aW1lb3V0SWQpOwog
ICAgICAgICBET01UaW1lciogZmluZFRpbWVvdXQoaW50IHRpbWVvdXRJZCk7CiAKLSAgICAgICAg
dm9pZCBhZGRCbG9iKEJsb2IqKTsKLSAgICAgICAgdm9pZCByZW1vdmVCbG9iKEJsb2IqKTsKICNp
ZiBFTkFCTEUoQkxPQikKICAgICAgICAgS1VSTCBjcmVhdGVQdWJsaWNCbG9iVVJMKEJsb2IqKTsK
ICAgICAgICAgdm9pZCByZXZva2VQdWJsaWNCbG9iVVJMKGNvbnN0IEtVUkwmKTsKQEAgLTE2Nyw3
ICsxNjUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgSGFzaE1hcDxpbnQsIERP
TVRpbWVyKj4gbV90aW1lb3V0czsKIAotICAgICAgICBIYXNoU2V0PEJsb2IqPiBtX2Jsb2JzOwog
I2lmIEVOQUJMRShCTE9CKQogICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9wdWJsaWNCbG9iVVJM
czsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAkocmV2aXNpb24gNjY5NDQpCisrKyBXZWJDb3JlL2Zp
bGVhcGkvQmxvYi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDU3ICszMywzNyBAQAogCiAjaW5j
bHVkZSAiQmxvYlVSTC5oIgogI2luY2x1ZGUgIkZpbGUuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUJsb2I6OkJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgUGFzc093blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEsIGxv
bmcgbG9uZyBzaXplKQotICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQpCi0gICAgLCBtX3R5cGUoYmxvYkRhdGEtPmNvbnRlbnRUeXBlKCkpCitCbG9i
OjpCbG9iKFBhc3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhLCBsb25nIGxvbmcgc2l6ZSkKKyAg
ICA6IG1fdHlwZShibG9iRGF0YS0+Y29udGVudFR5cGUoKSkKICAgICAsIG1fc2l6ZShzaXplKQog
ewogICAgIEFTU0VSVChibG9iRGF0YSk7CiAKLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PmFkZEJsb2IodGhpcyk7Ci0KICAgICAvLyBDcmVhdGUgYSBuZXcgaW50ZXJuYWwgVVJMIGFuZCBy
ZWdpc3RlciBpdCB3aXRoIHRoZSBwcm92aWRlZCBibG9iIGRhdGEuCi0gICAgbV91cmwgPSBCbG9i
VVJMOjpjcmVhdGVVUkwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1fdXJs
LCBibG9iRGF0YSk7CisgICAgbV9pbnRlcm5hbFVSTCA9IEJsb2JVUkw6OmNyZWF0ZUludGVybmFs
VVJMKCk7CisgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKG1faW50
ZXJuYWxVUkwsIGJsb2JEYXRhKTsKIH0KIAotQmxvYjo6QmxvYihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0
cmluZyYgdHlwZSwgbG9uZyBsb25nIHNpemUpCi0gICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKLSAgICAsIG1fdHlwZSh0eXBlKQorQmxvYjo6Qmxv
Yihjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlwZSwgbG9uZyBsb25nIHNpemUp
CisgICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fc2l6ZShzaXplKQogewotICAgbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5hZGRCbG9iKHRoaXMpOwotCiAgICAgLy8gQ3JlYXRlIGEgbmV3IGlu
dGVybmFsIFVSTCBhbmQgcmVnaXN0ZXIgaXQgd2l0aCB0aGUgc2FtZSBibG9iIGRhdGEgYXMgdGhl
IHNvdXJjZSBVUkwuCi0gICAgbV91cmwgPSBCbG9iVVJMOjpjcmVhdGVVUkwoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCk7Ci0gICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJM
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1fdXJsLCBzcmNVUkwpOworICAgIG1faW50ZXJuYWxV
UkwgPSBCbG9iVVJMOjpjcmVhdGVJbnRlcm5hbFVSTCgpOworICAgIFRocmVhZGFibGVCbG9iUmVn
aXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChtX2ludGVybmFsVVJMLCBzcmNVUkwpOwogfQogCiBCbG9i
Ojp+QmxvYigpCiB7Ci0gICAgLy8gVGhlIGludGVybmFsIFVSTCBpcyBvbmx5IHVzZWQgdG8gcmVm
ZXIgdG8gdGhlIEJsb2Igb2JqZWN0LiBTbyB3ZSBuZWVkIHRvIHVucmVnaXN0ZXIgdGhlIFVSTCB3
aGVuIHRoZSBvYmplY3QgaXMgR0MtZWQuCi0gICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCkgewotICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnJlbW92ZUJsb2IodGhpcyk7
Ci0gICAgICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgbV91cmwpOwotICAgIH0KLX0KLQotdm9pZCBCbG9iOjpjb250
ZXh0RGVzdHJveWVkKCkKLXsKLSAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsK
LQotICAgIC8vIFVucmVnaXN0ZXIgdGhlIGludGVybmFsIFVSTCBiZWZvcmUgdGhlIGNvbnRleHQg
aXMgZ29uZS4KLSAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVSTCht
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1fdXJsKTsKLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQgPSAwOworICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJM
KG1faW50ZXJuYWxVUkwpOwogfQogCiAjaWYgRU5BQkxFKEJMT0IpCi1QYXNzUmVmUHRyPEJsb2I+
IEJsb2I6OnNsaWNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBjb250
ZW50VHlwZSkgY29uc3QKK1Bhc3NSZWZQdHI8QmxvYj4gQmxvYjo6c2xpY2UobG9uZyBsb25nIHN0
YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKSBjb25zdAog
ewogICAgIC8vIFdoZW4gd2Ugc2xpY2UgYSBmaWxlIGZvciB0aGUgZmlyc3QgdGltZSwgd2Ugb2J0
YWluIGEgc25hcHNob3Qgb2YgdGhlIGZpbGUgYnkgY2FwdHVyaW5nIGl0cyBjdXJyZW50IHNpemUg
YW5kIG1vZGlmaWNhdGlvbiB0aW1lLgogICAgIC8vIFRoZSBtb2RpZmljYXRpb24gdGltZSB3aWxs
IGJlIHVzZWQgdG8gdmVyaWZ5IGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQgb3Igbm90LCB3
aGVuIHRoZSB1bmRlcmx5aW5nIGRhdGEgYXJlIGFjY2Vzc2VkLgpAQCAtMTE0LDkgKzk0LDkgQEAg
UGFzc1JlZlB0cjxCbG9iPiBCbG9iOjpzbGljZShTY3JpcHRFeGVjdQogICAgIGlmIChpc0ZpbGUo
KSkKICAgICAgICAgYmxvYkRhdGEtPmFwcGVuZEZpbGUoc3RhdGljX2Nhc3Q8Y29uc3QgRmlsZSo+
KHRoaXMpLT5wYXRoKCksIHN0YXJ0LCBsZW5ndGgsIG1vZGlmaWNhdGlvblRpbWUpOwogICAgIGVs
c2UKLSAgICAgICAgYmxvYkRhdGEtPmFwcGVuZEJsb2IobV91cmwsIHN0YXJ0LCBsZW5ndGgpOwor
ICAgICAgICBibG9iRGF0YS0+YXBwZW5kQmxvYihtX2ludGVybmFsVVJMLCBzdGFydCwgbGVuZ3Ro
KTsKIAotICAgIHJldHVybiBCbG9iOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgYmxv
YkRhdGEucmVsZWFzZSgpLCBsZW5ndGgpOworICAgIHJldHVybiBCbG9iOjpjcmVhdGUoYmxvYkRh
dGEucmVsZWFzZSgpLCBsZW5ndGgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvZmlsZWFw
aS9CbG9iLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0Jsb2IuaAkocmV2aXNpb24g
NjY5NDQpCisrKyBXZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw0
NiArNDEsNDIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OwotCiBjbGFzcyBCbG9iIDogcHVibGljIFJlZkNvdW50ZWQ8QmxvYj4gewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBQYXNzT3duUHRyPEJsb2JEYXRhPiBibG9i
RGF0YSwgbG9uZyBsb25nIHNpemUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRl
KFBhc3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhLCBsb25nIGxvbmcgc2l6ZSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBi
bG9iRGF0YSwgc2l6ZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2IoYmxvYkRh
dGEsIHNpemUpKTsKICAgICB9CiAKICAgICAvLyBGb3IgZGVzZXJpYWxpemF0aW9uLgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlw
ZSwgbG9uZyBsb25nIHNpemUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKGNv
bnN0IEtVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlLCBsb25nIGxvbmcgc2l6ZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihzY3JpcHRFeGVjdXRpb25Db250
ZXh0LCBzcmNVUkwsIHR5cGUsIHNpemUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBC
bG9iKHNyY1VSTCwgdHlwZSwgc2l6ZSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfkJsb2IoKTsK
IAotICAgIHZvaWQgY29udGV4dERlc3Ryb3llZCgpOwotCi0gICAgY29uc3QgS1VSTCYgdXJsKCkg
Y29uc3QgeyByZXR1cm4gbV91cmw7IH0KKyAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJl
dHVybiBtX2ludGVybmFsVVJMOyB9CiAgICAgY29uc3QgU3RyaW5nJiB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihtX3NpemUpOyB9
CiAgICAgdmlydHVhbCBib29sIGlzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICNp
ZiBFTkFCTEUoQkxPQikKLSAgICBQYXNzUmVmUHRyPEJsb2I+IHNsaWNlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGNvbnN0IFN0cmlu
ZyYgY29udGVudFR5cGUgPSBTdHJpbmcoKSkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxCbG9iPiBz
bGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGNvbnN0IFN0cmluZyYgY29u
dGVudFR5cGUgPSBTdHJpbmcoKSkgY29uc3Q7CiAjZW5kaWYKIAogcHJvdGVjdGVkOgotICAgIEJs
b2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NPd25QdHI8QmxvYkRhdGE+LCBsb25nIGxv
bmcgc2l6ZSk7CisgICAgQmxvYihQYXNzT3duUHRyPEJsb2JEYXRhPiwgbG9uZyBsb25nIHNpemUp
OwogCiAgICAgLy8gRm9yIGRlc2VyaWFsaXphdGlvbi4KLSAgICBCbG9iKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlwZSwgbG9uZyBs
b25nIHNpemUpOworICAgIEJsb2IoY29uc3QgS1VSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5
cGUsIGxvbmcgbG9uZyBzaXplKTsKIAotICAgIC8vIFRoaXMgaXMgYW4gaW50ZXJuYWwgVVJMIHJl
ZmVycmluZyB0byB0aGUgYmxvYiBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9iamVjdC4KLSAg
ICAvLyBJdCBpcyBvbmx5IHVzZWQgYnkgRmlsZVJlYWRlciB0byByZWFkIHRoZSBibG9iIGRhdGEg
dmlhIGxvYWRpbmcgZnJvbSB0aGUgYmxvYiBVUkwgcmVzb3VyY2UuCi0gICAgS1VSTCBtX3VybDsK
KyAgICAvLyBUaGlzIGlzIGFuIGludGVybmFsIFVSTCByZWZlcnJpbmcgdG8gdGhlIGJsb2IgZGF0
YSBhc3NvY2lhdGVkIHdpdGggdGhpcyBvYmplY3QuIEl0IHNlcnZlcworICAgIC8vIGFzIGFuIGlk
ZW50aWZpZXIgZm9yIHRoaXMgYmxvYi4gVGhlIGludGVybmFsIFVSTCBpcyBuZXZlciB1c2VkIHRv
IHNvdXJjZSB0aGUgYmxvYidzIGNvbnRlbnQKKyAgICAvLyBpbnRvIGFuIEhUTUwgb3IgZm9yIEZp
bGVSZWFkJ2luZywgcHVibGljIGJsb2IgVVJMcyBtdXN0IGJlIHVzZWQgZm9yIHRob3NlIHB1cnBv
c2VzLgorICAgIEtVUkwgbV9pbnRlcm5hbFVSTDsKICAgICAKLSAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgU3RyaW5nIG1fdHlwZTsKICAg
ICBsb25nIGxvbmcgbV9zaXplOwogfTsKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9CbG9iLmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvQmxvYi5pZGwJKHJldmlzaW9uIDY2OTQ0KQor
KysgV2ViQ29yZS9maWxlYXBpL0Jsb2IuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3
IEBAIG1vZHVsZSBodG1sIHsKIAogI2lmICFkZWZpbmVkKExBTkdVQUdFX09CSkVDVElWRV9DKQog
I2lmIGRlZmluZWQoRU5BQkxFX0JMT0IpICYmIEVOQUJMRV9CTE9CCi0gICAgICAgIFtDYWxsV2l0
aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBCbG9iIHNsaWNlKGluIGxvbmcgbG9uZyBzdGFydCwg
aW4gbG9uZyBsb25nIGxlbmd0aCwgaW4gW09wdGlvbmFsLCBDb252ZXJ0VW5kZWZpbmVkT3JOdWxs
VG9OdWxsU3RyaW5nXSBET01TdHJpbmcgY29udGVudFR5cGUpOworICAgICAgICBCbG9iIHNsaWNl
KGluIGxvbmcgbG9uZyBzdGFydCwgaW4gbG9uZyBsb25nIGxlbmd0aCwgaW4gW09wdGlvbmFsLCBD
b252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgY29udGVudFR5cGUp
OwogI2VuZGlmCiAjZW5kaWYKICAgICB9OwpJbmRleDogV2ViQ29yZS9maWxlYXBpL0Jsb2JCdWls
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1aWxkZXIuY3BwCShy
ZXZpc2lvbiA2Njk0NCkKKysrIFdlYkNvcmUvZmlsZWFwaS9CbG9iQnVpbGRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNywxMyArMTE3LDEzIEBAIGJvb2wgQmxvYkJ1aWxkZXI6OmFwcGVuZChQ
YXNzUmVmUHRyPEJsb2IKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUGFzc1JlZlB0cjxCbG9iPiBC
bG9iQnVpbGRlcjo6Z2V0QmxvYihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQorUGFzc1JlZlB0cjxCbG9iPiBC
bG9iQnVpbGRlcjo6Z2V0QmxvYihjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQogewogICAgIE93
blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRlKCk7CiAgICAgYmxvYkRh
dGEtPnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKTsKICAgICBibG9iRGF0YS0+c3dhcEl0ZW1z
KG1faXRlbXMpOwogCi0gICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpjcmVhdGUoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgYmxvYkRhdGEucmVsZWFzZSgpLCBtX3NpemUpOworICAgIFJlZlB0
cjxCbG9iPiBibG9iID0gQmxvYjo6Y3JlYXRlKGJsb2JEYXRhLnJlbGVhc2UoKSwgbV9zaXplKTsK
IAogICAgIC8vIEFmdGVyIGNyZWF0aW5nIGEgYmxvYiBmcm9tIHRoZSBjdXJyZW50IGJsb2IgZGF0
YSwgd2UgZG8gbm90IG5lZWQgdG8ga2VlcCB0aGUgZGF0YSBhcm91bmQgYW55IG1vcmUuIEluc3Rl
YWQsIHdlIG9ubHkKICAgICAvLyBuZWVkIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIFVSTCBv
ZiB0aGUgYmxvYiBqdXN0IGNyZWF0ZWQuCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1aWxk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1aWxkZXIuaAkocmV2aXNp
b24gNjY5NDQpCisrKyBXZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1aWxkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNyArNDEsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBCbG9iOwot
Y2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFRleHRFbmNvZGluZzsKIAogdHlw
ZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKQEAgLTU0LDcgKzUzLDcgQEAgcHVibGljOgogICAgIGJv
b2wgYXBwZW5kKGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wg
YXBwZW5kKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBlbmRpbmcsIEV4Y2VwdGlv
bkNvZGUmKTsKIAotICAgIFBhc3NSZWZQdHI8QmxvYj4gZ2V0QmxvYihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSA9IFN0cmluZygpKTsKKyAgICBQYXNz
UmVmUHRyPEJsb2I+IGdldEJsb2IoY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSA9IFN0cmluZygp
KTsKIAogcHJpdmF0ZToKICAgICBCbG9iQnVpbGRlcigpOwpJbmRleDogV2ViQ29yZS9maWxlYXBp
L0Jsb2JCdWlsZGVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1aWxk
ZXIuaWRsCShyZXZpc2lvbiA2Njk0NCkKKysrIFdlYkNvcmUvZmlsZWFwaS9CbG9iQnVpbGRlci5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbW9kdWxlIGh0bWwgewogICAgICAg
ICBOb1N0YXRpY1RhYmxlcwogICAgIF0gQmxvYkJ1aWxkZXIgewogI2lmICFkZWZpbmVkKExBTkdV
QUdFX09CSkVDVElWRV9DKQotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4
dF0gQmxvYiBnZXRCbG9iKGluIFtPcHRpb25hbCwgQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVs
bFN0cmluZ10gRE9NU3RyaW5nIGNvbnRlbnRUeXBlKTsKKyAgICAgICAgQmxvYiBnZXRCbG9iKGlu
IFtPcHRpb25hbCwgQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5n
IGNvbnRlbnRUeXBlKTsKICNlbmRpZgogICAgICAgICB2b2lkIGFwcGVuZChpbiBCbG9iIGJsb2Ip
OwogICAgICAgICB2b2lkIGFwcGVuZChpbiBET01TdHJpbmcgdmFsdWUsIGluIFtPcHRpb25hbCwg
Q29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGVuZGluZ3MpIHJh
aXNlcyAoRE9NRXhjZXB0aW9uKTsKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5jcHAJKHJldmlzaW9uIDY2OTQ0
KQorKysgV2ViQ29yZS9maWxlYXBpL0Jsb2JVUkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwy
OCArMzQsMjcgQEAKIAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlVVSUQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1LVVJMIEJsb2JVUkw6OmNyZWF0ZVVSTChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KQorY29uc3QgY2hhciBCbG9iVVJMOjprQmxvYlByb3RvY29sW10gPSAi
YmxvYiI7CisKK0tVUkwgQmxvYlVSTDo6Y3JlYXRlUHVibGljVVJMKFNlY3VyaXR5T3JpZ2luKiBz
ZWN1cml0eU9yaWdpbikKIHsKLSAgICAvLyBDcmVhdGUgdGhlIGJsb2IgVVJMIGluIHRoZSBmb2xs
b3dpbmcgZm9ybWF0OgotICAgIC8vICAgICBibG9iOiVlc2NhcGVkX29yaWdpbiUvJVVVSUQlCi0g
ICAgLy8gVGhlIG9yaWdpbiBvZiB0aGUgaG9zdCBwYWdlIGlzIGVuY29kZWQgaW4gdGhlIFVSTCB2
YWx1ZSB0byBhbGxvdyBlYXN5IGxvb2t1cCBvZiB0aGUgb3JpZ2luIHdoZW4gdGhlIHNlY3VyaXR5
IGNoZWNrIG5lZWRzCi0gICAgLy8gdG8gYmUgcGVyZm9ybWVkLgotICAgIFN0cmluZyB1cmxTdHJp
bmcgPSAiYmxvYjoiOwotICAgIHVybFN0cmluZyArPSBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVu
Y2VzKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkp
OwotICAgIHVybFN0cmluZyArPSAiLyI7Ci0gICAgdXJsU3RyaW5nICs9IGNyZWF0ZUNhbm9uaWNh
bFVVSURTdHJpbmcoKTsKLSAgICByZXR1cm4gS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybFN0cmlu
Zyk7CisgICAgQVNTRVJUKHNlY3VyaXR5T3JpZ2luKTsKKyAgICByZXR1cm4gY3JlYXRlQmxvYlVS
TChzZWN1cml0eU9yaWdpbi0+dG9TdHJpbmcoKSk7Cit9CisKK0tVUkwgQmxvYlVSTDo6Y3JlYXRl
SW50ZXJuYWxVUkwoKQoreworICAgIHJldHVybiBjcmVhdGVCbG9iVVJMKCJibG9iaW50ZXJuYWw6
Ly8iKTsKIH0KIAogS1VSTCBCbG9iVVJMOjpnZXRPcmlnaW4oY29uc3QgS1VSTCYgdXJsKQogewot
ICAgIEFTU0VSVCh1cmwucHJvdG9jb2xJcygiYmxvYiIpKTsKKyAgICBBU1NFUlQodXJsLnByb3Rv
Y29sSXMoa0Jsb2JQcm90b2NvbCkpOwogCiAgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IHVybC5w
YXRoU3RhcnQoKTsKICAgICB1bnNpZ25lZCBhZnRlckVuZEluZGV4ID0gdXJsLnBhdGhBZnRlckxh
c3RTbGFzaCgpOwpAQCAtNjUsMTAgKzY0LDIwIEBAIEtVUkwgQmxvYlVSTDo6Z2V0T3JpZ2luKGNv
bnN0IEtVUkwmIHVybCkKIAogU3RyaW5nIEJsb2JVUkw6OmdldElkZW50aWZpZXIoY29uc3QgS1VS
TCYgdXJsKQogewotICAgIEFTU0VSVCh1cmwucHJvdG9jb2xJcygiYmxvYiIpKTsKKyAgICBBU1NF
UlQodXJsLnByb3RvY29sSXMoa0Jsb2JQcm90b2NvbCkpOwogCiAgICAgdW5zaWduZWQgc3RhcnRJ
bmRleCA9IHVybC5wYXRoQWZ0ZXJMYXN0U2xhc2goKTsKICAgICByZXR1cm4gdXJsLnN0cmluZygp
LnN1YnN0cmluZyhzdGFydEluZGV4KTsKIH0KIAorS1VSTCBCbG9iVVJMOjpjcmVhdGVCbG9iVVJM
KGNvbnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nKQoreworICAgIFN0cmluZyB1cmxTdHJpbmcgPSBr
QmxvYlByb3RvY29sOworICAgIHVybFN0cmluZyArPSAiOiI7CisgICAgdXJsU3RyaW5nICs9IGVu
Y29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMob3JpZ2luU3RyaW5nKTsKKyAgICB1cmxTdHJpbmcg
Kz0gIi8iOworICAgIHVybFN0cmluZyArPSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmxTdHJpbmcpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmgJKHJldmlzaW9uIDY2OTQ0KQorKysgV2Vi
Q29yZS9maWxlYXBpL0Jsb2JVUkwuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDI5IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
K2NsYXNzIFNlY3VyaXR5T3JpZ2luOwogCisvLyBCbG9iIFVSTHMgYXJlIG9mIHRoZSBmb3JtCisv
LyAgICAgYmxvYjolZXNjYXBlZF9vcmlnaW4lLyVVVUlEJQorLy8gRm9yIHB1YmxpYyB1cmxzLCB0
aGUgb3JpZ2luIG9mIHRoZSBob3N0IHBhZ2UgaXMgZW5jb2RlZCBpbiB0aGUgVVJMIHZhbHVlIHRv
CisvLyBhbGxvdyBlYXN5IGxvb2t1cCBvZiB0aGUgb3JpZ2luIHdoZW4gc2VjdXJpdHkgY2hlY2tz
IG5lZWQgdG8gYmUgcGVyZm9ybWVkLgorLy8gV2hlbiBsb2FkaW5nIGJsb2JzIHZpYSBSZXNvdXJj
ZUhhbmRsZSBvciB3aGVuIHJlYWRpbmcgYmxvYnMgdmlhIEZpbGVSZWFkZXIKKy8vIHRoZSBsb2Fk
ZXIgY29uZHVjdHMgc2VjdXJpdHkgY2hlY2tzIHRoYXQgZXhhbWluZSB0aGUgb3JpZ2luIG9mIGhv
c3QgcGFnZQorLy8gZW5jb2RlZCBpbiB0aGUgcHVibGljIGJsb2IgdXJsLiBUaGUgb3JpZ2luIGJh
a2VkIGludG8gaW50ZXJuYWwgYmxvYiB1cmxzCisvLyBpcyBhIHNpbXBsZSBjb25zdGFudCB2YWx1
ZSwgImJsb2JpbnRlcm5hbDovLyIsIGludGVybmFsIHVybHMgc2hvdWxkIG5vdAorLy8gYmUgdXNl
ZCB3aXRoIFJlc291cmNlSGFuZGxlIG9yIEZpbGVSZWFkZXIuCiBjbGFzcyBCbG9iVVJMIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgS1VSTCBjcmVhdGVVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCop
OworICAgIHN0YXRpYyBLVVJMIGNyZWF0ZVB1YmxpY1VSTChTZWN1cml0eU9yaWdpbiopOworICAg
IHN0YXRpYyBLVVJMIGNyZWF0ZUludGVybmFsVVJMKCk7CiAgICAgc3RhdGljIEtVUkwgZ2V0T3Jp
Z2luKGNvbnN0IEtVUkwmKTsKLSAgICBzdGF0aWMgU3RyaW5nIGdldElkZW50aWZpZXIoY29uc3Qg
S1VSTCYgdXJsKTsKKyAgICBzdGF0aWMgU3RyaW5nIGdldElkZW50aWZpZXIoY29uc3QgS1VSTCYp
OworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBibG9iUHJvdG9jb2woKSB7IHJldHVybiBrQmxvYlBy
b3RvY29sOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIEtVUkwgY3JlYXRlQmxvYlVSTChjb25z
dCBTdHJpbmcmIG9yaWdpblN0cmluZyk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIga0Jsb2JQcm90
b2NvbFtdOworICAgIEJsb2JVUkwoKSB7IH0KIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvZmlsZWFw
aS9GaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAJKHJldmlz
aW9uIDY2OTQ0KQorKysgV2ViQ29yZS9maWxlYXBpL0ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmlsZS5oIgog
Ci0jaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2lu
Y2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKIApAQCAtNDUsMjMgKzQ0LDIzIEBAIHN0YXRpYyBQ
YXNzT3duUHRyPEJsb2JEYXRhPiBjcmVhdGVCbG9iRGEKICAgICByZXR1cm4gYmxvYkRhdGEucmVs
ZWFzZSgpOwogfQogCi1GaWxlOjpGaWxlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgcGF0aCkKLSAgICA6IEJsb2Ioc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwgY3JlYXRlQmxvYkRhdGFGb3JGaWxlKHBhdGgpLCAtMSkKK0ZpbGU6OkZp
bGUoY29uc3QgU3RyaW5nJiBwYXRoKQorICAgIDogQmxvYihjcmVhdGVCbG9iRGF0YUZvckZpbGUo
cGF0aCksIC0xKQogICAgICwgbV9wYXRoKHBhdGgpCiAgICAgLCBtX25hbWUocGF0aEdldEZpbGVO
YW1lKHBhdGgpKQogewogfQogCi1GaWxlOjpGaWxlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIHR5cGUpCi0gICAgOiBCbG9iKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
IHVybCwgdHlwZSwgLTEpCitGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIHR5cGUpCisgICAgOiBCbG9iKHVybCwgdHlwZSwgLTEpCiAg
ICAgLCBtX3BhdGgocGF0aCkKIHsKICAgICBtX25hbWUgPSBwYXRoR2V0RmlsZU5hbWUocGF0aCk7
CiB9CiAKICNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKLUZpbGU6OkZpbGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiByZWxh
dGl2ZVBhdGgsIGNvbnN0IFN0cmluZyYgcGF0aCkKLSAgICA6IEJsb2Ioc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCwgY3JlYXRlQmxvYkRhdGFGb3JGaWxlKHBhdGgpLCAtMSkKK0ZpbGU6OkZpbGUoY29u
c3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgsIGNvbnN0IFN0cmluZyYgcGF0aCkKKyAgICA6IEJsb2Io
Y3JlYXRlQmxvYkRhdGFGb3JGaWxlKHBhdGgpLCAtMSkKICAgICAsIG1fcGF0aChwYXRoKQogICAg
ICwgbV9yZWxhdGl2ZVBhdGgocmVsYXRpdmVQYXRoKQogewpJbmRleDogV2ViQ29yZS9maWxlYXBp
L0ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZS5oCShyZXZpc2lvbiA2
Njk0NCkKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDI1
ICszNCwyNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBLVVJMOwotY2xhc3MgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgRmlsZSA6IHB1YmxpYyBCbG9iIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiBwYXRoKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEZpbGU+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
cGF0aCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUocGF0aCkpOwogICAgIH0K
IAogICAgIC8vIEZvciBkZXNlcmlhbGl6YXRpb24uCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8Rmls
ZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
IGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgS1VSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5
cGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgS1VSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgcGF0aCwg
c3JjVVJMLCB0eXBlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsZShwYXRoLCBz
cmNVUkwsIHR5cGUpKTsKICAgICB9CiAKICNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgsIGNvbnN0
IFN0cmluZyYgcGF0aCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlPiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiByZWxhdGl2ZVBhdGgsIGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgRmlsZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCByZWxhdGl2
ZVBhdGgsIHBhdGgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlKHJlbGF0aXZl
UGF0aCwgcGF0aCkpOwogICAgIH0KICNlbmRpZgogCkBAIC03NCwxMyArNzMsMTMgQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBmaWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemUo
KTsgfQogCiBwcml2YXRlOgotICAgIEZpbGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IFN0cmluZyYgcGF0aCk7CisgICAgRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpOwogICAgIAogICAg
IC8vIEZvciBkZXNlcmlhbGl6YXRpb24uCi0gICAgRmlsZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYg
dHlwZSk7CisgICAgRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEtVUkwmIHNyY1VSTCwg
Y29uc3QgU3RyaW5nJiB0eXBlKTsKIAogI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQotICAg
IEZpbGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRo
LCBjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIEZpbGUoY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBh
dGgsIGNvbnN0IFN0cmluZyYgcGF0aCk7CiAjZW5kaWYKIAogICAgIFN0cmluZyBtX3BhdGg7Cklu
ZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCShyZXZpc2lvbiA2Njk0NCkKKysrIFdlYkNvcmUvZmls
ZWFwaS9GaWxlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogCiAj
aW5jbHVkZSAiQmFzZTY0LmgiCiAjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkJsb2JVUkwu
aCIKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJGaWxlLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgpAQCAtNDQsNiArNDUsNyBAQAogI2luY2x1ZGUgIlJlc291cmNlUmVx
dWVzdC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJU
ZXh0UmVzb3VyY2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5o
IgogI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KIApAQCAtMTYzLDggKzE2NSwxMSBAQCB2b2lkIEZpbGVSZWFkZXI6OnN0YXJ0KCkKIHsK
ICAgICBtX3N0YXRlID0gT3BlbmluZzsKIAotICAgIC8vIFRoZSBibG9iIGlzIHJlYWQgYnkgcm91
dGluZyB0aHJvdWdoIHRoZSByZXF1ZXN0IGhhbmRsaW5nIGxheWVyIGdpdmVuIHRoZSBibG9iIHVy
bC4KLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChtX2Jsb2ItPnVybCgpKTsKKyAgICAvLyBU
aGUgYmxvYiBpcyByZWFkIGJ5IHJvdXRpbmcgdGhyb3VnaCB0aGUgcmVxdWVzdCBoYW5kbGluZyBs
YXllciBnaXZlbiBhIHRlbXBvcmFyeSBwdWJsaWMgdXJsLgorICAgIEtVUkwgcmVhZGFibGVVUkwg
PSBCbG9iVVJMOjpjcmVhdGVQdWJsaWNVUkwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1
cml0eU9yaWdpbigpKTsKKyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JV
UkwocmVhZGFibGVVUkwsIG1fYmxvYi0+dXJsKCkpOworCisgICAgUmVzb3VyY2VSZXF1ZXN0IHJl
cXVlc3QocmVhZGFibGVVUkwpOwogICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7CiAK
ICAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOwpAQCAtMTc1LDYgKzE4MCw4IEBA
IHZvaWQgRmlsZVJlYWRlcjo6c3RhcnQoKQogICAgIG9wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0
UG9saWN5ID0gRGVueUNyb3NzT3JpZ2luUmVxdWVzdHM7CiAKICAgICBtX2xvYWRlciA9IFRocmVh
ZGFibGVMb2FkZXI6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRoaXMsIHJlcXVl
c3QsIG9wdGlvbnMpOworCisgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJs
b2JVUkwocmVhZGFibGVVUkwpOwogfQogCiB2b2lkIEZpbGVSZWFkZXI6OmRpZFJlY2VpdmVSZXNw
b25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKSW5kZXg6IFdlYkNvcmUvZmls
ZWFwaS9GaWxlUmVhZGVyU3luYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXJTeW5jLmNwcAkocmV2aXNpb24gNjY5NDQpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmls
ZVJlYWRlclN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsMTMgQEAKIAogI2lu
Y2x1ZGUgIkJhc2U2NC5oIgogI2luY2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJCbG9iVVJMLmgi
CiAjaW5jbHVkZSAiRmlsZVJlYWRlci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgog
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJUZXh0RW5jb2Rp
bmcuaCIKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMTQ5LDEyICsxNTEsMTYgQEAgY29uc3QgU2NyaXB0U3RyaW5n
JiBGaWxlUmVhZGVyU3luYzo6cmVhZAogCiB2b2lkIEZpbGVSZWFkZXJTeW5jOjpyZWFkKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEJsb2IqIGJsb2IsIFJl
YWRUeXBlIHJlYWRUeXBlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICAvLyBUaGUgYmxvYiBp
cyByZWFkIGJ5IHJvdXRpbmcgdGhyb3VnaCB0aGUgcmVxdWVzdCBoYW5kbGluZyBsYXllciBnaXZl
biB0aGUgYmxvYiB1cmwuCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoYmxvYi0+dXJsKCkp
OworICAgIC8vIFRoZSBibG9iIGlzIHJlYWQgYnkgcm91dGluZyB0aHJvdWdoIHRoZSByZXF1ZXN0
IGhhbmRsaW5nIGxheWVyIGdpdmVuIHRoZSB0ZW1wb3J5IHB1YmxpYyB1cmwuCisgICAgS1VSTCBy
ZWFkYWJsZVVSTCA9IEJsb2JVUkw6OmNyZWF0ZVB1YmxpY1VSTChzY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdp
c3RlckJsb2JVUkwocmVhZGFibGVVUkwsIGJsb2ItPnVybCgpKTsKKworICAgIFJlc291cmNlUmVx
dWVzdCByZXF1ZXN0KHJlYWRhYmxlVVJMKTsKICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIkdF
VCIpOwogCiAgICAgRmlsZVJlYWRlclN5bmNMb2FkZXIgbG9hZGVyKChyZWFkVHlwZSA9PSBSZWFk
QXNCaW5hcnlTdHJpbmcpID8gJm1fcmVzdWx0IDogMCk7CiAgICAgbG9hZGVyLnN0YXJ0KHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQsIHJlcXVlc3QsIGVjKTsKKyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lz
dHJ5Ojp1bnJlZ2lzdGVyQmxvYlVSTChyZWFkYWJsZVVSTCk7CiAgICAgaWYgKGVjKQogICAgICAg
ICByZXR1cm47CiAKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3Ry
eS5jcHAJKHJldmlzaW9uIDY2OTQ0KQorKysgV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9i
UmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBACiAKICNpbmNsdWRl
ICJCbG9iRGF0YS5oIgogI2luY2x1ZGUgIkJsb2JSZWdpc3RyeS5oIgotI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC03MCw3ICs2OSw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmxv
YlVSTFRhc2sodm9pZCogY28KICAgICBibG9iUmVnaXN0cnkoKS5yZWdpc3RlckJsb2JVUkwoYmxv
YlJlZ2lzdHJ5Q29udGV4dC0+dXJsLCBibG9iUmVnaXN0cnlDb250ZXh0LT5ibG9iRGF0YS5yZWxl
YXNlKCkpOwogfQogCi12b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVS
TChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgS1VSTCYgdXJsLCBQYXNzT3duUHRyPEJs
b2JEYXRhPiBibG9iRGF0YSkKK3ZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJC
bG9iVVJMKGNvbnN0IEtVUkwmIHVybCwgUGFzc093blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEpCiB7
CiAgICAgaWYgKGlzTWFpblRocmVhZCgpKQogICAgICAgICBibG9iUmVnaXN0cnkoKS5yZWdpc3Rl
ckJsb2JVUkwodXJsLCBibG9iRGF0YSk7CkBAIC04Niw3ICs4NSw3IEBAIHN0YXRpYyB2b2lkIHJl
Z2lzdGVyQmxvYlVSTEZyb21UYXNrKHZvaWQKICAgICBibG9iUmVnaXN0cnkoKS5yZWdpc3RlckJs
b2JVUkwoYmxvYlJlZ2lzdHJ5Q29udGV4dC0+dXJsLCBibG9iUmVnaXN0cnlDb250ZXh0LT5zcmNV
UkwpOwogfQogCi12b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBzcmNV
UkwpCit2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IEtVUkwmIHNyY1VSTCkKIHsKICAgICBpZiAoaXNNYWluVGhyZWFkKCkp
CiAgICAgICAgIGJsb2JSZWdpc3RyeSgpLnJlZ2lzdGVyQmxvYlVSTCh1cmwsIHNyY1VSTCk7CkBA
IC0xMDIsNyArMTAxLDcgQEAgc3RhdGljIHZvaWQgdW5yZWdpc3RlckJsb2JVUkxUYXNrKHZvaWQq
CiAgICAgYmxvYlJlZ2lzdHJ5KCkudW5yZWdpc3RlckJsb2JVUkwoYmxvYlJlZ2lzdHJ5Q29udGV4
dC0+dXJsKTsKIH0KIAotdm9pZCBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxv
YlVSTChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgS1VSTCYgdXJsKQordm9pZCBUaHJl
YWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiB1cmwpCiB7
CiAgICAgaWYgKGlzTWFpblRocmVhZCgpKQogICAgICAgICBibG9iUmVnaXN0cnkoKS51bnJlZ2lz
dGVyQmxvYlVSTCh1cmwpOwpAQCAtMTE0LDE1ICsxMTMsMTUgQEAgdm9pZCBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQgogCiAjZWxzZQogCi12b2lkIFRocmVhZGFibGVCbG9iUmVn
aXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgS1VS
TCYsIFBhc3NPd25QdHI8QmxvYkRhdGE+KQordm9pZCBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojpy
ZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYsIFBhc3NPd25QdHI8QmxvYkRhdGE+KQogewogfQog
Ci12b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmKQordm9pZCBUaHJlYWRhYmxl
QmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmKQog
ewogfQogCi12b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBLVVJMJikKK3ZvaWQgVGhyZWFkYWJsZUJsb2JS
ZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYpCiB7CiB9CiAjZW5kaWYgLy8g
RU5BQkwoQkxPQikKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnku
aAkocmV2aXNpb24gNjY5NDQpCisrKyBXZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMyArMzcsMTIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBCbG9iRGF0YTsKIGNsYXNzIEtVUkw7Ci1jbGFzcyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OwogCiBjbGFzcyBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgdm9pZCByZWdpc3RlckJsb2JVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IEtVUkwmLCBQYXNzT3duUHRyPEJsb2JEYXRhPik7Ci0gICAgc3RhdGljIHZvaWQgcmVnaXN0
ZXJCbG9iVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBLVVJMJiwgY29uc3QgS1VS
TCYgc3JjVVJMKTsKLSAgICBzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgY29uc3QgS1VSTCYpOworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmxv
YlVSTChjb25zdCBLVVJMJiwgUGFzc093blB0cjxCbG9iRGF0YT4pOworICAgIHN0YXRpYyB2b2lk
IHJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYgc3JjVVJMKTsKKyAgICBz
dGF0aWMgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJik7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lv
biA2Njk0NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ0NCw3ICsxNDQ0LDcgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50OjphcHBlbmRG
b3JtRGF0YShGbwogICAgICAgICAvLyBJZiBubyBmaWxlbmFtZSBhdCBhbGwgaXMgZW50ZXJlZCwg
cmV0dXJuIHN1Y2Nlc3NmdWwgYnV0IGVtcHR5LgogICAgICAgICAvLyBOdWxsIHdvdWxkIGJlIG1v
cmUgbG9naWNhbCwgYnV0IE5ldHNjYXBlIHBvc3RzIGFuIGVtcHR5IGZpbGUuIEFyZ2guCiAgICAg
ICAgIGlmICghbnVtRmlsZXMpIHsKLSAgICAgICAgICAgIGVuY29kaW5nLmFwcGVuZEJsb2IobmFt
ZSgpLCBGaWxlOjpjcmVhdGUoZG9jdW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCAi
IikpOworICAgICAgICAgICAgZW5jb2RpbmcuYXBwZW5kQmxvYihuYW1lKCksIEZpbGU6OmNyZWF0
ZSgiIikpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApAQCAtMjA4Nywx
NSArMjA4NywxNSBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEZpbGVMaXN0RnJvbVJlCiAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgICAgICAvLyBO
b3JtYWxpemUgYmFja3NsYXNoZXMgdG8gc2xhc2hlcyBiZWZvcmUgZXhwb3NpbmcgdGhlIHJlbGF0
aXZlIHBhdGggdG8gc2NyaXB0LgogICAgICAgICAgICAgU3RyaW5nIHJlbGF0aXZlUGF0aCA9IHBh
dGhzW2ldLnN1YnN0cmluZygxICsgcm9vdFBhdGgubGVuZ3RoKCkpLnJlcGxhY2UoJ1xcJywnLycp
OwotICAgICAgICAgICAgbV9maWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShkb2N1bWVudCgp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHJlbGF0aXZlUGF0aCwgcGF0aHNbaV0pKTsKKyAg
ICAgICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUocmVsYXRpdmVQYXRoLCBw
YXRoc1tpXSkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAgICAgICBtX2ZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6
Y3JlYXRlKGRvY3VtZW50KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgcGF0aHNbaV0pKTsK
KyAgICAgICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUocGF0aHNbaV0pKTsK
ICAgICB9CiAjZWxzZQogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAg
ICBtX2ZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKGRvY3VtZW50KCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSwgcGF0aHNbaV0pKTsKKyAgICAgICAgbV9maWxlTGlzdC0+YXBwZW5kKEZp
bGU6OmNyZWF0ZShwYXRoc1tpXSkpOwogI2VuZGlmCiAKICAgICBzZXRGb3JtQ29udHJvbFZhbHVl
TWF0Y2hlc1JlbmRlcmVyKHRydWUpOwpJbmRleDogV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCShyZXZp
c2lvbiA2Njk0NCkKKysrIFdlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBTZWN1
cml0eU9yaWdpCiAgICAgaWYgKCF1cmwuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNlY3VyaXR5T3JpZ2luKEtVUkwoKSwgc2FuZGJveEZsYWdzKSk7CiAjaWYgRU5BQkxF
KEJMT0IpCi0gICAgaWYgKHVybC5wcm90b2NvbElzKCJibG9iIikpCisgICAgaWYgKHVybC5wcm90
b2NvbElzKEJsb2JVUkw6OmJsb2JQcm90b2NvbCgpKSkKICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTZWN1cml0eU9yaWdpbihCbG9iVVJMOjpnZXRPcmlnaW4odXJsKSwgc2FuZGJveEZsYWdz
KSk7CiAjZW5kaWYKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlY3VyaXR5T3JpZ2luKHVybCwg
c2FuZGJveEZsYWdzKSk7CkBAIC0yNDAsNyArMjQwLDcgQEAgYm9vbCBTZWN1cml0eU9yaWdpbjo6
Y2FuUmVxdWVzdChjb25zdCBLVQogICAgIGJvb2wgZG9VbmlxdWVPcmlnaW5DaGVjayA9IHRydWU7
CiAjaWYgRU5BQkxFKEJMT0IpCiAgICAgLy8gRm9yIGJsb2Igc2NoZW1lLCB3ZSB3YW50IHRvIGln
bm9yZSB0aGlzIGNoZWNrLgotICAgIGRvVW5pcXVlT3JpZ2luQ2hlY2sgPSAhdXJsLnByb3RvY29s
SXMoImJsb2IiKTsKKyAgICBkb1VuaXF1ZU9yaWdpbkNoZWNrID0gIXVybC5wcm90b2NvbElzKEJs
b2JVUkw6OmJsb2JQcm90b2NvbCgpKTsKICNlbmRpZgogICAgIGlmIChkb1VuaXF1ZU9yaWdpbkNo
ZWNrICYmIHRhcmdldE9yaWdpbi0+aXNVbmlxdWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMjg3LDcgKzI4Nyw3IEBAIGJvb2wgU2VjdXJpdHlPcmlnaW46OmlzQWNjZXNzV2hpdGVMaXN0
ZWQKIGJvb2wgU2VjdXJpdHlPcmlnaW46OmNhbkRpc3BsYXkoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHJlZmVycmVyLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAjaWYgRU5BQkxFKEJM
T0IpCi0gICAgaWYgKHVybC5wcm90b2NvbElzKCJibG9iIikgJiYgZG9jdW1lbnQpIHsKKyAgICBp
ZiAodXJsLnByb3RvY29sSXMoQmxvYlVSTDo6YmxvYlByb3RvY29sKCkpICYmIGRvY3VtZW50KSB7
CiAgICAgICAgIFNlY3VyaXR5T3JpZ2luKiBkb2N1bWVudE9yaWdpbiA9IGRvY3VtZW50LT5zZWN1
cml0eU9yaWdpbigpOwogICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHRhcmdldE9yaWdp
biA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUodXJsKTsKICAgICAgICAgcmV0dXJuIGRvY3VtZW50
T3JpZ2luLT5pc1NhbWVTY2hlbWVIb3N0UG9ydCh0YXJnZXRPcmlnaW4uZ2V0KCkpOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDY2OTQ0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJv
bWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2NCwxMCArMzY0LDkgQEAgUGFzc1JlZlB0cjxG
aWxlTGlzdD4gQ2xpcGJvYXJkQ2hyb21pdW06OgogICAgIGlmICghbV9kYXRhT2JqZWN0IHx8IG1f
ZGF0YU9iamVjdC0+ZmlsZW5hbWVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEZpbGVMaXN0
OjpjcmVhdGUoKTsKIAotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CiAgICAgUmVmUHRyPEZpbGVMaXN0PiBmaWxlTGlzdCA9IEZpbGVMaXN0OjpjcmVhdGUoKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzLnNpemUoKTsg
KytpKQotICAgICAgICBmaWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShzY3JpcHRFeGVjdXRp
b25Db250ZXh0LCBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcy5hdChpKSkpOworICAgICAgICBmaWxl
TGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShtX2RhdGFPYmplY3QtPmZpbGVuYW1lcy5hdChpKSkp
OwogCiAgICAgcmV0dXJuIGZpbGVMaXN0LnJlbGVhc2UoKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAkocmV2aXNpb24gNjY5NDQpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUsOSArMjY1LDgg
QEAgUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJvYXJkR3RrOjpmaWxlcwogICAgIFJlZlB0cjxG
aWxlTGlzdD4gZmlsZUxpc3QgPSBGaWxlTGlzdDo6Y3JlYXRlKCk7CiAgICAgVmVjdG9yPFN0cmlu
Zz4gZmlsZVZlY3RvcihtX2RhdGFPYmplY3QtPmZpbGVzKCkpOwogCi0gICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IG1fZnJhbWUtPmRvY3VtZW50KCkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZp
bGVWZWN0b3Iuc2l6ZSgpOyBpKyspCi0gICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3Jl
YXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGZpbGVWZWN0b3JbaV0pKTsKKyAgICAgICAgZmls
ZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUoZmlsZVZlY3RvcltpXSkpOwogCiAgICAgcmV0dXJu
IGZpbGVMaXN0LnJlbGVhc2UoKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBi
b2FyZE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRN
YWMubW0JKHJldmlzaW9uIDY2OTQ0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJk
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsMTIgKzMxMywxMSBAQCBQYXNzUmVmUHRyPEZp
bGVMaXN0PiBDbGlwYm9hcmRNYWM6OmZpbGVzCiAgICAgTlNBcnJheSAqYWJzb2x1dGVVUkxzID0g
YWJzb2x1dGVVUkxzRnJvbVBhc3RlYm9hcmRGaWxlbmFtZXMobV9wYXN0ZWJvYXJkLmdldCgpKTsK
ICAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW2Fic29sdXRlVVJMcyBjb3VudF07CiAKLSAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIFJlZlB0cjxGaWxlTGlzdD4g
ZmlsZUxpc3QgPSBGaWxlTGlzdDo6Y3JlYXRlKCk7CiAgICAgZm9yIChOU1VJbnRlZ2VyIHggPSAw
OyB4IDwgY291bnQ7IHgrKykgewogICAgICAgICBOU1VSTCAqYWJzb2x1dGVVUkwgPSBbTlNVUkwg
VVJMV2l0aFN0cmluZzpbYWJzb2x1dGVVUkxzIG9iamVjdEF0SW5kZXg6eF1dOwogICAgICAgICBB
U1NFUlQoW2Fic29sdXRlVVJMIGlzRmlsZVVSTF0pOwotICAgICAgICBmaWxlTGlzdC0+YXBwZW5k
KEZpbGU6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBbYWJzb2x1dGVVUkwgcGF0aF0p
KTsKKyAgICAgICAgZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUoW2Fic29sdXRlVVJMIHBh
dGhdKSk7CiAgICAgfQogICAgIHJldHVybiBmaWxlTGlzdC5yZWxlYXNlKCk7IC8vIFdlIHdpbGwg
YWx3YXlzIHJldHVybiBhIEZpbGVMaXN0LCBzb21ldGltZXMgZW1wdHkKIH0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcAkocmV2aXNpb24gNjY5NDQpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDQsMTMg
KzYwNCwxMiBAQCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRXaW46OmZpbGVzCiAgICAg
aWYgKCFoZHJvcCkKICAgICAgICAgcmV0dXJuIGZpbGVzLnJlbGVhc2UoKTsKIAotICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBtX2ZyYW1lLT5kb2N1
bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgV0NIQVIgZmlsZW5hbWVbTUFY
X1BBVEhdOwogICAgIFVJTlQgZmlsZUNvdW50ID0gRHJhZ1F1ZXJ5RmlsZVcoaGRyb3AsIDB4RkZG
RkZGRkYsIDAsIDApOwogICAgIGZvciAoVUlOVCBpID0gMDsgaSA8IGZpbGVDb3VudDsgaSsrKSB7
CiAgICAgICAgIGlmICghRHJhZ1F1ZXJ5RmlsZVcoaGRyb3AsIGksIGZpbGVuYW1lLCBBUlJBWVNJ
WkUoZmlsZW5hbWUpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmaWxlcy0+YXBw
ZW5kKEZpbGU6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCByZWludGVycHJldF9jYXN0
PFVDaGFyKj4oZmlsZW5hbWUpKSk7CisgICAgICAgIGZpbGVzLT5hcHBlbmQoRmlsZTo6Y3JlYXRl
KHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihmaWxlbmFtZSkpKTsKICAgICB9CiAKICAgICBHbG9i
YWxVbmxvY2sobWVkaXVtLmhHbG9iYWwpOwo=
</data>
<flag name="review"
          id="56080"
          type_id="1"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66966</attachid>
            <date>2010-09-08 16:58:07 -0700</date>
            <delta_ts>2010-09-08 18:27:21 -0700</delta_ts>
            <desc>decouple</desc>
            <filename>decouple2.txt</filename>
            <type>text/plain</type>
            <size>39904</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODQgQEAKKzIwMTAtMDktMDggIE1pY2hhZWwgTm9yZG1hbiAgPG1pY2hhZWxuQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRGVjb3VwbGUgQmxvYiBmcm9tIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTQxMAorCisgICAgICAgIC0g
UmVtb3ZlZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHBvaW50ZXJzIGZyb20gQmxvYiBhbmQgRmls
ZSBjb25zdHJ1Y3RvcnMuCisgICAgICAgIC0gUmVtb3ZlZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
J3MgY29sbGVjdGlvbiBvZiBCbG9icyBpbnN0YW5jZSBpbiB0aGF0IGNvbnRleHQuCisgICAgICAg
IC0gUmVmYWN0b3JlZCBCbG9iVVJMIHRvIG1ha2UgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuICdwdWJs
aWMnIGJsb2IgdXJscyBhbmQgJ2ludGVybmFsJworICAgICAgICAgIHVybHMgdGhhdCBhcmUgdXNl
ZCBzb2xlbHkgYXMgaWRlbnRpZmllcnMuIFRoZSBmb3JtZXIgcmVxdWlyZXMgYSBTZWN1cml0eU9y
aWdpbiB0bworICAgICAgICAgIHRvIG1hbnVmYWN0dXJlLCB0aGUgbGF0dGVyIGRvZXMgbm90Lgor
ICAgICAgICAtIEFkZGVkIGEgY29uc3RhbnQgYW5kIGFjY2Vzc29yIGZvciB0aGUgYmxvYiBwcm90
b2NvbCBzY2hlbWUgb24gdGhlIEJsb2JVUkwgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IGFyZSBhZGRlZCBzaW5jZSB0aGlzIGlzIGEgY2xlYW51cC4KKworICAgICAgICAqIGJpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURl
c2VyaWFsaXplcjo6cmVhZEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6
ZXI6OnJlYWRUZXJtaW5hbCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlppZ1phZzo6UmVhZGVyOjpyZWFkQmxvYik6
CisgICAgICAgIChXZWJDb3JlOjpaaWdaYWc6OlJlYWRlcjo6cmVhZEZpbGUpOgorICAgICAgICAo
V2ViQ29yZTo6WmlnWmFnOjpSZWFkZXI6OnJlYWRGaWxlTGlzdCk6CisgICAgICAgICogZG9tL1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6flNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y3JlYXRlUHVibGljQmxvYlVSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZXZva2VQdWJsaWNCbG9iVVJMKToKKyAg
ICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oOgorICAgICAgICAqIGZpbGVhcGkv
QmxvYi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpCbG9iKToKKyAgICAgICAgKFdlYkNv
cmU6OkJsb2I6On5CbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnNsaWNlKToKKyAgICAg
ICAgKiBmaWxlYXBpL0Jsb2IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCbG9iOjp1cmwpOgorICAgICAgICAqIGZpbGVhcGkvQmxvYi5pZGw6
CisgICAgICAgICogZmlsZWFwaS9CbG9iQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iQnVpbGRlcjo6Z2V0QmxvYik6CisgICAgICAgICogZmlsZWFwaS9CbG9iQnVpbGRlci5oOgor
ICAgICAgICAqIGZpbGVhcGkvQmxvYkJ1aWxkZXIuaWRsOgorICAgICAgICAqIGZpbGVhcGkvQmxv
YlVSTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iVVJMOjpjcmVhdGVQdWJsaWNVUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6QmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwpOgorICAgICAgICAo
V2ViQ29yZTo6QmxvYlVSTDo6Z2V0T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JVUkw6
OmdldElkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlVSTDo6Y3JlYXRlQmxvYlVS
TCk6CisgICAgICAgICogZmlsZWFwaS9CbG9iVVJMLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9i
VVJMOjpibG9iUHJvdG9jb2wpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlVSTDo6QmxvYlVSTCk6
CisgICAgICAgICogZmlsZWFwaS9GaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OkZp
bGUpOgorICAgICAgICAqIGZpbGVhcGkvRmlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6
Y3JlYXRlKToKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXIuY3BwOiBSZWdpc3RlciBhIHB1
YmxpYyB1cmwgdG8gcGVyZm9ybSB0aGUgcmVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFk
ZXI6OmNsZWFyTG9hZGVyQW5kUmVhZGFibGVVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJl
YWRlcjo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6ZGlkRmluaXNoTG9h
ZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpmYWlsZWQpOgorICAgICAgICAq
IGZpbGVhcGkvRmlsZVJlYWRlci5oOiBBZGRlZCBtX3JlYWRhYmxlVVJMIGRhdGEgbWVtYmVyLgor
ICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RmlsZVJlYWRlclN5bmM6OnJlYWQpOiBSZWdpc3RlciBhIHB1YmxpYyB1cmwgdG8gcGVyZm9ybSB0
aGUgcmVhZC4KKyAgICAgICAgKiBmaWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJM
KToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJC
bG9iVVJMKToKKyAgICAgICAgKiBmaWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaDoKKyAg
ICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudDo6YXBwZW5kRm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6c2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIpOgorICAgICAgICAqIHBhZ2UvU2Vj
dXJpdHlPcmlnaW4uY3BwOiBVc2UgQmxvYlVSTC5ibG9iUHJvdG9jb2woKS4KKyAgICAgICAgKFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW46OmNhblJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46
OmNhbkRpc3BsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpmaWxlcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwYm9hcmRHdGs6OmZpbGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ2xpcGJvYXJk
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkTWFjOjpmaWxlcyk6CisgICAgICAg
ICogcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlw
Ym9hcmRXaW46OmZpbGVzKToKKwogMjAxMC0wOS0wOCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gNjcw
MzIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk3NCwxMCArOTc0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgSWRlbnRp
ZmllciB0eXBlOwogICAgICAgICBpZiAoIXJlYWRTdHJpbmdEYXRhKHR5cGUpKQogICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChtX2lzRE9NR2xvYmFsT2JqZWN0KSB7Ci0gICAgICAg
ICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gc3Rh
dGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2V4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICAgICAgICAgIGZpbGUgPSBGaWxlOjpj
cmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgU3RyaW5nKHBhdGgudXN0cmluZygpLmltcGwo
KSksIEtVUkwoS1VSTCgpLCBTdHJpbmcodXJsLnVzdHJpbmcoKS5pbXBsKCkpKSwgU3RyaW5nKHR5
cGUudXN0cmluZygpLmltcGwoKSkpOwotICAgICAgICB9CisgICAgICAgIGZpbGUgPSBGaWxlOjpj
cmVhdGUoU3RyaW5nKHBhdGgudXN0cmluZygpLmltcGwoKSksIEtVUkwoS1VSTCgpLCBTdHJpbmco
dXJsLnVzdHJpbmcoKS5pbXBsKCkpKSwgU3RyaW5nKHR5cGUudXN0cmluZygpLmltcGwoKSkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTEwNzQsOSArMTA3MSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgICAgIGlmICgh
bV9pc0RPTUdsb2JhbE9iamVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0g
ICAgICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
ID0gc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2V4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICAgICAgICAgIEFTU0VSVChz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICAgICAgICAgIHJldHVybiB0b0pTKG1fZXhlYywg
c3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihtX2dsb2JhbE9iamVjdCksIEJsb2I6OmNy
ZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBLVVJMKEtVUkwoKSwgdXJsLnVzdHJpbmcoKS5p
bXBsKCkpLCBTdHJpbmcodHlwZS51c3RyaW5nKCkuaW1wbCgpKSwgc2l6ZSkpOworICAgICAgICAg
ICAgcmV0dXJuIHRvSlMobV9leGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1f
Z2xvYmFsT2JqZWN0KSwgQmxvYjo6Y3JlYXRlKEtVUkwoS1VSTCgpLCB1cmwudXN0cmluZygpLmlt
cGwoKSksIFN0cmluZyh0eXBlLnVzdHJpbmcoKS5pbXBsKCkpLCBzaXplKSk7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBTdHJpbmdUYWc6IHsKICAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnQ7
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
CShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODc5LDcgKzg3OSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghZG9SZWFkVWludDY0KCZzaXpl
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgUGFzc1JlZlB0cjxCbG9iPiBi
bG9iID0gQmxvYjo6Y3JlYXRlKGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgS1VSTChQYXJz
ZWRVUkxTdHJpbmcsIHVybCksIHR5cGUsIHNpemUpOworICAgICAgICBQYXNzUmVmUHRyPEJsb2I+
IGJsb2IgPSBCbG9iOjpjcmVhdGUoS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCksIHR5cGUsIHNp
emUpOwogICAgICAgICAqdmFsdWUgPSB0b1Y4KGJsb2IpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CkBAIC04OTUsNyArODk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgaWYgKCFyZWFkV2ViQ29yZVN0cmluZygmdHlwZSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFBhc3NSZWZQdHI8RmlsZT4gZmlsZSA9IEZpbGU6OmNy
ZWF0ZShnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHBhdGgsIEtVUkwoUGFyc2VkVVJMU3Ry
aW5nLCB1cmwpLCB0eXBlKTsKKyAgICAgICAgUGFzc1JlZlB0cjxGaWxlPiBmaWxlID0gRmlsZTo6
Y3JlYXRlKHBhdGgsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCB0eXBlKTsKICAgICAgICAg
KnZhbHVlID0gdG9WOChmaWxlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtOTE2
LDcgKzkxNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgaWYgKCFyZWFkV2ViQ29yZVN0cmluZygmdHlwZSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUo
Z2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBwYXRoLCBLVVJMKFBhcnNlZFVSTFN0cmluZywg
dXJsU3RyaW5nKSwgdHlwZSkpOworICAgICAgICAgICAgZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpj
cmVhdGUocGF0aCwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybFN0cmluZyksIHR5cGUpKTsKICAg
ICAgICAgfQogICAgICAgICAqdmFsdWUgPSB0b1Y4KGZpbGVMaXN0KTsKICAgICAgICAgcmV0dXJu
IHRydWU7CkluZGV4OiBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAkocmV2aXNp
b24gNjcwMzIpCisrKyBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTQsMTMgKzk0LDEwIEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6On5T
Y3JpcHRFeGVjdXRpb24KICAgICB9CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8QmxvYio+OjppdGVy
YXRvciBibG9ic0VuZCA9IG1fYmxvYnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PEJsb2IqPjo6
aXRlcmF0b3IgaXRlciA9IG1fYmxvYnMuYmVnaW4oKTsgaXRlciAhPSBibG9ic0VuZDsgKytpdGVy
KQotICAgICAgICAoKml0ZXIpLT5jb250ZXh0RGVzdHJveWVkKCk7CiAjaWYgRU5BQkxFKEJMT0Ip
CiAgICAgSGFzaFNldDxTdHJpbmc+OjppdGVyYXRvciBwdWJsaWNCbG9iVVJMc0VuZCA9IG1fcHVi
bGljQmxvYlVSTHMuZW5kKCk7CiAgICAgZm9yIChIYXNoU2V0PFN0cmluZz46Oml0ZXJhdG9yIGl0
ZXIgPSBtX3B1YmxpY0Jsb2JVUkxzLmJlZ2luKCk7IGl0ZXIgIT0gcHVibGljQmxvYlVSTHNFbmQ7
ICsraXRlcikKLSAgICAgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JV
UkwodGhpcywgS1VSTChQYXJzZWRVUkxTdHJpbmcsICppdGVyKSk7CisgICAgICAgIFRocmVhZGFi
bGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAq
aXRlcikpOwogI2VuZGlmCiB9CiAKQEAgLTE3NSwxOCArMTcyLDYgQEAgdm9pZCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpkZXN0cm95ZWRNZQogICAgIG1fbWVzc2FnZVBvcnRzLnJlbW92ZShwb3J0
KTsKIH0KIAotdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjphZGRCbG9iKEJsb2IqIGJsb2Ip
Ci17Ci0gICAgQVNTRVJUKGJsb2IpOwotICAgIG1fYmxvYnMuYWRkKGJsb2IpOwotfQotCi12b2lk
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJlbW92ZUJsb2IoQmxvYiogYmxvYikKLXsKLSAgICBB
U1NFUlQoYmxvYik7Ci0gICAgbV9ibG9icy5yZW1vdmUoYmxvYik7Ci19Ci0KIGJvb2wgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6Y2FuU3VzcGVuZEFjdGl2ZURPTU9iamVjdHMoKQogewogICAgIC8v
IE5vIHByb3RlY3Rpb24gYWdhaW5zdCBtX2FjdGl2ZURPTU9iamVjdHMgY2hhbmdpbmcgZHVyaW5n
IGl0ZXJhdGlvbjogY2FuU3VzcGVuZCgpIHNob3VsZG4ndCBleGVjdXRlIGFyYml0cmFyeSBKUy4K
QEAgLTI3Nyw4ICsyNjIsOCBAQCBET01UaW1lciogU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Zmlu
ZFRpCiAjaWYgRU5BQkxFKEJMT0IpCiBLVVJMIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmNyZWF0
ZVB1YmxpY0Jsb2JVUkwoQmxvYiogYmxvYikKIHsKLSAgICBLVVJMIHB1YmxpY1VSTCA9IEJsb2JV
Ukw6OmNyZWF0ZVVSTCh0aGlzKTsKLSAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3Rl
ckJsb2JVUkwodGhpcywgcHVibGljVVJMLCBibG9iLT51cmwoKSk7CisgICAgS1VSTCBwdWJsaWNV
UkwgPSBCbG9iVVJMOjpjcmVhdGVQdWJsaWNVUkwoc2VjdXJpdHlPcmlnaW4oKSk7CisgICAgVGhy
ZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKHB1YmxpY1VSTCwgYmxvYi0+dXJs
KCkpOwogICAgIG1fcHVibGljQmxvYlVSTHMuYWRkKHB1YmxpY1VSTC5zdHJpbmcoKSk7CiAgICAg
cmV0dXJuIHB1YmxpY1VSTDsKIH0KQEAgLTI4Niw3ICsyNzEsNyBAQCBLVVJMIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OmNyZWF0ZVB1YmxpCiB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnJl
dm9rZVB1YmxpY0Jsb2JVUkwoY29uc3QgS1VSTCYgdXJsKQogewogICAgIGlmIChtX3B1YmxpY0Js
b2JVUkxzLmNvbnRhaW5zKHVybC5zdHJpbmcoKSkpIHsKLSAgICAgICAgVGhyZWFkYWJsZUJsb2JS
ZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwodGhpcywgdXJsKTsKKyAgICAgICAgVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwodXJsKTsKICAgICAgICAgbV9wdWJsaWNC
bG9iVVJMcy5yZW1vdmUodXJsLnN0cmluZygpKTsKICAgICB9CiB9CkluZGV4OiBXZWJDb3JlL2Rv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvZG9tL1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDggKzEzMSw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCByZW1vdmVUaW1lb3V0KGludCB0aW1l
b3V0SWQpOwogICAgICAgICBET01UaW1lciogZmluZFRpbWVvdXQoaW50IHRpbWVvdXRJZCk7CiAK
LSAgICAgICAgdm9pZCBhZGRCbG9iKEJsb2IqKTsKLSAgICAgICAgdm9pZCByZW1vdmVCbG9iKEJs
b2IqKTsKICNpZiBFTkFCTEUoQkxPQikKICAgICAgICAgS1VSTCBjcmVhdGVQdWJsaWNCbG9iVVJM
KEJsb2IqKTsKICAgICAgICAgdm9pZCByZXZva2VQdWJsaWNCbG9iVVJMKGNvbnN0IEtVUkwmKTsK
QEAgLTE2Nyw3ICsxNjUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgSGFzaE1h
cDxpbnQsIERPTVRpbWVyKj4gbV90aW1lb3V0czsKIAotICAgICAgICBIYXNoU2V0PEJsb2IqPiBt
X2Jsb2JzOwogI2lmIEVOQUJMRShCTE9CKQogICAgICAgICBIYXNoU2V0PFN0cmluZz4gbV9wdWJs
aWNCbG9iVVJMczsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAkocmV2aXNpb24gNjcwMzIpCisrKyBX
ZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDU3ICszMywzNyBA
QAogCiAjaW5jbHVkZSAiQmxvYlVSTC5oIgogI2luY2x1ZGUgIkZpbGUuaCIKLSNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUJsb2JSZWdpc3Ry
eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUJsb2I6OkJsb2IoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgUGFzc093blB0cjxCbG9iRGF0YT4gYmxv
YkRhdGEsIGxvbmcgbG9uZyBzaXplKQotICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpCi0gICAgLCBtX3R5cGUoYmxvYkRhdGEtPmNvbnRlbnRUeXBl
KCkpCitCbG9iOjpCbG9iKFBhc3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhLCBsb25nIGxvbmcg
c2l6ZSkKKyAgICA6IG1fdHlwZShibG9iRGF0YS0+Y29udGVudFR5cGUoKSkKICAgICAsIG1fc2l6
ZShzaXplKQogewogICAgIEFTU0VSVChibG9iRGF0YSk7CiAKLSAgICBtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmFkZEJsb2IodGhpcyk7Ci0KICAgICAvLyBDcmVhdGUgYSBuZXcgaW50ZXJuYWwg
VVJMIGFuZCByZWdpc3RlciBpdCB3aXRoIHRoZSBwcm92aWRlZCBibG9iIGRhdGEuCi0gICAgbV91
cmwgPSBCbG9iVVJMOjpjcmVhdGVVUkwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgVGhy
ZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIG1fdXJsLCBibG9iRGF0YSk7CisgICAgbV9pbnRlcm5hbFVSTCA9IEJsb2JVUkw6OmNyZWF0
ZUludGVybmFsVVJMKCk7CisgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9i
VVJMKG1faW50ZXJuYWxVUkwsIGJsb2JEYXRhKTsKIH0KIAotQmxvYjo6QmxvYihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBLVVJMJiBzcmNVUkws
IGNvbnN0IFN0cmluZyYgdHlwZSwgbG9uZyBsb25nIHNpemUpCi0gICAgOiBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKLSAgICAsIG1fdHlwZSh0eXBlKQor
QmxvYjo6QmxvYihjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlwZSwgbG9uZyBs
b25nIHNpemUpCisgICAgOiBtX3R5cGUodHlwZSkKICAgICAsIG1fc2l6ZShzaXplKQogewotICAg
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRCbG9iKHRoaXMpOwotCiAgICAgLy8gQ3JlYXRl
IGEgbmV3IGludGVybmFsIFVSTCBhbmQgcmVnaXN0ZXIgaXQgd2l0aCB0aGUgc2FtZSBibG9iIGRh
dGEgYXMgdGhlIHNvdXJjZSBVUkwuCi0gICAgbV91cmwgPSBCbG9iVVJMOjpjcmVhdGVVUkwoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0
ZXJCbG9iVVJMKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1fdXJsLCBzcmNVUkwpOworICAgIG1f
aW50ZXJuYWxVUkwgPSBCbG9iVVJMOjpjcmVhdGVJbnRlcm5hbFVSTCgpOworICAgIFRocmVhZGFi
bGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChtX2ludGVybmFsVVJMLCBzcmNVUkwpOwog
fQogCiBCbG9iOjp+QmxvYigpCiB7Ci0gICAgLy8gVGhlIGludGVybmFsIFVSTCBpcyBvbmx5IHVz
ZWQgdG8gcmVmZXIgdG8gdGhlIEJsb2Igb2JqZWN0LiBTbyB3ZSBuZWVkIHRvIHVucmVnaXN0ZXIg
dGhlIFVSTCB3aGVuIHRoZSBvYmplY3QgaXMgR0MtZWQuCi0gICAgaWYgKG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCkgewotICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnJlbW92ZUJs
b2IodGhpcyk7Ci0gICAgICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9i
VVJMKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbV91cmwpOwotICAgIH0KLX0KLQotdm9pZCBC
bG9iOjpjb250ZXh0RGVzdHJveWVkKCkKLXsKLSAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0KTsKLQotICAgIC8vIFVucmVnaXN0ZXIgdGhlIGludGVybmFsIFVSTCBiZWZvcmUgdGhl
IGNvbnRleHQgaXMgZ29uZS4KLSAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVy
QmxvYlVSTChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1fdXJsKTsKLSAgICBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQgPSAwOworICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0
ZXJCbG9iVVJMKG1faW50ZXJuYWxVUkwpOwogfQogCiAjaWYgRU5BQkxFKEJMT0IpCi1QYXNzUmVm
UHRyPEJsb2I+IEJsb2I6OnNsaWNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgY29uc3QgU3Ry
aW5nJiBjb250ZW50VHlwZSkgY29uc3QKK1Bhc3NSZWZQdHI8QmxvYj4gQmxvYjo6c2xpY2UobG9u
ZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBl
KSBjb25zdAogewogICAgIC8vIFdoZW4gd2Ugc2xpY2UgYSBmaWxlIGZvciB0aGUgZmlyc3QgdGlt
ZSwgd2Ugb2J0YWluIGEgc25hcHNob3Qgb2YgdGhlIGZpbGUgYnkgY2FwdHVyaW5nIGl0cyBjdXJy
ZW50IHNpemUgYW5kIG1vZGlmaWNhdGlvbiB0aW1lLgogICAgIC8vIFRoZSBtb2RpZmljYXRpb24g
dGltZSB3aWxsIGJlIHVzZWQgdG8gdmVyaWZ5IGlmIHRoZSBmaWxlIGhhcyBiZWVuIGNoYW5nZWQg
b3Igbm90LCB3aGVuIHRoZSB1bmRlcmx5aW5nIGRhdGEgYXJlIGFjY2Vzc2VkLgpAQCAtMTE0LDkg
Kzk0LDkgQEAgUGFzc1JlZlB0cjxCbG9iPiBCbG9iOjpzbGljZShTY3JpcHRFeGVjdQogICAgIGlm
IChpc0ZpbGUoKSkKICAgICAgICAgYmxvYkRhdGEtPmFwcGVuZEZpbGUoc3RhdGljX2Nhc3Q8Y29u
c3QgRmlsZSo+KHRoaXMpLT5wYXRoKCksIHN0YXJ0LCBsZW5ndGgsIG1vZGlmaWNhdGlvblRpbWUp
OwogICAgIGVsc2UKLSAgICAgICAgYmxvYkRhdGEtPmFwcGVuZEJsb2IobV91cmwsIHN0YXJ0LCBs
ZW5ndGgpOworICAgICAgICBibG9iRGF0YS0+YXBwZW5kQmxvYihtX2ludGVybmFsVVJMLCBzdGFy
dCwgbGVuZ3RoKTsKIAotICAgIHJldHVybiBCbG9iOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCwgYmxvYkRhdGEucmVsZWFzZSgpLCBsZW5ndGgpOworICAgIHJldHVybiBCbG9iOjpjcmVh
dGUoYmxvYkRhdGEucmVsZWFzZSgpLCBsZW5ndGgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFdlYkNv
cmUvZmlsZWFwaS9CbG9iLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0Jsb2IuaAko
cmV2aXNpb24gNjcwMzIpCisrKyBXZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw0NiArNDEsNDIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OwotCiBjbGFzcyBCbG9iIDogcHVibGljIFJlZkNvdW50ZWQ8Qmxv
Yj4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBQYXNzT3duUHRyPEJsb2JE
YXRhPiBibG9iRGF0YSwgbG9uZyBsb25nIHNpemUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Qmxv
Yj4gY3JlYXRlKFBhc3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhLCBsb25nIGxvbmcgc2l6ZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihzY3JpcHRFeGVjdXRpb25D
b250ZXh0LCBibG9iRGF0YSwgc2l6ZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJs
b2IoYmxvYkRhdGEsIHNpemUpKTsKICAgICB9CiAKICAgICAvLyBGb3IgZGVzZXJpYWxpemF0aW9u
LgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0
cmluZyYgdHlwZSwgbG9uZyBsb25nIHNpemUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4g
Y3JlYXRlKGNvbnN0IEtVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlLCBsb25nIGxvbmcg
c2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBzcmNVUkwsIHR5cGUsIHNpemUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBCbG9iKHNyY1VSTCwgdHlwZSwgc2l6ZSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwg
fkJsb2IoKTsKIAotICAgIHZvaWQgY29udGV4dERlc3Ryb3llZCgpOwotCi0gICAgY29uc3QgS1VS
TCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KKyAgICBjb25zdCBLVVJMJiB1cmwoKSBj
b25zdCB7IHJldHVybiBtX2ludGVybmFsVVJMOyB9CiAgICAgY29uc3QgU3RyaW5nJiB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbG9u
ZyBzaXplKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPiht
X3NpemUpOyB9CiAgICAgdmlydHVhbCBib29sIGlzRmlsZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAKICNpZiBFTkFCTEUoQkxPQikKLSAgICBQYXNzUmVmUHRyPEJsb2I+IHNsaWNlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGNv
bnN0IFN0cmluZyYgY29udGVudFR5cGUgPSBTdHJpbmcoKSkgY29uc3Q7CisgICAgUGFzc1JlZlB0
cjxCbG9iPiBzbGljZShsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBsZW5ndGgsIGNvbnN0IFN0
cmluZyYgY29udGVudFR5cGUgPSBTdHJpbmcoKSkgY29uc3Q7CiAjZW5kaWYKIAogcHJvdGVjdGVk
OgotICAgIEJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NPd25QdHI8QmxvYkRhdGE+
LCBsb25nIGxvbmcgc2l6ZSk7CisgICAgQmxvYihQYXNzT3duUHRyPEJsb2JEYXRhPiwgbG9uZyBs
b25nIHNpemUpOwogCiAgICAgLy8gRm9yIGRlc2VyaWFsaXphdGlvbi4KLSAgICBCbG9iKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlw
ZSwgbG9uZyBsb25nIHNpemUpOworICAgIEJsb2IoY29uc3QgS1VSTCYgc3JjVVJMLCBjb25zdCBT
dHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBzaXplKTsKIAotICAgIC8vIFRoaXMgaXMgYW4gaW50ZXJu
YWwgVVJMIHJlZmVycmluZyB0byB0aGUgYmxvYiBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9i
amVjdC4KLSAgICAvLyBJdCBpcyBvbmx5IHVzZWQgYnkgRmlsZVJlYWRlciB0byByZWFkIHRoZSBi
bG9iIGRhdGEgdmlhIGxvYWRpbmcgZnJvbSB0aGUgYmxvYiBVUkwgcmVzb3VyY2UuCi0gICAgS1VS
TCBtX3VybDsKKyAgICAvLyBUaGlzIGlzIGFuIGludGVybmFsIFVSTCByZWZlcnJpbmcgdG8gdGhl
IGJsb2IgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcyBvYmplY3QuIEl0IHNlcnZlcworICAgIC8v
IGFzIGFuIGlkZW50aWZpZXIgZm9yIHRoaXMgYmxvYi4gVGhlIGludGVybmFsIFVSTCBpcyBuZXZl
ciB1c2VkIHRvIHNvdXJjZSB0aGUgYmxvYidzIGNvbnRlbnQKKyAgICAvLyBpbnRvIGFuIEhUTUwg
b3IgZm9yIEZpbGVSZWFkJ2luZywgcHVibGljIGJsb2IgVVJMcyBtdXN0IGJlIHVzZWQgZm9yIHRo
b3NlIHB1cnBvc2VzLgorICAgIEtVUkwgbV9pbnRlcm5hbFVSTDsKICAgICAKLSAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgU3RyaW5nIG1f
dHlwZTsKICAgICBsb25nIGxvbmcgbV9zaXplOwogfTsKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9C
bG9iLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvQmxvYi5pZGwJKHJldmlzaW9u
IDY3MDMyKQorKysgV2ViQ29yZS9maWxlYXBpL0Jsb2IuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw3ICszOCw3IEBAIG1vZHVsZSBodG1sIHsKIAogI2lmICFkZWZpbmVkKExBTkdVQUdFX09CSkVD
VElWRV9DKQogI2lmIGRlZmluZWQoRU5BQkxFX0JMT0IpICYmIEVOQUJMRV9CTE9CCi0gICAgICAg
IFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBCbG9iIHNsaWNlKGluIGxvbmcgbG9u
ZyBzdGFydCwgaW4gbG9uZyBsb25nIGxlbmd0aCwgaW4gW09wdGlvbmFsLCBDb252ZXJ0VW5kZWZp
bmVkT3JOdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgY29udGVudFR5cGUpOworICAgICAgICBC
bG9iIHNsaWNlKGluIGxvbmcgbG9uZyBzdGFydCwgaW4gbG9uZyBsb25nIGxlbmd0aCwgaW4gW09w
dGlvbmFsLCBDb252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgY29u
dGVudFR5cGUpOwogI2VuZGlmCiAjZW5kaWYKICAgICB9OwpJbmRleDogV2ViQ29yZS9maWxlYXBp
L0Jsb2JCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1aWxk
ZXIuY3BwCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvZmlsZWFwaS9CbG9iQnVpbGRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExNywxMyArMTE3LDEzIEBAIGJvb2wgQmxvYkJ1aWxkZXI6
OmFwcGVuZChQYXNzUmVmUHRyPEJsb2IKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUGFzc1JlZlB0
cjxCbG9iPiBCbG9iQnVpbGRlcjo6Z2V0QmxvYihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQorUGFzc1JlZlB0
cjxCbG9iPiBCbG9iQnVpbGRlcjo6Z2V0QmxvYihjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQog
ewogICAgIE93blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRlKCk7CiAg
ICAgYmxvYkRhdGEtPnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKTsKICAgICBibG9iRGF0YS0+
c3dhcEl0ZW1zKG1faXRlbXMpOwogCi0gICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpjcmVh
dGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgYmxvYkRhdGEucmVsZWFzZSgpLCBtX3NpemUpOwor
ICAgIFJlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6Y3JlYXRlKGJsb2JEYXRhLnJlbGVhc2UoKSwg
bV9zaXplKTsKIAogICAgIC8vIEFmdGVyIGNyZWF0aW5nIGEgYmxvYiBmcm9tIHRoZSBjdXJyZW50
IGJsb2IgZGF0YSwgd2UgZG8gbm90IG5lZWQgdG8ga2VlcCB0aGUgZGF0YSBhcm91bmQgYW55IG1v
cmUuIEluc3RlYWQsIHdlIG9ubHkKICAgICAvLyBuZWVkIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8g
dGhlIFVSTCBvZiB0aGUgYmxvYiBqdXN0IGNyZWF0ZWQuCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkv
QmxvYkJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1aWxkZXIu
aAkocmV2aXNpb24gNjcwMzIpCisrKyBXZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1aWxkZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBCbG9iOwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFRleHRFbmNvZGlu
ZzsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKQEAgLTU0LDcgKzUzLDcgQEAgcHVibGlj
OgogICAgIGJvb2wgYXBwZW5kKGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIGJvb2wgYXBwZW5kKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBlbmRpbmcs
IEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIFBhc3NSZWZQdHI8QmxvYj4gZ2V0QmxvYihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSA9IFN0cmluZygpKTsK
KyAgICBQYXNzUmVmUHRyPEJsb2I+IGdldEJsb2IoY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSA9
IFN0cmluZygpKTsKIAogcHJpdmF0ZToKICAgICBCbG9iQnVpbGRlcigpOwpJbmRleDogV2ViQ29y
ZS9maWxlYXBpL0Jsb2JCdWlsZGVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkv
QmxvYkJ1aWxkZXIuaWRsCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvZmlsZWFwaS9CbG9i
QnVpbGRlci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbW9kdWxlIGh0bWwg
ewogICAgICAgICBOb1N0YXRpY1RhYmxlcwogICAgIF0gQmxvYkJ1aWxkZXIgewogI2lmICFkZWZp
bmVkKExBTkdVQUdFX09CSkVDVElWRV9DKQotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0
aW9uQ29udGV4dF0gQmxvYiBnZXRCbG9iKGluIFtPcHRpb25hbCwgQ29udmVydFVuZGVmaW5lZE9y
TnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGNvbnRlbnRUeXBlKTsKKyAgICAgICAgQmxvYiBn
ZXRCbG9iKGluIFtPcHRpb25hbCwgQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10g
RE9NU3RyaW5nIGNvbnRlbnRUeXBlKTsKICNlbmRpZgogICAgICAgICB2b2lkIGFwcGVuZChpbiBC
bG9iIGJsb2IpOwogICAgICAgICB2b2lkIGFwcGVuZChpbiBET01TdHJpbmcgdmFsdWUsIGluIFtP
cHRpb25hbCwgQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGVu
ZGluZ3MpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9CbG9i
VVJMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5jcHAJKHJldmlz
aW9uIDY3MDMyKQorKysgV2ViQ29yZS9maWxlYXBpL0Jsb2JVUkwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCwyOCArMzQsMjcgQEAKIAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlVVSUQuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1LVVJMIEJsb2JVUkw6OmNyZWF0ZVVSTChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorY29uc3QgY2hhciBCbG9iVVJMOjprQmxvYlByb3Rv
Y29sW10gPSAiYmxvYiI7CisKK0tVUkwgQmxvYlVSTDo6Y3JlYXRlUHVibGljVVJMKFNlY3VyaXR5
T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKIHsKLSAgICAvLyBDcmVhdGUgdGhlIGJsb2IgVVJMIGlu
IHRoZSBmb2xsb3dpbmcgZm9ybWF0OgotICAgIC8vICAgICBibG9iOiVlc2NhcGVkX29yaWdpbiUv
JVVVSUQlCi0gICAgLy8gVGhlIG9yaWdpbiBvZiB0aGUgaG9zdCBwYWdlIGlzIGVuY29kZWQgaW4g
dGhlIFVSTCB2YWx1ZSB0byBhbGxvdyBlYXN5IGxvb2t1cCBvZiB0aGUgb3JpZ2luIHdoZW4gdGhl
IHNlY3VyaXR5IGNoZWNrIG5lZWRzCi0gICAgLy8gdG8gYmUgcGVyZm9ybWVkLgotICAgIFN0cmlu
ZyB1cmxTdHJpbmcgPSAiYmxvYjoiOwotICAgIHVybFN0cmluZyArPSBlbmNvZGVXaXRoVVJMRXNj
YXBlU2VxdWVuY2VzKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRv
U3RyaW5nKCkpOwotICAgIHVybFN0cmluZyArPSAiLyI7Ci0gICAgdXJsU3RyaW5nICs9IGNyZWF0
ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKLSAgICByZXR1cm4gS1VSTChQYXJzZWRVUkxTdHJpbmcs
IHVybFN0cmluZyk7CisgICAgQVNTRVJUKHNlY3VyaXR5T3JpZ2luKTsKKyAgICByZXR1cm4gY3Jl
YXRlQmxvYlVSTChzZWN1cml0eU9yaWdpbi0+dG9TdHJpbmcoKSk7Cit9CisKK0tVUkwgQmxvYlVS
TDo6Y3JlYXRlSW50ZXJuYWxVUkwoKQoreworICAgIHJldHVybiBjcmVhdGVCbG9iVVJMKCJibG9i
aW50ZXJuYWw6Ly8iKTsKIH0KIAogS1VSTCBCbG9iVVJMOjpnZXRPcmlnaW4oY29uc3QgS1VSTCYg
dXJsKQogewotICAgIEFTU0VSVCh1cmwucHJvdG9jb2xJcygiYmxvYiIpKTsKKyAgICBBU1NFUlQo
dXJsLnByb3RvY29sSXMoa0Jsb2JQcm90b2NvbCkpOwogCiAgICAgdW5zaWduZWQgc3RhcnRJbmRl
eCA9IHVybC5wYXRoU3RhcnQoKTsKICAgICB1bnNpZ25lZCBhZnRlckVuZEluZGV4ID0gdXJsLnBh
dGhBZnRlckxhc3RTbGFzaCgpOwpAQCAtNjUsMTAgKzY0LDIwIEBAIEtVUkwgQmxvYlVSTDo6Z2V0
T3JpZ2luKGNvbnN0IEtVUkwmIHVybCkKIAogU3RyaW5nIEJsb2JVUkw6OmdldElkZW50aWZpZXIo
Y29uc3QgS1VSTCYgdXJsKQogewotICAgIEFTU0VSVCh1cmwucHJvdG9jb2xJcygiYmxvYiIpKTsK
KyAgICBBU1NFUlQodXJsLnByb3RvY29sSXMoa0Jsb2JQcm90b2NvbCkpOwogCiAgICAgdW5zaWdu
ZWQgc3RhcnRJbmRleCA9IHVybC5wYXRoQWZ0ZXJMYXN0U2xhc2goKTsKICAgICByZXR1cm4gdXJs
LnN0cmluZygpLnN1YnN0cmluZyhzdGFydEluZGV4KTsKIH0KIAorS1VSTCBCbG9iVVJMOjpjcmVh
dGVCbG9iVVJMKGNvbnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nKQoreworICAgIFN0cmluZyB1cmxT
dHJpbmcgPSBrQmxvYlByb3RvY29sOworICAgIHVybFN0cmluZyArPSAiOiI7CisgICAgdXJsU3Ry
aW5nICs9IGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMob3JpZ2luU3RyaW5nKTsKKyAgICB1
cmxTdHJpbmcgKz0gIi8iOworICAgIHVybFN0cmluZyArPSBjcmVhdGVDYW5vbmljYWxVVUlEU3Ry
aW5nKCk7CisgICAgcmV0dXJuIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmxTdHJpbmcpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmgJKHJldmlzaW9uIDY3MDMy
KQorKysgV2ViQ29yZS9maWxlYXBpL0Jsb2JVUkwuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMg
KzM1LDI5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDsKK2NsYXNzIFNlY3VyaXR5T3JpZ2luOwogCisvLyBCbG9iIFVSTHMgYXJlIG9mIHRo
ZSBmb3JtCisvLyAgICAgYmxvYjolZXNjYXBlZF9vcmlnaW4lLyVVVUlEJQorLy8gRm9yIHB1Ymxp
YyB1cmxzLCB0aGUgb3JpZ2luIG9mIHRoZSBob3N0IHBhZ2UgaXMgZW5jb2RlZCBpbiB0aGUgVVJM
IHZhbHVlIHRvCisvLyBhbGxvdyBlYXN5IGxvb2t1cCBvZiB0aGUgb3JpZ2luIHdoZW4gc2VjdXJp
dHkgY2hlY2tzIG5lZWQgdG8gYmUgcGVyZm9ybWVkLgorLy8gV2hlbiBsb2FkaW5nIGJsb2JzIHZp
YSBSZXNvdXJjZUhhbmRsZSBvciB3aGVuIHJlYWRpbmcgYmxvYnMgdmlhIEZpbGVSZWFkZXIKKy8v
IHRoZSBsb2FkZXIgY29uZHVjdHMgc2VjdXJpdHkgY2hlY2tzIHRoYXQgZXhhbWluZSB0aGUgb3Jp
Z2luIG9mIGhvc3QgcGFnZQorLy8gZW5jb2RlZCBpbiB0aGUgcHVibGljIGJsb2IgdXJsLiBUaGUg
b3JpZ2luIGJha2VkIGludG8gaW50ZXJuYWwgYmxvYiB1cmxzCisvLyBpcyBhIHNpbXBsZSBjb25z
dGFudCB2YWx1ZSwgImJsb2JpbnRlcm5hbDovLyIsIGludGVybmFsIHVybHMgc2hvdWxkIG5vdAor
Ly8gYmUgdXNlZCB3aXRoIFJlc291cmNlSGFuZGxlIG9yIEZpbGVSZWFkZXIuCiBjbGFzcyBCbG9i
VVJMIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgS1VSTCBjcmVhdGVVUkwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCopOworICAgIHN0YXRpYyBLVVJMIGNyZWF0ZVB1YmxpY1VSTChTZWN1cml0eU9yaWdp
biopOworICAgIHN0YXRpYyBLVVJMIGNyZWF0ZUludGVybmFsVVJMKCk7CiAgICAgc3RhdGljIEtV
UkwgZ2V0T3JpZ2luKGNvbnN0IEtVUkwmKTsKLSAgICBzdGF0aWMgU3RyaW5nIGdldElkZW50aWZp
ZXIoY29uc3QgS1VSTCYgdXJsKTsKKyAgICBzdGF0aWMgU3RyaW5nIGdldElkZW50aWZpZXIoY29u
c3QgS1VSTCYpOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBibG9iUHJvdG9jb2woKSB7IHJldHVy
biBrQmxvYlByb3RvY29sOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIEtVUkwgY3JlYXRlQmxv
YlVSTChjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZyk7CisgICAgc3RhdGljIGNvbnN0IGNoYXIg
a0Jsb2JQcm90b2NvbFtdOworICAgIEJsb2JVUkwoKSB7IH0KIH07CiAKIH0KSW5kZXg6IFdlYkNv
cmUvZmlsZWFwaS9GaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZS5j
cHAJKHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29yZS9maWxlYXBpL0ZpbGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
RmlsZS5oIgogCi0jaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiRmlsZVN5c3Rl
bS5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKIApAQCAtNDUsMjMgKzQ0LDIzIEBA
IHN0YXRpYyBQYXNzT3duUHRyPEJsb2JEYXRhPiBjcmVhdGVCbG9iRGEKICAgICByZXR1cm4gYmxv
YkRhdGEucmVsZWFzZSgpOwogfQogCi1GaWxlOjpGaWxlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgcGF0aCkKLSAgICA6IEJsb2Io
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY3JlYXRlQmxvYkRhdGFGb3JGaWxlKHBhdGgpLCAtMSkK
K0ZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQorICAgIDogQmxvYihjcmVhdGVCbG9iRGF0
YUZvckZpbGUocGF0aCksIC0xKQogICAgICwgbV9wYXRoKHBhdGgpCiAgICAgLCBtX25hbWUocGF0
aEdldEZpbGVOYW1lKHBhdGgpKQogewogfQogCi1GaWxlOjpGaWxlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHR5cGUpCi0gICAgOiBCbG9iKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQsIHVybCwgdHlwZSwgLTEpCitGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHR5cGUpCisgICAgOiBCbG9iKHVybCwgdHlw
ZSwgLTEpCiAgICAgLCBtX3BhdGgocGF0aCkKIHsKICAgICBtX25hbWUgPSBwYXRoR2V0RmlsZU5h
bWUocGF0aCk7CiB9CiAKICNpZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKLUZpbGU6OkZpbGUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3Ry
aW5nJiByZWxhdGl2ZVBhdGgsIGNvbnN0IFN0cmluZyYgcGF0aCkKLSAgICA6IEJsb2Ioc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgY3JlYXRlQmxvYkRhdGFGb3JGaWxlKHBhdGgpLCAtMSkKK0ZpbGU6
OkZpbGUoY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgsIGNvbnN0IFN0cmluZyYgcGF0aCkKKyAg
ICA6IEJsb2IoY3JlYXRlQmxvYkRhdGFGb3JGaWxlKHBhdGgpLCAtMSkKICAgICAsIG1fcGF0aChw
YXRoKQogICAgICwgbV9yZWxhdGl2ZVBhdGgocmVsYXRpdmVQYXRoKQogewpJbmRleDogV2ViQ29y
ZS9maWxlYXBpL0ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZS5oCShy
ZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDI1ICszNCwyNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBLVVJMOwot
Y2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgRmlsZSA6IHB1YmxpYyBCbG9i
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlPiBjcmVhdGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiBwYXRo
KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGU+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgp
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCwgcGF0aCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUocGF0aCkp
OwogICAgIH0KIAogICAgIC8vIEZvciBkZXNlcmlhbGl6YXRpb24uCi0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8RmlsZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgS1VSTCYgc3JjVVJMLCBjb25zdCBT
dHJpbmcmIHR5cGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZT4gY3JlYXRlKGNvbnN0IFN0
cmluZyYgcGF0aCwgY29uc3QgS1VSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgcGF0aCwgc3JjVVJMLCB0eXBlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmls
ZShwYXRoLCBzcmNVUkwsIHR5cGUpKTsKICAgICB9CiAKICNpZiBFTkFCTEUoRElSRUNUT1JZX1VQ
TE9BRCkKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBh
dGgsIGNvbnN0IFN0cmluZyYgcGF0aCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlPiBjcmVh
dGUoY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgsIGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsZShzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCByZWxhdGl2ZVBhdGgsIHBhdGgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxl
KHJlbGF0aXZlUGF0aCwgcGF0aCkpOwogICAgIH0KICNlbmRpZgogCkBAIC03NCwxMyArNzMsMTMg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBmaWxlU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIHNpemUoKTsgfQogCiBwcml2YXRlOgotICAgIEZpbGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpOwog
ICAgIAogICAgIC8vIEZvciBkZXNlcmlhbGl6YXRpb24uCi0gICAgRmlsZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0
IFN0cmluZyYgdHlwZSk7CisgICAgRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEtVUkwm
IHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlKTsKIAogI2lmIEVOQUJMRShESVJFQ1RPUllfVVBM
T0FEKQotICAgIEZpbGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgcmVs
YXRpdmVQYXRoLCBjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIEZpbGUoY29uc3QgU3RyaW5nJiBy
ZWxhdGl2ZVBhdGgsIGNvbnN0IFN0cmluZyYgcGF0aCk7CiAjZW5kaWYKIAogICAgIFN0cmluZyBt
X3BhdGg7CkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCShyZXZpc2lvbiA2NzAzMikKKysrIFdl
YkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYs
NyBAQAogCiAjaW5jbHVkZSAiQmFzZTY0LmgiCiAjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUg
IkJsb2JVUkwuaCIKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJGaWxl
LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAtNDQsNiArNDUsNyBAQAogI2luY2x1ZGUgIlJl
c291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNp
bmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkYWJsZUJsb2JS
ZWdpc3RyeS5oIgogI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKICNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KIApAQCAtMTU0LDE3ICsxNTYsMjcgQEAgdm9pZCBGaWxlUmVhZGVyOjp0
ZXJtaW5hdGUoKQogewogICAgIGlmIChtX2xvYWRlcikgewogICAgICAgICBtX2xvYWRlci0+Y2Fu
Y2VsKCk7Ci0gICAgICAgIG1fbG9hZGVyID0gMDsKKyAgICAgICAgY2xlYXJMb2FkZXJBbmRSZWFk
YWJsZVVSTCgpOwogICAgIH0KICAgICBtX3N0YXRlID0gQ29tcGxldGVkOwogfQogCit2b2lkIEZp
bGVSZWFkZXI6OmNsZWFyTG9hZGVyQW5kUmVhZGFibGVVUkwoKQoreworICAgIG1fbG9hZGVyID0g
MDsKKyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVSTChtX3JlYWRh
YmxlVVJMKTsKKyAgICBtX3JlYWRhYmxlVVJMID0gS1VSTCgpOworfQorCiB2b2lkIEZpbGVSZWFk
ZXI6OnN0YXJ0KCkKIHsKICAgICBtX3N0YXRlID0gT3BlbmluZzsKIAotICAgIC8vIFRoZSBibG9i
IGlzIHJlYWQgYnkgcm91dGluZyB0aHJvdWdoIHRoZSByZXF1ZXN0IGhhbmRsaW5nIGxheWVyIGdp
dmVuIHRoZSBibG9iIHVybC4KLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChtX2Jsb2ItPnVy
bCgpKTsKKyAgICAvLyBUaGUgYmxvYiBpcyByZWFkIGJ5IHJvdXRpbmcgdGhyb3VnaCB0aGUgcmVx
dWVzdCBoYW5kbGluZyBsYXllciBnaXZlbiBhIHRlbXBvcmFyeSBwdWJsaWMgdXJsLgorICAgIG1f
cmVhZGFibGVVUkwgPSBCbG9iVVJMOjpjcmVhdGVQdWJsaWNVUkwoc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojpy
ZWdpc3RlckJsb2JVUkwocmVhZGFibGVVUkwsIG1fYmxvYi0+dXJsKCkpOworCisgICAgUmVzb3Vy
Y2VSZXF1ZXN0IHJlcXVlc3QobV9yZWFkYWJsZVVSTCk7CiAgICAgcmVxdWVzdC5zZXRIVFRQTWV0
aG9kKCJHRVQiKTsKIAogICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnM7CkBAIC0y
MzAsNyArMjQyLDcgQEAgdm9pZCBGaWxlUmVhZGVyOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbgog
ICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkubG9hZEV2ZW50KTsKICAgICBmaXJlRXZlbnQoZXZl
bnROYW1lcygpLmxvYWRlbmRFdmVudCk7CiAKLSAgICBtX2xvYWRlciA9IDA7CisgICAgY2xlYXJM
b2FkZXJBbmRSZWFkYWJsZVVSTCgpOwogfQogCiB2b2lkIEZpbGVSZWFkZXI6OmRpZEZhaWwoY29u
c3QgUmVzb3VyY2VFcnJvciYpCkBAIC0yNDcsNyArMjU5LDcgQEAgdm9pZCBGaWxlUmVhZGVyOjpm
YWlsZWQoaW50IGh0dHBTdGF0dXNDbwogICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkuZXJyb3JF
dmVudCk7CiAgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS5sb2FkZW5kRXZlbnQpOwogCi0gICAg
bV9sb2FkZXIgPSAwOworICAgIGNsZWFyTG9hZGVyQW5kUmVhZGFibGVVUkwoKTsKIH0KIAogRXhj
ZXB0aW9uQ29kZSBGaWxlUmVhZGVyOjpodHRwU3RhdHVzQ29kZVRvRXhjZXB0aW9uQ29kZShpbnQg
aHR0cFN0YXR1c0NvZGUpCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgJKHJldmlzaW9uIDY3MDMyKQor
KysgV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDYg
KzEzMCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2
ZW50VGFyZ2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQogCiAgICAgdm9p
ZCB0ZXJtaW5hdGUoKTsKKyAgICB2b2lkIGNsZWFyTG9hZGVyQW5kUmVhZGFibGVVUkwoKTsKICAg
ICB2b2lkIHJlYWRJbnRlcm5hbChCbG9iKiwgUmVhZFR5cGUpOwogICAgIHZvaWQgZmFpbGVkKGlu
dCBodHRwU3RhdHVzQ29kZSk7CiAgICAgdm9pZCBmaXJlRXJyb3JFdmVudChpbnQgaHR0cFN0YXR1
c0NvZGUpOwpAQCAtMTQxLDYgKzE0Miw3IEBAIHByaXZhdGU6CiAgICAgRXZlbnRUYXJnZXREYXRh
IG1fZXZlbnRUYXJnZXREYXRhOwogCiAgICAgUmVmUHRyPEJsb2I+IG1fYmxvYjsKKyAgICBLVVJM
IG1fcmVhZGFibGVVUkw7CiAgICAgUmVhZFR5cGUgbV9yZWFkVHlwZTsKICAgICBUZXh0RW5jb2Rp
bmcgbV9lbmNvZGluZzsKIApJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwCShyZXZp
c2lvbiA2NzAzMikKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDExICszNiwxMyBAQAogCiAjaW5jbHVkZSAiQmFzZTY0LmgiCiAjaW5j
bHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkJsb2JVUkwuaCIKICNpbmNsdWRlICJGaWxlUmVhZGVy
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgIlRleHRS
ZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgiCiAj
aW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0x
NDksMTIgKzE1MSwxNiBAQCBjb25zdCBTY3JpcHRTdHJpbmcmIEZpbGVSZWFkZXJTeW5jOjpyZWFk
CiAKIHZvaWQgRmlsZVJlYWRlclN5bmM6OnJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgQmxvYiogYmxvYiwgUmVhZFR5cGUgcmVhZFR5cGUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewotICAgIC8vIFRoZSBibG9iIGlzIHJlYWQgYnkgcm91dGluZyB0aHJv
dWdoIHRoZSByZXF1ZXN0IGhhbmRsaW5nIGxheWVyIGdpdmVuIHRoZSBibG9iIHVybC4KLSAgICBS
ZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChibG9iLT51cmwoKSk7CisgICAgLy8gVGhlIGJsb2IgaXMg
cmVhZCBieSByb3V0aW5nIHRocm91Z2ggdGhlIHJlcXVlc3QgaGFuZGxpbmcgbGF5ZXIgZ2l2ZW4g
dGhlIHRlbXBvcnkgcHVibGljIHVybC4KKyAgICBLVVJMIHJlYWRhYmxlVVJMID0gQmxvYlVSTDo6
Y3JlYXRlUHVibGljVVJMKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCkp
OworICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChyZWFkYWJsZVVS
TCwgYmxvYi0+dXJsKCkpOworCisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QocmVhZGFibGVV
UkwpOwogICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7CiAKICAgICBGaWxlUmVhZGVy
U3luY0xvYWRlciBsb2FkZXIoKHJlYWRUeXBlID09IFJlYWRBc0JpbmFyeVN0cmluZykgPyAmbV9y
ZXN1bHQgOiAwKTsKICAgICBsb2FkZXIuc3RhcnQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgcmVx
dWVzdCwgZWMpOworICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJM
KHJlYWRhYmxlVVJMKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogV2Vi
Q29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gNjcwMzIp
CisrKyBXZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDcgKzM0LDYgQEAKIAogI2luY2x1ZGUgIkJsb2JEYXRhLmgiCiAjaW5jbHVk
ZSAiQmxvYlJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgog
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTcw
LDcgKzY5LDcgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJMVGFzayh2b2lkKiBjbwogICAg
IGJsb2JSZWdpc3RyeSgpLnJlZ2lzdGVyQmxvYlVSTChibG9iUmVnaXN0cnlDb250ZXh0LT51cmws
IGJsb2JSZWdpc3RyeUNvbnRleHQtPmJsb2JEYXRhLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgVGhy
ZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBjb25zdCBLVVJMJiB1cmwsIFBhc3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhKQordm9p
ZCBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYgdXJs
LCBQYXNzT3duUHRyPEJsb2JEYXRhPiBibG9iRGF0YSkKIHsKICAgICBpZiAoaXNNYWluVGhyZWFk
KCkpCiAgICAgICAgIGJsb2JSZWdpc3RyeSgpLnJlZ2lzdGVyQmxvYlVSTCh1cmwsIGJsb2JEYXRh
KTsKQEAgLTg2LDcgKzg1LDcgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJMRnJvbVRhc2so
dm9pZAogICAgIGJsb2JSZWdpc3RyeSgpLnJlZ2lzdGVyQmxvYlVSTChibG9iUmVnaXN0cnlDb250
ZXh0LT51cmwsIGJsb2JSZWdpc3RyeUNvbnRleHQtPnNyY1VSTCk7CiB9CiAKLXZvaWQgVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIHNyY1VSTCkKK3ZvaWQgVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYg
c3JjVVJMKQogewogICAgIGlmIChpc01haW5UaHJlYWQoKSkKICAgICAgICAgYmxvYlJlZ2lzdHJ5
KCkucmVnaXN0ZXJCbG9iVVJMKHVybCwgc3JjVVJMKTsKQEAgLTEwMiw3ICsxMDEsNyBAQCBzdGF0
aWMgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTFRhc2sodm9pZCoKICAgICBibG9iUmVnaXN0cnkoKS51
bnJlZ2lzdGVyQmxvYlVSTChibG9iUmVnaXN0cnlDb250ZXh0LT51cmwpOwogfQogCi12b2lkIFRo
cmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBjb25zdCBLVVJMJiB1cmwpCit2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVu
cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBpZiAoaXNNYWluVGhyZWFk
KCkpCiAgICAgICAgIGJsb2JSZWdpc3RyeSgpLnVucmVnaXN0ZXJCbG9iVVJMKHVybCk7CkBAIC0x
MTQsMTUgKzExMywxNSBAQCB2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJC
CiAKICNlbHNlCiAKLXZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJM
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBLVVJMJiwgUGFzc093blB0cjxCbG9iRGF0
YT4pCit2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBL
VVJMJiwgUGFzc093blB0cjxCbG9iRGF0YT4pCiB7CiB9CiAKLXZvaWQgVGhyZWFkYWJsZUJsb2JS
ZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBL
VVJMJiwgY29uc3QgS1VSTCYpCit2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVy
QmxvYlVSTChjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpCiB7CiB9CiAKLXZvaWQgVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IEtVUkwmKQordm9pZCBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxv
YlVSTChjb25zdCBLVVJMJikKIHsKIH0KICNlbmRpZiAvLyBFTkFCTChCTE9CKQpJbmRleDogV2Vi
Q29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oCShyZXZpc2lvbiA2NzAzMikKKysr
IFdlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDEzICszNywxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEJsb2JEYXRh
OwogY2xhc3MgS1VSTDsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIGNsYXNzIFRo
cmVhZGFibGVCbG9iUmVnaXN0cnkgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVy
QmxvYlVSTChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgS1VSTCYsIFBhc3NPd25QdHI8
QmxvYkRhdGE+KTsKLSAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJsb2JVUkwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiBzcmNVUkwpOwotICAgIHN0YXRp
YyB2b2lkIHVucmVnaXN0ZXJCbG9iVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBL
VVJMJik7CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmLCBQYXNz
T3duUHRyPEJsb2JEYXRhPik7CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0
IEtVUkwmLCBjb25zdCBLVVJMJiBzcmNVUkwpOworICAgIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJC
bG9iVVJMKGNvbnN0IEtVUkwmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ0LDcgKzE0NDQs
NyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEZvCiAgICAgICAgIC8v
IElmIG5vIGZpbGVuYW1lIGF0IGFsbCBpcyBlbnRlcmVkLCByZXR1cm4gc3VjY2Vzc2Z1bCBidXQg
ZW1wdHkuCiAgICAgICAgIC8vIE51bGwgd291bGQgYmUgbW9yZSBsb2dpY2FsLCBidXQgTmV0c2Nh
cGUgcG9zdHMgYW4gZW1wdHkgZmlsZS4gQXJnaC4KICAgICAgICAgaWYgKCFudW1GaWxlcykgewot
ICAgICAgICAgICAgZW5jb2RpbmcuYXBwZW5kQmxvYihuYW1lKCksIEZpbGU6OmNyZWF0ZShkb2N1
bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICIiKSk7CisgICAgICAgICAgICBlbmNv
ZGluZy5hcHBlbmRCbG9iKG5hbWUoKSwgRmlsZTo6Y3JlYXRlKCIiKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0yMDg3LDE1ICsyMDg3LDE1IEBAIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6c2V0RmlsZUxpc3RGcm9tUmUKICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSBiYWNrc2xhc2hlcyB0
byBzbGFzaGVzIGJlZm9yZSBleHBvc2luZyB0aGUgcmVsYXRpdmUgcGF0aCB0byBzY3JpcHQuCiAg
ICAgICAgICAgICBTdHJpbmcgcmVsYXRpdmVQYXRoID0gcGF0aHNbaV0uc3Vic3RyaW5nKDEgKyBy
b290UGF0aC5sZW5ndGgoKSkucmVwbGFjZSgnXFwnLCcvJyk7Ci0gICAgICAgICAgICBtX2ZpbGVM
aXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKGRvY3VtZW50KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSwgcmVsYXRpdmVQYXRoLCBwYXRoc1tpXSkpOworICAgICAgICAgICAgbV9maWxlTGlzdC0+
YXBwZW5kKEZpbGU6OmNyZWF0ZShyZWxhdGl2ZVBhdGgsIHBhdGhzW2ldKSk7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAg
ICAgICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUoZG9jdW1lbnQoKS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLCBwYXRoc1tpXSkpOworICAgICAgICAgICAgbV9maWxlTGlz
dC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShwYXRoc1tpXSkpOwogICAgIH0KICNlbHNlCiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChG
aWxlOjpjcmVhdGUoZG9jdW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBwYXRoc1tp
XSkpOworICAgICAgICBtX2ZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHBhdGhzW2ldKSk7
CiAjZW5kaWYKIAogICAgIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7
CkluZGV4OiBXZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29y
ZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3
IEBAIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IFNlY3VyaXR5T3JpZ2kKICAgICBpZiAoIXVy
bC5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VjdXJpdHlPcmlnaW4o
S1VSTCgpLCBzYW5kYm94RmxhZ3MpKTsKICNpZiBFTkFCTEUoQkxPQikKLSAgICBpZiAodXJsLnBy
b3RvY29sSXMoImJsb2IiKSkKKyAgICBpZiAodXJsLnByb3RvY29sSXMoQmxvYlVSTDo6YmxvYlBy
b3RvY29sKCkpKQogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlY3VyaXR5T3JpZ2luKEJs
b2JVUkw6OmdldE9yaWdpbih1cmwpLCBzYW5kYm94RmxhZ3MpKTsKICNlbmRpZgogICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU2VjdXJpdHlPcmlnaW4odXJsLCBzYW5kYm94RmxhZ3MpKTsKQEAgLTI0
MCw3ICsyNDAsNyBAQCBib29sIFNlY3VyaXR5T3JpZ2luOjpjYW5SZXF1ZXN0KGNvbnN0IEtVCiAg
ICAgYm9vbCBkb1VuaXF1ZU9yaWdpbkNoZWNrID0gdHJ1ZTsKICNpZiBFTkFCTEUoQkxPQikKICAg
ICAvLyBGb3IgYmxvYiBzY2hlbWUsIHdlIHdhbnQgdG8gaWdub3JlIHRoaXMgY2hlY2suCi0gICAg
ZG9VbmlxdWVPcmlnaW5DaGVjayA9ICF1cmwucHJvdG9jb2xJcygiYmxvYiIpOworICAgIGRvVW5p
cXVlT3JpZ2luQ2hlY2sgPSAhdXJsLnByb3RvY29sSXMoQmxvYlVSTDo6YmxvYlByb3RvY29sKCkp
OwogI2VuZGlmCiAgICAgaWYgKGRvVW5pcXVlT3JpZ2luQ2hlY2sgJiYgdGFyZ2V0T3JpZ2luLT5p
c1VuaXF1ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yODcsNyArMjg3LDcgQEAgYm9v
bCBTZWN1cml0eU9yaWdpbjo6aXNBY2Nlc3NXaGl0ZUxpc3RlZAogYm9vbCBTZWN1cml0eU9yaWdp
bjo6Y2FuRGlzcGxheShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIERv
Y3VtZW50KiBkb2N1bWVudCkKIHsKICNpZiBFTkFCTEUoQkxPQikKLSAgICBpZiAodXJsLnByb3Rv
Y29sSXMoImJsb2IiKSAmJiBkb2N1bWVudCkgeworICAgIGlmICh1cmwucHJvdG9jb2xJcyhCbG9i
VVJMOjpibG9iUHJvdG9jb2woKSkgJiYgZG9jdW1lbnQpIHsKICAgICAgICAgU2VjdXJpdHlPcmln
aW4qIGRvY3VtZW50T3JpZ2luID0gZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCk7CiAgICAgICAg
IFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gdGFyZ2V0T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNy
ZWF0ZSh1cmwpOwogICAgICAgICByZXR1cm4gZG9jdW1lbnRPcmlnaW4tPmlzU2FtZVNjaGVtZUhv
c3RQb3J0KHRhcmdldE9yaWdpbi5nZXQoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0NsaXBib2FyZENocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAkocmV2aXNpb24gNjcwMzIpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzY0LDEwICszNjQsOSBAQCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRDaHJv
bWl1bTo6CiAgICAgaWYgKCFtX2RhdGFPYmplY3QgfHwgbV9kYXRhT2JqZWN0LT5maWxlbmFtZXMu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gRmlsZUxpc3Q6OmNyZWF0ZSgpOwogCi0gICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IG1fZnJhbWUtPmRv
Y3VtZW50KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBSZWZQdHI8RmlsZUxpc3Q+
IGZpbGVMaXN0ID0gRmlsZUxpc3Q6OmNyZWF0ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9kYXRhT2JqZWN0LT5maWxlbmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGZpbGVMaXN0
LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1fZGF0YU9iamVj
dC0+ZmlsZW5hbWVzLmF0KGkpKSk7CisgICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3Jl
YXRlKG1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzLmF0KGkpKSk7CiAKICAgICByZXR1cm4gZmlsZUxp
c3QucmVsZWFzZSgpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3Rr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3Bw
CShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NSw5ICsyNjUsOCBAQCBQYXNzUmVmUHRyPEZpbGVMaXN0
PiBDbGlwYm9hcmRHdGs6OmZpbGVzCiAgICAgUmVmUHRyPEZpbGVMaXN0PiBmaWxlTGlzdCA9IEZp
bGVMaXN0OjpjcmVhdGUoKTsKICAgICBWZWN0b3I8U3RyaW5nPiBmaWxlVmVjdG9yKG1fZGF0YU9i
amVjdC0+ZmlsZXMoKSk7CiAKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZVZlY3Rvci5zaXplKCk7IGkrKykK
LSAgICAgICAgZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCwgZmlsZVZlY3RvcltpXSkpOworICAgICAgICBmaWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNy
ZWF0ZShmaWxlVmVjdG9yW2ldKSk7CiAKICAgICByZXR1cm4gZmlsZUxpc3QucmVsZWFzZSgpOwog
fQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQkocmV2aXNpb24gNjcwMzIp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTMxMywxMiArMzEzLDExIEBAIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBib2FyZE1hYzo6
ZmlsZXMKICAgICBOU0FycmF5ICphYnNvbHV0ZVVSTHMgPSBhYnNvbHV0ZVVSTHNGcm9tUGFzdGVi
b2FyZEZpbGVuYW1lcyhtX3Bhc3RlYm9hcmQuZ2V0KCkpOwogICAgIE5TVUludGVnZXIgY291bnQg
PSBbYWJzb2x1dGVVUkxzIGNvdW50XTsKIAotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CiAgICAgUmVmUHRyPEZpbGVMaXN0PiBmaWxlTGlzdCA9IEZpbGVMaXN0Ojpj
cmVhdGUoKTsKICAgICBmb3IgKE5TVUludGVnZXIgeCA9IDA7IHggPCBjb3VudDsgeCsrKSB7CiAg
ICAgICAgIE5TVVJMICphYnNvbHV0ZVVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOlthYnNvbHV0
ZVVSTHMgb2JqZWN0QXRJbmRleDp4XV07CiAgICAgICAgIEFTU0VSVChbYWJzb2x1dGVVUkwgaXNG
aWxlVVJMXSk7Ci0gICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQsIFthYnNvbHV0ZVVSTCBwYXRoXSkpOworICAgICAgICBmaWxlTGlzdC0+
YXBwZW5kKEZpbGU6OmNyZWF0ZShbYWJzb2x1dGVVUkwgcGF0aF0pKTsKICAgICB9CiAgICAgcmV0
dXJuIGZpbGVMaXN0LnJlbGVhc2UoKTsgLy8gV2Ugd2lsbCBhbHdheXMgcmV0dXJuIGEgRmlsZUxp
c3QsIHNvbWV0aW1lcyBlbXB0eQogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJv
YXJkV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRX
aW4uY3BwCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2Fy
ZFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwNCwxMyArNjA0LDEyIEBAIFBhc3NSZWZQdHI8
RmlsZUxpc3Q+IENsaXBib2FyZFdpbjo6ZmlsZXMKICAgICBpZiAoIWhkcm9wKQogICAgICAgICBy
ZXR1cm4gZmlsZXMucmVsZWFzZSgpOwogCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKICAgICBXQ0hBUiBmaWxlbmFtZVtNQVhfUEFUSF07CiAgICAgVUlOVCBmaWxl
Q291bnQgPSBEcmFnUXVlcnlGaWxlVyhoZHJvcCwgMHhGRkZGRkZGRiwgMCwgMCk7CiAgICAgZm9y
IChVSU5UIGkgPSAwOyBpIDwgZmlsZUNvdW50OyBpKyspIHsKICAgICAgICAgaWYgKCFEcmFnUXVl
cnlGaWxlVyhoZHJvcCwgaSwgZmlsZW5hbWUsIEFSUkFZU0laRShmaWxlbmFtZSkpKQogICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGZpbGVzLT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQsIHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihmaWxlbmFtZSkpKTsK
KyAgICAgICAgZmlsZXMtPmFwcGVuZChGaWxlOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxVQ2hh
cio+KGZpbGVuYW1lKSkpOwogICAgIH0KIAogICAgIEdsb2JhbFVubG9jayhtZWRpdW0uaEdsb2Jh
bCk7Cg==
</data>
<flag name="review"
          id="56128"
          type_id="1"
          status="+"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66983</attachid>
            <date>2010-09-08 18:27:21 -0700</date>
            <delta_ts>2010-09-08 18:32:26 -0700</delta_ts>
            <desc>decouple</desc>
            <filename>decouple3.txt</filename>
            <type>text/plain</type>
            <size>40012</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODQgQEAKKzIwMTAtMDktMDggIE1pY2hhZWwgTm9yZG1hbiAgPG1pY2hhZWxuQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRGVjb3VwbGUgQmxvYiBmcm9tIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTQxMAorCisgICAgICAgIC0g
UmVtb3ZlZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHBvaW50ZXJzIGZyb20gQmxvYiBhbmQgRmls
ZSBjb25zdHJ1Y3RvcnMuCisgICAgICAgIC0gUmVtb3ZlZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
J3MgY29sbGVjdGlvbiBvZiBCbG9icyBpbnN0YW5jZSBpbiB0aGF0IGNvbnRleHQuCisgICAgICAg
IC0gUmVmYWN0b3JlZCBCbG9iVVJMIHRvIG1ha2UgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuICdwdWJs
aWMnIGJsb2IgdXJscyBhbmQgJ2ludGVybmFsJworICAgICAgICAgIHVybHMgdGhhdCBhcmUgdXNl
ZCBzb2xlbHkgYXMgaWRlbnRpZmllcnMuIFRoZSBmb3JtZXIgcmVxdWlyZXMgYSBTZWN1cml0eU9y
aWdpbiB0bworICAgICAgICAgIHRvIG1hbnVmYWN0dXJlLCB0aGUgbGF0dGVyIGRvZXMgbm90Lgor
ICAgICAgICAtIEFkZGVkIGEgY29uc3RhbnQgYW5kIGFjY2Vzc29yIGZvciB0aGUgYmxvYiBwcm90
b2NvbCBzY2hlbWUgb24gdGhlIEJsb2JVUkwgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IGFyZSBhZGRlZCBzaW5jZSB0aGlzIGlzIGEgY2xlYW51cC4KKworICAgICAgICAqIGJpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURl
c2VyaWFsaXplcjo6cmVhZEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6
ZXI6OnJlYWRUZXJtaW5hbCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlppZ1phZzo6UmVhZGVyOjpyZWFkQmxvYik6
CisgICAgICAgIChXZWJDb3JlOjpaaWdaYWc6OlJlYWRlcjo6cmVhZEZpbGUpOgorICAgICAgICAo
V2ViQ29yZTo6WmlnWmFnOjpSZWFkZXI6OnJlYWRGaWxlTGlzdCk6CisgICAgICAgICogZG9tL1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6flNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y3JlYXRlUHVibGljQmxvYlVSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZXZva2VQdWJsaWNCbG9iVVJMKToKKyAg
ICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oOgorICAgICAgICAqIGZpbGVhcGkv
QmxvYi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpCbG9iKToKKyAgICAgICAgKFdlYkNv
cmU6OkJsb2I6On5CbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnNsaWNlKToKKyAgICAg
ICAgKiBmaWxlYXBpL0Jsb2IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCbG9iOjp1cmwpOgorICAgICAgICAqIGZpbGVhcGkvQmxvYi5pZGw6
CisgICAgICAgICogZmlsZWFwaS9CbG9iQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iQnVpbGRlcjo6Z2V0QmxvYik6CisgICAgICAgICogZmlsZWFwaS9CbG9iQnVpbGRlci5oOgor
ICAgICAgICAqIGZpbGVhcGkvQmxvYkJ1aWxkZXIuaWRsOgorICAgICAgICAqIGZpbGVhcGkvQmxv
YlVSTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iVVJMOjpjcmVhdGVQdWJsaWNVUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6QmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwpOgorICAgICAgICAo
V2ViQ29yZTo6QmxvYlVSTDo6Z2V0T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JVUkw6
OmdldElkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlVSTDo6Y3JlYXRlQmxvYlVS
TCk6CisgICAgICAgICogZmlsZWFwaS9CbG9iVVJMLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9i
VVJMOjpibG9iUHJvdG9jb2wpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlVSTDo6QmxvYlVSTCk6
CisgICAgICAgICogZmlsZWFwaS9GaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OkZp
bGUpOgorICAgICAgICAqIGZpbGVhcGkvRmlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6
Y3JlYXRlKToKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXIuY3BwOiBSZWdpc3RlciBhIHB1
YmxpYyB1cmwgdG8gcGVyZm9ybSB0aGUgcmVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFk
ZXI6OmNsZWFudXApOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6c3RhcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWxlUmVhZGVyOjpmYWlsZWQpOgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRl
ci5oOiBBZGRlZCBtX3VybEZvclJlYWRpbmcgZGF0YSBtZW1iZXIuCisgICAgICAgICogZmlsZWFw
aS9GaWxlUmVhZGVyU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyU3luYzo6
cmVhZCk6IFJlZ2lzdGVyIGEgcHVibGljIHVybCB0byBwZXJmb3JtIHRoZSByZWFkLgorICAgICAg
ICAqIGZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6VGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwpOgorICAgICAg
ICAqIGZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oOgorICAgICAgICAqIGh0bWwvSFRN
TElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojph
cHBlbmRGb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRG
aWxlTGlzdEZyb21SZW5kZXJlcik6CisgICAgICAgICogcGFnZS9TZWN1cml0eU9yaWdpbi5jcHA6
IFVzZSBCbG9iVVJMLmJsb2JQcm90b2NvbCgpLgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW46OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6Y2FuUmVx
dWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6Y2FuRGlzcGxheSk6Cisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OmZpbGVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvQ2xpcGJvYXJkR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEd0azo6
ZmlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpDbGlwYm9hcmRNYWM6OmZpbGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4v
Q2xpcGJvYXJkV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZFdpbjo6ZmlsZXMp
OgorCiAyMDEwLTA5LTA4ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTc0LDEwICs5NzQsNyBAQCBwcml2YXRlOgogICAgICAgICBJZGVudGlmaWVyIHR5cGU7CiAgICAg
ICAgIGlmICghcmVhZFN0cmluZ0RhdGEodHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgaWYgKG1faXNET01HbG9iYWxPYmplY3QpIHsKLSAgICAgICAgICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBzdGF0aWNfY2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KG1fZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwotICAgICAgICAgICAgZmlsZSA9IEZpbGU6OmNyZWF0ZShzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBTdHJpbmcocGF0aC51c3RyaW5nKCkuaW1wbCgpKSwgS1VSTChLVVJMKCks
IFN0cmluZyh1cmwudXN0cmluZygpLmltcGwoKSkpLCBTdHJpbmcodHlwZS51c3RyaW5nKCkuaW1w
bCgpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgZmlsZSA9IEZpbGU6OmNyZWF0ZShTdHJpbmcocGF0
aC51c3RyaW5nKCkuaW1wbCgpKSwgS1VSTChLVVJMKCksIFN0cmluZyh1cmwudXN0cmluZygpLmlt
cGwoKSkpLCBTdHJpbmcodHlwZS51c3RyaW5nKCkuaW1wbCgpKSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIApAQCAtMTA3NCw5ICsxMDcxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICAgICAgaWYgKCFtX2lzRE9NR2xvYmFsT2Jq
ZWN0KQogICAgICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICAgICAgICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBzdGF0aWNfY2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KG1fZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwotICAgICAgICAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpOwotICAgICAgICAgICAgcmV0dXJuIHRvSlMobV9leGVjLCBzdGF0aWNfY2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KG1fZ2xvYmFsT2JqZWN0KSwgQmxvYjo6Y3JlYXRlKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIEtVUkwoS1VSTCgpLCB1cmwudXN0cmluZygpLmltcGwoKSksIFN0cmluZyh0
eXBlLnVzdHJpbmcoKS5pbXBsKCkpLCBzaXplKSk7CisgICAgICAgICAgICByZXR1cm4gdG9KUyht
X2V4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9nbG9iYWxPYmplY3QpLCBC
bG9iOjpjcmVhdGUoS1VSTChLVVJMKCksIHVybC51c3RyaW5nKCkuaW1wbCgpKSwgU3RyaW5nKHR5
cGUudXN0cmluZygpLmltcGwoKSksIHNpemUpKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIFN0
cmluZ1RhZzogewogICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudDsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDY3MDMy
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NzksNyArODc5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgaWYgKCFkb1JlYWRVaW50NjQoJnNpemUpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBQYXNzUmVmUHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpjcmVh
dGUoZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJs
KSwgdHlwZSwgc2l6ZSk7CisgICAgICAgIFBhc3NSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6OmNy
ZWF0ZShLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwgdHlwZSwgc2l6ZSk7CiAgICAgICAgICp2
YWx1ZSA9IHRvVjgoYmxvYik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTg5NSw3
ICs4OTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBp
ZiAoIXJlYWRXZWJDb3JlU3RyaW5nKCZ0eXBlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgUGFzc1JlZlB0cjxGaWxlPiBmaWxlID0gRmlsZTo6Y3JlYXRlKGdldFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSwgcGF0aCwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCksIHR5cGUp
OworICAgICAgICBQYXNzUmVmUHRyPEZpbGU+IGZpbGUgPSBGaWxlOjpjcmVhdGUocGF0aCwgS1VS
TChQYXJzZWRVUkxTdHJpbmcsIHVybCksIHR5cGUpOwogICAgICAgICAqdmFsdWUgPSB0b1Y4KGZp
bGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC05MTYsNyArOTE2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBpZiAoIXJl
YWRXZWJDb3JlU3RyaW5nKCZ0eXBlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBmaWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShnZXRTY3JpcHRFeGVjdXRp
b25Db250ZXh0KCksIHBhdGgsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmxTdHJpbmcpLCB0eXBl
KSk7CisgICAgICAgICAgICBmaWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShwYXRoLCBLVVJM
KFBhcnNlZFVSTFN0cmluZywgdXJsU3RyaW5nKSwgdHlwZSkpOwogICAgICAgICB9CiAgICAgICAg
ICp2YWx1ZSA9IHRvVjgoZmlsZUxpc3QpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFdl
YkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCShyZXZpc2lvbiA2NzAzMikKKysrIFdl
YkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
NCwxMyArOTQsMTAgQEAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6flNjcmlwdEV4ZWN1dGlvbgog
ICAgIH0KICNlbmRpZgogCi0gICAgSGFzaFNldDxCbG9iKj46Oml0ZXJhdG9yIGJsb2JzRW5kID0g
bV9ibG9icy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8QmxvYio+OjppdGVyYXRvciBpdGVyID0g
bV9ibG9icy5iZWdpbigpOyBpdGVyICE9IGJsb2JzRW5kOyArK2l0ZXIpCi0gICAgICAgICgqaXRl
ciktPmNvbnRleHREZXN0cm95ZWQoKTsKICNpZiBFTkFCTEUoQkxPQikKICAgICBIYXNoU2V0PFN0
cmluZz46Oml0ZXJhdG9yIHB1YmxpY0Jsb2JVUkxzRW5kID0gbV9wdWJsaWNCbG9iVVJMcy5lbmQo
KTsKICAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nPjo6aXRlcmF0b3IgaXRlciA9IG1fcHVibGljQmxv
YlVSTHMuYmVnaW4oKTsgaXRlciAhPSBwdWJsaWNCbG9iVVJMc0VuZDsgKytpdGVyKQotICAgICAg
ICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVSTCh0aGlzLCBLVVJMKFBh
cnNlZFVSTFN0cmluZywgKml0ZXIpKTsKKyAgICAgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6
dW5yZWdpc3RlckJsb2JVUkwoS1VSTChQYXJzZWRVUkxTdHJpbmcsICppdGVyKSk7CiAjZW5kaWYK
IH0KIApAQCAtMTc1LDE4ICsxNzIsNiBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmRl
c3Ryb3llZE1lCiAgICAgbV9tZXNzYWdlUG9ydHMucmVtb3ZlKHBvcnQpOwogfQogCi12b2lkIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmFkZEJsb2IoQmxvYiogYmxvYikKLXsKLSAgICBBU1NFUlQo
YmxvYik7Ci0gICAgbV9ibG9icy5hZGQoYmxvYik7Ci19Ci0KLXZvaWQgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6cmVtb3ZlQmxvYihCbG9iKiBibG9iKQotewotICAgIEFTU0VSVChibG9iKTsKLSAg
ICBtX2Jsb2JzLnJlbW92ZShibG9iKTsKLX0KLQogYm9vbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpjYW5TdXNwZW5kQWN0aXZlRE9NT2JqZWN0cygpCiB7CiAgICAgLy8gTm8gcHJvdGVjdGlvbiBh
Z2FpbnN0IG1fYWN0aXZlRE9NT2JqZWN0cyBjaGFuZ2luZyBkdXJpbmcgaXRlcmF0aW9uOiBjYW5T
dXNwZW5kKCkgc2hvdWxkbid0IGV4ZWN1dGUgYXJiaXRyYXJ5IEpTLgpAQCAtMjc3LDggKzI2Miw4
IEBAIERPTVRpbWVyKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpmaW5kVGkKICNpZiBFTkFCTEUo
QkxPQikKIEtVUkwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y3JlYXRlUHVibGljQmxvYlVSTChC
bG9iKiBibG9iKQogewotICAgIEtVUkwgcHVibGljVVJMID0gQmxvYlVSTDo6Y3JlYXRlVVJMKHRo
aXMpOwotICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTCh0aGlzLCBw
dWJsaWNVUkwsIGJsb2ItPnVybCgpKTsKKyAgICBLVVJMIHB1YmxpY1VSTCA9IEJsb2JVUkw6OmNy
ZWF0ZVB1YmxpY1VSTChzZWN1cml0eU9yaWdpbigpKTsKKyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lz
dHJ5OjpyZWdpc3RlckJsb2JVUkwocHVibGljVVJMLCBibG9iLT51cmwoKSk7CiAgICAgbV9wdWJs
aWNCbG9iVVJMcy5hZGQocHVibGljVVJMLnN0cmluZygpKTsKICAgICByZXR1cm4gcHVibGljVVJM
OwogfQpAQCAtMjg2LDcgKzI3MSw3IEBAIEtVUkwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y3Jl
YXRlUHVibGkKIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cmV2b2tlUHVibGljQmxvYlVS
TChjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAgaWYgKG1fcHVibGljQmxvYlVSTHMuY29udGFpbnMo
dXJsLnN0cmluZygpKSkgewotICAgICAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lz
dGVyQmxvYlVSTCh0aGlzLCB1cmwpOworICAgICAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1
bnJlZ2lzdGVyQmxvYlVSTCh1cmwpOwogICAgICAgICBtX3B1YmxpY0Jsb2JVUkxzLnJlbW92ZSh1
cmwuc3RyaW5nKCkpOwogICAgIH0KIH0KSW5kZXg6IFdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgJKHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsOCArMTMxLDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2b2lkIHJlbW92ZVRpbWVvdXQoaW50IHRpbWVvdXRJZCk7CiAgICAgICAg
IERPTVRpbWVyKiBmaW5kVGltZW91dChpbnQgdGltZW91dElkKTsKIAotICAgICAgICB2b2lkIGFk
ZEJsb2IoQmxvYiopOwotICAgICAgICB2b2lkIHJlbW92ZUJsb2IoQmxvYiopOwogI2lmIEVOQUJM
RShCTE9CKQogICAgICAgICBLVVJMIGNyZWF0ZVB1YmxpY0Jsb2JVUkwoQmxvYiopOwogICAgICAg
ICB2b2lkIHJldm9rZVB1YmxpY0Jsb2JVUkwoY29uc3QgS1VSTCYpOwpAQCAtMTY3LDcgKzE2NSw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBIYXNoTWFwPGludCwgRE9NVGltZXIq
PiBtX3RpbWVvdXRzOwogCi0gICAgICAgIEhhc2hTZXQ8QmxvYio+IG1fYmxvYnM7CiAjaWYgRU5B
QkxFKEJMT0IpCiAgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3B1YmxpY0Jsb2JVUkxzOwogI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9maWxlYXBpL0Jsb2IuY3BwCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvZmlsZWFwaS9C
bG9iLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNTcgKzMzLDM3IEBACiAKICNpbmNsdWRlICJC
bG9iVVJMLmgiCiAjaW5jbHVkZSAiRmlsZS5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotQmxvYjo6QmxvYihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0LCBQYXNzT3duUHRyPEJsb2JEYXRhPiBibG9iRGF0YSwgbG9uZyBsb25n
IHNpemUpCi0gICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCkKLSAgICAsIG1fdHlwZShibG9iRGF0YS0+Y29udGVudFR5cGUoKSkKK0Jsb2I6OkJsb2Io
UGFzc093blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEsIGxvbmcgbG9uZyBzaXplKQorICAgIDogbV90
eXBlKGJsb2JEYXRhLT5jb250ZW50VHlwZSgpKQogICAgICwgbV9zaXplKHNpemUpCiB7CiAgICAg
QVNTRVJUKGJsb2JEYXRhKTsKIAotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQmxv
Yih0aGlzKTsKLQogICAgIC8vIENyZWF0ZSBhIG5ldyBpbnRlcm5hbCBVUkwgYW5kIHJlZ2lzdGVy
IGl0IHdpdGggdGhlIHByb3ZpZGVkIGJsb2IgZGF0YS4KLSAgICBtX3VybCA9IEJsb2JVUkw6OmNy
ZWF0ZVVSTChzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKLSAgICBUaHJlYWRhYmxlQmxvYlJlZ2lz
dHJ5OjpyZWdpc3RlckJsb2JVUkwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbV91cmwsIGJsb2JE
YXRhKTsKKyAgICBtX2ludGVybmFsVVJMID0gQmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwoKTsK
KyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwobV9pbnRlcm5hbFVS
TCwgYmxvYkRhdGEpOwogfQogCi1CbG9iOjpCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNvbnN0IEtVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0
eXBlLCBsb25nIGxvbmcgc2l6ZSkKLSAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KQotICAgICwgbV90eXBlKHR5cGUpCitCbG9iOjpCbG9iKGNvbnN0
IEtVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlLCBsb25nIGxvbmcgc2l6ZSkKKyAgICA6
IG1fdHlwZSh0eXBlKQogICAgICwgbV9zaXplKHNpemUpCiB7Ci0gICBtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmFkZEJsb2IodGhpcyk7Ci0KICAgICAvLyBDcmVhdGUgYSBuZXcgaW50ZXJuYWwg
VVJMIGFuZCByZWdpc3RlciBpdCB3aXRoIHRoZSBzYW1lIGJsb2IgZGF0YSBhcyB0aGUgc291cmNl
IFVSTC4KLSAgICBtX3VybCA9IEJsb2JVUkw6OmNyZWF0ZVVSTChzY3JpcHRFeGVjdXRpb25Db250
ZXh0KTsKLSAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgbV91cmwsIHNyY1VSTCk7CisgICAgbV9pbnRlcm5hbFVSTCA9IEJs
b2JVUkw6OmNyZWF0ZUludGVybmFsVVJMKCk7CisgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6
cmVnaXN0ZXJCbG9iVVJMKG1faW50ZXJuYWxVUkwsIHNyY1VSTCk7CiB9CiAKIEJsb2I6On5CbG9i
KCkKIHsKLSAgICAvLyBUaGUgaW50ZXJuYWwgVVJMIGlzIG9ubHkgdXNlZCB0byByZWZlciB0byB0
aGUgQmxvYiBvYmplY3QuIFNvIHdlIG5lZWQgdG8gdW5yZWdpc3RlciB0aGUgVVJMIHdoZW4gdGhl
IG9iamVjdCBpcyBHQy1lZC4KLSAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KSB7Ci0g
ICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cmVtb3ZlQmxvYih0aGlzKTsKLSAgICAg
ICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwobV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBtX3VybCk7Ci0gICAgfQotfQotCi12b2lkIEJsb2I6OmNvbnRleHREZXN0
cm95ZWQoKQotewotICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotCi0gICAg
Ly8gVW5yZWdpc3RlciB0aGUgaW50ZXJuYWwgVVJMIGJlZm9yZSB0aGUgY29udGV4dCBpcyBnb25l
LgotICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgbV91cmwpOwotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9
IDA7CisgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwobV9pbnRl
cm5hbFVSTCk7CiB9CiAKICNpZiBFTkFCTEUoQkxPQikKLVBhc3NSZWZQdHI8QmxvYj4gQmxvYjo6
c2xpY2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbG9u
ZyBsb25nIHN0YXJ0LCBsb25nIGxvbmcgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBl
KSBjb25zdAorUGFzc1JlZlB0cjxCbG9iPiBCbG9iOjpzbGljZShsb25nIGxvbmcgc3RhcnQsIGxv
bmcgbG9uZyBsZW5ndGgsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpIGNvbnN0CiB7CiAgICAg
Ly8gV2hlbiB3ZSBzbGljZSBhIGZpbGUgZm9yIHRoZSBmaXJzdCB0aW1lLCB3ZSBvYnRhaW4gYSBz
bmFwc2hvdCBvZiB0aGUgZmlsZSBieSBjYXB0dXJpbmcgaXRzIGN1cnJlbnQgc2l6ZSBhbmQgbW9k
aWZpY2F0aW9uIHRpbWUuCiAgICAgLy8gVGhlIG1vZGlmaWNhdGlvbiB0aW1lIHdpbGwgYmUgdXNl
ZCB0byB2ZXJpZnkgaWYgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCBvciBub3QsIHdoZW4gdGhl
IHVuZGVybHlpbmcgZGF0YSBhcmUgYWNjZXNzZWQuCkBAIC0xMTQsOSArOTQsOSBAQCBQYXNzUmVm
UHRyPEJsb2I+IEJsb2I6OnNsaWNlKFNjcmlwdEV4ZWN1CiAgICAgaWYgKGlzRmlsZSgpKQogICAg
ICAgICBibG9iRGF0YS0+YXBwZW5kRmlsZShzdGF0aWNfY2FzdDxjb25zdCBGaWxlKj4odGhpcykt
PnBhdGgoKSwgc3RhcnQsIGxlbmd0aCwgbW9kaWZpY2F0aW9uVGltZSk7CiAgICAgZWxzZQotICAg
ICAgICBibG9iRGF0YS0+YXBwZW5kQmxvYihtX3VybCwgc3RhcnQsIGxlbmd0aCk7CisgICAgICAg
IGJsb2JEYXRhLT5hcHBlbmRCbG9iKG1faW50ZXJuYWxVUkwsIHN0YXJ0LCBsZW5ndGgpOwogCi0g
ICAgcmV0dXJuIEJsb2I6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBibG9iRGF0YS5y
ZWxlYXNlKCksIGxlbmd0aCk7CisgICAgcmV0dXJuIEJsb2I6OmNyZWF0ZShibG9iRGF0YS5yZWxl
YXNlKCksIGxlbmd0aCk7CiB9CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9maWxlYXBpL0Jsb2Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCShyZXZpc2lvbiA2NzAzMikK
KysrIFdlYkNvcmUvZmlsZWFwaS9CbG9iLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDQ2ICs0MSw0
MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ7Ci0KIGNsYXNzIEJsb2IgOiBwdWJsaWMgUmVmQ291bnRlZDxCbG9iPiB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8QmxvYj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFBhc3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhLCBs
b25nIGxvbmcgc2l6ZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUoUGFzc093
blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEsIGxvbmcgbG9uZyBzaXplKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGJsb2JEYXRh
LCBzaXplKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihibG9iRGF0YSwgc2l6
ZSkpOwogICAgIH0KIAogICAgIC8vIEZvciBkZXNlcmlhbGl6YXRpb24uCi0gICAgc3RhdGljIFBh
c3NSZWZQdHI8QmxvYj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIGNvbnN0IEtVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlLCBsb25n
IGxvbmcgc2l6ZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVhdGUoY29uc3QgS1VS
TCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBzaXplKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHNy
Y1VSTCwgdHlwZSwgc2l6ZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJsb2Ioc3Jj
VVJMLCB0eXBlLCBzaXplKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+QmxvYigpOwogCi0gICAg
dm9pZCBjb250ZXh0RGVzdHJveWVkKCk7Ci0KLSAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7
IHJldHVybiBtX3VybDsgfQorICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW50ZXJuYWxVUkw7IH0KICAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KIAogICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KG1fc2l6ZSk7IH0KICAgICB2
aXJ0dWFsIGJvb2wgaXNGaWxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogI2lmIEVOQUJM
RShCTE9CKQotICAgIFBhc3NSZWZQdHI8QmxvYj4gc2xpY2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBjb250
ZW50VHlwZSA9IFN0cmluZygpKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEJsb2I+IHNsaWNlKGxv
bmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlw
ZSA9IFN0cmluZygpKSBjb25zdDsKICNlbmRpZgogCiBwcm90ZWN0ZWQ6Ci0gICAgQmxvYihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc093blB0cjxCbG9iRGF0YT4sIGxvbmcgbG9uZyBzaXpl
KTsKKyAgICBCbG9iKFBhc3NPd25QdHI8QmxvYkRhdGE+LCBsb25nIGxvbmcgc2l6ZSk7CiAKICAg
ICAvLyBGb3IgZGVzZXJpYWxpemF0aW9uLgotICAgIEJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIGNvbnN0IEtVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlLCBsb25nIGxvbmcgc2l6
ZSk7CisgICAgQmxvYihjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlwZSwgbG9u
ZyBsb25nIHNpemUpOwogCi0gICAgLy8gVGhpcyBpcyBhbiBpbnRlcm5hbCBVUkwgcmVmZXJyaW5n
IHRvIHRoZSBibG9iIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb2JqZWN0LgotICAgIC8vIEl0
IGlzIG9ubHkgdXNlZCBieSBGaWxlUmVhZGVyIHRvIHJlYWQgdGhlIGJsb2IgZGF0YSB2aWEgbG9h
ZGluZyBmcm9tIHRoZSBibG9iIFVSTCByZXNvdXJjZS4KLSAgICBLVVJMIG1fdXJsOworICAgIC8v
IFRoaXMgaXMgYW4gaW50ZXJuYWwgVVJMIHJlZmVycmluZyB0byB0aGUgYmxvYiBkYXRhIGFzc29j
aWF0ZWQgd2l0aCB0aGlzIG9iamVjdC4gSXQgc2VydmVzCisgICAgLy8gYXMgYW4gaWRlbnRpZmll
ciBmb3IgdGhpcyBibG9iLiBUaGUgaW50ZXJuYWwgVVJMIGlzIG5ldmVyIHVzZWQgdG8gc291cmNl
IHRoZSBibG9iJ3MgY29udGVudAorICAgIC8vIGludG8gYW4gSFRNTCBvciBmb3IgRmlsZVJlYWQn
aW5nLCBwdWJsaWMgYmxvYiBVUkxzIG11c3QgYmUgdXNlZCBmb3IgdGhvc2UgcHVycG9zZXMuCisg
ICAgS1VSTCBtX2ludGVybmFsVVJMOwogICAgIAotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAgICBTdHJpbmcgbV90eXBlOwogICAgIGxvbmcg
bG9uZyBtX3NpemU7CiB9OwpJbmRleDogV2ViQ29yZS9maWxlYXBpL0Jsb2IuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9CbG9iLmlkbAkocmV2aXNpb24gNjcwMzIpCisrKyBXZWJD
b3JlL2ZpbGVhcGkvQmxvYi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbW9k
dWxlIGh0bWwgewogCiAjaWYgIWRlZmluZWQoTEFOR1VBR0VfT0JKRUNUSVZFX0MpCiAjaWYgZGVm
aW5lZChFTkFCTEVfQkxPQikgJiYgRU5BQkxFX0JMT0IKLSAgICAgICAgW0NhbGxXaXRoPVNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRdIEJsb2Igc2xpY2UoaW4gbG9uZyBsb25nIHN0YXJ0LCBpbiBsb25n
IGxvbmcgbGVuZ3RoLCBpbiBbT3B0aW9uYWwsIENvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxT
dHJpbmddIERPTVN0cmluZyBjb250ZW50VHlwZSk7CisgICAgICAgIEJsb2Igc2xpY2UoaW4gbG9u
ZyBsb25nIHN0YXJ0LCBpbiBsb25nIGxvbmcgbGVuZ3RoLCBpbiBbT3B0aW9uYWwsIENvbnZlcnRV
bmRlZmluZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBjb250ZW50VHlwZSk7CiAjZW5k
aWYKICNlbmRpZgogICAgIH07CkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1aWxkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9CbG9iQnVpbGRlci5jcHAJKHJldmlzaW9u
IDY3MDMyKQorKysgV2ViQ29yZS9maWxlYXBpL0Jsb2JCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE3LDEzICsxMTcsMTMgQEAgYm9vbCBCbG9iQnVpbGRlcjo6YXBwZW5kKFBhc3NSZWZQ
dHI8QmxvYgogICAgIHJldHVybiB0cnVlOwogfQogCi1QYXNzUmVmUHRyPEJsb2I+IEJsb2JCdWls
ZGVyOjpnZXRCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCitQYXNzUmVmUHRyPEJsb2I+IEJsb2JCdWls
ZGVyOjpnZXRCbG9iKGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCiB7CiAgICAgT3duUHRyPEJs
b2JEYXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsKICAgICBibG9iRGF0YS0+c2V0
Q29udGVudFR5cGUoY29udGVudFR5cGUpOwogICAgIGJsb2JEYXRhLT5zd2FwSXRlbXMobV9pdGVt
cyk7CiAKLSAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0ZShzY3JpcHRFeGVjdXRp
b25Db250ZXh0LCBibG9iRGF0YS5yZWxlYXNlKCksIG1fc2l6ZSk7CisgICAgUmVmUHRyPEJsb2I+
IGJsb2IgPSBCbG9iOjpjcmVhdGUoYmxvYkRhdGEucmVsZWFzZSgpLCBtX3NpemUpOwogCiAgICAg
Ly8gQWZ0ZXIgY3JlYXRpbmcgYSBibG9iIGZyb20gdGhlIGN1cnJlbnQgYmxvYiBkYXRhLCB3ZSBk
byBub3QgbmVlZCB0byBrZWVwIHRoZSBkYXRhIGFyb3VuZCBhbnkgbW9yZS4gSW5zdGVhZCwgd2Ug
b25seQogICAgIC8vIG5lZWQgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgVVJMIG9mIHRoZSBi
bG9iIGp1c3QgY3JlYXRlZC4KSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9CbG9iQnVpbGRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9CbG9iQnVpbGRlci5oCShyZXZpc2lvbiA2NzAz
MikKKysrIFdlYkNvcmUvZmlsZWFwaS9CbG9iQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw3ICs0MSw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEJsb2I7Ci1jbGFzcyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgVGV4dEVuY29kaW5nOwogCiB0eXBlZGVmIGlu
dCBFeGNlcHRpb25Db2RlOwpAQCAtNTQsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBhcHBl
bmQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCBhcHBlbmQo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcmIGVuZGluZywgRXhjZXB0aW9uQ29kZSYp
OwogCi0gICAgUGFzc1JlZlB0cjxCbG9iPiBnZXRCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlID0gU3RyaW5nKCkpOworICAgIFBhc3NSZWZQdHI8
QmxvYj4gZ2V0QmxvYihjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlID0gU3RyaW5nKCkpOwogCiBw
cml2YXRlOgogICAgIEJsb2JCdWlsZGVyKCk7CkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1
aWxkZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9CbG9iQnVpbGRlci5pZGwJ
KHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29yZS9maWxlYXBpL0Jsb2JCdWlsZGVyLmlkbAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIE5vU3Rh
dGljVGFibGVzCiAgICAgXSBCbG9iQnVpbGRlciB7CiAjaWYgIWRlZmluZWQoTEFOR1VBR0VfT0JK
RUNUSVZFX0MpCi0gICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBCbG9i
IGdldEJsb2IoaW4gW09wdGlvbmFsLCBDb252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5n
XSBET01TdHJpbmcgY29udGVudFR5cGUpOworICAgICAgICBCbG9iIGdldEJsb2IoaW4gW09wdGlv
bmFsLCBDb252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgY29udGVu
dFR5cGUpOwogI2VuZGlmCiAgICAgICAgIHZvaWQgYXBwZW5kKGluIEJsb2IgYmxvYik7CiAgICAg
ICAgIHZvaWQgYXBwZW5kKGluIERPTVN0cmluZyB2YWx1ZSwgaW4gW09wdGlvbmFsLCBDb252ZXJ0
VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgZW5kaW5ncykgcmFpc2VzIChE
T01FeGNlcHRpb24pOwpJbmRleDogV2ViQ29yZS9maWxlYXBpL0Jsb2JVUkwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmNwcAkocmV2aXNpb24gNjcwMzIpCisrKyBX
ZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDI4ICszNCwy
NyBAQAogCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0j
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3Jp
Z2luLmgiCiAjaW5jbHVkZSAiVVVJRC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUtVUkwg
QmxvYlVSTDo6Y3JlYXRlVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpCitjb25zdCBjaGFyIEJsb2JVUkw6OmtCbG9iUHJvdG9jb2xbXSA9ICJibG9iIjsK
KworS1VSTCBCbG9iVVJMOjpjcmVhdGVQdWJsaWNVUkwoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5
T3JpZ2luKQogewotICAgIC8vIENyZWF0ZSB0aGUgYmxvYiBVUkwgaW4gdGhlIGZvbGxvd2luZyBm
b3JtYXQ6Ci0gICAgLy8gICAgIGJsb2I6JWVzY2FwZWRfb3JpZ2luJS8lVVVJRCUKLSAgICAvLyBU
aGUgb3JpZ2luIG9mIHRoZSBob3N0IHBhZ2UgaXMgZW5jb2RlZCBpbiB0aGUgVVJMIHZhbHVlIHRv
IGFsbG93IGVhc3kgbG9va3VwIG9mIHRoZSBvcmlnaW4gd2hlbiB0aGUgc2VjdXJpdHkgY2hlY2sg
bmVlZHMKLSAgICAvLyB0byBiZSBwZXJmb3JtZWQuCi0gICAgU3RyaW5nIHVybFN0cmluZyA9ICJi
bG9iOiI7Ci0gICAgdXJsU3RyaW5nICs9IGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJpbmcoKSk7Ci0gICAg
dXJsU3RyaW5nICs9ICIvIjsKLSAgICB1cmxTdHJpbmcgKz0gY3JlYXRlQ2Fub25pY2FsVVVJRFN0
cmluZygpOwotICAgIHJldHVybiBLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsU3RyaW5nKTsKKyAg
ICBBU1NFUlQoc2VjdXJpdHlPcmlnaW4pOworICAgIHJldHVybiBjcmVhdGVCbG9iVVJMKHNlY3Vy
aXR5T3JpZ2luLT50b1N0cmluZygpKTsKK30KKworS1VSTCBCbG9iVVJMOjpjcmVhdGVJbnRlcm5h
bFVSTCgpCit7CisgICAgcmV0dXJuIGNyZWF0ZUJsb2JVUkwoImJsb2JpbnRlcm5hbDovLyIpOwog
fQogCiBLVVJMIEJsb2JVUkw6OmdldE9yaWdpbihjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgQVNT
RVJUKHVybC5wcm90b2NvbElzKCJibG9iIikpOworICAgIEFTU0VSVCh1cmwucHJvdG9jb2xJcyhr
QmxvYlByb3RvY29sKSk7CiAKICAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gdXJsLnBhdGhTdGFy
dCgpOwogICAgIHVuc2lnbmVkIGFmdGVyRW5kSW5kZXggPSB1cmwucGF0aEFmdGVyTGFzdFNsYXNo
KCk7CkBAIC02NSwxMCArNjQsMjAgQEAgS1VSTCBCbG9iVVJMOjpnZXRPcmlnaW4oY29uc3QgS1VS
TCYgdXJsKQogCiBTdHJpbmcgQmxvYlVSTDo6Z2V0SWRlbnRpZmllcihjb25zdCBLVVJMJiB1cmwp
CiB7Ci0gICAgQVNTRVJUKHVybC5wcm90b2NvbElzKCJibG9iIikpOworICAgIEFTU0VSVCh1cmwu
cHJvdG9jb2xJcyhrQmxvYlByb3RvY29sKSk7CiAKICAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0g
dXJsLnBhdGhBZnRlckxhc3RTbGFzaCgpOwogICAgIHJldHVybiB1cmwuc3RyaW5nKCkuc3Vic3Ry
aW5nKHN0YXJ0SW5kZXgpOwogfQogCitLVVJMIEJsb2JVUkw6OmNyZWF0ZUJsb2JVUkwoY29uc3Qg
U3RyaW5nJiBvcmlnaW5TdHJpbmcpCit7CisgICAgU3RyaW5nIHVybFN0cmluZyA9IGtCbG9iUHJv
dG9jb2w7CisgICAgdXJsU3RyaW5nICs9ICI6IjsKKyAgICB1cmxTdHJpbmcgKz0gZW5jb2RlV2l0
aFVSTEVzY2FwZVNlcXVlbmNlcyhvcmlnaW5TdHJpbmcpOworICAgIHVybFN0cmluZyArPSAiLyI7
CisgICAgdXJsU3RyaW5nICs9IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKKyAgICByZXR1
cm4gS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybFN0cmluZyk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9maWxlYXBpL0Jsb2JVUkwuaAkocmV2aXNpb24gNjcwMzIpCisrKyBXZWJDb3JlL2Zp
bGVhcGkvQmxvYlVSTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMjkgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3Mg
U2VjdXJpdHlPcmlnaW47CiAKKy8vIEJsb2IgVVJMcyBhcmUgb2YgdGhlIGZvcm0KKy8vICAgICBi
bG9iOiVlc2NhcGVkX29yaWdpbiUvJVVVSUQlCisvLyBGb3IgcHVibGljIHVybHMsIHRoZSBvcmln
aW4gb2YgdGhlIGhvc3QgcGFnZSBpcyBlbmNvZGVkIGluIHRoZSBVUkwgdmFsdWUgdG8KKy8vIGFs
bG93IGVhc3kgbG9va3VwIG9mIHRoZSBvcmlnaW4gd2hlbiBzZWN1cml0eSBjaGVja3MgbmVlZCB0
byBiZSBwZXJmb3JtZWQuCisvLyBXaGVuIGxvYWRpbmcgYmxvYnMgdmlhIFJlc291cmNlSGFuZGxl
IG9yIHdoZW4gcmVhZGluZyBibG9icyB2aWEgRmlsZVJlYWRlcgorLy8gdGhlIGxvYWRlciBjb25k
dWN0cyBzZWN1cml0eSBjaGVja3MgdGhhdCBleGFtaW5lIHRoZSBvcmlnaW4gb2YgaG9zdCBwYWdl
CisvLyBlbmNvZGVkIGluIHRoZSBwdWJsaWMgYmxvYiB1cmwuIFRoZSBvcmlnaW4gYmFrZWQgaW50
byBpbnRlcm5hbCBibG9iIHVybHMKKy8vIGlzIGEgc2ltcGxlIGNvbnN0YW50IHZhbHVlLCAiYmxv
YmludGVybmFsOi8vIiwgaW50ZXJuYWwgdXJscyBzaG91bGQgbm90CisvLyBiZSB1c2VkIHdpdGgg
UmVzb3VyY2VIYW5kbGUgb3IgRmlsZVJlYWRlci4KIGNsYXNzIEJsb2JVUkwgewogcHVibGljOgot
ICAgIHN0YXRpYyBLVVJMIGNyZWF0ZVVSTChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisgICAg
c3RhdGljIEtVUkwgY3JlYXRlUHVibGljVVJMKFNlY3VyaXR5T3JpZ2luKik7CisgICAgc3RhdGlj
IEtVUkwgY3JlYXRlSW50ZXJuYWxVUkwoKTsKICAgICBzdGF0aWMgS1VSTCBnZXRPcmlnaW4oY29u
c3QgS1VSTCYpOwotICAgIHN0YXRpYyBTdHJpbmcgZ2V0SWRlbnRpZmllcihjb25zdCBLVVJMJiB1
cmwpOworICAgIHN0YXRpYyBTdHJpbmcgZ2V0SWRlbnRpZmllcihjb25zdCBLVVJMJik7CisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGJsb2JQcm90b2NvbCgpIHsgcmV0dXJuIGtCbG9iUHJvdG9jb2w7
IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgS1VSTCBjcmVhdGVCbG9iVVJMKGNvbnN0IFN0cmlu
ZyYgb3JpZ2luU3RyaW5nKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciBrQmxvYlByb3RvY29sW107
CisgICAgQmxvYlVSTCgpIHsgfQogfTsKIAogfQpJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlLmNwcAkocmV2aXNpb24gNjcw
MzIpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGaWxlLmgiCiAKLSNpbmNs
dWRlICJCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAi
TUlNRVR5cGVSZWdpc3RyeS5oIgogCkBAIC00NSwyMyArNDQsMjMgQEAgc3RhdGljIFBhc3NPd25Q
dHI8QmxvYkRhdGE+IGNyZWF0ZUJsb2JEYQogICAgIHJldHVybiBibG9iRGF0YS5yZWxlYXNlKCk7
CiB9CiAKLUZpbGU6OkZpbGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCwgY29uc3QgU3RyaW5nJiBwYXRoKQotICAgIDogQmxvYihzY3JpcHRFeGVjdXRpb25D
b250ZXh0LCBjcmVhdGVCbG9iRGF0YUZvckZpbGUocGF0aCksIC0xKQorRmlsZTo6RmlsZShjb25z
dCBTdHJpbmcmIHBhdGgpCisgICAgOiBCbG9iKGNyZWF0ZUJsb2JEYXRhRm9yRmlsZShwYXRoKSwg
LTEpCiAgICAgLCBtX3BhdGgocGF0aCkKICAgICAsIG1fbmFtZShwYXRoR2V0RmlsZU5hbWUocGF0
aCkpCiB7CiB9CiAKLUZpbGU6OkZpbGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgdHlwZSkKLSAgICA6IEJsb2Ioc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdXJsLCB0
eXBlLCAtMSkKK0ZpbGU6OkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgdHlwZSkKKyAgICA6IEJsb2IodXJsLCB0eXBlLCAtMSkKICAgICAsIG1f
cGF0aChwYXRoKQogewogICAgIG1fbmFtZSA9IHBhdGhHZXRGaWxlTmFtZShwYXRoKTsKIH0KIAog
I2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQotRmlsZTo6RmlsZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0
aCwgY29uc3QgU3RyaW5nJiBwYXRoKQotICAgIDogQmxvYihzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCBjcmVhdGVCbG9iRGF0YUZvckZpbGUocGF0aCksIC0xKQorRmlsZTo6RmlsZShjb25zdCBTdHJp
bmcmIHJlbGF0aXZlUGF0aCwgY29uc3QgU3RyaW5nJiBwYXRoKQorICAgIDogQmxvYihjcmVhdGVC
bG9iRGF0YUZvckZpbGUocGF0aCksIC0xKQogICAgICwgbV9wYXRoKHBhdGgpCiAgICAgLCBtX3Jl
bGF0aXZlUGF0aChyZWxhdGl2ZVBhdGgpCiB7CkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlLmgJKHJldmlzaW9uIDY3MDMyKQor
KysgV2ViQ29yZS9maWxlYXBpL0ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMjUgKzM0LDI0
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEtVUkw7Ci1jbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OwogCiBjbGFzcyBGaWxlIDogcHVibGljIEJsb2IgewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEZpbGU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIHBhdGgpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8RmlsZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgRmlsZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBwYXRoKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmlsZShwYXRoKSk7CiAgICAgfQogCiAgICAg
Ly8gRm9yIGRlc2VyaWFsaXphdGlvbi4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlPiBjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlwZSkKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25z
dCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRmlsZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBwYXRoLCBzcmNVUkws
IHR5cGUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxlKHBhdGgsIHNyY1VSTCwg
dHlwZSkpOwogICAgIH0KIAogI2lmIEVOQUJMRShESVJFQ1RPUllfVVBMT0FEKQotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEZpbGU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCwgY29uc3QgU3RyaW5n
JiBwYXRoKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGU+IGNyZWF0ZShjb25zdCBTdHJpbmcm
IHJlbGF0aXZlUGF0aCwgY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBGaWxlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHJlbGF0aXZlUGF0aCwg
cGF0aCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUocmVsYXRpdmVQYXRoLCBw
YXRoKSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTc0LDEzICs3MywxMyBAQCBwdWJsaWM6CiAgICAg
dW5zaWduZWQgbG9uZyBsb25nIGZpbGVTaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpOyB9CiAK
IHByaXZhdGU6Ci0gICAgRmlsZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5n
JiBwYXRoKTsKKyAgICBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAgICAgCiAgICAgLy8gRm9y
IGRlc2VyaWFsaXphdGlvbi4KLSAgICBGaWxlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IEtVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlKTsK
KyAgICBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgS1VSTCYgc3JjVVJMLCBjb25zdCBT
dHJpbmcmIHR5cGUpOwogCiAjaWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCi0gICAgRmlsZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiByZWxhdGl2ZVBhdGgsIGNvbnN0
IFN0cmluZyYgcGF0aCk7CisgICAgRmlsZShjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCwgY29u
c3QgU3RyaW5nJiBwYXRoKTsKICNlbmRpZgogCiAgICAgU3RyaW5nIG1fcGF0aDsKSW5kZXg6IFdl
YkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVh
cGkvRmlsZVJlYWRlci5jcHAJKHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRl
ICJCYXNlNjQuaCIKICNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAiQmxvYlVSTC5oIgogI2lu
Y2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgogI2luY2x1ZGUgIkZpbGUuaCIKICNpbmNsdWRlICJM
b2dnaW5nLmgiCkBAIC00NCw2ICs0NSw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0Lmgi
CiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlRleHRSZXNv
dXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgiCiAjaW5j
bHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgog
CkBAIC0xNTQsMTcgKzE1NiwyNyBAQCB2b2lkIEZpbGVSZWFkZXI6OnRlcm1pbmF0ZSgpCiB7CiAg
ICAgaWYgKG1fbG9hZGVyKSB7CiAgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKLSAgICAgICAg
bV9sb2FkZXIgPSAwOworICAgICAgICBjbGVhbnVwKCk7CiAgICAgfQogICAgIG1fc3RhdGUgPSBD
b21wbGV0ZWQ7CiB9CiAKK3ZvaWQgRmlsZVJlYWRlcjo6Y2xlYW51cCgpCit7CisgICAgbV9sb2Fk
ZXIgPSAwOworICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKG1f
dXJsRm9yUmVhZGluZyk7CisgICAgbV91cmxGb3JSZWFkaW5nID0gS1VSTCgpOworfQorCiB2b2lk
IEZpbGVSZWFkZXI6OnN0YXJ0KCkKIHsKICAgICBtX3N0YXRlID0gT3BlbmluZzsKIAotICAgIC8v
IFRoZSBibG9iIGlzIHJlYWQgYnkgcm91dGluZyB0aHJvdWdoIHRoZSByZXF1ZXN0IGhhbmRsaW5n
IGxheWVyIGdpdmVuIHRoZSBibG9iIHVybC4KLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCht
X2Jsb2ItPnVybCgpKTsKKyAgICAvLyBUaGUgYmxvYiBpcyByZWFkIGJ5IHJvdXRpbmcgdGhyb3Vn
aCB0aGUgcmVxdWVzdCBoYW5kbGluZyBsYXllciBnaXZlbiBhIHRlbXBvcmFyeSBwdWJsaWMgdXJs
LgorICAgIG1fdXJsRm9yUmVhZGluZyA9IEJsb2JVUkw6OmNyZWF0ZVB1YmxpY1VSTChzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCkpOworICAgIFRocmVhZGFibGVCbG9i
UmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChtX3VybEZvclJlYWRpbmcsIG1fYmxvYi0+dXJsKCkp
OworCisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QobV91cmxGb3JSZWFkaW5nKTsKICAgICBy
ZXF1ZXN0LnNldEhUVFBNZXRob2QoIkdFVCIpOwogCiAgICAgVGhyZWFkYWJsZUxvYWRlck9wdGlv
bnMgb3B0aW9uczsKQEAgLTIzMCw3ICsyNDIsNyBAQCB2b2lkIEZpbGVSZWFkZXI6OmRpZEZpbmlz
aExvYWRpbmcodW5zaWduCiAgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQpOwog
ICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkubG9hZGVuZEV2ZW50KTsKIAotICAgIG1fbG9hZGVy
ID0gMDsKKyAgICBjbGVhbnVwKCk7CiB9CiAKIHZvaWQgRmlsZVJlYWRlcjo6ZGlkRmFpbChjb25z
dCBSZXNvdXJjZUVycm9yJikKQEAgLTI0Nyw3ICsyNTksNyBAQCB2b2lkIEZpbGVSZWFkZXI6OmZh
aWxlZChpbnQgaHR0cFN0YXR1c0NvCiAgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS5lcnJvckV2
ZW50KTsKICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmxvYWRlbmRFdmVudCk7CiAKLSAgICBt
X2xvYWRlciA9IDA7CisgICAgY2xlYW51cCgpOwogfQogCiBFeGNlcHRpb25Db2RlIEZpbGVSZWFk
ZXI6Omh0dHBTdGF0dXNDb2RlVG9FeGNlcHRpb25Db2RlKGludCBodHRwU3RhdHVzQ29kZSkKSW5k
ZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9m
aWxlYXBpL0ZpbGVSZWFkZXIuaAkocmV2aXNpb24gNjcwMzIpCisrKyBXZWJDb3JlL2ZpbGVhcGkv
RmlsZVJlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJG
aWxlRXJyb3IuaCIKKyNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKICNpbmNsdWRlICJTY3JpcHRTdHJpbmcuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIK
QEAgLTEzMCw2ICsxMzEsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRh
KiBlbnN1cmVFdmVudFRhcmdldERhdGEoKSB7IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7IH0K
IAogICAgIHZvaWQgdGVybWluYXRlKCk7CisgICAgdm9pZCBjbGVhbnVwKCk7CiAgICAgdm9pZCBy
ZWFkSW50ZXJuYWwoQmxvYiosIFJlYWRUeXBlKTsKICAgICB2b2lkIGZhaWxlZChpbnQgaHR0cFN0
YXR1c0NvZGUpOwogICAgIHZvaWQgZmlyZUVycm9yRXZlbnQoaW50IGh0dHBTdGF0dXNDb2RlKTsK
QEAgLTE0MSw2ICsxNDMsNyBAQCBwcml2YXRlOgogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50
VGFyZ2V0RGF0YTsKIAogICAgIFJlZlB0cjxCbG9iPiBtX2Jsb2I7CisgICAgS1VSTCBtX3VybEZv
clJlYWRpbmc7CiAgICAgUmVhZFR5cGUgbV9yZWFkVHlwZTsKICAgICBUZXh0RW5jb2RpbmcgbV9l
bmNvZGluZzsKIApJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwCShyZXZpc2lvbiA2
NzAzMikKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDExICszNiwxMyBAQAogCiAjaW5jbHVkZSAiQmFzZTY0LmgiCiAjaW5jbHVkZSAi
QmxvYi5oIgorI2luY2x1ZGUgIkJsb2JVUkwuaCIKICNpbmNsdWRlICJGaWxlUmVhZGVyLmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJj
ZURlY29kZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgiCiAjaW5jbHVk
ZSAiVGhyZWFkYWJsZUxvYWRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNDksMTIg
KzE1MSwxNiBAQCBjb25zdCBTY3JpcHRTdHJpbmcmIEZpbGVSZWFkZXJTeW5jOjpyZWFkCiAKIHZv
aWQgRmlsZVJlYWRlclN5bmM6OnJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwgQmxvYiogYmxvYiwgUmVhZFR5cGUgcmVhZFR5cGUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewotICAgIC8vIFRoZSBibG9iIGlzIHJlYWQgYnkgcm91dGluZyB0aHJvdWdoIHRo
ZSByZXF1ZXN0IGhhbmRsaW5nIGxheWVyIGdpdmVuIHRoZSBibG9iIHVybC4KLSAgICBSZXNvdXJj
ZVJlcXVlc3QgcmVxdWVzdChibG9iLT51cmwoKSk7CisgICAgLy8gVGhlIGJsb2IgaXMgcmVhZCBi
eSByb3V0aW5nIHRocm91Z2ggdGhlIHJlcXVlc3QgaGFuZGxpbmcgbGF5ZXIgZ2l2ZW4gdGhlIHRl
bXBvcnkgcHVibGljIHVybC4KKyAgICBLVVJMIHJlYWRhYmxlVVJMID0gQmxvYlVSTDo6Y3JlYXRl
UHVibGljVVJMKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCkpOworICAg
IFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChyZWFkYWJsZVVSTCwgYmxv
Yi0+dXJsKCkpOworCisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QocmVhZGFibGVVUkwpOwog
ICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7CiAKICAgICBGaWxlUmVhZGVyU3luY0xv
YWRlciBsb2FkZXIoKHJlYWRUeXBlID09IFJlYWRBc0JpbmFyeVN0cmluZykgPyAmbV9yZXN1bHQg
OiAwKTsKICAgICBsb2FkZXIuc3RhcnQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgcmVxdWVzdCwg
ZWMpOworICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKHJlYWRh
YmxlVVJMKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogV2ViQ29yZS9m
aWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gNjcwMzIpCisrKyBX
ZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDYgQEAKIAogI2luY2x1ZGUgIkJsb2JEYXRhLmgiCiAjaW5jbHVkZSAiQmxv
YlJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTcwLDcgKzY5
LDcgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJMVGFzayh2b2lkKiBjbwogICAgIGJsb2JS
ZWdpc3RyeSgpLnJlZ2lzdGVyQmxvYlVSTChibG9iUmVnaXN0cnlDb250ZXh0LT51cmwsIGJsb2JS
ZWdpc3RyeUNvbnRleHQtPmJsb2JEYXRhLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBj
b25zdCBLVVJMJiB1cmwsIFBhc3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhKQordm9pZCBUaHJl
YWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYgdXJsLCBQYXNz
T3duUHRyPEJsb2JEYXRhPiBibG9iRGF0YSkKIHsKICAgICBpZiAoaXNNYWluVGhyZWFkKCkpCiAg
ICAgICAgIGJsb2JSZWdpc3RyeSgpLnJlZ2lzdGVyQmxvYlVSTCh1cmwsIGJsb2JEYXRhKTsKQEAg
LTg2LDcgKzg1LDcgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJMRnJvbVRhc2sodm9pZAog
ICAgIGJsb2JSZWdpc3RyeSgpLnJlZ2lzdGVyQmxvYlVSTChibG9iUmVnaXN0cnlDb250ZXh0LT51
cmwsIGJsb2JSZWdpc3RyeUNvbnRleHQtPnNyY1VSTCk7CiB9CiAKLXZvaWQgVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIHNyY1VSTCkKK3ZvaWQgVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeTo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgc3JjVVJM
KQogewogICAgIGlmIChpc01haW5UaHJlYWQoKSkKICAgICAgICAgYmxvYlJlZ2lzdHJ5KCkucmVn
aXN0ZXJCbG9iVVJMKHVybCwgc3JjVVJMKTsKQEAgLTEwMiw3ICsxMDEsNyBAQCBzdGF0aWMgdm9p
ZCB1bnJlZ2lzdGVyQmxvYlVSTFRhc2sodm9pZCoKICAgICBibG9iUmVnaXN0cnkoKS51bnJlZ2lz
dGVyQmxvYlVSTChibG9iUmVnaXN0cnlDb250ZXh0LT51cmwpOwogfQogCi12b2lkIFRocmVhZGFi
bGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBLVVJMJiB1cmwpCit2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0
ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBpZiAoaXNNYWluVGhyZWFkKCkpCiAg
ICAgICAgIGJsb2JSZWdpc3RyeSgpLnVucmVnaXN0ZXJCbG9iVVJMKHVybCk7CkBAIC0xMTQsMTUg
KzExMywxNSBAQCB2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCCiAKICNl
bHNlCiAKLXZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBLVVJMJiwgUGFzc093blB0cjxCbG9iRGF0YT4pCit2
b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiwg
UGFzc093blB0cjxCbG9iRGF0YT4pCiB7CiB9CiAKLXZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3Ry
eTo6cmVnaXN0ZXJCbG9iVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBLVVJMJiwg
Y29uc3QgS1VSTCYpCit2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVS
TChjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpCiB7CiB9CiAKLXZvaWQgVGhyZWFkYWJsZUJsb2JS
ZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IEtVUkwmKQordm9pZCBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVSTChj
b25zdCBLVVJMJikKIHsKIH0KICNlbmRpZiAvLyBFTkFCTChCTE9CKQpJbmRleDogV2ViQ29yZS9m
aWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Zp
bGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNv
cmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDEzICszNywxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEJsb2JEYXRhOwogY2xh
c3MgS1VSTDsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIGNsYXNzIFRocmVhZGFi
bGVCbG9iUmVnaXN0cnkgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmxvYlVS
TChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgS1VSTCYsIFBhc3NPd25QdHI8QmxvYkRh
dGE+KTsKLSAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJsb2JVUkwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiBzcmNVUkwpOwotICAgIHN0YXRpYyB2b2lk
IHVucmVnaXN0ZXJCbG9iVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBLVVJMJik7
CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmLCBQYXNzT3duUHRy
PEJsb2JEYXRhPik7CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwm
LCBjb25zdCBLVVJMJiBzcmNVUkwpOworICAgIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJCbG9iVVJM
KGNvbnN0IEtVUkwmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ0LDcgKzE0NDQsNyBAQCBi
b29sIEhUTUxJbnB1dEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEZvCiAgICAgICAgIC8vIElmIG5v
IGZpbGVuYW1lIGF0IGFsbCBpcyBlbnRlcmVkLCByZXR1cm4gc3VjY2Vzc2Z1bCBidXQgZW1wdHku
CiAgICAgICAgIC8vIE51bGwgd291bGQgYmUgbW9yZSBsb2dpY2FsLCBidXQgTmV0c2NhcGUgcG9z
dHMgYW4gZW1wdHkgZmlsZS4gQXJnaC4KICAgICAgICAgaWYgKCFudW1GaWxlcykgewotICAgICAg
ICAgICAgZW5jb2RpbmcuYXBwZW5kQmxvYihuYW1lKCksIEZpbGU6OmNyZWF0ZShkb2N1bWVudCgp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksICIiKSk7CisgICAgICAgICAgICBlbmNvZGluZy5h
cHBlbmRCbG9iKG5hbWUoKSwgRmlsZTo6Y3JlYXRlKCIiKSk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogCkBAIC0yMDg3LDE1ICsyMDg3LDE1IEBAIHZvaWQgSFRNTElucHV0
RWxlbWVudDo6c2V0RmlsZUxpc3RGcm9tUmUKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBz
aXplOyBpKyspIHsKICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSBiYWNrc2xhc2hlcyB0byBzbGFz
aGVzIGJlZm9yZSBleHBvc2luZyB0aGUgcmVsYXRpdmUgcGF0aCB0byBzY3JpcHQuCiAgICAgICAg
ICAgICBTdHJpbmcgcmVsYXRpdmVQYXRoID0gcGF0aHNbaV0uc3Vic3RyaW5nKDEgKyByb290UGF0
aC5sZW5ndGgoKSkucmVwbGFjZSgnXFwnLCcvJyk7Ci0gICAgICAgICAgICBtX2ZpbGVMaXN0LT5h
cHBlbmQoRmlsZTo6Y3JlYXRlKGRvY3VtZW50KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwg
cmVsYXRpdmVQYXRoLCBwYXRoc1tpXSkpOworICAgICAgICAgICAgbV9maWxlTGlzdC0+YXBwZW5k
KEZpbGU6OmNyZWF0ZShyZWxhdGl2ZVBhdGgsIHBhdGhzW2ldKSk7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgewogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAg
ICAgIG1fZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUoZG9jdW1lbnQoKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpLCBwYXRoc1tpXSkpOworICAgICAgICAgICAgbV9maWxlTGlzdC0+YXBw
ZW5kKEZpbGU6OmNyZWF0ZShwYXRoc1tpXSkpOwogICAgIH0KICNlbHNlCiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpj
cmVhdGUoZG9jdW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBwYXRoc1tpXSkpOwor
ICAgICAgICBtX2ZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHBhdGhzW2ldKSk7CiAjZW5k
aWYKIAogICAgIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7CkluZGV4
OiBXZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJKHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29yZS9wYWdl
L1NlY3VyaXR5T3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IFNlY3VyaXR5T3JpZ2kKICAgICBpZiAoIXVybC5pc1Zh
bGlkKCkpCiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VjdXJpdHlPcmlnaW4oS1VSTCgp
LCBzYW5kYm94RmxhZ3MpKTsKICNpZiBFTkFCTEUoQkxPQikKLSAgICBpZiAodXJsLnByb3RvY29s
SXMoImJsb2IiKSkKKyAgICBpZiAodXJsLnByb3RvY29sSXMoQmxvYlVSTDo6YmxvYlByb3RvY29s
KCkpKQogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlY3VyaXR5T3JpZ2luKEJsb2JVUkw6
OmdldE9yaWdpbih1cmwpLCBzYW5kYm94RmxhZ3MpKTsKICNlbmRpZgogICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU2VjdXJpdHlPcmlnaW4odXJsLCBzYW5kYm94RmxhZ3MpKTsKQEAgLTI0MCw3ICsy
NDAsNyBAQCBib29sIFNlY3VyaXR5T3JpZ2luOjpjYW5SZXF1ZXN0KGNvbnN0IEtVCiAgICAgYm9v
bCBkb1VuaXF1ZU9yaWdpbkNoZWNrID0gdHJ1ZTsKICNpZiBFTkFCTEUoQkxPQikKICAgICAvLyBG
b3IgYmxvYiBzY2hlbWUsIHdlIHdhbnQgdG8gaWdub3JlIHRoaXMgY2hlY2suCi0gICAgZG9Vbmlx
dWVPcmlnaW5DaGVjayA9ICF1cmwucHJvdG9jb2xJcygiYmxvYiIpOworICAgIGRvVW5pcXVlT3Jp
Z2luQ2hlY2sgPSAhdXJsLnByb3RvY29sSXMoQmxvYlVSTDo6YmxvYlByb3RvY29sKCkpOwogI2Vu
ZGlmCiAgICAgaWYgKGRvVW5pcXVlT3JpZ2luQ2hlY2sgJiYgdGFyZ2V0T3JpZ2luLT5pc1VuaXF1
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yODcsNyArMjg3LDcgQEAgYm9vbCBTZWN1
cml0eU9yaWdpbjo6aXNBY2Nlc3NXaGl0ZUxpc3RlZAogYm9vbCBTZWN1cml0eU9yaWdpbjo6Y2Fu
RGlzcGxheShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIERvY3VtZW50
KiBkb2N1bWVudCkKIHsKICNpZiBFTkFCTEUoQkxPQikKLSAgICBpZiAodXJsLnByb3RvY29sSXMo
ImJsb2IiKSAmJiBkb2N1bWVudCkgeworICAgIGlmICh1cmwucHJvdG9jb2xJcyhCbG9iVVJMOjpi
bG9iUHJvdG9jb2woKSkgJiYgZG9jdW1lbnQpIHsKICAgICAgICAgU2VjdXJpdHlPcmlnaW4qIGRv
Y3VtZW50T3JpZ2luID0gZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCk7CiAgICAgICAgIFJlZlB0
cjxTZWN1cml0eU9yaWdpbj4gdGFyZ2V0T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZSh1
cmwpOwogICAgICAgICByZXR1cm4gZG9jdW1lbnRPcmlnaW4tPmlzU2FtZVNjaGVtZUhvc3RQb3J0
KHRhcmdldE9yaWdpbi5nZXQoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Ns
aXBib2FyZENocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0NsaXBib2FyZENocm9taXVtLmNwcAkocmV2aXNpb24gNjcwMzIpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzY0LDEwICszNjQsOSBAQCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRDaHJvbWl1bTo6
CiAgICAgaWYgKCFtX2RhdGFPYmplY3QgfHwgbV9kYXRhT2JqZWN0LT5maWxlbmFtZXMuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gRmlsZUxpc3Q6OmNyZWF0ZSgpOwogCi0gICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IG1fZnJhbWUtPmRvY3VtZW50
KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBSZWZQdHI8RmlsZUxpc3Q+IGZpbGVM
aXN0ID0gRmlsZUxpc3Q6OmNyZWF0ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9k
YXRhT2JqZWN0LT5maWxlbmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGZpbGVMaXN0LT5hcHBl
bmQoRmlsZTo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1fZGF0YU9iamVjdC0+Zmls
ZW5hbWVzLmF0KGkpKSk7CisgICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKG1f
ZGF0YU9iamVjdC0+ZmlsZW5hbWVzLmF0KGkpKSk7CiAKICAgICByZXR1cm4gZmlsZUxpc3QucmVs
ZWFzZSgpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwCShyZXZp
c2lvbiA2NzAzMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2NSw5ICsyNjUsOCBAQCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlw
Ym9hcmRHdGs6OmZpbGVzCiAgICAgUmVmUHRyPEZpbGVMaXN0PiBmaWxlTGlzdCA9IEZpbGVMaXN0
OjpjcmVhdGUoKTsKICAgICBWZWN0b3I8U3RyaW5nPiBmaWxlVmVjdG9yKG1fZGF0YU9iamVjdC0+
ZmlsZXMoKSk7CiAKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZVZlY3Rvci5zaXplKCk7IGkrKykKLSAgICAg
ICAgZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
ZmlsZVZlY3RvcltpXSkpOworICAgICAgICBmaWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShm
aWxlVmVjdG9yW2ldKSk7CiAKICAgICByZXR1cm4gZmlsZUxpc3QucmVsZWFzZSgpOwogfQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQkocmV2aXNpb24gNjcwMzIpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMx
MywxMiArMzEzLDExIEBAIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBib2FyZE1hYzo6ZmlsZXMK
ICAgICBOU0FycmF5ICphYnNvbHV0ZVVSTHMgPSBhYnNvbHV0ZVVSTHNGcm9tUGFzdGVib2FyZEZp
bGVuYW1lcyhtX3Bhc3RlYm9hcmQuZ2V0KCkpOwogICAgIE5TVUludGVnZXIgY291bnQgPSBbYWJz
b2x1dGVVUkxzIGNvdW50XTsKIAotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CiAgICAgUmVmUHRyPEZpbGVMaXN0PiBmaWxlTGlzdCA9IEZpbGVMaXN0OjpjcmVhdGUo
KTsKICAgICBmb3IgKE5TVUludGVnZXIgeCA9IDA7IHggPCBjb3VudDsgeCsrKSB7CiAgICAgICAg
IE5TVVJMICphYnNvbHV0ZVVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOlthYnNvbHV0ZVVSTHMg
b2JqZWN0QXRJbmRleDp4XV07CiAgICAgICAgIEFTU0VSVChbYWJzb2x1dGVVUkwgaXNGaWxlVVJM
XSk7Ci0gICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQsIFthYnNvbHV0ZVVSTCBwYXRoXSkpOworICAgICAgICBmaWxlTGlzdC0+YXBwZW5k
KEZpbGU6OmNyZWF0ZShbYWJzb2x1dGVVUkwgcGF0aF0pKTsKICAgICB9CiAgICAgcmV0dXJuIGZp
bGVMaXN0LnJlbGVhc2UoKTsgLy8gV2Ugd2lsbCBhbHdheXMgcmV0dXJuIGEgRmlsZUxpc3QsIHNv
bWV0aW1lcyBlbXB0eQogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3Bw
CShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYwNCwxMyArNjA0LDEyIEBAIFBhc3NSZWZQdHI8RmlsZUxp
c3Q+IENsaXBib2FyZFdpbjo6ZmlsZXMKICAgICBpZiAoIWhkcm9wKQogICAgICAgICByZXR1cm4g
ZmlsZXMucmVsZWFzZSgpOwogCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKICAgICBXQ0hBUiBmaWxlbmFtZVtNQVhfUEFUSF07CiAgICAgVUlOVCBmaWxlQ291bnQg
PSBEcmFnUXVlcnlGaWxlVyhoZHJvcCwgMHhGRkZGRkZGRiwgMCwgMCk7CiAgICAgZm9yIChVSU5U
IGkgPSAwOyBpIDwgZmlsZUNvdW50OyBpKyspIHsKICAgICAgICAgaWYgKCFEcmFnUXVlcnlGaWxl
VyhoZHJvcCwgaSwgZmlsZW5hbWUsIEFSUkFZU0laRShmaWxlbmFtZSkpKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGZpbGVzLT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihmaWxlbmFtZSkpKTsKKyAgICAg
ICAgZmlsZXMtPmFwcGVuZChGaWxlOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGZp
bGVuYW1lKSkpOwogICAgIH0KIAogICAgIEdsb2JhbFVubG9jayhtZWRpdW0uaEdsb2JhbCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66985</attachid>
            <date>2010-09-08 18:32:26 -0700</date>
            <delta_ts>2010-09-09 12:26:14 -0700</delta_ts>
            <desc>decouple</desc>
            <filename>decouple4.txt</filename>
            <type>text/plain</type>
            <size>40050</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODQgQEAKKzIwMTAtMDktMDggIE1pY2hhZWwgTm9yZG1hbiAgPG1pY2hhZWxuQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRGVjb3VwbGUgQmxvYiBmcm9tIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTQxMAorCisgICAgICAgIC0g
UmVtb3ZlZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHBvaW50ZXJzIGZyb20gQmxvYiBhbmQgRmls
ZSBjb25zdHJ1Y3RvcnMuCisgICAgICAgIC0gUmVtb3ZlZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
J3MgY29sbGVjdGlvbiBvZiBCbG9icyBpbnN0YW5jZSBpbiB0aGF0IGNvbnRleHQuCisgICAgICAg
IC0gUmVmYWN0b3JlZCBCbG9iVVJMIHRvIG1ha2UgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuICdwdWJs
aWMnIGJsb2IgdXJscyBhbmQgJ2ludGVybmFsJworICAgICAgICAgIHVybHMgdGhhdCBhcmUgdXNl
ZCBzb2xlbHkgYXMgaWRlbnRpZmllcnMuIFRoZSBmb3JtZXIgcmVxdWlyZXMgYSBTZWN1cml0eU9y
aWdpbiB0bworICAgICAgICAgIHRvIG1hbnVmYWN0dXJlLCB0aGUgbGF0dGVyIGRvZXMgbm90Lgor
ICAgICAgICAtIEFkZGVkIGEgY29uc3RhbnQgYW5kIGFjY2Vzc29yIGZvciB0aGUgYmxvYiBwcm90
b2NvbCBzY2hlbWUgb24gdGhlIEJsb2JVUkwgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IGFyZSBhZGRlZCBzaW5jZSB0aGlzIGlzIGEgY2xlYW51cC4KKworICAgICAgICAqIGJpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURl
c2VyaWFsaXplcjo6cmVhZEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6
ZXI6OnJlYWRUZXJtaW5hbCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlppZ1phZzo6UmVhZGVyOjpyZWFkQmxvYik6
CisgICAgICAgIChXZWJDb3JlOjpaaWdaYWc6OlJlYWRlcjo6cmVhZEZpbGUpOgorICAgICAgICAo
V2ViQ29yZTo6WmlnWmFnOjpSZWFkZXI6OnJlYWRGaWxlTGlzdCk6CisgICAgICAgICogZG9tL1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6flNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y3JlYXRlUHVibGljQmxvYlVSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZXZva2VQdWJsaWNCbG9iVVJMKToKKyAg
ICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oOgorICAgICAgICAqIGZpbGVhcGkv
QmxvYi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpCbG9iKToKKyAgICAgICAgKFdlYkNv
cmU6OkJsb2I6On5CbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnNsaWNlKToKKyAgICAg
ICAgKiBmaWxlYXBpL0Jsb2IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCbG9iOjp1cmwpOgorICAgICAgICAqIGZpbGVhcGkvQmxvYi5pZGw6
CisgICAgICAgICogZmlsZWFwaS9CbG9iQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iQnVpbGRlcjo6Z2V0QmxvYik6CisgICAgICAgICogZmlsZWFwaS9CbG9iQnVpbGRlci5oOgor
ICAgICAgICAqIGZpbGVhcGkvQmxvYkJ1aWxkZXIuaWRsOgorICAgICAgICAqIGZpbGVhcGkvQmxv
YlVSTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iVVJMOjpjcmVhdGVQdWJsaWNVUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6QmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwpOgorICAgICAgICAo
V2ViQ29yZTo6QmxvYlVSTDo6Z2V0T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JVUkw6
OmdldElkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlVSTDo6Y3JlYXRlQmxvYlVS
TCk6CisgICAgICAgICogZmlsZWFwaS9CbG9iVVJMLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9i
VVJMOjpibG9iUHJvdG9jb2wpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlVSTDo6QmxvYlVSTCk6
CisgICAgICAgICogZmlsZWFwaS9GaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OkZp
bGUpOgorICAgICAgICAqIGZpbGVhcGkvRmlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6
Y3JlYXRlKToKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXIuY3BwOiBSZWdpc3RlciBhIHB1
YmxpYyB1cmwgdG8gcGVyZm9ybSB0aGUgcmVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFk
ZXI6OmNsZWFudXApOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6c3RhcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWxlUmVhZGVyOjpmYWlsZWQpOgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRl
ci5oOiBBZGRlZCBtX3VybEZvclJlYWRpbmcgZGF0YSBtZW1iZXIuCisgICAgICAgICogZmlsZWFw
aS9GaWxlUmVhZGVyU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyU3luYzo6
cmVhZCk6IFJlZ2lzdGVyIGEgcHVibGljIHVybCB0byBwZXJmb3JtIHRoZSByZWFkLgorICAgICAg
ICAqIGZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6VGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwpOgorICAgICAg
ICAqIGZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oOgorICAgICAgICAqIGh0bWwvSFRN
TElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojph
cHBlbmRGb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRG
aWxlTGlzdEZyb21SZW5kZXJlcik6CisgICAgICAgICogcGFnZS9TZWN1cml0eU9yaWdpbi5jcHA6
IFVzZSBCbG9iVVJMLmJsb2JQcm90b2NvbCgpLgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW46OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6Y2FuUmVx
dWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6Y2FuRGlzcGxheSk6Cisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OmZpbGVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvQ2xpcGJvYXJkR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEd0azo6
ZmlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpDbGlwYm9hcmRNYWM6OmZpbGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4v
Q2xpcGJvYXJkV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZFdpbjo6ZmlsZXMp
OgorCiAyMDEwLTA5LTA4ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTc0LDEwICs5NzQsOCBAQCBwcml2YXRlOgogICAgICAgICBJZGVudGlmaWVyIHR5cGU7CiAgICAg
ICAgIGlmICghcmVhZFN0cmluZ0RhdGEodHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgaWYgKG1faXNET01HbG9iYWxPYmplY3QpIHsKLSAgICAgICAgICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBzdGF0aWNfY2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KG1fZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwotICAgICAgICAgICAgZmlsZSA9IEZpbGU6OmNyZWF0ZShzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBTdHJpbmcocGF0aC51c3RyaW5nKCkuaW1wbCgpKSwgS1VSTChLVVJMKCks
IFN0cmluZyh1cmwudXN0cmluZygpLmltcGwoKSkpLCBTdHJpbmcodHlwZS51c3RyaW5nKCkuaW1w
bCgpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG1faXNET01HbG9iYWxPYmplY3QpCisgICAg
ICAgICAgICBmaWxlID0gRmlsZTo6Y3JlYXRlKFN0cmluZyhwYXRoLnVzdHJpbmcoKS5pbXBsKCkp
LCBLVVJMKEtVUkwoKSwgU3RyaW5nKHVybC51c3RyaW5nKCkuaW1wbCgpKSksIFN0cmluZyh0eXBl
LnVzdHJpbmcoKS5pbXBsKCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0x
MDc0LDkgKzEwNzIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CiAgICAgICAgICAgICBpZiAoIW1faXNET01HbG9iYWxPYmplY3QpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOwotICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
bV9leGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
Ci0gICAgICAgICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgICAgICAg
ICByZXR1cm4gdG9KUyhtX2V4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9n
bG9iYWxPYmplY3QpLCBCbG9iOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgS1VSTChL
VVJMKCksIHVybC51c3RyaW5nKCkuaW1wbCgpKSwgU3RyaW5nKHR5cGUudXN0cmluZygpLmltcGwo
KSksIHNpemUpKTsKKyAgICAgICAgICAgIHJldHVybiB0b0pTKG1fZXhlYywgc3RhdGljX2Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihtX2dsb2JhbE9iamVjdCksIEJsb2I6OmNyZWF0ZShLVVJMKEtV
UkwoKSwgdXJsLnVzdHJpbmcoKS5pbXBsKCkpLCBTdHJpbmcodHlwZS51c3RyaW5nKCkuaW1wbCgp
KSwgc2l6ZSkpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgU3RyaW5nVGFnOiB7CiAgICAgICAg
ICAgICBJZGVudGlmaWVyIGlkZW50OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gNjcwMzIpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3OSw3
ICs4NzksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBp
ZiAoIWRvUmVhZFVpbnQ2NCgmc2l6ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIFBhc3NSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0ZShnZXRTY3JpcHRFeGVjdXRp
b25Db250ZXh0KCksIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCB0eXBlLCBzaXplKTsKKyAg
ICAgICAgUGFzc1JlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6Y3JlYXRlKEtVUkwoUGFyc2VkVVJM
U3RyaW5nLCB1cmwpLCB0eXBlLCBzaXplKTsKICAgICAgICAgKnZhbHVlID0gdG9WOChibG9iKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtODk1LDcgKzg5NSw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghcmVhZFdlYkNvcmVTdHJp
bmcoJnR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBQYXNzUmVmUHRy
PEZpbGU+IGZpbGUgPSBGaWxlOjpjcmVhdGUoZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBw
YXRoLCBLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwgdHlwZSk7CisgICAgICAgIFBhc3NSZWZQ
dHI8RmlsZT4gZmlsZSA9IEZpbGU6OmNyZWF0ZShwYXRoLCBLVVJMKFBhcnNlZFVSTFN0cmluZywg
dXJsKSwgdHlwZSk7CiAgICAgICAgICp2YWx1ZSA9IHRvVjgoZmlsZSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KQEAgLTkxNiw3ICs5MTYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGlmICghcmVhZFdlYkNvcmVTdHJpbmcoJnR5
cGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGZpbGVMaXN0
LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgcGF0aCwg
S1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybFN0cmluZyksIHR5cGUpKTsKKyAgICAgICAgICAgIGZp
bGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHBhdGgsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1
cmxTdHJpbmcpLCB0eXBlKSk7CiAgICAgICAgIH0KICAgICAgICAgKnZhbHVlID0gdG9WOChmaWxl
TGlzdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogV2ViQ29yZS9kb20vU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5jcHAJKHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29yZS9kb20vU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDEzICs5NCwxMCBAQCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0Ojp+U2NyaXB0RXhlY3V0aW9uCiAgICAgfQogI2VuZGlmCiAKLSAg
ICBIYXNoU2V0PEJsb2IqPjo6aXRlcmF0b3IgYmxvYnNFbmQgPSBtX2Jsb2JzLmVuZCgpOwotICAg
IGZvciAoSGFzaFNldDxCbG9iKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2Jsb2JzLmJlZ2luKCk7IGl0
ZXIgIT0gYmxvYnNFbmQ7ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+Y29udGV4dERlc3Ryb3ll
ZCgpOwogI2lmIEVOQUJMRShCTE9CKQogICAgIEhhc2hTZXQ8U3RyaW5nPjo6aXRlcmF0b3IgcHVi
bGljQmxvYlVSTHNFbmQgPSBtX3B1YmxpY0Jsb2JVUkxzLmVuZCgpOwogICAgIGZvciAoSGFzaFNl
dDxTdHJpbmc+OjppdGVyYXRvciBpdGVyID0gbV9wdWJsaWNCbG9iVVJMcy5iZWdpbigpOyBpdGVy
ICE9IHB1YmxpY0Jsb2JVUkxzRW5kOyArK2l0ZXIpCi0gICAgICAgIFRocmVhZGFibGVCbG9iUmVn
aXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKHRoaXMsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXRl
cikpOworICAgICAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVSTChL
VVJMKFBhcnNlZFVSTFN0cmluZywgKml0ZXIpKTsKICNlbmRpZgogfQogCkBAIC0xNzUsMTggKzE3
Miw2IEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZGVzdHJveWVkTWUKICAgICBtX21l
c3NhZ2VQb3J0cy5yZW1vdmUocG9ydCk7CiB9CiAKLXZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6YWRkQmxvYihCbG9iKiBibG9iKQotewotICAgIEFTU0VSVChibG9iKTsKLSAgICBtX2Jsb2Jz
LmFkZChibG9iKTsKLX0KLQotdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZW1vdmVCbG9i
KEJsb2IqIGJsb2IpCi17Ci0gICAgQVNTRVJUKGJsb2IpOwotICAgIG1fYmxvYnMucmVtb3ZlKGJs
b2IpOwotfQotCiBib29sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmNhblN1c3BlbmRBY3RpdmVE
T01PYmplY3RzKCkKIHsKICAgICAvLyBObyBwcm90ZWN0aW9uIGFnYWluc3QgbV9hY3RpdmVET01P
YmplY3RzIGNoYW5naW5nIGR1cmluZyBpdGVyYXRpb246IGNhblN1c3BlbmQoKSBzaG91bGRuJ3Qg
ZXhlY3V0ZSBhcmJpdHJhcnkgSlMuCkBAIC0yNzcsOCArMjYyLDggQEAgRE9NVGltZXIqIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OmZpbmRUaQogI2lmIEVOQUJMRShCTE9CKQogS1VSTCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpjcmVhdGVQdWJsaWNCbG9iVVJMKEJsb2IqIGJsb2IpCiB7Ci0gICAg
S1VSTCBwdWJsaWNVUkwgPSBCbG9iVVJMOjpjcmVhdGVVUkwodGhpcyk7Ci0gICAgVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKHRoaXMsIHB1YmxpY1VSTCwgYmxvYi0+dXJs
KCkpOworICAgIEtVUkwgcHVibGljVVJMID0gQmxvYlVSTDo6Y3JlYXRlUHVibGljVVJMKHNlY3Vy
aXR5T3JpZ2luKCkpOworICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVS
TChwdWJsaWNVUkwsIGJsb2ItPnVybCgpKTsKICAgICBtX3B1YmxpY0Jsb2JVUkxzLmFkZChwdWJs
aWNVUkwuc3RyaW5nKCkpOwogICAgIHJldHVybiBwdWJsaWNVUkw7CiB9CkBAIC0yODYsNyArMjcx
LDcgQEAgS1VSTCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpjcmVhdGVQdWJsaQogdm9pZCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpyZXZva2VQdWJsaWNCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCkK
IHsKICAgICBpZiAobV9wdWJsaWNCbG9iVVJMcy5jb250YWlucyh1cmwuc3RyaW5nKCkpKSB7Ci0g
ICAgICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKHRoaXMsIHVy
bCk7CisgICAgICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKHVy
bCk7CiAgICAgICAgIG1fcHVibGljQmxvYlVSTHMucmVtb3ZlKHVybC5zdHJpbmcoKSk7CiAgICAg
fQogfQpJbmRleDogV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAkocmV2aXNpb24gNjcw
MzIpCisrKyBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMSw4ICsxMzEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQg
cmVtb3ZlVGltZW91dChpbnQgdGltZW91dElkKTsKICAgICAgICAgRE9NVGltZXIqIGZpbmRUaW1l
b3V0KGludCB0aW1lb3V0SWQpOwogCi0gICAgICAgIHZvaWQgYWRkQmxvYihCbG9iKik7Ci0gICAg
ICAgIHZvaWQgcmVtb3ZlQmxvYihCbG9iKik7CiAjaWYgRU5BQkxFKEJMT0IpCiAgICAgICAgIEtV
UkwgY3JlYXRlUHVibGljQmxvYlVSTChCbG9iKik7CiAgICAgICAgIHZvaWQgcmV2b2tlUHVibGlj
QmxvYlVSTChjb25zdCBLVVJMJik7CkBAIC0xNjcsNyArMTY1LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIEhhc2hNYXA8aW50LCBET01UaW1lcio+IG1fdGltZW91dHM7CiAKLSAg
ICAgICAgSGFzaFNldDxCbG9iKj4gbV9ibG9iczsKICNpZiBFTkFCTEUoQkxPQikKICAgICAgICAg
SGFzaFNldDxTdHJpbmc+IG1fcHVibGljQmxvYlVSTHM7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
ZmlsZWFwaS9CbG9iLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAJ
KHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw1NyArMzMsMzcgQEAKIAogI2luY2x1ZGUgIkJsb2JVUkwuaCIKICNpbmNsdWRl
ICJGaWxlLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IlRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1CbG9i
OjpCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFBh
c3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhLCBsb25nIGxvbmcgc2l6ZSkKLSAgICA6IG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQotICAgICwgbV90eXBl
KGJsb2JEYXRhLT5jb250ZW50VHlwZSgpKQorQmxvYjo6QmxvYihQYXNzT3duUHRyPEJsb2JEYXRh
PiBibG9iRGF0YSwgbG9uZyBsb25nIHNpemUpCisgICAgOiBtX3R5cGUoYmxvYkRhdGEtPmNvbnRl
bnRUeXBlKCkpCiAgICAgLCBtX3NpemUoc2l6ZSkKIHsKICAgICBBU1NFUlQoYmxvYkRhdGEpOwog
Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRCbG9iKHRoaXMpOwotCiAgICAgLy8g
Q3JlYXRlIGEgbmV3IGludGVybmFsIFVSTCBhbmQgcmVnaXN0ZXIgaXQgd2l0aCB0aGUgcHJvdmlk
ZWQgYmxvYiBkYXRhLgotICAgIG1fdXJsID0gQmxvYlVSTDo6Y3JlYXRlVVJMKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQpOwotICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVS
TChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBtX3VybCwgYmxvYkRhdGEpOworICAgIG1faW50ZXJu
YWxVUkwgPSBCbG9iVVJMOjpjcmVhdGVJbnRlcm5hbFVSTCgpOworICAgIFRocmVhZGFibGVCbG9i
UmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChtX2ludGVybmFsVVJMLCBibG9iRGF0YSk7CiB9CiAK
LUJsb2I6OkJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgY29uc3QgS1VSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBzaXpl
KQotICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQp
Ci0gICAgLCBtX3R5cGUodHlwZSkKK0Jsb2I6OkJsb2IoY29uc3QgS1VSTCYgc3JjVVJMLCBjb25z
dCBTdHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBzaXplKQorICAgIDogbV90eXBlKHR5cGUpCiAgICAg
LCBtX3NpemUoc2l6ZSkKIHsKLSAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQmxvYih0
aGlzKTsKLQogICAgIC8vIENyZWF0ZSBhIG5ldyBpbnRlcm5hbCBVUkwgYW5kIHJlZ2lzdGVyIGl0
IHdpdGggdGhlIHNhbWUgYmxvYiBkYXRhIGFzIHRoZSBzb3VyY2UgVVJMLgotICAgIG1fdXJsID0g
QmxvYlVSTDo6Y3JlYXRlVVJMKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotICAgIFRocmVhZGFi
bGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBt
X3VybCwgc3JjVVJMKTsKKyAgICBtX2ludGVybmFsVVJMID0gQmxvYlVSTDo6Y3JlYXRlSW50ZXJu
YWxVUkwoKTsKKyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwobV9p
bnRlcm5hbFVSTCwgc3JjVVJMKTsKIH0KIAogQmxvYjo6fkJsb2IoKQogewotICAgIC8vIFRoZSBp
bnRlcm5hbCBVUkwgaXMgb25seSB1c2VkIHRvIHJlZmVyIHRvIHRoZSBCbG9iIG9iamVjdC4gU28g
d2UgbmVlZCB0byB1bnJlZ2lzdGVyIHRoZSBVUkwgd2hlbiB0aGUgb2JqZWN0IGlzIEdDLWVkLgot
ICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpIHsKLSAgICAgICAgbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5yZW1vdmVCbG9iKHRoaXMpOwotICAgICAgICBUaHJlYWRhYmxlQmxvYlJl
Z2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVSTChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1fdXJs
KTsKLSAgICB9Ci19Ci0KLXZvaWQgQmxvYjo6Y29udGV4dERlc3Ryb3llZCgpCi17Ci0gICAgQVNT
RVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0KLSAgICAvLyBVbnJlZ2lzdGVyIHRoZSBp
bnRlcm5hbCBVUkwgYmVmb3JlIHRoZSBjb250ZXh0IGlzIGdvbmUuCi0gICAgVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBt
X3VybCk7Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gMDsKKyAgICBUaHJlYWRhYmxl
QmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVSTChtX2ludGVybmFsVVJMKTsKIH0KIAogI2lm
IEVOQUJMRShCTE9CKQotUGFzc1JlZlB0cjxCbG9iPiBCbG9iOjpzbGljZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBsb25nIGxvbmcgc3RhcnQsIGxvbmcg
bG9uZyBsZW5ndGgsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpIGNvbnN0CitQYXNzUmVmUHRy
PEJsb2I+IEJsb2I6OnNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgY29u
c3QgU3RyaW5nJiBjb250ZW50VHlwZSkgY29uc3QKIHsKICAgICAvLyBXaGVuIHdlIHNsaWNlIGEg
ZmlsZSBmb3IgdGhlIGZpcnN0IHRpbWUsIHdlIG9idGFpbiBhIHNuYXBzaG90IG9mIHRoZSBmaWxl
IGJ5IGNhcHR1cmluZyBpdHMgY3VycmVudCBzaXplIGFuZCBtb2RpZmljYXRpb24gdGltZS4KICAg
ICAvLyBUaGUgbW9kaWZpY2F0aW9uIHRpbWUgd2lsbCBiZSB1c2VkIHRvIHZlcmlmeSBpZiB0aGUg
ZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIG9yIG5vdCwgd2hlbiB0aGUgdW5kZXJseWluZyBkYXRhIGFy
ZSBhY2Nlc3NlZC4KQEAgLTExNCw5ICs5NCw5IEBAIFBhc3NSZWZQdHI8QmxvYj4gQmxvYjo6c2xp
Y2UoU2NyaXB0RXhlY3UKICAgICBpZiAoaXNGaWxlKCkpCiAgICAgICAgIGJsb2JEYXRhLT5hcHBl
bmRGaWxlKHN0YXRpY19jYXN0PGNvbnN0IEZpbGUqPih0aGlzKS0+cGF0aCgpLCBzdGFydCwgbGVu
Z3RoLCBtb2RpZmljYXRpb25UaW1lKTsKICAgICBlbHNlCi0gICAgICAgIGJsb2JEYXRhLT5hcHBl
bmRCbG9iKG1fdXJsLCBzdGFydCwgbGVuZ3RoKTsKKyAgICAgICAgYmxvYkRhdGEtPmFwcGVuZEJs
b2IobV9pbnRlcm5hbFVSTCwgc3RhcnQsIGxlbmd0aCk7CiAKLSAgICByZXR1cm4gQmxvYjo6Y3Jl
YXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGJsb2JEYXRhLnJlbGVhc2UoKSwgbGVuZ3RoKTsK
KyAgICByZXR1cm4gQmxvYjo6Y3JlYXRlKGJsb2JEYXRhLnJlbGVhc2UoKSwgbGVuZ3RoKTsKIH0K
ICNlbmRpZgogCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZmlsZWFwaS9CbG9iLmgJKHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29yZS9maWxlYXBp
L0Jsb2IuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNDYgKzQxLDQyIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLQogY2xhc3MgQmxvYiA6
IHB1YmxpYyBSZWZDb3VudGVkPEJsb2I+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxCbG9iPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCwgUGFzc093blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEsIGxvbmcgbG9uZyBzaXplKQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShQYXNzT3duUHRyPEJsb2JEYXRhPiBibG9i
RGF0YSwgbG9uZyBsb25nIHNpemUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEJsb2Ioc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgYmxvYkRhdGEsIHNpemUpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iKGJsb2JEYXRhLCBzaXplKSk7CiAgICAgfQogCiAgICAg
Ly8gRm9yIGRlc2VyaWFsaXphdGlvbi4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3Qg
S1VSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBzaXplKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0
cmluZyYgdHlwZSwgbG9uZyBsb25nIHNpemUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEJsb2Ioc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgc3JjVVJMLCB0eXBlLCBzaXplKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihzcmNVUkwsIHR5cGUsIHNpemUpKTsK
ICAgICB9CiAKICAgICB2aXJ0dWFsIH5CbG9iKCk7CiAKLSAgICB2b2lkIGNvbnRleHREZXN0cm95
ZWQoKTsKLQotICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9Cisg
ICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbFVSTDsgfQogICAg
IGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogCiAgICAgdmly
dHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4obV9zaXplKTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAjaWYgRU5BQkxFKEJMT0IpCi0gICAgUGFzc1Jl
ZlB0cjxCbG9iPiBzbGljZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgbG9uZyBsb25nIHN0YXJ0
LCBsb25nIGxvbmcgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlID0gU3RyaW5nKCkp
IGNvbnN0OworICAgIFBhc3NSZWZQdHI8QmxvYj4gc2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25n
IGxvbmcgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlID0gU3RyaW5nKCkpIGNvbnN0
OwogI2VuZGlmCiAKIHByb3RlY3RlZDoKLSAgICBCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzT3duUHRyPEJsb2JEYXRhPiwgbG9uZyBsb25nIHNpemUpOworICAgIEJsb2IoUGFzc093
blB0cjxCbG9iRGF0YT4sIGxvbmcgbG9uZyBzaXplKTsKIAogICAgIC8vIEZvciBkZXNlcmlhbGl6
YXRpb24uCi0gICAgQmxvYihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgS1VSTCYgc3Jj
VVJMLCBjb25zdCBTdHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBzaXplKTsKKyAgICBCbG9iKGNvbnN0
IEtVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlLCBsb25nIGxvbmcgc2l6ZSk7CiAKLSAg
ICAvLyBUaGlzIGlzIGFuIGludGVybmFsIFVSTCByZWZlcnJpbmcgdG8gdGhlIGJsb2IgZGF0YSBh
c3NvY2lhdGVkIHdpdGggdGhpcyBvYmplY3QuCi0gICAgLy8gSXQgaXMgb25seSB1c2VkIGJ5IEZp
bGVSZWFkZXIgdG8gcmVhZCB0aGUgYmxvYiBkYXRhIHZpYSBsb2FkaW5nIGZyb20gdGhlIGJsb2Ig
VVJMIHJlc291cmNlLgotICAgIEtVUkwgbV91cmw7CisgICAgLy8gVGhpcyBpcyBhbiBpbnRlcm5h
bCBVUkwgcmVmZXJyaW5nIHRvIHRoZSBibG9iIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb2Jq
ZWN0LiBJdCBzZXJ2ZXMKKyAgICAvLyBhcyBhbiBpZGVudGlmaWVyIGZvciB0aGlzIGJsb2IuIFRo
ZSBpbnRlcm5hbCBVUkwgaXMgbmV2ZXIgdXNlZCB0byBzb3VyY2UgdGhlIGJsb2IncyBjb250ZW50
CisgICAgLy8gaW50byBhbiBIVE1MIG9yIGZvciBGaWxlUmVhZCdpbmcsIHB1YmxpYyBibG9iIFVS
THMgbXVzdCBiZSB1c2VkIGZvciB0aG9zZSBwdXJwb3Nlcy4KKyAgICBLVVJMIG1faW50ZXJuYWxV
Ukw7CiAgICAgCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0OwogICAgIFN0cmluZyBtX3R5cGU7CiAgICAgbG9uZyBsb25nIG1fc2l6ZTsKIH07Cklu
ZGV4OiBXZWJDb3JlL2ZpbGVhcGkvQmxvYi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxl
YXBpL0Jsb2IuaWRsCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvZmlsZWFwaS9CbG9iLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBtb2R1bGUgaHRtbCB7CiAKICNpZiAh
ZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykKICNpZiBkZWZpbmVkKEVOQUJMRV9CTE9CKSAm
JiBFTkFCTEVfQkxPQgotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0g
QmxvYiBzbGljZShpbiBsb25nIGxvbmcgc3RhcnQsIGluIGxvbmcgbG9uZyBsZW5ndGgsIGluIFtP
cHRpb25hbCwgQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGNv
bnRlbnRUeXBlKTsKKyAgICAgICAgQmxvYiBzbGljZShpbiBsb25nIGxvbmcgc3RhcnQsIGluIGxv
bmcgbG9uZyBsZW5ndGgsIGluIFtPcHRpb25hbCwgQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVs
bFN0cmluZ10gRE9NU3RyaW5nIGNvbnRlbnRUeXBlKTsKICNlbmRpZgogI2VuZGlmCiAgICAgfTsK
SW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9CbG9iQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9maWxlYXBpL0Jsb2JCdWlsZGVyLmNwcAkocmV2aXNpb24gNjcwMzIpCisrKyBXZWJDb3Jl
L2ZpbGVhcGkvQmxvYkJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsMTMgKzExNywx
MyBAQCBib29sIEJsb2JCdWlsZGVyOjphcHBlbmQoUGFzc1JlZlB0cjxCbG9iCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLVBhc3NSZWZQdHI8QmxvYj4gQmxvYkJ1aWxkZXI6OmdldEJsb2IoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiBj
b250ZW50VHlwZSkKK1Bhc3NSZWZQdHI8QmxvYj4gQmxvYkJ1aWxkZXI6OmdldEJsb2IoY29uc3Qg
U3RyaW5nJiBjb250ZW50VHlwZSkKIHsKICAgICBPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhID0g
QmxvYkRhdGE6OmNyZWF0ZSgpOwogICAgIGJsb2JEYXRhLT5zZXRDb250ZW50VHlwZShjb250ZW50
VHlwZSk7CiAgICAgYmxvYkRhdGEtPnN3YXBJdGVtcyhtX2l0ZW1zKTsKIAotICAgIFJlZlB0cjxC
bG9iPiBibG9iID0gQmxvYjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGJsb2JEYXRh
LnJlbGVhc2UoKSwgbV9zaXplKTsKKyAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0
ZShibG9iRGF0YS5yZWxlYXNlKCksIG1fc2l6ZSk7CiAKICAgICAvLyBBZnRlciBjcmVhdGluZyBh
IGJsb2IgZnJvbSB0aGUgY3VycmVudCBibG9iIGRhdGEsIHdlIGRvIG5vdCBuZWVkIHRvIGtlZXAg
dGhlIGRhdGEgYXJvdW5kIGFueSBtb3JlLiBJbnN0ZWFkLCB3ZSBvbmx5CiAgICAgLy8gbmVlZCB0
byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBVUkwgb2YgdGhlIGJsb2IganVzdCBjcmVhdGVkLgpJ
bmRleDogV2ViQ29yZS9maWxlYXBpL0Jsb2JCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9maWxlYXBpL0Jsb2JCdWlsZGVyLmgJKHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29yZS9maWxl
YXBpL0Jsb2JCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDYgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQmxvYjsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ7CiBjbGFzcyBUZXh0RW5jb2Rpbmc7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CkBA
IC01NCw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICBib29sIGFwcGVuZChjb25zdCBTdHJpbmcmIHRl
eHQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIGFwcGVuZChjb25zdCBTdHJpbmcmIHRleHQs
IGNvbnN0IFN0cmluZyYgZW5kaW5nLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBQYXNzUmVmUHRy
PEJsb2I+IGdldEJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgY29u
dGVudFR5cGUgPSBTdHJpbmcoKSk7CisgICAgUGFzc1JlZlB0cjxCbG9iPiBnZXRCbG9iKGNvbnN0
IFN0cmluZyYgY29udGVudFR5cGUgPSBTdHJpbmcoKSk7CiAKIHByaXZhdGU6CiAgICAgQmxvYkJ1
aWxkZXIoKTsKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9CbG9iQnVpbGRlci5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9maWxlYXBpL0Jsb2JCdWlsZGVyLmlkbAkocmV2aXNpb24gNjcwMzIpCisr
KyBXZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1aWxkZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3
ICszNSw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAgICBdIEJs
b2JCdWlsZGVyIHsKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykKLSAgICAgICAg
W0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIEJsb2IgZ2V0QmxvYihpbiBbT3B0aW9u
YWwsIENvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBjb250ZW50
VHlwZSk7CisgICAgICAgIEJsb2IgZ2V0QmxvYihpbiBbT3B0aW9uYWwsIENvbnZlcnRVbmRlZmlu
ZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBjb250ZW50VHlwZSk7CiAjZW5kaWYKICAg
ICAgICAgdm9pZCBhcHBlbmQoaW4gQmxvYiBibG9iKTsKICAgICAgICAgdm9pZCBhcHBlbmQoaW4g
RE9NU3RyaW5nIHZhbHVlLCBpbiBbT3B0aW9uYWwsIENvbnZlcnRVbmRlZmluZWRPck51bGxUb051
bGxTdHJpbmddIERPTVN0cmluZyBlbmRpbmdzKSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CkluZGV4
OiBXZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxl
YXBpL0Jsb2JVUkwuY3BwCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvZmlsZWFwaS9CbG9i
VVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMjggKzM0LDI3IEBACiAKICNpbmNsdWRlICJL
VVJMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJV
VUlELmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotS1VSTCBCbG9iVVJMOjpjcmVhdGVVUkwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKK2NvbnN0IGNo
YXIgQmxvYlVSTDo6a0Jsb2JQcm90b2NvbFtdID0gImJsb2IiOworCitLVVJMIEJsb2JVUkw6OmNy
ZWF0ZVB1YmxpY1VSTChTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pCiB7Ci0gICAgLy8g
Q3JlYXRlIHRoZSBibG9iIFVSTCBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKLSAgICAvLyAgICAg
YmxvYjolZXNjYXBlZF9vcmlnaW4lLyVVVUlEJQotICAgIC8vIFRoZSBvcmlnaW4gb2YgdGhlIGhv
c3QgcGFnZSBpcyBlbmNvZGVkIGluIHRoZSBVUkwgdmFsdWUgdG8gYWxsb3cgZWFzeSBsb29rdXAg
b2YgdGhlIG9yaWdpbiB3aGVuIHRoZSBzZWN1cml0eSBjaGVjayBuZWVkcwotICAgIC8vIHRvIGJl
IHBlcmZvcm1lZC4KLSAgICBTdHJpbmcgdXJsU3RyaW5nID0gImJsb2I6IjsKLSAgICB1cmxTdHJp
bmcgKz0gZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhzY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKLSAgICB1cmxTdHJpbmcgKz0gIi8iOwot
ICAgIHVybFN0cmluZyArPSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7Ci0gICAgcmV0dXJu
IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmxTdHJpbmcpOworICAgIEFTU0VSVChzZWN1cml0eU9y
aWdpbik7CisgICAgcmV0dXJuIGNyZWF0ZUJsb2JVUkwoc2VjdXJpdHlPcmlnaW4tPnRvU3RyaW5n
KCkpOworfQorCitLVVJMIEJsb2JVUkw6OmNyZWF0ZUludGVybmFsVVJMKCkKK3sKKyAgICByZXR1
cm4gY3JlYXRlQmxvYlVSTCgiYmxvYmludGVybmFsOi8vIik7CiB9CiAKIEtVUkwgQmxvYlVSTDo6
Z2V0T3JpZ2luKGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICBBU1NFUlQodXJsLnByb3RvY29sSXMo
ImJsb2IiKSk7CisgICAgQVNTRVJUKHVybC5wcm90b2NvbElzKGtCbG9iUHJvdG9jb2wpKTsKIAog
ICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSB1cmwucGF0aFN0YXJ0KCk7CiAgICAgdW5zaWduZWQg
YWZ0ZXJFbmRJbmRleCA9IHVybC5wYXRoQWZ0ZXJMYXN0U2xhc2goKTsKQEAgLTY1LDEwICs2NCwy
MCBAQCBLVVJMIEJsb2JVUkw6OmdldE9yaWdpbihjb25zdCBLVVJMJiB1cmwpCiAKIFN0cmluZyBC
bG9iVVJMOjpnZXRJZGVudGlmaWVyKGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICBBU1NFUlQodXJs
LnByb3RvY29sSXMoImJsb2IiKSk7CisgICAgQVNTRVJUKHVybC5wcm90b2NvbElzKGtCbG9iUHJv
dG9jb2wpKTsKIAogICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSB1cmwucGF0aEFmdGVyTGFzdFNs
YXNoKCk7CiAgICAgcmV0dXJuIHVybC5zdHJpbmcoKS5zdWJzdHJpbmcoc3RhcnRJbmRleCk7CiB9
CiAKK0tVUkwgQmxvYlVSTDo6Y3JlYXRlQmxvYlVSTChjb25zdCBTdHJpbmcmIG9yaWdpblN0cmlu
ZykKK3sKKyAgICBTdHJpbmcgdXJsU3RyaW5nID0ga0Jsb2JQcm90b2NvbDsKKyAgICB1cmxTdHJp
bmcgKz0gIjoiOworICAgIHVybFN0cmluZyArPSBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2Vz
KG9yaWdpblN0cmluZyk7CisgICAgdXJsU3RyaW5nICs9ICIvIjsKKyAgICB1cmxTdHJpbmcgKz0g
Y3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOworICAgIHJldHVybiBLVVJMKFBhcnNlZFVSTFN0
cmluZywgdXJsU3RyaW5nKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9maWxlYXBpL0Jsb2JVUkwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvQmxv
YlVSTC5oCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwyOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKIAor
Ly8gQmxvYiBVUkxzIGFyZSBvZiB0aGUgZm9ybQorLy8gICAgIGJsb2I6JWVzY2FwZWRfb3JpZ2lu
JS8lVVVJRCUKKy8vIEZvciBwdWJsaWMgdXJscywgdGhlIG9yaWdpbiBvZiB0aGUgaG9zdCBwYWdl
IGlzIGVuY29kZWQgaW4gdGhlIFVSTCB2YWx1ZSB0bworLy8gYWxsb3cgZWFzeSBsb29rdXAgb2Yg
dGhlIG9yaWdpbiB3aGVuIHNlY3VyaXR5IGNoZWNrcyBuZWVkIHRvIGJlIHBlcmZvcm1lZC4KKy8v
IFdoZW4gbG9hZGluZyBibG9icyB2aWEgUmVzb3VyY2VIYW5kbGUgb3Igd2hlbiByZWFkaW5nIGJs
b2JzIHZpYSBGaWxlUmVhZGVyCisvLyB0aGUgbG9hZGVyIGNvbmR1Y3RzIHNlY3VyaXR5IGNoZWNr
cyB0aGF0IGV4YW1pbmUgdGhlIG9yaWdpbiBvZiBob3N0IHBhZ2UKKy8vIGVuY29kZWQgaW4gdGhl
IHB1YmxpYyBibG9iIHVybC4gVGhlIG9yaWdpbiBiYWtlZCBpbnRvIGludGVybmFsIGJsb2IgdXJs
cworLy8gaXMgYSBzaW1wbGUgY29uc3RhbnQgdmFsdWUsICJibG9iaW50ZXJuYWw6Ly8iLCBpbnRl
cm5hbCB1cmxzIHNob3VsZCBub3QKKy8vIGJlIHVzZWQgd2l0aCBSZXNvdXJjZUhhbmRsZSBvciBG
aWxlUmVhZGVyLgogY2xhc3MgQmxvYlVSTCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIEtVUkwgY3Jl
YXRlVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBzdGF0aWMgS1VSTCBjcmVhdGVQ
dWJsaWNVUkwoU2VjdXJpdHlPcmlnaW4qKTsKKyAgICBzdGF0aWMgS1VSTCBjcmVhdGVJbnRlcm5h
bFVSTCgpOwogICAgIHN0YXRpYyBLVVJMIGdldE9yaWdpbihjb25zdCBLVVJMJik7Ci0gICAgc3Rh
dGljIFN0cmluZyBnZXRJZGVudGlmaWVyKGNvbnN0IEtVUkwmIHVybCk7CisgICAgc3RhdGljIFN0
cmluZyBnZXRJZGVudGlmaWVyKGNvbnN0IEtVUkwmKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
YmxvYlByb3RvY29sKCkgeyByZXR1cm4ga0Jsb2JQcm90b2NvbDsgfQorCitwcml2YXRlOgorICAg
IHN0YXRpYyBLVVJMIGNyZWF0ZUJsb2JVUkwoY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcpOwor
ICAgIHN0YXRpYyBjb25zdCBjaGFyIGtCbG9iUHJvdG9jb2xbXTsKKyAgICBCbG9iVVJMKCkgeyB9
CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9maWxlYXBpL0ZpbGUuY3BwCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvZmls
ZWFwaS9GaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkZpbGUuaCIKIAotI2luY2x1ZGUgIkJsb2JSZWdpc3RyeS5o
IgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
CiAKQEAgLTQ1LDIzICs0NCwyMyBAQCBzdGF0aWMgUGFzc093blB0cjxCbG9iRGF0YT4gY3JlYXRl
QmxvYkRhCiAgICAgcmV0dXJuIGJsb2JEYXRhLnJlbGVhc2UoKTsKIH0KIAotRmlsZTo6RmlsZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJp
bmcmIHBhdGgpCi0gICAgOiBCbG9iKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNyZWF0ZUJsb2JE
YXRhRm9yRmlsZShwYXRoKSwgLTEpCitGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKKyAg
ICA6IEJsb2IoY3JlYXRlQmxvYkRhdGFGb3JGaWxlKHBhdGgpLCAtMSkKICAgICAsIG1fcGF0aChw
YXRoKQogICAgICwgbV9uYW1lKHBhdGhHZXRGaWxlTmFtZShwYXRoKSkKIHsKIH0KIAotRmlsZTo6
RmlsZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0eXBlKQotICAg
IDogQmxvYihzY3JpcHRFeGVjdXRpb25Db250ZXh0LCB1cmwsIHR5cGUsIC0xKQorRmlsZTo6Rmls
ZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0eXBl
KQorICAgIDogQmxvYih1cmwsIHR5cGUsIC0xKQogICAgICwgbV9wYXRoKHBhdGgpCiB7CiAgICAg
bV9uYW1lID0gcGF0aEdldEZpbGVOYW1lKHBhdGgpOwogfQogCiAjaWYgRU5BQkxFKERJUkVDVE9S
WV9VUExPQUQpCi1GaWxlOjpGaWxlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25zdCBTdHJpbmcmIHBh
dGgpCi0gICAgOiBCbG9iKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNyZWF0ZUJsb2JEYXRhRm9y
RmlsZShwYXRoKSwgLTEpCitGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBj
b25zdCBTdHJpbmcmIHBhdGgpCisgICAgOiBCbG9iKGNyZWF0ZUJsb2JEYXRhRm9yRmlsZShwYXRo
KSwgLTEpCiAgICAgLCBtX3BhdGgocGF0aCkKICAgICAsIG1fcmVsYXRpdmVQYXRoKHJlbGF0aXZl
UGF0aCkKIHsKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9maWxlYXBpL0ZpbGUuaAkocmV2aXNpb24gNjcwMzIpCisrKyBXZWJDb3JlL2ZpbGVhcGkv
RmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwyNSArMzQsMjQgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgS1VSTDsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIGNs
YXNzIEZpbGUgOiBwdWJsaWMgQmxvYiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
RmlsZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIGNvbnN0IFN0cmluZyYgcGF0aCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlPiBjcmVh
dGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBGaWxlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHBhdGgpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBGaWxlKHBhdGgpKTsKICAgICB9CiAKICAgICAvLyBGb3IgZGVzZXJpYWxpemF0
aW9uLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IEtVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEZpbGU+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEtVUkwmIHNyY1VSTCwgY29u
c3QgU3RyaW5nJiB0eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxl
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHBhdGgsIHNyY1VSTCwgdHlwZSkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUocGF0aCwgc3JjVVJMLCB0eXBlKSk7CiAgICAgfQogCiAj
aWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZT4g
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNv
bnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25zdCBTdHJpbmcmIHBhdGgpCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RmlsZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25z
dCBTdHJpbmcmIHBhdGgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgcmVsYXRpdmVQYXRoLCBwYXRoKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRmlsZShyZWxhdGl2ZVBhdGgsIHBhdGgpKTsKICAgICB9CiAjZW5k
aWYKIApAQCAtNzQsMTMgKzczLDEzIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBsb25nIGxvbmcg
ZmlsZVNpemUoKSBjb25zdCB7IHJldHVybiBzaXplKCk7IH0KIAogcHJpdmF0ZToKLSAgICBGaWxl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIEZpbGUo
Y29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICAKICAgICAvLyBGb3IgZGVzZXJpYWxpemF0aW9uLgot
ICAgIEZpbGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgS1VSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5cGUpOworICAgIEZpbGUoY29uc3QgU3Ry
aW5nJiBwYXRoLCBjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlwZSk7CiAKICNp
ZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKLSAgICBGaWxlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCwgY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAg
ICBGaWxlKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25zdCBTdHJpbmcmIHBhdGgpOwog
I2VuZGlmCiAKICAgICBTdHJpbmcgbV9wYXRoOwpJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVS
ZWFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAko
cmV2aXNpb24gNjcwMzIpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKIAogI2luY2x1ZGUgIkJhc2U2NC5oIgogI2luY2x1
ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJCbG9iVVJMLmgiCiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRU
YXNrLmgiCiAjaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTQ0LDYg
KzQ1LDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJTY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgorI2lu
Y2x1ZGUgIlRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9h
ZGVyLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKQEAgLTE1NCwxNyArMTU2LDI3
IEBAIHZvaWQgRmlsZVJlYWRlcjo6dGVybWluYXRlKCkKIHsKICAgICBpZiAobV9sb2FkZXIpIHsK
ICAgICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOwotICAgICAgICBtX2xvYWRlciA9IDA7CisgICAg
ICAgIGNsZWFudXAoKTsKICAgICB9CiAgICAgbV9zdGF0ZSA9IENvbXBsZXRlZDsKIH0KIAordm9p
ZCBGaWxlUmVhZGVyOjpjbGVhbnVwKCkKK3sKKyAgICBtX2xvYWRlciA9IDA7CisgICAgVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwobV91cmxGb3JSZWFkaW5nKTsKKyAg
ICBtX3VybEZvclJlYWRpbmcgPSBLVVJMKCk7Cit9CisKIHZvaWQgRmlsZVJlYWRlcjo6c3RhcnQo
KQogewogICAgIG1fc3RhdGUgPSBPcGVuaW5nOwogCi0gICAgLy8gVGhlIGJsb2IgaXMgcmVhZCBi
eSByb3V0aW5nIHRocm91Z2ggdGhlIHJlcXVlc3QgaGFuZGxpbmcgbGF5ZXIgZ2l2ZW4gdGhlIGJs
b2IgdXJsLgotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1fYmxvYi0+dXJsKCkpOworICAg
IC8vIFRoZSBibG9iIGlzIHJlYWQgYnkgcm91dGluZyB0aHJvdWdoIHRoZSByZXF1ZXN0IGhhbmRs
aW5nIGxheWVyIGdpdmVuIGEgdGVtcG9yYXJ5IHB1YmxpYyB1cmwuCisgICAgbV91cmxGb3JSZWFk
aW5nID0gQmxvYlVSTDo6Y3JlYXRlUHVibGljVVJMKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJC
bG9iVVJMKG1fdXJsRm9yUmVhZGluZywgbV9ibG9iLT51cmwoKSk7CisKKyAgICBSZXNvdXJjZVJl
cXVlc3QgcmVxdWVzdChtX3VybEZvclJlYWRpbmcpOwogICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhv
ZCgiR0VUIik7CiAKICAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOwpAQCAtMjMw
LDcgKzI0Miw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ24KICAg
ICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmxvYWRFdmVudCk7CiAgICAgZmlyZUV2ZW50KGV2ZW50
TmFtZXMoKS5sb2FkZW5kRXZlbnQpOwogCi0gICAgbV9sb2FkZXIgPSAwOworICAgIGNsZWFudXAo
KTsKIH0KIAogdm9pZCBGaWxlUmVhZGVyOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKQpA
QCAtMjQ3LDcgKzI1OSw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6ZmFpbGVkKGludCBodHRwU3RhdHVz
Q28KICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpOwogICAgIGZpcmVFdmVu
dChldmVudE5hbWVzKCkubG9hZGVuZEV2ZW50KTsKIAotICAgIG1fbG9hZGVyID0gMDsKKyAgICBj
bGVhbnVwKCk7CiB9CiAKIEV4Y2VwdGlvbkNvZGUgRmlsZVJlYWRlcjo6aHR0cFN0YXR1c0NvZGVU
b0V4Y2VwdGlvbkNvZGUoaW50IGh0dHBTdGF0dXNDb2RlKQpJbmRleDogV2ViQ29yZS9maWxlYXBp
L0ZpbGVSZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5o
CShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIK
ICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIkZpbGVFcnJvci5oIgorI2luY2x1
ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNjcmlw
dFN0cmluZy5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgpAQCAtMTMwLDYgKzEzMSw3IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0
RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQogCiAgICAgdm9pZCB0ZXJtaW5h
dGUoKTsKKyAgICB2b2lkIGNsZWFudXAoKTsKICAgICB2b2lkIHJlYWRJbnRlcm5hbChCbG9iKiwg
UmVhZFR5cGUpOwogICAgIHZvaWQgZmFpbGVkKGludCBodHRwU3RhdHVzQ29kZSk7CiAgICAgdm9p
ZCBmaXJlRXJyb3JFdmVudChpbnQgaHR0cFN0YXR1c0NvZGUpOwpAQCAtMTQxLDYgKzE0Myw3IEBA
IHByaXZhdGU6CiAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOwogCiAgICAg
UmVmUHRyPEJsb2I+IG1fYmxvYjsKKyAgICBLVVJMIG1fdXJsRm9yUmVhZGluZzsKICAgICBSZWFk
VHlwZSBtX3JlYWRUeXBlOwogICAgIFRleHRFbmNvZGluZyBtX2VuY29kaW5nOwogCkluZGV4OiBX
ZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5jcHAJKHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29yZS9m
aWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDEz
IEBACiAKICNpbmNsdWRlICJCYXNlNjQuaCIKICNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAi
QmxvYlVSTC5oIgogI2luY2x1ZGUgIkZpbGVSZWFkZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJl
cXVlc3QuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAi
VGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgorI2luY2x1
ZGUgIlRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVy
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE0OSwxMiArMTUxLDE2IEBAIGNvbnN0IFNj
cmlwdFN0cmluZyYgRmlsZVJlYWRlclN5bmM6OnJlYWQKIAogdm9pZCBGaWxlUmVhZGVyU3luYzo6
cmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBCbG9i
KiBibG9iLCBSZWFkVHlwZSByZWFkVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgLy8g
VGhlIGJsb2IgaXMgcmVhZCBieSByb3V0aW5nIHRocm91Z2ggdGhlIHJlcXVlc3QgaGFuZGxpbmcg
bGF5ZXIgZ2l2ZW4gdGhlIGJsb2IgdXJsLgotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KGJs
b2ItPnVybCgpKTsKKyAgICAvLyBUaGUgYmxvYiBpcyByZWFkIGJ5IHJvdXRpbmcgdGhyb3VnaCB0
aGUgcmVxdWVzdCBoYW5kbGluZyBsYXllciBnaXZlbiB0aGUgdGVtcG9yeSBwdWJsaWMgdXJsLgor
ICAgIEtVUkwgcmVhZGFibGVVUkwgPSBCbG9iVVJMOjpjcmVhdGVQdWJsaWNVUkwoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeTo6cmVnaXN0ZXJCbG9iVVJMKHJlYWRhYmxlVVJMLCBibG9iLT51cmwoKSk7CisKKyAgICBS
ZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChyZWFkYWJsZVVSTCk7CiAgICAgcmVxdWVzdC5zZXRIVFRQ
TWV0aG9kKCJHRVQiKTsKIAogICAgIEZpbGVSZWFkZXJTeW5jTG9hZGVyIGxvYWRlcigocmVhZFR5
cGUgPT0gUmVhZEFzQmluYXJ5U3RyaW5nKSA/ICZtX3Jlc3VsdCA6IDApOwogICAgIGxvYWRlci5z
dGFydChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCByZXF1ZXN0LCBlYyk7CisgICAgVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwocmVhZGFibGVVUkwpOwogICAgIGlmIChl
YykKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVC
bG9iUmVnaXN0cnkuY3BwCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvZmlsZWFwaS9UaHJl
YWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQAog
CiAjaW5jbHVkZSAiQmxvYkRhdGEuaCIKICNpbmNsdWRlICJCbG9iUmVnaXN0cnkuaCIKLSNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzAsNyArNjksNyBAQCBzdGF0aWMgdm9pZCBy
ZWdpc3RlckJsb2JVUkxUYXNrKHZvaWQqIGNvCiAgICAgYmxvYlJlZ2lzdHJ5KCkucmVnaXN0ZXJC
bG9iVVJMKGJsb2JSZWdpc3RyeUNvbnRleHQtPnVybCwgYmxvYlJlZ2lzdHJ5Q29udGV4dC0+Ymxv
YkRhdGEucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdp
c3RlckJsb2JVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IEtVUkwmIHVybCwgUGFz
c093blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEpCit2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6
OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiB1cmwsIFBhc3NPd25QdHI8QmxvYkRhdGE+IGJs
b2JEYXRhKQogewogICAgIGlmIChpc01haW5UaHJlYWQoKSkKICAgICAgICAgYmxvYlJlZ2lzdHJ5
KCkucmVnaXN0ZXJCbG9iVVJMKHVybCwgYmxvYkRhdGEpOwpAQCAtODYsNyArODUsNyBAQCBzdGF0
aWMgdm9pZCByZWdpc3RlckJsb2JVUkxGcm9tVGFzayh2b2lkCiAgICAgYmxvYlJlZ2lzdHJ5KCku
cmVnaXN0ZXJCbG9iVVJMKGJsb2JSZWdpc3RyeUNvbnRleHQtPnVybCwgYmxvYlJlZ2lzdHJ5Q29u
dGV4dC0+c3JjVVJMKTsKIH0KIAotdm9pZCBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3Rl
ckJsb2JVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
S1VSTCYgc3JjVVJMKQordm9pZCBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JV
UkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBzcmNVUkwpCiB7CiAgICAgaWYgKGlzTWFp
blRocmVhZCgpKQogICAgICAgICBibG9iUmVnaXN0cnkoKS5yZWdpc3RlckJsb2JVUkwodXJsLCBz
cmNVUkwpOwpAQCAtMTAyLDcgKzEwMSw3IEBAIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJCbG9iVVJM
VGFzayh2b2lkKgogICAgIGJsb2JSZWdpc3RyeSgpLnVucmVnaXN0ZXJCbG9iVVJMKGJsb2JSZWdp
c3RyeUNvbnRleHQtPnVybCk7CiB9CiAKLXZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5y
ZWdpc3RlckJsb2JVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IEtVUkwmIHVybCkK
K3ZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwoY29uc3QgS1VS
TCYgdXJsKQogewogICAgIGlmIChpc01haW5UaHJlYWQoKSkKICAgICAgICAgYmxvYlJlZ2lzdHJ5
KCkudW5yZWdpc3RlckJsb2JVUkwodXJsKTsKQEAgLTExNCwxNSArMTEzLDE1IEBAIHZvaWQgVGhy
ZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckIKIAogI2Vsc2UKIAotdm9pZCBUaHJlYWRh
YmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IEtVUkwmLCBQYXNzT3duUHRyPEJsb2JEYXRhPikKK3ZvaWQgVGhyZWFkYWJsZUJsb2JS
ZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmLCBQYXNzT3duUHRyPEJsb2JEYXRh
PikKIHsKIH0KIAotdm9pZCBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJikKK3ZvaWQg
VGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmLCBjb25z
dCBLVVJMJikKIHsKIH0KIAotdm9pZCBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVy
QmxvYlVSTChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgS1VSTCYpCit2b2lkIFRocmVh
ZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmKQogewogfQog
I2VuZGlmIC8vIEVOQUJMKEJMT0IpCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5LmgJKHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29yZS9maWxlYXBpL1RocmVhZGFi
bGVCbG9iUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTMgKzM3LDEyIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQmxvYkRhdGE7CiBjbGFzcyBLVVJMOwotY2xhc3MgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBjb25zdCBLVVJMJiwgUGFzc093blB0cjxCbG9iRGF0YT4pOwotICAgIHN0YXRpYyB2
b2lkIHJlZ2lzdGVyQmxvYlVSTChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgS1VSTCYs
IGNvbnN0IEtVUkwmIHNyY1VSTCk7Ci0gICAgc3RhdGljIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IEtVUkwmKTsKKyAgICBzdGF0aWMgdm9pZCBy
ZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYsIFBhc3NPd25QdHI8QmxvYkRhdGE+KTsKKyAgICBz
dGF0aWMgdm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmIHNyY1VS
TCk7CisgICAgc3RhdGljIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYpOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNw
cAkocmV2aXNpb24gNjcwMzIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NDQsNyArMTQ0NCw3IEBAIGJvb2wgSFRNTElucHV0RWxlbWVu
dDo6YXBwZW5kRm9ybURhdGEoRm8KICAgICAgICAgLy8gSWYgbm8gZmlsZW5hbWUgYXQgYWxsIGlz
IGVudGVyZWQsIHJldHVybiBzdWNjZXNzZnVsIGJ1dCBlbXB0eS4KICAgICAgICAgLy8gTnVsbCB3
b3VsZCBiZSBtb3JlIGxvZ2ljYWwsIGJ1dCBOZXRzY2FwZSBwb3N0cyBhbiBlbXB0eSBmaWxlLiBB
cmdoLgogICAgICAgICBpZiAoIW51bUZpbGVzKSB7Ci0gICAgICAgICAgICBlbmNvZGluZy5hcHBl
bmRCbG9iKG5hbWUoKSwgRmlsZTo6Y3JlYXRlKGRvY3VtZW50KCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSwgIiIpKTsKKyAgICAgICAgICAgIGVuY29kaW5nLmFwcGVuZEJsb2IobmFtZSgpLCBG
aWxlOjpjcmVhdGUoIiIpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAK
QEAgLTIwODcsMTUgKzIwODcsMTUgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRGaWxlTGlz
dEZyb21SZQogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAg
ICAgICAgLy8gTm9ybWFsaXplIGJhY2tzbGFzaGVzIHRvIHNsYXNoZXMgYmVmb3JlIGV4cG9zaW5n
IHRoZSByZWxhdGl2ZSBwYXRoIHRvIHNjcmlwdC4KICAgICAgICAgICAgIFN0cmluZyByZWxhdGl2
ZVBhdGggPSBwYXRoc1tpXS5zdWJzdHJpbmcoMSArIHJvb3RQYXRoLmxlbmd0aCgpKS5yZXBsYWNl
KCdcXCcsJy8nKTsKLSAgICAgICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUo
ZG9jdW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCByZWxhdGl2ZVBhdGgsIHBhdGhz
W2ldKSk7CisgICAgICAgICAgICBtX2ZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHJlbGF0
aXZlUGF0aCwgcGF0aHNbaV0pKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICAgICAgbV9maWxlTGlzdC0+YXBw
ZW5kKEZpbGU6OmNyZWF0ZShkb2N1bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHBh
dGhzW2ldKSk7CisgICAgICAgICAgICBtX2ZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHBh
dGhzW2ldKSk7CiAgICAgfQogI2Vsc2UKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkr
KykKLSAgICAgICAgbV9maWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShkb2N1bWVudCgpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHBhdGhzW2ldKSk7CisgICAgICAgIG1fZmlsZUxpc3Qt
PmFwcGVuZChGaWxlOjpjcmVhdGUocGF0aHNbaV0pKTsKICNlbmRpZgogCiAgICAgc2V0Rm9ybUNv
bnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcih0cnVlKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9TZWN1
cml0eU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2lu
LmNwcAkocmV2aXNpb24gNjcwMzIpCisrKyBXZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4gU2VjdXJpdHlPcmlnaQogICAgIGlmICghdXJsLmlzVmFsaWQoKSkKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTZWN1cml0eU9yaWdpbihLVVJMKCksIHNhbmRib3hGbGFncykpOwog
I2lmIEVOQUJMRShCTE9CKQotICAgIGlmICh1cmwucHJvdG9jb2xJcygiYmxvYiIpKQorICAgIGlm
ICh1cmwucHJvdG9jb2xJcyhCbG9iVVJMOjpibG9iUHJvdG9jb2woKSkpCiAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU2VjdXJpdHlPcmlnaW4oQmxvYlVSTDo6Z2V0T3JpZ2luKHVybCksIHNh
bmRib3hGbGFncykpOwogI2VuZGlmCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZWN1cml0eU9y
aWdpbih1cmwsIHNhbmRib3hGbGFncykpOwpAQCAtMjQwLDcgKzI0MCw3IEBAIGJvb2wgU2VjdXJp
dHlPcmlnaW46OmNhblJlcXVlc3QoY29uc3QgS1UKICAgICBib29sIGRvVW5pcXVlT3JpZ2luQ2hl
Y2sgPSB0cnVlOwogI2lmIEVOQUJMRShCTE9CKQogICAgIC8vIEZvciBibG9iIHNjaGVtZSwgd2Ug
d2FudCB0byBpZ25vcmUgdGhpcyBjaGVjay4KLSAgICBkb1VuaXF1ZU9yaWdpbkNoZWNrID0gIXVy
bC5wcm90b2NvbElzKCJibG9iIik7CisgICAgZG9VbmlxdWVPcmlnaW5DaGVjayA9ICF1cmwucHJv
dG9jb2xJcyhCbG9iVVJMOjpibG9iUHJvdG9jb2woKSk7CiAjZW5kaWYKICAgICBpZiAoZG9Vbmlx
dWVPcmlnaW5DaGVjayAmJiB0YXJnZXRPcmlnaW4tPmlzVW5pcXVlKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTI4Nyw3ICsyODcsNyBAQCBib29sIFNlY3VyaXR5T3JpZ2luOjppc0FjY2Vz
c1doaXRlTGlzdGVkCiBib29sIFNlY3VyaXR5T3JpZ2luOjpjYW5EaXNwbGF5KGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgRG9jdW1lbnQqIGRvY3VtZW50KQogewogI2lm
IEVOQUJMRShCTE9CKQotICAgIGlmICh1cmwucHJvdG9jb2xJcygiYmxvYiIpICYmIGRvY3VtZW50
KSB7CisgICAgaWYgKHVybC5wcm90b2NvbElzKEJsb2JVUkw6OmJsb2JQcm90b2NvbCgpKSAmJiBk
b2N1bWVudCkgewogICAgICAgICBTZWN1cml0eU9yaWdpbiogZG9jdW1lbnRPcmlnaW4gPSBkb2N1
bWVudC0+c2VjdXJpdHlPcmlnaW4oKTsKICAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiB0
YXJnZXRPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHVybCk7CiAgICAgICAgIHJldHVy
biBkb2N1bWVudE9yaWdpbi0+aXNTYW1lU2NoZW1lSG9zdFBvcnQodGFyZ2V0T3JpZ2luLmdldCgp
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21p
dW0uY3BwCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xp
cGJvYXJkQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsMTAgKzM2NCw5IEBAIFBh
c3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBib2FyZENocm9taXVtOjoKICAgICBpZiAoIW1fZGF0YU9i
amVjdCB8fCBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBGaWxlTGlzdDo6Y3JlYXRlKCk7CiAKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOwogICAgIFJlZlB0cjxGaWxlTGlzdD4gZmlsZUxpc3QgPSBGaWxlTGlzdDo6Y3Jl
YXRlKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2RhdGFPYmplY3QtPmZpbGVuYW1l
cy5zaXplKCk7ICsraSkKLSAgICAgICAgZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgbV9kYXRhT2JqZWN0LT5maWxlbmFtZXMuYXQoaSkpKTsKKyAg
ICAgICAgZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUobV9kYXRhT2JqZWN0LT5maWxlbmFt
ZXMuYXQoaSkpKTsKIAogICAgIHJldHVybiBmaWxlTGlzdC5yZWxlYXNlKCk7CiB9CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAJKHJldmlzaW9uIDY3MDMyKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY1
LDkgKzI2NSw4IEBAIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBib2FyZEd0azo6ZmlsZXMKICAg
ICBSZWZQdHI8RmlsZUxpc3Q+IGZpbGVMaXN0ID0gRmlsZUxpc3Q6OmNyZWF0ZSgpOwogICAgIFZl
Y3RvcjxTdHJpbmc+IGZpbGVWZWN0b3IobV9kYXRhT2JqZWN0LT5maWxlcygpKTsKIAotICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmaWxlVmVjdG9yLnNpemUoKTsgaSsrKQotICAgICAgICBmaWxlTGlzdC0+YXBwZW5k
KEZpbGU6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBmaWxlVmVjdG9yW2ldKSk7Cisg
ICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKGZpbGVWZWN0b3JbaV0pKTsKIAog
ICAgIHJldHVybiBmaWxlTGlzdC5yZWxlYXNlKCk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L21hYy9DbGlwYm9hcmRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
Q2xpcGJvYXJkTWFjLm1tCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFj
L0NsaXBib2FyZE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEzLDEyICszMTMsMTEgQEAgUGFz
c1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJvYXJkTWFjOjpmaWxlcwogICAgIE5TQXJyYXkgKmFic29s
dXRlVVJMcyA9IGFic29sdXRlVVJMc0Zyb21QYXN0ZWJvYXJkRmlsZW5hbWVzKG1fcGFzdGVib2Fy
ZC5nZXQoKSk7CiAgICAgTlNVSW50ZWdlciBjb3VudCA9IFthYnNvbHV0ZVVSTHMgY291bnRdOwog
Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IG1f
ZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBSZWZQdHI8
RmlsZUxpc3Q+IGZpbGVMaXN0ID0gRmlsZUxpc3Q6OmNyZWF0ZSgpOwogICAgIGZvciAoTlNVSW50
ZWdlciB4ID0gMDsgeCA8IGNvdW50OyB4KyspIHsKICAgICAgICAgTlNVUkwgKmFic29sdXRlVVJM
ID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W2Fic29sdXRlVVJMcyBvYmplY3RBdEluZGV4OnhdXTsK
ICAgICAgICAgQVNTRVJUKFthYnNvbHV0ZVVSTCBpc0ZpbGVVUkxdKTsKLSAgICAgICAgZmlsZUxp
c3QtPmFwcGVuZChGaWxlOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgW2Fic29sdXRl
VVJMIHBhdGhdKSk7CisgICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKFthYnNv
bHV0ZVVSTCBwYXRoXSkpOwogICAgIH0KICAgICByZXR1cm4gZmlsZUxpc3QucmVsZWFzZSgpOyAv
LyBXZSB3aWxsIGFsd2F5cyByZXR1cm4gYSBGaWxlTGlzdCwgc29tZXRpbWVzIGVtcHR5CiB9Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAJKHJldmlzaW9uIDY3MDMyKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjA0LDEzICs2MDQsMTIgQEAgUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJvYXJkV2luOjpm
aWxlcwogICAgIGlmICghaGRyb3ApCiAgICAgICAgIHJldHVybiBmaWxlcy5yZWxlYXNlKCk7CiAK
LSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIFdDSEFSIGZp
bGVuYW1lW01BWF9QQVRIXTsKICAgICBVSU5UIGZpbGVDb3VudCA9IERyYWdRdWVyeUZpbGVXKGhk
cm9wLCAweEZGRkZGRkZGLCAwLCAwKTsKICAgICBmb3IgKFVJTlQgaSA9IDA7IGkgPCBmaWxlQ291
bnQ7IGkrKykgewogICAgICAgICBpZiAoIURyYWdRdWVyeUZpbGVXKGhkcm9wLCBpLCBmaWxlbmFt
ZSwgQVJSQVlTSVpFKGZpbGVuYW1lKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ZmlsZXMtPmFwcGVuZChGaWxlOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgcmVpbnRl
cnByZXRfY2FzdDxVQ2hhcio+KGZpbGVuYW1lKSkpOworICAgICAgICBmaWxlcy0+YXBwZW5kKEZp
bGU6OmNyZWF0ZShyZWludGVycHJldF9jYXN0PFVDaGFyKj4oZmlsZW5hbWUpKSk7CiAgICAgfQog
CiAgICAgR2xvYmFsVW5sb2NrKG1lZGl1bS5oR2xvYmFsKTsK
</data>
<flag name="review"
          id="56149"
          type_id="1"
          status="+"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67079</attachid>
            <date>2010-09-09 12:26:14 -0700</date>
            <delta_ts>2010-09-10 09:20:23 -0700</delta_ts>
            <desc>decouple</desc>
            <filename>decouple5.txt</filename>
            <type>text/plain</type>
            <size>40060</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODQgQEAKKzIwMTAtMDktMDggIE1pY2hhZWwgTm9yZG1hbiAgPG1pY2hhZWxuQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRGVjb3VwbGUgQmxvYiBmcm9tIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTQxMAorCisgICAgICAgIC0g
UmVtb3ZlZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHBvaW50ZXJzIGZyb20gQmxvYiBhbmQgRmls
ZSBjb25zdHJ1Y3RvcnMuCisgICAgICAgIC0gUmVtb3ZlZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
J3MgY29sbGVjdGlvbiBvZiBCbG9icyBpbnN0YW5jZSBpbiB0aGF0IGNvbnRleHQuCisgICAgICAg
IC0gUmVmYWN0b3JlZCBCbG9iVVJMIHRvIG1ha2UgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuICdwdWJs
aWMnIGJsb2IgdXJscyBhbmQgJ2ludGVybmFsJworICAgICAgICAgIHVybHMgdGhhdCBhcmUgdXNl
ZCBzb2xlbHkgYXMgaWRlbnRpZmllcnMuIFRoZSBmb3JtZXIgcmVxdWlyZXMgYSBTZWN1cml0eU9y
aWdpbiB0bworICAgICAgICAgIHRvIG1hbnVmYWN0dXJlLCB0aGUgbGF0dGVyIGRvZXMgbm90Lgor
ICAgICAgICAtIEFkZGVkIGEgY29uc3RhbnQgYW5kIGFjY2Vzc29yIGZvciB0aGUgYmxvYiBwcm90
b2NvbCBzY2hlbWUgb24gdGhlIEJsb2JVUkwgY2xhc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
IGFyZSBhZGRlZCBzaW5jZSB0aGlzIGlzIGEgY2xlYW51cC4KKworICAgICAgICAqIGJpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURl
c2VyaWFsaXplcjo6cmVhZEZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6
ZXI6OnJlYWRUZXJtaW5hbCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlppZ1phZzo6UmVhZGVyOjpyZWFkQmxvYik6
CisgICAgICAgIChXZWJDb3JlOjpaaWdaYWc6OlJlYWRlcjo6cmVhZEZpbGUpOgorICAgICAgICAo
V2ViQ29yZTo6WmlnWmFnOjpSZWFkZXI6OnJlYWRGaWxlTGlzdCk6CisgICAgICAgICogZG9tL1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6flNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y3JlYXRlUHVibGljQmxvYlVSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZXZva2VQdWJsaWNCbG9iVVJMKToKKyAg
ICAgICAgKiBkb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oOgorICAgICAgICAqIGZpbGVhcGkv
QmxvYi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iOjpCbG9iKToKKyAgICAgICAgKFdlYkNv
cmU6OkJsb2I6On5CbG9iKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnNsaWNlKToKKyAgICAg
ICAgKiBmaWxlYXBpL0Jsb2IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCbG9iOjp1cmwpOgorICAgICAgICAqIGZpbGVhcGkvQmxvYi5pZGw6
CisgICAgICAgICogZmlsZWFwaS9CbG9iQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
bG9iQnVpbGRlcjo6Z2V0QmxvYik6CisgICAgICAgICogZmlsZWFwaS9CbG9iQnVpbGRlci5oOgor
ICAgICAgICAqIGZpbGVhcGkvQmxvYkJ1aWxkZXIuaWRsOgorICAgICAgICAqIGZpbGVhcGkvQmxv
YlVSTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCbG9iVVJMOjpjcmVhdGVQdWJsaWNVUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6QmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwpOgorICAgICAgICAo
V2ViQ29yZTo6QmxvYlVSTDo6Z2V0T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JVUkw6
OmdldElkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlVSTDo6Y3JlYXRlQmxvYlVS
TCk6CisgICAgICAgICogZmlsZWFwaS9CbG9iVVJMLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9i
VVJMOjpibG9iUHJvdG9jb2wpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYlVSTDo6QmxvYlVSTCk6
CisgICAgICAgICogZmlsZWFwaS9GaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OkZp
bGUpOgorICAgICAgICAqIGZpbGVhcGkvRmlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6
Y3JlYXRlKToKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXIuY3BwOiBSZWdpc3RlciBhIHB1
YmxpYyB1cmwgdG8gcGVyZm9ybSB0aGUgcmVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFk
ZXI6OmNsZWFudXApOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6c3RhcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWxlUmVhZGVyOjpmYWlsZWQpOgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRl
ci5oOiBBZGRlZCBtX3VybEZvclJlYWRpbmcgZGF0YSBtZW1iZXIuCisgICAgICAgICogZmlsZWFw
aS9GaWxlUmVhZGVyU3luYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyU3luYzo6
cmVhZCk6IFJlZ2lzdGVyIGEgcHVibGljIHVybCB0byBwZXJmb3JtIHRoZSByZWFkLgorICAgICAg
ICAqIGZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6VGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwpOgorICAgICAg
ICAqIGZpbGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oOgorICAgICAgICAqIGh0bWwvSFRN
TElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojph
cHBlbmRGb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRG
aWxlTGlzdEZyb21SZW5kZXJlcik6CisgICAgICAgICogcGFnZS9TZWN1cml0eU9yaWdpbi5jcHA6
IFVzZSBCbG9iVVJMLmJsb2JQcm90b2NvbCgpLgorICAgICAgICAoV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW46OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6Y2FuUmVx
dWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6Y2FuRGlzcGxheSk6Cisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OmZpbGVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvQ2xpcGJvYXJkR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEd0azo6
ZmlsZXMpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpDbGlwYm9hcmRNYWM6OmZpbGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4v
Q2xpcGJvYXJkV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZFdpbjo6ZmlsZXMp
OgorCiAyMDEwLTA5LTA4ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTc0LDEwICs5NzQsOCBAQCBwcml2YXRlOgogICAgICAgICBJZGVudGlmaWVyIHR5cGU7CiAgICAg
ICAgIGlmICghcmVhZFN0cmluZ0RhdGEodHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgaWYgKG1faXNET01HbG9iYWxPYmplY3QpIHsKLSAgICAgICAgICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBzdGF0aWNfY2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KG1fZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwotICAgICAgICAgICAgZmlsZSA9IEZpbGU6OmNyZWF0ZShzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBTdHJpbmcocGF0aC51c3RyaW5nKCkuaW1wbCgpKSwgS1VSTChLVVJMKCks
IFN0cmluZyh1cmwudXN0cmluZygpLmltcGwoKSkpLCBTdHJpbmcodHlwZS51c3RyaW5nKCkuaW1w
bCgpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG1faXNET01HbG9iYWxPYmplY3QpCisgICAg
ICAgICAgICBmaWxlID0gRmlsZTo6Y3JlYXRlKFN0cmluZyhwYXRoLnVzdHJpbmcoKS5pbXBsKCkp
LCBLVVJMKEtVUkwoKSwgU3RyaW5nKHVybC51c3RyaW5nKCkuaW1wbCgpKSksIFN0cmluZyh0eXBl
LnVzdHJpbmcoKS5pbXBsKCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0x
MDc0LDkgKzEwNzIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CiAgICAgICAgICAgICBpZiAoIW1faXNET01HbG9iYWxPYmplY3QpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOwotICAgICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
bV9leGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
Ci0gICAgICAgICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgICAgICAg
ICByZXR1cm4gdG9KUyhtX2V4ZWMsIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9n
bG9iYWxPYmplY3QpLCBCbG9iOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgS1VSTChL
VVJMKCksIHVybC51c3RyaW5nKCkuaW1wbCgpKSwgU3RyaW5nKHR5cGUudXN0cmluZygpLmltcGwo
KSksIHNpemUpKTsKKyAgICAgICAgICAgIHJldHVybiB0b0pTKG1fZXhlYywgc3RhdGljX2Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihtX2dsb2JhbE9iamVjdCksIEJsb2I6OmNyZWF0ZShLVVJMKEtV
UkwoKSwgdXJsLnVzdHJpbmcoKS5pbXBsKCkpLCBTdHJpbmcodHlwZS51c3RyaW5nKCkuaW1wbCgp
KSwgc2l6ZSkpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgU3RyaW5nVGFnOiB7CiAgICAgICAg
ICAgICBJZGVudGlmaWVyIGlkZW50OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gNjcwMzIpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3OSw3
ICs4NzksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBp
ZiAoIWRvUmVhZFVpbnQ2NCgmc2l6ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIFBhc3NSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0ZShnZXRTY3JpcHRFeGVjdXRp
b25Db250ZXh0KCksIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCB0eXBlLCBzaXplKTsKKyAg
ICAgICAgUGFzc1JlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6Y3JlYXRlKEtVUkwoUGFyc2VkVVJM
U3RyaW5nLCB1cmwpLCB0eXBlLCBzaXplKTsKICAgICAgICAgKnZhbHVlID0gdG9WOChibG9iKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtODk1LDcgKzg5NSw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghcmVhZFdlYkNvcmVTdHJp
bmcoJnR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBQYXNzUmVmUHRy
PEZpbGU+IGZpbGUgPSBGaWxlOjpjcmVhdGUoZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBw
YXRoLCBLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwgdHlwZSk7CisgICAgICAgIFBhc3NSZWZQ
dHI8RmlsZT4gZmlsZSA9IEZpbGU6OmNyZWF0ZShwYXRoLCBLVVJMKFBhcnNlZFVSTFN0cmluZywg
dXJsKSwgdHlwZSk7CiAgICAgICAgICp2YWx1ZSA9IHRvVjgoZmlsZSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KQEAgLTkxNiw3ICs5MTYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGlmICghcmVhZFdlYkNvcmVTdHJpbmcoJnR5
cGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGZpbGVMaXN0
LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgcGF0aCwg
S1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybFN0cmluZyksIHR5cGUpKTsKKyAgICAgICAgICAgIGZp
bGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHBhdGgsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1
cmxTdHJpbmcpLCB0eXBlKSk7CiAgICAgICAgIH0KICAgICAgICAgKnZhbHVlID0gdG9WOChmaWxl
TGlzdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogV2ViQ29yZS9kb20vU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5jcHAJKHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29yZS9kb20vU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDEzICs5NCwxMCBAQCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0Ojp+U2NyaXB0RXhlY3V0aW9uCiAgICAgfQogI2VuZGlmCiAKLSAg
ICBIYXNoU2V0PEJsb2IqPjo6aXRlcmF0b3IgYmxvYnNFbmQgPSBtX2Jsb2JzLmVuZCgpOwotICAg
IGZvciAoSGFzaFNldDxCbG9iKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2Jsb2JzLmJlZ2luKCk7IGl0
ZXIgIT0gYmxvYnNFbmQ7ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+Y29udGV4dERlc3Ryb3ll
ZCgpOwogI2lmIEVOQUJMRShCTE9CKQogICAgIEhhc2hTZXQ8U3RyaW5nPjo6aXRlcmF0b3IgcHVi
bGljQmxvYlVSTHNFbmQgPSBtX3B1YmxpY0Jsb2JVUkxzLmVuZCgpOwogICAgIGZvciAoSGFzaFNl
dDxTdHJpbmc+OjppdGVyYXRvciBpdGVyID0gbV9wdWJsaWNCbG9iVVJMcy5iZWdpbigpOyBpdGVy
ICE9IHB1YmxpY0Jsb2JVUkxzRW5kOyArK2l0ZXIpCi0gICAgICAgIFRocmVhZGFibGVCbG9iUmVn
aXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKHRoaXMsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXRl
cikpOworICAgICAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVSTChL
VVJMKFBhcnNlZFVSTFN0cmluZywgKml0ZXIpKTsKICNlbmRpZgogfQogCkBAIC0xNzUsMTggKzE3
Miw2IEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZGVzdHJveWVkTWUKICAgICBtX21l
c3NhZ2VQb3J0cy5yZW1vdmUocG9ydCk7CiB9CiAKLXZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6YWRkQmxvYihCbG9iKiBibG9iKQotewotICAgIEFTU0VSVChibG9iKTsKLSAgICBtX2Jsb2Jz
LmFkZChibG9iKTsKLX0KLQotdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpyZW1vdmVCbG9i
KEJsb2IqIGJsb2IpCi17Ci0gICAgQVNTRVJUKGJsb2IpOwotICAgIG1fYmxvYnMucmVtb3ZlKGJs
b2IpOwotfQotCiBib29sIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmNhblN1c3BlbmRBY3RpdmVE
T01PYmplY3RzKCkKIHsKICAgICAvLyBObyBwcm90ZWN0aW9uIGFnYWluc3QgbV9hY3RpdmVET01P
YmplY3RzIGNoYW5naW5nIGR1cmluZyBpdGVyYXRpb246IGNhblN1c3BlbmQoKSBzaG91bGRuJ3Qg
ZXhlY3V0ZSBhcmJpdHJhcnkgSlMuCkBAIC0yNzcsOCArMjYyLDggQEAgRE9NVGltZXIqIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OmZpbmRUaQogI2lmIEVOQUJMRShCTE9CKQogS1VSTCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpjcmVhdGVQdWJsaWNCbG9iVVJMKEJsb2IqIGJsb2IpCiB7Ci0gICAg
S1VSTCBwdWJsaWNVUkwgPSBCbG9iVVJMOjpjcmVhdGVVUkwodGhpcyk7Ci0gICAgVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKHRoaXMsIHB1YmxpY1VSTCwgYmxvYi0+dXJs
KCkpOworICAgIEtVUkwgcHVibGljVVJMID0gQmxvYlVSTDo6Y3JlYXRlUHVibGljVVJMKHNlY3Vy
aXR5T3JpZ2luKCkpOworICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVS
TChwdWJsaWNVUkwsIGJsb2ItPnVybCgpKTsKICAgICBtX3B1YmxpY0Jsb2JVUkxzLmFkZChwdWJs
aWNVUkwuc3RyaW5nKCkpOwogICAgIHJldHVybiBwdWJsaWNVUkw7CiB9CkBAIC0yODYsNyArMjcx
LDcgQEAgS1VSTCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpjcmVhdGVQdWJsaQogdm9pZCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpyZXZva2VQdWJsaWNCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCkK
IHsKICAgICBpZiAobV9wdWJsaWNCbG9iVVJMcy5jb250YWlucyh1cmwuc3RyaW5nKCkpKSB7Ci0g
ICAgICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKHRoaXMsIHVy
bCk7CisgICAgICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKHVy
bCk7CiAgICAgICAgIG1fcHVibGljQmxvYlVSTHMucmVtb3ZlKHVybC5zdHJpbmcoKSk7CiAgICAg
fQogfQpJbmRleDogV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAkocmV2aXNpb24gNjcw
MzIpCisrKyBXZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMSw4ICsxMzEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQg
cmVtb3ZlVGltZW91dChpbnQgdGltZW91dElkKTsKICAgICAgICAgRE9NVGltZXIqIGZpbmRUaW1l
b3V0KGludCB0aW1lb3V0SWQpOwogCi0gICAgICAgIHZvaWQgYWRkQmxvYihCbG9iKik7Ci0gICAg
ICAgIHZvaWQgcmVtb3ZlQmxvYihCbG9iKik7CiAjaWYgRU5BQkxFKEJMT0IpCiAgICAgICAgIEtV
UkwgY3JlYXRlUHVibGljQmxvYlVSTChCbG9iKik7CiAgICAgICAgIHZvaWQgcmV2b2tlUHVibGlj
QmxvYlVSTChjb25zdCBLVVJMJik7CkBAIC0xNjcsNyArMTY1LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIEhhc2hNYXA8aW50LCBET01UaW1lcio+IG1fdGltZW91dHM7CiAKLSAg
ICAgICAgSGFzaFNldDxCbG9iKj4gbV9ibG9iczsKICNpZiBFTkFCTEUoQkxPQikKICAgICAgICAg
SGFzaFNldDxTdHJpbmc+IG1fcHVibGljQmxvYlVSTHM7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
ZmlsZWFwaS9CbG9iLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAJ
KHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw1NyArMzMsMzcgQEAKIAogI2luY2x1ZGUgIkJsb2JVUkwuaCIKICNpbmNsdWRl
ICJGaWxlLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IlRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1CbG9i
OjpCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFBh
c3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhLCBsb25nIGxvbmcgc2l6ZSkKLSAgICA6IG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQotICAgICwgbV90eXBl
KGJsb2JEYXRhLT5jb250ZW50VHlwZSgpKQorQmxvYjo6QmxvYihQYXNzT3duUHRyPEJsb2JEYXRh
PiBibG9iRGF0YSwgbG9uZyBsb25nIHNpemUpCisgICAgOiBtX3R5cGUoYmxvYkRhdGEtPmNvbnRl
bnRUeXBlKCkpCiAgICAgLCBtX3NpemUoc2l6ZSkKIHsKICAgICBBU1NFUlQoYmxvYkRhdGEpOwog
Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5hZGRCbG9iKHRoaXMpOwotCiAgICAgLy8g
Q3JlYXRlIGEgbmV3IGludGVybmFsIFVSTCBhbmQgcmVnaXN0ZXIgaXQgd2l0aCB0aGUgcHJvdmlk
ZWQgYmxvYiBkYXRhLgotICAgIG1fdXJsID0gQmxvYlVSTDo6Y3JlYXRlVVJMKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQpOwotICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVS
TChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBtX3VybCwgYmxvYkRhdGEpOworICAgIG1faW50ZXJu
YWxVUkwgPSBCbG9iVVJMOjpjcmVhdGVJbnRlcm5hbFVSTCgpOworICAgIFRocmVhZGFibGVCbG9i
UmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChtX2ludGVybmFsVVJMLCBibG9iRGF0YSk7CiB9CiAK
LUJsb2I6OkJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgY29uc3QgS1VSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBzaXpl
KQotICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQp
Ci0gICAgLCBtX3R5cGUodHlwZSkKK0Jsb2I6OkJsb2IoY29uc3QgS1VSTCYgc3JjVVJMLCBjb25z
dCBTdHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBzaXplKQorICAgIDogbV90eXBlKHR5cGUpCiAgICAg
LCBtX3NpemUoc2l6ZSkKIHsKLSAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQmxvYih0
aGlzKTsKLQogICAgIC8vIENyZWF0ZSBhIG5ldyBpbnRlcm5hbCBVUkwgYW5kIHJlZ2lzdGVyIGl0
IHdpdGggdGhlIHNhbWUgYmxvYiBkYXRhIGFzIHRoZSBzb3VyY2UgVVJMLgotICAgIG1fdXJsID0g
QmxvYlVSTDo6Y3JlYXRlVVJMKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwotICAgIFRocmVhZGFi
bGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBt
X3VybCwgc3JjVVJMKTsKKyAgICBtX2ludGVybmFsVVJMID0gQmxvYlVSTDo6Y3JlYXRlSW50ZXJu
YWxVUkwoKTsKKyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwobV9p
bnRlcm5hbFVSTCwgc3JjVVJMKTsKIH0KIAogQmxvYjo6fkJsb2IoKQogewotICAgIC8vIFRoZSBp
bnRlcm5hbCBVUkwgaXMgb25seSB1c2VkIHRvIHJlZmVyIHRvIHRoZSBCbG9iIG9iamVjdC4gU28g
d2UgbmVlZCB0byB1bnJlZ2lzdGVyIHRoZSBVUkwgd2hlbiB0aGUgb2JqZWN0IGlzIEdDLWVkLgot
ICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpIHsKLSAgICAgICAgbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5yZW1vdmVCbG9iKHRoaXMpOwotICAgICAgICBUaHJlYWRhYmxlQmxvYlJl
Z2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVSTChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1fdXJs
KTsKLSAgICB9Ci19Ci0KLXZvaWQgQmxvYjo6Y29udGV4dERlc3Ryb3llZCgpCi17Ci0gICAgQVNT
RVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0KLSAgICAvLyBVbnJlZ2lzdGVyIHRoZSBp
bnRlcm5hbCBVUkwgYmVmb3JlIHRoZSBjb250ZXh0IGlzIGdvbmUuCi0gICAgVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBt
X3VybCk7Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gMDsKKyAgICBUaHJlYWRhYmxl
QmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVSTChtX2ludGVybmFsVVJMKTsKIH0KIAogI2lm
IEVOQUJMRShCTE9CKQotUGFzc1JlZlB0cjxCbG9iPiBCbG9iOjpzbGljZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBsb25nIGxvbmcgc3RhcnQsIGxvbmcg
bG9uZyBsZW5ndGgsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpIGNvbnN0CitQYXNzUmVmUHRy
PEJsb2I+IEJsb2I6OnNsaWNlKGxvbmcgbG9uZyBzdGFydCwgbG9uZyBsb25nIGxlbmd0aCwgY29u
c3QgU3RyaW5nJiBjb250ZW50VHlwZSkgY29uc3QKIHsKICAgICAvLyBXaGVuIHdlIHNsaWNlIGEg
ZmlsZSBmb3IgdGhlIGZpcnN0IHRpbWUsIHdlIG9idGFpbiBhIHNuYXBzaG90IG9mIHRoZSBmaWxl
IGJ5IGNhcHR1cmluZyBpdHMgY3VycmVudCBzaXplIGFuZCBtb2RpZmljYXRpb24gdGltZS4KICAg
ICAvLyBUaGUgbW9kaWZpY2F0aW9uIHRpbWUgd2lsbCBiZSB1c2VkIHRvIHZlcmlmeSBpZiB0aGUg
ZmlsZSBoYXMgYmVlbiBjaGFuZ2VkIG9yIG5vdCwgd2hlbiB0aGUgdW5kZXJseWluZyBkYXRhIGFy
ZSBhY2Nlc3NlZC4KQEAgLTExNCw5ICs5NCw5IEBAIFBhc3NSZWZQdHI8QmxvYj4gQmxvYjo6c2xp
Y2UoU2NyaXB0RXhlY3UKICAgICBpZiAoaXNGaWxlKCkpCiAgICAgICAgIGJsb2JEYXRhLT5hcHBl
bmRGaWxlKHN0YXRpY19jYXN0PGNvbnN0IEZpbGUqPih0aGlzKS0+cGF0aCgpLCBzdGFydCwgbGVu
Z3RoLCBtb2RpZmljYXRpb25UaW1lKTsKICAgICBlbHNlCi0gICAgICAgIGJsb2JEYXRhLT5hcHBl
bmRCbG9iKG1fdXJsLCBzdGFydCwgbGVuZ3RoKTsKKyAgICAgICAgYmxvYkRhdGEtPmFwcGVuZEJs
b2IobV9pbnRlcm5hbFVSTCwgc3RhcnQsIGxlbmd0aCk7CiAKLSAgICByZXR1cm4gQmxvYjo6Y3Jl
YXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGJsb2JEYXRhLnJlbGVhc2UoKSwgbGVuZ3RoKTsK
KyAgICByZXR1cm4gQmxvYjo6Y3JlYXRlKGJsb2JEYXRhLnJlbGVhc2UoKSwgbGVuZ3RoKTsKIH0K
ICNlbmRpZgogCkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZmlsZWFwaS9CbG9iLmgJKHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29yZS9maWxlYXBp
L0Jsb2IuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNDYgKzQxLDQyIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLQogY2xhc3MgQmxvYiA6
IHB1YmxpYyBSZWZDb3VudGVkPEJsb2I+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxCbG9iPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCwgUGFzc093blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEsIGxvbmcgbG9uZyBzaXplKQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShQYXNzT3duUHRyPEJsb2JEYXRhPiBibG9i
RGF0YSwgbG9uZyBsb25nIHNpemUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEJsb2Ioc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgYmxvYkRhdGEsIHNpemUpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBCbG9iKGJsb2JEYXRhLCBzaXplKSk7CiAgICAgfQogCiAgICAg
Ly8gRm9yIGRlc2VyaWFsaXphdGlvbi4KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxCbG9iPiBjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3Qg
S1VSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBzaXplKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEJsb2I+IGNyZWF0ZShjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0
cmluZyYgdHlwZSwgbG9uZyBsb25nIHNpemUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEJsb2Ioc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgc3JjVVJMLCB0eXBlLCBzaXplKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQmxvYihzcmNVUkwsIHR5cGUsIHNpemUpKTsK
ICAgICB9CiAKICAgICB2aXJ0dWFsIH5CbG9iKCk7CiAKLSAgICB2b2lkIGNvbnRleHREZXN0cm95
ZWQoKTsKLQotICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9Cisg
ICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbFVSTDsgfQogICAg
IGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogCiAgICAgdmly
dHVhbCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4obV9zaXplKTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAjaWYgRU5BQkxFKEJMT0IpCi0gICAgUGFzc1Jl
ZlB0cjxCbG9iPiBzbGljZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgbG9uZyBsb25nIHN0YXJ0
LCBsb25nIGxvbmcgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlID0gU3RyaW5nKCkp
IGNvbnN0OworICAgIFBhc3NSZWZQdHI8QmxvYj4gc2xpY2UobG9uZyBsb25nIHN0YXJ0LCBsb25n
IGxvbmcgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlID0gU3RyaW5nKCkpIGNvbnN0
OwogI2VuZGlmCiAKIHByb3RlY3RlZDoKLSAgICBCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzT3duUHRyPEJsb2JEYXRhPiwgbG9uZyBsb25nIHNpemUpOworICAgIEJsb2IoUGFzc093
blB0cjxCbG9iRGF0YT4sIGxvbmcgbG9uZyBzaXplKTsKIAogICAgIC8vIEZvciBkZXNlcmlhbGl6
YXRpb24uCi0gICAgQmxvYihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgS1VSTCYgc3Jj
VVJMLCBjb25zdCBTdHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBzaXplKTsKKyAgICBCbG9iKGNvbnN0
IEtVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlLCBsb25nIGxvbmcgc2l6ZSk7CiAKLSAg
ICAvLyBUaGlzIGlzIGFuIGludGVybmFsIFVSTCByZWZlcnJpbmcgdG8gdGhlIGJsb2IgZGF0YSBh
c3NvY2lhdGVkIHdpdGggdGhpcyBvYmplY3QuCi0gICAgLy8gSXQgaXMgb25seSB1c2VkIGJ5IEZp
bGVSZWFkZXIgdG8gcmVhZCB0aGUgYmxvYiBkYXRhIHZpYSBsb2FkaW5nIGZyb20gdGhlIGJsb2Ig
VVJMIHJlc291cmNlLgotICAgIEtVUkwgbV91cmw7CisgICAgLy8gVGhpcyBpcyBhbiBpbnRlcm5h
bCBVUkwgcmVmZXJyaW5nIHRvIHRoZSBibG9iIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb2Jq
ZWN0LiBJdCBzZXJ2ZXMKKyAgICAvLyBhcyBhbiBpZGVudGlmaWVyIGZvciB0aGlzIGJsb2IuIFRo
ZSBpbnRlcm5hbCBVUkwgaXMgbmV2ZXIgdXNlZCB0byBzb3VyY2UgdGhlIGJsb2IncyBjb250ZW50
CisgICAgLy8gaW50byBhbiBIVE1MIG9yIGZvciBGaWxlUmVhZCdpbmcsIHB1YmxpYyBibG9iIFVS
THMgbXVzdCBiZSB1c2VkIGZvciB0aG9zZSBwdXJwb3Nlcy4KKyAgICBLVVJMIG1faW50ZXJuYWxV
Ukw7CiAgICAgCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0OwogICAgIFN0cmluZyBtX3R5cGU7CiAgICAgbG9uZyBsb25nIG1fc2l6ZTsKIH07Cklu
ZGV4OiBXZWJDb3JlL2ZpbGVhcGkvQmxvYi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxl
YXBpL0Jsb2IuaWRsCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvZmlsZWFwaS9CbG9iLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBtb2R1bGUgaHRtbCB7CiAKICNpZiAh
ZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykKICNpZiBkZWZpbmVkKEVOQUJMRV9CTE9CKSAm
JiBFTkFCTEVfQkxPQgotICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0g
QmxvYiBzbGljZShpbiBsb25nIGxvbmcgc3RhcnQsIGluIGxvbmcgbG9uZyBsZW5ndGgsIGluIFtP
cHRpb25hbCwgQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIGNv
bnRlbnRUeXBlKTsKKyAgICAgICAgQmxvYiBzbGljZShpbiBsb25nIGxvbmcgc3RhcnQsIGluIGxv
bmcgbG9uZyBsZW5ndGgsIGluIFtPcHRpb25hbCwgQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVs
bFN0cmluZ10gRE9NU3RyaW5nIGNvbnRlbnRUeXBlKTsKICNlbmRpZgogI2VuZGlmCiAgICAgfTsK
SW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9CbG9iQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9maWxlYXBpL0Jsb2JCdWlsZGVyLmNwcAkocmV2aXNpb24gNjcwMzIpCisrKyBXZWJDb3Jl
L2ZpbGVhcGkvQmxvYkJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsMTMgKzExNywx
MyBAQCBib29sIEJsb2JCdWlsZGVyOjphcHBlbmQoUGFzc1JlZlB0cjxCbG9iCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLVBhc3NSZWZQdHI8QmxvYj4gQmxvYkJ1aWxkZXI6OmdldEJsb2IoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgU3RyaW5nJiBj
b250ZW50VHlwZSkKK1Bhc3NSZWZQdHI8QmxvYj4gQmxvYkJ1aWxkZXI6OmdldEJsb2IoY29uc3Qg
U3RyaW5nJiBjb250ZW50VHlwZSkKIHsKICAgICBPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhID0g
QmxvYkRhdGE6OmNyZWF0ZSgpOwogICAgIGJsb2JEYXRhLT5zZXRDb250ZW50VHlwZShjb250ZW50
VHlwZSk7CiAgICAgYmxvYkRhdGEtPnN3YXBJdGVtcyhtX2l0ZW1zKTsKIAotICAgIFJlZlB0cjxC
bG9iPiBibG9iID0gQmxvYjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGJsb2JEYXRh
LnJlbGVhc2UoKSwgbV9zaXplKTsKKyAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0
ZShibG9iRGF0YS5yZWxlYXNlKCksIG1fc2l6ZSk7CiAKICAgICAvLyBBZnRlciBjcmVhdGluZyBh
IGJsb2IgZnJvbSB0aGUgY3VycmVudCBibG9iIGRhdGEsIHdlIGRvIG5vdCBuZWVkIHRvIGtlZXAg
dGhlIGRhdGEgYXJvdW5kIGFueSBtb3JlLiBJbnN0ZWFkLCB3ZSBvbmx5CiAgICAgLy8gbmVlZCB0
byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBVUkwgb2YgdGhlIGJsb2IganVzdCBjcmVhdGVkLgpJ
bmRleDogV2ViQ29yZS9maWxlYXBpL0Jsb2JCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9maWxlYXBpL0Jsb2JCdWlsZGVyLmgJKHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29yZS9maWxl
YXBpL0Jsb2JCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDYgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQmxvYjsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ7CiBjbGFzcyBUZXh0RW5jb2Rpbmc7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CkBA
IC01NCw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICBib29sIGFwcGVuZChjb25zdCBTdHJpbmcmIHRl
eHQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIGFwcGVuZChjb25zdCBTdHJpbmcmIHRleHQs
IGNvbnN0IFN0cmluZyYgZW5kaW5nLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBQYXNzUmVmUHRy
PEJsb2I+IGdldEJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgY29u
dGVudFR5cGUgPSBTdHJpbmcoKSk7CisgICAgUGFzc1JlZlB0cjxCbG9iPiBnZXRCbG9iKGNvbnN0
IFN0cmluZyYgY29udGVudFR5cGUgPSBTdHJpbmcoKSk7CiAKIHByaXZhdGU6CiAgICAgQmxvYkJ1
aWxkZXIoKTsKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9CbG9iQnVpbGRlci5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9maWxlYXBpL0Jsb2JCdWlsZGVyLmlkbAkocmV2aXNpb24gNjcwMzIpCisr
KyBXZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1aWxkZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3
ICszNSw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAgICBdIEJs
b2JCdWlsZGVyIHsKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykKLSAgICAgICAg
W0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIEJsb2IgZ2V0QmxvYihpbiBbT3B0aW9u
YWwsIENvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBjb250ZW50
VHlwZSk7CisgICAgICAgIEJsb2IgZ2V0QmxvYihpbiBbT3B0aW9uYWwsIENvbnZlcnRVbmRlZmlu
ZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBjb250ZW50VHlwZSk7CiAjZW5kaWYKICAg
ICAgICAgdm9pZCBhcHBlbmQoaW4gQmxvYiBibG9iKTsKICAgICAgICAgdm9pZCBhcHBlbmQoaW4g
RE9NU3RyaW5nIHZhbHVlLCBpbiBbT3B0aW9uYWwsIENvbnZlcnRVbmRlZmluZWRPck51bGxUb051
bGxTdHJpbmddIERPTVN0cmluZyBlbmRpbmdzKSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CkluZGV4
OiBXZWJDb3JlL2ZpbGVhcGkvQmxvYlVSTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxl
YXBpL0Jsb2JVUkwuY3BwCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvZmlsZWFwaS9CbG9i
VVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMjggKzM0LDI3IEBACiAKICNpbmNsdWRlICJL
VVJMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJV
VUlELmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotS1VSTCBCbG9iVVJMOjpjcmVhdGVVUkwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKK2NvbnN0IGNo
YXIgQmxvYlVSTDo6a0Jsb2JQcm90b2NvbFtdID0gImJsb2IiOworCitLVVJMIEJsb2JVUkw6OmNy
ZWF0ZVB1YmxpY1VSTChTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pCiB7Ci0gICAgLy8g
Q3JlYXRlIHRoZSBibG9iIFVSTCBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKLSAgICAvLyAgICAg
YmxvYjolZXNjYXBlZF9vcmlnaW4lLyVVVUlEJQotICAgIC8vIFRoZSBvcmlnaW4gb2YgdGhlIGhv
c3QgcGFnZSBpcyBlbmNvZGVkIGluIHRoZSBVUkwgdmFsdWUgdG8gYWxsb3cgZWFzeSBsb29rdXAg
b2YgdGhlIG9yaWdpbiB3aGVuIHRoZSBzZWN1cml0eSBjaGVjayBuZWVkcwotICAgIC8vIHRvIGJl
IHBlcmZvcm1lZC4KLSAgICBTdHJpbmcgdXJsU3RyaW5nID0gImJsb2I6IjsKLSAgICB1cmxTdHJp
bmcgKz0gZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhzY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpKTsKLSAgICB1cmxTdHJpbmcgKz0gIi8iOwot
ICAgIHVybFN0cmluZyArPSBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCk7Ci0gICAgcmV0dXJu
IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmxTdHJpbmcpOworICAgIEFTU0VSVChzZWN1cml0eU9y
aWdpbik7CisgICAgcmV0dXJuIGNyZWF0ZUJsb2JVUkwoc2VjdXJpdHlPcmlnaW4tPnRvU3RyaW5n
KCkpOworfQorCitLVVJMIEJsb2JVUkw6OmNyZWF0ZUludGVybmFsVVJMKCkKK3sKKyAgICByZXR1
cm4gY3JlYXRlQmxvYlVSTCgiYmxvYmludGVybmFsOi8vIik7CiB9CiAKIEtVUkwgQmxvYlVSTDo6
Z2V0T3JpZ2luKGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICBBU1NFUlQodXJsLnByb3RvY29sSXMo
ImJsb2IiKSk7CisgICAgQVNTRVJUKHVybC5wcm90b2NvbElzKGtCbG9iUHJvdG9jb2wpKTsKIAog
ICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSB1cmwucGF0aFN0YXJ0KCk7CiAgICAgdW5zaWduZWQg
YWZ0ZXJFbmRJbmRleCA9IHVybC5wYXRoQWZ0ZXJMYXN0U2xhc2goKTsKQEAgLTY1LDEwICs2NCwy
MCBAQCBLVVJMIEJsb2JVUkw6OmdldE9yaWdpbihjb25zdCBLVVJMJiB1cmwpCiAKIFN0cmluZyBC
bG9iVVJMOjpnZXRJZGVudGlmaWVyKGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICBBU1NFUlQodXJs
LnByb3RvY29sSXMoImJsb2IiKSk7CisgICAgQVNTRVJUKHVybC5wcm90b2NvbElzKGtCbG9iUHJv
dG9jb2wpKTsKIAogICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSB1cmwucGF0aEFmdGVyTGFzdFNs
YXNoKCk7CiAgICAgcmV0dXJuIHVybC5zdHJpbmcoKS5zdWJzdHJpbmcoc3RhcnRJbmRleCk7CiB9
CiAKK0tVUkwgQmxvYlVSTDo6Y3JlYXRlQmxvYlVSTChjb25zdCBTdHJpbmcmIG9yaWdpblN0cmlu
ZykKK3sKKyAgICBTdHJpbmcgdXJsU3RyaW5nID0ga0Jsb2JQcm90b2NvbDsKKyAgICB1cmxTdHJp
bmcgKz0gIjoiOworICAgIHVybFN0cmluZyArPSBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2Vz
KG9yaWdpblN0cmluZyk7CisgICAgdXJsU3RyaW5nICs9ICIvIjsKKyAgICB1cmxTdHJpbmcgKz0g
Y3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpOworICAgIHJldHVybiBLVVJMKFBhcnNlZFVSTFN0
cmluZywgdXJsU3RyaW5nKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9maWxlYXBpL0Jsb2JVUkwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvQmxv
YlVSTC5oCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvZmlsZWFwaS9CbG9iVVJMLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwyOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKIAor
Ly8gQmxvYiBVUkxzIGFyZSBvZiB0aGUgZm9ybQorLy8gICAgIGJsb2I6JWVzY2FwZWRfb3JpZ2lu
JS8lVVVJRCUKKy8vIEZvciBwdWJsaWMgdXJscywgdGhlIG9yaWdpbiBvZiB0aGUgaG9zdCBwYWdl
IGlzIGVuY29kZWQgaW4gdGhlIFVSTCB2YWx1ZSB0bworLy8gYWxsb3cgZWFzeSBsb29rdXAgb2Yg
dGhlIG9yaWdpbiB3aGVuIHNlY3VyaXR5IGNoZWNrcyBuZWVkIHRvIGJlIHBlcmZvcm1lZC4KKy8v
IFdoZW4gbG9hZGluZyBibG9icyB2aWEgUmVzb3VyY2VIYW5kbGUgb3Igd2hlbiByZWFkaW5nIGJs
b2JzIHZpYSBGaWxlUmVhZGVyCisvLyB0aGUgbG9hZGVyIGNvbmR1Y3RzIHNlY3VyaXR5IGNoZWNr
cyB0aGF0IGV4YW1pbmUgdGhlIG9yaWdpbiBvZiBob3N0IHBhZ2UKKy8vIGVuY29kZWQgaW4gdGhl
IHB1YmxpYyBibG9iIHVybC4gVGhlIG9yaWdpbiBiYWtlZCBpbnRvIGludGVybmFsIGJsb2IgdXJs
cworLy8gaXMgYSBzaW1wbGUgY29uc3RhbnQgdmFsdWUsICJibG9iaW50ZXJuYWw6Ly8iLCBpbnRl
cm5hbCB1cmxzIHNob3VsZCBub3QKKy8vIGJlIHVzZWQgd2l0aCBSZXNvdXJjZUhhbmRsZSBvciBG
aWxlUmVhZGVyLgogY2xhc3MgQmxvYlVSTCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIEtVUkwgY3Jl
YXRlVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICBzdGF0aWMgS1VSTCBjcmVhdGVQ
dWJsaWNVUkwoU2VjdXJpdHlPcmlnaW4qKTsKKyAgICBzdGF0aWMgS1VSTCBjcmVhdGVJbnRlcm5h
bFVSTCgpOwogICAgIHN0YXRpYyBLVVJMIGdldE9yaWdpbihjb25zdCBLVVJMJik7Ci0gICAgc3Rh
dGljIFN0cmluZyBnZXRJZGVudGlmaWVyKGNvbnN0IEtVUkwmIHVybCk7CisgICAgc3RhdGljIFN0
cmluZyBnZXRJZGVudGlmaWVyKGNvbnN0IEtVUkwmKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
YmxvYlByb3RvY29sKCkgeyByZXR1cm4ga0Jsb2JQcm90b2NvbDsgfQorCitwcml2YXRlOgorICAg
IHN0YXRpYyBLVVJMIGNyZWF0ZUJsb2JVUkwoY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcpOwor
ICAgIHN0YXRpYyBjb25zdCBjaGFyIGtCbG9iUHJvdG9jb2xbXTsKKyAgICBCbG9iVVJMKCkgeyB9
CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9maWxlYXBpL0ZpbGUuY3BwCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvZmls
ZWFwaS9GaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkZpbGUuaCIKIAotI2luY2x1ZGUgIkJsb2JSZWdpc3RyeS5o
IgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
CiAKQEAgLTQ1LDIzICs0NCwyMyBAQCBzdGF0aWMgUGFzc093blB0cjxCbG9iRGF0YT4gY3JlYXRl
QmxvYkRhCiAgICAgcmV0dXJuIGJsb2JEYXRhLnJlbGVhc2UoKTsKIH0KIAotRmlsZTo6RmlsZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJp
bmcmIHBhdGgpCi0gICAgOiBCbG9iKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNyZWF0ZUJsb2JE
YXRhRm9yRmlsZShwYXRoKSwgLTEpCitGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKKyAg
ICA6IEJsb2IoY3JlYXRlQmxvYkRhdGFGb3JGaWxlKHBhdGgpLCAtMSkKICAgICAsIG1fcGF0aChw
YXRoKQogICAgICwgbV9uYW1lKHBhdGhHZXRGaWxlTmFtZShwYXRoKSkKIHsKIH0KIAotRmlsZTo6
RmlsZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25z
dCBTdHJpbmcmIHBhdGgsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0eXBlKQotICAg
IDogQmxvYihzY3JpcHRFeGVjdXRpb25Db250ZXh0LCB1cmwsIHR5cGUsIC0xKQorRmlsZTo6Rmls
ZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0eXBl
KQorICAgIDogQmxvYih1cmwsIHR5cGUsIC0xKQogICAgICwgbV9wYXRoKHBhdGgpCiB7CiAgICAg
bV9uYW1lID0gcGF0aEdldEZpbGVOYW1lKHBhdGgpOwogfQogCiAjaWYgRU5BQkxFKERJUkVDVE9S
WV9VUExPQUQpCi1GaWxlOjpGaWxlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25zdCBTdHJpbmcmIHBh
dGgpCi0gICAgOiBCbG9iKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNyZWF0ZUJsb2JEYXRhRm9y
RmlsZShwYXRoKSwgLTEpCitGaWxlOjpGaWxlKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBj
b25zdCBTdHJpbmcmIHBhdGgpCisgICAgOiBCbG9iKGNyZWF0ZUJsb2JEYXRhRm9yRmlsZShwYXRo
KSwgLTEpCiAgICAgLCBtX3BhdGgocGF0aCkKICAgICAsIG1fcmVsYXRpdmVQYXRoKHJlbGF0aXZl
UGF0aCkKIHsKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9maWxlYXBpL0ZpbGUuaAkocmV2aXNpb24gNjcwMzIpCisrKyBXZWJDb3JlL2ZpbGVhcGkv
RmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwyNSArMzQsMjQgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgS1VSTDsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIGNs
YXNzIEZpbGUgOiBwdWJsaWMgQmxvYiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
RmlsZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIGNvbnN0IFN0cmluZyYgcGF0aCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlPiBjcmVh
dGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBGaWxlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHBhdGgpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBGaWxlKHBhdGgpKTsKICAgICB9CiAKICAgICAvLyBGb3IgZGVzZXJpYWxpemF0
aW9uLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IEtVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0eXBlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEZpbGU+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IEtVUkwmIHNyY1VSTCwgY29u
c3QgU3RyaW5nJiB0eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaWxl
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHBhdGgsIHNyY1VSTCwgdHlwZSkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUocGF0aCwgc3JjVVJMLCB0eXBlKSk7CiAgICAgfQogCiAj
aWYgRU5BQkxFKERJUkVDVE9SWV9VUExPQUQpCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZT4g
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGNv
bnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25zdCBTdHJpbmcmIHBhdGgpCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RmlsZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25z
dCBTdHJpbmcmIHBhdGgpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZpbGUo
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgcmVsYXRpdmVQYXRoLCBwYXRoKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRmlsZShyZWxhdGl2ZVBhdGgsIHBhdGgpKTsKICAgICB9CiAjZW5k
aWYKIApAQCAtNzQsMTMgKzczLDEzIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBsb25nIGxvbmcg
ZmlsZVNpemUoKSBjb25zdCB7IHJldHVybiBzaXplKCk7IH0KIAogcHJpdmF0ZToKLSAgICBGaWxl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIEZpbGUo
Y29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICAKICAgICAvLyBGb3IgZGVzZXJpYWxpemF0aW9uLgot
ICAgIEZpbGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgS1VSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIHR5cGUpOworICAgIEZpbGUoY29uc3QgU3Ry
aW5nJiBwYXRoLCBjb25zdCBLVVJMJiBzcmNVUkwsIGNvbnN0IFN0cmluZyYgdHlwZSk7CiAKICNp
ZiBFTkFCTEUoRElSRUNUT1JZX1VQTE9BRCkKLSAgICBGaWxlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBjb25zdCBTdHJpbmcmIHJlbGF0aXZlUGF0aCwgY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAg
ICBGaWxlKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoLCBjb25zdCBTdHJpbmcmIHBhdGgpOwog
I2VuZGlmCiAKICAgICBTdHJpbmcgbV9wYXRoOwpJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVS
ZWFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAko
cmV2aXNpb24gNjcwMzIpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKIAogI2luY2x1ZGUgIkJhc2U2NC5oIgogI2luY2x1
ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJCbG9iVVJMLmgiCiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRU
YXNrLmgiCiAjaW5jbHVkZSAiRmlsZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTQ0LDYg
KzQ1LDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJTY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgorI2lu
Y2x1ZGUgIlRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9h
ZGVyLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKQEAgLTE1NCwxNyArMTU2LDI3
IEBAIHZvaWQgRmlsZVJlYWRlcjo6dGVybWluYXRlKCkKIHsKICAgICBpZiAobV9sb2FkZXIpIHsK
ICAgICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOwotICAgICAgICBtX2xvYWRlciA9IDA7CisgICAg
ICAgIGNsZWFudXAoKTsKICAgICB9CiAgICAgbV9zdGF0ZSA9IENvbXBsZXRlZDsKIH0KIAordm9p
ZCBGaWxlUmVhZGVyOjpjbGVhbnVwKCkKK3sKKyAgICBtX2xvYWRlciA9IDA7CisgICAgVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwobV91cmxGb3JSZWFkaW5nKTsKKyAg
ICBtX3VybEZvclJlYWRpbmcgPSBLVVJMKCk7Cit9CisKIHZvaWQgRmlsZVJlYWRlcjo6c3RhcnQo
KQogewogICAgIG1fc3RhdGUgPSBPcGVuaW5nOwogCi0gICAgLy8gVGhlIGJsb2IgaXMgcmVhZCBi
eSByb3V0aW5nIHRocm91Z2ggdGhlIHJlcXVlc3QgaGFuZGxpbmcgbGF5ZXIgZ2l2ZW4gdGhlIGJs
b2IgdXJsLgotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1fYmxvYi0+dXJsKCkpOworICAg
IC8vIFRoZSBibG9iIGlzIHJlYWQgYnkgcm91dGluZyB0aHJvdWdoIHRoZSByZXF1ZXN0IGhhbmRs
aW5nIGxheWVyIGdpdmVuIGEgdGVtcG9yYXJ5IHB1YmxpYyB1cmwuCisgICAgbV91cmxGb3JSZWFk
aW5nID0gQmxvYlVSTDo6Y3JlYXRlUHVibGljVVJMKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJC
bG9iVVJMKG1fdXJsRm9yUmVhZGluZywgbV9ibG9iLT51cmwoKSk7CisKKyAgICBSZXNvdXJjZVJl
cXVlc3QgcmVxdWVzdChtX3VybEZvclJlYWRpbmcpOwogICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhv
ZCgiR0VUIik7CiAKICAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOwpAQCAtMjMw
LDcgKzI0Miw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ24KICAg
ICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmxvYWRFdmVudCk7CiAgICAgZmlyZUV2ZW50KGV2ZW50
TmFtZXMoKS5sb2FkZW5kRXZlbnQpOwogCi0gICAgbV9sb2FkZXIgPSAwOworICAgIGNsZWFudXAo
KTsKIH0KIAogdm9pZCBGaWxlUmVhZGVyOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKQpA
QCAtMjQ3LDcgKzI1OSw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6ZmFpbGVkKGludCBodHRwU3RhdHVz
Q28KICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpOwogICAgIGZpcmVFdmVu
dChldmVudE5hbWVzKCkubG9hZGVuZEV2ZW50KTsKIAotICAgIG1fbG9hZGVyID0gMDsKKyAgICBj
bGVhbnVwKCk7CiB9CiAKIEV4Y2VwdGlvbkNvZGUgRmlsZVJlYWRlcjo6aHR0cFN0YXR1c0NvZGVU
b0V4Y2VwdGlvbkNvZGUoaW50IGh0dHBTdGF0dXNDb2RlKQpJbmRleDogV2ViQ29yZS9maWxlYXBp
L0ZpbGVSZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5o
CShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIK
ICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIkZpbGVFcnJvci5oIgorI2luY2x1
ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNjcmlw
dFN0cmluZy5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgpAQCAtMTMwLDYgKzEzMSw3IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0
RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQogCiAgICAgdm9pZCB0ZXJtaW5h
dGUoKTsKKyAgICB2b2lkIGNsZWFudXAoKTsKICAgICB2b2lkIHJlYWRJbnRlcm5hbChCbG9iKiwg
UmVhZFR5cGUpOwogICAgIHZvaWQgZmFpbGVkKGludCBodHRwU3RhdHVzQ29kZSk7CiAgICAgdm9p
ZCBmaXJlRXJyb3JFdmVudChpbnQgaHR0cFN0YXR1c0NvZGUpOwpAQCAtMTQxLDYgKzE0Myw3IEBA
IHByaXZhdGU6CiAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOwogCiAgICAg
UmVmUHRyPEJsb2I+IG1fYmxvYjsKKyAgICBLVVJMIG1fdXJsRm9yUmVhZGluZzsKICAgICBSZWFk
VHlwZSBtX3JlYWRUeXBlOwogICAgIFRleHRFbmNvZGluZyBtX2VuY29kaW5nOwogCkluZGV4OiBX
ZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5jcHAJKHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29yZS9m
aWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDEz
IEBACiAKICNpbmNsdWRlICJCYXNlNjQuaCIKICNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAi
QmxvYlVSTC5oIgogI2luY2x1ZGUgIkZpbGVSZWFkZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJl
cXVlc3QuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAi
VGV4dEVuY29kaW5nLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgorI2luY2x1
ZGUgIlRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVy
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE0OSwxMiArMTUxLDE2IEBAIGNvbnN0IFNj
cmlwdFN0cmluZyYgRmlsZVJlYWRlclN5bmM6OnJlYWQKIAogdm9pZCBGaWxlUmVhZGVyU3luYzo6
cmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBCbG9i
KiBibG9iLCBSZWFkVHlwZSByZWFkVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgLy8g
VGhlIGJsb2IgaXMgcmVhZCBieSByb3V0aW5nIHRocm91Z2ggdGhlIHJlcXVlc3QgaGFuZGxpbmcg
bGF5ZXIgZ2l2ZW4gdGhlIGJsb2IgdXJsLgotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KGJs
b2ItPnVybCgpKTsKKyAgICAvLyBUaGUgYmxvYiBpcyByZWFkIGJ5IHJvdXRpbmcgdGhyb3VnaCB0
aGUgcmVxdWVzdCBoYW5kbGluZyBsYXllciBnaXZlbiB0aGUgdGVtcG9yYXJ5IHB1YmxpYyB1cmwu
CisgICAgS1VSTCB1cmxGb3JSZWFkaW5nID0gQmxvYlVSTDo6Y3JlYXRlUHVibGljVVJMKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgIFRocmVhZGFibGVCbG9i
UmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTCh1cmxGb3JSZWFkaW5nLCBibG9iLT51cmwoKSk7CisK
KyAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmxGb3JSZWFkaW5nKTsKICAgICByZXF1ZXN0
LnNldEhUVFBNZXRob2QoIkdFVCIpOwogCiAgICAgRmlsZVJlYWRlclN5bmNMb2FkZXIgbG9hZGVy
KChyZWFkVHlwZSA9PSBSZWFkQXNCaW5hcnlTdHJpbmcpID8gJm1fcmVzdWx0IDogMCk7CiAgICAg
bG9hZGVyLnN0YXJ0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHJlcXVlc3QsIGVjKTsKKyAgICBU
aHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVSTCh1cmxGb3JSZWFkaW5nKTsK
ICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogV2ViQ29yZS9maWxlYXBpL1Ro
cmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZmlsZWFwaS9U
aHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gNjcwMzIpCisrKyBXZWJDb3JlL2Zp
bGVhcGkvVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcg
KzM0LDYgQEAKIAogI2luY2x1ZGUgIkJsb2JEYXRhLmgiCiAjaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5
LmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTcwLDcgKzY5LDcgQEAgc3Rh
dGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJMVGFzayh2b2lkKiBjbwogICAgIGJsb2JSZWdpc3RyeSgp
LnJlZ2lzdGVyQmxvYlVSTChibG9iUmVnaXN0cnlDb250ZXh0LT51cmwsIGJsb2JSZWdpc3RyeUNv
bnRleHQtPmJsb2JEYXRhLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeTo6cmVnaXN0ZXJCbG9iVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBLVVJM
JiB1cmwsIFBhc3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhKQordm9pZCBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYgdXJsLCBQYXNzT3duUHRyPEJs
b2JEYXRhPiBibG9iRGF0YSkKIHsKICAgICBpZiAoaXNNYWluVGhyZWFkKCkpCiAgICAgICAgIGJs
b2JSZWdpc3RyeSgpLnJlZ2lzdGVyQmxvYlVSTCh1cmwsIGJsb2JEYXRhKTsKQEAgLTg2LDcgKzg1
LDcgQEAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJMRnJvbVRhc2sodm9pZAogICAgIGJsb2JS
ZWdpc3RyeSgpLnJlZ2lzdGVyQmxvYlVSTChibG9iUmVnaXN0cnlDb250ZXh0LT51cmwsIGJsb2JS
ZWdpc3RyeUNvbnRleHQtPnNyY1VSTCk7CiB9CiAKLXZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3Ry
eTo6cmVnaXN0ZXJCbG9iVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IEtVUkwmIHNyY1VSTCkKK3ZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVn
aXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgc3JjVVJMKQogewogICAg
IGlmIChpc01haW5UaHJlYWQoKSkKICAgICAgICAgYmxvYlJlZ2lzdHJ5KCkucmVnaXN0ZXJCbG9i
VVJMKHVybCwgc3JjVVJMKTsKQEAgLTEwMiw3ICsxMDEsNyBAQCBzdGF0aWMgdm9pZCB1bnJlZ2lz
dGVyQmxvYlVSTFRhc2sodm9pZCoKICAgICBibG9iUmVnaXN0cnkoKS51bnJlZ2lzdGVyQmxvYlVS
TChibG9iUmVnaXN0cnlDb250ZXh0LT51cmwpOwogfQogCi12b2lkIFRocmVhZGFibGVCbG9iUmVn
aXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBL
VVJMJiB1cmwpCit2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJM
KGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBpZiAoaXNNYWluVGhyZWFkKCkpCiAgICAgICAgIGJs
b2JSZWdpc3RyeSgpLnVucmVnaXN0ZXJCbG9iVVJMKHVybCk7CkBAIC0xMTQsMTUgKzExMywxNSBA
QCB2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCCiAKICNlbHNlCiAKLXZv
aWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBjb25zdCBLVVJMJiwgUGFzc093blB0cjxCbG9iRGF0YT4pCit2b2lkIFRocmVh
ZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiwgUGFzc093blB0
cjxCbG9iRGF0YT4pCiB7CiB9CiAKLXZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0
ZXJCbG9iVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBLVVJMJiwgY29uc3QgS1VS
TCYpCit2b2lkIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBL
VVJMJiwgY29uc3QgS1VSTCYpCiB7CiB9CiAKLXZvaWQgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6
dW5yZWdpc3RlckJsb2JVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IEtVUkwmKQor
dm9pZCBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJM
JikKIHsKIH0KICNlbmRpZiAvLyBFTkFCTChCTE9CKQpJbmRleDogV2ViQ29yZS9maWxlYXBpL1Ro
cmVhZGFibGVCbG9iUmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvVGhy
ZWFkYWJsZUJsb2JSZWdpc3RyeS5oCShyZXZpc2lvbiA2NzAzMikKKysrIFdlYkNvcmUvZmlsZWFw
aS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEzICszNywx
MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEJsb2JEYXRhOwogY2xhc3MgS1VSTDsK
LWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIGNsYXNzIFRocmVhZGFibGVCbG9iUmVn
aXN0cnkgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmxvYlVSTChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgY29uc3QgS1VSTCYsIFBhc3NPd25QdHI8QmxvYkRhdGE+KTsKLSAg
ICBzdGF0aWMgdm9pZCByZWdpc3RlckJsb2JVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IEtVUkwmLCBjb25zdCBLVVJMJiBzcmNVUkwpOwotICAgIHN0YXRpYyB2b2lkIHVucmVnaXN0
ZXJCbG9iVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBLVVJMJik7CisgICAgc3Rh
dGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmLCBQYXNzT3duUHRyPEJsb2JEYXRh
Pik7CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBL
VVJMJiBzcmNVUkwpOworICAgIHN0YXRpYyB2b2lkIHVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtV
UkwmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAJKHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ0LDcgKzE0NDQsNyBAQCBib29sIEhUTUxJ
bnB1dEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEZvCiAgICAgICAgIC8vIElmIG5vIGZpbGVuYW1l
IGF0IGFsbCBpcyBlbnRlcmVkLCByZXR1cm4gc3VjY2Vzc2Z1bCBidXQgZW1wdHkuCiAgICAgICAg
IC8vIE51bGwgd291bGQgYmUgbW9yZSBsb2dpY2FsLCBidXQgTmV0c2NhcGUgcG9zdHMgYW4gZW1w
dHkgZmlsZS4gQXJnaC4KICAgICAgICAgaWYgKCFudW1GaWxlcykgewotICAgICAgICAgICAgZW5j
b2RpbmcuYXBwZW5kQmxvYihuYW1lKCksIEZpbGU6OmNyZWF0ZShkb2N1bWVudCgpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCksICIiKSk7CisgICAgICAgICAgICBlbmNvZGluZy5hcHBlbmRCbG9i
KG5hbWUoKSwgRmlsZTo6Y3JlYXRlKCIiKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogCkBAIC0yMDg3LDE1ICsyMDg3LDE1IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
c2V0RmlsZUxpc3RGcm9tUmUKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKysp
IHsKICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSBiYWNrc2xhc2hlcyB0byBzbGFzaGVzIGJlZm9y
ZSBleHBvc2luZyB0aGUgcmVsYXRpdmUgcGF0aCB0byBzY3JpcHQuCiAgICAgICAgICAgICBTdHJp
bmcgcmVsYXRpdmVQYXRoID0gcGF0aHNbaV0uc3Vic3RyaW5nKDEgKyByb290UGF0aC5sZW5ndGgo
KSkucmVwbGFjZSgnXFwnLCcvJyk7Ci0gICAgICAgICAgICBtX2ZpbGVMaXN0LT5hcHBlbmQoRmls
ZTo6Y3JlYXRlKGRvY3VtZW50KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgcmVsYXRpdmVQ
YXRoLCBwYXRoc1tpXSkpOworICAgICAgICAgICAgbV9maWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNy
ZWF0ZShyZWxhdGl2ZVBhdGgsIHBhdGhzW2ldKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewog
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgICAgIG1fZmls
ZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUoZG9jdW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLCBwYXRoc1tpXSkpOworICAgICAgICAgICAgbV9maWxlTGlzdC0+YXBwZW5kKEZpbGU6
OmNyZWF0ZShwYXRoc1tpXSkpOwogICAgIH0KICNlbHNlCiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBzaXplOyBpKyspCi0gICAgICAgIG1fZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUoZG9j
dW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBwYXRoc1tpXSkpOworICAgICAgICBt
X2ZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHBhdGhzW2ldKSk7CiAjZW5kaWYKIAogICAg
IHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7CkluZGV4OiBXZWJDb3Jl
L3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TZWN1
cml0eU9yaWdpbi5jcHAJKHJldmlzaW9uIDY3MDMyKQorKysgV2ViQ29yZS9wYWdlL1NlY3VyaXR5
T3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+IFNlY3VyaXR5T3JpZ2kKICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VjdXJpdHlPcmlnaW4oS1VSTCgpLCBzYW5kYm94
RmxhZ3MpKTsKICNpZiBFTkFCTEUoQkxPQikKLSAgICBpZiAodXJsLnByb3RvY29sSXMoImJsb2Ii
KSkKKyAgICBpZiAodXJsLnByb3RvY29sSXMoQmxvYlVSTDo6YmxvYlByb3RvY29sKCkpKQogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlY3VyaXR5T3JpZ2luKEJsb2JVUkw6OmdldE9yaWdp
bih1cmwpLCBzYW5kYm94RmxhZ3MpKTsKICNlbmRpZgogICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U2VjdXJpdHlPcmlnaW4odXJsLCBzYW5kYm94RmxhZ3MpKTsKQEAgLTI0MCw3ICsyNDAsNyBAQCBi
b29sIFNlY3VyaXR5T3JpZ2luOjpjYW5SZXF1ZXN0KGNvbnN0IEtVCiAgICAgYm9vbCBkb1VuaXF1
ZU9yaWdpbkNoZWNrID0gdHJ1ZTsKICNpZiBFTkFCTEUoQkxPQikKICAgICAvLyBGb3IgYmxvYiBz
Y2hlbWUsIHdlIHdhbnQgdG8gaWdub3JlIHRoaXMgY2hlY2suCi0gICAgZG9VbmlxdWVPcmlnaW5D
aGVjayA9ICF1cmwucHJvdG9jb2xJcygiYmxvYiIpOworICAgIGRvVW5pcXVlT3JpZ2luQ2hlY2sg
PSAhdXJsLnByb3RvY29sSXMoQmxvYlVSTDo6YmxvYlByb3RvY29sKCkpOwogI2VuZGlmCiAgICAg
aWYgKGRvVW5pcXVlT3JpZ2luQ2hlY2sgJiYgdGFyZ2V0T3JpZ2luLT5pc1VuaXF1ZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0yODcsNyArMjg3LDcgQEAgYm9vbCBTZWN1cml0eU9yaWdp
bjo6aXNBY2Nlc3NXaGl0ZUxpc3RlZAogYm9vbCBTZWN1cml0eU9yaWdpbjo6Y2FuRGlzcGxheShj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIERvY3VtZW50KiBkb2N1bWVu
dCkKIHsKICNpZiBFTkFCTEUoQkxPQikKLSAgICBpZiAodXJsLnByb3RvY29sSXMoImJsb2IiKSAm
JiBkb2N1bWVudCkgeworICAgIGlmICh1cmwucHJvdG9jb2xJcyhCbG9iVVJMOjpibG9iUHJvdG9j
b2woKSkgJiYgZG9jdW1lbnQpIHsKICAgICAgICAgU2VjdXJpdHlPcmlnaW4qIGRvY3VtZW50T3Jp
Z2luID0gZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCk7CiAgICAgICAgIFJlZlB0cjxTZWN1cml0
eU9yaWdpbj4gdGFyZ2V0T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZSh1cmwpOwogICAg
ICAgICByZXR1cm4gZG9jdW1lbnRPcmlnaW4tPmlzU2FtZVNjaGVtZUhvc3RQb3J0KHRhcmdldE9y
aWdpbi5nZXQoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENo
cm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBi
b2FyZENocm9taXVtLmNwcAkocmV2aXNpb24gNjcwMzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY0LDEwICsz
NjQsOSBAQCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRDaHJvbWl1bTo6CiAgICAgaWYg
KCFtX2RhdGFPYmplY3QgfHwgbV9kYXRhT2JqZWN0LT5maWxlbmFtZXMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gRmlsZUxpc3Q6OmNyZWF0ZSgpOwogCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBSZWZQdHI8RmlsZUxpc3Q+IGZpbGVMaXN0ID0gRmls
ZUxpc3Q6OmNyZWF0ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kYXRhT2JqZWN0
LT5maWxlbmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6
Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzLmF0
KGkpKSk7CisgICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKG1fZGF0YU9iamVj
dC0+ZmlsZW5hbWVzLmF0KGkpKSk7CiAKICAgICByZXR1cm4gZmlsZUxpc3QucmVsZWFzZSgpOwog
fQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwCShyZXZpc2lvbiA2NzAz
MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2NSw5ICsyNjUsOCBAQCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRHdGs6
OmZpbGVzCiAgICAgUmVmUHRyPEZpbGVMaXN0PiBmaWxlTGlzdCA9IEZpbGVMaXN0OjpjcmVhdGUo
KTsKICAgICBWZWN0b3I8U3RyaW5nPiBmaWxlVmVjdG9yKG1fZGF0YU9iamVjdC0+ZmlsZXMoKSk7
CiAKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0g
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZmlsZVZlY3Rvci5zaXplKCk7IGkrKykKLSAgICAgICAgZmlsZUxp
c3QtPmFwcGVuZChGaWxlOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgZmlsZVZlY3Rv
cltpXSkpOworICAgICAgICBmaWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShmaWxlVmVjdG9y
W2ldKSk7CiAKICAgICByZXR1cm4gZmlsZUxpc3QucmVsZWFzZSgpOwogfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQkocmV2aXNpb24gNjcwMzIpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxMywxMiArMzEz
LDExIEBAIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBib2FyZE1hYzo6ZmlsZXMKICAgICBOU0Fy
cmF5ICphYnNvbHV0ZVVSTHMgPSBhYnNvbHV0ZVVSTHNGcm9tUGFzdGVib2FyZEZpbGVuYW1lcyht
X3Bhc3RlYm9hcmQuZ2V0KCkpOwogICAgIE5TVUludGVnZXIgY291bnQgPSBbYWJzb2x1dGVVUkxz
IGNvdW50XTsKIAotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAg
ICAgUmVmUHRyPEZpbGVMaXN0PiBmaWxlTGlzdCA9IEZpbGVMaXN0OjpjcmVhdGUoKTsKICAgICBm
b3IgKE5TVUludGVnZXIgeCA9IDA7IHggPCBjb3VudDsgeCsrKSB7CiAgICAgICAgIE5TVVJMICph
YnNvbHV0ZVVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOlthYnNvbHV0ZVVSTHMgb2JqZWN0QXRJ
bmRleDp4XV07CiAgICAgICAgIEFTU0VSVChbYWJzb2x1dGVVUkwgaXNGaWxlVVJMXSk7Ci0gICAg
ICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
IFthYnNvbHV0ZVVSTCBwYXRoXSkpOworICAgICAgICBmaWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNy
ZWF0ZShbYWJzb2x1dGVVUkwgcGF0aF0pKTsKICAgICB9CiAgICAgcmV0dXJuIGZpbGVMaXN0LnJl
bGVhc2UoKTsgLy8gV2Ugd2lsbCBhbHdheXMgcmV0dXJuIGEgRmlsZUxpc3QsIHNvbWV0aW1lcyBl
bXB0eQogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCShyZXZpc2lv
biA2NzAzMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYwNCwxMyArNjA0LDEyIEBAIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBi
b2FyZFdpbjo6ZmlsZXMKICAgICBpZiAoIWhkcm9wKQogICAgICAgICByZXR1cm4gZmlsZXMucmVs
ZWFzZSgpOwogCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAg
ICBXQ0hBUiBmaWxlbmFtZVtNQVhfUEFUSF07CiAgICAgVUlOVCBmaWxlQ291bnQgPSBEcmFnUXVl
cnlGaWxlVyhoZHJvcCwgMHhGRkZGRkZGRiwgMCwgMCk7CiAgICAgZm9yIChVSU5UIGkgPSAwOyBp
IDwgZmlsZUNvdW50OyBpKyspIHsKICAgICAgICAgaWYgKCFEcmFnUXVlcnlGaWxlVyhoZHJvcCwg
aSwgZmlsZW5hbWUsIEFSUkFZU0laRShmaWxlbmFtZSkpKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGZpbGVzLT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihmaWxlbmFtZSkpKTsKKyAgICAgICAgZmlsZXMt
PmFwcGVuZChGaWxlOjpjcmVhdGUocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGZpbGVuYW1lKSkp
OwogICAgIH0KIAogICAgIEdsb2JhbFVubG9jayhtZWRpdW0uaEdsb2JhbCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>