<?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>120092</bug_id>
          
          <creation_ts>2013-08-20 14:50:35 -0700</creation_ts>
          <short_desc>[Windows] Refactor WebFrame to compose with WebFrameLoaderClient (rather than subclass)</short_desc>
          <delta_ts>2013-08-26 12:23:58 -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 Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>119964</blocked>
    
    <blocked>120323</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>andersca</cc>
    
    <cc>bfulgham</cc>
    
    <cc>kling</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>919245</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-08-20 14:50:35 -0700</bug_when>
    <thetext>Implementing the changes for Bug 119964 under Windows is difficult, because the WebFrame class is a subclass of WebFrameloaderClient. This makes it difficult to move the creation of the WebFrame to a separate step in the loading process, because Windows expects this object to already exist at the time the loading operations are done.

To make this a little easier, this first patch will refactor WebFrame to be more like the other ports by moving the WebFrameLoaderClient logic out of WebFrame, and simply having WebFrame use a loader object to do the work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920326</commentid>
    <comment_count>1</comment_count>
      <attachid>209481</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-08-23 11:43:39 -0700</bug_when>
    <thetext>Created attachment 209481
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920327</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-08-23 11:44:58 -0700</bug_when>
    <thetext>&lt;rdar://problem/14821436&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920329</commentid>
    <comment_count>3</comment_count>
      <attachid>209481</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-08-23 11:50:55 -0700</bug_when>
    <thetext>Comment on attachment 209481
Patch

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

&gt; Source/WebKit/win/WebFramePolicyListener.cpp:125
&gt; +        static_cast&lt;WebFrameLoaderClient*&gt;(&amp;frame-&gt;loader().client())-&gt;receivedPolicyDecision(action);

I think you can just cast to WebFrameLoaderClient&amp; here.

&gt; Source/WebKit/win/WebCoreSupport/WebFrameLoaderClient.h:205
&gt; +    WebFramePolicyListenerPrivate* m_policyListenerPrivate;

I think this can be an OwnPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>920367</commentid>
    <comment_count>4</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-08-23 12:30:26 -0700</bug_when>
    <thetext>Committed r154508: &lt;http://trac.webkit.org/changeset/154508&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209481</attachid>
            <date>2013-08-23 11:43:39 -0700</date>
            <delta_ts>2013-08-23 11:50:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-120092-20130823114345.patch</filename>
            <type>text/plain</type>
            <size>72296</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDUwMSkKKysrIFNvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBAQAorMjAxMy0wOC0y
MyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luZG93
c10gUmVmYWN0b3IgV2ViRnJhbWUgdG8gY29tcG9zZSB3aXRoIFdlYkZyYW1lTG9hZGVyQ2xpZW50
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjAwOTIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXZpc2Ug
V2ViRnJhbWUgaW1wbGVtZW50YXRpb24gb24gV2luZG93cyB0byBubyBsb25nZXIgc3ViY2xhc3Mg
ZnJvbQorICAgICAgICBXZWJGcmFtZUxvYWRlckNsaWVudCwgaW5zdGVhZCB1c2luZyBhIGZ1bGx5
LWZ1bmN0aW9uYWwgV2ViRnJhbWVMb2FkZXJDbGllbnQKKyAgICAgICAgYXMgYSBoZWxwZXIgb2Jq
ZWN0IHRvIHBlcmZvcm0gdGhlIHRhc2tzLCBhcyBpcyBkb25lIGluIHRoZSBvdGhlcgorICAgICAg
ICBwb3J0cy4gVGhpcyBpcyBhIHN0ZXAgdG93YXJkcyBjb21wbGV0aW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTk5NjQuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6IEFkZCBhIG5ldyAncHJpdmF0
ZSBkYXRhJworICAgICAgICBvYmplY3QgdG8gaG91c2UgdGhlIHBvbGljeSBkZWxlZ2F0ZSBhbmQg
ZnVuY3Rpb24uCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6V2ViRnJhbWVQb2xpY3lM
aXN0ZW5lclByaXZhdGU6OldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcml2YXRlKToKKyAgICAgICAg
Q3JlYXRlIHRoZSBuZXcgcHJpdmF0ZSBkYXRhIG9iamVjdC4KKyAgICAgICAgKFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJpdmF0ZTo6fldlYkZyYW1lUG9saWN5
TGlzdGVuZXJQcml2YXRlKToKKyAgICAgICAgRGVzdHJveSB0aGUgbmV3IHByaXZhdGUgZGF0YSBv
YmplY3QuCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6V2ViRnJhbWVMb2FkZXJDbGll
bnQpOiBNb3ZlZCBmcm9tIFdlYkZyYW1lLmNwcAorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmZyYW1lTG9hZGVyRGVzdHJveWVkKTogRGl0dG8KKyAgICAgICAgKFdlYkZyYW1lTG9hZGVy
Q2xpZW50OjptYWtlUmVwcmVzZW50YXRpb24pOiBEaXR0bworICAgICAgICAoV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OmZvcmNlTGF5b3V0Rm9yTm9uSFRNTCk6IERpdHRvCisgICAgICAgIChXZWJGcmFt
ZUxvYWRlckNsaWVudDo6c2V0Q29waWVzT25TY3JvbGwpOiBEaXR0bworICAgICAgICAoV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OmRldGFjaGVkRnJvbVBhcmVudDIpOiBEaXR0bworICAgICAgICAoV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmRldGFjaGVkRnJvbVBhcmVudDMpOiBEaXR0bworICAgICAgICAo
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZCk6
IERpdHRvCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRMb2FkUmVz
b3VyY2VGcm9tTWVtb3J5Q2FjaGUpOiBEaXR0bworICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmRpc3BhdGNoRGlkRmFpbFByb3Zpc2lvbmFsTG9hZCk6IERpdHRvCisgICAgICAgIChXZWJG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGYWlsTG9hZCk6IERpdHRvCisgICAgICAgIChX
ZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JSZXNwb25zZSk6IERp
dHRvCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lG
b3JOZXdXaW5kb3dBY3Rpb24pOiBEaXR0bworICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbik6IERpdHRvCisgICAgICAg
IChXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hVbmFibGVUb0ltcGxlbWVudFBvbGljeSk6
IERpdHRvCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsU2VuZFN1
Ym1pdEV2ZW50KTogRGl0dG8KKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRj
aFdpbGxTdWJtaXRGb3JtKTogRGl0dG8KKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpz
dGFydERvd25sb2FkKTogRGl0dG8KKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp3aWxs
Q2hhbmdlVGl0bGUpOiBEaXR0bworICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZENo
YW5nZVRpdGxlKTogRGl0dG8KKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5jZWxs
ZWRFcnJvcik6IERpdHRvCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6YmxvY2tlZEVy
cm9yKTogRGl0dG8KKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5ub3RTaG93VVJM
RXJyb3IpOiBEaXR0bworICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmludGVycnVwdGVk
Rm9yUG9saWN5Q2hhbmdlRXJyb3IpOiBEaXR0bworICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmNhbm5vdFNob3dNSU1FVHlwZUVycm9yKTogRGl0dG8KKyAgICAgICAgKFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpmaWxlRG9lc05vdEV4aXN0RXJyb3IpOiBEaXR0bworICAgICAgICAoV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OnBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IpOiBEaXR0bworICAgICAg
ICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNob3VsZEZhbGxCYWNrKTogRGl0dG8KKyAgICAgICAg
KFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5IYW5kbGVSZXF1ZXN0KTogRGl0dG8KKyAgICAgICAg
KFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5TaG93TUlNRVR5cGUpOiBEaXR0bworICAgICAgICAo
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNhblNob3dNSU1FVHlwZUFzSFRNTCk6IERpdHRvCisgICAg
ICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVwcmVzZW50YXRpb25FeGlzdHNGb3JVUkxTY2hl
bWUpOiBEaXR0bworICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmdlbmVyYXRlZE1JTUVU
eXBlRm9yVVJMU2NoZW1lKTogRGl0dG8KKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpm
cmFtZUxvYWRDb21wbGV0ZWQpOiBEaXR0bworICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OnNhdmVWaWV3U3RhdGVUb0l0ZW0pOiBEaXR0bworICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OnJlc3RvcmVWaWV3U3RhdGUpOiBEaXR0bworICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OnByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOiBEaXR0bworICAgICAgICAoV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OmRpZEZpbmlzaExvYWQpOiBEaXR0bworICAgICAgICAoV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OnByZXBhcmVGb3JEYXRhU291cmNlUmVwbGFjZW1lbnQpOiBEaXR0bworICAgICAgICAo
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OnVzZXJBZ2VudCk6IERpdHRvCisgICAgICAgIChXZWJGcmFt
ZUxvYWRlckNsaWVudDo6b2JqZWN0Q29udGVudFR5cGUpOiBEaXR0bworICAgICAgICAoV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQpOiBEaXR0bworICAgICAgICAo
V2ViRnJhbWVMb2FkZXJDbGllbnQ6Om92ZXJyaWRlTWVkaWFUeXBlKTogRGl0dG8KKyAgICAgICAg
KFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpkb2N1bWVudEVsZW1lbnRBdmFpbGFibGUpOiBEaXR0bwor
ICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmpl
Y3RJbldvcmxkKTogRGl0dG8KKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZWdpc3Rl
ckZvckljb25Ob3RpZmljYXRpb24pOiBEaXR0bworICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmRpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24pOiBEaXR0bworICAgICAgICAoV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmNyZWF0ZU5ldHdvcmtpbmdDb250ZXh0KTogRGl0dG8KKyAgICAgICAgKFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpzaG91bGRBbHdheXNVc2VQbHVnaW5Eb2N1bWVudCk6IERpdHRv
CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6cmV2ZXJ0VG9Qcm92aXNpb25hbFN0YXRl
KTogRGl0dG8KKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzZXRNYWluRnJhbWVEb2N1
bWVudFJlYWR5KTogRGl0dG8KKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5jZWxQ
b2xpY3lDaGVjayk6IERpdHRvCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6c2V0VXBQ
b2xpY3lMaXN0ZW5lcik6IERpdHRvCisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVj
ZWl2ZWRQb2xpY3lEZWNpc2lvbik6IERpdHRvCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp3ZWJG
cmFtZSk6IEFkZCBhY2Nlc3NvciBtZXRob2QKKyAgICAgICAgKiBXZWJEYXRhU291cmNlLmNwcDoK
KyAgICAgICAgKFdlYkRhdGFTb3VyY2U6OnJlcHJlc2VudGF0aW9uKTogTG9hZGVyIGNsaWVudCBp
cyBub3cKKyAgICAgICAgYSBXZWJGcmFtZUxvYWRlckNsaWVudCAobm90IGEgV2ViRnJhbWUpLgor
ICAgICAgICAoV2ViRGF0YVNvdXJjZTo6d2ViRnJhbWUpOiBEaXR0bworICAgICAgICAqIFdlYkVs
ZW1lbnRQcm9wZXJ0eUJhZy5jcHA6CisgICAgICAgIChXZWJFbGVtZW50UHJvcGVydHlCYWc6OlJl
YWQpOiBMb2FkZXIgY2xpZW50IGlzIG5vdworICAgICAgICBhIFdlYkZyYW1lTG9hZGVyQ2xpZW50
IChub3QgYSBXZWJGcmFtZSkKKyAgICAgICAgKiBXZWJGcmFtZS5jcHA6CisgICAgICAgIChraXQp
OiBSZXZpc2UgZm9yIFdlYkZyYW1lTG9hZGVyQ2xpZW50IHVzZS4KKyAgICAgICAgKFdlYkZyYW1l
OjpXZWJGcmFtZVByaXZhdGU6OldlYkZyYW1lUHJpdmF0ZSk6IFJlbW92ZQorICAgICAgICBXZWJG
cmFtZVBvbGljeUxpc3RlbmVyIGFuZCBGcmFtZVBvbGljeUZ1bmN0aW9uLCBzaW5jZQorICAgICAg
ICB0aGV5IGFyZSBubyBsb25nZXIgbmVlZGVkIGhlcmUuIFRoZXkgd2VyZSBtb3ZlZCB0bworICAg
ICAgICB0aGUgV2ViRnJhbWVMb2FkZXJDbGllbnQgb2JqZWN0LgorICAgICAgICAoV2ViRnJhbWU6
OldlYkZyYW1lKTogTm8gbG9uZ2VyIGluaGVyaXRpbmcgZnJvbQorICAgICAgICBXZWJGcmFtZVBv
bGljeUxpc3RlbmVyLgorICAgICAgICAoV2ViRnJhbWU6OmluaXQpOiBGcmFtZTo6Y3JlYXRlIG5v
dyBuZWVkcyB0byBiZSBzdXBwbGllZAorICAgICAgICB3aXRoIGEgbmV3IFdlYkZyYW1lUG9saWN5
TGlzdGVuZXIsIHJhdGhlciB0aGFuICd0aGlzJworICAgICAgICAqIFdlYkZyYW1lLmg6CisgICAg
ICAgICogV2ViRnJhbWVQb2xpY3lMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJGcmFtZVBvbGlj
eUxpc3RlbmVyOjpyZWNlaXZlZFBvbGljeURlY2lzaW9uKTogTG9hZGVyCisgICAgICAgIGNsaWVu
dCBpcyBub3cgYSBXZWJGcmFtZVBvbGljeUNsaWVudCwgbm90IGEgV2ViRnJhbWUuCisKIDIwMTMt
MDgtMjIgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEFub3Ro
ZXIgV2luZG93cyBidWlsZCBmaXguCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJEYXRhU291
cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJEYXRhU291cmNlLmNw
cAkocmV2aXNpb24gMTU0NDU3KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViRGF0YVNvdXJjZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IldlYkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiV2ViRXJyb3IuaCIKICNpbmNsdWRlICJX
ZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAi
V2ViS2l0LmgiCiAjaW5jbHVkZSAiV2ViSFRNTFJlcHJlc2VudGF0aW9uLmgiCiAjaW5jbHVkZSAi
V2ViS2l0U3RhdGlzdGljc1ByaXZhdGUuaCIKQEAgLTE4NCwxMiArMTg1LDExIEBAIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgV2ViRGF0YVNvdXJjZToKICAgICByZXR1cm4gTWVtb3J5U3RyZWFt
OjpjcmVhdGVJbnN0YW5jZShidWZmZXIgPyBidWZmZXItPnNoYXJlZEJ1ZmZlcigpIDogMCkuY29w
eVJlZlRvKHN0cmVhbSk7CiB9CiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRGF0YVNv
dXJjZTo6cmVwcmVzZW50YXRpb24oIAotICAgIC8qIFtyZXR2YWxdW291dF0gKi8gSVdlYkRvY3Vt
ZW50UmVwcmVzZW50YXRpb24qKiByZXApCitIUkVTVUxUIFdlYkRhdGFTb3VyY2U6OnJlcHJlc2Vu
dGF0aW9uKC8qIFtyZXR2YWxdW291dF0gKi8gSVdlYkRvY3VtZW50UmVwcmVzZW50YXRpb24qKiBy
ZXApCiB7CiAgICAgSFJFU1VMVCBociA9IFNfT0s7CiAgICAgaWYgKCFtX3JlcHJlc2VudGF0aW9u
KSB7Ci0gICAgICAgIFdlYkhUTUxSZXByZXNlbnRhdGlvbiogaHRtbFJlcCA9IFdlYkhUTUxSZXBy
ZXNlbnRhdGlvbjo6Y3JlYXRlSW5zdGFuY2Uoc3RhdGljX2Nhc3Q8V2ViRnJhbWUqPigmbV9sb2Fk
ZXItPmZyYW1lTG9hZGVyKCktPmNsaWVudCgpKSk7CisgICAgICAgIFdlYkhUTUxSZXByZXNlbnRh
dGlvbiogaHRtbFJlcCA9IFdlYkhUTUxSZXByZXNlbnRhdGlvbjo6Y3JlYXRlSW5zdGFuY2Uoc3Rh
dGljX2Nhc3Q8V2ViRnJhbWVMb2FkZXJDbGllbnQmPihtX2xvYWRlci0+ZnJhbWVMb2FkZXIoKS0+
Y2xpZW50KCkpLndlYkZyYW1lKCkpOwogICAgICAgICBociA9IGh0bWxSZXAtPlF1ZXJ5SW50ZXJm
YWNlKElJRF9JV2ViRG9jdW1lbnRSZXByZXNlbnRhdGlvbiwgKHZvaWQqKikgJm1fcmVwcmVzZW50
YXRpb24pOwogICAgICAgICBodG1sUmVwLT5SZWxlYXNlKCk7CiAgICAgfQpAQCAtMTk3LDEwICsx
OTcsOSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkRhdGFTb3VyY2U6CiAgICAgcmV0
dXJuIG1fcmVwcmVzZW50YXRpb24uY29weVJlZlRvKHJlcCk7CiB9CiAKLUhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgV2ViRGF0YVNvdXJjZTo6d2ViRnJhbWUoIAotICAgIC8qIFtyZXR2YWxdW291
dF0gKi8gSVdlYkZyYW1lKiogZnJhbWUpCitIUkVTVUxUIFdlYkRhdGFTb3VyY2U6OndlYkZyYW1l
KC8qIFtyZXR2YWxdW291dF0gKi8gSVdlYkZyYW1lKiogZnJhbWUpCiB7Ci0gICAgKmZyYW1lID0g
c3RhdGljX2Nhc3Q8V2ViRnJhbWUqPigmbV9sb2FkZXItPmZyYW1lTG9hZGVyKCktPmNsaWVudCgp
KTsKKyAgICAqZnJhbWUgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZUxvYWRlckNsaWVudCY+KG1fbG9h
ZGVyLT5mcmFtZUxvYWRlcigpLT5jbGllbnQoKSkud2ViRnJhbWUoKTsKICAgICAoKmZyYW1lKS0+
QWRkUmVmKCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJFbGVtZW50UHJvcGVydHlCYWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2lu
L1dlYkVsZW1lbnRQcm9wZXJ0eUJhZy5jcHAJKHJldmlzaW9uIDE1NDQ1NykKKysrIFNvdXJjZS9X
ZWJLaXQvd2luL1dlYkVsZW1lbnRQcm9wZXJ0eUJhZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMTMgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIk1hcnNoYWxsaW5nSGVscGVycy5oIgog
I2luY2x1ZGUgIkRPTUNvcmVDbGFzc2VzLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNs
dWRlICJXZWJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IaXRUZXN0
UmVzdWx0Lmg+CkBAIC0xMDksNyArMTEwLDcgQEAgc3RhdGljIEhSRVNVTFQgY29udmVydFN0cmlu
Z1RvVmFyaWFudChWQQogfQogCiAKLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRWxlbWVu
dFByb3BlcnR5QmFnOjpSZWFkKExQQ09MRVNUUiBwc3pQcm9wTmFtZSwgVkFSSUFOVCAqcFZhciwg
SUVycm9yTG9nICogLypwRXJyb3JMb2cqLykKK0hSRVNVTFQgV2ViRWxlbWVudFByb3BlcnR5QmFn
OjpSZWFkKExQQ09MRVNUUiBwc3pQcm9wTmFtZSwgVkFSSUFOVCAqcFZhciwgSUVycm9yTG9nICog
LypwRXJyb3JMb2cqLykKIHsKICAgICBpZiAoIXBzelByb3BOYW1lKQogICAgICAgICByZXR1cm4g
RV9QT0lOVEVSOwpAQCAtMTI5LDcgKzEzMCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
V2ViRWxlbWVudFByb3AKICAgICAgICAgICAgJiYgbV9yZXN1bHQtPmlubmVyTm9uU2hhcmVkTm9k
ZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpKSkKICAgICAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAg
ICAgICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBtX3Jlc3VsdC0+aW5uZXJOb25TaGFyZWROb2RlKCkt
PmRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IHN0YXRp
Y19jYXN0PFdlYkZyYW1lKj4oJmNvcmVGcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkpOworICAgICAg
ICBXZWJGcmFtZSogd2ViRnJhbWUgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZUxvYWRlckNsaWVudCY+
KGNvcmVGcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkpLndlYkZyYW1lKCk7CiAgICAgICAgIElXZWJG
cmFtZSogaVdlYkZyYW1lOwogICAgICAgICBpZiAoRkFJTEVEKHdlYkZyYW1lLT5RdWVyeUludGVy
ZmFjZShJSURfSVdlYkZyYW1lLCAodm9pZCoqKSZpV2ViRnJhbWUpKSkKICAgICAgICAgICAgIHJl
dHVybiBFX0ZBSUw7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAxNTQ0NTcp
CisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDYgQEAKICNpbmNsdWRlICJDRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZy5oIgogI2luY2x1
ZGUgIkNPTVByb3BlcnR5QmFnLmgiCiAjaW5jbHVkZSAiRE9NQ29yZUNsYXNzZXMuaCIKLSNpbmNs
dWRlICJEZWZhdWx0UG9saWN5RGVsZWdhdGUuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVs
ZW1lbnQuaCIKICNpbmNsdWRlICJNYXJzaGFsbGluZ0hlbHBlcnMuaCIKICNpbmNsdWRlICJXZWJB
Y3Rpb25Qcm9wZXJ0eUJhZy5oIgpAQCAtNDEsNyArNDAsNyBAQAogI2luY2x1ZGUgIldlYkRvd25s
b2FkLmgiCiAjaW5jbHVkZSAiV2ViRWRpdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViRXJyb3Iu
aCIKLSNpbmNsdWRlICJXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2Vi
RnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyLmgi
CiAjaW5jbHVkZSAiV2ViSGlzdG9yeS5oIgogI2luY2x1ZGUgIldlYkhpc3RvcnlJdGVtLmgiCkBA
IC0xNTYsNyArMTU1LDcgQEAgV2ViRnJhbWUqIGtpdChGcmFtZSogZnJhbWUpCiAKICAgICAvLyBG
SVhNRTogRG9lc24ndCB0aGlzIG5lZWQgdG8gYmUgYXdhcmUgb2YgRW1wdHlGcmFtZUxvYWRlckNs
aWVudD8KICAgICBGcmFtZUxvYWRlckNsaWVudCYgZnJhbWVMb2FkZXJDbGllbnQgPSBmcmFtZS0+
bG9hZGVyKCkuY2xpZW50KCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkZyYW1lKj4oJmZy
YW1lTG9hZGVyQ2xpZW50KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViRnJhbWVMb2FkZXJD
bGllbnQmPihmcmFtZUxvYWRlckNsaWVudCkud2ViRnJhbWUoKTsKIH0KIAogRnJhbWUqIGNvcmUo
V2ViRnJhbWUqIHdlYkZyYW1lKQpAQCAtMjMzLDggKzIzMiw3IEBAIHB1YmxpYzoKICAgICBXZWJG
cmFtZVByaXZhdGUoKSAKICAgICAgICAgOiBmcmFtZSgwKQogICAgICAgICAsIHdlYlZpZXcoMCkK
LSAgICAgICAgLCBtX3BvbGljeUZ1bmN0aW9uKDApCi0gICAgeyAKKyAgICB7CiAgICAgfQogCiAg
ICAgfldlYkZyYW1lUHJpdmF0ZSgpIHsgfQpAQCAtMjQyLDE1ICsyNDAsMTIgQEAgcHVibGljOgog
CiAgICAgRnJhbWUqIGZyYW1lOwogICAgIFdlYlZpZXcqIHdlYlZpZXc7Ci0gICAgRnJhbWVQb2xp
Y3lGdW5jdGlvbiBtX3BvbGljeUZ1bmN0aW9uOwotICAgIENPTVB0cjxXZWJGcmFtZVBvbGljeUxp
c3RlbmVyPiBtX3BvbGljeUxpc3RlbmVyOwogfTsKIAogLy8gV2ViRnJhbWUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBX
ZWJGcmFtZTo6V2ViRnJhbWUoKQotICAgIDogV2ViRnJhbWVMb2FkZXJDbGllbnQodGhpcykKLSAg
ICAsIG1fcmVmQ291bnQoMCkKKyAgICA6IG1fcmVmQ291bnQoMCkKICAgICAsIGQobmV3IFdlYkZy
YW1lOjpXZWJGcmFtZVByaXZhdGUpCiAgICAgLCBtX3F1aWNrUmVkaXJlY3RDb21pbmcoZmFsc2Up
CiAgICAgLCBtX2luUHJpbnRpbmdNb2RlKGZhbHNlKQpAQCAtMTA4NSw3ICsxMDgwLDcgQEAgUGFz
c1JlZlB0cjxGcmFtZT4gV2ViRnJhbWU6OmluaXQoSVdlYlZpZQogICAgIGQtPndlYlZpZXctPnZp
ZXdXaW5kb3coKE9MRV9IQU5ETEUqKSZ2aWV3V2luZG93KTsKIAogICAgIHRoaXMtPkFkZFJlZigp
OyAvLyBXZSByZWxlYXNlIHRoaXMgcmVmIGluIGZyYW1lTG9hZGVyRGVzdHJveWVkKCkKLSAgICBS
ZWZQdHI8RnJhbWU+IGZyYW1lID0gRnJhbWU6OmNyZWF0ZShwYWdlLCBvd25lckVsZW1lbnQsIHRo
aXMpOworICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBGcmFtZTo6Y3JlYXRlKHBhZ2UsIG93bmVy
RWxlbWVudCwgbmV3IFdlYkZyYW1lTG9hZGVyQ2xpZW50KHRoaXMpKTsKICAgICBkLT5mcmFtZSA9
IGZyYW1lLmdldCgpOwogICAgIHJldHVybiBmcmFtZS5yZWxlYXNlKCk7CiB9CkBAIC0xNDY2LDQ2
MSArMTQ2MSw2IEBAIHZvaWQgV2ViRnJhbWU6OmZyYW1lTG9hZGVyRGVzdHJveWVkKCkKICAgICB0
aGlzLT5SZWxlYXNlKCk7CiB9CiAKLXZvaWQgV2ViRnJhbWU6Om1ha2VSZXByZXNlbnRhdGlvbihE
b2N1bWVudExvYWRlciopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJG
cmFtZTo6Zm9yY2VMYXlvdXRGb3JOb25IVE1MKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIFdlYkZyYW1lOjpzZXRDb3BpZXNPblNjcm9sbCgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJGcmFtZTo6ZGV0YWNoZWRGcm9tUGFyZW50MigpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJGcmFtZTo6ZGV0YWNoZWRGcm9tUGFy
ZW50MygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJGcmFtZTo6Y2Fu
Y2VsUG9saWN5Q2hlY2soKQotewotICAgIGlmIChkLT5tX3BvbGljeUxpc3RlbmVyKSB7Ci0gICAg
ICAgIGQtPm1fcG9saWN5TGlzdGVuZXItPmludmFsaWRhdGUoKTsKLSAgICAgICAgZC0+bV9wb2xp
Y3lMaXN0ZW5lciA9IDA7Ci0gICAgfQotCi0gICAgZC0+bV9wb2xpY3lGdW5jdGlvbiA9IDA7Ci19
Ci0KLXZvaWQgV2ViRnJhbWU6OmRpc3BhdGNoV2lsbFNlbmRTdWJtaXRFdmVudChQYXNzUmVmUHRy
PFdlYkNvcmU6OkZvcm1TdGF0ZT4pCi17Ci19Ci0KLXZvaWQgV2ViRnJhbWU6OmRpc3BhdGNoV2ls
bFN1Ym1pdEZvcm0oRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwgUGFzc1JlZlB0cjxGb3Jt
U3RhdGU+IGZvcm1TdGF0ZSkKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZSh0aGlzKTsK
LSAgICBBU1NFUlQoY29yZUZyYW1lKTsKLQotICAgIENPTVB0cjxJV2ViRm9ybURlbGVnYXRlPiBm
b3JtRGVsZWdhdGU7Ci0KLSAgICBpZiAoRkFJTEVEKGQtPndlYlZpZXctPmZvcm1EZWxlZ2F0ZSgm
Zm9ybURlbGVnYXRlKSkpIHsKLSAgICAgICAgKGNvcmVGcmFtZS0+bG9hZGVyKCkucG9saWN5Q2hl
Y2tlcigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBDT01QdHI8SURPTUVsZW1lbnQ+IGZvcm1FbGVtZW50KEFkb3B0Q09NLCBET01FbGVtZW50
OjpjcmVhdGVJbnN0YW5jZShmb3JtU3RhdGUtPmZvcm0oKSkpOwotCi0gICAgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gZm9ybVZhbHVlc01hcDsKLSAgICBjb25zdCBTdHJpbmdQYWlyVmVjdG9yJiB0
ZXh0RmllbGRWYWx1ZXMgPSBmb3JtU3RhdGUtPnRleHRGaWVsZFZhbHVlcygpOwotICAgIHNpemVf
dCBzaXplID0gdGV4dEZpZWxkVmFsdWVzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7ICsraSkKLSAgICAgICAgZm9ybVZhbHVlc01hcC5hZGQodGV4dEZpZWxkVmFsdWVz
W2ldLmZpcnN0LCB0ZXh0RmllbGRWYWx1ZXNbaV0uc2Vjb25kKTsKLQotICAgIENPTVB0cjxJUHJv
cGVydHlCYWc+IGZvcm1WYWx1ZXNQcm9wZXJ0eUJhZyhBZG9wdENPTSwgQ09NUHJvcGVydHlCYWc8
U3RyaW5nPjo6Y3JlYXRlSW5zdGFuY2UoZm9ybVZhbHVlc01hcCkpOwotCi0gICAgQ09NUHRyPFdl
YkZyYW1lPiBzb3VyY2VGcmFtZShraXQoZm9ybVN0YXRlLT5zb3VyY2VEb2N1bWVudCgpLT5mcmFt
ZSgpKSk7Ci0gICAgaWYgKFNVQ0NFRURFRChmb3JtRGVsZWdhdGUtPndpbGxTdWJtaXRGb3JtKHRo
aXMsIHNvdXJjZUZyYW1lLmdldCgpLCBmb3JtRWxlbWVudC5nZXQoKSwgZm9ybVZhbHVlc1Byb3Bl
cnR5QmFnLmdldCgpLCBzZXRVcFBvbGljeUxpc3RlbmVyKGZ1bmN0aW9uKS5nZXQoKSkpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogQWRkIGEgc2FuZSBkZWZhdWx0IGltcGxlbWVu
dGF0aW9uCi0gICAgKGNvcmVGcmFtZS0+bG9hZGVyKCkucG9saWN5Q2hlY2tlcigpLT4qZnVuY3Rp
b24pKFBvbGljeVVzZSk7Ci19Ci0KLXZvaWQgV2ViRnJhbWU6OnJldmVydFRvUHJvdmlzaW9uYWxT
dGF0ZShEb2N1bWVudExvYWRlciopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBXZWJGcmFtZTo6c2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeShib29sKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViRnJhbWU6OndpbGxDaGFuZ2VUaXRsZShEb2N1bWVu
dExvYWRlciopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJGcmFtZTo6
ZGlkQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgV2ViRnJhbWU6OmRpZENoYW5nZUljb25zKERvY3VtZW50TG9hZGVyKikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFdlYkZyYW1lOjpjYW5IYW5kbGVSZXF1
ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkgY29uc3QKLXsKLSAgICByZXR1cm4g
V2ViVmlldzo6Y2FuSGFuZGxlUmVxdWVzdChyZXF1ZXN0KTsKLX0KLQotYm9vbCBXZWJGcmFtZTo6
Y2FuU2hvd01JTUVUeXBlQXNIVE1MKGNvbnN0IFN0cmluZyYgLypNSU1FVHlwZSovKSBjb25zdAot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2Vi
RnJhbWU6OmNhblNob3dNSU1FVHlwZShjb25zdCBTdHJpbmcmIC8qTUlNRVR5cGUqLykgY29uc3QK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdl
YkZyYW1lOjpyZXByZXNlbnRhdGlvbkV4aXN0c0ZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIC8q
VVJMU2NoZW1lKi8pIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLVN0cmluZyBXZWJGcmFtZTo6Z2VuZXJhdGVkTUlNRVR5cGVGb3JVUkxTY2hl
bWUoY29uc3QgU3RyaW5nJiAvKlVSTFNjaGVtZSovKSBjb25zdAotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwot
fQotCi12b2lkIFdlYkZyYW1lOjpmcmFtZUxvYWRDb21wbGV0ZWQoKQotewotfQotCi12b2lkIFdl
YkZyYW1lOjpyZXN0b3JlVmlld1N0YXRlKCkKLXsKLX0KLQotdm9pZCBXZWJGcmFtZTo6cHJvdmlz
aW9uYWxMb2FkU3RhcnRlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBX
ZWJGcmFtZTo6c2hvdWxkVHJlYXRVUkxBc1NhbWVBc0N1cnJlbnQoY29uc3QgS1VSTCYpIGNvbnN0
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
V2ViRnJhbWU6OmFkZEhpc3RvcnlJdGVtRm9yRnJhZ21lbnRTY3JvbGwoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViRnJhbWU6OmRpZEZpbmlzaExvYWQoKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViRnJhbWU6OnByZXBhcmVGb3JEYXRhU291
cmNlUmVwbGFjZW1lbnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLVN0cmluZyBX
ZWJGcmFtZTo6dXNlckFnZW50KGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICByZXR1cm4gZC0+d2Vi
Vmlldy0+dXNlckFnZW50Rm9yS1VSTCh1cmwpOwotfQotCi12b2lkIFdlYkZyYW1lOjpzYXZlVmll
d1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVtKikKLXsKLX0KLQotUmVzb3VyY2VFcnJvciBXZWJGcmFt
ZTo6Y2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAg
IC8vIEZJWE1FOiBOZWVkIENoaWNrZW5DYXQgdG8gaW5jbHVkZSBDRk5ldHdvcmsvQ0ZVUkxFcnJv
ci5oIHRvIGdldCB0aGVzZSB2YWx1ZXMKLSAgICAvLyBBbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZCBj
cmVhdGUgb3VyIG93biBlcnJvciBkb21haW4vY29kZXMuCi0gICAgcmV0dXJuIFJlc291cmNlRXJy
b3IoU3RyaW5nKFdlYlVSTEVycm9yRG9tYWluKSwgLTk5OSwgcmVxdWVzdC51cmwoKS5zdHJpbmco
KSwgU3RyaW5nKCkpOwotfQotCi1SZXNvdXJjZUVycm9yIFdlYkZyYW1lOjpibG9ja2VkRXJyb3Io
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIC8vIEZJWE1FOiBOZWVkIHRv
IGltcGxlbWVudCB0aGUgU3RyaW5nIGRlc2NyaXB0aW9ucyBmb3IgZXJyb3JzIGluIHRoZSBXZWJL
aXRFcnJvckRvbWFpbiBhbmQgaGF2ZSB0aGVtIGxvY2FsaXplZAotICAgIHJldHVybiBSZXNvdXJj
ZUVycm9yKFN0cmluZyhXZWJLaXRFcnJvckRvbWFpbiksIFdlYktpdEVycm9yQ2Fubm90VXNlUmVz
dHJpY3RlZFBvcnQsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIFN0cmluZygpKTsKLX0KLQotUmVz
b3VyY2VFcnJvciBXZWJGcmFtZTo6Y2Fubm90U2hvd1VSTEVycm9yKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKLXsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgdGhlIFN0
cmluZyBkZXNjcmlwdGlvbnMgZm9yIGVycm9ycyBpbiB0aGUgV2ViS2l0RXJyb3JEb21haW4gYW5k
IGhhdmUgdGhlbSBsb2NhbGl6ZWQKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihTdHJpbmcoV2Vi
S2l0RXJyb3JEb21haW4pLCBXZWJLaXRFcnJvckNhbm5vdFNob3dVUkwsIHJlcXVlc3QudXJsKCku
c3RyaW5nKCksIFN0cmluZygpKTsKLX0KLQotUmVzb3VyY2VFcnJvciBXZWJGcmFtZTo6aW50ZXJy
dXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
Ci17Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8gaW1wbGVtZW50IHRoZSBTdHJpbmcgZGVzY3JpcHRp
b25zIGZvciBlcnJvcnMgaW4gdGhlIFdlYktpdEVycm9yRG9tYWluIGFuZCBoYXZlIHRoZW0gbG9j
YWxpemVkCi0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoU3RyaW5nKFdlYktpdEVycm9yRG9tYWlu
KSwgV2ViS2l0RXJyb3JGcmFtZUxvYWRJbnRlcnJ1cHRlZEJ5UG9saWN5Q2hhbmdlLCByZXF1ZXN0
LnVybCgpLnN0cmluZygpLCBTdHJpbmcoKSk7Ci19Ci0KLVJlc291cmNlRXJyb3IgV2ViRnJhbWU6
OmNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsKLX0KLQotUmVz
b3VyY2VFcnJvciBXZWJGcmFtZTo6ZmlsZURvZXNOb3RFeGlzdEVycm9yKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFJlc291cmNl
RXJyb3IoKTsKLX0KLQotUmVzb3VyY2VFcnJvciBXZWJGcmFtZTo6cGx1Z2luV2lsbEhhbmRsZUxv
YWRFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICByZXR1cm4g
UmVzb3VyY2VFcnJvcihTdHJpbmcoV2ViS2l0RXJyb3JEb21haW4pLCBXZWJLaXRFcnJvclBsdWdJ
bldpbGxIYW5kbGVMb2FkLCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgU3RyaW5nKCkpOwotfQot
Ci1ib29sIFdlYkZyYW1lOjpzaG91bGRGYWxsQmFjayhjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJv
cikKLXsKLSAgICBpZiAoZXJyb3IuZXJyb3JDb2RlKCkgPT0gV2ViVVJMRXJyb3JDYW5jZWxsZWQg
JiYgZXJyb3IuZG9tYWluKCkgPT0gU3RyaW5nKFdlYlVSTEVycm9yRG9tYWluKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGVycm9yLmVycm9yQ29kZSgpID09IFdlYktpdEVycm9y
UGx1Z0luV2lsbEhhbmRsZUxvYWQgJiYgZXJyb3IuZG9tYWluKCkgPT0gU3RyaW5nKFdlYktpdEVy
cm9yRG9tYWluKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLUNPTVB0cjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyPiBXZWJGcmFtZTo6c2V0VXBQb2xpY3lM
aXN0ZW5lcihXZWJDb3JlOjpGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uKQotewotICAgIC8v
IEZJWE1FOiA8cmRhcjovLzU2MzQzODE+IFdlIG5lZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBhY3Rp
dmUgcG9saWN5IGxpc3RlbmVycy4KLQotICAgIGlmIChkLT5tX3BvbGljeUxpc3RlbmVyKQotICAg
ICAgICBkLT5tX3BvbGljeUxpc3RlbmVyLT5pbnZhbGlkYXRlKCk7Ci0KLSAgICBGcmFtZSogY29y
ZUZyYW1lID0gY29yZSh0aGlzKTsKLSAgICBBU1NFUlQoY29yZUZyYW1lKTsKLQotICAgIGQtPm1f
cG9saWN5TGlzdGVuZXIuYWRvcHRSZWYoV2ViRnJhbWVQb2xpY3lMaXN0ZW5lcjo6Y3JlYXRlSW5z
dGFuY2UoY29yZUZyYW1lKSk7Ci0gICAgZC0+bV9wb2xpY3lGdW5jdGlvbiA9IGZ1bmN0aW9uOwot
Ci0gICAgcmV0dXJuIGQtPm1fcG9saWN5TGlzdGVuZXI7Ci19Ci0KLXZvaWQgV2ViRnJhbWU6OnJl
Y2VpdmVkUG9saWN5RGVjaXNpb24oUG9saWN5QWN0aW9uIGFjdGlvbikKLXsKLSAgICBBU1NFUlQo
ZC0+bV9wb2xpY3lMaXN0ZW5lcik7Ci0gICAgQVNTRVJUKGQtPm1fcG9saWN5RnVuY3Rpb24pOwot
Ci0gICAgRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiA9IGQtPm1fcG9saWN5RnVuY3Rpb247
Ci0KLSAgICBkLT5tX3BvbGljeUxpc3RlbmVyID0gMDsKLSAgICBkLT5tX3BvbGljeUZ1bmN0aW9u
ID0gMDsKLQotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHRoaXMpOwotICAgIEFTU0VSVChj
b3JlRnJhbWUpOwotCi0gICAgKGNvcmVGcmFtZS0+bG9hZGVyKCkucG9saWN5Q2hlY2tlcigpLT4q
ZnVuY3Rpb24pKGFjdGlvbik7Ci19Ci0KLXZvaWQgV2ViRnJhbWU6OmRpc3BhdGNoRGVjaWRlUG9s
aWN5Rm9yUmVzcG9uc2UoRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsK
LSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZSh0aGlzKTsKLSAgICBBU1NFUlQoY29yZUZyYW1l
KTsKLQotICAgIENPTVB0cjxJV2ViUG9saWN5RGVsZWdhdGU+IHBvbGljeURlbGVnYXRlOwotICAg
IGlmIChGQUlMRUQoZC0+d2ViVmlldy0+cG9saWN5RGVsZWdhdGUoJnBvbGljeURlbGVnYXRlKSkp
Ci0gICAgICAgIHBvbGljeURlbGVnYXRlID0gRGVmYXVsdFBvbGljeURlbGVnYXRlOjpzaGFyZWRJ
bnN0YW5jZSgpOwotCi0gICAgQ09NUHRyPElXZWJVUkxSZXF1ZXN0PiB1cmxSZXF1ZXN0KEFkb3B0
Q09NLCBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6Y3JlYXRlSW5zdGFuY2UocmVxdWVzdCkpOwotCi0g
ICAgaWYgKFNVQ0NFRURFRChwb2xpY3lEZWxlZ2F0ZS0+ZGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUo
ZC0+d2ViVmlldywgQlN0cmluZyhyZXNwb25zZS5taW1lVHlwZSgpKSwgdXJsUmVxdWVzdC5nZXQo
KSwgdGhpcywgc2V0VXBQb2xpY3lMaXN0ZW5lcihmdW5jdGlvbikuZ2V0KCkpKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgKGNvcmVGcmFtZS0+bG9hZGVyKCkucG9saWN5Q2hlY2tlcigpLT4qZnVu
Y3Rpb24pKFBvbGljeVVzZSk7Ci19Ci0KLXZvaWQgV2ViRnJhbWU6OmRpc3BhdGNoRGVjaWRlUG9s
aWN5Rm9yTmV3V2luZG93QWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0
IE5hdmlnYXRpb25BY3Rpb24mIGFjdGlvbiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlLCBjb25zdCBTdHJpbmcmIGZyYW1lTmFt
ZSkKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZSh0aGlzKTsKLSAgICBBU1NFUlQoY29y
ZUZyYW1lKTsKLQotICAgIENPTVB0cjxJV2ViUG9saWN5RGVsZWdhdGU+IHBvbGljeURlbGVnYXRl
OwotICAgIGlmIChGQUlMRUQoZC0+d2ViVmlldy0+cG9saWN5RGVsZWdhdGUoJnBvbGljeURlbGVn
YXRlKSkpCi0gICAgICAgIHBvbGljeURlbGVnYXRlID0gRGVmYXVsdFBvbGljeURlbGVnYXRlOjpz
aGFyZWRJbnN0YW5jZSgpOwotCi0gICAgQ09NUHRyPElXZWJVUkxSZXF1ZXN0PiB1cmxSZXF1ZXN0
KEFkb3B0Q09NLCBXZWJNdXRhYmxlVVJMUmVxdWVzdDo6Y3JlYXRlSW5zdGFuY2UocmVxdWVzdCkp
OwotICAgIENPTVB0cjxXZWJBY3Rpb25Qcm9wZXJ0eUJhZz4gYWN0aW9uSW5mb3JtYXRpb24oQWRv
cHRDT00sIFdlYkFjdGlvblByb3BlcnR5QmFnOjpjcmVhdGVJbnN0YW5jZShhY3Rpb24sIGZvcm1T
dGF0ZSA/IGZvcm1TdGF0ZS0+Zm9ybSgpIDogMCwgY29yZUZyYW1lKSk7Ci0KLSAgICBpZiAoU1VD
Q0VFREVEKHBvbGljeURlbGVnYXRlLT5kZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oZC0+
d2ViVmlldywgYWN0aW9uSW5mb3JtYXRpb24uZ2V0KCksIHVybFJlcXVlc3QuZ2V0KCksIEJTdHJp
bmcoZnJhbWVOYW1lKSwgc2V0VXBQb2xpY3lMaXN0ZW5lcihmdW5jdGlvbikuZ2V0KCkpKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgKGNvcmVGcmFtZS0+bG9hZGVyKCkucG9saWN5Q2hlY2tlcigp
LT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7Ci19Ci0KLXZvaWQgV2ViRnJhbWU6OmRpc3BhdGNoRGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9u
LCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiBhY3Rpb24sIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+IGZvcm1TdGF0ZSkKLXsKLSAgICBGcmFtZSog
Y29yZUZyYW1lID0gY29yZSh0aGlzKTsKLSAgICBBU1NFUlQoY29yZUZyYW1lKTsKLQotICAgIENP
TVB0cjxJV2ViUG9saWN5RGVsZWdhdGU+IHBvbGljeURlbGVnYXRlOwotICAgIGlmIChGQUlMRUQo
ZC0+d2ViVmlldy0+cG9saWN5RGVsZWdhdGUoJnBvbGljeURlbGVnYXRlKSkpCi0gICAgICAgIHBv
bGljeURlbGVnYXRlID0gRGVmYXVsdFBvbGljeURlbGVnYXRlOjpzaGFyZWRJbnN0YW5jZSgpOwot
Ci0gICAgQ09NUHRyPElXZWJVUkxSZXF1ZXN0PiB1cmxSZXF1ZXN0KEFkb3B0Q09NLCBXZWJNdXRh
YmxlVVJMUmVxdWVzdDo6Y3JlYXRlSW5zdGFuY2UocmVxdWVzdCkpOwotICAgIENPTVB0cjxXZWJB
Y3Rpb25Qcm9wZXJ0eUJhZz4gYWN0aW9uSW5mb3JtYXRpb24oQWRvcHRDT00sIFdlYkFjdGlvblBy
b3BlcnR5QmFnOjpjcmVhdGVJbnN0YW5jZShhY3Rpb24sIGZvcm1TdGF0ZSA/IGZvcm1TdGF0ZS0+
Zm9ybSgpIDogMCwgY29yZUZyYW1lKSk7Ci0KLSAgICBpZiAoU1VDQ0VFREVEKHBvbGljeURlbGVn
YXRlLT5kZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKGQtPndlYlZpZXcsIGFjdGlvbklu
Zm9ybWF0aW9uLmdldCgpLCB1cmxSZXF1ZXN0LmdldCgpLCB0aGlzLCBzZXRVcFBvbGljeUxpc3Rl
bmVyKGZ1bmN0aW9uKS5nZXQoKSkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAoY29yZUZyYW1l
LT5sb2FkZXIoKS5wb2xpY3lDaGVja2VyKCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKLX0KLQot
dm9pZCBXZWJGcmFtZTo6ZGlzcGF0Y2hVbmFibGVUb0ltcGxlbWVudFBvbGljeShjb25zdCBSZXNv
dXJjZUVycm9yJiBlcnJvcikKLXsKLSAgICBDT01QdHI8SVdlYlBvbGljeURlbGVnYXRlPiBwb2xp
Y3lEZWxlZ2F0ZTsKLSAgICBpZiAoRkFJTEVEKGQtPndlYlZpZXctPnBvbGljeURlbGVnYXRlKCZw
b2xpY3lEZWxlZ2F0ZSkpKQotICAgICAgICBwb2xpY3lEZWxlZ2F0ZSA9IERlZmF1bHRQb2xpY3lE
ZWxlZ2F0ZTo6c2hhcmVkSW5zdGFuY2UoKTsKLQotICAgIENPTVB0cjxJV2ViRXJyb3I+IHdlYkVy
cm9yKEFkb3B0Q09NLCBXZWJFcnJvcjo6Y3JlYXRlSW5zdGFuY2UoZXJyb3IpKTsKLSAgICBwb2xp
Y3lEZWxlZ2F0ZS0+dW5hYmxlVG9JbXBsZW1lbnRQb2xpY3lXaXRoRXJyb3IoZC0+d2ViVmlldywg
d2ViRXJyb3IuZ2V0KCksIHRoaXMpOwotfQotCi12b2lkIFdlYkZyYW1lOjpjb252ZXJ0TWFpblJl
c291cmNlTG9hZFRvRG93bmxvYWQoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlKQotewotICAgIENPTVB0cjxJV2ViRG93bmxvYWREZWxlZ2F0ZT4gZG93bmxvYWREZWxlZ2F0
ZTsKLSAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7Ci0gICAgaWYgKFNVQ0NFRURFRCh0aGlz
LT53ZWJWaWV3KCZ3ZWJWaWV3KSkpIHsKLSAgICAgICAgaWYgKEZBSUxFRCh3ZWJWaWV3LT5kb3du
bG9hZERlbGVnYXRlKCZkb3dubG9hZERlbGVnYXRlKSkpIHsKLSAgICAgICAgICAgIC8vIElmIHRo
ZSBXZWJWaWV3IGRvZXNuJ3Qgc3VjY2Vzc2Z1bGx5IHByb3ZpZGUgYSBkb3dubG9hZCBkZWxlZ2F0
ZSB3ZSdsbCBwYXNzIGEgbnVsbCBvbmUKLSAgICAgICAgICAgIC8vIGludG8gdGhlIFdlYkRvd25s
b2FkIC0gd2hpY2ggbWF5IG9yIG1heSBub3QgZGVjaWRlIHRvIHVzZSBhIERlZmF1bHREb3dubG9h
ZERlbGVnYXRlCi0gICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXQgZG93bmxvYWRE
ZWxlZ2F0ZSBmcm9tIFdlYlZpZXciKTsKLSAgICAgICAgICAgIGRvd25sb2FkRGVsZWdhdGUgPSAw
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSXRzIHRoZSBkZWxlZ2F0ZSdzIGpvYiB0byBy
ZWYgdGhlIFdlYkRvd25sb2FkIHRvIGtlZXAgaXQgYWxpdmUgLSBvdGhlcndpc2UgaXQgd2lsbCBi
ZSBkZXN0cm95ZWQKLSAgICAvLyB3aGVuIHRoaXMgbWV0aG9kIHJldHVybnMKLSAgICBDT01QdHI8
V2ViRG93bmxvYWQ+IGRvd25sb2FkOwotICAgIGRvd25sb2FkLmFkb3B0UmVmKFdlYkRvd25sb2Fk
OjpjcmVhdGVJbnN0YW5jZShkb2N1bWVudExvYWRlci0+bWFpblJlc291cmNlTG9hZGVyKCktPmhh
bmRsZSgpLCByZXF1ZXN0LCByZXNwb25zZSwgZG93bmxvYWREZWxlZ2F0ZS5nZXQoKSkpOwotfQot
Ci1ib29sIFdlYkZyYW1lOjpkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShE
b2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmLCBpbnQgLypsZW5ndGgqLykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWJGcmFtZTo6ZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9u
YWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQotewotICAgIENPTVB0cjxJV2ViRnJh
bWVMb2FkRGVsZWdhdGU+IGZyYW1lTG9hZERlbGVnYXRlOwotICAgIGlmIChTVUNDRUVERUQoZC0+
d2ViVmlldy0+ZnJhbWVMb2FkRGVsZWdhdGUoJmZyYW1lTG9hZERlbGVnYXRlKSkpIHsKLSAgICAg
ICAgQ09NUHRyPElXZWJFcnJvcj4gd2ViRXJyb3I7Ci0gICAgICAgIHdlYkVycm9yLmFkb3B0UmVm
KFdlYkVycm9yOjpjcmVhdGVJbnN0YW5jZShlcnJvcikpOwotICAgICAgICBmcmFtZUxvYWREZWxl
Z2F0ZS0+ZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvcihkLT53ZWJWaWV3LCB3ZWJFcnJv
ci5nZXQoKSwgdGhpcyk7Ci0gICAgfQotfQotCi12b2lkIFdlYkZyYW1lOjpkaXNwYXRjaERpZEZh
aWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQotewotICAgIENPTVB0cjxJV2ViRnJh
bWVMb2FkRGVsZWdhdGU+IGZyYW1lTG9hZERlbGVnYXRlOwotICAgIGlmIChTVUNDRUVERUQoZC0+
d2ViVmlldy0+ZnJhbWVMb2FkRGVsZWdhdGUoJmZyYW1lTG9hZERlbGVnYXRlKSkpIHsKLSAgICAg
ICAgQ09NUHRyPElXZWJFcnJvcj4gd2ViRXJyb3I7Ci0gICAgICAgIHdlYkVycm9yLmFkb3B0UmVm
KFdlYkVycm9yOjpjcmVhdGVJbnN0YW5jZShlcnJvcikpOwotICAgICAgICBmcmFtZUxvYWREZWxl
Z2F0ZS0+ZGlkRmFpbExvYWRXaXRoRXJyb3IoZC0+d2ViVmlldywgd2ViRXJyb3IuZ2V0KCksIHRo
aXMpOwotICAgIH0KLX0KLQotdm9pZCBXZWJGcmFtZTo6c3RhcnREb3dubG9hZChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgLyogc3VnZ2VzdGVkTmFtZSAqLykK
LXsKLSAgICBkLT53ZWJWaWV3LT5kb3dubG9hZFVSTChyZXF1ZXN0LnVybCgpKTsKLX0KLQotUGFz
c1JlZlB0cjxXaWRnZXQ+IFdlYkZyYW1lOjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IElu
dFNpemUmIHBsdWdpblNpemUsIEhUTUxBcHBsZXRFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJM
JiAvKmJhc2VVUkwqLywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKLXsKLSAgICBSZWZQdHI8UGx1Z2luVmlldz4gcGx1
Z2luVmlldyA9IFBsdWdpblZpZXc6OmNyZWF0ZShjb3JlKHRoaXMpLCBwbHVnaW5TaXplLCBlbGVt
ZW50LCBLVVJMKCksIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzLCAiYXBwbGljYXRpb24veC1qYXZh
LWFwcGxldCIsIGZhbHNlKTsKLQotICAgIC8vIENoZWNrIGlmIHRoZSBwbHVnaW4gY2FuIGJlIGxv
YWRlZCBzdWNjZXNzZnVsbHkKLSAgICBpZiAocGx1Z2luVmlldy0+cGx1Z2luKCkgJiYgcGx1Z2lu
Vmlldy0+cGx1Z2luKCktPmxvYWQoKSkKLSAgICAgICAgcmV0dXJuIHBsdWdpblZpZXc7Ci0KLSAg
ICBDT01QdHI8SVdlYlJlc291cmNlTG9hZERlbGVnYXRlPiByZXNvdXJjZUxvYWREZWxlZ2F0ZTsK
LSAgICBpZiAoRkFJTEVEKGQtPndlYlZpZXctPnJlc291cmNlTG9hZERlbGVnYXRlKCZyZXNvdXJj
ZUxvYWREZWxlZ2F0ZSkpKQotICAgICAgICByZXR1cm4gcGx1Z2luVmlldzsKLQotICAgIENPTVB0
cjxDRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZz4gdXNlckluZm9CYWcgPSBDRkRpY3Rpb25hcnlQcm9w
ZXJ0eUJhZzo6Y3JlYXRlSW5zdGFuY2UoKTsKLQotICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VF
cnJvcihTdHJpbmcoV2ViS2l0RXJyb3JEb21haW4pLCBXZWJLaXRFcnJvckphdmFVbmF2YWlsYWJs
ZSwgU3RyaW5nKCksIFN0cmluZygpKTsKLSAgICBDT01QdHI8SVdlYkVycm9yPiBlcnJvcihBZG9w
dENPTSwgV2ViRXJyb3I6OmNyZWF0ZUluc3RhbmNlKHJlc291cmNlRXJyb3IsIHVzZXJJbmZvQmFn
LmdldCgpKSk7Ci0gICAgIAotICAgIHJlc291cmNlTG9hZERlbGVnYXRlLT5wbHVnSW5GYWlsZWRX
aXRoRXJyb3IoZC0+d2ViVmlldywgZXJyb3IuZ2V0KCksIGdldFdlYkRhdGFTb3VyY2UoZC0+ZnJh
bWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpKTsKLQotICAgIHJldHVybiBwbHVnaW5WaWV3
OwotfQotCi1PYmplY3RDb250ZW50VHlwZSBXZWJGcmFtZTo6b2JqZWN0Q29udGVudFR5cGUoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIHNob3VsZFByZWZlclBs
dWdJbnNGb3JJbWFnZXMpCi17Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkZWZh
dWx0T2JqZWN0Q29udGVudFR5cGUodXJsLCBtaW1lVHlwZSwgc2hvdWxkUHJlZmVyUGx1Z0luc0Zv
ckltYWdlcyk7Ci19Ci0KLVN0cmluZyBXZWJGcmFtZTo6b3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25z
dAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12
b2lkIFdlYkZyYW1lOjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChET01XcmFw
cGVyV29ybGQqIHdvcmxkKQotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHRoaXMpOwot
ICAgIEFTU0VSVChjb3JlRnJhbWUpOwotCi0gICAgaWYgKCFjb3JlRnJhbWUtPnNldHRpbmdzKCku
aXNTY3JpcHRFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENPTVB0cjxJV2ViRnJh
bWVMb2FkRGVsZWdhdGU+IGZyYW1lTG9hZERlbGVnYXRlOwotICAgIGlmIChGQUlMRUQoZC0+d2Vi
Vmlldy0+ZnJhbWVMb2FkRGVsZWdhdGUoJmZyYW1lTG9hZERlbGVnYXRlKSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIENPTVB0cjxJV2ViRnJhbWVMb2FkRGVsZWdhdGVQcml2YXRlMj4gZGVsZWdh
dGVQcml2YXRlKFF1ZXJ5LCBmcmFtZUxvYWREZWxlZ2F0ZSk7Ci0gICAgaWYgKGRlbGVnYXRlUHJp
dmF0ZSAmJiBkZWxlZ2F0ZVByaXZhdGUtPmRpZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWVJblNj
cmlwdFdvcmxkKGQtPndlYlZpZXcsIHRoaXMsIFdlYlNjcmlwdFdvcmxkOjpmaW5kT3JDcmVhdGVX
b3JsZCh3b3JsZCkuZ2V0KCkpICE9IEVfTk9USU1QTCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKHdvcmxkICE9IG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IHRvUmVmKGNvcmVGcmFtZS0+c2NyaXB0KCkuZ2xv
YmFsT2JqZWN0KHdvcmxkKS0+Z2xvYmFsRXhlYygpKTsKLSAgICBKU09iamVjdFJlZiB3aW5kb3dP
YmplY3QgPSB0b1JlZihjb3JlRnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9iamVjdCh3b3JsZCkpOwot
ICAgIEFTU0VSVCh3aW5kb3dPYmplY3QpOwotCi0gICAgaWYgKEZBSUxFRChmcmFtZUxvYWREZWxl
Z2F0ZS0+ZGlkQ2xlYXJXaW5kb3dPYmplY3QoZC0+d2ViVmlldywgY29udGV4dCwgd2luZG93T2Jq
ZWN0LCB0aGlzKSkpCi0gICAgICAgIGZyYW1lTG9hZERlbGVnYXRlLT53aW5kb3dTY3JpcHRPYmpl
Y3RBdmFpbGFibGUoZC0+d2ViVmlldywgY29udGV4dCwgd2luZG93T2JqZWN0KTsKLX0KLQotdm9p
ZCBXZWJGcmFtZTo6ZG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCkKLXsKLX0KLQotdm9pZCBXZWJG
cmFtZTo6ZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbigpIGNvbnN0Ci17Ci0gICAgQ09NUHRyPElX
ZWJQcmVmZXJlbmNlcz4gcHJlZmVyZW5jZXM7Ci0gICAgaWYgKEZBSUxFRChkLT53ZWJWaWV3LT5w
cmVmZXJlbmNlcygmcHJlZmVyZW5jZXMpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRy
PElXZWJQcmVmZXJlbmNlc1ByaXZhdGU+IHByZWZlcmVuY2VzUHJpdmF0ZShRdWVyeSwgcHJlZmVy
ZW5jZXMpOwotICAgIGlmICghcHJlZmVyZW5jZXNQcml2YXRlKQotICAgICAgICByZXR1cm47Ci0g
ICAgQk9PTCBhdXRvbWF0aWNhbGx5RGV0ZWN0c0NhY2hlTW9kZWw7Ci0gICAgaWYgKEZBSUxFRChw
cmVmZXJlbmNlc1ByaXZhdGUtPmF1dG9tYXRpY2FsbHlEZXRlY3RzQ2FjaGVNb2RlbCgmYXV0b21h
dGljYWxseURldGVjdHNDYWNoZU1vZGVsKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkNh
Y2hlTW9kZWwgY2FjaGVNb2RlbDsKLSAgICBpZiAoRkFJTEVEKHByZWZlcmVuY2VzLT5jYWNoZU1v
ZGVsKCZjYWNoZU1vZGVsKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvbWF0aWNh
bGx5RGV0ZWN0c0NhY2hlTW9kZWwgJiYgY2FjaGVNb2RlbCA8IFdlYkNhY2hlTW9kZWxEb2N1bWVu
dEJyb3dzZXIpCi0gICAgICAgIHByZWZlcmVuY2VzLT5zZXRDYWNoZU1vZGVsKFdlYkNhY2hlTW9k
ZWxEb2N1bWVudEJyb3dzZXIpOwotfQotCi12b2lkIFdlYkZyYW1lOjpyZWdpc3RlckZvckljb25O
b3RpZmljYXRpb24oYm9vbCBsaXN0ZW4pCi17Ci0gICAgZC0+d2ViVmlldy0+cmVnaXN0ZXJGb3JJ
Y29uTm90aWZpY2F0aW9uKGxpc3Rlbik7Ci19Ci0KIHN0YXRpYyBJbnRSZWN0IHByaW50ZXJSZWN0
KEhEQyBwcmludERDKQogewogICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIApAQCAtMjU5Miw3ICsy
MTMyLDMgQEAgdm9pZCBXZWJGcmFtZTo6dXBkYXRlQmFja2dyb3VuZCgpCiAgICAgY29yZUZyYW1l
LT52aWV3KCktPnVwZGF0ZUJhY2tncm91bmRSZWN1cnNpdmVseShiYWNrZ3JvdW5kQ29sb3IsIHdl
YlZpZXcoKS0+dHJhbnNwYXJlbnQoKSk7CiB9CiAKLVBhc3NSZWZQdHI8RnJhbWVOZXR3b3JraW5n
Q29udGV4dD4gV2ViRnJhbWU6OmNyZWF0ZU5ldHdvcmtpbmdDb250ZXh0KCkKLXsKLSAgICByZXR1
cm4gV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6Y3JlYXRlKGNvcmUodGhpcyksIHVzZXJBZ2Vu
dCh1cmwoKSkpOwotfQpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5oCShyZXZpc2lvbiAxNTQ0NTcpCisr
KyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMTEsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiw4ICsyNiw2IEBACiAjaWZuZGVmIFdlYkZyYW1lX0gKICNkZWZpbmUg
V2ViRnJhbWVfSAogCi0jaW5jbHVkZSAiV2ViRnJhbWVMb2FkZXJDbGllbnQuaCIKLQogI2luY2x1
ZGUgIldlYktpdC5oIgogI2luY2x1ZGUgIldlYkRhdGFTb3VyY2UuaCIKIApAQCAtODEsNyArNzks
NiBAQCBXZWJGcmFtZSoga2l0KFdlYkNvcmU6OkZyYW1lKik7CiBXZWJDb3JlOjpGcmFtZSogY29y
ZShXZWJGcmFtZSopOwogCiBjbGFzcyBERUNMU1BFQ19VVUlEKCJ7QTM2NzYzOTgtNDQ4NS00YTlk
LTg3REMtQ0I1QTQwRTYzNTFEfSIpIFdlYkZyYW1lIDogcHVibGljIElXZWJGcmFtZSwgSVdlYkZy
YW1lUHJpdmF0ZSwgSVdlYkRvY3VtZW50VGV4dAotICAgICwgcHVibGljIFdlYkZyYW1lTG9hZGVy
Q2xpZW50CiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFdlYkZyYW1lKiBjcmVhdGVJbnN0YW5jZSgp
OwpAQCAtMjk5LDY0ICsyOTYsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gRnJhbWVMb2FkZXJD
bGllbnQKICAgICB2aXJ0dWFsIHZvaWQgZnJhbWVMb2FkZXJEZXN0cm95ZWQoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgbWFrZVJlcHJlc2VudGF0aW9uKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKik7Ci0g
ICAgdmlydHVhbCB2b2lkIGZvcmNlTGF5b3V0Rm9yTm9uSFRNTCgpOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRDb3BpZXNPblNjcm9sbCgpOwotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hlZEZyb21QYXJl
bnQyKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaGVkRnJvbVBhcmVudDMoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgY2FuY2VsUG9saWN5Q2hlY2soKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hX
aWxsU2VuZFN1Ym1pdEV2ZW50KFBhc3NSZWZQdHI8V2ViQ29yZTo6Rm9ybVN0YXRlPik7Ci0gICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0oV2ViQ29yZTo6RnJhbWVQb2xpY3lG
dW5jdGlvbiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGb3JtU3RhdGU+KTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmV2ZXJ0VG9Qcm92aXNpb25hbFN0YXRlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKik7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCk7Ci0gICAgdmly
dHVhbCB2b2lkIHdpbGxDaGFuZ2VUaXRsZShXZWJDb3JlOjpEb2N1bWVudExvYWRlciopOwotICAg
IHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VUaXRsZShXZWJDb3JlOjpEb2N1bWVudExvYWRlciopOwot
ICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VJY29ucyhXZWJDb3JlOjpEb2N1bWVudExvYWRlciop
OwotICAgIHZpcnR1YWwgYm9vbCBjYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBjYW5TaG93TUlNRVR5cGUoY29u
c3QgV1RGOjpTdHJpbmcmIE1JTUVUeXBlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuU2hv
d01JTUVUeXBlQXNIVE1MKGNvbnN0IFdURjo6U3RyaW5nJiBNSU1FVHlwZSkgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIHJlcHJlc2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKGNvbnN0IFdURjo6
U3RyaW5nJiBVUkxTY2hlbWUpIGNvbnN0OwotICAgIHZpcnR1YWwgV1RGOjpTdHJpbmcgZ2VuZXJh
dGVkTUlNRVR5cGVGb3JVUkxTY2hlbWUoY29uc3QgV1RGOjpTdHJpbmcmIFVSTFNjaGVtZSkgY29u
c3Q7Ci0gICAgdmlydHVhbCB2b2lkIGZyYW1lTG9hZENvbXBsZXRlZCgpOwotICAgIHZpcnR1YWwg
dm9pZCByZXN0b3JlVmlld1N0YXRlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHByb3Zpc2lvbmFsTG9h
ZFN0YXJ0ZWQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVHJlYXRVUkxBc1NhbWVBc0N1cnJl
bnQoY29uc3QgV2ViQ29yZTo6S1VSTCYpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBhZGRIaXN0
b3J5SXRlbUZvckZyYWdtZW50U2Nyb2xsKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExv
YWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZvckRhdGFTb3VyY2VSZXBsYWNlbWVudCgp
OwotICAgIHZpcnR1YWwgV1RGOjpTdHJpbmcgdXNlckFnZW50KGNvbnN0IFdlYkNvcmU6OktVUkwm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2F2ZVZpZXdTdGF0ZVRvSXRlbShXZWJDb3JlOjpIaXN0b3J5
SXRlbSAqKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgY2FuY2VsbGVkRXJy
b3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgdmlydHVhbCBXZWJDb3Jl
OjpSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgY2Fubm90U2hvd1VSTEVy
cm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwotICAgIHZpcnR1YWwgV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRlZEZvclBvbGljeUNoYW5nZUVycm9yKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6UmVzb3VyY2VF
cnJvciBjYW5ub3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJik7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGZpbGVEb2VzTm90RXhp
c3RFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgdmlydHVhbCBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yIHBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGYWxsQmFj
ayhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoRGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UoV2ViQ29yZTo6RnJhbWVQb2xpY3lGdW5jdGlvbiwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dp
bmRvd0FjdGlvbihXZWJDb3JlOjpGcmFtZVBvbGljeUZ1bmN0aW9uLCBjb25zdCBXZWJDb3JlOjpO
YXZpZ2F0aW9uQWN0aW9uJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpGb3JtU3RhdGU+LCBjb25zdCBXVEY6OlN0cmluZyYgZnJhbWVOYW1lKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9u
KFdlYkNvcmU6OkZyYW1lUG9saWN5RnVuY3Rpb24sIGNvbnN0IFdlYkNvcmU6Ok5hdmlnYXRpb25B
Y3Rpb24mLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBQYXNzUmVmUHRyPFdlYkNv
cmU6OkZvcm1TdGF0ZT4pOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFVuYWJsZVRvSW1wbGVt
ZW50UG9saWN5KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKLSAgICB2aXJ0dWFsIHZv
aWQgY29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKFdlYkNvcmU6OkRvY3VtZW50TG9h
ZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYpOwotCi0gICAgdmlydHVhbCBib29sIGRpc3BhdGNoRGlkTG9hZFJlc291
cmNlRnJvbU1lbW9yeUNhY2hlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGlu
dCBsZW5ndGgpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExv
YWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaERpZEZhaWxMb2FkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKLSAgICB2aXJ0
dWFsIHZvaWQgc3RhcnREb3dubG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBj
b25zdCBTdHJpbmcmIHN1Z2dlc3RlZE5hbWUgPSBTdHJpbmcoKSk7Ci0gICAgICAgIAotICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IGNyZWF0ZUphdmFBcHBsZXRXaWRnZXQo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50KiwgY29u
c3QgV2ViQ29yZTo6S1VSTCYgYmFzZVVSTCwgY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgcGFy
YW1OYW1lcywgY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOwotCi0gICAg
dmlydHVhbCBXZWJDb3JlOjpPYmplY3RDb250ZW50VHlwZSBvYmplY3RDb250ZW50VHlwZShjb25z
dCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBib29sIHNob3Vs
ZFByZWZlclBsdWdJbnNGb3JJbWFnZXMpOwotICAgIHZpcnR1YWwgV1RGOjpTdHJpbmcgb3ZlcnJp
ZGVNZWRpYVR5cGUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENsZWFy
V2luZG93T2JqZWN0SW5Xb3JsZChXZWJDb3JlOjpET01XcmFwcGVyV29ybGQqKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRp
ZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24oKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCByZWdp
c3RlckZvckljb25Ob3RpZmljYXRpb24oYm9vbCBsaXN0ZW4pOwotCi0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPFdlYkNvcmU6OkZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IGNyZWF0ZU5ldHdvcmtpbmdD
b250ZXh0KCk7CiAKICAgICAvLyBXZWJGcmFtZQogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6RnJh
bWU+IGluaXQoSVdlYlZpZXcqLCBXZWJDb3JlOjpQYWdlKiwgV2ViQ29yZTo6SFRNTEZyYW1lT3du
ZXJFbGVtZW50Kik7CkBAIC0zNzgsOSArMzE3LDYgQEAgcHVibGljOgogICAgIEhSRVNVTFQgbWF0
Y2hMYWJlbHNBZ2FpbnN0RWxlbWVudChjb25zdCBCU1RSKiBsYWJlbHMsIGludCBjTGFiZWxzLCBJ
RE9NRWxlbWVudCogYWdhaW5zdEVsZW1lbnQsIEJTVFIqIHJlc3VsdCk7CiAgICAgSFJFU1VMVCBj
YW5Qcm92aWRlRG9jdW1lbnRTb3VyY2UoYm9vbCogcmVzdWx0KTsKIAotICAgIENPTVB0cjxXZWJG
cmFtZVBvbGljeUxpc3RlbmVyPiBzZXRVcFBvbGljeUxpc3RlbmVyKFdlYkNvcmU6OkZyYW1lUG9s
aWN5RnVuY3Rpb24gZnVuY3Rpb24pOwotICAgIHZvaWQgcmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihX
ZWJDb3JlOjpQb2xpY3lBY3Rpb24pOwotCiAgICAgV2ViQ29yZTo6S1VSTCB1cmwoKSBjb25zdDsK
IAogICAgIFdlYlZpZXcqIHdlYlZpZXcoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2lu
L1dlYkZyYW1lUG9saWN5TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
d2luL1dlYkZyYW1lUG9saWN5TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAxNTQ0NTcpCisrKyBTb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJGcmFtZVBvbGljeUxpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiV2ViS2l0RExMLmgiCiAjaW5jbHVkZSAiV2ViRnJh
bWVQb2xpY3lMaXN0ZW5lci5oIgogCi0jaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJX
ZWJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRl
ckNsaWVudC5oPgpAQCAtMTIyLDcgKzEyMiw3IEBAIHZvaWQgV2ViRnJhbWVQb2xpY3lMaXN0ZW5l
cjo6cmVjZWl2ZWRQb2wKIHsKICAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gbV9mcmFtZS5yZWxl
YXNlKCk7CiAgICAgaWYgKGZyYW1lKQotICAgICAgICBzdGF0aWNfY2FzdDxXZWJGcmFtZSo+KCZm
cmFtZS0+bG9hZGVyKCkuY2xpZW50KCkpLT5yZWNlaXZlZFBvbGljeURlY2lzaW9uKGFjdGlvbik7
CisgICAgICAgIHN0YXRpY19jYXN0PFdlYkZyYW1lTG9hZGVyQ2xpZW50Kj4oJmZyYW1lLT5sb2Fk
ZXIoKS5jbGllbnQoKSktPnJlY2VpdmVkUG9saWN5RGVjaXNpb24oYWN0aW9uKTsKIH0KIAogdm9p
ZCBXZWJGcmFtZVBvbGljeUxpc3RlbmVyOjppbnZhbGlkYXRlKCkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5jcHAJKHJldmlzaW9uIDE1NDQ1NykKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMjYgKzMyLDM0IEBACiAjaW5jbHVkZSAiQ0ZEaWN0
aW9uYXJ5UHJvcGVydHlCYWcuaCIKICNpbmNsdWRlICJDT01Qcm9wZXJ0eUJhZy5oIgogI2luY2x1
ZGUgIkRPTUhUTUxDbGFzc2VzLmgiCisjaW5jbHVkZSAiRGVmYXVsdFBvbGljeURlbGVnYXRlLmgi
CiAjaW5jbHVkZSAiRW1iZWRkZWRXaWRnZXQuaCIKICNpbmNsdWRlICJNYXJzaGFsbGluZ0hlbHBl
cnMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIldlYkFjdGlvblBy
b3BlcnR5QmFnLmgiCiAjaW5jbHVkZSAiV2ViQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEuaCIKICNp
bmNsdWRlICJXZWJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJXZWJEb2N1bWVudExvYWRlci5o
IgorI2luY2x1ZGUgIldlYkRvd25sb2FkLmgiCiAjaW5jbHVkZSAiV2ViRXJyb3IuaCIKICNpbmNs
dWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIK
KyNpbmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyLmgiCiAjaW5jbHVkZSAiV2ViSGlzdG9y
eS5oIgogI2luY2x1ZGUgIldlYkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVkZSAiV2ViTXV0YWJsZVVS
TFJlcXVlc3QuaCIKICNpbmNsdWRlICJXZWJOYXZpZ2F0aW9uRGF0YS5oIgogI2luY2x1ZGUgIldl
Yk5vdGlmaWNhdGlvbkNlbnRlci5oIgorI2luY2x1ZGUgIldlYlNjcmlwdFdvcmxkLmgiCiAjaW5j
bHVkZSAiV2ViU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJXZWJVUkxBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZS5oIgogI2luY2x1ZGUgIldlYlVSTFJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiV2Vi
Vmlldy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0JhY2tGb3J3YXJkQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2FjaGVk
RnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9Gb3JtU3RhdGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVUcmVlLmg+
CkBAIC02Niw5ICs3NCwxMSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUGx1Z2luUGFja2FnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGx1Z2luVmlldy5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUG9saWN5Q2hlY2tlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UmVuZGVyUGFydC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZGVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRD
b250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKQEAgLTc5LDkgKzg5LDIzIEBAIHN0YXRpYyBXZWJEYXRhU291cmNlKiBn
ZXRXZWJEYXRhU291cmNlKEQKICAgICByZXR1cm4gbG9hZGVyID8gc3RhdGljX2Nhc3Q8V2ViRG9j
dW1lbnRMb2FkZXIqPihsb2FkZXIpLT5kYXRhU291cmNlKCkgOiAwOwogfQogCitjbGFzcyBXZWJG
cmFtZUxvYWRlckNsaWVudDo6V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByaXZhdGUgeworcHVibGlj
OgorICAgIFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcml2YXRlKCkgCisgICAgICAgIDogbV9wb2xp
Y3lGdW5jdGlvbigwKQorICAgIHsgCisgICAgfQorCisgICAgfldlYkZyYW1lUG9saWN5TGlzdGVu
ZXJQcml2YXRlKCkgeyB9CisKKyAgICBGcmFtZVBvbGljeUZ1bmN0aW9uIG1fcG9saWN5RnVuY3Rp
b247CisgICAgQ09NUHRyPFdlYkZyYW1lUG9saWN5TGlzdGVuZXI+IG1fcG9saWN5TGlzdGVuZXI7
Cit9OworCiBXZWJGcmFtZUxvYWRlckNsaWVudDo6V2ViRnJhbWVMb2FkZXJDbGllbnQoV2ViRnJh
bWUqIHdlYkZyYW1lKQogICAgIDogbV93ZWJGcmFtZSh3ZWJGcmFtZSkKLSAgICAsIG1fbWFudWFs
TG9hZGVyKDApIAorICAgICwgbV9tYW51YWxMb2FkZXIoMCkKKyAgICAsIG1fcG9saWN5TGlzdGVu
ZXJQcml2YXRlKG5ldyBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJpdmF0ZSkKICAgICAsIG1faGFz
U2VudFJlc3BvbnNlVG9QbHVnaW4oZmFsc2UpIAogewogICAgIEFTU0VSVF9BUkcod2ViRnJhbWUs
IHdlYkZyYW1lKTsKQEAgLTg5LDYgKzExMywxMSBAQCBXZWJGcmFtZUxvYWRlckNsaWVudDo6V2Vi
RnJhbWVMb2FkZXJDbGllCiAKIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp+V2ViRnJhbWVMb2FkZXJD
bGllbnQoKQogeworICAgIGRlbGV0ZSBtX3BvbGljeUxpc3RlbmVyUHJpdmF0ZTsKK30KKwordm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZnJhbWVMb2FkZXJEZXN0cm95ZWQoKQorewogfQogCiBi
b29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpoYXNXZWJWaWV3KCkgY29uc3QKQEAgLTk2LDYgKzEy
NSwxMSBAQCBib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpoYXNXZWJWaWV3KCkKICAgICByZXR1
cm4gbV93ZWJGcmFtZS0+d2ViVmlldygpOwogfQogCit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjptYWtlUmVwcmVzZW50YXRpb24oRG9jdW1lbnRMb2FkZXIqKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmZvcmNlTGF5b3V0KCkKIHsK
ICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKG1fd2ViRnJhbWUpOwpAQCAtMTEzLDYgKzE0Nyw1MSBA
QCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpmb3JjZUxheW91dCgpCiAgICAgdmlldy0+Zm9y
Y2VMYXlvdXQodHJ1ZSk7CiB9CiAKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmZvcmNlTGF5
b3V0Rm9yTm9uSFRNTCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJG
cmFtZUxvYWRlckNsaWVudDo6c2V0Q29waWVzT25TY3JvbGwoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRldGFjaGVkRnJvbVBhcmVu
dDIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmRldGFjaGVkRnJvbVBhcmVudDMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9E
b3dubG9hZChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIsIGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAg
Q09NUHRyPElXZWJEb3dubG9hZERlbGVnYXRlPiBkb3dubG9hZERlbGVnYXRlOworICAgIENPTVB0
cjxJV2ViVmlldz4gd2ViVmlldzsKKyAgICBpZiAoU1VDQ0VFREVEKG1fd2ViRnJhbWUtPndlYlZp
ZXcoJndlYlZpZXcpKSkgeworICAgICAgICBpZiAoRkFJTEVEKHdlYlZpZXctPmRvd25sb2FkRGVs
ZWdhdGUoJmRvd25sb2FkRGVsZWdhdGUpKSkgeworICAgICAgICAgICAgLy8gSWYgdGhlIFdlYlZp
ZXcgZG9lc24ndCBzdWNjZXNzZnVsbHkgcHJvdmlkZSBhIGRvd25sb2FkIGRlbGVnYXRlIHdlJ2xs
IHBhc3MgYSBudWxsIG9uZQorICAgICAgICAgICAgLy8gaW50byB0aGUgV2ViRG93bmxvYWQgLSB3
aGljaCBtYXkgb3IgbWF5IG5vdCBkZWNpZGUgdG8gdXNlIGEgRGVmYXVsdERvd25sb2FkRGVsZWdh
dGUKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGdldCBkb3dubG9hZERlbGVnYXRl
IGZyb20gV2ViVmlldyIpOworICAgICAgICAgICAgZG93bmxvYWREZWxlZ2F0ZSA9IDA7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBJdHMgdGhlIGRlbGVnYXRlJ3Mgam9iIHRvIHJlZiB0aGUg
V2ViRG93bmxvYWQgdG8ga2VlcCBpdCBhbGl2ZSAtIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRlc3Ry
b3llZAorICAgIC8vIHdoZW4gdGhpcyBtZXRob2QgcmV0dXJucworICAgIENPTVB0cjxXZWJEb3du
bG9hZD4gZG93bmxvYWQ7CisgICAgZG93bmxvYWQuYWRvcHRSZWYoV2ViRG93bmxvYWQ6OmNyZWF0
ZUluc3RhbmNlKGRvY3VtZW50TG9hZGVyLT5tYWluUmVzb3VyY2VMb2FkZXIoKS0+aGFuZGxlKCks
IHJlcXVlc3QsIHJlc3BvbnNlLCBkb3dubG9hZERlbGVnYXRlLmdldCgpKSk7Cit9CisKK2Jvb2wg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNh
Y2hlKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYsIGludCAvKmxlbmd0aCovKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojphc3NpZ25J
ZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3Vt
ZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAg
ICBXZWJWaWV3KiB3ZWJWaWV3ID0gbV93ZWJGcmFtZS0+d2ViVmlldygpOwpAQCAtMzk2LDYgKzQ3
NSwyOCBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENvCiAgICAgICAg
IGZyYW1lTG9hZERlbGVnYXRlLT5kaWRDb21taXRMb2FkRm9yRnJhbWUod2ViVmlldywgbV93ZWJG
cmFtZSk7CiB9CiAKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmFpbFBy
b3Zpc2lvbmFsTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBXZWJWaWV3
KiB3ZWJWaWV3ID0gbV93ZWJGcmFtZS0+d2ViVmlldygpOworICAgIENPTVB0cjxJV2ViRnJhbWVM
b2FkRGVsZWdhdGU+IGZyYW1lTG9hZERlbGVnYXRlOworICAgIGlmIChTVUNDRUVERUQod2ViVmll
dy0+ZnJhbWVMb2FkRGVsZWdhdGUoJmZyYW1lTG9hZERlbGVnYXRlKSkpIHsKKyAgICAgICAgQ09N
UHRyPElXZWJFcnJvcj4gd2ViRXJyb3I7CisgICAgICAgIHdlYkVycm9yLmFkb3B0UmVmKFdlYkVy
cm9yOjpjcmVhdGVJbnN0YW5jZShlcnJvcikpOworICAgICAgICBmcmFtZUxvYWREZWxlZ2F0ZS0+
ZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvcih3ZWJWaWV3LCB3ZWJFcnJvci5nZXQoKSwg
bV93ZWJGcmFtZSk7CisgICAgfQorfQorCit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNw
YXRjaERpZEZhaWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIFdlYlZp
ZXcqIHdlYlZpZXcgPSBtX3dlYkZyYW1lLT53ZWJWaWV3KCk7CisgICAgQ09NUHRyPElXZWJGcmFt
ZUxvYWREZWxlZ2F0ZT4gZnJhbWVMb2FkRGVsZWdhdGU7CisgICAgaWYgKFNVQ0NFRURFRCh3ZWJW
aWV3LT5mcmFtZUxvYWREZWxlZ2F0ZSgmZnJhbWVMb2FkRGVsZWdhdGUpKSkgeworICAgICAgICBD
T01QdHI8SVdlYkVycm9yPiB3ZWJFcnJvcjsKKyAgICAgICAgd2ViRXJyb3IuYWRvcHRSZWYoV2Vi
RXJyb3I6OmNyZWF0ZUluc3RhbmNlKGVycm9yKSk7CisgICAgICAgIGZyYW1lTG9hZERlbGVnYXRl
LT5kaWRGYWlsTG9hZFdpdGhFcnJvcih3ZWJWaWV3LCB3ZWJFcnJvci5nZXQoKSwgbV93ZWJGcmFt
ZSk7CisgICAgfQorfQorCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZp
bmlzaERvY3VtZW50TG9hZCgpCiB7CiAgICAgV2ViVmlldyogd2ViVmlldyA9IG1fd2ViRnJhbWUt
PndlYlZpZXcoKTsKQEAgLTQ1Nyw2ICs1NTgsMTA4IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmRpc3BhdGNoU2hvdygKICAgICAgICAgdWktPndlYlZpZXdTaG93KHdlYlZpZXcpOwogfQog
Cit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvclJlc3Bv
bnNlKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgV2ViVmll
dyogd2ViVmlldyA9IG1fd2ViRnJhbWUtPndlYlZpZXcoKTsKKyAgICBGcmFtZSogY29yZUZyYW1l
ID0gY29yZShtX3dlYkZyYW1lKTsKKyAgICBBU1NFUlQoY29yZUZyYW1lKTsKKworICAgIENPTVB0
cjxJV2ViUG9saWN5RGVsZWdhdGU+IHBvbGljeURlbGVnYXRlOworICAgIGlmIChGQUlMRUQod2Vi
Vmlldy0+cG9saWN5RGVsZWdhdGUoJnBvbGljeURlbGVnYXRlKSkpCisgICAgICAgIHBvbGljeURl
bGVnYXRlID0gRGVmYXVsdFBvbGljeURlbGVnYXRlOjpzaGFyZWRJbnN0YW5jZSgpOworCisgICAg
Q09NUHRyPElXZWJVUkxSZXF1ZXN0PiB1cmxSZXF1ZXN0KEFkb3B0Q09NLCBXZWJNdXRhYmxlVVJM
UmVxdWVzdDo6Y3JlYXRlSW5zdGFuY2UocmVxdWVzdCkpOworCisgICAgaWYgKFNVQ0NFRURFRChw
b2xpY3lEZWxlZ2F0ZS0+ZGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUod2ViVmlldywgQlN0cmluZyhy
ZXNwb25zZS5taW1lVHlwZSgpKSwgdXJsUmVxdWVzdC5nZXQoKSwgbV93ZWJGcmFtZSwgc2V0VXBQ
b2xpY3lMaXN0ZW5lcihmdW5jdGlvbikuZ2V0KCkpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
KGNvcmVGcmFtZS0+bG9hZGVyKCkucG9saWN5Q2hlY2tlcigpLT4qZnVuY3Rpb24pKFBvbGljeVVz
ZSk7Cit9CisKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5
Rm9yTmV3V2luZG93QWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IE5h
dmlnYXRpb25BY3Rpb24mIGFjdGlvbiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBQ
YXNzUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlLCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSkK
K3sKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gbV93ZWJGcmFtZS0+d2ViVmlldygpOworICAgIEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKG1fd2ViRnJhbWUpOworICAgIEFTU0VSVChjb3JlRnJhbWUp
OworCisgICAgQ09NUHRyPElXZWJQb2xpY3lEZWxlZ2F0ZT4gcG9saWN5RGVsZWdhdGU7CisgICAg
aWYgKEZBSUxFRCh3ZWJWaWV3LT5wb2xpY3lEZWxlZ2F0ZSgmcG9saWN5RGVsZWdhdGUpKSkKKyAg
ICAgICAgcG9saWN5RGVsZWdhdGUgPSBEZWZhdWx0UG9saWN5RGVsZWdhdGU6OnNoYXJlZEluc3Rh
bmNlKCk7CisKKyAgICBDT01QdHI8SVdlYlVSTFJlcXVlc3Q+IHVybFJlcXVlc3QoQWRvcHRDT00s
IFdlYk11dGFibGVVUkxSZXF1ZXN0OjpjcmVhdGVJbnN0YW5jZShyZXF1ZXN0KSk7CisgICAgQ09N
UHRyPFdlYkFjdGlvblByb3BlcnR5QmFnPiBhY3Rpb25JbmZvcm1hdGlvbihBZG9wdENPTSwgV2Vi
QWN0aW9uUHJvcGVydHlCYWc6OmNyZWF0ZUluc3RhbmNlKGFjdGlvbiwgZm9ybVN0YXRlID8gZm9y
bVN0YXRlLT5mb3JtKCkgOiAwLCBjb3JlRnJhbWUpKTsKKworICAgIGlmIChTVUNDRUVERUQocG9s
aWN5RGVsZWdhdGUtPmRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbih3ZWJWaWV3LCBhY3Rp
b25JbmZvcm1hdGlvbi5nZXQoKSwgdXJsUmVxdWVzdC5nZXQoKSwgQlN0cmluZyhmcmFtZU5hbWUp
LCBzZXRVcFBvbGljeUxpc3RlbmVyKGZ1bmN0aW9uKS5nZXQoKSkpKQorICAgICAgICByZXR1cm47
CisKKyAgICAoY29yZUZyYW1lLT5sb2FkZXIoKS5wb2xpY3lDaGVja2VyKCktPipmdW5jdGlvbiko
UG9saWN5VXNlKTsKK30KKwordm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24s
IGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mIGFjdGlvbiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlKQoreworICAgIFdlYlZpZXcq
IHdlYlZpZXcgPSBtX3dlYkZyYW1lLT53ZWJWaWV3KCk7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUobV93ZWJGcmFtZSk7CisgICAgQVNTRVJUKGNvcmVGcmFtZSk7CisKKyAgICBDT01QdHI8
SVdlYlBvbGljeURlbGVnYXRlPiBwb2xpY3lEZWxlZ2F0ZTsKKyAgICBpZiAoRkFJTEVEKHdlYlZp
ZXctPnBvbGljeURlbGVnYXRlKCZwb2xpY3lEZWxlZ2F0ZSkpKQorICAgICAgICBwb2xpY3lEZWxl
Z2F0ZSA9IERlZmF1bHRQb2xpY3lEZWxlZ2F0ZTo6c2hhcmVkSW5zdGFuY2UoKTsKKworICAgIENP
TVB0cjxJV2ViVVJMUmVxdWVzdD4gdXJsUmVxdWVzdChBZG9wdENPTSwgV2ViTXV0YWJsZVVSTFJl
cXVlc3Q6OmNyZWF0ZUluc3RhbmNlKHJlcXVlc3QpKTsKKyAgICBDT01QdHI8V2ViQWN0aW9uUHJv
cGVydHlCYWc+IGFjdGlvbkluZm9ybWF0aW9uKEFkb3B0Q09NLCBXZWJBY3Rpb25Qcm9wZXJ0eUJh
Zzo6Y3JlYXRlSW5zdGFuY2UoYWN0aW9uLCBmb3JtU3RhdGUgPyBmb3JtU3RhdGUtPmZvcm0oKSA6
IDAsIGNvcmVGcmFtZSkpOworCisgICAgaWYgKFNVQ0NFRURFRChwb2xpY3lEZWxlZ2F0ZS0+ZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbih3ZWJWaWV3LCBhY3Rpb25JbmZvcm1hdGlvbi5n
ZXQoKSwgdXJsUmVxdWVzdC5nZXQoKSwgbV93ZWJGcmFtZSwgc2V0VXBQb2xpY3lMaXN0ZW5lcihm
dW5jdGlvbikuZ2V0KCkpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgKGNvcmVGcmFtZS0+bG9h
ZGVyKCkucG9saWN5Q2hlY2tlcigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7Cit9CisKK3ZvaWQg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoVW5hYmxlVG9JbXBsZW1lbnRQb2xpY3koY29u
c3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgV2ViVmlldyogd2ViVmlldyA9IG1fd2Vi
RnJhbWUtPndlYlZpZXcoKTsKKyAgICBDT01QdHI8SVdlYlBvbGljeURlbGVnYXRlPiBwb2xpY3lE
ZWxlZ2F0ZTsKKyAgICBpZiAoRkFJTEVEKHdlYlZpZXctPnBvbGljeURlbGVnYXRlKCZwb2xpY3lE
ZWxlZ2F0ZSkpKQorICAgICAgICBwb2xpY3lEZWxlZ2F0ZSA9IERlZmF1bHRQb2xpY3lEZWxlZ2F0
ZTo6c2hhcmVkSW5zdGFuY2UoKTsKKworICAgIENPTVB0cjxJV2ViRXJyb3I+IHdlYkVycm9yKEFk
b3B0Q09NLCBXZWJFcnJvcjo6Y3JlYXRlSW5zdGFuY2UoZXJyb3IpKTsKKyAgICBwb2xpY3lEZWxl
Z2F0ZS0+dW5hYmxlVG9JbXBsZW1lbnRQb2xpY3lXaXRoRXJyb3Iod2ViVmlldywgd2ViRXJyb3Iu
Z2V0KCksIG1fd2ViRnJhbWUpOworfQorCit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNw
YXRjaFdpbGxTZW5kU3VibWl0RXZlbnQoUGFzc1JlZlB0cjxXZWJDb3JlOjpGb3JtU3RhdGU+KQor
eworfQorCit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTdWJtaXRGb3Jt
KEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24sIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBmb3Jt
U3RhdGUpCit7CisgICAgV2ViVmlldyogd2ViVmlldyA9IG1fd2ViRnJhbWUtPndlYlZpZXcoKTsK
KyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShtX3dlYkZyYW1lKTsKKyAgICBBU1NFUlQoY29y
ZUZyYW1lKTsKKworICAgIENPTVB0cjxJV2ViRm9ybURlbGVnYXRlPiBmb3JtRGVsZWdhdGU7CisK
KyAgICBpZiAoRkFJTEVEKHdlYlZpZXctPmZvcm1EZWxlZ2F0ZSgmZm9ybURlbGVnYXRlKSkpIHsK
KyAgICAgICAgKGNvcmVGcmFtZS0+bG9hZGVyKCkucG9saWN5Q2hlY2tlcigpLT4qZnVuY3Rpb24p
KFBvbGljeVVzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDT01QdHI8SURPTUVs
ZW1lbnQ+IGZvcm1FbGVtZW50KEFkb3B0Q09NLCBET01FbGVtZW50OjpjcmVhdGVJbnN0YW5jZShm
b3JtU3RhdGUtPmZvcm0oKSkpOworCisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gZm9ybVZh
bHVlc01hcDsKKyAgICBjb25zdCBTdHJpbmdQYWlyVmVjdG9yJiB0ZXh0RmllbGRWYWx1ZXMgPSBm
b3JtU3RhdGUtPnRleHRGaWVsZFZhbHVlcygpOworICAgIHNpemVfdCBzaXplID0gdGV4dEZpZWxk
VmFsdWVzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAg
ICAgICAgZm9ybVZhbHVlc01hcC5hZGQodGV4dEZpZWxkVmFsdWVzW2ldLmZpcnN0LCB0ZXh0Rmll
bGRWYWx1ZXNbaV0uc2Vjb25kKTsKKworICAgIENPTVB0cjxJUHJvcGVydHlCYWc+IGZvcm1WYWx1
ZXNQcm9wZXJ0eUJhZyhBZG9wdENPTSwgQ09NUHJvcGVydHlCYWc8U3RyaW5nPjo6Y3JlYXRlSW5z
dGFuY2UoZm9ybVZhbHVlc01hcCkpOworCisgICAgQ09NUHRyPFdlYkZyYW1lPiBzb3VyY2VGcmFt
ZShraXQoZm9ybVN0YXRlLT5zb3VyY2VEb2N1bWVudCgpLT5mcmFtZSgpKSk7CisgICAgaWYgKFNV
Q0NFRURFRChmb3JtRGVsZWdhdGUtPndpbGxTdWJtaXRGb3JtKG1fd2ViRnJhbWUsIHNvdXJjZUZy
YW1lLmdldCgpLCBmb3JtRWxlbWVudC5nZXQoKSwgZm9ybVZhbHVlc1Byb3BlcnR5QmFnLmdldCgp
LCBzZXRVcFBvbGljeUxpc3RlbmVyKGZ1bmN0aW9uKS5nZXQoKSkpKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBGSVhNRTogQWRkIGEgc2FuZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgICAg
KGNvcmVGcmFtZS0+bG9hZGVyKCkucG9saWN5Q2hlY2tlcigpLT4qZnVuY3Rpb24pKFBvbGljeVVz
ZSk7Cit9CisKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5Eb2N1bWVudEVycm9y
KERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CiAgICAgaWYg
KCFtX21hbnVhbExvYWRlcikKQEAgLTQ4OCw2ICs2OTEsMjEgQEAgdm9pZCBXZWJGcmFtZUxvYWRl
ckNsaWVudDo6cG9zdFByb2dyZXNzRgogICAgIG5vdGlmeUNlbnRlci0+cG9zdE5vdGlmaWNhdGlv
bk5hbWUocHJvZ3Jlc3NGaW5pc2hlZE5hbWUsIHN0YXRpY19jYXN0PElXZWJWaWV3Kj4obV93ZWJG
cmFtZS0+d2ViVmlldygpKSwgMCk7CiB9CiAKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnN0
YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdHJpbmcm
IC8qIHN1Z2dlc3RlZE5hbWUgKi8pCit7CisgICAgbV93ZWJGcmFtZS0+d2ViVmlldygpLT5kb3du
bG9hZFVSTChyZXF1ZXN0LnVybCgpKTsKK30KKwordm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
d2lsbENoYW5nZVRpdGxlKERvY3VtZW50TG9hZGVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRDaGFuZ2VUaXRsZShEb2N1bWVu
dExvYWRlciopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6Y29tbWl0dGVkTG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewogICAgIGlmICghbV9tYW51YWxMb2FkZXIpCkBAIC02
NDksNiArODY3LDExNiBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaWREZXRlY3RYU1Mo
CiAgICAgLy8gRklYTUU6IHByb3BvZ2F0ZSBjYWxsIGludG8gdGhlIHByaXZhdGUgZGVsZWdhdGUu
CiB9CiAKK1Jlc291cmNlRXJyb3IgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNhbmNlbGxlZEVycm9y
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICAvLyBGSVhNRTogTmVlZCBD
aGlja2VuQ2F0IHRvIGluY2x1ZGUgQ0ZOZXR3b3JrL0NGVVJMRXJyb3IuaCB0byBnZXQgdGhlc2Ug
dmFsdWVzCisgICAgLy8gQWx0ZXJuYXRpdmVseSwgd2UgY291bGQgY3JlYXRlIG91ciBvd24gZXJy
b3IgZG9tYWluL2NvZGVzLgorICAgIHJldHVybiBSZXNvdXJjZUVycm9yKFN0cmluZyhXZWJVUkxF
cnJvckRvbWFpbiksIC05OTksIHJlcXVlc3QudXJsKCkuc3RyaW5nKCksIFN0cmluZygpKTsKK30K
KworUmVzb3VyY2VFcnJvciBXZWJGcmFtZUxvYWRlckNsaWVudDo6YmxvY2tlZEVycm9yKGNvbnN0
IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byBpbXBs
ZW1lbnQgdGhlIFN0cmluZyBkZXNjcmlwdGlvbnMgZm9yIGVycm9ycyBpbiB0aGUgV2ViS2l0RXJy
b3JEb21haW4gYW5kIGhhdmUgdGhlbSBsb2NhbGl6ZWQKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJv
cihTdHJpbmcoV2ViS2l0RXJyb3JEb21haW4pLCBXZWJLaXRFcnJvckNhbm5vdFVzZVJlc3RyaWN0
ZWRQb3J0LCByZXF1ZXN0LnVybCgpLnN0cmluZygpLCBTdHJpbmcoKSk7Cit9CisKK1Jlc291cmNl
RXJyb3IgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgLy8gRklYTUU6IE5lZWQgdG8gaW1wbGVtZW50
IHRoZSBTdHJpbmcgZGVzY3JpcHRpb25zIGZvciBlcnJvcnMgaW4gdGhlIFdlYktpdEVycm9yRG9t
YWluIGFuZCBoYXZlIHRoZW0gbG9jYWxpemVkCisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoU3Ry
aW5nKFdlYktpdEVycm9yRG9tYWluKSwgV2ViS2l0RXJyb3JDYW5ub3RTaG93VVJMLCByZXF1ZXN0
LnVybCgpLnN0cmluZygpLCBTdHJpbmcoKSk7Cit9CisKK1Jlc291cmNlRXJyb3IgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmludGVycnVwdGVkRm9yUG9saWN5Q2hhbmdlRXJyb3IoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIC8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCB0
aGUgU3RyaW5nIGRlc2NyaXB0aW9ucyBmb3IgZXJyb3JzIGluIHRoZSBXZWJLaXRFcnJvckRvbWFp
biBhbmQgaGF2ZSB0aGVtIGxvY2FsaXplZAorICAgIHJldHVybiBSZXNvdXJjZUVycm9yKFN0cmlu
ZyhXZWJLaXRFcnJvckRvbWFpbiksIFdlYktpdEVycm9yRnJhbWVMb2FkSW50ZXJydXB0ZWRCeVBv
bGljeUNoYW5nZSwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSwgU3RyaW5nKCkpOworfQorCitSZXNv
dXJjZUVycm9yIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5ub3RTaG93TUlNRVR5cGVFcnJvcihj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBSZXNvdXJjZUVycm9yKCk7Cit9CisKK1Jlc291cmNlRXJyb3IgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmZpbGVEb2VzTm90RXhpc3RFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7Cit9CisK
K1Jlc291cmNlRXJyb3IgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnBsdWdpbldpbGxIYW5kbGVMb2Fk
RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgcmV0dXJuIFJl
c291cmNlRXJyb3IoU3RyaW5nKFdlYktpdEVycm9yRG9tYWluKSwgV2ViS2l0RXJyb3JQbHVnSW5X
aWxsSGFuZGxlTG9hZCwgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCksIFN0cmluZygpKTsKK30KKwor
Ym9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6c2hvdWxkRmFsbEJhY2soY29uc3QgUmVzb3VyY2VF
cnJvciYgZXJyb3IpCit7CisgICAgaWYgKGVycm9yLmVycm9yQ29kZSgpID09IFdlYlVSTEVycm9y
Q2FuY2VsbGVkICYmIGVycm9yLmRvbWFpbigpID09IFN0cmluZyhXZWJVUkxFcnJvckRvbWFpbikp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChlcnJvci5lcnJvckNvZGUoKSA9PSBX
ZWJLaXRFcnJvclBsdWdJbldpbGxIYW5kbGVMb2FkICYmIGVycm9yLmRvbWFpbigpID09IFN0cmlu
ZyhXZWJLaXRFcnJvckRvbWFpbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5IYW5kbGVSZXF1ZXN0
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2Vi
Vmlldzo6Y2FuSGFuZGxlUmVxdWVzdChyZXF1ZXN0KTsKK30KKworYm9vbCBXZWJGcmFtZUxvYWRl
ckNsaWVudDo6Y2FuU2hvd01JTUVUeXBlKGNvbnN0IFN0cmluZyYgLypNSU1FVHlwZSovKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNhblNob3dNSU1FVHlwZUFzSFRNTChjb25zdCBTdHJpbmcm
IC8qTUlNRVR5cGUqLykgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZXByZXNlbnRhdGlvbkV4
aXN0c0ZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIC8qVVJMU2NoZW1lKi8pIGNvbnN0Cit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBXZWJG
cmFtZUxvYWRlckNsaWVudDo6Z2VuZXJhdGVkTUlNRVR5cGVGb3JVUkxTY2hlbWUoY29uc3QgU3Ry
aW5nJiAvKlVSTFNjaGVtZSovKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit2b2lkIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpmcmFtZUxvYWRDb21wbGV0ZWQoKQoreworfQorCit2b2lkIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpzYXZlVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVtKikKK3sK
K30KKwordm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVzdG9yZVZpZXdTdGF0ZSgpCit7Cit9
CisKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmRpZEZpbmlzaExvYWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OnByZXBhcmVGb3JEYXRhU291cmNlUmVwbGFjZW1lbnQoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIFBhc3NSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVEb2N1bWVudExvYWRlcihjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJiBzdWJzdGl0dXRlRGF0YSkKIHsK
ICAgICBSZWZQdHI8V2ViRG9jdW1lbnRMb2FkZXI+IGxvYWRlciA9IFdlYkRvY3VtZW50TG9hZGVy
OjpjcmVhdGUocmVxdWVzdCwgc3Vic3RpdHV0ZURhdGEpOwpAQCAtNzM2LDYgKzEwNjQsMTEgQEAg
dm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRCZQogewogfQogCitTdHJpbmcg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OnVzZXJBZ2VudChjb25zdCBLVVJMJiB1cmwpCit7CisgICAg
cmV0dXJuIG1fd2ViRnJhbWUtPndlYlZpZXcoKS0+dXNlckFnZW50Rm9yS1VSTCh1cmwpOworfQor
CiBib29sIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5DYWNoZVBhZ2UoKSBjb25zdAogewogICAg
IHJldHVybiB0cnVlOwpAQCAtNzcyLDYgKzExMDUsMTEgQEAgUGFzc1JlZlB0cjxGcmFtZT4gV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OgogICAgIHJldHVybiBjaGlsZEZyYW1lLnJlbGVhc2UoKTsKIH0K
IAorT2JqZWN0Q29udGVudFR5cGUgV2ViRnJhbWVMb2FkZXJDbGllbnQ6Om9iamVjdENvbnRlbnRU
eXBlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBzaG91bGRQ
cmVmZXJQbHVnSW5zRm9ySW1hZ2VzKQoreworICAgIHJldHVybiBXZWJDb3JlOjpGcmFtZUxvYWRl
cjo6ZGVmYXVsdE9iamVjdENvbnRlbnRUeXBlKHVybCwgbWltZVR5cGUsIHNob3VsZFByZWZlclBs
dWdJbnNGb3JJbWFnZXMpOworfQorCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRj
aERpZEZhaWxUb1N0YXJ0UGx1Z2luKGNvbnN0IFBsdWdpblZpZXcqIHBsdWdpblZpZXcpIGNvbnN0
CiB7CiAgICAgV2ViVmlldyogd2ViVmlldyA9IG1fd2ViRnJhbWUtPndlYlZpZXcoKTsKQEAgLTg4
NCw2ICsxMjIyLDMyIEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnJlZGlyZWN0RGF0YVQK
ICAgICAgICAgbV9tYW51YWxMb2FkZXIgPSBzdGF0aWNfY2FzdDxFbWJlZGRlZFdpZGdldCo+KHBs
dWdpbldpZGdldCk7CiB9CiAKK1Bhc3NSZWZQdHI8V2lkZ2V0PiBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBIVE1M
QXBwbGV0RWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgLypiYXNlVVJMKi8sIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1
ZXMpCit7CisgICAgUmVmUHRyPFBsdWdpblZpZXc+IHBsdWdpblZpZXcgPSBQbHVnaW5WaWV3Ojpj
cmVhdGUoY29yZShtX3dlYkZyYW1lKSwgcGx1Z2luU2l6ZSwgZWxlbWVudCwgS1VSTCgpLCBwYXJh
bU5hbWVzLCBwYXJhbVZhbHVlcywgImFwcGxpY2F0aW9uL3gtamF2YS1hcHBsZXQiLCBmYWxzZSk7
CisKKyAgICAvLyBDaGVjayBpZiB0aGUgcGx1Z2luIGNhbiBiZSBsb2FkZWQgc3VjY2Vzc2Z1bGx5
CisgICAgaWYgKHBsdWdpblZpZXctPnBsdWdpbigpICYmIHBsdWdpblZpZXctPnBsdWdpbigpLT5s
b2FkKCkpCisgICAgICAgIHJldHVybiBwbHVnaW5WaWV3OworCisgICAgV2ViVmlldyogd2ViVmll
dyA9IG1fd2ViRnJhbWUtPndlYlZpZXcoKTsKKyAgICBDT01QdHI8SVdlYlJlc291cmNlTG9hZERl
bGVnYXRlPiByZXNvdXJjZUxvYWREZWxlZ2F0ZTsKKyAgICBpZiAoRkFJTEVEKHdlYlZpZXctPnJl
c291cmNlTG9hZERlbGVnYXRlKCZyZXNvdXJjZUxvYWREZWxlZ2F0ZSkpKQorICAgICAgICByZXR1
cm4gcGx1Z2luVmlldzsKKworICAgIENPTVB0cjxDRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZz4gdXNl
ckluZm9CYWcgPSBDRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZzo6Y3JlYXRlSW5zdGFuY2UoKTsKKwor
ICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihTdHJpbmcoV2ViS2l0RXJyb3JEb21haW4p
LCBXZWJLaXRFcnJvckphdmFVbmF2YWlsYWJsZSwgU3RyaW5nKCksIFN0cmluZygpKTsKKyAgICBD
T01QdHI8SVdlYkVycm9yPiBlcnJvcihBZG9wdENPTSwgV2ViRXJyb3I6OmNyZWF0ZUluc3RhbmNl
KHJlc291cmNlRXJyb3IsIHVzZXJJbmZvQmFnLmdldCgpKSk7CisKKyAgICBGcmFtZSogY29yZUZy
YW1lID0gY29yZShtX3dlYkZyYW1lKTsKKyAgICBBU1NFUlQoY29yZUZyYW1lKTsKKworICAgIHJl
c291cmNlTG9hZERlbGVnYXRlLT5wbHVnSW5GYWlsZWRXaXRoRXJyb3Iod2ViVmlldywgZXJyb3Iu
Z2V0KCksIGdldFdlYkRhdGFTb3VyY2UoY29yZUZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRl
cigpKSk7CisKKyAgICByZXR1cm4gcGx1Z2luVmlldzsKK30KKwogV2ViSGlzdG9yeSogV2ViRnJh
bWVMb2FkZXJDbGllbnQ6OndlYkhpc3RvcnkoKSBjb25zdAogewogICAgIGlmIChtX3dlYkZyYW1l
ICE9IG1fd2ViRnJhbWUtPndlYlZpZXcoKS0+dG9wTGV2ZWxGcmFtZSgpKQpAQCAtODkyLDYgKzEy
NTYsNzYgQEAgV2ViSGlzdG9yeSogV2ViRnJhbWVMb2FkZXJDbGllbnQ6OndlYkhpcwogICAgIHJl
dHVybiBXZWJIaXN0b3J5OjpzaGFyZWRIaXN0b3J5KCk7CiB9CiAKKworU3RyaW5nIFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpvdmVycmlkZU1lZGlhVHlwZSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmRvY3VtZW50RWxlbWVudEF2YWlsYWJsZSgpCit7Cit9CisKK3ZvaWQgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKERPTVdyYXBw
ZXJXb3JsZCogd29ybGQpCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUobV93ZWJGcmFt
ZSk7CisgICAgQVNTRVJUKGNvcmVGcmFtZSk7CisKKyAgICBpZiAoIWNvcmVGcmFtZS0+c2V0dGlu
Z3MoKS5pc1NjcmlwdEVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViVmlldyog
d2ViVmlldyA9IG1fd2ViRnJhbWUtPndlYlZpZXcoKTsKKyAgICBDT01QdHI8SVdlYkZyYW1lTG9h
ZERlbGVnYXRlPiBmcmFtZUxvYWREZWxlZ2F0ZTsKKyAgICBpZiAoRkFJTEVEKHdlYlZpZXctPmZy
YW1lTG9hZERlbGVnYXRlKCZmcmFtZUxvYWREZWxlZ2F0ZSkpKQorICAgICAgICByZXR1cm47CisK
KyAgICBDT01QdHI8SVdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZTI+IGRlbGVnYXRlUHJpdmF0
ZShRdWVyeSwgZnJhbWVMb2FkRGVsZWdhdGUpOworICAgIGlmIChkZWxlZ2F0ZVByaXZhdGUgJiYg
ZGVsZWdhdGVQcml2YXRlLT5kaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lSW5TY3JpcHRXb3Js
ZCh3ZWJWaWV3LCBtX3dlYkZyYW1lLCBXZWJTY3JpcHRXb3JsZDo6ZmluZE9yQ3JlYXRlV29ybGQo
d29ybGQpLmdldCgpKSAhPSBFX05PVElNUEwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh3
b3JsZCAhPSBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
SlNDb250ZXh0UmVmIGNvbnRleHQgPSB0b1JlZihjb3JlRnJhbWUtPnNjcmlwdCgpLmdsb2JhbE9i
amVjdCh3b3JsZCktPmdsb2JhbEV4ZWMoKSk7CisgICAgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0
ID0gdG9SZWYoY29yZUZyYW1lLT5zY3JpcHQoKS5nbG9iYWxPYmplY3Qod29ybGQpKTsKKyAgICBB
U1NFUlQod2luZG93T2JqZWN0KTsKKworICAgIGlmIChGQUlMRUQoZnJhbWVMb2FkRGVsZWdhdGUt
PmRpZENsZWFyV2luZG93T2JqZWN0KHdlYlZpZXcsIGNvbnRleHQsIHdpbmRvd09iamVjdCwgbV93
ZWJGcmFtZSkpKQorICAgICAgICBmcmFtZUxvYWREZWxlZ2F0ZS0+d2luZG93U2NyaXB0T2JqZWN0
QXZhaWxhYmxlKHdlYlZpZXcsIGNvbnRleHQsIHdpbmRvd09iamVjdCk7Cit9CisKK3ZvaWQgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29sIGxpc3Rl
bikKK3sKKyAgICBtX3dlYkZyYW1lLT53ZWJWaWV3KCktPnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNh
dGlvbihsaXN0ZW4pOworfQorCit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRQZXJmb3Jt
Rmlyc3ROYXZpZ2F0aW9uKCkgY29uc3QKK3sKKyAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzPiBw
cmVmZXJlbmNlczsKKyAgICBpZiAoRkFJTEVEKG1fd2ViRnJhbWUtPndlYlZpZXcoKS0+cHJlZmVy
ZW5jZXMoJnByZWZlcmVuY2VzKSkpCisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0cjxJV2Vi
UHJlZmVyZW5jZXNQcml2YXRlPiBwcmVmZXJlbmNlc1ByaXZhdGUoUXVlcnksIHByZWZlcmVuY2Vz
KTsKKyAgICBpZiAoIXByZWZlcmVuY2VzUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIEJP
T0wgYXV0b21hdGljYWxseURldGVjdHNDYWNoZU1vZGVsOworICAgIGlmIChGQUlMRUQocHJlZmVy
ZW5jZXNQcml2YXRlLT5hdXRvbWF0aWNhbGx5RGV0ZWN0c0NhY2hlTW9kZWwoJmF1dG9tYXRpY2Fs
bHlEZXRlY3RzQ2FjaGVNb2RlbCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJDYWNoZU1v
ZGVsIGNhY2hlTW9kZWw7CisgICAgaWYgKEZBSUxFRChwcmVmZXJlbmNlcy0+Y2FjaGVNb2RlbCgm
Y2FjaGVNb2RlbCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0b21hdGljYWxseURl
dGVjdHNDYWNoZU1vZGVsICYmIGNhY2hlTW9kZWwgPCBXZWJDYWNoZU1vZGVsRG9jdW1lbnRCcm93
c2VyKQorICAgICAgICBwcmVmZXJlbmNlcy0+c2V0Q2FjaGVNb2RlbChXZWJDYWNoZU1vZGVsRG9j
dW1lbnRCcm93c2VyKTsKK30KKworUGFzc1JlZlB0cjxGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlTmV0d29ya2luZ0NvbnRleHQoKQoreworICAgIHJl
dHVybiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0OjpjcmVhdGUoY29yZShtX3dlYkZyYW1lKSwg
dXNlckFnZW50KG1fd2ViRnJhbWUtPnVybCgpKSk7Cit9CisKIGJvb2wgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OnNob3VsZEFsd2F5c1VzZVBsdWdpbkRvY3VtZW50KGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpIGNvbnN0CiB7CiAgICAgV2ViVmlldyogd2ViVmlldyA9IG1fd2ViRnJhbWUtPndlYlZpZXco
KTsKQEAgLTkwMCwzICsxMzM0LDU1IEBAIGJvb2wgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNob3Vs
ZEFsd2F5c1UKIAogICAgIHJldHVybiB3ZWJWaWV3LT5zaG91bGRVc2VFbWJlZGRlZFZpZXcobWlt
ZVR5cGUpOwogfQorCit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZXZlcnRUb1Byb3Zpc2lv
bmFsU3RhdGUoRG9jdW1lbnRMb2FkZXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9v
bCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpjYW5jZWxQb2xpY3lDaGVjaygpCit7CisgICAgaWYgKG1fcG9saWN5TGlzdGVuZXJQcml2
YXRlLT5tX3BvbGljeUxpc3RlbmVyKSB7CisgICAgICAgIG1fcG9saWN5TGlzdGVuZXJQcml2YXRl
LT5tX3BvbGljeUxpc3RlbmVyLT5pbnZhbGlkYXRlKCk7CisgICAgICAgIG1fcG9saWN5TGlzdGVu
ZXJQcml2YXRlLT5tX3BvbGljeUxpc3RlbmVyID0gMDsKKyAgICB9CisKKyAgICBtX3BvbGljeUxp
c3RlbmVyUHJpdmF0ZS0+bV9wb2xpY3lGdW5jdGlvbiA9IDA7Cit9CisKK0NPTVB0cjxXZWJGcmFt
ZVBvbGljeUxpc3RlbmVyPiBXZWJGcmFtZUxvYWRlckNsaWVudDo6c2V0VXBQb2xpY3lMaXN0ZW5l
cihXZWJDb3JlOjpGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uKQoreworICAgIC8vIEZJWE1F
OiA8cmRhcjovLzU2MzQzODE+IFdlIG5lZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSBhY3RpdmUgcG9s
aWN5IGxpc3RlbmVycy4KKworICAgIGlmIChtX3BvbGljeUxpc3RlbmVyUHJpdmF0ZS0+bV9wb2xp
Y3lMaXN0ZW5lcikKKyAgICAgICAgbV9wb2xpY3lMaXN0ZW5lclByaXZhdGUtPm1fcG9saWN5TGlz
dGVuZXItPmludmFsaWRhdGUoKTsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKG1fd2Vi
RnJhbWUpOworICAgIEFTU0VSVChjb3JlRnJhbWUpOworCisgICAgbV9wb2xpY3lMaXN0ZW5lclBy
aXZhdGUtPm1fcG9saWN5TGlzdGVuZXIuYWRvcHRSZWYoV2ViRnJhbWVQb2xpY3lMaXN0ZW5lcjo6
Y3JlYXRlSW5zdGFuY2UoY29yZUZyYW1lKSk7CisgICAgbV9wb2xpY3lMaXN0ZW5lclByaXZhdGUt
Pm1fcG9saWN5RnVuY3Rpb24gPSBmdW5jdGlvbjsKKworICAgIHJldHVybiBtX3BvbGljeUxpc3Rl
bmVyUHJpdmF0ZS0+bV9wb2xpY3lMaXN0ZW5lcjsKK30KKwordm9pZCBXZWJGcmFtZUxvYWRlckNs
aWVudDo6cmVjZWl2ZWRQb2xpY3lEZWNpc2lvbihQb2xpY3lBY3Rpb24gYWN0aW9uKQoreworICAg
IEFTU0VSVChtX3BvbGljeUxpc3RlbmVyUHJpdmF0ZS0+bV9wb2xpY3lMaXN0ZW5lcik7CisgICAg
QVNTRVJUKG1fcG9saWN5TGlzdGVuZXJQcml2YXRlLT5tX3BvbGljeUZ1bmN0aW9uKTsKKworICAg
IEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24gPSBtX3BvbGljeUxpc3RlbmVyUHJpdmF0ZS0+
bV9wb2xpY3lGdW5jdGlvbjsKKworICAgIG1fcG9saWN5TGlzdGVuZXJQcml2YXRlLT5tX3BvbGlj
eUxpc3RlbmVyID0gMDsKKyAgICBtX3BvbGljeUxpc3RlbmVyUHJpdmF0ZS0+bV9wb2xpY3lGdW5j
dGlvbiA9IDA7CisKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShtX3dlYkZyYW1lKTsKKyAg
ICBBU1NFUlQoY29yZUZyYW1lKTsKKworICAgIChjb3JlRnJhbWUtPmxvYWRlcigpLnBvbGljeUNo
ZWNrZXIoKS0+KmZ1bmN0aW9uKShhY3Rpb24pOworfQpJbmRleDogU291cmNlL1dlYktpdC93aW4v
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCShyZXZp
c2lvbiAxNTQ0NTcpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWZuZGVmIFdlYkZyYW1lTG9hZGVyQ2xpZW50X2gKICNkZWZpbmUgV2Vi
RnJhbWVMb2FkZXJDbGllbnRfaAogCisjaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyQ2xpZW50Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTM2LDk1ICszNywxNzIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFBsdWdp
blZpZXc7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBDT01QdHI7CiBjbGFzcyBX
ZWJGcmFtZTsKK2NsYXNzIFdlYkZyYW1lUG9saWN5TGlzdGVuZXI7CiBjbGFzcyBXZWJIaXN0b3J5
OwogCiBjbGFzcyBXZWJGcmFtZUxvYWRlckNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudCB7CiBwdWJsaWM6CisgICAgV2ViRnJhbWVMb2FkZXJDbGllbnQoV2ViRnJhbWUq
KTsKKyAgICB+V2ViRnJhbWVMb2FkZXJDbGllbnQoKTsKKworICAgIFdlYkZyYW1lKiB3ZWJGcmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViRnJhbWU7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBoYXNX
ZWJWaWV3KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZm9yY2VMYXlvdXQoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZm9yY2VMYXlvdXQoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBjcmVhdGVOZXR3b3JraW5nQ29u
dGV4dCgpOwogCisgICAgdmlydHVhbCB2b2lkIGZyYW1lTG9hZGVyRGVzdHJveWVkKCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIG1ha2VSZXByZXNlbnRhdGlvbihXZWJDb3JlOjpEb2N1bWVu
dExvYWRlciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBmb3JjZUxheW91dEZvck5vbkhU
TUwoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb3BpZXNPblNjcm9sbCgpIE9W
RVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIGRldGFjaGVkRnJvbVBhcmVudDIoKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9tUGFyZW50MygpIE9WRVJSSURFOworCisg
ICAgdmlydHVhbCB2b2lkIGNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZChXZWJDb3Jl
OjpEb2N1bWVudExvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQg
YXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYpOwogCi0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KFdlYkNvcmU6
OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJl
c3BvbnNlKTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoV2Vi
Q29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwotICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJD
b3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJDb3JlOjpEb2N1bWVudExvYWRl
ciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlUmVzcG9u
c2UoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hEaWRSZWNlaXZlQ29udGVudExlbmd0aChXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgaW50IGRhdGFMZW5ndGgpOwotICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaERpZEZpbmlzaExvYWRpbmcoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxMb2Fk
aW5nKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
V2lsbFNlbmRSZXF1ZXN0KFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJDb3JlOjpEb2N1bWVudExv
YWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRD
YW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlUmVz
cG9uc2UoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlQ29udGVudExlbmd0aChXZWJDb3JlOjpEb2N1bWVudExv
YWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgaW50IGRhdGFMZW5ndGgpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoV2ViQ29yZTo6RG9j
dW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxMb2FkaW5nKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVy
KiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9y
JikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHNob3VsZENhY2hlUmVzcG9uc2UoV2ViQ29y
ZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25l
ZCBsb25nIGxvbmcgbGVuZ3RoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEhhbmRs
ZU9ubG9hZEV2ZW50cygpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVTZXJ2
ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZCgpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aERpZENhbmNlbENsaWVudFJlZGlyZWN0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2ls
bFBlcmZvcm1DbGllbnRSZWRpcmVjdChjb25zdCBXZWJDb3JlOjpLVVJMJiwgZG91YmxlIGludGVy
dmFsLCBkb3VibGUgZmlyZURhdGUpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENoYW5n
ZUxvY2F0aW9uV2l0aGluUGFnZSgpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFB1c2hT
dGF0ZVdpdGhpblBhZ2UoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZXBsYWNlU3Rh
dGVXaXRoaW5QYWdlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUG9wU3RhdGVXaXRo
aW5QYWdlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbENsb3NlKCk7Ci0gICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hEaWRTdGFydFByb3Zpc2lvbmFsTG9hZCgpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aERpZFJlY2VpdmVUaXRsZShjb25zdCBXZWJDb3JlOjpTdHJpbmdXaXRoRGlyZWN0aW9uJik7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ2hhbmdlSWNvbnMoV2ViQ29yZTo6SWNvblR5cGUp
OwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENvbW1pdExvYWQoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTGF5
b3V0KFdlYkNvcmU6OkxheW91dE1pbGVzdG9uZXMpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aERpZEhhbmRsZU9ubG9hZEV2ZW50cygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZCgpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENhbmNlbENsaWVudFJlZGlyZWN0KCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVj
dChjb25zdCBXZWJDb3JlOjpLVVJMJiwgZG91YmxlIGludGVydmFsLCBkb3VibGUgZmlyZURhdGUp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENoYW5nZUxvY2F0aW9uV2l0
aGluUGFnZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFB1c2hTdGF0
ZVdpdGhpblBhZ2UoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZXBs
YWNlU3RhdGVXaXRoaW5QYWdlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkUG9wU3RhdGVXaXRoaW5QYWdlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoV2lsbENsb3NlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVj
ZWl2ZUljb24oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRTdGFydFBy
b3Zpc2lvbmFsTG9hZCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJl
Y2VpdmVUaXRsZShjb25zdCBXZWJDb3JlOjpTdHJpbmdXaXRoRGlyZWN0aW9uJikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ2hhbmdlSWNvbnMoV2ViQ29yZTo6SWNvblR5
cGUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENvbW1pdExvYWQoKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2Fk
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRGYWlsTG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmluaXNoRG9jdW1lbnRMb2FkKCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmluaXNoTG9hZCgpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZExheW91dChXZWJDb3JlOjpMYXlvdXRN
aWxlc3RvbmVzKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERlY2lkZVBv
bGljeUZvclJlc3BvbnNlKFdlYkNvcmU6OkZyYW1lUG9saWN5RnVuY3Rpb24sIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24o
V2ViQ29yZTo6RnJhbWVQb2xpY3lGdW5jdGlvbiwgY29uc3QgV2ViQ29yZTo6TmF2aWdhdGlvbkFj
dGlvbiYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6Rm9ybVN0YXRlPiwgY29uc3QgV1RGOjpTdHJpbmcmIGZyYW1lTmFtZSkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihX
ZWJDb3JlOjpGcmFtZVBvbGljeUZ1bmN0aW9uLCBjb25zdCBXZWJDb3JlOjpOYXZpZ2F0aW9uQWN0
aW9uJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpGb3JtU3RhdGU+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsUG9saWN5Q2hl
Y2soKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFVuYWJsZVRvSW1wbGVt
ZW50UG9saWN5KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBPVkVSUklERTsKKworICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxTZW5kU3VibWl0RXZlbnQoUGFzc1JlZlB0cjxXZWJD
b3JlOjpGb3JtU3RhdGU+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxs
U3VibWl0Rm9ybShXZWJDb3JlOjpGcmFtZVBvbGljeUZ1bmN0aW9uLCBQYXNzUmVmUHRyPFdlYkNv
cmU6OkZvcm1TdGF0ZT4pIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHJldmVydFRvUHJv
dmlzaW9uYWxTdGF0ZShXZWJDb3JlOjpEb2N1bWVudExvYWRlciopIE9WRVJSSURFOworICAgIHZp
cnR1YWwgYm9vbCBkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShXZWJDb3Jl
OjpEb2N1bWVudExvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBpbnQgbGVuZ3RoKSBPVkVSUklERTsKIAotICAg
IHZpcnR1YWwgV2ViQ29yZTo6RnJhbWUqIGRpc3BhdGNoQ3JlYXRlUGFnZShjb25zdCBXZWJDb3Jl
OjpOYXZpZ2F0aW9uQWN0aW9uJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoU2hvdygpOwor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6RnJhbWUqIGRpc3BhdGNoQ3JlYXRlUGFnZShjb25zdCBXZWJD
b3JlOjpOYXZpZ2F0aW9uQWN0aW9uJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoU2hvdygpIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCB2b2lkIHNldE1haW5Eb2N1bWVudEVy
cm9yKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJv
ciYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRNYWluRG9jdW1lbnRFcnJvcihXZWJDb3JlOjpEb2N1
bWVudExvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeShib29sKSBPVkVSUklERTsK
KworICAgIHZpcnR1YWwgdm9pZCBzdGFydERvd25sb2FkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkTmFtZSA9IFN0cmluZygpKSBPVkVSUklE
RTsKIAogICAgIHZpcnR1YWwgdm9pZCBwb3N0UHJvZ3Jlc3NTdGFydGVkTm90aWZpY2F0aW9uKCk7
CiAgICAgdmlydHVhbCB2b2lkIHBvc3RQcm9ncmVzc0VzdGltYXRlQ2hhbmdlZE5vdGlmaWNhdGlv
bigpOwogICAgIHZpcnR1YWwgdm9pZCBwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigp
OwogCi0gICAgdmlydHVhbCB2b2lkIGNvbW1pdHRlZExvYWQoV2ViQ29yZTo6RG9jdW1lbnRMb2Fk
ZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKLSAgICB2aXJ0dWFsIHZvaWQgZmluaXNoZWRMb2FkaW5n
KFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKik7CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdHRlZExv
YWQoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoZWRMb2FkaW5nKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVy
KikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbENoYW5nZVRpdGxlKFdlYkNvcmU6
OkRvY3VtZW50TG9hZGVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVRp
dGxlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKikgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlR2xvYmFsSGlzdG9yeSgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHbG9iYWxI
aXN0b3J5UmVkaXJlY3RMaW5rcygpOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRHb1RvSGlzdG9y
eUl0ZW0oV2ViQ29yZTo6SGlzdG9yeUl0ZW0qKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkU3RvcExvYWRpbmdGb3JIaXN0b3J5SXRlbShXZWJDb3JlOjpIaXN0b3J5SXRlbSopIGNvbnN0
OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHbG9iYWxIaXN0b3J5SXRlbUZvclBhZ2UoKTsKLQot
ICAgIHZpcnR1YWwgdm9pZCBkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50KCk7Ci0gICAgdmlydHVh
bCB2b2lkIGRpZFJ1bkluc2VjdXJlQ29udGVudChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiosIGNv
bnN0IFdlYkNvcmU6OktVUkwmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRGV0ZWN0WFNTKGNvbnN0
IFdlYkNvcmU6OktVUkwmLCBib29sIGRpZEJsb2NrRW50aXJlUGFnZSk7CisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUdsb2JhbEhpc3RvcnkoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0TGlua3MoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkR29Ub0hpc3RvcnlJdGVtKFdlYkNvcmU6Okhpc3RvcnlJdGVtKikgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBib29sIHNob3VsZFN0b3BMb2FkaW5nRm9ySGlzdG9yeUl0ZW0o
V2ViQ29yZTo6SGlzdG9yeUl0ZW0qKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlR2xvYmFsSGlzdG9yeUl0ZW1Gb3JQYWdlKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkRGlzcGxheUluc2VjdXJlQ29udGVudCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBkaWRSdW5JbnNlY3VyZUNvbnRlbnQoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4qLCBjb25z
dCBXZWJDb3JlOjpLVVJMJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZERldGVjdFhT
Uyhjb25zdCBXZWJDb3JlOjpLVVJMJiwgYm9vbCBkaWRCbG9ja0VudGlyZVBhZ2UpIE9WRVJSSURF
OworCisgICAgdmlydHVhbCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGNhbmNlbGxlZEVycm9yKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIGNh
bm5vdFNob3dVUkxFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgaW50ZXJydXB0ZWRGb3JQb2xp
Y3lDaGFuZ2VFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgY2Fubm90U2hvd01JTUVUeXBlRXJy
b3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6
UmVzb3VyY2VFcnJvciBwbHVnaW5XaWxsSGFuZGxlTG9hZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGYWxs
QmFjayhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJikgT1ZFUlJJREU7CisKKyAgICB2aXJ0
dWFsIFdURjo6U3RyaW5nIHVzZXJBZ2VudChjb25zdCBXZWJDb3JlOjpLVVJMJikgT1ZFUlJJREU7
CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI+IGNyZWF0
ZURvY3VtZW50TG9hZGVyKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdl
YkNvcmU6OlN1YnN0aXR1dGVEYXRhJik7CiAgICAgdmlydHVhbCB2b2lkIHNldFRpdGxlKGNvbnN0
IFdlYkNvcmU6OlN0cmluZ1dpdGhEaXJlY3Rpb24mLCBjb25zdCBXZWJDb3JlOjpLVVJMJik7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgc2F2ZVBsYXRmb3JtRGF0YVRvQ2FjaGVkRnJhbWUoV2ViQ29yZTo6
Q2FjaGVkRnJhbWUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNpdGlvblRvQ29tbWl0dGVkRnJv
bUNhY2hlZEZyYW1lKFdlYkNvcmU6OkNhY2hlZEZyYW1lKik7Ci0gICAgdmlydHVhbCB2b2lkIHRy
YW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2F2ZVBs
YXRmb3JtRGF0YVRvQ2FjaGVkRnJhbWUoV2ViQ29yZTo6Q2FjaGVkRnJhbWUqKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNhY2hlZEZyYW1lKFdl
YkNvcmU6OkNhY2hlZEZyYW1lKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHRyYW5zaXRp
b25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgYm9vbCBj
YW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpIGNvbnN0IE9W
RVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBjYW5TaG93TUlNRVR5cGUoY29uc3QgV1RGOjpTdHJp
bmcmIE1JTUVUeXBlKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuU2hvd01J
TUVUeXBlQXNIVE1MKGNvbnN0IFdURjo6U3RyaW5nJiBNSU1FVHlwZSkgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBib29sIHJlcHJlc2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKGNvbnN0
IFdURjo6U3RyaW5nJiBVUkxTY2hlbWUpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV1RG
OjpTdHJpbmcgZ2VuZXJhdGVkTUlNRVR5cGVGb3JVUkxTY2hlbWUoY29uc3QgV1RGOjpTdHJpbmcm
IFVSTFNjaGVtZSkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVMb2Fk
Q29tcGxldGVkKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNhdmVWaWV3U3RhdGVUb0l0
ZW0oV2ViQ29yZTo6SGlzdG9yeUl0ZW0gKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJl
c3RvcmVWaWV3U3RhdGUoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJvdmlzaW9uYWxM
b2FkU3RhcnRlZCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkKCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEYXRhU291cmNlUmVwbGFjZW1l
bnQoKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCBkaWRTYXZlVG9QYWdlQ2FjaGUoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVzdG9yZUZyb21QYWdlQ2FjaGUoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkU2F2ZVRvUGFnZUNhY2hlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRp
ZFJlc3RvcmVGcm9tUGFnZUNhY2hlKCkgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hEaWRCZWNvbWVGcmFtZXNldChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hE
aWRCZWNvbWVGcmFtZXNldChib29sKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5D
YWNoZVBhZ2UoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFt
ZT4gY3JlYXRlRnJhbWUoY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBjb25zdCBXVEY6OlN0cmlu
ZyYgbmFtZSwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV1RGOjpTdHJpbmcmIHJlZmVycmVy
LCBib29sIGFsbG93c1Njcm9sbGluZywgaW50IG1hcmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0
KTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBjcmVhdGVQbHVnaW4o
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiwgY29u
c3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mLCBjb25zdCBWZWN0
b3I8V1RGOjpTdHJpbmc+JiwgY29uc3QgV1RGOjpTdHJpbmcmLCBib29sIGxvYWRNYW51YWxseSk7
Ci0gICAgdmlydHVhbCB2b2lkIHJlY3JlYXRlUGx1Z2luKFdlYkNvcmU6OldpZGdldCopIHsgfQot
ICAgIHZpcnR1YWwgdm9pZCByZWRpcmVjdERhdGFUb1BsdWdpbihXZWJDb3JlOjpXaWRnZXQqIHBs
dWdpbldpZGdldCk7CisgICAgICAgIGNvbnN0IFdURjo6U3RyaW5nJiByZWZlcnJlciwgYm9vbCBh
bGxvd3NTY3JvbGxpbmcsIGludCBtYXJnaW5XaWR0aCwgaW50IG1hcmdpbkhlaWdodCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gY3JlYXRlUGx1Z2lu
KGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCosIGNv
bnN0IFdlYkNvcmU6OktVUkwmLCBjb25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiwgY29uc3QgVmVj
dG9yPFdURjo6U3RyaW5nPiYsIGNvbnN0IFdURjo6U3RyaW5nJiwgYm9vbCBsb2FkTWFudWFsbHkp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZWNyZWF0ZVBsdWdpbihXZWJDb3JlOjpXaWRn
ZXQqKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVkaXJlY3REYXRhVG9QbHVnaW4o
V2ViQ29yZTo6V2lkZ2V0KiBwbHVnaW5XaWRnZXQpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gY3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiwgV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQqLCBjb25zdCBXZWJD
b3JlOjpLVVJMJiBiYXNlVVJMLCBjb25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJhbU5hbWVz
LCBjb25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJhbVZhbHVlcykgT1ZFUlJJREU7CisKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6Ok9iamVjdENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBlKGNv
bnN0IFdlYkNvcmU6OktVUkwmLCBjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIGJvb2wgc2hv
dWxkUHJlZmVyUGx1Z0luc0ZvckltYWdlcykgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXVEY6OlN0
cmluZyBvdmVycmlkZU1lZGlhVHlwZSgpIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKFdlYkNvcmU6OkRPTVdyYXBw
ZXJXb3JsZCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkb2N1bWVudEVsZW1lbnRBdmFp
bGFibGUoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybUZpcnN0TmF2aWdh
dGlvbigpIGNvbnN0IE9WRVJSSURFOworCisgICAgQ09NUHRyPFdlYkZyYW1lUG9saWN5TGlzdGVu
ZXI+IHNldFVwUG9saWN5TGlzdGVuZXIoV2ViQ29yZTo6RnJhbWVQb2xpY3lGdW5jdGlvbik7Cisg
ICAgdm9pZCByZWNlaXZlZFBvbGljeURlY2lzaW9uKFdlYkNvcmU6OlBvbGljeUFjdGlvbik7CisK
KyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKGJvb2wgbGlzdGVu
KSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRBbHdheXNVc2VQbHVnaW5Eb2N1
bWVudChjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoRGlkRmFpbFRvU3RhcnRQbHVnaW4oY29uc3QgV2ViQ29yZTo6UGx1Z2luVmll
dyopIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgV2ViRnJhbWVMb2FkZXJDbGllbnQoV2ViRnJh
bWUqKTsKLSAgICB+V2ViRnJhbWVMb2FkZXJDbGllbnQoKTsKKyAgICBjbGFzcyBXZWJGcmFtZVBv
bGljeUxpc3RlbmVyUHJpdmF0ZTsKKyAgICBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJpdmF0ZSog
bV9wb2xpY3lMaXN0ZW5lclByaXZhdGU7CiAKIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0cjxXZWJD
b3JlOjpGcmFtZT4gY3JlYXRlRnJhbWUoY29uc3QgV2ViQ29yZTo6S1VSTCYsIGNvbnN0IFdURjo6
U3RyaW5nJiBuYW1lLCBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBjb25zdCBXVEY6
OlN0cmluZyYgcmVmZXJyZXIpOwo=
</data>
<flag name="review"
          id="231499"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>