<?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>186427</bug_id>
          
          <creation_ts>2018-06-07 22:55:27 -0700</creation_ts>
          <short_desc>[Win][MiniBrowser] MiniBrowser class should be renamed to WebKitLegacyBrowserWindow</short_desc>
          <delta_ts>2018-06-10 19:45:24 -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>Tools / Tests</component>
          <version>WebKit 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>184770</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Fujii Hironori">fujii</reporter>
          <assigned_to name="Fujii Hironori">fujii</assigned_to>
          <cc>achristensen</cc>
    
    <cc>andersca</cc>
    
    <cc>bfulgham</cc>
    
    <cc>darin</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>lforschler</cc>
    
    <cc>pvollan</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1431150</commentid>
    <comment_count>0</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-06-07 22:55:27 -0700</bug_when>
    <thetext>[Win][MiniBrowser] MiniBrowser class should be renamed to WK1BrowserWindow

(In reply to Per Arne Vollan from bug #184770 comment #12)
&gt; What do you think about using WK1BrowserWindow/WK2BrowserWindow?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431151</commentid>
    <comment_count>1</comment_count>
      <attachid>342242</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-06-07 23:03:47 -0700</bug_when>
    <thetext>Created attachment 342242
Patch (WK1BrowserWindow)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431153</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-06-07 23:14:04 -0700</bug_when>
    <thetext>Attachment 342242 did not pass style-queue:


ERROR: Tools/MiniBrowser/win/WK1BrowserWindow.cpp:29:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Tools/MiniBrowser/win/WK1BrowserWindow.cpp:30:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431156</commentid>
    <comment_count>3</comment_count>
      <attachid>342242</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-06-07 23:44:51 -0700</bug_when>
    <thetext>Comment on attachment 342242
Patch (WK1BrowserWindow)

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

&gt; Tools/MiniBrowser/win/AccessibilityDelegate.cpp:29
&gt; -#include &quot;MiniBrowser.h&quot;
&gt; +#include &quot;WK1BrowserWindow.h&quot;

Can we call it WebKitLegacyBrowserWindow to match the naming convention we have?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431158</commentid>
    <comment_count>4</comment_count>
      <attachid>342242</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-06-07 23:53:40 -0700</bug_when>
    <thetext>Comment on attachment 342242
Patch (WK1BrowserWindow)

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

Thank you for the feedback.

&gt;&gt; Tools/MiniBrowser/win/AccessibilityDelegate.cpp:29
&gt;&gt; +#include &quot;WK1BrowserWindow.h&quot;
&gt; 
&gt; Can we call it WebKitLegacyBrowserWindow to match the naming convention we have?

No problem in my side.

Per wants to match with Mac port MiniBrowser which has WK1BrowserWindowController and WK2BrowserWindowController.

How should the BrowserWindow for modern WebKit be renamed? ModernWebKitBrowserWindow or just WebKitBrowserWindow?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431159</commentid>
    <comment_count>5</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-06-07 23:58:51 -0700</bug_when>
    <thetext>What about LegacyBrowserWindow and ModernBrowserWindow?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431173</commentid>
    <comment_count>6</comment_count>
      <attachid>342248</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-06-08 03:01:45 -0700</bug_when>
    <thetext>Created attachment 342248
Patch (WebKitLegacyBrowserWindow)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431174</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-06-08 03:04:22 -0700</bug_when>
    <thetext>Attachment 342248 did not pass style-queue:


ERROR: Tools/MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:29:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Tools/MiniBrowser/win/WebKitLegacyBrowserWindow.cpp:30:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431206</commentid>
    <comment_count>8</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2018-06-08 07:42:47 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #5)
&gt; What about LegacyBrowserWindow and ModernBrowserWindow?

I don&apos;t think you need to use Modern - how about just BrowserWindow and LegacyBrowserWindow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431376</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-06-08 13:22:22 -0700</bug_when>
    <thetext>Yeah, I think BrowserWindow / LegacyBrowserBrowser makes most sense to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431388</commentid>
    <comment_count>10</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2018-06-08 13:44:32 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #9)
&gt; Yeah, I think BrowserWindow / LegacyBrowserBrowser makes most sense to me.

Is the rest of the code r+able or are there more changes required?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431426</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-06-08 14:24:36 -0700</bug_when>
    <thetext>I&apos;m a bit confused here. Can we obsolete the old patches and make a new patch with the newly proposed names?

I don&apos;t think it makes sense to r+ the rest of the patch given the main point of this patch is rename the class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431437</commentid>
    <comment_count>12</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2018-06-08 14:52:27 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #11)
&gt; I&apos;m a bit confused here. Can we obsolete the old patches and make a new
&gt; patch with the newly proposed names?
&gt; 
&gt; I don&apos;t think it makes sense to r+ the rest of the patch given the main
&gt; point of this patch is rename the class.

Its the weekend in Japan so I was offering to rename the classes and files if there was no further issue there so we could get things landed before Fujii was back in the office.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431450</commentid>
    <comment_count>13</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-06-08 15:13:34 -0700</bug_when>
    <thetext>(In reply to Anders Carlsson from comment #8)
&gt; (In reply to Fujii Hironori from comment #5)
&gt; &gt; What about LegacyBrowserWindow and ModernBrowserWindow?
&gt; 
&gt; I don&apos;t think you need to use Modern - how about just BrowserWindow and
&gt; LegacyBrowserWindow.

Thank you for the feedback.
The name &apos;BrowserWindow&apos; is already used for the abstract class (bug 186421).

abstract class: BrowserWindow
WK1: LegacyBrowserWindow
WK2: ?

If I use COM for the interface, I can name them:

abstract class: IBrowserWindow
WK1: LegacyBrowserWindow
WK2: BrowserWindow</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431456</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-06-08 15:24:10 -0700</bug_when>
    <thetext>Those sound good. It’s nice not to perpetuate the obsolete &quot;WebKit 1/2&quot; terminology.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431507</commentid>
    <comment_count>15</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-06-08 17:21:23 -0700</bug_when>
    <thetext>How about this names?

abstract class: BrowserWindow
WK1: LegacyBrowserWindow
WK2: WKBrowserWindow

It&apos;s using WK API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431532</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-06-08 22:11:18 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #15)
&gt; How about this names?
&gt; 
&gt; abstract class: BrowserWindow
&gt; WK1: LegacyBrowserWindow
&gt; WK2: WKBrowserWindow
&gt; 
&gt; It&apos;s using WK API.

That also works. But if we&apos;re using WebKit prefix, it&apos;s probably better to do:

abstract class: BrowserWindow
WK1: WebKitLegacyBrowserWindow
WK2: WebKitBrowserWindow</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431546</commentid>
    <comment_count>17</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-06-08 23:57:00 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #16)

&gt; That also works. But if we&apos;re using WebKit prefix, it&apos;s probably better to
&gt; do:
&gt; 
&gt; abstract class: BrowserWindow
&gt; WK1: WebKitLegacyBrowserWindow
&gt; WK2: WebKitBrowserWindow

Agreed. Let’s do that. R+, please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431697</commentid>
    <comment_count>18</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-06-10 19:44:45 -0700</bug_when>
    <thetext>Committed r232669: &lt;https://trac.webkit.org/changeset/232669&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1431698</commentid>
    <comment_count>19</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-06-10 19:45:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/40990040&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>342242</attachid>
            <date>2018-06-07 23:03:47 -0700</date>
            <delta_ts>2018-06-08 23:52:57 -0700</delta_ts>
            <desc>Patch (WK1BrowserWindow)</desc>
            <filename>bug-186427-20180608150346.patch</filename>
            <type>text/plain</type>
            <size>89923</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMyNjE2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMTg1YjQwYWE4OTMzZjNkYzg2MzIzZjQ4ODRhMWZjZTkz
ZGM0Y2NjZC4uNGIxNTkyYzM2ZTVlZjViMWFjN2FkNmE2Yjg5YTZjYTBiMTA4MDg4ZSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3
IEBACisyMDE4LTA2LTA3ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29t
PgorCisgICAgICAgIFtXaW5dW01pbmlCcm93c2VyXSBNaW5pQnJvd3NlciBjbGFzcyBzaG91bGQg
YmUgcmVuYW1lZCB0byBXSzFCcm93c2VyV2luZG93CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODY0MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9BY2Nlc3NpYmlsaXR5RGVs
ZWdhdGUuY3BwOgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9BY2Nlc3NpYmlsaXR5RGVsZWdh
dGUuaDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZTo6QWNjZXNzaWJpbGl0eURlbGVn
YXRlKToKKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vQ01ha2VMaXN0cy50eHQ6IFJlbW92ZWQg
TWluaUJyb3dzZXIuY3BwLiBBZGRlZCBXSzFCcm93c2VyV2luZG93LmNwcC4KKyAgICAgICAgKiBN
aW5pQnJvd3Nlci93aW4vQ29tbW9uLmg6CisgICAgICAgICogTWluaUJyb3dzZXIvd2luL01haW5X
aW5kb3cuY3BwOgorICAgICAgICAoTWFpbldpbmRvdzo6aW5pdCk6CisgICAgICAgICogTWluaUJy
b3dzZXIvd2luL01haW5XaW5kb3cuaDoKKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vTWluaUJy
b3dzZXJXZWJIb3N0LmNwcDoKKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXJX
ZWJIb3N0Lmg6CisgICAgICAgIChNaW5pQnJvd3NlcldlYkhvc3Q6Ok1pbmlCcm93c2VyV2ViSG9z
dCk6CisgICAgICAgICogTWluaUJyb3dzZXIvd2luL1BhZ2VMb2FkVGVzdENsaWVudC5jcHA6Cisg
ICAgICAgIChQYWdlTG9hZFRlc3RDbGllbnQ6OlBhZ2VMb2FkVGVzdENsaWVudCk6CisgICAgICAg
ICogTWluaUJyb3dzZXIvd2luL1BhZ2VMb2FkVGVzdENsaWVudC5oOgorICAgICAgICAqIE1pbmlC
cm93c2VyL3dpbi9QcmludFdlYlVJRGVsZWdhdGUuY3BwOgorICAgICAgICAoUHJpbnRXZWJVSURl
bGVnYXRlOjpjcmVhdGVXZWJWaWV3V2l0aFJlcXVlc3QpOgorICAgICAgICAqIE1pbmlCcm93c2Vy
L3dpbi9QcmludFdlYlVJRGVsZWdhdGUuaDoKKyAgICAgICAgKFByaW50V2ViVUlEZWxlZ2F0ZTo6
UHJpbnRXZWJVSURlbGVnYXRlKToKKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vUmVzb3VyY2VM
b2FkRGVsZWdhdGUuY3BwOgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9SZXNvdXJjZUxvYWRE
ZWxlZ2F0ZS5oOgorICAgICAgICAoUmVzb3VyY2VMb2FkRGVsZWdhdGU6OlJlc291cmNlTG9hZERl
bGVnYXRlKToKKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vV0sxQnJvd3NlcldpbmRvdy5jcHA6
IFJlbmFtZWQgZnJvbSBUb29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXIuY3BwLgorICAg
ICAgICAqIE1pbmlCcm93c2VyL3dpbi9XSzFCcm93c2VyV2luZG93Lmg6IFJlbmFtZWQgZnJvbSBU
b29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXIuaC4KKyAgICAgICAgKiBNaW5pQnJvd3Nl
ci93aW4vV2ViRG93bmxvYWREZWxlZ2F0ZS5jcHA6CisgICAgICAgIChXZWJEb3dubG9hZERlbGVn
YXRlOjpXZWJEb3dubG9hZERlbGVnYXRlKToKKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vV2Vi
RG93bmxvYWREZWxlZ2F0ZS5oOgorCiAyMDE4LTA2LTA3ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9u
b3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5dW01pbmlCcm93c2VyXSBBZGQgYSBu
ZXcgQnJvd3NlcldpbmRvdyBpbnRlcmZhY2UgdG8gYWJzdHJhY3QgV0sxIGFuZCBXSzIgQnJvd3Nl
cldpbmRvdwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL0FjY2Vzc2liaWxpdHlE
ZWxlZ2F0ZS5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQWNjZXNzaWJpbGl0eURlbGVnYXRl
LmNwcAppbmRleCBhZTY4YjQyNzJjZjg5Y2M0NmFkNjRkYjdmZTVmYjRhN2ZlMGY4MjczLi40Mjdh
NzgzOGI2ZDhlNjkyODZkYmVhYWRhNDc2YjAyM2MwZTkwNjVmIDEwMDY0NAotLS0gYS9Ub29scy9N
aW5pQnJvd3Nlci93aW4vQWNjZXNzaWJpbGl0eURlbGVnYXRlLmNwcAorKysgYi9Ub29scy9NaW5p
QnJvd3Nlci93aW4vQWNjZXNzaWJpbGl0eURlbGVnYXRlLmNwcApAQCAtMjYsNyArMjYsNyBAQAog
I2luY2x1ZGUgInN0ZGFmeC5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlEZWxlZ2F0ZS5oIgog
Ci0jaW5jbHVkZSAiTWluaUJyb3dzZXIuaCIKKyNpbmNsdWRlICJXSzFCcm93c2VyV2luZG93Lmgi
CiAjaW5jbHVkZSA8V2ViS2l0TGVnYWN5L1dlYktpdENPTUFQSS5oPgogI2luY2x1ZGUgPGNvbW1j
dHJsLmg+CiAjaW5jbHVkZSA8Y29tbWRsZy5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dz
ZXIvd2luL0FjY2Vzc2liaWxpdHlEZWxlZ2F0ZS5oIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL0Fj
Y2Vzc2liaWxpdHlEZWxlZ2F0ZS5oCmluZGV4IDc4ZGIyODZkYmEzYzU4OGNlYWMzZWM5MmExODNl
MDdiYmY1NGNlYjUuLjUzZGE5ZDA3NDI4MzlmZDhjM2FjZWM5MzBhZmJhMjBjNTNjNTJiZWIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9BY2Nlc3NpYmlsaXR5RGVsZWdhdGUuaAor
KysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQWNjZXNzaWJpbGl0eURlbGVnYXRlLmgKQEAgLTI4
LDExICsyOCwxMSBAQAogCiAjaW5jbHVkZSA8V2ViS2l0TGVnYWN5L1dlYktpdC5oPgogCi1jbGFz
cyBNaW5pQnJvd3NlcjsKK2NsYXNzIFdLMUJyb3dzZXJXaW5kb3c7CiAKIGNsYXNzIEFjY2Vzc2li
aWxpdHlEZWxlZ2F0ZSA6IHB1YmxpYyBJQWNjZXNzaWJpbGl0eURlbGVnYXRlIHsKIHB1YmxpYzoK
LSAgICBBY2Nlc3NpYmlsaXR5RGVsZWdhdGUoTWluaUJyb3dzZXImIGNsaWVudCkKKyAgICBBY2Nl
c3NpYmlsaXR5RGVsZWdhdGUoV0sxQnJvd3NlcldpbmRvdyYgY2xpZW50KQogICAgICAgICA6IG1f
Y2xpZW50KGNsaWVudCkgeyB9CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFF1ZXJ5SW50ZXJmYWNlKF9Jbl8gUkVGSUlEIHJpaWQsIF9DT01fT3V0cHRyXyB2b2lkKiogcHB2
T2JqZWN0KTsKICAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJlZigpOwpA
QCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIGZpcmVGcmFtZUxvYWRTdGFydGVkRXZlbnRzKCk7CiAgICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIGZpcmVGcmFtZUxvYWRGaW5pc2hlZEV2ZW50cygpOwogcHJpdmF0
ZToKLSAgICBNaW5pQnJvd3NlciYgbV9jbGllbnQ7CisgICAgV0sxQnJvd3NlcldpbmRvdyYgbV9j
bGllbnQ7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9D
TWFrZUxpc3RzLnR4dCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9DTWFrZUxpc3RzLnR4dAppbmRl
eCA5YTQ3ODRkMTY5NWM0MGRmNjJjOWI2OGVlODQ1M2UzZWUxNzZlNjgyLi5jYTM3MWM3NDJiOWM0
YjZjNTc5Y2VlNTkyMDE4N2UwMmYwNmVkZjA0IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nl
ci93aW4vQ01ha2VMaXN0cy50eHQKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NNYWtlTGlz
dHMudHh0CkBAIC0xNCw5ICsxNCw5IEBAIHNldChNaW5pQnJvd3Nlcl9TT1VSQ0VTCiAgICAgUHJp
bnRXZWJVSURlbGVnYXRlLmNwcAogICAgIFJlc291cmNlTG9hZERlbGVnYXRlLmNwcAogICAgIFdl
YkRvd25sb2FkRGVsZWdhdGUuY3BwCi0gICAgTWluaUJyb3dzZXIuY3BwCiAgICAgTWluaUJyb3dz
ZXJMaWIucmMKICAgICBNaW5pQnJvd3NlcldlYkhvc3QuY3BwCisgICAgV0sxQnJvd3NlcldpbmRv
dy5jcHAKICAgICBXaW5NYWluLmNwcAogICAgIHN0ZGFmeC5jcHAKICkKZGlmZiAtLWdpdCBhL1Rv
b2xzL01pbmlCcm93c2VyL3dpbi9Db21tb24uaCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9Db21t
b24uaAppbmRleCA0ZWExMjczOGNkYzVkMjVhNTFjZDQzYmEyNDIxZjg3NDlkYWU5NTFiLi43NDZk
ODllN2MzYjllODMzZjg0MTIzZDU1NDYzZDU0ZGI1OWIwZjA2IDEwMDY0NAotLS0gYS9Ub29scy9N
aW5pQnJvd3Nlci93aW4vQ29tbW9uLmgKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NvbW1v
bi5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJzdGRhZnguaCIKICNpbmNsdWRlICJN
YWluV2luZG93LmgiCi0jaW5jbHVkZSAiTWluaUJyb3dzZXIuaCIKKyNpbmNsdWRlICJXSzFCcm93
c2VyV2luZG93LmgiCiAKIHZvaWQgY29tcHV0ZUZ1bGxEZXNrdG9wRnJhbWUoKTsKIGJvb2wgZ2V0
QXBwRGF0YUZvbGRlcihfYnN0cl90JiBkaXJlY3RvcnkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWlu
aUJyb3dzZXIvd2luL01haW5XaW5kb3cuY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL01haW5X
aW5kb3cuY3BwCmluZGV4IDVlZDIzY2Y4NmRmMzY5OGRhZDUyN2JmZWM3ZjFhZjFmZGRjOGQ0MjMu
LjY3YzRlNmZiMTcyNjc0YWE2NWYzMmViYmYyZjg1NTcyZWFmZmRjMTEgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL01pbmlCcm93c2VyL3dpbi9NYWluV2luZG93LmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nl
ci93aW4vTWFpbldpbmRvdy5jcHAKQEAgLTExMyw3ICsxMTMsNyBAQCBib29sIE1haW5XaW5kb3c6
OmluaXQoSElOU1RBTkNFIGhJbnN0YW5jZSwgYm9vbCB1c2VzTGF5ZXJlZFdlYlZpZXcsIGJvb2wg
cGFnZUxvYQogICAgIERlZkVkaXRQcm9jID0gcmVpbnRlcnByZXRfY2FzdDxXTkRQUk9DPihHZXRX
aW5kb3dMb25nUHRyKG1faFVSTEJhclduZCwgR1dMUF9XTkRQUk9DKSk7CiAgICAgU2V0V2luZG93
TG9uZ1B0cihtX2hVUkxCYXJXbmQsIEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05H
X1BUUj4oRWRpdFByb2MpKTsKIAotICAgIG1fYnJvd3NlcldpbmRvdyA9IE1pbmlCcm93c2VyOjpj
cmVhdGUobV9oTWFpblduZCwgbV9oVVJMQmFyV25kLCB1c2VzTGF5ZXJlZFdlYlZpZXcsIHBhZ2VM
b2FkVGVzdGluZyk7CisgICAgbV9icm93c2VyV2luZG93ID0gV0sxQnJvd3NlcldpbmRvdzo6Y3Jl
YXRlKG1faE1haW5XbmQsIG1faFVSTEJhclduZCwgdXNlc0xheWVyZWRXZWJWaWV3LCBwYWdlTG9h
ZFRlc3RpbmcpOwogICAgIGlmICghbV9icm93c2VyV2luZG93KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgSFJFU1VMVCBociA9IG1fYnJvd3NlcldpbmRvdy0+aW5pdCgpOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL01haW5XaW5kb3cuaCBiL1Rvb2xzL01pbmlCcm93c2Vy
L3dpbi9NYWluV2luZG93LmgKaW5kZXggNDQwNGQxY2RkZWU3NTM4MTlhZTkxM2UxNzIzOGNhYWRh
OWE2YTkwMy4uZGYyNjNkYTA4NDdmMzljOWZiMWIyZDc2YWY0OWJhODMyYTJjZjk0OCAxMDA2NDQK
LS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL01haW5XaW5kb3cuaAorKysgYi9Ub29scy9NaW5p
QnJvd3Nlci93aW4vTWFpbldpbmRvdy5oCkBAIC0yNSw3ICsyNSw3IEBACiAKICNwcmFnbWEgb25j
ZQogCi0jaW5jbHVkZSAiTWluaUJyb3dzZXIuaCIKKyNpbmNsdWRlICJXSzFCcm93c2VyV2luZG93
LmgiCiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXIu
Y3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTk2NzI5NzdlMGE2Yjk1NzQ1NjllOTI4ZDJjMDcxODZjNjE1MDEy
Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9N
aW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODk1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDgsIDIwMTMtMjAxNSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEJy
ZW50IEZ1bGdoYW0uICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDEwLCAyMDExIEFwcGNlbGVyYXRvciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEFsZXggQ2hyaXN0ZW5zZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
c3RkYWZ4LmgiCi0jaW5jbHVkZSAiTWluaUJyb3dzZXIuaCIKLQotI2luY2x1ZGUgIkFjY2Vzc2li
aWxpdHlEZWxlZ2F0ZS5oIgotI2luY2x1ZGUgIkNvbW1vbi5oIgotI2luY2x1ZGUgIkRPTURlZmF1
bHRJbXBsLmgiCi0jaW5jbHVkZSAiTWluaUJyb3dzZXJMaWJSZXNvdXJjZS5oIgotI2luY2x1ZGUg
Ik1pbmlCcm93c2VyUmVwbGFjZS5oIgotI2luY2x1ZGUgIk1pbmlCcm93c2VyV2ViSG9zdC5oIgot
I2luY2x1ZGUgIlByaW50V2ViVUlEZWxlZ2F0ZS5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZERl
bGVnYXRlLmgiCi0jaW5jbHVkZSAiV2ViRG93bmxvYWREZWxlZ2F0ZS5oIgotI2luY2x1ZGUgPFdl
YkNvcmUvQ09NUHRyLmg+Ci0jaW5jbHVkZSA8V2ViS2l0TGVnYWN5L1dlYktpdENPTUFQSS5oPgot
I2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjYXNzZXJ0PgotI2luY2x1ZGUgPGZ1bmN0
aW9uYWw+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2
ZWN0b3I+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBVU0UoQ0YpCi0j
aW5jbHVkZSA8V2ViS2l0TGVnYWN5L0NGRGljdGlvbmFyeVByb3BlcnR5QmFnLmg+Ci0jZW5kaWYK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3co
SFdORCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBpbnQgbWF4SGlzdG9yeVNpemUgPSAxMDsKLQotdHlw
ZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViTXV0YWJsZVVSTFJlcXVlc3QsICZfX3V1aWRv
ZihJV2ViTXV0YWJsZVVSTFJlcXVlc3QpPj4gSVdlYk11dGFibGVVUkxSZXF1ZXN0UHRyOwotCi1S
ZWY8QnJvd3NlcldpbmRvdz4gTWluaUJyb3dzZXI6OmNyZWF0ZShIV05EIG1haW5XbmQsIEhXTkQg
dXJsQmFyV25kLCBib29sIHVzZUxheWVyZWRXZWJWaWV3LCBib29sIHBhZ2VMb2FkVGVzdGluZykK
LXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNaW5pQnJvd3NlcihtYWluV25kLCB1cmxCYXJX
bmQsIHVzZUxheWVyZWRXZWJWaWV3LCBwYWdlTG9hZFRlc3RpbmcpKTsKLX0KLQotTWluaUJyb3dz
ZXI6Ok1pbmlCcm93c2VyKEhXTkQgbWFpblduZCwgSFdORCB1cmxCYXJXbmQsIGJvb2wgdXNlTGF5
ZXJlZFdlYlZpZXcsIGJvb2wgcGFnZUxvYWRUZXN0aW5nKQotICAgIDogbV9oTWFpblduZChtYWlu
V25kKQotICAgICwgbV9oVVJMQmFyV25kKHVybEJhclduZCkKLSAgICAsIG1fdXNlTGF5ZXJlZFdl
YlZpZXcodXNlTGF5ZXJlZFdlYlZpZXcpCi0gICAgLCBtX3BhZ2VMb2FkVGVzdENsaWVudChzdGQ6
Om1ha2VfdW5pcXVlPFBhZ2VMb2FkVGVzdENsaWVudD4odGhpcywgcGFnZUxvYWRUZXN0aW5nKSkK
LXsKLX0KLQotVUxPTkcgTWluaUJyb3dzZXI6OkFkZFJlZigpCi17Ci0gICAgcmVmKCk7Ci0gICAg
cmV0dXJuIHJlZkNvdW50KCk7Ci19Ci0KLVVMT05HIE1pbmlCcm93c2VyOjpSZWxlYXNlKCkKLXsK
LSAgICBhdXRvIGNvdW50ID0gcmVmQ291bnQoKTsKLSAgICBkZXJlZigpOwotICAgIHJldHVybiAt
LWNvdW50OwotfQotCi1IUkVTVUxUIE1pbmlCcm93c2VyOjppbml0KCkKLXsKLSAgICBIUkVTVUxU
IGhyID0gV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViVmlldywgMCwgSUlEX0lXZWJWaWV3
LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fd2ViVmlldy5HZXRJbnRlcmZhY2VQdHIoKSkp
OwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICBociA9IG1f
d2ViVmlldy0+UXVlcnlJbnRlcmZhY2UoSUlEX0lXZWJWaWV3UHJpdmF0ZTIsIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPigmbV93ZWJWaWV3UHJpdmF0ZS5HZXRJbnRlcmZhY2VQdHIoKSkpOwotICAg
IGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICBociA9IFdlYktpdENy
ZWF0ZUluc3RhbmNlKENMU0lEX1dlYkhpc3RvcnksIDAsIF9fdXVpZG9mKG1fd2ViSGlzdG9yeSks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV93ZWJIaXN0b3J5LkdldEludGVyZmFjZVB0cigp
KSk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBocjsKLQotICAgIGhyID0g
V2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViQ29yZVN0YXRpc3RpY3MsIDAsIF9fdXVpZG9m
KG1fc3RhdGlzdGljcyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV9zdGF0aXN0aWNzLkdl
dEludGVyZmFjZVB0cigpKSk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBo
cjsKLQotICAgIGhyID0gV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViQ2FjaGUsIDAsIF9f
dXVpZG9mKG1fd2ViQ2FjaGUpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fd2ViQ2FjaGUu
R2V0SW50ZXJmYWNlUHRyKCkpKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJu
IGhyOwotCi0gICAgaWYgKCFzZWVkSW5pdGlhbERlZmF1bHRQcmVmZXJlbmNlcygpKQotICAgICAg
ICByZXR1cm4gRV9GQUlMOwotCi0gICAgaWYgKCFzZXRUb0RlZmF1bHRQcmVmZXJlbmNlcygpKQot
ICAgICAgICByZXR1cm4gRV9GQUlMOwotCi0gICAgaWYgKCFzZXRDYWNoZUZvbGRlcigpKQotICAg
ICAgICByZXR1cm4gRV9GQUlMOwotCi0gICAgYXV0byB3ZWJIb3N0ID0gbmV3IE1pbmlCcm93c2Vy
V2ViSG9zdCh0aGlzLCBtX2hVUkxCYXJXbmQpOwotCi0gICAgaHIgPSBzZXRGcmFtZUxvYWREZWxl
Z2F0ZSh3ZWJIb3N0KTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwot
Ci0gICAgaHIgPSBzZXRGcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUod2ViSG9zdCk7Ci0gICAgaWYg
KEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBocjsKLQotICAgIGhyID0gc2V0VUlEZWxlZ2F0
ZShuZXcgUHJpbnRXZWJVSURlbGVnYXRlKCp0aGlzKSk7Ci0gICAgaWYgKEZBSUxFRCAoaHIpKQot
ICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICBociA9IHNldEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZShu
ZXcgQWNjZXNzaWJpbGl0eURlbGVnYXRlKCp0aGlzKSk7Ci0gICAgaWYgKEZBSUxFRCAoaHIpKQot
ICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICBociA9IHNldFJlc291cmNlTG9hZERlbGVnYXRlKG5l
dyBSZXNvdXJjZUxvYWREZWxlZ2F0ZSh0aGlzKSk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAg
ICAgIHJldHVybiBocjsKLQotICAgIElXZWJEb3dubG9hZERlbGVnYXRlUHRyIGRvd25sb2FkRGVs
ZWdhdGU7Ci0gICAgZG93bmxvYWREZWxlZ2F0ZS5BdHRhY2gobmV3IFdlYkRvd25sb2FkRGVsZWdh
dGUoKnRoaXMpKTsKLSAgICBociA9IHNldERvd25sb2FkRGVsZWdhdGUoZG93bmxvYWREZWxlZ2F0
ZSk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBocjsKLQotICAgIFJFQ1Qg
Y2xpZW50UmVjdDsKLSAgICA6OkdldENsaWVudFJlY3QobV9oTWFpblduZCwgJmNsaWVudFJlY3Qp
OwotICAgIGlmICh1c2VzTGF5ZXJlZFdlYlZpZXcoKSkKLSAgICAgICAgY2xpZW50UmVjdCA9IHsg
c193aW5kb3dQb3NpdGlvbi54LCBzX3dpbmRvd1Bvc2l0aW9uLnksIHNfd2luZG93UG9zaXRpb24u
eCArIHNfd2luZG93U2l6ZS5jeCwgc193aW5kb3dQb3NpdGlvbi55ICsgc193aW5kb3dTaXplLmN5
IH07Ci0KLSAgICBociA9IHByZXBhcmVWaWV3cyhtX2hNYWluV25kLCBjbGllbnRSZWN0KTsKLSAg
ICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgaWYgKHVzZXNMYXll
cmVkV2ViVmlldygpKQotICAgICAgICBzdWJjbGFzc0ZvckxheWVyZWRXaW5kb3coKTsKLQotICAg
IHJldHVybiBocjsKLX0KLQotYm9vbCBNaW5pQnJvd3Nlcjo6c2V0Q2FjaGVGb2xkZXIoKQotewot
ICAgIF9ic3RyX3QgYXBwRGF0YUZvbGRlcjsKLSAgICBpZiAoIWdldEFwcERhdGFGb2xkZXIoYXBw
RGF0YUZvbGRlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGFwcERhdGFGb2xkZXIg
Kz0gTCJcXGNhY2hlIjsKLSAgICB3ZWJDYWNoZSgpLT5zZXRDYWNoZUZvbGRlcihhcHBEYXRhRm9s
ZGVyKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1IUkVTVUxUIE1pbmlCcm93c2VyOjpwcmVw
YXJlVmlld3MoSFdORCBtYWluV25kLCBjb25zdCBSRUNUJiBjbGllbnRSZWN0KQotewotICAgIGlm
ICghbV93ZWJWaWV3KQotICAgICAgICByZXR1cm4gRV9GQUlMOwotCi0gICAgSFJFU1VMVCBociA9
IG1fd2ViVmlldy0+c2V0SG9zdFdpbmRvdyhtYWluV25kKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkK
LSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgaHIgPSBtX3dlYlZpZXctPmluaXRXaXRoRnJhbWUo
Y2xpZW50UmVjdCwgMCwgMCk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBo
cjsKLQotICAgIGhyID0gbV93ZWJWaWV3UHJpdmF0ZS0+c2V0VHJhbnNwYXJlbnQobV91c2VMYXll
cmVkV2ViVmlldyk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBocjsKLQot
ICAgIGhyID0gbV93ZWJWaWV3UHJpdmF0ZS0+c2V0VXNlc0xheWVyZWRXaW5kb3cobV91c2VMYXll
cmVkV2ViVmlldyk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBocjsKLQot
ICAgIGhyID0gbV93ZWJWaWV3UHJpdmF0ZS0+dmlld1dpbmRvdygmbV92aWV3V25kKTsKLQotICAg
IHJldHVybiBocjsKLX0KLQotSFJFU1VMVCBNaW5pQnJvd3Nlcjo6bG9hZEhUTUxTdHJpbmcoY29u
c3QgQlNUUiYgc3RyKQotewotICAgIElXZWJGcmFtZVB0ciBmcmFtZTsKLSAgICBIUkVTVUxUIGhy
ID0gbV93ZWJWaWV3LT5tYWluRnJhbWUoJmZyYW1lLkdldEludGVyZmFjZVB0cigpKTsKLSAgICBp
ZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgZnJhbWUtPmxvYWRIVE1M
U3RyaW5nKHN0ciwgMCk7Ci0gICAgcmV0dXJuIGhyOwotfQotCi1zdGF0aWMgV05EUFJPQyBnRGVm
V2ViS2l0UHJvYzsKLQotc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgdmlld1duZFByb2MoSFdORCBo
V25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCi17Ci0gICAg
c3dpdGNoIChtZXNzYWdlKSB7Ci0gICAgY2FzZSBXTV9OQ0hJVFRFU1Q6Ci0gICAgICAgIGNvbnN0
ZXhwciBpbnQgZHJhZ0JhckhlaWdodCA9IDMwOwotICAgICAgICBSRUNUIHdpbmRvdzsKLSAgICAg
ICAgOjpHZXRXaW5kb3dSZWN0KGhXbmQsICZ3aW5kb3cpOwotICAgICAgICAvLyBGb3IgdGVzdGlu
ZyBvdXIgdHJhbnNwYXJlbnQgd2luZG93LCB3ZSBuZWVkIGEgcmVnaW9uIHRvIHVzZSBhcyBhIGhh
bmRsZSBmb3IKLSAgICAgICAgLy8gZHJhZ2dpbmcuIFRoZSByaWdodCB3YXkgdG8gZG8gdGhpcyB3
b3VsZCBiZSB0byBxdWVyeSB0aGUgd2ViIHZpZXcgdG8gc2VlIHdoYXQncwotICAgICAgICAvLyB1
bmRlciB0aGUgbW91c2UuIEhvd2V2ZXIsIGZvciB0ZXN0aW5nIHB1cnBvc2VzIHdlIGp1c3QgdXNl
IGFuIGFyYml0cmFyeQotICAgICAgICAvLyAzMCBsb2dpY2FsIHBpeGVsIGJhbmQgYXQgdGhlIHRv
cCBvZiB0aGUgdmlldyBhcyBhbiBhcmJpdHJhcnkgZ3JpcHBpbmcgbG9jYXRpb24uCi0gICAgICAg
IC8vCi0gICAgICAgIC8vIFdoZW4gd2UgYXJlIHdpdGhpbiB0aGlzIGJhZCwgcmV0dXJuIEhUX0NB
UFRJT04gdG8gdGVsbCBXaW5kb3dzIHdlIHdhbnQgdG8KLSAgICAgICAgLy8gdHJlYXQgdGhpcyBy
ZWdpb24gYXMgaWYgaXQgd2VyZSB0aGUgdGl0bGUgYmFyIG9uIGEgbm9ybWFsIHdpbmRvdy4KLSAg
ICAgICAgaW50IHkgPSBISVdPUkQobFBhcmFtKTsKLSAgICAgICAgZmxvYXQgc2NhbGVkRHJhZ0Jh
ckhlaWdodEZhY3RvciA9IGRyYWdCYXJIZWlnaHQgKiBXZWJDb3JlOjpkZXZpY2VTY2FsZUZhY3Rv
ckZvcldpbmRvdyhoV25kKTsKLSAgICAgICAgaWYgKCh5ID4gd2luZG93LnRvcCkgJiYgKHkgPCB3
aW5kb3cudG9wICsgc2NhbGVkRHJhZ0JhckhlaWdodEZhY3RvcikpCi0gICAgICAgICAgICByZXR1
cm4gSFRDQVBUSU9OOwotICAgIH0KLSAgICByZXR1cm4gQ2FsbFdpbmRvd1Byb2MoZ0RlZldlYktp
dFByb2MsIGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKLX0KLQotdm9pZCBNaW5pQnJv
d3Nlcjo6c3ViY2xhc3NGb3JMYXllcmVkV2luZG93KCkKLXsKLSNpZiBkZWZpbmVkIF9NX0FNRDY0
IHx8IGRlZmluZWQgX1dJTjY0Ci0gICAgZ0RlZldlYktpdFByb2MgPSByZWludGVycHJldF9jYXN0
PFdORFBST0M+KDo6R2V0V2luZG93TG9uZ1B0cihtX3ZpZXdXbmQsIEdXTFBfV05EUFJPQykpOwot
ICAgIDo6U2V0V2luZG93TG9uZ1B0cihtX3ZpZXdXbmQsIEdXTFBfV05EUFJPQywgcmVpbnRlcnBy
ZXRfY2FzdDxMT05HX1BUUj4odmlld1duZFByb2MpKTsKLSNlbHNlCi0gICAgZ0RlZldlYktpdFBy
b2MgPSByZWludGVycHJldF9jYXN0PFdORFBST0M+KDo6R2V0V2luZG93TG9uZyhtX3ZpZXdXbmQs
IEdXTF9XTkRQUk9DKSk7Ci0gICAgOjpTZXRXaW5kb3dMb25nKG1fdmlld1duZCwgR1dMX1dORFBS
T0MsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+KHZpZXdXbmRQcm9jKSk7Ci0jZW5kaWYKLX0K
LQotSFJFU1VMVCBNaW5pQnJvd3Nlcjo6c2V0RnJhbWVMb2FkRGVsZWdhdGUoSVdlYkZyYW1lTG9h
ZERlbGVnYXRlKiBmcmFtZUxvYWREZWxlZ2F0ZSkKLXsKLSAgICBtX2ZyYW1lTG9hZERlbGVnYXRl
ID0gZnJhbWVMb2FkRGVsZWdhdGU7Ci0gICAgcmV0dXJuIG1fd2ViVmlldy0+c2V0RnJhbWVMb2Fk
RGVsZWdhdGUoZnJhbWVMb2FkRGVsZWdhdGUpOwotfQotCi1IUkVTVUxUIE1pbmlCcm93c2VyOjpz
ZXRGcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUoSVdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZSog
ZnJhbWVMb2FkRGVsZWdhdGVQcml2YXRlKQotewotICAgIHJldHVybiBtX3dlYlZpZXdQcml2YXRl
LT5zZXRGcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUoZnJhbWVMb2FkRGVsZWdhdGVQcml2YXRlKTsK
LX0KLQotSFJFU1VMVCBNaW5pQnJvd3Nlcjo6c2V0VUlEZWxlZ2F0ZShJV2ViVUlEZWxlZ2F0ZSog
dWlEZWxlZ2F0ZSkKLXsKLSAgICBtX3VpRGVsZWdhdGUgPSB1aURlbGVnYXRlOwotICAgIHJldHVy
biBtX3dlYlZpZXctPnNldFVJRGVsZWdhdGUodWlEZWxlZ2F0ZSk7Ci19Ci0KLUhSRVNVTFQgTWlu
aUJyb3dzZXI6OnNldEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZShJQWNjZXNzaWJpbGl0eURlbGVnYXRl
KiBhY2Nlc3NpYmlsaXR5RGVsZWdhdGUpCi17Ci0gICAgbV9hY2Nlc3NpYmlsaXR5RGVsZWdhdGUg
PSBhY2Nlc3NpYmlsaXR5RGVsZWdhdGU7Ci0gICAgcmV0dXJuIG1fd2ViVmlldy0+c2V0QWNjZXNz
aWJpbGl0eURlbGVnYXRlKGFjY2Vzc2liaWxpdHlEZWxlZ2F0ZSk7Ci19Ci0KLUhSRVNVTFQgTWlu
aUJyb3dzZXI6OnNldFJlc291cmNlTG9hZERlbGVnYXRlKElXZWJSZXNvdXJjZUxvYWREZWxlZ2F0
ZSogcmVzb3VyY2VMb2FkRGVsZWdhdGUpCi17Ci0gICAgbV9yZXNvdXJjZUxvYWREZWxlZ2F0ZSA9
IHJlc291cmNlTG9hZERlbGVnYXRlOwotICAgIHJldHVybiBtX3dlYlZpZXctPnNldFJlc291cmNl
TG9hZERlbGVnYXRlKHJlc291cmNlTG9hZERlbGVnYXRlKTsKLX0KLQotSFJFU1VMVCBNaW5pQnJv
d3Nlcjo6c2V0RG93bmxvYWREZWxlZ2F0ZShJV2ViRG93bmxvYWREZWxlZ2F0ZVB0ciBkb3dubG9h
ZERlbGVnYXRlKQotewotICAgIG1fZG93bmxvYWREZWxlZ2F0ZSA9IGRvd25sb2FkRGVsZWdhdGU7
Ci0gICAgcmV0dXJuIG1fd2ViVmlldy0+c2V0RG93bmxvYWREZWxlZ2F0ZShkb3dubG9hZERlbGVn
YXRlKTsKLX0KLQotSVdlYkZyYW1lUHRyIE1pbmlCcm93c2VyOjptYWluRnJhbWUoKQotewotICAg
IElXZWJGcmFtZVB0ciBmcmFtZVB0cjsKLSAgICBtX3dlYlZpZXctPm1haW5GcmFtZSgmZnJhbWVQ
dHIuR2V0SW50ZXJmYWNlUHRyKCkpOwotICAgIHJldHVybiBmcmFtZVB0cjsKLX0KLQotYm9vbCBN
aW5pQnJvd3Nlcjo6c2VlZEluaXRpYWxEZWZhdWx0UHJlZmVyZW5jZXMoKQotewotICAgIElXZWJQ
cmVmZXJlbmNlc1B0ciB0bXBQcmVmZXJlbmNlczsKLSAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0
ZUluc3RhbmNlKENMU0lEX1dlYlByZWZlcmVuY2VzLCAwLCBJSURfSVdlYlByZWZlcmVuY2VzLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqKj4oJnRtcFByZWZlcmVuY2VzLkdldEludGVyZmFjZVB0cigp
KSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoRkFJTEVEKHRtcFByZWZlcmVu
Y2VzLT5zdGFuZGFyZFByZWZlcmVuY2VzKCZtX3N0YW5kYXJkUHJlZmVyZW5jZXMuR2V0SW50ZXJm
YWNlUHRyKCkpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgTWluaUJyb3dzZXI6OnNldFRvRGVmYXVsdFByZWZlcmVuY2VzKCkKLXsKLSAgICBI
UkVTVUxUIGhyID0gbV9zdGFuZGFyZFByZWZlcmVuY2VzLT5RdWVyeUludGVyZmFjZShJSURfSVdl
YlByZWZlcmVuY2VzUHJpdmF0ZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX3ByZWZzUHJp
dmF0ZS5HZXRJbnRlcmZhY2VQdHIoKSkpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgVVNFKENHKQotICAgIG1fc3RhbmRhcmRQcmVmZXJlbmNl
cy0+c2V0QVZGb3VuZGF0aW9uRW5hYmxlZChUUlVFKTsKLSAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoVFJVRSk7Ci0jZW5kaWYKLQotICAgIG1fcHJl
ZnNQcml2YXRlLT5zZXRGdWxsU2NyZWVuRW5hYmxlZChUUlVFKTsKLSAgICBtX3ByZWZzUHJpdmF0
ZS0+c2V0U2hvd0RlYnVnQm9yZGVycyhGQUxTRSk7Ci0gICAgbV9wcmVmc1ByaXZhdGUtPnNldFNo
b3dSZXBhaW50Q291bnRlcihGQUxTRSk7Ci0gICAgbV9wcmVmc1ByaXZhdGUtPnNldFNob3VsZElu
dmVydENvbG9ycyhGQUxTRSk7Ci0KLSAgICBtX3N0YW5kYXJkUHJlZmVyZW5jZXMtPnNldExvYWRz
SW1hZ2VzQXV0b21hdGljYWxseShUUlVFKTsKLSAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0QXV0aG9y
QW5kVXNlclN0eWxlc0VuYWJsZWQoVFJVRSk7Ci0gICAgbV9zdGFuZGFyZFByZWZlcmVuY2VzLT5z
ZXRKYXZhU2NyaXB0RW5hYmxlZChUUlVFKTsKLSAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0QWxsb3dV
bml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoRkFMU0UpOwotICAgIG1fcHJlZnNQcml2YXRlLT5z
ZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoVFJVRSk7Ci0KLSAgICBtX3ByZWZzUHJpdmF0
ZS0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChUUlVFKTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1zdGF0aWMgdm9pZCB1cGRhdGVNZW51SXRlbUZvckhpc3RvcnlJdGVtKEhNRU5VIG1lbnUs
IElXZWJIaXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0sIGludCBjdXJyZW50SGlzdG9yeUl0ZW0pCi17
Ci0gICAgVUlOVCBtZW51SUQgPSBJRE1fSElTVE9SWV9MSU5LMCArIGN1cnJlbnRIaXN0b3J5SXRl
bTsKLQotICAgIE1FTlVJVEVNSU5GTyBtZW51SXRlbUluZm8gPSB7IDAgfTsKLSAgICBtZW51SXRl
bUluZm8uY2JTaXplID0gc2l6ZW9mKE1FTlVJVEVNSU5GTyk7Ci0gICAgbWVudUl0ZW1JbmZvLmZN
YXNrID0gTUlJTV9UWVBFOwotICAgIG1lbnVJdGVtSW5mby5mVHlwZSA9IE1GVF9TVFJJTkc7Ci0K
LSAgICBfYnN0cl90IHRpdGxlOwotICAgIGhpc3RvcnlJdGVtLnRpdGxlKHRpdGxlLkdldEFkZHJl
c3MoKSk7Ci0gICAgbWVudUl0ZW1JbmZvLmR3VHlwZURhdGEgPSBzdGF0aWNfY2FzdDxMUFdTVFI+
KHRpdGxlKTsKLQotICAgIDo6U2V0TWVudUl0ZW1JbmZvKG1lbnUsIG1lbnVJRCwgRkFMU0UsICZt
ZW51SXRlbUluZm8pOwotICAgIDo6RW5hYmxlTWVudUl0ZW0obWVudSwgbWVudUlELCBNRl9CWUNP
TU1BTkQgfCBNRl9FTkFCTEVEKTsKLX0KLQotdm9pZCBNaW5pQnJvd3Nlcjo6c2hvd0xhc3RWaXNp
dGVkU2l0ZXMoSVdlYlZpZXcmIHdlYlZpZXcpCi17Ci0gICAgSE1FTlUgbWVudSA9IDo6R2V0TWVu
dShtX2hNYWluV25kKTsKLQotICAgIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJCYWNrRm9yd2Fy
ZExpc3QsICZfX3V1aWRvZihJV2ViQmFja0ZvcndhcmRMaXN0KT4+IGJhY2tGb3J3YXJkTGlzdDsK
LSAgICBIUkVTVUxUIGhyID0gd2ViVmlldy5iYWNrRm9yd2FyZExpc3QoJmJhY2tGb3J3YXJkTGlz
dC5HZXRJbnRlcmZhY2VQdHIoKSk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGludCBjYXBhY2l0eSA9IDA7Ci0gICAgaHIgPSBiYWNrRm9yd2FyZExpc3QtPmNh
cGFjaXR5KCZjYXBhY2l0eSk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGludCBiYWNrQ291bnQgPSAwOwotICAgIGhyID0gYmFja0ZvcndhcmRMaXN0LT5iYWNr
TGlzdENvdW50KCZiYWNrQ291bnQpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBVSU5UIGJhY2tTZXR0aW5nID0gTUZfQllDT01NQU5EIHwgKChiYWNrQ291bnQp
ID8gTUZfRU5BQkxFRCA6IE1GX0RJU0FCTEVEKTsKLSAgICA6OkVuYWJsZU1lbnVJdGVtKG1lbnUs
IElETV9ISVNUT1JZX0JBQ0tXQVJELCBiYWNrU2V0dGluZyk7Ci0KLSAgICBpbnQgZm9yd2FyZENv
dW50ID0gMDsKLSAgICBociA9IGJhY2tGb3J3YXJkTGlzdC0+Zm9yd2FyZExpc3RDb3VudCgmZm9y
d2FyZENvdW50KTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
VUlOVCBmb3J3YXJkU2V0dGluZyA9IE1GX0JZQ09NTUFORCB8ICgoZm9yd2FyZENvdW50KSA/IE1G
X0VOQUJMRUQgOiBNRl9ESVNBQkxFRCk7Ci0gICAgOjpFbmFibGVNZW51SXRlbShtZW51LCBJRE1f
SElTVE9SWV9GT1JXQVJELCBmb3J3YXJkU2V0dGluZyk7Ci0KLSAgICBJV2ViSGlzdG9yeUl0ZW1Q
dHIgY3VycmVudEl0ZW07Ci0gICAgaHIgPSBiYWNrRm9yd2FyZExpc3QtPmN1cnJlbnRJdGVtKCZj
dXJyZW50SXRlbS5HZXRJbnRlcmZhY2VQdHIoKSk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGhyID0gbV93ZWJIaXN0b3J5LT5hZGRJdGVtcygxLCAmY3VycmVu
dEl0ZW0uR2V0SW50ZXJmYWNlUHRyKCkpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViSGlzdG9yeVByaXZhdGUsICZf
X3V1aWRvZihJV2ViSGlzdG9yeVByaXZhdGUpPj4gd2ViSGlzdG9yeTsKLSAgICBociA9IG1fd2Vi
SGlzdG9yeS0+UXVlcnlJbnRlcmZhY2UoSUlEX0lXZWJIaXN0b3J5UHJpdmF0ZSwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKio+KCZ3ZWJIaXN0b3J5LkdldEludGVyZmFjZVB0cigpKSk7Ci0gICAgaWYg
KEZBSUxFRChocikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCB0b3RhbExpc3RDb3VudCA9
IDA7Ci0gICAgaHIgPSB3ZWJIaXN0b3J5LT5hbGxJdGVtcygmdG90YWxMaXN0Q291bnQsIDApOwot
ICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2hpc3RvcnlJdGVt
cy5yZXNpemUodG90YWxMaXN0Q291bnQpOwotCi0gICAgc3RkOjp2ZWN0b3I8SVdlYkhpc3RvcnlJ
dGVtKj4gaGlzdG9yeVRvTG9hZCh0b3RhbExpc3RDb3VudCk7Ci0gICAgaHIgPSB3ZWJIaXN0b3J5
LT5hbGxJdGVtcygmdG90YWxMaXN0Q291bnQsIGhpc3RvcnlUb0xvYWQuZGF0YSgpKTsKLSAgICBp
ZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6ZV90IGkgPSAwOwotICAg
IGZvciAoYXV0byYgY3VyIDogaGlzdG9yeVRvTG9hZCkgewotICAgICAgICBtX2hpc3RvcnlJdGVt
c1tpXS5BdHRhY2goY3VyKTsKLSAgICAgICAgKytpOwotICAgIH0KLQotICAgIGludCBhbGxJdGVt
c09mZnNldCA9IDA7Ci0gICAgaWYgKHRvdGFsTGlzdENvdW50ID4gbWF4SGlzdG9yeVNpemUpCi0g
ICAgICAgIGFsbEl0ZW1zT2Zmc2V0ID0gdG90YWxMaXN0Q291bnQgLSBtYXhIaXN0b3J5U2l6ZTsK
LQotICAgIGludCBjdXJyZW50SGlzdG9yeUl0ZW0gPSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbV9oaXN0b3J5SXRlbXMuc2l6ZSgpICYmIChhbGxJdGVtc09mZnNldCArIGN1cnJlbnRIaXN0
b3J5SXRlbSkgPCBtX2hpc3RvcnlJdGVtcy5zaXplKCk7ICsraSkgewotICAgICAgICB1cGRhdGVN
ZW51SXRlbUZvckhpc3RvcnlJdGVtKG1lbnUsICoobV9oaXN0b3J5SXRlbXNbYWxsSXRlbXNPZmZz
ZXQgKyBjdXJyZW50SGlzdG9yeUl0ZW1dKSwgY3VycmVudEhpc3RvcnlJdGVtKTsKLSAgICAgICAg
KytjdXJyZW50SGlzdG9yeUl0ZW07Ci0gICAgfQotCi0gICAgLy8gSGlkZSBhbnkgaGlzdG9yeSB3
ZSBhcmVuJ3QgdXNpbmcgeWV0LgotICAgIGZvciAoaW50IGkgPSBjdXJyZW50SGlzdG9yeUl0ZW07
IGkgPCBtYXhIaXN0b3J5U2l6ZTsgKytpKQotICAgICAgICA6OkVuYWJsZU1lbnVJdGVtKG1lbnUs
IElETV9ISVNUT1JZX0xJTkswICsgaSwgTUZfQllDT01NQU5EIHwgTUZfRElTQUJMRUQpOwotfQot
Ci12b2lkIE1pbmlCcm93c2VyOjpsYXVuY2hJbnNwZWN0b3IoKQotewotICAgIGlmICghbV93ZWJW
aWV3UHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFTVUNDRUVERUQobV93ZWJW
aWV3UHJpdmF0ZS0+aW5zcGVjdG9yKCZtX2luc3BlY3Rvci5HZXRJbnRlcmZhY2VQdHIoKSkpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX2luc3BlY3Rvci0+c2hvdygpOwotfQotCi12b2lkIE1p
bmlCcm93c2VyOjpuYXZpZ2F0ZUZvcndhcmRPckJhY2t3YXJkKFVJTlQgbWVudUlEKQotewotICAg
IGlmICghbV93ZWJWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBCT09MIHdlbnRCYWNrT3JG
b3J3YXJkID0gRkFMU0U7Ci0gICAgaWYgKElETV9ISVNUT1JZX0ZPUldBUkQgPT0gbWVudUlEKQot
ICAgICAgICBtX3dlYlZpZXctPmdvRm9yd2FyZCgmd2VudEJhY2tPckZvcndhcmQpOwotICAgIGVs
c2UKLSAgICAgICAgbV93ZWJWaWV3LT5nb0JhY2soJndlbnRCYWNrT3JGb3J3YXJkKTsKLX0KLQot
dm9pZCBNaW5pQnJvd3Nlcjo6bmF2aWdhdGVUb0hpc3RvcnkoVUlOVCBtZW51SUQpCi17Ci0gICAg
aWYgKCFtX3dlYlZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBoaXN0b3J5RW50cnkg
PSBtZW51SUQgLSBJRE1fSElTVE9SWV9MSU5LMDsKLSAgICBpZiAoaGlzdG9yeUVudHJ5ID4gbV9o
aXN0b3J5SXRlbXMuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJV2ViSGlzdG9yeUl0
ZW1QdHIgZGVzaXJlZEhpc3RvcnlJdGVtID0gbV9oaXN0b3J5SXRlbXNbaGlzdG9yeUVudHJ5XTsK
LSAgICBpZiAoIWRlc2lyZWRIaXN0b3J5SXRlbSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQk9P
TCBzdWNjZWVkZWQgPSBGQUxTRTsKLSAgICBtX3dlYlZpZXctPmdvVG9CYWNrRm9yd2FyZEl0ZW0o
ZGVzaXJlZEhpc3RvcnlJdGVtLCAmc3VjY2VlZGVkKTsKLQotICAgIF9ic3RyX3QgZnJhbWVVUkw7
Ci0gICAgZGVzaXJlZEhpc3RvcnlJdGVtLT5VUkxTdHJpbmcoZnJhbWVVUkwuR2V0QWRkcmVzcygp
KTsKLQotICAgIDo6U2VuZE1lc3NhZ2UobV9oVVJMQmFyV25kLCAoVUlOVClXTV9TRVRURVhULCAw
LCAoTFBBUkFNKWZyYW1lVVJMLkdldEJTVFIoKSk7Ci19Ci0KLWJvb2wgTWluaUJyb3dzZXI6Omdv
QmFjaygpCi17Ci0gICAgQk9PTCB3ZW50QmFjayA9IEZBTFNFOwotICAgIG1fd2ViVmlldy0+Z29C
YWNrKCZ3ZW50QmFjayk7Ci0gICAgcmV0dXJuIHdlbnRCYWNrOwotfQotCi1ib29sIE1pbmlCcm93
c2VyOjpnb0ZvcndhcmQoKQotewotICAgIEJPT0wgd2VudEZvcndhcmQgPSBGQUxTRTsKLSAgICBt
X3dlYlZpZXctPmdvRm9yd2FyZCgmd2VudEZvcndhcmQpOwotICAgIHJldHVybiB3ZW50Rm9yd2Fy
ZDsKLX0KLQotSFJFU1VMVCBNaW5pQnJvd3Nlcjo6bG9hZFVSTChjb25zdCBCU1RSJiBwYXNzZWRV
UkwpCi17Ci0gICAgaWYgKCFwYXNzZWRVUkwpCi0gICAgICAgIHJldHVybiBFX0lOVkFMSURBUkc7
Ci0KLSAgICBfYnN0cl90IHVybEJTdHIocGFzc2VkVVJMKTsKLSAgICBpZiAoISF1cmxCU3RyICYm
ICg6OlBhdGhGaWxlRXhpc3RzKHVybEJTdHIpIHx8IDo6UGF0aElzVU5DKHVybEJTdHIpKSkgewot
ICAgICAgICBUQ0hBUiBmaWxlVVJMW0lOVEVSTkVUX01BWF9VUkxfTEVOR1RIXTsKLSAgICAgICAg
RFdPUkQgZmlsZVVSTExlbmd0aCA9IHNpemVvZihmaWxlVVJMKSAvIHNpemVvZihmaWxlVVJMWzBd
KTsKLQotICAgICAgICBpZiAoU1VDQ0VFREVEKDo6VXJsQ3JlYXRlRnJvbVBhdGgodXJsQlN0ciwg
ZmlsZVVSTCwgJmZpbGVVUkxMZW5ndGgsIDApKSkKLSAgICAgICAgICAgIHVybEJTdHIgPSBmaWxl
VVJMOwotICAgIH0KLQotICAgIElXZWJGcmFtZVB0ciBmcmFtZTsKLSAgICBIUkVTVUxUIGhyID0g
bV93ZWJWaWV3LT5tYWluRnJhbWUoJmZyYW1lLkdldEludGVyZmFjZVB0cigpKTsKLSAgICBpZiAo
RkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgSVdlYk11dGFibGVVUkxSZXF1
ZXN0UHRyIHJlcXVlc3Q7Ci0gICAgaHIgPSBXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJN
dXRhYmxlVVJMUmVxdWVzdCwgMCwgSUlEX0lXZWJNdXRhYmxlVVJMUmVxdWVzdCwgKHZvaWQqKikm
cmVxdWVzdCk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBocjsKLQotICAg
IGhyID0gcmVxdWVzdC0+aW5pdFdpdGhVUkwod2Nzc3RyKHN0YXRpY19jYXN0PHdjaGFyX3QqPih1
cmxCU3RyKSwgTCI6Ly8iKSA/IHVybEJTdHIgOiBfYnN0cl90KEwiaHR0cDovLyIpICsgdXJsQlN0
ciwgV2ViVVJMUmVxdWVzdFVzZVByb3RvY29sQ2FjaGVQb2xpY3ksIDYwKTsKLSAgICBpZiAoRkFJ
TEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgX2JzdHJfdCBtZXRob2RCU3RyKEwi
R0VUIik7Ci0gICAgaHIgPSByZXF1ZXN0LT5zZXRIVFRQTWV0aG9kKG1ldGhvZEJTdHIpOwotICAg
IGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICBociA9IGZyYW1lLT5s
b2FkUmVxdWVzdChyZXF1ZXN0KTsKLQotICAgIHJldHVybiBocjsKLX0KLQotdm9pZCBNaW5pQnJv
d3Nlcjo6ZXhpdFByb2dyYW0oKQotewotICAgIDo6UG9zdE1lc3NhZ2UobV9oTWFpblduZCwgc3Rh
dGljX2Nhc3Q8VUlOVD4oV01fQ09NTUFORCksIE1BS0VMUEFSQU0oSURNX0VYSVQsIDApLCAwKTsK
LX0KLQotdm9pZCBNaW5pQnJvd3Nlcjo6c2V0VXNlckFnZW50KFVJTlQgbWVudUlEKQotewotICAg
IGlmICghd2ViVmlldygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfYnN0cl90IGN1c3RvbVVz
ZXJBZ2VudDsKLSAgICBzd2l0Y2ggKG1lbnVJRCkgewotICAgIGNhc2UgSURNX1VBX0RFRkFVTFQ6
Ci0gICAgICAgIC8vIFNldCB0byBudWxsIHVzZXIgYWdlbnQKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJRE1fVUFfU0FGQVJJXzhfMDoKLSAgICAgICAgY3VzdG9tVXNlckFnZW50ID0gTCJNb3pp
bGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xMCkgQXBwbGVXZWJLaXQvNjAw
LjEuMjUgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzguMCBTYWZhcmkvNjAwLjEuMjUiOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIElETV9VQV9TQUZBUklfSU9TXzhfSVBIT05FOgotICAg
ICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChpUGhvbmU7IENQVSBPUyA4XzEg
bGlrZSBNYWMgT1MgWCkgQXBwbGVXZWJLaXQvNjAxLjEuNCAoS0hUTUwsIGxpa2UgR2Vja28pIFZl
cnNpb24vOC4wIE1vYmlsZS8xMkI0MDMgU2FmYXJpLzYwMC4xLjQiOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIElETV9VQV9TQUZBUklfSU9TXzhfSVBBRDoKLSAgICAgICAgY3VzdG9tVXNlckFn
ZW50ID0gTCJNb3ppbGxhLzUuMCAoaVBhZDsgQ1BVIE9TIDhfMSBsaWtlIE1hYyBPUyBYKSBBcHBs
ZVdlYktpdC82MDAuMS40IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi84LjAgTW9iaWxlLzEy
QjQwMyBTYWZhcmkvNjAwLjEuNCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURNX1VBX0lF
XzExOgotICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChXaW5kb3dzIE5U
IDYuMzsgV09XNjQ7IFRyaWRlbnQvNy4wOyBydjoxMS4wKSBsaWtlIEdlY2tvIjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJRE1fVUFfQ0hST01FX01BQzoKLSAgICAgICAgY3VzdG9tVXNlckFn
ZW50ID0gTCJNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF84XzMpIEFw
cGxlV2ViS2l0LzUzNy4zMSAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8yNi4wLjE0MTAuNjUg
U2FmYXJpLzUzNy4zMSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURNX1VBX0NIUk9NRV9X
SU46Ci0gICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9IEwiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQg
Ni4yOyBXT1c2NCkgQXBwbGVXZWJLaXQvNTM3LjMxIChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21l
LzI2LjAuMTQxMC42NCBTYWZhcmkvNTM3LjMxIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
RE1fVUFfRklSRUZPWF9NQUM6Ci0gICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9IEwiTW96aWxsYS81
LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTAuODsgcnY6MjAuMCkgR2Vja28vMjAxMDAx
MDEgRmlyZWZveC8yMC4wIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1fVUFfRklSRUZP
WF9XSU46Ci0gICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9IEwiTW96aWxsYS81LjAgKFdpbmRvd3Mg
TlQgNi4yOyBXT1c2NDsgcnY6MjAuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC8yMC4wIjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1fVUFfT1RIRVI6Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgQVNTRVJUKDApOyAvLyBXZSBzaG91bGQgbmV2ZXIgaGl0IHRoaXMgY2FzZQotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgc2V0VXNlckFnZW50KGN1c3RvbVVzZXJBZ2VudCk7Ci19Ci0K
LXZvaWQgTWluaUJyb3dzZXI6OnNldFVzZXJBZ2VudChfYnN0cl90JiBjdXN0b21Vc2VyQWdlbnQp
Ci17Ci0gICAgd2ViVmlldygpLT5zZXRDdXN0b21Vc2VyQWdlbnQoY3VzdG9tVXNlckFnZW50Lkdl
dEJTVFIoKSk7Ci19Ci0KLV9ic3RyX3QgTWluaUJyb3dzZXI6OnVzZXJBZ2VudCgpCi17Ci0gICAg
X2JzdHJfdCB1c2VyQWdlbnQ7Ci0gICAgaWYgKEZBSUxFRCh3ZWJWaWV3KCktPmN1c3RvbVVzZXJB
Z2VudCgmdXNlckFnZW50LkdldEJTVFIoKSkpKQotICAgICAgICByZXR1cm4gX2JzdHJfdChMIi0g
VW5rbm93biAtOiBDYWxsIGZhaWxlZC4iKTsKLQotICAgIHJldHVybiB1c2VyQWdlbnQ7Ci19Ci0K
LXR5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYklCQWN0aW9ucywgJl9fdXVpZG9mKElX
ZWJJQkFjdGlvbnMpPj4gSVdlYklCQWN0aW9uc1B0cjsKLQotdm9pZCBNaW5pQnJvd3Nlcjo6cmVz
ZXRab29tKCkKLXsKLSAgICBJV2ViSUJBY3Rpb25zUHRyIHdlYkFjdGlvbnM7Ci0gICAgaWYgKEZB
SUxFRChtX3dlYlZpZXctPlF1ZXJ5SW50ZXJmYWNlKElJRF9JV2ViSUJBY3Rpb25zLCByZWludGVy
cHJldF9jYXN0PHZvaWQqKj4oJndlYkFjdGlvbnMuR2V0SW50ZXJmYWNlUHRyKCkpKSkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHdlYkFjdGlvbnMtPnJlc2V0UGFnZVpvb20obnVsbHB0cik7Ci19
Ci0KLXZvaWQgTWluaUJyb3dzZXI6Onpvb21JbigpCi17Ci0gICAgSVdlYklCQWN0aW9uc1B0ciB3
ZWJBY3Rpb25zOwotICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT5RdWVyeUludGVyZmFjZShJSURf
SVdlYklCQWN0aW9ucywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3ZWJBY3Rpb25zLkdldElu
dGVyZmFjZVB0cigpKSkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3ZWJBY3Rpb25zLT56b29t
UGFnZUluKG51bGxwdHIpOwotfQotCi12b2lkIE1pbmlCcm93c2VyOjp6b29tT3V0KCkKLXsKLSAg
ICBJV2ViSUJBY3Rpb25zUHRyIHdlYkFjdGlvbnM7Ci0gICAgaWYgKEZBSUxFRChtX3dlYlZpZXct
PlF1ZXJ5SW50ZXJmYWNlKElJRF9JV2ViSUJBY3Rpb25zLCByZWludGVycHJldF9jYXN0PHZvaWQq
Kj4oJndlYkFjdGlvbnMuR2V0SW50ZXJmYWNlUHRyKCkpKSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHdlYkFjdGlvbnMtPnpvb21QYWdlT3V0KG51bGxwdHIpOwotfQotCi10eXBlZGVmIF9jb21f
cHRyX3Q8X2NvbV9JSUlEPElXZWJWaWV3UHJpdmF0ZTMsICZfX3V1aWRvZihJV2ViVmlld1ByaXZh
dGUzKT4+IElXZWJWaWV3UHJpdmF0ZTNQdHI7Ci0KLXZvaWQgTWluaUJyb3dzZXI6OnNob3dMYXll
clRyZWUoKQotewotICAgIElXZWJWaWV3UHJpdmF0ZTNQdHIgd2ViVmlld1ByaXZhdGU7Ci0gICAg
aWYgKEZBSUxFRChtX3dlYlZpZXctPlF1ZXJ5SW50ZXJmYWNlKElJRF9JV2ViVmlld1ByaXZhdGUz
LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndlYlZpZXdQcml2YXRlLkdldEludGVyZmFjZVB0
cigpKSkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBPdXRwdXREZWJ1Z1N0cmluZyhMIkNVUlJF
TlQgVFJFRTpcbiIpOwotCi0gICAgX2JzdHJfdCBsYXllclRyZWVCc3RyOwotICAgIGlmIChGQUlM
RUQod2ViVmlld1ByaXZhdGUtPmxheWVyVHJlZUFzU3RyaW5nKGxheWVyVHJlZUJzdHIuR2V0QWRk
cmVzcygpKSkpCi0gICAgICAgIE91dHB1dERlYnVnU3RyaW5nKEwiICAgIEZhaWxlZCB0byByZXRy
aWV2ZSB0aGUgbGF5ZXIgdHJlZS5cbiIpOwotICAgIGVsc2UKLSAgICAgICAgT3V0cHV0RGVidWdT
dHJpbmcobGF5ZXJUcmVlQnN0cik7Ci0gICAgT3V0cHV0RGVidWdTdHJpbmcoTCJcblxuIik7Ci19
Ci0KLXN0YXRpYyBCT09MIENBTExCQUNLIEFib3J0UHJvYyhIREMgaERDLCBpbnQgRXJyb3IpCi17
Ci0gICAgTVNHIG1zZzsKLSAgICB3aGlsZSAoOjpQZWVrTWVzc2FnZSgmbXNnLCAwLCAwLCAwLCBQ
TV9SRU1PVkUpKSB7Ci0gICAgICAgIDo6VHJhbnNsYXRlTWVzc2FnZSgmbXNnKTsKLSAgICAgICAg
OjpEaXNwYXRjaE1lc3NhZ2UoJm1zZyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0K
LXN0YXRpYyBIREMgZ2V0UHJpbnRlckRDKCkKLXsKLSAgICBQUklOVERMRyBwZGxnOwotICAgIG1l
bXNldCgmcGRsZywgMCwgc2l6ZW9mKFBSSU5URExHKSk7Ci0gICAgcGRsZy5sU3RydWN0U2l6ZSA9
IHNpemVvZihQUklOVERMRyk7Ci0gICAgcGRsZy5GbGFncyA9IFBEX1BSSU5UU0VUVVAgfCBQRF9S
RVRVUk5EQzsKLQotICAgIDo6UHJpbnREbGcoJnBkbGcpOwotCi0gICAgcmV0dXJuIHBkbGcuaERD
OwotfQotCi1zdGF0aWMgdm9pZCBpbml0RG9jU3RydWN0KERPQ0lORk8qIGRpLCBUQ0hBUiogZG9j
bmFtZSkKLXsKLSAgICBtZW1zZXQoZGksIDAsIHNpemVvZihET0NJTkZPKSk7Ci0gICAgZGktPmNi
U2l6ZSA9IHNpemVvZihET0NJTkZPKTsKLSAgICBkaS0+bHBzekRvY05hbWUgPSBkb2NuYW1lOwot
fQotCi12b2lkIE1pbmlCcm93c2VyOjpwcmludCgpCi17Ci0gICAgSERDIHByaW50REMgPSBnZXRQ
cmludGVyREMoKTsKLSAgICBpZiAoIXByaW50REMpIHsKLSAgICAgICAgOjpNZXNzYWdlQm94KDAs
IEwiRXJyb3IgY3JlYXRpbmcgcHJpbnRpbmcgREMiLCBMIkVycm9yIiwgTUJfQVBQTE1PREFMIHwg
TUJfT0spOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKDo6U2V0QWJvcnRQcm9j
KHByaW50REMsIEFib3J0UHJvYykgPT0gU1BfRVJST1IpIHsKLSAgICAgICAgOjpNZXNzYWdlQm94
KDAsIEwiRXJyb3Igc2V0dGluZyB1cCBBYm9ydFByb2MiLCBMIkVycm9yIiwgTUJfQVBQTE1PREFM
IHwgTUJfT0spOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSVdlYkZyYW1lUHRyIGZy
YW1lID0gbWFpbkZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgSVdlYkZyYW1lUHJpdmF0ZVB0ciBmcmFtZVByaXZhdGU7Ci0gICAgaWYgKEZBSUxFRChmcmFt
ZS0+UXVlcnlJbnRlcmZhY2UoJmZyYW1lUHJpdmF0ZS5HZXRJbnRlcmZhY2VQdHIoKSkpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBmcmFtZVByaXZhdGUtPnNldEluUHJpbnRpbmdNb2RlKFRSVUUs
IHByaW50REMpOwotCi0gICAgVUlOVCBwYWdlQ291bnQgPSAwOwotICAgIGZyYW1lUHJpdmF0ZS0+
Z2V0UHJpbnRlZFBhZ2VDb3VudChwcmludERDLCAmcGFnZUNvdW50KTsKLQotICAgIERPQ0lORk8g
ZGk7Ci0gICAgaW5pdERvY1N0cnVjdCgmZGksIEwiV2ViS2l0IERvYyIpOwotICAgIDo6U3RhcnRE
b2MocHJpbnREQywgJmRpKTsKLQotICAgIC8vIEZJWE1FOiBOZWVkIENvcmVHcmFwaGljcyBpbXBs
ZW1lbnRhdGlvbgotICAgIHZvaWQqIGdyYXBoaWNzQ29udGV4dCA9IDA7Ci0gICAgZm9yIChzaXpl
X3QgcGFnZSA9IDE7IHBhZ2UgPD0gcGFnZUNvdW50OyArK3BhZ2UpIHsKLSAgICAgICAgOjpTdGFy
dFBhZ2UocHJpbnREQyk7Ci0gICAgICAgIGZyYW1lUHJpdmF0ZS0+c3Bvb2xQYWdlcyhwcmludERD
LCBwYWdlLCBwYWdlLCBncmFwaGljc0NvbnRleHQpOwotICAgICAgICA6OkVuZFBhZ2UocHJpbnRE
Qyk7Ci0gICAgfQotCi0gICAgZnJhbWVQcml2YXRlLT5zZXRJblByaW50aW5nTW9kZShGQUxTRSwg
cHJpbnREQyk7Ci0KLSAgICA6OkVuZERvYyhwcmludERDKTsKLSAgICA6OkRlbGV0ZURDKHByaW50
REMpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRXaW5kb3dUZXh0KEhXTkQgZGlhbG9nLCBVSU5UIGZp
ZWxkLCBfYnN0cl90IHZhbHVlKQotewotICAgIDo6U2V0RGxnSXRlbVRleHQoZGlhbG9nLCBmaWVs
ZCwgdmFsdWUpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRXaW5kb3dUZXh0KEhXTkQgZGlhbG9nLCBV
SU5UIGZpZWxkLCBVSU5UIHZhbHVlKQotewotICAgIFN0cmluZyB2YWx1ZVN0ciA9IFdURjo6U3Ry
aW5nOjpudW1iZXIodmFsdWUpOwotCi0gICAgc2V0V2luZG93VGV4dChkaWFsb2csIGZpZWxkLCBf
YnN0cl90KHZhbHVlU3RyLnV0ZjgoKS5kYXRhKCkpKTsKLX0KLQotdHlwZWRlZiBfY29tX3B0cl90
PF9jb21fSUlJRDxJUHJvcGVydHlCYWcsICZfX3V1aWRvZihJUHJvcGVydHlCYWcpPj4gSVByb3Bl
cnR5QmFnUHRyOwotCi1zdGF0aWMgdm9pZCBzZXRXaW5kb3dUZXh0KEhXTkQgZGlhbG9nLCBVSU5U
IGZpZWxkLCBJUHJvcGVydHlCYWdQdHIgc3RhdGlzdGljcywgY29uc3QgX2JzdHJfdCYga2V5KQot
ewotICAgIF92YXJpYW50X3QgdmFyOwotICAgIFZfVlQoJnZhcikgPSBWVF9VSTg7Ci0gICAgaWYg
KEZBSUxFRChzdGF0aXN0aWNzLT5SZWFkKGtleSwgJnZhci5HZXRWQVJJQU5UKCksIG51bGxwdHIp
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlID0gVl9V
STgoJnZhcik7Ci0gICAgU3RyaW5nIHZhbHVlU3RyID0gV1RGOjpTdHJpbmc6Om51bWJlcih2YWx1
ZSk7Ci0KLSAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgZmllbGQsIF9ic3RyX3QodmFsdWVTdHIu
dXRmOCgpLmRhdGEoKSkpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRXaW5kb3dUZXh0KEhXTkQgZGlh
bG9nLCBVSU5UIGZpZWxkLCBDRkRpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgQ0ZTdHJpbmdSZWYg
a2V5LCBVSU5UJiB0b3RhbCkKLXsKLSAgICBDRk51bWJlclJlZiBjb3VudE51bSA9IHN0YXRpY19j
YXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShkaWN0aW9uYXJ5LCBrZXkpKTsK
LSAgICBpZiAoIWNvdW50TnVtKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgY291bnQgPSAw
OwotICAgIENGTnVtYmVyR2V0VmFsdWUoY291bnROdW0sIGtDRk51bWJlckludFR5cGUsICZjb3Vu
dCk7Ci0KLSAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgZmllbGQsIHN0YXRpY19jYXN0PFVJTlQ+
KGNvdW50KSk7Ci0gICAgdG90YWwgKz0gY291bnQ7Ci19Ci0KLXZvaWQgTWluaUJyb3dzZXI6OnVw
ZGF0ZVN0YXRpc3RpY3MoSFdORCBkaWFsb2cpCi17Ci0gICAgSVdlYkNvcmVTdGF0aXN0aWNzUHRy
IHdlYkNvcmVTdGF0aXN0aWNzID0gc3RhdGlzdGljcygpOwotICAgIGlmICghd2ViQ29yZVN0YXRp
c3RpY3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIElQcm9wZXJ0eUJhZ1B0ciBzdGF0aXN0aWNz
OwotICAgIEhSRVNVTFQgaHIgPSB3ZWJDb3JlU3RhdGlzdGljcy0+bWVtb3J5U3RhdGlzdGljcygm
c3RhdGlzdGljcy5HZXRJbnRlcmZhY2VQdHIoKSk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIEZhc3RNYWxsb2MuCi0gICAgc2V0V2luZG93VGV4dChkaWFs
b2csIElEQ19SRVNFUlZFRF9WTSwgc3RhdGlzdGljcywgIkZhc3RNYWxsb2NSZXNlcnZlZFZNQnl0
ZXMiKTsKLSAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0NPTU1JVFRFRF9WTSwgc3RhdGlz
dGljcywgIkZhc3RNYWxsb2NDb21taXR0ZWRWTUJ5dGVzIik7Ci0gICAgc2V0V2luZG93VGV4dChk
aWFsb2csIElEQ19GUkVFX0xJU1RfQllURVMsIHN0YXRpc3RpY3MsICJGYXN0TWFsbG9jRnJlZUxp
c3RCeXRlcyIpOwotCi0gICAgLy8gV2ViQ29yZSBDYWNoZS4KLSNpZiBVU0UoQ0YpCi0gICAgSVdl
YkNhY2hlUHRyIHdlYkNhY2hlID0gdGhpcy0+d2ViQ2FjaGUoKTsKLQotICAgIGludCBkaWN0Q291
bnQgPSA2OwotICAgIElQcm9wZXJ0eUJhZyogY2FjaGVEaWN0WzZdID0geyAwIH07Ci0gICAgaWYg
KEZBSUxFRCh3ZWJDYWNoZS0+c3RhdGlzdGljcygmZGljdENvdW50LCBjYWNoZURpY3QpKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQ09NUHRyPENGRGljdGlvbmFyeVByb3BlcnR5QmFnPiBjb3Vu
dHMsIHNpemVzLCBsaXZlU2l6ZXMsIGRlY29kZWRTaXplcywgcHVyZ2FibGVTaXplczsKLSAgICBj
b3VudHMuYWRvcHRSZWYocmVpbnRlcnByZXRfY2FzdDxDRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZyo+
KGNhY2hlRGljdFswXSkpOwotICAgIHNpemVzLmFkb3B0UmVmKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZE
aWN0aW9uYXJ5UHJvcGVydHlCYWcqPihjYWNoZURpY3RbMV0pKTsKLSAgICBsaXZlU2l6ZXMuYWRv
cHRSZWYocmVpbnRlcnByZXRfY2FzdDxDRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZyo+KGNhY2hlRGlj
dFsyXSkpOwotICAgIGRlY29kZWRTaXplcy5hZG9wdFJlZihyZWludGVycHJldF9jYXN0PENGRGlj
dGlvbmFyeVByb3BlcnR5QmFnKj4oY2FjaGVEaWN0WzNdKSk7Ci0gICAgcHVyZ2FibGVTaXplcy5h
ZG9wdFJlZihyZWludGVycHJldF9jYXN0PENGRGljdGlvbmFyeVByb3BlcnR5QmFnKj4oY2FjaGVE
aWN0WzRdKSk7Ci0KLSAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgaW1hZ2VzS2V5ID0gQ0ZTVFIoImlt
YWdlcyIpOwotICAgIHN0YXRpYyBDRlN0cmluZ1JlZiBzdHlsZXNoZWV0c0tleSA9IENGU1RSKCJz
dHlsZSBzaGVldHMiKTsKLSAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgeHNsS2V5ID0gQ0ZTVFIoInhz
bCIpOwotICAgIHN0YXRpYyBDRlN0cmluZ1JlZiBzY3JpcHRzS2V5ID0gQ0ZTVFIoInNjcmlwdHMi
KTsKLQotICAgIGlmIChjb3VudHMpIHsKLSAgICAgICAgVUlOVCB0b3RhbE9iamVjdHMgPSAwOwot
ICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0lNQUdFU19PQkpFQ1RfQ09VTlQsIGNv
dW50cy0+ZGljdGlvbmFyeSgpLCBpbWFnZXNLZXksIHRvdGFsT2JqZWN0cyk7Ci0gICAgICAgIHNl
dFdpbmRvd1RleHQoZGlhbG9nLCBJRENfQ1NTX09CSkVDVF9DT1VOVCwgY291bnRzLT5kaWN0aW9u
YXJ5KCksIHN0eWxlc2hlZXRzS2V5LCB0b3RhbE9iamVjdHMpOwotICAgICAgICBzZXRXaW5kb3dU
ZXh0KGRpYWxvZywgSURDX1hTTF9PQkpFQ1RfQ09VTlQsIGNvdW50cy0+ZGljdGlvbmFyeSgpLCB4
c2xLZXksIHRvdGFsT2JqZWN0cyk7Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENf
SlNDX09CSkVDVF9DT1VOVCwgY291bnRzLT5kaWN0aW9uYXJ5KCksIHNjcmlwdHNLZXksIHRvdGFs
T2JqZWN0cyk7Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfVE9UQUxfT0JKRUNU
X0NPVU5ULCB0b3RhbE9iamVjdHMpOwotICAgIH0KLQotICAgIGlmIChzaXplcykgewotICAgICAg
ICBVSU5UIHRvdGFsQnl0ZXMgPSAwOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURD
X0lNQUdFU19CWVRFUywgc2l6ZXMtPmRpY3Rpb25hcnkoKSwgaW1hZ2VzS2V5LCB0b3RhbEJ5dGVz
KTsKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19DU1NfQllURVMsIHNpemVzLT5k
aWN0aW9uYXJ5KCksIHN0eWxlc2hlZXRzS2V5LCB0b3RhbEJ5dGVzKTsKLSAgICAgICAgc2V0V2lu
ZG93VGV4dChkaWFsb2csIElEQ19YU0xfQllURVMsIHNpemVzLT5kaWN0aW9uYXJ5KCksIHhzbEtl
eSwgdG90YWxCeXRlcyk7Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSlNDX0JZ
VEVTLCBzaXplcy0+ZGljdGlvbmFyeSgpLCBzY3JpcHRzS2V5LCB0b3RhbEJ5dGVzKTsKLSAgICAg
ICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19UT1RBTF9CWVRFUywgdG90YWxCeXRlcyk7Ci0g
ICAgfQotCi0gICAgaWYgKGxpdmVTaXplcykgewotICAgICAgICBVSU5UIHRvdGFsTGl2ZUJ5dGVz
ID0gMDsKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19JTUFHRVNfTElWRV9DT1VO
VCwgbGl2ZVNpemVzLT5kaWN0aW9uYXJ5KCksIGltYWdlc0tleSwgdG90YWxMaXZlQnl0ZXMpOwot
ICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0NTU19MSVZFX0NPVU5ULCBsaXZlU2l6
ZXMtPmRpY3Rpb25hcnkoKSwgc3R5bGVzaGVldHNLZXksIHRvdGFsTGl2ZUJ5dGVzKTsKLSAgICAg
ICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19YU0xfTElWRV9DT1VOVCwgbGl2ZVNpemVzLT5k
aWN0aW9uYXJ5KCksIHhzbEtleSwgdG90YWxMaXZlQnl0ZXMpOwotICAgICAgICBzZXRXaW5kb3dU
ZXh0KGRpYWxvZywgSURDX0pTQ19MSVZFX0NPVU5ULCBsaXZlU2l6ZXMtPmRpY3Rpb25hcnkoKSwg
c2NyaXB0c0tleSwgdG90YWxMaXZlQnl0ZXMpOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxv
ZywgSURDX1RPVEFMX0xJVkVfQ09VTlQsIHRvdGFsTGl2ZUJ5dGVzKTsKLSAgICB9Ci0KLSAgICBp
ZiAoZGVjb2RlZFNpemVzKSB7Ci0gICAgICAgIFVJTlQgdG90YWxEZWNvZGVkID0gMDsKLSAgICAg
ICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19JTUFHRVNfREVDT0RFRF9DT1VOVCwgZGVjb2Rl
ZFNpemVzLT5kaWN0aW9uYXJ5KCksIGltYWdlc0tleSwgdG90YWxEZWNvZGVkKTsKLSAgICAgICAg
c2V0V2luZG93VGV4dChkaWFsb2csIElEQ19DU1NfREVDT0RFRF9DT1VOVCwgZGVjb2RlZFNpemVz
LT5kaWN0aW9uYXJ5KCksIHN0eWxlc2hlZXRzS2V5LCB0b3RhbERlY29kZWQpOwotICAgICAgICBz
ZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1hTTF9ERUNPREVEX0NPVU5ULCBkZWNvZGVkU2l6ZXMt
PmRpY3Rpb25hcnkoKSwgeHNsS2V5LCB0b3RhbERlY29kZWQpOwotICAgICAgICBzZXRXaW5kb3dU
ZXh0KGRpYWxvZywgSURDX0pTQ19ERUNPREVEX0NPVU5ULCBkZWNvZGVkU2l6ZXMtPmRpY3Rpb25h
cnkoKSwgc2NyaXB0c0tleSwgdG90YWxEZWNvZGVkKTsKLSAgICAgICAgc2V0V2luZG93VGV4dChk
aWFsb2csIElEQ19UT1RBTF9ERUNPREVELCB0b3RhbERlY29kZWQpOwotICAgIH0KLQotICAgIGlm
IChwdXJnYWJsZVNpemVzKSB7Ci0gICAgICAgIFVJTlQgdG90YWxQdXJnYWJsZSA9IDA7Ci0gICAg
ICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSU1BR0VTX1BVUkdFQUJMRV9DT1VOVCwgcHVy
Z2FibGVTaXplcy0+ZGljdGlvbmFyeSgpLCBpbWFnZXNLZXksIHRvdGFsUHVyZ2FibGUpOwotICAg
ICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0NTU19QVVJHRUFCTEVfQ09VTlQsIHB1cmdh
YmxlU2l6ZXMtPmRpY3Rpb25hcnkoKSwgc3R5bGVzaGVldHNLZXksIHRvdGFsUHVyZ2FibGUpOwot
ICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1hTTF9QVVJHRUFCTEVfQ09VTlQsIHB1
cmdhYmxlU2l6ZXMtPmRpY3Rpb25hcnkoKSwgeHNsS2V5LCB0b3RhbFB1cmdhYmxlKTsKLSAgICAg
ICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19KU0NfUFVSR0VBQkxFX0NPVU5ULCBwdXJnYWJs
ZVNpemVzLT5kaWN0aW9uYXJ5KCksIHNjcmlwdHNLZXksIHRvdGFsUHVyZ2FibGUpOwotICAgICAg
ICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1RPVEFMX1BVUkdFQUJMRSwgdG90YWxQdXJnYWJs
ZSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBKYXZhU2NyaXB0IEhlYXAuCi0gICAgc2V0V2lu
ZG93VGV4dChkaWFsb2csIElEQ19KU0NfSEVBUF9TSVpFLCBzdGF0aXN0aWNzLCAiSmF2YVNjcmlw
dEhlYXBTaXplIik7Ci0gICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19KU0NfSEVBUF9GUkVF
LCBzdGF0aXN0aWNzLCAiSmF2YVNjcmlwdEZyZWVTaXplIik7Ci0KLSAgICBVSU5UIGNvdW50Owot
ICAgIGlmIChTVUNDRUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmphdmFTY3JpcHRPYmplY3RzQ291
bnQoJmNvdW50KSkpCi0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfVE9UQUxfSlND
X0hFQVBfT0JKRUNUUywgY291bnQpOwotICAgIGlmIChTVUNDRUVERUQod2ViQ29yZVN0YXRpc3Rp
Y3MtPmphdmFTY3JpcHRHbG9iYWxPYmplY3RzQ291bnQoJmNvdW50KSkpCi0gICAgICAgIHNldFdp
bmRvd1RleHQoZGlhbG9nLCBJRENfR0xPQkFMX0pTQ19IRUFQX09CSkVDVFMsIGNvdW50KTsKLSAg
ICBpZiAoU1VDQ0VFREVEKHdlYkNvcmVTdGF0aXN0aWNzLT5qYXZhU2NyaXB0UHJvdGVjdGVkT2Jq
ZWN0c0NvdW50KCZjb3VudCkpKQotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1BS
T1RFQ1RFRF9KU0NfSEVBUF9PQkpFQ1RTLCBjb3VudCk7Ci0KLSAgICAvLyBGb250IGFuZCBHbHlw
aCBDYWNoZXMuCi0gICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+Y2FjaGVkRm9u
dERhdGFDb3VudCgmY291bnQpKSkKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19U
T1RBTF9GT05UX09CSkVDVFMsIGNvdW50KTsKLSAgICBpZiAoU1VDQ0VFREVEKHdlYkNvcmVTdGF0
aXN0aWNzLT5jYWNoZWRGb250RGF0YUluYWN0aXZlQ291bnQoJmNvdW50KSkpCi0gICAgICAgIHNl
dFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSU5BQ1RJVkVfRk9OVF9PQkpFQ1RTLCBjb3VudCk7Ci0g
ICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+Z2x5cGhQYWdlQ291bnQoJmNvdW50
KSkpCi0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfR0xZUEhfUEFHRVMsIGNvdW50
KTsKLQotICAgIC8vIFNpdGUgSWNvbiBEYXRhYmFzZS4KLSAgICBpZiAoU1VDQ0VFREVEKHdlYkNv
cmVTdGF0aXN0aWNzLT5pY29uUGFnZVVSTE1hcHBpbmdDb3VudCgmY291bnQpKSkKLSAgICAgICAg
c2V0V2luZG93VGV4dChkaWFsb2csIElEQ19QQUdFX1VSTF9NQVBQSU5HUywgY291bnQpOwotICAg
IGlmIChTVUNDRUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmljb25SZXRhaW5lZFBhZ2VVUkxDb3Vu
dCgmY291bnQpKSkKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19SRVRBSU5FRF9Q
QUdFX1VSTFMsIGNvdW50KTsKLSAgICBpZiAoU1VDQ0VFREVEKHdlYkNvcmVTdGF0aXN0aWNzLT5p
Y29uUmVjb3JkQ291bnQoJmNvdW50KSkpCi0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJ
RENfU0lURV9JQ09OX1JFQ09SRFMsIGNvdW50KTsKLSAgICBpZiAoU1VDQ0VFREVEKHdlYkNvcmVT
dGF0aXN0aWNzLT5pY29uc1dpdGhEYXRhQ291bnQoJmNvdW50KSkpCi0gICAgICAgIHNldFdpbmRv
d1RleHQoZGlhbG9nLCBJRENfU0lURV9JQ09OU19XSVRIX0RBVEEsIGNvdW50KTsKLX0KLQotdm9p
ZCBNaW5pQnJvd3Nlcjo6c2V0UHJlZmVyZW5jZShVSU5UIG1lbnVJRCwgYm9vbCBlbmFibGUpCi17
Ci0gICAgaWYgKCFzdGFuZGFyZFByZWZlcmVuY2VzKCkgfHwgIXByaXZhdGVQcmVmZXJlbmNlcygp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKG1lbnVJRCkgewotICAgIGNhc2UgSURN
X0FWRk9VTkRBVElPTjoKLSAgICAgICAgc3RhbmRhcmRQcmVmZXJlbmNlcygpLT5zZXRBVkZvdW5k
YXRpb25FbmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURNX0FDQ19D
T01QT1NJVElORzoKLSAgICAgICAgcHJpdmF0ZVByZWZlcmVuY2VzKCktPnNldEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdFbmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURN
X1dLX0ZVTExTQ1JFRU46Ci0gICAgICAgIHByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRGdWxsU2Ny
ZWVuRW5hYmxlZChlbmFibGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElETV9DT01QT1NJ
VElOR19CT1JERVJTOgotICAgICAgICBwcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0U2hvd0RlYnVn
Qm9yZGVycyhlbmFibGUpOwotICAgICAgICBwcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0U2hvd1Jl
cGFpbnRDb3VudGVyKGVuYWJsZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURNX0RFQlVH
X0lORk9fTEFZRVI6Ci0gICAgICAgIHByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRTaG93VGlsZWRT
Y3JvbGxpbmdJbmRpY2F0b3IoZW5hYmxlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1f
SU5WRVJUX0NPTE9SUzoKLSAgICAgICAgcHJpdmF0ZVByZWZlcmVuY2VzKCktPnNldFNob3VsZElu
dmVydENvbG9ycyhlbmFibGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElETV9ESVNBQkxF
X0lNQUdFUzoKLSAgICAgICAgc3RhbmRhcmRQcmVmZXJlbmNlcygpLT5zZXRMb2Fkc0ltYWdlc0F1
dG9tYXRpY2FsbHkoIWVuYWJsZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURNX0RJU0FC
TEVfU1RZTEVTOgotICAgICAgICBwcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0QXV0aG9yQW5kVXNl
clN0eWxlc0VuYWJsZWQoIWVuYWJsZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURNX0RJ
U0FCTEVfSkFWQVNDUklQVDoKLSAgICAgICAgc3RhbmRhcmRQcmVmZXJlbmNlcygpLT5zZXRKYXZh
U2NyaXB0RW5hYmxlZCghZW5hYmxlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1fRElT
QUJMRV9MT0NBTF9GSUxFX1JFU1RSSUNUSU9OUzoKLSAgICAgICAgcHJpdmF0ZVByZWZlcmVuY2Vz
KCktPnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGVuYWJsZSk7Ci0gICAgICAg
IHByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoZW5h
YmxlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJy
b3dzZXIvd2luL01pbmlCcm93c2VyLmggYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dz
ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYzM2IyOGEyMjE5OTg5YTEzMTBj
NjZiYmI3ZDllYTdkMmMyMDEwMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTUgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotI2luY2x1ZGUgIkJyb3dzZXJXaW5kb3cu
aCIKLSNpbmNsdWRlICJQYWdlTG9hZFRlc3RDbGllbnQuaCIKLSNpbmNsdWRlIDxXZWJLaXRMZWdh
Y3kvV2ViS2l0Lmg+Ci0jaW5jbHVkZSA8Y29taXAuaD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5j
bHVkZSA8dmVjdG9yPgotCi10eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJGcmFtZSwg
Jl9fdXVpZG9mKElXZWJGcmFtZSk+PiBJV2ViRnJhbWVQdHI7Ci10eXBlZGVmIF9jb21fcHRyX3Q8
X2NvbV9JSUlEPElXZWJWaWV3LCAmX191dWlkb2YoSVdlYlZpZXcpPj4gSVdlYlZpZXdQdHI7Ci10
eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJWaWV3UHJpdmF0ZTIsICZfX3V1aWRvZihJ
V2ViVmlld1ByaXZhdGUyKT4+IElXZWJWaWV3UHJpdmF0ZVB0cjsKLXR5cGVkZWYgX2NvbV9wdHJf
dDxfY29tX0lJSUQ8SVdlYkZyYW1lTG9hZERlbGVnYXRlLCAmX191dWlkb2YoSVdlYkZyYW1lTG9h
ZERlbGVnYXRlKT4+IElXZWJGcmFtZUxvYWREZWxlZ2F0ZVB0cjsKLXR5cGVkZWYgX2NvbV9wdHJf
dDxfY29tX0lJSUQ8SVdlYkhpc3RvcnksICZfX3V1aWRvZihJV2ViSGlzdG9yeSk+PiBJV2ViSGlz
dG9yeVB0cjsKLXR5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYkhpc3RvcnlJdGVtLCAm
X191dWlkb2YoSVdlYkhpc3RvcnlJdGVtKT4+IElXZWJIaXN0b3J5SXRlbVB0cjsKLXR5cGVkZWYg
X2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYlByZWZlcmVuY2VzLCAmX191dWlkb2YoSVdlYlByZWZl
cmVuY2VzKT4+IElXZWJQcmVmZXJlbmNlc1B0cjsKLXR5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJ
SUQ8SVdlYlByZWZlcmVuY2VzUHJpdmF0ZTMsICZfX3V1aWRvZihJV2ViUHJlZmVyZW5jZXNQcml2
YXRlMyk+PiBJV2ViUHJlZmVyZW5jZXNQcml2YXRlUHRyOwotdHlwZWRlZiBfY29tX3B0cl90PF9j
b21fSUlJRDxJV2ViVUlEZWxlZ2F0ZSwgJl9fdXVpZG9mKElXZWJVSURlbGVnYXRlKT4+IElXZWJV
SURlbGVnYXRlUHRyOwotdHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJQWNjZXNzaWJpbGl0
eURlbGVnYXRlLCAmX191dWlkb2YoSUFjY2Vzc2liaWxpdHlEZWxlZ2F0ZSk+PiBJQWNjZXNzaWJp
bGl0eURlbGVnYXRlUHRyOwotdHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViSW5zcGVj
dG9yLCAmX191dWlkb2YoSVdlYkluc3BlY3Rvcik+PiBJV2ViSW5zcGVjdG9yUHRyOwotdHlwZWRl
ZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViQ29yZVN0YXRpc3RpY3MsICZfX3V1aWRvZihJV2Vi
Q29yZVN0YXRpc3RpY3MpPj4gSVdlYkNvcmVTdGF0aXN0aWNzUHRyOwotdHlwZWRlZiBfY29tX3B0
cl90PF9jb21fSUlJRDxJV2ViQ2FjaGUsICZfX3V1aWRvZihJV2ViQ2FjaGUpPj4gSVdlYkNhY2hl
UHRyOwotdHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViUmVzb3VyY2VMb2FkRGVsZWdh
dGUsICZfX3V1aWRvZihJV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGUpPj4gSVdlYlJlc291cmNlTG9h
ZERlbGVnYXRlUHRyOwotdHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViRG93bmxvYWRE
ZWxlZ2F0ZSwgJl9fdXVpZG9mKElXZWJEb3dubG9hZERlbGVnYXRlKT4+IElXZWJEb3dubG9hZERl
bGVnYXRlUHRyOwotdHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViRnJhbWVQcml2YXRl
LCAmX191dWlkb2YoSVdlYkZyYW1lUHJpdmF0ZSk+PiBJV2ViRnJhbWVQcml2YXRlUHRyOwotCi1j
bGFzcyBNaW5pQnJvd3NlciA6IHB1YmxpYyBCcm93c2VyV2luZG93IHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPEJyb3dzZXJXaW5kb3c+IGNyZWF0ZShIV05EIG1haW5XbmQsIEhXTkQgdXJsQmFy
V25kLCBib29sIHVzZUxheWVyZWRXZWJWaWV3ID0gZmFsc2UsIGJvb2wgcGFnZUxvYWRUZXN0aW5n
ID0gZmFsc2UpOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBBY2Nlc3NpYmlsaXR5RGVs
ZWdhdGU7Ci0gICAgZnJpZW5kIGNsYXNzIE1pbmlCcm93c2VyV2ViSG9zdDsKLSAgICBmcmllbmQg
Y2xhc3MgUHJpbnRXZWJVSURlbGVnYXRlOwotICAgIGZyaWVuZCBjbGFzcyBXZWJEb3dubG9hZERl
bGVnYXRlOwotICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZUxvYWREZWxlZ2F0ZTsKLSAgICBmcmll
bmQgY2xhc3MgUGFnZUxvYWRUZXN0Q2xpZW50OwotCi0gICAgVUxPTkcgQWRkUmVmKCk7Ci0gICAg
VUxPTkcgUmVsZWFzZSgpOwotCi0gICAgSFJFU1VMVCBpbml0KCk7Ci0gICAgSFJFU1VMVCBwcmVw
YXJlVmlld3MoSFdORCBtYWluV25kLCBjb25zdCBSRUNUJiBjbGllbnRSZWN0KTsKLQotICAgIEhS
RVNVTFQgbG9hZEhUTUxTdHJpbmcoY29uc3QgQlNUUiYpOwotICAgIEhSRVNVTFQgbG9hZFVSTChj
b25zdCBCU1RSJiBwYXNzZWRVUkwpOwotCi0gICAgdm9pZCBzaG93TGFzdFZpc2l0ZWRTaXRlcyhJ
V2ViVmlldyYpOwotICAgIHZvaWQgbGF1bmNoSW5zcGVjdG9yKCk7Ci0gICAgdm9pZCBuYXZpZ2F0
ZUZvcndhcmRPckJhY2t3YXJkKFVJTlQgbWVudUlEKTsKLSAgICB2b2lkIG5hdmlnYXRlVG9IaXN0
b3J5KFVJTlQgbWVudUlEKTsKLSAgICB2b2lkIGV4aXRQcm9ncmFtKCk7Ci0gICAgYm9vbCBzZWVk
SW5pdGlhbERlZmF1bHRQcmVmZXJlbmNlcygpOwotICAgIGJvb2wgc2V0VG9EZWZhdWx0UHJlZmVy
ZW5jZXMoKTsKLQotICAgIEhSRVNVTFQgc2V0RnJhbWVMb2FkRGVsZWdhdGUoSVdlYkZyYW1lTG9h
ZERlbGVnYXRlKik7Ci0gICAgSFJFU1VMVCBzZXRGcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUoSVdl
YkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZSopOwotICAgIEhSRVNVTFQgc2V0VUlEZWxlZ2F0ZShJ
V2ViVUlEZWxlZ2F0ZSopOwotICAgIEhSRVNVTFQgc2V0QWNjZXNzaWJpbGl0eURlbGVnYXRlKElB
Y2Nlc3NpYmlsaXR5RGVsZWdhdGUqKTsKLSAgICBIUkVTVUxUIHNldFJlc291cmNlTG9hZERlbGVn
YXRlKElXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZSopOwotICAgIEhSRVNVTFQgc2V0RG93bmxvYWRE
ZWxlZ2F0ZShJV2ViRG93bmxvYWREZWxlZ2F0ZVB0cik7Ci0KLSAgICBJV2ViUHJlZmVyZW5jZXNQ
dHIgc3RhbmRhcmRQcmVmZXJlbmNlcygpIHsgcmV0dXJuIG1fc3RhbmRhcmRQcmVmZXJlbmNlczsg
IH0KLSAgICBJV2ViUHJlZmVyZW5jZXNQcml2YXRlUHRyIHByaXZhdGVQcmVmZXJlbmNlcygpIHsg
cmV0dXJuIG1fcHJlZnNQcml2YXRlOyB9Ci0gICAgSVdlYkZyYW1lUHRyIG1haW5GcmFtZSgpOwot
ICAgIElXZWJDb3JlU3RhdGlzdGljc1B0ciBzdGF0aXN0aWNzKCkgeyByZXR1cm4gbV9zdGF0aXN0
aWNzOyB9Ci0gICAgSVdlYkNhY2hlUHRyIHdlYkNhY2hlKCkgeyByZXR1cm4gbV93ZWJDYWNoZTsg
IH0KLSAgICBJV2ViVmlld1B0ciB3ZWJWaWV3KCkgeyByZXR1cm4gbV93ZWJWaWV3OyB9Ci0KLSAg
ICBib29sIGhhc1dlYlZpZXcoKSBjb25zdCB7IHJldHVybiAhIW1fd2ViVmlldzsgfQotICAgIGJv
b2wgdXNlc0xheWVyZWRXZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV91c2VMYXllcmVkV2ViVmll
dzsgfQotICAgIGJvb2wgZ29CYWNrKCk7Ci0gICAgYm9vbCBnb0ZvcndhcmQoKTsKLQotICAgIHZv
aWQgc2V0VXNlckFnZW50KFVJTlQgbWVudUlEKTsKLSAgICB2b2lkIHNldFVzZXJBZ2VudChfYnN0
cl90JiBjdXN0b21VQVN0cmluZyk7Ci0gICAgX2JzdHJfdCB1c2VyQWdlbnQoKTsKLQotICAgIFBh
Z2VMb2FkVGVzdENsaWVudCYgcGFnZUxvYWRUZXN0Q2xpZW50KCkgeyByZXR1cm4gKm1fcGFnZUxv
YWRUZXN0Q2xpZW50OyB9Ci0KLSAgICB2b2lkIHJlc2V0Wm9vbSgpOwotICAgIHZvaWQgem9vbUlu
KCk7Ci0gICAgdm9pZCB6b29tT3V0KCk7Ci0KLSAgICB2b2lkIHNob3dMYXllclRyZWUoKTsKLQot
ICAgIEhXTkQgaHduZCgpIHsgcmV0dXJuIG1fdmlld1duZDsgfQotCi0gICAgdm9pZCBwcmludCgp
OwotICAgIHZvaWQgdXBkYXRlU3RhdGlzdGljcyhIV05EIGRpYWxvZyk7Ci0gICAgdm9pZCBzZXRQ
cmVmZXJlbmNlKFVJTlQgbWVudUlELCBib29sIGVuYWJsZSk7Ci0KLSAgICBNaW5pQnJvd3NlcihI
V05EIG1haW5XbmQsIEhXTkQgdXJsQmFyV25kLCBib29sIHVzZUxheWVyZWRXZWJWaWV3LCBib29s
IHBhZ2VMb2FkVGVzdGluZyk7Ci0gICAgdm9pZCBzdWJjbGFzc0ZvckxheWVyZWRXaW5kb3coKTsK
LSAgICBib29sIHNldENhY2hlRm9sZGVyKCk7Ci0KLSAgICBzdGQ6OnZlY3RvcjxJV2ViSGlzdG9y
eUl0ZW1QdHI+IG1faGlzdG9yeUl0ZW1zOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFBhZ2VMb2Fk
VGVzdENsaWVudD4gbV9wYWdlTG9hZFRlc3RDbGllbnQ7Ci0KLSAgICBJV2ViVmlld1B0ciBtX3dl
YlZpZXc7Ci0gICAgSVdlYlZpZXdQcml2YXRlUHRyIG1fd2ViVmlld1ByaXZhdGU7Ci0KLSAgICBJ
V2ViSGlzdG9yeVB0ciBtX3dlYkhpc3Rvcnk7Ci0gICAgSVdlYkluc3BlY3RvclB0ciBtX2luc3Bl
Y3RvcjsKLSAgICBJV2ViUHJlZmVyZW5jZXNQdHIgbV9zdGFuZGFyZFByZWZlcmVuY2VzOwotICAg
IElXZWJQcmVmZXJlbmNlc1ByaXZhdGVQdHIgbV9wcmVmc1ByaXZhdGU7Ci0KLSAgICBJV2ViRnJh
bWVMb2FkRGVsZWdhdGVQdHIgbV9mcmFtZUxvYWREZWxlZ2F0ZTsKLSAgICBJV2ViVUlEZWxlZ2F0
ZVB0ciBtX3VpRGVsZWdhdGU7Ci0gICAgSUFjY2Vzc2liaWxpdHlEZWxlZ2F0ZVB0ciBtX2FjY2Vz
c2liaWxpdHlEZWxlZ2F0ZTsKLSAgICBJV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGVQdHIgbV9yZXNv
dXJjZUxvYWREZWxlZ2F0ZTsKLSAgICBJV2ViRG93bmxvYWREZWxlZ2F0ZVB0ciBtX2Rvd25sb2Fk
RGVsZWdhdGU7Ci0KLSAgICBJV2ViQ29yZVN0YXRpc3RpY3NQdHIgbV9zdGF0aXN0aWNzOwotICAg
IElXZWJDYWNoZVB0ciBtX3dlYkNhY2hlOwotCi0gICAgSFdORCBtX2hNYWluV25kIHsgbnVsbHB0
ciB9OwotICAgIEhXTkQgbV9oVVJMQmFyV25kIHsgbnVsbHB0ciB9OwotICAgIEhXTkQgbV92aWV3
V25kIHsgbnVsbHB0ciB9OwotCi0gICAgYm9vbCBtX3VzZUxheWVyZWRXZWJWaWV3OwotfTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3NlcldlYkhvc3QuY3BwIGIv
VG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyV2ViSG9zdC5jcHAKaW5kZXggMmI3OTE3
NDQwMGQ5OTVmMjNkZmQ0YjQxMDQ5MTkwOWJiM2M2NDhiZi4uNWQ2ZWI3YWNmMmE0ZTAxNjNhNjdl
ODRmMmE3Njc1YzhmMTAzYmJlYiAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL01p
bmlCcm93c2VyV2ViSG9zdC5jcHAKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlCcm93
c2VyV2ViSG9zdC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkRPTURlZmF1bHRJ
bXBsLmgiCiAjaW5jbHVkZSAiUGFnZUxvYWRUZXN0Q2xpZW50LmgiCi0jaW5jbHVkZSAiTWluaUJy
b3dzZXIuaCIKKyNpbmNsdWRlICJXSzFCcm93c2VyV2luZG93LmgiCiAjaW5jbHVkZSA8V2ViS2l0
TGVnYWN5L1dlYktpdC5oPgogCiBjbGFzcyBTaW1wbGVFdmVudExpc3RlbmVyIDogcHVibGljIERP
TUV2ZW50TGlzdGVuZXIgewpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlC
cm93c2VyV2ViSG9zdC5oIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL01pbmlCcm93c2VyV2ViSG9z
dC5oCmluZGV4IDNjZmVkYmI0NWYxZDBhOThjYWVhMzc0MWVjYjQ1Y2MyMjliMWM1ZjYuLjY3ZjE0
YTI1MzRiMmViYWE3NjNiZDEwMTQzYmUzYzYxZDhhMTFjNzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01p
bmlCcm93c2VyL3dpbi9NaW5pQnJvd3NlcldlYkhvc3QuaAorKysgYi9Ub29scy9NaW5pQnJvd3Nl
ci93aW4vTWluaUJyb3dzZXJXZWJIb3N0LmgKQEAgLTI5LDExICsyOSwxMSBAQAogI2luY2x1ZGUg
PFdlYktpdExlZ2FjeS9XZWJLaXQuaD4KICNpbmNsdWRlIDxjb211dGlsLmg+CiAKLWNsYXNzIE1p
bmlCcm93c2VyOworY2xhc3MgV0sxQnJvd3NlcldpbmRvdzsKIAogY2xhc3MgTWluaUJyb3dzZXJX
ZWJIb3N0IDogcHVibGljIElXZWJGcmFtZUxvYWREZWxlZ2F0ZSwgcHVibGljIElXZWJGcmFtZUxv
YWREZWxlZ2F0ZVByaXZhdGUgewogcHVibGljOgotICAgIE1pbmlCcm93c2VyV2ViSG9zdChNaW5p
QnJvd3NlciogY2xpZW50LCBIV05EIHVybEJhcikKKyAgICBNaW5pQnJvd3NlcldlYkhvc3QoV0sx
QnJvd3NlcldpbmRvdyogY2xpZW50LCBIV05EIHVybEJhcikKICAgICAgICAgOiBtX2NsaWVudChj
bGllbnQpLCBtX2hVUkxCYXJXbmQodXJsQmFyKSB7IH0KIAogICAgIC8vIElVbmtub3duCkBAIC04
MCw1ICs4MCw1IEBAIHByaXZhdGU6CiAgICAgSFdORCBtX2hVUkxCYXJXbmQgeyAwIH07CiAgICAg
SEdESU9CSiBtX1VSTEJhckZvbnQgeyAwIH07CiAgICAgSEdESU9CSiBtX29sZEZvbnQgeyAwIH07
Ci0gICAgTWluaUJyb3dzZXIqIG1fY2xpZW50IHsgbnVsbHB0ciB9OworICAgIFdLMUJyb3dzZXJX
aW5kb3cqIG1fY2xpZW50IHsgbnVsbHB0ciB9OwogfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlC
cm93c2VyL3dpbi9QYWdlTG9hZFRlc3RDbGllbnQuY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvd2lu
L1BhZ2VMb2FkVGVzdENsaWVudC5jcHAKaW5kZXggOTU4YmEwMmJhZGE1NjFmMTkwZmZlMzM1MDFh
NjA4ZjY5NDRhNzlkZi4uZTEyZDBhZTAyNTNiYmM3MzRkNGE2OTM3ZjQ4MzRjYzk3Y2E1NGM0YyAx
MDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL1BhZ2VMb2FkVGVzdENsaWVudC5jcHAK
KysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL1BhZ2VMb2FkVGVzdENsaWVudC5jcHAKQEAgLTI2
LDcgKzI2LDcgQEAKICNpbmNsdWRlICJzdGRhZnguaCIKICNpbmNsdWRlICJQYWdlTG9hZFRlc3RD
bGllbnQuaCIKIAotI2luY2x1ZGUgIk1pbmlCcm93c2VyLmgiCisjaW5jbHVkZSAiV0sxQnJvd3Nl
cldpbmRvdy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1FeHBvcnRNYWNyb3MuaD4KICNp
bmNsdWRlIDxjbWF0aD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtMzUsNyArMzUs
NyBAQAogCiBzdGF0aWMgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgd2FpdEZvck5ld1Jlc291cmNlTG9h
ZER1cmF0aW9uID0gMC4xOwogCi1QYWdlTG9hZFRlc3RDbGllbnQ6OlBhZ2VMb2FkVGVzdENsaWVu
dChNaW5pQnJvd3NlciogaG9zdCwgYm9vbCBwYWdlTG9hZFRlc3RpbmcpCitQYWdlTG9hZFRlc3RD
bGllbnQ6OlBhZ2VMb2FkVGVzdENsaWVudChXSzFCcm93c2VyV2luZG93KiBob3N0LCBib29sIHBh
Z2VMb2FkVGVzdGluZykKICAgICA6IG1faG9zdChob3N0KQogICAgICwgbV9yZXBldGl0aW9ucyhw
YWdlTG9hZFRlc3RpbmcgPyAyMCA6IDEpCiAgICAgLCBtX3dhaXRGb3JMb2FkVG9SZWFsbHlFbmQo
dGhpcywgJlBhZ2VMb2FkVGVzdENsaWVudDo6ZW5kUGFnZUxvYWQpCmRpZmYgLS1naXQgYS9Ub29s
cy9NaW5pQnJvd3Nlci93aW4vUGFnZUxvYWRUZXN0Q2xpZW50LmggYi9Ub29scy9NaW5pQnJvd3Nl
ci93aW4vUGFnZUxvYWRUZXN0Q2xpZW50LmgKaW5kZXggYTA0NGIyMDcxNjU4Mjg1YzE2OWE0NDcw
YjNmN2RiYmFmZTNjZWQ2OS4uNDRhNGE5YWM3ZTRkNjg4MmUyZDRlYWI1OTVjZmE1OGRjNTFkNDgz
YSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL1BhZ2VMb2FkVGVzdENsaWVudC5o
CisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9QYWdlTG9hZFRlc3RDbGllbnQuaApAQCAtMTAx
LDEyICsxMDEsMTIgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8Q0ZSdW5Mb29wVGltZXJSZWY+
IG1fdGltZXI7CiB9OwogCi1jbGFzcyBNaW5pQnJvd3NlcjsKK2NsYXNzIFdLMUJyb3dzZXJXaW5k
b3c7CiAKIGNsYXNzIFBhZ2VMb2FkVGVzdENsaWVudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoUGFnZUxvYWRUZXN0Q2xpZW50KTsKIHB1YmxpYzoKLSAgICBQYWdlTG9hZFRlc3RDbGllbnQo
TWluaUJyb3dzZXIqIGhvc3QsIGJvb2wgcGFnZUxvYWRUZXN0aW5nID0gZmFsc2UpOworICAgIFBh
Z2VMb2FkVGVzdENsaWVudChXSzFCcm93c2VyV2luZG93KiBob3N0LCBib29sIHBhZ2VMb2FkVGVz
dGluZyA9IGZhbHNlKTsKIAogI2lmIE9TKFdJTkRPV1MpCiAgICAgdm9pZCBzZXRQYWdlVVJMKGNv
bnN0IF9ic3RyX3QmKTsKQEAgLTEzMSw3ICsxMzEsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
dm9pZCBwYWdlTG9hZEVuZGVkQXRUaW1lKENGQWJzb2x1dGVUaW1lKTsKICAgICB2b2lkIGR1bXBS
dW5TdGF0aXN0aWNzKCk7CiAKLSAgICBNaW5pQnJvd3NlciogbV9ob3N0OworICAgIFdLMUJyb3dz
ZXJXaW5kb3cqIG1faG9zdDsKICAgICBDRkFic29sdXRlVGltZSBtX3BhZ2VMb2FkRW5kVGltZSB7
IDAgfTsKICAgICBDRlRpbWVJbnRlcnZhbCBtX3RvdGFsVGltZSB7IDAgfTsKICAgICBDRlRpbWVJ
bnRlcnZhbCBtX3RvdGFsU3F1YXJlUm9vdHNPZlRpbWUgeyAwIH07CmRpZmYgLS1naXQgYS9Ub29s
cy9NaW5pQnJvd3Nlci93aW4vUHJpbnRXZWJVSURlbGVnYXRlLmNwcCBiL1Rvb2xzL01pbmlCcm93
c2VyL3dpbi9QcmludFdlYlVJRGVsZWdhdGUuY3BwCmluZGV4IGY0ZGI0ZDI0N2E0OGRjZWNlYzZi
YzlkYTVkMmJhZmFjYzkwYjRmNmYuLjE0MWQyMDJlYWI4MWE5Y2E4ODgzMDFhZjdkY2RjOTJmZWVk
NDU4NjMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9QcmludFdlYlVJRGVsZWdh
dGUuY3BwCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9QcmludFdlYlVJRGVsZWdhdGUuY3Bw
CkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJDb21tb24uaCIKICNpbmNsdWRlICJNYWlu
V2luZG93LmgiCi0jaW5jbHVkZSAiTWluaUJyb3dzZXIuaCIKKyNpbmNsdWRlICJXSzFCcm93c2Vy
V2luZG93LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KICNpbmNsdWRlIDxXZWJLaXRM
ZWdhY3kvV2ViS2l0Q09NQVBJLmg+CiAjaW5jbHVkZSA8Y29taXAuaD4KQEAgLTcxLDcgKzcxLDcg
QEAgSFJFU1VMVCBQcmludFdlYlVJRGVsZWdhdGU6OmNyZWF0ZVdlYlZpZXdXaXRoUmVxdWVzdChf
SW5fb3B0XyBJV2ViVmlldyosIF9Jbl9vcHQKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKICAgICBT
aG93V2luZG93KG5ld1dpbmRvdy5od25kKCksIFNXX1NIT1cpOwogCi0gICAgYXV0byYgbmV3QnJv
d3NlcldpbmRvdyA9ICpzdGF0aWNfY2FzdDxNaW5pQnJvd3Nlcio+KG5ld1dpbmRvdy5icm93c2Vy
V2luZG93KCkpOworICAgIGF1dG8mIG5ld0Jyb3dzZXJXaW5kb3cgPSAqc3RhdGljX2Nhc3Q8V0sx
QnJvd3NlcldpbmRvdyo+KG5ld1dpbmRvdy5icm93c2VyV2luZG93KCkpOwogICAgICpuZXdXZWJW
aWV3ID0gbmV3QnJvd3NlcldpbmRvdy53ZWJWaWV3KCk7CiAgICAgSVdlYkZyYW1lUHRyIGZyYW1l
OwogICAgIEhSRVNVTFQgaHI7CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vUHJp
bnRXZWJVSURlbGVnYXRlLmggYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vUHJpbnRXZWJVSURlbGVn
YXRlLmgKaW5kZXggMDk3ZTEzOWFkZGQ4ZjRlZTVjZDdjNmJiMzRkZjE0ZDc4MWFhNDQ4Yi4uYWZj
MDdkNzZkMGIyOTUxNWQ1OGZiYWFhM2E2N2Q3MmQ5MjkyZjlkOCAxMDA2NDQKLS0tIGEvVG9vbHMv
TWluaUJyb3dzZXIvd2luL1ByaW50V2ViVUlEZWxlZ2F0ZS5oCisrKyBiL1Rvb2xzL01pbmlCcm93
c2VyL3dpbi9QcmludFdlYlVJRGVsZWdhdGUuaApAQCAtMjksMTEgKzI5LDExIEBACiAKICNpbmNs
dWRlIDxXZWJLaXRMZWdhY3kvV2ViS2l0Lmg+CiAKLWNsYXNzIE1pbmlCcm93c2VyOworY2xhc3Mg
V0sxQnJvd3NlcldpbmRvdzsKIAogY2xhc3MgUHJpbnRXZWJVSURlbGVnYXRlIDogcHVibGljIElX
ZWJVSURlbGVnYXRlIHsKIHB1YmxpYzoKLSAgICBQcmludFdlYlVJRGVsZWdhdGUoTWluaUJyb3dz
ZXImIGNsaWVudCkKKyAgICBQcmludFdlYlVJRGVsZWdhdGUoV0sxQnJvd3NlcldpbmRvdyYgY2xp
ZW50KQogICAgICAgICA6IG1fY2xpZW50KGNsaWVudCkgeyB9CiAKICAgICAvLyBJVW5rbm93bgpA
QCAtMTA2LDcgKzEwNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgcGFpbnRDdXN0b21TY3JvbGxDb3JuZXIoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5f
IEhEQywgUkVDVCkgeyByZXR1cm4gRV9OT1RJTVBMOyB9CiAKIHByaXZhdGU6Ci0gICAgTWluaUJy
b3dzZXImIG1fY2xpZW50OworICAgIFdLMUJyb3dzZXJXaW5kb3cmIG1fY2xpZW50OwogICAgIEhX
TkQgbV9tb2RhbERpYWxvZ1BhcmVudCB7IG51bGxwdHIgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1Rv
b2xzL01pbmlCcm93c2VyL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHAgYi9Ub29scy9NaW5p
QnJvd3Nlci93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwCmluZGV4IGExZDEzY2UwOWUzNTM1
OGY2ZjQyNjZjYWFkNDNjOWQwOWE5MjIyMWUuLmFkODViNTFmNjRkM2ZlYmEyMDNmMzExY2QzZjQw
NzEzNzMwOGU5M2IgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9SZXNvdXJjZUxv
YWREZWxlZ2F0ZS5jcHAKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL1Jlc291cmNlTG9hZERl
bGVnYXRlLmNwcApAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgIlJlc291cmNlTG9hZERlbGVn
YXRlLmgiCiAKICNpbmNsdWRlICJDb21tb24uaCIKLSNpbmNsdWRlICJNaW5pQnJvd3Nlci5oIgog
I2luY2x1ZGUgIlBhZ2VMb2FkVGVzdENsaWVudC5oIgorI2luY2x1ZGUgIldLMUJyb3dzZXJXaW5k
b3cuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgogI2luY2x1ZGUgPFdlYktpdExlZ2Fj
eS9XZWJLaXRDT01BUEkuaD4KICNpbmNsdWRlIDxjb21pcC5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMv
TWluaUJyb3dzZXIvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmggYi9Ub29scy9NaW5pQnJvd3Nl
ci93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuaAppbmRleCAzZjA3ZjZhMDgwYTc1YTI1NjAyMGY0
MGRhNGEyNTZjMWQzN2NkNzllLi42YTM2M2Y2YjZkYTE5ZDc3NTBlN2UxMjkzMjc0MTMzZWU4MDY0
YzgyIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vUmVzb3VyY2VMb2FkRGVsZWdh
dGUuaAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuaApA
QCAtMjgsMTEgKzI4LDExIEBACiAKICNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvV2ViS2l0Lmg+CiAK
LWNsYXNzIE1pbmlCcm93c2VyOworY2xhc3MgV0sxQnJvd3NlcldpbmRvdzsKIAogY2xhc3MgUmVz
b3VyY2VMb2FkRGVsZWdhdGUgOiBwdWJsaWMgSVdlYlJlc291cmNlTG9hZERlbGVnYXRlIHsKIHB1
YmxpYzoKLSAgICBSZXNvdXJjZUxvYWREZWxlZ2F0ZShNaW5pQnJvd3NlciogY2xpZW50KQorICAg
IFJlc291cmNlTG9hZERlbGVnYXRlKFdLMUJyb3dzZXJXaW5kb3cqIGNsaWVudCkKICAgICAgICAg
OiBtX2NsaWVudChjbGllbnQpIHsgfQogCiAgICAgLy8gSVVua25vd24KQEAgLTUyLDcgKzUyLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBwbHVnSW5G
YWlsZWRXaXRoRXJyb3IoX0luX29wdF8gSVdlYlZpZXcqLCBfSW5fb3B0XyBJV2ViRXJyb3IqLCBf
SW5fb3B0XyBJV2ViRGF0YVNvdXJjZSopOwogCiBwcml2YXRlOgotICAgIE1pbmlCcm93c2VyKiBt
X2NsaWVudDsKKyAgICBXSzFCcm93c2VyV2luZG93KiBtX2NsaWVudDsKIH07CiAKICNlbmRpZiAv
LyBSZXNvdXJjZUxvYWREZWxlZ2F0ZQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2lu
L1dLMUJyb3dzZXJXaW5kb3cuY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL1dLMUJyb3dzZXJX
aW5kb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5MjljZTkxNmVhNjZjOWVmYWNiYjlmNDUzYzFlMjNlNGU1
Y2I5ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vV0sxQnJvd3Nl
cldpbmRvdy5jcHAKQEAgLTAsMCArMSw4OTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDgsIDIwMTMtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDExIEJyZW50IEZ1bGdoYW0uICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIEFwcGNlbGVyYXRvciwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFsZXggQ2hyaXN0ZW5z
ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAic3RkYWZ4LmgiCisjaW5jbHVkZSAiV0sxQnJvd3Nlcldp
bmRvdy5oIgorCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eURlbGVnYXRlLmgiCisjaW5jbHVkZSAi
Q29tbW9uLmgiCisjaW5jbHVkZSAiRE9NRGVmYXVsdEltcGwuaCIKKyNpbmNsdWRlICJNaW5pQnJv
d3NlckxpYlJlc291cmNlLmgiCisjaW5jbHVkZSAiTWluaUJyb3dzZXJSZXBsYWNlLmgiCisjaW5j
bHVkZSAiTWluaUJyb3dzZXJXZWJIb3N0LmgiCisjaW5jbHVkZSAiUHJpbnRXZWJVSURlbGVnYXRl
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkRGVsZWdhdGUuaCIKKyNpbmNsdWRlICJXZWJEb3du
bG9hZERlbGVnYXRlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KKyNpbmNsdWRlIDxX
ZWJLaXRMZWdhY3kvV2ViS2l0Q09NQVBJLmg+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1
ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxtZW1vcnk+Cisj
aW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworI2lmIFVTRShDRikKKyNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvQ0ZEaWN0
aW9uYXJ5UHJvcGVydHlCYWcuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitmbG9h
dCBkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhIV05EKTsKK30KKworc3RhdGljIGNvbnN0IGlu
dCBtYXhIaXN0b3J5U2l6ZSA9IDEwOworCit0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElX
ZWJNdXRhYmxlVVJMUmVxdWVzdCwgJl9fdXVpZG9mKElXZWJNdXRhYmxlVVJMUmVxdWVzdCk+PiBJ
V2ViTXV0YWJsZVVSTFJlcXVlc3RQdHI7CisKK1JlZjxCcm93c2VyV2luZG93PiBXSzFCcm93c2Vy
V2luZG93OjpjcmVhdGUoSFdORCBtYWluV25kLCBIV05EIHVybEJhclduZCwgYm9vbCB1c2VMYXll
cmVkV2ViVmlldywgYm9vbCBwYWdlTG9hZFRlc3RpbmcpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgV0sxQnJvd3NlcldpbmRvdyhtYWluV25kLCB1cmxCYXJXbmQsIHVzZUxheWVyZWRXZWJW
aWV3LCBwYWdlTG9hZFRlc3RpbmcpKTsKK30KKworV0sxQnJvd3NlcldpbmRvdzo6V0sxQnJvd3Nl
cldpbmRvdyhIV05EIG1haW5XbmQsIEhXTkQgdXJsQmFyV25kLCBib29sIHVzZUxheWVyZWRXZWJW
aWV3LCBib29sIHBhZ2VMb2FkVGVzdGluZykKKyAgICA6IG1faE1haW5XbmQobWFpblduZCkKKyAg
ICAsIG1faFVSTEJhclduZCh1cmxCYXJXbmQpCisgICAgLCBtX3VzZUxheWVyZWRXZWJWaWV3KHVz
ZUxheWVyZWRXZWJWaWV3KQorICAgICwgbV9wYWdlTG9hZFRlc3RDbGllbnQoc3RkOjptYWtlX3Vu
aXF1ZTxQYWdlTG9hZFRlc3RDbGllbnQ+KHRoaXMsIHBhZ2VMb2FkVGVzdGluZykpCit7Cit9CisK
K1VMT05HIFdLMUJyb3dzZXJXaW5kb3c6OkFkZFJlZigpCit7CisgICAgcmVmKCk7CisgICAgcmV0
dXJuIHJlZkNvdW50KCk7Cit9CisKK1VMT05HIFdLMUJyb3dzZXJXaW5kb3c6OlJlbGVhc2UoKQor
eworICAgIGF1dG8gY291bnQgPSByZWZDb3VudCgpOworICAgIGRlcmVmKCk7CisgICAgcmV0dXJu
IC0tY291bnQ7Cit9CisKK0hSRVNVTFQgV0sxQnJvd3NlcldpbmRvdzo6aW5pdCgpCit7CisgICAg
SFJFU1VMVCBociA9IFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYlZpZXcsIDAsIElJRF9J
V2ViVmlldywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX3dlYlZpZXcuR2V0SW50ZXJmYWNl
UHRyKCkpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAg
aHIgPSBtX3dlYlZpZXctPlF1ZXJ5SW50ZXJmYWNlKElJRF9JV2ViVmlld1ByaXZhdGUyLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oJm1fd2ViVmlld1ByaXZhdGUuR2V0SW50ZXJmYWNlUHRyKCkp
KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBX
ZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJIaXN0b3J5LCAwLCBfX3V1aWRvZihtX3dlYkhp
c3RvcnkpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fd2ViSGlzdG9yeS5HZXRJbnRlcmZh
Y2VQdHIoKSkpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAg
ICBociA9IFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYkNvcmVTdGF0aXN0aWNzLCAwLCBf
X3V1aWRvZihtX3N0YXRpc3RpY3MpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fc3RhdGlz
dGljcy5HZXRJbnRlcmZhY2VQdHIoKSkpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICBy
ZXR1cm4gaHI7CisKKyAgICBociA9IFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYkNhY2hl
LCAwLCBfX3V1aWRvZihtX3dlYkNhY2hlKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX3dl
YkNhY2hlLkdldEludGVyZmFjZVB0cigpKSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAg
IHJldHVybiBocjsKKworICAgIGlmICghc2VlZEluaXRpYWxEZWZhdWx0UHJlZmVyZW5jZXMoKSkK
KyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKworICAgIGlmICghc2V0VG9EZWZhdWx0UHJlZmVyZW5j
ZXMoKSkKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKworICAgIGlmICghc2V0Q2FjaGVGb2xkZXIo
KSkKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKworICAgIGF1dG8gd2ViSG9zdCA9IG5ldyBNaW5p
QnJvd3NlcldlYkhvc3QodGhpcywgbV9oVVJMQmFyV25kKTsKKworICAgIGhyID0gc2V0RnJhbWVM
b2FkRGVsZWdhdGUod2ViSG9zdCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVy
biBocjsKKworICAgIGhyID0gc2V0RnJhbWVMb2FkRGVsZWdhdGVQcml2YXRlKHdlYkhvc3QpOwor
ICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBociA9IHNldFVJ
RGVsZWdhdGUobmV3IFByaW50V2ViVUlEZWxlZ2F0ZSgqdGhpcykpOworICAgIGlmIChGQUlMRUQg
KGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBzZXRBY2Nlc3NpYmlsaXR5RGVs
ZWdhdGUobmV3IEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZSgqdGhpcykpOworICAgIGlmIChGQUlMRUQg
KGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBzZXRSZXNvdXJjZUxvYWREZWxl
Z2F0ZShuZXcgUmVzb3VyY2VMb2FkRGVsZWdhdGUodGhpcykpOworICAgIGlmIChGQUlMRUQoaHIp
KQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBJV2ViRG93bmxvYWREZWxlZ2F0ZVB0ciBkb3du
bG9hZERlbGVnYXRlOworICAgIGRvd25sb2FkRGVsZWdhdGUuQXR0YWNoKG5ldyBXZWJEb3dubG9h
ZERlbGVnYXRlKCp0aGlzKSk7CisgICAgaHIgPSBzZXREb3dubG9hZERlbGVnYXRlKGRvd25sb2Fk
RGVsZWdhdGUpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAg
ICBSRUNUIGNsaWVudFJlY3Q7CisgICAgOjpHZXRDbGllbnRSZWN0KG1faE1haW5XbmQsICZjbGll
bnRSZWN0KTsKKyAgICBpZiAodXNlc0xheWVyZWRXZWJWaWV3KCkpCisgICAgICAgIGNsaWVudFJl
Y3QgPSB7IHNfd2luZG93UG9zaXRpb24ueCwgc193aW5kb3dQb3NpdGlvbi55LCBzX3dpbmRvd1Bv
c2l0aW9uLnggKyBzX3dpbmRvd1NpemUuY3gsIHNfd2luZG93UG9zaXRpb24ueSArIHNfd2luZG93
U2l6ZS5jeSB9OworCisgICAgaHIgPSBwcmVwYXJlVmlld3MobV9oTWFpblduZCwgY2xpZW50UmVj
dCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIGlmICh1
c2VzTGF5ZXJlZFdlYlZpZXcoKSkKKyAgICAgICAgc3ViY2xhc3NGb3JMYXllcmVkV2luZG93KCk7
CisKKyAgICByZXR1cm4gaHI7Cit9CisKK2Jvb2wgV0sxQnJvd3NlcldpbmRvdzo6c2V0Q2FjaGVG
b2xkZXIoKQoreworICAgIF9ic3RyX3QgYXBwRGF0YUZvbGRlcjsKKyAgICBpZiAoIWdldEFwcERh
dGFGb2xkZXIoYXBwRGF0YUZvbGRlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGFw
cERhdGFGb2xkZXIgKz0gTCJcXGNhY2hlIjsKKyAgICB3ZWJDYWNoZSgpLT5zZXRDYWNoZUZvbGRl
cihhcHBEYXRhRm9sZGVyKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitIUkVTVUxUIFdLMUJy
b3dzZXJXaW5kb3c6OnByZXBhcmVWaWV3cyhIV05EIG1haW5XbmQsIGNvbnN0IFJFQ1QmIGNsaWVu
dFJlY3QpCit7CisgICAgaWYgKCFtX3dlYlZpZXcpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisK
KyAgICBIUkVTVUxUIGhyID0gbV93ZWJWaWV3LT5zZXRIb3N0V2luZG93KG1haW5XbmQpOworICAg
IGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBociA9IG1fd2ViVmll
dy0+aW5pdFdpdGhGcmFtZShjbGllbnRSZWN0LCAwLCAwKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkK
KyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBtX3dlYlZpZXdQcml2YXRlLT5zZXRUcmFu
c3BhcmVudChtX3VzZUxheWVyZWRXZWJWaWV3KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAg
ICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBtX3dlYlZpZXdQcml2YXRlLT5zZXRVc2VzTGF5ZXJl
ZFdpbmRvdyhtX3VzZUxheWVyZWRXZWJWaWV3KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAg
ICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBtX3dlYlZpZXdQcml2YXRlLT52aWV3V2luZG93KCZt
X3ZpZXdXbmQpOworCisgICAgcmV0dXJuIGhyOworfQorCitIUkVTVUxUIFdLMUJyb3dzZXJXaW5k
b3c6OmxvYWRIVE1MU3RyaW5nKGNvbnN0IEJTVFImIHN0cikKK3sKKyAgICBJV2ViRnJhbWVQdHIg
ZnJhbWU7CisgICAgSFJFU1VMVCBociA9IG1fd2ViVmlldy0+bWFpbkZyYW1lKCZmcmFtZS5HZXRJ
bnRlcmZhY2VQdHIoKSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsK
KworICAgIGZyYW1lLT5sb2FkSFRNTFN0cmluZyhzdHIsIDApOworICAgIHJldHVybiBocjsKK30K
Kworc3RhdGljIFdORFBST0MgZ0RlZldlYktpdFByb2M7CisKK3N0YXRpYyBMUkVTVUxUIENBTExC
QUNLIHZpZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBM
UEFSQU0gbFBhcmFtKQoreworICAgIHN3aXRjaCAobWVzc2FnZSkgeworICAgIGNhc2UgV01fTkNI
SVRURVNUOgorICAgICAgICBjb25zdGV4cHIgaW50IGRyYWdCYXJIZWlnaHQgPSAzMDsKKyAgICAg
ICAgUkVDVCB3aW5kb3c7CisgICAgICAgIDo6R2V0V2luZG93UmVjdChoV25kLCAmd2luZG93KTsK
KyAgICAgICAgLy8gRm9yIHRlc3Rpbmcgb3VyIHRyYW5zcGFyZW50IHdpbmRvdywgd2UgbmVlZCBh
IHJlZ2lvbiB0byB1c2UgYXMgYSBoYW5kbGUgZm9yCisgICAgICAgIC8vIGRyYWdnaW5nLiBUaGUg
cmlnaHQgd2F5IHRvIGRvIHRoaXMgd291bGQgYmUgdG8gcXVlcnkgdGhlIHdlYiB2aWV3IHRvIHNl
ZSB3aGF0J3MKKyAgICAgICAgLy8gdW5kZXIgdGhlIG1vdXNlLiBIb3dldmVyLCBmb3IgdGVzdGlu
ZyBwdXJwb3NlcyB3ZSBqdXN0IHVzZSBhbiBhcmJpdHJhcnkKKyAgICAgICAgLy8gMzAgbG9naWNh
bCBwaXhlbCBiYW5kIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXcgYXMgYW4gYXJiaXRyYXJ5IGdyaXBw
aW5nIGxvY2F0aW9uLgorICAgICAgICAvLworICAgICAgICAvLyBXaGVuIHdlIGFyZSB3aXRoaW4g
dGhpcyBiYWQsIHJldHVybiBIVF9DQVBUSU9OIHRvIHRlbGwgV2luZG93cyB3ZSB3YW50IHRvCisg
ICAgICAgIC8vIHRyZWF0IHRoaXMgcmVnaW9uIGFzIGlmIGl0IHdlcmUgdGhlIHRpdGxlIGJhciBv
biBhIG5vcm1hbCB3aW5kb3cuCisgICAgICAgIGludCB5ID0gSElXT1JEKGxQYXJhbSk7CisgICAg
ICAgIGZsb2F0IHNjYWxlZERyYWdCYXJIZWlnaHRGYWN0b3IgPSBkcmFnQmFySGVpZ2h0ICogV2Vi
Q29yZTo6ZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coaFduZCk7CisgICAgICAgIGlmICgoeSA+
IHdpbmRvdy50b3ApICYmICh5IDwgd2luZG93LnRvcCArIHNjYWxlZERyYWdCYXJIZWlnaHRGYWN0
b3IpKQorICAgICAgICAgICAgcmV0dXJuIEhUQ0FQVElPTjsKKyAgICB9CisgICAgcmV0dXJuIENh
bGxXaW5kb3dQcm9jKGdEZWZXZWJLaXRQcm9jLCBoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJh
bSk7Cit9CisKK3ZvaWQgV0sxQnJvd3NlcldpbmRvdzo6c3ViY2xhc3NGb3JMYXllcmVkV2luZG93
KCkKK3sKKyNpZiBkZWZpbmVkIF9NX0FNRDY0IHx8IGRlZmluZWQgX1dJTjY0CisgICAgZ0RlZldl
YktpdFByb2MgPSByZWludGVycHJldF9jYXN0PFdORFBST0M+KDo6R2V0V2luZG93TG9uZ1B0ciht
X3ZpZXdXbmQsIEdXTFBfV05EUFJPQykpOworICAgIDo6U2V0V2luZG93TG9uZ1B0cihtX3ZpZXdX
bmQsIEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4odmlld1duZFByb2Mp
KTsKKyNlbHNlCisgICAgZ0RlZldlYktpdFByb2MgPSByZWludGVycHJldF9jYXN0PFdORFBST0M+
KDo6R2V0V2luZG93TG9uZyhtX3ZpZXdXbmQsIEdXTF9XTkRQUk9DKSk7CisgICAgOjpTZXRXaW5k
b3dMb25nKG1fdmlld1duZCwgR1dMX1dORFBST0MsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19QVFI+
KHZpZXdXbmRQcm9jKSk7CisjZW5kaWYKK30KKworSFJFU1VMVCBXSzFCcm93c2VyV2luZG93Ojpz
ZXRGcmFtZUxvYWREZWxlZ2F0ZShJV2ViRnJhbWVMb2FkRGVsZWdhdGUqIGZyYW1lTG9hZERlbGVn
YXRlKQoreworICAgIG1fZnJhbWVMb2FkRGVsZWdhdGUgPSBmcmFtZUxvYWREZWxlZ2F0ZTsKKyAg
ICByZXR1cm4gbV93ZWJWaWV3LT5zZXRGcmFtZUxvYWREZWxlZ2F0ZShmcmFtZUxvYWREZWxlZ2F0
ZSk7Cit9CisKK0hSRVNVTFQgV0sxQnJvd3NlcldpbmRvdzo6c2V0RnJhbWVMb2FkRGVsZWdhdGVQ
cml2YXRlKElXZWJGcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUqIGZyYW1lTG9hZERlbGVnYXRlUHJp
dmF0ZSkKK3sKKyAgICByZXR1cm4gbV93ZWJWaWV3UHJpdmF0ZS0+c2V0RnJhbWVMb2FkRGVsZWdh
dGVQcml2YXRlKGZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZSk7Cit9CisKK0hSRVNVTFQgV0sxQnJv
d3NlcldpbmRvdzo6c2V0VUlEZWxlZ2F0ZShJV2ViVUlEZWxlZ2F0ZSogdWlEZWxlZ2F0ZSkKK3sK
KyAgICBtX3VpRGVsZWdhdGUgPSB1aURlbGVnYXRlOworICAgIHJldHVybiBtX3dlYlZpZXctPnNl
dFVJRGVsZWdhdGUodWlEZWxlZ2F0ZSk7Cit9CisKK0hSRVNVTFQgV0sxQnJvd3NlcldpbmRvdzo6
c2V0QWNjZXNzaWJpbGl0eURlbGVnYXRlKElBY2Nlc3NpYmlsaXR5RGVsZWdhdGUqIGFjY2Vzc2li
aWxpdHlEZWxlZ2F0ZSkKK3sKKyAgICBtX2FjY2Vzc2liaWxpdHlEZWxlZ2F0ZSA9IGFjY2Vzc2li
aWxpdHlEZWxlZ2F0ZTsKKyAgICByZXR1cm4gbV93ZWJWaWV3LT5zZXRBY2Nlc3NpYmlsaXR5RGVs
ZWdhdGUoYWNjZXNzaWJpbGl0eURlbGVnYXRlKTsKK30KKworSFJFU1VMVCBXSzFCcm93c2VyV2lu
ZG93OjpzZXRSZXNvdXJjZUxvYWREZWxlZ2F0ZShJV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGUqIHJl
c291cmNlTG9hZERlbGVnYXRlKQoreworICAgIG1fcmVzb3VyY2VMb2FkRGVsZWdhdGUgPSByZXNv
dXJjZUxvYWREZWxlZ2F0ZTsKKyAgICByZXR1cm4gbV93ZWJWaWV3LT5zZXRSZXNvdXJjZUxvYWRE
ZWxlZ2F0ZShyZXNvdXJjZUxvYWREZWxlZ2F0ZSk7Cit9CisKK0hSRVNVTFQgV0sxQnJvd3Nlcldp
bmRvdzo6c2V0RG93bmxvYWREZWxlZ2F0ZShJV2ViRG93bmxvYWREZWxlZ2F0ZVB0ciBkb3dubG9h
ZERlbGVnYXRlKQoreworICAgIG1fZG93bmxvYWREZWxlZ2F0ZSA9IGRvd25sb2FkRGVsZWdhdGU7
CisgICAgcmV0dXJuIG1fd2ViVmlldy0+c2V0RG93bmxvYWREZWxlZ2F0ZShkb3dubG9hZERlbGVn
YXRlKTsKK30KKworSVdlYkZyYW1lUHRyIFdLMUJyb3dzZXJXaW5kb3c6Om1haW5GcmFtZSgpCit7
CisgICAgSVdlYkZyYW1lUHRyIGZyYW1lUHRyOworICAgIG1fd2ViVmlldy0+bWFpbkZyYW1lKCZm
cmFtZVB0ci5HZXRJbnRlcmZhY2VQdHIoKSk7CisgICAgcmV0dXJuIGZyYW1lUHRyOworfQorCiti
b29sIFdLMUJyb3dzZXJXaW5kb3c6OnNlZWRJbml0aWFsRGVmYXVsdFByZWZlcmVuY2VzKCkKK3sK
KyAgICBJV2ViUHJlZmVyZW5jZXNQdHIgdG1wUHJlZmVyZW5jZXM7CisgICAgaWYgKEZBSUxFRChX
ZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJQcmVmZXJlbmNlcywgMCwgSUlEX0lXZWJQcmVm
ZXJlbmNlcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ0bXBQcmVmZXJlbmNlcy5HZXRJbnRl
cmZhY2VQdHIoKSkpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKEZBSUxFRCh0
bXBQcmVmZXJlbmNlcy0+c3RhbmRhcmRQcmVmZXJlbmNlcygmbV9zdGFuZGFyZFByZWZlcmVuY2Vz
LkdldEludGVyZmFjZVB0cigpKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFdLMUJyb3dzZXJXaW5kb3c6OnNldFRvRGVmYXVsdFByZWZlcmVu
Y2VzKCkKK3sKKyAgICBIUkVTVUxUIGhyID0gbV9zdGFuZGFyZFByZWZlcmVuY2VzLT5RdWVyeUlu
dGVyZmFjZShJSURfSVdlYlByZWZlcmVuY2VzUHJpdmF0ZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kio+KCZtX3ByZWZzUHJpdmF0ZS5HZXRJbnRlcmZhY2VQdHIoKSkpOworICAgIGlmICghU1VDQ0VF
REVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgVVNFKENHKQorICAgIG1fc3Rh
bmRhcmRQcmVmZXJlbmNlcy0+c2V0QVZGb3VuZGF0aW9uRW5hYmxlZChUUlVFKTsKKyAgICBtX3By
ZWZzUHJpdmF0ZS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoVFJVRSk7CisjZW5k
aWYKKworICAgIG1fcHJlZnNQcml2YXRlLT5zZXRGdWxsU2NyZWVuRW5hYmxlZChUUlVFKTsKKyAg
ICBtX3ByZWZzUHJpdmF0ZS0+c2V0U2hvd0RlYnVnQm9yZGVycyhGQUxTRSk7CisgICAgbV9wcmVm
c1ByaXZhdGUtPnNldFNob3dSZXBhaW50Q291bnRlcihGQUxTRSk7CisgICAgbV9wcmVmc1ByaXZh
dGUtPnNldFNob3VsZEludmVydENvbG9ycyhGQUxTRSk7CisKKyAgICBtX3N0YW5kYXJkUHJlZmVy
ZW5jZXMtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShUUlVFKTsKKyAgICBtX3ByZWZzUHJp
dmF0ZS0+c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoVFJVRSk7CisgICAgbV9zdGFuZGFy
ZFByZWZlcmVuY2VzLT5zZXRKYXZhU2NyaXB0RW5hYmxlZChUUlVFKTsKKyAgICBtX3ByZWZzUHJp
dmF0ZS0+c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoRkFMU0UpOworICAgIG1f
cHJlZnNQcml2YXRlLT5zZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoVFJVRSk7CisKKyAg
ICBtX3ByZWZzUHJpdmF0ZS0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChUUlVFKTsKKworICAg
IHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVNZW51SXRlbUZvckhpc3RvcnlJ
dGVtKEhNRU5VIG1lbnUsIElXZWJIaXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0sIGludCBjdXJyZW50
SGlzdG9yeUl0ZW0pCit7CisgICAgVUlOVCBtZW51SUQgPSBJRE1fSElTVE9SWV9MSU5LMCArIGN1
cnJlbnRIaXN0b3J5SXRlbTsKKworICAgIE1FTlVJVEVNSU5GTyBtZW51SXRlbUluZm8gPSB7IDAg
fTsKKyAgICBtZW51SXRlbUluZm8uY2JTaXplID0gc2l6ZW9mKE1FTlVJVEVNSU5GTyk7CisgICAg
bWVudUl0ZW1JbmZvLmZNYXNrID0gTUlJTV9UWVBFOworICAgIG1lbnVJdGVtSW5mby5mVHlwZSA9
IE1GVF9TVFJJTkc7CisKKyAgICBfYnN0cl90IHRpdGxlOworICAgIGhpc3RvcnlJdGVtLnRpdGxl
KHRpdGxlLkdldEFkZHJlc3MoKSk7CisgICAgbWVudUl0ZW1JbmZvLmR3VHlwZURhdGEgPSBzdGF0
aWNfY2FzdDxMUFdTVFI+KHRpdGxlKTsKKworICAgIDo6U2V0TWVudUl0ZW1JbmZvKG1lbnUsIG1l
bnVJRCwgRkFMU0UsICZtZW51SXRlbUluZm8pOworICAgIDo6RW5hYmxlTWVudUl0ZW0obWVudSwg
bWVudUlELCBNRl9CWUNPTU1BTkQgfCBNRl9FTkFCTEVEKTsKK30KKwordm9pZCBXSzFCcm93c2Vy
V2luZG93OjpzaG93TGFzdFZpc2l0ZWRTaXRlcyhJV2ViVmlldyYgd2ViVmlldykKK3sKKyAgICBI
TUVOVSBtZW51ID0gOjpHZXRNZW51KG1faE1haW5XbmQpOworCisgICAgX2NvbV9wdHJfdDxfY29t
X0lJSUQ8SVdlYkJhY2tGb3J3YXJkTGlzdCwgJl9fdXVpZG9mKElXZWJCYWNrRm9yd2FyZExpc3Qp
Pj4gYmFja0ZvcndhcmRMaXN0OworICAgIEhSRVNVTFQgaHIgPSB3ZWJWaWV3LmJhY2tGb3J3YXJk
TGlzdCgmYmFja0ZvcndhcmRMaXN0LkdldEludGVyZmFjZVB0cigpKTsKKyAgICBpZiAoRkFJTEVE
KGhyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IGNhcGFjaXR5ID0gMDsKKyAgICBociA9
IGJhY2tGb3J3YXJkTGlzdC0+Y2FwYWNpdHkoJmNhcGFjaXR5KTsKKyAgICBpZiAoRkFJTEVEKGhy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IGJhY2tDb3VudCA9IDA7CisgICAgaHIgPSBi
YWNrRm9yd2FyZExpc3QtPmJhY2tMaXN0Q291bnQoJmJhY2tDb3VudCk7CisgICAgaWYgKEZBSUxF
RChocikpCisgICAgICAgIHJldHVybjsKKworICAgIFVJTlQgYmFja1NldHRpbmcgPSBNRl9CWUNP
TU1BTkQgfCAoKGJhY2tDb3VudCkgPyBNRl9FTkFCTEVEIDogTUZfRElTQUJMRUQpOworICAgIDo6
RW5hYmxlTWVudUl0ZW0obWVudSwgSURNX0hJU1RPUllfQkFDS1dBUkQsIGJhY2tTZXR0aW5nKTsK
KworICAgIGludCBmb3J3YXJkQ291bnQgPSAwOworICAgIGhyID0gYmFja0ZvcndhcmRMaXN0LT5m
b3J3YXJkTGlzdENvdW50KCZmb3J3YXJkQ291bnQpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBVSU5UIGZvcndhcmRTZXR0aW5nID0gTUZfQllDT01NQU5EIHwg
KChmb3J3YXJkQ291bnQpID8gTUZfRU5BQkxFRCA6IE1GX0RJU0FCTEVEKTsKKyAgICA6OkVuYWJs
ZU1lbnVJdGVtKG1lbnUsIElETV9ISVNUT1JZX0ZPUldBUkQsIGZvcndhcmRTZXR0aW5nKTsKKwor
ICAgIElXZWJIaXN0b3J5SXRlbVB0ciBjdXJyZW50SXRlbTsKKyAgICBociA9IGJhY2tGb3J3YXJk
TGlzdC0+Y3VycmVudEl0ZW0oJmN1cnJlbnRJdGVtLkdldEludGVyZmFjZVB0cigpKTsKKyAgICBp
ZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaHIgPSBtX3dlYkhpc3Rvcnkt
PmFkZEl0ZW1zKDEsICZjdXJyZW50SXRlbS5HZXRJbnRlcmZhY2VQdHIoKSk7CisgICAgaWYgKEZB
SUxFRChocikpCisgICAgICAgIHJldHVybjsKKworICAgIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElX
ZWJIaXN0b3J5UHJpdmF0ZSwgJl9fdXVpZG9mKElXZWJIaXN0b3J5UHJpdmF0ZSk+PiB3ZWJIaXN0
b3J5OworICAgIGhyID0gbV93ZWJIaXN0b3J5LT5RdWVyeUludGVyZmFjZShJSURfSVdlYkhpc3Rv
cnlQcml2YXRlLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndlYkhpc3RvcnkuR2V0SW50ZXJm
YWNlUHRyKCkpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aW50IHRvdGFsTGlzdENvdW50ID0gMDsKKyAgICBociA9IHdlYkhpc3RvcnktPmFsbEl0ZW1zKCZ0
b3RhbExpc3RDb3VudCwgMCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybjsK
KworICAgIG1faGlzdG9yeUl0ZW1zLnJlc2l6ZSh0b3RhbExpc3RDb3VudCk7CisKKyAgICBzdGQ6
OnZlY3RvcjxJV2ViSGlzdG9yeUl0ZW0qPiBoaXN0b3J5VG9Mb2FkKHRvdGFsTGlzdENvdW50KTsK
KyAgICBociA9IHdlYkhpc3RvcnktPmFsbEl0ZW1zKCZ0b3RhbExpc3RDb3VudCwgaGlzdG9yeVRv
TG9hZC5kYXRhKCkpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBzaXplX3QgaSA9IDA7CisgICAgZm9yIChhdXRvJiBjdXIgOiBoaXN0b3J5VG9Mb2FkKSB7Cisg
ICAgICAgIG1faGlzdG9yeUl0ZW1zW2ldLkF0dGFjaChjdXIpOworICAgICAgICArK2k7CisgICAg
fQorCisgICAgaW50IGFsbEl0ZW1zT2Zmc2V0ID0gMDsKKyAgICBpZiAodG90YWxMaXN0Q291bnQg
PiBtYXhIaXN0b3J5U2l6ZSkKKyAgICAgICAgYWxsSXRlbXNPZmZzZXQgPSB0b3RhbExpc3RDb3Vu
dCAtIG1heEhpc3RvcnlTaXplOworCisgICAgaW50IGN1cnJlbnRIaXN0b3J5SXRlbSA9IDA7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2hpc3RvcnlJdGVtcy5zaXplKCkgJiYgKGFsbEl0ZW1z
T2Zmc2V0ICsgY3VycmVudEhpc3RvcnlJdGVtKSA8IG1faGlzdG9yeUl0ZW1zLnNpemUoKTsgKytp
KSB7CisgICAgICAgIHVwZGF0ZU1lbnVJdGVtRm9ySGlzdG9yeUl0ZW0obWVudSwgKihtX2hpc3Rv
cnlJdGVtc1thbGxJdGVtc09mZnNldCArIGN1cnJlbnRIaXN0b3J5SXRlbV0pLCBjdXJyZW50SGlz
dG9yeUl0ZW0pOworICAgICAgICArK2N1cnJlbnRIaXN0b3J5SXRlbTsKKyAgICB9CisKKyAgICAv
LyBIaWRlIGFueSBoaXN0b3J5IHdlIGFyZW4ndCB1c2luZyB5ZXQuCisgICAgZm9yIChpbnQgaSA9
IGN1cnJlbnRIaXN0b3J5SXRlbTsgaSA8IG1heEhpc3RvcnlTaXplOyArK2kpCisgICAgICAgIDo6
RW5hYmxlTWVudUl0ZW0obWVudSwgSURNX0hJU1RPUllfTElOSzAgKyBpLCBNRl9CWUNPTU1BTkQg
fCBNRl9ESVNBQkxFRCk7Cit9CisKK3ZvaWQgV0sxQnJvd3NlcldpbmRvdzo6bGF1bmNoSW5zcGVj
dG9yKCkKK3sKKyAgICBpZiAoIW1fd2ViVmlld1ByaXZhdGUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghU1VDQ0VFREVEKG1fd2ViVmlld1ByaXZhdGUtPmluc3BlY3RvcigmbV9pbnNwZWN0
b3IuR2V0SW50ZXJmYWNlUHRyKCkpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0
b3ItPnNob3coKTsKK30KKwordm9pZCBXSzFCcm93c2VyV2luZG93OjpuYXZpZ2F0ZUZvcndhcmRP
ckJhY2t3YXJkKFVJTlQgbWVudUlEKQoreworICAgIGlmICghbV93ZWJWaWV3KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBCT09MIHdlbnRCYWNrT3JGb3J3YXJkID0gRkFMU0U7CisgICAgaWYgKElE
TV9ISVNUT1JZX0ZPUldBUkQgPT0gbWVudUlEKQorICAgICAgICBtX3dlYlZpZXctPmdvRm9yd2Fy
ZCgmd2VudEJhY2tPckZvcndhcmQpOworICAgIGVsc2UKKyAgICAgICAgbV93ZWJWaWV3LT5nb0Jh
Y2soJndlbnRCYWNrT3JGb3J3YXJkKTsKK30KKwordm9pZCBXSzFCcm93c2VyV2luZG93OjpuYXZp
Z2F0ZVRvSGlzdG9yeShVSU5UIG1lbnVJRCkKK3sKKyAgICBpZiAoIW1fd2ViVmlldykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaW50IGhpc3RvcnlFbnRyeSA9IG1lbnVJRCAtIElETV9ISVNUT1JZ
X0xJTkswOworICAgIGlmIChoaXN0b3J5RW50cnkgPiBtX2hpc3RvcnlJdGVtcy5zaXplKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIElXZWJIaXN0b3J5SXRlbVB0ciBkZXNpcmVkSGlzdG9yeUl0
ZW0gPSBtX2hpc3RvcnlJdGVtc1toaXN0b3J5RW50cnldOworICAgIGlmICghZGVzaXJlZEhpc3Rv
cnlJdGVtKQorICAgICAgICByZXR1cm47CisKKyAgICBCT09MIHN1Y2NlZWRlZCA9IEZBTFNFOwor
ICAgIG1fd2ViVmlldy0+Z29Ub0JhY2tGb3J3YXJkSXRlbShkZXNpcmVkSGlzdG9yeUl0ZW0sICZz
dWNjZWVkZWQpOworCisgICAgX2JzdHJfdCBmcmFtZVVSTDsKKyAgICBkZXNpcmVkSGlzdG9yeUl0
ZW0tPlVSTFN0cmluZyhmcmFtZVVSTC5HZXRBZGRyZXNzKCkpOworCisgICAgOjpTZW5kTWVzc2Fn
ZShtX2hVUkxCYXJXbmQsIChVSU5UKVdNX1NFVFRFWFQsIDAsIChMUEFSQU0pZnJhbWVVUkwuR2V0
QlNUUigpKTsKK30KKworYm9vbCBXSzFCcm93c2VyV2luZG93Ojpnb0JhY2soKQoreworICAgIEJP
T0wgd2VudEJhY2sgPSBGQUxTRTsKKyAgICBtX3dlYlZpZXctPmdvQmFjaygmd2VudEJhY2spOwor
ICAgIHJldHVybiB3ZW50QmFjazsKK30KKworYm9vbCBXSzFCcm93c2VyV2luZG93Ojpnb0Zvcndh
cmQoKQoreworICAgIEJPT0wgd2VudEZvcndhcmQgPSBGQUxTRTsKKyAgICBtX3dlYlZpZXctPmdv
Rm9yd2FyZCgmd2VudEZvcndhcmQpOworICAgIHJldHVybiB3ZW50Rm9yd2FyZDsKK30KKworSFJF
U1VMVCBXSzFCcm93c2VyV2luZG93Ojpsb2FkVVJMKGNvbnN0IEJTVFImIHBhc3NlZFVSTCkKK3sK
KyAgICBpZiAoIXBhc3NlZFVSTCkKKyAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKworICAg
IF9ic3RyX3QgdXJsQlN0cihwYXNzZWRVUkwpOworICAgIGlmICghIXVybEJTdHIgJiYgKDo6UGF0
aEZpbGVFeGlzdHModXJsQlN0cikgfHwgOjpQYXRoSXNVTkModXJsQlN0cikpKSB7CisgICAgICAg
IFRDSEFSIGZpbGVVUkxbSU5URVJORVRfTUFYX1VSTF9MRU5HVEhdOworICAgICAgICBEV09SRCBm
aWxlVVJMTGVuZ3RoID0gc2l6ZW9mKGZpbGVVUkwpIC8gc2l6ZW9mKGZpbGVVUkxbMF0pOworCisg
ICAgICAgIGlmIChTVUNDRUVERUQoOjpVcmxDcmVhdGVGcm9tUGF0aCh1cmxCU3RyLCBmaWxlVVJM
LCAmZmlsZVVSTExlbmd0aCwgMCkpKQorICAgICAgICAgICAgdXJsQlN0ciA9IGZpbGVVUkw7Cisg
ICAgfQorCisgICAgSVdlYkZyYW1lUHRyIGZyYW1lOworICAgIEhSRVNVTFQgaHIgPSBtX3dlYlZp
ZXctPm1haW5GcmFtZSgmZnJhbWUuR2V0SW50ZXJmYWNlUHRyKCkpOworICAgIGlmIChGQUlMRUQo
aHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBJV2ViTXV0YWJsZVVSTFJlcXVlc3RQdHIg
cmVxdWVzdDsKKyAgICBociA9IFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYk11dGFibGVV
UkxSZXF1ZXN0LCAwLCBJSURfSVdlYk11dGFibGVVUkxSZXF1ZXN0LCAodm9pZCoqKSZyZXF1ZXN0
KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBy
ZXF1ZXN0LT5pbml0V2l0aFVSTCh3Y3NzdHIoc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KHVybEJTdHIp
LCBMIjovLyIpID8gdXJsQlN0ciA6IF9ic3RyX3QoTCJodHRwOi8vIikgKyB1cmxCU3RyLCBXZWJV
UkxSZXF1ZXN0VXNlUHJvdG9jb2xDYWNoZVBvbGljeSwgNjApOworICAgIGlmIChGQUlMRUQoaHIp
KQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBfYnN0cl90IG1ldGhvZEJTdHIoTCJHRVQiKTsK
KyAgICBociA9IHJlcXVlc3QtPnNldEhUVFBNZXRob2QobWV0aG9kQlN0cik7CisgICAgaWYgKEZB
SUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIGhyID0gZnJhbWUtPmxvYWRSZXF1
ZXN0KHJlcXVlc3QpOworCisgICAgcmV0dXJuIGhyOworfQorCit2b2lkIFdLMUJyb3dzZXJXaW5k
b3c6OmV4aXRQcm9ncmFtKCkKK3sKKyAgICA6OlBvc3RNZXNzYWdlKG1faE1haW5XbmQsIHN0YXRp
Y19jYXN0PFVJTlQ+KFdNX0NPTU1BTkQpLCBNQUtFTFBBUkFNKElETV9FWElULCAwKSwgMCk7Cit9
CisKK3ZvaWQgV0sxQnJvd3NlcldpbmRvdzo6c2V0VXNlckFnZW50KFVJTlQgbWVudUlEKQorewor
ICAgIGlmICghd2ViVmlldygpKQorICAgICAgICByZXR1cm47CisKKyAgICBfYnN0cl90IGN1c3Rv
bVVzZXJBZ2VudDsKKyAgICBzd2l0Y2ggKG1lbnVJRCkgeworICAgIGNhc2UgSURNX1VBX0RFRkFV
TFQ6CisgICAgICAgIC8vIFNldCB0byBudWxsIHVzZXIgYWdlbnQKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBJRE1fVUFfU0FGQVJJXzhfMDoKKyAgICAgICAgY3VzdG9tVXNlckFnZW50ID0gTCJN
b3ppbGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xMCkgQXBwbGVXZWJLaXQv
NjAwLjEuMjUgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzguMCBTYWZhcmkvNjAwLjEuMjUi
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIElETV9VQV9TQUZBUklfSU9TXzhfSVBIT05FOgor
ICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChpUGhvbmU7IENQVSBPUyA4
XzEgbGlrZSBNYWMgT1MgWCkgQXBwbGVXZWJLaXQvNjAxLjEuNCAoS0hUTUwsIGxpa2UgR2Vja28p
IFZlcnNpb24vOC4wIE1vYmlsZS8xMkI0MDMgU2FmYXJpLzYwMC4xLjQiOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIElETV9VQV9TQUZBUklfSU9TXzhfSVBBRDoKKyAgICAgICAgY3VzdG9tVXNl
ckFnZW50ID0gTCJNb3ppbGxhLzUuMCAoaVBhZDsgQ1BVIE9TIDhfMSBsaWtlIE1hYyBPUyBYKSBB
cHBsZVdlYktpdC82MDAuMS40IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi84LjAgTW9iaWxl
LzEyQjQwMyBTYWZhcmkvNjAwLjEuNCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURNX1VB
X0lFXzExOgorICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChXaW5kb3dz
IE5UIDYuMzsgV09XNjQ7IFRyaWRlbnQvNy4wOyBydjoxMS4wKSBsaWtlIEdlY2tvIjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBJRE1fVUFfQ0hST01FX01BQzoKKyAgICAgICAgY3VzdG9tVXNl
ckFnZW50ID0gTCJNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF84XzMp
IEFwcGxlV2ViS2l0LzUzNy4zMSAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8yNi4wLjE0MTAu
NjUgU2FmYXJpLzUzNy4zMSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURNX1VBX0NIUk9N
RV9XSU46CisgICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9IEwiTW96aWxsYS81LjAgKFdpbmRvd3Mg
TlQgNi4yOyBXT1c2NCkgQXBwbGVXZWJLaXQvNTM3LjMxIChLSFRNTCwgbGlrZSBHZWNrbykgQ2hy
b21lLzI2LjAuMTQxMC42NCBTYWZhcmkvNTM3LjMxIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJRE1fVUFfRklSRUZPWF9NQUM6CisgICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9IEwiTW96aWxs
YS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTAuODsgcnY6MjAuMCkgR2Vja28vMjAx
MDAxMDEgRmlyZWZveC8yMC4wIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJRE1fVUFfRklS
RUZPWF9XSU46CisgICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9IEwiTW96aWxsYS81LjAgKFdpbmRv
d3MgTlQgNi4yOyBXT1c2NDsgcnY6MjAuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC8yMC4wIjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJRE1fVUFfT1RIRVI6CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUKDApOyAvLyBXZSBzaG91bGQgbmV2ZXIgaGl0IHRoaXMgY2FzZQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgc2V0VXNlckFnZW50KGN1c3RvbVVzZXJBZ2VudCk7Cit9
CisKK3ZvaWQgV0sxQnJvd3NlcldpbmRvdzo6c2V0VXNlckFnZW50KF9ic3RyX3QmIGN1c3RvbVVz
ZXJBZ2VudCkKK3sKKyAgICB3ZWJWaWV3KCktPnNldEN1c3RvbVVzZXJBZ2VudChjdXN0b21Vc2Vy
QWdlbnQuR2V0QlNUUigpKTsKK30KKworX2JzdHJfdCBXSzFCcm93c2VyV2luZG93Ojp1c2VyQWdl
bnQoKQoreworICAgIF9ic3RyX3QgdXNlckFnZW50OworICAgIGlmIChGQUlMRUQod2ViVmlldygp
LT5jdXN0b21Vc2VyQWdlbnQoJnVzZXJBZ2VudC5HZXRCU1RSKCkpKSkKKyAgICAgICAgcmV0dXJu
IF9ic3RyX3QoTCItIFVua25vd24gLTogQ2FsbCBmYWlsZWQuIik7CisKKyAgICByZXR1cm4gdXNl
ckFnZW50OworfQorCit0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJJQkFjdGlvbnMs
ICZfX3V1aWRvZihJV2ViSUJBY3Rpb25zKT4+IElXZWJJQkFjdGlvbnNQdHI7CisKK3ZvaWQgV0sx
QnJvd3NlcldpbmRvdzo6cmVzZXRab29tKCkKK3sKKyAgICBJV2ViSUJBY3Rpb25zUHRyIHdlYkFj
dGlvbnM7CisgICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPlF1ZXJ5SW50ZXJmYWNlKElJRF9JV2Vi
SUJBY3Rpb25zLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndlYkFjdGlvbnMuR2V0SW50ZXJm
YWNlUHRyKCkpKSkpCisgICAgICAgIHJldHVybjsKKworICAgIHdlYkFjdGlvbnMtPnJlc2V0UGFn
ZVpvb20obnVsbHB0cik7Cit9CisKK3ZvaWQgV0sxQnJvd3NlcldpbmRvdzo6em9vbUluKCkKK3sK
KyAgICBJV2ViSUJBY3Rpb25zUHRyIHdlYkFjdGlvbnM7CisgICAgaWYgKEZBSUxFRChtX3dlYlZp
ZXctPlF1ZXJ5SW50ZXJmYWNlKElJRF9JV2ViSUJBY3Rpb25zLCByZWludGVycHJldF9jYXN0PHZv
aWQqKj4oJndlYkFjdGlvbnMuR2V0SW50ZXJmYWNlUHRyKCkpKSkpCisgICAgICAgIHJldHVybjsK
KworICAgIHdlYkFjdGlvbnMtPnpvb21QYWdlSW4obnVsbHB0cik7Cit9CisKK3ZvaWQgV0sxQnJv
d3NlcldpbmRvdzo6em9vbU91dCgpCit7CisgICAgSVdlYklCQWN0aW9uc1B0ciB3ZWJBY3Rpb25z
OworICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT5RdWVyeUludGVyZmFjZShJSURfSVdlYklCQWN0
aW9ucywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ3ZWJBY3Rpb25zLkdldEludGVyZmFjZVB0
cigpKSkpKQorICAgICAgICByZXR1cm47CisKKyAgICB3ZWJBY3Rpb25zLT56b29tUGFnZU91dChu
dWxscHRyKTsKK30KKwordHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViVmlld1ByaXZh
dGUzLCAmX191dWlkb2YoSVdlYlZpZXdQcml2YXRlMyk+PiBJV2ViVmlld1ByaXZhdGUzUHRyOwor
Cit2b2lkIFdLMUJyb3dzZXJXaW5kb3c6OnNob3dMYXllclRyZWUoKQoreworICAgIElXZWJWaWV3
UHJpdmF0ZTNQdHIgd2ViVmlld1ByaXZhdGU7CisgICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPlF1
ZXJ5SW50ZXJmYWNlKElJRF9JV2ViVmlld1ByaXZhdGUzLCByZWludGVycHJldF9jYXN0PHZvaWQq
Kj4oJndlYlZpZXdQcml2YXRlLkdldEludGVyZmFjZVB0cigpKSkpKQorICAgICAgICByZXR1cm47
CisKKyAgICBPdXRwdXREZWJ1Z1N0cmluZyhMIkNVUlJFTlQgVFJFRTpcbiIpOworCisgICAgX2Jz
dHJfdCBsYXllclRyZWVCc3RyOworICAgIGlmIChGQUlMRUQod2ViVmlld1ByaXZhdGUtPmxheWVy
VHJlZUFzU3RyaW5nKGxheWVyVHJlZUJzdHIuR2V0QWRkcmVzcygpKSkpCisgICAgICAgIE91dHB1
dERlYnVnU3RyaW5nKEwiICAgIEZhaWxlZCB0byByZXRyaWV2ZSB0aGUgbGF5ZXIgdHJlZS5cbiIp
OworICAgIGVsc2UKKyAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcobGF5ZXJUcmVlQnN0cik7Cisg
ICAgT3V0cHV0RGVidWdTdHJpbmcoTCJcblxuIik7Cit9CisKK3N0YXRpYyBCT09MIENBTExCQUNL
IEFib3J0UHJvYyhIREMgaERDLCBpbnQgRXJyb3IpCit7CisgICAgTVNHIG1zZzsKKyAgICB3aGls
ZSAoOjpQZWVrTWVzc2FnZSgmbXNnLCAwLCAwLCAwLCBQTV9SRU1PVkUpKSB7CisgICAgICAgIDo6
VHJhbnNsYXRlTWVzc2FnZSgmbXNnKTsKKyAgICAgICAgOjpEaXNwYXRjaE1lc3NhZ2UoJm1zZyk7
CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBIREMgZ2V0UHJpbnRlckRD
KCkKK3sKKyAgICBQUklOVERMRyBwZGxnOworICAgIG1lbXNldCgmcGRsZywgMCwgc2l6ZW9mKFBS
SU5URExHKSk7CisgICAgcGRsZy5sU3RydWN0U2l6ZSA9IHNpemVvZihQUklOVERMRyk7CisgICAg
cGRsZy5GbGFncyA9IFBEX1BSSU5UU0VUVVAgfCBQRF9SRVRVUk5EQzsKKworICAgIDo6UHJpbnRE
bGcoJnBkbGcpOworCisgICAgcmV0dXJuIHBkbGcuaERDOworfQorCitzdGF0aWMgdm9pZCBpbml0
RG9jU3RydWN0KERPQ0lORk8qIGRpLCBUQ0hBUiogZG9jbmFtZSkKK3sKKyAgICBtZW1zZXQoZGks
IDAsIHNpemVvZihET0NJTkZPKSk7CisgICAgZGktPmNiU2l6ZSA9IHNpemVvZihET0NJTkZPKTsK
KyAgICBkaS0+bHBzekRvY05hbWUgPSBkb2NuYW1lOworfQorCit2b2lkIFdLMUJyb3dzZXJXaW5k
b3c6OnByaW50KCkKK3sKKyAgICBIREMgcHJpbnREQyA9IGdldFByaW50ZXJEQygpOworICAgIGlm
ICghcHJpbnREQykgeworICAgICAgICA6Ok1lc3NhZ2VCb3goMCwgTCJFcnJvciBjcmVhdGluZyBw
cmludGluZyBEQyIsIEwiRXJyb3IiLCBNQl9BUFBMTU9EQUwgfCBNQl9PSyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoOjpTZXRBYm9ydFByb2MocHJpbnREQywgQWJvcnRQcm9j
KSA9PSBTUF9FUlJPUikgeworICAgICAgICA6Ok1lc3NhZ2VCb3goMCwgTCJFcnJvciBzZXR0aW5n
IHVwIEFib3J0UHJvYyIsIEwiRXJyb3IiLCBNQl9BUFBMTU9EQUwgfCBNQl9PSyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBJV2ViRnJhbWVQdHIgZnJhbWUgPSBtYWluRnJhbWUoKTsK
KyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBJV2ViRnJhbWVQcml2YXRl
UHRyIGZyYW1lUHJpdmF0ZTsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT5RdWVyeUludGVyZmFjZSgm
ZnJhbWVQcml2YXRlLkdldEludGVyZmFjZVB0cigpKSkpCisgICAgICAgIHJldHVybjsKKworICAg
IGZyYW1lUHJpdmF0ZS0+c2V0SW5QcmludGluZ01vZGUoVFJVRSwgcHJpbnREQyk7CisKKyAgICBV
SU5UIHBhZ2VDb3VudCA9IDA7CisgICAgZnJhbWVQcml2YXRlLT5nZXRQcmludGVkUGFnZUNvdW50
KHByaW50REMsICZwYWdlQ291bnQpOworCisgICAgRE9DSU5GTyBkaTsKKyAgICBpbml0RG9jU3Ry
dWN0KCZkaSwgTCJXZWJLaXQgRG9jIik7CisgICAgOjpTdGFydERvYyhwcmludERDLCAmZGkpOwor
CisgICAgLy8gRklYTUU6IE5lZWQgQ29yZUdyYXBoaWNzIGltcGxlbWVudGF0aW9uCisgICAgdm9p
ZCogZ3JhcGhpY3NDb250ZXh0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBwYWdlID0gMTsgcGFnZSA8
PSBwYWdlQ291bnQ7ICsrcGFnZSkgeworICAgICAgICA6OlN0YXJ0UGFnZShwcmludERDKTsKKyAg
ICAgICAgZnJhbWVQcml2YXRlLT5zcG9vbFBhZ2VzKHByaW50REMsIHBhZ2UsIHBhZ2UsIGdyYXBo
aWNzQ29udGV4dCk7CisgICAgICAgIDo6RW5kUGFnZShwcmludERDKTsKKyAgICB9CisKKyAgICBm
cmFtZVByaXZhdGUtPnNldEluUHJpbnRpbmdNb2RlKEZBTFNFLCBwcmludERDKTsKKworICAgIDo6
RW5kRG9jKHByaW50REMpOworICAgIDo6RGVsZXRlREMocHJpbnREQyk7Cit9CisKK3N0YXRpYyB2
b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJTlQgZmllbGQsIF9ic3RyX3QgdmFsdWUp
Cit7CisgICAgOjpTZXREbGdJdGVtVGV4dChkaWFsb2csIGZpZWxkLCB2YWx1ZSk7Cit9CisKK3N0
YXRpYyB2b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJTlQgZmllbGQsIFVJTlQgdmFs
dWUpCit7CisgICAgU3RyaW5nIHZhbHVlU3RyID0gV1RGOjpTdHJpbmc6Om51bWJlcih2YWx1ZSk7
CisKKyAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgZmllbGQsIF9ic3RyX3QodmFsdWVTdHIudXRm
OCgpLmRhdGEoKSkpOworfQorCit0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElQcm9wZXJ0
eUJhZywgJl9fdXVpZG9mKElQcm9wZXJ0eUJhZyk+PiBJUHJvcGVydHlCYWdQdHI7CisKK3N0YXRp
YyB2b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJTlQgZmllbGQsIElQcm9wZXJ0eUJh
Z1B0ciBzdGF0aXN0aWNzLCBjb25zdCBfYnN0cl90JiBrZXkpCit7CisgICAgX3ZhcmlhbnRfdCB2
YXI7CisgICAgVl9WVCgmdmFyKSA9IFZUX1VJODsKKyAgICBpZiAoRkFJTEVEKHN0YXRpc3RpY3Mt
PlJlYWQoa2V5LCAmdmFyLkdldFZBUklBTlQoKSwgbnVsbHB0cikpKQorICAgICAgICByZXR1cm47
CisKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgPSBWX1VJOCgmdmFyKTsKKyAgICBTdHJp
bmcgdmFsdWVTdHIgPSBXVEY6OlN0cmluZzo6bnVtYmVyKHZhbHVlKTsKKworICAgIHNldFdpbmRv
d1RleHQoZGlhbG9nLCBmaWVsZCwgX2JzdHJfdCh2YWx1ZVN0ci51dGY4KCkuZGF0YSgpKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJTlQgZmllbGQsIENG
RGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBDRlN0cmluZ1JlZiBrZXksIFVJTlQmIHRvdGFsKQor
eworICAgIENGTnVtYmVyUmVmIGNvdW50TnVtID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENG
RGljdGlvbmFyeUdldFZhbHVlKGRpY3Rpb25hcnksIGtleSkpOworICAgIGlmICghY291bnROdW0p
CisgICAgICAgIHJldHVybjsKKworICAgIGludCBjb3VudCA9IDA7CisgICAgQ0ZOdW1iZXJHZXRW
YWx1ZShjb3VudE51bSwga0NGTnVtYmVySW50VHlwZSwgJmNvdW50KTsKKworICAgIHNldFdpbmRv
d1RleHQoZGlhbG9nLCBmaWVsZCwgc3RhdGljX2Nhc3Q8VUlOVD4oY291bnQpKTsKKyAgICB0b3Rh
bCArPSBjb3VudDsKK30KKwordm9pZCBXSzFCcm93c2VyV2luZG93Ojp1cGRhdGVTdGF0aXN0aWNz
KEhXTkQgZGlhbG9nKQoreworICAgIElXZWJDb3JlU3RhdGlzdGljc1B0ciB3ZWJDb3JlU3RhdGlz
dGljcyA9IHN0YXRpc3RpY3MoKTsKKyAgICBpZiAoIXdlYkNvcmVTdGF0aXN0aWNzKQorICAgICAg
ICByZXR1cm47CisKKyAgICBJUHJvcGVydHlCYWdQdHIgc3RhdGlzdGljczsKKyAgICBIUkVTVUxU
IGhyID0gd2ViQ29yZVN0YXRpc3RpY3MtPm1lbW9yeVN0YXRpc3RpY3MoJnN0YXRpc3RpY3MuR2V0
SW50ZXJmYWNlUHRyKCkpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBGYXN0TWFsbG9jLgorICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfUkVTRVJW
RURfVk0sIHN0YXRpc3RpY3MsICJGYXN0TWFsbG9jUmVzZXJ2ZWRWTUJ5dGVzIik7CisgICAgc2V0
V2luZG93VGV4dChkaWFsb2csIElEQ19DT01NSVRURURfVk0sIHN0YXRpc3RpY3MsICJGYXN0TWFs
bG9jQ29tbWl0dGVkVk1CeXRlcyIpOworICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfRlJF
RV9MSVNUX0JZVEVTLCBzdGF0aXN0aWNzLCAiRmFzdE1hbGxvY0ZyZWVMaXN0Qnl0ZXMiKTsKKwor
ICAgIC8vIFdlYkNvcmUgQ2FjaGUuCisjaWYgVVNFKENGKQorICAgIElXZWJDYWNoZVB0ciB3ZWJD
YWNoZSA9IHRoaXMtPndlYkNhY2hlKCk7CisKKyAgICBpbnQgZGljdENvdW50ID0gNjsKKyAgICBJ
UHJvcGVydHlCYWcqIGNhY2hlRGljdFs2XSA9IHsgMCB9OworICAgIGlmIChGQUlMRUQod2ViQ2Fj
aGUtPnN0YXRpc3RpY3MoJmRpY3RDb3VudCwgY2FjaGVEaWN0KSkpCisgICAgICAgIHJldHVybjsK
KworICAgIENPTVB0cjxDRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZz4gY291bnRzLCBzaXplcywgbGl2
ZVNpemVzLCBkZWNvZGVkU2l6ZXMsIHB1cmdhYmxlU2l6ZXM7CisgICAgY291bnRzLmFkb3B0UmVm
KHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcqPihjYWNoZURpY3RbMF0p
KTsKKyAgICBzaXplcy5hZG9wdFJlZihyZWludGVycHJldF9jYXN0PENGRGljdGlvbmFyeVByb3Bl
cnR5QmFnKj4oY2FjaGVEaWN0WzFdKSk7CisgICAgbGl2ZVNpemVzLmFkb3B0UmVmKHJlaW50ZXJw
cmV0X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcqPihjYWNoZURpY3RbMl0pKTsKKyAgICBk
ZWNvZGVkU2l6ZXMuYWRvcHRSZWYocmVpbnRlcnByZXRfY2FzdDxDRkRpY3Rpb25hcnlQcm9wZXJ0
eUJhZyo+KGNhY2hlRGljdFszXSkpOworICAgIHB1cmdhYmxlU2l6ZXMuYWRvcHRSZWYocmVpbnRl
cnByZXRfY2FzdDxDRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZyo+KGNhY2hlRGljdFs0XSkpOworCisg
ICAgc3RhdGljIENGU3RyaW5nUmVmIGltYWdlc0tleSA9IENGU1RSKCJpbWFnZXMiKTsKKyAgICBz
dGF0aWMgQ0ZTdHJpbmdSZWYgc3R5bGVzaGVldHNLZXkgPSBDRlNUUigic3R5bGUgc2hlZXRzIik7
CisgICAgc3RhdGljIENGU3RyaW5nUmVmIHhzbEtleSA9IENGU1RSKCJ4c2wiKTsKKyAgICBzdGF0
aWMgQ0ZTdHJpbmdSZWYgc2NyaXB0c0tleSA9IENGU1RSKCJzY3JpcHRzIik7CisKKyAgICBpZiAo
Y291bnRzKSB7CisgICAgICAgIFVJTlQgdG90YWxPYmplY3RzID0gMDsKKyAgICAgICAgc2V0V2lu
ZG93VGV4dChkaWFsb2csIElEQ19JTUFHRVNfT0JKRUNUX0NPVU5ULCBjb3VudHMtPmRpY3Rpb25h
cnkoKSwgaW1hZ2VzS2V5LCB0b3RhbE9iamVjdHMpOworICAgICAgICBzZXRXaW5kb3dUZXh0KGRp
YWxvZywgSURDX0NTU19PQkpFQ1RfQ09VTlQsIGNvdW50cy0+ZGljdGlvbmFyeSgpLCBzdHlsZXNo
ZWV0c0tleSwgdG90YWxPYmplY3RzKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElE
Q19YU0xfT0JKRUNUX0NPVU5ULCBjb3VudHMtPmRpY3Rpb25hcnkoKSwgeHNsS2V5LCB0b3RhbE9i
amVjdHMpOworICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0pTQ19PQkpFQ1RfQ09V
TlQsIGNvdW50cy0+ZGljdGlvbmFyeSgpLCBzY3JpcHRzS2V5LCB0b3RhbE9iamVjdHMpOworICAg
ICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1RPVEFMX09CSkVDVF9DT1VOVCwgdG90YWxP
YmplY3RzKTsKKyAgICB9CisKKyAgICBpZiAoc2l6ZXMpIHsKKyAgICAgICAgVUlOVCB0b3RhbEJ5
dGVzID0gMDsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19JTUFHRVNfQllURVMs
IHNpemVzLT5kaWN0aW9uYXJ5KCksIGltYWdlc0tleSwgdG90YWxCeXRlcyk7CisgICAgICAgIHNl
dFdpbmRvd1RleHQoZGlhbG9nLCBJRENfQ1NTX0JZVEVTLCBzaXplcy0+ZGljdGlvbmFyeSgpLCBz
dHlsZXNoZWV0c0tleSwgdG90YWxCeXRlcyk7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9n
LCBJRENfWFNMX0JZVEVTLCBzaXplcy0+ZGljdGlvbmFyeSgpLCB4c2xLZXksIHRvdGFsQnl0ZXMp
OworICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0pTQ19CWVRFUywgc2l6ZXMtPmRp
Y3Rpb25hcnkoKSwgc2NyaXB0c0tleSwgdG90YWxCeXRlcyk7CisgICAgICAgIHNldFdpbmRvd1Rl
eHQoZGlhbG9nLCBJRENfVE9UQUxfQllURVMsIHRvdGFsQnl0ZXMpOworICAgIH0KKworICAgIGlm
IChsaXZlU2l6ZXMpIHsKKyAgICAgICAgVUlOVCB0b3RhbExpdmVCeXRlcyA9IDA7CisgICAgICAg
IHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSU1BR0VTX0xJVkVfQ09VTlQsIGxpdmVTaXplcy0+
ZGljdGlvbmFyeSgpLCBpbWFnZXNLZXksIHRvdGFsTGl2ZUJ5dGVzKTsKKyAgICAgICAgc2V0V2lu
ZG93VGV4dChkaWFsb2csIElEQ19DU1NfTElWRV9DT1VOVCwgbGl2ZVNpemVzLT5kaWN0aW9uYXJ5
KCksIHN0eWxlc2hlZXRzS2V5LCB0b3RhbExpdmVCeXRlcyk7CisgICAgICAgIHNldFdpbmRvd1Rl
eHQoZGlhbG9nLCBJRENfWFNMX0xJVkVfQ09VTlQsIGxpdmVTaXplcy0+ZGljdGlvbmFyeSgpLCB4
c2xLZXksIHRvdGFsTGl2ZUJ5dGVzKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElE
Q19KU0NfTElWRV9DT1VOVCwgbGl2ZVNpemVzLT5kaWN0aW9uYXJ5KCksIHNjcmlwdHNLZXksIHRv
dGFsTGl2ZUJ5dGVzKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19UT1RBTF9M
SVZFX0NPVU5ULCB0b3RhbExpdmVCeXRlcyk7CisgICAgfQorCisgICAgaWYgKGRlY29kZWRTaXpl
cykgeworICAgICAgICBVSU5UIHRvdGFsRGVjb2RlZCA9IDA7CisgICAgICAgIHNldFdpbmRvd1Rl
eHQoZGlhbG9nLCBJRENfSU1BR0VTX0RFQ09ERURfQ09VTlQsIGRlY29kZWRTaXplcy0+ZGljdGlv
bmFyeSgpLCBpbWFnZXNLZXksIHRvdGFsRGVjb2RlZCk7CisgICAgICAgIHNldFdpbmRvd1RleHQo
ZGlhbG9nLCBJRENfQ1NTX0RFQ09ERURfQ09VTlQsIGRlY29kZWRTaXplcy0+ZGljdGlvbmFyeSgp
LCBzdHlsZXNoZWV0c0tleSwgdG90YWxEZWNvZGVkKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChk
aWFsb2csIElEQ19YU0xfREVDT0RFRF9DT1VOVCwgZGVjb2RlZFNpemVzLT5kaWN0aW9uYXJ5KCks
IHhzbEtleSwgdG90YWxEZWNvZGVkKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElE
Q19KU0NfREVDT0RFRF9DT1VOVCwgZGVjb2RlZFNpemVzLT5kaWN0aW9uYXJ5KCksIHNjcmlwdHNL
ZXksIHRvdGFsRGVjb2RlZCk7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfVE9U
QUxfREVDT0RFRCwgdG90YWxEZWNvZGVkKTsKKyAgICB9CisKKyAgICBpZiAocHVyZ2FibGVTaXpl
cykgeworICAgICAgICBVSU5UIHRvdGFsUHVyZ2FibGUgPSAwOworICAgICAgICBzZXRXaW5kb3dU
ZXh0KGRpYWxvZywgSURDX0lNQUdFU19QVVJHRUFCTEVfQ09VTlQsIHB1cmdhYmxlU2l6ZXMtPmRp
Y3Rpb25hcnkoKSwgaW1hZ2VzS2V5LCB0b3RhbFB1cmdhYmxlKTsKKyAgICAgICAgc2V0V2luZG93
VGV4dChkaWFsb2csIElEQ19DU1NfUFVSR0VBQkxFX0NPVU5ULCBwdXJnYWJsZVNpemVzLT5kaWN0
aW9uYXJ5KCksIHN0eWxlc2hlZXRzS2V5LCB0b3RhbFB1cmdhYmxlKTsKKyAgICAgICAgc2V0V2lu
ZG93VGV4dChkaWFsb2csIElEQ19YU0xfUFVSR0VBQkxFX0NPVU5ULCBwdXJnYWJsZVNpemVzLT5k
aWN0aW9uYXJ5KCksIHhzbEtleSwgdG90YWxQdXJnYWJsZSk7CisgICAgICAgIHNldFdpbmRvd1Rl
eHQoZGlhbG9nLCBJRENfSlNDX1BVUkdFQUJMRV9DT1VOVCwgcHVyZ2FibGVTaXplcy0+ZGljdGlv
bmFyeSgpLCBzY3JpcHRzS2V5LCB0b3RhbFB1cmdhYmxlKTsKKyAgICAgICAgc2V0V2luZG93VGV4
dChkaWFsb2csIElEQ19UT1RBTF9QVVJHRUFCTEUsIHRvdGFsUHVyZ2FibGUpOworICAgIH0KKyNl
bmRpZgorCisgICAgLy8gSmF2YVNjcmlwdCBIZWFwLgorICAgIHNldFdpbmRvd1RleHQoZGlhbG9n
LCBJRENfSlNDX0hFQVBfU0laRSwgc3RhdGlzdGljcywgIkphdmFTY3JpcHRIZWFwU2l6ZSIpOwor
ICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSlNDX0hFQVBfRlJFRSwgc3RhdGlzdGljcywg
IkphdmFTY3JpcHRGcmVlU2l6ZSIpOworCisgICAgVUlOVCBjb3VudDsKKyAgICBpZiAoU1VDQ0VF
REVEKHdlYkNvcmVTdGF0aXN0aWNzLT5qYXZhU2NyaXB0T2JqZWN0c0NvdW50KCZjb3VudCkpKQor
ICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1RPVEFMX0pTQ19IRUFQX09CSkVDVFMs
IGNvdW50KTsKKyAgICBpZiAoU1VDQ0VFREVEKHdlYkNvcmVTdGF0aXN0aWNzLT5qYXZhU2NyaXB0
R2xvYmFsT2JqZWN0c0NvdW50KCZjb3VudCkpKQorICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxv
ZywgSURDX0dMT0JBTF9KU0NfSEVBUF9PQkpFQ1RTLCBjb3VudCk7CisgICAgaWYgKFNVQ0NFRURF
RCh3ZWJDb3JlU3RhdGlzdGljcy0+amF2YVNjcmlwdFByb3RlY3RlZE9iamVjdHNDb3VudCgmY291
bnQpKSkKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19QUk9URUNURURfSlNDX0hF
QVBfT0JKRUNUUywgY291bnQpOworCisgICAgLy8gRm9udCBhbmQgR2x5cGggQ2FjaGVzLgorICAg
IGlmIChTVUNDRUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmNhY2hlZEZvbnREYXRhQ291bnQoJmNv
dW50KSkpCisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfVE9UQUxfRk9OVF9PQkpF
Q1RTLCBjb3VudCk7CisgICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+Y2FjaGVk
Rm9udERhdGFJbmFjdGl2ZUNvdW50KCZjb3VudCkpKQorICAgICAgICBzZXRXaW5kb3dUZXh0KGRp
YWxvZywgSURDX0lOQUNUSVZFX0ZPTlRfT0JKRUNUUywgY291bnQpOworICAgIGlmIChTVUNDRUVE
RUQod2ViQ29yZVN0YXRpc3RpY3MtPmdseXBoUGFnZUNvdW50KCZjb3VudCkpKQorICAgICAgICBz
ZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0dMWVBIX1BBR0VTLCBjb3VudCk7CisKKyAgICAvLyBT
aXRlIEljb24gRGF0YWJhc2UuCisgICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+
aWNvblBhZ2VVUkxNYXBwaW5nQ291bnQoJmNvdW50KSkpCisgICAgICAgIHNldFdpbmRvd1RleHQo
ZGlhbG9nLCBJRENfUEFHRV9VUkxfTUFQUElOR1MsIGNvdW50KTsKKyAgICBpZiAoU1VDQ0VFREVE
KHdlYkNvcmVTdGF0aXN0aWNzLT5pY29uUmV0YWluZWRQYWdlVVJMQ291bnQoJmNvdW50KSkpCisg
ICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfUkVUQUlORURfUEFHRV9VUkxTLCBjb3Vu
dCk7CisgICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+aWNvblJlY29yZENvdW50
KCZjb3VudCkpKQorICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1NJVEVfSUNPTl9S
RUNPUkRTLCBjb3VudCk7CisgICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+aWNv
bnNXaXRoRGF0YUNvdW50KCZjb3VudCkpKQorICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywg
SURDX1NJVEVfSUNPTlNfV0lUSF9EQVRBLCBjb3VudCk7Cit9CisKK3ZvaWQgV0sxQnJvd3Nlcldp
bmRvdzo6c2V0UHJlZmVyZW5jZShVSU5UIG1lbnVJRCwgYm9vbCBlbmFibGUpCit7CisgICAgaWYg
KCFzdGFuZGFyZFByZWZlcmVuY2VzKCkgfHwgIXByaXZhdGVQcmVmZXJlbmNlcygpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBzd2l0Y2ggKG1lbnVJRCkgeworICAgIGNhc2UgSURNX0FWRk9VTkRB
VElPTjoKKyAgICAgICAgc3RhbmRhcmRQcmVmZXJlbmNlcygpLT5zZXRBVkZvdW5kYXRpb25FbmFi
bGVkKGVuYWJsZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURNX0FDQ19DT01QT1NJVElO
RzoKKyAgICAgICAgcHJpdmF0ZVByZWZlcmVuY2VzKCktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdFbmFibGVkKGVuYWJsZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURNX1dLX0ZVTExT
Q1JFRU46CisgICAgICAgIHByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRGdWxsU2NyZWVuRW5hYmxl
ZChlbmFibGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElETV9DT01QT1NJVElOR19CT1JE
RVJTOgorICAgICAgICBwcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0U2hvd0RlYnVnQm9yZGVycyhl
bmFibGUpOworICAgICAgICBwcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0U2hvd1JlcGFpbnRDb3Vu
dGVyKGVuYWJsZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURNX0RFQlVHX0lORk9fTEFZ
RVI6CisgICAgICAgIHByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRTaG93VGlsZWRTY3JvbGxpbmdJ
bmRpY2F0b3IoZW5hYmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJRE1fSU5WRVJUX0NP
TE9SUzoKKyAgICAgICAgcHJpdmF0ZVByZWZlcmVuY2VzKCktPnNldFNob3VsZEludmVydENvbG9y
cyhlbmFibGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElETV9ESVNBQkxFX0lNQUdFUzoK
KyAgICAgICAgc3RhbmRhcmRQcmVmZXJlbmNlcygpLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2Fs
bHkoIWVuYWJsZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURNX0RJU0FCTEVfU1RZTEVT
OgorICAgICAgICBwcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0QXV0aG9yQW5kVXNlclN0eWxlc0Vu
YWJsZWQoIWVuYWJsZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURNX0RJU0FCTEVfSkFW
QVNDUklQVDoKKyAgICAgICAgc3RhbmRhcmRQcmVmZXJlbmNlcygpLT5zZXRKYXZhU2NyaXB0RW5h
YmxlZCghZW5hYmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJRE1fRElTQUJMRV9MT0NB
TF9GSUxFX1JFU1RSSUNUSU9OUzoKKyAgICAgICAgcHJpdmF0ZVByZWZlcmVuY2VzKCktPnNldEFs
bG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGVuYWJsZSk7CisgICAgICAgIHByaXZhdGVQ
cmVmZXJlbmNlcygpLT5zZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoZW5hYmxlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2lu
L1dLMUJyb3dzZXJXaW5kb3cuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XSzFCcm93c2VyV2lu
ZG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOWQ3NGFiZjI3YmE0NTBkN2FiZjNlMDcwNDcxYTY4YmEzZDQ1NmY1
YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XSzFCcm93c2VyV2lu
ZG93LmgKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisjaW5jbHVkZSAiQnJvd3NlcldpbmRv
dy5oIgorI2luY2x1ZGUgIlBhZ2VMb2FkVGVzdENsaWVudC5oIgorI2luY2x1ZGUgPFdlYktpdExl
Z2FjeS9XZWJLaXQuaD4KKyNpbmNsdWRlIDxjb21pcC5oPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNp
bmNsdWRlIDx2ZWN0b3I+CisKK3R5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYkZyYW1l
LCAmX191dWlkb2YoSVdlYkZyYW1lKT4+IElXZWJGcmFtZVB0cjsKK3R5cGVkZWYgX2NvbV9wdHJf
dDxfY29tX0lJSUQ8SVdlYlZpZXcsICZfX3V1aWRvZihJV2ViVmlldyk+PiBJV2ViVmlld1B0cjsK
K3R5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYlZpZXdQcml2YXRlMiwgJl9fdXVpZG9m
KElXZWJWaWV3UHJpdmF0ZTIpPj4gSVdlYlZpZXdQcml2YXRlUHRyOwordHlwZWRlZiBfY29tX3B0
cl90PF9jb21fSUlJRDxJV2ViRnJhbWVMb2FkRGVsZWdhdGUsICZfX3V1aWRvZihJV2ViRnJhbWVM
b2FkRGVsZWdhdGUpPj4gSVdlYkZyYW1lTG9hZERlbGVnYXRlUHRyOwordHlwZWRlZiBfY29tX3B0
cl90PF9jb21fSUlJRDxJV2ViSGlzdG9yeSwgJl9fdXVpZG9mKElXZWJIaXN0b3J5KT4+IElXZWJI
aXN0b3J5UHRyOwordHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViSGlzdG9yeUl0ZW0s
ICZfX3V1aWRvZihJV2ViSGlzdG9yeUl0ZW0pPj4gSVdlYkhpc3RvcnlJdGVtUHRyOwordHlwZWRl
ZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViUHJlZmVyZW5jZXMsICZfX3V1aWRvZihJV2ViUHJl
ZmVyZW5jZXMpPj4gSVdlYlByZWZlcmVuY2VzUHRyOwordHlwZWRlZiBfY29tX3B0cl90PF9jb21f
SUlJRDxJV2ViUHJlZmVyZW5jZXNQcml2YXRlMywgJl9fdXVpZG9mKElXZWJQcmVmZXJlbmNlc1By
aXZhdGUzKT4+IElXZWJQcmVmZXJlbmNlc1ByaXZhdGVQdHI7Cit0eXBlZGVmIF9jb21fcHRyX3Q8
X2NvbV9JSUlEPElXZWJVSURlbGVnYXRlLCAmX191dWlkb2YoSVdlYlVJRGVsZWdhdGUpPj4gSVdl
YlVJRGVsZWdhdGVQdHI7Cit0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElBY2Nlc3NpYmls
aXR5RGVsZWdhdGUsICZfX3V1aWRvZihJQWNjZXNzaWJpbGl0eURlbGVnYXRlKT4+IElBY2Nlc3Np
YmlsaXR5RGVsZWdhdGVQdHI7Cit0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJJbnNw
ZWN0b3IsICZfX3V1aWRvZihJV2ViSW5zcGVjdG9yKT4+IElXZWJJbnNwZWN0b3JQdHI7Cit0eXBl
ZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJDb3JlU3RhdGlzdGljcywgJl9fdXVpZG9mKElX
ZWJDb3JlU3RhdGlzdGljcyk+PiBJV2ViQ29yZVN0YXRpc3RpY3NQdHI7Cit0eXBlZGVmIF9jb21f
cHRyX3Q8X2NvbV9JSUlEPElXZWJDYWNoZSwgJl9fdXVpZG9mKElXZWJDYWNoZSk+PiBJV2ViQ2Fj
aGVQdHI7Cit0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJSZXNvdXJjZUxvYWREZWxl
Z2F0ZSwgJl9fdXVpZG9mKElXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZSk+PiBJV2ViUmVzb3VyY2VM
b2FkRGVsZWdhdGVQdHI7Cit0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJEb3dubG9h
ZERlbGVnYXRlLCAmX191dWlkb2YoSVdlYkRvd25sb2FkRGVsZWdhdGUpPj4gSVdlYkRvd25sb2Fk
RGVsZWdhdGVQdHI7Cit0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJGcmFtZVByaXZh
dGUsICZfX3V1aWRvZihJV2ViRnJhbWVQcml2YXRlKT4+IElXZWJGcmFtZVByaXZhdGVQdHI7CisK
K2NsYXNzIFdLMUJyb3dzZXJXaW5kb3cgOiBwdWJsaWMgQnJvd3NlcldpbmRvdyB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxCcm93c2VyV2luZG93PiBjcmVhdGUoSFdORCBtYWluV25kLCBIV05E
IHVybEJhclduZCwgYm9vbCB1c2VMYXllcmVkV2ViVmlldyA9IGZhbHNlLCBib29sIHBhZ2VMb2Fk
VGVzdGluZyA9IGZhbHNlKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQWNjZXNzaWJp
bGl0eURlbGVnYXRlOworICAgIGZyaWVuZCBjbGFzcyBNaW5pQnJvd3NlcldlYkhvc3Q7CisgICAg
ZnJpZW5kIGNsYXNzIFByaW50V2ViVUlEZWxlZ2F0ZTsKKyAgICBmcmllbmQgY2xhc3MgV2ViRG93
bmxvYWREZWxlZ2F0ZTsKKyAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VMb2FkRGVsZWdhdGU7Cisg
ICAgZnJpZW5kIGNsYXNzIFBhZ2VMb2FkVGVzdENsaWVudDsKKworICAgIFVMT05HIEFkZFJlZigp
OworICAgIFVMT05HIFJlbGVhc2UoKTsKKworICAgIEhSRVNVTFQgaW5pdCgpOworICAgIEhSRVNV
TFQgcHJlcGFyZVZpZXdzKEhXTkQgbWFpblduZCwgY29uc3QgUkVDVCYgY2xpZW50UmVjdCk7CisK
KyAgICBIUkVTVUxUIGxvYWRIVE1MU3RyaW5nKGNvbnN0IEJTVFImKTsKKyAgICBIUkVTVUxUIGxv
YWRVUkwoY29uc3QgQlNUUiYgcGFzc2VkVVJMKTsKKworICAgIHZvaWQgc2hvd0xhc3RWaXNpdGVk
U2l0ZXMoSVdlYlZpZXcmKTsKKyAgICB2b2lkIGxhdW5jaEluc3BlY3RvcigpOworICAgIHZvaWQg
bmF2aWdhdGVGb3J3YXJkT3JCYWNrd2FyZChVSU5UIG1lbnVJRCk7CisgICAgdm9pZCBuYXZpZ2F0
ZVRvSGlzdG9yeShVSU5UIG1lbnVJRCk7CisgICAgdm9pZCBleGl0UHJvZ3JhbSgpOworICAgIGJv
b2wgc2VlZEluaXRpYWxEZWZhdWx0UHJlZmVyZW5jZXMoKTsKKyAgICBib29sIHNldFRvRGVmYXVs
dFByZWZlcmVuY2VzKCk7CisKKyAgICBIUkVTVUxUIHNldEZyYW1lTG9hZERlbGVnYXRlKElXZWJG
cmFtZUxvYWREZWxlZ2F0ZSopOworICAgIEhSRVNVTFQgc2V0RnJhbWVMb2FkRGVsZWdhdGVQcml2
YXRlKElXZWJGcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUqKTsKKyAgICBIUkVTVUxUIHNldFVJRGVs
ZWdhdGUoSVdlYlVJRGVsZWdhdGUqKTsKKyAgICBIUkVTVUxUIHNldEFjY2Vzc2liaWxpdHlEZWxl
Z2F0ZShJQWNjZXNzaWJpbGl0eURlbGVnYXRlKik7CisgICAgSFJFU1VMVCBzZXRSZXNvdXJjZUxv
YWREZWxlZ2F0ZShJV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGUqKTsKKyAgICBIUkVTVUxUIHNldERv
d25sb2FkRGVsZWdhdGUoSVdlYkRvd25sb2FkRGVsZWdhdGVQdHIpOworCisgICAgSVdlYlByZWZl
cmVuY2VzUHRyIHN0YW5kYXJkUHJlZmVyZW5jZXMoKSB7IHJldHVybiBtX3N0YW5kYXJkUHJlZmVy
ZW5jZXM7ICB9CisgICAgSVdlYlByZWZlcmVuY2VzUHJpdmF0ZVB0ciBwcml2YXRlUHJlZmVyZW5j
ZXMoKSB7IHJldHVybiBtX3ByZWZzUHJpdmF0ZTsgfQorICAgIElXZWJGcmFtZVB0ciBtYWluRnJh
bWUoKTsKKyAgICBJV2ViQ29yZVN0YXRpc3RpY3NQdHIgc3RhdGlzdGljcygpIHsgcmV0dXJuIG1f
c3RhdGlzdGljczsgfQorICAgIElXZWJDYWNoZVB0ciB3ZWJDYWNoZSgpIHsgcmV0dXJuIG1fd2Vi
Q2FjaGU7ICB9CisgICAgSVdlYlZpZXdQdHIgd2ViVmlldygpIHsgcmV0dXJuIG1fd2ViVmlldzsg
fQorCisgICAgYm9vbCBoYXNXZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gISFtX3dlYlZpZXc7IH0K
KyAgICBib29sIHVzZXNMYXllcmVkV2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlTGF5ZXJl
ZFdlYlZpZXc7IH0KKyAgICBib29sIGdvQmFjaygpOworICAgIGJvb2wgZ29Gb3J3YXJkKCk7CisK
KyAgICB2b2lkIHNldFVzZXJBZ2VudChVSU5UIG1lbnVJRCk7CisgICAgdm9pZCBzZXRVc2VyQWdl
bnQoX2JzdHJfdCYgY3VzdG9tVUFTdHJpbmcpOworICAgIF9ic3RyX3QgdXNlckFnZW50KCk7CisK
KyAgICBQYWdlTG9hZFRlc3RDbGllbnQmIHBhZ2VMb2FkVGVzdENsaWVudCgpIHsgcmV0dXJuICpt
X3BhZ2VMb2FkVGVzdENsaWVudDsgfQorCisgICAgdm9pZCByZXNldFpvb20oKTsKKyAgICB2b2lk
IHpvb21JbigpOworICAgIHZvaWQgem9vbU91dCgpOworCisgICAgdm9pZCBzaG93TGF5ZXJUcmVl
KCk7CisKKyAgICBIV05EIGh3bmQoKSB7IHJldHVybiBtX3ZpZXdXbmQ7IH0KKworICAgIHZvaWQg
cHJpbnQoKTsKKyAgICB2b2lkIHVwZGF0ZVN0YXRpc3RpY3MoSFdORCBkaWFsb2cpOworICAgIHZv
aWQgc2V0UHJlZmVyZW5jZShVSU5UIG1lbnVJRCwgYm9vbCBlbmFibGUpOworCisgICAgV0sxQnJv
d3NlcldpbmRvdyhIV05EIG1haW5XbmQsIEhXTkQgdXJsQmFyV25kLCBib29sIHVzZUxheWVyZWRX
ZWJWaWV3LCBib29sIHBhZ2VMb2FkVGVzdGluZyk7CisgICAgdm9pZCBzdWJjbGFzc0ZvckxheWVy
ZWRXaW5kb3coKTsKKyAgICBib29sIHNldENhY2hlRm9sZGVyKCk7CisKKyAgICBzdGQ6OnZlY3Rv
cjxJV2ViSGlzdG9yeUl0ZW1QdHI+IG1faGlzdG9yeUl0ZW1zOworCisgICAgc3RkOjp1bmlxdWVf
cHRyPFBhZ2VMb2FkVGVzdENsaWVudD4gbV9wYWdlTG9hZFRlc3RDbGllbnQ7CisKKyAgICBJV2Vi
Vmlld1B0ciBtX3dlYlZpZXc7CisgICAgSVdlYlZpZXdQcml2YXRlUHRyIG1fd2ViVmlld1ByaXZh
dGU7CisKKyAgICBJV2ViSGlzdG9yeVB0ciBtX3dlYkhpc3Rvcnk7CisgICAgSVdlYkluc3BlY3Rv
clB0ciBtX2luc3BlY3RvcjsKKyAgICBJV2ViUHJlZmVyZW5jZXNQdHIgbV9zdGFuZGFyZFByZWZl
cmVuY2VzOworICAgIElXZWJQcmVmZXJlbmNlc1ByaXZhdGVQdHIgbV9wcmVmc1ByaXZhdGU7CisK
KyAgICBJV2ViRnJhbWVMb2FkRGVsZWdhdGVQdHIgbV9mcmFtZUxvYWREZWxlZ2F0ZTsKKyAgICBJ
V2ViVUlEZWxlZ2F0ZVB0ciBtX3VpRGVsZWdhdGU7CisgICAgSUFjY2Vzc2liaWxpdHlEZWxlZ2F0
ZVB0ciBtX2FjY2Vzc2liaWxpdHlEZWxlZ2F0ZTsKKyAgICBJV2ViUmVzb3VyY2VMb2FkRGVsZWdh
dGVQdHIgbV9yZXNvdXJjZUxvYWREZWxlZ2F0ZTsKKyAgICBJV2ViRG93bmxvYWREZWxlZ2F0ZVB0
ciBtX2Rvd25sb2FkRGVsZWdhdGU7CisKKyAgICBJV2ViQ29yZVN0YXRpc3RpY3NQdHIgbV9zdGF0
aXN0aWNzOworICAgIElXZWJDYWNoZVB0ciBtX3dlYkNhY2hlOworCisgICAgSFdORCBtX2hNYWlu
V25kIHsgbnVsbHB0ciB9OworICAgIEhXTkQgbV9oVVJMQmFyV25kIHsgbnVsbHB0ciB9OworICAg
IEhXTkQgbV92aWV3V25kIHsgbnVsbHB0ciB9OworCisgICAgYm9vbCBtX3VzZUxheWVyZWRXZWJW
aWV3OworfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XZWJEb3dubG9hZERl
bGVnYXRlLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XZWJEb3dubG9hZERlbGVnYXRlLmNw
cAppbmRleCBkMWEwZGZhY2ZlZWM5Y2NhOGNjMjc4ZDkwZmMxMTI3MDVlMjk5YTBjLi41N2E1MzM2
YjFhMjdmMGRjYTc4ZmNhYmVlYjQ2OTk0NjBmNjJmODIyIDEwMDY0NAotLS0gYS9Ub29scy9NaW5p
QnJvd3Nlci93aW4vV2ViRG93bmxvYWREZWxlZ2F0ZS5jcHAKKysrIGIvVG9vbHMvTWluaUJyb3dz
ZXIvd2luL1dlYkRvd25sb2FkRGVsZWdhdGUuY3BwCkBAIC0yOCwxMCArMjgsMTAgQEAKICNpbmNs
dWRlICJzdGRhZnguaCIKICNpbmNsdWRlICJXZWJEb3dubG9hZERlbGVnYXRlLmgiCiAKLSNpbmNs
dWRlICJNaW5pQnJvd3Nlci5oIgorI2luY2x1ZGUgIldLMUJyb3dzZXJXaW5kb3cuaCIKICNpbmNs
dWRlIDxzaGxvYmouaD4KIAotV2ViRG93bmxvYWREZWxlZ2F0ZTo6V2ViRG93bmxvYWREZWxlZ2F0
ZShNaW5pQnJvd3NlciYgY2xpZW50KQorV2ViRG93bmxvYWREZWxlZ2F0ZTo6V2ViRG93bmxvYWRE
ZWxlZ2F0ZShXSzFCcm93c2VyV2luZG93JiBjbGllbnQpCiAgICAgOiBtX2NsaWVudChjbGllbnQp
CiB7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2ViRG93bmxvYWREZWxl
Z2F0ZS5oIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL1dlYkRvd25sb2FkRGVsZWdhdGUuaAppbmRl
eCA3ODdkZDhhOWNlOGFkZWUwNmFiYWY5MzJiMzk1NGQ2NWJkMDA4Y2E3Li5iOWRkYjc5OWNlOWE3
YzEwYzFmNjQ3ODE3MGZlNWQ0NmI4MGM1NzZhIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nl
ci93aW4vV2ViRG93bmxvYWREZWxlZ2F0ZS5oCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9X
ZWJEb3dubG9hZERlbGVnYXRlLmgKQEAgLTI5LDExICsyOSwxMSBAQAogI2luY2x1ZGUgPFdlYktp
dExlZ2FjeS9XZWJLaXQuaD4KICNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvV2ViS2l0Q09NQVBJLmg+
CiAKLWNsYXNzIE1pbmlCcm93c2VyOworY2xhc3MgV0sxQnJvd3NlcldpbmRvdzsKIAogY2xhc3Mg
V2ViRG93bmxvYWREZWxlZ2F0ZSA6IHB1YmxpYyBJV2ViRG93bmxvYWREZWxlZ2F0ZSB7CiBwdWJs
aWM6Ci0gICAgV2ViRG93bmxvYWREZWxlZ2F0ZShNaW5pQnJvd3NlciYgY2xpZW50KTsKKyAgICBX
ZWJEb3dubG9hZERlbGVnYXRlKFdLMUJyb3dzZXJXaW5kb3cmIGNsaWVudCk7CiAgICAgdmlydHVh
bCB+V2ViRG93bmxvYWREZWxlZ2F0ZSgpOwogCiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKF9Jbl8gUkVGSUlEIHJpaWQsIF9DT01fT3V0cHRyXyB2
b2lkKiogcHB2T2JqZWN0KTsKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBkaWRGaW5pc2goX0luX29wdF8gSVdlYkRvd25sb2Fk
Kik7CiAKIHByaXZhdGU6Ci0gICAgTWluaUJyb3dzZXImIG1fY2xpZW50OworICAgIFdLMUJyb3dz
ZXJXaW5kb3cmIG1fY2xpZW50OwogfTsKIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>342248</attachid>
            <date>2018-06-08 03:01:45 -0700</date>
            <delta_ts>2018-06-09 02:11:01 -0700</delta_ts>
            <desc>Patch (WebKitLegacyBrowserWindow)</desc>
            <filename>bug-186427-20180608190143.patch</filename>
            <type>text/plain</type>
            <size>90588</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMyNjE5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjc4NWJiMmQ0MmUwN2ZmOGY1OWZhZjk5NGZlZDViY2Zk
MGEzM2E2Zi4uOTVjNWFlNTBjYzYwZjQ4MmZjNDAyMGVhMGZhNDllNTJmM2E2ZDRiOCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3
IEBACisyMDE4LTA2LTA4ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29t
PgorCisgICAgICAgIFtXaW5dW01pbmlCcm93c2VyXSBNaW5pQnJvd3NlciBjbGFzcyBzaG91bGQg
YmUgcmVuYW1lZCB0byBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODY0MjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9BY2Nlc3Np
YmlsaXR5RGVsZWdhdGUuY3BwOgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9BY2Nlc3NpYmls
aXR5RGVsZWdhdGUuaDoKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZTo6QWNjZXNzaWJp
bGl0eURlbGVnYXRlKToKKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vQ01ha2VMaXN0cy50eHQ6
IFJlbW92ZWQgTWluaUJyb3dzZXIuY3BwLiBBZGRlZCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93
LmNwcC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vQ29tbW9uLmg6CisgICAgICAgICogTWlu
aUJyb3dzZXIvd2luL01haW5XaW5kb3cuY3BwOgorICAgICAgICAoTWFpbldpbmRvdzo6aW5pdCk6
CisgICAgICAgICogTWluaUJyb3dzZXIvd2luL01haW5XaW5kb3cuaDoKKyAgICAgICAgKiBNaW5p
QnJvd3Nlci93aW4vTWluaUJyb3dzZXJXZWJIb3N0LmNwcDoKKyAgICAgICAgKiBNaW5pQnJvd3Nl
ci93aW4vTWluaUJyb3dzZXJXZWJIb3N0Lmg6CisgICAgICAgIChNaW5pQnJvd3NlcldlYkhvc3Q6
Ok1pbmlCcm93c2VyV2ViSG9zdCk6CisgICAgICAgICogTWluaUJyb3dzZXIvd2luL1BhZ2VMb2Fk
VGVzdENsaWVudC5jcHA6CisgICAgICAgIChQYWdlTG9hZFRlc3RDbGllbnQ6OlBhZ2VMb2FkVGVz
dENsaWVudCk6CisgICAgICAgICogTWluaUJyb3dzZXIvd2luL1BhZ2VMb2FkVGVzdENsaWVudC5o
OgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9QcmludFdlYlVJRGVsZWdhdGUuY3BwOgorICAg
ICAgICAoUHJpbnRXZWJVSURlbGVnYXRlOjpjcmVhdGVXZWJWaWV3V2l0aFJlcXVlc3QpOgorICAg
ICAgICAqIE1pbmlCcm93c2VyL3dpbi9QcmludFdlYlVJRGVsZWdhdGUuaDoKKyAgICAgICAgKFBy
aW50V2ViVUlEZWxlZ2F0ZTo6UHJpbnRXZWJVSURlbGVnYXRlKToKKyAgICAgICAgKiBNaW5pQnJv
d3Nlci93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwOgorICAgICAgICAqIE1pbmlCcm93c2Vy
L3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5oOgorICAgICAgICAoUmVzb3VyY2VMb2FkRGVsZWdh
dGU6OlJlc291cmNlTG9hZERlbGVnYXRlKToKKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vV2Vi
S2l0TGVnYWN5QnJvd3NlcldpbmRvdy5jcHA6IFJlbmFtZWQgZnJvbSBUb29scy9NaW5pQnJvd3Nl
ci93aW4vTWluaUJyb3dzZXIuY3BwLgorICAgICAgICAqIE1pbmlCcm93c2VyL3dpbi9XZWJLaXRM
ZWdhY3lCcm93c2VyV2luZG93Lmg6IFJlbmFtZWQgZnJvbSBUb29scy9NaW5pQnJvd3Nlci93aW4v
TWluaUJyb3dzZXIuaC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vV2ViRG93bmxvYWREZWxl
Z2F0ZS5jcHA6CisgICAgICAgIChXZWJEb3dubG9hZERlbGVnYXRlOjpXZWJEb3dubG9hZERlbGVn
YXRlKToKKyAgICAgICAgKiBNaW5pQnJvd3Nlci93aW4vV2ViRG93bmxvYWREZWxlZ2F0ZS5oOgor
CiAyMDE4LTA2LTA3ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAg
ICAgICAgIFtXVEZdIEFkZCBXb3JrZXJQb29sCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nl
ci93aW4vQWNjZXNzaWJpbGl0eURlbGVnYXRlLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9B
Y2Nlc3NpYmlsaXR5RGVsZWdhdGUuY3BwCmluZGV4IGFlNjhiNDI3MmNmODljYzQ2YWQ2NGRiN2Zl
NWZiNGE3ZmUwZjgyNzMuLmRjZDI1MjVkNWFlMjY2OTE0OTE4OTM5MDAzNTlmNThiMDM0OWU4N2Mg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9BY2Nlc3NpYmlsaXR5RGVsZWdhdGUu
Y3BwCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9BY2Nlc3NpYmlsaXR5RGVsZWdhdGUuY3Bw
CkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAic3RkYWZ4LmgiCiAjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eURlbGVnYXRlLmgiCiAKLSNpbmNsdWRlICJNaW5pQnJvd3Nlci5oIgorI2luY2x1ZGUg
IldlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3cuaCIKICNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvV2Vi
S2l0Q09NQVBJLmg+CiAjaW5jbHVkZSA8Y29tbWN0cmwuaD4KICNpbmNsdWRlIDxjb21tZGxnLmg+
CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vQWNjZXNzaWJpbGl0eURlbGVnYXRl
LmggYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQWNjZXNzaWJpbGl0eURlbGVnYXRlLmgKaW5kZXgg
NzhkYjI4NmRiYTNjNTg4Y2VhYzNlYzkyYTE4M2UwN2JiZjU0Y2ViNS4uMWFmMTM0MGVhZDdkMGNm
MTc0ZGMzMmQxNmE1Y2ZjNGYzNDg5YTVkMSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIv
d2luL0FjY2Vzc2liaWxpdHlEZWxlZ2F0ZS5oCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9B
Y2Nlc3NpYmlsaXR5RGVsZWdhdGUuaApAQCAtMjgsMTEgKzI4LDExIEBACiAKICNpbmNsdWRlIDxX
ZWJLaXRMZWdhY3kvV2ViS2l0Lmg+CiAKLWNsYXNzIE1pbmlCcm93c2VyOworY2xhc3MgV2ViS2l0
TGVnYWN5QnJvd3NlcldpbmRvdzsKIAogY2xhc3MgQWNjZXNzaWJpbGl0eURlbGVnYXRlIDogcHVi
bGljIElBY2Nlc3NpYmlsaXR5RGVsZWdhdGUgewogcHVibGljOgotICAgIEFjY2Vzc2liaWxpdHlE
ZWxlZ2F0ZShNaW5pQnJvd3NlciYgY2xpZW50KQorICAgIEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZShX
ZWJLaXRMZWdhY3lCcm93c2VyV2luZG93JiBjbGllbnQpCiAgICAgICAgIDogbV9jbGllbnQoY2xp
ZW50KSB7IH0KICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUXVlcnlJbnRl
cmZhY2UoX0luXyBSRUZJSUQgcmlpZCwgX0NPTV9PdXRwdHJfIHZvaWQqKiBwcHZPYmplY3QpOwog
ICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKCk7CkBAIC00MSw3ICs0
MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZmly
ZUZyYW1lTG9hZFN0YXJ0ZWRFdmVudHMoKTsKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgZmlyZUZyYW1lTG9hZEZpbmlzaGVkRXZlbnRzKCk7CiBwcml2YXRlOgotICAgIE1p
bmlCcm93c2VyJiBtX2NsaWVudDsKKyAgICBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93JiBtX2Ns
aWVudDsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NN
YWtlTGlzdHMudHh0IGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NNYWtlTGlzdHMudHh0CmluZGV4
IDlhNDc4NGQxNjk1YzQwZGY2MmM5YjY4ZWU4NDUzZTNlZTE3NmU2ODIuLjZhODM3NjNkYTMxYzhh
OGUyZDIxMGYyY2VlY2VlNzA5MmNlMmJjNjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2Vy
L3dpbi9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vQ01ha2VMaXN0
cy50eHQKQEAgLTE0LDkgKzE0LDkgQEAgc2V0KE1pbmlCcm93c2VyX1NPVVJDRVMKICAgICBQcmlu
dFdlYlVJRGVsZWdhdGUuY3BwCiAgICAgUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3BwCiAgICAgV2Vi
RG93bmxvYWREZWxlZ2F0ZS5jcHAKLSAgICBNaW5pQnJvd3Nlci5jcHAKICAgICBNaW5pQnJvd3Nl
ckxpYi5yYwogICAgIE1pbmlCcm93c2VyV2ViSG9zdC5jcHAKKyAgICBXZWJLaXRMZWdhY3lCcm93
c2VyV2luZG93LmNwcAogICAgIFdpbk1haW4uY3BwCiAgICAgc3RkYWZ4LmNwcAogKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL0NvbW1vbi5oIGIvVG9vbHMvTWluaUJyb3dzZXIv
d2luL0NvbW1vbi5oCmluZGV4IDRlYTEyNzM4Y2RjNWQyNWE1MWNkNDNiYTI0MjFmODc0OWRhZTk1
MWIuLjk4NWZlNzc0NGMzMGE5N2I2ZGRhZTI4MzllZmY4ZWI5OTU5MDk4M2UgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL01pbmlCcm93c2VyL3dpbi9Db21tb24uaAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93
aW4vQ29tbW9uLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgInN0ZGFmeC5oIgogI2lu
Y2x1ZGUgIk1haW5XaW5kb3cuaCIKLSNpbmNsdWRlICJNaW5pQnJvd3Nlci5oIgorI2luY2x1ZGUg
IldlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3cuaCIKIAogdm9pZCBjb21wdXRlRnVsbERlc2t0b3BG
cmFtZSgpOwogYm9vbCBnZXRBcHBEYXRhRm9sZGVyKF9ic3RyX3QmIGRpcmVjdG9yeSk7CmRpZmYg
LS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWFpbldpbmRvdy5jcHAgYi9Ub29scy9NaW5p
QnJvd3Nlci93aW4vTWFpbldpbmRvdy5jcHAKaW5kZXggNWVkMjNjZjg2ZGYzNjk4ZGFkNTI3YmZl
YzdmMWFmMWZkZGM4ZDQyMy4uZjk5ZGE1ZTk2N2EzZGRjYTVlNWUyYjQyN2MyOTVkOThkMDZhYzU0
OSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL01haW5XaW5kb3cuY3BwCisrKyBi
L1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NYWluV2luZG93LmNwcApAQCAtMTEzLDcgKzExMyw3IEBA
IGJvb2wgTWFpbldpbmRvdzo6aW5pdChISU5TVEFOQ0UgaEluc3RhbmNlLCBib29sIHVzZXNMYXll
cmVkV2ViVmlldywgYm9vbCBwYWdlTG9hCiAgICAgRGVmRWRpdFByb2MgPSByZWludGVycHJldF9j
YXN0PFdORFBST0M+KEdldFdpbmRvd0xvbmdQdHIobV9oVVJMQmFyV25kLCBHV0xQX1dORFBST0Mp
KTsKICAgICBTZXRXaW5kb3dMb25nUHRyKG1faFVSTEJhclduZCwgR1dMUF9XTkRQUk9DLCByZWlu
dGVycHJldF9jYXN0PExPTkdfUFRSPihFZGl0UHJvYykpOwogCi0gICAgbV9icm93c2VyV2luZG93
ID0gTWluaUJyb3dzZXI6OmNyZWF0ZShtX2hNYWluV25kLCBtX2hVUkxCYXJXbmQsIHVzZXNMYXll
cmVkV2ViVmlldywgcGFnZUxvYWRUZXN0aW5nKTsKKyAgICBtX2Jyb3dzZXJXaW5kb3cgPSBXZWJL
aXRMZWdhY3lCcm93c2VyV2luZG93OjpjcmVhdGUobV9oTWFpblduZCwgbV9oVVJMQmFyV25kLCB1
c2VzTGF5ZXJlZFdlYlZpZXcsIHBhZ2VMb2FkVGVzdGluZyk7CiAgICAgaWYgKCFtX2Jyb3dzZXJX
aW5kb3cpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBIUkVTVUxUIGhyID0gbV9icm93c2Vy
V2luZG93LT5pbml0KCk7CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWFpbldp
bmRvdy5oIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL01haW5XaW5kb3cuaAppbmRleCA0NDA0ZDFj
ZGRlZTc1MzgxOWFlOTEzZTE3MjM4Y2FhZGE5YTZhOTAzLi5hMmQzOWJmMzAzZDQwNDNiMTJiMGRh
YTEzNWNjZDVmN2EyMGY1ZDlmIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWFp
bldpbmRvdy5oCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NYWluV2luZG93LmgKQEAgLTI1
LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJNaW5pQnJvd3Nlci5oIgor
I2luY2x1ZGUgIldlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3cuaCIKICNpbmNsdWRlIDxtZW1vcnk+
CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KZGlmZiAtLWdpdCBh
L1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3Nlci5jcHAgYi9Ub29scy9NaW5pQnJvd3Nl
ci93aW4vTWluaUJyb3dzZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTY3
Mjk3N2UwYTZiOTU3NDU2OWU5MjhkMmMwNzE4NmM2MTUwMTI3Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJv
d3Nlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4OTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwOCwgMjAxMy0yMDE1IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgQnJlbnQgRnVsZ2hhbS4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgQXBwY2VsZXJh
dG9yLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQWxl
eCBDaHJpc3RlbnNlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJzdGRhZnguaCIKLSNpbmNsdWRlICJN
aW5pQnJvd3Nlci5oIgotCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eURlbGVnYXRlLmgiCi0jaW5j
bHVkZSAiQ29tbW9uLmgiCi0jaW5jbHVkZSAiRE9NRGVmYXVsdEltcGwuaCIKLSNpbmNsdWRlICJN
aW5pQnJvd3NlckxpYlJlc291cmNlLmgiCi0jaW5jbHVkZSAiTWluaUJyb3dzZXJSZXBsYWNlLmgi
Ci0jaW5jbHVkZSAiTWluaUJyb3dzZXJXZWJIb3N0LmgiCi0jaW5jbHVkZSAiUHJpbnRXZWJVSURl
bGVnYXRlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkRGVsZWdhdGUuaCIKLSNpbmNsdWRlICJX
ZWJEb3dubG9hZERlbGVnYXRlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KLSNpbmNs
dWRlIDxXZWJLaXRMZWdhY3kvV2ViS2l0Q09NQVBJLmg+Ci0jaW5jbHVkZSA8YWxnb3JpdGhtPgot
I2luY2x1ZGUgPGNhc3NlcnQ+Ci0jaW5jbHVkZSA8ZnVuY3Rpb25hbD4KLSNpbmNsdWRlIDxtZW1v
cnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFVTRShDRikKLSNpbmNsdWRlIDxXZWJLaXRMZWdhY3kv
Q0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci1mbG9hdCBkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhIV05EKTsKLX0KLQotc3RhdGljIGNv
bnN0IGludCBtYXhIaXN0b3J5U2l6ZSA9IDEwOwotCi10eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9J
SUlEPElXZWJNdXRhYmxlVVJMUmVxdWVzdCwgJl9fdXVpZG9mKElXZWJNdXRhYmxlVVJMUmVxdWVz
dCk+PiBJV2ViTXV0YWJsZVVSTFJlcXVlc3RQdHI7Ci0KLVJlZjxCcm93c2VyV2luZG93PiBNaW5p
QnJvd3Nlcjo6Y3JlYXRlKEhXTkQgbWFpblduZCwgSFdORCB1cmxCYXJXbmQsIGJvb2wgdXNlTGF5
ZXJlZFdlYlZpZXcsIGJvb2wgcGFnZUxvYWRUZXN0aW5nKQotewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IE1pbmlCcm93c2VyKG1haW5XbmQsIHVybEJhclduZCwgdXNlTGF5ZXJlZFdlYlZpZXcs
IHBhZ2VMb2FkVGVzdGluZykpOwotfQotCi1NaW5pQnJvd3Nlcjo6TWluaUJyb3dzZXIoSFdORCBt
YWluV25kLCBIV05EIHVybEJhclduZCwgYm9vbCB1c2VMYXllcmVkV2ViVmlldywgYm9vbCBwYWdl
TG9hZFRlc3RpbmcpCi0gICAgOiBtX2hNYWluV25kKG1haW5XbmQpCi0gICAgLCBtX2hVUkxCYXJX
bmQodXJsQmFyV25kKQotICAgICwgbV91c2VMYXllcmVkV2ViVmlldyh1c2VMYXllcmVkV2ViVmll
dykKLSAgICAsIG1fcGFnZUxvYWRUZXN0Q2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8UGFnZUxvYWRU
ZXN0Q2xpZW50Pih0aGlzLCBwYWdlTG9hZFRlc3RpbmcpKQotewotfQotCi1VTE9ORyBNaW5pQnJv
d3Nlcjo6QWRkUmVmKCkKLXsKLSAgICByZWYoKTsKLSAgICByZXR1cm4gcmVmQ291bnQoKTsKLX0K
LQotVUxPTkcgTWluaUJyb3dzZXI6OlJlbGVhc2UoKQotewotICAgIGF1dG8gY291bnQgPSByZWZD
b3VudCgpOwotICAgIGRlcmVmKCk7Ci0gICAgcmV0dXJuIC0tY291bnQ7Ci19Ci0KLUhSRVNVTFQg
TWluaUJyb3dzZXI6OmluaXQoKQotewotICAgIEhSRVNVTFQgaHIgPSBXZWJLaXRDcmVhdGVJbnN0
YW5jZShDTFNJRF9XZWJWaWV3LCAwLCBJSURfSVdlYlZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCoqPigmbV93ZWJWaWV3LkdldEludGVyZmFjZVB0cigpKSk7Ci0gICAgaWYgKEZBSUxFRChocikp
Ci0gICAgICAgIHJldHVybiBocjsKLQotICAgIGhyID0gbV93ZWJWaWV3LT5RdWVyeUludGVyZmFj
ZShJSURfSVdlYlZpZXdQcml2YXRlMiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX3dlYlZp
ZXdQcml2YXRlLkdldEludGVyZmFjZVB0cigpKSk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAg
ICAgIHJldHVybiBocjsKLQotICAgIGhyID0gV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2Vi
SGlzdG9yeSwgMCwgX191dWlkb2YobV93ZWJIaXN0b3J5KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kio+KCZtX3dlYkhpc3RvcnkuR2V0SW50ZXJmYWNlUHRyKCkpKTsKLSAgICBpZiAoRkFJTEVEKGhy
KSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgaHIgPSBXZWJLaXRDcmVhdGVJbnN0YW5jZShD
TFNJRF9XZWJDb3JlU3RhdGlzdGljcywgMCwgX191dWlkb2YobV9zdGF0aXN0aWNzKSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KCZtX3N0YXRpc3RpY3MuR2V0SW50ZXJmYWNlUHRyKCkpKTsKLSAg
ICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgaHIgPSBXZWJLaXRD
cmVhdGVJbnN0YW5jZShDTFNJRF9XZWJDYWNoZSwgMCwgX191dWlkb2YobV93ZWJDYWNoZSksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV93ZWJDYWNoZS5HZXRJbnRlcmZhY2VQdHIoKSkpOwot
ICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICBpZiAoIXNlZWRJ
bml0aWFsRGVmYXVsdFByZWZlcmVuY2VzKCkpCi0gICAgICAgIHJldHVybiBFX0ZBSUw7Ci0KLSAg
ICBpZiAoIXNldFRvRGVmYXVsdFByZWZlcmVuY2VzKCkpCi0gICAgICAgIHJldHVybiBFX0ZBSUw7
Ci0KLSAgICBpZiAoIXNldENhY2hlRm9sZGVyKCkpCi0gICAgICAgIHJldHVybiBFX0ZBSUw7Ci0K
LSAgICBhdXRvIHdlYkhvc3QgPSBuZXcgTWluaUJyb3dzZXJXZWJIb3N0KHRoaXMsIG1faFVSTEJh
clduZCk7Ci0KLSAgICBociA9IHNldEZyYW1lTG9hZERlbGVnYXRlKHdlYkhvc3QpOwotICAgIGlm
IChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0KLSAgICBociA9IHNldEZyYW1lTG9h
ZERlbGVnYXRlUHJpdmF0ZSh3ZWJIb3N0KTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAg
cmV0dXJuIGhyOwotCi0gICAgaHIgPSBzZXRVSURlbGVnYXRlKG5ldyBQcmludFdlYlVJRGVsZWdh
dGUoKnRoaXMpKTsKLSAgICBpZiAoRkFJTEVEIChocikpCi0gICAgICAgIHJldHVybiBocjsKLQot
ICAgIGhyID0gc2V0QWNjZXNzaWJpbGl0eURlbGVnYXRlKG5ldyBBY2Nlc3NpYmlsaXR5RGVsZWdh
dGUoKnRoaXMpKTsKLSAgICBpZiAoRkFJTEVEIChocikpCi0gICAgICAgIHJldHVybiBocjsKLQot
ICAgIGhyID0gc2V0UmVzb3VyY2VMb2FkRGVsZWdhdGUobmV3IFJlc291cmNlTG9hZERlbGVnYXRl
KHRoaXMpKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAg
SVdlYkRvd25sb2FkRGVsZWdhdGVQdHIgZG93bmxvYWREZWxlZ2F0ZTsKLSAgICBkb3dubG9hZERl
bGVnYXRlLkF0dGFjaChuZXcgV2ViRG93bmxvYWREZWxlZ2F0ZSgqdGhpcykpOwotICAgIGhyID0g
c2V0RG93bmxvYWREZWxlZ2F0ZShkb3dubG9hZERlbGVnYXRlKTsKLSAgICBpZiAoRkFJTEVEKGhy
KSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgUkVDVCBjbGllbnRSZWN0OwotICAgIDo6R2V0
Q2xpZW50UmVjdChtX2hNYWluV25kLCAmY2xpZW50UmVjdCk7Ci0gICAgaWYgKHVzZXNMYXllcmVk
V2ViVmlldygpKQotICAgICAgICBjbGllbnRSZWN0ID0geyBzX3dpbmRvd1Bvc2l0aW9uLngsIHNf
d2luZG93UG9zaXRpb24ueSwgc193aW5kb3dQb3NpdGlvbi54ICsgc193aW5kb3dTaXplLmN4LCBz
X3dpbmRvd1Bvc2l0aW9uLnkgKyBzX3dpbmRvd1NpemUuY3kgfTsKLQotICAgIGhyID0gcHJlcGFy
ZVZpZXdzKG1faE1haW5XbmQsIGNsaWVudFJlY3QpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAg
ICAgICByZXR1cm4gaHI7Ci0KLSAgICBpZiAodXNlc0xheWVyZWRXZWJWaWV3KCkpCi0gICAgICAg
IHN1YmNsYXNzRm9yTGF5ZXJlZFdpbmRvdygpOwotCi0gICAgcmV0dXJuIGhyOwotfQotCi1ib29s
IE1pbmlCcm93c2VyOjpzZXRDYWNoZUZvbGRlcigpCi17Ci0gICAgX2JzdHJfdCBhcHBEYXRhRm9s
ZGVyOwotICAgIGlmICghZ2V0QXBwRGF0YUZvbGRlcihhcHBEYXRhRm9sZGVyKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgYXBwRGF0YUZvbGRlciArPSBMIlxcY2FjaGUiOwotICAgIHdl
YkNhY2hlKCktPnNldENhY2hlRm9sZGVyKGFwcERhdGFGb2xkZXIpOwotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLUhSRVNVTFQgTWluaUJyb3dzZXI6OnByZXBhcmVWaWV3cyhIV05EIG1haW5XbmQs
IGNvbnN0IFJFQ1QmIGNsaWVudFJlY3QpCi17Ci0gICAgaWYgKCFtX3dlYlZpZXcpCi0gICAgICAg
IHJldHVybiBFX0ZBSUw7Ci0KLSAgICBIUkVTVUxUIGhyID0gbV93ZWJWaWV3LT5zZXRIb3N0V2lu
ZG93KG1haW5XbmQpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0K
LSAgICBociA9IG1fd2ViVmlldy0+aW5pdFdpdGhGcmFtZShjbGllbnRSZWN0LCAwLCAwKTsKLSAg
ICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgaHIgPSBtX3dlYlZp
ZXdQcml2YXRlLT5zZXRUcmFuc3BhcmVudChtX3VzZUxheWVyZWRXZWJWaWV3KTsKLSAgICBpZiAo
RkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgaHIgPSBtX3dlYlZpZXdQcml2
YXRlLT5zZXRVc2VzTGF5ZXJlZFdpbmRvdyhtX3VzZUxheWVyZWRXZWJWaWV3KTsKLSAgICBpZiAo
RkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgaHIgPSBtX3dlYlZpZXdQcml2
YXRlLT52aWV3V2luZG93KCZtX3ZpZXdXbmQpOwotCi0gICAgcmV0dXJuIGhyOwotfQotCi1IUkVT
VUxUIE1pbmlCcm93c2VyOjpsb2FkSFRNTFN0cmluZyhjb25zdCBCU1RSJiBzdHIpCi17Ci0gICAg
SVdlYkZyYW1lUHRyIGZyYW1lOwotICAgIEhSRVNVTFQgaHIgPSBtX3dlYlZpZXctPm1haW5GcmFt
ZSgmZnJhbWUuR2V0SW50ZXJmYWNlUHRyKCkpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAg
ICByZXR1cm4gaHI7Ci0KLSAgICBmcmFtZS0+bG9hZEhUTUxTdHJpbmcoc3RyLCAwKTsKLSAgICBy
ZXR1cm4gaHI7Ci19Ci0KLXN0YXRpYyBXTkRQUk9DIGdEZWZXZWJLaXRQcm9jOwotCi1zdGF0aWMg
TFJFU1VMVCBDQUxMQkFDSyB2aWV3V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BB
UkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKLXsKLSAgICBzd2l0Y2ggKG1lc3NhZ2UpIHsKLSAg
ICBjYXNlIFdNX05DSElUVEVTVDoKLSAgICAgICAgY29uc3RleHByIGludCBkcmFnQmFySGVpZ2h0
ID0gMzA7Ci0gICAgICAgIFJFQ1Qgd2luZG93OwotICAgICAgICA6OkdldFdpbmRvd1JlY3QoaFdu
ZCwgJndpbmRvdyk7Ci0gICAgICAgIC8vIEZvciB0ZXN0aW5nIG91ciB0cmFuc3BhcmVudCB3aW5k
b3csIHdlIG5lZWQgYSByZWdpb24gdG8gdXNlIGFzIGEgaGFuZGxlIGZvcgotICAgICAgICAvLyBk
cmFnZ2luZy4gVGhlIHJpZ2h0IHdheSB0byBkbyB0aGlzIHdvdWxkIGJlIHRvIHF1ZXJ5IHRoZSB3
ZWIgdmlldyB0byBzZWUgd2hhdCdzCi0gICAgICAgIC8vIHVuZGVyIHRoZSBtb3VzZS4gSG93ZXZl
ciwgZm9yIHRlc3RpbmcgcHVycG9zZXMgd2UganVzdCB1c2UgYW4gYXJiaXRyYXJ5Ci0gICAgICAg
IC8vIDMwIGxvZ2ljYWwgcGl4ZWwgYmFuZCBhdCB0aGUgdG9wIG9mIHRoZSB2aWV3IGFzIGFuIGFy
Yml0cmFyeSBncmlwcGluZyBsb2NhdGlvbi4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gV2hlbiB3
ZSBhcmUgd2l0aGluIHRoaXMgYmFkLCByZXR1cm4gSFRfQ0FQVElPTiB0byB0ZWxsIFdpbmRvd3Mg
d2Ugd2FudCB0bwotICAgICAgICAvLyB0cmVhdCB0aGlzIHJlZ2lvbiBhcyBpZiBpdCB3ZXJlIHRo
ZSB0aXRsZSBiYXIgb24gYSBub3JtYWwgd2luZG93LgotICAgICAgICBpbnQgeSA9IEhJV09SRChs
UGFyYW0pOwotICAgICAgICBmbG9hdCBzY2FsZWREcmFnQmFySGVpZ2h0RmFjdG9yID0gZHJhZ0Jh
ckhlaWdodCAqIFdlYkNvcmU6OmRldmljZVNjYWxlRmFjdG9yRm9yV2luZG93KGhXbmQpOwotICAg
ICAgICBpZiAoKHkgPiB3aW5kb3cudG9wKSAmJiAoeSA8IHdpbmRvdy50b3AgKyBzY2FsZWREcmFn
QmFySGVpZ2h0RmFjdG9yKSkKLSAgICAgICAgICAgIHJldHVybiBIVENBUFRJT047Ci0gICAgfQot
ICAgIHJldHVybiBDYWxsV2luZG93UHJvYyhnRGVmV2ViS2l0UHJvYywgaFduZCwgbWVzc2FnZSwg
d1BhcmFtLCBsUGFyYW0pOwotfQotCi12b2lkIE1pbmlCcm93c2VyOjpzdWJjbGFzc0ZvckxheWVy
ZWRXaW5kb3coKQotewotI2lmIGRlZmluZWQgX01fQU1ENjQgfHwgZGVmaW5lZCBfV0lONjQKLSAg
ICBnRGVmV2ViS2l0UHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V05EUFJPQz4oOjpHZXRXaW5kb3dM
b25nUHRyKG1fdmlld1duZCwgR1dMUF9XTkRQUk9DKSk7Ci0gICAgOjpTZXRXaW5kb3dMb25nUHRy
KG1fdmlld1duZCwgR1dMUF9XTkRQUk9DLCByZWludGVycHJldF9jYXN0PExPTkdfUFRSPih2aWV3
V25kUHJvYykpOwotI2Vsc2UKLSAgICBnRGVmV2ViS2l0UHJvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
V05EUFJPQz4oOjpHZXRXaW5kb3dMb25nKG1fdmlld1duZCwgR1dMX1dORFBST0MpKTsKLSAgICA6
OlNldFdpbmRvd0xvbmcobV92aWV3V25kLCBHV0xfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxM
T05HX1BUUj4odmlld1duZFByb2MpKTsKLSNlbmRpZgotfQotCi1IUkVTVUxUIE1pbmlCcm93c2Vy
OjpzZXRGcmFtZUxvYWREZWxlZ2F0ZShJV2ViRnJhbWVMb2FkRGVsZWdhdGUqIGZyYW1lTG9hZERl
bGVnYXRlKQotewotICAgIG1fZnJhbWVMb2FkRGVsZWdhdGUgPSBmcmFtZUxvYWREZWxlZ2F0ZTsK
LSAgICByZXR1cm4gbV93ZWJWaWV3LT5zZXRGcmFtZUxvYWREZWxlZ2F0ZShmcmFtZUxvYWREZWxl
Z2F0ZSk7Ci19Ci0KLUhSRVNVTFQgTWluaUJyb3dzZXI6OnNldEZyYW1lTG9hZERlbGVnYXRlUHJp
dmF0ZShJV2ViRnJhbWVMb2FkRGVsZWdhdGVQcml2YXRlKiBmcmFtZUxvYWREZWxlZ2F0ZVByaXZh
dGUpCi17Ci0gICAgcmV0dXJuIG1fd2ViVmlld1ByaXZhdGUtPnNldEZyYW1lTG9hZERlbGVnYXRl
UHJpdmF0ZShmcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUpOwotfQotCi1IUkVTVUxUIE1pbmlCcm93
c2VyOjpzZXRVSURlbGVnYXRlKElXZWJVSURlbGVnYXRlKiB1aURlbGVnYXRlKQotewotICAgIG1f
dWlEZWxlZ2F0ZSA9IHVpRGVsZWdhdGU7Ci0gICAgcmV0dXJuIG1fd2ViVmlldy0+c2V0VUlEZWxl
Z2F0ZSh1aURlbGVnYXRlKTsKLX0KLQotSFJFU1VMVCBNaW5pQnJvd3Nlcjo6c2V0QWNjZXNzaWJp
bGl0eURlbGVnYXRlKElBY2Nlc3NpYmlsaXR5RGVsZWdhdGUqIGFjY2Vzc2liaWxpdHlEZWxlZ2F0
ZSkKLXsKLSAgICBtX2FjY2Vzc2liaWxpdHlEZWxlZ2F0ZSA9IGFjY2Vzc2liaWxpdHlEZWxlZ2F0
ZTsKLSAgICByZXR1cm4gbV93ZWJWaWV3LT5zZXRBY2Nlc3NpYmlsaXR5RGVsZWdhdGUoYWNjZXNz
aWJpbGl0eURlbGVnYXRlKTsKLX0KLQotSFJFU1VMVCBNaW5pQnJvd3Nlcjo6c2V0UmVzb3VyY2VM
b2FkRGVsZWdhdGUoSVdlYlJlc291cmNlTG9hZERlbGVnYXRlKiByZXNvdXJjZUxvYWREZWxlZ2F0
ZSkKLXsKLSAgICBtX3Jlc291cmNlTG9hZERlbGVnYXRlID0gcmVzb3VyY2VMb2FkRGVsZWdhdGU7
Ci0gICAgcmV0dXJuIG1fd2ViVmlldy0+c2V0UmVzb3VyY2VMb2FkRGVsZWdhdGUocmVzb3VyY2VM
b2FkRGVsZWdhdGUpOwotfQotCi1IUkVTVUxUIE1pbmlCcm93c2VyOjpzZXREb3dubG9hZERlbGVn
YXRlKElXZWJEb3dubG9hZERlbGVnYXRlUHRyIGRvd25sb2FkRGVsZWdhdGUpCi17Ci0gICAgbV9k
b3dubG9hZERlbGVnYXRlID0gZG93bmxvYWREZWxlZ2F0ZTsKLSAgICByZXR1cm4gbV93ZWJWaWV3
LT5zZXREb3dubG9hZERlbGVnYXRlKGRvd25sb2FkRGVsZWdhdGUpOwotfQotCi1JV2ViRnJhbWVQ
dHIgTWluaUJyb3dzZXI6Om1haW5GcmFtZSgpCi17Ci0gICAgSVdlYkZyYW1lUHRyIGZyYW1lUHRy
OwotICAgIG1fd2ViVmlldy0+bWFpbkZyYW1lKCZmcmFtZVB0ci5HZXRJbnRlcmZhY2VQdHIoKSk7
Ci0gICAgcmV0dXJuIGZyYW1lUHRyOwotfQotCi1ib29sIE1pbmlCcm93c2VyOjpzZWVkSW5pdGlh
bERlZmF1bHRQcmVmZXJlbmNlcygpCi17Ci0gICAgSVdlYlByZWZlcmVuY2VzUHRyIHRtcFByZWZl
cmVuY2VzOwotICAgIGlmIChGQUlMRUQoV2ViS2l0Q3JlYXRlSW5zdGFuY2UoQ0xTSURfV2ViUHJl
ZmVyZW5jZXMsIDAsIElJRF9JV2ViUHJlZmVyZW5jZXMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoq
PigmdG1wUHJlZmVyZW5jZXMuR2V0SW50ZXJmYWNlUHRyKCkpKSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmIChGQUlMRUQodG1wUHJlZmVyZW5jZXMtPnN0YW5kYXJkUHJlZmVyZW5j
ZXMoJm1fc3RhbmRhcmRQcmVmZXJlbmNlcy5HZXRJbnRlcmZhY2VQdHIoKSkpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBNaW5pQnJvd3Nlcjo6
c2V0VG9EZWZhdWx0UHJlZmVyZW5jZXMoKQotewotICAgIEhSRVNVTFQgaHIgPSBtX3N0YW5kYXJk
UHJlZmVyZW5jZXMtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fcHJlZnNQcml2YXRlLkdldEludGVyZmFjZVB0cigp
KSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNp
ZiBVU0UoQ0cpCi0gICAgbV9zdGFuZGFyZFByZWZlcmVuY2VzLT5zZXRBVkZvdW5kYXRpb25FbmFi
bGVkKFRSVUUpOwotICAgIG1fcHJlZnNQcml2YXRlLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
RW5hYmxlZChUUlVFKTsKLSNlbmRpZgotCi0gICAgbV9wcmVmc1ByaXZhdGUtPnNldEZ1bGxTY3Jl
ZW5FbmFibGVkKFRSVUUpOwotICAgIG1fcHJlZnNQcml2YXRlLT5zZXRTaG93RGVidWdCb3JkZXJz
KEZBTFNFKTsKLSAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0U2hvd1JlcGFpbnRDb3VudGVyKEZBTFNF
KTsKLSAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0U2hvdWxkSW52ZXJ0Q29sb3JzKEZBTFNFKTsKLQot
ICAgIG1fc3RhbmRhcmRQcmVmZXJlbmNlcy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KFRS
VUUpOwotICAgIG1fcHJlZnNQcml2YXRlLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChU
UlVFKTsKLSAgICBtX3N0YW5kYXJkUHJlZmVyZW5jZXMtPnNldEphdmFTY3JpcHRFbmFibGVkKFRS
VUUpOwotICAgIG1fcHJlZnNQcml2YXRlLT5zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxl
VVJMcyhGQUxTRSk7Ci0gICAgbV9wcmVmc1ByaXZhdGUtPnNldEFsbG93RmlsZUFjY2Vzc0Zyb21G
aWxlVVJMcyhUUlVFKTsKLQotICAgIG1fcHJlZnNQcml2YXRlLT5zZXREZXZlbG9wZXJFeHRyYXNF
bmFibGVkKFRSVUUpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0
ZU1lbnVJdGVtRm9ySGlzdG9yeUl0ZW0oSE1FTlUgbWVudSwgSVdlYkhpc3RvcnlJdGVtJiBoaXN0
b3J5SXRlbSwgaW50IGN1cnJlbnRIaXN0b3J5SXRlbSkKLXsKLSAgICBVSU5UIG1lbnVJRCA9IElE
TV9ISVNUT1JZX0xJTkswICsgY3VycmVudEhpc3RvcnlJdGVtOwotCi0gICAgTUVOVUlURU1JTkZP
IG1lbnVJdGVtSW5mbyA9IHsgMCB9OwotICAgIG1lbnVJdGVtSW5mby5jYlNpemUgPSBzaXplb2Yo
TUVOVUlURU1JTkZPKTsKLSAgICBtZW51SXRlbUluZm8uZk1hc2sgPSBNSUlNX1RZUEU7Ci0gICAg
bWVudUl0ZW1JbmZvLmZUeXBlID0gTUZUX1NUUklORzsKLQotICAgIF9ic3RyX3QgdGl0bGU7Ci0g
ICAgaGlzdG9yeUl0ZW0udGl0bGUodGl0bGUuR2V0QWRkcmVzcygpKTsKLSAgICBtZW51SXRlbUlu
Zm8uZHdUeXBlRGF0YSA9IHN0YXRpY19jYXN0PExQV1NUUj4odGl0bGUpOwotCi0gICAgOjpTZXRN
ZW51SXRlbUluZm8obWVudSwgbWVudUlELCBGQUxTRSwgJm1lbnVJdGVtSW5mbyk7Ci0gICAgOjpF
bmFibGVNZW51SXRlbShtZW51LCBtZW51SUQsIE1GX0JZQ09NTUFORCB8IE1GX0VOQUJMRUQpOwot
fQotCi12b2lkIE1pbmlCcm93c2VyOjpzaG93TGFzdFZpc2l0ZWRTaXRlcyhJV2ViVmlldyYgd2Vi
VmlldykKLXsKLSAgICBITUVOVSBtZW51ID0gOjpHZXRNZW51KG1faE1haW5XbmQpOwotCi0gICAg
X2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYkJhY2tGb3J3YXJkTGlzdCwgJl9fdXVpZG9mKElXZWJC
YWNrRm9yd2FyZExpc3QpPj4gYmFja0ZvcndhcmRMaXN0OwotICAgIEhSRVNVTFQgaHIgPSB3ZWJW
aWV3LmJhY2tGb3J3YXJkTGlzdCgmYmFja0ZvcndhcmRMaXN0LkdldEludGVyZmFjZVB0cigpKTsK
LSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IGNhcGFjaXR5
ID0gMDsKLSAgICBociA9IGJhY2tGb3J3YXJkTGlzdC0+Y2FwYWNpdHkoJmNhcGFjaXR5KTsKLSAg
ICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IGJhY2tDb3VudCA9
IDA7Ci0gICAgaHIgPSBiYWNrRm9yd2FyZExpc3QtPmJhY2tMaXN0Q291bnQoJmJhY2tDb3VudCk7
Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybjsKLQotICAgIFVJTlQgYmFja1Nl
dHRpbmcgPSBNRl9CWUNPTU1BTkQgfCAoKGJhY2tDb3VudCkgPyBNRl9FTkFCTEVEIDogTUZfRElT
QUJMRUQpOwotICAgIDo6RW5hYmxlTWVudUl0ZW0obWVudSwgSURNX0hJU1RPUllfQkFDS1dBUkQs
IGJhY2tTZXR0aW5nKTsKLQotICAgIGludCBmb3J3YXJkQ291bnQgPSAwOwotICAgIGhyID0gYmFj
a0ZvcndhcmRMaXN0LT5mb3J3YXJkTGlzdENvdW50KCZmb3J3YXJkQ291bnQpOwotICAgIGlmIChG
QUlMRUQoaHIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBVSU5UIGZvcndhcmRTZXR0aW5nID0g
TUZfQllDT01NQU5EIHwgKChmb3J3YXJkQ291bnQpID8gTUZfRU5BQkxFRCA6IE1GX0RJU0FCTEVE
KTsKLSAgICA6OkVuYWJsZU1lbnVJdGVtKG1lbnUsIElETV9ISVNUT1JZX0ZPUldBUkQsIGZvcndh
cmRTZXR0aW5nKTsKLQotICAgIElXZWJIaXN0b3J5SXRlbVB0ciBjdXJyZW50SXRlbTsKLSAgICBo
ciA9IGJhY2tGb3J3YXJkTGlzdC0+Y3VycmVudEl0ZW0oJmN1cnJlbnRJdGVtLkdldEludGVyZmFj
ZVB0cigpKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaHIg
PSBtX3dlYkhpc3RvcnktPmFkZEl0ZW1zKDEsICZjdXJyZW50SXRlbS5HZXRJbnRlcmZhY2VQdHIo
KSk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9jb21fcHRy
X3Q8X2NvbV9JSUlEPElXZWJIaXN0b3J5UHJpdmF0ZSwgJl9fdXVpZG9mKElXZWJIaXN0b3J5UHJp
dmF0ZSk+PiB3ZWJIaXN0b3J5OwotICAgIGhyID0gbV93ZWJIaXN0b3J5LT5RdWVyeUludGVyZmFj
ZShJSURfSVdlYkhpc3RvcnlQcml2YXRlLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndlYkhp
c3RvcnkuR2V0SW50ZXJmYWNlUHRyKCkpKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaW50IHRvdGFsTGlzdENvdW50ID0gMDsKLSAgICBociA9IHdlYkhpc3Rv
cnktPmFsbEl0ZW1zKCZ0b3RhbExpc3RDb3VudCwgMCk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1faGlzdG9yeUl0ZW1zLnJlc2l6ZSh0b3RhbExpc3RDb3Vu
dCk7Ci0KLSAgICBzdGQ6OnZlY3RvcjxJV2ViSGlzdG9yeUl0ZW0qPiBoaXN0b3J5VG9Mb2FkKHRv
dGFsTGlzdENvdW50KTsKLSAgICBociA9IHdlYkhpc3RvcnktPmFsbEl0ZW1zKCZ0b3RhbExpc3RD
b3VudCwgaGlzdG9yeVRvTG9hZC5kYXRhKCkpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBzaXplX3QgaSA9IDA7Ci0gICAgZm9yIChhdXRvJiBjdXIgOiBoaXN0
b3J5VG9Mb2FkKSB7Ci0gICAgICAgIG1faGlzdG9yeUl0ZW1zW2ldLkF0dGFjaChjdXIpOwotICAg
ICAgICArK2k7Ci0gICAgfQotCi0gICAgaW50IGFsbEl0ZW1zT2Zmc2V0ID0gMDsKLSAgICBpZiAo
dG90YWxMaXN0Q291bnQgPiBtYXhIaXN0b3J5U2l6ZSkKLSAgICAgICAgYWxsSXRlbXNPZmZzZXQg
PSB0b3RhbExpc3RDb3VudCAtIG1heEhpc3RvcnlTaXplOwotCi0gICAgaW50IGN1cnJlbnRIaXN0
b3J5SXRlbSA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2hpc3RvcnlJdGVtcy5zaXpl
KCkgJiYgKGFsbEl0ZW1zT2Zmc2V0ICsgY3VycmVudEhpc3RvcnlJdGVtKSA8IG1faGlzdG9yeUl0
ZW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHVwZGF0ZU1lbnVJdGVtRm9ySGlzdG9yeUl0ZW0o
bWVudSwgKihtX2hpc3RvcnlJdGVtc1thbGxJdGVtc09mZnNldCArIGN1cnJlbnRIaXN0b3J5SXRl
bV0pLCBjdXJyZW50SGlzdG9yeUl0ZW0pOwotICAgICAgICArK2N1cnJlbnRIaXN0b3J5SXRlbTsK
LSAgICB9Ci0KLSAgICAvLyBIaWRlIGFueSBoaXN0b3J5IHdlIGFyZW4ndCB1c2luZyB5ZXQuCi0g
ICAgZm9yIChpbnQgaSA9IGN1cnJlbnRIaXN0b3J5SXRlbTsgaSA8IG1heEhpc3RvcnlTaXplOyAr
K2kpCi0gICAgICAgIDo6RW5hYmxlTWVudUl0ZW0obWVudSwgSURNX0hJU1RPUllfTElOSzAgKyBp
LCBNRl9CWUNPTU1BTkQgfCBNRl9ESVNBQkxFRCk7Ci19Ci0KLXZvaWQgTWluaUJyb3dzZXI6Omxh
dW5jaEluc3BlY3RvcigpCi17Ci0gICAgaWYgKCFtX3dlYlZpZXdQcml2YXRlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIVNVQ0NFRURFRChtX3dlYlZpZXdQcml2YXRlLT5pbnNwZWN0b3Io
Jm1faW5zcGVjdG9yLkdldEludGVyZmFjZVB0cigpKSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1faW5zcGVjdG9yLT5zaG93KCk7Ci19Ci0KLXZvaWQgTWluaUJyb3dzZXI6Om5hdmlnYXRlRm9y
d2FyZE9yQmFja3dhcmQoVUlOVCBtZW51SUQpCi17Ci0gICAgaWYgKCFtX3dlYlZpZXcpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEJPT0wgd2VudEJhY2tPckZvcndhcmQgPSBGQUxTRTsKLSAgICBp
ZiAoSURNX0hJU1RPUllfRk9SV0FSRCA9PSBtZW51SUQpCi0gICAgICAgIG1fd2ViVmlldy0+Z29G
b3J3YXJkKCZ3ZW50QmFja09yRm9yd2FyZCk7Ci0gICAgZWxzZQotICAgICAgICBtX3dlYlZpZXct
PmdvQmFjaygmd2VudEJhY2tPckZvcndhcmQpOwotfQotCi12b2lkIE1pbmlCcm93c2VyOjpuYXZp
Z2F0ZVRvSGlzdG9yeShVSU5UIG1lbnVJRCkKLXsKLSAgICBpZiAoIW1fd2ViVmlldykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaW50IGhpc3RvcnlFbnRyeSA9IG1lbnVJRCAtIElETV9ISVNUT1JZ
X0xJTkswOwotICAgIGlmIChoaXN0b3J5RW50cnkgPiBtX2hpc3RvcnlJdGVtcy5zaXplKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIElXZWJIaXN0b3J5SXRlbVB0ciBkZXNpcmVkSGlzdG9yeUl0
ZW0gPSBtX2hpc3RvcnlJdGVtc1toaXN0b3J5RW50cnldOwotICAgIGlmICghZGVzaXJlZEhpc3Rv
cnlJdGVtKQotICAgICAgICByZXR1cm47Ci0KLSAgICBCT09MIHN1Y2NlZWRlZCA9IEZBTFNFOwot
ICAgIG1fd2ViVmlldy0+Z29Ub0JhY2tGb3J3YXJkSXRlbShkZXNpcmVkSGlzdG9yeUl0ZW0sICZz
dWNjZWVkZWQpOwotCi0gICAgX2JzdHJfdCBmcmFtZVVSTDsKLSAgICBkZXNpcmVkSGlzdG9yeUl0
ZW0tPlVSTFN0cmluZyhmcmFtZVVSTC5HZXRBZGRyZXNzKCkpOwotCi0gICAgOjpTZW5kTWVzc2Fn
ZShtX2hVUkxCYXJXbmQsIChVSU5UKVdNX1NFVFRFWFQsIDAsIChMUEFSQU0pZnJhbWVVUkwuR2V0
QlNUUigpKTsKLX0KLQotYm9vbCBNaW5pQnJvd3Nlcjo6Z29CYWNrKCkKLXsKLSAgICBCT09MIHdl
bnRCYWNrID0gRkFMU0U7Ci0gICAgbV93ZWJWaWV3LT5nb0JhY2soJndlbnRCYWNrKTsKLSAgICBy
ZXR1cm4gd2VudEJhY2s7Ci19Ci0KLWJvb2wgTWluaUJyb3dzZXI6OmdvRm9yd2FyZCgpCi17Ci0g
ICAgQk9PTCB3ZW50Rm9yd2FyZCA9IEZBTFNFOwotICAgIG1fd2ViVmlldy0+Z29Gb3J3YXJkKCZ3
ZW50Rm9yd2FyZCk7Ci0gICAgcmV0dXJuIHdlbnRGb3J3YXJkOwotfQotCi1IUkVTVUxUIE1pbmlC
cm93c2VyOjpsb2FkVVJMKGNvbnN0IEJTVFImIHBhc3NlZFVSTCkKLXsKLSAgICBpZiAoIXBhc3Nl
ZFVSTCkKLSAgICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKLQotICAgIF9ic3RyX3QgdXJsQlN0
cihwYXNzZWRVUkwpOwotICAgIGlmICghIXVybEJTdHIgJiYgKDo6UGF0aEZpbGVFeGlzdHModXJs
QlN0cikgfHwgOjpQYXRoSXNVTkModXJsQlN0cikpKSB7Ci0gICAgICAgIFRDSEFSIGZpbGVVUkxb
SU5URVJORVRfTUFYX1VSTF9MRU5HVEhdOwotICAgICAgICBEV09SRCBmaWxlVVJMTGVuZ3RoID0g
c2l6ZW9mKGZpbGVVUkwpIC8gc2l6ZW9mKGZpbGVVUkxbMF0pOwotCi0gICAgICAgIGlmIChTVUND
RUVERUQoOjpVcmxDcmVhdGVGcm9tUGF0aCh1cmxCU3RyLCBmaWxlVVJMLCAmZmlsZVVSTExlbmd0
aCwgMCkpKQotICAgICAgICAgICAgdXJsQlN0ciA9IGZpbGVVUkw7Ci0gICAgfQotCi0gICAgSVdl
YkZyYW1lUHRyIGZyYW1lOwotICAgIEhSRVNVTFQgaHIgPSBtX3dlYlZpZXctPm1haW5GcmFtZSgm
ZnJhbWUuR2V0SW50ZXJmYWNlUHRyKCkpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICBy
ZXR1cm4gaHI7Ci0KLSAgICBJV2ViTXV0YWJsZVVSTFJlcXVlc3RQdHIgcmVxdWVzdDsKLSAgICBo
ciA9IFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYk11dGFibGVVUkxSZXF1ZXN0LCAwLCBJ
SURfSVdlYk11dGFibGVVUkxSZXF1ZXN0LCAodm9pZCoqKSZyZXF1ZXN0KTsKLSAgICBpZiAoRkFJ
TEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotCi0gICAgaHIgPSByZXF1ZXN0LT5pbml0V2l0
aFVSTCh3Y3NzdHIoc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KHVybEJTdHIpLCBMIjovLyIpID8gdXJs
QlN0ciA6IF9ic3RyX3QoTCJodHRwOi8vIikgKyB1cmxCU3RyLCBXZWJVUkxSZXF1ZXN0VXNlUHJv
dG9jb2xDYWNoZVBvbGljeSwgNjApOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1
cm4gaHI7Ci0KLSAgICBfYnN0cl90IG1ldGhvZEJTdHIoTCJHRVQiKTsKLSAgICBociA9IHJlcXVl
c3QtPnNldEhUVFBNZXRob2QobWV0aG9kQlN0cik7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAg
ICAgIHJldHVybiBocjsKLQotICAgIGhyID0gZnJhbWUtPmxvYWRSZXF1ZXN0KHJlcXVlc3QpOwot
Ci0gICAgcmV0dXJuIGhyOwotfQotCi12b2lkIE1pbmlCcm93c2VyOjpleGl0UHJvZ3JhbSgpCi17
Ci0gICAgOjpQb3N0TWVzc2FnZShtX2hNYWluV25kLCBzdGF0aWNfY2FzdDxVSU5UPihXTV9DT01N
QU5EKSwgTUFLRUxQQVJBTShJRE1fRVhJVCwgMCksIDApOwotfQotCi12b2lkIE1pbmlCcm93c2Vy
OjpzZXRVc2VyQWdlbnQoVUlOVCBtZW51SUQpCi17Ci0gICAgaWYgKCF3ZWJWaWV3KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIF9ic3RyX3QgY3VzdG9tVXNlckFnZW50OwotICAgIHN3aXRjaCAo
bWVudUlEKSB7Ci0gICAgY2FzZSBJRE1fVUFfREVGQVVMVDoKLSAgICAgICAgLy8gU2V0IHRvIG51
bGwgdXNlciBhZ2VudAotICAgICAgICBicmVhazsKLSAgICBjYXNlIElETV9VQV9TQUZBUklfOF8w
OgotICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChNYWNpbnRvc2g7IElu
dGVsIE1hYyBPUyBYIDEwXzEwKSBBcHBsZVdlYktpdC82MDAuMS4yNSAoS0hUTUwsIGxpa2UgR2Vj
a28pIFZlcnNpb24vOC4wIFNhZmFyaS82MDAuMS4yNSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSURNX1VBX1NBRkFSSV9JT1NfOF9JUEhPTkU6Ci0gICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9
IEwiTW96aWxsYS81LjAgKGlQaG9uZTsgQ1BVIE9TIDhfMSBsaWtlIE1hYyBPUyBYKSBBcHBsZVdl
YktpdC82MDEuMS40IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi84LjAgTW9iaWxlLzEyQjQw
MyBTYWZhcmkvNjAwLjEuNCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURNX1VBX1NBRkFS
SV9JT1NfOF9JUEFEOgotICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChp
UGFkOyBDUFUgT1MgOF8xIGxpa2UgTWFjIE9TIFgpIEFwcGxlV2ViS2l0LzYwMC4xLjQgKEtIVE1M
LCBsaWtlIEdlY2tvKSBWZXJzaW9uLzguMCBNb2JpbGUvMTJCNDAzIFNhZmFyaS82MDAuMS40IjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1fVUFfSUVfMTE6Ci0gICAgICAgIGN1c3RvbVVz
ZXJBZ2VudCA9IEwiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4zOyBXT1c2NDsgVHJpZGVudC83
LjA7IHJ2OjExLjApIGxpa2UgR2Vja28iOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElETV9V
QV9DSFJPTUVfTUFDOgotICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChN
YWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzhfMykgQXBwbGVXZWJLaXQvNTM3LjMxIChLSFRN
TCwgbGlrZSBHZWNrbykgQ2hyb21lLzI2LjAuMTQxMC42NSBTYWZhcmkvNTM3LjMxIjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1fVUFfQ0hST01FX1dJTjoKLSAgICAgICAgY3VzdG9tVXNl
ckFnZW50ID0gTCJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCA2LjI7IFdPVzY0KSBBcHBsZVdlYktp
dC81MzcuMzEgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMjYuMC4xNDEwLjY0IFNhZmFyaS81
MzcuMzEiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElETV9VQV9GSVJFRk9YX01BQzoKLSAg
ICAgICAgY3VzdG9tVXNlckFnZW50ID0gTCJNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBN
YWMgT1MgWCAxMC44OyBydjoyMC4wKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzIwLjAiOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIElETV9VQV9GSVJFRk9YX1dJTjoKLSAgICAgICAgY3VzdG9t
VXNlckFnZW50ID0gTCJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCA2LjI7IFdPVzY0OyBydjoyMC4w
KSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzIwLjAiOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IElETV9VQV9PVEhFUjoKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQoMCk7IC8vIFdlIHNo
b3VsZCBuZXZlciBoaXQgdGhpcyBjYXNlCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBz
ZXRVc2VyQWdlbnQoY3VzdG9tVXNlckFnZW50KTsKLX0KLQotdm9pZCBNaW5pQnJvd3Nlcjo6c2V0
VXNlckFnZW50KF9ic3RyX3QmIGN1c3RvbVVzZXJBZ2VudCkKLXsKLSAgICB3ZWJWaWV3KCktPnNl
dEN1c3RvbVVzZXJBZ2VudChjdXN0b21Vc2VyQWdlbnQuR2V0QlNUUigpKTsKLX0KLQotX2JzdHJf
dCBNaW5pQnJvd3Nlcjo6dXNlckFnZW50KCkKLXsKLSAgICBfYnN0cl90IHVzZXJBZ2VudDsKLSAg
ICBpZiAoRkFJTEVEKHdlYlZpZXcoKS0+Y3VzdG9tVXNlckFnZW50KCZ1c2VyQWdlbnQuR2V0QlNU
UigpKSkpCi0gICAgICAgIHJldHVybiBfYnN0cl90KEwiLSBVbmtub3duIC06IENhbGwgZmFpbGVk
LiIpOwotCi0gICAgcmV0dXJuIHVzZXJBZ2VudDsKLX0KLQotdHlwZWRlZiBfY29tX3B0cl90PF9j
b21fSUlJRDxJV2ViSUJBY3Rpb25zLCAmX191dWlkb2YoSVdlYklCQWN0aW9ucyk+PiBJV2ViSUJB
Y3Rpb25zUHRyOwotCi12b2lkIE1pbmlCcm93c2VyOjpyZXNldFpvb20oKQotewotICAgIElXZWJJ
QkFjdGlvbnNQdHIgd2ViQWN0aW9uczsKLSAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+UXVlcnlJ
bnRlcmZhY2UoSUlEX0lXZWJJQkFjdGlvbnMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd2Vi
QWN0aW9ucy5HZXRJbnRlcmZhY2VQdHIoKSkpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2Vi
QWN0aW9ucy0+cmVzZXRQYWdlWm9vbShudWxscHRyKTsKLX0KLQotdm9pZCBNaW5pQnJvd3Nlcjo6
em9vbUluKCkKLXsKLSAgICBJV2ViSUJBY3Rpb25zUHRyIHdlYkFjdGlvbnM7Ci0gICAgaWYgKEZB
SUxFRChtX3dlYlZpZXctPlF1ZXJ5SW50ZXJmYWNlKElJRF9JV2ViSUJBY3Rpb25zLCByZWludGVy
cHJldF9jYXN0PHZvaWQqKj4oJndlYkFjdGlvbnMuR2V0SW50ZXJmYWNlUHRyKCkpKSkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHdlYkFjdGlvbnMtPnpvb21QYWdlSW4obnVsbHB0cik7Ci19Ci0K
LXZvaWQgTWluaUJyb3dzZXI6Onpvb21PdXQoKQotewotICAgIElXZWJJQkFjdGlvbnNQdHIgd2Vi
QWN0aW9uczsKLSAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+UXVlcnlJbnRlcmZhY2UoSUlEX0lX
ZWJJQkFjdGlvbnMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmd2ViQWN0aW9ucy5HZXRJbnRl
cmZhY2VQdHIoKSkpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2ViQWN0aW9ucy0+em9vbVBh
Z2VPdXQobnVsbHB0cik7Ci19Ci0KLXR5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYlZp
ZXdQcml2YXRlMywgJl9fdXVpZG9mKElXZWJWaWV3UHJpdmF0ZTMpPj4gSVdlYlZpZXdQcml2YXRl
M1B0cjsKLQotdm9pZCBNaW5pQnJvd3Nlcjo6c2hvd0xheWVyVHJlZSgpCi17Ci0gICAgSVdlYlZp
ZXdQcml2YXRlM1B0ciB3ZWJWaWV3UHJpdmF0ZTsKLSAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+
UXVlcnlJbnRlcmZhY2UoSUlEX0lXZWJWaWV3UHJpdmF0ZTMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCoqPigmd2ViVmlld1ByaXZhdGUuR2V0SW50ZXJmYWNlUHRyKCkpKSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIE91dHB1dERlYnVnU3RyaW5nKEwiQ1VSUkVOVCBUUkVFOlxuIik7Ci0KLSAgICBf
YnN0cl90IGxheWVyVHJlZUJzdHI7Ci0gICAgaWYgKEZBSUxFRCh3ZWJWaWV3UHJpdmF0ZS0+bGF5
ZXJUcmVlQXNTdHJpbmcobGF5ZXJUcmVlQnN0ci5HZXRBZGRyZXNzKCkpKSkKLSAgICAgICAgT3V0
cHV0RGVidWdTdHJpbmcoTCIgICAgRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBsYXllciB0cmVlLlxu
Iik7Ci0gICAgZWxzZQotICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZyhsYXllclRyZWVCc3RyKTsK
LSAgICBPdXRwdXREZWJ1Z1N0cmluZyhMIlxuXG4iKTsKLX0KLQotc3RhdGljIEJPT0wgQ0FMTEJB
Q0sgQWJvcnRQcm9jKEhEQyBoREMsIGludCBFcnJvcikKLXsKLSAgICBNU0cgbXNnOwotICAgIHdo
aWxlICg6OlBlZWtNZXNzYWdlKCZtc2csIDAsIDAsIDAsIFBNX1JFTU9WRSkpIHsKLSAgICAgICAg
OjpUcmFuc2xhdGVNZXNzYWdlKCZtc2cpOwotICAgICAgICA6OkRpc3BhdGNoTWVzc2FnZSgmbXNn
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIEhEQyBnZXRQcmludGVy
REMoKQotewotICAgIFBSSU5URExHIHBkbGc7Ci0gICAgbWVtc2V0KCZwZGxnLCAwLCBzaXplb2Yo
UFJJTlRETEcpKTsKLSAgICBwZGxnLmxTdHJ1Y3RTaXplID0gc2l6ZW9mKFBSSU5URExHKTsKLSAg
ICBwZGxnLkZsYWdzID0gUERfUFJJTlRTRVRVUCB8IFBEX1JFVFVSTkRDOwotCi0gICAgOjpQcmlu
dERsZygmcGRsZyk7Ci0KLSAgICByZXR1cm4gcGRsZy5oREM7Ci19Ci0KLXN0YXRpYyB2b2lkIGlu
aXREb2NTdHJ1Y3QoRE9DSU5GTyogZGksIFRDSEFSKiBkb2NuYW1lKQotewotICAgIG1lbXNldChk
aSwgMCwgc2l6ZW9mKERPQ0lORk8pKTsKLSAgICBkaS0+Y2JTaXplID0gc2l6ZW9mKERPQ0lORk8p
OwotICAgIGRpLT5scHN6RG9jTmFtZSA9IGRvY25hbWU7Ci19Ci0KLXZvaWQgTWluaUJyb3dzZXI6
OnByaW50KCkKLXsKLSAgICBIREMgcHJpbnREQyA9IGdldFByaW50ZXJEQygpOwotICAgIGlmICgh
cHJpbnREQykgewotICAgICAgICA6Ok1lc3NhZ2VCb3goMCwgTCJFcnJvciBjcmVhdGluZyBwcmlu
dGluZyBEQyIsIEwiRXJyb3IiLCBNQl9BUFBMTU9EQUwgfCBNQl9PSyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoOjpTZXRBYm9ydFByb2MocHJpbnREQywgQWJvcnRQcm9jKSA9
PSBTUF9FUlJPUikgewotICAgICAgICA6Ok1lc3NhZ2VCb3goMCwgTCJFcnJvciBzZXR0aW5nIHVw
IEFib3J0UHJvYyIsIEwiRXJyb3IiLCBNQl9BUFBMTU9EQUwgfCBNQl9PSyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBJV2ViRnJhbWVQdHIgZnJhbWUgPSBtYWluRnJhbWUoKTsKLSAg
ICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJV2ViRnJhbWVQcml2YXRlUHRy
IGZyYW1lUHJpdmF0ZTsKLSAgICBpZiAoRkFJTEVEKGZyYW1lLT5RdWVyeUludGVyZmFjZSgmZnJh
bWVQcml2YXRlLkdldEludGVyZmFjZVB0cigpKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZy
YW1lUHJpdmF0ZS0+c2V0SW5QcmludGluZ01vZGUoVFJVRSwgcHJpbnREQyk7Ci0KLSAgICBVSU5U
IHBhZ2VDb3VudCA9IDA7Ci0gICAgZnJhbWVQcml2YXRlLT5nZXRQcmludGVkUGFnZUNvdW50KHBy
aW50REMsICZwYWdlQ291bnQpOwotCi0gICAgRE9DSU5GTyBkaTsKLSAgICBpbml0RG9jU3RydWN0
KCZkaSwgTCJXZWJLaXQgRG9jIik7Ci0gICAgOjpTdGFydERvYyhwcmludERDLCAmZGkpOwotCi0g
ICAgLy8gRklYTUU6IE5lZWQgQ29yZUdyYXBoaWNzIGltcGxlbWVudGF0aW9uCi0gICAgdm9pZCog
Z3JhcGhpY3NDb250ZXh0ID0gMDsKLSAgICBmb3IgKHNpemVfdCBwYWdlID0gMTsgcGFnZSA8PSBw
YWdlQ291bnQ7ICsrcGFnZSkgewotICAgICAgICA6OlN0YXJ0UGFnZShwcmludERDKTsKLSAgICAg
ICAgZnJhbWVQcml2YXRlLT5zcG9vbFBhZ2VzKHByaW50REMsIHBhZ2UsIHBhZ2UsIGdyYXBoaWNz
Q29udGV4dCk7Ci0gICAgICAgIDo6RW5kUGFnZShwcmludERDKTsKLSAgICB9Ci0KLSAgICBmcmFt
ZVByaXZhdGUtPnNldEluUHJpbnRpbmdNb2RlKEZBTFNFLCBwcmludERDKTsKLQotICAgIDo6RW5k
RG9jKHByaW50REMpOwotICAgIDo6RGVsZXRlREMocHJpbnREQyk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJTlQgZmllbGQsIF9ic3RyX3QgdmFsdWUpCi17
Ci0gICAgOjpTZXREbGdJdGVtVGV4dChkaWFsb2csIGZpZWxkLCB2YWx1ZSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJTlQgZmllbGQsIFVJTlQgdmFsdWUp
Ci17Ci0gICAgU3RyaW5nIHZhbHVlU3RyID0gV1RGOjpTdHJpbmc6Om51bWJlcih2YWx1ZSk7Ci0K
LSAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgZmllbGQsIF9ic3RyX3QodmFsdWVTdHIudXRmOCgp
LmRhdGEoKSkpOwotfQotCi10eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElQcm9wZXJ0eUJh
ZywgJl9fdXVpZG9mKElQcm9wZXJ0eUJhZyk+PiBJUHJvcGVydHlCYWdQdHI7Ci0KLXN0YXRpYyB2
b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJTlQgZmllbGQsIElQcm9wZXJ0eUJhZ1B0
ciBzdGF0aXN0aWNzLCBjb25zdCBfYnN0cl90JiBrZXkpCi17Ci0gICAgX3ZhcmlhbnRfdCB2YXI7
Ci0gICAgVl9WVCgmdmFyKSA9IFZUX1VJODsKLSAgICBpZiAoRkFJTEVEKHN0YXRpc3RpY3MtPlJl
YWQoa2V5LCAmdmFyLkdldFZBUklBTlQoKSwgbnVsbHB0cikpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgPSBWX1VJOCgmdmFyKTsKLSAgICBTdHJpbmcg
dmFsdWVTdHIgPSBXVEY6OlN0cmluZzo6bnVtYmVyKHZhbHVlKTsKLQotICAgIHNldFdpbmRvd1Rl
eHQoZGlhbG9nLCBmaWVsZCwgX2JzdHJfdCh2YWx1ZVN0ci51dGY4KCkuZGF0YSgpKSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJTlQgZmllbGQsIENGRGlj
dGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBDRlN0cmluZ1JlZiBrZXksIFVJTlQmIHRvdGFsKQotewot
ICAgIENGTnVtYmVyUmVmIGNvdW50TnVtID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGlj
dGlvbmFyeUdldFZhbHVlKGRpY3Rpb25hcnksIGtleSkpOwotICAgIGlmICghY291bnROdW0pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGludCBjb3VudCA9IDA7Ci0gICAgQ0ZOdW1iZXJHZXRWYWx1
ZShjb3VudE51bSwga0NGTnVtYmVySW50VHlwZSwgJmNvdW50KTsKLQotICAgIHNldFdpbmRvd1Rl
eHQoZGlhbG9nLCBmaWVsZCwgc3RhdGljX2Nhc3Q8VUlOVD4oY291bnQpKTsKLSAgICB0b3RhbCAr
PSBjb3VudDsKLX0KLQotdm9pZCBNaW5pQnJvd3Nlcjo6dXBkYXRlU3RhdGlzdGljcyhIV05EIGRp
YWxvZykKLXsKLSAgICBJV2ViQ29yZVN0YXRpc3RpY3NQdHIgd2ViQ29yZVN0YXRpc3RpY3MgPSBz
dGF0aXN0aWNzKCk7Ci0gICAgaWYgKCF3ZWJDb3JlU3RhdGlzdGljcykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgSVByb3BlcnR5QmFnUHRyIHN0YXRpc3RpY3M7Ci0gICAgSFJFU1VMVCBociA9IHdl
YkNvcmVTdGF0aXN0aWNzLT5tZW1vcnlTdGF0aXN0aWNzKCZzdGF0aXN0aWNzLkdldEludGVyZmFj
ZVB0cigpKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
RmFzdE1hbGxvYy4KLSAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1JFU0VSVkVEX1ZNLCBz
dGF0aXN0aWNzLCAiRmFzdE1hbGxvY1Jlc2VydmVkVk1CeXRlcyIpOwotICAgIHNldFdpbmRvd1Rl
eHQoZGlhbG9nLCBJRENfQ09NTUlUVEVEX1ZNLCBzdGF0aXN0aWNzLCAiRmFzdE1hbGxvY0NvbW1p
dHRlZFZNQnl0ZXMiKTsKLSAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0ZSRUVfTElTVF9C
WVRFUywgc3RhdGlzdGljcywgIkZhc3RNYWxsb2NGcmVlTGlzdEJ5dGVzIik7Ci0KLSAgICAvLyBX
ZWJDb3JlIENhY2hlLgotI2lmIFVTRShDRikKLSAgICBJV2ViQ2FjaGVQdHIgd2ViQ2FjaGUgPSB0
aGlzLT53ZWJDYWNoZSgpOwotCi0gICAgaW50IGRpY3RDb3VudCA9IDY7Ci0gICAgSVByb3BlcnR5
QmFnKiBjYWNoZURpY3RbNl0gPSB7IDAgfTsKLSAgICBpZiAoRkFJTEVEKHdlYkNhY2hlLT5zdGF0
aXN0aWNzKCZkaWN0Q291bnQsIGNhY2hlRGljdCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBD
T01QdHI8Q0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWc+IGNvdW50cywgc2l6ZXMsIGxpdmVTaXplcywg
ZGVjb2RlZFNpemVzLCBwdXJnYWJsZVNpemVzOwotICAgIGNvdW50cy5hZG9wdFJlZihyZWludGVy
cHJldF9jYXN0PENGRGljdGlvbmFyeVByb3BlcnR5QmFnKj4oY2FjaGVEaWN0WzBdKSk7Ci0gICAg
c2l6ZXMuYWRvcHRSZWYocmVpbnRlcnByZXRfY2FzdDxDRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZyo+
KGNhY2hlRGljdFsxXSkpOwotICAgIGxpdmVTaXplcy5hZG9wdFJlZihyZWludGVycHJldF9jYXN0
PENGRGljdGlvbmFyeVByb3BlcnR5QmFnKj4oY2FjaGVEaWN0WzJdKSk7Ci0gICAgZGVjb2RlZFNp
emVzLmFkb3B0UmVmKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcqPihj
YWNoZURpY3RbM10pKTsKLSAgICBwdXJnYWJsZVNpemVzLmFkb3B0UmVmKHJlaW50ZXJwcmV0X2Nh
c3Q8Q0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcqPihjYWNoZURpY3RbNF0pKTsKLQotICAgIHN0YXRp
YyBDRlN0cmluZ1JlZiBpbWFnZXNLZXkgPSBDRlNUUigiaW1hZ2VzIik7Ci0gICAgc3RhdGljIENG
U3RyaW5nUmVmIHN0eWxlc2hlZXRzS2V5ID0gQ0ZTVFIoInN0eWxlIHNoZWV0cyIpOwotICAgIHN0
YXRpYyBDRlN0cmluZ1JlZiB4c2xLZXkgPSBDRlNUUigieHNsIik7Ci0gICAgc3RhdGljIENGU3Ry
aW5nUmVmIHNjcmlwdHNLZXkgPSBDRlNUUigic2NyaXB0cyIpOwotCi0gICAgaWYgKGNvdW50cykg
ewotICAgICAgICBVSU5UIHRvdGFsT2JqZWN0cyA9IDA7Ci0gICAgICAgIHNldFdpbmRvd1RleHQo
ZGlhbG9nLCBJRENfSU1BR0VTX09CSkVDVF9DT1VOVCwgY291bnRzLT5kaWN0aW9uYXJ5KCksIGlt
YWdlc0tleSwgdG90YWxPYmplY3RzKTsKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElE
Q19DU1NfT0JKRUNUX0NPVU5ULCBjb3VudHMtPmRpY3Rpb25hcnkoKSwgc3R5bGVzaGVldHNLZXks
IHRvdGFsT2JqZWN0cyk7Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfWFNMX09C
SkVDVF9DT1VOVCwgY291bnRzLT5kaWN0aW9uYXJ5KCksIHhzbEtleSwgdG90YWxPYmplY3RzKTsK
LSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19KU0NfT0JKRUNUX0NPVU5ULCBjb3Vu
dHMtPmRpY3Rpb25hcnkoKSwgc2NyaXB0c0tleSwgdG90YWxPYmplY3RzKTsKLSAgICAgICAgc2V0
V2luZG93VGV4dChkaWFsb2csIElEQ19UT1RBTF9PQkpFQ1RfQ09VTlQsIHRvdGFsT2JqZWN0cyk7
Ci0gICAgfQotCi0gICAgaWYgKHNpemVzKSB7Ci0gICAgICAgIFVJTlQgdG90YWxCeXRlcyA9IDA7
Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSU1BR0VTX0JZVEVTLCBzaXplcy0+
ZGljdGlvbmFyeSgpLCBpbWFnZXNLZXksIHRvdGFsQnl0ZXMpOwotICAgICAgICBzZXRXaW5kb3dU
ZXh0KGRpYWxvZywgSURDX0NTU19CWVRFUywgc2l6ZXMtPmRpY3Rpb25hcnkoKSwgc3R5bGVzaGVl
dHNLZXksIHRvdGFsQnl0ZXMpOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1hT
TF9CWVRFUywgc2l6ZXMtPmRpY3Rpb25hcnkoKSwgeHNsS2V5LCB0b3RhbEJ5dGVzKTsKLSAgICAg
ICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19KU0NfQllURVMsIHNpemVzLT5kaWN0aW9uYXJ5
KCksIHNjcmlwdHNLZXksIHRvdGFsQnl0ZXMpOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxv
ZywgSURDX1RPVEFMX0JZVEVTLCB0b3RhbEJ5dGVzKTsKLSAgICB9Ci0KLSAgICBpZiAobGl2ZVNp
emVzKSB7Ci0gICAgICAgIFVJTlQgdG90YWxMaXZlQnl0ZXMgPSAwOwotICAgICAgICBzZXRXaW5k
b3dUZXh0KGRpYWxvZywgSURDX0lNQUdFU19MSVZFX0NPVU5ULCBsaXZlU2l6ZXMtPmRpY3Rpb25h
cnkoKSwgaW1hZ2VzS2V5LCB0b3RhbExpdmVCeXRlcyk7Ci0gICAgICAgIHNldFdpbmRvd1RleHQo
ZGlhbG9nLCBJRENfQ1NTX0xJVkVfQ09VTlQsIGxpdmVTaXplcy0+ZGljdGlvbmFyeSgpLCBzdHls
ZXNoZWV0c0tleSwgdG90YWxMaXZlQnl0ZXMpOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxv
ZywgSURDX1hTTF9MSVZFX0NPVU5ULCBsaXZlU2l6ZXMtPmRpY3Rpb25hcnkoKSwgeHNsS2V5LCB0
b3RhbExpdmVCeXRlcyk7Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSlNDX0xJ
VkVfQ09VTlQsIGxpdmVTaXplcy0+ZGljdGlvbmFyeSgpLCBzY3JpcHRzS2V5LCB0b3RhbExpdmVC
eXRlcyk7Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfVE9UQUxfTElWRV9DT1VO
VCwgdG90YWxMaXZlQnl0ZXMpOwotICAgIH0KLQotICAgIGlmIChkZWNvZGVkU2l6ZXMpIHsKLSAg
ICAgICAgVUlOVCB0b3RhbERlY29kZWQgPSAwOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxv
ZywgSURDX0lNQUdFU19ERUNPREVEX0NPVU5ULCBkZWNvZGVkU2l6ZXMtPmRpY3Rpb25hcnkoKSwg
aW1hZ2VzS2V5LCB0b3RhbERlY29kZWQpOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywg
SURDX0NTU19ERUNPREVEX0NPVU5ULCBkZWNvZGVkU2l6ZXMtPmRpY3Rpb25hcnkoKSwgc3R5bGVz
aGVldHNLZXksIHRvdGFsRGVjb2RlZCk7Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJ
RENfWFNMX0RFQ09ERURfQ09VTlQsIGRlY29kZWRTaXplcy0+ZGljdGlvbmFyeSgpLCB4c2xLZXks
IHRvdGFsRGVjb2RlZCk7Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSlNDX0RF
Q09ERURfQ09VTlQsIGRlY29kZWRTaXplcy0+ZGljdGlvbmFyeSgpLCBzY3JpcHRzS2V5LCB0b3Rh
bERlY29kZWQpOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1RPVEFMX0RFQ09E
RUQsIHRvdGFsRGVjb2RlZCk7Ci0gICAgfQotCi0gICAgaWYgKHB1cmdhYmxlU2l6ZXMpIHsKLSAg
ICAgICAgVUlOVCB0b3RhbFB1cmdhYmxlID0gMDsKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFs
b2csIElEQ19JTUFHRVNfUFVSR0VBQkxFX0NPVU5ULCBwdXJnYWJsZVNpemVzLT5kaWN0aW9uYXJ5
KCksIGltYWdlc0tleSwgdG90YWxQdXJnYWJsZSk7Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlh
bG9nLCBJRENfQ1NTX1BVUkdFQUJMRV9DT1VOVCwgcHVyZ2FibGVTaXplcy0+ZGljdGlvbmFyeSgp
LCBzdHlsZXNoZWV0c0tleSwgdG90YWxQdXJnYWJsZSk7Ci0gICAgICAgIHNldFdpbmRvd1RleHQo
ZGlhbG9nLCBJRENfWFNMX1BVUkdFQUJMRV9DT1VOVCwgcHVyZ2FibGVTaXplcy0+ZGljdGlvbmFy
eSgpLCB4c2xLZXksIHRvdGFsUHVyZ2FibGUpOwotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxv
ZywgSURDX0pTQ19QVVJHRUFCTEVfQ09VTlQsIHB1cmdhYmxlU2l6ZXMtPmRpY3Rpb25hcnkoKSwg
c2NyaXB0c0tleSwgdG90YWxQdXJnYWJsZSk7Ci0gICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9n
LCBJRENfVE9UQUxfUFVSR0VBQkxFLCB0b3RhbFB1cmdhYmxlKTsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIC8vIEphdmFTY3JpcHQgSGVhcC4KLSAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0pT
Q19IRUFQX1NJWkUsIHN0YXRpc3RpY3MsICJKYXZhU2NyaXB0SGVhcFNpemUiKTsKLSAgICBzZXRX
aW5kb3dUZXh0KGRpYWxvZywgSURDX0pTQ19IRUFQX0ZSRUUsIHN0YXRpc3RpY3MsICJKYXZhU2Ny
aXB0RnJlZVNpemUiKTsKLQotICAgIFVJTlQgY291bnQ7Ci0gICAgaWYgKFNVQ0NFRURFRCh3ZWJD
b3JlU3RhdGlzdGljcy0+amF2YVNjcmlwdE9iamVjdHNDb3VudCgmY291bnQpKSkKLSAgICAgICAg
c2V0V2luZG93VGV4dChkaWFsb2csIElEQ19UT1RBTF9KU0NfSEVBUF9PQkpFQ1RTLCBjb3VudCk7
Ci0gICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+amF2YVNjcmlwdEdsb2JhbE9i
amVjdHNDb3VudCgmY291bnQpKSkKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19H
TE9CQUxfSlNDX0hFQVBfT0JKRUNUUywgY291bnQpOwotICAgIGlmIChTVUNDRUVERUQod2ViQ29y
ZVN0YXRpc3RpY3MtPmphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnQoJmNvdW50KSkpCi0g
ICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfUFJPVEVDVEVEX0pTQ19IRUFQX09CSkVD
VFMsIGNvdW50KTsKLQotICAgIC8vIEZvbnQgYW5kIEdseXBoIENhY2hlcy4KLSAgICBpZiAoU1VD
Q0VFREVEKHdlYkNvcmVTdGF0aXN0aWNzLT5jYWNoZWRGb250RGF0YUNvdW50KCZjb3VudCkpKQot
ICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1RPVEFMX0ZPTlRfT0JKRUNUUywgY291
bnQpOwotICAgIGlmIChTVUNDRUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmNhY2hlZEZvbnREYXRh
SW5hY3RpdmVDb3VudCgmY291bnQpKSkKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElE
Q19JTkFDVElWRV9GT05UX09CSkVDVFMsIGNvdW50KTsKLSAgICBpZiAoU1VDQ0VFREVEKHdlYkNv
cmVTdGF0aXN0aWNzLT5nbHlwaFBhZ2VDb3VudCgmY291bnQpKSkKLSAgICAgICAgc2V0V2luZG93
VGV4dChkaWFsb2csIElEQ19HTFlQSF9QQUdFUywgY291bnQpOwotCi0gICAgLy8gU2l0ZSBJY29u
IERhdGFiYXNlLgotICAgIGlmIChTVUNDRUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmljb25QYWdl
VVJMTWFwcGluZ0NvdW50KCZjb3VudCkpKQotICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywg
SURDX1BBR0VfVVJMX01BUFBJTkdTLCBjb3VudCk7Ci0gICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3Jl
U3RhdGlzdGljcy0+aWNvblJldGFpbmVkUGFnZVVSTENvdW50KCZjb3VudCkpKQotICAgICAgICBz
ZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1JFVEFJTkVEX1BBR0VfVVJMUywgY291bnQpOwotICAg
IGlmIChTVUNDRUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmljb25SZWNvcmRDb3VudCgmY291bnQp
KSkKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19TSVRFX0lDT05fUkVDT1JEUywg
Y291bnQpOwotICAgIGlmIChTVUNDRUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmljb25zV2l0aERh
dGFDb3VudCgmY291bnQpKSkKLSAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19TSVRF
X0lDT05TX1dJVEhfREFUQSwgY291bnQpOwotfQotCi12b2lkIE1pbmlCcm93c2VyOjpzZXRQcmVm
ZXJlbmNlKFVJTlQgbWVudUlELCBib29sIGVuYWJsZSkKLXsKLSAgICBpZiAoIXN0YW5kYXJkUHJl
ZmVyZW5jZXMoKSB8fCAhcHJpdmF0ZVByZWZlcmVuY2VzKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHN3aXRjaCAobWVudUlEKSB7Ci0gICAgY2FzZSBJRE1fQVZGT1VOREFUSU9OOgotICAgICAg
ICBzdGFuZGFyZFByZWZlcmVuY2VzKCktPnNldEFWRm91bmRhdGlvbkVuYWJsZWQoZW5hYmxlKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1fQUNDX0NPTVBPU0lUSU5HOgotICAgICAgICBw
cml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoZW5h
YmxlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1fV0tfRlVMTFNDUkVFTjoKLSAgICAg
ICAgcHJpdmF0ZVByZWZlcmVuY2VzKCktPnNldEZ1bGxTY3JlZW5FbmFibGVkKGVuYWJsZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURNX0NPTVBPU0lUSU5HX0JPUkRFUlM6Ci0gICAgICAg
IHByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRTaG93RGVidWdCb3JkZXJzKGVuYWJsZSk7Ci0gICAg
ICAgIHByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRTaG93UmVwYWludENvdW50ZXIoZW5hYmxlKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1fREVCVUdfSU5GT19MQVlFUjoKLSAgICAgICAg
cHJpdmF0ZVByZWZlcmVuY2VzKCktPnNldFNob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvcihlbmFi
bGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElETV9JTlZFUlRfQ09MT1JTOgotICAgICAg
ICBwcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0U2hvdWxkSW52ZXJ0Q29sb3JzKGVuYWJsZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURNX0RJU0FCTEVfSU1BR0VTOgotICAgICAgICBzdGFu
ZGFyZFByZWZlcmVuY2VzKCktPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSghZW5hYmxlKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1fRElTQUJMRV9TVFlMRVM6Ci0gICAgICAgIHBy
aXZhdGVQcmVmZXJlbmNlcygpLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCghZW5hYmxl
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRE1fRElTQUJMRV9KQVZBU0NSSVBUOgotICAg
ICAgICBzdGFuZGFyZFByZWZlcmVuY2VzKCktPnNldEphdmFTY3JpcHRFbmFibGVkKCFlbmFibGUp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElETV9ESVNBQkxFX0xPQ0FMX0ZJTEVfUkVTVFJJ
Q1RJT05TOgotICAgICAgICBwcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0QWxsb3dVbml2ZXJzYWxB
Y2Nlc3NGcm9tRmlsZVVSTHMoZW5hYmxlKTsKLSAgICAgICAgcHJpdmF0ZVByZWZlcmVuY2VzKCkt
PnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhlbmFibGUpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci19CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXIu
aCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJvd3Nlci5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzNjMzYjI4YTIyMTk5ODlhMTMxMGM2NmJiYjdkOWVhN2QyYzIwMTAxLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL01pbmlC
cm93c2VyL3dpbi9NaW5pQnJvd3Nlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0jaW5jbHVkZSAiQnJvd3NlcldpbmRvdy5oIgotI2luY2x1ZGUgIlBhZ2VMb2Fk
VGVzdENsaWVudC5oIgotI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJLaXQuaD4KLSNpbmNsdWRl
IDxjb21pcC5oPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLXR5cGVk
ZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYkZyYW1lLCAmX191dWlkb2YoSVdlYkZyYW1lKT4+
IElXZWJGcmFtZVB0cjsKLXR5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYlZpZXcsICZf
X3V1aWRvZihJV2ViVmlldyk+PiBJV2ViVmlld1B0cjsKLXR5cGVkZWYgX2NvbV9wdHJfdDxfY29t
X0lJSUQ8SVdlYlZpZXdQcml2YXRlMiwgJl9fdXVpZG9mKElXZWJWaWV3UHJpdmF0ZTIpPj4gSVdl
YlZpZXdQcml2YXRlUHRyOwotdHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViRnJhbWVM
b2FkRGVsZWdhdGUsICZfX3V1aWRvZihJV2ViRnJhbWVMb2FkRGVsZWdhdGUpPj4gSVdlYkZyYW1l
TG9hZERlbGVnYXRlUHRyOwotdHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViSGlzdG9y
eSwgJl9fdXVpZG9mKElXZWJIaXN0b3J5KT4+IElXZWJIaXN0b3J5UHRyOwotdHlwZWRlZiBfY29t
X3B0cl90PF9jb21fSUlJRDxJV2ViSGlzdG9yeUl0ZW0sICZfX3V1aWRvZihJV2ViSGlzdG9yeUl0
ZW0pPj4gSVdlYkhpc3RvcnlJdGVtUHRyOwotdHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJ
V2ViUHJlZmVyZW5jZXMsICZfX3V1aWRvZihJV2ViUHJlZmVyZW5jZXMpPj4gSVdlYlByZWZlcmVu
Y2VzUHRyOwotdHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViUHJlZmVyZW5jZXNQcml2
YXRlMywgJl9fdXVpZG9mKElXZWJQcmVmZXJlbmNlc1ByaXZhdGUzKT4+IElXZWJQcmVmZXJlbmNl
c1ByaXZhdGVQdHI7Ci10eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJVSURlbGVnYXRl
LCAmX191dWlkb2YoSVdlYlVJRGVsZWdhdGUpPj4gSVdlYlVJRGVsZWdhdGVQdHI7Ci10eXBlZGVm
IF9jb21fcHRyX3Q8X2NvbV9JSUlEPElBY2Nlc3NpYmlsaXR5RGVsZWdhdGUsICZfX3V1aWRvZihJ
QWNjZXNzaWJpbGl0eURlbGVnYXRlKT4+IElBY2Nlc3NpYmlsaXR5RGVsZWdhdGVQdHI7Ci10eXBl
ZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJJbnNwZWN0b3IsICZfX3V1aWRvZihJV2ViSW5z
cGVjdG9yKT4+IElXZWJJbnNwZWN0b3JQdHI7Ci10eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlE
PElXZWJDb3JlU3RhdGlzdGljcywgJl9fdXVpZG9mKElXZWJDb3JlU3RhdGlzdGljcyk+PiBJV2Vi
Q29yZVN0YXRpc3RpY3NQdHI7Ci10eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJDYWNo
ZSwgJl9fdXVpZG9mKElXZWJDYWNoZSk+PiBJV2ViQ2FjaGVQdHI7Ci10eXBlZGVmIF9jb21fcHRy
X3Q8X2NvbV9JSUlEPElXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZSwgJl9fdXVpZG9mKElXZWJSZXNv
dXJjZUxvYWREZWxlZ2F0ZSk+PiBJV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGVQdHI7Ci10eXBlZGVm
IF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJEb3dubG9hZERlbGVnYXRlLCAmX191dWlkb2YoSVdl
YkRvd25sb2FkRGVsZWdhdGUpPj4gSVdlYkRvd25sb2FkRGVsZWdhdGVQdHI7Ci10eXBlZGVmIF9j
b21fcHRyX3Q8X2NvbV9JSUlEPElXZWJGcmFtZVByaXZhdGUsICZfX3V1aWRvZihJV2ViRnJhbWVQ
cml2YXRlKT4+IElXZWJGcmFtZVByaXZhdGVQdHI7Ci0KLWNsYXNzIE1pbmlCcm93c2VyIDogcHVi
bGljIEJyb3dzZXJXaW5kb3cgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8QnJvd3NlcldpbmRv
dz4gY3JlYXRlKEhXTkQgbWFpblduZCwgSFdORCB1cmxCYXJXbmQsIGJvb2wgdXNlTGF5ZXJlZFdl
YlZpZXcgPSBmYWxzZSwgYm9vbCBwYWdlTG9hZFRlc3RpbmcgPSBmYWxzZSk7Ci0KLXByaXZhdGU6
Ci0gICAgZnJpZW5kIGNsYXNzIEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZTsKLSAgICBmcmllbmQgY2xh
c3MgTWluaUJyb3dzZXJXZWJIb3N0OwotICAgIGZyaWVuZCBjbGFzcyBQcmludFdlYlVJRGVsZWdh
dGU7Ci0gICAgZnJpZW5kIGNsYXNzIFdlYkRvd25sb2FkRGVsZWdhdGU7Ci0gICAgZnJpZW5kIGNs
YXNzIFJlc291cmNlTG9hZERlbGVnYXRlOwotICAgIGZyaWVuZCBjbGFzcyBQYWdlTG9hZFRlc3RD
bGllbnQ7Ci0KLSAgICBVTE9ORyBBZGRSZWYoKTsKLSAgICBVTE9ORyBSZWxlYXNlKCk7Ci0KLSAg
ICBIUkVTVUxUIGluaXQoKTsKLSAgICBIUkVTVUxUIHByZXBhcmVWaWV3cyhIV05EIG1haW5XbmQs
IGNvbnN0IFJFQ1QmIGNsaWVudFJlY3QpOwotCi0gICAgSFJFU1VMVCBsb2FkSFRNTFN0cmluZyhj
b25zdCBCU1RSJik7Ci0gICAgSFJFU1VMVCBsb2FkVVJMKGNvbnN0IEJTVFImIHBhc3NlZFVSTCk7
Ci0KLSAgICB2b2lkIHNob3dMYXN0VmlzaXRlZFNpdGVzKElXZWJWaWV3Jik7Ci0gICAgdm9pZCBs
YXVuY2hJbnNwZWN0b3IoKTsKLSAgICB2b2lkIG5hdmlnYXRlRm9yd2FyZE9yQmFja3dhcmQoVUlO
VCBtZW51SUQpOwotICAgIHZvaWQgbmF2aWdhdGVUb0hpc3RvcnkoVUlOVCBtZW51SUQpOwotICAg
IHZvaWQgZXhpdFByb2dyYW0oKTsKLSAgICBib29sIHNlZWRJbml0aWFsRGVmYXVsdFByZWZlcmVu
Y2VzKCk7Ci0gICAgYm9vbCBzZXRUb0RlZmF1bHRQcmVmZXJlbmNlcygpOwotCi0gICAgSFJFU1VM
VCBzZXRGcmFtZUxvYWREZWxlZ2F0ZShJV2ViRnJhbWVMb2FkRGVsZWdhdGUqKTsKLSAgICBIUkVT
VUxUIHNldEZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZShJV2ViRnJhbWVMb2FkRGVsZWdhdGVQcml2
YXRlKik7Ci0gICAgSFJFU1VMVCBzZXRVSURlbGVnYXRlKElXZWJVSURlbGVnYXRlKik7Ci0gICAg
SFJFU1VMVCBzZXRBY2Nlc3NpYmlsaXR5RGVsZWdhdGUoSUFjY2Vzc2liaWxpdHlEZWxlZ2F0ZSop
OwotICAgIEhSRVNVTFQgc2V0UmVzb3VyY2VMb2FkRGVsZWdhdGUoSVdlYlJlc291cmNlTG9hZERl
bGVnYXRlKik7Ci0gICAgSFJFU1VMVCBzZXREb3dubG9hZERlbGVnYXRlKElXZWJEb3dubG9hZERl
bGVnYXRlUHRyKTsKLQotICAgIElXZWJQcmVmZXJlbmNlc1B0ciBzdGFuZGFyZFByZWZlcmVuY2Vz
KCkgeyByZXR1cm4gbV9zdGFuZGFyZFByZWZlcmVuY2VzOyAgfQotICAgIElXZWJQcmVmZXJlbmNl
c1ByaXZhdGVQdHIgcHJpdmF0ZVByZWZlcmVuY2VzKCkgeyByZXR1cm4gbV9wcmVmc1ByaXZhdGU7
IH0KLSAgICBJV2ViRnJhbWVQdHIgbWFpbkZyYW1lKCk7Ci0gICAgSVdlYkNvcmVTdGF0aXN0aWNz
UHRyIHN0YXRpc3RpY3MoKSB7IHJldHVybiBtX3N0YXRpc3RpY3M7IH0KLSAgICBJV2ViQ2FjaGVQ
dHIgd2ViQ2FjaGUoKSB7IHJldHVybiBtX3dlYkNhY2hlOyAgfQotICAgIElXZWJWaWV3UHRyIHdl
YlZpZXcoKSB7IHJldHVybiBtX3dlYlZpZXc7IH0KLQotICAgIGJvb2wgaGFzV2ViVmlldygpIGNv
bnN0IHsgcmV0dXJuICEhbV93ZWJWaWV3OyB9Ci0gICAgYm9vbCB1c2VzTGF5ZXJlZFdlYlZpZXco
KSBjb25zdCB7IHJldHVybiBtX3VzZUxheWVyZWRXZWJWaWV3OyB9Ci0gICAgYm9vbCBnb0JhY2so
KTsKLSAgICBib29sIGdvRm9yd2FyZCgpOwotCi0gICAgdm9pZCBzZXRVc2VyQWdlbnQoVUlOVCBt
ZW51SUQpOwotICAgIHZvaWQgc2V0VXNlckFnZW50KF9ic3RyX3QmIGN1c3RvbVVBU3RyaW5nKTsK
LSAgICBfYnN0cl90IHVzZXJBZ2VudCgpOwotCi0gICAgUGFnZUxvYWRUZXN0Q2xpZW50JiBwYWdl
TG9hZFRlc3RDbGllbnQoKSB7IHJldHVybiAqbV9wYWdlTG9hZFRlc3RDbGllbnQ7IH0KLQotICAg
IHZvaWQgcmVzZXRab29tKCk7Ci0gICAgdm9pZCB6b29tSW4oKTsKLSAgICB2b2lkIHpvb21PdXQo
KTsKLQotICAgIHZvaWQgc2hvd0xheWVyVHJlZSgpOwotCi0gICAgSFdORCBod25kKCkgeyByZXR1
cm4gbV92aWV3V25kOyB9Ci0KLSAgICB2b2lkIHByaW50KCk7Ci0gICAgdm9pZCB1cGRhdGVTdGF0
aXN0aWNzKEhXTkQgZGlhbG9nKTsKLSAgICB2b2lkIHNldFByZWZlcmVuY2UoVUlOVCBtZW51SUQs
IGJvb2wgZW5hYmxlKTsKLQotICAgIE1pbmlCcm93c2VyKEhXTkQgbWFpblduZCwgSFdORCB1cmxC
YXJXbmQsIGJvb2wgdXNlTGF5ZXJlZFdlYlZpZXcsIGJvb2wgcGFnZUxvYWRUZXN0aW5nKTsKLSAg
ICB2b2lkIHN1YmNsYXNzRm9yTGF5ZXJlZFdpbmRvdygpOwotICAgIGJvb2wgc2V0Q2FjaGVGb2xk
ZXIoKTsKLQotICAgIHN0ZDo6dmVjdG9yPElXZWJIaXN0b3J5SXRlbVB0cj4gbV9oaXN0b3J5SXRl
bXM7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGFnZUxvYWRUZXN0Q2xpZW50PiBtX3BhZ2VMb2Fk
VGVzdENsaWVudDsKLQotICAgIElXZWJWaWV3UHRyIG1fd2ViVmlldzsKLSAgICBJV2ViVmlld1By
aXZhdGVQdHIgbV93ZWJWaWV3UHJpdmF0ZTsKLQotICAgIElXZWJIaXN0b3J5UHRyIG1fd2ViSGlz
dG9yeTsKLSAgICBJV2ViSW5zcGVjdG9yUHRyIG1faW5zcGVjdG9yOwotICAgIElXZWJQcmVmZXJl
bmNlc1B0ciBtX3N0YW5kYXJkUHJlZmVyZW5jZXM7Ci0gICAgSVdlYlByZWZlcmVuY2VzUHJpdmF0
ZVB0ciBtX3ByZWZzUHJpdmF0ZTsKLQotICAgIElXZWJGcmFtZUxvYWREZWxlZ2F0ZVB0ciBtX2Zy
YW1lTG9hZERlbGVnYXRlOwotICAgIElXZWJVSURlbGVnYXRlUHRyIG1fdWlEZWxlZ2F0ZTsKLSAg
ICBJQWNjZXNzaWJpbGl0eURlbGVnYXRlUHRyIG1fYWNjZXNzaWJpbGl0eURlbGVnYXRlOwotICAg
IElXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZVB0ciBtX3Jlc291cmNlTG9hZERlbGVnYXRlOwotICAg
IElXZWJEb3dubG9hZERlbGVnYXRlUHRyIG1fZG93bmxvYWREZWxlZ2F0ZTsKLQotICAgIElXZWJD
b3JlU3RhdGlzdGljc1B0ciBtX3N0YXRpc3RpY3M7Ci0gICAgSVdlYkNhY2hlUHRyIG1fd2ViQ2Fj
aGU7Ci0KLSAgICBIV05EIG1faE1haW5XbmQgeyBudWxscHRyIH07Ci0gICAgSFdORCBtX2hVUkxC
YXJXbmQgeyBudWxscHRyIH07Ci0gICAgSFdORCBtX3ZpZXdXbmQgeyBudWxscHRyIH07Ci0KLSAg
ICBib29sIG1fdXNlTGF5ZXJlZFdlYlZpZXc7Ci19OwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJy
b3dzZXIvd2luL01pbmlCcm93c2VyV2ViSG9zdC5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4v
TWluaUJyb3dzZXJXZWJIb3N0LmNwcAppbmRleCAyYjc5MTc0NDAwZDk5NWYyM2RmZDRiNDEwNDkx
OTA5YmIzYzY0OGJmLi43ZmU3MzI0Njc0NWVmOWZjM2M3NGE3ZDY0NTA1M2YyYWQ5NDFmN2ViIDEw
MDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXJXZWJIb3N0LmNwcAor
KysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXJXZWJIb3N0LmNwcApAQCAtMzEs
NyArMzEsNyBAQAogCiAjaW5jbHVkZSAiRE9NRGVmYXVsdEltcGwuaCIKICNpbmNsdWRlICJQYWdl
TG9hZFRlc3RDbGllbnQuaCIKLSNpbmNsdWRlICJNaW5pQnJvd3Nlci5oIgorI2luY2x1ZGUgIldl
YktpdExlZ2FjeUJyb3dzZXJXaW5kb3cuaCIKICNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvV2ViS2l0
Lmg+CiAKIGNsYXNzIFNpbXBsZUV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgRE9NRXZlbnRMaXN0ZW5l
ciB7CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXJXZWJIb3N0
LmggYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vTWluaUJyb3dzZXJXZWJIb3N0LmgKaW5kZXggM2Nm
ZWRiYjQ1ZjFkMGE5OGNhZWEzNzQxZWNiNDVjYzIyOWIxYzVmNi4uODBiOTkzNTc2NjY4Y2MwNmI3
YjU2ZTFjODFmZWQ1MDZmZTVjYjE5NSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvd2lu
L01pbmlCcm93c2VyV2ViSG9zdC5oCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9NaW5pQnJv
d3NlcldlYkhvc3QuaApAQCAtMjksMTEgKzI5LDExIEBACiAjaW5jbHVkZSA8V2ViS2l0TGVnYWN5
L1dlYktpdC5oPgogI2luY2x1ZGUgPGNvbXV0aWwuaD4KIAotY2xhc3MgTWluaUJyb3dzZXI7Citj
bGFzcyBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93OwogCiBjbGFzcyBNaW5pQnJvd3NlcldlYkhv
c3QgOiBwdWJsaWMgSVdlYkZyYW1lTG9hZERlbGVnYXRlLCBwdWJsaWMgSVdlYkZyYW1lTG9hZERl
bGVnYXRlUHJpdmF0ZSB7CiBwdWJsaWM6Ci0gICAgTWluaUJyb3dzZXJXZWJIb3N0KE1pbmlCcm93
c2VyKiBjbGllbnQsIEhXTkQgdXJsQmFyKQorICAgIE1pbmlCcm93c2VyV2ViSG9zdChXZWJLaXRM
ZWdhY3lCcm93c2VyV2luZG93KiBjbGllbnQsIEhXTkQgdXJsQmFyKQogICAgICAgICA6IG1fY2xp
ZW50KGNsaWVudCksIG1faFVSTEJhclduZCh1cmxCYXIpIHsgfQogCiAgICAgLy8gSVVua25vd24K
QEAgLTgwLDUgKzgwLDUgQEAgcHJpdmF0ZToKICAgICBIV05EIG1faFVSTEJhclduZCB7IDAgfTsK
ICAgICBIR0RJT0JKIG1fVVJMQmFyRm9udCB7IDAgfTsKICAgICBIR0RJT0JKIG1fb2xkRm9udCB7
IDAgfTsKLSAgICBNaW5pQnJvd3NlciogbV9jbGllbnQgeyBudWxscHRyIH07CisgICAgV2ViS2l0
TGVnYWN5QnJvd3NlcldpbmRvdyogbV9jbGllbnQgeyBudWxscHRyIH07CiB9OwpkaWZmIC0tZ2l0
IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL1BhZ2VMb2FkVGVzdENsaWVudC5jcHAgYi9Ub29scy9N
aW5pQnJvd3Nlci93aW4vUGFnZUxvYWRUZXN0Q2xpZW50LmNwcAppbmRleCA5NThiYTAyYmFkYTU2
MWYxOTBmZmUzMzUwMWE2MDhmNjk0NGE3OWRmLi4zMTk0MzMyNGQ4ZGE2MGUzZWQ4MmY0OTg4NzI4
MzZiNjlhZWIyMjc3IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vUGFnZUxvYWRU
ZXN0Q2xpZW50LmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vUGFnZUxvYWRUZXN0Q2xp
ZW50LmNwcApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgInN0ZGFmeC5oIgogI2luY2x1ZGUg
IlBhZ2VMb2FkVGVzdENsaWVudC5oIgogCi0jaW5jbHVkZSAiTWluaUJyb3dzZXIuaCIKKyNpbmNs
dWRlICJXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0
Zm9ybUV4cG9ydE1hY3Jvcy5oPgogI2luY2x1ZGUgPGNtYXRoPgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CkBAIC0zNSw3ICszNSw3IEBACiAKIHN0YXRpYyBjb25zdCBDRlRpbWVJbnRlcnZh
bCB3YWl0Rm9yTmV3UmVzb3VyY2VMb2FkRHVyYXRpb24gPSAwLjE7CiAKLVBhZ2VMb2FkVGVzdENs
aWVudDo6UGFnZUxvYWRUZXN0Q2xpZW50KE1pbmlCcm93c2VyKiBob3N0LCBib29sIHBhZ2VMb2Fk
VGVzdGluZykKK1BhZ2VMb2FkVGVzdENsaWVudDo6UGFnZUxvYWRUZXN0Q2xpZW50KFdlYktpdExl
Z2FjeUJyb3dzZXJXaW5kb3cqIGhvc3QsIGJvb2wgcGFnZUxvYWRUZXN0aW5nKQogICAgIDogbV9o
b3N0KGhvc3QpCiAgICAgLCBtX3JlcGV0aXRpb25zKHBhZ2VMb2FkVGVzdGluZyA/IDIwIDogMSkK
ICAgICAsIG1fd2FpdEZvckxvYWRUb1JlYWxseUVuZCh0aGlzLCAmUGFnZUxvYWRUZXN0Q2xpZW50
OjplbmRQYWdlTG9hZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9QYWdlTG9h
ZFRlc3RDbGllbnQuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9QYWdlTG9hZFRlc3RDbGllbnQu
aAppbmRleCBhMDQ0YjIwNzE2NTgyODVjMTY5YTQ0NzBiM2Y3ZGJiYWZlM2NlZDY5Li4wZGYwYWE4
YWE5OWQ0MDkxMzA1ZDMxYjMwZWRjMjA0MmUwY2UxYjZiIDEwMDY0NAotLS0gYS9Ub29scy9NaW5p
QnJvd3Nlci93aW4vUGFnZUxvYWRUZXN0Q2xpZW50LmgKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIv
d2luL1BhZ2VMb2FkVGVzdENsaWVudC5oCkBAIC0xMDEsMTIgKzEwMSwxMiBAQCBwcml2YXRlOgog
ICAgIFJldGFpblB0cjxDRlJ1bkxvb3BUaW1lclJlZj4gbV90aW1lcjsKIH07CiAKLWNsYXNzIE1p
bmlCcm93c2VyOworY2xhc3MgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzsKIAogY2xhc3MgUGFn
ZUxvYWRUZXN0Q2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlTG9hZFRlc3RD
bGllbnQpOwogcHVibGljOgotICAgIFBhZ2VMb2FkVGVzdENsaWVudChNaW5pQnJvd3NlciogaG9z
dCwgYm9vbCBwYWdlTG9hZFRlc3RpbmcgPSBmYWxzZSk7CisgICAgUGFnZUxvYWRUZXN0Q2xpZW50
KFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3cqIGhvc3QsIGJvb2wgcGFnZUxvYWRUZXN0aW5nID0g
ZmFsc2UpOwogCiAjaWYgT1MoV0lORE9XUykKICAgICB2b2lkIHNldFBhZ2VVUkwoY29uc3QgX2Jz
dHJfdCYpOwpAQCAtMTMxLDcgKzEzMSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBh
Z2VMb2FkRW5kZWRBdFRpbWUoQ0ZBYnNvbHV0ZVRpbWUpOwogICAgIHZvaWQgZHVtcFJ1blN0YXRp
c3RpY3MoKTsKIAotICAgIE1pbmlCcm93c2VyKiBtX2hvc3Q7CisgICAgV2ViS2l0TGVnYWN5QnJv
d3NlcldpbmRvdyogbV9ob3N0OwogICAgIENGQWJzb2x1dGVUaW1lIG1fcGFnZUxvYWRFbmRUaW1l
IHsgMCB9OwogICAgIENGVGltZUludGVydmFsIG1fdG90YWxUaW1lIHsgMCB9OwogICAgIENGVGlt
ZUludGVydmFsIG1fdG90YWxTcXVhcmVSb290c09mVGltZSB7IDAgfTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL01pbmlCcm93c2VyL3dpbi9QcmludFdlYlVJRGVsZWdhdGUuY3BwIGIvVG9vbHMvTWluaUJy
b3dzZXIvd2luL1ByaW50V2ViVUlEZWxlZ2F0ZS5jcHAKaW5kZXggZjRkYjRkMjQ3YTQ4ZGNlY2Vj
NmJjOWRhNWQyYmFmYWNjOTBiNGY2Zi4uMzQ0ZDM1ZDI0YmMwZTFjMTQzYjQ1MDJjMGE5ZjRkMmM2
YTVjMmZmMCAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL1ByaW50V2ViVUlEZWxl
Z2F0ZS5jcHAKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL1ByaW50V2ViVUlEZWxlZ2F0ZS5j
cHAKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkNvbW1vbi5oIgogI2luY2x1ZGUgIk1h
aW5XaW5kb3cuaCIKLSNpbmNsdWRlICJNaW5pQnJvd3Nlci5oIgorI2luY2x1ZGUgIldlYktpdExl
Z2FjeUJyb3dzZXJXaW5kb3cuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgogI2luY2x1
ZGUgPFdlYktpdExlZ2FjeS9XZWJLaXRDT01BUEkuaD4KICNpbmNsdWRlIDxjb21pcC5oPgpAQCAt
NzEsNyArNzEsNyBAQCBIUkVTVUxUIFByaW50V2ViVUlEZWxlZ2F0ZTo6Y3JlYXRlV2ViVmlld1dp
dGhSZXF1ZXN0KF9Jbl9vcHRfIElXZWJWaWV3KiwgX0luX29wdAogICAgICAgICByZXR1cm4gRV9G
QUlMOwogICAgIFNob3dXaW5kb3cobmV3V2luZG93Lmh3bmQoKSwgU1dfU0hPVyk7CiAKLSAgICBh
dXRvJiBuZXdCcm93c2VyV2luZG93ID0gKnN0YXRpY19jYXN0PE1pbmlCcm93c2VyKj4obmV3V2lu
ZG93LmJyb3dzZXJXaW5kb3coKSk7CisgICAgYXV0byYgbmV3QnJvd3NlcldpbmRvdyA9ICpzdGF0
aWNfY2FzdDxXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93Kj4obmV3V2luZG93LmJyb3dzZXJXaW5k
b3coKSk7CiAgICAgKm5ld1dlYlZpZXcgPSBuZXdCcm93c2VyV2luZG93LndlYlZpZXcoKTsKICAg
ICBJV2ViRnJhbWVQdHIgZnJhbWU7CiAgICAgSFJFU1VMVCBocjsKZGlmZiAtLWdpdCBhL1Rvb2xz
L01pbmlCcm93c2VyL3dpbi9QcmludFdlYlVJRGVsZWdhdGUuaCBiL1Rvb2xzL01pbmlCcm93c2Vy
L3dpbi9QcmludFdlYlVJRGVsZWdhdGUuaAppbmRleCAwOTdlMTM5YWRkZDhmNGVlNWNkN2M2YmIz
NGRmMTRkNzgxYWE0NDhiLi4zMGMyOGQwMDU0ODc0NWI0NjgyMjg4NGI0NTNiMGNkMDMwOWMyNzYz
IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vUHJpbnRXZWJVSURlbGVnYXRlLmgK
KysrIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL1ByaW50V2ViVUlEZWxlZ2F0ZS5oCkBAIC0yOSwx
MSArMjksMTEgQEAKIAogI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJLaXQuaD4KIAotY2xhc3Mg
TWluaUJyb3dzZXI7CitjbGFzcyBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93OwogCiBjbGFzcyBQ
cmludFdlYlVJRGVsZWdhdGUgOiBwdWJsaWMgSVdlYlVJRGVsZWdhdGUgewogcHVibGljOgotICAg
IFByaW50V2ViVUlEZWxlZ2F0ZShNaW5pQnJvd3NlciYgY2xpZW50KQorICAgIFByaW50V2ViVUlE
ZWxlZ2F0ZShXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93JiBjbGllbnQpCiAgICAgICAgIDogbV9j
bGllbnQoY2xpZW50KSB7IH0KIAogICAgIC8vIElVbmtub3duCkBAIC0xMDYsNyArMTA2LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBwYWludEN1c3Rv
bVNjcm9sbENvcm5lcihfSW5fb3B0XyBJV2ViVmlldyosIF9Jbl8gSERDLCBSRUNUKSB7IHJldHVy
biBFX05PVElNUEw7IH0KIAogcHJpdmF0ZToKLSAgICBNaW5pQnJvd3NlciYgbV9jbGllbnQ7Cisg
ICAgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdyYgbV9jbGllbnQ7CiAgICAgSFdORCBtX21vZGFs
RGlhbG9nUGFyZW50IHsgbnVsbHB0ciB9OwogfTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJy
b3dzZXIvd2luL1Jlc291cmNlTG9hZERlbGVnYXRlLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3dp
bi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5jcHAKaW5kZXggYTFkMTNjZTA5ZTM1MzU4ZjZmNDI2NmNh
YWQ0M2M5ZDA5YTkyMjIxZS4uM2ZjNmUxZjI4ZjBiMjhjNzNiMGU1NzU2N2YxNjEwMzMzMWUzYjNi
ZCAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL1Jlc291cmNlTG9hZERlbGVnYXRl
LmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuY3Bw
CkBAIC0yNiw4ICsyNiw4IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkRGVsZWdhdGUuaCIKIAog
I2luY2x1ZGUgIkNvbW1vbi5oIgotI2luY2x1ZGUgIk1pbmlCcm93c2VyLmgiCiAjaW5jbHVkZSAi
UGFnZUxvYWRUZXN0Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRv
dy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ09NUHRyLmg+CiAjaW5jbHVkZSA8V2ViS2l0TGVnYWN5
L1dlYktpdENPTUFQSS5oPgogI2luY2x1ZGUgPGNvbWlwLmg+CmRpZmYgLS1naXQgYS9Ub29scy9N
aW5pQnJvd3Nlci93aW4vUmVzb3VyY2VMb2FkRGVsZWdhdGUuaCBiL1Rvb2xzL01pbmlCcm93c2Vy
L3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5oCmluZGV4IDNmMDdmNmEwODBhNzVhMjU2MDIwZjQw
ZGE0YTI1NmMxZDM3Y2Q3OWUuLjk3NjRmNzc5NTE0MzcwMWQ4OTEzNzljNGMyM2VjOGNmMDJmZTlm
ZGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0
ZS5oCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9SZXNvdXJjZUxvYWREZWxlZ2F0ZS5oCkBA
IC0yOCwxMSArMjgsMTEgQEAKIAogI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJLaXQuaD4KIAot
Y2xhc3MgTWluaUJyb3dzZXI7CitjbGFzcyBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93OwogCiBj
bGFzcyBSZXNvdXJjZUxvYWREZWxlZ2F0ZSA6IHB1YmxpYyBJV2ViUmVzb3VyY2VMb2FkRGVsZWdh
dGUgewogcHVibGljOgotICAgIFJlc291cmNlTG9hZERlbGVnYXRlKE1pbmlCcm93c2VyKiBjbGll
bnQpCisgICAgUmVzb3VyY2VMb2FkRGVsZWdhdGUoV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdyog
Y2xpZW50KQogICAgICAgICA6IG1fY2xpZW50KGNsaWVudCkgeyB9CiAKICAgICAvLyBJVW5rbm93
bgpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIHBsdWdJbkZhaWxlZFdpdGhFcnJvcihfSW5fb3B0XyBJV2ViVmlldyosIF9Jbl9v
cHRfIElXZWJFcnJvciosIF9Jbl9vcHRfIElXZWJEYXRhU291cmNlKik7CiAKIHByaXZhdGU6Ci0g
ICAgTWluaUJyb3dzZXIqIG1fY2xpZW50OworICAgIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3cq
IG1fY2xpZW50OwogfTsKIAogI2VuZGlmIC8vIFJlc291cmNlTG9hZERlbGVnYXRlCmRpZmYgLS1n
aXQgYS9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2ViRG93bmxvYWREZWxlZ2F0ZS5jcHAgYi9Ub29s
cy9NaW5pQnJvd3Nlci93aW4vV2ViRG93bmxvYWREZWxlZ2F0ZS5jcHAKaW5kZXggZDFhMGRmYWNm
ZWVjOWNjYThjYzI3OGQ5MGZjMTEyNzA1ZTI5OWEwYy4uMjcyYThlODExY2QwYzkxM2Y5ODc5ZDgw
ODVhNjUzYmIwZjM2ZWY1YyAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL1dlYkRv
d25sb2FkRGVsZWdhdGUuY3BwCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XZWJEb3dubG9h
ZERlbGVnYXRlLmNwcApAQCAtMjgsMTAgKzI4LDEwIEBACiAjaW5jbHVkZSAic3RkYWZ4LmgiCiAj
aW5jbHVkZSAiV2ViRG93bmxvYWREZWxlZ2F0ZS5oIgogCi0jaW5jbHVkZSAiTWluaUJyb3dzZXIu
aCIKKyNpbmNsdWRlICJXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93LmgiCiAjaW5jbHVkZSA8c2hs
b2JqLmg+CiAKLVdlYkRvd25sb2FkRGVsZWdhdGU6OldlYkRvd25sb2FkRGVsZWdhdGUoTWluaUJy
b3dzZXImIGNsaWVudCkKK1dlYkRvd25sb2FkRGVsZWdhdGU6OldlYkRvd25sb2FkRGVsZWdhdGUo
V2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdyYgY2xpZW50KQogICAgIDogbV9jbGllbnQoY2xpZW50
KQogewogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL1dlYkRvd25sb2FkRGVs
ZWdhdGUuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XZWJEb3dubG9hZERlbGVnYXRlLmgKaW5k
ZXggNzg3ZGQ4YTljZThhZGVlMDZhYmFmOTMyYjM5NTRkNjViZDAwOGNhNy4uNjlkZmIwNzQ0NjI4
ZWIyMWU4NGE4YWJhOWE1NmMyNjgxMTIyNDU2OSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dz
ZXIvd2luL1dlYkRvd25sb2FkRGVsZWdhdGUuaAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4v
V2ViRG93bmxvYWREZWxlZ2F0ZS5oCkBAIC0yOSwxMSArMjksMTEgQEAKICNpbmNsdWRlIDxXZWJL
aXRMZWdhY3kvV2ViS2l0Lmg+CiAjaW5jbHVkZSA8V2ViS2l0TGVnYWN5L1dlYktpdENPTUFQSS5o
PgogCi1jbGFzcyBNaW5pQnJvd3NlcjsKK2NsYXNzIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c7
CiAKIGNsYXNzIFdlYkRvd25sb2FkRGVsZWdhdGUgOiBwdWJsaWMgSVdlYkRvd25sb2FkRGVsZWdh
dGUgewogcHVibGljOgotICAgIFdlYkRvd25sb2FkRGVsZWdhdGUoTWluaUJyb3dzZXImIGNsaWVu
dCk7CisgICAgV2ViRG93bmxvYWREZWxlZ2F0ZShXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93JiBj
bGllbnQpOwogICAgIHZpcnR1YWwgfldlYkRvd25sb2FkRGVsZWdhdGUoKTsKIAogICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShfSW5fIFJFRklJRCBy
aWlkLCBfQ09NX091dHB0cl8gdm9pZCoqIHBwdk9iamVjdCk7CkBAIC01NCw3ICs1NCw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGlkRmluaXNoKF9J
bl9vcHRfIElXZWJEb3dubG9hZCopOwogCiBwcml2YXRlOgotICAgIE1pbmlCcm93c2VyJiBtX2Ns
aWVudDsKKyAgICBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93JiBtX2NsaWVudDsKIH07CiAKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvd2luL1dlYktpdExlZ2FjeUJyb3dz
ZXJXaW5kb3cuY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvd2luL1dlYktpdExlZ2FjeUJyb3dzZXJX
aW5kb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5ZGVmMzllZjJjYzBiOTRmNGNjYzRlZjkwMWYwYjFkMzFl
NDA0NGEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci93aW4vV2ViS2l0TGVn
YWN5QnJvd3NlcldpbmRvdy5jcHAKQEAgLTAsMCArMSw4OTUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDgsIDIwMTMtMjAxNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEJyZW50IEZ1bGdoYW0uICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIEFwcGNlbGVyYXRv
ciwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFsZXgg
Q2hyaXN0ZW5zZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAic3RkYWZ4LmgiCisjaW5jbHVkZSAiV2Vi
S2l0TGVnYWN5QnJvd3NlcldpbmRvdy5oIgorCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eURlbGVn
YXRlLmgiCisjaW5jbHVkZSAiQ29tbW9uLmgiCisjaW5jbHVkZSAiRE9NRGVmYXVsdEltcGwuaCIK
KyNpbmNsdWRlICJNaW5pQnJvd3NlckxpYlJlc291cmNlLmgiCisjaW5jbHVkZSAiTWluaUJyb3dz
ZXJSZXBsYWNlLmgiCisjaW5jbHVkZSAiTWluaUJyb3dzZXJXZWJIb3N0LmgiCisjaW5jbHVkZSAi
UHJpbnRXZWJVSURlbGVnYXRlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkRGVsZWdhdGUuaCIK
KyNpbmNsdWRlICJXZWJEb3dubG9hZERlbGVnYXRlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DT01Q
dHIuaD4KKyNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvV2ViS2l0Q09NQVBJLmg+CisjaW5jbHVkZSA8
YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNp
bmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIFVTRShDRikKKyNpbmNsdWRlIDxX
ZWJLaXRMZWdhY3kvQ0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcuaD4KKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitmbG9hdCBkZXZpY2VTY2FsZUZhY3RvckZvcldpbmRvdyhIV05EKTsKK30K
Kworc3RhdGljIGNvbnN0IGludCBtYXhIaXN0b3J5U2l6ZSA9IDEwOworCit0eXBlZGVmIF9jb21f
cHRyX3Q8X2NvbV9JSUlEPElXZWJNdXRhYmxlVVJMUmVxdWVzdCwgJl9fdXVpZG9mKElXZWJNdXRh
YmxlVVJMUmVxdWVzdCk+PiBJV2ViTXV0YWJsZVVSTFJlcXVlc3RQdHI7CisKK1JlZjxCcm93c2Vy
V2luZG93PiBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93OjpjcmVhdGUoSFdORCBtYWluV25kLCBI
V05EIHVybEJhclduZCwgYm9vbCB1c2VMYXllcmVkV2ViVmlldywgYm9vbCBwYWdlTG9hZFRlc3Rp
bmcpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRv
dyhtYWluV25kLCB1cmxCYXJXbmQsIHVzZUxheWVyZWRXZWJWaWV3LCBwYWdlTG9hZFRlc3Rpbmcp
KTsKK30KKworV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6V2ViS2l0TGVnYWN5QnJvd3Nlcldp
bmRvdyhIV05EIG1haW5XbmQsIEhXTkQgdXJsQmFyV25kLCBib29sIHVzZUxheWVyZWRXZWJWaWV3
LCBib29sIHBhZ2VMb2FkVGVzdGluZykKKyAgICA6IG1faE1haW5XbmQobWFpblduZCkKKyAgICAs
IG1faFVSTEJhclduZCh1cmxCYXJXbmQpCisgICAgLCBtX3VzZUxheWVyZWRXZWJWaWV3KHVzZUxh
eWVyZWRXZWJWaWV3KQorICAgICwgbV9wYWdlTG9hZFRlc3RDbGllbnQoc3RkOjptYWtlX3VuaXF1
ZTxQYWdlTG9hZFRlc3RDbGllbnQ+KHRoaXMsIHBhZ2VMb2FkVGVzdGluZykpCit7Cit9CisKK1VM
T05HIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6OkFkZFJlZigpCit7CisgICAgcmVmKCk7Cisg
ICAgcmV0dXJuIHJlZkNvdW50KCk7Cit9CisKK1VMT05HIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5k
b3c6OlJlbGVhc2UoKQoreworICAgIGF1dG8gY291bnQgPSByZWZDb3VudCgpOworICAgIGRlcmVm
KCk7CisgICAgcmV0dXJuIC0tY291bnQ7Cit9CisKK0hSRVNVTFQgV2ViS2l0TGVnYWN5QnJvd3Nl
cldpbmRvdzo6aW5pdCgpCit7CisgICAgSFJFU1VMVCBociA9IFdlYktpdENyZWF0ZUluc3RhbmNl
KENMU0lEX1dlYlZpZXcsIDAsIElJRF9JV2ViVmlldywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+
KCZtX3dlYlZpZXcuR2V0SW50ZXJmYWNlUHRyKCkpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAg
ICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSBtX3dlYlZpZXctPlF1ZXJ5SW50ZXJmYWNlKElJ
RF9JV2ViVmlld1ByaXZhdGUyLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fd2ViVmlld1By
aXZhdGUuR2V0SW50ZXJmYWNlUHRyKCkpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAg
cmV0dXJuIGhyOworCisgICAgaHIgPSBXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJIaXN0
b3J5LCAwLCBfX3V1aWRvZihtX3dlYkhpc3RvcnkpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4o
Jm1fd2ViSGlzdG9yeS5HZXRJbnRlcmZhY2VQdHIoKSkpOworICAgIGlmIChGQUlMRUQoaHIpKQor
ICAgICAgICByZXR1cm4gaHI7CisKKyAgICBociA9IFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lE
X1dlYkNvcmVTdGF0aXN0aWNzLCAwLCBfX3V1aWRvZihtX3N0YXRpc3RpY3MpLCByZWludGVycHJl
dF9jYXN0PHZvaWQqKj4oJm1fc3RhdGlzdGljcy5HZXRJbnRlcmZhY2VQdHIoKSkpOworICAgIGlm
IChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBociA9IFdlYktpdENyZWF0
ZUluc3RhbmNlKENMU0lEX1dlYkNhY2hlLCAwLCBfX3V1aWRvZihtX3dlYkNhY2hlKSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KCZtX3dlYkNhY2hlLkdldEludGVyZmFjZVB0cigpKSk7CisgICAg
aWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIGlmICghc2VlZEluaXRp
YWxEZWZhdWx0UHJlZmVyZW5jZXMoKSkKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKworICAgIGlm
ICghc2V0VG9EZWZhdWx0UHJlZmVyZW5jZXMoKSkKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKwor
ICAgIGlmICghc2V0Q2FjaGVGb2xkZXIoKSkKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKworICAg
IGF1dG8gd2ViSG9zdCA9IG5ldyBNaW5pQnJvd3NlcldlYkhvc3QodGhpcywgbV9oVVJMQmFyV25k
KTsKKworICAgIGhyID0gc2V0RnJhbWVMb2FkRGVsZWdhdGUod2ViSG9zdCk7CisgICAgaWYgKEZB
SUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAgIGhyID0gc2V0RnJhbWVMb2FkRGVs
ZWdhdGVQcml2YXRlKHdlYkhvc3QpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1
cm4gaHI7CisKKyAgICBociA9IHNldFVJRGVsZWdhdGUobmV3IFByaW50V2ViVUlEZWxlZ2F0ZSgq
dGhpcykpOworICAgIGlmIChGQUlMRUQgKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAg
aHIgPSBzZXRBY2Nlc3NpYmlsaXR5RGVsZWdhdGUobmV3IEFjY2Vzc2liaWxpdHlEZWxlZ2F0ZSgq
dGhpcykpOworICAgIGlmIChGQUlMRUQgKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworCisgICAg
aHIgPSBzZXRSZXNvdXJjZUxvYWREZWxlZ2F0ZShuZXcgUmVzb3VyY2VMb2FkRGVsZWdhdGUodGhp
cykpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBJV2Vi
RG93bmxvYWREZWxlZ2F0ZVB0ciBkb3dubG9hZERlbGVnYXRlOworICAgIGRvd25sb2FkRGVsZWdh
dGUuQXR0YWNoKG5ldyBXZWJEb3dubG9hZERlbGVnYXRlKCp0aGlzKSk7CisgICAgaHIgPSBzZXRE
b3dubG9hZERlbGVnYXRlKGRvd25sb2FkRGVsZWdhdGUpOworICAgIGlmIChGQUlMRUQoaHIpKQor
ICAgICAgICByZXR1cm4gaHI7CisKKyAgICBSRUNUIGNsaWVudFJlY3Q7CisgICAgOjpHZXRDbGll
bnRSZWN0KG1faE1haW5XbmQsICZjbGllbnRSZWN0KTsKKyAgICBpZiAodXNlc0xheWVyZWRXZWJW
aWV3KCkpCisgICAgICAgIGNsaWVudFJlY3QgPSB7IHNfd2luZG93UG9zaXRpb24ueCwgc193aW5k
b3dQb3NpdGlvbi55LCBzX3dpbmRvd1Bvc2l0aW9uLnggKyBzX3dpbmRvd1NpemUuY3gsIHNfd2lu
ZG93UG9zaXRpb24ueSArIHNfd2luZG93U2l6ZS5jeSB9OworCisgICAgaHIgPSBwcmVwYXJlVmll
d3MobV9oTWFpblduZCwgY2xpZW50UmVjdCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAg
IHJldHVybiBocjsKKworICAgIGlmICh1c2VzTGF5ZXJlZFdlYlZpZXcoKSkKKyAgICAgICAgc3Vi
Y2xhc3NGb3JMYXllcmVkV2luZG93KCk7CisKKyAgICByZXR1cm4gaHI7Cit9CisKK2Jvb2wgV2Vi
S2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6c2V0Q2FjaGVGb2xkZXIoKQoreworICAgIF9ic3RyX3Qg
YXBwRGF0YUZvbGRlcjsKKyAgICBpZiAoIWdldEFwcERhdGFGb2xkZXIoYXBwRGF0YUZvbGRlcikp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGFwcERhdGFGb2xkZXIgKz0gTCJcXGNhY2hl
IjsKKyAgICB3ZWJDYWNoZSgpLT5zZXRDYWNoZUZvbGRlcihhcHBEYXRhRm9sZGVyKTsKKworICAg
IHJldHVybiB0cnVlOworfQorCitIUkVTVUxUIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6OnBy
ZXBhcmVWaWV3cyhIV05EIG1haW5XbmQsIGNvbnN0IFJFQ1QmIGNsaWVudFJlY3QpCit7CisgICAg
aWYgKCFtX3dlYlZpZXcpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICBIUkVTVUxUIGhy
ID0gbV93ZWJWaWV3LT5zZXRIb3N0V2luZG93KG1haW5XbmQpOworICAgIGlmIChGQUlMRUQoaHIp
KQorICAgICAgICByZXR1cm4gaHI7CisKKyAgICBociA9IG1fd2ViVmlldy0+aW5pdFdpdGhGcmFt
ZShjbGllbnRSZWN0LCAwLCAwKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJu
IGhyOworCisgICAgaHIgPSBtX3dlYlZpZXdQcml2YXRlLT5zZXRUcmFuc3BhcmVudChtX3VzZUxh
eWVyZWRXZWJWaWV3KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOwor
CisgICAgaHIgPSBtX3dlYlZpZXdQcml2YXRlLT5zZXRVc2VzTGF5ZXJlZFdpbmRvdyhtX3VzZUxh
eWVyZWRXZWJWaWV3KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOwor
CisgICAgaHIgPSBtX3dlYlZpZXdQcml2YXRlLT52aWV3V2luZG93KCZtX3ZpZXdXbmQpOworCisg
ICAgcmV0dXJuIGhyOworfQorCitIUkVTVUxUIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6Omxv
YWRIVE1MU3RyaW5nKGNvbnN0IEJTVFImIHN0cikKK3sKKyAgICBJV2ViRnJhbWVQdHIgZnJhbWU7
CisgICAgSFJFU1VMVCBociA9IG1fd2ViVmlldy0+bWFpbkZyYW1lKCZmcmFtZS5HZXRJbnRlcmZh
Y2VQdHIoKSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybiBocjsKKworICAg
IGZyYW1lLT5sb2FkSFRNTFN0cmluZyhzdHIsIDApOworICAgIHJldHVybiBocjsKK30KKworc3Rh
dGljIFdORFBST0MgZ0RlZldlYktpdFByb2M7CisKK3N0YXRpYyBMUkVTVUxUIENBTExCQUNLIHZp
ZXdXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0g
bFBhcmFtKQoreworICAgIHN3aXRjaCAobWVzc2FnZSkgeworICAgIGNhc2UgV01fTkNISVRURVNU
OgorICAgICAgICBjb25zdGV4cHIgaW50IGRyYWdCYXJIZWlnaHQgPSAzMDsKKyAgICAgICAgUkVD
VCB3aW5kb3c7CisgICAgICAgIDo6R2V0V2luZG93UmVjdChoV25kLCAmd2luZG93KTsKKyAgICAg
ICAgLy8gRm9yIHRlc3Rpbmcgb3VyIHRyYW5zcGFyZW50IHdpbmRvdywgd2UgbmVlZCBhIHJlZ2lv
biB0byB1c2UgYXMgYSBoYW5kbGUgZm9yCisgICAgICAgIC8vIGRyYWdnaW5nLiBUaGUgcmlnaHQg
d2F5IHRvIGRvIHRoaXMgd291bGQgYmUgdG8gcXVlcnkgdGhlIHdlYiB2aWV3IHRvIHNlZSB3aGF0
J3MKKyAgICAgICAgLy8gdW5kZXIgdGhlIG1vdXNlLiBIb3dldmVyLCBmb3IgdGVzdGluZyBwdXJw
b3NlcyB3ZSBqdXN0IHVzZSBhbiBhcmJpdHJhcnkKKyAgICAgICAgLy8gMzAgbG9naWNhbCBwaXhl
bCBiYW5kIGF0IHRoZSB0b3Agb2YgdGhlIHZpZXcgYXMgYW4gYXJiaXRyYXJ5IGdyaXBwaW5nIGxv
Y2F0aW9uLgorICAgICAgICAvLworICAgICAgICAvLyBXaGVuIHdlIGFyZSB3aXRoaW4gdGhpcyBi
YWQsIHJldHVybiBIVF9DQVBUSU9OIHRvIHRlbGwgV2luZG93cyB3ZSB3YW50IHRvCisgICAgICAg
IC8vIHRyZWF0IHRoaXMgcmVnaW9uIGFzIGlmIGl0IHdlcmUgdGhlIHRpdGxlIGJhciBvbiBhIG5v
cm1hbCB3aW5kb3cuCisgICAgICAgIGludCB5ID0gSElXT1JEKGxQYXJhbSk7CisgICAgICAgIGZs
b2F0IHNjYWxlZERyYWdCYXJIZWlnaHRGYWN0b3IgPSBkcmFnQmFySGVpZ2h0ICogV2ViQ29yZTo6
ZGV2aWNlU2NhbGVGYWN0b3JGb3JXaW5kb3coaFduZCk7CisgICAgICAgIGlmICgoeSA+IHdpbmRv
dy50b3ApICYmICh5IDwgd2luZG93LnRvcCArIHNjYWxlZERyYWdCYXJIZWlnaHRGYWN0b3IpKQor
ICAgICAgICAgICAgcmV0dXJuIEhUQ0FQVElPTjsKKyAgICB9CisgICAgcmV0dXJuIENhbGxXaW5k
b3dQcm9jKGdEZWZXZWJLaXRQcm9jLCBoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Cit9
CisKK3ZvaWQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6c3ViY2xhc3NGb3JMYXllcmVkV2lu
ZG93KCkKK3sKKyNpZiBkZWZpbmVkIF9NX0FNRDY0IHx8IGRlZmluZWQgX1dJTjY0CisgICAgZ0Rl
ZldlYktpdFByb2MgPSByZWludGVycHJldF9jYXN0PFdORFBST0M+KDo6R2V0V2luZG93TG9uZ1B0
cihtX3ZpZXdXbmQsIEdXTFBfV05EUFJPQykpOworICAgIDo6U2V0V2luZG93TG9uZ1B0cihtX3Zp
ZXdXbmQsIEdXTFBfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HX1BUUj4odmlld1duZFBy
b2MpKTsKKyNlbHNlCisgICAgZ0RlZldlYktpdFByb2MgPSByZWludGVycHJldF9jYXN0PFdORFBS
T0M+KDo6R2V0V2luZG93TG9uZyhtX3ZpZXdXbmQsIEdXTF9XTkRQUk9DKSk7CisgICAgOjpTZXRX
aW5kb3dMb25nKG1fdmlld1duZCwgR1dMX1dORFBST0MsIHJlaW50ZXJwcmV0X2Nhc3Q8TE9OR19Q
VFI+KHZpZXdXbmRQcm9jKSk7CisjZW5kaWYKK30KKworSFJFU1VMVCBXZWJLaXRMZWdhY3lCcm93
c2VyV2luZG93OjpzZXRGcmFtZUxvYWREZWxlZ2F0ZShJV2ViRnJhbWVMb2FkRGVsZWdhdGUqIGZy
YW1lTG9hZERlbGVnYXRlKQoreworICAgIG1fZnJhbWVMb2FkRGVsZWdhdGUgPSBmcmFtZUxvYWRE
ZWxlZ2F0ZTsKKyAgICByZXR1cm4gbV93ZWJWaWV3LT5zZXRGcmFtZUxvYWREZWxlZ2F0ZShmcmFt
ZUxvYWREZWxlZ2F0ZSk7Cit9CisKK0hSRVNVTFQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6
c2V0RnJhbWVMb2FkRGVsZWdhdGVQcml2YXRlKElXZWJGcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUq
IGZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZSkKK3sKKyAgICByZXR1cm4gbV93ZWJWaWV3UHJpdmF0
ZS0+c2V0RnJhbWVMb2FkRGVsZWdhdGVQcml2YXRlKGZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZSk7
Cit9CisKK0hSRVNVTFQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6c2V0VUlEZWxlZ2F0ZShJ
V2ViVUlEZWxlZ2F0ZSogdWlEZWxlZ2F0ZSkKK3sKKyAgICBtX3VpRGVsZWdhdGUgPSB1aURlbGVn
YXRlOworICAgIHJldHVybiBtX3dlYlZpZXctPnNldFVJRGVsZWdhdGUodWlEZWxlZ2F0ZSk7Cit9
CisKK0hSRVNVTFQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6c2V0QWNjZXNzaWJpbGl0eURl
bGVnYXRlKElBY2Nlc3NpYmlsaXR5RGVsZWdhdGUqIGFjY2Vzc2liaWxpdHlEZWxlZ2F0ZSkKK3sK
KyAgICBtX2FjY2Vzc2liaWxpdHlEZWxlZ2F0ZSA9IGFjY2Vzc2liaWxpdHlEZWxlZ2F0ZTsKKyAg
ICByZXR1cm4gbV93ZWJWaWV3LT5zZXRBY2Nlc3NpYmlsaXR5RGVsZWdhdGUoYWNjZXNzaWJpbGl0
eURlbGVnYXRlKTsKK30KKworSFJFU1VMVCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93OjpzZXRS
ZXNvdXJjZUxvYWREZWxlZ2F0ZShJV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGUqIHJlc291cmNlTG9h
ZERlbGVnYXRlKQoreworICAgIG1fcmVzb3VyY2VMb2FkRGVsZWdhdGUgPSByZXNvdXJjZUxvYWRE
ZWxlZ2F0ZTsKKyAgICByZXR1cm4gbV93ZWJWaWV3LT5zZXRSZXNvdXJjZUxvYWREZWxlZ2F0ZShy
ZXNvdXJjZUxvYWREZWxlZ2F0ZSk7Cit9CisKK0hSRVNVTFQgV2ViS2l0TGVnYWN5QnJvd3Nlcldp
bmRvdzo6c2V0RG93bmxvYWREZWxlZ2F0ZShJV2ViRG93bmxvYWREZWxlZ2F0ZVB0ciBkb3dubG9h
ZERlbGVnYXRlKQoreworICAgIG1fZG93bmxvYWREZWxlZ2F0ZSA9IGRvd25sb2FkRGVsZWdhdGU7
CisgICAgcmV0dXJuIG1fd2ViVmlldy0+c2V0RG93bmxvYWREZWxlZ2F0ZShkb3dubG9hZERlbGVn
YXRlKTsKK30KKworSVdlYkZyYW1lUHRyIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6Om1haW5G
cmFtZSgpCit7CisgICAgSVdlYkZyYW1lUHRyIGZyYW1lUHRyOworICAgIG1fd2ViVmlldy0+bWFp
bkZyYW1lKCZmcmFtZVB0ci5HZXRJbnRlcmZhY2VQdHIoKSk7CisgICAgcmV0dXJuIGZyYW1lUHRy
OworfQorCitib29sIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6OnNlZWRJbml0aWFsRGVmYXVs
dFByZWZlcmVuY2VzKCkKK3sKKyAgICBJV2ViUHJlZmVyZW5jZXNQdHIgdG1wUHJlZmVyZW5jZXM7
CisgICAgaWYgKEZBSUxFRChXZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJQcmVmZXJlbmNl
cywgMCwgSUlEX0lXZWJQcmVmZXJlbmNlcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZ0bXBQ
cmVmZXJlbmNlcy5HZXRJbnRlcmZhY2VQdHIoKSkpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKEZBSUxFRCh0bXBQcmVmZXJlbmNlcy0+c3RhbmRhcmRQcmVmZXJlbmNlcygmbV9z
dGFuZGFyZFByZWZlcmVuY2VzLkdldEludGVyZmFjZVB0cigpKSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYktpdExlZ2FjeUJyb3dzZXJX
aW5kb3c6OnNldFRvRGVmYXVsdFByZWZlcmVuY2VzKCkKK3sKKyAgICBIUkVTVUxUIGhyID0gbV9z
dGFuZGFyZFByZWZlcmVuY2VzLT5RdWVyeUludGVyZmFjZShJSURfSVdlYlByZWZlcmVuY2VzUHJp
dmF0ZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtX3ByZWZzUHJpdmF0ZS5HZXRJbnRlcmZh
Y2VQdHIoKSkpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisjaWYgVVNFKENHKQorICAgIG1fc3RhbmRhcmRQcmVmZXJlbmNlcy0+c2V0QVZGb3VuZGF0
aW9uRW5hYmxlZChUUlVFKTsKKyAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0QWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0VuYWJsZWQoVFJVRSk7CisjZW5kaWYKKworICAgIG1fcHJlZnNQcml2YXRlLT5zZXRG
dWxsU2NyZWVuRW5hYmxlZChUUlVFKTsKKyAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0U2hvd0RlYnVn
Qm9yZGVycyhGQUxTRSk7CisgICAgbV9wcmVmc1ByaXZhdGUtPnNldFNob3dSZXBhaW50Q291bnRl
cihGQUxTRSk7CisgICAgbV9wcmVmc1ByaXZhdGUtPnNldFNob3VsZEludmVydENvbG9ycyhGQUxT
RSk7CisKKyAgICBtX3N0YW5kYXJkUHJlZmVyZW5jZXMtPnNldExvYWRzSW1hZ2VzQXV0b21hdGlj
YWxseShUUlVFKTsKKyAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0QXV0aG9yQW5kVXNlclN0eWxlc0Vu
YWJsZWQoVFJVRSk7CisgICAgbV9zdGFuZGFyZFByZWZlcmVuY2VzLT5zZXRKYXZhU2NyaXB0RW5h
YmxlZChUUlVFKTsKKyAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NG
cm9tRmlsZVVSTHMoRkFMU0UpOworICAgIG1fcHJlZnNQcml2YXRlLT5zZXRBbGxvd0ZpbGVBY2Nl
c3NGcm9tRmlsZVVSTHMoVFJVRSk7CisKKyAgICBtX3ByZWZzUHJpdmF0ZS0+c2V0RGV2ZWxvcGVy
RXh0cmFzRW5hYmxlZChUUlVFKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9p
ZCB1cGRhdGVNZW51SXRlbUZvckhpc3RvcnlJdGVtKEhNRU5VIG1lbnUsIElXZWJIaXN0b3J5SXRl
bSYgaGlzdG9yeUl0ZW0sIGludCBjdXJyZW50SGlzdG9yeUl0ZW0pCit7CisgICAgVUlOVCBtZW51
SUQgPSBJRE1fSElTVE9SWV9MSU5LMCArIGN1cnJlbnRIaXN0b3J5SXRlbTsKKworICAgIE1FTlVJ
VEVNSU5GTyBtZW51SXRlbUluZm8gPSB7IDAgfTsKKyAgICBtZW51SXRlbUluZm8uY2JTaXplID0g
c2l6ZW9mKE1FTlVJVEVNSU5GTyk7CisgICAgbWVudUl0ZW1JbmZvLmZNYXNrID0gTUlJTV9UWVBF
OworICAgIG1lbnVJdGVtSW5mby5mVHlwZSA9IE1GVF9TVFJJTkc7CisKKyAgICBfYnN0cl90IHRp
dGxlOworICAgIGhpc3RvcnlJdGVtLnRpdGxlKHRpdGxlLkdldEFkZHJlc3MoKSk7CisgICAgbWVu
dUl0ZW1JbmZvLmR3VHlwZURhdGEgPSBzdGF0aWNfY2FzdDxMUFdTVFI+KHRpdGxlKTsKKworICAg
IDo6U2V0TWVudUl0ZW1JbmZvKG1lbnUsIG1lbnVJRCwgRkFMU0UsICZtZW51SXRlbUluZm8pOwor
ICAgIDo6RW5hYmxlTWVudUl0ZW0obWVudSwgbWVudUlELCBNRl9CWUNPTU1BTkQgfCBNRl9FTkFC
TEVEKTsKK30KKwordm9pZCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93OjpzaG93TGFzdFZpc2l0
ZWRTaXRlcyhJV2ViVmlldyYgd2ViVmlldykKK3sKKyAgICBITUVOVSBtZW51ID0gOjpHZXRNZW51
KG1faE1haW5XbmQpOworCisgICAgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYkJhY2tGb3J3YXJk
TGlzdCwgJl9fdXVpZG9mKElXZWJCYWNrRm9yd2FyZExpc3QpPj4gYmFja0ZvcndhcmRMaXN0Owor
ICAgIEhSRVNVTFQgaHIgPSB3ZWJWaWV3LmJhY2tGb3J3YXJkTGlzdCgmYmFja0ZvcndhcmRMaXN0
LkdldEludGVyZmFjZVB0cigpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaW50IGNhcGFjaXR5ID0gMDsKKyAgICBociA9IGJhY2tGb3J3YXJkTGlzdC0+Y2Fw
YWNpdHkoJmNhcGFjaXR5KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaW50IGJhY2tDb3VudCA9IDA7CisgICAgaHIgPSBiYWNrRm9yd2FyZExpc3QtPmJhY2tM
aXN0Q291bnQoJmJhY2tDb3VudCk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVy
bjsKKworICAgIFVJTlQgYmFja1NldHRpbmcgPSBNRl9CWUNPTU1BTkQgfCAoKGJhY2tDb3VudCkg
PyBNRl9FTkFCTEVEIDogTUZfRElTQUJMRUQpOworICAgIDo6RW5hYmxlTWVudUl0ZW0obWVudSwg
SURNX0hJU1RPUllfQkFDS1dBUkQsIGJhY2tTZXR0aW5nKTsKKworICAgIGludCBmb3J3YXJkQ291
bnQgPSAwOworICAgIGhyID0gYmFja0ZvcndhcmRMaXN0LT5mb3J3YXJkTGlzdENvdW50KCZmb3J3
YXJkQ291bnQpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBV
SU5UIGZvcndhcmRTZXR0aW5nID0gTUZfQllDT01NQU5EIHwgKChmb3J3YXJkQ291bnQpID8gTUZf
RU5BQkxFRCA6IE1GX0RJU0FCTEVEKTsKKyAgICA6OkVuYWJsZU1lbnVJdGVtKG1lbnUsIElETV9I
SVNUT1JZX0ZPUldBUkQsIGZvcndhcmRTZXR0aW5nKTsKKworICAgIElXZWJIaXN0b3J5SXRlbVB0
ciBjdXJyZW50SXRlbTsKKyAgICBociA9IGJhY2tGb3J3YXJkTGlzdC0+Y3VycmVudEl0ZW0oJmN1
cnJlbnRJdGVtLkdldEludGVyZmFjZVB0cigpKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaHIgPSBtX3dlYkhpc3RvcnktPmFkZEl0ZW1zKDEsICZjdXJyZW50
SXRlbS5HZXRJbnRlcmZhY2VQdHIoKSk7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJl
dHVybjsKKworICAgIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJIaXN0b3J5UHJpdmF0ZSwgJl9f
dXVpZG9mKElXZWJIaXN0b3J5UHJpdmF0ZSk+PiB3ZWJIaXN0b3J5OworICAgIGhyID0gbV93ZWJI
aXN0b3J5LT5RdWVyeUludGVyZmFjZShJSURfSVdlYkhpc3RvcnlQcml2YXRlLCByZWludGVycHJl
dF9jYXN0PHZvaWQqKj4oJndlYkhpc3RvcnkuR2V0SW50ZXJmYWNlUHRyKCkpKTsKKyAgICBpZiAo
RkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHRvdGFsTGlzdENvdW50ID0g
MDsKKyAgICBociA9IHdlYkhpc3RvcnktPmFsbEl0ZW1zKCZ0b3RhbExpc3RDb3VudCwgMCk7Cisg
ICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVybjsKKworICAgIG1faGlzdG9yeUl0ZW1z
LnJlc2l6ZSh0b3RhbExpc3RDb3VudCk7CisKKyAgICBzdGQ6OnZlY3RvcjxJV2ViSGlzdG9yeUl0
ZW0qPiBoaXN0b3J5VG9Mb2FkKHRvdGFsTGlzdENvdW50KTsKKyAgICBociA9IHdlYkhpc3Rvcnkt
PmFsbEl0ZW1zKCZ0b3RhbExpc3RDb3VudCwgaGlzdG9yeVRvTG9hZC5kYXRhKCkpOworICAgIGlm
IChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3QgaSA9IDA7CisgICAg
Zm9yIChhdXRvJiBjdXIgOiBoaXN0b3J5VG9Mb2FkKSB7CisgICAgICAgIG1faGlzdG9yeUl0ZW1z
W2ldLkF0dGFjaChjdXIpOworICAgICAgICArK2k7CisgICAgfQorCisgICAgaW50IGFsbEl0ZW1z
T2Zmc2V0ID0gMDsKKyAgICBpZiAodG90YWxMaXN0Q291bnQgPiBtYXhIaXN0b3J5U2l6ZSkKKyAg
ICAgICAgYWxsSXRlbXNPZmZzZXQgPSB0b3RhbExpc3RDb3VudCAtIG1heEhpc3RvcnlTaXplOwor
CisgICAgaW50IGN1cnJlbnRIaXN0b3J5SXRlbSA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBtX2hpc3RvcnlJdGVtcy5zaXplKCkgJiYgKGFsbEl0ZW1zT2Zmc2V0ICsgY3VycmVudEhpc3Rv
cnlJdGVtKSA8IG1faGlzdG9yeUl0ZW1zLnNpemUoKTsgKytpKSB7CisgICAgICAgIHVwZGF0ZU1l
bnVJdGVtRm9ySGlzdG9yeUl0ZW0obWVudSwgKihtX2hpc3RvcnlJdGVtc1thbGxJdGVtc09mZnNl
dCArIGN1cnJlbnRIaXN0b3J5SXRlbV0pLCBjdXJyZW50SGlzdG9yeUl0ZW0pOworICAgICAgICAr
K2N1cnJlbnRIaXN0b3J5SXRlbTsKKyAgICB9CisKKyAgICAvLyBIaWRlIGFueSBoaXN0b3J5IHdl
IGFyZW4ndCB1c2luZyB5ZXQuCisgICAgZm9yIChpbnQgaSA9IGN1cnJlbnRIaXN0b3J5SXRlbTsg
aSA8IG1heEhpc3RvcnlTaXplOyArK2kpCisgICAgICAgIDo6RW5hYmxlTWVudUl0ZW0obWVudSwg
SURNX0hJU1RPUllfTElOSzAgKyBpLCBNRl9CWUNPTU1BTkQgfCBNRl9ESVNBQkxFRCk7Cit9CisK
K3ZvaWQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6bGF1bmNoSW5zcGVjdG9yKCkKK3sKKyAg
ICBpZiAoIW1fd2ViVmlld1ByaXZhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghU1VD
Q0VFREVEKG1fd2ViVmlld1ByaXZhdGUtPmluc3BlY3RvcigmbV9pbnNwZWN0b3IuR2V0SW50ZXJm
YWNlUHRyKCkpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnNwZWN0b3ItPnNob3coKTsK
K30KKwordm9pZCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93OjpuYXZpZ2F0ZUZvcndhcmRPckJh
Y2t3YXJkKFVJTlQgbWVudUlEKQoreworICAgIGlmICghbV93ZWJWaWV3KQorICAgICAgICByZXR1
cm47CisKKyAgICBCT09MIHdlbnRCYWNrT3JGb3J3YXJkID0gRkFMU0U7CisgICAgaWYgKElETV9I
SVNUT1JZX0ZPUldBUkQgPT0gbWVudUlEKQorICAgICAgICBtX3dlYlZpZXctPmdvRm9yd2FyZCgm
d2VudEJhY2tPckZvcndhcmQpOworICAgIGVsc2UKKyAgICAgICAgbV93ZWJWaWV3LT5nb0JhY2so
JndlbnRCYWNrT3JGb3J3YXJkKTsKK30KKwordm9pZCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93
OjpuYXZpZ2F0ZVRvSGlzdG9yeShVSU5UIG1lbnVJRCkKK3sKKyAgICBpZiAoIW1fd2ViVmlldykK
KyAgICAgICAgcmV0dXJuOworCisgICAgaW50IGhpc3RvcnlFbnRyeSA9IG1lbnVJRCAtIElETV9I
SVNUT1JZX0xJTkswOworICAgIGlmIChoaXN0b3J5RW50cnkgPiBtX2hpc3RvcnlJdGVtcy5zaXpl
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIElXZWJIaXN0b3J5SXRlbVB0ciBkZXNpcmVkSGlz
dG9yeUl0ZW0gPSBtX2hpc3RvcnlJdGVtc1toaXN0b3J5RW50cnldOworICAgIGlmICghZGVzaXJl
ZEhpc3RvcnlJdGVtKQorICAgICAgICByZXR1cm47CisKKyAgICBCT09MIHN1Y2NlZWRlZCA9IEZB
TFNFOworICAgIG1fd2ViVmlldy0+Z29Ub0JhY2tGb3J3YXJkSXRlbShkZXNpcmVkSGlzdG9yeUl0
ZW0sICZzdWNjZWVkZWQpOworCisgICAgX2JzdHJfdCBmcmFtZVVSTDsKKyAgICBkZXNpcmVkSGlz
dG9yeUl0ZW0tPlVSTFN0cmluZyhmcmFtZVVSTC5HZXRBZGRyZXNzKCkpOworCisgICAgOjpTZW5k
TWVzc2FnZShtX2hVUkxCYXJXbmQsIChVSU5UKVdNX1NFVFRFWFQsIDAsIChMUEFSQU0pZnJhbWVV
UkwuR2V0QlNUUigpKTsKK30KKworYm9vbCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93Ojpnb0Jh
Y2soKQoreworICAgIEJPT0wgd2VudEJhY2sgPSBGQUxTRTsKKyAgICBtX3dlYlZpZXctPmdvQmFj
aygmd2VudEJhY2spOworICAgIHJldHVybiB3ZW50QmFjazsKK30KKworYm9vbCBXZWJLaXRMZWdh
Y3lCcm93c2VyV2luZG93Ojpnb0ZvcndhcmQoKQoreworICAgIEJPT0wgd2VudEZvcndhcmQgPSBG
QUxTRTsKKyAgICBtX3dlYlZpZXctPmdvRm9yd2FyZCgmd2VudEZvcndhcmQpOworICAgIHJldHVy
biB3ZW50Rm9yd2FyZDsKK30KKworSFJFU1VMVCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93Ojps
b2FkVVJMKGNvbnN0IEJTVFImIHBhc3NlZFVSTCkKK3sKKyAgICBpZiAoIXBhc3NlZFVSTCkKKyAg
ICAgICAgcmV0dXJuIEVfSU5WQUxJREFSRzsKKworICAgIF9ic3RyX3QgdXJsQlN0cihwYXNzZWRV
UkwpOworICAgIGlmICghIXVybEJTdHIgJiYgKDo6UGF0aEZpbGVFeGlzdHModXJsQlN0cikgfHwg
OjpQYXRoSXNVTkModXJsQlN0cikpKSB7CisgICAgICAgIFRDSEFSIGZpbGVVUkxbSU5URVJORVRf
TUFYX1VSTF9MRU5HVEhdOworICAgICAgICBEV09SRCBmaWxlVVJMTGVuZ3RoID0gc2l6ZW9mKGZp
bGVVUkwpIC8gc2l6ZW9mKGZpbGVVUkxbMF0pOworCisgICAgICAgIGlmIChTVUNDRUVERUQoOjpV
cmxDcmVhdGVGcm9tUGF0aCh1cmxCU3RyLCBmaWxlVVJMLCAmZmlsZVVSTExlbmd0aCwgMCkpKQor
ICAgICAgICAgICAgdXJsQlN0ciA9IGZpbGVVUkw7CisgICAgfQorCisgICAgSVdlYkZyYW1lUHRy
IGZyYW1lOworICAgIEhSRVNVTFQgaHIgPSBtX3dlYlZpZXctPm1haW5GcmFtZSgmZnJhbWUuR2V0
SW50ZXJmYWNlUHRyKCkpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7
CisKKyAgICBJV2ViTXV0YWJsZVVSTFJlcXVlc3RQdHIgcmVxdWVzdDsKKyAgICBociA9IFdlYktp
dENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYk11dGFibGVVUkxSZXF1ZXN0LCAwLCBJSURfSVdlYk11
dGFibGVVUkxSZXF1ZXN0LCAodm9pZCoqKSZyZXF1ZXN0KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkK
KyAgICAgICAgcmV0dXJuIGhyOworCisgICAgaHIgPSByZXF1ZXN0LT5pbml0V2l0aFVSTCh3Y3Nz
dHIoc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KHVybEJTdHIpLCBMIjovLyIpID8gdXJsQlN0ciA6IF9i
c3RyX3QoTCJodHRwOi8vIikgKyB1cmxCU3RyLCBXZWJVUkxSZXF1ZXN0VXNlUHJvdG9jb2xDYWNo
ZVBvbGljeSwgNjApOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICByZXR1cm4gaHI7CisK
KyAgICBfYnN0cl90IG1ldGhvZEJTdHIoTCJHRVQiKTsKKyAgICBociA9IHJlcXVlc3QtPnNldEhU
VFBNZXRob2QobWV0aG9kQlN0cik7CisgICAgaWYgKEZBSUxFRChocikpCisgICAgICAgIHJldHVy
biBocjsKKworICAgIGhyID0gZnJhbWUtPmxvYWRSZXF1ZXN0KHJlcXVlc3QpOworCisgICAgcmV0
dXJuIGhyOworfQorCit2b2lkIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3c6OmV4aXRQcm9ncmFt
KCkKK3sKKyAgICA6OlBvc3RNZXNzYWdlKG1faE1haW5XbmQsIHN0YXRpY19jYXN0PFVJTlQ+KFdN
X0NPTU1BTkQpLCBNQUtFTFBBUkFNKElETV9FWElULCAwKSwgMCk7Cit9CisKK3ZvaWQgV2ViS2l0
TGVnYWN5QnJvd3NlcldpbmRvdzo6c2V0VXNlckFnZW50KFVJTlQgbWVudUlEKQoreworICAgIGlm
ICghd2ViVmlldygpKQorICAgICAgICByZXR1cm47CisKKyAgICBfYnN0cl90IGN1c3RvbVVzZXJB
Z2VudDsKKyAgICBzd2l0Y2ggKG1lbnVJRCkgeworICAgIGNhc2UgSURNX1VBX0RFRkFVTFQ6Cisg
ICAgICAgIC8vIFNldCB0byBudWxsIHVzZXIgYWdlbnQKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJRE1fVUFfU0FGQVJJXzhfMDoKKyAgICAgICAgY3VzdG9tVXNlckFnZW50ID0gTCJNb3ppbGxh
LzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xMCkgQXBwbGVXZWJLaXQvNjAwLjEu
MjUgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzguMCBTYWZhcmkvNjAwLjEuMjUiOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIElETV9VQV9TQUZBUklfSU9TXzhfSVBIT05FOgorICAgICAg
ICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChpUGhvbmU7IENQVSBPUyA4XzEgbGlr
ZSBNYWMgT1MgWCkgQXBwbGVXZWJLaXQvNjAxLjEuNCAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNp
b24vOC4wIE1vYmlsZS8xMkI0MDMgU2FmYXJpLzYwMC4xLjQiOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIElETV9VQV9TQUZBUklfSU9TXzhfSVBBRDoKKyAgICAgICAgY3VzdG9tVXNlckFnZW50
ID0gTCJNb3ppbGxhLzUuMCAoaVBhZDsgQ1BVIE9TIDhfMSBsaWtlIE1hYyBPUyBYKSBBcHBsZVdl
YktpdC82MDAuMS40IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi84LjAgTW9iaWxlLzEyQjQw
MyBTYWZhcmkvNjAwLjEuNCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURNX1VBX0lFXzEx
OgorICAgICAgICBjdXN0b21Vc2VyQWdlbnQgPSBMIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYu
MzsgV09XNjQ7IFRyaWRlbnQvNy4wOyBydjoxMS4wKSBsaWtlIEdlY2tvIjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBJRE1fVUFfQ0hST01FX01BQzoKKyAgICAgICAgY3VzdG9tVXNlckFnZW50
ID0gTCJNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF84XzMpIEFwcGxl
V2ViS2l0LzUzNy4zMSAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8yNi4wLjE0MTAuNjUgU2Fm
YXJpLzUzNy4zMSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSURNX1VBX0NIUk9NRV9XSU46
CisgICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9IEwiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4y
OyBXT1c2NCkgQXBwbGVXZWJLaXQvNTM3LjMxIChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzI2
LjAuMTQxMC42NCBTYWZhcmkvNTM3LjMxIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJRE1f
VUFfRklSRUZPWF9NQUM6CisgICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9IEwiTW96aWxsYS81LjAg
KE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTAuODsgcnY6MjAuMCkgR2Vja28vMjAxMDAxMDEg
RmlyZWZveC8yMC4wIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJRE1fVUFfRklSRUZPWF9X
SU46CisgICAgICAgIGN1c3RvbVVzZXJBZ2VudCA9IEwiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQg
Ni4yOyBXT1c2NDsgcnY6MjAuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC8yMC4wIjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBJRE1fVUFfT1RIRVI6CisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUKDApOyAvLyBXZSBzaG91bGQgbmV2ZXIgaGl0IHRoaXMgY2FzZQorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgc2V0VXNlckFnZW50KGN1c3RvbVVzZXJBZ2VudCk7Cit9CisKK3Zv
aWQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6c2V0VXNlckFnZW50KF9ic3RyX3QmIGN1c3Rv
bVVzZXJBZ2VudCkKK3sKKyAgICB3ZWJWaWV3KCktPnNldEN1c3RvbVVzZXJBZ2VudChjdXN0b21V
c2VyQWdlbnQuR2V0QlNUUigpKTsKK30KKworX2JzdHJfdCBXZWJLaXRMZWdhY3lCcm93c2VyV2lu
ZG93Ojp1c2VyQWdlbnQoKQoreworICAgIF9ic3RyX3QgdXNlckFnZW50OworICAgIGlmIChGQUlM
RUQod2ViVmlldygpLT5jdXN0b21Vc2VyQWdlbnQoJnVzZXJBZ2VudC5HZXRCU1RSKCkpKSkKKyAg
ICAgICAgcmV0dXJuIF9ic3RyX3QoTCItIFVua25vd24gLTogQ2FsbCBmYWlsZWQuIik7CisKKyAg
ICByZXR1cm4gdXNlckFnZW50OworfQorCit0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElX
ZWJJQkFjdGlvbnMsICZfX3V1aWRvZihJV2ViSUJBY3Rpb25zKT4+IElXZWJJQkFjdGlvbnNQdHI7
CisKK3ZvaWQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6cmVzZXRab29tKCkKK3sKKyAgICBJ
V2ViSUJBY3Rpb25zUHRyIHdlYkFjdGlvbnM7CisgICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPlF1
ZXJ5SW50ZXJmYWNlKElJRF9JV2ViSUJBY3Rpb25zLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4o
JndlYkFjdGlvbnMuR2V0SW50ZXJmYWNlUHRyKCkpKSkpCisgICAgICAgIHJldHVybjsKKworICAg
IHdlYkFjdGlvbnMtPnJlc2V0UGFnZVpvb20obnVsbHB0cik7Cit9CisKK3ZvaWQgV2ViS2l0TGVn
YWN5QnJvd3NlcldpbmRvdzo6em9vbUluKCkKK3sKKyAgICBJV2ViSUJBY3Rpb25zUHRyIHdlYkFj
dGlvbnM7CisgICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPlF1ZXJ5SW50ZXJmYWNlKElJRF9JV2Vi
SUJBY3Rpb25zLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndlYkFjdGlvbnMuR2V0SW50ZXJm
YWNlUHRyKCkpKSkpCisgICAgICAgIHJldHVybjsKKworICAgIHdlYkFjdGlvbnMtPnpvb21QYWdl
SW4obnVsbHB0cik7Cit9CisKK3ZvaWQgV2ViS2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6em9vbU91
dCgpCit7CisgICAgSVdlYklCQWN0aW9uc1B0ciB3ZWJBY3Rpb25zOworICAgIGlmIChGQUlMRUQo
bV93ZWJWaWV3LT5RdWVyeUludGVyZmFjZShJSURfSVdlYklCQWN0aW9ucywgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKio+KCZ3ZWJBY3Rpb25zLkdldEludGVyZmFjZVB0cigpKSkpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICB3ZWJBY3Rpb25zLT56b29tUGFnZU91dChudWxscHRyKTsKK30KKwordHlw
ZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViVmlld1ByaXZhdGUzLCAmX191dWlkb2YoSVdl
YlZpZXdQcml2YXRlMyk+PiBJV2ViVmlld1ByaXZhdGUzUHRyOworCit2b2lkIFdlYktpdExlZ2Fj
eUJyb3dzZXJXaW5kb3c6OnNob3dMYXllclRyZWUoKQoreworICAgIElXZWJWaWV3UHJpdmF0ZTNQ
dHIgd2ViVmlld1ByaXZhdGU7CisgICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPlF1ZXJ5SW50ZXJm
YWNlKElJRF9JV2ViVmlld1ByaXZhdGUzLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJndlYlZp
ZXdQcml2YXRlLkdldEludGVyZmFjZVB0cigpKSkpKQorICAgICAgICByZXR1cm47CisKKyAgICBP
dXRwdXREZWJ1Z1N0cmluZyhMIkNVUlJFTlQgVFJFRTpcbiIpOworCisgICAgX2JzdHJfdCBsYXll
clRyZWVCc3RyOworICAgIGlmIChGQUlMRUQod2ViVmlld1ByaXZhdGUtPmxheWVyVHJlZUFzU3Ry
aW5nKGxheWVyVHJlZUJzdHIuR2V0QWRkcmVzcygpKSkpCisgICAgICAgIE91dHB1dERlYnVnU3Ry
aW5nKEwiICAgIEZhaWxlZCB0byByZXRyaWV2ZSB0aGUgbGF5ZXIgdHJlZS5cbiIpOworICAgIGVs
c2UKKyAgICAgICAgT3V0cHV0RGVidWdTdHJpbmcobGF5ZXJUcmVlQnN0cik7CisgICAgT3V0cHV0
RGVidWdTdHJpbmcoTCJcblxuIik7Cit9CisKK3N0YXRpYyBCT09MIENBTExCQUNLIEFib3J0UHJv
YyhIREMgaERDLCBpbnQgRXJyb3IpCit7CisgICAgTVNHIG1zZzsKKyAgICB3aGlsZSAoOjpQZWVr
TWVzc2FnZSgmbXNnLCAwLCAwLCAwLCBQTV9SRU1PVkUpKSB7CisgICAgICAgIDo6VHJhbnNsYXRl
TWVzc2FnZSgmbXNnKTsKKyAgICAgICAgOjpEaXNwYXRjaE1lc3NhZ2UoJm1zZyk7CisgICAgfQor
CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBIREMgZ2V0UHJpbnRlckRDKCkKK3sKKyAg
ICBQUklOVERMRyBwZGxnOworICAgIG1lbXNldCgmcGRsZywgMCwgc2l6ZW9mKFBSSU5URExHKSk7
CisgICAgcGRsZy5sU3RydWN0U2l6ZSA9IHNpemVvZihQUklOVERMRyk7CisgICAgcGRsZy5GbGFn
cyA9IFBEX1BSSU5UU0VUVVAgfCBQRF9SRVRVUk5EQzsKKworICAgIDo6UHJpbnREbGcoJnBkbGcp
OworCisgICAgcmV0dXJuIHBkbGcuaERDOworfQorCitzdGF0aWMgdm9pZCBpbml0RG9jU3RydWN0
KERPQ0lORk8qIGRpLCBUQ0hBUiogZG9jbmFtZSkKK3sKKyAgICBtZW1zZXQoZGksIDAsIHNpemVv
ZihET0NJTkZPKSk7CisgICAgZGktPmNiU2l6ZSA9IHNpemVvZihET0NJTkZPKTsKKyAgICBkaS0+
bHBzekRvY05hbWUgPSBkb2NuYW1lOworfQorCit2b2lkIFdlYktpdExlZ2FjeUJyb3dzZXJXaW5k
b3c6OnByaW50KCkKK3sKKyAgICBIREMgcHJpbnREQyA9IGdldFByaW50ZXJEQygpOworICAgIGlm
ICghcHJpbnREQykgeworICAgICAgICA6Ok1lc3NhZ2VCb3goMCwgTCJFcnJvciBjcmVhdGluZyBw
cmludGluZyBEQyIsIEwiRXJyb3IiLCBNQl9BUFBMTU9EQUwgfCBNQl9PSyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoOjpTZXRBYm9ydFByb2MocHJpbnREQywgQWJvcnRQcm9j
KSA9PSBTUF9FUlJPUikgeworICAgICAgICA6Ok1lc3NhZ2VCb3goMCwgTCJFcnJvciBzZXR0aW5n
IHVwIEFib3J0UHJvYyIsIEwiRXJyb3IiLCBNQl9BUFBMTU9EQUwgfCBNQl9PSyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBJV2ViRnJhbWVQdHIgZnJhbWUgPSBtYWluRnJhbWUoKTsK
KyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBJV2ViRnJhbWVQcml2YXRl
UHRyIGZyYW1lUHJpdmF0ZTsKKyAgICBpZiAoRkFJTEVEKGZyYW1lLT5RdWVyeUludGVyZmFjZSgm
ZnJhbWVQcml2YXRlLkdldEludGVyZmFjZVB0cigpKSkpCisgICAgICAgIHJldHVybjsKKworICAg
IGZyYW1lUHJpdmF0ZS0+c2V0SW5QcmludGluZ01vZGUoVFJVRSwgcHJpbnREQyk7CisKKyAgICBV
SU5UIHBhZ2VDb3VudCA9IDA7CisgICAgZnJhbWVQcml2YXRlLT5nZXRQcmludGVkUGFnZUNvdW50
KHByaW50REMsICZwYWdlQ291bnQpOworCisgICAgRE9DSU5GTyBkaTsKKyAgICBpbml0RG9jU3Ry
dWN0KCZkaSwgTCJXZWJLaXQgRG9jIik7CisgICAgOjpTdGFydERvYyhwcmludERDLCAmZGkpOwor
CisgICAgLy8gRklYTUU6IE5lZWQgQ29yZUdyYXBoaWNzIGltcGxlbWVudGF0aW9uCisgICAgdm9p
ZCogZ3JhcGhpY3NDb250ZXh0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBwYWdlID0gMTsgcGFnZSA8
PSBwYWdlQ291bnQ7ICsrcGFnZSkgeworICAgICAgICA6OlN0YXJ0UGFnZShwcmludERDKTsKKyAg
ICAgICAgZnJhbWVQcml2YXRlLT5zcG9vbFBhZ2VzKHByaW50REMsIHBhZ2UsIHBhZ2UsIGdyYXBo
aWNzQ29udGV4dCk7CisgICAgICAgIDo6RW5kUGFnZShwcmludERDKTsKKyAgICB9CisKKyAgICBm
cmFtZVByaXZhdGUtPnNldEluUHJpbnRpbmdNb2RlKEZBTFNFLCBwcmludERDKTsKKworICAgIDo6
RW5kRG9jKHByaW50REMpOworICAgIDo6RGVsZXRlREMocHJpbnREQyk7Cit9CisKK3N0YXRpYyB2
b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJTlQgZmllbGQsIF9ic3RyX3QgdmFsdWUp
Cit7CisgICAgOjpTZXREbGdJdGVtVGV4dChkaWFsb2csIGZpZWxkLCB2YWx1ZSk7Cit9CisKK3N0
YXRpYyB2b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJTlQgZmllbGQsIFVJTlQgdmFs
dWUpCit7CisgICAgU3RyaW5nIHZhbHVlU3RyID0gV1RGOjpTdHJpbmc6Om51bWJlcih2YWx1ZSk7
CisKKyAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgZmllbGQsIF9ic3RyX3QodmFsdWVTdHIudXRm
OCgpLmRhdGEoKSkpOworfQorCit0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElQcm9wZXJ0
eUJhZywgJl9fdXVpZG9mKElQcm9wZXJ0eUJhZyk+PiBJUHJvcGVydHlCYWdQdHI7CisKK3N0YXRp
YyB2b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJTlQgZmllbGQsIElQcm9wZXJ0eUJh
Z1B0ciBzdGF0aXN0aWNzLCBjb25zdCBfYnN0cl90JiBrZXkpCit7CisgICAgX3ZhcmlhbnRfdCB2
YXI7CisgICAgVl9WVCgmdmFyKSA9IFZUX1VJODsKKyAgICBpZiAoRkFJTEVEKHN0YXRpc3RpY3Mt
PlJlYWQoa2V5LCAmdmFyLkdldFZBUklBTlQoKSwgbnVsbHB0cikpKQorICAgICAgICByZXR1cm47
CisKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgPSBWX1VJOCgmdmFyKTsKKyAgICBTdHJp
bmcgdmFsdWVTdHIgPSBXVEY6OlN0cmluZzo6bnVtYmVyKHZhbHVlKTsKKworICAgIHNldFdpbmRv
d1RleHQoZGlhbG9nLCBmaWVsZCwgX2JzdHJfdCh2YWx1ZVN0ci51dGY4KCkuZGF0YSgpKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHNldFdpbmRvd1RleHQoSFdORCBkaWFsb2csIFVJTlQgZmllbGQsIENG
RGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5LCBDRlN0cmluZ1JlZiBrZXksIFVJTlQmIHRvdGFsKQor
eworICAgIENGTnVtYmVyUmVmIGNvdW50TnVtID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENG
RGljdGlvbmFyeUdldFZhbHVlKGRpY3Rpb25hcnksIGtleSkpOworICAgIGlmICghY291bnROdW0p
CisgICAgICAgIHJldHVybjsKKworICAgIGludCBjb3VudCA9IDA7CisgICAgQ0ZOdW1iZXJHZXRW
YWx1ZShjb3VudE51bSwga0NGTnVtYmVySW50VHlwZSwgJmNvdW50KTsKKworICAgIHNldFdpbmRv
d1RleHQoZGlhbG9nLCBmaWVsZCwgc3RhdGljX2Nhc3Q8VUlOVD4oY291bnQpKTsKKyAgICB0b3Rh
bCArPSBjb3VudDsKK30KKwordm9pZCBXZWJLaXRMZWdhY3lCcm93c2VyV2luZG93Ojp1cGRhdGVT
dGF0aXN0aWNzKEhXTkQgZGlhbG9nKQoreworICAgIElXZWJDb3JlU3RhdGlzdGljc1B0ciB3ZWJD
b3JlU3RhdGlzdGljcyA9IHN0YXRpc3RpY3MoKTsKKyAgICBpZiAoIXdlYkNvcmVTdGF0aXN0aWNz
KQorICAgICAgICByZXR1cm47CisKKyAgICBJUHJvcGVydHlCYWdQdHIgc3RhdGlzdGljczsKKyAg
ICBIUkVTVUxUIGhyID0gd2ViQ29yZVN0YXRpc3RpY3MtPm1lbW9yeVN0YXRpc3RpY3MoJnN0YXRp
c3RpY3MuR2V0SW50ZXJmYWNlUHRyKCkpOworICAgIGlmIChGQUlMRUQoaHIpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBGYXN0TWFsbG9jLgorICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJ
RENfUkVTRVJWRURfVk0sIHN0YXRpc3RpY3MsICJGYXN0TWFsbG9jUmVzZXJ2ZWRWTUJ5dGVzIik7
CisgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19DT01NSVRURURfVk0sIHN0YXRpc3RpY3Ms
ICJGYXN0TWFsbG9jQ29tbWl0dGVkVk1CeXRlcyIpOworICAgIHNldFdpbmRvd1RleHQoZGlhbG9n
LCBJRENfRlJFRV9MSVNUX0JZVEVTLCBzdGF0aXN0aWNzLCAiRmFzdE1hbGxvY0ZyZWVMaXN0Qnl0
ZXMiKTsKKworICAgIC8vIFdlYkNvcmUgQ2FjaGUuCisjaWYgVVNFKENGKQorICAgIElXZWJDYWNo
ZVB0ciB3ZWJDYWNoZSA9IHRoaXMtPndlYkNhY2hlKCk7CisKKyAgICBpbnQgZGljdENvdW50ID0g
NjsKKyAgICBJUHJvcGVydHlCYWcqIGNhY2hlRGljdFs2XSA9IHsgMCB9OworICAgIGlmIChGQUlM
RUQod2ViQ2FjaGUtPnN0YXRpc3RpY3MoJmRpY3RDb3VudCwgY2FjaGVEaWN0KSkpCisgICAgICAg
IHJldHVybjsKKworICAgIENPTVB0cjxDRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZz4gY291bnRzLCBz
aXplcywgbGl2ZVNpemVzLCBkZWNvZGVkU2l6ZXMsIHB1cmdhYmxlU2l6ZXM7CisgICAgY291bnRz
LmFkb3B0UmVmKHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcqPihjYWNo
ZURpY3RbMF0pKTsKKyAgICBzaXplcy5hZG9wdFJlZihyZWludGVycHJldF9jYXN0PENGRGljdGlv
bmFyeVByb3BlcnR5QmFnKj4oY2FjaGVEaWN0WzFdKSk7CisgICAgbGl2ZVNpemVzLmFkb3B0UmVm
KHJlaW50ZXJwcmV0X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UHJvcGVydHlCYWcqPihjYWNoZURpY3RbMl0p
KTsKKyAgICBkZWNvZGVkU2l6ZXMuYWRvcHRSZWYocmVpbnRlcnByZXRfY2FzdDxDRkRpY3Rpb25h
cnlQcm9wZXJ0eUJhZyo+KGNhY2hlRGljdFszXSkpOworICAgIHB1cmdhYmxlU2l6ZXMuYWRvcHRS
ZWYocmVpbnRlcnByZXRfY2FzdDxDRkRpY3Rpb25hcnlQcm9wZXJ0eUJhZyo+KGNhY2hlRGljdFs0
XSkpOworCisgICAgc3RhdGljIENGU3RyaW5nUmVmIGltYWdlc0tleSA9IENGU1RSKCJpbWFnZXMi
KTsKKyAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgc3R5bGVzaGVldHNLZXkgPSBDRlNUUigic3R5bGUg
c2hlZXRzIik7CisgICAgc3RhdGljIENGU3RyaW5nUmVmIHhzbEtleSA9IENGU1RSKCJ4c2wiKTsK
KyAgICBzdGF0aWMgQ0ZTdHJpbmdSZWYgc2NyaXB0c0tleSA9IENGU1RSKCJzY3JpcHRzIik7CisK
KyAgICBpZiAoY291bnRzKSB7CisgICAgICAgIFVJTlQgdG90YWxPYmplY3RzID0gMDsKKyAgICAg
ICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19JTUFHRVNfT0JKRUNUX0NPVU5ULCBjb3VudHMt
PmRpY3Rpb25hcnkoKSwgaW1hZ2VzS2V5LCB0b3RhbE9iamVjdHMpOworICAgICAgICBzZXRXaW5k
b3dUZXh0KGRpYWxvZywgSURDX0NTU19PQkpFQ1RfQ09VTlQsIGNvdW50cy0+ZGljdGlvbmFyeSgp
LCBzdHlsZXNoZWV0c0tleSwgdG90YWxPYmplY3RzKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChk
aWFsb2csIElEQ19YU0xfT0JKRUNUX0NPVU5ULCBjb3VudHMtPmRpY3Rpb25hcnkoKSwgeHNsS2V5
LCB0b3RhbE9iamVjdHMpOworICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0pTQ19P
QkpFQ1RfQ09VTlQsIGNvdW50cy0+ZGljdGlvbmFyeSgpLCBzY3JpcHRzS2V5LCB0b3RhbE9iamVj
dHMpOworICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1RPVEFMX09CSkVDVF9DT1VO
VCwgdG90YWxPYmplY3RzKTsKKyAgICB9CisKKyAgICBpZiAoc2l6ZXMpIHsKKyAgICAgICAgVUlO
VCB0b3RhbEJ5dGVzID0gMDsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19JTUFH
RVNfQllURVMsIHNpemVzLT5kaWN0aW9uYXJ5KCksIGltYWdlc0tleSwgdG90YWxCeXRlcyk7Cisg
ICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfQ1NTX0JZVEVTLCBzaXplcy0+ZGljdGlv
bmFyeSgpLCBzdHlsZXNoZWV0c0tleSwgdG90YWxCeXRlcyk7CisgICAgICAgIHNldFdpbmRvd1Rl
eHQoZGlhbG9nLCBJRENfWFNMX0JZVEVTLCBzaXplcy0+ZGljdGlvbmFyeSgpLCB4c2xLZXksIHRv
dGFsQnl0ZXMpOworICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0pTQ19CWVRFUywg
c2l6ZXMtPmRpY3Rpb25hcnkoKSwgc2NyaXB0c0tleSwgdG90YWxCeXRlcyk7CisgICAgICAgIHNl
dFdpbmRvd1RleHQoZGlhbG9nLCBJRENfVE9UQUxfQllURVMsIHRvdGFsQnl0ZXMpOworICAgIH0K
KworICAgIGlmIChsaXZlU2l6ZXMpIHsKKyAgICAgICAgVUlOVCB0b3RhbExpdmVCeXRlcyA9IDA7
CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSU1BR0VTX0xJVkVfQ09VTlQsIGxp
dmVTaXplcy0+ZGljdGlvbmFyeSgpLCBpbWFnZXNLZXksIHRvdGFsTGl2ZUJ5dGVzKTsKKyAgICAg
ICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19DU1NfTElWRV9DT1VOVCwgbGl2ZVNpemVzLT5k
aWN0aW9uYXJ5KCksIHN0eWxlc2hlZXRzS2V5LCB0b3RhbExpdmVCeXRlcyk7CisgICAgICAgIHNl
dFdpbmRvd1RleHQoZGlhbG9nLCBJRENfWFNMX0xJVkVfQ09VTlQsIGxpdmVTaXplcy0+ZGljdGlv
bmFyeSgpLCB4c2xLZXksIHRvdGFsTGl2ZUJ5dGVzKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChk
aWFsb2csIElEQ19KU0NfTElWRV9DT1VOVCwgbGl2ZVNpemVzLT5kaWN0aW9uYXJ5KCksIHNjcmlw
dHNLZXksIHRvdGFsTGl2ZUJ5dGVzKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElE
Q19UT1RBTF9MSVZFX0NPVU5ULCB0b3RhbExpdmVCeXRlcyk7CisgICAgfQorCisgICAgaWYgKGRl
Y29kZWRTaXplcykgeworICAgICAgICBVSU5UIHRvdGFsRGVjb2RlZCA9IDA7CisgICAgICAgIHNl
dFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSU1BR0VTX0RFQ09ERURfQ09VTlQsIGRlY29kZWRTaXpl
cy0+ZGljdGlvbmFyeSgpLCBpbWFnZXNLZXksIHRvdGFsRGVjb2RlZCk7CisgICAgICAgIHNldFdp
bmRvd1RleHQoZGlhbG9nLCBJRENfQ1NTX0RFQ09ERURfQ09VTlQsIGRlY29kZWRTaXplcy0+ZGlj
dGlvbmFyeSgpLCBzdHlsZXNoZWV0c0tleSwgdG90YWxEZWNvZGVkKTsKKyAgICAgICAgc2V0V2lu
ZG93VGV4dChkaWFsb2csIElEQ19YU0xfREVDT0RFRF9DT1VOVCwgZGVjb2RlZFNpemVzLT5kaWN0
aW9uYXJ5KCksIHhzbEtleSwgdG90YWxEZWNvZGVkKTsKKyAgICAgICAgc2V0V2luZG93VGV4dChk
aWFsb2csIElEQ19KU0NfREVDT0RFRF9DT1VOVCwgZGVjb2RlZFNpemVzLT5kaWN0aW9uYXJ5KCks
IHNjcmlwdHNLZXksIHRvdGFsRGVjb2RlZCk7CisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9n
LCBJRENfVE9UQUxfREVDT0RFRCwgdG90YWxEZWNvZGVkKTsKKyAgICB9CisKKyAgICBpZiAocHVy
Z2FibGVTaXplcykgeworICAgICAgICBVSU5UIHRvdGFsUHVyZ2FibGUgPSAwOworICAgICAgICBz
ZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0lNQUdFU19QVVJHRUFCTEVfQ09VTlQsIHB1cmdhYmxl
U2l6ZXMtPmRpY3Rpb25hcnkoKSwgaW1hZ2VzS2V5LCB0b3RhbFB1cmdhYmxlKTsKKyAgICAgICAg
c2V0V2luZG93VGV4dChkaWFsb2csIElEQ19DU1NfUFVSR0VBQkxFX0NPVU5ULCBwdXJnYWJsZVNp
emVzLT5kaWN0aW9uYXJ5KCksIHN0eWxlc2hlZXRzS2V5LCB0b3RhbFB1cmdhYmxlKTsKKyAgICAg
ICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19YU0xfUFVSR0VBQkxFX0NPVU5ULCBwdXJnYWJs
ZVNpemVzLT5kaWN0aW9uYXJ5KCksIHhzbEtleSwgdG90YWxQdXJnYWJsZSk7CisgICAgICAgIHNl
dFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSlNDX1BVUkdFQUJMRV9DT1VOVCwgcHVyZ2FibGVTaXpl
cy0+ZGljdGlvbmFyeSgpLCBzY3JpcHRzS2V5LCB0b3RhbFB1cmdhYmxlKTsKKyAgICAgICAgc2V0
V2luZG93VGV4dChkaWFsb2csIElEQ19UT1RBTF9QVVJHRUFCTEUsIHRvdGFsUHVyZ2FibGUpOwor
ICAgIH0KKyNlbmRpZgorCisgICAgLy8gSmF2YVNjcmlwdCBIZWFwLgorICAgIHNldFdpbmRvd1Rl
eHQoZGlhbG9nLCBJRENfSlNDX0hFQVBfU0laRSwgc3RhdGlzdGljcywgIkphdmFTY3JpcHRIZWFw
U2l6ZSIpOworICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfSlNDX0hFQVBfRlJFRSwgc3Rh
dGlzdGljcywgIkphdmFTY3JpcHRGcmVlU2l6ZSIpOworCisgICAgVUlOVCBjb3VudDsKKyAgICBp
ZiAoU1VDQ0VFREVEKHdlYkNvcmVTdGF0aXN0aWNzLT5qYXZhU2NyaXB0T2JqZWN0c0NvdW50KCZj
b3VudCkpKQorICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1RPVEFMX0pTQ19IRUFQ
X09CSkVDVFMsIGNvdW50KTsKKyAgICBpZiAoU1VDQ0VFREVEKHdlYkNvcmVTdGF0aXN0aWNzLT5q
YXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50KCZjb3VudCkpKQorICAgICAgICBzZXRXaW5kb3dU
ZXh0KGRpYWxvZywgSURDX0dMT0JBTF9KU0NfSEVBUF9PQkpFQ1RTLCBjb3VudCk7CisgICAgaWYg
KFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+amF2YVNjcmlwdFByb3RlY3RlZE9iamVjdHND
b3VudCgmY291bnQpKSkKKyAgICAgICAgc2V0V2luZG93VGV4dChkaWFsb2csIElEQ19QUk9URUNU
RURfSlNDX0hFQVBfT0JKRUNUUywgY291bnQpOworCisgICAgLy8gRm9udCBhbmQgR2x5cGggQ2Fj
aGVzLgorICAgIGlmIChTVUNDRUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmNhY2hlZEZvbnREYXRh
Q291bnQoJmNvdW50KSkpCisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfVE9UQUxf
Rk9OVF9PQkpFQ1RTLCBjb3VudCk7CisgICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGlj
cy0+Y2FjaGVkRm9udERhdGFJbmFjdGl2ZUNvdW50KCZjb3VudCkpKQorICAgICAgICBzZXRXaW5k
b3dUZXh0KGRpYWxvZywgSURDX0lOQUNUSVZFX0ZPTlRfT0JKRUNUUywgY291bnQpOworICAgIGlm
IChTVUNDRUVERUQod2ViQ29yZVN0YXRpc3RpY3MtPmdseXBoUGFnZUNvdW50KCZjb3VudCkpKQor
ICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX0dMWVBIX1BBR0VTLCBjb3VudCk7CisK
KyAgICAvLyBTaXRlIEljb24gRGF0YWJhc2UuCisgICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3Rh
dGlzdGljcy0+aWNvblBhZ2VVUkxNYXBwaW5nQ291bnQoJmNvdW50KSkpCisgICAgICAgIHNldFdp
bmRvd1RleHQoZGlhbG9nLCBJRENfUEFHRV9VUkxfTUFQUElOR1MsIGNvdW50KTsKKyAgICBpZiAo
U1VDQ0VFREVEKHdlYkNvcmVTdGF0aXN0aWNzLT5pY29uUmV0YWluZWRQYWdlVVJMQ291bnQoJmNv
dW50KSkpCisgICAgICAgIHNldFdpbmRvd1RleHQoZGlhbG9nLCBJRENfUkVUQUlORURfUEFHRV9V
UkxTLCBjb3VudCk7CisgICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlzdGljcy0+aWNvblJl
Y29yZENvdW50KCZjb3VudCkpKQorICAgICAgICBzZXRXaW5kb3dUZXh0KGRpYWxvZywgSURDX1NJ
VEVfSUNPTl9SRUNPUkRTLCBjb3VudCk7CisgICAgaWYgKFNVQ0NFRURFRCh3ZWJDb3JlU3RhdGlz
dGljcy0+aWNvbnNXaXRoRGF0YUNvdW50KCZjb3VudCkpKQorICAgICAgICBzZXRXaW5kb3dUZXh0
KGRpYWxvZywgSURDX1NJVEVfSUNPTlNfV0lUSF9EQVRBLCBjb3VudCk7Cit9CisKK3ZvaWQgV2Vi
S2l0TGVnYWN5QnJvd3NlcldpbmRvdzo6c2V0UHJlZmVyZW5jZShVSU5UIG1lbnVJRCwgYm9vbCBl
bmFibGUpCit7CisgICAgaWYgKCFzdGFuZGFyZFByZWZlcmVuY2VzKCkgfHwgIXByaXZhdGVQcmVm
ZXJlbmNlcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKG1lbnVJRCkgeworICAg
IGNhc2UgSURNX0FWRk9VTkRBVElPTjoKKyAgICAgICAgc3RhbmRhcmRQcmVmZXJlbmNlcygpLT5z
ZXRBVkZvdW5kYXRpb25FbmFibGVkKGVuYWJsZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SURNX0FDQ19DT01QT1NJVElORzoKKyAgICAgICAgcHJpdmF0ZVByZWZlcmVuY2VzKCktPnNldEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKGVuYWJsZSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSURNX1dLX0ZVTExTQ1JFRU46CisgICAgICAgIHByaXZhdGVQcmVmZXJlbmNlcygpLT5z
ZXRGdWxsU2NyZWVuRW5hYmxlZChlbmFibGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElE
TV9DT01QT1NJVElOR19CT1JERVJTOgorICAgICAgICBwcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0
U2hvd0RlYnVnQm9yZGVycyhlbmFibGUpOworICAgICAgICBwcml2YXRlUHJlZmVyZW5jZXMoKS0+
c2V0U2hvd1JlcGFpbnRDb3VudGVyKGVuYWJsZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SURNX0RFQlVHX0lORk9fTEFZRVI6CisgICAgICAgIHByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRT
aG93VGlsZWRTY3JvbGxpbmdJbmRpY2F0b3IoZW5hYmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBJRE1fSU5WRVJUX0NPTE9SUzoKKyAgICAgICAgcHJpdmF0ZVByZWZlcmVuY2VzKCktPnNl
dFNob3VsZEludmVydENvbG9ycyhlbmFibGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElE
TV9ESVNBQkxFX0lNQUdFUzoKKyAgICAgICAgc3RhbmRhcmRQcmVmZXJlbmNlcygpLT5zZXRMb2Fk
c0ltYWdlc0F1dG9tYXRpY2FsbHkoIWVuYWJsZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SURNX0RJU0FCTEVfU1RZTEVTOgorICAgICAgICBwcml2YXRlUHJlZmVyZW5jZXMoKS0+c2V0QXV0
aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoIWVuYWJsZSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSURNX0RJU0FCTEVfSkFWQVNDUklQVDoKKyAgICAgICAgc3RhbmRhcmRQcmVmZXJlbmNlcygp
LT5zZXRKYXZhU2NyaXB0RW5hYmxlZCghZW5hYmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJRE1fRElTQUJMRV9MT0NBTF9GSUxFX1JFU1RSSUNUSU9OUzoKKyAgICAgICAgcHJpdmF0ZVBy
ZWZlcmVuY2VzKCktPnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGVuYWJsZSk7
CisgICAgICAgIHByaXZhdGVQcmVmZXJlbmNlcygpLT5zZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmls
ZVVSTHMoZW5hYmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvTWluaUJyb3dzZXIvd2luL1dlYktpdExlZ2FjeUJyb3dzZXJXaW5kb3cuaCBiL1Rvb2xzL01p
bmlCcm93c2VyL3dpbi9XZWJLaXRMZWdhY3lCcm93c2VyV2luZG93LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzRi
MGYzMjQwNWNmOWEwZjQwYmEwMWRmZGFhMTBmNzRkNDExYTVmNwotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL01pbmlCcm93c2VyL3dpbi9XZWJLaXRMZWdhY3lCcm93c2VyV2luZG93LmgKQEAgLTAs
MCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisjaW5jbHVkZSAiQnJvd3NlcldpbmRvdy5oIgorI2luY2x1
ZGUgIlBhZ2VMb2FkVGVzdENsaWVudC5oIgorI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJLaXQu
aD4KKyNpbmNsdWRlIDxjb21pcC5oPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx2ZWN0
b3I+CisKK3R5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8SVdlYkZyYW1lLCAmX191dWlkb2Yo
SVdlYkZyYW1lKT4+IElXZWJGcmFtZVB0cjsKK3R5cGVkZWYgX2NvbV9wdHJfdDxfY29tX0lJSUQ8
SVdlYlZpZXcsICZfX3V1aWRvZihJV2ViVmlldyk+PiBJV2ViVmlld1B0cjsKK3R5cGVkZWYgX2Nv
bV9wdHJfdDxfY29tX0lJSUQ8SVdlYlZpZXdQcml2YXRlMiwgJl9fdXVpZG9mKElXZWJWaWV3UHJp
dmF0ZTIpPj4gSVdlYlZpZXdQcml2YXRlUHRyOwordHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJ
RDxJV2ViRnJhbWVMb2FkRGVsZWdhdGUsICZfX3V1aWRvZihJV2ViRnJhbWVMb2FkRGVsZWdhdGUp
Pj4gSVdlYkZyYW1lTG9hZERlbGVnYXRlUHRyOwordHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJ
RDxJV2ViSGlzdG9yeSwgJl9fdXVpZG9mKElXZWJIaXN0b3J5KT4+IElXZWJIaXN0b3J5UHRyOwor
dHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViSGlzdG9yeUl0ZW0sICZfX3V1aWRvZihJ
V2ViSGlzdG9yeUl0ZW0pPj4gSVdlYkhpc3RvcnlJdGVtUHRyOwordHlwZWRlZiBfY29tX3B0cl90
PF9jb21fSUlJRDxJV2ViUHJlZmVyZW5jZXMsICZfX3V1aWRvZihJV2ViUHJlZmVyZW5jZXMpPj4g
SVdlYlByZWZlcmVuY2VzUHRyOwordHlwZWRlZiBfY29tX3B0cl90PF9jb21fSUlJRDxJV2ViUHJl
ZmVyZW5jZXNQcml2YXRlMywgJl9fdXVpZG9mKElXZWJQcmVmZXJlbmNlc1ByaXZhdGUzKT4+IElX
ZWJQcmVmZXJlbmNlc1ByaXZhdGVQdHI7Cit0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElX
ZWJVSURlbGVnYXRlLCAmX191dWlkb2YoSVdlYlVJRGVsZWdhdGUpPj4gSVdlYlVJRGVsZWdhdGVQ
dHI7Cit0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElBY2Nlc3NpYmlsaXR5RGVsZWdhdGUs
ICZfX3V1aWRvZihJQWNjZXNzaWJpbGl0eURlbGVnYXRlKT4+IElBY2Nlc3NpYmlsaXR5RGVsZWdh
dGVQdHI7Cit0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJJbnNwZWN0b3IsICZfX3V1
aWRvZihJV2ViSW5zcGVjdG9yKT4+IElXZWJJbnNwZWN0b3JQdHI7Cit0eXBlZGVmIF9jb21fcHRy
X3Q8X2NvbV9JSUlEPElXZWJDb3JlU3RhdGlzdGljcywgJl9fdXVpZG9mKElXZWJDb3JlU3RhdGlz
dGljcyk+PiBJV2ViQ29yZVN0YXRpc3RpY3NQdHI7Cit0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9J
SUlEPElXZWJDYWNoZSwgJl9fdXVpZG9mKElXZWJDYWNoZSk+PiBJV2ViQ2FjaGVQdHI7Cit0eXBl
ZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZSwgJl9fdXVp
ZG9mKElXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZSk+PiBJV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGVQ
dHI7Cit0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJEb3dubG9hZERlbGVnYXRlLCAm
X191dWlkb2YoSVdlYkRvd25sb2FkRGVsZWdhdGUpPj4gSVdlYkRvd25sb2FkRGVsZWdhdGVQdHI7
Cit0eXBlZGVmIF9jb21fcHRyX3Q8X2NvbV9JSUlEPElXZWJGcmFtZVByaXZhdGUsICZfX3V1aWRv
ZihJV2ViRnJhbWVQcml2YXRlKT4+IElXZWJGcmFtZVByaXZhdGVQdHI7CisKK2NsYXNzIFdlYktp
dExlZ2FjeUJyb3dzZXJXaW5kb3cgOiBwdWJsaWMgQnJvd3NlcldpbmRvdyB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxCcm93c2VyV2luZG93PiBjcmVhdGUoSFdORCBtYWluV25kLCBIV05EIHVy
bEJhclduZCwgYm9vbCB1c2VMYXllcmVkV2ViVmlldyA9IGZhbHNlLCBib29sIHBhZ2VMb2FkVGVz
dGluZyA9IGZhbHNlKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQWNjZXNzaWJpbGl0
eURlbGVnYXRlOworICAgIGZyaWVuZCBjbGFzcyBNaW5pQnJvd3NlcldlYkhvc3Q7CisgICAgZnJp
ZW5kIGNsYXNzIFByaW50V2ViVUlEZWxlZ2F0ZTsKKyAgICBmcmllbmQgY2xhc3MgV2ViRG93bmxv
YWREZWxlZ2F0ZTsKKyAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VMb2FkRGVsZWdhdGU7CisgICAg
ZnJpZW5kIGNsYXNzIFBhZ2VMb2FkVGVzdENsaWVudDsKKworICAgIFVMT05HIEFkZFJlZigpOwor
ICAgIFVMT05HIFJlbGVhc2UoKTsKKworICAgIEhSRVNVTFQgaW5pdCgpOworICAgIEhSRVNVTFQg
cHJlcGFyZVZpZXdzKEhXTkQgbWFpblduZCwgY29uc3QgUkVDVCYgY2xpZW50UmVjdCk7CisKKyAg
ICBIUkVTVUxUIGxvYWRIVE1MU3RyaW5nKGNvbnN0IEJTVFImKTsKKyAgICBIUkVTVUxUIGxvYWRV
UkwoY29uc3QgQlNUUiYgcGFzc2VkVVJMKTsKKworICAgIHZvaWQgc2hvd0xhc3RWaXNpdGVkU2l0
ZXMoSVdlYlZpZXcmKTsKKyAgICB2b2lkIGxhdW5jaEluc3BlY3RvcigpOworICAgIHZvaWQgbmF2
aWdhdGVGb3J3YXJkT3JCYWNrd2FyZChVSU5UIG1lbnVJRCk7CisgICAgdm9pZCBuYXZpZ2F0ZVRv
SGlzdG9yeShVSU5UIG1lbnVJRCk7CisgICAgdm9pZCBleGl0UHJvZ3JhbSgpOworICAgIGJvb2wg
c2VlZEluaXRpYWxEZWZhdWx0UHJlZmVyZW5jZXMoKTsKKyAgICBib29sIHNldFRvRGVmYXVsdFBy
ZWZlcmVuY2VzKCk7CisKKyAgICBIUkVTVUxUIHNldEZyYW1lTG9hZERlbGVnYXRlKElXZWJGcmFt
ZUxvYWREZWxlZ2F0ZSopOworICAgIEhSRVNVTFQgc2V0RnJhbWVMb2FkRGVsZWdhdGVQcml2YXRl
KElXZWJGcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUqKTsKKyAgICBIUkVTVUxUIHNldFVJRGVsZWdh
dGUoSVdlYlVJRGVsZWdhdGUqKTsKKyAgICBIUkVTVUxUIHNldEFjY2Vzc2liaWxpdHlEZWxlZ2F0
ZShJQWNjZXNzaWJpbGl0eURlbGVnYXRlKik7CisgICAgSFJFU1VMVCBzZXRSZXNvdXJjZUxvYWRE
ZWxlZ2F0ZShJV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGUqKTsKKyAgICBIUkVTVUxUIHNldERvd25s
b2FkRGVsZWdhdGUoSVdlYkRvd25sb2FkRGVsZWdhdGVQdHIpOworCisgICAgSVdlYlByZWZlcmVu
Y2VzUHRyIHN0YW5kYXJkUHJlZmVyZW5jZXMoKSB7IHJldHVybiBtX3N0YW5kYXJkUHJlZmVyZW5j
ZXM7ICB9CisgICAgSVdlYlByZWZlcmVuY2VzUHJpdmF0ZVB0ciBwcml2YXRlUHJlZmVyZW5jZXMo
KSB7IHJldHVybiBtX3ByZWZzUHJpdmF0ZTsgfQorICAgIElXZWJGcmFtZVB0ciBtYWluRnJhbWUo
KTsKKyAgICBJV2ViQ29yZVN0YXRpc3RpY3NQdHIgc3RhdGlzdGljcygpIHsgcmV0dXJuIG1fc3Rh
dGlzdGljczsgfQorICAgIElXZWJDYWNoZVB0ciB3ZWJDYWNoZSgpIHsgcmV0dXJuIG1fd2ViQ2Fj
aGU7ICB9CisgICAgSVdlYlZpZXdQdHIgd2ViVmlldygpIHsgcmV0dXJuIG1fd2ViVmlldzsgfQor
CisgICAgYm9vbCBoYXNXZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gISFtX3dlYlZpZXc7IH0KKyAg
ICBib29sIHVzZXNMYXllcmVkV2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlTGF5ZXJlZFdl
YlZpZXc7IH0KKyAgICBib29sIGdvQmFjaygpOworICAgIGJvb2wgZ29Gb3J3YXJkKCk7CisKKyAg
ICB2b2lkIHNldFVzZXJBZ2VudChVSU5UIG1lbnVJRCk7CisgICAgdm9pZCBzZXRVc2VyQWdlbnQo
X2JzdHJfdCYgY3VzdG9tVUFTdHJpbmcpOworICAgIF9ic3RyX3QgdXNlckFnZW50KCk7CisKKyAg
ICBQYWdlTG9hZFRlc3RDbGllbnQmIHBhZ2VMb2FkVGVzdENsaWVudCgpIHsgcmV0dXJuICptX3Bh
Z2VMb2FkVGVzdENsaWVudDsgfQorCisgICAgdm9pZCByZXNldFpvb20oKTsKKyAgICB2b2lkIHpv
b21JbigpOworICAgIHZvaWQgem9vbU91dCgpOworCisgICAgdm9pZCBzaG93TGF5ZXJUcmVlKCk7
CisKKyAgICBIV05EIGh3bmQoKSB7IHJldHVybiBtX3ZpZXdXbmQ7IH0KKworICAgIHZvaWQgcHJp
bnQoKTsKKyAgICB2b2lkIHVwZGF0ZVN0YXRpc3RpY3MoSFdORCBkaWFsb2cpOworICAgIHZvaWQg
c2V0UHJlZmVyZW5jZShVSU5UIG1lbnVJRCwgYm9vbCBlbmFibGUpOworCisgICAgV2ViS2l0TGVn
YWN5QnJvd3NlcldpbmRvdyhIV05EIG1haW5XbmQsIEhXTkQgdXJsQmFyV25kLCBib29sIHVzZUxh
eWVyZWRXZWJWaWV3LCBib29sIHBhZ2VMb2FkVGVzdGluZyk7CisgICAgdm9pZCBzdWJjbGFzc0Zv
ckxheWVyZWRXaW5kb3coKTsKKyAgICBib29sIHNldENhY2hlRm9sZGVyKCk7CisKKyAgICBzdGQ6
OnZlY3RvcjxJV2ViSGlzdG9yeUl0ZW1QdHI+IG1faGlzdG9yeUl0ZW1zOworCisgICAgc3RkOjp1
bmlxdWVfcHRyPFBhZ2VMb2FkVGVzdENsaWVudD4gbV9wYWdlTG9hZFRlc3RDbGllbnQ7CisKKyAg
ICBJV2ViVmlld1B0ciBtX3dlYlZpZXc7CisgICAgSVdlYlZpZXdQcml2YXRlUHRyIG1fd2ViVmll
d1ByaXZhdGU7CisKKyAgICBJV2ViSGlzdG9yeVB0ciBtX3dlYkhpc3Rvcnk7CisgICAgSVdlYklu
c3BlY3RvclB0ciBtX2luc3BlY3RvcjsKKyAgICBJV2ViUHJlZmVyZW5jZXNQdHIgbV9zdGFuZGFy
ZFByZWZlcmVuY2VzOworICAgIElXZWJQcmVmZXJlbmNlc1ByaXZhdGVQdHIgbV9wcmVmc1ByaXZh
dGU7CisKKyAgICBJV2ViRnJhbWVMb2FkRGVsZWdhdGVQdHIgbV9mcmFtZUxvYWREZWxlZ2F0ZTsK
KyAgICBJV2ViVUlEZWxlZ2F0ZVB0ciBtX3VpRGVsZWdhdGU7CisgICAgSUFjY2Vzc2liaWxpdHlE
ZWxlZ2F0ZVB0ciBtX2FjY2Vzc2liaWxpdHlEZWxlZ2F0ZTsKKyAgICBJV2ViUmVzb3VyY2VMb2Fk
RGVsZWdhdGVQdHIgbV9yZXNvdXJjZUxvYWREZWxlZ2F0ZTsKKyAgICBJV2ViRG93bmxvYWREZWxl
Z2F0ZVB0ciBtX2Rvd25sb2FkRGVsZWdhdGU7CisKKyAgICBJV2ViQ29yZVN0YXRpc3RpY3NQdHIg
bV9zdGF0aXN0aWNzOworICAgIElXZWJDYWNoZVB0ciBtX3dlYkNhY2hlOworCisgICAgSFdORCBt
X2hNYWluV25kIHsgbnVsbHB0ciB9OworICAgIEhXTkQgbV9oVVJMQmFyV25kIHsgbnVsbHB0ciB9
OworICAgIEhXTkQgbV92aWV3V25kIHsgbnVsbHB0ciB9OworCisgICAgYm9vbCBtX3VzZUxheWVy
ZWRXZWJWaWV3OworfTsK
</data>
<flag name="review"
          id="360385"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>