<?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>68458</bug_id>
          
          <creation_ts>2011-09-20 12:12:20 -0700</creation_ts>
          <short_desc>[EFL] Add DumpRenderTreeSupportEfl</short_desc>
          <delta_ts>2011-10-14 07:42:45 -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>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Raphael Kubo da Costa (:rakuco)">rakuco</reporter>
          <assigned_to name="Raphael Kubo da Costa (:rakuco)">rakuco</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>leandro</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>470247</commentid>
    <comment_count>0</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-09-20 12:12:20 -0700</bug_when>
    <thetext>[EFL] Add DumpRenderTreeSupportEfl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470251</commentid>
    <comment_count>1</comment_count>
      <attachid>108041</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-09-20 12:21:47 -0700</bug_when>
    <thetext>Created attachment 108041
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470252</commentid>
    <comment_count>2</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-09-20 12:22:51 -0700</bug_when>
    <thetext>Kenneth and tonikitoo, DRTSupportEfl is finally here. The patch looks big at first, but it&apos;s mostly moving functions which were already present from one place to another and adapting the code.

If you still would like me do split the patch, please let me know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470253</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-20 12:23:25 -0700</bug_when>
    <thetext>Attachment 108041 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebKit/efl/CMakeLists...&quot; exit_code: 1

Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.h:31:  Ewk_History_Item is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470256</commentid>
    <comment_count>4</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-09-20 12:28:34 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.h:31:  Ewk_History_Item is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; Total errors found: 1 in 14 files

This is a false positive, Ewk_History_Item is actually called Ewk_History_Item.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471790</commentid>
    <comment_count>5</comment_count>
      <attachid>108384</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-09-22 12:36:43 -0700</bug_when>
    <thetext>Created attachment 108384
Rebase after r95659, export the class to make DRT link without SHARED_CORE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471793</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-22 12:39:24 -0700</bug_when>
    <thetext>Attachment 108384 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebKit/efl/CMakeLists...&quot; exit_code: 1

Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.h:31:  Ewk_History_Item is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481013</commentid>
    <comment_count>7</comment_count>
      <attachid>110371</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-10-10 11:13:44 -0700</bug_when>
    <thetext>Created attachment 110371
Rebase on top of trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481019</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-10 11:17:29 -0700</bug_when>
    <thetext>Attachment 110371 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebKit/efl/CMakeLists...&quot; exit_code: 1

Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.h:31:  Ewk_History_Item is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483940</commentid>
    <comment_count>9</comment_count>
      <attachid>111003</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-10-14 05:46:55 -0700</bug_when>
    <thetext>Created attachment 111003
Rebase on top of trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483945</commentid>
    <comment_count>10</comment_count>
      <attachid>111003</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-10-14 05:54:21 -0700</bug_when>
    <thetext>Comment on attachment 111003
Rebase on top of trunk

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

Pretty nice and definitely an improvement

&gt; Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.cpp:55
&gt; +DumpRenderTreeSupportEfl::DumpRenderTreeSupportEfl()
&gt; +{
&gt; +}
&gt; +
&gt; +DumpRenderTreeSupportEfl::~DumpRenderTreeSupportEfl()
&gt; +{
&gt; +}

Why not just define in the header?

&gt; Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.cpp:77
&gt; +    WebCore::Frame* frame = EWKPrivate::coreFrame(ewkFrame);
&gt; +
&gt; +    if (frame)
&gt; +        frame-&gt;tree()-&gt;clearName();

This can be done in two lines

&gt; Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.cpp:85
&gt; +    WebCore::Frame* frame = EWKPrivate::coreFrame(ewkFrame);
&gt; +
&gt; +    if (frame)
&gt; +        frame-&gt;loader()-&gt;setOpener(0);

here as well

if (WebCore::Frame* frame = EWKPrivate::coreFrame(ewkFrame))
    frame-&gt;loader()-&gt;setOpener(0);

&gt; Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.cpp:150
&gt; +int DumpRenderTreeSupportEfl::numberOfPages(const Evas_Object* ewkFrame, float pageWidth, float pageHeight)

maybe this should just return unsigned?

&gt; Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.cpp:160
&gt; +int DumpRenderTreeSupportEfl::numberOfPagesForElementId(const Evas_Object* ewkFrame, const char* elementId, float pageWidth, float pageHeight)

here as well

&gt; Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.cpp:236
&gt; +    WebCore::Frame* frame = EWKPrivate::coreFrame(ewkFrame);
&gt; +
&gt; +    if (!frame)
&gt; +        return 0;
&gt; +
&gt; +    return frame-&gt;domWindow()-&gt;pendingUnloadEventListeners();

if (WebCore::Frame* frame = EWKPrivate::coreFrame(ewkFrame))
    return frame-&gt;domWindow()-&gt;pendingUnloadEventListeners();

return 0;

&gt; Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.cpp:372
&gt; +        Ewk_History_Item* kid = ewk_history_item_new_from_core(children[i].get());

You must be &quot;kidding&quot; me :-)

&gt; Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.h:42
&gt; +    DumpRenderTreeSupportEfl();
&gt; +    ~DumpRenderTreeSupportEfl();

Add the { } here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483948</commentid>
    <comment_count>11</comment_count>
      <attachid>111003</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-10-14 06:05:14 -0700</bug_when>
    <thetext>Comment on attachment 111003
Rebase on top of trunk

Thank you so much for the review, this is the last remaining big DRT-related patch that needs to go in :)

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

&gt;&gt; Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.cpp:150
&gt;&gt; +int DumpRenderTreeSupportEfl::numberOfPages(const Evas_Object* ewkFrame, float pageWidth, float pageHeight)
&gt; 
&gt; maybe this should just return unsigned?

PrintContext::numberOfPages returns an int.

&gt;&gt; Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.cpp:160
&gt;&gt; +int DumpRenderTreeSupportEfl::numberOfPagesForElementId(const Evas_Object* ewkFrame, const char* elementId, float pageWidth, float pageHeight)
&gt; 
&gt; here as well

So does PrintContext::pageNumberForElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483949</commentid>
    <comment_count>12</comment_count>
      <attachid>111006</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-10-14 06:07:37 -0700</bug_when>
    <thetext>Created attachment 111006
Fifth time is a charm. Follow Kenneth&apos;s suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483974</commentid>
    <comment_count>13</comment_count>
      <attachid>111006</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-14 07:42:39 -0700</bug_when>
    <thetext>Comment on attachment 111006
Fifth time is a charm. Follow Kenneth&apos;s suggestions.

Clearing flags on attachment: 111006

Committed r97464: &lt;http://trac.webkit.org/changeset/97464&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483975</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-14 07:42:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108041</attachid>
            <date>2011-09-20 12:21:47 -0700</date>
            <delta_ts>2011-09-22 12:36:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68458-20110920162148.patch</filename>
            <type>text/plain</type>
            <size>42875</size>
            <attacher name="Raphael Kubo da Costa (:rakuco)">rakuco</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTU1NjAKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCBlMmYwYTI4Y2E2OGMyOTM2ODQ3Y2Q3ZTIwNGIyNTIyYzhlMjMxZDQwLi5lMDAx
ZmM2ZjM3NTI4MTZlNzhkMGY1Yzk4NTRiMmQ5MjE2NDNmMjExIDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDktMjAgIFJhcGhhZWwg
S3VibyBkYSBDb3N0YSAgPGt1Ym9AcHJvZnVzaW9uLm1vYmk+CisKKyAgICAgICAgW0VGTF0gQWRk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Njg0NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9lZmxzeW1ib2xzLmZpbHRlcjogRXhwb3J0
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbAorICAgICAgICBzeW1ib2xzIHNvIHRoYXQgRHVtcFJl
bmRlclRyZWUgY2FuIGxpbmsgdG8gdGhlbS4KKwogMjAxMS0wOS0yMCAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gVXBkYXRlIE5FV1Mg
YW5kIGNvbmZpZ3VyZS5hYyBmb3IgMS41LjkwIHJlbGVhc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0IGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0
c0VmbC50eHQKaW5kZXggYTI2NjBiZjcyYmI3NGRiMDQ5YWNlZDc3MDgxZTM0ZjU5NDJiMTc5Ny4u
NjFhMDI0OTNmNmUyMThiOTg2MjRkOTY4MDNiNTRiZmY1YmE0MjUzMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIvU291cmNlL1dlYktpdC9lZmwv
Q01ha2VMaXN0c0VmbC50eHQKQEAgLTIyLDYgKzIyLDE0IEBAIExJU1QoQVBQRU5EIFdlYktpdF9J
TkNMVURFX0RJUkVDVE9SSUVTCiAgICAgJHtTUUxJVEVfSU5DTFVERV9ESVJTfQogKQogCitJRiAo
RU5BQkxFX1NWRykKKyAgTElTVChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKKyAg
ICAiJHtXRUJDT1JFX0RJUn0vc3ZnIgorICAgICIke1dFQkNPUkVfRElSfS9zdmcvYW5pbWF0aW9u
IgorICAgICIke1dFQkNPUkVfRElSfS9yZW5kZXJpbmcvc3ZnIgorICApCitFTkRJRiAoKQorCiBJ
RiAoRU5BQkxFX1ZJREVPKQogTElTVChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMK
ICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyIgpAQCAtNTks
NiArNjcsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXRfU09VUkNFUwogICAgIGVmbC9XZWJDb3JlU3Vw
cG9ydC9EZXZpY2VPcmllbnRhdGlvbkNsaWVudEVmbC5jcHAKICAgICBlZmwvV2ViQ29yZVN1cHBv
cnQvRGV2aWNlTW90aW9uQ2xpZW50RWZsLmNwcAogICAgIGVmbC9XZWJDb3JlU3VwcG9ydC9EcmFn
Q2xpZW50RWZsLmNwcAorICAgIGVmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmwuY3BwCiAgICAgZWZsL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEVmbC5jcHAKICAg
ICBlZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwCiAgICAgZWZsL1dl
YkNvcmVTdXBwb3J0L0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXJFZmwuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VM
b2cKaW5kZXggODA1MDExMWJmOWM2YjI5NzhhZjllNWQ5MzViM2JjODllOTcwYTA1Yi4uOTdlYTNh
YTFlOWY0ZTk1ZDY1NzA2MzMxZTdmZDAzYWQwOTY2NmFlZiAxMDA3NTUKLS0tIGEvU291cmNlL1dl
YktpdC9lZmwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpAQCAt
MSw1ICsxLDczIEBACiAyMDExLTA5LTIwICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgIDxrdWJvQHBy
b2Z1c2lvbi5tb2JpPgogCisgICAgICAgIFtFRkxdIEFkZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRF
ZmwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NDU4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRm9sbG93
aW5nIHRoZSBzdWdnZXN0aW9uIG1hZGUgYnkgc2V2ZXJhbCBXZWJLaXQgcmV2aWV3ZXJzLCB3ZSBu
b3cKKyAgICAgICAgZmluYWxseSBoYXZlIGEgRHVtcFJlbmRlclRyZWVTdXBwb3J0IGNsYXNzLCB3
aG9zZSBzb2xlIHB1cnBvc2UgaXMgdG8KKyAgICAgICAgZ3JvdXAgY2FsbHMgdG8gZXdrIGFuZCBX
ZWJDb3JlIHRoYXQgbmVlZCB0byBiZSBtYWRlIGZyb20gRFJULCB0aHVzIG5vdAorICAgICAgICBw
b2xsdXRpbmcgZXdrX3ByaXZhdGUuaCBhbmQgZXdrX2ZyYW1lLmNwcCB3aXRoIG5vbi1wdWJsaWMg
ZnVuY3Rpb25zLgorCisgICAgICAgICogQ01ha2VMaXN0c0VmbC50eHQ6IENvbmRpdGlvbmFsbHkg
YWRkIHRoZSBzdmcgZGlyZWN0b3JpZXMgdG8gdGhlCisgICAgICAgIGluY2x1ZGUgcGF0aC4KKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6RHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6fkR1bXBSZW5kZXJU
cmVlU3VwcG9ydEVmbCk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmFjdGl2
ZUFuaW1hdGlvbnNDb3VudCk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNs
ZWFyRnJhbWVOYW1lKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y2xlYXJP
cGVuZXIpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpjb3VudGVyVmFsdWVC
eUVsZW1lbnRJZCk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmZyYW1lQ2hp
bGRyZW4pOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpsYXlvdXRGcmFtZSk6
CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6Om51bWJlck9mUGFnZXMpOgorICAg
ICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpudW1iZXJPZlBhZ2VzRm9yRWxlbWVudElk
KToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6cGF1c2VBbmltYXRpb24pOgor
ICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpwYXVzZVNWR0FuaW1hdGlvbik6Cisg
ICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnBhdXNlVHJhbnNpdGlvbik6CisgICAg
ICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnBlbmRpbmdVbmxvYWRFdmVudENvdW50KToK
KyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6cmVuZGVyVHJlZUR1bXApOgorICAg
ICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpyZXNwb25zZU1pbWVUeXBlKToKKyAgICAg
ICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAg
IChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNlbGVjdGlvblJlY3RhbmdsZSk6CisgICAgICAg
IChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJhbWVOYW1lKToKKyAgICAg
ICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c3VzcGVuZEFuaW1hdGlvbnMpOgorICAgICAg
ICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpmaW5kU3RyaW5nKToKKyAgICAgICAgKER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2NhbGVQYWdlKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbDo6Z2FyYmFnZUNvbGxlY3RvckNvbGxlY3QpOgorICAgICAgICAoRHVtcFJlbmRl
clRyZWVTdXBwb3J0RWZsOjpnYXJiYWdlQ29sbGVjdG9yQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFk
KToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6amF2YVNjcmlwdE9iamVjdHND
b3VudCk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OndvcmtlclRocmVhZENv
dW50KToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y2hpbGRIaXN0b3J5SXRl
bXMpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpoaXN0b3J5SXRlbVRhcmdl
dCk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmlzVGFyZ2V0SXRlbSk6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmg6IEFkZGVk
LgorICAgICAgICAqIGV3ay9ld2tfZnJhbWUuY3BwOgorICAgICAgICAoRVdLUHJpdmF0ZTo6Y29y
ZUZyYW1lKTogRXhwb3J0IHRoZSBXZWJDb3JlOjpGcmFtZSogcmVsYXRlZCB0byBhbgorICAgICAg
ICBld2tfZnJhbWUuCisgICAgICAgICogZXdrL2V3a19oaXN0b3J5LmNwcDogUmVtb3ZlIGZ1bmN0
aW9ucyB3aGljaCBoYXZlIGJlZW4gbW92ZWQgdG8KKyAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsLgorICAgICAgICAoX2V3a19oaXN0b3J5X2l0ZW1fbGlzdF9nZXQpOiBfZXdrX2hpc3Rv
cnlfaXRlbV9uZXcgLT4KKyAgICAgICAgZXdrX2hpc3RvcnlfaXRlbV9uZXdfZnJvbV9jb3JlLgor
ICAgICAgICAoZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX2JhY2tfZ2V0KTogRGl0dG8uCisgICAg
ICAgIChld2tfaGlzdG9yeV9oaXN0b3J5X2l0ZW1fY3VycmVudF9nZXQpOiBEaXR0by4KKyAgICAg
ICAgKGV3a19oaXN0b3J5X2hpc3RvcnlfaXRlbV9mb3J3YXJkX2dldCk6IERpdHRvLgorICAgICAg
ICAoZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX250aF9nZXQpOiBEaXR0by4KKyAgICAgICAgKGV3
a19oaXN0b3J5X2l0ZW1fbmV3KTogRGl0dG8uCisgICAgICAgIChld2tfaGlzdG9yeV9pdGVtX25l
d19mcm9tX2NvcmUpOiBSZW5hbWUgZnJvbSBfZXdrX2hpc3RvcnlfaXRlbV9uZXcuCisgICAgICAg
IChFV0tQcml2YXRlOjpjb3JlSGlzdG9yeUl0ZW0pOiBFeHBvcnQgdGhlIFdlYkNvcmU6Okhpc3Rv
cnlJdGVtKgorICAgICAgICByZWxhdGVkIHRvIGFuIEV3a19IaXN0b3J5X0l0ZW0uCisgICAgICAg
ICogZXdrL2V3a19wcml2YXRlLmg6IENyZWF0ZSB0aGUgRVdLUHJpdmF0ZSBuYW1lc3BhY2UsIHJl
bW92ZSBmdW5jdGlvbnMKKyAgICAgICAgd2hpY2ggaGF2ZSBiZWVuIG1vdmVkIHRvIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbC4KKyAgICAgICAgKiBld2svZXdrX3V0aWwuY3BwOiBSZW1vdmUgZnVu
Y3Rpb25zIHdoaWNoIGhhdmUgYmVlbiBtb3ZlZCB0bworICAgICAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmwuCisgICAgICAgICogZXdrL2V3a192aWV3LmNwcDoKKyAgICAgICAgKEVXS1ByaXZh
dGU6OmNvcmVQYWdlKTogRXhwb3J0IHRoZSBXZWJDb3JlOjpQYWdlKiByZWxhdGVkIHRvIGFuCisg
ICAgICAgIGV3a192aWV3LgorCisyMDExLTA5LTIwICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgIDxr
dWJvQHByb2Z1c2lvbi5tb2JpPgorCiAgICAgICAgIFtFRkxdIENhbGwgRnJhbWVMb2FkZXI6OmRl
dGFjaEZyb21QYXJlbnQoKSB3aGVuIGRlc3Ryb3lpbmcgYSBmcmFtZS4KICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2ODU1CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0ZTNlZDAyNzc3NGJhYmU3ZjY4MjdkMmRjN2ZmZDQ3ZTk5
OTA1YjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9y
dC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwCkBAIC0wLDAgKzEsMzk0IEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICAgIENvcHly
aWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oIgorCisjaW5jbHVkZSAiRVdl
YktpdC5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50RWZsLmgiCisjaW5jbHVkZSAiZXdr
X3ByaXZhdGUuaCIKKworI2luY2x1ZGUgPEFuaW1hdGlvbkNvbnRyb2xsZXIuaD4KKyNpbmNsdWRl
IDxEb2N1bWVudExvYWRlci5oPgorI2luY2x1ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDxFdmFzLmg+
CisjaW5jbHVkZSA8RmluZE9wdGlvbnMuaD4KKyNpbmNsdWRlIDxGbG9hdFNpemUuaD4KKyNpbmNs
dWRlIDxGcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxJbnRSZWN0Lmg+CisjaW5jbHVkZSA8UHJpbnRD
b250ZXh0Lmg+CisjaW5jbHVkZSA8UmVuZGVyVHJlZUFzVGV4dC5oPgorI2luY2x1ZGUgPGJpbmRp
bmdzL2pzL0dDQ29udHJvbGxlci5oPgorI2luY2x1ZGUgPGhpc3RvcnkvSGlzdG9yeUl0ZW0uaD4K
KyNpbmNsdWRlIDx3b3JrZXJzL1dvcmtlclRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZy5oPgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlIDxTVkdEb2N1bWVudEV4
dGVuc2lvbnMuaD4KKyNpbmNsdWRlIDxTVkdTTUlMRWxlbWVudC5oPgorI2VuZGlmCisKK0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbDo6RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsKCkKK3sKK30KKwor
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjp+RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsKCkKK3sK
K30KKwordW5zaWduZWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjphY3RpdmVBbmltYXRpb25z
Q291bnQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQoreworICAgIFdlYkNvcmU6OkZyYW1l
KiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShld2tGcmFtZSk7CisKKyAgICBpZiAoIWZy
YW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xs
ZXIqIGFuaW1hdGlvbkNvbnRyb2xsZXIgPSBmcmFtZS0+YW5pbWF0aW9uKCk7CisKKyAgICBpZiAo
IWFuaW1hdGlvbkNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGFu
aW1hdGlvbkNvbnRyb2xsZXItPm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhmcmFtZS0+ZG9jdW1l
bnQoKSk7Cit9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpjbGVhckZyYW1lTmFt
ZShFdmFzX09iamVjdCogZXdrRnJhbWUpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0g
RVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1lKTsKKworICAgIGlmIChmcmFtZSkKKyAgICAg
ICAgZnJhbWUtPnRyZWUoKS0+Y2xlYXJOYW1lKCk7Cit9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsOjpjbGVhck9wZW5lcihFdmFzX09iamVjdCogZXdrRnJhbWUpCit7CisgICAgV2Vi
Q29yZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1lKTsKKwor
ICAgIGlmIChmcmFtZSkKKyAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zZXRPcGVuZXIoMCk7Cit9
CisKK1N0cmluZyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNvdW50ZXJWYWx1ZUJ5RWxlbWVu
dElkKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogZWxlbWVudElkKQor
eworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShld2tG
cmFtZSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAg
ICBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50ID0gZnJhbWUtPmRvY3VtZW50KCktPmdldEVsZW1l
bnRCeUlkKGVsZW1lbnRJZCk7CisKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKworICAgIHJldHVybiBXZWJDb3JlOjpjb3VudGVyVmFsdWVGb3JFbGVtZW50KGVs
ZW1lbnQpOworfQorCitFaW5hX0xpc3QqIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZnJhbWVD
aGlsZHJlbihjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCit7CisgICAgV2ViQ29yZTo6RnJh
bWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1lKTsKKworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgRWluYV9MaXN0KiBjaGlsZEZyYW1lcyA9
IDA7CisKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBmcmFtZS0+dHJlZSgp
LT5jaGlsZENvdW50KCk7IGluZGV4KyspIHsKKyAgICAgICAgV2ViQ29yZTo6RnJhbWUgKmNoaWxk
RnJhbWUgPSBmcmFtZS0+dHJlZSgpLT5jaGlsZChpbmRleCk7CisgICAgICAgIFdlYkNvcmU6OkZy
YW1lTG9hZGVyQ2xpZW50RWZsICpjbGllbnQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudEVmbCo+KGNoaWxkRnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSk7CisKKyAgICAg
ICAgaWYgKCFjbGllbnQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjaGlsZEZy
YW1lcyA9IGVpbmFfbGlzdF9hcHBlbmQoY2hpbGRGcmFtZXMsIGNsaWVudC0+d2ViRnJhbWUoKSk7
CisgICAgfQorCisgICAgcmV0dXJuIGNoaWxkRnJhbWVzOworfQorCit2b2lkIER1bXBSZW5kZXJU
cmVlU3VwcG9ydEVmbDo6bGF5b3V0RnJhbWUoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQoreworICAg
IFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShld2tGcmFtZSk7
CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJDb3JlOjpGcmFt
ZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCk7CisKKyAgICBpZiAoIWZyYW1lVmlldykK
KyAgICAgICAgcmV0dXJuOworCisgICAgZnJhbWVWaWV3LT5sYXlvdXQoKTsKK30KKworaW50IER1
bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6bnVtYmVyT2ZQYWdlcyhjb25zdCBFdmFzX09iamVjdCog
ZXdrRnJhbWUsIGZsb2F0IHBhZ2VXaWR0aCwgZmxvYXQgcGFnZUhlaWdodCkKK3sKKyAgICBXZWJD
b3JlOjpGcmFtZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOworCisg
ICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gV2ViQ29yZTo6
UHJpbnRDb250ZXh0OjpudW1iZXJPZlBhZ2VzKGZyYW1lLCBXZWJDb3JlOjpGbG9hdFNpemUocGFn
ZVdpZHRoLCBwYWdlSGVpZ2h0KSk7Cit9CisKK2ludCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6
Om51bWJlck9mUGFnZXNGb3JFbGVtZW50SWQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBj
b25zdCBjaGFyKiBlbGVtZW50SWQsIGZsb2F0IHBhZ2VXaWR0aCwgZmxvYXQgcGFnZUhlaWdodCkK
K3sKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdr
RnJhbWUpOworCisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBXZWJD
b3JlOjpFbGVtZW50ICplbGVtZW50ID0gZnJhbWUtPmRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlk
KGVsZW1lbnRJZCk7CisKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIFdlYkNvcmU6OlByaW50Q29udGV4dDo6cGFnZU51bWJlckZvckVsZW1lbnQoZWxl
bWVudCwgV2ViQ29yZTo6RmxvYXRTaXplKHBhZ2VXaWR0aCwgcGFnZUhlaWdodCkpOworfQorCiti
b29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6cGF1c2VBbmltYXRpb24oRXZhc19PYmplY3Qq
IGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBlbGVtZW50SWQsIGRvdWJs
ZSB0aW1lKQoreworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVG
cmFtZShld2tGcmFtZSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50ID0gZnJhbWUtPmRvY3VtZW50KCktPmdl
dEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7CisKKyAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQt
PnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBmcmFtZS0+
YW5pbWF0aW9uKCktPnBhdXNlQW5pbWF0aW9uQXRUaW1lKGVsZW1lbnQtPnJlbmRlcmVyKCksIG5h
bWUsIHRpbWUpOworfQorCitib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6cGF1c2VTVkdB
bmltYXRpb24oRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBhbmltYXRpb25JZCwg
Y29uc3QgY2hhciogZWxlbWVudElkLCBkb3VibGUgdGltZSkKK3sKKyNpZiBFTkFCTEUoU1ZHKQor
ICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShld2tGcmFt
ZSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJD
b3JlOjpEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKworICAgIGlmICgh
ZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5zdmdFeHRlbnNpb25zKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQgPSBkb2N1bWVudC0+Z2V0RWxl
bWVudEJ5SWQoYW5pbWF0aW9uSWQpOworCisgICAgaWYgKCFlbGVtZW50IHx8ICFXZWJDb3JlOjpT
VkdTTUlMRWxlbWVudDo6aXNTTUlMRWxlbWVudChlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIGRvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnNhbXBs
ZUFuaW1hdGlvbkF0VGltZShlbGVtZW50SWQsIHN0YXRpY19jYXN0PFdlYkNvcmU6OlNWR1NNSUxF
bGVtZW50Kj4oZWxlbWVudCksIHRpbWUpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5k
aWYKK30KKworYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnBhdXNlVHJhbnNpdGlvbihF
dmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIGVsZW1l
bnRJZCwgZG91YmxlIHRpbWUpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJp
dmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1lKTsKKworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQgPSBmcmFtZS0+ZG9j
dW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsKKworICAgIGlmICghZWxlbWVudCB8
fCAhZWxlbWVudC0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIGZyYW1lLT5hbmltYXRpb24oKS0+cGF1c2VUcmFuc2l0aW9uQXRUaW1lKGVsZW1lbnQtPnJl
bmRlcmVyKCksIG5hbWUsIHRpbWUpOworfQorCit1bnNpZ25lZCBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmw6OnBlbmRpbmdVbmxvYWRFdmVudENvdW50KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUo
ZXdrRnJhbWUpOworCisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXR1cm4gZnJhbWUtPmRvbVdpbmRvdygpLT5wZW5kaW5nVW5sb2FkRXZlbnRMaXN0ZW5lcnMoKTsK
K30KKworU3RyaW5nIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6cmVuZGVyVHJlZUR1bXAoRXZh
c19PYmplY3QqIGV3a0ZyYW1lKQoreworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1By
aXZhdGU6OmNvcmVGcmFtZShld2tGcmFtZSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcgKmZyYW1lVmlldyA9IGZy
YW1lLT52aWV3KCk7CisKKyAgICBpZiAoZnJhbWVWaWV3ICYmIGZyYW1lVmlldy0+bGF5b3V0UGVu
ZGluZygpKQorICAgICAgICBmcmFtZVZpZXctPmxheW91dCgpOworCisgICAgcmV0dXJuIFdlYkNv
cmU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24oZnJhbWUpOworfQorCitTdHJpbmcgRHVtcFJlbmRl
clRyZWVTdXBwb3J0RWZsOjpyZXNwb25zZU1pbWVUeXBlKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tG
cmFtZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJh
bWUoZXdrRnJhbWUpOworCisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworCisgICAgV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIgKmRvY3VtZW50TG9hZGVyID0gZnJhbWUt
PmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpOworCisgICAgaWYgKCFkb2N1bWVudExvYWRlcikK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIGRvY3VtZW50TG9hZGVyLT5y
ZXNwb25zZU1JTUVUeXBlKCk7Cit9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpy
ZXN1bWVBbmltYXRpb25zKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKK3sKKyAgICBXZWJDb3JlOjpG
cmFtZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYg
KCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJv
bGxlciAqYW5pbWF0aW9uQ29udHJvbGxlciA9IGZyYW1lLT5hbmltYXRpb24oKTsKKyAgICBpZiAo
YW5pbWF0aW9uQ29udHJvbGxlcikKKyAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlci0+cmVzdW1l
QW5pbWF0aW9ucygpOworfQorCitXZWJDb3JlOjpJbnRSZWN0IER1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbDo6c2VsZWN0aW9uUmVjdGFuZ2xlKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKK3sK
KyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJh
bWUpOworCisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkludFJlY3Qo
KTsKKworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGZyYW1lLT5zZWxlY3Rpb24oKS0+Ym91
bmRzKCkpOworfQorCisvLyBDb21wYXJlIHdpdGggIldlYktpdC9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW0KK1N0cmluZyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRF
Zmw6OnN1aXRhYmxlRFJURnJhbWVOYW1lKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKK3sK
KyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJh
bWUpOworCisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAg
Y29uc3QgU3RyaW5nIGZyYW1lTmFtZShld2tfZnJhbWVfbmFtZV9nZXQoZXdrRnJhbWUpKTsKKwor
ICAgIGlmIChld2tGcmFtZSA9PSBld2tfdmlld19mcmFtZV9tYWluX2dldChld2tfZnJhbWVfdmll
d19nZXQoZXdrRnJhbWUpKSkgeworICAgICAgICBpZiAoIWZyYW1lTmFtZS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKCJtYWluIGZyYW1lIFwiIikgKyBmcmFtZU5hbWUgKyBT
dHJpbmcoIlwiIik7CisKKyAgICAgICAgcmV0dXJuIFN0cmluZygibWFpbiBmcmFtZSIpOworICAg
IH0KKworICAgIGlmICghZnJhbWVOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygiZnJhbWUgXCIiKSArIGZyYW1lTmFtZSArIFN0cmluZygiXCIiKTsKKworICAgIHJldHVybiBT
dHJpbmcoImZyYW1lIChhbm9ueW1vdXMpIik7Cit9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsOjpzdXNwZW5kQW5pbWF0aW9ucyhFdmFzX09iamVjdCogZXdrRnJhbWUpCit7CisgICAg
V2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1lKTsK
KworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6OkFuaW1h
dGlvbkNvbnRyb2xsZXIgKmFuaW1hdGlvbkNvbnRyb2xsZXIgPSBmcmFtZS0+YW5pbWF0aW9uKCk7
CisgICAgaWYgKGFuaW1hdGlvbkNvbnRyb2xsZXIpCisgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xs
ZXItPnN1c3BlbmRBbmltYXRpb25zKCk7Cit9CisKK2Jvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0
RWZsOjpmaW5kU3RyaW5nKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB0
ZXh0LCBXZWJDb3JlOjpGaW5kT3B0aW9ucyBvcHRpb25zKQoreworICAgIFdlYkNvcmU6OlBhZ2Uq
IHBhZ2UgPSBFV0tQcml2YXRlOjpjb3JlUGFnZShld2tWaWV3KTsKKworICAgIGlmICghcGFnZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHBhZ2UtPmZpbmRTdHJpbmcoU3Ry
aW5nOjpmcm9tVVRGOCh0ZXh0KSwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsOjpzY2FsZVBhZ2UoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHNjYWxlRmFj
dG9yLCBmbG9hdCB4LCBmbG9hdCB5KQoreworICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBFV0tQ
cml2YXRlOjpjb3JlUGFnZShld2tWaWV3KTsKKworICAgIGlmIChwYWdlKQorICAgICAgICBwYWdl
LT5zZXRQYWdlU2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IsIFdlYkNvcmU6OkludFBvaW50KHgsIHkp
KTsKK30KKwordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmdhcmJhZ2VDb2xsZWN0b3JD
b2xsZWN0KCkKK3sKKyAgICBXZWJDb3JlOjpnY0NvbnRyb2xsZXIoKS5nYXJiYWdlQ29sbGVjdE5v
dygpOworfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Z2FyYmFnZUNvbGxlY3Rv
ckNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZChib29sIHdhaXRVbnRpbERvbmUpCit7CisgICAgV2Vi
Q29yZTo6Z2NDb250cm9sbGVyKCkuZ2FyYmFnZUNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZEZvckRl
YnVnZ2luZyh3YWl0VW50aWxEb25lKTsKK30KKworc2l6ZV90IER1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbDo6amF2YVNjcmlwdE9iamVjdHNDb3VudCgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OkpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgpOworfQor
Cit1bnNpZ25lZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OndvcmtlclRocmVhZENvdW50KCkK
K3sKKyNpZiBFTkFCTEUoV09SS0VSUykKKyAgICByZXR1cm4gV2ViQ29yZTo6V29ya2VyVGhyZWFk
Ojp3b3JrZXJUaHJlYWRDb3VudCgpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQor
CitIaXN0b3J5SXRlbUNoaWxkcmVuTWFwIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y2hpbGRI
aXN0b3J5SXRlbXMoY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogZXdrSGlzdG9yeUl0ZW0pCit7Cisg
ICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGhpc3RvcnlJdGVtID0gRVdLUHJpdmF0ZTo6Y29yZUhp
c3RvcnlJdGVtKGV3a0hpc3RvcnlJdGVtKTsKKyAgICBIaXN0b3J5SXRlbUNoaWxkcmVuTWFwIGtp
ZHM7CisKKyAgICBpZiAoIWhpc3RvcnlJdGVtKQorICAgICAgICByZXR1cm4ga2lkczsKKworICAg
IGNvbnN0IFdlYkNvcmU6Okhpc3RvcnlJdGVtVmVjdG9yJiBjaGlsZHJlbiA9IGhpc3RvcnlJdGVt
LT5jaGlsZHJlbigpOworICAgIGNvbnN0IHVuc2lnbmVkIHNpemUgPSBjaGlsZHJlbi5zaXplKCk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIEV3
a19IaXN0b3J5X0l0ZW0qIGtpZCA9IGV3a19oaXN0b3J5X2l0ZW1fbmV3X2Zyb21fY29yZShjaGls
ZHJlbltpXS5nZXQoKSk7CisgICAgICAgIGtpZHMuc2V0KER1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bDo6aGlzdG9yeUl0ZW1UYXJnZXQoa2lkKSwga2lkKTsKKyAgICB9CisKKyAgICByZXR1cm4ga2lk
czsKK30KKworU3RyaW5nIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6aGlzdG9yeUl0ZW1UYXJn
ZXQoY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogZXdrSGlzdG9yeUl0ZW0pCit7CisgICAgV2ViQ29y
ZTo6SGlzdG9yeUl0ZW0qIGhpc3RvcnlJdGVtID0gRVdLUHJpdmF0ZTo6Y29yZUhpc3RvcnlJdGVt
KGV3a0hpc3RvcnlJdGVtKTsKKworICAgIGlmICghaGlzdG9yeUl0ZW0pCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKworICAgIHJldHVybiBoaXN0b3J5SXRlbS0+dGFyZ2V0KCk7Cit9CisKK2Jv
b2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjppc1RhcmdldEl0ZW0oY29uc3QgRXdrX0hpc3Rv
cnlfSXRlbSogZXdrSGlzdG9yeUl0ZW0pCit7CisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGhp
c3RvcnlJdGVtID0gRVdLUHJpdmF0ZTo6Y29yZUhpc3RvcnlJdGVtKGV3a0hpc3RvcnlJdGVtKTsK
KworICAgIGlmICghaGlzdG9yeUl0ZW0pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiBoaXN0b3J5SXRlbS0+aXNUYXJnZXRJdGVtKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuaCBiL1Nv
dXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjUwOTU2ODIzYjM3MGNiNzA5NDYwZjVlZmNkNDNiYTRlNTBiNjEyZWMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmwuaApAQCAtMCwwICsxLDcyIEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAxMSBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICAgIENvcHlyaWdodCAoQykgMjAx
MSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRF
ZmxfaAorI2RlZmluZSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmxfaAorCisjaW5jbHVkZSA8RWlu
YS5oPgorI2luY2x1ZGUgPEZpbmRPcHRpb25zLmg+CisjaW5jbHVkZSA8SW50UmVjdC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K3R5cGVkZWYgc3RydWN0IF9FdmFzX09iamVjdCBFdmFzX09iamVjdDsKK3R5cGVkZWYgc3RydWN0
IF9Fd2tfSGlzdG9yeV9JdGVtIEV3a19IaXN0b3J5X0l0ZW07CisKK3R5cGVkZWYgSGFzaE1hcDxT
dHJpbmcsIEV3a19IaXN0b3J5X0l0ZW0qPiBIaXN0b3J5SXRlbUNoaWxkcmVuTWFwOworCitjbGFz
cyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwgeworcHVibGljOgorICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbCgpOworICAgIH5EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwoKTsKKworICAgIHN0
YXRpYyB1bnNpZ25lZCBhY3RpdmVBbmltYXRpb25zQ291bnQoY29uc3QgRXZhc19PYmplY3QqIGV3
a0ZyYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBjbGVhckZyYW1lTmFtZShFdmFzX09iamVjdCogZXdr
RnJhbWUpOworICAgIHN0YXRpYyB2b2lkIGNsZWFyT3BlbmVyKEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSk7CisgICAgc3RhdGljIFN0cmluZyBjb3VudGVyVmFsdWVCeUVsZW1lbnRJZChjb25zdCBFdmFz
X09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGVsZW1lbnRJZCk7CisgICAgc3RhdGljIEVp
bmFfTGlzdCogZnJhbWVDaGlsZHJlbihjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpOworICAg
IHN0YXRpYyB2b2lkIGxheW91dEZyYW1lKEV2YXNfT2JqZWN0KiBld2tGcmFtZSk7CisgICAgc3Rh
dGljIGludCBudW1iZXJPZlBhZ2VzKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgZmxvYXQg
cGFnZVdpZHRoLCBmbG9hdCBwYWdlSGVpZ2h0KTsKKyAgICBzdGF0aWMgaW50IG51bWJlck9mUGFn
ZXNGb3JFbGVtZW50SWQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBl
bGVtZW50SWQsIGZsb2F0IHBhZ2VXaWR0aCwgZmxvYXQgcGFnZUhlaWdodCk7CisgICAgc3RhdGlj
IGJvb2wgcGF1c2VBbmltYXRpb24oRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBu
YW1lLCBjb25zdCBjaGFyKiBlbGVtZW50SWQsIGRvdWJsZSB0aW1lKTsKKyAgICBzdGF0aWMgYm9v
bCBwYXVzZVNWR0FuaW1hdGlvbihFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGFu
aW1hdGlvbklkLCBjb25zdCBjaGFyKiBlbGVtZW50SWQsIGRvdWJsZSB0aW1lKTsKKyAgICBzdGF0
aWMgYm9vbCBwYXVzZVRyYW5zaXRpb24oRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFy
KiBuYW1lLCBjb25zdCBjaGFyKiBlbGVtZW50SWQsIGRvdWJsZSB0aW1lKTsKKyAgICBzdGF0aWMg
dW5zaWduZWQgcGVuZGluZ1VubG9hZEV2ZW50Q291bnQoY29uc3QgRXZhc19PYmplY3QqIGV3a0Zy
YW1lKTsKKyAgICBzdGF0aWMgU3RyaW5nIHJlbmRlclRyZWVEdW1wKEV2YXNfT2JqZWN0KiBld2tG
cmFtZSk7CisgICAgc3RhdGljIFN0cmluZyByZXNwb25zZU1pbWVUeXBlKGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSk7CisgICAgc3RhdGljIHZvaWQgcmVzdW1lQW5pbWF0aW9ucyhFdmFzX09i
amVjdCogZXdrRnJhbWUpOworICAgIHN0YXRpYyBXZWJDb3JlOjpJbnRSZWN0IHNlbGVjdGlvblJl
Y3RhbmdsZShjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpOworICAgIHN0YXRpYyBTdHJpbmcg
c3VpdGFibGVEUlRGcmFtZU5hbWUoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKTsKKyAgICBz
dGF0aWMgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhFdmFzX09iamVjdCogZXdrRnJhbWUpOworCisg
ICAgc3RhdGljIGJvb2wgZmluZFN0cmluZyhjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgY29u
c3QgY2hhciogdGV4dCwgV2ViQ29yZTo6RmluZE9wdGlvbnMpOworICAgIHN0YXRpYyB2b2lkIHNj
YWxlUGFnZShFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgc2NhbGVGYWN0b3IsIGZsb2F0IHgs
IGZsb2F0IHkpOworCisgICAgc3RhdGljIHZvaWQgZ2FyYmFnZUNvbGxlY3RvckNvbGxlY3QoKTsK
KyAgICBzdGF0aWMgdm9pZCBnYXJiYWdlQ29sbGVjdG9yQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFk
KGJvb2wgd2FpdFVudGlsRG9uZSk7CisgICAgc3RhdGljIHNpemVfdCBqYXZhU2NyaXB0T2JqZWN0
c0NvdW50KCk7CisgICAgc3RhdGljIHVuc2lnbmVkIHdvcmtlclRocmVhZENvdW50KCk7CisKKyAg
ICBzdGF0aWMgSGlzdG9yeUl0ZW1DaGlsZHJlbk1hcCBjaGlsZEhpc3RvcnlJdGVtcyhjb25zdCBF
d2tfSGlzdG9yeV9JdGVtKik7CisgICAgc3RhdGljIFN0cmluZyBoaXN0b3J5SXRlbVRhcmdldChj
b25zdCBFd2tfSGlzdG9yeV9JdGVtKik7CisgICAgc3RhdGljIGJvb2wgaXNUYXJnZXRJdGVtKGNv
bnN0IEV3a19IaXN0b3J5X0l0ZW0qKTsKK307CisKKyNlbmRpZiAvLyBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmxfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAppbmRleCA5MzgxNWIyZGQx
ZTJlMjQ1ZTE2ZmVjMjVmYTJkZTg2ZjVmM2RmNDBhLi5mN2VlNGY0YmZhOTg3OGU3MDMyMGI4MGEz
M2JiMjk4YTcwMzJlMDZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2Zy
YW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcApAQCAtMjks
NyArMjksNiBAQAogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkZvY3VzQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50RWZsLmgiCi0jaW5jbHVkZSAi
RnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTENvbGxl
Y3Rpb24uaCIKICNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKQEAgLTE2NjUsMyArMTY2NCwx
MyBAQCB2b2lkIGV3a19mcmFtZV9lZGl0b3JfY2xpZW50X2NvbnRlbnRzX2NoYW5nZWQoRXZhc19P
YmplY3QgKm8pCiAgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOwogICAgIGV3
a192aWV3X2VkaXRvcl9jbGllbnRfY29udGVudHNfY2hhbmdlZChzZC0+dmlldyk7CiB9CisKK25h
bWVzcGFjZSBFV0tQcml2YXRlIHsKKworV2ViQ29yZTo6RnJhbWUgKmNvcmVGcmFtZShjb25zdCBF
dmFzX09iamVjdCAqZXdrRnJhbWUpCit7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNkLCAwKTsKKyAgICByZXR1cm4gc2QtPmZyYW1lOworfQorCit9IC8vIG5hbWVz
cGFjZSBFV0tQcml2YXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hp
c3RvcnkuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5LmNwcAppbmRleCA5
MWM3YzVjMTViNzMxNTllM2NkYmViZDIyN2E1MmU4ZDAwYjFhOWUwLi40NWQxNGIyYjU0M2UzMjA3
NWJhODM4ZDFjMGExNjE5OGFiNmI3NDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX2hpc3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaGlzdG9y
eS5jcHAKQEAgLTc0LDI3ICs3NCw2IEBAIHN0cnVjdCBfRXdrX0hpc3RvcnlfSXRlbSB7CiAgICAg
V2ViQ29yZTo6SGlzdG9yeUl0ZW0gKmNvcmVfID0gKGl0ZW0pLT5jb3JlCiAKIAotc3RhdGljIGlu
bGluZSBFd2tfSGlzdG9yeV9JdGVtICpfZXdrX2hpc3RvcnlfaXRlbV9uZXcoV2ViQ29yZTo6SGlz
dG9yeUl0ZW0gKmNvcmUpCi17Ci0gICAgRXdrX0hpc3RvcnlfSXRlbSogaXRlbTsKLQotICAgIGlm
ICghY29yZSkgewotICAgICAgICBFUlIoIldlYkNvcmU6Okhpc3RvcnlJdGVtIGlzIE5VTEwuIik7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGl0ZW0gPSAoRXdrX0hpc3RvcnlfSXRl
bSAqKWNhbGxvYygxLCBzaXplb2YoRXdrX0hpc3RvcnlfSXRlbSkpOwotICAgIGlmICghaXRlbSkg
ewotICAgICAgICBDUklUSUNBTCgiQ291bGQgbm90IGFsbG9jYXRlIGl0ZW0gbWVtb3J5LiIpOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBjb3JlLT5yZWYoKTsKLSAgICBpdGVtLT5j
b3JlID0gY29yZTsKLQotICAgIHJldHVybiBpdGVtOwotfQotCiBzdGF0aWMgaW5saW5lIEVpbmFf
TGlzdCAqX2V3a19oaXN0b3J5X2l0ZW1fbGlzdF9nZXQoY29uc3QgV2ViQ29yZTo6SGlzdG9yeUl0
ZW1WZWN0b3IgJmNvcmVfaXRlbXMpCiB7CiAgICAgRWluYV9MaXN0KiByZXQgPSAwOwpAQCAtMTAy
LDcgKzgxLDcgQEAgc3RhdGljIGlubGluZSBFaW5hX0xpc3QgKl9ld2tfaGlzdG9yeV9pdGVtX2xp
c3RfZ2V0KGNvbnN0IFdlYkNvcmU6Okhpc3RvcnlJdGVtVmUKIAogICAgIHNpemUgPSBjb3JlX2l0
ZW1zLnNpemUoKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIEV3
a19IaXN0b3J5X0l0ZW0qIGl0ZW0gPSBfZXdrX2hpc3RvcnlfaXRlbV9uZXcoY29yZV9pdGVtc1tp
XS5nZXQoKSk7CisgICAgICAgIEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0gPSBld2tfaGlzdG9yeV9p
dGVtX25ld19mcm9tX2NvcmUoY29yZV9pdGVtc1tpXS5nZXQoKSk7CiAgICAgICAgIGlmIChpdGVt
KQogICAgICAgICAgICAgcmV0ID0gZWluYV9saXN0X2FwcGVuZChyZXQsIGl0ZW0pOwogICAgIH0K
QEAgLTE0Nyw3ICsxMjYsNyBAQCBFaW5hX0Jvb2wgZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX3Nl
dChFd2tfSGlzdG9yeSogaGlzdG9yeSwgY29uc3QgRXdrX0hpc3RvcnlfSQogRXdrX0hpc3Rvcnlf
SXRlbSogZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX2JhY2tfZ2V0KGNvbnN0IEV3a19IaXN0b3J5
KiBoaXN0b3J5KQogewogICAgIEVXS19ISVNUT1JZX0NPUkVfR0VUX09SX1JFVFVSTihoaXN0b3J5
LCBjb3JlLCAwKTsKLSAgICByZXR1cm4gX2V3a19oaXN0b3J5X2l0ZW1fbmV3KGNvcmUtPmJhY2tJ
dGVtKCkpOworICAgIHJldHVybiBld2tfaGlzdG9yeV9pdGVtX25ld19mcm9tX2NvcmUoY29yZS0+
YmFja0l0ZW0oKSk7CiB9CiAKIEV3a19IaXN0b3J5X0l0ZW0qIGV3a19oaXN0b3J5X2hpc3Rvcnlf
aXRlbV9jdXJyZW50X2dldChjb25zdCBFd2tfSGlzdG9yeSogaGlzdG9yeSkKQEAgLTE1NSwyMCAr
MTM0LDIwIEBAIEV3a19IaXN0b3J5X0l0ZW0qIGV3a19oaXN0b3J5X2hpc3RvcnlfaXRlbV9jdXJy
ZW50X2dldChjb25zdCBFd2tfSGlzdG9yeSogaGlzdG9yCiAgICAgRVdLX0hJU1RPUllfQ09SRV9H
RVRfT1JfUkVUVVJOKGhpc3RvcnksIGNvcmUsIDApOwogICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVt
ICpjdXJyZW50SXRlbSA9IGNvcmUtPmN1cnJlbnRJdGVtKCk7CiAgICAgaWYgKGN1cnJlbnRJdGVt
KQotICAgICAgICByZXR1cm4gX2V3a19oaXN0b3J5X2l0ZW1fbmV3KGN1cnJlbnRJdGVtKTsKKyAg
ICAgICAgcmV0dXJuIGV3a19oaXN0b3J5X2l0ZW1fbmV3X2Zyb21fY29yZShjdXJyZW50SXRlbSk7
CiAgICAgcmV0dXJuIDA7CiB9CiAKIEV3a19IaXN0b3J5X0l0ZW0qIGV3a19oaXN0b3J5X2hpc3Rv
cnlfaXRlbV9mb3J3YXJkX2dldChjb25zdCBFd2tfSGlzdG9yeSogaGlzdG9yeSkKIHsKICAgICBF
V0tfSElTVE9SWV9DT1JFX0dFVF9PUl9SRVRVUk4oaGlzdG9yeSwgY29yZSwgMCk7Ci0gICAgcmV0
dXJuIF9ld2tfaGlzdG9yeV9pdGVtX25ldyhjb3JlLT5mb3J3YXJkSXRlbSgpKTsKKyAgICByZXR1
cm4gZXdrX2hpc3RvcnlfaXRlbV9uZXdfZnJvbV9jb3JlKGNvcmUtPmZvcndhcmRJdGVtKCkpOwog
fQogCiBFd2tfSGlzdG9yeV9JdGVtKiBld2tfaGlzdG9yeV9oaXN0b3J5X2l0ZW1fbnRoX2dldChj
b25zdCBFd2tfSGlzdG9yeSogaGlzdG9yeSwgaW50IGluZGV4KQogewogICAgIEVXS19ISVNUT1JZ
X0NPUkVfR0VUX09SX1JFVFVSTihoaXN0b3J5LCBjb3JlLCAwKTsKLSAgICByZXR1cm4gX2V3a19o
aXN0b3J5X2l0ZW1fbmV3KGNvcmUtPml0ZW1BdEluZGV4KGluZGV4KSk7CisgICAgcmV0dXJuIGV3
a19oaXN0b3J5X2l0ZW1fbmV3X2Zyb21fY29yZShjb3JlLT5pdGVtQXRJbmRleChpbmRleCkpOwog
fQogCiBFaW5hX0Jvb2wgZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX2NvbnRhaW5zKGNvbnN0IEV3
a19IaXN0b3J5KiBoaXN0b3J5LCBjb25zdCBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtKQpAQCAtMjM3
LDEyICsyMTYsMzMgQEAgRWluYV9Cb29sIGV3a19oaXN0b3J5X2xpbWl0X3NldChjb25zdCBFd2tf
SGlzdG9yeSogaGlzdG9yeSwgaW50IGxpbWl0KQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAK
K0V3a19IaXN0b3J5X0l0ZW0qIGV3a19oaXN0b3J5X2l0ZW1fbmV3X2Zyb21fY29yZShXZWJDb3Jl
OjpIaXN0b3J5SXRlbSogY29yZSkKK3sKKyAgICBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtOworCisg
ICAgaWYgKCFjb3JlKSB7CisgICAgICAgIEVSUigiV2ViQ29yZTo6SGlzdG9yeUl0ZW0gaXMgTlVM
TC4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaXRlbSA9IChFd2tfSGlzdG9y
eV9JdGVtKiljYWxsb2MoMSwgc2l6ZW9mKEV3a19IaXN0b3J5X0l0ZW0pKTsKKyAgICBpZiAoIWl0
ZW0pIHsKKyAgICAgICAgQ1JJVElDQUwoIkNvdWxkIG5vdCBhbGxvY2F0ZSBpdGVtIG1lbW9yeS4i
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgY29yZS0+cmVmKCk7CisgICAgaXRl
bS0+Y29yZSA9IGNvcmU7CisKKyAgICByZXR1cm4gaXRlbTsKK30KKwogRXdrX0hpc3RvcnlfSXRl
bSogZXdrX2hpc3RvcnlfaXRlbV9uZXcoY29uc3QgY2hhciogdXJpLCBjb25zdCBjaGFyKiB0aXRs
ZSkKIHsKICAgICBXVEY6OlN0cmluZyB1ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHVyaSk7CiAg
ICAgV1RGOjpTdHJpbmcgdCA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh0aXRsZSk7CiAgICAgV1RG
OjpSZWZQdHI8V2ViQ29yZTo6SGlzdG9yeUl0ZW0+IGNvcmUgPSBXZWJDb3JlOjpIaXN0b3J5SXRl
bTo6Y3JlYXRlKHUsIHQsIDApOwotICAgIEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0gPSBfZXdrX2hp
c3RvcnlfaXRlbV9uZXcoY29yZS5yZWxlYXNlKCkucmVsZWFzZVJlZigpKTsKKyAgICBFd2tfSGlz
dG9yeV9JdGVtKiBpdGVtID0gZXdrX2hpc3RvcnlfaXRlbV9uZXdfZnJvbV9jb3JlKGNvcmUucmVs
ZWFzZSgpLnJlbGVhc2VSZWYoKSk7CiAgICAgcmV0dXJuIGl0ZW07CiB9CiAKQEAgLTQxMCw1MSAr
NDEwLDEyIEBAIHZvaWQgZXdrX2hpc3RvcnlfZnJlZShFd2tfSGlzdG9yeSogaGlzdG9yeSkKICAg
ICBmcmVlKGhpc3RvcnkpOwogfQogCi0vKioKLSAqIEBpbnRlcm5hbAotICoKLSAqIFJldHVybnMg
YSBuZXdseS1hbGxvY2F0ZWQgc3RyaW5nIHdpdGggdGhlIGl0ZW0ncyB0YXJnZXQgbmFtZS4KLSAq
IENhbGxlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHRoZSBhbGxvY2F0ZWQgbWVtb3J5
IHdpdGggZnJlZSgzKS4KLSAqCi0gKiBAcGFyYW0gaXRlbSBpbnN0YW5jZSB0byBvcGVyYXRlIHVw
b24uCi0gKi8KLWNoYXIqIGV3a19oaXN0b3J5X2l0ZW1fdGFyZ2V0X2dldChjb25zdCBFd2tfSGlz
dG9yeV9JdGVtKiBpdGVtKQotewotICAgIEVXS19ISVNUT1JZX0lURU1fQ09SRV9HRVRfT1JfUkVU
VVJOKGl0ZW0sIGNvcmUsIDApOwotICAgIHJldHVybiBzdHJkdXAoY29yZS0+dGFyZ2V0KCkudXRm
OCgpLmRhdGEoKSk7Ci19CituYW1lc3BhY2UgRVdLUHJpdmF0ZSB7CiAKLS8qKgotICogQGludGVy
bmFsCi0gKgotICogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBpdGVtIGlzIGN1cnJlbnRseSBh
IHRhcmdldC4KLSAqCi0gKiBAcGFyYW0gaXRlbSBpbnN0YW5jZSB0byBjaGVjay4KLSAqLwotRWlu
YV9Cb29sIGV3a19oaXN0b3J5X2l0ZW1fdGFyZ2V0X2lzKGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0q
IGl0ZW0pCitXZWJDb3JlOjpIaXN0b3J5SXRlbSogY29yZUhpc3RvcnlJdGVtKGNvbnN0IEV3a19I
aXN0b3J5X0l0ZW0qIGV3a0hpc3RvcnlJdGVtKQogewotICAgIEVXS19ISVNUT1JZX0lURU1fQ09S
RV9HRVRfT1JfUkVUVVJOKGl0ZW0sIGNvcmUsIDApOwotICAgIHJldHVybiBjb3JlLT5pc1Rhcmdl
dEl0ZW0oKTsKKyAgICBFV0tfSElTVE9SWV9JVEVNX0NPUkVfR0VUX09SX1JFVFVSTihld2tIaXN0
b3J5SXRlbSwgY29yZSwgMCk7CisgICAgcmV0dXJuIGNvcmU7CiB9CiAKLS8qKgotICogQGludGVy
bmFsCi0gKgotICogUmV0dXJucyBhIGxpc3Qgb2YgY2hpbGQgaGlzdG9yeSBpdGVtcyByZWxhdGl2
ZSB0byB0aGUgZ2l2ZW4gaXRlbSwKLSAqIG9yIEBjIE5VTEwgaWYgdGhlcmUgYXJlIG5vbmUuCi0g
KgotICogQHBhcmFtIGl0ZW0gaW5zdGFuY2UgdG8gb3BlcmF0ZSB1cG9uLgotICovCi1FaW5hX0xp
c3QqIGV3a19oaXN0b3J5X2l0ZW1fY2hpbGRyZW5fZ2V0KGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0q
IGl0ZW0pCi17Ci0gICAgRVdLX0hJU1RPUllfSVRFTV9DT1JFX0dFVF9PUl9SRVRVUk4oaXRlbSwg
Y29yZSwgMCk7Ci0gICAgY29uc3QgV2ViQ29yZTo6SGlzdG9yeUl0ZW1WZWN0b3ImIGNoaWxkcmVu
ID0gY29yZS0+Y2hpbGRyZW4oKTsKLSAgICBpZiAoIWNoaWxkcmVuLnNpemUoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBFaW5hX0xpc3QqIGtpZHMgPSAwOwotICAgIGNvbnN0IHVuc2lnbmVk
IHNpemUgPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7ICsraSkKLSAgICAgICAga2lkcyA9IGVpbmFfbGlzdF9hcHBlbmQoa2lkcywgX2V3a19oaXN0
b3J5X2l0ZW1fbmV3KGNoaWxkcmVuW2ldLmdldCgpKSk7Ci0gICAgcmV0dXJuIGtpZHM7Ci19Cit9
IC8vIG5hbWVzcGFjZSBFV0tQcml2YXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfcHJpdmF0ZS5oCmlu
ZGV4IDM0MzMzODg1N2FkMGRhNDg3YzUxNzIxNGZlZGI3NWE5MmUyODc0NGEuLmU3MjU3NjQ0ODkz
MzY5YTZlNWU0ZDZiYTdmZDI3NmE3NTVmMzlmZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfcHJp
dmF0ZS5oCkBAIC03Nyw2ICs3NywxNCBAQCBzdHJ1Y3QgRXdrX1dpbmRvd19PYmplY3RfQ2xlYXJl
ZF9FdmVudCB7CiAgICAgRXZhc19PYmplY3QqIGZyYW1lOwogfTsKIAorbmFtZXNwYWNlIEVXS1By
aXZhdGUgeworCitXZWJDb3JlOjpGcmFtZSAqY29yZUZyYW1lKGNvbnN0IEV2YXNfT2JqZWN0ICpl
d2tGcmFtZSk7CitXZWJDb3JlOjpQYWdlICpjb3JlUGFnZShjb25zdCBFdmFzX09iamVjdCAqZXdr
Vmlldyk7CitXZWJDb3JlOjpIaXN0b3J5SXRlbSAqY29yZUhpc3RvcnlJdGVtKGNvbnN0IEV3a19I
aXN0b3J5X0l0ZW0gKmV3a0hpc3RvcnlJdGVtKTsKKworfSAvLyBuYW1lc3BhY2UgRVdLUHJpdmF0
ZQorCiB2b2lkIGV3a192aWV3X3JlYWR5KEV2YXNfT2JqZWN0ICpvKTsKIHZvaWQgZXdrX3ZpZXdf
aW5wdXRfbWV0aG9kX3N0YXRlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIGFjdGl2ZSk7
CiB2b2lkIGV3a192aWV3X3RpdGxlX3NldChFdmFzX09iamVjdCAqbywgY29uc3QgY2hhciAqdGl0
bGUpOwpAQCAtMTQ0LDIxICsxNTIsMTUgQEAgdm9pZCBld2tfdmlld19qc193aW5kb3dfb2JqZWN0
X2NsZWFyKEV2YXNfT2JqZWN0ICpvLCBFdmFzX09iamVjdCAqZnJhbWUpOwogI2VuZGlmCiAKIGlu
dCBld2tfdXRpbF9kcGlfZ2V0KHZvaWQpOwotdm9pZCBld2tfdXRpbF9qYXZhc2NyaXB0X2djX2Nv
bGxlY3QoKTsKLXZvaWQgZXdrX3V0aWxfamF2YXNjcmlwdF9nY19hbHRlcm5hdGVfdGhyZWFkX2Nv
bGxlY3QoRWluYV9Cb29sIHdhaXRVbnRpbERvbmUpOwotdW5zaWduZWQgZXdrX3V0aWxfamF2YXNj
cmlwdF9nY19vYmplY3RfY291bnRfZ2V0KCk7Ci11bnNpZ25lZCBld2tfdXRpbF93b3JrZXJfdGhy
ZWFkX2NvdW50KCk7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogdm9pZCBld2tfdmlld19u
ZWVkX3RvdWNoX2V2ZW50c19zZXQoRXZhc19PYmplY3QqLCBib29sIG5lZWRlZCk7CiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfbmVlZF90b3VjaF9ldmVudHNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0Kik7CiAj
ZW5kaWYKIAorRXdrX0hpc3RvcnlfSXRlbSAqZXdrX2hpc3RvcnlfaXRlbV9uZXdfZnJvbV9jb3Jl
KFdlYkNvcmU6Okhpc3RvcnlJdGVtICpjb3JlKTsKIEV3a19IaXN0b3J5ICpld2tfaGlzdG9yeV9u
ZXcoV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1wbCAqaGlzdG9yeSk7CiB2b2lkIGV3a19oaXN0
b3J5X2ZyZWUoRXdrX0hpc3RvcnkgKmhpc3RvcnkpOwotY2hhciAqZXdrX2hpc3RvcnlfaXRlbV90
YXJnZXRfZ2V0KGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0gKml0ZW0pOwotRWluYV9Cb29sIGV3a19o
aXN0b3J5X2l0ZW1fdGFyZ2V0X2lzKGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0gKml0ZW0pOwotRWlu
YV9MaXN0ICpld2tfaGlzdG9yeV9pdGVtX2NoaWxkcmVuX2dldChjb25zdCBFd2tfSGlzdG9yeV9J
dGVtICppdGVtKTsKIAogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogRXdrX0NvbnRleHRfTWVu
dSAqZXdrX2NvbnRleHRfbWVudV9uZXcoRXZhc19PYmplY3QgKnZpZXcsIFdlYkNvcmU6OkNvbnRl
eHRNZW51Q29udHJvbGxlciAqY29udHJvbGxlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX3V0aWwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a191dGlsLmNw
cAppbmRleCAwOGIzYzAzZWM4YWUzYzI5MzMxYjQ0ODA2ZDI4ZjJjMWM2YTYyMzI1Li5mOGI0ZmM4
MGMxMWMxMzUyZDBkMTBkMjIyMDQxMTRiNzQ4ODgxY2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX3V0aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
dXRpbC5jcHAKQEAgLTIxLDkgKzIxLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJld2tfdXRpbC5oIgogCi0jaW5jbHVkZSAiYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmgiCi0j
aW5jbHVkZSAid29ya2Vycy9Xb3JrZXJUaHJlYWQuaCIKLQogI2luY2x1ZGUgImV3a19wcml2YXRl
LmgiCiAjaW5jbHVkZSA8ZWluYV9zYWZldHlfY2hlY2tzLmg+CiAKQEAgLTExMyw1MyArMTEwLDYg
QEAgRXZhc19PYmplY3QgKmV3a191dGlsX2ltYWdlX2Zyb21fY2Fpcm9fc3VyZmFjZV9hZGQoRXZh
cyAqY2FudmFzLCBjYWlyb19zdXJmYWNlX3QKIAogLyoqCiAgKiBAaW50ZXJuYWwKLSAqCi0gKiBQ
ZXJmb3JtcyBnYXJiYWdlIGNvbGxlY3Rpb24gb2YgSmF2YVNjcmlwdCBvYmplY3RzLgotICovCi12
b2lkIGV3a191dGlsX2phdmFzY3JpcHRfZ2NfY29sbGVjdCgpCi17Ci0gICAgV2ViQ29yZTo6Z2ND
b250cm9sbGVyKCkuZ2FyYmFnZUNvbGxlY3ROb3coKTsKLX0KLQotLyoqCi0gKiBAaW50ZXJuYWwK
LSAqCi0gKiBQZXJmb3JtcyBnYXJiYWdlIGNvbGxlY3Rpb24gb2YgSmF2YVNjcmlwdCBvYmplY3Rz
IGluIGEgc2VwYXJhdGUgdGhyZWFkLgotICoKLSAqIEBwYXJhbSB3YWl0VW50aWxEb25lIElmIEBj
IFRSVUUsIHdhaXQgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiB0aHJlYWQgdG8gZmluaXNoOyBpZiBA
YyBGQUxTRSwKLSAqIHJldHVybiBhcyBzb29uIGFzIHRoZSB0aHJlYWQgaGFzIGJlZW4gY3JlYXRl
ZC4KLSAqLwotdm9pZCBld2tfdXRpbF9qYXZhc2NyaXB0X2djX2FsdGVybmF0ZV90aHJlYWRfY29s
bGVjdChFaW5hX0Jvb2wgd2FpdFVudGlsRG9uZSkKLXsKLSAgICBXZWJDb3JlOjpnY0NvbnRyb2xs
ZXIoKS5nYXJiYWdlQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5nKHdhaXRVbnRp
bERvbmUpOwotfQotCi0vKioKLSAqIEBpbnRlcm5hbAotICoKLSAqIFJldHVybnMgdGhlIG51bWJl
ciBvZiBjdXJyZW50IEphdmFTY3JpcHQgb2JqZWN0cy4KLSAqLwotdW5zaWduZWQgZXdrX3V0aWxf
amF2YXNjcmlwdF9nY19vYmplY3RfY291bnRfZ2V0KCkKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6
SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdENvdW50KCk7Ci19
Ci0KLS8qKgotICogQGludGVybmFsCi0gKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGN1cnJl
bnQgd29ya2VkIHRocmVhZHMuCi0gKi8KLXVuc2lnbmVkIGV3a191dGlsX3dvcmtlcl90aHJlYWRf
Y291bnQoKQotewotI2lmIEVOQUJMRShXT1JLRVJTKQotICAgIHJldHVybiBXZWJDb3JlOjpXb3Jr
ZXJUaHJlYWQ6OndvcmtlclRocmVhZENvdW50KCk7Ci0jZWxzZQotICAgIHJldHVybiAwOwotI2Vu
ZGlmCi19Ci0KLS8qKgotICogQGludGVybmFsCiAgKiBHZXRzIGRwaSB2YWx1ZS4KICAqCiAgKiBA
cmV0dXJuIGRldmljZSdzIGRwaSB2YWx1ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCmlu
ZGV4IGNlNTU1ZmRlZDIxZWQ4OGI0ZGNlMTM3MTNmMmRmOGYxNWU2ZWE4ZTUuLjVlZWE5NTg4MmY3
ZTNjMTEwMjQ1MmJjZjQzZjk5YTEyY2M4MTcxOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3
LmNwcApAQCAtMzc4MSwzICszNzgxLDE0IEBAIHZvaWQgZXdrX3ZpZXdfZWRpdG9yX2NsaWVudF9j
b250ZW50c19jaGFuZ2VkKEV2YXNfT2JqZWN0ICpvKQogewogICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2NhbGwobywgImVkaXRvcmNsaWVudCxjb250ZW50cyxjaGFuZ2VkIiwgMCk7CiB9
CisKK25hbWVzcGFjZSBFV0tQcml2YXRlIHsKKworV2ViQ29yZTo6UGFnZSAqY29yZVBhZ2UoY29u
c3QgRXZhc19PYmplY3QgKmV3a1ZpZXcpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCAwKTsKKyAgICByZXR1cm4gcHJpdi0+cGFnZTsKK30KKworfSAvLyBuYW1lc3BhY2UgRVdL
UHJpdmF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL2VmbHN5bWJvbHMuZmlsdGVyIGIvU291
cmNlL2NtYWtlL2VmbHN5bWJvbHMuZmlsdGVyCmluZGV4IDM1NmEwMGM1YzZhYWRjNmFmNGZlMmU2
Mjc3MWUwY2NiOTVhODE0N2UuLjJiY2IzY2VkOGJkOTA2YjhkNzQ1ZmI0ODJhZmQ2NDllYjMxNTc4
OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9lZmxzeW1ib2xzLmZpbHRlcgorKysgYi9Tb3Vy
Y2UvY21ha2UvZWZsc3ltYm9scy5maWx0ZXIKQEAgLTEsNiArMSwxMSBAQAogewogICAgICAgICBn
bG9iYWw6CiAgICAgICAgICAgICAgICAgZXdrXyo7CisKKyAgICAgICAgICAgICAgICBleHRlcm4g
IkMrKyIgeworICAgICAgICAgICAgICAgICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwq
OworICAgICAgICAgICAgICAgIH07CisKICAgICAgICAgbG9jYWw6CiAgICAgICAgICAgICAgICAg
KjsKIH07CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggMmQ0NzFmNThkZmFiYTE1NDEyMTg2NjE4NTQ2MGEwNGRiNTM3ZWMwZi4uZjA2ODM0ZjY0YzEx
MjU0NzhkYzYwYzY2ZDZlNzJiMDQxZGM5NDhkNyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDExLTA5LTIwICBSYXBo
YWVsIEt1Ym8gZGEgQ29zdGEgIDxrdWJvQHByb2Z1c2lvbi5tb2JpPgorCisgICAgICAgIFtFRkxd
IEFkZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NDU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRhcHQgZnVuY3Rpb24gY2FsbHMgd2hpY2ggaGF2ZSBiZWVu
IG1vdmVkIHRvCisgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC4KKworICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2VmbC9HQ0NvbnRyb2xsZXJFZmwuY3BwOgorICAgICAgICAoR0NDb250
cm9sbGVyOjpjb2xsZWN0KToKKyAgICAgICAgKEdDQ29udHJvbGxlcjo6Y29sbGVjdE9uQWx0ZXJu
YXRlVGhyZWFkKToKKyAgICAgICAgKEdDQ29udHJvbGxlcjo6Z2V0SlNPYmplY3RDb3VudCk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcDoK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjb3VudGVyVmFsdWVGb3JFbGVtZW50QnlJ
ZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZU51bWJlckZvckVsZW1lbnRC
eUlkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBhZ2VzKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjp3b3JrZXJUaHJlYWRDb3VudCk6CisgICAgICAg
IChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyk6IEJlc2lkZXMgdGhlIHJlbmFtaW5n
LCBub3cgdXNlIHRoZQorICAgICAgICByaWdodCBXZWJDb3JlIGNhbGwgdG8gZmluZCBzdHJpbmdz
LgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25F
bGVtZW50V2l0aElkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZVRyYW5z
aXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNhbXBsZVNWR0FuaW1hdGlvbkZvckVsZW1lbnRBdFRpbWUpOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnMpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2VmbC9QaXhlbER1bXBTdXBwb3J0RWZsLmNwcDoKKyAgICAgICAgKGNyZWF0ZUJpdG1hcENvbnRl
eHRGcm9tV2ViVmlldyk6CisKIDIwMTEtMDktMjAgIExlYW5kcm8gUGVyZWlyYSAgPGxlYW5kcm9A
cHJvZnVzaW9uLm1vYmk+CiAKICAgICAgICAgQ2hhbmdlbG9nIGNsYXNzIHNob3VsZCBoYXZlIGEg
bWV0aG9kIHRvIHJldHVybiBhbGwgZW50cmllcwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvZWZsL0dDQ29udHJvbGxlckVmbC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwv
R0NDb250cm9sbGVyRWZsLmNwcAppbmRleCBmMzg1MmYxZmI0ZDJiZGVmYzk5MmE5YzJhNTVjNTI2
MDQ4NmRhMzQ3Li4xZjU1YTVjZTYwODhiNWVmOGFjYWZjYjI3ZGU1ZWFiZTE0YjZjMTNmIDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvR0NDb250cm9sbGVyRWZsLmNwcAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvR0NDb250cm9sbGVyRWZsLmNwcApAQCAtMzAsMTkg
KzMwLDIwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgi
CiAKKyNpbmNsdWRlICJXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuaCIK
ICNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgogCiB2b2lkIEdDQ29udHJvbGxlcjo6Y29sbGVjdCgp
IGNvbnN0CiB7Ci0gICAgZXdrX3V0aWxfamF2YXNjcmlwdF9nY19jb2xsZWN0KCk7CisgICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsOjpnYXJiYWdlQ29sbGVjdG9yQ29sbGVjdCgpOwogfQogCiB2
b2lkIEdDQ29udHJvbGxlcjo6Y29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKGJvb2wgd2FpdFVudGls
RG9uZSkgY29uc3QKIHsKLSAgICBld2tfdXRpbF9qYXZhc2NyaXB0X2djX2FsdGVybmF0ZV90aHJl
YWRfY29sbGVjdCh3YWl0VW50aWxEb25lKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6
OmdhcmJhZ2VDb2xsZWN0b3JDb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQod2FpdFVudGlsRG9uZSk7
CiB9CiAKIHNpemVfdCBHQ0NvbnRyb2xsZXI6OmdldEpTT2JqZWN0Q291bnQoKSBjb25zdAogewot
ICAgIHJldHVybiBld2tfdXRpbF9qYXZhc2NyaXB0X2djX29iamVjdF9jb3VudF9nZXQoKTsKKyAg
ICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50
KCk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENv
bnRyb2xsZXJFZmwuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250
cm9sbGVyRWZsLmNwcAppbmRleCBkYTZmZmI3M2IwNDc3NmZlYmVjYmExYjU3M2UyM2E4YWVjOWFk
MDM3Li42NGVjNDNjYjI1MGFiYjU0Nzg2YjU5MzBlYjkxYjEyODMyM2ViYTVmIDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAK
QEAgLTM3LDkgKzM3LDEwIEBACiAjaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKIAog
I2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVDaHJv
bWUuaCIKICNpbmNsdWRlICJKU1N0cmluZ1V0aWxzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbmNsdWRlICJPd25GYXN0TWFsbG9jUHRyLmgiCisjaW5jbHVkZSAiV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgi
CiAjaW5jbHVkZSAiV29ya1F1ZXVlSXRlbS5oIgogI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCkBA
IC00OCw2ICs0OSw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcGFxdWVKU1N0cmluZy5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPGVkaXRpbmcvRmlu
ZE9wdGlvbnMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogCiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
fkxheW91dFRlc3RDb250cm9sbGVyKCkKQEAgLTg5LDggKzkxLDkgQEAgdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZGlzcGxheSgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y291bnRlclZhbHVlRm9yRWxlbWVudEJ5SWQoSlNTdHJpbmdSZWYgaWQp
CiB7Ci0gICAgT3duRmFzdE1hbGxvY1B0cjxjaGFyPiBjb3VudGVyVmFsdWUoZXdrX2ZyYW1lX2Nv
dW50ZXJfdmFsdWVfYnlfZWxlbWVudF9pZF9nZXQobWFpbkZyYW1lLCBpZC0+dXN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpKTsKLSAgICByZXR1cm4gSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KEFkb3B0
LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb3VudGVyVmFsdWUuZ2V0KCkpKTsKKyAg
ICBjb25zdCBFdmFzX09iamVjdCogbWFpbkZyYW1lID0gYnJvd3Nlci0+bWFpbkZyYW1lKCk7Cisg
ICAgY29uc3QgU3RyaW5nIGNvdW50ZXJWYWx1ZShEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNv
dW50ZXJWYWx1ZUJ5RWxlbWVudElkKG1haW5GcmFtZSwgaWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0
YSgpKSk7CisgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPihBZG9wdCwgSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoY291bnRlclZhbHVlLnV0ZjgoKS5kYXRhKCkpKTsKIH0K
IAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkoKQpAQCAtMTE4LDEy
ICsxMjEsMTIgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVy
OjpsYXllclRyZWVBc1RleHQoKSBjb25zdAogCiBpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBh
Z2VOdW1iZXJGb3JFbGVtZW50QnlJZChKU1N0cmluZ1JlZiBpZCwgZmxvYXQgcGFnZVdpZHRoLCBm
bG9hdCBwYWdlSGVpZ2h0KQogewotICAgIHJldHVybiBld2tfZnJhbWVfcGFnZV9udW1iZXJfYnlf
ZWxlbWVudF9pZF9nZXQobWFpbkZyYW1lLCBpZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHBh
Z2VXaWR0aCwgcGFnZUhlaWdodCk7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bDo6bnVtYmVyT2ZQYWdlc0ZvckVsZW1lbnRJZChicm93c2VyLT5tYWluRnJhbWUoKSwgaWQtPnVz
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpOwogfQogCiBpbnQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFnZXMoZmxvYXQgcGFnZVdpZHRoLCBmbG9h
dCBwYWdlSGVpZ2h0KQogewotICAgIHJldHVybiBld2tfZnJhbWVfcGFnZV9udW1iZXJfZ2V0KG1h
aW5GcmFtZSwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0KTsKKyAgICByZXR1cm4gRHVtcFJlbmRlclRy
ZWVTdXBwb3J0RWZsOjpudW1iZXJPZlBhZ2VzKGJyb3dzZXItPm1haW5GcmFtZSgpLCBwYWdlV2lk
dGgsIHBhZ2VIZWlnaHQpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBjaGFyKiwgaW50KSBjb25zdApAQCAtMTU1
LDcgKzE1OCw3IEBAIHNpemVfdCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2ViSGlzdG9yeUl0ZW1D
b3VudCgpCiAKIHVuc2lnbmVkIExheW91dFRlc3RDb250cm9sbGVyOjp3b3JrZXJUaHJlYWRDb3Vu
dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV3a191dGlsX3dvcmtlcl90aHJlYWRfY291bnQoKTsK
KyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjp3b3JrZXJUaHJlYWRDb3VudCgp
OwogfQogCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKCkKQEAgLTQ1MCwx
MCArNDUzLDkgQEAgYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgdGFyZ2V0LAogICAgIGlmICghSlNWYWx1ZUlzTnVt
YmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
Ym9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZTsKLSAgICBib29sIGZvcndhcmQgPSB0cnVlOwotICAg
IGJvb2wgd3JhcCA9IGZhbHNlOwotICAgIHNpemVfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOworICAgIFdlYkNv
cmU6OkZpbmRPcHRpb25zIG9wdGlvbnMgPSAwOworCisgICAgY29uc3Qgc2l6ZV90IGxlbmd0aCA9
IHN0YXRpY19jYXN0PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVl
LCAwKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAg
ICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwg
b3B0aW9uc0FycmF5LCBpLCAwKTsKICAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4
dCwgdmFsdWUpKQpAQCAtNDYyLDE0ICs0NjQsMjAgQEAgYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZmluZFN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgdGFyZ2V0LAog
ICAgICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gb3B0aW9uTmFtZShBZG9wdCwgSlNWYWx1
ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCkpOwogCiAgICAgICAgIGlmIChlcXVhbHMo
b3B0aW9uTmFtZSwgIkNhc2VJbnNlbnNpdGl2ZSIpKQotICAgICAgICAgICAgY2FzZVNlbnNpdGl2
ZSA9IGZhbHNlOworICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpDYXNlSW5zZW5zaXRp
dmU7CisgICAgICAgIGVsc2UgaWYgKGVxdWFscyhvcHRpb25OYW1lLCAiQXRXb3JkU3RhcnRzIikp
CisgICAgICAgICAgICBvcHRpb25zIHw9IFdlYkNvcmU6OkF0V29yZFN0YXJ0czsKKyAgICAgICAg
ZWxzZSBpZiAoZXF1YWxzKG9wdGlvbk5hbWUsICJUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFy
dCIpKQorICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpUcmVhdE1lZGlhbENhcGl0YWxB
c1dvcmRTdGFydDsKICAgICAgICAgZWxzZSBpZiAoZXF1YWxzKG9wdGlvbk5hbWUsICJCYWNrd2Fy
ZHMiKSkKLSAgICAgICAgICAgIGZvcndhcmQgPSBmYWxzZTsKKyAgICAgICAgICAgIG9wdGlvbnMg
fD0gV2ViQ29yZTo6QmFja3dhcmRzOwogICAgICAgICBlbHNlIGlmIChlcXVhbHMob3B0aW9uTmFt
ZSwgIldyYXBBcm91bmQiKSkKLSAgICAgICAgICAgIHdyYXAgPSB0cnVlOworICAgICAgICAgICAg
b3B0aW9ucyB8PSBXZWJDb3JlOjpXcmFwQXJvdW5kOworICAgICAgICBlbHNlIGlmIChlcXVhbHMo
b3B0aW9uTmFtZSwgIlN0YXJ0SW5TZWxlY3Rpb24iKSkKKyAgICAgICAgICAgIG9wdGlvbnMgfD0g
V2ViQ29yZTo6U3RhcnRJblNlbGVjdGlvbjsKICAgICB9CiAKLSAgICByZXR1cm4gISFld2tfdmll
d190ZXh0X3NlYXJjaChicm93c2VyLCB0YXJnZXQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBj
YXNlU2Vuc2l0aXZlLCBmb3J3YXJkLCB3cmFwKTsKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsOjpmaW5kU3RyaW5nKGJyb3dzZXItPm1haW5WaWV3KCksIHRhcmdldC0+dXN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCksIG9wdGlvbnMpOwogfQogCiBib29sIExheW91dFRlc3RDb250cm9s
bGVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIG5hbWUpCkBAIC01OTAsMzIgKzU5OCwz
MiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVu
c2lnbmVkIGxvbmcgbG9uZyBzaXplKQogCiBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVz
ZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYXRpb25OYW1l
LCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQogewotICAgIHJldHVybiBld2tf
ZnJhbWVfYW5pbWF0aW9uX3BhdXNlKG1haW5GcmFtZSwgYW5pbWF0aW9uTmFtZS0+dXN0cmluZygp
LnV0ZjgoKS5kYXRhKCksIGVsZW1lbnRJZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRpbWUp
OworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnBhdXNlQW5pbWF0aW9uKGJy
b3dzZXItPm1haW5GcmFtZSgpLCBhbmltYXRpb25OYW1lLT51c3RyaW5nKCkudXRmOCgpLmRhdGEo
KSwgZWxlbWVudElkLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGltZSk7CiB9CiAKIGJvb2wg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJ
ZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVt
ZW50SWQpCiB7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV90cmFuc2l0aW9uX3BhdXNlKG1haW5GcmFt
ZSwgcHJvcGVydHlOYW1lLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZWxlbWVudElkLT51c3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgdGltZSk7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbDo6cGF1c2VUcmFuc2l0aW9uKGJyb3dzZXItPm1haW5GcmFtZSgpLCBwcm9wZXJ0eU5h
bWUtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlbGVtZW50SWQtPnVzdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCB0aW1lKTsKIH0KIAogYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2FtcGxlU1ZH
QW5pbWF0aW9uRm9yRWxlbWVudEF0VGltZShKU1N0cmluZ1JlZiBhbmltYXRpb25JZCwgZG91Ymxl
IHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKIHsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3N2
Z19hbmltYXRpb25fcGF1c2UobWFpbkZyYW1lLCBhbmltYXRpb25JZC0+dXN0cmluZygpLnV0Zjgo
KS5kYXRhKCksIGVsZW1lbnRJZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRpbWUpOworICAg
IHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnBhdXNlU1ZHQW5pbWF0aW9uKGJyb3dz
ZXItPm1haW5GcmFtZSgpLCBhbmltYXRpb25JZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVs
ZW1lbnRJZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRpbWUpOwogfQogCiB1bnNpZ25lZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZXdrX2ZyYW1lX2FuaW1hdGlvbl9hY3RpdmVfbnVtYmVyX2dldChtYWluRnJh
bWUpOworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmFjdGl2ZUFuaW1hdGlv
bnNDb3VudChicm93c2VyLT5tYWluRnJhbWUoKSk7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnN1c3BlbmRBbmltYXRpb25zKCkgY29uc3QKIHsKLSAgICBld2tfZnJhbWVfYW5pbWF0
aW9uX3N1c3BlbmQobWFpbkZyYW1lKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnN1
c3BlbmRBbmltYXRpb25zKGJyb3dzZXItPm1haW5GcmFtZSgpKTsKIH0KIAogdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucygpIGNvbnN0CiB7Ci0gICAgZXdrX2ZyYW1l
X2FuaW1hdGlvbl9yZXN1bWUobWFpbkZyYW1lKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRF
Zmw6OnJlc3VtZUFuaW1hdGlvbnMoYnJvd3Nlci0+bWFpbkZyYW1lKCkpOwogfQogCiB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYsIEpTU3Ry
aW5nUmVmKQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL1BpeGVsRHVtcFN1
cHBvcnRFZmwuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL1BpeGVsRHVtcFN1cHBvcnRF
ZmwuY3BwCmluZGV4IGFlMjllMjYyY2E2NmIxODAzYTg3NjM5MzQ3MmRhOTU0YzNiZDE2NzMuLjdh
Yzk2ZmQ4NjMxNTMzZjAzMjhiZGE4NWQ2YTgxNzE3MDg1NGM4MzEgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2VmbC9QaXhlbER1bXBTdXBwb3J0RWZsLmNwcAorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9lZmwvUGl4ZWxEdW1wU3VwcG9ydEVmbC5jcHAKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgogI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBv
cnRDYWlyby5oIgogI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisjaW5jbHVkZSAiV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmgiCiAjaW5jbHVkZSAiZXdrX3ByaXZhdGUu
aCIKIAogUGFzc1JlZlB0cjxCaXRtYXBDb250ZXh0PiBjcmVhdGVCaXRtYXBDb250ZXh0RnJvbVdl
YlZpZXcoYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCBkcmF3U2VsZWN0aW9uUmVjdCkKQEAgLTUzLDEx
ICs1NCwxMSBAQCBQYXNzUmVmUHRyPEJpdG1hcENvbnRleHQ+IGNyZWF0ZUJpdG1hcENvbnRleHRG
cm9tV2ViVmlldyhib29sLCBib29sLCBib29sLCBib29sCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgaWYgKGRyYXdTZWxlY3Rpb25SZWN0KSB7Ci0gICAgICAgIGludCB4LCB5LCByZWN0V2lkdGgs
IHJlY3RIZWlnaHQ7CisgICAgICAgIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qgc2VsZWN0aW9uUmVj
dCA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2VsZWN0aW9uUmVjdGFuZ2xlKG1haW5GcmFt
ZSk7CiAKLSAgICAgICAgaWYgKGV3a19mcmFtZV9zZWxlY3Rpb25fcmVjdGFuZ2xlX2dldChtYWlu
RnJhbWUsICZ4LCAmeSwgJnJlY3RXaWR0aCwgJnJlY3RIZWlnaHQpKSB7CisgICAgICAgIGlmICgh
c2VsZWN0aW9uUmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNhaXJvX3NldF9saW5lX3dp
ZHRoKGNvbnRleHQuZ2V0KCksIDEuMCk7Ci0gICAgICAgICAgICBjYWlyb19yZWN0YW5nbGUoY29u
dGV4dC5nZXQoKSwgeCwgeSwgcmVjdFdpZHRoLCByZWN0SGVpZ2h0KTsKKyAgICAgICAgICAgIGNh
aXJvX3JlY3RhbmdsZShjb250ZXh0LmdldCgpLCBzZWxlY3Rpb25SZWN0LngoKSwgc2VsZWN0aW9u
UmVjdC55KCksIHNlbGVjdGlvblJlY3Qud2lkdGgoKSwgc2VsZWN0aW9uUmVjdC5oZWlnaHQoKSk7
CiAgICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY29udGV4dC5nZXQoKSwgMS4wLCAw
LjAsIDAuMCwgMS4wKTsKICAgICAgICAgICAgIGNhaXJvX3N0cm9rZShjb250ZXh0LmdldCgpKTsK
ICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108384</attachid>
            <date>2011-09-22 12:36:43 -0700</date>
            <delta_ts>2011-10-10 11:13:37 -0700</delta_ts>
            <desc>Rebase after r95659, export the class to make DRT link without SHARED_CORE</desc>
            <filename>bug-68458-20110922163642.patch</filename>
            <type>text/plain</type>
            <size>42395</size>
            <attacher name="Raphael Kubo da Costa (:rakuco)">rakuco</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTU3NDQKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCAzNjhiZjQ5ZTkwNjY3YzQ1OTA2MWEzMjE3NmJhYmYyZjNkM2U1NDQyLi5mOGUy
YTk0MDAyMGVkYjdiNTg3ZTA5MzRkYzVhZjhhNjVmM2I2NTk2IDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDktMjIgIFJhcGhhZWwg
S3VibyBkYSBDb3N0YSAgPGt1Ym9AcHJvZnVzaW9uLm1vYmk+CisKKyAgICAgICAgW0VGTF0gQWRk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Njg0NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9lZmxzeW1ib2xzLmZpbHRlcjogRXhwb3J0
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbAorICAgICAgICBzeW1ib2xzIHNvIHRoYXQgRHVtcFJl
bmRlclRyZWUgY2FuIGxpbmsgdG8gdGhlbS4KKwogMjAxMS0wOS0yMSAgSnVsaWVuIENoYWZmcmFp
eCAgPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KIAogICAgICAgICBDcmFzaCBpbiBSZW5kZXJCb3g6
OnBhaW50TWFza0ltYWdlcyB3aGVuIEdyYXBoaWNzQ29udGV4dCdzIHBhaW50aW5nIGlzIGRpc2Fi
bGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9DTWFrZUxpc3RzRWZsLnR4dCBiL1Nv
dXJjZS9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0CmluZGV4IGEyNjYwYmY3MmJiNzRkYjA0
OWFjZWQ3NzA4MWUzNGY1OTQyYjE3OTcuLjYxYTAyNDkzZjZlMjE4Yjk4NjI0ZDk2ODAzYjU0YmZm
NWJhNDI1MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0
CisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0CkBAIC0yMiw2ICsyMiwx
NCBAQCBMSVNUKEFQUEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICR7U1FMSVRF
X0lOQ0xVREVfRElSU30KICkKIAorSUYgKEVOQUJMRV9TVkcpCisgIExJU1QoQVBQRU5EIFdlYktp
dF9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgIiR7V0VCQ09SRV9ESVJ9L3N2ZyIKKyAgICAiJHtX
RUJDT1JFX0RJUn0vc3ZnL2FuaW1hdGlvbiIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcmVuZGVyaW5n
L3N2ZyIKKyAgKQorRU5ESUYgKCkKKwogSUYgKEVOQUJMRV9WSURFTykKIExJU1QoQVBQRU5EIFdl
YktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lciIKQEAgLTU5LDYgKzY3LDcgQEAgTElTVChBUFBFTkQgV2ViS2l0X1NP
VVJDRVMKICAgICBlZmwvV2ViQ29yZVN1cHBvcnQvRGV2aWNlT3JpZW50YXRpb25DbGllbnRFZmwu
Y3BwCiAgICAgZWZsL1dlYkNvcmVTdXBwb3J0L0RldmljZU1vdGlvbkNsaWVudEVmbC5jcHAKICAg
ICBlZmwvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEVmbC5jcHAKKyAgICBlZmwvV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcAogICAgIGVmbC9XZWJDb3JlU3VwcG9y
dC9FZGl0b3JDbGllbnRFZmwuY3BwCiAgICAgZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50RWZsLmNwcAogICAgIGVmbC9XZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyRWZsLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IGViYmVhZjFmOTdjNzJiNGRjYTk3ODcy
MGU5NDQzNTc5Y2EwNmRkOWYuLjNlOGY5OWE2YTViNmM3MjA1OTE1NWEwOTMxNzFmZThjYzM5YTNh
MTIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NiBAQAorMjAxMS0wOS0yMiAgUmFwaGFl
bCBLdWJvIGRhIENvc3RhICA8a3Vib0Bwcm9mdXNpb24ubW9iaT4KKworICAgICAgICBbRUZMXSBB
ZGQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02ODQ1OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0c0VmbC50eHQ6IENvbmRpdGlvbmFsbHkgYWRk
IHRoZSBzdmcgZGlyZWN0b3JpZXMgdG8gdGhlCisgICAgICAgIGluY2x1ZGUgcGF0aC4KKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwOiBBZGRlZC4K
KyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6RHVtcFJlbmRlclRyZWVTdXBwb3J0
RWZsKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6fkR1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbCk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmFjdGl2ZUFu
aW1hdGlvbnNDb3VudCk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNsZWFy
RnJhbWVOYW1lKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y2xlYXJPcGVu
ZXIpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpjb3VudGVyVmFsdWVCeUVs
ZW1lbnRJZCk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmZyYW1lQ2hpbGRy
ZW4pOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpsYXlvdXRGcmFtZSk6Cisg
ICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6Om51bWJlck9mUGFnZXMpOgorICAgICAg
ICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpudW1iZXJPZlBhZ2VzRm9yRWxlbWVudElkKToK
KyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6cGF1c2VBbmltYXRpb24pOgorICAg
ICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpwYXVzZVNWR0FuaW1hdGlvbik6CisgICAg
ICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnBhdXNlVHJhbnNpdGlvbik6CisgICAgICAg
IChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnBlbmRpbmdVbmxvYWRFdmVudENvdW50KToKKyAg
ICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6cmVuZGVyVHJlZUR1bXApOgorICAgICAg
ICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpyZXNwb25zZU1pbWVUeXBlKToKKyAgICAgICAg
KER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6cmVzdW1lQW5pbWF0aW9ucyk6CisgICAgICAgIChE
dW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNlbGVjdGlvblJlY3RhbmdsZSk6CisgICAgICAgIChE
dW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJhbWVOYW1lKToKKyAgICAgICAg
KER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c3VzcGVuZEFuaW1hdGlvbnMpOgorICAgICAgICAo
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpmaW5kU3RyaW5nKToKKyAgICAgICAgKER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbDo6c2NhbGVQYWdlKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbDo6Z2FyYmFnZUNvbGxlY3RvckNvbGxlY3QpOgorICAgICAgICAoRHVtcFJlbmRlclRy
ZWVTdXBwb3J0RWZsOjpnYXJiYWdlQ29sbGVjdG9yQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKToK
KyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6amF2YVNjcmlwdE9iamVjdHNDb3Vu
dCk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OndvcmtlclRocmVhZENvdW50
KToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y2hpbGRIaXN0b3J5SXRlbXMp
OgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpoaXN0b3J5SXRlbVRhcmdldCk6
CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmlzVGFyZ2V0SXRlbSk6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmg6IEFkZGVkLgor
ICAgICAgICAqIGV3ay9ld2tfZnJhbWUuY3BwOgorICAgICAgICAoRVdLUHJpdmF0ZTo6Y29yZUZy
YW1lKTogRXhwb3J0IHRoZSBXZWJDb3JlOjpGcmFtZSogcmVsYXRlZCB0byBhbgorICAgICAgICBl
d2tfZnJhbWUuCisgICAgICAgICogZXdrL2V3a19oaXN0b3J5LmNwcDogUmVtb3ZlIGZ1bmN0aW9u
cyB3aGljaCBoYXZlIGJlZW4gbW92ZWQgdG8KKyAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
RWZsLgorICAgICAgICAoX2V3a19oaXN0b3J5X2l0ZW1fbGlzdF9nZXQpOiBfZXdrX2hpc3Rvcnlf
aXRlbV9uZXcgLT4KKyAgICAgICAgZXdrX2hpc3RvcnlfaXRlbV9uZXdfZnJvbV9jb3JlLgorICAg
ICAgICAoZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX2JhY2tfZ2V0KTogRGl0dG8uCisgICAgICAg
IChld2tfaGlzdG9yeV9oaXN0b3J5X2l0ZW1fY3VycmVudF9nZXQpOiBEaXR0by4KKyAgICAgICAg
KGV3a19oaXN0b3J5X2hpc3RvcnlfaXRlbV9mb3J3YXJkX2dldCk6IERpdHRvLgorICAgICAgICAo
ZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX250aF9nZXQpOiBEaXR0by4KKyAgICAgICAgKGV3a19o
aXN0b3J5X2l0ZW1fbmV3KTogRGl0dG8uCisgICAgICAgIChld2tfaGlzdG9yeV9pdGVtX25ld19m
cm9tX2NvcmUpOiBSZW5hbWUgZnJvbSBfZXdrX2hpc3RvcnlfaXRlbV9uZXcuCisgICAgICAgIChF
V0tQcml2YXRlOjpjb3JlSGlzdG9yeUl0ZW0pOiBFeHBvcnQgdGhlIFdlYkNvcmU6Okhpc3RvcnlJ
dGVtKgorICAgICAgICByZWxhdGVkIHRvIGFuIEV3a19IaXN0b3J5X0l0ZW0uCisgICAgICAgICog
ZXdrL2V3a19wcml2YXRlLmg6IENyZWF0ZSB0aGUgRVdLUHJpdmF0ZSBuYW1lc3BhY2UsIHJlbW92
ZSBmdW5jdGlvbnMKKyAgICAgICAgd2hpY2ggaGF2ZSBiZWVuIG1vdmVkIHRvIER1bXBSZW5kZXJU
cmVlU3VwcG9ydEVmbC4KKyAgICAgICAgKiBld2svZXdrX3V0aWwuY3BwOiBSZW1vdmUgZnVuY3Rp
b25zIHdoaWNoIGhhdmUgYmVlbiBtb3ZlZCB0bworICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmwuCisgICAgICAgICogZXdrL2V3a192aWV3LmNwcDoKKyAgICAgICAgKEVXS1ByaXZhdGU6
OmNvcmVQYWdlKTogRXhwb3J0IHRoZSBXZWJDb3JlOjpQYWdlKiByZWxhdGVkIHRvIGFuCisgICAg
ICAgIGV3a192aWV3LgorCiAyMDExLTA5LTIxICBMdWNhcyBEZSBNYXJjaGkgIDxsdWNhcy5kZW1h
cmNoaUBwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBbRUZMXSBSZXZlcnQgcG9pbnRlciBvcGVy
YXRvciBjb2Rpbmcgc3R5bGUgaW4gZXdrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9X
ZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwIGIvU291cmNlL1dlYktp
dC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43NGUzZWQwMjc3NzRiYWJlN2Y2ODI3ZDJkYzdmZmQ0N2U5OTkwNWI1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsLmNwcApAQCAtMCwwICsxLDM5NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MTEgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ft
c3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEdW1w
UmVuZGVyVHJlZVN1cHBvcnRFZmwuaCIKKworI2luY2x1ZGUgIkVXZWJLaXQuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRlckNsaWVudEVmbC5oIgorI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCisKKyNp
bmNsdWRlIDxBbmltYXRpb25Db250cm9sbGVyLmg+CisjaW5jbHVkZSA8RG9jdW1lbnRMb2FkZXIu
aD4KKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorI2luY2x1ZGUgPEZpbmRP
cHRpb25zLmg+CisjaW5jbHVkZSA8RmxvYXRTaXplLmg+CisjaW5jbHVkZSA8RnJhbWVWaWV3Lmg+
CisjaW5jbHVkZSA8SW50UmVjdC5oPgorI2luY2x1ZGUgPFByaW50Q29udGV4dC5oPgorI2luY2x1
ZGUgPFJlbmRlclRyZWVBc1RleHQuaD4KKyNpbmNsdWRlIDxiaW5kaW5ncy9qcy9HQ0NvbnRyb2xs
ZXIuaD4KKyNpbmNsdWRlIDxoaXN0b3J5L0hpc3RvcnlJdGVtLmg+CisjaW5jbHVkZSA8d29ya2Vy
cy9Xb3JrZXJUaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKwor
I2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSA8U1ZHRG9jdW1lbnRFeHRlbnNpb25zLmg+CisjaW5j
bHVkZSA8U1ZHU01JTEVsZW1lbnQuaD4KKyNlbmRpZgorCitEdW1wUmVuZGVyVHJlZVN1cHBvcnRF
Zmw6OkR1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbCgpCit7Cit9CisKK0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbDo6fkR1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbCgpCit7Cit9CisKK3Vuc2lnbmVkIER1
bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6YWN0aXZlQW5pbWF0aW9uc0NvdW50KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tGcmFtZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBFV0tQcml2
YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyKiBhbmltYXRpb25Db250
cm9sbGVyID0gZnJhbWUtPmFuaW1hdGlvbigpOworCisgICAgaWYgKCFhbmltYXRpb25Db250cm9s
bGVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBhbmltYXRpb25Db250cm9sbGVy
LT5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoZnJhbWUtPmRvY3VtZW50KCkpOworfQorCit2b2lk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y2xlYXJGcmFtZU5hbWUoRXZhc19PYmplY3QqIGV3
a0ZyYW1lKQoreworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVG
cmFtZShld2tGcmFtZSk7CisKKyAgICBpZiAoZnJhbWUpCisgICAgICAgIGZyYW1lLT50cmVlKCkt
PmNsZWFyTmFtZSgpOworfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y2xlYXJP
cGVuZXIoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQoreworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFt
ZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShld2tGcmFtZSk7CisKKyAgICBpZiAoZnJhbWUpCisg
ICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c2V0T3BlbmVyKDApOworfQorCitTdHJpbmcgRHVtcFJl
bmRlclRyZWVTdXBwb3J0RWZsOjpjb3VudGVyVmFsdWVCeUVsZW1lbnRJZChjb25zdCBFdmFzX09i
amVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGVsZW1lbnRJZCkKK3sKKyAgICBXZWJDb3JlOjpG
cmFtZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYg
KCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgV2ViQ29yZTo6RWxlbWVu
dCogZWxlbWVudCA9IGZyYW1lLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQp
OworCisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBy
ZXR1cm4gV2ViQ29yZTo6Y291bnRlclZhbHVlRm9yRWxlbWVudChlbGVtZW50KTsKK30KKworRWlu
YV9MaXN0KiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmZyYW1lQ2hpbGRyZW4oY29uc3QgRXZh
c19PYmplY3QqIGV3a0ZyYW1lKQoreworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1By
aXZhdGU6OmNvcmVGcmFtZShld2tGcmFtZSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIEVpbmFfTGlzdCogY2hpbGRGcmFtZXMgPSAwOworCisgICAgZm9yICh1
bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgZnJhbWUtPnRyZWUoKS0+Y2hpbGRDb3VudCgpOyBp
bmRleCsrKSB7CisgICAgICAgIFdlYkNvcmU6OkZyYW1lICpjaGlsZEZyYW1lID0gZnJhbWUtPnRy
ZWUoKS0+Y2hpbGQoaW5kZXgpOworICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVm
bCAqY2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqPihj
aGlsZEZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpOworCisgICAgICAgIGlmICghY2xpZW50KQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY2hpbGRGcmFtZXMgPSBlaW5hX2xpc3Rf
YXBwZW5kKGNoaWxkRnJhbWVzLCBjbGllbnQtPndlYkZyYW1lKCkpOworICAgIH0KKworICAgIHJl
dHVybiBjaGlsZEZyYW1lczsKK30KKwordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6Omxh
eW91dEZyYW1lKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSog
ZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBmcmFtZS0+dmlldygpOworCisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybjsK
KworICAgIGZyYW1lVmlldy0+bGF5b3V0KCk7Cit9CisKK2ludCBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmw6Om51bWJlck9mUGFnZXMoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBmbG9hdCBw
YWdlV2lkdGgsIGZsb2F0IHBhZ2VIZWlnaHQpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1l
ID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1lKTsKKworICAgIGlmICghZnJhbWUpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIFdlYkNvcmU6OlByaW50Q29udGV4dDo6bnVt
YmVyT2ZQYWdlcyhmcmFtZSwgV2ViQ29yZTo6RmxvYXRTaXplKHBhZ2VXaWR0aCwgcGFnZUhlaWdo
dCkpOworfQorCitpbnQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpudW1iZXJPZlBhZ2VzRm9y
RWxlbWVudElkKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogZWxlbWVu
dElkLCBmbG9hdCBwYWdlV2lkdGgsIGZsb2F0IHBhZ2VIZWlnaHQpCit7CisgICAgV2ViQ29yZTo6
RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1lKTsKKworICAgIGlm
ICghZnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgV2ViQ29yZTo6RWxlbWVudCAqZWxl
bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpOworCisg
ICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBXZWJDb3Jl
OjpQcmludENvbnRleHQ6OnBhZ2VOdW1iZXJGb3JFbGVtZW50KGVsZW1lbnQsIFdlYkNvcmU6OkZs
b2F0U2l6ZShwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpKTsKK30KKworYm9vbCBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OnBhdXNlQW5pbWF0aW9uKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3Qg
Y2hhciogbmFtZSwgY29uc3QgY2hhciogZWxlbWVudElkLCBkb3VibGUgdGltZSkKK3sKKyAgICBX
ZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOwor
CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgV2ViQ29yZTo6
RWxlbWVudCogZWxlbWVudCA9IGZyYW1lLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChlbGVt
ZW50SWQpOworCisgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5yZW5kZXJlcigpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZnJhbWUtPmFuaW1hdGlvbigpLT5wYXVz
ZUFuaW1hdGlvbkF0VGltZShlbGVtZW50LT5yZW5kZXJlcigpLCBuYW1lLCB0aW1lKTsKK30KKwor
Ym9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnBhdXNlU1ZHQW5pbWF0aW9uKEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogYW5pbWF0aW9uSWQsIGNvbnN0IGNoYXIqIGVsZW1l
bnRJZCwgZG91YmxlIHRpbWUpCit7CisjaWYgRU5BQkxFKFNWRykKKyAgICBXZWJDb3JlOjpGcmFt
ZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYgKCFm
cmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgV2ViQ29yZTo6RG9jdW1lbnQqIGRv
Y3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CisKKyAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1
bWVudC0+c3ZnRXh0ZW5zaW9ucygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJD
b3JlOjpFbGVtZW50KiBlbGVtZW50ID0gZG9jdW1lbnQtPmdldEVsZW1lbnRCeUlkKGFuaW1hdGlv
bklkKTsKKworICAgIGlmICghZWxlbWVudCB8fCAhV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6Omlz
U01JTEVsZW1lbnQoZWxlbWVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biBkb2N1bWVudC0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5zYW1wbGVBbmltYXRpb25BdFRpbWUo
ZWxlbWVudElkLCBzdGF0aWNfY2FzdDxXZWJDb3JlOjpTVkdTTUlMRWxlbWVudCo+KGVsZW1lbnQp
LCB0aW1lKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK2Jvb2wgRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsOjpwYXVzZVRyYW5zaXRpb24oRXZhc19PYmplY3QqIGV3a0Zy
YW1lLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBlbGVtZW50SWQsIGRvdWJsZSB0aW1l
KQoreworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShl
d2tGcmFtZSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50ID0gZnJhbWUtPmRvY3VtZW50KCktPmdldEVsZW1l
bnRCeUlkKGVsZW1lbnRJZCk7CisKKyAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPnJlbmRl
cmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBmcmFtZS0+YW5pbWF0
aW9uKCktPnBhdXNlVHJhbnNpdGlvbkF0VGltZShlbGVtZW50LT5yZW5kZXJlcigpLCBuYW1lLCB0
aW1lKTsKK30KKwordW5zaWduZWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpwZW5kaW5nVW5s
b2FkRXZlbnRDb3VudChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCit7CisgICAgV2ViQ29y
ZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1lKTsKKworICAg
IGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGZyYW1lLT5kb21X
aW5kb3coKS0+cGVuZGluZ1VubG9hZEV2ZW50TGlzdGVuZXJzKCk7Cit9CisKK1N0cmluZyBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRFZmw6OnJlbmRlclRyZWVEdW1wKEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUo
ZXdrRnJhbWUpOworCisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3ICpmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpOworCisg
ICAgaWYgKGZyYW1lVmlldyAmJiBmcmFtZVZpZXctPmxheW91dFBlbmRpbmcoKSkKKyAgICAgICAg
ZnJhbWVWaWV3LT5sYXlvdXQoKTsKKworICAgIHJldHVybiBXZWJDb3JlOjpleHRlcm5hbFJlcHJl
c2VudGF0aW9uKGZyYW1lKTsKK30KKworU3RyaW5nIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6
cmVzcG9uc2VNaW1lVHlwZShjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCit7CisgICAgV2Vi
Q29yZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1lKTsKKwor
ICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIFdlYkNvcmU6
OkRvY3VtZW50TG9hZGVyICpkb2N1bWVudExvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1l
bnRMb2FkZXIoKTsKKworICAgIGlmICghZG9jdW1lbnRMb2FkZXIpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKworICAgIHJldHVybiBkb2N1bWVudExvYWRlci0+cmVzcG9uc2VNSU1FVHlwZSgp
OworfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6cmVzdW1lQW5pbWF0aW9ucyhF
dmFzX09iamVjdCogZXdrRnJhbWUpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gRVdL
UHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1lKTsKKworICAgIGlmICghZnJhbWUpCisgICAgICAg
IHJldHVybjsKKworICAgIFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXIgKmFuaW1hdGlvbkNv
bnRyb2xsZXIgPSBmcmFtZS0+YW5pbWF0aW9uKCk7CisgICAgaWYgKGFuaW1hdGlvbkNvbnRyb2xs
ZXIpCisgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXItPnJlc3VtZUFuaW1hdGlvbnMoKTsKK30K
KworV2ViQ29yZTo6SW50UmVjdCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNlbGVjdGlvblJl
Y3RhbmdsZShjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCit7CisgICAgV2ViQ29yZTo6RnJh
bWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1lKTsKKworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpJbnRSZWN0KCk7CisKKyAgICByZXR1cm4g
ZW5jbG9zaW5nSW50UmVjdChmcmFtZS0+c2VsZWN0aW9uKCktPmJvdW5kcygpKTsKK30KKworLy8g
Q29tcGFyZSB3aXRoICJXZWJLaXQvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0ZyYW1lTG9hZERl
bGVnYXRlLm1tCitTdHJpbmcgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzdWl0YWJsZURSVEZy
YW1lTmFtZShjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCit7CisgICAgV2ViQ29yZTo6RnJh
bWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1lKTsKKworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGNvbnN0IFN0cmluZyBmcmFt
ZU5hbWUoZXdrX2ZyYW1lX25hbWVfZ2V0KGV3a0ZyYW1lKSk7CisKKyAgICBpZiAoZXdrRnJhbWUg
PT0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoZXdrX2ZyYW1lX3ZpZXdfZ2V0KGV3a0ZyYW1lKSkp
IHsKKyAgICAgICAgaWYgKCFmcmFtZU5hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJu
IFN0cmluZygibWFpbiBmcmFtZSBcIiIpICsgZnJhbWVOYW1lICsgU3RyaW5nKCJcIiIpOworCisg
ICAgICAgIHJldHVybiBTdHJpbmcoIm1haW4gZnJhbWUiKTsKKyAgICB9CisKKyAgICBpZiAoIWZy
YW1lTmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoImZyYW1lIFwiIikgKyBm
cmFtZU5hbWUgKyBTdHJpbmcoIlwiIik7CisKKyAgICByZXR1cm4gU3RyaW5nKCJmcmFtZSAoYW5v
bnltb3VzKSIpOworfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c3VzcGVuZEFu
aW1hdGlvbnMoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQoreworICAgIFdlYkNvcmU6OkZyYW1lKiBm
cmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShld2tGcmFtZSk7CisKKyAgICBpZiAoIWZyYW1l
KQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyICph
bmltYXRpb25Db250cm9sbGVyID0gZnJhbWUtPmFuaW1hdGlvbigpOworICAgIGlmIChhbmltYXRp
b25Db250cm9sbGVyKQorICAgICAgICBhbmltYXRpb25Db250cm9sbGVyLT5zdXNwZW5kQW5pbWF0
aW9ucygpOworfQorCitib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZmluZFN0cmluZyhj
b25zdCBFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogdGV4dCwgV2ViQ29yZTo6Rmlu
ZE9wdGlvbnMgb3B0aW9ucykKK3sKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gRVdLUHJpdmF0
ZTo6Y29yZVBhZ2UoZXdrVmlldyk7CisKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJldHVybiBwYWdlLT5maW5kU3RyaW5nKFN0cmluZzo6ZnJvbVVURjgodGV4
dCksIG9wdGlvbnMpOworfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2NhbGVQ
YWdlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCBzY2FsZUZhY3RvciwgZmxvYXQgeCwgZmxv
YXQgeSkKK3sKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gRVdLUHJpdmF0ZTo6Y29yZVBhZ2Uo
ZXdrVmlldyk7CisKKyAgICBpZiAocGFnZSkKKyAgICAgICAgcGFnZS0+c2V0UGFnZVNjYWxlRmFj
dG9yKHNjYWxlRmFjdG9yLCBXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7Cit9CisKK3ZvaWQgRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsOjpnYXJiYWdlQ29sbGVjdG9yQ29sbGVjdCgpCit7CisgICAg
V2ViQ29yZTo6Z2NDb250cm9sbGVyKCkuZ2FyYmFnZUNvbGxlY3ROb3coKTsKK30KKwordm9pZCBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmdhcmJhZ2VDb2xsZWN0b3JDb2xsZWN0T25BbHRlcm5h
dGVUaHJlYWQoYm9vbCB3YWl0VW50aWxEb25lKQoreworICAgIFdlYkNvcmU6OmdjQ29udHJvbGxl
cigpLmdhcmJhZ2VDb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRGb3JEZWJ1Z2dpbmcod2FpdFVudGls
RG9uZSk7Cit9CisKK3NpemVfdCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmphdmFTY3JpcHRP
YmplY3RzQ291bnQoKQoreworICAgIHJldHVybiBXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Y29tbW9u
SlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsKK30KKwordW5zaWduZWQgRHVtcFJl
bmRlclRyZWVTdXBwb3J0RWZsOjp3b3JrZXJUaHJlYWRDb3VudCgpCit7CisjaWYgRU5BQkxFKFdP
UktFUlMpCisgICAgcmV0dXJuIFdlYkNvcmU6OldvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkQ291
bnQoKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworSGlzdG9yeUl0ZW1DaGls
ZHJlbk1hcCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNoaWxkSGlzdG9yeUl0ZW1zKGNvbnN0
IEV3a19IaXN0b3J5X0l0ZW0qIGV3a0hpc3RvcnlJdGVtKQoreworICAgIFdlYkNvcmU6Okhpc3Rv
cnlJdGVtKiBoaXN0b3J5SXRlbSA9IEVXS1ByaXZhdGU6OmNvcmVIaXN0b3J5SXRlbShld2tIaXN0
b3J5SXRlbSk7CisgICAgSGlzdG9yeUl0ZW1DaGlsZHJlbk1hcCBraWRzOworCisgICAgaWYgKCFo
aXN0b3J5SXRlbSkKKyAgICAgICAgcmV0dXJuIGtpZHM7CisKKyAgICBjb25zdCBXZWJDb3JlOjpI
aXN0b3J5SXRlbVZlY3RvciYgY2hpbGRyZW4gPSBoaXN0b3J5SXRlbS0+Y2hpbGRyZW4oKTsKKyAg
ICBjb25zdCB1bnNpZ25lZCBzaXplID0gY2hpbGRyZW4uc2l6ZSgpOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBFd2tfSGlzdG9yeV9JdGVtKiBr
aWQgPSBld2tfaGlzdG9yeV9pdGVtX25ld19mcm9tX2NvcmUoY2hpbGRyZW5baV0uZ2V0KCkpOwor
ICAgICAgICBraWRzLnNldChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6Omhpc3RvcnlJdGVtVGFy
Z2V0KGtpZCksIGtpZCk7CisgICAgfQorCisgICAgcmV0dXJuIGtpZHM7Cit9CisKK1N0cmluZyBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6Omhpc3RvcnlJdGVtVGFyZ2V0KGNvbnN0IEV3a19IaXN0
b3J5X0l0ZW0qIGV3a0hpc3RvcnlJdGVtKQoreworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBo
aXN0b3J5SXRlbSA9IEVXS1ByaXZhdGU6OmNvcmVIaXN0b3J5SXRlbShld2tIaXN0b3J5SXRlbSk7
CisKKyAgICBpZiAoIWhpc3RvcnlJdGVtKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAg
ICByZXR1cm4gaGlzdG9yeUl0ZW0tPnRhcmdldCgpOworfQorCitib29sIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbDo6aXNUYXJnZXRJdGVtKGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGV3a0hpc3Rv
cnlJdGVtKQoreworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBoaXN0b3J5SXRlbSA9IEVXS1By
aXZhdGU6OmNvcmVIaXN0b3J5SXRlbShld2tIaXN0b3J5SXRlbSk7CisKKyAgICBpZiAoIWhpc3Rv
cnlJdGVtKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gaGlzdG9yeUl0ZW0t
PmlzVGFyZ2V0SXRlbSgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29y
ZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9X
ZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYzAz
NDU3ZThkOWYxODI0MTJhNTFiNjE2MGI0MjE0YzUwYjY0NmM1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZs
LmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgUHJvRlVTSU9O
IGVtYmVkZGVkIHN5c3RlbXMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJv
bmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNpZm5kZWYgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsX2gKKyNkZWZpbmUgRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsX2gKKworI2luY2x1ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDxG
aW5kT3B0aW9ucy5oPgorI2luY2x1ZGUgPEludFJlY3QuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit0eXBlZGVmIHN0cnVjdCBf
RXZhc19PYmplY3QgRXZhc19PYmplY3Q7Cit0eXBlZGVmIHN0cnVjdCBfRXdrX0hpc3RvcnlfSXRl
bSBFd2tfSGlzdG9yeV9JdGVtOworCit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBFd2tfSGlzdG9y
eV9JdGVtKj4gSGlzdG9yeUl0ZW1DaGlsZHJlbk1hcDsKKworY2xhc3MgRUFQSSBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRFZmwgeworcHVibGljOgorICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbCgp
OworICAgIH5EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwoKTsKKworICAgIHN0YXRpYyB1bnNpZ25l
ZCBhY3RpdmVBbmltYXRpb25zQ291bnQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKTsKKyAg
ICBzdGF0aWMgdm9pZCBjbGVhckZyYW1lTmFtZShFdmFzX09iamVjdCogZXdrRnJhbWUpOworICAg
IHN0YXRpYyB2b2lkIGNsZWFyT3BlbmVyKEV2YXNfT2JqZWN0KiBld2tGcmFtZSk7CisgICAgc3Rh
dGljIFN0cmluZyBjb3VudGVyVmFsdWVCeUVsZW1lbnRJZChjb25zdCBFdmFzX09iamVjdCogZXdr
RnJhbWUsIGNvbnN0IGNoYXIqIGVsZW1lbnRJZCk7CisgICAgc3RhdGljIEVpbmFfTGlzdCogZnJh
bWVDaGlsZHJlbihjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpOworICAgIHN0YXRpYyB2b2lk
IGxheW91dEZyYW1lKEV2YXNfT2JqZWN0KiBld2tGcmFtZSk7CisgICAgc3RhdGljIGludCBudW1i
ZXJPZlBhZ2VzKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgZmxvYXQgcGFnZVdpZHRoLCBm
bG9hdCBwYWdlSGVpZ2h0KTsKKyAgICBzdGF0aWMgaW50IG51bWJlck9mUGFnZXNGb3JFbGVtZW50
SWQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBlbGVtZW50SWQsIGZs
b2F0IHBhZ2VXaWR0aCwgZmxvYXQgcGFnZUhlaWdodCk7CisgICAgc3RhdGljIGJvb2wgcGF1c2VB
bmltYXRpb24oRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBj
aGFyKiBlbGVtZW50SWQsIGRvdWJsZSB0aW1lKTsKKyAgICBzdGF0aWMgYm9vbCBwYXVzZVNWR0Fu
aW1hdGlvbihFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGFuaW1hdGlvbklkLCBj
b25zdCBjaGFyKiBlbGVtZW50SWQsIGRvdWJsZSB0aW1lKTsKKyAgICBzdGF0aWMgYm9vbCBwYXVz
ZVRyYW5zaXRpb24oRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBuYW1lLCBjb25z
dCBjaGFyKiBlbGVtZW50SWQsIGRvdWJsZSB0aW1lKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgcGVu
ZGluZ1VubG9hZEV2ZW50Q291bnQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKTsKKyAgICBz
dGF0aWMgU3RyaW5nIHJlbmRlclRyZWVEdW1wKEV2YXNfT2JqZWN0KiBld2tGcmFtZSk7CisgICAg
c3RhdGljIFN0cmluZyByZXNwb25zZU1pbWVUeXBlKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSk7CisgICAgc3RhdGljIHZvaWQgcmVzdW1lQW5pbWF0aW9ucyhFdmFzX09iamVjdCogZXdrRnJh
bWUpOworICAgIHN0YXRpYyBXZWJDb3JlOjpJbnRSZWN0IHNlbGVjdGlvblJlY3RhbmdsZShjb25z
dCBFdmFzX09iamVjdCogZXdrRnJhbWUpOworICAgIHN0YXRpYyBTdHJpbmcgc3VpdGFibGVEUlRG
cmFtZU5hbWUoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBz
dXNwZW5kQW5pbWF0aW9ucyhFdmFzX09iamVjdCogZXdrRnJhbWUpOworCisgICAgc3RhdGljIGJv
b2wgZmluZFN0cmluZyhjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogdGV4
dCwgV2ViQ29yZTo6RmluZE9wdGlvbnMpOworICAgIHN0YXRpYyB2b2lkIHNjYWxlUGFnZShFdmFz
X09iamVjdCogZXdrVmlldywgZmxvYXQgc2NhbGVGYWN0b3IsIGZsb2F0IHgsIGZsb2F0IHkpOwor
CisgICAgc3RhdGljIHZvaWQgZ2FyYmFnZUNvbGxlY3RvckNvbGxlY3QoKTsKKyAgICBzdGF0aWMg
dm9pZCBnYXJiYWdlQ29sbGVjdG9yQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKGJvb2wgd2FpdFVu
dGlsRG9uZSk7CisgICAgc3RhdGljIHNpemVfdCBqYXZhU2NyaXB0T2JqZWN0c0NvdW50KCk7Cisg
ICAgc3RhdGljIHVuc2lnbmVkIHdvcmtlclRocmVhZENvdW50KCk7CisKKyAgICBzdGF0aWMgSGlz
dG9yeUl0ZW1DaGlsZHJlbk1hcCBjaGlsZEhpc3RvcnlJdGVtcyhjb25zdCBFd2tfSGlzdG9yeV9J
dGVtKik7CisgICAgc3RhdGljIFN0cmluZyBoaXN0b3J5SXRlbVRhcmdldChjb25zdCBFd2tfSGlz
dG9yeV9JdGVtKik7CisgICAgc3RhdGljIGJvb2wgaXNUYXJnZXRJdGVtKGNvbnN0IEV3a19IaXN0
b3J5X0l0ZW0qKTsKK307CisKKyNlbmRpZiAvLyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmxfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAppbmRleCBmZDJmMzZiMzlmYWY1NmViMWMwMDYw
YjdkNDY3ZTExNzQyOGY3MGM5Li4zY2Q4ZDcyYWUyMzRiYmQyNDg5OTc5MmI5OTQ5YTcyNDg3ZDZk
NTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcApAQCAtMjksNyArMjksNiBAQAog
I2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50RWZsLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgi
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKICNp
bmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKQEAgLTE2NjIsMyArMTY2MSwxMyBAQCB2b2lkIGV3
a19mcmFtZV9lZGl0b3JfY2xpZW50X2NvbnRlbnRzX2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCiAg
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOwogICAgIGV3a192aWV3X2VkaXRv
cl9jbGllbnRfY29udGVudHNfY2hhbmdlZChzZC0+dmlldyk7CiB9CisKK25hbWVzcGFjZSBFV0tQ
cml2YXRlIHsKKworV2ViQ29yZTo6RnJhbWUgKmNvcmVGcmFtZShjb25zdCBFdmFzX09iamVjdCAq
ZXdrRnJhbWUpCit7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNk
LCAwKTsKKyAgICByZXR1cm4gc2QtPmZyYW1lOworfQorCit9IC8vIG5hbWVzcGFjZSBFV0tQcml2
YXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hpc3RvcnkuY3BwIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5LmNwcAppbmRleCA5YWU3YWExMjVjYjFh
YjY2M2E5ZjRmZjUxMDFjYzAyYzFiNWUwZDNhLi5mMDhkOTNhMThiN2I5ZmU3Y2FiM2I2OTBkMjIw
MjI5OWE3ZDg4ZWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hpc3Rv
cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaGlzdG9yeS5jcHAKQEAgLTc0
LDI3ICs3NCw2IEBAIHN0cnVjdCBfRXdrX0hpc3RvcnlfSXRlbSB7CiAgICAgV2ViQ29yZTo6SGlz
dG9yeUl0ZW0qIGNvcmVfID0gKGl0ZW0pLT5jb3JlCiAKIAotc3RhdGljIGlubGluZSBFd2tfSGlz
dG9yeV9JdGVtKiBfZXdrX2hpc3RvcnlfaXRlbV9uZXcoV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGNv
cmUpCi17Ci0gICAgRXdrX0hpc3RvcnlfSXRlbSogaXRlbTsKLQotICAgIGlmICghY29yZSkgewot
ICAgICAgICBFUlIoIldlYkNvcmU6Okhpc3RvcnlJdGVtIGlzIE5VTEwuIik7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLQotICAgIGl0ZW0gPSAoRXdrX0hpc3RvcnlfSXRlbSopY2FsbG9jKDEs
IHNpemVvZihFd2tfSGlzdG9yeV9JdGVtKSk7Ci0gICAgaWYgKCFpdGVtKSB7Ci0gICAgICAgIENS
SVRJQ0FMKCJDb3VsZCBub3QgYWxsb2NhdGUgaXRlbSBtZW1vcnkuIik7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIGNvcmUtPnJlZigpOwotICAgIGl0ZW0tPmNvcmUgPSBjb3JlOwot
Ci0gICAgcmV0dXJuIGl0ZW07Ci19Ci0KIHN0YXRpYyBpbmxpbmUgRWluYV9MaXN0KiBfZXdrX2hp
c3RvcnlfaXRlbV9saXN0X2dldChjb25zdCBXZWJDb3JlOjpIaXN0b3J5SXRlbVZlY3RvciYgY29y
ZV9pdGVtcykKIHsKICAgICBFaW5hX0xpc3QqIHJldCA9IDA7CkBAIC0xMDIsNyArODEsNyBAQCBz
dGF0aWMgaW5saW5lIEVpbmFfTGlzdCogX2V3a19oaXN0b3J5X2l0ZW1fbGlzdF9nZXQoY29uc3Qg
V2ViQ29yZTo6SGlzdG9yeUl0ZW1WZQogCiAgICAgc2l6ZSA9IGNvcmVfaXRlbXMuc2l6ZSgpOwog
ICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgRXdrX0hpc3RvcnlfSXRl
bSogaXRlbSA9IF9ld2tfaGlzdG9yeV9pdGVtX25ldyhjb3JlX2l0ZW1zW2ldLmdldCgpKTsKKyAg
ICAgICAgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSA9IGV3a19oaXN0b3J5X2l0ZW1fbmV3X2Zyb21f
Y29yZShjb3JlX2l0ZW1zW2ldLmdldCgpKTsKICAgICAgICAgaWYgKGl0ZW0pCiAgICAgICAgICAg
ICByZXQgPSBlaW5hX2xpc3RfYXBwZW5kKHJldCwgaXRlbSk7CiAgICAgfQpAQCAtMTQ3LDcgKzEy
Niw3IEBAIEVpbmFfQm9vbCBld2tfaGlzdG9yeV9oaXN0b3J5X2l0ZW1fc2V0KEV3a19IaXN0b3J5
KiBoaXN0b3J5LCBjb25zdCBFd2tfSGlzdG9yeV9JCiBFd2tfSGlzdG9yeV9JdGVtKiBld2tfaGlz
dG9yeV9oaXN0b3J5X2l0ZW1fYmFja19nZXQoY29uc3QgRXdrX0hpc3RvcnkqIGhpc3RvcnkpCiB7
CiAgICAgRVdLX0hJU1RPUllfQ09SRV9HRVRfT1JfUkVUVVJOKGhpc3RvcnksIGNvcmUsIDApOwot
ICAgIHJldHVybiBfZXdrX2hpc3RvcnlfaXRlbV9uZXcoY29yZS0+YmFja0l0ZW0oKSk7CisgICAg
cmV0dXJuIGV3a19oaXN0b3J5X2l0ZW1fbmV3X2Zyb21fY29yZShjb3JlLT5iYWNrSXRlbSgpKTsK
IH0KIAogRXdrX0hpc3RvcnlfSXRlbSogZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX2N1cnJlbnRf
Z2V0KGNvbnN0IEV3a19IaXN0b3J5KiBoaXN0b3J5KQpAQCAtMTU1LDIwICsxMzQsMjAgQEAgRXdr
X0hpc3RvcnlfSXRlbSogZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX2N1cnJlbnRfZ2V0KGNvbnN0
IEV3a19IaXN0b3J5KiBoaXN0b3IKICAgICBFV0tfSElTVE9SWV9DT1JFX0dFVF9PUl9SRVRVUk4o
aGlzdG9yeSwgY29yZSwgMCk7CiAgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVt
ID0gY29yZS0+Y3VycmVudEl0ZW0oKTsKICAgICBpZiAoY3VycmVudEl0ZW0pCi0gICAgICAgIHJl
dHVybiBfZXdrX2hpc3RvcnlfaXRlbV9uZXcoY3VycmVudEl0ZW0pOworICAgICAgICByZXR1cm4g
ZXdrX2hpc3RvcnlfaXRlbV9uZXdfZnJvbV9jb3JlKGN1cnJlbnRJdGVtKTsKICAgICByZXR1cm4g
MDsKIH0KIAogRXdrX0hpc3RvcnlfSXRlbSogZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX2Zvcndh
cmRfZ2V0KGNvbnN0IEV3a19IaXN0b3J5KiBoaXN0b3J5KQogewogICAgIEVXS19ISVNUT1JZX0NP
UkVfR0VUX09SX1JFVFVSTihoaXN0b3J5LCBjb3JlLCAwKTsKLSAgICByZXR1cm4gX2V3a19oaXN0
b3J5X2l0ZW1fbmV3KGNvcmUtPmZvcndhcmRJdGVtKCkpOworICAgIHJldHVybiBld2tfaGlzdG9y
eV9pdGVtX25ld19mcm9tX2NvcmUoY29yZS0+Zm9yd2FyZEl0ZW0oKSk7CiB9CiAKIEV3a19IaXN0
b3J5X0l0ZW0qIGV3a19oaXN0b3J5X2hpc3RvcnlfaXRlbV9udGhfZ2V0KGNvbnN0IEV3a19IaXN0
b3J5KiBoaXN0b3J5LCBpbnQgaW5kZXgpCiB7CiAgICAgRVdLX0hJU1RPUllfQ09SRV9HRVRfT1Jf
UkVUVVJOKGhpc3RvcnksIGNvcmUsIDApOwotICAgIHJldHVybiBfZXdrX2hpc3RvcnlfaXRlbV9u
ZXcoY29yZS0+aXRlbUF0SW5kZXgoaW5kZXgpKTsKKyAgICByZXR1cm4gZXdrX2hpc3RvcnlfaXRl
bV9uZXdfZnJvbV9jb3JlKGNvcmUtPml0ZW1BdEluZGV4KGluZGV4KSk7CiB9CiAKIEVpbmFfQm9v
bCBld2tfaGlzdG9yeV9oaXN0b3J5X2l0ZW1fY29udGFpbnMoY29uc3QgRXdrX0hpc3RvcnkqIGhp
c3RvcnksIGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0pCkBAIC0yMzcsMTIgKzIxNiwzMyBA
QCBFaW5hX0Jvb2wgZXdrX2hpc3RvcnlfbGltaXRfc2V0KGNvbnN0IEV3a19IaXN0b3J5KiBoaXN0
b3J5LCBpbnQgbGltaXQpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAorRXdrX0hpc3Rvcnlf
SXRlbSogZXdrX2hpc3RvcnlfaXRlbV9uZXdfZnJvbV9jb3JlKFdlYkNvcmU6Okhpc3RvcnlJdGVt
KiBjb3JlKQoreworICAgIEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW07CisKKyAgICBpZiAoIWNvcmUp
IHsKKyAgICAgICAgRVJSKCJXZWJDb3JlOjpIaXN0b3J5SXRlbSBpcyBOVUxMLiIpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpdGVtID0gKEV3a19IaXN0b3J5X0l0ZW0qKWNhbGxv
YygxLCBzaXplb2YoRXdrX0hpc3RvcnlfSXRlbSkpOworICAgIGlmICghaXRlbSkgeworICAgICAg
ICBDUklUSUNBTCgiQ291bGQgbm90IGFsbG9jYXRlIGl0ZW0gbWVtb3J5LiIpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBjb3JlLT5yZWYoKTsKKyAgICBpdGVtLT5jb3JlID0gY29y
ZTsKKworICAgIHJldHVybiBpdGVtOworfQorCiBFd2tfSGlzdG9yeV9JdGVtKiBld2tfaGlzdG9y
eV9pdGVtX25ldyhjb25zdCBjaGFyKiB1cmksIGNvbnN0IGNoYXIqIHRpdGxlKQogewogICAgIFdU
Rjo6U3RyaW5nIHUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgodXJpKTsKICAgICBXVEY6OlN0cmlu
ZyB0ID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHRpdGxlKTsKICAgICBXVEY6OlJlZlB0cjxXZWJD
b3JlOjpIaXN0b3J5SXRlbT4gY29yZSA9IFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpjcmVhdGUodSwg
dCwgMCk7Ci0gICAgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSA9IF9ld2tfaGlzdG9yeV9pdGVtX25l
dyhjb3JlLnJlbGVhc2UoKS5yZWxlYXNlUmVmKCkpOworICAgIEV3a19IaXN0b3J5X0l0ZW0qIGl0
ZW0gPSBld2tfaGlzdG9yeV9pdGVtX25ld19mcm9tX2NvcmUoY29yZS5yZWxlYXNlKCkucmVsZWFz
ZVJlZigpKTsKICAgICByZXR1cm4gaXRlbTsKIH0KIApAQCAtNDEwLDUxICs0MTAsMTIgQEAgdm9p
ZCBld2tfaGlzdG9yeV9mcmVlKEV3a19IaXN0b3J5KiBoaXN0b3J5KQogICAgIGZyZWUoaGlzdG9y
eSk7CiB9CiAKLS8qKgotICogQGludGVybmFsCi0gKgotICogUmV0dXJucyBhIG5ld2x5LWFsbG9j
YXRlZCBzdHJpbmcgd2l0aCB0aGUgaXRlbSdzIHRhcmdldCBuYW1lLgotICogQ2FsbGVycyBhcmUg
cmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhlIGFsbG9jYXRlZCBtZW1vcnkgd2l0aCBmcmVlKDMp
LgotICoKLSAqIEBwYXJhbSBpdGVtIGluc3RhbmNlIHRvIG9wZXJhdGUgdXBvbi4KLSAqLwotY2hh
ciogZXdrX2hpc3RvcnlfaXRlbV90YXJnZXRfZ2V0KGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGl0
ZW0pCi17Ci0gICAgRVdLX0hJU1RPUllfSVRFTV9DT1JFX0dFVF9PUl9SRVRVUk4oaXRlbSwgY29y
ZSwgMCk7Ci0gICAgcmV0dXJuIHN0cmR1cChjb3JlLT50YXJnZXQoKS51dGY4KCkuZGF0YSgpKTsK
LX0KK25hbWVzcGFjZSBFV0tQcml2YXRlIHsKIAotLyoqCi0gKiBAaW50ZXJuYWwKLSAqCi0gKiBS
ZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGl0ZW0gaXMgY3VycmVudGx5IGEgdGFyZ2V0LgotICoK
LSAqIEBwYXJhbSBpdGVtIGluc3RhbmNlIHRvIGNoZWNrLgotICovCi1FaW5hX0Jvb2wgZXdrX2hp
c3RvcnlfaXRlbV90YXJnZXRfaXMoY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSkKK1dlYkNv
cmU6Okhpc3RvcnlJdGVtKiBjb3JlSGlzdG9yeUl0ZW0oY29uc3QgRXdrX0hpc3RvcnlfSXRlbSog
ZXdrSGlzdG9yeUl0ZW0pCiB7Ci0gICAgRVdLX0hJU1RPUllfSVRFTV9DT1JFX0dFVF9PUl9SRVRV
Uk4oaXRlbSwgY29yZSwgMCk7Ci0gICAgcmV0dXJuIGNvcmUtPmlzVGFyZ2V0SXRlbSgpOworICAg
IEVXS19ISVNUT1JZX0lURU1fQ09SRV9HRVRfT1JfUkVUVVJOKGV3a0hpc3RvcnlJdGVtLCBjb3Jl
LCAwKTsKKyAgICByZXR1cm4gY29yZTsKIH0KIAotLyoqCi0gKiBAaW50ZXJuYWwKLSAqCi0gKiBS
ZXR1cm5zIGEgbGlzdCBvZiBjaGlsZCBoaXN0b3J5IGl0ZW1zIHJlbGF0aXZlIHRvIHRoZSBnaXZl
biBpdGVtLAotICogb3IgQGMgTlVMTCBpZiB0aGVyZSBhcmUgbm9uZS4KLSAqCi0gKiBAcGFyYW0g
aXRlbSBpbnN0YW5jZSB0byBvcGVyYXRlIHVwb24uCi0gKi8KLUVpbmFfTGlzdCogZXdrX2hpc3Rv
cnlfaXRlbV9jaGlsZHJlbl9nZXQoY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSkKLXsKLSAg
ICBFV0tfSElTVE9SWV9JVEVNX0NPUkVfR0VUX09SX1JFVFVSTihpdGVtLCBjb3JlLCAwKTsKLSAg
ICBjb25zdCBXZWJDb3JlOjpIaXN0b3J5SXRlbVZlY3RvciYgY2hpbGRyZW4gPSBjb3JlLT5jaGls
ZHJlbigpOwotICAgIGlmICghY2hpbGRyZW4uc2l6ZSgpKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIEVpbmFfTGlzdCoga2lkcyA9IDA7Ci0gICAgY29uc3QgdW5zaWduZWQgc2l6ZSA9IGNoaWxk
cmVuLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAg
ICAgICBraWRzID0gZWluYV9saXN0X2FwcGVuZChraWRzLCBfZXdrX2hpc3RvcnlfaXRlbV9uZXco
Y2hpbGRyZW5baV0uZ2V0KCkpKTsKLSAgICByZXR1cm4ga2lkczsKLX0KK30gLy8gbmFtZXNwYWNl
IEVXS1ByaXZhdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfcHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19wcml2YXRlLmgKaW5kZXggOWM4M2E5MzNm
MGI5NjY4YzAxNGI2ZGI0NmQzMWE4MDUwMDQ1OTE1MC4uNTI2ZGY2NzI2N2RmMzU4OGM1ZTNiYTNj
NzZjZmM1OThmMzU2YmEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19w
cml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19wcml2YXRlLmgKQEAgLTc3
LDYgKzc3LDE0IEBAIHN0cnVjdCBFd2tfV2luZG93X09iamVjdF9DbGVhcmVkX0V2ZW50IHsKICAg
ICBFdmFzX09iamVjdCogZnJhbWU7CiB9OwogCituYW1lc3BhY2UgRVdLUHJpdmF0ZSB7CisKK1dl
YkNvcmU6OkZyYW1lICpjb3JlRnJhbWUoY29uc3QgRXZhc19PYmplY3QgKmV3a0ZyYW1lKTsKK1dl
YkNvcmU6OlBhZ2UgKmNvcmVQYWdlKGNvbnN0IEV2YXNfT2JqZWN0ICpld2tWaWV3KTsKK1dlYkNv
cmU6Okhpc3RvcnlJdGVtICpjb3JlSGlzdG9yeUl0ZW0oY29uc3QgRXdrX0hpc3RvcnlfSXRlbSAq
ZXdrSGlzdG9yeUl0ZW0pOworCit9IC8vIG5hbWVzcGFjZSBFV0tQcml2YXRlCisKIHZvaWQgZXdr
X3ZpZXdfcmVhZHkoRXZhc19PYmplY3QqIG8pOwogdm9pZCBld2tfdmlld19pbnB1dF9tZXRob2Rf
c3RhdGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgYWN0aXZlKTsKIHZvaWQgZXdrX3Zp
ZXdfdGl0bGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiB0aXRsZSk7CkBAIC0xNDQs
MjEgKzE1MiwxNSBAQCB2b2lkIGV3a192aWV3X2pzX3dpbmRvd19vYmplY3RfY2xlYXIoRXZhc19P
YmplY3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSk7CiAjZW5kaWYKIAogaW50IGV3a191dGlsX2Rw
aV9nZXQodm9pZCk7Ci12b2lkIGV3a191dGlsX2phdmFzY3JpcHRfZ2NfY29sbGVjdCgpOwotdm9p
ZCBld2tfdXRpbF9qYXZhc2NyaXB0X2djX2FsdGVybmF0ZV90aHJlYWRfY29sbGVjdChFaW5hX0Jv
b2wgd2FpdFVudGlsRG9uZSk7Ci11bnNpZ25lZCBld2tfdXRpbF9qYXZhc2NyaXB0X2djX29iamVj
dF9jb3VudF9nZXQoKTsKLXVuc2lnbmVkIGV3a191dGlsX3dvcmtlcl90aHJlYWRfY291bnQoKTsK
IAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiB2b2lkIGV3a192aWV3X25lZWRfdG91Y2hfZXZl
bnRzX3NldChFdmFzX09iamVjdCosIGJvb2wgbmVlZGVkKTsKIEVpbmFfQm9vbCBld2tfdmlld19u
ZWVkX3RvdWNoX2V2ZW50c19nZXQoY29uc3QgRXZhc19PYmplY3QqKTsKICNlbmRpZgogCitFd2tf
SGlzdG9yeV9JdGVtICpld2tfaGlzdG9yeV9pdGVtX25ld19mcm9tX2NvcmUoV2ViQ29yZTo6SGlz
dG9yeUl0ZW0gKmNvcmUpOwogRXdrX0hpc3RvcnkqIGV3a19oaXN0b3J5X25ldyhXZWJDb3JlOjpC
YWNrRm9yd2FyZExpc3RJbXBsKiBoaXN0b3J5KTsKIHZvaWQgZXdrX2hpc3RvcnlfZnJlZShFd2tf
SGlzdG9yeSogaGlzdG9yeSk7Ci1jaGFyKiBld2tfaGlzdG9yeV9pdGVtX3RhcmdldF9nZXQoY29u
c3QgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSk7Ci1FaW5hX0Jvb2wgZXdrX2hpc3RvcnlfaXRlbV90
YXJnZXRfaXMoY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSk7Ci1FaW5hX0xpc3QqIGV3a19o
aXN0b3J5X2l0ZW1fY2hpbGRyZW5fZ2V0KGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0pOwog
CiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCiBFd2tfQ29udGV4dF9NZW51KiBld2tfY29udGV4
dF9tZW51X25ldyhFdmFzX09iamVjdCogdmlldywgV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9s
bGVyKiBjb250cm9sbGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
dXRpbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3V0aWwuY3BwCmluZGV4IDY5ZmU2
ZjAyZTlhMWY0ZjBlYTgzMDg0ODQ4NmMwN2Y2MzgzYjk4YmEuLjdiYTc2MTUzZTcxOTU0M2UyMDli
YmEyZDYwNDlkMmRhNWI5Y2M3ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfdXRpbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a191dGlsLmNwcApAQCAt
MjEsOSArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgImV3a191dGlsLmgi
CiAKLSNpbmNsdWRlICJiaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJld2tf
cHJpdmF0ZS5oIgotI2luY2x1ZGUgIndvcmtlcnMvV29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSA8
ZWluYV9zYWZldHlfY2hlY2tzLmg+CiAKICNpZmRlZiBIQVZFX0VDT1JFX1gKQEAgLTExMiw1MyAr
MTEwLDYgQEAgRXZhc19PYmplY3QqIGV3a191dGlsX2ltYWdlX2Zyb21fY2Fpcm9fc3VyZmFjZV9h
ZGQoRXZhcyogY2FudmFzLCBjYWlyb19zdXJmYWNlX3QKIAogLyoqCiAgKiBAaW50ZXJuYWwKLSAq
Ci0gKiBQZXJmb3JtcyBnYXJiYWdlIGNvbGxlY3Rpb24gb2YgSmF2YVNjcmlwdCBvYmplY3RzLgot
ICovCi12b2lkIGV3a191dGlsX2phdmFzY3JpcHRfZ2NfY29sbGVjdCgpCi17Ci0gICAgV2ViQ29y
ZTo6Z2NDb250cm9sbGVyKCkuZ2FyYmFnZUNvbGxlY3ROb3coKTsKLX0KLQotLyoqCi0gKiBAaW50
ZXJuYWwKLSAqCi0gKiBQZXJmb3JtcyBnYXJiYWdlIGNvbGxlY3Rpb24gb2YgSmF2YVNjcmlwdCBv
YmplY3RzIGluIGEgc2VwYXJhdGUgdGhyZWFkLgotICoKLSAqIEBwYXJhbSB3YWl0VW50aWxEb25l
IElmIEBjIFRSVUUsIHdhaXQgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiB0aHJlYWQgdG8gZmluaXNo
OyBpZiBAYyBGQUxTRSwKLSAqIHJldHVybiBhcyBzb29uIGFzIHRoZSB0aHJlYWQgaGFzIGJlZW4g
Y3JlYXRlZC4KLSAqLwotdm9pZCBld2tfdXRpbF9qYXZhc2NyaXB0X2djX2FsdGVybmF0ZV90aHJl
YWRfY29sbGVjdChFaW5hX0Jvb2wgd2FpdFVudGlsRG9uZSkKLXsKLSAgICBXZWJDb3JlOjpnY0Nv
bnRyb2xsZXIoKS5nYXJiYWdlQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5nKHdh
aXRVbnRpbERvbmUpOwotfQotCi0vKioKLSAqIEBpbnRlcm5hbAotICoKLSAqIFJldHVybnMgdGhl
IG51bWJlciBvZiBjdXJyZW50IEphdmFTY3JpcHQgb2JqZWN0cy4KLSAqLwotdW5zaWduZWQgZXdr
X3V0aWxfamF2YXNjcmlwdF9nY19vYmplY3RfY291bnRfZ2V0KCkKLXsKLSAgICByZXR1cm4gV2Vi
Q29yZTo6SlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdENvdW50
KCk7Ci19Ci0KLS8qKgotICogQGludGVybmFsCi0gKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9m
IGN1cnJlbnQgd29ya2VkIHRocmVhZHMuCi0gKi8KLXVuc2lnbmVkIGV3a191dGlsX3dvcmtlcl90
aHJlYWRfY291bnQoKQotewotI2lmIEVOQUJMRShXT1JLRVJTKQotICAgIHJldHVybiBXZWJDb3Jl
OjpXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZENvdW50KCk7Ci0jZWxzZQotICAgIHJldHVybiAw
OwotI2VuZGlmCi19Ci0KLS8qKgotICogQGludGVybmFsCiAgKiBHZXRzIGRwaSB2YWx1ZS4KICAq
CiAgKiBAcmV0dXJuIGRldmljZSdzIGRwaSB2YWx1ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcu
Y3BwCmluZGV4IDQ4MjRjYmNhMmEwNTU5MWRkNWRhNmIyMTgyYjE2YjQzNTE5NjFkZjIuLjhmODdj
MjAxYzRkY2FmYjk0ZDczOGNmMWYyYTNjNTJhOGE5MDRhZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a192aWV3LmNwcApAQCAtMzc4MSwzICszNzgxLDE0IEBAIHZvaWQgZXdrX3ZpZXdfZWRpdG9yX2Ns
aWVudF9jb250ZW50c19jaGFuZ2VkKEV2YXNfT2JqZWN0KiBvKQogewogICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImVkaXRvcmNsaWVudCxjb250ZW50cyxjaGFuZ2VkIiwg
MCk7CiB9CisKK25hbWVzcGFjZSBFV0tQcml2YXRlIHsKKworV2ViQ29yZTo6UGFnZSAqY29yZVBh
Z2UoY29uc3QgRXZhc19PYmplY3QgKmV3a1ZpZXcpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCAwKTsKKyAgICByZXR1cm4gcHJpdi0+cGFnZTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgRVdLUHJpdmF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL2VmbHN5bWJvbHMuZmlsdGVy
IGIvU291cmNlL2NtYWtlL2VmbHN5bWJvbHMuZmlsdGVyCmluZGV4IDM1NmEwMGM1YzZhYWRjNmFm
NGZlMmU2Mjc3MWUwY2NiOTVhODE0N2UuLjJiY2IzY2VkOGJkOTA2YjhkNzQ1ZmI0ODJhZmQ2NDll
YjMxNTc4OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9lZmxzeW1ib2xzLmZpbHRlcgorKysg
Yi9Tb3VyY2UvY21ha2UvZWZsc3ltYm9scy5maWx0ZXIKQEAgLTEsNiArMSwxMSBAQAogewogICAg
ICAgICBnbG9iYWw6CiAgICAgICAgICAgICAgICAgZXdrXyo7CisKKyAgICAgICAgICAgICAgICBl
eHRlcm4gIkMrKyIgeworICAgICAgICAgICAgICAgICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmwqOworICAgICAgICAgICAgICAgIH07CisKICAgICAgICAgbG9jYWw6CiAgICAgICAgICAg
ICAgICAgKjsKIH07CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggNjNlMDcyNzM0MzEyYjM1Y2RkMjEyMzMwOTBjMGI3MWE5ODc2NjU5MC4uNjAyM2I4
NWFlNzJlNTM2YzY5ODE0OWI5M2E4MDEzNTJmN2I1NDk2ZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDExLTA5LTIy
ICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgIDxrdWJvQHByb2Z1c2lvbi5tb2JpPgorCisgICAgICAg
IFtFRkxdIEFkZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NDU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvR0NDb250cm9s
bGVyRWZsLmNwcDoKKyAgICAgICAgKEdDQ29udHJvbGxlcjo6Y29sbGVjdCk6CisgICAgICAgIChH
Q0NvbnRyb2xsZXI6OmNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZCk6CisgICAgICAgIChHQ0NvbnRy
b2xsZXI6OmdldEpTT2JqZWN0Q291bnQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9M
YXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y291bnRlclZhbHVlRm9yRWxlbWVudEJ5SWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnBhZ2VOdW1iZXJGb3JFbGVtZW50QnlJZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6bnVtYmVyT2ZQYWdlcyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
d29ya2VyVGhyZWFkQ291bnQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRT
dHJpbmcpOiBCZXNpZGVzIHRoZSByZW5hbWluZywgbm93IHVzZSB0aGUKKyAgICAgICAgcmlnaHQg
V2ViQ29yZSBjYWxsIHRvIGZpbmQgc3RyaW5ncy4KKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCk6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzYW1wbGVTVkdBbmltYXRpb25Gb3JFbGVt
ZW50QXRUaW1lKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZkFjdGl2
ZUFuaW1hdGlvbnMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN1c3BlbmRBbmlt
YXRpb25zKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpyZXN1bWVBbmltYXRpb25z
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvUGl4ZWxEdW1wU3VwcG9ydEVmbC5jcHA6
CisgICAgICAgIChjcmVhdGVCaXRtYXBDb250ZXh0RnJvbVdlYlZpZXcpOgorCiAyMDExLTA5LTIy
ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgRmluZFNh
ZmFyaQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0dDQ29udHJvbGxlckVm
bC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvR0NDb250cm9sbGVyRWZsLmNwcAppbmRl
eCBmMzg1MmYxZmI0ZDJiZGVmYzk5MmE5YzJhNTVjNTI2MDQ4NmRhMzQ3Li4xZjU1YTVjZTYwODhi
NWVmOGFjYWZjYjI3ZGU1ZWFiZTE0YjZjMTNmIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9lZmwvR0NDb250cm9sbGVyRWZsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9l
ZmwvR0NDb250cm9sbGVyRWZsLmNwcApAQCAtMzAsMTkgKzMwLDIwIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJXZWJDb3JlU3Vw
cG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuaCIKICNpbmNsdWRlICJld2tfcHJpdmF0ZS5o
IgogCiB2b2lkIEdDQ29udHJvbGxlcjo6Y29sbGVjdCgpIGNvbnN0CiB7Ci0gICAgZXdrX3V0aWxf
amF2YXNjcmlwdF9nY19jb2xsZWN0KCk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpn
YXJiYWdlQ29sbGVjdG9yQ29sbGVjdCgpOwogfQogCiB2b2lkIEdDQ29udHJvbGxlcjo6Y29sbGVj
dE9uQWx0ZXJuYXRlVGhyZWFkKGJvb2wgd2FpdFVudGlsRG9uZSkgY29uc3QKIHsKLSAgICBld2tf
dXRpbF9qYXZhc2NyaXB0X2djX2FsdGVybmF0ZV90aHJlYWRfY29sbGVjdCh3YWl0VW50aWxEb25l
KTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmdhcmJhZ2VDb2xsZWN0b3JDb2xsZWN0
T25BbHRlcm5hdGVUaHJlYWQod2FpdFVudGlsRG9uZSk7CiB9CiAKIHNpemVfdCBHQ0NvbnRyb2xs
ZXI6OmdldEpTT2JqZWN0Q291bnQoKSBjb25zdAogewotICAgIHJldHVybiBld2tfdXRpbF9qYXZh
c2NyaXB0X2djX29iamVjdF9jb3VudF9nZXQoKTsKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsOjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KCk7CiB9CmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcAppbmRleCBkYTZm
ZmI3M2IwNDc3NmZlYmVjYmExYjU3M2UyM2E4YWVjOWFkMDM3Li42NGVjNDNjYjI1MGFiYjU0Nzg2
YjU5MzBlYjkxYjEyODMyM2ViYTVmIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9l
ZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAKQEAgLTM3LDkgKzM3LDEwIEBACiAjaW5j
bHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVl
LmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVDaHJvbWUuaCIKICNpbmNsdWRlICJKU1N0cmlu
Z1V0aWxzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJPd25GYXN0
TWFsbG9jUHRyLmgiCisjaW5jbHVkZSAiV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsLmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlSXRl
bS5oIgogI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCkBAIC00OCw2ICs0OSw3IEBACiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9PcGFxdWVKU1N0cmluZy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dU
RlN0cmluZy5oPgorI2luY2x1ZGUgPGVkaXRpbmcvRmluZE9wdGlvbnMuaD4KICNpbmNsdWRlIDxz
dGRpby5oPgogCiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6fkxheW91dFRlc3RDb250cm9sbGVyKCkK
QEAgLTg5LDggKzkxLDkgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZGlzcGxheSgpCiAK
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y291bnRlclZh
bHVlRm9yRWxlbWVudEJ5SWQoSlNTdHJpbmdSZWYgaWQpCiB7Ci0gICAgT3duRmFzdE1hbGxvY1B0
cjxjaGFyPiBjb3VudGVyVmFsdWUoZXdrX2ZyYW1lX2NvdW50ZXJfdmFsdWVfYnlfZWxlbWVudF9p
ZF9nZXQobWFpbkZyYW1lLCBpZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICByZXR1
cm4gSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZyhjb3VudGVyVmFsdWUuZ2V0KCkpKTsKKyAgICBjb25zdCBFdmFzX09iamVjdCogbWFp
bkZyYW1lID0gYnJvd3Nlci0+bWFpbkZyYW1lKCk7CisgICAgY29uc3QgU3RyaW5nIGNvdW50ZXJW
YWx1ZShEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNvdW50ZXJWYWx1ZUJ5RWxlbWVudElkKG1h
aW5GcmFtZSwgaWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgcmV0dXJuIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPihBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
Y291bnRlclZhbHVlLnV0ZjgoKS5kYXRhKCkpKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6a2VlcFdlYkhpc3RvcnkoKQpAQCAtMTE4LDEyICsxMjEsMTIgQEAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpsYXllclRyZWVBc1RleHQoKSBjb25z
dAogCiBpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VOdW1iZXJGb3JFbGVtZW50QnlJZChK
U1N0cmluZ1JlZiBpZCwgZmxvYXQgcGFnZVdpZHRoLCBmbG9hdCBwYWdlSGVpZ2h0KQogewotICAg
IHJldHVybiBld2tfZnJhbWVfcGFnZV9udW1iZXJfYnlfZWxlbWVudF9pZF9nZXQobWFpbkZyYW1l
LCBpZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCk7Cisg
ICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6bnVtYmVyT2ZQYWdlc0ZvckVsZW1l
bnRJZChicm93c2VyLT5tYWluRnJhbWUoKSwgaWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBw
YWdlV2lkdGgsIHBhZ2VIZWlnaHQpOwogfQogCiBpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51
bWJlck9mUGFnZXMoZmxvYXQgcGFnZVdpZHRoLCBmbG9hdCBwYWdlSGVpZ2h0KQogewotICAgIHJl
dHVybiBld2tfZnJhbWVfcGFnZV9udW1iZXJfZ2V0KG1haW5GcmFtZSwgcGFnZVdpZHRoLCBwYWdl
SGVpZ2h0KTsKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpudW1iZXJPZlBh
Z2VzKGJyb3dzZXItPm1haW5GcmFtZSgpLCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VQcm9wZXJ0
eShjb25zdCBjaGFyKiwgaW50KSBjb25zdApAQCAtMTU1LDcgKzE1OCw3IEBAIHNpemVfdCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgpCiAKIHVuc2lnbmVkIExheW91
dFRlc3RDb250cm9sbGVyOjp3b3JrZXJUaHJlYWRDb3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGV3a191dGlsX3dvcmtlcl90aHJlYWRfY291bnQoKTsKKyAgICByZXR1cm4gRHVtcFJlbmRlclRy
ZWVTdXBwb3J0RWZsOjp3b3JrZXJUaHJlYWRDb3VudCgpOwogfQogCiB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpub3RpZnlEb25lKCkKQEAgLTQ1MCwxMCArNDUzLDkgQEAgYm9vbCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdS
ZWYgdGFyZ2V0LAogICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVl
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1
ZTsKLSAgICBib29sIGZvcndhcmQgPSB0cnVlOwotICAgIGJvb2wgd3JhcCA9IGZhbHNlOwotICAg
IHNpemVfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250
ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOworICAgIFdlYkNvcmU6OkZpbmRPcHRpb25zIG9wdGlvbnMg
PSAwOworCisgICAgY29uc3Qgc2l6ZV90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNP
YmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKTsKICAg
ICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQpAQCAtNDYyLDE0ICs0
NjQsMjAgQEAgYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgdGFyZ2V0LAogICAgICAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gb3B0aW9uTmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2
YWx1ZSwgMCkpOwogCiAgICAgICAgIGlmIChlcXVhbHMob3B0aW9uTmFtZSwgIkNhc2VJbnNlbnNp
dGl2ZSIpKQotICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZSA9IGZhbHNlOworICAgICAgICAgICAg
b3B0aW9ucyB8PSBXZWJDb3JlOjpDYXNlSW5zZW5zaXRpdmU7CisgICAgICAgIGVsc2UgaWYgKGVx
dWFscyhvcHRpb25OYW1lLCAiQXRXb3JkU3RhcnRzIikpCisgICAgICAgICAgICBvcHRpb25zIHw9
IFdlYkNvcmU6OkF0V29yZFN0YXJ0czsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxzKG9wdGlvbk5h
bWUsICJUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydCIpKQorICAgICAgICAgICAgb3B0aW9u
cyB8PSBXZWJDb3JlOjpUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydDsKICAgICAgICAgZWxz
ZSBpZiAoZXF1YWxzKG9wdGlvbk5hbWUsICJCYWNrd2FyZHMiKSkKLSAgICAgICAgICAgIGZvcndh
cmQgPSBmYWxzZTsKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6QmFja3dhcmRzOwog
ICAgICAgICBlbHNlIGlmIChlcXVhbHMob3B0aW9uTmFtZSwgIldyYXBBcm91bmQiKSkKLSAgICAg
ICAgICAgIHdyYXAgPSB0cnVlOworICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpXcmFw
QXJvdW5kOworICAgICAgICBlbHNlIGlmIChlcXVhbHMob3B0aW9uTmFtZSwgIlN0YXJ0SW5TZWxl
Y3Rpb24iKSkKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6U3RhcnRJblNlbGVjdGlv
bjsKICAgICB9CiAKLSAgICByZXR1cm4gISFld2tfdmlld190ZXh0X3NlYXJjaChicm93c2VyLCB0
YXJnZXQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBjYXNlU2Vuc2l0aXZlLCBmb3J3YXJkLCB3
cmFwKTsKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpmaW5kU3RyaW5nKGJy
b3dzZXItPm1haW5WaWV3KCksIHRhcmdldC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG9wdGlv
bnMpOwogfQogCiBib29sIExheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFibGVkKEpT
U3RyaW5nUmVmIG5hbWUpCkBAIC01OTAsMzIgKzU5OCwzMiBAQCB2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKQog
CiBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVu
dFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgSlNTdHJpbmdS
ZWYgZWxlbWVudElkKQogewotICAgIHJldHVybiBld2tfZnJhbWVfYW5pbWF0aW9uX3BhdXNlKG1h
aW5GcmFtZSwgYW5pbWF0aW9uTmFtZS0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVsZW1lbnRJ
ZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRpbWUpOworICAgIHJldHVybiBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRFZmw6OnBhdXNlQW5pbWF0aW9uKGJyb3dzZXItPm1haW5GcmFtZSgpLCBhbmlt
YXRpb25OYW1lLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZWxlbWVudElkLT51c3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwgdGltZSk7CiB9CiAKIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBh
dXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5h
bWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCiB7Ci0gICAgcmV0dXJuIGV3
a19mcmFtZV90cmFuc2l0aW9uX3BhdXNlKG1haW5GcmFtZSwgcHJvcGVydHlOYW1lLT51c3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgZWxlbWVudElkLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGlt
ZSk7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6cGF1c2VUcmFuc2l0aW9u
KGJyb3dzZXItPm1haW5GcmFtZSgpLCBwcm9wZXJ0eU5hbWUtPnVzdHJpbmcoKS51dGY4KCkuZGF0
YSgpLCBlbGVtZW50SWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0aW1lKTsKIH0KIAogYm9v
bCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2FtcGxlU1ZHQW5pbWF0aW9uRm9yRWxlbWVudEF0VGlt
ZShKU1N0cmluZ1JlZiBhbmltYXRpb25JZCwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1l
bnRJZCkKIHsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3N2Z19hbmltYXRpb25fcGF1c2UobWFpbkZy
YW1lLCBhbmltYXRpb25JZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVsZW1lbnRJZC0+dXN0
cmluZygpLnV0ZjgoKS5kYXRhKCksIHRpbWUpOworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmw6OnBhdXNlU1ZHQW5pbWF0aW9uKGJyb3dzZXItPm1haW5GcmFtZSgpLCBhbmltYXRp
b25JZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVsZW1lbnRJZC0+dXN0cmluZygpLnV0Zjgo
KS5kYXRhKCksIHRpbWUpOwogfQogCiB1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVt
YmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2Fu
aW1hdGlvbl9hY3RpdmVfbnVtYmVyX2dldChtYWluRnJhbWUpOworICAgIHJldHVybiBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmw6OmFjdGl2ZUFuaW1hdGlvbnNDb3VudChicm93c2VyLT5tYWluRnJh
bWUoKSk7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRpb25z
KCkgY29uc3QKIHsKLSAgICBld2tfZnJhbWVfYW5pbWF0aW9uX3N1c3BlbmQobWFpbkZyYW1lKTsK
KyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnN1c3BlbmRBbmltYXRpb25zKGJyb3dzZXIt
Pm1haW5GcmFtZSgpKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVzdW1lQW5p
bWF0aW9ucygpIGNvbnN0CiB7Ci0gICAgZXdrX2ZyYW1lX2FuaW1hdGlvbl9yZXN1bWUobWFpbkZy
YW1lKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnJlc3VtZUFuaW1hdGlvbnMoYnJv
d3Nlci0+bWFpbkZyYW1lKCkpOwogfQogCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpvdmVy
cmlkZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvZWZsL1BpeGVsRHVtcFN1cHBvcnRFZmwuY3BwIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZWZsL1BpeGVsRHVtcFN1cHBvcnRFZmwuY3BwCmluZGV4IGFlMjllMjYyY2E2
NmIxODAzYTg3NjM5MzQ3MmRhOTU0YzNiZDE2NzMuLjdhYzk2ZmQ4NjMxNTMzZjAzMjhiZGE4NWQ2
YTgxNzE3MDg1NGM4MzEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9QaXhl
bER1bXBTdXBwb3J0RWZsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvUGl4ZWxE
dW1wU3VwcG9ydEVmbC5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJEdW1wUmVuZGVy
VHJlZS5oIgogI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBvcnRDYWlyby5oIgogI2luY2x1ZGUgIlJl
ZlB0ckNhaXJvLmgiCisjaW5jbHVkZSAiV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsLmgiCiAjaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKIAogUGFzc1JlZlB0cjxCaXRtYXBD
b250ZXh0PiBjcmVhdGVCaXRtYXBDb250ZXh0RnJvbVdlYlZpZXcoYm9vbCwgYm9vbCwgYm9vbCwg
Ym9vbCBkcmF3U2VsZWN0aW9uUmVjdCkKQEAgLTUzLDExICs1NCwxMSBAQCBQYXNzUmVmUHRyPEJp
dG1hcENvbnRleHQ+IGNyZWF0ZUJpdG1hcENvbnRleHRGcm9tV2ViVmlldyhib29sLCBib29sLCBi
b29sLCBib29sCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKGRyYXdTZWxlY3Rpb25SZWN0
KSB7Ci0gICAgICAgIGludCB4LCB5LCByZWN0V2lkdGgsIHJlY3RIZWlnaHQ7CisgICAgICAgIGNv
bnN0IFdlYkNvcmU6OkludFJlY3Qgc2VsZWN0aW9uUmVjdCA9IER1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbDo6c2VsZWN0aW9uUmVjdGFuZ2xlKG1haW5GcmFtZSk7CiAKLSAgICAgICAgaWYgKGV3a19m
cmFtZV9zZWxlY3Rpb25fcmVjdGFuZ2xlX2dldChtYWluRnJhbWUsICZ4LCAmeSwgJnJlY3RXaWR0
aCwgJnJlY3RIZWlnaHQpKSB7CisgICAgICAgIGlmICghc2VsZWN0aW9uUmVjdC5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNvbnRleHQuZ2V0KCksIDEuMCk7
Ci0gICAgICAgICAgICBjYWlyb19yZWN0YW5nbGUoY29udGV4dC5nZXQoKSwgeCwgeSwgcmVjdFdp
ZHRoLCByZWN0SGVpZ2h0KTsKKyAgICAgICAgICAgIGNhaXJvX3JlY3RhbmdsZShjb250ZXh0Lmdl
dCgpLCBzZWxlY3Rpb25SZWN0LngoKSwgc2VsZWN0aW9uUmVjdC55KCksIHNlbGVjdGlvblJlY3Qu
d2lkdGgoKSwgc2VsZWN0aW9uUmVjdC5oZWlnaHQoKSk7CiAgICAgICAgICAgICBjYWlyb19zZXRf
c291cmNlX3JnYmEoY29udGV4dC5nZXQoKSwgMS4wLCAwLjAsIDAuMCwgMS4wKTsKICAgICAgICAg
ICAgIGNhaXJvX3N0cm9rZShjb250ZXh0LmdldCgpKTsKICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110371</attachid>
            <date>2011-10-10 11:13:44 -0700</date>
            <delta_ts>2011-10-14 05:46:47 -0700</delta_ts>
            <desc>Rebase on top of trunk</desc>
            <filename>bug-68458-20111010151328.patch</filename>
            <type>text/plain</type>
            <size>44766</size>
            <attacher name="Raphael Kubo da Costa (:rakuco)">rakuco</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTcwNjcKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCBmZWNmYTk1MGI5YjQ0OTgwMDg2YmUyM2FlNTVjNzM5Y2Q3NzIzMDNlLi5kZDEy
YTVjYjI5NDg3ZTViZmZhNzkyNDA2NDllZjhkNmQ5M2FmYmJkIDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMTAtMTAgIFJhcGhhZWwg
S3VibyBkYSBDb3N0YSAgPGt1Ym9AcHJvZnVzaW9uLm1vYmk+CisKKyAgICAgICAgW0VGTF0gQWRk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Njg0NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9lZmxzeW1ib2xzLmZpbHRlcjogRXhwb3J0
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbAorICAgICAgICBzeW1ib2xzIHNvIHRoYXQgRHVtcFJl
bmRlclRyZWUgY2FuIGxpbmsgdG8gdGhlbS4KKwogMjAxMS0xMC0wNiAgRmFkeSBTYW11ZWwgIDxm
c2FtdWVsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBDb2RlIGNsZWFuLXVwOiBNYWtlIFJlbmRl
ck9iamVjdDo6YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QgYW5kIGFzc29jaWF0ZWQgbWV0aG9kcyBj
b25zdCBhbmQgbWFrZSBpdHMgcGFyYW1ldGVyIHVzZVRyYW5zZm9ybXMgbm8gbG9uZ2VyIGRlZmF1
bHQgdG8gZmFsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwu
dHh0IGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKaW5kZXggYTRkYjQwNTY5
NDg0M2YwY2UzNjM3YjA4YmI3YzE3MzhiNDI3MWZiNy4uMjBkNTMyYWM1NTE2MWU3YTQ3NzQ5Mzk0
NWI0YTg5ZDcxOTJkZGVjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0
c0VmbC50eHQKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKQEAgLTIy
LDYgKzIyLDE0IEBAIExJU1QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAg
JHtTUUxJVEVfSU5DTFVERV9ESVJ9CiApCiAKK0lGIChFTkFCTEVfU1ZHKQorICBMSVNUKEFQUEVO
RCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUworICAgICIke1dFQkNPUkVfRElSfS9zdmciCisg
ICAgIiR7V0VCQ09SRV9ESVJ9L3N2Zy9hbmltYXRpb24iCisgICAgIiR7V0VCQ09SRV9ESVJ9L3Jl
bmRlcmluZy9zdmciCisgICkKK0VORElGICgpCisKIElGIChFTkFCTEVfVklERU8pCiBMSVNUKEFQ
UEVORCBXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIiCkBAIC01OSw2ICs2Nyw3IEBAIExJU1QoQVBQRU5EIFdl
YktpdF9TT1VSQ0VTCiAgICAgZWZsL1dlYkNvcmVTdXBwb3J0L0RldmljZU9yaWVudGF0aW9uQ2xp
ZW50RWZsLmNwcAogICAgIGVmbC9XZWJDb3JlU3VwcG9ydC9EZXZpY2VNb3Rpb25DbGllbnRFZmwu
Y3BwCiAgICAgZWZsL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRFZmwuY3BwCisgICAgZWZsL1dl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAKICAgICBlZmwvV2ViQ29y
ZVN1cHBvcnQvRWRpdG9yQ2xpZW50RWZsLmNwcAogICAgIGVmbC9XZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudEVmbC5jcHAKICAgICBlZmwvV2ViQ29yZVN1cHBvcnQvRnVsbHNjcmVlblZp
ZGVvQ29udHJvbGxlckVmbC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCBhYTA1ZjhkODVlZTJlMWE4
ZTUwZGFhNDEwOWQ3OGFkNGM1MjE1MzJmLi40ZDUxY2MyMjUzNTRjOTBmMmYxM2IxNDBhMmZmYzE5
ZmZiOTkyY2MwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzAgQEAKKzIwMTEtMTAtMTAg
IFJhcGhhZWwgS3VibyBkYSBDb3N0YSAgPGt1Ym9AcHJvZnVzaW9uLm1vYmk+CisKKyAgICAgICAg
W0VGTF0gQWRkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg0NTgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNsYXNzIGlzIHNpbWlsYXIgdG8gdGhlaXIg
Y291bnRlcnBhcnRzIHByZXNlbnQgaW4gdGhlIFF0IGFuZCBHVEsrCisgICAgICAgIHBvcnRzLCBh
bmQgaXQgaXMgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyBhbiBpbnRlcmZhY2UgdG8gY2VydGFp
bgorICAgICAgICBXZWJDb3JlIG1ldGhvZHMgbmVlZGVkIGJ5IER1bXBSZW5kZXJUcmVlLgorCisg
ICAgICAgICogQ01ha2VMaXN0c0VmbC50eHQ6IENvbmRpdGlvbmFsbHkgYWRkIHRoZSBzdmcgZGly
ZWN0b3JpZXMgdG8gdGhlCisgICAgICAgIGluY2x1ZGUgcGF0aC4KKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwOiBBZGRlZC4KKyAgICAgICAgKER1
bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsKToKKyAgICAg
ICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6fkR1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbCk6
CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmFjdGl2ZUFuaW1hdGlvbnNDb3Vu
dCk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNsZWFyRnJhbWVOYW1lKToK
KyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y2xlYXJPcGVuZXIpOgorICAgICAg
ICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpjb3VudGVyVmFsdWVCeUVsZW1lbnRJZCk6Cisg
ICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmZyYW1lQ2hpbGRyZW4pOgorICAgICAg
ICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpmcmFtZVBhcmVudCk6CisgICAgICAgIChEdW1w
UmVuZGVyVHJlZVN1cHBvcnRFZmw6OmxheW91dEZyYW1lKToKKyAgICAgICAgKER1bXBSZW5kZXJU
cmVlU3VwcG9ydEVmbDo6bnVtYmVyT2ZQYWdlcyk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmw6Om51bWJlck9mUGFnZXNGb3JFbGVtZW50SWQpOgorICAgICAgICAoRHVtcFJlbmRl
clRyZWVTdXBwb3J0RWZsOjpwYXVzZUFuaW1hdGlvbik6CisgICAgICAgIChEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OnBhdXNlU1ZHQW5pbWF0aW9uKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbDo6cGF1c2VUcmFuc2l0aW9uKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbDo6cGVuZGluZ1VubG9hZEV2ZW50Q291bnQpOgorICAgICAgICAoRHVtcFJlbmRlclRy
ZWVTdXBwb3J0RWZsOjpyZW5kZXJUcmVlRHVtcCk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmw6OnJlc3BvbnNlTWltZVR5cGUpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsOjpyZXN1bWVBbmltYXRpb25zKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbDo6c2VsZWN0aW9uUmVjdGFuZ2xlKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbDo6c3VpdGFibGVEUlRGcmFtZU5hbWUpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsOjpzdXNwZW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmw6OmZpbmRTdHJpbmcpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpn
YXJiYWdlQ29sbGVjdG9yQ29sbGVjdCk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRF
Zmw6OmdhcmJhZ2VDb2xsZWN0b3JDb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQpOgorICAgICAgICAo
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KToKKyAgICAg
ICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6d29ya2VyVGhyZWFkQ291bnQpOgorICAgICAg
ICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpjaGlsZEhpc3RvcnlJdGVtcyk6CisgICAgICAg
IChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6Omhpc3RvcnlJdGVtVGFyZ2V0KToKKyAgICAgICAg
KER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6aXNUYXJnZXRJdGVtKToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuaDogQWRkZWQuCisgICAgICAgICog
ZXdrL2V3a19mcmFtZS5jcHA6CisgICAgICAgIChFV0tQcml2YXRlOjpjb3JlRnJhbWUpOiBFeHBv
cnQgdGhlIFdlYkNvcmU6OkZyYW1lKiByZWxhdGVkIHRvIGFuCisgICAgICAgIGV3a19mcmFtZS4K
KyAgICAgICAgKiBld2svZXdrX2hpc3RvcnkuY3BwOiBSZW1vdmUgZnVuY3Rpb25zIHdoaWNoIGhh
dmUgYmVlbiBtb3ZlZCB0bworICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuCisgICAg
ICAgIChfZXdrX2hpc3RvcnlfaXRlbV9saXN0X2dldCk6IF9ld2tfaGlzdG9yeV9pdGVtX25ldyAt
PgorICAgICAgICBld2tfaGlzdG9yeV9pdGVtX25ld19mcm9tX2NvcmUuCisgICAgICAgIChld2tf
aGlzdG9yeV9oaXN0b3J5X2l0ZW1fYmFja19nZXQpOiBEaXR0by4KKyAgICAgICAgKGV3a19oaXN0
b3J5X2hpc3RvcnlfaXRlbV9jdXJyZW50X2dldCk6IERpdHRvLgorICAgICAgICAoZXdrX2hpc3Rv
cnlfaGlzdG9yeV9pdGVtX2ZvcndhcmRfZ2V0KTogRGl0dG8uCisgICAgICAgIChld2tfaGlzdG9y
eV9oaXN0b3J5X2l0ZW1fbnRoX2dldCk6IERpdHRvLgorICAgICAgICAoZXdrX2hpc3RvcnlfaXRl
bV9uZXcpOiBEaXR0by4KKyAgICAgICAgKGV3a19oaXN0b3J5X2l0ZW1fbmV3X2Zyb21fY29yZSk6
IFJlbmFtZSBmcm9tIF9ld2tfaGlzdG9yeV9pdGVtX25ldy4KKyAgICAgICAgKEVXS1ByaXZhdGU6
OmNvcmVIaXN0b3J5SXRlbSk6IEV4cG9ydCB0aGUgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qCisgICAg
ICAgIHJlbGF0ZWQgdG8gYW4gRXdrX0hpc3RvcnlfSXRlbS4KKyAgICAgICAgKiBld2svZXdrX3By
aXZhdGUuaDogQ3JlYXRlIHRoZSBFV0tQcml2YXRlIG5hbWVzcGFjZSwgcmVtb3ZlIGZ1bmN0aW9u
cworICAgICAgICB3aGljaCBoYXZlIGJlZW4gbW92ZWQgdG8gRHVtcFJlbmRlclRyZWVTdXBwb3J0
RWZsLgorICAgICAgICAqIGV3ay9ld2tfdXRpbC5jcHA6IFJlbW92ZSBmdW5jdGlvbnMgd2hpY2gg
aGF2ZSBiZWVuIG1vdmVkIHRvCisgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC4KKyAg
ICAgICAgKiBld2svZXdrX3ZpZXcuY3BwOgorICAgICAgICAoRVdLUHJpdmF0ZTo6Y29yZVBhZ2Up
OiBFeHBvcnQgdGhlIFdlYkNvcmU6OlBhZ2UqIHJlbGF0ZWQgdG8gYW4KKyAgICAgICAgZXdrX3Zp
ZXcuCisKIDIwMTEtMTAtMDkgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgog
CiAgICAgICAgIFtFRkxdIFJlZmFjdG9yIHpvb20gcmVsYXRlZCBBUElzLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZs
LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDkzODdjZTAyMzNlNTFiNzkzZDI0ZWEzZjEyMDEyNDRi
ZjdjMzIwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAKQEAgLTAsMCArMSwzOTYgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgICAgQ29w
eXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmgiCisKKyNpbmNsdWRlICJF
V2ViS2l0LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRFZmwuaCIKKyNpbmNsdWRlICJl
d2tfcHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8QW5pbWF0aW9uQ29udHJvbGxlci5oPgorI2luY2x1
ZGUgPERvY3VtZW50TG9hZGVyLmg+CisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPEV2YXMu
aD4KKyNpbmNsdWRlIDxGaW5kT3B0aW9ucy5oPgorI2luY2x1ZGUgPEZsb2F0U2l6ZS5oPgorI2lu
Y2x1ZGUgPEZyYW1lVmlldy5oPgorI2luY2x1ZGUgPEludFJlY3QuaD4KKyNpbmNsdWRlIDxQcmlu
dENvbnRleHQuaD4KKyNpbmNsdWRlIDxSZW5kZXJUcmVlQXNUZXh0Lmg+CisjaW5jbHVkZSA8Ymlu
ZGluZ3MvanMvR0NDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8aGlzdG9yeS9IaXN0b3J5SXRlbS5o
PgorI2luY2x1ZGUgPHdvcmtlcnMvV29ya2VyVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
QXRvbWljU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgPFNWR0RvY3VtZW50
RXh0ZW5zaW9ucy5oPgorI2luY2x1ZGUgPFNWR1NNSUxFbGVtZW50Lmg+CisjZW5kaWYKKworRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsOjpEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwoKQoreworfQor
CitEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6On5EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwoKQor
eworfQorCit1bnNpZ25lZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmFjdGl2ZUFuaW1hdGlv
bnNDb3VudChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCit7CisgICAgV2ViQ29yZTo6RnJh
bWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1lKTsKKworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJv
bGxlciogYW5pbWF0aW9uQ29udHJvbGxlciA9IGZyYW1lLT5hbmltYXRpb24oKTsKKworICAgIGlm
ICghYW5pbWF0aW9uQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4g
YW5pbWF0aW9uQ29udHJvbGxlci0+bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKGZyYW1lLT5kb2N1
bWVudCgpKTsKK30KKwordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNsZWFyRnJhbWVO
YW1lKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUg
PSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYgKGZyYW1lKQorICAg
ICAgICBmcmFtZS0+dHJlZSgpLT5jbGVhck5hbWUoKTsKK30KKwordm9pZCBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OmNsZWFyT3BlbmVyKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKK3sKKyAgICBX
ZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOwor
CisgICAgaWYgKGZyYW1lKQorICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnNldE9wZW5lcigwKTsK
K30KKworU3RyaW5nIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y291bnRlclZhbHVlQnlFbGVt
ZW50SWQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBlbGVtZW50SWQp
Cit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3
a0ZyYW1lKTsKKworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwor
ICAgIFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0RWxl
bWVudEJ5SWQoZWxlbWVudElkKTsKKworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworCisgICAgcmV0dXJuIFdlYkNvcmU6OmNvdW50ZXJWYWx1ZUZvckVsZW1lbnQo
ZWxlbWVudCk7Cit9CisKK0VpbmFfTGlzdCogRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpmcmFt
ZUNoaWxkcmVuKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKK3sKKyAgICBXZWJDb3JlOjpG
cmFtZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYg
KCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBFaW5hX0xpc3QqIGNoaWxkRnJhbWVz
ID0gMDsKKworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGZyYW1lLT50cmVl
KCktPmNoaWxkQ291bnQoKTsgaW5kZXgrKykgeworICAgICAgICBXZWJDb3JlOjpGcmFtZSAqY2hp
bGRGcmFtZSA9IGZyYW1lLT50cmVlKCktPmNoaWxkKGluZGV4KTsKKyAgICAgICAgV2ViQ29yZTo6
RnJhbWVMb2FkZXJDbGllbnRFZmwgKmNsaWVudCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkZyYW1l
TG9hZGVyQ2xpZW50RWZsKj4oY2hpbGRGcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKTsKKworICAg
ICAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNoaWxk
RnJhbWVzID0gZWluYV9saXN0X2FwcGVuZChjaGlsZEZyYW1lcywgY2xpZW50LT53ZWJGcmFtZSgp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gY2hpbGRGcmFtZXM7Cit9CisKK1dlYkNvcmU6OkZyYW1l
KiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmZyYW1lUGFyZW50KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tGcmFtZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBFV0tQcml2YXRlOjpj
b3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7Cit9CisKK3ZvaWQgRHVtcFJl
bmRlclRyZWVTdXBwb3J0RWZsOjpsYXlvdXRGcmFtZShFdmFzX09iamVjdCogZXdrRnJhbWUpCit7
CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0Zy
YW1lKTsKKworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6
OkZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKKworICAgIGlmICghZnJhbWVW
aWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBmcmFtZVZpZXctPmxheW91dCgpOworfQorCitp
bnQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpudW1iZXJPZlBhZ2VzKGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSwgZmxvYXQgcGFnZVdpZHRoLCBmbG9hdCBwYWdlSGVpZ2h0KQoreworICAg
IFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShld2tGcmFtZSk7
CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBXZWJD
b3JlOjpQcmludENvbnRleHQ6Om51bWJlck9mUGFnZXMoZnJhbWUsIFdlYkNvcmU6OkZsb2F0U2l6
ZShwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpKTsKK30KKworaW50IER1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbDo6bnVtYmVyT2ZQYWdlc0ZvckVsZW1lbnRJZChjb25zdCBFdmFzX09iamVjdCogZXdrRnJh
bWUsIGNvbnN0IGNoYXIqIGVsZW1lbnRJZCwgZmxvYXQgcGFnZVdpZHRoLCBmbG9hdCBwYWdlSGVp
Z2h0KQoreworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFt
ZShld2tGcmFtZSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFdlYkNvcmU6OkVsZW1lbnQgKmVsZW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVu
dEJ5SWQoZWxlbWVudElkKTsKKworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gV2ViQ29yZTo6UHJpbnRDb250ZXh0OjpwYWdlTnVtYmVyRm9yRWxlbWVu
dChlbGVtZW50LCBXZWJDb3JlOjpGbG9hdFNpemUocGFnZVdpZHRoLCBwYWdlSGVpZ2h0KSk7Cit9
CisKK2Jvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpwYXVzZUFuaW1hdGlvbihFdmFzX09i
amVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIGVsZW1lbnRJZCwg
ZG91YmxlIHRpbWUpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6
Y29yZUZyYW1lKGV3a0ZyYW1lKTsKKworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQo
KS0+Z2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsKKworICAgIGlmICghZWxlbWVudCB8fCAhZWxl
bWVudC0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGZy
YW1lLT5hbmltYXRpb24oKS0+cGF1c2VBbmltYXRpb25BdFRpbWUoZWxlbWVudC0+cmVuZGVyZXIo
KSwgbmFtZSwgdGltZSk7Cit9CisKK2Jvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpwYXVz
ZVNWR0FuaW1hdGlvbihFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGFuaW1hdGlv
bklkLCBjb25zdCBjaGFyKiBlbGVtZW50SWQsIGRvdWJsZSB0aW1lKQoreworI2lmIEVOQUJMRShT
VkcpCisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3
a0ZyYW1lKTsKKworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IFdlYkNvcmU6OkRvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOworCisgICAg
aWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnN2Z0V4dGVuc2lvbnMoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCA9IGRvY3VtZW50LT5n
ZXRFbGVtZW50QnlJZChhbmltYXRpb25JZCk7CisKKyAgICBpZiAoIWVsZW1lbnQgfHwgIVdlYkNv
cmU6OlNWR1NNSUxFbGVtZW50Ojppc1NNSUxFbGVtZW50KGVsZW1lbnQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZG9jdW1lbnQtPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+
c2FtcGxlQW5pbWF0aW9uQXRUaW1lKGVsZW1lbnRJZCwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U1ZH
U01JTEVsZW1lbnQqPihlbGVtZW50KSwgdGltZSk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsK
KyNlbmRpZgorfQorCitib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6cGF1c2VUcmFuc2l0
aW9uKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciog
ZWxlbWVudElkLCBkb3VibGUgdGltZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBF
V0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYgKCFmcmFtZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgV2ViQ29yZTo6RWxlbWVudCogZWxlbWVudCA9IGZyYW1l
LT5kb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpOworCisgICAgaWYgKCFlbGVt
ZW50IHx8ICFlbGVtZW50LT5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gZnJhbWUtPmFuaW1hdGlvbigpLT5wYXVzZVRyYW5zaXRpb25BdFRpbWUoZWxlbWVu
dC0+cmVuZGVyZXIoKSwgbmFtZSwgdGltZSk7Cit9CisKK3Vuc2lnbmVkIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbDo6cGVuZGluZ1VubG9hZEV2ZW50Q291bnQoY29uc3QgRXZhc19PYmplY3QqIGV3
a0ZyYW1lKQoreworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVG
cmFtZShld2tGcmFtZSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIHJldHVybiBmcmFtZS0+ZG9tV2luZG93KCktPnBlbmRpbmdVbmxvYWRFdmVudExpc3RlbmVy
cygpOworfQorCitTdHJpbmcgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpyZW5kZXJUcmVlRHVt
cChFdmFzX09iamVjdCogZXdrRnJhbWUpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0g
RVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1lKTsKKworICAgIGlmICghZnJhbWUpCisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIFdlYkNvcmU6OkZyYW1lVmlldyAqZnJhbWVWaWV3
ID0gZnJhbWUtPnZpZXcoKTsKKworICAgIGlmIChmcmFtZVZpZXcgJiYgZnJhbWVWaWV3LT5sYXlv
dXRQZW5kaW5nKCkpCisgICAgICAgIGZyYW1lVmlldy0+bGF5b3V0KCk7CisKKyAgICByZXR1cm4g
V2ViQ29yZTo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihmcmFtZSk7Cit9CisKK1N0cmluZyBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRFZmw6OnJlc3BvbnNlTWltZVR5cGUoY29uc3QgRXZhc19PYmplY3Qq
IGV3a0ZyYW1lKQoreworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNv
cmVGcmFtZShld2tGcmFtZSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisKKyAgICBXZWJDb3JlOjpEb2N1bWVudExvYWRlciAqZG9jdW1lbnRMb2FkZXIgPSBm
cmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7CisKKyAgICBpZiAoIWRvY3VtZW50TG9h
ZGVyKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICByZXR1cm4gZG9jdW1lbnRMb2Fk
ZXItPnJlc3BvbnNlTUlNRVR5cGUoKTsKK30KKwordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRF
Zmw6OnJlc3VtZUFuaW1hdGlvbnMoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQoreworICAgIFdlYkNv
cmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShld2tGcmFtZSk7CisKKyAg
ICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJDb3JlOjpBbmltYXRpb25D
b250cm9sbGVyICphbmltYXRpb25Db250cm9sbGVyID0gZnJhbWUtPmFuaW1hdGlvbigpOworICAg
IGlmIChhbmltYXRpb25Db250cm9sbGVyKQorICAgICAgICBhbmltYXRpb25Db250cm9sbGVyLT5y
ZXN1bWVBbmltYXRpb25zKCk7Cit9CisKK1dlYkNvcmU6OkludFJlY3QgRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsOjpzZWxlY3Rpb25SZWN0YW5nbGUoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1l
KQoreworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShl
d2tGcmFtZSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50
UmVjdCgpOworCisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoZnJhbWUtPnNlbGVjdGlvbigp
LT5ib3VuZHMoKSk7Cit9CisKKy8vIENvbXBhcmUgd2l0aCAiV2ViS2l0L1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbQorU3RyaW5nIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbDo6c3VpdGFibGVEUlRGcmFtZU5hbWUoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1l
KQoreworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShl
d2tGcmFtZSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisK
KyAgICBjb25zdCBTdHJpbmcgZnJhbWVOYW1lKGV3a19mcmFtZV9uYW1lX2dldChld2tGcmFtZSkp
OworCisgICAgaWYgKGV3a0ZyYW1lID09IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KGV3a19mcmFt
ZV92aWV3X2dldChld2tGcmFtZSkpKSB7CisgICAgICAgIGlmICghZnJhbWVOYW1lLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoIm1haW4gZnJhbWUgXCIiKSArIGZyYW1lTmFt
ZSArIFN0cmluZygiXCIiKTsKKworICAgICAgICByZXR1cm4gU3RyaW5nKCJtYWluIGZyYW1lIik7
CisgICAgfQorCisgICAgaWYgKCFmcmFtZU5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCJmcmFtZSBcIiIpICsgZnJhbWVOYW1lICsgU3RyaW5nKCJcIiIpOworCisgICAgcmV0
dXJuIFN0cmluZygiZnJhbWUgKGFub255bW91cykiKTsKK30KKwordm9pZCBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OnN1c3BlbmRBbmltYXRpb25zKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKK3sK
KyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJh
bWUpOworCisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViQ29yZTo6
QW5pbWF0aW9uQ29udHJvbGxlciAqYW5pbWF0aW9uQ29udHJvbGxlciA9IGZyYW1lLT5hbmltYXRp
b24oKTsKKyAgICBpZiAoYW5pbWF0aW9uQ29udHJvbGxlcikKKyAgICAgICAgYW5pbWF0aW9uQ29u
dHJvbGxlci0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKK30KKworYm9vbCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmw6OmZpbmRTdHJpbmcoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNo
YXIqIHRleHQsIFdlYkNvcmU6OkZpbmRPcHRpb25zIG9wdGlvbnMpCit7CisgICAgV2ViQ29yZTo6
UGFnZSogcGFnZSA9IEVXS1ByaXZhdGU6OmNvcmVQYWdlKGV3a1ZpZXcpOworCisgICAgaWYgKCFw
YWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcGFnZS0+ZmluZFN0cmlu
ZyhTdHJpbmc6OmZyb21VVEY4KHRleHQpLCBvcHRpb25zKTsKK30KKwordm9pZCBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRFZmw6OmdhcmJhZ2VDb2xsZWN0b3JDb2xsZWN0KCkKK3sKKyAgICBXZWJDb3Jl
OjpnY0NvbnRyb2xsZXIoKS5nYXJiYWdlQ29sbGVjdE5vdygpOworfQorCit2b2lkIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbDo6Z2FyYmFnZUNvbGxlY3RvckNvbGxlY3RPbkFsdGVybmF0ZVRocmVh
ZChib29sIHdhaXRVbnRpbERvbmUpCit7CisgICAgV2ViQ29yZTo6Z2NDb250cm9sbGVyKCkuZ2Fy
YmFnZUNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZEZvckRlYnVnZ2luZyh3YWl0VW50aWxEb25lKTsK
K30KKworc2l6ZV90IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6amF2YVNjcmlwdE9iamVjdHND
b3VudCgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OkpTRE9NV2luZG93Ojpjb21tb25KU0dsb2Jh
bERhdGEoKS0+aGVhcC5vYmplY3RDb3VudCgpOworfQorCit1bnNpZ25lZCBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OndvcmtlclRocmVhZENvdW50KCkKK3sKKyNpZiBFTkFCTEUoV09SS0VSUykK
KyAgICByZXR1cm4gV2ViQ29yZTo6V29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRDb3VudCgpOwor
I2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCitIaXN0b3J5SXRlbUNoaWxkcmVuTWFw
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y2hpbGRIaXN0b3J5SXRlbXMoY29uc3QgRXdrX0hp
c3RvcnlfSXRlbSogZXdrSGlzdG9yeUl0ZW0pCit7CisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0q
IGhpc3RvcnlJdGVtID0gRVdLUHJpdmF0ZTo6Y29yZUhpc3RvcnlJdGVtKGV3a0hpc3RvcnlJdGVt
KTsKKyAgICBIaXN0b3J5SXRlbUNoaWxkcmVuTWFwIGtpZHM7CisKKyAgICBpZiAoIWhpc3RvcnlJ
dGVtKQorICAgICAgICByZXR1cm4ga2lkczsKKworICAgIGNvbnN0IFdlYkNvcmU6Okhpc3RvcnlJ
dGVtVmVjdG9yJiBjaGlsZHJlbiA9IGhpc3RvcnlJdGVtLT5jaGlsZHJlbigpOworICAgIGNvbnN0
IHVuc2lnbmVkIHNpemUgPSBjaGlsZHJlbi5zaXplKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIEV3a19IaXN0b3J5X0l0ZW0qIGtpZCA9IGV3
a19oaXN0b3J5X2l0ZW1fbmV3X2Zyb21fY29yZShjaGlsZHJlbltpXS5nZXQoKSk7CisgICAgICAg
IGtpZHMuc2V0KER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6aGlzdG9yeUl0ZW1UYXJnZXQoa2lk
KSwga2lkKTsKKyAgICB9CisKKyAgICByZXR1cm4ga2lkczsKK30KKworU3RyaW5nIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbDo6aGlzdG9yeUl0ZW1UYXJnZXQoY29uc3QgRXdrX0hpc3RvcnlfSXRl
bSogZXdrSGlzdG9yeUl0ZW0pCit7CisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGhpc3RvcnlJ
dGVtID0gRVdLUHJpdmF0ZTo6Y29yZUhpc3RvcnlJdGVtKGV3a0hpc3RvcnlJdGVtKTsKKworICAg
IGlmICghaGlzdG9yeUl0ZW0pCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJldHVy
biBoaXN0b3J5SXRlbS0+dGFyZ2V0KCk7Cit9CisKK2Jvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0
RWZsOjppc1RhcmdldEl0ZW0oY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogZXdrSGlzdG9yeUl0ZW0p
Cit7CisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGhpc3RvcnlJdGVtID0gRVdLUHJpdmF0ZTo6
Y29yZUhpc3RvcnlJdGVtKGV3a0hpc3RvcnlJdGVtKTsKKworICAgIGlmICghaGlzdG9yeUl0ZW0p
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBoaXN0b3J5SXRlbS0+aXNUYXJn
ZXRJdGVtKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9y
dC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwNDcwYjJmMTNl
NTI0ZDg2NDI0ZmRlZGE2Y2Q2OTg2YTFmYzAzMmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuaApAQCAt
MCwwICsxLDc2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gZW1iZWRk
ZWQgc3lzdGVtcworICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2lmbmRlZiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmxfaAorI2RlZmluZSBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRFZmxfaAorCisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPEZpbmRPcHRp
b25zLmg+CisjaW5jbHVkZSA8SW50UmVjdC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3R5cGVkZWYgc3RydWN0IF9FdmFzX09i
amVjdCBFdmFzX09iamVjdDsKK3R5cGVkZWYgc3RydWN0IF9Fd2tfSGlzdG9yeV9JdGVtIEV3a19I
aXN0b3J5X0l0ZW07CisKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIEV3a19IaXN0b3J5X0l0ZW0q
PiBIaXN0b3J5SXRlbUNoaWxkcmVuTWFwOworCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBG
cmFtZTsKK30KKworY2xhc3MgRUFQSSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwgeworcHVibGlj
OgorICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbCgpOworICAgIH5EdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmwoKTsKKworICAgIHN0YXRpYyB1bnNpZ25lZCBhY3RpdmVBbmltYXRpb25zQ291bnQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBjbGVhckZyYW1l
TmFtZShFdmFzX09iamVjdCogZXdrRnJhbWUpOworICAgIHN0YXRpYyB2b2lkIGNsZWFyT3BlbmVy
KEV2YXNfT2JqZWN0KiBld2tGcmFtZSk7CisgICAgc3RhdGljIFN0cmluZyBjb3VudGVyVmFsdWVC
eUVsZW1lbnRJZChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGVsZW1l
bnRJZCk7CisgICAgc3RhdGljIEVpbmFfTGlzdCogZnJhbWVDaGlsZHJlbihjb25zdCBFdmFzX09i
amVjdCogZXdrRnJhbWUpOworICAgIHN0YXRpYyBXZWJDb3JlOjpGcmFtZSogZnJhbWVQYXJlbnQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBsYXlvdXRGcmFt
ZShFdmFzX09iamVjdCogZXdrRnJhbWUpOworICAgIHN0YXRpYyBpbnQgbnVtYmVyT2ZQYWdlcyhj
b25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGZsb2F0IHBhZ2VXaWR0aCwgZmxvYXQgcGFnZUhl
aWdodCk7CisgICAgc3RhdGljIGludCBudW1iZXJPZlBhZ2VzRm9yRWxlbWVudElkKGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogZWxlbWVudElkLCBmbG9hdCBwYWdlV2lk
dGgsIGZsb2F0IHBhZ2VIZWlnaHQpOworICAgIHN0YXRpYyBib29sIHBhdXNlQW5pbWF0aW9uKEV2
YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogZWxlbWVu
dElkLCBkb3VibGUgdGltZSk7CisgICAgc3RhdGljIGJvb2wgcGF1c2VTVkdBbmltYXRpb24oRXZh
c19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBhbmltYXRpb25JZCwgY29uc3QgY2hhciog
ZWxlbWVudElkLCBkb3VibGUgdGltZSk7CisgICAgc3RhdGljIGJvb2wgcGF1c2VUcmFuc2l0aW9u
KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogZWxl
bWVudElkLCBkb3VibGUgdGltZSk7CisgICAgc3RhdGljIHVuc2lnbmVkIHBlbmRpbmdVbmxvYWRF
dmVudENvdW50KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSk7CisgICAgc3RhdGljIFN0cmlu
ZyByZW5kZXJUcmVlRHVtcChFdmFzX09iamVjdCogZXdrRnJhbWUpOworICAgIHN0YXRpYyBTdHJp
bmcgcmVzcG9uc2VNaW1lVHlwZShjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpOworICAgIHN0
YXRpYyB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoRXZhc19PYmplY3QqIGV3a0ZyYW1lKTsKKyAgICBz
dGF0aWMgV2ViQ29yZTo6SW50UmVjdCBzZWxlY3Rpb25SZWN0YW5nbGUoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lKTsKKyAgICBzdGF0aWMgU3RyaW5nIHN1aXRhYmxlRFJURnJhbWVOYW1lKGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSk7CisgICAgc3RhdGljIHZvaWQgc3VzcGVuZEFuaW1h
dGlvbnMoRXZhc19PYmplY3QqIGV3a0ZyYW1lKTsKKworICAgIHN0YXRpYyBib29sIGZpbmRTdHJp
bmcoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHRleHQsIFdlYkNvcmU6
OkZpbmRPcHRpb25zKTsKKworICAgIHN0YXRpYyB2b2lkIGdhcmJhZ2VDb2xsZWN0b3JDb2xsZWN0
KCk7CisgICAgc3RhdGljIHZvaWQgZ2FyYmFnZUNvbGxlY3RvckNvbGxlY3RPbkFsdGVybmF0ZVRo
cmVhZChib29sIHdhaXRVbnRpbERvbmUpOworICAgIHN0YXRpYyBzaXplX3QgamF2YVNjcmlwdE9i
amVjdHNDb3VudCgpOworICAgIHN0YXRpYyB1bnNpZ25lZCB3b3JrZXJUaHJlYWRDb3VudCgpOwor
CisgICAgc3RhdGljIEhpc3RvcnlJdGVtQ2hpbGRyZW5NYXAgY2hpbGRIaXN0b3J5SXRlbXMoY29u
c3QgRXdrX0hpc3RvcnlfSXRlbSopOworICAgIHN0YXRpYyBTdHJpbmcgaGlzdG9yeUl0ZW1UYXJn
ZXQoY29uc3QgRXdrX0hpc3RvcnlfSXRlbSopOworICAgIHN0YXRpYyBib29sIGlzVGFyZ2V0SXRl
bShjb25zdCBFd2tfSGlzdG9yeV9JdGVtKik7Cit9OworCisjZW5kaWYgLy8gRHVtcFJlbmRlclRy
ZWVTdXBwb3J0RWZsX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJh
bWUuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKaW5kZXggODRkNTA0
NGQxYTJlZjk2M2FjMTc1YzhiZjgxMzI2MWM3N2I4YTMzMS4uZDFhZDc0ZTE0OTRkZWZjNWY0M2U2
OTE5NzI3NjA1MjAwZTM2MmUyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a19mcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKQEAg
LTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJGb2N1
c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEVmbC5oIgotI2luY2x1
ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxD
b2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEhlYWRFbGVtZW50LmgiCkBAIC0xNjY2LDMgKzE2
NjUsMTMgQEAgdm9pZCBld2tfZnJhbWVfZWRpdG9yX2NsaWVudF9jb250ZW50c19jaGFuZ2VkKEV2
YXNfT2JqZWN0KiBvKQogICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKICAg
ICBld2tfdmlld19lZGl0b3JfY2xpZW50X2NvbnRlbnRzX2NoYW5nZWQoc2QtPnZpZXcpOwogfQor
CituYW1lc3BhY2UgRVdLUHJpdmF0ZSB7CisKK1dlYkNvcmU6OkZyYW1lICpjb3JlRnJhbWUoY29u
c3QgRXZhc19PYmplY3QgKmV3a0ZyYW1lKQoreworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgMCk7CisgICAgcmV0dXJuIHNkLT5mcmFtZTsKK30KKworfSAvLyBu
YW1lc3BhY2UgRVdLUHJpdmF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a19oaXN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaGlzdG9yeS5jcHAKaW5k
ZXggNjJkNzc0Mjk4NmMyM2EyMjI0OGIzOGVhNzFiMTQ5NDk0MGUxNzk2Mi4uN2UxNGQxYjZlNzhi
MGVlY2NjNTZkOTI1MTgzMDQzM2I0NTJiMWMyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a19oaXN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hp
c3RvcnkuY3BwCkBAIC03MywyOCArNzMsNiBAQCBzdHJ1Y3QgX0V3a19IaXN0b3J5X0l0ZW0gewog
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGNvcmVfID0gKGl0ZW0pLT5jb3JlCiAK
LQotc3RhdGljIGlubGluZSBFd2tfSGlzdG9yeV9JdGVtKiBfZXdrX2hpc3RvcnlfaXRlbV9uZXco
V2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGNvcmUpCi17Ci0gICAgRXdrX0hpc3RvcnlfSXRlbSogaXRl
bTsKLQotICAgIGlmICghY29yZSkgewotICAgICAgICBFUlIoIldlYkNvcmU6Okhpc3RvcnlJdGVt
IGlzIE5VTEwuIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGl0ZW0gPSBzdGF0
aWNfY2FzdDxFd2tfSGlzdG9yeV9JdGVtKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfSGlzdG9yeV9J
dGVtKSkpOwotICAgIGlmICghaXRlbSkgewotICAgICAgICBDUklUSUNBTCgiQ291bGQgbm90IGFs
bG9jYXRlIGl0ZW0gbWVtb3J5LiIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBj
b3JlLT5yZWYoKTsKLSAgICBpdGVtLT5jb3JlID0gY29yZTsKLQotICAgIHJldHVybiBpdGVtOwot
fQotCiBzdGF0aWMgaW5saW5lIEVpbmFfTGlzdCogX2V3a19oaXN0b3J5X2l0ZW1fbGlzdF9nZXQo
Y29uc3QgV2ViQ29yZTo6SGlzdG9yeUl0ZW1WZWN0b3ImIGNvcmVfaXRlbXMpCiB7CiAgICAgRWlu
YV9MaXN0KiByZXQgPSAwOwpAQCAtMTAyLDcgKzgwLDcgQEAgc3RhdGljIGlubGluZSBFaW5hX0xp
c3QqIF9ld2tfaGlzdG9yeV9pdGVtX2xpc3RfZ2V0KGNvbnN0IFdlYkNvcmU6Okhpc3RvcnlJdGVt
VmUKIAogICAgIHNpemUgPSBjb3JlX2l0ZW1zLnNpemUoKTsKICAgICBmb3IgKGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKSB7Ci0gICAgICAgIEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0gPSBfZXdrX2hpc3Rv
cnlfaXRlbV9uZXcoY29yZV9pdGVtc1tpXS5nZXQoKSk7CisgICAgICAgIEV3a19IaXN0b3J5X0l0
ZW0qIGl0ZW0gPSBld2tfaGlzdG9yeV9pdGVtX25ld19mcm9tX2NvcmUoY29yZV9pdGVtc1tpXS5n
ZXQoKSk7CiAgICAgICAgIGlmIChpdGVtKQogICAgICAgICAgICAgcmV0ID0gZWluYV9saXN0X2Fw
cGVuZChyZXQsIGl0ZW0pOwogICAgIH0KQEAgLTE0Nyw3ICsxMjUsNyBAQCBFaW5hX0Jvb2wgZXdr
X2hpc3RvcnlfaGlzdG9yeV9pdGVtX3NldChFd2tfSGlzdG9yeSogaGlzdG9yeSwgY29uc3QgRXdr
X0hpc3RvcnlfSQogRXdrX0hpc3RvcnlfSXRlbSogZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX2Jh
Y2tfZ2V0KGNvbnN0IEV3a19IaXN0b3J5KiBoaXN0b3J5KQogewogICAgIEVXS19ISVNUT1JZX0NP
UkVfR0VUX09SX1JFVFVSTihoaXN0b3J5LCBjb3JlLCAwKTsKLSAgICByZXR1cm4gX2V3a19oaXN0
b3J5X2l0ZW1fbmV3KGNvcmUtPmJhY2tJdGVtKCkpOworICAgIHJldHVybiBld2tfaGlzdG9yeV9p
dGVtX25ld19mcm9tX2NvcmUoY29yZS0+YmFja0l0ZW0oKSk7CiB9CiAKIEV3a19IaXN0b3J5X0l0
ZW0qIGV3a19oaXN0b3J5X2hpc3RvcnlfaXRlbV9jdXJyZW50X2dldChjb25zdCBFd2tfSGlzdG9y
eSogaGlzdG9yeSkKQEAgLTE1NSwyMCArMTMzLDIwIEBAIEV3a19IaXN0b3J5X0l0ZW0qIGV3a19o
aXN0b3J5X2hpc3RvcnlfaXRlbV9jdXJyZW50X2dldChjb25zdCBFd2tfSGlzdG9yeSogaGlzdG9y
CiAgICAgRVdLX0hJU1RPUllfQ09SRV9HRVRfT1JfUkVUVVJOKGhpc3RvcnksIGNvcmUsIDApOwog
ICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbSA9IGNvcmUtPmN1cnJlbnRJdGVt
KCk7CiAgICAgaWYgKGN1cnJlbnRJdGVtKQotICAgICAgICByZXR1cm4gX2V3a19oaXN0b3J5X2l0
ZW1fbmV3KGN1cnJlbnRJdGVtKTsKKyAgICAgICAgcmV0dXJuIGV3a19oaXN0b3J5X2l0ZW1fbmV3
X2Zyb21fY29yZShjdXJyZW50SXRlbSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIEV3a19IaXN0b3J5
X0l0ZW0qIGV3a19oaXN0b3J5X2hpc3RvcnlfaXRlbV9mb3J3YXJkX2dldChjb25zdCBFd2tfSGlz
dG9yeSogaGlzdG9yeSkKIHsKICAgICBFV0tfSElTVE9SWV9DT1JFX0dFVF9PUl9SRVRVUk4oaGlz
dG9yeSwgY29yZSwgMCk7Ci0gICAgcmV0dXJuIF9ld2tfaGlzdG9yeV9pdGVtX25ldyhjb3JlLT5m
b3J3YXJkSXRlbSgpKTsKKyAgICByZXR1cm4gZXdrX2hpc3RvcnlfaXRlbV9uZXdfZnJvbV9jb3Jl
KGNvcmUtPmZvcndhcmRJdGVtKCkpOwogfQogCiBFd2tfSGlzdG9yeV9JdGVtKiBld2tfaGlzdG9y
eV9oaXN0b3J5X2l0ZW1fbnRoX2dldChjb25zdCBFd2tfSGlzdG9yeSogaGlzdG9yeSwgaW50IGlu
ZGV4KQogewogICAgIEVXS19ISVNUT1JZX0NPUkVfR0VUX09SX1JFVFVSTihoaXN0b3J5LCBjb3Jl
LCAwKTsKLSAgICByZXR1cm4gX2V3a19oaXN0b3J5X2l0ZW1fbmV3KGNvcmUtPml0ZW1BdEluZGV4
KGluZGV4KSk7CisgICAgcmV0dXJuIGV3a19oaXN0b3J5X2l0ZW1fbmV3X2Zyb21fY29yZShjb3Jl
LT5pdGVtQXRJbmRleChpbmRleCkpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2hpc3RvcnlfaGlzdG9y
eV9pdGVtX2NvbnRhaW5zKGNvbnN0IEV3a19IaXN0b3J5KiBoaXN0b3J5LCBjb25zdCBFd2tfSGlz
dG9yeV9JdGVtKiBpdGVtKQpAQCAtMjM3LDEyICsyMTUsMzMgQEAgRWluYV9Cb29sIGV3a19oaXN0
b3J5X2xpbWl0X3NldChjb25zdCBFd2tfSGlzdG9yeSogaGlzdG9yeSwgaW50IGxpbWl0KQogICAg
IHJldHVybiBFSU5BX1RSVUU7CiB9CiAKK0V3a19IaXN0b3J5X0l0ZW0qIGV3a19oaXN0b3J5X2l0
ZW1fbmV3X2Zyb21fY29yZShXZWJDb3JlOjpIaXN0b3J5SXRlbSogY29yZSkKK3sKKyAgICBFd2tf
SGlzdG9yeV9JdGVtKiBpdGVtOworCisgICAgaWYgKCFjb3JlKSB7CisgICAgICAgIEVSUigiV2Vi
Q29yZTo6SGlzdG9yeUl0ZW0gaXMgTlVMTC4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgaXRlbSA9IChFd2tfSGlzdG9yeV9JdGVtKiljYWxsb2MoMSwgc2l6ZW9mKEV3a19IaXN0
b3J5X0l0ZW0pKTsKKyAgICBpZiAoIWl0ZW0pIHsKKyAgICAgICAgQ1JJVElDQUwoIkNvdWxkIG5v
dCBhbGxvY2F0ZSBpdGVtIG1lbW9yeS4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgY29yZS0+cmVmKCk7CisgICAgaXRlbS0+Y29yZSA9IGNvcmU7CisKKyAgICByZXR1cm4gaXRl
bTsKK30KKwogRXdrX0hpc3RvcnlfSXRlbSogZXdrX2hpc3RvcnlfaXRlbV9uZXcoY29uc3QgY2hh
ciogdXJpLCBjb25zdCBjaGFyKiB0aXRsZSkKIHsKICAgICBXVEY6OlN0cmluZyB1ID0gV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHVyaSk7CiAgICAgV1RGOjpTdHJpbmcgdCA9IFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh0aXRsZSk7CiAgICAgV1RGOjpSZWZQdHI8V2ViQ29yZTo6SGlzdG9yeUl0ZW0+IGNv
cmUgPSBXZWJDb3JlOjpIaXN0b3J5SXRlbTo6Y3JlYXRlKHUsIHQsIDApOwotICAgIEV3a19IaXN0
b3J5X0l0ZW0qIGl0ZW0gPSBfZXdrX2hpc3RvcnlfaXRlbV9uZXcoY29yZS5yZWxlYXNlKCkucmVs
ZWFzZVJlZigpKTsKKyAgICBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtID0gZXdrX2hpc3RvcnlfaXRl
bV9uZXdfZnJvbV9jb3JlKGNvcmUucmVsZWFzZSgpLnJlbGVhc2VSZWYoKSk7CiAgICAgcmV0dXJu
IGl0ZW07CiB9CiAKQEAgLTQxMCw1MSArNDA5LDEyIEBAIHZvaWQgZXdrX2hpc3RvcnlfZnJlZShF
d2tfSGlzdG9yeSogaGlzdG9yeSkKICAgICBmcmVlKGhpc3RvcnkpOwogfQogCi0vKioKLSAqIEBp
bnRlcm5hbAotICoKLSAqIFJldHVybnMgYSBuZXdseS1hbGxvY2F0ZWQgc3RyaW5nIHdpdGggdGhl
IGl0ZW0ncyB0YXJnZXQgbmFtZS4KLSAqIENhbGxlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBmcmVl
aW5nIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IHdpdGggZnJlZSgzKS4KLSAqCi0gKiBAcGFyYW0gaXRl
bSBpbnN0YW5jZSB0byBvcGVyYXRlIHVwb24uCi0gKi8KLWNoYXIqIGV3a19oaXN0b3J5X2l0ZW1f
dGFyZ2V0X2dldChjb25zdCBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtKQotewotICAgIEVXS19ISVNU
T1JZX0lURU1fQ09SRV9HRVRfT1JfUkVUVVJOKGl0ZW0sIGNvcmUsIDApOwotICAgIHJldHVybiBz
dHJkdXAoY29yZS0+dGFyZ2V0KCkudXRmOCgpLmRhdGEoKSk7Ci19CituYW1lc3BhY2UgRVdLUHJp
dmF0ZSB7CiAKLS8qKgotICogQGludGVybmFsCi0gKgotICogUmV0dXJucyB3aGV0aGVyIHRoZSBn
aXZlbiBpdGVtIGlzIGN1cnJlbnRseSBhIHRhcmdldC4KLSAqCi0gKiBAcGFyYW0gaXRlbSBpbnN0
YW5jZSB0byBjaGVjay4KLSAqLwotRWluYV9Cb29sIGV3a19oaXN0b3J5X2l0ZW1fdGFyZ2V0X2lz
KGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0pCitXZWJDb3JlOjpIaXN0b3J5SXRlbSogY29y
ZUhpc3RvcnlJdGVtKGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGV3a0hpc3RvcnlJdGVtKQogewot
ICAgIEVXS19ISVNUT1JZX0lURU1fQ09SRV9HRVRfT1JfUkVUVVJOKGl0ZW0sIGNvcmUsIDApOwot
ICAgIHJldHVybiBjb3JlLT5pc1RhcmdldEl0ZW0oKTsKKyAgICBFV0tfSElTVE9SWV9JVEVNX0NP
UkVfR0VUX09SX1JFVFVSTihld2tIaXN0b3J5SXRlbSwgY29yZSwgMCk7CisgICAgcmV0dXJuIGNv
cmU7CiB9CiAKLS8qKgotICogQGludGVybmFsCi0gKgotICogUmV0dXJucyBhIGxpc3Qgb2YgY2hp
bGQgaGlzdG9yeSBpdGVtcyByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gaXRlbSwKLSAqIG9yIEBjIE5V
TEwgaWYgdGhlcmUgYXJlIG5vbmUuCi0gKgotICogQHBhcmFtIGl0ZW0gaW5zdGFuY2UgdG8gb3Bl
cmF0ZSB1cG9uLgotICovCi1FaW5hX0xpc3QqIGV3a19oaXN0b3J5X2l0ZW1fY2hpbGRyZW5fZ2V0
KGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0pCi17Ci0gICAgRVdLX0hJU1RPUllfSVRFTV9D
T1JFX0dFVF9PUl9SRVRVUk4oaXRlbSwgY29yZSwgMCk7Ci0gICAgY29uc3QgV2ViQ29yZTo6SGlz
dG9yeUl0ZW1WZWN0b3ImIGNoaWxkcmVuID0gY29yZS0+Y2hpbGRyZW4oKTsKLSAgICBpZiAoIWNo
aWxkcmVuLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBFaW5hX0xpc3QqIGtpZHMg
PSAwOwotICAgIGNvbnN0IHVuc2lnbmVkIHNpemUgPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAga2lkcyA9IGVpbmFfbGlz
dF9hcHBlbmQoa2lkcywgX2V3a19oaXN0b3J5X2l0ZW1fbmV3KGNoaWxkcmVuW2ldLmdldCgpKSk7
Ci0gICAgcmV0dXJuIGtpZHM7Ci19Cit9IC8vIG5hbWVzcGFjZSBFV0tQcml2YXRlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfcHJpdmF0ZS5oCmluZGV4IGYzODk5YmRlN2YxMmZkY2FhZDFjYjZmYjY3ZmE1
YWQ0MDU1MmU0MTEuLjVjYTg1ZmU2YTRiNmJkMDBiZTY2ZDA4OTY0YmI3MzRjZGY2OTNiNzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfcHJpdmF0ZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfcHJpdmF0ZS5oCkBAIC03Nyw2ICs3NywxNCBAQCBzdHJ1Y3Qg
RXdrX1dpbmRvd19PYmplY3RfQ2xlYXJlZF9FdmVudCB7CiAgICAgRXZhc19PYmplY3QqIGZyYW1l
OwogfTsKIAorbmFtZXNwYWNlIEVXS1ByaXZhdGUgeworCitXZWJDb3JlOjpGcmFtZSAqY29yZUZy
YW1lKGNvbnN0IEV2YXNfT2JqZWN0ICpld2tGcmFtZSk7CitXZWJDb3JlOjpQYWdlICpjb3JlUGFn
ZShjb25zdCBFdmFzX09iamVjdCAqZXdrVmlldyk7CitXZWJDb3JlOjpIaXN0b3J5SXRlbSAqY29y
ZUhpc3RvcnlJdGVtKGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0gKmV3a0hpc3RvcnlJdGVtKTsKKwor
fSAvLyBuYW1lc3BhY2UgRVdLUHJpdmF0ZQorCiB2b2lkIGV3a192aWV3X3JlYWR5KEV2YXNfT2Jq
ZWN0KiBvKTsKIHZvaWQgZXdrX3ZpZXdfaW5wdXRfbWV0aG9kX3N0YXRlX3NldChFdmFzX09iamVj
dCogbywgRWluYV9Cb29sIGFjdGl2ZSk7CiB2b2lkIGV3a192aWV3X3RpdGxlX3NldChFdmFzX09i
amVjdCogbywgY29uc3QgY2hhciogdGl0bGUpOwpAQCAtMTQ3LDIxICsxNTUsMTUgQEAgdm9pZCBl
d2tfdmlld19qc193aW5kb3dfb2JqZWN0X2NsZWFyKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVj
dCogZnJhbWUpOwogI2VuZGlmCiAKIGludCBld2tfdXRpbF9kcGlfZ2V0KCk7Ci12b2lkIGV3a191
dGlsX2phdmFzY3JpcHRfZ2NfY29sbGVjdCgpOwotdm9pZCBld2tfdXRpbF9qYXZhc2NyaXB0X2dj
X2FsdGVybmF0ZV90aHJlYWRfY29sbGVjdChFaW5hX0Jvb2wgd2FpdFVudGlsRG9uZSk7Ci11bnNp
Z25lZCBld2tfdXRpbF9qYXZhc2NyaXB0X2djX29iamVjdF9jb3VudF9nZXQoKTsKLXVuc2lnbmVk
IGV3a191dGlsX3dvcmtlcl90aHJlYWRfY291bnQoKTsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVO
VFMpCiB2b2lkIGV3a192aWV3X25lZWRfdG91Y2hfZXZlbnRzX3NldChFdmFzX09iamVjdCosIGJv
b2wgbmVlZGVkKTsKIEVpbmFfQm9vbCBld2tfdmlld19uZWVkX3RvdWNoX2V2ZW50c19nZXQoY29u
c3QgRXZhc19PYmplY3QqKTsKICNlbmRpZgogCitFd2tfSGlzdG9yeV9JdGVtICpld2tfaGlzdG9y
eV9pdGVtX25ld19mcm9tX2NvcmUoV2ViQ29yZTo6SGlzdG9yeUl0ZW0gKmNvcmUpOwogRXdrX0hp
c3RvcnkqIGV3a19oaXN0b3J5X25ldyhXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3RJbXBsKiBoaXN0
b3J5KTsKIHZvaWQgZXdrX2hpc3RvcnlfZnJlZShFd2tfSGlzdG9yeSogaGlzdG9yeSk7Ci1jaGFy
KiBld2tfaGlzdG9yeV9pdGVtX3RhcmdldF9nZXQoY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogaXRl
bSk7Ci1FaW5hX0Jvb2wgZXdrX2hpc3RvcnlfaXRlbV90YXJnZXRfaXMoY29uc3QgRXdrX0hpc3Rv
cnlfSXRlbSogaXRlbSk7Ci1FaW5hX0xpc3QqIGV3a19oaXN0b3J5X2l0ZW1fY2hpbGRyZW5fZ2V0
KGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0pOwogCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVO
VVMpCiBFd2tfQ29udGV4dF9NZW51KiBld2tfY29udGV4dF9tZW51X25ldyhFdmFzX09iamVjdCog
dmlldywgV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyKiBjb250cm9sbGVyKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdXRpbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX3V0aWwuY3BwCmluZGV4IGI3YzlmZjM5ZGY4MTRjMjliNmVhOTZlMjA1MDE1
MTJhMjY4MmZhOTguLjQxNWIzNmU1ZTc1ZGU5MWFmMjdiNDc0OWZlYTAyYzlkNWQ1Nzg5ZjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdXRpbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a191dGlsLmNwcApAQCAtMjEsOSArMjEsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgImV3a191dGlsLmgiCiAKLSNpbmNsdWRlICJiaW5kaW5ncy9q
cy9HQ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgotI2luY2x1ZGUgIndv
cmtlcnMvV29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSA8ZWluYV9zYWZldHlfY2hlY2tzLmg+CiAK
ICNpZmRlZiBIQVZFX0VDT1JFX1gKQEAgLTExMiw1MyArMTEwLDYgQEAgRXZhc19PYmplY3QqIGV3
a191dGlsX2ltYWdlX2Zyb21fY2Fpcm9fc3VyZmFjZV9hZGQoRXZhcyogY2FudmFzLCBjYWlyb19z
dXJmYWNlX3QKIAogLyoqCiAgKiBAaW50ZXJuYWwKLSAqCi0gKiBQZXJmb3JtcyBnYXJiYWdlIGNv
bGxlY3Rpb24gb2YgSmF2YVNjcmlwdCBvYmplY3RzLgotICovCi12b2lkIGV3a191dGlsX2phdmFz
Y3JpcHRfZ2NfY29sbGVjdCgpCi17Ci0gICAgV2ViQ29yZTo6Z2NDb250cm9sbGVyKCkuZ2FyYmFn
ZUNvbGxlY3ROb3coKTsKLX0KLQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqCi0gKiBQZXJmb3JtcyBn
YXJiYWdlIGNvbGxlY3Rpb24gb2YgSmF2YVNjcmlwdCBvYmplY3RzIGluIGEgc2VwYXJhdGUgdGhy
ZWFkLgotICoKLSAqIEBwYXJhbSB3YWl0VW50aWxEb25lIElmIEBjIFRSVUUsIHdhaXQgdGhlIGdh
cmJhZ2UgY29sbGVjdGlvbiB0aHJlYWQgdG8gZmluaXNoOyBpZiBAYyBGQUxTRSwKLSAqIHJldHVy
biBhcyBzb29uIGFzIHRoZSB0aHJlYWQgaGFzIGJlZW4gY3JlYXRlZC4KLSAqLwotdm9pZCBld2tf
dXRpbF9qYXZhc2NyaXB0X2djX2FsdGVybmF0ZV90aHJlYWRfY29sbGVjdChFaW5hX0Jvb2wgd2Fp
dFVudGlsRG9uZSkKLXsKLSAgICBXZWJDb3JlOjpnY0NvbnRyb2xsZXIoKS5nYXJiYWdlQ29sbGVj
dE9uQWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5nKHdhaXRVbnRpbERvbmUpOwotfQotCi0vKioK
LSAqIEBpbnRlcm5hbAotICoKLSAqIFJldHVybnMgdGhlIG51bWJlciBvZiBjdXJyZW50IEphdmFT
Y3JpcHQgb2JqZWN0cy4KLSAqLwotdW5zaWduZWQgZXdrX3V0aWxfamF2YXNjcmlwdF9nY19vYmpl
Y3RfY291bnRfZ2V0KCkKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6SlNET01XaW5kb3c6OmNvbW1v
bkpTR2xvYmFsRGF0YSgpLT5oZWFwLm9iamVjdENvdW50KCk7Ci19Ci0KLS8qKgotICogQGludGVy
bmFsCi0gKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGN1cnJlbnQgd29ya2VkIHRocmVhZHMu
Ci0gKi8KLXVuc2lnbmVkIGV3a191dGlsX3dvcmtlcl90aHJlYWRfY291bnQoKQotewotI2lmIEVO
QUJMRShXT1JLRVJTKQotICAgIHJldHVybiBXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OndvcmtlclRo
cmVhZENvdW50KCk7Ci0jZWxzZQotICAgIHJldHVybiAwOwotI2VuZGlmCi19Ci0KLS8qKgotICog
QGludGVybmFsCiAgKiBHZXRzIGRwaSB2YWx1ZS4KICAqCiAgKiBAcmV0dXJuIGRldmljZSdzIGRw
aSB2YWx1ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCmluZGV4IGMxMzc2YTkwMDgyYjRi
YWEwMmM2ZDkzZmI3MDdlYmI1ZTZhYzMyZWMuLmVjZDBhMzk3MTA0NWRkMTcyY2IwZWY0ZDZkOThi
NGMwZDdmZTk3ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcApAQCAtMzgzOCwzICsz
ODM4LDE0IEBAIHZvaWQgZXdrX3ZpZXdfZWRpdG9yX2NsaWVudF9jb250ZW50c19jaGFuZ2VkKEV2
YXNfT2JqZWN0KiBvKQogewogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywg
ImVkaXRvcmNsaWVudCxjb250ZW50cyxjaGFuZ2VkIiwgMCk7CiB9CisKK25hbWVzcGFjZSBFV0tQ
cml2YXRlIHsKKworV2ViQ29yZTo6UGFnZSAqY29yZVBhZ2UoY29uc3QgRXZhc19PYmplY3QgKmV3
a1ZpZXcpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7
CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKKyAgICByZXR1
cm4gcHJpdi0+cGFnZTsKK30KKworfSAvLyBuYW1lc3BhY2UgRVdLUHJpdmF0ZQpkaWZmIC0tZ2l0
IGEvU291cmNlL2NtYWtlL2VmbHN5bWJvbHMuZmlsdGVyIGIvU291cmNlL2NtYWtlL2VmbHN5bWJv
bHMuZmlsdGVyCmluZGV4IDM1NmEwMGM1YzZhYWRjNmFmNGZlMmU2Mjc3MWUwY2NiOTVhODE0N2Uu
LjJiY2IzY2VkOGJkOTA2YjhkNzQ1ZmI0ODJhZmQ2NDllYjMxNTc4OGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9jbWFrZS9lZmxzeW1ib2xzLmZpbHRlcgorKysgYi9Tb3VyY2UvY21ha2UvZWZsc3ltYm9s
cy5maWx0ZXIKQEAgLTEsNiArMSwxMSBAQAogewogICAgICAgICBnbG9iYWw6CiAgICAgICAgICAg
ICAgICAgZXdrXyo7CisKKyAgICAgICAgICAgICAgICBleHRlcm4gIkMrKyIgeworICAgICAgICAg
ICAgICAgICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwqOworICAgICAgICAgICAgICAg
IH07CisKICAgICAgICAgbG9jYWw6CiAgICAgICAgICAgICAgICAgKjsKIH07CmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDY3ZjkzMjdiMmE4Mjk1
NTUwODNlNGU4MTM0OWM5NjY1NDk0ZGY3Ni4uODViYzg4ZGRkZTU3MGZhNzRhNzBmNmM5MTczMjM2
MDg2OTExNDA3NiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDExLTEwLTEwICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEg
IDxrdWJvQHByb2Z1c2lvbi5tb2JpPgorCisgICAgICAgIFtFRkxdIEFkZCBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY4NDU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTWFrZSB0aGUgY2FsbHMgaW4gRHVtcFJlbmRlclRyZWUgdXNlIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZUNo
cm9tZS5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZUNocm9tZTo6cmVzZXREZWZhdWx0c1Rv
Q29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25Eb2N1
bWVudExvYWRGaW5pc2hlZCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0dDQ29udHJv
bGxlckVmbC5jcHA6CisgICAgICAgIChHQ0NvbnRyb2xsZXI6OmNvbGxlY3QpOgorICAgICAgICAo
R0NDb250cm9sbGVyOjpjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQpOgorICAgICAgICAoR0NDb250
cm9sbGVyOjpnZXRKU09iamVjdENvdW50KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwv
TGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNvdW50ZXJWYWx1ZUZvckVsZW1lbnRCeUlkKToKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpwYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQpOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6Om51bWJlck9mUGFnZXMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OndvcmtlclRocmVhZENvdW50KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpmaW5k
U3RyaW5nKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0
VGltZU9uRWxlbWVudFdpdGhJZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1
c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKToKKyAgICAgICAgKExheW91dFRlc3RD
b250cm9sbGVyOjpzYW1wbGVTVkdBbmltYXRpb25Gb3JFbGVtZW50QXRUaW1lKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMpOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpyZXN1bWVBbmltYXRpb25zKToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9lZmwvUGl4ZWxEdW1wU3VwcG9ydEVmbC5jcHA6CisgICAgICAgIChjcmVhdGVCaXRt
YXBDb250ZXh0RnJvbVdlYlZpZXcpOgorCiAyMDExLTEwLTA5ICBBZGFtIEJhcnRoICA8YWJhcnRo
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlICJuZWFyIG1pc3MiIFhTUyB2dWxuZXJhYmls
aXRpZXMgaW4gZ2FyZGVuLW8tbWF0aWMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2VmbC9EdW1wUmVuZGVyVHJlZUNocm9tZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwv
RHVtcFJlbmRlclRyZWVDaHJvbWUuY3BwCmluZGV4IDVjZjEzNWU0YmVkYWIwZmE0OWNhNzA3ODdh
N2MyNWNlMDcwYzdlNWIuLjg1YmM1NzdlZmY1ZGM0NGJmMmE1NzIwMDMzNDc0M2Q5NzQ1ZDUwODYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZUNocm9t
ZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21l
LmNwcApAQCAtMTgzLDggKzE4Myw4IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6OnJlc2V0
RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXMoKQogICAgIGV3a19jb29raWVzX2NsZWFyKCk7CiAg
ICAgZXdrX2Nvb2tpZXNfcG9saWN5X3NldChFV0tfQ09PS0lFX0pBUl9BQ0NFUFRfTk9fVEhJUkRf
UEFSVFkpOwogCi0gICAgZXdrX2ZyYW1lX25hbWVfY2xlYXIobWFpbkZyYW1lKCkpOwotICAgIGV3
a19mcmFtZV9vcGVuZXJfY2xlYXIobWFpbkZyYW1lKCkpOworICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbDo6Y2xlYXJGcmFtZU5hbWUobWFpbkZyYW1lKCkpOworICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbDo6Y2xlYXJPcGVuZXIobWFpbkZyYW1lKCkpOwogfQogCiAvLyBTbWFydCBDYWxs
YmFja3MKQEAgLTI3MCwxMiArMjcwLDEyIEBAIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9u
VGl0bGVDaGFuZ2VkKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKQogdm9pZCBEdW1wUmVuZGVy
VHJlZUNocm9tZTo6b25Eb2N1bWVudExvYWRGaW5pc2hlZCh2b2lkKiwgRXZhc19PYmplY3QqLCB2
b2lkKiBldmVudEluZm8pCiB7CiAgICAgY29uc3QgRXZhc19PYmplY3QqIGZyYW1lID0gc3RhdGlj
X2Nhc3Q8RXZhc19PYmplY3QqPihldmVudEluZm8pOwotICAgIGNvbnN0IFN0cmluZyBmcmFtZU5h
bWUoZXdrX2ZyYW1lX3N1aXRhYmxlX2RydF9uYW1lX2dldChmcmFtZSkpOworICAgIGNvbnN0IFN0
cmluZyBmcmFtZU5hbWUoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzdWl0YWJsZURSVEZyYW1l
TmFtZShmcmFtZSkpOwogCiAgICAgaWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+
ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICBwcmludGYoIiVzIC0gZGlkRmluaXNo
RG9jdW1lbnRMb2FkRm9yRnJhbWVcbiIsIGZyYW1lTmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICBl
bHNlIGlmICghZG9uZSkgewotICAgICAgICBjb25zdCB1bnNpZ25lZCBwZW5kaW5nRnJhbWVVbmxv
YWRFdmVudHMgPSBld2tfZnJhbWVfcGVuZGluZ191bmxvYWRfZXZlbnRfY291bnRfZ2V0KGZyYW1l
KTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgcGVuZGluZ0ZyYW1lVW5sb2FkRXZlbnRzID0gRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsOjpwZW5kaW5nVW5sb2FkRXZlbnRDb3VudChmcmFtZSk7CiAg
ICAgICAgIGlmIChwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMpCiAgICAgICAgICAgICBwcmludGYo
IiVzIC0gaGFzICV1IG9udW5sb2FkIGhhbmRsZXIocylcbiIsIGZyYW1lTmFtZS51dGY4KCkuZGF0
YSgpLCBwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMpOwogICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2VmbC9HQ0NvbnRyb2xsZXJFZmwuY3BwIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvZWZsL0dDQ29udHJvbGxlckVmbC5jcHAKaW5kZXggZjM4NTJmMWZiNGQyYmRlZmM5OTJh
OWMyYTU1YzUyNjA0ODZkYTM0Ny4uMWY1NWE1Y2U2MDg4YjVlZjhhY2FmY2IyN2RlNWVhYmUxNGI2
YzEzZiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0dDQ29udHJvbGxlckVm
bC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0dDQ29udHJvbGxlckVmbC5jcHAK
QEAgLTMwLDE5ICszMCwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdDQ29u
dHJvbGxlci5oIgogCisjaW5jbHVkZSAiV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsLmgiCiAjaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKIAogdm9pZCBHQ0NvbnRyb2xsZXI6
OmNvbGxlY3QoKSBjb25zdAogewotICAgIGV3a191dGlsX2phdmFzY3JpcHRfZ2NfY29sbGVjdCgp
OworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Z2FyYmFnZUNvbGxlY3RvckNvbGxlY3Qo
KTsKIH0KIAogdm9pZCBHQ0NvbnRyb2xsZXI6OmNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZChib29s
IHdhaXRVbnRpbERvbmUpIGNvbnN0CiB7Ci0gICAgZXdrX3V0aWxfamF2YXNjcmlwdF9nY19hbHRl
cm5hdGVfdGhyZWFkX2NvbGxlY3Qod2FpdFVudGlsRG9uZSk7CisgICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsOjpnYXJiYWdlQ29sbGVjdG9yQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKHdhaXRV
bnRpbERvbmUpOwogfQogCiBzaXplX3QgR0NDb250cm9sbGVyOjpnZXRKU09iamVjdENvdW50KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZXdrX3V0aWxfamF2YXNjcmlwdF9nY19vYmplY3RfY291bnRf
Z2V0KCk7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6amF2YVNjcmlwdE9i
amVjdHNDb3VudCgpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xh
eW91dFRlc3RDb250cm9sbGVyRWZsLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlv
dXRUZXN0Q29udHJvbGxlckVmbC5jcHAKaW5kZXggOGRmZmQ2NjNkZjdmNjk0NzI2ZDg4YjkwZDQx
OWU5YjliY2M5YjFhNi4uMjBlODk2OTQ1ZDI1MGUyYjRhNzZiY2QxNjJjZDlhNWIxNjQwODNjZSAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVy
RWZsLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xs
ZXJFZmwuY3BwCkBAIC0zNyw5ICszNywxMCBAQAogI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9s
bGVyLmgiCiAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgorI2luY2x1ZGUgIkR1bXBSZW5k
ZXJUcmVlQ2hyb21lLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmdVdGlscy5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiT3duRmFzdE1hbGxvY1B0ci5oIgorI2luY2x1ZGUg
IldlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oIgogI2luY2x1ZGUgIldv
cmtRdWV1ZS5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZUl0ZW0uaCIKICNpbmNsdWRlICJld2tfcHJp
dmF0ZS5oIgpAQCAtNDksNiArNTAsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3Ry
aW5nUmVmLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT3BhcXVlSlNTdHJpbmcuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDxl
ZGl0aW5nL0ZpbmRPcHRpb25zLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KIAogTGF5b3V0VGVzdENv
bnRyb2xsZXI6On5MYXlvdXRUZXN0Q29udHJvbGxlcigpCkBAIC05MCw4ICs5Miw5IEBAIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmRpc3BsYXkoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvdW50ZXJWYWx1ZUZvckVsZW1lbnRCeUlkKEpTU3Ry
aW5nUmVmIGlkKQogewotICAgIE93bkZhc3RNYWxsb2NQdHI8Y2hhcj4gY291bnRlclZhbHVlKGV3
a19mcmFtZV9jb3VudGVyX3ZhbHVlX2J5X2VsZW1lbnRfaWRfZ2V0KGJyb3dzZXItPm1haW5GcmFt
ZSgpLCBpZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICByZXR1cm4gSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+KEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb3Vu
dGVyVmFsdWUuZ2V0KCkpKTsKKyAgICBjb25zdCBFdmFzX09iamVjdCogbWFpbkZyYW1lID0gYnJv
d3Nlci0+bWFpbkZyYW1lKCk7CisgICAgY29uc3QgU3RyaW5nIGNvdW50ZXJWYWx1ZShEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmw6OmNvdW50ZXJWYWx1ZUJ5RWxlbWVudElkKG1haW5GcmFtZSwgaWQt
PnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPihBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoY291bnRlclZhbHVl
LnV0ZjgoKS5kYXRhKCkpKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdl
Ykhpc3RvcnkoKQpAQCAtMTE5LDEyICsxMjIsMTIgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IExheW91dFRlc3RDb250cm9sbGVyOjpsYXllclRyZWVBc1RleHQoKSBjb25zdAogCiBpbnQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VOdW1iZXJGb3JFbGVtZW50QnlJZChKU1N0cmluZ1JlZiBp
ZCwgZmxvYXQgcGFnZVdpZHRoLCBmbG9hdCBwYWdlSGVpZ2h0KQogewotICAgIHJldHVybiBld2tf
ZnJhbWVfcGFnZV9udW1iZXJfYnlfZWxlbWVudF9pZF9nZXQoYnJvd3Nlci0+bWFpbkZyYW1lKCks
IGlkLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0KTsKKyAg
ICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpudW1iZXJPZlBhZ2VzRm9yRWxlbWVu
dElkKGJyb3dzZXItPm1haW5GcmFtZSgpLCBpZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHBh
Z2VXaWR0aCwgcGFnZUhlaWdodCk7CiB9CiAKIGludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVt
YmVyT2ZQYWdlcyhmbG9hdCBwYWdlV2lkdGgsIGZsb2F0IHBhZ2VIZWlnaHQpCiB7Ci0gICAgcmV0
dXJuIGV3a19mcmFtZV9wYWdlX251bWJlcl9nZXQoYnJvd3Nlci0+bWFpbkZyYW1lKCksIHBhZ2VX
aWR0aCwgcGFnZUhlaWdodCk7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6
bnVtYmVyT2ZQYWdlcyhicm93c2VyLT5tYWluRnJhbWUoKSwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0
KTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpw
YWdlUHJvcGVydHkoY29uc3QgY2hhciosIGludCkgY29uc3QKQEAgLTE1Niw3ICsxNTksNyBAQCBz
aXplX3QgTGF5b3V0VGVzdENvbnRyb2xsZXI6OndlYkhpc3RvcnlJdGVtQ291bnQoKQogCiB1bnNp
Z25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29ya2VyVGhyZWFkQ291bnQoKSBjb25zdAogewot
ICAgIHJldHVybiBld2tfdXRpbF93b3JrZXJfdGhyZWFkX2NvdW50KCk7CisgICAgcmV0dXJuIER1
bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6d29ya2VyVGhyZWFkQ291bnQoKTsKIH0KIAogdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgpCkBAIC00NTMsMTAgKzQ1Niw5IEBAIGJv
b2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTU3RyaW5nUmVmIHRhcmdldCwKICAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBs
ZW5ndGhWYWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wgY2FzZVNlbnNp
dGl2ZSA9IHRydWU7Ci0gICAgYm9vbCBmb3J3YXJkID0gdHJ1ZTsKLSAgICBib29sIHdyYXAgPSBm
YWxzZTsKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9O
dW1iZXIoY29udGV4dCwgbGVuZ3RoVmFsdWUsIDApKTsKKyAgICBXZWJDb3JlOjpGaW5kT3B0aW9u
cyBvcHRpb25zID0gMDsKKworICAgIGNvbnN0IHNpemVfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDxz
aXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZVJlZiB2
YWx1ZSA9IEpTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4KGNvbnRleHQsIG9wdGlvbnNBcnJheSwg
aSwgMCk7CiAgICAgICAgIGlmICghSlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSkKQEAg
LTQ2NSwxNCArNDY3LDIwIEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmco
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwKICAgICAgICAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IG9wdGlvbk5hbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHko
Y29udGV4dCwgdmFsdWUsIDApKTsKIAogICAgICAgICBpZiAoZXF1YWxzKG9wdGlvbk5hbWUsICJD
YXNlSW5zZW5zaXRpdmUiKSkKLSAgICAgICAgICAgIGNhc2VTZW5zaXRpdmUgPSBmYWxzZTsKKyAg
ICAgICAgICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6Q2FzZUluc2Vuc2l0aXZlOworICAgICAgICBl
bHNlIGlmIChlcXVhbHMob3B0aW9uTmFtZSwgIkF0V29yZFN0YXJ0cyIpKQorICAgICAgICAgICAg
b3B0aW9ucyB8PSBXZWJDb3JlOjpBdFdvcmRTdGFydHM7CisgICAgICAgIGVsc2UgaWYgKGVxdWFs
cyhvcHRpb25OYW1lLCAiVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQiKSkKKyAgICAgICAg
ICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6VHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQ7CiAg
ICAgICAgIGVsc2UgaWYgKGVxdWFscyhvcHRpb25OYW1lLCAiQmFja3dhcmRzIikpCi0gICAgICAg
ICAgICBmb3J3YXJkID0gZmFsc2U7CisgICAgICAgICAgICBvcHRpb25zIHw9IFdlYkNvcmU6OkJh
Y2t3YXJkczsKICAgICAgICAgZWxzZSBpZiAoZXF1YWxzKG9wdGlvbk5hbWUsICJXcmFwQXJvdW5k
IikpCi0gICAgICAgICAgICB3cmFwID0gdHJ1ZTsKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gV2Vi
Q29yZTo6V3JhcEFyb3VuZDsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxzKG9wdGlvbk5hbWUsICJT
dGFydEluU2VsZWN0aW9uIikpCisgICAgICAgICAgICBvcHRpb25zIHw9IFdlYkNvcmU6OlN0YXJ0
SW5TZWxlY3Rpb247CiAgICAgfQogCi0gICAgcmV0dXJuICEhZXdrX3ZpZXdfdGV4dF9zZWFyY2go
YnJvd3Nlci0+bWFpblZpZXcoKSwgdGFyZ2V0LT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgY2Fz
ZVNlbnNpdGl2ZSwgZm9yd2FyZCwgd3JhcCk7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbDo6ZmluZFN0cmluZyhicm93c2VyLT5tYWluVmlldygpLCB0YXJnZXQtPnVzdHJpbmco
KS51dGY4KCkuZGF0YSgpLCBvcHRpb25zKTsKIH0KIAogYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6aXNDb21tYW5kRW5hYmxlZChKU1N0cmluZ1JlZiBuYW1lKQpAQCAtNTkzLDMyICs2MDEsMzIg
QEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNp
Z25lZCBsb25nIGxvbmcgc2l6ZSkKIAogYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VB
bmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5pbWF0aW9uTmFtZSwg
ZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1lbnRJZCkKIHsKLSAgICByZXR1cm4gZXdrX2Zy
YW1lX2FuaW1hdGlvbl9wYXVzZShicm93c2VyLT5tYWluRnJhbWUoKSwgYW5pbWF0aW9uTmFtZS0+
dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVsZW1lbnRJZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRh
KCksIHRpbWUpOworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnBhdXNlQW5p
bWF0aW9uKGJyb3dzZXItPm1haW5GcmFtZSgpLCBhbmltYXRpb25OYW1lLT51c3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgZWxlbWVudElkLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGltZSk7CiB9
CiAKIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxl
bWVudFdpdGhJZChKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmlu
Z1JlZiBlbGVtZW50SWQpCiB7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV90cmFuc2l0aW9uX3BhdXNl
KGJyb3dzZXItPm1haW5GcmFtZSgpLCBwcm9wZXJ0eU5hbWUtPnVzdHJpbmcoKS51dGY4KCkuZGF0
YSgpLCBlbGVtZW50SWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0aW1lKTsKKyAgICByZXR1
cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpwYXVzZVRyYW5zaXRpb24oYnJvd3Nlci0+bWFp
bkZyYW1lKCksIHByb3BlcnR5TmFtZS0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVsZW1lbnRJ
ZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRpbWUpOwogfQogCiBib29sIExheW91dFRlc3RD
b250cm9sbGVyOjpzYW1wbGVTVkdBbmltYXRpb25Gb3JFbGVtZW50QXRUaW1lKEpTU3RyaW5nUmVm
IGFuaW1hdGlvbklkLCBkb3VibGUgdGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQogewotICAg
IHJldHVybiBld2tfZnJhbWVfc3ZnX2FuaW1hdGlvbl9wYXVzZShicm93c2VyLT5tYWluRnJhbWUo
KSwgYW5pbWF0aW9uSWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlbGVtZW50SWQtPnVzdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCB0aW1lKTsKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsOjpwYXVzZVNWR0FuaW1hdGlvbihicm93c2VyLT5tYWluRnJhbWUoKSwgYW5pbWF0aW9u
SWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlbGVtZW50SWQtPnVzdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCB0aW1lKTsKIH0KIAogdW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJl
ck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9hbmlt
YXRpb25fYWN0aXZlX251bWJlcl9nZXQoYnJvd3Nlci0+bWFpbkZyYW1lKCkpOworICAgIHJldHVy
biBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmFjdGl2ZUFuaW1hdGlvbnNDb3VudChicm93c2Vy
LT5tYWluRnJhbWUoKSk7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN1c3BlbmRB
bmltYXRpb25zKCkgY29uc3QKIHsKLSAgICBld2tfZnJhbWVfYW5pbWF0aW9uX3N1c3BlbmQoYnJv
d3Nlci0+bWFpbkZyYW1lKCkpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c3VzcGVu
ZEFuaW1hdGlvbnMoYnJvd3Nlci0+bWFpbkZyYW1lKCkpOwogfQogCiB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpyZXN1bWVBbmltYXRpb25zKCkgY29uc3QKIHsKLSAgICBld2tfZnJhbWVfYW5p
bWF0aW9uX3Jlc3VtZShicm93c2VyLT5tYWluRnJhbWUoKSk7CisgICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsOjpyZXN1bWVBbmltYXRpb25zKGJyb3dzZXItPm1haW5GcmFtZSgpKTsKIH0KIAog
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVm
LCBKU1N0cmluZ1JlZikKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9QaXhl
bER1bXBTdXBwb3J0RWZsLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9QaXhlbER1bXBT
dXBwb3J0RWZsLmNwcAppbmRleCAzMGU2MTcwODBkYWVkODk0OGRhM2FlYjI5ZTllYTM0MWNhZTcy
MDY0Li4xMDkzNzRlYzkyYWZjYjVjN2Q3ZDIxMGI3ZDY1MThkMGI1NTc5ZTFkIDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvUGl4ZWxEdW1wU3VwcG9ydEVmbC5jcHAKKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL1BpeGVsRHVtcFN1cHBvcnRFZmwuY3BwCkBAIC0zMyw4
ICszMywxMCBAQAogCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKICNpbmNsdWRlICJEdW1w
UmVuZGVyVHJlZUNocm9tZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQaXhl
bER1bXBTdXBwb3J0Q2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorI2luY2x1ZGUg
IldlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oIgogI2luY2x1ZGUgImV3
a19wcml2YXRlLmgiCiAKIFBhc3NSZWZQdHI8Qml0bWFwQ29udGV4dD4gY3JlYXRlQml0bWFwQ29u
dGV4dEZyb21XZWJWaWV3KGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wgZHJhd1NlbGVjdGlvblJlY3Qp
CkBAIC01NSwxMSArNTcsMTEgQEAgUGFzc1JlZlB0cjxCaXRtYXBDb250ZXh0PiBjcmVhdGVCaXRt
YXBDb250ZXh0RnJvbVdlYlZpZXcoYm9vbCwgYm9vbCwgYm9vbCwgYm9vbAogICAgICAgICByZXR1
cm4gMDsKIAogICAgIGlmIChkcmF3U2VsZWN0aW9uUmVjdCkgewotICAgICAgICBpbnQgeCwgeSwg
cmVjdFdpZHRoLCByZWN0SGVpZ2h0OworICAgICAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0IHNl
bGVjdGlvblJlY3QgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNlbGVjdGlvblJlY3Rhbmds
ZShtYWluRnJhbWUpOwogCi0gICAgICAgIGlmIChld2tfZnJhbWVfc2VsZWN0aW9uX3JlY3Rhbmds
ZV9nZXQobWFpbkZyYW1lLCAmeCwgJnksICZyZWN0V2lkdGgsICZyZWN0SGVpZ2h0KSkgeworICAg
ICAgICBpZiAoIXNlbGVjdGlvblJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBjYWlyb19z
ZXRfbGluZV93aWR0aChjb250ZXh0LmdldCgpLCAxLjApOwotICAgICAgICAgICAgY2Fpcm9fcmVj
dGFuZ2xlKGNvbnRleHQuZ2V0KCksIHgsIHksIHJlY3RXaWR0aCwgcmVjdEhlaWdodCk7CisgICAg
ICAgICAgICBjYWlyb19yZWN0YW5nbGUoY29udGV4dC5nZXQoKSwgc2VsZWN0aW9uUmVjdC54KCks
IHNlbGVjdGlvblJlY3QueSgpLCBzZWxlY3Rpb25SZWN0LndpZHRoKCksIHNlbGVjdGlvblJlY3Qu
aGVpZ2h0KCkpOwogICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNvbnRleHQuZ2V0
KCksIDEuMCwgMC4wLCAwLjAsIDEuMCk7CiAgICAgICAgICAgICBjYWlyb19zdHJva2UoY29udGV4
dC5nZXQoKSk7CiAgICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111003</attachid>
            <date>2011-10-14 05:46:55 -0700</date>
            <delta_ts>2011-10-14 06:07:28 -0700</delta_ts>
            <desc>Rebase on top of trunk</desc>
            <filename>bug-68458-20111014094708.patch</filename>
            <type>text/plain</type>
            <size>46056</size>
            <attacher name="Raphael Kubo da Costa (:rakuco)">rakuco</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc0NTkKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCAyYzk2NGFmZDA4MDZkN2QwYWJmYzM0ZWIwMjJjYTdjNTg0MzhmNGMyLi4wMmI2
NTQ5YTA5ODFjOTZiYzA0ZTIwNmRhOGJhNDY5NjllNTIyYTFiIDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMTAtMTQgIFJhcGhhZWwg
S3VibyBkYSBDb3N0YSAgPGt1Ym9AcHJvZnVzaW9uLm1vYmk+CisKKyAgICAgICAgW0VGTF0gQWRk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Njg0NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9lZmxzeW1ib2xzLmZpbHRlcjogRXhwb3J0
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbAorICAgICAgICBzeW1ib2xzIHNvIHRoYXQgRHVtcFJl
bmRlclRyZWUgY2FuIGxpbmsgdG8gdGhlbS4KKwogMjAxMS0xMC0xMiAgQWRhbSBCYXJ0aCAgPGFi
YXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBFTkFCTEUoWEhUTUxNUCkgYW5kIGFz
c29jaWF0ZWQgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0Vm
bC50eHQgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DTWFrZUxpc3RzRWZsLnR4dAppbmRleCBhNGRiNDA1
Njk0ODQzZjBjZTM2MzdiMDhiYjdjMTczOGI0MjcxZmI3Li4yMGQ1MzJhYzU1MTYxZTdhNDc3NDkz
OTQ1YjRhODlkNzE5MmRkZWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DTWFrZUxp
c3RzRWZsLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DTWFrZUxpc3RzRWZsLnR4dApAQCAt
MjIsNiArMjIsMTQgQEAgTElTVChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAg
ICAke1NRTElURV9JTkNMVURFX0RJUn0KICkKIAorSUYgKEVOQUJMRV9TVkcpCisgIExJU1QoQVBQ
RU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgIiR7V0VCQ09SRV9ESVJ9L3N2ZyIK
KyAgICAiJHtXRUJDT1JFX0RJUn0vc3ZnL2FuaW1hdGlvbiIKKyAgICAiJHtXRUJDT1JFX0RJUn0v
cmVuZGVyaW5nL3N2ZyIKKyAgKQorRU5ESUYgKCkKKwogSUYgKEVOQUJMRV9WSURFTykKIExJU1Qo
QVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lciIKQEAgLTU5LDYgKzY3LDcgQEAgTElTVChBUFBFTkQg
V2ViS2l0X1NPVVJDRVMKICAgICBlZmwvV2ViQ29yZVN1cHBvcnQvRGV2aWNlT3JpZW50YXRpb25D
bGllbnRFZmwuY3BwCiAgICAgZWZsL1dlYkNvcmVTdXBwb3J0L0RldmljZU1vdGlvbkNsaWVudEVm
bC5jcHAKICAgICBlZmwvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEVmbC5jcHAKKyAgICBlZmwv
V2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcAogICAgIGVmbC9XZWJD
b3JlU3VwcG9ydC9FZGl0b3JDbGllbnRFZmwuY3BwCiAgICAgZWZsL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50RWZsLmNwcAogICAgIGVmbC9XZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVu
VmlkZW9Db250cm9sbGVyRWZsLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IDU5ZWYyYzg0MjgzNzZm
MDcwNWVhZTUzYTZkMGFhOTdjNWVlODlkNDUuLjgzODY0ODlhODg4MWEzYzdhODQyMmI2N2M3YzFi
ZWRmN2RhOWY0N2QgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MSBAQAorMjAxMS0xMC0x
NCAgUmFwaGFlbCBLdWJvIGRhIENvc3RhICA8a3Vib0Bwcm9mdXNpb24ubW9iaT4KKworICAgICAg
ICBbRUZMXSBBZGQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQ1OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2xhc3MgaXMgc2ltaWxhciB0byB0aGVp
ciBjb3VudGVycGFydHMgcHJlc2VudCBpbiB0aGUgUXQgYW5kIEdUSysKKyAgICAgICAgcG9ydHMs
IGFuZCBpdCBpcyByZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIGFuIGludGVyZmFjZSB0byBjZXJ0
YWluCisgICAgICAgIFdlYkNvcmUgbWV0aG9kcyBuZWVkZWQgYnkgRHVtcFJlbmRlclRyZWUuCisK
KyAgICAgICAgKiBDTWFrZUxpc3RzRWZsLnR4dDogQ29uZGl0aW9uYWxseSBhZGQgdGhlIHN2ZyBk
aXJlY3RvcmllcyB0byB0aGUKKyAgICAgICAgaW5jbHVkZSBwYXRoLgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHA6IEFkZGVkLgorICAgICAgICAo
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwpOgorICAg
ICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjp+RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZs
KToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6YWN0aXZlQW5pbWF0aW9uc0Nv
dW50KToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y2xlYXJGcmFtZU5hbWUp
OgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpjbGVhck9wZW5lcik6CisgICAg
ICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNvdW50ZXJWYWx1ZUJ5RWxlbWVudElkKToK
KyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZnJhbWVDaGlsZHJlbik6CisgICAg
ICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmZyYW1lUGFyZW50KToKKyAgICAgICAgKER1
bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6bGF5b3V0RnJhbWUpOgorICAgICAgICAoRHVtcFJlbmRl
clRyZWVTdXBwb3J0RWZsOjpudW1iZXJPZlBhZ2VzKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbDo6bnVtYmVyT2ZQYWdlc0ZvckVsZW1lbnRJZCk6CisgICAgICAgIChEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmw6OnBhdXNlQW5pbWF0aW9uKToKKyAgICAgICAgKER1bXBSZW5kZXJU
cmVlU3VwcG9ydEVmbDo6cGF1c2VTVkdBbmltYXRpb24pOgorICAgICAgICAoRHVtcFJlbmRlclRy
ZWVTdXBwb3J0RWZsOjpwYXVzZVRyYW5zaXRpb24pOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsOjpwZW5kaW5nVW5sb2FkRXZlbnRDb3VudCk6CisgICAgICAgIChEdW1wUmVuZGVy
VHJlZVN1cHBvcnRFZmw6OnJlbmRlclRyZWVEdW1wKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbDo6cmVzcG9uc2VNaW1lVHlwZSk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmw6OnJlc3VtZUFuaW1hdGlvbnMpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsOjpzZWxlY3Rpb25SZWN0YW5nbGUpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsOjpzdWl0YWJsZURSVEZyYW1lTmFtZSk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmw6OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbDo6ZmluZFN0cmluZyk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6
OmdhcmJhZ2VDb2xsZWN0b3JDb2xsZWN0KToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbDo6Z2FyYmFnZUNvbGxlY3RvckNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZCk6CisgICAgICAg
IChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmphdmFTY3JpcHRPYmplY3RzQ291bnQpOgorICAg
ICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjp3b3JrZXJUaHJlYWRDb3VudCk6CisgICAg
ICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNoaWxkSGlzdG9yeUl0ZW1zKToKKyAgICAg
ICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6aGlzdG9yeUl0ZW1UYXJnZXQpOgorICAgICAg
ICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjppc1RhcmdldEl0ZW0pOgorICAgICAgICAoRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQpOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBld2svZXdrX2ZyYW1lLmNwcDoKKyAgICAgICAgKEVXS1ByaXZhdGU6OmNvcmVGcmFt
ZSk6IEV4cG9ydCB0aGUgV2ViQ29yZTo6RnJhbWUqIHJlbGF0ZWQgdG8gYW4KKyAgICAgICAgZXdr
X2ZyYW1lLgorICAgICAgICAqIGV3ay9ld2tfaGlzdG9yeS5jcHA6IFJlbW92ZSBmdW5jdGlvbnMg
d2hpY2ggaGF2ZSBiZWVuIG1vdmVkIHRvCisgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bC4KKyAgICAgICAgKF9ld2tfaGlzdG9yeV9pdGVtX2xpc3RfZ2V0KTogX2V3a19oaXN0b3J5X2l0
ZW1fbmV3IC0+CisgICAgICAgIGV3a19oaXN0b3J5X2l0ZW1fbmV3X2Zyb21fY29yZS4KKyAgICAg
ICAgKGV3a19oaXN0b3J5X2hpc3RvcnlfaXRlbV9iYWNrX2dldCk6IERpdHRvLgorICAgICAgICAo
ZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX2N1cnJlbnRfZ2V0KTogRGl0dG8uCisgICAgICAgIChl
d2tfaGlzdG9yeV9oaXN0b3J5X2l0ZW1fZm9yd2FyZF9nZXQpOiBEaXR0by4KKyAgICAgICAgKGV3
a19oaXN0b3J5X2hpc3RvcnlfaXRlbV9udGhfZ2V0KTogRGl0dG8uCisgICAgICAgIChld2tfaGlz
dG9yeV9pdGVtX25ldyk6IERpdHRvLgorICAgICAgICAoZXdrX2hpc3RvcnlfaXRlbV9uZXdfZnJv
bV9jb3JlKTogUmVuYW1lIGZyb20gX2V3a19oaXN0b3J5X2l0ZW1fbmV3LgorICAgICAgICAoRVdL
UHJpdmF0ZTo6Y29yZUhpc3RvcnlJdGVtKTogRXhwb3J0IHRoZSBXZWJDb3JlOjpIaXN0b3J5SXRl
bSoKKyAgICAgICAgcmVsYXRlZCB0byBhbiBFd2tfSGlzdG9yeV9JdGVtLgorICAgICAgICAqIGV3
ay9ld2tfcHJpdmF0ZS5oOiBDcmVhdGUgdGhlIEVXS1ByaXZhdGUgbmFtZXNwYWNlLCByZW1vdmUg
ZnVuY3Rpb25zCisgICAgICAgIHdoaWNoIGhhdmUgYmVlbiBtb3ZlZCB0byBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmwuCisgICAgICAgICogZXdrL2V3a191dGlsLmNwcDogUmVtb3ZlIGZ1bmN0aW9u
cyB3aGljaCBoYXZlIGJlZW4gbW92ZWQgdG8KKyAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
RWZsLgorICAgICAgICAqIGV3ay9ld2tfdmlldy5jcHA6CisgICAgICAgIChFV0tQcml2YXRlOjpj
b3JlUGFnZSk6IEV4cG9ydCB0aGUgV2ViQ29yZTo6UGFnZSogcmVsYXRlZCB0byBhbgorICAgICAg
ICBld2tfdmlldy4KKwogMjAxMS0xMC0xMyAgUmFwaGFlbCBLdWJvIGRhIENvc3RhICA8a3Vib0Bw
cm9mdXNpb24ubW9iaT4KIAogICAgICAgICBbRUZMXTogTW92ZSBmcm9tIEZpbGVDaG9vc2VyU2V0
dGluZ3MgZGVwcmVjYXRlZEFjY2VwdFR5cGUgdG8gYWNjZXB0TUlNRVR5cGVzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRF
ZmwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYTg3YTc4YjRkZjg0YTM2NTlkMjEzOTQwMmMxZmNj
MDQyNTNhYTMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcApAQCAtMCwwICsxLDQwMiBAQAorLyoK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuaCIKKworI2luY2x1ZGUg
IkVXZWJLaXQuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEVmbC5oIgorI2luY2x1ZGUg
ImV3a19wcml2YXRlLmgiCisKKyNpbmNsdWRlIDxBbmltYXRpb25Db250cm9sbGVyLmg+CisjaW5j
bHVkZSA8RG9jdW1lbnRMb2FkZXIuaD4KKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8RXZh
cy5oPgorI2luY2x1ZGUgPEZpbmRPcHRpb25zLmg+CisjaW5jbHVkZSA8RmxvYXRTaXplLmg+Cisj
aW5jbHVkZSA8RnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8SW50UmVjdC5oPgorI2luY2x1ZGUgPFBy
aW50Q29udGV4dC5oPgorI2luY2x1ZGUgPFJlbmRlclRyZWVBc1RleHQuaD4KKyNpbmNsdWRlIDxT
ZXR0aW5ncy5oPgorI2luY2x1ZGUgPGJpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5oPgorI2luY2x1
ZGUgPGhpc3RvcnkvSGlzdG9yeUl0ZW0uaD4KKyNpbmNsdWRlIDx3b3JrZXJzL1dvcmtlclRocmVh
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCisjaWYgRU5BQkxFKFNW
RykKKyNpbmNsdWRlIDxTVkdEb2N1bWVudEV4dGVuc2lvbnMuaD4KKyNpbmNsdWRlIDxTVkdTTUlM
RWxlbWVudC5oPgorI2VuZGlmCisKK0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6RHVtcFJlbmRl
clRyZWVTdXBwb3J0RWZsKCkKK3sKK30KKworRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjp+RHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsKCkKK3sKK30KKwordW5zaWduZWQgRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsOjphY3RpdmVBbmltYXRpb25zQ291bnQoY29uc3QgRXZhc19PYmplY3QqIGV3a0Zy
YW1lKQoreworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFt
ZShld2tGcmFtZSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXIqIGFuaW1hdGlvbkNvbnRyb2xsZXIgPSBmcmFt
ZS0+YW5pbWF0aW9uKCk7CisKKyAgICBpZiAoIWFuaW1hdGlvbkNvbnRyb2xsZXIpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIGFuaW1hdGlvbkNvbnRyb2xsZXItPm51bWJlck9mQWN0
aXZlQW5pbWF0aW9ucyhmcmFtZS0+ZG9jdW1lbnQoKSk7Cit9CisKK3ZvaWQgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0RWZsOjpjbGVhckZyYW1lTmFtZShFdmFzX09iamVjdCogZXdrRnJhbWUpCit7Cisg
ICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1l
KTsKKworICAgIGlmIChmcmFtZSkKKyAgICAgICAgZnJhbWUtPnRyZWUoKS0+Y2xlYXJOYW1lKCk7
Cit9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpjbGVhck9wZW5lcihFdmFzX09i
amVjdCogZXdrRnJhbWUpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0
ZTo6Y29yZUZyYW1lKGV3a0ZyYW1lKTsKKworICAgIGlmIChmcmFtZSkKKyAgICAgICAgZnJhbWUt
PmxvYWRlcigpLT5zZXRPcGVuZXIoMCk7Cit9CisKK1N0cmluZyBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmw6OmNvdW50ZXJWYWx1ZUJ5RWxlbWVudElkKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSwgY29uc3QgY2hhciogZWxlbWVudElkKQoreworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9
IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShld2tGcmFtZSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50ID0g
ZnJhbWUtPmRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7CisKKyAgICBpZiAo
IWVsZW1lbnQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJldHVybiBXZWJDb3Jl
Ojpjb3VudGVyVmFsdWVGb3JFbGVtZW50KGVsZW1lbnQpOworfQorCitFaW5hX0xpc3QqIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZnJhbWVDaGlsZHJlbihjb25zdCBFdmFzX09iamVjdCogZXdr
RnJhbWUpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZy
YW1lKGV3a0ZyYW1lKTsKKworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgRWluYV9MaXN0KiBjaGlsZEZyYW1lcyA9IDA7CisKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBmcmFtZS0+dHJlZSgpLT5jaGlsZENvdW50KCk7IGluZGV4KyspIHsKKyAg
ICAgICAgV2ViQ29yZTo6RnJhbWUgKmNoaWxkRnJhbWUgPSBmcmFtZS0+dHJlZSgpLT5jaGlsZChp
bmRleCk7CisgICAgICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsICpjbGllbnQgPSBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCo+KGNoaWxkRnJhbWUtPmxv
YWRlcigpLT5jbGllbnQoKSk7CisKKyAgICAgICAgaWYgKCFjbGllbnQpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBjaGlsZEZyYW1lcyA9IGVpbmFfbGlzdF9hcHBlbmQoY2hpbGRG
cmFtZXMsIGNsaWVudC0+d2ViRnJhbWUoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGNoaWxkRnJh
bWVzOworfQorCitXZWJDb3JlOjpGcmFtZSogRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpmcmFt
ZVBhcmVudChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCit7CisgICAgV2ViQ29yZTo6RnJh
bWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1lKTsKKworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGZyYW1lLT50cmVlKCktPnBh
cmVudCgpOworfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6bGF5b3V0RnJhbWUo
RXZhc19PYmplY3QqIGV3a0ZyYW1lKQoreworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVX
S1ByaXZhdGU6OmNvcmVGcmFtZShld2tGcmFtZSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm47CisKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52
aWV3KCk7CisKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgZnJh
bWVWaWV3LT5sYXlvdXQoKTsKK30KKworaW50IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6bnVt
YmVyT2ZQYWdlcyhjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGZsb2F0IHBhZ2VXaWR0aCwg
ZmxvYXQgcGFnZUhlaWdodCkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBFV0tQcml2
YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICByZXR1cm4gV2ViQ29yZTo6UHJpbnRDb250ZXh0OjpudW1iZXJPZlBhZ2Vz
KGZyYW1lLCBXZWJDb3JlOjpGbG9hdFNpemUocGFnZVdpZHRoLCBwYWdlSGVpZ2h0KSk7Cit9CisK
K2ludCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6Om51bWJlck9mUGFnZXNGb3JFbGVtZW50SWQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBlbGVtZW50SWQsIGZsb2F0
IHBhZ2VXaWR0aCwgZmxvYXQgcGFnZUhlaWdodCkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJh
bWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYgKCFmcmFtZSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBXZWJDb3JlOjpFbGVtZW50ICplbGVtZW50ID0gZnJh
bWUtPmRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7CisKKyAgICBpZiAoIWVs
ZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIFdlYkNvcmU6OlByaW50Q29u
dGV4dDo6cGFnZU51bWJlckZvckVsZW1lbnQoZWxlbWVudCwgV2ViQ29yZTo6RmxvYXRTaXplKHBh
Z2VXaWR0aCwgcGFnZUhlaWdodCkpOworfQorCitib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bDo6cGF1c2VBbmltYXRpb24oRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBuYW1l
LCBjb25zdCBjaGFyKiBlbGVtZW50SWQsIGRvdWJsZSB0aW1lKQoreworICAgIFdlYkNvcmU6OkZy
YW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShld2tGcmFtZSk7CisKKyAgICBpZiAo
IWZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBl
bGVtZW50ID0gZnJhbWUtPmRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7CisK
KyAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBmcmFtZS0+YW5pbWF0aW9uKCktPnBhdXNlQW5pbWF0aW9u
QXRUaW1lKGVsZW1lbnQtPnJlbmRlcmVyKCksIG5hbWUsIHRpbWUpOworfQorCitib29sIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbDo6cGF1c2VTVkdBbmltYXRpb24oRXZhc19PYmplY3QqIGV3a0Zy
YW1lLCBjb25zdCBjaGFyKiBhbmltYXRpb25JZCwgY29uc3QgY2hhciogZWxlbWVudElkLCBkb3Vi
bGUgdGltZSkKK3sKKyNpZiBFTkFCTEUoU1ZHKQorICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9
IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShld2tGcmFtZSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJDb3JlOjpEb2N1bWVudCogZG9jdW1lbnQgPSBm
cmFtZS0+ZG9jdW1lbnQoKTsKKworICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5zdmdF
eHRlbnNpb25zKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdlYkNvcmU6OkVsZW1l
bnQqIGVsZW1lbnQgPSBkb2N1bWVudC0+Z2V0RWxlbWVudEJ5SWQoYW5pbWF0aW9uSWQpOworCisg
ICAgaWYgKCFlbGVtZW50IHx8ICFXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6aXNTTUlMRWxlbWVu
dChlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGRvY3VtZW50
LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnNhbXBsZUFuaW1hdGlvbkF0VGltZShlbGVtZW50SWQs
IHN0YXRpY19jYXN0PFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50Kj4oZWxlbWVudCksIHRpbWUpOwor
I2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworYm9vbCBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OnBhdXNlVHJhbnNpdGlvbihFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0
IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIGVsZW1lbnRJZCwgZG91YmxlIHRpbWUpCit7CisgICAg
V2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1lKTsK
KworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdlYkNvcmU6
OkVsZW1lbnQqIGVsZW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZWxl
bWVudElkKTsKKworICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+cmVuZGVyZXIoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGZyYW1lLT5hbmltYXRpb24oKS0+cGF1
c2VUcmFuc2l0aW9uQXRUaW1lKGVsZW1lbnQtPnJlbmRlcmVyKCksIG5hbWUsIHRpbWUpOworfQor
Cit1bnNpZ25lZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnBlbmRpbmdVbmxvYWRFdmVudENv
dW50KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSog
ZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZnJhbWUtPmRvbVdpbmRvdygpLT5w
ZW5kaW5nVW5sb2FkRXZlbnRMaXN0ZW5lcnMoKTsKK30KKworU3RyaW5nIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbDo6cmVuZGVyVHJlZUR1bXAoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQoreworICAg
IFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShld2tGcmFtZSk7
CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBXZWJD
b3JlOjpGcmFtZVZpZXcgKmZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCk7CisKKyAgICBpZiAoZnJh
bWVWaWV3ICYmIGZyYW1lVmlldy0+bGF5b3V0UGVuZGluZygpKQorICAgICAgICBmcmFtZVZpZXct
PmxheW91dCgpOworCisgICAgcmV0dXJuIFdlYkNvcmU6OmV4dGVybmFsUmVwcmVzZW50YXRpb24o
ZnJhbWUpOworfQorCitTdHJpbmcgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpyZXNwb25zZU1p
bWVUeXBlKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFt
ZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYgKCFm
cmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgV2ViQ29yZTo6RG9jdW1lbnRM
b2FkZXIgKmRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
OworCisgICAgaWYgKCFkb2N1bWVudExvYWRlcikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
CisgICAgcmV0dXJuIGRvY3VtZW50TG9hZGVyLT5yZXNwb25zZU1JTUVUeXBlKCk7Cit9CisKK3Zv
aWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpyZXN1bWVBbmltYXRpb25zKEV2YXNfT2JqZWN0
KiBld2tGcmFtZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBFV0tQcml2YXRlOjpj
b3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlciAqYW5pbWF0aW9uQ29udHJvbGxlciA9
IGZyYW1lLT5hbmltYXRpb24oKTsKKyAgICBpZiAoYW5pbWF0aW9uQ29udHJvbGxlcikKKyAgICAg
ICAgYW5pbWF0aW9uQ29udHJvbGxlci0+cmVzdW1lQW5pbWF0aW9ucygpOworfQorCitXZWJDb3Jl
OjpJbnRSZWN0IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2VsZWN0aW9uUmVjdGFuZ2xlKGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUg
PSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYgKCFmcmFtZSkKKyAg
ICAgICAgcmV0dXJuIFdlYkNvcmU6OkludFJlY3QoKTsKKworICAgIHJldHVybiBlbmNsb3NpbmdJ
bnRSZWN0KGZyYW1lLT5zZWxlY3Rpb24oKS0+Ym91bmRzKCkpOworfQorCisvLyBDb21wYXJlIHdp
dGggIldlYktpdC9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW0K
K1N0cmluZyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJhbWVOYW1lKGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUg
PSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYgKCFmcmFtZSkKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgY29uc3QgU3RyaW5nIGZyYW1lTmFtZShld2tf
ZnJhbWVfbmFtZV9nZXQoZXdrRnJhbWUpKTsKKworICAgIGlmIChld2tGcmFtZSA9PSBld2tfdmll
d19mcmFtZV9tYWluX2dldChld2tfZnJhbWVfdmlld19nZXQoZXdrRnJhbWUpKSkgeworICAgICAg
ICBpZiAoIWZyYW1lTmFtZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCJt
YWluIGZyYW1lIFwiIikgKyBmcmFtZU5hbWUgKyBTdHJpbmcoIlwiIik7CisKKyAgICAgICAgcmV0
dXJuIFN0cmluZygibWFpbiBmcmFtZSIpOworICAgIH0KKworICAgIGlmICghZnJhbWVOYW1lLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygiZnJhbWUgXCIiKSArIGZyYW1lTmFtZSAr
IFN0cmluZygiXCIiKTsKKworICAgIHJldHVybiBTdHJpbmcoImZyYW1lIChhbm9ueW1vdXMpIik7
Cit9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzdXNwZW5kQW5pbWF0aW9ucyhF
dmFzX09iamVjdCogZXdrRnJhbWUpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gRVdL
UHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1lKTsKKworICAgIGlmICghZnJhbWUpCisgICAgICAg
IHJldHVybjsKKworICAgIFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXIgKmFuaW1hdGlvbkNv
bnRyb2xsZXIgPSBmcmFtZS0+YW5pbWF0aW9uKCk7CisgICAgaWYgKGFuaW1hdGlvbkNvbnRyb2xs
ZXIpCisgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXItPnN1c3BlbmRBbmltYXRpb25zKCk7Cit9
CisKK2Jvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpmaW5kU3RyaW5nKGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB0ZXh0LCBXZWJDb3JlOjpGaW5kT3B0aW9ucyBv
cHRpb25zKQoreworICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBFV0tQcml2YXRlOjpjb3JlUGFn
ZShld2tWaWV3KTsKKworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIHBhZ2UtPmZpbmRTdHJpbmcoU3RyaW5nOjpmcm9tVVRGOCh0ZXh0KSwgb3B0aW9u
cyk7Cit9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpnYXJiYWdlQ29sbGVjdG9y
Q29sbGVjdCgpCit7CisgICAgV2ViQ29yZTo6Z2NDb250cm9sbGVyKCkuZ2FyYmFnZUNvbGxlY3RO
b3coKTsKK30KKwordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmdhcmJhZ2VDb2xsZWN0
b3JDb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQoYm9vbCB3YWl0VW50aWxEb25lKQoreworICAgIFdl
YkNvcmU6OmdjQ29udHJvbGxlcigpLmdhcmJhZ2VDb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRGb3JE
ZWJ1Z2dpbmcod2FpdFVudGlsRG9uZSk7Cit9CisKK3NpemVfdCBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmw6OmphdmFTY3JpcHRPYmplY3RzQ291bnQoKQoreworICAgIHJldHVybiBXZWJDb3JlOjpK
U0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsKK30K
KwordW5zaWduZWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjp3b3JrZXJUaHJlYWRDb3VudCgp
Cit7CisjaWYgRU5BQkxFKFdPUktFUlMpCisgICAgcmV0dXJuIFdlYkNvcmU6OldvcmtlclRocmVh
ZDo6d29ya2VyVGhyZWFkQ291bnQoKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30K
KworSGlzdG9yeUl0ZW1DaGlsZHJlbk1hcCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNoaWxk
SGlzdG9yeUl0ZW1zKGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGV3a0hpc3RvcnlJdGVtKQorewor
ICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBoaXN0b3J5SXRlbSA9IEVXS1ByaXZhdGU6OmNvcmVI
aXN0b3J5SXRlbShld2tIaXN0b3J5SXRlbSk7CisgICAgSGlzdG9yeUl0ZW1DaGlsZHJlbk1hcCBr
aWRzOworCisgICAgaWYgKCFoaXN0b3J5SXRlbSkKKyAgICAgICAgcmV0dXJuIGtpZHM7CisKKyAg
ICBjb25zdCBXZWJDb3JlOjpIaXN0b3J5SXRlbVZlY3RvciYgY2hpbGRyZW4gPSBoaXN0b3J5SXRl
bS0+Y2hpbGRyZW4oKTsKKyAgICBjb25zdCB1bnNpZ25lZCBzaXplID0gY2hpbGRyZW4uc2l6ZSgp
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBF
d2tfSGlzdG9yeV9JdGVtKiBraWQgPSBld2tfaGlzdG9yeV9pdGVtX25ld19mcm9tX2NvcmUoY2hp
bGRyZW5baV0uZ2V0KCkpOworICAgICAgICBraWRzLnNldChEdW1wUmVuZGVyVHJlZVN1cHBvcnRF
Zmw6Omhpc3RvcnlJdGVtVGFyZ2V0KGtpZCksIGtpZCk7CisgICAgfQorCisgICAgcmV0dXJuIGtp
ZHM7Cit9CisKK1N0cmluZyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6Omhpc3RvcnlJdGVtVGFy
Z2V0KGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGV3a0hpc3RvcnlJdGVtKQoreworICAgIFdlYkNv
cmU6Okhpc3RvcnlJdGVtKiBoaXN0b3J5SXRlbSA9IEVXS1ByaXZhdGU6OmNvcmVIaXN0b3J5SXRl
bShld2tIaXN0b3J5SXRlbSk7CisKKyAgICBpZiAoIWhpc3RvcnlJdGVtKQorICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisKKyAgICByZXR1cm4gaGlzdG9yeUl0ZW0tPnRhcmdldCgpOworfQorCiti
b29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6aXNUYXJnZXRJdGVtKGNvbnN0IEV3a19IaXN0
b3J5X0l0ZW0qIGV3a0hpc3RvcnlJdGVtKQoreworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBo
aXN0b3J5SXRlbSA9IEVXS1ByaXZhdGU6OmNvcmVIaXN0b3J5SXRlbShld2tIaXN0b3J5SXRlbSk7
CisKKyAgICBpZiAoIWhpc3RvcnlJdGVtKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXR1cm4gaGlzdG9yeUl0ZW0tPmlzVGFyZ2V0SXRlbSgpOworfQorCit2b2lkIER1bXBSZW5kZXJU
cmVlU3VwcG9ydEVmbDo6c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKGJvb2wgZW5hYmxlKQorewor
ICAgIFdlYkNvcmU6OlNldHRpbmdzOjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQoZW5hYmxlKTsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbC5oIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTRlZjg5NjRiMGE3MWNlZTYzNjQ1
NjQyODg3YTdmYzNkMzRjMzJiMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZs
L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oCkBAIC0wLDAgKzEsNzgg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1z
CisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVm
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbF9oCisjZGVmaW5lIER1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbF9oCisKKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8RmluZE9wdGlvbnMuaD4KKyNp
bmNsdWRlIDxJbnRSZWN0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0IEV2YXNf
T2JqZWN0OwordHlwZWRlZiBzdHJ1Y3QgX0V3a19IaXN0b3J5X0l0ZW0gRXdrX0hpc3RvcnlfSXRl
bTsKKwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgRXdrX0hpc3RvcnlfSXRlbSo+IEhpc3RvcnlJ
dGVtQ2hpbGRyZW5NYXA7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZyYW1lOworfQor
CitjbGFzcyBFQVBJIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbCB7CitwdWJsaWM6CisgICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsKCk7CisgICAgfkR1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbCgp
OworCisgICAgc3RhdGljIHVuc2lnbmVkIGFjdGl2ZUFuaW1hdGlvbnNDb3VudChjb25zdCBFdmFz
X09iamVjdCogZXdrRnJhbWUpOworICAgIHN0YXRpYyB2b2lkIGNsZWFyRnJhbWVOYW1lKEV2YXNf
T2JqZWN0KiBld2tGcmFtZSk7CisgICAgc3RhdGljIHZvaWQgY2xlYXJPcGVuZXIoRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvdW50ZXJWYWx1ZUJ5RWxlbWVudElk
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogZWxlbWVudElkKTsKKyAg
ICBzdGF0aWMgRWluYV9MaXN0KiBmcmFtZUNoaWxkcmVuKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tG
cmFtZSk7CisgICAgc3RhdGljIFdlYkNvcmU6OkZyYW1lKiBmcmFtZVBhcmVudChjb25zdCBFdmFz
X09iamVjdCogZXdrRnJhbWUpOworICAgIHN0YXRpYyB2b2lkIGxheW91dEZyYW1lKEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSk7CisgICAgc3RhdGljIGludCBudW1iZXJPZlBhZ2VzKGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tGcmFtZSwgZmxvYXQgcGFnZVdpZHRoLCBmbG9hdCBwYWdlSGVpZ2h0KTsKKyAg
ICBzdGF0aWMgaW50IG51bWJlck9mUGFnZXNGb3JFbGVtZW50SWQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBlbGVtZW50SWQsIGZsb2F0IHBhZ2VXaWR0aCwgZmxvYXQg
cGFnZUhlaWdodCk7CisgICAgc3RhdGljIGJvb2wgcGF1c2VBbmltYXRpb24oRXZhc19PYmplY3Qq
IGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBlbGVtZW50SWQsIGRvdWJs
ZSB0aW1lKTsKKyAgICBzdGF0aWMgYm9vbCBwYXVzZVNWR0FuaW1hdGlvbihFdmFzX09iamVjdCog
ZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGFuaW1hdGlvbklkLCBjb25zdCBjaGFyKiBlbGVtZW50SWQs
IGRvdWJsZSB0aW1lKTsKKyAgICBzdGF0aWMgYm9vbCBwYXVzZVRyYW5zaXRpb24oRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBlbGVtZW50SWQsIGRv
dWJsZSB0aW1lKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgcGVuZGluZ1VubG9hZEV2ZW50Q291bnQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKTsKKyAgICBzdGF0aWMgU3RyaW5nIHJlbmRlclRy
ZWVEdW1wKEV2YXNfT2JqZWN0KiBld2tGcmFtZSk7CisgICAgc3RhdGljIFN0cmluZyByZXNwb25z
ZU1pbWVUeXBlKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSk7CisgICAgc3RhdGljIHZvaWQg
cmVzdW1lQW5pbWF0aW9ucyhFdmFzX09iamVjdCogZXdrRnJhbWUpOworICAgIHN0YXRpYyBXZWJD
b3JlOjpJbnRSZWN0IHNlbGVjdGlvblJlY3RhbmdsZShjb25zdCBFdmFzX09iamVjdCogZXdrRnJh
bWUpOworICAgIHN0YXRpYyBTdHJpbmcgc3VpdGFibGVEUlRGcmFtZU5hbWUoY29uc3QgRXZhc19P
YmplY3QqIGV3a0ZyYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhFdmFz
X09iamVjdCogZXdrRnJhbWUpOworCisgICAgc3RhdGljIGJvb2wgZmluZFN0cmluZyhjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogdGV4dCwgV2ViQ29yZTo6RmluZE9wdGlv
bnMpOworCisgICAgc3RhdGljIHZvaWQgZ2FyYmFnZUNvbGxlY3RvckNvbGxlY3QoKTsKKyAgICBz
dGF0aWMgdm9pZCBnYXJiYWdlQ29sbGVjdG9yQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKGJvb2wg
d2FpdFVudGlsRG9uZSk7CisgICAgc3RhdGljIHNpemVfdCBqYXZhU2NyaXB0T2JqZWN0c0NvdW50
KCk7CisgICAgc3RhdGljIHVuc2lnbmVkIHdvcmtlclRocmVhZENvdW50KCk7CisKKyAgICBzdGF0
aWMgSGlzdG9yeUl0ZW1DaGlsZHJlbk1hcCBjaGlsZEhpc3RvcnlJdGVtcyhjb25zdCBFd2tfSGlz
dG9yeV9JdGVtKik7CisgICAgc3RhdGljIFN0cmluZyBoaXN0b3J5SXRlbVRhcmdldChjb25zdCBF
d2tfSGlzdG9yeV9JdGVtKik7CisgICAgc3RhdGljIGJvb2wgaXNUYXJnZXRJdGVtKGNvbnN0IEV3
a19IaXN0b3J5X0l0ZW0qKTsKKworICAgIHN0YXRpYyB2b2lkIHNldE1vY2tTY3JvbGxiYXJzRW5h
YmxlZChib29sKTsKK307CisKKyNlbmRpZiAvLyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmxfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAppbmRleCAxYjQ5MjQ5MjhmNWJhODVjOTViM2Uz
ODNkOTMzNzdkYjkzZTNlZWU4Li5kZmNlYmEyZWQyZWI5MzE0NDZmMzk1MmE2NmM2ZTA1NmE4YjQx
MGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcApAQCAtMjksNyArMjksNiBAQAog
I2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50RWZsLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgi
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKICNp
bmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKQEAgLTE2NTYsMyArMTY1NSwxMyBAQCB2b2lkIGV3
a19mcmFtZV9lZGl0b3JfY2xpZW50X2NvbnRlbnRzX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a0Zy
YW1lKQogICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7CiAgICAg
ZXdrX3ZpZXdfZWRpdG9yX2NsaWVudF9jb250ZW50c19jaGFuZ2VkKHNkLT52aWV3KTsKIH0KKwor
bmFtZXNwYWNlIEVXS1ByaXZhdGUgeworCitXZWJDb3JlOjpGcmFtZSAqY29yZUZyYW1lKGNvbnN0
IEV2YXNfT2JqZWN0ICpld2tGcmFtZSkKK3sKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc2QsIDApOworICAgIHJldHVybiBzZC0+ZnJhbWU7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEVXS1ByaXZhdGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
aGlzdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hpc3RvcnkuY3BwCmluZGV4
IDA2ZTIzNjk0OTlkZDU5YThjMTk5ZjIyYzFkMjg4Y2M1YTJlNjk4ZjUuLjgxZjYwYzUwM2FhMmFm
ODI4NzEzYjRiOTgyYzA2NTJkNjYyNjcyZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfaGlzdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0
b3J5LmNwcApAQCAtNzMsMjggKzczLDYgQEAgc3RydWN0IF9Fd2tfSGlzdG9yeV9JdGVtIHsKICAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBjb3JlXyA9IChpdGVtKS0+Y29yZQogCi0K
LXN0YXRpYyBpbmxpbmUgRXdrX0hpc3RvcnlfSXRlbSogX2V3a19oaXN0b3J5X2l0ZW1fbmV3KFdl
YkNvcmU6Okhpc3RvcnlJdGVtKiBjb3JlKQotewotICAgIEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW07
Ci0KLSAgICBpZiAoIWNvcmUpIHsKLSAgICAgICAgRVJSKCJXZWJDb3JlOjpIaXN0b3J5SXRlbSBp
cyBOVUxMLiIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpdGVtID0gc3RhdGlj
X2Nhc3Q8RXdrX0hpc3RvcnlfSXRlbSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX0hpc3RvcnlfSXRl
bSkpKTsKLSAgICBpZiAoIWl0ZW0pIHsKLSAgICAgICAgQ1JJVElDQUwoIkNvdWxkIG5vdCBhbGxv
Y2F0ZSBpdGVtIG1lbW9yeS4iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgY29y
ZS0+cmVmKCk7Ci0gICAgaXRlbS0+Y29yZSA9IGNvcmU7Ci0KLSAgICByZXR1cm4gaXRlbTsKLX0K
LQogc3RhdGljIGlubGluZSBFaW5hX0xpc3QqIF9ld2tfaGlzdG9yeV9pdGVtX2xpc3RfZ2V0KGNv
bnN0IFdlYkNvcmU6Okhpc3RvcnlJdGVtVmVjdG9yJiBjb3JlSXRlbXMpCiB7CiAgICAgRWluYV9M
aXN0KiByZXQgPSAwOwpAQCAtMTAyLDcgKzgwLDcgQEAgc3RhdGljIGlubGluZSBFaW5hX0xpc3Qq
IF9ld2tfaGlzdG9yeV9pdGVtX2xpc3RfZ2V0KGNvbnN0IFdlYkNvcmU6Okhpc3RvcnlJdGVtVmUK
IAogICAgIHNpemUgPSBjb3JlSXRlbXMuc2l6ZSgpOwogICAgIGZvciAoaSA9IDA7IGkgPCBzaXpl
OyBpKyspIHsKLSAgICAgICAgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSA9IF9ld2tfaGlzdG9yeV9p
dGVtX25ldyhjb3JlSXRlbXNbaV0uZ2V0KCkpOworICAgICAgICBFd2tfSGlzdG9yeV9JdGVtKiBp
dGVtID0gZXdrX2hpc3RvcnlfaXRlbV9uZXdfZnJvbV9jb3JlKGNvcmVJdGVtc1tpXS5nZXQoKSk7
CiAgICAgICAgIGlmIChpdGVtKQogICAgICAgICAgICAgcmV0ID0gZWluYV9saXN0X2FwcGVuZChy
ZXQsIGl0ZW0pOwogICAgIH0KQEAgLTE0Nyw3ICsxMjUsNyBAQCBFaW5hX0Jvb2wgZXdrX2hpc3Rv
cnlfaGlzdG9yeV9pdGVtX3NldChFd2tfSGlzdG9yeSogaGlzdG9yeSwgY29uc3QgRXdrX0hpc3Rv
cnlfSQogRXdrX0hpc3RvcnlfSXRlbSogZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX2JhY2tfZ2V0
KGNvbnN0IEV3a19IaXN0b3J5KiBoaXN0b3J5KQogewogICAgIEVXS19ISVNUT1JZX0NPUkVfR0VU
X09SX1JFVFVSTihoaXN0b3J5LCBjb3JlLCAwKTsKLSAgICByZXR1cm4gX2V3a19oaXN0b3J5X2l0
ZW1fbmV3KGNvcmUtPmJhY2tJdGVtKCkpOworICAgIHJldHVybiBld2tfaGlzdG9yeV9pdGVtX25l
d19mcm9tX2NvcmUoY29yZS0+YmFja0l0ZW0oKSk7CiB9CiAKIEV3a19IaXN0b3J5X0l0ZW0qIGV3
a19oaXN0b3J5X2hpc3RvcnlfaXRlbV9jdXJyZW50X2dldChjb25zdCBFd2tfSGlzdG9yeSogaGlz
dG9yeSkKQEAgLTE1NSwyMCArMTMzLDIwIEBAIEV3a19IaXN0b3J5X0l0ZW0qIGV3a19oaXN0b3J5
X2hpc3RvcnlfaXRlbV9jdXJyZW50X2dldChjb25zdCBFd2tfSGlzdG9yeSogaGlzdG9yCiAgICAg
RVdLX0hJU1RPUllfQ09SRV9HRVRfT1JfUkVUVVJOKGhpc3RvcnksIGNvcmUsIDApOwogICAgIFdl
YkNvcmU6Okhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbSA9IGNvcmUtPmN1cnJlbnRJdGVtKCk7CiAg
ICAgaWYgKGN1cnJlbnRJdGVtKQotICAgICAgICByZXR1cm4gX2V3a19oaXN0b3J5X2l0ZW1fbmV3
KGN1cnJlbnRJdGVtKTsKKyAgICAgICAgcmV0dXJuIGV3a19oaXN0b3J5X2l0ZW1fbmV3X2Zyb21f
Y29yZShjdXJyZW50SXRlbSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIEV3a19IaXN0b3J5X0l0ZW0q
IGV3a19oaXN0b3J5X2hpc3RvcnlfaXRlbV9mb3J3YXJkX2dldChjb25zdCBFd2tfSGlzdG9yeSog
aGlzdG9yeSkKIHsKICAgICBFV0tfSElTVE9SWV9DT1JFX0dFVF9PUl9SRVRVUk4oaGlzdG9yeSwg
Y29yZSwgMCk7Ci0gICAgcmV0dXJuIF9ld2tfaGlzdG9yeV9pdGVtX25ldyhjb3JlLT5mb3J3YXJk
SXRlbSgpKTsKKyAgICByZXR1cm4gZXdrX2hpc3RvcnlfaXRlbV9uZXdfZnJvbV9jb3JlKGNvcmUt
PmZvcndhcmRJdGVtKCkpOwogfQogCiBFd2tfSGlzdG9yeV9JdGVtKiBld2tfaGlzdG9yeV9oaXN0
b3J5X2l0ZW1fbnRoX2dldChjb25zdCBFd2tfSGlzdG9yeSogaGlzdG9yeSwgaW50IGluZGV4KQog
ewogICAgIEVXS19ISVNUT1JZX0NPUkVfR0VUX09SX1JFVFVSTihoaXN0b3J5LCBjb3JlLCAwKTsK
LSAgICByZXR1cm4gX2V3a19oaXN0b3J5X2l0ZW1fbmV3KGNvcmUtPml0ZW1BdEluZGV4KGluZGV4
KSk7CisgICAgcmV0dXJuIGV3a19oaXN0b3J5X2l0ZW1fbmV3X2Zyb21fY29yZShjb3JlLT5pdGVt
QXRJbmRleChpbmRleCkpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVt
X2NvbnRhaW5zKGNvbnN0IEV3a19IaXN0b3J5KiBoaXN0b3J5LCBjb25zdCBFd2tfSGlzdG9yeV9J
dGVtKiBpdGVtKQpAQCAtMjM3LDEyICsyMTUsMzMgQEAgRWluYV9Cb29sIGV3a19oaXN0b3J5X2xp
bWl0X3NldChjb25zdCBFd2tfSGlzdG9yeSogaGlzdG9yeSwgaW50IGxpbWl0KQogICAgIHJldHVy
biBFSU5BX1RSVUU7CiB9CiAKK0V3a19IaXN0b3J5X0l0ZW0qIGV3a19oaXN0b3J5X2l0ZW1fbmV3
X2Zyb21fY29yZShXZWJDb3JlOjpIaXN0b3J5SXRlbSogY29yZSkKK3sKKyAgICBFd2tfSGlzdG9y
eV9JdGVtKiBpdGVtOworCisgICAgaWYgKCFjb3JlKSB7CisgICAgICAgIEVSUigiV2ViQ29yZTo6
SGlzdG9yeUl0ZW0gaXMgTlVMTC4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
aXRlbSA9IChFd2tfSGlzdG9yeV9JdGVtKiljYWxsb2MoMSwgc2l6ZW9mKEV3a19IaXN0b3J5X0l0
ZW0pKTsKKyAgICBpZiAoIWl0ZW0pIHsKKyAgICAgICAgQ1JJVElDQUwoIkNvdWxkIG5vdCBhbGxv
Y2F0ZSBpdGVtIG1lbW9yeS4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgY29y
ZS0+cmVmKCk7CisgICAgaXRlbS0+Y29yZSA9IGNvcmU7CisKKyAgICByZXR1cm4gaXRlbTsKK30K
KwogRXdrX0hpc3RvcnlfSXRlbSogZXdrX2hpc3RvcnlfaXRlbV9uZXcoY29uc3QgY2hhciogdXJp
LCBjb25zdCBjaGFyKiB0aXRsZSkKIHsKICAgICBXVEY6OlN0cmluZyB1ID0gV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHVyaSk7CiAgICAgV1RGOjpTdHJpbmcgdCA9IFdURjo6U3RyaW5nOjpmcm9tVVRG
OCh0aXRsZSk7CiAgICAgV1RGOjpSZWZQdHI8V2ViQ29yZTo6SGlzdG9yeUl0ZW0+IGNvcmUgPSBX
ZWJDb3JlOjpIaXN0b3J5SXRlbTo6Y3JlYXRlKHUsIHQsIDApOwotICAgIEV3a19IaXN0b3J5X0l0
ZW0qIGl0ZW0gPSBfZXdrX2hpc3RvcnlfaXRlbV9uZXcoY29yZS5yZWxlYXNlKCkucmVsZWFzZVJl
ZigpKTsKKyAgICBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtID0gZXdrX2hpc3RvcnlfaXRlbV9uZXdf
ZnJvbV9jb3JlKGNvcmUucmVsZWFzZSgpLnJlbGVhc2VSZWYoKSk7CiAgICAgcmV0dXJuIGl0ZW07
CiB9CiAKQEAgLTQxMCw1MSArNDA5LDEyIEBAIHZvaWQgZXdrX2hpc3RvcnlfZnJlZShFd2tfSGlz
dG9yeSogaGlzdG9yeSkKICAgICBmcmVlKGhpc3RvcnkpOwogfQogCi0vKioKLSAqIEBpbnRlcm5h
bAotICoKLSAqIFJldHVybnMgYSBuZXdseS1hbGxvY2F0ZWQgc3RyaW5nIHdpdGggdGhlIGl0ZW0n
cyB0YXJnZXQgbmFtZS4KLSAqIENhbGxlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHRo
ZSBhbGxvY2F0ZWQgbWVtb3J5IHdpdGggZnJlZSgzKS4KLSAqCi0gKiBAcGFyYW0gaXRlbSBpbnN0
YW5jZSB0byBvcGVyYXRlIHVwb24uCi0gKi8KLWNoYXIqIGV3a19oaXN0b3J5X2l0ZW1fdGFyZ2V0
X2dldChjb25zdCBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtKQotewotICAgIEVXS19ISVNUT1JZX0lU
RU1fQ09SRV9HRVRfT1JfUkVUVVJOKGl0ZW0sIGNvcmUsIDApOwotICAgIHJldHVybiBzdHJkdXAo
Y29yZS0+dGFyZ2V0KCkudXRmOCgpLmRhdGEoKSk7Ci19CituYW1lc3BhY2UgRVdLUHJpdmF0ZSB7
CiAKLS8qKgotICogQGludGVybmFsCi0gKgotICogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBp
dGVtIGlzIGN1cnJlbnRseSBhIHRhcmdldC4KLSAqCi0gKiBAcGFyYW0gaXRlbSBpbnN0YW5jZSB0
byBjaGVjay4KLSAqLwotRWluYV9Cb29sIGV3a19oaXN0b3J5X2l0ZW1fdGFyZ2V0X2lzKGNvbnN0
IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0pCitXZWJDb3JlOjpIaXN0b3J5SXRlbSogY29yZUhpc3Rv
cnlJdGVtKGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGV3a0hpc3RvcnlJdGVtKQogewotICAgIEVX
S19ISVNUT1JZX0lURU1fQ09SRV9HRVRfT1JfUkVUVVJOKGl0ZW0sIGNvcmUsIDApOwotICAgIHJl
dHVybiBjb3JlLT5pc1RhcmdldEl0ZW0oKTsKKyAgICBFV0tfSElTVE9SWV9JVEVNX0NPUkVfR0VU
X09SX1JFVFVSTihld2tIaXN0b3J5SXRlbSwgY29yZSwgMCk7CisgICAgcmV0dXJuIGNvcmU7CiB9
CiAKLS8qKgotICogQGludGVybmFsCi0gKgotICogUmV0dXJucyBhIGxpc3Qgb2YgY2hpbGQgaGlz
dG9yeSBpdGVtcyByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gaXRlbSwKLSAqIG9yIEBjIE5VTEwgaWYg
dGhlcmUgYXJlIG5vbmUuCi0gKgotICogQHBhcmFtIGl0ZW0gaW5zdGFuY2UgdG8gb3BlcmF0ZSB1
cG9uLgotICovCi1FaW5hX0xpc3QqIGV3a19oaXN0b3J5X2l0ZW1fY2hpbGRyZW5fZ2V0KGNvbnN0
IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0pCi17Ci0gICAgRVdLX0hJU1RPUllfSVRFTV9DT1JFX0dF
VF9PUl9SRVRVUk4oaXRlbSwgY29yZSwgMCk7Ci0gICAgY29uc3QgV2ViQ29yZTo6SGlzdG9yeUl0
ZW1WZWN0b3ImIGNoaWxkcmVuID0gY29yZS0+Y2hpbGRyZW4oKTsKLSAgICBpZiAoIWNoaWxkcmVu
LnNpemUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBFaW5hX0xpc3QqIGtpZHMgPSAwOwot
ICAgIGNvbnN0IHVuc2lnbmVkIHNpemUgPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAga2lkcyA9IGVpbmFfbGlzdF9hcHBl
bmQoa2lkcywgX2V3a19oaXN0b3J5X2l0ZW1fbmV3KGNoaWxkcmVuW2ldLmdldCgpKSk7Ci0gICAg
cmV0dXJuIGtpZHM7Ci19Cit9IC8vIG5hbWVzcGFjZSBFV0tQcml2YXRlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfcHJpdmF0ZS5oCmluZGV4IGU5NjZhNTM1OTA5MGM1MjgyMTU1ZGM4MTY4NjZlOGNmNjcz
ZTI1YmIuLmNjYWI0OTNmMjM2MWU4NmI5NDU4NTg5ZWIzMDUxODliY2E3NDdiNzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfcHJpdmF0ZS5oCkBAIC03Nyw2ICs3NywxNCBAQCBzdHJ1Y3QgRXdrX1dp
bmRvd19PYmplY3RfQ2xlYXJlZF9FdmVudCB7CiAgICAgRXZhc19PYmplY3QqIGZyYW1lOwogfTsK
IAorbmFtZXNwYWNlIEVXS1ByaXZhdGUgeworCitXZWJDb3JlOjpGcmFtZSAqY29yZUZyYW1lKGNv
bnN0IEV2YXNfT2JqZWN0ICpld2tGcmFtZSk7CitXZWJDb3JlOjpQYWdlICpjb3JlUGFnZShjb25z
dCBFdmFzX09iamVjdCAqZXdrVmlldyk7CitXZWJDb3JlOjpIaXN0b3J5SXRlbSAqY29yZUhpc3Rv
cnlJdGVtKGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0gKmV3a0hpc3RvcnlJdGVtKTsKKworfSAvLyBu
YW1lc3BhY2UgRVdLUHJpdmF0ZQorCiB2b2lkIGV3a192aWV3X3JlYWR5KEV2YXNfT2JqZWN0KiBv
KTsKIHZvaWQgZXdrX3ZpZXdfaW5wdXRfbWV0aG9kX3N0YXRlX3NldChFdmFzX09iamVjdCogbywg
RWluYV9Cb29sIGFjdGl2ZSk7CiB2b2lkIGV3a192aWV3X3RpdGxlX3NldChFdmFzX09iamVjdCog
bywgY29uc3QgY2hhciogdGl0bGUpOwpAQCAtMTQ3LDIxICsxNTUsMTUgQEAgdm9pZCBld2tfdmll
d19qc193aW5kb3dfb2JqZWN0X2NsZWFyKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogZnJh
bWUpOwogI2VuZGlmCiAKIGludCBld2tfdXRpbF9kcGlfZ2V0KCk7Ci12b2lkIGV3a191dGlsX2ph
dmFzY3JpcHRfZ2NfY29sbGVjdCgpOwotdm9pZCBld2tfdXRpbF9qYXZhc2NyaXB0X2djX2FsdGVy
bmF0ZV90aHJlYWRfY29sbGVjdChFaW5hX0Jvb2wgd2FpdFVudGlsRG9uZSk7Ci11bnNpZ25lZCBl
d2tfdXRpbF9qYXZhc2NyaXB0X2djX29iamVjdF9jb3VudF9nZXQoKTsKLXVuc2lnbmVkIGV3a191
dGlsX3dvcmtlcl90aHJlYWRfY291bnQoKTsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiB2
b2lkIGV3a192aWV3X25lZWRfdG91Y2hfZXZlbnRzX3NldChFdmFzX09iamVjdCosIGJvb2wgbmVl
ZGVkKTsKIEVpbmFfQm9vbCBld2tfdmlld19uZWVkX3RvdWNoX2V2ZW50c19nZXQoY29uc3QgRXZh
c19PYmplY3QqKTsKICNlbmRpZgogCitFd2tfSGlzdG9yeV9JdGVtICpld2tfaGlzdG9yeV9pdGVt
X25ld19mcm9tX2NvcmUoV2ViQ29yZTo6SGlzdG9yeUl0ZW0gKmNvcmUpOwogRXdrX0hpc3Rvcnkq
IGV3a19oaXN0b3J5X25ldyhXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3RJbXBsKiBoaXN0b3J5KTsK
IHZvaWQgZXdrX2hpc3RvcnlfZnJlZShFd2tfSGlzdG9yeSogaGlzdG9yeSk7Ci1jaGFyKiBld2tf
aGlzdG9yeV9pdGVtX3RhcmdldF9nZXQoY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSk7Ci1F
aW5hX0Jvb2wgZXdrX2hpc3RvcnlfaXRlbV90YXJnZXRfaXMoY29uc3QgRXdrX0hpc3RvcnlfSXRl
bSogaXRlbSk7Ci1FaW5hX0xpc3QqIGV3a19oaXN0b3J5X2l0ZW1fY2hpbGRyZW5fZ2V0KGNvbnN0
IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0pOwogCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCiBF
d2tfQ29udGV4dF9NZW51KiBld2tfY29udGV4dF9tZW51X25ldyhFdmFzX09iamVjdCogdmlldywg
V2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyKiBjb250cm9sbGVyKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdXRpbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3V0aWwuY3BwCmluZGV4IGI3YzlmZjM5ZGY4MTRjMjliNmVhOTZlMjA1MDE1MTJhMjY4
MmZhOTguLjQxNWIzNmU1ZTc1ZGU5MWFmMjdiNDc0OWZlYTAyYzlkNWQ1Nzg5ZjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdXRpbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a191dGlsLmNwcApAQCAtMjEsOSArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgImV3a191dGlsLmgiCiAKLSNpbmNsdWRlICJiaW5kaW5ncy9qcy9HQ0Nv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgotI2luY2x1ZGUgIndvcmtlcnMv
V29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSA8ZWluYV9zYWZldHlfY2hlY2tzLmg+CiAKICNpZmRl
ZiBIQVZFX0VDT1JFX1gKQEAgLTExMiw1MyArMTEwLDYgQEAgRXZhc19PYmplY3QqIGV3a191dGls
X2ltYWdlX2Zyb21fY2Fpcm9fc3VyZmFjZV9hZGQoRXZhcyogY2FudmFzLCBjYWlyb19zdXJmYWNl
X3QKIAogLyoqCiAgKiBAaW50ZXJuYWwKLSAqCi0gKiBQZXJmb3JtcyBnYXJiYWdlIGNvbGxlY3Rp
b24gb2YgSmF2YVNjcmlwdCBvYmplY3RzLgotICovCi12b2lkIGV3a191dGlsX2phdmFzY3JpcHRf
Z2NfY29sbGVjdCgpCi17Ci0gICAgV2ViQ29yZTo6Z2NDb250cm9sbGVyKCkuZ2FyYmFnZUNvbGxl
Y3ROb3coKTsKLX0KLQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqCi0gKiBQZXJmb3JtcyBnYXJiYWdl
IGNvbGxlY3Rpb24gb2YgSmF2YVNjcmlwdCBvYmplY3RzIGluIGEgc2VwYXJhdGUgdGhyZWFkLgot
ICoKLSAqIEBwYXJhbSB3YWl0VW50aWxEb25lIElmIEBjIFRSVUUsIHdhaXQgdGhlIGdhcmJhZ2Ug
Y29sbGVjdGlvbiB0aHJlYWQgdG8gZmluaXNoOyBpZiBAYyBGQUxTRSwKLSAqIHJldHVybiBhcyBz
b29uIGFzIHRoZSB0aHJlYWQgaGFzIGJlZW4gY3JlYXRlZC4KLSAqLwotdm9pZCBld2tfdXRpbF9q
YXZhc2NyaXB0X2djX2FsdGVybmF0ZV90aHJlYWRfY29sbGVjdChFaW5hX0Jvb2wgd2FpdFVudGls
RG9uZSkKLXsKLSAgICBXZWJDb3JlOjpnY0NvbnRyb2xsZXIoKS5nYXJiYWdlQ29sbGVjdE9uQWx0
ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5nKHdhaXRVbnRpbERvbmUpOwotfQotCi0vKioKLSAqIEBp
bnRlcm5hbAotICoKLSAqIFJldHVybnMgdGhlIG51bWJlciBvZiBjdXJyZW50IEphdmFTY3JpcHQg
b2JqZWN0cy4KLSAqLwotdW5zaWduZWQgZXdrX3V0aWxfamF2YXNjcmlwdF9nY19vYmplY3RfY291
bnRfZ2V0KCkKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6SlNET01XaW5kb3c6OmNvbW1vbkpTR2xv
YmFsRGF0YSgpLT5oZWFwLm9iamVjdENvdW50KCk7Ci19Ci0KLS8qKgotICogQGludGVybmFsCi0g
KgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGN1cnJlbnQgd29ya2VkIHRocmVhZHMuCi0gKi8K
LXVuc2lnbmVkIGV3a191dGlsX3dvcmtlcl90aHJlYWRfY291bnQoKQotewotI2lmIEVOQUJMRShX
T1JLRVJTKQotICAgIHJldHVybiBXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZENv
dW50KCk7Ci0jZWxzZQotICAgIHJldHVybiAwOwotI2VuZGlmCi19Ci0KLS8qKgotICogQGludGVy
bmFsCiAgKiBHZXRzIGRwaSB2YWx1ZS4KICAqCiAgKiBAcmV0dXJuIGRldmljZSdzIGRwaSB2YWx1
ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCmluZGV4IDMwMjQzODNlMTU1MDQxMDY3ZTcz
YzcyZTMzZWNkYjg2ODgyZTUyZmIuLjhmYmQyYzdjODJkNTdmMmEwNjhlNTM5NjFkNTA0ZDcyNGUz
MmZlMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcApAQCAtMzg0NSwzICszODQ1LDE0
IEBAIHZvaWQgZXdrX3ZpZXdfZWRpdG9yX2NsaWVudF9jb250ZW50c19jaGFuZ2VkKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogewogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdr
VmlldywgImVkaXRvcmNsaWVudCxjb250ZW50cyxjaGFuZ2VkIiwgMCk7CiB9CisKK25hbWVzcGFj
ZSBFV0tQcml2YXRlIHsKKworV2ViQ29yZTo6UGFnZSAqY29yZVBhZ2UoY29uc3QgRXZhc19PYmpl
Y3QgKmV3a1ZpZXcpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKKyAg
ICByZXR1cm4gcHJpdi0+cGFnZTsKK30KKworfSAvLyBuYW1lc3BhY2UgRVdLUHJpdmF0ZQpkaWZm
IC0tZ2l0IGEvU291cmNlL2NtYWtlL2VmbHN5bWJvbHMuZmlsdGVyIGIvU291cmNlL2NtYWtlL2Vm
bHN5bWJvbHMuZmlsdGVyCmluZGV4IDM1NmEwMGM1YzZhYWRjNmFmNGZlMmU2Mjc3MWUwY2NiOTVh
ODE0N2UuLjJiY2IzY2VkOGJkOTA2YjhkNzQ1ZmI0ODJhZmQ2NDllYjMxNTc4OGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9jbWFrZS9lZmxzeW1ib2xzLmZpbHRlcgorKysgYi9Tb3VyY2UvY21ha2UvZWZs
c3ltYm9scy5maWx0ZXIKQEAgLTEsNiArMSwxMSBAQAogewogICAgICAgICBnbG9iYWw6CiAgICAg
ICAgICAgICAgICAgZXdrXyo7CisKKyAgICAgICAgICAgICAgICBleHRlcm4gIkMrKyIgeworICAg
ICAgICAgICAgICAgICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwqOworICAgICAgICAg
ICAgICAgIH07CisKICAgICAgICAgbG9jYWw6CiAgICAgICAgICAgICAgICAgKjsKIH07CmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjAwODM3Njk4
MTlhMzUxNDM2YWY0OTQwY2E4NDdhZjc4NGZjYTZhZi4uOTFlNmQxMTIyYzEwNGQwOGM0NjkzZDY2
OTI0Yzk3ZDczYjU5NTU4YyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDExLTEwLTE0ICBSYXBoYWVsIEt1Ym8gZGEg
Q29zdGEgIDxrdWJvQHByb2Z1c2lvbi5tb2JpPgorCisgICAgICAgIFtFRkxdIEFkZCBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY4NDU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTWFrZSB0aGUgY2FsbHMgaW4gRHVtcFJlbmRlclRyZWUgdXNlIER1bXBSZW5kZXJU
cmVlU3VwcG9ydEVmbC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVy
VHJlZUNocm9tZS5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZUNocm9tZTo6aW5pdGlhbGl6
ZSk6IFR1cm4gb24gbW9jayBzY3JvbGxiYXJzLgorICAgICAgICAoRHVtcFJlbmRlclRyZWVDaHJv
bWU6OnJlc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAoRHVtcFJlbmRl
clRyZWVDaHJvbWU6Om9uV2luZG93T2JqZWN0Q2xlYXJlZCk6CisgICAgICAgIChEdW1wUmVuZGVy
VHJlZUNocm9tZTo6b25Eb2N1bWVudExvYWRGaW5pc2hlZCk6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvZWZsL0dDQ29udHJvbGxlckVmbC5jcHA6CisgICAgICAgIChHQ0NvbnRyb2xsZXI6OmNv
bGxlY3QpOgorICAgICAgICAoR0NDb250cm9sbGVyOjpjb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQp
OgorICAgICAgICAoR0NDb250cm9sbGVyOjpnZXRKU09iamVjdENvdW50KToKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwOgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvdW50ZXJWYWx1ZUZvckVsZW1lbnRCeUlkKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlTnVtYmVyRm9yRWxlbWVudEJ5SWQpOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mUGFnZXMpOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OndvcmtlclRocmVhZENvdW50KToKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpmaW5kU3RyaW5nKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCk6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKToKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzYW1wbGVTVkdBbmltYXRpb25Gb3JFbGVtZW50
QXRUaW1lKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFu
aW1hdGlvbnMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRp
b25zKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpyZXN1bWVBbmltYXRpb25zKToK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvUGl4ZWxEdW1wU3VwcG9ydEVmbC5jcHA6Cisg
ICAgICAgIChjcmVhdGVCaXRtYXBDb250ZXh0RnJvbVdlYlZpZXcpOgorCiAyMDExLTEwLTEzICBP
amFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTWFrZSBmaWx0ZXItYnVp
bGQtd2Via2l0IGV4aXQgMSBpZiB0aGUgYnVpbGQgZmFpbHMuCmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVDaHJvbWUuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNwcAppbmRleCA1Y2YxMzVlNGJlZGFi
MGZhNDljYTcwNzg3YTdjMjVjZTA3MGM3ZTViLi4wNzg1MzllMDA0Y2NkMzYzMWJlYjBlNDdmNjRj
YmIyYTY0MjlmODJmIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJl
bmRlclRyZWVDaHJvbWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVu
ZGVyVHJlZUNocm9tZS5jcHAKQEAgLTEwOCw2ICsxMDgsOCBAQCB2b2lkIER1bXBSZW5kZXJUcmVl
Q2hyb21lOjpyZW1vdmVXaW5kb3coRXZhc19PYmplY3QqIHZpZXcpCiAKIGJvb2wgRHVtcFJlbmRl
clRyZWVDaHJvbWU6OmluaXRpYWxpemUoKQogeworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bDo6c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKHRydWUpOworCiAgICAgbV9tYWluVmlldyA9IGNy
ZWF0ZVZpZXcoKTsKICAgICBpZiAoIW1fbWFpblZpZXcpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTE4Myw4ICsxODUsOCBAQCB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpyZXNldERlZmF1
bHRzVG9Db25zaXN0ZW50VmFsdWVzKCkKICAgICBld2tfY29va2llc19jbGVhcigpOwogICAgIGV3
a19jb29raWVzX3BvbGljeV9zZXQoRVdLX0NPT0tJRV9KQVJfQUNDRVBUX05PX1RISVJEX1BBUlRZ
KTsKIAotICAgIGV3a19mcmFtZV9uYW1lX2NsZWFyKG1haW5GcmFtZSgpKTsKLSAgICBld2tfZnJh
bWVfb3BlbmVyX2NsZWFyKG1haW5GcmFtZSgpKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRF
Zmw6OmNsZWFyRnJhbWVOYW1lKG1haW5GcmFtZSgpKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmw6OmNsZWFyT3BlbmVyKG1haW5GcmFtZSgpKTsKIH0KIAogLy8gU21hcnQgQ2FsbGJhY2tz
CkBAIC0yMDgsNyArMjEwLDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25XaW5kb3dP
YmplY3RDbGVhcmVkKHZvaWQqIHVzZXJEYXRhLCBFdmFzX09iamVjdCosIHYKICAgICBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gY29udHJvbGxlck5hbWUoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImV2ZW50U2VuZGVyIikpOwogICAgIEpTT2JqZWN0U2V0UHJvcGVydHkob2JqZWN0Q2xl
YXJlZEluZm8tPmNvbnRleHQsIG9iamVjdENsZWFyZWRJbmZvLT53aW5kb3dPYmplY3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyTmFtZS5nZXQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1ha2VFdmVudFNlbmRlcihvYmplY3RDbGVhcmVkSW5mby0+Y29udGV4dCwgZmFs
c2UpLCAvLyBGSVhNRTogcy9mYWxzZS8hZ2V0X3BhcmVudC8uCisgICAgICAgICAgICAgICAgICAg
ICAgICBtYWtlRXZlbnRTZW5kZXIob2JqZWN0Q2xlYXJlZEluZm8tPmNvbnRleHQsICFEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmw6OmZyYW1lUGFyZW50KG9iamVjdENsZWFyZWRJbmZvLT5mcmFtZSkp
LAogICAgICAgICAgICAgICAgICAgICAgICAga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSwgMCk7CiB9CiAKQEAgLTI3MCwxMiArMjcy
LDEyIEBAIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uVGl0bGVDaGFuZ2VkKHZvaWQqLCBF
dmFzX09iamVjdCosIHZvaWQqKQogdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25Eb2N1bWVu
dExvYWRGaW5pc2hlZCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCiB7CiAg
ICAgY29uc3QgRXZhc19PYmplY3QqIGZyYW1lID0gc3RhdGljX2Nhc3Q8RXZhc19PYmplY3QqPihl
dmVudEluZm8pOwotICAgIGNvbnN0IFN0cmluZyBmcmFtZU5hbWUoZXdrX2ZyYW1lX3N1aXRhYmxl
X2RydF9uYW1lX2dldChmcmFtZSkpOworICAgIGNvbnN0IFN0cmluZyBmcmFtZU5hbWUoRHVtcFJl
bmRlclRyZWVTdXBwb3J0RWZsOjpzdWl0YWJsZURSVEZyYW1lTmFtZShmcmFtZSkpOwogCiAgICAg
aWYgKCFkb25lICYmIGdMYXlvdXRUZXN0Q29udHJvbGxlci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNr
cygpKQogICAgICAgICBwcmludGYoIiVzIC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWVc
biIsIGZyYW1lTmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICBlbHNlIGlmICghZG9uZSkgewotICAg
ICAgICBjb25zdCB1bnNpZ25lZCBwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMgPSBld2tfZnJhbWVf
cGVuZGluZ191bmxvYWRfZXZlbnRfY291bnRfZ2V0KGZyYW1lKTsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgcGVuZGluZ0ZyYW1lVW5sb2FkRXZlbnRzID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZs
OjpwZW5kaW5nVW5sb2FkRXZlbnRDb3VudChmcmFtZSk7CiAgICAgICAgIGlmIChwZW5kaW5nRnJh
bWVVbmxvYWRFdmVudHMpCiAgICAgICAgICAgICBwcmludGYoIiVzIC0gaGFzICV1IG9udW5sb2Fk
IGhhbmRsZXIocylcbiIsIGZyYW1lTmFtZS51dGY4KCkuZGF0YSgpLCBwZW5kaW5nRnJhbWVVbmxv
YWRFdmVudHMpOwogICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9H
Q0NvbnRyb2xsZXJFZmwuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0dDQ29udHJvbGxl
ckVmbC5jcHAKaW5kZXggZjM4NTJmMWZiNGQyYmRlZmM5OTJhOWMyYTU1YzUyNjA0ODZkYTM0Ny4u
MWY1NWE1Y2U2MDg4YjVlZjhhY2FmY2IyN2RlNWVhYmUxNGI2YzEzZiAxMDA2NDQKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvZWZsL0dDQ29udHJvbGxlckVmbC5jcHAKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZWZsL0dDQ29udHJvbGxlckVmbC5jcHAKQEAgLTMwLDE5ICszMCwyMCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgogCisjaW5jbHVk
ZSAiV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmgiCiAjaW5jbHVkZSAi
ZXdrX3ByaXZhdGUuaCIKIAogdm9pZCBHQ0NvbnRyb2xsZXI6OmNvbGxlY3QoKSBjb25zdAogewot
ICAgIGV3a191dGlsX2phdmFzY3JpcHRfZ2NfY29sbGVjdCgpOworICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbDo6Z2FyYmFnZUNvbGxlY3RvckNvbGxlY3QoKTsKIH0KIAogdm9pZCBHQ0NvbnRy
b2xsZXI6OmNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZChib29sIHdhaXRVbnRpbERvbmUpIGNvbnN0
CiB7Ci0gICAgZXdrX3V0aWxfamF2YXNjcmlwdF9nY19hbHRlcm5hdGVfdGhyZWFkX2NvbGxlY3Qo
d2FpdFVudGlsRG9uZSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpnYXJiYWdlQ29s
bGVjdG9yQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKHdhaXRVbnRpbERvbmUpOwogfQogCiBzaXpl
X3QgR0NDb250cm9sbGVyOjpnZXRKU09iamVjdENvdW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
ZXdrX3V0aWxfamF2YXNjcmlwdF9nY19vYmplY3RfY291bnRfZ2V0KCk7CisgICAgcmV0dXJuIER1
bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6amF2YVNjcmlwdE9iamVjdHNDb3VudCgpOwogfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZs
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5j
cHAKaW5kZXggZTk5ZWQyNWM2NWRiYmZmZjNhM2YwNDY4OWE3YmFlYmMxZmI3ZjNkYy4uOTFkZDZl
NTlkZWY0MzZjZTQyZWIzMTY3YjUzNDI1NGU5NTNlOTI0NSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcAorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCkBAIC0zNyw5ICsz
NywxMCBAQAogI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCiAKICNpbmNsdWRlICJE
dW1wUmVuZGVyVHJlZS5oIgorI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlQ2hyb21lLmgiCiAjaW5j
bHVkZSAiSlNTdHJpbmdVdGlscy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5j
bHVkZSAiT3duRmFzdE1hbGxvY1B0ci5oIgorI2luY2x1ZGUgIldlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbC5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgogI2luY2x1ZGUg
IldvcmtRdWV1ZUl0ZW0uaCIKICNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgpAQCAtNDksNiArNTAs
NyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvT3BhcXVlSlNTdHJpbmcuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS93dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDxlZGl0aW5nL0ZpbmRPcHRpb25zLmg+
CiAjaW5jbHVkZSA8c3RkaW8uaD4KIAogTGF5b3V0VGVzdENvbnRyb2xsZXI6On5MYXlvdXRUZXN0
Q29udHJvbGxlcigpCkBAIC05MCw4ICs5Miw5IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmRpc3BsYXkoKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNvdW50ZXJWYWx1ZUZvckVsZW1lbnRCeUlkKEpTU3RyaW5nUmVmIGlkKQogewotICAgIE93
bkZhc3RNYWxsb2NQdHI8Y2hhcj4gY291bnRlclZhbHVlKGV3a19mcmFtZV9jb3VudGVyX3ZhbHVl
X2J5X2VsZW1lbnRfaWRfZ2V0KGJyb3dzZXItPm1haW5GcmFtZSgpLCBpZC0+dXN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpKTsKLSAgICByZXR1cm4gSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KEFkb3B0
LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb3VudGVyVmFsdWUuZ2V0KCkpKTsKKyAg
ICBjb25zdCBFdmFzX09iamVjdCogbWFpbkZyYW1lID0gYnJvd3Nlci0+bWFpbkZyYW1lKCk7Cisg
ICAgY29uc3QgU3RyaW5nIGNvdW50ZXJWYWx1ZShEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNv
dW50ZXJWYWx1ZUJ5RWxlbWVudElkKG1haW5GcmFtZSwgaWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0
YSgpKSk7CisgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPihBZG9wdCwgSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoY291bnRlclZhbHVlLnV0ZjgoKS5kYXRhKCkpKTsKIH0K
IAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6a2VlcFdlYkhpc3RvcnkoKQpAQCAtMTE5LDEy
ICsxMjIsMTIgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVy
OjpsYXllclRyZWVBc1RleHQoKSBjb25zdAogCiBpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBh
Z2VOdW1iZXJGb3JFbGVtZW50QnlJZChKU1N0cmluZ1JlZiBpZCwgZmxvYXQgcGFnZVdpZHRoLCBm
bG9hdCBwYWdlSGVpZ2h0KQogewotICAgIHJldHVybiBld2tfZnJhbWVfcGFnZV9udW1iZXJfYnlf
ZWxlbWVudF9pZF9nZXQoYnJvd3Nlci0+bWFpbkZyYW1lKCksIGlkLT51c3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0KTsKKyAgICByZXR1cm4gRHVtcFJlbmRlclRy
ZWVTdXBwb3J0RWZsOjpudW1iZXJPZlBhZ2VzRm9yRWxlbWVudElkKGJyb3dzZXItPm1haW5GcmFt
ZSgpLCBpZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCk7
CiB9CiAKIGludCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQYWdlcyhmbG9hdCBwYWdl
V2lkdGgsIGZsb2F0IHBhZ2VIZWlnaHQpCiB7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX251
bWJlcl9nZXQoYnJvd3Nlci0+bWFpbkZyYW1lKCksIHBhZ2VXaWR0aCwgcGFnZUhlaWdodCk7Cisg
ICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6bnVtYmVyT2ZQYWdlcyhicm93c2Vy
LT5tYWluRnJhbWUoKSwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0KTsKIH0KIAogSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlUHJvcGVydHkoY29uc3QgY2hh
ciosIGludCkgY29uc3QKQEAgLTE1Niw3ICsxNTksNyBAQCBzaXplX3QgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OndlYkhpc3RvcnlJdGVtQ291bnQoKQogCiB1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6d29ya2VyVGhyZWFkQ291bnQoKSBjb25zdAogewotICAgIHJldHVybiBld2tfdXRpbF93
b3JrZXJfdGhyZWFkX2NvdW50KCk7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bDo6d29ya2VyVGhyZWFkQ291bnQoKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
bm90aWZ5RG9uZSgpCkBAIC00NTMsMTAgKzQ1Niw5IEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHRhcmdldCwK
ICAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBsZW5ndGhWYWx1ZSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWU7Ci0gICAgYm9v
bCBmb3J3YXJkID0gdHJ1ZTsKLSAgICBib29sIHdyYXAgPSBmYWxzZTsKLSAgICBzaXplX3QgbGVu
Z3RoID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgbGVuZ3Ro
VmFsdWUsIDApKTsKKyAgICBXZWJDb3JlOjpGaW5kT3B0aW9ucyBvcHRpb25zID0gMDsKKworICAg
IGNvbnN0IHNpemVfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJl
cihjb250ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKICAgICAgICAgSlNWYWx1ZVJlZiB2YWx1ZSA9IEpTT2JqZWN0R2V0UHJv
cGVydHlBdEluZGV4KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgaSwgMCk7CiAgICAgICAgIGlmICgh
SlNWYWx1ZUlzU3RyaW5nKGNvbnRleHQsIHZhbHVlKSkKQEAgLTQ2NSwxNCArNDY3LDIwIEBAIGJv
b2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTU3RyaW5nUmVmIHRhcmdldCwKICAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG9w
dGlvbk5hbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDApKTsK
IAogICAgICAgICBpZiAoZXF1YWxzKG9wdGlvbk5hbWUsICJDYXNlSW5zZW5zaXRpdmUiKSkKLSAg
ICAgICAgICAgIGNhc2VTZW5zaXRpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIG9wdGlvbnMgfD0g
V2ViQ29yZTo6Q2FzZUluc2Vuc2l0aXZlOworICAgICAgICBlbHNlIGlmIChlcXVhbHMob3B0aW9u
TmFtZSwgIkF0V29yZFN0YXJ0cyIpKQorICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpB
dFdvcmRTdGFydHM7CisgICAgICAgIGVsc2UgaWYgKGVxdWFscyhvcHRpb25OYW1lLCAiVHJlYXRN
ZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQiKSkKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViQ29y
ZTo6VHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQ7CiAgICAgICAgIGVsc2UgaWYgKGVxdWFs
cyhvcHRpb25OYW1lLCAiQmFja3dhcmRzIikpCi0gICAgICAgICAgICBmb3J3YXJkID0gZmFsc2U7
CisgICAgICAgICAgICBvcHRpb25zIHw9IFdlYkNvcmU6OkJhY2t3YXJkczsKICAgICAgICAgZWxz
ZSBpZiAoZXF1YWxzKG9wdGlvbk5hbWUsICJXcmFwQXJvdW5kIikpCi0gICAgICAgICAgICB3cmFw
ID0gdHJ1ZTsKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6V3JhcEFyb3VuZDsKKyAg
ICAgICAgZWxzZSBpZiAoZXF1YWxzKG9wdGlvbk5hbWUsICJTdGFydEluU2VsZWN0aW9uIikpCisg
ICAgICAgICAgICBvcHRpb25zIHw9IFdlYkNvcmU6OlN0YXJ0SW5TZWxlY3Rpb247CiAgICAgfQog
Ci0gICAgcmV0dXJuICEhZXdrX3ZpZXdfdGV4dF9zZWFyY2goYnJvd3Nlci0+bWFpblZpZXcoKSwg
dGFyZ2V0LT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgY2FzZVNlbnNpdGl2ZSwgZm9yd2FyZCwg
d3JhcCk7CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZmluZFN0cmluZyhi
cm93c2VyLT5tYWluVmlldygpLCB0YXJnZXQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBvcHRp
b25zKTsKIH0KIAogYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aXNDb21tYW5kRW5hYmxlZChK
U1N0cmluZ1JlZiBuYW1lKQpAQCAtNTkzLDMyICs2MDEsMzIgQEAgdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSkK
IAogYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1l
bnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5n
UmVmIGVsZW1lbnRJZCkKIHsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2FuaW1hdGlvbl9wYXVzZShi
cm93c2VyLT5tYWluRnJhbWUoKSwgYW5pbWF0aW9uTmFtZS0+dXN0cmluZygpLnV0ZjgoKS5kYXRh
KCksIGVsZW1lbnRJZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRpbWUpOworICAgIHJldHVy
biBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnBhdXNlQW5pbWF0aW9uKGJyb3dzZXItPm1haW5G
cmFtZSgpLCBhbmltYXRpb25OYW1lLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZWxlbWVudElk
LT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGltZSk7CiB9CiAKIGJvb2wgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1Jl
ZiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCiB7Ci0g
ICAgcmV0dXJuIGV3a19mcmFtZV90cmFuc2l0aW9uX3BhdXNlKGJyb3dzZXItPm1haW5GcmFtZSgp
LCBwcm9wZXJ0eU5hbWUtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBlbGVtZW50SWQtPnVzdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCB0aW1lKTsKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsOjpwYXVzZVRyYW5zaXRpb24oYnJvd3Nlci0+bWFpbkZyYW1lKCksIHByb3BlcnR5TmFt
ZS0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVsZW1lbnRJZC0+dXN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIHRpbWUpOwogfQogCiBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpzYW1wbGVTVkdB
bmltYXRpb25Gb3JFbGVtZW50QXRUaW1lKEpTU3RyaW5nUmVmIGFuaW1hdGlvbklkLCBkb3VibGUg
dGltZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQogewotICAgIHJldHVybiBld2tfZnJhbWVfc3Zn
X2FuaW1hdGlvbl9wYXVzZShicm93c2VyLT5tYWluRnJhbWUoKSwgYW5pbWF0aW9uSWQtPnVzdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBlbGVtZW50SWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0
aW1lKTsKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpwYXVzZVNWR0FuaW1h
dGlvbihicm93c2VyLT5tYWluRnJhbWUoKSwgYW5pbWF0aW9uSWQtPnVzdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCBlbGVtZW50SWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0aW1lKTsKIH0KIAog
dW5zaWduZWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9hbmltYXRpb25fYWN0aXZlX251bWJlcl9n
ZXQoYnJvd3Nlci0+bWFpbkZyYW1lKCkpOworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmw6OmFjdGl2ZUFuaW1hdGlvbnNDb3VudChicm93c2VyLT5tYWluRnJhbWUoKSk7CiB9CiAK
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRpb25zKCkgY29uc3QKIHsK
LSAgICBld2tfZnJhbWVfYW5pbWF0aW9uX3N1c3BlbmQoYnJvd3Nlci0+bWFpbkZyYW1lKCkpOwor
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c3VzcGVuZEFuaW1hdGlvbnMoYnJvd3Nlci0+
bWFpbkZyYW1lKCkpOwogfQogCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZXN1bWVBbmlt
YXRpb25zKCkgY29uc3QKIHsKLSAgICBld2tfZnJhbWVfYW5pbWF0aW9uX3Jlc3VtZShicm93c2Vy
LT5tYWluRnJhbWUoKSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpyZXN1bWVBbmlt
YXRpb25zKGJyb3dzZXItPm1haW5GcmFtZSgpKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9QaXhlbER1bXBTdXBwb3J0RWZsLmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9QaXhlbER1bXBTdXBwb3J0RWZsLmNwcAppbmRleCAz
MGU2MTcwODBkYWVkODk0OGRhM2FlYjI5ZTllYTM0MWNhZTcyMDY0Li4xMDkzNzRlYzkyYWZjYjVj
N2Q3ZDIxMGI3ZDY1MThkMGI1NTc5ZTFkIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9lZmwvUGl4ZWxEdW1wU3VwcG9ydEVmbC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
ZWZsL1BpeGVsRHVtcFN1cHBvcnRFZmwuY3BwCkBAIC0zMyw4ICszMywxMCBAQAogCiAjaW5jbHVk
ZSAiRHVtcFJlbmRlclRyZWUuaCIKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZUNocm9tZS5oIgor
I2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQaXhlbER1bXBTdXBwb3J0Q2Fpcm8uaCIK
ICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorI2luY2x1ZGUgIldlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbC5oIgogI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCiAKIFBhc3NS
ZWZQdHI8Qml0bWFwQ29udGV4dD4gY3JlYXRlQml0bWFwQ29udGV4dEZyb21XZWJWaWV3KGJvb2ws
IGJvb2wsIGJvb2wsIGJvb2wgZHJhd1NlbGVjdGlvblJlY3QpCkBAIC01NSwxMSArNTcsMTEgQEAg
UGFzc1JlZlB0cjxCaXRtYXBDb250ZXh0PiBjcmVhdGVCaXRtYXBDb250ZXh0RnJvbVdlYlZpZXco
Ym9vbCwgYm9vbCwgYm9vbCwgYm9vbAogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmIChkcmF3
U2VsZWN0aW9uUmVjdCkgewotICAgICAgICBpbnQgeCwgeSwgcmVjdFdpZHRoLCByZWN0SGVpZ2h0
OworICAgICAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0IHNlbGVjdGlvblJlY3QgPSBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmw6OnNlbGVjdGlvblJlY3RhbmdsZShtYWluRnJhbWUpOwogCi0gICAg
ICAgIGlmIChld2tfZnJhbWVfc2VsZWN0aW9uX3JlY3RhbmdsZV9nZXQobWFpbkZyYW1lLCAmeCwg
JnksICZyZWN0V2lkdGgsICZyZWN0SGVpZ2h0KSkgeworICAgICAgICBpZiAoIXNlbGVjdGlvblJl
Y3QuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjb250ZXh0
LmdldCgpLCAxLjApOwotICAgICAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNvbnRleHQuZ2V0KCks
IHgsIHksIHJlY3RXaWR0aCwgcmVjdEhlaWdodCk7CisgICAgICAgICAgICBjYWlyb19yZWN0YW5n
bGUoY29udGV4dC5nZXQoKSwgc2VsZWN0aW9uUmVjdC54KCksIHNlbGVjdGlvblJlY3QueSgpLCBz
ZWxlY3Rpb25SZWN0LndpZHRoKCksIHNlbGVjdGlvblJlY3QuaGVpZ2h0KCkpOwogICAgICAgICAg
ICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNvbnRleHQuZ2V0KCksIDEuMCwgMC4wLCAwLjAsIDEu
MCk7CiAgICAgICAgICAgICBjYWlyb19zdHJva2UoY29udGV4dC5nZXQoKSk7CiAgICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111006</attachid>
            <date>2011-10-14 06:07:37 -0700</date>
            <delta_ts>2011-10-14 07:42:39 -0700</delta_ts>
            <desc>Fifth time is a charm. Follow Kenneth&apos;s suggestions.</desc>
            <filename>bug-68458-20111014100749.patch</filename>
            <type>text/plain</type>
            <size>45896</size>
            <attacher name="Raphael Kubo da Costa (:rakuco)">rakuco</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc0NTkKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCAyYzk2NGFmZDA4MDZkN2QwYWJmYzM0ZWIwMjJjYTdjNTg0MzhmNGMyLi4wMmI2
NTQ5YTA5ODFjOTZiYzA0ZTIwNmRhOGJhNDY5NjllNTIyYTFiIDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMTAtMTQgIFJhcGhhZWwg
S3VibyBkYSBDb3N0YSAgPGt1Ym9AcHJvZnVzaW9uLm1vYmk+CisKKyAgICAgICAgW0VGTF0gQWRk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Njg0NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9lZmxzeW1ib2xzLmZpbHRlcjogRXhwb3J0
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbAorICAgICAgICBzeW1ib2xzIHNvIHRoYXQgRHVtcFJl
bmRlclRyZWUgY2FuIGxpbmsgdG8gdGhlbS4KKwogMjAxMS0xMC0xMiAgQWRhbSBCYXJ0aCAgPGFi
YXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBFTkFCTEUoWEhUTUxNUCkgYW5kIGFz
c29jaWF0ZWQgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0Vm
bC50eHQgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DTWFrZUxpc3RzRWZsLnR4dAppbmRleCBhNGRiNDA1
Njk0ODQzZjBjZTM2MzdiMDhiYjdjMTczOGI0MjcxZmI3Li4yMGQ1MzJhYzU1MTYxZTdhNDc3NDkz
OTQ1YjRhODlkNzE5MmRkZWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DTWFrZUxp
c3RzRWZsLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DTWFrZUxpc3RzRWZsLnR4dApAQCAt
MjIsNiArMjIsMTQgQEAgTElTVChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAg
ICAke1NRTElURV9JTkNMVURFX0RJUn0KICkKIAorSUYgKEVOQUJMRV9TVkcpCisgIExJU1QoQVBQ
RU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgIiR7V0VCQ09SRV9ESVJ9L3N2ZyIK
KyAgICAiJHtXRUJDT1JFX0RJUn0vc3ZnL2FuaW1hdGlvbiIKKyAgICAiJHtXRUJDT1JFX0RJUn0v
cmVuZGVyaW5nL3N2ZyIKKyAgKQorRU5ESUYgKCkKKwogSUYgKEVOQUJMRV9WSURFTykKIExJU1Qo
QVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lciIKQEAgLTU5LDYgKzY3LDcgQEAgTElTVChBUFBFTkQg
V2ViS2l0X1NPVVJDRVMKICAgICBlZmwvV2ViQ29yZVN1cHBvcnQvRGV2aWNlT3JpZW50YXRpb25D
bGllbnRFZmwuY3BwCiAgICAgZWZsL1dlYkNvcmVTdXBwb3J0L0RldmljZU1vdGlvbkNsaWVudEVm
bC5jcHAKICAgICBlZmwvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEVmbC5jcHAKKyAgICBlZmwv
V2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcAogICAgIGVmbC9XZWJD
b3JlU3VwcG9ydC9FZGl0b3JDbGllbnRFZmwuY3BwCiAgICAgZWZsL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50RWZsLmNwcAogICAgIGVmbC9XZWJDb3JlU3VwcG9ydC9GdWxsc2NyZWVu
VmlkZW9Db250cm9sbGVyRWZsLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IDU5ZWYyYzg0MjgzNzZm
MDcwNWVhZTUzYTZkMGFhOTdjNWVlODlkNDUuLjgzODY0ODlhODg4MWEzYzdhODQyMmI2N2M3YzFi
ZWRmN2RhOWY0N2QgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MSBAQAorMjAxMS0xMC0x
NCAgUmFwaGFlbCBLdWJvIGRhIENvc3RhICA8a3Vib0Bwcm9mdXNpb24ubW9iaT4KKworICAgICAg
ICBbRUZMXSBBZGQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQ1OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2xhc3MgaXMgc2ltaWxhciB0byB0aGVp
ciBjb3VudGVycGFydHMgcHJlc2VudCBpbiB0aGUgUXQgYW5kIEdUSysKKyAgICAgICAgcG9ydHMs
IGFuZCBpdCBpcyByZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIGFuIGludGVyZmFjZSB0byBjZXJ0
YWluCisgICAgICAgIFdlYkNvcmUgbWV0aG9kcyBuZWVkZWQgYnkgRHVtcFJlbmRlclRyZWUuCisK
KyAgICAgICAgKiBDTWFrZUxpc3RzRWZsLnR4dDogQ29uZGl0aW9uYWxseSBhZGQgdGhlIHN2ZyBk
aXJlY3RvcmllcyB0byB0aGUKKyAgICAgICAgaW5jbHVkZSBwYXRoLgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHA6IEFkZGVkLgorICAgICAgICAo
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwpOgorICAg
ICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjp+RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZs
KToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6YWN0aXZlQW5pbWF0aW9uc0Nv
dW50KToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y2xlYXJGcmFtZU5hbWUp
OgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpjbGVhck9wZW5lcik6CisgICAg
ICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNvdW50ZXJWYWx1ZUJ5RWxlbWVudElkKToK
KyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZnJhbWVDaGlsZHJlbik6CisgICAg
ICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmZyYW1lUGFyZW50KToKKyAgICAgICAgKER1
bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6bGF5b3V0RnJhbWUpOgorICAgICAgICAoRHVtcFJlbmRl
clRyZWVTdXBwb3J0RWZsOjpudW1iZXJPZlBhZ2VzKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbDo6bnVtYmVyT2ZQYWdlc0ZvckVsZW1lbnRJZCk6CisgICAgICAgIChEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmw6OnBhdXNlQW5pbWF0aW9uKToKKyAgICAgICAgKER1bXBSZW5kZXJU
cmVlU3VwcG9ydEVmbDo6cGF1c2VTVkdBbmltYXRpb24pOgorICAgICAgICAoRHVtcFJlbmRlclRy
ZWVTdXBwb3J0RWZsOjpwYXVzZVRyYW5zaXRpb24pOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsOjpwZW5kaW5nVW5sb2FkRXZlbnRDb3VudCk6CisgICAgICAgIChEdW1wUmVuZGVy
VHJlZVN1cHBvcnRFZmw6OnJlbmRlclRyZWVEdW1wKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbDo6cmVzcG9uc2VNaW1lVHlwZSk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmw6OnJlc3VtZUFuaW1hdGlvbnMpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsOjpzZWxlY3Rpb25SZWN0YW5nbGUpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsOjpzdWl0YWJsZURSVEZyYW1lTmFtZSk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmw6OnN1c3BlbmRBbmltYXRpb25zKToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbDo6ZmluZFN0cmluZyk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6
OmdhcmJhZ2VDb2xsZWN0b3JDb2xsZWN0KToKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbDo6Z2FyYmFnZUNvbGxlY3RvckNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZCk6CisgICAgICAg
IChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmphdmFTY3JpcHRPYmplY3RzQ291bnQpOgorICAg
ICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjp3b3JrZXJUaHJlYWRDb3VudCk6CisgICAg
ICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNoaWxkSGlzdG9yeUl0ZW1zKToKKyAgICAg
ICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6aGlzdG9yeUl0ZW1UYXJnZXQpOgorICAgICAg
ICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjppc1RhcmdldEl0ZW0pOgorICAgICAgICAoRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQpOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBld2svZXdrX2ZyYW1lLmNwcDoKKyAgICAgICAgKEVXS1ByaXZhdGU6OmNvcmVGcmFt
ZSk6IEV4cG9ydCB0aGUgV2ViQ29yZTo6RnJhbWUqIHJlbGF0ZWQgdG8gYW4KKyAgICAgICAgZXdr
X2ZyYW1lLgorICAgICAgICAqIGV3ay9ld2tfaGlzdG9yeS5jcHA6IFJlbW92ZSBmdW5jdGlvbnMg
d2hpY2ggaGF2ZSBiZWVuIG1vdmVkIHRvCisgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bC4KKyAgICAgICAgKF9ld2tfaGlzdG9yeV9pdGVtX2xpc3RfZ2V0KTogX2V3a19oaXN0b3J5X2l0
ZW1fbmV3IC0+CisgICAgICAgIGV3a19oaXN0b3J5X2l0ZW1fbmV3X2Zyb21fY29yZS4KKyAgICAg
ICAgKGV3a19oaXN0b3J5X2hpc3RvcnlfaXRlbV9iYWNrX2dldCk6IERpdHRvLgorICAgICAgICAo
ZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX2N1cnJlbnRfZ2V0KTogRGl0dG8uCisgICAgICAgIChl
d2tfaGlzdG9yeV9oaXN0b3J5X2l0ZW1fZm9yd2FyZF9nZXQpOiBEaXR0by4KKyAgICAgICAgKGV3
a19oaXN0b3J5X2hpc3RvcnlfaXRlbV9udGhfZ2V0KTogRGl0dG8uCisgICAgICAgIChld2tfaGlz
dG9yeV9pdGVtX25ldyk6IERpdHRvLgorICAgICAgICAoZXdrX2hpc3RvcnlfaXRlbV9uZXdfZnJv
bV9jb3JlKTogUmVuYW1lIGZyb20gX2V3a19oaXN0b3J5X2l0ZW1fbmV3LgorICAgICAgICAoRVdL
UHJpdmF0ZTo6Y29yZUhpc3RvcnlJdGVtKTogRXhwb3J0IHRoZSBXZWJDb3JlOjpIaXN0b3J5SXRl
bSoKKyAgICAgICAgcmVsYXRlZCB0byBhbiBFd2tfSGlzdG9yeV9JdGVtLgorICAgICAgICAqIGV3
ay9ld2tfcHJpdmF0ZS5oOiBDcmVhdGUgdGhlIEVXS1ByaXZhdGUgbmFtZXNwYWNlLCByZW1vdmUg
ZnVuY3Rpb25zCisgICAgICAgIHdoaWNoIGhhdmUgYmVlbiBtb3ZlZCB0byBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmwuCisgICAgICAgICogZXdrL2V3a191dGlsLmNwcDogUmVtb3ZlIGZ1bmN0aW9u
cyB3aGljaCBoYXZlIGJlZW4gbW92ZWQgdG8KKyAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
RWZsLgorICAgICAgICAqIGV3ay9ld2tfdmlldy5jcHA6CisgICAgICAgIChFV0tQcml2YXRlOjpj
b3JlUGFnZSk6IEV4cG9ydCB0aGUgV2ViQ29yZTo6UGFnZSogcmVsYXRlZCB0byBhbgorICAgICAg
ICBld2tfdmlldy4KKwogMjAxMS0xMC0xMyAgUmFwaGFlbCBLdWJvIGRhIENvc3RhICA8a3Vib0Bw
cm9mdXNpb24ubW9iaT4KIAogICAgICAgICBbRUZMXTogTW92ZSBmcm9tIEZpbGVDaG9vc2VyU2V0
dGluZ3MgZGVwcmVjYXRlZEFjY2VwdFR5cGUgdG8gYWNjZXB0TUlNRVR5cGVzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRF
ZmwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZGViNjFmNDIwMTlkYjhmMmQzZmE0YjdmMzVmMTcz
YmU1YTkxNmQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcApAQCAtMCwwICsxLDM4OCBAQAorLyoK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuaCIKKworI2luY2x1ZGUg
IkVXZWJLaXQuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEVmbC5oIgorI2luY2x1ZGUg
ImV3a19wcml2YXRlLmgiCisKKyNpbmNsdWRlIDxBbmltYXRpb25Db250cm9sbGVyLmg+CisjaW5j
bHVkZSA8RG9jdW1lbnRMb2FkZXIuaD4KKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8RXZh
cy5oPgorI2luY2x1ZGUgPEZpbmRPcHRpb25zLmg+CisjaW5jbHVkZSA8RmxvYXRTaXplLmg+Cisj
aW5jbHVkZSA8RnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8SW50UmVjdC5oPgorI2luY2x1ZGUgPFBy
aW50Q29udGV4dC5oPgorI2luY2x1ZGUgPFJlbmRlclRyZWVBc1RleHQuaD4KKyNpbmNsdWRlIDxT
ZXR0aW5ncy5oPgorI2luY2x1ZGUgPGJpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5oPgorI2luY2x1
ZGUgPGhpc3RvcnkvSGlzdG9yeUl0ZW0uaD4KKyNpbmNsdWRlIDx3b3JrZXJzL1dvcmtlclRocmVh
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCisjaWYgRU5BQkxFKFNW
RykKKyNpbmNsdWRlIDxTVkdEb2N1bWVudEV4dGVuc2lvbnMuaD4KKyNpbmNsdWRlIDxTVkdTTUlM
RWxlbWVudC5oPgorI2VuZGlmCisKK3Vuc2lnbmVkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6
YWN0aXZlQW5pbWF0aW9uc0NvdW50KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKK3sKKyAg
ICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUp
OworCisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBXZWJDb3JlOjpB
bmltYXRpb25Db250cm9sbGVyKiBhbmltYXRpb25Db250cm9sbGVyID0gZnJhbWUtPmFuaW1hdGlv
bigpOworCisgICAgaWYgKCFhbmltYXRpb25Db250cm9sbGVyKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldHVybiBhbmltYXRpb25Db250cm9sbGVyLT5udW1iZXJPZkFjdGl2ZUFuaW1hdGlv
bnMoZnJhbWUtPmRvY3VtZW50KCkpOworfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bDo6Y2xlYXJGcmFtZU5hbWUoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQoreworICAgIGlmIChXZWJD
b3JlOjpGcmFtZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpKQorICAg
ICAgICBmcmFtZS0+dHJlZSgpLT5jbGVhck5hbWUoKTsKK30KKwordm9pZCBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OmNsZWFyT3BlbmVyKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKK3sKKyAgICBp
ZiAoV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1l
KSkKKyAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zZXRPcGVuZXIoMCk7Cit9CisKK1N0cmluZyBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNvdW50ZXJWYWx1ZUJ5RWxlbWVudElkKGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogZWxlbWVudElkKQoreworICAgIFdlYkNv
cmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShld2tGcmFtZSk7CisKKyAg
ICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBXZWJDb3JlOjpF
bGVtZW50KiBlbGVtZW50ID0gZnJhbWUtPmRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGVsZW1l
bnRJZCk7CisKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwor
ICAgIHJldHVybiBXZWJDb3JlOjpjb3VudGVyVmFsdWVGb3JFbGVtZW50KGVsZW1lbnQpOworfQor
CitFaW5hX0xpc3QqIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZnJhbWVDaGlsZHJlbihjb25z
dCBFdmFzX09iamVjdCogZXdrRnJhbWUpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0g
RVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1lKTsKKworICAgIGlmICghZnJhbWUpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgRWluYV9MaXN0KiBjaGlsZEZyYW1lcyA9IDA7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBmcmFtZS0+dHJlZSgpLT5jaGlsZENvdW50
KCk7IGluZGV4KyspIHsKKyAgICAgICAgV2ViQ29yZTo6RnJhbWUgKmNoaWxkRnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLT5jaGlsZChpbmRleCk7CisgICAgICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xp
ZW50RWZsICpjbGllbnQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVm
bCo+KGNoaWxkRnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSk7CisKKyAgICAgICAgaWYgKCFjbGll
bnQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjaGlsZEZyYW1lcyA9IGVpbmFf
bGlzdF9hcHBlbmQoY2hpbGRGcmFtZXMsIGNsaWVudC0+d2ViRnJhbWUoKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIGNoaWxkRnJhbWVzOworfQorCitXZWJDb3JlOjpGcmFtZSogRHVtcFJlbmRlclRy
ZWVTdXBwb3J0RWZsOjpmcmFtZVBhcmVudChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCit7
CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0Zy
YW1lKTsKKworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IGZyYW1lLT50cmVlKCktPnBhcmVudCgpOworfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbDo6bGF5b3V0RnJhbWUoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQoreworICAgIFdlYkNvcmU6
OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShld2tGcmFtZSk7CisKKyAgICBp
ZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IGZyYW1lLT52aWV3KCk7CisKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAg
cmV0dXJuOworCisgICAgZnJhbWVWaWV3LT5sYXlvdXQoKTsKK30KKworaW50IER1bXBSZW5kZXJU
cmVlU3VwcG9ydEVmbDo6bnVtYmVyT2ZQYWdlcyhjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUs
IGZsb2F0IHBhZ2VXaWR0aCwgZmxvYXQgcGFnZUhlaWdodCkKK3sKKyAgICBXZWJDb3JlOjpGcmFt
ZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYgKCFm
cmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gV2ViQ29yZTo6UHJpbnRDb250
ZXh0OjpudW1iZXJPZlBhZ2VzKGZyYW1lLCBXZWJDb3JlOjpGbG9hdFNpemUocGFnZVdpZHRoLCBw
YWdlSGVpZ2h0KSk7Cit9CisKK2ludCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6Om51bWJlck9m
UGFnZXNGb3JFbGVtZW50SWQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFy
KiBlbGVtZW50SWQsIGZsb2F0IHBhZ2VXaWR0aCwgZmxvYXQgcGFnZUhlaWdodCkKK3sKKyAgICBX
ZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOwor
CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBXZWJDb3JlOjpFbGVt
ZW50ICplbGVtZW50ID0gZnJhbWUtPmRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJ
ZCk7CisKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IFdlYkNvcmU6OlByaW50Q29udGV4dDo6cGFnZU51bWJlckZvckVsZW1lbnQoZWxlbWVudCwgV2Vi
Q29yZTo6RmxvYXRTaXplKHBhZ2VXaWR0aCwgcGFnZUhlaWdodCkpOworfQorCitib29sIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbDo6cGF1c2VBbmltYXRpb24oRXZhc19PYmplY3QqIGV3a0ZyYW1l
LCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBlbGVtZW50SWQsIGRvdWJsZSB0aW1lKQor
eworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShld2tG
cmFtZSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBX
ZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50ID0gZnJhbWUtPmRvY3VtZW50KCktPmdldEVsZW1lbnRC
eUlkKGVsZW1lbnRJZCk7CisKKyAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPnJlbmRlcmVy
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBmcmFtZS0+YW5pbWF0aW9u
KCktPnBhdXNlQW5pbWF0aW9uQXRUaW1lKGVsZW1lbnQtPnJlbmRlcmVyKCksIG5hbWUsIHRpbWUp
OworfQorCitib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6cGF1c2VTVkdBbmltYXRpb24o
RXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBhbmltYXRpb25JZCwgY29uc3QgY2hh
ciogZWxlbWVudElkLCBkb3VibGUgdGltZSkKK3sKKyNpZiBFTkFCTEUoU1ZHKQorICAgIFdlYkNv
cmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShld2tGcmFtZSk7CisKKyAg
ICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJDb3JlOjpEb2N1
bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKworICAgIGlmICghZG9jdW1lbnQg
fHwgIWRvY3VtZW50LT5zdmdFeHRlbnNpb25zKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQgPSBkb2N1bWVudC0+Z2V0RWxlbWVudEJ5SWQo
YW5pbWF0aW9uSWQpOworCisgICAgaWYgKCFlbGVtZW50IHx8ICFXZWJDb3JlOjpTVkdTTUlMRWxl
bWVudDo6aXNTTUlMRWxlbWVudChlbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIGRvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnNhbXBsZUFuaW1hdGlv
bkF0VGltZShlbGVtZW50SWQsIHN0YXRpY19jYXN0PFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50Kj4o
ZWxlbWVudCksIHRpbWUpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwor
Ym9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnBhdXNlVHJhbnNpdGlvbihFdmFzX09iamVj
dCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIGVsZW1lbnRJZCwgZG91
YmxlIHRpbWUpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29y
ZUZyYW1lKGV3a0ZyYW1lKTsKKworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+
Z2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsKKworICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVu
dC0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGZyYW1l
LT5hbmltYXRpb24oKS0+cGF1c2VUcmFuc2l0aW9uQXRUaW1lKGVsZW1lbnQtPnJlbmRlcmVyKCks
IG5hbWUsIHRpbWUpOworfQorCit1bnNpZ25lZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnBl
bmRpbmdVbmxvYWRFdmVudENvdW50KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKK3sKKyAg
ICBpZiAoV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0Zy
YW1lKSkKKyAgICAgICAgcmV0dXJuIGZyYW1lLT5kb21XaW5kb3coKS0+cGVuZGluZ1VubG9hZEV2
ZW50TGlzdGVuZXJzKCk7CisKKyAgICByZXR1cm4gMDsKK30KKworU3RyaW5nIER1bXBSZW5kZXJU
cmVlU3VwcG9ydEVmbDo6cmVuZGVyVHJlZUR1bXAoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQorewor
ICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShld2tGcmFt
ZSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBX
ZWJDb3JlOjpGcmFtZVZpZXcgKmZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCk7CisKKyAgICBpZiAo
ZnJhbWVWaWV3ICYmIGZyYW1lVmlldy0+bGF5b3V0UGVuZGluZygpKQorICAgICAgICBmcmFtZVZp
ZXctPmxheW91dCgpOworCisgICAgcmV0dXJuIFdlYkNvcmU6OmV4dGVybmFsUmVwcmVzZW50YXRp
b24oZnJhbWUpOworfQorCitTdHJpbmcgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpyZXNwb25z
ZU1pbWVUeXBlKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKK3sKKyAgICBXZWJDb3JlOjpG
cmFtZSogZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYg
KCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgV2ViQ29yZTo6RG9jdW1l
bnRMb2FkZXIgKmRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRl
cigpOworCisgICAgaWYgKCFkb2N1bWVudExvYWRlcikKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworCisgICAgcmV0dXJuIGRvY3VtZW50TG9hZGVyLT5yZXNwb25zZU1JTUVUeXBlKCk7Cit9CisK
K3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpyZXN1bWVBbmltYXRpb25zKEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBFV0tQcml2YXRl
Ojpjb3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlciAqYW5pbWF0aW9uQ29udHJvbGxl
ciA9IGZyYW1lLT5hbmltYXRpb24oKTsKKyAgICBpZiAoYW5pbWF0aW9uQ29udHJvbGxlcikKKyAg
ICAgICAgYW5pbWF0aW9uQ29udHJvbGxlci0+cmVzdW1lQW5pbWF0aW9ucygpOworfQorCitXZWJD
b3JlOjpJbnRSZWN0IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2VsZWN0aW9uUmVjdGFuZ2xl
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJh
bWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYgKCFmcmFtZSkK
KyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkludFJlY3QoKTsKKworICAgIHJldHVybiBlbmNsb3Np
bmdJbnRSZWN0KGZyYW1lLT5zZWxlY3Rpb24oKS0+Ym91bmRzKCkpOworfQorCisvLyBDb21wYXJl
IHdpdGggIldlYktpdC9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUu
bW0KK1N0cmluZyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJhbWVOYW1l
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJh
bWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUoZXdrRnJhbWUpOworCisgICAgaWYgKCFmcmFtZSkK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgY29uc3QgU3RyaW5nIGZyYW1lTmFtZShl
d2tfZnJhbWVfbmFtZV9nZXQoZXdrRnJhbWUpKTsKKworICAgIGlmIChld2tGcmFtZSA9PSBld2tf
dmlld19mcmFtZV9tYWluX2dldChld2tfZnJhbWVfdmlld19nZXQoZXdrRnJhbWUpKSkgeworICAg
ICAgICBpZiAoIWZyYW1lTmFtZS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5n
KCJtYWluIGZyYW1lIFwiIikgKyBmcmFtZU5hbWUgKyBTdHJpbmcoIlwiIik7CisKKyAgICAgICAg
cmV0dXJuIFN0cmluZygibWFpbiBmcmFtZSIpOworICAgIH0KKworICAgIGlmICghZnJhbWVOYW1l
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygiZnJhbWUgXCIiKSArIGZyYW1lTmFt
ZSArIFN0cmluZygiXCIiKTsKKworICAgIHJldHVybiBTdHJpbmcoImZyYW1lIChhbm9ueW1vdXMp
Iik7Cit9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzdXNwZW5kQW5pbWF0aW9u
cyhFdmFzX09iamVjdCogZXdrRnJhbWUpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0g
RVdLUHJpdmF0ZTo6Y29yZUZyYW1lKGV3a0ZyYW1lKTsKKworICAgIGlmICghZnJhbWUpCisgICAg
ICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXIgKmFuaW1hdGlv
bkNvbnRyb2xsZXIgPSBmcmFtZS0+YW5pbWF0aW9uKCk7CisgICAgaWYgKGFuaW1hdGlvbkNvbnRy
b2xsZXIpCisgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXItPnN1c3BlbmRBbmltYXRpb25zKCk7
Cit9CisKK2Jvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpmaW5kU3RyaW5nKGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB0ZXh0LCBXZWJDb3JlOjpGaW5kT3B0aW9u
cyBvcHRpb25zKQoreworICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBFV0tQcml2YXRlOjpjb3Jl
UGFnZShld2tWaWV3KTsKKworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIHBhZ2UtPmZpbmRTdHJpbmcoU3RyaW5nOjpmcm9tVVRGOCh0ZXh0KSwgb3B0
aW9ucyk7Cit9CisKK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpnYXJiYWdlQ29sbGVj
dG9yQ29sbGVjdCgpCit7CisgICAgV2ViQ29yZTo6Z2NDb250cm9sbGVyKCkuZ2FyYmFnZUNvbGxl
Y3ROb3coKTsKK30KKwordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmdhcmJhZ2VDb2xs
ZWN0b3JDb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQoYm9vbCB3YWl0VW50aWxEb25lKQoreworICAg
IFdlYkNvcmU6OmdjQ29udHJvbGxlcigpLmdhcmJhZ2VDb2xsZWN0T25BbHRlcm5hdGVUaHJlYWRG
b3JEZWJ1Z2dpbmcod2FpdFVudGlsRG9uZSk7Cit9CisKK3NpemVfdCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmw6OmphdmFTY3JpcHRPYmplY3RzQ291bnQoKQoreworICAgIHJldHVybiBXZWJDb3Jl
OjpKU0RPTVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsK
K30KKwordW5zaWduZWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjp3b3JrZXJUaHJlYWRDb3Vu
dCgpCit7CisjaWYgRU5BQkxFKFdPUktFUlMpCisgICAgcmV0dXJuIFdlYkNvcmU6OldvcmtlclRo
cmVhZDo6d29ya2VyVGhyZWFkQ291bnQoKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYK
K30KKworSGlzdG9yeUl0ZW1DaGlsZHJlbk1hcCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNo
aWxkSGlzdG9yeUl0ZW1zKGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGV3a0hpc3RvcnlJdGVtKQor
eworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBoaXN0b3J5SXRlbSA9IEVXS1ByaXZhdGU6OmNv
cmVIaXN0b3J5SXRlbShld2tIaXN0b3J5SXRlbSk7CisgICAgSGlzdG9yeUl0ZW1DaGlsZHJlbk1h
cCBraWRzOworCisgICAgaWYgKCFoaXN0b3J5SXRlbSkKKyAgICAgICAgcmV0dXJuIGtpZHM7CisK
KyAgICBjb25zdCBXZWJDb3JlOjpIaXN0b3J5SXRlbVZlY3RvciYgY2hpbGRyZW4gPSBoaXN0b3J5
SXRlbS0+Y2hpbGRyZW4oKTsKKyAgICBjb25zdCB1bnNpZ25lZCBzaXplID0gY2hpbGRyZW4uc2l6
ZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAg
ICBFd2tfSGlzdG9yeV9JdGVtKiBraWQgPSBld2tfaGlzdG9yeV9pdGVtX25ld19mcm9tX2NvcmUo
Y2hpbGRyZW5baV0uZ2V0KCkpOworICAgICAgICBraWRzLnNldChEdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmw6Omhpc3RvcnlJdGVtVGFyZ2V0KGtpZCksIGtpZCk7CisgICAgfQorCisgICAgcmV0dXJu
IGtpZHM7Cit9CisKK1N0cmluZyBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6Omhpc3RvcnlJdGVt
VGFyZ2V0KGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGV3a0hpc3RvcnlJdGVtKQoreworICAgIFdl
YkNvcmU6Okhpc3RvcnlJdGVtKiBoaXN0b3J5SXRlbSA9IEVXS1ByaXZhdGU6OmNvcmVIaXN0b3J5
SXRlbShld2tIaXN0b3J5SXRlbSk7CisKKyAgICBpZiAoIWhpc3RvcnlJdGVtKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisKKyAgICByZXR1cm4gaGlzdG9yeUl0ZW0tPnRhcmdldCgpOworfQor
Citib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6aXNUYXJnZXRJdGVtKGNvbnN0IEV3a19I
aXN0b3J5X0l0ZW0qIGV3a0hpc3RvcnlJdGVtKQoreworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVt
KiBoaXN0b3J5SXRlbSA9IEVXS1ByaXZhdGU6OmNvcmVIaXN0b3J5SXRlbShld2tIaXN0b3J5SXRl
bSk7CisKKyAgICBpZiAoIWhpc3RvcnlJdGVtKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gaGlzdG9yeUl0ZW0tPmlzVGFyZ2V0SXRlbSgpOworfQorCit2b2lkIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbDo6c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKGJvb2wgZW5hYmxlKQor
eworICAgIFdlYkNvcmU6OlNldHRpbmdzOjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQoZW5hYmxl
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbC5oIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWU1NjdkNjM4MmNjNmRkOWFl
NDUxZDQzNzA1ZGQ1ZmM0OWE3NWRiNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
ZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oCkBAIC0wLDAgKzEs
NzkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0
ZW1zCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZu
ZGVmIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbF9oCisjZGVmaW5lIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbF9oCisKKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8RmluZE9wdGlvbnMuaD4K
KyNpbmNsdWRlIDxJbnRSZWN0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0IEV2
YXNfT2JqZWN0OwordHlwZWRlZiBzdHJ1Y3QgX0V3a19IaXN0b3J5X0l0ZW0gRXdrX0hpc3Rvcnlf
SXRlbTsKKwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgRXdrX0hpc3RvcnlfSXRlbSo+IEhpc3Rv
cnlJdGVtQ2hpbGRyZW5NYXA7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZyYW1lOwor
fQorCitjbGFzcyBFQVBJIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbCB7CitwdWJsaWM6CisgICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsKCkgeyB9CisKKyAgICB+RHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsKCkgeyB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgYWN0aXZlQW5pbWF0aW9uc0NvdW50
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSk7CisgICAgc3RhdGljIHZvaWQgY2xlYXJGcmFt
ZU5hbWUoRXZhc19PYmplY3QqIGV3a0ZyYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBjbGVhck9wZW5l
cihFdmFzX09iamVjdCogZXdrRnJhbWUpOworICAgIHN0YXRpYyBTdHJpbmcgY291bnRlclZhbHVl
QnlFbGVtZW50SWQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBlbGVt
ZW50SWQpOworICAgIHN0YXRpYyBFaW5hX0xpc3QqIGZyYW1lQ2hpbGRyZW4oY29uc3QgRXZhc19P
YmplY3QqIGV3a0ZyYW1lKTsKKyAgICBzdGF0aWMgV2ViQ29yZTo6RnJhbWUqIGZyYW1lUGFyZW50
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSk7CisgICAgc3RhdGljIHZvaWQgbGF5b3V0RnJh
bWUoRXZhc19PYmplY3QqIGV3a0ZyYW1lKTsKKyAgICBzdGF0aWMgaW50IG51bWJlck9mUGFnZXMo
Y29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBmbG9hdCBwYWdlV2lkdGgsIGZsb2F0IHBhZ2VI
ZWlnaHQpOworICAgIHN0YXRpYyBpbnQgbnVtYmVyT2ZQYWdlc0ZvckVsZW1lbnRJZChjb25zdCBF
dmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGVsZW1lbnRJZCwgZmxvYXQgcGFnZVdp
ZHRoLCBmbG9hdCBwYWdlSGVpZ2h0KTsKKyAgICBzdGF0aWMgYm9vbCBwYXVzZUFuaW1hdGlvbihF
dmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIGVsZW1l
bnRJZCwgZG91YmxlIHRpbWUpOworICAgIHN0YXRpYyBib29sIHBhdXNlU1ZHQW5pbWF0aW9uKEV2
YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogYW5pbWF0aW9uSWQsIGNvbnN0IGNoYXIq
IGVsZW1lbnRJZCwgZG91YmxlIHRpbWUpOworICAgIHN0YXRpYyBib29sIHBhdXNlVHJhbnNpdGlv
bihFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIGVs
ZW1lbnRJZCwgZG91YmxlIHRpbWUpOworICAgIHN0YXRpYyB1bnNpZ25lZCBwZW5kaW5nVW5sb2Fk
RXZlbnRDb3VudChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpOworICAgIHN0YXRpYyBTdHJp
bmcgcmVuZGVyVHJlZUR1bXAoRXZhc19PYmplY3QqIGV3a0ZyYW1lKTsKKyAgICBzdGF0aWMgU3Ry
aW5nIHJlc3BvbnNlTWltZVR5cGUoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKTsKKyAgICBz
dGF0aWMgdm9pZCByZXN1bWVBbmltYXRpb25zKEV2YXNfT2JqZWN0KiBld2tGcmFtZSk7CisgICAg
c3RhdGljIFdlYkNvcmU6OkludFJlY3Qgc2VsZWN0aW9uUmVjdGFuZ2xlKGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSk7CisgICAgc3RhdGljIFN0cmluZyBzdWl0YWJsZURSVEZyYW1lTmFtZShj
b25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpOworICAgIHN0YXRpYyB2b2lkIHN1c3BlbmRBbmlt
YXRpb25zKEV2YXNfT2JqZWN0KiBld2tGcmFtZSk7CisKKyAgICBzdGF0aWMgYm9vbCBmaW5kU3Ry
aW5nKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB0ZXh0LCBXZWJDb3Jl
OjpGaW5kT3B0aW9ucyk7CisKKyAgICBzdGF0aWMgdm9pZCBnYXJiYWdlQ29sbGVjdG9yQ29sbGVj
dCgpOworICAgIHN0YXRpYyB2b2lkIGdhcmJhZ2VDb2xsZWN0b3JDb2xsZWN0T25BbHRlcm5hdGVU
aHJlYWQoYm9vbCB3YWl0VW50aWxEb25lKTsKKyAgICBzdGF0aWMgc2l6ZV90IGphdmFTY3JpcHRP
YmplY3RzQ291bnQoKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgd29ya2VyVGhyZWFkQ291bnQoKTsK
KworICAgIHN0YXRpYyBIaXN0b3J5SXRlbUNoaWxkcmVuTWFwIGNoaWxkSGlzdG9yeUl0ZW1zKGNv
bnN0IEV3a19IaXN0b3J5X0l0ZW0qKTsKKyAgICBzdGF0aWMgU3RyaW5nIGhpc3RvcnlJdGVtVGFy
Z2V0KGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qKTsKKyAgICBzdGF0aWMgYm9vbCBpc1RhcmdldEl0
ZW0oY29uc3QgRXdrX0hpc3RvcnlfSXRlbSopOworCisgICAgc3RhdGljIHZvaWQgc2V0TW9ja1Nj
cm9sbGJhcnNFbmFibGVkKGJvb2wpOworfTsKKworI2VuZGlmIC8vIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNw
cCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCmluZGV4IDFiNDkyNDkyOGY1
YmE4NWM5NWIzZTM4M2Q5MzM3N2RiOTNlM2VlZTguLmRmY2ViYTJlZDJlYjkzMTQ0NmYzOTUyYTY2
YzZlMDU2YThiNDEwYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJh
bWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCkBAIC0yOSw3
ICsyOSw2IEBACiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRFZmwuaCIKLSNpbmNsdWRlICJG
cmFtZVRyZWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MQ29sbGVj
dGlvbi5oIgogI2luY2x1ZGUgIkhUTUxIZWFkRWxlbWVudC5oIgpAQCAtMTY1NiwzICsxNjU1LDEz
IEBAIHZvaWQgZXdrX2ZyYW1lX2VkaXRvcl9jbGllbnRfY29udGVudHNfY2hhbmdlZChFdmFzX09i
amVjdCogZXdrRnJhbWUpCiAgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkKTsKICAgICBld2tfdmlld19lZGl0b3JfY2xpZW50X2NvbnRlbnRzX2NoYW5nZWQoc2QtPnZp
ZXcpOwogfQorCituYW1lc3BhY2UgRVdLUHJpdmF0ZSB7CisKK1dlYkNvcmU6OkZyYW1lICpjb3Jl
RnJhbWUoY29uc3QgRXZhc19PYmplY3QgKmV3a0ZyYW1lKQoreworICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7CisgICAgcmV0dXJuIHNkLT5mcmFtZTsKK30K
KworfSAvLyBuYW1lc3BhY2UgRVdLUHJpdmF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a19oaXN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaGlzdG9y
eS5jcHAKaW5kZXggMDZlMjM2OTQ5OWRkNTlhOGMxOTlmMjJjMWQyODhjYzVhMmU2OThmNS4uODFm
NjBjNTAzYWEyYWY4Mjg3MTNiNGI5ODJjMDY1MmQ2NjI2NzJlYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX2hpc3RvcnkuY3BwCkBAIC03MywyOCArNzMsNiBAQCBzdHJ1Y3QgX0V3a19IaXN0b3J5
X0l0ZW0gewogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGNvcmVfID0gKGl0ZW0p
LT5jb3JlCiAKLQotc3RhdGljIGlubGluZSBFd2tfSGlzdG9yeV9JdGVtKiBfZXdrX2hpc3Rvcnlf
aXRlbV9uZXcoV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGNvcmUpCi17Ci0gICAgRXdrX0hpc3Rvcnlf
SXRlbSogaXRlbTsKLQotICAgIGlmICghY29yZSkgewotICAgICAgICBFUlIoIldlYkNvcmU6Okhp
c3RvcnlJdGVtIGlzIE5VTEwuIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGl0
ZW0gPSBzdGF0aWNfY2FzdDxFd2tfSGlzdG9yeV9JdGVtKj4oY2FsbG9jKDEsIHNpemVvZihFd2tf
SGlzdG9yeV9JdGVtKSkpOwotICAgIGlmICghaXRlbSkgewotICAgICAgICBDUklUSUNBTCgiQ291
bGQgbm90IGFsbG9jYXRlIGl0ZW0gbWVtb3J5LiIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0KLSAgICBjb3JlLT5yZWYoKTsKLSAgICBpdGVtLT5jb3JlID0gY29yZTsKLQotICAgIHJldHVy
biBpdGVtOwotfQotCiBzdGF0aWMgaW5saW5lIEVpbmFfTGlzdCogX2V3a19oaXN0b3J5X2l0ZW1f
bGlzdF9nZXQoY29uc3QgV2ViQ29yZTo6SGlzdG9yeUl0ZW1WZWN0b3ImIGNvcmVJdGVtcykKIHsK
ICAgICBFaW5hX0xpc3QqIHJldCA9IDA7CkBAIC0xMDIsNyArODAsNyBAQCBzdGF0aWMgaW5saW5l
IEVpbmFfTGlzdCogX2V3a19oaXN0b3J5X2l0ZW1fbGlzdF9nZXQoY29uc3QgV2ViQ29yZTo6SGlz
dG9yeUl0ZW1WZQogCiAgICAgc2l6ZSA9IGNvcmVJdGVtcy5zaXplKCk7CiAgICAgZm9yIChpID0g
MDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtID0gX2V3
a19oaXN0b3J5X2l0ZW1fbmV3KGNvcmVJdGVtc1tpXS5nZXQoKSk7CisgICAgICAgIEV3a19IaXN0
b3J5X0l0ZW0qIGl0ZW0gPSBld2tfaGlzdG9yeV9pdGVtX25ld19mcm9tX2NvcmUoY29yZUl0ZW1z
W2ldLmdldCgpKTsKICAgICAgICAgaWYgKGl0ZW0pCiAgICAgICAgICAgICByZXQgPSBlaW5hX2xp
c3RfYXBwZW5kKHJldCwgaXRlbSk7CiAgICAgfQpAQCAtMTQ3LDcgKzEyNSw3IEBAIEVpbmFfQm9v
bCBld2tfaGlzdG9yeV9oaXN0b3J5X2l0ZW1fc2V0KEV3a19IaXN0b3J5KiBoaXN0b3J5LCBjb25z
dCBFd2tfSGlzdG9yeV9JCiBFd2tfSGlzdG9yeV9JdGVtKiBld2tfaGlzdG9yeV9oaXN0b3J5X2l0
ZW1fYmFja19nZXQoY29uc3QgRXdrX0hpc3RvcnkqIGhpc3RvcnkpCiB7CiAgICAgRVdLX0hJU1RP
UllfQ09SRV9HRVRfT1JfUkVUVVJOKGhpc3RvcnksIGNvcmUsIDApOwotICAgIHJldHVybiBfZXdr
X2hpc3RvcnlfaXRlbV9uZXcoY29yZS0+YmFja0l0ZW0oKSk7CisgICAgcmV0dXJuIGV3a19oaXN0
b3J5X2l0ZW1fbmV3X2Zyb21fY29yZShjb3JlLT5iYWNrSXRlbSgpKTsKIH0KIAogRXdrX0hpc3Rv
cnlfSXRlbSogZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX2N1cnJlbnRfZ2V0KGNvbnN0IEV3a19I
aXN0b3J5KiBoaXN0b3J5KQpAQCAtMTU1LDIwICsxMzMsMjAgQEAgRXdrX0hpc3RvcnlfSXRlbSog
ZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX2N1cnJlbnRfZ2V0KGNvbnN0IEV3a19IaXN0b3J5KiBo
aXN0b3IKICAgICBFV0tfSElTVE9SWV9DT1JFX0dFVF9PUl9SRVRVUk4oaGlzdG9yeSwgY29yZSwg
MCk7CiAgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtID0gY29yZS0+Y3VycmVu
dEl0ZW0oKTsKICAgICBpZiAoY3VycmVudEl0ZW0pCi0gICAgICAgIHJldHVybiBfZXdrX2hpc3Rv
cnlfaXRlbV9uZXcoY3VycmVudEl0ZW0pOworICAgICAgICByZXR1cm4gZXdrX2hpc3RvcnlfaXRl
bV9uZXdfZnJvbV9jb3JlKGN1cnJlbnRJdGVtKTsKICAgICByZXR1cm4gMDsKIH0KIAogRXdrX0hp
c3RvcnlfSXRlbSogZXdrX2hpc3RvcnlfaGlzdG9yeV9pdGVtX2ZvcndhcmRfZ2V0KGNvbnN0IEV3
a19IaXN0b3J5KiBoaXN0b3J5KQogewogICAgIEVXS19ISVNUT1JZX0NPUkVfR0VUX09SX1JFVFVS
TihoaXN0b3J5LCBjb3JlLCAwKTsKLSAgICByZXR1cm4gX2V3a19oaXN0b3J5X2l0ZW1fbmV3KGNv
cmUtPmZvcndhcmRJdGVtKCkpOworICAgIHJldHVybiBld2tfaGlzdG9yeV9pdGVtX25ld19mcm9t
X2NvcmUoY29yZS0+Zm9yd2FyZEl0ZW0oKSk7CiB9CiAKIEV3a19IaXN0b3J5X0l0ZW0qIGV3a19o
aXN0b3J5X2hpc3RvcnlfaXRlbV9udGhfZ2V0KGNvbnN0IEV3a19IaXN0b3J5KiBoaXN0b3J5LCBp
bnQgaW5kZXgpCiB7CiAgICAgRVdLX0hJU1RPUllfQ09SRV9HRVRfT1JfUkVUVVJOKGhpc3Rvcnks
IGNvcmUsIDApOwotICAgIHJldHVybiBfZXdrX2hpc3RvcnlfaXRlbV9uZXcoY29yZS0+aXRlbUF0
SW5kZXgoaW5kZXgpKTsKKyAgICByZXR1cm4gZXdrX2hpc3RvcnlfaXRlbV9uZXdfZnJvbV9jb3Jl
KGNvcmUtPml0ZW1BdEluZGV4KGluZGV4KSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfaGlzdG9yeV9o
aXN0b3J5X2l0ZW1fY29udGFpbnMoY29uc3QgRXdrX0hpc3RvcnkqIGhpc3RvcnksIGNvbnN0IEV3
a19IaXN0b3J5X0l0ZW0qIGl0ZW0pCkBAIC0yMzcsMTIgKzIxNSwzMyBAQCBFaW5hX0Jvb2wgZXdr
X2hpc3RvcnlfbGltaXRfc2V0KGNvbnN0IEV3a19IaXN0b3J5KiBoaXN0b3J5LCBpbnQgbGltaXQp
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAorRXdrX0hpc3RvcnlfSXRlbSogZXdrX2hpc3Rv
cnlfaXRlbV9uZXdfZnJvbV9jb3JlKFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBjb3JlKQoreworICAg
IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW07CisKKyAgICBpZiAoIWNvcmUpIHsKKyAgICAgICAgRVJS
KCJXZWJDb3JlOjpIaXN0b3J5SXRlbSBpcyBOVUxMLiIpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKyAgICBpdGVtID0gKEV3a19IaXN0b3J5X0l0ZW0qKWNhbGxvYygxLCBzaXplb2YoRXdr
X0hpc3RvcnlfSXRlbSkpOworICAgIGlmICghaXRlbSkgeworICAgICAgICBDUklUSUNBTCgiQ291
bGQgbm90IGFsbG9jYXRlIGl0ZW0gbWVtb3J5LiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBjb3JlLT5yZWYoKTsKKyAgICBpdGVtLT5jb3JlID0gY29yZTsKKworICAgIHJldHVy
biBpdGVtOworfQorCiBFd2tfSGlzdG9yeV9JdGVtKiBld2tfaGlzdG9yeV9pdGVtX25ldyhjb25z
dCBjaGFyKiB1cmksIGNvbnN0IGNoYXIqIHRpdGxlKQogewogICAgIFdURjo6U3RyaW5nIHUgPSBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodXJpKTsKICAgICBXVEY6OlN0cmluZyB0ID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHRpdGxlKTsKICAgICBXVEY6OlJlZlB0cjxXZWJDb3JlOjpIaXN0b3J5SXRl
bT4gY29yZSA9IFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpjcmVhdGUodSwgdCwgMCk7Ci0gICAgRXdr
X0hpc3RvcnlfSXRlbSogaXRlbSA9IF9ld2tfaGlzdG9yeV9pdGVtX25ldyhjb3JlLnJlbGVhc2Uo
KS5yZWxlYXNlUmVmKCkpOworICAgIEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0gPSBld2tfaGlzdG9y
eV9pdGVtX25ld19mcm9tX2NvcmUoY29yZS5yZWxlYXNlKCkucmVsZWFzZVJlZigpKTsKICAgICBy
ZXR1cm4gaXRlbTsKIH0KIApAQCAtNDEwLDUxICs0MDksMTIgQEAgdm9pZCBld2tfaGlzdG9yeV9m
cmVlKEV3a19IaXN0b3J5KiBoaXN0b3J5KQogICAgIGZyZWUoaGlzdG9yeSk7CiB9CiAKLS8qKgot
ICogQGludGVybmFsCi0gKgotICogUmV0dXJucyBhIG5ld2x5LWFsbG9jYXRlZCBzdHJpbmcgd2l0
aCB0aGUgaXRlbSdzIHRhcmdldCBuYW1lLgotICogQ2FsbGVycyBhcmUgcmVzcG9uc2libGUgZm9y
IGZyZWVpbmcgdGhlIGFsbG9jYXRlZCBtZW1vcnkgd2l0aCBmcmVlKDMpLgotICoKLSAqIEBwYXJh
bSBpdGVtIGluc3RhbmNlIHRvIG9wZXJhdGUgdXBvbi4KLSAqLwotY2hhciogZXdrX2hpc3Rvcnlf
aXRlbV90YXJnZXRfZ2V0KGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0pCi17Ci0gICAgRVdL
X0hJU1RPUllfSVRFTV9DT1JFX0dFVF9PUl9SRVRVUk4oaXRlbSwgY29yZSwgMCk7Ci0gICAgcmV0
dXJuIHN0cmR1cChjb3JlLT50YXJnZXQoKS51dGY4KCkuZGF0YSgpKTsKLX0KK25hbWVzcGFjZSBF
V0tQcml2YXRlIHsKIAotLyoqCi0gKiBAaW50ZXJuYWwKLSAqCi0gKiBSZXR1cm5zIHdoZXRoZXIg
dGhlIGdpdmVuIGl0ZW0gaXMgY3VycmVudGx5IGEgdGFyZ2V0LgotICoKLSAqIEBwYXJhbSBpdGVt
IGluc3RhbmNlIHRvIGNoZWNrLgotICovCi1FaW5hX0Jvb2wgZXdrX2hpc3RvcnlfaXRlbV90YXJn
ZXRfaXMoY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSkKK1dlYkNvcmU6Okhpc3RvcnlJdGVt
KiBjb3JlSGlzdG9yeUl0ZW0oY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogZXdrSGlzdG9yeUl0ZW0p
CiB7Ci0gICAgRVdLX0hJU1RPUllfSVRFTV9DT1JFX0dFVF9PUl9SRVRVUk4oaXRlbSwgY29yZSwg
MCk7Ci0gICAgcmV0dXJuIGNvcmUtPmlzVGFyZ2V0SXRlbSgpOworICAgIEVXS19ISVNUT1JZX0lU
RU1fQ09SRV9HRVRfT1JfUkVUVVJOKGV3a0hpc3RvcnlJdGVtLCBjb3JlLCAwKTsKKyAgICByZXR1
cm4gY29yZTsKIH0KIAotLyoqCi0gKiBAaW50ZXJuYWwKLSAqCi0gKiBSZXR1cm5zIGEgbGlzdCBv
ZiBjaGlsZCBoaXN0b3J5IGl0ZW1zIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBpdGVtLAotICogb3Ig
QGMgTlVMTCBpZiB0aGVyZSBhcmUgbm9uZS4KLSAqCi0gKiBAcGFyYW0gaXRlbSBpbnN0YW5jZSB0
byBvcGVyYXRlIHVwb24uCi0gKi8KLUVpbmFfTGlzdCogZXdrX2hpc3RvcnlfaXRlbV9jaGlsZHJl
bl9nZXQoY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSkKLXsKLSAgICBFV0tfSElTVE9SWV9J
VEVNX0NPUkVfR0VUX09SX1JFVFVSTihpdGVtLCBjb3JlLCAwKTsKLSAgICBjb25zdCBXZWJDb3Jl
OjpIaXN0b3J5SXRlbVZlY3RvciYgY2hpbGRyZW4gPSBjb3JlLT5jaGlsZHJlbigpOwotICAgIGlm
ICghY2hpbGRyZW4uc2l6ZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEVpbmFfTGlzdCog
a2lkcyA9IDA7Ci0gICAgY29uc3QgdW5zaWduZWQgc2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBraWRzID0gZWlu
YV9saXN0X2FwcGVuZChraWRzLCBfZXdrX2hpc3RvcnlfaXRlbV9uZXcoY2hpbGRyZW5baV0uZ2V0
KCkpKTsKLSAgICByZXR1cm4ga2lkczsKLX0KK30gLy8gbmFtZXNwYWNlIEVXS1ByaXZhdGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfcHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a19wcml2YXRlLmgKaW5kZXggZTk2NmE1MzU5MDkwYzUyODIxNTVkYzgx
Njg2NmU4Y2Y2NzNlMjViYi4uY2NhYjQ5M2YyMzYxZTg2Yjk0NTg1ODllYjMwNTE4OWJjYTc0N2I3
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19wcml2YXRlLmgKKysrIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19wcml2YXRlLmgKQEAgLTc3LDYgKzc3LDE0IEBAIHN0
cnVjdCBFd2tfV2luZG93X09iamVjdF9DbGVhcmVkX0V2ZW50IHsKICAgICBFdmFzX09iamVjdCog
ZnJhbWU7CiB9OwogCituYW1lc3BhY2UgRVdLUHJpdmF0ZSB7CisKK1dlYkNvcmU6OkZyYW1lICpj
b3JlRnJhbWUoY29uc3QgRXZhc19PYmplY3QgKmV3a0ZyYW1lKTsKK1dlYkNvcmU6OlBhZ2UgKmNv
cmVQYWdlKGNvbnN0IEV2YXNfT2JqZWN0ICpld2tWaWV3KTsKK1dlYkNvcmU6Okhpc3RvcnlJdGVt
ICpjb3JlSGlzdG9yeUl0ZW0oY29uc3QgRXdrX0hpc3RvcnlfSXRlbSAqZXdrSGlzdG9yeUl0ZW0p
OworCit9IC8vIG5hbWVzcGFjZSBFV0tQcml2YXRlCisKIHZvaWQgZXdrX3ZpZXdfcmVhZHkoRXZh
c19PYmplY3QqIG8pOwogdm9pZCBld2tfdmlld19pbnB1dF9tZXRob2Rfc3RhdGVfc2V0KEV2YXNf
T2JqZWN0KiBvLCBFaW5hX0Jvb2wgYWN0aXZlKTsKIHZvaWQgZXdrX3ZpZXdfdGl0bGVfc2V0KEV2
YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiB0aXRsZSk7CkBAIC0xNDcsMjEgKzE1NSwxNSBAQCB2
b2lkIGV3a192aWV3X2pzX3dpbmRvd19vYmplY3RfY2xlYXIoRXZhc19PYmplY3QqIG8sIEV2YXNf
T2JqZWN0KiBmcmFtZSk7CiAjZW5kaWYKIAogaW50IGV3a191dGlsX2RwaV9nZXQoKTsKLXZvaWQg
ZXdrX3V0aWxfamF2YXNjcmlwdF9nY19jb2xsZWN0KCk7Ci12b2lkIGV3a191dGlsX2phdmFzY3Jp
cHRfZ2NfYWx0ZXJuYXRlX3RocmVhZF9jb2xsZWN0KEVpbmFfQm9vbCB3YWl0VW50aWxEb25lKTsK
LXVuc2lnbmVkIGV3a191dGlsX2phdmFzY3JpcHRfZ2Nfb2JqZWN0X2NvdW50X2dldCgpOwotdW5z
aWduZWQgZXdrX3V0aWxfd29ya2VyX3RocmVhZF9jb3VudCgpOwogCiAjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKIHZvaWQgZXdrX3ZpZXdfbmVlZF90b3VjaF9ldmVudHNfc2V0KEV2YXNfT2JqZWN0
KiwgYm9vbCBuZWVkZWQpOwogRWluYV9Cb29sIGV3a192aWV3X25lZWRfdG91Y2hfZXZlbnRzX2dl
dChjb25zdCBFdmFzX09iamVjdCopOwogI2VuZGlmCiAKK0V3a19IaXN0b3J5X0l0ZW0gKmV3a19o
aXN0b3J5X2l0ZW1fbmV3X2Zyb21fY29yZShXZWJDb3JlOjpIaXN0b3J5SXRlbSAqY29yZSk7CiBF
d2tfSGlzdG9yeSogZXdrX2hpc3RvcnlfbmV3KFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdEltcGwq
IGhpc3RvcnkpOwogdm9pZCBld2tfaGlzdG9yeV9mcmVlKEV3a19IaXN0b3J5KiBoaXN0b3J5KTsK
LWNoYXIqIGV3a19oaXN0b3J5X2l0ZW1fdGFyZ2V0X2dldChjb25zdCBFd2tfSGlzdG9yeV9JdGVt
KiBpdGVtKTsKLUVpbmFfQm9vbCBld2tfaGlzdG9yeV9pdGVtX3RhcmdldF9pcyhjb25zdCBFd2tf
SGlzdG9yeV9JdGVtKiBpdGVtKTsKLUVpbmFfTGlzdCogZXdrX2hpc3RvcnlfaXRlbV9jaGlsZHJl
bl9nZXQoY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSk7CiAKICNpZiBFTkFCTEUoQ09OVEVY
VF9NRU5VUykKIEV3a19Db250ZXh0X01lbnUqIGV3a19jb250ZXh0X21lbnVfbmV3KEV2YXNfT2Jq
ZWN0KiB2aWV3LCBXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a191dGlsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdXRpbC5jcHAKaW5kZXggYjdjOWZmMzlkZjgxNGMyOWI2ZWE5NmUy
MDUwMTUxMmEyNjgyZmE5OC4uNDE1YjM2ZTVlNzVkZTkxYWYyN2I0NzQ5ZmVhMDJjOWQ1ZDU3ODlm
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a191dGlsLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3V0aWwuY3BwCkBAIC0yMSw5ICsyMSw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiZXdrX3V0aWwuaCIKIAotI2luY2x1ZGUgImJpbmRp
bmdzL2pzL0dDQ29udHJvbGxlci5oIgogI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCi0jaW5jbHVk
ZSAid29ya2Vycy9Xb3JrZXJUaHJlYWQuaCIKICNpbmNsdWRlIDxlaW5hX3NhZmV0eV9jaGVja3Mu
aD4KIAogI2lmZGVmIEhBVkVfRUNPUkVfWApAQCAtMTEyLDUzICsxMTAsNiBAQCBFdmFzX09iamVj
dCogZXdrX3V0aWxfaW1hZ2VfZnJvbV9jYWlyb19zdXJmYWNlX2FkZChFdmFzKiBjYW52YXMsIGNh
aXJvX3N1cmZhY2VfdAogCiAvKioKICAqIEBpbnRlcm5hbAotICoKLSAqIFBlcmZvcm1zIGdhcmJh
Z2UgY29sbGVjdGlvbiBvZiBKYXZhU2NyaXB0IG9iamVjdHMuCi0gKi8KLXZvaWQgZXdrX3V0aWxf
amF2YXNjcmlwdF9nY19jb2xsZWN0KCkKLXsKLSAgICBXZWJDb3JlOjpnY0NvbnRyb2xsZXIoKS5n
YXJiYWdlQ29sbGVjdE5vdygpOwotfQotCi0vKioKLSAqIEBpbnRlcm5hbAotICoKLSAqIFBlcmZv
cm1zIGdhcmJhZ2UgY29sbGVjdGlvbiBvZiBKYXZhU2NyaXB0IG9iamVjdHMgaW4gYSBzZXBhcmF0
ZSB0aHJlYWQuCi0gKgotICogQHBhcmFtIHdhaXRVbnRpbERvbmUgSWYgQGMgVFJVRSwgd2FpdCB0
aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHRocmVhZCB0byBmaW5pc2g7IGlmIEBjIEZBTFNFLAotICog
cmV0dXJuIGFzIHNvb24gYXMgdGhlIHRocmVhZCBoYXMgYmVlbiBjcmVhdGVkLgotICovCi12b2lk
IGV3a191dGlsX2phdmFzY3JpcHRfZ2NfYWx0ZXJuYXRlX3RocmVhZF9jb2xsZWN0KEVpbmFfQm9v
bCB3YWl0VW50aWxEb25lKQotewotICAgIFdlYkNvcmU6OmdjQ29udHJvbGxlcigpLmdhcmJhZ2VD
b2xsZWN0T25BbHRlcm5hdGVUaHJlYWRGb3JEZWJ1Z2dpbmcod2FpdFVudGlsRG9uZSk7Ci19Ci0K
LS8qKgotICogQGludGVybmFsCi0gKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGN1cnJlbnQg
SmF2YVNjcmlwdCBvYmplY3RzLgotICovCi11bnNpZ25lZCBld2tfdXRpbF9qYXZhc2NyaXB0X2dj
X29iamVjdF9jb3VudF9nZXQoKQotewotICAgIHJldHVybiBXZWJDb3JlOjpKU0RPTVdpbmRvdzo6
Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsKLX0KLQotLyoqCi0gKiBA
aW50ZXJuYWwKLSAqCi0gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY3VycmVudCB3b3JrZWQgdGhy
ZWFkcy4KLSAqLwotdW5zaWduZWQgZXdrX3V0aWxfd29ya2VyX3RocmVhZF9jb3VudCgpCi17Ci0j
aWYgRU5BQkxFKFdPUktFUlMpCi0gICAgcmV0dXJuIFdlYkNvcmU6OldvcmtlclRocmVhZDo6d29y
a2VyVGhyZWFkQ291bnQoKTsKLSNlbHNlCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotLyoq
Ci0gKiBAaW50ZXJuYWwKICAqIEdldHMgZHBpIHZhbHVlLgogICoKICAqIEByZXR1cm4gZGV2aWNl
J3MgZHBpIHZhbHVlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3
LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKaW5kZXggMzAyNDM4M2Ux
NTUwNDEwNjdlNzNjNzJlMzNlY2RiODY4ODJlNTJmYi4uOGZiZDJjN2M4MmQ1N2YyYTA2OGU1Mzk2
MWQ1MDRkNzI0ZTMyZmUyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCkBAIC0zODQ1
LDMgKzM4NDUsMTQgQEAgdm9pZCBld2tfdmlld19lZGl0b3JfY2xpZW50X2NvbnRlbnRzX2NoYW5n
ZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJh
Y2tfY2FsbChld2tWaWV3LCAiZWRpdG9yY2xpZW50LGNvbnRlbnRzLGNoYW5nZWQiLCAwKTsKIH0K
KworbmFtZXNwYWNlIEVXS1ByaXZhdGUgeworCitXZWJDb3JlOjpQYWdlICpjb3JlUGFnZShjb25z
dCBFdmFzX09iamVjdCAqZXdrVmlldykKK3sKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYsIDApOworICAgIHJldHVybiBwcml2LT5wYWdlOworfQorCit9IC8vIG5hbWVzcGFjZSBFV0tQ
cml2YXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvZWZsc3ltYm9scy5maWx0ZXIgYi9Tb3Vy
Y2UvY21ha2UvZWZsc3ltYm9scy5maWx0ZXIKaW5kZXggMzU2YTAwYzVjNmFhZGM2YWY0ZmUyZTYy
NzcxZTBjY2I5NWE4MTQ3ZS4uMmJjYjNjZWQ4YmQ5MDZiOGQ3NDVmYjQ4MmFmZDY0OWViMzE1Nzg4
YSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL2VmbHN5bWJvbHMuZmlsdGVyCisrKyBiL1NvdXJj
ZS9jbWFrZS9lZmxzeW1ib2xzLmZpbHRlcgpAQCAtMSw2ICsxLDExIEBACiB7CiAgICAgICAgIGds
b2JhbDoKICAgICAgICAgICAgICAgICBld2tfKjsKKworICAgICAgICAgICAgICAgIGV4dGVybiAi
QysrIiB7CisgICAgICAgICAgICAgICAgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbCo7
CisgICAgICAgICAgICAgICAgfTsKKwogICAgICAgICBsb2NhbDoKICAgICAgICAgICAgICAgICAq
OwogfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCBiMDA4Mzc2OTgxOWEzNTE0MzZhZjQ5NDBjYTg0N2FmNzg0ZmNhNmFmLi45MWU2ZDExMjJjMTA0
ZDA4YzQ2OTNkNjY5MjRjOTdkNzNiNTk1NThjIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMTAtMTQgIFJhcGhh
ZWwgS3VibyBkYSBDb3N0YSAgPGt1Ym9AcHJvZnVzaW9uLm1vYmk+CisKKyAgICAgICAgW0VGTF0g
QWRkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg0NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNYWtlIHRoZSBjYWxscyBpbiBEdW1wUmVuZGVyVHJlZSB1c2Ug
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZs
L0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlQ2hyb21l
Ojppbml0aWFsaXplKTogVHVybiBvbiBtb2NrIHNjcm9sbGJhcnMuCisgICAgICAgIChEdW1wUmVu
ZGVyVHJlZUNocm9tZTo6cmVzZXREZWZhdWx0c1RvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAg
IChEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25XaW5kb3dPYmplY3RDbGVhcmVkKToKKyAgICAgICAg
KER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbkRvY3VtZW50TG9hZEZpbmlzaGVkKToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9lZmwvR0NDb250cm9sbGVyRWZsLmNwcDoKKyAgICAgICAgKEdDQ29u
dHJvbGxlcjo6Y29sbGVjdCk6CisgICAgICAgIChHQ0NvbnRyb2xsZXI6OmNvbGxlY3RPbkFsdGVy
bmF0ZVRocmVhZCk6CisgICAgICAgIChHQ0NvbnRyb2xsZXI6OmdldEpTT2JqZWN0Q291bnQpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHA6
CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y291bnRlclZhbHVlRm9yRWxlbWVudEJ5
SWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VOdW1iZXJGb3JFbGVtZW50
QnlJZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZQYWdlcyk6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6d29ya2VyVGhyZWFkQ291bnQpOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZpbmRTdHJpbmcpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKToKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnRX
aXRoSWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNhbXBsZVNWR0FuaW1hdGlv
bkZvckVsZW1lbnRBdFRpbWUpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Om51bWJl
ck9mQWN0aXZlQW5pbWF0aW9ucyk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3Vz
cGVuZEFuaW1hdGlvbnMpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlc3VtZUFu
aW1hdGlvbnMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9QaXhlbER1bXBTdXBwb3J0
RWZsLmNwcDoKKyAgICAgICAgKGNyZWF0ZUJpdG1hcENvbnRleHRGcm9tV2ViVmlldyk6CisKIDIw
MTEtMTAtMTMgIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNYWtl
IGZpbHRlci1idWlsZC13ZWJraXQgZXhpdCAxIGlmIHRoZSBidWlsZCBmYWlscy4KZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZUNocm9tZS5jcHAgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVDaHJvbWUuY3BwCmluZGV4IDVj
ZjEzNWU0YmVkYWIwZmE0OWNhNzA3ODdhN2MyNWNlMDcwYzdlNWIuLjA3ODUzOWUwMDRjY2QzNjMx
YmViMGU0N2Y2NGNiYjJhNjQyOWY4MmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2VmbC9EdW1wUmVuZGVyVHJlZUNocm9tZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
ZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNwcApAQCAtMTA4LDYgKzEwOCw4IEBAIHZvaWQgRHVt
cFJlbmRlclRyZWVDaHJvbWU6OnJlbW92ZVdpbmRvdyhFdmFzX09iamVjdCogdmlldykKIAogYm9v
bCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6aW5pdGlhbGl6ZSgpCiB7CisgICAgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0RWZsOjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQodHJ1ZSk7CisKICAgICBtX21h
aW5WaWV3ID0gY3JlYXRlVmlldygpOwogICAgIGlmICghbV9tYWluVmlldykKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMTgzLDggKzE4NSw4IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6
OnJlc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXMoKQogICAgIGV3a19jb29raWVzX2NsZWFy
KCk7CiAgICAgZXdrX2Nvb2tpZXNfcG9saWN5X3NldChFV0tfQ09PS0lFX0pBUl9BQ0NFUFRfTk9f
VEhJUkRfUEFSVFkpOwogCi0gICAgZXdrX2ZyYW1lX25hbWVfY2xlYXIobWFpbkZyYW1lKCkpOwot
ICAgIGV3a19mcmFtZV9vcGVuZXJfY2xlYXIobWFpbkZyYW1lKCkpOworICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydEVmbDo6Y2xlYXJGcmFtZU5hbWUobWFpbkZyYW1lKCkpOworICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbDo6Y2xlYXJPcGVuZXIobWFpbkZyYW1lKCkpOwogfQogCiAvLyBTbWFy
dCBDYWxsYmFja3MKQEAgLTIwOCw3ICsyMTAsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21l
OjpvbldpbmRvd09iamVjdENsZWFyZWQodm9pZCogdXNlckRhdGEsIEV2YXNfT2JqZWN0Kiwgdgog
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjb250cm9sbGVyTmFtZShKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiZXZlbnRTZW5kZXIiKSk7CiAgICAgSlNPYmplY3RTZXRQcm9wZXJ0
eShvYmplY3RDbGVhcmVkSW5mby0+Y29udGV4dCwgb2JqZWN0Q2xlYXJlZEluZm8tPndpbmRvd09i
amVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJOYW1lLmdldCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgbWFrZUV2ZW50U2VuZGVyKG9iamVjdENsZWFyZWRJbmZvLT5j
b250ZXh0LCBmYWxzZSksIC8vIEZJWE1FOiBzL2ZhbHNlLyFnZXRfcGFyZW50Ly4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1ha2VFdmVudFNlbmRlcihvYmplY3RDbGVhcmVkSW5mby0+Y29udGV4
dCwgIUR1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZnJhbWVQYXJlbnQob2JqZWN0Q2xlYXJlZElu
Zm8tPmZyYW1lKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCAwKTsKIH0KIApAQCAt
MjcwLDEyICsyNzIsMTIgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25UaXRsZUNoYW5n
ZWQodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopCiB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21l
OjpvbkRvY3VtZW50TG9hZEZpbmlzaGVkKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50
SW5mbykKIHsKICAgICBjb25zdCBFdmFzX09iamVjdCogZnJhbWUgPSBzdGF0aWNfY2FzdDxFdmFz
X09iamVjdCo+KGV2ZW50SW5mbyk7Ci0gICAgY29uc3QgU3RyaW5nIGZyYW1lTmFtZShld2tfZnJh
bWVfc3VpdGFibGVfZHJ0X25hbWVfZ2V0KGZyYW1lKSk7CisgICAgY29uc3QgU3RyaW5nIGZyYW1l
TmFtZShEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJhbWVOYW1lKGZyYW1l
KSk7CiAKICAgICBpZiAoIWRvbmUgJiYgZ0xheW91dFRlc3RDb250cm9sbGVyLT5kdW1wRnJhbWVM
b2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHByaW50ZigiJXMgLSBkaWRGaW5pc2hEb2N1bWVudExv
YWRGb3JGcmFtZVxuIiwgZnJhbWVOYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgIGVsc2UgaWYgKCFk
b25lKSB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHBlbmRpbmdGcmFtZVVubG9hZEV2ZW50cyA9
IGV3a19mcmFtZV9wZW5kaW5nX3VubG9hZF9ldmVudF9jb3VudF9nZXQoZnJhbWUpOworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMgPSBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OnBlbmRpbmdVbmxvYWRFdmVudENvdW50KGZyYW1lKTsKICAgICAgICAgaWYg
KHBlbmRpbmdGcmFtZVVubG9hZEV2ZW50cykKICAgICAgICAgICAgIHByaW50ZigiJXMgLSBoYXMg
JXUgb251bmxvYWQgaGFuZGxlcihzKVxuIiwgZnJhbWVOYW1lLnV0ZjgoKS5kYXRhKCksIHBlbmRp
bmdGcmFtZVVubG9hZEV2ZW50cyk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvZWZsL0dDQ29udHJvbGxlckVmbC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwv
R0NDb250cm9sbGVyRWZsLmNwcAppbmRleCBmMzg1MmYxZmI0ZDJiZGVmYzk5MmE5YzJhNTVjNTI2
MDQ4NmRhMzQ3Li4xZjU1YTVjZTYwODhiNWVmOGFjYWZjYjI3ZGU1ZWFiZTE0YjZjMTNmIDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvR0NDb250cm9sbGVyRWZsLmNwcAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvR0NDb250cm9sbGVyRWZsLmNwcApAQCAtMzAsMTkg
KzMwLDIwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgi
CiAKKyNpbmNsdWRlICJXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuaCIK
ICNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgogCiB2b2lkIEdDQ29udHJvbGxlcjo6Y29sbGVjdCgp
IGNvbnN0CiB7Ci0gICAgZXdrX3V0aWxfamF2YXNjcmlwdF9nY19jb2xsZWN0KCk7CisgICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsOjpnYXJiYWdlQ29sbGVjdG9yQ29sbGVjdCgpOwogfQogCiB2
b2lkIEdDQ29udHJvbGxlcjo6Y29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKGJvb2wgd2FpdFVudGls
RG9uZSkgY29uc3QKIHsKLSAgICBld2tfdXRpbF9qYXZhc2NyaXB0X2djX2FsdGVybmF0ZV90aHJl
YWRfY29sbGVjdCh3YWl0VW50aWxEb25lKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6
OmdhcmJhZ2VDb2xsZWN0b3JDb2xsZWN0T25BbHRlcm5hdGVUaHJlYWQod2FpdFVudGlsRG9uZSk7
CiB9CiAKIHNpemVfdCBHQ0NvbnRyb2xsZXI6OmdldEpTT2JqZWN0Q291bnQoKSBjb25zdAogewot
ICAgIHJldHVybiBld2tfdXRpbF9qYXZhc2NyaXB0X2djX29iamVjdF9jb3VudF9nZXQoKTsKKyAg
ICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50
KCk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENv
bnRyb2xsZXJFZmwuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250
cm9sbGVyRWZsLmNwcAppbmRleCBlOTllZDI1YzY1ZGJiZmZmM2EzZjA0Njg5YTdiYWViYzFmYjdm
M2RjLi45MWRkNmU1OWRlZjQzNmNlNDJlYjMxNjdiNTM0MjU0ZTk1M2U5MjQ1IDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAK
QEAgLTM3LDkgKzM3LDEwIEBACiAjaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKIAog
I2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVDaHJv
bWUuaCIKICNpbmNsdWRlICJKU1N0cmluZ1V0aWxzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbmNsdWRlICJPd25GYXN0TWFsbG9jUHRyLmgiCisjaW5jbHVkZSAiV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgi
CiAjaW5jbHVkZSAiV29ya1F1ZXVlSXRlbS5oIgogI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCkBA
IC00OSw2ICs1MCw3IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcGFxdWVKU1N0cmluZy5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPGVkaXRpbmcvRmlu
ZE9wdGlvbnMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogCiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
fkxheW91dFRlc3RDb250cm9sbGVyKCkKQEAgLTkwLDggKzkyLDkgQEAgdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZGlzcGxheSgpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y291bnRlclZhbHVlRm9yRWxlbWVudEJ5SWQoSlNTdHJpbmdSZWYgaWQp
CiB7Ci0gICAgT3duRmFzdE1hbGxvY1B0cjxjaGFyPiBjb3VudGVyVmFsdWUoZXdrX2ZyYW1lX2Nv
dW50ZXJfdmFsdWVfYnlfZWxlbWVudF9pZF9nZXQoYnJvd3Nlci0+bWFpbkZyYW1lKCksIGlkLT51
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpOwotICAgIHJldHVybiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4oQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvdW50ZXJWYWx1ZS5n
ZXQoKSkpOworICAgIGNvbnN0IEV2YXNfT2JqZWN0KiBtYWluRnJhbWUgPSBicm93c2VyLT5tYWlu
RnJhbWUoKTsKKyAgICBjb25zdCBTdHJpbmcgY291bnRlclZhbHVlKER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbDo6Y291bnRlclZhbHVlQnlFbGVtZW50SWQobWFpbkZyYW1lLCBpZC0+dXN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpKTsKKyAgICByZXR1cm4gSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KEFk
b3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb3VudGVyVmFsdWUudXRmOCgpLmRh
dGEoKSkpOwogfQogCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjprZWVwV2ViSGlzdG9yeSgp
CkBAIC0xMTksMTIgKzEyMiwxMiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmxheWVyVHJlZUFzVGV4dCgpIGNvbnN0CiAKIGludCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6cGFnZU51bWJlckZvckVsZW1lbnRCeUlkKEpTU3RyaW5nUmVmIGlkLCBmbG9hdCBw
YWdlV2lkdGgsIGZsb2F0IHBhZ2VIZWlnaHQpCiB7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9wYWdl
X251bWJlcl9ieV9lbGVtZW50X2lkX2dldChicm93c2VyLT5tYWluRnJhbWUoKSwgaWQtPnVzdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpOworICAgIHJldHVybiBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6Om51bWJlck9mUGFnZXNGb3JFbGVtZW50SWQoYnJvd3Nl
ci0+bWFpbkZyYW1lKCksIGlkLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgcGFnZVdpZHRoLCBw
YWdlSGVpZ2h0KTsKIH0KIAogaW50IExheW91dFRlc3RDb250cm9sbGVyOjpudW1iZXJPZlBhZ2Vz
KGZsb2F0IHBhZ2VXaWR0aCwgZmxvYXQgcGFnZUhlaWdodCkKIHsKLSAgICByZXR1cm4gZXdrX2Zy
YW1lX3BhZ2VfbnVtYmVyX2dldChicm93c2VyLT5tYWluRnJhbWUoKSwgcGFnZVdpZHRoLCBwYWdl
SGVpZ2h0KTsKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpudW1iZXJPZlBh
Z2VzKGJyb3dzZXItPm1haW5GcmFtZSgpLCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpOwogfQogCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VQcm9wZXJ0
eShjb25zdCBjaGFyKiwgaW50KSBjb25zdApAQCAtMTU2LDcgKzE1OSw3IEBAIHNpemVfdCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgpCiAKIHVuc2lnbmVkIExheW91
dFRlc3RDb250cm9sbGVyOjp3b3JrZXJUaHJlYWRDb3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGV3a191dGlsX3dvcmtlcl90aHJlYWRfY291bnQoKTsKKyAgICByZXR1cm4gRHVtcFJlbmRlclRy
ZWVTdXBwb3J0RWZsOjp3b3JrZXJUaHJlYWRDb3VudCgpOwogfQogCiB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpub3RpZnlEb25lKCkKQEAgLTQ1MywxMCArNDU2LDkgQEAgYm9vbCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNTdHJpbmdS
ZWYgdGFyZ2V0LAogICAgIGlmICghSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVl
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1
ZTsKLSAgICBib29sIGZvcndhcmQgPSB0cnVlOwotICAgIGJvb2wgd3JhcCA9IGZhbHNlOwotICAg
IHNpemVfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KEpTVmFsdWVUb051bWJlcihjb250
ZXh0LCBsZW5ndGhWYWx1ZSwgMCkpOworICAgIFdlYkNvcmU6OkZpbmRPcHRpb25zIG9wdGlvbnMg
PSAwOworCisgICAgY29uc3Qgc2l6ZV90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4oSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNP
YmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0FycmF5LCBpLCAwKTsKICAg
ICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQpAQCAtNDY1LDE0ICs0
NjcsMjAgQEAgYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZmluZFN0cmluZyhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNTdHJpbmdSZWYgdGFyZ2V0LAogICAgICAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gb3B0aW9uTmFtZShBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2
YWx1ZSwgMCkpOwogCiAgICAgICAgIGlmIChlcXVhbHMob3B0aW9uTmFtZSwgIkNhc2VJbnNlbnNp
dGl2ZSIpKQotICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZSA9IGZhbHNlOworICAgICAgICAgICAg
b3B0aW9ucyB8PSBXZWJDb3JlOjpDYXNlSW5zZW5zaXRpdmU7CisgICAgICAgIGVsc2UgaWYgKGVx
dWFscyhvcHRpb25OYW1lLCAiQXRXb3JkU3RhcnRzIikpCisgICAgICAgICAgICBvcHRpb25zIHw9
IFdlYkNvcmU6OkF0V29yZFN0YXJ0czsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxzKG9wdGlvbk5h
bWUsICJUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydCIpKQorICAgICAgICAgICAgb3B0aW9u
cyB8PSBXZWJDb3JlOjpUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydDsKICAgICAgICAgZWxz
ZSBpZiAoZXF1YWxzKG9wdGlvbk5hbWUsICJCYWNrd2FyZHMiKSkKLSAgICAgICAgICAgIGZvcndh
cmQgPSBmYWxzZTsKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6QmFja3dhcmRzOwog
ICAgICAgICBlbHNlIGlmIChlcXVhbHMob3B0aW9uTmFtZSwgIldyYXBBcm91bmQiKSkKLSAgICAg
ICAgICAgIHdyYXAgPSB0cnVlOworICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpXcmFw
QXJvdW5kOworICAgICAgICBlbHNlIGlmIChlcXVhbHMob3B0aW9uTmFtZSwgIlN0YXJ0SW5TZWxl
Y3Rpb24iKSkKKyAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6U3RhcnRJblNlbGVjdGlv
bjsKICAgICB9CiAKLSAgICByZXR1cm4gISFld2tfdmlld190ZXh0X3NlYXJjaChicm93c2VyLT5t
YWluVmlldygpLCB0YXJnZXQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBjYXNlU2Vuc2l0aXZl
LCBmb3J3YXJkLCB3cmFwKTsKKyAgICByZXR1cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpm
aW5kU3RyaW5nKGJyb3dzZXItPm1haW5WaWV3KCksIHRhcmdldC0+dXN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIG9wdGlvbnMpOwogfQogCiBib29sIExheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1h
bmRFbmFibGVkKEpTU3RyaW5nUmVmIG5hbWUpCkBAIC01OTMsMzIgKzYwMSwzMiBAQCB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcg
bG9uZyBzaXplKQogCiBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0
VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGlt
ZSwgSlNTdHJpbmdSZWYgZWxlbWVudElkKQogewotICAgIHJldHVybiBld2tfZnJhbWVfYW5pbWF0
aW9uX3BhdXNlKGJyb3dzZXItPm1haW5GcmFtZSgpLCBhbmltYXRpb25OYW1lLT51c3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwgZWxlbWVudElkLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGltZSk7
CisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6cGF1c2VBbmltYXRpb24oYnJv
d3Nlci0+bWFpbkZyYW1lKCksIGFuaW1hdGlvbk5hbWUtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgp
LCBlbGVtZW50SWQtPnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0aW1lKTsKIH0KIAogYm9vbCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50V2l0aElk
KEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgZG91YmxlIHRpbWUsIEpTU3RyaW5nUmVmIGVsZW1l
bnRJZCkKIHsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3RyYW5zaXRpb25fcGF1c2UoYnJvd3Nlci0+
bWFpbkZyYW1lKCksIHByb3BlcnR5TmFtZS0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVsZW1l
bnRJZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRpbWUpOworICAgIHJldHVybiBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmw6OnBhdXNlVHJhbnNpdGlvbihicm93c2VyLT5tYWluRnJhbWUoKSwg
cHJvcGVydHlOYW1lLT51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZWxlbWVudElkLT51c3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgdGltZSk7CiB9CiAKIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNhbXBsZVNWR0FuaW1hdGlvbkZvckVsZW1lbnRBdFRpbWUoSlNTdHJpbmdSZWYgYW5pbWF0aW9u
SWQsIGRvdWJsZSB0aW1lLCBKU1N0cmluZ1JlZiBlbGVtZW50SWQpCiB7Ci0gICAgcmV0dXJuIGV3
a19mcmFtZV9zdmdfYW5pbWF0aW9uX3BhdXNlKGJyb3dzZXItPm1haW5GcmFtZSgpLCBhbmltYXRp
b25JZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGVsZW1lbnRJZC0+dXN0cmluZygpLnV0Zjgo
KS5kYXRhKCksIHRpbWUpOworICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnBh
dXNlU1ZHQW5pbWF0aW9uKGJyb3dzZXItPm1haW5GcmFtZSgpLCBhbmltYXRpb25JZC0+dXN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCksIGVsZW1lbnRJZC0+dXN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRp
bWUpOwogfQogCiB1bnNpZ25lZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2FuaW1hdGlvbl9hY3Rp
dmVfbnVtYmVyX2dldChicm93c2VyLT5tYWluRnJhbWUoKSk7CisgICAgcmV0dXJuIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbDo6YWN0aXZlQW5pbWF0aW9uc0NvdW50KGJyb3dzZXItPm1haW5GcmFt
ZSgpKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnMo
KSBjb25zdAogewotICAgIGV3a19mcmFtZV9hbmltYXRpb25fc3VzcGVuZChicm93c2VyLT5tYWlu
RnJhbWUoKSk7CisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzdXNwZW5kQW5pbWF0aW9u
cyhicm93c2VyLT5tYWluRnJhbWUoKSk7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnJlc3VtZUFuaW1hdGlvbnMoKSBjb25zdAogewotICAgIGV3a19mcmFtZV9hbmltYXRpb25fcmVz
dW1lKGJyb3dzZXItPm1haW5GcmFtZSgpKTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6
OnJlc3VtZUFuaW1hdGlvbnMoYnJvd3Nlci0+bWFpbkZyYW1lKCkpOwogfQogCiB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpvdmVycmlkZVByZWZlcmVuY2UoSlNTdHJpbmdSZWYsIEpTU3RyaW5n
UmVmKQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL1BpeGVsRHVtcFN1cHBv
cnRFZmwuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL1BpeGVsRHVtcFN1cHBvcnRFZmwu
Y3BwCmluZGV4IDMwZTYxNzA4MGRhZWQ4OTQ4ZGEzYWViMjllOWVhMzQxY2FlNzIwNjQuLjEwOTM3
NGVjOTJhZmNiNWM3ZDdkMjEwYjdkNjUxOGQwYjU1NzllMWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2VmbC9QaXhlbER1bXBTdXBwb3J0RWZsLmNwcAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9lZmwvUGl4ZWxEdW1wU3VwcG9ydEVmbC5jcHAKQEAgLTMzLDggKzMzLDEwIEBA
CiAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVl
Q2hyb21lLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBpeGVsRHVtcFN1cHBv
cnRDYWlyby5oIgogI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisjaW5jbHVkZSAiV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmgiCiAjaW5jbHVkZSAiZXdrX3ByaXZhdGUu
aCIKIAogUGFzc1JlZlB0cjxCaXRtYXBDb250ZXh0PiBjcmVhdGVCaXRtYXBDb250ZXh0RnJvbVdl
YlZpZXcoYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCBkcmF3U2VsZWN0aW9uUmVjdCkKQEAgLTU1LDEx
ICs1NywxMSBAQCBQYXNzUmVmUHRyPEJpdG1hcENvbnRleHQ+IGNyZWF0ZUJpdG1hcENvbnRleHRG
cm9tV2ViVmlldyhib29sLCBib29sLCBib29sLCBib29sCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgaWYgKGRyYXdTZWxlY3Rpb25SZWN0KSB7Ci0gICAgICAgIGludCB4LCB5LCByZWN0V2lkdGgs
IHJlY3RIZWlnaHQ7CisgICAgICAgIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qgc2VsZWN0aW9uUmVj
dCA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2VsZWN0aW9uUmVjdGFuZ2xlKG1haW5GcmFt
ZSk7CiAKLSAgICAgICAgaWYgKGV3a19mcmFtZV9zZWxlY3Rpb25fcmVjdGFuZ2xlX2dldChtYWlu
RnJhbWUsICZ4LCAmeSwgJnJlY3RXaWR0aCwgJnJlY3RIZWlnaHQpKSB7CisgICAgICAgIGlmICgh
c2VsZWN0aW9uUmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNhaXJvX3NldF9saW5lX3dp
ZHRoKGNvbnRleHQuZ2V0KCksIDEuMCk7Ci0gICAgICAgICAgICBjYWlyb19yZWN0YW5nbGUoY29u
dGV4dC5nZXQoKSwgeCwgeSwgcmVjdFdpZHRoLCByZWN0SGVpZ2h0KTsKKyAgICAgICAgICAgIGNh
aXJvX3JlY3RhbmdsZShjb250ZXh0LmdldCgpLCBzZWxlY3Rpb25SZWN0LngoKSwgc2VsZWN0aW9u
UmVjdC55KCksIHNlbGVjdGlvblJlY3Qud2lkdGgoKSwgc2VsZWN0aW9uUmVjdC5oZWlnaHQoKSk7
CiAgICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY29udGV4dC5nZXQoKSwgMS4wLCAw
LjAsIDAuMCwgMS4wKTsKICAgICAgICAgICAgIGNhaXJvX3N0cm9rZShjb250ZXh0LmdldCgpKTsK
ICAgICAgICAgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>