<?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>100235</bug_id>
          
          <creation_ts>2012-10-24 05:02:36 -0700</creation_ts>
          <short_desc>[V8] Remove ScriptController::windowShell()</short_desc>
          <delta_ts>2012-11-09 11:11:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>0</everconfirmed>
          <reporter name="Dan Carney">dcarney</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>749556</commentid>
    <comment_count>0</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-10-24 05:02:36 -0700</bug_when>
    <thetext>[V8] Remove ScriptController::windowShell()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749563</commentid>
    <comment_count>1</comment_count>
      <attachid>170370</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-10-24 05:06:51 -0700</bug_when>
    <thetext>Created attachment 170370
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749601</commentid>
    <comment_count>2</comment_count>
      <attachid>170370</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-24 06:24:27 -0700</bug_when>
    <thetext>Comment on attachment 170370
Patch

Attachment 170370 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14545216

New failing tests:
fast/frames/frame-limit.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749641</commentid>
    <comment_count>3</comment_count>
      <attachid>170370</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-24 07:20:12 -0700</bug_when>
    <thetext>Comment on attachment 170370
Patch

Attachment 170370 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14553208

New failing tests:
fast/frames/frame-limit.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749718</commentid>
    <comment_count>4</comment_count>
      <attachid>170370</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-24 09:00:11 -0700</bug_when>
    <thetext>Comment on attachment 170370
Patch

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

This looks great!  I&apos;m not sure what&apos;s going on with the test failure, but you might want to investigate that before landing.

&gt; Source/WebCore/bindings/v8/DOMWrapperWorld.cpp:70
&gt; +    for (WorldMap::iterator i = isolatedWorlds.begin(), e = isolatedWorlds.end(); i != e; ++i)

style nit: we usually use &quot;it&quot; rather than &quot;i&quot; for iterators.  Also, there&apos;s no reason to store &quot;e&quot; in a variable.  You can just call end() each time in the loop condition.

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:492
&gt; +    v8::Handle&lt;v8::Context&gt; v8Context = m_windowShell-&gt;context();
&gt;      v8Context-&gt;AllowCodeGenerationFromStrings(true);

I would combine these lines.

&gt; Source/WebCore/bindings/v8/ScriptController.h:176
&gt;      // Dummy method to avoid a bunch of ifdef&apos;s in WebCore.

Is this comment still accurate?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751904</commentid>
    <comment_count>5</comment_count>
      <attachid>170898</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-10-26 05:04:24 -0700</bug_when>
    <thetext>Created attachment 170898
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751911</commentid>
    <comment_count>6</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-10-26 05:12:20 -0700</bug_when>
    <thetext>Adam, the comments you&apos;ve made have been addressed. The failing test was timing out because ScriptController::updateDocument() was causing unnecessary calls to v8::Context::New (2X the number needed), which it apparently a very slow process. To fix this I added the below clause:

void ScriptController::updateDocument()
{
    if (!m_frame-&gt;loader()-&gt;frameHasLoaded())
        return;

I really have no particular idea if this is the correct solution here or if there is a more appropriate check, but this solution at least passes all the tests in debug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752517</commentid>
    <comment_count>7</comment_count>
      <attachid>170898</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-26 15:55:24 -0700</bug_when>
    <thetext>Comment on attachment 170898
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:3421
&gt; +        if (frame-&gt;script()-&gt;initializeMainWorld()) {

There&apos;s no &quot;IfNeeded&quot; here?

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:328
&gt; +static DOMWrapperWorld* existingWindowShellWorkaroundWorld()

Sometimes we use the name &quot;depreciated&quot; in functions we don&apos;t want more people to call, but this is fine too.

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:720
&gt; +    if (!m_frame-&gt;loader()-&gt;frameHasLoaded())
&gt; +        return;

What is this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752520</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-26 15:57:45 -0700</bug_when>
    <thetext>&gt; Adam, the comments you&apos;ve made have been addressed. The failing test was timing out because ScriptController::updateDocument() was causing unnecessary calls to v8::Context::New (2X the number needed), which it apparently a very slow process.

Uh...  Yes!  We don&apos;t want to call v8::Context::New any extra times.  It&apos;s not that it is slow.  We don&apos;t wan to to be making extra context objects!

&gt; To fix this I added the below clause:
&gt; 
&gt; void ScriptController::updateDocument()
&gt; {
&gt;     if (!m_frame-&gt;loader()-&gt;frameHasLoaded())
&gt;         return;
&gt; 
&gt; I really have no particular idea if this is the correct solution here or if there is a more appropriate check, but this solution at least passes all the tests in debug.

This is very unlikely to be the right thing.  I don&apos;t really understand the issue.  Why were we creating more contexts than we should have?  The way this worked before is that we&apos;d always try to initialize things, and that would bail out early if the context was already initialized.  It seems odd that we&apos;d end up calling v8::Context::New multiple times.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753491</commentid>
    <comment_count>9</comment_count>
      <attachid>171254</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-10-29 09:08:22 -0700</bug_when>
    <thetext>Created attachment 171254
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753497</commentid>
    <comment_count>10</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-10-29 09:14:08 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 170898 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170898&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:3421
&gt; &gt; +        if (frame-&gt;script()-&gt;initializeMainWorld()) {
&gt; 
&gt; There&apos;s no &quot;IfNeeded&quot; here?
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/ScriptController.cpp:328

This is a new method. It returns true if the world wasn&apos;t initialized and initialization was successful. The semantics are slightly different that the method on V8DOMWindowShell, so I wasn&apos;t sure what to call it. It is exactly equivalent to:

windowShell.context().IsEmpty() &amp;&amp; windowShell. initializeIfNeeded()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753502</commentid>
    <comment_count>11</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-10-29 09:21:43 -0700</bug_when>
    <thetext>&gt; This is very unlikely to be the right thing.  I don&apos;t really understand the issue.  Why were we creating more contexts than we should have?  The way this worked before is that we&apos;d always try to initialize things, and that would bail out early if the context was already initialized.  It seems odd that we&apos;d end up calling v8::Context::New multiple times.

The reason this has changes is that I have moved V8DOMWindowShell initialization into ScriptController.  In fact almost all functions in V8DOMWindowShell are now only called by ScriptController function. The previous implementation managed to not init the window shell during FrameLoader::init(), which is when a frame is initially attached but instead on frame access, which is what we want. An empty frame that is never used (as in the failing test), does not need to init the context. I have implemented that same workaround in this time around in ScriptController::updateDocument, albeit with slightly different logic, since I do in ScriptController rather than in the window shell.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762642</commentid>
    <comment_count>12</comment_count>
      <attachid>173219</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-11-09 00:07:58 -0800</bug_when>
    <thetext>Created attachment 173219
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762643</commentid>
    <comment_count>13</comment_count>
      <attachid>173219</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-11-09 00:08:30 -0800</bug_when>
    <thetext>Comment on attachment 173219
Patch

rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763117</commentid>
    <comment_count>14</comment_count>
      <attachid>173219</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-09 10:01:06 -0800</bug_when>
    <thetext>Comment on attachment 173219
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:3410
&gt; -        if (frame-&gt;script()-&gt;windowShell()-&gt;context().IsEmpty() &amp;&amp; frame-&gt;script()-&gt;windowShell()-&gt;initializeIfNeeded()) {
&gt; -            // initializeIfNeeded may have created a wrapper for the object, retry from the start.
&gt; +        if (frame-&gt;script()-&gt;initializeMainWorld()) {
&gt; +            // initializeMainWorld may have created a wrapper for the object, retry from the start.

You need to run-bindings-tests --reset-results to avoid turning the bot red.

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:348
&gt; -    return iter == m_isolatedWorlds.end() ? 0 : iter-&gt;value;
&gt; +    return iter == m_isolatedWorlds.end() ? 0 : iter-&gt;value-&gt;isContextInitialized() ? iter-&gt;value : 0;

I would probably have broken this down into multiple statements.  Nested ternary operators can be slightly hard to read.

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:369
&gt; +    if (!shell-&gt;isContextInitialized()) {
&gt; +        if (shell-&gt;initializeIfNeeded()) {

These lines can be combined.  Do we really need to call isContextInitialized?  I would think that initializeIfNeeded would check isContextInitialized because it says &quot;if needed&quot;.

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:727
&gt; +    if ((!m_windowShell-&gt;isContextInitialized() || !m_windowShell-&gt;isGlobalInitialized()) &amp;&amp; m_frame-&gt;loader()-&gt;stateMachine()-&gt;creatingInitialEmptyDocument())

This line still seems strange, but I think we should worry about it later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763140</commentid>
    <comment_count>15</comment_count>
      <attachid>173333</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-09 10:26:04 -0800</bug_when>
    <thetext>Created attachment 173333
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763142</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-09 10:26:46 -0800</bug_when>
    <thetext>To save you the timezone round-trip, I applied these trivial comments for you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763175</commentid>
    <comment_count>17</comment_count>
      <attachid>173333</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-09 11:11:24 -0800</bug_when>
    <thetext>Comment on attachment 173333
Patch for landing

Clearing flags on attachment: 173333

Committed r134089: &lt;http://trac.webkit.org/changeset/134089&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763176</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-09 11:11:28 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170370</attachid>
            <date>2012-10-24 05:06:51 -0700</date>
            <delta_ts>2012-10-26 05:04:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100235-20121024140526.patch</filename>
            <type>text/plain</type>
            <size>25190</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMzI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTUyN2EyMjNjMjUzNmIx
NjAxZGRkNjkyZDQ4ODk2MGQwYTMyN2JlNC4uNDBkZjIzMzE4OTU4MzdiNGIxZTA0YzQ3Zjk1ZGFi
MzBmNmNlNGNlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEyLTEwLTI0ICBEYW4g
Q2FybmV5ICA8ZGNhcm5leUBnb29nbGUuY29tPgorCisgICAgICAgIFtWOF0gUmVtb3ZlIFNjcmlw
dENvbnRyb2xsZXI6OndpbmRvd1NoZWxsKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMDIzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgd2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxk
KikgYW5kCisgICAgICAgIGV4aXN0aW5nV2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKikgdG8g
YmUgbGlrZSBKU0MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBObyBjaGFuZ2UgaW4gZnVuY3Rp
b25hbGl0eS4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
OgorICAgICAgICAoR2VuZXJhdGVUb1Y4Q29udmVydGVycyk6CisgICAgICAgICogYmluZGluZ3Mv
djgvRE9NV3JhcHBlcldvcmxkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omlzb2xhdGVkV29ybGRN
YXApOgorICAgICAgICAoV2ViQ29yZTo6RE9NV3JhcHBlcldvcmxkOjpnZXRBbGxXb3JsZHMpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxk
Lmg6CisgICAgICAgIChET01XcmFwcGVyV29ybGQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Bh
Z2VTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlU2NyaXB0RGVi
dWdTZXJ2ZXI6OmFkZExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6On5TY3JpcHRD
b250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyRm9y
T3V0T2ZNZW1vcnkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDb250cm9sbGVyOjpjbGVhckZvckNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENv
bnRyb2xsZXI6OmNsZWFyRm9yTmF2aWdhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRD
b250cm9sbGVyOjp1cGRhdGVTZWN1cml0eU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDb250cm9sbGVyOjppbml0aWFsaXplTWFpbldvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OmV4
aXN0aW5nV2luZG93U2hlbGxXb3JrYXJvdW5kV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q29udHJvbGxlcjo6ZXhpc3RpbmdXaW5kb3dTaGVsbCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRDb250cm9sbGVyOjp3aW5kb3dTaGVsbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRD
b250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRDb250cm9sbGVyOjpjdXJyZW50V29ybGRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENvbnRyb2xsZXI6Om1haW5Xb3JsZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0Q29udHJvbGxlcjo6aGF2ZUludGVycHJldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmVuYWJsZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6ZGlzYWJsZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6c2V0Q29udGV4dERlYnVnSWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6dXBkYXRlRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6
bmFtZWRJdGVtQWRkZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6bmFt
ZWRJdGVtUmVtb3ZlZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5o
OgorICAgICAgICAoU2NyaXB0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRD
b250cm9sbGVyOjpnZXRBbGxXb3JsZHMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGlu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwZXJDb250ZXh0RGF0YUZvckN1cnJlbnRXb3JsZCk6
CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVPdXRPZk1lbW9yeSk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRv
d1NoZWxsOjppc0NvbnRleHRJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdp
bmRvd1NoZWxsOjppbml0aWFsaXplSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01X
aW5kb3dTaGVsbDo6dXBkYXRlRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5k
b3dTaGVsbDo6bmFtZWRJdGVtQWRkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dT
aGVsbDo6bmFtZWRJdGVtUmVtb3ZlZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
RG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0RvY3VtZW50
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorCiAyMDEyLTEwLTI0ICBDaGFy
bGVzIFdlaSAgPGNoYXJsZXMud2VpQHRvcmNobW9iaWxlLmNvbS5jbj4KIAogICAgICAgICBbQmxh
Y2tCZXJyeV0gQ3JlZGVudGlhbHMgbm90IHJlLXVzZWQgZm9yIGEgcmVkaXJlY3RlZCByZXF1ZXN0
IHRvIHRoZSBzYW1lIGRvbWFpbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCA1NDc3MmZmOTgzYjhiOTQ4MzE2ZWYwZTQ2Njhj
MTdlMmQ2YzkyMDgyLi5lYTRkNTA5NmJhNjQ4NjA2ZDJlMzYwOTM0MTgxNTc2N2YwZTM3MDIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbQpAQCAtMzQxOCw4ICszNDE4LDggQEAgRU5ECiAgICAgaWYgKElzU3ViVHlwZSgkZGF0YU5v
ZGUsICJEb2N1bWVudCIpKSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CiAg
ICAgaWYgKEZyYW1lKiBmcmFtZSA9IGltcGwtPmZyYW1lKCkpIHsKLSAgICAgICAgaWYgKGZyYW1l
LT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+Y29udGV4dCgpLklzRW1wdHkoKSAmJiBmcmFtZS0+
c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPmluaXRpYWxpemVJZk5lZWRlZCgpKSB7Ci0gICAgICAg
ICAgICAvLyBpbml0aWFsaXplSWZOZWVkZWQgbWF5IGhhdmUgY3JlYXRlZCBhIHdyYXBwZXIgZm9y
IHRoZSBvYmplY3QsIHJldHJ5IGZyb20gdGhlIHN0YXJ0LgorICAgICAgICBpZiAoZnJhbWUtPnNj
cmlwdCgpLT5pbml0aWFsaXplTWFpbldvcmxkKCkpIHsKKyAgICAgICAgICAgIC8vIGluaXRpYWxp
emVNYWluV29ybGQgbWF5IGhhdmUgY3JlYXRlZCBhIHdyYXBwZXIgZm9yIHRoZSBvYmplY3QsIHJl
dHJ5IGZyb20gdGhlIHN0YXJ0LgogICAgICAgICAgICAgcmV0dXJuICR7Y2xhc3NOYW1lfTo6d3Jh
cChpbXBsLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogICAgICAgICB9CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxk
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAKaW5k
ZXggNmRmMGI3MmQ1YWIyNGI2MWEzZDFmYzBiMDcxZjUyYzlhZmE4ZTRhZS4uZWRmMzg2N2U2NjAw
MGFmNmEzM2RiNDMxYzVhNmNhN2VlMDVjMjU2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwCkBAIC01NSwxNCArNTUsMjIgQEAgRE9NV3JhcHBl
cldvcmxkKiBtYWluVGhyZWFkTm9ybWFsV29ybGQoKQogICAgIHJldHVybiBjYWNoZWROb3JtYWxX
b3JsZC5nZXQoKTsKIH0KIAotLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGdvIHRvIFBl
cklzb2xhdGVEYXRhLgogdHlwZWRlZiBIYXNoTWFwPGludCwgRE9NV3JhcHBlcldvcmxkKj4gV29y
bGRNYXA7CiBzdGF0aWMgV29ybGRNYXAmIGlzb2xhdGVkV29ybGRNYXAoKQogeworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChXb3JsZE1hcCwgbWFw
LCAoKSk7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAordm9pZCBET01XcmFwcGVyV29ybGQ6OmdldEFs
bFdvcmxkcyhWZWN0b3I8UmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gPiYgd29ybGRzKQoreworICAg
IHdvcmxkcy5hcHBlbmQobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworICAgIFdvcmxkTWFwJiBp
c29sYXRlZFdvcmxkcyA9IGlzb2xhdGVkV29ybGRNYXAoKTsKKyAgICBmb3IgKFdvcmxkTWFwOjpp
dGVyYXRvciBpID0gaXNvbGF0ZWRXb3JsZHMuYmVnaW4oKSwgZSA9IGlzb2xhdGVkV29ybGRzLmVu
ZCgpOyBpICE9IGU7ICsraSkKKyAgICAgICAgd29ybGRzLmFwcGVuZChpLT52YWx1ZSk7Cit9CisK
IHZvaWQgRE9NV3JhcHBlcldvcmxkOjpkZWFsbG9jYXRlKERPTVdyYXBwZXJXb3JsZCogd29ybGQp
CiB7CiAgICAgaW50IHdvcmxkSWQgPSB3b3JsZC0+d29ybGRJZCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmggYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaAppbmRleCBhZGYxMjRlYzI3NWI4ODk5OThi
MjdlNGE3NzBiZTViZDg4OTU2YWQ1Li5lMjk5ZGZkYmM5Nzk4YjQ5NmU1OWQyMDI0ODJmYTM2NWFl
OGRlOTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVy
V29ybGQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQu
aApAQCAtNTAsNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RE9NV3Jh
cHBlcldvcmxkPiBlbnN1cmVJc29sYXRlZFdvcmxkKGludCB3b3JsZElkLCBpbnQgZXh0ZW5zaW9u
R3JvdXApOwogICAgIHN0YXRpYyBib29sIGlzb2xhdGVkV29ybGRzRXhpc3QoKSB7IHJldHVybiBp
c29sYXRlZFdvcmxkQ291bnQ7IH0KICAgICBzdGF0aWMgYm9vbCBpc0lzb2xhdGVkV29ybGRJZChp
bnQgd29ybGRJZCkgeyByZXR1cm4gd29ybGRJZCAhPSBtYWluV29ybGRJZCAmJiB3b3JsZElkICE9
IHVuaW5pdGlhbGl6ZWRXb3JsZElkOyB9CisgICAgc3RhdGljIHZvaWQgZ2V0QWxsV29ybGRzKFZl
Y3RvcjxSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiA+JiB3b3JsZHMpOwogICAgIC8vIEFzc29jaWF0
ZXMgYW4gaXNvbGF0ZWQgd29ybGQgKHNlZSBhYm92ZSBmb3IgZGVzY3JpcHRpb24pIHdpdGggYSBz
ZWN1cml0eQogICAgIC8vIG9yaWdpbi4gWE1MSHR0cFJlcXVlc3QgaW5zdGFuY2VzIHVzZWQgaW4g
dGhhdCB3b3JsZCB3aWxsIGJlIGNvbnNpZGVyZWQKICAgICAvLyB0byBjb21lIGZyb20gdGhhdCBv
cmlnaW4sIG5vdCB0aGUgZnJhbWUncy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCmluZGV4IGI0ODU3YjQ1MzlmNGQyNDNiYjcw
YmI4ZTllNTgyMTFiMDJkN2UyNzQuLmUwZTcxMjE3ZDNlM2NiMmFmMTgyNmIyNDVjMjVlZGQ0ODg5
OTY3NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1BhZ2VTY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvUGFnZVNjcmlw
dERlYnVnU2VydmVyLmNwcApAQCAtOTIsOCArOTIsOCBAQCB2b2lkIFBhZ2VTY3JpcHREZWJ1Z1Nl
cnZlcjo6YWRkTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2UqIHBh
ZwogICAgIH0KICAgICBtX2xpc3RlbmVyc01hcC5zZXQocGFnZSwgbGlzdGVuZXIpOwogCi0gICAg
VjhET01XaW5kb3dTaGVsbCogc2hlbGwgPSBzY3JpcHRDb250cm9sbGVyLT53aW5kb3dTaGVsbCgp
OwotICAgIGlmICghc2hlbGwtPmlzQ29udGV4dEluaXRpYWxpemVkKCkpCisgICAgVjhET01XaW5k
b3dTaGVsbCogc2hlbGwgPSBzY3JpcHRDb250cm9sbGVyLT5leGlzdGluZ1dpbmRvd1NoZWxsKG1h
aW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKKyAgICBpZiAoIXNoZWxsIHx8ICFzaGVsbC0+aXNDb250
ZXh0SW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNvbnRleHQgPSBzaGVsbC0+Y29udGV4dCgpOwogICAgIHY4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uPiBnZXRTY3JpcHRzRnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2Fz
dChtX2RlYnVnZ2VyU2NyaXB0LmdldCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJnZXRTY3JpcHRz
IikpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5j
cHAKaW5kZXggYjJhOWI5NmE5ZDg3ZGFjY2ZiMTIyODdkMmYyOWQ5MzY5MmI5ZmU0Zi4uYzI4OTFj
OTdkM2I4NDYwMjY4MGVmNWIyZWM0MzIxMmQ2OWJiNmQ2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAKICNpbmNsdWRlICJCaW5kaW5nU3RhdGUuaCIK
KyNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJET01XaW5kb3cu
aCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCkBAIC0xMDksNyAr
MTEwLDcgQEAgU2NyaXB0Q29udHJvbGxlcjo6U2NyaXB0Q29udHJvbGxlcihGcmFtZSogZnJhbWUp
CiAKIFNjcmlwdENvbnRyb2xsZXI6On5TY3JpcHRDb250cm9sbGVyKCkKIHsKLSAgICB3aW5kb3dT
aGVsbCgpLT5kZXN0cm95R2xvYmFsKCk7CisgICAgbV93aW5kb3dTaGVsbC0+ZGVzdHJveUdsb2Jh
bCgpOwogICAgIGNsZWFyRm9yQ2xvc2UoKTsKIH0KIApAQCAtMTUxLDIzICsxNTIsMjkgQEAgdm9p
ZCBTY3JpcHRDb250cm9sbGVyOjpyZXNldElzb2xhdGVkV29ybGRzKCkKICAgICBtX2lzb2xhdGVk
V29ybGRzLmNsZWFyKCk7CiB9CiAKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJGb3JPdXRP
Zk1lbW9yeSgpCit7CisgICAgY2xlYXJGb3JDbG9zZSgpOworICAgIG1fd2luZG93U2hlbGwtPmRl
c3Ryb3lHbG9iYWwoKTsKK30KKwogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhckZvckNsb3Nl
KCkKIHsKICAgICByZXNldElzb2xhdGVkV29ybGRzKCk7CiAgICAgVjhHQ0NvbnRyb2xsZXI6Omhp
bnRGb3JDb2xsZWN0R2FyYmFnZSgpOwotICAgIHdpbmRvd1NoZWxsKCktPmNsZWFyRm9yQ2xvc2Uo
KTsKKyAgICBtX3dpbmRvd1NoZWxsLT5jbGVhckZvckNsb3NlKCk7CiB9CiAKIHZvaWQgU2NyaXB0
Q29udHJvbGxlcjo6Y2xlYXJGb3JOYXZpZ2F0aW9uKCkKIHsKICAgICByZXNldElzb2xhdGVkV29y
bGRzKCk7CiAgICAgVjhHQ0NvbnRyb2xsZXI6OmhpbnRGb3JDb2xsZWN0R2FyYmFnZSgpOwotICAg
IHdpbmRvd1NoZWxsKCktPmNsZWFyRm9yTmF2aWdhdGlvbigpOworICAgIG1fd2luZG93U2hlbGwt
PmNsZWFyRm9yTmF2aWdhdGlvbigpOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnVwZGF0
ZVNlY3VyaXR5T3JpZ2luKCkKIHsKLSAgICB3aW5kb3dTaGVsbCgpLT51cGRhdGVTZWN1cml0eU9y
aWdpbigpOworICAgIG1fd2luZG93U2hlbGwtPnVwZGF0ZVNlY3VyaXR5T3JpZ2luKCk7CiB9CiAK
IHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1TY3JpcHRPYmplY3RzKCkKQEAg
LTMxMyw0NiArMzIwLDY0IEBAIFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRl
KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCiAgICAgcmV0dXJuIFNjcmlwdFZh
bHVlKG9iamVjdCk7CiB9CiAKLVY4RE9NV2luZG93U2hlbGwqIFNjcmlwdENvbnRyb2xsZXI6OmVu
c3VyZUlzb2xhdGVkV29ybGRDb250ZXh0KGludCB3b3JsZElkLCBpbnQgZXh0ZW5zaW9uR3JvdXAp
Citib29sIFNjcmlwdENvbnRyb2xsZXI6OmluaXRpYWxpemVNYWluV29ybGQoKQogewotICAgIEFT
U0VSVCh3b3JsZElkICE9IERPTVdyYXBwZXJXb3JsZDo6bWFpbldvcmxkSWQpOwotCi0gICAgLy8g
Q2hlY2sgdGhlIG1hcCBmb3Igbm9uLXRlbXBvcmFyeSB3b3JsZHMuCi0gICAgaWYgKHdvcmxkSWQg
IT0gRE9NV3JhcHBlcldvcmxkOjp1bmluaXRpYWxpemVkV29ybGRJZCkgewotICAgICAgICBJc29s
YXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxk
SWQpOwotICAgICAgICBpZiAoaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoaXRlci0+dmFsdWUtPndvcmxkKCktPndvcmxkSWQoKSA9PSB3b3JsZElk
KTsKLSAgICAgICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZS0+d29ybGQoKS0+ZXh0ZW5zaW9uR3Jv
dXAoKSA9PSBleHRlbnNpb25Hcm91cCk7Ci0gICAgICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7
Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKG1fd2luZG93U2hlbGwtPmlzQ29udGV4dEluaXRp
YWxpemVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gd2luZG93U2hlbGwo
bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5pc0NvbnRleHRJbml0aWFsaXplZCgpOworfQogCi0g
ICAgUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gd29ybGQgPSBET01XcmFwcGVyV29ybGQ6OmVuc3Vy
ZUlzb2xhdGVkV29ybGQod29ybGRJZCwgZXh0ZW5zaW9uR3JvdXApOwotICAgIE93blB0cjxWOERP
TVdpbmRvd1NoZWxsPiBpc29sYXRlZFdvcmxkU2hlbGwgPSBWOERPTVdpbmRvd1NoZWxsOjpjcmVh
dGUobV9mcmFtZSwgd29ybGQpOwotICAgIG1faXNvbGF0ZWRXb3JsZHMuc2V0KHdvcmxkLT53b3Js
ZElkKCksIGlzb2xhdGVkV29ybGRTaGVsbC5nZXQoKSk7Ci0gICAgcmV0dXJuIGlzb2xhdGVkV29y
bGRTaGVsbC5sZWFrUHRyKCk7CisvLyBGSVhNRTogUmVtb3ZlIHRoaXMgZnVuY3Rpb24uIFRoZXJl
IGlzIGN1cnJlbnRseSBhbiBpc3N1ZSB3aXRoIHRoZSBpbnNwZWN0b3IgcmVsYXRlZCB0byB0aGUg
Y2FsbCB0byBkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZCBpbiBTY3JpcHRDb250
cm9sbGVyOjp3aW5kb3dTaGVsbC4KK3N0YXRpYyBET01XcmFwcGVyV29ybGQqIGV4aXN0aW5nV2lu
ZG93U2hlbGxXb3JrYXJvdW5kV29ybGQoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVm
UHRyPERPTVdyYXBwZXJXb3JsZD4sIHdvcmxkLCAoRE9NV3JhcHBlcldvcmxkOjpjcmVhdGVVbmlu
aXRpYWxpemVkV29ybGQoKSkpOworICAgIHJldHVybiB3b3JsZC5nZXQoKTsKIH0KIAotVjhET01X
aW5kb3dTaGVsbCogU2NyaXB0Q29udHJvbGxlcjo6ZXhpc3RpbmdXaW5kb3dTaGVsbEludGVybmFs
KERPTVdyYXBwZXJXb3JsZCogd29ybGQpCitWOERPTVdpbmRvd1NoZWxsKiBTY3JpcHRDb250cm9s
bGVyOjpleGlzdGluZ1dpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiB7CiAgICAg
QVNTRVJUKHdvcmxkKTsKIAotICAgIGlmIChMSUtFTFkod29ybGQtPmlzTWFpbldvcmxkKCkpKQor
ICAgIGlmICh3b3JsZC0+aXNNYWluV29ybGQoKSkKKyAgICAgICAgcmV0dXJuIG1fd2luZG93U2hl
bGwtPmlzQ29udGV4dEluaXRpYWxpemVkKCkgPyBtX3dpbmRvd1NoZWxsLmdldCgpIDogMDsKKwor
ICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBibG9jay4gU2VlIGNvbW1lbnQgd2l0aCBleGlzdGlu
Z1dpbmRvd1NoZWxsV29ya2Fyb3VuZFdvcmxkKCkuCisgICAgaWYgKHdvcmxkLT53b3JsZElkKCkg
PT0gRE9NV3JhcHBlcldvcmxkOjp1bmluaXRpYWxpemVkV29ybGRJZCkgeworICAgICAgICBBU1NF
UlQod29ybGQgPT0gZXhpc3RpbmdXaW5kb3dTaGVsbFdvcmthcm91bmRXb3JsZCgpKTsKICAgICAg
ICAgcmV0dXJuIG1fd2luZG93U2hlbGwuZ2V0KCk7CisgICAgfQogCiAgICAgSXNvbGF0ZWRXb3Js
ZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuZmluZCh3b3JsZC0+d29ybGRJ
ZCgpKTsKLSAgICByZXR1cm4gaXRlciA9PSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpID8gMCA6IGl0
ZXItPnZhbHVlOworICAgIHJldHVybiBpdGVyID09IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkgPyAw
IDogaXRlci0+dmFsdWUtPmlzQ29udGV4dEluaXRpYWxpemVkKCkgPyBpdGVyLT52YWx1ZSA6IDA7
CiB9CiAKIFY4RE9NV2luZG93U2hlbGwqIFNjcmlwdENvbnRyb2xsZXI6OndpbmRvd1NoZWxsKERP
TVdyYXBwZXJXb3JsZCogd29ybGQpCiB7Ci0gICAgVjhET01XaW5kb3dTaGVsbCogc2hlbGwgPSBl
eGlzdGluZ1dpbmRvd1NoZWxsSW50ZXJuYWwod29ybGQpOwotICAgIGlmIChMSUtFTFkoISFzaGVs
bCkpCi0gICAgICAgIHJldHVybiBzaGVsbDsKKyAgICBBU1NFUlQod29ybGQpOwogCi0gICAgT3du
UHRyPFY4RE9NV2luZG93U2hlbGw+IGlzb2xhdGVkV29ybGRTaGVsbCA9IFY4RE9NV2luZG93U2hl
bGw6OmNyZWF0ZShtX2ZyYW1lLCB3b3JsZCk7Ci0gICAgbV9pc29sYXRlZFdvcmxkcy5zZXQod29y
bGQtPndvcmxkSWQoKSwgaXNvbGF0ZWRXb3JsZFNoZWxsLmdldCgpKTsKLSAgICByZXR1cm4gaXNv
bGF0ZWRXb3JsZFNoZWxsLmxlYWtQdHIoKTsKKyAgICBWOERPTVdpbmRvd1NoZWxsKiBzaGVsbCA9
IDA7CisgICAgaWYgKHdvcmxkLT5pc01haW5Xb3JsZCgpKQorICAgICAgICBzaGVsbCA9IG1fd2lu
ZG93U2hlbGwuZ2V0KCk7CisgICAgZWxzZSB7CisgICAgICAgIElzb2xhdGVkV29ybGRNYXA6Oml0
ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29ybGQtPndvcmxkSWQoKSk7Cisg
ICAgICAgIGlmIChpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkpCisgICAgICAgICAgICBz
aGVsbCA9IGl0ZXItPnZhbHVlOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIE93blB0cjxW
OERPTVdpbmRvd1NoZWxsPiBpc29sYXRlZFdvcmxkU2hlbGwgPSBWOERPTVdpbmRvd1NoZWxsOjpj
cmVhdGUobV9mcmFtZSwgd29ybGQpOworICAgICAgICAgICAgc2hlbGwgPSBpc29sYXRlZFdvcmxk
U2hlbGwuZ2V0KCk7CisgICAgICAgICAgICBtX2lzb2xhdGVkV29ybGRzLnNldCh3b3JsZC0+d29y
bGRJZCgpLCBpc29sYXRlZFdvcmxkU2hlbGwubGVha1B0cigpKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBpZiAoIXNoZWxsLT5pc0NvbnRleHRJbml0aWFsaXplZCgpKSB7CisgICAgICAgIGlmIChz
aGVsbC0+aW5pdGlhbGl6ZUlmTmVlZGVkKCkpIHsKKyAgICAgICAgICAgIGlmICh3b3JsZC0+aXNN
YWluV29ybGQoKSkKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgaWYgY2xh
dXNlLiBTZWUgY29tbWVudCB3aXRoIGV4aXN0aW5nV2luZG93U2hlbGxXb3JrYXJvdW5kV29ybGQo
KS4KKyAgICAgICAgICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+ZGlzcGF0Y2hEaWRDbGVhcldp
bmRvd09iamVjdEluV29ybGQoZXhpc3RpbmdXaW5kb3dTaGVsbFdvcmthcm91bmRXb3JsZCgpKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+ZGlz
cGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQod29ybGQpOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiBzaGVsbDsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0
ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNv
ZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXAsIFZlY3RvcjxTY3JpcHRWYWx1ZT4qIHJl
c3VsdHMpCkBAIC0zNjYsMTAgKzM5MSwxMCBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1
YXRlSW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0UwogICAg
IHY4OjpMb2NhbDx2ODo6QXJyYXk+IHY4UmVzdWx0czsKICAgICB7CiAgICAgICAgIHY4OjpIYW5k
bGVTY29wZSBldmFsdWF0ZUhhbmRsZVNjb3BlOwotICAgICAgICBWOERPTVdpbmRvd1NoZWxsKiBp
c29sYXRlZFdvcmxkU2hlbGwgPSBlbnN1cmVJc29sYXRlZFdvcmxkQ29udGV4dCh3b3JsZElELCBl
eHRlbnNpb25Hcm91cCk7CisgICAgICAgIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IHdvcmxkID0g
RE9NV3JhcHBlcldvcmxkOjplbnN1cmVJc29sYXRlZFdvcmxkKHdvcmxkSUQsIGV4dGVuc2lvbkdy
b3VwKTsKKyAgICAgICAgVjhET01XaW5kb3dTaGVsbCogaXNvbGF0ZWRXb3JsZFNoZWxsID0gd2lu
ZG93U2hlbGwod29ybGQuZ2V0KCkpOwogCi0gICAgICAgIGlzb2xhdGVkV29ybGRTaGVsbC0+aW5p
dGlhbGl6ZUlmTmVlZGVkKCk7Ci0gICAgICAgIGlmIChpc29sYXRlZFdvcmxkU2hlbGwtPmNvbnRl
eHQoKS5Jc0VtcHR5KCkpCisgICAgICAgIGlmICghaXNvbGF0ZWRXb3JsZFNoZWxsLT5pc0NvbnRl
eHRJbml0aWFsaXplZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHY4OjpMb2Nh
bDx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhpc29s
YXRlZFdvcmxkU2hlbGwtPmNvbnRleHQoKSk7CkBAIC00MTksMTQgKzQ0NCwxMiBAQCB2ODo6TG9j
YWw8djg6OkNvbnRleHQ+IFNjcmlwdENvbnRyb2xsZXI6OmN1cnJlbnRXb3JsZENvbnRleHQoKQog
ICAgICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4oKTsKICAgICAgICAgcmV0
dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhjb250ZXh0KTsKICAgICB9Ci0gICAgd2lu
ZG93U2hlbGwoKS0+aW5pdGlhbGl6ZUlmTmVlZGVkKCk7Ci0gICAgcmV0dXJuIHY4OjpMb2NhbDx2
ODo6Q29udGV4dD46Ok5ldyh3aW5kb3dTaGVsbCgpLT5jb250ZXh0KCkpOworICAgIHJldHVybiB2
ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcod2luZG93U2hlbGwobWFpblRocmVhZE5vcm1hbFdv
cmxkKCkpLT5jb250ZXh0KCkpOwogfQogCiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IFNjcmlwdENv
bnRyb2xsZXI6Om1haW5Xb3JsZENvbnRleHQoKQogewotICAgIHdpbmRvd1NoZWxsKCktPmluaXRp
YWxpemVJZk5lZWRlZCgpOwotICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXco
d2luZG93U2hlbGwoKS0+Y29udGV4dCgpKTsKKyAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250
ZXh0Pjo6TmV3KHdpbmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Y29udGV4dCgp
KTsKIH0KIAogdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBTY3JpcHRDb250cm9sbGVyOjptYWluV29y
bGRDb250ZXh0KEZyYW1lKiBmcmFtZSkKQEAgLTQ1NywyNiArNDgwLDI0IEBAIHZvaWQgU2NyaXB0
Q29udHJvbGxlcjo6YmluZFRvV2luZG93T2JqZWN0KEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5n
JiBrZXksIE5QT2JqCiAKIGJvb2wgU2NyaXB0Q29udHJvbGxlcjo6aGF2ZUludGVycHJldGVyKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gd2luZG93U2hlbGwoKS0+aXNDb250ZXh0SW5pdGlhbGl6ZWQo
KTsKKyAgICByZXR1cm4gbV93aW5kb3dTaGVsbC0+aXNDb250ZXh0SW5pdGlhbGl6ZWQoKTsKIH0K
IAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjplbmFibGVFdmFsKCkKIHsKLSAgICB2ODo6SGFuZGxl
U2NvcGUgaGFuZGxlU2NvcGU7Ci0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0
ID0gd2luZG93U2hlbGwoKS0+Y29udGV4dCgpOwotICAgIGlmICh2OENvbnRleHQuSXNFbXB0eSgp
KQorICAgIGlmICghbV93aW5kb3dTaGVsbC0+aXNDb250ZXh0SW5pdGlhbGl6ZWQoKSkKICAgICAg
ICAgcmV0dXJuOwotCisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAgIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IG1fd2luZG93U2hlbGwtPmNvbnRleHQoKTsK
ICAgICB2OENvbnRleHQtPkFsbG93Q29kZUdlbmVyYXRpb25Gcm9tU3RyaW5ncyh0cnVlKTsKIH0K
IAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpkaXNhYmxlRXZhbChjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSkKIHsKLSAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0gICAgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gd2luZG93U2hlbGwoKS0+Y29udGV4dCgpOwot
ICAgIGlmICh2OENvbnRleHQuSXNFbXB0eSgpKQorICAgIGlmICghbV93aW5kb3dTaGVsbC0+aXND
b250ZXh0SW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwotCisgICAgdjg6OkhhbmRsZVNj
b3BlIGhhbmRsZVNjb3BlOworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9
IG1fd2luZG93U2hlbGwtPmNvbnRleHQoKTsKICAgICB2OENvbnRleHQtPkFsbG93Q29kZUdlbmVy
YXRpb25Gcm9tU3RyaW5ncyhmYWxzZSk7CiAgICAgdjhDb250ZXh0LT5TZXRFcnJvck1lc3NhZ2VG
b3JDb2RlR2VuZXJhdGlvbkZyb21TdHJpbmdzKHY4U3RyaW5nKGVycm9yTWVzc2FnZSkpOwogfQpA
QCAtNTM1LDExICs1NTYsNiBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFudXBTY3JpcHRP
YmplY3RzRm9yUGx1Z2luKFdpZGdldCogbmF0aXZlSGFuZGxlKQogICAgIG1fcGx1Z2luT2JqZWN0
cy5yZW1vdmUoaXQpOwogfQogCi12b2lkIFNjcmlwdENvbnRyb2xsZXI6OmdldEFsbFdvcmxkcyhW
ZWN0b3I8UmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gPiYgd29ybGRzKQotewotICAgIHdvcmxkcy5h
cHBlbmQobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwotfQotCiB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmV2YWx1YXRlSW5Xb3JsZChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2UsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBET01XcmFwcGVyV29ybGQqIHdvcmxk
KQogewpAQCAtNjY2LDEwICs2ODIsMTAgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjb2xsZWN0
SXNvbGF0ZWRDb250ZXh0cyhWZWN0b3I8c3RkOjpwYWlyPFNjcmlwdFN0YXRlKiwgU2UKIGJvb2wg
U2NyaXB0Q29udHJvbGxlcjo6c2V0Q29udGV4dERlYnVnSWQoaW50IGRlYnVnSWQpCiB7CiAgICAg
QVNTRVJUKGRlYnVnSWQgPiAwKTsKLSAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7Ci0gICAgdjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IHdpbmRvd1NoZWxsKCktPmNvbnRleHQoKTsK
LSAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpCisgICAgaWYgKCFtX3dpbmRvd1NoZWxsLT5pc0Nv
bnRleHRJbml0aWFsaXplZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdjg6OkhhbmRs
ZVNjb3BlIHNjb3BlOworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBtX3dp
bmRvd1NoZWxsLT5jb250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0LT5HZXREYXRhKCktPklzVW5k
ZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNzAyLDE3ICs3MTgsMTggQEAg
dm9pZCBTY3JpcHRDb250cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcih2b2lkKikKIAogdm9pZCBTY3Jp
cHRDb250cm9sbGVyOjp1cGRhdGVEb2N1bWVudCgpCiB7Ci0gICAgd2luZG93U2hlbGwoKS0+dXBk
YXRlRG9jdW1lbnQoKTsKKyAgICBpZiAoIWluaXRpYWxpemVNYWluV29ybGQoKSkKKyAgICAgICAg
d2luZG93U2hlbGwobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT51cGRhdGVEb2N1bWVudCgpOwog
fQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6Om5hbWVkSXRlbUFkZGVkKEhUTUxEb2N1bWVudCog
ZG9jLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7Ci0gICAgd2luZG93U2hlbGwoKS0+bmFt
ZWRJdGVtQWRkZWQoZG9jLCBuYW1lKTsKKyAgICB3aW5kb3dTaGVsbChtYWluVGhyZWFkTm9ybWFs
V29ybGQoKSktPm5hbWVkSXRlbUFkZGVkKGRvYywgbmFtZSk7CiB9CiAKIHZvaWQgU2NyaXB0Q29u
dHJvbGxlcjo6bmFtZWRJdGVtUmVtb3ZlZChIVE1MRG9jdW1lbnQqIGRvYywgY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lKQogewotICAgIHdpbmRvd1NoZWxsKCktPm5hbWVkSXRlbVJlbW92ZWQoZG9j
LCBuYW1lKTsKKyAgICB3aW5kb3dTaGVsbChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPm5hbWVk
SXRlbVJlbW92ZWQoZG9jLCBuYW1lKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IDVhMWZm
NDU3ODVhYzEyNTU2ZjIyYmM2ZTQxZTE4YjdlOWEyYmVjMDguLjdlOTA0ZDY5MTI2ZjhmODdhZmY4
YzhmODNlOWNiZGMwOWU3YTY4OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHRDb250cm9sbGVyLmgKQEAgLTY2LDExICs2Niw5IEBAIHB1YmxpYzoKICAgICBTY3JpcHRD
b250cm9sbGVyKEZyYW1lKik7CiAgICAgflNjcmlwdENvbnRyb2xsZXIoKTsKIAotICAgIFY4RE9N
V2luZG93U2hlbGwqIHdpbmRvd1NoZWxsKCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3dTaGVsbC5n
ZXQoKTsgfQorICAgIGJvb2wgaW5pdGlhbGl6ZU1haW5Xb3JsZCgpOwogICAgIFY4RE9NV2luZG93
U2hlbGwqIHdpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCopOwotICAgIC8vIEZJWE1FOiBSZXBs
YWNlIGV4aXN0aW5nV2luZG93U2hlbGwgd2l0aCBleGlzdGluZ1dpbmRvd1NoZWxsSW50ZXJuYWwg
c2VlIGNvbW1lbnQgaW4gVjhET01XaW5kb3dTaGVsbDo6aW5pdGlhbGl6ZUlmTmVlZGVkLgotICAg
IFNjcmlwdENvbnRyb2xsZXIqIGV4aXN0aW5nV2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKikg
eyByZXR1cm4gdGhpczsgfQotICAgIFY4RE9NV2luZG93U2hlbGwqIGV4aXN0aW5nV2luZG93U2hl
bGxJbnRlcm5hbChET01XcmFwcGVyV29ybGQqKTsKKyAgICBWOERPTVdpbmRvd1NoZWxsKiBleGlz
dGluZ1dpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCopOwogCiAgICAgU2NyaXB0VmFsdWUgZXhl
Y3V0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7CiAgICAgU2NyaXB0VmFsdWUgZXhl
Y3V0ZVNjcmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdCwgYm9vbCBmb3JjZVVzZXJHZXN0dXJlID0g
ZmFsc2UpOwpAQCAtMTY5LDEzICsxNjcsMTggQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhckZv
ck5hdmlnYXRpb24oKTsKICAgICB2b2lkIGNsZWFyRm9yQ2xvc2UoKTsKKyAgICB2b2lkIGNsZWFy
Rm9yT3V0T2ZNZW1vcnkoKTsKKwogCiAgICAgTlBPYmplY3QqIGNyZWF0ZVNjcmlwdE9iamVjdEZv
clBsdWdpbkVsZW1lbnQoSFRNTFBsdWdJbkVsZW1lbnQqKTsKICAgICBOUE9iamVjdCogd2luZG93
U2NyaXB0TlBPYmplY3QoKTsKIAogICAgIC8vIER1bW15IG1ldGhvZCB0byBhdm9pZCBhIGJ1bmNo
IG9mIGlmZGVmJ3MgaW4gV2ViQ29yZS4KICAgICB2b2lkIGV2YWx1YXRlSW5Xb3JsZChjb25zdCBT
Y3JpcHRTb3VyY2VDb2RlJiwgRE9NV3JhcHBlcldvcmxkKik7Ci0gICAgc3RhdGljIHZvaWQgZ2V0
QWxsV29ybGRzKFZlY3RvcjxSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiA+JiB3b3JsZHMpOworICAg
IHN0YXRpYyB2b2lkIGdldEFsbFdvcmxkcyhWZWN0b3I8UmVmUHRyPERPTVdyYXBwZXJXb3JsZD4g
PiYgd29ybGRzKQorICAgIHsKKyAgICAgICAgRE9NV3JhcHBlcldvcmxkOjpnZXRBbGxXb3JsZHMo
d29ybGRzKTsKKyAgICB9CiAKICAgICAvLyBSZWdpc3RlcnMgYSB2OCBleHRlbnNpb24gdG8gYmUg
YXZhaWxhYmxlIG9uIHdlYnBhZ2VzLiBXaWxsIG9ubHkKICAgICAvLyBhZmZlY3QgdjggY29udGV4
dHMgaW5pdGlhbGl6ZWQgYWZ0ZXIgdGhpcyBjYWxsLiBUYWtlcyBvd25lcnNoaXAgb2YKQEAgLTE5
Nyw3ICsyMDAsNiBAQCBwcml2YXRlOgogICAgIEZyYW1lKiBtX2ZyYW1lOwogICAgIGNvbnN0IFN0
cmluZyogbV9zb3VyY2VVUkw7CiAKLSAgICBWOERPTVdpbmRvd1NoZWxsKiBlbnN1cmVJc29sYXRl
ZFdvcmxkQ29udGV4dChpbnQgd29ybGRJZCwgaW50IGV4dGVuc2lvbkdyb3VwKTsKICAgICBPd25Q
dHI8VjhET01XaW5kb3dTaGVsbD4gbV93aW5kb3dTaGVsbDsKIAogICAgIC8vIFRoZSBpc29sYXRl
ZCB3b3JsZHMgd2UgYXJlIHRyYWNraW5nIGZvciB0aGlzIGZyYW1lLiBXZSBob2xkIHRoZW0gYWxp
dmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwCmluZGV4IGEyZDVkZjRm
NWM0MGYxYWMzMjUwNjc5MjE3NmJhNjNjOWNkMzUwMDEuLjc3MDFiNWQzZGFkNTRkNTE1MmIxNDEw
NGJkNmY2NmRiNGMxZjRmNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4QmluZGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5n
LmNwcApAQCAtMzE1LDcgKzMxNSw4IEBAIFY4UGVyQ29udGV4dERhdGEqIHBlckNvbnRleHREYXRh
Rm9yQ3VycmVudFdvcmxkKEZyYW1lKiBmcmFtZSkKICAgICBWOERPTVdpbmRvd1NoZWxsKiBpc29s
YXRlZFNoZWxsOwogICAgIGlmIChVTkxJS0VMWSghIShpc29sYXRlZFNoZWxsID0gVjhET01XaW5k
b3dTaGVsbDo6Z2V0RW50ZXJlZCgpKSkpCiAgICAgICAgIHJldHVybiBpc29sYXRlZFNoZWxsLT5w
ZXJDb250ZXh0RGF0YSgpOwotICAgIHJldHVybiBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxs
KCktPnBlckNvbnRleHREYXRhKCk7CisgICAgVjhET01XaW5kb3dTaGVsbCogbWFpblNoZWxsID0g
ZnJhbWUtPnNjcmlwdCgpLT5leGlzdGluZ1dpbmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxXb3Js
ZCgpKTsKKyAgICByZXR1cm4gbWFpblNoZWxsID8gbWFpblNoZWxsLT5wZXJDb250ZXh0RGF0YSgp
IDogMDsKIH0KIAogYm9vbCBoYW5kbGVPdXRPZk1lbW9yeSgpCkBAIC0zMzAsOCArMzMxLDcgQEAg
Ym9vbCBoYW5kbGVPdXRPZk1lbW9yeSgpCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICBmcmFtZS0+c2NyaXB0KCktPmNsZWFyRm9yQ2xvc2UoKTsKLSAgICBmcmFt
ZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPmRlc3Ryb3lHbG9iYWwoKTsKKyAgICBmcmFtZS0+
c2NyaXB0KCktPmNsZWFyRm9yT3V0T2ZNZW1vcnkoKTsKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVN
KQogICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpZEV4aGF1c3RNZW1vcnlBdmFpbGFi
bGVGb3JTY3JpcHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NV2luZG93U2hlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5k
b3dTaGVsbC5jcHAKaW5kZXggNGQzN2ZjOTNjYTNiMzQ3OTU2MDA2NjczMjJiZGI3M2JiZWUyYzkw
OC4uM2Q2ZGFkMzgzZjY4ZmQ3N2FkMDFkYzQ2ZTc3ZGJlMWQzZjllMjMwMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKQEAgLTIwMyw3ICsy
MDMsNiBAQCBWOERPTVdpbmRvd1NoZWxsOjpWOERPTVdpbmRvd1NoZWxsKEZyYW1lKiBmcmFtZSwg
UGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+IHdvcgogCiBib29sIFY4RE9NV2luZG93U2hlbGw6
OmlzQ29udGV4dEluaXRpYWxpemVkKCkKIHsKLSAgICBBU1NFUlQobV9jb250ZXh0LmlzRW1wdHko
KSB8fCAhbV9nbG9iYWwuaXNFbXB0eSgpKTsKICAgICByZXR1cm4gIW1fY29udGV4dC5pc0VtcHR5
KCk7CiB9CiAKQEAgLTM0Nyw5ICszNDYsOCBAQCBib29sIFY4RE9NV2luZG93U2hlbGw6OmluaXRp
YWxpemVJZk5lZWRlZCgpCiAKICAgICAvLyBGbGFnIGNvbnRleHQgYXMgaXNvbGF0ZWQuCiAgICAg
aWYgKCFpc01haW5Xb3JsZCkgewotICAgICAgICBWOERPTVdpbmRvd1NoZWxsKiBtYWluV2luZG93
ID0gbV9mcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCk7Ci0gICAgICAgIG1haW5XaW5kb3ct
PmluaXRpYWxpemVJZk5lZWRlZCgpOwotICAgICAgICBpZiAoIW1haW5XaW5kb3ctPmNvbnRleHQo
KS5Jc0VtcHR5KCkpCisgICAgICAgIFY4RE9NV2luZG93U2hlbGwqIG1haW5XaW5kb3cgPSBtX2Zy
YW1lLT5zY3JpcHQoKS0+ZXhpc3RpbmdXaW5kb3dTaGVsbChtYWluVGhyZWFkTm9ybWFsV29ybGQo
KSk7CisgICAgICAgIGlmIChtYWluV2luZG93ICYmICFtYWluV2luZG93LT5jb250ZXh0KCkuSXNF
bXB0eSgpKQogICAgICAgICAgICAgc2V0SW5qZWN0ZWRTY3JpcHRDb250ZXh0RGVidWdJZChtX2Nv
bnRleHQuZ2V0KCksIG1fZnJhbWUtPnNjcmlwdCgpLT5jb250ZXh0RGVidWdJZChtYWluV2luZG93
LT5jb250ZXh0KCkpKTsKICAgICAgICAgc2V0SXNvbGF0ZWRXb3JsZEZpZWxkKHRoaXMsIGNvbnRl
eHQpOwogICAgIH0KQEAgLTM4OSwxMyArMzg3LDYgQEAgYm9vbCBWOERPTVdpbmRvd1NoZWxsOjpp
bml0aWFsaXplSWZOZWVkZWQoKQogICAgICAgICB9CiAgICAgfQogICAgIG1fZnJhbWUtPmxvYWRl
cigpLT5jbGllbnQoKS0+ZGlkQ3JlYXRlU2NyaXB0Q29udGV4dChtX2NvbnRleHQuZ2V0KCksIG1f
d29ybGQtPmV4dGVuc2lvbkdyb3VwKCksIG1fd29ybGQtPndvcmxkSWQoKSk7Ci0KLSAgICBpZiAo
aXNNYWluV29ybGQpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgY2FsbCBpcyBwcm9iYWJseSBp
biB0aGUgd3Jvbmcgc3BvdCwgYnV0IGNhdXNlcyBhIHRlc3QgdGltZW91dCBmb3IgaHR0cC90ZXN0
cy9taXNjL3dpbmRvdy1vcGVuLXRoZW4td3JpdGUuaHRtbCB3aGVuIHJlbW92ZWQuCi0gICAgICAg
IC8vIEFkZGl0aW9uYWxseSwgU2NyaXB0Q29udHJvbGxlcjo6ZXhpc3RpbmdXaW5kb3dTaGVsbCBj
YW5ub3QgYmUgY29ycmVjdGx5IGltcGxlbWVudGVkIHVudGlsIHRoaXMgY2FsbCBpcyBnb25lLgot
ICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdElu
V29ybGQoMCk7Ci0gICAgfQotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTU1Myw3ICs1NDQs
NyBAQCB2b2lkIFY4RE9NV2luZG93U2hlbGw6OnVwZGF0ZURvY3VtZW50KCkKICAgICBBU1NFUlQo
bV93b3JsZC0+aXNNYWluV29ybGQoKSk7CiAgICAgaWYgKG1fZ2xvYmFsLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghaW5pdGlhbGl6ZUlmTmVlZGVkKCkpCisgICAgaWYgKG1f
Y29udGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICB1cGRhdGVEb2N1bWVudFBy
b3BlcnR5KCk7CiAgICAgdXBkYXRlU2VjdXJpdHlPcmlnaW4oKTsKQEAgLTU3OCw3ICs1NjksNyBA
QCB2b2lkIFY4RE9NV2luZG93U2hlbGw6Om5hbWVkSXRlbUFkZGVkKEhUTUxEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZwogewogICAgIEFTU0VSVChtX3dvcmxkLT5pc01haW5X
b3JsZCgpKTsKIAotICAgIGlmICghaW5pdGlhbGl6ZUlmTmVlZGVkKCkpCisgICAgaWYgKG1fY29u
dGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBo
YW5kbGVTY29wZTsKQEAgLTU5MywxMCArNTg0LDEwIEBAIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6
bmFtZWRJdGVtUmVtb3ZlZChIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJp
CiB7CiAgICAgQVNTRVJUKG1fd29ybGQtPmlzTWFpbldvcmxkKCkpOwogCi0gICAgaWYgKGRvY3Vt
ZW50LT5oYXNOYW1lZEl0ZW0obmFtZS5pbXBsKCkpIHx8IGRvY3VtZW50LT5oYXNFeHRyYU5hbWVk
SXRlbShuYW1lLmltcGwoKSkpCisgICAgaWYgKG1fY29udGV4dC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICghaW5pdGlhbGl6ZUlmTmVlZGVkKCkpCisgICAgaWYgKGRvY3Vt
ZW50LT5oYXNOYW1lZEl0ZW0obmFtZS5pbXBsKCkpIHx8IGRvY3VtZW50LT5oYXNFeHRyYU5hbWVk
SXRlbShuYW1lLmltcGwoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHY4OjpIYW5kbGVTY29w
ZSBoYW5kbGVTY29wZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAppbmRleCA4MWQyNDQyYWJkYTUwNTVhYWM1NGQwYWM3
NTYzYmNkN2U2NzZhMDRkLi41OTc5MDhjZDNlMjYwMWQ4YTNjOTdmZGU0OGZlODYwZDNmOTI5OTEz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVu
dEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9j
dW1lbnRDdXN0b20uY3BwCkBAIC0xMTAsNyArMTEwLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHRvVjgoRG9jdW1lbnQqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250
ZXgKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgaWYgKCFWOERPTVdpbmRvd1NoZWxsOjpn
ZXRFbnRlcmVkKCkpIHsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGltcGwtPmZyYW1lKCkp
Ci0gICAgICAgICAgICBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPnVwZGF0ZURvY3Vt
ZW50V3JhcHBlcih3cmFwcGVyKTsKKyAgICAgICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93
U2hlbGwobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT51cGRhdGVEb2N1bWVudFdyYXBwZXIod3Jh
cHBlcik7CiAgICAgfQogICAgIHJldHVybiB3cmFwcGVyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHAK
aW5kZXggMGQ0NzE5ZmE1YTY5YmFjZDgxOTRhYjRlYjc4MjdjYzdlZDRiZTMzNi4uNWFjNWQwMDBk
MmUwMGRjOTFmMmMzMWZiZGFlNDM5NzZlYmQ3ZDYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwCkBA
IC0xODUsNyArMTg1LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoSFRNTERvY3VtZW50
KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ28KICAgICAgICAgcmV0dXJu
IHdyYXBwZXI7CiAgICAgaWYgKCFWOERPTVdpbmRvd1NoZWxsOjpnZXRFbnRlcmVkKCkpIHsKICAg
ICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGltcGwtPmZyYW1lKCkpCi0gICAgICAgICAgICBmcmFt
ZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPnVwZGF0ZURvY3VtZW50V3JhcHBlcih3cmFwcGVy
KTsKKyAgICAgICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwobWFpblRocmVhZE5v
cm1hbFdvcmxkKCkpLT51cGRhdGVEb2N1bWVudFdyYXBwZXIod3JhcHBlcik7CiAgICAgfQogICAg
IHJldHVybiB3cmFwcGVyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4U1ZHRG9jdW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4U1ZHRG9jdW1lbnRDdXN0b20uY3BwCmluZGV4IDA5OTFkZmMxNzgwOTZj
NzZjN2NiODI3YWEwZmJkZTMyNWZjMDQyNTMuLjYwNzM4ZDdlOWU3ODRiYTZkZWJmMGNkZTAwOWRl
ZjVmNjczMTkwZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhTVkdEb2N1bWVudEN1c3RvbS5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHRvVjgoU1ZHRG9jdW1lbnQqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gY3JlYXRpb25Db24KICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgaWYgKCFWOERP
TVdpbmRvd1NoZWxsOjpnZXRFbnRlcmVkKCkpIHsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9
IGltcGwtPmZyYW1lKCkpCi0gICAgICAgICAgICBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxs
KCktPnVwZGF0ZURvY3VtZW50V3JhcHBlcih3cmFwcGVyKTsKKyAgICAgICAgICAgIGZyYW1lLT5z
Y3JpcHQoKS0+d2luZG93U2hlbGwobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT51cGRhdGVEb2N1
bWVudFdyYXBwZXIod3JhcHBlcik7CiAgICAgfQogICAgIHJldHVybiB3cmFwcGVyOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170898</attachid>
            <date>2012-10-26 05:04:24 -0700</date>
            <delta_ts>2012-10-29 09:08:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100235-20121026140254.patch</filename>
            <type>text/plain</type>
            <size>26439</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyNjA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWE3MmU1NmZlNTU5MWI1
ODNkMDQ2Y2ZmN2Q5NDRkMWRjNzdlMWFhYy4uYWMwNmE2YjE5ZjQxNjhlYzlkN2Y3NzU1ZTcwOGRl
MTFlYmRkYjQwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDEyLTEwLTI2ICBEYW4g
Q2FybmV5ICA8ZGNhcm5leUBnb29nbGUuY29tPgorCisgICAgICAgIFtWOF0gUmVtb3ZlIFNjcmlw
dENvbnRyb2xsZXI6OndpbmRvd1NoZWxsKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMDIzNQorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFy
dGguCisKKyAgICAgICAgUmVmYWN0b3JlZCB3aW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqKSBh
bmQKKyAgICAgICAgZXhpc3RpbmdXaW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqKSB0byBiZSBs
aWtlIEpTQy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGNoYW5nZSBpbiBmdW5jdGlvbmFs
aXR5LgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06Cisg
ICAgICAgIChHZW5lcmF0ZVRvVjhDb252ZXJ0ZXJzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9E
T01XcmFwcGVyV29ybGQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNvbGF0ZWRXb3JsZE1hcCk6
CisgICAgICAgIChXZWJDb3JlOjpET01XcmFwcGVyV29ybGQ6OmdldEFsbFdvcmxkcyk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaDoK
KyAgICAgICAgKERPTVdyYXBwZXJXb3JsZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvUGFnZVNj
cmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTY3JpcHREZWJ1Z1Nl
cnZlcjo6YWRkTGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRy
b2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJGb3JPdXRP
Zk1lbW9yeSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENv
bnRyb2xsZXI6OmNsZWFyRm9yQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJv
bGxlcjo6dXBkYXRlU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6aW5pdGlhbGl6ZU1haW5Xb3JsZCk6IFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFpbiB3
b3JsZCB3YXMgaW5pdGlhbGl6ZWQuCisgICAgICAgIChXZWJDb3JlOjpleGlzdGluZ1dpbmRvd1No
ZWxsV29ya2Fyb3VuZFdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
OmV4aXN0aW5nV2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6d2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZh
bHVhdGVJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6Y3VycmVudFdvcmxkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9s
bGVyOjptYWluV29ybGRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xs
ZXI6OmhhdmVJbnRlcnByZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVy
OjplbmFibGVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmRpc2Fi
bGVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93
U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6c2V0Q29udGV4dERl
YnVnSWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6bmFtZWRJdGVtQWRkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6bmFtZWRJdGVtUmVtb3ZlZCk6
CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAoU2Ny
aXB0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpnZXRB
bGxXb3JsZHMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpwZXJDb250ZXh0RGF0YUZvckN1cnJlbnRXb3JsZCk6CisgICAgICAgIChXZWJD
b3JlOjpoYW5kbGVPdXRPZk1lbW9yeSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5k
b3dTaGVsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjppbml0aWFs
aXplSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6dXBkYXRl
RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVt
QWRkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVtUmVt
b3ZlZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oOgorICAgICAg
ICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6aXNDb250ZXh0SW5pdGlhbGl6ZWQpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1
bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhTVkdEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojp0b1Y4KToKKwogMjAxMi0xMC0yNiAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBNZW1vcnkgaW5zdHJ1bWVudGF0aW9uOiBkbyBub3QgcmVwb3J0IG1l
bW9yeSBvY2N1cGllZCBieSB2ODo6U3RyaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IGRmZDQ0Y2Q2Y2Q4ODM3NmVhNzkw
ZDBlMWRiOGE0MzhhNzE2ZjA1NTkuLjdkNzk1NmQxMWU5ZWFkZjkzNjYyYWUyMzNjYmY2ODIwMjcx
NWMyNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvclY4LnBtCkBAIC0zNDE4LDggKzM0MTgsOCBAQCBFTkQKICAgICBpZiAoSXNTdWJUeXBl
KCRkYXRhTm9kZSwgIkRvY3VtZW50IikpIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8
RU5EKTsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gaW1wbC0+ZnJhbWUoKSkgewotICAgICAgICBp
ZiAoZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT5jb250ZXh0KCkuSXNFbXB0eSgpICYm
IGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+aW5pdGlhbGl6ZUlmTmVlZGVkKCkpIHsK
LSAgICAgICAgICAgIC8vIGluaXRpYWxpemVJZk5lZWRlZCBtYXkgaGF2ZSBjcmVhdGVkIGEgd3Jh
cHBlciBmb3IgdGhlIG9iamVjdCwgcmV0cnkgZnJvbSB0aGUgc3RhcnQuCisgICAgICAgIGlmIChm
cmFtZS0+c2NyaXB0KCktPmluaXRpYWxpemVNYWluV29ybGQoKSkgeworICAgICAgICAgICAgLy8g
aW5pdGlhbGl6ZU1haW5Xb3JsZCBtYXkgaGF2ZSBjcmVhdGVkIGEgd3JhcHBlciBmb3IgdGhlIG9i
amVjdCwgcmV0cnkgZnJvbSB0aGUgc3RhcnQuCiAgICAgICAgICAgICByZXR1cm4gJHtjbGFzc05h
bWV9Ojp3cmFwKGltcGwuZ2V0KCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgICAg
IH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFw
cGVyV29ybGQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxk
LmNwcAppbmRleCA2ZGYwYjcyZDVhYjI0YjYxYTNkMWZjMGIwNzFmNTJjOWFmYThlNGFlLi5lNzFi
ODllOTBlNTIwYmUxNzNjZWNiNDU3YjhmM2RlYTUzMzk3NDhlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAKQEAgLTU1LDE0ICs1NSwyMiBAQCBE
T01XcmFwcGVyV29ybGQqIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpCiAgICAgcmV0dXJuIGNhY2hl
ZE5vcm1hbFdvcmxkLmdldCgpOwogfQogCi0vLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkg
Z28gdG8gUGVySXNvbGF0ZURhdGEuCiB0eXBlZGVmIEhhc2hNYXA8aW50LCBET01XcmFwcGVyV29y
bGQqPiBXb3JsZE1hcDsKIHN0YXRpYyBXb3JsZE1hcCYgaXNvbGF0ZWRXb3JsZE1hcCgpCiB7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFdvcmxk
TWFwLCBtYXAsICgpKTsKICAgICByZXR1cm4gbWFwOwogfQogCit2b2lkIERPTVdyYXBwZXJXb3Js
ZDo6Z2V0QWxsV29ybGRzKFZlY3RvcjxSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiA+JiB3b3JsZHMp
Cit7CisgICAgd29ybGRzLmFwcGVuZChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAgV29y
bGRNYXAmIGlzb2xhdGVkV29ybGRzID0gaXNvbGF0ZWRXb3JsZE1hcCgpOworICAgIGZvciAoV29y
bGRNYXA6Oml0ZXJhdG9yIGl0ID0gaXNvbGF0ZWRXb3JsZHMuYmVnaW4oKTsgaXQgIT0gaXNvbGF0
ZWRXb3JsZHMuZW5kKCk7ICsraXQpCisgICAgICAgIHdvcmxkcy5hcHBlbmQoaXQtPnZhbHVlKTsK
K30KKwogdm9pZCBET01XcmFwcGVyV29ybGQ6OmRlYWxsb2NhdGUoRE9NV3JhcHBlcldvcmxkKiB3
b3JsZCkKIHsKICAgICBpbnQgd29ybGRJZCA9IHdvcmxkLT53b3JsZElkKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5oCmluZGV4IGFmNTVjOTQwOTBmMDZk
MTMxMDJkN2IwMDk3MGNlYjcyMThkYzNiMmUuLmQ4MDllODFiYTE2ZWUxYTRhMDE2ZWYxYWU4MWU4
MWM0MzJlMTFiZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdy
YXBwZXJXb3JsZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJX
b3JsZC5oCkBAIC01MSw2ICs1MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxE
T01XcmFwcGVyV29ybGQ+IGVuc3VyZUlzb2xhdGVkV29ybGQoaW50IHdvcmxkSWQsIGludCBleHRl
bnNpb25Hcm91cCk7CiAgICAgc3RhdGljIGJvb2wgaXNvbGF0ZWRXb3JsZHNFeGlzdCgpIHsgcmV0
dXJuIGlzb2xhdGVkV29ybGRDb3VudDsgfQogICAgIHN0YXRpYyBib29sIGlzSXNvbGF0ZWRXb3Js
ZElkKGludCB3b3JsZElkKSB7IHJldHVybiB3b3JsZElkICE9IG1haW5Xb3JsZElkICYmIHdvcmxk
SWQgIT0gdW5pbml0aWFsaXplZFdvcmxkSWQ7IH0KKyAgICBzdGF0aWMgdm9pZCBnZXRBbGxXb3Js
ZHMoVmVjdG9yPFJlZlB0cjxET01XcmFwcGVyV29ybGQ+ID4mIHdvcmxkcyk7CiAgICAgLy8gQXNz
b2NpYXRlcyBhbiBpc29sYXRlZCB3b3JsZCAoc2VlIGFib3ZlIGZvciBkZXNjcmlwdGlvbikgd2l0
aCBhIHNlY3VyaXR5CiAgICAgLy8gb3JpZ2luLiBYTUxIdHRwUmVxdWVzdCBpbnN0YW5jZXMgdXNl
ZCBpbiB0aGF0IHdvcmxkIHdpbGwgYmUgY29uc2lkZXJlZAogICAgIC8vIHRvIGNvbWUgZnJvbSB0
aGF0IG9yaWdpbiwgbm90IHRoZSBmcmFtZSdzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKaW5kZXggYjQ4NTdiNDUzOWY0ZDI0
M2JiNzBiYjhlOWU1ODIxMWIwMmQ3ZTI3NC4uZTBlNzEyMTdkM2UzY2IyYWYxODI2YjI0NWMyNWVk
ZDQ4ODk5Njc3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvUGFnZVNj
cmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9QYWdl
U2NyaXB0RGVidWdTZXJ2ZXIuY3BwCkBAIC05Miw4ICs5Miw4IEBAIHZvaWQgUGFnZVNjcmlwdERl
YnVnU2VydmVyOjphZGRMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0ZW5lciwgUGFn
ZSogcGFnCiAgICAgfQogICAgIG1fbGlzdGVuZXJzTWFwLnNldChwYWdlLCBsaXN0ZW5lcik7CiAK
LSAgICBWOERPTVdpbmRvd1NoZWxsKiBzaGVsbCA9IHNjcmlwdENvbnRyb2xsZXItPndpbmRvd1No
ZWxsKCk7Ci0gICAgaWYgKCFzaGVsbC0+aXNDb250ZXh0SW5pdGlhbGl6ZWQoKSkKKyAgICBWOERP
TVdpbmRvd1NoZWxsKiBzaGVsbCA9IHNjcmlwdENvbnRyb2xsZXItPmV4aXN0aW5nV2luZG93U2hl
bGwobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworICAgIGlmICghc2hlbGwgfHwgIXNoZWxsLT5p
c0NvbnRleHRJbml0aWFsaXplZCgpKQogICAgICAgICByZXR1cm47CiAgICAgdjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4gY29udGV4dCA9IHNoZWxsLT5jb250ZXh0KCk7CiAgICAgdjg6OkhhbmRsZTx2
ODo6RnVuY3Rpb24+IGdldFNjcmlwdHNGdW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+
OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCktPkdldCh2ODo6U3RyaW5nOjpOZXcoImdldFNj
cmlwdHMiKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9s
bGVyLmNwcAppbmRleCA3ODM2YTBmODY4ODYyYWFmMzI0OWQ2YTcwMTMzNmU5NTdiODg0MzRjLi44
MmVkMTc0YjVkODliMDM0NTQxZWVlZTBhZDYxMWUyZWU2MTM3ZjRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcApAQCAtMzMsNiArMzMsNyBA
QAogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkJpbmRpbmdTdGF0
ZS5oIgorI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1ZGUgIkRPTVdp
bmRvdy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKQEAgLTEx
MSw3ICsxMTIsNyBAQCBTY3JpcHRDb250cm9sbGVyOjpTY3JpcHRDb250cm9sbGVyKEZyYW1lKiBm
cmFtZSkKIAogU2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRyb2xsZXIoKQogewotICAgIHdp
bmRvd1NoZWxsKCktPmRlc3Ryb3lHbG9iYWwoKTsKKyAgICBtX3dpbmRvd1NoZWxsLT5kZXN0cm95
R2xvYmFsKCk7CiAgICAgY2xlYXJGb3JDbG9zZSgpOwogfQogCkBAIC0xNTQsMTcgKzE1NSwyMyBA
QCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnJlc2V0KCkKICAgICBWOEdDQ29udHJvbGxlcjo6aGlu
dEZvckNvbGxlY3RHYXJiYWdlKCk7CiB9CiAKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJG
b3JPdXRPZk1lbW9yeSgpCit7CisgICAgY2xlYXJGb3JDbG9zZSgpOworICAgIG1fd2luZG93U2hl
bGwtPmRlc3Ryb3lHbG9iYWwoKTsKK30KKwogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhckZv
ckNsb3NlKCkKIHsKICAgICBkb3VibGUgc3RhcnQgPSBjdXJyZW50VGltZSgpOwogICAgIHJlc2V0
KCk7Ci0gICAgd2luZG93U2hlbGwoKS0+Y2xlYXJGb3JDbG9zZSgpOworICAgIG1fd2luZG93U2hl
bGwtPmNsZWFyRm9yQ2xvc2UoKTsKICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1DdXN0
b21Db3VudHMoIldlYkNvcmUuU2NyaXB0Q29udHJvbGxlci5jbGVhckZvckNsb3NlIiwgKGN1cnJl
bnRUaW1lKCkgLSBzdGFydCkgKiAxMDAwLCAwLCAxMDAwMCwgNTApOwogfQogCiB2b2lkIFNjcmlw
dENvbnRyb2xsZXI6OnVwZGF0ZVNlY3VyaXR5T3JpZ2luKCkKIHsKLSAgICB3aW5kb3dTaGVsbCgp
LT51cGRhdGVTZWN1cml0eU9yaWdpbigpOworICAgIG1fd2luZG93U2hlbGwtPnVwZGF0ZVNlY3Vy
aXR5T3JpZ2luKCk7CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlUGxhdGZvcm1T
Y3JpcHRPYmplY3RzKCkKQEAgLTMxMCw0NiArMzE3LDY0IEBAIFNjcmlwdFZhbHVlIFNjcmlwdENv
bnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCiAg
ICAgcmV0dXJuIFNjcmlwdFZhbHVlKG9iamVjdCk7CiB9CiAKLVY4RE9NV2luZG93U2hlbGwqIFNj
cmlwdENvbnRyb2xsZXI6OmVuc3VyZUlzb2xhdGVkV29ybGRDb250ZXh0KGludCB3b3JsZElkLCBp
bnQgZXh0ZW5zaW9uR3JvdXApCitib29sIFNjcmlwdENvbnRyb2xsZXI6OmluaXRpYWxpemVNYWlu
V29ybGQoKQogewotICAgIEFTU0VSVCh3b3JsZElkICE9IERPTVdyYXBwZXJXb3JsZDo6bWFpbldv
cmxkSWQpOwotCi0gICAgLy8gQ2hlY2sgdGhlIG1hcCBmb3Igbm9uLXRlbXBvcmFyeSB3b3JsZHMu
Ci0gICAgaWYgKHdvcmxkSWQgIT0gRE9NV3JhcHBlcldvcmxkOjp1bmluaXRpYWxpemVkV29ybGRJ
ZCkgewotICAgICAgICBJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRl
ZFdvcmxkcy5maW5kKHdvcmxkSWQpOwotICAgICAgICBpZiAoaXRlciAhPSBtX2lzb2xhdGVkV29y
bGRzLmVuZCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXRlci0+dmFsdWUtPndvcmxkKCktPndv
cmxkSWQoKSA9PSB3b3JsZElkKTsKLSAgICAgICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZS0+d29y
bGQoKS0+ZXh0ZW5zaW9uR3JvdXAoKSA9PSBleHRlbnNpb25Hcm91cCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gaXRlci0+dmFsdWU7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKG1fd2luZG93U2hl
bGwtPmlzQ29udGV4dEluaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gd2luZG93U2hlbGwobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5pc0NvbnRleHRJbml0
aWFsaXplZCgpOworfQogCi0gICAgUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gd29ybGQgPSBET01X
cmFwcGVyV29ybGQ6OmVuc3VyZUlzb2xhdGVkV29ybGQod29ybGRJZCwgZXh0ZW5zaW9uR3JvdXAp
OwotICAgIE93blB0cjxWOERPTVdpbmRvd1NoZWxsPiBpc29sYXRlZFdvcmxkU2hlbGwgPSBWOERP
TVdpbmRvd1NoZWxsOjpjcmVhdGUobV9mcmFtZSwgd29ybGQpOwotICAgIG1faXNvbGF0ZWRXb3Js
ZHMuc2V0KHdvcmxkLT53b3JsZElkKCksIGlzb2xhdGVkV29ybGRTaGVsbC5nZXQoKSk7Ci0gICAg
cmV0dXJuIGlzb2xhdGVkV29ybGRTaGVsbC5sZWFrUHRyKCk7CisvLyBGSVhNRTogUmVtb3ZlIHRo
aXMgZnVuY3Rpb24uIFRoZXJlIGlzIGN1cnJlbnRseSBhbiBpc3N1ZSB3aXRoIHRoZSBpbnNwZWN0
b3IgcmVsYXRlZCB0byB0aGUgY2FsbCB0byBkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5X
b3JsZCBpbiBTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTaGVsbC4KK3N0YXRpYyBET01XcmFwcGVy
V29ybGQqIGV4aXN0aW5nV2luZG93U2hlbGxXb3JrYXJvdW5kV29ybGQoKQoreworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4sIHdvcmxkLCAoRE9NV3JhcHBl
cldvcmxkOjpjcmVhdGVVbmluaXRpYWxpemVkV29ybGQoKSkpOworICAgIHJldHVybiB3b3JsZC5n
ZXQoKTsKIH0KIAotVjhET01XaW5kb3dTaGVsbCogU2NyaXB0Q29udHJvbGxlcjo6ZXhpc3RpbmdX
aW5kb3dTaGVsbEludGVybmFsKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCitWOERPTVdpbmRvd1No
ZWxsKiBTY3JpcHRDb250cm9sbGVyOjpleGlzdGluZ1dpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3Js
ZCogd29ybGQpCiB7CiAgICAgQVNTRVJUKHdvcmxkKTsKIAotICAgIGlmIChMSUtFTFkod29ybGQt
PmlzTWFpbldvcmxkKCkpKQorICAgIGlmICh3b3JsZC0+aXNNYWluV29ybGQoKSkKKyAgICAgICAg
cmV0dXJuIG1fd2luZG93U2hlbGwtPmlzQ29udGV4dEluaXRpYWxpemVkKCkgPyBtX3dpbmRvd1No
ZWxsLmdldCgpIDogMDsKKworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBibG9jay4gU2VlIGNv
bW1lbnQgd2l0aCBleGlzdGluZ1dpbmRvd1NoZWxsV29ya2Fyb3VuZFdvcmxkKCkuCisgICAgaWYg
KHdvcmxkLT53b3JsZElkKCkgPT0gRE9NV3JhcHBlcldvcmxkOjp1bmluaXRpYWxpemVkV29ybGRJ
ZCkgeworICAgICAgICBBU1NFUlQod29ybGQgPT0gZXhpc3RpbmdXaW5kb3dTaGVsbFdvcmthcm91
bmRXb3JsZCgpKTsKICAgICAgICAgcmV0dXJuIG1fd2luZG93U2hlbGwuZ2V0KCk7CisgICAgfQog
CiAgICAgSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMu
ZmluZCh3b3JsZC0+d29ybGRJZCgpKTsKLSAgICByZXR1cm4gaXRlciA9PSBtX2lzb2xhdGVkV29y
bGRzLmVuZCgpID8gMCA6IGl0ZXItPnZhbHVlOworICAgIHJldHVybiBpdGVyID09IG1faXNvbGF0
ZWRXb3JsZHMuZW5kKCkgPyAwIDogaXRlci0+dmFsdWUtPmlzQ29udGV4dEluaXRpYWxpemVkKCkg
PyBpdGVyLT52YWx1ZSA6IDA7CiB9CiAKIFY4RE9NV2luZG93U2hlbGwqIFNjcmlwdENvbnRyb2xs
ZXI6OndpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiB7Ci0gICAgVjhET01XaW5k
b3dTaGVsbCogc2hlbGwgPSBleGlzdGluZ1dpbmRvd1NoZWxsSW50ZXJuYWwod29ybGQpOwotICAg
IGlmIChMSUtFTFkoISFzaGVsbCkpCi0gICAgICAgIHJldHVybiBzaGVsbDsKKyAgICBBU1NFUlQo
d29ybGQpOwogCi0gICAgT3duUHRyPFY4RE9NV2luZG93U2hlbGw+IGlzb2xhdGVkV29ybGRTaGVs
bCA9IFY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZShtX2ZyYW1lLCB3b3JsZCk7Ci0gICAgbV9pc29s
YXRlZFdvcmxkcy5zZXQod29ybGQtPndvcmxkSWQoKSwgaXNvbGF0ZWRXb3JsZFNoZWxsLmdldCgp
KTsKLSAgICByZXR1cm4gaXNvbGF0ZWRXb3JsZFNoZWxsLmxlYWtQdHIoKTsKKyAgICBWOERPTVdp
bmRvd1NoZWxsKiBzaGVsbCA9IDA7CisgICAgaWYgKHdvcmxkLT5pc01haW5Xb3JsZCgpKQorICAg
ICAgICBzaGVsbCA9IG1fd2luZG93U2hlbGwuZ2V0KCk7CisgICAgZWxzZSB7CisgICAgICAgIElz
b2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29y
bGQtPndvcmxkSWQoKSk7CisgICAgICAgIGlmIChpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5k
KCkpCisgICAgICAgICAgICBzaGVsbCA9IGl0ZXItPnZhbHVlOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIE93blB0cjxWOERPTVdpbmRvd1NoZWxsPiBpc29sYXRlZFdvcmxkU2hlbGwgPSBW
OERPTVdpbmRvd1NoZWxsOjpjcmVhdGUobV9mcmFtZSwgd29ybGQpOworICAgICAgICAgICAgc2hl
bGwgPSBpc29sYXRlZFdvcmxkU2hlbGwuZ2V0KCk7CisgICAgICAgICAgICBtX2lzb2xhdGVkV29y
bGRzLnNldCh3b3JsZC0+d29ybGRJZCgpLCBpc29sYXRlZFdvcmxkU2hlbGwubGVha1B0cigpKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIXNoZWxsLT5pc0NvbnRleHRJbml0aWFsaXplZCgp
KSB7CisgICAgICAgIGlmIChzaGVsbC0+aW5pdGlhbGl6ZUlmTmVlZGVkKCkpIHsKKyAgICAgICAg
ICAgIGlmICh3b3JsZC0+aXNNYWluV29ybGQoKSkKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
UmVtb3ZlIHRoaXMgaWYgY2xhdXNlLiBTZWUgY29tbWVudCB3aXRoIGV4aXN0aW5nV2luZG93U2hl
bGxXb3JrYXJvdW5kV29ybGQoKS4KKyAgICAgICAgICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+
ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoZXhpc3RpbmdXaW5kb3dTaGVsbFdv
cmthcm91bmRXb3JsZCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2Zy
YW1lLT5sb2FkZXIoKS0+ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQod29ybGQp
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzaGVsbDsKIH0KIAogdm9pZCBTY3JpcHRD
b250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgVmVj
dG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXAsIFZlY3Rv
cjxTY3JpcHRWYWx1ZT4qIHJlc3VsdHMpCkBAIC0zNjMsMTAgKzM4OCwxMCBAQCB2b2lkIFNjcmlw
dENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBW
ZWN0b3I8U2NyaXB0UwogICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHY4UmVzdWx0czsKICAgICB7
CiAgICAgICAgIHY4OjpIYW5kbGVTY29wZSBldmFsdWF0ZUhhbmRsZVNjb3BlOwotICAgICAgICBW
OERPTVdpbmRvd1NoZWxsKiBpc29sYXRlZFdvcmxkU2hlbGwgPSBlbnN1cmVJc29sYXRlZFdvcmxk
Q29udGV4dCh3b3JsZElELCBleHRlbnNpb25Hcm91cCk7CisgICAgICAgIFJlZlB0cjxET01XcmFw
cGVyV29ybGQ+IHdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjplbnN1cmVJc29sYXRlZFdvcmxkKHdv
cmxkSUQsIGV4dGVuc2lvbkdyb3VwKTsKKyAgICAgICAgVjhET01XaW5kb3dTaGVsbCogaXNvbGF0
ZWRXb3JsZFNoZWxsID0gd2luZG93U2hlbGwod29ybGQuZ2V0KCkpOwogCi0gICAgICAgIGlzb2xh
dGVkV29ybGRTaGVsbC0+aW5pdGlhbGl6ZUlmTmVlZGVkKCk7Ci0gICAgICAgIGlmIChpc29sYXRl
ZFdvcmxkU2hlbGwtPmNvbnRleHQoKS5Jc0VtcHR5KCkpCisgICAgICAgIGlmICghaXNvbGF0ZWRX
b3JsZFNoZWxsLT5pc0NvbnRleHRJbml0aWFsaXplZCgpKQogICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6
Q29udGV4dD46Ok5ldyhpc29sYXRlZFdvcmxkU2hlbGwtPmNvbnRleHQoKSk7CkBAIC00MTYsMTQg
KzQ0MSwxMiBAQCB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IFNjcmlwdENvbnRyb2xsZXI6OmN1cnJl
bnRXb3JsZENvbnRleHQoKQogICAgICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4
dD4oKTsKICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhjb250ZXh0
KTsKICAgICB9Ci0gICAgd2luZG93U2hlbGwoKS0+aW5pdGlhbGl6ZUlmTmVlZGVkKCk7Ci0gICAg
cmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyh3aW5kb3dTaGVsbCgpLT5jb250ZXh0
KCkpOworICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcod2luZG93U2hlbGwo
bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5jb250ZXh0KCkpOwogfQogCiB2ODo6TG9jYWw8djg6
OkNvbnRleHQ+IFNjcmlwdENvbnRyb2xsZXI6Om1haW5Xb3JsZENvbnRleHQoKQogewotICAgIHdp
bmRvd1NoZWxsKCktPmluaXRpYWxpemVJZk5lZWRlZCgpOwotICAgIHJldHVybiB2ODo6TG9jYWw8
djg6OkNvbnRleHQ+OjpOZXcod2luZG93U2hlbGwoKS0+Y29udGV4dCgpKTsKKyAgICByZXR1cm4g
djg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KHdpbmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxX
b3JsZCgpKS0+Y29udGV4dCgpKTsKIH0KIAogdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBTY3JpcHRD
b250cm9sbGVyOjptYWluV29ybGRDb250ZXh0KEZyYW1lKiBmcmFtZSkKQEAgLTQ1NCwyNiArNDc3
LDIzIEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6YmluZFRvV2luZG93T2JqZWN0KEZyYW1lKiBm
cmFtZSwgY29uc3QgU3RyaW5nJiBrZXksIE5QT2JqCiAKIGJvb2wgU2NyaXB0Q29udHJvbGxlcjo6
aGF2ZUludGVycHJldGVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gd2luZG93U2hlbGwoKS0+aXND
b250ZXh0SW5pdGlhbGl6ZWQoKTsKKyAgICByZXR1cm4gbV93aW5kb3dTaGVsbC0+aXNDb250ZXh0
SW5pdGlhbGl6ZWQoKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjplbmFibGVFdmFsKCkK
IHsKLSAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0gICAgdjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gdjhDb250ZXh0ID0gd2luZG93U2hlbGwoKS0+Y29udGV4dCgpOwotICAgIGlmICh2
OENvbnRleHQuSXNFbXB0eSgpKQorICAgIGlmICghbV93aW5kb3dTaGVsbC0+aXNDb250ZXh0SW5p
dGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgdjhDb250ZXh0LT5BbGxvd0NvZGVH
ZW5lcmF0aW9uRnJvbVN0cmluZ3ModHJ1ZSk7CisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNj
b3BlOworICAgIG1fd2luZG93U2hlbGwtPmNvbnRleHQoKS0+QWxsb3dDb2RlR2VuZXJhdGlvbkZy
b21TdHJpbmdzKHRydWUpOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmRpc2FibGVFdmFs
KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewotICAgIHY4OjpIYW5kbGVTY29wZSBoYW5k
bGVTY29wZTsKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSB3aW5kb3dT
aGVsbCgpLT5jb250ZXh0KCk7Ci0gICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCisgICAgaWYg
KCFtX3dpbmRvd1NoZWxsLT5pc0NvbnRleHRJbml0aWFsaXplZCgpKQogICAgICAgICByZXR1cm47
Ci0KKyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisgICAgdjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gdjhDb250ZXh0ID0gbV93aW5kb3dTaGVsbC0+Y29udGV4dCgpOwogICAgIHY4Q29u
dGV4dC0+QWxsb3dDb2RlR2VuZXJhdGlvbkZyb21TdHJpbmdzKGZhbHNlKTsKICAgICB2OENvbnRl
eHQtPlNldEVycm9yTWVzc2FnZUZvckNvZGVHZW5lcmF0aW9uRnJvbVN0cmluZ3ModjhTdHJpbmco
ZXJyb3JNZXNzYWdlKSk7CiB9CkBAIC01MzIsMTEgKzU1Miw2IEBAIHZvaWQgU2NyaXB0Q29udHJv
bGxlcjo6Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4oV2lkZ2V0KiBuYXRpdmVIYW5kbGUp
CiAgICAgbV9wbHVnaW5PYmplY3RzLnJlbW92ZShpdCk7CiB9CiAKLXZvaWQgU2NyaXB0Q29udHJv
bGxlcjo6Z2V0QWxsV29ybGRzKFZlY3RvcjxSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiA+JiB3b3Js
ZHMpCi17Ci0gICAgd29ybGRzLmFwcGVuZChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7Ci19Ci0K
IHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKGNvbnN0IFNjcmlwdFNvdXJj
ZUNvZGUmIHNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERP
TVdyYXBwZXJXb3JsZCogd29ybGQpCiB7CkBAIC02MzUsNyArNjUwLDcgQEAgdm9pZCBTY3JpcHRD
b250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKERPTVdpbmRvdyosIGJvb2wpCiAgICAgcmVzZXQo
KTsKICAgICAvLyBWOCBiaW5kaW5nIGV4cGVjdHMgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5k
b3dTaGVsbCBvbmx5IGJlIGNhbGxlZAogICAgIC8vIHdoZW4gYSBmcmFtZSBpcyBsb2FkaW5nIGEg
bmV3IHBhZ2UuIFRoaXMgY3JlYXRlcyBhIG5ldyBjb250ZXh0IGZvciB0aGUgbmV3IHBhZ2UuCi0g
ICAgd2luZG93U2hlbGwoKS0+Y2xlYXJGb3JOYXZpZ2F0aW9uKCk7CisgICAgbV93aW5kb3dTaGVs
bC0+Y2xlYXJGb3JOYXZpZ2F0aW9uKCk7CiAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFt
Q3VzdG9tQ291bnRzKCJXZWJDb3JlLlNjcmlwdENvbnRyb2xsZXIuY2xlYXJXaW5kb3dTaGVsbCIs
IChjdXJyZW50VGltZSgpIC0gc3RhcnQpICogMTAwMCwgMCwgMTAwMDAsIDUwKTsKIH0KIApAQCAt
NjY1LDEwICs2ODAsMTAgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjb2xsZWN0SXNvbGF0ZWRD
b250ZXh0cyhWZWN0b3I8c3RkOjpwYWlyPFNjcmlwdFN0YXRlKiwgU2UKIGJvb2wgU2NyaXB0Q29u
dHJvbGxlcjo6c2V0Q29udGV4dERlYnVnSWQoaW50IGRlYnVnSWQpCiB7CiAgICAgQVNTRVJUKGRl
YnVnSWQgPiAwKTsKLSAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7Ci0gICAgdjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4gY29udGV4dCA9IHdpbmRvd1NoZWxsKCktPmNvbnRleHQoKTsKLSAgICBpZiAo
Y29udGV4dC5Jc0VtcHR5KCkpCisgICAgaWYgKCFtX3dpbmRvd1NoZWxsLT5pc0NvbnRleHRJbml0
aWFsaXplZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNj
b3BlOworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBtX3dpbmRvd1NoZWxs
LT5jb250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0LT5HZXREYXRhKCktPklzVW5kZWZpbmVkKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNzAxLDE3ICs3MTYsMjAgQEAgdm9pZCBTY3Jp
cHRDb250cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcih2b2lkKikKIAogdm9pZCBTY3JpcHRDb250cm9s
bGVyOjp1cGRhdGVEb2N1bWVudCgpCiB7Ci0gICAgd2luZG93U2hlbGwoKS0+dXBkYXRlRG9jdW1l
bnQoKTsKKyAgICBpZiAoIW1fZnJhbWUtPmxvYWRlcigpLT5mcmFtZUhhc0xvYWRlZCgpKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKCFpbml0aWFsaXplTWFpbldvcmxkKCkpCisgICAgICAgIHdp
bmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+dXBkYXRlRG9jdW1lbnQoKTsKIH0K
IAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpuYW1lZEl0ZW1BZGRlZChIVE1MRG9jdW1lbnQqIGRv
YywgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewotICAgIHdpbmRvd1NoZWxsKCktPm5hbWVk
SXRlbUFkZGVkKGRvYywgbmFtZSk7CisgICAgd2luZG93U2hlbGwobWFpblRocmVhZE5vcm1hbFdv
cmxkKCkpLT5uYW1lZEl0ZW1BZGRlZChkb2MsIG5hbWUpOwogfQogCiB2b2lkIFNjcmlwdENvbnRy
b2xsZXI6Om5hbWVkSXRlbVJlbW92ZWQoSFRNTERvY3VtZW50KiBkb2MsIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSkKIHsKLSAgICB3aW5kb3dTaGVsbCgpLT5uYW1lZEl0ZW1SZW1vdmVkKGRvYywg
bmFtZSk7CisgICAgd2luZG93U2hlbGwobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5uYW1lZEl0
ZW1SZW1vdmVkKGRvYywgbmFtZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAppbmRleCBiNjZjZWQ3
ZmI0OWVkZDFjMWE0YzRlZjU5NjhmZTg3ODA1YjA5ODdhLi5jMTgyM2ExMzUxZjI5YWVjNWRkZmEz
NTEyMGU3N2JhN2U2M2VlNTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0Q29udHJvbGxlci5oCkBAIC02NiwxMSArNjYsOSBAQCBwdWJsaWM6CiAgICAgU2NyaXB0Q29u
dHJvbGxlcihGcmFtZSopOwogICAgIH5TY3JpcHRDb250cm9sbGVyKCk7CiAKLSAgICBWOERPTVdp
bmRvd1NoZWxsKiB3aW5kb3dTaGVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93U2hlbGwuZ2V0
KCk7IH0KKyAgICBib29sIGluaXRpYWxpemVNYWluV29ybGQoKTsKICAgICBWOERPTVdpbmRvd1No
ZWxsKiB3aW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqKTsKLSAgICAvLyBGSVhNRTogUmVwbGFj
ZSBleGlzdGluZ1dpbmRvd1NoZWxsIHdpdGggZXhpc3RpbmdXaW5kb3dTaGVsbEludGVybmFsIHNl
ZSBjb21tZW50IGluIFY4RE9NV2luZG93U2hlbGw6OmluaXRpYWxpemVJZk5lZWRlZC4KLSAgICBT
Y3JpcHRDb250cm9sbGVyKiBleGlzdGluZ1dpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCopIHsg
cmV0dXJuIHRoaXM7IH0KLSAgICBWOERPTVdpbmRvd1NoZWxsKiBleGlzdGluZ1dpbmRvd1NoZWxs
SW50ZXJuYWwoRE9NV3JhcHBlcldvcmxkKik7CisgICAgVjhET01XaW5kb3dTaGVsbCogZXhpc3Rp
bmdXaW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqKTsKIAogICAgIFNjcmlwdFZhbHVlIGV4ZWN1
dGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpOwogICAgIFNjcmlwdFZhbHVlIGV4ZWN1
dGVTY3JpcHQoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGJvb2wgZm9yY2VVc2VyR2VzdHVyZSA9IGZh
bHNlKTsKQEAgLTE2OCwxMyArMTY2LDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFudXBTY3Jp
cHRPYmplY3RzRm9yUGx1Z2luKFdpZGdldCopOwogCiAgICAgdm9pZCBjbGVhckZvckNsb3NlKCk7
CisgICAgdm9pZCBjbGVhckZvck91dE9mTWVtb3J5KCk7CisKIAogICAgIE5QT2JqZWN0KiBjcmVh
dGVTY3JpcHRPYmplY3RGb3JQbHVnaW5FbGVtZW50KEhUTUxQbHVnSW5FbGVtZW50Kik7CiAgICAg
TlBPYmplY3QqIHdpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CiAKLSAgICAvLyBEdW1teSBtZXRob2Qg
dG8gYXZvaWQgYSBidW5jaCBvZiBpZmRlZidzIGluIFdlYkNvcmUuCiAgICAgdm9pZCBldmFsdWF0
ZUluV29ybGQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYsIERPTVdyYXBwZXJXb3JsZCopOwotICAg
IHN0YXRpYyB2b2lkIGdldEFsbFdvcmxkcyhWZWN0b3I8UmVmUHRyPERPTVdyYXBwZXJXb3JsZD4g
PiYgd29ybGRzKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRBbGxXb3JsZHMoVmVjdG9yPFJlZlB0cjxE
T01XcmFwcGVyV29ybGQ+ID4mIHdvcmxkcykKKyAgICB7CisgICAgICAgIERPTVdyYXBwZXJXb3Js
ZDo6Z2V0QWxsV29ybGRzKHdvcmxkcyk7CisgICAgfQogCiAgICAgLy8gUmVnaXN0ZXJzIGEgdjgg
ZXh0ZW5zaW9uIHRvIGJlIGF2YWlsYWJsZSBvbiB3ZWJwYWdlcy4gV2lsbCBvbmx5CiAgICAgLy8g
YWZmZWN0IHY4IGNvbnRleHRzIGluaXRpYWxpemVkIGFmdGVyIHRoaXMgY2FsbC4gVGFrZXMgb3du
ZXJzaGlwIG9mCkBAIC0xOTYsNyArMTk4LDYgQEAgcHJpdmF0ZToKICAgICBGcmFtZSogbV9mcmFt
ZTsKICAgICBjb25zdCBTdHJpbmcqIG1fc291cmNlVVJMOwogCi0gICAgVjhET01XaW5kb3dTaGVs
bCogZW5zdXJlSXNvbGF0ZWRXb3JsZENvbnRleHQoaW50IHdvcmxkSWQsIGludCBleHRlbnNpb25H
cm91cCk7CiAgICAgT3duUHRyPFY4RE9NV2luZG93U2hlbGw+IG1fd2luZG93U2hlbGw7CiAKICAg
ICAvLyBUaGUgaXNvbGF0ZWQgd29ybGRzIHdlIGFyZSB0cmFja2luZyBmb3IgdGhpcyBmcmFtZS4g
V2UgaG9sZCB0aGVtIGFsaXZlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEJpbmRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNw
cAppbmRleCA3YzM1ZDQ1YjQ0ODg1MGMwY2U2Y2VmN2QyODgxY2ViMzQxZWZlYWQxLi42ZTkzMDc5
OGUyMTI4OGQ4YWViOTRkYTIzMDVjNDU4NTBhM2U0MjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4QmluZGluZy5jcHAKQEAgLTMyMyw3ICszMjMsOCBAQCBWOFBlckNvbnRleHREYXRh
KiBwZXJDb250ZXh0RGF0YUZvckN1cnJlbnRXb3JsZChGcmFtZSogZnJhbWUpCiAgICAgVjhET01X
aW5kb3dTaGVsbCogaXNvbGF0ZWRTaGVsbDsKICAgICBpZiAoVU5MSUtFTFkoISEoaXNvbGF0ZWRT
aGVsbCA9IFY4RE9NV2luZG93U2hlbGw6OmdldEVudGVyZWQoKSkpKQogICAgICAgICByZXR1cm4g
aXNvbGF0ZWRTaGVsbC0+cGVyQ29udGV4dERhdGEoKTsKLSAgICByZXR1cm4gZnJhbWUtPnNjcmlw
dCgpLT53aW5kb3dTaGVsbCgpLT5wZXJDb250ZXh0RGF0YSgpOworICAgIFY4RE9NV2luZG93U2hl
bGwqIG1haW5TaGVsbCA9IGZyYW1lLT5zY3JpcHQoKS0+ZXhpc3RpbmdXaW5kb3dTaGVsbChtYWlu
VGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAgcmV0dXJuIG1haW5TaGVsbCA/IG1haW5TaGVsbC0+
cGVyQ29udGV4dERhdGEoKSA6IDA7CiB9CiAKIGJvb2wgaGFuZGxlT3V0T2ZNZW1vcnkoKQpAQCAt
MzM4LDggKzMzOSw3IEBAIGJvb2wgaGFuZGxlT3V0T2ZNZW1vcnkoKQogICAgIGlmICghZnJhbWUp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgZnJhbWUtPnNjcmlwdCgpLT5jbGVhckZvckNs
b3NlKCk7Ci0gICAgZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT5kZXN0cm95R2xvYmFs
KCk7CisgICAgZnJhbWUtPnNjcmlwdCgpLT5jbGVhckZvck91dE9mTWVtb3J5KCk7CiAKICNpZiBQ
TEFURk9STShDSFJPTUlVTSkKICAgICBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWRFeGhh
dXN0TWVtb3J5QXZhaWxhYmxlRm9yU2NyaXB0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCmluZGV4IDRkMzdmYzkzY2EzYjM0Nzk1NjAwNjY3
MzIyYmRiNzNiYmVlMmM5MDguLmEwMTkyYTY5NjkyMTczNWIzOTAxMGU2MjMzNzA2ZGRiYzViYThi
MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hl
bGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwu
Y3BwCkBAIC0yMDEsMTIgKzIwMSw2IEBAIFY4RE9NV2luZG93U2hlbGw6OlY4RE9NV2luZG93U2hl
bGwoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gd29yCiB7CiB9CiAK
LWJvb2wgVjhET01XaW5kb3dTaGVsbDo6aXNDb250ZXh0SW5pdGlhbGl6ZWQoKQotewotICAgIEFT
U0VSVChtX2NvbnRleHQuaXNFbXB0eSgpIHx8ICFtX2dsb2JhbC5pc0VtcHR5KCkpOwotICAgIHJl
dHVybiAhbV9jb250ZXh0LmlzRW1wdHkoKTsKLX0KLQogdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpk
ZXN0cm95SXNvbGF0ZWRTaGVsbCgpCiB7CiAgICAgZGlzcG9zZUNvbnRleHQodHJ1ZSk7CkBAIC0z
NDcsOSArMzQxLDggQEAgYm9vbCBWOERPTVdpbmRvd1NoZWxsOjppbml0aWFsaXplSWZOZWVkZWQo
KQogCiAgICAgLy8gRmxhZyBjb250ZXh0IGFzIGlzb2xhdGVkLgogICAgIGlmICghaXNNYWluV29y
bGQpIHsKLSAgICAgICAgVjhET01XaW5kb3dTaGVsbCogbWFpbldpbmRvdyA9IG1fZnJhbWUtPnNj
cmlwdCgpLT53aW5kb3dTaGVsbCgpOwotICAgICAgICBtYWluV2luZG93LT5pbml0aWFsaXplSWZO
ZWVkZWQoKTsKLSAgICAgICAgaWYgKCFtYWluV2luZG93LT5jb250ZXh0KCkuSXNFbXB0eSgpKQor
ICAgICAgICBWOERPTVdpbmRvd1NoZWxsKiBtYWluV2luZG93ID0gbV9mcmFtZS0+c2NyaXB0KCkt
PmV4aXN0aW5nV2luZG93U2hlbGwobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworICAgICAgICBp
ZiAobWFpbldpbmRvdyAmJiAhbWFpbldpbmRvdy0+Y29udGV4dCgpLklzRW1wdHkoKSkKICAgICAg
ICAgICAgIHNldEluamVjdGVkU2NyaXB0Q29udGV4dERlYnVnSWQobV9jb250ZXh0LmdldCgpLCBt
X2ZyYW1lLT5zY3JpcHQoKS0+Y29udGV4dERlYnVnSWQobWFpbldpbmRvdy0+Y29udGV4dCgpKSk7
CiAgICAgICAgIHNldElzb2xhdGVkV29ybGRGaWVsZCh0aGlzLCBjb250ZXh0KTsKICAgICB9CkBA
IC0zODksMTMgKzM4Miw2IEBAIGJvb2wgVjhET01XaW5kb3dTaGVsbDo6aW5pdGlhbGl6ZUlmTmVl
ZGVkKCkKICAgICAgICAgfQogICAgIH0KICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkt
PmRpZENyZWF0ZVNjcmlwdENvbnRleHQobV9jb250ZXh0LmdldCgpLCBtX3dvcmxkLT5leHRlbnNp
b25Hcm91cCgpLCBtX3dvcmxkLT53b3JsZElkKCkpOwotCi0gICAgaWYgKGlzTWFpbldvcmxkKSB7
Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNhbGwgaXMgcHJvYmFibHkgaW4gdGhlIHdyb25nIHNw
b3QsIGJ1dCBjYXVzZXMgYSB0ZXN0IHRpbWVvdXQgZm9yIGh0dHAvdGVzdHMvbWlzYy93aW5kb3ct
b3Blbi10aGVuLXdyaXRlLmh0bWwgd2hlbiByZW1vdmVkLgotICAgICAgICAvLyBBZGRpdGlvbmFs
bHksIFNjcmlwdENvbnRyb2xsZXI6OmV4aXN0aW5nV2luZG93U2hlbGwgY2Fubm90IGJlIGNvcnJl
Y3RseSBpbXBsZW1lbnRlZCB1bnRpbCB0aGlzIGNhbGwgaXMgZ29uZS4KLSAgICAgICAgbV9mcmFt
ZS0+bG9hZGVyKCktPmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKDApOwotICAg
IH0KLQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01NTMsNyArNTM5LDcgQEAgdm9pZCBWOERP
TVdpbmRvd1NoZWxsOjp1cGRhdGVEb2N1bWVudCgpCiAgICAgQVNTRVJUKG1fd29ybGQtPmlzTWFp
bldvcmxkKCkpOwogICAgIGlmIChtX2dsb2JhbC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBpZiAoIWluaXRpYWxpemVJZk5lZWRlZCgpKQorICAgIGlmIChtX2NvbnRleHQuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAgICAgdXBkYXRlRG9jdW1lbnRQcm9wZXJ0eSgpOwogICAg
IHVwZGF0ZVNlY3VyaXR5T3JpZ2luKCk7CkBAIC01NzgsNyArNTY0LDcgQEAgdm9pZCBWOERPTVdp
bmRvd1NoZWxsOjpuYW1lZEl0ZW1BZGRlZChIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBB
dG9taWNTdHJpbmcKIHsKICAgICBBU1NFUlQobV93b3JsZC0+aXNNYWluV29ybGQoKSk7CiAKLSAg
ICBpZiAoIWluaXRpYWxpemVJZk5lZWRlZCgpKQorICAgIGlmIChtX2NvbnRleHQuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CkBA
IC01OTMsMTAgKzU3OSwxMCBAQCB2b2lkIFY4RE9NV2luZG93U2hlbGw6Om5hbWVkSXRlbVJlbW92
ZWQoSFRNTERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaQogewogICAgIEFTU0VS
VChtX3dvcmxkLT5pc01haW5Xb3JsZCgpKTsKIAotICAgIGlmIChkb2N1bWVudC0+aGFzTmFtZWRJ
dGVtKG5hbWUuaW1wbCgpKSB8fCBkb2N1bWVudC0+aGFzRXh0cmFOYW1lZEl0ZW0obmFtZS5pbXBs
KCkpKQorICAgIGlmIChtX2NvbnRleHQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAoIWluaXRpYWxpemVJZk5lZWRlZCgpKQorICAgIGlmIChkb2N1bWVudC0+aGFzTmFtZWRJ
dGVtKG5hbWUuaW1wbCgpKSB8fCBkb2N1bWVudC0+aGFzRXh0cmFOYW1lZEl0ZW0obmFtZS5pbXBs
KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxs
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmgKaW5kZXgg
N2QyMDZkNGNkNjllZTYzZjY4NDI4NzE4ZjdlYjhmMmVhNTQzYzY3Mi4uNGJkZDg1MzZiMTU3Yzdm
NjRlNTE4MWFiMDQ4OWViNzQ4MzhiYzA2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NV2luZG93U2hlbGwuaApAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAgICAgLy8g
KGUuZy4sIGFmdGVyIHNldHRpbmcgZG9jb3VtZW50LmRvbWFpbikuCiAgICAgdm9pZCB1cGRhdGVT
ZWN1cml0eU9yaWdpbigpOwogCi0gICAgYm9vbCBpc0NvbnRleHRJbml0aWFsaXplZCgpOworICAg
IGJvb2wgaXNDb250ZXh0SW5pdGlhbGl6ZWQoKSB7IHJldHVybiAhbV9jb250ZXh0LmlzRW1wdHko
KTsgfQogCiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IGNyZWF0ZU5ld0NvbnRleHQo
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnbG9iYWwsIGludCBleHRlbnNpb25Hcm91cCwgaW50IHdv
cmxkSWQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhEb2N1bWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhEb2N1bWVudEN1c3RvbS5jcHAKaW5kZXggODFkMjQ0MmFiZGE1MDU1YWFjNTRkMGFjNzU2M2Jj
ZDdlNjc2YTA0ZC4uNTk3OTA4Y2QzZTI2MDFkOGEzYzk3ZmRlNDhmZTg2MGQzZjkyOTkxMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0
b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50
Q3VzdG9tLmNwcApAQCAtMTEwLDcgKzExMCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4
KERvY3VtZW50KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4CiAg
ICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIGlmICghVjhET01XaW5kb3dTaGVsbDo6Z2V0RW50
ZXJlZCgpKSB7CiAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBpbXBsLT5mcmFtZSgpKQotICAg
ICAgICAgICAgZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT51cGRhdGVEb2N1bWVudFdy
YXBwZXIod3JhcHBlcik7CisgICAgICAgICAgICBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxs
KG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+dXBkYXRlRG9jdW1lbnRXcmFwcGVyKHdyYXBwZXIp
OwogICAgIH0KICAgICByZXR1cm4gd3JhcHBlcjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwCmluZGV4
IDBkNDcxOWZhNWE2OWJhY2Q4MTk0YWI0ZWI3ODI3Y2M3ZWQ0YmUzMzYuLjVhYzVkMDAwZDJlMDBk
YzkxZjJjMzFmYmRhZTQzOTc2ZWJkN2Q2MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcApAQCAtMTg1
LDcgKzE4NSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEhUTUxEb2N1bWVudCogaW1w
bCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvCiAgICAgICAgIHJldHVybiB3cmFw
cGVyOwogICAgIGlmICghVjhET01XaW5kb3dTaGVsbDo6Z2V0RW50ZXJlZCgpKSB7CiAgICAgICAg
IGlmIChGcmFtZSogZnJhbWUgPSBpbXBsLT5mcmFtZSgpKQotICAgICAgICAgICAgZnJhbWUtPnNj
cmlwdCgpLT53aW5kb3dTaGVsbCgpLT51cGRhdGVEb2N1bWVudFdyYXBwZXIod3JhcHBlcik7Cisg
ICAgICAgICAgICBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxX
b3JsZCgpKS0+dXBkYXRlRG9jdW1lbnRXcmFwcGVyKHdyYXBwZXIpOwogICAgIH0KICAgICByZXR1
cm4gd3JhcHBlcjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcAppbmRleCAwOTkxZGZjMTc4MDk2Yzc2Yzdj
YjgyN2FhMGZiZGUzMjVmYzA0MjUzLi42MDczOGQ3ZTllNzg0YmE2ZGViZjBjZGUwMDlkZWY1ZjY3
MzE5MGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhT
VkdEb2N1bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4U1ZHRG9jdW1lbnRDdXN0b20uY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB0b1Y4KFNWR0RvY3VtZW50KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IGNyZWF0aW9uQ29uCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIGlmICghVjhET01XaW5k
b3dTaGVsbDo6Z2V0RW50ZXJlZCgpKSB7CiAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBpbXBs
LT5mcmFtZSgpKQotICAgICAgICAgICAgZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT51
cGRhdGVEb2N1bWVudFdyYXBwZXIod3JhcHBlcik7CisgICAgICAgICAgICBmcmFtZS0+c2NyaXB0
KCktPndpbmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+dXBkYXRlRG9jdW1lbnRX
cmFwcGVyKHdyYXBwZXIpOwogICAgIH0KICAgICByZXR1cm4gd3JhcHBlcjsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171254</attachid>
            <date>2012-10-29 09:08:22 -0700</date>
            <delta_ts>2012-11-09 00:07:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100235-20121029170648.patch</filename>
            <type>text/plain</type>
            <size>26780</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyNzYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjQ2Y2Q0ODlmYTUyYWIx
NjQxOGY1MjYzYjYyY2QyYTU2MTRhMDQ2Mi4uMDU2YjNjNWI5NTdjZDVmNTVkYWI3MDIzNTEzZTJi
MmRkYWI3ZTBiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDEyLTEwLTI5ICBEYW4g
Q2FybmV5ICA8ZGNhcm5leUBnb29nbGUuY29tPgorCisgICAgICAgIFtWOF0gUmVtb3ZlIFNjcmlw
dENvbnRyb2xsZXI6OndpbmRvd1NoZWxsKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMDIzNQorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFy
dGguCisKKyAgICAgICAgUmVmYWN0b3JlZCB3aW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqKSBh
bmQKKyAgICAgICAgZXhpc3RpbmdXaW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqKSB0byBiZSBs
aWtlIEpTQy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGNoYW5nZSBpbiBmdW5jdGlvbmFs
aXR5LgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06Cisg
ICAgICAgIChHZW5lcmF0ZVRvVjhDb252ZXJ0ZXJzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9E
T01XcmFwcGVyV29ybGQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNvbGF0ZWRXb3JsZE1hcCk6
CisgICAgICAgIChXZWJDb3JlOjpET01XcmFwcGVyV29ybGQ6OmdldEFsbFdvcmxkcyk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaDoK
KyAgICAgICAgKERPTVdyYXBwZXJXb3JsZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvUGFnZVNj
cmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTY3JpcHREZWJ1Z1Nl
cnZlcjo6YWRkTGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRy
b2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJGb3JPdXRP
Zk1lbW9yeSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENv
bnRyb2xsZXI6OmNsZWFyRm9yQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJv
bGxlcjo6dXBkYXRlU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6aW5pdGlhbGl6ZU1haW5Xb3JsZCk6IFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFpbiB3
b3JsZCB3YXMgaW5pdGlhbGl6ZWQuCisgICAgICAgIChXZWJDb3JlOjpleGlzdGluZ1dpbmRvd1No
ZWxsV29ya2Fyb3VuZFdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
OmV4aXN0aW5nV2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6d2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZh
bHVhdGVJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6Y3VycmVudFdvcmxkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9s
bGVyOjptYWluV29ybGRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xs
ZXI6OmhhdmVJbnRlcnByZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVy
OjplbmFibGVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmRpc2Fi
bGVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93
U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6c2V0Q29udGV4dERl
YnVnSWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6bmFtZWRJdGVtQWRkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6bmFtZWRJdGVtUmVtb3ZlZCk6
CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAoU2Ny
aXB0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpnZXRB
bGxXb3JsZHMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpwZXJDb250ZXh0RGF0YUZvckN1cnJlbnRXb3JsZCk6CisgICAgICAgIChXZWJD
b3JlOjpoYW5kbGVPdXRPZk1lbW9yeSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5k
b3dTaGVsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjppbml0aWFs
aXplSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6dXBkYXRl
RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVt
QWRkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVtUmVt
b3ZlZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oOgorICAgICAg
ICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6aXNDb250ZXh0SW5pdGlhbGl6ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6aXNHbG9iYWxJbml0aWFsaXplZCk6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERv
Y3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRvVjgpOgorCiAyMDEyLTEwLTI4ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZW5hbWUgTG9jYWxpemVyLntjcHAsaH0gdG8gUGxhdGZvcm1Mb2NhbGUu
e2NwcCxofQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbQppbmRleCAzOTdkMmMzOGUzNjIwNDI3ZTZiM2YxMGUzYWQ4MjE0YmRmMGRmZTI4
Li5mN2FlODA2ZjRkZTgxZGIzMzg5NDNhMjM2NTAwNzFkOGQwYWYwYjA5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMzQy
NCw4ICszNDI0LDggQEAgRU5ECiAgICAgaWYgKElzU3ViVHlwZSgkZGF0YU5vZGUsICJEb2N1bWVu
dCIpKSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CiAgICAgaWYgKEZyYW1l
KiBmcmFtZSA9IGltcGwtPmZyYW1lKCkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT5zY3JpcHQoKS0+
d2luZG93U2hlbGwoKS0+Y29udGV4dCgpLklzRW1wdHkoKSAmJiBmcmFtZS0+c2NyaXB0KCktPndp
bmRvd1NoZWxsKCktPmluaXRpYWxpemVJZk5lZWRlZCgpKSB7Ci0gICAgICAgICAgICAvLyBpbml0
aWFsaXplSWZOZWVkZWQgbWF5IGhhdmUgY3JlYXRlZCBhIHdyYXBwZXIgZm9yIHRoZSBvYmplY3Qs
IHJldHJ5IGZyb20gdGhlIHN0YXJ0LgorICAgICAgICBpZiAoZnJhbWUtPnNjcmlwdCgpLT5pbml0
aWFsaXplTWFpbldvcmxkKCkpIHsKKyAgICAgICAgICAgIC8vIGluaXRpYWxpemVNYWluV29ybGQg
bWF5IGhhdmUgY3JlYXRlZCBhIHdyYXBwZXIgZm9yIHRoZSBvYmplY3QsIHJldHJ5IGZyb20gdGhl
IHN0YXJ0LgogICAgICAgICAgICAgcmV0dXJuICR7Y2xhc3NOYW1lfTo6d3JhcChpbXBsLmdldCgp
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAKaW5kZXggNmRmMGI3MmQ1
YWIyNGI2MWEzZDFmYzBiMDcxZjUyYzlhZmE4ZTRhZS4uZTcxYjg5ZTkwZTUyMGJlMTczY2VjYjQ1
N2I4ZjNkZWE1MzM5NzQ4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
RE9NV3JhcHBlcldvcmxkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01X
cmFwcGVyV29ybGQuY3BwCkBAIC01NSwxNCArNTUsMjIgQEAgRE9NV3JhcHBlcldvcmxkKiBtYWlu
VGhyZWFkTm9ybWFsV29ybGQoKQogICAgIHJldHVybiBjYWNoZWROb3JtYWxXb3JsZC5nZXQoKTsK
IH0KIAotLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGdvIHRvIFBlcklzb2xhdGVEYXRh
LgogdHlwZWRlZiBIYXNoTWFwPGludCwgRE9NV3JhcHBlcldvcmxkKj4gV29ybGRNYXA7CiBzdGF0
aWMgV29ybGRNYXAmIGlzb2xhdGVkV29ybGRNYXAoKQogeworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChXb3JsZE1hcCwgbWFwLCAoKSk7CiAgICAg
cmV0dXJuIG1hcDsKIH0KIAordm9pZCBET01XcmFwcGVyV29ybGQ6OmdldEFsbFdvcmxkcyhWZWN0
b3I8UmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gPiYgd29ybGRzKQoreworICAgIHdvcmxkcy5hcHBl
bmQobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworICAgIFdvcmxkTWFwJiBpc29sYXRlZFdvcmxk
cyA9IGlzb2xhdGVkV29ybGRNYXAoKTsKKyAgICBmb3IgKFdvcmxkTWFwOjppdGVyYXRvciBpdCA9
IGlzb2xhdGVkV29ybGRzLmJlZ2luKCk7IGl0ICE9IGlzb2xhdGVkV29ybGRzLmVuZCgpOyArK2l0
KQorICAgICAgICB3b3JsZHMuYXBwZW5kKGl0LT52YWx1ZSk7Cit9CisKIHZvaWQgRE9NV3JhcHBl
cldvcmxkOjpkZWFsbG9jYXRlKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiB7CiAgICAgaW50IHdv
cmxkSWQgPSB3b3JsZC0+d29ybGRJZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9E
T01XcmFwcGVyV29ybGQuaAppbmRleCBhZjU1Yzk0MDkwZjA2ZDEzMTAyZDdiMDA5NzBjZWI3MjE4
ZGMzYjJlLi5kODA5ZTgxYmExNmVlMWE0YTAxNmVmMWFlODFlODFjNDMyZTExYmQzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaApAQCAtNTEsNiArNTEs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBlbnN1
cmVJc29sYXRlZFdvcmxkKGludCB3b3JsZElkLCBpbnQgZXh0ZW5zaW9uR3JvdXApOwogICAgIHN0
YXRpYyBib29sIGlzb2xhdGVkV29ybGRzRXhpc3QoKSB7IHJldHVybiBpc29sYXRlZFdvcmxkQ291
bnQ7IH0KICAgICBzdGF0aWMgYm9vbCBpc0lzb2xhdGVkV29ybGRJZChpbnQgd29ybGRJZCkgeyBy
ZXR1cm4gd29ybGRJZCAhPSBtYWluV29ybGRJZCAmJiB3b3JsZElkICE9IHVuaW5pdGlhbGl6ZWRX
b3JsZElkOyB9CisgICAgc3RhdGljIHZvaWQgZ2V0QWxsV29ybGRzKFZlY3RvcjxSZWZQdHI8RE9N
V3JhcHBlcldvcmxkPiA+JiB3b3JsZHMpOwogICAgIC8vIEFzc29jaWF0ZXMgYW4gaXNvbGF0ZWQg
d29ybGQgKHNlZSBhYm92ZSBmb3IgZGVzY3JpcHRpb24pIHdpdGggYSBzZWN1cml0eQogICAgIC8v
IG9yaWdpbi4gWE1MSHR0cFJlcXVlc3QgaW5zdGFuY2VzIHVzZWQgaW4gdGhhdCB3b3JsZCB3aWxs
IGJlIGNvbnNpZGVyZWQKICAgICAvLyB0byBjb21lIGZyb20gdGhhdCBvcmlnaW4sIG5vdCB0aGUg
ZnJhbWUncy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1BhZ2VTY3Jp
cHREZWJ1Z1NlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9QYWdlU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwCmluZGV4IGI0ODU3YjQ1MzlmNGQyNDNiYjcwYmI4ZTllNTgyMTFiMDJk
N2UyNzQuLmUwZTcxMjE3ZDNlM2NiMmFmMTgyNmIyNDVjMjVlZGQ0ODg5OTY3NzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNw
cApAQCAtOTIsOCArOTIsOCBAQCB2b2lkIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlcjo6YWRkTGlzdGVu
ZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2UqIHBhZwogICAgIH0KICAgICBt
X2xpc3RlbmVyc01hcC5zZXQocGFnZSwgbGlzdGVuZXIpOwogCi0gICAgVjhET01XaW5kb3dTaGVs
bCogc2hlbGwgPSBzY3JpcHRDb250cm9sbGVyLT53aW5kb3dTaGVsbCgpOwotICAgIGlmICghc2hl
bGwtPmlzQ29udGV4dEluaXRpYWxpemVkKCkpCisgICAgVjhET01XaW5kb3dTaGVsbCogc2hlbGwg
PSBzY3JpcHRDb250cm9sbGVyLT5leGlzdGluZ1dpbmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxX
b3JsZCgpKTsKKyAgICBpZiAoIXNoZWxsIHx8ICFzaGVsbC0+aXNDb250ZXh0SW5pdGlhbGl6ZWQo
KSkKICAgICAgICAgcmV0dXJuOwogICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQg
PSBzaGVsbC0+Y29udGV4dCgpOwogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBnZXRTY3Jp
cHRzRnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2Ny
aXB0LmdldCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJnZXRTY3JpcHRzIikpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggNzgzNmEw
Zjg2ODg2MmFhZjMyNDlkNmE3MDEzMzZlOTU3Yjg4NDM0Yy4uNWY0M2UzZWE2Zjg3MTJmNGQ3N2Qw
Y2VmYWQzYjAyNjhhMmVjMGVhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJTY3JpcHRD
b250cm9sbGVyLmgiCiAKICNpbmNsdWRlICJCaW5kaW5nU3RhdGUuaCIKKyNpbmNsdWRlICJDb250
ZW50U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCkBAIC0xMTEsNyArMTEyLDcgQEAgU2NyaXB0
Q29udHJvbGxlcjo6U2NyaXB0Q29udHJvbGxlcihGcmFtZSogZnJhbWUpCiAKIFNjcmlwdENvbnRy
b2xsZXI6On5TY3JpcHRDb250cm9sbGVyKCkKIHsKLSAgICB3aW5kb3dTaGVsbCgpLT5kZXN0cm95
R2xvYmFsKCk7CisgICAgbV93aW5kb3dTaGVsbC0+ZGVzdHJveUdsb2JhbCgpOwogICAgIGNsZWFy
Rm9yQ2xvc2UoKTsKIH0KIApAQCAtMTU0LDE3ICsxNTUsMjMgQEAgdm9pZCBTY3JpcHRDb250cm9s
bGVyOjpyZXNldCgpCiAgICAgVjhHQ0NvbnRyb2xsZXI6OmhpbnRGb3JDb2xsZWN0R2FyYmFnZSgp
OwogfQogCit2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyRm9yT3V0T2ZNZW1vcnkoKQorewor
ICAgIGNsZWFyRm9yQ2xvc2UoKTsKKyAgICBtX3dpbmRvd1NoZWxsLT5kZXN0cm95R2xvYmFsKCk7
Cit9CisKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJGb3JDbG9zZSgpCiB7CiAgICAgZG91
YmxlIHN0YXJ0ID0gY3VycmVudFRpbWUoKTsKICAgICByZXNldCgpOwotICAgIHdpbmRvd1NoZWxs
KCktPmNsZWFyRm9yQ2xvc2UoKTsKKyAgICBtX3dpbmRvd1NoZWxsLT5jbGVhckZvckNsb3NlKCk7
CiAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJXZWJDb3JlLlNj
cmlwdENvbnRyb2xsZXIuY2xlYXJGb3JDbG9zZSIsIChjdXJyZW50VGltZSgpIC0gc3RhcnQpICog
MTAwMCwgMCwgMTAwMDAsIDUwKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjp1cGRhdGVT
ZWN1cml0eU9yaWdpbigpCiB7Ci0gICAgd2luZG93U2hlbGwoKS0+dXBkYXRlU2VjdXJpdHlPcmln
aW4oKTsKKyAgICBtX3dpbmRvd1NoZWxsLT51cGRhdGVTZWN1cml0eU9yaWdpbigpOwogfQogCiB2
b2lkIFNjcmlwdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRmb3JtU2NyaXB0T2JqZWN0cygpCkBAIC0z
MTAsNDYgKzMxNyw2NCBAQCBTY3JpcHRWYWx1ZSBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZShj
b25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQogICAgIHJldHVybiBTY3JpcHRWYWx1
ZShvYmplY3QpOwogfQogCi1WOERPTVdpbmRvd1NoZWxsKiBTY3JpcHRDb250cm9sbGVyOjplbnN1
cmVJc29sYXRlZFdvcmxkQ29udGV4dChpbnQgd29ybGRJZCwgaW50IGV4dGVuc2lvbkdyb3VwKQor
Ym9vbCBTY3JpcHRDb250cm9sbGVyOjppbml0aWFsaXplTWFpbldvcmxkKCkKIHsKLSAgICBBU1NF
UlQod29ybGRJZCAhPSBET01XcmFwcGVyV29ybGQ6Om1haW5Xb3JsZElkKTsKLQotICAgIC8vIENo
ZWNrIHRoZSBtYXAgZm9yIG5vbi10ZW1wb3Jhcnkgd29ybGRzLgotICAgIGlmICh3b3JsZElkICE9
IERPTVdyYXBwZXJXb3JsZDo6dW5pbml0aWFsaXplZFdvcmxkSWQpIHsKLSAgICAgICAgSXNvbGF0
ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuZmluZCh3b3JsZElk
KTsKLSAgICAgICAgaWYgKGl0ZXIgIT0gbV9pc29sYXRlZFdvcmxkcy5lbmQoKSkgewotICAgICAg
ICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlLT53b3JsZCgpLT53b3JsZElkKCkgPT0gd29ybGRJZCk7
Ci0gICAgICAgICAgICBBU1NFUlQoaXRlci0+dmFsdWUtPndvcmxkKCktPmV4dGVuc2lvbkdyb3Vw
KCkgPT0gZXh0ZW5zaW9uR3JvdXApOwotICAgICAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwot
ICAgICAgICB9Ci0gICAgfQorICAgIGlmIChtX3dpbmRvd1NoZWxsLT5pc0NvbnRleHRJbml0aWFs
aXplZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHdpbmRvd1NoZWxsKG1h
aW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+aXNDb250ZXh0SW5pdGlhbGl6ZWQoKTsKK30KIAotICAg
IFJlZlB0cjxET01XcmFwcGVyV29ybGQ+IHdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjplbnN1cmVJ
c29sYXRlZFdvcmxkKHdvcmxkSWQsIGV4dGVuc2lvbkdyb3VwKTsKLSAgICBPd25QdHI8VjhET01X
aW5kb3dTaGVsbD4gaXNvbGF0ZWRXb3JsZFNoZWxsID0gVjhET01XaW5kb3dTaGVsbDo6Y3JlYXRl
KG1fZnJhbWUsIHdvcmxkKTsKLSAgICBtX2lzb2xhdGVkV29ybGRzLnNldCh3b3JsZC0+d29ybGRJ
ZCgpLCBpc29sYXRlZFdvcmxkU2hlbGwuZ2V0KCkpOwotICAgIHJldHVybiBpc29sYXRlZFdvcmxk
U2hlbGwubGVha1B0cigpOworLy8gRklYTUU6IFJlbW92ZSB0aGlzIGZ1bmN0aW9uLiBUaGVyZSBp
cyBjdXJyZW50bHkgYW4gaXNzdWUgd2l0aCB0aGUgaW5zcGVjdG9yIHJlbGF0ZWQgdG8gdGhlIGNh
bGwgdG8gZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQgaW4gU2NyaXB0Q29udHJv
bGxlcjo6d2luZG93U2hlbGwuCitzdGF0aWMgRE9NV3JhcHBlcldvcmxkKiBleGlzdGluZ1dpbmRv
d1NoZWxsV29ya2Fyb3VuZFdvcmxkKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0
cjxET01XcmFwcGVyV29ybGQ+LCB3b3JsZCwgKERPTVdyYXBwZXJXb3JsZDo6Y3JlYXRlVW5pbml0
aWFsaXplZFdvcmxkKCkpKTsKKyAgICByZXR1cm4gd29ybGQuZ2V0KCk7CiB9CiAKLVY4RE9NV2lu
ZG93U2hlbGwqIFNjcmlwdENvbnRyb2xsZXI6OmV4aXN0aW5nV2luZG93U2hlbGxJbnRlcm5hbChE
T01XcmFwcGVyV29ybGQqIHdvcmxkKQorVjhET01XaW5kb3dTaGVsbCogU2NyaXB0Q29udHJvbGxl
cjo6ZXhpc3RpbmdXaW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqIHdvcmxkKQogewogICAgIEFT
U0VSVCh3b3JsZCk7CiAKLSAgICBpZiAoTElLRUxZKHdvcmxkLT5pc01haW5Xb3JsZCgpKSkKKyAg
ICBpZiAod29ybGQtPmlzTWFpbldvcmxkKCkpCisgICAgICAgIHJldHVybiBtX3dpbmRvd1NoZWxs
LT5pc0NvbnRleHRJbml0aWFsaXplZCgpID8gbV93aW5kb3dTaGVsbC5nZXQoKSA6IDA7CisKKyAg
ICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgYmxvY2suIFNlZSBjb21tZW50IHdpdGggZXhpc3RpbmdX
aW5kb3dTaGVsbFdvcmthcm91bmRXb3JsZCgpLgorICAgIGlmICh3b3JsZC0+d29ybGRJZCgpID09
IERPTVdyYXBwZXJXb3JsZDo6dW5pbml0aWFsaXplZFdvcmxkSWQpIHsKKyAgICAgICAgQVNTRVJU
KHdvcmxkID09IGV4aXN0aW5nV2luZG93U2hlbGxXb3JrYXJvdW5kV29ybGQoKSk7CiAgICAgICAg
IHJldHVybiBtX3dpbmRvd1NoZWxsLmdldCgpOworICAgIH0KIAogICAgIElzb2xhdGVkV29ybGRN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29ybGQtPndvcmxkSWQo
KSk7Ci0gICAgcmV0dXJuIGl0ZXIgPT0gbV9pc29sYXRlZFdvcmxkcy5lbmQoKSA/IDAgOiBpdGVy
LT52YWx1ZTsKKyAgICByZXR1cm4gaXRlciA9PSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpID8gMCA6
IGl0ZXItPnZhbHVlLT5pc0NvbnRleHRJbml0aWFsaXplZCgpID8gaXRlci0+dmFsdWUgOiAwOwog
fQogCiBWOERPTVdpbmRvd1NoZWxsKiBTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTaGVsbChET01X
cmFwcGVyV29ybGQqIHdvcmxkKQogewotICAgIFY4RE9NV2luZG93U2hlbGwqIHNoZWxsID0gZXhp
c3RpbmdXaW5kb3dTaGVsbEludGVybmFsKHdvcmxkKTsKLSAgICBpZiAoTElLRUxZKCEhc2hlbGwp
KQotICAgICAgICByZXR1cm4gc2hlbGw7CisgICAgQVNTRVJUKHdvcmxkKTsKIAotICAgIE93blB0
cjxWOERPTVdpbmRvd1NoZWxsPiBpc29sYXRlZFdvcmxkU2hlbGwgPSBWOERPTVdpbmRvd1NoZWxs
OjpjcmVhdGUobV9mcmFtZSwgd29ybGQpOwotICAgIG1faXNvbGF0ZWRXb3JsZHMuc2V0KHdvcmxk
LT53b3JsZElkKCksIGlzb2xhdGVkV29ybGRTaGVsbC5nZXQoKSk7Ci0gICAgcmV0dXJuIGlzb2xh
dGVkV29ybGRTaGVsbC5sZWFrUHRyKCk7CisgICAgVjhET01XaW5kb3dTaGVsbCogc2hlbGwgPSAw
OworICAgIGlmICh3b3JsZC0+aXNNYWluV29ybGQoKSkKKyAgICAgICAgc2hlbGwgPSBtX3dpbmRv
d1NoZWxsLmdldCgpOworICAgIGVsc2UgeworICAgICAgICBJc29sYXRlZFdvcmxkTWFwOjppdGVy
YXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxkLT53b3JsZElkKCkpOworICAg
ICAgICBpZiAoaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKQorICAgICAgICAgICAgc2hl
bGwgPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBPd25QdHI8VjhE
T01XaW5kb3dTaGVsbD4gaXNvbGF0ZWRXb3JsZFNoZWxsID0gVjhET01XaW5kb3dTaGVsbDo6Y3Jl
YXRlKG1fZnJhbWUsIHdvcmxkKTsKKyAgICAgICAgICAgIHNoZWxsID0gaXNvbGF0ZWRXb3JsZFNo
ZWxsLmdldCgpOworICAgICAgICAgICAgbV9pc29sYXRlZFdvcmxkcy5zZXQod29ybGQtPndvcmxk
SWQoKSwgaXNvbGF0ZWRXb3JsZFNoZWxsLmxlYWtQdHIoKSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgaWYgKCFzaGVsbC0+aXNDb250ZXh0SW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBpZiAoc2hl
bGwtPmluaXRpYWxpemVJZk5lZWRlZCgpKSB7CisgICAgICAgICAgICBpZiAod29ybGQtPmlzTWFp
bldvcmxkKCkpCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGlmIGNsYXVz
ZS4gU2VlIGNvbW1lbnQgd2l0aCBleGlzdGluZ1dpbmRvd1NoZWxsV29ya2Fyb3VuZFdvcmxkKCku
CisgICAgICAgICAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmRpc3BhdGNoRGlkQ2xlYXJXaW5k
b3dPYmplY3RJbldvcmxkKGV4aXN0aW5nV2luZG93U2hlbGxXb3JrYXJvdW5kV29ybGQoKSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmRpc3Bh
dGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKHdvcmxkKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gc2hlbGw7CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJ
bklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2Rl
PiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwLCBWZWN0b3I8U2NyaXB0VmFsdWU+KiByZXN1
bHRzKQpAQCAtMzYzLDEwICszODgsMTAgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0
ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFMKICAgICB2
ODo6TG9jYWw8djg6OkFycmF5PiB2OFJlc3VsdHM7CiAgICAgewogICAgICAgICB2ODo6SGFuZGxl
U2NvcGUgZXZhbHVhdGVIYW5kbGVTY29wZTsKLSAgICAgICAgVjhET01XaW5kb3dTaGVsbCogaXNv
bGF0ZWRXb3JsZFNoZWxsID0gZW5zdXJlSXNvbGF0ZWRXb3JsZENvbnRleHQod29ybGRJRCwgZXh0
ZW5zaW9uR3JvdXApOworICAgICAgICBSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiB3b3JsZCA9IERP
TVdyYXBwZXJXb3JsZDo6ZW5zdXJlSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBleHRlbnNpb25Hcm91
cCk7CisgICAgICAgIFY4RE9NV2luZG93U2hlbGwqIGlzb2xhdGVkV29ybGRTaGVsbCA9IHdpbmRv
d1NoZWxsKHdvcmxkLmdldCgpKTsKIAotICAgICAgICBpc29sYXRlZFdvcmxkU2hlbGwtPmluaXRp
YWxpemVJZk5lZWRlZCgpOwotICAgICAgICBpZiAoaXNvbGF0ZWRXb3JsZFNoZWxsLT5jb250ZXh0
KCkuSXNFbXB0eSgpKQorICAgICAgICBpZiAoIWlzb2xhdGVkV29ybGRTaGVsbC0+aXNDb250ZXh0
SW5pdGlhbGl6ZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB2ODo6TG9jYWw8
djg6OkNvbnRleHQ+IGNvbnRleHQgPSB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcoaXNvbGF0
ZWRXb3JsZFNoZWxsLT5jb250ZXh0KCkpOwpAQCAtNDE2LDE0ICs0NDEsMTIgQEAgdjg6OkxvY2Fs
PHY4OjpDb250ZXh0PiBTY3JpcHRDb250cm9sbGVyOjpjdXJyZW50V29ybGRDb250ZXh0KCkKICAg
ICAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+KCk7CiAgICAgICAgIHJldHVy
biB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcoY29udGV4dCk7CiAgICAgfQotICAgIHdpbmRv
d1NoZWxsKCktPmluaXRpYWxpemVJZk5lZWRlZCgpOwotICAgIHJldHVybiB2ODo6TG9jYWw8djg6
OkNvbnRleHQ+OjpOZXcod2luZG93U2hlbGwoKS0+Y29udGV4dCgpKTsKKyAgICByZXR1cm4gdjg6
OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KHdpbmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxXb3Js
ZCgpKS0+Y29udGV4dCgpKTsKIH0KIAogdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBTY3JpcHRDb250
cm9sbGVyOjptYWluV29ybGRDb250ZXh0KCkKIHsKLSAgICB3aW5kb3dTaGVsbCgpLT5pbml0aWFs
aXplSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KHdp
bmRvd1NoZWxsKCktPmNvbnRleHQoKSk7CisgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4
dD46Ok5ldyh3aW5kb3dTaGVsbChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPmNvbnRleHQoKSk7
CiB9CiAKIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gU2NyaXB0Q29udHJvbGxlcjo6bWFpbldvcmxk
Q29udGV4dChGcmFtZSogZnJhbWUpCkBAIC00NTQsMjYgKzQ3NywyMyBAQCB2b2lkIFNjcmlwdENv
bnRyb2xsZXI6OmJpbmRUb1dpbmRvd09iamVjdChGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYg
a2V5LCBOUE9iagogCiBib29sIFNjcmlwdENvbnRyb2xsZXI6OmhhdmVJbnRlcnByZXRlcigpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHdpbmRvd1NoZWxsKCktPmlzQ29udGV4dEluaXRpYWxpemVkKCk7
CisgICAgcmV0dXJuIG1fd2luZG93U2hlbGwtPmlzQ29udGV4dEluaXRpYWxpemVkKCk7CiB9CiAK
IHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZW5hYmxlRXZhbCgpCiB7Ci0gICAgdjg6OkhhbmRsZVNj
b3BlIGhhbmRsZVNjb3BlOwotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9
IHdpbmRvd1NoZWxsKCktPmNvbnRleHQoKTsKLSAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkK
KyAgICBpZiAoIW1fd2luZG93U2hlbGwtPmlzQ29udGV4dEluaXRpYWxpemVkKCkpCiAgICAgICAg
IHJldHVybjsKLQotICAgIHY4Q29udGV4dC0+QWxsb3dDb2RlR2VuZXJhdGlvbkZyb21TdHJpbmdz
KHRydWUpOworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICBtX3dpbmRvd1No
ZWxsLT5jb250ZXh0KCktPkFsbG93Q29kZUdlbmVyYXRpb25Gcm9tU3RyaW5ncyh0cnVlKTsKIH0K
IAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpkaXNhYmxlRXZhbChjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSkKIHsKLSAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0gICAgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gd2luZG93U2hlbGwoKS0+Y29udGV4dCgpOwot
ICAgIGlmICh2OENvbnRleHQuSXNFbXB0eSgpKQorICAgIGlmICghbV93aW5kb3dTaGVsbC0+aXND
b250ZXh0SW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwotCisgICAgdjg6OkhhbmRsZVNj
b3BlIGhhbmRsZVNjb3BlOworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9
IG1fd2luZG93U2hlbGwtPmNvbnRleHQoKTsKICAgICB2OENvbnRleHQtPkFsbG93Q29kZUdlbmVy
YXRpb25Gcm9tU3RyaW5ncyhmYWxzZSk7CiAgICAgdjhDb250ZXh0LT5TZXRFcnJvck1lc3NhZ2VG
b3JDb2RlR2VuZXJhdGlvbkZyb21TdHJpbmdzKHY4U3RyaW5nKGVycm9yTWVzc2FnZSkpOwogfQpA
QCAtNTMyLDExICs1NTIsNiBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFudXBTY3JpcHRP
YmplY3RzRm9yUGx1Z2luKFdpZGdldCogbmF0aXZlSGFuZGxlKQogICAgIG1fcGx1Z2luT2JqZWN0
cy5yZW1vdmUoaXQpOwogfQogCi12b2lkIFNjcmlwdENvbnRyb2xsZXI6OmdldEFsbFdvcmxkcyhW
ZWN0b3I8UmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gPiYgd29ybGRzKQotewotICAgIHdvcmxkcy5h
cHBlbmQobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwotfQotCiB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmV2YWx1YXRlSW5Xb3JsZChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2UsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBET01XcmFwcGVyV29ybGQqIHdvcmxk
KQogewpAQCAtNjM1LDcgKzY1MCw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5k
b3dTaGVsbChET01XaW5kb3cqLCBib29sKQogICAgIHJlc2V0KCk7CiAgICAgLy8gVjggYmluZGlu
ZyBleHBlY3RzIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hlbGwgb25seSBiZSBjYWxs
ZWQKICAgICAvLyB3aGVuIGEgZnJhbWUgaXMgbG9hZGluZyBhIG5ldyBwYWdlLiBUaGlzIGNyZWF0
ZXMgYSBuZXcgY29udGV4dCBmb3IgdGhlIG5ldyBwYWdlLgotICAgIHdpbmRvd1NoZWxsKCktPmNs
ZWFyRm9yTmF2aWdhdGlvbigpOworICAgIG1fd2luZG93U2hlbGwtPmNsZWFyRm9yTmF2aWdhdGlv
bigpOwogICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUN1c3RvbUNvdW50cygiV2ViQ29y
ZS5TY3JpcHRDb250cm9sbGVyLmNsZWFyV2luZG93U2hlbGwiLCAoY3VycmVudFRpbWUoKSAtIHN0
YXJ0KSAqIDEwMDAsIDAsIDEwMDAwLCA1MCk7CiB9CiAKQEAgLTY2NSwxMCArNjgwLDEwIEBAIHZv
aWQgU2NyaXB0Q29udHJvbGxlcjo6Y29sbGVjdElzb2xhdGVkQ29udGV4dHMoVmVjdG9yPHN0ZDo6
cGFpcjxTY3JpcHRTdGF0ZSosIFNlCiBib29sIFNjcmlwdENvbnRyb2xsZXI6OnNldENvbnRleHRE
ZWJ1Z0lkKGludCBkZWJ1Z0lkKQogewogICAgIEFTU0VSVChkZWJ1Z0lkID4gMCk7Ci0gICAgdjg6
OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQg
PSB3aW5kb3dTaGVsbCgpLT5jb250ZXh0KCk7Ci0gICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQor
ICAgIGlmICghbV93aW5kb3dTaGVsbC0+aXNDb250ZXh0SW5pdGlhbGl6ZWQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PiBjb250ZXh0ID0gbV93aW5kb3dTaGVsbC0+Y29udGV4dCgpOwogICAgIGlm
ICghY29udGV4dC0+R2V0RGF0YSgpLT5Jc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTcwMSwxNyArNzE2LDIyIEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6YXR0YWNo
RGVidWdnZXIodm9pZCopCiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQo
KQogewotICAgIHdpbmRvd1NoZWxsKCktPnVwZGF0ZURvY3VtZW50KCk7CisgICAgLy8gRm9yIGFu
IHVuaW5pdGlhbGl6ZWQgbWFpbiB3aW5kb3cgc2hlbGwsIGRvIG5vdCBpbmN1ciB0aGUgY29zdCBv
ZiBjb250ZXh0IGluaXRpYWxpemF0aW9uIGR1cmluZyBGcmFtZUxvYWRlcjo6aW5pdCgpLgorICAg
IGlmICgoIW1fd2luZG93U2hlbGwtPmlzQ29udGV4dEluaXRpYWxpemVkKCkgfHwgIW1fd2luZG93
U2hlbGwtPmlzR2xvYmFsSW5pdGlhbGl6ZWQoKSkgJiYgbV9mcmFtZS0+bG9hZGVyKCktPnN0YXRl
TWFjaGluZSgpLT5jcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghaW5pdGlhbGl6ZU1haW5Xb3JsZCgpKQorICAgICAgICB3aW5kb3dTaGVs
bChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPnVwZGF0ZURvY3VtZW50KCk7CiB9CiAKIHZvaWQg
U2NyaXB0Q29udHJvbGxlcjo6bmFtZWRJdGVtQWRkZWQoSFRNTERvY3VtZW50KiBkb2MsIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKLSAgICB3aW5kb3dTaGVsbCgpLT5uYW1lZEl0ZW1BZGRl
ZChkb2MsIG5hbWUpOworICAgIHdpbmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+
bmFtZWRJdGVtQWRkZWQoZG9jLCBuYW1lKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpu
YW1lZEl0ZW1SZW1vdmVkKEhUTUxEb2N1bWVudCogZG9jLCBjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUpCiB7Ci0gICAgd2luZG93U2hlbGwoKS0+bmFtZWRJdGVtUmVtb3ZlZChkb2MsIG5hbWUpOwor
ICAgIHdpbmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+bmFtZWRJdGVtUmVtb3Zl
ZChkb2MsIG5hbWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKaW5kZXggYjY2Y2VkN2ZiNDllZGQx
YzFhNGM0ZWY1OTY4ZmU4NzgwNWIwOTg3YS4uYzE4MjNhMTM1MWYyOWFlYzVkZGZhMzUxMjBlNzdi
YTdlNjNlZTU4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRy
b2xsZXIuaApAQCAtNjYsMTEgKzY2LDkgQEAgcHVibGljOgogICAgIFNjcmlwdENvbnRyb2xsZXIo
RnJhbWUqKTsKICAgICB+U2NyaXB0Q29udHJvbGxlcigpOwogCi0gICAgVjhET01XaW5kb3dTaGVs
bCogd2luZG93U2hlbGwoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvd1NoZWxsLmdldCgpOyB9Cisg
ICAgYm9vbCBpbml0aWFsaXplTWFpbldvcmxkKCk7CiAgICAgVjhET01XaW5kb3dTaGVsbCogd2lu
ZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKik7Ci0gICAgLy8gRklYTUU6IFJlcGxhY2UgZXhpc3Rp
bmdXaW5kb3dTaGVsbCB3aXRoIGV4aXN0aW5nV2luZG93U2hlbGxJbnRlcm5hbCBzZWUgY29tbWVu
dCBpbiBWOERPTVdpbmRvd1NoZWxsOjppbml0aWFsaXplSWZOZWVkZWQuCi0gICAgU2NyaXB0Q29u
dHJvbGxlciogZXhpc3RpbmdXaW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqKSB7IHJldHVybiB0
aGlzOyB9Ci0gICAgVjhET01XaW5kb3dTaGVsbCogZXhpc3RpbmdXaW5kb3dTaGVsbEludGVybmFs
KERPTVdyYXBwZXJXb3JsZCopOworICAgIFY4RE9NV2luZG93U2hlbGwqIGV4aXN0aW5nV2luZG93
U2hlbGwoRE9NV3JhcHBlcldvcmxkKik7CiAKICAgICBTY3JpcHRWYWx1ZSBleGVjdXRlU2NyaXB0
KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKICAgICBTY3JpcHRWYWx1ZSBleGVjdXRlU2NyaXB0
KGNvbnN0IFN0cmluZyYgc2NyaXB0LCBib29sIGZvcmNlVXNlckdlc3R1cmUgPSBmYWxzZSk7CkBA
IC0xNjgsMTMgKzE2NiwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhbnVwU2NyaXB0T2JqZWN0
c0ZvclBsdWdpbihXaWRnZXQqKTsKIAogICAgIHZvaWQgY2xlYXJGb3JDbG9zZSgpOworICAgIHZv
aWQgY2xlYXJGb3JPdXRPZk1lbW9yeSgpOworCiAKICAgICBOUE9iamVjdCogY3JlYXRlU2NyaXB0
T2JqZWN0Rm9yUGx1Z2luRWxlbWVudChIVE1MUGx1Z0luRWxlbWVudCopOwogICAgIE5QT2JqZWN0
KiB3aW5kb3dTY3JpcHROUE9iamVjdCgpOwogCi0gICAgLy8gRHVtbXkgbWV0aG9kIHRvIGF2b2lk
IGEgYnVuY2ggb2YgaWZkZWYncyBpbiBXZWJDb3JlLgogICAgIHZvaWQgZXZhbHVhdGVJbldvcmxk
KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmLCBET01XcmFwcGVyV29ybGQqKTsKLSAgICBzdGF0aWMg
dm9pZCBnZXRBbGxXb3JsZHMoVmVjdG9yPFJlZlB0cjxET01XcmFwcGVyV29ybGQ+ID4mIHdvcmxk
cyk7CisgICAgc3RhdGljIHZvaWQgZ2V0QWxsV29ybGRzKFZlY3RvcjxSZWZQdHI8RE9NV3JhcHBl
cldvcmxkPiA+JiB3b3JsZHMpCisgICAgeworICAgICAgICBET01XcmFwcGVyV29ybGQ6OmdldEFs
bFdvcmxkcyh3b3JsZHMpOworICAgIH0KIAogICAgIC8vIFJlZ2lzdGVycyBhIHY4IGV4dGVuc2lv
biB0byBiZSBhdmFpbGFibGUgb24gd2VicGFnZXMuIFdpbGwgb25seQogICAgIC8vIGFmZmVjdCB2
OCBjb250ZXh0cyBpbml0aWFsaXplZCBhZnRlciB0aGlzIGNhbGwuIFRha2VzIG93bmVyc2hpcCBv
ZgpAQCAtMTk2LDcgKzE5OCw2IEBAIHByaXZhdGU6CiAgICAgRnJhbWUqIG1fZnJhbWU7CiAgICAg
Y29uc3QgU3RyaW5nKiBtX3NvdXJjZVVSTDsKIAotICAgIFY4RE9NV2luZG93U2hlbGwqIGVuc3Vy
ZUlzb2xhdGVkV29ybGRDb250ZXh0KGludCB3b3JsZElkLCBpbnQgZXh0ZW5zaW9uR3JvdXApOwog
ICAgIE93blB0cjxWOERPTVdpbmRvd1NoZWxsPiBtX3dpbmRvd1NoZWxsOwogCiAgICAgLy8gVGhl
IGlzb2xhdGVkIHdvcmxkcyB3ZSBhcmUgdHJhY2tpbmcgZm9yIHRoaXMgZnJhbWUuIFdlIGhvbGQg
dGhlbSBhbGl2ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5k
aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAKaW5kZXgg
N2MzNWQ0NWI0NDg4NTBjMGNlNmNlZjdkMjg4MWNlYjM0MWVmZWFkMS4uNmU5MzA3OThlMjEyODhk
OGFlYjk0ZGEyMzA1YzQ1ODUwYTNlNDIyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhCaW5kaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEJpbmRpbmcuY3BwCkBAIC0zMjMsNyArMzIzLDggQEAgVjhQZXJDb250ZXh0RGF0YSogcGVyQ29u
dGV4dERhdGFGb3JDdXJyZW50V29ybGQoRnJhbWUqIGZyYW1lKQogICAgIFY4RE9NV2luZG93U2hl
bGwqIGlzb2xhdGVkU2hlbGw7CiAgICAgaWYgKFVOTElLRUxZKCEhKGlzb2xhdGVkU2hlbGwgPSBW
OERPTVdpbmRvd1NoZWxsOjpnZXRFbnRlcmVkKCkpKSkKICAgICAgICAgcmV0dXJuIGlzb2xhdGVk
U2hlbGwtPnBlckNvbnRleHREYXRhKCk7Ci0gICAgcmV0dXJuIGZyYW1lLT5zY3JpcHQoKS0+d2lu
ZG93U2hlbGwoKS0+cGVyQ29udGV4dERhdGEoKTsKKyAgICBWOERPTVdpbmRvd1NoZWxsKiBtYWlu
U2hlbGwgPSBmcmFtZS0+c2NyaXB0KCktPmV4aXN0aW5nV2luZG93U2hlbGwobWFpblRocmVhZE5v
cm1hbFdvcmxkKCkpOworICAgIHJldHVybiBtYWluU2hlbGwgPyBtYWluU2hlbGwtPnBlckNvbnRl
eHREYXRhKCkgOiAwOwogfQogCiBib29sIGhhbmRsZU91dE9mTWVtb3J5KCkKQEAgLTMzOCw4ICsz
MzksNyBAQCBib29sIGhhbmRsZU91dE9mTWVtb3J5KCkKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIGZyYW1lLT5zY3JpcHQoKS0+Y2xlYXJGb3JDbG9zZSgpOwot
ICAgIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+ZGVzdHJveUdsb2JhbCgpOworICAg
IGZyYW1lLT5zY3JpcHQoKS0+Y2xlYXJGb3JPdXRPZk1lbW9yeSgpOwogCiAjaWYgUExBVEZPUk0o
Q0hST01JVU0pCiAgICAgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlkRXhoYXVzdE1lbW9y
eUF2YWlsYWJsZUZvclNjcmlwdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OERPTVdpbmRvd1NoZWxsLmNwcAppbmRleCA0ZDM3ZmM5M2NhM2IzNDc5NTYwMDY2NzMyMmJkYjcz
YmJlZTJjOTA4Li5hMDE5MmE2OTY5MjE3MzViMzkwMTBlNjIzMzcwNmRkYmM1YmE4YjEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcApAQCAt
MjAxLDEyICsyMDEsNiBAQCBWOERPTVdpbmRvd1NoZWxsOjpWOERPTVdpbmRvd1NoZWxsKEZyYW1l
KiBmcmFtZSwgUGFzc1JlZlB0cjxET01XcmFwcGVyV29ybGQ+IHdvcgogewogfQogCi1ib29sIFY4
RE9NV2luZG93U2hlbGw6OmlzQ29udGV4dEluaXRpYWxpemVkKCkKLXsKLSAgICBBU1NFUlQobV9j
b250ZXh0LmlzRW1wdHkoKSB8fCAhbV9nbG9iYWwuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gIW1f
Y29udGV4dC5pc0VtcHR5KCk7Ci19Ci0KIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6ZGVzdHJveUlz
b2xhdGVkU2hlbGwoKQogewogICAgIGRpc3Bvc2VDb250ZXh0KHRydWUpOwpAQCAtMzQ3LDkgKzM0
MSw4IEBAIGJvb2wgVjhET01XaW5kb3dTaGVsbDo6aW5pdGlhbGl6ZUlmTmVlZGVkKCkKIAogICAg
IC8vIEZsYWcgY29udGV4dCBhcyBpc29sYXRlZC4KICAgICBpZiAoIWlzTWFpbldvcmxkKSB7Ci0g
ICAgICAgIFY4RE9NV2luZG93U2hlbGwqIG1haW5XaW5kb3cgPSBtX2ZyYW1lLT5zY3JpcHQoKS0+
d2luZG93U2hlbGwoKTsKLSAgICAgICAgbWFpbldpbmRvdy0+aW5pdGlhbGl6ZUlmTmVlZGVkKCk7
Ci0gICAgICAgIGlmICghbWFpbldpbmRvdy0+Y29udGV4dCgpLklzRW1wdHkoKSkKKyAgICAgICAg
VjhET01XaW5kb3dTaGVsbCogbWFpbldpbmRvdyA9IG1fZnJhbWUtPnNjcmlwdCgpLT5leGlzdGlu
Z1dpbmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKKyAgICAgICAgaWYgKG1haW5X
aW5kb3cgJiYgIW1haW5XaW5kb3ctPmNvbnRleHQoKS5Jc0VtcHR5KCkpCiAgICAgICAgICAgICBz
ZXRJbmplY3RlZFNjcmlwdENvbnRleHREZWJ1Z0lkKG1fY29udGV4dC5nZXQoKSwgbV9mcmFtZS0+
c2NyaXB0KCktPmNvbnRleHREZWJ1Z0lkKG1haW5XaW5kb3ctPmNvbnRleHQoKSkpOwogICAgICAg
ICBzZXRJc29sYXRlZFdvcmxkRmllbGQodGhpcywgY29udGV4dCk7CiAgICAgfQpAQCAtMzg5LDEz
ICszODIsNiBAQCBib29sIFY4RE9NV2luZG93U2hlbGw6OmluaXRpYWxpemVJZk5lZWRlZCgpCiAg
ICAgICAgIH0KICAgICB9CiAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWRDcmVh
dGVTY3JpcHRDb250ZXh0KG1fY29udGV4dC5nZXQoKSwgbV93b3JsZC0+ZXh0ZW5zaW9uR3JvdXAo
KSwgbV93b3JsZC0+d29ybGRJZCgpKTsKLQotICAgIGlmIChpc01haW5Xb3JsZCkgewotICAgICAg
ICAvLyBGSVhNRTogVGhpcyBjYWxsIGlzIHByb2JhYmx5IGluIHRoZSB3cm9uZyBzcG90LCBidXQg
Y2F1c2VzIGEgdGVzdCB0aW1lb3V0IGZvciBodHRwL3Rlc3RzL21pc2Mvd2luZG93LW9wZW4tdGhl
bi13cml0ZS5odG1sIHdoZW4gcmVtb3ZlZC4KLSAgICAgICAgLy8gQWRkaXRpb25hbGx5LCBTY3Jp
cHRDb250cm9sbGVyOjpleGlzdGluZ1dpbmRvd1NoZWxsIGNhbm5vdCBiZSBjb3JyZWN0bHkgaW1w
bGVtZW50ZWQgdW50aWwgdGhpcyBjYWxsIGlzIGdvbmUuCi0gICAgICAgIG1fZnJhbWUtPmxvYWRl
cigpLT5kaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZCgwKTsKLSAgICB9Ci0KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNTUzLDcgKzUzOSw3IEBAIHZvaWQgVjhET01XaW5kb3dT
aGVsbDo6dXBkYXRlRG9jdW1lbnQoKQogICAgIEFTU0VSVChtX3dvcmxkLT5pc01haW5Xb3JsZCgp
KTsKICAgICBpZiAobV9nbG9iYWwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYg
KCFpbml0aWFsaXplSWZOZWVkZWQoKSkKKyAgICBpZiAobV9jb250ZXh0LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIHVwZGF0ZURvY3VtZW50UHJvcGVydHkoKTsKICAgICB1cGRhdGVT
ZWN1cml0eU9yaWdpbigpOwpAQCAtNTc4LDcgKzU2NCw3IEBAIHZvaWQgVjhET01XaW5kb3dTaGVs
bDo6bmFtZWRJdGVtQWRkZWQoSFRNTERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3Ry
aW5nCiB7CiAgICAgQVNTRVJUKG1fd29ybGQtPmlzTWFpbldvcmxkKCkpOwogCi0gICAgaWYgKCFp
bml0aWFsaXplSWZOZWVkZWQoKSkKKyAgICBpZiAobV9jb250ZXh0LmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwpAQCAtNTkzLDEw
ICs1NzksMTAgQEAgdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpuYW1lZEl0ZW1SZW1vdmVkKEhUTUxE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0cmkKIHsKICAgICBBU1NFUlQobV93b3Js
ZC0+aXNNYWluV29ybGQoKSk7CiAKLSAgICBpZiAoZG9jdW1lbnQtPmhhc05hbWVkSXRlbShuYW1l
LmltcGwoKSkgfHwgZG9jdW1lbnQtPmhhc0V4dHJhTmFtZWRJdGVtKG5hbWUuaW1wbCgpKSkKKyAg
ICBpZiAobV9jb250ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFp
bml0aWFsaXplSWZOZWVkZWQoKSkKKyAgICBpZiAoZG9jdW1lbnQtPmhhc05hbWVkSXRlbShuYW1l
LmltcGwoKSkgfHwgZG9jdW1lbnQtPmhhc0V4dHJhTmFtZWRJdGVtKG5hbWUuaW1wbCgpKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oCmluZGV4IDdkMjA2ZDRj
ZDY5ZWU2M2Y2ODQyODcxOGY3ZWI4ZjJlYTU0M2M2NzIuLjk1ZjYxOGZlMTk4MjlmYzAxYmU3MjVl
M2UzMjgxMGQ1ZDhhNGQyMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4RE9NV2luZG93U2hlbGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERP
TVdpbmRvd1NoZWxsLmgKQEAgLTY3LDcgKzY3LDggQEAgcHVibGljOgogICAgIC8vIChlLmcuLCBh
ZnRlciBzZXR0aW5nIGRvY291bWVudC5kb21haW4pLgogICAgIHZvaWQgdXBkYXRlU2VjdXJpdHlP
cmlnaW4oKTsKIAotICAgIGJvb2wgaXNDb250ZXh0SW5pdGlhbGl6ZWQoKTsKKyAgICBib29sIGlz
Q29udGV4dEluaXRpYWxpemVkKCkgeyByZXR1cm4gIW1fY29udGV4dC5pc0VtcHR5KCk7IH0KKyAg
ICBib29sIGlzR2xvYmFsSW5pdGlhbGl6ZWQoKSB7IHJldHVybiAhbV9nbG9iYWwuaXNFbXB0eSgp
OyB9CiAKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gY3JlYXRlTmV3Q29udGV4dCh2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCwgaW50IGV4dGVuc2lvbkdyb3VwLCBpbnQgd29y
bGRJZCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OERvY3VtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OERvY3VtZW50Q3VzdG9tLmNwcAppbmRleCA4MWQyNDQyYWJkYTUwNTVhYWM1NGQwYWM3NTYzYmNk
N2U2NzZhMDRkLi41OTc5MDhjZDNlMjYwMWQ4YTNjOTdmZGU0OGZlODYwZDNmOTI5OTEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3Rv
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRD
dXN0b20uY3BwCkBAIC0xMTAsNyArMTEwLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
RG9jdW1lbnQqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXgKICAg
ICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgaWYgKCFWOERPTVdpbmRvd1NoZWxsOjpnZXRFbnRl
cmVkKCkpIHsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGltcGwtPmZyYW1lKCkpCi0gICAg
ICAgICAgICBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPnVwZGF0ZURvY3VtZW50V3Jh
cHBlcih3cmFwcGVyKTsKKyAgICAgICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwo
bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT51cGRhdGVEb2N1bWVudFdyYXBwZXIod3JhcHBlcik7
CiAgICAgfQogICAgIHJldHVybiB3cmFwcGVyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHAKaW5kZXgg
MGQ0NzE5ZmE1YTY5YmFjZDgxOTRhYjRlYjc4MjdjYzdlZDRiZTMzNi4uNWFjNWQwMDBkMmUwMGRj
OTFmMmMzMWZiZGFlNDM5NzZlYmQ3ZDYyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwCkBAIC0xODUs
NyArMTg1LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoSFRNTERvY3VtZW50KiBpbXBs
LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ28KICAgICAgICAgcmV0dXJuIHdyYXBw
ZXI7CiAgICAgaWYgKCFWOERPTVdpbmRvd1NoZWxsOjpnZXRFbnRlcmVkKCkpIHsKICAgICAgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IGltcGwtPmZyYW1lKCkpCi0gICAgICAgICAgICBmcmFtZS0+c2Ny
aXB0KCktPndpbmRvd1NoZWxsKCktPnVwZGF0ZURvY3VtZW50V3JhcHBlcih3cmFwcGVyKTsKKyAg
ICAgICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwobWFpblRocmVhZE5vcm1hbFdv
cmxkKCkpLT51cGRhdGVEb2N1bWVudFdyYXBwZXIod3JhcHBlcik7CiAgICAgfQogICAgIHJldHVy
biB3cmFwcGVyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4U1ZHRG9jdW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4U1ZHRG9jdW1lbnRDdXN0b20uY3BwCmluZGV4IDA5OTFkZmMxNzgwOTZjNzZjN2Ni
ODI3YWEwZmJkZTMyNWZjMDQyNTMuLjYwNzM4ZDdlOWU3ODRiYTZkZWJmMGNkZTAwOWRlZjVmNjcz
MTkwZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNW
R0RvY3VtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhTVkdEb2N1bWVudEN1c3RvbS5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHRvVjgoU1ZHRG9jdW1lbnQqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Y3JlYXRpb25Db24KICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgaWYgKCFWOERPTVdpbmRv
d1NoZWxsOjpnZXRFbnRlcmVkKCkpIHsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGltcGwt
PmZyYW1lKCkpCi0gICAgICAgICAgICBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPnVw
ZGF0ZURvY3VtZW50V3JhcHBlcih3cmFwcGVyKTsKKyAgICAgICAgICAgIGZyYW1lLT5zY3JpcHQo
KS0+d2luZG93U2hlbGwobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT51cGRhdGVEb2N1bWVudFdy
YXBwZXIod3JhcHBlcik7CiAgICAgfQogICAgIHJldHVybiB3cmFwcGVyOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173219</attachid>
            <date>2012-11-09 00:07:58 -0800</date>
            <delta_ts>2012-11-09 10:25:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100235-20121109090606.patch</filename>
            <type>text/plain</type>
            <size>26809</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0MDIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODQwNGNhNjI0OWJiOWNj
OGRmODg5YTRkYTFjYzU2NDIwYjNkOTBkZi4uYmI3MDhjM2Q1YzVlNmI4ZTViNGIxN2E3NzU5NWQ0
ZDgwOGFkNWNhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDEyLTExLTA5ICBEYW4g
Q2FybmV5ICA8ZGNhcm5leUBnb29nbGUuY29tPgorCisgICAgICAgIFtWOF0gUmVtb3ZlIFNjcmlw
dENvbnRyb2xsZXI6OndpbmRvd1NoZWxsKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwMDIzNQorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFy
dGguCisKKyAgICAgICAgUmVmYWN0b3JlZCB3aW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqKSBh
bmQKKyAgICAgICAgZXhpc3RpbmdXaW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqKSB0byBiZSBs
aWtlIEpTQy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGNoYW5nZSBpbiBmdW5jdGlvbmFs
aXR5LgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06Cisg
ICAgICAgIChHZW5lcmF0ZVRvVjhDb252ZXJ0ZXJzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9E
T01XcmFwcGVyV29ybGQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNvbGF0ZWRXb3JsZE1hcCk6
CisgICAgICAgIChXZWJDb3JlOjpET01XcmFwcGVyV29ybGQ6OmdldEFsbFdvcmxkcyk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaDoK
KyAgICAgICAgKERPTVdyYXBwZXJXb3JsZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvUGFnZVNj
cmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTY3JpcHREZWJ1Z1Nl
cnZlcjo6YWRkTGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRy
b2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJGb3JPdXRP
Zk1lbW9yeSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENv
bnRyb2xsZXI6OmNsZWFyRm9yQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJv
bGxlcjo6dXBkYXRlU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6aW5pdGlhbGl6ZU1haW5Xb3JsZCk6IFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFpbiB3
b3JsZCB3YXMgaW5pdGlhbGl6ZWQuCisgICAgICAgIChXZWJDb3JlOjpleGlzdGluZ1dpbmRvd1No
ZWxsV29ya2Fyb3VuZFdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
OmV4aXN0aW5nV2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6d2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZh
bHVhdGVJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6Y3VycmVudFdvcmxkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9s
bGVyOjptYWluV29ybGRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xs
ZXI6OmhhdmVJbnRlcnByZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVy
OjplbmFibGVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmRpc2Fi
bGVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93
U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6c2V0Q29udGV4dERl
YnVnSWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6bmFtZWRJdGVtQWRkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6bmFtZWRJdGVtUmVtb3ZlZCk6
CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAoU2Ny
aXB0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpnZXRB
bGxXb3JsZHMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpwZXJDb250ZXh0RGF0YUZvckN1cnJlbnRXb3JsZCk6CisgICAgICAgIChXZWJD
b3JlOjpoYW5kbGVPdXRPZk1lbW9yeSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5k
b3dTaGVsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjppbml0aWFs
aXplSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6dXBkYXRl
RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVt
QWRkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVtUmVt
b3ZlZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oOgorICAgICAg
ICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6aXNDb250ZXh0SW5pdGlhbGl6ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6aXNHbG9iYWxJbml0aWFsaXplZCk6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERv
Y3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRvVjgpOgorCiAyMDEyLTExLTA4ICBFdWdlbmUgS2x5dWNobmlrb3YgIDxldXN0YXMuYnVn
QGdtYWlsLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBUaW1lbGluZTogIlNlbmQgUmVx
dWVzdCIgZXZlbnRzIGFyZSBzaG93biBvdXQgb2Ygb3JkZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IGZiZGRhZTdiYWI4
Y2I1Mzc0ZjNkNTZlZTc2N2QzZTBjNTQ2ZGFkZDUuLjE0ZjQ0Yjc3ZDllNTRmOWUyODQzZmU3NDdj
ZTgxN2I3YzAwMTIzYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0zNDA2LDggKzM0MDYsOCBAQCBFTkQKICAgICBpZiAo
SXNTdWJUeXBlKCRkYXRhTm9kZSwgIkRvY3VtZW50IikpIHsKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsIDw8RU5EKTsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gaW1wbC0+ZnJhbWUoKSkgewot
ICAgICAgICBpZiAoZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT5jb250ZXh0KCkuSXNF
bXB0eSgpICYmIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+aW5pdGlhbGl6ZUlmTmVl
ZGVkKCkpIHsKLSAgICAgICAgICAgIC8vIGluaXRpYWxpemVJZk5lZWRlZCBtYXkgaGF2ZSBjcmVh
dGVkIGEgd3JhcHBlciBmb3IgdGhlIG9iamVjdCwgcmV0cnkgZnJvbSB0aGUgc3RhcnQuCisgICAg
ICAgIGlmIChmcmFtZS0+c2NyaXB0KCktPmluaXRpYWxpemVNYWluV29ybGQoKSkgeworICAgICAg
ICAgICAgLy8gaW5pdGlhbGl6ZU1haW5Xb3JsZCBtYXkgaGF2ZSBjcmVhdGVkIGEgd3JhcHBlciBm
b3IgdGhlIG9iamVjdCwgcmV0cnkgZnJvbSB0aGUgc3RhcnQuCiAgICAgICAgICAgICByZXR1cm4g
JHtjbGFzc05hbWV9Ojp3cmFwKGltcGwuZ2V0KCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7
CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9ET01XcmFwcGVyV29ybGQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3Jh
cHBlcldvcmxkLmNwcAppbmRleCAwYjlmMDU1YjZlYjRmMmE3N2IzNzQ1ZjE1YTk0YzdiM2IwMDk0
ZmM2Li45M2RkODJlZjNmMmQ4ZjBjN2RkNTQwNzAyNGEwZTE3NDc5NjJmNzViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAKQEAgLTU1LDE0ICs1
NSwyMiBAQCBET01XcmFwcGVyV29ybGQqIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpCiAgICAgcmV0
dXJuIGNhY2hlZE5vcm1hbFdvcmxkLmdldCgpOwogfQogCi0vLyBGSVhNRTogVGhpcyBzaG91bGQg
cHJvYmFibHkgZ28gdG8gUGVySXNvbGF0ZURhdGEuCiB0eXBlZGVmIEhhc2hNYXA8aW50LCBET01X
cmFwcGVyV29ybGQqPiBXb3JsZE1hcDsKIHN0YXRpYyBXb3JsZE1hcCYgaXNvbGF0ZWRXb3JsZE1h
cCgpCiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKFdvcmxkTWFwLCBtYXAsICgpKTsKICAgICByZXR1cm4gbWFwOwogfQogCit2b2lkIERPTVdy
YXBwZXJXb3JsZDo6Z2V0QWxsV29ybGRzKFZlY3RvcjxSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiA+
JiB3b3JsZHMpCit7CisgICAgd29ybGRzLmFwcGVuZChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7
CisgICAgV29ybGRNYXAmIGlzb2xhdGVkV29ybGRzID0gaXNvbGF0ZWRXb3JsZE1hcCgpOworICAg
IGZvciAoV29ybGRNYXA6Oml0ZXJhdG9yIGl0ID0gaXNvbGF0ZWRXb3JsZHMuYmVnaW4oKTsgaXQg
IT0gaXNvbGF0ZWRXb3JsZHMuZW5kKCk7ICsraXQpCisgICAgICAgIHdvcmxkcy5hcHBlbmQoaXQt
PnZhbHVlKTsKK30KKwogdm9pZCBET01XcmFwcGVyV29ybGQ6OmRlYWxsb2NhdGUoRE9NV3JhcHBl
cldvcmxkKiB3b3JsZCkKIHsKICAgICBpbnQgd29ybGRJZCA9IHdvcmxkLT53b3JsZElkKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5oCmluZGV4IDVkZjMw
NTgxNWQyNGZiZDQ2OGM4ZjEwMzI5N2FjNThiOWRhMjJiM2EuLjYyNWRhYzk5NjkzZjViZDMxZjEz
ZDYwOGIxMjk5MDE2YTY3NTgwMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L0RPTVdyYXBwZXJXb3JsZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RP
TVdyYXBwZXJXb3JsZC5oCkBAIC01MSw2ICs1MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxET01XcmFwcGVyV29ybGQ+IGVuc3VyZUlzb2xhdGVkV29ybGQoaW50IHdvcmxkSWQs
IGludCBleHRlbnNpb25Hcm91cCk7CiAgICAgc3RhdGljIGJvb2wgaXNvbGF0ZWRXb3JsZHNFeGlz
dCgpIHsgcmV0dXJuIGlzb2xhdGVkV29ybGRDb3VudDsgfQogICAgIHN0YXRpYyBib29sIGlzSXNv
bGF0ZWRXb3JsZElkKGludCB3b3JsZElkKSB7IHJldHVybiB3b3JsZElkICE9IG1haW5Xb3JsZElk
ICYmIHdvcmxkSWQgIT0gdW5pbml0aWFsaXplZFdvcmxkSWQ7IH0KKyAgICBzdGF0aWMgdm9pZCBn
ZXRBbGxXb3JsZHMoVmVjdG9yPFJlZlB0cjxET01XcmFwcGVyV29ybGQ+ID4mIHdvcmxkcyk7CiAg
ICAgLy8gQXNzb2NpYXRlcyBhbiBpc29sYXRlZCB3b3JsZCAoc2VlIGFib3ZlIGZvciBkZXNjcmlw
dGlvbikgd2l0aCBhIHNlY3VyaXR5CiAgICAgLy8gb3JpZ2luLiBYTUxIdHRwUmVxdWVzdCBpbnN0
YW5jZXMgdXNlZCBpbiB0aGF0IHdvcmxkIHdpbGwgYmUgY29uc2lkZXJlZAogICAgIC8vIHRvIGNv
bWUgZnJvbSB0aGF0IG9yaWdpbiwgbm90IHRoZSBmcmFtZSdzLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKaW5kZXggYjQ4NTdi
NDUzOWY0ZDI0M2JiNzBiYjhlOWU1ODIxMWIwMmQ3ZTI3NC4uZTBlNzEyMTdkM2UzY2IyYWYxODI2
YjI0NWMyNWVkZDQ4ODk5Njc3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvUGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCkBAIC05Miw4ICs5Miw4IEBAIHZvaWQgUGFn
ZVNjcmlwdERlYnVnU2VydmVyOjphZGRMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiBsaXN0
ZW5lciwgUGFnZSogcGFnCiAgICAgfQogICAgIG1fbGlzdGVuZXJzTWFwLnNldChwYWdlLCBsaXN0
ZW5lcik7CiAKLSAgICBWOERPTVdpbmRvd1NoZWxsKiBzaGVsbCA9IHNjcmlwdENvbnRyb2xsZXIt
PndpbmRvd1NoZWxsKCk7Ci0gICAgaWYgKCFzaGVsbC0+aXNDb250ZXh0SW5pdGlhbGl6ZWQoKSkK
KyAgICBWOERPTVdpbmRvd1NoZWxsKiBzaGVsbCA9IHNjcmlwdENvbnRyb2xsZXItPmV4aXN0aW5n
V2luZG93U2hlbGwobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworICAgIGlmICghc2hlbGwgfHwg
IXNoZWxsLT5pc0NvbnRleHRJbml0aWFsaXplZCgpKQogICAgICAgICByZXR1cm47CiAgICAgdjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IHNoZWxsLT5jb250ZXh0KCk7CiAgICAgdjg6
OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGdldFNjcmlwdHNGdW5jdGlvbiA9IHY4OjpMb2NhbDx2ODo6
RnVuY3Rpb24+OjpDYXN0KG1fZGVidWdnZXJTY3JpcHQuZ2V0KCktPkdldCh2ODo6U3RyaW5nOjpO
ZXcoImdldFNjcmlwdHMiKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRDb250cm9sbGVyLmNwcAppbmRleCBmY2IxZjUzNDhlMzI2ZDNmZjQ5N2JiYmI3ZGU1YTRiMTI0
NjM1MWJmLi4yNTRmM2JhYmE3ZjE0MDY4MTc3ZWY2OWJjMTg3ZmIzYzhjMTA2MGY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcApAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkJp
bmRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2luY2x1
ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQu
aCIKQEAgLTExMSw3ICsxMTIsNyBAQCBTY3JpcHRDb250cm9sbGVyOjpTY3JpcHRDb250cm9sbGVy
KEZyYW1lKiBmcmFtZSkKIAogU2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRyb2xsZXIoKQog
ewotICAgIHdpbmRvd1NoZWxsKCktPmRlc3Ryb3lHbG9iYWwoKTsKKyAgICBtX3dpbmRvd1NoZWxs
LT5kZXN0cm95R2xvYmFsKCk7CiAgICAgY2xlYXJGb3JDbG9zZSgpOwogfQogCkBAIC0xNTQsMTcg
KzE1NSwyMyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnJlc2V0KCkKICAgICBWOEdDQ29udHJv
bGxlcjo6aGludEZvckNvbGxlY3RHYXJiYWdlKCk7CiB9CiAKK3ZvaWQgU2NyaXB0Q29udHJvbGxl
cjo6Y2xlYXJGb3JPdXRPZk1lbW9yeSgpCit7CisgICAgY2xlYXJGb3JDbG9zZSgpOworICAgIG1f
d2luZG93U2hlbGwtPmRlc3Ryb3lHbG9iYWwoKTsKK30KKwogdm9pZCBTY3JpcHRDb250cm9sbGVy
OjpjbGVhckZvckNsb3NlKCkKIHsKICAgICBkb3VibGUgc3RhcnQgPSBjdXJyZW50VGltZSgpOwog
ICAgIHJlc2V0KCk7Ci0gICAgd2luZG93U2hlbGwoKS0+Y2xlYXJGb3JDbG9zZSgpOworICAgIG1f
d2luZG93U2hlbGwtPmNsZWFyRm9yQ2xvc2UoKTsKICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0
b2dyYW1DdXN0b21Db3VudHMoIldlYkNvcmUuU2NyaXB0Q29udHJvbGxlci5jbGVhckZvckNsb3Nl
IiwgKGN1cnJlbnRUaW1lKCkgLSBzdGFydCkgKiAxMDAwLCAwLCAxMDAwMCwgNTApOwogfQogCiB2
b2lkIFNjcmlwdENvbnRyb2xsZXI6OnVwZGF0ZVNlY3VyaXR5T3JpZ2luKCkKIHsKLSAgICB3aW5k
b3dTaGVsbCgpLT51cGRhdGVTZWN1cml0eU9yaWdpbigpOworICAgIG1fd2luZG93U2hlbGwtPnVw
ZGF0ZVNlY3VyaXR5T3JpZ2luKCk7CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRl
UGxhdGZvcm1TY3JpcHRPYmplY3RzKCkKQEAgLTMxMCw0NiArMzE3LDY0IEBAIFNjcmlwdFZhbHVl
IFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJj
ZUNvZGUpCiAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKG9iamVjdCk7CiB9CiAKLVY4RE9NV2luZG93
U2hlbGwqIFNjcmlwdENvbnRyb2xsZXI6OmVuc3VyZUlzb2xhdGVkV29ybGRDb250ZXh0KGludCB3
b3JsZElkLCBpbnQgZXh0ZW5zaW9uR3JvdXApCitib29sIFNjcmlwdENvbnRyb2xsZXI6OmluaXRp
YWxpemVNYWluV29ybGQoKQogewotICAgIEFTU0VSVCh3b3JsZElkICE9IERPTVdyYXBwZXJXb3Js
ZDo6bWFpbldvcmxkSWQpOwotCi0gICAgLy8gQ2hlY2sgdGhlIG1hcCBmb3Igbm9uLXRlbXBvcmFy
eSB3b3JsZHMuCi0gICAgaWYgKHdvcmxkSWQgIT0gRE9NV3JhcHBlcldvcmxkOjp1bmluaXRpYWxp
emVkV29ybGRJZCkgewotICAgICAgICBJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0g
bV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxkSWQpOwotICAgICAgICBpZiAoaXRlciAhPSBtX2lz
b2xhdGVkV29ybGRzLmVuZCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXRlci0+dmFsdWUtPndv
cmxkKCktPndvcmxkSWQoKSA9PSB3b3JsZElkKTsKLSAgICAgICAgICAgIEFTU0VSVChpdGVyLT52
YWx1ZS0+d29ybGQoKS0+ZXh0ZW5zaW9uR3JvdXAoKSA9PSBleHRlbnNpb25Hcm91cCk7Ci0gICAg
ICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaWYgKG1f
d2luZG93U2hlbGwtPmlzQ29udGV4dEluaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gd2luZG93U2hlbGwobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5pc0Nv
bnRleHRJbml0aWFsaXplZCgpOworfQogCi0gICAgUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gd29y
bGQgPSBET01XcmFwcGVyV29ybGQ6OmVuc3VyZUlzb2xhdGVkV29ybGQod29ybGRJZCwgZXh0ZW5z
aW9uR3JvdXApOwotICAgIE93blB0cjxWOERPTVdpbmRvd1NoZWxsPiBpc29sYXRlZFdvcmxkU2hl
bGwgPSBWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGUobV9mcmFtZSwgd29ybGQpOwotICAgIG1faXNv
bGF0ZWRXb3JsZHMuc2V0KHdvcmxkLT53b3JsZElkKCksIGlzb2xhdGVkV29ybGRTaGVsbC5nZXQo
KSk7Ci0gICAgcmV0dXJuIGlzb2xhdGVkV29ybGRTaGVsbC5sZWFrUHRyKCk7CisvLyBGSVhNRTog
UmVtb3ZlIHRoaXMgZnVuY3Rpb24uIFRoZXJlIGlzIGN1cnJlbnRseSBhbiBpc3N1ZSB3aXRoIHRo
ZSBpbnNwZWN0b3IgcmVsYXRlZCB0byB0aGUgY2FsbCB0byBkaXNwYXRjaERpZENsZWFyV2luZG93
T2JqZWN0SW5Xb3JsZCBpbiBTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTaGVsbC4KK3N0YXRpYyBE
T01XcmFwcGVyV29ybGQqIGV4aXN0aW5nV2luZG93U2hlbGxXb3JrYXJvdW5kV29ybGQoKQorewor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4sIHdvcmxkLCAo
RE9NV3JhcHBlcldvcmxkOjpjcmVhdGVVbmluaXRpYWxpemVkV29ybGQoKSkpOworICAgIHJldHVy
biB3b3JsZC5nZXQoKTsKIH0KIAotVjhET01XaW5kb3dTaGVsbCogU2NyaXB0Q29udHJvbGxlcjo6
ZXhpc3RpbmdXaW5kb3dTaGVsbEludGVybmFsKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCitWOERP
TVdpbmRvd1NoZWxsKiBTY3JpcHRDb250cm9sbGVyOjpleGlzdGluZ1dpbmRvd1NoZWxsKERPTVdy
YXBwZXJXb3JsZCogd29ybGQpCiB7CiAgICAgQVNTRVJUKHdvcmxkKTsKIAotICAgIGlmIChMSUtF
TFkod29ybGQtPmlzTWFpbldvcmxkKCkpKQorICAgIGlmICh3b3JsZC0+aXNNYWluV29ybGQoKSkK
KyAgICAgICAgcmV0dXJuIG1fd2luZG93U2hlbGwtPmlzQ29udGV4dEluaXRpYWxpemVkKCkgPyBt
X3dpbmRvd1NoZWxsLmdldCgpIDogMDsKKworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBibG9j
ay4gU2VlIGNvbW1lbnQgd2l0aCBleGlzdGluZ1dpbmRvd1NoZWxsV29ya2Fyb3VuZFdvcmxkKCku
CisgICAgaWYgKHdvcmxkLT53b3JsZElkKCkgPT0gRE9NV3JhcHBlcldvcmxkOjp1bmluaXRpYWxp
emVkV29ybGRJZCkgeworICAgICAgICBBU1NFUlQod29ybGQgPT0gZXhpc3RpbmdXaW5kb3dTaGVs
bFdvcmthcm91bmRXb3JsZCgpKTsKICAgICAgICAgcmV0dXJuIG1fd2luZG93U2hlbGwuZ2V0KCk7
CisgICAgfQogCiAgICAgSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1faXNvbGF0
ZWRXb3JsZHMuZmluZCh3b3JsZC0+d29ybGRJZCgpKTsKLSAgICByZXR1cm4gaXRlciA9PSBtX2lz
b2xhdGVkV29ybGRzLmVuZCgpID8gMCA6IGl0ZXItPnZhbHVlOworICAgIHJldHVybiBpdGVyID09
IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkgPyAwIDogaXRlci0+dmFsdWUtPmlzQ29udGV4dEluaXRp
YWxpemVkKCkgPyBpdGVyLT52YWx1ZSA6IDA7CiB9CiAKIFY4RE9NV2luZG93U2hlbGwqIFNjcmlw
dENvbnRyb2xsZXI6OndpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiB7Ci0gICAg
VjhET01XaW5kb3dTaGVsbCogc2hlbGwgPSBleGlzdGluZ1dpbmRvd1NoZWxsSW50ZXJuYWwod29y
bGQpOwotICAgIGlmIChMSUtFTFkoISFzaGVsbCkpCi0gICAgICAgIHJldHVybiBzaGVsbDsKKyAg
ICBBU1NFUlQod29ybGQpOwogCi0gICAgT3duUHRyPFY4RE9NV2luZG93U2hlbGw+IGlzb2xhdGVk
V29ybGRTaGVsbCA9IFY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZShtX2ZyYW1lLCB3b3JsZCk7Ci0g
ICAgbV9pc29sYXRlZFdvcmxkcy5zZXQod29ybGQtPndvcmxkSWQoKSwgaXNvbGF0ZWRXb3JsZFNo
ZWxsLmdldCgpKTsKLSAgICByZXR1cm4gaXNvbGF0ZWRXb3JsZFNoZWxsLmxlYWtQdHIoKTsKKyAg
ICBWOERPTVdpbmRvd1NoZWxsKiBzaGVsbCA9IDA7CisgICAgaWYgKHdvcmxkLT5pc01haW5Xb3Js
ZCgpKQorICAgICAgICBzaGVsbCA9IG1fd2luZG93U2hlbGwuZ2V0KCk7CisgICAgZWxzZSB7Cisg
ICAgICAgIElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRz
LmZpbmQod29ybGQtPndvcmxkSWQoKSk7CisgICAgICAgIGlmIChpdGVyICE9IG1faXNvbGF0ZWRX
b3JsZHMuZW5kKCkpCisgICAgICAgICAgICBzaGVsbCA9IGl0ZXItPnZhbHVlOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIE93blB0cjxWOERPTVdpbmRvd1NoZWxsPiBpc29sYXRlZFdvcmxk
U2hlbGwgPSBWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGUobV9mcmFtZSwgd29ybGQpOworICAgICAg
ICAgICAgc2hlbGwgPSBpc29sYXRlZFdvcmxkU2hlbGwuZ2V0KCk7CisgICAgICAgICAgICBtX2lz
b2xhdGVkV29ybGRzLnNldCh3b3JsZC0+d29ybGRJZCgpLCBpc29sYXRlZFdvcmxkU2hlbGwubGVh
a1B0cigpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIXNoZWxsLT5pc0NvbnRleHRJbml0
aWFsaXplZCgpKSB7CisgICAgICAgIGlmIChzaGVsbC0+aW5pdGlhbGl6ZUlmTmVlZGVkKCkpIHsK
KyAgICAgICAgICAgIGlmICh3b3JsZC0+aXNNYWluV29ybGQoKSkKKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogUmVtb3ZlIHRoaXMgaWYgY2xhdXNlLiBTZWUgY29tbWVudCB3aXRoIGV4aXN0aW5n
V2luZG93U2hlbGxXb3JrYXJvdW5kV29ybGQoKS4KKyAgICAgICAgICAgICAgICBtX2ZyYW1lLT5s
b2FkZXIoKS0+ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoZXhpc3RpbmdXaW5k
b3dTaGVsbFdvcmthcm91bmRXb3JsZCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29y
bGQod29ybGQpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzaGVsbDsKIH0KIAogdm9p
ZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwg
Y29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3Jv
dXAsIFZlY3RvcjxTY3JpcHRWYWx1ZT4qIHJlc3VsdHMpCkBAIC0zNjMsMTAgKzM4OCwxMCBAQCB2
b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElE
LCBjb25zdCBWZWN0b3I8U2NyaXB0UwogICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHY4UmVzdWx0
czsKICAgICB7CiAgICAgICAgIHY4OjpIYW5kbGVTY29wZSBldmFsdWF0ZUhhbmRsZVNjb3BlOwot
ICAgICAgICBWOERPTVdpbmRvd1NoZWxsKiBpc29sYXRlZFdvcmxkU2hlbGwgPSBlbnN1cmVJc29s
YXRlZFdvcmxkQ29udGV4dCh3b3JsZElELCBleHRlbnNpb25Hcm91cCk7CisgICAgICAgIFJlZlB0
cjxET01XcmFwcGVyV29ybGQ+IHdvcmxkID0gRE9NV3JhcHBlcldvcmxkOjplbnN1cmVJc29sYXRl
ZFdvcmxkKHdvcmxkSUQsIGV4dGVuc2lvbkdyb3VwKTsKKyAgICAgICAgVjhET01XaW5kb3dTaGVs
bCogaXNvbGF0ZWRXb3JsZFNoZWxsID0gd2luZG93U2hlbGwod29ybGQuZ2V0KCkpOwogCi0gICAg
ICAgIGlzb2xhdGVkV29ybGRTaGVsbC0+aW5pdGlhbGl6ZUlmTmVlZGVkKCk7Ci0gICAgICAgIGlm
IChpc29sYXRlZFdvcmxkU2hlbGwtPmNvbnRleHQoKS5Jc0VtcHR5KCkpCisgICAgICAgIGlmICgh
aXNvbGF0ZWRXb3JsZFNoZWxsLT5pc0NvbnRleHRJbml0aWFsaXplZCgpKQogICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpM
b2NhbDx2ODo6Q29udGV4dD46Ok5ldyhpc29sYXRlZFdvcmxkU2hlbGwtPmNvbnRleHQoKSk7CkBA
IC00MjMsMTQgKzQ0OCwxMiBAQCB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IFNjcmlwdENvbnRyb2xs
ZXI6OmN1cnJlbnRXb3JsZENvbnRleHQoKQogICAgICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2
ODo6Q29udGV4dD4oKTsKICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5l
dyhjb250ZXh0KTsKICAgICB9Ci0gICAgd2luZG93U2hlbGwoKS0+aW5pdGlhbGl6ZUlmTmVlZGVk
KCk7Ci0gICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyh3aW5kb3dTaGVsbCgp
LT5jb250ZXh0KCkpOworICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcod2lu
ZG93U2hlbGwobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5jb250ZXh0KCkpOwogfQogCiB2ODo6
TG9jYWw8djg6OkNvbnRleHQ+IFNjcmlwdENvbnRyb2xsZXI6Om1haW5Xb3JsZENvbnRleHQoKQog
ewotICAgIHdpbmRvd1NoZWxsKCktPmluaXRpYWxpemVJZk5lZWRlZCgpOwotICAgIHJldHVybiB2
ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcod2luZG93U2hlbGwoKS0+Y29udGV4dCgpKTsKKyAg
ICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KHdpbmRvd1NoZWxsKG1haW5UaHJl
YWROb3JtYWxXb3JsZCgpKS0+Y29udGV4dCgpKTsKIH0KIAogdjg6OkxvY2FsPHY4OjpDb250ZXh0
PiBTY3JpcHRDb250cm9sbGVyOjptYWluV29ybGRDb250ZXh0KEZyYW1lKiBmcmFtZSkKQEAgLTQ2
MSwyNiArNDg0LDIzIEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6YmluZFRvV2luZG93T2JqZWN0
KEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBrZXksIE5QT2JqCiAKIGJvb2wgU2NyaXB0Q29u
dHJvbGxlcjo6aGF2ZUludGVycHJldGVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gd2luZG93U2hl
bGwoKS0+aXNDb250ZXh0SW5pdGlhbGl6ZWQoKTsKKyAgICByZXR1cm4gbV93aW5kb3dTaGVsbC0+
aXNDb250ZXh0SW5pdGlhbGl6ZWQoKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjplbmFi
bGVFdmFsKCkKIHsKLSAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0gICAgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gd2luZG93U2hlbGwoKS0+Y29udGV4dCgpOwot
ICAgIGlmICh2OENvbnRleHQuSXNFbXB0eSgpKQorICAgIGlmICghbV93aW5kb3dTaGVsbC0+aXND
b250ZXh0SW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgdjhDb250ZXh0LT5B
bGxvd0NvZGVHZW5lcmF0aW9uRnJvbVN0cmluZ3ModHJ1ZSk7CisgICAgdjg6OkhhbmRsZVNjb3Bl
IGhhbmRsZVNjb3BlOworICAgIG1fd2luZG93U2hlbGwtPmNvbnRleHQoKS0+QWxsb3dDb2RlR2Vu
ZXJhdGlvbkZyb21TdHJpbmdzKHRydWUpOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmRp
c2FibGVFdmFsKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewotICAgIHY4OjpIYW5kbGVT
Y29wZSBoYW5kbGVTY29wZTsKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQg
PSB3aW5kb3dTaGVsbCgpLT5jb250ZXh0KCk7Ci0gICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkp
CisgICAgaWYgKCFtX3dpbmRvd1NoZWxsLT5pc0NvbnRleHRJbml0aWFsaXplZCgpKQogICAgICAg
ICByZXR1cm47Ci0KKyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisgICAgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gbV93aW5kb3dTaGVsbC0+Y29udGV4dCgpOwog
ICAgIHY4Q29udGV4dC0+QWxsb3dDb2RlR2VuZXJhdGlvbkZyb21TdHJpbmdzKGZhbHNlKTsKICAg
ICB2OENvbnRleHQtPlNldEVycm9yTWVzc2FnZUZvckNvZGVHZW5lcmF0aW9uRnJvbVN0cmluZ3Mo
djhTdHJpbmcoZXJyb3JNZXNzYWdlKSk7CiB9CkBAIC01MzksMTEgKzU1OSw2IEBAIHZvaWQgU2Ny
aXB0Q29udHJvbGxlcjo6Y2xlYW51cFNjcmlwdE9iamVjdHNGb3JQbHVnaW4oV2lkZ2V0KiBuYXRp
dmVIYW5kbGUpCiAgICAgbV9wbHVnaW5PYmplY3RzLnJlbW92ZShpdCk7CiB9CiAKLXZvaWQgU2Ny
aXB0Q29udHJvbGxlcjo6Z2V0QWxsV29ybGRzKFZlY3RvcjxSZWZQdHI8RE9NV3JhcHBlcldvcmxk
PiA+JiB3b3JsZHMpCi17Ci0gICAgd29ybGRzLmFwcGVuZChtYWluVGhyZWFkTm9ybWFsV29ybGQo
KSk7Ci19Ci0KIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKGNvbnN0IFNj
cmlwdFNvdXJjZUNvZGUmIHNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiB7CkBAIC02NDIsNyArNjU3LDcgQEAgdm9p
ZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhcldpbmRvd1NoZWxsKERPTVdpbmRvdyosIGJvb2wpCiAg
ICAgcmVzZXQoKTsKICAgICAvLyBWOCBiaW5kaW5nIGV4cGVjdHMgU2NyaXB0Q29udHJvbGxlcjo6
Y2xlYXJXaW5kb3dTaGVsbCBvbmx5IGJlIGNhbGxlZAogICAgIC8vIHdoZW4gYSBmcmFtZSBpcyBs
b2FkaW5nIGEgbmV3IHBhZ2UuIFRoaXMgY3JlYXRlcyBhIG5ldyBjb250ZXh0IGZvciB0aGUgbmV3
IHBhZ2UuCi0gICAgd2luZG93U2hlbGwoKS0+Y2xlYXJGb3JOYXZpZ2F0aW9uKCk7CisgICAgbV93
aW5kb3dTaGVsbC0+Y2xlYXJGb3JOYXZpZ2F0aW9uKCk7CiAgICAgSGlzdG9ncmFtU3VwcG9ydDo6
aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJXZWJDb3JlLlNjcmlwdENvbnRyb2xsZXIuY2xlYXJXaW5k
b3dTaGVsbCIsIChjdXJyZW50VGltZSgpIC0gc3RhcnQpICogMTAwMCwgMCwgMTAwMDAsIDUwKTsK
IH0KIApAQCAtNjcyLDEwICs2ODcsMTAgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjb2xsZWN0
SXNvbGF0ZWRDb250ZXh0cyhWZWN0b3I8c3RkOjpwYWlyPFNjcmlwdFN0YXRlKiwgU2UKIGJvb2wg
U2NyaXB0Q29udHJvbGxlcjo6c2V0Q29udGV4dERlYnVnSWQoaW50IGRlYnVnSWQpCiB7CiAgICAg
QVNTRVJUKGRlYnVnSWQgPiAwKTsKLSAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7Ci0gICAgdjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IHdpbmRvd1NoZWxsKCktPmNvbnRleHQoKTsK
LSAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpCisgICAgaWYgKCFtX3dpbmRvd1NoZWxsLT5pc0Nv
bnRleHRJbml0aWFsaXplZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdjg6OkhhbmRs
ZVNjb3BlIHNjb3BlOworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBtX3dp
bmRvd1NoZWxsLT5jb250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0LT5HZXREYXRhKCktPklzVW5k
ZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNzA4LDE3ICs3MjMsMjIgQEAg
dm9pZCBTY3JpcHRDb250cm9sbGVyOjphdHRhY2hEZWJ1Z2dlcih2b2lkKikKIAogdm9pZCBTY3Jp
cHRDb250cm9sbGVyOjp1cGRhdGVEb2N1bWVudCgpCiB7Ci0gICAgd2luZG93U2hlbGwoKS0+dXBk
YXRlRG9jdW1lbnQoKTsKKyAgICAvLyBGb3IgYW4gdW5pbml0aWFsaXplZCBtYWluIHdpbmRvdyBz
aGVsbCwgZG8gbm90IGluY3VyIHRoZSBjb3N0IG9mIGNvbnRleHQgaW5pdGlhbGl6YXRpb24gZHVy
aW5nIEZyYW1lTG9hZGVyOjppbml0KCkuCisgICAgaWYgKCghbV93aW5kb3dTaGVsbC0+aXNDb250
ZXh0SW5pdGlhbGl6ZWQoKSB8fCAhbV93aW5kb3dTaGVsbC0+aXNHbG9iYWxJbml0aWFsaXplZCgp
KSAmJiBtX2ZyYW1lLT5sb2FkZXIoKS0+c3RhdGVNYWNoaW5lKCktPmNyZWF0aW5nSW5pdGlhbEVt
cHR5RG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFpbml0aWFsaXplTWFp
bldvcmxkKCkpCisgICAgICAgIHdpbmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+
dXBkYXRlRG9jdW1lbnQoKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpuYW1lZEl0ZW1B
ZGRlZChIVE1MRG9jdW1lbnQqIGRvYywgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewotICAg
IHdpbmRvd1NoZWxsKCktPm5hbWVkSXRlbUFkZGVkKGRvYywgbmFtZSk7CisgICAgd2luZG93U2hl
bGwobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpLT5uYW1lZEl0ZW1BZGRlZChkb2MsIG5hbWUpOwog
fQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6Om5hbWVkSXRlbVJlbW92ZWQoSFRNTERvY3VtZW50
KiBkb2MsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKLSAgICB3aW5kb3dTaGVsbCgpLT5u
YW1lZEl0ZW1SZW1vdmVkKGRvYywgbmFtZSk7CisgICAgd2luZG93U2hlbGwobWFpblRocmVhZE5v
cm1hbFdvcmxkKCkpLT5uYW1lZEl0ZW1SZW1vdmVkKGRvYywgbmFtZSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRy
b2xsZXIuaAppbmRleCA4NDBkYzRjYWY5YThlNThhYTQ5N2IzZDQ5MDMwZDJkOTQ0NDNmZGMxLi5i
NzA4ZWUyMjhmM2ViODFlYWFhYjg4NGMyZTJhOTI3Yzg1MWU3ODAwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCkBAIC02NiwxMSArNjYsOSBAQCBw
dWJsaWM6CiAgICAgU2NyaXB0Q29udHJvbGxlcihGcmFtZSopOwogICAgIH5TY3JpcHRDb250cm9s
bGVyKCk7CiAKLSAgICBWOERPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbCgpIGNvbnN0IHsgcmV0
dXJuIG1fd2luZG93U2hlbGwuZ2V0KCk7IH0KKyAgICBib29sIGluaXRpYWxpemVNYWluV29ybGQo
KTsKICAgICBWOERPTVdpbmRvd1NoZWxsKiB3aW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqKTsK
LSAgICAvLyBGSVhNRTogUmVwbGFjZSBleGlzdGluZ1dpbmRvd1NoZWxsIHdpdGggZXhpc3RpbmdX
aW5kb3dTaGVsbEludGVybmFsIHNlZSBjb21tZW50IGluIFY4RE9NV2luZG93U2hlbGw6OmluaXRp
YWxpemVJZk5lZWRlZC4KLSAgICBTY3JpcHRDb250cm9sbGVyKiBleGlzdGluZ1dpbmRvd1NoZWxs
KERPTVdyYXBwZXJXb3JsZCopIHsgcmV0dXJuIHRoaXM7IH0KLSAgICBWOERPTVdpbmRvd1NoZWxs
KiBleGlzdGluZ1dpbmRvd1NoZWxsSW50ZXJuYWwoRE9NV3JhcHBlcldvcmxkKik7CisgICAgVjhE
T01XaW5kb3dTaGVsbCogZXhpc3RpbmdXaW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqKTsKIAog
ICAgIFNjcmlwdFZhbHVlIGV4ZWN1dGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpOwog
ICAgIFNjcmlwdFZhbHVlIGV4ZWN1dGVTY3JpcHQoY29uc3QgU3RyaW5nJiBzY3JpcHQsIGJvb2wg
Zm9yY2VVc2VyR2VzdHVyZSA9IGZhbHNlKTsKQEAgLTE3MywxMyArMTcxLDE3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGNsZWFudXBTY3JpcHRPYmplY3RzRm9yUGx1Z2luKFdpZGdldCopOwogCiAgICAg
dm9pZCBjbGVhckZvckNsb3NlKCk7CisgICAgdm9pZCBjbGVhckZvck91dE9mTWVtb3J5KCk7CisK
IAogICAgIE5QT2JqZWN0KiBjcmVhdGVTY3JpcHRPYmplY3RGb3JQbHVnaW5FbGVtZW50KEhUTUxQ
bHVnSW5FbGVtZW50Kik7CiAgICAgTlBPYmplY3QqIHdpbmRvd1NjcmlwdE5QT2JqZWN0KCk7CiAK
LSAgICAvLyBEdW1teSBtZXRob2QgdG8gYXZvaWQgYSBidW5jaCBvZiBpZmRlZidzIGluIFdlYkNv
cmUuCiAgICAgdm9pZCBldmFsdWF0ZUluV29ybGQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYsIERP
TVdyYXBwZXJXb3JsZCopOwotICAgIHN0YXRpYyB2b2lkIGdldEFsbFdvcmxkcyhWZWN0b3I8UmVm
UHRyPERPTVdyYXBwZXJXb3JsZD4gPiYgd29ybGRzKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRBbGxX
b3JsZHMoVmVjdG9yPFJlZlB0cjxET01XcmFwcGVyV29ybGQ+ID4mIHdvcmxkcykKKyAgICB7Cisg
ICAgICAgIERPTVdyYXBwZXJXb3JsZDo6Z2V0QWxsV29ybGRzKHdvcmxkcyk7CisgICAgfQogCiAg
ICAgLy8gUmVnaXN0ZXJzIGEgdjggZXh0ZW5zaW9uIHRvIGJlIGF2YWlsYWJsZSBvbiB3ZWJwYWdl
cy4gV2lsbCBvbmx5CiAgICAgLy8gYWZmZWN0IHY4IGNvbnRleHRzIGluaXRpYWxpemVkIGFmdGVy
IHRoaXMgY2FsbC4gVGFrZXMgb3duZXJzaGlwIG9mCkBAIC0yMDEsNyArMjAzLDYgQEAgcHJpdmF0
ZToKICAgICBGcmFtZSogbV9mcmFtZTsKICAgICBjb25zdCBTdHJpbmcqIG1fc291cmNlVVJMOwog
Ci0gICAgVjhET01XaW5kb3dTaGVsbCogZW5zdXJlSXNvbGF0ZWRXb3JsZENvbnRleHQoaW50IHdv
cmxkSWQsIGludCBleHRlbnNpb25Hcm91cCk7CiAgICAgT3duUHRyPFY4RE9NV2luZG93U2hlbGw+
IG1fd2luZG93U2hlbGw7CiAKICAgICAvLyBUaGUgaXNvbGF0ZWQgd29ybGRzIHdlIGFyZSB0cmFj
a2luZyBmb3IgdGhpcyBmcmFtZS4gV2UgaG9sZCB0aGVtIGFsaXZlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhCaW5kaW5nLmNwcAppbmRleCA3YzM1ZDQ1YjQ0ODg1MGMwY2U2Y2VmN2QyODgx
Y2ViMzQxZWZlYWQxLi42ZTkzMDc5OGUyMTI4OGQ4YWViOTRkYTIzMDVjNDU4NTBhM2U0MjIwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAKQEAgLTMyMyw3ICszMjMs
OCBAQCBWOFBlckNvbnRleHREYXRhKiBwZXJDb250ZXh0RGF0YUZvckN1cnJlbnRXb3JsZChGcmFt
ZSogZnJhbWUpCiAgICAgVjhET01XaW5kb3dTaGVsbCogaXNvbGF0ZWRTaGVsbDsKICAgICBpZiAo
VU5MSUtFTFkoISEoaXNvbGF0ZWRTaGVsbCA9IFY4RE9NV2luZG93U2hlbGw6OmdldEVudGVyZWQo
KSkpKQogICAgICAgICByZXR1cm4gaXNvbGF0ZWRTaGVsbC0+cGVyQ29udGV4dERhdGEoKTsKLSAg
ICByZXR1cm4gZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT5wZXJDb250ZXh0RGF0YSgp
OworICAgIFY4RE9NV2luZG93U2hlbGwqIG1haW5TaGVsbCA9IGZyYW1lLT5zY3JpcHQoKS0+ZXhp
c3RpbmdXaW5kb3dTaGVsbChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAgcmV0dXJuIG1h
aW5TaGVsbCA/IG1haW5TaGVsbC0+cGVyQ29udGV4dERhdGEoKSA6IDA7CiB9CiAKIGJvb2wgaGFu
ZGxlT3V0T2ZNZW1vcnkoKQpAQCAtMzM4LDggKzMzOSw3IEBAIGJvb2wgaGFuZGxlT3V0T2ZNZW1v
cnkoKQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgZnJhbWUt
PnNjcmlwdCgpLT5jbGVhckZvckNsb3NlKCk7Ci0gICAgZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dT
aGVsbCgpLT5kZXN0cm95R2xvYmFsKCk7CisgICAgZnJhbWUtPnNjcmlwdCgpLT5jbGVhckZvck91
dE9mTWVtb3J5KCk7CiAKICNpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICBmcmFtZS0+bG9hZGVy
KCktPmNsaWVudCgpLT5kaWRFeGhhdXN0TWVtb3J5QXZhaWxhYmxlRm9yU2NyaXB0KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCmluZGV4IDAy
YjM0N2RjMjdiN2U2YWI5MDMzMmJhMmNkN2RhZTk2NjM2NDU5ZmUuLjFmNzhiZDZiNWViZmNmOGEz
ZDU2OTMzMTA3YTJmZTExOWNkNDM1OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCkBAIC0yMDAsMTIgKzIwMCw2IEBAIFY4RE9NV2luZG93
U2hlbGw6OlY4RE9NV2luZG93U2hlbGwoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPERPTVdyYXBw
ZXJXb3JsZD4gd29yCiB7CiB9CiAKLWJvb2wgVjhET01XaW5kb3dTaGVsbDo6aXNDb250ZXh0SW5p
dGlhbGl6ZWQoKQotewotICAgIEFTU0VSVChtX2NvbnRleHQuaXNFbXB0eSgpIHx8ICFtX2dsb2Jh
bC5pc0VtcHR5KCkpOwotICAgIHJldHVybiAhbV9jb250ZXh0LmlzRW1wdHkoKTsKLX0KLQogdm9p
ZCBWOERPTVdpbmRvd1NoZWxsOjpkZXN0cm95SXNvbGF0ZWRTaGVsbCgpCiB7CiAgICAgZGlzcG9z
ZUNvbnRleHQodHJ1ZSk7CkBAIC0zNDYsOSArMzQwLDggQEAgYm9vbCBWOERPTVdpbmRvd1NoZWxs
Ojppbml0aWFsaXplSWZOZWVkZWQoKQogCiAgICAgLy8gRmxhZyBjb250ZXh0IGFzIGlzb2xhdGVk
LgogICAgIGlmICghaXNNYWluV29ybGQpIHsKLSAgICAgICAgVjhET01XaW5kb3dTaGVsbCogbWFp
bldpbmRvdyA9IG1fZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpOwotICAgICAgICBtYWlu
V2luZG93LT5pbml0aWFsaXplSWZOZWVkZWQoKTsKLSAgICAgICAgaWYgKCFtYWluV2luZG93LT5j
b250ZXh0KCkuSXNFbXB0eSgpKQorICAgICAgICBWOERPTVdpbmRvd1NoZWxsKiBtYWluV2luZG93
ID0gbV9mcmFtZS0+c2NyaXB0KCktPmV4aXN0aW5nV2luZG93U2hlbGwobWFpblRocmVhZE5vcm1h
bFdvcmxkKCkpOworICAgICAgICBpZiAobWFpbldpbmRvdyAmJiAhbWFpbldpbmRvdy0+Y29udGV4
dCgpLklzRW1wdHkoKSkKICAgICAgICAgICAgIHNldEluamVjdGVkU2NyaXB0Q29udGV4dERlYnVn
SWQobV9jb250ZXh0LmdldCgpLCBtX2ZyYW1lLT5zY3JpcHQoKS0+Y29udGV4dERlYnVnSWQobWFp
bldpbmRvdy0+Y29udGV4dCgpKSk7CiAgICAgICAgIHNldElzb2xhdGVkV29ybGRGaWVsZCh0aGlz
LCBjb250ZXh0KTsKICAgICB9CkBAIC0zODgsMTMgKzM4MSw2IEBAIGJvb2wgVjhET01XaW5kb3dT
aGVsbDo6aW5pdGlhbGl6ZUlmTmVlZGVkKCkKICAgICAgICAgfQogICAgIH0KICAgICBtX2ZyYW1l
LT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpZENyZWF0ZVNjcmlwdENvbnRleHQobV9jb250ZXh0Lmdl
dCgpLCBtX3dvcmxkLT5leHRlbnNpb25Hcm91cCgpLCBtX3dvcmxkLT53b3JsZElkKCkpOwotCi0g
ICAgaWYgKGlzTWFpbldvcmxkKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNhbGwgaXMgcHJv
YmFibHkgaW4gdGhlIHdyb25nIHNwb3QsIGJ1dCBjYXVzZXMgYSB0ZXN0IHRpbWVvdXQgZm9yIGh0
dHAvdGVzdHMvbWlzYy93aW5kb3ctb3Blbi10aGVuLXdyaXRlLmh0bWwgd2hlbiByZW1vdmVkLgot
ICAgICAgICAvLyBBZGRpdGlvbmFsbHksIFNjcmlwdENvbnRyb2xsZXI6OmV4aXN0aW5nV2luZG93
U2hlbGwgY2Fubm90IGJlIGNvcnJlY3RseSBpbXBsZW1lbnRlZCB1bnRpbCB0aGlzIGNhbGwgaXMg
Z29uZS4KLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dP
YmplY3RJbldvcmxkKDApOwotICAgIH0KLQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01NTIs
NyArNTM4LDcgQEAgdm9pZCBWOERPTVdpbmRvd1NoZWxsOjp1cGRhdGVEb2N1bWVudCgpCiAgICAg
QVNTRVJUKG1fd29ybGQtPmlzTWFpbldvcmxkKCkpOwogICAgIGlmIChtX2dsb2JhbC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIWluaXRpYWxpemVJZk5lZWRlZCgpKQorICAg
IGlmIChtX2NvbnRleHQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgdXBkYXRlRG9j
dW1lbnRQcm9wZXJ0eSgpOwogICAgIHVwZGF0ZVNlY3VyaXR5T3JpZ2luKCk7CkBAIC01NzcsNyAr
NTYzLDcgQEAgdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpuYW1lZEl0ZW1BZGRlZChIVE1MRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcKIHsKICAgICBBU1NFUlQobV93b3JsZC0+
aXNNYWluV29ybGQoKSk7CiAKLSAgICBpZiAoIWluaXRpYWxpemVJZk5lZWRlZCgpKQorICAgIGlm
IChtX2NvbnRleHQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICB2ODo6SGFuZGxl
U2NvcGUgaGFuZGxlU2NvcGU7CkBAIC01OTIsMTAgKzU3OCwxMCBAQCB2b2lkIFY4RE9NV2luZG93
U2hlbGw6Om5hbWVkSXRlbVJlbW92ZWQoSFRNTERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRv
bWljU3RyaQogewogICAgIEFTU0VSVChtX3dvcmxkLT5pc01haW5Xb3JsZCgpKTsKIAotICAgIGlm
IChkb2N1bWVudC0+aGFzTmFtZWRJdGVtKG5hbWUuaW1wbCgpKSB8fCBkb2N1bWVudC0+aGFzRXh0
cmFOYW1lZEl0ZW0obmFtZS5pbXBsKCkpKQorICAgIGlmIChtX2NvbnRleHQuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWluaXRpYWxpemVJZk5lZWRlZCgpKQorICAgIGlm
IChkb2N1bWVudC0+aGFzTmFtZWRJdGVtKG5hbWUuaW1wbCgpKSB8fCBkb2N1bWVudC0+aGFzRXh0
cmFOYW1lZEl0ZW0obmFtZS5pbXBsKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICB2ODo6SGFu
ZGxlU2NvcGUgaGFuZGxlU2NvcGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTVdpbmRvd1NoZWxsLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERP
TVdpbmRvd1NoZWxsLmgKaW5kZXggN2QyMDZkNGNkNjllZTYzZjY4NDI4NzE4ZjdlYjhmMmVhNTQz
YzY3Mi4uOTVmNjE4ZmUxOTgyOWZjMDFiZTcyNWUzZTMyODEwZDVkOGE0ZDIwZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuaApAQCAtNjcsNyArNjcs
OCBAQCBwdWJsaWM6CiAgICAgLy8gKGUuZy4sIGFmdGVyIHNldHRpbmcgZG9jb3VtZW50LmRvbWFp
bikuCiAgICAgdm9pZCB1cGRhdGVTZWN1cml0eU9yaWdpbigpOwogCi0gICAgYm9vbCBpc0NvbnRl
eHRJbml0aWFsaXplZCgpOworICAgIGJvb2wgaXNDb250ZXh0SW5pdGlhbGl6ZWQoKSB7IHJldHVy
biAhbV9jb250ZXh0LmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNHbG9iYWxJbml0aWFsaXplZCgp
IHsgcmV0dXJuICFtX2dsb2JhbC5pc0VtcHR5KCk7IH0KIAogICAgIHY4OjpQZXJzaXN0ZW50PHY4
OjpDb250ZXh0PiBjcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFs
LCBpbnQgZXh0ZW5zaW9uR3JvdXAsIGludCB3b3JsZElkKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwCmluZGV4IDgx
ZDI0NDJhYmRhNTA1NWFhYzU0ZDBhYzc1NjNiY2Q3ZTY3NmEwNGQuLjU5NzkwOGNkM2UyNjAxZDhh
M2M5N2ZkZTQ4ZmU4NjBkM2Y5Mjk5MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAKQEAgLTExMCw3ICsxMTAsNyBA
QCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChEb2N1bWVudCogaW1wbCwgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleAogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICBp
ZiAoIVY4RE9NV2luZG93U2hlbGw6OmdldEVudGVyZWQoKSkgewogICAgICAgICBpZiAoRnJhbWUq
IGZyYW1lID0gaW1wbC0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+d2lu
ZG93U2hlbGwoKS0+dXBkYXRlRG9jdW1lbnRXcmFwcGVyKHdyYXBwZXIpOworICAgICAgICAgICAg
ZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPnVw
ZGF0ZURvY3VtZW50V3JhcHBlcih3cmFwcGVyKTsKICAgICB9CiAgICAgcmV0dXJuIHdyYXBwZXI7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
RG9jdW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTERvY3VtZW50Q3VzdG9tLmNwcAppbmRleCAwZDQ3MTlmYTVhNjliYWNkODE5NGFiNGViNzgy
N2NjN2VkNGJlMzM2Li41YWM1ZDAwMGQyZTAwZGM5MWYyYzMxZmJkYWU0Mzk3NmViZDdkNjI0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1l
bnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhU
TUxEb2N1bWVudEN1c3RvbS5jcHAKQEAgLTE4NSw3ICsxODUsNyBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOChIVE1MRG9jdW1lbnQqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3Jl
YXRpb25DbwogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICBpZiAoIVY4RE9NV2luZG93U2hl
bGw6OmdldEVudGVyZWQoKSkgewogICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gaW1wbC0+ZnJh
bWUoKSkKLSAgICAgICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+dXBkYXRl
RG9jdW1lbnRXcmFwcGVyKHdyYXBwZXIpOworICAgICAgICAgICAgZnJhbWUtPnNjcmlwdCgpLT53
aW5kb3dTaGVsbChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPnVwZGF0ZURvY3VtZW50V3JhcHBl
cih3cmFwcGVyKTsKICAgICB9CiAgICAgcmV0dXJuIHdyYXBwZXI7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdEb2N1bWVudEN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdEb2N1bWVudEN1c3RvbS5j
cHAKaW5kZXggMDk5MWRmYzE3ODA5NmM3NmM3Y2I4MjdhYTBmYmRlMzI1ZmMwNDI1My4uNjA3Mzhk
N2U5ZTc4NGJhNmRlYmYwY2RlMDA5ZGVmNWY2NzMxOTBlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRG9jdW1lbnRDdXN0b20uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcApA
QCAtNDcsNyArNDcsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChTVkdEb2N1bWVudCog
aW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbgogICAgICAgICByZXR1cm4g
d3JhcHBlcjsKICAgICBpZiAoIVY4RE9NV2luZG93U2hlbGw6OmdldEVudGVyZWQoKSkgewogICAg
ICAgICBpZiAoRnJhbWUqIGZyYW1lID0gaW1wbC0+ZnJhbWUoKSkKLSAgICAgICAgICAgIGZyYW1l
LT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+dXBkYXRlRG9jdW1lbnRXcmFwcGVyKHdyYXBwZXIp
OworICAgICAgICAgICAgZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbChtYWluVGhyZWFkTm9y
bWFsV29ybGQoKSktPnVwZGF0ZURvY3VtZW50V3JhcHBlcih3cmFwcGVyKTsKICAgICB9CiAgICAg
cmV0dXJuIHdyYXBwZXI7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173333</attachid>
            <date>2012-11-09 10:26:04 -0800</date>
            <delta_ts>2012-11-09 11:11:24 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-100235-20121109102412.patch</filename>
            <type>text/plain</type>
            <size>25490</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNDA4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDEyLTExLTA5ICBEYW4gQ2Fy
bmV5ICA8ZGNhcm5leUBnb29nbGUuY29tPgorCisgICAgICAgIFtWOF0gUmVtb3ZlIFNjcmlwdENv
bnRyb2xsZXI6OndpbmRvd1NoZWxsKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwMDIzNQorCisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGgu
CisKKyAgICAgICAgUmVmYWN0b3JlZCB3aW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqKSBhbmQK
KyAgICAgICAgZXhpc3RpbmdXaW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqKSB0byBiZSBsaWtl
IEpTQy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5
LgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAg
ICAgIChHZW5lcmF0ZVRvVjhDb252ZXJ0ZXJzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01X
cmFwcGVyV29ybGQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNvbGF0ZWRXb3JsZE1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpET01XcmFwcGVyV29ybGQ6OmdldEFsbFdvcmxkcyk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaDoKKyAg
ICAgICAgKERPTVdyYXBwZXJXb3JsZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvUGFnZVNjcmlw
dERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTY3JpcHREZWJ1Z1NlcnZl
cjo6YWRkTGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJGb3JPdXRPZk1l
bW9yeSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRy
b2xsZXI6OmNsZWFyRm9yQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6dXBkYXRlU2VjdXJpdHlPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJv
bGxlcjo6aW5pdGlhbGl6ZU1haW5Xb3JsZCk6IFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFpbiB3b3Js
ZCB3YXMgaW5pdGlhbGl6ZWQuCisgICAgICAgIChXZWJDb3JlOjpleGlzdGluZ1dpbmRvd1NoZWxs
V29ya2Fyb3VuZFdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmV4
aXN0aW5nV2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6
d2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVh
dGVJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6
Y3VycmVudFdvcmxkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVy
OjptYWluV29ybGRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
OmhhdmVJbnRlcnByZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpl
bmFibGVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmRpc2FibGVF
dmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyV2luZG93U2hl
bGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6c2V0Q29udGV4dERlYnVn
SWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6bmFtZWRJdGVtQWRkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6bmFtZWRJdGVtUmVtb3ZlZCk6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAoU2NyaXB0
Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpnZXRBbGxX
b3JsZHMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpwZXJDb250ZXh0RGF0YUZvckN1cnJlbnRXb3JsZCk6CisgICAgICAgIChXZWJDb3Jl
OjpoYW5kbGVPdXRPZk1lbW9yeSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dT
aGVsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjppbml0aWFsaXpl
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6dXBkYXRlRG9j
dW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVtQWRk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVtUmVtb3Zl
ZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oOgorICAgICAgICAo
V2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6aXNDb250ZXh0SW5pdGlhbGl6ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6aXNHbG9iYWxJbml0aWFsaXplZCk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6dG9WOCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERvY3Vt
ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnRvVjgpOgorCiAyMDEyLTExLTA5ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29t
PgogCiAgICAgICAgIENvb2tpZUphciB1c2VzIERvY3VtZW50IGNsYXNzLCB3aGljaCBpcyBhIGxh
eWVyaW5nIHZpb2xhdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJldmlzaW9uIDEzNDA4MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkp
CkBAIC0zNDA2LDggKzM0MDYsOCBAQCBFTkQKICAgICBpZiAoSXNTdWJUeXBlKCRkYXRhTm9kZSwg
IkRvY3VtZW50IikpIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKICAgICBp
ZiAoRnJhbWUqIGZyYW1lID0gaW1wbC0+ZnJhbWUoKSkgewotICAgICAgICBpZiAoZnJhbWUtPnNj
cmlwdCgpLT53aW5kb3dTaGVsbCgpLT5jb250ZXh0KCkuSXNFbXB0eSgpICYmIGZyYW1lLT5zY3Jp
cHQoKS0+d2luZG93U2hlbGwoKS0+aW5pdGlhbGl6ZUlmTmVlZGVkKCkpIHsKLSAgICAgICAgICAg
IC8vIGluaXRpYWxpemVJZk5lZWRlZCBtYXkgaGF2ZSBjcmVhdGVkIGEgd3JhcHBlciBmb3IgdGhl
IG9iamVjdCwgcmV0cnkgZnJvbSB0aGUgc3RhcnQuCisgICAgICAgIGlmIChmcmFtZS0+c2NyaXB0
KCktPmluaXRpYWxpemVNYWluV29ybGQoKSkgeworICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZU1h
aW5Xb3JsZCBtYXkgaGF2ZSBjcmVhdGVkIGEgd3JhcHBlciBmb3IgdGhlIG9iamVjdCwgcmV0cnkg
ZnJvbSB0aGUgc3RhcnQuCiAgICAgICAgICAgICByZXR1cm4gJHtjbGFzc05hbWV9Ojp3cmFwKGlt
cGwuZ2V0KCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgICAgIH0KICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBwZXJXb3JsZC5jcHAJ
KHJldmlzaW9uIDEzNDA4MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTVdyYXBw
ZXJXb3JsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE0ICs1NSwyMiBAQCBET01XcmFwcGVy
V29ybGQqIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpCiAgICAgcmV0dXJuIGNhY2hlZE5vcm1hbFdv
cmxkLmdldCgpOwogfQogCi0vLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgZ28gdG8gUGVy
SXNvbGF0ZURhdGEuCiB0eXBlZGVmIEhhc2hNYXA8aW50LCBET01XcmFwcGVyV29ybGQqPiBXb3Js
ZE1hcDsKIHN0YXRpYyBXb3JsZE1hcCYgaXNvbGF0ZWRXb3JsZE1hcCgpCiB7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFdvcmxkTWFwLCBtYXAs
ICgpKTsKICAgICByZXR1cm4gbWFwOwogfQogCit2b2lkIERPTVdyYXBwZXJXb3JsZDo6Z2V0QWxs
V29ybGRzKFZlY3RvcjxSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiA+JiB3b3JsZHMpCit7CisgICAg
d29ybGRzLmFwcGVuZChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAgV29ybGRNYXAmIGlz
b2xhdGVkV29ybGRzID0gaXNvbGF0ZWRXb3JsZE1hcCgpOworICAgIGZvciAoV29ybGRNYXA6Oml0
ZXJhdG9yIGl0ID0gaXNvbGF0ZWRXb3JsZHMuYmVnaW4oKTsgaXQgIT0gaXNvbGF0ZWRXb3JsZHMu
ZW5kKCk7ICsraXQpCisgICAgICAgIHdvcmxkcy5hcHBlbmQoaXQtPnZhbHVlKTsKK30KKwogdm9p
ZCBET01XcmFwcGVyV29ybGQ6OmRlYWxsb2NhdGUoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKIHsK
ICAgICBpbnQgd29ybGRJZCA9IHdvcmxkLT53b3JsZElkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9ET01XcmFwcGVyV29ybGQuaAkocmV2aXNpb24gMTM0MDgyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NV3JhcHBlcldvcmxkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDYgKzUxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTVdy
YXBwZXJXb3JsZD4gZW5zdXJlSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJZCwgaW50IGV4dGVuc2lv
bkdyb3VwKTsKICAgICBzdGF0aWMgYm9vbCBpc29sYXRlZFdvcmxkc0V4aXN0KCkgeyByZXR1cm4g
aXNvbGF0ZWRXb3JsZENvdW50OyB9CiAgICAgc3RhdGljIGJvb2wgaXNJc29sYXRlZFdvcmxkSWQo
aW50IHdvcmxkSWQpIHsgcmV0dXJuIHdvcmxkSWQgIT0gbWFpbldvcmxkSWQgJiYgd29ybGRJZCAh
PSB1bmluaXRpYWxpemVkV29ybGRJZDsgfQorICAgIHN0YXRpYyB2b2lkIGdldEFsbFdvcmxkcyhW
ZWN0b3I8UmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gPiYgd29ybGRzKTsKICAgICAvLyBBc3NvY2lh
dGVzIGFuIGlzb2xhdGVkIHdvcmxkIChzZWUgYWJvdmUgZm9yIGRlc2NyaXB0aW9uKSB3aXRoIGEg
c2VjdXJpdHkKICAgICAvLyBvcmlnaW4uIFhNTEh0dHBSZXF1ZXN0IGluc3RhbmNlcyB1c2VkIGlu
IHRoYXQgd29ybGQgd2lsbCBiZSBjb25zaWRlcmVkCiAgICAgLy8gdG8gY29tZSBmcm9tIHRoYXQg
b3JpZ2luLCBub3QgdGhlIGZyYW1lJ3MuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDEzNDA4MikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkyLDggKzkyLDggQEAgdm9pZCBQYWdlU2NyaXB0RGVidWdTZXJ2
ZXI6OmFkZExpc3RlbmVyKAogICAgIH0KICAgICBtX2xpc3RlbmVyc01hcC5zZXQocGFnZSwgbGlz
dGVuZXIpOwogCi0gICAgVjhET01XaW5kb3dTaGVsbCogc2hlbGwgPSBzY3JpcHRDb250cm9sbGVy
LT53aW5kb3dTaGVsbCgpOwotICAgIGlmICghc2hlbGwtPmlzQ29udGV4dEluaXRpYWxpemVkKCkp
CisgICAgVjhET01XaW5kb3dTaGVsbCogc2hlbGwgPSBzY3JpcHRDb250cm9sbGVyLT5leGlzdGlu
Z1dpbmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKKyAgICBpZiAoIXNoZWxsIHx8
ICFzaGVsbC0+aXNDb250ZXh0SW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBzaGVsbC0+Y29udGV4dCgpOwogICAgIHY4
OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBnZXRTY3JpcHRzRnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6
OkZ1bmN0aW9uPjo6Q2FzdChtX2RlYnVnZ2VyU2NyaXB0LmdldCgpLT5HZXQodjg6OlN0cmluZzo6
TmV3KCJnZXRTY3JpcHRzIikpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMzQwODIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUg
IkJpbmRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgogI2lu
Y2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZl
bnQuaCIKQEAgLTExMSw3ICsxMTIsNyBAQCBTY3JpcHRDb250cm9sbGVyOjpTY3JpcHRDb250cm9s
bGVyKEZyYW1lCiAKIFNjcmlwdENvbnRyb2xsZXI6On5TY3JpcHRDb250cm9sbGVyKCkKIHsKLSAg
ICB3aW5kb3dTaGVsbCgpLT5kZXN0cm95R2xvYmFsKCk7CisgICAgbV93aW5kb3dTaGVsbC0+ZGVz
dHJveUdsb2JhbCgpOwogICAgIGNsZWFyRm9yQ2xvc2UoKTsKIH0KIApAQCAtMTU0LDE3ICsxNTUs
MjMgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpyZXNldCgpCiAgICAgVjhHQ0NvbnRyb2xsZXI6
OmhpbnRGb3JDb2xsZWN0R2FyYmFnZSgpOwogfQogCit2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNs
ZWFyRm9yT3V0T2ZNZW1vcnkoKQoreworICAgIGNsZWFyRm9yQ2xvc2UoKTsKKyAgICBtX3dpbmRv
d1NoZWxsLT5kZXN0cm95R2xvYmFsKCk7Cit9CisKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xl
YXJGb3JDbG9zZSgpCiB7CiAgICAgZG91YmxlIHN0YXJ0ID0gY3VycmVudFRpbWUoKTsKICAgICBy
ZXNldCgpOwotICAgIHdpbmRvd1NoZWxsKCktPmNsZWFyRm9yQ2xvc2UoKTsKKyAgICBtX3dpbmRv
d1NoZWxsLT5jbGVhckZvckNsb3NlKCk7CiAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFt
Q3VzdG9tQ291bnRzKCJXZWJDb3JlLlNjcmlwdENvbnRyb2xsZXIuY2xlYXJGb3JDbG9zZSIsIChj
dXJyZW50VGltZSgpIC0gc3RhcnQpICogMTAwMCwgMCwgMTAwMDAsIDUwKTsKIH0KIAogdm9pZCBT
Y3JpcHRDb250cm9sbGVyOjp1cGRhdGVTZWN1cml0eU9yaWdpbigpCiB7Ci0gICAgd2luZG93U2hl
bGwoKS0+dXBkYXRlU2VjdXJpdHlPcmlnaW4oKTsKKyAgICBtX3dpbmRvd1NoZWxsLT51cGRhdGVT
ZWN1cml0eU9yaWdpbigpOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnVwZGF0ZVBsYXRm
b3JtU2NyaXB0T2JqZWN0cygpCkBAIC0zMTAsNDYgKzMxNyw2NCBAQCBTY3JpcHRWYWx1ZSBTY3Jp
cHRDb250cm9sbGVyOjpldmFsdWF0ZShjCiAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKG9iamVjdCk7
CiB9CiAKLVY4RE9NV2luZG93U2hlbGwqIFNjcmlwdENvbnRyb2xsZXI6OmVuc3VyZUlzb2xhdGVk
V29ybGRDb250ZXh0KGludCB3b3JsZElkLCBpbnQgZXh0ZW5zaW9uR3JvdXApCitib29sIFNjcmlw
dENvbnRyb2xsZXI6OmluaXRpYWxpemVNYWluV29ybGQoKQogewotICAgIEFTU0VSVCh3b3JsZElk
ICE9IERPTVdyYXBwZXJXb3JsZDo6bWFpbldvcmxkSWQpOwotCi0gICAgLy8gQ2hlY2sgdGhlIG1h
cCBmb3Igbm9uLXRlbXBvcmFyeSB3b3JsZHMuCi0gICAgaWYgKHdvcmxkSWQgIT0gRE9NV3JhcHBl
cldvcmxkOjp1bmluaXRpYWxpemVkV29ybGRJZCkgewotICAgICAgICBJc29sYXRlZFdvcmxkTWFw
OjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxkSWQpOwotICAgICAg
ICBpZiAoaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKSB7Ci0gICAgICAgICAgICBBU1NF
UlQoaXRlci0+dmFsdWUtPndvcmxkKCktPndvcmxkSWQoKSA9PSB3b3JsZElkKTsKLSAgICAgICAg
ICAgIEFTU0VSVChpdGVyLT52YWx1ZS0+d29ybGQoKS0+ZXh0ZW5zaW9uR3JvdXAoKSA9PSBleHRl
bnNpb25Hcm91cCk7Ci0gICAgICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7Ci0gICAgICAgIH0K
LSAgICB9CisgICAgaWYgKG1fd2luZG93U2hlbGwtPmlzQ29udGV4dEluaXRpYWxpemVkKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gd2luZG93U2hlbGwobWFpblRocmVhZE5v
cm1hbFdvcmxkKCkpLT5pc0NvbnRleHRJbml0aWFsaXplZCgpOworfQogCi0gICAgUmVmUHRyPERP
TVdyYXBwZXJXb3JsZD4gd29ybGQgPSBET01XcmFwcGVyV29ybGQ6OmVuc3VyZUlzb2xhdGVkV29y
bGQod29ybGRJZCwgZXh0ZW5zaW9uR3JvdXApOwotICAgIE93blB0cjxWOERPTVdpbmRvd1NoZWxs
PiBpc29sYXRlZFdvcmxkU2hlbGwgPSBWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGUobV9mcmFtZSwg
d29ybGQpOwotICAgIG1faXNvbGF0ZWRXb3JsZHMuc2V0KHdvcmxkLT53b3JsZElkKCksIGlzb2xh
dGVkV29ybGRTaGVsbC5nZXQoKSk7Ci0gICAgcmV0dXJuIGlzb2xhdGVkV29ybGRTaGVsbC5sZWFr
UHRyKCk7CisvLyBGSVhNRTogUmVtb3ZlIHRoaXMgZnVuY3Rpb24uIFRoZXJlIGlzIGN1cnJlbnRs
eSBhbiBpc3N1ZSB3aXRoIHRoZSBpbnNwZWN0b3IgcmVsYXRlZCB0byB0aGUgY2FsbCB0byBkaXNw
YXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZCBpbiBTY3JpcHRDb250cm9sbGVyOjp3aW5k
b3dTaGVsbC4KK3N0YXRpYyBET01XcmFwcGVyV29ybGQqIGV4aXN0aW5nV2luZG93U2hlbGxXb3Jr
YXJvdW5kV29ybGQoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPERPTVdyYXBw
ZXJXb3JsZD4sIHdvcmxkLCAoRE9NV3JhcHBlcldvcmxkOjpjcmVhdGVVbmluaXRpYWxpemVkV29y
bGQoKSkpOworICAgIHJldHVybiB3b3JsZC5nZXQoKTsKIH0KIAotVjhET01XaW5kb3dTaGVsbCog
U2NyaXB0Q29udHJvbGxlcjo6ZXhpc3RpbmdXaW5kb3dTaGVsbEludGVybmFsKERPTVdyYXBwZXJX
b3JsZCogd29ybGQpCitWOERPTVdpbmRvd1NoZWxsKiBTY3JpcHRDb250cm9sbGVyOjpleGlzdGlu
Z1dpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCiB7CiAgICAgQVNTRVJUKHdvcmxk
KTsKIAotICAgIGlmIChMSUtFTFkod29ybGQtPmlzTWFpbldvcmxkKCkpKQorICAgIGlmICh3b3Js
ZC0+aXNNYWluV29ybGQoKSkKKyAgICAgICAgcmV0dXJuIG1fd2luZG93U2hlbGwtPmlzQ29udGV4
dEluaXRpYWxpemVkKCkgPyBtX3dpbmRvd1NoZWxsLmdldCgpIDogMDsKKworICAgIC8vIEZJWE1F
OiBSZW1vdmUgdGhpcyBibG9jay4gU2VlIGNvbW1lbnQgd2l0aCBleGlzdGluZ1dpbmRvd1NoZWxs
V29ya2Fyb3VuZFdvcmxkKCkuCisgICAgaWYgKHdvcmxkLT53b3JsZElkKCkgPT0gRE9NV3JhcHBl
cldvcmxkOjp1bmluaXRpYWxpemVkV29ybGRJZCkgeworICAgICAgICBBU1NFUlQod29ybGQgPT0g
ZXhpc3RpbmdXaW5kb3dTaGVsbFdvcmthcm91bmRXb3JsZCgpKTsKICAgICAgICAgcmV0dXJuIG1f
d2luZG93U2hlbGwuZ2V0KCk7CisgICAgfQogCiAgICAgSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0
b3IgaXRlciA9IG1faXNvbGF0ZWRXb3JsZHMuZmluZCh3b3JsZC0+d29ybGRJZCgpKTsKLSAgICBy
ZXR1cm4gaXRlciA9PSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpID8gMCA6IGl0ZXItPnZhbHVlOwor
ICAgIGlmIChpdGVyID09IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCkpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBpdGVyLT52YWx1ZS0+aXNDb250ZXh0SW5pdGlhbGl6ZWQoKSA/IGl0ZXIt
PnZhbHVlIDogMDsKIH0KIAogVjhET01XaW5kb3dTaGVsbCogU2NyaXB0Q29udHJvbGxlcjo6d2lu
ZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKIHsKLSAgICBWOERPTVdpbmRvd1NoZWxs
KiBzaGVsbCA9IGV4aXN0aW5nV2luZG93U2hlbGxJbnRlcm5hbCh3b3JsZCk7Ci0gICAgaWYgKExJ
S0VMWSghIXNoZWxsKSkKLSAgICAgICAgcmV0dXJuIHNoZWxsOwotCi0gICAgT3duUHRyPFY4RE9N
V2luZG93U2hlbGw+IGlzb2xhdGVkV29ybGRTaGVsbCA9IFY4RE9NV2luZG93U2hlbGw6OmNyZWF0
ZShtX2ZyYW1lLCB3b3JsZCk7Ci0gICAgbV9pc29sYXRlZFdvcmxkcy5zZXQod29ybGQtPndvcmxk
SWQoKSwgaXNvbGF0ZWRXb3JsZFNoZWxsLmdldCgpKTsKLSAgICByZXR1cm4gaXNvbGF0ZWRXb3Js
ZFNoZWxsLmxlYWtQdHIoKTsKKyAgICBBU1NFUlQod29ybGQpOworCisgICAgVjhET01XaW5kb3dT
aGVsbCogc2hlbGwgPSAwOworICAgIGlmICh3b3JsZC0+aXNNYWluV29ybGQoKSkKKyAgICAgICAg
c2hlbGwgPSBtX3dpbmRvd1NoZWxsLmdldCgpOworICAgIGVsc2UgeworICAgICAgICBJc29sYXRl
ZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5maW5kKHdvcmxkLT53
b3JsZElkKCkpOworICAgICAgICBpZiAoaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKQor
ICAgICAgICAgICAgc2hlbGwgPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBPd25QdHI8VjhET01XaW5kb3dTaGVsbD4gaXNvbGF0ZWRXb3JsZFNoZWxsID0gVjhET01X
aW5kb3dTaGVsbDo6Y3JlYXRlKG1fZnJhbWUsIHdvcmxkKTsKKyAgICAgICAgICAgIHNoZWxsID0g
aXNvbGF0ZWRXb3JsZFNoZWxsLmdldCgpOworICAgICAgICAgICAgbV9pc29sYXRlZFdvcmxkcy5z
ZXQod29ybGQtPndvcmxkSWQoKSwgaXNvbGF0ZWRXb3JsZFNoZWxsLmxlYWtQdHIoKSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgaWYgKCFzaGVsbC0+aXNDb250ZXh0SW5pdGlhbGl6ZWQoKSAmJiBz
aGVsbC0+aW5pdGlhbGl6ZUlmTmVlZGVkKCkpIHsKKyAgICAgICAgaWYgKHdvcmxkLT5pc01haW5X
b3JsZCgpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgaWYgY2xhdXNlLiBT
ZWUgY29tbWVudCB3aXRoIGV4aXN0aW5nV2luZG93U2hlbGxXb3JrYXJvdW5kV29ybGQoKS4KKyAg
ICAgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5kaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0
SW5Xb3JsZChleGlzdGluZ1dpbmRvd1NoZWxsV29ya2Fyb3VuZFdvcmxkKCkpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5kaXNwYXRjaERpZENsZWFyV2lu
ZG93T2JqZWN0SW5Xb3JsZCh3b3JsZCk7CisgICAgfQorICAgIHJldHVybiBzaGVsbDsKIH0KIAog
dm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJ
RCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9u
R3JvdXAsIFZlY3RvcjxTY3JpcHRWYWx1ZT4qIHJlc3VsdHMpCkBAIC0zNjMsMTAgKzM4OCwxMCBA
QCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlCiAgICAgdjg6OkxvY2Fs
PHY4OjpBcnJheT4gdjhSZXN1bHRzOwogICAgIHsKICAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGV2
YWx1YXRlSGFuZGxlU2NvcGU7Ci0gICAgICAgIFY4RE9NV2luZG93U2hlbGwqIGlzb2xhdGVkV29y
bGRTaGVsbCA9IGVuc3VyZUlzb2xhdGVkV29ybGRDb250ZXh0KHdvcmxkSUQsIGV4dGVuc2lvbkdy
b3VwKTsKKyAgICAgICAgUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gd29ybGQgPSBET01XcmFwcGVy
V29ybGQ6OmVuc3VyZUlzb2xhdGVkV29ybGQod29ybGRJRCwgZXh0ZW5zaW9uR3JvdXApOworICAg
ICAgICBWOERPTVdpbmRvd1NoZWxsKiBpc29sYXRlZFdvcmxkU2hlbGwgPSB3aW5kb3dTaGVsbCh3
b3JsZC5nZXQoKSk7CiAKLSAgICAgICAgaXNvbGF0ZWRXb3JsZFNoZWxsLT5pbml0aWFsaXplSWZO
ZWVkZWQoKTsKLSAgICAgICAgaWYgKGlzb2xhdGVkV29ybGRTaGVsbC0+Y29udGV4dCgpLklzRW1w
dHkoKSkKKyAgICAgICAgaWYgKCFpc29sYXRlZFdvcmxkU2hlbGwtPmlzQ29udGV4dEluaXRpYWxp
emVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdjg6OkxvY2FsPHY4OjpDb250
ZXh0PiBjb250ZXh0ID0gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KGlzb2xhdGVkV29ybGRT
aGVsbC0+Y29udGV4dCgpKTsKQEAgLTQyMywxNCArNDQ4LDEyIEBAIHY4OjpMb2NhbDx2ODo6Q29u
dGV4dD4gU2NyaXB0Q29udHJvbGxlcjoKICAgICAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6
OkNvbnRleHQ+KCk7CiAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXco
Y29udGV4dCk7CiAgICAgfQotICAgIHdpbmRvd1NoZWxsKCktPmluaXRpYWxpemVJZk5lZWRlZCgp
OwotICAgIHJldHVybiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcod2luZG93U2hlbGwoKS0+
Y29udGV4dCgpKTsKKyAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KHdpbmRv
d1NoZWxsKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+Y29udGV4dCgpKTsKIH0KIAogdjg6Okxv
Y2FsPHY4OjpDb250ZXh0PiBTY3JpcHRDb250cm9sbGVyOjptYWluV29ybGRDb250ZXh0KCkKIHsK
LSAgICB3aW5kb3dTaGVsbCgpLT5pbml0aWFsaXplSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gdjg6
OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KHdpbmRvd1NoZWxsKCktPmNvbnRleHQoKSk7CisgICAg
cmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyh3aW5kb3dTaGVsbChtYWluVGhyZWFk
Tm9ybWFsV29ybGQoKSktPmNvbnRleHQoKSk7CiB9CiAKIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4g
U2NyaXB0Q29udHJvbGxlcjo6bWFpbldvcmxkQ29udGV4dChGcmFtZSogZnJhbWUpCkBAIC00NjEs
MjYgKzQ4NCwyMyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmJpbmRUb1dpbmRvd09iamVjCiAK
IGJvb2wgU2NyaXB0Q29udHJvbGxlcjo6aGF2ZUludGVycHJldGVyKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gd2luZG93U2hlbGwoKS0+aXNDb250ZXh0SW5pdGlhbGl6ZWQoKTsKKyAgICByZXR1cm4g
bV93aW5kb3dTaGVsbC0+aXNDb250ZXh0SW5pdGlhbGl6ZWQoKTsKIH0KIAogdm9pZCBTY3JpcHRD
b250cm9sbGVyOjplbmFibGVFdmFsKCkKIHsKLSAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2Nv
cGU7Ci0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gd2luZG93U2hlbGwo
KS0+Y29udGV4dCgpOwotICAgIGlmICh2OENvbnRleHQuSXNFbXB0eSgpKQorICAgIGlmICghbV93
aW5kb3dTaGVsbC0+aXNDb250ZXh0SW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwotCi0g
ICAgdjhDb250ZXh0LT5BbGxvd0NvZGVHZW5lcmF0aW9uRnJvbVN0cmluZ3ModHJ1ZSk7CisgICAg
djg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAgIG1fd2luZG93U2hlbGwtPmNvbnRleHQo
KS0+QWxsb3dDb2RlR2VuZXJhdGlvbkZyb21TdHJpbmdzKHRydWUpOwogfQogCiB2b2lkIFNjcmlw
dENvbnRyb2xsZXI6OmRpc2FibGVFdmFsKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewot
ICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiB2OENvbnRleHQgPSB3aW5kb3dTaGVsbCgpLT5jb250ZXh0KCk7Ci0gICAgaWYgKHY4Q29u
dGV4dC5Jc0VtcHR5KCkpCisgICAgaWYgKCFtX3dpbmRvd1NoZWxsLT5pc0NvbnRleHRJbml0aWFs
aXplZCgpKQogICAgICAgICByZXR1cm47Ci0KKyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2Nv
cGU7CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gbV93aW5kb3dTaGVs
bC0+Y29udGV4dCgpOwogICAgIHY4Q29udGV4dC0+QWxsb3dDb2RlR2VuZXJhdGlvbkZyb21TdHJp
bmdzKGZhbHNlKTsKICAgICB2OENvbnRleHQtPlNldEVycm9yTWVzc2FnZUZvckNvZGVHZW5lcmF0
aW9uRnJvbVN0cmluZ3ModjhTdHJpbmcoZXJyb3JNZXNzYWdlKSk7CiB9CkBAIC01MzksMTEgKzU1
OSw2IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYW51cFNjcmlwdE9iamUKICAgICBtX3Bs
dWdpbk9iamVjdHMucmVtb3ZlKGl0KTsKIH0KIAotdm9pZCBTY3JpcHRDb250cm9sbGVyOjpnZXRB
bGxXb3JsZHMoVmVjdG9yPFJlZlB0cjxET01XcmFwcGVyV29ybGQ+ID4mIHdvcmxkcykKLXsKLSAg
ICB3b3JsZHMuYXBwZW5kKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKLX0KLQogdm9pZCBTY3Jp
cHRDb250cm9sbGVyOjpldmFsdWF0ZUluV29ybGQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291
cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9NV3JhcHBlcldv
cmxkKiB3b3JsZCkKIHsKQEAgLTY0Miw3ICs2NTcsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6
OmNsZWFyV2luZG93U2hlbGwoCiAgICAgcmVzZXQoKTsKICAgICAvLyBWOCBiaW5kaW5nIGV4cGVj
dHMgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dTaGVsbCBvbmx5IGJlIGNhbGxlZAogICAg
IC8vIHdoZW4gYSBmcmFtZSBpcyBsb2FkaW5nIGEgbmV3IHBhZ2UuIFRoaXMgY3JlYXRlcyBhIG5l
dyBjb250ZXh0IGZvciB0aGUgbmV3IHBhZ2UuCi0gICAgd2luZG93U2hlbGwoKS0+Y2xlYXJGb3JO
YXZpZ2F0aW9uKCk7CisgICAgbV93aW5kb3dTaGVsbC0+Y2xlYXJGb3JOYXZpZ2F0aW9uKCk7CiAg
ICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJXZWJDb3JlLlNjcmlw
dENvbnRyb2xsZXIuY2xlYXJXaW5kb3dTaGVsbCIsIChjdXJyZW50VGltZSgpIC0gc3RhcnQpICog
MTAwMCwgMCwgMTAwMDAsIDUwKTsKIH0KIApAQCAtNjcyLDEwICs2ODcsMTAgQEAgdm9pZCBTY3Jp
cHRDb250cm9sbGVyOjpjb2xsZWN0SXNvbGF0ZWRDbwogYm9vbCBTY3JpcHRDb250cm9sbGVyOjpz
ZXRDb250ZXh0RGVidWdJZChpbnQgZGVidWdJZCkKIHsKICAgICBBU1NFUlQoZGVidWdJZCA+IDAp
OwotICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjb250ZXh0ID0gd2luZG93U2hlbGwoKS0+Y29udGV4dCgpOwotICAgIGlmIChjb250ZXh0Lklz
RW1wdHkoKSkKKyAgICBpZiAoIW1fd2luZG93U2hlbGwtPmlzQ29udGV4dEluaXRpYWxpemVkKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IG1fd2luZG93U2hlbGwtPmNvbnRleHQo
KTsKICAgICBpZiAoIWNvbnRleHQtPkdldERhdGEoKS0+SXNVbmRlZmluZWQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkBAIC03MDgsMTcgKzcyMywyMiBAQCB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmF0dGFjaERlYnVnZ2VyKHZvCiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBkYXRlRG9j
dW1lbnQoKQogewotICAgIHdpbmRvd1NoZWxsKCktPnVwZGF0ZURvY3VtZW50KCk7CisgICAgLy8g
Rm9yIGFuIHVuaW5pdGlhbGl6ZWQgbWFpbiB3aW5kb3cgc2hlbGwsIGRvIG5vdCBpbmN1ciB0aGUg
Y29zdCBvZiBjb250ZXh0IGluaXRpYWxpemF0aW9uIGR1cmluZyBGcmFtZUxvYWRlcjo6aW5pdCgp
LgorICAgIGlmICgoIW1fd2luZG93U2hlbGwtPmlzQ29udGV4dEluaXRpYWxpemVkKCkgfHwgIW1f
d2luZG93U2hlbGwtPmlzR2xvYmFsSW5pdGlhbGl6ZWQoKSkgJiYgbV9mcmFtZS0+bG9hZGVyKCkt
PnN0YXRlTWFjaGluZSgpLT5jcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghaW5pdGlhbGl6ZU1haW5Xb3JsZCgpKQorICAgICAgICB3aW5k
b3dTaGVsbChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSktPnVwZGF0ZURvY3VtZW50KCk7CiB9CiAK
IHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6bmFtZWRJdGVtQWRkZWQoSFRNTERvY3VtZW50KiBkb2Ms
IGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKLSAgICB3aW5kb3dTaGVsbCgpLT5uYW1lZEl0
ZW1BZGRlZChkb2MsIG5hbWUpOworICAgIHdpbmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxXb3Js
ZCgpKS0+bmFtZWRJdGVtQWRkZWQoZG9jLCBuYW1lKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9s
bGVyOjpuYW1lZEl0ZW1SZW1vdmVkKEhUTUxEb2N1bWVudCogZG9jLCBjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUpCiB7Ci0gICAgd2luZG93U2hlbGwoKS0+bmFtZWRJdGVtUmVtb3ZlZChkb2MsIG5h
bWUpOworICAgIHdpbmRvd1NoZWxsKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+bmFtZWRJdGVt
UmVtb3ZlZChkb2MsIG5hbWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCShyZXZpc2lv
biAxMzQwODIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDExICs2Niw5IEBAIHB1YmxpYzoKICAgICBTY3JpcHRD
b250cm9sbGVyKEZyYW1lKik7CiAgICAgflNjcmlwdENvbnRyb2xsZXIoKTsKIAotICAgIFY4RE9N
V2luZG93U2hlbGwqIHdpbmRvd1NoZWxsKCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3dTaGVsbC5n
ZXQoKTsgfQorICAgIGJvb2wgaW5pdGlhbGl6ZU1haW5Xb3JsZCgpOwogICAgIFY4RE9NV2luZG93
U2hlbGwqIHdpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCopOwotICAgIC8vIEZJWE1FOiBSZXBs
YWNlIGV4aXN0aW5nV2luZG93U2hlbGwgd2l0aCBleGlzdGluZ1dpbmRvd1NoZWxsSW50ZXJuYWwg
c2VlIGNvbW1lbnQgaW4gVjhET01XaW5kb3dTaGVsbDo6aW5pdGlhbGl6ZUlmTmVlZGVkLgotICAg
IFNjcmlwdENvbnRyb2xsZXIqIGV4aXN0aW5nV2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxkKikg
eyByZXR1cm4gdGhpczsgfQotICAgIFY4RE9NV2luZG93U2hlbGwqIGV4aXN0aW5nV2luZG93U2hl
bGxJbnRlcm5hbChET01XcmFwcGVyV29ybGQqKTsKKyAgICBWOERPTVdpbmRvd1NoZWxsKiBleGlz
dGluZ1dpbmRvd1NoZWxsKERPTVdyYXBwZXJXb3JsZCopOwogCiAgICAgU2NyaXB0VmFsdWUgZXhl
Y3V0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7CiAgICAgU2NyaXB0VmFsdWUgZXhl
Y3V0ZVNjcmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdCwgYm9vbCBmb3JjZVVzZXJHZXN0dXJlID0g
ZmFsc2UpOwpAQCAtMTczLDEzICsxNzEsMTcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYW51cFNj
cmlwdE9iamVjdHNGb3JQbHVnaW4oV2lkZ2V0Kik7CiAKICAgICB2b2lkIGNsZWFyRm9yQ2xvc2Uo
KTsKKyAgICB2b2lkIGNsZWFyRm9yT3V0T2ZNZW1vcnkoKTsKKwogCiAgICAgTlBPYmplY3QqIGNy
ZWF0ZVNjcmlwdE9iamVjdEZvclBsdWdpbkVsZW1lbnQoSFRNTFBsdWdJbkVsZW1lbnQqKTsKICAg
ICBOUE9iamVjdCogd2luZG93U2NyaXB0TlBPYmplY3QoKTsKIAotICAgIC8vIER1bW15IG1ldGhv
ZCB0byBhdm9pZCBhIGJ1bmNoIG9mIGlmZGVmJ3MgaW4gV2ViQ29yZS4KICAgICB2b2lkIGV2YWx1
YXRlSW5Xb3JsZChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiwgRE9NV3JhcHBlcldvcmxkKik7Ci0g
ICAgc3RhdGljIHZvaWQgZ2V0QWxsV29ybGRzKFZlY3RvcjxSZWZQdHI8RE9NV3JhcHBlcldvcmxk
PiA+JiB3b3JsZHMpOworICAgIHN0YXRpYyB2b2lkIGdldEFsbFdvcmxkcyhWZWN0b3I8UmVmUHRy
PERPTVdyYXBwZXJXb3JsZD4gPiYgd29ybGRzKQorICAgIHsKKyAgICAgICAgRE9NV3JhcHBlcldv
cmxkOjpnZXRBbGxXb3JsZHMod29ybGRzKTsKKyAgICB9CiAKICAgICAvLyBSZWdpc3RlcnMgYSB2
OCBleHRlbnNpb24gdG8gYmUgYXZhaWxhYmxlIG9uIHdlYnBhZ2VzLiBXaWxsIG9ubHkKICAgICAv
LyBhZmZlY3QgdjggY29udGV4dHMgaW5pdGlhbGl6ZWQgYWZ0ZXIgdGhpcyBjYWxsLiBUYWtlcyBv
d25lcnNoaXAgb2YKQEAgLTIwMSw3ICsyMDMsNiBAQCBwcml2YXRlOgogICAgIEZyYW1lKiBtX2Zy
YW1lOwogICAgIGNvbnN0IFN0cmluZyogbV9zb3VyY2VVUkw7CiAKLSAgICBWOERPTVdpbmRvd1No
ZWxsKiBlbnN1cmVJc29sYXRlZFdvcmxkQ29udGV4dChpbnQgd29ybGRJZCwgaW50IGV4dGVuc2lv
bkdyb3VwKTsKICAgICBPd25QdHI8VjhET01XaW5kb3dTaGVsbD4gbV93aW5kb3dTaGVsbDsKIAog
ICAgIC8vIFRoZSBpc29sYXRlZCB3b3JsZHMgd2UgYXJlIHRyYWNraW5nIGZvciB0aGlzIGZyYW1l
LiBXZSBob2xkIHRoZW0gYWxpdmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
QmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhC
aW5kaW5nLmNwcAkocmV2aXNpb24gMTM0MDgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhCaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIzLDcgKzMyMyw4IEBAIFY4UGVy
Q29udGV4dERhdGEqIHBlckNvbnRleHREYXRhRm9yQ3VycmUKICAgICBWOERPTVdpbmRvd1NoZWxs
KiBpc29sYXRlZFNoZWxsOwogICAgIGlmIChVTkxJS0VMWSghIShpc29sYXRlZFNoZWxsID0gVjhE
T01XaW5kb3dTaGVsbDo6Z2V0RW50ZXJlZCgpKSkpCiAgICAgICAgIHJldHVybiBpc29sYXRlZFNo
ZWxsLT5wZXJDb250ZXh0RGF0YSgpOwotICAgIHJldHVybiBmcmFtZS0+c2NyaXB0KCktPndpbmRv
d1NoZWxsKCktPnBlckNvbnRleHREYXRhKCk7CisgICAgVjhET01XaW5kb3dTaGVsbCogbWFpblNo
ZWxsID0gZnJhbWUtPnNjcmlwdCgpLT5leGlzdGluZ1dpbmRvd1NoZWxsKG1haW5UaHJlYWROb3Jt
YWxXb3JsZCgpKTsKKyAgICByZXR1cm4gbWFpblNoZWxsID8gbWFpblNoZWxsLT5wZXJDb250ZXh0
RGF0YSgpIDogMDsKIH0KIAogYm9vbCBoYW5kbGVPdXRPZk1lbW9yeSgpCkBAIC0zMzgsOCArMzM5
LDcgQEAgYm9vbCBoYW5kbGVPdXRPZk1lbW9yeSgpCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICBmcmFtZS0+c2NyaXB0KCktPmNsZWFyRm9yQ2xvc2UoKTsKLSAg
ICBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPmRlc3Ryb3lHbG9iYWwoKTsKKyAgICBm
cmFtZS0+c2NyaXB0KCktPmNsZWFyRm9yT3V0T2ZNZW1vcnkoKTsKIAogI2lmIFBMQVRGT1JNKENI
Uk9NSVVNKQogICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpZEV4aGF1c3RNZW1vcnlB
dmFpbGFibGVGb3JTY3JpcHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NV2luZG93U2hlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCShyZXZpc2lvbiAxMzQwODIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjAwLDEyICsyMDAsNiBAQCBWOERPTVdpbmRvd1NoZWxsOjpWOERPTVdpbmRvd1NoZWxsKEZyYW1l
CiB7CiB9CiAKLWJvb2wgVjhET01XaW5kb3dTaGVsbDo6aXNDb250ZXh0SW5pdGlhbGl6ZWQoKQot
ewotICAgIEFTU0VSVChtX2NvbnRleHQuaXNFbXB0eSgpIHx8ICFtX2dsb2JhbC5pc0VtcHR5KCkp
OwotICAgIHJldHVybiAhbV9jb250ZXh0LmlzRW1wdHkoKTsKLX0KLQogdm9pZCBWOERPTVdpbmRv
d1NoZWxsOjpkZXN0cm95SXNvbGF0ZWRTaGVsbCgpCiB7CiAgICAgZGlzcG9zZUNvbnRleHQodHJ1
ZSk7CkBAIC0zNDYsOSArMzQwLDggQEAgYm9vbCBWOERPTVdpbmRvd1NoZWxsOjppbml0aWFsaXpl
SWZOZWVkZQogCiAgICAgLy8gRmxhZyBjb250ZXh0IGFzIGlzb2xhdGVkLgogICAgIGlmICghaXNN
YWluV29ybGQpIHsKLSAgICAgICAgVjhET01XaW5kb3dTaGVsbCogbWFpbldpbmRvdyA9IG1fZnJh
bWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpOwotICAgICAgICBtYWluV2luZG93LT5pbml0aWFs
aXplSWZOZWVkZWQoKTsKLSAgICAgICAgaWYgKCFtYWluV2luZG93LT5jb250ZXh0KCkuSXNFbXB0
eSgpKQorICAgICAgICBWOERPTVdpbmRvd1NoZWxsKiBtYWluV2luZG93ID0gbV9mcmFtZS0+c2Ny
aXB0KCktPmV4aXN0aW5nV2luZG93U2hlbGwobWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworICAg
ICAgICBpZiAobWFpbldpbmRvdyAmJiAhbWFpbldpbmRvdy0+Y29udGV4dCgpLklzRW1wdHkoKSkK
ICAgICAgICAgICAgIHNldEluamVjdGVkU2NyaXB0Q29udGV4dERlYnVnSWQobV9jb250ZXh0Lmdl
dCgpLCBtX2ZyYW1lLT5zY3JpcHQoKS0+Y29udGV4dERlYnVnSWQobWFpbldpbmRvdy0+Y29udGV4
dCgpKSk7CiAgICAgICAgIHNldElzb2xhdGVkV29ybGRGaWVsZCh0aGlzLCBjb250ZXh0KTsKICAg
ICB9CkBAIC0zODgsMTMgKzM4MSw2IEBAIGJvb2wgVjhET01XaW5kb3dTaGVsbDo6aW5pdGlhbGl6
ZUlmTmVlZGUKICAgICAgICAgfQogICAgIH0KICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50
KCktPmRpZENyZWF0ZVNjcmlwdENvbnRleHQobV9jb250ZXh0LmdldCgpLCBtX3dvcmxkLT5leHRl
bnNpb25Hcm91cCgpLCBtX3dvcmxkLT53b3JsZElkKCkpOwotCi0gICAgaWYgKGlzTWFpbldvcmxk
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNhbGwgaXMgcHJvYmFibHkgaW4gdGhlIHdyb25n
IHNwb3QsIGJ1dCBjYXVzZXMgYSB0ZXN0IHRpbWVvdXQgZm9yIGh0dHAvdGVzdHMvbWlzYy93aW5k
b3ctb3Blbi10aGVuLXdyaXRlLmh0bWwgd2hlbiByZW1vdmVkLgotICAgICAgICAvLyBBZGRpdGlv
bmFsbHksIFNjcmlwdENvbnRyb2xsZXI6OmV4aXN0aW5nV2luZG93U2hlbGwgY2Fubm90IGJlIGNv
cnJlY3RseSBpbXBsZW1lbnRlZCB1bnRpbCB0aGlzIGNhbGwgaXMgZ29uZS4KLSAgICAgICAgbV9m
cmFtZS0+bG9hZGVyKCktPmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKDApOwot
ICAgIH0KLQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01NTIsNyArNTM4LDcgQEAgdm9pZCBW
OERPTVdpbmRvd1NoZWxsOjp1cGRhdGVEb2N1bWVudCgpCiAgICAgQVNTRVJUKG1fd29ybGQtPmlz
TWFpbldvcmxkKCkpOwogICAgIGlmIChtX2dsb2JhbC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIWluaXRpYWxpemVJZk5lZWRlZCgpKQorICAgIGlmIChtX2NvbnRleHQuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgdXBkYXRlRG9jdW1lbnRQcm9wZXJ0eSgpOwog
ICAgIHVwZGF0ZVNlY3VyaXR5T3JpZ2luKCk7CkBAIC01NzcsNyArNTYzLDcgQEAgdm9pZCBWOERP
TVdpbmRvd1NoZWxsOjpuYW1lZEl0ZW1BZGRlZChIVAogewogICAgIEFTU0VSVChtX3dvcmxkLT5p
c01haW5Xb3JsZCgpKTsKIAotICAgIGlmICghaW5pdGlhbGl6ZUlmTmVlZGVkKCkpCisgICAgaWYg
KG1fY29udGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHY4OjpIYW5kbGVT
Y29wZSBoYW5kbGVTY29wZTsKQEAgLTU5MiwxMCArNTc4LDEwIEBAIHZvaWQgVjhET01XaW5kb3dT
aGVsbDo6bmFtZWRJdGVtUmVtb3ZlZCgKIHsKICAgICBBU1NFUlQobV93b3JsZC0+aXNNYWluV29y
bGQoKSk7CiAKLSAgICBpZiAoZG9jdW1lbnQtPmhhc05hbWVkSXRlbShuYW1lLmltcGwoKSkgfHwg
ZG9jdW1lbnQtPmhhc0V4dHJhTmFtZWRJdGVtKG5hbWUuaW1wbCgpKSkKKyAgICBpZiAobV9jb250
ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFpbml0aWFsaXplSWZO
ZWVkZWQoKSkKKyAgICBpZiAoZG9jdW1lbnQtPmhhc05hbWVkSXRlbShuYW1lLmltcGwoKSkgfHwg
ZG9jdW1lbnQtPmhhc0V4dHJhTmFtZWRJdGVtKG5hbWUuaW1wbCgpKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuaAkocmV2aXNpb24gMTM0MDgyKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Nyw3ICs2Nyw4IEBAIHB1YmxpYzoKICAgICAvLyAoZS5nLiwgYWZ0ZXIgc2V0
dGluZyBkb2NvdW1lbnQuZG9tYWluKS4KICAgICB2b2lkIHVwZGF0ZVNlY3VyaXR5T3JpZ2luKCk7
CiAKLSAgICBib29sIGlzQ29udGV4dEluaXRpYWxpemVkKCk7CisgICAgYm9vbCBpc0NvbnRleHRJ
bml0aWFsaXplZCgpIHsgcmV0dXJuICFtX2NvbnRleHQuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBp
c0dsb2JhbEluaXRpYWxpemVkKCkgeyByZXR1cm4gIW1fZ2xvYmFsLmlzRW1wdHkoKTsgfQogCiAg
ICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IGNyZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBnbG9iYWwsIGludCBleHRlbnNpb25Hcm91cCwgaW50IHdvcmxkSWQpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
RG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMzQwODIpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExMCw3ICsxMTAsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChEb2N1bWVudCogaW1w
CiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIGlmICghVjhET01XaW5kb3dTaGVsbDo6Z2V0
RW50ZXJlZCgpKSB7CiAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBpbXBsLT5mcmFtZSgpKQot
ICAgICAgICAgICAgZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT51cGRhdGVEb2N1bWVu
dFdyYXBwZXIod3JhcHBlcik7CisgICAgICAgICAgICBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1No
ZWxsKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKS0+dXBkYXRlRG9jdW1lbnRXcmFwcGVyKHdyYXBw
ZXIpOwogICAgIH0KICAgICByZXR1cm4gd3JhcHBlcjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9t
LmNwcAkocmV2aXNpb24gMTM0MDgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDcgKzE4
NSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEhUTUxEb2N1bWVudCoKICAgICAgICAg
cmV0dXJuIHdyYXBwZXI7CiAgICAgaWYgKCFWOERPTVdpbmRvd1NoZWxsOjpnZXRFbnRlcmVkKCkp
IHsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGltcGwtPmZyYW1lKCkpCi0gICAgICAgICAg
ICBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPnVwZGF0ZURvY3VtZW50V3JhcHBlcih3
cmFwcGVyKTsKKyAgICAgICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwobWFpblRo
cmVhZE5vcm1hbFdvcmxkKCkpLT51cGRhdGVEb2N1bWVudFdyYXBwZXIod3JhcHBlcik7CiAgICAg
fQogICAgIHJldHVybiB3cmFwcGVyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4U1ZHRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gMTM0MDgyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRG9j
dW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB0b1Y4KFNWR0RvY3VtZW50KiAKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7
CiAgICAgaWYgKCFWOERPTVdpbmRvd1NoZWxsOjpnZXRFbnRlcmVkKCkpIHsKICAgICAgICAgaWYg
KEZyYW1lKiBmcmFtZSA9IGltcGwtPmZyYW1lKCkpCi0gICAgICAgICAgICBmcmFtZS0+c2NyaXB0
KCktPndpbmRvd1NoZWxsKCktPnVwZGF0ZURvY3VtZW50V3JhcHBlcih3cmFwcGVyKTsKKyAgICAg
ICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwobWFpblRocmVhZE5vcm1hbFdvcmxk
KCkpLT51cGRhdGVEb2N1bWVudFdyYXBwZXIod3JhcHBlcik7CiAgICAgfQogICAgIHJldHVybiB3
cmFwcGVyOwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>