<?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>55005</bug_id>
          
          <creation_ts>2011-02-22 15:22:02 -0800</creation_ts>
          <short_desc>SegmentedString operator= always causes a malloc</short_desc>
          <delta_ts>2013-03-07 04:44:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>LATER</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>
          <dependson>55032</dependson>
          <blocked>48719</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>aestes</cc>
    
    <cc>darin</cc>
    
    <cc>mjs</cc>
    
    <cc>sam</cc>
    
    <cc>tonyg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>355647</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-22 15:22:02 -0800</bug_when>
    <thetext>SegmentedString operator= always causes a malloc

This is slowing down parsing due to:

#0	0x1007beb91 in WTF::fastMalloc at FastMalloc.cpp:3835
#1	0x10184fd29 in VectorBuffer [inlined] at Vector.h:288
#2	0x10184fd29 in VectorBuffer [inlined] at Vector.h:311
#3	0x10184fd29 in Deque [inlined] at Vector.h:363
#4	0x10184fd29 in Deque [inlined] at Deque.h:337
#5	0x10184fd29 in WTF::Deque&lt;WebCore::SegmentedSubstring&gt;::operator= at Deque.h:321
#6	0x10184fd29 in WebCore::SegmentedString::operator= at Vector.h:3835
#7	0x101176a8c in WebCore::SegmentedString::numberOfCharactersConsumed at SegmentedString.h:38
#8	0x101176a8c in WebCore::HTMLSourceTracker::start at HTMLSourceTracker.cpp:3835

The root of the problem seems to be that SegmentedString uses a Deque (m_substrings) which uses a Vector with inlineCapacity=0.

I&apos;m investigating making that inlineCapacity=1 and see if the malloc goes away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355651</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-22 15:24:50 -0800</bug_when>
    <thetext>That backtrace is slightly off (we don&apos;t go through numberOfCharactersConsumed) due to it being a release build.  But the rest is close enough for you to see the point.  Anytime someone does:

m_segString = otherSegString

we do a malloc.  Which authors don&apos;t always seem to realize (certainly abarth didn&apos;t when writing HTMLSourceTracker::start)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355661</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-22 15:50:21 -0800</bug_when>
    <thetext>Entertainingly, changing the Buffer in Deque.h to default to inlineCapacity=1 instead of 0 (and rebuilding WebKit) just causes all loads to hang.  (I changed all Deque&apos;s to use inlineCapacity=1 on their Buffer to see if that would fix my malloc trouble, w/o me having to plumb inlineCapacity support all the way through Deque out to where SegmentedString could specify an inlineCapacity.)

WebKit seems to sit there idle.  The only thread with anything interesting on it, is the IconDatabase thread waiting to sync to the main.  All others are just sitting in the runloop.

I suspect that some use of a Deque&apos;d object has a side effect of its empty constructor or some such.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355732</commentid>
    <comment_count>3</comment_count>
      <attachid>83421</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-22 17:40:00 -0800</bug_when>
    <thetext>Created attachment 83421
attempt, breaks browsing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355736</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-22 17:43:10 -0800</bug_when>
    <thetext>The attached patch breaks browsing (pages will sometimes fail to load correctly).  It&apos;s unclear why.  Maybe I plumbed the inlineCapacity stuff incorrectly.  It&apos;s also not clear to me if I should have been adding inlineCapacity as a template argument for the Iterators or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355738</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-22 17:47:47 -0800</bug_when>
    <thetext>I suspect that the Deque code needs to be taught more about the case where it has inlineCapacity.  But maybe VectorBuffer is supposed to abstract all that away?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355922</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-23 00:53:09 -0800</bug_when>
    <thetext>It turns out our Deque implementation just doesn&apos;t work with capacity=1.  It silently fails.  I&apos;ve added an ASSERT to document that and fixed the patch to use capacity 2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355957</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-23 02:28:10 -0800</bug_when>
    <thetext>Changing to capacity 2 makes the patch work, but it&apos;s actually *slower*.  I think much of that may be due to Deque::operator= doing more work than it needs to.  I&apos;m still experimenting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355965</commentid>
    <comment_count>8</comment_count>
      <attachid>83462</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-23 02:52:14 -0800</bug_when>
    <thetext>Created attachment 83462
works, i&apos;m not sure it&apos;s better</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355989</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-23 03:34:32 -0800</bug_when>
    <thetext>I think I&apos;ll post the inlineCapacity support separately and get that landed.  Then we can look at the actual details for converting SegmentedString to use it or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356003</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-23 03:52:34 -0800</bug_when>
    <thetext>OK.  I&apos;ve posted the inlineCapacity support patch on bug 55032 and will deal with actually using it or not (as well as possibly improving Deque&lt;T&gt;::operator=) in a separate patch on this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356476</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-23 15:16:45 -0800</bug_when>
    <thetext>This is likely not necessary after bug 55091 and bug 55032.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356477</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-23 15:17:34 -0800</bug_when>
    <thetext>Oh, I also did some of the cleanup I suggested in FIXMEs in this patch as part of bug 55083.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849967</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-07 04:44:34 -0800</bug_when>
    <thetext>We appear to have a new variant of this in bug 111708.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83421</attachid>
            <date>2011-02-22 17:40:00 -0800</date>
            <delta_ts>2011-02-23 02:52:11 -0800</delta_ts>
            <desc>attempt, breaks browsing</desc>
            <filename>bug-55005-20110222173959.patch</filename>
            <type>text/plain</type>
            <size>28025</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzkzNzMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGUw
Yjk3MTc4YjU5OWY1YjQ3ZTY3OGNiZTZjY2UxNTdjNWE5ODg2YjAuLmJmMGExMzhmZmY4YTE1Yjg0
MjlhZmZlNmExM2UyZjE3Y2QyZjFiMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQ2IEBACisyMDExLTAyLTIyICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZWdtZW50ZWRT
dHJpbmcgb3BlcmF0b3I9IGFsd2F5cyBjYXVzZXMgYSBtYWxsb2MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1MDA1CisKKyAgICAgICAgTWFrZSBpdCBw
b3NzaWJsZSB0byBzcGVjaWZ5IGFuIGlubGluZUNhcGFjaXR5IGZvciBhIERlcXVlLgorCisgICAg
ICAgICogd3RmL0RlcXVlLmg6CisgICAgICAgIChXVEY6OkRlcXVlSXRlcmF0b3I6OkRlcXVlSXRl
cmF0b3IpOgorICAgICAgICAoV1RGOjpEZXF1ZUNvbnN0SXRlcmF0b3I6OkRlcXVlQ29uc3RJdGVy
YXRvcik6CisgICAgICAgIChXVEY6OkRlcXVlUmV2ZXJzZUl0ZXJhdG9yOjpEZXF1ZVJldmVyc2VJ
dGVyYXRvcik6CisgICAgICAgIChXVEY6OkRlcXVlQ29uc3RSZXZlcnNlSXRlcmF0b3I6OkRlcXVl
Q29uc3RSZXZlcnNlSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjo6OmNoZWNrVmFsaWRpdHkpOgor
ICAgICAgICAoV1RGOjo6OmNoZWNrSW5kZXhWYWxpZGl0eSk6CisgICAgICAgIChXVEY6Ojo6aW52
YWxpZGF0ZUl0ZXJhdG9ycyk6CisgICAgICAgIChXVEY6Ojo6RGVxdWUpOgorICAgICAgICAoV1RG
OjpkZWxldGVBbGxWYWx1ZXMpOgorICAgICAgICAoV1RGOjo6Om9wZXJhdG9yKToKKyAgICAgICAg
KFdURjo6OjpkZXN0cm95QWxsKToKKyAgICAgICAgKFdURjo6Ojp+RGVxdWUpOgorICAgICAgICAo
V1RGOjo6OnN3YXApOgorICAgICAgICAoV1RGOjo6OmNsZWFyKToKKyAgICAgICAgKFdURjo6Ojpm
aW5kSWYpOgorICAgICAgICAoV1RGOjo6OmV4cGFuZENhcGFjaXR5SWZOZWVkZWQpOgorICAgICAg
ICAoV1RGOjo6OmV4cGFuZENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6Ojp0YWtlRmlyc3QpOgor
ICAgICAgICAoV1RGOjo6OmFwcGVuZCk6CisgICAgICAgIChXVEY6Ojo6cHJlcGVuZCk6CisgICAg
ICAgIChXVEY6Ojo6cmVtb3ZlRmlyc3QpOgorICAgICAgICAoV1RGOjo6OnJlbW92ZSk6CisgICAg
ICAgIChXVEY6Ojo6YWRkVG9JdGVyYXRvcnNMaXN0KToKKyAgICAgICAgKFdURjo6OjpyZW1vdmVG
cm9tSXRlcmF0b3JzTGlzdCk6CisgICAgICAgIChXVEY6Ojo6RGVxdWVJdGVyYXRvckJhc2UpOgor
ICAgICAgICAoV1RGOjo6On5EZXF1ZUl0ZXJhdG9yQmFzZSk6CisgICAgICAgIChXVEY6Ojo6aXNF
cXVhbCk6CisgICAgICAgIChXVEY6Ojo6aW5jcmVtZW50KToKKyAgICAgICAgKFdURjo6OjpkZWNy
ZW1lbnQpOgorICAgICAgICAoV1RGOjo6OmFmdGVyKToKKyAgICAgICAgKFdURjo6OjpiZWZvcmUp
OgorICAgICAgICAqIHd0Zi9WZWN0b3IuaDoKKwogMjAxMS0wMi0yMiAgR2VvZmZyZXkgR2FyZW4g
IDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZXF1ZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9EZXF1ZS5oCmluZGV4IDFiMTZhZmNlOTdiZjkwYjBiYzMxYTg0ZDRm
ZTkyNzIyNDNlYzFjNWEuLjVlMWIxMjRhNDRlNmNlZDEwMjVmMmUzMDI5Nzg0YjE5NmQwMTUyMTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGVxdWUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL0RlcXVlLmgKQEAgLTM3LDI3ICszNywyNyBAQAogCiBuYW1l
c3BhY2UgV1RGIHsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIERlcXVlSXRlcmF0
b3JCYXNlOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIERlcXVlSXRlcmF0b3I7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgRGVxdWVDb25zdEl0ZXJhdG9yOwotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIERlcXVlUmV2ZXJzZUl0ZXJhdG9yOwotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNsYXNzIERlcXVlQ29uc3RSZXZlcnNlSXRlcmF0b3I7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBjbGFzcyBEZXF1ZUl0ZXJh
dG9yQmFzZTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+
IGNsYXNzIERlcXVlSXRlcmF0b3I7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5PiBjbGFzcyBEZXF1ZUNvbnN0SXRlcmF0b3I7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBjbGFzcyBEZXF1ZVJldmVyc2VJdGVyYXRv
cjsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGNsYXNz
IERlcXVlQ29uc3RSZXZlcnNlSXRlcmF0b3I7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT0wPgogICAgIGNs
YXNzIERlcXVlIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGlj
OgotICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3I8VD4gaXRlcmF0b3I7Ci0gICAgICAgIHR5
cGVkZWYgRGVxdWVDb25zdEl0ZXJhdG9yPFQ+IGNvbnN0X2l0ZXJhdG9yOwotICAgICAgICB0eXBl
ZGVmIERlcXVlUmV2ZXJzZUl0ZXJhdG9yPFQ+IHJldmVyc2VfaXRlcmF0b3I7Ci0gICAgICAgIHR5
cGVkZWYgRGVxdWVDb25zdFJldmVyc2VJdGVyYXRvcjxUPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
OworICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IGl0ZXJh
dG9yOworICAgICAgICB0eXBlZGVmIERlcXVlQ29uc3RJdGVyYXRvcjxULCBpbmxpbmVDYXBhY2l0
eT4gY29uc3RfaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgRGVxdWVSZXZlcnNlSXRlcmF0b3I8
VCwgaW5saW5lQ2FwYWNpdHk+IHJldmVyc2VfaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgRGVx
dWVDb25zdFJldmVyc2VJdGVyYXRvcjxULCBpbmxpbmVDYXBhY2l0eT4gY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcjsKIAogICAgICAgICBEZXF1ZSgpOwotICAgICAgICBEZXF1ZShjb25zdCBEZXF1ZTxU
PiYpOwotICAgICAgICBEZXF1ZSYgb3BlcmF0b3I9KGNvbnN0IERlcXVlPFQ+Jik7CisgICAgICAg
IERlcXVlKGNvbnN0IERlcXVlPFQsIGlubGluZUNhcGFjaXR5PiYpOworICAgICAgICBEZXF1ZSYg
b3BlcmF0b3I9KGNvbnN0IERlcXVlPFQsIGlubGluZUNhcGFjaXR5PiYpOwogICAgICAgICB+RGVx
dWUoKTsKIAotICAgICAgICB2b2lkIHN3YXAoRGVxdWU8VD4mKTsKKyAgICAgICAgdm9pZCBzd2Fw
KERlcXVlPFQsIGlubGluZUNhcGFjaXR5PiYpOwogCiAgICAgICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zdGFydCA8PSBtX2VuZCA/IG1fZW5kIC0gbV9zdGFydCA6IG1fZW5kICsg
bV9idWZmZXIuY2FwYWNpdHkoKSAtIG1fc3RhcnQ7IH0KICAgICAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbV9zdGFydCA9PSBtX2VuZDsgfQpAQCAtODcsMTEgKzg3LDExIEBAIG5h
bWVzcGFjZSBXVEYgewogICAgICAgICBpdGVyYXRvciBmaW5kSWYoUHJlZGljYXRlJik7CiAKICAg
ICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgRGVxdWVJdGVyYXRvckJhc2U8VD47Cisg
ICAgICAgIGZyaWVuZCBjbGFzcyBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT47
CiAKLSAgICAgICAgdHlwZWRlZiBWZWN0b3JCdWZmZXI8VCwgMD4gQnVmZmVyOworICAgICAgICB0
eXBlZGVmIFZlY3RvckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eT4gQnVmZmVyOwogICAgICAgICB0
eXBlZGVmIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+IFR5cGVPcGVyYXRpb25zOwotICAgICAgICB0
eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQ+IEl0ZXJhdG9yQmFzZTsKKyAgICAgICAgdHlwZWRl
ZiBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT4gSXRlcmF0b3JCYXNlOwogCiAg
ICAgICAgIHZvaWQgcmVtb3ZlKHNpemVfdCBwb3NpdGlvbik7CiAgICAgICAgIHZvaWQgaW52YWxp
ZGF0ZUl0ZXJhdG9ycygpOwpAQCAtMTA5LDE0ICsxMDksMTQgQEAgbmFtZXNwYWNlIFdURiB7CiAj
ZW5kaWYKICAgICB9OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk9MD4KICAgICBjbGFzcyBEZXF1ZUl0ZXJh
dG9yQmFzZSB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yQmFz
ZTxUPiBCYXNlOworICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNh
cGFjaXR5PiBCYXNlOwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBEZXF1ZUl0ZXJhdG9yQmFz
ZSgpOwotICAgICAgICBEZXF1ZUl0ZXJhdG9yQmFzZShjb25zdCBEZXF1ZTxUPiosIHNpemVfdCk7
CisgICAgICAgIERlcXVlSXRlcmF0b3JCYXNlKGNvbnN0IERlcXVlPFQsIGlubGluZUNhcGFjaXR5
PiosIHNpemVfdCk7CiAgICAgICAgIERlcXVlSXRlcmF0b3JCYXNlKGNvbnN0IEJhc2UmKTsKICAg
ICAgICAgQmFzZSYgb3BlcmF0b3I9KGNvbnN0IEJhc2UmKTsKICAgICAgICAgfkRlcXVlSXRlcmF0
b3JCYXNlKCk7CkBAIC0xMzcsMTAgKzEzNywxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAg
dm9pZCBjaGVja1ZhbGlkaXR5KCkgY29uc3Q7CiAgICAgICAgIHZvaWQgY2hlY2tWYWxpZGl0eShj
b25zdCBCYXNlJikgY29uc3Q7CiAKLSAgICAgICAgRGVxdWU8VD4qIG1fZGVxdWU7CisgICAgICAg
IERlcXVlPFQsIGlubGluZUNhcGFjaXR5PiogbV9kZXF1ZTsKICAgICAgICAgc2l6ZV90IG1faW5k
ZXg7CiAKLSAgICAgICAgZnJpZW5kIGNsYXNzIERlcXVlPFQ+OworICAgICAgICBmcmllbmQgY2xh
c3MgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OwogCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBt
dXRhYmxlIERlcXVlSXRlcmF0b3JCYXNlKiBtX25leHQ7CkBAIC0xNDgsMTQgKzE0OCwxNCBAQCBu
YW1lc3BhY2UgV1RGIHsKICNlbmRpZgogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotICAgIGNsYXNzIERlcXVlSXRlcmF0b3IgOiBwdWJsaWMgRGVxdWVJdGVyYXRvckJhc2U8VD4g
eworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT0wPgorICAg
IGNsYXNzIERlcXVlSXRlcmF0b3IgOiBwdWJsaWMgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5l
Q2FwYWNpdHk+IHsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JC
YXNlPFQ+IEJhc2U7Ci0gICAgICAgIHR5cGVkZWYgRGVxdWVJdGVyYXRvcjxUPiBJdGVyYXRvcjsK
KyAgICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT4gQmFz
ZTsKKyAgICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yPFQsIGlubGluZUNhcGFjaXR5PiBJdGVy
YXRvcjsKIAogICAgIHB1YmxpYzoKLSAgICAgICAgRGVxdWVJdGVyYXRvcihEZXF1ZTxUPiogZGVx
dWUsIHNpemVfdCBpbmRleCkgOiBCYXNlKGRlcXVlLCBpbmRleCkgeyB9CisgICAgICAgIERlcXVl
SXRlcmF0b3IoRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+KiBkZXF1ZSwgc2l6ZV90IGluZGV4KSA6
IEJhc2UoZGVxdWUsIGluZGV4KSB7IH0KIAogICAgICAgICBEZXF1ZUl0ZXJhdG9yKGNvbnN0IEl0
ZXJhdG9yJiBvdGhlcikgOiBCYXNlKG90aGVyKSB7IH0KICAgICAgICAgRGVxdWVJdGVyYXRvciYg
b3BlcmF0b3I9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgeyBCYXNlOjphc3NpZ24ob3RoZXIpOyBy
ZXR1cm4gKnRoaXM7IH0KQEAgLTE3MiwxNSArMTcyLDE1IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICAvLyBwb3N0Zml4IC0tIGludGVudGlvbmFsbHkgb21pdHRlZAogICAgIH07CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGNsYXNzIERlcXVlQ29uc3RJdGVyYXRvciA6IHB1Ymxp
YyBEZXF1ZUl0ZXJhdG9yQmFzZTxUPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PTA+CisgICAgY2xhc3MgRGVxdWVDb25zdEl0ZXJhdG9yIDogcHVibGlj
IERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiB7CiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yQmFzZTxUPiBCYXNlOwotICAgICAgICB0eXBlZGVm
IERlcXVlQ29uc3RJdGVyYXRvcjxUPiBJdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBEZXF1ZUl0
ZXJhdG9yPFQ+IE5vbkNvbnN0SXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgRGVxdWVJdGVyYXRv
ckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+IEJhc2U7CisgICAgICAgIHR5cGVkZWYgRGVxdWVDb25z
dEl0ZXJhdG9yPFQsIGlubGluZUNhcGFjaXR5PiBJdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBE
ZXF1ZUl0ZXJhdG9yPFQsIGlubGluZUNhcGFjaXR5PiBOb25Db25zdEl0ZXJhdG9yOwogCiAgICAg
cHVibGljOgotICAgICAgICBEZXF1ZUNvbnN0SXRlcmF0b3IoY29uc3QgRGVxdWU8VD4qIGRlcXVl
LCBzaXplX3QgaW5kZXgpIDogQmFzZShkZXF1ZSwgaW5kZXgpIHsgfQorICAgICAgICBEZXF1ZUNv
bnN0SXRlcmF0b3IoY29uc3QgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+KiBkZXF1ZSwgc2l6ZV90
IGluZGV4KSA6IEJhc2UoZGVxdWUsIGluZGV4KSB7IH0KIAogICAgICAgICBEZXF1ZUNvbnN0SXRl
cmF0b3IoY29uc3QgSXRlcmF0b3ImIG90aGVyKSA6IEJhc2Uob3RoZXIpIHsgfQogICAgICAgICBE
ZXF1ZUNvbnN0SXRlcmF0b3IoY29uc3QgTm9uQ29uc3RJdGVyYXRvciYgb3RoZXIpIDogQmFzZShv
dGhlcikgeyB9CkBAIC0xOTksMTQgKzE5OSwxNCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAg
Ly8gcG9zdGZpeCAtLSBpbnRlbnRpb25hbGx5IG9taXR0ZWQKICAgICB9OwogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLSAgICBjbGFzcyBEZXF1ZVJldmVyc2VJdGVyYXRvciA6IHB1YmxpYyBE
ZXF1ZUl0ZXJhdG9yQmFzZTxUPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5PTA+CisgICAgY2xhc3MgRGVxdWVSZXZlcnNlSXRlcmF0b3IgOiBwdWJsaWMg
RGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+IHsKICAgICBwcml2YXRlOgotICAg
ICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQ+IEJhc2U7Ci0gICAgICAgIHR5cGVkZWYg
RGVxdWVSZXZlcnNlSXRlcmF0b3I8VD4gSXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgRGVxdWVJ
dGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+IEJhc2U7CisgICAgICAgIHR5cGVkZWYgRGVx
dWVSZXZlcnNlSXRlcmF0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IEl0ZXJhdG9yOwogCiAgICAgcHVi
bGljOgotICAgICAgICBEZXF1ZVJldmVyc2VJdGVyYXRvcihjb25zdCBEZXF1ZTxUPiogZGVxdWUs
IHNpemVfdCBpbmRleCkgOiBCYXNlKGRlcXVlLCBpbmRleCkgeyB9CisgICAgICAgIERlcXVlUmV2
ZXJzZUl0ZXJhdG9yKGNvbnN0IERlcXVlPFQsIGlubGluZUNhcGFjaXR5PiogZGVxdWUsIHNpemVf
dCBpbmRleCkgOiBCYXNlKGRlcXVlLCBpbmRleCkgeyB9CiAKICAgICAgICAgRGVxdWVSZXZlcnNl
SXRlcmF0b3IoY29uc3QgSXRlcmF0b3ImIG90aGVyKSA6IEJhc2Uob3RoZXIpIHsgfQogICAgICAg
ICBEZXF1ZVJldmVyc2VJdGVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikg
eyBCYXNlOjphc3NpZ24ob3RoZXIpOyByZXR1cm4gKnRoaXM7IH0KQEAgLTIyMywxNSArMjIzLDE1
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAvLyBwb3N0Zml4IC0tIGludGVudGlvbmFsbHkg
b21pdHRlZAogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGNsYXNzIERl
cXVlQ29uc3RSZXZlcnNlSXRlcmF0b3IgOiBwdWJsaWMgRGVxdWVJdGVyYXRvckJhc2U8VD4gewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT0wPgorICAgIGNs
YXNzIERlcXVlQ29uc3RSZXZlcnNlSXRlcmF0b3IgOiBwdWJsaWMgRGVxdWVJdGVyYXRvckJhc2U8
VCwgaW5saW5lQ2FwYWNpdHk+IHsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIERlcXVl
SXRlcmF0b3JCYXNlPFQ+IEJhc2U7Ci0gICAgICAgIHR5cGVkZWYgRGVxdWVDb25zdFJldmVyc2VJ
dGVyYXRvcjxUPiBJdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBEZXF1ZVJldmVyc2VJdGVyYXRv
cjxUPiBOb25Db25zdEl0ZXJhdG9yOworICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNl
PFQsIGlubGluZUNhcGFjaXR5PiBCYXNlOworICAgICAgICB0eXBlZGVmIERlcXVlQ29uc3RSZXZl
cnNlSXRlcmF0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IEl0ZXJhdG9yOworICAgICAgICB0eXBlZGVm
IERlcXVlUmV2ZXJzZUl0ZXJhdG9yPFQsIGlubGluZUNhcGFjaXR5PiBOb25Db25zdEl0ZXJhdG9y
OwogCiAgICAgcHVibGljOgotICAgICAgICBEZXF1ZUNvbnN0UmV2ZXJzZUl0ZXJhdG9yKGNvbnN0
IERlcXVlPFQ+KiBkZXF1ZSwgc2l6ZV90IGluZGV4KSA6IEJhc2UoZGVxdWUsIGluZGV4KSB7IH0K
KyAgICAgICAgRGVxdWVDb25zdFJldmVyc2VJdGVyYXRvcihjb25zdCBEZXF1ZTxULCBpbmxpbmVD
YXBhY2l0eT4qIGRlcXVlLCBzaXplX3QgaW5kZXgpIDogQmFzZShkZXF1ZSwgaW5kZXgpIHsgfQog
CiAgICAgICAgIERlcXVlQ29uc3RSZXZlcnNlSXRlcmF0b3IoY29uc3QgSXRlcmF0b3ImIG90aGVy
KSA6IEJhc2Uob3RoZXIpIHsgfQogICAgICAgICBEZXF1ZUNvbnN0UmV2ZXJzZUl0ZXJhdG9yKGNv
bnN0IE5vbkNvbnN0SXRlcmF0b3ImIG90aGVyKSA6IEJhc2Uob3RoZXIpIHsgfQpAQCAtMjUxLDEy
ICsyNTEsMTIgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfTsKIAogI2lmZGVmIE5ERUJVRwotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERlcXVlPFQ+OjpjaGVja1ZhbGlkaXR5
KCkgY29uc3QgeyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgRGVxdWU8
VD46OmNoZWNrSW5kZXhWYWxpZGl0eShzaXplX3QpIGNvbnN0IHsgfQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSB2b2lkIERlcXVlPFQ+OjppbnZhbGlkYXRlSXRlcmF0b3JzKCkgeyB9
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUg
dm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoKSBjb25zdCB7IH0K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSB2
b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hlY2tJbmRleFZhbGlkaXR5KHNpemVfdCkg
Y29uc3QgeyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
PiBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmludmFsaWRhdGVJdGVyYXRv
cnMoKSB7IH0KICNlbHNlCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIERlcXVl
PFQ+OjpjaGVja1ZhbGlkaXR5KCkgY29uc3QKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmNo
ZWNrVmFsaWRpdHkoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFtX2J1ZmZlci5jYXBhY2l0
eSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIW1fc3RhcnQpOwpAQCAtMjY3LDggKzI2Nyw4IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICB9CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLSAgICB2b2lkIERlcXVlPFQ+OjpjaGVja0luZGV4VmFsaWRpdHkoc2l6ZV90IGluZGV4
KSBjb25zdAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4K
KyAgICB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hlY2tJbmRleFZhbGlkaXR5KHNp
emVfdCBpbmRleCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpbmRleCA8PSBtX2J1ZmZl
ci5jYXBhY2l0eSgpKTsKICAgICAgICAgaWYgKG1fc3RhcnQgPD0gbV9lbmQpIHsKQEAgLTI3OSw4
ICsyNzksOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBEZXF1ZTxUPjo6aW52YWxpZGF0ZUl0ZXJhdG9ycygp
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHZv
aWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjppbnZhbGlkYXRlSXRlcmF0b3JzKCkKICAgICB7
CiAgICAgICAgIEl0ZXJhdG9yQmFzZSogbmV4dDsKICAgICAgICAgZm9yIChJdGVyYXRvckJhc2Uq
IHAgPSBtX2l0ZXJhdG9yczsgcDsgcCA9IG5leHQpIHsKQEAgLTI5Myw4ICsyOTMsOCBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICB9CiAjZW5kaWYKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0g
ICAgaW5saW5lIERlcXVlPFQ+OjpEZXF1ZSgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46
OkRlcXVlKCkKICAgICAgICAgOiBtX3N0YXJ0KDApCiAgICAgICAgICwgbV9lbmQoMCkKICNpZm5k
ZWYgTkRFQlVHCkBAIC0zMDQsOCArMzA0LDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNo
ZWNrVmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlu
bGluZSBEZXF1ZTxUPjo6RGVxdWUoY29uc3QgRGVxdWU8VD4mIG90aGVyKQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgRGVxdWU8VCwg
aW5saW5lQ2FwYWNpdHk+OjpEZXF1ZShjb25zdCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4mIG90
aGVyKQogICAgICAgICA6IG1fc3RhcnQob3RoZXIubV9zdGFydCkKICAgICAgICAgLCBtX2VuZChv
dGhlci5tX2VuZCkKICAgICAgICAgLCBtX2J1ZmZlcihvdGhlci5tX2J1ZmZlci5jYXBhY2l0eSgp
KQpAQCAtMzIyLDI1ICszMjIsMjUgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgZGVsZXRlQWxsVmFsdWVzKGNv
bnN0IERlcXVlPFQ+JiBjb2xsZWN0aW9uKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eT4KKyAgICB2b2lkIGRlbGV0ZUFsbFZhbHVlcyhjb25zdCBEZXF1ZTxU
LCBpbmxpbmVDYXBhY2l0eT4mIGNvbGxlY3Rpb24pCiAgICAgewotICAgICAgICB0eXBlZGVmIHR5
cGVuYW1lIERlcXVlPFQ+Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJh
dG9yOwogICAgICAgICBpdGVyYXRvciBlbmQgPSBjb2xsZWN0aW9uLmVuZCgpOwogICAgICAgICBm
b3IgKGl0ZXJhdG9yIGl0ID0gY29sbGVjdGlvbi5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAg
ICAgICAgICAgICBkZWxldGUgKml0OwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci0gICAgaW5saW5lIERlcXVlPFQ+JiBEZXF1ZTxUPjo6b3BlcmF0b3I9KGNvbnN0IERlcXVlPFQ+
JiBvdGhlcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+
CisgICAgaW5saW5lIERlcXVlPFQsIGlubGluZUNhcGFjaXR5PiYgRGVxdWU8VCwgaW5saW5lQ2Fw
YWNpdHk+OjpvcGVyYXRvcj0oY29uc3QgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+JiBvdGhlcikK
ICAgICB7Ci0gICAgICAgIERlcXVlPFQ+IGNvcHkob3RoZXIpOworICAgICAgICBEZXF1ZTxULCBp
bmxpbmVDYXBhY2l0eT4gY29weShvdGhlcik7CiAgICAgICAgIHN3YXAoY29weSk7CiAgICAgICAg
IHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlu
bGluZSB2b2lkIERlcXVlPFQ+OjpkZXN0cm95QWxsKCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5l
Q2FwYWNpdHk+OjpkZXN0cm95QWxsKCkKICAgICB7CiAgICAgICAgIGlmIChtX3N0YXJ0IDw9IG1f
ZW5kKQogICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KG1fYnVmZmVyLmJ1ZmZl
cigpICsgbV9zdGFydCwgbV9idWZmZXIuYnVmZmVyKCkgKyBtX2VuZCk7CkBAIC0zNTAsMTYgKzM1
MCwxNiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIERlcXVlPFQ+Ojp+RGVxdWUoKQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgRGVxdWU8VCwg
aW5saW5lQ2FwYWNpdHk+Ojp+RGVxdWUoKQogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgp
OwogICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CiAgICAgICAgIGRlc3Ryb3lBbGwoKTsK
ICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSB2b2lkIERlcXVl
PFQ+Ojpzd2FwKERlcXVlPFQ+JiBvdGhlcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNp
dHk+Ojpzd2FwKERlcXVlPFQsIGlubGluZUNhcGFjaXR5PiYgb3RoZXIpCiAgICAgewogICAgICAg
ICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIG90aGVyLmNoZWNrVmFsaWRpdHkoKTsKQEAgLTM3
MSw4ICszNzEsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgb3RoZXIuY2hlY2tWYWxpZGl0
eSgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIHZvaWQg
RGVxdWU8VD46OmNsZWFyKCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHk+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpjbGVh
cigpCiAgICAgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIGludmFsaWRhdGVJ
dGVyYXRvcnMoKTsKQEAgLTM4Miw5ICszODIsOSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAg
Y2hlY2tWYWxpZGl0eSgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFByZWRpY2F0ZT4KLSAgICBpbmxpbmUgRGVxdWVJdGVyYXRvcjxUPiBEZXF1ZTxU
Pjo6ZmluZElmKFByZWRpY2F0ZSYgcHJlZGljYXRlKQorICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9y
PFQsIGlubGluZUNhcGFjaXR5PiBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmZpbmRJZihQcmVk
aWNhdGUmIHByZWRpY2F0ZSkKICAgICB7CiAgICAgICAgIGl0ZXJhdG9yIGVuZF9pdGVyYXRvciA9
IGVuZCgpOwogICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gYmVnaW4oKTsgaXQgIT0gZW5kX2l0
ZXJhdG9yOyArK2l0KSB7CkBAIC0zOTQsOCArMzk0LDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ICAgIHJldHVybiBlbmRfaXRlcmF0b3I7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6ZXhwYW5kQ2FwYWNpdHlJZk5lZWRlZCgpCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIGlubGlu
ZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6ZXhwYW5kQ2FwYWNpdHlJZk5lZWRlZCgp
CiAgICAgewogICAgICAgICBpZiAobV9zdGFydCkgewogICAgICAgICAgICAgaWYgKG1fZW5kICsg
MSAhPSBtX3N0YXJ0KQpAQCAtNDA5LDggKzQwOSw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAg
ICBleHBhbmRDYXBhY2l0eSgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0g
ICAgdm9pZCBEZXF1ZTxUPjo6ZXhwYW5kQ2FwYWNpdHkoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFj
aXR5Pjo6ZXhwYW5kQ2FwYWNpdHkoKQogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwog
ICAgICAgICBzaXplX3Qgb2xkQ2FwYWNpdHkgPSBtX2J1ZmZlci5jYXBhY2l0eSgpOwpAQCAtNDI5
LDE2ICs0MjksMTYgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsK
ICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBUIERlcXVlPFQ+
Ojp0YWtlRmlyc3QoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4KKyAgICBpbmxpbmUgVCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnRha2VGaXJzdCgp
CiAgICAgewogICAgICAgICBUIG9sZEZpcnN0ID0gZmlyc3QoKTsKICAgICAgICAgcmVtb3ZlRmly
c3QoKTsKICAgICAgICAgcmV0dXJuIG9sZEZpcnN0OwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgaW5saW5lIHZvaWQgRGVxdWU8VD46
OmFwcGVuZChjb25zdCBVJiB2YWx1ZSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgaW5saW5lIHZvaWQgRGVx
dWU8VCwgaW5saW5lQ2FwYWNpdHk+OjphcHBlbmQoY29uc3QgVSYgdmFsdWUpCiAgICAgewogICAg
ICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIGV4cGFuZENhcGFjaXR5SWZOZWVkZWQoKTsK
QEAgLTQ1MCw4ICs0NTAsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgY2hlY2tWYWxpZGl0
eSgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1l
IFU+Ci0gICAgaW5saW5lIHZvaWQgRGVxdWU8VD46OnByZXBlbmQoY29uc3QgVSYgdmFsdWUpCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgorICAgIGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6cHJl
cGVuZChjb25zdCBVJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAg
ICAgICAgZXhwYW5kQ2FwYWNpdHlJZk5lZWRlZCgpOwpAQCAtNDYzLDggKzQ2Myw4IEBAIG5hbWVz
cGFjZSBXVEYgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6cmVtb3ZlRmlyc3QoKQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxp
bmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnJlbW92ZUZpcnN0KCkKICAgICB7CiAg
ICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwpA
QCAtNDc3LDIyICs0NzcsMjIgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNrVmFsaWRp
dHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSB2b2lk
IERlcXVlPFQ+OjpyZW1vdmUoaXRlcmF0b3ImIGl0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVD
YXBhY2l0eT46OnJlbW92ZShpdGVyYXRvciYgaXQpCiAgICAgewogICAgICAgICBpdC5jaGVja1Zh
bGlkaXR5KCk7CiAgICAgICAgIHJlbW92ZShpdC5tX2luZGV4KTsKICAgICB9CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSB2b2lkIERlcXVlPFQ+OjpyZW1vdmUoY29uc3Rf
aXRlcmF0b3ImIGl0KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4KKyAgICBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnJlbW92ZShj
b25zdF9pdGVyYXRvciYgaXQpCiAgICAgewogICAgICAgICBpdC5jaGVja1ZhbGlkaXR5KCk7CiAg
ICAgICAgIHJlbW92ZShpdC5tX2luZGV4KTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotICAgIGlubGluZSB2b2lkIERlcXVlPFQ+OjpyZW1vdmUoc2l6ZV90IHBvc2l0aW9uKQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxp
bmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnJlbW92ZShzaXplX3QgcG9zaXRpb24p
CiAgICAgewogICAgICAgICBpZiAocG9zaXRpb24gPT0gbV9lbmQpCiAgICAgICAgICAgICByZXR1
cm47CkBAIC01MTUsMjggKzUxNSwyOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICNpZmRl
ZiBOREVCVUcKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJh
dG9yQmFzZTxUPjo6Y2hlY2tWYWxpZGl0eSgpIGNvbnN0IHsgfQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQ+OjpjaGVja1ZhbGlkaXR5KGNv
bnN0IERlcXVlSXRlcmF0b3JCYXNlPFQ+JikgY29uc3QgeyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VD46OmFkZFRvSXRlcmF0b3JzTGlz
dCgpIHsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0
b3JCYXNlPFQ+OjpyZW1vdmVGcm9tSXRlcmF0b3JzTGlzdCgpIHsgfQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRv
ckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpjaGVja1ZhbGlkaXR5KCkgY29uc3QgeyB9CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgdm9pZCBE
ZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoY29uc3Qg
RGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+JikgY29uc3QgeyB9CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgdm9pZCBEZXF1
ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmFkZFRvSXRlcmF0b3JzTGlzdCgpIHsg
fQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gaW5saW5l
IHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpyZW1vdmVGcm9tSXRl
cmF0b3JzTGlzdCgpIHsgfQogI2Vsc2UKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZv
aWQgRGVxdWVJdGVyYXRvckJhc2U8VD46OmNoZWNrVmFsaWRpdHkoKSBjb25zdAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICB2b2lkIERlcXVlSXRl
cmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hlY2tWYWxpZGl0eSgpIGNvbnN0CiAgICAg
ewogICAgICAgICBBU1NFUlQobV9kZXF1ZSk7CiAgICAgICAgIG1fZGVxdWUtPmNoZWNrSW5kZXhW
YWxpZGl0eShtX2luZGV4KTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAg
IHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VD46OmNoZWNrVmFsaWRpdHkoY29uc3QgQmFzZSYgb3Ro
ZXIpIGNvbnN0CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
PgorICAgIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpjaGVja1Zh
bGlkaXR5KGNvbnN0IEJhc2UmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgY2hlY2tWYWxp
ZGl0eSgpOwogICAgICAgICBvdGhlci5jaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIEFTU0VSVCht
X2RlcXVlID09IG90aGVyLm1fZGVxdWUpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci0gICAgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6YWRkVG9JdGVyYXRvcnNMaXN0KCkK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9p
ZCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmFkZFRvSXRlcmF0b3JzTGlz
dCgpCiAgICAgewogICAgICAgICBpZiAoIW1fZGVxdWUpCiAgICAgICAgICAgICBtX25leHQgPSAw
OwpAQCAtNTQ5LDggKzU0OSw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBtX3ByZXZpb3Vz
ID0gMDsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgRGVxdWVJ
dGVyYXRvckJhc2U8VD46OnJlbW92ZUZyb21JdGVyYXRvcnNMaXN0KCkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9pZCBEZXF1ZUl0ZXJhdG9y
QmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OnJlbW92ZUZyb21JdGVyYXRvcnNMaXN0KCkKICAgICB7
CiAgICAgICAgIGlmICghbV9kZXF1ZSkgewogICAgICAgICAgICAgQVNTRVJUKCFtX25leHQpOwpA
QCAtNTc0LDIzICs1NzQsMjMgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogI2VuZGlmCiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6
RGVxdWVJdGVyYXRvckJhc2UoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNp
dHk+OjpEZXF1ZUl0ZXJhdG9yQmFzZSgpCiAgICAgICAgIDogbV9kZXF1ZSgwKQogICAgIHsKICAg
ICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9y
QmFzZTxUPjo6RGVxdWVJdGVyYXRvckJhc2UoY29uc3QgRGVxdWU8VD4qIGRlcXVlLCBzaXplX3Qg
aW5kZXgpCi0gICAgICAgIDogbV9kZXF1ZShjb25zdF9jYXN0PERlcXVlPFQ+Kj4oZGVxdWUpKQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxp
bmUgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpEZXF1ZUl0ZXJhdG9yQmFz
ZShjb25zdCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4qIGRlcXVlLCBzaXplX3QgaW5kZXgpCisg
ICAgICAgIDogbV9kZXF1ZShjb25zdF9jYXN0PERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pio+KGRl
cXVlKSkKICAgICAgICAgLCBtX2luZGV4KGluZGV4KQogICAgIHsKICAgICAgICAgYWRkVG9JdGVy
YXRvcnNMaXN0KCk7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6RGVxdWVJ
dGVyYXRvckJhc2UoY29uc3QgQmFzZSYgb3RoZXIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBp
bmxpbmVDYXBhY2l0eT46OkRlcXVlSXRlcmF0b3JCYXNlKGNvbnN0IEJhc2UmIG90aGVyKQogICAg
ICAgICA6IG1fZGVxdWUob3RoZXIubV9kZXF1ZSkKICAgICAgICAgLCBtX2luZGV4KG90aGVyLm1f
aW5kZXgpCiAgICAgewpAQCAtNTk4LDggKzU5OCw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAg
ICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAg
ICBpbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VD4mIERlcXVlSXRlcmF0b3JCYXNlPFQ+OjpvcGVy
YXRvcj0oY29uc3QgQmFzZSYgb3RoZXIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVD
YXBhY2l0eT4mIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6b3BlcmF0b3I9
KGNvbnN0IEJhc2UmIG90aGVyKQogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAg
ICAgICBvdGhlci5jaGVja1ZhbGlkaXR5KCk7CkBAIC02MTIsOCArNjEyLDggQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6fkRlcXVlSXRlcmF0b3JC
YXNlKCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cisg
ICAgaW5saW5lIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6fkRlcXVlSXRl
cmF0b3JCYXNlKCkKICAgICB7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICByZW1vdmVGcm9tSXRl
cmF0b3JzTGlzdCgpOwpAQCAtNjIxLDE1ICs2MjEsMTUgQEAgbmFtZXNwYWNlIFdURiB7CiAjZW5k
aWYKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBib29sIERl
cXVlSXRlcmF0b3JCYXNlPFQ+Ojppc0VxdWFsKGNvbnN0IEJhc2UmIG90aGVyKSBjb25zdAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUg
Ym9vbCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmlzRXF1YWwoY29uc3Qg
QmFzZSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICBjaGVja1ZhbGlkaXR5KG90aGVyKTsK
ICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKICAgICB9CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQ+
OjppbmNyZW1lbnQoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4KKyAgICBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0
eT46OmluY3JlbWVudCgpCiAgICAgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAg
IEFTU0VSVChtX2luZGV4ICE9IG1fZGVxdWUtPm1fZW5kKTsKQEAgLTY0MSw4ICs2NDEsOCBAQCBu
YW1lc3BhY2UgV1RGIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgIH0KIAotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VD46
OmRlY3JlbWVudCgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5PgorICAgIGlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5
Pjo6ZGVjcmVtZW50KCkKICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAg
QVNTRVJUKG1faW5kZXggIT0gbV9kZXF1ZS0+bV9zdGFydCk7CkBAIC02NTQsMTYgKzY1NCwxNiBA
QCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgIH0KIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIFQqIERlcXVlSXRlcmF0b3JCYXNlPFQ+
OjphZnRlcigpIGNvbnN0CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5PgorICAgIGlubGluZSBUKiBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0
eT46OmFmdGVyKCkgY29uc3QKICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAg
ICAgQVNTRVJUKG1faW5kZXggIT0gbV9kZXF1ZS0+bV9lbmQpOwogICAgICAgICByZXR1cm4gJm1f
ZGVxdWUtPm1fYnVmZmVyLmJ1ZmZlcigpW21faW5kZXhdOwogICAgIH0KIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIFQqIERlcXVlSXRlcmF0b3JCYXNlPFQ+OjpiZWZvcmUo
KSBjb25zdAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4K
KyAgICBpbmxpbmUgVCogRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpiZWZv
cmUoKSBjb25zdAogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBBU1NF
UlQobV9pbmRleCAhPSBtX2RlcXVlLT5tX3N0YXJ0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvVmVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1ZlY3Rv
ci5oCmluZGV4IDZkOGRkNGMzYTM1MTdiMDVlYTUyMDQ1MmFiMGQxNjcxYzhjZGRhNDMuLjc0ZjBi
NDlmOTNkY2RmMmU0MzRkY2ZmODg1MTIzM2U2OGNjNjdjNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9WZWN0b3IuaApAQCAtMzkyLDYgKzM5Miw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogICAgIGNsYXNzIFZlY3Rv
ckJ1ZmZlciA6IHByaXZhdGUgVmVjdG9yQnVmZmVyQmFzZTxUPiB7CisgICAgICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFZlY3RvckJ1ZmZlcik7CiAgICAgcHJpdmF0ZToKICAgICAgICAgdHlwZWRl
ZiBWZWN0b3JCdWZmZXJCYXNlPFQ+IEJhc2U7CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDQw
YmY2NDMwMGUyOTFhM2IwNWI2NGVkNmIwNjE3NjI0MWRlNzY2ZTMuLmY3NmJjOTg0Zjg4OTg2OGU2
Yzk1M2E4YmUwOWEzNzhlMjc3MDRlYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAx
MS0wMi0yMiAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2VnbWVudGVkU3RyaW5nIG9wZXJhdG9y
PSBhbHdheXMgY2F1c2VzIGEgbWFsbG9jCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01NTAwNQorCisgICAgICAgIFRlc3RlZCBieSBydW5uaW5nIFBlcmZv
cm1hbmNlVGVzdHMvUGFyc2VyL3RpbnktaW5uZXJIVE1MCisgICAgICAgIGFuZCBub3RpY2luZyB0
aGF0IEhUTUxTb3VyY2VUcmFja2VyOjpzdGFydCBkb2VzIG5vdCBjYXVzZSBhIG1hbGxvYy4KKyAg
ICAgICAgKE5vdGUgdGhpcyBtZXRob2Qgb2YgdGVzdGluZyB3aWxsIGJyZWFrIGlmCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTAxMSBpcyBldmVyIGZp
eGVkIHNvIHRoYXQKKyAgICAgICAgSFRNTFNvdXJjZVRyYWNrZXIgaXMgZGlzYWJsZWQgZHVyaW5n
IGZyYWdtZW50IHBhcnNpbmcuICBJZiBzbyB0aGVyZSBhcmUKKyAgICAgICAgdW5kb3VidGFibHkg
bWFueSBvdGhlciB3YXlzIHRvIHRlc3QgdGhpcy4pCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0
L1NlZ21lbnRlZFN0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRTdHJpbmc6
Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRTdHJpbmc6OnNldEV4Y2x1ZGVM
aW5lTnVtYmVycyk6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRTdHJpbmc6OmFwcGVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRTdHJpbmc6OnByZXBlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjp0b1N0cmluZyk6CisgICAgICAgICogcGxhdGZvcm0v
dGV4dC9TZWdtZW50ZWRTdHJpbmcuaDoKKwogMjAxMS0wMi0yMiAgQnJhZHkgRWlkc29uICA8YmVp
ZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3BwCmlu
ZGV4IDdjODU5ZGM2OGFiNzVhMjJjZjRhMjQ0MzUyNTFhOWJmMmQ3ZGZiZjcuLjlhYTBhNTZjMDAy
M2JhNmM4N2IzYWZhNzEyYjJiYjU4YWFmNTQ1Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAKQEAgLTY4LDggKzY4LDggQEAgdW5zaWdu
ZWQgU2VnbWVudGVkU3RyaW5nOjpsZW5ndGgoKSBjb25zdAogICAgICAgICAgICAgKytsZW5ndGg7
CiAgICAgfQogICAgIGlmIChtX2NvbXBvc2l0ZSkgewotICAgICAgICBEZXF1ZTxTZWdtZW50ZWRT
dWJzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3Vic3RyaW5ncy5iZWdpbigpOwotICAg
ICAgICBEZXF1ZTxTZWdtZW50ZWRTdWJzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlID0gbV9zdWJz
dHJpbmdzLmVuZCgpOworICAgICAgICBTdWJzdHJpbmdEZXF1ZTo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3N1YnN0cmluZ3MuYmVnaW4oKTsKKyAgICAgICAgU3Vic3RyaW5nRGVxdWU6OmNvbnN0X2l0
ZXJhdG9yIGUgPSBtX3N1YnN0cmluZ3MuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBlOyAr
K2l0KQogICAgICAgICAgICAgbGVuZ3RoICs9IGl0LT5tX2xlbmd0aDsKICAgICB9CkBAIC04MCw4
ICs4MCw4IEBAIHZvaWQgU2VnbWVudGVkU3RyaW5nOjpzZXRFeGNsdWRlTGluZU51bWJlcnMoKQog
ewogICAgIG1fY3VycmVudFN0cmluZy5zZXRFeGNsdWRlTGluZU51bWJlcnMoKTsKICAgICBpZiAo
bV9jb21wb3NpdGUpIHsKLSAgICAgICAgRGVxdWU8U2VnbWVudGVkU3Vic3RyaW5nPjo6aXRlcmF0
b3IgaXQgPSBtX3N1YnN0cmluZ3MuYmVnaW4oKTsKLSAgICAgICAgRGVxdWU8U2VnbWVudGVkU3Vi
c3RyaW5nPjo6aXRlcmF0b3IgZSA9IG1fc3Vic3RyaW5ncy5lbmQoKTsKKyAgICAgICAgU3Vic3Ry
aW5nRGVxdWU6Oml0ZXJhdG9yIGl0ID0gbV9zdWJzdHJpbmdzLmJlZ2luKCk7CisgICAgICAgIFN1
YnN0cmluZ0RlcXVlOjppdGVyYXRvciBlID0gbV9zdWJzdHJpbmdzLmVuZCgpOwogICAgICAgICBm
b3IgKDsgaXQgIT0gZTsgKytpdCkKICAgICAgICAgICAgIGl0LT5zZXRFeGNsdWRlTGluZU51bWJl
cnMoKTsKICAgICB9CkBAIC0xNDgsOCArMTQ4LDggQEAgdm9pZCBTZWdtZW50ZWRTdHJpbmc6OmFw
cGVuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcgJnMpCiAgICAgQVNTRVJUKCFzLmVzY2FwZWQoKSk7
CiAgICAgYXBwZW5kKHMubV9jdXJyZW50U3RyaW5nKTsKICAgICBpZiAocy5tX2NvbXBvc2l0ZSkg
ewotICAgICAgICBEZXF1ZTxTZWdtZW50ZWRTdWJzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IHMubV9zdWJzdHJpbmdzLmJlZ2luKCk7Ci0gICAgICAgIERlcXVlPFNlZ21lbnRlZFN1YnN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGUgPSBzLm1fc3Vic3RyaW5ncy5lbmQoKTsKKyAgICAgICAgU3Vi
c3RyaW5nRGVxdWU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcy5tX3N1YnN0cmluZ3MuYmVnaW4oKTsK
KyAgICAgICAgU3Vic3RyaW5nRGVxdWU6OmNvbnN0X2l0ZXJhdG9yIGUgPSBzLm1fc3Vic3RyaW5n
cy5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ICE9IGU7ICsraXQpCiAgICAgICAgICAgICBhcHBl
bmQoKml0KTsKICAgICB9CkBAIC0xNjEsOCArMTYxLDggQEAgdm9pZCBTZWdtZW50ZWRTdHJpbmc6
OnByZXBlbmQoY29uc3QgU2VnbWVudGVkU3RyaW5nICZzKQogICAgIEFTU0VSVCghZXNjYXBlZCgp
KTsKICAgICBBU1NFUlQoIXMuZXNjYXBlZCgpKTsKICAgICBpZiAocy5tX2NvbXBvc2l0ZSkgewot
ICAgICAgICBEZXF1ZTxTZWdtZW50ZWRTdWJzdHJpbmc+Ojpjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
IGl0ID0gcy5tX3N1YnN0cmluZ3MucmJlZ2luKCk7Ci0gICAgICAgIERlcXVlPFNlZ21lbnRlZFN1
YnN0cmluZz46OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgZSA9IHMubV9zdWJzdHJpbmdzLnJlbmQo
KTsKKyAgICAgICAgU3Vic3RyaW5nRGVxdWU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgaXQgPSBz
Lm1fc3Vic3RyaW5ncy5yYmVnaW4oKTsKKyAgICAgICAgU3Vic3RyaW5nRGVxdWU6OmNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IgZSA9IHMubV9zdWJzdHJpbmdzLnJlbmQoKTsKICAgICAgICAgZm9yICg7
IGl0ICE9IGU7ICsraXQpCiAgICAgICAgICAgICBwcmVwZW5kKCppdCk7CiAgICAgfQpAQCAtMTk2
LDggKzE5Niw4IEBAIFN0cmluZyBTZWdtZW50ZWRTdHJpbmc6OnRvU3RyaW5nKCkgY29uc3QKICAg
ICB9CiAgICAgbV9jdXJyZW50U3RyaW5nLmFwcGVuZFRvKHJlc3VsdCk7CiAgICAgaWYgKG1fY29t
cG9zaXRlKSB7Ci0gICAgICAgIERlcXVlPFNlZ21lbnRlZFN1YnN0cmluZz46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9zdWJzdHJpbmdzLmJlZ2luKCk7Ci0gICAgICAgIERlcXVlPFNlZ21lbnRlZFN1
YnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGUgPSBtX3N1YnN0cmluZ3MuZW5kKCk7CisgICAgICAg
IFN1YnN0cmluZ0RlcXVlOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3Vic3RyaW5ncy5iZWdpbigp
OworICAgICAgICBTdWJzdHJpbmdEZXF1ZTo6Y29uc3RfaXRlcmF0b3IgZSA9IG1fc3Vic3RyaW5n
cy5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ICE9IGU7ICsraXQpCiAgICAgICAgICAgICBpdC0+
YXBwZW5kVG8ocmVzdWx0KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9TZWdtZW50ZWRTdHJpbmcuaAppbmRleCAzNzg0YjUwNzY3ODVlOTkxZGJjNjIxOTI3MGMzNGUx
MTYxZjQxZWY3Li5kZmEzMTI0ZDRhYmUwYjAyODMyNjI3MWExNTI4YzE1NTc5NzU3ZThkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmgKQEAgLTI3
NCw3ICsyNzQsMTAgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9udW1iZXJPZkNoYXJhY3RlcnNDb25z
dW1lZFByaW9yVG9DdXJyZW50U3RyaW5nOwogICAgIGludCBtX251bWJlck9mQ2hhcmFjdGVyc0Nv
bnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lOwogICAgIGludCBtX2N1cnJlbnRMaW5lOwotICAgIERl
cXVlPFNlZ21lbnRlZFN1YnN0cmluZz4gbV9zdWJzdHJpbmdzOworICAgIC8vIEl0IGlzIHZlcnkg
Y29tbW9uIHRvIGhhdmUgb25lIHN1YnN0cmluZywgc28gd2Ugc3RvcmUgaXQgaW5saW5lCisgICAg
Ly8gdGhpcyBwcmV2ZW50cyBvcGVyYXRvcj0gZnJvbSBuZWVkaW5nIHRvIG1hbGxvYyBpbiB0aGUg
Y29tbW9uIGNhc2UuCisgICAgdHlwZWRlZiBEZXF1ZTxTZWdtZW50ZWRTdWJzdHJpbmcsIDE+IFN1
YnN0cmluZ0RlcXVlOworICAgIFN1YnN0cmluZ0RlcXVlIG1fc3Vic3RyaW5nczsKICAgICBib29s
IG1fY29tcG9zaXRlOwogICAgIGJvb2wgbV9jbG9zZWQ7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83462</attachid>
            <date>2011-02-23 02:52:14 -0800</date>
            <delta_ts>2011-02-23 02:52:14 -0800</delta_ts>
            <desc>works, i&apos;m not sure it&apos;s better</desc>
            <filename>bug-55005-20110223025213.patch</filename>
            <type>text/plain</type>
            <size>30271</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk0MTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDdm
M2MxMDk0NGY3MzYzNGQwZGU5ZDk2N2NlYTcyZDM0NTQzMTJkMTIuLmMwYmEyZmE2YzA5MTdlMTcz
OWE5NWYzOTViYmZiOWQ0ZDU3ZWZiODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDUxIEBACisyMDExLTAyLTIyICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTZWdtZW50ZWRT
dHJpbmcgb3BlcmF0b3I9IGFsd2F5cyBjYXVzZXMgYSBtYWxsb2MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1MDA1CisKKyAgICAgICAgTWFrZSBpdCBw
b3NzaWJsZSB0byBzcGVjaWZ5IGFuIGlubGluZUNhcGFjaXR5IGZvciBhIERlcXVlLgorCisgICAg
ICAgIFRoaXMgYWRkcyBhbiBBU1NFUlQgdGhhdCBjYXBhY2l0eSBpcyBuZXZlciAxIChzaW5jZSB0
aGF0IGRvZXNuJ3Qgd29yaykKKyAgICAgICAgYXMgd2VsbCBhcyByZS13cml0ZXMgRGVxdWU6Om9w
ZXJhdG9yPSB0byBub3QgdXNlIHN3YXAgc2luY2UKKyAgICAgICAgc3dhcCBjYXVzZXMgdXMgdG8g
ZW5kIHVwIGNvcHkgY29uc3RydWN0aW5nIGNvbXBsaWNhdGVkIG9iamVjdHMgdHdpY2UKKyAgICAg
ICAgaW5zdGVhZCBvZiBqdXN0IG9uY2Ugd2hlbiBkaXJlY3RseSBjb3B5aW5nLgorCisgICAgICAg
ICogd3RmL0RlcXVlLmg6CisgICAgICAgIChXVEY6OkRlcXVlSXRlcmF0b3I6OkRlcXVlSXRlcmF0
b3IpOgorICAgICAgICAoV1RGOjpEZXF1ZUNvbnN0SXRlcmF0b3I6OkRlcXVlQ29uc3RJdGVyYXRv
cik6CisgICAgICAgIChXVEY6OkRlcXVlUmV2ZXJzZUl0ZXJhdG9yOjpEZXF1ZVJldmVyc2VJdGVy
YXRvcik6CisgICAgICAgIChXVEY6OkRlcXVlQ29uc3RSZXZlcnNlSXRlcmF0b3I6OkRlcXVlQ29u
c3RSZXZlcnNlSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjo6OmNoZWNrVmFsaWRpdHkpOgorICAg
ICAgICAoV1RGOjo6OmNoZWNrSW5kZXhWYWxpZGl0eSk6CisgICAgICAgIChXVEY6Ojo6aW52YWxp
ZGF0ZUl0ZXJhdG9ycyk6CisgICAgICAgIChXVEY6Ojo6RGVxdWUpOgorICAgICAgICAoV1RGOjpk
ZWxldGVBbGxWYWx1ZXMpOgorICAgICAgICAoV1RGOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKFdU
Rjo6OjpkZXN0cm95QWxsKToKKyAgICAgICAgKFdURjo6Ojp+RGVxdWUpOgorICAgICAgICAoV1RG
Ojo6OnN3YXApOgorICAgICAgICAoV1RGOjo6OmNsZWFyKToKKyAgICAgICAgKFdURjo6OjpmaW5k
SWYpOgorICAgICAgICAoV1RGOjo6OmV4cGFuZENhcGFjaXR5SWZOZWVkZWQpOgorICAgICAgICAo
V1RGOjo6OmV4cGFuZENhcGFjaXR5KToKKyAgICAgICAgKFdURjo6Ojp0YWtlRmlyc3QpOgorICAg
ICAgICAoV1RGOjo6OmFwcGVuZCk6CisgICAgICAgIChXVEY6Ojo6cHJlcGVuZCk6CisgICAgICAg
IChXVEY6Ojo6cmVtb3ZlRmlyc3QpOgorICAgICAgICAoV1RGOjo6OnJlbW92ZSk6CisgICAgICAg
IChXVEY6Ojo6YWRkVG9JdGVyYXRvcnNMaXN0KToKKyAgICAgICAgKFdURjo6OjpyZW1vdmVGcm9t
SXRlcmF0b3JzTGlzdCk6CisgICAgICAgIChXVEY6Ojo6RGVxdWVJdGVyYXRvckJhc2UpOgorICAg
ICAgICAoV1RGOjo6On5EZXF1ZUl0ZXJhdG9yQmFzZSk6CisgICAgICAgIChXVEY6Ojo6aXNFcXVh
bCk6CisgICAgICAgIChXVEY6Ojo6aW5jcmVtZW50KToKKyAgICAgICAgKFdURjo6OjpkZWNyZW1l
bnQpOgorICAgICAgICAoV1RGOjo6OmFmdGVyKToKKyAgICAgICAgKFdURjo6OjpiZWZvcmUpOgor
ICAgICAgICAqIHd0Zi9WZWN0b3IuaDoKKwogMjAxMS0wMi0yMiAgU2hlcmlmZiBCb3QgIDx3ZWJr
aXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBv
dXQgcjc5MzY3LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZXF1ZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9EZXF1ZS5oCmluZGV4IDFiMTZhZmNlOTdiZjkw
YjBiYzMxYTg0ZDRmZTkyNzIyNDNlYzFjNWEuLjIzODkwYTJmM2VmZDc5MmU4OGNjN2MxODAxZjZk
ZjljZGE2YmI2OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRGVxdWUu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0RlcXVlLmgKQEAgLTM3LDI3ICszNywy
NyBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNz
IERlcXVlSXRlcmF0b3JCYXNlOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIERlcXVl
SXRlcmF0b3I7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgRGVxdWVDb25zdEl0ZXJh
dG9yOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIERlcXVlUmV2ZXJzZUl0ZXJhdG9y
OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIERlcXVlQ29uc3RSZXZlcnNlSXRlcmF0
b3I7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBjbGFz
cyBEZXF1ZUl0ZXJhdG9yQmFzZTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHk+IGNsYXNzIERlcXVlSXRlcmF0b3I7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBjbGFzcyBEZXF1ZUNvbnN0SXRlcmF0b3I7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBjbGFzcyBEZXF1ZVJl
dmVyc2VJdGVyYXRvcjsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+IGNsYXNzIERlcXVlQ29uc3RSZXZlcnNlSXRlcmF0b3I7CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eSA9IDA+CiAgICAgY2xhc3MgRGVxdWUgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKICAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgRGVxdWVJdGVyYXRvcjxUPiBpdGVyYXRv
cjsKLSAgICAgICAgdHlwZWRlZiBEZXF1ZUNvbnN0SXRlcmF0b3I8VD4gY29uc3RfaXRlcmF0b3I7
Ci0gICAgICAgIHR5cGVkZWYgRGVxdWVSZXZlcnNlSXRlcmF0b3I8VD4gcmV2ZXJzZV9pdGVyYXRv
cjsKLSAgICAgICAgdHlwZWRlZiBEZXF1ZUNvbnN0UmV2ZXJzZUl0ZXJhdG9yPFQ+IGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgRGVxdWVJdGVyYXRvcjxULCBpbmxpbmVD
YXBhY2l0eT4gaXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgRGVxdWVDb25zdEl0ZXJhdG9yPFQs
IGlubGluZUNhcGFjaXR5PiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBEZXF1ZVJl
dmVyc2VJdGVyYXRvcjxULCBpbmxpbmVDYXBhY2l0eT4gcmV2ZXJzZV9pdGVyYXRvcjsKKyAgICAg
ICAgdHlwZWRlZiBEZXF1ZUNvbnN0UmV2ZXJzZUl0ZXJhdG9yPFQsIGlubGluZUNhcGFjaXR5PiBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogCiAgICAgICAgIERlcXVlKCk7Ci0gICAgICAgIERlcXVl
KGNvbnN0IERlcXVlPFQ+Jik7Ci0gICAgICAgIERlcXVlJiBvcGVyYXRvcj0oY29uc3QgRGVxdWU8
VD4mKTsKKyAgICAgICAgRGVxdWUoY29uc3QgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+Jik7Cisg
ICAgICAgIERlcXVlJiBvcGVyYXRvcj0oY29uc3QgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+Jik7
CiAgICAgICAgIH5EZXF1ZSgpOwogCi0gICAgICAgIHZvaWQgc3dhcChEZXF1ZTxUPiYpOworICAg
ICAgICB2b2lkIHN3YXAoRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+Jik7CiAKICAgICAgICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0IDw9IG1fZW5kID8gbV9lbmQgLSBtX3N0
YXJ0IDogbV9lbmQgKyBtX2J1ZmZlci5jYXBhY2l0eSgpIC0gbV9zdGFydDsgfQogICAgICAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0ID09IG1fZW5kOyB9CkBAIC04Nywx
MSArODcsMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGl0ZXJhdG9yIGZpbmRJZihQcmVk
aWNhdGUmKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBEZXF1ZUl0ZXJh
dG9yQmFzZTxUPjsKKyAgICAgICAgZnJpZW5kIGNsYXNzIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlu
bGluZUNhcGFjaXR5PjsKIAotICAgICAgICB0eXBlZGVmIFZlY3RvckJ1ZmZlcjxULCAwPiBCdWZm
ZXI7CisgICAgICAgIHR5cGVkZWYgVmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5PiBCdWZm
ZXI7CiAgICAgICAgIHR5cGVkZWYgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD4gVHlwZU9wZXJhdGlv
bnM7Ci0gICAgICAgIHR5cGVkZWYgRGVxdWVJdGVyYXRvckJhc2U8VD4gSXRlcmF0b3JCYXNlOwor
ICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiBJdGVy
YXRvckJhc2U7CiAKICAgICAgICAgdm9pZCByZW1vdmUoc2l6ZV90IHBvc2l0aW9uKTsKICAgICAg
ICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CkBAIC0xMDksMTQgKzEwOSwxNCBAQCBuYW1l
c3BhY2UgV1RGIHsKICNlbmRpZgogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IDA+CiAgICAg
Y2xhc3MgRGVxdWVJdGVyYXRvckJhc2UgewogICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYg
RGVxdWVJdGVyYXRvckJhc2U8VD4gQmFzZTsKKyAgICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9y
QmFzZTxULCBpbmxpbmVDYXBhY2l0eT4gQmFzZTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAg
RGVxdWVJdGVyYXRvckJhc2UoKTsKLSAgICAgICAgRGVxdWVJdGVyYXRvckJhc2UoY29uc3QgRGVx
dWU8VD4qLCBzaXplX3QpOworICAgICAgICBEZXF1ZUl0ZXJhdG9yQmFzZShjb25zdCBEZXF1ZTxU
LCBpbmxpbmVDYXBhY2l0eT4qLCBzaXplX3QpOwogICAgICAgICBEZXF1ZUl0ZXJhdG9yQmFzZShj
b25zdCBCYXNlJik7CiAgICAgICAgIEJhc2UmIG9wZXJhdG9yPShjb25zdCBCYXNlJik7CiAgICAg
ICAgIH5EZXF1ZUl0ZXJhdG9yQmFzZSgpOwpAQCAtMTM3LDEwICsxMzcsMTAgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgICAgIHZvaWQgY2hlY2tWYWxpZGl0eSgpIGNvbnN0OwogICAgICAgICB2b2lk
IGNoZWNrVmFsaWRpdHkoY29uc3QgQmFzZSYpIGNvbnN0OwogCi0gICAgICAgIERlcXVlPFQ+KiBt
X2RlcXVlOworICAgICAgICBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4qIG1fZGVxdWU7CiAgICAg
ICAgIHNpemVfdCBtX2luZGV4OwogCi0gICAgICAgIGZyaWVuZCBjbGFzcyBEZXF1ZTxUPjsKKyAg
ICAgICAgZnJpZW5kIGNsYXNzIERlcXVlPFQsIGlubGluZUNhcGFjaXR5PjsKIAogI2lmbmRlZiBO
REVCVUcKICAgICAgICAgbXV0YWJsZSBEZXF1ZUl0ZXJhdG9yQmFzZSogbV9uZXh0OwpAQCAtMTQ4
LDE0ICsxNDgsMTQgQEAgbmFtZXNwYWNlIFdURiB7CiAjZW5kaWYKICAgICB9OwogCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLSAgICBjbGFzcyBEZXF1ZUl0ZXJhdG9yIDogcHVibGljIERlcXVl
SXRlcmF0b3JCYXNlPFQ+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHkgPSAwPgorICAgIGNsYXNzIERlcXVlSXRlcmF0b3IgOiBwdWJsaWMgRGVxdWVJdGVy
YXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+IHsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBl
ZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQ+IEJhc2U7Ci0gICAgICAgIHR5cGVkZWYgRGVxdWVJdGVy
YXRvcjxUPiBJdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBp
bmxpbmVDYXBhY2l0eT4gQmFzZTsKKyAgICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yPFQsIGlu
bGluZUNhcGFjaXR5PiBJdGVyYXRvcjsKIAogICAgIHB1YmxpYzoKLSAgICAgICAgRGVxdWVJdGVy
YXRvcihEZXF1ZTxUPiogZGVxdWUsIHNpemVfdCBpbmRleCkgOiBCYXNlKGRlcXVlLCBpbmRleCkg
eyB9CisgICAgICAgIERlcXVlSXRlcmF0b3IoRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+KiBkZXF1
ZSwgc2l6ZV90IGluZGV4KSA6IEJhc2UoZGVxdWUsIGluZGV4KSB7IH0KIAogICAgICAgICBEZXF1
ZUl0ZXJhdG9yKGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgOiBCYXNlKG90aGVyKSB7IH0KICAgICAg
ICAgRGVxdWVJdGVyYXRvciYgb3BlcmF0b3I9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgeyBCYXNl
Ojphc3NpZ24ob3RoZXIpOyByZXR1cm4gKnRoaXM7IH0KQEAgLTE3MiwxNSArMTcyLDE1IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgICAgICAvLyBwb3N0Zml4IC0tIGludGVudGlvbmFsbHkgb21pdHRl
ZAogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGNsYXNzIERlcXVlQ29u
c3RJdGVyYXRvciA6IHB1YmxpYyBEZXF1ZUl0ZXJhdG9yQmFzZTxUPiB7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5ID0gMD4KKyAgICBjbGFzcyBEZXF1ZUNv
bnN0SXRlcmF0b3IgOiBwdWJsaWMgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+
IHsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQ+IEJh
c2U7Ci0gICAgICAgIHR5cGVkZWYgRGVxdWVDb25zdEl0ZXJhdG9yPFQ+IEl0ZXJhdG9yOwotICAg
ICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3I8VD4gTm9uQ29uc3RJdGVyYXRvcjsKKyAgICAgICAg
dHlwZWRlZiBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT4gQmFzZTsKKyAgICAg
ICAgdHlwZWRlZiBEZXF1ZUNvbnN0SXRlcmF0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IEl0ZXJhdG9y
OworICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IE5vbkNv
bnN0SXRlcmF0b3I7CiAKICAgICBwdWJsaWM6Ci0gICAgICAgIERlcXVlQ29uc3RJdGVyYXRvcihj
b25zdCBEZXF1ZTxUPiogZGVxdWUsIHNpemVfdCBpbmRleCkgOiBCYXNlKGRlcXVlLCBpbmRleCkg
eyB9CisgICAgICAgIERlcXVlQ29uc3RJdGVyYXRvcihjb25zdCBEZXF1ZTxULCBpbmxpbmVDYXBh
Y2l0eT4qIGRlcXVlLCBzaXplX3QgaW5kZXgpIDogQmFzZShkZXF1ZSwgaW5kZXgpIHsgfQogCiAg
ICAgICAgIERlcXVlQ29uc3RJdGVyYXRvcihjb25zdCBJdGVyYXRvciYgb3RoZXIpIDogQmFzZShv
dGhlcikgeyB9CiAgICAgICAgIERlcXVlQ29uc3RJdGVyYXRvcihjb25zdCBOb25Db25zdEl0ZXJh
dG9yJiBvdGhlcikgOiBCYXNlKG90aGVyKSB7IH0KQEAgLTE5OSwxNCArMTk5LDE0IEBAIG5hbWVz
cGFjZSBXVEYgewogICAgICAgICAvLyBwb3N0Zml4IC0tIGludGVudGlvbmFsbHkgb21pdHRlZAog
ICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGNsYXNzIERlcXVlUmV2ZXJz
ZUl0ZXJhdG9yIDogcHVibGljIERlcXVlSXRlcmF0b3JCYXNlPFQ+IHsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHkgPSAwPgorICAgIGNsYXNzIERlcXVlUmV2
ZXJzZUl0ZXJhdG9yIDogcHVibGljIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5
PiB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yQmFzZTxUPiBC
YXNlOwotICAgICAgICB0eXBlZGVmIERlcXVlUmV2ZXJzZUl0ZXJhdG9yPFQ+IEl0ZXJhdG9yOwor
ICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiBCYXNl
OworICAgICAgICB0eXBlZGVmIERlcXVlUmV2ZXJzZUl0ZXJhdG9yPFQsIGlubGluZUNhcGFjaXR5
PiBJdGVyYXRvcjsKIAogICAgIHB1YmxpYzoKLSAgICAgICAgRGVxdWVSZXZlcnNlSXRlcmF0b3Io
Y29uc3QgRGVxdWU8VD4qIGRlcXVlLCBzaXplX3QgaW5kZXgpIDogQmFzZShkZXF1ZSwgaW5kZXgp
IHsgfQorICAgICAgICBEZXF1ZVJldmVyc2VJdGVyYXRvcihjb25zdCBEZXF1ZTxULCBpbmxpbmVD
YXBhY2l0eT4qIGRlcXVlLCBzaXplX3QgaW5kZXgpIDogQmFzZShkZXF1ZSwgaW5kZXgpIHsgfQog
CiAgICAgICAgIERlcXVlUmV2ZXJzZUl0ZXJhdG9yKGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgOiBC
YXNlKG90aGVyKSB7IH0KICAgICAgICAgRGVxdWVSZXZlcnNlSXRlcmF0b3ImIG9wZXJhdG9yPShj
b25zdCBJdGVyYXRvciYgb3RoZXIpIHsgQmFzZTo6YXNzaWduKG90aGVyKTsgcmV0dXJuICp0aGlz
OyB9CkBAIC0yMjMsMTUgKzIyMywxNSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgLy8gcG9z
dGZpeCAtLSBpbnRlbnRpb25hbGx5IG9taXR0ZWQKICAgICB9OwogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLSAgICBjbGFzcyBEZXF1ZUNvbnN0UmV2ZXJzZUl0ZXJhdG9yIDogcHVibGljIERl
cXVlSXRlcmF0b3JCYXNlPFQ+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHkgPSAwPgorICAgIGNsYXNzIERlcXVlQ29uc3RSZXZlcnNlSXRlcmF0b3IgOiBw
dWJsaWMgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+IHsKICAgICBwcml2YXRl
OgotICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQ+IEJhc2U7Ci0gICAgICAgIHR5
cGVkZWYgRGVxdWVDb25zdFJldmVyc2VJdGVyYXRvcjxUPiBJdGVyYXRvcjsKLSAgICAgICAgdHlw
ZWRlZiBEZXF1ZVJldmVyc2VJdGVyYXRvcjxUPiBOb25Db25zdEl0ZXJhdG9yOworICAgICAgICB0
eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiBCYXNlOworICAgICAg
ICB0eXBlZGVmIERlcXVlQ29uc3RSZXZlcnNlSXRlcmF0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IEl0
ZXJhdG9yOworICAgICAgICB0eXBlZGVmIERlcXVlUmV2ZXJzZUl0ZXJhdG9yPFQsIGlubGluZUNh
cGFjaXR5PiBOb25Db25zdEl0ZXJhdG9yOwogCiAgICAgcHVibGljOgotICAgICAgICBEZXF1ZUNv
bnN0UmV2ZXJzZUl0ZXJhdG9yKGNvbnN0IERlcXVlPFQ+KiBkZXF1ZSwgc2l6ZV90IGluZGV4KSA6
IEJhc2UoZGVxdWUsIGluZGV4KSB7IH0KKyAgICAgICAgRGVxdWVDb25zdFJldmVyc2VJdGVyYXRv
cihjb25zdCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4qIGRlcXVlLCBzaXplX3QgaW5kZXgpIDog
QmFzZShkZXF1ZSwgaW5kZXgpIHsgfQogCiAgICAgICAgIERlcXVlQ29uc3RSZXZlcnNlSXRlcmF0
b3IoY29uc3QgSXRlcmF0b3ImIG90aGVyKSA6IEJhc2Uob3RoZXIpIHsgfQogICAgICAgICBEZXF1
ZUNvbnN0UmV2ZXJzZUl0ZXJhdG9yKGNvbnN0IE5vbkNvbnN0SXRlcmF0b3ImIG90aGVyKSA6IEJh
c2Uob3RoZXIpIHsgfQpAQCAtMjUxLDEyICsyNTEsMTIgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
fTsKIAogI2lmZGVmIE5ERUJVRwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lk
IERlcXVlPFQ+OjpjaGVja1ZhbGlkaXR5KCkgY29uc3QgeyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIHZvaWQgRGVxdWU8VD46OmNoZWNrSW5kZXhWYWxpZGl0eShzaXplX3QpIGNv
bnN0IHsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERlcXVlPFQ+Ojpp
bnZhbGlkYXRlSXRlcmF0b3JzKCkgeyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmNo
ZWNrVmFsaWRpdHkoKSBjb25zdCB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHk+IGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hl
Y2tJbmRleFZhbGlkaXR5KHNpemVfdCkgY29uc3QgeyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBh
Y2l0eT46OmludmFsaWRhdGVJdGVyYXRvcnMoKSB7IH0KICNlbHNlCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLSAgICB2b2lkIERlcXVlPFQ+OjpjaGVja1ZhbGlkaXR5KCkgY29uc3QKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9pZCBEZXF1
ZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoKSBjb25zdAogICAgIHsKICAgICAg
ICAgaWYgKCFtX2J1ZmZlci5jYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIW1fc3Rh
cnQpOwpAQCAtMjY3LDggKzI2Nyw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB9CiAgICAg
fQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIERlcXVlPFQ+OjpjaGVja0lu
ZGV4VmFsaWRpdHkoc2l6ZV90IGluZGV4KSBjb25zdAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5
Pjo6Y2hlY2tJbmRleFZhbGlkaXR5KHNpemVfdCBpbmRleCkgY29uc3QKICAgICB7CiAgICAgICAg
IEFTU0VSVChpbmRleCA8PSBtX2J1ZmZlci5jYXBhY2l0eSgpKTsKICAgICAgICAgaWYgKG1fc3Rh
cnQgPD0gbV9lbmQpIHsKQEAgLTI3OSw4ICsyNzksOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBEZXF1ZTxU
Pjo6aW52YWxpZGF0ZUl0ZXJhdG9ycygpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PgorICAgIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjppbnZh
bGlkYXRlSXRlcmF0b3JzKCkKICAgICB7CiAgICAgICAgIEl0ZXJhdG9yQmFzZSogbmV4dDsKICAg
ICAgICAgZm9yIChJdGVyYXRvckJhc2UqIHAgPSBtX2l0ZXJhdG9yczsgcDsgcCA9IG5leHQpIHsK
QEAgLTI5Myw4ICsyOTMsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAjZW5kaWYKIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIERlcXVlPFQ+OjpEZXF1ZSgpCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSBE
ZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OkRlcXVlKCkKICAgICAgICAgOiBtX3N0YXJ0KDApCiAg
ICAgICAgICwgbV9lbmQoMCkKICNpZm5kZWYgTkRFQlVHCkBAIC0zMDQsOCArMzA0LDggQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZTxUPjo6RGVxdWUoY29uc3QgRGVxdWU8
VD4mIG90aGVyKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4KKyAgICBpbmxpbmUgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpEZXF1ZShjb25zdCBEZXF1
ZTxULCBpbmxpbmVDYXBhY2l0eT4mIG90aGVyKQogICAgICAgICA6IG1fc3RhcnQob3RoZXIubV9z
dGFydCkKICAgICAgICAgLCBtX2VuZChvdGhlci5tX2VuZCkKICAgICAgICAgLCBtX2J1ZmZlcihv
dGhlci5tX2J1ZmZlci5jYXBhY2l0eSgpKQpAQCAtMzIyLDI1ICszMjIsNTMgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAg
IHZvaWQgZGVsZXRlQWxsVmFsdWVzKGNvbnN0IERlcXVlPFQ+JiBjb2xsZWN0aW9uKQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICB2b2lkIGRlbGV0
ZUFsbFZhbHVlcyhjb25zdCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4mIGNvbGxlY3Rpb24pCiAg
ICAgewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIERlcXVlPFQ+Ojpjb25zdF9pdGVyYXRvciBp
dGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0
eT46OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgICAgICBpdGVyYXRvciBlbmQgPSBjb2xs
ZWN0aW9uLmVuZCgpOwogICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gY29sbGVjdGlvbi5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAgICBkZWxldGUgKml0OwogICAgIH0KIAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIERlcXVlPFQ+JiBEZXF1ZTxUPjo6
b3BlcmF0b3I9KGNvbnN0IERlcXVlPFQ+JiBvdGhlcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIERlcXVlPFQsIGlubGluZUNhcGFj
aXR5PiYgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpvcGVyYXRvcj0oY29uc3QgRGVxdWU8VCwg
aW5saW5lQ2FwYWNpdHk+JiBvdGhlcikKICAgICB7Ci0gICAgICAgIERlcXVlPFQ+IGNvcHkob3Ro
ZXIpOwotICAgICAgICBzd2FwKGNvcHkpOworICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CisgICAg
ICAgIG90aGVyLmNoZWNrVmFsaWRpdHkoKTsKKworICAgICAgICBpZiAoJm90aGVyID09IHRoaXMp
CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICAgICAgLy8gTWF0Y2hlcyB+RGVxdWUo
KQorICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CisgICAgICAgIGRlc3Ryb3lBbGwoKTsK
KworICAgICAgICAvLyBNYXRjaGVzIERlcXVlKGNvbnN0IERlcXVlJikKKyAgICAgICAgbV9zdGFy
dCA9IG90aGVyLm1fc3RhcnQ7CisgICAgICAgIG1fZW5kID0gb3RoZXIubV9lbmQ7CisgICAgICAg
IC8vIFdlIGNvdWxkIGNvbXBhcmUgdG8gb3RoZXIuc2l6ZSgpIC0gMSBpbnN0ZWFkIG9mIGNhcGFj
aXR5IGlmIHdlIHdhbnRlZC4KKyAgICAgICAgaWYgKG1fYnVmZmVyLmNhcGFjaXR5KCkgPCBvdGhl
ci5tX2J1ZmZlci5jYXBhY2l0eSgpKSB7CisgICAgICAgICAgICBtX2J1ZmZlci5kZWFsbG9jYXRl
QnVmZmVyKG1fYnVmZmVyLmJ1ZmZlcigpKTsKKyAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIGJl
bmVmaXQgdG8gc2hyaW5raW5nIHRoZSBidWZmZXIgd2hlbiBjb3B5aW5nLCBhbmQKKyAgICAgICAg
ICAgIC8vIGNhcGFjaXR5ID09IDEgaXMgYW4gaWxsZWdhbCB2YWx1ZSBzbyB1c2UgY2FwYWNpdHko
KSBhbmQgbm90IHNpemUoKS4KKyAgICAgICAgICAgIG1fYnVmZmVyLmFsbG9jYXRlQnVmZmVyKG90
aGVyLm1fYnVmZmVyLmNhcGFjaXR5KCkpOworICAgICAgICB9CisgICAgICAgIGNvbnN0IFQqIG90
aGVyQnVmZmVyID0gb3RoZXIubV9idWZmZXIuYnVmZmVyKCk7CisgICAgICAgIGlmIChtX3N0YXJ0
IDw9IG1fZW5kKQorICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5
KG90aGVyQnVmZmVyICsgbV9zdGFydCwgb3RoZXJCdWZmZXIgKyBtX2VuZCwgbV9idWZmZXIuYnVm
ZmVyKCkgKyBtX3N0YXJ0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBUeXBlT3BlcmF0
aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXJCdWZmZXIsIG90aGVyQnVmZmVyICsgbV9lbmQs
IG1fYnVmZmVyLmJ1ZmZlcigpKTsKKyAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRp
YWxpemVkQ29weShvdGhlckJ1ZmZlciArIG1fc3RhcnQsIG90aGVyQnVmZmVyICsgbV9idWZmZXIu
Y2FwYWNpdHkoKSwgbV9idWZmZXIuYnVmZmVyKCkgKyBtX3N0YXJ0KTsKKyAgICAgICAgfQorCisg
ICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKKyAgICAgICAgb3RoZXIuY2hlY2tWYWxpZGl0eSgpOwog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6ZGVzdHJveUFsbCgpCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSB2b2lkIERlcXVlPFQs
IGlubGluZUNhcGFjaXR5Pjo6ZGVzdHJveUFsbCgpCiAgICAgewogICAgICAgICBpZiAobV9zdGFy
dCA8PSBtX2VuZCkKICAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChtX2J1ZmZl
ci5idWZmZXIoKSArIG1fc3RhcnQsIG1fYnVmZmVyLmJ1ZmZlcigpICsgbV9lbmQpOwpAQCAtMzUw
LDE2ICszNzgsMTYgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZTxUPjo6fkRlcXVlKCkKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIERl
cXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6fkRlcXVlKCkKICAgICB7CiAgICAgICAgIGNoZWNrVmFs
aWRpdHkoKTsKICAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwogICAgICAgICBkZXN0cm95
QWxsKCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgdm9p
ZCBEZXF1ZTxUPjo6c3dhcChEZXF1ZTxUPiYgb3RoZXIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSB2b2lkIERlcXVlPFQsIGlubGlu
ZUNhcGFjaXR5Pjo6c3dhcChEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4mIG90aGVyKQogICAgIHsK
ICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBvdGhlci5jaGVja1ZhbGlkaXR5KCk7
CkBAIC0zNzEsOCArMzk5LDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIG90aGVyLmNoZWNr
VmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGlu
ZSB2b2lkIERlcXVlPFQ+OjpjbGVhcigpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5
Pjo6Y2xlYXIoKQogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBpbnZh
bGlkYXRlSXRlcmF0b3JzKCk7CkBAIC0zODIsOSArNDEwLDkgQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkaWNhdGU+Ci0gICAgaW5saW5lIERlcXVlSXRlcmF0b3I8VD4g
RGVxdWU8VD46OmZpbmRJZihQcmVkaWNhdGUmIHByZWRpY2F0ZSkKKyAgICBpbmxpbmUgRGVxdWVJ
dGVyYXRvcjxULCBpbmxpbmVDYXBhY2l0eT4gRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpmaW5k
SWYoUHJlZGljYXRlJiBwcmVkaWNhdGUpCiAgICAgewogICAgICAgICBpdGVyYXRvciBlbmRfaXRl
cmF0b3IgPSBlbmQoKTsKICAgICAgICAgZm9yIChpdGVyYXRvciBpdCA9IGJlZ2luKCk7IGl0ICE9
IGVuZF9pdGVyYXRvcjsgKytpdCkgewpAQCAtMzk0LDggKzQyMiw4IEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgICAgICByZXR1cm4gZW5kX2l0ZXJhdG9yOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci0gICAgaW5saW5lIHZvaWQgRGVxdWU8VD46OmV4cGFuZENhcGFjaXR5SWZOZWVk
ZWQoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAg
ICBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmV4cGFuZENhcGFjaXR5SWZO
ZWVkZWQoKQogICAgIHsKICAgICAgICAgaWYgKG1fc3RhcnQpIHsKICAgICAgICAgICAgIGlmICht
X2VuZCArIDEgIT0gbV9zdGFydCkKQEAgLTQwOSw4ICs0MzcsOCBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgZXhwYW5kQ2FwYWNpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotICAgIHZvaWQgRGVxdWU8VD46OmV4cGFuZENhcGFjaXR5KCkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9pZCBEZXF1ZTxULCBpbmxp
bmVDYXBhY2l0eT46OmV4cGFuZENhcGFjaXR5KCkKICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRp
dHkoKTsKICAgICAgICAgc2l6ZV90IG9sZENhcGFjaXR5ID0gbV9idWZmZXIuY2FwYWNpdHkoKTsK
QEAgLTQyOSwxNiArNDU3LDE2IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBjaGVja1ZhbGlk
aXR5KCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgVCBE
ZXF1ZTxUPjo6dGFrZUZpcnN0KCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIFQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+Ojp0YWtl
Rmlyc3QoKQogICAgIHsKICAgICAgICAgVCBvbGRGaXJzdCA9IGZpcnN0KCk7CiAgICAgICAgIHJl
bW92ZUZpcnN0KCk7CiAgICAgICAgIHJldHVybiBvbGRGaXJzdDsKICAgICB9CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIGlubGluZSB2b2lkIERl
cXVlPFQ+OjphcHBlbmQoY29uc3QgVSYgdmFsdWUpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIGlubGluZSB2
b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6YXBwZW5kKGNvbnN0IFUmIHZhbHVlKQogICAg
IHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBleHBhbmRDYXBhY2l0eUlmTmVl
ZGVkKCk7CkBAIC00NTAsOCArNDc4LDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNr
VmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgotICAgIGlubGluZSB2b2lkIERlcXVlPFQ+OjpwcmVwZW5kKGNvbnN0IFUmIHZh
bHVlKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gdGVt
cGxhdGU8dHlwZW5hbWUgVT4KKyAgICBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0
eT46OnByZXBlbmQoY29uc3QgVSYgdmFsdWUpCiAgICAgewogICAgICAgICBjaGVja1ZhbGlkaXR5
KCk7CiAgICAgICAgIGV4cGFuZENhcGFjaXR5SWZOZWVkZWQoKTsKQEAgLTQ2Myw4ICs0OTEsOCBA
QCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgIH0KIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIHZvaWQgRGVxdWU8VD46OnJlbW92ZUZp
cnN0KCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cisg
ICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpyZW1vdmVGaXJzdCgpCiAg
ICAgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIGludmFsaWRhdGVJdGVyYXRv
cnMoKTsKQEAgLTQ3NywyMiArNTA1LDIyIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBjaGVj
a1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxp
bmUgdm9pZCBEZXF1ZTxUPjo6cmVtb3ZlKGl0ZXJhdG9yJiBpdCkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VCwg
aW5saW5lQ2FwYWNpdHk+OjpyZW1vdmUoaXRlcmF0b3ImIGl0KQogICAgIHsKICAgICAgICAgaXQu
Y2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZW1vdmUoaXQubV9pbmRleCk7CiAgICAgfQogCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6cmVtb3Zl
KGNvbnN0X2l0ZXJhdG9yJiBpdCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+Ojpy
ZW1vdmUoY29uc3RfaXRlcmF0b3ImIGl0KQogICAgIHsKICAgICAgICAgaXQuY2hlY2tWYWxpZGl0
eSgpOwogICAgICAgICByZW1vdmUoaXQubV9pbmRleCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6cmVtb3ZlKHNpemVfdCBwb3Np
dGlvbikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cisg
ICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpyZW1vdmUoc2l6ZV90IHBv
c2l0aW9uKQogICAgIHsKICAgICAgICAgaWYgKHBvc2l0aW9uID09IG1fZW5kKQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtNTE1LDI4ICs1NDMsMjggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQog
CiAjaWZkZWYgTkRFQlVHCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgRGVx
dWVJdGVyYXRvckJhc2U8VD46OmNoZWNrVmFsaWRpdHkoKSBjb25zdCB7IH0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6Y2hlY2tWYWxp
ZGl0eShjb25zdCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPiYpIGNvbnN0IHsgfQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQ+OjphZGRUb0l0ZXJh
dG9yc0xpc3QoKSB7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBEZXF1
ZUl0ZXJhdG9yQmFzZTxUPjo6cmVtb3ZlRnJvbUl0ZXJhdG9yc0xpc3QoKSB7IH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSB2b2lkIERlcXVl
SXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hlY2tWYWxpZGl0eSgpIGNvbnN0IHsg
fQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gaW5saW5l
IHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpjaGVja1ZhbGlkaXR5
KGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiYpIGNvbnN0IHsgfQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gaW5saW5lIHZv
aWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjphZGRUb0l0ZXJhdG9yc0xp
c3QoKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+
IGlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6cmVtb3Zl
RnJvbUl0ZXJhdG9yc0xpc3QoKSB7IH0KICNlbHNlCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgICB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQ+OjpjaGVja1ZhbGlkaXR5KCkgY29uc3QKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9pZCBE
ZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZGVxdWUpOwogICAgICAgICBtX2RlcXVlLT5jaGVj
a0luZGV4VmFsaWRpdHkobV9pbmRleCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLSAgICB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQ+OjpjaGVja1ZhbGlkaXR5KGNvbnN0IEJh
c2UmIG90aGVyKSBjb25zdAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KKyAgICB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6
Y2hlY2tWYWxpZGl0eShjb25zdCBCYXNlJiBvdGhlcikgY29uc3QKICAgICB7CiAgICAgICAgIGNo
ZWNrVmFsaWRpdHkoKTsKICAgICAgICAgb3RoZXIuY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBB
U1NFUlQobV9kZXF1ZSA9PSBvdGhlci5tX2RlcXVlKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotICAgIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VD46OmFkZFRvSXRlcmF0b3Jz
TGlzdCgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgor
ICAgIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjphZGRUb0l0ZXJh
dG9yc0xpc3QoKQogICAgIHsKICAgICAgICAgaWYgKCFtX2RlcXVlKQogICAgICAgICAgICAgbV9u
ZXh0ID0gMDsKQEAgLTU0OSw4ICs1NzcsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgbV9w
cmV2aW91cyA9IDA7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lk
IERlcXVlSXRlcmF0b3JCYXNlPFQ+OjpyZW1vdmVGcm9tSXRlcmF0b3JzTGlzdCgpCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHZvaWQgRGVxdWVJ
dGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpyZW1vdmVGcm9tSXRlcmF0b3JzTGlzdCgp
CiAgICAgewogICAgICAgICBpZiAoIW1fZGVxdWUpIHsKICAgICAgICAgICAgIEFTU0VSVCghbV9u
ZXh0KTsKQEAgLTU3NCwyMyArNjAyLDIzIEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH0KICNlbmRp
ZgogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJh
c2U8VD46OkRlcXVlSXRlcmF0b3JCYXNlKCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGlu
ZUNhcGFjaXR5Pjo6RGVxdWVJdGVyYXRvckJhc2UoKQogICAgICAgICA6IG1fZGVxdWUoMCkKICAg
ICB7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgRGVxdWVJ
dGVyYXRvckJhc2U8VD46OkRlcXVlSXRlcmF0b3JCYXNlKGNvbnN0IERlcXVlPFQ+KiBkZXF1ZSwg
c2l6ZV90IGluZGV4KQotICAgICAgICA6IG1fZGVxdWUoY29uc3RfY2FzdDxEZXF1ZTxUPio+KGRl
cXVlKSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cisg
ICAgaW5saW5lIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6RGVxdWVJdGVy
YXRvckJhc2UoY29uc3QgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+KiBkZXF1ZSwgc2l6ZV90IGlu
ZGV4KQorICAgICAgICA6IG1fZGVxdWUoY29uc3RfY2FzdDxEZXF1ZTxULCBpbmxpbmVDYXBhY2l0
eT4qPihkZXF1ZSkpCiAgICAgICAgICwgbV9pbmRleChpbmRleCkKICAgICB7CiAgICAgICAgIGFk
ZFRvSXRlcmF0b3JzTGlzdCgpOwogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VD46
OkRlcXVlSXRlcmF0b3JCYXNlKGNvbnN0IEJhc2UmIG90aGVyKQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJh
c2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpEZXF1ZUl0ZXJhdG9yQmFzZShjb25zdCBCYXNlJiBvdGhl
cikKICAgICAgICAgOiBtX2RlcXVlKG90aGVyLm1fZGVxdWUpCiAgICAgICAgICwgbV9pbmRleChv
dGhlci5tX2luZGV4KQogICAgIHsKQEAgLTU5OCw4ICs2MjYsOCBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci0gICAgaW5saW5lIERlcXVlSXRlcmF0b3JCYXNlPFQ+JiBEZXF1ZUl0ZXJhdG9yQmFzZTxU
Pjo6b3BlcmF0b3I9KGNvbnN0IEJhc2UmIG90aGVyKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VCwg
aW5saW5lQ2FwYWNpdHk+JiBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46Om9w
ZXJhdG9yPShjb25zdCBCYXNlJiBvdGhlcikKICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHko
KTsKICAgICAgICAgb3RoZXIuY2hlY2tWYWxpZGl0eSgpOwpAQCAtNjEyLDggKzY0MCw4IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VD46On5EZXF1ZUl0
ZXJhdG9yQmFzZSgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5PgorICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46On5E
ZXF1ZUl0ZXJhdG9yQmFzZSgpCiAgICAgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgcmVtb3Zl
RnJvbUl0ZXJhdG9yc0xpc3QoKTsKQEAgLTYyMSwxNSArNjQ5LDE1IEBAIG5hbWVzcGFjZSBXVEYg
ewogI2VuZGlmCiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUg
Ym9vbCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6aXNFcXVhbChjb25zdCBCYXNlJiBvdGhlcikgY29u
c3QKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAg
aW5saW5lIGJvb2wgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+Ojppc0VxdWFs
KGNvbnN0IEJhc2UmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eShv
dGhlcik7CiAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CiAgICAgfQog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJhdG9y
QmFzZTxUPjo6aW5jcmVtZW50KCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5l
Q2FwYWNpdHk+OjppbmNyZW1lbnQoKQogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwog
ICAgICAgICBBU1NFUlQobV9pbmRleCAhPSBtX2RlcXVlLT5tX2VuZCk7CkBAIC02NDEsOCArNjY5
LDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICB9CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JC
YXNlPFQ+OjpkZWNyZW1lbnQoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVD
YXBhY2l0eT46OmRlY3JlbWVudCgpCiAgICAgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAg
ICAgICAgIEFTU0VSVChtX2luZGV4ICE9IG1fZGVxdWUtPm1fc3RhcnQpOwpAQCAtNjU0LDE2ICs2
ODIsMTYgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICB9
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBUKiBEZXF1ZUl0ZXJhdG9y
QmFzZTxUPjo6YWZ0ZXIoKSBjb25zdAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgVCogRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5l
Q2FwYWNpdHk+OjphZnRlcigpIGNvbnN0CiAgICAgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7
CiAgICAgICAgIEFTU0VSVChtX2luZGV4ICE9IG1fZGVxdWUtPm1fZW5kKTsKICAgICAgICAgcmV0
dXJuICZtX2RlcXVlLT5tX2J1ZmZlci5idWZmZXIoKVttX2luZGV4XTsKICAgICB9CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBUKiBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6
YmVmb3JlKCkgY29uc3QKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+CisgICAgaW5saW5lIFQqIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5
Pjo6YmVmb3JlKCkgY29uc3QKICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAg
ICAgQVNTRVJUKG1faW5kZXggIT0gbV9kZXF1ZS0+bV9zdGFydCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL1ZlY3Rvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9WZWN0b3IuaAppbmRleCA2ZDhkZDRjM2EzNTE3YjA1ZWE1MjA0NTJhYjBkMTY3MWM4Y2RkYTQz
Li5jMjQ1NDNlMmExY2EyOTk5ZWQ0MmVlZmVkOWRhNWM1ZWE3MDFlZGU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1ZlY3Rvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvVmVjdG9yLmgKQEAgLTM5Miw2ICszOTIsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KICAgICBjbGFz
cyBWZWN0b3JCdWZmZXIgOiBwcml2YXRlIFZlY3RvckJ1ZmZlckJhc2U8VD4geworICAgICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShWZWN0b3JCdWZmZXIpOwogICAgIHByaXZhdGU6CiAgICAgICAg
IHR5cGVkZWYgVmVjdG9yQnVmZmVyQmFzZTxUPiBCYXNlOwogICAgIHB1YmxpYzoKQEAgLTQxNCw2
ICs0MTUsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogICAgICAgICB2b2lkIGFsbG9jYXRlQnVmZmVy
KHNpemVfdCBuZXdDYXBhY2l0eSkKICAgICAgICAgeworICAgICAgICAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIEFTU0VSVCghbV9idWZmZXIpIHRvIGNhdGNoIG1pc3VzZS9sZWFrcy4KICAgICAg
ICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IGlubGluZUNhcGFjaXR5KQogICAgICAgICAgICAgICAg
IEJhc2U6OmFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKICAgICAgICAgICAgIGVsc2Ugewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IGI2NzczOWY0ZGNjY2Q2MTQ5NjJlY2U1YjJlMDc5ZjZjMmI0ZmZjMTUuLjhk
ZWUyZWU2NjAzODNkM2UzMzI0NjhkNzZjNWZkOWI5ODNkMjRhMjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNSBAQAorMjAxMS0wMi0yMiAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2VnbWVudGVk
U3RyaW5nIG9wZXJhdG9yPSBhbHdheXMgY2F1c2VzIGEgbWFsbG9jCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTAwNQorCisgICAgICAgIFRlc3RlZCBi
eSBydW5uaW5nIFBlcmZvcm1hbmNlVGVzdHMvUGFyc2VyL3RpbnktaW5uZXJIVE1MCisgICAgICAg
IGFuZCBub3RpY2luZyB0aGF0IEhUTUxTb3VyY2VUcmFja2VyOjpzdGFydCBkb2VzIG5vdCBjYXVz
ZSBhIG1hbGxvYy4KKyAgICAgICAgKE5vdGUgdGhpcyBtZXRob2Qgb2YgdGVzdGluZyB3aWxsIGJy
ZWFrIGlmCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NTAxMSBpcyBldmVyIGZpeGVkIHNvIHRoYXQKKyAgICAgICAgSFRNTFNvdXJjZVRyYWNrZXIgaXMg
ZGlzYWJsZWQgZHVyaW5nIGZyYWdtZW50IHBhcnNpbmcuICBJZiBzbyB0aGVyZSBhcmUKKyAgICAg
ICAgdW5kb3VidGFibHkgbWFueSBvdGhlciB3YXlzIHRvIHRlc3QgdGhpcy4pCisKKyAgICAgICAg
KiBwbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
ZWdtZW50ZWRTdHJpbmc6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRTdHJp
bmc6OnNldEV4Y2x1ZGVMaW5lTnVtYmVycyk6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRT
dHJpbmc6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTZWdtZW50ZWRTdHJpbmc6OnByZXBl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6U2VnbWVudGVkU3RyaW5nOjp0b1N0cmluZyk6CisgICAg
ICAgICogcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuaDoKKwogMjAxMS0wMi0yMiAgSmlh
IFB1ICA8anB1QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWlu
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJp
bmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TZWdtZW50ZWRTdHJpbmcuY3Bw
CmluZGV4IDdjODU5ZGM2OGFiNzVhMjJjZjRhMjQ0MzUyNTFhOWJmMmQ3ZGZiZjcuLjlhYTBhNTZj
MDAyM2JhNmM4N2IzYWZhNzEyYjJiYjU4YWFmNTQ1Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5jcHAKQEAgLTY4LDggKzY4LDggQEAgdW5z
aWduZWQgU2VnbWVudGVkU3RyaW5nOjpsZW5ndGgoKSBjb25zdAogICAgICAgICAgICAgKytsZW5n
dGg7CiAgICAgfQogICAgIGlmIChtX2NvbXBvc2l0ZSkgewotICAgICAgICBEZXF1ZTxTZWdtZW50
ZWRTdWJzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3Vic3RyaW5ncy5iZWdpbigpOwot
ICAgICAgICBEZXF1ZTxTZWdtZW50ZWRTdWJzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlID0gbV9z
dWJzdHJpbmdzLmVuZCgpOworICAgICAgICBTdWJzdHJpbmdEZXF1ZTo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3N1YnN0cmluZ3MuYmVnaW4oKTsKKyAgICAgICAgU3Vic3RyaW5nRGVxdWU6OmNvbnN0
X2l0ZXJhdG9yIGUgPSBtX3N1YnN0cmluZ3MuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdCAhPSBl
OyArK2l0KQogICAgICAgICAgICAgbGVuZ3RoICs9IGl0LT5tX2xlbmd0aDsKICAgICB9CkBAIC04
MCw4ICs4MCw4IEBAIHZvaWQgU2VnbWVudGVkU3RyaW5nOjpzZXRFeGNsdWRlTGluZU51bWJlcnMo
KQogewogICAgIG1fY3VycmVudFN0cmluZy5zZXRFeGNsdWRlTGluZU51bWJlcnMoKTsKICAgICBp
ZiAobV9jb21wb3NpdGUpIHsKLSAgICAgICAgRGVxdWU8U2VnbWVudGVkU3Vic3RyaW5nPjo6aXRl
cmF0b3IgaXQgPSBtX3N1YnN0cmluZ3MuYmVnaW4oKTsKLSAgICAgICAgRGVxdWU8U2VnbWVudGVk
U3Vic3RyaW5nPjo6aXRlcmF0b3IgZSA9IG1fc3Vic3RyaW5ncy5lbmQoKTsKKyAgICAgICAgU3Vi
c3RyaW5nRGVxdWU6Oml0ZXJhdG9yIGl0ID0gbV9zdWJzdHJpbmdzLmJlZ2luKCk7CisgICAgICAg
IFN1YnN0cmluZ0RlcXVlOjppdGVyYXRvciBlID0gbV9zdWJzdHJpbmdzLmVuZCgpOwogICAgICAg
ICBmb3IgKDsgaXQgIT0gZTsgKytpdCkKICAgICAgICAgICAgIGl0LT5zZXRFeGNsdWRlTGluZU51
bWJlcnMoKTsKICAgICB9CkBAIC0xNDgsOCArMTQ4LDggQEAgdm9pZCBTZWdtZW50ZWRTdHJpbmc6
OmFwcGVuZChjb25zdCBTZWdtZW50ZWRTdHJpbmcgJnMpCiAgICAgQVNTRVJUKCFzLmVzY2FwZWQo
KSk7CiAgICAgYXBwZW5kKHMubV9jdXJyZW50U3RyaW5nKTsKICAgICBpZiAocy5tX2NvbXBvc2l0
ZSkgewotICAgICAgICBEZXF1ZTxTZWdtZW50ZWRTdWJzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IHMubV9zdWJzdHJpbmdzLmJlZ2luKCk7Ci0gICAgICAgIERlcXVlPFNlZ21lbnRlZFN1YnN0
cmluZz46OmNvbnN0X2l0ZXJhdG9yIGUgPSBzLm1fc3Vic3RyaW5ncy5lbmQoKTsKKyAgICAgICAg
U3Vic3RyaW5nRGVxdWU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcy5tX3N1YnN0cmluZ3MuYmVnaW4o
KTsKKyAgICAgICAgU3Vic3RyaW5nRGVxdWU6OmNvbnN0X2l0ZXJhdG9yIGUgPSBzLm1fc3Vic3Ry
aW5ncy5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ICE9IGU7ICsraXQpCiAgICAgICAgICAgICBh
cHBlbmQoKml0KTsKICAgICB9CkBAIC0xNjEsOCArMTYxLDggQEAgdm9pZCBTZWdtZW50ZWRTdHJp
bmc6OnByZXBlbmQoY29uc3QgU2VnbWVudGVkU3RyaW5nICZzKQogICAgIEFTU0VSVCghZXNjYXBl
ZCgpKTsKICAgICBBU1NFUlQoIXMuZXNjYXBlZCgpKTsKICAgICBpZiAocy5tX2NvbXBvc2l0ZSkg
ewotICAgICAgICBEZXF1ZTxTZWdtZW50ZWRTdWJzdHJpbmc+Ojpjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yIGl0ID0gcy5tX3N1YnN0cmluZ3MucmJlZ2luKCk7Ci0gICAgICAgIERlcXVlPFNlZ21lbnRl
ZFN1YnN0cmluZz46OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgZSA9IHMubV9zdWJzdHJpbmdzLnJl
bmQoKTsKKyAgICAgICAgU3Vic3RyaW5nRGVxdWU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgaXQg
PSBzLm1fc3Vic3RyaW5ncy5yYmVnaW4oKTsKKyAgICAgICAgU3Vic3RyaW5nRGVxdWU6OmNvbnN0
X3JldmVyc2VfaXRlcmF0b3IgZSA9IHMubV9zdWJzdHJpbmdzLnJlbmQoKTsKICAgICAgICAgZm9y
ICg7IGl0ICE9IGU7ICsraXQpCiAgICAgICAgICAgICBwcmVwZW5kKCppdCk7CiAgICAgfQpAQCAt
MTk2LDggKzE5Niw4IEBAIFN0cmluZyBTZWdtZW50ZWRTdHJpbmc6OnRvU3RyaW5nKCkgY29uc3QK
ICAgICB9CiAgICAgbV9jdXJyZW50U3RyaW5nLmFwcGVuZFRvKHJlc3VsdCk7CiAgICAgaWYgKG1f
Y29tcG9zaXRlKSB7Ci0gICAgICAgIERlcXVlPFNlZ21lbnRlZFN1YnN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9zdWJzdHJpbmdzLmJlZ2luKCk7Ci0gICAgICAgIERlcXVlPFNlZ21lbnRl
ZFN1YnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGUgPSBtX3N1YnN0cmluZ3MuZW5kKCk7CisgICAg
ICAgIFN1YnN0cmluZ0RlcXVlOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3Vic3RyaW5ncy5iZWdp
bigpOworICAgICAgICBTdWJzdHJpbmdEZXF1ZTo6Y29uc3RfaXRlcmF0b3IgZSA9IG1fc3Vic3Ry
aW5ncy5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ICE9IGU7ICsraXQpCiAgICAgICAgICAgICBp
dC0+YXBwZW5kVG8ocmVzdWx0KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9TZWdtZW50ZWRTdHJpbmcuaAppbmRleCAzNzg0YjUwNzY3ODVlOTkxZGJjNjIxOTI3MGMz
NGUxMTYxZjQxZWY3Li5jYTRlYmIzYTQ0MDU2NzhhZjZhNWM2OWE2MDQwYWY0NjRlMmIyMDliIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1NlZ21lbnRlZFN0cmluZy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU2VnbWVudGVkU3RyaW5nLmgKQEAg
LTI2OSwxMyArMjY5LDE3IEBAIHByaXZhdGU6CiAKICAgICBVQ2hhciBtX3B1c2hlZENoYXIxOwog
ICAgIFVDaGFyIG1fcHVzaGVkQ2hhcjI7Ci0gICAgU2VnbWVudGVkU3Vic3RyaW5nIG1fY3VycmVu
dFN0cmluZzsKKyAgICBTZWdtZW50ZWRTdWJzdHJpbmcgbV9jdXJyZW50U3RyaW5nOyAvLyBGSVhN
RTogVGhpcyBtYXkgbm90IGJlIG5lZWRlZCBub3cgdGhhdCBtX3N1YnN0cmluZ3MgaGFzIGFuIGlu
bGluZSBjYXBhY2l0eS4KICAgICBjb25zdCBVQ2hhciogbV9jdXJyZW50Q2hhcjsKICAgICBpbnQg
bV9udW1iZXJPZkNoYXJhY3RlcnNDb25zdW1lZFByaW9yVG9DdXJyZW50U3RyaW5nOwogICAgIGlu
dCBtX251bWJlck9mQ2hhcmFjdGVyc0NvbnN1bWVkUHJpb3JUb0N1cnJlbnRMaW5lOwogICAgIGlu
dCBtX2N1cnJlbnRMaW5lOwotICAgIERlcXVlPFNlZ21lbnRlZFN1YnN0cmluZz4gbV9zdWJzdHJp
bmdzOwotICAgIGJvb2wgbV9jb21wb3NpdGU7CisgICAgLy8gSXQgaXMgdmVyeSBjb21tb24gdG8g
aGF2ZSBvbmUgc3Vic3RyaW5nLCBzbyB3ZSBzdG9yZSBpdCBpbmxpbmUKKyAgICAvLyB0aGlzIHBy
ZXZlbnRzIG9wZXJhdG9yPSBmcm9tIG5lZWRpbmcgdG8gbWFsbG9jIGluIHRoZSBjb21tb24gY2Fz
ZS4KKyAgICAvLyBPdXIgRGVxdWUgZG9lc24ndCB3b3JrIHdpdGggY2FwYWNpdHkgMSwgc28gd2Ug
dXNlIGF0IGxlYXN0IGNhcGFjaXR5IDIuCisgICAgdHlwZWRlZiBEZXF1ZTxTZWdtZW50ZWRTdWJz
dHJpbmcsIDI+IFN1YnN0cmluZ0RlcXVlOworICAgIFN1YnN0cmluZ0RlcXVlIG1fc3Vic3RyaW5n
czsKKyAgICBib29sIG1fY29tcG9zaXRlOyAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWx3YXlzIGJl
IGVxdWFsIHRvICFtX3N1YnN0cmluZ3MuaXNFbXB0eSgpLgogICAgIGJvb2wgbV9jbG9zZWQ7CiB9
OwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>