<?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>78633</bug_id>
          
          <creation_ts>2012-02-14 14:36:06 -0800</creation_ts>
          <short_desc>[BlackBerry] Upstreaming WebSettings code</short_desc>
          <delta_ts>2012-02-16 09:11:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>73144</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nima Ghanavatian">nima.ghanavatian</reporter>
          <assigned_to name="Nima Ghanavatian">nima.ghanavatian</assigned_to>
          <cc>jkjiang</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>556611</commentid>
    <comment_count>0</comment_count>
    <who name="Nima Ghanavatian">nima.ghanavatian</who>
    <bug_when>2012-02-14 14:36:06 -0800</bug_when>
    <thetext>This includes WebSettings.cpp, WebSettings.h and WebSettings_p.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556633</commentid>
    <comment_count>1</comment_count>
      <attachid>127049</attachid>
    <who name="Nima Ghanavatian">nima.ghanavatian</who>
    <bug_when>2012-02-14 14:49:59 -0800</bug_when>
    <thetext>Created attachment 127049
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556640</commentid>
    <comment_count>2</comment_count>
    <who name="Jacky Jiang">jkjiang</who>
    <bug_when>2012-02-14 14:52:46 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=127049) [details]
&gt; Patch

I already created the bug https://bugs.webkit.org/show_bug.cgi?id=74379 before, you can mark either of  this as dup if you&apos;d like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556684</commentid>
    <comment_count>3</comment_count>
      <attachid>127049</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-02-14 15:30:08 -0800</bug_when>
    <thetext>Comment on attachment 127049
Patch

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

&gt; Source/WebKit/blackberry/Api/WebSettings.cpp:29
&gt; +#include &lt;wtf/Vector.h&gt;

Are all these needed?

&gt; Source/WebKit/blackberry/Api/WebSettings.cpp:590
&gt; +// Whether to include pattern: in the list of string patterns

period.

&gt; Source/WebKit/blackberry/Api/WebSettings.h:51
&gt; +    WebSettings(const WebSettings&amp;);

More common to put private section at the end.

&gt; Source/WebKit/blackberry/Api/WebSettings_p.h:25
&gt; +#include &lt;wtf/text/StringHash.h&gt;

Needed?

&gt; Source/WebKit/blackberry/Api/WebSettings_p.h:67
&gt; +        WTF::HashMap&lt;WTF::String, PrimitiveValue&gt; primitiveValues;

You do not need WTF prefix on HashMap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556732</commentid>
    <comment_count>4</comment_count>
      <attachid>127072</attachid>
    <who name="Nima Ghanavatian">nima.ghanavatian</who>
    <bug_when>2012-02-14 16:02:14 -0800</bug_when>
    <thetext>Created attachment 127072
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556750</commentid>
    <comment_count>5</comment_count>
      <attachid>127074</attachid>
    <who name="Nima Ghanavatian">nima.ghanavatian</who>
    <bug_when>2012-02-14 16:26:06 -0800</bug_when>
    <thetext>Created attachment 127074
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556751</commentid>
    <comment_count>6</comment_count>
      <attachid>127074</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-02-14 16:29:58 -0800</bug_when>
    <thetext>Comment on attachment 127074
Patch

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556826</commentid>
    <comment_count>7</comment_count>
      <attachid>127074</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-14 17:48:11 -0800</bug_when>
    <thetext>Comment on attachment 127074
Patch

Clearing flags on attachment: 127074

Committed r107764: &lt;http://trac.webkit.org/changeset/107764&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556827</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-14 17:48:16 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558259</commentid>
    <comment_count>9</comment_count>
    <who name="Jacky Jiang">jkjiang</who>
    <bug_when>2012-02-16 09:11:49 -0800</bug_when>
    <thetext>*** Bug 74379 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127049</attachid>
            <date>2012-02-14 14:49:59 -0800</date>
            <delta_ts>2012-02-14 16:02:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78633-20120214174727.patch</filename>
            <type>text/plain</type>
            <size>42171</size>
            <attacher name="Nima Ghanavatian">nima.ghanavatian</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NzEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDM5M2E3MTEyNWNmZGQ2ZDlj
MWJkYTFlMTk4OTkxZjFkZGRkZGVjODUuLmVjZGI5ZTYzY2ZmNTI0MTIzNDBmYmM5MjgzYzg0NWE2
ZmIzNmZlMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTggQEAKIDIwMTItMDItMTQgIE5pbWEgR2hh
bmF2YXRpYW4gIDxuZ2hhbmF2YXRpYW5AcmltLmNvbT4KIAorICAgICAgICBbQmxhY2tCZXJyeV0g
VXBzdHJlYW1pbmcgV2ViU2V0dGluZ3MgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbml0aWFsIHVwc3RyZWFtaW5nLCBubyBuZXcgdGVzdHMuCisK
KyAgICAgICAgKiBibGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5ncy5jcHA6IEFkZGVkLgorICAgICAg
ICAqIGJsYWNrYmVycnkvQXBpL1dlYlNldHRpbmdzLmg6IEFkZGVkLgorICAgICAgICAqIGJsYWNr
YmVycnkvQXBpL1dlYlNldHRpbmdzX3AuaDogQWRkZWQuCisKKzIwMTItMDItMTQgIE5pbWEgR2hh
bmF2YXRpYW4gIDxuZ2hhbmF2YXRpYW5AcmltLmNvbT4KKwogICAgICAgICBbQmxhY2tCZXJyeV0g
VXBzdHJlYW1pbmcgRE9NU3VwcG9ydCBmaWxlcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2MDcKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYlNldHRpbmdzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MGY5NGVmNjVjMDhmMDZmMTM1MTM4ODU0
MGZjMGM0NWMzNWYwZTA4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJTZXR0aW5ncy5jcHAKQEAgLTAsMCArMSw4MTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYlNldHRpbmdzLmgiCisKKyNpbmNsdWRlICJXZWJTZXR0aW5n
c19wLmgiCisKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlIDxCYXNlNjQuaD4KKyNp
bmNsdWRlIDxDb2xvci5oPgorI2luY2x1ZGUgPFBhZ2VDYWNoZS5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgQmxhY2tCZXJy
eSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIEJs
YWNrQmVycnlBbGxvd0Nyb3NzU2l0ZVJlcXVlc3RzLCAoIkJsYWNrQmVycnlBbGxvd0Nyb3NzU2l0
ZVJlcXVlc3RzIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIEJsYWNrQmVycnlCYWNr
Z3JvdW5kQ29sb3IsICgiQmxhY2tCZXJyeUJhY2tncm91bmRDb2xvciIpKTsKK0RFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCBCbGFja0JlcnJ5Q29va2llc0VuYWJsZWQsICgiQmxhY2tCZXJyeUNv
b2tpZXNFbmFibGVkIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIEJsYWNrQmVycnlE
aXJlY3RSZW5kZXJpbmdUb1dpbmRvd0VuYWJsZWQsICgiQmxhY2tCZXJyeURpcmVjdFJlbmRlcmlu
Z1RvV2luZG93RW5hYmxlZCIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBCbGFja0Jl
cnJ5RHJhd0JvcmRlcldoaWxlTG9hZGluZ0ltYWdlcywgKCJCbGFja0JlcnJ5RHJhd0JvcmRlcldo
aWxlTG9hZGluZ0ltYWdlcyIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBCbGFja0Jl
cnJ5RW1haWxNb2RlRW5hYmxlZCwgKCJCbGFja0JlcnJ5RW1haWxNb2RlRW5hYmxlZCIpKTsKK0RF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBCbGFja0JlcnJ5R2V0Rm9jdXNOb2RlQ29udGV4dEVu
YWJsZWQsICgiQmxhY2tCZXJyeUdldEZvY3VzTm9kZUNvbnRleHRFbmFibGVkIikpOworREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIEJsYWNrQmVycnlIYW5kbGVQYXR0ZXJuVVJMcywgKCJCbGFj
a0JlcnJ5SGFuZGxlUGF0dGVyblVSTHMiKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywg
QmxhY2tCZXJyeUluaXRpYWxTY2FsZSwgKCJCbGFja0JlcnJ5SW5pdGlhbFNjYWxlIikpOworREVG
SU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIEJsYWNrQmVycnlMaW5rc0hhbmRsZWRFeHRlcm5hbGx5
RW5hYmxlZCwgKCJCbGFja0JlcnJ5TGlua3NIYW5kbGVkRXh0ZXJuYWxseUVuYWJsZWQiKSk7CitE
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgQmxhY2tCZXJyeU1heFBsdWdpbkluc3RhbmNlcywg
KCJCbGFja0JlcnJ5TWF4UGx1Z2luSW5zdGFuY2VzIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChT
dHJpbmcsIEJsYWNrQmVycnlPdmVyWm9vbUNvbG9yLCAoIkJsYWNrQmVycnlPdmVyWm9vbUNvbG9y
IikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIEJsYWNrQmVycnlSZW5kZXJBbmltYXRp
b25zT25TY3JvbGxPclpvb21FbmFibGVkLCAoIkJsYWNrQmVycnlSZW5kZXJBbmltYXRpb25zT25T
Y3JvbGxPclpvb21FbmFibGVkIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIEJsYWNr
QmVycnlTY3JvbGxiYXJzRW5hYmxlZCwgKCJCbGFja0JlcnJ5U2Nyb2xsYmFyc0VuYWJsZWQiKSk7
CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgQmxhY2tCZXJyeVRleHRSZWZsb3dNb2RlLCAo
IkJsYWNrQmVycnlUZXh0UmVmbG93TW9kZSIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCBCbGFja0JlcnJ5VXNlUlRMV3JpdGluZ0RpcmVjdGlvbiwgKCJCbGFja0JlcnJ5VXNlUlRMV3Jp
dGluZ0RpcmVjdGlvbiIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBCbGFja0JlcnJ5
VXNlV2ViS2l0Q2FjaGUsICgiQmxhY2tCZXJyeVVzZVdlYktpdENhY2hlIikpOworREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIEJsYWNrQmVycnlVc2VyQWdlbnRTdHJpbmcsICgiQmxhY2tCZXJy
eVVzZXJBZ2VudFN0cmluZyIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBCbGFja0Jl
cnJ5VXNlclNjYWxhYmxlRW5hYmxlZCwgKCJCbGFja0JlcnJ5VXNlclNjYWxhYmxlRW5hYmxlZCIp
KTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBCbGFja0JlcnJ5Vmlld3BvcnRXaWR0aCwg
KCJCbGFja0JlcnJ5Vmlld3BvcnRXaWR0aCIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCBCbGFja0JlcnJ5Wm9vbVRvRml0T25Mb2FkRW5hYmxlZCwgKCJCbGFja0JlcnJ5Wm9vbVRvRml0
T25Mb2FkRW5hYmxlZCIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBXZWJLaXREYXRh
YmFzZVBhdGgsICgiV2ViS2l0RGF0YWJhc2VQYXRoIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChT
dHJpbmcsIFdlYktpdERhdGFiYXNlc0VuYWJsZWQsICgiV2ViS2l0RGF0YWJhc2VzRW5hYmxlZCIp
KTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBXZWJLaXREZWZhdWx0Rml4ZWRGb250U2l6
ZSwgKCJXZWJLaXREZWZhdWx0Rml4ZWRGb250U2l6ZSIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBXZWJLaXREZWZhdWx0Rm9udFNpemUsICgiV2ViS2l0RGVmYXVsdEZvbnRTaXplIikp
OworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdERlZmF1bHRUZXh0RW5jb2RpbmdO
YW1lLCAoIldlYktpdERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lIikpOworREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIFdlYktpdERvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCwgKCJXZWJL
aXREb3dubG9hZGFibGVCaW5hcnlGb250c0VuYWJsZWQiKSk7CitERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgV2ViS2l0Rmlyc3RTY2hlZHVsZWRMYXlvdXREZWxheSwgKCJXZWJLaXRGaXJzdFNj
aGVkdWxlZExheW91dERlbGF5IikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktp
dEZpeGVkRm9udEZhbWlseSwgKCJXZWJLaXRGaXhlZEZvbnRGYW1pbHkiKSk7CitERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZywgV2ViS2l0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZCwgKCJXZWJLaXRG
cmFtZUZsYXR0ZW5pbmdFbmFibGVkIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdl
YktpdEdlb2xvY2F0aW9uRW5hYmxlZCwgKCJXZWJLaXRHZW9sb2NhdGlvbkVuYWJsZWQiKSk7CitE
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgV2ViS2l0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dz
QXV0b21hdGljYWxseUVuYWJsZWQsICgiV2ViS2l0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0
b21hdGljYWxseUVuYWJsZWQiKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgV2ViS2l0
SmF2YVNjcmlwdEVuYWJsZWQsICgiV2ViS2l0SmF2YVNjcmlwdEVuYWJsZWQiKSk7CitERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgV2ViS2l0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5LCAoIldl
YktpdExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCBXZWJLaXRMb2NhbFN0b3JhZ2VFbmFibGVkLCAoIldlYktpdExvY2FsU3RvcmFnZUVuYWJs
ZWQiKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgV2ViS2l0TG9jYWxTdG9yYWdlUGF0
aCwgKCJXZWJLaXRMb2NhbFN0b3JhZ2VQYXRoIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJp
bmcsIFdlYktpdExvY2FsU3RvcmFnZVF1b3RhLCAoIldlYktpdExvY2FsU3RvcmFnZVF1b3RhIikp
OworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdE1heGltdW1QYWdlc0luQ2FjaGUs
ICgiV2ViS2l0TWF4aW11bVBhZ2VzSW5DYWNoZSIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCBXZWJLaXRNaW5pbXVtRm9udFNpemUsICgiV2ViS2l0TWluaW11bUZvbnRTaXplIikpOwor
REVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNh
Y2hlRW5hYmxlZCwgKCJXZWJLaXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQiKSk7
CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgV2ViS2l0T2ZmbGluZVdlYkFwcGxpY2F0aW9u
Q2FjaGVQYXRoLCAoIldlYktpdE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlUGF0aCIpKTsKK0RF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBXZWJLaXRQYWdlR3JvdXBOYW1lLCAoIldlYktpdFBh
Z2VHcm91cE5hbWUiKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgV2ViS2l0UGx1Z2lu
c0VuYWJsZWQsICgiV2ViS2l0UGx1Z2luc0VuYWJsZWQiKSk7CitERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgV2ViS2l0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCwgKCJXZWJLaXRQcml2YXRlQnJv
d3NpbmdFbmFibGVkIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdFNhbnNT
ZXJpZmZGb250RmFtaWx5LCAoIldlYktpdFNhbnNTZXJpZmZGb250RmFtaWx5IikpOworREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdFNlcmlmZkZvbnRGYW1pbHksICgiV2ViS2l0U2Vy
aWZmRm9udEZhbWlseSIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBXZWJLaXRTdGFu
ZGFyZEZvbnRGYW1pbHksICgiV2ViS2l0U3RhbmRhcmRGb250RmFtaWx5IikpOworREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdFVzZXJTdHlsZVNoZWV0LCAoIldlYktpdFVzZXJTdHls
ZVNoZWV0IikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdFVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24sICgiV2ViS2l0VXNlclN0eWxlU2hlZXRMb2NhdGlvbiIpKTsKK0RFRklORV9T
VEFUSUNfTE9DQUwoU3RyaW5nLCBXZWJLaXRXZWJTb2NrZXRzRW5hYmxlZCwgKCJXZWJLaXRXZWJT
b2NrZXRzRW5hYmxlZCIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBXZWJLaXRYU1NB
dWRpdG9yRW5hYmxlZCwgKCJXZWJLaXRYU1NBdWRpdG9yRW5hYmxlZCIpKTsKK0RFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCBTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQsICgiU3BhdGlhbE5hdmln
YXRpb25FbmFibGVkIikpOworCisvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIG1vdmluZyBh
bGwgdGhlIG1pbWUgdHlwZSBjb2RlIGludG8gaXRzIG93biBvYmplY3QuCisKK3R5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIFdlYlN0cmluZz4gTUlNRVR5cGVBc3NvY2lhdGlvbk1hcDsKKworc3RhdGlj
IGNvbnN0IE1JTUVUeXBlQXNzb2NpYXRpb25NYXAmIG1pbWVUeXBlQXNzb2NpYXRpb25NYXAoKQor
eworICAgIHN0YXRpYyBNSU1FVHlwZUFzc29jaWF0aW9uTWFwKiBtaW1lVHlwZU1hcCA9IDA7Cisg
ICAgaWYgKG1pbWVUeXBlTWFwKQorICAgICAgICByZXR1cm4gKm1pbWVUeXBlTWFwOworCisgICAg
bWltZVR5cGVNYXAgPSBuZXcgTUlNRVR5cGVBc3NvY2lhdGlvbk1hcDsKKyAgICBtaW1lVHlwZU1h
cC0+YWRkKCJpbWFnZS94LW1zLWJtcCIsICJpbWFnZS9ibXAiKTsKKyAgICBtaW1lVHlwZU1hcC0+
YWRkKCJpbWFnZS94LXdpbmRvd3MtYm1wIiwgImltYWdlL2JtcCIpOworICAgIG1pbWVUeXBlTWFw
LT5hZGQoImltYWdlL3gtYm1wIiwgImltYWdlL2JtcCIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQo
ImltYWdlL3gtYml0bWFwIiwgImltYWdlL2JtcCIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImlt
YWdlL3gtbXMtYml0bWFwIiwgImltYWdlL2JtcCIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImlt
YWdlL2pwZyIsICJpbWFnZS9qcGVnIik7CisgICAgbWltZVR5cGVNYXAtPmFkZCgiaW1hZ2UvcGpw
ZWciLCAiaW1hZ2UvanBlZyIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImltYWdlL3gtcG5nIiwg
ImltYWdlL3BuZyIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImltYWdlL3ZuZC5yaW0ucG5nIiwg
ImltYWdlL3BuZyIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImltYWdlL2ljbyIsICJpbWFnZS92
bmQubWljcm9zb2Z0Lmljb24iKTsKKyAgICBtaW1lVHlwZU1hcC0+YWRkKCJpbWFnZS9pY29uIiwg
ImltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbiIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoInRleHQv
aWNvIiwgImltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbiIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQo
ImFwcGxpY2F0aW9uL2ljbyIsICJpbWFnZS92bmQubWljcm9zb2Z0Lmljb24iKTsKKyAgICBtaW1l
VHlwZU1hcC0+YWRkKCJpbWFnZS94LWljb24iLCAiaW1hZ2Uvdm5kLm1pY3Jvc29mdC5pY29uIik7
CisgICAgbWltZVR5cGVNYXAtPmFkZCgiYXVkaW8vdm5kLnFjZWxwIiwgImF1ZGlvL3FjZWxwIik7
CisgICAgbWltZVR5cGVNYXAtPmFkZCgiYXVkaW8vcWNwIiwgImF1ZGlvL3FjZWxwIik7CisgICAg
bWltZVR5cGVNYXAtPmFkZCgiYXVkaW8vdm5kLnFjcCIsICJhdWRpby9xY2VscCIpOworICAgIG1p
bWVUeXBlTWFwLT5hZGQoImF1ZGlvL3dhdiIsICJhdWRpby94LXdhdiIpOworICAgIG1pbWVUeXBl
TWFwLT5hZGQoImF1ZGlvL21pZCIsICJhdWRpby9taWRpIik7CisgICAgbWltZVR5cGVNYXAtPmFk
ZCgiYXVkaW8vc3AtbWlkaSIsICJhdWRpby9taWRpIik7CisgICAgbWltZVR5cGVNYXAtPmFkZCgi
YXVkaW8veC1taWQiLCAiYXVkaW8vbWlkaSIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1ZGlv
L3gtbWlkaSIsICJhdWRpby9taWRpIik7CisgICAgbWltZVR5cGVNYXAtPmFkZCgiYXVkaW8veC1t
cGVnIiwgImF1ZGlvL21wZWciKTsKKyAgICBtaW1lVHlwZU1hcC0+YWRkKCJhdWRpby9tcDMiLCAi
YXVkaW8vbXBlZyIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1ZGlvL3gtbXAzIiwgImF1ZGlv
L21wZWciKTsKKyAgICBtaW1lVHlwZU1hcC0+YWRkKCJhdWRpby9tcGVnMyIsICJhdWRpby9tcGVn
Iik7CisgICAgbWltZVR5cGVNYXAtPmFkZCgiYXVkaW8veC1tcGVnMyIsICJhdWRpby9tcGVnIik7
CisgICAgbWltZVR5cGVNYXAtPmFkZCgiYXVkaW8vbXBnMyIsICJhdWRpby9tcGVnIik7CisgICAg
bWltZVR5cGVNYXAtPmFkZCgiYXVkaW8vbXBnIiwgImF1ZGlvL21wZWciKTsKKyAgICBtaW1lVHlw
ZU1hcC0+YWRkKCJhdWRpby94LW1wZyIsICJhdWRpby9tcGVnIik7CisgICAgbWltZVR5cGVNYXAt
PmFkZCgiYXVkaW8vbTRhIiwgImF1ZGlvL21wNCIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1
ZGlvL3gtbTRhIiwgImF1ZGlvL21wNCIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1ZGlvL3gt
bXA0IiwgImF1ZGlvL21wNCIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1ZGlvL3gtYWFjIiwg
ImF1ZGlvL2FhYyIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1ZGlvL3gtYW1yIiwgImF1ZGlv
L2FtciIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1ZGlvL21wZWd1cmwiLCAiYXVkaW8veC1t
cGVndXJsIik7CisgICAgbWltZVR5cGVNYXAtPmFkZCgidmlkZW8vM2dwIiwgInZpZGVvLzNncHAi
KTsKKyAgICBtaW1lVHlwZU1hcC0+YWRkKCJ2aWRlby9hdmkiLCAidmlkZW8veC1tc3ZpZGVvIik7
CisgICAgbWltZVR5cGVNYXAtPmFkZCgidmlkZW8veC1tNHYiLCAidmlkZW8vbXA0Iik7CisgICAg
bWltZVR5cGVNYXAtPmFkZCgidmlkZW8veC1xdWlja3RpbWUiLCAidmlkZW8vcXVpY2t0aW1lIik7
CisgICAgbWltZVR5cGVNYXAtPmFkZCgiYXBwbGljYXRpb24vamF2YSIsICJhcHBsaWNhdGlvbi9q
YXZhLWFyY2hpdmUiKTsKKyAgICBtaW1lVHlwZU1hcC0+YWRkKCJhcHBsaWNhdGlvbi94LWphdmEt
YXJjaGl2ZSIsICJhcHBsaWNhdGlvbi9qYXZhLWFyY2hpdmUiKTsKKyAgICBtaW1lVHlwZU1hcC0+
YWRkKCJhcHBsaWNhdGlvbi94LXppcC1jb21wcmVzc2VkIiwgImFwcGxpY2F0aW9uL3ppcCIpOwor
CisgICAgcmV0dXJuICptaW1lVHlwZU1hcDsKK30KKworc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiog
c19zdXBwb3J0ZWRPYmplY3RNSU1FVHlwZXM7CisKK1dlYlNldHRpbmdzUHJpdmF0ZTo6V2ViU2V0
dGluZ3NQcml2YXRlKCkKKyAgICA6IGltcGwoMCkKKyAgICAsIGRlbGVnYXRlKDApCisgICAgLCBz
ZW5kZXIoMCkKKyAgICAsIGNvcHlPbldyaXRlKHRydWUpCit7Cit9CisKK1dlYlNldHRpbmdzOjpX
ZWJTZXR0aW5ncygpCit7CisgICAgbV9wcml2YXRlID0gbmV3IFdlYlNldHRpbmdzUHJpdmF0ZSgp
OworfQorCitXZWJTZXR0aW5nczo6V2ViU2V0dGluZ3MoY29uc3QgV2ViU2V0dGluZ3MmIG90aGVy
U2V0dGluZ3MpCit7CisgICAgbV9wcml2YXRlLT5pbXBsID0gb3RoZXJTZXR0aW5ncy5tX3ByaXZh
dGUtPmltcGw7Cit9CisKK1dlYlNldHRpbmdzOjp+V2ViU2V0dGluZ3MoKQoreworICAgIGlmICgh
bV9wcml2YXRlLT5jb3B5T25Xcml0ZSkgeworICAgICAgICBkZWxldGUgbV9wcml2YXRlLT5pbXBs
OworICAgICAgICBtX3ByaXZhdGUtPmltcGwgPSAwOworICAgIH0KKyAgICBkZWxldGUgbV9wcml2
YXRlOworICAgIG1fcHJpdmF0ZSA9IDA7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldERlbGVn
YXRlKFdlYlNldHRpbmdzRGVsZWdhdGUqIGRlbGVnYXRlKQoreworICAgIG1fcHJpdmF0ZS0+ZGVs
ZWdhdGUgPSBkZWxlZ2F0ZTsKKyAgICBtX3ByaXZhdGUtPnNlbmRlciA9IHRoaXM7Cit9CisKK1dl
YlNldHRpbmdzRGVsZWdhdGUqIFdlYlNldHRpbmdzOjpkZWxlZ2F0ZSgpCit7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+ZGVsZWdhdGU7Cit9CisKK1dlYlNldHRpbmdzKiBXZWJTZXR0aW5nczo6Y3Jl
YXRlRnJvbVN0YW5kYXJkU2V0dGluZ3MoV2ViU2V0dGluZ3NEZWxlZ2F0ZSogZGVsZWdhdGUpCit7
CisgICAgV2ViU2V0dGluZ3MqIHNldHRpbmdzID0gbmV3IFdlYlNldHRpbmdzKCk7CisgICAgc2V0
dGluZ3MtPm1fcHJpdmF0ZS0+aW1wbCA9IHN0YW5kYXJkU2V0dGluZ3MoKS0+bV9wcml2YXRlLT5p
bXBsOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPmRlbGVnYXRlID0gZGVsZWdhdGU7CisgICAg
c2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2VuZGVyID0gc2V0dGluZ3M7CisgICAgaWYgKGRlbGVnYXRl
KQorICAgICAgICBkZWxlZ2F0ZS0+ZGlkQ2hhbmdlU2V0dGluZ3Moc2V0dGluZ3MpOworCisgICAg
cmV0dXJuIHNldHRpbmdzOworfQorCitXZWJTZXR0aW5ncyogV2ViU2V0dGluZ3M6OnN0YW5kYXJk
U2V0dGluZ3MoKQoreworICAgIHN0YXRpYyBXZWJTZXR0aW5ncyAqc2V0dGluZ3MgPSAwOworICAg
IGlmIChzZXR0aW5ncykKKyAgICAgICAgcmV0dXJuIHNldHRpbmdzOworCisgICAgc2V0dGluZ3Mg
PSBuZXcgV2ViU2V0dGluZ3M7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+aW1wbCA9IG5ldyBX
ZWJTZXR0aW5nc1ByaXZhdGU6OldlYlNldHRpbmdzUHJpdmF0ZUltcGwoKTsKKyAgICBzZXR0aW5n
cy0+bV9wcml2YXRlLT5jb3B5T25Xcml0ZSA9IGZhbHNlOworICAgIHNldHRpbmdzLT5tX3ByaXZh
dGUtPnNldFVuc2lnbmVkKEJsYWNrQmVycnlCYWNrZ3JvdW5kQ29sb3IsIFdlYkNvcmU6OkNvbG9y
Ojp3aGl0ZSk7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihCbGFja0JlcnJ5
Q29va2llc0VuYWJsZWQsIHRydWUpOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldERvdWJs
ZShCbGFja0JlcnJ5SW5pdGlhbFNjYWxlLCAtMSk7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+
c2V0VW5zaWduZWQoQmxhY2tCZXJyeU1heFBsdWdpbkluc3RhbmNlcywgMSk7CisgICAgc2V0dGlu
Z3MtPm1fcHJpdmF0ZS0+c2V0VW5zaWduZWQoQmxhY2tCZXJyeU92ZXJab29tQ29sb3IsIFdlYkNv
cmU6OkNvbG9yOjp3aGl0ZSk7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihC
bGFja0JlcnJ5U2Nyb2xsYmFyc0VuYWJsZWQsIHRydWUpOworCisgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBkZXRlY3Qgd2hldGhlciB3ZSBhcmUgZW1iZWRkZWQgaW4gYSBicm93c2VyIG9yIGFuIGVt
YWlsIGNsaWVudCBhbmQgZGVmYXVsdCB0byBUZXh0UmVmbG93RW5hYmxlZE9ubHlGb3JCbG9ja1pv
b20gYW5kIFRleHRSZWZsb3dFbmFibGVkLCByZXNwZWN0aXZlbHkuCisgICAgc2V0dGluZ3MtPm1f
cHJpdmF0ZS0+c2V0VGV4dFJlZmxvd01vZGUoQmxhY2tCZXJyeVRleHRSZWZsb3dNb2RlLCBUZXh0
UmVmbG93RGlzYWJsZWQpOworCisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihC
bGFja0JlcnJ5VXNlclNjYWxhYmxlRW5hYmxlZCwgdHJ1ZSk7CisgICAgc2V0dGluZ3MtPm1fcHJp
dmF0ZS0+c2V0Qm9vbGVhbihCbGFja0JlcnJ5VXNlV2ViS2l0Q2FjaGUsIHRydWUpOworICAgIHNl
dHRpbmdzLT5tX3ByaXZhdGUtPnNldEJvb2xlYW4oQmxhY2tCZXJyeVpvb21Ub0ZpdE9uTG9hZEVu
YWJsZWQsIHRydWUpOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldEludGVnZXIoV2ViS2l0
RGVmYXVsdEZvbnRTaXplLCAxNik7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0SW50ZWdl
cihXZWJLaXREZWZhdWx0Rml4ZWRGb250U2l6ZSwgMTMpOworICAgIHNldHRpbmdzLT5tX3ByaXZh
dGUtPnNldEludGVnZXIoV2ViS2l0TWluaW11bUZvbnRTaXplLCA4KTsKKyAgICBzZXR0aW5ncy0+
bV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUsICJpc28t
ODg1OS0xIik7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0SW50ZWdlcihXZWJLaXRGaXJz
dFNjaGVkdWxlZExheW91dERlbGF5LCAyNTApOyAvLyBNYXRjaCBEb2N1bWVudDo6Y0xheW91dFNj
aGVkdWxlVGhyZXNob2xkLgorICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldEJvb2xlYW4oV2Vi
S2l0SmF2YVNjcmlwdEVuYWJsZWQsIHRydWUpOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNl
dEJvb2xlYW4oV2ViS2l0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5LCB0cnVlKTsKKyAgICBzZXR0
aW5ncy0+bV9wcml2YXRlLT5zZXRCb29sZWFuKFdlYktpdERvd25sb2FkYWJsZUJpbmFyeUZvbnRz
RW5hYmxlZCwgdHJ1ZSk7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0VW5zaWduZWRMb25n
TG9uZyhXZWJLaXRMb2NhbFN0b3JhZ2VRdW90YSwgNSAqIDEwMjQgKiAxMDI0KTsKKyAgICBzZXR0
aW5ncy0+bV9wcml2YXRlLT5zZXRJbnRlZ2VyKFdlYktpdE1heGltdW1QYWdlc0luQ2FjaGUsIDAp
OworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldEJvb2xlYW4oV2ViS2l0V2ViU29ja2V0c0Vu
YWJsZWQsIHRydWUpOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldFN0cmluZyhXZWJLaXRG
aXhlZEZvbnRGYW1pbHksICJDb3VyaWVyIE5ldyIpOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUt
PnNldFN0cmluZyhXZWJLaXRTYW5zU2VyaWZmRm9udEZhbWlseSwgIkFyaWFsIik7CisgICAgc2V0
dGluZ3MtPm1fcHJpdmF0ZS0+c2V0U3RyaW5nKFdlYktpdFNlcmlmZkZvbnRGYW1pbHksICJUaW1l
cyBOZXcgUm9tYW4iKTsKKyAgICBzZXR0aW5ncy0+bV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0
U3RhbmRhcmRGb250RmFtaWx5LCAiVGltZXMgTmV3IFJvbWFuIik7CisgICAgc2V0dGluZ3MtPm1f
cHJpdmF0ZS0+c2V0Qm9vbGVhbihTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQsIGZhbHNlKTsKKwor
ICAgIHJldHVybiBzZXR0aW5nczsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6YWRkU3VwcG9ydGVk
T2JqZWN0UGx1Z2luTUlNRVR5cGUoY29uc3QgY2hhciogdHlwZSkKK3sKKyAgICBpZiAoIXNfc3Vw
cG9ydGVkT2JqZWN0TUlNRVR5cGVzKQorICAgICAgICBzX3N1cHBvcnRlZE9iamVjdE1JTUVUeXBl
cyA9IG5ldyBIYXNoU2V0PFN0cmluZz47CisKKyAgICBzX3N1cHBvcnRlZE9iamVjdE1JTUVUeXBl
cy0+YWRkKHR5cGUpOworfQorCitib29sIFdlYlNldHRpbmdzOjppc1N1cHBvcnRlZE9iamVjdE1J
TUVUeXBlKGNvbnN0IFdlYlN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKG1pbWVUeXBlLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFzX3N1cHBvcnRlZE9i
amVjdE1JTUVUeXBlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNfc3Vw
cG9ydGVkT2JqZWN0TUlNRVR5cGVzLT5jb250YWlucyhnZXROb3JtYWxpemVkTUlNRVR5cGUobWlt
ZVR5cGUpKTsKK30KKworV2ViU3RyaW5nIFdlYlNldHRpbmdzOjpnZXROb3JtYWxpemVkTUlNRVR5
cGUoY29uc3QgV2ViU3RyaW5nJiB0eXBlKQoreworICAgIE1JTUVUeXBlQXNzb2NpYXRpb25NYXA6
OmNvbnN0X2l0ZXJhdG9yIGkgPSBtaW1lVHlwZUFzc29jaWF0aW9uTWFwKCkuZmluZCh0eXBlKTsK
KworICAgIHJldHVybiBpID09IG1pbWVUeXBlQXNzb2NpYXRpb25NYXAoKS5lbmQoKSA/IHR5cGUg
OiBpLT5zZWNvbmQ7Cit9CisKK2Jvb2wgV2ViU2V0dGluZ3M6Onhzc0F1ZGl0b3JFbmFibGVkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRCb29sZWFuKFdlYktpdFhTU0F1ZGl0
b3JFbmFibGVkKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0WFNTQXVkaXRvckVuYWJsZWQo
Ym9vbCBlbmFibGVkKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnNldEJvb2xlYW4oV2ViS2l0
WFNTQXVkaXRvckVuYWJsZWQsIGVuYWJsZWQpOworfQorCitib29sIFdlYlNldHRpbmdzOjpsb2Fk
c0ltYWdlc0F1dG9tYXRpY2FsbHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdl
dEJvb2xlYW4oV2ViS2l0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KTsKK30KKwordm9pZCBXZWJT
ZXR0aW5nczo6c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KGJvb2wgZW5hYmxlZCkKK3sKKyAg
ICBtX3ByaXZhdGUtPnNldEJvb2xlYW4oV2ViS2l0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5LCBl
bmFibGVkKTsKK30KKworYm9vbCBXZWJTZXR0aW5nczo6ZG93bmxvYWRhYmxlQmluYXJ5Rm9udHNF
bmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRCb29sZWFuKFdlYktp
dERvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6
OnNldERvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihXZWJLaXREb3dubG9hZGFibGVCaW5hcnlGb250
c0VuYWJsZWQsIGVuYWJsZWQpOworfQorCitib29sIFdlYlNldHRpbmdzOjpzaG91bGREcmF3Qm9y
ZGVyV2hpbGVMb2FkaW5nSW1hZ2VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5n
ZXRCb29sZWFuKEJsYWNrQmVycnlEcmF3Qm9yZGVyV2hpbGVMb2FkaW5nSW1hZ2VzKTsKK30KKwor
dm9pZCBXZWJTZXR0aW5nczo6c2V0U2hvdWxkRHJhd0JvcmRlcldoaWxlTG9hZGluZ0ltYWdlcyhi
b29sIGVuYWJsZWQpCit7CisgICAgbV9wcml2YXRlLT5zZXRCb29sZWFuKEJsYWNrQmVycnlEcmF3
Qm9yZGVyV2hpbGVMb2FkaW5nSW1hZ2VzLCBlbmFibGVkKTsKK30KKworYm9vbCBXZWJTZXR0aW5n
czo6aXNKYXZhU2NyaXB0RW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
Z2V0Qm9vbGVhbihXZWJLaXRKYXZhU2NyaXB0RW5hYmxlZCk7Cit9CisKK3ZvaWQgV2ViU2V0dGlu
Z3M6OnNldEphdmFTY3JpcHRFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX3ByaXZhdGUt
PnNldEJvb2xlYW4oV2ViS2l0SmF2YVNjcmlwdEVuYWJsZWQsIGVuYWJsZWQpOworfQorCitib29s
IFdlYlNldHRpbmdzOjppc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUtPmdldEJvb2xlYW4oV2ViS2l0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7
Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBl
bmFibGVkKQoreworICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihXZWJLaXRQcml2YXRlQnJvd3Np
bmdFbmFibGVkLCBlbmFibGVkKTsKK30KKworaW50IFdlYlNldHRpbmdzOjpkZWZhdWx0Rml4ZWRG
b250U2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0SW50ZWdlcihXZWJL
aXREZWZhdWx0Rml4ZWRGb250U2l6ZSk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldERlZmF1
bHRGaXhlZEZvbnRTaXplKGludCBkZWZhdWx0Rml4ZWRGb250U2l6ZSkKK3sKKyAgICBtX3ByaXZh
dGUtPnNldEludGVnZXIoV2ViS2l0RGVmYXVsdEZpeGVkRm9udFNpemUsIGRlZmF1bHRGaXhlZEZv
bnRTaXplKTsKK30KKworaW50IFdlYlNldHRpbmdzOjpkZWZhdWx0Rm9udFNpemUoKSBjb25zdAor
eworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEludGVnZXIoV2ViS2l0RGVmYXVsdEZvbnRTaXpl
KTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0RGVmYXVsdEZvbnRTaXplKGludCBkZWZhdWx0
Rm9udFNpemUpCit7CisgICAgbV9wcml2YXRlLT5zZXRJbnRlZ2VyKFdlYktpdERlZmF1bHRGb250
U2l6ZSwgZGVmYXVsdEZvbnRTaXplKTsKK30KKworaW50IFdlYlNldHRpbmdzOjptaW5pbXVtRm9u
dFNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEludGVnZXIoV2ViS2l0
TWluaW11bUZvbnRTaXplKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0TWluaW11bUZvbnRT
aXplKGludCBtaW5pbXVtRm9udFNpemUpCit7CisgICAgbV9wcml2YXRlLT5zZXRJbnRlZ2VyKFdl
YktpdE1pbmltdW1Gb250U2l6ZSwgbWluaW11bUZvbnRTaXplKTsKK30KKworV2ViU3RyaW5nIFdl
YlNldHRpbmdzOjpzZXJpZkZvbnRGYW1pbHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZh
dGUtPmdldFN0cmluZyhXZWJLaXRTZXJpZmZGb250RmFtaWx5KTsKK30KKwordm9pZCBXZWJTZXR0
aW5nczo6c2V0U2VyaWZGb250RmFtaWx5KGNvbnN0IGNoYXIqIHNlcmlmZkZvbnRGYW1pbHkpCit7
CisgICAgbV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0U2VyaWZmRm9udEZhbWlseSwgc2VyaWZm
Rm9udEZhbWlseSk7Cit9CisKK1dlYlN0cmluZyBXZWJTZXR0aW5nczo6Zml4ZWRGb250RmFtaWx5
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRTdHJpbmcoV2ViS2l0Rml4ZWRG
b250RmFtaWx5KTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0Rml4ZWRGb250RmFtaWx5KGNv
bnN0IGNoYXIqIGZpeGVkRm9udEZhbWlseSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFN0cmluZyhX
ZWJLaXRGaXhlZEZvbnRGYW1pbHksIGZpeGVkRm9udEZhbWlseSk7Cit9CisKK1dlYlN0cmluZyBX
ZWJTZXR0aW5nczo6c2Fuc1NlcmlmRm9udEZhbWlseSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+Z2V0U3RyaW5nKFdlYktpdFNhbnNTZXJpZmZGb250RmFtaWx5KTsKK30KKwordm9p
ZCBXZWJTZXR0aW5nczo6c2V0U2Fuc1NlcmlmRm9udEZhbWlseShjb25zdCBjaGFyKiBzYW5zU2Vy
aWZmRm9udEZhbWlseSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFN0cmluZyhXZWJLaXRTYW5zU2Vy
aWZmRm9udEZhbWlseSwgc2Fuc1NlcmlmZkZvbnRGYW1pbHkpOworfQorCitXZWJTdHJpbmcgV2Vi
U2V0dGluZ3M6OnN0YW5kYXJkRm9udEZhbWlseSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+Z2V0U3RyaW5nKFdlYktpdFN0YW5kYXJkRm9udEZhbWlseSk7Cit9CisKK3ZvaWQgV2Vi
U2V0dGluZ3M6OnNldFN0YW5kYXJkRm9udEZhbWlseShjb25zdCBjaGFyKiBzdGFuZGFyZEZvbnRG
YW1pbHkpCit7CisgICAgbV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0U3RhbmRhcmRGb250RmFt
aWx5LCBzdGFuZGFyZEZvbnRGYW1pbHkpOworfQorCitXZWJTdHJpbmcgV2ViU2V0dGluZ3M6OnVz
ZXJBZ2VudFN0cmluZygpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IElzIHRoaXMgdGhlIGJlc3Qg
cGxhY2UgZm9yIHRoaXMgYXNzZXJ0aW9uLiBXaHkgY2FuJ3Qgd2UganVzdCByZXR1cm4gYW4gZW1w
dHkgc3RyaW5nCisgICAgLy8gYW5kIGxldCB0aGUgY2FsbGVyIGRlY2lkZSBob3cgdG8gaGFuZGxl
IGl0PworCisgICAgLy8gVGhlIGRlZmF1bHQgdXNlciBhZ2VudCBzdHJpbmcgaXMgZW1wdHkuIFdl
IHJlbHkgdXBvbiB0aGUgY2xpZW50IHRvIHNldCB0aGlzIGZvciB1cy4KKyAgICAvLyBXZSBjaGVj
ayB0aGlzIGJ5IGFzc2VydGluZyBpZiB0aGUgY2xpZW50IGhhcyBub3QgZG9uZSBzbyBiZWZvcmUg
dGhlIGZpcnN0IHRpbWUgaXQgaXMgbmVlZGVkLgorICAgIFN0cmluZyB1c2VyQWdlbnRTdHJpbmcg
PSBtX3ByaXZhdGUtPmdldFN0cmluZyhCbGFja0JlcnJ5VXNlckFnZW50U3RyaW5nKTsKKyAgICBB
U1NFUlQoIXVzZXJBZ2VudFN0cmluZy5pc0VtcHR5KCkpOworICAgIHJldHVybiB1c2VyQWdlbnRT
dHJpbmc7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldFVzZXJBZ2VudFN0cmluZyhjb25zdCBj
aGFyKiB1c2VyQWdlbnRTdHJpbmcpCit7CisgICAgbV9wcml2YXRlLT5zZXRTdHJpbmcoQmxhY2tC
ZXJyeVVzZXJBZ2VudFN0cmluZywgdXNlckFnZW50U3RyaW5nKTsKK30KKworV2ViU3RyaW5nIFdl
YlNldHRpbmdzOjpkZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+Z2V0U3RyaW5nKFdlYktpdERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKTsKK30K
Kwordm9pZCBXZWJTZXR0aW5nczo6c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoY29uc3QgY2hh
ciogZGVmYXVsdFRleHRFbmNvZGluZ05hbWUpCit7CisgICAgbV9wcml2YXRlLT5zZXRTdHJpbmco
V2ViS2l0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUsIGRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKTsK
K30KKworYm9vbCBXZWJTZXR0aW5nczo6aXNab29tVG9GaXRPbkxvYWQoKSBjb25zdAoreworICAg
IHJldHVybiBtX3ByaXZhdGUtPmdldEJvb2xlYW4oQmxhY2tCZXJyeVpvb21Ub0ZpdE9uTG9hZEVu
YWJsZWQpOworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRab29tVG9GaXRPbkxvYWQoYm9vbCBl
bmFibGVkKQoreworICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihCbGFja0JlcnJ5Wm9vbVRvRml0
T25Mb2FkRW5hYmxlZCwgZW5hYmxlZCk7Cit9CisKK1dlYlNldHRpbmdzOjpUZXh0UmVmbG93TW9k
ZSBXZWJTZXR0aW5nczo6dGV4dFJlZmxvd01vZGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3By
aXZhdGUtPmdldFRleHRSZWZsb3dNb2RlKEJsYWNrQmVycnlUZXh0UmVmbG93TW9kZSk7Cit9CisK
K3ZvaWQgV2ViU2V0dGluZ3M6OnNldFRleHRSZWZsb3dNb2RlKFRleHRSZWZsb3dNb2RlIHRleHRS
ZWZsb3dNb2RlKQoreworICAgIG1fcHJpdmF0ZS0+c2V0VGV4dFJlZmxvd01vZGUoQmxhY2tCZXJy
eVRleHRSZWZsb3dNb2RlLCB0ZXh0UmVmbG93TW9kZSk7Cit9CisKK2Jvb2wgV2ViU2V0dGluZ3M6
OmlzU2Nyb2xsYmFyc0VuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdl
dEJvb2xlYW4oQmxhY2tCZXJyeVNjcm9sbGJhcnNFbmFibGVkKTsKK30KKwordm9pZCBXZWJTZXR0
aW5nczo6c2V0U2Nyb2xsYmFyc0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1fcHJpdmF0
ZS0+c2V0Qm9vbGVhbihCbGFja0JlcnJ5U2Nyb2xsYmFyc0VuYWJsZWQsIGVuYWJsZWQpOworfQor
Citib29sIFdlYlNldHRpbmdzOjpjYW5KYXZhU2NyaXB0T3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRCb29sZWFuKFdlYktpdEphdmFT
Y3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHlFbmFibGVkKTsKK30KKwordm9pZCBXZWJT
ZXR0aW5nczo6c2V0SmF2YVNjcmlwdE9wZW5XaW5kb3dzQXV0b21hdGljYWxseShib29sIGVuYWJs
ZWQpCit7CisgICAgbV9wcml2YXRlLT5zZXRCb29sZWFuKFdlYktpdEphdmFTY3JpcHRDYW5PcGVu
V2luZG93c0F1dG9tYXRpY2FsbHlFbmFibGVkLCBlbmFibGVkKTsKK30KKworYm9vbCBXZWJTZXR0
aW5nczo6YXJlUGx1Z2luc0VuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUt
PmdldEJvb2xlYW4oV2ViS2l0UGx1Z2luc0VuYWJsZWQpOworfQorCit2b2lkIFdlYlNldHRpbmdz
OjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgbV9wcml2YXRlLT5zZXRC
b29sZWFuKFdlYktpdFBsdWdpbnNFbmFibGVkLCBlbmFibGVkKTsKK30KKworYm9vbCBXZWJTZXR0
aW5nczo6aXNHZW9sb2NhdGlvbkVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZh
dGUtPmdldEJvb2xlYW4oV2ViS2l0R2VvbG9jYXRpb25FbmFibGVkKTsKK30KKwordm9pZCBXZWJT
ZXR0aW5nczo6c2V0R2VvbG9jYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX3By
aXZhdGUtPnNldEJvb2xlYW4oV2ViS2l0R2VvbG9jYXRpb25FbmFibGVkLCBlbmFibGVkKTsKK30K
KworYm9vbCBXZWJTZXR0aW5nczo6ZG9lc0dldEZvY3VzTm9kZUNvbnRleHQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEJvb2xlYW4oQmxhY2tCZXJyeUdldEZvY3VzTm9kZUNv
bnRleHRFbmFibGVkKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0R2V0Rm9jdXNOb2RlQ29u
dGV4dChib29sIGVuYWJsZWQpCit7CisgICAgbV9wcml2YXRlLT5zZXRCb29sZWFuKEJsYWNrQmVy
cnlHZXRGb2N1c05vZGVDb250ZXh0RW5hYmxlZCwgZW5hYmxlZCk7Cit9CisKK1dlYlN0cmluZyBX
ZWJTZXR0aW5nczo6dXNlclN0eWxlU2hlZXRTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBt
X3ByaXZhdGUtPmdldFN0cmluZyhXZWJLaXRVc2VyU3R5bGVTaGVldCk7Cit9CisKK3ZvaWQgV2Vi
U2V0dGluZ3M6OnNldFVzZXJTdHlsZVNoZWV0U3RyaW5nKGNvbnN0IGNoYXIqIHVzZXJTdHlsZVNo
ZWV0U3RyaW5nKQoreworICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgc2VlbSBsaWtlIHRoZSBh
cHByb3ByaWF0ZSBwbGFjZSB0byBkbyB0aGlzIGFzIFdlYlNldHRpbmdzIHNob3VsZCBpZGVhbGx5
IGJlIGEgc3RhdGUgc3RvcmUuCisgICAgLy8gRWl0aGVyIHRoZSBjYWxsZXIgb2YgdGhpcyBmdW5j
dGlvbiBzaG91bGQgZG8gdGhpcyBjb252ZXJzaW9uIG9yIGNhbGxlciBvZiB0aGUgZ2V0dGVyIGNv
cnJlc3BvbmRpbmcgdG8gdGhpcyBmdW5jdGlvbgorICAgIC8vIHNob3VsZCBkbyB0aGlzIGNvbnZl
cnNpb24uCisKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKHVzZXJTdHlsZVNoZWV0U3RyaW5n
KTsKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBkYXRhLmFwcGVuZCh1c2VyU3R5bGVTaGVl
dFN0cmluZywgbGVuZ3RoKTsKKworICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVkRGF0YTsKKyAgICBX
ZWJDb3JlOjpiYXNlNjRFbmNvZGUoZGF0YSwgZW5jb2RlZERhdGEpOworCisgICAgY29uc3QgY2hh
ciBwcmVmaXhbXSA9ICJkYXRhOnRleHQvY3NzO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LCI7CisgICAg
c2l6ZV90IHByZWZpeExlbmd0aCA9IHNpemVvZihwcmVmaXgpIC0gMTsKKyAgICBWZWN0b3I8Y2hh
cj4gZGF0YVVSTDsKKyAgICBkYXRhVVJMLnJlc2VydmVDYXBhY2l0eShwcmVmaXhMZW5ndGggKyBl
bmNvZGVkRGF0YS5zaXplKCkpOworICAgIGRhdGFVUkwuYXBwZW5kKHByZWZpeCwgcHJlZml4TGVu
Z3RoKTsKKyAgICBkYXRhVVJMLmFwcGVuZChlbmNvZGVkRGF0YSk7CisgICAgbV9wcml2YXRlLT5z
ZXRTdHJpbmcoV2ViS2l0VXNlclN0eWxlU2hlZXQsIFN0cmluZyhkYXRhVVJMLmRhdGEoKSwgZGF0
YVVSTC5zaXplKCkpKTsKK30KKworV2ViU3RyaW5nIFdlYlNldHRpbmdzOjp1c2VyU3R5bGVTaGVl
dExvY2F0aW9uKCkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRTdHJpbmcoV2ViS2l0VXNl
clN0eWxlU2hlZXRMb2NhdGlvbik7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldFVzZXJTdHls
ZVNoZWV0TG9jYXRpb24oY29uc3QgY2hhciogdXNlclN0eWxlU2hlZXRMb2NhdGlvbikKK3sKKyAg
ICBtX3ByaXZhdGUtPnNldFN0cmluZyhXZWJLaXRVc2VyU3R5bGVTaGVldExvY2F0aW9uLCB1c2Vy
U3R5bGVTaGVldExvY2F0aW9uKTsKK30KKworYm9vbCBXZWJTZXR0aW5nczo6YXJlTGlua3NIYW5k
bGVkRXh0ZXJuYWxseSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0Qm9vbGVh
bihCbGFja0JlcnJ5TGlua3NIYW5kbGVkRXh0ZXJuYWxseUVuYWJsZWQpOworfQorCit2b2lkIFdl
YlNldHRpbmdzOjpzZXRBcmVMaW5rc0hhbmRsZWRFeHRlcm5hbGx5KGJvb2wgZW5hYmxlZCkKK3sK
KyAgICBtX3ByaXZhdGUtPnNldEJvb2xlYW4oQmxhY2tCZXJyeUxpbmtzSGFuZGxlZEV4dGVybmFs
bHlFbmFibGVkLCBlbmFibGVkKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0QWxsb3dDcm9z
c1NpdGVSZXF1ZXN0cyhib29sIGFsbG93KQoreworICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihC
bGFja0JlcnJ5QWxsb3dDcm9zc1NpdGVSZXF1ZXN0cywgYWxsb3cpOworfQorCitib29sIFdlYlNl
dHRpbmdzOjphbGxvd0Nyb3NzU2l0ZVJlcXVlc3RzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLT5nZXRCb29sZWFuKEJsYWNrQmVycnlBbGxvd0Nyb3NzU2l0ZVJlcXVlc3RzKTsKK30K
KworYm9vbCBXZWJTZXR0aW5nczo6aXNVc2VyU2NhbGFibGUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3ByaXZhdGUtPmdldEJvb2xlYW4oQmxhY2tCZXJyeVVzZXJTY2FsYWJsZUVuYWJsZWQpOwor
fQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRVc2VyU2NhbGFibGUoYm9vbCBlbmFibGVkKQorewor
ICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihCbGFja0JlcnJ5VXNlclNjYWxhYmxlRW5hYmxlZCwg
ZW5hYmxlZCk7Cit9CisKK2ludCBXZWJTZXR0aW5nczo6dmlld3BvcnRXaWR0aCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0SW50ZWdlcihCbGFja0JlcnJ5Vmlld3BvcnRXaWR0
aCk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldFZpZXdwb3J0V2lkdGgoaW50IHdpZHRoKQor
eworICAgIG1fcHJpdmF0ZS0+c2V0SW50ZWdlcihCbGFja0JlcnJ5Vmlld3BvcnRXaWR0aCwgd2lk
dGgpOworfQorCitkb3VibGUgV2ViU2V0dGluZ3M6OmluaXRpYWxTY2FsZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0RG91YmxlKEJsYWNrQmVycnlJbml0aWFsU2NhbGUpOwor
fQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRJbml0aWFsU2NhbGUoZG91YmxlIGluaXRpYWxTY2Fs
ZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldERvdWJsZShCbGFja0JlcnJ5SW5pdGlhbFNjYWxlLCBp
bml0aWFsU2NhbGUpOworfQorCitpbnQgV2ViU2V0dGluZ3M6OmZpcnN0U2NoZWR1bGVkTGF5b3V0
RGVsYXkoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEludGVnZXIoV2ViS2l0
Rmlyc3RTY2hlZHVsZWRMYXlvdXREZWxheSk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldEZp
cnN0U2NoZWR1bGVkTGF5b3V0RGVsYXkoaW50IGRlbGF5KQoreworICAgIG1fcHJpdmF0ZS0+c2V0
SW50ZWdlcihXZWJLaXRGaXJzdFNjaGVkdWxlZExheW91dERlbGF5LCBkZWxheSk7Cit9CisKKy8v
IFdoZXRoZXIgdG8gaW5jbHVkZSBwYXR0ZXJuOiBpbiB0aGUgbGlzdCBvZiBzdHJpbmcgcGF0dGVy
bnMKK2Jvb2wgV2ViU2V0dGluZ3M6OnNob3VsZEhhbmRsZVBhdHRlcm5VcmxzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRCb29sZWFuKEJsYWNrQmVycnlIYW5kbGVQYXR0ZXJu
VVJMcyk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldFNob3VsZEhhbmRsZVBhdHRlcm5Vcmxz
KGJvb2wgaGFuZGxlUGF0dGVyblVSTHMpCit7CisgICAgbV9wcml2YXRlLT5zZXRCb29sZWFuKEJs
YWNrQmVycnlIYW5kbGVQYXR0ZXJuVVJMcywgaGFuZGxlUGF0dGVyblVSTHMpOworfQorCitib29s
IFdlYlNldHRpbmdzOjphcmVDb29raWVzRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+Z2V0Qm9vbGVhbihCbGFja0JlcnJ5Q29va2llc0VuYWJsZWQpOworfQorCit2b2lk
IFdlYlNldHRpbmdzOjpzZXRBcmVDb29raWVzRW5hYmxlZChib29sIGVuYWJsZSkKK3sKKyAgICBt
X3ByaXZhdGUtPnNldEJvb2xlYW4oQmxhY2tCZXJyeUNvb2tpZXNFbmFibGVkLCBlbmFibGUpOwor
fQorCitib29sIFdlYlNldHRpbmdzOjppc0xvY2FsU3RvcmFnZUVuYWJsZWQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEJvb2xlYW4oV2ViS2l0TG9jYWxTdG9yYWdlRW5hYmxl
ZCk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldElzTG9jYWxTdG9yYWdlRW5hYmxlZChib29s
IGVuYWJsZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldEJvb2xlYW4oV2ViS2l0TG9jYWxTdG9yYWdl
RW5hYmxlZCwgZW5hYmxlKTsKK30KKworYm9vbCBXZWJTZXR0aW5nczo6aXNEYXRhYmFzZXNFbmFi
bGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRCb29sZWFuKFdlYktpdERh
dGFiYXNlc0VuYWJsZWQpOworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRJc0RhdGFiYXNlc0Vu
YWJsZWQoYm9vbCBlbmFibGUpCit7CisgICAgbV9wcml2YXRlLT5zZXRCb29sZWFuKFdlYktpdERh
dGFiYXNlc0VuYWJsZWQsIGVuYWJsZSk7Cit9CisKK2Jvb2wgV2ViU2V0dGluZ3M6OmlzQXBwQ2Fj
aGVFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRCb29sZWFuKFdl
YktpdE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCk7Cit9CisKK3ZvaWQgV2ViU2V0
dGluZ3M6OnNldElzQXBwQ2FjaGVFbmFibGVkKGJvb2wgZW5hYmxlKQoreworICAgIG1fcHJpdmF0
ZS0+c2V0Qm9vbGVhbihXZWJLaXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQsIGVu
YWJsZSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBXZWJTZXR0aW5nczo6bG9jYWxTdG9yYWdl
UXVvdGEoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFVuc2lnbmVkTG9uZ0xv
bmcoV2ViS2l0TG9jYWxTdG9yYWdlUXVvdGEpOworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRM
b2NhbFN0b3JhZ2VRdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCit7CisgICAgbV9wcml2
YXRlLT5zZXRVbnNpZ25lZExvbmdMb25nKFdlYktpdExvY2FsU3RvcmFnZVF1b3RhLCBxdW90YSk7
Cit9CisKK2ludCBXZWJTZXR0aW5nczo6bWF4aW11bVBhZ2VzSW5DYWNoZSgpIGNvbnN0Cit7Cisg
ICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBiZSBjYWxsaW5nIGludG8gV2ViQ29yZSBmcm9tIGhl
cmUuIFRoaXMgY2xhc3Mgc2hvdWxkIGp1c3QgYmUgYSBzdGF0ZSBzdG9yZS4KKyAgICByZXR1cm4g
V2ViQ29yZTo6cGFnZUNhY2hlKCktPmNhcGFjaXR5KCk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6
OnNldE1heGltdW1QYWdlc0luQ2FjaGUoaW50IHBhZ2VzKQoreworICAgIC8vIEZJWE1FOiBXZSBz
aG91bGRuJ3QgYmUgY2FsbGluZyBpbnRvIFdlYkNvcmUgZnJvbSBoZXJlLiBUaGlzIGNsYXNzIHNo
b3VsZCBqdXN0IGJlIGEgc3RhdGUgc3RvcmUuCisgICAgdW5zaWduZWQgcmVhbFBhZ2VzID0gc3Rk
OjptYXgoMCwgcGFnZXMpOworICAgIFdlYkNvcmU6OnBhZ2VDYWNoZSgpLT5zZXRDYXBhY2l0eShy
ZWFsUGFnZXMpOworICAgIG1fcHJpdmF0ZS0+c2V0VW5zaWduZWQoV2ViS2l0TWF4aW11bVBhZ2Vz
SW5DYWNoZSwgcmVhbFBhZ2VzKTsKK30KKworV2ViU3RyaW5nIFdlYlNldHRpbmdzOjpsb2NhbFN0
b3JhZ2VQYXRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRTdHJpbmcoV2Vi
S2l0TG9jYWxTdG9yYWdlUGF0aCk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldExvY2FsU3Rv
cmFnZVBhdGgoY29uc3QgV2ViU3RyaW5nJiBwYXRoKQoreworICAgIG1fcHJpdmF0ZS0+c2V0U3Ry
aW5nKFdlYktpdExvY2FsU3RvcmFnZVBhdGgsIHBhdGgpOworfQorCitXZWJTdHJpbmcgV2ViU2V0
dGluZ3M6OmRhdGFiYXNlUGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0
U3RyaW5nKFdlYktpdERhdGFiYXNlUGF0aCk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldERh
dGFiYXNlUGF0aChjb25zdCBXZWJTdHJpbmcmIHBhdGgpCit7CisgICAgbV9wcml2YXRlLT5zZXRT
dHJpbmcoV2ViS2l0RGF0YWJhc2VQYXRoLCBwYXRoKTsKK30KKworV2ViU3RyaW5nIFdlYlNldHRp
bmdzOjphcHBDYWNoZVBhdGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFN0
cmluZyhXZWJLaXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZVBhdGgpOworfQorCit2b2lkIFdl
YlNldHRpbmdzOjpzZXRBcHBDYWNoZVBhdGgoY29uc3QgV2ViU3RyaW5nJiBwYXRoKQoreworICAg
IG1fcHJpdmF0ZS0+c2V0U3RyaW5nKFdlYktpdE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlUGF0
aCwgcGF0aCk7Cit9CisKK1dlYlN0cmluZyBXZWJTZXR0aW5nczo6cGFnZUdyb3VwTmFtZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0U3RyaW5nKFdlYktpdFBhZ2VHcm91cE5h
bWUpOworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRQYWdlR3JvdXBOYW1lKGNvbnN0IFdlYlN0
cmluZyYgcGFnZUdyb3VwTmFtZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFN0cmluZyhXZWJLaXRQ
YWdlR3JvdXBOYW1lLCBwYWdlR3JvdXBOYW1lKTsKK30KKworYm9vbCBXZWJTZXR0aW5nczo6aXNF
bWFpbE1vZGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEJvb2xlYW4oQmxh
Y2tCZXJyeUVtYWlsTW9kZUVuYWJsZWQpOworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRFbWFp
bE1vZGUoYm9vbCBlbmFibGUpCit7CisgICAgbV9wcml2YXRlLT5zZXRCb29sZWFuKEJsYWNrQmVy
cnlFbWFpbE1vZGVFbmFibGVkLCBlbmFibGUpOworfQorCitib29sIFdlYlNldHRpbmdzOjpzaG91
bGRSZW5kZXJBbmltYXRpb25zT25TY3JvbGxPclpvb20oKSBjb25zdAoreworICAgIHJldHVybiBt
X3ByaXZhdGUtPmdldEJvb2xlYW4oQmxhY2tCZXJyeVJlbmRlckFuaW1hdGlvbnNPblNjcm9sbE9y
Wm9vbUVuYWJsZWQpOworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRTaG91bGRSZW5kZXJBbmlt
YXRpb25zT25TY3JvbGxPclpvb20oYm9vbCBlbmFibGUpCit7CisgICAgbV9wcml2YXRlLT5zZXRC
b29sZWFuKEJsYWNrQmVycnlSZW5kZXJBbmltYXRpb25zT25TY3JvbGxPclpvb21FbmFibGVkLCBl
bmFibGUpOworfQorCit1bnNpZ25lZCBXZWJTZXR0aW5nczo6b3Zlclpvb21Db2xvcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0VW5zaWduZWQoQmxhY2tCZXJyeU92ZXJab29t
Q29sb3IpOworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRPdmVyWm9vbUNvbG9yKHVuc2lnbmVk
IGNvbG9yKQoreworICAgIG1fcHJpdmF0ZS0+c2V0VW5zaWduZWQoQmxhY2tCZXJyeU92ZXJab29t
Q29sb3IsIGNvbG9yKTsKK30KKwordW5zaWduZWQgV2ViU2V0dGluZ3M6OmJhY2tncm91bmRDb2xv
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0VW5zaWduZWQoQmxhY2tCZXJy
eUJhY2tncm91bmRDb2xvcik7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldEJhY2tncm91bmRD
b2xvcih1bnNpZ25lZCBjb2xvcikKK3sKKyAgICBtX3ByaXZhdGUtPnNldFVuc2lnbmVkKEJsYWNr
QmVycnlCYWNrZ3JvdW5kQ29sb3IsIGNvbG9yKTsKK30KKworYm9vbCBXZWJTZXR0aW5nczo6aXNX
cml0aW5nRGlyZWN0aW9uUlRMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRC
b29sZWFuKEJsYWNrQmVycnlVc2VSVExXcml0aW5nRGlyZWN0aW9uKTsKK30KKwordm9pZCBXZWJT
ZXR0aW5nczo6c2V0V3JpdGluZ0RpcmVjdGlvblJUTChib29sIHVzZVJUTFdyaXRpbmdEaXJlY3Rp
b24pCit7CisgICAgbV9wcml2YXRlLT5zZXRCb29sZWFuKEJsYWNrQmVycnlVc2VSVExXcml0aW5n
RGlyZWN0aW9uLCB1c2VSVExXcml0aW5nRGlyZWN0aW9uKTsKK30KKworYm9vbCBXZWJTZXR0aW5n
czo6dXNlV2ViS2l0Q2FjaGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEJv
b2xlYW4oQmxhY2tCZXJyeVVzZVdlYktpdENhY2hlKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6
c2V0VXNlV2ViS2l0Q2FjaGUoYm9vbCB1c2VXZWJLaXRDYWNoZSkKK3sKKyAgICBtX3ByaXZhdGUt
PnNldEJvb2xlYW4oQmxhY2tCZXJyeVVzZVdlYktpdENhY2hlLCB1c2VXZWJLaXRDYWNoZSk7Cit9
CisKK2Jvb2wgV2ViU2V0dGluZ3M6OmlzRnJhbWVGbGF0dGVuaW5nRW5hYmxlZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0Qm9vbGVhbihXZWJLaXRGcmFtZUZsYXR0ZW5pbmdF
bmFibGVkKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxl
ZChib29sIGVuYWJsZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldEJvb2xlYW4oV2ViS2l0RnJhbWVG
bGF0dGVuaW5nRW5hYmxlZCwgZW5hYmxlKTsKK30KKworYm9vbCBXZWJTZXR0aW5nczo6aXNEaXJl
Y3RSZW5kZXJpbmdUb1dpbmRvd0VuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZh
dGUtPmdldEJvb2xlYW4oQmxhY2tCZXJyeURpcmVjdFJlbmRlcmluZ1RvV2luZG93RW5hYmxlZCk7
Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldERpcmVjdFJlbmRlcmluZ1RvV2luZG93RW5hYmxl
ZChib29sIGVuYWJsZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldEJvb2xlYW4oQmxhY2tCZXJyeURp
cmVjdFJlbmRlcmluZ1RvV2luZG93RW5hYmxlZCwgZW5hYmxlKTsKK30KKwordW5zaWduZWQgV2Vi
U2V0dGluZ3M6Om1heFBsdWdpbkluc3RhbmNlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+Z2V0VW5zaWduZWQoQmxhY2tCZXJyeU1heFBsdWdpbkluc3RhbmNlcyk7Cit9CisKK3Zv
aWQgV2ViU2V0dGluZ3M6OnNldE1heFBsdWdpbkluc3RhbmNlcyh1bnNpZ25lZCBtYXhQbHVnaW5J
bnN0YW5jZXMpCit7CisgICAgbV9wcml2YXRlLT5zZXRVbnNpZ25lZChCbGFja0JlcnJ5TWF4UGx1
Z2luSW5zdGFuY2VzLCBtYXhQbHVnaW5JbnN0YW5jZXMpOworfQorCitib29sIFdlYlNldHRpbmdz
OjphcmVXZWJTb2NrZXRzRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
Z2V0Qm9vbGVhbihXZWJLaXRXZWJTb2NrZXRzRW5hYmxlZCk7Cit9CisKK3ZvaWQgV2ViU2V0dGlu
Z3M6OnNldFdlYlNvY2tldHNFbmFibGVkKGJvb2wgZW5hYmxlKQoreworICAgIG1fcHJpdmF0ZS0+
c2V0Qm9vbGVhbihXZWJLaXRXZWJTb2NrZXRzRW5hYmxlZCwgZW5hYmxlKTsKK30KKworYm9vbCBX
ZWJTZXR0aW5nczo6aXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUtPmdldEJvb2xlYW4oU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKTsKK30K
Kwordm9pZCBXZWJTZXR0aW5nczo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJvb2wgZW5h
YmxlKQoreworICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihTcGF0aWFsTmF2aWdhdGlvbkVuYWJs
ZWQsIGVuYWJsZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorfSAvLyBuYW1lc3BhY2Ug
QmxhY2tCZXJyeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJT
ZXR0aW5ncy5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5ncy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjFlODA4MzllZGIyMzVmNDExZDg1ODg4MDIzYzY3YjRmZjgwMDVhZGYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlNldHRpbmdzLmgK
QEAgLTAsMCArMSwyNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEs
IDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBXZWJTZXR0aW5nc19oCisjZGVmaW5lIFdlYlNl
dHRpbmdzX2gKKworI2luY2x1ZGUgIkJsYWNrQmVycnlHbG9iYWwuaCIKKworbmFtZXNwYWNlIEJs
YWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlNldHRpbmdzOworY2xh
c3MgV2ViU2V0dGluZ3NQcml2YXRlOworCisvKiEKKyAgICBAc3RydWN0IFdlYlNldHRpbmdzRGVs
ZWdhdGUKKyAgICBEZWZpbmVzIHRoZSBtZXRob2RzIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCBi
eSBhIGRlbGVnYXRlIG9mIFdlYlNldHRpbmdzLgorKi8KK3N0cnVjdCBCTEFDS0JFUlJZX0VYUE9S
VCBXZWJTZXR0aW5nc0RlbGVnYXRlIHsKKyAgICB2aXJ0dWFsIH5XZWJTZXR0aW5nc0RlbGVnYXRl
KCkgeyB9CisKKyAgICAvKiEKKyAgICAgICAgU2VudCB3aGVuIHRoZSB2YWx1ZSBvZiBhIHNldHRp
bmcgY2hhbmdlZCBhcyB3ZWxsIGFzIG9uIGluc3RhbnRpYXRpb24gb2YgYSBXZWJTZXR0aW5ncyBv
YmplY3QuCisgICAgICAgIEBwYXJhbSBzZXR0aW5ncyBUaGUgV2ViU2V0dGluZ3Mgb2JqZWN0IHRo
YXQgc2VudCB0aGUgbWVzc2FnZS4KKyAgICAqLworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VT
ZXR0aW5ncyhXZWJTZXR0aW5ncyopID0gMDsKK307CisKKy8qIQorICAgIEBjbGFzcyBXZWJTZXR0
aW5ncworKi8KK2NsYXNzIEJMQUNLQkVSUllfRVhQT1JUIFdlYlNldHRpbmdzIHsKK3ByaXZhdGU6
CisgICAgV2ViU2V0dGluZ3NQcml2YXRlKiBtX3ByaXZhdGU7CisgICAgV2ViU2V0dGluZ3MoKTsK
KyAgICBXZWJTZXR0aW5ncyhjb25zdCBXZWJTZXR0aW5ncyYpOworcHVibGljOgorICAgIHN0YXRp
YyBXZWJTZXR0aW5ncyogY3JlYXRlRnJvbVN0YW5kYXJkU2V0dGluZ3MoV2ViU2V0dGluZ3NEZWxl
Z2F0ZSogPSAwKTsKKyAgICB+V2ViU2V0dGluZ3MoKTsKKworICAgIHN0YXRpYyBXZWJTZXR0aW5n
cyogc3RhbmRhcmRTZXR0aW5ncygpOworCisgICAgdm9pZCBzZXREZWxlZ2F0ZShXZWJTZXR0aW5n
c0RlbGVnYXRlKik7CisgICAgV2ViU2V0dGluZ3NEZWxlZ2F0ZSogZGVsZWdhdGUoKTsKKworICAg
IHN0YXRpYyB2b2lkIGFkZFN1cHBvcnRlZE9iamVjdFBsdWdpbk1JTUVUeXBlKGNvbnN0IGNoYXIq
KTsKKyAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZE9iamVjdE1JTUVUeXBlKGNvbnN0IFdlYlN0
cmluZyYpOworICAgIHN0YXRpYyBXZWJTdHJpbmcgZ2V0Tm9ybWFsaXplZE1JTUVUeXBlKGNvbnN0
IFdlYlN0cmluZyYpOworCisgICAgYm9vbCB4c3NBdWRpdG9yRW5hYmxlZCgpIGNvbnN0OworICAg
IHZvaWQgc2V0WFNTQXVkaXRvckVuYWJsZWQoYm9vbCk7CisKKyAgICBib29sIGxvYWRzSW1hZ2Vz
QXV0b21hdGljYWxseSgpIGNvbnN0OworICAgIHZvaWQgc2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNh
bGx5KGJvb2wpOworCisgICAgYm9vbCBzaG91bGREcmF3Qm9yZGVyV2hpbGVMb2FkaW5nSW1hZ2Vz
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRTaG91bGREcmF3Qm9yZGVyV2hpbGVMb2FkaW5nSW1hZ2Vz
KGJvb2wpOworCisgICAgYm9vbCBpc0phdmFTY3JpcHRFbmFibGVkKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRKYXZhU2NyaXB0RW5hYmxlZChib29sKTsKKworICAgIGJvb2wgaXNQcml2YXRlQnJvd3Np
bmdFbmFibGVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJv
b2wpOworCisgICAgaW50IGRlZmF1bHRGaXhlZEZvbnRTaXplKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXREZWZhdWx0Rml4ZWRGb250U2l6ZShpbnQpOworCisgICAgaW50IGRlZmF1bHRGb250U2l6ZSgp
IGNvbnN0OworICAgIHZvaWQgc2V0RGVmYXVsdEZvbnRTaXplKGludCk7CisKKyAgICBpbnQgbWlu
aW11bUZvbnRTaXplKCkgY29uc3Q7CisgICAgdm9pZCBzZXRNaW5pbXVtRm9udFNpemUoaW50KTsK
KworICAgIFdlYlN0cmluZyBzZXJpZkZvbnRGYW1pbHkoKSBjb25zdDsKKyAgICB2b2lkIHNldFNl
cmlmRm9udEZhbWlseShjb25zdCBjaGFyKik7CisgICAgV2ViU3RyaW5nIGZpeGVkRm9udEZhbWls
eSgpIGNvbnN0OworICAgIHZvaWQgc2V0Rml4ZWRGb250RmFtaWx5KGNvbnN0IGNoYXIqKTsKKyAg
ICBXZWJTdHJpbmcgc2Fuc1NlcmlmRm9udEZhbWlseSgpIGNvbnN0OworICAgIHZvaWQgc2V0U2Fu
c1NlcmlmRm9udEZhbWlseShjb25zdCBjaGFyKik7CisgICAgV2ViU3RyaW5nIHN0YW5kYXJkRm9u
dEZhbWlseSgpIGNvbnN0OworICAgIHZvaWQgc2V0U3RhbmRhcmRGb250RmFtaWx5KGNvbnN0IGNo
YXIqKTsKKworICAgIHZvaWQgc2V0RG93bmxvYWRhYmxlQmluYXJ5Rm9udHNFbmFibGVkKGJvb2wp
OworICAgIGJvb2wgZG93bmxvYWRhYmxlQmluYXJ5Rm9udHNFbmFibGVkKCkgY29uc3Q7CisKKyAg
ICBXZWJTdHJpbmcgdXNlckFnZW50U3RyaW5nKCkgY29uc3Q7CisgICAgdm9pZCBzZXRVc2VyQWdl
bnRTdHJpbmcoY29uc3QgY2hhciopOworCisgICAgV2ViU3RyaW5nIGRlZmF1bHRUZXh0RW5jb2Rp
bmdOYW1lKCkgY29uc3Q7CisgICAgdm9pZCBzZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShjb25z
dCBjaGFyKik7CisKKyAgICBib29sIGlzWm9vbVRvRml0T25Mb2FkKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRab29tVG9GaXRPbkxvYWQoYm9vbCk7CisKKyAgICBlbnVtIFRleHRSZWZsb3dNb2RlIHsg
VGV4dFJlZmxvd0Rpc2FibGVkLCBUZXh0UmVmbG93RW5hYmxlZCwgVGV4dFJlZmxvd0VuYWJsZWRP
bmx5Rm9yQmxvY2tab29tIH07CisgICAgVGV4dFJlZmxvd01vZGUgdGV4dFJlZmxvd01vZGUoKSBj
b25zdDsKKyAgICB2b2lkIHNldFRleHRSZWZsb3dNb2RlKFRleHRSZWZsb3dNb2RlKTsKKworICAg
IGJvb2wgaXNTY3JvbGxiYXJzRW5hYmxlZCgpIGNvbnN0OworICAgIHZvaWQgc2V0U2Nyb2xsYmFy
c0VuYWJsZWQoYm9vbCk7CisKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgcmVuYW1pbmcgdGhpcyBt
ZXRob2QgdXBzdHJlYW0sIHdoZXJlIGl0IGlzIGNhbGxlZCBqYXZhU2NyaXB0Q2FuT3BlbldpbmRv
d3NBdXRvbWF0aWNhbGx5LgorICAgIGJvb2wgY2FuSmF2YVNjcmlwdE9wZW5XaW5kb3dzQXV0b21h
dGljYWxseSgpIGNvbnN0OworICAgIHZvaWQgc2V0SmF2YVNjcmlwdE9wZW5XaW5kb3dzQXV0b21h
dGljYWxseShib29sKTsKKworICAgIGJvb2wgYXJlUGx1Z2luc0VuYWJsZWQoKSBjb25zdDsKKyAg
ICB2b2lkIHNldFBsdWdpbnNFbmFibGVkKGJvb2wpOworCisgICAgYm9vbCBpc0dlb2xvY2F0aW9u
RW5hYmxlZCgpIGNvbnN0OworICAgIHZvaWQgc2V0R2VvbG9jYXRpb25FbmFibGVkKGJvb2wpOwor
CisgICAgLy8gQ29udGV4dCBpbmZvCisgICAgYm9vbCBkb2VzR2V0Rm9jdXNOb2RlQ29udGV4dCgp
IGNvbnN0OworICAgIHZvaWQgc2V0R2V0Rm9jdXNOb2RlQ29udGV4dChib29sKTsKKworICAgIFdl
YlN0cmluZyB1c2VyU3R5bGVTaGVldFN0cmluZygpIGNvbnN0OworICAgIHZvaWQgc2V0VXNlclN0
eWxlU2hlZXRTdHJpbmcoY29uc3QgY2hhciopOworCisgICAgV2ViU3RyaW5nIHVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24oKTsKKyAgICB2b2lkIHNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY29uc3Qg
Y2hhciopOworCisgICAgLy8gRXh0ZXJuYWwgbGluayBoYW5kbGVycworICAgIGJvb2wgYXJlTGlu
a3NIYW5kbGVkRXh0ZXJuYWxseSgpIGNvbnN0OworICAgIHZvaWQgc2V0QXJlTGlua3NIYW5kbGVk
RXh0ZXJuYWxseShib29sKTsKKworICAgIC8vIEJyb3dzZXJGaWVsZDIgc2V0dGluZ3MKKyAgICB2
b2lkIHNldEFsbG93Q3Jvc3NTaXRlUmVxdWVzdHMoYm9vbCk7CisgICAgYm9vbCBhbGxvd0Nyb3Nz
U2l0ZVJlcXVlc3RzKCkgY29uc3Q7CisgICAgYm9vbCBpc1VzZXJTY2FsYWJsZSgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0VXNlclNjYWxhYmxlKGJvb2wpOworICAgIGludCB2aWV3cG9ydFdpZHRoKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRWaWV3cG9ydFdpZHRoKGludCk7CisgICAgZG91YmxlIGluaXRp
YWxTY2FsZSgpIGNvbnN0OworICAgIHZvaWQgc2V0SW5pdGlhbFNjYWxlKGRvdWJsZSk7CisKKyAg
ICBpbnQgZmlyc3RTY2hlZHVsZWRMYXlvdXREZWxheSgpIGNvbnN0OworICAgIHZvaWQgc2V0Rmly
c3RTY2hlZHVsZWRMYXlvdXREZWxheShpbnQpOworCisgICAgLy8gV2hldGhlciB0byBpbmNsdWRl
IHBhdHRlcm46IGluIHRoZSBsaXN0IG9mIHN0cmluZyBwYXR0ZXJucy4KKyAgICBib29sIHNob3Vs
ZEhhbmRsZVBhdHRlcm5VcmxzKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTaG91bGRIYW5kbGVQYXR0
ZXJuVXJscyhib29sKTsKKworICAgIGJvb2wgYXJlQ29va2llc0VuYWJsZWQoKSBjb25zdDsKKyAg
ICB2b2lkIHNldEFyZUNvb2tpZXNFbmFibGVkKGJvb2wpOworCisgICAgLy8gV2ViIHN0b3JhZ2Ug
c2V0dGluZ3MKKyAgICBib29sIGlzTG9jYWxTdG9yYWdlRW5hYmxlZCgpIGNvbnN0OworICAgIHZv
aWQgc2V0SXNMb2NhbFN0b3JhZ2VFbmFibGVkKGJvb2wpOworCisgICAgYm9vbCBpc0RhdGFiYXNl
c0VuYWJsZWQoKSBjb25zdDsKKyAgICB2b2lkIHNldElzRGF0YWJhc2VzRW5hYmxlZChib29sKTsK
KworICAgIGJvb2wgaXNBcHBDYWNoZUVuYWJsZWQoKSBjb25zdDsKKyAgICB2b2lkIHNldElzQXBw
Q2FjaGVFbmFibGVkKGJvb2wpOworCisgICAgdW5zaWduZWQgbG9uZyBsb25nIGxvY2FsU3RvcmFn
ZVF1b3RhKCkgY29uc3Q7CisgICAgdm9pZCBzZXRMb2NhbFN0b3JhZ2VRdW90YSh1bnNpZ25lZCBs
b25nIGxvbmcpOworCisgICAgLy8gUGFnZSBjYWNoZQorICAgIHZvaWQgc2V0TWF4aW11bVBhZ2Vz
SW5DYWNoZShpbnQpOworICAgIGludCBtYXhpbXVtUGFnZXNJbkNhY2hlKCkgY29uc3Q7CisKKyAg
ICBXZWJTdHJpbmcgbG9jYWxTdG9yYWdlUGF0aCgpIGNvbnN0OworICAgIHZvaWQgc2V0TG9jYWxT
dG9yYWdlUGF0aChjb25zdCBXZWJTdHJpbmcmKTsKKworICAgIFdlYlN0cmluZyBkYXRhYmFzZVBh
dGgoKSBjb25zdDsKKyAgICB2b2lkIHNldERhdGFiYXNlUGF0aChjb25zdCBXZWJTdHJpbmcmKTsK
KworICAgIFdlYlN0cmluZyBhcHBDYWNoZVBhdGgoKSBjb25zdDsKKyAgICB2b2lkIHNldEFwcENh
Y2hlUGF0aChjb25zdCBXZWJTdHJpbmcmKTsKKworICAgIFdlYlN0cmluZyBwYWdlR3JvdXBOYW1l
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRQYWdlR3JvdXBOYW1lKGNvbnN0IFdlYlN0cmluZyYpOwor
CisgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIGFuIGVtYWlsIG1vZGUuIEluc3RlYWQs
IHdlIHNob3VsZCBleHBvc2UgYWxsIGVtYWlsLXJlbGF0ZWQgc2V0dGluZ3MKKyAgICAvLyBzbyB0
aGF0IHRoZSBlbWFpbCBjbGllbnQgY2FuIHRvZ2dsZSB0aGVtIGRpcmVjdGx5LgorICAgIGJvb2wg
aXNFbWFpbE1vZGUoKSBjb25zdDsKKyAgICB2b2lkIHNldEVtYWlsTW9kZShib29sIGVuYWJsZSk7
CisKKyAgICBib29sIHNob3VsZFJlbmRlckFuaW1hdGlvbnNPblNjcm9sbE9yWm9vbSgpIGNvbnN0
OworICAgIHZvaWQgc2V0U2hvdWxkUmVuZGVyQW5pbWF0aW9uc09uU2Nyb2xsT3Jab29tKGJvb2wg
ZW5hYmxlKTsKKworICAgIHVuc2lnbmVkIG92ZXJab29tQ29sb3IoKSBjb25zdDsKKyAgICB2b2lk
IHNldE92ZXJab29tQ29sb3IodW5zaWduZWQpOworCisgICAgdW5zaWduZWQgYmFja2dyb3VuZENv
bG9yKCkgY29uc3Q7CisgICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IodW5zaWduZWQpOworCisg
ICAgYm9vbCBpc1dyaXRpbmdEaXJlY3Rpb25SVEwoKSBjb25zdDsKKyAgICB2b2lkIHNldFdyaXRp
bmdEaXJlY3Rpb25SVEwoYm9vbCk7CisKKyAgICBib29sIHVzZVdlYktpdENhY2hlKCkgY29uc3Q7
CisgICAgdm9pZCBzZXRVc2VXZWJLaXRDYWNoZShib29sKTsKKworICAgIGJvb2wgaXNGcmFtZUZs
YXR0ZW5pbmdFbmFibGVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRGcmFtZUZsYXR0ZW5pbmdFbmFi
bGVkKGJvb2wpOworCisgICAgYm9vbCBpc0RpcmVjdFJlbmRlcmluZ1RvV2luZG93RW5hYmxlZCgp
IGNvbnN0OworICAgIHZvaWQgc2V0RGlyZWN0UmVuZGVyaW5nVG9XaW5kb3dFbmFibGVkKGJvb2wp
OworCisgICAgdW5zaWduZWQgbWF4UGx1Z2luSW5zdGFuY2VzKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRNYXhQbHVnaW5JbnN0YW5jZXModW5zaWduZWQgbnVtKTsKKworICAgIGJvb2wgYXJlV2ViU29j
a2V0c0VuYWJsZWQoKSBjb25zdDsKKyAgICB2b2lkIHNldFdlYlNvY2tldHNFbmFibGVkKGJvb2wp
OworCisgICAgYm9vbCBpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCgpIGNvbnN0OworICAgIHZv
aWQgc2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJvb2wpOworfTsKKworLyohCisgICAgQGNs
YXNzIFdlYlNldHRpbmdzVHJhbnNhY3Rpb24KKyAgICBEZWZpbmVzIGEgc2NvcGUgZ3VhcmQgdGhh
dCBzdXBwcmVzc2VzIGRpZENoYW5nZVNldHRpbmdzIG1lc3NhZ2VzIHdpdGhpbiBpdHMgc2NvcGUu
CisgICAgT24gZGVzdHJ1Y3Rpb24gdGhlIGd1YXJkZWQgV2ViU2V0dGluZ3Mgb2JqZWN0IHdpbGwg
ZGlzcGF0Y2ggZXhhY3RseSBvbmUgZGlkQ2hhbmdlU2V0dGluZ3MgbWVzc2FnZS4KKyovCitjbGFz
cyBCTEFDS0JFUlJZX0VYUE9SVCBXZWJTZXR0aW5nc1RyYW5zYWN0aW9uIHsKK3B1YmxpYzoKKyAg
ICBXZWJTZXR0aW5nc1RyYW5zYWN0aW9uKFdlYlNldHRpbmdzKiBzZXR0aW5ncykKKyAgICAgICAg
OiBtX3NldHRpbmdzKHNldHRpbmdzKQorICAgICAgICAsIG1fc2F2ZWREZWxlZ2F0ZSgwKQorICAg
IHsKKyAgICAgICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
bV9zYXZlZERlbGVnYXRlID0gc2V0dGluZ3MtPmRlbGVnYXRlKCk7CisgICAgICAgIHNldHRpbmdz
LT5zZXREZWxlZ2F0ZSgwKTsKKyAgICB9CisKKyAgICB+V2ViU2V0dGluZ3NUcmFuc2FjdGlvbigp
CisgICAgeworICAgICAgICBpZiAoIW1fc2V0dGluZ3MgfHwgIW1fc2F2ZWREZWxlZ2F0ZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9zZXR0aW5ncy0+c2V0RGVsZWdhdGUobV9zYXZl
ZERlbGVnYXRlKTsKKyAgICAgICAgbV9zYXZlZERlbGVnYXRlLT5kaWRDaGFuZ2VTZXR0aW5ncyht
X3NldHRpbmdzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgV2ViU2V0dGluZ3NUcmFuc2FjdGlv
bihjb25zdCBXZWJTZXR0aW5nc1RyYW5zYWN0aW9uJik7CisgICAgV2ViU2V0dGluZ3NUcmFuc2Fj
dGlvbiYgb3BlcmF0b3I9KGNvbnN0IFdlYlNldHRpbmdzVHJhbnNhY3Rpb24mKTsKKworICAgIFdl
YlNldHRpbmdzKiBtX3NldHRpbmdzOworICAgIFdlYlNldHRpbmdzRGVsZWdhdGUqIG1fc2F2ZWRE
ZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorfSAvLyBuYW1lc3BhY2UgQmxh
Y2tCZXJyeQorCisjZW5kaWYgLy8gV2ViU2V0dGluZ3NfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5nc19wLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL1dlYlNldHRpbmdzX3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ODExMzM1ZDI1ODVjNzY1MWM3
YzczN2U5N2FjNDU0NDUxZDA5MTBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5nc19wLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExp
bWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRl
ZiBXZWJTZXR0aW5nc19wX2gKKyNkZWZpbmUgV2ViU2V0dGluZ3NfcF9oCisKKyNpbmNsdWRlICJX
ZWJTZXR0aW5ncy5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CisKKyNkZWZpbmUgc3ludGhlc2l6ZUFjY2Vzc29yc0ZvclByaW1p
dGl2ZVZhbHVlUHJlZml4QW5kVHlwZShwcmVmaXgsIHR5cGUpIFwKKyAgICAgdm9pZCBzZXQjI3By
ZWZpeChjb25zdCBXVEY6OlN0cmluZyYga2V5LCB0eXBlIG5ld1ZhbHVlKSB7IFwKKyAgICAgICAg
IEFTU0VSVChpbXBsKTsgXAorICAgICAgICAgaWYgKGdldCMjcHJlZml4KGtleSkgPT0gbmV3VmFs
dWUpIFwKKyAgICAgICAgICAgIHJldHVybjsgXAorICAgICAgICAgaWYgKGNvcHlPbldyaXRlKSB7
IFwKKyAgICAgICAgICAgIGNvcHlPbldyaXRlID0gZmFsc2U7IFwKKyAgICAgICAgICAgIGltcGwg
PSBuZXcgV2ViU2V0dGluZ3NQcml2YXRlSW1wbCgqaW1wbCk7IFwKKyAgICAgICAgIH0gXAorICAg
ICAgICAgUHJpbWl0aXZlVmFsdWUgcHJpbWl0aXZlVmFsdWU7IFwKKyAgICAgICAgIHByaW1pdGl2
ZVZhbHVlLnByZWZpeCMjVmFsdWUgPSBuZXdWYWx1ZTsgXAorICAgICAgICAgaW1wbC0+cHJpbWl0
aXZlVmFsdWVzLnNldChrZXksIHByaW1pdGl2ZVZhbHVlKTsgXAorICAgICAgICAgaWYgKGRlbGVn
YXRlKSBcCisgICAgICAgICAgICBkZWxlZ2F0ZS0+ZGlkQ2hhbmdlU2V0dGluZ3Moc2VuZGVyKTsg
XAorICAgICB9IFwKKyAgICAgdHlwZSBnZXQjI3ByZWZpeChjb25zdCBXVEY6OlN0cmluZyYga2V5
KSBjb25zdCB7IFwKKyAgICAgICAgICBBU1NFUlQoaW1wbCk7IFwKKyAgICAgICAgICBpZiAoIWlt
cGwtPnByaW1pdGl2ZVZhbHVlcy5jb250YWlucyhrZXkpKSBcCisgICAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDx0eXBlPihmYWxzZSk7IFwKKyAgICAgICAgICByZXR1cm4gaW1wbC0+cHJp
bWl0aXZlVmFsdWVzLmdldChrZXkpLnByZWZpeCMjVmFsdWU7IFwKKyAgICAgIH0KKworbmFtZXNw
YWNlIFdURiB7CitjbGFzcyBTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25h
bWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3QgV2ViU2V0dGluZ3NQcml2YXRlIHsKKyAgICB1bmlv
biBQcmltaXRpdmVWYWx1ZSB7CisgICAgICAgIFdlYlNldHRpbmdzOjpUZXh0UmVmbG93TW9kZSBU
ZXh0UmVmbG93TW9kZVZhbHVlOworICAgICAgICBib29sIEJvb2xlYW5WYWx1ZTsKKyAgICAgICAg
ZG91YmxlIERvdWJsZVZhbHVlOworICAgICAgICBpbnQgSW50ZWdlclZhbHVlOworICAgICAgICB1
bnNpZ25lZCBVbnNpZ25lZFZhbHVlOworICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgVW5zaWdu
ZWRMb25nTG9uZ1ZhbHVlOworICAgIH07CisKKyAgICBzdHJ1Y3QgV2ViU2V0dGluZ3NQcml2YXRl
SW1wbCB7CisgICAgICAgIFdURjo6SGFzaE1hcDxXVEY6OlN0cmluZywgUHJpbWl0aXZlVmFsdWU+
IHByaW1pdGl2ZVZhbHVlczsKKyAgICAgICAgV1RGOjpIYXNoTWFwPFdURjo6U3RyaW5nLCBXVEY6
OlN0cmluZz4gc3RyaW5nVmFsdWVzOworICAgIH07CisKKyAgICBXZWJTZXR0aW5nc1ByaXZhdGVJ
bXBsKiBpbXBsOworICAgIFdlYlNldHRpbmdzRGVsZWdhdGUqIGRlbGVnYXRlOworICAgIFdlYlNl
dHRpbmdzKiBzZW5kZXI7CisgICAgYm9vbCBjb3B5T25Xcml0ZTsKKworICAgIFdlYlNldHRpbmdz
UHJpdmF0ZSgpOworCisgICAgc3ludGhlc2l6ZUFjY2Vzc29yc0ZvclByaW1pdGl2ZVZhbHVlUHJl
Zml4QW5kVHlwZShUZXh0UmVmbG93TW9kZSwgV2ViU2V0dGluZ3M6OlRleHRSZWZsb3dNb2RlKTsK
KworICAgIHN5bnRoZXNpemVBY2Nlc3NvcnNGb3JQcmltaXRpdmVWYWx1ZVByZWZpeEFuZFR5cGUo
Qm9vbGVhbiwgYm9vbCk7CisKKyAgICBzeW50aGVzaXplQWNjZXNzb3JzRm9yUHJpbWl0aXZlVmFs
dWVQcmVmaXhBbmRUeXBlKERvdWJsZSwgZG91YmxlKTsKKworICAgIHN5bnRoZXNpemVBY2Nlc3Nv
cnNGb3JQcmltaXRpdmVWYWx1ZVByZWZpeEFuZFR5cGUoSW50ZWdlciwgaW50KTsKKworICAgIHN5
bnRoZXNpemVBY2Nlc3NvcnNGb3JQcmltaXRpdmVWYWx1ZVByZWZpeEFuZFR5cGUoVW5zaWduZWQs
IHVuc2lnbmVkKTsKKworICAgIHN5bnRoZXNpemVBY2Nlc3NvcnNGb3JQcmltaXRpdmVWYWx1ZVBy
ZWZpeEFuZFR5cGUoVW5zaWduZWRMb25nTG9uZywgdW5zaWduZWQgbG9uZyBsb25nKTsKKworICAg
IFdURjo6U3RyaW5nIGdldFN0cmluZyhjb25zdCBXVEY6OlN0cmluZyYga2V5KSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGltcGwpOworICAgICAgICBpZiAoIWltcGwtPnN0cmluZ1ZhbHVl
cy5jb250YWlucyhrZXkpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6U3RyaW5nKCk7CisKKyAg
ICAgICAgcmV0dXJuIGltcGwtPnN0cmluZ1ZhbHVlcy5nZXQoa2V5KTsKKyAgICB9CisKKyAgICB2
b2lkIHNldFN0cmluZyhjb25zdCBXVEY6OlN0cmluZyYga2V5LCBjb25zdCBXVEY6OlN0cmluZyYg
bmV3VmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaW1wbCk7CisgICAgICAgIGlmIChnZXRT
dHJpbmcoa2V5KSA9PSBuZXdWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBp
ZiAoY29weU9uV3JpdGUpIHsKKyAgICAgICAgICAgIGNvcHlPbldyaXRlID0gZmFsc2U7CisgICAg
ICAgICAgICBpbXBsID0gbmV3IFdlYlNldHRpbmdzUHJpdmF0ZUltcGwoKmltcGwpOworICAgICAg
ICB9CisKKyAgICAgICAgaW1wbC0+c3RyaW5nVmFsdWVzLnNldChrZXksIG5ld1ZhbHVlKTsKKyAg
ICAgICAgaWYgKGRlbGVnYXRlKQorICAgICAgICAgICAgZGVsZWdhdGUtPmRpZENoYW5nZVNldHRp
bmdzKHNlbmRlcik7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cit9IC8vIG5h
bWVzcGFjZSBCbGFja0JlcnJ5CisKKyNlbmRpZiAvLyBXZWJTZXR0aW5nc19wX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127072</attachid>
            <date>2012-02-14 16:02:14 -0800</date>
            <delta_ts>2012-02-14 16:26:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78633-20120214185943.patch</filename>
            <type>text/plain</type>
            <size>42164</size>
            <attacher name="Nima Ghanavatian">nima.ghanavatian</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NzEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDM5M2E3MTEyNWNmZGQ2ZDlj
MWJkYTFlMTk4OTkxZjFkZGRkZGVjODUuLmVjZGI5ZTYzY2ZmNTI0MTIzNDBmYmM5MjgzYzg0NWE2
ZmIzNmZlMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTggQEAKIDIwMTItMDItMTQgIE5pbWEgR2hh
bmF2YXRpYW4gIDxuZ2hhbmF2YXRpYW5AcmltLmNvbT4KIAorICAgICAgICBbQmxhY2tCZXJyeV0g
VXBzdHJlYW1pbmcgV2ViU2V0dGluZ3MgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbml0aWFsIHVwc3RyZWFtaW5nLCBubyBuZXcgdGVzdHMuCisK
KyAgICAgICAgKiBibGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5ncy5jcHA6IEFkZGVkLgorICAgICAg
ICAqIGJsYWNrYmVycnkvQXBpL1dlYlNldHRpbmdzLmg6IEFkZGVkLgorICAgICAgICAqIGJsYWNr
YmVycnkvQXBpL1dlYlNldHRpbmdzX3AuaDogQWRkZWQuCisKKzIwMTItMDItMTQgIE5pbWEgR2hh
bmF2YXRpYW4gIDxuZ2hhbmF2YXRpYW5AcmltLmNvbT4KKwogICAgICAgICBbQmxhY2tCZXJyeV0g
VXBzdHJlYW1pbmcgRE9NU3VwcG9ydCBmaWxlcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2MDcKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYlNldHRpbmdzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NjA5NjRjZDhkMzQ5MTdiZjZjNTdjZDFi
OTg3MjQ0Yjc2MDFjZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJTZXR0aW5ncy5jcHAKQEAgLTAsMCArMSw4MTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYlNldHRpbmdzLmgiCisKKyNpbmNsdWRlICJXZWJTZXR0aW5n
c19wLmgiCisKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlIDxCYXNlNjQuaD4KKyNp
bmNsdWRlIDxDb2xvci5oPgorI2luY2x1ZGUgPFBhZ2VDYWNoZS5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgQmxhY2tCZXJy
eSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIEJs
YWNrQmVycnlBbGxvd0Nyb3NzU2l0ZVJlcXVlc3RzLCAoIkJsYWNrQmVycnlBbGxvd0Nyb3NzU2l0
ZVJlcXVlc3RzIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIEJsYWNrQmVycnlCYWNr
Z3JvdW5kQ29sb3IsICgiQmxhY2tCZXJyeUJhY2tncm91bmRDb2xvciIpKTsKK0RFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCBCbGFja0JlcnJ5Q29va2llc0VuYWJsZWQsICgiQmxhY2tCZXJyeUNv
b2tpZXNFbmFibGVkIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIEJsYWNrQmVycnlE
aXJlY3RSZW5kZXJpbmdUb1dpbmRvd0VuYWJsZWQsICgiQmxhY2tCZXJyeURpcmVjdFJlbmRlcmlu
Z1RvV2luZG93RW5hYmxlZCIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBCbGFja0Jl
cnJ5RHJhd0JvcmRlcldoaWxlTG9hZGluZ0ltYWdlcywgKCJCbGFja0JlcnJ5RHJhd0JvcmRlcldo
aWxlTG9hZGluZ0ltYWdlcyIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBCbGFja0Jl
cnJ5RW1haWxNb2RlRW5hYmxlZCwgKCJCbGFja0JlcnJ5RW1haWxNb2RlRW5hYmxlZCIpKTsKK0RF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBCbGFja0JlcnJ5R2V0Rm9jdXNOb2RlQ29udGV4dEVu
YWJsZWQsICgiQmxhY2tCZXJyeUdldEZvY3VzTm9kZUNvbnRleHRFbmFibGVkIikpOworREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIEJsYWNrQmVycnlIYW5kbGVQYXR0ZXJuVVJMcywgKCJCbGFj
a0JlcnJ5SGFuZGxlUGF0dGVyblVSTHMiKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywg
QmxhY2tCZXJyeUluaXRpYWxTY2FsZSwgKCJCbGFja0JlcnJ5SW5pdGlhbFNjYWxlIikpOworREVG
SU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIEJsYWNrQmVycnlMaW5rc0hhbmRsZWRFeHRlcm5hbGx5
RW5hYmxlZCwgKCJCbGFja0JlcnJ5TGlua3NIYW5kbGVkRXh0ZXJuYWxseUVuYWJsZWQiKSk7CitE
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgQmxhY2tCZXJyeU1heFBsdWdpbkluc3RhbmNlcywg
KCJCbGFja0JlcnJ5TWF4UGx1Z2luSW5zdGFuY2VzIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChT
dHJpbmcsIEJsYWNrQmVycnlPdmVyWm9vbUNvbG9yLCAoIkJsYWNrQmVycnlPdmVyWm9vbUNvbG9y
IikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIEJsYWNrQmVycnlSZW5kZXJBbmltYXRp
b25zT25TY3JvbGxPclpvb21FbmFibGVkLCAoIkJsYWNrQmVycnlSZW5kZXJBbmltYXRpb25zT25T
Y3JvbGxPclpvb21FbmFibGVkIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIEJsYWNr
QmVycnlTY3JvbGxiYXJzRW5hYmxlZCwgKCJCbGFja0JlcnJ5U2Nyb2xsYmFyc0VuYWJsZWQiKSk7
CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgQmxhY2tCZXJyeVRleHRSZWZsb3dNb2RlLCAo
IkJsYWNrQmVycnlUZXh0UmVmbG93TW9kZSIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCBCbGFja0JlcnJ5VXNlUlRMV3JpdGluZ0RpcmVjdGlvbiwgKCJCbGFja0JlcnJ5VXNlUlRMV3Jp
dGluZ0RpcmVjdGlvbiIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBCbGFja0JlcnJ5
VXNlV2ViS2l0Q2FjaGUsICgiQmxhY2tCZXJyeVVzZVdlYktpdENhY2hlIikpOworREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIEJsYWNrQmVycnlVc2VyQWdlbnRTdHJpbmcsICgiQmxhY2tCZXJy
eVVzZXJBZ2VudFN0cmluZyIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBCbGFja0Jl
cnJ5VXNlclNjYWxhYmxlRW5hYmxlZCwgKCJCbGFja0JlcnJ5VXNlclNjYWxhYmxlRW5hYmxlZCIp
KTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBCbGFja0JlcnJ5Vmlld3BvcnRXaWR0aCwg
KCJCbGFja0JlcnJ5Vmlld3BvcnRXaWR0aCIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCBCbGFja0JlcnJ5Wm9vbVRvRml0T25Mb2FkRW5hYmxlZCwgKCJCbGFja0JlcnJ5Wm9vbVRvRml0
T25Mb2FkRW5hYmxlZCIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBXZWJLaXREYXRh
YmFzZVBhdGgsICgiV2ViS2l0RGF0YWJhc2VQYXRoIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChT
dHJpbmcsIFdlYktpdERhdGFiYXNlc0VuYWJsZWQsICgiV2ViS2l0RGF0YWJhc2VzRW5hYmxlZCIp
KTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBXZWJLaXREZWZhdWx0Rml4ZWRGb250U2l6
ZSwgKCJXZWJLaXREZWZhdWx0Rml4ZWRGb250U2l6ZSIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBXZWJLaXREZWZhdWx0Rm9udFNpemUsICgiV2ViS2l0RGVmYXVsdEZvbnRTaXplIikp
OworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdERlZmF1bHRUZXh0RW5jb2RpbmdO
YW1lLCAoIldlYktpdERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lIikpOworREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIFdlYktpdERvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCwgKCJXZWJL
aXREb3dubG9hZGFibGVCaW5hcnlGb250c0VuYWJsZWQiKSk7CitERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgV2ViS2l0Rmlyc3RTY2hlZHVsZWRMYXlvdXREZWxheSwgKCJXZWJLaXRGaXJzdFNj
aGVkdWxlZExheW91dERlbGF5IikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktp
dEZpeGVkRm9udEZhbWlseSwgKCJXZWJLaXRGaXhlZEZvbnRGYW1pbHkiKSk7CitERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZywgV2ViS2l0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZCwgKCJXZWJLaXRG
cmFtZUZsYXR0ZW5pbmdFbmFibGVkIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdl
YktpdEdlb2xvY2F0aW9uRW5hYmxlZCwgKCJXZWJLaXRHZW9sb2NhdGlvbkVuYWJsZWQiKSk7CitE
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgV2ViS2l0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dz
QXV0b21hdGljYWxseUVuYWJsZWQsICgiV2ViS2l0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0
b21hdGljYWxseUVuYWJsZWQiKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgV2ViS2l0
SmF2YVNjcmlwdEVuYWJsZWQsICgiV2ViS2l0SmF2YVNjcmlwdEVuYWJsZWQiKSk7CitERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgV2ViS2l0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5LCAoIldl
YktpdExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCBXZWJLaXRMb2NhbFN0b3JhZ2VFbmFibGVkLCAoIldlYktpdExvY2FsU3RvcmFnZUVuYWJs
ZWQiKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgV2ViS2l0TG9jYWxTdG9yYWdlUGF0
aCwgKCJXZWJLaXRMb2NhbFN0b3JhZ2VQYXRoIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJp
bmcsIFdlYktpdExvY2FsU3RvcmFnZVF1b3RhLCAoIldlYktpdExvY2FsU3RvcmFnZVF1b3RhIikp
OworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdE1heGltdW1QYWdlc0luQ2FjaGUs
ICgiV2ViS2l0TWF4aW11bVBhZ2VzSW5DYWNoZSIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCBXZWJLaXRNaW5pbXVtRm9udFNpemUsICgiV2ViS2l0TWluaW11bUZvbnRTaXplIikpOwor
REVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNh
Y2hlRW5hYmxlZCwgKCJXZWJLaXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQiKSk7
CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgV2ViS2l0T2ZmbGluZVdlYkFwcGxpY2F0aW9u
Q2FjaGVQYXRoLCAoIldlYktpdE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlUGF0aCIpKTsKK0RF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBXZWJLaXRQYWdlR3JvdXBOYW1lLCAoIldlYktpdFBh
Z2VHcm91cE5hbWUiKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgV2ViS2l0UGx1Z2lu
c0VuYWJsZWQsICgiV2ViS2l0UGx1Z2luc0VuYWJsZWQiKSk7CitERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgV2ViS2l0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCwgKCJXZWJLaXRQcml2YXRlQnJv
d3NpbmdFbmFibGVkIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdFNhbnNT
ZXJpZmZGb250RmFtaWx5LCAoIldlYktpdFNhbnNTZXJpZmZGb250RmFtaWx5IikpOworREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdFNlcmlmZkZvbnRGYW1pbHksICgiV2ViS2l0U2Vy
aWZmRm9udEZhbWlseSIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBXZWJLaXRTdGFu
ZGFyZEZvbnRGYW1pbHksICgiV2ViS2l0U3RhbmRhcmRGb250RmFtaWx5IikpOworREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdFVzZXJTdHlsZVNoZWV0LCAoIldlYktpdFVzZXJTdHls
ZVNoZWV0IikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdFVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24sICgiV2ViS2l0VXNlclN0eWxlU2hlZXRMb2NhdGlvbiIpKTsKK0RFRklORV9T
VEFUSUNfTE9DQUwoU3RyaW5nLCBXZWJLaXRXZWJTb2NrZXRzRW5hYmxlZCwgKCJXZWJLaXRXZWJT
b2NrZXRzRW5hYmxlZCIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBXZWJLaXRYU1NB
dWRpdG9yRW5hYmxlZCwgKCJXZWJLaXRYU1NBdWRpdG9yRW5hYmxlZCIpKTsKK0RFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCBTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQsICgiU3BhdGlhbE5hdmln
YXRpb25FbmFibGVkIikpOworCisvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIG1vdmluZyBh
bGwgdGhlIG1pbWUgdHlwZSBjb2RlIGludG8gaXRzIG93biBvYmplY3QuCisKK3R5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIFdlYlN0cmluZz4gTUlNRVR5cGVBc3NvY2lhdGlvbk1hcDsKKworc3RhdGlj
IGNvbnN0IE1JTUVUeXBlQXNzb2NpYXRpb25NYXAmIG1pbWVUeXBlQXNzb2NpYXRpb25NYXAoKQor
eworICAgIHN0YXRpYyBNSU1FVHlwZUFzc29jaWF0aW9uTWFwKiBtaW1lVHlwZU1hcCA9IDA7Cisg
ICAgaWYgKG1pbWVUeXBlTWFwKQorICAgICAgICByZXR1cm4gKm1pbWVUeXBlTWFwOworCisgICAg
bWltZVR5cGVNYXAgPSBuZXcgTUlNRVR5cGVBc3NvY2lhdGlvbk1hcDsKKyAgICBtaW1lVHlwZU1h
cC0+YWRkKCJpbWFnZS94LW1zLWJtcCIsICJpbWFnZS9ibXAiKTsKKyAgICBtaW1lVHlwZU1hcC0+
YWRkKCJpbWFnZS94LXdpbmRvd3MtYm1wIiwgImltYWdlL2JtcCIpOworICAgIG1pbWVUeXBlTWFw
LT5hZGQoImltYWdlL3gtYm1wIiwgImltYWdlL2JtcCIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQo
ImltYWdlL3gtYml0bWFwIiwgImltYWdlL2JtcCIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImlt
YWdlL3gtbXMtYml0bWFwIiwgImltYWdlL2JtcCIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImlt
YWdlL2pwZyIsICJpbWFnZS9qcGVnIik7CisgICAgbWltZVR5cGVNYXAtPmFkZCgiaW1hZ2UvcGpw
ZWciLCAiaW1hZ2UvanBlZyIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImltYWdlL3gtcG5nIiwg
ImltYWdlL3BuZyIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImltYWdlL3ZuZC5yaW0ucG5nIiwg
ImltYWdlL3BuZyIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImltYWdlL2ljbyIsICJpbWFnZS92
bmQubWljcm9zb2Z0Lmljb24iKTsKKyAgICBtaW1lVHlwZU1hcC0+YWRkKCJpbWFnZS9pY29uIiwg
ImltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbiIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoInRleHQv
aWNvIiwgImltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbiIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQo
ImFwcGxpY2F0aW9uL2ljbyIsICJpbWFnZS92bmQubWljcm9zb2Z0Lmljb24iKTsKKyAgICBtaW1l
VHlwZU1hcC0+YWRkKCJpbWFnZS94LWljb24iLCAiaW1hZ2Uvdm5kLm1pY3Jvc29mdC5pY29uIik7
CisgICAgbWltZVR5cGVNYXAtPmFkZCgiYXVkaW8vdm5kLnFjZWxwIiwgImF1ZGlvL3FjZWxwIik7
CisgICAgbWltZVR5cGVNYXAtPmFkZCgiYXVkaW8vcWNwIiwgImF1ZGlvL3FjZWxwIik7CisgICAg
bWltZVR5cGVNYXAtPmFkZCgiYXVkaW8vdm5kLnFjcCIsICJhdWRpby9xY2VscCIpOworICAgIG1p
bWVUeXBlTWFwLT5hZGQoImF1ZGlvL3dhdiIsICJhdWRpby94LXdhdiIpOworICAgIG1pbWVUeXBl
TWFwLT5hZGQoImF1ZGlvL21pZCIsICJhdWRpby9taWRpIik7CisgICAgbWltZVR5cGVNYXAtPmFk
ZCgiYXVkaW8vc3AtbWlkaSIsICJhdWRpby9taWRpIik7CisgICAgbWltZVR5cGVNYXAtPmFkZCgi
YXVkaW8veC1taWQiLCAiYXVkaW8vbWlkaSIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1ZGlv
L3gtbWlkaSIsICJhdWRpby9taWRpIik7CisgICAgbWltZVR5cGVNYXAtPmFkZCgiYXVkaW8veC1t
cGVnIiwgImF1ZGlvL21wZWciKTsKKyAgICBtaW1lVHlwZU1hcC0+YWRkKCJhdWRpby9tcDMiLCAi
YXVkaW8vbXBlZyIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1ZGlvL3gtbXAzIiwgImF1ZGlv
L21wZWciKTsKKyAgICBtaW1lVHlwZU1hcC0+YWRkKCJhdWRpby9tcGVnMyIsICJhdWRpby9tcGVn
Iik7CisgICAgbWltZVR5cGVNYXAtPmFkZCgiYXVkaW8veC1tcGVnMyIsICJhdWRpby9tcGVnIik7
CisgICAgbWltZVR5cGVNYXAtPmFkZCgiYXVkaW8vbXBnMyIsICJhdWRpby9tcGVnIik7CisgICAg
bWltZVR5cGVNYXAtPmFkZCgiYXVkaW8vbXBnIiwgImF1ZGlvL21wZWciKTsKKyAgICBtaW1lVHlw
ZU1hcC0+YWRkKCJhdWRpby94LW1wZyIsICJhdWRpby9tcGVnIik7CisgICAgbWltZVR5cGVNYXAt
PmFkZCgiYXVkaW8vbTRhIiwgImF1ZGlvL21wNCIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1
ZGlvL3gtbTRhIiwgImF1ZGlvL21wNCIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1ZGlvL3gt
bXA0IiwgImF1ZGlvL21wNCIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1ZGlvL3gtYWFjIiwg
ImF1ZGlvL2FhYyIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1ZGlvL3gtYW1yIiwgImF1ZGlv
L2FtciIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1ZGlvL21wZWd1cmwiLCAiYXVkaW8veC1t
cGVndXJsIik7CisgICAgbWltZVR5cGVNYXAtPmFkZCgidmlkZW8vM2dwIiwgInZpZGVvLzNncHAi
KTsKKyAgICBtaW1lVHlwZU1hcC0+YWRkKCJ2aWRlby9hdmkiLCAidmlkZW8veC1tc3ZpZGVvIik7
CisgICAgbWltZVR5cGVNYXAtPmFkZCgidmlkZW8veC1tNHYiLCAidmlkZW8vbXA0Iik7CisgICAg
bWltZVR5cGVNYXAtPmFkZCgidmlkZW8veC1xdWlja3RpbWUiLCAidmlkZW8vcXVpY2t0aW1lIik7
CisgICAgbWltZVR5cGVNYXAtPmFkZCgiYXBwbGljYXRpb24vamF2YSIsICJhcHBsaWNhdGlvbi9q
YXZhLWFyY2hpdmUiKTsKKyAgICBtaW1lVHlwZU1hcC0+YWRkKCJhcHBsaWNhdGlvbi94LWphdmEt
YXJjaGl2ZSIsICJhcHBsaWNhdGlvbi9qYXZhLWFyY2hpdmUiKTsKKyAgICBtaW1lVHlwZU1hcC0+
YWRkKCJhcHBsaWNhdGlvbi94LXppcC1jb21wcmVzc2VkIiwgImFwcGxpY2F0aW9uL3ppcCIpOwor
CisgICAgcmV0dXJuICptaW1lVHlwZU1hcDsKK30KKworc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiog
c19zdXBwb3J0ZWRPYmplY3RNSU1FVHlwZXM7CisKK1dlYlNldHRpbmdzUHJpdmF0ZTo6V2ViU2V0
dGluZ3NQcml2YXRlKCkKKyAgICA6IGltcGwoMCkKKyAgICAsIGRlbGVnYXRlKDApCisgICAgLCBz
ZW5kZXIoMCkKKyAgICAsIGNvcHlPbldyaXRlKHRydWUpCit7Cit9CisKK1dlYlNldHRpbmdzOjpX
ZWJTZXR0aW5ncygpCit7CisgICAgbV9wcml2YXRlID0gbmV3IFdlYlNldHRpbmdzUHJpdmF0ZSgp
OworfQorCitXZWJTZXR0aW5nczo6V2ViU2V0dGluZ3MoY29uc3QgV2ViU2V0dGluZ3MmIG90aGVy
U2V0dGluZ3MpCit7CisgICAgbV9wcml2YXRlLT5pbXBsID0gb3RoZXJTZXR0aW5ncy5tX3ByaXZh
dGUtPmltcGw7Cit9CisKK1dlYlNldHRpbmdzOjp+V2ViU2V0dGluZ3MoKQoreworICAgIGlmICgh
bV9wcml2YXRlLT5jb3B5T25Xcml0ZSkgeworICAgICAgICBkZWxldGUgbV9wcml2YXRlLT5pbXBs
OworICAgICAgICBtX3ByaXZhdGUtPmltcGwgPSAwOworICAgIH0KKyAgICBkZWxldGUgbV9wcml2
YXRlOworICAgIG1fcHJpdmF0ZSA9IDA7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldERlbGVn
YXRlKFdlYlNldHRpbmdzRGVsZWdhdGUqIGRlbGVnYXRlKQoreworICAgIG1fcHJpdmF0ZS0+ZGVs
ZWdhdGUgPSBkZWxlZ2F0ZTsKKyAgICBtX3ByaXZhdGUtPnNlbmRlciA9IHRoaXM7Cit9CisKK1dl
YlNldHRpbmdzRGVsZWdhdGUqIFdlYlNldHRpbmdzOjpkZWxlZ2F0ZSgpCit7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+ZGVsZWdhdGU7Cit9CisKK1dlYlNldHRpbmdzKiBXZWJTZXR0aW5nczo6Y3Jl
YXRlRnJvbVN0YW5kYXJkU2V0dGluZ3MoV2ViU2V0dGluZ3NEZWxlZ2F0ZSogZGVsZWdhdGUpCit7
CisgICAgV2ViU2V0dGluZ3MqIHNldHRpbmdzID0gbmV3IFdlYlNldHRpbmdzKCk7CisgICAgc2V0
dGluZ3MtPm1fcHJpdmF0ZS0+aW1wbCA9IHN0YW5kYXJkU2V0dGluZ3MoKS0+bV9wcml2YXRlLT5p
bXBsOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPmRlbGVnYXRlID0gZGVsZWdhdGU7CisgICAg
c2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2VuZGVyID0gc2V0dGluZ3M7CisgICAgaWYgKGRlbGVnYXRl
KQorICAgICAgICBkZWxlZ2F0ZS0+ZGlkQ2hhbmdlU2V0dGluZ3Moc2V0dGluZ3MpOworCisgICAg
cmV0dXJuIHNldHRpbmdzOworfQorCitXZWJTZXR0aW5ncyogV2ViU2V0dGluZ3M6OnN0YW5kYXJk
U2V0dGluZ3MoKQoreworICAgIHN0YXRpYyBXZWJTZXR0aW5ncyAqc2V0dGluZ3MgPSAwOworICAg
IGlmIChzZXR0aW5ncykKKyAgICAgICAgcmV0dXJuIHNldHRpbmdzOworCisgICAgc2V0dGluZ3Mg
PSBuZXcgV2ViU2V0dGluZ3M7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+aW1wbCA9IG5ldyBX
ZWJTZXR0aW5nc1ByaXZhdGU6OldlYlNldHRpbmdzUHJpdmF0ZUltcGwoKTsKKyAgICBzZXR0aW5n
cy0+bV9wcml2YXRlLT5jb3B5T25Xcml0ZSA9IGZhbHNlOworICAgIHNldHRpbmdzLT5tX3ByaXZh
dGUtPnNldFVuc2lnbmVkKEJsYWNrQmVycnlCYWNrZ3JvdW5kQ29sb3IsIFdlYkNvcmU6OkNvbG9y
Ojp3aGl0ZSk7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihCbGFja0JlcnJ5
Q29va2llc0VuYWJsZWQsIHRydWUpOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldERvdWJs
ZShCbGFja0JlcnJ5SW5pdGlhbFNjYWxlLCAtMSk7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+
c2V0VW5zaWduZWQoQmxhY2tCZXJyeU1heFBsdWdpbkluc3RhbmNlcywgMSk7CisgICAgc2V0dGlu
Z3MtPm1fcHJpdmF0ZS0+c2V0VW5zaWduZWQoQmxhY2tCZXJyeU92ZXJab29tQ29sb3IsIFdlYkNv
cmU6OkNvbG9yOjp3aGl0ZSk7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihC
bGFja0JlcnJ5U2Nyb2xsYmFyc0VuYWJsZWQsIHRydWUpOworCisgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBkZXRlY3Qgd2hldGhlciB3ZSBhcmUgZW1iZWRkZWQgaW4gYSBicm93c2VyIG9yIGFuIGVt
YWlsIGNsaWVudCBhbmQgZGVmYXVsdCB0byBUZXh0UmVmbG93RW5hYmxlZE9ubHlGb3JCbG9ja1pv
b20gYW5kIFRleHRSZWZsb3dFbmFibGVkLCByZXNwZWN0aXZlbHkuCisgICAgc2V0dGluZ3MtPm1f
cHJpdmF0ZS0+c2V0VGV4dFJlZmxvd01vZGUoQmxhY2tCZXJyeVRleHRSZWZsb3dNb2RlLCBUZXh0
UmVmbG93RGlzYWJsZWQpOworCisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihC
bGFja0JlcnJ5VXNlclNjYWxhYmxlRW5hYmxlZCwgdHJ1ZSk7CisgICAgc2V0dGluZ3MtPm1fcHJp
dmF0ZS0+c2V0Qm9vbGVhbihCbGFja0JlcnJ5VXNlV2ViS2l0Q2FjaGUsIHRydWUpOworICAgIHNl
dHRpbmdzLT5tX3ByaXZhdGUtPnNldEJvb2xlYW4oQmxhY2tCZXJyeVpvb21Ub0ZpdE9uTG9hZEVu
YWJsZWQsIHRydWUpOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldEludGVnZXIoV2ViS2l0
RGVmYXVsdEZvbnRTaXplLCAxNik7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0SW50ZWdl
cihXZWJLaXREZWZhdWx0Rml4ZWRGb250U2l6ZSwgMTMpOworICAgIHNldHRpbmdzLT5tX3ByaXZh
dGUtPnNldEludGVnZXIoV2ViS2l0TWluaW11bUZvbnRTaXplLCA4KTsKKyAgICBzZXR0aW5ncy0+
bV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUsICJpc28t
ODg1OS0xIik7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0SW50ZWdlcihXZWJLaXRGaXJz
dFNjaGVkdWxlZExheW91dERlbGF5LCAyNTApOyAvLyBNYXRjaCBEb2N1bWVudDo6Y0xheW91dFNj
aGVkdWxlVGhyZXNob2xkLgorICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldEJvb2xlYW4oV2Vi
S2l0SmF2YVNjcmlwdEVuYWJsZWQsIHRydWUpOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNl
dEJvb2xlYW4oV2ViS2l0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5LCB0cnVlKTsKKyAgICBzZXR0
aW5ncy0+bV9wcml2YXRlLT5zZXRCb29sZWFuKFdlYktpdERvd25sb2FkYWJsZUJpbmFyeUZvbnRz
RW5hYmxlZCwgdHJ1ZSk7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0VW5zaWduZWRMb25n
TG9uZyhXZWJLaXRMb2NhbFN0b3JhZ2VRdW90YSwgNSAqIDEwMjQgKiAxMDI0KTsKKyAgICBzZXR0
aW5ncy0+bV9wcml2YXRlLT5zZXRJbnRlZ2VyKFdlYktpdE1heGltdW1QYWdlc0luQ2FjaGUsIDAp
OworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldEJvb2xlYW4oV2ViS2l0V2ViU29ja2V0c0Vu
YWJsZWQsIHRydWUpOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldFN0cmluZyhXZWJLaXRG
aXhlZEZvbnRGYW1pbHksICJDb3VyaWVyIE5ldyIpOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUt
PnNldFN0cmluZyhXZWJLaXRTYW5zU2VyaWZmRm9udEZhbWlseSwgIkFyaWFsIik7CisgICAgc2V0
dGluZ3MtPm1fcHJpdmF0ZS0+c2V0U3RyaW5nKFdlYktpdFNlcmlmZkZvbnRGYW1pbHksICJUaW1l
cyBOZXcgUm9tYW4iKTsKKyAgICBzZXR0aW5ncy0+bV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0
U3RhbmRhcmRGb250RmFtaWx5LCAiVGltZXMgTmV3IFJvbWFuIik7CisgICAgc2V0dGluZ3MtPm1f
cHJpdmF0ZS0+c2V0Qm9vbGVhbihTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQsIGZhbHNlKTsKKwor
ICAgIHJldHVybiBzZXR0aW5nczsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6YWRkU3VwcG9ydGVk
T2JqZWN0UGx1Z2luTUlNRVR5cGUoY29uc3QgY2hhciogdHlwZSkKK3sKKyAgICBpZiAoIXNfc3Vw
cG9ydGVkT2JqZWN0TUlNRVR5cGVzKQorICAgICAgICBzX3N1cHBvcnRlZE9iamVjdE1JTUVUeXBl
cyA9IG5ldyBIYXNoU2V0PFN0cmluZz47CisKKyAgICBzX3N1cHBvcnRlZE9iamVjdE1JTUVUeXBl
cy0+YWRkKHR5cGUpOworfQorCitib29sIFdlYlNldHRpbmdzOjppc1N1cHBvcnRlZE9iamVjdE1J
TUVUeXBlKGNvbnN0IFdlYlN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKG1pbWVUeXBlLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFzX3N1cHBvcnRlZE9i
amVjdE1JTUVUeXBlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNfc3Vw
cG9ydGVkT2JqZWN0TUlNRVR5cGVzLT5jb250YWlucyhnZXROb3JtYWxpemVkTUlNRVR5cGUobWlt
ZVR5cGUpKTsKK30KKworV2ViU3RyaW5nIFdlYlNldHRpbmdzOjpnZXROb3JtYWxpemVkTUlNRVR5
cGUoY29uc3QgV2ViU3RyaW5nJiB0eXBlKQoreworICAgIE1JTUVUeXBlQXNzb2NpYXRpb25NYXA6
OmNvbnN0X2l0ZXJhdG9yIGkgPSBtaW1lVHlwZUFzc29jaWF0aW9uTWFwKCkuZmluZCh0eXBlKTsK
KworICAgIHJldHVybiBpID09IG1pbWVUeXBlQXNzb2NpYXRpb25NYXAoKS5lbmQoKSA/IHR5cGUg
OiBpLT5zZWNvbmQ7Cit9CisKK2Jvb2wgV2ViU2V0dGluZ3M6Onhzc0F1ZGl0b3JFbmFibGVkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRCb29sZWFuKFdlYktpdFhTU0F1ZGl0
b3JFbmFibGVkKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0WFNTQXVkaXRvckVuYWJsZWQo
Ym9vbCBlbmFibGVkKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnNldEJvb2xlYW4oV2ViS2l0
WFNTQXVkaXRvckVuYWJsZWQsIGVuYWJsZWQpOworfQorCitib29sIFdlYlNldHRpbmdzOjpsb2Fk
c0ltYWdlc0F1dG9tYXRpY2FsbHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdl
dEJvb2xlYW4oV2ViS2l0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KTsKK30KKwordm9pZCBXZWJT
ZXR0aW5nczo6c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KGJvb2wgZW5hYmxlZCkKK3sKKyAg
ICBtX3ByaXZhdGUtPnNldEJvb2xlYW4oV2ViS2l0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5LCBl
bmFibGVkKTsKK30KKworYm9vbCBXZWJTZXR0aW5nczo6ZG93bmxvYWRhYmxlQmluYXJ5Rm9udHNF
bmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRCb29sZWFuKFdlYktp
dERvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6
OnNldERvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihXZWJLaXREb3dubG9hZGFibGVCaW5hcnlGb250
c0VuYWJsZWQsIGVuYWJsZWQpOworfQorCitib29sIFdlYlNldHRpbmdzOjpzaG91bGREcmF3Qm9y
ZGVyV2hpbGVMb2FkaW5nSW1hZ2VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5n
ZXRCb29sZWFuKEJsYWNrQmVycnlEcmF3Qm9yZGVyV2hpbGVMb2FkaW5nSW1hZ2VzKTsKK30KKwor
dm9pZCBXZWJTZXR0aW5nczo6c2V0U2hvdWxkRHJhd0JvcmRlcldoaWxlTG9hZGluZ0ltYWdlcyhi
b29sIGVuYWJsZWQpCit7CisgICAgbV9wcml2YXRlLT5zZXRCb29sZWFuKEJsYWNrQmVycnlEcmF3
Qm9yZGVyV2hpbGVMb2FkaW5nSW1hZ2VzLCBlbmFibGVkKTsKK30KKworYm9vbCBXZWJTZXR0aW5n
czo6aXNKYXZhU2NyaXB0RW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
Z2V0Qm9vbGVhbihXZWJLaXRKYXZhU2NyaXB0RW5hYmxlZCk7Cit9CisKK3ZvaWQgV2ViU2V0dGlu
Z3M6OnNldEphdmFTY3JpcHRFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX3ByaXZhdGUt
PnNldEJvb2xlYW4oV2ViS2l0SmF2YVNjcmlwdEVuYWJsZWQsIGVuYWJsZWQpOworfQorCitib29s
IFdlYlNldHRpbmdzOjppc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUtPmdldEJvb2xlYW4oV2ViS2l0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7
Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBl
bmFibGVkKQoreworICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihXZWJLaXRQcml2YXRlQnJvd3Np
bmdFbmFibGVkLCBlbmFibGVkKTsKK30KKworaW50IFdlYlNldHRpbmdzOjpkZWZhdWx0Rml4ZWRG
b250U2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0SW50ZWdlcihXZWJL
aXREZWZhdWx0Rml4ZWRGb250U2l6ZSk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldERlZmF1
bHRGaXhlZEZvbnRTaXplKGludCBkZWZhdWx0Rml4ZWRGb250U2l6ZSkKK3sKKyAgICBtX3ByaXZh
dGUtPnNldEludGVnZXIoV2ViS2l0RGVmYXVsdEZpeGVkRm9udFNpemUsIGRlZmF1bHRGaXhlZEZv
bnRTaXplKTsKK30KKworaW50IFdlYlNldHRpbmdzOjpkZWZhdWx0Rm9udFNpemUoKSBjb25zdAor
eworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEludGVnZXIoV2ViS2l0RGVmYXVsdEZvbnRTaXpl
KTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0RGVmYXVsdEZvbnRTaXplKGludCBkZWZhdWx0
Rm9udFNpemUpCit7CisgICAgbV9wcml2YXRlLT5zZXRJbnRlZ2VyKFdlYktpdERlZmF1bHRGb250
U2l6ZSwgZGVmYXVsdEZvbnRTaXplKTsKK30KKworaW50IFdlYlNldHRpbmdzOjptaW5pbXVtRm9u
dFNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEludGVnZXIoV2ViS2l0
TWluaW11bUZvbnRTaXplKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0TWluaW11bUZvbnRT
aXplKGludCBtaW5pbXVtRm9udFNpemUpCit7CisgICAgbV9wcml2YXRlLT5zZXRJbnRlZ2VyKFdl
YktpdE1pbmltdW1Gb250U2l6ZSwgbWluaW11bUZvbnRTaXplKTsKK30KKworV2ViU3RyaW5nIFdl
YlNldHRpbmdzOjpzZXJpZkZvbnRGYW1pbHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZh
dGUtPmdldFN0cmluZyhXZWJLaXRTZXJpZmZGb250RmFtaWx5KTsKK30KKwordm9pZCBXZWJTZXR0
aW5nczo6c2V0U2VyaWZGb250RmFtaWx5KGNvbnN0IGNoYXIqIHNlcmlmZkZvbnRGYW1pbHkpCit7
CisgICAgbV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0U2VyaWZmRm9udEZhbWlseSwgc2VyaWZm
Rm9udEZhbWlseSk7Cit9CisKK1dlYlN0cmluZyBXZWJTZXR0aW5nczo6Zml4ZWRGb250RmFtaWx5
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRTdHJpbmcoV2ViS2l0Rml4ZWRG
b250RmFtaWx5KTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0Rml4ZWRGb250RmFtaWx5KGNv
bnN0IGNoYXIqIGZpeGVkRm9udEZhbWlseSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFN0cmluZyhX
ZWJLaXRGaXhlZEZvbnRGYW1pbHksIGZpeGVkRm9udEZhbWlseSk7Cit9CisKK1dlYlN0cmluZyBX
ZWJTZXR0aW5nczo6c2Fuc1NlcmlmRm9udEZhbWlseSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+Z2V0U3RyaW5nKFdlYktpdFNhbnNTZXJpZmZGb250RmFtaWx5KTsKK30KKwordm9p
ZCBXZWJTZXR0aW5nczo6c2V0U2Fuc1NlcmlmRm9udEZhbWlseShjb25zdCBjaGFyKiBzYW5zU2Vy
aWZmRm9udEZhbWlseSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFN0cmluZyhXZWJLaXRTYW5zU2Vy
aWZmRm9udEZhbWlseSwgc2Fuc1NlcmlmZkZvbnRGYW1pbHkpOworfQorCitXZWJTdHJpbmcgV2Vi
U2V0dGluZ3M6OnN0YW5kYXJkRm9udEZhbWlseSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+Z2V0U3RyaW5nKFdlYktpdFN0YW5kYXJkRm9udEZhbWlseSk7Cit9CisKK3ZvaWQgV2Vi
U2V0dGluZ3M6OnNldFN0YW5kYXJkRm9udEZhbWlseShjb25zdCBjaGFyKiBzdGFuZGFyZEZvbnRG
YW1pbHkpCit7CisgICAgbV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0U3RhbmRhcmRGb250RmFt
aWx5LCBzdGFuZGFyZEZvbnRGYW1pbHkpOworfQorCitXZWJTdHJpbmcgV2ViU2V0dGluZ3M6OnVz
ZXJBZ2VudFN0cmluZygpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IElzIHRoaXMgdGhlIGJlc3Qg
cGxhY2UgZm9yIHRoaXMgYXNzZXJ0aW9uLiBXaHkgY2FuJ3Qgd2UganVzdCByZXR1cm4gYW4gZW1w
dHkgc3RyaW5nCisgICAgLy8gYW5kIGxldCB0aGUgY2FsbGVyIGRlY2lkZSBob3cgdG8gaGFuZGxl
IGl0PworCisgICAgLy8gVGhlIGRlZmF1bHQgdXNlciBhZ2VudCBzdHJpbmcgaXMgZW1wdHkuIFdl
IHJlbHkgdXBvbiB0aGUgY2xpZW50IHRvIHNldCB0aGlzIGZvciB1cy4KKyAgICAvLyBXZSBjaGVj
ayB0aGlzIGJ5IGFzc2VydGluZyBpZiB0aGUgY2xpZW50IGhhcyBub3QgZG9uZSBzbyBiZWZvcmUg
dGhlIGZpcnN0IHRpbWUgaXQgaXMgbmVlZGVkLgorICAgIFN0cmluZyB1c2VyQWdlbnRTdHJpbmcg
PSBtX3ByaXZhdGUtPmdldFN0cmluZyhCbGFja0JlcnJ5VXNlckFnZW50U3RyaW5nKTsKKyAgICBB
U1NFUlQoIXVzZXJBZ2VudFN0cmluZy5pc0VtcHR5KCkpOworICAgIHJldHVybiB1c2VyQWdlbnRT
dHJpbmc7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldFVzZXJBZ2VudFN0cmluZyhjb25zdCBj
aGFyKiB1c2VyQWdlbnRTdHJpbmcpCit7CisgICAgbV9wcml2YXRlLT5zZXRTdHJpbmcoQmxhY2tC
ZXJyeVVzZXJBZ2VudFN0cmluZywgdXNlckFnZW50U3RyaW5nKTsKK30KKworV2ViU3RyaW5nIFdl
YlNldHRpbmdzOjpkZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+Z2V0U3RyaW5nKFdlYktpdERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKTsKK30K
Kwordm9pZCBXZWJTZXR0aW5nczo6c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoY29uc3QgY2hh
ciogZGVmYXVsdFRleHRFbmNvZGluZ05hbWUpCit7CisgICAgbV9wcml2YXRlLT5zZXRTdHJpbmco
V2ViS2l0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUsIGRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKTsK
K30KKworYm9vbCBXZWJTZXR0aW5nczo6aXNab29tVG9GaXRPbkxvYWQoKSBjb25zdAoreworICAg
IHJldHVybiBtX3ByaXZhdGUtPmdldEJvb2xlYW4oQmxhY2tCZXJyeVpvb21Ub0ZpdE9uTG9hZEVu
YWJsZWQpOworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRab29tVG9GaXRPbkxvYWQoYm9vbCBl
bmFibGVkKQoreworICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihCbGFja0JlcnJ5Wm9vbVRvRml0
T25Mb2FkRW5hYmxlZCwgZW5hYmxlZCk7Cit9CisKK1dlYlNldHRpbmdzOjpUZXh0UmVmbG93TW9k
ZSBXZWJTZXR0aW5nczo6dGV4dFJlZmxvd01vZGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3By
aXZhdGUtPmdldFRleHRSZWZsb3dNb2RlKEJsYWNrQmVycnlUZXh0UmVmbG93TW9kZSk7Cit9CisK
K3ZvaWQgV2ViU2V0dGluZ3M6OnNldFRleHRSZWZsb3dNb2RlKFRleHRSZWZsb3dNb2RlIHRleHRS
ZWZsb3dNb2RlKQoreworICAgIG1fcHJpdmF0ZS0+c2V0VGV4dFJlZmxvd01vZGUoQmxhY2tCZXJy
eVRleHRSZWZsb3dNb2RlLCB0ZXh0UmVmbG93TW9kZSk7Cit9CisKK2Jvb2wgV2ViU2V0dGluZ3M6
OmlzU2Nyb2xsYmFyc0VuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdl
dEJvb2xlYW4oQmxhY2tCZXJyeVNjcm9sbGJhcnNFbmFibGVkKTsKK30KKwordm9pZCBXZWJTZXR0
aW5nczo6c2V0U2Nyb2xsYmFyc0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1fcHJpdmF0
ZS0+c2V0Qm9vbGVhbihCbGFja0JlcnJ5U2Nyb2xsYmFyc0VuYWJsZWQsIGVuYWJsZWQpOworfQor
Citib29sIFdlYlNldHRpbmdzOjpjYW5KYXZhU2NyaXB0T3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRCb29sZWFuKFdlYktpdEphdmFT
Y3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHlFbmFibGVkKTsKK30KKwordm9pZCBXZWJT
ZXR0aW5nczo6c2V0SmF2YVNjcmlwdE9wZW5XaW5kb3dzQXV0b21hdGljYWxseShib29sIGVuYWJs
ZWQpCit7CisgICAgbV9wcml2YXRlLT5zZXRCb29sZWFuKFdlYktpdEphdmFTY3JpcHRDYW5PcGVu
V2luZG93c0F1dG9tYXRpY2FsbHlFbmFibGVkLCBlbmFibGVkKTsKK30KKworYm9vbCBXZWJTZXR0
aW5nczo6YXJlUGx1Z2luc0VuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUt
PmdldEJvb2xlYW4oV2ViS2l0UGx1Z2luc0VuYWJsZWQpOworfQorCit2b2lkIFdlYlNldHRpbmdz
OjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgbV9wcml2YXRlLT5zZXRC
b29sZWFuKFdlYktpdFBsdWdpbnNFbmFibGVkLCBlbmFibGVkKTsKK30KKworYm9vbCBXZWJTZXR0
aW5nczo6aXNHZW9sb2NhdGlvbkVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZh
dGUtPmdldEJvb2xlYW4oV2ViS2l0R2VvbG9jYXRpb25FbmFibGVkKTsKK30KKwordm9pZCBXZWJT
ZXR0aW5nczo6c2V0R2VvbG9jYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX3By
aXZhdGUtPnNldEJvb2xlYW4oV2ViS2l0R2VvbG9jYXRpb25FbmFibGVkLCBlbmFibGVkKTsKK30K
KworYm9vbCBXZWJTZXR0aW5nczo6ZG9lc0dldEZvY3VzTm9kZUNvbnRleHQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEJvb2xlYW4oQmxhY2tCZXJyeUdldEZvY3VzTm9kZUNv
bnRleHRFbmFibGVkKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0R2V0Rm9jdXNOb2RlQ29u
dGV4dChib29sIGVuYWJsZWQpCit7CisgICAgbV9wcml2YXRlLT5zZXRCb29sZWFuKEJsYWNrQmVy
cnlHZXRGb2N1c05vZGVDb250ZXh0RW5hYmxlZCwgZW5hYmxlZCk7Cit9CisKK1dlYlN0cmluZyBX
ZWJTZXR0aW5nczo6dXNlclN0eWxlU2hlZXRTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBt
X3ByaXZhdGUtPmdldFN0cmluZyhXZWJLaXRVc2VyU3R5bGVTaGVldCk7Cit9CisKK3ZvaWQgV2Vi
U2V0dGluZ3M6OnNldFVzZXJTdHlsZVNoZWV0U3RyaW5nKGNvbnN0IGNoYXIqIHVzZXJTdHlsZVNo
ZWV0U3RyaW5nKQoreworICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgc2VlbSBsaWtlIHRoZSBh
cHByb3ByaWF0ZSBwbGFjZSB0byBkbyB0aGlzIGFzIFdlYlNldHRpbmdzIHNob3VsZCBpZGVhbGx5
IGJlIGEgc3RhdGUgc3RvcmUuCisgICAgLy8gRWl0aGVyIHRoZSBjYWxsZXIgb2YgdGhpcyBmdW5j
dGlvbiBzaG91bGQgZG8gdGhpcyBjb252ZXJzaW9uIG9yIGNhbGxlciBvZiB0aGUgZ2V0dGVyIGNv
cnJlc3BvbmRpbmcgdG8gdGhpcyBmdW5jdGlvbgorICAgIC8vIHNob3VsZCBkbyB0aGlzIGNvbnZl
cnNpb24uCisKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKHVzZXJTdHlsZVNoZWV0U3RyaW5n
KTsKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBkYXRhLmFwcGVuZCh1c2VyU3R5bGVTaGVl
dFN0cmluZywgbGVuZ3RoKTsKKworICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVkRGF0YTsKKyAgICBX
ZWJDb3JlOjpiYXNlNjRFbmNvZGUoZGF0YSwgZW5jb2RlZERhdGEpOworCisgICAgY29uc3QgY2hh
ciBwcmVmaXhbXSA9ICJkYXRhOnRleHQvY3NzO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LCI7CisgICAg
c2l6ZV90IHByZWZpeExlbmd0aCA9IHNpemVvZihwcmVmaXgpIC0gMTsKKyAgICBWZWN0b3I8Y2hh
cj4gZGF0YVVSTDsKKyAgICBkYXRhVVJMLnJlc2VydmVDYXBhY2l0eShwcmVmaXhMZW5ndGggKyBl
bmNvZGVkRGF0YS5zaXplKCkpOworICAgIGRhdGFVUkwuYXBwZW5kKHByZWZpeCwgcHJlZml4TGVu
Z3RoKTsKKyAgICBkYXRhVVJMLmFwcGVuZChlbmNvZGVkRGF0YSk7CisgICAgbV9wcml2YXRlLT5z
ZXRTdHJpbmcoV2ViS2l0VXNlclN0eWxlU2hlZXQsIFN0cmluZyhkYXRhVVJMLmRhdGEoKSwgZGF0
YVVSTC5zaXplKCkpKTsKK30KKworV2ViU3RyaW5nIFdlYlNldHRpbmdzOjp1c2VyU3R5bGVTaGVl
dExvY2F0aW9uKCkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRTdHJpbmcoV2ViS2l0VXNl
clN0eWxlU2hlZXRMb2NhdGlvbik7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldFVzZXJTdHls
ZVNoZWV0TG9jYXRpb24oY29uc3QgY2hhciogdXNlclN0eWxlU2hlZXRMb2NhdGlvbikKK3sKKyAg
ICBtX3ByaXZhdGUtPnNldFN0cmluZyhXZWJLaXRVc2VyU3R5bGVTaGVldExvY2F0aW9uLCB1c2Vy
U3R5bGVTaGVldExvY2F0aW9uKTsKK30KKworYm9vbCBXZWJTZXR0aW5nczo6YXJlTGlua3NIYW5k
bGVkRXh0ZXJuYWxseSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0Qm9vbGVh
bihCbGFja0JlcnJ5TGlua3NIYW5kbGVkRXh0ZXJuYWxseUVuYWJsZWQpOworfQorCit2b2lkIFdl
YlNldHRpbmdzOjpzZXRBcmVMaW5rc0hhbmRsZWRFeHRlcm5hbGx5KGJvb2wgZW5hYmxlZCkKK3sK
KyAgICBtX3ByaXZhdGUtPnNldEJvb2xlYW4oQmxhY2tCZXJyeUxpbmtzSGFuZGxlZEV4dGVybmFs
bHlFbmFibGVkLCBlbmFibGVkKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0QWxsb3dDcm9z
c1NpdGVSZXF1ZXN0cyhib29sIGFsbG93KQoreworICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihC
bGFja0JlcnJ5QWxsb3dDcm9zc1NpdGVSZXF1ZXN0cywgYWxsb3cpOworfQorCitib29sIFdlYlNl
dHRpbmdzOjphbGxvd0Nyb3NzU2l0ZVJlcXVlc3RzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLT5nZXRCb29sZWFuKEJsYWNrQmVycnlBbGxvd0Nyb3NzU2l0ZVJlcXVlc3RzKTsKK30K
KworYm9vbCBXZWJTZXR0aW5nczo6aXNVc2VyU2NhbGFibGUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3ByaXZhdGUtPmdldEJvb2xlYW4oQmxhY2tCZXJyeVVzZXJTY2FsYWJsZUVuYWJsZWQpOwor
fQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRVc2VyU2NhbGFibGUoYm9vbCBlbmFibGVkKQorewor
ICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihCbGFja0JlcnJ5VXNlclNjYWxhYmxlRW5hYmxlZCwg
ZW5hYmxlZCk7Cit9CisKK2ludCBXZWJTZXR0aW5nczo6dmlld3BvcnRXaWR0aCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0SW50ZWdlcihCbGFja0JlcnJ5Vmlld3BvcnRXaWR0
aCk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldFZpZXdwb3J0V2lkdGgoaW50IHdpZHRoKQor
eworICAgIG1fcHJpdmF0ZS0+c2V0SW50ZWdlcihCbGFja0JlcnJ5Vmlld3BvcnRXaWR0aCwgd2lk
dGgpOworfQorCitkb3VibGUgV2ViU2V0dGluZ3M6OmluaXRpYWxTY2FsZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0RG91YmxlKEJsYWNrQmVycnlJbml0aWFsU2NhbGUpOwor
fQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRJbml0aWFsU2NhbGUoZG91YmxlIGluaXRpYWxTY2Fs
ZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldERvdWJsZShCbGFja0JlcnJ5SW5pdGlhbFNjYWxlLCBp
bml0aWFsU2NhbGUpOworfQorCitpbnQgV2ViU2V0dGluZ3M6OmZpcnN0U2NoZWR1bGVkTGF5b3V0
RGVsYXkoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEludGVnZXIoV2ViS2l0
Rmlyc3RTY2hlZHVsZWRMYXlvdXREZWxheSk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldEZp
cnN0U2NoZWR1bGVkTGF5b3V0RGVsYXkoaW50IGRlbGF5KQoreworICAgIG1fcHJpdmF0ZS0+c2V0
SW50ZWdlcihXZWJLaXRGaXJzdFNjaGVkdWxlZExheW91dERlbGF5LCBkZWxheSk7Cit9CisKKy8v
IFdoZXRoZXIgdG8gaW5jbHVkZSBwYXR0ZXJuOiBpbiB0aGUgbGlzdCBvZiBzdHJpbmcgcGF0dGVy
bnMuCitib29sIFdlYlNldHRpbmdzOjpzaG91bGRIYW5kbGVQYXR0ZXJuVXJscygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0Qm9vbGVhbihCbGFja0JlcnJ5SGFuZGxlUGF0dGVy
blVSTHMpOworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRTaG91bGRIYW5kbGVQYXR0ZXJuVXJs
cyhib29sIGhhbmRsZVBhdHRlcm5VUkxzKQoreworICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihC
bGFja0JlcnJ5SGFuZGxlUGF0dGVyblVSTHMsIGhhbmRsZVBhdHRlcm5VUkxzKTsKK30KKworYm9v
bCBXZWJTZXR0aW5nczo6YXJlQ29va2llc0VuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBt
X3ByaXZhdGUtPmdldEJvb2xlYW4oQmxhY2tCZXJyeUNvb2tpZXNFbmFibGVkKTsKK30KKwordm9p
ZCBXZWJTZXR0aW5nczo6c2V0QXJlQ29va2llc0VuYWJsZWQoYm9vbCBlbmFibGUpCit7CisgICAg
bV9wcml2YXRlLT5zZXRCb29sZWFuKEJsYWNrQmVycnlDb29raWVzRW5hYmxlZCwgZW5hYmxlKTsK
K30KKworYm9vbCBXZWJTZXR0aW5nczo6aXNMb2NhbFN0b3JhZ2VFbmFibGVkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRCb29sZWFuKFdlYktpdExvY2FsU3RvcmFnZUVuYWJs
ZWQpOworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRJc0xvY2FsU3RvcmFnZUVuYWJsZWQoYm9v
bCBlbmFibGUpCit7CisgICAgbV9wcml2YXRlLT5zZXRCb29sZWFuKFdlYktpdExvY2FsU3RvcmFn
ZUVuYWJsZWQsIGVuYWJsZSk7Cit9CisKK2Jvb2wgV2ViU2V0dGluZ3M6OmlzRGF0YWJhc2VzRW5h
YmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0Qm9vbGVhbihXZWJLaXRE
YXRhYmFzZXNFbmFibGVkKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0SXNEYXRhYmFzZXNF
bmFibGVkKGJvb2wgZW5hYmxlKQoreworICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihXZWJLaXRE
YXRhYmFzZXNFbmFibGVkLCBlbmFibGUpOworfQorCitib29sIFdlYlNldHRpbmdzOjppc0FwcENh
Y2hlRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0Qm9vbGVhbihX
ZWJLaXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQpOworfQorCit2b2lkIFdlYlNl
dHRpbmdzOjpzZXRJc0FwcENhY2hlRW5hYmxlZChib29sIGVuYWJsZSkKK3sKKyAgICBtX3ByaXZh
dGUtPnNldEJvb2xlYW4oV2ViS2l0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkLCBl
bmFibGUpOworfQorCit1bnNpZ25lZCBsb25nIGxvbmcgV2ViU2V0dGluZ3M6OmxvY2FsU3RvcmFn
ZVF1b3RhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRVbnNpZ25lZExvbmdM
b25nKFdlYktpdExvY2FsU3RvcmFnZVF1b3RhKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0
TG9jYWxTdG9yYWdlUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQoreworICAgIG1fcHJp
dmF0ZS0+c2V0VW5zaWduZWRMb25nTG9uZyhXZWJLaXRMb2NhbFN0b3JhZ2VRdW90YSwgcXVvdGEp
OworfQorCitpbnQgV2ViU2V0dGluZ3M6Om1heGltdW1QYWdlc0luQ2FjaGUoKSBjb25zdAorewor
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYmUgY2FsbGluZyBpbnRvIFdlYkNvcmUgZnJvbSBo
ZXJlLiBUaGlzIGNsYXNzIHNob3VsZCBqdXN0IGJlIGEgc3RhdGUgc3RvcmUuCisgICAgcmV0dXJu
IFdlYkNvcmU6OnBhZ2VDYWNoZSgpLT5jYXBhY2l0eSgpOworfQorCit2b2lkIFdlYlNldHRpbmdz
OjpzZXRNYXhpbXVtUGFnZXNJbkNhY2hlKGludCBwYWdlcykKK3sKKyAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkbid0IGJlIGNhbGxpbmcgaW50byBXZWJDb3JlIGZyb20gaGVyZS4gVGhpcyBjbGFzcyBz
aG91bGQganVzdCBiZSBhIHN0YXRlIHN0b3JlLgorICAgIHVuc2lnbmVkIHJlYWxQYWdlcyA9IHN0
ZDo6bWF4KDAsIHBhZ2VzKTsKKyAgICBXZWJDb3JlOjpwYWdlQ2FjaGUoKS0+c2V0Q2FwYWNpdHko
cmVhbFBhZ2VzKTsKKyAgICBtX3ByaXZhdGUtPnNldFVuc2lnbmVkKFdlYktpdE1heGltdW1QYWdl
c0luQ2FjaGUsIHJlYWxQYWdlcyk7Cit9CisKK1dlYlN0cmluZyBXZWJTZXR0aW5nczo6bG9jYWxT
dG9yYWdlUGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0U3RyaW5nKFdl
YktpdExvY2FsU3RvcmFnZVBhdGgpOworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRMb2NhbFN0
b3JhZ2VQYXRoKGNvbnN0IFdlYlN0cmluZyYgcGF0aCkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFN0
cmluZyhXZWJLaXRMb2NhbFN0b3JhZ2VQYXRoLCBwYXRoKTsKK30KKworV2ViU3RyaW5nIFdlYlNl
dHRpbmdzOjpkYXRhYmFzZVBhdGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdl
dFN0cmluZyhXZWJLaXREYXRhYmFzZVBhdGgpOworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRE
YXRhYmFzZVBhdGgoY29uc3QgV2ViU3RyaW5nJiBwYXRoKQoreworICAgIG1fcHJpdmF0ZS0+c2V0
U3RyaW5nKFdlYktpdERhdGFiYXNlUGF0aCwgcGF0aCk7Cit9CisKK1dlYlN0cmluZyBXZWJTZXR0
aW5nczo6YXBwQ2FjaGVQYXRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRT
dHJpbmcoV2ViS2l0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVQYXRoKTsKK30KKwordm9pZCBX
ZWJTZXR0aW5nczo6c2V0QXBwQ2FjaGVQYXRoKGNvbnN0IFdlYlN0cmluZyYgcGF0aCkKK3sKKyAg
ICBtX3ByaXZhdGUtPnNldFN0cmluZyhXZWJLaXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZVBh
dGgsIHBhdGgpOworfQorCitXZWJTdHJpbmcgV2ViU2V0dGluZ3M6OnBhZ2VHcm91cE5hbWUoKSBj
b25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFN0cmluZyhXZWJLaXRQYWdlR3JvdXBO
YW1lKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0UGFnZUdyb3VwTmFtZShjb25zdCBXZWJT
dHJpbmcmIHBhZ2VHcm91cE5hbWUpCit7CisgICAgbV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0
UGFnZUdyb3VwTmFtZSwgcGFnZUdyb3VwTmFtZSk7Cit9CisKK2Jvb2wgV2ViU2V0dGluZ3M6Omlz
RW1haWxNb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRCb29sZWFuKEJs
YWNrQmVycnlFbWFpbE1vZGVFbmFibGVkKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0RW1h
aWxNb2RlKGJvb2wgZW5hYmxlKQoreworICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihCbGFja0Jl
cnJ5RW1haWxNb2RlRW5hYmxlZCwgZW5hYmxlKTsKK30KKworYm9vbCBXZWJTZXR0aW5nczo6c2hv
dWxkUmVuZGVyQW5pbWF0aW9uc09uU2Nyb2xsT3Jab29tKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5nZXRCb29sZWFuKEJsYWNrQmVycnlSZW5kZXJBbmltYXRpb25zT25TY3JvbGxP
clpvb21FbmFibGVkKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0U2hvdWxkUmVuZGVyQW5p
bWF0aW9uc09uU2Nyb2xsT3Jab29tKGJvb2wgZW5hYmxlKQoreworICAgIG1fcHJpdmF0ZS0+c2V0
Qm9vbGVhbihCbGFja0JlcnJ5UmVuZGVyQW5pbWF0aW9uc09uU2Nyb2xsT3Jab29tRW5hYmxlZCwg
ZW5hYmxlKTsKK30KKwordW5zaWduZWQgV2ViU2V0dGluZ3M6Om92ZXJab29tQ29sb3IoKSBjb25z
dAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFVuc2lnbmVkKEJsYWNrQmVycnlPdmVyWm9v
bUNvbG9yKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0T3Zlclpvb21Db2xvcih1bnNpZ25l
ZCBjb2xvcikKK3sKKyAgICBtX3ByaXZhdGUtPnNldFVuc2lnbmVkKEJsYWNrQmVycnlPdmVyWm9v
bUNvbG9yLCBjb2xvcik7Cit9CisKK3Vuc2lnbmVkIFdlYlNldHRpbmdzOjpiYWNrZ3JvdW5kQ29s
b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFVuc2lnbmVkKEJsYWNrQmVy
cnlCYWNrZ3JvdW5kQ29sb3IpOworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRCYWNrZ3JvdW5k
Q29sb3IodW5zaWduZWQgY29sb3IpCit7CisgICAgbV9wcml2YXRlLT5zZXRVbnNpZ25lZChCbGFj
a0JlcnJ5QmFja2dyb3VuZENvbG9yLCBjb2xvcik7Cit9CisKK2Jvb2wgV2ViU2V0dGluZ3M6Omlz
V3JpdGluZ0RpcmVjdGlvblJUTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0
Qm9vbGVhbihCbGFja0JlcnJ5VXNlUlRMV3JpdGluZ0RpcmVjdGlvbik7Cit9CisKK3ZvaWQgV2Vi
U2V0dGluZ3M6OnNldFdyaXRpbmdEaXJlY3Rpb25SVEwoYm9vbCB1c2VSVExXcml0aW5nRGlyZWN0
aW9uKQoreworICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihCbGFja0JlcnJ5VXNlUlRMV3JpdGlu
Z0RpcmVjdGlvbiwgdXNlUlRMV3JpdGluZ0RpcmVjdGlvbik7Cit9CisKK2Jvb2wgV2ViU2V0dGlu
Z3M6OnVzZVdlYktpdENhY2hlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRC
b29sZWFuKEJsYWNrQmVycnlVc2VXZWJLaXRDYWNoZSk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6
OnNldFVzZVdlYktpdENhY2hlKGJvb2wgdXNlV2ViS2l0Q2FjaGUpCit7CisgICAgbV9wcml2YXRl
LT5zZXRCb29sZWFuKEJsYWNrQmVycnlVc2VXZWJLaXRDYWNoZSwgdXNlV2ViS2l0Q2FjaGUpOwor
fQorCitib29sIFdlYlNldHRpbmdzOjppc0ZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoKSBjb25zdAor
eworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEJvb2xlYW4oV2ViS2l0RnJhbWVGbGF0dGVuaW5n
RW5hYmxlZCk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJs
ZWQoYm9vbCBlbmFibGUpCit7CisgICAgbV9wcml2YXRlLT5zZXRCb29sZWFuKFdlYktpdEZyYW1l
RmxhdHRlbmluZ0VuYWJsZWQsIGVuYWJsZSk7Cit9CisKK2Jvb2wgV2ViU2V0dGluZ3M6OmlzRGly
ZWN0UmVuZGVyaW5nVG9XaW5kb3dFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2
YXRlLT5nZXRCb29sZWFuKEJsYWNrQmVycnlEaXJlY3RSZW5kZXJpbmdUb1dpbmRvd0VuYWJsZWQp
OworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXREaXJlY3RSZW5kZXJpbmdUb1dpbmRvd0VuYWJs
ZWQoYm9vbCBlbmFibGUpCit7CisgICAgbV9wcml2YXRlLT5zZXRCb29sZWFuKEJsYWNrQmVycnlE
aXJlY3RSZW5kZXJpbmdUb1dpbmRvd0VuYWJsZWQsIGVuYWJsZSk7Cit9CisKK3Vuc2lnbmVkIFdl
YlNldHRpbmdzOjptYXhQbHVnaW5JbnN0YW5jZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX3By
aXZhdGUtPmdldFVuc2lnbmVkKEJsYWNrQmVycnlNYXhQbHVnaW5JbnN0YW5jZXMpOworfQorCit2
b2lkIFdlYlNldHRpbmdzOjpzZXRNYXhQbHVnaW5JbnN0YW5jZXModW5zaWduZWQgbWF4UGx1Z2lu
SW5zdGFuY2VzKQoreworICAgIG1fcHJpdmF0ZS0+c2V0VW5zaWduZWQoQmxhY2tCZXJyeU1heFBs
dWdpbkluc3RhbmNlcywgbWF4UGx1Z2luSW5zdGFuY2VzKTsKK30KKworYm9vbCBXZWJTZXR0aW5n
czo6YXJlV2ViU29ja2V0c0VuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUt
PmdldEJvb2xlYW4oV2ViS2l0V2ViU29ja2V0c0VuYWJsZWQpOworfQorCit2b2lkIFdlYlNldHRp
bmdzOjpzZXRXZWJTb2NrZXRzRW5hYmxlZChib29sIGVuYWJsZSkKK3sKKyAgICBtX3ByaXZhdGUt
PnNldEJvb2xlYW4oV2ViS2l0V2ViU29ja2V0c0VuYWJsZWQsIGVuYWJsZSk7Cit9CisKK2Jvb2wg
V2ViU2V0dGluZ3M6OmlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5nZXRCb29sZWFuKFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCk7Cit9
CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGVu
YWJsZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldEJvb2xlYW4oU3BhdGlhbE5hdmlnYXRpb25FbmFi
bGVkLCBlbmFibGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKK30gLy8gbmFtZXNwYWNl
IEJsYWNrQmVycnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2Vi
U2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViU2V0dGluZ3MuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40MDNlOGY0YTJiYzI4NTRmZWI1NTUzYmM5ZTQ3YzQwYWIyZDhkYjI1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5ncy5o
CkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEx
LCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgV2ViU2V0dGluZ3NfaAorI2RlZmluZSBXZWJT
ZXR0aW5nc19oCisKKyNpbmNsdWRlICJCbGFja0JlcnJ5R2xvYmFsLmgiCisKK25hbWVzcGFjZSBC
bGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTZXR0aW5nczsKK2Ns
YXNzIFdlYlNldHRpbmdzUHJpdmF0ZTsKKworLyohCisgICAgQHN0cnVjdCBXZWJTZXR0aW5nc0Rl
bGVnYXRlCisgICAgRGVmaW5lcyB0aGUgbWV0aG9kcyB0aGF0IG11c3QgYmUgaW1wbGVtZW50ZWQg
YnkgYSBkZWxlZ2F0ZSBvZiBXZWJTZXR0aW5ncy4KKyovCitzdHJ1Y3QgQkxBQ0tCRVJSWV9FWFBP
UlQgV2ViU2V0dGluZ3NEZWxlZ2F0ZSB7CisgICAgdmlydHVhbCB+V2ViU2V0dGluZ3NEZWxlZ2F0
ZSgpIHsgfQorCisgICAgLyohCisgICAgICAgIFNlbnQgd2hlbiB0aGUgdmFsdWUgb2YgYSBzZXR0
aW5nIGNoYW5nZWQgYXMgd2VsbCBhcyBvbiBpbnN0YW50aWF0aW9uIG9mIGEgV2ViU2V0dGluZ3Mg
b2JqZWN0LgorICAgICAgICBAcGFyYW0gc2V0dGluZ3MgVGhlIFdlYlNldHRpbmdzIG9iamVjdCB0
aGF0IHNlbnQgdGhlIG1lc3NhZ2UuCisgICAgKi8KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdl
U2V0dGluZ3MoV2ViU2V0dGluZ3MqKSA9IDA7Cit9OworCisvKiEKKyAgICBAY2xhc3MgV2ViU2V0
dGluZ3MKKyovCitjbGFzcyBCTEFDS0JFUlJZX0VYUE9SVCBXZWJTZXR0aW5ncyB7CitwdWJsaWM6
CisgICAgc3RhdGljIFdlYlNldHRpbmdzKiBjcmVhdGVGcm9tU3RhbmRhcmRTZXR0aW5ncyhXZWJT
ZXR0aW5nc0RlbGVnYXRlKiA9IDApOworICAgIH5XZWJTZXR0aW5ncygpOworCisgICAgc3RhdGlj
IFdlYlNldHRpbmdzKiBzdGFuZGFyZFNldHRpbmdzKCk7CisKKyAgICB2b2lkIHNldERlbGVnYXRl
KFdlYlNldHRpbmdzRGVsZWdhdGUqKTsKKyAgICBXZWJTZXR0aW5nc0RlbGVnYXRlKiBkZWxlZ2F0
ZSgpOworCisgICAgc3RhdGljIHZvaWQgYWRkU3VwcG9ydGVkT2JqZWN0UGx1Z2luTUlNRVR5cGUo
Y29uc3QgY2hhciopOworICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkT2JqZWN0TUlNRVR5cGUo
Y29uc3QgV2ViU3RyaW5nJik7CisgICAgc3RhdGljIFdlYlN0cmluZyBnZXROb3JtYWxpemVkTUlN
RVR5cGUoY29uc3QgV2ViU3RyaW5nJik7CisKKyAgICBib29sIHhzc0F1ZGl0b3JFbmFibGVkKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sKTsKKworICAgIGJvb2wg
bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KCkgY29uc3Q7CisgICAgdm9pZCBzZXRMb2Fkc0ltYWdl
c0F1dG9tYXRpY2FsbHkoYm9vbCk7CisKKyAgICBib29sIHNob3VsZERyYXdCb3JkZXJXaGlsZUxv
YWRpbmdJbWFnZXMoKSBjb25zdDsKKyAgICB2b2lkIHNldFNob3VsZERyYXdCb3JkZXJXaGlsZUxv
YWRpbmdJbWFnZXMoYm9vbCk7CisKKyAgICBib29sIGlzSmF2YVNjcmlwdEVuYWJsZWQoKSBjb25z
dDsKKyAgICB2b2lkIHNldEphdmFTY3JpcHRFbmFibGVkKGJvb2wpOworCisgICAgYm9vbCBpc1By
aXZhdGVCcm93c2luZ0VuYWJsZWQoKSBjb25zdDsKKyAgICB2b2lkIHNldFByaXZhdGVCcm93c2lu
Z0VuYWJsZWQoYm9vbCk7CisKKyAgICBpbnQgZGVmYXVsdEZpeGVkRm9udFNpemUoKSBjb25zdDsK
KyAgICB2b2lkIHNldERlZmF1bHRGaXhlZEZvbnRTaXplKGludCk7CisKKyAgICBpbnQgZGVmYXVs
dEZvbnRTaXplKCkgY29uc3Q7CisgICAgdm9pZCBzZXREZWZhdWx0Rm9udFNpemUoaW50KTsKKwor
ICAgIGludCBtaW5pbXVtRm9udFNpemUoKSBjb25zdDsKKyAgICB2b2lkIHNldE1pbmltdW1Gb250
U2l6ZShpbnQpOworCisgICAgV2ViU3RyaW5nIHNlcmlmRm9udEZhbWlseSgpIGNvbnN0OworICAg
IHZvaWQgc2V0U2VyaWZGb250RmFtaWx5KGNvbnN0IGNoYXIqKTsKKyAgICBXZWJTdHJpbmcgZml4
ZWRGb250RmFtaWx5KCkgY29uc3Q7CisgICAgdm9pZCBzZXRGaXhlZEZvbnRGYW1pbHkoY29uc3Qg
Y2hhciopOworICAgIFdlYlN0cmluZyBzYW5zU2VyaWZGb250RmFtaWx5KCkgY29uc3Q7CisgICAg
dm9pZCBzZXRTYW5zU2VyaWZGb250RmFtaWx5KGNvbnN0IGNoYXIqKTsKKyAgICBXZWJTdHJpbmcg
c3RhbmRhcmRGb250RmFtaWx5KCkgY29uc3Q7CisgICAgdm9pZCBzZXRTdGFuZGFyZEZvbnRGYW1p
bHkoY29uc3QgY2hhciopOworCisgICAgdm9pZCBzZXREb3dubG9hZGFibGVCaW5hcnlGb250c0Vu
YWJsZWQoYm9vbCk7CisgICAgYm9vbCBkb3dubG9hZGFibGVCaW5hcnlGb250c0VuYWJsZWQoKSBj
b25zdDsKKworICAgIFdlYlN0cmluZyB1c2VyQWdlbnRTdHJpbmcoKSBjb25zdDsKKyAgICB2b2lk
IHNldFVzZXJBZ2VudFN0cmluZyhjb25zdCBjaGFyKik7CisKKyAgICBXZWJTdHJpbmcgZGVmYXVs
dFRleHRFbmNvZGluZ05hbWUoKSBjb25zdDsKKyAgICB2b2lkIHNldERlZmF1bHRUZXh0RW5jb2Rp
bmdOYW1lKGNvbnN0IGNoYXIqKTsKKworICAgIGJvb2wgaXNab29tVG9GaXRPbkxvYWQoKSBjb25z
dDsKKyAgICB2b2lkIHNldFpvb21Ub0ZpdE9uTG9hZChib29sKTsKKworICAgIGVudW0gVGV4dFJl
Zmxvd01vZGUgeyBUZXh0UmVmbG93RGlzYWJsZWQsIFRleHRSZWZsb3dFbmFibGVkLCBUZXh0UmVm
bG93RW5hYmxlZE9ubHlGb3JCbG9ja1pvb20gfTsKKyAgICBUZXh0UmVmbG93TW9kZSB0ZXh0UmVm
bG93TW9kZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VGV4dFJlZmxvd01vZGUoVGV4dFJlZmxvd01v
ZGUpOworCisgICAgYm9vbCBpc1Njcm9sbGJhcnNFbmFibGVkKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRTY3JvbGxiYXJzRW5hYmxlZChib29sKTsKKworICAgIC8vIEZJWE1FOiBDb25zaWRlciByZW5h
bWluZyB0aGlzIG1ldGhvZCB1cHN0cmVhbSwgd2hlcmUgaXQgaXMgY2FsbGVkIGphdmFTY3JpcHRD
YW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkuCisgICAgYm9vbCBjYW5KYXZhU2NyaXB0T3Blbldp
bmRvd3NBdXRvbWF0aWNhbGx5KCkgY29uc3Q7CisgICAgdm9pZCBzZXRKYXZhU2NyaXB0T3Blbldp
bmRvd3NBdXRvbWF0aWNhbGx5KGJvb2wpOworCisgICAgYm9vbCBhcmVQbHVnaW5zRW5hYmxlZCgp
IGNvbnN0OworICAgIHZvaWQgc2V0UGx1Z2luc0VuYWJsZWQoYm9vbCk7CisKKyAgICBib29sIGlz
R2VvbG9jYXRpb25FbmFibGVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRHZW9sb2NhdGlvbkVuYWJs
ZWQoYm9vbCk7CisKKyAgICAvLyBDb250ZXh0IGluZm8KKyAgICBib29sIGRvZXNHZXRGb2N1c05v
ZGVDb250ZXh0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRHZXRGb2N1c05vZGVDb250ZXh0KGJvb2wp
OworCisgICAgV2ViU3RyaW5nIHVzZXJTdHlsZVNoZWV0U3RyaW5nKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRVc2VyU3R5bGVTaGVldFN0cmluZyhjb25zdCBjaGFyKik7CisKKyAgICBXZWJTdHJpbmcg
dXNlclN0eWxlU2hlZXRMb2NhdGlvbigpOworICAgIHZvaWQgc2V0VXNlclN0eWxlU2hlZXRMb2Nh
dGlvbihjb25zdCBjaGFyKik7CisKKyAgICAvLyBFeHRlcm5hbCBsaW5rIGhhbmRsZXJzCisgICAg
Ym9vbCBhcmVMaW5rc0hhbmRsZWRFeHRlcm5hbGx5KCkgY29uc3Q7CisgICAgdm9pZCBzZXRBcmVM
aW5rc0hhbmRsZWRFeHRlcm5hbGx5KGJvb2wpOworCisgICAgLy8gQnJvd3NlckZpZWxkMiBzZXR0
aW5ncworICAgIHZvaWQgc2V0QWxsb3dDcm9zc1NpdGVSZXF1ZXN0cyhib29sKTsKKyAgICBib29s
IGFsbG93Q3Jvc3NTaXRlUmVxdWVzdHMoKSBjb25zdDsKKyAgICBib29sIGlzVXNlclNjYWxhYmxl
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRVc2VyU2NhbGFibGUoYm9vbCk7CisgICAgaW50IHZpZXdw
b3J0V2lkdGgoKSBjb25zdDsKKyAgICB2b2lkIHNldFZpZXdwb3J0V2lkdGgoaW50KTsKKyAgICBk
b3VibGUgaW5pdGlhbFNjYWxlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRJbml0aWFsU2NhbGUoZG91
YmxlKTsKKworICAgIGludCBmaXJzdFNjaGVkdWxlZExheW91dERlbGF5KCkgY29uc3Q7CisgICAg
dm9pZCBzZXRGaXJzdFNjaGVkdWxlZExheW91dERlbGF5KGludCk7CisKKyAgICAvLyBXaGV0aGVy
IHRvIGluY2x1ZGUgcGF0dGVybjogaW4gdGhlIGxpc3Qgb2Ygc3RyaW5nIHBhdHRlcm5zLgorICAg
IGJvb2wgc2hvdWxkSGFuZGxlUGF0dGVyblVybHMoKSBjb25zdDsKKyAgICB2b2lkIHNldFNob3Vs
ZEhhbmRsZVBhdHRlcm5VcmxzKGJvb2wpOworCisgICAgYm9vbCBhcmVDb29raWVzRW5hYmxlZCgp
IGNvbnN0OworICAgIHZvaWQgc2V0QXJlQ29va2llc0VuYWJsZWQoYm9vbCk7CisKKyAgICAvLyBX
ZWIgc3RvcmFnZSBzZXR0aW5ncworICAgIGJvb2wgaXNMb2NhbFN0b3JhZ2VFbmFibGVkKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRJc0xvY2FsU3RvcmFnZUVuYWJsZWQoYm9vbCk7CisKKyAgICBib29s
IGlzRGF0YWJhc2VzRW5hYmxlZCgpIGNvbnN0OworICAgIHZvaWQgc2V0SXNEYXRhYmFzZXNFbmFi
bGVkKGJvb2wpOworCisgICAgYm9vbCBpc0FwcENhY2hlRW5hYmxlZCgpIGNvbnN0OworICAgIHZv
aWQgc2V0SXNBcHBDYWNoZUVuYWJsZWQoYm9vbCk7CisKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcg
bG9jYWxTdG9yYWdlUXVvdGEoKSBjb25zdDsKKyAgICB2b2lkIHNldExvY2FsU3RvcmFnZVF1b3Rh
KHVuc2lnbmVkIGxvbmcgbG9uZyk7CisKKyAgICAvLyBQYWdlIGNhY2hlCisgICAgdm9pZCBzZXRN
YXhpbXVtUGFnZXNJbkNhY2hlKGludCk7CisgICAgaW50IG1heGltdW1QYWdlc0luQ2FjaGUoKSBj
b25zdDsKKworICAgIFdlYlN0cmluZyBsb2NhbFN0b3JhZ2VQYXRoKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRMb2NhbFN0b3JhZ2VQYXRoKGNvbnN0IFdlYlN0cmluZyYpOworCisgICAgV2ViU3RyaW5n
IGRhdGFiYXNlUGF0aCgpIGNvbnN0OworICAgIHZvaWQgc2V0RGF0YWJhc2VQYXRoKGNvbnN0IFdl
YlN0cmluZyYpOworCisgICAgV2ViU3RyaW5nIGFwcENhY2hlUGF0aCgpIGNvbnN0OworICAgIHZv
aWQgc2V0QXBwQ2FjaGVQYXRoKGNvbnN0IFdlYlN0cmluZyYpOworCisgICAgV2ViU3RyaW5nIHBh
Z2VHcm91cE5hbWUoKSBjb25zdDsKKyAgICB2b2lkIHNldFBhZ2VHcm91cE5hbWUoY29uc3QgV2Vi
U3RyaW5nJik7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgYW4gZW1haWwgbW9k
ZS4gSW5zdGVhZCwgd2Ugc2hvdWxkIGV4cG9zZSBhbGwgZW1haWwtcmVsYXRlZCBzZXR0aW5ncwor
ICAgIC8vIHNvIHRoYXQgdGhlIGVtYWlsIGNsaWVudCBjYW4gdG9nZ2xlIHRoZW0gZGlyZWN0bHku
CisgICAgYm9vbCBpc0VtYWlsTW9kZSgpIGNvbnN0OworICAgIHZvaWQgc2V0RW1haWxNb2RlKGJv
b2wgZW5hYmxlKTsKKworICAgIGJvb2wgc2hvdWxkUmVuZGVyQW5pbWF0aW9uc09uU2Nyb2xsT3Ja
b29tKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTaG91bGRSZW5kZXJBbmltYXRpb25zT25TY3JvbGxP
clpvb20oYm9vbCBlbmFibGUpOworCisgICAgdW5zaWduZWQgb3Zlclpvb21Db2xvcigpIGNvbnN0
OworICAgIHZvaWQgc2V0T3Zlclpvb21Db2xvcih1bnNpZ25lZCk7CisKKyAgICB1bnNpZ25lZCBi
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcih1bnNp
Z25lZCk7CisKKyAgICBib29sIGlzV3JpdGluZ0RpcmVjdGlvblJUTCgpIGNvbnN0OworICAgIHZv
aWQgc2V0V3JpdGluZ0RpcmVjdGlvblJUTChib29sKTsKKworICAgIGJvb2wgdXNlV2ViS2l0Q2Fj
aGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFVzZVdlYktpdENhY2hlKGJvb2wpOworCisgICAgYm9v
bCBpc0ZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoKSBjb25zdDsKKyAgICB2b2lkIHNldEZyYW1lRmxh
dHRlbmluZ0VuYWJsZWQoYm9vbCk7CisKKyAgICBib29sIGlzRGlyZWN0UmVuZGVyaW5nVG9XaW5k
b3dFbmFibGVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXREaXJlY3RSZW5kZXJpbmdUb1dpbmRvd0Vu
YWJsZWQoYm9vbCk7CisKKyAgICB1bnNpZ25lZCBtYXhQbHVnaW5JbnN0YW5jZXMoKSBjb25zdDsK
KyAgICB2b2lkIHNldE1heFBsdWdpbkluc3RhbmNlcyh1bnNpZ25lZCBudW0pOworCisgICAgYm9v
bCBhcmVXZWJTb2NrZXRzRW5hYmxlZCgpIGNvbnN0OworICAgIHZvaWQgc2V0V2ViU29ja2V0c0Vu
YWJsZWQoYm9vbCk7CisKKyAgICBib29sIGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCk7CisKK3ByaXZh
dGU6CisgICAgV2ViU2V0dGluZ3NQcml2YXRlKiBtX3ByaXZhdGU7CisgICAgV2ViU2V0dGluZ3Mo
KTsKKyAgICBXZWJTZXR0aW5ncyhjb25zdCBXZWJTZXR0aW5ncyYpOworfTsKKworLyohCisgICAg
QGNsYXNzIFdlYlNldHRpbmdzVHJhbnNhY3Rpb24KKyAgICBEZWZpbmVzIGEgc2NvcGUgZ3VhcmQg
dGhhdCBzdXBwcmVzc2VzIGRpZENoYW5nZVNldHRpbmdzIG1lc3NhZ2VzIHdpdGhpbiBpdHMgc2Nv
cGUuCisgICAgT24gZGVzdHJ1Y3Rpb24gdGhlIGd1YXJkZWQgV2ViU2V0dGluZ3Mgb2JqZWN0IHdp
bGwgZGlzcGF0Y2ggZXhhY3RseSBvbmUgZGlkQ2hhbmdlU2V0dGluZ3MgbWVzc2FnZS4KKyovCitj
bGFzcyBCTEFDS0JFUlJZX0VYUE9SVCBXZWJTZXR0aW5nc1RyYW5zYWN0aW9uIHsKK3B1YmxpYzoK
KyAgICBXZWJTZXR0aW5nc1RyYW5zYWN0aW9uKFdlYlNldHRpbmdzKiBzZXR0aW5ncykKKyAgICAg
ICAgOiBtX3NldHRpbmdzKHNldHRpbmdzKQorICAgICAgICAsIG1fc2F2ZWREZWxlZ2F0ZSgwKQor
ICAgIHsKKyAgICAgICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgbV9zYXZlZERlbGVnYXRlID0gc2V0dGluZ3MtPmRlbGVnYXRlKCk7CisgICAgICAgIHNldHRp
bmdzLT5zZXREZWxlZ2F0ZSgwKTsKKyAgICB9CisKKyAgICB+V2ViU2V0dGluZ3NUcmFuc2FjdGlv
bigpCisgICAgeworICAgICAgICBpZiAoIW1fc2V0dGluZ3MgfHwgIW1fc2F2ZWREZWxlZ2F0ZSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9zZXR0aW5ncy0+c2V0RGVsZWdhdGUobV9z
YXZlZERlbGVnYXRlKTsKKyAgICAgICAgbV9zYXZlZERlbGVnYXRlLT5kaWRDaGFuZ2VTZXR0aW5n
cyhtX3NldHRpbmdzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgV2ViU2V0dGluZ3NUcmFuc2Fj
dGlvbihjb25zdCBXZWJTZXR0aW5nc1RyYW5zYWN0aW9uJik7CisgICAgV2ViU2V0dGluZ3NUcmFu
c2FjdGlvbiYgb3BlcmF0b3I9KGNvbnN0IFdlYlNldHRpbmdzVHJhbnNhY3Rpb24mKTsKKworICAg
IFdlYlNldHRpbmdzKiBtX3NldHRpbmdzOworICAgIFdlYlNldHRpbmdzRGVsZWdhdGUqIG1fc2F2
ZWREZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorfSAvLyBuYW1lc3BhY2Ug
QmxhY2tCZXJyeQorCisjZW5kaWYgLy8gV2ViU2V0dGluZ3NfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5nc19wLmggYi9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQXBpL1dlYlNldHRpbmdzX3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYmI5YTFhYTQyM2U2MTRh
MzYwZDk2NTM0ODVjNzQ1ODFlYzlkMGNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5nc19wLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lm
bmRlZiBXZWJTZXR0aW5nc19wX2gKKyNkZWZpbmUgV2ViU2V0dGluZ3NfcF9oCisKKyNpbmNsdWRl
ICJXZWJTZXR0aW5ncy5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKKyNkZWZpbmUgc3ludGhlc2l6ZUFjY2Vzc29yc0ZvclBy
aW1pdGl2ZVZhbHVlUHJlZml4QW5kVHlwZShwcmVmaXgsIHR5cGUpIFwKKyAgICAgdm9pZCBzZXQj
I3ByZWZpeChjb25zdCBXVEY6OlN0cmluZyYga2V5LCB0eXBlIG5ld1ZhbHVlKSB7IFwKKyAgICAg
ICAgIEFTU0VSVChpbXBsKTsgXAorICAgICAgICAgaWYgKGdldCMjcHJlZml4KGtleSkgPT0gbmV3
VmFsdWUpIFwKKyAgICAgICAgICAgIHJldHVybjsgXAorICAgICAgICAgaWYgKGNvcHlPbldyaXRl
KSB7IFwKKyAgICAgICAgICAgIGNvcHlPbldyaXRlID0gZmFsc2U7IFwKKyAgICAgICAgICAgIGlt
cGwgPSBuZXcgV2ViU2V0dGluZ3NQcml2YXRlSW1wbCgqaW1wbCk7IFwKKyAgICAgICAgIH0gXAor
ICAgICAgICAgUHJpbWl0aXZlVmFsdWUgcHJpbWl0aXZlVmFsdWU7IFwKKyAgICAgICAgIHByaW1p
dGl2ZVZhbHVlLnByZWZpeCMjVmFsdWUgPSBuZXdWYWx1ZTsgXAorICAgICAgICAgaW1wbC0+cHJp
bWl0aXZlVmFsdWVzLnNldChrZXksIHByaW1pdGl2ZVZhbHVlKTsgXAorICAgICAgICAgaWYgKGRl
bGVnYXRlKSBcCisgICAgICAgICAgICBkZWxlZ2F0ZS0+ZGlkQ2hhbmdlU2V0dGluZ3Moc2VuZGVy
KTsgXAorICAgICB9IFwKKyAgICAgdHlwZSBnZXQjI3ByZWZpeChjb25zdCBXVEY6OlN0cmluZyYg
a2V5KSBjb25zdCB7IFwKKyAgICAgICAgICBBU1NFUlQoaW1wbCk7IFwKKyAgICAgICAgICBpZiAo
IWltcGwtPnByaW1pdGl2ZVZhbHVlcy5jb250YWlucyhrZXkpKSBcCisgICAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx0eXBlPihmYWxzZSk7IFwKKyAgICAgICAgICByZXR1cm4gaW1wbC0+
cHJpbWl0aXZlVmFsdWVzLmdldChrZXkpLnByZWZpeCMjVmFsdWU7IFwKKyAgICAgIH0KKworbmFt
ZXNwYWNlIFdURiB7CitjbGFzcyBTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsK
K25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3QgV2ViU2V0dGluZ3NQcml2YXRlIHsKKyAgICB1
bmlvbiBQcmltaXRpdmVWYWx1ZSB7CisgICAgICAgIFdlYlNldHRpbmdzOjpUZXh0UmVmbG93TW9k
ZSBUZXh0UmVmbG93TW9kZVZhbHVlOworICAgICAgICBib29sIEJvb2xlYW5WYWx1ZTsKKyAgICAg
ICAgZG91YmxlIERvdWJsZVZhbHVlOworICAgICAgICBpbnQgSW50ZWdlclZhbHVlOworICAgICAg
ICB1bnNpZ25lZCBVbnNpZ25lZFZhbHVlOworICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgVW5z
aWduZWRMb25nTG9uZ1ZhbHVlOworICAgIH07CisKKyAgICBzdHJ1Y3QgV2ViU2V0dGluZ3NQcml2
YXRlSW1wbCB7CisgICAgICAgIEhhc2hNYXA8V1RGOjpTdHJpbmcsIFByaW1pdGl2ZVZhbHVlPiBw
cmltaXRpdmVWYWx1ZXM7CisgICAgICAgIEhhc2hNYXA8V1RGOjpTdHJpbmcsIFdURjo6U3RyaW5n
PiBzdHJpbmdWYWx1ZXM7CisgICAgfTsKKworICAgIFdlYlNldHRpbmdzUHJpdmF0ZUltcGwqIGlt
cGw7CisgICAgV2ViU2V0dGluZ3NEZWxlZ2F0ZSogZGVsZWdhdGU7CisgICAgV2ViU2V0dGluZ3Mq
IHNlbmRlcjsKKyAgICBib29sIGNvcHlPbldyaXRlOworCisgICAgV2ViU2V0dGluZ3NQcml2YXRl
KCk7CisKKyAgICBzeW50aGVzaXplQWNjZXNzb3JzRm9yUHJpbWl0aXZlVmFsdWVQcmVmaXhBbmRU
eXBlKFRleHRSZWZsb3dNb2RlLCBXZWJTZXR0aW5nczo6VGV4dFJlZmxvd01vZGUpOworCisgICAg
c3ludGhlc2l6ZUFjY2Vzc29yc0ZvclByaW1pdGl2ZVZhbHVlUHJlZml4QW5kVHlwZShCb29sZWFu
LCBib29sKTsKKworICAgIHN5bnRoZXNpemVBY2Nlc3NvcnNGb3JQcmltaXRpdmVWYWx1ZVByZWZp
eEFuZFR5cGUoRG91YmxlLCBkb3VibGUpOworCisgICAgc3ludGhlc2l6ZUFjY2Vzc29yc0ZvclBy
aW1pdGl2ZVZhbHVlUHJlZml4QW5kVHlwZShJbnRlZ2VyLCBpbnQpOworCisgICAgc3ludGhlc2l6
ZUFjY2Vzc29yc0ZvclByaW1pdGl2ZVZhbHVlUHJlZml4QW5kVHlwZShVbnNpZ25lZCwgdW5zaWdu
ZWQpOworCisgICAgc3ludGhlc2l6ZUFjY2Vzc29yc0ZvclByaW1pdGl2ZVZhbHVlUHJlZml4QW5k
VHlwZShVbnNpZ25lZExvbmdMb25nLCB1bnNpZ25lZCBsb25nIGxvbmcpOworCisgICAgV1RGOjpT
dHJpbmcgZ2V0U3RyaW5nKGNvbnN0IFdURjo6U3RyaW5nJiBrZXkpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoaW1wbCk7CisgICAgICAgIGlmICghaW1wbC0+c3RyaW5nVmFsdWVzLmNvbnRh
aW5zKGtleSkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpTdHJpbmcoKTsKKworICAgICAgICBy
ZXR1cm4gaW1wbC0+c3RyaW5nVmFsdWVzLmdldChrZXkpOworICAgIH0KKworICAgIHZvaWQgc2V0
U3RyaW5nKGNvbnN0IFdURjo6U3RyaW5nJiBrZXksIGNvbnN0IFdURjo6U3RyaW5nJiBuZXdWYWx1
ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpbXBsKTsKKyAgICAgICAgaWYgKGdldFN0cmluZyhr
ZXkpID09IG5ld1ZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChjb3B5
T25Xcml0ZSkgeworICAgICAgICAgICAgY29weU9uV3JpdGUgPSBmYWxzZTsKKyAgICAgICAgICAg
IGltcGwgPSBuZXcgV2ViU2V0dGluZ3NQcml2YXRlSW1wbCgqaW1wbCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpbXBsLT5zdHJpbmdWYWx1ZXMuc2V0KGtleSwgbmV3VmFsdWUpOworICAgICAgICBp
ZiAoZGVsZWdhdGUpCisgICAgICAgICAgICBkZWxlZ2F0ZS0+ZGlkQ2hhbmdlU2V0dGluZ3Moc2Vu
ZGVyKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKK30gLy8gbmFtZXNwYWNl
IEJsYWNrQmVycnkKKworI2VuZGlmIC8vIFdlYlNldHRpbmdzX3BfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127074</attachid>
            <date>2012-02-14 16:26:06 -0800</date>
            <delta_ts>2012-02-14 17:48:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78633-20120214192334.patch</filename>
            <type>text/plain</type>
            <size>42075</size>
            <attacher name="Nima Ghanavatian">nima.ghanavatian</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NzEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDM5M2E3MTEyNWNmZGQ2ZDlj
MWJkYTFlMTk4OTkxZjFkZGRkZGVjODUuLmVjZGI5ZTYzY2ZmNTI0MTIzNDBmYmM5MjgzYzg0NWE2
ZmIzNmZlMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTggQEAKIDIwMTItMDItMTQgIE5pbWEgR2hh
bmF2YXRpYW4gIDxuZ2hhbmF2YXRpYW5AcmltLmNvbT4KIAorICAgICAgICBbQmxhY2tCZXJyeV0g
VXBzdHJlYW1pbmcgV2ViU2V0dGluZ3MgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbml0aWFsIHVwc3RyZWFtaW5nLCBubyBuZXcgdGVzdHMuCisK
KyAgICAgICAgKiBibGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5ncy5jcHA6IEFkZGVkLgorICAgICAg
ICAqIGJsYWNrYmVycnkvQXBpL1dlYlNldHRpbmdzLmg6IEFkZGVkLgorICAgICAgICAqIGJsYWNr
YmVycnkvQXBpL1dlYlNldHRpbmdzX3AuaDogQWRkZWQuCisKKzIwMTItMDItMTQgIE5pbWEgR2hh
bmF2YXRpYW4gIDxuZ2hhbmF2YXRpYW5AcmltLmNvbT4KKwogICAgICAgICBbQmxhY2tCZXJyeV0g
VXBzdHJlYW1pbmcgRE9NU3VwcG9ydCBmaWxlcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg2MDcKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYlNldHRpbmdzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NjA5NjRjZDhkMzQ5MTdiZjZjNTdjZDFi
OTg3MjQ0Yjc2MDFjZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJTZXR0aW5ncy5jcHAKQEAgLTAsMCArMSw4MTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYlNldHRpbmdzLmgiCisKKyNpbmNsdWRlICJXZWJTZXR0aW5n
c19wLmgiCisKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlIDxCYXNlNjQuaD4KKyNp
bmNsdWRlIDxDb2xvci5oPgorI2luY2x1ZGUgPFBhZ2VDYWNoZS5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgQmxhY2tCZXJy
eSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIEJs
YWNrQmVycnlBbGxvd0Nyb3NzU2l0ZVJlcXVlc3RzLCAoIkJsYWNrQmVycnlBbGxvd0Nyb3NzU2l0
ZVJlcXVlc3RzIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIEJsYWNrQmVycnlCYWNr
Z3JvdW5kQ29sb3IsICgiQmxhY2tCZXJyeUJhY2tncm91bmRDb2xvciIpKTsKK0RFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCBCbGFja0JlcnJ5Q29va2llc0VuYWJsZWQsICgiQmxhY2tCZXJyeUNv
b2tpZXNFbmFibGVkIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIEJsYWNrQmVycnlE
aXJlY3RSZW5kZXJpbmdUb1dpbmRvd0VuYWJsZWQsICgiQmxhY2tCZXJyeURpcmVjdFJlbmRlcmlu
Z1RvV2luZG93RW5hYmxlZCIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBCbGFja0Jl
cnJ5RHJhd0JvcmRlcldoaWxlTG9hZGluZ0ltYWdlcywgKCJCbGFja0JlcnJ5RHJhd0JvcmRlcldo
aWxlTG9hZGluZ0ltYWdlcyIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBCbGFja0Jl
cnJ5RW1haWxNb2RlRW5hYmxlZCwgKCJCbGFja0JlcnJ5RW1haWxNb2RlRW5hYmxlZCIpKTsKK0RF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBCbGFja0JlcnJ5R2V0Rm9jdXNOb2RlQ29udGV4dEVu
YWJsZWQsICgiQmxhY2tCZXJyeUdldEZvY3VzTm9kZUNvbnRleHRFbmFibGVkIikpOworREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIEJsYWNrQmVycnlIYW5kbGVQYXR0ZXJuVVJMcywgKCJCbGFj
a0JlcnJ5SGFuZGxlUGF0dGVyblVSTHMiKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywg
QmxhY2tCZXJyeUluaXRpYWxTY2FsZSwgKCJCbGFja0JlcnJ5SW5pdGlhbFNjYWxlIikpOworREVG
SU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIEJsYWNrQmVycnlMaW5rc0hhbmRsZWRFeHRlcm5hbGx5
RW5hYmxlZCwgKCJCbGFja0JlcnJ5TGlua3NIYW5kbGVkRXh0ZXJuYWxseUVuYWJsZWQiKSk7CitE
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgQmxhY2tCZXJyeU1heFBsdWdpbkluc3RhbmNlcywg
KCJCbGFja0JlcnJ5TWF4UGx1Z2luSW5zdGFuY2VzIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChT
dHJpbmcsIEJsYWNrQmVycnlPdmVyWm9vbUNvbG9yLCAoIkJsYWNrQmVycnlPdmVyWm9vbUNvbG9y
IikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIEJsYWNrQmVycnlSZW5kZXJBbmltYXRp
b25zT25TY3JvbGxPclpvb21FbmFibGVkLCAoIkJsYWNrQmVycnlSZW5kZXJBbmltYXRpb25zT25T
Y3JvbGxPclpvb21FbmFibGVkIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIEJsYWNr
QmVycnlTY3JvbGxiYXJzRW5hYmxlZCwgKCJCbGFja0JlcnJ5U2Nyb2xsYmFyc0VuYWJsZWQiKSk7
CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgQmxhY2tCZXJyeVRleHRSZWZsb3dNb2RlLCAo
IkJsYWNrQmVycnlUZXh0UmVmbG93TW9kZSIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCBCbGFja0JlcnJ5VXNlUlRMV3JpdGluZ0RpcmVjdGlvbiwgKCJCbGFja0JlcnJ5VXNlUlRMV3Jp
dGluZ0RpcmVjdGlvbiIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBCbGFja0JlcnJ5
VXNlV2ViS2l0Q2FjaGUsICgiQmxhY2tCZXJyeVVzZVdlYktpdENhY2hlIikpOworREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIEJsYWNrQmVycnlVc2VyQWdlbnRTdHJpbmcsICgiQmxhY2tCZXJy
eVVzZXJBZ2VudFN0cmluZyIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBCbGFja0Jl
cnJ5VXNlclNjYWxhYmxlRW5hYmxlZCwgKCJCbGFja0JlcnJ5VXNlclNjYWxhYmxlRW5hYmxlZCIp
KTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBCbGFja0JlcnJ5Vmlld3BvcnRXaWR0aCwg
KCJCbGFja0JlcnJ5Vmlld3BvcnRXaWR0aCIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5n
LCBCbGFja0JlcnJ5Wm9vbVRvRml0T25Mb2FkRW5hYmxlZCwgKCJCbGFja0JlcnJ5Wm9vbVRvRml0
T25Mb2FkRW5hYmxlZCIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBXZWJLaXREYXRh
YmFzZVBhdGgsICgiV2ViS2l0RGF0YWJhc2VQYXRoIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChT
dHJpbmcsIFdlYktpdERhdGFiYXNlc0VuYWJsZWQsICgiV2ViS2l0RGF0YWJhc2VzRW5hYmxlZCIp
KTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBXZWJLaXREZWZhdWx0Rml4ZWRGb250U2l6
ZSwgKCJXZWJLaXREZWZhdWx0Rml4ZWRGb250U2l6ZSIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBXZWJLaXREZWZhdWx0Rm9udFNpemUsICgiV2ViS2l0RGVmYXVsdEZvbnRTaXplIikp
OworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdERlZmF1bHRUZXh0RW5jb2RpbmdO
YW1lLCAoIldlYktpdERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lIikpOworREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIFdlYktpdERvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCwgKCJXZWJL
aXREb3dubG9hZGFibGVCaW5hcnlGb250c0VuYWJsZWQiKSk7CitERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgV2ViS2l0Rmlyc3RTY2hlZHVsZWRMYXlvdXREZWxheSwgKCJXZWJLaXRGaXJzdFNj
aGVkdWxlZExheW91dERlbGF5IikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktp
dEZpeGVkRm9udEZhbWlseSwgKCJXZWJLaXRGaXhlZEZvbnRGYW1pbHkiKSk7CitERUZJTkVfU1RB
VElDX0xPQ0FMKFN0cmluZywgV2ViS2l0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZCwgKCJXZWJLaXRG
cmFtZUZsYXR0ZW5pbmdFbmFibGVkIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdl
YktpdEdlb2xvY2F0aW9uRW5hYmxlZCwgKCJXZWJLaXRHZW9sb2NhdGlvbkVuYWJsZWQiKSk7CitE
RUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgV2ViS2l0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dz
QXV0b21hdGljYWxseUVuYWJsZWQsICgiV2ViS2l0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0
b21hdGljYWxseUVuYWJsZWQiKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgV2ViS2l0
SmF2YVNjcmlwdEVuYWJsZWQsICgiV2ViS2l0SmF2YVNjcmlwdEVuYWJsZWQiKSk7CitERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgV2ViS2l0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5LCAoIldl
YktpdExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCBXZWJLaXRMb2NhbFN0b3JhZ2VFbmFibGVkLCAoIldlYktpdExvY2FsU3RvcmFnZUVuYWJs
ZWQiKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgV2ViS2l0TG9jYWxTdG9yYWdlUGF0
aCwgKCJXZWJLaXRMb2NhbFN0b3JhZ2VQYXRoIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJp
bmcsIFdlYktpdExvY2FsU3RvcmFnZVF1b3RhLCAoIldlYktpdExvY2FsU3RvcmFnZVF1b3RhIikp
OworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdE1heGltdW1QYWdlc0luQ2FjaGUs
ICgiV2ViS2l0TWF4aW11bVBhZ2VzSW5DYWNoZSIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3Ry
aW5nLCBXZWJLaXRNaW5pbXVtRm9udFNpemUsICgiV2ViS2l0TWluaW11bUZvbnRTaXplIikpOwor
REVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNh
Y2hlRW5hYmxlZCwgKCJXZWJLaXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQiKSk7
CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgV2ViS2l0T2ZmbGluZVdlYkFwcGxpY2F0aW9u
Q2FjaGVQYXRoLCAoIldlYktpdE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlUGF0aCIpKTsKK0RF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBXZWJLaXRQYWdlR3JvdXBOYW1lLCAoIldlYktpdFBh
Z2VHcm91cE5hbWUiKSk7CitERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgV2ViS2l0UGx1Z2lu
c0VuYWJsZWQsICgiV2ViS2l0UGx1Z2luc0VuYWJsZWQiKSk7CitERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgV2ViS2l0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCwgKCJXZWJLaXRQcml2YXRlQnJv
d3NpbmdFbmFibGVkIikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdFNhbnNT
ZXJpZmZGb250RmFtaWx5LCAoIldlYktpdFNhbnNTZXJpZmZGb250RmFtaWx5IikpOworREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdFNlcmlmZkZvbnRGYW1pbHksICgiV2ViS2l0U2Vy
aWZmRm9udEZhbWlseSIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBXZWJLaXRTdGFu
ZGFyZEZvbnRGYW1pbHksICgiV2ViS2l0U3RhbmRhcmRGb250RmFtaWx5IikpOworREVGSU5FX1NU
QVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdFVzZXJTdHlsZVNoZWV0LCAoIldlYktpdFVzZXJTdHls
ZVNoZWV0IikpOworREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIFdlYktpdFVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24sICgiV2ViS2l0VXNlclN0eWxlU2hlZXRMb2NhdGlvbiIpKTsKK0RFRklORV9T
VEFUSUNfTE9DQUwoU3RyaW5nLCBXZWJLaXRXZWJTb2NrZXRzRW5hYmxlZCwgKCJXZWJLaXRXZWJT
b2NrZXRzRW5hYmxlZCIpKTsKK0RFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBXZWJLaXRYU1NB
dWRpdG9yRW5hYmxlZCwgKCJXZWJLaXRYU1NBdWRpdG9yRW5hYmxlZCIpKTsKK0RFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCBTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQsICgiU3BhdGlhbE5hdmln
YXRpb25FbmFibGVkIikpOworCisvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIG1vdmluZyBh
bGwgdGhlIG1pbWUgdHlwZSBjb2RlIGludG8gaXRzIG93biBvYmplY3QuCisKK3R5cGVkZWYgSGFz
aE1hcDxTdHJpbmcsIFdlYlN0cmluZz4gTUlNRVR5cGVBc3NvY2lhdGlvbk1hcDsKKworc3RhdGlj
IGNvbnN0IE1JTUVUeXBlQXNzb2NpYXRpb25NYXAmIG1pbWVUeXBlQXNzb2NpYXRpb25NYXAoKQor
eworICAgIHN0YXRpYyBNSU1FVHlwZUFzc29jaWF0aW9uTWFwKiBtaW1lVHlwZU1hcCA9IDA7Cisg
ICAgaWYgKG1pbWVUeXBlTWFwKQorICAgICAgICByZXR1cm4gKm1pbWVUeXBlTWFwOworCisgICAg
bWltZVR5cGVNYXAgPSBuZXcgTUlNRVR5cGVBc3NvY2lhdGlvbk1hcDsKKyAgICBtaW1lVHlwZU1h
cC0+YWRkKCJpbWFnZS94LW1zLWJtcCIsICJpbWFnZS9ibXAiKTsKKyAgICBtaW1lVHlwZU1hcC0+
YWRkKCJpbWFnZS94LXdpbmRvd3MtYm1wIiwgImltYWdlL2JtcCIpOworICAgIG1pbWVUeXBlTWFw
LT5hZGQoImltYWdlL3gtYm1wIiwgImltYWdlL2JtcCIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQo
ImltYWdlL3gtYml0bWFwIiwgImltYWdlL2JtcCIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImlt
YWdlL3gtbXMtYml0bWFwIiwgImltYWdlL2JtcCIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImlt
YWdlL2pwZyIsICJpbWFnZS9qcGVnIik7CisgICAgbWltZVR5cGVNYXAtPmFkZCgiaW1hZ2UvcGpw
ZWciLCAiaW1hZ2UvanBlZyIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImltYWdlL3gtcG5nIiwg
ImltYWdlL3BuZyIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImltYWdlL3ZuZC5yaW0ucG5nIiwg
ImltYWdlL3BuZyIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImltYWdlL2ljbyIsICJpbWFnZS92
bmQubWljcm9zb2Z0Lmljb24iKTsKKyAgICBtaW1lVHlwZU1hcC0+YWRkKCJpbWFnZS9pY29uIiwg
ImltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbiIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoInRleHQv
aWNvIiwgImltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbiIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQo
ImFwcGxpY2F0aW9uL2ljbyIsICJpbWFnZS92bmQubWljcm9zb2Z0Lmljb24iKTsKKyAgICBtaW1l
VHlwZU1hcC0+YWRkKCJpbWFnZS94LWljb24iLCAiaW1hZ2Uvdm5kLm1pY3Jvc29mdC5pY29uIik7
CisgICAgbWltZVR5cGVNYXAtPmFkZCgiYXVkaW8vdm5kLnFjZWxwIiwgImF1ZGlvL3FjZWxwIik7
CisgICAgbWltZVR5cGVNYXAtPmFkZCgiYXVkaW8vcWNwIiwgImF1ZGlvL3FjZWxwIik7CisgICAg
bWltZVR5cGVNYXAtPmFkZCgiYXVkaW8vdm5kLnFjcCIsICJhdWRpby9xY2VscCIpOworICAgIG1p
bWVUeXBlTWFwLT5hZGQoImF1ZGlvL3dhdiIsICJhdWRpby94LXdhdiIpOworICAgIG1pbWVUeXBl
TWFwLT5hZGQoImF1ZGlvL21pZCIsICJhdWRpby9taWRpIik7CisgICAgbWltZVR5cGVNYXAtPmFk
ZCgiYXVkaW8vc3AtbWlkaSIsICJhdWRpby9taWRpIik7CisgICAgbWltZVR5cGVNYXAtPmFkZCgi
YXVkaW8veC1taWQiLCAiYXVkaW8vbWlkaSIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1ZGlv
L3gtbWlkaSIsICJhdWRpby9taWRpIik7CisgICAgbWltZVR5cGVNYXAtPmFkZCgiYXVkaW8veC1t
cGVnIiwgImF1ZGlvL21wZWciKTsKKyAgICBtaW1lVHlwZU1hcC0+YWRkKCJhdWRpby9tcDMiLCAi
YXVkaW8vbXBlZyIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1ZGlvL3gtbXAzIiwgImF1ZGlv
L21wZWciKTsKKyAgICBtaW1lVHlwZU1hcC0+YWRkKCJhdWRpby9tcGVnMyIsICJhdWRpby9tcGVn
Iik7CisgICAgbWltZVR5cGVNYXAtPmFkZCgiYXVkaW8veC1tcGVnMyIsICJhdWRpby9tcGVnIik7
CisgICAgbWltZVR5cGVNYXAtPmFkZCgiYXVkaW8vbXBnMyIsICJhdWRpby9tcGVnIik7CisgICAg
bWltZVR5cGVNYXAtPmFkZCgiYXVkaW8vbXBnIiwgImF1ZGlvL21wZWciKTsKKyAgICBtaW1lVHlw
ZU1hcC0+YWRkKCJhdWRpby94LW1wZyIsICJhdWRpby9tcGVnIik7CisgICAgbWltZVR5cGVNYXAt
PmFkZCgiYXVkaW8vbTRhIiwgImF1ZGlvL21wNCIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1
ZGlvL3gtbTRhIiwgImF1ZGlvL21wNCIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1ZGlvL3gt
bXA0IiwgImF1ZGlvL21wNCIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1ZGlvL3gtYWFjIiwg
ImF1ZGlvL2FhYyIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1ZGlvL3gtYW1yIiwgImF1ZGlv
L2FtciIpOworICAgIG1pbWVUeXBlTWFwLT5hZGQoImF1ZGlvL21wZWd1cmwiLCAiYXVkaW8veC1t
cGVndXJsIik7CisgICAgbWltZVR5cGVNYXAtPmFkZCgidmlkZW8vM2dwIiwgInZpZGVvLzNncHAi
KTsKKyAgICBtaW1lVHlwZU1hcC0+YWRkKCJ2aWRlby9hdmkiLCAidmlkZW8veC1tc3ZpZGVvIik7
CisgICAgbWltZVR5cGVNYXAtPmFkZCgidmlkZW8veC1tNHYiLCAidmlkZW8vbXA0Iik7CisgICAg
bWltZVR5cGVNYXAtPmFkZCgidmlkZW8veC1xdWlja3RpbWUiLCAidmlkZW8vcXVpY2t0aW1lIik7
CisgICAgbWltZVR5cGVNYXAtPmFkZCgiYXBwbGljYXRpb24vamF2YSIsICJhcHBsaWNhdGlvbi9q
YXZhLWFyY2hpdmUiKTsKKyAgICBtaW1lVHlwZU1hcC0+YWRkKCJhcHBsaWNhdGlvbi94LWphdmEt
YXJjaGl2ZSIsICJhcHBsaWNhdGlvbi9qYXZhLWFyY2hpdmUiKTsKKyAgICBtaW1lVHlwZU1hcC0+
YWRkKCJhcHBsaWNhdGlvbi94LXppcC1jb21wcmVzc2VkIiwgImFwcGxpY2F0aW9uL3ppcCIpOwor
CisgICAgcmV0dXJuICptaW1lVHlwZU1hcDsKK30KKworc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiog
c19zdXBwb3J0ZWRPYmplY3RNSU1FVHlwZXM7CisKK1dlYlNldHRpbmdzUHJpdmF0ZTo6V2ViU2V0
dGluZ3NQcml2YXRlKCkKKyAgICA6IGltcGwoMCkKKyAgICAsIGRlbGVnYXRlKDApCisgICAgLCBz
ZW5kZXIoMCkKKyAgICAsIGNvcHlPbldyaXRlKHRydWUpCit7Cit9CisKK1dlYlNldHRpbmdzOjpX
ZWJTZXR0aW5ncygpCit7CisgICAgbV9wcml2YXRlID0gbmV3IFdlYlNldHRpbmdzUHJpdmF0ZSgp
OworfQorCitXZWJTZXR0aW5nczo6V2ViU2V0dGluZ3MoY29uc3QgV2ViU2V0dGluZ3MmIG90aGVy
U2V0dGluZ3MpCit7CisgICAgbV9wcml2YXRlLT5pbXBsID0gb3RoZXJTZXR0aW5ncy5tX3ByaXZh
dGUtPmltcGw7Cit9CisKK1dlYlNldHRpbmdzOjp+V2ViU2V0dGluZ3MoKQoreworICAgIGlmICgh
bV9wcml2YXRlLT5jb3B5T25Xcml0ZSkgeworICAgICAgICBkZWxldGUgbV9wcml2YXRlLT5pbXBs
OworICAgICAgICBtX3ByaXZhdGUtPmltcGwgPSAwOworICAgIH0KKyAgICBkZWxldGUgbV9wcml2
YXRlOworICAgIG1fcHJpdmF0ZSA9IDA7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldERlbGVn
YXRlKFdlYlNldHRpbmdzRGVsZWdhdGUqIGRlbGVnYXRlKQoreworICAgIG1fcHJpdmF0ZS0+ZGVs
ZWdhdGUgPSBkZWxlZ2F0ZTsKKyAgICBtX3ByaXZhdGUtPnNlbmRlciA9IHRoaXM7Cit9CisKK1dl
YlNldHRpbmdzRGVsZWdhdGUqIFdlYlNldHRpbmdzOjpkZWxlZ2F0ZSgpCit7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+ZGVsZWdhdGU7Cit9CisKK1dlYlNldHRpbmdzKiBXZWJTZXR0aW5nczo6Y3Jl
YXRlRnJvbVN0YW5kYXJkU2V0dGluZ3MoV2ViU2V0dGluZ3NEZWxlZ2F0ZSogZGVsZWdhdGUpCit7
CisgICAgV2ViU2V0dGluZ3MqIHNldHRpbmdzID0gbmV3IFdlYlNldHRpbmdzKCk7CisgICAgc2V0
dGluZ3MtPm1fcHJpdmF0ZS0+aW1wbCA9IHN0YW5kYXJkU2V0dGluZ3MoKS0+bV9wcml2YXRlLT5p
bXBsOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPmRlbGVnYXRlID0gZGVsZWdhdGU7CisgICAg
c2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2VuZGVyID0gc2V0dGluZ3M7CisgICAgaWYgKGRlbGVnYXRl
KQorICAgICAgICBkZWxlZ2F0ZS0+ZGlkQ2hhbmdlU2V0dGluZ3Moc2V0dGluZ3MpOworCisgICAg
cmV0dXJuIHNldHRpbmdzOworfQorCitXZWJTZXR0aW5ncyogV2ViU2V0dGluZ3M6OnN0YW5kYXJk
U2V0dGluZ3MoKQoreworICAgIHN0YXRpYyBXZWJTZXR0aW5ncyAqc2V0dGluZ3MgPSAwOworICAg
IGlmIChzZXR0aW5ncykKKyAgICAgICAgcmV0dXJuIHNldHRpbmdzOworCisgICAgc2V0dGluZ3Mg
PSBuZXcgV2ViU2V0dGluZ3M7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+aW1wbCA9IG5ldyBX
ZWJTZXR0aW5nc1ByaXZhdGU6OldlYlNldHRpbmdzUHJpdmF0ZUltcGwoKTsKKyAgICBzZXR0aW5n
cy0+bV9wcml2YXRlLT5jb3B5T25Xcml0ZSA9IGZhbHNlOworICAgIHNldHRpbmdzLT5tX3ByaXZh
dGUtPnNldFVuc2lnbmVkKEJsYWNrQmVycnlCYWNrZ3JvdW5kQ29sb3IsIFdlYkNvcmU6OkNvbG9y
Ojp3aGl0ZSk7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihCbGFja0JlcnJ5
Q29va2llc0VuYWJsZWQsIHRydWUpOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldERvdWJs
ZShCbGFja0JlcnJ5SW5pdGlhbFNjYWxlLCAtMSk7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+
c2V0VW5zaWduZWQoQmxhY2tCZXJyeU1heFBsdWdpbkluc3RhbmNlcywgMSk7CisgICAgc2V0dGlu
Z3MtPm1fcHJpdmF0ZS0+c2V0VW5zaWduZWQoQmxhY2tCZXJyeU92ZXJab29tQ29sb3IsIFdlYkNv
cmU6OkNvbG9yOjp3aGl0ZSk7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihC
bGFja0JlcnJ5U2Nyb2xsYmFyc0VuYWJsZWQsIHRydWUpOworCisgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBkZXRlY3Qgd2hldGhlciB3ZSBhcmUgZW1iZWRkZWQgaW4gYSBicm93c2VyIG9yIGFuIGVt
YWlsIGNsaWVudCBhbmQgZGVmYXVsdCB0byBUZXh0UmVmbG93RW5hYmxlZE9ubHlGb3JCbG9ja1pv
b20gYW5kIFRleHRSZWZsb3dFbmFibGVkLCByZXNwZWN0aXZlbHkuCisgICAgc2V0dGluZ3MtPm1f
cHJpdmF0ZS0+c2V0VGV4dFJlZmxvd01vZGUoQmxhY2tCZXJyeVRleHRSZWZsb3dNb2RlLCBUZXh0
UmVmbG93RGlzYWJsZWQpOworCisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihC
bGFja0JlcnJ5VXNlclNjYWxhYmxlRW5hYmxlZCwgdHJ1ZSk7CisgICAgc2V0dGluZ3MtPm1fcHJp
dmF0ZS0+c2V0Qm9vbGVhbihCbGFja0JlcnJ5VXNlV2ViS2l0Q2FjaGUsIHRydWUpOworICAgIHNl
dHRpbmdzLT5tX3ByaXZhdGUtPnNldEJvb2xlYW4oQmxhY2tCZXJyeVpvb21Ub0ZpdE9uTG9hZEVu
YWJsZWQsIHRydWUpOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldEludGVnZXIoV2ViS2l0
RGVmYXVsdEZvbnRTaXplLCAxNik7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0SW50ZWdl
cihXZWJLaXREZWZhdWx0Rml4ZWRGb250U2l6ZSwgMTMpOworICAgIHNldHRpbmdzLT5tX3ByaXZh
dGUtPnNldEludGVnZXIoV2ViS2l0TWluaW11bUZvbnRTaXplLCA4KTsKKyAgICBzZXR0aW5ncy0+
bV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUsICJpc28t
ODg1OS0xIik7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0SW50ZWdlcihXZWJLaXRGaXJz
dFNjaGVkdWxlZExheW91dERlbGF5LCAyNTApOyAvLyBNYXRjaCBEb2N1bWVudDo6Y0xheW91dFNj
aGVkdWxlVGhyZXNob2xkLgorICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldEJvb2xlYW4oV2Vi
S2l0SmF2YVNjcmlwdEVuYWJsZWQsIHRydWUpOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNl
dEJvb2xlYW4oV2ViS2l0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5LCB0cnVlKTsKKyAgICBzZXR0
aW5ncy0+bV9wcml2YXRlLT5zZXRCb29sZWFuKFdlYktpdERvd25sb2FkYWJsZUJpbmFyeUZvbnRz
RW5hYmxlZCwgdHJ1ZSk7CisgICAgc2V0dGluZ3MtPm1fcHJpdmF0ZS0+c2V0VW5zaWduZWRMb25n
TG9uZyhXZWJLaXRMb2NhbFN0b3JhZ2VRdW90YSwgNSAqIDEwMjQgKiAxMDI0KTsKKyAgICBzZXR0
aW5ncy0+bV9wcml2YXRlLT5zZXRJbnRlZ2VyKFdlYktpdE1heGltdW1QYWdlc0luQ2FjaGUsIDAp
OworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldEJvb2xlYW4oV2ViS2l0V2ViU29ja2V0c0Vu
YWJsZWQsIHRydWUpOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUtPnNldFN0cmluZyhXZWJLaXRG
aXhlZEZvbnRGYW1pbHksICJDb3VyaWVyIE5ldyIpOworICAgIHNldHRpbmdzLT5tX3ByaXZhdGUt
PnNldFN0cmluZyhXZWJLaXRTYW5zU2VyaWZmRm9udEZhbWlseSwgIkFyaWFsIik7CisgICAgc2V0
dGluZ3MtPm1fcHJpdmF0ZS0+c2V0U3RyaW5nKFdlYktpdFNlcmlmZkZvbnRGYW1pbHksICJUaW1l
cyBOZXcgUm9tYW4iKTsKKyAgICBzZXR0aW5ncy0+bV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0
U3RhbmRhcmRGb250RmFtaWx5LCAiVGltZXMgTmV3IFJvbWFuIik7CisgICAgc2V0dGluZ3MtPm1f
cHJpdmF0ZS0+c2V0Qm9vbGVhbihTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQsIGZhbHNlKTsKKwor
ICAgIHJldHVybiBzZXR0aW5nczsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6YWRkU3VwcG9ydGVk
T2JqZWN0UGx1Z2luTUlNRVR5cGUoY29uc3QgY2hhciogdHlwZSkKK3sKKyAgICBpZiAoIXNfc3Vw
cG9ydGVkT2JqZWN0TUlNRVR5cGVzKQorICAgICAgICBzX3N1cHBvcnRlZE9iamVjdE1JTUVUeXBl
cyA9IG5ldyBIYXNoU2V0PFN0cmluZz47CisKKyAgICBzX3N1cHBvcnRlZE9iamVjdE1JTUVUeXBl
cy0+YWRkKHR5cGUpOworfQorCitib29sIFdlYlNldHRpbmdzOjppc1N1cHBvcnRlZE9iamVjdE1J
TUVUeXBlKGNvbnN0IFdlYlN0cmluZyYgbWltZVR5cGUpCit7CisgICAgaWYgKG1pbWVUeXBlLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFzX3N1cHBvcnRlZE9i
amVjdE1JTUVUeXBlcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNfc3Vw
cG9ydGVkT2JqZWN0TUlNRVR5cGVzLT5jb250YWlucyhnZXROb3JtYWxpemVkTUlNRVR5cGUobWlt
ZVR5cGUpKTsKK30KKworV2ViU3RyaW5nIFdlYlNldHRpbmdzOjpnZXROb3JtYWxpemVkTUlNRVR5
cGUoY29uc3QgV2ViU3RyaW5nJiB0eXBlKQoreworICAgIE1JTUVUeXBlQXNzb2NpYXRpb25NYXA6
OmNvbnN0X2l0ZXJhdG9yIGkgPSBtaW1lVHlwZUFzc29jaWF0aW9uTWFwKCkuZmluZCh0eXBlKTsK
KworICAgIHJldHVybiBpID09IG1pbWVUeXBlQXNzb2NpYXRpb25NYXAoKS5lbmQoKSA/IHR5cGUg
OiBpLT5zZWNvbmQ7Cit9CisKK2Jvb2wgV2ViU2V0dGluZ3M6Onhzc0F1ZGl0b3JFbmFibGVkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRCb29sZWFuKFdlYktpdFhTU0F1ZGl0
b3JFbmFibGVkKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0WFNTQXVkaXRvckVuYWJsZWQo
Ym9vbCBlbmFibGVkKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnNldEJvb2xlYW4oV2ViS2l0
WFNTQXVkaXRvckVuYWJsZWQsIGVuYWJsZWQpOworfQorCitib29sIFdlYlNldHRpbmdzOjpsb2Fk
c0ltYWdlc0F1dG9tYXRpY2FsbHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdl
dEJvb2xlYW4oV2ViS2l0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KTsKK30KKwordm9pZCBXZWJT
ZXR0aW5nczo6c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KGJvb2wgZW5hYmxlZCkKK3sKKyAg
ICBtX3ByaXZhdGUtPnNldEJvb2xlYW4oV2ViS2l0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5LCBl
bmFibGVkKTsKK30KKworYm9vbCBXZWJTZXR0aW5nczo6ZG93bmxvYWRhYmxlQmluYXJ5Rm9udHNF
bmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRCb29sZWFuKFdlYktp
dERvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZCk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6
OnNldERvd25sb2FkYWJsZUJpbmFyeUZvbnRzRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihXZWJLaXREb3dubG9hZGFibGVCaW5hcnlGb250
c0VuYWJsZWQsIGVuYWJsZWQpOworfQorCitib29sIFdlYlNldHRpbmdzOjpzaG91bGREcmF3Qm9y
ZGVyV2hpbGVMb2FkaW5nSW1hZ2VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5n
ZXRCb29sZWFuKEJsYWNrQmVycnlEcmF3Qm9yZGVyV2hpbGVMb2FkaW5nSW1hZ2VzKTsKK30KKwor
dm9pZCBXZWJTZXR0aW5nczo6c2V0U2hvdWxkRHJhd0JvcmRlcldoaWxlTG9hZGluZ0ltYWdlcyhi
b29sIGVuYWJsZWQpCit7CisgICAgbV9wcml2YXRlLT5zZXRCb29sZWFuKEJsYWNrQmVycnlEcmF3
Qm9yZGVyV2hpbGVMb2FkaW5nSW1hZ2VzLCBlbmFibGVkKTsKK30KKworYm9vbCBXZWJTZXR0aW5n
czo6aXNKYXZhU2NyaXB0RW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
Z2V0Qm9vbGVhbihXZWJLaXRKYXZhU2NyaXB0RW5hYmxlZCk7Cit9CisKK3ZvaWQgV2ViU2V0dGlu
Z3M6OnNldEphdmFTY3JpcHRFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX3ByaXZhdGUt
PnNldEJvb2xlYW4oV2ViS2l0SmF2YVNjcmlwdEVuYWJsZWQsIGVuYWJsZWQpOworfQorCitib29s
IFdlYlNldHRpbmdzOjppc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUtPmdldEJvb2xlYW4oV2ViS2l0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7
Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBl
bmFibGVkKQoreworICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihXZWJLaXRQcml2YXRlQnJvd3Np
bmdFbmFibGVkLCBlbmFibGVkKTsKK30KKworaW50IFdlYlNldHRpbmdzOjpkZWZhdWx0Rml4ZWRG
b250U2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0SW50ZWdlcihXZWJL
aXREZWZhdWx0Rml4ZWRGb250U2l6ZSk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldERlZmF1
bHRGaXhlZEZvbnRTaXplKGludCBkZWZhdWx0Rml4ZWRGb250U2l6ZSkKK3sKKyAgICBtX3ByaXZh
dGUtPnNldEludGVnZXIoV2ViS2l0RGVmYXVsdEZpeGVkRm9udFNpemUsIGRlZmF1bHRGaXhlZEZv
bnRTaXplKTsKK30KKworaW50IFdlYlNldHRpbmdzOjpkZWZhdWx0Rm9udFNpemUoKSBjb25zdAor
eworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEludGVnZXIoV2ViS2l0RGVmYXVsdEZvbnRTaXpl
KTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0RGVmYXVsdEZvbnRTaXplKGludCBkZWZhdWx0
Rm9udFNpemUpCit7CisgICAgbV9wcml2YXRlLT5zZXRJbnRlZ2VyKFdlYktpdERlZmF1bHRGb250
U2l6ZSwgZGVmYXVsdEZvbnRTaXplKTsKK30KKworaW50IFdlYlNldHRpbmdzOjptaW5pbXVtRm9u
dFNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEludGVnZXIoV2ViS2l0
TWluaW11bUZvbnRTaXplKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0TWluaW11bUZvbnRT
aXplKGludCBtaW5pbXVtRm9udFNpemUpCit7CisgICAgbV9wcml2YXRlLT5zZXRJbnRlZ2VyKFdl
YktpdE1pbmltdW1Gb250U2l6ZSwgbWluaW11bUZvbnRTaXplKTsKK30KKworV2ViU3RyaW5nIFdl
YlNldHRpbmdzOjpzZXJpZkZvbnRGYW1pbHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZh
dGUtPmdldFN0cmluZyhXZWJLaXRTZXJpZmZGb250RmFtaWx5KTsKK30KKwordm9pZCBXZWJTZXR0
aW5nczo6c2V0U2VyaWZGb250RmFtaWx5KGNvbnN0IGNoYXIqIHNlcmlmZkZvbnRGYW1pbHkpCit7
CisgICAgbV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0U2VyaWZmRm9udEZhbWlseSwgc2VyaWZm
Rm9udEZhbWlseSk7Cit9CisKK1dlYlN0cmluZyBXZWJTZXR0aW5nczo6Zml4ZWRGb250RmFtaWx5
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRTdHJpbmcoV2ViS2l0Rml4ZWRG
b250RmFtaWx5KTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0Rml4ZWRGb250RmFtaWx5KGNv
bnN0IGNoYXIqIGZpeGVkRm9udEZhbWlseSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFN0cmluZyhX
ZWJLaXRGaXhlZEZvbnRGYW1pbHksIGZpeGVkRm9udEZhbWlseSk7Cit9CisKK1dlYlN0cmluZyBX
ZWJTZXR0aW5nczo6c2Fuc1NlcmlmRm9udEZhbWlseSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+Z2V0U3RyaW5nKFdlYktpdFNhbnNTZXJpZmZGb250RmFtaWx5KTsKK30KKwordm9p
ZCBXZWJTZXR0aW5nczo6c2V0U2Fuc1NlcmlmRm9udEZhbWlseShjb25zdCBjaGFyKiBzYW5zU2Vy
aWZmRm9udEZhbWlseSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFN0cmluZyhXZWJLaXRTYW5zU2Vy
aWZmRm9udEZhbWlseSwgc2Fuc1NlcmlmZkZvbnRGYW1pbHkpOworfQorCitXZWJTdHJpbmcgV2Vi
U2V0dGluZ3M6OnN0YW5kYXJkRm9udEZhbWlseSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+Z2V0U3RyaW5nKFdlYktpdFN0YW5kYXJkRm9udEZhbWlseSk7Cit9CisKK3ZvaWQgV2Vi
U2V0dGluZ3M6OnNldFN0YW5kYXJkRm9udEZhbWlseShjb25zdCBjaGFyKiBzdGFuZGFyZEZvbnRG
YW1pbHkpCit7CisgICAgbV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0U3RhbmRhcmRGb250RmFt
aWx5LCBzdGFuZGFyZEZvbnRGYW1pbHkpOworfQorCitXZWJTdHJpbmcgV2ViU2V0dGluZ3M6OnVz
ZXJBZ2VudFN0cmluZygpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IElzIHRoaXMgdGhlIGJlc3Qg
cGxhY2UgZm9yIHRoaXMgYXNzZXJ0aW9uLiBXaHkgY2FuJ3Qgd2UganVzdCByZXR1cm4gYW4gZW1w
dHkgc3RyaW5nCisgICAgLy8gYW5kIGxldCB0aGUgY2FsbGVyIGRlY2lkZSBob3cgdG8gaGFuZGxl
IGl0PworCisgICAgLy8gVGhlIGRlZmF1bHQgdXNlciBhZ2VudCBzdHJpbmcgaXMgZW1wdHkuIFdl
IHJlbHkgdXBvbiB0aGUgY2xpZW50IHRvIHNldCB0aGlzIGZvciB1cy4KKyAgICAvLyBXZSBjaGVj
ayB0aGlzIGJ5IGFzc2VydGluZyBpZiB0aGUgY2xpZW50IGhhcyBub3QgZG9uZSBzbyBiZWZvcmUg
dGhlIGZpcnN0IHRpbWUgaXQgaXMgbmVlZGVkLgorICAgIFN0cmluZyB1c2VyQWdlbnRTdHJpbmcg
PSBtX3ByaXZhdGUtPmdldFN0cmluZyhCbGFja0JlcnJ5VXNlckFnZW50U3RyaW5nKTsKKyAgICBB
U1NFUlQoIXVzZXJBZ2VudFN0cmluZy5pc0VtcHR5KCkpOworICAgIHJldHVybiB1c2VyQWdlbnRT
dHJpbmc7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldFVzZXJBZ2VudFN0cmluZyhjb25zdCBj
aGFyKiB1c2VyQWdlbnRTdHJpbmcpCit7CisgICAgbV9wcml2YXRlLT5zZXRTdHJpbmcoQmxhY2tC
ZXJyeVVzZXJBZ2VudFN0cmluZywgdXNlckFnZW50U3RyaW5nKTsKK30KKworV2ViU3RyaW5nIFdl
YlNldHRpbmdzOjpkZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+Z2V0U3RyaW5nKFdlYktpdERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKTsKK30K
Kwordm9pZCBXZWJTZXR0aW5nczo6c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoY29uc3QgY2hh
ciogZGVmYXVsdFRleHRFbmNvZGluZ05hbWUpCit7CisgICAgbV9wcml2YXRlLT5zZXRTdHJpbmco
V2ViS2l0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUsIGRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKTsK
K30KKworYm9vbCBXZWJTZXR0aW5nczo6aXNab29tVG9GaXRPbkxvYWQoKSBjb25zdAoreworICAg
IHJldHVybiBtX3ByaXZhdGUtPmdldEJvb2xlYW4oQmxhY2tCZXJyeVpvb21Ub0ZpdE9uTG9hZEVu
YWJsZWQpOworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRab29tVG9GaXRPbkxvYWQoYm9vbCBl
bmFibGVkKQoreworICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihCbGFja0JlcnJ5Wm9vbVRvRml0
T25Mb2FkRW5hYmxlZCwgZW5hYmxlZCk7Cit9CisKK1dlYlNldHRpbmdzOjpUZXh0UmVmbG93TW9k
ZSBXZWJTZXR0aW5nczo6dGV4dFJlZmxvd01vZGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3By
aXZhdGUtPmdldFRleHRSZWZsb3dNb2RlKEJsYWNrQmVycnlUZXh0UmVmbG93TW9kZSk7Cit9CisK
K3ZvaWQgV2ViU2V0dGluZ3M6OnNldFRleHRSZWZsb3dNb2RlKFRleHRSZWZsb3dNb2RlIHRleHRS
ZWZsb3dNb2RlKQoreworICAgIG1fcHJpdmF0ZS0+c2V0VGV4dFJlZmxvd01vZGUoQmxhY2tCZXJy
eVRleHRSZWZsb3dNb2RlLCB0ZXh0UmVmbG93TW9kZSk7Cit9CisKK2Jvb2wgV2ViU2V0dGluZ3M6
OmlzU2Nyb2xsYmFyc0VuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdl
dEJvb2xlYW4oQmxhY2tCZXJyeVNjcm9sbGJhcnNFbmFibGVkKTsKK30KKwordm9pZCBXZWJTZXR0
aW5nczo6c2V0U2Nyb2xsYmFyc0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1fcHJpdmF0
ZS0+c2V0Qm9vbGVhbihCbGFja0JlcnJ5U2Nyb2xsYmFyc0VuYWJsZWQsIGVuYWJsZWQpOworfQor
Citib29sIFdlYlNldHRpbmdzOjpjYW5KYXZhU2NyaXB0T3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRCb29sZWFuKFdlYktpdEphdmFT
Y3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHlFbmFibGVkKTsKK30KKwordm9pZCBXZWJT
ZXR0aW5nczo6c2V0SmF2YVNjcmlwdE9wZW5XaW5kb3dzQXV0b21hdGljYWxseShib29sIGVuYWJs
ZWQpCit7CisgICAgbV9wcml2YXRlLT5zZXRCb29sZWFuKFdlYktpdEphdmFTY3JpcHRDYW5PcGVu
V2luZG93c0F1dG9tYXRpY2FsbHlFbmFibGVkLCBlbmFibGVkKTsKK30KKworYm9vbCBXZWJTZXR0
aW5nczo6YXJlUGx1Z2luc0VuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUt
PmdldEJvb2xlYW4oV2ViS2l0UGx1Z2luc0VuYWJsZWQpOworfQorCit2b2lkIFdlYlNldHRpbmdz
OjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgbV9wcml2YXRlLT5zZXRC
b29sZWFuKFdlYktpdFBsdWdpbnNFbmFibGVkLCBlbmFibGVkKTsKK30KKworYm9vbCBXZWJTZXR0
aW5nczo6aXNHZW9sb2NhdGlvbkVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZh
dGUtPmdldEJvb2xlYW4oV2ViS2l0R2VvbG9jYXRpb25FbmFibGVkKTsKK30KKwordm9pZCBXZWJT
ZXR0aW5nczo6c2V0R2VvbG9jYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX3By
aXZhdGUtPnNldEJvb2xlYW4oV2ViS2l0R2VvbG9jYXRpb25FbmFibGVkLCBlbmFibGVkKTsKK30K
KworYm9vbCBXZWJTZXR0aW5nczo6ZG9lc0dldEZvY3VzTm9kZUNvbnRleHQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEJvb2xlYW4oQmxhY2tCZXJyeUdldEZvY3VzTm9kZUNv
bnRleHRFbmFibGVkKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0R2V0Rm9jdXNOb2RlQ29u
dGV4dChib29sIGVuYWJsZWQpCit7CisgICAgbV9wcml2YXRlLT5zZXRCb29sZWFuKEJsYWNrQmVy
cnlHZXRGb2N1c05vZGVDb250ZXh0RW5hYmxlZCwgZW5hYmxlZCk7Cit9CisKK1dlYlN0cmluZyBX
ZWJTZXR0aW5nczo6dXNlclN0eWxlU2hlZXRTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBt
X3ByaXZhdGUtPmdldFN0cmluZyhXZWJLaXRVc2VyU3R5bGVTaGVldCk7Cit9CisKK3ZvaWQgV2Vi
U2V0dGluZ3M6OnNldFVzZXJTdHlsZVNoZWV0U3RyaW5nKGNvbnN0IGNoYXIqIHVzZXJTdHlsZVNo
ZWV0U3RyaW5nKQoreworICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgc2VlbSBsaWtlIHRoZSBh
cHByb3ByaWF0ZSBwbGFjZSB0byBkbyB0aGlzIGFzIFdlYlNldHRpbmdzIHNob3VsZCBpZGVhbGx5
IGJlIGEgc3RhdGUgc3RvcmUuCisgICAgLy8gRWl0aGVyIHRoZSBjYWxsZXIgb2YgdGhpcyBmdW5j
dGlvbiBzaG91bGQgZG8gdGhpcyBjb252ZXJzaW9uIG9yIGNhbGxlciBvZiB0aGUgZ2V0dGVyIGNv
cnJlc3BvbmRpbmcgdG8gdGhpcyBmdW5jdGlvbgorICAgIC8vIHNob3VsZCBkbyB0aGlzIGNvbnZl
cnNpb24uCisKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKHVzZXJTdHlsZVNoZWV0U3RyaW5n
KTsKKyAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBkYXRhLmFwcGVuZCh1c2VyU3R5bGVTaGVl
dFN0cmluZywgbGVuZ3RoKTsKKworICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVkRGF0YTsKKyAgICBX
ZWJDb3JlOjpiYXNlNjRFbmNvZGUoZGF0YSwgZW5jb2RlZERhdGEpOworCisgICAgY29uc3QgY2hh
ciBwcmVmaXhbXSA9ICJkYXRhOnRleHQvY3NzO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LCI7CisgICAg
c2l6ZV90IHByZWZpeExlbmd0aCA9IHNpemVvZihwcmVmaXgpIC0gMTsKKyAgICBWZWN0b3I8Y2hh
cj4gZGF0YVVSTDsKKyAgICBkYXRhVVJMLnJlc2VydmVDYXBhY2l0eShwcmVmaXhMZW5ndGggKyBl
bmNvZGVkRGF0YS5zaXplKCkpOworICAgIGRhdGFVUkwuYXBwZW5kKHByZWZpeCwgcHJlZml4TGVu
Z3RoKTsKKyAgICBkYXRhVVJMLmFwcGVuZChlbmNvZGVkRGF0YSk7CisgICAgbV9wcml2YXRlLT5z
ZXRTdHJpbmcoV2ViS2l0VXNlclN0eWxlU2hlZXQsIFN0cmluZyhkYXRhVVJMLmRhdGEoKSwgZGF0
YVVSTC5zaXplKCkpKTsKK30KKworV2ViU3RyaW5nIFdlYlNldHRpbmdzOjp1c2VyU3R5bGVTaGVl
dExvY2F0aW9uKCkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRTdHJpbmcoV2ViS2l0VXNl
clN0eWxlU2hlZXRMb2NhdGlvbik7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldFVzZXJTdHls
ZVNoZWV0TG9jYXRpb24oY29uc3QgY2hhciogdXNlclN0eWxlU2hlZXRMb2NhdGlvbikKK3sKKyAg
ICBtX3ByaXZhdGUtPnNldFN0cmluZyhXZWJLaXRVc2VyU3R5bGVTaGVldExvY2F0aW9uLCB1c2Vy
U3R5bGVTaGVldExvY2F0aW9uKTsKK30KKworYm9vbCBXZWJTZXR0aW5nczo6YXJlTGlua3NIYW5k
bGVkRXh0ZXJuYWxseSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0Qm9vbGVh
bihCbGFja0JlcnJ5TGlua3NIYW5kbGVkRXh0ZXJuYWxseUVuYWJsZWQpOworfQorCit2b2lkIFdl
YlNldHRpbmdzOjpzZXRBcmVMaW5rc0hhbmRsZWRFeHRlcm5hbGx5KGJvb2wgZW5hYmxlZCkKK3sK
KyAgICBtX3ByaXZhdGUtPnNldEJvb2xlYW4oQmxhY2tCZXJyeUxpbmtzSGFuZGxlZEV4dGVybmFs
bHlFbmFibGVkLCBlbmFibGVkKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0QWxsb3dDcm9z
c1NpdGVSZXF1ZXN0cyhib29sIGFsbG93KQoreworICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihC
bGFja0JlcnJ5QWxsb3dDcm9zc1NpdGVSZXF1ZXN0cywgYWxsb3cpOworfQorCitib29sIFdlYlNl
dHRpbmdzOjphbGxvd0Nyb3NzU2l0ZVJlcXVlc3RzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLT5nZXRCb29sZWFuKEJsYWNrQmVycnlBbGxvd0Nyb3NzU2l0ZVJlcXVlc3RzKTsKK30K
KworYm9vbCBXZWJTZXR0aW5nczo6aXNVc2VyU2NhbGFibGUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3ByaXZhdGUtPmdldEJvb2xlYW4oQmxhY2tCZXJyeVVzZXJTY2FsYWJsZUVuYWJsZWQpOwor
fQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRVc2VyU2NhbGFibGUoYm9vbCBlbmFibGVkKQorewor
ICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihCbGFja0JlcnJ5VXNlclNjYWxhYmxlRW5hYmxlZCwg
ZW5hYmxlZCk7Cit9CisKK2ludCBXZWJTZXR0aW5nczo6dmlld3BvcnRXaWR0aCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0SW50ZWdlcihCbGFja0JlcnJ5Vmlld3BvcnRXaWR0
aCk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldFZpZXdwb3J0V2lkdGgoaW50IHdpZHRoKQor
eworICAgIG1fcHJpdmF0ZS0+c2V0SW50ZWdlcihCbGFja0JlcnJ5Vmlld3BvcnRXaWR0aCwgd2lk
dGgpOworfQorCitkb3VibGUgV2ViU2V0dGluZ3M6OmluaXRpYWxTY2FsZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0RG91YmxlKEJsYWNrQmVycnlJbml0aWFsU2NhbGUpOwor
fQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRJbml0aWFsU2NhbGUoZG91YmxlIGluaXRpYWxTY2Fs
ZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldERvdWJsZShCbGFja0JlcnJ5SW5pdGlhbFNjYWxlLCBp
bml0aWFsU2NhbGUpOworfQorCitpbnQgV2ViU2V0dGluZ3M6OmZpcnN0U2NoZWR1bGVkTGF5b3V0
RGVsYXkoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEludGVnZXIoV2ViS2l0
Rmlyc3RTY2hlZHVsZWRMYXlvdXREZWxheSk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldEZp
cnN0U2NoZWR1bGVkTGF5b3V0RGVsYXkoaW50IGRlbGF5KQoreworICAgIG1fcHJpdmF0ZS0+c2V0
SW50ZWdlcihXZWJLaXRGaXJzdFNjaGVkdWxlZExheW91dERlbGF5LCBkZWxheSk7Cit9CisKKy8v
IFdoZXRoZXIgdG8gaW5jbHVkZSBwYXR0ZXJuOiBpbiB0aGUgbGlzdCBvZiBzdHJpbmcgcGF0dGVy
bnMuCitib29sIFdlYlNldHRpbmdzOjpzaG91bGRIYW5kbGVQYXR0ZXJuVXJscygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0Qm9vbGVhbihCbGFja0JlcnJ5SGFuZGxlUGF0dGVy
blVSTHMpOworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRTaG91bGRIYW5kbGVQYXR0ZXJuVXJs
cyhib29sIGhhbmRsZVBhdHRlcm5VUkxzKQoreworICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihC
bGFja0JlcnJ5SGFuZGxlUGF0dGVyblVSTHMsIGhhbmRsZVBhdHRlcm5VUkxzKTsKK30KKworYm9v
bCBXZWJTZXR0aW5nczo6YXJlQ29va2llc0VuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBt
X3ByaXZhdGUtPmdldEJvb2xlYW4oQmxhY2tCZXJyeUNvb2tpZXNFbmFibGVkKTsKK30KKwordm9p
ZCBXZWJTZXR0aW5nczo6c2V0QXJlQ29va2llc0VuYWJsZWQoYm9vbCBlbmFibGUpCit7CisgICAg
bV9wcml2YXRlLT5zZXRCb29sZWFuKEJsYWNrQmVycnlDb29raWVzRW5hYmxlZCwgZW5hYmxlKTsK
K30KKworYm9vbCBXZWJTZXR0aW5nczo6aXNMb2NhbFN0b3JhZ2VFbmFibGVkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRCb29sZWFuKFdlYktpdExvY2FsU3RvcmFnZUVuYWJs
ZWQpOworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRJc0xvY2FsU3RvcmFnZUVuYWJsZWQoYm9v
bCBlbmFibGUpCit7CisgICAgbV9wcml2YXRlLT5zZXRCb29sZWFuKFdlYktpdExvY2FsU3RvcmFn
ZUVuYWJsZWQsIGVuYWJsZSk7Cit9CisKK2Jvb2wgV2ViU2V0dGluZ3M6OmlzRGF0YWJhc2VzRW5h
YmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0Qm9vbGVhbihXZWJLaXRE
YXRhYmFzZXNFbmFibGVkKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0SXNEYXRhYmFzZXNF
bmFibGVkKGJvb2wgZW5hYmxlKQoreworICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihXZWJLaXRE
YXRhYmFzZXNFbmFibGVkLCBlbmFibGUpOworfQorCitib29sIFdlYlNldHRpbmdzOjppc0FwcENh
Y2hlRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0Qm9vbGVhbihX
ZWJLaXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQpOworfQorCit2b2lkIFdlYlNl
dHRpbmdzOjpzZXRJc0FwcENhY2hlRW5hYmxlZChib29sIGVuYWJsZSkKK3sKKyAgICBtX3ByaXZh
dGUtPnNldEJvb2xlYW4oV2ViS2l0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkLCBl
bmFibGUpOworfQorCit1bnNpZ25lZCBsb25nIGxvbmcgV2ViU2V0dGluZ3M6OmxvY2FsU3RvcmFn
ZVF1b3RhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRVbnNpZ25lZExvbmdM
b25nKFdlYktpdExvY2FsU3RvcmFnZVF1b3RhKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0
TG9jYWxTdG9yYWdlUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQoreworICAgIG1fcHJp
dmF0ZS0+c2V0VW5zaWduZWRMb25nTG9uZyhXZWJLaXRMb2NhbFN0b3JhZ2VRdW90YSwgcXVvdGEp
OworfQorCitpbnQgV2ViU2V0dGluZ3M6Om1heGltdW1QYWdlc0luQ2FjaGUoKSBjb25zdAorewor
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYmUgY2FsbGluZyBpbnRvIFdlYkNvcmUgZnJvbSBo
ZXJlLiBUaGlzIGNsYXNzIHNob3VsZCBqdXN0IGJlIGEgc3RhdGUgc3RvcmUuCisgICAgcmV0dXJu
IFdlYkNvcmU6OnBhZ2VDYWNoZSgpLT5jYXBhY2l0eSgpOworfQorCit2b2lkIFdlYlNldHRpbmdz
OjpzZXRNYXhpbXVtUGFnZXNJbkNhY2hlKGludCBwYWdlcykKK3sKKyAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkbid0IGJlIGNhbGxpbmcgaW50byBXZWJDb3JlIGZyb20gaGVyZS4gVGhpcyBjbGFzcyBz
aG91bGQganVzdCBiZSBhIHN0YXRlIHN0b3JlLgorICAgIHVuc2lnbmVkIHJlYWxQYWdlcyA9IHN0
ZDo6bWF4KDAsIHBhZ2VzKTsKKyAgICBXZWJDb3JlOjpwYWdlQ2FjaGUoKS0+c2V0Q2FwYWNpdHko
cmVhbFBhZ2VzKTsKKyAgICBtX3ByaXZhdGUtPnNldFVuc2lnbmVkKFdlYktpdE1heGltdW1QYWdl
c0luQ2FjaGUsIHJlYWxQYWdlcyk7Cit9CisKK1dlYlN0cmluZyBXZWJTZXR0aW5nczo6bG9jYWxT
dG9yYWdlUGF0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0U3RyaW5nKFdl
YktpdExvY2FsU3RvcmFnZVBhdGgpOworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRMb2NhbFN0
b3JhZ2VQYXRoKGNvbnN0IFdlYlN0cmluZyYgcGF0aCkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFN0
cmluZyhXZWJLaXRMb2NhbFN0b3JhZ2VQYXRoLCBwYXRoKTsKK30KKworV2ViU3RyaW5nIFdlYlNl
dHRpbmdzOjpkYXRhYmFzZVBhdGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdl
dFN0cmluZyhXZWJLaXREYXRhYmFzZVBhdGgpOworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRE
YXRhYmFzZVBhdGgoY29uc3QgV2ViU3RyaW5nJiBwYXRoKQoreworICAgIG1fcHJpdmF0ZS0+c2V0
U3RyaW5nKFdlYktpdERhdGFiYXNlUGF0aCwgcGF0aCk7Cit9CisKK1dlYlN0cmluZyBXZWJTZXR0
aW5nczo6YXBwQ2FjaGVQYXRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRT
dHJpbmcoV2ViS2l0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVQYXRoKTsKK30KKwordm9pZCBX
ZWJTZXR0aW5nczo6c2V0QXBwQ2FjaGVQYXRoKGNvbnN0IFdlYlN0cmluZyYgcGF0aCkKK3sKKyAg
ICBtX3ByaXZhdGUtPnNldFN0cmluZyhXZWJLaXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZVBh
dGgsIHBhdGgpOworfQorCitXZWJTdHJpbmcgV2ViU2V0dGluZ3M6OnBhZ2VHcm91cE5hbWUoKSBj
b25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFN0cmluZyhXZWJLaXRQYWdlR3JvdXBO
YW1lKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0UGFnZUdyb3VwTmFtZShjb25zdCBXZWJT
dHJpbmcmIHBhZ2VHcm91cE5hbWUpCit7CisgICAgbV9wcml2YXRlLT5zZXRTdHJpbmcoV2ViS2l0
UGFnZUdyb3VwTmFtZSwgcGFnZUdyb3VwTmFtZSk7Cit9CisKK2Jvb2wgV2ViU2V0dGluZ3M6Omlz
RW1haWxNb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRCb29sZWFuKEJs
YWNrQmVycnlFbWFpbE1vZGVFbmFibGVkKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0RW1h
aWxNb2RlKGJvb2wgZW5hYmxlKQoreworICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihCbGFja0Jl
cnJ5RW1haWxNb2RlRW5hYmxlZCwgZW5hYmxlKTsKK30KKworYm9vbCBXZWJTZXR0aW5nczo6c2hv
dWxkUmVuZGVyQW5pbWF0aW9uc09uU2Nyb2xsT3Jab29tKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5nZXRCb29sZWFuKEJsYWNrQmVycnlSZW5kZXJBbmltYXRpb25zT25TY3JvbGxP
clpvb21FbmFibGVkKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0U2hvdWxkUmVuZGVyQW5p
bWF0aW9uc09uU2Nyb2xsT3Jab29tKGJvb2wgZW5hYmxlKQoreworICAgIG1fcHJpdmF0ZS0+c2V0
Qm9vbGVhbihCbGFja0JlcnJ5UmVuZGVyQW5pbWF0aW9uc09uU2Nyb2xsT3Jab29tRW5hYmxlZCwg
ZW5hYmxlKTsKK30KKwordW5zaWduZWQgV2ViU2V0dGluZ3M6Om92ZXJab29tQ29sb3IoKSBjb25z
dAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFVuc2lnbmVkKEJsYWNrQmVycnlPdmVyWm9v
bUNvbG9yKTsKK30KKwordm9pZCBXZWJTZXR0aW5nczo6c2V0T3Zlclpvb21Db2xvcih1bnNpZ25l
ZCBjb2xvcikKK3sKKyAgICBtX3ByaXZhdGUtPnNldFVuc2lnbmVkKEJsYWNrQmVycnlPdmVyWm9v
bUNvbG9yLCBjb2xvcik7Cit9CisKK3Vuc2lnbmVkIFdlYlNldHRpbmdzOjpiYWNrZ3JvdW5kQ29s
b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFVuc2lnbmVkKEJsYWNrQmVy
cnlCYWNrZ3JvdW5kQ29sb3IpOworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXRCYWNrZ3JvdW5k
Q29sb3IodW5zaWduZWQgY29sb3IpCit7CisgICAgbV9wcml2YXRlLT5zZXRVbnNpZ25lZChCbGFj
a0JlcnJ5QmFja2dyb3VuZENvbG9yLCBjb2xvcik7Cit9CisKK2Jvb2wgV2ViU2V0dGluZ3M6Omlz
V3JpdGluZ0RpcmVjdGlvblJUTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0
Qm9vbGVhbihCbGFja0JlcnJ5VXNlUlRMV3JpdGluZ0RpcmVjdGlvbik7Cit9CisKK3ZvaWQgV2Vi
U2V0dGluZ3M6OnNldFdyaXRpbmdEaXJlY3Rpb25SVEwoYm9vbCB1c2VSVExXcml0aW5nRGlyZWN0
aW9uKQoreworICAgIG1fcHJpdmF0ZS0+c2V0Qm9vbGVhbihCbGFja0JlcnJ5VXNlUlRMV3JpdGlu
Z0RpcmVjdGlvbiwgdXNlUlRMV3JpdGluZ0RpcmVjdGlvbik7Cit9CisKK2Jvb2wgV2ViU2V0dGlu
Z3M6OnVzZVdlYktpdENhY2hlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRC
b29sZWFuKEJsYWNrQmVycnlVc2VXZWJLaXRDYWNoZSk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6
OnNldFVzZVdlYktpdENhY2hlKGJvb2wgdXNlV2ViS2l0Q2FjaGUpCit7CisgICAgbV9wcml2YXRl
LT5zZXRCb29sZWFuKEJsYWNrQmVycnlVc2VXZWJLaXRDYWNoZSwgdXNlV2ViS2l0Q2FjaGUpOwor
fQorCitib29sIFdlYlNldHRpbmdzOjppc0ZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoKSBjb25zdAor
eworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldEJvb2xlYW4oV2ViS2l0RnJhbWVGbGF0dGVuaW5n
RW5hYmxlZCk7Cit9CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldEZyYW1lRmxhdHRlbmluZ0VuYWJs
ZWQoYm9vbCBlbmFibGUpCit7CisgICAgbV9wcml2YXRlLT5zZXRCb29sZWFuKFdlYktpdEZyYW1l
RmxhdHRlbmluZ0VuYWJsZWQsIGVuYWJsZSk7Cit9CisKK2Jvb2wgV2ViU2V0dGluZ3M6OmlzRGly
ZWN0UmVuZGVyaW5nVG9XaW5kb3dFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2
YXRlLT5nZXRCb29sZWFuKEJsYWNrQmVycnlEaXJlY3RSZW5kZXJpbmdUb1dpbmRvd0VuYWJsZWQp
OworfQorCit2b2lkIFdlYlNldHRpbmdzOjpzZXREaXJlY3RSZW5kZXJpbmdUb1dpbmRvd0VuYWJs
ZWQoYm9vbCBlbmFibGUpCit7CisgICAgbV9wcml2YXRlLT5zZXRCb29sZWFuKEJsYWNrQmVycnlE
aXJlY3RSZW5kZXJpbmdUb1dpbmRvd0VuYWJsZWQsIGVuYWJsZSk7Cit9CisKK3Vuc2lnbmVkIFdl
YlNldHRpbmdzOjptYXhQbHVnaW5JbnN0YW5jZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX3By
aXZhdGUtPmdldFVuc2lnbmVkKEJsYWNrQmVycnlNYXhQbHVnaW5JbnN0YW5jZXMpOworfQorCit2
b2lkIFdlYlNldHRpbmdzOjpzZXRNYXhQbHVnaW5JbnN0YW5jZXModW5zaWduZWQgbWF4UGx1Z2lu
SW5zdGFuY2VzKQoreworICAgIG1fcHJpdmF0ZS0+c2V0VW5zaWduZWQoQmxhY2tCZXJyeU1heFBs
dWdpbkluc3RhbmNlcywgbWF4UGx1Z2luSW5zdGFuY2VzKTsKK30KKworYm9vbCBXZWJTZXR0aW5n
czo6YXJlV2ViU29ja2V0c0VuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUt
PmdldEJvb2xlYW4oV2ViS2l0V2ViU29ja2V0c0VuYWJsZWQpOworfQorCit2b2lkIFdlYlNldHRp
bmdzOjpzZXRXZWJTb2NrZXRzRW5hYmxlZChib29sIGVuYWJsZSkKK3sKKyAgICBtX3ByaXZhdGUt
PnNldEJvb2xlYW4oV2ViS2l0V2ViU29ja2V0c0VuYWJsZWQsIGVuYWJsZSk7Cit9CisKK2Jvb2wg
V2ViU2V0dGluZ3M6OmlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5nZXRCb29sZWFuKFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCk7Cit9
CisKK3ZvaWQgV2ViU2V0dGluZ3M6OnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGVu
YWJsZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldEJvb2xlYW4oU3BhdGlhbE5hdmlnYXRpb25FbmFi
bGVkLCBlbmFibGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKK30gLy8gbmFtZXNwYWNl
IEJsYWNrQmVycnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2Vi
U2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViU2V0dGluZ3MuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40MDNlOGY0YTJiYzI4NTRmZWI1NTUzYmM5ZTQ3YzQwYWIyZDhkYjI1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5ncy5o
CkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEx
LCAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgV2ViU2V0dGluZ3NfaAorI2RlZmluZSBXZWJT
ZXR0aW5nc19oCisKKyNpbmNsdWRlICJCbGFja0JlcnJ5R2xvYmFsLmgiCisKK25hbWVzcGFjZSBC
bGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTZXR0aW5nczsKK2Ns
YXNzIFdlYlNldHRpbmdzUHJpdmF0ZTsKKworLyohCisgICAgQHN0cnVjdCBXZWJTZXR0aW5nc0Rl
bGVnYXRlCisgICAgRGVmaW5lcyB0aGUgbWV0aG9kcyB0aGF0IG11c3QgYmUgaW1wbGVtZW50ZWQg
YnkgYSBkZWxlZ2F0ZSBvZiBXZWJTZXR0aW5ncy4KKyovCitzdHJ1Y3QgQkxBQ0tCRVJSWV9FWFBP
UlQgV2ViU2V0dGluZ3NEZWxlZ2F0ZSB7CisgICAgdmlydHVhbCB+V2ViU2V0dGluZ3NEZWxlZ2F0
ZSgpIHsgfQorCisgICAgLyohCisgICAgICAgIFNlbnQgd2hlbiB0aGUgdmFsdWUgb2YgYSBzZXR0
aW5nIGNoYW5nZWQgYXMgd2VsbCBhcyBvbiBpbnN0YW50aWF0aW9uIG9mIGEgV2ViU2V0dGluZ3Mg
b2JqZWN0LgorICAgICAgICBAcGFyYW0gc2V0dGluZ3MgVGhlIFdlYlNldHRpbmdzIG9iamVjdCB0
aGF0IHNlbnQgdGhlIG1lc3NhZ2UuCisgICAgKi8KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdl
U2V0dGluZ3MoV2ViU2V0dGluZ3MqKSA9IDA7Cit9OworCisvKiEKKyAgICBAY2xhc3MgV2ViU2V0
dGluZ3MKKyovCitjbGFzcyBCTEFDS0JFUlJZX0VYUE9SVCBXZWJTZXR0aW5ncyB7CitwdWJsaWM6
CisgICAgc3RhdGljIFdlYlNldHRpbmdzKiBjcmVhdGVGcm9tU3RhbmRhcmRTZXR0aW5ncyhXZWJT
ZXR0aW5nc0RlbGVnYXRlKiA9IDApOworICAgIH5XZWJTZXR0aW5ncygpOworCisgICAgc3RhdGlj
IFdlYlNldHRpbmdzKiBzdGFuZGFyZFNldHRpbmdzKCk7CisKKyAgICB2b2lkIHNldERlbGVnYXRl
KFdlYlNldHRpbmdzRGVsZWdhdGUqKTsKKyAgICBXZWJTZXR0aW5nc0RlbGVnYXRlKiBkZWxlZ2F0
ZSgpOworCisgICAgc3RhdGljIHZvaWQgYWRkU3VwcG9ydGVkT2JqZWN0UGx1Z2luTUlNRVR5cGUo
Y29uc3QgY2hhciopOworICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkT2JqZWN0TUlNRVR5cGUo
Y29uc3QgV2ViU3RyaW5nJik7CisgICAgc3RhdGljIFdlYlN0cmluZyBnZXROb3JtYWxpemVkTUlN
RVR5cGUoY29uc3QgV2ViU3RyaW5nJik7CisKKyAgICBib29sIHhzc0F1ZGl0b3JFbmFibGVkKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sKTsKKworICAgIGJvb2wg
bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KCkgY29uc3Q7CisgICAgdm9pZCBzZXRMb2Fkc0ltYWdl
c0F1dG9tYXRpY2FsbHkoYm9vbCk7CisKKyAgICBib29sIHNob3VsZERyYXdCb3JkZXJXaGlsZUxv
YWRpbmdJbWFnZXMoKSBjb25zdDsKKyAgICB2b2lkIHNldFNob3VsZERyYXdCb3JkZXJXaGlsZUxv
YWRpbmdJbWFnZXMoYm9vbCk7CisKKyAgICBib29sIGlzSmF2YVNjcmlwdEVuYWJsZWQoKSBjb25z
dDsKKyAgICB2b2lkIHNldEphdmFTY3JpcHRFbmFibGVkKGJvb2wpOworCisgICAgYm9vbCBpc1By
aXZhdGVCcm93c2luZ0VuYWJsZWQoKSBjb25zdDsKKyAgICB2b2lkIHNldFByaXZhdGVCcm93c2lu
Z0VuYWJsZWQoYm9vbCk7CisKKyAgICBpbnQgZGVmYXVsdEZpeGVkRm9udFNpemUoKSBjb25zdDsK
KyAgICB2b2lkIHNldERlZmF1bHRGaXhlZEZvbnRTaXplKGludCk7CisKKyAgICBpbnQgZGVmYXVs
dEZvbnRTaXplKCkgY29uc3Q7CisgICAgdm9pZCBzZXREZWZhdWx0Rm9udFNpemUoaW50KTsKKwor
ICAgIGludCBtaW5pbXVtRm9udFNpemUoKSBjb25zdDsKKyAgICB2b2lkIHNldE1pbmltdW1Gb250
U2l6ZShpbnQpOworCisgICAgV2ViU3RyaW5nIHNlcmlmRm9udEZhbWlseSgpIGNvbnN0OworICAg
IHZvaWQgc2V0U2VyaWZGb250RmFtaWx5KGNvbnN0IGNoYXIqKTsKKyAgICBXZWJTdHJpbmcgZml4
ZWRGb250RmFtaWx5KCkgY29uc3Q7CisgICAgdm9pZCBzZXRGaXhlZEZvbnRGYW1pbHkoY29uc3Qg
Y2hhciopOworICAgIFdlYlN0cmluZyBzYW5zU2VyaWZGb250RmFtaWx5KCkgY29uc3Q7CisgICAg
dm9pZCBzZXRTYW5zU2VyaWZGb250RmFtaWx5KGNvbnN0IGNoYXIqKTsKKyAgICBXZWJTdHJpbmcg
c3RhbmRhcmRGb250RmFtaWx5KCkgY29uc3Q7CisgICAgdm9pZCBzZXRTdGFuZGFyZEZvbnRGYW1p
bHkoY29uc3QgY2hhciopOworCisgICAgdm9pZCBzZXREb3dubG9hZGFibGVCaW5hcnlGb250c0Vu
YWJsZWQoYm9vbCk7CisgICAgYm9vbCBkb3dubG9hZGFibGVCaW5hcnlGb250c0VuYWJsZWQoKSBj
b25zdDsKKworICAgIFdlYlN0cmluZyB1c2VyQWdlbnRTdHJpbmcoKSBjb25zdDsKKyAgICB2b2lk
IHNldFVzZXJBZ2VudFN0cmluZyhjb25zdCBjaGFyKik7CisKKyAgICBXZWJTdHJpbmcgZGVmYXVs
dFRleHRFbmNvZGluZ05hbWUoKSBjb25zdDsKKyAgICB2b2lkIHNldERlZmF1bHRUZXh0RW5jb2Rp
bmdOYW1lKGNvbnN0IGNoYXIqKTsKKworICAgIGJvb2wgaXNab29tVG9GaXRPbkxvYWQoKSBjb25z
dDsKKyAgICB2b2lkIHNldFpvb21Ub0ZpdE9uTG9hZChib29sKTsKKworICAgIGVudW0gVGV4dFJl
Zmxvd01vZGUgeyBUZXh0UmVmbG93RGlzYWJsZWQsIFRleHRSZWZsb3dFbmFibGVkLCBUZXh0UmVm
bG93RW5hYmxlZE9ubHlGb3JCbG9ja1pvb20gfTsKKyAgICBUZXh0UmVmbG93TW9kZSB0ZXh0UmVm
bG93TW9kZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VGV4dFJlZmxvd01vZGUoVGV4dFJlZmxvd01v
ZGUpOworCisgICAgYm9vbCBpc1Njcm9sbGJhcnNFbmFibGVkKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRTY3JvbGxiYXJzRW5hYmxlZChib29sKTsKKworICAgIC8vIEZJWE1FOiBDb25zaWRlciByZW5h
bWluZyB0aGlzIG1ldGhvZCB1cHN0cmVhbSwgd2hlcmUgaXQgaXMgY2FsbGVkIGphdmFTY3JpcHRD
YW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkuCisgICAgYm9vbCBjYW5KYXZhU2NyaXB0T3Blbldp
bmRvd3NBdXRvbWF0aWNhbGx5KCkgY29uc3Q7CisgICAgdm9pZCBzZXRKYXZhU2NyaXB0T3Blbldp
bmRvd3NBdXRvbWF0aWNhbGx5KGJvb2wpOworCisgICAgYm9vbCBhcmVQbHVnaW5zRW5hYmxlZCgp
IGNvbnN0OworICAgIHZvaWQgc2V0UGx1Z2luc0VuYWJsZWQoYm9vbCk7CisKKyAgICBib29sIGlz
R2VvbG9jYXRpb25FbmFibGVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXRHZW9sb2NhdGlvbkVuYWJs
ZWQoYm9vbCk7CisKKyAgICAvLyBDb250ZXh0IGluZm8KKyAgICBib29sIGRvZXNHZXRGb2N1c05v
ZGVDb250ZXh0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRHZXRGb2N1c05vZGVDb250ZXh0KGJvb2wp
OworCisgICAgV2ViU3RyaW5nIHVzZXJTdHlsZVNoZWV0U3RyaW5nKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRVc2VyU3R5bGVTaGVldFN0cmluZyhjb25zdCBjaGFyKik7CisKKyAgICBXZWJTdHJpbmcg
dXNlclN0eWxlU2hlZXRMb2NhdGlvbigpOworICAgIHZvaWQgc2V0VXNlclN0eWxlU2hlZXRMb2Nh
dGlvbihjb25zdCBjaGFyKik7CisKKyAgICAvLyBFeHRlcm5hbCBsaW5rIGhhbmRsZXJzCisgICAg
Ym9vbCBhcmVMaW5rc0hhbmRsZWRFeHRlcm5hbGx5KCkgY29uc3Q7CisgICAgdm9pZCBzZXRBcmVM
aW5rc0hhbmRsZWRFeHRlcm5hbGx5KGJvb2wpOworCisgICAgLy8gQnJvd3NlckZpZWxkMiBzZXR0
aW5ncworICAgIHZvaWQgc2V0QWxsb3dDcm9zc1NpdGVSZXF1ZXN0cyhib29sKTsKKyAgICBib29s
IGFsbG93Q3Jvc3NTaXRlUmVxdWVzdHMoKSBjb25zdDsKKyAgICBib29sIGlzVXNlclNjYWxhYmxl
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRVc2VyU2NhbGFibGUoYm9vbCk7CisgICAgaW50IHZpZXdw
b3J0V2lkdGgoKSBjb25zdDsKKyAgICB2b2lkIHNldFZpZXdwb3J0V2lkdGgoaW50KTsKKyAgICBk
b3VibGUgaW5pdGlhbFNjYWxlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRJbml0aWFsU2NhbGUoZG91
YmxlKTsKKworICAgIGludCBmaXJzdFNjaGVkdWxlZExheW91dERlbGF5KCkgY29uc3Q7CisgICAg
dm9pZCBzZXRGaXJzdFNjaGVkdWxlZExheW91dERlbGF5KGludCk7CisKKyAgICAvLyBXaGV0aGVy
IHRvIGluY2x1ZGUgcGF0dGVybjogaW4gdGhlIGxpc3Qgb2Ygc3RyaW5nIHBhdHRlcm5zLgorICAg
IGJvb2wgc2hvdWxkSGFuZGxlUGF0dGVyblVybHMoKSBjb25zdDsKKyAgICB2b2lkIHNldFNob3Vs
ZEhhbmRsZVBhdHRlcm5VcmxzKGJvb2wpOworCisgICAgYm9vbCBhcmVDb29raWVzRW5hYmxlZCgp
IGNvbnN0OworICAgIHZvaWQgc2V0QXJlQ29va2llc0VuYWJsZWQoYm9vbCk7CisKKyAgICAvLyBX
ZWIgc3RvcmFnZSBzZXR0aW5ncworICAgIGJvb2wgaXNMb2NhbFN0b3JhZ2VFbmFibGVkKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRJc0xvY2FsU3RvcmFnZUVuYWJsZWQoYm9vbCk7CisKKyAgICBib29s
IGlzRGF0YWJhc2VzRW5hYmxlZCgpIGNvbnN0OworICAgIHZvaWQgc2V0SXNEYXRhYmFzZXNFbmFi
bGVkKGJvb2wpOworCisgICAgYm9vbCBpc0FwcENhY2hlRW5hYmxlZCgpIGNvbnN0OworICAgIHZv
aWQgc2V0SXNBcHBDYWNoZUVuYWJsZWQoYm9vbCk7CisKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcg
bG9jYWxTdG9yYWdlUXVvdGEoKSBjb25zdDsKKyAgICB2b2lkIHNldExvY2FsU3RvcmFnZVF1b3Rh
KHVuc2lnbmVkIGxvbmcgbG9uZyk7CisKKyAgICAvLyBQYWdlIGNhY2hlCisgICAgdm9pZCBzZXRN
YXhpbXVtUGFnZXNJbkNhY2hlKGludCk7CisgICAgaW50IG1heGltdW1QYWdlc0luQ2FjaGUoKSBj
b25zdDsKKworICAgIFdlYlN0cmluZyBsb2NhbFN0b3JhZ2VQYXRoKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRMb2NhbFN0b3JhZ2VQYXRoKGNvbnN0IFdlYlN0cmluZyYpOworCisgICAgV2ViU3RyaW5n
IGRhdGFiYXNlUGF0aCgpIGNvbnN0OworICAgIHZvaWQgc2V0RGF0YWJhc2VQYXRoKGNvbnN0IFdl
YlN0cmluZyYpOworCisgICAgV2ViU3RyaW5nIGFwcENhY2hlUGF0aCgpIGNvbnN0OworICAgIHZv
aWQgc2V0QXBwQ2FjaGVQYXRoKGNvbnN0IFdlYlN0cmluZyYpOworCisgICAgV2ViU3RyaW5nIHBh
Z2VHcm91cE5hbWUoKSBjb25zdDsKKyAgICB2b2lkIHNldFBhZ2VHcm91cE5hbWUoY29uc3QgV2Vi
U3RyaW5nJik7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgYW4gZW1haWwgbW9k
ZS4gSW5zdGVhZCwgd2Ugc2hvdWxkIGV4cG9zZSBhbGwgZW1haWwtcmVsYXRlZCBzZXR0aW5ncwor
ICAgIC8vIHNvIHRoYXQgdGhlIGVtYWlsIGNsaWVudCBjYW4gdG9nZ2xlIHRoZW0gZGlyZWN0bHku
CisgICAgYm9vbCBpc0VtYWlsTW9kZSgpIGNvbnN0OworICAgIHZvaWQgc2V0RW1haWxNb2RlKGJv
b2wgZW5hYmxlKTsKKworICAgIGJvb2wgc2hvdWxkUmVuZGVyQW5pbWF0aW9uc09uU2Nyb2xsT3Ja
b29tKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTaG91bGRSZW5kZXJBbmltYXRpb25zT25TY3JvbGxP
clpvb20oYm9vbCBlbmFibGUpOworCisgICAgdW5zaWduZWQgb3Zlclpvb21Db2xvcigpIGNvbnN0
OworICAgIHZvaWQgc2V0T3Zlclpvb21Db2xvcih1bnNpZ25lZCk7CisKKyAgICB1bnNpZ25lZCBi
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcih1bnNp
Z25lZCk7CisKKyAgICBib29sIGlzV3JpdGluZ0RpcmVjdGlvblJUTCgpIGNvbnN0OworICAgIHZv
aWQgc2V0V3JpdGluZ0RpcmVjdGlvblJUTChib29sKTsKKworICAgIGJvb2wgdXNlV2ViS2l0Q2Fj
aGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFVzZVdlYktpdENhY2hlKGJvb2wpOworCisgICAgYm9v
bCBpc0ZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoKSBjb25zdDsKKyAgICB2b2lkIHNldEZyYW1lRmxh
dHRlbmluZ0VuYWJsZWQoYm9vbCk7CisKKyAgICBib29sIGlzRGlyZWN0UmVuZGVyaW5nVG9XaW5k
b3dFbmFibGVkKCkgY29uc3Q7CisgICAgdm9pZCBzZXREaXJlY3RSZW5kZXJpbmdUb1dpbmRvd0Vu
YWJsZWQoYm9vbCk7CisKKyAgICB1bnNpZ25lZCBtYXhQbHVnaW5JbnN0YW5jZXMoKSBjb25zdDsK
KyAgICB2b2lkIHNldE1heFBsdWdpbkluc3RhbmNlcyh1bnNpZ25lZCBudW0pOworCisgICAgYm9v
bCBhcmVXZWJTb2NrZXRzRW5hYmxlZCgpIGNvbnN0OworICAgIHZvaWQgc2V0V2ViU29ja2V0c0Vu
YWJsZWQoYm9vbCk7CisKKyAgICBib29sIGlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCk7CisKK3ByaXZh
dGU6CisgICAgV2ViU2V0dGluZ3NQcml2YXRlKiBtX3ByaXZhdGU7CisgICAgV2ViU2V0dGluZ3Mo
KTsKKyAgICBXZWJTZXR0aW5ncyhjb25zdCBXZWJTZXR0aW5ncyYpOworfTsKKworLyohCisgICAg
QGNsYXNzIFdlYlNldHRpbmdzVHJhbnNhY3Rpb24KKyAgICBEZWZpbmVzIGEgc2NvcGUgZ3VhcmQg
dGhhdCBzdXBwcmVzc2VzIGRpZENoYW5nZVNldHRpbmdzIG1lc3NhZ2VzIHdpdGhpbiBpdHMgc2Nv
cGUuCisgICAgT24gZGVzdHJ1Y3Rpb24gdGhlIGd1YXJkZWQgV2ViU2V0dGluZ3Mgb2JqZWN0IHdp
bGwgZGlzcGF0Y2ggZXhhY3RseSBvbmUgZGlkQ2hhbmdlU2V0dGluZ3MgbWVzc2FnZS4KKyovCitj
bGFzcyBCTEFDS0JFUlJZX0VYUE9SVCBXZWJTZXR0aW5nc1RyYW5zYWN0aW9uIHsKK3B1YmxpYzoK
KyAgICBXZWJTZXR0aW5nc1RyYW5zYWN0aW9uKFdlYlNldHRpbmdzKiBzZXR0aW5ncykKKyAgICAg
ICAgOiBtX3NldHRpbmdzKHNldHRpbmdzKQorICAgICAgICAsIG1fc2F2ZWREZWxlZ2F0ZSgwKQor
ICAgIHsKKyAgICAgICAgaWYgKCFzZXR0aW5ncykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgbV9zYXZlZERlbGVnYXRlID0gc2V0dGluZ3MtPmRlbGVnYXRlKCk7CisgICAgICAgIHNldHRp
bmdzLT5zZXREZWxlZ2F0ZSgwKTsKKyAgICB9CisKKyAgICB+V2ViU2V0dGluZ3NUcmFuc2FjdGlv
bigpCisgICAgeworICAgICAgICBpZiAoIW1fc2V0dGluZ3MgfHwgIW1fc2F2ZWREZWxlZ2F0ZSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9zZXR0aW5ncy0+c2V0RGVsZWdhdGUobV9z
YXZlZERlbGVnYXRlKTsKKyAgICAgICAgbV9zYXZlZERlbGVnYXRlLT5kaWRDaGFuZ2VTZXR0aW5n
cyhtX3NldHRpbmdzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgV2ViU2V0dGluZ3NUcmFuc2Fj
dGlvbihjb25zdCBXZWJTZXR0aW5nc1RyYW5zYWN0aW9uJik7CisgICAgV2ViU2V0dGluZ3NUcmFu
c2FjdGlvbiYgb3BlcmF0b3I9KGNvbnN0IFdlYlNldHRpbmdzVHJhbnNhY3Rpb24mKTsKKworICAg
IFdlYlNldHRpbmdzKiBtX3NldHRpbmdzOworICAgIFdlYlNldHRpbmdzRGVsZWdhdGUqIG1fc2F2
ZWREZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorfSAvLyBuYW1lc3BhY2Ug
QmxhY2tCZXJyeQorCisjZW5kaWYgLy8gV2ViU2V0dGluZ3NfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5nc19wLmggYi9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQXBpL1dlYlNldHRpbmdzX3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZjllMjMzNGQ5OGIyNDU5
MjljYmI2ZDgxOTg2MjZhZWE5YjBlYzE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L0FwaS9XZWJTZXR0aW5nc19wLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lm
bmRlZiBXZWJTZXR0aW5nc19wX2gKKyNkZWZpbmUgV2ViU2V0dGluZ3NfcF9oCisKKyNpbmNsdWRl
ICJXZWJTZXR0aW5ncy5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKKyNkZWZpbmUgc3ludGhlc2l6ZUFjY2Vzc29yc0ZvclBy
aW1pdGl2ZVZhbHVlUHJlZml4QW5kVHlwZShwcmVmaXgsIHR5cGUpIFwKKyAgICAgdm9pZCBzZXQj
I3ByZWZpeChjb25zdCBTdHJpbmcmIGtleSwgdHlwZSBuZXdWYWx1ZSkgeyBcCisgICAgICAgICBB
U1NFUlQoaW1wbCk7IFwKKyAgICAgICAgIGlmIChnZXQjI3ByZWZpeChrZXkpID09IG5ld1ZhbHVl
KSBcCisgICAgICAgICAgICByZXR1cm47IFwKKyAgICAgICAgIGlmIChjb3B5T25Xcml0ZSkgeyBc
CisgICAgICAgICAgICBjb3B5T25Xcml0ZSA9IGZhbHNlOyBcCisgICAgICAgICAgICBpbXBsID0g
bmV3IFdlYlNldHRpbmdzUHJpdmF0ZUltcGwoKmltcGwpOyBcCisgICAgICAgICB9IFwKKyAgICAg
ICAgIFByaW1pdGl2ZVZhbHVlIHByaW1pdGl2ZVZhbHVlOyBcCisgICAgICAgICBwcmltaXRpdmVW
YWx1ZS5wcmVmaXgjI1ZhbHVlID0gbmV3VmFsdWU7IFwKKyAgICAgICAgIGltcGwtPnByaW1pdGl2
ZVZhbHVlcy5zZXQoa2V5LCBwcmltaXRpdmVWYWx1ZSk7IFwKKyAgICAgICAgIGlmIChkZWxlZ2F0
ZSkgXAorICAgICAgICAgICAgZGVsZWdhdGUtPmRpZENoYW5nZVNldHRpbmdzKHNlbmRlcik7IFwK
KyAgICAgfSBcCisgICAgIHR5cGUgZ2V0IyNwcmVmaXgoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0
IHsgXAorICAgICAgICAgIEFTU0VSVChpbXBsKTsgXAorICAgICAgICAgIGlmICghaW1wbC0+cHJp
bWl0aXZlVmFsdWVzLmNvbnRhaW5zKGtleSkpIFwKKyAgICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PHR5cGU+KGZhbHNlKTsgXAorICAgICAgICAgIHJldHVybiBpbXBsLT5wcmltaXRpdmVW
YWx1ZXMuZ2V0KGtleSkucHJlZml4IyNWYWx1ZTsgXAorICAgICAgfQorCituYW1lc3BhY2UgQmxh
Y2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFdlYlNldHRpbmdzUHJpdmF0
ZSB7CisgICAgdW5pb24gUHJpbWl0aXZlVmFsdWUgeworICAgICAgICBXZWJTZXR0aW5nczo6VGV4
dFJlZmxvd01vZGUgVGV4dFJlZmxvd01vZGVWYWx1ZTsKKyAgICAgICAgYm9vbCBCb29sZWFuVmFs
dWU7CisgICAgICAgIGRvdWJsZSBEb3VibGVWYWx1ZTsKKyAgICAgICAgaW50IEludGVnZXJWYWx1
ZTsKKyAgICAgICAgdW5zaWduZWQgVW5zaWduZWRWYWx1ZTsKKyAgICAgICAgdW5zaWduZWQgbG9u
ZyBsb25nIFVuc2lnbmVkTG9uZ0xvbmdWYWx1ZTsKKyAgICB9OworCisgICAgc3RydWN0IFdlYlNl
dHRpbmdzUHJpdmF0ZUltcGwgeworICAgICAgICBIYXNoTWFwPFN0cmluZywgUHJpbWl0aXZlVmFs
dWU+IHByaW1pdGl2ZVZhbHVlczsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gc3Ry
aW5nVmFsdWVzOworICAgIH07CisKKyAgICBXZWJTZXR0aW5nc1ByaXZhdGVJbXBsKiBpbXBsOwor
ICAgIFdlYlNldHRpbmdzRGVsZWdhdGUqIGRlbGVnYXRlOworICAgIFdlYlNldHRpbmdzKiBzZW5k
ZXI7CisgICAgYm9vbCBjb3B5T25Xcml0ZTsKKworICAgIFdlYlNldHRpbmdzUHJpdmF0ZSgpOwor
CisgICAgc3ludGhlc2l6ZUFjY2Vzc29yc0ZvclByaW1pdGl2ZVZhbHVlUHJlZml4QW5kVHlwZShU
ZXh0UmVmbG93TW9kZSwgV2ViU2V0dGluZ3M6OlRleHRSZWZsb3dNb2RlKTsKKworICAgIHN5bnRo
ZXNpemVBY2Nlc3NvcnNGb3JQcmltaXRpdmVWYWx1ZVByZWZpeEFuZFR5cGUoQm9vbGVhbiwgYm9v
bCk7CisKKyAgICBzeW50aGVzaXplQWNjZXNzb3JzRm9yUHJpbWl0aXZlVmFsdWVQcmVmaXhBbmRU
eXBlKERvdWJsZSwgZG91YmxlKTsKKworICAgIHN5bnRoZXNpemVBY2Nlc3NvcnNGb3JQcmltaXRp
dmVWYWx1ZVByZWZpeEFuZFR5cGUoSW50ZWdlciwgaW50KTsKKworICAgIHN5bnRoZXNpemVBY2Nl
c3NvcnNGb3JQcmltaXRpdmVWYWx1ZVByZWZpeEFuZFR5cGUoVW5zaWduZWQsIHVuc2lnbmVkKTsK
KworICAgIHN5bnRoZXNpemVBY2Nlc3NvcnNGb3JQcmltaXRpdmVWYWx1ZVByZWZpeEFuZFR5cGUo
VW5zaWduZWRMb25nTG9uZywgdW5zaWduZWQgbG9uZyBsb25nKTsKKworICAgIFN0cmluZyBnZXRT
dHJpbmcoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaW1w
bCk7CisgICAgICAgIGlmICghaW1wbC0+c3RyaW5nVmFsdWVzLmNvbnRhaW5zKGtleSkpCisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBpbXBsLT5zdHJpbmdWYWx1
ZXMuZ2V0KGtleSk7CisgICAgfQorCisgICAgdm9pZCBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaW1wbCk7
CisgICAgICAgIGlmIChnZXRTdHJpbmcoa2V5KSA9PSBuZXdWYWx1ZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBpZiAoY29weU9uV3JpdGUpIHsKKyAgICAgICAgICAgIGNvcHlPbldy
aXRlID0gZmFsc2U7CisgICAgICAgICAgICBpbXBsID0gbmV3IFdlYlNldHRpbmdzUHJpdmF0ZUlt
cGwoKmltcGwpOworICAgICAgICB9CisKKyAgICAgICAgaW1wbC0+c3RyaW5nVmFsdWVzLnNldChr
ZXksIG5ld1ZhbHVlKTsKKyAgICAgICAgaWYgKGRlbGVnYXRlKQorICAgICAgICAgICAgZGVsZWdh
dGUtPmRpZENoYW5nZVNldHRpbmdzKHNlbmRlcik7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Cit9IC8vIG5hbWVzcGFjZSBCbGFja0JlcnJ5CisKKyNlbmRpZiAvLyBXZWJTZXR0
aW5nc19wX2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>