<?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>63037</bug_id>
          
          <creation_ts>2011-06-20 19:42:42 -0700</creation_ts>
          <short_desc>Make instantiation of legacy editing position more explicit</short_desc>
          <delta_ts>2011-06-22 09:45:52 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>52099</blocked>
    
    <blocked>63040</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>leviw</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ojan</cc>
    
    <cc>sullivan</cc>
    
    <cc>tony</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>424194</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-20 19:42:42 -0700</bug_when>
    <thetext>Instead of keeping old constructor, we should make the way to instantiate a legacy editing position more explicit so that people will pay more attention to the deprecated code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424195</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-20 19:43:12 -0700</bug_when>
    <thetext>This step is also necessary to add a new Position constructor that takes Text* and offset.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424239</commentid>
    <comment_count>2</comment_count>
      <attachid>97924</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-20 21:02:53 -0700</bug_when>
    <thetext>Created attachment 97924
cleanup; likely to fail build on various ports</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424244</commentid>
    <comment_count>3</comment_count>
      <attachid>97924</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-06-20 21:35:01 -0700</bug_when>
    <thetext>Comment on attachment 97924
cleanup; likely to fail build on various ports

Attachment 97924 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/8909844</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424267</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-20 22:40:18 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 97924 [details])
&gt; Attachment 97924 [details] did not pass gtk-ews (gtk):
&gt; Output: http://queues.webkit.org/results/8909844

http://trac.webkit.org/browser/trunk/Source/WebCore/accessibility/gtk/AXObjectCacheAtk.cpp:
Range::create(node-&gt;document(),  Position(node-&gt;parentNode(), 0), Position(node, 0));

This is terrible :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424268</commentid>
    <comment_count>5</comment_count>
      <attachid>97924</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-20 22:44:06 -0700</bug_when>
    <thetext>Comment on attachment 97924
cleanup; likely to fail build on various ports

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

&gt; Source/WebCore/dom/Position.cpp:272
&gt; +            return createDeprecatedLegacyEditingPosition(n, uncheckedPreviousOffsetForBackwardDeletion(n, o));

Huh?  Why not just createLegacyEditingPosition?  The deprecated seems redundant here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424270</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-20 22:47:48 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 97924 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=97924&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Position.cpp:272
&gt; &gt; +            return createDeprecatedLegacyEditingPosition(n, uncheckedPreviousOffsetForBackwardDeletion(n, o));
&gt; 
&gt; Huh?  Why not just createLegacyEditingPosition?  The deprecated seems redundant here.

Sure. I can do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424486</commentid>
    <comment_count>7</comment_count>
      <attachid>97924</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-21 09:02:55 -0700</bug_when>
    <thetext>Comment on attachment 97924
cleanup; likely to fail build on various ports

Looks like the only failure EWS found is:

dom/Position.h: In member function ‘void WebCore::AXObjectCache::nodeTextChangePlatformNotification(WebCore::AccessibilityObject*, WebCore::AXObjectCache::AXTextChange, unsigned int, unsigned int)’:
dom/Position.h:73:9: error: ‘WebCore::Position::LegacyEditingOffset::LegacyEditingOffset(int)’ is private
accessibility/gtk/AXObjectCacheAtk.cpp:190:90: error: within this context
dom/Position.h:73:9: error: ‘WebCore::Position::LegacyEditingOffset::LegacyEditingOffset(int)’ is private
accessibility/gtk/AXObjectCacheAtk.cpp:190:109: error: within this context</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424488</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-21 09:07:09 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 97924 [details])
&gt; Looks like the only failure EWS found is:
&gt; 
&gt; dom/Position.h: In member function ‘void WebCore::AXObjectCache::nodeTextChangePlatformNotification(WebCore::AccessibilityObject*, WebCore::AXObjectCache::AXTextChange, unsigned int, unsigned int)’:
&gt; dom/Position.h:73:9: error: ‘WebCore::Position::LegacyEditingOffset::LegacyEditingOffset(int)’ is private
&gt; accessibility/gtk/AXObjectCacheAtk.cpp:190:90: error: within this context
&gt; dom/Position.h:73:9: error: ‘WebCore::Position::LegacyEditingOffset::LegacyEditingOffset(int)’ is private
&gt; accessibility/gtk/AXObjectCacheAtk.cpp:190:109: error: within this context

Right. See comment #4. AXObjectCacheAtk.cpp is instantiating a Range with two legacy editing positions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424507</commentid>
    <comment_count>9</comment_count>
      <attachid>98002</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-21 09:57:55 -0700</bug_when>
    <thetext>Created attachment 98002
createDeprecatedLegacyEditingPosition to createLegacyEditingPosition; fixed gtk build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425268</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-22 08:52:54 -0700</bug_when>
    <thetext>Ping reviewers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425300</commentid>
    <comment_count>11</comment_count>
      <attachid>98002</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-22 09:33:26 -0700</bug_when>
    <thetext>Comment on attachment 98002
createDeprecatedLegacyEditingPosition to createLegacyEditingPosition; fixed gtk build

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

&gt; Source/WebCore/dom/Position.h:70
&gt; +        int value() { return m_offset; }

Maybe make this const?

&gt; Source/WebCore/dom/Position.h:73
&gt; +        LegacyEditingOffset(int offset) : m_offset(offset) { }

Maybe make this explicit too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425303</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-22 09:35:24 -0700</bug_when>
    <thetext>Thanks for the review.

(In reply to comment #11)
&gt; (From update of attachment 98002 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98002&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Position.h:70
&gt; &gt; +        int value() { return m_offset; }
&gt; 
&gt; Maybe make this const?
&gt; 
&gt; &gt; Source/WebCore/dom/Position.h:73
&gt; &gt; +        LegacyEditingOffset(int offset) : m_offset(offset) { }
&gt; 
&gt; Maybe make this explicit too?

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425312</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-22 09:45:52 -0700</bug_when>
    <thetext>Committed r89440: &lt;http://trac.webkit.org/changeset/89440&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97924</attachid>
            <date>2011-06-20 21:02:53 -0700</date>
            <delta_ts>2011-06-21 09:57:51 -0700</delta_ts>
            <desc>cleanup; likely to fail build on various ports</desc>
            <filename>bug-63037-20110620210252.patch</filename>
            <type>text/plain</type>
            <size>25584</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg5MzMyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTUgQEAKKzIwMTEtMDYtMjAgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFrZSBpbnN0YW50aWF0aW9uIG9mIGxlZ2FjeSBlZGl0aW5nIHBv
c2l0aW9uIG1vcmUgZXhwbGljaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYzMDM3CisKKyAgICAgICAgUmVwbGFjZWQgdGhlIGNvbnN0cnVjdG9yIG9m
IFBvc2l0aW9uIGNsYXNzIHRoYXQgdXNlZCB0byBpbnN0YW50aWF0ZSBhIGxlZ2FjeSBlZGl0aW5n
IHBvc2l0aW9uCisgICAgICAgIGJ5IGEgZnVuY3Rpb24gY2FsbGVkIGNyZWF0ZURlcHJlY2F0ZWRM
ZWdhY3lFZGl0aW5nUG9zaXRpb24uCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjogUmVtb3Zl
ZCB0aGUgY29uc3RydWN0b3IgZnJvbSB0aGUgbGlzdC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dmlz
aWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlckRhdGEpOiBDYWxscyBjcmVhdGVEZXByZWNhdGVkTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uLgorICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQb3NpdGlvbjo6UG9zaXRpb24pOiBOZXcgY29uc3RydWN0b3IgdGFrZXMgTGVn
YWN5RWRpdGluZ09mZnNldCwgd2hpY2ggY2FuIG9ubHkgYmUgaW5zdGFudGFpdGVkCisgICAgICAg
IGJ5IGNyZWF0ZURlcHJlY2F0ZWRMZWdhY3lFZGl0aW5nUG9zaXRpb24uCisgICAgICAgIChXZWJD
b3JlOjpQb3NpdGlvbjo6cHJldmlvdXMpOiBDYWxscyBjcmVhdGVEZXByZWNhdGVkTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246Om5leHQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjp1cHN0cmVhbSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6UG9zaXRpb246OmRvd25zdHJlYW0pOiBEaXR0by4KKyAgICAgICAgKiBkb20vUG9z
aXRpb24uaDogQWRkZWQgbmV3IFBvc2l0aW9uOjpMZWdhY3lFZGl0aW5nT2Zmc2V0IGNsYXNzIHRv
IGhpZGUgdGhlIGxlZ2FjeSBjb25zdHJ1Y3RvciBmcm9tIHRoZSB3b3JsZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBvc2l0aW9uOjpMZWdhY3lFZGl0aW5nT2Zmc2V0Ojp2YWx1ZSk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UG9zaXRpb246OkxlZ2FjeUVkaXRpbmdPZmZzZXQ6OkxlZ2FjeUVkaXRp
bmdPZmZzZXQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURlcHJlY2F0ZWRMZWdh
Y3lFZGl0aW5nUG9zaXRpb24pOiBBZGRlZC4KKyAgICAgICAgKiBkb20vUG9zaXRpb25JdGVyYXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjpvcGVyYXRvciBQb3Np
dGlvbik6IENhbGxzIGNyZWF0ZURlcHJlY2F0ZWRMZWdhY3lFZGl0aW5nUG9zaXRpb24uCisgICAg
ICAgICogZG9tL1JhbmdlQm91bmRhcnlQb2ludC5oOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VC
b3VuZGFyeVBvaW50Ojp0b1Bvc2l0aW9uKTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9JbnNl
cnRUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6
cGVyZm9ybVRyaXZpYWxSZXBsYWNlKTogSW5zdGFudGlhdGVzIG5ldyBQb3NpdGlvbiBpbnN0ZWFk
IG9mIG9sZCBvbmU7IHRoaXMgaXMgYWx3YXlzCisgICAgICAgIHNhZmUgc2luY2UgdGhlIGFuY2hv
ciBub2RlIGlzIGFsd2F5cyBhIHRleHQgbm9kZS4KKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQ
b3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1
YWxseURpc3RpbmN0Q2FuZGlkYXRlKTogQ2FsbHMgY3JlYXRlRGVwcmVjYXRlZExlZ2FjeUVkaXRp
bmdQb3NpdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1
YWxseURpc3RpbmN0Q2FuZGlkYXRlKTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9tYXJrdXAu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnJlbmRlcmVk
VGV4dCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpwcmV2aW91c0JvdW5kYXJ5KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpwcmV2aW91c0xpbmVQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6bmV4dExp
bmVQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAqIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6Y29sbGFwc2UpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6c2V0QmFzZUFuZEV4dGVudCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpzZXRQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpleHRlbmQpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBvc2l0
aW9uRm9yQm94KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBvc2l0aW9uRm9yUG9pbnQpOiBDYWxscyBQb3Np
dGlvbigpIGluc3RlYWQgb2YgUG9zaXRpb24oMCwgMCkuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNyZWF0ZVZp
c2libGVQb3NpdGlvbik6IENhbGxzIGNyZWF0ZURlcHJlY2F0ZWRMZWdhY3lFZGl0aW5nUG9zaXRp
b24uCisKIDIwMTEtMDYtMjAgIERhaSBNaWt1cnViZSAgPGRtaWt1cnViZUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgkocmV2aXNpb24gODkzMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgko
d29ya2luZyBjb3B5KQpAQCAtODQ5LDcgKzg0OSw2IEBAIF9fWk43V2ViQ29yZThGb3JtRGF0YUQx
RXYKIF9fWk43V2ViQ29yZThHcmFkaWVudDEyYWRkQ29sb3JTdG9wRWZSS05TXzVDb2xvckUKIF9f
Wk43V2ViQ29yZThHcmFkaWVudEMxRVJLTlNfMTBGbG9hdFBvaW50RVMzXwogX19aTjdXZWJDb3Jl
OEludFBvaW50QzFFUks4X05TUG9pbnQKLV9fWk43V2ViQ29yZThQb3NpdGlvbkMxRU4zV1RGMTBQ
YXNzUmVmUHRySU5TXzROb2RlRUVFaQogX19aTjdXZWJDb3JlOFBvc2l0aW9uQzFFTjNXVEYxMFBh
c3NSZWZQdHJJTlNfNE5vZGVFRUVpTlMwXzEwQW5jaG9yVHlwZUUKIF9fWk43V2ViQ29yZThTZXR0
aW5nczE0c2V0SmF2YUVuYWJsZWRFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzMTVzZXRXZWJHTEVu
YWJsZWRFYgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCShyZXZpc2lvbiA4OTMwMikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhPYmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4MSw3ICs1ODEsNyBAQCBW
aXNpYmxlUG9zaXRpb24gQVhPYmplY3RDYWNoZTo6dmlzaWJsZVBvCiAgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oKTsKICAgICAKICAgICAvLyBGSVhNRTogQWNjZXNzYWJpbGl0eSBzaG91
bGQgbWFrZSBpdCBjbGVhciB0aGVzZSBhcmUgRE9NLWNvbXBsaWFudCBvZmZzZXRzIG9yIHN0b3Jl
IFBvc2l0aW9uIG9iamVjdHMuCi0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBWaXNp
YmxlUG9zaXRpb24oUG9zaXRpb24odGV4dE1hcmtlckRhdGEubm9kZSwgdGV4dE1hcmtlckRhdGEu
b2Zmc2V0KSwgdGV4dE1hcmtlckRhdGEuYWZmaW5pdHkpOworICAgIFZpc2libGVQb3NpdGlvbiB2
aXNpYmxlUG9zID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZURlcHJlY2F0ZWRMZWdhY3lFZGl0aW5n
UG9zaXRpb24odGV4dE1hcmtlckRhdGEubm9kZSwgdGV4dE1hcmtlckRhdGEub2Zmc2V0KSwgdGV4
dE1hcmtlckRhdGEuYWZmaW5pdHkpOwogICAgIFBvc2l0aW9uIGRlZXBQb3MgPSB2aXNpYmxlUG9z
LmRlZXBFcXVpdmFsZW50KCk7CiAgICAgaWYgKGRlZXBQb3MuaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkocmV2
aXNpb24gODkzMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NCw5ICs3NCw5IEBAIHN0YXRpYyBOb2RlKiBwcmV2aW91c1JlbmRlcmVkRWRp
dGFibGUoTm8KICAgICByZXR1cm4gMDsKIH0KIAotUG9zaXRpb246OlBvc2l0aW9uKFBhc3NSZWZQ
dHI8Tm9kZT4gYW5jaG9yTm9kZSwgaW50IG9mZnNldCkKK1Bvc2l0aW9uOjpQb3NpdGlvbihQYXNz
UmVmUHRyPE5vZGU+IGFuY2hvck5vZGUsIExlZ2FjeUVkaXRpbmdPZmZzZXQgb2Zmc2V0KQogICAg
IDogbV9hbmNob3JOb2RlKGFuY2hvck5vZGUpCi0gICAgLCBtX29mZnNldChvZmZzZXQpCisgICAg
LCBtX29mZnNldChvZmZzZXQudmFsdWUoKSkKICAgICAsIG1fYW5jaG9yVHlwZShhbmNob3JUeXBl
Rm9yTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fYW5jaG9yTm9kZS5nZXQoKSwgbV9vZmZzZXQpKQog
ICAgICwgbV9pc0xlZ2FjeUVkaXRpbmdQb3NpdGlvbih0cnVlKQogewpAQCAtMjY1LDExICsyNjUs
MTEgQEAgUG9zaXRpb24gUG9zaXRpb246OnByZXZpb3VzKFBvc2l0aW9uTW92ZQogICAgICAgICAv
LyAgICAgIEdvaW5nIGZyb20gMSB0byAwIGlzIGNvcnJlY3QuCiAgICAgICAgIHN3aXRjaCAobW92
ZVR5cGUpIHsKICAgICAgICAgY2FzZSBDb2RlUG9pbnQ6Ci0gICAgICAgICAgICByZXR1cm4gUG9z
aXRpb24obiwgbyAtIDEpOworICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZURlcHJlY2F0ZWRMZWdh
Y3lFZGl0aW5nUG9zaXRpb24obiwgbyAtIDEpOwogICAgICAgICBjYXNlIENoYXJhY3RlcjoKLSAg
ICAgICAgICAgIHJldHVybiBQb3NpdGlvbihuLCB1bmNoZWNrZWRQcmV2aW91c09mZnNldChuLCBv
KSk7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlRGVwcmVjYXRlZExlZ2FjeUVkaXRpbmdQb3Np
dGlvbihuLCB1bmNoZWNrZWRQcmV2aW91c09mZnNldChuLCBvKSk7CiAgICAgICAgIGNhc2UgQmFj
a3dhcmREZWxldGlvbjoKLSAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbihuLCB1bmNoZWNrZWRQ
cmV2aW91c09mZnNldEZvckJhY2t3YXJkRGVsZXRpb24obiwgbykpOworICAgICAgICAgICAgcmV0
dXJuIGNyZWF0ZURlcHJlY2F0ZWRMZWdhY3lFZGl0aW5nUG9zaXRpb24obiwgdW5jaGVja2VkUHJl
dmlvdXNPZmZzZXRGb3JCYWNrd2FyZERlbGV0aW9uKG4sIG8pKTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtMjc3LDcgKzI3Nyw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpwcmV2aW91cyhQb3NpdGlv
bk1vdmUKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuICp0aGlzOwogCi0gICAgcmV0
dXJuIFBvc2l0aW9uKHBhcmVudCwgbi0+bm9kZUluZGV4KCkpOworICAgIHJldHVybiBjcmVhdGVE
ZXByZWNhdGVkTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHBhcmVudCwgbi0+bm9kZUluZGV4KCkpOwog
fQogCiBQb3NpdGlvbiBQb3NpdGlvbjo6bmV4dChQb3NpdGlvbk1vdmVUeXBlIG1vdmVUeXBlKSBj
b25zdApAQCAtMzAyLDE0ICszMDIsMTQgQEAgUG9zaXRpb24gUG9zaXRpb246Om5leHQoUG9zaXRp
b25Nb3ZlVHlwZQogICAgICAgICAvLyAgICAgIEdvaW5nIGZvcndhcmQgb25lIGNoYXJhY3RlciBh
dCBhIHRpbWUgaXMgY29ycmVjdC4KICAgICAgICAgLy8gICAyKSBUaGUgbmV3IG9mZnNldCBpcyBh
IGJvZ3VzIG9mZnNldCBsaWtlICg8YnI+LCAxKSwgYW5kIHRoZXJlIGlzIG5vIGNoaWxkLgogICAg
ICAgICAvLyAgICAgIEdvaW5nIGZyb20gMCB0byAxIGlzIGNvcnJlY3QuCi0gICAgICAgIHJldHVy
biBQb3NpdGlvbihuLCAobW92ZVR5cGUgPT0gQ2hhcmFjdGVyKSA/IHVuY2hlY2tlZE5leHRPZmZz
ZXQobiwgbykgOiBvICsgMSk7CisgICAgICAgIHJldHVybiBjcmVhdGVEZXByZWNhdGVkTGVnYWN5
RWRpdGluZ1Bvc2l0aW9uKG4sIChtb3ZlVHlwZSA9PSBDaGFyYWN0ZXIpID8gdW5jaGVja2VkTmV4
dE9mZnNldChuLCBvKSA6IG8gKyAxKTsKICAgICB9CiAKICAgICBDb250YWluZXJOb2RlKiBwYXJl
bnQgPSBuLT5ub25TaGFkb3dCb3VuZGFyeVBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCkK
ICAgICAgICAgcmV0dXJuICp0aGlzOwogCi0gICAgcmV0dXJuIFBvc2l0aW9uKHBhcmVudCwgbi0+
bm9kZUluZGV4KCkgKyAxKTsKKyAgICByZXR1cm4gY3JlYXRlRGVwcmVjYXRlZExlZ2FjeUVkaXRp
bmdQb3NpdGlvbihwYXJlbnQsIG4tPm5vZGVJbmRleCgpICsgMSk7CiB9CiAKIGludCBQb3NpdGlv
bjo6dW5jaGVja2VkUHJldmlvdXNPZmZzZXQoY29uc3QgTm9kZSogbiwgaW50IGN1cnJlbnQpCkBA
IC01MjksNyArNTI5LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKEVkaXRpbmdCb3Vu
ZAogICAgIC8vIGl0ZXJhdGUgYmFja3dhcmQgZnJvbSB0aGVyZSwgbG9va2luZyBmb3IgYSBxdWFs
aWZpZWQgcG9zaXRpb24KICAgICBOb2RlKiBib3VuZGFyeSA9IGVuY2xvc2luZ1Zpc3VhbEJvdW5k
YXJ5KHN0YXJ0Tm9kZSk7CiAgICAgLy8gRklYTUU6IFBvc2l0aW9uSXRlcmF0b3Igc2hvdWxkIHJl
c3BlY3QgQmVmb3JlIGFuZCBBZnRlciBwb3NpdGlvbnMuCi0gICAgUG9zaXRpb25JdGVyYXRvciBs
YXN0VmlzaWJsZSA9IG1fYW5jaG9yVHlwZSA9PSBQb3NpdGlvbklzQWZ0ZXJBbmNob3IgPyBQb3Np
dGlvbihtX2FuY2hvck5vZGUsIGNhcmV0TWF4T2Zmc2V0KG1fYW5jaG9yTm9kZS5nZXQoKSkpIDog
KnRoaXM7CisgICAgUG9zaXRpb25JdGVyYXRvciBsYXN0VmlzaWJsZSA9IG1fYW5jaG9yVHlwZSA9
PSBQb3NpdGlvbklzQWZ0ZXJBbmNob3IgPyBjcmVhdGVEZXByZWNhdGVkTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKG1fYW5jaG9yTm9kZS5nZXQoKSwgY2FyZXRNYXhPZmZzZXQobV9hbmNob3JOb2RlLmdl
dCgpKSkgOiAqdGhpczsKICAgICBQb3NpdGlvbkl0ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0Vmlz
aWJsZTsKICAgICBib29sIHN0YXJ0RWRpdGFibGUgPSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0
YWJsZSgpOwogICAgIE5vZGUqIGxhc3ROb2RlID0gc3RhcnROb2RlOwpAQCAtNTg5LDcgKzU4OSw3
IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbShFZGl0aW5nQm91bmQKICAgICAgICAgICAg
ICAgICAvLyByZW5kZXIgdHJlZSB3aGljaCBjYW4gaGF2ZSBhIGRpZmZlcmVudCBsZW5ndGggZHVl
IHRvIGNhc2UgdHJhbnNmb3JtYXRpb24uCiAgICAgICAgICAgICAgICAgLy8gVW50aWwgd2UgcmVz
b2x2ZSB0aGF0LCBkaXNhYmxlIHRoaXMgc28gd2UgY2FuIHJ1biB0aGUgbGF5b3V0IHRlc3RzIQog
ICAgICAgICAgICAgICAgIC8vQVNTRVJUKGN1cnJlbnRPZmZzZXQgPj0gcmVuZGVyZXItPmNhcmV0
TWF4T2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbihjdXJyZW50Tm9k
ZSwgcmVuZGVyZXItPmNhcmV0TWF4T2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBj
cmVhdGVEZXByZWNhdGVkTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGN1cnJlbnROb2RlLCByZW5kZXJl
ci0+Y2FyZXRNYXhPZmZzZXQoKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHVuc2ln
bmVkIHRleHRPZmZzZXQgPSBjdXJyZW50UG9zLm9mZnNldEluTGVhZk5vZGUoKTsKQEAgLTY1MSw3
ICs2NTEsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbShFZGl0aW5nQm91CiAgICAg
Ly8gaXRlcmF0ZSBmb3J3YXJkIGZyb20gdGhlcmUsIGxvb2tpbmcgZm9yIGEgcXVhbGlmaWVkIHBv
c2l0aW9uCiAgICAgTm9kZSogYm91bmRhcnkgPSBlbmNsb3NpbmdWaXN1YWxCb3VuZGFyeShzdGFy
dE5vZGUpOwogICAgIC8vIEZJWE1FOiBQb3NpdGlvbkl0ZXJhdG9yIHNob3VsZCByZXNwZWN0IEJl
Zm9yZSBhbmQgQWZ0ZXIgcG9zaXRpb25zLgotICAgIFBvc2l0aW9uSXRlcmF0b3IgbGFzdFZpc2li
bGUgPSBtX2FuY2hvclR5cGUgPT0gUG9zaXRpb25Jc0FmdGVyQW5jaG9yID8gUG9zaXRpb24obV9h
bmNob3JOb2RlLCBjYXJldE1heE9mZnNldChtX2FuY2hvck5vZGUuZ2V0KCkpKSA6ICp0aGlzOwor
ICAgIFBvc2l0aW9uSXRlcmF0b3IgbGFzdFZpc2libGUgPSBtX2FuY2hvclR5cGUgPT0gUG9zaXRp
b25Jc0FmdGVyQW5jaG9yID8gY3JlYXRlRGVwcmVjYXRlZExlZ2FjeUVkaXRpbmdQb3NpdGlvbiht
X2FuY2hvck5vZGUuZ2V0KCksIGNhcmV0TWF4T2Zmc2V0KG1fYW5jaG9yTm9kZS5nZXQoKSkpIDog
KnRoaXM7CiAgICAgUG9zaXRpb25JdGVyYXRvciBjdXJyZW50UG9zID0gbGFzdFZpc2libGU7CiAg
ICAgYm9vbCBzdGFydEVkaXRhYmxlID0gc3RhcnROb2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKTsK
ICAgICBOb2RlKiBsYXN0Tm9kZSA9IHN0YXJ0Tm9kZTsKQEAgLTcwNCw3ICs3MDQsNyBAQCBQb3Np
dGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbShFZGl0aW5nQm91CiAgICAgICAgIC8vIFJldHVybiBw
b3NpdGlvbiBiZWZvcmUgdGFibGVzIGFuZCBub2RlcyB3aGljaCBoYXZlIGNvbnRlbnQgdGhhdCBj
YW4gYmUgaWdub3JlZC4KICAgICAgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChjdXJyZW50
Tm9kZSkgfHwgaXNUYWJsZUVsZW1lbnQoY3VycmVudE5vZGUpKSB7CiAgICAgICAgICAgICBpZiAo
Y3VycmVudFBvcy5vZmZzZXRJbkxlYWZOb2RlKCkgPD0gcmVuZGVyZXItPmNhcmV0TWluT2Zmc2V0
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKGN1cnJlbnROb2RlLCByZW5kZXJl
ci0+Y2FyZXRNaW5PZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZURlcHJl
Y2F0ZWRMZWdhY3lFZGl0aW5nUG9zaXRpb24oY3VycmVudE5vZGUsIHJlbmRlcmVyLT5jYXJldE1p
bk9mZnNldCgpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTcxMiw3
ICs3MTIsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbShFZGl0aW5nQm91CiAgICAg
ICAgIGlmIChyZW5kZXJlci0+aXNUZXh0KCkgJiYgdG9SZW5kZXJUZXh0KHJlbmRlcmVyKS0+Zmly
c3RUZXh0Qm94KCkpIHsKICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZSAhPSBzdGFydE5vZGUp
IHsKICAgICAgICAgICAgICAgICBBU1NFUlQoY3VycmVudFBvcy5hdFN0YXJ0T2ZOb2RlKCkpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbihjdXJyZW50Tm9kZSwgcmVuZGVyZXItPmNh
cmV0TWluT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVEZXByZWNhdGVk
TGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGN1cnJlbnROb2RlLCByZW5kZXJlci0+Y2FyZXRNaW5PZmZz
ZXQoKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHVuc2lnbmVkIHRleHRPZmZzZXQg
PSBjdXJyZW50UG9zLm9mZnNldEluTGVhZk5vZGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Qb3NpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5o
CShyZXZpc2lvbiA4OTMwMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NSw3ICs2NSwxOCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gRm9y
IGNyZWF0aW5nIGxlZ2FjeSBlZGl0aW5nIHBvc2l0aW9uczogKEFuY2hvciB0eXBlIHdpbGwgYmUg
ZGV0ZXJtaW5lZCBmcm9tIGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSkKLSAgICBQb3NpdGlv
bihQYXNzUmVmUHRyPE5vZGU+IGFuY2hvck5vZGUsIGludCBvZmZzZXQpOworICAgIGNsYXNzIExl
Z2FjeUVkaXRpbmdPZmZzZXQgeworICAgIHB1YmxpYzoKKyAgICAgICAgaW50IHZhbHVlKCkgeyBy
ZXR1cm4gbV9vZmZzZXQ7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIExlZ2FjeUVkaXRpbmdP
ZmZzZXQoaW50IG9mZnNldCkgOiBtX29mZnNldChvZmZzZXQpIHsgfQorCisgICAgICAgIGZyaWVu
ZCBQb3NpdGlvbiBjcmVhdGVEZXByZWNhdGVkTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKFBhc3NSZWZQ
dHI8Tm9kZT4sIGludCBvZmZzZXQpOworCisgICAgICAgIGludCBtX29mZnNldDsKKyAgICB9Owor
ICAgIFBvc2l0aW9uKFBhc3NSZWZQdHI8Tm9kZT4gYW5jaG9yTm9kZSwgTGVnYWN5RWRpdGluZ09m
ZnNldCk7CiAKICAgICAvLyBGb3IgY3JlYXRpbmcgYmVmb3JlL2FmdGVyIHBvc2l0aW9uczoKICAg
ICBQb3NpdGlvbihQYXNzUmVmUHRyPE5vZGU+IGFuY2hvck5vZGUsIEFuY2hvclR5cGUpOwpAQCAt
MTkzLDYgKzIwNCwxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0xlZ2FjeUVkaXRpbmdQb3Np
dGlvbiA6IDE7CiB9OwogCitpbmxpbmUgUG9zaXRpb24gY3JlYXRlRGVwcmVjYXRlZExlZ2FjeUVk
aXRpbmdQb3NpdGlvbihQYXNzUmVmUHRyPE5vZGU+IG5vZGUsIGludCBvZmZzZXQpCit7CisgICAg
cmV0dXJuIFBvc2l0aW9uKG5vZGUsIFBvc2l0aW9uOjpMZWdhY3lFZGl0aW5nT2Zmc2V0KG9mZnNl
dCkpOworfQorCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBvc2l0aW9uJiBhLCBjb25z
dCBQb3NpdGlvbiYgYikKIHsKICAgICAvLyBGSVhNRTogSW4gPGRpdj48aW1nPjwvZGl2PiBbZGl2
LCAwXSAhPSBbaW1nLCAwXSBldmVuIHRob3VnaCBtb3N0IG9mIHRoZQpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAkocmV2aXNpb24gODkzMDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcg
KzQ2LDcgQEAgUG9zaXRpb25JdGVyYXRvcjo6b3BlcmF0b3IgUG9zaXRpb24oKSBjbwogICAgIH0K
ICAgICBpZiAobV9hbmNob3JOb2RlLT5oYXNDaGlsZE5vZGVzKCkpCiAgICAgICAgIHJldHVybiBs
YXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG1fYW5jaG9yTm9kZSk7Ci0gICAgcmV0dXJuIFBvc2l0
aW9uKG1fYW5jaG9yTm9kZSwgbV9vZmZzZXRJbkFuY2hvcik7CisgICAgcmV0dXJuIGNyZWF0ZURl
cHJlY2F0ZWRMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9hbmNob3JOb2RlLCBtX29mZnNldEluQW5j
aG9yKTsKIH0KIAogdm9pZCBQb3NpdGlvbkl0ZXJhdG9yOjppbmNyZW1lbnQoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlQm91bmRhcnlQb2ludC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaAkocmV2aXNpb24gODkzMDIpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTkyLDcgKzkyLDcgQEAgaW5saW5lIHZvaWQgUmFuZ2VCb3VuZGFyeVBvaW50OjplbnN1cmVPZgog
aW5saW5lIGNvbnN0IFBvc2l0aW9uIFJhbmdlQm91bmRhcnlQb2ludDo6dG9Qb3NpdGlvbigpIGNv
bnN0CiB7CiAgICAgZW5zdXJlT2Zmc2V0SXNWYWxpZCgpOwotICAgIHJldHVybiBQb3NpdGlvbiht
X2NvbnRhaW5lck5vZGUuZ2V0KCksIG1fb2Zmc2V0SW5Db250YWluZXIpOworICAgIHJldHVybiBj
cmVhdGVEZXByZWNhdGVkTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fY29udGFpbmVyTm9kZS5nZXQo
KSwgbV9vZmZzZXRJbkNvbnRhaW5lcik7CiB9CiAKIGlubGluZSBpbnQgUmFuZ2VCb3VuZGFyeVBv
aW50OjpvZmZzZXQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRU
ZXh0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNl
cnRUZXh0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDg5MzAyKQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcg
QEAgYm9vbCBJbnNlcnRUZXh0Q29tbWFuZDo6cGVyZm9ybVRyaXZpYWxSZQogCiAgICAgcmVwbGFj
ZVRleHRJbk5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KHN0YXJ0LmNvbnRhaW5lck5vZGUoKSksIHN0
YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkg
LSBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgdGV4dCk7CiAKLSAgICBQb3NpdGlvbiBl
bmRQb3NpdGlvbihzdGFydC5jb250YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpICsgdGV4dC5sZW5ndGgoKSk7CisgICAgUG9zaXRpb24gZW5kUG9zaXRpb24oc3RhcnQu
Y29udGFpbmVyTm9kZSgpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSArIHRleHQubGVu
Z3RoKCksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwogCiAgICAgLy8gV2Ug
Y291bGQgaGF2ZSBpbnNlcnRlZCBhIHBhcnQgb2YgY29tcG9zZWQgY2hhcmFjdGVyIHNlcXVlbmNl
LAogICAgIC8vIHNvIHdlIGFyZSBiYXNpY2FsbHkgdHJlYXRpbmcgZW5kaW5nIHNlbGVjdGlvbiBh
cyBhIHJhbmdlIHRvIGF2b2lkIHZhbGlkYXRpb24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCShyZXZpc2lvbiA4OTMwMikKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDcg
KzIzMCw3IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6bGVmdFZpc3VhbGx5RGkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgcCA9IFBvc2l0aW9uKHJlbmRlcmVy
LT5ub2RlKCksIG9mZnNldCk7CisgICAgICAgIHAgPSBjcmVhdGVEZXByZWNhdGVkTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKHJlbmRlcmVyLT5ub2RlKCksIG9mZnNldCk7CiAKICAgICAgICAgaWYgKChw
LmlzQ2FuZGlkYXRlKCkgJiYgcC5kb3duc3RyZWFtKCkgIT0gZG93bnN0cmVhbVN0YXJ0KSB8fCBw
LmF0U3RhcnRPZlRyZWUoKSB8fCBwLmF0RW5kT2ZUcmVlKCkpCiAgICAgICAgICAgICByZXR1cm4g
cDsKQEAgLTM4Miw3ICszODIsNyBAQCBQb3NpdGlvbiBWaXNpYmxlUG9zaXRpb246OnJpZ2h0Vmlz
dWFsbHlECiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIHAgPSBQb3Np
dGlvbihyZW5kZXJlci0+bm9kZSgpLCBvZmZzZXQpOworICAgICAgICBwID0gY3JlYXRlRGVwcmVj
YXRlZExlZ2FjeUVkaXRpbmdQb3NpdGlvbihyZW5kZXJlci0+bm9kZSgpLCBvZmZzZXQpOwogCiAg
ICAgICAgIGlmICgocC5pc0NhbmRpZGF0ZSgpICYmIHAuZG93bnN0cmVhbSgpICE9IGRvd25zdHJl
YW1TdGFydCkgfHwgcC5hdFN0YXJ0T2ZUcmVlKCkgfHwgcC5hdEVuZE9mVHJlZSgpKQogICAgICAg
ICAgICAgcmV0dXJuIHA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lv
biA4OTMwMikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjE5LDggKzIxOSw4IEBAIFN0cmluZyBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6
cmVuZGVyZWQKICAgICBpZiAocmFuZ2UgJiYgbm9kZSA9PSByYW5nZS0+ZW5kQ29udGFpbmVyKGVj
KSkKICAgICAgICAgZW5kT2Zmc2V0ID0gcmFuZ2UtPmVuZE9mZnNldChlYyk7CiAKLSAgICBQb3Np
dGlvbiBzdGFydChjb25zdF9jYXN0PE5vZGUqPihub2RlKSwgc3RhcnRPZmZzZXQpOwotICAgIFBv
c2l0aW9uIGVuZChjb25zdF9jYXN0PE5vZGUqPihub2RlKSwgZW5kT2Zmc2V0KTsKKyAgICBQb3Np
dGlvbiBzdGFydCA9IGNyZWF0ZURlcHJlY2F0ZWRMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29uc3Rf
Y2FzdDxOb2RlKj4obm9kZSksIHN0YXJ0T2Zmc2V0KTsKKyAgICBQb3NpdGlvbiBlbmQgPSBjcmVh
dGVEZXByZWNhdGVkTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUp
LCBlbmRPZmZzZXQpOwogICAgIHJldHVybiBwbGFpblRleHQoUmFuZ2U6OmNyZWF0ZShub2RlLT5k
b2N1bWVudCgpLCBzdGFydCwgZW5kKS5nZXQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNpb24gODkzMDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1
OSw3IEBAIHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeSgKICAgICAgICAg
cmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwogCiAgICAgRG9jdW1lbnQqIGQgPSBib3VuZGFyeS0+
ZG9jdW1lbnQoKTsKLSAgICBQb3NpdGlvbiBzdGFydCA9IFBvc2l0aW9uKGJvdW5kYXJ5LCAwKS5w
YXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKKyAgICBQb3NpdGlvbiBzdGFydCA9IGNyZWF0ZURl
cHJlY2F0ZWRMZWdhY3lFZGl0aW5nUG9zaXRpb24oYm91bmRhcnksIDApLnBhcmVudEFuY2hvcmVk
RXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGVuZCA9IHBvcy5wYXJlbnRBbmNob3JlZEVxdWl2
YWxlbnQoKTsKICAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShk
KTsKICAgICAKQEAgLTEyMyw3ICsxMjMsNyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZp
b3VzQm91bmRhcnkoCiAgICAgTm9kZSogbm9kZSA9IGl0LnJhbmdlKCktPnN0YXJ0Q29udGFpbmVy
KGVjKTsKICAgICBpZiAoKG5vZGUtPmlzVGV4dE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KG5l
eHQpIDw9IG5vZGUtPm1heENoYXJhY3Rlck9mZnNldCgpKSB8fCAobm9kZS0+cmVuZGVyZXIoKSAm
JiBub2RlLT5yZW5kZXJlcigpLT5pc0JSKCkgJiYgIW5leHQpKQogICAgICAgICAvLyBUaGUgbmV4
dCB2YXJpYWJsZSBjb250YWlucyBhIHVzYWJsZSBpbmRleCBpbnRvIGEgdGV4dCBub2RlCi0gICAg
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgbmV4dCksIERPV05TVFJF
QU0pOworICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZURlcHJlY2F0ZWRMZWdh
Y3lFZGl0aW5nUG9zaXRpb24obm9kZSwgbmV4dCksIERPV05TVFJFQU0pOwogCiAgICAgLy8gVXNl
IHRoZSBjaGFyYWN0ZXIgaXRlcmF0b3IgdG8gdHJhbnNsYXRlIHRoZSBuZXh0IHZhbHVlIGludG8g
YSBET00gcG9zaXRpb24uCiAgICAgQmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0b3IgY2hhckl0KHNl
YXJjaFJhbmdlLmdldCgpKTsKQEAgLTU1NCwxMiArNTU0LDEyIEBAIFZpc2libGVQb3NpdGlvbiBw
cmV2aW91c0xpbmVQb3NpdGlvbihjb24KICAgICAgICAgd2hpbGUgKG4pIHsKICAgICAgICAgICAg
IGlmIChoaWdoZXN0RWRpdGFibGVSb290KGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShuKSkg
IT0gaGlnaGVzdFJvb3QpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBQb3Np
dGlvbiBwb3MobiwgY2FyZXRNaW5PZmZzZXQobikpOworICAgICAgICAgICAgUG9zaXRpb24gcG9z
ID0gY3JlYXRlRGVwcmVjYXRlZExlZ2FjeUVkaXRpbmdQb3NpdGlvbihuLCBjYXJldE1pbk9mZnNl
dChuKSk7CiAgICAgICAgICAgICBpZiAocG9zLmlzQ2FuZGlkYXRlKCkpIHsKICAgICAgICAgICAg
ICAgICBSZW5kZXJPYmplY3QqIG8gPSBuLT5yZW5kZXJlcigpOwogICAgICAgICAgICAgICAgIEFT
U0VSVChvKTsKICAgICAgICAgICAgICAgICBpZiAoY2FuSGF2ZUN1cnNvcihvKSkgewotICAgICAg
ICAgICAgICAgICAgICBQb3NpdGlvbiBtYXhQb3MobiwgY2FyZXRNYXhPZmZzZXQobikpOworICAg
ICAgICAgICAgICAgICAgICBQb3NpdGlvbiBtYXhQb3MgPSBjcmVhdGVEZXByZWNhdGVkTGVnYWN5
RWRpdGluZ1Bvc2l0aW9uKG4sIGNhcmV0TWF4T2Zmc2V0KG4pKTsKICAgICAgICAgICAgICAgICAg
ICAgbWF4UG9zLmdldElubGluZUJveEFuZE9mZnNldChET1dOU1RSRUFNLCBib3gsIGlnbm9yZWRD
YXJldE9mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChib3gpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHByZXZpb3VzIHJvb3QgbGluZSBib3ggZm91bmQKQEAgLTY1OSw3ICs2
NTksNyBAQCBWaXNpYmxlUG9zaXRpb24gbmV4dExpbmVQb3NpdGlvbihjb25zdCBWCiAgICAgICAg
IHdoaWxlIChuKSB7CiAgICAgICAgICAgICBpZiAoaGlnaGVzdEVkaXRhYmxlUm9vdChmaXJzdFBv
c2l0aW9uSW5PckJlZm9yZU5vZGUobikpICE9IGhpZ2hlc3RSb290KQogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgUG9zaXRpb24gcG9zKG4sIGNhcmV0TWluT2Zmc2V0KG4pKTsK
KyAgICAgICAgICAgIFBvc2l0aW9uIHBvcyA9IGNyZWF0ZURlcHJlY2F0ZWRMZWdhY3lFZGl0aW5n
UG9zaXRpb24obiwgY2FyZXRNaW5PZmZzZXQobikpOwogICAgICAgICAgICAgaWYgKHBvcy5pc0Nh
bmRpZGF0ZSgpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG4tPnJlbmRlcmVyKCkpOwogICAg
ICAgICAgICAgICAgIHBvcy5nZXRJbmxpbmVCb3hBbmRPZmZzZXQoRE9XTlNUUkVBTSwgYm94LCBp
Z25vcmVkQ2FyZXRPZmZzZXQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNw
cAkocmV2aXNpb24gODkzMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIERPTVNlbGVjdGlvbjo6
Y29sbGFwc2UoTm9kZSogbm9kZSwgCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBF
bGltaW5hdGUgbGVnYWN5IGVkaXRpbmcgcG9zaXRpb25zCi0gICAgbV9mcmFtZS0+c2VsZWN0aW9u
KCktPm1vdmVUbyhWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgb2Zmc2V0KSwgRE9XTlNU
UkVBTSkpOworICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb3ZlVG8oVmlzaWJsZVBvc2l0aW9u
KGNyZWF0ZURlcHJlY2F0ZWRMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwgb2Zmc2V0KSwgRE9X
TlNUUkVBTSkpOwogfQogCiB2b2lkIERPTVNlbGVjdGlvbjo6Y29sbGFwc2VUb0VuZChFeGNlcHRp
b25Db2RlJiBlYykKQEAgLTI2Nyw4ICsyNjcsOCBAQCB2b2lkIERPTVNlbGVjdGlvbjo6c2V0QmFz
ZUFuZEV4dGVudChOb2RlCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBFbGltaW5h
dGUgbGVnYWN5IGVkaXRpbmcgcG9zaXRpb25zCi0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVC
YXNlID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGJhc2VOb2RlLCBiYXNlT2Zmc2V0KSwgRE9X
TlNUUkVBTSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFeHRlbnQgPSBWaXNpYmxlUG9z
aXRpb24oUG9zaXRpb24oZXh0ZW50Tm9kZSwgZXh0ZW50T2Zmc2V0KSwgRE9XTlNUUkVBTSk7Cisg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVCYXNlID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZURl
cHJlY2F0ZWRMZWdhY3lFZGl0aW5nUG9zaXRpb24oYmFzZU5vZGUsIGJhc2VPZmZzZXQpLCBET1dO
U1RSRUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUV4dGVudCA9IFZpc2libGVQb3Np
dGlvbihjcmVhdGVEZXByZWNhdGVkTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGV4dGVudE5vZGUsIGV4
dGVudE9mZnNldCksIERPV05TVFJFQU0pOwogCiAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1v
dmVUbyh2aXNpYmxlQmFzZSwgdmlzaWJsZUV4dGVudCk7CiB9CkBAIC0yODYsNyArMjg2LDcgQEAg
dm9pZCBET01TZWxlY3Rpb246OnNldFBvc2l0aW9uKE5vZGUqIG5vZAogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBGSVhNRTogRWxpbWluYXRlIGxlZ2FjeSBlZGl0aW5nIHBvc2l0aW9ucwotICAg
IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb3ZlVG8oVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5v
ZGUsIG9mZnNldCksIERPV05TVFJFQU0pKTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW92
ZVRvKFZpc2libGVQb3NpdGlvbihjcmVhdGVEZXByZWNhdGVkTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KG5vZGUsIG9mZnNldCksIERPV05TVFJFQU0pKTsKIH0KIAogdm9pZCBET01TZWxlY3Rpb246Om1v
ZGlmeShjb25zdCBTdHJpbmcmIGFsdGVyU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvblN0
cmluZywgY29uc3QgU3RyaW5nJiBncmFudWxhcml0eVN0cmluZykKQEAgLTM2MCw3ICszNjAsNyBA
QCB2b2lkIERPTVNlbGVjdGlvbjo6ZXh0ZW5kKE5vZGUqIG5vZGUsIGluCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIEZJWE1FOiBFbGltaW5hdGUgbGVnYWN5IGVkaXRpbmcgcG9zaXRpb25zCi0g
ICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldEV4dGVudChWaXNpYmxlUG9zaXRpb24oUG9zaXRp
b24obm9kZSwgb2Zmc2V0KSwgRE9XTlNUUkVBTSkpOworICAgIG1fZnJhbWUtPnNlbGVjdGlvbigp
LT5zZXRFeHRlbnQoVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZURlcHJlY2F0ZWRMZWdhY3lFZGl0aW5n
UG9zaXRpb24obm9kZSwgb2Zmc2V0KSwgRE9XTlNUUkVBTSkpOwogfQogCiBQYXNzUmVmUHRyPFJh
bmdlPiBET01TZWxlY3Rpb246OmdldFJhbmdlQXQoaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBl
YykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNp
b24gODkzMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MDkwLDEzICs0MDkwLDEzIEBAIFBvc2l0aW9uIFJlbmRlckJsb2Nr
Ojpwb3NpdGlvbkZvckJveChJbmwKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAKICAgICBp
ZiAoIWJveC0+cmVuZGVyZXIoKS0+bm9kZSgpKQotICAgICAgICByZXR1cm4gUG9zaXRpb24obm9k
ZSgpLCBzdGFydCA/IGNhcmV0TWluT2Zmc2V0KCkgOiBjYXJldE1heE9mZnNldCgpKTsKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZURlcHJlY2F0ZWRMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSgpLCBz
dGFydCA/IGNhcmV0TWluT2Zmc2V0KCkgOiBjYXJldE1heE9mZnNldCgpKTsKIAogICAgIGlmICgh
Ym94LT5pc0lubGluZVRleHRCb3goKSkKLSAgICAgICAgcmV0dXJuIFBvc2l0aW9uKGJveC0+cmVu
ZGVyZXIoKS0+bm9kZSgpLCBzdGFydCA/IGJveC0+cmVuZGVyZXIoKS0+Y2FyZXRNaW5PZmZzZXQo
KSA6IGJveC0+cmVuZGVyZXIoKS0+Y2FyZXRNYXhPZmZzZXQoKSk7CisgICAgICAgIHJldHVybiBj
cmVhdGVEZXByZWNhdGVkTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGJveC0+cmVuZGVyZXIoKS0+bm9k
ZSgpLCBzdGFydCA/IGJveC0+cmVuZGVyZXIoKS0+Y2FyZXRNaW5PZmZzZXQoKSA6IGJveC0+cmVu
ZGVyZXIoKS0+Y2FyZXRNYXhPZmZzZXQoKSk7CiAKICAgICBJbmxpbmVUZXh0Qm94ICp0ZXh0Qm94
ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCAqPihib3gpOwotICAgIHJldHVybiBQb3NpdGlv
bihib3gtPnJlbmRlcmVyKCktPm5vZGUoKSwgc3RhcnQgPyB0ZXh0Qm94LT5zdGFydCgpIDogdGV4
dEJveC0+c3RhcnQoKSArIHRleHRCb3gtPmxlbigpKTsKKyAgICByZXR1cm4gY3JlYXRlRGVwcmVj
YXRlZExlZ2FjeUVkaXRpbmdQb3NpdGlvbihib3gtPnJlbmRlcmVyKCktPm5vZGUoKSwgc3RhcnQg
PyB0ZXh0Qm94LT5zdGFydCgpIDogdGV4dEJveC0+c3RhcnQoKSArIHRleHRCb3gtPmxlbigpKTsK
IH0KIAogLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGdvIG9uIFJlbmRlck9iamVjdCBh
cyBhbiBpbnN0YW5jZSBtZXRob2QuIFRoZW4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCShyZXZpc2lvbiA4OTMwMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDk3LDcgKzMwOTcsNyBAQCBWaXNp
YmxlUG9zaXRpb24gUmVuZGVyQm94Ojpwb3NpdGlvbkZvclBvCiB7CiAgICAgLy8gbm8gY2hpbGRy
ZW4uLi5yZXR1cm4gdGhpcyByZW5kZXIgb2JqZWN0J3MgZWxlbWVudCwgaWYgdGhlcmUgaXMgb25l
LCBhbmQgb2Zmc2V0IDAKICAgICBpZiAoIWZpcnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIGNy
ZWF0ZVZpc2libGVQb3NpdGlvbihub2RlKCkgPyBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUo
bm9kZSgpKSA6IFBvc2l0aW9uKDAsIDApKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQ
b3NpdGlvbihub2RlKCkgPyBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSgpKSA6IFBv
c2l0aW9uKCkpOwogCiAgICAgaW50IHhQb3MgPSBwb2ludC54KCk7CiAgICAgaW50IHlQb3MgPSBw
b2ludC55KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAkocmV2aXNpb24gODkzMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUyMCw3ICsyNTIwLDcgQEAgVmlzaWJsZVBvc2l0
aW9uIFJlbmRlck9iamVjdDo6Y3JlYXRlVmlzaQogICAgIGlmIChOb2RlKiBub2RlID0gdGhpcy0+
bm9kZSgpKSB7CiAgICAgICAgIGlmICghbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpIHsKICAg
ICAgICAgICAgIC8vIElmIGl0IGNhbiBiZSBmb3VuZCwgd2UgcHJlZmVyIGEgdmlzdWFsbHkgZXF1
aXZhbGVudCBwb3NpdGlvbiB0aGF0IGlzIGVkaXRhYmxlLiAKLSAgICAgICAgICAgIFBvc2l0aW9u
IHBvc2l0aW9uKG5vZGUsIG9mZnNldCk7CisgICAgICAgICAgICBQb3NpdGlvbiBwb3NpdGlvbiA9
IGNyZWF0ZURlcHJlY2F0ZWRMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwgb2Zmc2V0KTsKICAg
ICAgICAgICAgIFBvc2l0aW9uIGNhbmRpZGF0ZSA9IHBvc2l0aW9uLmRvd25zdHJlYW0oQ2FuQ3Jv
c3NFZGl0aW5nQm91bmRhcnkpOwogICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5kZXByZWNhdGVk
Tm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKGNhbmRpZGF0ZSwgYWZmaW5pdHkpOwpAQCAtMjUyOSw3ICsyNTI5LDcgQEAg
VmlzaWJsZVBvc2l0aW9uIFJlbmRlck9iamVjdDo6Y3JlYXRlVmlzaQogICAgICAgICAgICAgICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oY2FuZGlkYXRlLCBhZmZpbml0eSk7CiAgICAgICAgIH0K
ICAgICAgICAgLy8gRklYTUU6IEVsaW1pbmF0ZSBsZWdhY3kgZWRpdGluZyBwb3NpdGlvbnMKLSAg
ICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQpLCBhZmZp
bml0eSk7CisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oY3JlYXRlRGVwcmVjYXRlZExl
Z2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCBvZmZzZXQpLCBhZmZpbml0eSk7CiAgICAgfQogCiAg
ICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjcm9zcyB0aGUgYm91bmRhcnkgYmV0d2VlbiBlZGl0YWJs
ZSBhbmQgbm9uLWVkaXRhYmxlCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4OTMzMikK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE2IEBACisyMDExLTA2LTIwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgaW5zdGFu
dGlhdGlvbiBvZiBsZWdhY3kgZWRpdGluZyBwb3NpdGlvbiBtb3JlIGV4cGxpY2l0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzAzNworCisgICAgICAg
IENyZWF0ZSBuZXcgcG9zaXRpb25zIHNpbmNlIHdlIGNhbid0IGNyZWF0ZSBhIGxlZ2FjeSBlZGl0
aW5nIHBvc2l0aW9uIG91dHNpZGUgb2YgV2ViQ29yZSBhbnltb3JlLgorCisgICAgICAgICogV2Vi
Vmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3NtYXJ0RGVsZXRlUmFuZ2VG
b3JQcm9wb3NlZFJhbmdlOl0pOiBDYWxscyBjcmVhdGVEZXByZWNhdGVkTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uLgorICAgICAgICAoLVtXZWJGcmFtZSBfc21hcnRJbnNlcnRGb3JTdHJpbmc6cmVwbGFj
aW5nUmFuZ2U6YmVmb3JlU3RyaW5nOmFmdGVyU3RyaW5nOl0pOiBEaXR0by4KKwogMjAxMS0wNi0w
MSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBFcmljIENhcmxzb24uCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1l
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0J
KHJldmlzaW9uIDg5MzAyKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5t
bQkod29ya2luZyBjb3B5KQpAQCAtNzQwLDggKzc0MCw4IEBAIC0gKERPTVJhbmdlICopX3NtYXJ0
RGVsZXRlUmFuZ2VGb3JQcm9wb3MKICAgICAKICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1
bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIFBv
c2l0aW9uIHN0YXJ0KHN0YXJ0Q29udGFpbmVyLCBbcHJvcG9zZWRSYW5nZSBzdGFydE9mZnNldF0p
OwotICAgIFBvc2l0aW9uIGVuZChlbmRDb250YWluZXIsIFtwcm9wb3NlZFJhbmdlIGVuZE9mZnNl
dF0pOworICAgIFBvc2l0aW9uIHN0YXJ0ID0gUG9zaXRpb24oc3RhcnRDb250YWluZXIsIFtwcm9w
b3NlZFJhbmdlIHN0YXJ0T2Zmc2V0XSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
cik7CisgICAgUG9zaXRpb24gZW5kID0gUG9zaXRpb24oZW5kQ29udGFpbmVyLCBbcHJvcG9zZWRS
YW5nZSBlbmRPZmZzZXRdLCBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKICAg
ICBQb3NpdGlvbiBuZXdTdGFydCA9IHN0YXJ0LnVwc3RyZWFtKCkubGVhZGluZ1doaXRlc3BhY2VQ
b3NpdGlvbihET1dOU1RSRUFNLCB0cnVlKTsKICAgICBpZiAobmV3U3RhcnQuaXNOdWxsKCkpCiAg
ICAgICAgIG5ld1N0YXJ0ID0gc3RhcnQ7CkBAIC0xMTA0LDggKzExMDQsOCBAQCAtICh2b2lkKV9z
bWFydEluc2VydEZvclN0cmluZzooTlNTdHJpbmcgCiAgICAgTm9kZSAqc3RhcnRDb250YWluZXIg
PSBjb3JlKFtyYW5nZVRvUmVwbGFjZSBzdGFydENvbnRhaW5lcl0pOwogICAgIE5vZGUgKmVuZENv
bnRhaW5lciA9IGNvcmUoW3JhbmdlVG9SZXBsYWNlIGVuZENvbnRhaW5lcl0pOwogCi0gICAgUG9z
aXRpb24gc3RhcnRQb3Moc3RhcnRDb250YWluZXIsIFtyYW5nZVRvUmVwbGFjZSBzdGFydE9mZnNl
dF0pOwotICAgIFBvc2l0aW9uIGVuZFBvcyhlbmRDb250YWluZXIsIFtyYW5nZVRvUmVwbGFjZSBl
bmRPZmZzZXRdKTsKKyAgICBQb3NpdGlvbiBzdGFydFBvcyhzdGFydENvbnRhaW5lciwgW3Jhbmdl
VG9SZXBsYWNlIHN0YXJ0T2Zmc2V0XSwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
cik7CisgICAgUG9zaXRpb24gZW5kUG9zKGVuZENvbnRhaW5lciwgW3JhbmdlVG9SZXBsYWNlIGVu
ZE9mZnNldF0sIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwogCiAgICAgVmlz
aWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvcyA9IFZpc2libGVQb3NpdGlvbihzdGFydFBvcywg
VlBfREVGQVVMVF9BRkZJTklUWSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3Mg
PSBWaXNpYmxlUG9zaXRpb24oZW5kUG9zLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98002</attachid>
            <date>2011-06-21 09:57:55 -0700</date>
            <delta_ts>2011-06-22 09:33:26 -0700</delta_ts>
            <desc>createDeprecatedLegacyEditingPosition to createLegacyEditingPosition; fixed gtk build</desc>
            <filename>bug-63037-20110621095754.patch</filename>
            <type>text/plain</type>
            <size>26011</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg5MzU5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMDYtMjAgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFrZSBpbnN0YW50aWF0aW9uIG9mIGxlZ2FjeSBlZGl0aW5nIHBv
c2l0aW9uIG1vcmUgZXhwbGljaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYzMDM3CisKKyAgICAgICAgUmVwbGFjZWQgdGhlIGNvbnN0cnVjdG9yIG9m
IFBvc2l0aW9uIGNsYXNzIHRoYXQgdXNlZCB0byBpbnN0YW50aWF0ZSBhIGxlZ2FjeSBlZGl0aW5n
IHBvc2l0aW9uCisgICAgICAgIGJ5IGEgZnVuY3Rpb24gY2FsbGVkIGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbi4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOiBSZW1vdmVkIHRoZSBjb25z
dHJ1Y3RvciBmcm9tIHRoZSBsaXN0LgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjp2aXNpYmxlUG9zaXRp
b25Gb3JUZXh0TWFya2VyRGF0YSk6IENhbGxzIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbi4K
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BWE9iamVjdENhY2hlQXRrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmlj
YXRpb24pOiBObyBsb25nZXIgdXNlcyBQb3NpdGlvbnMgdG8gaW5zdGFudGlhdGUgYSByYW5nZS4K
KyAgICAgICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246
OlBvc2l0aW9uKTogTmV3IGNvbnN0cnVjdG9yIHRha2VzIExlZ2FjeUVkaXRpbmdPZmZzZXQsIHdo
aWNoIGNhbiBvbmx5IGJlIGluc3RhbnRpYXRlZAorICAgICAgICBieSBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6cHJldmlvdXMpOiBDYWxs
cyBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlv
bjo6bmV4dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OnVwc3RyZWFtKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6ZG93bnN0cmVhbSk6IERpdHRvLgor
ICAgICAgICAqIGRvbS9Qb3NpdGlvbi5oOiBBZGRlZCBuZXcgUG9zaXRpb246OkxlZ2FjeUVkaXRp
bmdPZmZzZXQgY2xhc3MgdG8gaGlkZSB0aGUgbGVnYWN5IGNvbnN0cnVjdG9yIGZyb20gdGhlIHdv
cmxkLgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OkxlZ2FjeUVkaXRpbmdPZmZzZXQ6OnZh
bHVlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6TGVnYWN5RWRpdGluZ09m
ZnNldDo6TGVnYWN5RWRpdGluZ09mZnNldCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKTogQWRkZWQuCisgICAgICAgICogZG9tL1Bvc2l0aW9u
SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25JdGVyYXRvcjo6b3BlcmF0
b3IgUG9zaXRpb24pOiBDYWxscyBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24uCisgICAgICAg
ICogZG9tL1JhbmdlQm91bmRhcnlQb2ludC5oOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VCb3Vu
ZGFyeVBvaW50Ojp0b1Bvc2l0aW9uKTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9JbnNlcnRU
ZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6cGVy
Zm9ybVRyaXZpYWxSZXBsYWNlKTogSW5zdGFudGlhdGVzIG5ldyBQb3NpdGlvbiBpbnN0ZWFkIG9m
IG9sZCBvbmU7IHRoaXMgaXMgYWx3YXlzCisgICAgICAgIHNhZmUgc2luY2UgdGhlIGFuY2hvciBu
b2RlIGlzIGFsd2F5cyBhIHRleHQgbm9kZS4KKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVQb3Np
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb246OmxlZnRWaXN1YWxs
eURpc3RpbmN0Q2FuZGlkYXRlKTogQ2FsbHMgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uLgor
ICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uOjpyaWdodFZpc3VhbGx5RGlzdGluY3RD
YW5kaWRhdGUpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6cmVuZGVyZWRUZXh0KTogRGl0dG8u
CisgICAgICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnByZXZpb3VzQm91bmRhcnkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzTGlu
ZVBvc2l0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpuZXh0TGluZVBvc2l0aW9uKTog
RGl0dG8uCisgICAgICAgICogcGFnZS9ET01TZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NU2VsZWN0aW9uOjpjb2xsYXBzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RE9N
U2VsZWN0aW9uOjpzZXRCYXNlQW5kRXh0ZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpE
T01TZWxlY3Rpb246OnNldFBvc2l0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpET01T
ZWxlY3Rpb246OmV4dGVuZCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25Gb3JCb3gpOiBE
aXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6cG9zaXRpb25Gb3JQb2ludCk6IENhbGxzIFBvc2l0aW9uKCkgaW5zdGVh
ZCBvZiBQb3NpdGlvbigwLCAwKS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y3JlYXRlVmlzaWJsZVBvc2l0aW9u
KTogQ2FsbHMgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uLnMKKwogMjAxMS0wNi0yMSAgUGV0
ZXIgVmFyZ2EgIDxwdmFyZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRy
ZWFzIEtsaW5nLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDg5MzAyKQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTg0OSw3ICs4
NDksNiBAQCBfX1pON1dlYkNvcmU4Rm9ybURhdGFEMUV2CiBfX1pON1dlYkNvcmU4R3JhZGllbnQx
MmFkZENvbG9yU3RvcEVmUktOU181Q29sb3JFCiBfX1pON1dlYkNvcmU4R3JhZGllbnRDMUVSS05T
XzEwRmxvYXRQb2ludEVTM18KIF9fWk43V2ViQ29yZThJbnRQb2ludEMxRVJLOF9OU1BvaW50Ci1f
X1pON1dlYkNvcmU4UG9zaXRpb25DMUVOM1dURjEwUGFzc1JlZlB0cklOU180Tm9kZUVFRWkKIF9f
Wk43V2ViQ29yZThQb3NpdGlvbkMxRU4zV1RGMTBQYXNzUmVmUHRySU5TXzROb2RlRUVFaU5TMF8x
MEFuY2hvclR5cGVFCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MxNHNldEphdmFFbmFibGVkRWIKIF9f
Wk43V2ViQ29yZThTZXR0aW5nczE1c2V0V2ViR0xFbmFibGVkRWIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkocmV2aXNpb24gODkzMDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01ODEsNyArNTgxLDcgQEAgVmlzaWJsZVBvc2l0aW9uIEFYT2JqZWN0Q2Fj
aGU6OnZpc2libGVQbwogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAgICAgCiAg
ICAgLy8gRklYTUU6IEFjY2Vzc2FiaWxpdHkgc2hvdWxkIG1ha2UgaXQgY2xlYXIgdGhlc2UgYXJl
IERPTS1jb21wbGlhbnQgb2Zmc2V0cyBvciBzdG9yZSBQb3NpdGlvbiBvYmplY3RzLgotICAgIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHRleHRN
YXJrZXJEYXRhLm5vZGUsIHRleHRNYXJrZXJEYXRhLm9mZnNldCksIHRleHRNYXJrZXJEYXRhLmFm
ZmluaXR5KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyA9IFZpc2libGVQb3NpdGlv
bihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24odGV4dE1hcmtlckRhdGEubm9kZSwgdGV4dE1h
cmtlckRhdGEub2Zmc2V0KSwgdGV4dE1hcmtlckRhdGEuYWZmaW5pdHkpOwogICAgIFBvc2l0aW9u
IGRlZXBQb3MgPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCk7CiAgICAgaWYgKGRlZXBQb3Mu
aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FYT2JqZWN0Q2FjaGVBdGsu
Y3BwCShyZXZpc2lvbiA4OTMwMikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L0FYT2JqZWN0Q2FjaGVBdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNyArMTg3LDcgQEAg
dm9pZCBBWE9iamVjdENhY2hlOjpub2RlVGV4dENoYW5nZVBsYXRmbwogICAgICAgICByZXR1cm47
CiAKICAgICBOb2RlKiBub2RlID0gb2JqZWN0LT5ub2RlKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgIFBvc2l0aW9uKG5vZGUtPnBh
cmVudE5vZGUoKSwgMCksIFBvc2l0aW9uKG5vZGUsIDApKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlID0gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpLCBub2RlLT5wYXJlbnROb2RlKCks
IDAsIG5vZGUsIDApOwogICAgIGVtaXRUZXh0Q2hhbmdlZChvYmplY3QsIHRleHRDaGFuZ2UsIG9m
ZnNldCArIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UuZ2V0KCkpLCBjb3VudCk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkocmV2aXNpb24gODkzMDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw5ICs3NCw5
IEBAIHN0YXRpYyBOb2RlKiBwcmV2aW91c1JlbmRlcmVkRWRpdGFibGUoTm8KICAgICByZXR1cm4g
MDsKIH0KIAotUG9zaXRpb246OlBvc2l0aW9uKFBhc3NSZWZQdHI8Tm9kZT4gYW5jaG9yTm9kZSwg
aW50IG9mZnNldCkKK1Bvc2l0aW9uOjpQb3NpdGlvbihQYXNzUmVmUHRyPE5vZGU+IGFuY2hvck5v
ZGUsIExlZ2FjeUVkaXRpbmdPZmZzZXQgb2Zmc2V0KQogICAgIDogbV9hbmNob3JOb2RlKGFuY2hv
ck5vZGUpCi0gICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgLCBtX29mZnNldChvZmZzZXQudmFs
dWUoKSkKICAgICAsIG1fYW5jaG9yVHlwZShhbmNob3JUeXBlRm9yTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKG1fYW5jaG9yTm9kZS5nZXQoKSwgbV9vZmZzZXQpKQogICAgICwgbV9pc0xlZ2FjeUVkaXRp
bmdQb3NpdGlvbih0cnVlKQogewpAQCAtMjY1LDExICsyNjUsMTEgQEAgUG9zaXRpb24gUG9zaXRp
b246OnByZXZpb3VzKFBvc2l0aW9uTW92ZQogICAgICAgICAvLyAgICAgIEdvaW5nIGZyb20gMSB0
byAwIGlzIGNvcnJlY3QuCiAgICAgICAgIHN3aXRjaCAobW92ZVR5cGUpIHsKICAgICAgICAgY2Fz
ZSBDb2RlUG9pbnQ6Ci0gICAgICAgICAgICByZXR1cm4gUG9zaXRpb24obiwgbyAtIDEpOworICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihuLCBvIC0gMSk7CiAg
ICAgICAgIGNhc2UgQ2hhcmFjdGVyOgotICAgICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKG4sIHVu
Y2hlY2tlZFByZXZpb3VzT2Zmc2V0KG4sIG8pKTsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVM
ZWdhY3lFZGl0aW5nUG9zaXRpb24obiwgdW5jaGVja2VkUHJldmlvdXNPZmZzZXQobiwgbykpOwog
ICAgICAgICBjYXNlIEJhY2t3YXJkRGVsZXRpb246Ci0gICAgICAgICAgICByZXR1cm4gUG9zaXRp
b24obiwgdW5jaGVja2VkUHJldmlvdXNPZmZzZXRGb3JCYWNrd2FyZERlbGV0aW9uKG4sIG8pKTsK
KyAgICAgICAgICAgIHJldHVybiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obiwgdW5jaGVj
a2VkUHJldmlvdXNPZmZzZXRGb3JCYWNrd2FyZERlbGV0aW9uKG4sIG8pKTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtMjc3LDcgKzI3Nyw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpwcmV2aW91cyhQ
b3NpdGlvbk1vdmUKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuICp0aGlzOwogCi0g
ICAgcmV0dXJuIFBvc2l0aW9uKHBhcmVudCwgbi0+bm9kZUluZGV4KCkpOworICAgIHJldHVybiBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocGFyZW50LCBuLT5ub2RlSW5kZXgoKSk7CiB9CiAK
IFBvc2l0aW9uIFBvc2l0aW9uOjpuZXh0KFBvc2l0aW9uTW92ZVR5cGUgbW92ZVR5cGUpIGNvbnN0
CkBAIC0zMDIsMTQgKzMwMiwxNCBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bmV4dChQb3NpdGlvbk1v
dmVUeXBlCiAgICAgICAgIC8vICAgICAgR29pbmcgZm9yd2FyZCBvbmUgY2hhcmFjdGVyIGF0IGEg
dGltZSBpcyBjb3JyZWN0LgogICAgICAgICAvLyAgIDIpIFRoZSBuZXcgb2Zmc2V0IGlzIGEgYm9n
dXMgb2Zmc2V0IGxpa2UgKDxicj4sIDEpLCBhbmQgdGhlcmUgaXMgbm8gY2hpbGQuCiAgICAgICAg
IC8vICAgICAgR29pbmcgZnJvbSAwIHRvIDEgaXMgY29ycmVjdC4KLSAgICAgICAgcmV0dXJuIFBv
c2l0aW9uKG4sIChtb3ZlVHlwZSA9PSBDaGFyYWN0ZXIpID8gdW5jaGVja2VkTmV4dE9mZnNldChu
LCBvKSA6IG8gKyAxKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihuLCAobW92ZVR5cGUgPT0gQ2hhcmFjdGVyKSA/IHVuY2hlY2tlZE5leHRPZmZzZXQobiwgbykg
OiBvICsgMSk7CiAgICAgfQogCiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbi0+bm9uU2hh
ZG93Qm91bmRhcnlQYXJlbnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVy
biAqdGhpczsKIAotICAgIHJldHVybiBQb3NpdGlvbihwYXJlbnQsIG4tPm5vZGVJbmRleCgpICsg
MSk7CisgICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihwYXJlbnQsIG4tPm5v
ZGVJbmRleCgpICsgMSk7CiB9CiAKIGludCBQb3NpdGlvbjo6dW5jaGVja2VkUHJldmlvdXNPZmZz
ZXQoY29uc3QgTm9kZSogbiwgaW50IGN1cnJlbnQpCkBAIC01MjksNyArNTI5LDcgQEAgUG9zaXRp
b24gUG9zaXRpb246OnVwc3RyZWFtKEVkaXRpbmdCb3VuZAogICAgIC8vIGl0ZXJhdGUgYmFja3dh
cmQgZnJvbSB0aGVyZSwgbG9va2luZyBmb3IgYSBxdWFsaWZpZWQgcG9zaXRpb24KICAgICBOb2Rl
KiBib3VuZGFyeSA9IGVuY2xvc2luZ1Zpc3VhbEJvdW5kYXJ5KHN0YXJ0Tm9kZSk7CiAgICAgLy8g
RklYTUU6IFBvc2l0aW9uSXRlcmF0b3Igc2hvdWxkIHJlc3BlY3QgQmVmb3JlIGFuZCBBZnRlciBw
b3NpdGlvbnMuCi0gICAgUG9zaXRpb25JdGVyYXRvciBsYXN0VmlzaWJsZSA9IG1fYW5jaG9yVHlw
ZSA9PSBQb3NpdGlvbklzQWZ0ZXJBbmNob3IgPyBQb3NpdGlvbihtX2FuY2hvck5vZGUsIGNhcmV0
TWF4T2Zmc2V0KG1fYW5jaG9yTm9kZS5nZXQoKSkpIDogKnRoaXM7CisgICAgUG9zaXRpb25JdGVy
YXRvciBsYXN0VmlzaWJsZSA9IG1fYW5jaG9yVHlwZSA9PSBQb3NpdGlvbklzQWZ0ZXJBbmNob3Ig
PyBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9hbmNob3JOb2RlLmdldCgpLCBjYXJldE1h
eE9mZnNldChtX2FuY2hvck5vZGUuZ2V0KCkpKSA6ICp0aGlzOwogICAgIFBvc2l0aW9uSXRlcmF0
b3IgY3VycmVudFBvcyA9IGxhc3RWaXNpYmxlOwogICAgIGJvb2wgc3RhcnRFZGl0YWJsZSA9IHN0
YXJ0Tm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCk7CiAgICAgTm9kZSogbGFzdE5vZGUgPSBzdGFy
dE5vZGU7CkBAIC01ODksNyArNTg5LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKEVk
aXRpbmdCb3VuZAogICAgICAgICAgICAgICAgIC8vIHJlbmRlciB0cmVlIHdoaWNoIGNhbiBoYXZl
IGEgZGlmZmVyZW50IGxlbmd0aCBkdWUgdG8gY2FzZSB0cmFuc2Zvcm1hdGlvbi4KICAgICAgICAg
ICAgICAgICAvLyBVbnRpbCB3ZSByZXNvbHZlIHRoYXQsIGRpc2FibGUgdGhpcyBzbyB3ZSBjYW4g
cnVuIHRoZSBsYXlvdXQgdGVzdHMhCiAgICAgICAgICAgICAgICAgLy9BU1NFUlQoY3VycmVudE9m
ZnNldCA+PSByZW5kZXJlci0+Y2FyZXRNYXhPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIFBvc2l0aW9uKGN1cnJlbnROb2RlLCByZW5kZXJlci0+Y2FyZXRNYXhPZmZzZXQoKSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjdXJyZW50
Tm9kZSwgcmVuZGVyZXItPmNhcmV0TWF4T2Zmc2V0KCkpOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICB1bnNpZ25lZCB0ZXh0T2Zmc2V0ID0gY3VycmVudFBvcy5vZmZzZXRJbkxlYWZOb2Rl
KCk7CkBAIC02NTEsNyArNjUxLDcgQEAgUG9zaXRpb24gUG9zaXRpb246OmRvd25zdHJlYW0oRWRp
dGluZ0JvdQogICAgIC8vIGl0ZXJhdGUgZm9yd2FyZCBmcm9tIHRoZXJlLCBsb29raW5nIGZvciBh
IHF1YWxpZmllZCBwb3NpdGlvbgogICAgIE5vZGUqIGJvdW5kYXJ5ID0gZW5jbG9zaW5nVmlzdWFs
Qm91bmRhcnkoc3RhcnROb2RlKTsKICAgICAvLyBGSVhNRTogUG9zaXRpb25JdGVyYXRvciBzaG91
bGQgcmVzcGVjdCBCZWZvcmUgYW5kIEFmdGVyIHBvc2l0aW9ucy4KLSAgICBQb3NpdGlvbkl0ZXJh
dG9yIGxhc3RWaXNpYmxlID0gbV9hbmNob3JUeXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciA/
IFBvc2l0aW9uKG1fYW5jaG9yTm9kZSwgY2FyZXRNYXhPZmZzZXQobV9hbmNob3JOb2RlLmdldCgp
KSkgOiAqdGhpczsKKyAgICBQb3NpdGlvbkl0ZXJhdG9yIGxhc3RWaXNpYmxlID0gbV9hbmNob3JU
eXBlID09IFBvc2l0aW9uSXNBZnRlckFuY2hvciA/IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihtX2FuY2hvck5vZGUuZ2V0KCksIGNhcmV0TWF4T2Zmc2V0KG1fYW5jaG9yTm9kZS5nZXQoKSkp
IDogKnRoaXM7CiAgICAgUG9zaXRpb25JdGVyYXRvciBjdXJyZW50UG9zID0gbGFzdFZpc2libGU7
CiAgICAgYm9vbCBzdGFydEVkaXRhYmxlID0gc3RhcnROb2RlLT5yZW5kZXJlcklzRWRpdGFibGUo
KTsKICAgICBOb2RlKiBsYXN0Tm9kZSA9IHN0YXJ0Tm9kZTsKQEAgLTcwNCw3ICs3MDQsNyBAQCBQ
b3NpdGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbShFZGl0aW5nQm91CiAgICAgICAgIC8vIFJldHVy
biBwb3NpdGlvbiBiZWZvcmUgdGFibGVzIGFuZCBub2RlcyB3aGljaCBoYXZlIGNvbnRlbnQgdGhh
dCBjYW4gYmUgaWdub3JlZC4KICAgICAgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChjdXJy
ZW50Tm9kZSkgfHwgaXNUYWJsZUVsZW1lbnQoY3VycmVudE5vZGUpKSB7CiAgICAgICAgICAgICBp
ZiAoY3VycmVudFBvcy5vZmZzZXRJbkxlYWZOb2RlKCkgPD0gcmVuZGVyZXItPmNhcmV0TWluT2Zm
c2V0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKGN1cnJlbnROb2RlLCByZW5k
ZXJlci0+Y2FyZXRNaW5PZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxl
Z2FjeUVkaXRpbmdQb3NpdGlvbihjdXJyZW50Tm9kZSwgcmVuZGVyZXItPmNhcmV0TWluT2Zmc2V0
KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtNzEyLDcgKzcxMiw3
IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFtKEVkaXRpbmdCb3UKICAgICAgICAgaWYg
KHJlbmRlcmVyLT5pc1RleHQoKSAmJiB0b1JlbmRlclRleHQocmVuZGVyZXIpLT5maXJzdFRleHRC
b3goKSkgewogICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlICE9IHN0YXJ0Tm9kZSkgewogICAg
ICAgICAgICAgICAgIEFTU0VSVChjdXJyZW50UG9zLmF0U3RhcnRPZk5vZGUoKSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKGN1cnJlbnROb2RlLCByZW5kZXJlci0+Y2FyZXRNaW5P
ZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihjdXJyZW50Tm9kZSwgcmVuZGVyZXItPmNhcmV0TWluT2Zmc2V0KCkpOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICB1bnNpZ25lZCB0ZXh0T2Zmc2V0ID0gY3VycmVudFBvcy5vZmZz
ZXRJbkxlYWZOb2RlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaAkocmV2aXNpb24gODkzMDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjUs
NyArNjUsMTggQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEZvciBjcmVhdGluZyBsZWdhY3kg
ZWRpdGluZyBwb3NpdGlvbnM6IChBbmNob3IgdHlwZSB3aWxsIGJlIGRldGVybWluZWQgZnJvbSBl
ZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkpCi0gICAgUG9zaXRpb24oUGFzc1JlZlB0cjxOb2Rl
PiBhbmNob3JOb2RlLCBpbnQgb2Zmc2V0KTsKKyAgICBjbGFzcyBMZWdhY3lFZGl0aW5nT2Zmc2V0
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIGludCB2YWx1ZSgpIHsgcmV0dXJuIG1fb2Zmc2V0OyB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICBMZWdhY3lFZGl0aW5nT2Zmc2V0KGludCBvZmZzZXQp
IDogbV9vZmZzZXQob2Zmc2V0KSB7IH0KKworICAgICAgICBmcmllbmQgUG9zaXRpb24gY3JlYXRl
TGVnYWN5RWRpdGluZ1Bvc2l0aW9uKFBhc3NSZWZQdHI8Tm9kZT4sIGludCBvZmZzZXQpOworCisg
ICAgICAgIGludCBtX29mZnNldDsKKyAgICB9OworICAgIFBvc2l0aW9uKFBhc3NSZWZQdHI8Tm9k
ZT4gYW5jaG9yTm9kZSwgTGVnYWN5RWRpdGluZ09mZnNldCk7CiAKICAgICAvLyBGb3IgY3JlYXRp
bmcgYmVmb3JlL2FmdGVyIHBvc2l0aW9uczoKICAgICBQb3NpdGlvbihQYXNzUmVmUHRyPE5vZGU+
IGFuY2hvck5vZGUsIEFuY2hvclR5cGUpOwpAQCAtMTkzLDYgKzIwNCwxMSBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9pc0xlZ2FjeUVkaXRpbmdQb3NpdGlvbiA6IDE7CiB9OwogCitpbmxpbmUgUG9z
aXRpb24gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwg
aW50IG9mZnNldCkKK3sKKyAgICByZXR1cm4gUG9zaXRpb24obm9kZSwgUG9zaXRpb246OkxlZ2Fj
eUVkaXRpbmdPZmZzZXQob2Zmc2V0KSk7Cit9CisKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgUG9zaXRpb24mIGEsIGNvbnN0IFBvc2l0aW9uJiBiKQogewogICAgIC8vIEZJWE1FOiBJbiA8
ZGl2PjxpbWc+PC9kaXY+IFtkaXYsIDBdICE9IFtpbWcsIDBdIGV2ZW4gdGhvdWdoIG1vc3Qgb2Yg
dGhlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCShyZXZpc2lv
biA4OTMwMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBQb3NpdGlvbkl0ZXJhdG9yOjpvcGVyYXRvciBQ
b3NpdGlvbigpIGNvCiAgICAgfQogICAgIGlmIChtX2FuY2hvck5vZGUtPmhhc0NoaWxkTm9kZXMo
KSkKICAgICAgICAgcmV0dXJuIGxhc3RQb3NpdGlvbkluT3JBZnRlck5vZGUobV9hbmNob3JOb2Rl
KTsKLSAgICByZXR1cm4gUG9zaXRpb24obV9hbmNob3JOb2RlLCBtX29mZnNldEluQW5jaG9yKTsK
KyAgICByZXR1cm4gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fYW5jaG9yTm9kZSwgbV9v
ZmZzZXRJbkFuY2hvcik7CiB9CiAKIHZvaWQgUG9zaXRpb25JdGVyYXRvcjo6aW5jcmVtZW50KCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2VCb3VuZGFyeVBvaW50LmgJKHJldmlzaW9uIDg5
MzAyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlQm91bmRhcnlQb2ludC5oCSh3b3JraW5n
IGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIGlubGluZSB2b2lkIFJhbmdlQm91bmRhcnlQb2ludDo6
ZW5zdXJlT2YKIGlubGluZSBjb25zdCBQb3NpdGlvbiBSYW5nZUJvdW5kYXJ5UG9pbnQ6OnRvUG9z
aXRpb24oKSBjb25zdAogewogICAgIGVuc3VyZU9mZnNldElzVmFsaWQoKTsKLSAgICByZXR1cm4g
UG9zaXRpb24obV9jb250YWluZXJOb2RlLmdldCgpLCBtX29mZnNldEluQ29udGFpbmVyKTsKKyAg
ICByZXR1cm4gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fY29udGFpbmVyTm9kZS5nZXQo
KSwgbV9vZmZzZXRJbkNvbnRhaW5lcik7CiB9CiAKIGlubGluZSBpbnQgUmFuZ2VCb3VuZGFyeVBv
aW50OjpvZmZzZXQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRU
ZXh0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNl
cnRUZXh0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDg5MzAyKQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcg
QEAgYm9vbCBJbnNlcnRUZXh0Q29tbWFuZDo6cGVyZm9ybVRyaXZpYWxSZQogCiAgICAgcmVwbGFj
ZVRleHRJbk5vZGUoc3RhdGljX2Nhc3Q8VGV4dCo+KHN0YXJ0LmNvbnRhaW5lck5vZGUoKSksIHN0
YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkg
LSBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgdGV4dCk7CiAKLSAgICBQb3NpdGlvbiBl
bmRQb3NpdGlvbihzdGFydC5jb250YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpICsgdGV4dC5sZW5ndGgoKSk7CisgICAgUG9zaXRpb24gZW5kUG9zaXRpb24oc3RhcnQu
Y29udGFpbmVyTm9kZSgpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSArIHRleHQubGVu
Z3RoKCksIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOwogCiAgICAgLy8gV2Ug
Y291bGQgaGF2ZSBpbnNlcnRlZCBhIHBhcnQgb2YgY29tcG9zZWQgY2hhcmFjdGVyIHNlcXVlbmNl
LAogICAgIC8vIHNvIHdlIGFyZSBiYXNpY2FsbHkgdHJlYXRpbmcgZW5kaW5nIHNlbGVjdGlvbiBh
cyBhIHJhbmdlIHRvIGF2b2lkIHZhbGlkYXRpb24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCShyZXZpc2lvbiA4OTMwMikKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwLDcg
KzIzMCw3IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6bGVmdFZpc3VhbGx5RGkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgcCA9IFBvc2l0aW9uKHJlbmRlcmVy
LT5ub2RlKCksIG9mZnNldCk7CisgICAgICAgIHAgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRp
b24ocmVuZGVyZXItPm5vZGUoKSwgb2Zmc2V0KTsKIAogICAgICAgICBpZiAoKHAuaXNDYW5kaWRh
dGUoKSAmJiBwLmRvd25zdHJlYW0oKSAhPSBkb3duc3RyZWFtU3RhcnQpIHx8IHAuYXRTdGFydE9m
VHJlZSgpIHx8IHAuYXRFbmRPZlRyZWUoKSkKICAgICAgICAgICAgIHJldHVybiBwOwpAQCAtMzgy
LDcgKzM4Miw3IEBAIFBvc2l0aW9uIFZpc2libGVQb3NpdGlvbjo6cmlnaHRWaXN1YWxseUQKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgcCA9IFBvc2l0aW9uKHJlbmRl
cmVyLT5ub2RlKCksIG9mZnNldCk7CisgICAgICAgIHAgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9z
aXRpb24ocmVuZGVyZXItPm5vZGUoKSwgb2Zmc2V0KTsKIAogICAgICAgICBpZiAoKHAuaXNDYW5k
aWRhdGUoKSAmJiBwLmRvd25zdHJlYW0oKSAhPSBkb3duc3RyZWFtU3RhcnQpIHx8IHAuYXRTdGFy
dE9mVHJlZSgpIHx8IHAuYXRFbmRPZlRyZWUoKSkKICAgICAgICAgICAgIHJldHVybiBwOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gODkzMDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxOSw4ICsyMTks
OCBAQCBTdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnJlbmRlcmVkCiAgICAgaWYgKHJh
bmdlICYmIG5vZGUgPT0gcmFuZ2UtPmVuZENvbnRhaW5lcihlYykpCiAgICAgICAgIGVuZE9mZnNl
dCA9IHJhbmdlLT5lbmRPZmZzZXQoZWMpOwogCi0gICAgUG9zaXRpb24gc3RhcnQoY29uc3RfY2Fz
dDxOb2RlKj4obm9kZSksIHN0YXJ0T2Zmc2V0KTsKLSAgICBQb3NpdGlvbiBlbmQoY29uc3RfY2Fz
dDxOb2RlKj4obm9kZSksIGVuZE9mZnNldCk7CisgICAgUG9zaXRpb24gc3RhcnQgPSBjcmVhdGVM
ZWdhY3lFZGl0aW5nUG9zaXRpb24oY29uc3RfY2FzdDxOb2RlKj4obm9kZSksIHN0YXJ0T2Zmc2V0
KTsKKyAgICBQb3NpdGlvbiBlbmQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29uc3Rf
Y2FzdDxOb2RlKj4obm9kZSksIGVuZE9mZnNldCk7CiAgICAgcmV0dXJuIHBsYWluVGV4dChSYW5n
ZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpLmdldCgpKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCShyZXZpc2lvbiA4OTMw
MikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDcgKzU5LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0Jv
dW5kYXJ5KAogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKICAgICBEb2N1bWVu
dCogZCA9IGJvdW5kYXJ5LT5kb2N1bWVudCgpOwotICAgIFBvc2l0aW9uIHN0YXJ0ID0gUG9zaXRp
b24oYm91bmRhcnksIDApLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOworICAgIFBvc2l0aW9u
IHN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGJvdW5kYXJ5LCAwKS5wYXJlbnRB
bmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlbmQgPSBwb3MucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCk7CiAgICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZSA9IFJhbmdlOjpj
cmVhdGUoZCk7CiAgICAgCkBAIC0xMjMsNyArMTIzLDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlv
biBwcmV2aW91c0JvdW5kYXJ5KAogICAgIE5vZGUqIG5vZGUgPSBpdC5yYW5nZSgpLT5zdGFydENv
bnRhaW5lcihlYyk7CiAgICAgaWYgKChub2RlLT5pc1RleHROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8
aW50PihuZXh0KSA8PSBub2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSkgfHwgKG5vZGUtPnJlbmRl
cmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNCUigpICYmICFuZXh0KSkKICAgICAgICAgLy8g
VGhlIG5leHQgdmFyaWFibGUgY29udGFpbnMgYSB1c2FibGUgaW5kZXggaW50byBhIHRleHQgbm9k
ZQotICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIG5leHQpLCBE
T1dOU1RSRUFNKTsKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24obm9kZSwgbmV4dCksIERPV05TVFJFQU0pOwogCiAgICAgLy8gVXNlIHRo
ZSBjaGFyYWN0ZXIgaXRlcmF0b3IgdG8gdHJhbnNsYXRlIHRoZSBuZXh0IHZhbHVlIGludG8gYSBE
T00gcG9zaXRpb24uCiAgICAgQmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0b3IgY2hhckl0KHNlYXJj
aFJhbmdlLmdldCgpKTsKQEAgLTU1NCwxMiArNTU0LDEyIEBAIFZpc2libGVQb3NpdGlvbiBwcmV2
aW91c0xpbmVQb3NpdGlvbihjb24KICAgICAgICAgd2hpbGUgKG4pIHsKICAgICAgICAgICAgIGlm
IChoaWdoZXN0RWRpdGFibGVSb290KGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShuKSkgIT0g
aGlnaGVzdFJvb3QpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBQb3NpdGlv
biBwb3MobiwgY2FyZXRNaW5PZmZzZXQobikpOworICAgICAgICAgICAgUG9zaXRpb24gcG9zID0g
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG4sIGNhcmV0TWluT2Zmc2V0KG4pKTsKICAgICAg
ICAgICAgIGlmIChwb3MuaXNDYW5kaWRhdGUoKSkgewogICAgICAgICAgICAgICAgIFJlbmRlck9i
amVjdCogbyA9IG4tPnJlbmRlcmVyKCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG8pOwogICAg
ICAgICAgICAgICAgIGlmIChjYW5IYXZlQ3Vyc29yKG8pKSB7Ci0gICAgICAgICAgICAgICAgICAg
IFBvc2l0aW9uIG1heFBvcyhuLCBjYXJldE1heE9mZnNldChuKSk7CisgICAgICAgICAgICAgICAg
ICAgIFBvc2l0aW9uIG1heFBvcyA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihuLCBjYXJl
dE1heE9mZnNldChuKSk7CiAgICAgICAgICAgICAgICAgICAgIG1heFBvcy5nZXRJbmxpbmVCb3hB
bmRPZmZzZXQoRE9XTlNUUkVBTSwgYm94LCBpZ25vcmVkQ2FyZXRPZmZzZXQpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoYm94KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmV2aW91
cyByb290IGxpbmUgYm94IGZvdW5kCkBAIC02NTksNyArNjU5LDcgQEAgVmlzaWJsZVBvc2l0aW9u
IG5leHRMaW5lUG9zaXRpb24oY29uc3QgVgogICAgICAgICB3aGlsZSAobikgewogICAgICAgICAg
ICAgaWYgKGhpZ2hlc3RFZGl0YWJsZVJvb3QoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG4p
KSAhPSBoaWdoZXN0Um9vdCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFBv
c2l0aW9uIHBvcyhuLCBjYXJldE1pbk9mZnNldChuKSk7CisgICAgICAgICAgICBQb3NpdGlvbiBw
b3MgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obiwgY2FyZXRNaW5PZmZzZXQobikpOwog
ICAgICAgICAgICAgaWYgKHBvcy5pc0NhbmRpZGF0ZSgpKSB7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKG4tPnJlbmRlcmVyKCkpOwogICAgICAgICAgICAgICAgIHBvcy5nZXRJbmxpbmVCb3hBbmRP
ZmZzZXQoRE9XTlNUUkVBTSwgYm94LCBpZ25vcmVkQ2FyZXRPZmZzZXQpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAkocmV2aXNpb24gODkzMDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMs
NyBAQCB2b2lkIERPTVNlbGVjdGlvbjo6Y29sbGFwc2UoTm9kZSogbm9kZSwgCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIEZJWE1FOiBFbGltaW5hdGUgbGVnYWN5IGVkaXRpbmcgcG9zaXRpb25z
Ci0gICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vdmVUbyhWaXNpYmxlUG9zaXRpb24oUG9zaXRp
b24obm9kZSwgb2Zmc2V0KSwgRE9XTlNUUkVBTSkpOworICAgIG1fZnJhbWUtPnNlbGVjdGlvbigp
LT5tb3ZlVG8oVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2Rl
LCBvZmZzZXQpLCBET1dOU1RSRUFNKSk7CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9uOjpjb2xsYXBz
ZVRvRW5kKEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMjY3LDggKzI2Nyw4IEBAIHZvaWQgRE9NU2Vs
ZWN0aW9uOjpzZXRCYXNlQW5kRXh0ZW50KE5vZGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
RklYTUU6IEVsaW1pbmF0ZSBsZWdhY3kgZWRpdGluZyBwb3NpdGlvbnMKLSAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZUJhc2UgPSBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24oYmFzZU5vZGUsIGJh
c2VPZmZzZXQpLCBET1dOU1RSRUFNKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUV4dGVu
dCA9IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihleHRlbnROb2RlLCBleHRlbnRPZmZzZXQpLCBE
T1dOU1RSRUFNKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUJhc2UgPSBWaXNpYmxlUG9z
aXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGJhc2VOb2RlLCBiYXNlT2Zmc2V0KSwg
RE9XTlNUUkVBTSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFeHRlbnQgPSBWaXNpYmxl
UG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGV4dGVudE5vZGUsIGV4dGVudE9m
ZnNldCksIERPV05TVFJFQU0pOwogCiAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vdmVUbyh2
aXNpYmxlQmFzZSwgdmlzaWJsZUV4dGVudCk7CiB9CkBAIC0yODYsNyArMjg2LDcgQEAgdm9pZCBE
T01TZWxlY3Rpb246OnNldFBvc2l0aW9uKE5vZGUqIG5vZAogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBGSVhNRTogRWxpbWluYXRlIGxlZ2FjeSBlZGl0aW5nIHBvc2l0aW9ucwotICAgIG1fZnJh
bWUtPnNlbGVjdGlvbigpLT5tb3ZlVG8oVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIG9m
ZnNldCksIERPV05TVFJFQU0pKTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW92ZVRvKFZp
c2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwgb2Zmc2V0KSwg
RE9XTlNUUkVBTSkpOwogfQogCiB2b2lkIERPTVNlbGVjdGlvbjo6bW9kaWZ5KGNvbnN0IFN0cmlu
ZyYgYWx0ZXJTdHJpbmcsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGdyYW51bGFyaXR5U3RyaW5nKQpAQCAtMzYwLDcgKzM2MCw3IEBAIHZvaWQgRE9NU2VsZWN0
aW9uOjpleHRlbmQoTm9kZSogbm9kZSwgaW4KICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklY
TUU6IEVsaW1pbmF0ZSBsZWdhY3kgZWRpdGluZyBwb3NpdGlvbnMKLSAgICBtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS0+c2V0RXh0ZW50KFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQp
LCBET1dOU1RSRUFNKSk7CisgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnNldEV4dGVudChWaXNp
YmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIG9mZnNldCksIERP
V05TVFJFQU0pKTsKIH0KIAogUGFzc1JlZlB0cjxSYW5nZT4gRE9NU2VsZWN0aW9uOjpnZXRSYW5n
ZUF0KGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDg5MzAyKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA5MCwxMyAr
NDA5MCwxMyBAQCBQb3NpdGlvbiBSZW5kZXJCbG9jazo6cG9zaXRpb25Gb3JCb3goSW5sCiAgICAg
ICAgIHJldHVybiBQb3NpdGlvbigpOwogCiAgICAgaWYgKCFib3gtPnJlbmRlcmVyKCktPm5vZGUo
KSkKLSAgICAgICAgcmV0dXJuIFBvc2l0aW9uKG5vZGUoKSwgc3RhcnQgPyBjYXJldE1pbk9mZnNl
dCgpIDogY2FyZXRNYXhPZmZzZXQoKSk7CisgICAgICAgIHJldHVybiBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24obm9kZSgpLCBzdGFydCA/IGNhcmV0TWluT2Zmc2V0KCkgOiBjYXJldE1heE9m
ZnNldCgpKTsKIAogICAgIGlmICghYm94LT5pc0lubGluZVRleHRCb3goKSkKLSAgICAgICAgcmV0
dXJuIFBvc2l0aW9uKGJveC0+cmVuZGVyZXIoKS0+bm9kZSgpLCBzdGFydCA/IGJveC0+cmVuZGVy
ZXIoKS0+Y2FyZXRNaW5PZmZzZXQoKSA6IGJveC0+cmVuZGVyZXIoKS0+Y2FyZXRNYXhPZmZzZXQo
KSk7CisgICAgICAgIHJldHVybiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oYm94LT5yZW5k
ZXJlcigpLT5ub2RlKCksIHN0YXJ0ID8gYm94LT5yZW5kZXJlcigpLT5jYXJldE1pbk9mZnNldCgp
IDogYm94LT5yZW5kZXJlcigpLT5jYXJldE1heE9mZnNldCgpKTsKIAogICAgIElubGluZVRleHRC
b3ggKnRleHRCb3ggPSBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94ICo+KGJveCk7Ci0gICAgcmV0
dXJuIFBvc2l0aW9uKGJveC0+cmVuZGVyZXIoKS0+bm9kZSgpLCBzdGFydCA/IHRleHRCb3gtPnN0
YXJ0KCkgOiB0ZXh0Qm94LT5zdGFydCgpICsgdGV4dEJveC0+bGVuKCkpOworICAgIHJldHVybiBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oYm94LT5yZW5kZXJlcigpLT5ub2RlKCksIHN0YXJ0
ID8gdGV4dEJveC0+c3RhcnQoKSA6IHRleHRCb3gtPnN0YXJ0KCkgKyB0ZXh0Qm94LT5sZW4oKSk7
CiB9CiAKIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBnbyBvbiBSZW5kZXJPYmplY3Qg
YXMgYW4gaW5zdGFuY2UgbWV0aG9kLiBUaGVuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAkocmV2aXNpb24gODkzMDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA5Nyw3ICszMDk3LDcgQEAgVmlz
aWJsZVBvc2l0aW9uIFJlbmRlckJveDo6cG9zaXRpb25Gb3JQbwogewogICAgIC8vIG5vIGNoaWxk
cmVuLi4ucmV0dXJuIHRoaXMgcmVuZGVyIG9iamVjdCdzIGVsZW1lbnQsIGlmIHRoZXJlIGlzIG9u
ZSwgYW5kIG9mZnNldCAwCiAgICAgaWYgKCFmaXJzdENoaWxkKCkpCi0gICAgICAgIHJldHVybiBj
cmVhdGVWaXNpYmxlUG9zaXRpb24obm9kZSgpID8gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2Rl
KG5vZGUoKSkgOiBQb3NpdGlvbigwLCAwKSk7CisgICAgICAgIHJldHVybiBjcmVhdGVWaXNpYmxl
UG9zaXRpb24obm9kZSgpID8gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUoKSkgOiBQ
b3NpdGlvbigpKTsKIAogICAgIGludCB4UG9zID0gcG9pbnQueCgpOwogICAgIGludCB5UG9zID0g
cG9pbnQueSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAJKHJldmlzaW9uIDg5MzAyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MjAsNyArMjUyMCw3IEBAIFZpc2libGVQb3Np
dGlvbiBSZW5kZXJPYmplY3Q6OmNyZWF0ZVZpc2kKICAgICBpZiAoTm9kZSogbm9kZSA9IHRoaXMt
Pm5vZGUoKSkgewogICAgICAgICBpZiAoIW5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKSB7CiAg
ICAgICAgICAgICAvLyBJZiBpdCBjYW4gYmUgZm91bmQsIHdlIHByZWZlciBhIHZpc3VhbGx5IGVx
dWl2YWxlbnQgcG9zaXRpb24gdGhhdCBpcyBlZGl0YWJsZS4gCi0gICAgICAgICAgICBQb3NpdGlv
biBwb3NpdGlvbihub2RlLCBvZmZzZXQpOworICAgICAgICAgICAgUG9zaXRpb24gcG9zaXRpb24g
PSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwgb2Zmc2V0KTsKICAgICAgICAgICAg
IFBvc2l0aW9uIGNhbmRpZGF0ZSA9IHBvc2l0aW9uLmRvd25zdHJlYW0oQ2FuQ3Jvc3NFZGl0aW5n
Qm91bmRhcnkpOwogICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS5kZXByZWNhdGVkTm9kZSgpLT5y
ZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKGNhbmRpZGF0ZSwgYWZmaW5pdHkpOwpAQCAtMjUyOSw3ICsyNTI5LDcgQEAgVmlzaWJsZVBv
c2l0aW9uIFJlbmRlck9iamVjdDo6Y3JlYXRlVmlzaQogICAgICAgICAgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oY2FuZGlkYXRlLCBhZmZpbml0eSk7CiAgICAgICAgIH0KICAgICAgICAg
Ly8gRklYTUU6IEVsaW1pbmF0ZSBsZWdhY3kgZWRpdGluZyBwb3NpdGlvbnMKLSAgICAgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQpLCBhZmZpbml0eSk7Cisg
ICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KG5vZGUsIG9mZnNldCksIGFmZmluaXR5KTsKICAgICB9CiAKICAgICAvLyBXZSBkb24ndCB3YW50
IHRvIGNyb3NzIHRoZSBib3VuZGFyeSBiZXR3ZWVuIGVkaXRhYmxlIGFuZCBub24tZWRpdGFibGUK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDg5MzMyKQorKysgU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDYtMjAg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBpbnN0YW50aWF0aW9uIG9mIGxlZ2FjeSBl
ZGl0aW5nIHBvc2l0aW9uIG1vcmUgZXhwbGljaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTYzMDM3CisKKyAgICAgICAgQ3JlYXRlIG5ldyBwb3NpdGlv
bnMgc2luY2Ugd2UgY2FuJ3QgY3JlYXRlIGEgbGVnYWN5IGVkaXRpbmcgcG9zaXRpb24gb3V0c2lk
ZSBvZiBXZWJDb3JlIGFueW1vcmUuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgor
ICAgICAgICAoLVtXZWJGcmFtZSBfc21hcnREZWxldGVSYW5nZUZvclByb3Bvc2VkUmFuZ2U6XSk6
IENhbGxzIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbi4KKyAgICAgICAgKC1bV2ViRnJhbWUg
X3NtYXJ0SW5zZXJ0Rm9yU3RyaW5nOnJlcGxhY2luZ1JhbmdlOmJlZm9yZVN0cmluZzphZnRlclN0
cmluZzpdKTogRGl0dG8uCisKIDIwMTEtMDYtMDEgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uLgpJbmRleDogU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZpc2lvbiA4OTMwMikKKysrIFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTc0MCw4ICs3
NDAsOCBAQCAtIChET01SYW5nZSAqKV9zbWFydERlbGV0ZVJhbmdlRm9yUHJvcG9zCiAgICAgCiAg
ICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBQb3NpdGlvbiBzdGFydChzdGFydENvbnRhaW5lciwg
W3Byb3Bvc2VkUmFuZ2Ugc3RhcnRPZmZzZXRdKTsKLSAgICBQb3NpdGlvbiBlbmQoZW5kQ29udGFp
bmVyLCBbcHJvcG9zZWRSYW5nZSBlbmRPZmZzZXRdKTsKKyAgICBQb3NpdGlvbiBzdGFydCA9IFBv
c2l0aW9uKHN0YXJ0Q29udGFpbmVyLCBbcHJvcG9zZWRSYW5nZSBzdGFydE9mZnNldF0sIFBvc2l0
aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAgIFBvc2l0aW9uIGVuZCA9IFBvc2l0
aW9uKGVuZENvbnRhaW5lciwgW3Byb3Bvc2VkUmFuZ2UgZW5kT2Zmc2V0XSwgUG9zaXRpb246OlBv
c2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7CiAgICAgUG9zaXRpb24gbmV3U3RhcnQgPSBzdGFydC51
cHN0cmVhbSgpLmxlYWRpbmdXaGl0ZXNwYWNlUG9zaXRpb24oRE9XTlNUUkVBTSwgdHJ1ZSk7CiAg
ICAgaWYgKG5ld1N0YXJ0LmlzTnVsbCgpKQogICAgICAgICBuZXdTdGFydCA9IHN0YXJ0OwpAQCAt
MTEwNCw4ICsxMTA0LDggQEAgLSAodm9pZClfc21hcnRJbnNlcnRGb3JTdHJpbmc6KE5TU3RyaW5n
IAogICAgIE5vZGUgKnN0YXJ0Q29udGFpbmVyID0gY29yZShbcmFuZ2VUb1JlcGxhY2Ugc3RhcnRD
b250YWluZXJdKTsKICAgICBOb2RlICplbmRDb250YWluZXIgPSBjb3JlKFtyYW5nZVRvUmVwbGFj
ZSBlbmRDb250YWluZXJdKTsKIAotICAgIFBvc2l0aW9uIHN0YXJ0UG9zKHN0YXJ0Q29udGFpbmVy
LCBbcmFuZ2VUb1JlcGxhY2Ugc3RhcnRPZmZzZXRdKTsKLSAgICBQb3NpdGlvbiBlbmRQb3MoZW5k
Q29udGFpbmVyLCBbcmFuZ2VUb1JlcGxhY2UgZW5kT2Zmc2V0XSk7CisgICAgUG9zaXRpb24gc3Rh
cnRQb3Moc3RhcnRDb250YWluZXIsIFtyYW5nZVRvUmVwbGFjZSBzdGFydE9mZnNldF0sIFBvc2l0
aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAgIFBvc2l0aW9uIGVuZFBvcyhlbmRD
b250YWluZXIsIFtyYW5nZVRvUmVwbGFjZSBlbmRPZmZzZXRdLCBQb3NpdGlvbjo6UG9zaXRpb25J
c09mZnNldEluQW5jaG9yKTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3Mg
PSBWaXNpYmxlUG9zaXRpb24oc3RhcnRQb3MsIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwogICAgIFZp
c2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zID0gVmlzaWJsZVBvc2l0aW9uKGVuZFBvcywgVlBf
REVGQVVMVF9BRkZJTklUWSk7Cg==
</data>
<flag name="review"
          id="92110"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>