<?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>53329</bug_id>
          
          <creation_ts>2011-01-28 13:38:12 -0800</creation_ts>
          <short_desc>Support find bouncy in WebKit2 on Windows</short_desc>
          <delta_ts>2011-01-31 08:00:12 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeff Miller">jeffm</reporter>
          <assigned_to name="Jeff Miller">jeffm</assigned_to>
          <cc>andersca</cc>
    
    <cc>aroben</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>341698</commentid>
    <comment_count>0</comment_count>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-01-28 13:38:12 -0800</bug_when>
    <thetext>Support find bouncy in WebKit2 on Windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341701</commentid>
    <comment_count>1</comment_count>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-01-28 13:41:17 -0800</bug_when>
    <thetext>The Mac implements the find bouncy inside of WebKit in the UI process for WebKit2, but we need to do this inside Safari for WebKit2 on Windows.

Related bugs:
https://bugs.webkit.org/show_bug.cgi?id=47612
https://bugs.webkit.org/show_bug.cgi?id=47635
https://bugs.webkit.org/show_bug.cgi?id=48490</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341708</commentid>
    <comment_count>2</comment_count>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-01-28 13:51:14 -0800</bug_when>
    <thetext>OpenSource side of &lt;rdar://problem/8565843&gt; WebKit2: getting the find bouncy to work on Windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341714</commentid>
    <comment_count>3</comment_count>
      <attachid>80493</attachid>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-01-28 14:01:16 -0800</bug_when>
    <thetext>Created attachment 80493
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341757</commentid>
    <comment_count>4</comment_count>
      <attachid>80493</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-01-28 14:51:58 -0800</bug_when>
    <thetext>Comment on attachment 80493
Patch

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

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:1025
&gt; +    if (m_findIndicatorCallback) {

You can use an early return here instead.

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:1032
&gt; +            HDC hdc = CreateCompatibleDC(0);

In WebKit2 we usually prefix Win32 functions with ::

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:1033
&gt; +            int w = contentImage-&gt;bounds().width();

I think &apos;width&apos; would be a better name than &apos;w&apos;.

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:1034
&gt; +            int h = contentImage-&gt;bounds().height();

&apos;h&apos; -&gt; &apos;height&apos;

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:1035
&gt; +            BitmapInfo bmp = BitmapInfo::create(contentImage-&gt;size());

I think &apos;bitmap&apos; or &apos;bitmapInfo&apos; would be a better name for this variable.

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:1037
&gt; +            hbmp = CreateDIBSection(0, &amp;bmp, DIB_RGB_COLORS, static_cast&lt;void**&gt;(&amp;bits), 0, 0);

Is this static_cast really needed?

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:1039
&gt; +            CGContextRef context = CGBitmapContextCreate(static_cast&lt;void*&gt;(bits), w, h,

You should use a RetainPtr here, then you don&apos;t need the release:

RetainPtr context&lt;CGContextRef&gt;(AdoptCF, CGBitmapContextCreate(...

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:1041
&gt; +            CGContextSaveGState(context);

I don&apos;t think you need to save the state here.

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:1043
&gt; +            GraphicsContext gc(context);

&apos;gc&apos; -&gt; &apos;graphicsContext&apos;

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:1045
&gt; +            contentImage-&gt;paint(gc, IntPoint(0, 0), contentImage-&gt;bounds());

You can just use the IntPoint() constructor here.

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:1048
&gt; +            SelectObject(hdc, hbmpOld);

::SelectObject.

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:1049
&gt; +            DeleteDC(hdc);

::DeleteDC.

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:1053
&gt; +        RECT selectionRect = {selectionIntRect.x(), selectionIntRect.y(), selectionIntRect.right(), selectionIntRect.bottom()};

I think IntRect has a RECT conversion operator, so you can just pass selectionIntRect to the callback.

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:1055
&gt; +    }

Does this assume ownership of the HBITMAP? If so, that should probably be documented. If not, you&apos;re leaking it :)

&gt; Source/WebKit2/UIProcess/win/WebView.cpp:1064
&gt; +WKViewFindIndicatorCallback WebView::getFindIndicatorCallback(void** context)

Do we really need a getter for the callback?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341781</commentid>
    <comment_count>5</comment_count>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-01-28 15:17:00 -0800</bug_when>
    <thetext>&gt;&gt; Source/WebKit2/UIProcess/win/WebView.cpp:1064
&gt;&gt; +WKViewFindIndicatorCallback WebView::getFindIndicatorCallback(void** context)

&gt;Do we really need a getter for the callback?

Unfortunately, yes, because WK::View in Safari needs to manage a separate context from the real callback context used by the client, and we can&apos;t store state in WK::View.  It doesn&apos;t actually need to retrieve the current callback function, just the context, but I figured the call should be symmetrical with setFindIndicatorCallback.

Updated patch with fixes for your other comments is coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>341784</commentid>
    <comment_count>6</comment_count>
      <attachid>80506</attachid>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-01-28 15:19:17 -0800</bug_when>
    <thetext>Created attachment 80506
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342038</commentid>
    <comment_count>7</comment_count>
      <attachid>80506</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-29 00:27:40 -0800</bug_when>
    <thetext>Comment on attachment 80506
Patch

Clearing flags on attachment: 80506

Committed r77054: &lt;http://trac.webkit.org/changeset/77054&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342039</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-29 00:27:43 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342569</commentid>
    <comment_count>9</comment_count>
      <attachid>80493</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-01-31 07:38:13 -0800</bug_when>
    <thetext>Comment on attachment 80493
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/win/WebView.cpp:1037
&gt;&gt; +            hbmp = CreateDIBSection(0, &amp;bmp, DIB_RGB_COLORS, static_cast&lt;void**&gt;(&amp;bits), 0, 0);
&gt; 
&gt; Is this static_cast really needed?

Aren&apos;t we leaking this HBITMAP? Or maybe the callback is supposed to take care of deleting it? If the latter is true, I think a comment is warranted. (I think you can also declare it right here instead of declaring it up above and assigning into it here.)

&gt;&gt; Source/WebKit2/UIProcess/win/WebView.cpp:1049
&gt;&gt; +            DeleteDC(hdc);
&gt; 
&gt; ::DeleteDC.

Or you could use an OwnPtr&lt;HDC&gt;, and ::DeleteDC will be called automatically for you when it goes out of scope. (OwnPtr&lt;HBITMAP&gt; works, too, if you do in fact need to delete it.)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80493</attachid>
            <date>2011-01-28 14:01:16 -0800</date>
            <delta_ts>2011-01-31 07:38:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53329-20110128140113.patch</filename>
            <type>text/plain</type>
            <size>27647</size>
            <attacher name="Jeff Miller">jeffm</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2OTgzKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMDEtMjggIEplZmYgTWls
bGVyICA8amVmZm1AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFN1cHBvcnQgZmluZCBib3VuY3kgaW4gV2ViS2l0MiBvbiBXaW5kb3dz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzMyOQor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vODU2NTg0Mz4KKyAgICAgICAgVGhlIE1hYyBpbXBsZW1l
bnRzIHRoZSBmaW5kIGJvdW5jeSBpbnNpZGUgb2YgV2ViS2l0IGluIHRoZSBVSSBwcm9jZXNzIGZv
ciBXZWJLaXQyLCBidXQgd2UgbmVlZCB0byBkbyB0aGlzIGluc2lkZSBTYWZhcmkgZm9yIFdlYktp
dDIgb24gV2luZG93cy4KKyAgICAgICAgQWRkIGluZnJhc3RydWN0dXJlIHRvIGNhbGwgYmFjayBp
bnRvIHRoZSBhcHAgd2hlbiB0aGUgZmluZCBpbmRpY2F0b3IgY2hhbmdlcy4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQy93aW4vV0tWaWV3LmNwcDogQ2xlYW51cCBzb21lIGNvZGUgc3R5bGUg
dmlvbGF0aW9ucy4KKyAgICAgICAgKFdLVmlld1NldEZpbmRJbmRpY2F0b3JDYWxsYmFjayk6IEFk
ZGVkLgorICAgICAgICAoV0tWaWV3R2V0RmluZEluZGljYXRvckNhbGxiYWNrKTogQWRkZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9DL3dpbi9XS1ZpZXcuaDogQ2xlYW51cCBzb21lIGNvZGUg
c3R5bGUgdmlvbGF0aW9ucy4KKyAgICAgICAgKiBVSVByb2Nlc3MvRmluZEluZGljYXRvci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkZpbmRJbmRpY2F0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OkZpbmRJbmRpY2F0b3I6OkZpbmRJbmRpY2F0b3IpOgorICAgICAgICAoV2ViS2l0OjpGaW5k
SW5kaWNhdG9yOjpmcmFtZVJlY3QpOgorICAgICAgICAoV2ViS2l0OjpGaW5kSW5kaWNhdG9yOjpk
cmF3KToKKyAgICAgICAgUmVuYW1lIG1fc2VsZWN0aW9uUmVjdCB0byBtX3NlbGVjdGlvblJlY3RJ
bldpbmRvd0Nvb3JkaW5hdGVzIGFuZCBtX3RleHRSZWN0cyB0byBtX3RleHRSZWN0c0luU2VsZWN0
aW9uUmVjdENvb3JkaW5hdGVzIChhbG9uZyB3aXRoIHNpbWlsYXJseSBuYW1lZCBsb2NhbCB2YXJp
YWJsZXMpIHRvIGJlIG1vcmUgZXhwbGljdCBhYm91dCB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0uCisg
ICAgICAgICogVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuaDoKKyAgICAgICAgKFdlYktpdDo6Rmlu
ZEluZGljYXRvcjo6c2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6RmluZEluZGljYXRvcjo6dGV4dFJlY3RzKTogUmVuYW1lIG1fdGV4dFJl
Y3RzIHRvIG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMuCisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0RmluZEluZGljYXRvcik6IFJlbmFtZSBzZWxlY3Rpb25SZWN0IHRvIHNlbGVjdGlvblJl
Y3RJbldpbmRvd0Nvb3JkaW5hdGVzIGFuZCB0ZXh0UmVjdHMgdG8gdGV4dFJlY3RzSW5TZWxlY3Rp
b25SZWN0Q29vcmRpbmF0ZXMgdG8gYmUgbW9yZSBleHBsaWN0IGFib3V0IHRoZSBjb29yZGluYXRl
IHN5c3RlbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6IERpdHRvLgorICAg
ICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXc6OldlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzZXRGaW5kSW5kaWNhdG9y
KTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldEZpbmRJbmRpY2F0b3JDYWxs
YmFjayk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpnZXRGaW5kSW5kaWNhdG9y
Q2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuaDoKKwog
MjAxMS0wMS0yOCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRmlu
ZEluZGljYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Zp
bmRJbmRpY2F0b3IuY3BwCShyZXZpc2lvbiA3Njk4MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9GaW5kSW5kaWNhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTggKzc3LDE4IEBA
IHN0YXRpYyBjb25zdCBpbnQgZ3JhZGllbnRMaWdodEFscGhhID0gMjUKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLVBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4gRmluZEluZGljYXRvcjo6Y3JlYXRl
KGNvbnN0IEZsb2F0UmVjdCYgc2VsZWN0aW9uUmVjdCwgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
IHRleHRSZWN0cywgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGNvbnRlbnRJbWFnZUhhbmRs
ZSkKK1Bhc3NSZWZQdHI8RmluZEluZGljYXRvcj4gRmluZEluZGljYXRvcjo6Y3JlYXRlKGNvbnN0
IEZsb2F0UmVjdCYgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywgY29uc3Qg
U2hhcmVkTWVtb3J5OjpIYW5kbGUmIGNvbnRlbnRJbWFnZUhhbmRsZSkKIHsKLSAgICBSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBjb250ZW50SW1hZ2UgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShl
bmNsb3NpbmdJbnRSZWN0KHNlbGVjdGlvblJlY3QpLnNpemUoKSwgY29udGVudEltYWdlSGFuZGxl
KTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjb250ZW50SW1hZ2UgPSBTaGFyZWFibGVC
aXRtYXA6OmNyZWF0ZShlbmNsb3NpbmdJbnRSZWN0KHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzKS5zaXplKCksIGNvbnRlbnRJbWFnZUhhbmRsZSk7CiAgICAgaWYgKCFjb250ZW50SW1h
Z2UpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaW5kSW5k
aWNhdG9yKHNlbGVjdGlvblJlY3QsIHRleHRSZWN0cywgY29udGVudEltYWdlLnJlbGVhc2UoKSkp
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmluZEluZGljYXRvcihzZWxlY3Rpb25SZWN0SW5X
aW5kb3dDb29yZGluYXRlcywgdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGNv
bnRlbnRJbWFnZS5yZWxlYXNlKCkpKTsKIH0KIAotRmluZEluZGljYXRvcjo6RmluZEluZGljYXRv
cihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNlbGVjdGlvblJlY3QsIGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHMsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiBjb250ZW50SW1hZ2UpCi0gICAgOiBtX3NlbGVjdGlvblJlY3Qoc2VsZWN0aW9uUmVjdCkKLSAg
ICAsIG1fdGV4dFJlY3RzKHRleHRSZWN0cykKK0ZpbmRJbmRpY2F0b3I6OkZpbmRJbmRpY2F0b3Io
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRl
cywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIHRleHRSZWN0c0luU2VsZWN0aW9u
UmVjdENvb3JkaW5hdGVzLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29udGVudEltYWdl
KQorICAgIDogbV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcyhzZWxlY3Rpb25SZWN0
SW5XaW5kb3dDb29yZGluYXRlcykKKyAgICAsIG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29v
cmRpbmF0ZXModGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMpCiAgICAgLCBtX2Nv
bnRlbnRJbWFnZShjb250ZW50SW1hZ2UpCiB7CiB9CkBAIC0xMDgsOSArMTA4LDkgQEAgc3RhdGlj
IEZsb2F0UmVjdCBpbmZsYXRlUmVjdChjb25zdCBGbG9hdAogCiBGbG9hdFJlY3QgRmluZEluZGlj
YXRvcjo6ZnJhbWVSZWN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0KG1fc2VsZWN0
aW9uUmVjdC54KCkgLSBsZWZ0Qm9yZGVyVGhpY2tuZXNzLCBtX3NlbGVjdGlvblJlY3QueSgpIC0g
dG9wQm9yZGVyVGhpY2tuZXNzLAotICAgICAgICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0
LndpZHRoKCkgKyByaWdodEJvcmRlclRoaWNrbmVzcyArIGxlZnRCb3JkZXJUaGlja25lc3MsCi0g
ICAgICAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3QuaGVpZ2h0KCkgKyB0b3BCb3JkZXJU
aGlja25lc3MgKyBib3R0b21Cb3JkZXJUaGlja25lc3MpOworICAgIHJldHVybiBGbG9hdFJlY3Qo
bV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcy54KCkgLSBsZWZ0Qm9yZGVyVGhpY2tu
ZXNzLCBtX3NlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLnkoKSAtIHRvcEJvcmRlclRo
aWNrbmVzcywKKyAgICAgICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29v
cmRpbmF0ZXMud2lkdGgoKSArIHJpZ2h0Qm9yZGVyVGhpY2tuZXNzICsgbGVmdEJvcmRlclRoaWNr
bmVzcywKKyAgICAgICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRp
bmF0ZXMuaGVpZ2h0KCkgKyB0b3BCb3JkZXJUaGlja25lc3MgKyBib3R0b21Cb3JkZXJUaGlja25l
c3MpOwogfQogCiBzdGF0aWMgQ29sb3IgbGlnaHRCb3JkZXJDb2xvcigpCkBAIC0xNDMsOCArMTQz
LDggQEAgc3RhdGljIFBhdGggcGF0aFdpdGhSb3VuZGVkUmVjdChjb25zdCBGbAogICAgIAogdm9p
ZCBGaW5kSW5kaWNhdG9yOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBj
b25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3RleHRSZWN0cy5zaXplKCk7ICsraSkgewotICAgICAgICBGbG9hdFJlY3QgdGV4dFJlY3QgPSBt
X3RleHRSZWN0c1tpXTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGV4dFJlY3RzSW5T
ZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgRmxvYXRSZWN0
IHRleHRSZWN0ID0gbV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlc1tpXTsKICAg
ICAgICAgdGV4dFJlY3QubW92ZShsZWZ0Qm9yZGVyVGhpY2tuZXNzLCB0b3BCb3JkZXJUaGlja25l
c3MpOwogCiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zYXZlKCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvRmluZEluZGljYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9GaW5kSW5kaWNhdG9yLmgJKHJldmlzaW9uIDc2OTgxKQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
MTIgKzQyLDEzIEBAIGNsYXNzIFNoYXJlYWJsZUJpdG1hcDsKIAogY2xhc3MgRmluZEluZGljYXRv
ciA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbmRJbmRpY2F0b3I+IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiBzZWxlY3Rpb25SZWN0LCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYgdGV4
dFJlY3RzLCBjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgY29udGVudEltYWdlSGFuZGxlKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiBjcmVhdGUoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5h
dGVzLCBjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgY29udGVudEltYWdlSGFuZGxlKTsKICAg
ICB+RmluZEluZGljYXRvcigpOwogCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHNlbGVjdGlvblJl
Y3RJbldpbmRvd0Nvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25SZWN0SW5X
aW5kb3dDb29yZGluYXRlczsgfQogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZVJlY3QoKSBj
b25zdDsKIAotICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHMo
KSBjb25zdCB7IHJldHVybiBtX3RleHRSZWN0czsgfQorICAgIGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHMoKSBjb25zdCB7IHJldHVybiBtX3RleHRSZWN0c0luU2Vs
ZWN0aW9uUmVjdENvb3JkaW5hdGVzOyB9CiAKICAgICBTaGFyZWFibGVCaXRtYXAqIGNvbnRlbnRJ
bWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudEltYWdlLmdldCgpOyB9CiAKQEAgLTU2LDgg
KzU3LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGaW5kSW5kaWNhdG9yKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgc2VsZWN0aW9uUmVjdCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0
UmVjdD4mIHRleHRSZWN0cywgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNvbnRlbnRJbWFn
ZSk7CiAKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV9zZWxlY3Rpb25SZWN0OwotICAgIFZlY3Rv
cjxXZWJDb3JlOjpGbG9hdFJlY3Q+IG1fdGV4dFJlY3RzOworICAgIFdlYkNvcmU6OkZsb2F0UmVj
dCBtX3NlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzOworICAgIFZlY3RvcjxXZWJDb3Jl
OjpGbG9hdFJlY3Q+IG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXM7CiAgICAg
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9jb250ZW50SW1hZ2U7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gNzY5ODEpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTgzNCw5ICsxODM0LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvdW50U3RyaW5n
TWF0Y2hlcwogICAgIG1fZmluZENsaWVudC5kaWRDb3VudFN0cmluZ01hdGNoZXModGhpcywgc3Ry
aW5nLCBtYXRjaENvdW50KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNldEZpbmRJbmRpY2F0
b3IoY29uc3QgRmxvYXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYgdGV4dFJlY3RzLCBjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgY29udGVudEltYWdlSGFu
ZGxlLCBib29sIGZhZGVPdXQpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0RmluZEluZGljYXRvcihj
b25zdCBGbG9hdFJlY3QmIHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLCBjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYgdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGNv
bnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBjb250ZW50SW1hZ2VIYW5kbGUsIGJvb2wgZmFkZU91
dCkKIHsKLSAgICBSZWZQdHI8RmluZEluZGljYXRvcj4gZmluZEluZGljYXRvciA9IEZpbmRJbmRp
Y2F0b3I6OmNyZWF0ZShzZWxlY3Rpb25SZWN0LCB0ZXh0UmVjdHMsIGNvbnRlbnRJbWFnZUhhbmRs
ZSk7CisgICAgUmVmUHRyPEZpbmRJbmRpY2F0b3I+IGZpbmRJbmRpY2F0b3IgPSBGaW5kSW5kaWNh
dG9yOjpjcmVhdGUoc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIHRleHRSZWN0c0lu
U2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBjb250ZW50SW1hZ2VIYW5kbGUpOwogICAgIG1fcGFn
ZUNsaWVudC0+c2V0RmluZEluZGljYXRvcihmaW5kSW5kaWNhdG9yLnJlbGVhc2UoKSwgZmFkZU91
dCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJl
dmlzaW9uIDc2OTgxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00ODgsNyArNDg4LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICAv
LyBGaW5kLgogICAgIHZvaWQgZGlkQ291bnRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYsIHVp
bnQzMl90IG1hdGNoQ291bnQpOwotICAgIHZvaWQgc2V0RmluZEluZGljYXRvcihjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIHNlbGVjdGlvblJlY3QsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9h
dFJlY3Q+JiB0ZXh0UmVjdHMsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBjb250ZW50SW1h
Z2VIYW5kbGUsIGJvb2wgZmFkZU91dCk7CisgICAgdm9pZCBzZXRGaW5kSW5kaWNhdG9yKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RD
b29yZGluYXRlcywgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGNvbnRlbnRJbWFnZUhhbmRs
ZSwgYm9vbCBmYWRlT3V0KTsKICAgICB2b2lkIGRpZEZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwg
dWludDMyX3QgbWF0Y2hDb3VudCk7CiAgICAgdm9pZCBkaWRGYWlsVG9GaW5kU3RyaW5nKGNvbnN0
IFN0cmluZyYpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dL
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dp
bi9XS1ZpZXcuY3BwCShyZXZpc2lvbiA3Njk4MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy93aW4vV0tWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsMyArNzEsMTMgQEAg
dm9pZCBXS1ZpZXdTZXRJbml0aWFsRm9jdXMoV0tWaWV3UmVmIHZpZQogewogICAgIHRvSW1wbCh2
aWV3UmVmKS0+c2V0SW5pdGlhbEZvY3VzKGZvcndhcmQpOwogfQorCit2b2lkIFdLVmlld1NldEZp
bmRJbmRpY2F0b3JDYWxsYmFjayhXS1ZpZXdSZWYgdmlld1JlZiwgV0tWaWV3RmluZEluZGljYXRv
ckNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiBjb250ZXh0KQoreworICAgIHRvSW1wbCh2aWV3UmVm
KS0+c2V0RmluZEluZGljYXRvckNhbGxiYWNrKGNhbGxiYWNrLCBjb250ZXh0KTsKK30KKworV0tW
aWV3RmluZEluZGljYXRvckNhbGxiYWNrIFdLVmlld0dldEZpbmRJbmRpY2F0b3JDYWxsYmFjayhX
S1ZpZXdSZWYgdmlld1JlZiwgdm9pZCoqIGNvbnRleHQpCit7ICAgIAorICAgIHJldHVybiB0b0lt
cGwodmlld1JlZiktPmdldEZpbmRJbmRpY2F0b3JDYWxsYmFjayhjb250ZXh0KTsKK30KSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tWaWV3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS1ZpZXcuaAkocmV2aXNpb24g
NzY5ODEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLVmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwxMCBAQCBXS19FWFBPUlQgdm9pZCBXS1ZpZXdXaW5k
b3dBbmNlc3RyeURpZENoCiBXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRJc0luV2luZG93KFdLVmll
d1JlZiB2aWV3LCBib29sIGlzSW5XaW5kb3cpOwogV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0SW5p
dGlhbEZvY3VzKFdLVmlld1JlZiB2aWV3LCBib29sIGZvcndhcmQpOwogCit0eXBlZGVmIHZvaWQg
KCpXS1ZpZXdGaW5kSW5kaWNhdG9yQ2FsbGJhY2spKFdLVmlld1JlZiwgSEJJVE1BUCBzZWxlY3Rp
b25CaXRtYXAsIFJFQ1Qgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGJvb2wgZmFk
ZW91dCwgdm9pZCopOworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0RmluZEluZGljYXRvckNhbGxi
YWNrKFdLVmlld1JlZiB2aWV3LCBXS1ZpZXdGaW5kSW5kaWNhdG9yQ2FsbGJhY2sgY2FsbGJhY2ss
IHZvaWQqIGNvbnRleHQpOworV0tfRVhQT1JUIFdLVmlld0ZpbmRJbmRpY2F0b3JDYWxsYmFjayBX
S1ZpZXdHZXRGaW5kSW5kaWNhdG9yQ2FsbGJhY2soV0tWaWV3UmVmIHZpZXcsIHZvaWQqKiBjb250
ZXh0KTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gNzY5ODEpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4
ICszMCw5IEBACiAjaW5jbHVkZSAiRmluZEluZGljYXRvci5oIgogI2luY2x1ZGUgIkxheWVyQmFj
a2VkRHJhd2luZ0FyZWFQcm94eS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJS
dW5Mb29wLmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUg
IlJ1bkxvb3AuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0
LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eVdpbi5oIgogI2luY2x1ZGUgIldlYkVk
aXRDb21tYW5kUHJveHkuaCIKQEAgLTM5LDggKzQwLDEwIEBACiAjaW5jbHVkZSAiV2ViUGFnZVBy
b3h5LmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlXaW4uaCIKICNpbmNsdWRlIDxDb21t
Y3RybC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQml0bWFwSW5mby5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvQ3Vyc29yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2Vi
Q29yZUluc3RhbmNlSGFuZGxlLmg+CkBAIC00OCwxNyArNTEsMTcgQEAKICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEltZSB7Ci0gICAgLy8gV2UgbmVlZCB0aGVz
ZSBmdW5jdGlvbnMgaW4gYSBzZXBhcmF0ZSBuYW1lc3BhY2UsIGJlY2F1c2UgaW4gdGhlIGdsb2Jh
bCBuYW1lc3BhY2UgdGhleSBjb25mbGljdAotICAgIC8vIHdpdGggdGhlIGRlZmluaXRpb25zIGlu
IGltbS5oIG9ubHkgYnkgdGhlIHR5cGUgbW9kaWZpZXIgKHRoZSBtYWNybyBkZWZpbmVzIHRoZW0g
YXMgc3RhdGljKSBhbmQKLSAgICAvLyBpbW0uaCBpcyBpbmNsdWRlZCBieSB3aW5kb3dzLmgKLSAg
ICBTT0ZUX0xJTktfTElCUkFSWShJTU0zMikKLSAgICBTT0ZUX0xJTksoSU1NMzIsIEltbUdldENv
bnRleHQsIEhJTUMsIFdJTkFQSSwgKEhXTkQgaHduZCksIChod25kKSkKLSAgICBTT0ZUX0xJTkso
SU1NMzIsIEltbVJlbGVhc2VDb250ZXh0LCBCT09MLCBXSU5BUEksIChIV05EIGhXbmQsIEhJTUMg
aElNQyksIChoV25kLCBoSU1DKSkKLSAgICBTT0ZUX0xJTksoSU1NMzIsIEltbUdldENvbXBvc2l0
aW9uU3RyaW5nVywgTE9ORywgV0lOQVBJLCAoSElNQyBoSU1DLCBEV09SRCBkd0luZGV4LCBMUFZP
SUQgbHBCdWYsIERXT1JEIGR3QnVmTGVuKSwgKGhJTUMsIGR3SW5kZXgsIGxwQnVmLCBkd0J1Zkxl
bikpCi0gICAgU09GVF9MSU5LKElNTTMyLCBJbW1TZXRDYW5kaWRhdGVXaW5kb3csIEJPT0wsIFdJ
TkFQSSwgKEhJTUMgaElNQywgTFBDQU5ESURBVEVGT1JNIGxwQ2FuZGlkYXRlKSwgKGhJTUMsIGxw
Q2FuZGlkYXRlKSkKLSAgICBTT0ZUX0xJTksoSU1NMzIsIEltbVNldE9wZW5TdGF0dXMsIEJPT0ws
IFdJTkFQSSwgKEhJTUMgaElNQywgQk9PTCBmT3BlbiksIChoSU1DLCBmT3BlbikpCi0gICAgU09G
VF9MSU5LKElNTTMyLCBJbW1Ob3RpZnlJTUUsIEJPT0wsIFdJTkFQSSwgKEhJTUMgaElNQywgRFdP
UkQgZHdBY3Rpb24sIERXT1JEIGR3SW5kZXgsIERXT1JEIGR3VmFsdWUpLCAoaElNQywgZHdBY3Rp
b24sIGR3SW5kZXgsIGR3VmFsdWUpKQotICAgIFNPRlRfTElOSyhJTU0zMiwgSW1tQXNzb2NpYXRl
Q29udGV4dEV4LCBCT09MLCBXSU5BUEksIChIV05EIGhXbmQsIEhJTUMgaElNQywgRFdPUkQgZHdG
bGFncyksIChoV25kLCBoSU1DLCBkd0ZsYWdzKSkKKy8vIFdlIG5lZWQgdGhlc2UgZnVuY3Rpb25z
IGluIGEgc2VwYXJhdGUgbmFtZXNwYWNlLCBiZWNhdXNlIGluIHRoZSBnbG9iYWwgbmFtZXNwYWNl
IHRoZXkgY29uZmxpY3QKKy8vIHdpdGggdGhlIGRlZmluaXRpb25zIGluIGltbS5oIG9ubHkgYnkg
dGhlIHR5cGUgbW9kaWZpZXIgKHRoZSBtYWNybyBkZWZpbmVzIHRoZW0gYXMgc3RhdGljKSBhbmQK
Ky8vIGltbS5oIGlzIGluY2x1ZGVkIGJ5IHdpbmRvd3MuaAorU09GVF9MSU5LX0xJQlJBUlkoSU1N
MzIpCitTT0ZUX0xJTksoSU1NMzIsIEltbUdldENvbnRleHQsIEhJTUMsIFdJTkFQSSwgKEhXTkQg
aHduZCksIChod25kKSkKK1NPRlRfTElOSyhJTU0zMiwgSW1tUmVsZWFzZUNvbnRleHQsIEJPT0ws
IFdJTkFQSSwgKEhXTkQgaFduZCwgSElNQyBoSU1DKSwgKGhXbmQsIGhJTUMpKQorU09GVF9MSU5L
KElNTTMyLCBJbW1HZXRDb21wb3NpdGlvblN0cmluZ1csIExPTkcsIFdJTkFQSSwgKEhJTUMgaElN
QywgRFdPUkQgZHdJbmRleCwgTFBWT0lEIGxwQnVmLCBEV09SRCBkd0J1ZkxlbiksIChoSU1DLCBk
d0luZGV4LCBscEJ1ZiwgZHdCdWZMZW4pKQorU09GVF9MSU5LKElNTTMyLCBJbW1TZXRDYW5kaWRh
dGVXaW5kb3csIEJPT0wsIFdJTkFQSSwgKEhJTUMgaElNQywgTFBDQU5ESURBVEVGT1JNIGxwQ2Fu
ZGlkYXRlKSwgKGhJTUMsIGxwQ2FuZGlkYXRlKSkKK1NPRlRfTElOSyhJTU0zMiwgSW1tU2V0T3Bl
blN0YXR1cywgQk9PTCwgV0lOQVBJLCAoSElNQyBoSU1DLCBCT09MIGZPcGVuKSwgKGhJTUMsIGZP
cGVuKSkKK1NPRlRfTElOSyhJTU0zMiwgSW1tTm90aWZ5SU1FLCBCT09MLCBXSU5BUEksIChISU1D
IGhJTUMsIERXT1JEIGR3QWN0aW9uLCBEV09SRCBkd0luZGV4LCBEV09SRCBkd1ZhbHVlKSwgKGhJ
TUMsIGR3QWN0aW9uLCBkd0luZGV4LCBkd1ZhbHVlKSkKK1NPRlRfTElOSyhJTU0zMiwgSW1tQXNz
b2NpYXRlQ29udGV4dEV4LCBCT09MLCBXSU5BUEksIChIV05EIGhXbmQsIEhJTUMgaElNQywgRFdP
UkQgZHdGbGFncyksIChoV25kLCBoSU1DLCBkd0ZsYWdzKSkKIH07CiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwpAQCAtMTAxLDkzICsxMDQsOTMgQEAgTFJFU1VMVCBXZWJWaWV3Ojp3bmRQcm9j
KEhXTkQgaFduZCwgVUlOVAogICAgIGJvb2wgaGFuZGxlZCA9IHRydWU7CiAKICAgICBzd2l0Y2gg
KG1lc3NhZ2UpIHsKLSAgICAgICAgY2FzZSBXTV9DTE9TRToKLSAgICAgICAgICAgIG1fcGFnZS0+
dHJ5Q2xvc2UoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdNX0RFU1RST1k6
Ci0gICAgICAgICAgICBtX2lzQmVpbmdEZXN0cm95ZWQgPSB0cnVlOwotICAgICAgICAgICAgY2xv
c2UoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdNX0VSQVNFQktHTkQ6Ci0g
ICAgICAgICAgICBsUmVzdWx0ID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFdNX1BBSU5UOgotICAgICAgICAgICAgbFJlc3VsdCA9IG9uUGFpbnRFdmVudChoV25kLCBtZXNz
YWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBXTV9QUklOVENMSUVOVDoKLSAgICAgICAgICAgIGxSZXN1bHQgPSBvblByaW50Q2xp
ZW50RXZlbnQoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV01fTU9VU0VBQ1RJVkFURToKLSAgICAgICAgICAg
IHNldFdhc0FjdGl2YXRlZEJ5TW91c2VFdmVudCh0cnVlKTsKLSAgICAgICAgICAgIGhhbmRsZWQg
PSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdNX01PVVNFTU9WRToK
LSAgICAgICAgY2FzZSBXTV9MQlVUVE9ORE9XTjoKLSAgICAgICAgY2FzZSBXTV9NQlVUVE9ORE9X
TjoKLSAgICAgICAgY2FzZSBXTV9SQlVUVE9ORE9XTjoKLSAgICAgICAgY2FzZSBXTV9MQlVUVE9O
REJMQ0xLOgotICAgICAgICBjYXNlIFdNX01CVVRUT05EQkxDTEs6Ci0gICAgICAgIGNhc2UgV01f
UkJVVFRPTkRCTENMSzoKLSAgICAgICAgY2FzZSBXTV9MQlVUVE9OVVA6Ci0gICAgICAgIGNhc2Ug
V01fTUJVVFRPTlVQOgotICAgICAgICBjYXNlIFdNX1JCVVRUT05VUDoKLSAgICAgICAgY2FzZSBX
TV9NT1VTRUxFQVZFOgotICAgICAgICAgICAgbFJlc3VsdCA9IG9uTW91c2VFdmVudChoV25kLCBt
ZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBXTV9NT1VTRVdIRUVMOgotICAgICAgICBjYXNlIFdNX1ZJU1RBX01PVVNFSFdI
RUVMOgotICAgICAgICAgICAgbFJlc3VsdCA9IG9uV2hlZWxFdmVudChoV25kLCBtZXNzYWdlLCB3
UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBXTV9TWVNLRVlET1dOOgotICAgICAgICBjYXNlIFdNX0tFWURPV046Ci0gICAgICAgIGNhc2Ug
V01fU1lTQ0hBUjoKLSAgICAgICAgY2FzZSBXTV9DSEFSOgotICAgICAgICBjYXNlIFdNX1NZU0tF
WVVQOgotICAgICAgICBjYXNlIFdNX0tFWVVQOgotICAgICAgICAgICAgbFJlc3VsdCA9IG9uS2V5
RXZlbnQoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV01fU0laRToKLSAgICAgICAgICAgIGxSZXN1bHQgPSBv
blNpemVFdmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXTV9XSU5ET1dQT1NDSEFOR0VEOgotICAgICAg
ICAgICAgbFJlc3VsdCA9IG9uV2luZG93UG9zaXRpb25DaGFuZ2VkRXZlbnQoaFduZCwgbWVzc2Fn
ZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgV01fU0VURk9DVVM6Ci0gICAgICAgICAgICBsUmVzdWx0ID0gb25TZXRGb2N1c0V2ZW50
KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFdNX0tJTExGT0NVUzoKLSAgICAgICAgICAgIGxSZXN1bHQgPSBv
bktpbGxGb2N1c0V2ZW50KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdNX1RJTUVSOgotICAgICAgICAgICAg
bFJlc3VsdCA9IG9uVGltZXJFdmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFu
ZGxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXTV9TSE9XV0lORE9XOgot
ICAgICAgICAgICAgbFJlc3VsdCA9IG9uU2hvd1dpbmRvd0V2ZW50KGhXbmQsIG1lc3NhZ2UsIHdQ
YXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFdNX1NFVENVUlNPUjoKLSAgICAgICAgICAgIGxSZXN1bHQgPSBvblNldEN1cnNvcihoV25kLCBt
ZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBXTV9JTUVfU1RBUlRDT01QT1NJVElPTjoKLSAgICAgICAgICAgIGhhbmRsZWQg
PSBvbklNRVN0YXJ0Q29tcG9zaXRpb24oKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFdNX0lNRV9SRVFVRVNUOgotICAgICAgICAgICAgbFJlc3VsdCA9IG9uSU1FUmVxdWVzdCh3
UGFyYW0sIGxQYXJhbSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXTV9JTUVf
Q09NUE9TSVRJT046Ci0gICAgICAgICAgICBoYW5kbGVkID0gb25JTUVDb21wb3NpdGlvbihsUGFy
YW0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV01fSU1FX0VORENPTVBPU0lU
SU9OOgotICAgICAgICAgICAgaGFuZGxlZCA9IG9uSU1FRW5kQ29tcG9zaXRpb24oKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdNX0lNRV9TRUxFQ1Q6Ci0gICAgICAgICAgICBo
YW5kbGVkID0gb25JTUVTZWxlY3Qod1BhcmFtLCBsUGFyYW0pOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgV01fSU1FX1NFVENPTlRFWFQ6Ci0gICAgICAgICAgICBoYW5kbGVkID0g
b25JTUVTZXRDb250ZXh0KHdQYXJhbSwgbFBhcmFtKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaGFuZGxlZCA9IGZhbHNlOwotICAgICAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBXTV9DTE9TRToKKyAgICAgICAgbV9wYWdlLT50cnlDbG9zZSgpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX0RFU1RST1k6CisgICAgICAgIG1faXNCZWluZ0Rl
c3Ryb3llZCA9IHRydWU7CisgICAgICAgIGNsb3NlKCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgV01fRVJBU0VCS0dORDoKKyAgICAgICAgbFJlc3VsdCA9IDE7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgV01fUEFJTlQ6CisgICAgICAgIGxSZXN1bHQgPSBvblBhaW50RXZlbnQoaFduZCwg
bWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdNX1BSSU5UQ0xJRU5UOgorICAgICAgICBsUmVzdWx0ID0gb25QcmludENsaWVudEV2ZW50
KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBXTV9NT1VTRUFDVElWQVRFOgorICAgICAgICBzZXRXYXNBY3RpdmF0ZWRCeU1v
dXNlRXZlbnQodHJ1ZSk7CisgICAgICAgIGhhbmRsZWQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBXTV9NT1VTRU1PVkU6CisgICAgY2FzZSBXTV9MQlVUVE9ORE9XTjoKKyAgICBj
YXNlIFdNX01CVVRUT05ET1dOOgorICAgIGNhc2UgV01fUkJVVFRPTkRPV046CisgICAgY2FzZSBX
TV9MQlVUVE9OREJMQ0xLOgorICAgIGNhc2UgV01fTUJVVFRPTkRCTENMSzoKKyAgICBjYXNlIFdN
X1JCVVRUT05EQkxDTEs6CisgICAgY2FzZSBXTV9MQlVUVE9OVVA6CisgICAgY2FzZSBXTV9NQlVU
VE9OVVA6CisgICAgY2FzZSBXTV9SQlVUVE9OVVA6CisgICAgY2FzZSBXTV9NT1VTRUxFQVZFOgor
ICAgICAgICBsUmVzdWx0ID0gb25Nb3VzZUV2ZW50KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBh
cmFtLCBoYW5kbGVkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9NT1VTRVdIRUVMOgor
ICAgIGNhc2UgV01fVklTVEFfTU9VU0VIV0hFRUw6CisgICAgICAgIGxSZXN1bHQgPSBvbldoZWVs
RXZlbnQoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFdNX1NZU0tFWURPV046CisgICAgY2FzZSBXTV9LRVlET1dOOgorICAg
IGNhc2UgV01fU1lTQ0hBUjoKKyAgICBjYXNlIFdNX0NIQVI6CisgICAgY2FzZSBXTV9TWVNLRVlV
UDoKKyAgICBjYXNlIFdNX0tFWVVQOgorICAgICAgICBsUmVzdWx0ID0gb25LZXlFdmVudChoV25k
LCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgV01fU0laRToKKyAgICAgICAgbFJlc3VsdCA9IG9uU2l6ZUV2ZW50KGhXbmQsIG1lc3Nh
Z2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBX
TV9XSU5ET1dQT1NDSEFOR0VEOgorICAgICAgICBsUmVzdWx0ID0gb25XaW5kb3dQb3NpdGlvbkNo
YW5nZWRFdmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV01fU0VURk9DVVM6CisgICAgICAgIGxSZXN1bHQgPSBvblNl
dEZvY3VzRXZlbnQoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFdNX0tJTExGT0NVUzoKKyAgICAgICAgbFJlc3VsdCA9IG9u
S2lsbEZvY3VzRXZlbnQoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX1RJTUVSOgorICAgICAgICBsUmVzdWx0ID0gb25U
aW1lckV2ZW50KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBXTV9TSE9XV0lORE9XOgorICAgICAgICBsUmVzdWx0ID0gb25T
aG93V2luZG93RXZlbnQoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX1NFVENVUlNPUjoKKyAgICAgICAgbFJlc3VsdCA9
IG9uU2V0Q3Vyc29yKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9JTUVfU1RBUlRDT01QT1NJVElPTjoKKyAgICAgICAg
aGFuZGxlZCA9IG9uSU1FU3RhcnRDb21wb3NpdGlvbigpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdNX0lNRV9SRVFVRVNUOgorICAgICAgICBsUmVzdWx0ID0gb25JTUVSZXF1ZXN0KHdQYXJh
bSwgbFBhcmFtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9JTUVfQ09NUE9TSVRJT046
CisgICAgICAgIGhhbmRsZWQgPSBvbklNRUNvbXBvc2l0aW9uKGxQYXJhbSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgV01fSU1FX0VORENPTVBPU0lUSU9OOgorICAgICAgICBoYW5kbGVkID0g
b25JTUVFbmRDb21wb3NpdGlvbigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX0lNRV9T
RUxFQ1Q6CisgICAgICAgIGhhbmRsZWQgPSBvbklNRVNlbGVjdCh3UGFyYW0sIGxQYXJhbSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fSU1FX1NFVENPTlRFWFQ6CisgICAgICAgIGhhbmRs
ZWQgPSBvbklNRVNldENvbnRleHQod1BhcmFtLCBsUGFyYW0pOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBoYW5kbGVkID0gZmFsc2U7CisgICAgICAgIGJyZWFrOwogICAg
IH0KIAogICAgIGlmICghaGFuZGxlZCkKQEAgLTIzMyw2ICsyMzYsOCBAQCBXZWJWaWV3OjpXZWJW
aWV3KFJFQ1QgcmVjdCwgV2ViQ29udGV4dCoKICAgICAsIG1fd2FzQWN0aXZhdGVkQnlNb3VzZUV2
ZW50KGZhbHNlKQogICAgICwgbV9pc0JlaW5nRGVzdHJveWVkKGZhbHNlKQogICAgICwgbV9pbklN
RUNvbXBvc2l0aW9uKDApCisgICAgLCBtX2ZpbmRJbmRpY2F0b3JDYWxsYmFjaygwKQorICAgICwg
bV9maW5kSW5kaWNhdG9yQ2FsbGJhY2tDb250ZXh0KDApCiB7CiAgICAgcmVnaXN0ZXJXZWJWaWV3
V2luZG93Q2xhc3MoKTsKIApAQCAtMzMzLDI5ICszMzgsMjkgQEAgTFJFU1VMVCBXZWJWaWV3Ojpv
bk1vdXNlRXZlbnQoSFdORCBoV25kLAogICAgIHNldFdhc0FjdGl2YXRlZEJ5TW91c2VFdmVudChm
YWxzZSk7CiAgICAgCiAgICAgc3dpdGNoIChtZXNzYWdlKSB7Ci0gICAgICAgIGNhc2UgV01fTEJV
VFRPTkRPV046Ci0gICAgICAgIGNhc2UgV01fTUJVVFRPTkRPV046Ci0gICAgICAgIGNhc2UgV01f
UkJVVFRPTkRPV046Ci0gICAgICAgICAgICA6OlNldEZvY3VzKG1fd2luZG93KTsKLSAgICAgICAg
ICAgIDo6U2V0Q2FwdHVyZShtX3dpbmRvdyk7Ci0gICAgICAgICAgICBicmVhazsgCi0gICAgICAg
IGNhc2UgV01fTEJVVFRPTlVQOgotICAgICAgICBjYXNlIFdNX01CVVRUT05VUDoKLSAgICAgICAg
Y2FzZSBXTV9SQlVUVE9OVVA6Ci0gICAgICAgICAgICA6OlJlbGVhc2VDYXB0dXJlKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXTV9NT1VTRU1PVkU6Ci0gICAgICAgICAgICBz
dGFydFRyYWNraW5nTW91c2VMZWF2ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgV01fTU9VU0VMRUFWRToKLSAgICAgICAgICAgIHN0b3BUcmFja2luZ01vdXNlTGVhdmUoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdNX0xCVVRUT05EQkxDTEs6Ci0gICAg
ICAgIGNhc2UgV01fTUJVVFRPTkRCTENMSzoKLSAgICAgICAgY2FzZSBXTV9SQlVUVE9OREJMQ0xL
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICBjYXNlIFdNX0xCVVRUT05ET1dOOgorICAgIGNhc2UgV01f
TUJVVFRPTkRPV046CisgICAgY2FzZSBXTV9SQlVUVE9ORE9XTjoKKyAgICAgICAgOjpTZXRGb2N1
cyhtX3dpbmRvdyk7CisgICAgICAgIDo6U2V0Q2FwdHVyZShtX3dpbmRvdyk7CisgICAgICAgIGJy
ZWFrOyAKKyAgICBjYXNlIFdNX0xCVVRUT05VUDoKKyAgICBjYXNlIFdNX01CVVRUT05VUDoKKyAg
ICBjYXNlIFdNX1JCVVRUT05VUDoKKyAgICAgICAgOjpSZWxlYXNlQ2FwdHVyZSgpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFdNX01PVVNFTU9WRToKKyAgICAgICAgc3RhcnRUcmFja2luZ01v
dXNlTGVhdmUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9NT1VTRUxFQVZFOgorICAg
ICAgICBzdG9wVHJhY2tpbmdNb3VzZUxlYXZlKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
V01fTEJVVFRPTkRCTENMSzoKKyAgICBjYXNlIFdNX01CVVRUT05EQkxDTEs6CisgICAgY2FzZSBX
TV9SQlVUVE9OREJMQ0xLOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKICAgICBtX3BhZ2UtPmhhbmRsZU1vdXNlRXZl
bnQobW91c2VFdmVudCk7CkBAIC00NjEsMTAgKzQ2NiwxMCBAQCBMUkVTVUxUIFdlYlZpZXc6Om9u
S2lsbEZvY3VzRXZlbnQoSFdORCwKIExSRVNVTFQgV2ViVmlldzo6b25UaW1lckV2ZW50KEhXTkQg
aFduZCwgVUlOVCwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKQogewogICAg
IHN3aXRjaCAod1BhcmFtKSB7Ci0gICAgICAgIGNhc2UgVXBkYXRlQWN0aXZlU3RhdGVUaW1lcjoK
LSAgICAgICAgICAgIDo6S2lsbFRpbWVyKGhXbmQsIFVwZGF0ZUFjdGl2ZVN0YXRlVGltZXIpOwot
ICAgICAgICAgICAgdXBkYXRlQWN0aXZlU3RhdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgVXBkYXRlQWN0aXZlU3RhdGVUaW1lcjoKKyAgICAgICAgOjpLaWxsVGltZXIoaFduZCwg
VXBkYXRlQWN0aXZlU3RhdGVUaW1lcik7CisgICAgICAgIHVwZGF0ZUFjdGl2ZVN0YXRlKCk7Cisg
ICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGhhbmRsZWQgPSB0cnVlOwpAQCAtOTc1LDExICs5
ODAsMTEgQEAgTFJFU1VMVCBXZWJWaWV3OjpvbklNRVJlcXVlc3QoV1BBUkFNIHJlcQogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIHN3aXRjaCAocmVxdWVzdCkgewotICAgICAgICBjYXNlIElNUl9S
RUNPTlZFUlRTVFJJTkc6Ci0gICAgICAgICAgICByZXR1cm4gb25JTUVSZXF1ZXN0UmVjb252ZXJ0
U3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8UkVDT05WRVJUU1RSSU5HKj4oZGF0YSkpOworICAgIGNh
c2UgSU1SX1JFQ09OVkVSVFNUUklORzoKKyAgICAgICAgcmV0dXJuIG9uSU1FUmVxdWVzdFJlY29u
dmVydFN0cmluZyhyZWludGVycHJldF9jYXN0PFJFQ09OVkVSVFNUUklORyo+KGRhdGEpKTsKIAot
ICAgICAgICBjYXNlIElNUl9RVUVSWUNIQVJQT1NJVElPTjoKLSAgICAgICAgICAgIHJldHVybiBv
bklNRVJlcXVlc3RDaGFyUG9zaXRpb24ocmVpbnRlcnByZXRfY2FzdDxJTUVDSEFSUE9TSVRJT04q
PihkYXRhKSk7CisgICAgY2FzZSBJTVJfUVVFUllDSEFSUE9TSVRJT046CisgICAgICAgIHJldHVy
biBvbklNRVJlcXVlc3RDaGFyUG9zaXRpb24ocmVpbnRlcnByZXRfY2FzdDxJTUVDSEFSUE9TSVRJ
T04qPihkYXRhKSk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtMTAxNSw5ICsxMDIwLDUz
IEBAIFBhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4gV2ViVmlldzoKICAgICByZXR1cm4g
V2ViQ29udGV4dE1lbnVQcm94eVdpbjo6Y3JlYXRlKG1fd2luZG93LCBwYWdlKTsKIH0KIAotdm9p
ZCBXZWJWaWV3OjpzZXRGaW5kSW5kaWNhdG9yKFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJv
b2wgZmFkZU91dCkKK3ZvaWQgV2ViVmlldzo6c2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZp
bmRJbmRpY2F0b3I+IGZpbmRJbmRpY2F0b3IsIGJvb2wgZmFkZU91dCkKK3sKKyAgICBpZiAobV9m
aW5kSW5kaWNhdG9yQ2FsbGJhY2spIHsKKyAgICAgICAgSEJJVE1BUCBoYm1wID0gMDsKKyAgICAg
ICAgU2hhcmVhYmxlQml0bWFwKiBjb250ZW50SW1hZ2UgPSBmaW5kSW5kaWNhdG9yLT5jb250ZW50
SW1hZ2UoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjb250ZW50SW1hZ2UpIHsKKyAgICAgICAg
ICAgIC8vIFJlbmRlciB0aGUgY29udGVudEltYWdlIHRvIGFuIEhCSVRNQVAuCisgICAgICAgICAg
ICB2b2lkKiBiaXRzOworICAgICAgICAgICAgSERDIGhkYyA9IENyZWF0ZUNvbXBhdGlibGVEQygw
KTsKKyAgICAgICAgICAgIGludCB3ID0gY29udGVudEltYWdlLT5ib3VuZHMoKS53aWR0aCgpOwor
ICAgICAgICAgICAgaW50IGggPSBjb250ZW50SW1hZ2UtPmJvdW5kcygpLmhlaWdodCgpOworICAg
ICAgICAgICAgQml0bWFwSW5mbyBibXAgPSBCaXRtYXBJbmZvOjpjcmVhdGUoY29udGVudEltYWdl
LT5zaXplKCkpOworCisgICAgICAgICAgICBoYm1wID0gQ3JlYXRlRElCU2VjdGlvbigwLCAmYm1w
LCBESUJfUkdCX0NPTE9SUywgc3RhdGljX2Nhc3Q8dm9pZCoqPigmYml0cyksIDAsIDApOworICAg
ICAgICAgICAgSEJJVE1BUCBoYm1wT2xkID0gc3RhdGljX2Nhc3Q8SEJJVE1BUD4oU2VsZWN0T2Jq
ZWN0KGhkYywgaGJtcCkpOworICAgICAgICAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBDR0Jp
dG1hcENvbnRleHRDcmVhdGUoc3RhdGljX2Nhc3Q8dm9pZCo+KGJpdHMpLCB3LCBoLAorICAgICAg
ICAgICAgICAgIDgsIHcgKiBzaXplb2YoUkdCUVVBRCksIGRldmljZVJHQkNvbG9yU3BhY2VSZWYo
KSwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZEZpcnN0KTsKKyAgICAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisKKyAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjb250ZXh0KTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgY29udGVudEltYWdlLT5wYWludChnYywgSW50UG9pbnQoMCwgMCksIGNvbnRlbnRJ
bWFnZS0+Ym91bmRzKCkpOworCisgICAgICAgICAgICBDR0NvbnRleHRSZWxlYXNlKGNvbnRleHQp
OworICAgICAgICAgICAgU2VsZWN0T2JqZWN0KGhkYywgaGJtcE9sZCk7CisgICAgICAgICAgICBE
ZWxldGVEQyhoZGMpOworICAgICAgICB9CisKKyAgICAgICAgSW50UmVjdCBzZWxlY3Rpb25JbnRS
ZWN0KGZpbmRJbmRpY2F0b3ItPnNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKCkpOwor
ICAgICAgICBSRUNUIHNlbGVjdGlvblJlY3QgPSB7c2VsZWN0aW9uSW50UmVjdC54KCksIHNlbGVj
dGlvbkludFJlY3QueSgpLCBzZWxlY3Rpb25JbnRSZWN0LnJpZ2h0KCksIHNlbGVjdGlvbkludFJl
Y3QuYm90dG9tKCl9OworICAgICAgICAoKm1fZmluZEluZGljYXRvckNhbGxiYWNrKSh0b0FQSSh0
aGlzKSwgaGJtcCwgc2VsZWN0aW9uUmVjdCwgZmFkZU91dCwgbV9maW5kSW5kaWNhdG9yQ2FsbGJh
Y2tDb250ZXh0KTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0RmluZEluZGljYXRvckNh
bGxiYWNrKFdLVmlld0ZpbmRJbmRpY2F0b3JDYWxsYmFjayBjYWxsYmFjaywgdm9pZCogY29udGV4
dCkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIG1fZmluZEluZGljYXRvckNhbGxi
YWNrID0gY2FsbGJhY2s7CisgICAgbV9maW5kSW5kaWNhdG9yQ2FsbGJhY2tDb250ZXh0ID0gY29u
dGV4dDsKK30KKworV0tWaWV3RmluZEluZGljYXRvckNhbGxiYWNrIFdlYlZpZXc6OmdldEZpbmRJ
bmRpY2F0b3JDYWxsYmFjayh2b2lkKiogY29udGV4dCkKK3sKKyAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgKmNvbnRleHQgPSBtX2ZpbmRJbmRpY2F0b3JDYWxsYmFja0NvbnRleHQ7CisgICAgCisg
ICAgcmV0dXJuIG1fZmluZEluZGljYXRvckNhbGxiYWNrOwogfQogCiB2b2lkIFdlYlZpZXc6OmRp
ZENvbW1pdExvYWRGb3JNYWluRnJhbWUoYm9vbCB1c2VDdXN0b21SZXByZXNlbnRhdGlvbikKQEAg
LTEwNjMsMTQgKzExMTIsMTQgQEAgdm9pZCBXZWJWaWV3Ojpzd2l0Y2hUb0RyYXdpbmdBcmVhVHlw
ZUlmTgogCiAgICAgT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IG5ld0RyYXdpbmdBcmVhOwogICAg
IHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIERyYXdpbmdBcmVhSW5mbzo6Tm9uZToKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERyYXdpbmdBcmVhSW5mbzo6Q2h1bmtlZFVw
ZGF0ZToKLSAgICAgICAgICAgIG5ld0RyYXdpbmdBcmVhID0gQ2h1bmtlZFVwZGF0ZURyYXdpbmdB
cmVhUHJveHk6OmNyZWF0ZSh0aGlzLCBtX3BhZ2UuZ2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRHJhd2luZ0FyZWFJbmZvOjpMYXllckJhY2tlZDoKLSAgICAgICAgICAg
IG5ld0RyYXdpbmdBcmVhID0gTGF5ZXJCYWNrZWREcmF3aW5nQXJlYVByb3h5OjpjcmVhdGUodGhp
cywgbV9wYWdlLmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRHJhd2luZ0Fy
ZWFJbmZvOjpOb25lOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIERyYXdpbmdBcmVhSW5mbzo6
Q2h1bmtlZFVwZGF0ZToKKyAgICAgICAgbmV3RHJhd2luZ0FyZWEgPSBDaHVua2VkVXBkYXRlRHJh
d2luZ0FyZWFQcm94eTo6Y3JlYXRlKHRoaXMsIG1fcGFnZS5nZXQoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRHJhd2luZ0FyZWFJbmZvOjpMYXllckJhY2tlZDoKKyAgICAgICAgbmV3RHJh
d2luZ0FyZWEgPSBMYXllckJhY2tlZERyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZSh0aGlzLCBtX3Bh
Z2UuZ2V0KCkpOworICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBpZiAobV9wYWdlLT5kcmF3
aW5nQXJlYSgpKQpAQCAtMTA5MiwxMiArMTE0MSwxMiBAQCBIV05EIFdlYlZpZXc6Om5hdGl2ZVdp
bmRvdygpCiB2b2lkIFdlYlZpZXc6OndpbmRvd1JlY2VpdmVkTWVzc2FnZShIV05ELCBVSU5UIG1l
c3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSkKIHsKICAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsK
LSAgICAgICAgY2FzZSBXTV9OQ0FDVElWQVRFOgotICAgICAgICAgICAgdXBkYXRlQWN0aXZlU3Rh
dGVTb29uKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXTV9TRVRUSU5HQ0hB
TkdFOgotICAgICAgICAgICAgLy8gc3lzdGVtUGFyYW1ldGVyQ2hhbmdlZCh3UGFyYW0pOwotICAg
ICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9OQ0FDVElWQVRFOgorICAgICAgICB1cGRhdGVB
Y3RpdmVTdGF0ZVNvb24oKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9TRVRUSU5HQ0hB
TkdFOgorICAgICAgICAvLyBzeXN0ZW1QYXJhbWV0ZXJDaGFuZ2VkKHdQYXJhbSk7CisgICAgICAg
IGJyZWFrOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9X
ZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJW
aWV3LmgJKHJldmlzaW9uIDc2OTgxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9X
ZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDkgQEAKIAogI2luY2x1ZGUgIkFQ
SU9iamVjdC5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlICJXS1ZpZXcuaCIK
ICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlIDxTaGxPYmouaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0NPTVB0ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0FjdGlvbnMuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CkBAIC0zNiw3ICszOCw2IEBACiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDxTaGxPYmouaD4KIAogaW50ZXJmYWNlIElEcm9wVGFyZ2V0
SGVscGVyOwogCkBAIC01OCw4ICs1OSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQYXJlbnRX
aW5kb3coSFdORCk7CiAgICAgdm9pZCB3aW5kb3dBbmNlc3RyeURpZENoYW5nZSgpOwogICAgIHZv
aWQgc2V0SXNJbldpbmRvdyhib29sKTsKLSAgICB2b2lkIHNldE92ZXJyaWRlQ3Vyc29yKEhDVVJT
T1Igb3ZlcnJpZGVDdXJzb3IpOworICAgIHZvaWQgc2V0T3ZlcnJpZGVDdXJzb3IoSENVUlNPUik7
CiAgICAgdm9pZCBzZXRJbml0aWFsRm9jdXMoYm9vbCBmb3J3YXJkKTsKKyAgICB2b2lkIHNldEZp
bmRJbmRpY2F0b3JDYWxsYmFjayhXS1ZpZXdGaW5kSW5kaWNhdG9yQ2FsbGJhY2ssIHZvaWQqKTsK
KyAgICBXS1ZpZXdGaW5kSW5kaWNhdG9yQ2FsbGJhY2sgZ2V0RmluZEluZGljYXRvckNhbGxiYWNr
KHZvaWQqKik7CiAgICAgdm9pZCBpbml0aWFsaXplKCk7CiAKICAgICAvLyBJVW5rbm93bgpAQCAt
MTg2LDYgKzE4OSwxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IG1fcGFn
ZTsKIAogICAgIHVuc2lnbmVkIG1faW5JTUVDb21wb3NpdGlvbjsKKworICAgIFdLVmlld0ZpbmRJ
bmRpY2F0b3JDYWxsYmFjayBtX2ZpbmRJbmRpY2F0b3JDYWxsYmFjazsKKyAgICB2b2lkKiBtX2Zp
bmRJbmRpY2F0b3JDYWxsYmFja0NvbnRleHQ7CisKICAgICBDT01QdHI8SURhdGFPYmplY3Q+IG1f
ZHJhZ0RhdGE7CiAgICAgQ09NUHRyPElEcm9wVGFyZ2V0SGVscGVyPiBtX2Ryb3BUYXJnZXRIZWxw
ZXI7CiAgICAgLy8gRklYTUU6IFRoaXMgdmFyaWFibGUgaXMgcGFydCBvZiBhIHdvcmthcm91bmQu
IFRoZSBkcm9wIGVmZmVjdCAocGR3RWZmZWN0KSBwYXNzZWQgdG8gRHJvcCBpcyBpbmNvcnJlY3Qu
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80506</attachid>
            <date>2011-01-28 15:19:17 -0800</date>
            <delta_ts>2011-01-29 00:27:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53329-20110128151913.patch</filename>
            <type>text/plain</type>
            <size>27494</size>
            <attacher name="Jeff Miller">jeffm</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2OTgzKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMDEtMjggIEplZmYgTWls
bGVyICA8amVmZm1AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFN1cHBvcnQgZmluZCBib3VuY3kgaW4gV2ViS2l0MiBvbiBXaW5kb3dz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzMyOQor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vODU2NTg0Mz4KKyAgICAgICAgVGhlIE1hYyBpbXBsZW1l
bnRzIHRoZSBmaW5kIGJvdW5jeSBpbnNpZGUgb2YgV2ViS2l0IGluIHRoZSBVSSBwcm9jZXNzIGZv
ciBXZWJLaXQyLCBidXQgd2UgbmVlZCB0byBkbyB0aGlzIGluc2lkZSBTYWZhcmkgZm9yIFdlYktp
dDIgb24gV2luZG93cy4KKyAgICAgICAgQWRkIGluZnJhc3RydWN0dXJlIHRvIGNhbGwgYmFjayBp
bnRvIHRoZSBhcHAgd2hlbiB0aGUgZmluZCBpbmRpY2F0b3IgY2hhbmdlcy4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQy93aW4vV0tWaWV3LmNwcDogQ2xlYW51cCBzb21lIGNvZGUgc3R5bGUg
dmlvbGF0aW9ucy4KKyAgICAgICAgKFdLVmlld1NldEZpbmRJbmRpY2F0b3JDYWxsYmFjayk6IEFk
ZGVkLgorICAgICAgICAoV0tWaWV3R2V0RmluZEluZGljYXRvckNhbGxiYWNrKTogQWRkZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9DL3dpbi9XS1ZpZXcuaDogQ2xlYW51cCBzb21lIGNvZGUg
c3R5bGUgdmlvbGF0aW9ucy4KKyAgICAgICAgKiBVSVByb2Nlc3MvRmluZEluZGljYXRvci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkZpbmRJbmRpY2F0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OkZpbmRJbmRpY2F0b3I6OkZpbmRJbmRpY2F0b3IpOgorICAgICAgICAoV2ViS2l0OjpGaW5k
SW5kaWNhdG9yOjpmcmFtZVJlY3QpOgorICAgICAgICAoV2ViS2l0OjpGaW5kSW5kaWNhdG9yOjpk
cmF3KToKKyAgICAgICAgUmVuYW1lIG1fc2VsZWN0aW9uUmVjdCB0byBtX3NlbGVjdGlvblJlY3RJ
bldpbmRvd0Nvb3JkaW5hdGVzIGFuZCBtX3RleHRSZWN0cyB0byBtX3RleHRSZWN0c0luU2VsZWN0
aW9uUmVjdENvb3JkaW5hdGVzIChhbG9uZyB3aXRoIHNpbWlsYXJseSBuYW1lZCBsb2NhbCB2YXJp
YWJsZXMpIHRvIGJlIG1vcmUgZXhwbGljdCBhYm91dCB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0uCisg
ICAgICAgICogVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuaDoKKyAgICAgICAgKFdlYktpdDo6Rmlu
ZEluZGljYXRvcjo6c2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6RmluZEluZGljYXRvcjo6dGV4dFJlY3RzKTogUmVuYW1lIG1fdGV4dFJl
Y3RzIHRvIG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMuCisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6c2V0RmluZEluZGljYXRvcik6IFJlbmFtZSBzZWxlY3Rpb25SZWN0IHRvIHNlbGVjdGlvblJl
Y3RJbldpbmRvd0Nvb3JkaW5hdGVzIGFuZCB0ZXh0UmVjdHMgdG8gdGV4dFJlY3RzSW5TZWxlY3Rp
b25SZWN0Q29vcmRpbmF0ZXMgdG8gYmUgbW9yZSBleHBsaWN0IGFib3V0IHRoZSBjb29yZGluYXRl
IHN5c3RlbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6IERpdHRvLgorICAg
ICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXc6OldlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzZXRGaW5kSW5kaWNhdG9y
KTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnNldEZpbmRJbmRpY2F0b3JDYWxs
YmFjayk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpnZXRGaW5kSW5kaWNhdG9y
Q2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuaDoKKwog
MjAxMS0wMS0yOCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRmlu
ZEluZGljYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Zp
bmRJbmRpY2F0b3IuY3BwCShyZXZpc2lvbiA3Njk4MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9GaW5kSW5kaWNhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTggKzc3LDE4IEBA
IHN0YXRpYyBjb25zdCBpbnQgZ3JhZGllbnRMaWdodEFscGhhID0gMjUKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLVBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4gRmluZEluZGljYXRvcjo6Y3JlYXRl
KGNvbnN0IEZsb2F0UmVjdCYgc2VsZWN0aW9uUmVjdCwgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
IHRleHRSZWN0cywgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGNvbnRlbnRJbWFnZUhhbmRs
ZSkKK1Bhc3NSZWZQdHI8RmluZEluZGljYXRvcj4gRmluZEluZGljYXRvcjo6Y3JlYXRlKGNvbnN0
IEZsb2F0UmVjdCYgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlcywgY29uc3Qg
U2hhcmVkTWVtb3J5OjpIYW5kbGUmIGNvbnRlbnRJbWFnZUhhbmRsZSkKIHsKLSAgICBSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBjb250ZW50SW1hZ2UgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShl
bmNsb3NpbmdJbnRSZWN0KHNlbGVjdGlvblJlY3QpLnNpemUoKSwgY29udGVudEltYWdlSGFuZGxl
KTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjb250ZW50SW1hZ2UgPSBTaGFyZWFibGVC
aXRtYXA6OmNyZWF0ZShlbmNsb3NpbmdJbnRSZWN0KHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3Jk
aW5hdGVzKS5zaXplKCksIGNvbnRlbnRJbWFnZUhhbmRsZSk7CiAgICAgaWYgKCFjb250ZW50SW1h
Z2UpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGaW5kSW5k
aWNhdG9yKHNlbGVjdGlvblJlY3QsIHRleHRSZWN0cywgY29udGVudEltYWdlLnJlbGVhc2UoKSkp
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmluZEluZGljYXRvcihzZWxlY3Rpb25SZWN0SW5X
aW5kb3dDb29yZGluYXRlcywgdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGNv
bnRlbnRJbWFnZS5yZWxlYXNlKCkpKTsKIH0KIAotRmluZEluZGljYXRvcjo6RmluZEluZGljYXRv
cihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHNlbGVjdGlvblJlY3QsIGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHMsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiBjb250ZW50SW1hZ2UpCi0gICAgOiBtX3NlbGVjdGlvblJlY3Qoc2VsZWN0aW9uUmVjdCkKLSAg
ICAsIG1fdGV4dFJlY3RzKHRleHRSZWN0cykKK0ZpbmRJbmRpY2F0b3I6OkZpbmRJbmRpY2F0b3Io
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRl
cywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIHRleHRSZWN0c0luU2VsZWN0aW9u
UmVjdENvb3JkaW5hdGVzLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29udGVudEltYWdl
KQorICAgIDogbV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcyhzZWxlY3Rpb25SZWN0
SW5XaW5kb3dDb29yZGluYXRlcykKKyAgICAsIG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29v
cmRpbmF0ZXModGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMpCiAgICAgLCBtX2Nv
bnRlbnRJbWFnZShjb250ZW50SW1hZ2UpCiB7CiB9CkBAIC0xMDgsOSArMTA4LDkgQEAgc3RhdGlj
IEZsb2F0UmVjdCBpbmZsYXRlUmVjdChjb25zdCBGbG9hdAogCiBGbG9hdFJlY3QgRmluZEluZGlj
YXRvcjo6ZnJhbWVSZWN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0KG1fc2VsZWN0
aW9uUmVjdC54KCkgLSBsZWZ0Qm9yZGVyVGhpY2tuZXNzLCBtX3NlbGVjdGlvblJlY3QueSgpIC0g
dG9wQm9yZGVyVGhpY2tuZXNzLAotICAgICAgICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0
LndpZHRoKCkgKyByaWdodEJvcmRlclRoaWNrbmVzcyArIGxlZnRCb3JkZXJUaGlja25lc3MsCi0g
ICAgICAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3QuaGVpZ2h0KCkgKyB0b3BCb3JkZXJU
aGlja25lc3MgKyBib3R0b21Cb3JkZXJUaGlja25lc3MpOworICAgIHJldHVybiBGbG9hdFJlY3Qo
bV9zZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcy54KCkgLSBsZWZ0Qm9yZGVyVGhpY2tu
ZXNzLCBtX3NlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLnkoKSAtIHRvcEJvcmRlclRo
aWNrbmVzcywKKyAgICAgICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29v
cmRpbmF0ZXMud2lkdGgoKSArIHJpZ2h0Qm9yZGVyVGhpY2tuZXNzICsgbGVmdEJvcmRlclRoaWNr
bmVzcywKKyAgICAgICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRp
bmF0ZXMuaGVpZ2h0KCkgKyB0b3BCb3JkZXJUaGlja25lc3MgKyBib3R0b21Cb3JkZXJUaGlja25l
c3MpOwogfQogCiBzdGF0aWMgQ29sb3IgbGlnaHRCb3JkZXJDb2xvcigpCkBAIC0xNDMsOCArMTQz
LDggQEAgc3RhdGljIFBhdGggcGF0aFdpdGhSb3VuZGVkUmVjdChjb25zdCBGbAogICAgIAogdm9p
ZCBGaW5kSW5kaWNhdG9yOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBj
b25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3RleHRSZWN0cy5zaXplKCk7ICsraSkgewotICAgICAgICBGbG9hdFJlY3QgdGV4dFJlY3QgPSBt
X3RleHRSZWN0c1tpXTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGV4dFJlY3RzSW5T
ZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgRmxvYXRSZWN0
IHRleHRSZWN0ID0gbV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29yZGluYXRlc1tpXTsKICAg
ICAgICAgdGV4dFJlY3QubW92ZShsZWZ0Qm9yZGVyVGhpY2tuZXNzLCB0b3BCb3JkZXJUaGlja25l
c3MpOwogCiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zYXZlKCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvRmluZEluZGljYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9GaW5kSW5kaWNhdG9yLmgJKHJldmlzaW9uIDc2OTgxKQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
MTIgKzQyLDEzIEBAIGNsYXNzIFNoYXJlYWJsZUJpdG1hcDsKIAogY2xhc3MgRmluZEluZGljYXRv
ciA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbmRJbmRpY2F0b3I+IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiBzZWxlY3Rpb25SZWN0LCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYgdGV4
dFJlY3RzLCBjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgY29udGVudEltYWdlSGFuZGxlKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaW5kSW5kaWNhdG9yPiBjcmVhdGUoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JiBzZWxlY3Rpb25SZWN0SW5XaW5kb3dDb29yZGluYXRlcywgY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mIHRleHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5h
dGVzLCBjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgY29udGVudEltYWdlSGFuZGxlKTsKICAg
ICB+RmluZEluZGljYXRvcigpOwogCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHNlbGVjdGlvblJl
Y3RJbldpbmRvd0Nvb3JkaW5hdGVzKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25SZWN0SW5X
aW5kb3dDb29yZGluYXRlczsgfQogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBmcmFtZVJlY3QoKSBj
b25zdDsKIAotICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHMo
KSBjb25zdCB7IHJldHVybiBtX3RleHRSZWN0czsgfQorICAgIGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHMoKSBjb25zdCB7IHJldHVybiBtX3RleHRSZWN0c0luU2Vs
ZWN0aW9uUmVjdENvb3JkaW5hdGVzOyB9CiAKICAgICBTaGFyZWFibGVCaXRtYXAqIGNvbnRlbnRJ
bWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudEltYWdlLmdldCgpOyB9CiAKQEAgLTU2LDgg
KzU3LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGaW5kSW5kaWNhdG9yKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgc2VsZWN0aW9uUmVjdCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0
UmVjdD4mIHRleHRSZWN0cywgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNvbnRlbnRJbWFn
ZSk7CiAKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV9zZWxlY3Rpb25SZWN0OwotICAgIFZlY3Rv
cjxXZWJDb3JlOjpGbG9hdFJlY3Q+IG1fdGV4dFJlY3RzOworICAgIFdlYkNvcmU6OkZsb2F0UmVj
dCBtX3NlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzOworICAgIFZlY3RvcjxXZWJDb3Jl
OjpGbG9hdFJlY3Q+IG1fdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXM7CiAgICAg
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9jb250ZW50SW1hZ2U7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gNzY5ODEpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTgzNCw5ICsxODM0LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENvdW50U3RyaW5n
TWF0Y2hlcwogICAgIG1fZmluZENsaWVudC5kaWRDb3VudFN0cmluZ01hdGNoZXModGhpcywgc3Ry
aW5nLCBtYXRjaENvdW50KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNldEZpbmRJbmRpY2F0
b3IoY29uc3QgRmxvYXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYgdGV4dFJlY3RzLCBjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgY29udGVudEltYWdlSGFu
ZGxlLCBib29sIGZhZGVPdXQpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0RmluZEluZGljYXRvcihj
b25zdCBGbG9hdFJlY3QmIHNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLCBjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYgdGV4dFJlY3RzSW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMsIGNv
bnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBjb250ZW50SW1hZ2VIYW5kbGUsIGJvb2wgZmFkZU91
dCkKIHsKLSAgICBSZWZQdHI8RmluZEluZGljYXRvcj4gZmluZEluZGljYXRvciA9IEZpbmRJbmRp
Y2F0b3I6OmNyZWF0ZShzZWxlY3Rpb25SZWN0LCB0ZXh0UmVjdHMsIGNvbnRlbnRJbWFnZUhhbmRs
ZSk7CisgICAgUmVmUHRyPEZpbmRJbmRpY2F0b3I+IGZpbmRJbmRpY2F0b3IgPSBGaW5kSW5kaWNh
dG9yOjpjcmVhdGUoc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIHRleHRSZWN0c0lu
U2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzLCBjb250ZW50SW1hZ2VIYW5kbGUpOwogICAgIG1fcGFn
ZUNsaWVudC0+c2V0RmluZEluZGljYXRvcihmaW5kSW5kaWNhdG9yLnJlbGVhc2UoKSwgZmFkZU91
dCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJl
dmlzaW9uIDc2OTgxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00ODgsNyArNDg4LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICAv
LyBGaW5kLgogICAgIHZvaWQgZGlkQ291bnRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYsIHVp
bnQzMl90IG1hdGNoQ291bnQpOwotICAgIHZvaWQgc2V0RmluZEluZGljYXRvcihjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIHNlbGVjdGlvblJlY3QsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9h
dFJlY3Q+JiB0ZXh0UmVjdHMsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBjb250ZW50SW1h
Z2VIYW5kbGUsIGJvb2wgZmFkZU91dCk7CisgICAgdm9pZCBzZXRGaW5kSW5kaWNhdG9yKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiB0ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RD
b29yZGluYXRlcywgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGNvbnRlbnRJbWFnZUhhbmRs
ZSwgYm9vbCBmYWRlT3V0KTsKICAgICB2b2lkIGRpZEZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiwg
dWludDMyX3QgbWF0Y2hDb3VudCk7CiAgICAgdm9pZCBkaWRGYWlsVG9GaW5kU3RyaW5nKGNvbnN0
IFN0cmluZyYpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dL
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dp
bi9XS1ZpZXcuY3BwCShyZXZpc2lvbiA3Njk4MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy93aW4vV0tWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsMyArNzEsMTMgQEAg
dm9pZCBXS1ZpZXdTZXRJbml0aWFsRm9jdXMoV0tWaWV3UmVmIHZpZQogewogICAgIHRvSW1wbCh2
aWV3UmVmKS0+c2V0SW5pdGlhbEZvY3VzKGZvcndhcmQpOwogfQorCit2b2lkIFdLVmlld1NldEZp
bmRJbmRpY2F0b3JDYWxsYmFjayhXS1ZpZXdSZWYgdmlld1JlZiwgV0tWaWV3RmluZEluZGljYXRv
ckNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiBjb250ZXh0KQoreworICAgIHRvSW1wbCh2aWV3UmVm
KS0+c2V0RmluZEluZGljYXRvckNhbGxiYWNrKGNhbGxiYWNrLCBjb250ZXh0KTsKK30KKworV0tW
aWV3RmluZEluZGljYXRvckNhbGxiYWNrIFdLVmlld0dldEZpbmRJbmRpY2F0b3JDYWxsYmFjayhX
S1ZpZXdSZWYgdmlld1JlZiwgdm9pZCoqIGNvbnRleHQpCit7ICAgIAorICAgIHJldHVybiB0b0lt
cGwodmlld1JlZiktPmdldEZpbmRJbmRpY2F0b3JDYWxsYmFjayhjb250ZXh0KTsKK30KSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tWaWV3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS1ZpZXcuaAkocmV2aXNpb24g
NzY5ODEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLVmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwxMCBAQCBXS19FWFBPUlQgdm9pZCBXS1ZpZXdXaW5k
b3dBbmNlc3RyeURpZENoCiBXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRJc0luV2luZG93KFdLVmll
d1JlZiB2aWV3LCBib29sIGlzSW5XaW5kb3cpOwogV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0SW5p
dGlhbEZvY3VzKFdLVmlld1JlZiB2aWV3LCBib29sIGZvcndhcmQpOwogCit0eXBlZGVmIHZvaWQg
KCpXS1ZpZXdGaW5kSW5kaWNhdG9yQ2FsbGJhY2spKFdLVmlld1JlZiwgSEJJVE1BUCBzZWxlY3Rp
b25CaXRtYXAsIFJFQ1Qgc2VsZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMsIGJvb2wgZmFk
ZW91dCwgdm9pZCopOworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0RmluZEluZGljYXRvckNhbGxi
YWNrKFdLVmlld1JlZiB2aWV3LCBXS1ZpZXdGaW5kSW5kaWNhdG9yQ2FsbGJhY2sgY2FsbGJhY2ss
IHZvaWQqIGNvbnRleHQpOworV0tfRVhQT1JUIFdLVmlld0ZpbmRJbmRpY2F0b3JDYWxsYmFjayBX
S1ZpZXdHZXRGaW5kSW5kaWNhdG9yQ2FsbGJhY2soV0tWaWV3UmVmIHZpZXcsIHZvaWQqKiBjb250
ZXh0KTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gNzY5ODEpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4
ICszMCw5IEBACiAjaW5jbHVkZSAiRmluZEluZGljYXRvci5oIgogI2luY2x1ZGUgIkxheWVyQmFj
a2VkRHJhd2luZ0FyZWFQcm94eS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJS
dW5Mb29wLmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUg
IlJ1bkxvb3AuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0
LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eVdpbi5oIgogI2luY2x1ZGUgIldlYkVk
aXRDb21tYW5kUHJveHkuaCIKQEAgLTM5LDggKzQwLDEwIEBACiAjaW5jbHVkZSAiV2ViUGFnZVBy
b3h5LmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHlXaW4uaCIKICNpbmNsdWRlIDxDb21t
Y3RybC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQml0bWFwSW5mby5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvQ3Vyc29yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9Tb2Z0TGlua2luZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2Vi
Q29yZUluc3RhbmNlSGFuZGxlLmg+CkBAIC00OCwxNyArNTEsMTcgQEAKICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEltZSB7Ci0gICAgLy8gV2UgbmVlZCB0aGVz
ZSBmdW5jdGlvbnMgaW4gYSBzZXBhcmF0ZSBuYW1lc3BhY2UsIGJlY2F1c2UgaW4gdGhlIGdsb2Jh
bCBuYW1lc3BhY2UgdGhleSBjb25mbGljdAotICAgIC8vIHdpdGggdGhlIGRlZmluaXRpb25zIGlu
IGltbS5oIG9ubHkgYnkgdGhlIHR5cGUgbW9kaWZpZXIgKHRoZSBtYWNybyBkZWZpbmVzIHRoZW0g
YXMgc3RhdGljKSBhbmQKLSAgICAvLyBpbW0uaCBpcyBpbmNsdWRlZCBieSB3aW5kb3dzLmgKLSAg
ICBTT0ZUX0xJTktfTElCUkFSWShJTU0zMikKLSAgICBTT0ZUX0xJTksoSU1NMzIsIEltbUdldENv
bnRleHQsIEhJTUMsIFdJTkFQSSwgKEhXTkQgaHduZCksIChod25kKSkKLSAgICBTT0ZUX0xJTkso
SU1NMzIsIEltbVJlbGVhc2VDb250ZXh0LCBCT09MLCBXSU5BUEksIChIV05EIGhXbmQsIEhJTUMg
aElNQyksIChoV25kLCBoSU1DKSkKLSAgICBTT0ZUX0xJTksoSU1NMzIsIEltbUdldENvbXBvc2l0
aW9uU3RyaW5nVywgTE9ORywgV0lOQVBJLCAoSElNQyBoSU1DLCBEV09SRCBkd0luZGV4LCBMUFZP
SUQgbHBCdWYsIERXT1JEIGR3QnVmTGVuKSwgKGhJTUMsIGR3SW5kZXgsIGxwQnVmLCBkd0J1Zkxl
bikpCi0gICAgU09GVF9MSU5LKElNTTMyLCBJbW1TZXRDYW5kaWRhdGVXaW5kb3csIEJPT0wsIFdJ
TkFQSSwgKEhJTUMgaElNQywgTFBDQU5ESURBVEVGT1JNIGxwQ2FuZGlkYXRlKSwgKGhJTUMsIGxw
Q2FuZGlkYXRlKSkKLSAgICBTT0ZUX0xJTksoSU1NMzIsIEltbVNldE9wZW5TdGF0dXMsIEJPT0ws
IFdJTkFQSSwgKEhJTUMgaElNQywgQk9PTCBmT3BlbiksIChoSU1DLCBmT3BlbikpCi0gICAgU09G
VF9MSU5LKElNTTMyLCBJbW1Ob3RpZnlJTUUsIEJPT0wsIFdJTkFQSSwgKEhJTUMgaElNQywgRFdP
UkQgZHdBY3Rpb24sIERXT1JEIGR3SW5kZXgsIERXT1JEIGR3VmFsdWUpLCAoaElNQywgZHdBY3Rp
b24sIGR3SW5kZXgsIGR3VmFsdWUpKQotICAgIFNPRlRfTElOSyhJTU0zMiwgSW1tQXNzb2NpYXRl
Q29udGV4dEV4LCBCT09MLCBXSU5BUEksIChIV05EIGhXbmQsIEhJTUMgaElNQywgRFdPUkQgZHdG
bGFncyksIChoV25kLCBoSU1DLCBkd0ZsYWdzKSkKKy8vIFdlIG5lZWQgdGhlc2UgZnVuY3Rpb25z
IGluIGEgc2VwYXJhdGUgbmFtZXNwYWNlLCBiZWNhdXNlIGluIHRoZSBnbG9iYWwgbmFtZXNwYWNl
IHRoZXkgY29uZmxpY3QKKy8vIHdpdGggdGhlIGRlZmluaXRpb25zIGluIGltbS5oIG9ubHkgYnkg
dGhlIHR5cGUgbW9kaWZpZXIgKHRoZSBtYWNybyBkZWZpbmVzIHRoZW0gYXMgc3RhdGljKSBhbmQK
Ky8vIGltbS5oIGlzIGluY2x1ZGVkIGJ5IHdpbmRvd3MuaAorU09GVF9MSU5LX0xJQlJBUlkoSU1N
MzIpCitTT0ZUX0xJTksoSU1NMzIsIEltbUdldENvbnRleHQsIEhJTUMsIFdJTkFQSSwgKEhXTkQg
aHduZCksIChod25kKSkKK1NPRlRfTElOSyhJTU0zMiwgSW1tUmVsZWFzZUNvbnRleHQsIEJPT0ws
IFdJTkFQSSwgKEhXTkQgaFduZCwgSElNQyBoSU1DKSwgKGhXbmQsIGhJTUMpKQorU09GVF9MSU5L
KElNTTMyLCBJbW1HZXRDb21wb3NpdGlvblN0cmluZ1csIExPTkcsIFdJTkFQSSwgKEhJTUMgaElN
QywgRFdPUkQgZHdJbmRleCwgTFBWT0lEIGxwQnVmLCBEV09SRCBkd0J1ZkxlbiksIChoSU1DLCBk
d0luZGV4LCBscEJ1ZiwgZHdCdWZMZW4pKQorU09GVF9MSU5LKElNTTMyLCBJbW1TZXRDYW5kaWRh
dGVXaW5kb3csIEJPT0wsIFdJTkFQSSwgKEhJTUMgaElNQywgTFBDQU5ESURBVEVGT1JNIGxwQ2Fu
ZGlkYXRlKSwgKGhJTUMsIGxwQ2FuZGlkYXRlKSkKK1NPRlRfTElOSyhJTU0zMiwgSW1tU2V0T3Bl
blN0YXR1cywgQk9PTCwgV0lOQVBJLCAoSElNQyBoSU1DLCBCT09MIGZPcGVuKSwgKGhJTUMsIGZP
cGVuKSkKK1NPRlRfTElOSyhJTU0zMiwgSW1tTm90aWZ5SU1FLCBCT09MLCBXSU5BUEksIChISU1D
IGhJTUMsIERXT1JEIGR3QWN0aW9uLCBEV09SRCBkd0luZGV4LCBEV09SRCBkd1ZhbHVlKSwgKGhJ
TUMsIGR3QWN0aW9uLCBkd0luZGV4LCBkd1ZhbHVlKSkKK1NPRlRfTElOSyhJTU0zMiwgSW1tQXNz
b2NpYXRlQ29udGV4dEV4LCBCT09MLCBXSU5BUEksIChIV05EIGhXbmQsIEhJTUMgaElNQywgRFdP
UkQgZHdGbGFncyksIChoV25kLCBoSU1DLCBkd0ZsYWdzKSkKIH07CiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwpAQCAtMTAxLDkzICsxMDQsOTMgQEAgTFJFU1VMVCBXZWJWaWV3Ojp3bmRQcm9j
KEhXTkQgaFduZCwgVUlOVAogICAgIGJvb2wgaGFuZGxlZCA9IHRydWU7CiAKICAgICBzd2l0Y2gg
KG1lc3NhZ2UpIHsKLSAgICAgICAgY2FzZSBXTV9DTE9TRToKLSAgICAgICAgICAgIG1fcGFnZS0+
dHJ5Q2xvc2UoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdNX0RFU1RST1k6
Ci0gICAgICAgICAgICBtX2lzQmVpbmdEZXN0cm95ZWQgPSB0cnVlOwotICAgICAgICAgICAgY2xv
c2UoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdNX0VSQVNFQktHTkQ6Ci0g
ICAgICAgICAgICBsUmVzdWx0ID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFdNX1BBSU5UOgotICAgICAgICAgICAgbFJlc3VsdCA9IG9uUGFpbnRFdmVudChoV25kLCBtZXNz
YWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBXTV9QUklOVENMSUVOVDoKLSAgICAgICAgICAgIGxSZXN1bHQgPSBvblByaW50Q2xp
ZW50RXZlbnQoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV01fTU9VU0VBQ1RJVkFURToKLSAgICAgICAgICAg
IHNldFdhc0FjdGl2YXRlZEJ5TW91c2VFdmVudCh0cnVlKTsKLSAgICAgICAgICAgIGhhbmRsZWQg
PSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdNX01PVVNFTU9WRToK
LSAgICAgICAgY2FzZSBXTV9MQlVUVE9ORE9XTjoKLSAgICAgICAgY2FzZSBXTV9NQlVUVE9ORE9X
TjoKLSAgICAgICAgY2FzZSBXTV9SQlVUVE9ORE9XTjoKLSAgICAgICAgY2FzZSBXTV9MQlVUVE9O
REJMQ0xLOgotICAgICAgICBjYXNlIFdNX01CVVRUT05EQkxDTEs6Ci0gICAgICAgIGNhc2UgV01f
UkJVVFRPTkRCTENMSzoKLSAgICAgICAgY2FzZSBXTV9MQlVUVE9OVVA6Ci0gICAgICAgIGNhc2Ug
V01fTUJVVFRPTlVQOgotICAgICAgICBjYXNlIFdNX1JCVVRUT05VUDoKLSAgICAgICAgY2FzZSBX
TV9NT1VTRUxFQVZFOgotICAgICAgICAgICAgbFJlc3VsdCA9IG9uTW91c2VFdmVudChoV25kLCBt
ZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBXTV9NT1VTRVdIRUVMOgotICAgICAgICBjYXNlIFdNX1ZJU1RBX01PVVNFSFdI
RUVMOgotICAgICAgICAgICAgbFJlc3VsdCA9IG9uV2hlZWxFdmVudChoV25kLCBtZXNzYWdlLCB3
UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBXTV9TWVNLRVlET1dOOgotICAgICAgICBjYXNlIFdNX0tFWURPV046Ci0gICAgICAgIGNhc2Ug
V01fU1lTQ0hBUjoKLSAgICAgICAgY2FzZSBXTV9DSEFSOgotICAgICAgICBjYXNlIFdNX1NZU0tF
WVVQOgotICAgICAgICBjYXNlIFdNX0tFWVVQOgotICAgICAgICAgICAgbFJlc3VsdCA9IG9uS2V5
RXZlbnQoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV01fU0laRToKLSAgICAgICAgICAgIGxSZXN1bHQgPSBv
blNpemVFdmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXTV9XSU5ET1dQT1NDSEFOR0VEOgotICAgICAg
ICAgICAgbFJlc3VsdCA9IG9uV2luZG93UG9zaXRpb25DaGFuZ2VkRXZlbnQoaFduZCwgbWVzc2Fn
ZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgV01fU0VURk9DVVM6Ci0gICAgICAgICAgICBsUmVzdWx0ID0gb25TZXRGb2N1c0V2ZW50
KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFdNX0tJTExGT0NVUzoKLSAgICAgICAgICAgIGxSZXN1bHQgPSBv
bktpbGxGb2N1c0V2ZW50KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdNX1RJTUVSOgotICAgICAgICAgICAg
bFJlc3VsdCA9IG9uVGltZXJFdmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFu
ZGxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXTV9TSE9XV0lORE9XOgot
ICAgICAgICAgICAgbFJlc3VsdCA9IG9uU2hvd1dpbmRvd0V2ZW50KGhXbmQsIG1lc3NhZ2UsIHdQ
YXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFdNX1NFVENVUlNPUjoKLSAgICAgICAgICAgIGxSZXN1bHQgPSBvblNldEN1cnNvcihoV25kLCBt
ZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBXTV9JTUVfU1RBUlRDT01QT1NJVElPTjoKLSAgICAgICAgICAgIGhhbmRsZWQg
PSBvbklNRVN0YXJ0Q29tcG9zaXRpb24oKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFdNX0lNRV9SRVFVRVNUOgotICAgICAgICAgICAgbFJlc3VsdCA9IG9uSU1FUmVxdWVzdCh3
UGFyYW0sIGxQYXJhbSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXTV9JTUVf
Q09NUE9TSVRJT046Ci0gICAgICAgICAgICBoYW5kbGVkID0gb25JTUVDb21wb3NpdGlvbihsUGFy
YW0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV01fSU1FX0VORENPTVBPU0lU
SU9OOgotICAgICAgICAgICAgaGFuZGxlZCA9IG9uSU1FRW5kQ29tcG9zaXRpb24oKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdNX0lNRV9TRUxFQ1Q6Ci0gICAgICAgICAgICBo
YW5kbGVkID0gb25JTUVTZWxlY3Qod1BhcmFtLCBsUGFyYW0pOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgV01fSU1FX1NFVENPTlRFWFQ6Ci0gICAgICAgICAgICBoYW5kbGVkID0g
b25JTUVTZXRDb250ZXh0KHdQYXJhbSwgbFBhcmFtKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaGFuZGxlZCA9IGZhbHNlOwotICAgICAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBXTV9DTE9TRToKKyAgICAgICAgbV9wYWdlLT50cnlDbG9zZSgpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX0RFU1RST1k6CisgICAgICAgIG1faXNCZWluZ0Rl
c3Ryb3llZCA9IHRydWU7CisgICAgICAgIGNsb3NlKCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgV01fRVJBU0VCS0dORDoKKyAgICAgICAgbFJlc3VsdCA9IDE7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgV01fUEFJTlQ6CisgICAgICAgIGxSZXN1bHQgPSBvblBhaW50RXZlbnQoaFduZCwg
bWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdNX1BSSU5UQ0xJRU5UOgorICAgICAgICBsUmVzdWx0ID0gb25QcmludENsaWVudEV2ZW50
KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBXTV9NT1VTRUFDVElWQVRFOgorICAgICAgICBzZXRXYXNBY3RpdmF0ZWRCeU1v
dXNlRXZlbnQodHJ1ZSk7CisgICAgICAgIGhhbmRsZWQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBXTV9NT1VTRU1PVkU6CisgICAgY2FzZSBXTV9MQlVUVE9ORE9XTjoKKyAgICBj
YXNlIFdNX01CVVRUT05ET1dOOgorICAgIGNhc2UgV01fUkJVVFRPTkRPV046CisgICAgY2FzZSBX
TV9MQlVUVE9OREJMQ0xLOgorICAgIGNhc2UgV01fTUJVVFRPTkRCTENMSzoKKyAgICBjYXNlIFdN
X1JCVVRUT05EQkxDTEs6CisgICAgY2FzZSBXTV9MQlVUVE9OVVA6CisgICAgY2FzZSBXTV9NQlVU
VE9OVVA6CisgICAgY2FzZSBXTV9SQlVUVE9OVVA6CisgICAgY2FzZSBXTV9NT1VTRUxFQVZFOgor
ICAgICAgICBsUmVzdWx0ID0gb25Nb3VzZUV2ZW50KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBh
cmFtLCBoYW5kbGVkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9NT1VTRVdIRUVMOgor
ICAgIGNhc2UgV01fVklTVEFfTU9VU0VIV0hFRUw6CisgICAgICAgIGxSZXN1bHQgPSBvbldoZWVs
RXZlbnQoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFdNX1NZU0tFWURPV046CisgICAgY2FzZSBXTV9LRVlET1dOOgorICAg
IGNhc2UgV01fU1lTQ0hBUjoKKyAgICBjYXNlIFdNX0NIQVI6CisgICAgY2FzZSBXTV9TWVNLRVlV
UDoKKyAgICBjYXNlIFdNX0tFWVVQOgorICAgICAgICBsUmVzdWx0ID0gb25LZXlFdmVudChoV25k
LCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgV01fU0laRToKKyAgICAgICAgbFJlc3VsdCA9IG9uU2l6ZUV2ZW50KGhXbmQsIG1lc3Nh
Z2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBX
TV9XSU5ET1dQT1NDSEFOR0VEOgorICAgICAgICBsUmVzdWx0ID0gb25XaW5kb3dQb3NpdGlvbkNo
YW5nZWRFdmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSwgaGFuZGxlZCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV01fU0VURk9DVVM6CisgICAgICAgIGxSZXN1bHQgPSBvblNl
dEZvY3VzRXZlbnQoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFdNX0tJTExGT0NVUzoKKyAgICAgICAgbFJlc3VsdCA9IG9u
S2lsbEZvY3VzRXZlbnQoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX1RJTUVSOgorICAgICAgICBsUmVzdWx0ID0gb25U
aW1lckV2ZW50KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBXTV9TSE9XV0lORE9XOgorICAgICAgICBsUmVzdWx0ID0gb25T
aG93V2luZG93RXZlbnQoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0sIGhhbmRsZWQpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX1NFVENVUlNPUjoKKyAgICAgICAgbFJlc3VsdCA9
IG9uU2V0Q3Vyc29yKGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtLCBoYW5kbGVkKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9JTUVfU1RBUlRDT01QT1NJVElPTjoKKyAgICAgICAg
aGFuZGxlZCA9IG9uSU1FU3RhcnRDb21wb3NpdGlvbigpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdNX0lNRV9SRVFVRVNUOgorICAgICAgICBsUmVzdWx0ID0gb25JTUVSZXF1ZXN0KHdQYXJh
bSwgbFBhcmFtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9JTUVfQ09NUE9TSVRJT046
CisgICAgICAgIGhhbmRsZWQgPSBvbklNRUNvbXBvc2l0aW9uKGxQYXJhbSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgV01fSU1FX0VORENPTVBPU0lUSU9OOgorICAgICAgICBoYW5kbGVkID0g
b25JTUVFbmRDb21wb3NpdGlvbigpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX0lNRV9T
RUxFQ1Q6CisgICAgICAgIGhhbmRsZWQgPSBvbklNRVNlbGVjdCh3UGFyYW0sIGxQYXJhbSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fSU1FX1NFVENPTlRFWFQ6CisgICAgICAgIGhhbmRs
ZWQgPSBvbklNRVNldENvbnRleHQod1BhcmFtLCBsUGFyYW0pOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBoYW5kbGVkID0gZmFsc2U7CisgICAgICAgIGJyZWFrOwogICAg
IH0KIAogICAgIGlmICghaGFuZGxlZCkKQEAgLTIzMyw2ICsyMzYsOCBAQCBXZWJWaWV3OjpXZWJW
aWV3KFJFQ1QgcmVjdCwgV2ViQ29udGV4dCoKICAgICAsIG1fd2FzQWN0aXZhdGVkQnlNb3VzZUV2
ZW50KGZhbHNlKQogICAgICwgbV9pc0JlaW5nRGVzdHJveWVkKGZhbHNlKQogICAgICwgbV9pbklN
RUNvbXBvc2l0aW9uKDApCisgICAgLCBtX2ZpbmRJbmRpY2F0b3JDYWxsYmFjaygwKQorICAgICwg
bV9maW5kSW5kaWNhdG9yQ2FsbGJhY2tDb250ZXh0KDApCiB7CiAgICAgcmVnaXN0ZXJXZWJWaWV3
V2luZG93Q2xhc3MoKTsKIApAQCAtMzMzLDI5ICszMzgsMjkgQEAgTFJFU1VMVCBXZWJWaWV3Ojpv
bk1vdXNlRXZlbnQoSFdORCBoV25kLAogICAgIHNldFdhc0FjdGl2YXRlZEJ5TW91c2VFdmVudChm
YWxzZSk7CiAgICAgCiAgICAgc3dpdGNoIChtZXNzYWdlKSB7Ci0gICAgICAgIGNhc2UgV01fTEJV
VFRPTkRPV046Ci0gICAgICAgIGNhc2UgV01fTUJVVFRPTkRPV046Ci0gICAgICAgIGNhc2UgV01f
UkJVVFRPTkRPV046Ci0gICAgICAgICAgICA6OlNldEZvY3VzKG1fd2luZG93KTsKLSAgICAgICAg
ICAgIDo6U2V0Q2FwdHVyZShtX3dpbmRvdyk7Ci0gICAgICAgICAgICBicmVhazsgCi0gICAgICAg
IGNhc2UgV01fTEJVVFRPTlVQOgotICAgICAgICBjYXNlIFdNX01CVVRUT05VUDoKLSAgICAgICAg
Y2FzZSBXTV9SQlVUVE9OVVA6Ci0gICAgICAgICAgICA6OlJlbGVhc2VDYXB0dXJlKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXTV9NT1VTRU1PVkU6Ci0gICAgICAgICAgICBz
dGFydFRyYWNraW5nTW91c2VMZWF2ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgV01fTU9VU0VMRUFWRToKLSAgICAgICAgICAgIHN0b3BUcmFja2luZ01vdXNlTGVhdmUoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdNX0xCVVRUT05EQkxDTEs6Ci0gICAg
ICAgIGNhc2UgV01fTUJVVFRPTkRCTENMSzoKLSAgICAgICAgY2FzZSBXTV9SQlVUVE9OREJMQ0xL
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICBjYXNlIFdNX0xCVVRUT05ET1dOOgorICAgIGNhc2UgV01f
TUJVVFRPTkRPV046CisgICAgY2FzZSBXTV9SQlVUVE9ORE9XTjoKKyAgICAgICAgOjpTZXRGb2N1
cyhtX3dpbmRvdyk7CisgICAgICAgIDo6U2V0Q2FwdHVyZShtX3dpbmRvdyk7CisgICAgICAgIGJy
ZWFrOyAKKyAgICBjYXNlIFdNX0xCVVRUT05VUDoKKyAgICBjYXNlIFdNX01CVVRUT05VUDoKKyAg
ICBjYXNlIFdNX1JCVVRUT05VUDoKKyAgICAgICAgOjpSZWxlYXNlQ2FwdHVyZSgpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFdNX01PVVNFTU9WRToKKyAgICAgICAgc3RhcnRUcmFja2luZ01v
dXNlTGVhdmUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9NT1VTRUxFQVZFOgorICAg
ICAgICBzdG9wVHJhY2tpbmdNb3VzZUxlYXZlKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
V01fTEJVVFRPTkRCTENMSzoKKyAgICBjYXNlIFdNX01CVVRUT05EQkxDTEs6CisgICAgY2FzZSBX
TV9SQlVUVE9OREJMQ0xLOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKICAgICBtX3BhZ2UtPmhhbmRsZU1vdXNlRXZl
bnQobW91c2VFdmVudCk7CkBAIC00NjEsMTAgKzQ2NiwxMCBAQCBMUkVTVUxUIFdlYlZpZXc6Om9u
S2lsbEZvY3VzRXZlbnQoSFdORCwKIExSRVNVTFQgV2ViVmlldzo6b25UaW1lckV2ZW50KEhXTkQg
aFduZCwgVUlOVCwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNLCBib29sJiBoYW5kbGVkKQogewogICAg
IHN3aXRjaCAod1BhcmFtKSB7Ci0gICAgICAgIGNhc2UgVXBkYXRlQWN0aXZlU3RhdGVUaW1lcjoK
LSAgICAgICAgICAgIDo6S2lsbFRpbWVyKGhXbmQsIFVwZGF0ZUFjdGl2ZVN0YXRlVGltZXIpOwot
ICAgICAgICAgICAgdXBkYXRlQWN0aXZlU3RhdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgVXBkYXRlQWN0aXZlU3RhdGVUaW1lcjoKKyAgICAgICAgOjpLaWxsVGltZXIoaFduZCwg
VXBkYXRlQWN0aXZlU3RhdGVUaW1lcik7CisgICAgICAgIHVwZGF0ZUFjdGl2ZVN0YXRlKCk7Cisg
ICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGhhbmRsZWQgPSB0cnVlOwpAQCAtOTc1LDExICs5
ODAsMTEgQEAgTFJFU1VMVCBXZWJWaWV3OjpvbklNRVJlcXVlc3QoV1BBUkFNIHJlcQogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIHN3aXRjaCAocmVxdWVzdCkgewotICAgICAgICBjYXNlIElNUl9S
RUNPTlZFUlRTVFJJTkc6Ci0gICAgICAgICAgICByZXR1cm4gb25JTUVSZXF1ZXN0UmVjb252ZXJ0
U3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8UkVDT05WRVJUU1RSSU5HKj4oZGF0YSkpOworICAgIGNh
c2UgSU1SX1JFQ09OVkVSVFNUUklORzoKKyAgICAgICAgcmV0dXJuIG9uSU1FUmVxdWVzdFJlY29u
dmVydFN0cmluZyhyZWludGVycHJldF9jYXN0PFJFQ09OVkVSVFNUUklORyo+KGRhdGEpKTsKIAot
ICAgICAgICBjYXNlIElNUl9RVUVSWUNIQVJQT1NJVElPTjoKLSAgICAgICAgICAgIHJldHVybiBv
bklNRVJlcXVlc3RDaGFyUG9zaXRpb24ocmVpbnRlcnByZXRfY2FzdDxJTUVDSEFSUE9TSVRJT04q
PihkYXRhKSk7CisgICAgY2FzZSBJTVJfUVVFUllDSEFSUE9TSVRJT046CisgICAgICAgIHJldHVy
biBvbklNRVJlcXVlc3RDaGFyUG9zaXRpb24ocmVpbnRlcnByZXRfY2FzdDxJTUVDSEFSUE9TSVRJ
T04qPihkYXRhKSk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtMTAxNSw5ICsxMDIwLDUy
IEBAIFBhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eT4gV2ViVmlldzoKICAgICByZXR1cm4g
V2ViQ29udGV4dE1lbnVQcm94eVdpbjo6Y3JlYXRlKG1fd2luZG93LCBwYWdlKTsKIH0KIAotdm9p
ZCBXZWJWaWV3OjpzZXRGaW5kSW5kaWNhdG9yKFBhc3NSZWZQdHI8RmluZEluZGljYXRvcj4sIGJv
b2wgZmFkZU91dCkKK3ZvaWQgV2ViVmlldzo6c2V0RmluZEluZGljYXRvcihQYXNzUmVmUHRyPEZp
bmRJbmRpY2F0b3I+IGZpbmRJbmRpY2F0b3IsIGJvb2wgZmFkZU91dCkKK3sKKyAgICBpZiAoIW1f
ZmluZEluZGljYXRvckNhbGxiYWNrKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgSEJJVE1B
UCBoYm1wID0gMDsKKyAgICBTaGFyZWFibGVCaXRtYXAqIGNvbnRlbnRJbWFnZSA9IGZpbmRJbmRp
Y2F0b3ItPmNvbnRlbnRJbWFnZSgpOworICAgIAorICAgIGlmIChjb250ZW50SW1hZ2UpIHsKKyAg
ICAgICAgLy8gUmVuZGVyIHRoZSBjb250ZW50SW1hZ2UgdG8gYW4gSEJJVE1BUC4KKyAgICAgICAg
dm9pZCogYml0czsKKyAgICAgICAgSERDIGhkYyA9IDo6Q3JlYXRlQ29tcGF0aWJsZURDKDApOwor
ICAgICAgICBpbnQgd2lkdGggPSBjb250ZW50SW1hZ2UtPmJvdW5kcygpLndpZHRoKCk7CisgICAg
ICAgIGludCBoZWlnaHQgPSBjb250ZW50SW1hZ2UtPmJvdW5kcygpLmhlaWdodCgpOworICAgICAg
ICBCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBCaXRtYXBJbmZvOjpjcmVhdGUoY29udGVudEltYWdl
LT5zaXplKCkpOworCisgICAgICAgIGhibXAgPSBDcmVhdGVESUJTZWN0aW9uKDAsICZiaXRtYXBJ
bmZvLCBESUJfUkdCX0NPTE9SUywgc3RhdGljX2Nhc3Q8dm9pZCoqPigmYml0cyksIDAsIDApOwor
ICAgICAgICBIQklUTUFQIGhibXBPbGQgPSBzdGF0aWNfY2FzdDxIQklUTUFQPihTZWxlY3RPYmpl
Y3QoaGRjLCBoYm1wKSk7CisgICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNvbnRleHQo
QWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGJpdHMsIHdpZHRoLCBoZWlnaHQsCisgICAg
ICAgICAgICA4LCB3aWR0aCAqIHNpemVvZihSR0JRVUFEKSwgZGV2aWNlUkdCQ29sb3JTcGFjZVJl
ZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBs
aWVkRmlyc3QpKTsKKworICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNv
bnRleHQuZ2V0KCkpOworICAgICAgICBjb250ZW50SW1hZ2UtPnBhaW50KGdyYXBoaWNzQ29udGV4
dCwgSW50UG9pbnQoKSwgY29udGVudEltYWdlLT5ib3VuZHMoKSk7CisKKyAgICAgICAgOjpTZWxl
Y3RPYmplY3QoaGRjLCBoYm1wT2xkKTsKKyAgICAgICAgOjpEZWxldGVEQyhoZGMpOworICAgIH0K
KworICAgIEludFJlY3Qgc2VsZWN0aW9uUmVjdChmaW5kSW5kaWNhdG9yLT5zZWxlY3Rpb25SZWN0
SW5XaW5kb3dDb29yZGluYXRlcygpKTsKKyAgICAKKyAgICAvLyBUaGUgY2FsbGJhY2sgaXMgcmVz
cG9uc2libGUgZm9yIGNhbGxpbmcgOjpEZWxldGVPYmplY3QoaGJtcCkuCisgICAgKCptX2ZpbmRJ
bmRpY2F0b3JDYWxsYmFjaykodG9BUEkodGhpcyksIGhibXAsIHNlbGVjdGlvblJlY3QsIGZhZGVP
dXQsIG1fZmluZEluZGljYXRvckNhbGxiYWNrQ29udGV4dCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6
c2V0RmluZEluZGljYXRvckNhbGxiYWNrKFdLVmlld0ZpbmRJbmRpY2F0b3JDYWxsYmFjayBjYWxs
YmFjaywgdm9pZCogY29udGV4dCkKK3sKKyAgICBtX2ZpbmRJbmRpY2F0b3JDYWxsYmFjayA9IGNh
bGxiYWNrOworICAgIG1fZmluZEluZGljYXRvckNhbGxiYWNrQ29udGV4dCA9IGNvbnRleHQ7Cit9
CisKK1dLVmlld0ZpbmRJbmRpY2F0b3JDYWxsYmFjayBXZWJWaWV3OjpnZXRGaW5kSW5kaWNhdG9y
Q2FsbGJhY2sodm9pZCoqIGNvbnRleHQpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgKmNvbnRleHQgPSBtX2ZpbmRJbmRpY2F0b3JDYWxsYmFj
a0NvbnRleHQ7CisgICAgCisgICAgcmV0dXJuIG1fZmluZEluZGljYXRvckNhbGxiYWNrOwogfQog
CiB2b2lkIFdlYlZpZXc6OmRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoYm9vbCB1c2VDdXN0b21S
ZXByZXNlbnRhdGlvbikKQEAgLTEwNjMsMTQgKzExMTEsMTQgQEAgdm9pZCBXZWJWaWV3Ojpzd2l0
Y2hUb0RyYXdpbmdBcmVhVHlwZUlmTgogCiAgICAgT3duUHRyPERyYXdpbmdBcmVhUHJveHk+IG5l
d0RyYXdpbmdBcmVhOwogICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIERyYXdpbmdB
cmVhSW5mbzo6Tm9uZToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERyYXdpbmdB
cmVhSW5mbzo6Q2h1bmtlZFVwZGF0ZToKLSAgICAgICAgICAgIG5ld0RyYXdpbmdBcmVhID0gQ2h1
bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZSh0aGlzLCBtX3BhZ2UuZ2V0KCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRHJhd2luZ0FyZWFJbmZvOjpMYXllckJh
Y2tlZDoKLSAgICAgICAgICAgIG5ld0RyYXdpbmdBcmVhID0gTGF5ZXJCYWNrZWREcmF3aW5nQXJl
YVByb3h5OjpjcmVhdGUodGhpcywgbV9wYWdlLmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRHJhd2luZ0FyZWFJbmZvOjpOb25lOgorICAgICAgICBicmVhazsKKyAgICBjYXNl
IERyYXdpbmdBcmVhSW5mbzo6Q2h1bmtlZFVwZGF0ZToKKyAgICAgICAgbmV3RHJhd2luZ0FyZWEg
PSBDaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6Y3JlYXRlKHRoaXMsIG1fcGFnZS5nZXQo
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRHJhd2luZ0FyZWFJbmZvOjpMYXllckJhY2tl
ZDoKKyAgICAgICAgbmV3RHJhd2luZ0FyZWEgPSBMYXllckJhY2tlZERyYXdpbmdBcmVhUHJveHk6
OmNyZWF0ZSh0aGlzLCBtX3BhZ2UuZ2V0KCkpOworICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBpZiAobV9wYWdlLT5kcmF3aW5nQXJlYSgpKQpAQCAtMTA5MiwxMiArMTE0MCwxMiBAQCBIV05E
IFdlYlZpZXc6Om5hdGl2ZVdpbmRvdygpCiB2b2lkIFdlYlZpZXc6OndpbmRvd1JlY2VpdmVkTWVz
c2FnZShIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSkKIHsKICAgICBz
d2l0Y2ggKG1lc3NhZ2UpIHsKLSAgICAgICAgY2FzZSBXTV9OQ0FDVElWQVRFOgotICAgICAgICAg
ICAgdXBkYXRlQWN0aXZlU3RhdGVTb29uKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBXTV9TRVRUSU5HQ0hBTkdFOgotICAgICAgICAgICAgLy8gc3lzdGVtUGFyYW1ldGVyQ2hh
bmdlZCh3UGFyYW0pOwotICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9OQ0FDVElWQVRF
OgorICAgICAgICB1cGRhdGVBY3RpdmVTdGF0ZVNvb24oKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBXTV9TRVRUSU5HQ0hBTkdFOgorICAgICAgICAvLyBzeXN0ZW1QYXJhbWV0ZXJDaGFuZ2Vk
KHdQYXJhbSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3dpbi9XZWJWaWV3LmgJKHJldmlzaW9uIDc2OTgxKQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDkg
QEAKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKKyNp
bmNsdWRlICJXS1ZpZXcuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlIDxT
aGxPYmouaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RHJhZ0FjdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CkBAIC0zNiw3ICsz
OCw2IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDxTaGxPYmouaD4KIAogaW50
ZXJmYWNlIElEcm9wVGFyZ2V0SGVscGVyOwogCkBAIC01OCw4ICs1OSwxMCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRQYXJlbnRXaW5kb3coSFdORCk7CiAgICAgdm9pZCB3aW5kb3dBbmNlc3RyeURp
ZENoYW5nZSgpOwogICAgIHZvaWQgc2V0SXNJbldpbmRvdyhib29sKTsKLSAgICB2b2lkIHNldE92
ZXJyaWRlQ3Vyc29yKEhDVVJTT1Igb3ZlcnJpZGVDdXJzb3IpOworICAgIHZvaWQgc2V0T3ZlcnJp
ZGVDdXJzb3IoSENVUlNPUik7CiAgICAgdm9pZCBzZXRJbml0aWFsRm9jdXMoYm9vbCBmb3J3YXJk
KTsKKyAgICB2b2lkIHNldEZpbmRJbmRpY2F0b3JDYWxsYmFjayhXS1ZpZXdGaW5kSW5kaWNhdG9y
Q2FsbGJhY2ssIHZvaWQqKTsKKyAgICBXS1ZpZXdGaW5kSW5kaWNhdG9yQ2FsbGJhY2sgZ2V0Rmlu
ZEluZGljYXRvckNhbGxiYWNrKHZvaWQqKik7CiAgICAgdm9pZCBpbml0aWFsaXplKCk7CiAKICAg
ICAvLyBJVW5rbm93bgpAQCAtMTg2LDYgKzE4OSwxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxX
ZWJQYWdlUHJveHk+IG1fcGFnZTsKIAogICAgIHVuc2lnbmVkIG1faW5JTUVDb21wb3NpdGlvbjsK
KworICAgIFdLVmlld0ZpbmRJbmRpY2F0b3JDYWxsYmFjayBtX2ZpbmRJbmRpY2F0b3JDYWxsYmFj
azsKKyAgICB2b2lkKiBtX2ZpbmRJbmRpY2F0b3JDYWxsYmFja0NvbnRleHQ7CisKICAgICBDT01Q
dHI8SURhdGFPYmplY3Q+IG1fZHJhZ0RhdGE7CiAgICAgQ09NUHRyPElEcm9wVGFyZ2V0SGVscGVy
PiBtX2Ryb3BUYXJnZXRIZWxwZXI7CiAgICAgLy8gRklYTUU6IFRoaXMgdmFyaWFibGUgaXMgcGFy
dCBvZiBhIHdvcmthcm91bmQuIFRoZSBkcm9wIGVmZmVjdCAocGR3RWZmZWN0KSBwYXNzZWQgdG8g
RHJvcCBpcyBpbmNvcnJlY3QuIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>