<?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>146128</bug_id>
          
          <creation_ts>2015-06-18 16:12:19 -0700</creation_ts>
          <short_desc>[Content Extensions] Add SPI to reload without content blocking</short_desc>
          <delta_ts>2015-06-22 13:12:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>japhet</cc>
    
    <cc>mitz</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1103071</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-18 16:12:19 -0700</bug_when>
    <thetext>Sometimes we want to load a site without content blocking.  Let&apos;s add a reloadWithoutContentBlockers api that will disable content blockers until we commit another load.
I&apos;m not sure how to test this, but I think it needs a test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103073</commentid>
    <comment_count>1</comment_count>
      <attachid>255148</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-18 16:15:56 -0700</bug_when>
    <thetext>Created attachment 255148
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103110</commentid>
    <comment_count>2</comment_count>
      <attachid>255148</attachid>
    <who name="">mitz</who>
    <bug_when>2015-06-18 17:39:22 -0700</bug_when>
    <thetext>Comment on attachment 255148
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        [Content Extensions] Add api to reload without content blocking.

API

&gt; Source/WebCore/ChangeLog:17
&gt; +        * loader/FrameLoader.cpp:
&gt; +        (WebCore::FrameLoader::dispatchDidCommitLoad):
&gt; +        * page/UserContentController.h:
&gt; +        (WebCore::UserContentController::enableContentBlocking):
&gt; +        (WebCore::UserContentController::disableContentBlocking):
&gt; +        * replay/UserInputBridge.cpp:
&gt; +        (WebCore::UserInputBridge::loadRequest):
&gt; +        (WebCore::UserInputBridge::reloadFrame):
&gt; +        * replay/UserInputBridge.h:

Where are the comments?

&gt; Source/WebCore/loader/FrameLoader.cpp:3373
&gt; +    // Content blocking could have been disabled by a _reloadWithoutContentBlockers or WKPageReloadWithoutContentBlockers call.

It’s not great to call out specific WebKit APIs in WebCore.

&gt; Source/WebCore/loader/FrameLoader.cpp:3376
&gt; +    // If this happens, we want to only disable content blockers until the next load is committed.
&gt; +    if (m_frame.page() &amp;&amp; m_frame.page()-&gt;userContentController())
&gt; +        m_frame.page()-&gt;userContentController()-&gt;enableContentBlocking();

This doesn’t seem right. For one, if you reload-without-content-blockers and an error occurs in the provisional stage, you will not reach this function, and content blockers will remain disabled for the next navigation, which may not be a reload but something completely different. But beyond that, this isn’t very sound design. I think it implicitly relies on the fact that the main frame is the first frame to be committed upon reload. It doesn’t seem to handle client-side redirects. I don’t see how it handles any resources triggered by script or other deferral mechanisms after the main frame finished loading (but I don’t know exactly how the user content controller works).

To me, it seems like something like “do this load without content blocking” would be best implemented as a bit of state on DocumentLoader. To do a load (whether it’s a reload or not) without content blocking, you’d just set a bit on the DocumentLoader, and everything else would consult the DocumentLoader (perhaps via the frame or the page). Then you wouldn’t need to reset anything upon the load succeeding or failing, because the next load would use another DocumentLoader anyway. And you wouldn’t need a bit on UserContentController called m_contentBlockingEnabled which really means “content blocking not temporarily disabled”.

&gt; Source/WebCore/page/UserContentController.h:95
&gt; +    void enableContentBlocking() { m_contentBlockingEnabled = true; }
&gt; +    void disableContentBlocking() { m_contentBlockingEnabled = false; }

I think we normally have one setter that takes a boolean.

&gt; Source/WebCore/page/UserContentController.h:115
&gt; +    bool m_contentBlockingEnabled { true };

So this isn’t used yet?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103129</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-06-18 19:15:15 -0700</bug_when>
    <thetext>I don&apos;t like this approach.  I have a patch that adds a flag on WKWebView that lets you disable content extensions for that WKWebView. If one wanted to reload without content extension extensions, they set the flag and call reload. This would allow a client to keep content extensions off for a while if that is what they want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103136</commentid>
    <comment_count>4</comment_count>
    <who name="">mitz</who>
    <bug_when>2015-06-18 19:44:54 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; I don&apos;t like this approach.  I have a patch that adds a flag on WKWebView
&gt; that lets you disable content extensions for that WKWebView. If one wanted
&gt; to reload without content extension extensions, they set the flag and call
&gt; reload. This would allow a client to keep content extensions off for a while
&gt; if that is what they want.

In that model, how does the client know when to turn it back on, if all they want is “load this one webpage without content extensions”? I think it would be nice if “content extensions disabled” were a property of a load (what we externally refer to as a navigation).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103138</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-06-18 19:51:45 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; I don&apos;t like this approach.  I have a patch that adds a flag on WKWebView
&gt; &gt; that lets you disable content extensions for that WKWebView. If one wanted
&gt; &gt; to reload without content extension extensions, they set the flag and call
&gt; &gt; reload. This would allow a client to keep content extensions off for a while
&gt; &gt; if that is what they want.
&gt; 
&gt; In that model, how does the client know when to turn it back on, if all they
&gt; want is “load this one webpage without content extensions”? I think it would
&gt; be nice if “content extensions disabled” were a property of a load (what we
&gt; externally refer to as a navigation).

On the next navigation, as denoted via a decidePolicyForNavigationAction delegate message, they could disable it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103144</commentid>
    <comment_count>6</comment_count>
    <who name="">mitz</who>
    <bug_when>2015-06-18 20:35:30 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; I don&apos;t like this approach.  I have a patch that adds a flag on WKWebView
&gt; &gt; &gt; that lets you disable content extensions for that WKWebView. If one wanted
&gt; &gt; &gt; to reload without content extension extensions, they set the flag and call
&gt; &gt; &gt; reload. This would allow a client to keep content extensions off for a while
&gt; &gt; &gt; if that is what they want.
&gt; &gt; 
&gt; &gt; In that model, how does the client know when to turn it back on, if all they
&gt; &gt; want is “load this one webpage without content extensions”? I think it would
&gt; &gt; be nice if “content extensions disabled” were a property of a load (what we
&gt; &gt; externally refer to as a navigation).
&gt; 
&gt; On the next navigation, as denoted via a decidePolicyForNavigationAction
&gt; delegate message, they could disable it.

That’s not great, because it introduces a mode that the client needs to track:

1. User performs “load without content extensions” action
2. Client enters “content extensions disabled” mode
3. Client calls URL loading API
4. Client receives first policy decision call, notices that it’s in “content extensions disabled” mode, sets the property on the web view, and exits “content extensions disabled” mode

This is race-prone, because the policy decision in (4) can be about a different load, initiated in the Web Content process. So the client needs to track this state on a navigation (or something). If the Web Content process crashes before (4) then the client needs to figure out what to do with the state as well.

5. Client receives another policy decision call, notices that it’s no longer in “content extensions disabled” mode, resets the property on the web view.

This is more straightforward for the client:

1. User performs “load without content extensions” action
2. Client calls URL loading API, specifying an option (in an options dictionary that’s been introduced recently) that content extensions should be disabled for the resulting navigation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103275</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-19 10:26:15 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; I don&apos;t like this approach.  I have a patch that adds a flag on WKWebView
&gt; that lets you disable content extensions for that WKWebView. If one wanted
&gt; to reload without content extension extensions, they set the flag and call
&gt; reload. This would allow a client to keep content extensions off for a while
&gt; if that is what they want.
This sounds better.  Where is this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103278</commentid>
    <comment_count>8</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-06-19 10:29:34 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #3)
&gt; &gt; I don&apos;t like this approach.  I have a patch that adds a flag on WKWebView
&gt; &gt; that lets you disable content extensions for that WKWebView. If one wanted
&gt; &gt; to reload without content extension extensions, they set the flag and call
&gt; &gt; reload. This would allow a client to keep content extensions off for a while
&gt; &gt; if that is what they want.
&gt; This sounds better.  Where is this patch?

I disagree that it sounds better; I&apos;m (unsurprisingly) with Dan on this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103282</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-19 10:36:52 -0700</bug_when>
    <thetext>What if a client wants to disable content blocking for more than one load?  Shouldn&apos;t the client be able to decide how long content blockers are disabled for?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103310</commentid>
    <comment_count>10</comment_count>
      <attachid>255148</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-19 11:19:33 -0700</bug_when>
    <thetext>Comment on attachment 255148
Patch

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

&gt;&gt; Source/WebCore/loader/FrameLoader.cpp:3376
&gt;&gt; +        m_frame.page()-&gt;userContentController()-&gt;enableContentBlocking();
&gt; 
&gt; This doesn’t seem right. For one, if you reload-without-content-blockers and an error occurs in the provisional stage, you will not reach this function, and content blockers will remain disabled for the next navigation, which may not be a reload but something completely different. But beyond that, this isn’t very sound design. I think it implicitly relies on the fact that the main frame is the first frame to be committed upon reload. It doesn’t seem to handle client-side redirects. I don’t see how it handles any resources triggered by script or other deferral mechanisms after the main frame finished loading (but I don’t know exactly how the user content controller works).
&gt; 
&gt; To me, it seems like something like “do this load without content blocking” would be best implemented as a bit of state on DocumentLoader. To do a load (whether it’s a reload or not) without content blocking, you’d just set a bit on the DocumentLoader, and everything else would consult the DocumentLoader (perhaps via the frame or the page). Then you wouldn’t need to reset anything upon the load succeeding or failing, because the next load would use another DocumentLoader anyway. And you wouldn’t need a bit on UserContentController called m_contentBlockingEnabled which really means “content blocking not temporarily disabled”.

Mitz’s suggestion about using a flag on the DocumentLoader is a very good one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103311</commentid>
    <comment_count>11</comment_count>
      <attachid>255148</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-19 11:20:49 -0700</bug_when>
    <thetext>Comment on attachment 255148
Patch

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

&gt;&gt;&gt; Source/WebCore/loader/FrameLoader.cpp:3376
&gt;&gt;&gt; +        m_frame.page()-&gt;userContentController()-&gt;enableContentBlocking();
&gt;&gt; 
&gt;&gt; This doesn’t seem right. For one, if you reload-without-content-blockers and an error occurs in the provisional stage, you will not reach this function, and content blockers will remain disabled for the next navigation, which may not be a reload but something completely different. But beyond that, this isn’t very sound design. I think it implicitly relies on the fact that the main frame is the first frame to be committed upon reload. It doesn’t seem to handle client-side redirects. I don’t see how it handles any resources triggered by script or other deferral mechanisms after the main frame finished loading (but I don’t know exactly how the user content controller works).
&gt;&gt; 
&gt;&gt; To me, it seems like something like “do this load without content blocking” would be best implemented as a bit of state on DocumentLoader. To do a load (whether it’s a reload or not) without content blocking, you’d just set a bit on the DocumentLoader, and everything else would consult the DocumentLoader (perhaps via the frame or the page). Then you wouldn’t need to reset anything upon the load succeeding or failing, because the next load would use another DocumentLoader anyway. And you wouldn’t need a bit on UserContentController called m_contentBlockingEnabled which really means “content blocking not temporarily disabled”.
&gt; 
&gt; Mitz’s suggestion about using a flag on the DocumentLoader is a very good one.

A tricky part of that is checking for any case where we make an extra document loader and need to move the flag from the previous to the next one. I’m not sure that exists, but we should double check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103460</commentid>
    <comment_count>12</comment_count>
      <attachid>255240</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-19 15:59:09 -0700</bug_when>
    <thetext>Created attachment 255240
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103637</commentid>
    <comment_count>13</comment_count>
      <attachid>255240</attachid>
    <who name="">mitz</who>
    <bug_when>2015-06-20 10:24:23 -0700</bug_when>
    <thetext>Comment on attachment 255240
Patch

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

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h:76
&gt; +@property (nonatomic, setter=_setUserContentExtensionsEnabled:) BOOL _userContentExtensionsEnabled;

Please add WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA) here!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103754</commentid>
    <comment_count>14</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-06-21 19:34:47 -0700</bug_when>
    <thetext>&lt;rdar://problem/20351903&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103906</commentid>
    <comment_count>15</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-06-22 13:12:10 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/185840</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255148</attachid>
            <date>2015-06-18 16:15:56 -0700</date>
            <delta_ts>2015-06-19 15:59:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146128-20150618161519.patch</filename>
            <type>text/plain</type>
            <size>15892</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTcyMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE1LTA2LTE4ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQWRkIGFwaSB0byByZWxvYWQgd2l0aG91dCBjb250ZW50IGJsb2NraW5nLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2MTI4Cisg
ICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIxNDQxNjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpc3BhdGNoRGlkQ29tbWl0TG9hZCk6CisgICAgICAg
ICogcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJD
b250ZW50Q29udHJvbGxlcjo6ZW5hYmxlQ29udGVudEJsb2NraW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6ZGlzYWJsZUNvbnRlbnRCbG9ja2luZyk6CisgICAg
ICAgICogcmVwbGF5L1VzZXJJbnB1dEJyaWRnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVc2Vy
SW5wdXRCcmlkZ2U6OmxvYWRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJJbnB1dEJy
aWRnZTo6cmVsb2FkRnJhbWUpOgorICAgICAgICAqIHJlcGxheS9Vc2VySW5wdXRCcmlkZ2UuaDoK
KwogMjAxNS0wNi0xOCAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CiAK
ICAgICAgICAgV2ViIEluc3BlY3RvcjogaW1wcm92ZSBnZW5lcmF0ZWQgdHlwZXMgZm9yIG9iamVj
dHMgcGFzc2VkIHRvIGJhY2tlbmQgY29tbWFuZHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmNwcAkocmV2aXNpb24gMTg1NzE1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDYgKzExMSw3IEBACiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdWJmcmFtZUxvYWRlci5oIgogI2luY2x1ZGUg
IlRleHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJVc2VyQ29udGVudENvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlhNTERvY3VtZW50UGFy
c2VyLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CkBAIC0zMzY3LDYgKzMzNjgsMTMg
QEAgdm9pZCBGcmFtZUxvYWRlcjo6ZGlzcGF0Y2hEaWRDb21taXRMb2FkKAogewogICAgIGlmICht
X3N0YXRlTWFjaGluZS5jcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50KCkpCiAgICAgICAgIHJl
dHVybjsKKyAgICAKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorICAgIC8vIENvbnRl
bnQgYmxvY2tpbmcgY291bGQgaGF2ZSBiZWVuIGRpc2FibGVkIGJ5IGEgX3JlbG9hZFdpdGhvdXRD
b250ZW50QmxvY2tlcnMgb3IgV0tQYWdlUmVsb2FkV2l0aG91dENvbnRlbnRCbG9ja2VycyBjYWxs
LgorICAgIC8vIElmIHRoaXMgaGFwcGVucywgd2Ugd2FudCB0byBvbmx5IGRpc2FibGUgY29udGVu
dCBibG9ja2VycyB1bnRpbCB0aGUgbmV4dCBsb2FkIGlzIGNvbW1pdHRlZC4KKyAgICBpZiAobV9m
cmFtZS5wYWdlKCkgJiYgbV9mcmFtZS5wYWdlKCktPnVzZXJDb250ZW50Q29udHJvbGxlcigpKQor
ICAgICAgICBtX2ZyYW1lLnBhZ2UoKS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCktPmVuYWJsZUNv
bnRlbnRCbG9ja2luZygpOworI2VuZGlmCiAKICAgICBtX2NsaWVudC5kaXNwYXRjaERpZENvbW1p
dExvYWQoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJv
bGxlci5oCShyZXZpc2lvbiAxODU3MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250
ZW50Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSw4IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0
cmluZyYgbmFtZSwgUmVmUHRyPENvbnRlbnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRl
bnNpb24+KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXJDb250ZW50RXh0ZW5z
aW9uKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVB
bGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsKKyAgICB2b2lkIGVuYWJsZUNvbnRlbnRCbG9ja2lu
ZygpIHsgbV9jb250ZW50QmxvY2tpbmdFbmFibGVkID0gdHJ1ZTsgfQorICAgIHZvaWQgZGlzYWJs
ZUNvbnRlbnRCbG9ja2luZygpIHsgbV9jb250ZW50QmxvY2tpbmdFbmFibGVkID0gZmFsc2U7IH0K
IAogICAgIHZvaWQgcHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQoUmVzb3VyY2VS
ZXF1ZXN0JiwgUmVzb3VyY2VUeXBlLCBEb2N1bWVudExvYWRlciYgaW5pdGlhdGluZ0RvY3VtZW50
TG9hZGVyKTsKICAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gYWN0aW9uc0Zv
clJlc291cmNlTG9hZChjb25zdCBSZXNvdXJjZUxvYWRJbmZvJik7CkBAIC0xMTAsNiArMTEyLDcg
QEAgcHJpdmF0ZToKICNlbmRpZgogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAg
c3RkOjp1bmlxdWVfcHRyPENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tl
bmQ+IG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQ7CisgICAgYm9vbCBtX2NvbnRlbnRCbG9ja2lu
Z0VuYWJsZWQgeyB0cnVlIH07CiAjZW5kaWYKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
cGxheS9Vc2VySW5wdXRCcmlkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
cGxheS9Vc2VySW5wdXRCcmlkZ2UuY3BwCShyZXZpc2lvbiAxODU3MTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZXBsYXkvVXNlcklucHV0QnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiAr
MzcsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2lu
Y2x1ZGUgIlVzZXJDb250ZW50Q29udHJvbGxlci5oIgogCiAjaWYgRU5BQkxFKFdFQl9SRVBMQVkp
CiAjaW5jbHVkZSAiUmVwbGF5Q29udHJvbGxlci5oIgpAQCAtMjQyLDggKzI0MywxNCBAQCB2b2lk
IFVzZXJJbnB1dEJyaWRnZTo6bG9hZFJlcXVlc3QoY29uc3QgCiAgICAgbV9wYWdlLm1haW5GcmFt
ZSgpLmxvYWRlcigpLmxvYWQocmVxdWVzdCk7CiB9CiAKLXZvaWQgVXNlcklucHV0QnJpZGdlOjpy
ZWxvYWRGcmFtZShGcmFtZSogZnJhbWUsIGJvb2wgZW5kVG9FbmRSZWxvYWQsIElucHV0U291cmNl
KQordm9pZCBVc2VySW5wdXRCcmlkZ2U6OnJlbG9hZEZyYW1lKEZyYW1lKiBmcmFtZSwgYm9vbCBl
bmRUb0VuZFJlbG9hZCwgYm9vbCB3aXRob3V0Q29udGVudEJsb2NrZXJzLCBJbnB1dFNvdXJjZSkK
IHsKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorICAgIGlmICh3aXRob3V0Q29udGVu
dEJsb2NrZXJzICYmIGZyYW1lICYmIGZyYW1lLT5wYWdlKCkgJiYgZnJhbWUtPnBhZ2UoKS0+dXNl
ckNvbnRlbnRDb250cm9sbGVyKCkpCisgICAgICAgIGZyYW1lLT5wYWdlKCktPnVzZXJDb250ZW50
Q29udHJvbGxlcigpLT5kaXNhYmxlQ29udGVudEJsb2NraW5nKCk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTSh3aXRob3V0Q29udGVudEJsb2NrZXJzKTsKKyNlbmRpZgogICAgIGZyYW1lLT5sb2Fk
ZXIoKS5yZWxvYWQoZW5kVG9FbmRSZWxvYWQpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZXBsYXkvVXNlcklucHV0QnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVw
bGF5L1VzZXJJbnB1dEJyaWRnZS5oCShyZXZpc2lvbiAxODU3MTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZXBsYXkvVXNlcklucHV0QnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDcgKzg5LDcg
QEAgcHVibGljOgogCiAgICAgLy8gTmF2aWdhdGlvbiBBUElzLgogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgbG9hZFJlcXVlc3QoY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIElucHV0U291cmNlIHNv
dXJjZSA9IElucHV0U291cmNlOjpVc2VyKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbG9h
ZEZyYW1lKEZyYW1lKiwgYm9vbCBlbmRUb0VuZFJlbG9hZCwgSW5wdXRTb3VyY2Ugc291cmNlID0g
SW5wdXRTb3VyY2U6OlVzZXIpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVsb2FkRnJhbWUo
RnJhbWUqLCBib29sIGVuZFRvRW5kUmVsb2FkLCBib29sIHdpdGhvdXRDb250ZW50QmxvY2tlcnMs
IElucHV0U291cmNlID0gSW5wdXRTb3VyY2U6OlVzZXIpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc3RvcExvYWRpbmdGcmFtZShGcmFtZSosIElucHV0U291cmNlIHNvdXJjZSA9IElucHV0U291
cmNlOjpVc2VyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHRyeUNsb3NlUGFnZShJbnB1dFNv
dXJjZSBzb3VyY2UgPSBJbnB1dFNvdXJjZTo6VXNlcik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE4NTcyMykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDQxIEBACisyMDE1LTA2LTE4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVu
c2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gQWRkIGFwaSB0
byByZWxvYWQgd2l0aG91dCBjb250ZW50IGJsb2NraW5nLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2MTI4CisgICAgICAgIHJkYXI6Ly9wcm9ibGVt
LzIxNDQxNjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKFdLUGFnZVJlbG9hZCk6
CisgICAgICAgIChXS1BhZ2VSZWxvYWRGcm9tT3JpZ2luKToKKyAgICAgICAgKFdLUGFnZVJlbG9h
ZFdpdGhvdXRDb250ZW50QmxvY2tlcnMpOgorICAgICAgICAoV0tQYWdlVHJ5Q2xvc2UpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV0tCcm93
c2luZ0NvbnRleHRDb250cm9sbGVyIHJlbG9hZF0pOgorICAgICAgICAoLVtXS0Jyb3dzaW5nQ29u
dGV4dENvbnRyb2xsZXIgcmVsb2FkRnJvbU9yaWdpbl0pOgorICAgICAgICAoLVtXS0Jyb3dzaW5n
Q29udGV4dENvbnRyb2xsZXIgYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50XSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmll
dyByZWxvYWRdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHJlbG9hZEZyb21PcmlnaW5dKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9yZXN0b3JlU2Vzc2lvblN0YXRlOmFuZE5hdmlnYXRlOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX3JlbG9hZFdpdGhvdXRDb250ZW50QmxvY2tlcnNdKToKKyAg
ICAgICAgKC1bV0tXZWJWaWV3IF9jbG9zZV0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJGcmFtZVByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVQcm94eTo6ZGlkSGFuZGxlQ29udGVudEZp
bHRlclVuYmxvY2tOYXZpZ2F0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzdG9wTG9hZGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVsb2FkKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXREZWZlcnNMb2FkaW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6cmVsb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z29G
b3J3YXJkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorCiAyMDE1LTA2LTE4
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3Zl
IHNob3VsZEludGVycnVwdEphdmFTY3JpcHQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJGcmFtZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViRnJhbWVQcm94eS5jcHAJKHJldmlzaW9uIDE4NTcxNSkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJGcmFtZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQyLDcgKzI0
Miw3IEBAIGJvb2wgV2ViRnJhbWVQcm94eTo6ZGlkSGFuZGxlQ29udGVudEZpbHQKICAgICBBU1NF
UlQocGFnZSk7CiAgICAgbV9jb250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXIucmVxdWVzdFVuYmxv
Y2tBc3luYyhbcGFnZV0oYm9vbCB1bmJsb2NrZWQpIHsKICAgICAgICAgaWYgKHVuYmxvY2tlZCkK
LSAgICAgICAgICAgIHBhZ2UtPnJlbG9hZChmYWxzZSk7CisgICAgICAgICAgICBwYWdlLT5yZWxv
YWQoZmFsc2UsIGZhbHNlKTsKICAgICB9KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAxODU3MTUp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAxNSw3ICsxMDE1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN0b3BMb2FkaW5n
KCkKICAgICBtX3Byb2Nlc3MtPnJlc3BvbnNpdmVuZXNzVGltZXIoKS0+c3RhcnQoKTsKIH0KIAot
UmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFnZVByb3h5OjpyZWxvYWQoYm9vbCByZWxvYWRG
cm9tT3JpZ2luKQorUmVmUHRyPEFQSTo6TmF2aWdhdGlvbj4gV2ViUGFnZVByb3h5OjpyZWxvYWQo
Ym9vbCByZWxvYWRGcm9tT3JpZ2luLCBib29sIHdpdGhvdXRDb250ZW50QmxvY2tlcnMpCiB7CiAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAKQEAg
LTEwMzUsNyArMTAzNSw3IEBAIFJlZlB0cjxBUEk6Ok5hdmlnYXRpb24+IFdlYlBhZ2VQcm94eTo6
cmUKICAgICAKICAgICBhdXRvIG5hdmlnYXRpb24gPSBtX25hdmlnYXRpb25TdGF0ZS0+Y3JlYXRl
UmVsb2FkTmF2aWdhdGlvbigpOwogCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpSZWxvYWQobmF2aWdhdGlvbi0+bmF2aWdhdGlvbklEKCksIHJlbG9hZEZyb21PcmlnaW4s
IHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCBtX3BhZ2VJRCk7CisgICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpSZWxvYWQobmF2aWdhdGlvbi0+bmF2aWdhdGlvbklEKCksIHJl
bG9hZEZyb21PcmlnaW4sIHdpdGhvdXRDb250ZW50QmxvY2tlcnMsIHNhbmRib3hFeHRlbnNpb25I
YW5kbGUpLCBtX3BhZ2VJRCk7CiAgICAgbV9wcm9jZXNzLT5yZXNwb25zaXZlbmVzc1RpbWVyKCkt
PnN0YXJ0KCk7CiAKICAgICByZXR1cm4gV1RGOjptb3ZlKG5hdmlnYXRpb24pOwpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMTg1NzE1KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNjYsNyArMzY2LDcgQEAgcHVibGljOgogICAgIHZvaWQgbmF2aWdhdGVUb1BERkxpbmtXaXRo
U2ltdWxhdGVkQ2xpY2soY29uc3QgU3RyaW5nJiB1cmwsIFdlYkNvcmU6OkludFBvaW50IGRvY3Vt
ZW50UG9pbnQsIFdlYkNvcmU6OkludFBvaW50IHNjcmVlblBvaW50KTsKIAogICAgIHZvaWQgc3Rv
cExvYWRpbmcoKTsKLSAgICBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uPiByZWxvYWQoYm9vbCByZWxv
YWRGcm9tT3JpZ2luKTsKKyAgICBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uPiByZWxvYWQoYm9vbCBy
ZWxvYWRGcm9tT3JpZ2luLCBib29sIHdpdGhvdXRDb250ZW50QmxvY2tlcnMpOwogCiAgICAgUmVm
UHRyPEFQSTo6TmF2aWdhdGlvbj4gZ29Gb3J3YXJkKCk7CiAgICAgUmVmUHRyPEFQSTo6TmF2aWdh
dGlvbj4gZ29CYWNrKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQ
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQ
YWdlLmNwcAkocmV2aXNpb24gMTg1NzE1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL1dLUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOCwxMiArMjE4LDE3IEBAIHZvaWQg
V0tQYWdlU3RvcExvYWRpbmcoV0tQYWdlUmVmIHBhZ2VSZWYKIAogdm9pZCBXS1BhZ2VSZWxvYWQo
V0tQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5yZWxvYWQoZmFsc2Up
OworICAgIHRvSW1wbChwYWdlUmVmKS0+cmVsb2FkKGZhbHNlLCBmYWxzZSk7CiB9CiAKIHZvaWQg
V0tQYWdlUmVsb2FkRnJvbU9yaWdpbihXS1BhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICB0b0ltcGwo
cGFnZVJlZiktPnJlbG9hZCh0cnVlKTsKKyAgICB0b0ltcGwocGFnZVJlZiktPnJlbG9hZCh0cnVl
LCBmYWxzZSk7Cit9CisKK3ZvaWQgV0tQYWdlUmVsb2FkV2l0aG91dENvbnRlbnRCbG9ja2VycyhX
S1BhZ2VSZWYgcGFnZVJlZikKK3sKKyAgICB0b0ltcGwocGFnZVJlZiktPnJlbG9hZChmYWxzZSwg
dHJ1ZSk7CiB9CiAKIGJvb2wgV0tQYWdlVHJ5Q2xvc2UoV0tQYWdlUmVmIHBhZ2VSZWYpCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCShyZXZpc2lvbiAxODU3MTUp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTgyLDYgKzgyLDcgQEAgV0tfRVhQT1JUIHZvaWQgV0tQYWdlTG9hZFdlYkFyY2hpdmVE
YXRhVwogV0tfRVhQT1JUIHZvaWQgV0tQYWdlU3RvcExvYWRpbmcoV0tQYWdlUmVmIHBhZ2UpOwog
V0tfRVhQT1JUIHZvaWQgV0tQYWdlUmVsb2FkKFdLUGFnZVJlZiBwYWdlKTsKIFdLX0VYUE9SVCB2
b2lkIFdLUGFnZVJlbG9hZEZyb21PcmlnaW4oV0tQYWdlUmVmIHBhZ2UpOworV0tfRVhQT1JUIHZv
aWQgV0tQYWdlUmVsb2FkV2l0aG91dENvbnRlbnRCbG9ja2VycyhXS1BhZ2VSZWYgcGFnZSk7CiAK
IFdLX0VYUE9SVCBib29sIFdLUGFnZVRyeUNsb3NlKFdLUGFnZVJlZiBwYWdlKTsKIFdLX0VYUE9S
VCB2b2lkIFdLUGFnZUNsb3NlKFdLUGFnZVJlZiBwYWdlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93c2luZ0Nv
bnRleHRDb250cm9sbGVyLm1tCShyZXZpc2lvbiAxODU3MTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjU3LDEyICsyNTcsMTIgQEAgLSAodm9pZClzdG9wTG9hZGluZwogCiAtICh2
b2lkKXJlbG9hZAogewotICAgIF9wYWdlLT5yZWxvYWQoZmFsc2UpOworICAgIF9wYWdlLT5yZWxv
YWQoZmFsc2UsIGZhbHNlKTsKIH0KIAogLSAodm9pZClyZWxvYWRGcm9tT3JpZ2luCiB7Ci0gICAg
X3BhZ2UtPnJlbG9hZCh0cnVlKTsKKyAgICBfcGFnZS0+cmVsb2FkKHRydWUsIGZhbHNlKTsKIH0K
IAogLSAoTlNTdHJpbmcgKilhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lv
biAxODU3MTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
dy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTQ3LDcgKzU0Nyw3IEBAIC0gKFdLTmF2aWdhdGlvbiAq
KWdvRm9yd2FyZAogCiAtIChXS05hdmlnYXRpb24gKilyZWxvYWQKIHsKLSAgICBhdXRvIG5hdmln
YXRpb24gPSBfcGFnZS0+cmVsb2FkKGZhbHNlKTsKKyAgICBhdXRvIG5hdmlnYXRpb24gPSBfcGFn
ZS0+cmVsb2FkKGZhbHNlLCBmYWxzZSk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uKQogICAgICAgICBy
ZXR1cm4gbmlsOwogCkBAIC01NTYsNyArNTU2LDcgQEAgLSAoV0tOYXZpZ2F0aW9uICopcmVsb2Fk
CiAKIC0gKFdLTmF2aWdhdGlvbiAqKXJlbG9hZEZyb21PcmlnaW4KIHsKLSAgICBhdXRvIG5hdmln
YXRpb24gPSBfcGFnZS0+cmVsb2FkKHRydWUpOworICAgIGF1dG8gbmF2aWdhdGlvbiA9IF9wYWdl
LT5yZWxvYWQodHJ1ZSwgZmFsc2UpOwogICAgIGlmICghbmF2aWdhdGlvbikKICAgICAgICAgcmV0
dXJuIG5pbDsKIApAQCAtMjAxNyw2ICsyMDE3LDE1IEBAIC0gKFdLTmF2aWdhdGlvbiAqKV9yZXN0
b3JlU2Vzc2lvblN0YXRlOigKICAgICByZXR1cm4gW3dyYXBwZXIoKm5hdmlnYXRpb24ucmVsZWFz
ZSgpLmxlYWtSZWYoKSkgYXV0b3JlbGVhc2VdOwogfQogCistIChXS05hdmlnYXRpb24gKilfcmVs
b2FkV2l0aG91dENvbnRlbnRCbG9ja2VycworeworICAgIGF1dG8gbmF2aWdhdGlvbiA9IF9wYWdl
LT5yZWxvYWQoZmFsc2UsIHRydWUpOworICAgIGlmICghbmF2aWdhdGlvbikKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICAKKyAgICByZXR1cm4gW3dyYXBwZXIoKm5hdmlnYXRpb24ucmVsZWFzZSgp
LmxlYWtSZWYoKSkgYXV0b3JlbGVhc2VdOworfQorCiAtICh2b2lkKV9jbG9zZQogewogICAgIF9w
YWdlLT5jbG9zZSgpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDE4NTcxNSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Myw2ICs4Myw3IEBAIFdLX0VYVEVSTiBOU1N0cmluZyAqIGNvbnN0IF9XS1No
b3VsZE9wZW4KIAogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tTZXNzaW9uU3Rh
dGUgKl9zZXNzaW9uU3RhdGU7CiAtIChXS05hdmlnYXRpb24gKilfcmVzdG9yZVNlc3Npb25TdGF0
ZTooX1dLU2Vzc2lvblN0YXRlICopc2Vzc2lvblN0YXRlIGFuZE5hdmlnYXRlOihCT09MKW5hdmln
YXRlOworLSAoV0tOYXZpZ2F0aW9uICopX3JlbG9hZFdpdGhvdXRDb250ZW50QmxvY2tlcnM7CiAK
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldEFsbG93c1JlbW90ZUluc3BlY3Rpb246
KSBCT09MIF9hbGxvd3NSZW1vdGVJbnNwZWN0aW9uOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxODU3MTUpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExNDAsNyArMTE0MCw3IEBAIHZvaWQgV2ViUGFnZTo6c2V0RGVmZXJzTG9hZGluZyhi
b29sIGRlZmUKICAgICBtX3BhZ2UtPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzTG9hZGluZyk7CiB9
CiAKLXZvaWQgV2ViUGFnZTo6cmVsb2FkKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgYm9vbCByZWxv
YWRGcm9tT3JpZ2luLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRl
bnNpb25IYW5kbGUpCit2b2lkIFdlYlBhZ2U6OnJlbG9hZCh1aW50NjRfdCBuYXZpZ2F0aW9uSUQs
IGJvb2wgcmVsb2FkRnJvbU9yaWdpbiwgYm9vbCB3aXRob3V0Q29udGVudEJsb2NrZXJzLCBjb25z
dCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpCiB7CiAg
ICAgU2VuZFN0b3BSZXNwb25zaXZlbmVzc1RpbWVyIHN0b3BwZXIodGhpcyk7CiAKQEAgLTExNDgs
NyArMTE0OCw3IEBAIHZvaWQgV2ViUGFnZTo6cmVsb2FkKHVpbnQ2NF90IG5hdmlnYXRpb24KICAg
ICBtX3BlbmRpbmdOYXZpZ2F0aW9uSUQgPSBuYXZpZ2F0aW9uSUQ7CiAKICAgICBtX3NhbmRib3hF
eHRlbnNpb25UcmFja2VyLmJlZ2luTG9hZChtX21haW5GcmFtZS5nZXQoKSwgc2FuZGJveEV4dGVu
c2lvbkhhbmRsZSk7Ci0gICAgY29yZVBhZ2UoKS0+dXNlcklucHV0QnJpZGdlKCkucmVsb2FkRnJh
bWUobV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLCByZWxvYWRGcm9tT3JpZ2luKTsKKyAgICBjb3Jl
UGFnZSgpLT51c2VySW5wdXRCcmlkZ2UoKS5yZWxvYWRGcmFtZShtX21haW5GcmFtZS0+Y29yZUZy
YW1lKCksIHJlbG9hZEZyb21PcmlnaW4sIHdpdGhvdXRDb250ZW50QmxvY2tlcnMpOwogfQogCiB2
b2lkIFdlYlBhZ2U6OmdvRm9yd2FyZCh1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIHVpbnQ2NF90IGJh
Y2tGb3J3YXJkSXRlbUlEKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oCShyZXZpc2lvbiAxODU3MTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NTUsNyArOTU1LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGxvYWRQbGFpblRleHRTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29u
c3QgVXNlckRhdGEmKTsKICAgICB2b2lkIGxvYWRXZWJBcmNoaXZlRGF0YShjb25zdCBJUEM6OkRh
dGFSZWZlcmVuY2UmLCBjb25zdCBVc2VyRGF0YSYpOwogICAgIHZvaWQgbmF2aWdhdGVUb1BERkxp
bmtXaXRoU2ltdWxhdGVkQ2xpY2soY29uc3QgU3RyaW5nJiB1cmwsIFdlYkNvcmU6OkludFBvaW50
IGRvY3VtZW50UG9pbnQsIFdlYkNvcmU6OkludFBvaW50IHNjcmVlblBvaW50KTsKLSAgICB2b2lk
IHJlbG9hZCh1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGJvb2wgcmVsb2FkRnJvbU9yaWdpbiwgY29u
c3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CisgICAgdm9pZCByZWxvYWQodWludDY0X3Qg
bmF2aWdhdGlvbklELCBib29sIHJlbG9hZEZyb21PcmlnaW4sIGJvb2wgd2l0aG91dENvbnRlbnRC
bG9ja2VycywgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CiAgICAgdm9pZCBnb0Zv
cndhcmQodWludDY0X3QgbmF2aWdhdGlvbklELCB1aW50NjRfdCk7CiAgICAgdm9pZCBnb0JhY2so
dWludDY0X3QgbmF2aWdhdGlvbklELCB1aW50NjRfdCk7CiAgICAgdm9pZCBnb1RvQmFja0Zvcndh
cmRJdGVtKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgdWludDY0X3QpOwpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4J
KHJldmlzaW9uIDE4NTcxNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgbWVz
c2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgTG9hZFdlYkFyY2hpdmVEYXRh
KElQQzo6RGF0YVJlZmVyZW5jZSB3ZWJBcmNoaXZlRGF0YSwgV2ViS2l0OjpVc2VyRGF0YSB1c2Vy
RGF0YSkKICAgICBOYXZpZ2F0ZVRvUERGTGlua1dpdGhTaW11bGF0ZWRDbGljayhTdHJpbmcgdXJs
LCBXZWJDb3JlOjpJbnRQb2ludCBkb2N1bWVudFBvaW50LCBXZWJDb3JlOjpJbnRQb2ludCBzY3Jl
ZW5Qb2ludCkKIAotICAgIFJlbG9hZCh1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGJvb2wgcmVsb2Fk
RnJvbU9yaWdpbiwgV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVu
c2lvbkhhbmRsZSkKKyAgICBSZWxvYWQodWludDY0X3QgbmF2aWdhdGlvbklELCBib29sIHJlbG9h
ZEZyb21PcmlnaW4sIGJvb2wgd2l0aG91dENvbnRlbnRCbG9ja2VycywgV2ViS2l0OjpTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkKICAgICBTdG9wTG9hZGlu
ZygpCiAKICAgICBTdG9wTG9hZGluZ0ZyYW1lKHVpbnQ2NF90IGZyYW1lSUQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255240</attachid>
            <date>2015-06-19 15:59:09 -0700</date>
            <delta_ts>2015-06-20 10:19:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146128-20150619155830.patch</filename>
            <type>text/plain</type>
            <size>19284</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NTc3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE1LTA2LTE5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQg
RXh0ZW5zaW9uc10gQWRkIFNQSSB0byByZWxvYWQgd2l0aG91dCBjb250ZW50IGJsb2NraW5nLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2MTI4Cisg
ICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIxNDQxNjMyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bG9hZFJlc291cmNlKToKKyAgICAgICAg
KiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VM
b2FkZXI6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVy
OjpyZXF1ZXN0UmVzb3VyY2UpOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6b3Blbik6CisgICAgICAgICogcGFnZS9QYWdlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlOjp1c2VyQ29udGVudENvbnRyb2xsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6dXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQYWdlOjpzZXRVc2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2U6Omdyb3VwKToKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92
ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVu
dENvbnRyb2xsZXI6OnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWN0aW9uc0ZvclJlc291cmNlTG9h
ZCk6CisgICAgICAgICogcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuaDoKKwogMjAxNS0wNi0x
OSAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgVmFyaW91cyBhc3Nl
cnRpb24gZmFpbHVyZXMgb2NjdXIgd2hlbiBleGVjdXRpbmcgc2NyaXB0IGluIHRoZSBtaWRzdCBv
ZiBET00gaW5zZXJ0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE4NTcxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNjcsNyArMTE2Nyw3IEBAIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6bG9hZFJlc291cmNlKGNvbnMKICAgICBEb2N1bWVudExvYWRlciogZG9j
dW1lbnRMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKTsKIAogICAgIGlm
IChwYWdlLT51c2VyQ29udGVudENvbnRyb2xsZXIoKSAmJiBkb2N1bWVudExvYWRlcikKLSAgICAg
ICAgcGFnZS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCktPnByb2Nlc3NDb250ZW50RXh0ZW5zaW9u
UnVsZXNGb3JMb2FkKHJlcXVlc3QsIFJlc291cmNlVHlwZTo6TWVkaWEsICpkb2N1bWVudExvYWRl
cik7CisgICAgICAgIHBhZ2UtPnVzZXJDb250ZW50Q29udHJvbGxlcigpLT5wcm9jZXNzQ29udGVu
dEV4dGVuc2lvblJ1bGVzRm9yTG9hZCgqcGFnZSwgcmVxdWVzdCwgUmVzb3VyY2VUeXBlOjpNZWRp
YSwgKmRvY3VtZW50TG9hZGVyKTsKIAogICAgIGlmIChyZXF1ZXN0LmlzTnVsbCgpKSB7CiAgICAg
ICAgIG1lZGlhTG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3IpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAxODU3MTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOTMsMTIgKzI5MywyOCBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJl
cXVlc3QoUmVzCiAgICAgUmVmPFJlc291cmNlTG9hZGVyPiBwcm90ZWN0KCp0aGlzKTsKIAogICAg
IEFTU0VSVCghbV9yZWFjaGVkVGVybWluYWxTdGF0ZSk7Ci0KLSNpZiBFTkFCTEUoQ09OVEVOVF9F
WFRFTlNJT05TKQogICAgIEFTU0VSVChtX3Jlc291cmNlVHlwZSAhPSBSZXNvdXJjZVR5cGU6Oklu
dmFsaWQpOwogCi0gICAgaWYgKGZyYW1lTG9hZGVyKCkgJiYgZnJhbWVMb2FkZXIoKS0+ZnJhbWUo
KS5wYWdlKCkgJiYgZnJhbWVMb2FkZXIoKS0+ZnJhbWUoKS5wYWdlKCktPnVzZXJDb250ZW50Q29u
dHJvbGxlcigpICYmIG1fZG9jdW1lbnRMb2FkZXIpCi0gICAgICAgIGZyYW1lTG9hZGVyKCktPmZy
YW1lKCkucGFnZSgpLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS0+cHJvY2Vzc0NvbnRlbnRFeHRl
bnNpb25SdWxlc0ZvckxvYWQocmVxdWVzdCwgbV9yZXNvdXJjZVR5cGUsICptX2RvY3VtZW50TG9h
ZGVyKTsKKyAgICBpZiAoIWZyYW1lTG9hZGVyKCkpIHsKKyAgICAgICAgZGlkRmFpbChjYW5ub3RT
aG93VVJMRXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBQYWdlKiBwYWdl
ID0gZnJhbWVMb2FkZXIoKS0+ZnJhbWUoKS5wYWdlKCk7CisgICAgaWYgKCFwYWdlKSB7CisgICAg
ICAgIGRpZEZhaWwoY2Fubm90U2hvd1VSTEVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKCFtX2RvY3VtZW50TG9hZGVyKSB7CisgICAgICAgIGRpZEZhaWwoY2Fubm90
U2hvd1VSTEVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKENP
TlRFTlRfRVhURU5TSU9OUykKKyAgICBhdXRvKiB1c2VyQ29udGVudENvbnRyb2xsZXIgPSBwYWdl
LT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKKyAgICBpZiAodXNlckNvbnRlbnRDb250cm9sbGVy
KQorICAgICAgICB1c2VyQ29udGVudENvbnRyb2xsZXItPnByb2Nlc3NDb250ZW50RXh0ZW5zaW9u
UnVsZXNGb3JMb2FkKCpwYWdlLCByZXF1ZXN0LCBtX3Jlc291cmNlVHlwZSwgKm1fZG9jdW1lbnRM
b2FkZXIpOwogCiAgICAgaWYgKHJlcXVlc3QuaXNOdWxsKCkpIHsKICAgICAgICAgZGlkRmFpbChj
YW5ub3RTaG93VVJMRXJyb3IoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDE4NTcxNSkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwOSw3ICs1MDksNyBAQCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNo
ZWRSZXNvdXJjZT4gQ2FjCiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIGlm
IChmcmFtZSgpICYmIGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKSAmJiBmcmFtZSgpLT5tYWlu
RnJhbWUoKS5wYWdlKCktPnVzZXJDb250ZW50Q29udHJvbGxlcigpICYmIG1fZG9jdW1lbnRMb2Fk
ZXIpCi0gICAgICAgIGZyYW1lKCktPm1haW5GcmFtZSgpLnBhZ2UoKS0+dXNlckNvbnRlbnRDb250
cm9sbGVyKCktPnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVsZXNGb3JMb2FkKHJlcXVlc3QubXV0
YWJsZVJlc291cmNlUmVxdWVzdCgpLCB0b1Jlc291cmNlVHlwZSh0eXBlKSwgKm1fZG9jdW1lbnRM
b2FkZXIpOworICAgICAgICBmcmFtZSgpLT5tYWluRnJhbWUoKS5wYWdlKCktPnVzZXJDb250ZW50
Q29udHJvbGxlcigpLT5wcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZCgqZnJhbWUo
KS0+bWFpbkZyYW1lKCkucGFnZSgpLCByZXF1ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3QoKSwg
dG9SZXNvdXJjZVR5cGUodHlwZSksICptX2RvY3VtZW50TG9hZGVyKTsKIAogICAgIGlmIChyZXF1
ZXN0Lm11dGFibGVSZXNvdXJjZVJlcXVlc3QoKS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCShyZXZpc2lvbiAxODU3MTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIxNDcsNyArMjE0Nyw3IEBAIFBhc3NSZWZQdHI8RE9NV2luZG93PiBET01XaW5kb3c6Om9wZW4o
Y28KICAgICAgICAgJiYgZmlyc3RGcmFtZS0+bWFpbkZyYW1lKCkucGFnZSgpLT51c2VyQ29udGVu
dENvbnRyb2xsZXIoKQogICAgICAgICAmJiBmaXJzdEZyYW1lLT5tYWluRnJhbWUoKS5kb2N1bWVu
dCgpKSB7CiAgICAgICAgIFJlc291cmNlTG9hZEluZm8gcmVzb3VyY2VMb2FkSW5mbyA9IHtmaXJz
dEZyYW1lLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpLCBmaXJzdEZyYW1lLT5t
YWluRnJhbWUoKS5kb2N1bWVudCgpLT51cmwoKSwgUmVzb3VyY2VUeXBlOjpQb3B1cH07Ci0gICAg
ICAgIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPiBhY3Rpb25zID0gZmlyc3RGcmFt
ZS0+bWFpbkZyYW1lKCkucGFnZSgpLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS0+YWN0aW9uc0Zv
clJlc291cmNlTG9hZChyZXNvdXJjZUxvYWRJbmZvKTsKKyAgICAgICAgVmVjdG9yPENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb24+IGFjdGlvbnMgPSBmaXJzdEZyYW1lLT5tYWluRnJhbWUoKS5wYWdl
KCktPnVzZXJDb250ZW50Q29udHJvbGxlcigpLT5hY3Rpb25zRm9yUmVzb3VyY2VMb2FkKCpmaXJz
dEZyYW1lLT5tYWluRnJhbWUoKS5wYWdlKCksIHJlc291cmNlTG9hZEluZm8pOwogICAgICAgICBm
b3IgKGNvbnN0IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb24mIGFjdGlvbiA6IGFjdGlvbnMpIHsK
ICAgICAgICAgICAgIGlmIChhY3Rpb24udHlwZSgpID09IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rp
b25UeXBlOjpCbG9ja0xvYWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuaAkocmV2aXNpb24gMTg1NzE1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw2ICs0MzQsOSBAQCBwdWJsaWM6CiAgICAgVXNl
ckNvbnRlbnRDb250cm9sbGVyKiB1c2VyQ29udGVudENvbnRyb2xsZXIoKSB7IHJldHVybiBtX3Vz
ZXJDb250ZW50Q29udHJvbGxlci5nZXQoKTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
VXNlckNvbnRlbnRDb250cm9sbGVyKFVzZXJDb250ZW50Q29udHJvbGxlciopOwogCisgICAgYm9v
bCB1c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV91c2VyQ29u
dGVudEV4dGVuc2lvbnNFbmFibGVkOyB9CisgICAgdm9pZCBzZXRVc2VyQ29udGVudEV4dGVuc2lv
bnNFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX3VzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQg
PSBlbmFibGVkOyB9CisKICAgICBWaXNpdGVkTGlua1N0b3JlJiB2aXNpdGVkTGlua1N0b3JlKCk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaXNpdGVkTGlua1N0b3JlKFJlZjxWaXNpdGVk
TGlua1N0b3JlPiYmKTsKIApAQCAtNjI1LDYgKzYyOCw4IEBAIHByaXZhdGU6CiAKICAgICBNZWRp
YVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MgbV9tZWRpYVN0YXRlIHsgTWVkaWFQcm9kdWNlcjo6
SXNOb3RQbGF5aW5nIH07CiAgICAgRGlzbWlzc2FsVHlwZSBtX2Rpc21pc3NhbEV2ZW50QmVpbmdE
aXNwYXRjaGVkIHsgRGlzbWlzc2FsVHlwZTo6Tm9uZSB9OworICAgIAorICAgIGJvb2wgbV91c2Vy
Q29udGVudEV4dGVuc2lvbnNFbmFibGVkIHsgdHJ1ZSB9OwogfTsKIAogaW5saW5lIFBhZ2VHcm91
cCYgUGFnZTo6Z3JvdXAoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRl
bnRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTg1NzE1KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsMTkgKzIw
NCwyNSBAQCB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlCiAgICAgbV9j
b250ZW50RXh0ZW5zaW9uQmFja2VuZC0+cmVtb3ZlQWxsQ29udGVudEV4dGVuc2lvbnMoKTsKIH0K
IAotdm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OnByb2Nlc3NDb250ZW50RXh0ZW5zaW9uUnVs
ZXNGb3JMb2FkKFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VUeXBlIHJlc291cmNl
VHlwZSwgRG9jdW1lbnRMb2FkZXImIGluaXRpYXRpbmdEb2N1bWVudExvYWRlcikKK3ZvaWQgVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpwcm9jZXNzQ29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChQ
YWdlJiBwYWdlLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlVHlwZSByZXNvdXJj
ZVR5cGUsIERvY3VtZW50TG9hZGVyJiBpbml0aWF0aW5nRG9jdW1lbnRMb2FkZXIpCiB7CiAgICAg
aWYgKCFtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kKQogICAgICAgICByZXR1cm47CiAKKyAgICBp
ZiAoIXBhZ2UudXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLT5wcm9jZXNzQ29udGVudEV4dGVuc2lv
blJ1bGVzRm9yTG9hZChyZXF1ZXN0LCByZXNvdXJjZVR5cGUsIGluaXRpYXRpbmdEb2N1bWVudExv
YWRlcik7CiB9CiAKLVZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPiBVc2VyQ29udGVu
dENvbnRyb2xsZXI6OmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQoY29uc3QgUmVzb3VyY2VMb2FkSW5m
byYgcmVzb3VyY2VMb2FkSW5mbykKK1ZlY3RvcjxDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uPiBV
c2VyQ29udGVudENvbnRyb2xsZXI6OmFjdGlvbnNGb3JSZXNvdXJjZUxvYWQoUGFnZSYgcGFnZSwg
Y29uc3QgUmVzb3VyY2VMb2FkSW5mbyYgcmVzb3VyY2VMb2FkSW5mbykKIHsKICAgICBpZiAoIW1f
Y29udGVudEV4dGVuc2lvbkJhY2tlbmQpCiAgICAgICAgIHJldHVybiBWZWN0b3I8Q29udGVudEV4
dGVuc2lvbnM6OkFjdGlvbj4oKTsKICAgICAKKyAgICBpZiAoIXBhZ2UudXNlckNvbnRlbnRFeHRl
bnNpb25zRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gVmVjdG9yPENvbnRlbnRFeHRlbnNpb25z
OjpBY3Rpb24+KCk7CisKICAgICByZXR1cm4gbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC0+YWN0
aW9uc0ZvclJlc291cmNlTG9hZChyZXNvdXJjZUxvYWRJbmZvKTsKIH0KICNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5oCShyZXZpc2lvbiAx
ODU3MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC05Miw4ICs5Miw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsK
IAotICAgIHZvaWQgcHJvY2Vzc0NvbnRlbnRFeHRlbnNpb25SdWxlc0ZvckxvYWQoUmVzb3VyY2VS
ZXF1ZXN0JiwgUmVzb3VyY2VUeXBlLCBEb2N1bWVudExvYWRlciYgaW5pdGlhdGluZ0RvY3VtZW50
TG9hZGVyKTsKLSAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gYWN0aW9uc0Zv
clJlc291cmNlTG9hZChjb25zdCBSZXNvdXJjZUxvYWRJbmZvJik7CisgICAgdm9pZCBwcm9jZXNz
Q29udGVudEV4dGVuc2lvblJ1bGVzRm9yTG9hZChQYWdlJiwgUmVzb3VyY2VSZXF1ZXN0JiwgUmVz
b3VyY2VUeXBlLCBEb2N1bWVudExvYWRlciYgaW5pdGlhdGluZ0RvY3VtZW50TG9hZGVyKTsKKyAg
ICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gYWN0aW9uc0ZvclJlc291cmNlTG9h
ZChQYWdlJiwgY29uc3QgUmVzb3VyY2VMb2FkSW5mbyYpOwogI2VuZGlmCiAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODU3NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MSBAQAorMjAxNS0wNi0xOSAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtDb250ZW50IEV4
dGVuc2lvbnNdIEFkZCBTUEkgdG8gcmVsb2FkIHdpdGhvdXQgY29udGVudCBibG9ja2luZy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjEyOAorICAg
ICAgICByZGFyOi8vcHJvYmxlbS8yMTQ0MTYzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgor
ICAgICAgICAqIFNoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHA6CisgICAgICAgIChXS1BhZ2VTZXRDdXN0b21Vc2Vy
QWdlbnQpOgorICAgICAgICAoV0tQYWdlU2V0VXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCk6
CisgICAgICAgIChXS1BhZ2VTdXBwb3J0c1RleHRFbmNvZGluZyk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9DL1dLUGFnZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3Lm1tOgorICAgICAgICAoLVtXS1dlYlZpZXcgX2N1c3RvbVVzZXJBZ2VudF0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3NldFVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQ6XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyBfdXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZF0pOgorICAgICAg
ICAoLVtXS1dlYlZpZXcgX3NldEN1c3RvbVVzZXJBZ2VudDpdKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjcmVhdGlvblBh
cmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFNob3VsZFNjYWxl
Vmlld1RvRml0RG9jdW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFVz
ZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp1c2VyQ29udGVudEV4dGVu
c2lvbnNFbmFibGVkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OldlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpyZWluaXRpYWxpemVXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
c2V0U2hvdWxkU2NhbGVWaWV3VG9GaXREb2N1bWVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OnNldFVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UubWVzc2FnZXMuaW46CisgICAgICAgIFBhc3MgYSBib29sZWFuIGZyb20gdGhlIEFQSSB0byBX
ZWJDb3JlLgorCiAyMDE1LTA2LTE5ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZW5hbWUgV0tTZWN1cml0eU9yaWdpbi5oL2NwcCB0byBXS1NlY3VyaXR5T3Jp
Z2luUmVmLmgvY3BwLgpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlBhZ2VDcmVhdGlv
blBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQ
YWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkocmV2aXNpb24gMTg1NzE1KQorKysgU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NCw2ICs4NCw3IEBAIHZvaWQgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2Rl
KEkKICNlbmRpZgogICAgIGVuY29kZXIgPDwgYXBwbGVNYWlsUGFnaW5hdGlvblF1aXJrRW5hYmxl
ZDsKICAgICBlbmNvZGVyIDw8IHNob3VsZFNjYWxlVmlld1RvRml0RG9jdW1lbnQ7CisgICAgZW5j
b2RlciA8PCB1c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkOwogfQogCiBib29sIFdlYlBhZ2VD
cmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2Rlciwg
V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKQEAgLTE4OCw2ICsxODksOSBA
QCBib29sIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJCiAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShwYXJhbWV0ZXJzLnNob3VsZFNjYWxlVmlld1RvRml0RG9jdW1lbnQpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMu
dXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUGFn
ZUNyZWF0aW9uUGFyYW1ldGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHJldmlzaW9uIDE4NTcxNSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMCw2ICsxMzAsNyBAQCBzdHJ1Y3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyB7
CiAjZW5kaWYKICAgICBib29sIGFwcGxlTWFpbFBhZ2luYXRpb25RdWlya0VuYWJsZWQ7CiAgICAg
Ym9vbCBzaG91bGRTY2FsZVZpZXdUb0ZpdERvY3VtZW50OworICAgIGJvb2wgdXNlckNvbnRlbnRF
eHRlbnNpb25zRW5hYmxlZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDE4NTcxNSkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MDU1LDYgKzUwNTUsNyBAQCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIFdlYlBh
Z2VQcm94eTo6CiAgICAgcGFyYW1ldGVycy5hcHBsZU1haWxQYWdpbmF0aW9uUXVpcmtFbmFibGVk
ID0gZmFsc2U7CiAjZW5kaWYKICAgICBwYXJhbWV0ZXJzLnNob3VsZFNjYWxlVmlld1RvRml0RG9j
dW1lbnQgPSBtX3Nob3VsZFNjYWxlVmlld1RvRml0RG9jdW1lbnQ7CisgICAgcGFyYW1ldGVycy51
c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkID0gbV91c2VyQ29udGVudEV4dGVuc2lvbnNFbmFi
bGVkOwogCiAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CiB9CkBAIC01OTEzLDQgKzU5MTQsMTcgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OnNldFNob3VsZFNjYWxlVmlld1RvRgogICAgIG1fcHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0U2hvdWxkU2NhbGVWaWV3VG9GaXREb2N1bWVudChz
aG91bGRTY2FsZVZpZXdUb0ZpdERvY3VtZW50KSwgbV9wYWdlSUQpOwogfQogCit2b2lkIFdlYlBh
Z2VQcm94eTo6c2V0VXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZChib29sIHVzZXJDb250ZW50
RXh0ZW5zaW9uc0VuYWJsZWQpCit7CisgICAgaWYgKG1fdXNlckNvbnRlbnRFeHRlbnNpb25zRW5h
YmxlZCA9PSB1c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3VzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQgPSB1c2VyQ29udGVudEV4dGVuc2lv
bnNFbmFibGVkOworCisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0VXNlckNvbnRlbnRFeHRlbnNp
b25zRW5hYmxlZCh1c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKSwgbV9wYWdlSUQpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmgJKHJldmlzaW9uIDE4NTcxNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNjU5LDYgKzY1OSw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNjYWxlVmlld0FuZFVwZGF0ZUdlb21ldHJ5RmVuY2VkKGRvdWJsZSBzY2Fs
ZSwgV2ViQ29yZTo6SW50U2l6ZSB2aWV3U2l6ZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBX
ZWJDb3JlOjpNYWNoU2VuZFJpZ2h0JiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKICNlbmRpZgog
ICAgIHZvaWQgc2V0U2hvdWxkU2NhbGVWaWV3VG9GaXREb2N1bWVudChib29sKTsKKyAgICAKKyAg
ICBib29sIHVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoKSB7IHJldHVybiBtX3VzZXJDb250
ZW50RXh0ZW5zaW9uc0VuYWJsZWQ7IH0KKyAgICB2b2lkIHNldFVzZXJDb250ZW50RXh0ZW5zaW9u
c0VuYWJsZWQoYm9vbCk7CiAKICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0Owog
ICAgIHZvaWQgc2V0SW50cmluc2ljRGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpOwpAQCAtMTc0Niw2
ICsxNzQ5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcmVxdWlyZXNUYXJnZXRNb25pdG9yaW5n
IHsgZmFsc2UgfTsKICNlbmRpZgogCisgICAgYm9vbCBtX3VzZXJDb250ZW50RXh0ZW5zaW9uc0Vu
YWJsZWQgeyB0cnVlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCShyZXZpc2lvbiAxODU3MTUpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzUxLDYgKzM1MSwxMSBAQCB2b2lkIFdLUGFnZVNldEN1c3RvbVVzZXJBZ2VudChXS1Bh
Z2VSZWYgCiAgICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRDdXN0b21Vc2VyQWdlbnQodG9XVEZTdHJp
bmcodXNlckFnZW50UmVmKSk7CiB9CiAKK3ZvaWQgV0tQYWdlU2V0VXNlckNvbnRlbnRFeHRlbnNp
b25zRW5hYmxlZChXS1BhZ2VSZWYgcGFnZVJlZiwgYm9vbCBlbmFibGVkKQoreworICAgIHRvSW1w
bChwYWdlUmVmKS0+c2V0VXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZChlbmFibGVkKTsKK30K
KwogYm9vbCBXS1BhZ2VTdXBwb3J0c1RleHRFbmNvZGluZyhXS1BhZ2VSZWYgcGFnZVJlZikKIHsK
ICAgICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT5zdXBwb3J0c1RleHRFbmNvZGluZygpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaAkocmV2aXNpb24gMTg1NzE1
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjMsNiArMTIzLDggQEAgV0tfRVhQT1JUIHZvaWQgV0tQYWdlU2V0QXBwbGljYXRp
b25OYW1lRgogV0tfRVhQT1JUIFdLU3RyaW5nUmVmIFdLUGFnZUNvcHlDdXN0b21Vc2VyQWdlbnQo
V0tQYWdlUmVmIHBhZ2UpOwogV0tfRVhQT1JUIHZvaWQgV0tQYWdlU2V0Q3VzdG9tVXNlckFnZW50
KFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB1c2VyQWdlbnQpOwogCitXS19FWFBPUlQgdm9p
ZCBXS1BhZ2VTZXRVc2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKFdLUGFnZVJlZiwgYm9vbCk7
CisgICAgCiBXS19FWFBPUlQgYm9vbCBXS1BhZ2VTdXBwb3J0c1RleHRFbmNvZGluZyhXS1BhZ2VS
ZWYgcGFnZSk7CiBXS19FWFBPUlQgV0tTdHJpbmdSZWYgV0tQYWdlQ29weUN1c3RvbVRleHRFbmNv
ZGluZ05hbWUoV0tQYWdlUmVmIHBhZ2UpOwogV0tfRVhQT1JUIHZvaWQgV0tQYWdlU2V0Q3VzdG9t
VGV4dEVuY29kaW5nTmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgZW5jb2RpbmdOYW1l
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3Lm1tCShyZXZpc2lvbiAxODU3MTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTkwMCw3ICsxOTAwLDE2IEBA
IC0gKHZvaWQpX3NldEFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudDoKIC0gKE5TU3RyaW5nICop
X2N1c3RvbVVzZXJBZ2VudAogewogICAgIHJldHVybiBzZWxmLmN1c3RvbVVzZXJBZ2VudDsKK30K
IAorLSAodm9pZClfc2V0VXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZDooQk9PTCl1c2VyQ29u
dGVudEV4dGVuc2lvbnNFbmFibGVkCit7CisgICAgX3BhZ2UtPnNldFVzZXJDb250ZW50RXh0ZW5z
aW9uc0VuYWJsZWQodXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZCk7Cit9CisKKy0gKEJPT0wp
X3VzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQKK3sKKyAgICByZXR1cm4gX3BhZ2UtPnVzZXJD
b250ZW50RXh0ZW5zaW9uc0VuYWJsZWQoKTsKIH0KIAogLSAodm9pZClfc2V0Q3VzdG9tVXNlckFn
ZW50OihOU1N0cmluZyAqKWN1c3RvbVVzZXJBZ2VudApJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9u
IDE4NTcxNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw4IEBAIFdLX0VYVEVSTiBOU1N0
cmluZyAqIGNvbnN0IF9XS1Nob3VsZE9wZW4KIEBwcm9wZXJ0eSAoY29weSwgc2V0dGVyPV9zZXRB
cHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQ6KSBOU1N0cmluZyAqX2FwcGxpY2F0aW9uTmFtZUZv
clVzZXJBZ2VudDsKIEBwcm9wZXJ0eSAoY29weSwgc2V0dGVyPV9zZXRDdXN0b21Vc2VyQWdlbnQ6
KSBOU1N0cmluZyAqX2N1c3RvbVVzZXJBZ2VudDsKIAorQHByb3BlcnR5IChub25hdG9taWMsIHNl
dHRlcj1fc2V0VXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZDopIEJPT0wgX3VzZXJDb250ZW50
RXh0ZW5zaW9uc0VuYWJsZWQ7CisKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgcGlk
X3QgX3dlYlByb2Nlc3NJZGVudGlmaWVyOwogCiBAcHJvcGVydHkgKG5vbmF0b21pYywgZ2V0dGVy
PV9pc0VkaXRhYmxlLCBzZXR0ZXI9X3NldEVkaXRhYmxlOikgQk9PTCBfZWRpdGFibGUgV0tfQVZB
SUxBQkxFKFdLX01BQ19UQkEsIFdLX0lPU19UQkEpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTg1NzE1KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MTUsNiArNTE1LDggQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNv
bnN0IAogCiAgICAgaWYgKHBhcmFtZXRlcnMudmlld1NjYWxlRmFjdG9yICE9IDEpCiAgICAgICAg
IHNjYWxlVmlldyhwYXJhbWV0ZXJzLnZpZXdTY2FsZUZhY3Rvcik7CisKKyAgICBtX3BhZ2UtPnNl
dFVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQocGFyYW1ldGVycy51c2VyQ29udGVudEV4dGVu
c2lvbnNFbmFibGVkKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpyZWluaXRpYWxpemVXZWJQYWdlKGNv
bnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCkBAIC01MDIyLDQgKzUw
MjQsMTIgQEAgdm9pZCBXZWJQYWdlOjpzZXRTaG91bGRTY2FsZVZpZXdUb0ZpdERvYwogICAgIG1f
ZHJhd2luZ0FyZWEtPnNldFNob3VsZFNjYWxlVmlld1RvRml0RG9jdW1lbnQoc2hvdWxkU2NhbGVW
aWV3VG9GaXREb2N1bWVudCk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6c2V0VXNlckNvbnRlbnRFeHRl
bnNpb25zRW5hYmxlZChib29sIHVzZXJDb250ZW50RXh0ZW5zaW9uc0VuYWJsZWQpCit7CisgICAg
aWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFnZS0+c2V0VXNlckNvbnRl
bnRFeHRlbnNpb25zRW5hYmxlZCh1c2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDE4NTcxNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMzgsNiArMTEz
OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhcldoZWVsRXZlbnRUZXN0VHJpZ2dlcigpOwog
CiAgICAgdm9pZCBzZXRTaG91bGRTY2FsZVZpZXdUb0ZpdERvY3VtZW50KGJvb2wpOworICAgIHZv
aWQgc2V0VXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZChib29sKTsKIAogICAgIHVpbnQ2NF90
IG1fcGFnZUlEOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTg1NzE1KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTQzNCw0ICs0MzQsNSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2Vp
dmVyIHsKIAogICAgIENsZWFyV2hlZWxFdmVudFRlc3RUcmlnZ2VyKCkKICAgICBTZXRTaG91bGRT
Y2FsZVZpZXdUb0ZpdERvY3VtZW50KGJvb2wgc2hvdWxkU2NhbGVWaWV3VG9GaXREb2N1bWVudCkK
KyAgICBTZXRVc2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKGJvb2wgdXNlckNvbnRlbnRFeHRl
bnNpb25zRW5hYmxlZCkKIH0K
</data>
<flag name="review"
          id="280302"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>