<?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>187380</bug_id>
          
          <creation_ts>2018-07-06 00:58:58 -0700</creation_ts>
          <short_desc>[GTK][WPE] Add generic Path implementation</short_desc>
          <delta_ts>2018-07-16 00:00:30 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cadubentzen</cc>
    
    <cc>magomez</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1439725</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-07-06 00:58:58 -0700</bug_when>
    <thetext>Generic implementation of the Path class functionality will allow easier prototyping with different rasterization engines.

Code name: Santiago</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1439727</commentid>
    <comment_count>1</comment_count>
      <attachid>344407</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-07-06 01:07:41 -0700</bug_when>
    <thetext>Created attachment 344407
WIP

Current location: France, close to the Spanish border.

Still missing:
- addEllipse(), addPath() implementations,
- point-in-stroke determination,
- stroke bounds determination,
- correct handling of Bézier curves in fill bounds determination,
- correct handling of Bézier curves in point-in-fill determination,
- code comments,
- probably other things as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1440763</commentid>
    <comment_count>2</comment_count>
      <attachid>344674</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-07-10 00:00:23 -0700</bug_when>
    <thetext>Created attachment 344674
WIP

Bézier curves now properly handled for fill bounds and point-in-fill computations.

Still missing:
- addEllipse(), addPath() implementations,
- point-in-stroke determination,
- stroke bounds determination,
- code comments,
- probably other things as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1442337</commentid>
    <comment_count>3</comment_count>
      <attachid>345081</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2018-07-16 00:00:30 -0700</bug_when>
    <thetext>Created attachment 345081
WIP

Crossed the border into Spain.

Made initial progress around path stroking, supporting the basics of point-in-path and bounds computations.

Still missing:
- addPath() implementation, together with simpler general transform handling,
- Bézier curve handling in stroke computations,
- dashing support,
- addressing bugs in the general parametric arc computation,
- comments.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>344407</attachid>
            <date>2018-07-06 01:07:41 -0700</date>
            <delta_ts>2018-07-10 00:00:23 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>path.patch</filename>
            <type>text/plain</type>
            <size>42777</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDE1OTY5ZjkzNWVk
Li4xNjU1NDM1M2FjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNl
c0NhaXJvLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0
CkBAIC0zMyw4ICszMywxMCBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW50UmVjdENhaXJvLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1BhdGhDYWlyby5jcHAKKy8vIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGxhdGZvcm1QYXRoQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQ
dHJDYWlyby5jcHAKKworcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aEdlbmVyaWMuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmljUGF0aC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJpY1BhdGguaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGJjMDhlYmQ4ZTEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmljUGF0aC5oCkBAIC0wLDAg
KzEsNzc0IEBACisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgor
I2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSW1wbCB7CisKK2VudW0gY2xhc3MgQ29tbWFuZCA6IHVpbnQ4X3Qg
eworICAgIE1vdmVUbywKKyAgICBDbG9zZSwKKyAgICBMaW5lVG8sCisgICAgUmVjdCwKKyAgICBR
dWFkcmF0aWNDdXJ2ZVRvLAorICAgIEN1YmljQ3VydmVUbywKKyAgICBDaXJjdWxhckNsb2Nrd2lz
ZUFyYywKKyAgICBDaXJjdWxhckNvdW50ZXJDbG9ja3dpc2VBcmMsCisgICAgQ2lyY3VsYXJUYW5n
ZW50QXJjLAorICAgIFRyYW5zZm9ybSwKK307CisKK3N0cnVjdCBQb2ludCB7CisgICAgZG91Ymxl
IHggeyAwIH07CisgICAgZG91YmxlIHkgeyAwIH07Cit9OworCit0ZW1wbGF0ZTxzaXplX3QgTj4K
K3VzaW5nIFZhbHVlcyA9IHN0ZDo6YXJyYXk8ZG91YmxlLCBOPjsKKwordGVtcGxhdGU8dHlwZW5h
bWUgUD4KK3N0YXRpYyBkb3VibGUgYXJlYU9mVHJpYW5nZShjb25zdCBQJiBwMSwgY29uc3QgUCYg
cDIsIGNvbnN0IFAmIHAzKQoreworICAgIHJldHVybiBwMS54ICogKHAyLnkgLSBwMy55KSArIHAy
LnggKiAocDMueSAtIHAxLnkpICsgcDMueCAqIChwMS55IC0gcDIueSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEY+CitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJhdGVBcmNDdXJ2ZXMoYm9vbCBh
bmdsZUluY3JlYXNlcywgZG91YmxlIHN0YXJ0QW5nbGUsIGRvdWJsZSBlbmRBbmdsZSwgY29uc3Qg
RiYgY3VydmUpCit7CisgICAgZG91YmxlIGFuZ2xlRGVsdGEgPSBzdGQ6OmFicyhlbmRBbmdsZSAt
IHN0YXJ0QW5nbGUpOworICAgIGZvciAoOyBhbmdsZURlbHRhID4gMC4wMDE7KSB7CisgICAgICAg
IGRvdWJsZSBhcmNEZWx0YSA9IChhbmdsZUluY3JlYXNlcyA/IDEgOiAtMSkgKiBzdGQ6Om1pbihh
bmdsZURlbHRhLCBNX1BJIC8gMik7CisKKyAgICAgICAgZG91YmxlIGFscGhhID0gYXJjRGVsdGEg
LyAyOworICAgICAgICBkb3VibGUgY29zQWxwaGEgPSBzdGQ6OmNvcyhhbHBoYSk7CisgICAgICAg
IGRvdWJsZSBzaW5BbHBoYSA9IHN0ZDo6c2luKGFscGhhKTsKKyAgICAgICAgZG91YmxlIGNvdEFs
cGhhID0gMS4wIC8gc3RkOjp0YW4oYWxwaGEpOworICAgICAgICBkb3VibGUgY29zUGhpID0gc3Rk
Ojpjb3Moc3RhcnRBbmdsZSArIGFscGhhKTsKKyAgICAgICAgZG91YmxlIHNpblBoaSA9IHN0ZDo6
c2luKHN0YXJ0QW5nbGUgKyBhbHBoYSk7CisKKyAgICAgICAgZG91YmxlIGxhbWJkYSA9ICg0LjAg
LSBjb3NBbHBoYSkgLyAzLjA7CisgICAgICAgIGRvdWJsZSBtdSA9IHNpbkFscGhhICsgKGNvc0Fs
cGhhIC0gbGFtYmRhKSAqIGNvdEFscGhhOworCisgICAgICAgIFBvaW50IHAxIHsgbGFtYmRhICog
Y29zUGhpICsgbXUgKiBzaW5QaGksIGxhbWJkYSAqIHNpblBoaSAtIG11ICogY29zUGhpIH07Cisg
ICAgICAgIFBvaW50IHAyIHsgbGFtYmRhICogY29zUGhpIC0gbXUgKiBzaW5QaGksIGxhbWJkYSAq
IHNpblBoaSArIG11ICogY29zUGhpIH07CisgICAgICAgIFBvaW50IHAzIHsgc3RkOjpjb3Moc3Rh
cnRBbmdsZSArIGFyY0RlbHRhKSwgc3RkOjpzaW4oc3RhcnRBbmdsZSArIGFyY0RlbHRhKSB9Owor
ICAgICAgICBjdXJ2ZShwMSwgcDIsIHAzKTsKKworICAgICAgICBzdGFydEFuZ2xlICs9IGFyY0Rl
bHRhOworICAgICAgICBhbmdsZURlbHRhID0gc3RkOjphYnMoZW5kQW5nbGUgLSBzdGFydEFuZ2xl
KTsKKyAgICB9Cit9CisKK3N0cnVjdCBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnMgewor
ICAgIFBvaW50IHAxOyAvLyBzdGFydCBvZiBhIHBhcnRpYWwgZWxsaXB0aWNhbCBhcmMgc2VnbWVu
dAorICAgIFBvaW50IHAyOyAvLyBlbmQgb2YgYSBwYXJ0aWFsIGVsbGlwdGljYWwgYXJjIHNlZ21l
bnQKKworICAgIGRvdWJsZSByaCB7IDAgfTsKKyAgICBkb3VibGUgcnYgeyAwIH07CisgICAgZG91
YmxlIHBoaSB7IDAgfTsKKyAgICBib29sIGZBIHsgZmFsc2UgfTsKKyAgICBib29sIGZTIHsgZmFs
c2UgfTsKKworICAgIHN0cnVjdCBDaXJjdWxhckFyYyB7CisgICAgICAgIFBvaW50IGM7CisgICAg
ICAgIGRvdWJsZSByYWRpdXM7CisgICAgICAgIGRvdWJsZSBzdGFydEFuZ2xlOworICAgICAgICBk
b3VibGUgZW5kQW5nbGU7CisgICAgfTsKKworICAgIHN0cnVjdCBDaXJjdWxhclRhbmdlbnRBcmMg
eworICAgICAgICBQb2ludCB0cDA7CisgICAgICAgIFBvaW50IHRwMTsKKyAgICAgICAgUG9pbnQg
dHAyOworICAgICAgICBkb3VibGUgcmFkaXVzOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb21tYW5kVHlwZT4KKyAgICBzdGF0aWMgdm9pZCBjb21wdXRlKFBhcnRpYWxFbGxpcHRp
Y2FsQXJjUGFyYW1ldGVycyYsIGNvbnN0IENvbW1hbmRUeXBlJik7Cit9OworCit0ZW1wbGF0ZTw+
CitpbmxpbmUgdm9pZCBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnM6OmNvbXB1dGU8UGFy
dGlhbEVsbGlwdGljYWxBcmNQYXJhbWV0ZXJzOjpDaXJjdWxhckFyYz4oCisgICAgUGFydGlhbEVs
bGlwdGljYWxBcmNQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDaXJjdWxhckFyYyYgYXJj
KQoreworICAgICAgICBwYXJhbWV0ZXJzLnAxID0geworICAgICAgICAgICAgYXJjLmMueCArIGFy
Yy5yYWRpdXMgKiBzdGQ6OmNvcyhhcmMuc3RhcnRBbmdsZSksCisgICAgICAgICAgICBhcmMuYy55
ICsgYXJjLnJhZGl1cyAqIHN0ZDo6c2luKGFyYy5zdGFydEFuZ2xlKSB9OworICAgICAgICBwYXJh
bWV0ZXJzLnAyID0geworICAgICAgICAgICAgYXJjLmMueCArIGFyYy5yYWRpdXMgKiBzdGQ6OmNv
cyhhcmMuZW5kQW5nbGUpLAorICAgICAgICAgICAgYXJjLmMueSArIGFyYy5yYWRpdXMgKiBzdGQ6
OnNpbihhcmMuZW5kQW5nbGUpIH07CisgICAgICAgIHBhcmFtZXRlcnMucmggPSBzdGQ6OmFicyhh
cmMucmFkaXVzKTsKKyAgICAgICAgcGFyYW1ldGVycy5ydiA9IHN0ZDo6YWJzKGFyYy5yYWRpdXMp
OworICAgICAgICBwYXJhbWV0ZXJzLnBoaSA9IDA7CisKKyAgICAgICAgLy8gRklYTUU6IGNvbXB1
dGUgdmFsdWVzIGZvciBmQSBhbmQgZlMsIHVzZSB0aGVtLgorfQorCit0ZW1wbGF0ZTw+Citpbmxp
bmUgdm9pZCBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnM6OmNvbXB1dGU8UGFydGlhbEVs
bGlwdGljYWxBcmNQYXJhbWV0ZXJzOjpDaXJjdWxhclRhbmdlbnRBcmM+KAorICAgIFBhcnRpYWxF
bGxpcHRpY2FsQXJjUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ2lyY3VsYXJUYW5nZW50
QXJjJiBhcmMpCit7CisgICAgICAgIGF1dG8mIHRwMCA9IGFyYy50cDA7CisgICAgICAgIGF1dG8m
IHRwMSA9IGFyYy50cDE7CisgICAgICAgIGF1dG8mIHRwMiA9IGFyYy50cDI7CisKKyAgICAgICAg
UG9pbnQgZDAgeyB0cDAueCAtIHRwMS54LCB0cDAueSAtIHRwMS55IH07CisgICAgICAgIFBvaW50
IGQyIHsgdHAyLnggLSB0cDEueCwgdHAyLnkgLSB0cDEueSB9OworCisgICAgICAgIHN0cnVjdCB7
CisgICAgICAgICAgICBkb3VibGUgZDBkMDsKKyAgICAgICAgICAgIGRvdWJsZSBkMmQyOworICAg
ICAgICAgICAgZG91YmxlIGQwZDI7CisgICAgICAgIH0gZG90UHJvZHVjdHMgPSB7CisgICAgICAg
ICAgICBkMC54ICogZDAueCArIGQwLnkgKiBkMC55LAorICAgICAgICAgICAgZDIueCAqIGQyLngg
KyBkMi55ICogZDIueSwKKyAgICAgICAgICAgIGQwLnggKiBkMi54ICsgZDAueSAqIGQyLnksCisg
ICAgICAgIH07CisKKyAgICAgICAgZG91YmxlIG51bSA9IGQwLnkgKiBkMi54IC0gZDIueSAqIGQw
Lng7CisgICAgICAgIGRvdWJsZSBkZW5vbSA9IHN0ZDo6c3FydChkb3RQcm9kdWN0cy5kMGQwICog
ZG90UHJvZHVjdHMuZDJkMikgLSBkb3RQcm9kdWN0cy5kMGQyOworICAgICAgICBkb3VibGUgZGlz
dCA9IHN0ZDo6YWJzKGFyYy5yYWRpdXMgKiBudW0gLyBkZW5vbSk7CisgICAgICAgIGRvdWJsZSBy
YWRpdXNBYnMgPSBzdGQ6OmFicyhhcmMucmFkaXVzKTsKKyAgICAgICAgZG91YmxlIHJhZGl1c1Np
Z24gPSBhcmMucmFkaXVzIC8gcmFkaXVzQWJzOworICAgICAgICBkb3VibGUgbDAgPSBkaXN0IC8g
c3RkOjpzcXJ0KGRvdFByb2R1Y3RzLmQwZDApICogcmFkaXVzU2lnbjsKKyAgICAgICAgZG91Ymxl
IGwyID0gZGlzdCAvIHN0ZDo6c3FydChkb3RQcm9kdWN0cy5kMmQyKSAqIHJhZGl1c1NpZ247CisK
KyAgICAgICAgcGFyYW1ldGVycy5wMSA9IHsgdHAxLnggKyBkMC54ICogbDAsIHRwMS55ICsgZDAu
eSAqIGwwIH07CisgICAgICAgIHBhcmFtZXRlcnMucDIgPSB7IHRwMS54ICsgZDIueCAqIGwyLCB0
cDEueSArIGQyLnkgKiBsMiB9OworICAgICAgICBwYXJhbWV0ZXJzLnJoID0gcmFkaXVzQWJzOwor
ICAgICAgICBwYXJhbWV0ZXJzLnJ2ID0gcmFkaXVzQWJzOworICAgICAgICBwYXJhbWV0ZXJzLnBo
aSA9IDA7CisgICAgICAgIHBhcmFtZXRlcnMuZkEgPSBmYWxzZTsKKyAgICAgICAgcGFyYW1ldGVy
cy5mUyA9IChudW0gPj0gMCk7Cit9CisKK3N0cnVjdCBHZW5lcmFsUGFyYW1ldHJpY0FyYyB7Cisg
ICAgUG9pbnQgYzsKKyAgICBkb3VibGUgdGhldGExOworICAgIGRvdWJsZSBkdGhldGE7CisKKyAg
ICBzdGF0aWMgdm9pZCBjb21wdXRlKEdlbmVyYWxQYXJhbWV0cmljQXJjJiBhcmMsIGNvbnN0IFBh
cnRpYWxFbGxpcHRpY2FsQXJjUGFyYW1ldGVycyYgcGFyYW1ldGVycykKKyAgICB7CisgICAgICAg
IGRvdWJsZSB4MXAgPSBzdGQ6OmNvcyhwYXJhbWV0ZXJzLnBoaSkgKiAocGFyYW1ldGVycy5wMS54
IC0gcGFyYW1ldGVycy5wMi54KSAvIDIKKyAgICAgICAgICAgICsgc3RkOjpzaW4ocGFyYW1ldGVy
cy5waGkpICogKHBhcmFtZXRlcnMucDEueSAtIHBhcmFtZXRlcnMucDIueSkgLyAyOworICAgICAg
ICBkb3VibGUgeTFwID0gLXN0ZDo6c2luKHBhcmFtZXRlcnMucGhpKSAqIChwYXJhbWV0ZXJzLnAx
LnggLSBwYXJhbWV0ZXJzLnAyLngpIC8gMgorICAgICAgICAgICAgKyBzdGQ6OmNvcyhwYXJhbWV0
ZXJzLnBoaSkgKiAocGFyYW1ldGVycy5wMS55IC0gcGFyYW1ldGVycy5wMi55KSAvIDI7CisKKyAg
ICAgICAgZG91YmxlIGxhbWJkYSA9IHN0ZDo6cG93KHgxcCAvIHBhcmFtZXRlcnMucmgsIDIpICsg
c3RkOjpwb3coeTFwIC8gcGFyYW1ldGVycy5ydiwgMik7CisgICAgICAgIFBvaW50IHJwIHsgcGFy
YW1ldGVycy5yaCwgcGFyYW1ldGVycy5ydiB9OworICAgICAgICBpZiAobGFtYmRhID4gMSkKKyAg
ICAgICAgICAgIHJwID0geyBwYXJhbWV0ZXJzLnJoICogc3RkOjpzcXJ0KGxhbWJkYSksIHBhcmFt
ZXRlcnMucnYgKiBzdGQ6OnNxcnQobGFtYmRhKSB9OworCisgICAgICAgIGRvdWJsZSBmc2duID0g
KHBhcmFtZXRlcnMuZkEgIT0gcGFyYW1ldGVycy5mUykgPyAxIDogLTE7CisgICAgICAgIHN0cnVj
dCB7CisgICAgICAgICAgICBkb3VibGUgcnBYOyBkb3VibGUgcnBZOworICAgICAgICAgICAgZG91
YmxlIHgxcDsgZG91YmxlIHkxcDsKKyAgICAgICAgfSBzcSA9IHsgc3RkOjpwb3cocnAueCwgMiks
IHN0ZDo6cG93KHJwLnksIDIpLCBzdGQ6OnBvdyh4MXAsIDIpLCBzdGQ6OnBvdyh5MXAsIDIpIH07
CisKKyAgICAgICAgZG91YmxlIGNwQmFzZSA9IHN0ZDo6c3FydCgoc3EucnBYICogc3EucnBZIC0g
c3EucnBYICogc3EueTFwIC0gc3EucnBZICogc3EueDFwKQorICAgICAgICAgICAgLyAoc3EucnBY
ICogc3EueTFwICsgc3EucnBZICogc3EueDFwKSk7CisgICAgICAgIFBvaW50IGNwIHsgZnNnbiAq
IGNwQmFzZSAqIHJwLnggKiB5MXAgLyBycC55LCBmc2duICogY3BCYXNlICogLXJwLnkgKiB4MXAg
LyBycC54IH07CisgICAgICAgIGFyYy5jID0geyBzdGQ6OmNvcyhwYXJhbWV0ZXJzLnBoaSkgKiBj
cC54IC0gc3RkOjpzaW4ocGFyYW1ldGVycy5waGkpICogY3AueSArIChwYXJhbWV0ZXJzLnAxLngg
KyBwYXJhbWV0ZXJzLnAyLngpIC8gMiwKKyAgICAgICAgICAgIHN0ZDo6c2luKHBhcmFtZXRlcnMu
cGhpKSAqIGNwLnggKyBzdGQ6OmNvcyhwYXJhbWV0ZXJzLnBoaSkgKiBjcC55ICsgKHBhcmFtZXRl
cnMucDEueSArIHBhcmFtZXRlcnMucDIueSkgLyAyIH07CisKKyAgICAgICAgYXV0byBjYWxjdWxh
dGVBbmdsZSA9CisgICAgICAgICAgICBbJl0oY29uc3QgUG9pbnQmIHUsIGNvbnN0IFBvaW50JiB2
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSB1dTsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIHZ2OworICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgdXY7CisgICAgICAgICAgICAgICAgfSBkb3RzID0geworICAg
ICAgICAgICAgICAgICAgICB1LnggKiB1LnggKyB1LnkgKiB1LnksCisgICAgICAgICAgICAgICAg
ICAgIHYueCAqIHYueCArIHYueSAqIHYueSwKKyAgICAgICAgICAgICAgICAgICAgdS54ICogdi54
ICsgdS55ICogdi55LAorICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBkb3Vi
bGUgYW5nbGUgPSBzdGQ6OmFjb3MoZG90cy51diAvIHN0ZDo6c3FydChkb3RzLnV1KSAqIHN0ZDo6
c3FydChkb3RzLnZ2KSk7CisgICAgICAgICAgICAgICAgaWYgKHUueCAqIHYueSAtIHUueSAqIHYu
eCA+PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYW5nbGU7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIC1hbmdsZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgYXJjLnRoZXRhMSA9
IGNhbGN1bGF0ZUFuZ2xlKHsgMSwgMCB9LCB7ICh4MXAgLSBjcC54KSAvIHJwLngsICh5MXAgLSBj
cC55KSAvIHJwLnkgfSk7CisgICAgICAgIGRvdWJsZSBkYW5nbGUgPSBjYWxjdWxhdGVBbmdsZSgK
KyAgICAgICAgICAgIHsgKHgxcCAtIGNwLngpIC8gcnAueCwgKHkxcCAtIGNwLnkpIC8gcnAueSB9
LAorICAgICAgICAgICAgeyAoLXgxcCAtIGNwLngpIC8gcnAueCwgKC15MXAgLSBjcC55KSAvIHJw
LnkgfSk7CisKKyAgICAgICAgaWYgKHBhcmFtZXRlcnMuZlMpIHsKKyAgICAgICAgICAgIGlmIChk
YW5nbGUgPCAwKQorICAgICAgICAgICAgICAgIGRhbmdsZSArPSAyICogTV9QSTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChkYW5nbGUgPiAwKQorICAgICAgICAgICAgICAgIGRh
bmdsZSAtPSAyICogTV9QSTsKKyAgICAgICAgfQorICAgICAgICBhcmMuZHRoZXRhID0gZGFuZ2xl
OworICAgIH0KK307CisKK3N0cnVjdCBQYXRoUHJvY2Vzc2luZ1N0YXRlIHsKKyAgICBQb2ludCBz
dGFydGluZ1BvaW50OworICAgIFBvaW50IGN1cnJlbnRQb2ludDsKKyAgICBQb2ludCBwcmlvckVu
ZFBvaW50OworCisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAgICBX
ZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtSW52ZXJzZTsKKworICAgIFBvaW50IG1h
cChjb25zdCBQb2ludCYgcCkKKyAgICB7CisgICAgICAgIFBvaW50IG1hcHBlZFBvaW50OworICAg
ICAgICB0cmFuc2Zvcm0ubWFwKHAueCwgcC55LCBtYXBwZWRQb2ludC54LCBtYXBwZWRQb2ludC55
KTsKKyAgICAgICAgcmV0dXJuIG1hcHBlZFBvaW50OworICAgIH0KKworICAgIFBvaW50IG1hcElu
dmVyc2UoY29uc3QgUG9pbnQmIHApCisgICAgeworICAgICAgICBQb2ludCBtYXBwZWRQb2ludDsK
KyAgICAgICAgdHJhbnNmb3JtSW52ZXJzZS5tYXAocC54LCBwLnksIG1hcHBlZFBvaW50LngsIG1h
cHBlZFBvaW50LnkpOworICAgICAgICByZXR1cm4gbWFwcGVkUG9pbnQ7CisgICAgfQorCisgICAg
dGVtcGxhdGU8c2l6ZV90IE4+CisgICAgc3RydWN0IFZhbHVlUmFuZ2UgeworICAgICAgICB0eXBl
bmFtZSBWYWx1ZXM8Tj46Oml0ZXJhdG9yIGJlZ2luOworICAgICAgICB0eXBlbmFtZSBWYWx1ZXM8
Tj46Oml0ZXJhdG9yIGVuZDsKKyAgICB9OworCisgICAgdGVtcGxhdGU8Q29tbWFuZCBjb21tYW5k
LCBzaXplX3QgTj4KKyAgICBzdGF0aWMgdm9pZCBhcHBseShQYXRoUHJvY2Vzc2luZ1N0YXRlJiwg
VmFsdWVSYW5nZTxOPikgPSBkZWxldGU7Cit9OworCit0ZW1wbGF0ZTw+CitpbmxpbmUgdm9pZCBQ
YXRoUHJvY2Vzc2luZ1N0YXRlOjphcHBseTxDb21tYW5kOjpNb3ZlVG8sIDI+KFBhdGhQcm9jZXNz
aW5nU3RhdGUmLCBWYWx1ZVJhbmdlPDI+KQoreworfQorCitzdHJ1Y3QgUGF0aENvbnRhaW5lciB7
CisgICAgdXNpbmcgQ29tbWFuZFZlY3RvciA9IFZlY3RvcjxDb21tYW5kLCAxNj47CisgICAgdXNp
bmcgVmFsdWVWZWN0b3IgPSBWZWN0b3I8ZG91YmxlLCA2ND47CisKKyAgICBDb21tYW5kVmVjdG9y
IGNvbW1hbmRzOworICAgIFZhbHVlVmVjdG9yIHZhbHVlczsKK307CisKK3N0cnVjdCBJbW1lZGlh
dGVTdGF0ZSA6IFBhdGhQcm9jZXNzaW5nU3RhdGUgeworICAgIHRlbXBsYXRlPHNpemVfdCBOPgor
ICAgIHZvaWQgYXBwbHkoQ29tbWFuZCBjb21tYW5kLCBjb25zdCBWYWx1ZXM8Tj4mIHZhbHVlcykK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoY29tbWFuZCkgeworICAgICAgICBjYXNlIENvbW1hbmQ6
Ok1vdmVUbzoKKyAgICAgICAgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoTiA9PSAyKTsK
KyAgICAgICAgICAgIFBvaW50IHAgPSBtYXAoeyB2YWx1ZXNbMF0sIHZhbHVlc1sxXSB9KTsKKwor
ICAgICAgICAgICAgc3RhcnRpbmdQb2ludCA9IHA7CisgICAgICAgICAgICBjdXJyZW50UG9pbnQg
PSBwOworICAgICAgICAgICAgcHJpb3JFbmRQb2ludCA9IHA7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIENvbW1hbmQ6OkNsb3NlOgorICAgICAgICB7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChOID09IDApOworICAgICAgICAgICAgY3VycmVudFBvaW50
ID0gc3RhcnRpbmdQb2ludDsKKyAgICAgICAgICAgIHByaW9yRW5kUG9pbnQgPSBzdGFydGluZ1Bv
aW50OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb21tYW5k
OjpMaW5lVG86CisgICAgICAgIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKE4gPT0gMik7
CisgICAgICAgICAgICBQb2ludCBwMSA9IG1hcCh7IHZhbHVlc1swXSwgdmFsdWVzWzFdIH0pOwor
CisgICAgICAgICAgICBjdXJyZW50UG9pbnQgPSBwMTsKKyAgICAgICAgICAgIHByaW9yRW5kUG9p
bnQgPSBwMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29t
bWFuZDo6UmVjdDoKKyAgICAgICAgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoTiA9PSA0
KTsKKyAgICAgICAgICAgIFBvaW50IHAwID0gbWFwKHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0gfSk7
CisKKyAgICAgICAgICAgIGN1cnJlbnRQb2ludCA9IHAwOworICAgICAgICAgICAgcHJpb3JFbmRQ
b2ludCA9IHAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBD
b21tYW5kOjpRdWFkcmF0aWNDdXJ2ZVRvOgorICAgICAgICB7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChOID09IDQpOworICAgICAgICAgICAgUG9pbnQgcDEgPSBtYXAoeyB2YWx1ZXNbMF0s
IHZhbHVlc1sxXSB9KTsKKyAgICAgICAgICAgIFBvaW50IHAyID0gbWFwKHsgdmFsdWVzWzJdLCB2
YWx1ZXNbM10gfSk7CisKKyAgICAgICAgICAgIGN1cnJlbnRQb2ludCA9IHAyOworICAgICAgICAg
ICAgc3RhcnRpbmdQb2ludCA9IHAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBDb21tYW5kOjpDdWJpY0N1cnZlVG86CisgICAgICAgIHsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKE4gPT0gNik7CisgICAgICAgICAgICBQb2ludCBwMiA9IG1hcCh7IHZh
bHVlc1syXSwgdmFsdWVzWzNdIH0pOworICAgICAgICAgICAgUG9pbnQgcDMgPSBtYXAoeyB2YWx1
ZXNbNF0sIHZhbHVlc1s1XSB9KTsKKworICAgICAgICAgICAgY3VycmVudFBvaW50ID0gcDM7Cisg
ICAgICAgICAgICBwcmlvckVuZFBvaW50ID0gcDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIENvbW1hbmQ6OkNpcmN1bGFyQ2xvY2t3aXNlQXJjOgorICAgICAg
ICBjYXNlIENvbW1hbmQ6OkNpcmN1bGFyQ291bnRlckNsb2Nrd2lzZUFyYzoKKyAgICAgICAgewor
ICAgICAgICAgICAgdXNpbmcgQXJjVHlwZSA9IFBhcnRpYWxFbGxpcHRpY2FsQXJjUGFyYW1ldGVy
czo6Q2lyY3VsYXJBcmM7CisKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKE4gPT0gNSk7Cisg
ICAgICAgICAgICBBcmNUeXBlIGFyYyB7IHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0gfSwgdmFsdWVz
WzJdLCB2YWx1ZXNbM10sIHZhbHVlc1s0XSB9OworCisgICAgICAgICAgICBQYXJ0aWFsRWxsaXB0
aWNhbEFyY1BhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgIFBhcnRpYWxFbGxpcHRp
Y2FsQXJjUGFyYW1ldGVyczo6Y29tcHV0ZTxBcmNUeXBlPihwYXJhbWV0ZXJzLCBhcmMpOworCisg
ICAgICAgICAgICBhdXRvIG1wMiA9IG1hcChwYXJhbWV0ZXJzLnAyKTsKKyAgICAgICAgICAgIGN1
cnJlbnRQb2ludCA9IG1wMjsKKyAgICAgICAgICAgIHByaW9yRW5kUG9pbnQgPSBtcDI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvbW1hbmQ6OkNpcmN1bGFy
VGFuZ2VudEFyYzoKKyAgICAgICAgeworICAgICAgICAgICAgdXNpbmcgQXJjVHlwZSA9IFBhcnRp
YWxFbGxpcHRpY2FsQXJjUGFyYW1ldGVyczo6Q2lyY3VsYXJUYW5nZW50QXJjOworCisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChOID09IDUpOworICAgICAgICAgICAgQXJjVHlwZSBhcmMgeyBt
YXBJbnZlcnNlKGN1cnJlbnRQb2ludCksCisgICAgICAgICAgICAgICAgeyB2YWx1ZXNbMF0sIHZh
bHVlc1sxXSB9LCB7IHZhbHVlc1syXSwgdmFsdWVzWzNdIH0sIHZhbHVlc1s0XSB9OworCisgICAg
ICAgICAgICBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICAg
ICAgICAgIFBhcnRpYWxFbGxpcHRpY2FsQXJjUGFyYW1ldGVyczo6Y29tcHV0ZTxBcmNUeXBlPihw
YXJhbWV0ZXJzLCBhcmMpOworCisgICAgICAgICAgICBhdXRvIG1wMiA9IG1hcChwYXJhbWV0ZXJz
LnAyKTsKKyAgICAgICAgICAgIGN1cnJlbnRQb2ludCA9IG1wMjsKKyAgICAgICAgICAgIHByaW9y
RW5kUG9pbnQgPSBtcDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIENvbW1hbmQ6OlRyYW5zZm9ybToKKyAgICAgICAgeworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoTiA9PSAxMik7CisgICAgICAgICAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdHJh
bnNmb3JtKHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2YWx1ZXNbMl0sCisgICAgICAgICAgICAgICAg
dmFsdWVzWzNdLCB2YWx1ZXNbNF0sIHZhbHVlc1s1XSk7CisgICAgICAgICAgICBXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm0gaW52ZXJzZSh2YWx1ZXNbNl0sIHZhbHVlc1s3XSwgdmFsdWVzWzhdLAor
ICAgICAgICAgICAgICAgIHZhbHVlc1s5XSwgdmFsdWVzWzEwXSwgdmFsdWVzWzExXSk7CisKKyAg
ICAgICAgICAgIGF1dG8mIHN0YXRlID0gKnRoaXM7CisgICAgICAgICAgICBzdGF0ZS50cmFuc2Zv
cm0ubXVsdGlwbHkoaW52ZXJzZSk7CisgICAgICAgICAgICBzdGF0ZS50cmFuc2Zvcm1JbnZlcnNl
ID0gdHJhbnNmb3JtICogc3RhdGUudHJhbnNmb3JtSW52ZXJzZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfTsKKworc3RydWN0IEdlbmVyaWNQYXRo
IHsKKyAgICB0ZW1wbGF0ZTxzaXplX3QgTiA9IDA+CisgICAgdm9pZCBhZGQoQ29tbWFuZCBjb21t
YW5kLCBjb25zdCBWYWx1ZXM8Tj4mIHZhbHVlcyA9IHsgfSkKKyAgICB7CisgICAgICAgIGNvbnRh
aW5lci5jb21tYW5kcy5hcHBlbmQoY29tbWFuZCk7CisgICAgICAgIGNvbnRhaW5lci52YWx1ZXMu
YXBwZW5kUmFuZ2UodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5lbmQoKSk7CisKKyAgICAgICAgaW1t
ZWRpYXRlU3RhdGUuYXBwbHkoY29tbWFuZCwgdmFsdWVzKTsKKyAgICB9CisKKyAgICB2b2lkIGNs
ZWFyKCkKKyAgICB7CisgICAgICAgIGNvbnRhaW5lci5jb21tYW5kcy5jbGVhcigpOworICAgICAg
ICBjb250YWluZXIudmFsdWVzLmNsZWFyKCk7CisKKyAgICAgICAgaW1tZWRpYXRlU3RhdGUuc3Rh
cnRpbmdQb2ludCA9IHsgfTsKKyAgICAgICAgaW1tZWRpYXRlU3RhdGUuY3VycmVudFBvaW50ID0g
eyB9OworICAgICAgICBpbW1lZGlhdGVTdGF0ZS5wcmlvckVuZFBvaW50ID0geyB9OworCisgICAg
ICAgIGltbWVkaWF0ZVN0YXRlLnRyYW5zZm9ybSA9IHsgfTsKKyAgICAgICAgaW1tZWRpYXRlU3Rh
dGUudHJhbnNmb3JtSW52ZXJzZSA9IHsgfTsKKyAgICB9CisKKyAgICBQYXRoQ29udGFpbmVyIGNv
bnRhaW5lcjsKKyAgICBJbW1lZGlhdGVTdGF0ZSBpbW1lZGlhdGVTdGF0ZTsKK307CisKK3N0cnVj
dCBCYXNpY1Byb2Nlc3NvciB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRjEsIHR5cGVuYW1lIEYy
LCB0eXBlbmFtZSBGMywgdHlwZW5hbWUgRjQ+CisgICAgdm9pZCBhcHBseShjb25zdCBQYXRoQ29u
dGFpbmVyJiBjb250YWluZXIsIGNvbnN0IEYxJiBtb3ZlVG8sIGNvbnN0IEYyJiBsaW5lVG8sIGNv
bnN0IEYzJiBjdXJ2ZVRvLCBjb25zdCBGNCYgY2xvc2UpCisgICAgeworICAgICAgICBQYXRoUHJv
Y2Vzc2luZ1N0YXRlIHN0YXRlOworCisgICAgICAgIGF1dG8gaXQgPSBjb250YWluZXIudmFsdWVz
LmJlZ2luKCk7CisgICAgICAgIGZvciAoYXV0byBjb21tYW5kIDogY29udGFpbmVyLmNvbW1hbmRz
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGNvbW1hbmQpIHsKKyAgICAgICAgICAgIGNhc2UgQ29t
bWFuZDo6TW92ZVRvOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGl0ICsgMiA8PSBjb250YWluZXIudmFsdWVzLmVuZCgpKTsKKyAgICAgICAgICAgICAgICBQ
b2ludCBwID0gc3RhdGUubWFwKHsgaXRbMF0sIGl0WzFdIH0pOworICAgICAgICAgICAgICAgIGl0
ICs9IDI7CisKKyAgICAgICAgICAgICAgICBtb3ZlVG8ocCk7CisKKyAgICAgICAgICAgICAgICBz
dGF0ZS5zdGFydGluZ1BvaW50ID0gcDsKKyAgICAgICAgICAgICAgICBzdGF0ZS5jdXJyZW50UG9p
bnQgPSBwOworICAgICAgICAgICAgICAgIHN0YXRlLnByaW9yRW5kUG9pbnQgPSBwOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDb21tYW5k
OjpDbG9zZToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjbG9zZSgpOworCisgICAg
ICAgICAgICAgICAgc3RhdGUuY3VycmVudFBvaW50ID0gc3RhdGUuc3RhcnRpbmdQb2ludDsKKyAg
ICAgICAgICAgICAgICBzdGF0ZS5wcmlvckVuZFBvaW50ID0gc3RhdGUuc3RhcnRpbmdQb2ludDsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2Ug
Q29tbWFuZDo6TGluZVRvOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGl0ICsgMiA8PSBjb250YWluZXIudmFsdWVzLmVuZCgpKTsKKyAgICAgICAgICAgICAg
ICBQb2ludCBwID0gc3RhdGUubWFwKHsgaXRbMF0sIGl0WzFdIH0pOworICAgICAgICAgICAgICAg
IGl0ICs9IDI7CisKKyAgICAgICAgICAgICAgICBsaW5lVG8ocCk7CisKKyAgICAgICAgICAgICAg
ICBzdGF0ZS5jdXJyZW50UG9pbnQgPSBwOworICAgICAgICAgICAgICAgIHN0YXRlLnByaW9yRW5k
UG9pbnQgPSBwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgY2FzZSBDb21tYW5kOjpSZWN0OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGl0ICsgNCA8PSBjb250YWluZXIudmFsdWVzLmVuZCgpKTsKKyAgICAg
ICAgICAgICAgICBQb2ludCBwMCA9IHN0YXRlLm1hcCh7IGl0WzBdLCBpdFsxXSB9KTsKKyAgICAg
ICAgICAgICAgICBQb2ludCBwMSA9IHN0YXRlLm1hcCh7IGl0WzJdLCBpdFsxXSB9KTsKKyAgICAg
ICAgICAgICAgICBQb2ludCBwMiA9IHN0YXRlLm1hcCh7IGl0WzJdLCBpdFszXSB9KTsKKyAgICAg
ICAgICAgICAgICBQb2ludCBwMyA9IHN0YXRlLm1hcCh7IGl0WzBdLCBpdFszXSB9KTsKKyAgICAg
ICAgICAgICAgICBpdCArPSA0OworCisgICAgICAgICAgICAgICAgbGluZVRvKHAxKTsKKyAgICAg
ICAgICAgICAgICBsaW5lVG8ocDIpOworICAgICAgICAgICAgICAgIGxpbmVUbyhwMyk7CisKKyAg
ICAgICAgICAgICAgICBzdGF0ZS5jdXJyZW50UG9pbnQgPSBwMDsKKyAgICAgICAgICAgICAgICBz
dGF0ZS5wcmlvckVuZFBvaW50ID0gcDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIENvbW1hbmQ6OlF1YWRyYXRpY0N1cnZlVG86CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXQgKyA0IDw9IGNvbnRh
aW5lci52YWx1ZXMuZW5kKCkpOworICAgICAgICAgICAgICAgIFBvaW50IHAwID0gc3RhdGUubWFw
SW52ZXJzZShzdGF0ZS5jdXJyZW50UG9pbnQpOworICAgICAgICAgICAgICAgIFBvaW50IHFwMSB7
IGl0WzBdLCBpdFsxXSB9OworICAgICAgICAgICAgICAgIFBvaW50IHFwMiB7IGl0WzJdLCBpdFsz
XSB9OworICAgICAgICAgICAgICAgIGl0ICs9IDQ7CisKKyAgICAgICAgICAgICAgICBQb2ludCBw
MSB7IHAwLnggKyAyLjAgLyAzLjAgKiAocXAxLnggLSBwMC54KSwgcDAueSArIDIuMCAvIDMuMCAq
IChxcDEueSAtIHAwLnkpIH07CisgICAgICAgICAgICAgICAgUG9pbnQgcDIgeyBxcDIueCArIDIu
MCAvIDMuMCAqIChxcDEueCAtIHFwMi54KSwgcXAyLnkgKyAyLjAgLyAzLjAgKiAocXAxLnkgLSBx
cDIueSkgfTsKKyAgICAgICAgICAgICAgICBjdXJ2ZVRvKHN0YXRlLm1hcChwMSksIHN0YXRlLm1h
cChwMiksIHN0YXRlLm1hcChxcDIpKTsKKworICAgICAgICAgICAgICAgIHN0YXRlLmN1cnJlbnRQ
b2ludCA9IHN0YXRlLm1hcChxcDIpOworICAgICAgICAgICAgICAgIHN0YXRlLnByaW9yRW5kUG9p
bnQgPSBzdGF0ZS5tYXAocXAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNhc2UgQ29tbWFuZDo6Q3ViaWNDdXJ2ZVRvOgorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGl0ICsgNiA8PSBjb250YWluZXIudmFs
dWVzLmVuZCgpKTsKKyAgICAgICAgICAgICAgICBQb2ludCBwMSA9IHN0YXRlLm1hcCh7IGl0WzBd
LCBpdFsxXSB9KTsKKyAgICAgICAgICAgICAgICBQb2ludCBwMiA9IHN0YXRlLm1hcCh7IGl0WzJd
LCBpdFszXSB9KTsKKyAgICAgICAgICAgICAgICBQb2ludCBwMyA9IHN0YXRlLm1hcCh7IGl0WzRd
LCBpdFs1XSB9KTsKKyAgICAgICAgICAgICAgICBpdCArPSA2OworCisgICAgICAgICAgICAgICAg
Y3VydmVUbyhwMSwgcDIsIHAzKTsKKworICAgICAgICAgICAgICAgIHN0YXRlLmN1cnJlbnRQb2lu
dCA9IHAzOworICAgICAgICAgICAgICAgIHN0YXRlLnByaW9yRW5kUG9pbnQgPSBwMjsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ29tbWFu
ZDo6Q2lyY3VsYXJDbG9ja3dpc2VBcmM6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
dXNpbmcgQXJjVHlwZSA9IFBhcnRpYWxFbGxpcHRpY2FsQXJjUGFyYW1ldGVyczo6Q2lyY3VsYXJB
cmM7CisKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpdCArIDUgPD0gY29udGFpbmVy
LnZhbHVlcy5lbmQoKSk7CisgICAgICAgICAgICAgICAgQXJjVHlwZSBhcmMgeyB7IGl0WzBdLCBp
dFsxXSB9LCBpdFsyXSwgaXRbM10sIGl0WzRdIH07CisgICAgICAgICAgICAgICAgaXQgKz0gNTsK
KworICAgICAgICAgICAgICAgIHdoaWxlIChhcmMuZW5kQW5nbGUgPD0gYXJjLnN0YXJ0QW5nbGUp
CisgICAgICAgICAgICAgICAgICAgIGFyYy5lbmRBbmdsZSArPSAyICogTV9QSTsKKworICAgICAg
ICAgICAgICAgIFBhcnRpYWxFbGxpcHRpY2FsQXJjUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAg
ICAgICAgICAgICAgIFBhcnRpYWxFbGxpcHRpY2FsQXJjUGFyYW1ldGVyczo6Y29tcHV0ZTxBcmNU
eXBlPihwYXJhbWV0ZXJzLCBhcmMpOworCisgICAgICAgICAgICAgICAgbGluZVRvKHN0YXRlLm1h
cChwYXJhbWV0ZXJzLnAxKSk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVBcmNDdXJ2ZXModHJ1
ZSwgYXJjLnN0YXJ0QW5nbGUsIGFyYy5lbmRBbmdsZSwKKyAgICAgICAgICAgICAgICAgICAgWyZd
KGNvbnN0IFBvaW50JiBjcDEsIGNvbnN0IFBvaW50JiBjcDIsIGNvbnN0IFBvaW50JiBjcDMpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIGMgPSBh
cmMuYzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIHJhZGl1cyA9IGFyYy5yYWRpdXM7
CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZVRvKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLm1hcCh7IGMueCArIHJhZGl1cyAqIGNwMS54LCBjLnkgKyByYWRpdXMgKiBj
cDEueSB9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tYXAoeyBjLnggKyBy
YWRpdXMgKiBjcDIueCwgYy55ICsgcmFkaXVzICogY3AyLnkgfSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUubWFwKHsgYy54ICsgcmFkaXVzICogY3AzLngsIGMueSArIHJhZGl1
cyAqIGNwMy55IH0pKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAg
ICBhdXRvIG1wMiA9IHN0YXRlLm1hcChwYXJhbWV0ZXJzLnAyKTsKKyAgICAgICAgICAgICAgICBz
dGF0ZS5jdXJyZW50UG9pbnQgPSBtcDI7CisgICAgICAgICAgICAgICAgc3RhdGUucHJpb3JFbmRQ
b2ludCA9IG1wMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgQ29tbWFuZDo6Q2lyY3VsYXJDb3VudGVyQ2xvY2t3aXNlQXJjOgorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHVzaW5nIEFyY1R5cGUgPSBQYXJ0aWFsRWxsaXB0aWNh
bEFyY1BhcmFtZXRlcnM6OkNpcmN1bGFyQXJjOworCisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaXQgKyA1IDw9IGNvbnRhaW5lci52YWx1ZXMuZW5kKCkpOworICAgICAgICAgICAgICAg
IEFyY1R5cGUgYXJjIHsgeyBpdFswXSwgaXRbMV0gfSwgaXRbMl0sIGl0WzNdLCBpdFs0XSB9Owor
ICAgICAgICAgICAgICAgIGl0ICs9IDU7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoYXJjLnN0
YXJ0QW5nbGUgPCBhcmMuZW5kQW5nbGUpCisgICAgICAgICAgICAgICAgICAgIGFyYy5zdGFydEFu
Z2xlICs9IDIgKiBNX1BJOworCisgICAgICAgICAgICAgICAgUGFydGlhbEVsbGlwdGljYWxBcmNQ
YXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgICAgICAgICAgICAgUGFydGlhbEVsbGlwdGljYWxB
cmNQYXJhbWV0ZXJzOjpjb21wdXRlPEFyY1R5cGU+KHBhcmFtZXRlcnMsIGFyYyk7CisKKyAgICAg
ICAgICAgICAgICBsaW5lVG8oc3RhdGUubWFwKHBhcmFtZXRlcnMucDEpKTsKKyAgICAgICAgICAg
ICAgICBnZW5lcmF0ZUFyY0N1cnZlcyhmYWxzZSwgYXJjLnN0YXJ0QW5nbGUsIGFyYy5lbmRBbmds
ZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKGNvbnN0IFBvaW50JiBjcDEsIGNvbnN0IFBvaW50
JiBjcDIsIGNvbnN0IFBvaW50JiBjcDMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8mIGMgPSBhcmMuYzsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGF1dG8mIHJhZGl1cyA9IGFyYy5yYWRpdXM7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2
ZVRvKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1hcCh7IGMueCArIHJhZGl1
cyAqIGNwMS54LCBjLnkgKyByYWRpdXMgKiBjcDEueSB9KSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5tYXAoeyBjLnggKyByYWRpdXMgKiBjcDIueCwgYy55ICsgcmFkaXVzICog
Y3AyLnkgfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubWFwKHsgYy54ICsg
cmFkaXVzICogY3AzLngsIGMueSArIHJhZGl1cyAqIGNwMy55IH0pKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBhdXRvIG1wMiA9IHN0YXRlLm1hcChwYXJhbWV0
ZXJzLnAyKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5jdXJyZW50UG9pbnQgPSBtcDI7CisgICAg
ICAgICAgICAgICAgc3RhdGUucHJpb3JFbmRQb2ludCA9IG1wMjsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ29tbWFuZDo6Q2lyY3VsYXJU
YW5nZW50QXJjOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVzaW5nIEFyY1R5cGUg
PSBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnM6OkNpcmN1bGFyVGFuZ2VudEFyYzsKKwor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGl0ICsgNSA8PSBjb250YWluZXIudmFsdWVz
LmVuZCgpKTsKKyAgICAgICAgICAgICAgICBBcmNUeXBlIGFyYyB7IHN0YXRlLm1hcEludmVyc2Uo
c3RhdGUuY3VycmVudFBvaW50KSwKKyAgICAgICAgICAgICAgICAgICAgeyBpdFswXSwgaXRbMV0g
fSwgeyBpdFsyXSwgaXRbM10gfSwgaXRbNF0gfTsKKyAgICAgICAgICAgICAgICBpdCArPSA1Owor
CisgICAgICAgICAgICAgICAgaWYgKChhcmMudHAwLnggPT0gYXJjLnRwMS54ICYmIGFyYy50cDAu
eSA9PSBhcmMudHAxLnkpCisgICAgICAgICAgICAgICAgICAgIHx8IChhcmMudHAxLnggPT0gYXJj
LnRwMi54ICYmIGFyYy50cDEueSA9PSBhcmMudHAyLnkpCisgICAgICAgICAgICAgICAgICAgIHx8
ICFhcmMucmFkaXVzIHx8ICFhcmVhT2ZUcmlhbmdlKGFyYy50cDAsIGFyYy50cDEsIGFyYy50cDIp
KSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gbXRwMSA9IHN0YXRlLm1hcChhcmMudHAxKTsK
KyAgICAgICAgICAgICAgICAgICAgbGluZVRvKG10cDEpOworICAgICAgICAgICAgICAgICAgICBz
dGF0ZS5jdXJyZW50UG9pbnQgPSBtdHAxOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wcmlv
ckVuZFBvaW50ID0gbXRwMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgUGFydGlhbEVsbGlwdGljYWxBcmNQYXJhbWV0ZXJz
IHBhcmFtZXRlcnM7CisgICAgICAgICAgICAgICAgUGFydGlhbEVsbGlwdGljYWxBcmNQYXJhbWV0
ZXJzOjpjb21wdXRlPEFyY1R5cGU+KHBhcmFtZXRlcnMsIGFyYyk7CisKKyAgICAgICAgICAgICAg
ICBHZW5lcmFsUGFyYW1ldHJpY0FyYyBwYXJhbWV0cmljQXJjOworICAgICAgICAgICAgICAgIEdl
bmVyYWxQYXJhbWV0cmljQXJjOjpjb21wdXRlKHBhcmFtZXRyaWNBcmMsIHBhcmFtZXRlcnMpOwor
ICAgICAgICAgICAgICAgIGRvdWJsZSBzdGFydEFuZ2xlID0gcGFyYW1ldHJpY0FyYy50aGV0YTE7
CisgICAgICAgICAgICAgICAgZG91YmxlIGVuZEFuZ2xlID0gcGFyYW1ldHJpY0FyYy50aGV0YTEg
KyBwYXJhbWV0cmljQXJjLmR0aGV0YTsKKworICAgICAgICAgICAgICAgIGxpbmVUbyhzdGF0ZS5t
YXAocGFyYW1ldGVycy5wMSkpOworICAgICAgICAgICAgICAgIGdlbmVyYXRlQXJjQ3VydmVzKHBh
cmFtZXRlcnMuZlMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlLAorICAgICAgICAgICAgICAgICAgICBb
Jl0oY29uc3QgUG9pbnQmIGNwMSwgY29uc3QgUG9pbnQmIGNwMiwgY29uc3QgUG9pbnQmIGNwMykK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYgYyA9
IHBhcmFtZXRyaWNBcmMuYzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIHJhZGl1cyA9
IGFyYy5yYWRpdXM7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZVRvKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlLm1hcCh7IGMueCArIHJhZGl1cyAqIGNwMS54LCBjLnkg
KyByYWRpdXMgKiBjcDEueSB9KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5t
YXAoeyBjLnggKyByYWRpdXMgKiBjcDIueCwgYy55ICsgcmFkaXVzICogY3AyLnkgfSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubWFwKHsgYy54ICsgcmFkaXVzICogY3AzLngs
IGMueSArIHJhZGl1cyAqIGNwMy55IH0pKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAg
ICAgICAgICAgICAgICBzdGF0ZS5jdXJyZW50UG9pbnQgPSBzdGF0ZS5tYXAocGFyYW1ldGVycy5w
Mik7CisgICAgICAgICAgICAgICAgc3RhdGUucHJpb3JFbmRQb2ludCA9IHN0YXRlLm1hcChwYXJh
bWV0ZXJzLnAyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgQ29tbWFuZDo6VHJhbnNmb3JtOgorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGl0ICsgMTIgPD0gY29udGFpbmVyLnZhbHVlcy5lbmQoKSk7CisgICAgICAgICAgICAg
ICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybShpdFswXSwgaXRbMV0sIGl0WzJd
LCBpdFszXSwgaXRbNF0sIGl0WzVdKTsKKyAgICAgICAgICAgICAgICBXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gaW52ZXJzZShpdFs2XSwgaXRbN10sIGl0WzhdLCBpdFs5XSwgaXRbMTBdLCBpdFsx
MV0pOworICAgICAgICAgICAgICAgIGl0ICs9IDEyOworCisgICAgICAgICAgICAgICAgc3RhdGUu
dHJhbnNmb3JtLm11bHRpcGx5KGludmVyc2UpOworICAgICAgICAgICAgICAgIHN0YXRlLnRyYW5z
Zm9ybUludmVyc2UgPSB0cmFuc2Zvcm0gKiBzdGF0ZS50cmFuc2Zvcm1JbnZlcnNlOworCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBS
RUxFQVNFX0FTU0VSVChpdCA9PSBjb250YWluZXIudmFsdWVzLmVuZCgpKTsKKyAgICB9Cit9Owor
CitzdHJ1Y3QgRmFzdEJvdW5kaW5nUmVjdFByb2Nlc3NvciB7CisgICAgdm9pZCBhcHBseShjb25z
dCBQYXRoQ29udGFpbmVyJiBjb250YWluZXIsIFBvaW50JiBib3R0b21MZWZ0LCBQb2ludCYgdG9w
UmlnaHQpCisgICAgeworICAgICAgICBib3R0b21MZWZ0ID0geyB9OworICAgICAgICB0b3BSaWdo
dCA9IHsgfTsKKyAgICAgICAgYm9vbCBleHRlbnRzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKworICAg
ICAgICBhdXRvIGV4cGFuZEV4dGVudHMgPQorICAgICAgICAgICAgWyZdKGNvbnN0IFBvaW50JiBw
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChwLnggPCBib3R0b21MZWZ0Lngp
CisgICAgICAgICAgICAgICAgICAgIGJvdHRvbUxlZnQueCA9IHAueDsKKyAgICAgICAgICAgICAg
ICBpZiAocC54ID4gdG9wUmlnaHQueCkKKyAgICAgICAgICAgICAgICAgICAgdG9wUmlnaHQueCA9
IHAueDsKKworICAgICAgICAgICAgICAgIGlmIChwLnkgPCBib3R0b21MZWZ0LnkpCisgICAgICAg
ICAgICAgICAgICAgIGJvdHRvbUxlZnQueSA9IHAueTsKKyAgICAgICAgICAgICAgICBpZiAocC55
ID4gdG9wUmlnaHQueSkKKyAgICAgICAgICAgICAgICAgICAgdG9wUmlnaHQueSA9IHAueTsKKyAg
ICAgICAgICAgIH07CisKKyAgICAgICAgQmFzaWNQcm9jZXNzb3IgcHJvY2Vzc29yOworICAgICAg
ICBwcm9jZXNzb3IuYXBwbHkoY29udGFpbmVyLAorICAgICAgICAgICAgWyZdKGNvbnN0IFBvaW50
JiBwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghZXh0ZW50c0luaXRpYWxp
emVkKSB7CisgICAgICAgICAgICAgICAgICAgIGV4dGVudHNJbml0aWFsaXplZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIGJvdHRvbUxlZnQgPSBwOworICAgICAgICAgICAgICAgICAgICB0
b3BSaWdodCA9IHA7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg
IGV4cGFuZEV4dGVudHMocCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgWyZdKGNvbnN0
IFBvaW50JiBwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGV4cGFuZEV4dGVudHMo
cCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgWyZdKGNvbnN0IFBvaW50JiBwMSwgY29u
c3QgUG9pbnQmIHAyLCBjb25zdCBQb2ludCYgcDMpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IGNvbnRyb2wgcG9pbnRzIGFyZSBub3QgZW5vdWdoLgorICAgICAgICAg
ICAgICAgIGV4cGFuZEV4dGVudHMocDEpOworICAgICAgICAgICAgICAgIGV4cGFuZEV4dGVudHMo
cDIpOworICAgICAgICAgICAgICAgIGV4cGFuZEV4dGVudHMocDMpOworICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgIFsmXSB7IH0pOworICAgIH0KK307CisKK3N0cnVjdCBDb250YWluZWRJbkZp
bGxQcm9jZXNzb3IgeworICAgIGVudW0gY2xhc3MgV2luZFJ1bGUgeworICAgICAgICBFdmVuT2Rk
LAorICAgICAgICBXaW5kaW5nLAorICAgIH07CisKKyAgICBib29sIGFwcGx5KGNvbnN0IFBhdGhD
b250YWluZXImIGNvbnRhaW5lciwgY29uc3QgUG9pbnQmIHQsIFdpbmRSdWxlIHJ1bGUpCisgICAg
eworICAgICAgICBQb2ludCBzdGFydGluZ1BvaW50OworICAgICAgICBQb2ludCBjdXJyZW50UG9p
bnQ7CisgICAgICAgIGJvb2wgaGFzQ3VycmVudFBvaW50IHsgZmFsc2UgfTsKKyAgICAgICAgYm9v
bCBvbkVkZ2UgeyBmYWxzZSB9OworICAgICAgICBpbnQgd2luZGluZyB7IDAgfTsKKworICAgICAg
ICBCYXNpY1Byb2Nlc3NvciBwcm9jZXNzb3I7CisKKyAgICAgICAgYXV0byBjb21wYXJlRWRnZSA9
CisgICAgICAgICAgICBbJl0oY29uc3QgUG9pbnQmIHAxLCBjb25zdCBQb2ludCYgcDIsIGNvbnN0
IFBvaW50JiBtdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgeworICAg
ICAgICAgICAgICAgICAgICBkb3VibGUgeHAycDEsIHlwMnAxOworICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgeG10cDEsIHltdHAxOworICAgICAgICAgICAgICAgIH0gZGVsdGEgPSB7IHAyLngg
LSBwMS54LCBwMi55IC0gcDEueSwgbXQueCAtIHAxLngsIG10LnkgLSBwMS55IH07CisgICAgICAg
ICAgICAgICAgaWYgKCFkZWx0YS54cDJwMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1k
ZWx0YS54bXRwMTsKKyAgICAgICAgICAgICAgICBpZiAoc3RkOjpzaWduYml0KGRlbHRhLnhwMnAx
KSAhPSBzdGQ6OnNpZ25iaXQoZGVsdGEueG10cDEpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZGVsdGEueHAycDE7CisgICAgICAgICAgICAgICAgcmV0dXJuIChkZWx0YS55bXRwMSAqIGRl
bHRhLnhwMnAxIC0gZGVsdGEueG10cDEgKiBkZWx0YS55cDJwMSk7CisgICAgICAgICAgICB9Owor
CisgICAgICAgIGF1dG8gYWRkRWRnZSA9CisgICAgICAgICAgICBbJl0oUG9pbnQgcDEsIFBvaW50
IHAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBkaXJlY3Rpb24gPSAxOwor
ICAgICAgICAgICAgICAgIGlmIChwMi55IDwgcDEueSkgeworICAgICAgICAgICAgICAgICAgICBk
aXJlY3Rpb24gPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzd2FwKHAxLCBwMik7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCh0LnggPT0gcDEueCAmJiB0
LnkgPT0gcDEueSkKKyAgICAgICAgICAgICAgICAgICAgfHwgKHQueCA9PSBwMi54ICYmIHQueSA9
PSBwMi55KSkgeworICAgICAgICAgICAgICAgICAgICBvbkVkZ2UgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKChwMS55IDw9IHQueSAmJiBwMi55ID49IHQueSkKKyAgICAgICAgICAgICAgICAgICAgJiYg
KChwMS54IDw9IHQueCAmJiBwMi54ID49IHQueCkgfHwgKHAxLnggPj0gdC54ICYmIHAyLnggPD0g
dC54KSkKKyAgICAgICAgICAgICAgICAgICAgJiYgIWFyZWFPZlRyaWFuZ2UocDEsIHAyLCB0KSkg
eworICAgICAgICAgICAgICAgICAgICBvbkVkZ2UgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHQueSA+
PSBwMi55IHx8IHQueSA8IHAxLnkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICBpZiAodC54IDw9IHAxLnggJiYgdC54IDw9IHAyLngpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIGlmICgodC54ID49IHAxLnggJiYgdC54
ID49IHAyLngpIHx8IGNvbXBhcmVFZGdlKHAxLCBwMiwgdCkgPDApCisgICAgICAgICAgICAgICAg
ICAgIHdpbmRpbmcgKz0gZGlyZWN0aW9uOworICAgICAgICAgICAgfTsKKworICAgICAgICBwcm9j
ZXNzb3IuYXBwbHkoY29udGFpbmVyLAorICAgICAgICAgICAgWyZdKGNvbnN0IFBvaW50JiBwKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvbkVkZ2UpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIGlmIChoYXNDdXJyZW50UG9pbnQpCisg
ICAgICAgICAgICAgICAgICAgIGFkZEVkZ2UoY3VycmVudFBvaW50LCBzdGFydGluZ1BvaW50KTsK
KworICAgICAgICAgICAgICAgIHN0YXJ0aW5nUG9pbnQgPSBwOworICAgICAgICAgICAgICAgIGN1
cnJlbnRQb2ludCA9IHA7CisgICAgICAgICAgICAgICAgaGFzQ3VycmVudFBvaW50ID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbJl0oY29uc3QgUG9pbnQmIHApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG9uRWRnZSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgICAgICAgICAgaWYgKGhhc0N1cnJlbnRQb2ludCkKKyAgICAgICAg
ICAgICAgICAgICAgYWRkRWRnZShjdXJyZW50UG9pbnQsIHApOworCisgICAgICAgICAgICAgICAg
Y3VycmVudFBvaW50ID0gcDsKKyAgICAgICAgICAgICAgICBoYXNDdXJyZW50UG9pbnQgPSB0cnVl
OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFsmXShjb25zdCBQb2ludCYsIGNvbnN0IFBv
aW50JiwgY29uc3QgUG9pbnQmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBzcGxpbmVzIG9yIHdoYXRldmVyLgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFsm
XQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvbkVkZ2UpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIGlmIChoYXNDdXJyZW50UG9pbnQp
CisgICAgICAgICAgICAgICAgICAgIGFkZEVkZ2UoY3VycmVudFBvaW50LCBzdGFydGluZ1BvaW50
KTsKKworICAgICAgICAgICAgICAgIGN1cnJlbnRQb2ludCA9IHsgfTsKKyAgICAgICAgICAgICAg
ICBoYXNDdXJyZW50UG9pbnQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIGlm
IChoYXNDdXJyZW50UG9pbnQpCisgICAgICAgICAgICBhZGRFZGdlKGN1cnJlbnRQb2ludCwgc3Rh
cnRpbmdQb2ludCk7CisKKyAgICAgICAgaWYgKG9uRWRnZSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBzd2l0Y2ggKHJ1bGUpIHsKKyAgICAgICAgY2FzZSBXaW5kUnVsZTo6RXZl
bk9kZDoKKyAgICAgICAgICAgIHJldHVybiB3aW5kaW5nICYgMTsKKyAgICAgICAgY2FzZSBXaW5k
UnVsZTo6V2luZGluZzoKKyAgICAgICAgICAgIHJldHVybiAhIXdpbmRpbmc7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307CisKK3N0cnVjdCBDb250YWluZWRJblN0
cm9rZVByb2Nlc3NvciB7CisgICAgYm9vbCBhcHBseShjb25zdCBQYXRoQ29udGFpbmVyJiwgY29u
c3QgUG9pbnQmKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IC4uLgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSW1wbApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcAppbmRleCAyOTY5MmFhZmE4OC4uMzRjZDU2YjI5OTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCkBAIC0xNzUsMTEg
KzE3NSwxMyBAQCBQYXRoIFBhdGg6OnBvbHlnb25QYXRoRnJvbVBvaW50cyhjb25zdCBWZWN0b3I8
RmxvYXRQb2ludD4mIHBvaW50cykKICAgICByZXR1cm4gcGF0aDsKIH0KIAorI2lmICFVU0UoQ0FJ
Uk8pCiBGbG9hdFJlY3QgUGF0aDo6ZmFzdEJvdW5kaW5nUmVjdCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGJvdW5kaW5nUmVjdCgpOwogfQogI2VuZGlmCisjZW5kaWYKIAogI2lmbmRlZiBOREVCVUcK
IHZvaWQgUGF0aDo6ZHVtcCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
YXRoLmgKaW5kZXggZmJhODUwMTg0ODEuLjJmOGRkOGVlNjA2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aC5oCkBAIC01MiwxMCArNTIsMTAgQEAgdHlwZWRlZiBJRDJEMUdl
b21ldHJ5R3JvdXAgUGxhdGZvcm1QYXRoOwogCiAjZWxpZiBVU0UoQ0FJUk8pCiAKLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLWNsYXNzIENhaXJvUGF0aDsKK25hbWVzcGFjZSBJbXBsIHsKK3N0cnVjdCBH
ZW5lcmljUGF0aDsKIH0KLXR5cGVkZWYgV2ViQ29yZTo6Q2Fpcm9QYXRoIFBsYXRmb3JtUGF0aDsK
K3VzaW5nIFBsYXRmb3JtUGF0aCA9IEltcGw6OkdlbmVyaWNQYXRoOwogCiAjZWxpZiBVU0UoV0lO
R0RJKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRo
R2VuZXJpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoR2VuZXJp
Yy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQyZmJjNzVhMmQ1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aEdlbmVyaWMuY3BwCkBAIC0wLDAgKzEsMzAxIEBACisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUGF0aC5oIgorCisjaW5jbHVkZSAiR2VuZXJpY1BhdGguaCIKKyNpbmNsdWRlIDxhcnJh
eT4KKworI2RlZmluZSBVTklNUExFTUVOVEVEKGZ1bmNOYW1lKSBcCisgICAgZnByaW50ZihzdGRl
cnIsICJVTklNUExFTUVOVEVEKFBhdGgpOiAlcygpXG4iLCBmdW5jTmFtZSkKKworI2RlZmluZSBQ
T09STFlfSU1QTEVNRU5URUQoZnVuY05hbWUpIFwKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlBPT1JM
WV9JTVBMRU1FTlRFRChQYXRoKTogJXMoKVxuIiwgZnVuY05hbWUpCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworUGF0aDo6UGF0aCgpID0gZGVmYXVsdDsKKworUGF0aDo6UGF0aChjb25zdCBQYXRo
JiBvdGhlcikKK3sKKyAgICBpZiAob3RoZXIubV9wYXRoKSB7CisgICAgICAgIG1fcGF0aCA9IG5l
dyBJbXBsOjpHZW5lcmljUGF0aDsKKyAgICAgICAgKm1fcGF0aCA9ICpvdGhlci5tX3BhdGg7Cisg
ICAgfQorfQorCitQYXRoOjpQYXRoKFBhdGgmJiBvdGhlcikKK3sKKyAgICBtX3BhdGggPSBvdGhl
ci5tX3BhdGg7CisgICAgb3RoZXIubV9wYXRoID0gbnVsbHB0cjsKK30KKworUGF0aCYgUGF0aDo6
b3BlcmF0b3I9KGNvbnN0IFBhdGgmIG90aGVyKQoreworICAgIGlmICh0aGlzID09ICZvdGhlcikK
KyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgaWYgKG1fcGF0aCkKKyAgICAgICAgZGVsZXRl
IG1fcGF0aDsKKworICAgIGlmIChvdGhlci5tX3BhdGgpIHsKKyAgICAgICAgbV9wYXRoID0gbmV3
IEltcGw6OkdlbmVyaWNQYXRoOworICAgICAgICAqbV9wYXRoID0gKm90aGVyLm1fcGF0aDsKKyAg
ICB9IGVsc2UKKyAgICAgICAgbV9wYXRoID0gbnVsbHB0cjsKKworICAgIHJldHVybiAqdGhpczsK
K30KKworUGF0aCYgUGF0aDo6b3BlcmF0b3I9KFBhdGgmJiBvdGhlcikKK3sKKyAgICBpZiAodGhp
cyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICBpZiAobV9wYXRoKQorICAg
ICAgICBkZWxldGUgbV9wYXRoOworICAgIG1fcGF0aCA9IG90aGVyLm1fcGF0aDsKKyAgICBvdGhl
ci5tX3BhdGggPSBudWxscHRyOworICAgIHJldHVybiAqdGhpczsKK30KKworUGF0aDo6flBhdGgo
KQoreworICAgIGlmIChtX3BhdGgpCisgICAgICAgIGRlbGV0ZSBtX3BhdGg7Cit9CisKK2Jvb2wg
UGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNv
bnN0Cit7CisgICAgUE9PUkxZX0lNUExFTUVOVEVEKF9fZnVuY19fKTsKKyAgICBpZiAoIW1fcGF0
aCB8fCAhc3RkOjppc2Zpbml0ZShwb2ludC54KCkpIHx8ICFzdGQ6OmlzZmluaXRlKHBvaW50Lnko
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIGltcGwgPSAqbV9wYXRoOwor
ICAgIEltcGw6OkNvbnRhaW5lZEluRmlsbFByb2Nlc3NvciBwcm9jZXNzb3I7CisgICAgcmV0dXJu
IHByb2Nlc3Nvci5hcHBseShpbXBsLmNvbnRhaW5lciwgaW1wbC5pbW1lZGlhdGVTdGF0ZS5tYXAo
eyBwb2ludC54KCksIHBvaW50LnkoKSB9KSwKKyAgICAgICAgcnVsZSA9PSBXaW5kUnVsZTo6RXZl
bk9kZAorICAgICAgICAgICAgPyBJbXBsOjpDb250YWluZWRJbkZpbGxQcm9jZXNzb3I6OldpbmRS
dWxlOjpFdmVuT2RkCisgICAgICAgICAgICA6IEltcGw6OkNvbnRhaW5lZEluRmlsbFByb2Nlc3Nv
cjo6V2luZFJ1bGU6OldpbmRpbmcpOworfQorCitib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0
cm9rZVN0eWxlQXBwbGllciosIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAg
IFBPT1JMWV9JTVBMRU1FTlRFRChfX2Z1bmNfXyk7CisgICAgaWYgKCFtX3BhdGggfHwgIXN0ZDo6
aXNmaW5pdGUocG9pbnQueCgpKSB8fCAhc3RkOjppc2Zpbml0ZShwb2ludC55KCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBpbXBsID0gKm1fcGF0aDsKKyAgICBJbXBsOjpD
b250YWluZWRJblN0cm9rZVByb2Nlc3NvciBwcm9jZXNzb3I7CisgICAgcmV0dXJuIHByb2Nlc3Nv
ci5hcHBseShpbXBsLmNvbnRhaW5lciwgaW1wbC5pbW1lZGlhdGVTdGF0ZS5tYXAoeyBwb2ludC54
KCksIHBvaW50LnkoKSB9KSk7Cit9CisKK0Zsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBj
b25zdAoreworICAgIFBPT1JMWV9JTVBMRU1FTlRFRChfX2Z1bmNfXyk7CisgICAgLy8gRklYTUU6
IHRoaXMgc2hvdWxkIHJldHVybiB0aGUgdGhpZ2h0ZXN0LWZpdCBib3VuZGluZyBib3ggcG9zc2li
bGUuCisgICAgcmV0dXJuIGZhc3RCb3VuZGluZ1JlY3QoKTsKK30KKworRmxvYXRSZWN0IFBhdGg6
OmZhc3RCb3VuZGluZ1JlY3QoKSBjb25zdAoreworICAgIGlmICghbV9wYXRoKQorICAgICAgICBy
ZXR1cm4geyB9OworICAgIFBPT1JMWV9JTVBMRU1FTlRFRChfX2Z1bmNfXyk7CisKKyAgICBhdXRv
JiBpbXBsID0gKm1fcGF0aDsKKyAgICBJbXBsOjpQb2ludCBib3R0b21MZWZ0LCB0b3BSaWdodDsK
KyAgICBJbXBsOjpGYXN0Qm91bmRpbmdSZWN0UHJvY2Vzc29yIHByb2Nlc3NvcjsKKyAgICBwcm9j
ZXNzb3IuYXBwbHkoaW1wbC5jb250YWluZXIsIGJvdHRvbUxlZnQsIHRvcFJpZ2h0KTsKKworICAg
IGF1dG8gcDAgPSBpbXBsLmltbWVkaWF0ZVN0YXRlLm1hcEludmVyc2UoYm90dG9tTGVmdCk7Cisg
ICAgYXV0byBwMSA9IGltcGwuaW1tZWRpYXRlU3RhdGUubWFwSW52ZXJzZSh0b3BSaWdodCk7Cisg
ICAgcmV0dXJuIEZsb2F0UmVjdDo6bmFycm93UHJlY2lzaW9uKHN0ZDo6bWluKHAwLngsIHAxLngp
LCBzdGQ6Om1pbihwMC55LCBwMS55KSwKKyAgICAgICAgc3RkOjphYnMocDEueCAtIHAwLngpLCBz
dGQ6OmFicyhwMS55IC0gcDAueSkpOworfQorCitGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRp
bmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciopIGNvbnN0Cit7CisgICAgVU5JTVBMRU1FTlRFRChf
X2Z1bmNfXyk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBQYXRoOjpjbGVhcigpCit7Cisg
ICAgaWYgKG1fcGF0aCkKKyAgICAgICAgbV9wYXRoLT5jbGVhcigpOworfQorCitib29sIFBhdGg6
OmlzRW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiAhbV9wYXRoIHx8IG1fcGF0aC0+Y29udGFp
bmVyLmNvbW1hbmRzLmlzRW1wdHkoKTsKK30KKworYm9vbCBQYXRoOjpoYXNDdXJyZW50UG9pbnQo
KSBjb25zdAoreworICAgIHJldHVybiBtX3BhdGggJiYgIW1fcGF0aC0+Y29udGFpbmVyLmNvbW1h
bmRzLmlzRW1wdHkoKTsKK30KKworRmxvYXRQb2ludCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25z
dAoreworICAgIGlmICghbV9wYXRoKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byYg
aW1wbCA9ICptX3BhdGg7CisgICAgaWYgKGltcGwuY29udGFpbmVyLmNvbW1hbmRzLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gcG9pbnQgPSBpbXBsLmltbWVkaWF0
ZVN0YXRlLm1hcEludmVyc2UoaW1wbC5pbW1lZGlhdGVTdGF0ZS5jdXJyZW50UG9pbnQpOworICAg
IHJldHVybiBGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24ocG9pbnQueCwgcG9pbnQueSk7Cit9
CisKK3ZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgYXV0byYg
aW1wbCA9ICplbnN1cmVQbGF0Zm9ybVBhdGgoKTsKKyAgICBpbXBsLmFkZChJbXBsOjpDb21tYW5k
OjpNb3ZlVG8sIEltcGw6OlZhbHVlczwyPnsgcC54KCksIHAueSgpIH0pOworfQorCit2b2lkIFBh
dGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIGF1dG8mIGltcGwgPSAq
ZW5zdXJlUGxhdGZvcm1QYXRoKCk7CisgICAgaW1wbC5hZGQoSW1wbDo6Q29tbWFuZDo6TGluZVRv
LCBJbXBsOjpWYWx1ZXM8Mj4geyBwLngoKSwgcC55KCkgfSk7Cit9CisKK3ZvaWQgUGF0aDo6YWRk
UXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyKQor
eworICAgIGF1dG8mIGltcGwgPSAqZW5zdXJlUGxhdGZvcm1QYXRoKCk7CisgICAgaW1wbC5hZGQo
SW1wbDo6Q29tbWFuZDo6UXVhZHJhdGljQ3VydmVUbywKKyAgICAgICAgSW1wbDo6VmFsdWVzPDQ+
IHsgcDEueCgpLCBwMS55KCksIHAyLngoKSwgcDIueSgpIH0pOworfQorCit2b2lkIFBhdGg6OmFk
ZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAy
LCBjb25zdCBGbG9hdFBvaW50JiBwMykKK3sKKyAgICBhdXRvJiBpbXBsID0gKmVuc3VyZVBsYXRm
b3JtUGF0aCgpOworICAgIGltcGwuYWRkKEltcGw6OkNvbW1hbmQ6OkN1YmljQ3VydmVUbywKKyAg
ICAgICAgSW1wbDo6VmFsdWVzPDY+IHsgcDEueCgpLCBwMS55KCksIHAyLngoKSwgcDIueSgpLCBw
My54KCksIHAzLnkoKSB9KTsKK30KKwordm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBv
aW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHJhZGl1cykKK3sKKyAgICBQT09S
TFlfSU1QTEVNRU5URUQoX19mdW5jX18pOworCisgICAgYXV0byYgaW1wbCA9ICplbnN1cmVQbGF0
Zm9ybVBhdGgoKTsKKyAgICBpbXBsLmFkZChJbXBsOjpDb21tYW5kOjpDaXJjdWxhclRhbmdlbnRB
cmMsCisgICAgICAgIEltcGw6OlZhbHVlczw1PiB7IHAxLngoKSwgcDEueSgpLCBwMi54KCksIHAy
LnkoKSwgcmFkaXVzIH0pOworfQorCit2b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpCit7CisgICAg
YXV0byYgaW1wbCA9ICplbnN1cmVQbGF0Zm9ybVBhdGgoKTsKKyAgICBpbXBsLmFkZChJbXBsOjpD
b21tYW5kOjpDbG9zZSk7Cit9CisKK3ZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQm
IHAsIGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRBbmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJvb2wg
YW50aWNsb2Nrd2lzZSkKK3sKKyAgICBQT09STFlfSU1QTEVNRU5URUQoX19mdW5jX18pOworICAg
IGlmICghc3RkOjppc2Zpbml0ZShyYWRpdXMpIHx8ICFzdGQ6OmlzZmluaXRlKHN0YXJ0QW5nbGUp
IHx8ICFzdGQ6OmlzZmluaXRlKGVuZEFuZ2xlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byYgaW1wbCA9ICplbnN1cmVQbGF0Zm9ybVBhdGgoKTsKKyAgICBpbXBsLmFkZChhbnRpY2xvY2t3
aXNlID8KKyAgICAgICAgSW1wbDo6Q29tbWFuZDo6Q2lyY3VsYXJDb3VudGVyQ2xvY2t3aXNlQXJj
IDogSW1wbDo6Q29tbWFuZDo6Q2lyY3VsYXJDbG9ja3dpc2VBcmMsCisgICAgICAgIEltcGw6OlZh
bHVlczw1PiB7IHAueCgpLCBwLnkoKSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSB9KTsK
K30KKwordm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBh
dXRvJiBpbXBsID0gKmVuc3VyZVBsYXRmb3JtUGF0aCgpOworICAgIGltcGwuYWRkKEltcGw6OkNv
bW1hbmQ6Ok1vdmVUbywgSW1wbDo6VmFsdWVzPDI+IHsgcmVjdC54KCksIHJlY3QueSgpIH0pOwor
ICAgIGltcGwuYWRkKEltcGw6OkNvbW1hbmQ6OlJlY3QsIEltcGw6OlZhbHVlczw0PiB7IHJlY3Qu
eCgpLCByZWN0LnkoKSwgcmVjdC5tYXhYKCksIHJlY3QubWF4WSgpIH0pOworICAgIGltcGwuYWRk
KEltcGw6OkNvbW1hbmQ6OkNsb3NlKTsKK30KKwordm9pZCBQYXRoOjphZGRFbGxpcHNlKEZsb2F0
UG9pbnQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgYm9vbCkKK3sKKyAgICBV
TklNUExFTUVOVEVEKF9fZnVuY19fKTsKK30KKwordm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpCit7CisgICAgVU5JTVBMRU1FTlRFRChfX2Z1bmNfXyk7Cit9CisKK3ZvaWQg
UGF0aDo6YWRkUGF0aChjb25zdCBQYXRoJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJikKK3sKKyAg
ICBVTklNUExFTUVOVEVEKF9fZnVuY19fKTsKK30KKwordm9pZCBQYXRoOjp0cmFuc2xhdGUoY29u
c3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIHRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0oKS50
cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7Cit9CisKK3ZvaWQgUGF0aDo6
dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAgIGF1dG8g
aW52ZXJzZU9wdCA9IHRyYW5zZm9ybS5pbnZlcnNlKCk7CisgICAgaWYgKCFpbnZlcnNlT3B0KQor
ICAgICAgICByZXR1cm47CisgICAgYXV0byYgaW52ZXJzZSA9ICppbnZlcnNlT3B0OworCisgICAg
YXV0byYgaW1wbCA9ICplbnN1cmVQbGF0Zm9ybVBhdGgoKTsKKyAgICBpbXBsLmFkZChJbXBsOjpD
b21tYW5kOjpUcmFuc2Zvcm0sCisgICAgICAgIEltcGw6OlZhbHVlczwxMj4geworICAgICAgICAg
ICAgdHJhbnNmb3JtLmEoKSwgdHJhbnNmb3JtLmIoKSwgdHJhbnNmb3JtLmMoKSwKKyAgICAgICAg
ICAgIHRyYW5zZm9ybS5kKCksIHRyYW5zZm9ybS5lKCksIHRyYW5zZm9ybS5mKCksCisgICAgICAg
ICAgICBpbnZlcnNlLmEoKSwgaW52ZXJzZS5iKCksIGludmVyc2UuYygpLAorICAgICAgICAgICAg
aW52ZXJzZS5kKCksIGludmVyc2UuZSgpLCBpbnZlcnNlLmYoKQorICAgICAgICB9KTsKK30KKwor
UGxhdGZvcm1QYXRoUHRyIFBhdGg6OmVuc3VyZVBsYXRmb3JtUGF0aCgpCit7CisgICAgaWYgKCFt
X3BhdGgpCisgICAgICAgIG1fcGF0aCA9IG5ldyBJbXBsOjpHZW5lcmljUGF0aDsKKyAgICByZXR1
cm4gbV9wYXRoOworfQorCit2b2lkIFBhdGg6OmFwcGx5KGNvbnN0IFBhdGhBcHBsaWVyRnVuY3Rp
b24mIGZ1bmN0aW9uKSBjb25zdAoreworICAgIGlmICghbV9wYXRoKQorICAgICAgICByZXR1cm47
CisKKyAgICBzdGQ6OmFycmF5PEZsb2F0UG9pbnQsIDM+IHBvaW50czsKKyAgICBQYXRoRWxlbWVu
dCBwYXRoRWxlbWVudCB7IFBhdGhFbGVtZW50TW92ZVRvUG9pbnQsIHBvaW50cy5kYXRhKCkgfTsK
KworICAgIHVzaW5nIFBvaW50ID0gSW1wbDo6UG9pbnQ7CisgICAgYXV0byYgaW1wbCA9ICptX3Bh
dGg7CisgICAgSW1wbDo6QmFzaWNQcm9jZXNzb3IgcHJvY2Vzc29yOworICAgIHByb2Nlc3Nvci5h
cHBseShpbXBsLmNvbnRhaW5lciwKKyAgICAgICAgWyZdKGNvbnN0IFBvaW50JiBwKQorICAgICAg
ICB7CisgICAgICAgICAgICBhdXRvIG1wID0gaW1wbC5pbW1lZGlhdGVTdGF0ZS5tYXBJbnZlcnNl
KHApOworCisgICAgICAgICAgICBwYXRoRWxlbWVudC50eXBlID0gUGF0aEVsZW1lbnRNb3ZlVG9Q
b2ludDsKKyAgICAgICAgICAgIHBvaW50c1swXSA9IEZsb2F0UG9pbnQ6Om5hcnJvd1ByZWNpc2lv
bihtcC54LCBtcC55KTsKKyAgICAgICAgICAgIGZ1bmN0aW9uKHBhdGhFbGVtZW50KTsKKyAgICAg
ICAgfSwKKyAgICAgICAgWyZdKGNvbnN0IFBvaW50JiBwKQorICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvIG1wID0gaW1wbC5pbW1lZGlhdGVTdGF0ZS5tYXBJbnZlcnNlKHApOworCisgICAgICAg
ICAgICBwYXRoRWxlbWVudC50eXBlID0gUGF0aEVsZW1lbnRBZGRMaW5lVG9Qb2ludDsKKyAgICAg
ICAgICAgIHBvaW50c1swXSA9IEZsb2F0UG9pbnQ6Om5hcnJvd1ByZWNpc2lvbihtcC54LCBtcC55
KTsKKyAgICAgICAgICAgIGZ1bmN0aW9uKHBhdGhFbGVtZW50KTsKKyAgICAgICAgfSwKKyAgICAg
ICAgWyZdKGNvbnN0IFBvaW50JiBwMSwgY29uc3QgUG9pbnQmIHAyLCBjb25zdCBQb2ludCYgcDMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbXAxID0gaW1wbC5pbW1lZGlhdGVTdGF0ZS5t
YXBJbnZlcnNlKHAxKTsKKyAgICAgICAgICAgIGF1dG8gbXAyID0gaW1wbC5pbW1lZGlhdGVTdGF0
ZS5tYXBJbnZlcnNlKHAyKTsKKyAgICAgICAgICAgIGF1dG8gbXAzID0gaW1wbC5pbW1lZGlhdGVT
dGF0ZS5tYXBJbnZlcnNlKHAzKTsKKworICAgICAgICAgICAgcGF0aEVsZW1lbnQudHlwZSA9IFBh
dGhFbGVtZW50QWRkQ3VydmVUb1BvaW50OworICAgICAgICAgICAgcG9pbnRzWzBdID0gRmxvYXRQ
b2ludDo6bmFycm93UHJlY2lzaW9uKG1wMS54LCBtcDEueSk7CisgICAgICAgICAgICBwb2ludHNb
MV0gPSBGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24obXAyLngsIG1wMi55KTsKKyAgICAgICAg
ICAgIHBvaW50c1syXSA9IEZsb2F0UG9pbnQ6Om5hcnJvd1ByZWNpc2lvbihtcDMueCwgbXAzLnkp
OworICAgICAgICAgICAgZnVuY3Rpb24ocGF0aEVsZW1lbnQpOworICAgICAgICB9LAorICAgICAg
ICBbJl0oKQorICAgICAgICB7CisgICAgICAgICAgICBwYXRoRWxlbWVudC50eXBlID0gUGF0aEVs
ZW1lbnRDbG9zZVN1YnBhdGg7CisgICAgICAgICAgICBmdW5jdGlvbihwYXRoRWxlbWVudCk7Cisg
ICAgICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNw
cAppbmRleCBmZDkyZTJmMzBiNC4uNDk4ZTEzYzIxNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcApA
QCAtNzUzLDcgKzc1Myw3IEBAIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoUGxhdGZvcm1D
b250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSCiAgICAgY2Fpcm9fdCog
Y3IgPSBwbGF0Zm9ybUNvbnRleHQuY3IoKTsKIAogICAgIGNhaXJvX3NhdmUoY3IpOwotICAgIHNl
dFBhdGhPbkNhaXJvQ29udGV4dChwbGF0Zm9ybUNvbnRleHQuY3IoKSwgcGF0aC5wbGF0Zm9ybVBh
dGgoKS0+Y29udGV4dCgpKTsKKyAgICBzZXRQYXRoT25DYWlyb0NvbnRleHQocGxhdGZvcm1Db250
ZXh0LmNyKCksICpwYXRoLnBsYXRmb3JtUGF0aCgpKTsKICAgICBmaWxsQ3VycmVudENhaXJvUGF0
aChwbGF0Zm9ybUNvbnRleHQsIGZpbGxTb3VyY2UpOwogICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwog
fQpAQCAtNzYyLDcgKzc2Miw3IEBAIHZvaWQgZmlsbFBhdGgoUGxhdGZvcm1Db250ZXh0Q2Fpcm8m
IHBsYXRmb3JtQ29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCwgY29uc3QgRmlsCiB7CiAgICAgY2Fp
cm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQuY3IoKTsKIAotICAgIHNldFBhdGhPbkNhaXJvQ29u
dGV4dChjciwgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpKTsKKyAgICBzZXRQYXRoT25D
YWlyb0NvbnRleHQoY3IsICpwYXRoLnBsYXRmb3JtUGF0aCgpKTsKICAgICBkcmF3UGF0aFNoYWRv
dyhwbGF0Zm9ybUNvbnRleHQsIGZpbGxTb3VyY2UsIHsgfSwgc2hhZG93U3RhdGUsIEZpbGwpOwog
ICAgIGZpbGxDdXJyZW50Q2Fpcm9QYXRoKHBsYXRmb3JtQ29udGV4dCwgZmlsbFNvdXJjZSk7CiB9
CkBAIC03ODUsNyArNzg1LDcgQEAgdm9pZCBzdHJva2VQYXRoKFBsYXRmb3JtQ29udGV4dENhaXJv
JiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IFMKIHsKICAgICBjYWly
b190KiBjciA9IHBsYXRmb3JtQ29udGV4dC5jcigpOwogCi0gICAgc2V0UGF0aE9uQ2Fpcm9Db250
ZXh0KGNyLCBwYXRoLnBsYXRmb3JtUGF0aCgpLT5jb250ZXh0KCkpOworICAgIHNldFBhdGhPbkNh
aXJvQ29udGV4dChjciwgKnBhdGgucGxhdGZvcm1QYXRoKCkpOwogICAgIGRyYXdQYXRoU2hhZG93
KHBsYXRmb3JtQ29udGV4dCwgeyB9LCBzdHJva2VTb3VyY2UsIHNoYWRvd1N0YXRlLCBTdHJva2Up
OwogICAgIHByZXBhcmVGb3JTdHJva2luZyhjciwgc3Ryb2tlU291cmNlLCBQcmVzZXJ2ZUFscGhh
KTsKICAgICBjYWlyb19zdHJva2UoY3IpOwpAQCAtMTI1Nyw3ICsxMjU3LDcgQEAgdm9pZCBjbGlw
UGF0aChQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBQYXRoJiBw
YXRoLCBXaW5kUnVsZQogICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0LmNyKCk7CiAK
ICAgICBpZiAoIXBhdGguaXNOdWxsKCkpCi0gICAgICAgIHNldFBhdGhPbkNhaXJvQ29udGV4dChj
ciwgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpKTsKKyAgICAgICAgc2V0UGF0aE9uQ2Fp
cm9Db250ZXh0KGNyLCAqcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CiAKICAgICBjYWlyb19maWxsX3J1
bGVfdCBzYXZlZEZpbGxSdWxlID0gY2Fpcm9fZ2V0X2ZpbGxfcnVsZShjcik7CiAgICAgY2Fpcm9f
c2V0X2ZpbGxfcnVsZShjciwgY2xpcFJ1bGUgPT0gV2luZFJ1bGU6OkV2ZW5PZGQgPyBDQUlST19G
SUxMX1JVTEVfRVZFTl9PREQgOiBDQUlST19GSUxMX1JVTEVfV0lORElORyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGll
cy5jcHAKaW5kZXggMDRkNjgyZjk0N2YuLmY0YWVlMzE4ZGIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3Bw
CkBAIC01NCw2ICs1NCw4IEBACiAjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KICNlbmRpZgogCisj
aW5jbHVkZSAiR2VuZXJpY1BhdGguaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgVVNF
KEZSRUVUWVBFKSAmJiAhUExBVEZPUk0oR1RLKQpAQCAtOTIsMTQgKzk0LDM0IEBAIHZvaWQgc2V0
U291cmNlUkdCQUZyb21Db2xvcihjYWlyb190KiBjb250ZXh0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiAgICAgfQogfQogCi12b2lkIGFwcGVuZFBhdGhUb0NhaXJvQ29udGV4dChjYWlyb190KiB0bywg
Y2Fpcm9fdCogZnJvbSkKK3ZvaWQgYXBwZW5kUGF0aFRvQ2Fpcm9Db250ZXh0KGNhaXJvX3QqIHRv
LCBJbXBsOjpHZW5lcmljUGF0aCYgaW1wbCkKIHsKLSAgICBhdXRvIGNhaXJvUGF0aCA9IGNhaXJv
X2NvcHlfcGF0aChmcm9tKTsKLSAgICBjYWlyb19hcHBlbmRfcGF0aCh0bywgY2Fpcm9QYXRoKTsK
LSAgICBjYWlyb19wYXRoX2Rlc3Ryb3koY2Fpcm9QYXRoKTsKKyAgICBJbXBsOjpCYXNpY1Byb2Nl
c3NvciBwcm9jZXNzb3I7CisgICAgcHJvY2Vzc29yLmFwcGx5KGltcGwuY29udGFpbmVyLAorICAg
ICAgICBbJl0oY29uc3QgSW1wbDo6UG9pbnQmIHApCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1
dG8gbXAgPSBpbXBsLmltbWVkaWF0ZVN0YXRlLm1hcEludmVyc2UocCk7CisgICAgICAgICAgICBj
YWlyb19tb3ZlX3RvKHRvLCBtcC54LCBtcC55KTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKGNv
bnN0IEltcGw6OlBvaW50JiBwKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIG1wID0gaW1w
bC5pbW1lZGlhdGVTdGF0ZS5tYXBJbnZlcnNlKHApOworICAgICAgICAgICAgY2Fpcm9fbGluZV90
byh0bywgbXAueCwgbXAueSk7CisgICAgICAgIH0sCisgICAgICAgIFsmXShjb25zdCBJbXBsOjpQ
b2ludCYgcDEsIGNvbnN0IEltcGw6OlBvaW50JiBwMiwgY29uc3QgSW1wbDo6UG9pbnQmIHAzKQor
ICAgICAgICB7CisgICAgICAgICAgICBhdXRvIG1wMSA9IGltcGwuaW1tZWRpYXRlU3RhdGUubWFw
SW52ZXJzZShwMSk7CisgICAgICAgICAgICBhdXRvIG1wMiA9IGltcGwuaW1tZWRpYXRlU3RhdGUu
bWFwSW52ZXJzZShwMik7CisgICAgICAgICAgICBhdXRvIG1wMyA9IGltcGwuaW1tZWRpYXRlU3Rh
dGUubWFwSW52ZXJzZShwMyk7CisgICAgICAgICAgICBjYWlyb19jdXJ2ZV90byh0bywgbXAxLngs
IG1wMS55LCBtcDIueCwgbXAyLnksIG1wMy54LCBtcDMueSk7CisgICAgICAgIH0sCisgICAgICAg
IFsmXQorICAgICAgICB7CisgICAgICAgICAgICBjYWlyb19jbG9zZV9wYXRoKHRvKTsKKyAgICAg
ICAgfSk7CiB9CiAKLXZvaWQgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNhaXJvX3QqIHRvLCBjYWly
b190KiBmcm9tKQordm9pZCBzZXRQYXRoT25DYWlyb0NvbnRleHQoY2Fpcm9fdCogdG8sIEltcGw6
OkdlbmVyaWNQYXRoJiBmcm9tKQogewogICAgIGNhaXJvX25ld19wYXRoKHRvKTsKICAgICBhcHBl
bmRQYXRoVG9DYWlyb0NvbnRleHQodG8sIGZyb20pOwpAQCAtMTA3LDkgKzEyOSw4IEBAIHZvaWQg
c2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNhaXJvX3QqIHRvLCBjYWlyb190KiBmcm9tKQogCiB2b2lk
IGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogY29udGV4dCwgY29uc3Qg
UGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBhcHBlbmRQYXRoVG9DYWlyb0NvbnRleHQoY29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgo
KS0+Y29udGV4dCgpKTsKKyAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQorICAgICAgICBhcHBlbmRQ
YXRoVG9DYWlyb0NvbnRleHQoY29udGV4dCwgKnBhdGgucGxhdGZvcm1QYXRoKCkpOwogfQogCiB2
b2lkIGFwcGVuZFJlZ2lvblRvQ2Fpcm9Db250ZXh0KGNhaXJvX3QqIHRvLCBjb25zdCBjYWlyb19y
ZWdpb25fdCogcmVnaW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKaW5kZXggMzgxZDNjOGVlYmMuLmJlZTg1M2I0
NmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb1V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0NhaXJvVXRpbGl0aWVzLmgKQEAgLTM5LDYgKzM5LDEwIEBACiAjaW5jbHVkZSA8Y2Fpcm8t
ZnQuaD4KICNlbmRpZgogCituYW1lc3BhY2UgSW1wbCB7CitzdHJ1Y3QgR2VuZXJpY1BhdGg7Cit9
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKIGNsYXNzIENv
bG9yOwpAQCAtNzYsOCArODAsMTEgQEAgY29uc3QgY2Fpcm9fZm9udF9vcHRpb25zX3QqIGdldERl
ZmF1bHRDYWlyb0ZvbnRPcHRpb25zKCk7CiAKIHZvaWQgY29weUNvbnRleHRQcm9wZXJ0aWVzKGNh
aXJvX3QqIHNyY0NyLCBjYWlyb190KiBkc3RDcik7CiB2b2lkIHNldFNvdXJjZVJHQkFGcm9tQ29s
b3IoY2Fpcm9fdCosIGNvbnN0IENvbG9yJik7CisjaWYgMAogdm9pZCBhcHBlbmRQYXRoVG9DYWly
b0NvbnRleHQoY2Fpcm9fdCogdG8sIGNhaXJvX3QqIGZyb20pOwogdm9pZCBzZXRQYXRoT25DYWly
b0NvbnRleHQoY2Fpcm9fdCogdG8sIGNhaXJvX3QqIGZyb20pOworI2VuZGlmCit2b2lkIHNldFBh
dGhPbkNhaXJvQ29udGV4dChjYWlyb190KiB0bywgSW1wbDo6R2VuZXJpY1BhdGgmIGZyb20pOwog
dm9pZCBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0KGNhaXJvX3QqIGNvbnRleHQsIGNv
bnN0IFBhdGgmIHBhdGgpOwogdm9pZCBhcHBlbmRSZWdpb25Ub0NhaXJvQ29udGV4dChjYWlyb190
KiwgY29uc3QgY2Fpcm9fcmVnaW9uX3QqKTsKIGNhaXJvX29wZXJhdG9yX3QgdG9DYWlyb09wZXJh
dG9yKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGVOb3JtYWwpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5j
cHAKaW5kZXggMDZkOWQ3NDk0YTQuLmFmM2Q5Nzc3Yjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKQEAgLTE3OCw2ICsx
NzgsOCBAQCBQYXRoIENhaXJvR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpwYXRoKCkKICAgICBQYXRo
IHBhdGg7CiAgICAgcGF0aC5lbnN1cmVQbGF0Zm9ybVBhdGgoKTsKIAorICAgIC8vIEZJWE1FOgor
I2lmIDAKICAgICBjYWlyb19nbHlwaF90IGNhaXJvR2x5cGggPSB7IG1fZ2x5cGhCdWZmZXIuZ2x5
cGhBdChtX2luZGV4KSwgMCwgMCB9OwogICAgIGNhaXJvX3NldF9zY2FsZWRfZm9udChwYXRoLnBs
YXRmb3JtUGF0aCgpLT5jb250ZXh0KCksIG1fZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLnNjYWxl
ZEZvbnQoKSk7CiAgICAgY2Fpcm9fZ2x5cGhfcGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpLT5jb250
ZXh0KCksICZjYWlyb0dseXBoLCAxKTsKQEAgLTE4Nyw2ICsxODksNyBAQCBQYXRoIENhaXJvR2x5
cGhUb1BhdGhUcmFuc2xhdG9yOjpwYXRoKCkKICAgICAgICAgY2Fpcm9fdHJhbnNsYXRlKHBhdGgu
cGxhdGZvcm1QYXRoKCktPmNvbnRleHQoKSwgc3ludGhldGljQm9sZE9mZnNldCwgMCk7CiAgICAg
ICAgIGNhaXJvX2dseXBoX3BhdGgocGF0aC5wbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpLCAmY2Fp
cm9HbHlwaCwgMSk7CiAgICAgfQorI2VuZGlmCiAKICAgICBwYXRoLnRyYW5zZm9ybShtX3RyYW5z
bGF0aW9uKTsKICAgICByZXR1cm4gcGF0aDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>344674</attachid>
            <date>2018-07-10 00:00:23 -0700</date>
            <delta_ts>2018-07-16 00:00:30 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>path.patch</filename>
            <type>text/plain</type>
            <size>51297</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDE1OTY5ZjkzNWVk
Li4xNjU1NDM1M2FjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNl
c0NhaXJvLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0
CkBAIC0zMyw4ICszMywxMCBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW50UmVjdENhaXJvLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1BhdGhDYWlyby5jcHAKKy8vIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGxhdGZvcm1QYXRoQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQ
dHJDYWlyby5jcHAKKworcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aEdlbmVyaWMuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmljUGF0aC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJpY1BhdGguaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDMzNzYxN2M5ZTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmljUGF0aC5oCkBAIC0wLDAg
KzEsOTY5IEBACisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgor
I2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSW1wbCB7CisKK2VudW0gY2xhc3MgQ29tbWFuZCA6IHVpbnQ4X3Qg
eworICAgIE1vdmVUbywKKyAgICBDbG9zZSwKKyAgICBMaW5lVG8sCisgICAgUmVjdCwKKyAgICBR
dWFkcmF0aWNDdXJ2ZVRvLAorICAgIEN1YmljQ3VydmVUbywKKyAgICBDaXJjdWxhckNsb2Nrd2lz
ZUFyYywKKyAgICBDaXJjdWxhckNvdW50ZXJDbG9ja3dpc2VBcmMsCisgICAgQ2lyY3VsYXJUYW5n
ZW50QXJjLAorICAgIFRyYW5zZm9ybSwKK307CisKK3N0cnVjdCBQb2ludCB7CisgICAgZG91Ymxl
IHggeyAwIH07CisgICAgZG91YmxlIHkgeyAwIH07Cit9OworCit0ZW1wbGF0ZTxzaXplX3QgTj4K
K3VzaW5nIFZhbHVlcyA9IHN0ZDo6YXJyYXk8ZG91YmxlLCBOPjsKKwordGVtcGxhdGU8dHlwZW5h
bWUgUD4KK3N0YXRpYyBkb3VibGUgYXJlYU9mVHJpYW5nZShjb25zdCBQJiBwMSwgY29uc3QgUCYg
cDIsIGNvbnN0IFAmIHAzKQoreworICAgIHJldHVybiBwMS54ICogKHAyLnkgLSBwMy55KSArIHAy
LnggKiAocDMueSAtIHAxLnkpICsgcDMueCAqIChwMS55IC0gcDIueSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEY+CitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJhdGVBcmNDdXJ2ZXMoYm9vbCBh
bmdsZUluY3JlYXNlcywgZG91YmxlIHN0YXJ0QW5nbGUsIGRvdWJsZSBlbmRBbmdsZSwgY29uc3Qg
RiYgY3VydmUpCit7CisgICAgZG91YmxlIGFuZ2xlRGVsdGEgPSBzdGQ6OmFicyhlbmRBbmdsZSAt
IHN0YXJ0QW5nbGUpOworICAgIGZvciAoOyBhbmdsZURlbHRhID4gMC4wMDE7KSB7CisgICAgICAg
IGRvdWJsZSBhcmNEZWx0YSA9IChhbmdsZUluY3JlYXNlcyA/IDEgOiAtMSkgKiBzdGQ6Om1pbihh
bmdsZURlbHRhLCBNX1BJIC8gMik7CisKKyAgICAgICAgZG91YmxlIGFscGhhID0gYXJjRGVsdGEg
LyAyOworICAgICAgICBkb3VibGUgY29zQWxwaGEgPSBzdGQ6OmNvcyhhbHBoYSk7CisgICAgICAg
IGRvdWJsZSBzaW5BbHBoYSA9IHN0ZDo6c2luKGFscGhhKTsKKyAgICAgICAgZG91YmxlIGNvdEFs
cGhhID0gMS4wIC8gc3RkOjp0YW4oYWxwaGEpOworICAgICAgICBkb3VibGUgY29zUGhpID0gc3Rk
Ojpjb3Moc3RhcnRBbmdsZSArIGFscGhhKTsKKyAgICAgICAgZG91YmxlIHNpblBoaSA9IHN0ZDo6
c2luKHN0YXJ0QW5nbGUgKyBhbHBoYSk7CisKKyAgICAgICAgZG91YmxlIGxhbWJkYSA9ICg0LjAg
LSBjb3NBbHBoYSkgLyAzLjA7CisgICAgICAgIGRvdWJsZSBtdSA9IHNpbkFscGhhICsgKGNvc0Fs
cGhhIC0gbGFtYmRhKSAqIGNvdEFscGhhOworCisgICAgICAgIFBvaW50IHAxIHsgbGFtYmRhICog
Y29zUGhpICsgbXUgKiBzaW5QaGksIGxhbWJkYSAqIHNpblBoaSAtIG11ICogY29zUGhpIH07Cisg
ICAgICAgIFBvaW50IHAyIHsgbGFtYmRhICogY29zUGhpIC0gbXUgKiBzaW5QaGksIGxhbWJkYSAq
IHNpblBoaSArIG11ICogY29zUGhpIH07CisgICAgICAgIFBvaW50IHAzIHsgc3RkOjpjb3Moc3Rh
cnRBbmdsZSArIGFyY0RlbHRhKSwgc3RkOjpzaW4oc3RhcnRBbmdsZSArIGFyY0RlbHRhKSB9Owor
ICAgICAgICBjdXJ2ZShwMSwgcDIsIHAzKTsKKworICAgICAgICBzdGFydEFuZ2xlICs9IGFyY0Rl
bHRhOworICAgICAgICBhbmdsZURlbHRhID0gc3RkOjphYnMoZW5kQW5nbGUgLSBzdGFydEFuZ2xl
KTsKKyAgICB9Cit9CisKK3N0cnVjdCBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnMgewor
ICAgIFBvaW50IHAxOyAvLyBzdGFydCBvZiBhIHBhcnRpYWwgZWxsaXB0aWNhbCBhcmMgc2VnbWVu
dAorICAgIFBvaW50IHAyOyAvLyBlbmQgb2YgYSBwYXJ0aWFsIGVsbGlwdGljYWwgYXJjIHNlZ21l
bnQKKworICAgIGRvdWJsZSByaCB7IDAgfTsKKyAgICBkb3VibGUgcnYgeyAwIH07CisgICAgZG91
YmxlIHBoaSB7IDAgfTsKKyAgICBib29sIGZBIHsgZmFsc2UgfTsKKyAgICBib29sIGZTIHsgZmFs
c2UgfTsKKworICAgIHN0cnVjdCBDaXJjdWxhckFyYyB7CisgICAgICAgIFBvaW50IGM7CisgICAg
ICAgIGRvdWJsZSByYWRpdXM7CisgICAgICAgIGRvdWJsZSBzdGFydEFuZ2xlOworICAgICAgICBk
b3VibGUgZW5kQW5nbGU7CisgICAgfTsKKworICAgIHN0cnVjdCBDaXJjdWxhclRhbmdlbnRBcmMg
eworICAgICAgICBQb2ludCB0cDA7CisgICAgICAgIFBvaW50IHRwMTsKKyAgICAgICAgUG9pbnQg
dHAyOworICAgICAgICBkb3VibGUgcmFkaXVzOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb21tYW5kVHlwZT4KKyAgICBzdGF0aWMgdm9pZCBjb21wdXRlKFBhcnRpYWxFbGxpcHRp
Y2FsQXJjUGFyYW1ldGVycyYsIGNvbnN0IENvbW1hbmRUeXBlJik7Cit9OworCit0ZW1wbGF0ZTw+
CitpbmxpbmUgdm9pZCBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnM6OmNvbXB1dGU8UGFy
dGlhbEVsbGlwdGljYWxBcmNQYXJhbWV0ZXJzOjpDaXJjdWxhckFyYz4oCisgICAgUGFydGlhbEVs
bGlwdGljYWxBcmNQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBjb25zdCBDaXJjdWxhckFyYyYgYXJj
KQoreworICAgICAgICBwYXJhbWV0ZXJzLnAxID0geworICAgICAgICAgICAgYXJjLmMueCArIGFy
Yy5yYWRpdXMgKiBzdGQ6OmNvcyhhcmMuc3RhcnRBbmdsZSksCisgICAgICAgICAgICBhcmMuYy55
ICsgYXJjLnJhZGl1cyAqIHN0ZDo6c2luKGFyYy5zdGFydEFuZ2xlKSB9OworICAgICAgICBwYXJh
bWV0ZXJzLnAyID0geworICAgICAgICAgICAgYXJjLmMueCArIGFyYy5yYWRpdXMgKiBzdGQ6OmNv
cyhhcmMuZW5kQW5nbGUpLAorICAgICAgICAgICAgYXJjLmMueSArIGFyYy5yYWRpdXMgKiBzdGQ6
OnNpbihhcmMuZW5kQW5nbGUpIH07CisgICAgICAgIHBhcmFtZXRlcnMucmggPSBzdGQ6OmFicyhh
cmMucmFkaXVzKTsKKyAgICAgICAgcGFyYW1ldGVycy5ydiA9IHN0ZDo6YWJzKGFyYy5yYWRpdXMp
OworICAgICAgICBwYXJhbWV0ZXJzLnBoaSA9IDA7CisKKyAgICAgICAgLy8gRklYTUU6IGNvbXB1
dGUgdmFsdWVzIGZvciBmQSBhbmQgZlMsIHVzZSB0aGVtLgorfQorCit0ZW1wbGF0ZTw+Citpbmxp
bmUgdm9pZCBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnM6OmNvbXB1dGU8UGFydGlhbEVs
bGlwdGljYWxBcmNQYXJhbWV0ZXJzOjpDaXJjdWxhclRhbmdlbnRBcmM+KAorICAgIFBhcnRpYWxF
bGxpcHRpY2FsQXJjUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQ2lyY3VsYXJUYW5nZW50
QXJjJiBhcmMpCit7CisgICAgICAgIGF1dG8mIHRwMCA9IGFyYy50cDA7CisgICAgICAgIGF1dG8m
IHRwMSA9IGFyYy50cDE7CisgICAgICAgIGF1dG8mIHRwMiA9IGFyYy50cDI7CisKKyAgICAgICAg
UG9pbnQgZDAgeyB0cDAueCAtIHRwMS54LCB0cDAueSAtIHRwMS55IH07CisgICAgICAgIFBvaW50
IGQyIHsgdHAyLnggLSB0cDEueCwgdHAyLnkgLSB0cDEueSB9OworCisgICAgICAgIHN0cnVjdCB7
CisgICAgICAgICAgICBkb3VibGUgZDBkMDsKKyAgICAgICAgICAgIGRvdWJsZSBkMmQyOworICAg
ICAgICAgICAgZG91YmxlIGQwZDI7CisgICAgICAgIH0gZG90UHJvZHVjdHMgPSB7CisgICAgICAg
ICAgICBkMC54ICogZDAueCArIGQwLnkgKiBkMC55LAorICAgICAgICAgICAgZDIueCAqIGQyLngg
KyBkMi55ICogZDIueSwKKyAgICAgICAgICAgIGQwLnggKiBkMi54ICsgZDAueSAqIGQyLnksCisg
ICAgICAgIH07CisKKyAgICAgICAgZG91YmxlIG51bSA9IGQwLnkgKiBkMi54IC0gZDIueSAqIGQw
Lng7CisgICAgICAgIGRvdWJsZSBkZW5vbSA9IHN0ZDo6c3FydChkb3RQcm9kdWN0cy5kMGQwICog
ZG90UHJvZHVjdHMuZDJkMikgLSBkb3RQcm9kdWN0cy5kMGQyOworICAgICAgICBkb3VibGUgZGlz
dCA9IHN0ZDo6YWJzKGFyYy5yYWRpdXMgKiBudW0gLyBkZW5vbSk7CisgICAgICAgIGRvdWJsZSBy
YWRpdXNBYnMgPSBzdGQ6OmFicyhhcmMucmFkaXVzKTsKKyAgICAgICAgZG91YmxlIHJhZGl1c1Np
Z24gPSBhcmMucmFkaXVzIC8gcmFkaXVzQWJzOworICAgICAgICBkb3VibGUgbDAgPSBkaXN0IC8g
c3RkOjpzcXJ0KGRvdFByb2R1Y3RzLmQwZDApICogcmFkaXVzU2lnbjsKKyAgICAgICAgZG91Ymxl
IGwyID0gZGlzdCAvIHN0ZDo6c3FydChkb3RQcm9kdWN0cy5kMmQyKSAqIHJhZGl1c1NpZ247CisK
KyAgICAgICAgcGFyYW1ldGVycy5wMSA9IHsgdHAxLnggKyBkMC54ICogbDAsIHRwMS55ICsgZDAu
eSAqIGwwIH07CisgICAgICAgIHBhcmFtZXRlcnMucDIgPSB7IHRwMS54ICsgZDIueCAqIGwyLCB0
cDEueSArIGQyLnkgKiBsMiB9OworICAgICAgICBwYXJhbWV0ZXJzLnJoID0gcmFkaXVzQWJzOwor
ICAgICAgICBwYXJhbWV0ZXJzLnJ2ID0gcmFkaXVzQWJzOworICAgICAgICBwYXJhbWV0ZXJzLnBo
aSA9IDA7CisgICAgICAgIHBhcmFtZXRlcnMuZkEgPSBmYWxzZTsKKyAgICAgICAgcGFyYW1ldGVy
cy5mUyA9IChudW0gPj0gMCk7Cit9CisKK3N0cnVjdCBHZW5lcmFsUGFyYW1ldHJpY0FyYyB7Cisg
ICAgUG9pbnQgYzsKKyAgICBkb3VibGUgdGhldGExOworICAgIGRvdWJsZSBkdGhldGE7CisKKyAg
ICBzdGF0aWMgdm9pZCBjb21wdXRlKEdlbmVyYWxQYXJhbWV0cmljQXJjJiBhcmMsIGNvbnN0IFBh
cnRpYWxFbGxpcHRpY2FsQXJjUGFyYW1ldGVycyYgcGFyYW1ldGVycykKKyAgICB7CisgICAgICAg
IGRvdWJsZSB4MXAgPSBzdGQ6OmNvcyhwYXJhbWV0ZXJzLnBoaSkgKiAocGFyYW1ldGVycy5wMS54
IC0gcGFyYW1ldGVycy5wMi54KSAvIDIKKyAgICAgICAgICAgICsgc3RkOjpzaW4ocGFyYW1ldGVy
cy5waGkpICogKHBhcmFtZXRlcnMucDEueSAtIHBhcmFtZXRlcnMucDIueSkgLyAyOworICAgICAg
ICBkb3VibGUgeTFwID0gLXN0ZDo6c2luKHBhcmFtZXRlcnMucGhpKSAqIChwYXJhbWV0ZXJzLnAx
LnggLSBwYXJhbWV0ZXJzLnAyLngpIC8gMgorICAgICAgICAgICAgKyBzdGQ6OmNvcyhwYXJhbWV0
ZXJzLnBoaSkgKiAocGFyYW1ldGVycy5wMS55IC0gcGFyYW1ldGVycy5wMi55KSAvIDI7CisKKyAg
ICAgICAgZG91YmxlIGxhbWJkYSA9IHN0ZDo6cG93KHgxcCAvIHBhcmFtZXRlcnMucmgsIDIpICsg
c3RkOjpwb3coeTFwIC8gcGFyYW1ldGVycy5ydiwgMik7CisgICAgICAgIFBvaW50IHJwIHsgcGFy
YW1ldGVycy5yaCwgcGFyYW1ldGVycy5ydiB9OworICAgICAgICBpZiAobGFtYmRhID4gMSkKKyAg
ICAgICAgICAgIHJwID0geyBwYXJhbWV0ZXJzLnJoICogc3RkOjpzcXJ0KGxhbWJkYSksIHBhcmFt
ZXRlcnMucnYgKiBzdGQ6OnNxcnQobGFtYmRhKSB9OworCisgICAgICAgIGRvdWJsZSBmc2duID0g
KHBhcmFtZXRlcnMuZkEgIT0gcGFyYW1ldGVycy5mUykgPyAxIDogLTE7CisgICAgICAgIHN0cnVj
dCB7CisgICAgICAgICAgICBkb3VibGUgcnBYOyBkb3VibGUgcnBZOworICAgICAgICAgICAgZG91
YmxlIHgxcDsgZG91YmxlIHkxcDsKKyAgICAgICAgfSBzcSA9IHsgc3RkOjpwb3cocnAueCwgMiks
IHN0ZDo6cG93KHJwLnksIDIpLCBzdGQ6OnBvdyh4MXAsIDIpLCBzdGQ6OnBvdyh5MXAsIDIpIH07
CisKKyAgICAgICAgZG91YmxlIGNwQmFzZSA9IHN0ZDo6c3FydCgoc3EucnBYICogc3EucnBZIC0g
c3EucnBYICogc3EueTFwIC0gc3EucnBZICogc3EueDFwKQorICAgICAgICAgICAgLyAoc3EucnBY
ICogc3EueTFwICsgc3EucnBZICogc3EueDFwKSk7CisgICAgICAgIFBvaW50IGNwIHsgZnNnbiAq
IGNwQmFzZSAqIHJwLnggKiB5MXAgLyBycC55LCBmc2duICogY3BCYXNlICogLXJwLnkgKiB4MXAg
LyBycC54IH07CisgICAgICAgIGFyYy5jID0geyBzdGQ6OmNvcyhwYXJhbWV0ZXJzLnBoaSkgKiBj
cC54IC0gc3RkOjpzaW4ocGFyYW1ldGVycy5waGkpICogY3AueSArIChwYXJhbWV0ZXJzLnAxLngg
KyBwYXJhbWV0ZXJzLnAyLngpIC8gMiwKKyAgICAgICAgICAgIHN0ZDo6c2luKHBhcmFtZXRlcnMu
cGhpKSAqIGNwLnggKyBzdGQ6OmNvcyhwYXJhbWV0ZXJzLnBoaSkgKiBjcC55ICsgKHBhcmFtZXRl
cnMucDEueSArIHBhcmFtZXRlcnMucDIueSkgLyAyIH07CisKKyAgICAgICAgYXV0byBjYWxjdWxh
dGVBbmdsZSA9CisgICAgICAgICAgICBbJl0oY29uc3QgUG9pbnQmIHUsIGNvbnN0IFBvaW50JiB2
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSB1dTsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIHZ2OworICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgdXY7CisgICAgICAgICAgICAgICAgfSBkb3RzID0geworICAg
ICAgICAgICAgICAgICAgICB1LnggKiB1LnggKyB1LnkgKiB1LnksCisgICAgICAgICAgICAgICAg
ICAgIHYueCAqIHYueCArIHYueSAqIHYueSwKKyAgICAgICAgICAgICAgICAgICAgdS54ICogdi54
ICsgdS55ICogdi55LAorICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBkb3Vi
bGUgYW5nbGUgPSBzdGQ6OmFjb3MoZG90cy51diAvIHN0ZDo6c3FydChkb3RzLnV1KSAqIHN0ZDo6
c3FydChkb3RzLnZ2KSk7CisgICAgICAgICAgICAgICAgaWYgKHUueCAqIHYueSAtIHUueSAqIHYu
eCA+PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYW5nbGU7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIC1hbmdsZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgYXJjLnRoZXRhMSA9
IGNhbGN1bGF0ZUFuZ2xlKHsgMSwgMCB9LCB7ICh4MXAgLSBjcC54KSAvIHJwLngsICh5MXAgLSBj
cC55KSAvIHJwLnkgfSk7CisgICAgICAgIGRvdWJsZSBkYW5nbGUgPSBjYWxjdWxhdGVBbmdsZSgK
KyAgICAgICAgICAgIHsgKHgxcCAtIGNwLngpIC8gcnAueCwgKHkxcCAtIGNwLnkpIC8gcnAueSB9
LAorICAgICAgICAgICAgeyAoLXgxcCAtIGNwLngpIC8gcnAueCwgKC15MXAgLSBjcC55KSAvIHJw
LnkgfSk7CisKKyAgICAgICAgaWYgKHBhcmFtZXRlcnMuZlMpIHsKKyAgICAgICAgICAgIGlmIChk
YW5nbGUgPCAwKQorICAgICAgICAgICAgICAgIGRhbmdsZSArPSAyICogTV9QSTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChkYW5nbGUgPiAwKQorICAgICAgICAgICAgICAgIGRh
bmdsZSAtPSAyICogTV9QSTsKKyAgICAgICAgfQorICAgICAgICBhcmMuZHRoZXRhID0gZGFuZ2xl
OworICAgIH0KK307CisKK3N0cnVjdCBQYXRoUHJvY2Vzc2luZ1N0YXRlIHsKKyAgICBQb2ludCBz
dGFydGluZ1BvaW50OworICAgIFBvaW50IGN1cnJlbnRQb2ludDsKKyAgICBQb2ludCBwcmlvckVu
ZFBvaW50OworCisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAgICBX
ZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtSW52ZXJzZTsKKworICAgIFBvaW50IG1h
cChjb25zdCBQb2ludCYgcCkKKyAgICB7CisgICAgICAgIFBvaW50IG1hcHBlZFBvaW50OworICAg
ICAgICB0cmFuc2Zvcm0ubWFwKHAueCwgcC55LCBtYXBwZWRQb2ludC54LCBtYXBwZWRQb2ludC55
KTsKKyAgICAgICAgcmV0dXJuIG1hcHBlZFBvaW50OworICAgIH0KKworICAgIFBvaW50IG1hcElu
dmVyc2UoY29uc3QgUG9pbnQmIHApCisgICAgeworICAgICAgICBQb2ludCBtYXBwZWRQb2ludDsK
KyAgICAgICAgdHJhbnNmb3JtSW52ZXJzZS5tYXAocC54LCBwLnksIG1hcHBlZFBvaW50LngsIG1h
cHBlZFBvaW50LnkpOworICAgICAgICByZXR1cm4gbWFwcGVkUG9pbnQ7CisgICAgfQorCisgICAg
dGVtcGxhdGU8c2l6ZV90IE4+CisgICAgc3RydWN0IFZhbHVlUmFuZ2UgeworICAgICAgICB0eXBl
bmFtZSBWYWx1ZXM8Tj46Oml0ZXJhdG9yIGJlZ2luOworICAgICAgICB0eXBlbmFtZSBWYWx1ZXM8
Tj46Oml0ZXJhdG9yIGVuZDsKKyAgICB9OworCisgICAgdGVtcGxhdGU8Q29tbWFuZCBjb21tYW5k
LCBzaXplX3QgTj4KKyAgICBzdGF0aWMgdm9pZCBhcHBseShQYXRoUHJvY2Vzc2luZ1N0YXRlJiwg
VmFsdWVSYW5nZTxOPikgPSBkZWxldGU7Cit9OworCit0ZW1wbGF0ZTw+CitpbmxpbmUgdm9pZCBQ
YXRoUHJvY2Vzc2luZ1N0YXRlOjphcHBseTxDb21tYW5kOjpNb3ZlVG8sIDI+KFBhdGhQcm9jZXNz
aW5nU3RhdGUmLCBWYWx1ZVJhbmdlPDI+KQoreworfQorCitzdHJ1Y3QgUGF0aENvbnRhaW5lciB7
CisgICAgdXNpbmcgQ29tbWFuZFZlY3RvciA9IFZlY3RvcjxDb21tYW5kLCAxNj47CisgICAgdXNp
bmcgVmFsdWVWZWN0b3IgPSBWZWN0b3I8ZG91YmxlLCA2ND47CisKKyAgICBDb21tYW5kVmVjdG9y
IGNvbW1hbmRzOworICAgIFZhbHVlVmVjdG9yIHZhbHVlczsKK307CisKK3N0cnVjdCBJbW1lZGlh
dGVTdGF0ZSA6IFBhdGhQcm9jZXNzaW5nU3RhdGUgeworICAgIHRlbXBsYXRlPHNpemVfdCBOPgor
ICAgIHZvaWQgYXBwbHkoQ29tbWFuZCBjb21tYW5kLCBjb25zdCBWYWx1ZXM8Tj4mIHZhbHVlcykK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoY29tbWFuZCkgeworICAgICAgICBjYXNlIENvbW1hbmQ6
Ok1vdmVUbzoKKyAgICAgICAgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoTiA9PSAyKTsK
KyAgICAgICAgICAgIFBvaW50IHAgPSBtYXAoeyB2YWx1ZXNbMF0sIHZhbHVlc1sxXSB9KTsKKwor
ICAgICAgICAgICAgc3RhcnRpbmdQb2ludCA9IHA7CisgICAgICAgICAgICBjdXJyZW50UG9pbnQg
PSBwOworICAgICAgICAgICAgcHJpb3JFbmRQb2ludCA9IHA7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIENvbW1hbmQ6OkNsb3NlOgorICAgICAgICB7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChOID09IDApOworICAgICAgICAgICAgY3VycmVudFBvaW50
ID0gc3RhcnRpbmdQb2ludDsKKyAgICAgICAgICAgIHByaW9yRW5kUG9pbnQgPSBzdGFydGluZ1Bv
aW50OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb21tYW5k
OjpMaW5lVG86CisgICAgICAgIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKE4gPT0gMik7
CisgICAgICAgICAgICBQb2ludCBwMSA9IG1hcCh7IHZhbHVlc1swXSwgdmFsdWVzWzFdIH0pOwor
CisgICAgICAgICAgICBjdXJyZW50UG9pbnQgPSBwMTsKKyAgICAgICAgICAgIHByaW9yRW5kUG9p
bnQgPSBwMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29t
bWFuZDo6UmVjdDoKKyAgICAgICAgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoTiA9PSA0
KTsKKyAgICAgICAgICAgIFBvaW50IHAwID0gbWFwKHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0gfSk7
CisKKyAgICAgICAgICAgIGN1cnJlbnRQb2ludCA9IHAwOworICAgICAgICAgICAgcHJpb3JFbmRQ
b2ludCA9IHAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBD
b21tYW5kOjpRdWFkcmF0aWNDdXJ2ZVRvOgorICAgICAgICB7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChOID09IDQpOworICAgICAgICAgICAgUG9pbnQgcDEgPSBtYXAoeyB2YWx1ZXNbMF0s
IHZhbHVlc1sxXSB9KTsKKyAgICAgICAgICAgIFBvaW50IHAyID0gbWFwKHsgdmFsdWVzWzJdLCB2
YWx1ZXNbM10gfSk7CisKKyAgICAgICAgICAgIGN1cnJlbnRQb2ludCA9IHAyOworICAgICAgICAg
ICAgc3RhcnRpbmdQb2ludCA9IHAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBDb21tYW5kOjpDdWJpY0N1cnZlVG86CisgICAgICAgIHsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKE4gPT0gNik7CisgICAgICAgICAgICBQb2ludCBwMiA9IG1hcCh7IHZh
bHVlc1syXSwgdmFsdWVzWzNdIH0pOworICAgICAgICAgICAgUG9pbnQgcDMgPSBtYXAoeyB2YWx1
ZXNbNF0sIHZhbHVlc1s1XSB9KTsKKworICAgICAgICAgICAgY3VycmVudFBvaW50ID0gcDM7Cisg
ICAgICAgICAgICBwcmlvckVuZFBvaW50ID0gcDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIENvbW1hbmQ6OkNpcmN1bGFyQ2xvY2t3aXNlQXJjOgorICAgICAg
ICBjYXNlIENvbW1hbmQ6OkNpcmN1bGFyQ291bnRlckNsb2Nrd2lzZUFyYzoKKyAgICAgICAgewor
ICAgICAgICAgICAgdXNpbmcgQXJjVHlwZSA9IFBhcnRpYWxFbGxpcHRpY2FsQXJjUGFyYW1ldGVy
czo6Q2lyY3VsYXJBcmM7CisKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKE4gPT0gNSk7Cisg
ICAgICAgICAgICBBcmNUeXBlIGFyYyB7IHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0gfSwgdmFsdWVz
WzJdLCB2YWx1ZXNbM10sIHZhbHVlc1s0XSB9OworCisgICAgICAgICAgICBQYXJ0aWFsRWxsaXB0
aWNhbEFyY1BhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgIFBhcnRpYWxFbGxpcHRp
Y2FsQXJjUGFyYW1ldGVyczo6Y29tcHV0ZTxBcmNUeXBlPihwYXJhbWV0ZXJzLCBhcmMpOworCisg
ICAgICAgICAgICBhdXRvIG1wMiA9IG1hcChwYXJhbWV0ZXJzLnAyKTsKKyAgICAgICAgICAgIGN1
cnJlbnRQb2ludCA9IG1wMjsKKyAgICAgICAgICAgIHByaW9yRW5kUG9pbnQgPSBtcDI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvbW1hbmQ6OkNpcmN1bGFy
VGFuZ2VudEFyYzoKKyAgICAgICAgeworICAgICAgICAgICAgdXNpbmcgQXJjVHlwZSA9IFBhcnRp
YWxFbGxpcHRpY2FsQXJjUGFyYW1ldGVyczo6Q2lyY3VsYXJUYW5nZW50QXJjOworCisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChOID09IDUpOworICAgICAgICAgICAgQXJjVHlwZSBhcmMgeyBt
YXBJbnZlcnNlKGN1cnJlbnRQb2ludCksCisgICAgICAgICAgICAgICAgeyB2YWx1ZXNbMF0sIHZh
bHVlc1sxXSB9LCB7IHZhbHVlc1syXSwgdmFsdWVzWzNdIH0sIHZhbHVlc1s0XSB9OworCisgICAg
ICAgICAgICBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICAg
ICAgICAgIFBhcnRpYWxFbGxpcHRpY2FsQXJjUGFyYW1ldGVyczo6Y29tcHV0ZTxBcmNUeXBlPihw
YXJhbWV0ZXJzLCBhcmMpOworCisgICAgICAgICAgICBhdXRvIG1wMiA9IG1hcChwYXJhbWV0ZXJz
LnAyKTsKKyAgICAgICAgICAgIGN1cnJlbnRQb2ludCA9IG1wMjsKKyAgICAgICAgICAgIHByaW9y
RW5kUG9pbnQgPSBtcDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIENvbW1hbmQ6OlRyYW5zZm9ybToKKyAgICAgICAgeworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoTiA9PSAxMik7CisgICAgICAgICAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdHJh
bnNmb3JtKHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2YWx1ZXNbMl0sCisgICAgICAgICAgICAgICAg
dmFsdWVzWzNdLCB2YWx1ZXNbNF0sIHZhbHVlc1s1XSk7CisgICAgICAgICAgICBXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm0gaW52ZXJzZSh2YWx1ZXNbNl0sIHZhbHVlc1s3XSwgdmFsdWVzWzhdLAor
ICAgICAgICAgICAgICAgIHZhbHVlc1s5XSwgdmFsdWVzWzEwXSwgdmFsdWVzWzExXSk7CisKKyAg
ICAgICAgICAgIGF1dG8mIHN0YXRlID0gKnRoaXM7CisgICAgICAgICAgICBzdGF0ZS50cmFuc2Zv
cm0ubXVsdGlwbHkoaW52ZXJzZSk7CisgICAgICAgICAgICBzdGF0ZS50cmFuc2Zvcm1JbnZlcnNl
ID0gdHJhbnNmb3JtICogc3RhdGUudHJhbnNmb3JtSW52ZXJzZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfTsKKworc3RydWN0IEdlbmVyaWNQYXRo
IHsKKyAgICB0ZW1wbGF0ZTxzaXplX3QgTiA9IDA+CisgICAgdm9pZCBhZGQoQ29tbWFuZCBjb21t
YW5kLCBjb25zdCBWYWx1ZXM8Tj4mIHZhbHVlcyA9IHsgfSkKKyAgICB7CisgICAgICAgIGNvbnRh
aW5lci5jb21tYW5kcy5hcHBlbmQoY29tbWFuZCk7CisgICAgICAgIGNvbnRhaW5lci52YWx1ZXMu
YXBwZW5kUmFuZ2UodmFsdWVzLmJlZ2luKCksIHZhbHVlcy5lbmQoKSk7CisKKyAgICAgICAgaW1t
ZWRpYXRlU3RhdGUuYXBwbHkoY29tbWFuZCwgdmFsdWVzKTsKKyAgICB9CisKKyAgICB2b2lkIGNs
ZWFyKCkKKyAgICB7CisgICAgICAgIGNvbnRhaW5lci5jb21tYW5kcy5jbGVhcigpOworICAgICAg
ICBjb250YWluZXIudmFsdWVzLmNsZWFyKCk7CisKKyAgICAgICAgaW1tZWRpYXRlU3RhdGUuc3Rh
cnRpbmdQb2ludCA9IHsgfTsKKyAgICAgICAgaW1tZWRpYXRlU3RhdGUuY3VycmVudFBvaW50ID0g
eyB9OworICAgICAgICBpbW1lZGlhdGVTdGF0ZS5wcmlvckVuZFBvaW50ID0geyB9OworCisgICAg
ICAgIGltbWVkaWF0ZVN0YXRlLnRyYW5zZm9ybSA9IHsgfTsKKyAgICAgICAgaW1tZWRpYXRlU3Rh
dGUudHJhbnNmb3JtSW52ZXJzZSA9IHsgfTsKKyAgICB9CisKKyAgICBQYXRoQ29udGFpbmVyIGNv
bnRhaW5lcjsKKyAgICBJbW1lZGlhdGVTdGF0ZSBpbW1lZGlhdGVTdGF0ZTsKK307CisKK3N0cnVj
dCBCYXNpY1Byb2Nlc3NvciB7CisgICAgUGF0aFByb2Nlc3NpbmdTdGF0ZSBzdGF0ZTsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEYxLCB0eXBlbmFtZSBGMiwgdHlwZW5hbWUgRjMsIHR5cGVuYW1l
IEY0PgorICAgIHZvaWQgYXBwbHkoY29uc3QgUGF0aENvbnRhaW5lciYgY29udGFpbmVyLCBjb25z
dCBGMSYgbW92ZVRvLCBjb25zdCBGMiYgbGluZVRvLCBjb25zdCBGMyYgY3VydmVUbywgY29uc3Qg
RjQmIGNsb3NlKQorICAgIHsKKyAgICAgICAgYXV0byBpdCA9IGNvbnRhaW5lci52YWx1ZXMuYmVn
aW4oKTsKKyAgICAgICAgZm9yIChhdXRvIGNvbW1hbmQgOiBjb250YWluZXIuY29tbWFuZHMpIHsK
KyAgICAgICAgICAgIHN3aXRjaCAoY29tbWFuZCkgeworICAgICAgICAgICAgY2FzZSBDb21tYW5k
OjpNb3ZlVG86CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aXQgKyAyIDw9IGNvbnRhaW5lci52YWx1ZXMuZW5kKCkpOworICAgICAgICAgICAgICAgIFBvaW50
IHAgPSBzdGF0ZS5tYXAoeyBpdFswXSwgaXRbMV0gfSk7CisgICAgICAgICAgICAgICAgaXQgKz0g
MjsKKworICAgICAgICAgICAgICAgIG1vdmVUbyhwKTsKKworICAgICAgICAgICAgICAgIHN0YXRl
LnN0YXJ0aW5nUG9pbnQgPSBwOworICAgICAgICAgICAgICAgIHN0YXRlLmN1cnJlbnRQb2ludCA9
IHA7CisgICAgICAgICAgICAgICAgc3RhdGUucHJpb3JFbmRQb2ludCA9IHA7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENvbW1hbmQ6OkNs
b3NlOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNsb3NlKCk7CisKKyAgICAgICAg
ICAgICAgICBzdGF0ZS5jdXJyZW50UG9pbnQgPSBzdGF0ZS5zdGFydGluZ1BvaW50OworICAgICAg
ICAgICAgICAgIHN0YXRlLnByaW9yRW5kUG9pbnQgPSBzdGF0ZS5zdGFydGluZ1BvaW50OworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDb21t
YW5kOjpMaW5lVG86CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaXQgKyAyIDw9IGNvbnRhaW5lci52YWx1ZXMuZW5kKCkpOworICAgICAgICAgICAgICAgIFBv
aW50IHAgPSBzdGF0ZS5tYXAoeyBpdFswXSwgaXRbMV0gfSk7CisgICAgICAgICAgICAgICAgaXQg
Kz0gMjsKKworICAgICAgICAgICAgICAgIGxpbmVUbyhwKTsKKworICAgICAgICAgICAgICAgIHN0
YXRlLmN1cnJlbnRQb2ludCA9IHA7CisgICAgICAgICAgICAgICAgc3RhdGUucHJpb3JFbmRQb2lu
dCA9IHA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjYXNlIENvbW1hbmQ6OlJlY3Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaXQgKyA0IDw9IGNvbnRhaW5lci52YWx1ZXMuZW5kKCkpOworICAgICAgICAg
ICAgICAgIFBvaW50IHAwID0gc3RhdGUubWFwKHsgaXRbMF0sIGl0WzFdIH0pOworICAgICAgICAg
ICAgICAgIFBvaW50IHAxID0gc3RhdGUubWFwKHsgaXRbMl0sIGl0WzFdIH0pOworICAgICAgICAg
ICAgICAgIFBvaW50IHAyID0gc3RhdGUubWFwKHsgaXRbMl0sIGl0WzNdIH0pOworICAgICAgICAg
ICAgICAgIFBvaW50IHAzID0gc3RhdGUubWFwKHsgaXRbMF0sIGl0WzNdIH0pOworICAgICAgICAg
ICAgICAgIGl0ICs9IDQ7CisKKyAgICAgICAgICAgICAgICBsaW5lVG8ocDEpOworICAgICAgICAg
ICAgICAgIGxpbmVUbyhwMik7CisgICAgICAgICAgICAgICAgbGluZVRvKHAzKTsKKworICAgICAg
ICAgICAgICAgIHN0YXRlLmN1cnJlbnRQb2ludCA9IHAwOworICAgICAgICAgICAgICAgIHN0YXRl
LnByaW9yRW5kUG9pbnQgPSBwMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNhc2UgQ29tbWFuZDo6UXVhZHJhdGljQ3VydmVUbzoKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpdCArIDQgPD0gY29udGFpbmVy
LnZhbHVlcy5lbmQoKSk7CisgICAgICAgICAgICAgICAgUG9pbnQgcDAgPSBzdGF0ZS5tYXBJbnZl
cnNlKHN0YXRlLmN1cnJlbnRQb2ludCk7CisgICAgICAgICAgICAgICAgUG9pbnQgcXAxIHsgaXRb
MF0sIGl0WzFdIH07CisgICAgICAgICAgICAgICAgUG9pbnQgcXAyIHsgaXRbMl0sIGl0WzNdIH07
CisgICAgICAgICAgICAgICAgaXQgKz0gNDsKKworICAgICAgICAgICAgICAgIFBvaW50IHAxIHsg
cDAueCArIDIuMCAvIDMuMCAqIChxcDEueCAtIHAwLngpLCBwMC55ICsgMi4wIC8gMy4wICogKHFw
MS55IC0gcDAueSkgfTsKKyAgICAgICAgICAgICAgICBQb2ludCBwMiB7IHFwMi54ICsgMi4wIC8g
My4wICogKHFwMS54IC0gcXAyLngpLCBxcDIueSArIDIuMCAvIDMuMCAqIChxcDEueSAtIHFwMi55
KSB9OworICAgICAgICAgICAgICAgIGN1cnZlVG8oc3RhdGUubWFwKHAxKSwgc3RhdGUubWFwKHAy
KSwgc3RhdGUubWFwKHFwMikpOworCisgICAgICAgICAgICAgICAgc3RhdGUuY3VycmVudFBvaW50
ID0gc3RhdGUubWFwKHFwMik7CisgICAgICAgICAgICAgICAgc3RhdGUucHJpb3JFbmRQb2ludCA9
IHN0YXRlLm1hcChxcDEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FzZSBDb21tYW5kOjpDdWJpY0N1cnZlVG86CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXQgKyA2IDw9IGNvbnRhaW5lci52YWx1ZXMu
ZW5kKCkpOworICAgICAgICAgICAgICAgIFBvaW50IHAxID0gc3RhdGUubWFwKHsgaXRbMF0sIGl0
WzFdIH0pOworICAgICAgICAgICAgICAgIFBvaW50IHAyID0gc3RhdGUubWFwKHsgaXRbMl0sIGl0
WzNdIH0pOworICAgICAgICAgICAgICAgIFBvaW50IHAzID0gc3RhdGUubWFwKHsgaXRbNF0sIGl0
WzVdIH0pOworICAgICAgICAgICAgICAgIGl0ICs9IDY7CisKKyAgICAgICAgICAgICAgICBjdXJ2
ZVRvKHAxLCBwMiwgcDMpOworCisgICAgICAgICAgICAgICAgc3RhdGUuY3VycmVudFBvaW50ID0g
cDM7CisgICAgICAgICAgICAgICAgc3RhdGUucHJpb3JFbmRQb2ludCA9IHAyOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDb21tYW5kOjpD
aXJjdWxhckNsb2Nrd2lzZUFyYzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1c2lu
ZyBBcmNUeXBlID0gUGFydGlhbEVsbGlwdGljYWxBcmNQYXJhbWV0ZXJzOjpDaXJjdWxhckFyYzsK
KworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGl0ICsgNSA8PSBjb250YWluZXIudmFs
dWVzLmVuZCgpKTsKKyAgICAgICAgICAgICAgICBBcmNUeXBlIGFyYyB7IHsgaXRbMF0sIGl0WzFd
IH0sIGl0WzJdLCBpdFszXSwgaXRbNF0gfTsKKyAgICAgICAgICAgICAgICBpdCArPSA1OworCisg
ICAgICAgICAgICAgICAgd2hpbGUgKGFyYy5lbmRBbmdsZSA8PSBhcmMuc3RhcnRBbmdsZSkKKyAg
ICAgICAgICAgICAgICAgICAgYXJjLmVuZEFuZ2xlICs9IDIgKiBNX1BJOworCisgICAgICAgICAg
ICAgICAgUGFydGlhbEVsbGlwdGljYWxBcmNQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgICAg
ICAgICAgICAgUGFydGlhbEVsbGlwdGljYWxBcmNQYXJhbWV0ZXJzOjpjb21wdXRlPEFyY1R5cGU+
KHBhcmFtZXRlcnMsIGFyYyk7CisKKyAgICAgICAgICAgICAgICBsaW5lVG8oc3RhdGUubWFwKHBh
cmFtZXRlcnMucDEpKTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZUFyY0N1cnZlcyh0cnVlLCBh
cmMuc3RhcnRBbmdsZSwgYXJjLmVuZEFuZ2xlLAorICAgICAgICAgICAgICAgICAgICBbJl0oY29u
c3QgUG9pbnQmIGNwMSwgY29uc3QgUG9pbnQmIGNwMiwgY29uc3QgUG9pbnQmIGNwMykKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYgYyA9IGFyYy5j
OworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYgcmFkaXVzID0gYXJjLnJhZGl1czsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBtcDMgPSBzdGF0ZS5tYXAoeyBjLnggKyByYWRp
dXMgKiBjcDMueCwgYy55ICsgcmFkaXVzICogY3AzLnkgfSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJ2ZVRvKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1hcCh7IGMu
eCArIHJhZGl1cyAqIGNwMS54LCBjLnkgKyByYWRpdXMgKiBjcDEueSB9KSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZS5tYXAoeyBjLnggKyByYWRpdXMgKiBjcDIueCwgYy55ICsg
cmFkaXVzICogY3AyLnkgfSksIG1wMyk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5j
dXJyZW50UG9pbnQgPSBtcDM7CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAg
ICAgICAgYXV0byBtcDIgPSBzdGF0ZS5tYXAocGFyYW1ldGVycy5wMik7CisgICAgICAgICAgICAg
ICAgc3RhdGUuY3VycmVudFBvaW50ID0gbXAyOworICAgICAgICAgICAgICAgIHN0YXRlLnByaW9y
RW5kUG9pbnQgPSBtcDI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYXNlIENvbW1hbmQ6OkNpcmN1bGFyQ291bnRlckNsb2Nrd2lzZUFyYzoKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1c2luZyBBcmNUeXBlID0gUGFydGlhbEVsbGlw
dGljYWxBcmNQYXJhbWV0ZXJzOjpDaXJjdWxhckFyYzsKKworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGl0ICsgNSA8PSBjb250YWluZXIudmFsdWVzLmVuZCgpKTsKKyAgICAgICAgICAg
ICAgICBBcmNUeXBlIGFyYyB7IHsgaXRbMF0sIGl0WzFdIH0sIGl0WzJdLCBpdFszXSwgaXRbNF0g
fTsKKyAgICAgICAgICAgICAgICBpdCArPSA1OworCisgICAgICAgICAgICAgICAgd2hpbGUgKGFy
Yy5zdGFydEFuZ2xlIDwgYXJjLmVuZEFuZ2xlKQorICAgICAgICAgICAgICAgICAgICBhcmMuc3Rh
cnRBbmdsZSArPSAyICogTV9QSTsKKworICAgICAgICAgICAgICAgIFBhcnRpYWxFbGxpcHRpY2Fs
QXJjUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgICAgICAgICAgICAgIFBhcnRpYWxFbGxpcHRp
Y2FsQXJjUGFyYW1ldGVyczo6Y29tcHV0ZTxBcmNUeXBlPihwYXJhbWV0ZXJzLCBhcmMpOworCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRvIG1wMSA9IHN0YXRlLm1h
cChwYXJhbWV0ZXJzLnAxKTsKKyAgICAgICAgICAgICAgICAgICAgbGluZVRvKG1wMSk7CisgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLmN1cnJlbnRQb2ludCA9IG1wMTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVBcmNDdXJ2ZXMoZmFsc2UsIGFyYy5zdGFydEFu
Z2xlLCBhcmMuZW5kQW5nbGUsCisgICAgICAgICAgICAgICAgICAgIFsmXShjb25zdCBQb2ludCYg
Y3AxLCBjb25zdCBQb2ludCYgY3AyLCBjb25zdCBQb2ludCYgY3AzKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBjID0gYXJjLmM7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvJiByYWRpdXMgPSBhcmMucmFkaXVzOworCisgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIG1wMyA9IHN0YXRlLm1hcCh7IGMueCArIHJhZGl1cyAqIGNwMy54
LCBjLnkgKyByYWRpdXMgKiBjcDMueSB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZl
VG8oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubWFwKHsgYy54ICsgcmFkaXVz
ICogY3AxLngsIGMueSArIHJhZGl1cyAqIGNwMS55IH0pLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLm1hcCh7IGMueCArIHJhZGl1cyAqIGNwMi54LCBjLnkgKyByYWRpdXMgKiBj
cDIueSB9KSwgbXAzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmN1cnJlbnRQb2lu
dCA9IG1wMzsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBhdXRv
IG1wMiA9IHN0YXRlLm1hcChwYXJhbWV0ZXJzLnAyKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5j
dXJyZW50UG9pbnQgPSBtcDI7CisgICAgICAgICAgICAgICAgc3RhdGUucHJpb3JFbmRQb2ludCA9
IG1wMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNhc2UgQ29tbWFuZDo6Q2lyY3VsYXJUYW5nZW50QXJjOgorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHVzaW5nIEFyY1R5cGUgPSBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnM6
OkNpcmN1bGFyVGFuZ2VudEFyYzsKKworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGl0
ICsgNSA8PSBjb250YWluZXIudmFsdWVzLmVuZCgpKTsKKyAgICAgICAgICAgICAgICBBcmNUeXBl
IGFyYyB7IHN0YXRlLm1hcEludmVyc2Uoc3RhdGUuY3VycmVudFBvaW50KSwKKyAgICAgICAgICAg
ICAgICAgICAgeyBpdFswXSwgaXRbMV0gfSwgeyBpdFsyXSwgaXRbM10gfSwgaXRbNF0gfTsKKyAg
ICAgICAgICAgICAgICBpdCArPSA1OworCisgICAgICAgICAgICAgICAgaWYgKChhcmMudHAwLngg
PT0gYXJjLnRwMS54ICYmIGFyYy50cDAueSA9PSBhcmMudHAxLnkpCisgICAgICAgICAgICAgICAg
ICAgIHx8IChhcmMudHAxLnggPT0gYXJjLnRwMi54ICYmIGFyYy50cDEueSA9PSBhcmMudHAyLnkp
CisgICAgICAgICAgICAgICAgICAgIHx8ICFhcmMucmFkaXVzIHx8ICFhcmVhT2ZUcmlhbmdlKGFy
Yy50cDAsIGFyYy50cDEsIGFyYy50cDIpKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gbXRw
MSA9IHN0YXRlLm1hcChhcmMudHAxKTsKKyAgICAgICAgICAgICAgICAgICAgbGluZVRvKG10cDEp
OworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jdXJyZW50UG9pbnQgPSBtdHAxOworICAgICAg
ICAgICAgICAgICAgICBzdGF0ZS5wcmlvckVuZFBvaW50ID0gbXRwMTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgUGFydGlh
bEVsbGlwdGljYWxBcmNQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgICAgICAgICAgICAgUGFy
dGlhbEVsbGlwdGljYWxBcmNQYXJhbWV0ZXJzOjpjb21wdXRlPEFyY1R5cGU+KHBhcmFtZXRlcnMs
IGFyYyk7CisKKyAgICAgICAgICAgICAgICBHZW5lcmFsUGFyYW1ldHJpY0FyYyBwYXJhbWV0cmlj
QXJjOworICAgICAgICAgICAgICAgIEdlbmVyYWxQYXJhbWV0cmljQXJjOjpjb21wdXRlKHBhcmFt
ZXRyaWNBcmMsIHBhcmFtZXRlcnMpOworICAgICAgICAgICAgICAgIGRvdWJsZSBzdGFydEFuZ2xl
ID0gcGFyYW1ldHJpY0FyYy50aGV0YTE7CisgICAgICAgICAgICAgICAgZG91YmxlIGVuZEFuZ2xl
ID0gcGFyYW1ldHJpY0FyYy50aGV0YTEgKyBwYXJhbWV0cmljQXJjLmR0aGV0YTsKKworICAgICAg
ICAgICAgICAgIGxpbmVUbyhzdGF0ZS5tYXAocGFyYW1ldGVycy5wMSkpOworICAgICAgICAgICAg
ICAgIGdlbmVyYXRlQXJjQ3VydmVzKHBhcmFtZXRlcnMuZlMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xl
LAorICAgICAgICAgICAgICAgICAgICBbJl0oY29uc3QgUG9pbnQmIGNwMSwgY29uc3QgUG9pbnQm
IGNwMiwgY29uc3QgUG9pbnQmIGNwMykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byYgYyA9IHBhcmFtZXRyaWNBcmMuYzsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8mIHJhZGl1cyA9IGFyYy5yYWRpdXM7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dG8gbXAzID0gc3RhdGUubWFwKHsgYy54ICsgcmFkaXVzICogY3AzLngsIGMueSAr
IHJhZGl1cyAqIGNwMy55IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgY3VydmVUbygKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tYXAoeyBjLnggKyByYWRpdXMgKiBjcDEu
eCwgYy55ICsgcmFkaXVzICogY3AxLnkgfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGUubWFwKHsgYy54ICsgcmFkaXVzICogY3AyLngsIGMueSArIHJhZGl1cyAqIGNwMi55IH0p
LCBtcDMpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuY3VycmVudFBvaW50ID0gbXAz
OworICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGF1dG8gbXAyID0g
c3RhdGUubWFwKHBhcmFtZXRlcnMucDIpOworICAgICAgICAgICAgICAgIHN0YXRlLmN1cnJlbnRQ
b2ludCA9IG1wMjsKKyAgICAgICAgICAgICAgICBzdGF0ZS5wcmlvckVuZFBvaW50ID0gbXAyOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBD
b21tYW5kOjpUcmFuc2Zvcm06CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXQgKyAx
MiA8PSBjb250YWluZXIudmFsdWVzLmVuZCgpKTsKKyAgICAgICAgICAgICAgICBXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtKGl0WzBdLCBpdFsxXSwgaXRbMl0sIGl0WzNdLCBpdFs0
XSwgaXRbNV0pOworICAgICAgICAgICAgICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBpbnZl
cnNlKGl0WzZdLCBpdFs3XSwgaXRbOF0sIGl0WzldLCBpdFsxMF0sIGl0WzExXSk7CisgICAgICAg
ICAgICAgICAgaXQgKz0gMTI7CisKKyAgICAgICAgICAgICAgICBzdGF0ZS50cmFuc2Zvcm0ubXVs
dGlwbHkoaW52ZXJzZSk7CisgICAgICAgICAgICAgICAgc3RhdGUudHJhbnNmb3JtSW52ZXJzZSA9
IHRyYW5zZm9ybSAqIHN0YXRlLnRyYW5zZm9ybUludmVyc2U7CisKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGl0ID09IGNvbnRhaW5lci52YWx1ZXMuZW5kKCkpOworICAgIH0KK307CisKK3N0cnVjdCBGYXN0
Qm91bmRpbmdSZWN0UHJvY2Vzc29yIHsKKyAgICB2b2lkIGFwcGx5KGNvbnN0IFBhdGhDb250YWlu
ZXImIGNvbnRhaW5lciwgUG9pbnQmIGJvdHRvbUxlZnQsIFBvaW50JiB0b3BSaWdodCkKKyAgICB7
CisgICAgICAgIGJvdHRvbUxlZnQgPSB7IH07CisgICAgICAgIHRvcFJpZ2h0ID0geyB9OworICAg
ICAgICBib29sIGV4dGVudHNJbml0aWFsaXplZCA9IGZhbHNlOworCisgICAgICAgIGF1dG8gZXhw
YW5kRXh0ZW50cyA9CisgICAgICAgICAgICBbJl0oY29uc3QgUG9pbnQmIHApCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaWYgKHAueCA8IGJvdHRvbUxlZnQueCkKKyAgICAgICAgICAg
ICAgICAgICAgYm90dG9tTGVmdC54ID0gcC54OworICAgICAgICAgICAgICAgIGlmIChwLnggPiB0
b3BSaWdodC54KQorICAgICAgICAgICAgICAgICAgICB0b3BSaWdodC54ID0gcC54OworCisgICAg
ICAgICAgICAgICAgaWYgKHAueSA8IGJvdHRvbUxlZnQueSkKKyAgICAgICAgICAgICAgICAgICAg
Ym90dG9tTGVmdC55ID0gcC55OworICAgICAgICAgICAgICAgIGlmIChwLnkgPiB0b3BSaWdodC55
KQorICAgICAgICAgICAgICAgICAgICB0b3BSaWdodC55ID0gcC55OworICAgICAgICAgICAgfTsK
KworICAgICAgICBCYXNpY1Byb2Nlc3NvciBwcm9jZXNzb3I7CisgICAgICAgIHByb2Nlc3Nvci5h
cHBseShjb250YWluZXIsCisgICAgICAgICAgICBbJl0oY29uc3QgUG9pbnQmIHApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFleHRlbnRzSW5pdGlhbGl6ZWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZXh0ZW50c0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgYm90dG9tTGVmdCA9IHA7CisgICAgICAgICAgICAgICAgICAgIHRvcFJpZ2h0ID0gcDsK
KyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZXhwYW5kRXh0ZW50
cyhwKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbJl0oY29uc3QgUG9pbnQmIHApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXhwYW5kRXh0ZW50cyhwKTsKKyAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICBbJl0oY29uc3QgUG9pbnQmIHAxLCBjb25zdCBQb2ludCYgcDIs
IGNvbnN0IFBvaW50JiBwMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIHAw
ID0gcHJvY2Vzc29yLnN0YXRlLmN1cnJlbnRQb2ludDsKKworICAgICAgICAgICAgICAgIHN0cnVj
dCBDb21wb25lbnRSb290cyB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8ZG91Ymxl
LCAyPiByb290czsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtUm9vdHMgeyAwIH07
CisgICAgICAgICAgICAgICAgfSB4Um9vdHMsIHlSb290czsKKworICAgICAgICAgICAgICAgIGF1
dG8gY29tcHV0ZVJvb3RzID0KKyAgICAgICAgICAgICAgICAgICAgW10oQ29tcG9uZW50Um9vdHMm
IGNvbXBvbmVudCwgZG91YmxlIHYwLCBkb3VibGUgdjEsIGRvdWJsZSB2MiwgZG91YmxlIHYzKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgYSA9
IDMgKiAoLXYwICsgMyAqIHYxIC0gMyAqIHYyICsgMyAqIHYzKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSBiID0gNiAqICh2MCAtIDIgKiB2MSArIHYyKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRvdWJsZSBjID0gMyAqICgtdjAgKyB2MSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGIybTRh
YyA9IHN0ZDo6cG93KGIsIDIpIC0gNCAqIGEgKiBjOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChiMm00YWMgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b3VibGUgc3FydFZhbHVlID0gc3RkOjpzcXJ0KGIybTRhYyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbXBvbmVudC5yb290c1tjb21wb25lbnQubnVtUm9vdHMrK10gPSAoLWIg
LSBzcXJ0VmFsdWUpIC8gMiAqIGE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bXBvbmVudC5yb290c1tjb21wb25lbnQubnVtUm9vdHMrK10gPSAoLWIgKyBzcXJ0VmFsdWUpIC8g
MiAqIGE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9u
ZW50LnJvb3RzW2NvbXBvbmVudC5udW1Sb290cysrXSA9IC1jIC8gYjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGNv
bXB1dGVSb290cyh4Um9vdHMsIHAwLngsIHAxLngsIHAyLngsIHAzLngpOworICAgICAgICAgICAg
ICAgIGNvbXB1dGVSb290cyh5Um9vdHMsIHAwLnksIHAxLnksIHAyLnksIHAzLnkpOworCisgICAg
ICAgICAgICAgICAgYXV0byBjb21wdXRlVmFsdWUgPQorICAgICAgICAgICAgICAgICAgICBbXShk
b3VibGUgdCwgZG91YmxlIHYwLCBkb3VibGUgdjEsIGRvdWJsZSB2MiwgZG91YmxlIHYzKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpw
b3coMSAtIHQsIDMpICogdjAgKyAzICogc3RkOjpwb3coMSAtIHQsIDIpICogdCAqIHYxCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKyAzICogKDEgLSB0KSAqIHN0ZDo6cG93KHQsIDIpICog
djIgKyBzdGQ6OnBvdyh0LCAzKSAqIHYzOworICAgICAgICAgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICAgICAgYXV0byBleHBhbmRFeHRlbnRzWCA9CisgICAgICAgICAgICAgICAgICAgIFsm
XShkb3VibGUgdCwgZG91YmxlIHgwLCBkb3VibGUgeDEsIGRvdWJsZSB4MiwgZG91YmxlIHgzKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdmFs
dWUgPSBjb21wdXRlVmFsdWUodCwgeDAsIHgxLCB4MiwgeDMpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHZhbHVlIDwgYm90dG9tTGVmdC54KQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvdHRvbUxlZnQueCA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZh
bHVlID4gdG9wUmlnaHQueCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BSaWdodC54
ID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBhdXRv
IGV4cGFuZEV4dGVudHNZID0KKyAgICAgICAgICAgICAgICAgICAgWyZdKGRvdWJsZSB0LCBkb3Vi
bGUgeTAsIGRvdWJsZSB5MSwgZG91YmxlIHkyLCBkb3VibGUgeTMpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGNvbXB1dGVWYWx1
ZSh0LCB5MCwgeTEsIHkyLCB5Myk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUg
PCBib3R0b21MZWZ0LnkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tTGVmdC55
ID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPiB0b3BSaWdodC55
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcFJpZ2h0LnkgPSB2YWx1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGV4cGFuZEV4dGVudHNYKDAsIHAw
LngsIHAxLngsIHAyLngsIHAzLngpOworICAgICAgICAgICAgICAgIGV4cGFuZEV4dGVudHNYKDEs
IHAwLngsIHAxLngsIHAyLngsIHAzLngpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB4Um9vdHMubnVtUm9vdHM7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBk
b3VibGUgcm9vdCA9IHhSb290cy5yb290c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJv
b3QgPiAwICYmIHJvb3QgPCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kRXh0ZW50
c1gocm9vdCwgcDAueCwgcDEueCwgcDIueCwgcDMueCk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgZXhwYW5kRXh0ZW50c1koMCwgcDAueSwgcDEueSwgcDIueSwgcDMueSk7
CisgICAgICAgICAgICAgICAgZXhwYW5kRXh0ZW50c1koMSwgcDAueSwgcDEueSwgcDIueSwgcDMu
eSk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHlSb290cy5udW1S
b290czsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSByb290ID0geVJvb3RzLnJv
b3RzW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAocm9vdCA+IDAgJiYgcm9vdCA8IDEpCisg
ICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRFeHRlbnRzWShyb290LCBwMC55LCBwMS55LCBw
Mi55LCBwMy55KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgWyZdIHsgfSk7CisgICAgfQorfTsKKworc3RydWN0IENvbnRhaW5lZEluRmlsbFByb2Nlc3Nv
ciB7CisgICAgZW51bSBjbGFzcyBXaW5kUnVsZSB7CisgICAgICAgIEV2ZW5PZGQsCisgICAgICAg
IFdpbmRpbmcsCisgICAgfTsKKworICAgIGJvb2wgYXBwbHkoY29uc3QgUGF0aENvbnRhaW5lciYg
Y29udGFpbmVyLCBjb25zdCBQb2ludCYgdCwgV2luZFJ1bGUgcnVsZSkKKyAgICB7CisgICAgICAg
IFBvaW50IHN0YXJ0aW5nUG9pbnQ7CisgICAgICAgIFBvaW50IGN1cnJlbnRQb2ludDsKKyAgICAg
ICAgYm9vbCBoYXNDdXJyZW50UG9pbnQgeyBmYWxzZSB9OworICAgICAgICBib29sIG9uRWRnZSB7
IGZhbHNlIH07CisgICAgICAgIGludCB3aW5kaW5nIHsgMCB9OworCisgICAgICAgIEJhc2ljUHJv
Y2Vzc29yIHByb2Nlc3NvcjsKKworICAgICAgICBhdXRvIGNvbXBhcmVFZGdlID0KKyAgICAgICAg
ICAgIFsmXShjb25zdCBQb2ludCYgcDEsIGNvbnN0IFBvaW50JiBwMiwgY29uc3QgUG9pbnQmIG10
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSB4cDJwMSwgeXAycDE7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB4
bXRwMSwgeW10cDE7CisgICAgICAgICAgICAgICAgfSBkZWx0YSA9IHsgcDIueCAtIHAxLngsIHAy
LnkgLSBwMS55LCBtdC54IC0gcDEueCwgbXQueSAtIHAxLnkgfTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWRlbHRhLnhwMnAxKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gLWRlbHRhLnhtdHAx
OworICAgICAgICAgICAgICAgIGlmIChzdGQ6OnNpZ25iaXQoZGVsdGEueHAycDEpICE9IHN0ZDo6
c2lnbmJpdChkZWx0YS54bXRwMSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWx0YS54
cDJwMTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKGRlbHRhLnltdHAxICogZGVsdGEueHAycDEg
LSBkZWx0YS54bXRwMSAqIGRlbHRhLnlwMnAxKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAg
YXV0byBhZGRFZGdlID0KKyAgICAgICAgICAgIFsmXShQb2ludCBwMSwgUG9pbnQgcDIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IGRpcmVjdGlvbiA9IDE7CisgICAgICAgICAg
ICAgICAgaWYgKHAyLnkgPCBwMS55KSB7CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9
IC0xOworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAocDEsIHAyKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoKHQueCA9PSBwMS54ICYmIHQueSA9PSBwMS55
KQorICAgICAgICAgICAgICAgICAgICB8fCAodC54ID09IHAyLnggJiYgdC55ID09IHAyLnkpKSB7
CisgICAgICAgICAgICAgICAgICAgIG9uRWRnZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoKHAxLnkg
PD0gdC55ICYmIHAyLnkgPj0gdC55KQorICAgICAgICAgICAgICAgICAgICAmJiAoKHAxLnggPD0g
dC54ICYmIHAyLnggPj0gdC54KSB8fCAocDEueCA+PSB0LnggJiYgcDIueCA8PSB0LngpKQorICAg
ICAgICAgICAgICAgICAgICAmJiAhYXJlYU9mVHJpYW5nZShwMSwgcDIsIHQpKSB7CisgICAgICAg
ICAgICAgICAgICAgIG9uRWRnZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAodC55ID49IHAyLnkgfHwg
dC55IDwgcDEueSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IGlmICh0LnggPD0gcDEueCAmJiB0LnggPD0gcDIueCkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICAgICAgaWYgKCh0LnggPj0gcDEueCAmJiB0LnggPj0gcDIueCkg
fHwgY29tcGFyZUVkZ2UocDEsIHAyLCB0KSA8MCkKKyAgICAgICAgICAgICAgICAgICAgd2luZGlu
ZyArPSBkaXJlY3Rpb247CisgICAgICAgICAgICB9OworCisgICAgICAgIHByb2Nlc3Nvci5hcHBs
eShjb250YWluZXIsCisgICAgICAgICAgICBbJl0oY29uc3QgUG9pbnQmIHApCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaWYgKG9uRWRnZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICAgICAgaWYgKGhhc0N1cnJlbnRQb2ludCkKKyAgICAgICAgICAg
ICAgICAgICAgYWRkRWRnZShjdXJyZW50UG9pbnQsIHN0YXJ0aW5nUG9pbnQpOworCisgICAgICAg
ICAgICAgICAgc3RhcnRpbmdQb2ludCA9IHA7CisgICAgICAgICAgICAgICAgY3VycmVudFBvaW50
ID0gcDsKKyAgICAgICAgICAgICAgICBoYXNDdXJyZW50UG9pbnQgPSB0cnVlOworICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgIFsmXShjb25zdCBQb2ludCYgcCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAob25FZGdlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgICAgICBpZiAoaGFzQ3VycmVudFBvaW50KQorICAgICAgICAgICAgICAgICAg
ICBhZGRFZGdlKGN1cnJlbnRQb2ludCwgcCk7CisKKyAgICAgICAgICAgICAgICBjdXJyZW50UG9p
bnQgPSBwOworICAgICAgICAgICAgICAgIGhhc0N1cnJlbnRQb2ludCA9IHRydWU7CisgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgWyZdKGNvbnN0IFBvaW50JiBwMSwgY29uc3QgUG9pbnQmIHAy
LCBjb25zdCBQb2ludCYgcDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG9u
RWRnZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgYXV0
byBwMCA9IHByb2Nlc3Nvci5zdGF0ZS5jdXJyZW50UG9pbnQ7CisKKyAgICAgICAgICAgICAgICBh
dXRvIGNvbXB1dGVWYWx1ZSA9CisgICAgICAgICAgICAgICAgICAgIFtdKGRvdWJsZSB0LCBkb3Vi
bGUgdjAsIGRvdWJsZSB2MSwgZG91YmxlIHYyLCBkb3VibGUgdjMpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6OnBvdygxIC0gdCwgMykg
KiB2MCArIDMgKiBzdGQ6OnBvdygxIC0gdCwgMikgKiB0ICogdjEKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICArIDMgKiAoMSAtIHQpICogc3RkOjpwb3codCwgMikgKiB2MiArIHN0ZDo6cG93
KHQsIDMpICogdjM7CisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBh
dXRvIGNvbXB1dGVEZXJpdmF0aXZlVmFsdWUgPQorICAgICAgICAgICAgICAgICAgICBbXShkb3Vi
bGUgdCwgZG91YmxlIHYwLCBkb3VibGUgdjEsIGRvdWJsZSB2MiwgZG91YmxlIHYzKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpwb3co
MSAtIHQsIDIpICogMyAqICh2MSAtIHYwKSArIDIgKiAoMSAtIHQpICogdCAqIDMgKiAodjIgLSB2
MSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHN0ZDo6cG93KHQsIDIpICogMyAqICh2
MyAtIHYyKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIHN0cnVj
dCB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8ZG91YmxlLCAzPiBwYXJhbWV0ZXJW
YWx1ZXM7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bUludGVyc2VjdGlvbnMgeyAw
IH07CisgICAgICAgICAgICAgICAgfSBpbnRlcnNlY3Rpb25zOworCisgICAgICAgICAgICAgICAg
YXV0byBhZGRSb290ID0KKyAgICAgICAgICAgICAgICAgICAgWyZdKGRvdWJsZSB0KQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA+PSAwICYmIHQg
PD0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb25zLnBhcmFtZXRl
clZhbHVlc1tpbnRlcnNlY3Rpb25zLm51bUludGVyc2VjdGlvbnMrK10gPSB0OworICAgICAgICAg
ICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgYXV0byBjYWxjdWxhcmVSb290cyA9Cisg
ICAgICAgICAgICAgICAgICAgIFsmXShkb3VibGUgeTAsIGRvdWJsZSB5MSwgZG91YmxlIHkyLCBk
b3VibGUgeTMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkID0gLXkwICsgMyAq
IHkxIC0gMyAqIHkyICsgeTM7CisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgYSA9IDMg
KiB5MCAtIDYgKiB5MSArIDMgKiB5MjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBi
ID0gLTMgKiB5MCArIDMgKiB5MTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBjID0g
eTA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghYSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJvb3QoLWMgLyBi
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBi
Mm00YWMgPSBzdGQ6OnBvdyhiLCAyKSAtIDQgKiBhICogYzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYjJtNGFjID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZG91YmxlIHNxcnRWYWx1ZSA9IHN0ZDo6c3FydChiMm00YWMpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhZGRSb290KCgtYiAtIHNxcnRWYWx1ZSkgLyAyICogYSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJvb3QoKC1iICsgc3FydFZhbHVlKSAvIDIg
KiBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBhIC89IGQ7CisgICAgICAgICAgICAgICAgICAgICAgICBiIC89IGQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjIC89IGQ7CisgICAgICAgICAgICAgICAgICAgICAgICBk
b3VibGUgcCA9ICgzICogYiAtIHN0ZDo6cG93KGEsIDIpKSAvIDM7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgcSA9ICgyICogc3RkOjpwb3coYSwgMykgLSA5ICogYSAqIGIgKyAyNyAq
IGMpIC8gMjc7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcCAmJiAhcSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJvb3QoMCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIXApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRS
b290KHN0ZDo6Y2JydCgtcSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUm9vdCgwKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAocCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG91YmxlIHNxcnRWYWx1ZSA9IHN0ZDo6c3FydCgtcCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZFJvb3Qoc3FydFZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkUm9vdCgtc3FydFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgcDMgPSBw
IC8gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBxMiA9IHEgLyAyOworICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIGRpc2NyaW1pbmFudCA9IHN0ZDo6cG93KHEyLCAyKSAr
IHN0ZDo6cG93KHAzLCAzKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc2NyaW1p
bmFudCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgc3FydERpc2Ny
aW1pbmFudCA9IHN0ZDo6c3FydChkaXNjcmltaW5hbnQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZFJvb3Qoc3RkOjpjYnJ0KC1xMiArIHNxcnREaXNjcmltaW5hbnQpIC0gc3RkOjpj
YnJ0KHEyICsgc3FydERpc2NyaW1pbmFudCkgLSBhIC8gMyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFkaXNjcmltaW5hbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhZGRSb290KC0yICogc3RkOjpjYnJ0KHEyKSAtIGEgLyAzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhZGRSb290KHN0ZDo6Y2JydChxMikgLSBhIC8gMyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgciA9IHN0ZDo6c3FydChzdGQ6OnBvdygtcCAv
IDMsIDMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSByYyA9IHN0ZDo6Y2JydChy
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0ID0gLXEgLyAoMiAqIHIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHBoaSA9IHN0ZDo6YWNvcyhzdGQ6Om1heDxkb3Vi
bGU+KC0xLCBzdGQ6Om1pbjxkb3VibGU+KDEsIHQpKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhZGRSb290KDIgKiByYyAqIHN0ZDo6Y29zKHBoaSAvIDMpIC0gYSAvIDMpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkUm9vdCgyICogcmMgKiBzdGQ6OmNvcygocGhpICsgMiAqIE1fUEkp
IC8gMykgLSBhIC8gMyk7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb290KDIgKiByYyAq
IHN0ZDo6Y29zKChwaGkgKyA0ICogTV9QSSkgLyAzKSAtIGEgLyAzKTsKKyAgICAgICAgICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgICAgIGNhbGN1bGFyZVJvb3RzKHAwLnkgLSB0LnksIHAx
LnkgLSB0LnksIHAyLnkgLSB0LnksIHAzLnkgLSB0LnkpOworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBpbnRlcnNlY3Rpb25zLm51bUludGVyc2VjdGlvbnM7ICsraSkg
eworICAgICAgICAgICAgICAgICAgICBkb3VibGUgcGFyYW1ldGVyVmFsdWUgPSBpbnRlcnNlY3Rp
b25zLnBhcmFtZXRlclZhbHVlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIHggPSBj
b21wdXRlVmFsdWUocGFyYW1ldGVyVmFsdWUsIHAwLngsIHAxLngsIHAyLngsIHAzLngpOworICAg
ICAgICAgICAgICAgICAgICBkb3VibGUgZHkgPSBjb21wdXRlRGVyaXZhdGl2ZVZhbHVlKHBhcmFt
ZXRlclZhbHVlLCBwMC55LCBwMS55LCBwMi55LCBwMy55KTsKKworICAgICAgICAgICAgICAgICAg
ICBpZiAoeCA9PSB0LngpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uRWRnZSA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICBpZiAoeCA8IHQueCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHdpbmRpbmcgKz0gKGR5ID4gMCkgPyAxIDogLTE7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgIFsmXQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChvbkVkZ2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgICAgIGlmIChoYXNDdXJyZW50UG9pbnQpCisgICAgICAgICAgICAgICAgICAgIGFkZEVkZ2Uo
Y3VycmVudFBvaW50LCBzdGFydGluZ1BvaW50KTsKKworICAgICAgICAgICAgICAgIGN1cnJlbnRQ
b2ludCA9IHsgfTsKKyAgICAgICAgICAgICAgICBoYXNDdXJyZW50UG9pbnQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0pOworCisgICAgICAgIGlmIChoYXNDdXJyZW50UG9pbnQpCisgICAgICAgICAg
ICBhZGRFZGdlKGN1cnJlbnRQb2ludCwgc3RhcnRpbmdQb2ludCk7CisKKyAgICAgICAgaWYgKG9u
RWRnZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBzd2l0Y2ggKHJ1bGUpIHsK
KyAgICAgICAgY2FzZSBXaW5kUnVsZTo6RXZlbk9kZDoKKyAgICAgICAgICAgIHJldHVybiB3aW5k
aW5nICYgMTsKKyAgICAgICAgY2FzZSBXaW5kUnVsZTo6V2luZGluZzoKKyAgICAgICAgICAgIHJl
dHVybiAhIXdpbmRpbmc7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K307CisKK3N0cnVjdCBDb250YWluZWRJblN0cm9rZVByb2Nlc3NvciB7CisgICAgYm9vbCBhcHBs
eShjb25zdCBQYXRoQ29udGFpbmVyJiwgY29uc3QgUG9pbnQmKQorICAgIHsKKyAgICAgICAgLy8g
RklYTUU6IC4uLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfTsKKworfSAvLyBuYW1l
c3BhY2UgSW1wbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcAppbmRl
eCAyOTY5MmFhZmE4OC4uMzRjZDU2YjI5OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdGguY3BwCkBAIC0xNzUsMTEgKzE3NSwxMyBAQCBQYXRoIFBhdGg6OnBvbHlnb25Q
YXRoRnJvbVBvaW50cyhjb25zdCBWZWN0b3I8RmxvYXRQb2ludD4mIHBvaW50cykKICAgICByZXR1
cm4gcGF0aDsKIH0KIAorI2lmICFVU0UoQ0FJUk8pCiBGbG9hdFJlY3QgUGF0aDo6ZmFzdEJvdW5k
aW5nUmVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGJvdW5kaW5nUmVjdCgpOwogfQogI2VuZGlm
CisjZW5kaWYKIAogI2lmbmRlZiBOREVCVUcKIHZvaWQgUGF0aDo6ZHVtcCgpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKaW5kZXggZmJhODUwMTg0ODEuLjJmOGRk
OGVlNjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRo
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCkBAIC01Miwx
MCArNTIsMTAgQEAgdHlwZWRlZiBJRDJEMUdlb21ldHJ5R3JvdXAgUGxhdGZvcm1QYXRoOwogCiAj
ZWxpZiBVU0UoQ0FJUk8pCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIENhaXJvUGF0aDsK
K25hbWVzcGFjZSBJbXBsIHsKK3N0cnVjdCBHZW5lcmljUGF0aDsKIH0KLXR5cGVkZWYgV2ViQ29y
ZTo6Q2Fpcm9QYXRoIFBsYXRmb3JtUGF0aDsKK3VzaW5nIFBsYXRmb3JtUGF0aCA9IEltcGw6Okdl
bmVyaWNQYXRoOwogCiAjZWxpZiBVU0UoV0lOR0RJKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoR2VuZXJpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QYXRoR2VuZXJpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjQyZmJjNzVhMmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aEdlbmVyaWMuY3BwCkBAIC0wLDAgKzEsMzAxIEBA
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGF0aC5oIgorCisjaW5jbHVkZSAiR2Vu
ZXJpY1BhdGguaCIKKyNpbmNsdWRlIDxhcnJheT4KKworI2RlZmluZSBVTklNUExFTUVOVEVEKGZ1
bmNOYW1lKSBcCisgICAgZnByaW50ZihzdGRlcnIsICJVTklNUExFTUVOVEVEKFBhdGgpOiAlcygp
XG4iLCBmdW5jTmFtZSkKKworI2RlZmluZSBQT09STFlfSU1QTEVNRU5URUQoZnVuY05hbWUpIFwK
KyAgICBmcHJpbnRmKHN0ZGVyciwgIlBPT1JMWV9JTVBMRU1FTlRFRChQYXRoKTogJXMoKVxuIiwg
ZnVuY05hbWUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGF0aDo6UGF0aCgpID0gZGVmYXVs
dDsKKworUGF0aDo6UGF0aChjb25zdCBQYXRoJiBvdGhlcikKK3sKKyAgICBpZiAob3RoZXIubV9w
YXRoKSB7CisgICAgICAgIG1fcGF0aCA9IG5ldyBJbXBsOjpHZW5lcmljUGF0aDsKKyAgICAgICAg
Km1fcGF0aCA9ICpvdGhlci5tX3BhdGg7CisgICAgfQorfQorCitQYXRoOjpQYXRoKFBhdGgmJiBv
dGhlcikKK3sKKyAgICBtX3BhdGggPSBvdGhlci5tX3BhdGg7CisgICAgb3RoZXIubV9wYXRoID0g
bnVsbHB0cjsKK30KKworUGF0aCYgUGF0aDo6b3BlcmF0b3I9KGNvbnN0IFBhdGgmIG90aGVyKQor
eworICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAg
aWYgKG1fcGF0aCkKKyAgICAgICAgZGVsZXRlIG1fcGF0aDsKKworICAgIGlmIChvdGhlci5tX3Bh
dGgpIHsKKyAgICAgICAgbV9wYXRoID0gbmV3IEltcGw6OkdlbmVyaWNQYXRoOworICAgICAgICAq
bV9wYXRoID0gKm90aGVyLm1fcGF0aDsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9wYXRoID0gbnVs
bHB0cjsKKworICAgIHJldHVybiAqdGhpczsKK30KKworUGF0aCYgUGF0aDo6b3BlcmF0b3I9KFBh
dGgmJiBvdGhlcikKK3sKKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICBpZiAobV9wYXRoKQorICAgICAgICBkZWxldGUgbV9wYXRoOworICAgIG1fcGF0
aCA9IG90aGVyLm1fcGF0aDsKKyAgICBvdGhlci5tX3BhdGggPSBudWxscHRyOworICAgIHJldHVy
biAqdGhpczsKK30KKworUGF0aDo6flBhdGgoKQoreworICAgIGlmIChtX3BhdGgpCisgICAgICAg
IGRlbGV0ZSBtX3BhdGg7Cit9CisKK2Jvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0Cit7CisgICAgUE9PUkxZX0lNUExFTUVOVEVE
KF9fZnVuY19fKTsKKyAgICBpZiAoIW1fcGF0aCB8fCAhc3RkOjppc2Zpbml0ZShwb2ludC54KCkp
IHx8ICFzdGQ6OmlzZmluaXRlKHBvaW50LnkoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGF1dG8mIGltcGwgPSAqbV9wYXRoOworICAgIEltcGw6OkNvbnRhaW5lZEluRmlsbFByb2Nl
c3NvciBwcm9jZXNzb3I7CisgICAgcmV0dXJuIHByb2Nlc3Nvci5hcHBseShpbXBsLmNvbnRhaW5l
ciwgaW1wbC5pbW1lZGlhdGVTdGF0ZS5tYXAoeyBwb2ludC54KCksIHBvaW50LnkoKSB9KSwKKyAg
ICAgICAgcnVsZSA9PSBXaW5kUnVsZTo6RXZlbk9kZAorICAgICAgICAgICAgPyBJbXBsOjpDb250
YWluZWRJbkZpbGxQcm9jZXNzb3I6OldpbmRSdWxlOjpFdmVuT2RkCisgICAgICAgICAgICA6IElt
cGw6OkNvbnRhaW5lZEluRmlsbFByb2Nlc3Nvcjo6V2luZFJ1bGU6OldpbmRpbmcpOworfQorCiti
b29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwbGllciosIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIFBPT1JMWV9JTVBMRU1FTlRFRChfX2Z1bmNfXyk7
CisgICAgaWYgKCFtX3BhdGggfHwgIXN0ZDo6aXNmaW5pdGUocG9pbnQueCgpKSB8fCAhc3RkOjpp
c2Zpbml0ZShwb2ludC55KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBp
bXBsID0gKm1fcGF0aDsKKyAgICBJbXBsOjpDb250YWluZWRJblN0cm9rZVByb2Nlc3NvciBwcm9j
ZXNzb3I7CisgICAgcmV0dXJuIHByb2Nlc3Nvci5hcHBseShpbXBsLmNvbnRhaW5lciwgaW1wbC5p
bW1lZGlhdGVTdGF0ZS5tYXAoeyBwb2ludC54KCksIHBvaW50LnkoKSB9KSk7Cit9CisKK0Zsb2F0
UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAoreworICAgIFBPT1JMWV9JTVBMRU1FTlRF
RChfX2Z1bmNfXyk7CisgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIHJldHVybiB0aGUgdGhpZ2h0
ZXN0LWZpdCBib3VuZGluZyBib3ggcG9zc2libGUuCisgICAgcmV0dXJuIGZhc3RCb3VuZGluZ1Jl
Y3QoKTsKK30KKworRmxvYXRSZWN0IFBhdGg6OmZhc3RCb3VuZGluZ1JlY3QoKSBjb25zdAorewor
ICAgIGlmICghbV9wYXRoKQorICAgICAgICByZXR1cm4geyB9OworICAgIFBPT1JMWV9JTVBMRU1F
TlRFRChfX2Z1bmNfXyk7CisKKyAgICBhdXRvJiBpbXBsID0gKm1fcGF0aDsKKyAgICBJbXBsOjpQ
b2ludCBib3R0b21MZWZ0LCB0b3BSaWdodDsKKyAgICBJbXBsOjpGYXN0Qm91bmRpbmdSZWN0UHJv
Y2Vzc29yIHByb2Nlc3NvcjsKKyAgICBwcm9jZXNzb3IuYXBwbHkoaW1wbC5jb250YWluZXIsIGJv
dHRvbUxlZnQsIHRvcFJpZ2h0KTsKKworICAgIGF1dG8gcDAgPSBpbXBsLmltbWVkaWF0ZVN0YXRl
Lm1hcEludmVyc2UoYm90dG9tTGVmdCk7CisgICAgYXV0byBwMSA9IGltcGwuaW1tZWRpYXRlU3Rh
dGUubWFwSW52ZXJzZSh0b3BSaWdodCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdDo6bmFycm93UHJl
Y2lzaW9uKHN0ZDo6bWluKHAwLngsIHAxLngpLCBzdGQ6Om1pbihwMC55LCBwMS55KSwKKyAgICAg
ICAgc3RkOjphYnMocDEueCAtIHAwLngpLCBzdGQ6OmFicyhwMS55IC0gcDAueSkpOworfQorCitG
bG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciopIGNv
bnN0Cit7CisgICAgVU5JTVBMRU1FTlRFRChfX2Z1bmNfXyk7CisgICAgcmV0dXJuIHsgfTsKK30K
Kwordm9pZCBQYXRoOjpjbGVhcigpCit7CisgICAgaWYgKG1fcGF0aCkKKyAgICAgICAgbV9wYXRo
LT5jbGVhcigpOworfQorCitib29sIFBhdGg6OmlzRW1wdHkoKSBjb25zdAoreworICAgIHJldHVy
biAhbV9wYXRoIHx8IG1fcGF0aC0+Y29udGFpbmVyLmNvbW1hbmRzLmlzRW1wdHkoKTsKK30KKwor
Ym9vbCBQYXRoOjpoYXNDdXJyZW50UG9pbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhdGgg
JiYgIW1fcGF0aC0+Y29udGFpbmVyLmNvbW1hbmRzLmlzRW1wdHkoKTsKK30KKworRmxvYXRQb2lu
dCBQYXRoOjpjdXJyZW50UG9pbnQoKSBjb25zdAoreworICAgIGlmICghbV9wYXRoKQorICAgICAg
ICByZXR1cm4geyB9OworCisgICAgYXV0byYgaW1wbCA9ICptX3BhdGg7CisgICAgaWYgKGltcGwu
Y29udGFpbmVyLmNvbW1hbmRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IGF1dG8gcG9pbnQgPSBpbXBsLmltbWVkaWF0ZVN0YXRlLm1hcEludmVyc2UoaW1wbC5pbW1lZGlh
dGVTdGF0ZS5jdXJyZW50UG9pbnQpOworICAgIHJldHVybiBGbG9hdFBvaW50OjpuYXJyb3dQcmVj
aXNpb24ocG9pbnQueCwgcG9pbnQueSk7Cit9CisKK3ZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZs
b2F0UG9pbnQmIHApCit7CisgICAgYXV0byYgaW1wbCA9ICplbnN1cmVQbGF0Zm9ybVBhdGgoKTsK
KyAgICBpbXBsLmFkZChJbXBsOjpDb21tYW5kOjpNb3ZlVG8sIEltcGw6OlZhbHVlczwyPnsgcC54
KCksIHAueSgpIH0pOworfQorCit2b2lkIFBhdGg6OmFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50
JiBwKQoreworICAgIGF1dG8mIGltcGwgPSAqZW5zdXJlUGxhdGZvcm1QYXRoKCk7CisgICAgaW1w
bC5hZGQoSW1wbDo6Q29tbWFuZDo6TGluZVRvLCBJbXBsOjpWYWx1ZXM8Mj4geyBwLngoKSwgcC55
KCkgfSk7Cit9CisKK3ZvaWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYg
cDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyKQoreworICAgIGF1dG8mIGltcGwgPSAqZW5zdXJlUGxh
dGZvcm1QYXRoKCk7CisgICAgaW1wbC5hZGQoSW1wbDo6Q29tbWFuZDo6UXVhZHJhdGljQ3VydmVU
bywKKyAgICAgICAgSW1wbDo6VmFsdWVzPDQ+IHsgcDEueCgpLCBwMS55KCksIHAyLngoKSwgcDIu
eSgpIH0pOworfQorCit2b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2lu
dCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBjb25zdCBGbG9hdFBvaW50JiBwMykKK3sKKyAg
ICBhdXRvJiBpbXBsID0gKmVuc3VyZVBsYXRmb3JtUGF0aCgpOworICAgIGltcGwuYWRkKEltcGw6
OkNvbW1hbmQ6OkN1YmljQ3VydmVUbywKKyAgICAgICAgSW1wbDo6VmFsdWVzPDY+IHsgcDEueCgp
LCBwMS55KCksIHAyLngoKSwgcDIueSgpLCBwMy54KCksIHAzLnkoKSB9KTsKK30KKwordm9pZCBQ
YXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIs
IGZsb2F0IHJhZGl1cykKK3sKKyAgICBQT09STFlfSU1QTEVNRU5URUQoX19mdW5jX18pOworCisg
ICAgYXV0byYgaW1wbCA9ICplbnN1cmVQbGF0Zm9ybVBhdGgoKTsKKyAgICBpbXBsLmFkZChJbXBs
OjpDb21tYW5kOjpDaXJjdWxhclRhbmdlbnRBcmMsCisgICAgICAgIEltcGw6OlZhbHVlczw1PiB7
IHAxLngoKSwgcDEueSgpLCBwMi54KCksIHAyLnkoKSwgcmFkaXVzIH0pOworfQorCit2b2lkIFBh
dGg6OmNsb3NlU3VicGF0aCgpCit7CisgICAgYXV0byYgaW1wbCA9ICplbnN1cmVQbGF0Zm9ybVBh
dGgoKTsKKyAgICBpbXBsLmFkZChJbXBsOjpDb21tYW5kOjpDbG9zZSk7Cit9CisKK3ZvaWQgUGF0
aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0IHJhZGl1cywgZmxvYXQgc3RhcnRB
bmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJvb2wgYW50aWNsb2Nrd2lzZSkKK3sKKyAgICBQT09STFlf
SU1QTEVNRU5URUQoX19mdW5jX18pOworICAgIGlmICghc3RkOjppc2Zpbml0ZShyYWRpdXMpIHx8
ICFzdGQ6OmlzZmluaXRlKHN0YXJ0QW5nbGUpIHx8ICFzdGQ6OmlzZmluaXRlKGVuZEFuZ2xlKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgaW1wbCA9ICplbnN1cmVQbGF0Zm9ybVBhdGgo
KTsKKyAgICBpbXBsLmFkZChhbnRpY2xvY2t3aXNlID8KKyAgICAgICAgSW1wbDo6Q29tbWFuZDo6
Q2lyY3VsYXJDb3VudGVyQ2xvY2t3aXNlQXJjIDogSW1wbDo6Q29tbWFuZDo6Q2lyY3VsYXJDbG9j
a3dpc2VBcmMsCisgICAgICAgIEltcGw6OlZhbHVlczw1PiB7IHAueCgpLCBwLnkoKSwgcmFkaXVz
LCBzdGFydEFuZ2xlLCBlbmRBbmdsZSB9KTsKK30KKwordm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBhdXRvJiBpbXBsID0gKmVuc3VyZVBsYXRmb3JtUGF0
aCgpOworICAgIGltcGwuYWRkKEltcGw6OkNvbW1hbmQ6Ok1vdmVUbywgSW1wbDo6VmFsdWVzPDI+
IHsgcmVjdC54KCksIHJlY3QueSgpIH0pOworICAgIGltcGwuYWRkKEltcGw6OkNvbW1hbmQ6OlJl
Y3QsIEltcGw6OlZhbHVlczw0PiB7IHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC5tYXhYKCksIHJl
Y3QubWF4WSgpIH0pOworICAgIGltcGwuYWRkKEltcGw6OkNvbW1hbmQ6OkNsb3NlKTsKK30KKwor
dm9pZCBQYXRoOjphZGRFbGxpcHNlKEZsb2F0UG9pbnQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZs
b2F0LCBmbG9hdCwgYm9vbCkKK3sKKyAgICBVTklNUExFTUVOVEVEKF9fZnVuY19fKTsKK30KKwor
dm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgVU5JTVBMRU1F
TlRFRChfX2Z1bmNfXyk7Cit9CisKK3ZvaWQgUGF0aDo6YWRkUGF0aChjb25zdCBQYXRoJiwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJikKK3sKKyAgICBVTklNUExFTUVOVEVEKF9fZnVuY19fKTsKK30K
Kwordm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIHRy
YW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKSk7Cit9CisKK3ZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtKQoreworICAgIGF1dG8gaW52ZXJzZU9wdCA9IHRyYW5zZm9ybS5pbnZlcnNl
KCk7CisgICAgaWYgKCFpbnZlcnNlT3B0KQorICAgICAgICByZXR1cm47CisgICAgYXV0byYgaW52
ZXJzZSA9ICppbnZlcnNlT3B0OworCisgICAgYXV0byYgaW1wbCA9ICplbnN1cmVQbGF0Zm9ybVBh
dGgoKTsKKyAgICBpbXBsLmFkZChJbXBsOjpDb21tYW5kOjpUcmFuc2Zvcm0sCisgICAgICAgIElt
cGw6OlZhbHVlczwxMj4geworICAgICAgICAgICAgdHJhbnNmb3JtLmEoKSwgdHJhbnNmb3JtLmIo
KSwgdHJhbnNmb3JtLmMoKSwKKyAgICAgICAgICAgIHRyYW5zZm9ybS5kKCksIHRyYW5zZm9ybS5l
KCksIHRyYW5zZm9ybS5mKCksCisgICAgICAgICAgICBpbnZlcnNlLmEoKSwgaW52ZXJzZS5iKCks
IGludmVyc2UuYygpLAorICAgICAgICAgICAgaW52ZXJzZS5kKCksIGludmVyc2UuZSgpLCBpbnZl
cnNlLmYoKQorICAgICAgICB9KTsKK30KKworUGxhdGZvcm1QYXRoUHRyIFBhdGg6OmVuc3VyZVBs
YXRmb3JtUGF0aCgpCit7CisgICAgaWYgKCFtX3BhdGgpCisgICAgICAgIG1fcGF0aCA9IG5ldyBJ
bXBsOjpHZW5lcmljUGF0aDsKKyAgICByZXR1cm4gbV9wYXRoOworfQorCit2b2lkIFBhdGg6OmFw
cGx5KGNvbnN0IFBhdGhBcHBsaWVyRnVuY3Rpb24mIGZ1bmN0aW9uKSBjb25zdAoreworICAgIGlm
ICghbV9wYXRoKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGQ6OmFycmF5PEZsb2F0UG9pbnQs
IDM+IHBvaW50czsKKyAgICBQYXRoRWxlbWVudCBwYXRoRWxlbWVudCB7IFBhdGhFbGVtZW50TW92
ZVRvUG9pbnQsIHBvaW50cy5kYXRhKCkgfTsKKworICAgIHVzaW5nIFBvaW50ID0gSW1wbDo6UG9p
bnQ7CisgICAgYXV0byYgaW1wbCA9ICptX3BhdGg7CisgICAgSW1wbDo6QmFzaWNQcm9jZXNzb3Ig
cHJvY2Vzc29yOworICAgIHByb2Nlc3Nvci5hcHBseShpbXBsLmNvbnRhaW5lciwKKyAgICAgICAg
WyZdKGNvbnN0IFBvaW50JiBwKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIG1wID0gaW1w
bC5pbW1lZGlhdGVTdGF0ZS5tYXBJbnZlcnNlKHApOworCisgICAgICAgICAgICBwYXRoRWxlbWVu
dC50eXBlID0gUGF0aEVsZW1lbnRNb3ZlVG9Qb2ludDsKKyAgICAgICAgICAgIHBvaW50c1swXSA9
IEZsb2F0UG9pbnQ6Om5hcnJvd1ByZWNpc2lvbihtcC54LCBtcC55KTsKKyAgICAgICAgICAgIGZ1
bmN0aW9uKHBhdGhFbGVtZW50KTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKGNvbnN0IFBvaW50
JiBwKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIG1wID0gaW1wbC5pbW1lZGlhdGVTdGF0
ZS5tYXBJbnZlcnNlKHApOworCisgICAgICAgICAgICBwYXRoRWxlbWVudC50eXBlID0gUGF0aEVs
ZW1lbnRBZGRMaW5lVG9Qb2ludDsKKyAgICAgICAgICAgIHBvaW50c1swXSA9IEZsb2F0UG9pbnQ6
Om5hcnJvd1ByZWNpc2lvbihtcC54LCBtcC55KTsKKyAgICAgICAgICAgIGZ1bmN0aW9uKHBhdGhF
bGVtZW50KTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKGNvbnN0IFBvaW50JiBwMSwgY29uc3Qg
UG9pbnQmIHAyLCBjb25zdCBQb2ludCYgcDMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8g
bXAxID0gaW1wbC5pbW1lZGlhdGVTdGF0ZS5tYXBJbnZlcnNlKHAxKTsKKyAgICAgICAgICAgIGF1
dG8gbXAyID0gaW1wbC5pbW1lZGlhdGVTdGF0ZS5tYXBJbnZlcnNlKHAyKTsKKyAgICAgICAgICAg
IGF1dG8gbXAzID0gaW1wbC5pbW1lZGlhdGVTdGF0ZS5tYXBJbnZlcnNlKHAzKTsKKworICAgICAg
ICAgICAgcGF0aEVsZW1lbnQudHlwZSA9IFBhdGhFbGVtZW50QWRkQ3VydmVUb1BvaW50OworICAg
ICAgICAgICAgcG9pbnRzWzBdID0gRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9uKG1wMS54LCBt
cDEueSk7CisgICAgICAgICAgICBwb2ludHNbMV0gPSBGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNp
b24obXAyLngsIG1wMi55KTsKKyAgICAgICAgICAgIHBvaW50c1syXSA9IEZsb2F0UG9pbnQ6Om5h
cnJvd1ByZWNpc2lvbihtcDMueCwgbXAzLnkpOworICAgICAgICAgICAgZnVuY3Rpb24ocGF0aEVs
ZW1lbnQpOworICAgICAgICB9LAorICAgICAgICBbJl0oKQorICAgICAgICB7CisgICAgICAgICAg
ICBwYXRoRWxlbWVudC50eXBlID0gUGF0aEVsZW1lbnRDbG9zZVN1YnBhdGg7CisgICAgICAgICAg
ICBmdW5jdGlvbihwYXRoRWxlbWVudCk7CisgICAgICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9DYWlyb09wZXJhdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAppbmRleCBiN2FlNGU4Y2YxMC4uYTBmNTVmN2Y3
YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Nh
aXJvT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcApAQCAtNzU0LDcgKzc1NCw3IEBAIHZvaWQgZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwg
Y29uc3QgRmxvYXRSCiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQuY3IoKTsKIAog
ICAgIGNhaXJvX3NhdmUoY3IpOwotICAgIHNldFBhdGhPbkNhaXJvQ29udGV4dChwbGF0Zm9ybUNv
bnRleHQuY3IoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpKTsKKyAgICBzZXRQYXRo
T25DYWlyb0NvbnRleHQocGxhdGZvcm1Db250ZXh0LmNyKCksICpwYXRoLnBsYXRmb3JtUGF0aCgp
KTsKICAgICBmaWxsQ3VycmVudENhaXJvUGF0aChwbGF0Zm9ybUNvbnRleHQsIGZpbGxTb3VyY2Up
OwogICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogfQpAQCAtNzYzLDcgKzc2Myw3IEBAIHZvaWQgZmls
bFBhdGgoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgUGF0aCYg
cGF0aCwgY29uc3QgRmlsCiB7CiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQuY3Io
KTsKIAotICAgIHNldFBhdGhPbkNhaXJvQ29udGV4dChjciwgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+
Y29udGV4dCgpKTsKKyAgICBzZXRQYXRoT25DYWlyb0NvbnRleHQoY3IsICpwYXRoLnBsYXRmb3Jt
UGF0aCgpKTsKICAgICBkcmF3UGF0aFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIGZpbGxTb3VyY2Us
IHsgfSwgc2hhZG93U3RhdGUsIEZpbGwpOwogICAgIGZpbGxDdXJyZW50Q2Fpcm9QYXRoKHBsYXRm
b3JtQ29udGV4dCwgZmlsbFNvdXJjZSk7CiB9CkBAIC03ODYsNyArNzg2LDcgQEAgdm9pZCBzdHJv
a2VQYXRoKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFBhdGgm
IHBhdGgsIGNvbnN0IFMKIHsKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dC5jcigp
OwogCi0gICAgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNyLCBwYXRoLnBsYXRmb3JtUGF0aCgpLT5j
b250ZXh0KCkpOworICAgIHNldFBhdGhPbkNhaXJvQ29udGV4dChjciwgKnBhdGgucGxhdGZvcm1Q
YXRoKCkpOwogICAgIGRyYXdQYXRoU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgeyB9LCBzdHJva2VT
b3VyY2UsIHNoYWRvd1N0YXRlLCBTdHJva2UpOwogICAgIHByZXBhcmVGb3JTdHJva2luZyhjciwg
c3Ryb2tlU291cmNlLCBQcmVzZXJ2ZUFscGhhKTsKICAgICBjYWlyb19zdHJva2UoY3IpOwpAQCAt
MTI1OCw3ICsxMjU4LDcgQEAgdm9pZCBjbGlwUGF0aChQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxh
dGZvcm1Db250ZXh0LCBjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZQogICAgIGNhaXJvX3QqIGNy
ID0gcGxhdGZvcm1Db250ZXh0LmNyKCk7CiAKICAgICBpZiAoIXBhdGguaXNOdWxsKCkpCi0gICAg
ICAgIHNldFBhdGhPbkNhaXJvQ29udGV4dChjciwgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+Y29udGV4
dCgpKTsKKyAgICAgICAgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNyLCAqcGF0aC5wbGF0Zm9ybVBh
dGgoKSk7CiAKICAgICBjYWlyb19maWxsX3J1bGVfdCBzYXZlZEZpbGxSdWxlID0gY2Fpcm9fZ2V0
X2ZpbGxfcnVsZShjcik7CiAgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgY2xpcFJ1bGUgPT0g
V2luZFJ1bGU6OkV2ZW5PZGQgPyBDQUlST19GSUxMX1JVTEVfRVZFTl9PREQgOiBDQUlST19GSUxM
X1JVTEVfV0lORElORyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKaW5kZXggMDRkNjgyZjk0N2YuLmY0YWVl
MzE4ZGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9DYWlyb1V0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCkBAIC01NCw2ICs1NCw4IEBACiAjaW5jbHVkZSA8
Y2Fpcm8td2luMzIuaD4KICNlbmRpZgogCisjaW5jbHVkZSAiR2VuZXJpY1BhdGguaCIKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgVVNFKEZSRUVUWVBFKSAmJiAhUExBVEZPUk0oR1RLKQpA
QCAtOTIsMTQgKzk0LDM0IEBAIHZvaWQgc2V0U291cmNlUkdCQUZyb21Db2xvcihjYWlyb190KiBj
b250ZXh0LCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgfQogfQogCi12b2lkIGFwcGVuZFBhdGhU
b0NhaXJvQ29udGV4dChjYWlyb190KiB0bywgY2Fpcm9fdCogZnJvbSkKK3ZvaWQgYXBwZW5kUGF0
aFRvQ2Fpcm9Db250ZXh0KGNhaXJvX3QqIHRvLCBJbXBsOjpHZW5lcmljUGF0aCYgaW1wbCkKIHsK
LSAgICBhdXRvIGNhaXJvUGF0aCA9IGNhaXJvX2NvcHlfcGF0aChmcm9tKTsKLSAgICBjYWlyb19h
cHBlbmRfcGF0aCh0bywgY2Fpcm9QYXRoKTsKLSAgICBjYWlyb19wYXRoX2Rlc3Ryb3koY2Fpcm9Q
YXRoKTsKKyAgICBJbXBsOjpCYXNpY1Byb2Nlc3NvciBwcm9jZXNzb3I7CisgICAgcHJvY2Vzc29y
LmFwcGx5KGltcGwuY29udGFpbmVyLAorICAgICAgICBbJl0oY29uc3QgSW1wbDo6UG9pbnQmIHAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbXAgPSBpbXBsLmltbWVkaWF0ZVN0YXRlLm1h
cEludmVyc2UocCk7CisgICAgICAgICAgICBjYWlyb19tb3ZlX3RvKHRvLCBtcC54LCBtcC55KTsK
KyAgICAgICAgfSwKKyAgICAgICAgWyZdKGNvbnN0IEltcGw6OlBvaW50JiBwKQorICAgICAgICB7
CisgICAgICAgICAgICBhdXRvIG1wID0gaW1wbC5pbW1lZGlhdGVTdGF0ZS5tYXBJbnZlcnNlKHAp
OworICAgICAgICAgICAgY2Fpcm9fbGluZV90byh0bywgbXAueCwgbXAueSk7CisgICAgICAgIH0s
CisgICAgICAgIFsmXShjb25zdCBJbXBsOjpQb2ludCYgcDEsIGNvbnN0IEltcGw6OlBvaW50JiBw
MiwgY29uc3QgSW1wbDo6UG9pbnQmIHAzKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIG1w
MSA9IGltcGwuaW1tZWRpYXRlU3RhdGUubWFwSW52ZXJzZShwMSk7CisgICAgICAgICAgICBhdXRv
IG1wMiA9IGltcGwuaW1tZWRpYXRlU3RhdGUubWFwSW52ZXJzZShwMik7CisgICAgICAgICAgICBh
dXRvIG1wMyA9IGltcGwuaW1tZWRpYXRlU3RhdGUubWFwSW52ZXJzZShwMyk7CisgICAgICAgICAg
ICBjYWlyb19jdXJ2ZV90byh0bywgbXAxLngsIG1wMS55LCBtcDIueCwgbXAyLnksIG1wMy54LCBt
cDMueSk7CisgICAgICAgIH0sCisgICAgICAgIFsmXQorICAgICAgICB7CisgICAgICAgICAgICBj
YWlyb19jbG9zZV9wYXRoKHRvKTsKKyAgICAgICAgfSk7CiB9CiAKLXZvaWQgc2V0UGF0aE9uQ2Fp
cm9Db250ZXh0KGNhaXJvX3QqIHRvLCBjYWlyb190KiBmcm9tKQordm9pZCBzZXRQYXRoT25DYWly
b0NvbnRleHQoY2Fpcm9fdCogdG8sIEltcGw6OkdlbmVyaWNQYXRoJiBmcm9tKQogewogICAgIGNh
aXJvX25ld19wYXRoKHRvKTsKICAgICBhcHBlbmRQYXRoVG9DYWlyb0NvbnRleHQodG8sIGZyb20p
OwpAQCAtMTA3LDkgKzEyOSw4IEBAIHZvaWQgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNhaXJvX3Qq
IHRvLCBjYWlyb190KiBmcm9tKQogCiB2b2lkIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRl
eHQoY2Fpcm9fdCogY29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGF0aC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBhcHBlbmRQYXRoVG9DYWlyb0NvbnRleHQo
Y29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpKTsKKyAgICBpZiAoIXBhdGgu
aXNFbXB0eSgpKQorICAgICAgICBhcHBlbmRQYXRoVG9DYWlyb0NvbnRleHQoY29udGV4dCwgKnBh
dGgucGxhdGZvcm1QYXRoKCkpOwogfQogCiB2b2lkIGFwcGVuZFJlZ2lvblRvQ2Fpcm9Db250ZXh0
KGNhaXJvX3QqIHRvLCBjb25zdCBjYWlyb19yZWdpb25fdCogcmVnaW9uKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgK
aW5kZXggMzgxZDNjOGVlYmMuLmJlZTg1M2I0NmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKQEAgLTM5LDYg
KzM5LDEwIEBACiAjaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KICNlbmRpZgogCituYW1lc3BhY2UgSW1w
bCB7CitzdHJ1Y3QgR2VuZXJpY1BhdGg7Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IEFmZmluZVRyYW5zZm9ybTsKIGNsYXNzIENvbG9yOwpAQCAtNzYsOCArODAsMTEgQEAgY29uc3Qg
Y2Fpcm9fZm9udF9vcHRpb25zX3QqIGdldERlZmF1bHRDYWlyb0ZvbnRPcHRpb25zKCk7CiAKIHZv
aWQgY29weUNvbnRleHRQcm9wZXJ0aWVzKGNhaXJvX3QqIHNyY0NyLCBjYWlyb190KiBkc3RDcik7
CiB2b2lkIHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY2Fpcm9fdCosIGNvbnN0IENvbG9yJik7Cisj
aWYgMAogdm9pZCBhcHBlbmRQYXRoVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogdG8sIGNhaXJvX3Qq
IGZyb20pOwogdm9pZCBzZXRQYXRoT25DYWlyb0NvbnRleHQoY2Fpcm9fdCogdG8sIGNhaXJvX3Qq
IGZyb20pOworI2VuZGlmCit2b2lkIHNldFBhdGhPbkNhaXJvQ29udGV4dChjYWlyb190KiB0bywg
SW1wbDo6R2VuZXJpY1BhdGgmIGZyb20pOwogdm9pZCBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9D
b250ZXh0KGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgpOwogdm9pZCBhcHBlbmRS
ZWdpb25Ub0NhaXJvQ29udGV4dChjYWlyb190KiwgY29uc3QgY2Fpcm9fcmVnaW9uX3QqKTsKIGNh
aXJvX29wZXJhdG9yX3QgdG9DYWlyb09wZXJhdG9yKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1v
ZGUgPSBCbGVuZE1vZGVOb3JtYWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKaW5kZXggMDZkOWQ3NDk0YTQuLmFmM2Q5Nzc3
Yjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyby5jcHAKQEAgLTE3OCw2ICsxNzgsOCBAQCBQYXRoIENhaXJvR2x5cGhUb1BhdGhU
cmFuc2xhdG9yOjpwYXRoKCkKICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5lbnN1cmVQbGF0Zm9y
bVBhdGgoKTsKIAorICAgIC8vIEZJWE1FOgorI2lmIDAKICAgICBjYWlyb19nbHlwaF90IGNhaXJv
R2x5cGggPSB7IG1fZ2x5cGhCdWZmZXIuZ2x5cGhBdChtX2luZGV4KSwgMCwgMCB9OwogICAgIGNh
aXJvX3NldF9zY2FsZWRfZm9udChwYXRoLnBsYXRmb3JtUGF0aCgpLT5jb250ZXh0KCksIG1fZm9u
dERhdGEtPnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKSk7CiAgICAgY2Fpcm9fZ2x5cGhfcGF0
aChwYXRoLnBsYXRmb3JtUGF0aCgpLT5jb250ZXh0KCksICZjYWlyb0dseXBoLCAxKTsKQEAgLTE4
Nyw2ICsxODksNyBAQCBQYXRoIENhaXJvR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpwYXRoKCkKICAg
ICAgICAgY2Fpcm9fdHJhbnNsYXRlKHBhdGgucGxhdGZvcm1QYXRoKCktPmNvbnRleHQoKSwgc3lu
dGhldGljQm9sZE9mZnNldCwgMCk7CiAgICAgICAgIGNhaXJvX2dseXBoX3BhdGgocGF0aC5wbGF0
Zm9ybVBhdGgoKS0+Y29udGV4dCgpLCAmY2Fpcm9HbHlwaCwgMSk7CiAgICAgfQorI2VuZGlmCiAK
ICAgICBwYXRoLnRyYW5zZm9ybShtX3RyYW5zbGF0aW9uKTsKICAgICByZXR1cm4gcGF0aDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345081</attachid>
            <date>2018-07-16 00:00:30 -0700</date>
            <delta_ts>2018-07-16 00:00:30 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>path.patch</filename>
            <type>text/plain</type>
            <size>99912</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDE1OTY5ZjkzNWVk
Li4zNmNhZTA3N2Q1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNl
c0NhaXJvLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0
CkBAIC0zMyw4ICszMywxMSBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW50UmVjdENhaXJvLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1BhdGhDYWlyby5jcHAKKy8vIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGxhdGZvcm1QYXRoQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQ
dHJDYWlyby5jcHAKKworcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aEdlbmVyaWMuY3BwIEBuby11bmlm
eQorcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJpY1N0cm9raW5nU3R5bGVDb250ZXh0LmNwcCBAbm8t
dW5pZnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVy
aWNQYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmljUGF0aC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45YmEwOGQ2OWVjMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyaWNQ
YXRoLmgKQEAgLTAsMCArMSwxNzYxIEBACisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFmZmlu
ZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgPGFycmF5PgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSW1wbCB7CisKK2VudW0gY2xhc3MgQ29t
bWFuZCA6IHVpbnQ4X3QgeworICAgIE1vdmVUbywKKyAgICBDbG9zZSwKKyAgICBMaW5lVG8sCisg
ICAgUmVjdCwKKyAgICBRdWFkcmF0aWNDdXJ2ZVRvLAorICAgIEN1YmljQ3VydmVUbywKKyAgICBD
aXJjdWxhckNsb2Nrd2lzZUFyYywKKyAgICBDaXJjdWxhckNvdW50ZXJDbG9ja3dpc2VBcmMsCisg
ICAgQ2lyY3VsYXJUYW5nZW50QXJjLAorICAgIEFyY1RvLAorICAgIFRyYW5zZm9ybSwKK307CisK
K3N0cnVjdCBQb2ludCB7CisgICAgZG91YmxlIHggeyAwIH07CisgICAgZG91YmxlIHkgeyAwIH07
Cit9OworCit0ZW1wbGF0ZTxzaXplX3QgTj4KK3VzaW5nIFZhbHVlcyA9IHN0ZDo6YXJyYXk8ZG91
YmxlLCBOPjsKKwordGVtcGxhdGU8dHlwZW5hbWUgUD4KK3N0YXRpYyBkb3VibGUgYXJlYU9mVHJp
YW5nZShjb25zdCBQJiBwMSwgY29uc3QgUCYgcDIsIGNvbnN0IFAmIHAzKQoreworICAgIHJldHVy
biBwMS54ICogKHAyLnkgLSBwMy55KSArIHAyLnggKiAocDMueSAtIHAxLnkpICsgcDMueCAqIChw
MS55IC0gcDIueSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEY+CitzdGF0aWMgaW5saW5lIHZv
aWQgZ2VuZXJhdGVBcmNDdXJ2ZXMoYm9vbCBhbmdsZUluY3JlYXNlcywgZG91YmxlIHN0YXJ0QW5n
bGUsIGRvdWJsZSBlbmRBbmdsZSwgY29uc3QgRiYgY3VydmUpCit7CisgICAgZG91YmxlIGFuZ2xl
RGVsdGEgPSBzdGQ6OmFicyhlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpOworICAgIGZvciAoOyBhbmds
ZURlbHRhID4gMC4wMDE7KSB7CisgICAgICAgIGRvdWJsZSBhcmNEZWx0YSA9IChhbmdsZUluY3Jl
YXNlcyA/IDEgOiAtMSkgKiBzdGQ6Om1pbihhbmdsZURlbHRhLCBNX1BJIC8gMik7CisKKyAgICAg
ICAgZG91YmxlIGFscGhhID0gYXJjRGVsdGEgLyAyOworICAgICAgICBkb3VibGUgY29zQWxwaGEg
PSBzdGQ6OmNvcyhhbHBoYSk7CisgICAgICAgIGRvdWJsZSBzaW5BbHBoYSA9IHN0ZDo6c2luKGFs
cGhhKTsKKyAgICAgICAgZG91YmxlIGNvdEFscGhhID0gMS4wIC8gc3RkOjp0YW4oYWxwaGEpOwor
ICAgICAgICBkb3VibGUgY29zUGhpID0gc3RkOjpjb3Moc3RhcnRBbmdsZSArIGFscGhhKTsKKyAg
ICAgICAgZG91YmxlIHNpblBoaSA9IHN0ZDo6c2luKHN0YXJ0QW5nbGUgKyBhbHBoYSk7CisKKyAg
ICAgICAgZG91YmxlIGxhbWJkYSA9ICg0LjAgLSBjb3NBbHBoYSkgLyAzLjA7CisgICAgICAgIGRv
dWJsZSBtdSA9IHNpbkFscGhhICsgKGNvc0FscGhhIC0gbGFtYmRhKSAqIGNvdEFscGhhOworCisg
ICAgICAgIFBvaW50IHAxIHsgbGFtYmRhICogY29zUGhpICsgbXUgKiBzaW5QaGksIGxhbWJkYSAq
IHNpblBoaSAtIG11ICogY29zUGhpIH07CisgICAgICAgIFBvaW50IHAyIHsgbGFtYmRhICogY29z
UGhpIC0gbXUgKiBzaW5QaGksIGxhbWJkYSAqIHNpblBoaSArIG11ICogY29zUGhpIH07CisgICAg
ICAgIFBvaW50IHAzIHsgc3RkOjpjb3Moc3RhcnRBbmdsZSArIGFyY0RlbHRhKSwgc3RkOjpzaW4o
c3RhcnRBbmdsZSArIGFyY0RlbHRhKSB9OworICAgICAgICBjdXJ2ZShwMSwgcDIsIHAzKTsKKwor
ICAgICAgICBzdGFydEFuZ2xlICs9IGFyY0RlbHRhOworICAgICAgICBhbmdsZURlbHRhID0gc3Rk
OjphYnMoZW5kQW5nbGUgLSBzdGFydEFuZ2xlKTsKKyAgICB9Cit9CisKK3N0cnVjdCBQYXJ0aWFs
RWxsaXB0aWNhbEFyY1BhcmFtZXRlcnMgeworICAgIFBvaW50IHAxOyAvLyBzdGFydCBvZiBhIHBh
cnRpYWwgZWxsaXB0aWNhbCBhcmMgc2VnbWVudAorICAgIFBvaW50IHAyOyAvLyBlbmQgb2YgYSBw
YXJ0aWFsIGVsbGlwdGljYWwgYXJjIHNlZ21lbnQKKworICAgIGRvdWJsZSByaCB7IDAgfTsKKyAg
ICBkb3VibGUgcnYgeyAwIH07CisgICAgZG91YmxlIHBoaSB7IDAgfTsKKyAgICBib29sIGZBIHsg
ZmFsc2UgfTsKKyAgICBib29sIGZTIHsgZmFsc2UgfTsKKworICAgIHN0cnVjdCBDaXJjdWxhckFy
YyB7CisgICAgICAgIFBvaW50IGM7CisgICAgICAgIGRvdWJsZSByYWRpdXM7CisgICAgICAgIGRv
dWJsZSBzdGFydEFuZ2xlOworICAgICAgICBkb3VibGUgZW5kQW5nbGU7CisgICAgfTsKKworICAg
IHN0cnVjdCBDaXJjdWxhclRhbmdlbnRBcmMgeworICAgICAgICBQb2ludCB0cDA7CisgICAgICAg
IFBvaW50IHRwMTsKKyAgICAgICAgUG9pbnQgdHAyOworICAgICAgICBkb3VibGUgcmFkaXVzOwor
ICAgIH07CisKKyAgICBzdHJ1Y3QgQXJjIHsKKyAgICAgICAgUG9pbnQgcDE7CisgICAgICAgIGRv
dWJsZSByYWRpdXNYOworICAgICAgICBkb3VibGUgcmFkaXVzWTsKKyAgICAgICAgZG91YmxlIGFu
Z2xlOworICAgICAgICBib29sIGxhcmdlQXJjOworICAgICAgICBib29sIHN3ZWVwOworICAgICAg
ICBQb2ludCBwMjsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29tbWFuZFR5cGU+
CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZShQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnMm
LCBjb25zdCBDb21tYW5kVHlwZSYpOworfTsKKwordGVtcGxhdGU8PgoraW5saW5lIHZvaWQgUGFy
dGlhbEVsbGlwdGljYWxBcmNQYXJhbWV0ZXJzOjpjb21wdXRlPFBhcnRpYWxFbGxpcHRpY2FsQXJj
UGFyYW1ldGVyczo6Q2lyY3VsYXJBcmM+KAorICAgIFBhcnRpYWxFbGxpcHRpY2FsQXJjUGFyYW1l
dGVycyYgcGFyYW1ldGVycywgY29uc3QgQ2lyY3VsYXJBcmMmIGFyYykKK3sKKyAgICAgICAgcGFy
YW1ldGVycy5wMSA9IHsKKyAgICAgICAgICAgIGFyYy5jLnggKyBhcmMucmFkaXVzICogc3RkOjpj
b3MoYXJjLnN0YXJ0QW5nbGUpLAorICAgICAgICAgICAgYXJjLmMueSArIGFyYy5yYWRpdXMgKiBz
dGQ6OnNpbihhcmMuc3RhcnRBbmdsZSkgfTsKKyAgICAgICAgcGFyYW1ldGVycy5wMiA9IHsKKyAg
ICAgICAgICAgIGFyYy5jLnggKyBhcmMucmFkaXVzICogc3RkOjpjb3MoYXJjLmVuZEFuZ2xlKSwK
KyAgICAgICAgICAgIGFyYy5jLnkgKyBhcmMucmFkaXVzICogc3RkOjpzaW4oYXJjLmVuZEFuZ2xl
KSB9OworICAgICAgICBwYXJhbWV0ZXJzLnJoID0gc3RkOjphYnMoYXJjLnJhZGl1cyk7CisgICAg
ICAgIHBhcmFtZXRlcnMucnYgPSBzdGQ6OmFicyhhcmMucmFkaXVzKTsKKyAgICAgICAgcGFyYW1l
dGVycy5waGkgPSAwOworCisgICAgICAgIC8vIEZJWE1FOiBjb21wdXRlIHZhbHVlcyBmb3IgZkEg
YW5kIGZTLCB1c2UgdGhlbS4KK30KKwordGVtcGxhdGU8PgoraW5saW5lIHZvaWQgUGFydGlhbEVs
bGlwdGljYWxBcmNQYXJhbWV0ZXJzOjpjb21wdXRlPFBhcnRpYWxFbGxpcHRpY2FsQXJjUGFyYW1l
dGVyczo6Q2lyY3VsYXJUYW5nZW50QXJjPigKKyAgICBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFt
ZXRlcnMmIHBhcmFtZXRlcnMsIGNvbnN0IENpcmN1bGFyVGFuZ2VudEFyYyYgYXJjKQoreworICAg
ICAgICBhdXRvJiB0cDAgPSBhcmMudHAwOworICAgICAgICBhdXRvJiB0cDEgPSBhcmMudHAxOwor
ICAgICAgICBhdXRvJiB0cDIgPSBhcmMudHAyOworCisgICAgICAgIFBvaW50IGQwIHsgdHAwLngg
LSB0cDEueCwgdHAwLnkgLSB0cDEueSB9OworICAgICAgICBQb2ludCBkMiB7IHRwMi54IC0gdHAx
LngsIHRwMi55IC0gdHAxLnkgfTsKKworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgZG91
YmxlIGQwZDA7CisgICAgICAgICAgICBkb3VibGUgZDJkMjsKKyAgICAgICAgICAgIGRvdWJsZSBk
MGQyOworICAgICAgICB9IGRvdFByb2R1Y3RzID0geworICAgICAgICAgICAgZDAueCAqIGQwLngg
KyBkMC55ICogZDAueSwKKyAgICAgICAgICAgIGQyLnggKiBkMi54ICsgZDIueSAqIGQyLnksCisg
ICAgICAgICAgICBkMC54ICogZDIueCArIGQwLnkgKiBkMi55LAorICAgICAgICB9OworCisgICAg
ICAgIGRvdWJsZSBudW0gPSBkMC55ICogZDIueCAtIGQyLnkgKiBkMC54OworICAgICAgICBkb3Vi
bGUgZGVub20gPSBzdGQ6OnNxcnQoZG90UHJvZHVjdHMuZDBkMCAqIGRvdFByb2R1Y3RzLmQyZDIp
IC0gZG90UHJvZHVjdHMuZDBkMjsKKyAgICAgICAgZG91YmxlIGRpc3QgPSBzdGQ6OmFicyhhcmMu
cmFkaXVzICogbnVtIC8gZGVub20pOworICAgICAgICBkb3VibGUgcmFkaXVzQWJzID0gc3RkOjph
YnMoYXJjLnJhZGl1cyk7CisgICAgICAgIGRvdWJsZSByYWRpdXNTaWduID0gYXJjLnJhZGl1cyAv
IHJhZGl1c0FiczsKKyAgICAgICAgZG91YmxlIGwwID0gZGlzdCAvIHN0ZDo6c3FydChkb3RQcm9k
dWN0cy5kMGQwKSAqIHJhZGl1c1NpZ247CisgICAgICAgIGRvdWJsZSBsMiA9IGRpc3QgLyBzdGQ6
OnNxcnQoZG90UHJvZHVjdHMuZDJkMikgKiByYWRpdXNTaWduOworCisgICAgICAgIHBhcmFtZXRl
cnMucDEgPSB7IHRwMS54ICsgZDAueCAqIGwwLCB0cDEueSArIGQwLnkgKiBsMCB9OworICAgICAg
ICBwYXJhbWV0ZXJzLnAyID0geyB0cDEueCArIGQyLnggKiBsMiwgdHAxLnkgKyBkMi55ICogbDIg
fTsKKyAgICAgICAgcGFyYW1ldGVycy5yaCA9IHJhZGl1c0FiczsKKyAgICAgICAgcGFyYW1ldGVy
cy5ydiA9IHJhZGl1c0FiczsKKyAgICAgICAgcGFyYW1ldGVycy5waGkgPSAwOworICAgICAgICBw
YXJhbWV0ZXJzLmZBID0gZmFsc2U7CisgICAgICAgIHBhcmFtZXRlcnMuZlMgPSAobnVtID49IDAp
OworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgdm9pZCBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFt
ZXRlcnM6OmNvbXB1dGU8UGFydGlhbEVsbGlwdGljYWxBcmNQYXJhbWV0ZXJzOjpBcmM+KAorICAg
IFBhcnRpYWxFbGxpcHRpY2FsQXJjUGFyYW1ldGVycyYgcGFyYW1ldGVycywgY29uc3QgQXJjJiBh
cmMpCit7CisgICAgcGFyYW1ldGVycy5wMSA9IGFyYy5wMTsKKyAgICBwYXJhbWV0ZXJzLnAyID0g
YXJjLnAyOworICAgIHBhcmFtZXRlcnMucmggPSBhcmMucmFkaXVzWDsKKyAgICBwYXJhbWV0ZXJz
LnJ2ID0gYXJjLnJhZGl1c1k7CisgICAgcGFyYW1ldGVycy5waGkgPSBhcmMuYW5nbGU7CisgICAg
cGFyYW1ldGVycy5mQSA9IGFyYy5sYXJnZUFyYzsKKyAgICBwYXJhbWV0ZXJzLmZTID0gYXJjLnN3
ZWVwOworfQorCitzdHJ1Y3QgR2VuZXJhbFBhcmFtZXRyaWNBcmMgeworICAgIFBvaW50IGM7Cisg
ICAgZG91YmxlIHRoZXRhMTsKKyAgICBkb3VibGUgZHRoZXRhOworCisgICAgc3RhdGljIHZvaWQg
Y29tcHV0ZShHZW5lcmFsUGFyYW1ldHJpY0FyYyYgYXJjLCBjb25zdCBQYXJ0aWFsRWxsaXB0aWNh
bEFyY1BhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCisgICAgeworICAgICAgICBkb3VibGUgeDFwID0g
c3RkOjpjb3MocGFyYW1ldGVycy5waGkpICogKHBhcmFtZXRlcnMucDEueCAtIHBhcmFtZXRlcnMu
cDIueCkgLyAyCisgICAgICAgICAgICArIHN0ZDo6c2luKHBhcmFtZXRlcnMucGhpKSAqIChwYXJh
bWV0ZXJzLnAxLnkgLSBwYXJhbWV0ZXJzLnAyLnkpIC8gMjsKKyAgICAgICAgZG91YmxlIHkxcCA9
IC1zdGQ6OnNpbihwYXJhbWV0ZXJzLnBoaSkgKiAocGFyYW1ldGVycy5wMS54IC0gcGFyYW1ldGVy
cy5wMi54KSAvIDIKKyAgICAgICAgICAgICsgc3RkOjpjb3MocGFyYW1ldGVycy5waGkpICogKHBh
cmFtZXRlcnMucDEueSAtIHBhcmFtZXRlcnMucDIueSkgLyAyOworCisgICAgICAgIGRvdWJsZSBs
YW1iZGEgPSBzdGQ6OnBvdyh4MXAgLyBwYXJhbWV0ZXJzLnJoLCAyKSArIHN0ZDo6cG93KHkxcCAv
IHBhcmFtZXRlcnMucnYsIDIpOworICAgICAgICBQb2ludCBycCB7IHBhcmFtZXRlcnMucmgsIHBh
cmFtZXRlcnMucnYgfTsKKyAgICAgICAgaWYgKGxhbWJkYSA+IDEpCisgICAgICAgICAgICBycCA9
IHsgcGFyYW1ldGVycy5yaCAqIHN0ZDo6c3FydChsYW1iZGEpLCBwYXJhbWV0ZXJzLnJ2ICogc3Rk
OjpzcXJ0KGxhbWJkYSkgfTsKKworICAgICAgICBkb3VibGUgZnNnbiA9IChwYXJhbWV0ZXJzLmZB
ICE9IHBhcmFtZXRlcnMuZlMpID8gMSA6IC0xOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAg
ICAgZG91YmxlIHJwWDsgZG91YmxlIHJwWTsKKyAgICAgICAgICAgIGRvdWJsZSB4MXA7IGRvdWJs
ZSB5MXA7CisgICAgICAgIH0gc3EgPSB7IHN0ZDo6cG93KHJwLngsIDIpLCBzdGQ6OnBvdyhycC55
LCAyKSwgc3RkOjpwb3coeDFwLCAyKSwgc3RkOjpwb3coeTFwLCAyKSB9OworCisgICAgICAgIGRv
dWJsZSBjcEJhc2UgPSBzdGQ6OnNxcnQoKHNxLnJwWCAqIHNxLnJwWSAtIHNxLnJwWCAqIHNxLnkx
cCAtIHNxLnJwWSAqIHNxLngxcCkKKyAgICAgICAgICAgIC8gKHNxLnJwWCAqIHNxLnkxcCArIHNx
LnJwWSAqIHNxLngxcCkpOworICAgICAgICBQb2ludCBjcCB7IGZzZ24gKiBjcEJhc2UgKiBycC54
ICogeTFwIC8gcnAueSwgZnNnbiAqIGNwQmFzZSAqIC1ycC55ICogeDFwIC8gcnAueCB9OworICAg
ICAgICBhcmMuYyA9IHsgc3RkOjpjb3MocGFyYW1ldGVycy5waGkpICogY3AueCAtIHN0ZDo6c2lu
KHBhcmFtZXRlcnMucGhpKSAqIGNwLnkgKyAocGFyYW1ldGVycy5wMS54ICsgcGFyYW1ldGVycy5w
Mi54KSAvIDIsCisgICAgICAgICAgICBzdGQ6OnNpbihwYXJhbWV0ZXJzLnBoaSkgKiBjcC54ICsg
c3RkOjpjb3MocGFyYW1ldGVycy5waGkpICogY3AueSArIChwYXJhbWV0ZXJzLnAxLnkgKyBwYXJh
bWV0ZXJzLnAyLnkpIC8gMiB9OworCisgICAgICAgIGF1dG8gY2FsY3VsYXRlQW5nbGUgPQorICAg
ICAgICAgICAgWyZdKGNvbnN0IFBvaW50JiB1LCBjb25zdCBQb2ludCYgdikgLT4gZG91YmxlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICAg
ICAgZG91YmxlIHV1OworICAgICAgICAgICAgICAgICAgICBkb3VibGUgdnY7CisgICAgICAgICAg
ICAgICAgICAgIGRvdWJsZSB1djsKKyAgICAgICAgICAgICAgICB9IGRvdHMgPSB7CisgICAgICAg
ICAgICAgICAgICAgIHUueCAqIHUueCArIHUueSAqIHUueSwKKyAgICAgICAgICAgICAgICAgICAg
di54ICogdi54ICsgdi55ICogdi55LAorICAgICAgICAgICAgICAgICAgICB1LnggKiB2LnggKyB1
LnkgKiB2LnksCisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGRvdWJsZSBz
cXJ0VVUgPSBzdGQ6OnNxcnQoZG90cy51dSk7CisgICAgICAgICAgICAgICAgZG91YmxlIHNxcnRW
ViA9IHN0ZDo6c3FydChkb3RzLnZ2KTsKKyAgICAgICAgICAgICAgICBpZiAoIXNxcnRVVSB8fCAh
c3FydFZWKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAgICAgICAg
IGRvdWJsZSBhbmdsZSA9IHN0ZDo6YWNvcyhkb3RzLnV2IC8gKHNxcnRVVSAqIHNxcnRWVikpOwor
ICAgICAgICAgICAgICAgIGlmICh1LnggKiB2LnkgLSB1LnkgKiB2LnggPj0gMCkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGFuZ2xlOworICAgICAgICAgICAgICAgIHJldHVybiAtYW5nbGU7
CisgICAgICAgICAgICB9OworCisgICAgICAgIGFyYy50aGV0YTEgPSBjYWxjdWxhdGVBbmdsZSh7
IDEsIDAgfSwgeyAoeDFwIC0gY3AueCkgLyBycC54LCAoeTFwIC0gY3AueSkgLyBycC55IH0pOwor
ICAgICAgICBkb3VibGUgZGFuZ2xlID0gY2FsY3VsYXRlQW5nbGUoCisgICAgICAgICAgICB7ICh4
MXAgLSBjcC54KSAvIHJwLngsICh5MXAgLSBjcC55KSAvIHJwLnkgfSwKKyAgICAgICAgICAgIHsg
KC14MXAgLSBjcC54KSAvIHJwLngsICgteTFwIC0gY3AueSkgLyBycC55IH0pOworCisgICAgICAg
IGlmIChwYXJhbWV0ZXJzLmZTKSB7CisgICAgICAgICAgICBpZiAoZGFuZ2xlIDwgMCkKKyAgICAg
ICAgICAgICAgICBkYW5nbGUgKz0gMiAqIE1fUEk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAoZGFuZ2xlID4gMCkKKyAgICAgICAgICAgICAgICBkYW5nbGUgLT0gMiAqIE1fUEk7
CisgICAgICAgIH0KKyAgICAgICAgYXJjLmR0aGV0YSA9IGRhbmdsZTsKKyAgICB9Cit9OworCitz
dHJ1Y3QgUGF0aFByb2Nlc3NpbmdTdGF0ZSB7CisgICAgUG9pbnQgc3RhcnRpbmdQb2ludDsKKyAg
ICBQb2ludCBjdXJyZW50UG9pbnQ7CisgICAgUG9pbnQgcHJpb3JFbmRQb2ludDsKKworICAgIFdl
YkNvcmU6OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm07CisgICAgV2ViQ29yZTo6QWZmaW5lVHJh
bnNmb3JtIHRyYW5zZm9ybUludmVyc2U7CisKKyAgICBQb2ludCBtYXAoY29uc3QgUG9pbnQmIHAp
CisgICAgeworICAgICAgICBQb2ludCBtYXBwZWRQb2ludDsKKyAgICAgICAgdHJhbnNmb3JtLm1h
cChwLngsIHAueSwgbWFwcGVkUG9pbnQueCwgbWFwcGVkUG9pbnQueSk7CisgICAgICAgIHJldHVy
biBtYXBwZWRQb2ludDsKKyAgICB9CisKKyAgICBQb2ludCBtYXBJbnZlcnNlKGNvbnN0IFBvaW50
JiBwKQorICAgIHsKKyAgICAgICAgUG9pbnQgbWFwcGVkUG9pbnQ7CisgICAgICAgIHRyYW5zZm9y
bUludmVyc2UubWFwKHAueCwgcC55LCBtYXBwZWRQb2ludC54LCBtYXBwZWRQb2ludC55KTsKKyAg
ICAgICAgcmV0dXJuIG1hcHBlZFBvaW50OworICAgIH0KKworICAgIHRlbXBsYXRlPHNpemVfdCBO
PgorICAgIHN0cnVjdCBWYWx1ZVJhbmdlIHsKKyAgICAgICAgdHlwZW5hbWUgVmFsdWVzPE4+Ojpp
dGVyYXRvciBiZWdpbjsKKyAgICAgICAgdHlwZW5hbWUgVmFsdWVzPE4+OjppdGVyYXRvciBlbmQ7
CisgICAgfTsKKworICAgIHRlbXBsYXRlPENvbW1hbmQgY29tbWFuZCwgc2l6ZV90IE4+CisgICAg
c3RhdGljIHZvaWQgYXBwbHkoUGF0aFByb2Nlc3NpbmdTdGF0ZSYsIFZhbHVlUmFuZ2U8Tj4pID0g
ZGVsZXRlOworfTsKKwordGVtcGxhdGU8PgoraW5saW5lIHZvaWQgUGF0aFByb2Nlc3NpbmdTdGF0
ZTo6YXBwbHk8Q29tbWFuZDo6TW92ZVRvLCAyPihQYXRoUHJvY2Vzc2luZ1N0YXRlJiwgVmFsdWVS
YW5nZTwyPikKK3sKK30KKworc3RydWN0IFBhdGhDb250YWluZXIgeworICAgIHVzaW5nIENvbW1h
bmRWZWN0b3IgPSBWZWN0b3I8Q29tbWFuZCwgMTY+OworICAgIHVzaW5nIFZhbHVlVmVjdG9yID0g
VmVjdG9yPGRvdWJsZSwgNjQ+OworCisgICAgQ29tbWFuZFZlY3RvciBjb21tYW5kczsKKyAgICBW
YWx1ZVZlY3RvciB2YWx1ZXM7Cit9OworCitzdHJ1Y3QgSW1tZWRpYXRlU3RhdGUgOiBQYXRoUHJv
Y2Vzc2luZ1N0YXRlIHsKKyAgICB0ZW1wbGF0ZTxzaXplX3QgTj4KKyAgICB2b2lkIGFwcGx5KENv
bW1hbmQgY29tbWFuZCwgY29uc3QgVmFsdWVzPE4+JiB2YWx1ZXMpCisgICAgeworICAgICAgICBz
d2l0Y2ggKGNvbW1hbmQpIHsKKyAgICAgICAgY2FzZSBDb21tYW5kOjpNb3ZlVG86CisgICAgICAg
IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKE4gPT0gMik7CisgICAgICAgICAgICBQb2lu
dCBwID0gbWFwKHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0gfSk7CisKKyAgICAgICAgICAgIHN0YXJ0
aW5nUG9pbnQgPSBwOworICAgICAgICAgICAgY3VycmVudFBvaW50ID0gcDsKKyAgICAgICAgICAg
IHByaW9yRW5kUG9pbnQgPSBwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBDb21tYW5kOjpDbG9zZToKKyAgICAgICAgeworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoTiA9PSAwKTsKKyAgICAgICAgICAgIGN1cnJlbnRQb2ludCA9IHN0YXJ0aW5nUG9pbnQ7
CisgICAgICAgICAgICBwcmlvckVuZFBvaW50ID0gc3RhcnRpbmdQb2ludDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29tbWFuZDo6TGluZVRvOgorICAgICAg
ICB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChOID09IDIpOworICAgICAgICAgICAgUG9p
bnQgcDEgPSBtYXAoeyB2YWx1ZXNbMF0sIHZhbHVlc1sxXSB9KTsKKworICAgICAgICAgICAgY3Vy
cmVudFBvaW50ID0gcDE7CisgICAgICAgICAgICBwcmlvckVuZFBvaW50ID0gcDE7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENvbW1hbmQ6OlJlY3Q6CisgICAg
ICAgIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKE4gPT0gNCk7CisgICAgICAgICAgICBQ
b2ludCBwMCA9IG1hcCh7IHZhbHVlc1swXSwgdmFsdWVzWzFdIH0pOworCisgICAgICAgICAgICBj
dXJyZW50UG9pbnQgPSBwMDsKKyAgICAgICAgICAgIHByaW9yRW5kUG9pbnQgPSBwMDsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29tbWFuZDo6UXVhZHJhdGlj
Q3VydmVUbzoKKyAgICAgICAgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoTiA9PSA0KTsK
KyAgICAgICAgICAgIFBvaW50IHAxID0gbWFwKHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0gfSk7Cisg
ICAgICAgICAgICBQb2ludCBwMiA9IG1hcCh7IHZhbHVlc1syXSwgdmFsdWVzWzNdIH0pOworCisg
ICAgICAgICAgICBjdXJyZW50UG9pbnQgPSBwMjsKKyAgICAgICAgICAgIHByaW9yRW5kUG9pbnQg
PSBwMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ29tbWFu
ZDo6Q3ViaWNDdXJ2ZVRvOgorICAgICAgICB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChO
ID09IDYpOworICAgICAgICAgICAgUG9pbnQgcDIgPSBtYXAoeyB2YWx1ZXNbMl0sIHZhbHVlc1sz
XSB9KTsKKyAgICAgICAgICAgIFBvaW50IHAzID0gbWFwKHsgdmFsdWVzWzRdLCB2YWx1ZXNbNV0g
fSk7CisKKyAgICAgICAgICAgIGN1cnJlbnRQb2ludCA9IHAzOworICAgICAgICAgICAgcHJpb3JF
bmRQb2ludCA9IHAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBDb21tYW5kOjpDaXJjdWxhckNsb2Nrd2lzZUFyYzoKKyAgICAgICAgY2FzZSBDb21tYW5kOjpD
aXJjdWxhckNvdW50ZXJDbG9ja3dpc2VBcmM6CisgICAgICAgIHsKKyAgICAgICAgICAgIHVzaW5n
IEFyY1R5cGUgPSBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnM6OkNpcmN1bGFyQXJjOwor
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChOID09IDUpOworICAgICAgICAgICAgQXJjVHlw
ZSBhcmMgeyB7IHZhbHVlc1swXSwgdmFsdWVzWzFdIH0sIHZhbHVlc1syXSwgdmFsdWVzWzNdLCB2
YWx1ZXNbNF0gfTsKKworICAgICAgICAgICAgUGFydGlhbEVsbGlwdGljYWxBcmNQYXJhbWV0ZXJz
IHBhcmFtZXRlcnM7CisgICAgICAgICAgICBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnM6
OmNvbXB1dGU8QXJjVHlwZT4ocGFyYW1ldGVycywgYXJjKTsKKworICAgICAgICAgICAgYXV0byBt
cDIgPSBtYXAocGFyYW1ldGVycy5wMik7CisgICAgICAgICAgICBjdXJyZW50UG9pbnQgPSBtcDI7
CisgICAgICAgICAgICBwcmlvckVuZFBvaW50ID0gbXAyOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBDb21tYW5kOjpDaXJjdWxhclRhbmdlbnRBcmM6CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHVzaW5nIEFyY1R5cGUgPSBQYXJ0aWFsRWxsaXB0aWNhbEFyY1Bh
cmFtZXRlcnM6OkNpcmN1bGFyVGFuZ2VudEFyYzsKKworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoTiA9PSA1KTsKKyAgICAgICAgICAgIEFyY1R5cGUgYXJjIHsgbWFwSW52ZXJzZShjdXJyZW50
UG9pbnQpLAorICAgICAgICAgICAgICAgIHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0gfSwgeyB2YWx1
ZXNbMl0sIHZhbHVlc1szXSB9LCB2YWx1ZXNbNF0gfTsKKworICAgICAgICAgICAgUGFydGlhbEVs
bGlwdGljYWxBcmNQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgICAgICAgICBQYXJ0aWFsRWxs
aXB0aWNhbEFyY1BhcmFtZXRlcnM6OmNvbXB1dGU8QXJjVHlwZT4ocGFyYW1ldGVycywgYXJjKTsK
KworICAgICAgICAgICAgYXV0byBtcDIgPSBtYXAocGFyYW1ldGVycy5wMik7CisgICAgICAgICAg
ICBjdXJyZW50UG9pbnQgPSBtcDI7CisgICAgICAgICAgICBwcmlvckVuZFBvaW50ID0gbXAyOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDb21tYW5kOjpBcmNU
bzoKKyAgICAgICAgeworICAgICAgICAgICAgdXNpbmcgQXJjVHlwZSA9IFBhcnRpYWxFbGxpcHRp
Y2FsQXJjUGFyYW1ldGVyczo6QXJjOworCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChOID09
IDcpOworICAgICAgICAgICAgQXJjVHlwZSBhcmMgeyBtYXBJbnZlcnNlKGN1cnJlbnRQb2ludCks
IHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2YWx1ZXNbMl0sCisgICAgICAgICAgICAgICAgdmFsdWVz
WzNdICE9IDAsIHZhbHVlc1s0XSAhPSAwLCB7IHZhbHVlc1s1XSwgdmFsdWVzWzZdIH0gfTsKKwor
ICAgICAgICAgICAgUGFydGlhbEVsbGlwdGljYWxBcmNQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Cisg
ICAgICAgICAgICBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnM6OmNvbXB1dGU8QXJjVHlw
ZT4ocGFyYW1ldGVycywgYXJjKTsKKworICAgICAgICAgICAgYXV0byBtcDIgPSBtYXAocGFyYW1l
dGVycy5wMik7CisgICAgICAgICAgICBjdXJyZW50UG9pbnQgPSBtcDI7CisgICAgICAgICAgICBw
cmlvckVuZFBvaW50ID0gbXAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBDb21tYW5kOjpUcmFuc2Zvcm06CisgICAgICAgIHsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKE4gPT0gMTIpOworICAgICAgICAgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
IHRyYW5zZm9ybSh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLAorICAgICAgICAgICAg
ICAgIHZhbHVlc1szXSwgdmFsdWVzWzRdLCB2YWx1ZXNbNV0pOworICAgICAgICAgICAgV2ViQ29y
ZTo6QWZmaW5lVHJhbnNmb3JtIGludmVyc2UodmFsdWVzWzZdLCB2YWx1ZXNbN10sIHZhbHVlc1s4
XSwKKyAgICAgICAgICAgICAgICB2YWx1ZXNbOV0sIHZhbHVlc1sxMF0sIHZhbHVlc1sxMV0pOwor
CisgICAgICAgICAgICBhdXRvJiBzdGF0ZSA9ICp0aGlzOworICAgICAgICAgICAgc3RhdGUudHJh
bnNmb3JtLm11bHRpcGx5KGludmVyc2UpOworICAgICAgICAgICAgc3RhdGUudHJhbnNmb3JtSW52
ZXJzZSA9IHRyYW5zZm9ybSAqIHN0YXRlLnRyYW5zZm9ybUludmVyc2U7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK307CisKK3N0cnVjdCBHZW5lcmlj
UGF0aCB7CisgICAgdGVtcGxhdGU8c2l6ZV90IE4gPSAwPgorICAgIHZvaWQgYWRkKENvbW1hbmQg
Y29tbWFuZCwgY29uc3QgVmFsdWVzPE4+JiB2YWx1ZXMgPSB7IH0pCisgICAgeworICAgICAgICBj
b250YWluZXIuY29tbWFuZHMuYXBwZW5kKGNvbW1hbmQpOworICAgICAgICBjb250YWluZXIudmFs
dWVzLmFwcGVuZFJhbmdlKHZhbHVlcy5iZWdpbigpLCB2YWx1ZXMuZW5kKCkpOworCisgICAgICAg
IGltbWVkaWF0ZVN0YXRlLmFwcGx5KGNvbW1hbmQsIHZhbHVlcyk7CisgICAgfQorCisgICAgdm9p
ZCBjbGVhcigpCisgICAgeworICAgICAgICBjb250YWluZXIuY29tbWFuZHMuY2xlYXIoKTsKKyAg
ICAgICAgY29udGFpbmVyLnZhbHVlcy5jbGVhcigpOworCisgICAgICAgIGltbWVkaWF0ZVN0YXRl
LnN0YXJ0aW5nUG9pbnQgPSB7IH07CisgICAgICAgIGltbWVkaWF0ZVN0YXRlLmN1cnJlbnRQb2lu
dCA9IHsgfTsKKyAgICAgICAgaW1tZWRpYXRlU3RhdGUucHJpb3JFbmRQb2ludCA9IHsgfTsKKwor
ICAgICAgICBpbW1lZGlhdGVTdGF0ZS50cmFuc2Zvcm0gPSB7IH07CisgICAgICAgIGltbWVkaWF0
ZVN0YXRlLnRyYW5zZm9ybUludmVyc2UgPSB7IH07CisgICAgfQorCisgICAgUGF0aENvbnRhaW5l
ciBjb250YWluZXI7CisgICAgSW1tZWRpYXRlU3RhdGUgaW1tZWRpYXRlU3RhdGU7Cit9OworCitz
dHJ1Y3QgQmFzaWNQcm9jZXNzb3IgeworICAgIFBhdGhQcm9jZXNzaW5nU3RhdGUgc3RhdGU7CisK
KyAgICB2b2lkIGR1bXAoY29uc3QgUGF0aENvbnRhaW5lciYgY29udGFpbmVyKQorICAgIHsKKyAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJCYXNpY1Byb2Nlc3NvcjogY29udGFpbmVyLmNvbW1hbmRz
WyV6dV1cbiIsIGNvbnRhaW5lci5jb21tYW5kcy5zaXplKCkpOworICAgICAgICBhdXRvIGl0ID0g
Y29udGFpbmVyLnZhbHVlcy5iZWdpbigpOworICAgICAgICBmb3IgKGF1dG8gY29tbWFuZCA6IGNv
bnRhaW5lci5jb21tYW5kcykgeworICAgICAgICAgICAgc3dpdGNoIChjb21tYW5kKSB7CisgICAg
ICAgICAgICBjYXNlIENvbW1hbmQ6Ok1vdmVUbzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChpdCArIDIgPD0gY29udGFpbmVyLnZhbHVlcy5lbmQoKSk7Cisg
ICAgICAgICAgICAgICAgUG9pbnQgcCA9IHN0YXRlLm1hcCh7IGl0WzBdLCBpdFsxXSB9KTsKKyAg
ICAgICAgICAgICAgICBpdCArPSAyOworCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJ8LSBNT1ZFIFRPICglLjJmLCUuMmYpXG4iLCBwLngsIHAueSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENvbW1hbmQ6OkNsb3NlOgor
ICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAifC0gQ0xPU0VcbiIpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDb21tYW5kOjpMaW5lVG86CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXQgKyAyIDw9IGNvbnRhaW5l
ci52YWx1ZXMuZW5kKCkpOworICAgICAgICAgICAgICAgIFBvaW50IHAgPSBzdGF0ZS5tYXAoeyBp
dFswXSwgaXRbMV0gfSk7CisgICAgICAgICAgICAgICAgaXQgKz0gMjsKKworICAgICAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAifC0gTElORSBUTyAoJS4yZiwlLjJmKVxuIiwgcC54LCBwLnkp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fz
ZSBDb21tYW5kOjpSZWN0OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGl0ICsgNCA8PSBjb250YWluZXIudmFsdWVzLmVuZCgpKTsKKyAgICAgICAgICAgICAg
ICBQb2ludCBwMCA9IHN0YXRlLm1hcCh7IGl0WzBdLCBpdFsxXSB9KTsKKyAgICAgICAgICAgICAg
ICBQb2ludCBwMSA9IHN0YXRlLm1hcCh7IGl0WzJdLCBpdFsxXSB9KTsKKyAgICAgICAgICAgICAg
ICBQb2ludCBwMiA9IHN0YXRlLm1hcCh7IGl0WzJdLCBpdFszXSB9KTsKKyAgICAgICAgICAgICAg
ICBQb2ludCBwMyA9IHN0YXRlLm1hcCh7IGl0WzBdLCBpdFszXSB9KTsKKyAgICAgICAgICAgICAg
ICBpdCArPSA0OworCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ8LSBSRUNUICgl
LjJmLCUuMmYpICglLjJmLCUuMmYpICglLjJmLCUuMmYpICglLjJmLCUuMmYpXG4iLAorICAgICAg
ICAgICAgICAgICAgICBwMC54LCBwMC55LCBwMS54LCBwMS55LCBwMi54LCBwMi55LCBwMy54LCBw
My55KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNhc2UgQ29tbWFuZDo6UXVhZHJhdGljQ3VydmVUbzoKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpdCArIDQgPD0gY29udGFpbmVyLnZhbHVlcy5lbmQoKSk7
CisgICAgICAgICAgICAgICAgUG9pbnQgcXAxIHsgaXRbMF0sIGl0WzFdIH07CisgICAgICAgICAg
ICAgICAgUG9pbnQgcXAyIHsgaXRbMl0sIGl0WzNdIH07CisgICAgICAgICAgICAgICAgaXQgKz0g
NDsKKworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAifC0gUVVBRFJBVElDIENVUlZF
IFRPICglLjJmLCUuMmYpICglLjJmLCUuMmYpXG4iLAorICAgICAgICAgICAgICAgICAgICBxcDEu
eCwgcXAxLnksIHFwMi54LCBxcDIueSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIENvbW1hbmQ6OkN1YmljQ3VydmVUbzoKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpdCArIDYgPD0gY29udGFpbmVy
LnZhbHVlcy5lbmQoKSk7CisgICAgICAgICAgICAgICAgUG9pbnQgcDEgPSBzdGF0ZS5tYXAoeyBp
dFswXSwgaXRbMV0gfSk7CisgICAgICAgICAgICAgICAgUG9pbnQgcDIgPSBzdGF0ZS5tYXAoeyBp
dFsyXSwgaXRbM10gfSk7CisgICAgICAgICAgICAgICAgUG9pbnQgcDMgPSBzdGF0ZS5tYXAoeyBp
dFs0XSwgaXRbNV0gfSk7CisgICAgICAgICAgICAgICAgaXQgKz0gNjsKKworICAgICAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAifC0gQ1VCSUMgQ1VSVkUgVE8gKCUuMmYsJS4yZikgKCUuMmYs
JS4yZikgKCUuMmYsJS4yZilcbiIsCisgICAgICAgICAgICAgICAgICAgIHAxLngsIHAxLnksIHAy
LngsIHAyLnksIHAzLngsIHAzLnkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FzZSBDb21tYW5kOjpDaXJjdWxhckNsb2Nrd2lzZUFyYzoKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1c2luZyBBcmNUeXBlID0gUGFydGlhbEVsbGlw
dGljYWxBcmNQYXJhbWV0ZXJzOjpDaXJjdWxhckFyYzsKKworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGl0ICsgNSA8PSBjb250YWluZXIudmFsdWVzLmVuZCgpKTsKKyAgICAgICAgICAg
ICAgICBBcmNUeXBlIGFyYyB7IHsgaXRbMF0sIGl0WzFdIH0sIGl0WzJdLCBpdFszXSwgaXRbNF0g
fTsKKyAgICAgICAgICAgICAgICBpdCArPSA1OworCisgICAgICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJ8LSBDSVJDVUxBUiBDVyBBUkMgKCUuMmYsJS4yZikgciAlLjJmICglLjJmIC0+ICUu
MmYpXG4iLAorICAgICAgICAgICAgICAgICAgICBhcmMuYy54LCBhcmMuYy55LCBhcmMucmFkaXVz
LCBhcmMuc3RhcnRBbmdsZSwgYXJjLmVuZEFuZ2xlKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ29tbWFuZDo6Q2lyY3VsYXJDb3VudGVy
Q2xvY2t3aXNlQXJjOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVzaW5nIEFyY1R5
cGUgPSBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnM6OkNpcmN1bGFyQXJjOworCisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXQgKyA1IDw9IGNvbnRhaW5lci52YWx1ZXMuZW5k
KCkpOworICAgICAgICAgICAgICAgIEFyY1R5cGUgYXJjIHsgeyBpdFswXSwgaXRbMV0gfSwgaXRb
Ml0sIGl0WzNdLCBpdFs0XSB9OworICAgICAgICAgICAgICAgIGl0ICs9IDU7CisKKyAgICAgICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInwtIENJUkNVTEFSIENDVyBBUkMgKCUuMmYsJS4yZikg
ciAlLjJmICglLjJmIC0+ICUuMmYpXG4iLAorICAgICAgICAgICAgICAgICAgICBhcmMuYy54LCBh
cmMuYy55LCBhcmMucmFkaXVzLCBhcmMuc3RhcnRBbmdsZSwgYXJjLmVuZEFuZ2xlKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ29tbWFu
ZDo6Q2lyY3VsYXJUYW5nZW50QXJjOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVz
aW5nIEFyY1R5cGUgPSBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnM6OkNpcmN1bGFyVGFu
Z2VudEFyYzsKKworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGl0ICsgNSA8PSBjb250
YWluZXIudmFsdWVzLmVuZCgpKTsKKyAgICAgICAgICAgICAgICBBcmNUeXBlIGFyYyB7IHN0YXRl
Lm1hcEludmVyc2Uoc3RhdGUuY3VycmVudFBvaW50KSwKKyAgICAgICAgICAgICAgICAgICAgeyBp
dFswXSwgaXRbMV0gfSwgeyBpdFsyXSwgaXRbM10gfSwgaXRbNF0gfTsKKyAgICAgICAgICAgICAg
ICBpdCArPSA1OworCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ8LSBDSVJDVUxB
UiBUQU5HRU5UIEFSQyAoJS4yZiwlLjJmKSAoJS4yZiwlLjJmKSAoJS4yZiwlLjJmKSByICUuMmZc
biIsCisgICAgICAgICAgICAgICAgICAgIGFyYy50cDAueCwgYXJjLnRwMC55LCBhcmMudHAxLngs
IGFyYy50cDEueSwgYXJjLnRwMi54LCBhcmMudHAyLnksIGFyYy5yYWRpdXMpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBDb21tYW5kOjpB
cmNUbzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1c2luZyBBcmNUeXBlID0gUGFy
dGlhbEVsbGlwdGljYWxBcmNQYXJhbWV0ZXJzOjpBcmM7CisKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChpdCArIDcgPD0gY29udGFpbmVyLnZhbHVlcy5lbmQoKSk7CisgICAgICAgICAg
ICAgICAgQXJjVHlwZSBhcmMgeyBzdGF0ZS5tYXBJbnZlcnNlKHN0YXRlLmN1cnJlbnRQb2ludCks
IGl0WzBdLCBpdFsxXSwgaXRbMl0sCisgICAgICAgICAgICAgICAgICAgIGl0WzNdICE9IDAsIGl0
WzRdICE9IDAsIHsgaXRbNV0sIGl0WzZdIH0gfTsKKyAgICAgICAgICAgICAgICBpdCArPSA3Owor
CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ8LSBBUkMgVE8gcDEgKCUuMmYsJS4y
ZikgcmFkaXVzIChYOiAlLjJmLCBZOiAlLjJmKSBhbmdsZSAlLjJmIGxhcmdlQXJjICVkIHN3ZWVw
ICVkIHAyICglLjJmLCUuMmYpXG4iLAorICAgICAgICAgICAgICAgICAgICBhcmMucDEueCwgYXJj
LnAxLnksIGFyYy5yYWRpdXNYLCBhcmMucmFkaXVzWSwgYXJjLmFuZ2xlLCBhcmMubGFyZ2VBcmMs
IGFyYy5zd2VlcCwKKyAgICAgICAgICAgICAgICAgICAgYXJjLnAyLngsIGFyYy5wMi55KTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ29t
bWFuZDo6VHJhbnNmb3JtOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGl0ICsgMTIgPD0gY29udGFpbmVyLnZhbHVlcy5lbmQoKSk7CisgICAgICAgICAgICAg
ICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybShpdFswXSwgaXRbMV0sIGl0WzJd
LCBpdFszXSwgaXRbNF0sIGl0WzVdKTsKKyAgICAgICAgICAgICAgICBXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gaW52ZXJzZShpdFs2XSwgaXRbN10sIGl0WzhdLCBpdFs5XSwgaXRbMTBdLCBpdFsx
MV0pOworICAgICAgICAgICAgICAgIGl0ICs9IDEyOworCisgICAgICAgICAgICAgICAgc3RhdGUu
dHJhbnNmb3JtLm11bHRpcGx5KGludmVyc2UpOworICAgICAgICAgICAgICAgIHN0YXRlLnRyYW5z
Zm9ybUludmVyc2UgPSB0cmFuc2Zvcm0gKiBzdGF0ZS50cmFuc2Zvcm1JbnZlcnNlOworCisgICAg
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ8LSBUUkFOU0ZPUk0gKCUuMmYsJS4yZiwlLjJm
LCUuMmYsJS4yZiwlLjJmKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLmEoKSwg
dHJhbnNmb3JtLmIoKSwgdHJhbnNmb3JtLmMoKSwKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNm
b3JtLmQoKSwgdHJhbnNmb3JtLmUoKSwgdHJhbnNmb3JtLmYoKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChpdCA9PSBjb250YWluZXIudmFsdWVzLmVuZCgpKTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkaWNhdGUsIHR5cGVuYW1lIEYxLCB0eXBlbmFtZSBG
MiwgdHlwZW5hbWUgRjMsIHR5cGVuYW1lIEY0PgorICAgIHZvaWQgYXBwbHkoY29uc3QgUGF0aENv
bnRhaW5lciYgY29udGFpbmVyLCBjb25zdCBQcmVkaWNhdGUmIHByZWRpY2F0ZSwKKyAgICAgICAg
Y29uc3QgRjEmIG1vdmVUbywgY29uc3QgRjImIGxpbmVUbywgY29uc3QgRjMmIGN1cnZlVG8sIGNv
bnN0IEY0JiBjbG9zZSkKKyAgICB7CisgICAgICAgIGF1dG8gaXQgPSBjb250YWluZXIudmFsdWVz
LmJlZ2luKCk7CisgICAgICAgIGZvciAoYXV0byBjb21tYW5kIDogY29udGFpbmVyLmNvbW1hbmRz
KSB7CisgICAgICAgICAgICBpZiAoIXByZWRpY2F0ZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgc3dpdGNoIChjb21tYW5kKSB7CisgICAgICAgICAgICBjYXNlIENv
bW1hbmQ6Ok1vdmVUbzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChpdCArIDIgPD0gY29udGFpbmVyLnZhbHVlcy5lbmQoKSk7CisgICAgICAgICAgICAgICAg
UG9pbnQgcCA9IHN0YXRlLm1hcCh7IGl0WzBdLCBpdFsxXSB9KTsKKyAgICAgICAgICAgICAgICBp
dCArPSAyOworCisgICAgICAgICAgICAgICAgbW92ZVRvKHApOworCisgICAgICAgICAgICAgICAg
c3RhdGUuc3RhcnRpbmdQb2ludCA9IHA7CisgICAgICAgICAgICAgICAgc3RhdGUuY3VycmVudFBv
aW50ID0gcDsKKyAgICAgICAgICAgICAgICBzdGF0ZS5wcmlvckVuZFBvaW50ID0gcDsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ29tbWFu
ZDo6Q2xvc2U6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2xvc2UoKTsKKworICAg
ICAgICAgICAgICAgIHN0YXRlLmN1cnJlbnRQb2ludCA9IHN0YXRlLnN0YXJ0aW5nUG9pbnQ7Cisg
ICAgICAgICAgICAgICAgc3RhdGUucHJpb3JFbmRQb2ludCA9IHN0YXRlLnN0YXJ0aW5nUG9pbnQ7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNl
IENvbW1hbmQ6OkxpbmVUbzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChpdCArIDIgPD0gY29udGFpbmVyLnZhbHVlcy5lbmQoKSk7CisgICAgICAgICAgICAg
ICAgUG9pbnQgcCA9IHN0YXRlLm1hcCh7IGl0WzBdLCBpdFsxXSB9KTsKKyAgICAgICAgICAgICAg
ICBpdCArPSAyOworCisgICAgICAgICAgICAgICAgbGluZVRvKHApOworCisgICAgICAgICAgICAg
ICAgc3RhdGUuY3VycmVudFBvaW50ID0gcDsKKyAgICAgICAgICAgICAgICBzdGF0ZS5wcmlvckVu
ZFBvaW50ID0gcDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgQ29tbWFuZDo6UmVjdDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChpdCArIDQgPD0gY29udGFpbmVyLnZhbHVlcy5lbmQoKSk7CisgICAg
ICAgICAgICAgICAgUG9pbnQgcDAgPSBzdGF0ZS5tYXAoeyBpdFswXSwgaXRbMV0gfSk7CisgICAg
ICAgICAgICAgICAgUG9pbnQgcDEgPSBzdGF0ZS5tYXAoeyBpdFsyXSwgaXRbMV0gfSk7CisgICAg
ICAgICAgICAgICAgUG9pbnQgcDIgPSBzdGF0ZS5tYXAoeyBpdFsyXSwgaXRbM10gfSk7CisgICAg
ICAgICAgICAgICAgUG9pbnQgcDMgPSBzdGF0ZS5tYXAoeyBpdFswXSwgaXRbM10gfSk7CisgICAg
ICAgICAgICAgICAgaXQgKz0gNDsKKworICAgICAgICAgICAgICAgIGxpbmVUbyhwMSk7CisgICAg
ICAgICAgICAgICAgbGluZVRvKHAyKTsKKyAgICAgICAgICAgICAgICBsaW5lVG8ocDMpOworCisg
ICAgICAgICAgICAgICAgc3RhdGUuY3VycmVudFBvaW50ID0gcDA7CisgICAgICAgICAgICAgICAg
c3RhdGUucHJpb3JFbmRQb2ludCA9IHAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY2FzZSBDb21tYW5kOjpRdWFkcmF0aWNDdXJ2ZVRvOgorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGl0ICsgNCA8PSBjb250
YWluZXIudmFsdWVzLmVuZCgpKTsKKyAgICAgICAgICAgICAgICBQb2ludCBwMCA9IHN0YXRlLm1h
cEludmVyc2Uoc3RhdGUuY3VycmVudFBvaW50KTsKKyAgICAgICAgICAgICAgICBQb2ludCBxcDEg
eyBpdFswXSwgaXRbMV0gfTsKKyAgICAgICAgICAgICAgICBQb2ludCBxcDIgeyBpdFsyXSwgaXRb
M10gfTsKKyAgICAgICAgICAgICAgICBpdCArPSA0OworCisgICAgICAgICAgICAgICAgUG9pbnQg
cDEgeyBwMC54ICsgMi4wIC8gMy4wICogKHFwMS54IC0gcDAueCksIHAwLnkgKyAyLjAgLyAzLjAg
KiAocXAxLnkgLSBwMC55KSB9OworICAgICAgICAgICAgICAgIFBvaW50IHAyIHsgcXAyLnggKyAy
LjAgLyAzLjAgKiAocXAxLnggLSBxcDIueCksIHFwMi55ICsgMi4wIC8gMy4wICogKHFwMS55IC0g
cXAyLnkpIH07CisgICAgICAgICAgICAgICAgY3VydmVUbyhzdGF0ZS5tYXAocDEpLCBzdGF0ZS5t
YXAocDIpLCBzdGF0ZS5tYXAocXAyKSk7CisKKyAgICAgICAgICAgICAgICBzdGF0ZS5jdXJyZW50
UG9pbnQgPSBzdGF0ZS5tYXAocXAyKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5wcmlvckVuZFBv
aW50ID0gc3RhdGUubWFwKHFwMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBjYXNlIENvbW1hbmQ6OkN1YmljQ3VydmVUbzoKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpdCArIDYgPD0gY29udGFpbmVyLnZh
bHVlcy5lbmQoKSk7CisgICAgICAgICAgICAgICAgUG9pbnQgcDEgPSBzdGF0ZS5tYXAoeyBpdFsw
XSwgaXRbMV0gfSk7CisgICAgICAgICAgICAgICAgUG9pbnQgcDIgPSBzdGF0ZS5tYXAoeyBpdFsy
XSwgaXRbM10gfSk7CisgICAgICAgICAgICAgICAgUG9pbnQgcDMgPSBzdGF0ZS5tYXAoeyBpdFs0
XSwgaXRbNV0gfSk7CisgICAgICAgICAgICAgICAgaXQgKz0gNjsKKworICAgICAgICAgICAgICAg
IGN1cnZlVG8ocDEsIHAyLCBwMyk7CisKKyAgICAgICAgICAgICAgICBzdGF0ZS5jdXJyZW50UG9p
bnQgPSBwMzsKKyAgICAgICAgICAgICAgICBzdGF0ZS5wcmlvckVuZFBvaW50ID0gcDI7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENvbW1h
bmQ6OkNpcmN1bGFyQ2xvY2t3aXNlQXJjOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHVzaW5nIEFyY1R5cGUgPSBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnM6OkNpcmN1bGFy
QXJjOworCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXQgKyA1IDw9IGNvbnRhaW5l
ci52YWx1ZXMuZW5kKCkpOworICAgICAgICAgICAgICAgIEFyY1R5cGUgYXJjIHsgeyBpdFswXSwg
aXRbMV0gfSwgaXRbMl0sIGl0WzNdLCBpdFs0XSB9OworICAgICAgICAgICAgICAgIGl0ICs9IDU7
CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoYXJjLmVuZEFuZ2xlIDw9IGFyYy5zdGFydEFuZ2xl
KQorICAgICAgICAgICAgICAgICAgICBhcmMuZW5kQW5nbGUgKz0gMiAqIE1fUEk7CisKKyAgICAg
ICAgICAgICAgICBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAg
ICAgICAgICAgICAgICBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnM6OmNvbXB1dGU8QXJj
VHlwZT4ocGFyYW1ldGVycywgYXJjKTsKKworICAgICAgICAgICAgICAgIGxpbmVUbyhzdGF0ZS5t
YXAocGFyYW1ldGVycy5wMSkpOworICAgICAgICAgICAgICAgIGdlbmVyYXRlQXJjQ3VydmVzKHRy
dWUsIGFyYy5zdGFydEFuZ2xlLCBhcmMuZW5kQW5nbGUsCisgICAgICAgICAgICAgICAgICAgIFsm
XShjb25zdCBQb2ludCYgY3AxLCBjb25zdCBQb2ludCYgY3AyLCBjb25zdCBQb2ludCYgY3AzKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBjID0g
YXJjLmM7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiByYWRpdXMgPSBhcmMucmFkaXVz
OworCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIG1wMyA9IHN0YXRlLm1hcCh7IGMueCAr
IHJhZGl1cyAqIGNwMy54LCBjLnkgKyByYWRpdXMgKiBjcDMueSB9KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnZlVG8oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubWFw
KHsgYy54ICsgcmFkaXVzICogY3AxLngsIGMueSArIHJhZGl1cyAqIGNwMS55IH0pLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1hcCh7IGMueCArIHJhZGl1cyAqIGNwMi54LCBj
LnkgKyByYWRpdXMgKiBjcDIueSB9KSwgbXAzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRlLmN1cnJlbnRQb2ludCA9IG1wMzsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgICAgICBhdXRvIG1wMiA9IHN0YXRlLm1hcChwYXJhbWV0ZXJzLnAyKTsKKyAgICAgICAg
ICAgICAgICBzdGF0ZS5jdXJyZW50UG9pbnQgPSBtcDI7CisgICAgICAgICAgICAgICAgc3RhdGUu
cHJpb3JFbmRQb2ludCA9IG1wMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNhc2UgQ29tbWFuZDo6Q2lyY3VsYXJDb3VudGVyQ2xvY2t3aXNlQXJj
OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVzaW5nIEFyY1R5cGUgPSBQYXJ0aWFs
RWxsaXB0aWNhbEFyY1BhcmFtZXRlcnM6OkNpcmN1bGFyQXJjOworCisgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaXQgKyA1IDw9IGNvbnRhaW5lci52YWx1ZXMuZW5kKCkpOworICAgICAg
ICAgICAgICAgIEFyY1R5cGUgYXJjIHsgeyBpdFswXSwgaXRbMV0gfSwgaXRbMl0sIGl0WzNdLCBp
dFs0XSB9OworICAgICAgICAgICAgICAgIGl0ICs9IDU7CisKKyAgICAgICAgICAgICAgICB3aGls
ZSAoYXJjLnN0YXJ0QW5nbGUgPCBhcmMuZW5kQW5nbGUpCisgICAgICAgICAgICAgICAgICAgIGFy
Yy5zdGFydEFuZ2xlICs9IDIgKiBNX1BJOworCisgICAgICAgICAgICAgICAgUGFydGlhbEVsbGlw
dGljYWxBcmNQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgICAgICAgICAgICAgUGFydGlhbEVs
bGlwdGljYWxBcmNQYXJhbWV0ZXJzOjpjb21wdXRlPEFyY1R5cGU+KHBhcmFtZXRlcnMsIGFyYyk7
CisKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gbXAxID0gc3Rh
dGUubWFwKHBhcmFtZXRlcnMucDEpOworICAgICAgICAgICAgICAgICAgICBsaW5lVG8obXAxKTsK
KyAgICAgICAgICAgICAgICAgICAgc3RhdGUuY3VycmVudFBvaW50ID0gbXAxOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBnZW5lcmF0ZUFyY0N1cnZlcyhmYWxzZSwgYXJjLnN0
YXJ0QW5nbGUsIGFyYy5lbmRBbmdsZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKGNvbnN0IFBv
aW50JiBjcDEsIGNvbnN0IFBvaW50JiBjcDIsIGNvbnN0IFBvaW50JiBjcDMpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIGMgPSBhcmMuYzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIHJhZGl1cyA9IGFyYy5yYWRpdXM7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gbXAzID0gc3RhdGUubWFwKHsgYy54ICsgcmFkaXVzICog
Y3AzLngsIGMueSArIHJhZGl1cyAqIGNwMy55IH0pOworICAgICAgICAgICAgICAgICAgICAgICAg
Y3VydmVUbygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tYXAoeyBjLnggKyBy
YWRpdXMgKiBjcDEueCwgYy55ICsgcmFkaXVzICogY3AxLnkgfSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUubWFwKHsgYy54ICsgcmFkaXVzICogY3AyLngsIGMueSArIHJhZGl1
cyAqIGNwMi55IH0pLCBtcDMpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuY3VycmVu
dFBvaW50ID0gbXAzOworICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAg
IGF1dG8gbXAyID0gc3RhdGUubWFwKHBhcmFtZXRlcnMucDIpOworICAgICAgICAgICAgICAgIHN0
YXRlLmN1cnJlbnRQb2ludCA9IG1wMjsKKyAgICAgICAgICAgICAgICBzdGF0ZS5wcmlvckVuZFBv
aW50ID0gbXAyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgY2FzZSBDb21tYW5kOjpDaXJjdWxhclRhbmdlbnRBcmM6CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgdXNpbmcgQXJjVHlwZSA9IFBhcnRpYWxFbGxpcHRpY2FsQXJjUGFyYW1l
dGVyczo6Q2lyY3VsYXJUYW5nZW50QXJjOworCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaXQgKyA1IDw9IGNvbnRhaW5lci52YWx1ZXMuZW5kKCkpOworICAgICAgICAgICAgICAgIEFy
Y1R5cGUgYXJjIHsgc3RhdGUubWFwSW52ZXJzZShzdGF0ZS5jdXJyZW50UG9pbnQpLAorICAgICAg
ICAgICAgICAgICAgICB7IGl0WzBdLCBpdFsxXSB9LCB7IGl0WzJdLCBpdFszXSB9LCBpdFs0XSB9
OworICAgICAgICAgICAgICAgIGl0ICs9IDU7CisKKyAgICAgICAgICAgICAgICBpZiAoKGFyYy50
cDAueCA9PSBhcmMudHAxLnggJiYgYXJjLnRwMC55ID09IGFyYy50cDEueSkKKyAgICAgICAgICAg
ICAgICAgICAgfHwgKGFyYy50cDEueCA9PSBhcmMudHAyLnggJiYgYXJjLnRwMS55ID09IGFyYy50
cDIueSkKKyAgICAgICAgICAgICAgICAgICAgfHwgIWFyYy5yYWRpdXMgfHwgIWFyZWFPZlRyaWFu
Z2UoYXJjLnRwMCwgYXJjLnRwMSwgYXJjLnRwMikpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0
byBtdHAxID0gc3RhdGUubWFwKGFyYy50cDEpOworICAgICAgICAgICAgICAgICAgICBsaW5lVG8o
bXRwMSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmN1cnJlbnRQb2ludCA9IG10cDE7Cisg
ICAgICAgICAgICAgICAgICAgIHN0YXRlLnByaW9yRW5kUG9pbnQgPSBtdHAxOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBQ
YXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgICAg
ICBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnM6OmNvbXB1dGU8QXJjVHlwZT4ocGFyYW1l
dGVycywgYXJjKTsKKworICAgICAgICAgICAgICAgIEdlbmVyYWxQYXJhbWV0cmljQXJjIHBhcmFt
ZXRyaWNBcmM7CisgICAgICAgICAgICAgICAgR2VuZXJhbFBhcmFtZXRyaWNBcmM6OmNvbXB1dGUo
cGFyYW1ldHJpY0FyYywgcGFyYW1ldGVycyk7CisgICAgICAgICAgICAgICAgZG91YmxlIHN0YXJ0
QW5nbGUgPSBwYXJhbWV0cmljQXJjLnRoZXRhMTsKKyAgICAgICAgICAgICAgICBkb3VibGUgZW5k
QW5nbGUgPSBwYXJhbWV0cmljQXJjLnRoZXRhMSArIHBhcmFtZXRyaWNBcmMuZHRoZXRhOworCisg
ICAgICAgICAgICAgICAgbGluZVRvKHN0YXRlLm1hcChwYXJhbWV0ZXJzLnAxKSk7CisgICAgICAg
ICAgICAgICAgZ2VuZXJhdGVBcmNDdXJ2ZXMocGFyYW1ldGVycy5mUywgc3RhcnRBbmdsZSwgZW5k
QW5nbGUsCisgICAgICAgICAgICAgICAgICAgIFsmXShjb25zdCBQb2ludCYgY3AxLCBjb25zdCBQ
b2ludCYgY3AyLCBjb25zdCBQb2ludCYgY3AzKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhdXRvJiBjID0gcGFyYW1ldHJpY0FyYy5jOworICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byYgcmFkaXVzID0gYXJjLnJhZGl1czsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byBtcDMgPSBzdGF0ZS5tYXAoeyBjLnggKyByYWRpdXMgKiBjcDMueCwg
Yy55ICsgcmFkaXVzICogY3AzLnkgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZVRv
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1hcCh7IGMueCArIHJhZGl1cyAq
IGNwMS54LCBjLnkgKyByYWRpdXMgKiBjcDEueSB9KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS5tYXAoeyBjLnggKyByYWRpdXMgKiBjcDIueCwgYy55ICsgcmFkaXVzICogY3Ay
LnkgfSksIG1wMyk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jdXJyZW50UG9pbnQg
PSBtcDM7CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgYXV0byBt
cDIgPSBzdGF0ZS5tYXAocGFyYW1ldGVycy5wMik7CisgICAgICAgICAgICAgICAgc3RhdGUuY3Vy
cmVudFBvaW50ID0gbXAyOworICAgICAgICAgICAgICAgIHN0YXRlLnByaW9yRW5kUG9pbnQgPSBt
cDI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj
YXNlIENvbW1hbmQ6OkFyY1RvOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVzaW5n
IEFyY1R5cGUgPSBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFtZXRlcnM6OkFyYzsKKworICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGl0ICsgNyA8PSBjb250YWluZXIudmFsdWVzLmVuZCgp
KTsKKyAgICAgICAgICAgICAgICBBcmNUeXBlIGFyYyB7IHN0YXRlLm1hcEludmVyc2Uoc3RhdGUu
Y3VycmVudFBvaW50KSwgaXRbMF0sIGl0WzFdLCBpdFsyXSwKKyAgICAgICAgICAgICAgICAgICAg
aXRbM10gIT0gMCwgaXRbNF0gIT0gMCwgeyBpdFs1XSwgaXRbNl0gfSB9OworICAgICAgICAgICAg
ICAgIGl0ICs9IDc7CisKKyAgICAgICAgICAgICAgICBQYXJ0aWFsRWxsaXB0aWNhbEFyY1BhcmFt
ZXRlcnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgICAgICBQYXJ0aWFsRWxsaXB0aWNhbEFyY1Bh
cmFtZXRlcnM6OmNvbXB1dGU8QXJjVHlwZT4ocGFyYW1ldGVycywgYXJjKTsKKworICAgICAgICAg
ICAgICAgIC8vIFRPRE8oQXJjVG8pCisgICAgICAgICAgICAgICAgR2VuZXJhbFBhcmFtZXRyaWNB
cmMgcGFyYW1ldHJpY0FyYzsKKyAgICAgICAgICAgICAgICBHZW5lcmFsUGFyYW1ldHJpY0FyYzo6
Y29tcHV0ZShwYXJhbWV0cmljQXJjLCBwYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgICAgICBkb3Vi
bGUgc3RhcnRBbmdsZSA9IHBhcmFtZXRyaWNBcmMudGhldGExOworICAgICAgICAgICAgICAgIGRv
dWJsZSBlbmRBbmdsZSA9IHBhcmFtZXRyaWNBcmMudGhldGExICsgcGFyYW1ldHJpY0FyYy5kdGhl
dGE7CisKKyAgICAgICAgICAgICAgICBkb3VibGUgY29zUGhpID0gc3RkOjpjb3MocGFyYW1ldGVy
cy5waGkpOworICAgICAgICAgICAgICAgIGRvdWJsZSBzaW5QaGkgPSBzdGQ6OnNpbihwYXJhbWV0
ZXJzLnBoaSk7CisKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZUFyY0N1cnZlcyhwYXJhbWV0ZXJz
LmZTLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdKGNvbnN0
IFBvaW50JiBjcDEsIGNvbnN0IFBvaW50JiBjcDIsIGNvbnN0IFBvaW50JiBjcDMpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIGMgPSBwYXJhbWV0
cmljQXJjLmM7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiByYWRpdXNYID0gYXJjLnJh
ZGl1c1g7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiByYWRpdXNZID0gYXJjLnJhZGl1
c1k7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbXAxID0gc3RhdGUubWFwKHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjLnggKyBjb3NQaGkgKiByYWRpdXNYICogY3AxLngg
LSBzaW5QaGkgKiByYWRpdXNZICogY3AxLnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Yy55ICsgc2luUGhpICogcmFkaXVzWCAqIGNwMS54ICsgY29zUGhpICogcmFkaXVzWSAqIGNwMS55
IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBtcDIgPSBzdGF0ZS5tYXAoeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGMueCArIGNvc1BoaSAqIHJhZGl1c1ggKiBjcDIueCAt
IHNpblBoaSAqIHJhZGl1c1kgKiBjcDIueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
LnkgKyBzaW5QaGkgKiByYWRpdXNYICogY3AyLnggKyBjb3NQaGkgKiByYWRpdXNZICogY3AyLnkg
fSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIG1wMyA9IHN0YXRlLm1hcCh7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYy54ICsgY29zUGhpICogcmFkaXVzWCAqIGNwMy54IC0g
c2luUGhpICogcmFkaXVzWSAqIGNwMy55LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMu
eSArIHNpblBoaSAqIHJhZGl1c1ggKiBjcDMueCArIGNvc1BoaSAqIHJhZGl1c1kgKiBjcDMueSB9
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlVG8obXAxLCBtcDIsIG1wMyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jdXJyZW50UG9pbnQgPSBtcDM7CisgICAgICAgICAg
ICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgYXV0byBtcDIgPSBzdGF0ZS5tYXAocGFy
YW1ldGVycy5wMik7CisgICAgICAgICAgICAgICAgc3RhdGUuY3VycmVudFBvaW50ID0gbXAyOwor
ICAgICAgICAgICAgICAgIHN0YXRlLnByaW9yRW5kUG9pbnQgPSBtcDI7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENvbW1hbmQ6OlRyYW5z
Zm9ybToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpdCAr
IDEyIDw9IGNvbnRhaW5lci52YWx1ZXMuZW5kKCkpOworICAgICAgICAgICAgICAgIFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0oaXRbMF0sIGl0WzFdLCBpdFsyXSwgaXRbM10sIGl0
WzRdLCBpdFs1XSk7CisgICAgICAgICAgICAgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGlu
dmVyc2UoaXRbNl0sIGl0WzddLCBpdFs4XSwgaXRbOV0sIGl0WzEwXSwgaXRbMTFdKTsKKyAgICAg
ICAgICAgICAgICBpdCArPSAxMjsKKworICAgICAgICAgICAgICAgIHN0YXRlLnRyYW5zZm9ybS5t
dWx0aXBseShpbnZlcnNlKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS50cmFuc2Zvcm1JbnZlcnNl
ID0gdHJhbnNmb3JtICogc3RhdGUudHJhbnNmb3JtSW52ZXJzZTsKKworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaXQgPT0gY29udGFpbmVyLnZhbHVlcy5lbmQoKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRjEsIHR5cGVuYW1lIEYyLCB0eXBlbmFtZSBGMywgdHlw
ZW5hbWUgRjQ+CisgICAgdm9pZCBhcHBseShjb25zdCBQYXRoQ29udGFpbmVyJiBjb250YWluZXIs
IGNvbnN0IEYxJiBtb3ZlVG8sIGNvbnN0IEYyJiBsaW5lVG8sIGNvbnN0IEYzJiBjdXJ2ZVRvLCBj
b25zdCBGNCYgY2xvc2UpCisgICAgeworICAgICAgICByZXR1cm4gYXBwbHkoY29udGFpbmVyLCBb
XSB7IHJldHVybiB0cnVlOyB9LCBtb3ZlVG8sIGxpbmVUbywgY3VydmVUbywgY2xvc2UpOworICAg
IH0KKworICAgIHZvaWQgYXBwZW5kKEdlbmVyaWNQYXRoJiBwYXRoLCBjb25zdCBQYXRoQ29udGFp
bmVyJiBvdGhlcikKKyAgICB7CisgICAgICAgIGF1dG8gaXQgPSBvdGhlci52YWx1ZXMuYmVnaW4o
KTsKKyAgICAgICAgZm9yIChhdXRvIGNvbW1hbmQgOiBvdGhlci5jb21tYW5kcykgeworICAgICAg
ICAgICAgc3dpdGNoIChjb21tYW5kKSB7CisgICAgICAgICAgICBjYXNlIENvbW1hbmQ6Ok1vdmVU
bzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpdCArIDIg
PD0gb3RoZXIudmFsdWVzLmVuZCgpKTsKKyAgICAgICAgICAgICAgICBWYWx1ZXM8Mj4gdmFsdWVz
IHsgaXRbMF0sIGl0WzFdIH07CisgICAgICAgICAgICAgICAgaXQgKz0gMjsKKworICAgICAgICAg
ICAgICAgIHBhdGguYWRkKENvbW1hbmQ6Ok1vdmVUbywgdmFsdWVzKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ29tbWFuZDo6Q2xvc2U6
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGF0aC5hZGQoQ29tbWFuZDo6Q2xvc2Up
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fz
ZSBDb21tYW5kOjpMaW5lVG86CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoaXQgKyAyIDw9IG90aGVyLnZhbHVlcy5lbmQoKSk7CisgICAgICAgICAgICAgICAg
VmFsdWVzPDI+IHZhbHVlcyB7IGl0WzBdLCBpdFsxXSB9OworICAgICAgICAgICAgICAgIGl0ICs9
IDI7CisKKyAgICAgICAgICAgICAgICBwYXRoLmFkZChDb21tYW5kOjpMaW5lVG8sIHZhbHVlcyk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNl
IENvbW1hbmQ6OlJlY3Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaXQgKyA0IDw9IG90aGVyLnZhbHVlcy5lbmQoKSk7CisgICAgICAgICAgICAgICAgVmFs
dWVzPDQ+IHZhbHVlcyB7IGl0WzBdLCBpdFsxXSwgaXRbMl0sIGl0WzNdIH07CisgICAgICAgICAg
ICAgICAgaXQgKz0gNDsKKworICAgICAgICAgICAgICAgIHBhdGguYWRkKENvbW1hbmQ6OlJlY3Qs
IHZhbHVlcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIENvbW1hbmQ6OlF1YWRyYXRpY0N1cnZlVG86CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXQgKyA0IDw9IG90aGVyLnZhbHVlcy5lbmQoKSk7
CisgICAgICAgICAgICAgICAgVmFsdWVzPDQ+IHZhbHVlcyB7IGl0WzBdLCBpdFsxXSwgaXRbMl0s
IGl0WzNdIH07CisgICAgICAgICAgICAgICAgaXQgKz0gNDsKKworICAgICAgICAgICAgICAgIHBh
dGguYWRkKENvbW1hbmQ6OlF1YWRyYXRpY0N1cnZlVG8sIHZhbHVlcyk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENvbW1hbmQ6OkN1Ymlj
Q3VydmVUbzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChp
dCArIDYgPD0gb3RoZXIudmFsdWVzLmVuZCgpKTsKKyAgICAgICAgICAgICAgICBWYWx1ZXM8Nj4g
dmFsdWVzIHsgaXRbMF0sIGl0WzFdLCBpdFsyXSwgaXRbM10sIGl0WzRdLCBpdFs1XSB9OworICAg
ICAgICAgICAgICAgIGl0ICs9IDY7CisKKyAgICAgICAgICAgICAgICBwYXRoLmFkZChDb21tYW5k
OjpDdWJpY0N1cnZlVG8sIHZhbHVlcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjYXNlIENvbW1hbmQ6OkNpcmN1bGFyQ2xvY2t3aXNlQXJjOgor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGl0ICsgNSA8PSBv
dGhlci52YWx1ZXMuZW5kKCkpOworICAgICAgICAgICAgICAgIFZhbHVlczw1PiB2YWx1ZXMgeyBp
dFswXSwgaXRbMV0sIGl0WzJdLCBpdFszXSwgaXRbNF0gfTsKKyAgICAgICAgICAgICAgICBpdCAr
PSA1OworCisgICAgICAgICAgICAgICAgcGF0aC5hZGQoQ29tbWFuZDo6Q2lyY3VsYXJDbG9ja3dp
c2VBcmMsIHZhbHVlcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYXNlIENvbW1hbmQ6OkNpcmN1bGFyQ291bnRlckNsb2Nrd2lzZUFyYzoKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpdCArIDUgPD0gb3Ro
ZXIudmFsdWVzLmVuZCgpKTsKKyAgICAgICAgICAgICAgICBWYWx1ZXM8NT4gdmFsdWVzIHsgaXRb
MF0sIGl0WzFdLCBpdFsyXSwgaXRbM10sIGl0WzRdIH07CisgICAgICAgICAgICAgICAgaXQgKz0g
NTsKKworICAgICAgICAgICAgICAgIHBhdGguYWRkKENvbW1hbmQ6OkNpcmN1bGFyQ291bnRlckNs
b2Nrd2lzZUFyYywgdmFsdWVzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNhc2UgQ29tbWFuZDo6Q2lyY3VsYXJUYW5nZW50QXJjOgorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGl0ICsgNSA8PSBvdGhlci52
YWx1ZXMuZW5kKCkpOworICAgICAgICAgICAgICAgIFZhbHVlczw1PiB2YWx1ZXMgeyBpdFswXSwg
aXRbMV0sIGl0WzJdLCBpdFszXSwgaXRbNF0gfTsKKyAgICAgICAgICAgICAgICBpdCArPSA1Owor
CisgICAgICAgICAgICAgICAgcGF0aC5hZGQoQ29tbWFuZDo6Q2lyY3VsYXJUYW5nZW50QXJjLCB2
YWx1ZXMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBDb21tYW5kOjpBcmNUbzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChpdCArIDcgPD0gb3RoZXIudmFsdWVzLmVuZCgpKTsKKyAgICAgICAgICAg
ICAgICBWYWx1ZXM8Nz4gdmFsdWVzIHsgaXRbMF0sIGl0WzFdLCBpdFsyXSwgaXRbM10sIGl0WzRd
LCBpdFs1XSwgaXRbNl0gfTsKKyAgICAgICAgICAgICAgICBpdCArPSA3OworCisgICAgICAgICAg
ICAgICAgcGF0aC5hZGQoQ29tbWFuZDo6QXJjVG8sIHZhbHVlcyk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENvbW1hbmQ6OlRyYW5zZm9y
bToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpdCArIDEy
IDw9IG90aGVyLnZhbHVlcy5lbmQoKSk7CisgICAgICAgICAgICAgICAgVmFsdWVzPDEyPiB2YWx1
ZXMgeyBpdFswXSwgaXRbMV0sIGl0WzJdLCBpdFszXSwgaXRbNF0sIGl0WzVdLAorICAgICAgICAg
ICAgICAgICAgICBpdFs2XSwgaXRbN10sIGl0WzhdLCBpdFs5XSwgaXRbMTBdLCBpdFsxMV0gfTsK
KyAgICAgICAgICAgICAgICBpdCArPSAxMjsKKworICAgICAgICAgICAgICAgIHBhdGguYWRkKENv
bW1hbmQ6OlRyYW5zZm9ybSwgdmFsdWVzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGl0ID09IG90aGVyLnZhbHVlcy5lbmQoKSk7CisgICAgfQorfTsKKworc3RydWN0IEZpbGxQ
cm9jZXNzb3IgeworICAgIGVudW0gY2xhc3MgV2luZFJ1bGUgeworICAgICAgICBFdmVuT2RkLAor
ICAgICAgICBXaW5kaW5nLAorICAgIH07CisKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFBhdGhD
b250YWluZXImIGNvbnRhaW5lciwgY29uc3QgUG9pbnQmIHQsIFdpbmRSdWxlIHJ1bGUpCisgICAg
eworICAgICAgICBQb2ludCBzdGFydGluZ1BvaW50OworICAgICAgICBQb2ludCBjdXJyZW50UG9p
bnQ7CisgICAgICAgIGJvb2wgaGFzQ3VycmVudFBvaW50IHsgZmFsc2UgfTsKKyAgICAgICAgYm9v
bCBvbkVkZ2UgeyBmYWxzZSB9OworICAgICAgICBpbnQgd2luZGluZyB7IDAgfTsKKworICAgICAg
ICBCYXNpY1Byb2Nlc3NvciBwcm9jZXNzb3I7CisKKyAgICAgICAgYXV0byBjb21wYXJlRWRnZSA9
CisgICAgICAgICAgICBbJl0oY29uc3QgUG9pbnQmIHAxLCBjb25zdCBQb2ludCYgcDIsIGNvbnN0
IFBvaW50JiBtdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgeworICAg
ICAgICAgICAgICAgICAgICBkb3VibGUgeHAycDEsIHlwMnAxOworICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgeG10cDEsIHltdHAxOworICAgICAgICAgICAgICAgIH0gZGVsdGEgPSB7IHAyLngg
LSBwMS54LCBwMi55IC0gcDEueSwgbXQueCAtIHAxLngsIG10LnkgLSBwMS55IH07CisgICAgICAg
ICAgICAgICAgaWYgKCFkZWx0YS54cDJwMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1k
ZWx0YS54bXRwMTsKKyAgICAgICAgICAgICAgICBpZiAoc3RkOjpzaWduYml0KGRlbHRhLnhwMnAx
KSAhPSBzdGQ6OnNpZ25iaXQoZGVsdGEueG10cDEpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZGVsdGEueHAycDE7CisgICAgICAgICAgICAgICAgcmV0dXJuIChkZWx0YS55bXRwMSAqIGRl
bHRhLnhwMnAxIC0gZGVsdGEueG10cDEgKiBkZWx0YS55cDJwMSk7CisgICAgICAgICAgICB9Owor
CisgICAgICAgIGF1dG8gYWRkRWRnZSA9CisgICAgICAgICAgICBbJl0oUG9pbnQgcDEsIFBvaW50
IHAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBkaXJlY3Rpb24gPSAxOwor
ICAgICAgICAgICAgICAgIGlmIChwMi55IDwgcDEueSkgeworICAgICAgICAgICAgICAgICAgICBk
aXJlY3Rpb24gPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzd2FwKHAxLCBwMik7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCh0LnggPT0gcDEueCAmJiB0
LnkgPT0gcDEueSkKKyAgICAgICAgICAgICAgICAgICAgfHwgKHQueCA9PSBwMi54ICYmIHQueSA9
PSBwMi55KSkgeworICAgICAgICAgICAgICAgICAgICBvbkVkZ2UgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKChwMS55IDw9IHQueSAmJiBwMi55ID49IHQueSkKKyAgICAgICAgICAgICAgICAgICAgJiYg
KChwMS54IDw9IHQueCAmJiBwMi54ID49IHQueCkgfHwgKHAxLnggPj0gdC54ICYmIHAyLnggPD0g
dC54KSkKKyAgICAgICAgICAgICAgICAgICAgJiYgIWFyZWFPZlRyaWFuZ2UocDEsIHAyLCB0KSkg
eworICAgICAgICAgICAgICAgICAgICBvbkVkZ2UgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHQueSA+
PSBwMi55IHx8IHQueSA8IHAxLnkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICBpZiAodC54IDw9IHAxLnggJiYgdC54IDw9IHAyLngpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIGlmICgodC54ID49IHAxLnggJiYgdC54
ID49IHAyLngpIHx8IGNvbXBhcmVFZGdlKHAxLCBwMiwgdCkgPDApCisgICAgICAgICAgICAgICAg
ICAgIHdpbmRpbmcgKz0gZGlyZWN0aW9uOworICAgICAgICAgICAgfTsKKworICAgICAgICBwcm9j
ZXNzb3IuYXBwbHkoY29udGFpbmVyLAorICAgICAgICAgICAgWyZdKGNvbnN0IFBvaW50JiBwKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChvbkVkZ2UpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIGlmIChoYXNDdXJyZW50UG9pbnQpCisg
ICAgICAgICAgICAgICAgICAgIGFkZEVkZ2UoY3VycmVudFBvaW50LCBzdGFydGluZ1BvaW50KTsK
KworICAgICAgICAgICAgICAgIHN0YXJ0aW5nUG9pbnQgPSBwOworICAgICAgICAgICAgICAgIGN1
cnJlbnRQb2ludCA9IHA7CisgICAgICAgICAgICAgICAgaGFzQ3VycmVudFBvaW50ID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbJl0oY29uc3QgUG9pbnQmIHApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG9uRWRnZSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgICAgICAgICAgaWYgKGhhc0N1cnJlbnRQb2ludCkKKyAgICAgICAg
ICAgICAgICAgICAgYWRkRWRnZShjdXJyZW50UG9pbnQsIHApOworCisgICAgICAgICAgICAgICAg
Y3VycmVudFBvaW50ID0gcDsKKyAgICAgICAgICAgICAgICBoYXNDdXJyZW50UG9pbnQgPSB0cnVl
OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFsmXShjb25zdCBQb2ludCYgcDEsIGNvbnN0
IFBvaW50JiBwMiwgY29uc3QgUG9pbnQmIHAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChvbkVkZ2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgICAgIGF1dG8gcDAgPSBwcm9jZXNzb3Iuc3RhdGUuY3VycmVudFBvaW50OworCisgICAgICAg
ICAgICAgICAgYXV0byBjb21wdXRlVmFsdWUgPQorICAgICAgICAgICAgICAgICAgICBbXShkb3Vi
bGUgdCwgZG91YmxlIHYwLCBkb3VibGUgdjEsIGRvdWJsZSB2MiwgZG91YmxlIHYzKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpwb3co
MSAtIHQsIDMpICogdjAgKyAzICogc3RkOjpwb3coMSAtIHQsIDIpICogdCAqIHYxCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKyAzICogKDEgLSB0KSAqIHN0ZDo6cG93KHQsIDIpICogdjIg
KyBzdGQ6OnBvdyh0LCAzKSAqIHYzOworICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAg
ICAgICAgICAgYXV0byBjb21wdXRlRGVyaXZhdGl2ZVZhbHVlID0KKyAgICAgICAgICAgICAgICAg
ICAgW10oZG91YmxlIHQsIGRvdWJsZSB2MCwgZG91YmxlIHYxLCBkb3VibGUgdjIsIGRvdWJsZSB2
MykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6cG93KDEgLSB0LCAyKSAqIDMgKiAodjEgLSB2MCkgKyAyICogKDEgLSB0KSAqIHQgKiAz
ICogKHYyIC0gdjEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzdGQ6OnBvdyh0LCAy
KSAqIDMgKiAodjMgLSB2Mik7CisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
ICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PGRvdWJsZSwgMz4g
cGFyYW1ldGVyVmFsdWVzOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1JbnRlcnNl
Y3Rpb25zIHsgMCB9OworICAgICAgICAgICAgICAgIH0gaW50ZXJzZWN0aW9uczsKKworICAgICAg
ICAgICAgICAgIGF1dG8gYWRkUm9vdCA9CisgICAgICAgICAgICAgICAgICAgIFsmXShkb3VibGUg
dCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQg
Pj0gMCAmJiB0IDw9IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9u
cy5wYXJhbWV0ZXJWYWx1ZXNbaW50ZXJzZWN0aW9ucy5udW1JbnRlcnNlY3Rpb25zKytdID0gdDsK
KyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGF1dG8gY2FsY3VsYXJl
Um9vdHMgPQorICAgICAgICAgICAgICAgICAgICBbJl0oZG91YmxlIHkwLCBkb3VibGUgeTEsIGRv
dWJsZSB5MiwgZG91YmxlIHkzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZCA9
IC15MCArIDMgKiB5MSAtIDMgKiB5MiArIHkzOworICAgICAgICAgICAgICAgICAgICAgICAgZG91
YmxlIGEgPSAzICogeTAgLSA2ICogeTEgKyAzICogeTI7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgYiA9IC0zICogeTAgKyAzICogeTE7CisgICAgICAgICAgICAgICAgICAgICAgICBk
b3VibGUgYyA9IHkwOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRS
b290KC1jIC8gYik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgYjJtNGFjID0gc3RkOjpwb3coYiwgMikgLSA0ICogYSAqIGM7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGIybTRhYyA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSBzcXJ0VmFsdWUgPSBzdGQ6OnNxcnQoYjJtNGFjKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUm9vdCgoLWIgLSBzcXJ0VmFsdWUpIC8gMiAq
IGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb290KCgtYiArIHNxcnRW
YWx1ZSkgLyAyICogYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgYSAvPSBkOworICAgICAgICAgICAgICAgICAgICAgICAg
YiAvPSBkOworICAgICAgICAgICAgICAgICAgICAgICAgYyAvPSBkOworICAgICAgICAgICAgICAg
ICAgICAgICAgZG91YmxlIHAgPSAoMyAqIGIgLSBzdGQ6OnBvdyhhLCAyKSkgLyAzOworICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIHEgPSAoMiAqIHN0ZDo6cG93KGEsIDMpIC0gOSAqIGEg
KiBiICsgMjcgKiBjKSAvIDI3OworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXAgJiYg
IXEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb290KDApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkUm9vdChzdGQ6OmNicnQoLXEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghcSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJvb3QoMCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPCAwKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvdWJsZSBzcXJ0VmFsdWUgPSBzdGQ6OnNxcnQoLXApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSb290KHNxcnRWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJvb3QoLXNxcnRWYWx1ZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgZG91
YmxlIHAzID0gcCAvIDM7CisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgcTIgPSBxIC8g
MjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkaXNjcmltaW5hbnQgPSBzdGQ6OnBv
dyhxMiwgMikgKyBzdGQ6OnBvdyhwMywgMyk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChkaXNjcmltaW5hbnQgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl
IHNxcnREaXNjcmltaW5hbnQgPSBzdGQ6OnNxcnQoZGlzY3JpbWluYW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhZGRSb290KHN0ZDo6Y2JydCgtcTIgKyBzcXJ0RGlzY3JpbWluYW50
KSAtIHN0ZDo6Y2JydChxMiArIHNxcnREaXNjcmltaW5hbnQpIC0gYSAvIDMpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghZGlzY3JpbWluYW50KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkUm9vdCgtMiAqIHN0ZDo6Y2JydChxMikgLSBhIC8gMyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWRkUm9vdChzdGQ6OmNicnQocTIpIC0gYSAvIDMpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHIgPSBzdGQ6OnNxcnQoc3Rk
Ojpwb3coLXAgLyAzLCAzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgcmMgPSBz
dGQ6OmNicnQocik7CisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgdCA9IC1xIC8gKDIg
KiByKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBwaGkgPSBzdGQ6OmFjb3Moc3Rk
OjptYXg8ZG91YmxlPigtMSwgc3RkOjptaW48ZG91YmxlPigxLCB0KSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkUm9vdCgyICogcmMgKiBzdGQ6OmNvcyhwaGkgLyAzKSAtIGEgLyAzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJvb3QoMiAqIHJjICogc3RkOjpjb3MoKHBoaSAr
IDIgKiBNX1BJKSAvIDMpIC0gYSAvIDMpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkUm9v
dCgyICogcmMgKiBzdGQ6OmNvcygocGhpICsgNCAqIE1fUEkpIC8gMykgLSBhIC8gMyk7CisgICAg
ICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBjYWxjdWxhcmVSb290cyhwMC55
IC0gdC55LCBwMS55IC0gdC55LCBwMi55IC0gdC55LCBwMy55IC0gdC55KTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW50ZXJzZWN0aW9ucy5udW1JbnRlcnNlY3Rp
b25zOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIHBhcmFtZXRlclZhbHVlID0g
aW50ZXJzZWN0aW9ucy5wYXJhbWV0ZXJWYWx1ZXNbaV07CisgICAgICAgICAgICAgICAgICAgIGRv
dWJsZSB4ID0gY29tcHV0ZVZhbHVlKHBhcmFtZXRlclZhbHVlLCBwMC54LCBwMS54LCBwMi54LCBw
My54KTsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIGR5ID0gY29tcHV0ZURlcml2YXRpdmVW
YWx1ZShwYXJhbWV0ZXJWYWx1ZSwgcDAueSwgcDEueSwgcDIueSwgcDMueSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHggPT0gdC54KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvbkVk
Z2UgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHggPCB0LngpCisgICAgICAgICAg
ICAgICAgICAgICAgICB3aW5kaW5nICs9IChkeSA+IDApID8gMSA6IC0xOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbJl0KKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAob25FZGdlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgICAgICBpZiAoaGFzQ3VycmVudFBvaW50KQorICAgICAgICAgICAgICAgICAg
ICBhZGRFZGdlKGN1cnJlbnRQb2ludCwgc3RhcnRpbmdQb2ludCk7CisKKyAgICAgICAgICAgICAg
ICBjdXJyZW50UG9pbnQgPSB7IH07CisgICAgICAgICAgICAgICAgaGFzQ3VycmVudFBvaW50ID0g
ZmFsc2U7CisgICAgICAgICAgICB9KTsKKworICAgICAgICBpZiAoaGFzQ3VycmVudFBvaW50KQor
ICAgICAgICAgICAgYWRkRWRnZShjdXJyZW50UG9pbnQsIHN0YXJ0aW5nUG9pbnQpOworCisgICAg
ICAgIGlmIChvbkVkZ2UpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgc3dpdGNo
IChydWxlKSB7CisgICAgICAgIGNhc2UgV2luZFJ1bGU6OkV2ZW5PZGQ6CisgICAgICAgICAgICBy
ZXR1cm4gd2luZGluZyAmIDE7CisgICAgICAgIGNhc2UgV2luZFJ1bGU6OldpbmRpbmc6CisgICAg
ICAgICAgICByZXR1cm4gISF3aW5kaW5nOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXB1dGVCb3VuZHMoY29uc3QgUGF0aENvbnRhaW5lciYg
Y29udGFpbmVyLCBQb2ludCYgYm90dG9tTGVmdCwgUG9pbnQmIHRvcFJpZ2h0KQorICAgIHsKKyAg
ICAgICAgYm90dG9tTGVmdCA9IHsgfTsKKyAgICAgICAgdG9wUmlnaHQgPSB7IH07CisgICAgICAg
IGJvb2wgZXh0ZW50c0luaXRpYWxpemVkID0gZmFsc2U7CisKKyAgICAgICAgYXV0byBleHBhbmRF
eHRlbnRzID0KKyAgICAgICAgICAgIFsmXShjb25zdCBQb2ludCYgcCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAocC54IDwgYm90dG9tTGVmdC54KQorICAgICAgICAgICAgICAg
ICAgICBib3R0b21MZWZ0LnggPSBwLng7CisgICAgICAgICAgICAgICAgaWYgKHAueCA+IHRvcFJp
Z2h0LngpCisgICAgICAgICAgICAgICAgICAgIHRvcFJpZ2h0LnggPSBwLng7CisKKyAgICAgICAg
ICAgICAgICBpZiAocC55IDwgYm90dG9tTGVmdC55KQorICAgICAgICAgICAgICAgICAgICBib3R0
b21MZWZ0LnkgPSBwLnk7CisgICAgICAgICAgICAgICAgaWYgKHAueSA+IHRvcFJpZ2h0LnkpCisg
ICAgICAgICAgICAgICAgICAgIHRvcFJpZ2h0LnkgPSBwLnk7CisgICAgICAgICAgICB9OworCisg
ICAgICAgIEJhc2ljUHJvY2Vzc29yIHByb2Nlc3NvcjsKKyAgICAgICAgcHJvY2Vzc29yLmFwcGx5
KGNvbnRhaW5lciwKKyAgICAgICAgICAgIFsmXShjb25zdCBQb2ludCYgcCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAoIWV4dGVudHNJbml0aWFsaXplZCkgeworICAgICAgICAg
ICAgICAgICAgICBleHRlbnRzSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICBib3R0b21MZWZ0ID0gcDsKKyAgICAgICAgICAgICAgICAgICAgdG9wUmlnaHQgPSBwOworICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBleHBhbmRFeHRlbnRzKHAp
OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFsmXShjb25zdCBQb2ludCYgcCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBleHBhbmRFeHRlbnRzKHApOworICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgIFsmXShjb25zdCBQb2ludCYgcDEsIGNvbnN0IFBvaW50JiBwMiwgY29u
c3QgUG9pbnQmIHAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gcDAgPSBw
cm9jZXNzb3Iuc3RhdGUuY3VycmVudFBvaW50OworCisgICAgICAgICAgICAgICAgc3RydWN0IENv
bXBvbmVudFJvb3RzIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjphcnJheTxkb3VibGUsIDI+
IHJvb3RzOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1Sb290cyB7IDAgfTsKKyAg
ICAgICAgICAgICAgICB9IHhSb290cywgeVJvb3RzOworCisgICAgICAgICAgICAgICAgYXV0byBj
b21wdXRlUm9vdHMgPQorICAgICAgICAgICAgICAgICAgICBbXShDb21wb25lbnRSb290cyYgY29t
cG9uZW50LCBkb3VibGUgdjAsIGRvdWJsZSB2MSwgZG91YmxlIHYyLCBkb3VibGUgdjMpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhID0gMyAq
ICgtdjAgKyAzICogdjEgLSAzICogdjIgKyAzICogdjMpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZG91YmxlIGIgPSA2ICogKHYwIC0gMiAqIHYxICsgdjIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgZG91YmxlIGMgPSAzICogKC12MCArIHYxKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgYjJtNGFjID0g
c3RkOjpwb3coYiwgMikgLSA0ICogYSAqIGM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGIybTRhYyA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJs
ZSBzcXJ0VmFsdWUgPSBzdGQ6OnNxcnQoYjJtNGFjKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29tcG9uZW50LnJvb3RzW2NvbXBvbmVudC5udW1Sb290cysrXSA9ICgtYiAtIHNx
cnRWYWx1ZSkgLyAyICogYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9u
ZW50LnJvb3RzW2NvbXBvbmVudC5udW1Sb290cysrXSA9ICgtYiArIHNxcnRWYWx1ZSkgLyAyICog
YTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQu
cm9vdHNbY29tcG9uZW50Lm51bVJvb3RzKytdID0gLWMgLyBiOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgY29tcHV0
ZVJvb3RzKHhSb290cywgcDAueCwgcDEueCwgcDIueCwgcDMueCk7CisgICAgICAgICAgICAgICAg
Y29tcHV0ZVJvb3RzKHlSb290cywgcDAueSwgcDEueSwgcDIueSwgcDMueSk7CisKKyAgICAgICAg
ICAgICAgICBhdXRvIGNvbXB1dGVWYWx1ZSA9CisgICAgICAgICAgICAgICAgICAgIFtdKGRvdWJs
ZSB0LCBkb3VibGUgdjAsIGRvdWJsZSB2MSwgZG91YmxlIHYyLCBkb3VibGUgdjMpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6OnBvdygx
IC0gdCwgMykgKiB2MCArIDMgKiBzdGQ6OnBvdygxIC0gdCwgMikgKiB0ICogdjEKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICArIDMgKiAoMSAtIHQpICogc3RkOjpwb3codCwgMikgKiB2MiAr
IHN0ZDo6cG93KHQsIDMpICogdjM7CisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAg
ICAgICAgICBhdXRvIGV4cGFuZEV4dGVudHNYID0KKyAgICAgICAgICAgICAgICAgICAgWyZdKGRv
dWJsZSB0LCBkb3VibGUgeDAsIGRvdWJsZSB4MSwgZG91YmxlIHgyLCBkb3VibGUgeDMpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9
IGNvbXB1dGVWYWx1ZSh0LCB4MCwgeDEsIHgyLCB4Myk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodmFsdWUgPCBib3R0b21MZWZ0LngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym90dG9tTGVmdC54ID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUg
PiB0b3BSaWdodC54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcFJpZ2h0LnggPSB2
YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGF1dG8gZXhw
YW5kRXh0ZW50c1kgPQorICAgICAgICAgICAgICAgICAgICBbJl0oZG91YmxlIHQsIGRvdWJsZSB5
MCwgZG91YmxlIHkxLCBkb3VibGUgeTIsIGRvdWJsZSB5MykKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHZhbHVlID0gY29tcHV0ZVZhbHVlKHQs
IHkwLCB5MSwgeTIsIHkzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8IGJv
dHRvbUxlZnQueSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b21MZWZ0LnkgPSB2
YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IHRvcFJpZ2h0LnkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wUmlnaHQueSA9IHZhbHVlOworICAgICAgICAg
ICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgZXhwYW5kRXh0ZW50c1goMCwgcDAueCwg
cDEueCwgcDIueCwgcDMueCk7CisgICAgICAgICAgICAgICAgZXhwYW5kRXh0ZW50c1goMSwgcDAu
eCwgcDEueCwgcDIueCwgcDMueCk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHhSb290cy5udW1Sb290czsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvdWJs
ZSByb290ID0geFJvb3RzLnJvb3RzW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAocm9vdCA+
IDAgJiYgcm9vdCA8IDEpCisgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRFeHRlbnRzWChy
b290LCBwMC54LCBwMS54LCBwMi54LCBwMy54KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBleHBhbmRFeHRlbnRzWSgwLCBwMC55LCBwMS55LCBwMi55LCBwMy55KTsKKyAg
ICAgICAgICAgICAgICBleHBhbmRFeHRlbnRzWSgxLCBwMC55LCBwMS55LCBwMi55LCBwMy55KTsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgeVJvb3RzLm51bVJvb3Rz
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIHJvb3QgPSB5Um9vdHMucm9vdHNb
aV07CisgICAgICAgICAgICAgICAgICAgIGlmIChyb290ID4gMCAmJiByb290IDwgMSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGV4cGFuZEV4dGVudHNZKHJvb3QsIHAwLnksIHAxLnksIHAyLnks
IHAzLnkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBb
Jl0geyB9KTsKKyAgICB9Cit9OworCitzdHJ1Y3QgU3Ryb2tlUHJvY2Vzc29yIHsKKyAgICBzdHJ1
Y3QgU3R5bGUgeworICAgICAgICBlbnVtIGNsYXNzIExpbmVDYXAgeworICAgICAgICAgICAgQnV0
dCwKKyAgICAgICAgICAgIFJvdW5kLAorICAgICAgICAgICAgU3F1YXJlLAorICAgICAgICB9Owor
ICAgICAgICBlbnVtIGNsYXNzIExpbmVKb2luIHsKKyAgICAgICAgICAgIE1pdGVyLAorICAgICAg
ICAgICAgUm91bmQsCisgICAgICAgICAgICBCZXZlbCwKKyAgICAgICAgfTsKKworICAgICAgICBk
b3VibGUgbGluZVdpZHRoIHsgMS4wIH07CisgICAgICAgIExpbmVDYXAgbGluZUNhcCB7IExpbmVD
YXA6OkJ1dHQgfTsKKyAgICAgICAgTGluZUpvaW4gbGluZUpvaW4geyBMaW5lSm9pbjo6TWl0ZXIg
fTsKKyAgICAgICAgZG91YmxlIG1pdGVyTGltaXQgeyA0LjAgfTsKKyAgICB9OworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRjEsIHR5cGVuYW1lIEYyLCB0eXBlbmFtZSBGMywgdHlwZW5hbWUgRjQ+
CisgICAgdm9pZCBzdHJva2UoY29uc3QgUGF0aENvbnRhaW5lciYgY29udGFpbmVyLCBjb25zdCBG
MSYgbGluZVNlZ21lbnQsCisgICAgICAgIGNvbnN0IEYyJiBjdXJ2ZVNlZ21lbnQsIGNvbnN0IEYz
JiBsaW5lQ2FwLCBjb25zdCBGNCYgbGluZUpvaW4pCisgICAgeworICAgICAgICBQb2ludCBzcDsK
KyAgICAgICAgUG9pbnQgY3A7CisKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIGJvb2wg
aXNBY3RpdmUgeyBmYWxzZSB9OworICAgICAgICAgICAgUG9pbnQgdGFuZ2VudFZlY3RvciB7IDAs
IDAgfTsKKyAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgUG9pbnQgcDsKKyAg
ICAgICAgICAgICAgICBQb2ludCB2ZWN0b3I7CisgICAgICAgICAgICB9IHN0YXJ0VmVydGV4Owor
ICAgICAgICB9IHN1YnBhdGg7CisKKyAgICAgICAgQmFzaWNQcm9jZXNzb3IgcHJvY2Vzc29yOwor
ICAgICAgICBwcm9jZXNzb3IuYXBwbHkoY29udGFpbmVyLAorICAgICAgICAgICAgWyZdKGNvbnN0
IFBvaW50JiBwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChzdWJwYXRoLmlz
QWN0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHN0YXJ0VmVjdG9yID0gc3VicGF0
aC5zdGFydFZlcnRleC52ZWN0b3I7CisgICAgICAgICAgICAgICAgICAgIGxpbmVDYXAoc3VicGF0
aC5zdGFydFZlcnRleC5wLCB7IC1zdGFydFZlY3Rvci54LCAtc3RhcnRWZWN0b3IueSB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgbGluZUNhcChjcCwgc3VicGF0aC50YW5nZW50VmVjdG9yKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3VicGF0aC5pc0FjdGl2ZSA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIHNwID0gcDsKKyAgICAgICAgICAgICAgICBjcCA9IHA7
CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgWyZdKGNvbnN0IFBvaW50JiBwKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIFBvaW50IG91dGdvaW5nVmVjdG9yIHsgcC54IC0gY3Au
eCwgcC55IC0gY3AueSB9OworICAgICAgICAgICAgICAgIGlmICghc3VicGF0aC5pc0FjdGl2ZSkg
eworICAgICAgICAgICAgICAgICAgICBzdWJwYXRoLnN0YXJ0VmVydGV4LnAgPSBjcDsKKyAgICAg
ICAgICAgICAgICAgICAgc3VicGF0aC5zdGFydFZlcnRleC52ZWN0b3IgPSBvdXRnb2luZ1ZlY3Rv
cjsKKyAgICAgICAgICAgICAgICAgICAgc3VicGF0aC5pc0FjdGl2ZSA9IHRydWU7CisgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGxpbmVKb2luKGNwLCBzdWJwYXRo
LnRhbmdlbnRWZWN0b3IsIG91dGdvaW5nVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBzdWJwYXRo
LnRhbmdlbnRWZWN0b3IgPSBvdXRnb2luZ1ZlY3RvcjsKKworICAgICAgICAgICAgICAgIGxpbmVT
ZWdtZW50KGNwLCBwKTsKKworICAgICAgICAgICAgICAgIGNwID0gcDsKKyAgICAgICAgICAgIH0s
CisgICAgICAgICAgICBbJl0oY29uc3QgUG9pbnQmIHAxLCBjb25zdCBQb2ludCYgcDIsIGNvbnN0
IFBvaW50JiBwMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIHAwID0gY3A7
CisgICAgICAgICAgICAgICAgUG9pbnQgb3V0Z29pbmdWZWN0b3IgeyAzICogKHAxLnggLSBwMC54
KSwgMyAqIChwMS55IC0gcDAueSkgfTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1YnBhdGguaXNB
Y3RpdmUpIHsKKyAgICAgICAgICAgICAgICAgICAgc3VicGF0aC5zdGFydFZlcnRleC5wID0gY3A7
CisgICAgICAgICAgICAgICAgICAgIHN1YnBhdGguc3RhcnRWZXJ0ZXgudmVjdG9yID0gb3V0Z29p
bmdWZWN0b3I7CisgICAgICAgICAgICAgICAgICAgIHN1YnBhdGguaXNBY3RpdmUgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBsaW5lSm9pbihjcCwg
c3VicGF0aC50YW5nZW50VmVjdG9yLCBvdXRnb2luZ1ZlY3Rvcik7CisgICAgICAgICAgICAgICAg
c3VicGF0aC50YW5nZW50VmVjdG9yID0gb3V0Z29pbmdWZWN0b3I7CisKKyAgICAgICAgICAgICAg
ICBjdXJ2ZVNlZ21lbnQocDAsIHAxLCBwMiwgcDMpOworCisgICAgICAgICAgICAgICAgY3AgPSBw
MzsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbJl0KKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc3VicGF0aC5pc0FjdGl2ZSkgeworICAgICAgICAgICAgICAgICAgICBQ
b2ludCBzcFZlY3RvciB7IHNwLnggLSBjcC54LCBzcC55IC0gY3AueSB9OworICAgICAgICAgICAg
ICAgICAgICBsaW5lSm9pbihjcCwgc3VicGF0aC50YW5nZW50VmVjdG9yLCBzcFZlY3Rvcik7Cisg
ICAgICAgICAgICAgICAgICAgIGxpbmVTZWdtZW50KGNwLCBzcCk7CisgICAgICAgICAgICAgICAg
ICAgIGxpbmVKb2luKHNwLCBzcFZlY3Rvciwgc3VicGF0aC5zdGFydFZlcnRleC52ZWN0b3IpOwor
ICAgICAgICAgICAgICAgICAgICBzdWJwYXRoLmlzQWN0aXZlID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgY3AgPSB7IH07CisgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAgICAgaWYgKHN1YnBhdGguaXNBY3RpdmUpIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiBzdGFydFZlY3RvciA9IHN1YnBhdGguc3RhcnRWZXJ0ZXgudmVjdG9yOworICAgICAgICAgICAg
ICAgIGxpbmVDYXAoc3VicGF0aC5zdGFydFZlcnRleC5wLCB7IC1zdGFydFZlY3Rvci54LCAtc3Rh
cnRWZWN0b3IueSB9KTsKKyAgICAgICAgICAgICAgICBsaW5lQ2FwKGNwLCBzdWJwYXRoLnRhbmdl
bnRWZWN0b3IpOworICAgICAgICAgICAgICAgIHN1YnBhdGguaXNBY3RpdmUgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFBhdGhDb250YWlu
ZXImIGNvbnRhaW5lciwgY29uc3QgU3R5bGUmIHN0eWxlLCBjb25zdCBQb2ludCYgdCkKKyAgICB7
CisgICAgICAgIGJvb2wgY29udGFpbnNQb2ludCA9IGZhbHNlOworCisgICAgICAgIGF1dG8gdmVj
dG9yQW5nbGUgPQorICAgICAgICAgICAgW10oY29uc3QgUG9pbnQmIHYpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKCEhdi54KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjphdGFuKHYueSAvIHYueCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1fUEkgLyAyOwor
ICAgICAgICAgICAgfTsKKworICAgICAgICBhdXRvIHBvaW50SW5UcmlhbmdsZSA9CisgICAgICAg
ICAgICBbJl0oY29uc3QgUG9pbnQmIHAsIGNvbnN0IFBvaW50JiBwMCwgY29uc3QgUG9pbnQmIHAx
LCBjb25zdCBQb2ludCYgcDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZG91Ymxl
IGFyZWEgPSAoLXAxLnkgKiBwMi54ICsgcDAueSAqICgtcDEueCArIHAyLngpICsgcDAueCAqIChw
MS55IC0gcDIueSkgKyBwMS54ICogcDIueSk7CisgICAgICAgICAgICAgICAgZG91YmxlIHMgPSAo
cDAueSAqIHAyLnggLSBwMC54ICogcDIueSArIChwMi55IC0gcDAueSkgKiBwLnggKyAocDAueCAt
IHAyLngpICogcC55KSAvIGFyZWE7CisgICAgICAgICAgICAgICAgZG91YmxlIHQgPSAocDAueCAq
IHAxLnkgLSBwMC55ICogcDEueCArIChwMC55IC0gcDEueSkgKiBwLnggKyAocDEueCAtIHAwLngp
ICogcC55KSAvIGFyZWE7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gcyA+PSAwICYmIHQgPj0g
MCAmJiAoMSAtIHMgLSB0KSA+PSAwOworICAgICAgICAgICAgfTsKKworICAgICAgICBzdHJva2Uo
Y29udGFpbmVyLAorICAgICAgICAgICAgWyZdKGNvbnN0IFBvaW50JiBwMCwgY29uc3QgUG9pbnQm
IHAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVjayB0aGUg
bWF0aC4KKyAgICAgICAgICAgICAgICBQb2ludCBkZWx0YSA9IHsgcDEueCAtIHAwLngsIHAxLnkg
LSBwMC55IH07CisgICAgICAgICAgICAgICAgaWYgKCFkZWx0YS54ICYmICFkZWx0YS55KQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBkb3VibGUgYSA9IC1k
ZWx0YS55OworICAgICAgICAgICAgICAgIGRvdWJsZSBiID0gZGVsdGEueDsKKyAgICAgICAgICAg
ICAgICBkb3VibGUgYyA9IC1hICogcDAueCAtIGIgKiBwMC55OworICAgICAgICAgICAgICAgIGRv
dWJsZSBhMmIyID0gc3RkOjpwb3coYSwgMikgKyBzdGQ6OnBvdyhiLCAyKTsKKyAgICAgICAgICAg
ICAgICBkb3VibGUgYnR4ID0gYiAqIHQueDsKKyAgICAgICAgICAgICAgICBkb3VibGUgYXR5ID0g
YSAqIHQueTsKKworICAgICAgICAgICAgICAgIFBvaW50IHB0IHsgKGIgKiAoYnR4IC0gYXR5KSAt
IGEgKiBjKSAvIGEyYjIsIChhICogKGF0eSAtIGJ0eCkgLSBiICogYykgLyBhMmIyIH07CisgICAg
ICAgICAgICAgICAgZG91YmxlIGRpc3RhbmNlID0gc3RkOjpzcXJ0KHN0ZDo6cG93KHQueCAtIHB0
LngsIDIpICsgc3RkOjpwb3codC55IC0gcHQueSwgMikpOworICAgICAgICAgICAgICAgIGlmIChk
aXN0YW5jZSA+IHN0eWxlLmxpbmVXaWR0aCAvIDIpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgICAgIGRvdWJsZSBtaW5YID0gcDAueDsKKyAgICAgICAgICAgICAg
ICBkb3VibGUgbWF4WCA9IHAxLng7CisgICAgICAgICAgICAgICAgaWYgKG1pblggPiBtYXhYKQor
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAobWluWCwgbWF4WCk7CisgICAgICAgICAgICAg
ICAgaWYgKHB0LnggPCBtaW5YIHx8IHB0LnggPiBtYXhYKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgICAgICBkb3VibGUgbWluWSA9IHAwLnk7CisgICAgICAgICAg
ICAgICAgZG91YmxlIG1heFkgPSBwMS55OworICAgICAgICAgICAgICAgIGlmIChtaW5ZID4gbWF4
WSkKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzd2FwKG1pblksIG1heFkpOworICAgICAgICAg
ICAgICAgIGlmIChwdC55IDwgbWluWSB8fCBwdC55ID4gbWF4WSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgY29udGFpbnNQb2ludCA9IHRydWU7CisgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgWyZdKGNvbnN0IFBvaW50JiBwMCwgY29uc3QgUG9pbnQm
IHAxLCBjb25zdCBQb2ludCYgcDIsIGNvbnN0IFBvaW50JiBwMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogR29vZCBsdWNrLgorICAgICAgICAgICAgICAgIFVOVVNF
RF9QQVJBTShwMCk7CisgICAgICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHAxKTsKKyAgICAgICAg
ICAgICAgICBVTlVTRURfUEFSQU0ocDIpOworICAgICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShw
Myk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgWyZdKGNvbnN0IFBvaW50JiBwLCBjb25z
dCBQb2ludCYgaW5jb21pbmdWZWN0b3IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChzdHlsZS5saW5lQ2FwKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTdHlsZTo6TGlu
ZUNhcDo6QnV0dDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IGNhc2UgU3R5bGU6OkxpbmVDYXA6OlJvdW5kOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgZG91YmxlIGQgPSBzdGQ6OnNxcnQoc3RkOjpwb3cocC54IC0gdC54LCAyKSAr
IHN0ZDo6cG93KHAueSAtIHQueSwgMikpOworICAgICAgICAgICAgICAgICAgICBpZiAoZCA8PSBz
dHlsZS5saW5lV2lkdGggLyAyKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnNQb2lu
dCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgY2FzZSBTdHlsZTo6TGluZUNhcDo6U3F1YXJlOgorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENoZWNrIHRoZSBtYXRoLgor
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgYWxwaGEgPSB2ZWN0b3JBbmdsZShpbmNvbWluZ1Zl
Y3Rvcik7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBvZmZzZXQgPSBzdHlsZS5saW5lV2lk
dGggLyAyOworICAgICAgICAgICAgICAgICAgICBQb2ludCBwcCA9IHsgcC54ICsgb2Zmc2V0ICog
c3RkOjpjb3MoYWxwaGEpLCBwLnkgKyBvZmZzZXQgKiBzdGQ6OnNpbihhbHBoYSkgfTsKKyAgICAg
ICAgICAgICAgICAgICAgUG9pbnQgZGVsdGEgPSB7IHBwLnggLSBwLngsIHBwLnkgLSBwLnkgfTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWx0YS54ICYmICFkZWx0YS55KQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhID0g
LWRlbHRhLnk7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBiID0gZGVsdGEueDsKKyAgICAg
ICAgICAgICAgICAgICAgZG91YmxlIGMgPSAtYSAqIHAueCAtIGIgKiBwLnk7CisgICAgICAgICAg
ICAgICAgICAgIGRvdWJsZSBhMmIyID0gc3RkOjpwb3coYSwgMikgKyBzdGQ6OnBvdyhiLCAyKTsK
KyAgICAgICAgICAgICAgICAgICAgZG91YmxlIGJ0eCA9IGIgKiB0Lng7CisgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSBhdHkgPSBhICogdC55OworCisgICAgICAgICAgICAgICAgICAgIFBvaW50
IHB0IHsgKGIgKiAoYnR4IC0gYXR5KSAtIGEgKiBjKSAvIGEyYjIsIChhICogKGF0eSAtIGJ0eCkg
LSBiICogYykgLyBhMmIyIH07CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkaXN0YW5jZSA9
IHN0ZDo6c3FydChzdGQ6OnBvdyh0LnggLSBwdC54LCAyKSArIHN0ZDo6cG93KHQueSAtIHB0Lnks
IDIpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlID4gc3R5bGUubGluZVdpZHRo
IC8gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAg
ICAgICBkb3VibGUgbWluWCA9IHAueDsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIG1heFgg
PSBwcC54OworICAgICAgICAgICAgICAgICAgICBpZiAobWluWCA+IG1heFgpCisgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnN3YXAobWluWCwgbWF4WCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChwdC54IDwgbWluWCB8fCBwdC54ID4gbWF4WCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAgICAgICAgICAgICBkb3VibGUgbWluWSA9IHAueTsKKyAgICAg
ICAgICAgICAgICAgICAgZG91YmxlIG1heFkgPSBwcC55OworICAgICAgICAgICAgICAgICAgICBp
ZiAobWluWSA+IG1heFkpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAobWluWSwg
bWF4WSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwdC55IDwgbWluWSB8fCBwdC55ID4gbWF4
WSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgICAg
ICBjb250YWluc1BvaW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgWyZdKGNvbnN0IFBvaW50JiBwLCBjb25zdCBQb2ludCYgaW5jb21pbmdWZWN0b3IsIGNv
bnN0IFBvaW50JiBvdXRnb2luZ1ZlY3RvcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHN0eWxlLmxpbmVKb2luKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTdHlsZTo6
TGluZUpvaW46Ok1pdGVyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IENoZWNrIHRoZSBtYXRoLgorICAgICAgICAgICAgICAgICAgICBkb3VibGUgb2Zm
c2V0ID0gc3R5bGUubGluZVdpZHRoIC8gMjsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIG1p
dGVySGFsZkxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgUG9pbnQgcDEsIHAyOworICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUxID0g
dmVjdG9yQW5nbGUoeyAtaW5jb21pbmdWZWN0b3IueCwgLWluY29taW5nVmVjdG9yLnkgfSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUyID0gdmVjdG9yQW5nbGUob3V0Z29p
bmdWZWN0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuZ2xlMiA8IGFuZ2xlMSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAoYW5nbGUxLCBhbmdsZTIpOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgb3BEZWx0YSA9IGFuZ2xlMiAtIGFuZ2xl
MTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pdGVySGFsZkxlbmd0aCA9IHN0ZDo6YWJzKG9m
ZnNldCAvIHN0ZDo6c2luKG9wRGVsdGEgLyAyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBk
b3VibGUgb3AxQW5nbGUgPSBhbmdsZTEgKyAob3BEZWx0YSArIE1fUEkgLyAyKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRvdWJsZSBvcDJBbmdsZSA9IGFuZ2xlMiAtIChvcERlbHRhICsgTV9Q
SSAvIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgcDEgPSB7IHAueCArIG9mZnNldCAqIHN0
ZDo6Y29zKG9wMUFuZ2xlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnkgKyBvZmZz
ZXQgKiBzdGQ6OnNpbihvcDFBbmdsZSkgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHAyID0g
eyBwLnggKyBvZmZzZXQgKiBzdGQ6OmNvcyhvcDJBbmdsZSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcC55ICsgb2Zmc2V0ICogc3RkOjpzaW4ob3AyQW5nbGUpIH07CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUodCwgcCwgcDEsIHAyKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zUG9pbnQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkb3VibGUgYW5nbGUxID0gdmVjdG9yQW5nbGUoaW5jb21pbmdWZWN0b3IpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGFuZ2xlMiA9IHZlY3RvckFuZ2xlKHsgLW91
dGdvaW5nVmVjdG9yLngsIC1vdXRnb2luZ1ZlY3Rvci55IH0pOworICAgICAgICAgICAgICAgICAg
ICAgICAgZG91YmxlIG9wTWlkZGxlQW5nbGUgPSAoYW5nbGUxICsgYW5nbGUyKSAvIDI7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICgyICogbWl0ZXJIYWxmTGVuZ3RoIDw9IHN0eWxlLm1p
dGVyTGltaXQgKiBzdHlsZS5saW5lV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQb2ludCBtcCA9IHsgcC54ICsgbWl0ZXJIYWxmTGVuZ3RoICogc3RkOjpjb3Mob3BNaWRkbGVB
bmdsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAueSArIG1pdGVySGFsZkxl
bmd0aCAqIHN0ZDo6c2luKG9wTWlkZGxlQW5nbGUpIH07CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZSh0LCBwMSwgcDIsIG1wKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGFpbnNQb2ludCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIFN0eWxlOjpMaW5l
Sm9pbjo6Um91bmQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkb3Vi
bGUgZCA9IHN0ZDo6c3FydChzdGQ6OnBvdyhwLnggLSB0LngsIDIpICsgc3RkOjpwb3cocC55IC0g
dC55LCAyKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChkIDw9IHN0eWxlLmxpbmVXaWR0aCAv
IDIpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluc1BvaW50ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBjYXNlIFN0eWxlOjpMaW5lSm9pbjo6QmV2ZWw6CisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2sgdGhlIG1hdGguCisgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSBhbmdsZTEgPSB2ZWN0b3JBbmdsZSh7IC1pbmNvbWluZ1ZlY3Rvci54LCAtaW5j
b21pbmdWZWN0b3IueSB9KTsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIGFuZ2xlMiA9IHZl
Y3RvckFuZ2xlKG91dGdvaW5nVmVjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFuZ2xl
MiA8IGFuZ2xlMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChhbmdsZTEsIGFu
Z2xlMik7CisKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIG9mZnNldCA9IHN0eWxlLmxpbmVX
aWR0aCAvIDI7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBvcERlbHRhID0gYW5nbGUyIC0g
YW5nbGUxOworICAgICAgICAgICAgICAgICAgICBkb3VibGUgb3AxQW5nbGUgPSBhbmdsZTEgKyAo
b3BEZWx0YSArIE1fUEkgLyAyKTsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIG9wMkFuZ2xl
ID0gYW5nbGUyIC0gKG9wRGVsdGEgKyBNX1BJIC8gMik7CisgICAgICAgICAgICAgICAgICAgIFBv
aW50IHAxID0geyBwLnggKyBvZmZzZXQgKiBzdGQ6OmNvcyhvcDFBbmdsZSksCisgICAgICAgICAg
ICAgICAgICAgICAgICBwLnkgKyBvZmZzZXQgKiBzdGQ6OnNpbihvcDFBbmdsZSkgfTsKKyAgICAg
ICAgICAgICAgICAgICAgUG9pbnQgcDIgPSB7IHAueCArIG9mZnNldCAqIHN0ZDo6Y29zKG9wMkFu
Z2xlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHAueSArIG9mZnNldCAqIHN0ZDo6c2luKG9w
MkFuZ2xlKSB9OworCisgICAgICAgICAgICAgICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUodCwg
cCwgcDEsIHAyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zUG9pbnQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiBjb250YWluc1Bv
aW50OworICAgIH0KKworICAgIHZvaWQgY29tcHV0ZUJvdW5kcyhjb25zdCBQYXRoQ29udGFpbmVy
JiBjb250YWluZXIsIGNvbnN0IFN0eWxlJiBzdHlsZSwgUG9pbnQmIGJvdHRvbUxlZnQsIFBvaW50
JiB0b3BSaWdodCkKKyAgICB7CisgICAgICAgIGJvdHRvbUxlZnQgPSB7IH07CisgICAgICAgIHRv
cFJpZ2h0ID0geyB9OworICAgICAgICBib29sIGV4dGVudHNJbml0aWFsaXplZCA9IGZhbHNlOwor
CisgICAgICAgIGF1dG8gdmVjdG9yQW5nbGUgPQorICAgICAgICAgICAgW10oY29uc3QgUG9pbnQm
IHYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCF2LngpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCEhdi55ICYmIHN0ZDo6c2lnbmJpdCh2LnkpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDMgKiBNX1BJIC8gMjsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE1fUEkgLyAyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkb3VibGUg
YW5nbGUgPSBzdGQ6OmF0YW4odi55IC8gdi54KTsKKyAgICAgICAgICAgICAgICBpZiAoc3RkOjpz
aWduYml0KHYueCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbmdsZSArIE1fUEk7Cisg
ICAgICAgICAgICAgICAgaWYgKCEhdi55ICYmIHN0ZDo6c2lnbmJpdCh2LnkpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gYW5nbGUgKyAyICogTV9QSTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gYW5nbGU7CisgICAgICAgICAgICB9OworCisgICAgICAgIGF1dG8gZXhwYW5kRXh0ZW50cyA9
CisgICAgICAgICAgICBbJl0oY29uc3QgUG9pbnQmIHApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKCFleHRlbnRzSW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ym90dG9tTGVmdCA9IHA7CisgICAgICAgICAgICAgICAgICAgIHRvcFJpZ2h0ID0gcDsKKyAgICAg
ICAgICAgICAgICAgICAgZXh0ZW50c0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChw
LnggPCBib3R0b21MZWZ0LngpCisgICAgICAgICAgICAgICAgICAgIGJvdHRvbUxlZnQueCA9IHAu
eDsKKyAgICAgICAgICAgICAgICBpZiAocC54ID4gdG9wUmlnaHQueCkKKyAgICAgICAgICAgICAg
ICAgICAgdG9wUmlnaHQueCA9IHAueDsKKworICAgICAgICAgICAgICAgIGlmIChwLnkgPCBib3R0
b21MZWZ0LnkpCisgICAgICAgICAgICAgICAgICAgIGJvdHRvbUxlZnQueSA9IHAueTsKKyAgICAg
ICAgICAgICAgICBpZiAocC55ID4gdG9wUmlnaHQueSkKKyAgICAgICAgICAgICAgICAgICAgdG9w
UmlnaHQueSA9IHAueTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgc3Ryb2tlKGNvbnRhaW5l
ciwKKyAgICAgICAgICAgIFsmXShjb25zdCBQb2ludCYgcDAsIGNvbnN0IFBvaW50JiBwMSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2sgdGhlIG1hdGguCisg
ICAgICAgICAgICAgICAgZG91YmxlIGFscGhhID0gdmVjdG9yQW5nbGUoeyBwMS54IC0gcDAueCAs
IHAxLnkgLSBwMC55IH0pOworICAgICAgICAgICAgICAgIGRvdWJsZSBvZmZzZXQgPSBzdHlsZS5s
aW5lV2lkdGggLyAyOworICAgICAgICAgICAgICAgIFBvaW50IGRlbHRhID0geyBvZmZzZXQgKiBz
dGQ6OmNvcyhhbHBoYSArIE1fUEkgLyAyKSwgb2Zmc2V0ICogc3RkOjpzaW4oYWxwaGEgKyBNX1BJ
IC8gMikgfTsKKyAgICAgICAgICAgICAgICBleHBhbmRFeHRlbnRzKHsgcDAueCArIGRlbHRhLngs
IHAwLnkgKyBkZWx0YS55IH0pOworICAgICAgICAgICAgICAgIGV4cGFuZEV4dGVudHMoeyBwMC54
IC0gZGVsdGEueCwgcDAueSAtIGRlbHRhLnkgfSk7CisgICAgICAgICAgICAgICAgZXhwYW5kRXh0
ZW50cyh7IHAxLnggKyBkZWx0YS54LCBwMS55ICsgZGVsdGEueSB9KTsKKyAgICAgICAgICAgICAg
ICBleHBhbmRFeHRlbnRzKHsgcDEueCAtIGRlbHRhLngsIHAxLnkgLSBkZWx0YS55IH0pOworICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgIFsmXShjb25zdCBQb2ludCYgcDAsIGNvbnN0IFBvaW50
JiBwMSwgY29uc3QgUG9pbnQmIHAyLCBjb25zdCBQb2ludCYgcDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IEdvb2QgbHVjay4KKyAgICAgICAgICAgICAgICBVTlVT
RURfUEFSQU0ocDApOworICAgICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShwMSk7CisgICAgICAg
ICAgICAgICAgVU5VU0VEX1BBUkFNKHAyKTsKKyAgICAgICAgICAgICAgICBVTlVTRURfUEFSQU0o
cDMpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFsmXShjb25zdCBQb2ludCYgcCwgY29u
c3QgUG9pbnQmIGluY29taW5nVmVjdG9yKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHN3aXRjaCAoc3R5bGUubGluZUNhcCkgeworICAgICAgICAgICAgICAgIGNhc2UgU3R5bGU6Okxp
bmVDYXA6OkJ1dHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICBjYXNlIFN0eWxlOjpMaW5lQ2FwOjpSb3VuZDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSByYWRpdXMgPSBzdHlsZS5saW5lV2lkdGggLyAyOworICAgICAg
ICAgICAgICAgICAgICBleHBhbmRFeHRlbnRzKHsgcC54IC0gcmFkaXVzLCBwLnkgLSByYWRpdXMg
fSk7CisgICAgICAgICAgICAgICAgICAgIGV4cGFuZEV4dGVudHMoeyBwLnggKyByYWRpdXMsIHAu
eSArIHJhZGl1cyB9KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIFN0eWxlOjpMaW5lQ2FwOjpTcXVhcmU6CisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2sgdGhlIG1h
dGguCisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhbHBoYSA9IHZlY3RvckFuZ2xlKGluY29t
aW5nVmVjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIG9mZnNldCA9IHN0eWxlLmxp
bmVXaWR0aCAvIDI7CisgICAgICAgICAgICAgICAgICAgIFBvaW50IGRlbHRhID0geyBvZmZzZXQg
KiBzdGQ6OmNvcyhhbHBoYSArIE1fUEkgLyAyKSwgb2Zmc2V0ICogc3RkOjpzaW4oYWxwaGEgKyBN
X1BJIC8gMikgfTsKKyAgICAgICAgICAgICAgICAgICAgZXhwYW5kRXh0ZW50cyh7IHAueCArIGRl
bHRhLngsIHAueSArIGRlbHRhLnkgfSk7CisgICAgICAgICAgICAgICAgICAgIGV4cGFuZEV4dGVu
dHMoeyBwLnggLSBkZWx0YS54LCBwLnkgLSBkZWx0YS55IH0pOworCisgICAgICAgICAgICAgICAg
ICAgIFBvaW50IHBwID0geyBwLnggKyBvZmZzZXQgKiBzdGQ6OmNvcyhhbHBoYSksIHAueSArIG9m
ZnNldCAqIHN0ZDo6c2luKGFscGhhKSB9OworICAgICAgICAgICAgICAgICAgICBleHBhbmRFeHRl
bnRzKHsgcHAueCArIGRlbHRhLngsIHBwLnkgKyBkZWx0YS55IH0pOworICAgICAgICAgICAgICAg
ICAgICBleHBhbmRFeHRlbnRzKHsgcHAueCAtIGRlbHRhLngsIHBwLnkgLSBkZWx0YS55IH0pOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbJl0oY29uc3QgUG9pbnQmIHAs
IGNvbnN0IFBvaW50JiBpbmNvbWluZ1ZlY3RvciwgY29uc3QgUG9pbnQmIG91dGdvaW5nVmVjdG9y
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoc3R5bGUubGluZUpvaW4p
IHsKKyAgICAgICAgICAgICAgICBjYXNlIFN0eWxlOjpMaW5lSm9pbjo6TWl0ZXI6CisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2sgdGhlIG1hdGgu
CisgICAgICAgICAgICAgICAgICAgIGV4cGFuZEV4dGVudHMocCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgZG91YmxlIG9mZnNldCA9IHN0eWxlLmxpbmVXaWR0aCAvIDI7CisgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSBtaXRlckhhbGZMZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZTEgPSB2ZWN0b3JBbmdsZSh7IC1pbmNv
bWluZ1ZlY3Rvci54LCAtaW5jb21pbmdWZWN0b3IueSB9KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSBhbmdsZTIgPSB2ZWN0b3JBbmdsZShvdXRnb2luZ1ZlY3Rvcik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYW5nbGUyIDwgYW5nbGUxKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6c3dhcChhbmdsZTEsIGFuZ2xlMik7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSBvcERlbHRhID0gYW5nbGUyIC0gYW5nbGUxOworICAgICAgICAgICAgICAg
ICAgICAgICAgbWl0ZXJIYWxmTGVuZ3RoID0gc3RkOjphYnMob2Zmc2V0IC8gc3RkOjpzaW4ob3BE
ZWx0YSAvIDIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBvcDFBbmdsZSA9IGFu
Z2xlMSArIChvcERlbHRhICsgTV9QSSAvIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgZG91
YmxlIG9wMkFuZ2xlID0gYW5nbGUyIC0gKG9wRGVsdGEgKyBNX1BJIC8gMik7CisgICAgICAgICAg
ICAgICAgICAgICAgICBleHBhbmRFeHRlbnRzKHsgcC54ICsgb2Zmc2V0ICogc3RkOjpjb3Mob3Ax
QW5nbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAueSArIG9mZnNldCAqIHN0ZDo6
c2luKG9wMUFuZ2xlKSB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZEV4dGVudHMo
eyBwLnggKyBvZmZzZXQgKiBzdGQ6OmNvcyhvcDJBbmdsZSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcC55ICsgb2Zmc2V0ICogc3RkOjpzaW4ob3AyQW5nbGUpIH0pOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSBhbmdsZTEgPSB2ZWN0b3JBbmdsZShpbmNvbWluZ1ZlY3Rvcik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUyID0gdmVjdG9yQW5nbGUoeyAtb3V0Z29pbmdW
ZWN0b3IueCwgLW91dGdvaW5nVmVjdG9yLnkgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBk
b3VibGUgb3BNaWRkbGVBbmdsZSA9IChhbmdsZTEgKyBhbmdsZTIpIC8gMjsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKDIgKiBtaXRlckhhbGZMZW5ndGggPD0gc3R5bGUubWl0ZXJMaW1p
dCAqIHN0eWxlLmxpbmVXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFu
ZEV4dGVudHMoeyBwLnggKyBtaXRlckhhbGZMZW5ndGggKiBzdGQ6OmNvcyhvcE1pZGRsZUFuZ2xl
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC55ICsgbWl0ZXJIYWxmTGVuZ3Ro
ICogc3RkOjpzaW4ob3BNaWRkbGVBbmdsZSkgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIFN0eWxlOjpMaW5lSm9pbjo6Um91
bmQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkb3VibGUgcmFkaXVz
ID0gc3R5bGUubGluZVdpZHRoIC8gMjsKKyAgICAgICAgICAgICAgICAgICAgZXhwYW5kRXh0ZW50
cyh7IHAueCAtIHJhZGl1cywgcC55IC0gcmFkaXVzIH0pOworICAgICAgICAgICAgICAgICAgICBl
eHBhbmRFeHRlbnRzKHsgcC54ICsgcmFkaXVzLCBwLnkgKyByYWRpdXMgfSk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2Fz
ZSBTdHlsZTo6TGluZUpvaW46OkJldmVsOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IENoZWNrIHRoZSBtYXRoLgorICAgICAgICAgICAgICAgICAgICBl
eHBhbmRFeHRlbnRzKHApOworCisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZTEgPSB2
ZWN0b3JBbmdsZSh7IC1pbmNvbWluZ1ZlY3Rvci54LCAtaW5jb21pbmdWZWN0b3IueSB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgZG91YmxlIGFuZ2xlMiA9IHZlY3RvckFuZ2xlKG91dGdvaW5nVmVj
dG9yKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFuZ2xlMiA8IGFuZ2xlMSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChhbmdsZTEsIGFuZ2xlMik7CisKKyAgICAgICAgICAg
ICAgICAgICAgZG91YmxlIG9mZnNldCA9IHN0eWxlLmxpbmVXaWR0aCAvIDI7CisgICAgICAgICAg
ICAgICAgICAgIGRvdWJsZSBvcERlbHRhID0gYW5nbGUyIC0gYW5nbGUxOworICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgb3AxQW5nbGUgPSBhbmdsZTEgKyAob3BEZWx0YSArIE1fUEkgLyAyKTsK
KyAgICAgICAgICAgICAgICAgICAgZG91YmxlIG9wMkFuZ2xlID0gYW5nbGUyIC0gKG9wRGVsdGEg
KyBNX1BJIC8gMik7CisgICAgICAgICAgICAgICAgICAgIGV4cGFuZEV4dGVudHMoeyBwLnggKyBv
ZmZzZXQgKiBzdGQ6OmNvcyhvcDFBbmdsZSksCisgICAgICAgICAgICAgICAgICAgICAgICBwLnkg
KyBvZmZzZXQgKiBzdGQ6OnNpbihvcDFBbmdsZSkgfSk7CisgICAgICAgICAgICAgICAgICAgIGV4
cGFuZEV4dGVudHMoeyBwLnggKyBvZmZzZXQgKiBzdGQ6OmNvcyhvcDJBbmdsZSksCisgICAgICAg
ICAgICAgICAgICAgICAgICBwLnkgKyBvZmZzZXQgKiBzdGQ6OnNpbihvcDJBbmdsZSkgfSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSW1w
bApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJpY1N0
cm9raW5nU3R5bGVDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dlbmVyaWNTdHJva2luZ1N0eWxlQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjZjNjc3Y2FiNjQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJpY1N0cm9raW5nU3R5bGVDb250ZXh0LmNwcApA
QCAtMCwwICsxLDI3MiBAQAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdlbmVyaWNT
dHJva2luZ1N0eWxlQ29udGV4dC5oIgorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCituYW1lc3BhY2Ug
SW1wbCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitHcmFwaGljc0NvbnRleHQ6Okdy
YXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IEdlbmVyaWNTdHJva2luZ1N0eWxlQ29udGV4dDo6Y3Jl
YXRlRmFjdG9yeShTdHJva2VQcm9jZXNzb3I6OlN0eWxlJiBzdHlsZSkKK3sKKyAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSgKKyAgICAgICAgWyZd
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8R2VuZXJpY1N0cm9raW5nU3R5bGVDb250ZXh0Pihjb250ZXh0LCBz
dHlsZSk7CisgICAgICAgIH0pOworfQorCitHZW5lcmljU3Ryb2tpbmdTdHlsZUNvbnRleHQ6Okdl
bmVyaWNTdHJva2luZ1N0eWxlQ29udGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFN0cm9r
ZVByb2Nlc3Nvcjo6U3R5bGUmIHN0eWxlKQorICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250
ZXh0LCB7IH0sIHsgfSkKKyAgICAsIG1fc3R5bGUoc3R5bGUpCit7Cit9CisKK0dlbmVyaWNTdHJv
a2luZ1N0eWxlQ29udGV4dDo6fkdlbmVyaWNTdHJva2luZ1N0eWxlQ29udGV4dCgpID0gZGVmYXVs
dDsKKworYm9vbCBHZW5lcmljU3Ryb2tpbmdTdHlsZUNvbnRleHQ6Omhhc1BsYXRmb3JtQ29udGV4
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCogR2VuZXJpY1N0cm9raW5nU3R5bGVDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25z
dAoreworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIEdlbmVyaWNTdHJva2luZ1N0eWxl
Q29udGV4dDo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKK3sKKyAgICBpZiAo
ZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQorICAg
ICAgICBtX3N0eWxlLmxpbmVXaWR0aCA9IHN0YXRlLnN0cm9rZVRoaWNrbmVzczsKK30KKwordm9p
ZCBHZW5lcmljU3Ryb2tpbmdTdHlsZUNvbnRleHQ6OmNsZWFyU2hhZG93KCkKK3sKK30KKwordm9p
ZCBHZW5lcmljU3Ryb2tpbmdTdHlsZUNvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2Fw
KQoreworICAgIG1fc3R5bGUubGluZUNhcCA9CisgICAgICAgIFsmXSgpIC0+IFN0cm9rZVByb2Nl
c3Nvcjo6U3R5bGU6OkxpbmVDYXAgeworICAgICAgICAgICAgc3dpdGNoIChsaW5lQ2FwKSB7Cisg
ICAgICAgICAgICBjYXNlIEJ1dHRDYXA6CisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cm9rZVBy
b2Nlc3Nvcjo6U3R5bGU6OkxpbmVDYXA6OkJ1dHQ7CisgICAgICAgICAgICBjYXNlIFJvdW5kQ2Fw
OgorICAgICAgICAgICAgICAgIHJldHVybiBTdHJva2VQcm9jZXNzb3I6OlN0eWxlOjpMaW5lQ2Fw
OjpSb3VuZDsKKyAgICAgICAgICAgIGNhc2UgU3F1YXJlQ2FwOgorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFN0cm9rZVByb2Nlc3Nvcjo6
U3R5bGU6OkxpbmVDYXA6OlNxdWFyZTsKKyAgICAgICAgfSgpOworfQorCit2b2lkIEdlbmVyaWNT
dHJva2luZ1N0eWxlQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQp
Cit7Cit9CisKK3ZvaWQgR2VuZXJpY1N0cm9raW5nU3R5bGVDb250ZXh0OjpzZXRMaW5lSm9pbihM
aW5lSm9pbiBsaW5lSm9pbikKK3sKKyAgICBtX3N0eWxlLmxpbmVKb2luID0KKyAgICAgICAgWyZd
KCkgLT4gU3Ryb2tlUHJvY2Vzc29yOjpTdHlsZTo6TGluZUpvaW4geworICAgICAgICAgICAgc3dp
dGNoIChsaW5lSm9pbikgeworICAgICAgICAgICAgY2FzZSBNaXRlckpvaW46CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFN0cm9rZVByb2Nlc3Nvcjo6U3R5bGU6OkxpbmVKb2luOjpNaXRlcjsKKyAg
ICAgICAgICAgIGNhc2UgUm91bmRKb2luOgorICAgICAgICAgICAgICAgIHJldHVybiBTdHJva2VQ
cm9jZXNzb3I6OlN0eWxlOjpMaW5lSm9pbjo6Um91bmQ7CisgICAgICAgICAgICBjYXNlIEJldmVs
Sm9pbjoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiBTdHJva2VQcm9jZXNzb3I6OlN0eWxlOjpMaW5lSm9pbjo6QmV2ZWw7CisgICAgICAg
IH0oKTsKK30KKwordm9pZCBHZW5lcmljU3Ryb2tpbmdTdHlsZUNvbnRleHQ6OnNldE1pdGVyTGlt
aXQoZmxvYXQgbWl0ZXJMaW1pdCkKK3sKKyAgICBtX3N0eWxlLm1pdGVyTGltaXQgPSBtaXRlckxp
bWl0OworfQorCit2b2lkIEdlbmVyaWNTdHJva2luZ1N0eWxlQ29udGV4dDo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JikKK3sKK30KKwordm9pZCBHZW5lcmljU3Ryb2tpbmdTdHlsZUNvbnRleHQ6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikKK3sKK30KKwordm9pZCBH
ZW5lcmljU3Ryb2tpbmdTdHlsZUNvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdy
YWRpZW50JikKK3sKK30KKwordm9pZCBHZW5lcmljU3Ryb2tpbmdTdHlsZUNvbnRleHQ6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSkKK3sKK30KKwordm9pZCBHZW5lcmljU3Ryb2tpbmdTdHlsZUNvbnRleHQ6OmZpbGxS
b3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1v
ZGUpCit7Cit9CisKK3ZvaWQgR2VuZXJpY1N0cm9raW5nU3R5bGVDb250ZXh0OjpmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImKQoreworfQorCit2b2lkIEdlbmVyaWNTdHJva2luZ1N0eWxlQ29udGV4dDo6
ZmlsbFBhdGgoY29uc3QgUGF0aCYpCit7Cit9CisKK3ZvaWQgR2VuZXJpY1N0cm9raW5nU3R5bGVD
b250ZXh0OjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKQoreworfQorCit2b2lkIEdlbmVy
aWNTdHJva2luZ1N0eWxlQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9h
dCkKK3sKK30KKwordm9pZCBHZW5lcmljU3Ryb2tpbmdTdHlsZUNvbnRleHQ6OnN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYpCit7Cit9CisKK3ZvaWQgR2VuZXJpY1N0cm9raW5nU3R5bGVDb250ZXh0Ojpz
dHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpCit7Cit9CisKK3ZvaWQgR2VuZXJpY1N0cm9r
aW5nU3R5bGVDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikKK3sKK30KKwordm9p
ZCBHZW5lcmljU3Ryb2tpbmdTdHlsZUNvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyJiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50Jiwg
Rm9udFNtb290aGluZ01vZGUpCit7Cit9CisKK0ltYWdlRHJhd1Jlc3VsdCBHZW5lcmljU3Ryb2tp
bmdTdHlsZUNvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikKK3sKKyAgICByZXR1cm4g
SW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOworfQorCitJbWFnZURyYXdSZXN1bHQgR2VuZXJp
Y1N0cm9raW5nU3R5bGVDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNp
emUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpCit7CisgICAgcmV0dXJuIEltYWdlRHJh
d1Jlc3VsdDo6RGlkTm90aGluZzsKK30KKworSW1hZ2VEcmF3UmVzdWx0IEdlbmVyaWNTdHJva2lu
Z1N0eWxlQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdl
OjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKQoreworICAgIHJldHVybiBJ
bWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7Cit9CisKK3ZvaWQgR2VuZXJpY1N0cm9raW5nU3R5
bGVDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImLCBjb25zdCBG
bG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVP
cGVyYXRvciwgQmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uKQoreworfQorCit2b2lkIEdlbmVy
aWNTdHJva2luZ1N0eWxlQ29udGV4dDo6ZHJhd1BhdHRlcm4oSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkK
K3sKK30KKwordm9pZCBHZW5lcmljU3Ryb2tpbmdTdHlsZUNvbnRleHQ6OmRyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGZsb2F0KQoreworfQorCit2b2lkIEdlbmVyaWNTdHJva2luZ1N0eWxlQ29u
dGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKQorewor
fQorCit2b2lkIEdlbmVyaWNTdHJva2luZ1N0eWxlQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgZmxvYXQpCit7
Cit9CisKK3ZvaWQgR2VuZXJpY1N0cm9raW5nU3R5bGVDb250ZXh0OjpkcmF3TGluZUZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUpCit7Cit9CisKK3ZvaWQgR2VuZXJpY1N0cm9raW5nU3R5bGVDb250ZXh0OjpkcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKQoreworfQorCit2b2lkIEdlbmVyaWNTdHJva2luZ1N0eWxlQ29u
dGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYpCit7Cit9CisKK3ZvaWQgR2VuZXJpY1N0cm9raW5n
U3R5bGVDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNv
bnN0IENvbG9yJikKK3sKK30KKwordm9pZCBHZW5lcmljU3Ryb2tpbmdTdHlsZUNvbnRleHQ6OmRy
YXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0
IENvbG9yJikKK3sKK30KKwordm9pZCBHZW5lcmljU3Ryb2tpbmdTdHlsZUNvbnRleHQ6OnNhdmUo
KQoreworfQorCit2b2lkIEdlbmVyaWNTdHJva2luZ1N0eWxlQ29udGV4dDo6cmVzdG9yZSgpCit7
Cit9CisKK3ZvaWQgR2VuZXJpY1N0cm9raW5nU3R5bGVDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQs
IGZsb2F0KQoreworfQorCit2b2lkIEdlbmVyaWNTdHJva2luZ1N0eWxlQ29udGV4dDo6cm90YXRl
KGZsb2F0KQoreworfQorCit2b2lkIEdlbmVyaWNTdHJva2luZ1N0eWxlQ29udGV4dDo6c2NhbGUo
Y29uc3QgRmxvYXRTaXplJikKK3sKK30KKwordm9pZCBHZW5lcmljU3Ryb2tpbmdTdHlsZUNvbnRl
eHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKQoreworfQorCit2b2lkIEdlbmVy
aWNTdHJva2luZ1N0eWxlQ29udGV4dDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpCit7
Cit9CisKK0FmZmluZVRyYW5zZm9ybSBHZW5lcmljU3Ryb2tpbmdTdHlsZUNvbnRleHQ6OmdldENU
TShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkKK3sKKyAgICByZXR1cm4geyB9
OworfQorCit2b2lkIEdlbmVyaWNTdHJva2luZ1N0eWxlQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCkKK3sKK30KKwordm9pZCBHZW5lcmljU3Ryb2tpbmdTdHlsZUNvbnRleHQ6
OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKK3sKK30KKwordm9pZCBHZW5lcmljU3Ryb2tpbmdTdHls
ZUNvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JikKK3sKK30KKwordm9pZCBHZW5lcmljU3Ry
b2tpbmdTdHlsZUNvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikKK3sKK30KKwordm9p
ZCBHZW5lcmljU3Ryb2tpbmdTdHlsZUNvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYpCit7Cit9
CisKK3ZvaWQgR2VuZXJpY1N0cm9raW5nU3R5bGVDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRo
JiwgV2luZFJ1bGUpCit7Cit9CisKK0ludFJlY3QgR2VuZXJpY1N0cm9raW5nU3R5bGVDb250ZXh0
OjpjbGlwQm91bmRzKCkKK3sKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIEdlbmVyaWNTdHJv
a2luZ1N0eWxlQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmKQoreworfQorICAgIAordm9pZCBHZW5lcmljU3Ryb2tpbmdTdHlsZUNvbnRleHQ6
OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpCit7Cit9CisKK0Zsb2F0UmVjdCBHZW5lcmlj
U3Ryb2tpbmdTdHlsZUNvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0
JiwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCit7CisgICAgcmV0dXJuIHsgfTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSW1wbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR2VuZXJpY1N0cm9raW5nU3R5bGVDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmljU3Ryb2tpbmdTdHlsZUNvbnRleHQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZmQ3NGZhMDUwYWMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmljU3Ryb2tpbmdT
dHlsZUNvbnRleHQuaApAQCAtMCwwICsxLDg1IEBACisKKworI2luY2x1ZGUgIkdlbmVyaWNQYXRo
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgorCituYW1lc3BhY2UgSW1wbCB7
CisKK2NsYXNzIEdlbmVyaWNTdHJva2luZ1N0eWxlQ29udGV4dCBmaW5hbCA6IHB1YmxpYyBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRJbXBsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBjcmVhdGVGYWN0b3J5
KFN0cm9rZVByb2Nlc3Nvcjo6U3R5bGUmKTsKKworICAgIEdlbmVyaWNTdHJva2luZ1N0eWxlQ29u
dGV4dChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBTdHJva2VQcm9jZXNzb3I6OlN0eWxlJik7
CisgICAgdmlydHVhbCB+R2VuZXJpY1N0cm9raW5nU3R5bGVDb250ZXh0KCk7CisKKyAgICBib29s
IGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQg
dXBkYXRlU3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUmLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7CisgICAg
dm9pZCBjbGVhclNoYWRvdygpIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRMaW5lQ2FwKFdlYkNv
cmU6OkxpbmVDYXApIG92ZXJyaWRlOworICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFy
cmF5JiwgZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0TGluZUpvaW4oV2ViQ29yZTo6TGlu
ZUpvaW4pIG92ZXJyaWRlOworICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRl
OworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2Vi
Q29yZTo6Q29sb3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkdyYWRpZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBmaWxs
UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdl
YkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Qm
LCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkJsZW5kTW9kZSkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3Im
KSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92
ZXJyaWRlOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBm
bG9hdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgm
KSBvdmVycmlkZTsKKyAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgV2ViQ29yZTo6Rm9u
dCYsIGNvbnN0IFdlYkNvcmU6OkdseXBoQnVmZmVyJiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgV2ViQ29yZTo6Rm9udFNtb290aGluZ01vZGUpIG92ZXJy
aWRlOworCisgICAgV2ViQ29yZTo6SW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShXZWJDb3JlOjpJ
bWFnZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAg
V2ViQ29yZTo6SW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKFdlYkNvcmU6OkltYWdlJiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIGNvbnN0
IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6
SW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKFdlYkNvcmU6OkltYWdlJiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6SW1hZ2U6OlRpbGVSdWxlLCBXZWJDb3JlOjpJbWFnZTo6
VGlsZVJ1bGUsIGNvbnN0IFdlYkNvcmU6OkltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7
CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoY29uc3QgV2ViQ29yZTo6TmF0aXZlSW1hZ2VQdHIm
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2Vi
Q29yZTo6QmxlbmRNb2RlLCBXZWJDb3JlOjpJbWFnZU9yaWVudGF0aW9uKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRyYXdQYXR0ZXJuKFdlYkNvcmU6OkltYWdlJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJh
bnNmb3JtJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpIG92
ZXJyaWRlOworCisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBm
bG9hdCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGluZShjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgY29uc3QgRGFzaEFycmF5
JiwgYm9vbCwgYm9vbCwgZmxvYXQpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0xpbmVGb3JEb2N1
bWVudE1hcmtlcihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgZmxvYXQsIFdlYkNvcmU6OkRv
Y3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1BhdGgoY29u
c3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNv
bnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikg
b3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpG
bG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRl
OworCisgICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQpIG92ZXJyaWRlOworICAgIHZv
aWQgcm90YXRlKGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIHNjYWxlKGNvbnN0IFdlYkNvcmU6
OkZsb2F0U2l6ZSYpIG92ZXJyaWRlOworICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q1RNKGNvbnN0IFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5z
Zm9ybSBnZXRDVE0oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUp
IG92ZXJyaWRlOworCisgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBvdmVy
cmlkZTsKKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIGNsaXAoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBj
bGlwT3V0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgY2xp
cE91dChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjbGlwUGF0aChj
b25zdCBXZWJDb3JlOjpQYXRoJiwgV2ViQ29yZTo6V2luZFJ1bGUpIG92ZXJyaWRlOworICAgIFdl
YkNvcmU6OkludFJlY3QgY2xpcEJvdW5kcygpIG92ZXJyaWRlOworICAgIHZvaWQgY2xpcFRvSW1h
Z2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KSBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQp
IG92ZXJyaWRlOworCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpSb3Vu
ZGluZ01vZGUpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFN0cm9rZVByb2Nlc3Nvcjo6U3R5
bGUmIG1fc3R5bGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbXBsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BhdGguY3BwCmluZGV4IDI5NjkyYWFmYTg4Li4zNGNkNTZiMjk5MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5jcHAKQEAgLTE3NSwxMSAr
MTc1LDEzIEBAIFBhdGggUGF0aDo6cG9seWdvblBhdGhGcm9tUG9pbnRzKGNvbnN0IFZlY3RvcjxG
bG9hdFBvaW50PiYgcG9pbnRzKQogICAgIHJldHVybiBwYXRoOwogfQogCisjaWYgIVVTRShDQUlS
TykKIEZsb2F0UmVjdCBQYXRoOjpmYXN0Qm91bmRpbmdSZWN0KCkgY29uc3QKIHsKICAgICByZXR1
cm4gYm91bmRpbmdSZWN0KCk7CiB9CiAjZW5kaWYKKyNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwog
dm9pZCBQYXRoOjpkdW1wKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BhdGguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bh
dGguaAppbmRleCBmYmE4NTAxODQ4MS4uMmY4ZGQ4ZWU2MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QYXRoLmgKQEAgLTUyLDEwICs1MiwxMCBAQCB0eXBlZGVmIElEMkQxR2Vv
bWV0cnlHcm91cCBQbGF0Zm9ybVBhdGg7CiAKICNlbGlmIFVTRShDQUlSTykKIAotbmFtZXNwYWNl
IFdlYkNvcmUgewotY2xhc3MgQ2Fpcm9QYXRoOworbmFtZXNwYWNlIEltcGwgeworc3RydWN0IEdl
bmVyaWNQYXRoOwogfQotdHlwZWRlZiBXZWJDb3JlOjpDYWlyb1BhdGggUGxhdGZvcm1QYXRoOwor
dXNpbmcgUGxhdGZvcm1QYXRoID0gSW1wbDo6R2VuZXJpY1BhdGg7CiAKICNlbGlmIFVTRShXSU5H
REkpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhH
ZW5lcmljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGhHZW5lcmlj
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzNmMjJmOGM5N2IK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRo
R2VuZXJpYy5jcHAKQEAgLTAsMCArMSw0MzQgQEAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJQYXRoLmgiCisKKyNpbmNsdWRlICJHZW5lcmljUGF0aC5oIgorI2luY2x1ZGUgIkdlbmVy
aWNTdHJva2luZ1N0eWxlQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwu
aCIKKyNpbmNsdWRlICJTdHJva2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRlIDxhcnJheT4KKwor
I2RlZmluZSBJTVBMRU1FTlRFRChmdW5jTmFtZSkgXAorICAgIGlmICgwKSB7IGZwcmludGYoc3Rk
ZXJyLCAiSU1QTEVNRU5URUQoUGF0aCk6ICVzKClcbiIsIGZ1bmNOYW1lKTsgfQorCisjZGVmaW5l
IFVOSU1QTEVNRU5URUQoZnVuY05hbWUpIFwKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlVOSU1QTEVN
RU5URUQoUGF0aCk6ICVzKClcbiIsIGZ1bmNOYW1lKQorCisjZGVmaW5lIFBPT1JMWV9JTVBMRU1F
TlRFRChmdW5jTmFtZSkgXAorICAgIGZwcmludGYoc3RkZXJyLCAiUE9PUkxZX0lNUExFTUVOVEVE
KFBhdGgpOiAlcygpXG4iLCBmdW5jTmFtZSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXRo
OjpQYXRoKCkgPSBkZWZhdWx0OworCitQYXRoOjpQYXRoKGNvbnN0IFBhdGgmIG90aGVyKQorewor
ICAgIGlmIChvdGhlci5tX3BhdGgpIHsKKyAgICAgICAgbV9wYXRoID0gbmV3IEltcGw6OkdlbmVy
aWNQYXRoOworICAgICAgICAqbV9wYXRoID0gKm90aGVyLm1fcGF0aDsKKyAgICB9Cit9CisKK1Bh
dGg6OlBhdGgoUGF0aCYmIG90aGVyKQoreworICAgIG1fcGF0aCA9IG90aGVyLm1fcGF0aDsKKyAg
ICBvdGhlci5tX3BhdGggPSBudWxscHRyOworfQorCitQYXRoJiBQYXRoOjpvcGVyYXRvcj0oY29u
c3QgUGF0aCYgb3RoZXIpCit7CisgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICByZXR1
cm4gKnRoaXM7CisKKyAgICBpZiAobV9wYXRoKQorICAgICAgICBkZWxldGUgbV9wYXRoOworCisg
ICAgaWYgKG90aGVyLm1fcGF0aCkgeworICAgICAgICBtX3BhdGggPSBuZXcgSW1wbDo6R2VuZXJp
Y1BhdGg7CisgICAgICAgICptX3BhdGggPSAqb3RoZXIubV9wYXRoOworICAgIH0gZWxzZQorICAg
ICAgICBtX3BhdGggPSBudWxscHRyOworCisgICAgcmV0dXJuICp0aGlzOworfQorCitQYXRoJiBQ
YXRoOjpvcGVyYXRvcj0oUGF0aCYmIG90aGVyKQoreworICAgIGlmICh0aGlzID09ICZvdGhlcikK
KyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIGlmIChtX3BhdGgpCisgICAgICAgIGRlbGV0ZSBt
X3BhdGg7CisgICAgbV9wYXRoID0gb3RoZXIubV9wYXRoOworICAgIG90aGVyLm1fcGF0aCA9IG51
bGxwdHI7CisgICAgcmV0dXJuICp0aGlzOworfQorCitQYXRoOjp+UGF0aCgpCit7CisgICAgaWYg
KG1fcGF0aCkKKyAgICAgICAgZGVsZXRlIG1fcGF0aDsKK30KKworYm9vbCBQYXRoOjpjb250YWlu
cyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fcGF0aCB8fCAhc3RkOjppc2Zpbml0ZShwb2ludC54KCkpIHx8ICFzdGQ6OmlzZmluaXRl
KHBvaW50LnkoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBQT09STFlfSU1QTEVNRU5U
RUQoX19mdW5jX18pOworCisgICAgYXV0byYgaW1wbCA9ICptX3BhdGg7CisgICAgSW1wbDo6Rmls
bFByb2Nlc3NvciBwcm9jZXNzb3I7CisgICAgcmV0dXJuIHByb2Nlc3Nvci5jb250YWlucyhpbXBs
LmNvbnRhaW5lciwgaW1wbC5pbW1lZGlhdGVTdGF0ZS5tYXAoeyBwb2ludC54KCksIHBvaW50Lnko
KSB9KSwKKyAgICAgICAgcnVsZSA9PSBXaW5kUnVsZTo6RXZlbk9kZAorICAgICAgICAgICAgPyBJ
bXBsOjpGaWxsUHJvY2Vzc29yOjpXaW5kUnVsZTo6RXZlbk9kZAorICAgICAgICAgICAgOiBJbXBs
OjpGaWxsUHJvY2Vzc29yOjpXaW5kUnVsZTo6V2luZGluZyk7Cit9CisKK2Jvb2wgUGF0aDo6c3Ry
b2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGF0aCB8fCAhc3RkOjppc2Zpbml0ZShwb2lu
dC54KCkpIHx8ICFzdGQ6OmlzZmluaXRlKHBvaW50LnkoKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBQT09STFlfSU1QTEVNRU5URUQoX19mdW5jX18pOworCisgICAgSW1wbDo6U3Ryb2tl
UHJvY2Vzc29yOjpTdHlsZSBzdHlsZTsKKyAgICBpZiAoYXBwbGllcikgeworICAgICAgICBHcmFw
aGljc0NvbnRleHQgZ2MoSW1wbDo6R2VuZXJpY1N0cm9raW5nU3R5bGVDb250ZXh0OjpjcmVhdGVG
YWN0b3J5KHN0eWxlKSk7CisgICAgICAgIGFwcGxpZXItPnN0cm9rZVN0eWxlKCZnYyk7CisgICAg
fQorCisgICAgYXV0byYgaW1wbCA9ICptX3BhdGg7CisgICAgSW1wbDo6U3Ryb2tlUHJvY2Vzc29y
IHByb2Nlc3NvcjsKKyAgICByZXR1cm4gcHJvY2Vzc29yLmNvbnRhaW5zKGltcGwuY29udGFpbmVy
LCBzdHlsZSwgaW1wbC5pbW1lZGlhdGVTdGF0ZS5tYXAoeyBwb2ludC54KCksIHBvaW50LnkoKSB9
KSk7Cit9CisKK0Zsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAoreworICAgIFBP
T1JMWV9JTVBMRU1FTlRFRChfX2Z1bmNfXyk7CisgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIHJl
dHVybiB0aGUgdGhpZ2h0ZXN0LWZpdCBib3VuZGluZyBib3ggcG9zc2libGUuCisgICAgcmV0dXJu
IGZhc3RCb3VuZGluZ1JlY3QoKTsKK30KKworRmxvYXRSZWN0IFBhdGg6OmZhc3RCb3VuZGluZ1Jl
Y3QoKSBjb25zdAoreworICAgIGlmICghbV9wYXRoKQorICAgICAgICByZXR1cm4geyB9OworICAg
IFBPT1JMWV9JTVBMRU1FTlRFRChfX2Z1bmNfXyk7CisKKyAgICBhdXRvJiBpbXBsID0gKm1fcGF0
aDsKKyAgICBJbXBsOjpQb2ludCBib3R0b21MZWZ0LCB0b3BSaWdodDsKKyAgICBJbXBsOjpGaWxs
UHJvY2Vzc29yIHByb2Nlc3NvcjsKKyAgICBwcm9jZXNzb3IuY29tcHV0ZUJvdW5kcyhpbXBsLmNv
bnRhaW5lciwgYm90dG9tTGVmdCwgdG9wUmlnaHQpOworCisgICAgYXV0byYgc3RhdGUgPSBpbXBs
LmltbWVkaWF0ZVN0YXRlOworICAgIHN0ZDo6YXJyYXk8SW1wbDo6UG9pbnQsIDQ+IGJvdW5kcyA9
IHsKKyAgICAgICAgc3RhdGUubWFwSW52ZXJzZSh7IGJvdHRvbUxlZnQueCwgYm90dG9tTGVmdC55
IH0pLAorICAgICAgICBzdGF0ZS5tYXBJbnZlcnNlKHsgdG9wUmlnaHQueCwgYm90dG9tTGVmdC55
IH0pLAorICAgICAgICBzdGF0ZS5tYXBJbnZlcnNlKHsgdG9wUmlnaHQueCwgdG9wUmlnaHQueSB9
KSwKKyAgICAgICAgc3RhdGUubWFwSW52ZXJzZSh7IGJvdHRvbUxlZnQueCwgdG9wUmlnaHQueSB9
KQorICAgIH07CisKKyAgICBib3R0b21MZWZ0ID0gYm91bmRzWzBdOworICAgIHRvcFJpZ2h0ID0g
Ym91bmRzWzBdOworICAgIGZvciAoYXV0byYgYm91bmQgOiBib3VuZHMpIHsKKyAgICAgICAgaWYg
KGJvdW5kLnggPCBib3R0b21MZWZ0LngpCisgICAgICAgICAgICBib3R0b21MZWZ0LnggPSBib3Vu
ZC54OworICAgICAgICBlbHNlIGlmIChib3VuZC54ID4gdG9wUmlnaHQueCkKKyAgICAgICAgICAg
IHRvcFJpZ2h0LnggPSBib3VuZC54OworCisgICAgICAgIGlmIChib3VuZC55IDwgYm90dG9tTGVm
dC55KQorICAgICAgICAgICAgYm90dG9tTGVmdC55ID0gYm91bmQueTsKKyAgICAgICAgZWxzZSBp
ZiAoYm91bmQueSA+IHRvcFJpZ2h0LnkpCisgICAgICAgICAgICB0b3BSaWdodC55ID0gYm91bmQu
eTsKKyAgICB9CisKKyAgICByZXR1cm4gRmxvYXRSZWN0OjpuYXJyb3dQcmVjaXNpb24oYm90dG9t
TGVmdC54LCBib3R0b21MZWZ0LnksCisgICAgICAgIHRvcFJpZ2h0LnggLSBib3R0b21MZWZ0Lngs
IHRvcFJpZ2h0LnkgLSBib3R0b21MZWZ0LnkpOworfQorCitGbG9hdFJlY3QgUGF0aDo6c3Ryb2tl
Qm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllcikgY29uc3QKK3sKKyAgICBp
ZiAoIW1fcGF0aCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBQT09STFlfSU1QTEVNRU5URUQo
X19mdW5jX18pOworCisgICAgSW1wbDo6U3Ryb2tlUHJvY2Vzc29yOjpTdHlsZSBzdHlsZTsKKyAg
ICBHcmFwaGljc0NvbnRleHQgZ2MoSW1wbDo6R2VuZXJpY1N0cm9raW5nU3R5bGVDb250ZXh0Ojpj
cmVhdGVGYWN0b3J5KHN0eWxlKSk7CisgICAgaWYgKGFwcGxpZXIpCisgICAgICAgIGFwcGxpZXIt
PnN0cm9rZVN0eWxlKCZnYyk7CisKKyAgICBhdXRvJiBpbXBsID0gKm1fcGF0aDsKKyAgICBJbXBs
OjpQb2ludCBib3R0b21MZWZ0LCB0b3BSaWdodDsKKyAgICBJbXBsOjpTdHJva2VQcm9jZXNzb3Ig
cHJvY2Vzc29yOworICAgIHByb2Nlc3Nvci5jb21wdXRlQm91bmRzKGltcGwuY29udGFpbmVyLCBz
dHlsZSwgYm90dG9tTGVmdCwgdG9wUmlnaHQpOworCisgICAgYXV0byYgc3RhdGUgPSBpbXBsLmlt
bWVkaWF0ZVN0YXRlOworICAgIHN0ZDo6YXJyYXk8SW1wbDo6UG9pbnQsIDQ+IGJvdW5kcyA9IHsK
KyAgICAgICAgc3RhdGUubWFwSW52ZXJzZSh7IGJvdHRvbUxlZnQueCwgYm90dG9tTGVmdC55IH0p
LAorICAgICAgICBzdGF0ZS5tYXBJbnZlcnNlKHsgdG9wUmlnaHQueCwgYm90dG9tTGVmdC55IH0p
LAorICAgICAgICBzdGF0ZS5tYXBJbnZlcnNlKHsgdG9wUmlnaHQueCwgdG9wUmlnaHQueSB9KSwK
KyAgICAgICAgc3RhdGUubWFwSW52ZXJzZSh7IGJvdHRvbUxlZnQueCwgdG9wUmlnaHQueSB9KQor
ICAgIH07CisKKyAgICBib3R0b21MZWZ0ID0gYm91bmRzWzBdOworICAgIHRvcFJpZ2h0ID0gYm91
bmRzWzBdOworICAgIGZvciAoYXV0byYgYm91bmQgOiBib3VuZHMpIHsKKyAgICAgICAgaWYgKGJv
dW5kLnggPCBib3R0b21MZWZ0LngpCisgICAgICAgICAgICBib3R0b21MZWZ0LnggPSBib3VuZC54
OworICAgICAgICBlbHNlIGlmIChib3VuZC54ID4gdG9wUmlnaHQueCkKKyAgICAgICAgICAgIHRv
cFJpZ2h0LnggPSBib3VuZC54OworCisgICAgICAgIGlmIChib3VuZC55IDwgYm90dG9tTGVmdC55
KQorICAgICAgICAgICAgYm90dG9tTGVmdC55ID0gYm91bmQueTsKKyAgICAgICAgZWxzZSBpZiAo
Ym91bmQueSA+IHRvcFJpZ2h0LnkpCisgICAgICAgICAgICB0b3BSaWdodC55ID0gYm91bmQueTsK
KyAgICB9CisKKyAgICByZXR1cm4gRmxvYXRSZWN0OjpuYXJyb3dQcmVjaXNpb24oYm90dG9tTGVm
dC54LCBib3R0b21MZWZ0LnksCisgICAgICAgIHRvcFJpZ2h0LnggLSBib3R0b21MZWZ0LngsIHRv
cFJpZ2h0LnkgLSBib3R0b21MZWZ0LnkpOworfQorCit2b2lkIFBhdGg6OmNsZWFyKCkKK3sKKyAg
ICBpZiAobV9wYXRoKQorICAgICAgICBtX3BhdGgtPmNsZWFyKCk7Cit9CisKK2Jvb2wgUGF0aDo6
aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3BhdGggfHwgbV9wYXRoLT5jb250YWlu
ZXIuY29tbWFuZHMuaXNFbXB0eSgpOworfQorCitib29sIFBhdGg6Omhhc0N1cnJlbnRQb2ludCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGF0aCAmJiAhbV9wYXRoLT5jb250YWluZXIuY29tbWFu
ZHMuaXNFbXB0eSgpOworfQorCitGbG9hdFBvaW50IFBhdGg6OmN1cnJlbnRQb2ludCgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX3BhdGgpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvJiBp
bXBsID0gKm1fcGF0aDsKKyAgICBpZiAoaW1wbC5jb250YWluZXIuY29tbWFuZHMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBwb2ludCA9IGltcGwuaW1tZWRpYXRl
U3RhdGUubWFwSW52ZXJzZShpbXBsLmltbWVkaWF0ZVN0YXRlLmN1cnJlbnRQb2ludCk7CisgICAg
cmV0dXJuIEZsb2F0UG9pbnQ6Om5hcnJvd1ByZWNpc2lvbihwb2ludC54LCBwb2ludC55KTsKK30K
Kwordm9pZCBQYXRoOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBhdXRvJiBp
bXBsID0gKmVuc3VyZVBsYXRmb3JtUGF0aCgpOworICAgIGltcGwuYWRkKEltcGw6OkNvbW1hbmQ6
Ok1vdmVUbywgSW1wbDo6VmFsdWVzPDI+eyBwLngoKSwgcC55KCkgfSk7Cit9CisKK3ZvaWQgUGF0
aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHApCit7CisgICAgYXV0byYgaW1wbCA9ICpl
bnN1cmVQbGF0Zm9ybVBhdGgoKTsKKyAgICBpbXBsLmFkZChJbXBsOjpDb21tYW5kOjpMaW5lVG8s
IEltcGw6OlZhbHVlczwyPiB7IHAueCgpLCBwLnkoKSB9KTsKK30KKwordm9pZCBQYXRoOjphZGRR
dWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIpCit7
CisgICAgYXV0byYgaW1wbCA9ICplbnN1cmVQbGF0Zm9ybVBhdGgoKTsKKyAgICBpbXBsLmFkZChJ
bXBsOjpDb21tYW5kOjpRdWFkcmF0aWNDdXJ2ZVRvLAorICAgICAgICBJbXBsOjpWYWx1ZXM8ND4g
eyBwMS54KCksIHAxLnkoKSwgcDIueCgpLCBwMi55KCkgfSk7Cit9CisKK3ZvaWQgUGF0aDo6YWRk
QmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIs
IGNvbnN0IEZsb2F0UG9pbnQmIHAzKQoreworICAgIGF1dG8mIGltcGwgPSAqZW5zdXJlUGxhdGZv
cm1QYXRoKCk7CisgICAgaW1wbC5hZGQoSW1wbDo6Q29tbWFuZDo6Q3ViaWNDdXJ2ZVRvLAorICAg
ICAgICBJbXBsOjpWYWx1ZXM8Nj4geyBwMS54KCksIHAxLnkoKSwgcDIueCgpLCBwMi55KCksIHAz
LngoKSwgcDMueSgpIH0pOworfQorCit2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9p
bnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQoreworICAgIFBPT1JM
WV9JTVBMRU1FTlRFRChfX2Z1bmNfXyk7CisKKyAgICBhdXRvJiBpbXBsID0gKmVuc3VyZVBsYXRm
b3JtUGF0aCgpOworICAgIGltcGwuYWRkKEltcGw6OkNvbW1hbmQ6OkNpcmN1bGFyVGFuZ2VudEFy
YywKKyAgICAgICAgSW1wbDo6VmFsdWVzPDU+IHsgcDEueCgpLCBwMS55KCksIHAyLngoKSwgcDIu
eSgpLCByYWRpdXMgfSk7Cit9CisKK3ZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKK3sKKyAgICBh
dXRvJiBpbXBsID0gKmVuc3VyZVBsYXRmb3JtUGF0aCgpOworICAgIGltcGwuYWRkKEltcGw6OkNv
bW1hbmQ6OkNsb3NlKTsKK30KKwordm9pZCBQYXRoOjphZGRBcmMoY29uc3QgRmxvYXRQb2ludCYg
cCwgZmxvYXQgcmFkaXVzLCBmbG9hdCBzdGFydEFuZ2xlLCBmbG9hdCBlbmRBbmdsZSwgYm9vbCBh
bnRpY2xvY2t3aXNlKQoreworICAgIFBPT1JMWV9JTVBMRU1FTlRFRChfX2Z1bmNfXyk7CisgICAg
aWYgKCFzdGQ6OmlzZmluaXRlKHJhZGl1cykgfHwgIXN0ZDo6aXNmaW5pdGUoc3RhcnRBbmdsZSkg
fHwgIXN0ZDo6aXNmaW5pdGUoZW5kQW5nbGUpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
JiBpbXBsID0gKmVuc3VyZVBsYXRmb3JtUGF0aCgpOworICAgIGltcGwuYWRkKGFudGljbG9ja3dp
c2UgPworICAgICAgICBJbXBsOjpDb21tYW5kOjpDaXJjdWxhckNvdW50ZXJDbG9ja3dpc2VBcmMg
OiBJbXBsOjpDb21tYW5kOjpDaXJjdWxhckNsb2Nrd2lzZUFyYywKKyAgICAgICAgSW1wbDo6VmFs
dWVzPDU+IHsgcC54KCksIHAueSgpLCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlIH0pOwor
fQorCit2b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGF1
dG8mIGltcGwgPSAqZW5zdXJlUGxhdGZvcm1QYXRoKCk7CisgICAgaW1wbC5hZGQoSW1wbDo6Q29t
bWFuZDo6TW92ZVRvLCBJbXBsOjpWYWx1ZXM8Mj4geyByZWN0LngoKSwgcmVjdC55KCkgfSk7Cisg
ICAgaW1wbC5hZGQoSW1wbDo6Q29tbWFuZDo6UmVjdCwgSW1wbDo6VmFsdWVzPDQ+IHsgcmVjdC54
KCksIHJlY3QueSgpLCByZWN0Lm1heFgoKSwgcmVjdC5tYXhZKCkgfSk7CisgICAgaW1wbC5hZGQo
SW1wbDo6Q29tbWFuZDo6Q2xvc2UpOworfQorCit2b2lkIFBhdGg6OmFkZEVsbGlwc2UoRmxvYXRQ
b2ludCBwLCBmbG9hdCByYWRpdXNYLCBmbG9hdCByYWRpdXNZLCBmbG9hdCByb3RhdGlvbiwgZmxv
YXQgc3RhcnRBbmdsZSwgZmxvYXQgZW5kQW5nbGUsIGJvb2wgYW50aWNsb2Nrd2lzZSkKK3sKKyAg
ICBQT09STFlfSU1QTEVNRU5URUQoX19mdW5jX18pOworCisgICAgd2hpbGUgKGVuZEFuZ2xlIDwg
c3RhcnRBbmdsZSkKKyAgICAgICAgZW5kQW5nbGUgKz0gMiAqIE1fUEk7CisKKyAgICBib29sIGxh
cmdlQXJjRmxhZyA9IChzdGQ6OmFicyhlbmRBbmdsZSAtIHN0YXJ0QW5nbGUpIC0gTV9QSSkgPiAw
OworICAgIGJvb2wgc3dlZXBGbGFnID0gIWFudGljbG9ja3dpc2U7CisKKyAgICBkb3VibGUgY29z
UGhpID0gc3RkOjpjb3Mocm90YXRpb24pOworICAgIGRvdWJsZSBzaW5QaGkgPSBzdGQ6OnNpbihy
b3RhdGlvbik7CisKKyAgICBhdXRvIGNhbGN1bGF0ZUVuZHBvaW50ID0KKyAgICAgICAgWyZdKGRv
dWJsZSBhbmdsZSkKKyAgICAgICAgeworICAgICAgICAgICAgZG91YmxlIHJoQ29zQW5nbGUgPSBy
YWRpdXNYICogc3RkOjpjb3MoYW5nbGUpOworICAgICAgICAgICAgZG91YmxlIHJ2U2luQW5nbGUg
PSByYWRpdXNZICogc3RkOjpzaW4oYW5nbGUpOworCisgICAgICAgICAgICByZXR1cm4gSW1wbDo6
UG9pbnQgeworICAgICAgICAgICAgICAgIHAueCgpICsgY29zUGhpICogcmhDb3NBbmdsZSAtIHNp
blBoaSAqIHJ2U2luQW5nbGUsCisgICAgICAgICAgICAgICAgcC55KCkgKyBzaW5QaGkgKiByaENv
c0FuZ2xlICsgY29zUGhpICogcnZTaW5BbmdsZSB9OworICAgICAgICB9OworCisgICAgSW1wbDo6
UG9pbnQgc3RhcnRQb2ludCA9IGNhbGN1bGF0ZUVuZHBvaW50KHN0YXJ0QW5nbGUpOworICAgIElt
cGw6OlBvaW50IGVuZFBvaW50ID0gY2FsY3VsYXRlRW5kcG9pbnQoZW5kQW5nbGUpOworCisgICAg
YXV0byYgaW1wbCA9ICplbnN1cmVQbGF0Zm9ybVBhdGgoKTsKKyAgICBpbXBsLmFkZChJbXBsOjpD
b21tYW5kOjpMaW5lVG8sIEltcGw6OlZhbHVlczwyPiB7IHN0YXJ0UG9pbnQueCwgc3RhcnRQb2lu
dC55IH0pOworICAgIGltcGwuYWRkKEltcGw6OkNvbW1hbmQ6OkFyY1RvLAorICAgICAgICBJbXBs
OjpWYWx1ZXM8Nz4geyByYWRpdXNYLCByYWRpdXNZLCByb3RhdGlvbiwKKyAgICAgICAgICAgIGxh
cmdlQXJjRmxhZyA/IDEuMCA6IDAsIHN3ZWVwRmxhZyA/IDEuMCA6IDAsIGVuZFBvaW50LngsIGVu
ZFBvaW50LnkgfSk7Cit9CisKK3ZvaWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit7CisgICAgUE9PUkxZX0lNUExFTUVOVEVEKF9fZnVuY19fKTsKKworICAgIGRvdWJs
ZSByb3RhdGlvbiA9IDA7CisgICAgZG91YmxlIGxhcmdlQXJjID0gMS4wOworICAgIGRvdWJsZSBz
d2VlcCA9IDEuMDsKKworICAgIGRvdWJsZSByYWRpdXNYID0gcmVjdC53aWR0aCgpIC8gMjsKKyAg
ICBkb3VibGUgcmFkaXVzWSA9IHJlY3QuaGVpZ2h0KCkgLyAyOworCisgICAgSW1wbDo6UG9pbnQg
YXJjUG9pbnQgPSB7IHJlY3QueCgpICsgcmFkaXVzWCwgcmVjdC55KCkgKyByYWRpdXNZIH07CisK
KyAgICBhdXRvJiBpbXBsID0gKmVuc3VyZVBsYXRmb3JtUGF0aCgpOworICAgIGltcGwuYWRkKElt
cGw6OkNvbW1hbmQ6OkxpbmVUbywgSW1wbDo6VmFsdWVzPDI+IHsgYXJjUG9pbnQueCwgYXJjUG9p
bnQueSB9KTsKKyAgICBpbXBsLmFkZChJbXBsOjpDb21tYW5kOjpBcmNUbywKKyAgICAgICAgSW1w
bDo6VmFsdWVzPDc+IHsgcmFkaXVzWCwgcmFkaXVzWSwgcm90YXRpb24sIGxhcmdlQXJjLCBzd2Vl
cCwgYXJjUG9pbnQueCwgYXJjUG9pbnQueSB9KTsKK30KKwordm9pZCBQYXRoOjphZGRQYXRoKGNv
bnN0IFBhdGgmIHBhdGgsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQoreworICAg
IFVOSU1QTEVNRU5URUQoX19mdW5jX18pOworICAgIGlmICghcGF0aC5tX3BhdGgpCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8gaW52ZXJzZU9wdCA9IHRyYW5zZm9ybS5pbnZlcnNlKCk7Cisg
ICAgaWYgKCFpbnZlcnNlT3B0KQorICAgICAgICByZXR1cm47CisjaWYgMAorICAgIGF1dG8mIGlu
dmVyc2UgPSAqaW52ZXJzZU9wdDsKKworICAgIEltcGw6OkdlbmVyaWNQYXRoIG90aGVyID0gKnBh
dGgubV9wYXRoOworICAgIG90aGVyLmFkZChJbXBsOjpDb21tYW5kOjpUcmFuc2Zvcm0sCisgICAg
ICAgIEltcGw6OlZhbHVlczwxMj4geworICAgICAgICAgICAgdHJhbnNmb3JtLmEoKSwgdHJhbnNm
b3JtLmIoKSwgdHJhbnNmb3JtLmMoKSwKKyAgICAgICAgICAgIHRyYW5zZm9ybS5kKCksIHRyYW5z
Zm9ybS5lKCksIHRyYW5zZm9ybS5mKCksCisgICAgICAgICAgICBpbnZlcnNlLmEoKSwgaW52ZXJz
ZS5iKCksIGludmVyc2UuYygpLAorICAgICAgICAgICAgaW52ZXJzZS5kKCksIGludmVyc2UuZSgp
LCBpbnZlcnNlLmYoKSwKKyAgICAgICAgfSk7CisKKyAgICBhdXRvJiBpbXBsID0gKmVuc3VyZVBs
YXRmb3JtUGF0aCgpOworICAgIEltcGw6OkJhc2ljUHJvY2Vzc29yIHByb2Nlc3NvcjsKKyAgICBw
cm9jZXNzb3IuYXBwZW5kKGltcGwsIG90aGVyLmNvbnRhaW5lcik7CisjZW5kaWYKK30KKwordm9p
ZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIHRyYW5zZm9y
bShBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KSk7Cit9CisKK3ZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKQoreworICAgIGF1dG8gaW52ZXJzZU9wdCA9IHRyYW5zZm9ybS5pbnZlcnNlKCk7Cisg
ICAgaWYgKCFpbnZlcnNlT3B0KQorICAgICAgICByZXR1cm47CisgICAgYXV0byYgaW52ZXJzZSA9
ICppbnZlcnNlT3B0OworCisgICAgYXV0byYgaW1wbCA9ICplbnN1cmVQbGF0Zm9ybVBhdGgoKTsK
KyAgICBpbXBsLmFkZChJbXBsOjpDb21tYW5kOjpUcmFuc2Zvcm0sCisgICAgICAgIEltcGw6OlZh
bHVlczwxMj4geworICAgICAgICAgICAgdHJhbnNmb3JtLmEoKSwgdHJhbnNmb3JtLmIoKSwgdHJh
bnNmb3JtLmMoKSwKKyAgICAgICAgICAgIHRyYW5zZm9ybS5kKCksIHRyYW5zZm9ybS5lKCksIHRy
YW5zZm9ybS5mKCksCisgICAgICAgICAgICBpbnZlcnNlLmEoKSwgaW52ZXJzZS5iKCksIGludmVy
c2UuYygpLAorICAgICAgICAgICAgaW52ZXJzZS5kKCksIGludmVyc2UuZSgpLCBpbnZlcnNlLmYo
KQorICAgICAgICB9KTsKK30KKworUGxhdGZvcm1QYXRoUHRyIFBhdGg6OmVuc3VyZVBsYXRmb3Jt
UGF0aCgpCit7CisgICAgaWYgKCFtX3BhdGgpCisgICAgICAgIG1fcGF0aCA9IG5ldyBJbXBsOjpH
ZW5lcmljUGF0aDsKKyAgICByZXR1cm4gbV9wYXRoOworfQorCit2b2lkIFBhdGg6OmFwcGx5KGNv
bnN0IFBhdGhBcHBsaWVyRnVuY3Rpb24mIGZ1bmN0aW9uKSBjb25zdAoreworICAgIGlmICghbV9w
YXRoKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGQ6OmFycmF5PEZsb2F0UG9pbnQsIDM+IHBv
aW50czsKKyAgICBQYXRoRWxlbWVudCBwYXRoRWxlbWVudCB7IFBhdGhFbGVtZW50TW92ZVRvUG9p
bnQsIHBvaW50cy5kYXRhKCkgfTsKKworICAgIHVzaW5nIFBvaW50ID0gSW1wbDo6UG9pbnQ7Cisg
ICAgYXV0byYgaW1wbCA9ICptX3BhdGg7CisgICAgSW1wbDo6QmFzaWNQcm9jZXNzb3IgcHJvY2Vz
c29yOworICAgIHByb2Nlc3Nvci5hcHBseShpbXBsLmNvbnRhaW5lciwKKyAgICAgICAgWyZdKGNv
bnN0IFBvaW50JiBwKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIG1wID0gaW1wbC5pbW1l
ZGlhdGVTdGF0ZS5tYXBJbnZlcnNlKHApOworCisgICAgICAgICAgICBwYXRoRWxlbWVudC50eXBl
ID0gUGF0aEVsZW1lbnRNb3ZlVG9Qb2ludDsKKyAgICAgICAgICAgIHBvaW50c1swXSA9IEZsb2F0
UG9pbnQ6Om5hcnJvd1ByZWNpc2lvbihtcC54LCBtcC55KTsKKyAgICAgICAgICAgIGZ1bmN0aW9u
KHBhdGhFbGVtZW50KTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKGNvbnN0IFBvaW50JiBwKQor
ICAgICAgICB7CisgICAgICAgICAgICBhdXRvIG1wID0gaW1wbC5pbW1lZGlhdGVTdGF0ZS5tYXBJ
bnZlcnNlKHApOworCisgICAgICAgICAgICBwYXRoRWxlbWVudC50eXBlID0gUGF0aEVsZW1lbnRB
ZGRMaW5lVG9Qb2ludDsKKyAgICAgICAgICAgIHBvaW50c1swXSA9IEZsb2F0UG9pbnQ6Om5hcnJv
d1ByZWNpc2lvbihtcC54LCBtcC55KTsKKyAgICAgICAgICAgIGZ1bmN0aW9uKHBhdGhFbGVtZW50
KTsKKyAgICAgICAgfSwKKyAgICAgICAgWyZdKGNvbnN0IFBvaW50JiBwMSwgY29uc3QgUG9pbnQm
IHAyLCBjb25zdCBQb2ludCYgcDMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gbXAxID0g
aW1wbC5pbW1lZGlhdGVTdGF0ZS5tYXBJbnZlcnNlKHAxKTsKKyAgICAgICAgICAgIGF1dG8gbXAy
ID0gaW1wbC5pbW1lZGlhdGVTdGF0ZS5tYXBJbnZlcnNlKHAyKTsKKyAgICAgICAgICAgIGF1dG8g
bXAzID0gaW1wbC5pbW1lZGlhdGVTdGF0ZS5tYXBJbnZlcnNlKHAzKTsKKworICAgICAgICAgICAg
cGF0aEVsZW1lbnQudHlwZSA9IFBhdGhFbGVtZW50QWRkQ3VydmVUb1BvaW50OworICAgICAgICAg
ICAgcG9pbnRzWzBdID0gRmxvYXRQb2ludDo6bmFycm93UHJlY2lzaW9uKG1wMS54LCBtcDEueSk7
CisgICAgICAgICAgICBwb2ludHNbMV0gPSBGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24obXAy
LngsIG1wMi55KTsKKyAgICAgICAgICAgIHBvaW50c1syXSA9IEZsb2F0UG9pbnQ6Om5hcnJvd1By
ZWNpc2lvbihtcDMueCwgbXAzLnkpOworICAgICAgICAgICAgZnVuY3Rpb24ocGF0aEVsZW1lbnQp
OworICAgICAgICB9LAorICAgICAgICBbJl0oKQorICAgICAgICB7CisgICAgICAgICAgICBwYXRo
RWxlbWVudC50eXBlID0gUGF0aEVsZW1lbnRDbG9zZVN1YnBhdGg7CisgICAgICAgICAgICBmdW5j
dGlvbihwYXRoRWxlbWVudCk7CisgICAgICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb09wZXJhdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAppbmRleCBjNGVjZDkxMGZjNS4uZjE5NjFlNDZhNzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3Bl
cmF0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmNwcApAQCAtNzU0LDcgKzc1NCw3IEBAIHZvaWQgZmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3Qg
RmxvYXRSCiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQuY3IoKTsKIAogICAgIGNh
aXJvX3NhdmUoY3IpOwotICAgIHNldFBhdGhPbkNhaXJvQ29udGV4dChwbGF0Zm9ybUNvbnRleHQu
Y3IoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpKTsKKyAgICBzZXRQYXRoT25DYWly
b0NvbnRleHQocGxhdGZvcm1Db250ZXh0LmNyKCksICpwYXRoLnBsYXRmb3JtUGF0aCgpKTsKICAg
ICBmaWxsQ3VycmVudENhaXJvUGF0aChwbGF0Zm9ybUNvbnRleHQsIGZpbGxTb3VyY2UpOwogICAg
IGNhaXJvX3Jlc3RvcmUoY3IpOwogfQpAQCAtNzYzLDcgKzc2Myw3IEBAIHZvaWQgZmlsbFBhdGgo
UGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCwg
Y29uc3QgRmlsCiB7CiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQuY3IoKTsKIAot
ICAgIHNldFBhdGhPbkNhaXJvQ29udGV4dChjciwgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+Y29udGV4
dCgpKTsKKyAgICBzZXRQYXRoT25DYWlyb0NvbnRleHQoY3IsICpwYXRoLnBsYXRmb3JtUGF0aCgp
KTsKICAgICBkcmF3UGF0aFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIGZpbGxTb3VyY2UsIHsgfSwg
c2hhZG93U3RhdGUsIEZpbGwpOwogICAgIGZpbGxDdXJyZW50Q2Fpcm9QYXRoKHBsYXRmb3JtQ29u
dGV4dCwgZmlsbFNvdXJjZSk7CiB9CkBAIC03ODYsNyArNzg2LDcgQEAgdm9pZCBzdHJva2VQYXRo
KFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgs
IGNvbnN0IFMKIHsKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dC5jcigpOwogCi0g
ICAgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNyLCBwYXRoLnBsYXRmb3JtUGF0aCgpLT5jb250ZXh0
KCkpOworICAgIHNldFBhdGhPbkNhaXJvQ29udGV4dChjciwgKnBhdGgucGxhdGZvcm1QYXRoKCkp
OwogICAgIGRyYXdQYXRoU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgeyB9LCBzdHJva2VTb3VyY2Us
IHNoYWRvd1N0YXRlLCBTdHJva2UpOwogICAgIHByZXBhcmVGb3JTdHJva2luZyhjciwgc3Ryb2tl
U291cmNlLCBQcmVzZXJ2ZUFscGhhKTsKICAgICBjYWlyb19zdHJva2UoY3IpOwpAQCAtMTI1OCw3
ICsxMjU4LDcgQEAgdm9pZCBjbGlwUGF0aChQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1D
b250ZXh0LCBjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZQogICAgIGNhaXJvX3QqIGNyID0gcGxh
dGZvcm1Db250ZXh0LmNyKCk7CiAKICAgICBpZiAoIXBhdGguaXNOdWxsKCkpCi0gICAgICAgIHNl
dFBhdGhPbkNhaXJvQ29udGV4dChjciwgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpKTsK
KyAgICAgICAgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNyLCAqcGF0aC5wbGF0Zm9ybVBhdGgoKSk7
CiAKICAgICBjYWlyb19maWxsX3J1bGVfdCBzYXZlZEZpbGxSdWxlID0gY2Fpcm9fZ2V0X2ZpbGxf
cnVsZShjcik7CiAgICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgY2xpcFJ1bGUgPT0gV2luZFJ1
bGU6OkV2ZW5PZGQgPyBDQUlST19GSUxMX1JVTEVfRVZFTl9PREQgOiBDQUlST19GSUxMX1JVTEVf
V0lORElORyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9DYWlyb1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKaW5kZXggMDRkNjgyZjk0N2YuLmY0YWVlMzE4ZGIy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWly
b1V0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCkBAIC01NCw2ICs1NCw4IEBACiAjaW5jbHVkZSA8Y2Fpcm8t
d2luMzIuaD4KICNlbmRpZgogCisjaW5jbHVkZSAiR2VuZXJpY1BhdGguaCIKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAjaWYgVVNFKEZSRUVUWVBFKSAmJiAhUExBVEZPUk0oR1RLKQpAQCAtOTIs
MTQgKzk0LDM0IEBAIHZvaWQgc2V0U291cmNlUkdCQUZyb21Db2xvcihjYWlyb190KiBjb250ZXh0
LCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgfQogfQogCi12b2lkIGFwcGVuZFBhdGhUb0NhaXJv
Q29udGV4dChjYWlyb190KiB0bywgY2Fpcm9fdCogZnJvbSkKK3ZvaWQgYXBwZW5kUGF0aFRvQ2Fp
cm9Db250ZXh0KGNhaXJvX3QqIHRvLCBJbXBsOjpHZW5lcmljUGF0aCYgaW1wbCkKIHsKLSAgICBh
dXRvIGNhaXJvUGF0aCA9IGNhaXJvX2NvcHlfcGF0aChmcm9tKTsKLSAgICBjYWlyb19hcHBlbmRf
cGF0aCh0bywgY2Fpcm9QYXRoKTsKLSAgICBjYWlyb19wYXRoX2Rlc3Ryb3koY2Fpcm9QYXRoKTsK
KyAgICBJbXBsOjpCYXNpY1Byb2Nlc3NvciBwcm9jZXNzb3I7CisgICAgcHJvY2Vzc29yLmFwcGx5
KGltcGwuY29udGFpbmVyLAorICAgICAgICBbJl0oY29uc3QgSW1wbDo6UG9pbnQmIHApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGF1dG8gbXAgPSBpbXBsLmltbWVkaWF0ZVN0YXRlLm1hcEludmVy
c2UocCk7CisgICAgICAgICAgICBjYWlyb19tb3ZlX3RvKHRvLCBtcC54LCBtcC55KTsKKyAgICAg
ICAgfSwKKyAgICAgICAgWyZdKGNvbnN0IEltcGw6OlBvaW50JiBwKQorICAgICAgICB7CisgICAg
ICAgICAgICBhdXRvIG1wID0gaW1wbC5pbW1lZGlhdGVTdGF0ZS5tYXBJbnZlcnNlKHApOworICAg
ICAgICAgICAgY2Fpcm9fbGluZV90byh0bywgbXAueCwgbXAueSk7CisgICAgICAgIH0sCisgICAg
ICAgIFsmXShjb25zdCBJbXBsOjpQb2ludCYgcDEsIGNvbnN0IEltcGw6OlBvaW50JiBwMiwgY29u
c3QgSW1wbDo6UG9pbnQmIHAzKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIG1wMSA9IGlt
cGwuaW1tZWRpYXRlU3RhdGUubWFwSW52ZXJzZShwMSk7CisgICAgICAgICAgICBhdXRvIG1wMiA9
IGltcGwuaW1tZWRpYXRlU3RhdGUubWFwSW52ZXJzZShwMik7CisgICAgICAgICAgICBhdXRvIG1w
MyA9IGltcGwuaW1tZWRpYXRlU3RhdGUubWFwSW52ZXJzZShwMyk7CisgICAgICAgICAgICBjYWly
b19jdXJ2ZV90byh0bywgbXAxLngsIG1wMS55LCBtcDIueCwgbXAyLnksIG1wMy54LCBtcDMueSk7
CisgICAgICAgIH0sCisgICAgICAgIFsmXQorICAgICAgICB7CisgICAgICAgICAgICBjYWlyb19j
bG9zZV9wYXRoKHRvKTsKKyAgICAgICAgfSk7CiB9CiAKLXZvaWQgc2V0UGF0aE9uQ2Fpcm9Db250
ZXh0KGNhaXJvX3QqIHRvLCBjYWlyb190KiBmcm9tKQordm9pZCBzZXRQYXRoT25DYWlyb0NvbnRl
eHQoY2Fpcm9fdCogdG8sIEltcGw6OkdlbmVyaWNQYXRoJiBmcm9tKQogewogICAgIGNhaXJvX25l
d19wYXRoKHRvKTsKICAgICBhcHBlbmRQYXRoVG9DYWlyb0NvbnRleHQodG8sIGZyb20pOwpAQCAt
MTA3LDkgKzEyOSw4IEBAIHZvaWQgc2V0UGF0aE9uQ2Fpcm9Db250ZXh0KGNhaXJvX3QqIHRvLCBj
YWlyb190KiBmcm9tKQogCiB2b2lkIGFwcGVuZFdlYkNvcmVQYXRoVG9DYWlyb0NvbnRleHQoY2Fp
cm9fdCogY29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGF0aC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBhcHBlbmRQYXRoVG9DYWlyb0NvbnRleHQoY29udGV4
dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKS0+Y29udGV4dCgpKTsKKyAgICBpZiAoIXBhdGguaXNFbXB0
eSgpKQorICAgICAgICBhcHBlbmRQYXRoVG9DYWlyb0NvbnRleHQoY29udGV4dCwgKnBhdGgucGxh
dGZvcm1QYXRoKCkpOwogfQogCiB2b2lkIGFwcGVuZFJlZ2lvblRvQ2Fpcm9Db250ZXh0KGNhaXJv
X3QqIHRvLCBjb25zdCBjYWlyb19yZWdpb25fdCogcmVnaW9uKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKaW5kZXgg
MzgxZDNjOGVlYmMuLmJlZTg1M2I0NmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKQEAgLTM5LDYgKzM5LDEw
IEBACiAjaW5jbHVkZSA8Y2Fpcm8tZnQuaD4KICNlbmRpZgogCituYW1lc3BhY2UgSW1wbCB7Citz
dHJ1Y3QgR2VuZXJpY1BhdGg7Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFmZmlu
ZVRyYW5zZm9ybTsKIGNsYXNzIENvbG9yOwpAQCAtNzYsOCArODAsMTEgQEAgY29uc3QgY2Fpcm9f
Zm9udF9vcHRpb25zX3QqIGdldERlZmF1bHRDYWlyb0ZvbnRPcHRpb25zKCk7CiAKIHZvaWQgY29w
eUNvbnRleHRQcm9wZXJ0aWVzKGNhaXJvX3QqIHNyY0NyLCBjYWlyb190KiBkc3RDcik7CiB2b2lk
IHNldFNvdXJjZVJHQkFGcm9tQ29sb3IoY2Fpcm9fdCosIGNvbnN0IENvbG9yJik7CisjaWYgMAog
dm9pZCBhcHBlbmRQYXRoVG9DYWlyb0NvbnRleHQoY2Fpcm9fdCogdG8sIGNhaXJvX3QqIGZyb20p
Owogdm9pZCBzZXRQYXRoT25DYWlyb0NvbnRleHQoY2Fpcm9fdCogdG8sIGNhaXJvX3QqIGZyb20p
OworI2VuZGlmCit2b2lkIHNldFBhdGhPbkNhaXJvQ29udGV4dChjYWlyb190KiB0bywgSW1wbDo6
R2VuZXJpY1BhdGgmIGZyb20pOwogdm9pZCBhcHBlbmRXZWJDb3JlUGF0aFRvQ2Fpcm9Db250ZXh0
KGNhaXJvX3QqIGNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgpOwogdm9pZCBhcHBlbmRSZWdpb25U
b0NhaXJvQ29udGV4dChjYWlyb190KiwgY29uc3QgY2Fpcm9fcmVnaW9uX3QqKTsKIGNhaXJvX29w
ZXJhdG9yX3QgdG9DYWlyb09wZXJhdG9yKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBC
bGVuZE1vZGVOb3JtYWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKaW5kZXggMDZkOWQ3NDk0YTQuLmFmM2Q5Nzc3Yjk1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fp
cm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRD
YWlyby5jcHAKQEAgLTE3OCw2ICsxNzgsOCBAQCBQYXRoIENhaXJvR2x5cGhUb1BhdGhUcmFuc2xh
dG9yOjpwYXRoKCkKICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5lbnN1cmVQbGF0Zm9ybVBhdGgo
KTsKIAorICAgIC8vIEZJWE1FOgorI2lmIDAKICAgICBjYWlyb19nbHlwaF90IGNhaXJvR2x5cGgg
PSB7IG1fZ2x5cGhCdWZmZXIuZ2x5cGhBdChtX2luZGV4KSwgMCwgMCB9OwogICAgIGNhaXJvX3Nl
dF9zY2FsZWRfZm9udChwYXRoLnBsYXRmb3JtUGF0aCgpLT5jb250ZXh0KCksIG1fZm9udERhdGEt
PnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKSk7CiAgICAgY2Fpcm9fZ2x5cGhfcGF0aChwYXRo
LnBsYXRmb3JtUGF0aCgpLT5jb250ZXh0KCksICZjYWlyb0dseXBoLCAxKTsKQEAgLTE4Nyw2ICsx
ODksNyBAQCBQYXRoIENhaXJvR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpwYXRoKCkKICAgICAgICAg
Y2Fpcm9fdHJhbnNsYXRlKHBhdGgucGxhdGZvcm1QYXRoKCktPmNvbnRleHQoKSwgc3ludGhldGlj
Qm9sZE9mZnNldCwgMCk7CiAgICAgICAgIGNhaXJvX2dseXBoX3BhdGgocGF0aC5wbGF0Zm9ybVBh
dGgoKS0+Y29udGV4dCgpLCAmY2Fpcm9HbHlwaCwgMSk7CiAgICAgfQorI2VuZGlmCiAKICAgICBw
YXRoLnRyYW5zZm9ybShtX3RyYW5zbGF0aW9uKTsKICAgICByZXR1cm4gcGF0aDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>