<?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>131552</bug_id>
          
          <creation_ts>2014-04-11 11:42:16 -0700</creation_ts>
          <short_desc>Wrap CSS length conversion arguments in an object</short_desc>
          <delta_ts>2014-04-29 09:52:35 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>https://codereview.chromium.org/64293008/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>87846</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Bem Jones-Bey">bjonesbe</reporter>
          <assigned_to name="Bem Jones-Bey">bjonesbe</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>bunhere</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kling</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>999953</commentid>
    <comment_count>0</comment_count>
    <who name="Bem Jones-Bey">bjonesbe</who>
    <bug_when>2014-04-11 11:42:16 -0700</bug_when>
    <thetext>This is a port of a patch from Blink by timloh@chromium.org</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>999961</commentid>
    <comment_count>1</comment_count>
      <attachid>229146</attachid>
    <who name="Bem Jones-Bey">bjonesbe</who>
    <bug_when>2014-04-11 11:53:15 -0700</bug_when>
    <thetext>Created attachment 229146
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>999963</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-11 11:55:46 -0700</bug_when>
    <thetext>Attachment 229146 did not pass style-queue:


ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:217:  color_indexMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:260:  aspect_ratioMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:274:  device_aspect_ratioMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:318:  device_pixel_ratioMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:365:  device_heightMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:378:  device_widthMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:427:  min_colorMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:432:  max_colorMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:437:  min_color_indexMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:442:  max_color_indexMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:447:  min_monochromeMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:452:  max_monochromeMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:457:  min_aspect_ratioMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:462:  max_aspect_ratioMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:467:  min_device_aspect_ratioMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:472:  max_device_aspect_ratioMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:477:  min_device_pixel_ratioMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:482:  max_device_pixel_ratioMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:487:  min_heightMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:492:  max_heightMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:497:  min_widthMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:502:  max_widthMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:507:  min_device_heightMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:512:  max_device_heightMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:517:  min_device_widthMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:522:  max_device_widthMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:527:  min_resolutionMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:532:  max_resolutionMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:555:  transform_2dMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:564:  transform_3dMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:590:  view_modeMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/css/MediaQueryEvaluator.cpp:635:  video_playable_inlineMediaFeatureEval is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 32 in 26 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>1004839</commentid>
    <comment_count>3</comment_count>
      <attachid>229146</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-04-28 19:45:04 -0700</bug_when>
    <thetext>Comment on attachment 229146
Patch

This look reasonable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004982</commentid>
    <comment_count>4</comment_count>
      <attachid>229146</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-29 09:37:12 -0700</bug_when>
    <thetext>Comment on attachment 229146
Patch

Clearing flags on attachment: 229146

Committed r167937: &lt;http://trac.webkit.org/changeset/167937&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004983</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-29 09:37:19 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004986</commentid>
    <comment_count>6</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2014-04-29 09:38:00 -0700</bug_when>
    <thetext>&gt;particular adding a RenderView for resolving viewport units at style
My only concern was whether doing any unnecessary renderView-&gt;viewportSize() calls in order to eliminate the RenderView* parameter had any performance impact, but apparently this patch doesnt do that change at all (so not sure whether the changelog entry reflects what this patch does)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004993</commentid>
    <comment_count>7</comment_count>
    <who name="Bem Jones-Bey">bjonesbe</who>
    <bug_when>2014-04-29 09:51:19 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt;particular adding a RenderView for resolving viewport units at style
&gt; My only concern was whether doing any unnecessary renderView-&gt;viewportSize() calls in order to eliminate the RenderView* parameter had any performance impact, but apparently this patch doesnt do that change at all (so not sure whether the changelog entry reflects what this patch does)

The RenderView change will happen in a follow up patch, the changelog here just mentions it as rationale for why we&apos;d want to have a class for these arguments.

I will be posting the followup change to Bug 87846. While the current patch up there passes around IntSize, given the performance concerns that you voiced, I will be changing that to be a RenderView and to only make the viewportSize() call when resolving the actual viewport units.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004995</commentid>
    <comment_count>8</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2014-04-29 09:52:35 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; &gt;particular adding a RenderView for resolving viewport units at style
&gt; &gt; My only concern was whether doing any unnecessary renderView-&gt;viewportSize() calls in order to eliminate the RenderView* parameter had any performance impact, but apparently this patch doesnt do that change at all (so not sure whether the changelog entry reflects what this patch does)
&gt; 
&gt; The RenderView change will happen in a follow up patch, the changelog here just mentions it as rationale for why we&apos;d want to have a class for these arguments.
&gt; 
&gt; I will be posting the followup change to Bug 87846. While the current patch up there passes around IntSize, given the performance concerns that you voiced, I will be changing that to be a RenderView and to only make the viewportSize() call when resolving the actual viewport units.

ok, cool. Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229146</attachid>
            <date>2014-04-11 11:53:15 -0700</date>
            <delta_ts>2014-04-29 09:37:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131552-20140411115341.patch</filename>
            <type>text/plain</type>
            <size>134602</size>
            <attacher name="Bem Jones-Bey">bjonesbe</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY3MTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzk2YjFkMTg3YjY5YTZj
YTg2MjI4ZDA0MmY2ZGIxN2FiYTQ4OWY0Ny4uNmFjMzMxMDM2Y2JkNmI1M2YxYTliYzlmYTA3ZDU0
YTkzOTFkMzU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1OCBAQAorMjAxNC0wNC0xMSAgQmVt
IEpvbmVzLUJleSAgPGJqb25lc2JlQGFkb2JlLmNvbT4KKworICAgICAgICBXcmFwIENTUyBsZW5n
dGggY29udmVyc2lvbiBhcmd1bWVudHMgaW4gYW4gb2JqZWN0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE1NTIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBjbGFz
cyBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIHRvIHdyYXAgdGhlCisgICAgICAgIGRhdGEgcmVx
dWlyZWQgdG8gY29udmVydCBDU1MgbGVuZ3RocyB0byBMZW5ndGhzLiBUaGlzIHNpbXBsaWZpZXMg
dGhlCisgICAgICAgIHBsdW1iaW5nIHRoYXQgZ29lcyBvbiB3aGVuZXZlciB3ZSBuZWVkIHRvIHJl
c29sdmUgQ1NTIGxlbmd0aHMgYW5kCisgICAgICAgIG1ha2VzIGl0IGVhc2llciB0byB1cGRhdGUg
dGhlIGFyZ3VtZW50cyBuZWVkZWQgZm9yIHJlc29sdmluZyB0aGVzZSAoaW4KKyAgICAgICAgcGFy
dGljdWxhciBhZGRpbmcgYSBSZW5kZXJWaWV3IGZvciByZXNvbHZpbmcgdmlld3BvcnQgdW5pdHMg
YXQgc3R5bGUKKyAgICAgICAgcmVjYWxjIHRpbWU7IHJlbW92aW5nIHRoZSBjb21wdXRpbmdGb250
U2l6ZSBib29sIGFsc28gYXBwZWFycworICAgICAgICBwb3NzaWJsZSkuCisKKyAgICAgICAgTm90
ZSB0aGF0IHRoZSB6b29tIGFyZ3VtZW50LCB3aGljaCB3YXMgcHJldmlvdXNseSBhIGZsb2F0IGlu
IHNvbWUKKyAgICAgICAgcGxhY2VzIGFuZCBhIGRvdWJsZSBpbiBvdGhlcnMgaXMgbm93IGEgZmxv
YXQuCisKKyAgICAgICAgVGhpcyBpcyBhIHBvcnQgb2YgYSBCbGluayBwYXRjaCBieSB0aW1sb2hA
Y2hyb21pdW0ub3JnLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdl
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9q
L1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29udmVydFRvTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0xl
bmd0aFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ2VudGVyQ29vcmRpbmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpjc3NWYWx1ZVRvQmFzaWNTaGFwZVJhZGl1cyk6CisgICAgICAg
IChXZWJDb3JlOjpiYXNpY1NoYXBlRm9yVmFsdWUpOgorICAgICAgICAqIGNzcy9CYXNpY1NoYXBl
RnVuY3Rpb25zLmg6CisgICAgICAgICogY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjb21wdXRlTGVuZ3RoUHgpOgorICAgICAgICAo
V2ViQ29yZTo6ZGV0ZXJtaW5lQ2F0ZWdvcnkpOgorICAgICAgICAqIGNzcy9DU1NDYWxjdWxhdGlv
blZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmNyZWF0ZUNhbGN1bGF0
aW9uVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZhbHVlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0dyYWRpZW50VmFsdWU6OmFkZFN0b3BzKToKKyAgICAgICAgKFdlYkNvcmU6
OnBvc2l0aW9uRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRpZW50VmFsdWU6
OmNvbXB1dGVFbmRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NMaW5lYXJHcmFkaWVudFZh
bHVlOjpjcmVhdGVHcmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NSYWRpYWxHcmFkaWVu
dFZhbHVlOjpyZXNvbHZlUmFkaXVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1JhZGlhbEdyYWRp
ZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KToKKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1
ZS5oOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aERvdWJsZSk6CisgICAgICAgICogY3Nz
L0NTU1ByaW1pdGl2ZVZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFw
cGluZ3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpjb252ZXJ0VG9M
ZW5ndGgpOgorICAgICAgICAqIGNzcy9DU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhOjp6b29tKToK
KyAgICAgICAgKiBjc3MvQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OkNTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6
c3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTo6cm9v
dFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE6OmNv
bXB1dGluZ0ZvbnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGE6OmNvcHlXaXRoQWRqdXN0ZWRab29tKToKKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1h
cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpDU1NUb1N0eWxlTWFwKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxYUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbFlQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVF1YWQpOgorICAgICAgICAqIGNzcy9D
U1NUb1N0eWxlTWFwLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpDU1NUb1N0
eWxlTWFwKTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QXV0bzo6YXBwbHlWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcDo6Y29udmVydFRvTGVuZ3RoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlMZW5ndGg6OmFwcGx5VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUJvcmRlclJhZGl1czo6YXBwbHlWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q29tcHV0ZUxlbmd0aDo6YXBwbHlWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFNpemU6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5TWFycXVlZUluY3JlbWVudDo6YXBw
bHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5TGluZUhlaWdodDo6YXBw
bHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5TGluZUhlaWdodEZvcklP
U1RleHRBdXRvc2l6aW5nOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJv
cGVydHlXb3JkU3BhY2luZzo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5UGFnZVNpemU6Om1tTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlQYWdlU2l6ZTo6aW5jaExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
UGFnZVNpemU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVZl
cnRpY2FsQWxpZ246OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUNsaXBQYXRoOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlT
aGFwZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5VGV4dElu
ZGVudDo6YXBwbHlWYWx1ZSk6CisgICAgICAgICogY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JNZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbG9yX2luZGV4TWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjpt
b25vY2hyb21lTWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjpvcmllbnRhdGlv
bk1lZGlhRmVhdHVyZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6YXNwZWN0X3JhdGlvTWVkaWFG
ZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VfYXNwZWN0X3JhdGlvTWVkaWFG
ZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VfcGl4ZWxfcmF0aW9NZWRpYUZl
YXR1cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdXRpb25NZWRpYUZlYXR1cmVFdmFs
KToKKyAgICAgICAgKFdlYkNvcmU6OmdyaWRNZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbXB1dGVMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6ZGV2aWNlX2hlaWdodE1l
ZGlhRmVhdHVyZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6ZGV2aWNlX3dpZHRoTWVkaWFGZWF0
dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjpoZWlnaHRNZWRpYUZlYXR1cmVFdmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OndpZHRoTWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3Jl
OjptaW5fY29sb3JNZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6Om1heF9jb2xv
ck1lZGlhRmVhdHVyZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6bWluX2NvbG9yX2luZGV4TWVk
aWFGZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjptYXhfY29sb3JfaW5kZXhNZWRpYUZl
YXR1cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6Om1pbl9tb25vY2hyb21lTWVkaWFGZWF0dXJl
RXZhbCk6CisgICAgICAgIChXZWJDb3JlOjptYXhfbW9ub2Nocm9tZU1lZGlhRmVhdHVyZUV2YWwp
OgorICAgICAgICAoV2ViQ29yZTo6bWluX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwpOgor
ICAgICAgICAoV2ViQ29yZTo6bWF4X2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwpOgorICAg
ICAgICAoV2ViQ29yZTo6bWluX2RldmljZV9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKToK
KyAgICAgICAgKFdlYkNvcmU6Om1heF9kZXZpY2VfYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlRXZh
bCk6CisgICAgICAgIChXZWJDb3JlOjptaW5fZGV2aWNlX3BpeGVsX3JhdGlvTWVkaWFGZWF0dXJl
RXZhbCk6CisgICAgICAgIChXZWJDb3JlOjptYXhfZGV2aWNlX3BpeGVsX3JhdGlvTWVkaWFGZWF0
dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjptaW5faGVpZ2h0TWVkaWFGZWF0dXJlRXZhbCk6
CisgICAgICAgIChXZWJDb3JlOjptYXhfaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAg
IChXZWJDb3JlOjptaW5fd2lkdGhNZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6
Om1heF93aWR0aE1lZGlhRmVhdHVyZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6bWluX2Rldmlj
ZV9oZWlnaHRNZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6Om1heF9kZXZpY2Vf
aGVpZ2h0TWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjptaW5fZGV2aWNlX3dp
ZHRoTWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjptYXhfZGV2aWNlX3dpZHRo
TWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjptaW5fcmVzb2x1dGlvbk1lZGlh
RmVhdHVyZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6bWF4X3Jlc29sdXRpb25NZWRpYUZlYXR1
cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OmFuaW1hdGlvbk1lZGlhRmVhdHVyZUV2YWwpOgor
ICAgICAgICAoV2ViQ29yZTo6dHJhbnNpdGlvbk1lZGlhRmVhdHVyZUV2YWwpOgorICAgICAgICAo
V2ViQ29yZTo6dHJhbnNmb3JtXzJkTWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3Jl
Ojp0cmFuc2Zvcm1fM2RNZWRpYUZlYXR1cmVFdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OnZpZXdf
bW9kZU1lZGlhRmVhdHVyZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6dmlkZW9fcGxheWFibGVf
aW5saW5lTWVkaWFGZWF0dXJlRXZhbCk6CisgICAgICAgIChXZWJDb3JlOjpob3Zlck1lZGlhRmVh
dHVyZUV2YWwpOgorICAgICAgICAoV2ViQ29yZTo6cG9pbnRlck1lZGlhRmVhdHVyZUV2YWwpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeUV2YWx1YXRvcjo6ZXZhbCk6CisgICAgICAgICog
Y3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlTVkdQcm9wZXJ0eSk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmNsZWFyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjppbml0Rm9yU3R5bGVSZXNvbHZlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbnZlcnRUb0ludExlbmd0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb252ZXJ0VG9GbG9hdExlbmd0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyk6CisgICAgICAgICogY3NzL1N0eWxl
UmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y3NzVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSk6CisgICAgICAgICogY3NzL1RyYW5zZm9ybUZ1bmN0aW9ucy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9GbG9hdExlbmd0aCk6CisgICAgICAgIChXZWJD
b3JlOjp0cmFuc2Zvcm1zRm9yVmFsdWUpOgorICAgICAgICAqIGNzcy9UcmFuc2Zvcm1GdW5jdGlv
bnMuaDoKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYktpdENTU01hdHJpeDo6c2V0TWF0cml4VmFsdWUpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Q29tbW9uQnV0dG9u
UGFkZGluZ1RvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OmFkanVz
dEJ1dHRvblN0eWxlKToKKwogMjAxNC0wNC0xMCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5j
b20+CiAKICAgICAgICAgV2ViR0w6IG5lZWQgZXJyb3IgY2hlY2tpbmcgYWZ0ZXIgdGV4dHVyZSB1
cGxvYWRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDcxZmUzM2U1NmYyYjQ0ZWU3Y2EwMjZlNjkw
YzdkMzJlYzc1MWZhOTYuLmJlYzJkMDhkZjg3MWExNGE3ZTQxZTkxZWIxNzZkYjkyZmVkY2NhZGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMjQwLDYgKzEyNDAsNyBAQCBzZXQoV2ViQ29yZV9T
T1VSQ0VTCiAgICAgY3NzL0NTU1N0eWxlU2hlZXQuY3BwCiAgICAgY3NzL0NTU1N1cHBvcnRzUnVs
ZS5jcHAKICAgICBjc3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5jcHAKKyAgICBjc3MvQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YS5jcHAKICAgICBjc3MvQ1NTVG9TdHlsZU1hcC5jcHAKICAgICBj
c3MvQ1NTVW5pY29kZVJhbmdlVmFsdWUuY3BwCiAgICAgY3NzL0NTU1ZhbHVlLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXggODY3ZmMw
YzY3YmI2N2Q5M2NjODE2YWVhMzIyNmUxNjlhMGIyYjdlYS4uMWIyMjZlY2Q0ODNhMTQyNTdlOGE3
MTkxYTY0NDAyYzMxN2M0MDBhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qCkBAIC05NTEyLDYgKzk1MTIsNyBAQAogICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJv
ZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICA8L0NsQ29tcGlsZT4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGNzc1xDU1NUb1N0eWxlTWFwLmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGNzc1xDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGNzc1xDU1NVbmljb2RlUmFuZ2VWYWx1
ZS5jcHAiPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWls
ZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgpAQCAt
MTk4OTIsNiArMTk4OTMsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cY3NzXENTU1N1
cHBvcnRzUnVsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cY3NzXENTU1RpbWlu
Z0Z1bmN0aW9uVmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNzc1xDU1NU
b1N0eWxlTWFwLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxjc3NcQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cY3NzXENT
U1VuaWNvZGVSYW5nZVZhbHVlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxjc3Nc
Q1NTVW5rbm93blJ1bGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNzc1xDU1NW
YWx1ZS5oIiAvPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDZhZDA5N2MyZmFlMjNjYTlhY2M0MTk4M2IwMGY1NWE0NjgwNjQ1YWUu
LmU5N2ZiNjA3MjQwNjI2MjUzYjBiNTUxNjY5ZDQ5YjkxOTdjZGE4MTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM1NjIsNiAr
MzU2Miw4IEBACiAJCTlBMUI2Rjk3MTU4ODY5QzgwMDExQThDNCAvKiBKU0RPTVN0cmluZ0xpc3RD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OUExQjZGOTYxNTg4NjlDODAwMTFBOEM0IC8qIEpTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAgKi87
IH07CiAJCTlBNTI4RTgzMTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUE1MjhFODExN0Q3
RjUyRjAwQUE5NTE4IC8qIEZsb2F0aW5nT2JqZWN0cy5jcHAgKi87IH07CiAJCTlBNTI4RTg0MTdE
N0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlBNTI4RTgyMTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9h
dGluZ09iamVjdHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk5QUIxRjM4MDE4RTI0ODlBMDA1MzQ3NDMgLyogQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUFC
MUYzN0UxOEUyNDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaCAqLzsg
fTsKKwkJOUFCMUYzODExOEUyNDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUFC
MUYzN0YxOEUyNDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwICov
OyB9OwogCQk5QjFBQjA3QzE2NDhDN0M0MDA1MUYzRjIgLyogSlNIVE1MRm9ybUNvbnRyb2xzQ29s
bGVjdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5QjFBQjA3QjE2NDhDN0M0MDA1MUYzRjIgLyogSlNIVE1MRm9ybUNvbnRyb2xzQ29s
bGVjdGlvbkN1c3RvbS5jcHAgKi87IH07CiAJCTlCMjRERThFMTUxOTRCOTUwMEM1OUMyNyAvKiBI
VE1MQkRJRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOUIyNERFOEMxNTE5NEI5NTAwQzU5QzI3IC8qIEhUTUxCRElFbGVtZW50LmggKi87IH07
CiAJCTlCMkQ4QTc5MTQ5OTdDQ0YwMEVDRUYzRSAvKiBVbmRvU3RlcC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIyRDhBNzgxNDk5N0NDRjAwRUNFRjNF
IC8qIFVuZG9TdGVwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTEwNjEyLDYgKzEwNjE0LDggQEAKIAkJOUExQjZGOTYxNTg4NjlDODAwMTFBOEM0
IC8qIEpTRE9NU3RyaW5nTGlzdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0RPTVN0cmluZ0xpc3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5QTUyOEU4MTE3RDdGNTJGMDBBQTk1MTggLyogRmxvYXRpbmdPYmplY3RzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0aW5nT2JqZWN0cy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlBNTI4RTgyMTdEN0Y1MkYwMEFBOTUx
OCAvKiBGbG9hdGluZ09iamVjdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RmxvYXRpbmdPYmplY3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlBQjFGMzdF
MThFMjQ4OUEwMDUzNDc0MyAvKiBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOUFCMUYzN0YxOEUyNDg5QTAwNTM0NzQzIC8qIENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTlCMUFCMDc5MTY0OEM2OUQwMDUxRjNGMiAvKiBIVE1MRm9ybUNvbnRyb2xz
Q29sbGVjdGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjFBQjA3QjE2NDhDN0M0MDA1MUYzRjIgLyogSlNI
VE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbkN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uQ3VzdG9tLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUIyNERFOEMxNTE5NEI5NTAwQzU5QzI3IC8q
IEhUTUxCRElFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxC
RElFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTcwNSw2ICsyMTcw
OSw4IEBACiAJCQkJRkM2M0JEQjIxNjdBQUJBQzAwRjkzODBGIC8qIENTU1N1cHBvcnRzUnVsZS5p
ZGwgKi8sCiAJCQkJQkM4MEM5ODUwQ0QyOTRFRTAwQTBCN0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9u
VmFsdWUuY3BwICovLAogCQkJCUJDODBDOTg2MENEMjk0RUUwMEEwQjdCMyAvKiBDU1NUaW1pbmdG
dW5jdGlvblZhbHVlLmggKi8sCisJCQkJOUFCMUYzN0UxOEUyNDg5QTAwNTM0NzQzIC8qIENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEuaCAqLywKKwkJCQk5QUIxRjM3RjE4RTI0ODlBMDA1MzQ3NDMg
LyogQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5jcHAgKi8sCiAJCQkJQTg4MkRBMUYxNTkzODQ2
QTAwMDExNUVEIC8qIENTU1RvU3R5bGVNYXAuY3BwICovLAogCQkJCUE4ODJEQTIyMTU5Mzg0OEQw
MDAxMTVFRCAvKiBDU1NUb1N0eWxlTWFwLmggKi8sCiAJCQkJMzcxRjUzRTgwRDI3MDRGOTAwRUNF
MEQ1IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVlLmNwcCAqLywKQEAgLTI0MDg0LDYgKzI0MDkwLDcg
QEAKIAkJCQk0MzEwN0JFMjE4Q0MxOURFMDBDQzE4RTggLyogU2VsZWN0b3JQc2V1ZG9UeXBlTWFw
LmggaW4gSGVhZGVycyAqLywKIAkJCQlENjY4MTdGQjE2NkZFNkQ3MDBGQTA3QjQgLyogSFRNTFRl
bXBsYXRlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxMzY5RDYwOTczNzRGNjAwRDc0
NDYzIC8qIEhUTUxUZXh0QXJlYUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTlBQjFGMzgw
MThFMjQ4OUEwMDUzNDc0MyAvKiBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5QkM2QzIxQjEzQ0NDOTdCMDA4RTAzMzcgLyogSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NzFEQzI4MEExNTIwNTcwMEIxMkE2OCAv
KiBIVE1MVGl0bGVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdCMzg3ODEyMjg4M0U5
MDBCODFGRjggLyogSFRNTFRva2VuaXplci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzcwNyw2ICsy
NzcxNCw3IEBACiAJCQkJRTFGODBCOEExODMxNzJBMjAwNzg4NUMzIC8qIEpTQ3J5cHRvS2V5UGFp
ckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTI1Rjg1MTE4MjgzQTU2MDBEODRDRDkg
LyogSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUx
MjVGODNEMTgyNDExRTcwMEQ4NENEOSAvKiBKU0NyeXB0b09wZXJhdGlvbkRhdGEuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJOUFCMUYzODExOEUyNDg5QTAwNTM0NzQzIC8qIENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM0NkMxRkEwQzBEREM4RjAwMjBD
RkMzIC8qIEpTQ1NTQ2hhcnNldFJ1bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDA5RUJEQzUx
NkI3RjNDQTAwQ0JBM0ZDIC8qIEpTQ1NTRm9udEZhY2VMb2FkRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkM0NkMxRkMwQzBEREM4RjAwMjBDRkMzIC8qIEpTQ1NTRm9udEZhY2VSdWxlLmNw
cCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hh
cGVGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMu
Y3BwCmluZGV4IGYyNzg5NDBlNTYzZGRjZTYyN2MzMDI5MWExNDhiNjIxMmE0NmU2NWIuLjU2MjUw
MzFlYWE3MDZjMzk0MzU4YjQ5N2RjNThiNTYwYWM1N2VkMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHAKQEAgLTEyNywyMSArMTI3LDIxIEBAIFBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IHZhbHVlRm9yQmFzaWNTaGFwZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUs
IGNvbnN0IEJhc2ljU2hhCiAgICAgcmV0dXJuIHBvb2wuY3JlYXRlVmFsdWUoYmFzaWNTaGFwZVZh
bHVlLnJlbGVhc2UoKSk7CiB9CiAKLXN0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgQ1NTUHJp
bWl0aXZlVmFsdWUqIHZhbHVlKQorc3RhdGljIExlbmd0aCBjb252ZXJ0VG9MZW5ndGgoY29uc3Qg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIENTU1ByaW1pdGl2ZVZh
bHVlKiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gdmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZElu
dGVnZXJDb252ZXJzaW9uIHwgRml4ZWRGbG9hdENvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lv
biB8IENhbGN1bGF0ZWRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4o
c3R5bGUsIHJvb3RTdHlsZSwgc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgcmV0dXJuIHZh
bHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IEZpeGVkRmxvYXRD
b252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbiB8IFZp
ZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KGNvbnZlcnNpb25EYXRhKTsKIH0KIAotc3RhdGlj
IExlbmd0aFNpemUgY29udmVydFRvTGVuZ3RoU2l6ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUs
IGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkK
K3N0YXRpYyBMZW5ndGhTaXplIGNvbnZlcnRUb0xlbmd0aFNpemUoY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkK
IHsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gTGVuZ3RoU2l6ZShMZW5ndGgoMCwg
Rml4ZWQpLCBMZW5ndGgoMCwgRml4ZWQpKTsKIAogICAgIFBhaXIqIHBhaXIgPSB2YWx1ZS0+Z2V0
UGFpclZhbHVlKCk7Ci0gICAgcmV0dXJuIExlbmd0aFNpemUoY29udmVydFRvTGVuZ3RoKHN0eWxl
LCByb290U3R5bGUsIHBhaXItPmZpcnN0KCkpLCBjb252ZXJ0VG9MZW5ndGgoc3R5bGUsIHJvb3RT
dHlsZSwgcGFpci0+c2Vjb25kKCkpKTsKKyAgICByZXR1cm4gTGVuZ3RoU2l6ZShjb252ZXJ0VG9M
ZW5ndGgoY29udmVyc2lvbkRhdGEsIHBhaXItPmZpcnN0KCkpLCBjb252ZXJ0VG9MZW5ndGgoY29u
dmVyc2lvbkRhdGEsIHBhaXItPnNlY29uZCgpKSk7CiB9CiAKLXN0YXRpYyBCYXNpY1NoYXBlQ2Vu
dGVyQ29vcmRpbmF0ZSBjb252ZXJ0VG9DZW50ZXJDb29yZGluYXRlKGNvbnN0IFJlbmRlclN0eWxl
KiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgQ1NTUHJpbWl0aXZlVmFsdWUq
IHZhbHVlKQorc3RhdGljIEJhc2ljU2hhcGVDZW50ZXJDb29yZGluYXRlIGNvbnZlcnRUb0NlbnRl
ckNvb3JkaW5hdGUoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRh
dGEsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkKIHsKICAgICBCYXNpY1NoYXBlQ2VudGVyQ29v
cmRpbmF0ZTo6RGlyZWN0aW9uIGRpcmVjdGlvbjsKICAgICBMZW5ndGggb2Zmc2V0ID0gTGVuZ3Ro
KDAsIEZpeGVkKTsKQEAgLTE1Myw5ICsxNTMsOSBAQCBzdGF0aWMgQmFzaWNTaGFwZUNlbnRlckNv
b3JkaW5hdGUgY29udmVydFRvQ2VudGVyQ29vcmRpbmF0ZShjb25zdCBSZW5kZXJTdHlsZSogcwog
ICAgICAgICBrZXl3b3JkID0gdmFsdWUtPmdldFZhbHVlSUQoKTsKICAgICBlbHNlIGlmIChQYWly
KiBwYWlyID0gdmFsdWUtPmdldFBhaXJWYWx1ZSgpKSB7CiAgICAgICAgIGtleXdvcmQgPSBwYWly
LT5maXJzdCgpLT5nZXRWYWx1ZUlEKCk7Ci0gICAgICAgIG9mZnNldCA9IGNvbnZlcnRUb0xlbmd0
aChzdHlsZSwgcm9vdFN0eWxlLCBwYWlyLT5zZWNvbmQoKSk7CisgICAgICAgIG9mZnNldCA9IGNv
bnZlcnRUb0xlbmd0aChjb252ZXJzaW9uRGF0YSwgcGFpci0+c2Vjb25kKCkpOwogICAgIH0gZWxz
ZQotICAgICAgICBvZmZzZXQgPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGUsIHJvb3RTdHlsZSwgdmFs
dWUpOworICAgICAgICBvZmZzZXQgPSBjb252ZXJ0VG9MZW5ndGgoY29udmVyc2lvbkRhdGEsIHZh
bHVlKTsKIAogICAgIHN3aXRjaCAoa2V5d29yZCkgewogICAgIGNhc2UgQ1NTVmFsdWVUb3A6CkBA
IC0xNzksNyArMTc5LDcgQEAgc3RhdGljIEJhc2ljU2hhcGVDZW50ZXJDb29yZGluYXRlIGNvbnZl
cnRUb0NlbnRlckNvb3JkaW5hdGUoY29uc3QgUmVuZGVyU3R5bGUqIHMKICAgICByZXR1cm4gQmFz
aWNTaGFwZUNlbnRlckNvb3JkaW5hdGUoZGlyZWN0aW9uLCBvZmZzZXQpOwogfQogCi1zdGF0aWMg
QmFzaWNTaGFwZVJhZGl1cyBjc3NWYWx1ZVRvQmFzaWNTaGFwZVJhZGl1cyhjb25zdCBSZW5kZXJT
dHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUsIFBhc3NSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHJhZGl1cykKK3N0YXRpYyBCYXNpY1NoYXBlUmFkaXVzIGNzc1ZhbHVl
VG9CYXNpY1NoYXBlUmFkaXVzKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZl
cnNpb25EYXRhLCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByYWRpdXMpCiB7CiAgICAg
aWYgKCFyYWRpdXMpCiAgICAgICAgIHJldHVybiBCYXNpY1NoYXBlUmFkaXVzKEJhc2ljU2hhcGVS
YWRpdXM6OkNsb3Nlc3RTaWRlKTsKQEAgLTE5NiwxMCArMTk2LDEwIEBAIHN0YXRpYyBCYXNpY1No
YXBlUmFkaXVzIGNzc1ZhbHVlVG9CYXNpY1NoYXBlUmFkaXVzKGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gQmFzaWNTaGFwZVJhZGl1
cyhjb252ZXJ0VG9MZW5ndGgoc3R5bGUsIHJvb3RTdHlsZSwgcmFkaXVzLmdldCgpKSk7CisgICAg
cmV0dXJuIEJhc2ljU2hhcGVSYWRpdXMoY29udmVydFRvTGVuZ3RoKGNvbnZlcnNpb25EYXRhLCBy
YWRpdXMuZ2V0KCkpKTsKIH0KIAotUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9y
VmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0
eWxlLCBjb25zdCBDU1NCYXNpY1NoYXBlKiBiYXNpY1NoYXBlVmFsdWUpCitQYXNzUmVmUHRyPEJh
c2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhJiBjb252ZXJzaW9uRGF0YSwgY29uc3QgQ1NTQmFzaWNTaGFwZSogYmFzaWNTaGFwZVZhbHVl
KQogewogICAgIFJlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlOwogCkBAIC0yMDgsOSArMjA4
LDkgQEAgUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXIKICAgICAgICAgY29uc3QgQ1NTQmFzaWNTaGFw
ZUNpcmNsZSogY2lyY2xlVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBDU1NCYXNpY1NoYXBlQ2ly
Y2xlICo+KGJhc2ljU2hhcGVWYWx1ZSk7CiAgICAgICAgIFJlZlB0cjxCYXNpY1NoYXBlQ2lyY2xl
PiBjaXJjbGUgPSBCYXNpY1NoYXBlQ2lyY2xlOjpjcmVhdGUoKTsKIAotICAgICAgICBjaXJjbGUt
PnNldENlbnRlclgoY29udmVydFRvQ2VudGVyQ29vcmRpbmF0ZShzdHlsZSwgcm9vdFN0eWxlLCBj
aXJjbGVWYWx1ZS0+Y2VudGVyWCgpKSk7Ci0gICAgICAgIGNpcmNsZS0+c2V0Q2VudGVyWShjb252
ZXJ0VG9DZW50ZXJDb29yZGluYXRlKHN0eWxlLCByb290U3R5bGUsIGNpcmNsZVZhbHVlLT5jZW50
ZXJZKCkpKTsKLSAgICAgICAgY2lyY2xlLT5zZXRSYWRpdXMoY3NzVmFsdWVUb0Jhc2ljU2hhcGVS
YWRpdXMoc3R5bGUsIHJvb3RTdHlsZSwgY2lyY2xlVmFsdWUtPnJhZGl1cygpKSk7CisgICAgICAg
IGNpcmNsZS0+c2V0Q2VudGVyWChjb252ZXJ0VG9DZW50ZXJDb29yZGluYXRlKGNvbnZlcnNpb25E
YXRhLCBjaXJjbGVWYWx1ZS0+Y2VudGVyWCgpKSk7CisgICAgICAgIGNpcmNsZS0+c2V0Q2VudGVy
WShjb252ZXJ0VG9DZW50ZXJDb29yZGluYXRlKGNvbnZlcnNpb25EYXRhLCBjaXJjbGVWYWx1ZS0+
Y2VudGVyWSgpKSk7CisgICAgICAgIGNpcmNsZS0+c2V0UmFkaXVzKGNzc1ZhbHVlVG9CYXNpY1No
YXBlUmFkaXVzKGNvbnZlcnNpb25EYXRhLCBjaXJjbGVWYWx1ZS0+cmFkaXVzKCkpKTsKIAogICAg
ICAgICBiYXNpY1NoYXBlID0gY2lyY2xlLnJlbGVhc2UoKTsKICAgICAgICAgYnJlYWs7CkBAIC0y
MTksMTEgKzIxOSwxMSBAQCBQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1
ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlcgogICAgICAgICBjb25zdCBD
U1NCYXNpY1NoYXBlRWxsaXBzZSogZWxsaXBzZVZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NT
QmFzaWNTaGFwZUVsbGlwc2UgKj4oYmFzaWNTaGFwZVZhbHVlKTsKICAgICAgICAgUmVmUHRyPEJh
c2ljU2hhcGVFbGxpcHNlPiBlbGxpcHNlID0gQmFzaWNTaGFwZUVsbGlwc2U6OmNyZWF0ZSgpOwog
Ci0gICAgICAgIGVsbGlwc2UtPnNldENlbnRlclgoY29udmVydFRvQ2VudGVyQ29vcmRpbmF0ZShz
dHlsZSwgcm9vdFN0eWxlLCBlbGxpcHNlVmFsdWUtPmNlbnRlclgoKSkpOwotICAgICAgICBlbGxp
cHNlLT5zZXRDZW50ZXJZKGNvbnZlcnRUb0NlbnRlckNvb3JkaW5hdGUoc3R5bGUsIHJvb3RTdHls
ZSwgZWxsaXBzZVZhbHVlLT5jZW50ZXJZKCkpKTsKKyAgICAgICAgZWxsaXBzZS0+c2V0Q2VudGVy
WChjb252ZXJ0VG9DZW50ZXJDb29yZGluYXRlKGNvbnZlcnNpb25EYXRhLCBlbGxpcHNlVmFsdWUt
PmNlbnRlclgoKSkpOworICAgICAgICBlbGxpcHNlLT5zZXRDZW50ZXJZKGNvbnZlcnRUb0NlbnRl
ckNvb3JkaW5hdGUoY29udmVyc2lvbkRhdGEsIGVsbGlwc2VWYWx1ZS0+Y2VudGVyWSgpKSk7CiAK
LSAgICAgICAgZWxsaXBzZS0+c2V0UmFkaXVzWChjc3NWYWx1ZVRvQmFzaWNTaGFwZVJhZGl1cyhz
dHlsZSwgcm9vdFN0eWxlLCBlbGxpcHNlVmFsdWUtPnJhZGl1c1goKSkpOwotICAgICAgICBlbGxp
cHNlLT5zZXRSYWRpdXNZKGNzc1ZhbHVlVG9CYXNpY1NoYXBlUmFkaXVzKHN0eWxlLCByb290U3R5
bGUsIGVsbGlwc2VWYWx1ZS0+cmFkaXVzWSgpKSk7CisgICAgICAgIGVsbGlwc2UtPnNldFJhZGl1
c1goY3NzVmFsdWVUb0Jhc2ljU2hhcGVSYWRpdXMoY29udmVyc2lvbkRhdGEsIGVsbGlwc2VWYWx1
ZS0+cmFkaXVzWCgpKSk7CisgICAgICAgIGVsbGlwc2UtPnNldFJhZGl1c1koY3NzVmFsdWVUb0Jh
c2ljU2hhcGVSYWRpdXMoY29udmVyc2lvbkRhdGEsIGVsbGlwc2VWYWx1ZS0+cmFkaXVzWSgpKSk7
CiAKICAgICAgICAgYmFzaWNTaGFwZSA9IGVsbGlwc2UucmVsZWFzZSgpOwogICAgICAgICBicmVh
azsKQEAgLTIzNSw3ICsyMzUsNyBAQCBQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVG
b3JWYWx1ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlcgogICAgICAgICBw
b2x5Z29uLT5zZXRXaW5kUnVsZShwb2x5Z29uVmFsdWUtPndpbmRSdWxlKCkpOwogICAgICAgICBj
b25zdCBWZWN0b3I8UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPj4mIHZhbHVlcyA9IHBvbHlnb25W
YWx1ZS0+dmFsdWVzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMu
c2l6ZSgpOyBpICs9IDIpCi0gICAgICAgICAgICBwb2x5Z29uLT5hcHBlbmRQb2ludChjb252ZXJ0
VG9MZW5ndGgoc3R5bGUsIHJvb3RTdHlsZSwgdmFsdWVzLmF0KGkpLmdldCgpKSwgY29udmVydFRv
TGVuZ3RoKHN0eWxlLCByb290U3R5bGUsIHZhbHVlcy5hdChpICsgMSkuZ2V0KCkpKTsKKyAgICAg
ICAgICAgIHBvbHlnb24tPmFwcGVuZFBvaW50KGNvbnZlcnRUb0xlbmd0aChjb252ZXJzaW9uRGF0
YSwgdmFsdWVzLmF0KGkpLmdldCgpKSwgY29udmVydFRvTGVuZ3RoKGNvbnZlcnNpb25EYXRhLCB2
YWx1ZXMuYXQoaSArIDEpLmdldCgpKSk7CiAKICAgICAgICAgYmFzaWNTaGFwZSA9IHBvbHlnb24u
cmVsZWFzZSgpOwogICAgICAgICBicmVhazsKQEAgLTI0NCwxNSArMjQ0LDE1IEBAIFBhc3NSZWZQ
dHI8QmFzaWNTaGFwZT4gYmFzaWNTaGFwZUZvclZhbHVlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSwgY29uc3QgUmVuZGVyCiAgICAgICAgIGNvbnN0IENTU0Jhc2ljU2hhcGVJbnNldCogcmVjdFZh
bHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTQmFzaWNTaGFwZUluc2V0KiA+KGJhc2ljU2hhcGVW
YWx1ZSk7CiAgICAgICAgIFJlZlB0cjxCYXNpY1NoYXBlSW5zZXQ+IHJlY3QgPSBCYXNpY1NoYXBl
SW5zZXQ6OmNyZWF0ZSgpOwogCi0gICAgICAgIHJlY3QtPnNldFRvcChjb252ZXJ0VG9MZW5ndGgo
c3R5bGUsIHJvb3RTdHlsZSwgcmVjdFZhbHVlLT50b3AoKSkpOwotICAgICAgICByZWN0LT5zZXRS
aWdodChjb252ZXJ0VG9MZW5ndGgoc3R5bGUsIHJvb3RTdHlsZSwgcmVjdFZhbHVlLT5yaWdodCgp
KSk7Ci0gICAgICAgIHJlY3QtPnNldEJvdHRvbShjb252ZXJ0VG9MZW5ndGgoc3R5bGUsIHJvb3RT
dHlsZSwgcmVjdFZhbHVlLT5ib3R0b20oKSkpOwotICAgICAgICByZWN0LT5zZXRMZWZ0KGNvbnZl
cnRUb0xlbmd0aChzdHlsZSwgcm9vdFN0eWxlLCByZWN0VmFsdWUtPmxlZnQoKSkpOworICAgICAg
ICByZWN0LT5zZXRUb3AoY29udmVydFRvTGVuZ3RoKGNvbnZlcnNpb25EYXRhLCByZWN0VmFsdWUt
PnRvcCgpKSk7CisgICAgICAgIHJlY3QtPnNldFJpZ2h0KGNvbnZlcnRUb0xlbmd0aChjb252ZXJz
aW9uRGF0YSwgcmVjdFZhbHVlLT5yaWdodCgpKSk7CisgICAgICAgIHJlY3QtPnNldEJvdHRvbShj
b252ZXJ0VG9MZW5ndGgoY29udmVyc2lvbkRhdGEsIHJlY3RWYWx1ZS0+Ym90dG9tKCkpKTsKKyAg
ICAgICAgcmVjdC0+c2V0TGVmdChjb252ZXJ0VG9MZW5ndGgoY29udmVyc2lvbkRhdGEsIHJlY3RW
YWx1ZS0+bGVmdCgpKSk7CiAKLSAgICAgICAgcmVjdC0+c2V0VG9wTGVmdFJhZGl1cyhjb252ZXJ0
VG9MZW5ndGhTaXplKHN0eWxlLCByb290U3R5bGUsIHJlY3RWYWx1ZS0+dG9wTGVmdFJhZGl1cygp
KSk7Ci0gICAgICAgIHJlY3QtPnNldFRvcFJpZ2h0UmFkaXVzKGNvbnZlcnRUb0xlbmd0aFNpemUo
c3R5bGUsIHJvb3RTdHlsZSwgcmVjdFZhbHVlLT50b3BSaWdodFJhZGl1cygpKSk7Ci0gICAgICAg
IHJlY3QtPnNldEJvdHRvbVJpZ2h0UmFkaXVzKGNvbnZlcnRUb0xlbmd0aFNpemUoc3R5bGUsIHJv
b3RTdHlsZSwgcmVjdFZhbHVlLT5ib3R0b21SaWdodFJhZGl1cygpKSk7Ci0gICAgICAgIHJlY3Qt
PnNldEJvdHRvbUxlZnRSYWRpdXMoY29udmVydFRvTGVuZ3RoU2l6ZShzdHlsZSwgcm9vdFN0eWxl
LCByZWN0VmFsdWUtPmJvdHRvbUxlZnRSYWRpdXMoKSkpOworICAgICAgICByZWN0LT5zZXRUb3BM
ZWZ0UmFkaXVzKGNvbnZlcnRUb0xlbmd0aFNpemUoY29udmVyc2lvbkRhdGEsIHJlY3RWYWx1ZS0+
dG9wTGVmdFJhZGl1cygpKSk7CisgICAgICAgIHJlY3QtPnNldFRvcFJpZ2h0UmFkaXVzKGNvbnZl
cnRUb0xlbmd0aFNpemUoY29udmVyc2lvbkRhdGEsIHJlY3RWYWx1ZS0+dG9wUmlnaHRSYWRpdXMo
KSkpOworICAgICAgICByZWN0LT5zZXRCb3R0b21SaWdodFJhZGl1cyhjb252ZXJ0VG9MZW5ndGhT
aXplKGNvbnZlcnNpb25EYXRhLCByZWN0VmFsdWUtPmJvdHRvbVJpZ2h0UmFkaXVzKCkpKTsKKyAg
ICAgICAgcmVjdC0+c2V0Qm90dG9tTGVmdFJhZGl1cyhjb252ZXJ0VG9MZW5ndGhTaXplKGNvbnZl
cnNpb25EYXRhLCByZWN0VmFsdWUtPmJvdHRvbUxlZnRSYWRpdXMoKSkpOwogCiAgICAgICAgIGJh
c2ljU2hhcGUgPSByZWN0LnJlbGVhc2UoKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuaAppbmRleCA5ZWEwOTY1NDVkMDliNTAwYjJhOTQ1ZWVi
NDFhMDdmZWRiMDBiNmM0Li5mNjE2MDBhZjNiZTNiNDE3N2I0MDM1NzkyNzM2NTkzYzJhY2NkOTAx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25zLmgKQEAgLTM3LDExICsz
NywxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU0Jhc2ljU2hhcGU7CiBjbGFz
cyBDU1NQcmltaXRpdmVWYWx1ZTsKK2NsYXNzIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7CiBj
bGFzcyBDU1NWYWx1ZTsKIGNsYXNzIFJlbmRlclN0eWxlOwogCiBQYXNzUmVmUHRyPENTU1ZhbHVl
PiB2YWx1ZUZvckJhc2ljU2hhcGUoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBCYXNpY1NoYXBl
Kik7Ci1QYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25zdCBSZW5k
ZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUsIGNvbnN0IENTU0Jhc2ljU2hh
cGUqKTsKK1Bhc3NSZWZQdHI8QmFzaWNTaGFwZT4gYmFzaWNTaGFwZUZvclZhbHVlKGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBjb25zdCBDU1NCYXNpY1NoYXBlKik7CiAKIGZsb2F0
IGZsb2F0VmFsdWVGb3JDZW50ZXJDb29yZGluYXRlKGNvbnN0IEJhc2ljU2hhcGVDZW50ZXJDb29y
ZGluYXRlJiwgZmxvYXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nh
bGN1bGF0aW9uVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFs
dWUuY3BwCmluZGV4IDk2ZjhjNDRjMzc5MGE3NGI0YTJjZWNhNTBhZjlkYWZjM2ExYjRkZjUuLjRh
ZDhlMzRlMGQzYjYxZmUzMGY5MTI1ODQ1MTdkYzdmYzQwYmEyNDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKQEAgLTE3MSw5ICsxNzEsOSBAQCBkb3VibGUg
Q1NTQ2FsY1ZhbHVlOjpkb3VibGVWYWx1ZSgpIGNvbnN0CiAgICAgcmV0dXJuIGNsYW1wVG9QZXJt
aXR0ZWRSYW5nZShtX2V4cHJlc3Npb24tPmRvdWJsZVZhbHVlKCkpOwogfQogCi1kb3VibGUgQ1NT
Q2FsY1ZhbHVlOjpjb21wdXRlTGVuZ3RoUHgoY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHls
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIsIGJvb2wg
Y29tcHV0aW5nRm9udFNpemUpIGNvbnN0Citkb3VibGUgQ1NTQ2FsY1ZhbHVlOjpjb21wdXRlTGVu
Z3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGNsYW1wVG9QZXJtaXR0ZWRSYW5nZShtX2V4cHJlc3Npb24tPmNv
bXB1dGVMZW5ndGhQeChjdXJyZW50U3R5bGUsIHJvb3RTdHlsZSwgbXVsdGlwbGllciwgY29tcHV0
aW5nRm9udFNpemUpKTsKKyAgICByZXR1cm4gY2xhbXBUb1Blcm1pdHRlZFJhbmdlKG1fZXhwcmVz
c2lvbi0+Y29tcHV0ZUxlbmd0aFB4KGNvbnZlcnNpb25EYXRhKSk7CiB9CiAKIGNsYXNzIENTU0Nh
bGNQcmltaXRpdmVWYWx1ZSBmaW5hbCA6IHB1YmxpYyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgewpA
QCAtMjAyLDE4ICsyMDIsMTggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmNz
c1RleHQoKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVz
c2lvbk5vZGU+IGNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIHpvb20pIGNvbnN0IG92ZXJyaWRl
CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVD
YWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9u
RGF0YSkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHN3aXRjaCAoY2F0ZWdvcnkoKSkg
ewogICAgICAgICBjYXNlIENhbGNOdW1iZXI6CiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxDYWxjRXhwcmVzc2lvbk51bWJlcj4obV92YWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKTsK
ICAgICAgICAgY2FzZSBDYWxjTGVuZ3RoOgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KExlbmd0aChtX3ZhbHVlLT5jb21wdXRlTGVuZ3Ro
PGZsb2F0PihzdHlsZSwgcm9vdFN0eWxlLCB6b29tKSwgV2ViQ29yZTo6Rml4ZWQpKTsKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENhbGNFeHByZXNzaW9uTGVuZ3RoPihMZW5n
dGgobV92YWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oY29udmVyc2lvbkRhdGEpLCBXZWJDb3Jl
OjpGaXhlZCkpOwogICAgICAgICBjYXNlIENhbGNQZXJjZW50OgogICAgICAgICBjYXNlIENhbGNQ
ZXJjZW50TGVuZ3RoOiB7CiAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSBtX3ZhbHVlLmdldCgpOwogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KHByaW1pdGl2ZVZhbHVlCi0gICAgICAgICAgICAgICAg
PyBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkRmxvYXRDb252ZXJzaW9uIHwg
UGVyY2VudENvbnZlcnNpb24gfCBGcmFjdGlvbkNvbnZlcnNpb24+KHN0eWxlLCByb290U3R5bGUs
IHpvb20pIDogTGVuZ3RoKFVuZGVmaW5lZCkpOworICAgICAgICAgICAgICAgID8gcHJpbWl0aXZl
VmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEZsb2F0Q29udmVyc2lvbiB8IFBlcmNlbnRDb252
ZXJzaW9uIHwgRnJhY3Rpb25Db252ZXJzaW9uPihjb252ZXJzaW9uRGF0YSkgOiBMZW5ndGgoVW5k
ZWZpbmVkKSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gT25seSB0eXBlcyB0aGF0IGNvdWxkIGJl
IHBhcnQgb2YgYSBMZW5ndGggZXhwcmVzc2lvbiBjYW4gYmUgY29udmVydGVkCiAgICAgICAgIC8v
IHRvIGEgQ2FsY0V4cHJlc3Npb25Ob2RlLiBDYWxjUGVyY2VudE51bWJlciBtYWtlcyBubyBzZW5z
ZSBhcyBhIExlbmd0aC4KQEAgLTIzMiwxMSArMjMyLDExIEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIAotICAgIHZpcnR1YWwgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25z
dCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxl
LCBkb3VibGUgbXVsdGlwbGllciwgYm9vbCBjb21wdXRpbmdGb250U2l6ZSkgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB2aXJ0dWFsIGRvdWJsZSBjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAg
ICAgICBzd2l0Y2ggKGNhdGVnb3J5KCkpIHsKICAgICAgICAgY2FzZSBDYWxjTGVuZ3RoOgotICAg
ICAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmNvbXB1dGVMZW5ndGg8ZG91YmxlPihjdXJyZW50U3R5
bGUsIHJvb3RTdHlsZSwgbXVsdGlwbGllciwgY29tcHV0aW5nRm9udFNpemUpOworICAgICAgICAg
ICAgcmV0dXJuIG1fdmFsdWUtPmNvbXB1dGVMZW5ndGg8ZG91YmxlPihjb252ZXJzaW9uRGF0YSk7
CiAgICAgICAgIGNhc2UgQ2FsY1BlcmNlbnQ6CiAgICAgICAgIGNhc2UgQ2FsY051bWJlcjoKICAg
ICAgICAgICAgIHJldHVybiBtX3ZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwpAQCAtMzk0LDEyICsz
OTQsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuICFkb3VibGVWYWx1ZSgpOwogICAgIH0K
IAotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRl
Q2FsY0V4cHJlc3Npb24oY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHls
ZSogcm9vdFN0eWxlLCBkb3VibGUgem9vbSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB2aXJ0dWFsIHN0
ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNFeHByZXNzaW9uKGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdCBvdmVy
cmlkZQogICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4g
bGVmdChtX2xlZnRTaWRlLT5jcmVhdGVDYWxjRXhwcmVzc2lvbihzdHlsZSwgcm9vdFN0eWxlLCB6
b29tKSk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGxlZnQo
bV9sZWZ0U2lkZS0+Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29udmVyc2lvbkRhdGEpKTsKICAgICAg
ICAgaWYgKCFsZWZ0KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IHJpZ2h0KG1fcmlnaHRTaWRlLT5jcmVhdGVD
YWxjRXhwcmVzc2lvbihzdHlsZSwgcm9vdFN0eWxlLCB6b29tKSk7CisgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IHJpZ2h0KG1fcmlnaHRTaWRlLT5jcmVhdGVDYWxj
RXhwcmVzc2lvbihjb252ZXJzaW9uRGF0YSkpOwogICAgICAgICBpZiAoIXJpZ2h0KQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENh
bGNFeHByZXNzaW9uQmluYXJ5T3BlcmF0aW9uPihzdGQ6Om1vdmUobGVmdCksIHN0ZDo6bW92ZShy
aWdodCksIG1fb3BlcmF0b3IpOwpAQCAtNDEwLDEwICs0MTAsMTAgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuIGV2YWx1YXRlKG1fbGVmdFNpZGUtPmRvdWJsZVZhbHVlKCksIG1fcmlnaHRTaWRl
LT5kb3VibGVWYWx1ZSgpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIGRvdWJsZSBjb21wdXRlTGVu
Z3RoUHgoY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUq
IHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIsIGJvb2wgY29tcHV0aW5nRm9udFNpemUpIGNv
bnN0IG92ZXJyaWRlCisgICAgdmlydHVhbCBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdCBvdmVycmlkZQog
ICAgIHsKLSAgICAgICAgY29uc3QgZG91YmxlIGxlZnRWYWx1ZSA9IG1fbGVmdFNpZGUtPmNvbXB1
dGVMZW5ndGhQeChjdXJyZW50U3R5bGUsIHJvb3RTdHlsZSwgbXVsdGlwbGllciwgY29tcHV0aW5n
Rm9udFNpemUpOwotICAgICAgICBjb25zdCBkb3VibGUgcmlnaHRWYWx1ZSA9IG1fcmlnaHRTaWRl
LT5jb21wdXRlTGVuZ3RoUHgoY3VycmVudFN0eWxlLCByb290U3R5bGUsIG11bHRpcGxpZXIsIGNv
bXB1dGluZ0ZvbnRTaXplKTsKKyAgICAgICAgY29uc3QgZG91YmxlIGxlZnRWYWx1ZSA9IG1fbGVm
dFNpZGUtPmNvbXB1dGVMZW5ndGhQeChjb252ZXJzaW9uRGF0YSk7CisgICAgICAgIGNvbnN0IGRv
dWJsZSByaWdodFZhbHVlID0gbV9yaWdodFNpZGUtPmNvbXB1dGVMZW5ndGhQeChjb252ZXJzaW9u
RGF0YSk7CiAgICAgICAgIHJldHVybiBldmFsdWF0ZShsZWZ0VmFsdWUsIHJpZ2h0VmFsdWUpOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFs
dWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmgKaW5kZXggMDdl
NDIwODBhNDI4YzFiMmNiYTllNWI2Y2FjNDE1NTliNzlmMTgxYy4uYWZiNjAxZDFlOWIyZDg5OWYx
NGEyZmMxYzVhMTBjNjkwZWYxZWExZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0NhbGN1bGF0aW9uVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5oCkBAIC0zNyw2ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsKIGNsYXNzIFJlbmRlclN0eWxlOwogCiBlbnVt
IENhbGN1bGF0aW9uQ2F0ZWdvcnkgewpAQCAtNTcsOSArNTgsOSBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIH5DU1NDYWxjRXhwcmVzc2lvbk5vZGUoKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNa
ZXJvKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNz
aW9uTm9kZT4gY3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBS
ZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgem9vbSA9IDEuMCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ2FsY0V4
cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0ID0gMDsKICAg
ICB2aXJ0dWFsIGRvdWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGRv
dWJsZSBjb21wdXRlTGVuZ3RoUHgoY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29u
c3QgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIgPSAxLjAsIGJvb2wg
Y29tcHV0aW5nRm9udFNpemUgPSBmYWxzZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91Ymxl
IGNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCBib29sIGVxdWFscyhjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBj
b25zdCB7IHJldHVybiBtX2NhdGVnb3J5ID09IG90aGVyLm1fY2F0ZWdvcnkgJiYgbV9pc0ludGVn
ZXIgPT0gb3RoZXIubV9pc0ludGVnZXI7IH0KICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0
ID0gMDsKQEAgLTg5LDkgKzkwLDkgQEAgcHVibGljOgogICAgIGJvb2wgaXNJbnQoKSBjb25zdCB7
IHJldHVybiBtX2V4cHJlc3Npb24tPmlzSW50ZWdlcigpOyB9CiAgICAgZG91YmxlIGRvdWJsZVZh
bHVlKCkgY29uc3Q7CiAgICAgYm9vbCBpc05lZ2F0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9leHBy
ZXNzaW9uLT5kb3VibGVWYWx1ZSgpIDwgMDsgfQotICAgIGRvdWJsZSBjb21wdXRlTGVuZ3RoUHgo
Y29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RT
dHlsZSwgZG91YmxlIG11bHRpcGxpZXIgPSAxLjAsIGJvb2wgY29tcHV0aW5nRm9udFNpemUgPSBm
YWxzZSkgY29uc3Q7CisgICAgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhJikgY29uc3Q7CiAKLSAgICBQYXNzUmVmPENhbGN1bGF0aW9uVmFsdWU+
IGNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIHpvb20gPSAxLjApIGNvbnN0Owor
ICAgIFBhc3NSZWY8Q2FsY3VsYXRpb25WYWx1ZT4gY3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3Q7CiAKICAgICBTdHJpbmcgY3VzdG9t
Q1NTVGV4dCgpIGNvbnN0OwogICAgIGJvb2wgZXF1YWxzKGNvbnN0IENTU0NhbGNWYWx1ZSYpIGNv
bnN0OwpAQCAtMTEyLDkgKzExMyw5IEBAIGlubGluZSBDU1NDYWxjVmFsdWU6OkNTU0NhbGNWYWx1
ZShQYXNzUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gZXhwcmVzc2lvbiwgYm9vCiB7CiB9CiAK
LWlubGluZSBQYXNzUmVmPENhbGN1bGF0aW9uVmFsdWU+IENTU0NhbGNWYWx1ZTo6Y3JlYXRlQ2Fs
Y3VsYXRpb25WYWx1ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxl
KiByb290U3R5bGUsIGRvdWJsZSB6b29tKSBjb25zdAoraW5saW5lIFBhc3NSZWY8Q2FsY3VsYXRp
b25WYWx1ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGVDYWxjdWxhdGlvblZhbHVlKGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAogewotICAgIHJldHVy
biBDYWxjdWxhdGlvblZhbHVlOjpjcmVhdGUobV9leHByZXNzaW9uLT5jcmVhdGVDYWxjRXhwcmVz
c2lvbihzdHlsZSwgcm9vdFN0eWxlLCB6b29tKSwKKyAgICByZXR1cm4gQ2FsY3VsYXRpb25WYWx1
ZTo6Y3JlYXRlKG1fZXhwcmVzc2lvbi0+Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29udmVyc2lvbkRh
dGEpLAogICAgICAgICBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSA/IENhbGN1bGF0aW9uUmFu
Z2VOb25OZWdhdGl2ZSA6IENhbGN1bGF0aW9uUmFuZ2VBbGwpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKaW5kZXggNjljMDA2NmVlZThmODZkNDJiY2MwYjdiNDVl
MmM4YjBkYjE1ZGI4Ny4uZWE1OTg0ZTg4MjM5ZWRiZmEyMWY4YmU4MDQ3YTI0OWEyYWNiYzkyZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcApAQCAtMjcsNiArMjcsNyBA
QAogI2luY2x1ZGUgIkNTU0dyYWRpZW50VmFsdWUuaCIKIAogI2luY2x1ZGUgIkNTU0NhbGN1bGF0
aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmgiCiAjaW5j
bHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1
ZGUgIkZsb2F0U2l6ZUhhc2guaCIKQEAgLTEyOCwxMCArMTI5LDggQEAgUGFzc1JlZlB0cjxDU1NH
cmFkaWVudFZhbHVlPiBDU1NHcmFkaWVudFZhbHVlOjpncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZl
ZChTdHlsZVIKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBDU1NHcmFk
aWVudFZhbHVlOjphZGRTdG9wcyhHcmFkaWVudCogZ3JhZGllbnQsIFJlbmRlckVsZW1lbnQqIHJl
bmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgcm9vdFN0eWxlLCBmbG9hdCBtYXhMZW5ndGhGb3JS
ZXBlYXQpCit2b2lkIENTU0dyYWRpZW50VmFsdWU6OmFkZFN0b3BzKEdyYWRpZW50KiBncmFkaWVu
dCwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIGZsb2F0
IG1heExlbmd0aEZvclJlcGVhdCkKIHsKLSAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSByZW5kZXJl
ci0+c3R5bGUoKTsKLQogICAgIGlmIChtX2dyYWRpZW50VHlwZSA9PSBDU1NEZXByZWNhdGVkTGlu
ZWFyR3JhZGllbnQgfHwgbV9ncmFkaWVudFR5cGUgPT0gQ1NTRGVwcmVjYXRlZFJhZGlhbEdyYWRp
ZW50KSB7CiAgICAgICAgIHNvcnRTdG9wc0lmTmVlZGVkKCk7CiAKQEAgLTE4MSw5ICsxODAsOSBA
QCB2b2lkIENTU0dyYWRpZW50VmFsdWU6OmFkZFN0b3BzKEdyYWRpZW50KiBncmFkaWVudCwgUmVu
ZGVyRWxlbWVudCogcmVuZGVyZXIsIGNvbgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBmbG9hdCBsZW5ndGg7CiAgICAgICAgICAgICAgICAgaWYgKHN0b3AubV9wb3NpdGlvbi0+
aXNMZW5ndGgoKSkKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gc3RvcC5tX3Bvc2l0aW9u
LT5jb21wdXRlTGVuZ3RoPGZsb2F0Pigmc3R5bGUsICZyb290U3R5bGUsIHN0eWxlLmVmZmVjdGl2
ZVpvb20oKSk7CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHN0b3AubV9wb3NpdGlvbi0+
Y29tcHV0ZUxlbmd0aDxmbG9hdD4oY29udmVyc2lvbkRhdGEpOwogICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBSZWY8Q2FsY3VsYXRpb25WYWx1ZT4gY2FsY3VsYXRp
b25WYWx1ZSB7IHN0b3AubV9wb3NpdGlvbi0+Y3NzQ2FsY1ZhbHVlKCktPmNyZWF0ZUNhbGN1bGF0
aW9uVmFsdWUoJnN0eWxlLCAmcm9vdFN0eWxlLCBzdHlsZS5lZmZlY3RpdmVab29tKCkpIH07Cisg
ICAgICAgICAgICAgICAgICAgIFJlZjxDYWxjdWxhdGlvblZhbHVlPiBjYWxjdWxhdGlvblZhbHVl
IHsgc3RvcC5tX3Bvc2l0aW9uLT5jc3NDYWxjVmFsdWUoKS0+Y3JlYXRlQ2FsY3VsYXRpb25WYWx1
ZShjb252ZXJzaW9uRGF0YSkgfTsKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gY2FsY3Vs
YXRpb25WYWx1ZS0+ZXZhbHVhdGUoZ3JhZGllbnRMZW5ndGgpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBzdG9wc1tpXS5vZmZzZXQgPSAoZ3JhZGllbnRMZW5ndGggPiAwKSA/
IGxlbmd0aCAvIGdyYWRpZW50TGVuZ3RoIDogMDsKQEAgLTM5MiwxOSArMzkxLDE3IEBAIHZvaWQg
Q1NTR3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGllbnQqIGdyYWRpZW50LCBSZW5kZXJFbGVt
ZW50KiByZW5kZXJlciwgY29uCiAgICAgZ3JhZGllbnQtPnNldFN0b3BzU29ydGVkKHRydWUpOwog
fQogCi1zdGF0aWMgZmxvYXQgcG9zaXRpb25Gcm9tVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHZh
bHVlLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiByb290U3R5
bGUsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgYm9vbCBpc0hvcml6b250YWwpCitzdGF0aWMgZmxv
YXQgcG9zaXRpb25Gcm9tVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgY29uc3QgRmxvYXRTaXplJiBz
aXplLCBib29sIGlzSG9yaXpvbnRhbCkKIHsKLSAgICBmbG9hdCB6b29tRmFjdG9yID0gc3R5bGUu
ZWZmZWN0aXZlWm9vbSgpOwotCiAgICAgaWYgKHZhbHVlLT5pc051bWJlcigpKQotICAgICAgICBy
ZXR1cm4gdmFsdWUtPmdldEZsb2F0VmFsdWUoKSAqIHpvb21GYWN0b3I7CisgICAgICAgIHJldHVy
biB2YWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpICogY29udmVyc2lvbkRhdGEuem9vbSgpOwogCiAgICAg
aW50IGVkZ2VEaXN0YW5jZSA9IGlzSG9yaXpvbnRhbCA/IHNpemUud2lkdGgoKSA6IHNpemUuaGVp
Z2h0KCk7CiAgICAgaWYgKHZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgcmV0dXJuIHZh
bHVlLT5nZXRGbG9hdFZhbHVlKCkgLyAxMDAuZiAqIGVkZ2VEaXN0YW5jZTsKIAogICAgIGlmICh2
YWx1ZS0+aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkgewotICAgICAgICBSZWY8
Q2FsY3VsYXRpb25WYWx1ZT4gY2FsY3VsYXRpb25WYWx1ZSB7IHZhbHVlLT5jc3NDYWxjVmFsdWUo
KS0+Y3JlYXRlQ2FsY3VsYXRpb25WYWx1ZSgmc3R5bGUsICZyb290U3R5bGUsIHN0eWxlLmVmZmVj
dGl2ZVpvb20oKSkgfTsKKyAgICAgICAgUmVmPENhbGN1bGF0aW9uVmFsdWU+IGNhbGN1bGF0aW9u
VmFsdWUgeyB2YWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPmNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUoY29u
dmVyc2lvbkRhdGEpIH07CiAgICAgICAgIHJldHVybiBjYWxjdWxhdGlvblZhbHVlLT5ldmFsdWF0
ZShlZGdlRGlzdGFuY2UpOwogICAgIH0KIApAQCAtNDI1LDE4ICs0MjIsMTggQEAgc3RhdGljIGZs
b2F0IHBvc2l0aW9uRnJvbVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWwKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0dXJuIHZhbHVl
LT5jb21wdXRlTGVuZ3RoPGZsb2F0Pigmc3R5bGUsICZyb290U3R5bGUsIHpvb21GYWN0b3IpOwor
ICAgIHJldHVybiB2YWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oY29udmVyc2lvbkRhdGEpOwog
fQogCi1GbG9hdFBvaW50IENTU0dyYWRpZW50VmFsdWU6OmNvbXB1dGVFbmRQb2ludChDU1NQcmlt
aXRpdmVWYWx1ZSogaG9yaXpvbnRhbCwgQ1NTUHJpbWl0aXZlVmFsdWUqIHZlcnRpY2FsLCBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiByb290U3R5bGUsIGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSkKK0Zsb2F0UG9pbnQgQ1NTR3JhZGllbnRWYWx1ZTo6Y29tcHV0ZUVu
ZFBvaW50KENTU1ByaW1pdGl2ZVZhbHVlKiBob3Jpem9udGFsLCBDU1NQcmltaXRpdmVWYWx1ZSog
dmVydGljYWwsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRh
LCBjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CiAgICAgRmxvYXRQb2ludCByZXN1bHQ7CiAKICAg
ICBpZiAoaG9yaXpvbnRhbCkKLSAgICAgICAgcmVzdWx0LnNldFgocG9zaXRpb25Gcm9tVmFsdWUo
aG9yaXpvbnRhbCwgc3R5bGUsIHJvb3RTdHlsZSwgc2l6ZSwgdHJ1ZSkpOworICAgICAgICByZXN1
bHQuc2V0WChwb3NpdGlvbkZyb21WYWx1ZShob3Jpem9udGFsLCBjb252ZXJzaW9uRGF0YSwgc2l6
ZSwgdHJ1ZSkpOwogCiAgICAgaWYgKHZlcnRpY2FsKQotICAgICAgICByZXN1bHQuc2V0WShwb3Np
dGlvbkZyb21WYWx1ZSh2ZXJ0aWNhbCwgc3R5bGUsIHJvb3RTdHlsZSwgc2l6ZSwgZmFsc2UpKTsK
KyAgICAgICAgcmVzdWx0LnNldFkocG9zaXRpb25Gcm9tVmFsdWUodmVydGljYWwsIGNvbnZlcnNp
b25EYXRhLCBzaXplLCBmYWxzZSkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTY0Nyw3
ICs2NDQsNyBAQCBQYXNzUmVmUHRyPEdyYWRpZW50PiBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjpj
cmVhdGVHcmFkaWVudChSZW5kZXJFbGVtZW50KiByZW5kZQogewogICAgIEFTU0VSVCghc2l6ZS5p
c0VtcHR5KCkpOwogCi0gICAgUmVuZGVyU3R5bGUmIHJvb3RTdHlsZSA9ICpyZW5kZXJlci0+ZG9j
dW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsKKyAgICBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhKCZyZW5kZXJlci0+c3R5bGUoKSwgcmVuZGVy
ZXItPmRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlclN0eWxlKCkpOwogCiAgICAg
RmxvYXRQb2ludCBmaXJzdFBvaW50OwogICAgIEZsb2F0UG9pbnQgc2Vjb25kUG9pbnQ7CkBAIC02
NTcsOSArNjU0LDkgQEAgUGFzc1JlZlB0cjxHcmFkaWVudD4gQ1NTTGluZWFyR3JhZGllbnRWYWx1
ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyRWxlbWVudCogcmVuZGUKICAgICB9IGVsc2UgewogICAg
ICAgICBzd2l0Y2ggKG1fZ3JhZGllbnRUeXBlKSB7CiAgICAgICAgIGNhc2UgQ1NTRGVwcmVjYXRl
ZExpbmVhckdyYWRpZW50OgotICAgICAgICAgICAgZmlyc3RQb2ludCA9IGNvbXB1dGVFbmRQb2lu
dChtX2ZpcnN0WC5nZXQoKSwgbV9maXJzdFkuZ2V0KCksIHJlbmRlcmVyLT5zdHlsZSgpLCByb290
U3R5bGUsIHNpemUpOworICAgICAgICAgICAgZmlyc3RQb2ludCA9IGNvbXB1dGVFbmRQb2ludCht
X2ZpcnN0WC5nZXQoKSwgbV9maXJzdFkuZ2V0KCksIGNvbnZlcnNpb25EYXRhLCBzaXplKTsKICAg
ICAgICAgICAgIGlmIChtX3NlY29uZFggfHwgbV9zZWNvbmRZKQotICAgICAgICAgICAgICAgIHNl
Y29uZFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KG1fc2Vjb25kWC5nZXQoKSwgbV9zZWNvbmRZLmdl
dCgpLCByZW5kZXJlci0+c3R5bGUoKSwgcm9vdFN0eWxlLCBzaXplKTsKKyAgICAgICAgICAgICAg
ICBzZWNvbmRQb2ludCA9IGNvbXB1dGVFbmRQb2ludChtX3NlY29uZFguZ2V0KCksIG1fc2Vjb25k
WS5nZXQoKSwgY29udmVyc2lvbkRhdGEsIHNpemUpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICAgaWYgKG1fZmlyc3RYKQogICAgICAgICAgICAgICAgICAgICBzZWNvbmRQb2lu
dC5zZXRYKHNpemUud2lkdGgoKSAtIGZpcnN0UG9pbnQueCgpKTsKQEAgLTY2OCw3ICs2NjUsNyBA
QCBQYXNzUmVmUHRyPEdyYWRpZW50PiBDU1NMaW5lYXJHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFk
aWVudChSZW5kZXJFbGVtZW50KiByZW5kZQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQ1NTUHJlZml4ZWRMaW5lYXJHcmFkaWVudDoKLSAgICAgICAgICAg
IGZpcnN0UG9pbnQgPSBjb21wdXRlRW5kUG9pbnQobV9maXJzdFguZ2V0KCksIG1fZmlyc3RZLmdl
dCgpLCByZW5kZXJlci0+c3R5bGUoKSwgcm9vdFN0eWxlLCBzaXplKTsKKyAgICAgICAgICAgIGZp
cnN0UG9pbnQgPSBjb21wdXRlRW5kUG9pbnQobV9maXJzdFguZ2V0KCksIG1fZmlyc3RZLmdldCgp
LCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7CiAgICAgICAgICAgICBpZiAobV9maXJzdFgpCiAgICAg
ICAgICAgICAgICAgc2Vjb25kUG9pbnQuc2V0WChzaXplLndpZHRoKCkgLSBmaXJzdFBvaW50Lngo
KSk7CiAgICAgICAgICAgICBpZiAobV9maXJzdFkpCkBAIC02ODcsNyArNjg0LDcgQEAgUGFzc1Jl
ZlB0cjxHcmFkaWVudD4gQ1NTTGluZWFyR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVu
ZGVyRWxlbWVudCogcmVuZGUKICAgICAgICAgICAgICAgICBmbG9hdCBhbmdsZSA9IDkwIC0gcmFk
MmRlZyhhdGFuMihyaXNlLCBydW4pKTsKICAgICAgICAgICAgICAgICBlbmRQb2ludHNGcm9tQW5n
bGUoYW5nbGUsIHNpemUsIGZpcnN0UG9pbnQsIHNlY29uZFBvaW50LCBtX2dyYWRpZW50VHlwZSk7
CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fZmlyc3RYIHx8IG1fZmlyc3RZKSB7IAotICAgICAg
ICAgICAgICAgIHNlY29uZFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KG1fZmlyc3RYLmdldCgpLCBt
X2ZpcnN0WS5nZXQoKSwgcmVuZGVyZXItPnN0eWxlKCksIHJvb3RTdHlsZSwgc2l6ZSk7CisgICAg
ICAgICAgICAgICAgc2Vjb25kUG9pbnQgPSBjb21wdXRlRW5kUG9pbnQobV9maXJzdFguZ2V0KCks
IG1fZmlyc3RZLmdldCgpLCBjb252ZXJzaW9uRGF0YSwgc2l6ZSk7CiAgICAgICAgICAgICAgICAg
aWYgKG1fZmlyc3RYKQogICAgICAgICAgICAgICAgICAgICBmaXJzdFBvaW50LnNldFgoc2l6ZS53
aWR0aCgpIC0gc2Vjb25kUG9pbnQueCgpKTsKICAgICAgICAgICAgICAgICBpZiAobV9maXJzdFkp
CkBAIC03MDQsNyArNzAxLDcgQEAgUGFzc1JlZlB0cjxHcmFkaWVudD4gQ1NTTGluZWFyR3JhZGll
bnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyRWxlbWVudCogcmVuZGUKICAgICBSZWZQdHI8
R3JhZGllbnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShmaXJzdFBvaW50LCBzZWNvbmRQ
b2ludCk7CiAKICAgICAvLyBOb3cgYWRkIHRoZSBzdG9wcy4KLSAgICBhZGRTdG9wcyhncmFkaWVu
dC5nZXQoKSwgcmVuZGVyZXIsIHJvb3RTdHlsZSwgMSk7CisgICAgYWRkU3RvcHMoZ3JhZGllbnQu
Z2V0KCksIGNvbnZlcnNpb25EYXRhLCAxKTsKIAogICAgIHJldHVybiBncmFkaWVudC5yZWxlYXNl
KCk7CiB9CkBAIC04OTEsMTcgKzg4OCwxNSBAQCBTdHJpbmcgQ1NTUmFkaWFsR3JhZGllbnRWYWx1
ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwog
fQogCi1mbG9hdCBDU1NSYWRpYWxHcmFkaWVudFZhbHVlOjpyZXNvbHZlUmFkaXVzKENTU1ByaW1p
dGl2ZVZhbHVlKiByYWRpdXMsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVuZGVy
U3R5bGUmIHJvb3RTdHlsZSwgZmxvYXQqIHdpZHRoT3JIZWlnaHQpCitmbG9hdCBDU1NSYWRpYWxH
cmFkaWVudFZhbHVlOjpyZXNvbHZlUmFkaXVzKENTU1ByaW1pdGl2ZVZhbHVlKiByYWRpdXMsIGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBmbG9hdCogd2lk
dGhPckhlaWdodCkKIHsKLSAgICBmbG9hdCB6b29tRmFjdG9yID0gc3R5bGUuZWZmZWN0aXZlWm9v
bSgpOwotCiAgICAgZmxvYXQgcmVzdWx0ID0gMDsKICAgICBpZiAocmFkaXVzLT5pc051bWJlcigp
KSAvLyBDYW4gdGhlIHJhZGl1cyBiZSBhIHBlcmNlbnRhZ2U/Ci0gICAgICAgIHJlc3VsdCA9IHJh
ZGl1cy0+Z2V0RmxvYXRWYWx1ZSgpICogem9vbUZhY3RvcjsKKyAgICAgICAgcmVzdWx0ID0gcmFk
aXVzLT5nZXRGbG9hdFZhbHVlKCkgKiBjb252ZXJzaW9uRGF0YS56b29tKCk7CiAgICAgZWxzZSBp
ZiAod2lkdGhPckhlaWdodCAmJiByYWRpdXMtPmlzUGVyY2VudGFnZSgpKQogICAgICAgICByZXN1
bHQgPSAqd2lkdGhPckhlaWdodCAqIHJhZGl1cy0+Z2V0RmxvYXRWYWx1ZSgpIC8gMTAwOwogICAg
IGVsc2UKLSAgICAgICAgcmVzdWx0ID0gcmFkaXVzLT5jb21wdXRlTGVuZ3RoPGZsb2F0Pigmc3R5
bGUsICZyb290U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICByZXN1bHQgPSByYWRpdXMtPmNv
bXB1dGVMZW5ndGg8ZmxvYXQ+KGNvbnZlcnNpb25EYXRhKTsKIAogICAgIHJldHVybiByZXN1bHQ7
CiB9CkBAIC05ODcsMTUgKzk4MiwxNSBAQCBQYXNzUmVmUHRyPEdyYWRpZW50PiBDU1NSYWRpYWxH
cmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudChSZW5kZXJFbGVtZW50KiByZW5kZQogewogICAg
IEFTU0VSVCghc2l6ZS5pc0VtcHR5KCkpOwogCi0gICAgUmVuZGVyU3R5bGUmIHJvb3RTdHlsZSA9
ICpyZW5kZXJlci0+ZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsK
KyAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhKCZyZW5kZXJlci0+
c3R5bGUoKSwgcmVuZGVyZXItPmRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlclN0
eWxlKCkpOwogCi0gICAgRmxvYXRQb2ludCBmaXJzdFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KG1f
Zmlyc3RYLmdldCgpLCBtX2ZpcnN0WS5nZXQoKSwgcmVuZGVyZXItPnN0eWxlKCksIHJvb3RTdHls
ZSwgc2l6ZSk7CisgICAgRmxvYXRQb2ludCBmaXJzdFBvaW50ID0gY29tcHV0ZUVuZFBvaW50KG1f
Zmlyc3RYLmdldCgpLCBtX2ZpcnN0WS5nZXQoKSwgY29udmVyc2lvbkRhdGEsIHNpemUpOwogICAg
IGlmICghbV9maXJzdFgpCiAgICAgICAgIGZpcnN0UG9pbnQuc2V0WChzaXplLndpZHRoKCkgLyAy
KTsKICAgICBpZiAoIW1fZmlyc3RZKQogICAgICAgICBmaXJzdFBvaW50LnNldFkoc2l6ZS5oZWln
aHQoKSAvIDIpOwogCi0gICAgRmxvYXRQb2ludCBzZWNvbmRQb2ludCA9IGNvbXB1dGVFbmRQb2lu
dChtX3NlY29uZFguZ2V0KCksIG1fc2Vjb25kWS5nZXQoKSwgcmVuZGVyZXItPnN0eWxlKCksIHJv
b3RTdHlsZSwgc2l6ZSk7CisgICAgRmxvYXRQb2ludCBzZWNvbmRQb2ludCA9IGNvbXB1dGVFbmRQ
b2ludChtX3NlY29uZFguZ2V0KCksIG1fc2Vjb25kWS5nZXQoKSwgY29udmVyc2lvbkRhdGEsIHNp
emUpOwogICAgIGlmICghbV9zZWNvbmRYKQogICAgICAgICBzZWNvbmRQb2ludC5zZXRYKHNpemUu
d2lkdGgoKSAvIDIpOwogICAgIGlmICghbV9zZWNvbmRZKQpAQCAtMTAwMywxOCArOTk4LDE4IEBA
IFBhc3NSZWZQdHI8R3JhZGllbnQ+IENTU1JhZGlhbEdyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRp
ZW50KFJlbmRlckVsZW1lbnQqIHJlbmRlCiAKICAgICBmbG9hdCBmaXJzdFJhZGl1cyA9IDA7CiAg
ICAgaWYgKG1fZmlyc3RSYWRpdXMpCi0gICAgICAgIGZpcnN0UmFkaXVzID0gcmVzb2x2ZVJhZGl1
cyhtX2ZpcnN0UmFkaXVzLmdldCgpLCByZW5kZXJlci0+c3R5bGUoKSwgcm9vdFN0eWxlKTsKKyAg
ICAgICAgZmlyc3RSYWRpdXMgPSByZXNvbHZlUmFkaXVzKG1fZmlyc3RSYWRpdXMuZ2V0KCksIGNv
bnZlcnNpb25EYXRhKTsKIAogICAgIGZsb2F0IHNlY29uZFJhZGl1cyA9IDA7CiAgICAgZmxvYXQg
YXNwZWN0UmF0aW8gPSAxOyAvLyB3aWR0aCAvIGhlaWdodC4KICAgICBpZiAobV9zZWNvbmRSYWRp
dXMpCi0gICAgICAgIHNlY29uZFJhZGl1cyA9IHJlc29sdmVSYWRpdXMobV9zZWNvbmRSYWRpdXMu
Z2V0KCksIHJlbmRlcmVyLT5zdHlsZSgpLCByb290U3R5bGUpOworICAgICAgICBzZWNvbmRSYWRp
dXMgPSByZXNvbHZlUmFkaXVzKG1fc2Vjb25kUmFkaXVzLmdldCgpLCBjb252ZXJzaW9uRGF0YSk7
CiAgICAgZWxzZSBpZiAobV9lbmRIb3Jpem9udGFsU2l6ZSkgewogICAgICAgICBmbG9hdCB3aWR0
aCA9IHNpemUud2lkdGgoKTsKICAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsK
LSAgICAgICAgc2Vjb25kUmFkaXVzID0gcmVzb2x2ZVJhZGl1cyhtX2VuZEhvcml6b250YWxTaXpl
LmdldCgpLCByZW5kZXJlci0+c3R5bGUoKSwgcm9vdFN0eWxlLCAmd2lkdGgpOworICAgICAgICBz
ZWNvbmRSYWRpdXMgPSByZXNvbHZlUmFkaXVzKG1fZW5kSG9yaXpvbnRhbFNpemUuZ2V0KCksIGNv
bnZlcnNpb25EYXRhLCAmd2lkdGgpOwogICAgICAgICBpZiAobV9lbmRWZXJ0aWNhbFNpemUpCi0g
ICAgICAgICAgICBhc3BlY3RSYXRpbyA9IHNlY29uZFJhZGl1cyAvIHJlc29sdmVSYWRpdXMobV9l
bmRWZXJ0aWNhbFNpemUuZ2V0KCksIHJlbmRlcmVyLT5zdHlsZSgpLCByb290U3R5bGUsICZoZWln
aHQpOworICAgICAgICAgICAgYXNwZWN0UmF0aW8gPSBzZWNvbmRSYWRpdXMgLyByZXNvbHZlUmFk
aXVzKG1fZW5kVmVydGljYWxTaXplLmdldCgpLCBjb252ZXJzaW9uRGF0YSwgJmhlaWdodCk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGFzcGVjdFJhdGlvID0gMTsKICAgICB9IGVsc2UgewpA
QCAtMTEyMCw3ICsxMTE1LDcgQEAgUGFzc1JlZlB0cjxHcmFkaWVudD4gQ1NTUmFkaWFsR3JhZGll
bnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyRWxlbWVudCogcmVuZGUKICAgICB9CiAKICAg
ICAvLyBOb3cgYWRkIHRoZSBzdG9wcy4KLSAgICBhZGRTdG9wcyhncmFkaWVudC5nZXQoKSwgcmVu
ZGVyZXIsIHJvb3RTdHlsZSwgbWF4RXh0ZW50KTsKKyAgICBhZGRTdG9wcyhncmFkaWVudC5nZXQo
KSwgY29udmVyc2lvbkRhdGEsIG1heEV4dGVudCk7CiAKICAgICByZXR1cm4gZ3JhZGllbnQucmVs
ZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFs
dWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgKaW5kZXggZDA4MDIw
N2FmMDdiOWI4MmRhYWVmNzc3MWRiNzNjYzMyNzEzNmZhZS4uNzVlMTBiN2JmZjIxNjZiODBjY2M3
MGM5NjQ3ODc1N2NkNjVkMWE0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
YWRpZW50VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5o
CkBAIC0xMDksMTAgKzEwOSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgIH0KIAotICAgIHZv
aWQgYWRkU3RvcHMoR3JhZGllbnQqLCBSZW5kZXJFbGVtZW50KiwgY29uc3QgUmVuZGVyU3R5bGUm
IHJvb3RTdHlsZSwgZmxvYXQgbWF4TGVuZ3RoRm9yUmVwZWF0ID0gMCk7CisgICAgdm9pZCBhZGRT
dG9wcyhHcmFkaWVudCosIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBmbG9hdCBt
YXhMZW5ndGhGb3JSZXBlYXQgPSAwKTsKIAogICAgIC8vIFJlc29sdmUgcG9pbnRzL3JhZGlpIHRv
IGZyb250IGVuZCB2YWx1ZXMuCi0gICAgRmxvYXRQb2ludCBjb21wdXRlRW5kUG9pbnQoQ1NTUHJp
bWl0aXZlVmFsdWUqLCBDU1NQcmltaXRpdmVWYWx1ZSosIGNvbnN0IFJlbmRlclN0eWxlJiwgY29u
c3QgUmVuZGVyU3R5bGUmIHJvb3RTdHlsZSwgY29uc3QgRmxvYXRTaXplJik7CisgICAgRmxvYXRQ
b2ludCBjb21wdXRlRW5kUG9pbnQoQ1NTUHJpbWl0aXZlVmFsdWUqLCBDU1NQcmltaXRpdmVWYWx1
ZSosIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBjb25zdCBGbG9hdFNpemUmKTsK
IAogICAgIGJvb2wgaXNDYWNoZWFibGUoKSBjb25zdDsKIApAQCAtMjE4LDcgKzIxOCw3IEBAIHBy
aXZhdGU6CiAKIAogICAgIC8vIFJlc29sdmUgcG9pbnRzL3JhZGlpIHRvIGZyb250IGVuZCB2YWx1
ZXMuCi0gICAgZmxvYXQgcmVzb2x2ZVJhZGl1cyhDU1NQcmltaXRpdmVWYWx1ZSosIGNvbnN0IFJl
bmRlclN0eWxlJiwgY29uc3QgUmVuZGVyU3R5bGUmIHJvb3RTdHlsZSwgZmxvYXQqIHdpZHRoT3JI
ZWlnaHQgPSAwKTsKKyAgICBmbG9hdCByZXNvbHZlUmFkaXVzKENTU1ByaW1pdGl2ZVZhbHVlKiwg
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIGZsb2F0KiB3aWR0aE9ySGVpZ2h0ID0g
MCk7CiAKICAgICAvLyBUaGVzZSBtYXkgYmUgbnVsbCBmb3Igbm9uLWRlcHJlY2F0ZWQgZ3JhZGll
bnRzLgogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9maXJzdFJhZGl1czsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCmluZGV4IGYyMjgwY2RlNjhjNjQ5Yzc1
NDFmNGM3NmI0YmY3NTEzMzFhM2MxNTAuLjc4YWQ3ZTdjMDFiYjgxNDg1NDZiYjg5ZGM3N2EzZTFl
Y2U2ZDcyNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcApAQCAt
MjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkNTU0hlbHBlci5oIgogI2luY2x1ZGUgIkNTU1BhcnNl
ci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1
ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKICNpbmNsdWRlICJDb2xvci5oIgpAQCAtNTU0LDc0ICs1
NTUsNzcgQEAgZG91YmxlIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlRGVncmVlcygpCiAgICAg
fQogfQogCi10ZW1wbGF0ZTw+IGludCBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aChj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUsIGZs
b2F0IG11bHRpcGxpZXIsIGJvb2wgY29tcHV0aW5nRm9udFNpemUpIGNvbnN0Cit0ZW1wbGF0ZTw+
IGludCBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aChjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QKIHsKLSAgICByZXR1cm4gcm91bmRG
b3JJbXByZWNpc2VDb252ZXJzaW9uPGludD4oY29tcHV0ZUxlbmd0aERvdWJsZShzdHlsZSwgcm9v
dFN0eWxlLCBtdWx0aXBsaWVyLCBjb21wdXRpbmdGb250U2l6ZSkpOworICAgIHJldHVybiByb3Vu
ZEZvckltcHJlY2lzZUNvbnZlcnNpb248aW50Pihjb21wdXRlTGVuZ3RoRG91YmxlKGNvbnZlcnNp
b25EYXRhKSk7CiB9CiAKLXRlbXBsYXRlPD4gdW5zaWduZWQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNv
bXB1dGVMZW5ndGgoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSog
cm9vdFN0eWxlLCBmbG9hdCBtdWx0aXBsaWVyLCBib29sIGNvbXB1dGluZ0ZvbnRTaXplKSBjb25z
dAordGVtcGxhdGU8PiB1bnNpZ25lZCBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aChj
b25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QKIHsK
LSAgICByZXR1cm4gcm91bmRGb3JJbXByZWNpc2VDb252ZXJzaW9uPHVuc2lnbmVkPihjb21wdXRl
TGVuZ3RoRG91YmxlKHN0eWxlLCByb290U3R5bGUsIG11bHRpcGxpZXIsIGNvbXB1dGluZ0ZvbnRT
aXplKSk7CisgICAgcmV0dXJuIHJvdW5kRm9ySW1wcmVjaXNlQ29udmVyc2lvbjx1bnNpZ25lZD4o
Y29tcHV0ZUxlbmd0aERvdWJsZShjb252ZXJzaW9uRGF0YSkpOwogfQogCi10ZW1wbGF0ZTw+IExl
bmd0aCBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aChjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUsIGZsb2F0IG11bHRpcGxpZXIsIGJv
b2wgY29tcHV0aW5nRm9udFNpemUpIGNvbnN0Cit0ZW1wbGF0ZTw+IExlbmd0aCBDU1NQcmltaXRp
dmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBj
b252ZXJzaW9uRGF0YSkgY29uc3QKIHsKICNpZiBFTkFCTEUoU1VCUElYRUxfTEFZT1VUKQotICAg
IHJldHVybiBMZW5ndGgoY2xhbXBUbzxmbG9hdD4oY29tcHV0ZUxlbmd0aERvdWJsZShzdHlsZSwg
cm9vdFN0eWxlLCBtdWx0aXBsaWVyLCBjb21wdXRpbmdGb250U2l6ZSksIG1pblZhbHVlRm9yQ3Nz
TGVuZ3RoLCBtYXhWYWx1ZUZvckNzc0xlbmd0aCksIEZpeGVkKTsKKyAgICByZXR1cm4gTGVuZ3Ro
KGNsYW1wVG88ZmxvYXQ+KGNvbXB1dGVMZW5ndGhEb3VibGUoY29udmVyc2lvbkRhdGEpLCBtaW5W
YWx1ZUZvckNzc0xlbmd0aCwgbWF4VmFsdWVGb3JDc3NMZW5ndGgpLCBGaXhlZCk7CiAjZWxzZQot
ICAgIHJldHVybiBMZW5ndGgoY2xhbXBUbzxmbG9hdD4ocm91bmRGb3JJbXByZWNpc2VDb252ZXJz
aW9uPGZsb2F0Pihjb21wdXRlTGVuZ3RoRG91YmxlKHN0eWxlLCByb290U3R5bGUsIG11bHRpcGxp
ZXIsIGNvbXB1dGluZ0ZvbnRTaXplKSksIG1pblZhbHVlRm9yQ3NzTGVuZ3RoLCBtYXhWYWx1ZUZv
ckNzc0xlbmd0aCksIEZpeGVkKTsKKyAgICByZXR1cm4gTGVuZ3RoKGNsYW1wVG88ZmxvYXQ+KHJv
dW5kRm9ySW1wcmVjaXNlQ29udmVyc2lvbjxmbG9hdD4oY29tcHV0ZUxlbmd0aERvdWJsZShjb252
ZXJzaW9uRGF0YSkpLCBtaW5WYWx1ZUZvckNzc0xlbmd0aCwgbWF4VmFsdWVGb3JDc3NMZW5ndGgp
LCBGaXhlZCk7CiAjZW5kaWYKIH0KIAotdGVtcGxhdGU8PiBzaG9ydCBDU1NQcmltaXRpdmVWYWx1
ZTo6Y29tcHV0ZUxlbmd0aChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0
eWxlKiByb290U3R5bGUsIGZsb2F0IG11bHRpcGxpZXIsIGJvb2wgY29tcHV0aW5nRm9udFNpemUp
IGNvbnN0Cit0ZW1wbGF0ZTw+IHNob3J0IENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3Ro
KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAog
ewotICAgIHJldHVybiByb3VuZEZvckltcHJlY2lzZUNvbnZlcnNpb248c2hvcnQ+KGNvbXB1dGVM
ZW5ndGhEb3VibGUoc3R5bGUsIHJvb3RTdHlsZSwgbXVsdGlwbGllciwgY29tcHV0aW5nRm9udFNp
emUpKTsKKyAgICByZXR1cm4gcm91bmRGb3JJbXByZWNpc2VDb252ZXJzaW9uPHNob3J0Pihjb21w
dXRlTGVuZ3RoRG91YmxlKGNvbnZlcnNpb25EYXRhKSk7CiB9CiAKLXRlbXBsYXRlPD4gdW5zaWdu
ZWQgc2hvcnQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGgoY29uc3QgUmVuZGVyU3R5
bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBmbG9hdCBtdWx0aXBsaWVy
LCBib29sIGNvbXB1dGluZ0ZvbnRTaXplKSBjb25zdAordGVtcGxhdGU8PiB1bnNpZ25lZCBzaG9y
dCBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aChjb25zdCBDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QKIHsKLSAgICByZXR1cm4gcm91bmRGb3JJ
bXByZWNpc2VDb252ZXJzaW9uPHVuc2lnbmVkIHNob3J0Pihjb21wdXRlTGVuZ3RoRG91YmxlKHN0
eWxlLCByb290U3R5bGUsIG11bHRpcGxpZXIsIGNvbXB1dGluZ0ZvbnRTaXplKSk7CisgICAgcmV0
dXJuIHJvdW5kRm9ySW1wcmVjaXNlQ29udmVyc2lvbjx1bnNpZ25lZCBzaG9ydD4oY29tcHV0ZUxl
bmd0aERvdWJsZShjb252ZXJzaW9uRGF0YSkpOwogfQogCi10ZW1wbGF0ZTw+IGZsb2F0IENTU1By
aW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29u
c3QgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZmxvYXQgbXVsdGlwbGllciwgYm9vbCBjb21wdXRp
bmdGb250U2l6ZSkgY29uc3QKK3RlbXBsYXRlPD4gZmxvYXQgQ1NTUHJpbWl0aXZlVmFsdWU6OmNv
bXB1dGVMZW5ndGgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRh
dGEpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pihjb21wdXRlTGVuZ3Ro
RG91YmxlKHN0eWxlLCByb290U3R5bGUsIG11bHRpcGxpZXIsIGNvbXB1dGluZ0ZvbnRTaXplKSk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pihjb21wdXRlTGVuZ3RoRG91YmxlKGNvbnZl
cnNpb25EYXRhKSk7CiB9CiAKLXRlbXBsYXRlPD4gZG91YmxlIENTU1ByaW1pdGl2ZVZhbHVlOjpj
b21wdXRlTGVuZ3RoKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUq
IHJvb3RTdHlsZSwgZmxvYXQgbXVsdGlwbGllciwgYm9vbCBjb21wdXRpbmdGb250U2l6ZSkgY29u
c3QKK3RlbXBsYXRlPD4gZG91YmxlIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoKGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAogewot
ICAgIHJldHVybiBjb21wdXRlTGVuZ3RoRG91YmxlKHN0eWxlLCByb290U3R5bGUsIG11bHRpcGxp
ZXIsIGNvbXB1dGluZ0ZvbnRTaXplKTsKKyAgICByZXR1cm4gY29tcHV0ZUxlbmd0aERvdWJsZShj
b252ZXJzaW9uRGF0YSk7CiB9CiAKLWRvdWJsZSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxl
bmd0aERvdWJsZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBy
b290U3R5bGUsIGZsb2F0IG11bHRpcGxpZXIsIGJvb2wgY29tcHV0aW5nRm9udFNpemUpIGNvbnN0
Citkb3VibGUgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhEb3VibGUoY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0CiB7CiAgICAgaWYg
KG1fcHJpbWl0aXZlVW5pdFR5cGUgPT0gQ1NTX0NBTEMpCiAgICAgICAgIC8vIFRoZSBtdWx0aXBs
aWVyIGFuZCBmYWN0b3IgaXMgYXBwbGllZCB0byBlYWNoIHZhbHVlIGluIHRoZSBjYWxjIGV4cHJl
c3Npb24gaW5kaXZpZHVhbGx5Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlLmNhbGMtPmNvbXB1dGVM
ZW5ndGhQeChzdHlsZSwgcm9vdFN0eWxlLCBtdWx0aXBsaWVyLCBjb21wdXRpbmdGb250U2l6ZSk7
CisgICAgICAgIHJldHVybiBtX3ZhbHVlLmNhbGMtPmNvbXB1dGVMZW5ndGhQeChjb252ZXJzaW9u
RGF0YSk7CiAKICAgICBkb3VibGUgZmFjdG9yOwogCiAgICAgc3dpdGNoIChwcmltaXRpdmVUeXBl
KCkpIHsKICAgICBjYXNlIENTU19FTVM6Ci0gICAgICAgIGZhY3RvciA9IGNvbXB1dGluZ0ZvbnRT
aXplID8gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKSA6IHN0eWxlLT5m
b250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKTsKKyAgICAgICAgQVNTRVJUKGNvbnZlcnNp
b25EYXRhLnN0eWxlKCkpOworICAgICAgICBmYWN0b3IgPSBjb252ZXJzaW9uRGF0YS5jb21wdXRp
bmdGb250U2l6ZSgpID8gY29udmVyc2lvbkRhdGEuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCku
c3BlY2lmaWVkU2l6ZSgpIDogY29udmVyc2lvbkRhdGEuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9u
KCkuY29tcHV0ZWRTaXplKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTX0VYUzoKKyAg
ICAgICAgQVNTRVJUKGNvbnZlcnNpb25EYXRhLnN0eWxlKCkpOwogICAgICAgICAvLyBGSVhNRTog
V2UgaGF2ZSBhIGJ1ZyByaWdodCBub3cgd2hlcmUgdGhlIHpvb20gd2lsbCBiZSBhcHBsaWVkIHR3
aWNlIHRvIEVYIHVuaXRzLgogICAgICAgICAvLyBXZSByZWFsbHkgbmVlZCB0byBjb21wdXRlIEVY
IHVzaW5nIGZvbnRNZXRyaWNzIGZvciB0aGUgb3JpZ2luYWwgc3BlY2lmaWVkU2l6ZSBhbmQgbm90
IHVzZQogICAgICAgICAvLyBvdXIgYWN0dWFsIGNvbnN0cnVjdGVkIHJlbmRlcmluZyBmb250Lgot
ICAgICAgICBpZiAoc3R5bGUtPmZvbnRNZXRyaWNzKCkuaGFzWEhlaWdodCgpKQotICAgICAgICAg
ICAgZmFjdG9yID0gc3R5bGUtPmZvbnRNZXRyaWNzKCkueEhlaWdodCgpOworICAgICAgICBpZiAo
Y29udmVyc2lvbkRhdGEuc3R5bGUoKS0+Zm9udE1ldHJpY3MoKS5oYXNYSGVpZ2h0KCkpCisgICAg
ICAgICAgICBmYWN0b3IgPSBjb252ZXJzaW9uRGF0YS5zdHlsZSgpLT5mb250TWV0cmljcygpLnhI
ZWlnaHQoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZmFjdG9yID0gKGNvbXB1dGluZ0Zv
bnRTaXplID8gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKSA6IHN0eWxl
LT5mb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKSkgLyAyLjA7CisgICAgICAgICAgICBm
YWN0b3IgPSAoY29udmVyc2lvbkRhdGEuY29tcHV0aW5nRm9udFNpemUoKSA/IGNvbnZlcnNpb25E
YXRhLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKSA6IGNvbnZlcnNp
b25EYXRhLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpKSAvIDIuMDsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NfUkVNUzoKLSAgICAgICAgaWYgKHJvb3RTdHls
ZSkKLSAgICAgICAgICAgIGZhY3RvciA9IGNvbXB1dGluZ0ZvbnRTaXplID8gcm9vdFN0eWxlLT5m
b250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCkgOiByb290U3R5bGUtPmZvbnREZXNjcmlw
dGlvbigpLmNvbXB1dGVkU2l6ZSgpOworICAgICAgICBpZiAoY29udmVyc2lvbkRhdGEucm9vdFN0
eWxlKCkpCisgICAgICAgICAgICBmYWN0b3IgPSBjb252ZXJzaW9uRGF0YS5jb21wdXRpbmdGb250
U2l6ZSgpID8gY29udmVyc2lvbkRhdGEucm9vdFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLnNw
ZWNpZmllZFNpemUoKSA6IGNvbnZlcnNpb25EYXRhLnJvb3RTdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKS5jb21wdXRlZFNpemUoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZmFjdG9yID0g
MS4wOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU19DSFM6Ci0gICAgICAgIGZhY3RvciA9
IHN0eWxlLT5mb250TWV0cmljcygpLnplcm9XaWR0aCgpOworICAgICAgICBBU1NFUlQoY29udmVy
c2lvbkRhdGEuc3R5bGUoKSk7CisgICAgICAgIGZhY3RvciA9IGNvbnZlcnNpb25EYXRhLnN0eWxl
KCktPmZvbnRNZXRyaWNzKCkuemVyb1dpZHRoKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Q1NTX1BYOgogICAgICAgICBmYWN0b3IgPSAxLjA7CkBAIC02NjEsMTAgKzY2NSwxMCBAQCBkb3Vi
bGUgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhEb3VibGUoY29uc3QgUmVuZGVyU3R5
bGUqIHN0eWxlLCBjb25zdCBSZQogICAgIC8vIGZvciBmb250IHNpemVzIGlzIG11Y2ggbW9yZSBj
b21wbGljYXRlZCwgc2luY2Ugd2UgaGF2ZSB0byB3b3JyeSBhYm91dCBlbmZvcmNpbmcgdGhlIG1p
bmltdW0gZm9udCBzaXplIHByZWZlcmVuY2UKICAgICAvLyBhcyB3ZWxsIGFzIGVuZm9yY2luZyB0
aGUgaW1wbGljaXQgInNtYXJ0IG1pbmltdW0uIgogICAgIGRvdWJsZSByZXN1bHQgPSBnZXREb3Vi
bGVWYWx1ZSgpICogZmFjdG9yOwotICAgIGlmIChjb21wdXRpbmdGb250U2l6ZSB8fCBpc0ZvbnRS
ZWxhdGl2ZUxlbmd0aCgpKQorICAgIGlmIChjb252ZXJzaW9uRGF0YS5jb21wdXRpbmdGb250U2l6
ZSgpIHx8IGlzRm9udFJlbGF0aXZlTGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAK
LSAgICByZXR1cm4gcmVzdWx0ICogbXVsdGlwbGllcjsKKyAgICByZXR1cm4gcmVzdWx0ICogY29u
dmVyc2lvbkRhdGEuem9vbSgpOwogfQogCiB2b2lkIENTU1ByaW1pdGl2ZVZhbHVlOjpzZXRGbG9h
dFZhbHVlKHVuc2lnbmVkIHNob3J0LCBkb3VibGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAppbmRleCBlZTdkYmY3YjRjMzNkNWQ5MTk1MzAx
MjFjYWJiZmM4MWMxNTQ0NTI2Li42NWExMDUyMzkyZWYyNmJjMjVmMTYyMjZkMmZkMTliMmZkY2Vi
YWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaApAQCAtMzMsNiArMzMs
NyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NDYWxjVmFsdWU7CitjbGFzcyBD
U1NUb0xlbmd0aENvbnZlcnNpb25EYXRhOwogY2xhc3MgQ291bnRlcjsKIGNsYXNzIERhc2hib2Fy
ZFJlZ2lvbjsKIGNsYXNzIFBhaXI7CkBAIC0yNjUsMTAgKzI2NiwxMCBAQCBwdWJsaWM6CiAgICAg
ICogdGhpcyBpcyBzY3JlZW4vcHJpbnRlciBkZXBlbmRlbnQsIHNvIHdlIHByb2JhYmx5IG5lZWQg
YSBjb25maWcgb3B0aW9uIGZvciB0aGlzLAogICAgICAqIGFuZCBzb21lIHRvb2wgdG8gY2FsaWJy
YXRlLgogICAgICAqLwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29tcHV0ZUxlbmd0aChj
b25zdCBSZW5kZXJTdHlsZSogY3VyclN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxl
LCBmbG9hdCBtdWx0aXBsaWVyID0gMS4wZiwgYm9vbCBjb21wdXRpbmdGb250U2l6ZSA9IGZhbHNl
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbXB1dGVMZW5ndGgoY29uc3Qg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0OwogCiAgICAgLy8gQ29udmVydHMgdG8g
YSBMZW5ndGgsIG1hcHBpbmcgdmFyaW91cyB1bml0IHR5cGVzIGFwcHJvcHJpYXRlbHkuCi0gICAg
dGVtcGxhdGU8aW50PiBMZW5ndGggY29udmVydFRvTGVuZ3RoKGNvbnN0IFJlbmRlclN0eWxlKiBj
dXJyU3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVy
ID0gMS4wLCBib29sIGNvbXB1dGluZ0ZvbnRTaXplID0gZmFsc2UpIGNvbnN0OworICAgIHRlbXBs
YXRlPGludD4gTGVuZ3RoIGNvbnZlcnRUb0xlbmd0aChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJikgY29uc3Q7CiAKICAgICAvLyB1c2Ugd2l0aCBjYXJlISEhCiAgICAgdm9pZCBzZXRQ
cmltaXRpdmVUeXBlKHVuc2lnbmVkIHNob3J0IHR5cGUpIHsgbV9wcmltaXRpdmVVbml0VHlwZSA9
IHR5cGU7IH0KQEAgLTM3OCw3ICszNzksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5pdChQYXNz
UmVmUHRyPENTU0NhbGNWYWx1ZT4pOwogICAgIGJvb2wgZ2V0RG91YmxlVmFsdWVJbnRlcm5hbChV
bml0VHlwZXMgdGFyZ2V0VW5pdFR5cGUsIGRvdWJsZSogcmVzdWx0KSBjb25zdDsKIAotICAgIGRv
dWJsZSBjb21wdXRlTGVuZ3RoRG91YmxlKGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUs
IGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUsIGZsb2F0IG11bHRpcGxpZXIsIGJvb2wgY29t
cHV0aW5nRm9udFNpemUpIGNvbnN0OworICAgIGRvdWJsZSBjb21wdXRlTGVuZ3RoRG91YmxlKGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdDsKIAogICAgIHVuaW9uIHsKICAg
ICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgKaW5kZXggYjViN2MzMTZlMzFkYjM3ZDkzMzM0YTMz
MGRkYjkwYWZkZTVkZGI0OS4uZjc0NTdhOGJjMjhmN2QzYjc0MWIwZGE5MDE5NmI0MTk1N2NiMTY4
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGlu
Z3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5o
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgogI2lu
Y2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUmVmbGVjdGlvbkRpcmVj
dGlvbi5oIgorI2luY2x1ZGUgIkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaCIKICNpbmNsdWRl
ICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUg
IkZvbnREZXNjcmlwdGlvbi5oIgpAQCAtNDYzMSwxNCArNDYzMiwxNCBAQCBlbnVtIExlbmd0aENv
bnZlcnNpb24gewogICAgIFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24gPSAxIDw8IDYKIH07
CiAKLXRlbXBsYXRlPGludCBzdXBwb3J0ZWQ+IExlbmd0aCBDU1NQcmltaXRpdmVWYWx1ZTo6Y29u
dmVydFRvTGVuZ3RoKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUq
IHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIsIGJvb2wgY29tcHV0aW5nRm9udFNpemUpIGNv
bnN0Cit0ZW1wbGF0ZTxpbnQgc3VwcG9ydGVkPiBMZW5ndGggQ1NTUHJpbWl0aXZlVmFsdWU6OmNv
bnZlcnRUb0xlbmd0aChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9u
RGF0YSkgY29uc3QKIHsKLSAgICBpZiAoKHN1cHBvcnRlZCAmIChGaXhlZEludGVnZXJDb252ZXJz
aW9uIHwgRml4ZWRGbG9hdENvbnZlcnNpb24pKSAmJiBpc0ZvbnRSZWxhdGl2ZUxlbmd0aCgpICYm
ICghc3R5bGUgfHwgIXJvb3RTdHlsZSkpCisgICAgaWYgKChzdXBwb3J0ZWQgJiAoRml4ZWRJbnRl
Z2VyQ29udmVyc2lvbiB8IEZpeGVkRmxvYXRDb252ZXJzaW9uKSkgJiYgaXNGb250UmVsYXRpdmVM
ZW5ndGgoKSAmJiAoIWNvbnZlcnNpb25EYXRhLnN0eWxlKCkgfHwgIWNvbnZlcnNpb25EYXRhLnJv
b3RTdHlsZSgpKSkKICAgICAgICAgcmV0dXJuIExlbmd0aChVbmRlZmluZWQpOwogICAgIGlmICgo
c3VwcG9ydGVkICYgRml4ZWRJbnRlZ2VyQ29udmVyc2lvbikgJiYgaXNMZW5ndGgoKSkKLSAgICAg
ICAgcmV0dXJuIGNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSwgcm9vdFN0eWxlLCBtdWx0aXBs
aWVyLCBjb21wdXRpbmdGb250U2l6ZSk7CisgICAgICAgIHJldHVybiBjb21wdXRlTGVuZ3RoPExl
bmd0aD4oY29udmVyc2lvbkRhdGEpOwogICAgIGlmICgoc3VwcG9ydGVkICYgRml4ZWRGbG9hdENv
bnZlcnNpb24pICYmIGlzTGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBMZW5ndGgoY29tcHV0ZUxl
bmd0aDxkb3VibGU+KHN0eWxlLCByb290U3R5bGUsIG11bHRpcGxpZXIpLCBGaXhlZCk7CisgICAg
ICAgIHJldHVybiBMZW5ndGgoY29tcHV0ZUxlbmd0aDxkb3VibGU+KGNvbnZlcnNpb25EYXRhKSwg
Rml4ZWQpOwogICAgIGlmICgoc3VwcG9ydGVkICYgUGVyY2VudENvbnZlcnNpb24pICYmIGlzUGVy
Y2VudGFnZSgpKQogICAgICAgICByZXR1cm4gTGVuZ3RoKGdldERvdWJsZVZhbHVlKCksIFBlcmNl
bnQpOwogICAgIGlmICgoc3VwcG9ydGVkICYgRnJhY3Rpb25Db252ZXJzaW9uKSAmJiBpc051bWJl
cigpKQpAQCAtNDY0Niw3ICs0NjQ3LDcgQEAgdGVtcGxhdGU8aW50IHN1cHBvcnRlZD4gTGVuZ3Ro
IENTU1ByaW1pdGl2ZVZhbHVlOjpjb252ZXJ0VG9MZW5ndGgoY29uc3QgUmVuZGVyU3QKICAgICBp
ZiAoKHN1cHBvcnRlZCAmIEF1dG9Db252ZXJzaW9uKSAmJiBnZXRWYWx1ZUlEKCkgPT0gQ1NTVmFs
dWVBdXRvKQogICAgICAgICByZXR1cm4gTGVuZ3RoKEF1dG8pOwogICAgIGlmICgoc3VwcG9ydGVk
ICYgQ2FsY3VsYXRlZENvbnZlcnNpb24pICYmIGlzQ2FsY3VsYXRlZCgpKQotICAgICAgICByZXR1
cm4gTGVuZ3RoKGNzc0NhbGNWYWx1ZSgpLT5jcmVhdGVDYWxjdWxhdGlvblZhbHVlKHN0eWxlLCBy
b290U3R5bGUsIG11bHRpcGxpZXIpKTsKKyAgICAgICAgcmV0dXJuIExlbmd0aChjc3NDYWxjVmFs
dWUoKS0+Y3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShjb252ZXJzaW9uRGF0YSkpOwogICAgIGlmICgo
c3VwcG9ydGVkICYgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbikgJiYgaXNWaWV3cG9ydFBl
cmNlbnRhZ2VMZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIHZpZXdwb3J0UGVyY2VudGFnZUxlbmd0
aCgpOwogICAgIHJldHVybiBMZW5ndGgoVW5kZWZpbmVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZmM0YWU1Njlk
YzU0NjYxOTE5YTk4ZjIxOGVjYzg3MmJhMDM1NGU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuY3BwCkBAIC0wLDAgKzEsNDUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YS5oIgorCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitmbG9hdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhOjp6b29tKCkgY29uc3QKK3sKKyAgICBp
ZiAobV91c2VFZmZlY3RpdmVab29tKQorICAgICAgICByZXR1cm4gbV9zdHlsZSA/IG1fc3R5bGUt
PmVmZmVjdGl2ZVpvb20oKSA6IDE7CisgICAgcmV0dXJuIG1fem9vbTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjVmMzlmYmI3MzRkZTgwNDI1ODQ5ZjJhNTA4ZDgwZTg3MzYz
ZWMzZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YV9oCisjZGVmaW5lIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGFfaAorCisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJTdHlsZTsKKworY2xhc3MgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSB7CitwdWJsaWM6CisgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUs
IGZsb2F0IHpvb20sIGJvb2wgY29tcHV0aW5nRm9udFNpemUgPSBmYWxzZSkKKyAgICAgICAgOiBt
X3N0eWxlKHN0eWxlKQorICAgICAgICAsIG1fcm9vdFN0eWxlKHJvb3RTdHlsZSkKKyAgICAgICAg
LCBtX3pvb20oem9vbSkKKyAgICAgICAgLCBtX3VzZUVmZmVjdGl2ZVpvb20oZmFsc2UpCisgICAg
ICAgICwgbV9jb21wdXRpbmdGb250U2l6ZShjb21wdXRpbmdGb250U2l6ZSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCh6b29tID4gMCk7CisgICAgfQorICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlID0gbnVsbHB0ciwgY29uc3QgUmVuZGVyU3R5bGUq
IHJvb3RTdHlsZSA9IG51bGxwdHIsIGJvb2wgY29tcHV0aW5nRm9udFNpemUgPSBmYWxzZSkKKyAg
ICAgICAgOiBtX3N0eWxlKHN0eWxlKQorICAgICAgICAsIG1fcm9vdFN0eWxlKHJvb3RTdHlsZSkK
KyAgICAgICAgLCBtX3VzZUVmZmVjdGl2ZVpvb20odHJ1ZSkKKyAgICAgICAgLCBtX2NvbXB1dGlu
Z0ZvbnRTaXplKGNvbXB1dGluZ0ZvbnRTaXplKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9CisgICAgY29uc3Qg
UmVuZGVyU3R5bGUqIHJvb3RTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdFN0eWxlOyB9Cisg
ICAgZmxvYXQgem9vbSgpIGNvbnN0OworICAgIGJvb2wgY29tcHV0aW5nRm9udFNpemUoKSBjb25z
dCB7IHJldHVybiBtX2NvbXB1dGluZ0ZvbnRTaXplOyB9CisKKyAgICBDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhIGNvcHlXaXRoQWRqdXN0ZWRab29tKGZsb2F0IG5ld1pvb20pIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YShtX3N0eWxlLCBtX3Jv
b3RTdHlsZSwgbmV3Wm9vbSwgbV9jb21wdXRpbmdGb250U2l6ZSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIGNvbnN0IFJlbmRlclN0eWxlKiBtX3N0eWxlOworICAgIGNvbnN0IFJlbmRlclN0eWxl
KiBtX3Jvb3RTdHlsZTsKKyAgICBmbG9hdCBtX3pvb207CisgICAgYm9vbCBtX3VzZUVmZmVjdGl2
ZVpvb207CisgICAgYm9vbCBtX2NvbXB1dGluZ0ZvbnRTaXplOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NU
b1N0eWxlTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAppbmRl
eCA0NjkzMWU1ZTY4MmRiN2VjYzg2MTBlNjYxOTM4ZDA5MGZmNzEwYzIwLi4yOGY2NGU4NTRjYjk1
OGIwNmViNTE2YTI0NTdkZWVmOGZmNmZjNTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVG9TdHlsZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVN
YXAuY3BwCkBAIC00MSw2ICs0MSwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK0NTU1Rv
U3R5bGVNYXA6OkNTU1RvU3R5bGVNYXAoU3R5bGVSZXNvbHZlciogcmVzb2x2ZXIpCisgICAgOiBt
X3Jlc29sdmVyKHJlc29sdmVyKQoreworfQorCiBSZW5kZXJTdHlsZSogQ1NTVG9TdHlsZU1hcDo6
c3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiBtX3Jlc29sdmVyLT5zdHlsZSgpOwpAQCAtMjAz
LDE4ICsyMDgsMTYgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsU2l6ZShDU1NQcm9wZXJ0
eUlELCBGaWxsTGF5ZXIqIGxheWVyLCBDU1NWYWx1ZSogdmFsdWUKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7
Ci0KICAgICBMZW5ndGggZmlyc3RMZW5ndGg7CiAgICAgTGVuZ3RoIHNlY29uZExlbmd0aDsKIAog
ICAgIGlmIChQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1ZSgpKSB7CiAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4ocGFpci0+Zmlyc3QoKSk7CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNv
bmQgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHBhaXItPnNlY29uZCgpKTsKLSAg
ICAgICAgZmlyc3RMZW5ndGggPSBmaXJzdC0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+
KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7Ci0gICAgICAgIHNlY29u
ZExlbmd0aCA9IHNlY29uZC0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KHN0eWxlKCks
IHJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CisgICAgICAgIGZpcnN0TGVuZ3RoID0g
Zmlyc3QtPmNvbnZlcnRUb0xlbmd0aDxBbnlDb252ZXJzaW9uPihtX3Jlc29sdmVyLT5zdGF0ZSgp
LmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CisgICAgICAgIHNlY29uZExlbmd0aCA9IHNl
Y29uZC0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KG1fcmVzb2x2ZXItPnN0YXRlKCku
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKICAgICB9IGVsc2UgewotICAgICAgICBmaXJz
dExlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8QW55Q29udmVyc2lvbj4o
c3R5bGUoKSwgcm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgZmlyc3RM
ZW5ndGggPSBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEFueUNvbnZlcnNpb24+KG1f
cmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKICAgICAgICAg
c2Vjb25kTGVuZ3RoID0gTGVuZ3RoKCk7CiAgICAgfQogCkBAIC0yMzYsOCArMjM5LDYgQEAgdm9p
ZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsWFBvc2l0aW9uKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgRmlsbExheWVyKiBsYXllciwKICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdHlsZSgpLT5lZmZl
Y3RpdmVab29tKCk7Ci0KICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKICAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFs
dWUtPmdldFBhaXJWYWx1ZSgpOwogICAgIGlmIChwYWlyKSB7CkBAIC0yNDcsMTEgKzI0OCwxMSBA
QCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxYUG9zaXRpb24oQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLAogCiAgICAgTGVuZ3RoIGxlbmd0aDsKICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAgICAgIGxlbmd0aCA9IHByaW1pdGl2ZVZh
bHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUoKSwgcm9vdEVsZW1lbnRTdHlsZSgpLCB6
b29tRmFjdG9yKTsKKyAgICAgICAgbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5n
dGg8TGVuZ3RoPihtX3Jlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEo
KSk7CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKQogICAgICAg
ICBsZW5ndGggPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNl
bnQpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdl
V2l0aExlbmd0aCgpKQotICAgICAgICBsZW5ndGggPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNz
c0NhbGNWYWx1ZSgpLT5jcmVhdGVDYWxjdWxhdGlvblZhbHVlKHN0eWxlKCksIHJvb3RFbGVtZW50
U3R5bGUoKSwgem9vbUZhY3RvcikpOworICAgICAgICBsZW5ndGggPSBMZW5ndGgocHJpbWl0aXZl
VmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT5jcmVhdGVDYWxjdWxhdGlvblZhbHVlKG1fcmVzb2x2ZXIt
PnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSk7CiAgICAgZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCiAgICAgICAgIGxlbmd0
aCA9IHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKICAgICBlbHNl
CkBAIC0yNzIsOCArMjczLDYgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsWVBvc2l0aW9u
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwKICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZsb2F0IHpv
b21GYWN0b3IgPSBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0KICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKICAgICBQ
YWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUtPmdldFBhaXJWYWx1ZSgpOwogICAgIGlmIChwYWly
KSB7CkBAIC0yODMsMTEgKzI4MiwxMSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxZUG9z
aXRpb24oQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXIqIGxheWVyLAogCiAgICAg
TGVuZ3RoIGxlbmd0aDsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpCi0gICAg
ICAgIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGUo
KSwgcm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgbGVuZ3RoID0gcHJp
bWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihtX3Jlc29sdmVyLT5zdGF0ZSgpLmNz
c1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUt
PmlzUGVyY2VudGFnZSgpKQogICAgICAgICBsZW5ndGggPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUt
PmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKQotICAgICAgICBsZW5ndGggPSBM
ZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT5jcmVhdGVDYWxjdWxhdGlvblZh
bHVlKHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZhY3RvcikpOworICAgICAgICBs
ZW5ndGggPSBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT5jcmVhdGVDYWxj
dWxhdGlvblZhbHVlKG1fcmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSgpKSk7CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzVmlld3BvcnRQZXJjZW50YWdl
TGVuZ3RoKCkpCiAgICAgICAgIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNl
bnRhZ2VMZW5ndGgoKTsKICAgICBlbHNlCkBAIC02MzMsNyArNjMyLDcgQEAgTGVuZ3RoQm94IENT
U1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlUXVhZChDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ICAgIHJldHVybiBMZW5ndGhCb3goKTsKIAogICAgIC8vIEdldCBvdXIgem9vbSB2YWx1ZS4KLSAg
ICBmbG9hdCB6b29tID0gdXNlU1ZHWm9vbVJ1bGVzKCkgPyAxLjBmIDogc3R5bGUoKS0+ZWZmZWN0
aXZlWm9vbSgpOworICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEg
PSB1c2VTVkdab29tUnVsZXMoKSA/IG1fcmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpIDogbV9yZXNvbHZlci0+c3Rh
dGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CiAKICAgICAvLyBSZXRyaWV2ZSB0aGUg
cHJpbWl0aXZlIHZhbHVlLgogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBib3JkZXJXaWR0aHMgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlKTsKQEAgLTY0NiwyOCArNjQ1LDI4IEBAIExlbmd0aEJv
eCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVF1YWQoQ1NTVmFsdWUqIHZhbHVlKQog
ICAgIGVsc2UgaWYgKHNsaWNlcy0+dG9wKCktPmlzUGVyY2VudGFnZSgpKQogICAgICAgICBib3gu
bV90b3AgPSBMZW5ndGgoc2xpY2VzLT50b3AoKS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QRVJDRU5UQUdFKSwgUGVyY2VudCk7CiAgICAgZWxzZSBpZiAoc2xpY2VzLT50
b3AoKS0+Z2V0VmFsdWVJRCgpICE9IENTU1ZhbHVlQXV0bykKLSAgICAgICAgYm94Lm1fdG9wID0g
c2xpY2VzLT50b3AoKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIHJvb3RFbGVtZW50
U3R5bGUoKSwgem9vbSk7CisgICAgICAgIGJveC5tX3RvcCA9IHNsaWNlcy0+dG9wKCktPmNvbXB1
dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9uRGF0YSk7CiAKICAgICBpZiAoc2xpY2VzLT5yaWdo
dCgpLT5pc051bWJlcigpKQogICAgICAgICBib3gubV9yaWdodCA9IExlbmd0aChzbGljZXMtPnJp
Z2h0KCktPmdldEludFZhbHVlKCksIFJlbGF0aXZlKTsKICAgICBlbHNlIGlmIChzbGljZXMtPnJp
Z2h0KCktPmlzUGVyY2VudGFnZSgpKQogICAgICAgICBib3gubV9yaWdodCA9IExlbmd0aChzbGlj
ZXMtPnJpZ2h0KCktPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VO
VEFHRSksIFBlcmNlbnQpOwogICAgIGVsc2UgaWYgKHNsaWNlcy0+cmlnaHQoKS0+Z2V0VmFsdWVJ
RCgpICE9IENTU1ZhbHVlQXV0bykKLSAgICAgICAgYm94Lm1fcmlnaHQgPSBzbGljZXMtPnJpZ2h0
KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZSgpLCByb290RWxlbWVudFN0eWxlKCksIHpv
b20pOworICAgICAgICBib3gubV9yaWdodCA9IHNsaWNlcy0+cmlnaHQoKS0+Y29tcHV0ZUxlbmd0
aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKIAogICAgIGlmIChzbGljZXMtPmJvdHRvbSgpLT5p
c051bWJlcigpKQogICAgICAgICBib3gubV9ib3R0b20gPSBMZW5ndGgoc2xpY2VzLT5ib3R0b20o
KS0+Z2V0SW50VmFsdWUoKSwgUmVsYXRpdmUpOwogICAgIGVsc2UgaWYgKHNsaWNlcy0+Ym90dG9t
KCktPmlzUGVyY2VudGFnZSgpKQogICAgICAgICBib3gubV9ib3R0b20gPSBMZW5ndGgoc2xpY2Vz
LT5ib3R0b20oKS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5U
QUdFKSwgUGVyY2VudCk7CiAgICAgZWxzZSBpZiAoc2xpY2VzLT5ib3R0b20oKS0+Z2V0VmFsdWVJ
RCgpICE9IENTU1ZhbHVlQXV0bykKLSAgICAgICAgYm94Lm1fYm90dG9tID0gc2xpY2VzLT5ib3R0
b20oKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlKCksIHJvb3RFbGVtZW50U3R5bGUoKSwg
em9vbSk7CisgICAgICAgIGJveC5tX2JvdHRvbSA9IHNsaWNlcy0+Ym90dG9tKCktPmNvbXB1dGVM
ZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9uRGF0YSk7CiAKICAgICBpZiAoc2xpY2VzLT5sZWZ0KCkt
PmlzTnVtYmVyKCkpCiAgICAgICAgIGJveC5tX2xlZnQgPSBMZW5ndGgoc2xpY2VzLT5sZWZ0KCkt
PmdldEludFZhbHVlKCksIFJlbGF0aXZlKTsKICAgICBlbHNlIGlmIChzbGljZXMtPmxlZnQoKS0+
aXNQZXJjZW50YWdlKCkpCiAgICAgICAgIGJveC5tX2xlZnQgPSBMZW5ndGgoc2xpY2VzLT5sZWZ0
KCktPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSksIFBl
cmNlbnQpOwogICAgIGVsc2UgaWYgKHNsaWNlcy0+bGVmdCgpLT5nZXRWYWx1ZUlEKCkgIT0gQ1NT
VmFsdWVBdXRvKQotICAgICAgICBib3gubV9sZWZ0ID0gc2xpY2VzLT5sZWZ0KCktPmNvbXB1dGVM
ZW5ndGg8TGVuZ3RoPihzdHlsZSgpLCByb290RWxlbWVudFN0eWxlKCksIHpvb20pOworICAgICAg
ICBib3gubV9sZWZ0ID0gc2xpY2VzLT5sZWZ0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252
ZXJzaW9uRGF0YSk7CiAKICAgICByZXR1cm4gYm94OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxl
TWFwLmgKaW5kZXggNjE3ZGZhZGQ5ODRjZjM4ZmQ3NDEwMTUxMGQwNTYyODgxMjIzYmE1Ny4uYjRl
Y2NjNjc0MzlhMTg1ZDVjYjliZjFhMTkxNjI0MjNhNDM2MjNhZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VG9TdHlsZU1hcC5oCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIENTU1RvU3R5bGVNYXAgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBwdWJsaWM6Ci0gICAgQ1NTVG9TdHlsZU1hcChT
dHlsZVJlc29sdmVyKiByZXNvbHZlcikgOiBtX3Jlc29sdmVyKHJlc29sdmVyKSB7IH0KKyAgICBD
U1NUb1N0eWxlTWFwKFN0eWxlUmVzb2x2ZXIqKTsKIAogICAgIHZvaWQgbWFwRmlsbEF0dGFjaG1l
bnQoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsKICAgICB2b2lkIG1hcEZp
bGxDbGlwKENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvRGVwcmVjYXRlZFN0eWxlQnVpbGRlci5jcHAKaW5kZXggOTU0YjE1OTYwMzcy
OGU1YmEyMTE0NjZiY2E4NzRkMGNjYmEwZTY3Zi4uNTJhZmUzMTQ0ZTNlMmVkMWU1YTc2YzlhZmM3
NzUxYzJhYWEyYmQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0RlcHJlY2F0ZWRT
dHlsZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9EZXByZWNhdGVkU3R5bGVC
dWlsZGVyLmNwcApAQCAtMjIwLDcgKzIyMCw3IEBAIHB1YmxpYzoKICAgICAgICAgZWxzZSBpZiAo
dmFsdWVUeXBlID09IE51bWJlcikKICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCksICpwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlVHlwZSA9
PSBDb21wdXRlTGVuZ3RoKQotICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4oc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVz
b2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSk7CiAgICAgfQogCiAg
ICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVy
dHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlW
YWx1ZSk7IH0KQEAgLTIzMCw3ICsyMzAsNyBAQCBjbGFzcyBBcHBseVByb3BlcnR5Q2xpcCB7CiBw
cml2YXRlOgogICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvTGVuZ3RoKFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiB2YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQ
ZXJjZW50Q29udmVyc2lvbiB8IEZyYWN0aW9uQ29udmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCks
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgICAgIHJldHVy
biB2YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50
Q29udmVyc2lvbiB8IEZyYWN0aW9uQ29udmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihzdHlsZVJl
c29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiAgICAgfQogcHVi
bGljOgogICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKQEAgLTM4NywxMyArMzg3LDEz
IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKGF1dG9FbmFibGVkICYmIHByaW1pdGl2ZVZhbHVlLT5n
ZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKCkpOwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+aXNMZW5ndGgoKSkgewotICAgICAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2
ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5
bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCkpOworICAgICAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2ZVZh
bHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xl
bmd0aENvbnZlcnNpb25EYXRhKCkpOwogICAgICAgICAgICAgbGVuZ3RoLnNldEhhc1F1aXJrKHBy
aW1pdGl2ZVZhbHVlLT5pc1F1aXJrVmFsdWUoKSk7CiAgICAgICAgICAgICBzZXRWYWx1ZShzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLCBsZW5ndGgpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVy
Y2VudCkpOwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNDYWxjdWxhdGVkUGVy
Y2VudGFnZVdpdGhMZW5ndGgoKSkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPmNyZWF0ZUNh
bGN1bGF0aW9uVmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9v
dEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkp
KSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgo
cHJpbWl0aXZlVmFsdWUtPmNzc0NhbGNWYWx1ZSgpLT5jcmVhdGVDYWxjdWxhdGlvblZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSkpOwogICAg
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgo
KSkKICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2
ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSk7CiAgICAgfQpAQCAtNDQyLDE1ICs0
NDIsMTYgQEAgcHVibGljOgogICAgICAgICBpZiAoIXBhaXIgfHwgIXBhaXItPmZpcnN0KCkgfHwg
IXBhaXItPnNlY29uZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgIENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgPSBzdHlsZVJlc29sdmVyLT5zdGF0ZSgp
LmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKICAgICAgICAgTGVuZ3RoIHJhZGl1c1dpZHRo
OwogICAgICAgICBpZiAocGFpci0+Zmlyc3QoKS0+aXNQZXJjZW50YWdlKCkpCiAgICAgICAgICAg
ICByYWRpdXNXaWR0aCA9IExlbmd0aChwYWlyLT5maXJzdCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQ
ZXJjZW50KTsKICAgICAgICAgZWxzZSBpZiAocGFpci0+Zmlyc3QoKS0+aXNWaWV3cG9ydFBlcmNl
bnRhZ2VMZW5ndGgoKSkKICAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gTGVuZ3RoKHN0eWxlUmVz
b2x2ZXItPnZpZXdwb3J0UGVyY2VudGFnZVZhbHVlKCpwYWlyLT5maXJzdCgpLCBwYWlyLT5maXJz
dCgpLT5nZXRJbnRWYWx1ZSgpKSwgRml4ZWQpOwogICAgICAgICBlbHNlIGlmIChwYWlyLT5maXJz
dCgpLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgpKQotICAgICAgICAgICAgcmFk
aXVzV2lkdGggPSBMZW5ndGgocGFpci0+Zmlyc3QoKS0+Y3NzQ2FsY1ZhbHVlKCktPmNyZWF0ZUNh
bGN1bGF0aW9uVmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9v
dEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkp
KTsKKyAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gTGVuZ3RoKHBhaXItPmZpcnN0KCktPmNzc0Nh
bGNWYWx1ZSgpLT5jcmVhdGVDYWxjdWxhdGlvblZhbHVlKGNvbnZlcnNpb25EYXRhKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gcGFpci0+Zmlyc3QoKS0+Y29tcHV0
ZUxlbmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJv
b3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgp
KTsKKyAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gcGFpci0+Zmlyc3QoKS0+Y29tcHV0ZUxlbmd0
aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKIAogICAgICAgICBMZW5ndGggcmFkaXVzSGVpZ2h0
OwogICAgICAgICBpZiAocGFpci0+c2Vjb25kKCktPmlzUGVyY2VudGFnZSgpKQpAQCAtNDU4LDkg
KzQ1OSw5IEBAIHB1YmxpYzoKICAgICAgICAgZWxzZSBpZiAocGFpci0+c2Vjb25kKCktPmlzVmll
d3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCiAgICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBMZW5n
dGgoc3R5bGVSZXNvbHZlci0+dmlld3BvcnRQZXJjZW50YWdlVmFsdWUoKnBhaXItPnNlY29uZCgp
LCBwYWlyLT5zZWNvbmQoKS0+Z2V0SW50VmFsdWUoKSksIEZpeGVkKTsKICAgICAgICAgZWxzZSBp
ZiAocGFpci0+c2Vjb25kKCktPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0g
ICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBMZW5ndGgocGFpci0+c2Vjb25kKCktPmNzc0NhbGNW
YWx1ZSgpLT5jcmVhdGVDYWxjdWxhdGlvblZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0
eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpKSk7CisgICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBMZW5ndGgocGFp
ci0+c2Vjb25kKCktPmNzc0NhbGNWYWx1ZSgpLT5jcmVhdGVDYWxjdWxhdGlvblZhbHVlKGNvbnZl
cnNpb25EYXRhKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IHBh
aXItPnNlY29uZCgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICAgICAgcmFkaXVzSGVpZ2h0ID0gcGFpci0+
c2Vjb25kKCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9uRGF0YSk7CiAKICAgICAg
ICAgaWYgKHJhZGl1c1dpZHRoLmlzTmVnYXRpdmUoKSB8fCByYWRpdXNIZWlnaHQuaXNOZWdhdGl2
ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNjIzLDEzICs2MjQsMTMgQEAgcHVibGljOgog
ICAgICAgICB9IGVsc2UgaWYgKHRoaWNrbmVzc0VuYWJsZWQgJiYgaWRlbnQgPT0gQ1NTVmFsdWVU
aGljaykgewogICAgICAgICAgICAgbGVuZ3RoID0gNTsKICAgICAgICAgfSBlbHNlIGlmIChpZGVu
dCA9PSBDU1NWYWx1ZUludmFsaWQpIHsKLSAgICAgICAgICAgIGZsb2F0IHpvb20gPSAoc3ZnWm9v
bUVuYWJsZWQgJiYgc3R5bGVSZXNvbHZlci0+dXNlU1ZHWm9vbVJ1bGVzKCkpID8gMS4wZiA6IHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgICAgIENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgPSAoc3ZnWm9vbUVuYWJsZWQgJiYg
c3R5bGVSZXNvbHZlci0+dXNlU1ZHWm9vbVJ1bGVzKCkpID8gc3R5bGVSZXNvbHZlci0+c3RhdGUo
KS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikg
OiBzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKIAog
ICAgICAgICAgICAgLy8gQW55IG9yaWdpbmFsIHJlc3VsdCB0aGF0IHdhcyA+PSAxIHNob3VsZCBu
b3QgYmUgYWxsb3dlZCB0byBmYWxsIGJlbG93IDEuCiAgICAgICAgICAgICAvLyBUaGlzIGtlZXBz
IGJvcmRlciBsaW5lcyBmcm9tIHZhbmlzaGluZy4KLSAgICAgICAgICAgIGxlbmd0aCA9IHByaW1p
dGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxl
UmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7Ci0gICAgICAgICAgICBpZiAoem9v
bSA8IDEuMGYgJiYgbGVuZ3RoIDwgMS4wKSB7Ci0gICAgICAgICAgICAgICAgVCBvcmlnaW5hbExl
bmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgMS4wKTsKKyAgICAgICAg
ICAgIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KGNvbnZlcnNpb25E
YXRhKTsKKyAgICAgICAgICAgIGlmIChjb252ZXJzaW9uRGF0YS56b29tKCkgPCAxLjBmICYmIGxl
bmd0aCA8IDEuMCkgeworICAgICAgICAgICAgICAgIFQgb3JpZ2luYWxMZW5ndGggPSBwcmltaXRp
dmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxUPihjb252ZXJzaW9uRGF0YS5jb3B5V2l0aEFkanVzdGVk
Wm9vbSgxLjBmKSk7CiAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsTGVuZ3RoID49IDEuMCkK
ICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gMS4wOwogICAgICAgICAgICAgfQpAQCAtODgw
LDExICs4ODEsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElz
QWJzb2x1dGVTaXplKHBhcmVudElzQWJzb2x1dGVTaXplCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfHwgIShwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdl
KCkgfHwgcHJpbWl0aXZlVmFsdWUtPmlzRm9udFJlbGF0aXZlTGVuZ3RoKCkpKTsKICAgICAgICAg
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBzaXpl
ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgMS4wLCB0cnVl
KTsKKyAgICAgICAgICAgICAgICBzaXplID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8
ZmxvYXQ+KENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5
bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCAxLjBmLCB0cnVlKSk7CiAg
ICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCiAgICAg
ICAgICAgICAgICAgc2l6ZSA9IChwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpICogcGFy
ZW50U2l6ZSkgLyAxMDAuMGY7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+
aXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIFJl
ZjxDYWxjdWxhdGlvblZhbHVlPiBjYWxjdWxhdGlvblZhbHVlIHsgcHJpbWl0aXZlVmFsdWUtPmNz
c0NhbGNWYWx1ZSgpLT5jcmVhdGVDYWxjdWxhdGlvblZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVu
dFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSkgfTsKKyAgICAgICAg
ICAgICAgICBSZWY8Q2FsY3VsYXRpb25WYWx1ZT4gY2FsY3VsYXRpb25WYWx1ZSB7IHByaW1pdGl2
ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+Y3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShzdHlsZVJlc29s
dmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVk
Wm9vbSgxLjBmKSkgfTsKICAgICAgICAgICAgICAgICBzaXplID0gY2FsY3VsYXRpb25WYWx1ZS0+
ZXZhbHVhdGUocGFyZW50U2l6ZSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQogICAgICAgICAgICAgICAgIHNpemUg
PSB2YWx1ZUZvckxlbmd0aChwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3Ro
KCksIDAsIHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCkucmVuZGVyVmlldygpKTsKQEAgLTEzMDQs
NiArMTMwNSwxNCBAQCBzdGF0aWMgVGV4dERlY29yYXRpb25Ta2lwIHZhbHVlVG9EZWNvcmF0aW9u
U2tpcChDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdQogICAgIHJldHVybiBUZXh0RGVj
b3JhdGlvblNraXBOb25lOwogfQogCitzdGF0aWMgaW5saW5lIENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEgY3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3RvcihTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyKQoreworICAgIGlmIChGcmFtZSogZnJhbWUgPSBzdHlsZVJl
c29sdmVyLmRvY3VtZW50KCkuZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIu
c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20o
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgKiBmcmFtZS0+dGV4dFpvb21G
YWN0b3IoKSk7CisKKyAgICByZXR1cm4gc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEoKTsKK30KKwogY2xhc3MgQXBwbHlQcm9wZXJ0eVRleHREZWNvcmF0aW9u
U2tpcCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCkBAIC0xMzQ4
LDcgKzEzNTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMZW5ndGggbWFycXVlZUxlbmd0aCA9
IHN0eWxlUmVzb2x2ZXItPmNvbnZlcnRUb0ludExlbmd0aChwcmltaXRpdmVWYWx1ZSwgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAg
ICAgICAgICAgIExlbmd0aCBtYXJxdWVlTGVuZ3RoID0gc3R5bGVSZXNvbHZlci0+Y29udmVydFRv
SW50TGVuZ3RoKHByaW1pdGl2ZVZhbHVlLCBzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSk7CiAgICAgICAg
ICAgICBpZiAoIW1hcnF1ZWVMZW5ndGguaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRNYXJxdWVlSW5jcmVtZW50KG1hcnF1ZWVMZW5ndGgp
OwogICAgICAgICB9CkBAIC0xNDU0LDEwICsxNDYzLDcgQEAgcHVibGljOgogICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkKICAgICAgICAg
ICAgIGxpbmVIZWlnaHQgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKTsKICAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGRv
dWJsZSBtdWx0aXBsaWVyID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgp
OwotICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50
KCkuZnJhbWUoKSkKLSAgICAgICAgICAgICAgICBtdWx0aXBsaWVyICo9IGZyYW1lLT50ZXh0Wm9v
bUZhY3RvcigpOwotICAgICAgICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21w
dXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+
cm9vdEVsZW1lbnRTdHlsZSgpLCBtdWx0aXBsaWVyKTsKKyAgICAgICAgICAgIGxpbmVIZWlnaHQg
PSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNzc3RvTGVuZ3RoQ29udmVy
c2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoKnN0eWxlUmVzb2x2ZXIpKTsKICAgICAgICAgfSBl
bHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpIHsKICAgICAgICAgICAgIC8v
IEZJWE1FOiBwZXJjZW50YWdlIHNob3VsZCBub3QgYmUgcmVzdHJpY3RlZCB0byBhbiBpbnRlZ2Vy
IGhlcmUuCiAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKChzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5jb21wdXRlZEZvbnRTaXplKCkgKiBwcmltaXRpdmVWYWx1ZS0+Z2V0SW50VmFsdWUo
KSkgLyAxMDAsIEZpeGVkKTsKQEAgLTE0OTIsMTIgKzE0OTgsNyBAQCBwdWJsaWM6CiAgICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKQogICAg
ICAgICAgICAgbGluZUhlaWdodCA9IFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpOwog
ICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewotICAgICAgICAg
ICAgZG91YmxlIG11bHRpcGxpZXIgPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCk7Ci0gICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+dGV4dFNpemVB
ZGp1c3QoKS5pc05vbmUoKSkgewotICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBz
dHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLmZyYW1lKCkpCi0gICAgICAgICAgICAgICAgICAgIG11
bHRpcGxpZXIgKj0gZnJhbWUtPnRleHRab29tRmFjdG9yKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBsaW5lSGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3Ro
PihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxl
KCksIG11bHRpcGxpZXIpOworICAgICAgICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0
Wm9vbUZhY3Rvcigqc3R5bGVSZXNvbHZlcikpOwogICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnRleHRTaXplQWRqdXN0KCkuaXNQZXJjZW50YWdlKCkpCiAgICAgICAgICAg
ICAgICAgbGluZUhlaWdodCA9IExlbmd0aChsaW5lSGVpZ2h0LnZhbHVlKCkgKiBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT50ZXh0U2l6ZUFkanVzdCgpLm11bHRpcGxpZXIoKSwgRml4ZWQpOwogICAg
ICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkgewpAQCAtMTU0
OSwxMCArMTU1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRW
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCiAgICAgICAgICAgICB3b3JkU3BhY2luZyA9IFJl
bmRlclN0eWxlOjppbml0aWFsV29yZFNwYWNpbmcoKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0
aXZlVmFsdWUtPmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGRvdWJsZSBtdWx0aXBsaWVyID0g
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICAgICAgaWYg
KEZyYW1lKiBmcmFtZSA9IHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCkuZnJhbWUoKSkKLSAgICAg
ICAgICAgICAgICBtdWx0aXBsaWVyICo9IGZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpOwotICAgICAg
ICAgICAgd29yZFNwYWNpbmcgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUo
KSwgbXVsdGlwbGllcik7CisgICAgICAgICAgICB3b3JkU3BhY2luZyA9IHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0
Wm9vbUZhY3Rvcigqc3R5bGVSZXNvbHZlcikpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgICAgIHdvcmRTcGFjaW5nID0gTGVuZ3Ro
KHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKICAgICAgICAgZWxz
ZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpCkBAIC0xNTc1LDEyICsxNTczLDEyIEBA
IHByaXZhdGU6CiAgICAgc3RhdGljIExlbmd0aCBtbUxlbmd0aChkb3VibGUgbW0pCiAgICAgewog
ICAgICAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUobW0sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTU0pKTsKLSAgICAgICAgcmV0dXJuIHZh
bHVlLmdldCgpLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPigwLCAwKTsKKyAgICAgICAgcmV0dXJuIHZh
bHVlLmdldCgpLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
KCkpOwogICAgIH0KICAgICBzdGF0aWMgTGVuZ3RoIGluY2hMZW5ndGgoZG91YmxlIGluY2gpCiAg
ICAgewogICAgICAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlKENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUoaW5jaCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JTikpOwotICAgICAgICBy
ZXR1cm4gdmFsdWUuZ2V0KCkuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KDAsIDApOworICAgICAgICBy
ZXR1cm4gdmFsdWUuZ2V0KCkuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoKSk7CiAgICAgfQogICAgIHN0YXRpYyBib29sIGdldFBhZ2VTaXplRnJvbU5hbWUo
Q1NTUHJpbWl0aXZlVmFsdWUqIHBhZ2VTaXplTmFtZSwgQ1NTUHJpbWl0aXZlVmFsdWUqIHBhZ2VP
cmllbnRhdGlvbiwgTGVuZ3RoJiB3aWR0aCwgTGVuZ3RoJiBoZWlnaHQpCiAgICAgewpAQCAtMTY3
Niw4ICsxNjc0LDkgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+ezJ9CiAg
ICAgICAgICAgICAgICAgaWYgKCFzZWNvbmQtPmlzTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB3aWR0aCA9IGZpcnN0LT5jb21wdXRlTGVuZ3Ro
PExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1l
bnRTdHlsZSgpKTsKLSAgICAgICAgICAgICAgICBoZWlnaHQgPSBzZWNvbmQtPmNvbXB1dGVMZW5n
dGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxl
bWVudFN0eWxlKCkpOworICAgICAgICAgICAgICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEg
Y29udmVyc2lvbkRhdGEgPSBzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKTsKKyAgICAgICAgICAgICAgICB3
aWR0aCA9IGZpcnN0LT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY29udmVyc2lvbkRhdGEpOworICAg
ICAgICAgICAgICAgIGhlaWdodCA9IHNlY29uZC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZl
cnNpb25EYXRhKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gPHBh
Z2Utc2l6ZT4gPG9yaWVudGF0aW9uPgogICAgICAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBvcmRl
ciBpcyBndWFyYW50ZWVkLiBTZWUgQ1NTUGFyc2VyOjpwYXJzZVNpemVQYXJhbWV0ZXIuCkBAIC0x
Njk1LDcgKzE2OTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUt
PmlzTGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICAvLyA8bGVuZ3RoPgogICAgICAgICAgICAg
ICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKLSAgICAgICAgICAgICAgICB3
aWR0aCA9IGhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpKTsK
KyAgICAgICAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRl
TGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZUlEKCkp
IHsKICAgICAgICAgICAgICAgICBjYXNlIDA6CkBAIC0xOTczLDcgKzE5NzIsNyBAQCBwdWJsaWM6
CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWVJRCgpKQogICAgICAgICAgICAg
cmV0dXJuIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ24oKnByaW1pdGl2
ZVZhbHVlKTsKIAotICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFs
aWduTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29u
dmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBWaWV3
cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJl
c29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVj
dGl2ZVpvb20oKSkpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNh
bEFsaWduTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2Vy
Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBW
aWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEoKSkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhh
bmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC0yMTUxLDcgKzIxNTAsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZUxpc3QubGVuZ3RoKCk7ICsraSkgewog
ICAgICAgICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2
YWx1ZUxpc3QuaXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7CiAgICAgICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUuaXNTaGFwZSgpICYmICFvcGVyYXRpb24pCi0gICAgICAgICAgICAgICAgb3Bl
cmF0aW9uID0gU2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGJhc2ljU2hhcGVGb3JWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxl
KCksIHByaW1pdGl2ZVZhbHVlLmdldFNoYXBlVmFsdWUoKSkpOworICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbiA9IFNoYXBlQ2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZShiYXNpY1NoYXBlRm9yVmFs
dWUoc3R5bGVSZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCksIHBy
aW1pdGl2ZVZhbHVlLmdldFNoYXBlVmFsdWUoKSkpOwogICAgICAgICAgICAgZWxzZSBpZiAoKHBy
aW1pdGl2ZVZhbHVlLmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNvbnRlbnRCb3gKICAgICAgICAg
ICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVCb3JkZXJC
b3gKICAgICAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS5nZXRWYWx1ZUlEKCkgPT0gQ1NT
VmFsdWVQYWRkaW5nQm94CkBAIC0yMjAwLDcgKzIxOTksNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFsdWVMaXN0LT5sZW5ndGgoKTsgKytpKSB7CiAg
ICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gdG9DU1NQ
cmltaXRpdmVWYWx1ZSh2YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOwogICAg
ICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTaGFwZSgpKQotICAgICAgICAgICAg
ICAgICAgICBzaGFwZSA9IGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5nZXRT
aGFwZVZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICBzaGFwZSA9IGJhc2ljU2hhcGVGb3JW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSwg
cHJpbWl0aXZlVmFsdWUtPmdldFNoYXBlVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNvbnRlbnRCb3gKICAg
ICAgICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBDU1NW
YWx1ZUJvcmRlckJveAogICAgICAgICAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0
VmFsdWVJRCgpID09IENTU1ZhbHVlUGFkZGluZ0JveApAQCAtMjMxMyw3ICsyMzEyLDcgQEAgcHVi
bGljOgogCiAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB0
b0NTU1ByaW1pdGl2ZVZhbHVlKGl0ZW0pOwogICAgICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1
ZS0+Z2V0VmFsdWVJRCgpKQotICAgICAgICAgICAgICAgIGxlbmd0aE9yUGVyY2VudGFnZVZhbHVl
ID0gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9u
IHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbiB8IFZpZXdwb3J0UGVy
Y2VudGFnZUNvbnZlcnNpb24+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXIt
PnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpKTsKKyAgICAgICAgICAgICAgICBsZW5ndGhPclBlcmNlbnRhZ2VWYWx1ZSA9IHByaW1pdGl2
ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRD
b252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252
ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEo
KSk7CiAjaWYgRU5BQkxFKENTUzNfVEVYVCkKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRFYWNoTGluZSkKICAgICAgICAg
ICAgICAgICB0ZXh0SW5kZW50TGluZVZhbHVlID0gVGV4dEluZGVudEVhY2hMaW5lOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCmluZGV4IGI3ZTg4ZTZhOTk3OGVj
ZThhYmRjZGFiMWFiOGUzMGYzNjliNzUzYzcuLjc5OTI3ZWU1MTJhMWMwZmU1YjIwYTA4OTVjZTM2
NDA2ZjhjNWY2N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZh
bHVhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5j
cHAKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkNTU0FzcGVjdFJhdGlvVmFsdWUuaCIK
ICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAi
Q1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCkBAIC02OSw3ICs3MCw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBNZWRpYUZlYXR1cmVOYW1lczsKIAogZW51bSBNZWRpYUZlYXR1cmVQcmVm
aXggeyBNaW5QcmVmaXgsIE1heFByZWZpeCwgTm9QcmVmaXggfTsKIAotdHlwZWRlZiBib29sICgq
RXZhbEZ1bmMpKENTU1ZhbHVlKiwgUmVuZGVyU3R5bGUqLCBGcmFtZSosIE1lZGlhRmVhdHVyZVBy
ZWZpeCk7Cit0eXBlZGVmIGJvb2wgKCpFdmFsRnVuYykoQ1NTVmFsdWUqLCBjb25zdCBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUqLCBNZWRpYUZlYXR1cmVQcmVmaXgpOwogdHlwZWRl
ZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBFdmFsRnVuYz4gRnVuY3Rpb25NYXA7CiBzdGF0
aWMgRnVuY3Rpb25NYXAqIGdGdW5jdGlvbk1hcDsKIApAQCAtMjAzLDcgKzIwNCw3IEBAIHN0YXRp
YyBib29sIG51bWJlclZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwgZmxvYXQmIHJlc3VsdCkKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIGNvbG9yTWVkaWFGZWF0dXJlRXZhbChDU1NW
YWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVm
aXggb3ApCitzdGF0aWMgYm9vbCBjb2xvck1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVl
LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZl
YXR1cmVQcmVmaXggb3ApCiB7CiAgICAgaW50IGJpdHNQZXJDb21wb25lbnQgPSBzY3JlZW5EZXB0
aFBlckNvbXBvbmVudChmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCkpOwogICAgIGZs
b2F0IG51bWJlcjsKQEAgLTIxMyw3ICsyMTQsNyBAQCBzdGF0aWMgYm9vbCBjb2xvck1lZGlhRmVh
dHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSosIEZyYW1lKiBmcmFtZSwgTQog
ICAgIHJldHVybiBiaXRzUGVyQ29tcG9uZW50ICE9IDA7CiB9CiAKLXN0YXRpYyBib29sIGNvbG9y
X2luZGV4TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiwgRnJh
bWUqLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCBjb2xvcl9pbmRleE1lZGlh
RmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhJiwgRnJhbWUqLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7CiAgICAgLy8gRklYTUU6IEl0
J3MgdW5rbm93biBob3cgdG8gcmV0cmlldmUgdGhlIGluZm9ybWF0aW9uIGlmIHRoZSBkaXNwbGF5
IG1vZGUgaXMgaW5kZXhlZAogICAgIC8vIEFzc3VtZSB3ZSBkb24ndCBzdXBwb3J0IGluZGV4ZWQg
ZGlzcGxheS4KQEAgLTIyNCw3ICsyMjUsNyBAQCBzdGF0aWMgYm9vbCBjb2xvcl9pbmRleE1lZGlh
RmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSosIEZyYW1lKiwgTQogICAg
IHJldHVybiBudW1iZXJWYWx1ZSh2YWx1ZSwgbnVtYmVyKSAmJiBjb21wYXJlVmFsdWUoMCwgc3Rh
dGljX2Nhc3Q8aW50PihudW1iZXIpLCBvcCk7CiB9CiAKLXN0YXRpYyBib29sIG1vbm9jaHJvbWVN
ZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFt
ZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIG1vbm9jaHJvbWVN
ZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4
IG9wKQogewogICAgIGlmICghc2NyZWVuSXNNb25vY2hyb21lKGZyYW1lLT5wYWdlKCktPm1haW5G
cmFtZSgpLnZpZXcoKSkpIHsKICAgICAgICAgaWYgKHZhbHVlKSB7CkBAIC0yMzQsMTAgKzIzNSwx
MCBAQCBzdGF0aWMgYm9vbCBtb25vY2hyb21lTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFs
dWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgcmV0dXJuIGNvbG9yTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgc3R5bGUsIGZyYW1l
LCBvcCk7CisgICAgcmV0dXJuIGNvbG9yTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lv
bkRhdGEsIGZyYW1lLCBvcCk7CiB9CiAKLXN0YXRpYyBib29sIG9yaWVudGF0aW9uTWVkaWFGZWF0
dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiwgRnJhbWUqIGZyYW1lLCBNZWRp
YUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBvcmllbnRhdGlvbk1lZGlhRmVhdHVyZUV2YWwo
Q1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUq
IGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJh
bWUtPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCkBAIC0yNTYsNyArMjU3LDcgQEAgc3RhdGljIGJv
b2wgb3JpZW50YXRpb25NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5
bGUqLCBGcmFtZSogZnIKICAgICByZXR1cm4gaGVpZ2h0ID49IDAgJiYgd2lkdGggPj0gMDsKIH0K
IAotc3RhdGljIGJvb2wgYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFs
dWUsIFJlbmRlclN0eWxlKiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitz
dGF0aWMgYm9vbCBhc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwg
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0
dXJlUHJlZml4IG9wKQogewogICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7CiAg
ICAgaWYgKCF2aWV3KQpAQCAtMjcwLDcgKzI3MSw3IEBAIHN0YXRpYyBib29sIGFzcGVjdF9yYXRp
b01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSosIEZyYW1lKiBm
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGRldmljZV9hc3BlY3RfcmF0aW9N
ZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqLCBGcmFtZSogZnJh
bWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIGRldmljZV9hc3BlY3RfcmF0
aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewogICAg
IGlmICh2YWx1ZSkgewogICAgICAgICBGbG9hdFJlY3Qgc2cgPSBzY3JlZW5SZWN0KGZyYW1lLT5w
YWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKSk7CkBAIC0zMTQsMTIgKzMxNSwxMiBAQCBzdGF0aWMg
Ym9vbCBldmFsUmVzb2x1dGlvbihDU1NWYWx1ZSogdmFsdWUsIEZyYW1lKiBmcmFtZSwgTWVkaWFG
ZWF0dXJlUHJlZml4IG9wKQogICAgIHJldHVybiBjb21wYXJlVmFsdWUoZGV2aWNlU2NhbGVGYWN0
b3IsIHJlc29sdXRpb24tPmlzTnVtYmVyKCkgPyByZXNvbHV0aW9uLT5nZXRGbG9hdFZhbHVlKCkg
OiByZXNvbHV0aW9uLT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCks
IG9wKTsKIH0KIAotc3RhdGljIGJvb2wgZGV2aWNlX3BpeGVsX3JhdGlvTWVkaWFGZWF0dXJlRXZh
bChDU1NWYWx1ZSAqdmFsdWUsIFJlbmRlclN0eWxlKiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1
cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCBkZXZpY2VfcGl4ZWxfcmF0aW9NZWRpYUZlYXR1cmVF
dmFsKENTU1ZhbHVlICp2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZy
YW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewogICAgIHJldHVybiAoIXZhbHVl
IHx8IHRvQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpLT5pc051bWJlcigpKSAmJiBldmFsUmVzb2x1
dGlvbih2YWx1ZSwgZnJhbWUsIG9wKTsKIH0KIAotc3RhdGljIGJvb2wgcmVzb2x1dGlvbk1lZGlh
RmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSosIEZyYW1lKiBmcmFtZSwg
TWVkaWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wgcmVzb2x1dGlvbk1lZGlhRmVhdHVy
ZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwg
RnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7CiAjaWYgRU5BQkxFKFJFU09M
VVRJT05fTUVESUFfUVVFUlkpCiAgICAgcmV0dXJuICghdmFsdWUgfHwgdG9DU1NQcmltaXRpdmVW
YWx1ZSh2YWx1ZSktPmlzUmVzb2x1dGlvbigpKSAmJiBldmFsUmVzb2x1dGlvbih2YWx1ZSwgZnJh
bWUsIG9wKTsKQEAgLTMzMSw3ICszMzIsNyBAQCBzdGF0aWMgYm9vbCByZXNvbHV0aW9uTWVkaWFG
ZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiwgRnJhbWUqIGZyYQogI2Vu
ZGlmCiB9CiAKLXN0YXRpYyBib29sIGdyaWRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1
ZSwgUmVuZGVyU3R5bGUqLCBGcmFtZSosIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBi
b29sIGdyaWRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewogICAg
IC8vIGlmIG91dHB1dCBkZXZpY2UgaXMgYml0bWFwLCBncmlkOiAwID09IHRydWUKICAgICAvLyBh
c3N1bWUgd2UgaGF2ZSBiaXRtYXAgZGV2aWNlCkBAIC0zNDEsNyArMzQyLDcgQEAgc3RhdGljIGJv
b2wgZ3JpZE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSosIEZy
YW1lKiwgTWVkaWFGZWEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIGNvbXB1
dGVMZW5ndGgoQ1NTVmFsdWUqIHZhbHVlLCBib29sIHN0cmljdCwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBpbnQmIHJlc3VsdCkKK3N0YXRpYyBib29sIGNvbXB1
dGVMZW5ndGgoQ1NTVmFsdWUqIHZhbHVlLCBib29sIHN0cmljdCwgY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIGludCYgcmVzdWx0KQogewogICAgIGlmICgh
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzU0
LDQyICszNTUsNDAgQEAgc3RhdGljIGJvb2wgY29tcHV0ZUxlbmd0aChDU1NWYWx1ZSogdmFsdWUs
IGJvb2wgc3RyaWN0LCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmQKICAgICB9CiAKICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgcmVzdWx0ID0gcHJpbWl0aXZl
VmFsdWUtPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0eWxlKTsKKyAgICAgICAgcmVz
dWx0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8aW50Pihjb252ZXJzaW9uRGF0YSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
c3RhdGljIGJvb2wgZGV2aWNlX2hlaWdodE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVl
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9w
KQorc3RhdGljIGJvb2wgZGV2aWNlX2hlaWdodE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZh
bHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJh
bWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7CiAgICAgaWYgKHZhbHVlKSB7CiAg
ICAgICAgIEZsb2F0UmVjdCBzZyA9IHNjcmVlblJlY3QoZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1l
KCkudmlldygpKTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSA9IGZyYW1lLT5kb2N1
bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgaW50IGxl
bmd0aDsKICAgICAgICAgbG9uZyBoZWlnaHQgPSBzZy5oZWlnaHQoKTsKLSAgICAgICAgcmV0dXJu
IGNvbXB1dGVMZW5ndGgodmFsdWUsICFmcmFtZS0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCks
IHN0eWxlLCByb290U3R5bGUsIGxlbmd0aCkgJiYgY29tcGFyZVZhbHVlKHN0YXRpY19jYXN0PGlu
dD4oaGVpZ2h0KSwgbGVuZ3RoLCBvcCk7CisgICAgICAgIHJldHVybiBjb21wdXRlTGVuZ3RoKHZh
bHVlLCAhZnJhbWUtPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpLCBjb252ZXJzaW9uRGF0YSwg
bGVuZ3RoKSAmJiBjb21wYXJlVmFsdWUoc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQpLCBsZW5ndGgs
IG9wKTsKICAgICB9CiAgICAgLy8gKHssbWluLSxtYXgtfWRldmljZS1oZWlnaHQpCiAgICAgLy8g
YXNzdW1lIGlmIHdlIGhhdmUgYSBkZXZpY2UsIGFzc3VtZSBub24temVybwogICAgIHJldHVybiB0
cnVlOwogfQogCi1zdGF0aWMgYm9vbCBkZXZpY2Vfd2lkdGhNZWRpYUZlYXR1cmVFdmFsKENTU1Zh
bHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVy
ZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIGRldmljZV93aWR0aE1lZGlhRmVhdHVyZUV2YWwoQ1NT
VmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9u
RGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7CiAgICAgaWYgKHZh
bHVlKSB7CiAgICAgICAgIEZsb2F0UmVjdCBzZyA9IHNjcmVlblJlY3QoZnJhbWUtPnBhZ2UoKS0+
bWFpbkZyYW1lKCkudmlldygpKTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSA9IGZy
YW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsKICAgICAg
ICAgaW50IGxlbmd0aDsKICAgICAgICAgbG9uZyB3aWR0aCA9IHNnLndpZHRoKCk7Ci0gICAgICAg
IHJldHVybiBjb21wdXRlTGVuZ3RoKHZhbHVlLCAhZnJhbWUtPmRvY3VtZW50KCktPmluUXVpcmtz
TW9kZSgpLCBzdHlsZSwgcm9vdFN0eWxlLCBsZW5ndGgpICYmIGNvbXBhcmVWYWx1ZShzdGF0aWNf
Y2FzdDxpbnQ+KHdpZHRoKSwgbGVuZ3RoLCBvcCk7CisgICAgICAgIHJldHVybiBjb21wdXRlTGVu
Z3RoKHZhbHVlLCAhZnJhbWUtPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpLCBjb252ZXJzaW9u
RGF0YSwgbGVuZ3RoKSAmJiBjb21wYXJlVmFsdWUoc3RhdGljX2Nhc3Q8aW50Pih3aWR0aCksIGxl
bmd0aCwgb3ApOwogICAgIH0KICAgICAvLyAoeyxtaW4tLG1heC19ZGV2aWNlLXdpZHRoKQogICAg
IC8vIGFzc3VtZSBpZiB3ZSBoYXZlIGEgZGV2aWNlLCBhc3N1bWUgbm9uLXplcm8KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1
ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQ
cmVmaXggb3ApCitzdGF0aWMgYm9vbCBoZWlnaHRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2
YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZy
YW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewogICAgIEZyYW1lVmlldyogdmll
dyA9IGZyYW1lLT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQpAQCAtMzk5LDE1ICszOTgsMTQgQEAg
c3RhdGljIGJvb2wgaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRl
clN0eWxlKiBzdHlsZSwgRnJhbWUqIGYKICAgICAgICAgaW50IGhlaWdodCA9IHZpZXctPmxheW91
dEhlaWdodCgpOwogICAgICAgICBpZiAoUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IGZyYW1lLT5k
b2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpCiAgICAgICAgICAgICBoZWlnaHQgPSBhZGp1c3RGb3JB
YnNvbHV0ZVpvb20oaGVpZ2h0LCAqcmVuZGVyVmlldyk7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBy
b290U3R5bGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlclN0
eWxlKCk7CiAgICAgICAgIGludCBsZW5ndGg7Ci0gICAgICAgIHJldHVybiBjb21wdXRlTGVuZ3Ro
KHZhbHVlLCAhZnJhbWUtPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpLCBzdHlsZSwgcm9vdFN0
eWxlLCBsZW5ndGgpICYmIGNvbXBhcmVWYWx1ZShoZWlnaHQsIGxlbmd0aCwgb3ApOworICAgICAg
ICByZXR1cm4gY29tcHV0ZUxlbmd0aCh2YWx1ZSwgIWZyYW1lLT5kb2N1bWVudCgpLT5pblF1aXJr
c01vZGUoKSwgY29udmVyc2lvbkRhdGEsIGxlbmd0aCkgJiYgY29tcGFyZVZhbHVlKGhlaWdodCwg
bGVuZ3RoLCBvcCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHZpZXctPmxheW91dEhlaWdodCgpICE9
IDA7CiB9CiAKLXN0YXRpYyBib29sIHdpZHRoTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFs
dWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgg
b3ApCitzdGF0aWMgYm9vbCB3aWR0aE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBj
b25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZy
YW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJh
bWUtPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCkBAIC00MTcsOSArNDE1LDggQEAgc3RhdGljIGJv
b2wgd2lkdGhNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBGcmFtZSogZnIKICAgICAgICAgaW50IHdpZHRoID0gdmlldy0+bGF5b3V0V2lkdGgoKTsK
ICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+
cmVuZGVyVmlldygpKQogICAgICAgICAgICAgd2lkdGggPSBhZGp1c3RGb3JBYnNvbHV0ZVpvb20o
d2lkdGgsICpyZW5kZXJWaWV3KTsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSA9IGZy
YW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKTsKICAgICAg
ICAgaW50IGxlbmd0aDsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgodmFsdWUsICFmcmFt
ZS0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCksIHN0eWxlLCByb290U3R5bGUsIGxlbmd0aCkg
JiYgY29tcGFyZVZhbHVlKHdpZHRoLCBsZW5ndGgsIG9wKTsKKyAgICAgICAgcmV0dXJuIGNvbXB1
dGVMZW5ndGgodmFsdWUsICFmcmFtZS0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCksIGNvbnZl
cnNpb25EYXRhLCBsZW5ndGgpICYmIGNvbXBhcmVWYWx1ZSh3aWR0aCwgbGVuZ3RoLCBvcCk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIHZpZXctPmxheW91dFdpZHRoKCkgIT0gMDsKQEAgLTQyNywxMTcg
KzQyNCwxMTcgQEAgc3RhdGljIGJvb2wgd2lkdGhNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2
YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnIKIAogLy8gcmVzdCBvZiB0aGUgZnVu
Y3Rpb25zIGFyZSB0cmFtcG9saW5lcyB3aGljaCBzZXQgdGhlIHByZWZpeCBhY2NvcmRpbmcgdG8g
dGhlIG1lZGlhIGZlYXR1cmUgZXhwcmVzc2lvbiB1c2VkCiAKLXN0YXRpYyBib29sIG1pbl9jb2xv
ck1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZy
YW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWluX2NvbG9yTWVk
aWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkK
IHsKLSAgICByZXR1cm4gY29sb3JNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBzdHlsZSwgZnJhbWUs
IE1pblByZWZpeCk7CisgICAgcmV0dXJuIGNvbG9yTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29u
dmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtYXhfY29s
b3JNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBG
cmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1heF9jb2xvck1l
ZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgp
CiB7Ci0gICAgcmV0dXJuIGNvbG9yTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgc3R5bGUsIGZyYW1l
LCBNYXhQcmVmaXgpOworICAgIHJldHVybiBjb2xvck1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNv
bnZlcnNpb25EYXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWluX2Nv
bG9yX2luZGV4TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBz
dHlsZSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtaW5f
Y29sb3JfaW5kZXhNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFG
ZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBjb2xvcl9pbmRleE1lZGlhRmVhdHVyZUV2YWwo
dmFsdWUsIHN0eWxlLCBmcmFtZSwgTWluUHJlZml4KTsKKyAgICByZXR1cm4gY29sb3JfaW5kZXhN
ZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7
CiB9CiAKLXN0YXRpYyBib29sIG1heF9jb2xvcl9pbmRleE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFs
dWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJl
UHJlZml4KQorc3RhdGljIGJvb2wgbWF4X2NvbG9yX2luZGV4TWVkaWFGZWF0dXJlRXZhbChDU1NW
YWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25E
YXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gY29s
b3JfaW5kZXhNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBzdHlsZSwgZnJhbWUsIE1heFByZWZpeCk7
CisgICAgcmV0dXJuIGNvbG9yX2luZGV4TWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lv
bkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtaW5fbW9ub2Nocm9t
ZU1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZy
YW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWluX21vbm9jaHJv
bWVNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJl
Zml4KQogewotICAgIHJldHVybiBtb25vY2hyb21lTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgc3R5
bGUsIGZyYW1lLCBNaW5QcmVmaXgpOworICAgIHJldHVybiBtb25vY2hyb21lTWVkaWFGZWF0dXJl
RXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOwogfQogCi1zdGF0
aWMgYm9vbCBtYXhfbW9ub2Nocm9tZU1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3Rh
dGljIGJvb2wgbWF4X21vbm9jaHJvbWVNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwg
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBm
cmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBtb25vY2hyb21lTWVkaWFG
ZWF0dXJlRXZhbCh2YWx1ZSwgc3R5bGUsIGZyYW1lLCBNYXhQcmVmaXgpOworICAgIHJldHVybiBt
b25vY2hyb21lTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBN
YXhQcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtaW5fYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJl
RXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCBN
ZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtaW5fYXNwZWN0X3JhdGlvTWVkaWFGZWF0
dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEm
IGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAg
ICByZXR1cm4gYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgc3R5bGUsIGZyYW1l
LCBNaW5QcmVmaXgpOworICAgIHJldHVybiBhc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKHZh
bHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29s
IG1heF9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBi
b29sIG1heF9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFt
ZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBhc3BlY3RfcmF0aW9NZWRpYUZl
YXR1cmVFdmFsKHZhbHVlLCBzdHlsZSwgZnJhbWUsIE1heFByZWZpeCk7CisgICAgcmV0dXJuIGFz
cGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwg
TWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWluX2RldmljZV9hc3BlY3RfcmF0aW9NZWRp
YUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSog
ZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1pbl9kZXZpY2VfYXNwZWN0
X3JhdGlvTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVy
ZVByZWZpeCkKIHsKLSAgICByZXR1cm4gZGV2aWNlX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2
YWwodmFsdWUsIHN0eWxlLCBmcmFtZSwgTWluUHJlZml4KTsKKyAgICByZXR1cm4gZGV2aWNlX2Fz
cGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwg
TWluUHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4X2RldmljZV9hc3BlY3RfcmF0aW9NZWRp
YUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSog
ZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1heF9kZXZpY2VfYXNwZWN0
X3JhdGlvTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVy
ZVByZWZpeCkKIHsKLSAgICByZXR1cm4gZGV2aWNlX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2
YWwodmFsdWUsIHN0eWxlLCBmcmFtZSwgTWF4UHJlZml4KTsKKyAgICByZXR1cm4gZGV2aWNlX2Fz
cGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwg
TWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWluX2RldmljZV9waXhlbF9yYXRpb01lZGlh
RmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBm
cmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWluX2RldmljZV9waXhlbF9y
YXRpb01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQ
cmVmaXgpCiB7Ci0gICAgcmV0dXJuIGRldmljZV9waXhlbF9yYXRpb01lZGlhRmVhdHVyZUV2YWwo
dmFsdWUsIHN0eWxlLCBmcmFtZSwgTWluUHJlZml4KTsKKyAgICByZXR1cm4gZGV2aWNlX3BpeGVs
X3JhdGlvTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5Q
cmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtYXhfZGV2aWNlX3BpeGVsX3JhdGlvTWVkaWFGZWF0
dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1l
LCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtYXhfZGV2aWNlX3BpeGVsX3JhdGlv
TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZp
eCkKIHsKLSAgICByZXR1cm4gZGV2aWNlX3BpeGVsX3JhdGlvTWVkaWFGZWF0dXJlRXZhbCh2YWx1
ZSwgc3R5bGUsIGZyYW1lLCBNYXhQcmVmaXgpOworICAgIHJldHVybiBkZXZpY2VfcGl4ZWxfcmF0
aW9NZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFByZWZp
eCk7CiB9CiAKLXN0YXRpYyBib29sIG1pbl9oZWlnaHRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVl
KiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVBy
ZWZpeCkKK3N0YXRpYyBib29sIG1pbl9oZWlnaHRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2
YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZy
YW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBoZWlnaHRNZWRp
YUZlYXR1cmVFdmFsKHZhbHVlLCBzdHlsZSwgZnJhbWUsIE1pblByZWZpeCk7CisgICAgcmV0dXJu
IGhlaWdodE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWlu
UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4X2hlaWdodE1lZGlhRmVhdHVyZUV2YWwoQ1NT
VmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0
dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWF4X2hlaWdodE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFs
dWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0
YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIGhlaWdo
dE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIHN0eWxlLCBmcmFtZSwgTWF4UHJlZml4KTsKKyAgICBy
ZXR1cm4gaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1l
LCBNYXhQcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtaW5fd2lkdGhNZWRpYUZlYXR1cmVFdmFs
KENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBGcmFtZSogZnJhbWUsIE1lZGlh
RmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1pbl93aWR0aE1lZGlhRmVhdHVyZUV2YWwoQ1NT
VmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9u
RGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIHdp
ZHRoTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgc3R5bGUsIGZyYW1lLCBNaW5QcmVmaXgpOworICAg
IHJldHVybiB3aWR0aE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFt
ZSwgTWluUHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4X3dpZHRoTWVkaWFGZWF0dXJlRXZh
bChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCBNZWRp
YUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtYXhfd2lkdGhNZWRpYUZlYXR1cmVFdmFsKENT
U1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lv
bkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiB3
aWR0aE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIHN0eWxlLCBmcmFtZSwgTWF4UHJlZml4KTsKKyAg
ICByZXR1cm4gd2lkdGhNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJh
bWUsIE1heFByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1pbl9kZXZpY2VfaGVpZ2h0TWVkaWFG
ZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZy
YW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtaW5fZGV2aWNlX2hlaWdodE1l
ZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgp
CiB7Ci0gICAgcmV0dXJuIGRldmljZV9oZWlnaHRNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBzdHls
ZSwgZnJhbWUsIE1pblByZWZpeCk7CisgICAgcmV0dXJuIGRldmljZV9oZWlnaHRNZWRpYUZlYXR1
cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7CiB9CiAKLXN0
YXRpYyBib29sIG1heF9kZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFs
dWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgp
CitzdGF0aWMgYm9vbCBtYXhfZGV2aWNlX2hlaWdodE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUq
IHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwg
RnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIGRldmljZV9o
ZWlnaHRNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBzdHlsZSwgZnJhbWUsIE1heFByZWZpeCk7Cisg
ICAgcmV0dXJuIGRldmljZV9oZWlnaHRNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9u
RGF0YSwgZnJhbWUsIE1heFByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1pbl9kZXZpY2Vfd2lk
dGhNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBG
cmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1pbl9kZXZpY2Vf
d2lkdGhNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJl
UHJlZml4KQogewotICAgIHJldHVybiBkZXZpY2Vfd2lkdGhNZWRpYUZlYXR1cmVFdmFsKHZhbHVl
LCBzdHlsZSwgZnJhbWUsIE1pblByZWZpeCk7CisgICAgcmV0dXJuIGRldmljZV93aWR0aE1lZGlh
RmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsKIH0K
IAotc3RhdGljIGJvb2wgbWF4X2RldmljZV93aWR0aE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUq
IHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJl
Zml4KQorc3RhdGljIGJvb2wgbWF4X2RldmljZV93aWR0aE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFs
dWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0
YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIGRldmlj
ZV93aWR0aE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIHN0eWxlLCBmcmFtZSwgTWF4UHJlZml4KTsK
KyAgICByZXR1cm4gZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lv
bkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtaW5fcmVzb2x1dGlv
bk1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIEZy
YW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWluX3Jlc29sdXRp
b25NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJl
Zml4KQogewotICAgIHJldHVybiByZXNvbHV0aW9uTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgc3R5
bGUsIGZyYW1lLCBNaW5QcmVmaXgpOworICAgIHJldHVybiByZXNvbHV0aW9uTWVkaWFGZWF0dXJl
RXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOwogfQogCi1zdGF0
aWMgYm9vbCBtYXhfcmVzb2x1dGlvbk1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3Rh
dGljIGJvb2wgbWF4X3Jlc29sdXRpb25NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwg
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBm
cmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiByZXNvbHV0aW9uTWVkaWFG
ZWF0dXJlRXZhbCh2YWx1ZSwgc3R5bGUsIGZyYW1lLCBNYXhQcmVmaXgpOworICAgIHJldHVybiBy
ZXNvbHV0aW9uTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBN
YXhQcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBhbmltYXRpb25NZWRpYUZlYXR1cmVFdmFsKENT
U1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqLCBGcmFtZSosIE1lZGlhRmVhdHVyZVByZWZpeCBv
cCkKK3N0YXRpYyBib29sIGFuaW1hdGlvbk1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVl
LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUqLCBNZWRpYUZlYXR1cmVQ
cmVmaXggb3ApCiB7CiAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgIGZsb2F0IG51bWJlcjsKQEAg
LTU0Niw3ICs1NDMsNyBAQCBzdGF0aWMgYm9vbCBhbmltYXRpb25NZWRpYUZlYXR1cmVFdmFsKENT
U1ZhbHVlKiB2YWx1ZSwgUmVuZGVyU3R5bGUqLCBGcmFtZSosIE1lZAogICAgIHJldHVybiB0cnVl
OwogfQogCi1zdGF0aWMgYm9vbCB0cmFuc2l0aW9uTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSog
dmFsdWUsIFJlbmRlclN0eWxlKiwgRnJhbWUqLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0
aWMgYm9vbCB0cmFuc2l0aW9uTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSosIE1lZGlhRmVhdHVyZVByZWZpeCBv
cCkKIHsKICAgICBpZiAodmFsdWUpIHsKICAgICAgICAgZmxvYXQgbnVtYmVyOwpAQCAtNTU1LDcg
KzU1Miw3IEBAIHN0YXRpYyBib29sIHRyYW5zaXRpb25NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVl
KiB2YWx1ZSwgUmVuZGVyU3R5bGUqLCBGcmFtZSosIE1lCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXN0YXRpYyBib29sIHRyYW5zZm9ybV8yZE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVl
LCBSZW5kZXJTdHlsZSosIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJv
b2wgdHJhbnNmb3JtXzJkTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSosIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkK
IHsKICAgICBpZiAodmFsdWUpIHsKICAgICAgICAgZmxvYXQgbnVtYmVyOwpAQCAtNTY0LDcgKzU2
MSw3IEBAIHN0YXRpYyBib29sIHRyYW5zZm9ybV8yZE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUq
IHZhbHVlLCBSZW5kZXJTdHlsZSosIEZyYW1lKiwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3Rh
dGljIGJvb2wgdHJhbnNmb3JtXzNkTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJl
bmRlclN0eWxlKiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMg
Ym9vbCB0cmFuc2Zvcm1fM2RNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3Qg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJl
Zml4IG9wKQogewogICAgIGJvb2wgcmV0dXJuVmFsdWVJZk5vUGFyYW1ldGVyOwogICAgIGludCBo
YXZlM2RSZW5kZXJpbmc7CkBAIC01OTAsNyArNTg3LDcgQEAgc3RhdGljIGJvb2wgdHJhbnNmb3Jt
XzNkTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiwgRnJhbWUq
IGYKIH0KIAogI2lmIEVOQUJMRShWSUVXX01PREVfQ1NTX01FRElBKQotc3RhdGljIGJvb2wgdmll
d19tb2RlTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiwgRnJh
bWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCB2aWV3X21vZGVN
ZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewogICAgIFVO
VVNFRF9QQVJBTShvcCk7CiAgICAgaWYgKCF2YWx1ZSkKQEAgLTYzNSw3ICs2MzIsNyBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgaXNSdW5uaW5nT25JUGhvbmVPcklQb2QoKQogI2VuZGlmCiB9CiAKLXN0
YXRpYyBib29sIHZpZGVvX3BsYXlhYmxlX2lubGluZU1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUq
LCBSZW5kZXJTdHlsZSosIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGlj
IGJvb2wgdmlkZW9fcGxheWFibGVfaW5saW5lTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSosIGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVy
ZVByZWZpeCkKIHsKICAgICByZXR1cm4gIWlzUnVubmluZ09uSVBob25lT3JJUG9kKCkgfHwgZnJh
bWUtPnNldHRpbmdzKCkubWVkaWFQbGF5YmFja0FsbG93c0lubGluZSgpOwogfQpAQCAtNjU3LDcg
KzY1NCw3IEBAIHN0YXRpYyBQb2ludGVyRGV2aWNlVHlwZSBsZWFzdENhcGFibGVQcmltYXJ5UG9p
bnRlckRldmljZVR5cGUoRnJhbWUqIGZyYW1lKQogICAgIHJldHVybiBVbmtub3duUG9pbnRlcjsK
IH0KIAotc3RhdGljIGJvb2wgaG92ZXJNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwg
UmVuZGVyU3R5bGUqLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBi
b29sIGhvdmVyTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsK
ICAgICBQb2ludGVyRGV2aWNlVHlwZSBwb2ludGVyID0gbGVhc3RDYXBhYmxlUHJpbWFyeVBvaW50
ZXJEZXZpY2VUeXBlKGZyYW1lKTsKIApAQCAtNjc4LDcgKzY3NSw3IEBAIHN0YXRpYyBib29sIGhv
dmVyTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiwgRnJhbWUq
IGZyYW1lLCBNCiAgICAgICAgIHx8IChwb2ludGVyID09IE1vdXNlUG9pbnRlciAmJiBudW1iZXIg
PT0gMSk7CiB9CiAKLXN0YXRpYyBib29sIHBvaW50ZXJNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVl
KiB2YWx1ZSwgUmVuZGVyU3R5bGUqLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkK
K3N0YXRpYyBib29sIHBvaW50ZXJNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJl
UHJlZml4KQogewogICAgIFBvaW50ZXJEZXZpY2VUeXBlIHBvaW50ZXIgPSBsZWFzdENhcGFibGVQ
cmltYXJ5UG9pbnRlckRldmljZVR5cGUoZnJhbWUpOwogCkBAIC03MjcsOCArNzI0LDEwIEBAIGJv
b2wgTWVkaWFRdWVyeUV2YWx1YXRvcjo6ZXZhbChjb25zdCBNZWRpYVF1ZXJ5RXhwKiBleHByKSBj
b25zdAogICAgIC8vIGFuZCBsZXQgdHJhbXBvbGluZSBmdW5jdGlvbnMgb3ZlcnJpZGUgdGhlIHBy
ZWZpeCBpZiBwcmVmaXggaXMKICAgICAvLyB1c2VkCiAgICAgRXZhbEZ1bmMgZnVuYyA9IGdGdW5j
dGlvbk1hcC0+Z2V0KGV4cHItPm1lZGlhRmVhdHVyZSgpLmltcGwoKSk7Ci0gICAgaWYgKGZ1bmMp
Ci0gICAgICAgIHJldHVybiBmdW5jKGV4cHItPnZhbHVlKCksIG1fc3R5bGUuZ2V0KCksIG1fZnJh
bWUsIE5vUHJlZml4KTsKKyAgICBpZiAoZnVuYykgeworICAgICAgICBDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhIGNvbnZlcnNpb25EYXRhKG1fc3R5bGUuZ2V0KCksIG1fZnJhbWUtPmRvY3VtZW50
KCktPmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJTdHlsZSgpKTsKKyAgICAgICAgcmV0dXJuIGZ1
bmMoZXhwci0+dmFsdWUoKSwgY29udmVyc2lvbkRhdGEsIG1fZnJhbWUsIE5vUHJlZml4KTsKKyAg
ICB9CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5
bGVTZWxlY3Rvci5jcHAKaW5kZXggMjExYTkzZmRlODZkYzI5NmQ0ZDgyNWY2ZmU3NmExMGMzNDk4
ODJhYi4uNmUwOWNhZjliYjQwNzhhNDNlZWRlNmRiODNkMjk5MDQyNDAxNWMxMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtNTkzLDkgKzU5Myw5IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgICAgICAgICBpZiAoIWZpcnN0VmFsdWUtPmlzU2hhZG93VmFs
dWUoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBDU1NTaGFkb3dWYWx1
ZSogaXRlbSA9IHRvQ1NTU2hhZG93VmFsdWUoZmlyc3RWYWx1ZSk7Ci0gICAgICAgICAgICBJbnRQ
b2ludCBsb2NhdGlvbihpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwg
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKSwKLSAgICAgICAgICAgICAgICBpdGVtLT55LT5jb21w
dXRlTGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKSk7
Ci0gICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21wdXRl
TGVuZ3RoPGludD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKSA6IDA7
CisgICAgICAgICAgICBJbnRQb2ludCBsb2NhdGlvbihpdGVtLT54LT5jb21wdXRlTGVuZ3RoPGlu
dD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29t
KDEuMGYpKSwKKyAgICAgICAgICAgICAgICBpdGVtLT55LT5jb21wdXRlTGVuZ3RoPGludD4oc3Rh
dGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYp
KSk7CisgICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIgPyBpdGVtLT5ibHVyLT5jb21w
dXRlTGVuZ3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRo
QWRqdXN0ZWRab29tKDEuMGYpKSA6IDA7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKICAgICAg
ICAgICAgIGlmIChpdGVtLT5jb2xvcikKICAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmNwcAppbmRleCAxZGE4MzhiNGU3YzZkYWRhMzUzYzA2YjMxZTViNzI1NzljYzVlODkx
Li5lMjcyMGYxN2JkYzcwOTczOTU3MDQzZTZmZGM1NmU0NDRiN2YwYmRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0yNDMsNiArMjQzLDcgQEAgaW5saW5lIHZvaWQgU3R5
bGVSZXNvbHZlcjo6U3RhdGU6OmNsZWFyKCkKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAg
bV9maWx0ZXJzV2l0aFBlbmRpbmdTVkdEb2N1bWVudHMuY2xlYXIoKTsKICNlbmRpZgorICAgIG1f
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSA9IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEobnVs
bHB0ciwgbnVsbHB0cik7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6TWF0Y2hSZXN1bHQ6OmFk
ZE1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgcHJvcGVydGllcywgU3R5
bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlLCBQcm9wZXJ0eVdoaXRlbGlzdFR5
cGUgcHJvcGVydHlXaGl0ZWxpc3RUeXBlKQpAQCAtNDIyLDYgKzQyMyw4IEBAIGlubGluZSB2b2lk
IFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjppbml0Rm9yU3R5bGVSZXNvbHZlKERvY3VtZW50JiBkb2N1
bWVudCwgRWxlbWVuCiAgICAgbV9zdHlsZSA9IG51bGxwdHI7CiAgICAgbV9wZW5kaW5nSW1hZ2VQ
cm9wZXJ0aWVzLmNsZWFyKCk7CiAgICAgbV9mb250RGlydHkgPSBmYWxzZTsKKworICAgIG1fY3Nz
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSA9IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEobV9zdHls
ZS5nZXQoKSwgbV9yb290RWxlbWVudFN0eWxlKTsKIH0KIAogc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGNTdHlsZVNlYXJjaFRocmVzaG9sZCA9IDEwOwpAQCAtMTQ0OCwxNCArMTQ1MSwxNCBAQCBWZWN0
b3I8UmVmUHRyPFN0eWxlUnVsZT4+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JF
bGVtZW50KEVsZW1lbnQqIGVsZQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8g
dGhpcyBpcyBtb3N0bHkgYm9yaW5nIHN0dWZmIG9uIGhvdyB0byBhcHBseSBhIGNlcnRhaW4gcnVs
ZSB0byB0aGUgcmVuZGVyc3R5bGUuLi4KIAotTGVuZ3RoIFN0eWxlUmVzb2x2ZXI6OmNvbnZlcnRU
b0ludExlbmd0aChjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91Ymxl
IG11bHRpcGxpZXIpCitMZW5ndGggU3R5bGVSZXNvbHZlcjo6Y29udmVydFRvSW50TGVuZ3RoKGNv
bnN0IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpCiB7Ci0gICAgcmV0dXJuIHByaW1pdGl2ZVZh
bHVlID8gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJz
aW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbiB8IEZyYWN0aW9u
Q29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0eWxlLCByb290U3R5
bGUsIG11bHRpcGxpZXIpIDogTGVuZ3RoKFVuZGVmaW5lZCk7CisgICAgcmV0dXJuIHByaW1pdGl2
ZVZhbHVlID8gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252
ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbiB8IEZyYWN0
aW9uQ29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KGNvbnZlcnNpb25E
YXRhKSA6IExlbmd0aChVbmRlZmluZWQpOwogfQogCi1MZW5ndGggU3R5bGVSZXNvbHZlcjo6Y29u
dmVydFRvRmxvYXRMZW5ndGgoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUs
IGRvdWJsZSBtdWx0aXBsaWVyKQorTGVuZ3RoIFN0eWxlUmVzb2x2ZXI6OmNvbnZlcnRUb0Zsb2F0
TGVuZ3RoKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpCiB7Ci0gICAgcmV0dXJuIHBy
aW1pdGl2ZVZhbHVlID8gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEZsb2F0
Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBG
cmFjdGlvbkNvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uPihzdHlsZSwg
cm9vdFN0eWxlLCBtdWx0aXBsaWVyKSA6IExlbmd0aChVbmRlZmluZWQpOworICAgIHJldHVybiBw
cmltaXRpdmVWYWx1ZSA/IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRGbG9h
dENvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uIHwg
RnJhY3Rpb25Db252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4oY29udmVy
c2lvbkRhdGEpIDogTGVuZ3RoKFVuZGVmaW5lZCk7CiB9CiAKIHN0YXRpYyBib29sIHNob3VsZEFw
cGx5UHJvcGVydHlJblBhcnNlT3JkZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQpAQCAtMTg1
NSw3ICsxODU4LDcgQEAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIGNvbnN0IFN0eWwKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCi0gICAgd29ya2luZ0xlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb252ZXJ0
VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgVmll
d3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uIHwgQXV0b0Nv
bnZlcnNpb24+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUu
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICB3b3JraW5nTGVuZ3RoID0gcHJpbWl0aXZl
VmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENv
bnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZl
cnNpb24gfCBBdXRvQ29udmVyc2lvbj4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgp
KTsKICAgICBpZiAod29ya2luZ0xlbmd0aC5sZW5ndGgoKS5pc1VuZGVmaW5lZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTIwMjEsOCArMjAyNCw2IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCiAKICAg
ICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSB2YWx1ZS0+aXNQcmltaXRpdmVW
YWx1ZSgpID8gdG9DU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSkgOiAwOwogCi0gICAgZmxvYXQgem9v
bUZhY3RvciA9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLQogICAgIC8vIFdoYXQg
Zm9sbG93cyBpcyBhIGxpc3QgdGhhdCBtYXBzIHRoZSBDU1MgcHJvcGVydGllcyBpbnRvIHRoZWly
IGNvcnJlc3BvbmRpbmcgZnJvbnQtZW5kCiAgICAgLy8gUmVuZGVyU3R5bGUgdmFsdWVzLgogICAg
IHN3aXRjaCAoaWQpIHsKQEAgLTIyOTksMTYgKzIzMDAsMTYgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICAg
ICAgICAgIGlmICghY3VyclZhbHVlLT5pc1NoYWRvd1ZhbHVlKCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICBDU1NTaGFkb3dWYWx1ZSogaXRlbSA9IHRvQ1NTU2hhZG93
VmFsdWUoY3VyclZhbHVlKTsKLSAgICAgICAgICAgIGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxl
bmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbUZh
Y3Rvcik7CisgICAgICAgICAgICBpbnQgeCA9IGl0ZW0tPngtPmNvbXB1dGVMZW5ndGg8aW50Pihz
dGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogICAgICAgICAgICAgaWYgKGl0ZW0t
PngtPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgeCA9IHZp
ZXdwb3J0UGVyY2VudGFnZVZhbHVlKCppdGVtLT54LCB4KTsKLSAgICAgICAgICAgIGludCB5ID0g
aXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVt
ZW50U3R5bGUoKSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICBpbnQgeSA9IGl0ZW0tPnktPmNv
bXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogICAg
ICAgICAgICAgaWYgKGl0ZW0tPnktPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCiAgICAg
ICAgICAgICAgICAgeSA9IHZpZXdwb3J0UGVyY2VudGFnZVZhbHVlKCppdGVtLT55LCB5KTsKLSAg
ICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5n
dGg8aW50PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0
b3IpIDogMDsKKyAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJsdXIt
PmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpIDog
MDsKICAgICAgICAgICAgIGlmIChpdGVtLT5ibHVyICYmIGl0ZW0tPmJsdXItPmlzVmlld3BvcnRQ
ZXJjZW50YWdlTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgYmx1ciA9IHZpZXdwb3J0UGVyY2Vu
dGFnZVZhbHVlKCppdGVtLT5ibHVyLCBibHVyKTsKLSAgICAgICAgICAgIGludCBzcHJlYWQgPSBp
dGVtLT5zcHJlYWQgPyBpdGVtLT5zcHJlYWQtPmNvbXB1dGVMZW5ndGg8aW50PihzdGF0ZS5zdHls
ZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpIDogMDsKKyAgICAgICAg
ICAgIGludCBzcHJlYWQgPSBpdGVtLT5zcHJlYWQgPyBpdGVtLT5zcHJlYWQtPmNvbXB1dGVMZW5n
dGg8aW50PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpIDogMDsKICAgICAgICAg
ICAgIGlmIChpdGVtLT5zcHJlYWQgJiYgaXRlbS0+c3ByZWFkLT5pc1ZpZXdwb3J0UGVyY2VudGFn
ZUxlbmd0aCgpKQogICAgICAgICAgICAgICAgIHNwcmVhZCA9IHZpZXdwb3J0UGVyY2VudGFnZVZh
bHVlKCppdGVtLT5zcHJlYWQsIHNwcmVhZCk7CiAgICAgICAgICAgICBTaGFkb3dTdHlsZSBzaGFk
b3dTdHlsZSA9IGl0ZW0tPnN0eWxlICYmIGl0ZW0tPnN0eWxlLT5nZXRWYWx1ZUlEKCkgPT0gQ1NT
VmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOwpAQCAtMjM0MCw3ICsyMzQxLDcgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICAgICAgUmVmUHRyPFN0eWxlUmVmbGVjdGlvbj4gcmVmbGVjdGlvbiA9IFN0eWxl
UmVmbGVjdGlvbjo6Y3JlYXRlKCk7CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldERpcmVjdGlvbigq
cmVmbGVjdFZhbHVlLT5kaXJlY3Rpb24oKSk7CiAgICAgICAgIGlmIChyZWZsZWN0VmFsdWUtPm9m
ZnNldCgpKQotICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1ZS0+
b2Zmc2V0KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2Vu
dENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUu
cm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKSk7CisgICAgICAgICAgICByZWZsZWN0aW9u
LT5zZXRPZmZzZXQocmVmbGVjdFZhbHVlLT5vZmZzZXQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVk
SW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJz
aW9uPihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpKTsKICAgICAgICAgTmluZVBp
ZWNlSW1hZ2UgbWFzazsKICAgICAgICAgbWFzay5zZXRNYXNrRGVmYXVsdHMoKTsKICAgICAgICAg
bV9zdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZShpZCwgcmVmbGVjdFZhbHVlLT5tYXNrKCksIG1h
c2spOwpAQCAtMjQwMSwxMCArMjQwMiwxMCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogCiAgICAgICAgIERhc2hi
b2FyZFJlZ2lvbiogZmlyc3QgPSByZWdpb247CiAgICAgICAgIHdoaWxlIChyZWdpb24pIHsKLSAg
ICAgICAgICAgIExlbmd0aCB0b3AgPSBjb252ZXJ0VG9JbnRMZW5ndGgocmVnaW9uLT50b3AoKSwg
c3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKLSAgICAgICAgICAgIExl
bmd0aCByaWdodCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPnJpZ2h0KCksIHN0YXRlLnN0
eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7Ci0gICAgICAgICAgICBMZW5ndGggYm90
dG9tID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+Ym90dG9tKCksIHN0YXRlLnN0eWxlKCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7Ci0gICAgICAgICAgICBMZW5ndGggbGVmdCA9IGNv
bnZlcnRUb0ludExlbmd0aChyZWdpb24tPmxlZnQoKSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9v
dEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgIExlbmd0aCB0b3AgPSBjb252ZXJ0VG9JbnRM
ZW5ndGgocmVnaW9uLT50b3AoKSwgc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNv
cHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpKTsKKyAgICAgICAgICAgIExlbmd0aCByaWdodCA9IGNv
bnZlcnRUb0ludExlbmd0aChyZWdpb24tPnJpZ2h0KCksIHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSk7CisgICAgICAgICAgICBMZW5n
dGggYm90dG9tID0gY29udmVydFRvSW50TGVuZ3RoKHJlZ2lvbi0+Ym90dG9tKCksIHN0YXRlLmNz
c1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSk7Cisg
ICAgICAgICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0ludExlbmd0aChyZWdpb24tPmxlZnQo
KSwgc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29t
KDEuMGYpKTsKIAogICAgICAgICAgICAgaWYgKHRvcC5pc1VuZGVmaW5lZCgpKQogICAgICAgICAg
ICAgICAgIHRvcCA9IExlbmd0aCgpOwpAQCAtMjQ0MCwxMSArMjQ0MSwxMSBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldFZhbHVlSUQoKSA9PSBD
U1NWYWx1ZVRoaWNrKQogICAgICAgICAgICAgICAgIHJlc3VsdCAqPSA1OwogICAgICAgICAgICAg
UmVmPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJl
c3VsdCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpKTsKLSAgICAgICAgICAgIHdpZHRoID0g
dmFsdWUuZ2V0KCkuY29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9v
dEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHdpZHRoID0gdmFsdWUu
Z2V0KCkuY29tcHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICB3aWR0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0Pihz
dGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOworICAg
ICAgICAgICAgd2lkdGggPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3Rh
dGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRTdHJva2VXaWR0aCh3aWR0aCk7
CkBAIC0yNDUzLDcgKzI0NTQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRUcmFuc2Zvcm06IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwodHJh
bnNmb3JtLCBUcmFuc2Zvcm0pOwogICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlv
bnM7Ci0gICAgICAgIHRyYW5zZm9ybXNGb3JWYWx1ZShzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290
RWxlbWVudFN0eWxlKCksIHZhbHVlLCBvcGVyYXRpb25zKTsKKyAgICAgICAgdHJhbnNmb3Jtc0Zv
clZhbHVlKHZhbHVlLCBzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCksIG9wZXJhdGlv
bnMpOwogICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUcmFuc2Zvcm0ob3BlcmF0aW9ucyk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNDcwLDExICsyNDcxLDExIEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUp
CiAKICAgICAgICAgZmxvYXQgcGVyc3BlY3RpdmVWYWx1ZTsKICAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1ZSA9IHByaW1p
dGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290
RWxlbWVudFN0eWxlKCksIHpvb21GYWN0b3IpOworICAgICAgICAgICAgcGVyc3BlY3RpdmVWYWx1
ZSA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdGF0ZS5jc3NUb0xlbmd0
aENvbnZlcnNpb25EYXRhKCkpOwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNO
dW1iZXIoKSkgewogICAgICAgICAgICAgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHRy
ZWF0IHZhbHVlbGVzcyBudW1iZXJzIGFzIHB4LgogICAgICAgICAgICAgUmVmPENTU1ByaW1pdGl2
ZVZhbHVlPiB2YWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByaW1pdGl2ZVZhbHVlLT5n
ZXREb3VibGVWYWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKSk7Ci0gICAgICAgICAg
ICBwZXJzcGVjdGl2ZVZhbHVlID0gdmFsdWUuZ2V0KCkuY29tcHV0ZUxlbmd0aDxmbG9hdD4oc3Rh
dGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKTsKKyAgICAg
ICAgICAgIHBlcnNwZWN0aXZlVmFsdWUgPSB2YWx1ZS5nZXQoKS5jb21wdXRlTGVuZ3RoPGZsb2F0
PihzdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIHJldHVybjsKIApAQCAtMzMxMiw4ICszMzEzLDYgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cygpCiBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0
ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIEZpbHRlck9wZXJhdGlvbnMmIG91
dE9wZXJhdGlvbnMpCiB7CiAgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLSAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSBzdGF0ZS5zdHlsZSgpOwotICAgIFJlbmRlclN0eWxlKiByb290U3R5bGUg
PSBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCk7CiAgICAgQVNTRVJUKG91dE9wZXJhdGlvbnMuaXNF
bXB0eSgpKTsKICAgICAKICAgICBpZiAoIWluVmFsdWUpCkBAIC0zMzI4LDcgKzMzMjcsNiBAQCBi
b29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFs
dWUsIEZpbHRlck9wZXJhdGlvbnMmCiAgICAgaWYgKCFpblZhbHVlLT5pc1ZhbHVlTGlzdCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBmbG9hdCB6b29tRmFjdG9yID0gc3R5bGUgPyBz
dHlsZS0+ZWZmZWN0aXZlWm9vbSgpIDogMTsKICAgICBGaWx0ZXJPcGVyYXRpb25zIG9wZXJhdGlv
bnM7CiAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gaW5WYWx1ZTsgaS5oYXNNb3Jl
KCk7IGkuYWR2YW5jZSgpKSB7CiAgICAgICAgIENTU1ZhbHVlKiBjdXJyVmFsdWUgPSBpLnZhbHVl
KCk7CkBAIC0zNDE0LDcgKzM0MTIsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRl
ck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIEZpbHRlck9wZXJhdGlvbnMmCiAgICAgICAg
IGNhc2UgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkJsdXJGaWx0ZXJPcGVyYXRpb246IHsKICAgICAg
ICAgICAgIExlbmd0aCBzdGREZXZpYXRpb24gPSBMZW5ndGgoMCwgRml4ZWQpOwogICAgICAgICAg
ICAgaWYgKGZpbHRlclZhbHVlLT5sZW5ndGgoKSA+PSAxKQotICAgICAgICAgICAgICAgIHN0ZERl
dmlhdGlvbiA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0eWxlLCByb290U3R5
bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgICAgIHN0ZERldmlhdGlvbiA9IGNvbnZlcnRU
b0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEo
KSk7CiAgICAgICAgICAgICBpZiAoc3RkRGV2aWF0aW9uLmlzVW5kZWZpbmVkKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zNDMwLDE0ICszNDI4LDE0IEBAIGJvb2wgU3R5
bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgRmls
dGVyT3BlcmF0aW9ucyYKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAg
Q1NTU2hhZG93VmFsdWUqIGl0ZW0gPSB0b0NTU1NoYWRvd1ZhbHVlKGNzc1ZhbHVlKTsKLSAgICAg
ICAgICAgIGludCB4ID0gaXRlbS0+eC0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0eWxlLCByb290U3R5
bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgaW50IHggPSBpdGVtLT54LT5jb21wdXRlTGVu
Z3RoPGludD4oc3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKICAgICAgICAgICAg
IGlmIChpdGVtLT54LT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQogICAgICAgICAgICAg
ICAgIHggPSB2aWV3cG9ydFBlcmNlbnRhZ2VWYWx1ZSgqaXRlbS0+eCwgeCk7Ci0gICAgICAgICAg
ICBpbnQgeSA9IGl0ZW0tPnktPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0eWxlLCB6
b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGludCB5ID0gaXRlbS0+eS0+Y29tcHV0ZUxlbmd0aDxp
bnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiAgICAgICAgICAgICBpZiAo
aXRlbS0+eS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKICAgICAgICAgICAgICAgICB5
ID0gdmlld3BvcnRQZXJjZW50YWdlVmFsdWUoKml0ZW0tPnksIHkpOwogICAgICAgICAgICAgSW50
UG9pbnQgbG9jYXRpb24oeCwgeSk7Ci0gICAgICAgICAgICBpbnQgYmx1ciA9IGl0ZW0tPmJsdXIg
PyBpdGVtLT5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZh
Y3RvcikgOiAwOworICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1
ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSkg
OiAwOwogICAgICAgICAgICAgaWYgKGl0ZW0tPmJsdXIgJiYgaXRlbS0+Ymx1ci0+aXNWaWV3cG9y
dFBlcmNlbnRhZ2VMZW5ndGgoKSkKICAgICAgICAgICAgICAgICBibHVyID0gdmlld3BvcnRQZXJj
ZW50YWdlVmFsdWUoKml0ZW0tPmJsdXIsIGJsdXIpOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCBjYjQ1ZjM0NGU5YzA2YTAwODY1MTY3
YTBkZjY4ZjNlMDU5YjBhYzU1Li5jNzJjNDNkYzY5MmU5OWFhYjI5YmU3ZDEyMDg5ZjdmMzA2MWU5
ZDA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNp
Zm5kZWYgU3R5bGVSZXNvbHZlcl9oCiAjZGVmaW5lIFN0eWxlUmVzb2x2ZXJfaAogCisjaW5jbHVk
ZSAiQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5oIgogI2luY2x1ZGUgIkNTU1RvU3R5bGVNYXAu
aCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudFJ1bGVTZXRz
LmgiCkBAIC0zNTQsNyArMzU1LDExIEBAIHB1YmxpYzoKICAgICAgICAgRG9jdW1lbnQmIGRvY3Vt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50LT5kb2N1bWVudCgpOyB9CiAgICAgICAgIEVs
ZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KICAgICAgICAgU3R5
bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVkRWxlbWVu
dDsgfQotICAgICAgICB2b2lkIHNldFN0eWxlKFBhc3NSZWY8UmVuZGVyU3R5bGU+IHN0eWxlKSB7
IG1fc3R5bGUgPSBzdGQ6Om1vdmUoc3R5bGUpOyB9CisgICAgICAgIHZvaWQgc2V0U3R5bGUoUGFz
c1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fc3R5bGUg
PSBzdGQ6Om1vdmUoc3R5bGUpOworICAgICAgICAgICAgbV9jc3NUb0xlbmd0aENvbnZlcnNpb25E
YXRhID0gQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YShtX3N0eWxlLmdldCgpLCBtX3Jvb3RFbGVt
ZW50U3R5bGUpOworICAgICAgICB9CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KICAgICAgICAgUGFzc1JlZjxSZW5kZXJTdHlsZT4g
dGFrZVN0eWxlKCkgeyByZXR1cm4gbV9zdHlsZS5yZWxlYXNlTm9uTnVsbCgpOyB9CiAKQEAgLTM5
Nyw2ICs0MDIsOCBAQCBwdWJsaWM6CiAKICAgICAgICAgYm9vbCB1c2VTVkdab29tUnVsZXMoKSBj
b25zdCB7IHJldHVybiBtX2VsZW1lbnQgJiYgbV9lbGVtZW50LT5pc1NWR0VsZW1lbnQoKTsgfQog
CisgICAgICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY3NzVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsgfQorCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgLy8gRklYTUUoYnVnIDEwODU2Myk6IHRvIG1ha2UgaXQgZWFz
aWVyIHRvIHJldmlldywgdGhlc2UgbWVtYmVyCiAgICAgICAgIC8vIHZhcmlhYmxlcyBhcmUgcHVi
bGljLiBIb3dldmVyIHdlIHNob3VsZCBhZGQgbWV0aG9kcyB0byBhY2Nlc3MKQEAgLTQyOCw2ICs0
MzUsOCBAQCBwdWJsaWM6CiAgICAgICAgIEJvcmRlckRhdGEgbV9ib3JkZXJEYXRhOwogICAgICAg
ICBGaWxsTGF5ZXIgbV9iYWNrZ3JvdW5kRGF0YTsKICAgICAgICAgQ29sb3IgbV9iYWNrZ3JvdW5k
Q29sb3I7CisKKyAgICAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBtX2Nzc1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGE7CiAgICAgfTsKIAogICAgIFN0YXRlJiBzdGF0ZSgpIHsgcmV0dXJuIG1f
c3RhdGU7IH0KQEAgLTQ0NSw4ICs0NTQsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBhcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSgpOyB9CiAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlKCk7IH0KIAotICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvSW50TGVuZ3RoKGNvbnN0IENT
U1ByaW1pdGl2ZVZhbHVlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSog
cm9vdFN0eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEpOwotICAgIHN0YXRpYyBMZW5ndGggY29u
dmVydFRvRmxvYXRMZW5ndGgoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUqLCBjb25zdCBSZW5kZXJT
dHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUsIGRvdWJsZSBtdWx0aXBsaWVyID0g
MSk7CisgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG9JbnRMZW5ndGgoY29uc3QgQ1NTUHJpbWl0
aXZlVmFsdWUqLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJik7CisgICAgc3RhdGlj
IExlbmd0aCBjb252ZXJ0VG9GbG9hdExlbmd0aChjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSosIGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKTsKIAogICAgIENTU1RvU3R5bGVNYXAqIHN0
eWxlTWFwKCkgeyByZXR1cm4gJm1fc3R5bGVNYXA7IH0KICAgICBJbnNwZWN0b3JDU1NPTVdyYXBw
ZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JDU1NPTVdy
YXBwZXJzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvVHJhbnNmb3JtRnVuY3Rp
b25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9UcmFuc2Zvcm1GdW5jdGlvbnMuY3BwCmluZGV4
IGIyNGU1Zjk1YzUwM2YzYzQxNWJiNzM5MGI4ODAyNDAwOWFlNzA4NDMuLjgzN2VhNTE4NzI3NDA0
N2JkMDJiYWZhOGNhNTYwOWVhMjhkZGE2NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9UcmFuc2Zvcm1GdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9UcmFuc2Zv
cm1GdW5jdGlvbnMuY3BwCkBAIC03NiwxOSArNzYsMTggQEAgc3RhdGljIFRyYW5zZm9ybU9wZXJh
dGlvbjo6T3BlcmF0aW9uVHlwZSB0cmFuc2Zvcm1PcGVyYXRpb25UeXBlKFdlYktpdENTU1RyYW5z
Zm8KICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOwogfQogCi1zdGF0aWMgTGVu
Z3RoIGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9v
dFN0eWxlLCBkb3VibGUgbXVsdGlwbGllcikKK3N0YXRpYyBMZW5ndGggY29udmVydFRvRmxvYXRM
ZW5ndGgoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlLCBjb25zdCBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkKIHsKLSAgICByZXR1cm4gcHJp
bWl0aXZlVmFsdWUgPyBwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkRmxvYXRD
b252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbiB8IEZy
YWN0aW9uQ29udmVyc2lvbiB8IFZpZXdwb3J0UGVyY2VudGFnZUNvbnZlcnNpb24+KHN0eWxlLCBy
b290U3R5bGUsIG11bHRpcGxpZXIpIDogTGVuZ3RoKFVuZGVmaW5lZCk7CisgICAgcmV0dXJuIHBy
aW1pdGl2ZVZhbHVlID8gcHJpbWl0aXZlVmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEZsb2F0
Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBG
cmFjdGlvbkNvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uPihjb252ZXJz
aW9uRGF0YSkgOiBMZW5ndGgoVW5kZWZpbmVkKTsKIH0KIAotYm9vbCB0cmFuc2Zvcm1zRm9yVmFs
dWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxl
LCBDU1NWYWx1ZSogdmFsdWUsIFRyYW5zZm9ybU9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpCiti
b29sIHRyYW5zZm9ybXNGb3JWYWx1ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdXRP
cGVyYXRpb25zKQogewogICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7
CiAgICAgICAgIG91dE9wZXJhdGlvbnMuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdHlsZSA/IHN0eWxlLT5lZmZlY3RpdmVa
b29tKCkgOiAxOwogICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKICAgICBmb3Ig
KENTU1ZhbHVlTGlzdEl0ZXJhdG9yIGkgPSB2YWx1ZTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgp
KSB7CiAgICAgICAgIENTU1ZhbHVlKiBjdXJyVmFsdWUgPSBpLnZhbHVlKCk7CkBAIC0xNjUsMTMg
KzE2NCwxMyBAQCBib29sIHRyYW5zZm9ybXNGb3JWYWx1ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5
bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUsCiAgICAgICAgICAgICBMZW5ndGggdHgg
PSBMZW5ndGgoMCwgRml4ZWQpOwogICAgICAgICAgICAgTGVuZ3RoIHR5ID0gTGVuZ3RoKDAsIEZp
eGVkKTsKICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpID09
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQot
ICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgc3R5
bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0
VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBjb252ZXJzaW9uRGF0YSk7CiAgICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICB0eCA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFs
dWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgICAgIHR4ID0g
Y29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRhdGEpOwogICAgICAg
ICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+b3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZS0+bGVuZ3RoKCkgPiAxKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSB0b0NTU1By
aW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxvYXRMZW5ndGgoc2Vjb25k
VmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgICAgICAg
ICAgICAgdHkgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChzZWNvbmRWYWx1ZSwgY29udmVyc2lvbkRh
dGEpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQpAQCAtMTg4LDE5ICsxODcsMTkgQEAgYm9vbCB0cmFuc2Zvcm1zRm9yVmFsdWUoY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLAogICAgICAg
ICAgICAgTGVuZ3RoIHR5ID0gTGVuZ3RoKDAsIEZpeGVkKTsKICAgICAgICAgICAgIExlbmd0aCB0
eiA9IExlbmd0aCgwLCBGaXhlZCk7CiAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9w
ZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5z
Zm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICB0eiA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3Ro
KGZpcnN0VmFsdWUsIHN0eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAg
ICAgIHR6ID0gY29udmVydFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRhdGEp
OwogICAgICAgICAgICAgZWxzZSBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSA9
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbikK
LSAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIHN0
eWxlLCByb290U3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgICAgIHR5ID0gY29udmVy
dFRvRmxvYXRMZW5ndGgoZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRhdGEpOwogICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgdHggPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZh
bHVlLCBzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgICAgICB0eCA9
IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKGZpcnN0VmFsdWUsIGNvbnZlcnNpb25EYXRhKTsKICAgICAg
ICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbikgewogICAgICAg
ICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUtPmxlbmd0aCgpID4gMikgewogICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRoaXJkVmFsdWUgPSB0b0NTU1By
aW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHR6ID0gY29udmVydFRvRmxvYXRMZW5ndGgodGhpcmRW
YWx1ZSwgc3R5bGUsIHJvb3RTdHlsZSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0eiA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKHRoaXJkVmFsdWUsIGNvbnZlcnNpb25EYXRh
KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNm
b3JtVmFsdWUtPmxlbmd0aCgpID4gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1W
YWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB0eSA9IGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKHNlY29uZFZhbHVlLCBzdHlsZSwgcm9vdFN0eWxl
LCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvRmxv
YXRMZW5ndGgoc2Vjb25kVmFsdWUsIGNvbnZlcnNpb25EYXRhKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTI3Myw4ICsyNzIsOCBA
QCBib29sIHRyYW5zZm9ybXNGb3JWYWx1ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0
IFJlbmRlclN0eWxlKiByb290U3R5bGUsCiAgICAgICAgICAgICBkb3VibGUgYiA9IHRvQ1NTUHJp
bWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpLT5n
ZXREb3VibGVWYWx1ZSgpOwogICAgICAgICAgICAgZG91YmxlIGMgPSB0b0NTU1ByaW1pdGl2ZVZh
bHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDIpKS0+Z2V0RG91Ymxl
VmFsdWUoKTsKICAgICAgICAgICAgIGRvdWJsZSBkID0gdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFu
c2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygzKSktPmdldERvdWJsZVZhbHVlKCk7
Ci0gICAgICAgICAgICBkb3VibGUgZSA9IHpvb21GYWN0b3IgKiB0b0NTU1ByaW1pdGl2ZVZhbHVl
KHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDQpKS0+Z2V0RG91YmxlVmFs
dWUoKTsKLSAgICAgICAgICAgIGRvdWJsZSBmID0gem9vbUZhY3RvciAqIHRvQ1NTUHJpbWl0aXZl
VmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNSkpLT5nZXREb3Vi
bGVWYWx1ZSgpOworICAgICAgICAgICAgZG91YmxlIGUgPSBjb252ZXJzaW9uRGF0YS56b29tKCkg
KiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDQpKS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIGRvdWJsZSBmID0gY29udmVy
c2lvbkRhdGEuem9vbSgpICogdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRl
bVdpdGhvdXRCb3VuZHNDaGVjayg1KSktPmdldERvdWJsZVZhbHVlKCk7CiAgICAgICAgICAgICBv
cGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUoYSwgYiwgYywgZCwgZSwgZikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
QEAgLTI5Myw4ICsyOTIsOCBAQCBib29sIHRyYW5zZm9ybXNGb3JWYWx1ZShjb25zdCBSZW5kZXJT
dHlsZSogc3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiByb290U3R5bGUsCiAgICAgICAgICAgICAg
ICAgdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjayg5KSktPmdldERvdWJsZVZhbHVlKCksCiAgICAgICAgICAgICAgICAgdG9DU1NQcmltaXRp
dmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMCkpLT5nZXRE
b3VibGVWYWx1ZSgpLAogICAgICAgICAgICAgICAgIHRvQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNm
b3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTEpKS0+Z2V0RG91YmxlVmFsdWUoKSwK
LSAgICAgICAgICAgICAgICB6b29tRmFjdG9yICogdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zv
cm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMikpLT5nZXREb3VibGVWYWx1ZSgpLAot
ICAgICAgICAgICAgICAgIHpvb21GYWN0b3IgKiB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9y
bVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEzKSktPmdldERvdWJsZVZhbHVlKCksCisg
ICAgICAgICAgICAgICAgY29udmVyc2lvbkRhdGEuem9vbSgpICogdG9DU1NQcmltaXRpdmVWYWx1
ZSh0cmFuc2Zvcm1WYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxMikpLT5nZXREb3VibGVW
YWx1ZSgpLAorICAgICAgICAgICAgICAgIGNvbnZlcnNpb25EYXRhLnpvb20oKSAqIHRvQ1NTUHJp
bWl0aXZlVmFsdWUodHJhbnNmb3JtVmFsdWUtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMTMpKS0+
Z2V0RG91YmxlVmFsdWUoKSwKICAgICAgICAgICAgICAgICB0b0NTU1ByaW1pdGl2ZVZhbHVlKHRy
YW5zZm9ybVZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDE0KSktPmdldERvdWJsZVZhbHVl
KCksCiAgICAgICAgICAgICAgICAgdG9DU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm1WYWx1ZS0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxNSkpLT5nZXREb3VibGVWYWx1ZSgpKTsKICAgICAgICAg
ICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChNYXRyaXgzRFRyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKG1hdHJpeCkpOwpAQCAtMzAzLDcgKzMwMiw3IEBAIGJvb2wgdHJhbnNmb3Jt
c0ZvclZhbHVlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHJv
b3RTdHlsZSwKICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6UGVyc3BlY3Rp
dmVUcmFuc2Zvcm1PcGVyYXRpb246IHsKICAgICAgICAgICAgIExlbmd0aCBwID0gTGVuZ3RoKDAs
IEZpeGVkKTsKICAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlLT5pc0xlbmd0aCgpKQotICAgICAg
ICAgICAgICAgIHAgPSBjb252ZXJ0VG9GbG9hdExlbmd0aChmaXJzdFZhbHVlLCBzdHlsZSwgcm9v
dFN0eWxlLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgICAgICBwID0gY29udmVydFRvRmxvYXRM
ZW5ndGgoZmlyc3RWYWx1ZSwgY29udmVyc2lvbkRhdGEpOwogICAgICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHF1aXJrIHRoYXQgc2hvdWxkIGdvIGF3YXkgd2hl
biAzZCB0cmFuc2Zvcm1zIGFyZSBmaW5hbGl6ZWQuCiAgICAgICAgICAgICAgICAgZG91YmxlIHZh
bCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvVHJhbnNmb3JtRnVuY3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvVHJhbnNm
b3JtRnVuY3Rpb25zLmgKaW5kZXggOTc1ZTBiNjU2NTAzNzgxYzgzMWZkYTE0NTIyMzllNDZhYjRk
ZDg3OC4uYTNiNDc1MzlhOGQ2YTAzN2Y0YmQxMDZhZTIyNmEwZTgxZWViODQ2NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1RyYW5zZm9ybUZ1bmN0aW9ucy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9UcmFuc2Zvcm1GdW5jdGlvbnMuaApAQCAtMzQsMTEgKzM0LDEyIEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsKIGNs
YXNzIENTU1ZhbHVlOwogY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTsKIAotYm9vbCB0cmFuc2Zvcm1zRm9yVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqLCBj
b25zdCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBDU1NWYWx1ZSosIFRyYW5zZm9ybU9wZXJhdGlv
bnMmKTsKK2Jvb2wgdHJhbnNmb3Jtc0ZvclZhbHVlKENTU1ZhbHVlKiwgY29uc3QgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSYsIFRyYW5zZm9ybU9wZXJhdGlvbnMmKTsKIAogfQogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCmluZGV4IDRmNTM2NTdmODEwMjg5Zjk3
ZDQ4ZTg3Yjg5ZTE5OWMzM2I0ZDQ2ODYuLjQzYmJkMWMzMWM2ZDlmMjRmMTY4YmIwYzE5YzYyZjBj
NzU4OWIzMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXgu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0
eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5oIgogI2luY2x1
ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5j
bHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCkBAIC02Niw3ICs2Nyw3IEBAIHZvaWQgV2ViS2l0Q1NT
TWF0cml4OjpzZXRNYXRyaXhWYWx1ZShjb25zdCBTdHJpbmcmIHN0cmluZywgRXhjZXB0aW9uQ29k
ZSYgZWMpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9u
cyBvcGVyYXRpb25zOwotICAgICAgICBpZiAoIXRyYW5zZm9ybXNGb3JWYWx1ZSgwLCAwLCB2YWx1
ZS5nZXQoKSwgb3BlcmF0aW9ucykpIHsKKyAgICAgICAgaWYgKCF0cmFuc2Zvcm1zRm9yVmFsdWUo
dmFsdWUuZ2V0KCksIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSwgb3BlcmF0aW9ucykpIHsK
ICAgICAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9T
Lm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCmluZGV4IDAy
YzEzZmFiZTBmMjQ5ZWRiZTEwZTdlYzAxZTdiMzNjMzllMmYxYmEuLjQ4NDg3NTYxZmU2ZDEyYzhl
MjVhZjIxYzJmYzE5MmNmMTdkMjZmODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVJT1MubW0KQEAgLTUyNiw3ICs1MjYsNyBAQCBzdGF0aWMgdm9pZCBhcHBseUNvbW1v
bkJ1dHRvblBhZGRpbmdUb1N0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVu
dAogewogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7CiAgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBlbVNpemUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKDAuNSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpOwotICAgIGludCBwaXhlbHMgPSBl
bVNpemUtPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgZG9jdW1lbnQucmVuZGVyU3R5bGUoKSwg
ZG9jdW1lbnQuZnJhbWUoKS0+cGFnZVpvb21GYWN0b3IoKSk7CisgICAgaW50IHBpeGVscyA9IGVt
U2l6ZS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoc3R5bGUs
IGRvY3VtZW50LnJlbmRlclN0eWxlKCksIGRvY3VtZW50LmZyYW1lKCktPnBhZ2Vab29tRmFjdG9y
KCkpKTsKICAgICBzdHlsZS0+c2V0UGFkZGluZ0JveChMZW5ndGhCb3goMCwgcGl4ZWxzLCAwLCBw
aXhlbHMpKTsKIH0KIApAQCAtOTM0LDcgKzkzNCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OmFk
anVzdEJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXIqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5
CiAgICAgLy8gQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhJbnQgb25seSBuZWVkcyB0
aGUgZWxlbWVudCdzIHN0eWxlIHRvIGNhbGN1bGF0ZSBlbSBsZW5ndGhzLgogICAgIC8vIFNpbmNl
IHRoZSBlbGVtZW50IG1pZ2h0IG5vdCBiZSBpbiBhIGRvY3VtZW50LCBqdXN0IHBhc3MgbnVsbHB0
ciBmb3IgdGhlIHJvb3QgZWxlbWVudCBzdHlsZS4KICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGVtU2l6ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoMS4wLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0VNUyk7Ci0gICAgaW50IHBpeGVscyA9IGVtU2l6ZS0+Y29tcHV0ZUxlbmd0aDxp
bnQ+KHN0eWxlLCBudWxscHRyKTsKKyAgICBpbnQgcGl4ZWxzID0gZW1TaXplLT5jb21wdXRlTGVu
Z3RoPGludD4oQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YShzdHlsZSwgbnVsbHB0ciwgMS4wKSk7
CiAgICAgc3R5bGUtPnNldFBhZGRpbmdCb3goTGVuZ3RoQm94KDAsIHBpeGVscywgMCwgcGl4ZWxz
KSk7CiAKICAgICBpZiAoIWVsZW1lbnQpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>