<?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>130975</bug_id>
          
          <creation_ts>2014-03-31 11:39:48 -0700</creation_ts>
          <short_desc>[CSS Shapes] Simplify Polygon implementation</short_desc>
          <delta_ts>2014-04-04 10:35:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>130740</dependson>
          <blocked>98664</blocked>
    
    <blocked>112917</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hans Muller">giles_joplin</reporter>
          <assigned_to name="Hans Muller">giles_joplin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kling</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>995927</commentid>
    <comment_count>0</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2014-03-31 11:39:48 -0700</bug_when>
    <thetext>This change is similar to https://bugs.webkit.org/show_bug.cgi?id=130916

The final CSS Shapes level 1 spec (http://dev.w3.org/csswg/css-shapes-1/) does not include shape-inside only allows shape-outside to be specified on floats.  In light of this, the PolygonShape class can be substantially simplified.

The support for shape-inside has already been removed, see https://bugs.webkit.org/show_bug.cgi?id=130740

A detailed look at the PolygonShape simplification can be found here: http://hansmuller-webkit.blogspot.com/2014/03/a-simpler-algorithm-for-css-shapes.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996923</commentid>
    <comment_count>1</comment_count>
      <attachid>228447</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2014-04-02 17:05:46 -0700</bug_when>
    <thetext>Created attachment 228447
Patch

Only floats can specify shape-outside. For polygon shape values, the problem of finding the left and right exclusion edges reduces to finding the X axis limits of the polygon edges that overlap a particular line. This is a much simpler version of the problem that PolygonShape was designed for, and so the implementation can also be simplified. There&apos;s more about the new algorithm in http://hansmuller-webkit.blogspot.com/2014/03/a-simpler-algorithm-for-css-shapes.html.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997608</commentid>
    <comment_count>2</comment_count>
      <attachid>228447</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-04-04 10:13:33 -0700</bug_when>
    <thetext>Comment on attachment 228447
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997618</commentid>
    <comment_count>3</comment_count>
      <attachid>228447</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-04 10:35:47 -0700</bug_when>
    <thetext>Comment on attachment 228447
Patch

Clearing flags on attachment: 228447

Committed r166790: &lt;http://trac.webkit.org/changeset/166790&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997619</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-04 10:35:51 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228447</attachid>
            <date>2014-04-02 17:05:46 -0700</date>
            <delta_ts>2014-04-04 10:35:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>27948</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2OTdlZjA5Li5lZTg1NWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTQtMDQtMDIgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAgICAg
ICAgW0NTUyBTaGFwZXNdIFNpbXBsaWZ5IFBvbHlnb24gaW1wbGVtZW50YXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDk3NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE9ubHkgZmxvYXRzIGNhbiBz
cGVjaWZ5IHNoYXBlLW91dHNpZGUuIEZvciBwb2x5Z29uIHNoYXBlLW91dHNpZGUgdmFsdWVzLCB0
aGUgcHJvYmxlbQorICAgICAgICBvZiBmaW5kaW5nIHRoZSBsZWZ0IGFuZCByaWdodCBleGNsdXNp
b24gZWRnZXMgcmVkdWNlcyB0byBmaW5kaW5nIHRoZSBYIGF4aXMKKyAgICAgICAgbGltaXRzIG9m
IHRoZSBwb2x5Z29uIGVkZ2VzIHRoYXQgb3ZlcmxhcCBhIHBhcnRpY3VsYXIgbGF5b3V0IGxpbmUu
IFRoaXMgaXMgYSBtdWNoCisgICAgICAgIHNpbXBsZXIgdmVyc2lvbiBvZiB0aGUgcHJvYmxlbSB0
aGF0IFBvbHlnb25TaGFwZSB3YXMgb3JpZ2luYWxseSBkZXNpZ25lZCBmb3IsIGFuZCBzbworICAg
ICAgICB0aGUgaW1wbGVtZW50YXRpb24gY2FuIGFsc28gYmUgc2ltcGxpZmllZC4gVGhlcmUncyBt
b3JlIGFib3V0IHRoZSBuZXcgYWxnb3JpdGhtIGluCisgICAgICAgIGh0dHA6Ly9oYW5zbXVsbGVy
LXdlYmtpdC5ibG9nc3BvdC5jb20vMjAxNC8wMy9hLXNpbXBsZXItYWxnb3JpdGhtLWZvci1jc3Mt
c2hhcGVzLmh0bWwuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBzaW5jZSBmdW5jdGlvbmFsaXR5
IHdhcyBvbmx5IHJlbW92ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6b3ZlcmxhcHNZUmFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RmxvYXRSZWN0OjpvdmVybGFwc1hSYW5nZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2V0
UG9seWdvbkVkZ2U6OnhJbnRlcmNlcHQpOgorICAgICAgICAoV2ViQ29yZTo6Y2lyY2xlWEludGVy
Y2VwdCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzZXRQb2x5Z29uRWRnZTo6Y2xpcHBlZEVkZ2VY
UmFuZ2UpOiBYIGF4aXMgZXh0ZW50IG9mIHRoZSBlZGdlIGNsaXBwZWQgdG8gYSB2ZXJ0aWNhbCBp
bnRlcnZhbC4KKyAgICAgICAgKFdlYkNvcmU6OmNsaXBwZWRDaXJjbGVYUmFuZ2UpOiBYIGF4aXMg
ZXh0ZW50IG9mIGEgY2lyY2xlIGNsaXBwZWQgdG8gYSB2ZXJ0aWNhbCBpbnRlcnZhbC4KKyAgICAg
ICAgKFdlYkNvcmU6OlBvbHlnb25TaGFwZTo6c2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6UG9seWdvblNoYXBlOjpnZXRFeGNsdWRlZEludGVydmFscyk6
CisgICAgICAgIChXZWJDb3JlOjpQb2x5Z29uU2hhcGU6OmJ1aWxkRGlzcGxheVBhdGhzKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6T2Zmc2V0UG9seWdvbkVkZ2U6Ok9mZnNldFBvbHlnb25FZGdlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok9mZnNldFBvbHlnb25FZGdlOjppc1dpdGhpbllSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpPZmZzZXRQb2x5Z29uRWRnZTo6b3ZlcmxhcHNZUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UG9seWdvblNoYXBlOjpQb2x5Z29uU2hhcGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMv
U2hhcGVJbnRlcnZhbC5oOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVJbnRlcnZhbDo6aXNFbXB0
eSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZUludGVydmFsOjp1bml0ZSk6CisKIDIwMTQtMDQt
MDIgIFN0ZXBoYW5pZSBMZXdpcyAgPHNsZXdpc0BhcHBsZS5jb20+CiAKICAgICAgICAgUm9sbCBv
dXQgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTY2MTQ0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCmluZGV4IGQzNDZkZDUuLmFkZjg5YzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCkBAIC0x
NDIsNiArMTQyLDkgQEAgcHVibGljOgogICAgIGJvb2wgY29udGFpbnMoZmxvYXQgcHgsIGZsb2F0
IHB5KSBjb25zdAogICAgICAgICB7IHJldHVybiBweCA+PSB4KCkgJiYgcHggPD0gbWF4WCgpICYm
IHB5ID49IHkoKSAmJiBweSA8PSBtYXhZKCk7IH0KIAorICAgIGJvb2wgb3ZlcmxhcHNZUmFuZ2Uo
ZmxvYXQgeTEsIGZsb2F0IHkyKSBjb25zdCB7IHJldHVybiAhaXNFbXB0eSgpICYmIHkyID49IHkx
ICYmIHkyID49IHkoKSAmJiB5MSA8PSBtYXhZKCk7IH0KKyAgICBib29sIG92ZXJsYXBzWFJhbmdl
KGZsb2F0IHgxLCBmbG9hdCB4MikgY29uc3QgeyByZXR1cm4gIWlzRW1wdHkoKSAmJiB4MiA+PSB4
MSAmJiB4MiA+PSB4KCkgJiYgeDEgPD0gbWF4WCgpOyB9CisKICAgICB2b2lkIGluZmxhdGVYKGZs
b2F0IGR4KSB7CiAgICAgICAgIG1fbG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsK
ICAgICAgICAgbV9zaXplLnNldFdpZHRoKG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25TaGFwZS5jcHAKaW5kZXgg
ZmJiN2UwNi4uMzM5ZTNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9Qb2x5Z29uU2hhcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFw
ZXMvUG9seWdvblNoYXBlLmNwcApAQCAtMzAsNTkgKzMwLDEwIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiUG9seWdvblNoYXBlLmgiCiAKLSNpbmNsdWRlICJTaGFwZUludGVydmFs
LmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1lbnVtIEVkZ2VJbnRlcnNlY3Rpb25UeXBlIHsKLSAgICBOb3JtYWwsCi0gICAgVmVydGV4TWlu
WSwKLSAgICBWZXJ0ZXhNYXhZLAotICAgIFZlcnRleFlCb3RoCi19OwotCi1zdHJ1Y3QgRWRnZUlu
dGVyc2VjdGlvbiB7Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZTsKLSAgICBGbG9h
dFBvaW50IHBvaW50OwotICAgIEVkZ2VJbnRlcnNlY3Rpb25UeXBlIHR5cGU7Ci19OwotCi1zdGF0
aWMgYm9vbCBjb21wdXRlWEludGVyc2VjdGlvbihjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdl
UG9pbnRlciwgZmxvYXQgeSwgRWRnZUludGVyc2VjdGlvbiYgcmVzdWx0KQotewotICAgIGNvbnN0
IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UgPSAqZWRnZVBvaW50ZXI7Ci0KLSAgICBpZiAoZWRnZS5t
aW5ZKCkgPiB5IHx8IGVkZ2UubWF4WSgpIDwgeSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSA9IGVkZ2UudmVydGV4MSgpOwotICAgIGNvbnN0
IEZsb2F0UG9pbnQmIHZlcnRleDIgPSBlZGdlLnZlcnRleDIoKTsKLSAgICBmbG9hdCBkeSA9IHZl
cnRleDIueSgpIC0gdmVydGV4MS55KCk7Ci0KLSAgICBmbG9hdCBpbnRlcnNlY3Rpb25YOwotICAg
IEVkZ2VJbnRlcnNlY3Rpb25UeXBlIGludGVyc2VjdGlvblR5cGU7Ci0KLSAgICBpZiAoIWR5KSB7
Ci0gICAgICAgIGludGVyc2VjdGlvblR5cGUgPSBWZXJ0ZXhZQm90aDsKLSAgICAgICAgaW50ZXJz
ZWN0aW9uWCA9IGVkZ2UubWluWCgpOwotICAgIH0gZWxzZSBpZiAoeSA9PSBlZGdlLm1pblkoKSkg
ewotICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gVmVydGV4TWluWTsKLSAgICAgICAgaW50ZXJz
ZWN0aW9uWCA9ICh2ZXJ0ZXgxLnkoKSA8IHZlcnRleDIueSgpKSA/IHZlcnRleDEueCgpIDogdmVy
dGV4Mi54KCk7Ci0gICAgfSBlbHNlIGlmICh5ID09IGVkZ2UubWF4WSgpKSB7Ci0gICAgICAgIGlu
dGVyc2VjdGlvblR5cGUgPSBWZXJ0ZXhNYXhZOwotICAgICAgICBpbnRlcnNlY3Rpb25YID0gKHZl
cnRleDEueSgpID4gdmVydGV4Mi55KCkpID8gdmVydGV4MS54KCkgOiB2ZXJ0ZXgyLngoKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpbnRlcnNlY3Rpb25UeXBlID0gTm9ybWFsOwotICAgICAgICBp
bnRlcnNlY3Rpb25YID0gKCh5IC0gdmVydGV4MS55KCkpICogKHZlcnRleDIueCgpIC0gdmVydGV4
MS54KCkpIC8gZHkpICsgdmVydGV4MS54KCk7Ci0gICAgfQotCi0gICAgcmVzdWx0LmVkZ2UgPSBl
ZGdlUG9pbnRlcjsKLSAgICByZXN1bHQudHlwZSA9IGludGVyc2VjdGlvblR5cGU7Ci0gICAgcmVz
dWx0LnBvaW50LnNldChpbnRlcnNlY3Rpb25YLCB5KTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
CiBzdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBpbndhcmRFZGdlTm9ybWFsKGNvbnN0IEZsb2F0UG9s
eWdvbkVkZ2UmIGVkZ2UpCiB7CiAgICAgRmxvYXRTaXplIGVkZ2VEZWx0YSA9IGVkZ2UudmVydGV4
MigpIC0gZWRnZS52ZXJ0ZXgxKCk7CkBAIC05OSwyNzAgKzUwLDExMSBAQCBzdGF0aWMgaW5saW5l
IEZsb2F0U2l6ZSBvdXR3YXJkRWRnZU5vcm1hbChjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdl
KQogICAgIHJldHVybiAtaW53YXJkRWRnZU5vcm1hbChlZGdlKTsKIH0KIAotc3RhdGljIGlubGlu
ZSB2b2lkIGFwcGVuZEFyYyhWZWN0b3I8RmxvYXRQb2ludD4mIHZlcnRpY2VzLCBjb25zdCBGbG9h
dFBvaW50JiBhcmNDZW50ZXIsIGZsb2F0IGFyY1JhZGl1cywgY29uc3QgRmxvYXRQb2ludCYgc3Rh
cnRBcmNWZXJ0ZXgsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZEFyY1ZlcnRleCwgYm9vbCBwYWRkaW5n
KQotewotICAgIGZsb2F0IHN0YXJ0QW5nbGUgPSBhdGFuMihzdGFydEFyY1ZlcnRleC55KCkgLSBh
cmNDZW50ZXIueSgpLCBzdGFydEFyY1ZlcnRleC54KCkgLSBhcmNDZW50ZXIueCgpKTsKLSAgICBm
bG9hdCBlbmRBbmdsZSA9IGF0YW4yKGVuZEFyY1ZlcnRleC55KCkgLSBhcmNDZW50ZXIueSgpLCBl
bmRBcmNWZXJ0ZXgueCgpIC0gYXJjQ2VudGVyLngoKSk7Ci0gICAgY29uc3QgZmxvYXQgdHdvUEkg
PSBwaUZsb2F0ICogMjsKLSAgICBpZiAoc3RhcnRBbmdsZSA8IDApCi0gICAgICAgIHN0YXJ0QW5n
bGUgKz0gdHdvUEk7Ci0gICAgaWYgKGVuZEFuZ2xlIDwgMCkKLSAgICAgICAgZW5kQW5nbGUgKz0g
dHdvUEk7Ci0gICAgZmxvYXQgYW5nbGUgPSAoc3RhcnRBbmdsZSA+IGVuZEFuZ2xlKSA/IChzdGFy
dEFuZ2xlIC0gZW5kQW5nbGUpIDogKHN0YXJ0QW5nbGUgKyB0d29QSSAtIGVuZEFuZ2xlKTsKLSAg
ICBjb25zdCBmbG9hdCBhcmNTZWdtZW50Q291bnQgPSA2OyAvLyBBbiBldmVuIG51bWJlciBzbyB0
aGF0IG9uZSBhcmMgdmVydGV4IHdpbGwgYmUgZWFjdGx5IGFyY1JhZGl1cyBmcm9tIGFyY0NlbnRl
ci4KLSAgICBmbG9hdCBhcmNTZWdtZW50QW5nbGUgPSAgKChwYWRkaW5nKSA/IC1hbmdsZSA6IHR3
b1BJIC0gYW5nbGUpIC8gYXJjU2VnbWVudENvdW50OwotCi0gICAgdmVydGljZXMuYXBwZW5kKHN0
YXJ0QXJjVmVydGV4KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgYXJjU2VnbWVudENv
dW50OyArK2kpIHsKLSAgICAgICAgZmxvYXQgYW5nbGUgPSBzdGFydEFuZ2xlICsgYXJjU2VnbWVu
dEFuZ2xlICogaTsKLSAgICAgICAgdmVydGljZXMuYXBwZW5kKGFyY0NlbnRlciArIEZsb2F0UG9p
bnQoY29zKGFuZ2xlKSAqIGFyY1JhZGl1cywgc2luKGFuZ2xlKSAqIGFyY1JhZGl1cykpOwotICAg
IH0KLSAgICB2ZXJ0aWNlcy5hcHBlbmQoZW5kQXJjVmVydGV4KTsKLX0KLQotc3RhdGljIGlubGlu
ZSB2b2lkIHNuYXBWZXJ0aWNlc1RvTGF5b3V0VW5pdEdyaWQoVmVjdG9yPEZsb2F0UG9pbnQ+JiB2
ZXJ0aWNlcykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmVydGljZXMuc2l6ZSgp
OyArK2kpCi0gICAgICAgIHZlcnRpY2VzW2ldLnNldChMYXlvdXRVbml0KHZlcnRpY2VzW2ldLngo
KSkudG9GbG9hdCgpLCBMYXlvdXRVbml0KHZlcnRpY2VzW2ldLnkoKSkudG9GbG9hdCgpKTsKLX0K
LQotc3RhdGljIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRQb2x5Z29uPiBjb21wdXRlU2hh
cGVNYXJnaW5Cb3VuZHMoY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCBtYXJnaW4s
IFdpbmRSdWxlIGZpbGxSdWxlKQorZmxvYXQgT2Zmc2V0UG9seWdvbkVkZ2U6OnhJbnRlcmNlcHQo
ZmxvYXQgeSkgY29uc3QKIHsKLSAgICBhdXRvIG1hcmdpblZlcnRpY2VzID0gc3RkOjptYWtlX3Vu
aXF1ZTxWZWN0b3I8RmxvYXRQb2ludD4+KCk7Ci0gICAgRmxvYXRQb2ludCBpbnRlcnNlY3Rpb247
CisgICAgQVNTRVJUKHkgPj0gbWluWSgpICYmIHkgPD0gbWF4WSgpKTsKIAotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwb2x5Z29uLm51bWJlck9mRWRnZXMoKTsgKytpKSB7Ci0gICAgICAg
IGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHRoaXNFZGdlID0gcG9seWdvbi5lZGdlQXQoaSk7Ci0g
ICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHByZXZFZGdlID0gdGhpc0VkZ2UucHJldmlv
dXNFZGdlKCk7Ci0gICAgICAgIE9mZnNldFBvbHlnb25FZGdlIHRoaXNPZmZzZXRFZGdlKHRoaXNF
ZGdlLCBvdXR3YXJkRWRnZU5vcm1hbCh0aGlzRWRnZSkgKiBtYXJnaW4pOwotICAgICAgICBPZmZz
ZXRQb2x5Z29uRWRnZSBwcmV2T2Zmc2V0RWRnZShwcmV2RWRnZSwgb3V0d2FyZEVkZ2VOb3JtYWwo
cHJldkVkZ2UpICogbWFyZ2luKTsKKyAgICBpZiAodmVydGV4MSgpLnkoKSA9PSB2ZXJ0ZXgyKCku
eSgpIHx8IHZlcnRleDEoKS54KCkgPT0gdmVydGV4MigpLngoKSkKKyAgICAgICAgcmV0dXJuIG1p
blgoKTsKKyAgICBpZiAoeSA9PSBtaW5ZKCkpCisgICAgICAgIHJldHVybiB2ZXJ0ZXgxKCkueSgp
IDwgdmVydGV4MigpLnkoKSA/IHZlcnRleDEoKS54KCkgOiB2ZXJ0ZXgyKCkueCgpOworICAgIGlm
ICh5ID09IG1heFkoKSkKKyAgICAgICAgcmV0dXJuIHZlcnRleDEoKS55KCkgPiB2ZXJ0ZXgyKCku
eSgpID8gdmVydGV4MSgpLngoKSA6IHZlcnRleDIoKS54KCk7CiAKLSAgICAgICAgaWYgKHByZXZP
ZmZzZXRFZGdlLmludGVyc2VjdGlvbih0aGlzT2Zmc2V0RWRnZSwgaW50ZXJzZWN0aW9uKSkKLSAg
ICAgICAgICAgIG1hcmdpblZlcnRpY2VzLT5hcHBlbmQoaW50ZXJzZWN0aW9uKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgYXBwZW5kQXJjKCptYXJnaW5WZXJ0aWNlcywgdGhpc0VkZ2UudmVy
dGV4MSgpLCBtYXJnaW4sIHByZXZPZmZzZXRFZGdlLnZlcnRleDIoKSwgdGhpc09mZnNldEVkZ2Uu
dmVydGV4MSgpLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgc25hcFZlcnRpY2VzVG9MYXlvdXRVbml0
R3JpZCgqbWFyZ2luVmVydGljZXMpOwotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEZsb2F0
UG9seWdvbj4oc3RkOjptb3ZlKG1hcmdpblZlcnRpY2VzKSwgZmlsbFJ1bGUpOworICAgIHJldHVy
biB2ZXJ0ZXgxKCkueCgpICsgKCh5IC0gdmVydGV4MSgpLnkoKSkgKiAodmVydGV4MigpLngoKSAt
IHZlcnRleDEoKS54KCkpIC8gKHZlcnRleDIoKS55KCkgLSB2ZXJ0ZXgxKCkueSgpKSk7CiB9CiAK
LQotY29uc3QgRmxvYXRQb2x5Z29uJiBQb2x5Z29uU2hhcGU6OnNoYXBlTWFyZ2luQm91bmRzKCkg
Y29uc3QKK0Zsb2F0U2hhcGVJbnRlcnZhbCBPZmZzZXRQb2x5Z29uRWRnZTo6Y2xpcHBlZEVkZ2VY
UmFuZ2UoZmxvYXQgeTEsIGZsb2F0IHkyKSBjb25zdAogewotICAgIEFTU0VSVChzaGFwZU1hcmdp
bigpID49IDApOwotICAgIGlmICghc2hhcGVNYXJnaW4oKSB8fCBtX3BvbHlnb24uaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gbV9wb2x5Z29uOworICAgIGlmICghb3ZlcmxhcHNZUmFuZ2UoeTEs
IHkyKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0U2hhcGVJbnRlcnZhbCgpOwogCi0gICAgaWYgKCFt
X21hcmdpbkJvdW5kcykKLSAgICAgICAgbV9tYXJnaW5Cb3VuZHMgPSBjb21wdXRlU2hhcGVNYXJn
aW5Cb3VuZHMobV9wb2x5Z29uLCBzaGFwZU1hcmdpbigpLCBtX3BvbHlnb24uZmlsbFJ1bGUoKSk7
CisgICAgaWYgKGlzV2l0aGluWVJhbmdlKHkxLCB5MikpCisgICAgICAgIHJldHVybiBGbG9hdFNo
YXBlSW50ZXJ2YWwobWluWCgpLCBtYXhYKCkpOwogCi0gICAgcmV0dXJuICptX21hcmdpbkJvdW5k
czsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGdldFZlcnRleEludGVyc2VjdGlvblZlcnRpY2Vz
KGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbiwgRmxvYXRQb2ludCYgcHJldlZl
cnRleCwgRmxvYXRQb2ludCYgdGhpc1ZlcnRleCwgRmxvYXRQb2ludCYgbmV4dFZlcnRleCkKLXsK
LSAgICBpZiAoaW50ZXJzZWN0aW9uLnR5cGUgIT0gVmVydGV4TWluWSAmJiBpbnRlcnNlY3Rpb24u
dHlwZSAhPSBWZXJ0ZXhNYXhZKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gQ2xpcCB0
aGUgZWRnZSBsaW5lIHNlZ21lbnQgdG8gdGhlIHZlcnRpY2FsIHJhbmdlIHkxLHkyIGFuZCB0aGVu
IHJldHVybgorICAgIC8vIHRoZSBjbGlwcGVkIGxpbmUgc2VnbWVudCdzIGhvcml6b250YWwgcmFu
Z2UuCiAKLSAgICBBU1NFUlQoaW50ZXJzZWN0aW9uLmVkZ2UgJiYgaW50ZXJzZWN0aW9uLmVkZ2Ut
PnBvbHlnb24oKSk7Ci0gICAgY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uID0gKihpbnRlcnNl
Y3Rpb24uZWRnZS0+cG9seWdvbigpKTsKLSAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiB0aGlz
RWRnZSA9ICooaW50ZXJzZWN0aW9uLmVkZ2UpOwotCi0gICAgaWYgKChpbnRlcnNlY3Rpb24udHlw
ZSA9PSBWZXJ0ZXhNaW5ZICYmICh0aGlzRWRnZS52ZXJ0ZXgxKCkueSgpIDwgdGhpc0VkZ2UudmVy
dGV4MigpLnkoKSkpCi0gICAgICAgIHx8IChpbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNYXhZ
ICYmICh0aGlzRWRnZS52ZXJ0ZXgxKCkueSgpID4gdGhpc0VkZ2UudmVydGV4MigpLnkoKSkpKSB7
Ci0gICAgICAgIHByZXZWZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLnByZXZpb3Vz
RWRnZSgpLnZlcnRleEluZGV4MSgpKTsKLSAgICAgICAgdGhpc1ZlcnRleCA9IHBvbHlnb24udmVy
dGV4QXQodGhpc0VkZ2UudmVydGV4SW5kZXgxKCkpOwotICAgICAgICBuZXh0VmVydGV4ID0gcG9s
eWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS52ZXJ0ZXhJbmRleDIoKSk7CisgICAgRmxvYXRQb2ludCBt
aW5ZVmVydGV4OworICAgIEZsb2F0UG9pbnQgbWF4WVZlcnRleDsKKyAgICBpZiAodmVydGV4MSgp
LnkoKSA8IHZlcnRleDIoKS55KCkpIHsKKyAgICAgICAgbWluWVZlcnRleCA9IHZlcnRleDEoKTsK
KyAgICAgICAgbWF4WVZlcnRleCA9IHZlcnRleDIoKTsKICAgICB9IGVsc2UgewotICAgICAgICBw
cmV2VmVydGV4ID0gcG9seWdvbi52ZXJ0ZXhBdCh0aGlzRWRnZS52ZXJ0ZXhJbmRleDEoKSk7Ci0g
ICAgICAgIHRoaXNWZXJ0ZXggPSBwb2x5Z29uLnZlcnRleEF0KHRoaXNFZGdlLnZlcnRleEluZGV4
MigpKTsKLSAgICAgICAgbmV4dFZlcnRleCA9IHBvbHlnb24udmVydGV4QXQodGhpc0VkZ2UubmV4
dEVkZ2UoKS52ZXJ0ZXhJbmRleDIoKSk7CisgICAgICAgIG1pbllWZXJ0ZXggPSB2ZXJ0ZXgyKCk7
CisgICAgICAgIG1heFlWZXJ0ZXggPSB2ZXJ0ZXgxKCk7CiAgICAgfQotCi0gICAgcmV0dXJuIHRy
dWU7CisgICAgZmxvYXQgeEZvclkxID0gKG1pbllWZXJ0ZXgueSgpIDwgeTEpID8geEludGVyY2Vw
dCh5MSkgOiBtaW5ZVmVydGV4LngoKTsKKyAgICBmbG9hdCB4Rm9yWTIgPSAobWF4WVZlcnRleC55
KCkgPiB5MikgPyB4SW50ZXJjZXB0KHkyKSA6IG1heFlWZXJ0ZXgueCgpOworICAgIHJldHVybiBG
bG9hdFNoYXBlSW50ZXJ2YWwoc3RkOjptaW4oeEZvclkxLCB4Rm9yWTIpLCBzdGQ6Om1heCh4Rm9y
WTEsIHhGb3JZMikpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgYXBwZW5kSW50ZXJ2YWxYKGZs
b2F0IHgsIGJvb2wgaW5zaWRlLCBGbG9hdFNoYXBlSW50ZXJ2YWxzJiByZXN1bHQpCitzdGF0aWMg
ZmxvYXQgY2lyY2xlWEludGVyY2VwdChmbG9hdCB5LCBmbG9hdCByYWRpdXMpCiB7Ci0gICAgaWYg
KCFpbnNpZGUpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoRmxvYXRTaGFwZUludGVydmFsKHgsIHgp
KTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdC5sYXN0KCkuc2V0WDIoeCk7Ci0KLSAgICByZXR1
cm4gIWluc2lkZTsKKyAgICBBU1NFUlQocmFkaXVzID4gMCk7CisgICAgcmV0dXJuIHJhZGl1cyAq
IHNxcnQoMSAtICh5ICogeSkgLyAocmFkaXVzICogcmFkaXVzKSk7CiB9CiAKLXN0YXRpYyBib29s
IGNvbXBhcmVFZGdlSW50ZXJzZWN0aW9uWChjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiBpbnRlcnNl
Y3Rpb24xLCBjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiBpbnRlcnNlY3Rpb24yKQorc3RhdGljIEZs
b2F0U2hhcGVJbnRlcnZhbCBjbGlwcGVkQ2lyY2xlWFJhbmdlKGNvbnN0IEZsb2F0UG9pbnQmIGNl
bnRlciwgZmxvYXQgcmFkaXVzLCBmbG9hdCB5MSwgZmxvYXQgeTIpCiB7Ci0gICAgZmxvYXQgeDEg
PSBpbnRlcnNlY3Rpb24xLnBvaW50LngoKTsKLSAgICBmbG9hdCB4MiA9IGludGVyc2VjdGlvbjIu
cG9pbnQueCgpOwotICAgIHJldHVybiAoeDEgPT0geDIpID8gaW50ZXJzZWN0aW9uMS50eXBlIDwg
aW50ZXJzZWN0aW9uMi50eXBlIDogeDEgPCB4MjsKLX0KLQotc3RhdGljIHZvaWQgY29tcHV0ZVhJ
bnRlcnNlY3Rpb25zKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgeSwgYm9vbCBp
c01pblksIEZsb2F0U2hhcGVJbnRlcnZhbHMmIHJlc3VsdCkKLXsKLSAgICBWZWN0b3I8Y29uc3Qg
RmxvYXRQb2x5Z29uRWRnZSo+IGVkZ2VzOwotICAgIGlmICghcG9seWdvbi5vdmVybGFwcGluZ0Vk
Z2VzKHksIHksIGVkZ2VzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPEVkZ2VJbnRl
cnNlY3Rpb24+IGludGVyc2VjdGlvbnM7Ci0gICAgRWRnZUludGVyc2VjdGlvbiBpbnRlcnNlY3Rp
b247Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGlmIChjb21wdXRlWEludGVyc2VjdGlvbihlZGdlc1tpXSwgeSwgaW50ZXJzZWN0aW9u
KSAmJiBpbnRlcnNlY3Rpb24udHlwZSAhPSBWZXJ0ZXhZQm90aCkKLSAgICAgICAgICAgIGludGVy
c2VjdGlvbnMuYXBwZW5kKGludGVyc2VjdGlvbik7Ci0gICAgfQotCi0gICAgaWYgKGludGVyc2Vj
dGlvbnMuc2l6ZSgpIDwgMikKLSAgICAgICAgcmV0dXJuOworICAgIGlmICh5MSA+IGNlbnRlci55
KCkgKyByYWRpdXMgfHwgeTIgPCBjZW50ZXIueSgpIC0gcmFkaXVzKQorICAgICAgICByZXR1cm4g
RmxvYXRTaGFwZUludGVydmFsKCk7CiAKLSAgICBzdGQ6OnNvcnQoaW50ZXJzZWN0aW9ucy5iZWdp
bigpLCBpbnRlcnNlY3Rpb25zLmVuZCgpLCBXZWJDb3JlOjpjb21wYXJlRWRnZUludGVyc2VjdGlv
blgpOworICAgIGlmIChjZW50ZXIueSgpID49IHkxICYmIGNlbnRlci55KCkgPD0geTIpCisgICAg
ICAgIHJldHVybiBGbG9hdFNoYXBlSW50ZXJ2YWwoY2VudGVyLngoKSAtIHJhZGl1cywgY2VudGVy
LngoKSArIHJhZGl1cyk7CiAKLSAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgaW50IHdpbmRD
b3VudCA9IDA7Ci0gICAgYm9vbCBpbnNpZGUgPSBmYWxzZTsKKyAgICAvLyBDbGlwIHRoZSBjaXJj
bGUgdG8gdGhlIHZlcnRpY2FsIHJhbmdlIHkxLHkyIGFuZCByZXR1cm4gdGhlIGV4dGVudCBvZiB0
aGUgY2xpcHBlZCBjaXJjbGUncworICAgIC8vIHByb2plY3Rpb24gb24gdGhlIFggYXhpcwogCi0g
ICAgd2hpbGUgKGluZGV4IDwgaW50ZXJzZWN0aW9ucy5zaXplKCkpIHsKLSAgICAgICAgY29uc3Qg
RWRnZUludGVyc2VjdGlvbiYgdGhpc0ludGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbnNbaW5kZXhd
OwotICAgICAgICBpZiAoaW5kZXggKyAxIDwgaW50ZXJzZWN0aW9ucy5zaXplKCkpIHsKLSAgICAg
ICAgICAgIGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIG5leHRJbnRlcnNlY3Rpb24gPSBpbnRlcnNl
Y3Rpb25zW2luZGV4ICsgMV07Ci0gICAgICAgICAgICBpZiAoKHRoaXNJbnRlcnNlY3Rpb24ucG9p
bnQueCgpID09IG5leHRJbnRlcnNlY3Rpb24ucG9pbnQueCgpKSAmJiAodGhpc0ludGVyc2VjdGlv
bi50eXBlID09IFZlcnRleE1pblkgfHwgdGhpc0ludGVyc2VjdGlvbi50eXBlID09IFZlcnRleE1h
eFkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXNJbnRlcnNlY3Rpb24udHlwZSA9PSBuZXh0
SW50ZXJzZWN0aW9uLnR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCBwYWlycyBv
ZiBpbnRlcnNlY3Rpb25zIHdob3NlIHR5cGVzIGFyZSBWZXJ0ZXhNYXhZLFZlcnRleE1heFkgYW5k
IFZlcnRleE1pblksVmVydGV4TWluWS4KLSAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMjsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNl
IHBhaXJzIG9mIGludGVyc2VjdGlvbnMgd2hvc2UgdHlwZXMgYXJlIFZlcnRleE1pblksVmVydGV4
TWF4WSBvciBWZXJ0ZXhNYXhZLFZlcnRleE1pblkgd2l0aCBvbmUgaW50ZXJzZWN0aW9uLgotICAg
ICAgICAgICAgICAgICAgICArK2luZGV4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wg
ZWRnZUNyb3NzaW5nID0gdGhpc0ludGVyc2VjdGlvbi50eXBlID09IE5vcm1hbDsKLSAgICAgICAg
aWYgKCFlZGdlQ3Jvc3NpbmcpIHsKLSAgICAgICAgICAgIEZsb2F0UG9pbnQgcHJldlZlcnRleDsK
LSAgICAgICAgICAgIEZsb2F0UG9pbnQgdGhpc1ZlcnRleDsKLSAgICAgICAgICAgIEZsb2F0UG9p
bnQgbmV4dFZlcnRleDsKLQotICAgICAgICAgICAgaWYgKGdldFZlcnRleEludGVyc2VjdGlvblZl
cnRpY2VzKHRoaXNJbnRlcnNlY3Rpb24sIHByZXZWZXJ0ZXgsIHRoaXNWZXJ0ZXgsIG5leHRWZXJ0
ZXgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5leHRWZXJ0ZXgueSgpID09IHkpCi0gICAgICAg
ICAgICAgICAgICAgIGVkZ2VDcm9zc2luZyA9IChpc01pblkpID8gcHJldlZlcnRleC55KCkgPiB5
IDogcHJldlZlcnRleC55KCkgPCB5OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByZXZWZXJ0
ZXgueSgpID09IHkpCi0gICAgICAgICAgICAgICAgICAgIGVkZ2VDcm9zc2luZyA9IChpc01pblkp
ID8gbmV4dFZlcnRleC55KCkgPiB5IDogbmV4dFZlcnRleC55KCkgPCB5OwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZWRnZUNyb3NzaW5nID0gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlZGdlQ3Jvc3NpbmcgJiYgcG9seWdv
bi5maWxsUnVsZSgpID09IFJVTEVfTk9OWkVSTykgewotICAgICAgICAgICAgY29uc3QgRmxvYXRQ
b2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSAqdGhpc0ludGVyc2VjdGlvbi5lZGdlOwotICAgICAgICAg
ICAgd2luZENvdW50ICs9ICh0aGlzRWRnZS52ZXJ0ZXgyKCkueSgpID4gdGhpc0VkZ2UudmVydGV4
MSgpLnkoKSkgPyAxIDogLTE7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZWRnZUNyb3NzaW5n
ICYmICghaW5zaWRlIHx8ICF3aW5kQ291bnQpKQotICAgICAgICAgICAgaW5zaWRlID0gYXBwZW5k
SW50ZXJ2YWxYKHRoaXNJbnRlcnNlY3Rpb24ucG9pbnQueCgpLCBpbnNpZGUsIHJlc3VsdCk7Ci0K
LSAgICAgICAgKytpbmRleDsKLSAgICB9CisgICAgZmxvYXQgeGkgPSAgY2lyY2xlWEludGVyY2Vw
dCgoeTIgPCBjZW50ZXIueSgpID8geTIgOiB5MSkgLSBjZW50ZXIueSgpLCByYWRpdXMpOworICAg
IHJldHVybiBGbG9hdFNoYXBlSW50ZXJ2YWwoY2VudGVyLngoKSAtIHhpLCBjZW50ZXIueCgpICsg
eGkpOwogfQogCi1zdGF0aWMgYm9vbCBjb21wYXJlWDEoY29uc3QgRmxvYXRTaGFwZUludGVydmFs
IGEsIGNvbnN0IEZsb2F0U2hhcGVJbnRlcnZhbCYgYikgeyByZXR1cm4gYS54MSgpIDwgYi54MSgp
OyB9Ci0KLXN0YXRpYyB2b2lkIHNvcnRBbmRNZXJnZVNoYXBlSW50ZXJ2YWxzKEZsb2F0U2hhcGVJ
bnRlcnZhbHMmIGludGVydmFscykKK0xheW91dFJlY3QgUG9seWdvblNoYXBlOjpzaGFwZU1hcmdp
bkxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0CiB7Ci0gICAgc3RkOjpzb3J0KGludGVydmFscy5i
ZWdpbigpLCBpbnRlcnZhbHMuZW5kKCksIGNvbXBhcmVYMSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDwgaW50ZXJ2YWxzLnNpemUoKTsgKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0U2hh
cGVJbnRlcnZhbCYgdGhpc0ludGVydmFsID0gaW50ZXJ2YWxzW2ldOwotICAgICAgICBGbG9hdFNo
YXBlSW50ZXJ2YWwmIHByZXZpb3VzSW50ZXJ2YWwgPSBpbnRlcnZhbHNbaSAtIDFdOwotICAgICAg
ICBpZiAodGhpc0ludGVydmFsLm92ZXJsYXBzKHByZXZpb3VzSW50ZXJ2YWwpKSB7Ci0gICAgICAg
ICAgICBwcmV2aW91c0ludGVydmFsLnNldFgyKHN0ZDo6bWF4PGZsb2F0PihwcmV2aW91c0ludGVy
dmFsLngyKCksIHRoaXNJbnRlcnZhbC54MigpKSk7Ci0gICAgICAgICAgICBpbnRlcnZhbHMucmVt
b3ZlKGkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICsraTsKLSAgICB9Ci19Ci0KLXN0
YXRpYyB2b2lkIGNvbXB1dGVPdmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMoY29uc3QgRmxvYXRQ
b2x5Z29uJiBwb2x5Z29uLCBmbG9hdCB5MSwgZmxvYXQgeTIsIEZsb2F0U2hhcGVJbnRlcnZhbHMm
IHJlc3VsdCkKLXsKLSAgICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSo+IGVkZ2VzOwot
ICAgIGlmICghcG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKHkxLCB5MiwgZWRnZXMpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBFZGdlSW50ZXJzZWN0aW9uIGludGVyc2VjdGlvbjsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3Qg
RmxvYXRQb2x5Z29uRWRnZSAqZWRnZSA9IGVkZ2VzW2ldOwotICAgICAgICBmbG9hdCB4MTsKLSAg
ICAgICAgZmxvYXQgeDI7Ci0KLSAgICAgICAgaWYgKGVkZ2UtPm1pblkoKSA8IHkxKSB7Ci0gICAg
ICAgICAgICBjb21wdXRlWEludGVyc2VjdGlvbihlZGdlLCB5MSwgaW50ZXJzZWN0aW9uKTsKLSAg
ICAgICAgICAgIHgxID0gaW50ZXJzZWN0aW9uLnBvaW50LngoKTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICB4MSA9IChlZGdlLT52ZXJ0ZXgxKCkueSgpIDwgZWRnZS0+dmVydGV4MigpLnko
KSkgPyBlZGdlLT52ZXJ0ZXgxKCkueCgpIDogZWRnZS0+dmVydGV4MigpLngoKTsKLQotICAgICAg
ICBpZiAoZWRnZS0+bWF4WSgpID4geTIpIHsKLSAgICAgICAgICAgIGNvbXB1dGVYSW50ZXJzZWN0
aW9uKGVkZ2UsIHkyLCBpbnRlcnNlY3Rpb24pOwotICAgICAgICAgICAgeDIgPSBpbnRlcnNlY3Rp
b24ucG9pbnQueCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHgyID0gKGVkZ2UtPnZl
cnRleDEoKS55KCkgPiBlZGdlLT52ZXJ0ZXgyKCkueSgpKSA/IGVkZ2UtPnZlcnRleDEoKS54KCkg
OiBlZGdlLT52ZXJ0ZXgyKCkueCgpOwotCi0gICAgICAgIGlmICh4MSA+IHgyKQotICAgICAgICAg
ICAgc3RkOjpzd2FwKHgxLCB4Mik7Ci0KLSAgICAgICAgaWYgKHgyID4geDEpCi0gICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKEZsb2F0U2hhcGVJbnRlcnZhbCh4MSwgeDIpKTsKLSAgICB9Ci0KLSAg
ICBzb3J0QW5kTWVyZ2VTaGFwZUludGVydmFscyhyZXN1bHQpOworICAgIEZsb2F0UmVjdCBib3gg
PSBtX3BvbHlnb24uYm91bmRpbmdCb3goKTsKKyAgICBib3guaW5mbGF0ZShzaGFwZU1hcmdpbigp
KTsKKyAgICByZXR1cm4gTGF5b3V0UmVjdChib3gpOwogfQogCiB2b2lkIFBvbHlnb25TaGFwZTo6
Z2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxv
Z2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JiByZXN1bHQpIGNvbnN0CiB7Ci0gICAgY29uc3QgRmxv
YXRQb2x5Z29uJiBwb2x5Z29uID0gc2hhcGVNYXJnaW5Cb3VuZHMoKTsKLSAgICBpZiAocG9seWdv
bi5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGZsb2F0IHkxID0gbG9naWNhbFRv
cDsKICAgICBmbG9hdCB5MiA9IGxvZ2ljYWxUb3AgKyBsb2dpY2FsSGVpZ2h0OwogCi0gICAgRmxv
YXRTaGFwZUludGVydmFscyB5MVhJbnRlcnZhbHMsIHkyWEludGVydmFsczsKLSAgICBjb21wdXRl
WEludGVyc2VjdGlvbnMocG9seWdvbiwgeTEsIHRydWUsIHkxWEludGVydmFscyk7Ci0gICAgY29t
cHV0ZVhJbnRlcnNlY3Rpb25zKHBvbHlnb24sIHkyLCBmYWxzZSwgeTJYSW50ZXJ2YWxzKTsKLQot
ICAgIEZsb2F0U2hhcGVJbnRlcnZhbHMgbWVyZ2VkSW50ZXJ2YWxzOwotICAgIEZsb2F0U2hhcGVJ
bnRlcnZhbDo6dW5pdGVTaGFwZUludGVydmFscyh5MVhJbnRlcnZhbHMsIHkyWEludGVydmFscywg
bWVyZ2VkSW50ZXJ2YWxzKTsKLQotICAgIEZsb2F0U2hhcGVJbnRlcnZhbHMgZWRnZUludGVydmFs
czsKLSAgICBjb21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2plY3Rpb25zKHBvbHlnb24sIHkxLCB5
MiwgZWRnZUludGVydmFscyk7CisgICAgaWYgKG1fcG9seWdvbi5pc0VtcHR5KCkgfHwgIW1fcG9s
eWdvbi5ib3VuZGluZ0JveCgpLm92ZXJsYXBzWVJhbmdlKHkxIC0gc2hhcGVNYXJnaW4oKSwgeTIg
KyBzaGFwZU1hcmdpbigpKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRTaGFwZUludGVy
dmFscyBleGNsdWRlZEludGVydmFsczsKLSAgICBGbG9hdFNoYXBlSW50ZXJ2YWw6OnVuaXRlU2hh
cGVJbnRlcnZhbHMobWVyZ2VkSW50ZXJ2YWxzLCBlZGdlSW50ZXJ2YWxzLCBleGNsdWRlZEludGVy
dmFscyk7CisgICAgVmVjdG9yPGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqPiBvdmVybGFwcGluZ0Vk
Z2VzOworICAgIGlmICghbV9wb2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMoeTEgLSBzaGFwZU1hcmdp
bigpLCB5MiArIHNoYXBlTWFyZ2luKCksIG92ZXJsYXBwaW5nRWRnZXMpKQorICAgICAgICByZXR1
cm47CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhjbHVkZWRJbnRlcnZhbHMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgRmxvYXRTaGFwZUludGVydmFsIGludGVydmFsID0gZXhjbHVk
ZWRJbnRlcnZhbHNbaV07Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoTGluZVNlZ21lbnQoaW50ZXJ2
YWwueDEoKSwgaW50ZXJ2YWwueDIoKSkpOworICAgIEZsb2F0U2hhcGVJbnRlcnZhbCBleGNsdWRl
ZEludGVydmFsOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvdmVybGFwcGluZ0VkZ2Vz
LnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UgPSAq
KG92ZXJsYXBwaW5nRWRnZXNbaV0pOworICAgICAgICBpZiAoIXNoYXBlTWFyZ2luKCkpCisgICAg
ICAgICAgICBleGNsdWRlZEludGVydmFsLnVuaXRlKE9mZnNldFBvbHlnb25FZGdlKGVkZ2UsIEZs
b2F0U2l6ZSgpKS5jbGlwcGVkRWRnZVhSYW5nZSh5MSwgeTIpKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBleGNsdWRlZEludGVydmFsLnVuaXRlKE9mZnNldFBvbHlnb25FZGdlKGVkZ2Us
IG91dHdhcmRFZGdlTm9ybWFsKGVkZ2UpICogc2hhcGVNYXJnaW4oKSkuY2xpcHBlZEVkZ2VYUmFu
Z2UoeTEsIHkyKSk7CisgICAgICAgICAgICBleGNsdWRlZEludGVydmFsLnVuaXRlKE9mZnNldFBv
bHlnb25FZGdlKGVkZ2UsIGlud2FyZEVkZ2VOb3JtYWwoZWRnZSkgKiBzaGFwZU1hcmdpbigpKS5j
bGlwcGVkRWRnZVhSYW5nZSh5MSwgeTIpKTsKKyAgICAgICAgICAgIGV4Y2x1ZGVkSW50ZXJ2YWwu
dW5pdGUoY2xpcHBlZENpcmNsZVhSYW5nZShlZGdlLnZlcnRleDEoKSwgc2hhcGVNYXJnaW4oKSwg
eTEsIHkyKSk7CisgICAgICAgIH0KICAgICB9CisKKyAgICBpZiAoIWV4Y2x1ZGVkSW50ZXJ2YWwu
aXNFbXB0eSgpKQorICAgICAgICByZXN1bHQuYXBwZW5kKExpbmVTZWdtZW50KGV4Y2x1ZGVkSW50
ZXJ2YWwueDEoKSwgZXhjbHVkZWRJbnRlcnZhbC54MigpKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFk
ZFBvbHlnb24oUGF0aCYgcGF0aCwgY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uKQordm9pZCBQ
b2x5Z29uU2hhcGU6OmJ1aWxkRGlzcGxheVBhdGhzKERpc3BsYXlQYXRocyYgcGF0aHMpIGNvbnN0
CiB7Ci0gICAgaWYgKCFwb2x5Z29uLm51bWJlck9mVmVydGljZXMoKSkKKyAgICBpZiAobV9wb2x5
Z29uLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGF0aC5tb3ZlVG8ocG9seWdv
bi52ZXJ0ZXhBdCgwKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHBvbHlnb24ubnVt
YmVyT2ZWZXJ0aWNlcygpOyBpKyspCi0gICAgICAgIHBhdGguYWRkTGluZVRvKHBvbHlnb24udmVy
dGV4QXQoaSkpOworICAgIHBhdGhzLnNoYXBlLm1vdmVUbyhtX3BvbHlnb24udmVydGV4QXQoMCkp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtX3BvbHlnb24ubnVtYmVyT2ZWZXJ0aWNl
cygpOyBpKyspCisgICAgICAgIHBhdGhzLnNoYXBlLmFkZExpbmVUbyhtX3BvbHlnb24udmVydGV4
QXQoaSkpOwogCi0gICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKLX0KLQotdm9pZCBQb2x5Z29uU2hh
cGU6OmJ1aWxkRGlzcGxheVBhdGhzKERpc3BsYXlQYXRocyYgcGF0aHMpIGNvbnN0Ci17Ci0gICAg
YWRkUG9seWdvbihwYXRocy5zaGFwZSwgbV9wb2x5Z29uKTsKLSAgICBpZiAoc2hhcGVNYXJnaW4o
KSkKLSAgICAgICAgYWRkUG9seWdvbihwYXRocy5tYXJnaW5TaGFwZSwgc2hhcGVNYXJnaW5Cb3Vu
ZHMoKSk7CisgICAgcGF0aHMuc2hhcGUuY2xvc2VTdWJwYXRoKCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMv
UG9seWdvblNoYXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1BvbHlnb25T
aGFwZS5oCmluZGV4IDM5NDYyNjAuLjNlYTQ1MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvUG9seWdvblNoYXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3NoYXBlcy9Qb2x5Z29uU2hhcGUuaApAQCAtMzIsNTEgKzMyLDI5IEBACiAKICNpbmNs
dWRlICJGbG9hdFBvbHlnb24uaCIKICNpbmNsdWRlICJTaGFwZS5oIgorI2luY2x1ZGUgIlNoYXBl
SW50ZXJ2YWwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBPZmZzZXRQb2x5Z29u
RWRnZSA6IHB1YmxpYyBWZXJ0ZXhQYWlyIHsKIHB1YmxpYzoKLSAgICBlbnVtIEJhc2lzIHsKLSAg
ICAgICAgRWRnZSwKLSAgICAgICAgVmVydGV4LAotICAgICAgICBMaW5lVG9wCi0gICAgfTsKLQog
ICAgIE9mZnNldFBvbHlnb25FZGdlKGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UsIGNvbnN0
IEZsb2F0U2l6ZSYgb2Zmc2V0KQogICAgICAgICA6IG1fdmVydGV4MShlZGdlLnZlcnRleDEoKSAr
IG9mZnNldCkKICAgICAgICAgLCBtX3ZlcnRleDIoZWRnZS52ZXJ0ZXgyKCkgKyBvZmZzZXQpCi0g
ICAgICAgICwgbV9lZGdlSW5kZXgoZWRnZS5lZGdlSW5kZXgoKSkKLSAgICAgICAgLCBtX2Jhc2lz
KEVkZ2UpCi0gICAgewotICAgIH0KLQotICAgIE9mZnNldFBvbHlnb25FZGdlKGNvbnN0IEZsb2F0
UG9pbnQmIHJlZmxleFZlcnRleCwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQxLCBjb25zdCBGbG9h
dFNpemUmIG9mZnNldDIpCi0gICAgICAgIDogbV92ZXJ0ZXgxKHJlZmxleFZlcnRleCArIG9mZnNl
dDEpCi0gICAgICAgICwgbV92ZXJ0ZXgyKHJlZmxleFZlcnRleCArIG9mZnNldDIpCi0gICAgICAg
ICwgbV9lZGdlSW5kZXgoLTEpCi0gICAgICAgICwgbV9iYXNpcyhWZXJ0ZXgpCi0gICAgewotICAg
IH0KLQotICAgIE9mZnNldFBvbHlnb25FZGdlKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwg
ZmxvYXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKLSAg
ICAgICAgOiBtX3ZlcnRleDEoRmxvYXRQb2ludChwb2x5Z29uLmJvdW5kaW5nQm94KCkueCgpLCBt
aW5Mb2dpY2FsSW50ZXJ2YWxUb3ApICsgb2Zmc2V0KQotICAgICAgICAsIG1fdmVydGV4MihGbG9h
dFBvaW50KHBvbHlnb24uYm91bmRpbmdCb3goKS5tYXhYKCksIG1pbkxvZ2ljYWxJbnRlcnZhbFRv
cCkgKyBvZmZzZXQpCi0gICAgICAgICwgbV9lZGdlSW5kZXgoLTEpCi0gICAgICAgICwgbV9iYXNp
cyhMaW5lVG9wKQogICAgIHsKICAgICB9CiAKICAgICB2aXJ0dWFsIGNvbnN0IEZsb2F0UG9pbnQm
IHZlcnRleDEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3ZlcnRleDE7IH0KICAgICB2aXJ0
dWFsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X3ZlcnRleDI7IH0KLSAgICBpbnQgZWRnZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9lZGdlSW5k
ZXg7IH0KLSAgICBCYXNpcyBiYXNpcygpIGNvbnN0IHsgcmV0dXJuIG1fYmFzaXM7IH0KKworICAg
IGJvb2wgaXNXaXRoaW5ZUmFuZ2UoZmxvYXQgeTEsIGZsb2F0IHkyKSBjb25zdCB7IHJldHVybiB5
MSA8PSBtaW5ZKCkgJiYgeTIgPj0gbWF4WSgpOyB9CisgICAgYm9vbCBvdmVybGFwc1lSYW5nZShm
bG9hdCB5MSwgZmxvYXQgeTIpIGNvbnN0IHsgcmV0dXJuIHkyID49IG1pblkoKSAmJiB5MSA8PSBt
YXhZKCk7IH0KKyAgICBmbG9hdCB4SW50ZXJjZXB0KGZsb2F0IHkpIGNvbnN0OworICAgIEZsb2F0
U2hhcGVJbnRlcnZhbCBjbGlwcGVkRWRnZVhSYW5nZShmbG9hdCB5MSwgZmxvYXQgeTIpIGNvbnN0
OwogCiBwcml2YXRlOgogICAgIEZsb2F0UG9pbnQgbV92ZXJ0ZXgxOwogICAgIEZsb2F0UG9pbnQg
bV92ZXJ0ZXgyOwotICAgIGludCBtX2VkZ2VJbmRleDsKLSAgICBCYXNpcyBtX2Jhc2lzOwogfTsK
IAogY2xhc3MgUG9seWdvblNoYXBlIDogcHVibGljIFNoYXBlIHsKQEAgLTg0LDIxICs2MiwxNyBA
QCBjbGFzcyBQb2x5Z29uU2hhcGUgOiBwdWJsaWMgU2hhcGUgewogcHVibGljOgogICAgIFBvbHln
b25TaGFwZShzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPEZsb2F0UG9pbnQ+PiB2ZXJ0aWNlcywgV2lu
ZFJ1bGUgZmlsbFJ1bGUpCiAgICAgICAgIDogbV9wb2x5Z29uKHN0ZDo6bW92ZSh2ZXJ0aWNlcyks
IGZpbGxSdWxlKQotICAgICAgICAsIG1fbWFyZ2luQm91bmRzKG51bGxwdHIpCiAgICAgewogICAg
IH0KIAotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBzaGFwZU1hcmdpbkxvZ2ljYWxCb3VuZGluZ0Jv
eCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0YXRpY19jYXN0PExheW91dFJlY3Q+KHNoYXBl
TWFyZ2luQm91bmRzKCkuYm91bmRpbmdCb3goKSk7IH0KKyAgICB2aXJ0dWFsIExheW91dFJlY3Qg
c2hhcGVNYXJnaW5Mb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcG9seWdvbi5pc0Vt
cHR5KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoTGF5b3V0VW5p
dCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgYnVpbGREaXNwbGF5UGF0aHMoRGlzcGxh
eVBhdGhzJikgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgY29uc3QgRmxvYXRQb2x5
Z29uJiBzaGFwZU1hcmdpbkJvdW5kcygpIGNvbnN0OwotCiAgICAgRmxvYXRQb2x5Z29uIG1fcG9s
eWdvbjsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFBvbHlnb24+IG1fbWFyZ2lu
Qm91bmRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZUludGVydmFsLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwuaAppbmRleCBjM2E2NWUyLi5hZDc2MzRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2
YWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlSW50ZXJ2YWwu
aApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgVCB4MSgpIGNvbnN0IHsgcmV0dXJuIG1f
eDE7IH0KICAgICBUIHgyKCkgY29uc3QgeyByZXR1cm4gbV94MjsgfQogICAgIFQgd2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX3gyIC0gbV94MTsgfQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIG1feDEgPT0gbV94MjsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
ICFtX3gxICYmICFtX3gyOyB9CiAKICAgICB2b2lkIHNldFgxKFQgeDEpCiAgICAgewpAQCAtNzks
MTIgKzc5LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4geDEoKSA8PSBpbnRlcnZhbC54MSgp
ICYmIHgyKCkgPj0gaW50ZXJ2YWwueDIoKTsKICAgICB9CiAKLSAgICBTaGFwZUludGVydmFsPFQ+
IGludGVyc2VjdChjb25zdCBTaGFwZUludGVydmFsPFQ+JiBpbnRlcnZhbCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChvdmVybGFwcyhpbnRlcnZhbCkpOwotICAgICAgICByZXR1cm4gU2hh
cGVJbnRlcnZhbDxUPihzdGQ6Om1heDxUPih4MSgpLCBpbnRlcnZhbC54MSgpKSwgc3RkOjptaW48
VD4oeDIoKSwgaW50ZXJ2YWwueDIoKSkpOwotICAgIH0KLQogICAgIHZvaWQgdW5pdGUoY29uc3Qg
U2hhcGVJbnRlcnZhbDxUPiYgaW50ZXJ2YWwpCiAgICAgewogICAgICAgICBpZiAoaW50ZXJ2YWwu
aXNFbXB0eSgpKQpAQCAtOTUsMTM4ICs4OSwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzZXQo
c3RkOjptaW48VD4oeDEoKSwgaW50ZXJ2YWwueDEoKSksIHN0ZDo6bWF4PFQ+KHgyKCksIGludGVy
dmFsLngyKCkpKTsKICAgICB9CiAKLSAgICB0eXBlZGVmIFZlY3RvcjxTaGFwZUludGVydmFsPFQ+
PiBTaGFwZUludGVydmFsczsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFNoYXBlSW50ZXJ2YWxzOjpj
b25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIFNoYXBl
SW50ZXJ2YWxzOjppdGVyYXRvciBpdGVyYXRvcjsKLQotICAgIHN0YXRpYyB2b2lkIHVuaXRlU2hh
cGVJbnRlcnZhbHMoY29uc3QgU2hhcGVJbnRlcnZhbHMmIGEsIGNvbnN0IFNoYXBlSW50ZXJ2YWxz
JiBiLCBTaGFwZUludGVydmFscyYgcmVzdWx0KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHNoYXBl
SW50ZXJ2YWxzQXJlU29ydGVkQW5kRGlzam9pbnQoYSkgJiYgc2hhcGVJbnRlcnZhbHNBcmVTb3J0
ZWRBbmREaXNqb2ludChiKSk7Ci0KLSAgICAgICAgaWYgKGEuaXNFbXB0eSgpIHx8IGEgPT0gYikg
ewotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZFJhbmdlKGIuYmVnaW4oKSwgYi5lbmQoKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYi5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRSYW5nZShhLmJlZ2luKCksIGEuZW5kKCkpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3RfaXRlcmF0b3Ig
YU5leHQgPSBhLmJlZ2luKCk7Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJOZXh0ID0gYi5iZWdp
bigpOwotCi0gICAgICAgIHdoaWxlIChhTmV4dCAhPSBhLmVuZCgpIHx8IGJOZXh0ICE9IGIuZW5k
KCkpIHsKLSAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIG5leHQgPSAoYk5leHQgPT0gYi5lbmQo
KSB8fCAoYU5leHQgIT0gYS5lbmQoKSAmJiBhTmV4dC0+eDEoKSA8IGJOZXh0LT54MSgpKSkgPyBh
TmV4dCsrIDogYk5leHQrKzsKLSAgICAgICAgICAgIGlmIChyZXN1bHQuaXNFbXB0eSgpIHx8ICFy
ZXN1bHQubGFzdCgpLm92ZXJsYXBzKCpuZXh0KSkKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCpuZXh0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXN1bHQubGFz
dCgpLnNldFgyKHN0ZDo6bWF4PFQ+KHJlc3VsdC5sYXN0KCkueDIoKSwgbmV4dC0+eDIoKSkpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgaW50ZXJzZWN0U2hhcGVJbnRlcnZh
bHMoY29uc3QgU2hhcGVJbnRlcnZhbHMmIGEsIGNvbnN0IFNoYXBlSW50ZXJ2YWxzJiBiLCBTaGFw
ZUludGVydmFscyYgcmVzdWx0KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHNoYXBlSW50ZXJ2YWxz
QXJlU29ydGVkQW5kRGlzam9pbnQoYSkgJiYgc2hhcGVJbnRlcnZhbHNBcmVTb3J0ZWRBbmREaXNq
b2ludChiKSk7Ci0KLSAgICAgICAgaWYgKGEuaXNFbXB0eSgpIHx8IGIuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChhID09IGIpIHsKLSAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmRSYW5nZShhLmJlZ2luKCksIGEuZW5kKCkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3RfaXRlcmF0b3IgYU5leHQgPSBhLmJlZ2luKCk7
Ci0gICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJOZXh0ID0gYi5iZWdpbigpOwotICAgICAgICBjb25z
dF9pdGVyYXRvciB3b3JraW5nID0gYU5leHQtPngxKCkgPCBiTmV4dC0+eDEoKSA/IGFOZXh0Kysg
OiBiTmV4dCsrOwotCi0gICAgICAgIHdoaWxlIChhTmV4dCAhPSBhLmVuZCgpIHx8IGJOZXh0ICE9
IGIuZW5kKCkpIHsKLSAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIG5leHQgPSAoYk5leHQgPT0g
Yi5lbmQoKSB8fCAoYU5leHQgIT0gYS5lbmQoKSAmJiBhTmV4dC0+eDEoKSA8IGJOZXh0LT54MSgp
KSkgPyBhTmV4dCsrIDogYk5leHQrKzsKLSAgICAgICAgICAgIGlmICh3b3JraW5nLT5vdmVybGFw
cygqbmV4dCkpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHdvcmtpbmctPmludGVy
c2VjdCgqbmV4dCkpOwotICAgICAgICAgICAgICAgIGlmIChuZXh0LT54MigpID4gd29ya2luZy0+
eDIoKSkKLSAgICAgICAgICAgICAgICAgICAgd29ya2luZyA9IG5leHQ7Ci0gICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICB3b3JraW5nID0gbmV4dDsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHN0YXRpYyB2b2lkIHN1YnRyYWN0U2hhcGVJbnRlcnZhbHMoY29uc3QgU2hhcGVJbnRl
cnZhbHMmIGEsIGNvbnN0IFNoYXBlSW50ZXJ2YWxzJiBiLCBTaGFwZUludGVydmFscyYgcmVzdWx0
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHNoYXBlSW50ZXJ2YWxzQXJlU29ydGVkQW5kRGlzam9p
bnQoYSkgJiYgc2hhcGVJbnRlcnZhbHNBcmVTb3J0ZWRBbmREaXNqb2ludChiKSk7Ci0KLSAgICAg
ICAgaWYgKGEuaXNFbXB0eSgpIHx8IGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBpZiAoYi5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRSYW5nZShh
LmJlZ2luKCksIGEuZW5kKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgY29uc3RfaXRlcmF0b3IgYU5leHQgPSBhLmJlZ2luKCk7Ci0gICAgICAgIGNvbnN0X2l0
ZXJhdG9yIGJOZXh0ID0gYi5iZWdpbigpOwotICAgICAgICBTaGFwZUludGVydmFsPFQ+IGFWYWx1
ZSA9ICphTmV4dDsKLSAgICAgICAgU2hhcGVJbnRlcnZhbDxUPiBiVmFsdWUgPSAqYk5leHQ7Ci0K
LSAgICAgICAgZG8gewotICAgICAgICAgICAgYm9vbCBhSW5jcmVtZW50ID0gZmFsc2U7Ci0gICAg
ICAgICAgICBib29sIGJJbmNyZW1lbnQgPSBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKGJWYWx1
ZS5jb250YWlucyhhVmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgYUluY3JlbWVudCA9IHRydWU7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGFWYWx1ZS5jb250YWlucyhiVmFsdWUpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGJWYWx1ZS54MSgpID4gYVZhbHVlLngxKCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoU2hhcGVJbnRlcnZhbDxUPihhVmFsdWUueDEoKSwgYlZhbHVl
LngxKCkpKTsKLSAgICAgICAgICAgICAgICBpZiAoYVZhbHVlLngyKCkgPiBiVmFsdWUueDIoKSkK
LSAgICAgICAgICAgICAgICAgICAgYVZhbHVlLnNldFgxKGJWYWx1ZS54MigpKTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFJbmNyZW1lbnQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJJbmNyZW1lbnQgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChh
VmFsdWUub3ZlcmxhcHMoYlZhbHVlKSkgewotICAgICAgICAgICAgICAgIGlmIChhVmFsdWUueDEo
KSA8IGJWYWx1ZS54MSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoU2hh
cGVJbnRlcnZhbDxUPihhVmFsdWUueDEoKSwgYlZhbHVlLngxKCkpKTsKLSAgICAgICAgICAgICAg
ICAgICAgYUluY3JlbWVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgYVZhbHVlLnNldFgxKGJWYWx1ZS54MigpKTsKLSAgICAgICAgICAgICAg
ICAgICAgYkluY3JlbWVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoYVZhbHVlLngxKCkgPCBiVmFsdWUueDEoKSkg
ewotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGFWYWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGFJbmNyZW1lbnQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgICAgICBiSW5jcmVtZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKGFJbmNyZW1lbnQgJiYgKythTmV4dCAhPSBhLmVuZCgpKQotICAgICAgICAg
ICAgICAgIGFWYWx1ZSA9ICphTmV4dDsKLSAgICAgICAgICAgIGlmIChiSW5jcmVtZW50ICYmICsr
Yk5leHQgIT0gYi5lbmQoKSkKLSAgICAgICAgICAgICAgICBiVmFsdWUgPSAqYk5leHQ7Ci0KLSAg
ICAgICAgfSB3aGlsZSAoYU5leHQgIT0gYS5lbmQoKSAmJiBiTmV4dCAhPSBiLmVuZCgpKTsKLQot
ICAgICAgICBpZiAoYU5leHQgIT0gYS5lbmQoKSkgewotICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChhVmFsdWUpOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZFJhbmdlKCsrYU5leHQsIGEuZW5k
KCkpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNoYXBl
SW50ZXJ2YWw8VD4mIG90aGVyKSBjb25zdCB7IHJldHVybiB4MSgpID09IG90aGVyLngxKCkgJiYg
eDIoKSA9PSBvdGhlci54MigpOyB9CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNoYXBlSW50
ZXJ2YWw8VD4mIG90aGVyKSBjb25zdCB7IHJldHVybiAhb3BlcmF0b3I9PShvdGhlcik7IH0KIAog
cHJpdmF0ZToKICAgICBUIG1feDE7CiAgICAgVCBtX3gyOwotCi0gICAgc3RhdGljIGJvb2wgc2hh
cGVJbnRlcnZhbHNBcmVTb3J0ZWRBbmREaXNqb2ludChjb25zdCBTaGFwZUludGVydmFscyYgaW50
ZXJ2YWxzKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGludGVydmFs
cy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIGlmIChpbnRlcnZhbHNbaSAtIDFdLngyKCkgPiBp
bnRlcnZhbHNbaV0ueDEoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQogfTsKIAogdHlwZWRlZiBTaGFwZUludGVydmFsPGludD4g
SW50U2hhcGVJbnRlcnZhbDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>