<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://jogamp.org/bugzilla/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.2"
          urlbase="https://jogamp.org/bugzilla/"
          
          maintainer="sgothel@jausoft.com"
>

    <bug>
          <bug_id>273</bug_id>
          
          <creation_ts>2007-02-20 07:34:53 +0100</creation_ts>
          <short_desc>class DDSImage don&apos;t support cubemap textures</short_desc>
          <delta_ts>2015-09-27 03:15:00 +0200</delta_ts>
          <reporter_accessible>0</reporter_accessible>
          <cclist_accessible>0</cclist_accessible>
          <classification_id>3</classification_id>
          <classification>JogAmp</classification>
          <product>Jogl</product>
          <component>core</component>
          <version>1</version>
          <rep_platform>All</rep_platform>
          <op_sys>all</op_sys>
          <bug_status>VERIFIED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sven Gothel">sgothel</reporter>
          <assigned_to name="Sven Gothel">sgothel</assigned_to>
          
          
          <cf_type>FEATURE</cf_type>
          <cf_scm_refs></cf_scm_refs>
          <cf_workaround>---</cf_workaround>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>289</commentid>
    <comment_count>0</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2010-03-24 07:50:01 +0100</bug_when>
    <thetext>


---- Reported by bandures 2007-02-20 07:34:53 ----

DDSImage can&apos;t load cubemap DDS files. I attached new version with cubemap support.



---- Additional Comments From bandures 2007-02-20 07:35:39 ----

Created an attachment
DDSImage class with cubemap support




---- Additional Comments From kbr 2007-02-20 17:41:15 ----

Incorporated suggested fix. Thanks for the code. In the future, it would make it
a lot easier if you would use as the source file the exact file from CVS without
reformatting, or provide before-and-after files, or diffs.

Any chance you would consider trying to modify the TextureIO classes to use this
new code path? It might require some significant changes, but would be useful to
the community.




--- Bug imported by sgothel@jausoft.com 2010-03-24 07:50 EDT  ---

This bug was previously known as _bug_ 273 at https://jogl.dev.java.net/bugs/show_bug.cgi?id=273
Imported an attachment (id=91)

The original submitter of attachment 91 is unknown.
   Reassigning to the person who moved it here: sgothel@jausoft.com.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>91</attachid>
            <date>2007-02-20 07:35:00 +0100</date>
            <delta_ts>2007-02-20 07:35:00 +0100</delta_ts>
            <desc>DDSImage class with cubemap support</desc>
            <filename>DDSImage.java</filename>
            <type>text/plain</type>
            <size>38611</size>
            <attacher name="Sven Gothel">sgothel</attacher>
            
              <data encoding="base64">LyoNCiAqIENvcHlyaWdodCAoYykgMjAwNSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuDQogKiANCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQ0KICogbWV0
Og0KICogDQogKiAtIFJlZGlzdHJpYnV0aW9uIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQNCiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KICogDQogKiAtIFJlZGlzdHJpYnV0aW9uIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAqICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQ0KICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICogDQogKiBOZWl0aGVyIHRoZSBuYW1lIG9mIFN1
biBNaWNyb3N5c3RlbXMsIEluYy4gb3IgdGhlIG5hbWVzIG9mDQogKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4N
CiAqIA0KICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiQVMgSVMsIiB3aXRob3V0IGEgd2Fy
cmFudHkgb2YgYW55IGtpbmQuIEFMTA0KICogRVhQUkVTUyBPUiBJTVBMSUVEIENPTkRJVElPTlMs
IFJFUFJFU0VOVEFUSU9OUyBBTkQgV0FSUkFOVElFUywNCiAqIElOQ0xVRElORyBBTlkgSU1QTElF
RCBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEENCiAqIFBBUlRJQ1VM
QVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0VNRU5ULCBBUkUgSEVSRUJZIEVYQ0xVREVELiBTVU4N
CiAqIE1JQ1JPU1lTVEVNUywgSU5DLiAoIlNVTiIpIEFORCBJVFMgTElDRU5TT1JTIFNIQUxMIE5P
VCBCRSBMSUFCTEUgRk9SDQogKiBBTlkgREFNQUdFUyBTVUZGRVJFRCBCWSBMSUNFTlNFRSBBUyBB
IFJFU1VMVCBPRiBVU0lORywgTU9ESUZZSU5HIE9SDQogKiBESVNUUklCVVRJTkcgVEhJUyBTT0ZU
V0FSRSBPUiBJVFMgREVSSVZBVElWRVMuIElOIE5PIEVWRU5UIFdJTEwgU1VOIE9SDQogKiBJVFMg
TElDRU5TT1JTIEJFIExJQUJMRSBGT1IgQU5ZIExPU1QgUkVWRU5VRSwgUFJPRklUIE9SIERBVEEs
IE9SIEZPUg0KICogRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgQ09OU0VRVUVOVElBTCwgSU5D
SURFTlRBTCBPUiBQVU5JVElWRQ0KICogREFNQUdFUywgSE9XRVZFUiBDQVVTRUQgQU5EIFJFR0FS
RExFU1MgT0YgVEhFIFRIRU9SWSBPRiBMSUFCSUxJVFksDQogKiBBUklTSU5HIE9VVCBPRiBUSEUg
VVNFIE9GIE9SIElOQUJJTElUWSBUTyBVU0UgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRg0KICogU1VO
IEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4NCiAq
IA0KICogWW91IGFja25vd2xlZGdlIHRoYXQgdGhpcyBzb2Z0d2FyZSBpcyBub3QgZGVzaWduZWQg
b3IgaW50ZW5kZWQgZm9yIHVzZQ0KICogaW4gdGhlIGRlc2lnbiwgY29uc3RydWN0aW9uLCBvcGVy
YXRpb24gb3IgbWFpbnRlbmFuY2Ugb2YgYW55IG51Y2xlYXINCiAqIGZhY2lsaXR5Lg0KICogDQog
KiBTdW4gZ3JhdGVmdWxseSBhY2tub3dsZWRnZXMgdGhhdCB0aGlzIHNvZnR3YXJlIHdhcyBvcmln
aW5hbGx5IGF1dGhvcmVkDQogKiBhbmQgZGV2ZWxvcGVkIGJ5IEtlbm5ldGggQnJhZGxleSBSdXNz
ZWxsIGFuZCBDaHJpc3RvcGhlciBKb2huIEtsaW5lLg0KICovDQoNCnBhY2thZ2UgVm9nc3RlcjsN
Cg0KaW1wb3J0IGphdmEuaW8uKjsNCmltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOw0KaW1wb3J0
IGphdmEubmlvLkJ5dGVPcmRlcjsNCmltcG9ydCBqYXZhLm5pby5jaGFubmVscy5GaWxlQ2hhbm5l
bDsNCg0KLyoqDQogKiBBIHJlYWRlciBhbmQgd3JpdGVyIGZvciBEaXJlY3REcmF3IFN1cmZhY2Ug
KC5kZHMpIGZpbGVzLCB3aGljaCBhcmUNCiAqIHVzZWQgdG8gZGVzY3JpYmUgdGV4dHVyZXMuIFRo
ZXNlIGZpbGVzIGNhbiBjb250YWluIG11bHRpcGxlIG1pcG1hcA0KICogbGV2ZWxzIGluIG9uZSBm
aWxlLiBUaGlzIGNsYXNzIGlzIGN1cnJlbnRseSBtaW5pbWFsIGFuZCBkb2VzIG5vdA0KICogc3Vw
cG9ydCBhbGwgb2YgdGhlIHBvc3NpYmxlIGZpbGUgZm9ybWF0cy4NCiAqLw0KcHVibGljIGNsYXNz
IEREU0ltYWdlIHsNCiAgICAvKioNCiAgICAgKiBTaW1wbGUgY2xhc3MgZGVzY3JpYmluZyBpbWFn
ZXMgYW5kIGRhdGE7IGRvZXMgbm90IGVuY2Fwc3VsYXRlDQogICAgICogaW1hZ2UgZm9ybWF0IGlu
Zm9ybWF0aW9uLiBVc2VyIGlzIHJlc3BvbnNpYmxlIGZvciB0cmFuc21pdHRpbmcNCiAgICAgKiB0
aGF0IGluZm9ybWF0aW9uIGluIGFub3RoZXIgd2F5Lg0KICAgICAqLw0KICAgIHB1YmxpYyBzdGF0
aWMgY2xhc3MgSW1hZ2VJbmZvIHsNCiAgICAgICAgcHJpdmF0ZSBCeXRlQnVmZmVyIGRhdGE7DQog
ICAgICAgIHByaXZhdGUgaW50IHdpZHRoOw0KICAgICAgICBwcml2YXRlIGludCBoZWlnaHQ7DQog
ICAgICAgIHByaXZhdGUgYm9vbGVhbiBpc0NvbXByZXNzZWQ7DQogICAgICAgIHByaXZhdGUgaW50
IGNvbXByZXNzaW9uRm9ybWF0Ow0KDQogICAgICAgIHB1YmxpYyBJbWFnZUluZm8oIEJ5dGVCdWZm
ZXIgZGF0YSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sZWFuIGNvbXByZXNzZWQsIGludCBj
b21wcmVzc2lvbkZvcm1hdCApIHsNCiAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7DQogICAg
ICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7DQogICAgICAgICAgICB0aGlzLmhlaWdodCA9IGhl
aWdodDsNCiAgICAgICAgICAgIHRoaXMuaXNDb21wcmVzc2VkID0gY29tcHJlc3NlZDsNCiAgICAg
ICAgICAgIHRoaXMuY29tcHJlc3Npb25Gb3JtYXQgPSBjb21wcmVzc2lvbkZvcm1hdDsNCiAgICAg
ICAgfQ0KDQogICAgICAgIHB1YmxpYyBpbnQgZ2V0V2lkdGgoKSB7DQogICAgICAgICAgICByZXR1
cm4gd2lkdGg7DQogICAgICAgIH0NCg0KICAgICAgICBwdWJsaWMgaW50IGdldEhlaWdodCgpIHsN
CiAgICAgICAgICAgIHJldHVybiBoZWlnaHQ7DQogICAgICAgIH0NCg0KICAgICAgICBwdWJsaWMg
Qnl0ZUJ1ZmZlciBnZXREYXRhKCkgew0KICAgICAgICAgICAgcmV0dXJuIGRhdGE7DQogICAgICAg
IH0NCg0KICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0NvbXByZXNzZWQoKSB7DQogICAgICAgICAg
ICByZXR1cm4gaXNDb21wcmVzc2VkOw0KICAgICAgICB9DQoNCiAgICAgICAgcHVibGljIGludCBn
ZXRDb21wcmVzc2lvbkZvcm1hdCgpIHsNCiAgICAgICAgICAgIGlmKCAhaXNDb21wcmVzc2VkKCkg
KSB7DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oICJTaG91bGQg
bm90IGNhbGwgdW5sZXNzIGNvbXByZXNzZWQiICk7DQogICAgICAgICAgICB9DQogICAgICAgICAg
ICByZXR1cm4gY29tcHJlc3Npb25Gb3JtYXQ7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwcml2
YXRlIEZpbGVJbnB1dFN0cmVhbSBmaXM7DQogICAgcHJpdmF0ZSBGaWxlQ2hhbm5lbCBjaGFuOw0K
ICAgIHByaXZhdGUgQnl0ZUJ1ZmZlciBidWY7DQogICAgcHJpdmF0ZSBIZWFkZXIgaGVhZGVyOw0K
DQogICAgLy8NCiAgICAvLyBTZWxlY3RlZCBiaXRzIGluIGhlYWRlciBmbGFncw0KICAgIC8vDQog
ICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRERTRF9DQVBTID0gMHgwMDAwMDAwMTsgLy8gQ2Fw
YWNpdGllcyBhcmUgdmFsaWQNCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERFNEX0hFSUdI
VCA9IDB4MDAwMDAwMDI7IC8vIEhlaWdodCBpcyB2YWxpZA0KICAgIHB1YmxpYyBzdGF0aWMgZmlu
YWwgaW50IEREU0RfV0lEVEggPSAweDAwMDAwMDA0OyAvLyBXaWR0aCBpcyB2YWxpZA0KICAgIHB1
YmxpYyBzdGF0aWMgZmluYWwgaW50IEREU0RfUElUQ0ggPSAweDAwMDAwMDA4OyAvLyBQaXRjaCBp
cyB2YWxpZA0KICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEREU0RfQkFDS0JVRkZFUkNPVU5U
ID0gMHgwMDAwMDAyMDsgLy8gQmFjayBidWZmZXIgY291bnQgaXMgdmFsaWQNCiAgICBwdWJsaWMg
c3RhdGljIGZpbmFsIGludCBERFNEX1pCVUZGRVJCSVRERVBUSCA9IDB4MDAwMDAwNDA7IC8vIFot
YnVmZmVyIGJpdCBkZXB0aCBpcyB2YWxpZCAoc2hvdWxkbid0IGJlIHVzZWQgaW4gRERTVVJGQUNF
REVTQzIpDQogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRERTRF9BTFBIQUJJVERFUFRIID0g
MHgwMDAwMDA4MDsgLy8gQWxwaGEgYml0IGRlcHRoIGlzIHZhbGlkDQogICAgcHVibGljIHN0YXRp
YyBmaW5hbCBpbnQgRERTRF9MUFNVUkZBQ0UgPSAweDAwMDAwODAwOyAvLyBscFN1cmZhY2UgaXMg
dmFsaWQNCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERFNEX1BJWEVMRk9STUFUID0gMHgw
MDAwMTAwMDsgLy8gZGRwZlBpeGVsRm9ybWF0IGlzIHZhbGlkDQogICAgcHVibGljIHN0YXRpYyBm
aW5hbCBpbnQgRERTRF9NSVBNQVBDT1VOVCA9IDB4MDAwMjAwMDA7IC8vIE1pcCBtYXAgY291bnQg
aXMgdmFsaWQNCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERFNEX0xJTkVBUlNJWkUgPSAw
eDAwMDgwMDAwOyAvLyBkd0xpbmVhclNpemUgaXMgdmFsaWQNCiAgICBwdWJsaWMgc3RhdGljIGZp
bmFsIGludCBERFNEX0RFUFRIID0gMHgwMDgwMDAwMDsgLy8gZHdEZXB0aCBpcyB2YWxpZA0KDQog
ICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRERQRl9BTFBIQVBJWEVMUyA9IDB4MDAwMDAwMDE7
IC8vIEFscGhhIGNoYW5uZWwgaXMgcHJlc2VudA0KICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50
IEREUEZfQUxQSEEgPSAweDAwMDAwMDAyOyAvLyBPbmx5IGNvbnRhaW5zIGFscGhhIGluZm9ybWF0
aW9uDQogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRERQRl9GT1VSQ0MgPSAweDAwMDAwMDA0
OyAvLyBGb3VyQ0MgY29kZSBpcyB2YWxpZA0KICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERE
UEZfUEFMRVRURUlOREVYRUQ0ID0gMHgwMDAwMDAwODsgLy8gU3VyZmFjZSBpcyA0LWJpdCBjb2xv
ciBpbmRleGVkDQogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRERQRl9QQUxFVFRFSU5ERVhF
RFRPOCA9IDB4MDAwMDAwMTA7IC8vIFN1cmZhY2UgaXMgaW5kZXhlZCBpbnRvIGEgcGFsZXR0ZSB3
aGljaCBzdG9yZXMgaW5kaWNlcw0KICAgIC8vIGludG8gdGhlIGRlc3RpbmF0aW9uIHN1cmZhY2Un
cyA4LWJpdCBwYWxldHRlDQogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRERQRl9QQUxFVFRF
SU5ERVhFRDggPSAweDAwMDAwMDIwOyAvLyBTdXJmYWNlIGlzIDgtYml0IGNvbG9yIGluZGV4ZWQN
CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERFBGX1JHQiA9IDB4MDAwMDAwNDA7IC8vIFJH
QiBkYXRhIGlzIHByZXNlbnQNCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERFBGX0NPTVBS
RVNTRUQgPSAweDAwMDAwMDgwOyAvLyBTdXJmYWNlIHdpbGwgYWNjZXB0IHBpeGVsIGRhdGEgaW4g
dGhlIGZvcm1hdCBzcGVjaWZpZWQNCiAgICAvLyBhbmQgY29tcHJlc3MgaXQgZHVyaW5nIHRoZSB3
cml0ZQ0KICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEREUEZfUkdCVE9ZVVYgPSAweDAwMDAw
MTAwOyAvLyBTdXJmYWNlIHdpbGwgYWNjZXB0IFJHQiBkYXRhIGFuZCB0cmFuc2xhdGUgaXQgZHVy
aW5nDQogICAgLy8gdGhlIHdyaXRlIHRvIFlVViBkYXRhLiBUaGUgZm9ybWF0IG9mIHRoZSBkYXRh
IHRvIGJlIHdyaXR0ZW4NCiAgICAvLyB3aWxsIGJlIGNvbnRhaW5lZCBpbiB0aGUgcGl4ZWwgZm9y
bWF0IHN0cnVjdHVyZS4gVGhlIEREUEZfUkdCDQogICAgLy8gZmxhZyB3aWxsIGJlIHNldC4NCiAg
ICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERFBGX1lVViA9IDB4MDAwMDAyMDA7IC8vIFBpeGVs
IGZvcm1hdCBpcyBZVVYgLSBZVVYgZGF0YSBpbiBwaXhlbCBmb3JtYXQgc3RydWN0IGlzIHZhbGlk
DQogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRERQRl9aQlVGRkVSID0gMHgwMDAwMDQwMDsg
Ly8gUGl4ZWwgZm9ybWF0IGlzIGEgeiBidWZmZXIgb25seSBzdXJmYWNlDQogICAgcHVibGljIHN0
YXRpYyBmaW5hbCBpbnQgRERQRl9QQUxFVFRFSU5ERVhFRDEgPSAweDAwMDAwODAwOyAvLyBTdXJm
YWNlIGlzIDEtYml0IGNvbG9yIGluZGV4ZWQNCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBE
RFBGX1BBTEVUVEVJTkRFWEVEMiA9IDB4MDAwMDEwMDA7IC8vIFN1cmZhY2UgaXMgMi1iaXQgY29s
b3IgaW5kZXhlZA0KICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEREUEZfWlBJWEVMUyA9IDB4
MDAwMDIwMDA7IC8vIFN1cmZhY2UgY29udGFpbnMgWiBpbmZvcm1hdGlvbiBpbiB0aGUgcGl4ZWxz
DQoNCiAgICAvLyBTZWxlY3RlZCBiaXRzIGluIEREUyBjYXBhYmlsaXRpZXMgZmxhZ3MNCiAgICBw
dWJsaWMgc3RhdGljIGZpbmFsIGludCBERFNDQVBTX1RFWFRVUkUgPSAweDAwMDAxMDAwOyAvLyBD
YW4gYmUgdXNlZCBhcyBhIHRleHR1cmUNCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERFND
QVBTX01JUE1BUCA9IDB4MDA0MDAwMDA7IC8vIElzIG9uZSBsZXZlbCBvZiBhIG1pcC1tYXANCiAg
ICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERFNDQVBTX0NPTVBMRVggPSAweDAwMDAwMDA4Ow0K
DQogICAgLy8gU2VsZWN0ZWQgYml0cyBpbiBERFMgZXh0ZW5kZWQgY2FwYWJpbGl0aWVzIGZsYWdz
DQogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRERTQ0FQUzJfQ1VCRU1BUCA9IDB4MDAwMDAy
MDA7DQogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRERTQ0FQUzJfQ1VCRU1BUF9QT1NJVElW
RVggPSAweDAwMDAwNDAwOw0KICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEREU0NBUFMyX0NV
QkVNQVBfTkVHQVRJVkVYID0gMHgwMDAwMDgwMDsNCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGlu
dCBERFNDQVBTMl9DVUJFTUFQX1BPU0lUSVZFWSA9IDB4MDAwMDEwMDA7DQogICAgcHVibGljIHN0
YXRpYyBmaW5hbCBpbnQgRERTQ0FQUzJfQ1VCRU1BUF9ORUdBVElWRVkgPSAweDAwMDAyMDAwOw0K
ICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEREU0NBUFMyX0NVQkVNQVBfUE9TSVRJVkVaID0g
MHgwMDAwNDAwMDsNCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERFNDQVBTMl9DVUJFTUFQ
X05FR0FUSVZFWiA9IDB4MDAwMDgwMDA7DQoNCiAgICAvLyBLbm93biBwaXhlbCBmb3JtYXRzDQog
ICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRDNERk1UX1VOS05PV04gPSAwOw0KICAgIHB1Ymxp
YyBzdGF0aWMgZmluYWwgaW50IEQzREZNVF9SOEc4QjggPSAyMDsNCiAgICBwdWJsaWMgc3RhdGlj
IGZpbmFsIGludCBEM0RGTVRfQThSOEc4QjggPSAyMTsNCiAgICBwdWJsaWMgc3RhdGljIGZpbmFs
IGludCBEM0RGTVRfWDhSOEc4QjggPSAyMjsNCiAgICAvLyBUaGUgZm9sbG93aW5nIGFyZSBhbHNv
IHZhbGlkIEZvdXJDQyBjb2Rlcw0KICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEQzREZNVF9E
WFQxID0gMHgzMTU0NTg0NDsNCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEM0RGTVRfRFhU
MiA9IDB4MzI1NDU4NDQ7DQogICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRDNERk1UX0RYVDMg
PSAweDMzNTQ1ODQ0Ow0KICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEQzREZNVF9EWFQ0ID0g
MHgzNDU0NTg0NDsNCiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEM0RGTVRfRFhUNSA9IDB4
MzU1NDU4NDQ7DQoNCiAgICAvKioNCiAgICAgKiBSZWFkcyBhIERpcmVjdERyYXcgc3VyZmFjZSBm
cm9tIHRoZSBzcGVjaWZpZWQgZmlsZSBuYW1lLA0KICAgICAqIHJldHVybmluZyB0aGUgcmVzdWx0
aW5nIEREU0ltYWdlLg0KICAgICAqIEBwYXJhbSBmaWxlbmFtZSBGaWxlIG5hbWUNCiAgICAgKiBA
cmV0dXJuIEREUyBpbWFnZSBvYmplY3QNCiAgICAgKiBAdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRp
b24gSS9PIGV4Y2VwdGlvbg0KICAgICAqLw0KICAgIHB1YmxpYyBzdGF0aWMgRERTSW1hZ2UgcmVh
ZCggU3RyaW5nIGZpbGVuYW1lICkgdGhyb3dzIElPRXhjZXB0aW9uIHsNCiAgICAgICAgcmV0dXJu
IHJlYWQoIG5ldyBGaWxlKCBmaWxlbmFtZSApICk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICog
UmVhZHMgYSBEaXJlY3REcmF3IHN1cmZhY2UgZnJvbSB0aGUgc3BlY2lmaWVkIGZpbGUsIHJldHVy
bmluZw0KICAgICAqIHRoZSByZXN1bHRpbmcgRERTSW1hZ2UuDQogICAgICogQHBhcmFtIGZpbGUg
RmlsZSBvYmplY3QNCiAgICAgKiBAcmV0dXJuIEREUyBpbWFnZSBvYmplY3QNCiAgICAgKiBAdGhy
b3dzIGphdmEuaW8uSU9FeGNlcHRpb24gSS9PIGV4Y2VwdGlvbg0KICAgICAqLw0KICAgIHB1Ymxp
YyBzdGF0aWMgRERTSW1hZ2UgcmVhZCggRmlsZSBmaWxlICkgdGhyb3dzIElPRXhjZXB0aW9uIHsN
CiAgICAgICAgRERTSW1hZ2UgaW1hZ2UgPSBuZXcgRERTSW1hZ2UoKTsNCiAgICAgICAgaW1hZ2Uu
cmVhZEZyb21GaWxlKCBmaWxlICk7DQogICAgICAgIHJldHVybiBpbWFnZTsNCiAgICB9DQoNCiAg
ICAvKioNCiAgICAgKiBSZWFkcyBhIERpcmVjdERyYXcgc3VyZmFjZSBmcm9tIHRoZSBzcGVjaWZp
ZWQgQnl0ZUJ1ZmZlciwgcmV0dXJuaW5nDQogICAgICogdGhlIHJlc3VsdGluZyBERFNJbWFnZS4N
CiAgICAgKiBAcGFyYW0gYnVmIElucHV0IGRhdGENCiAgICAgKiBAcmV0dXJuIEREUyBpbWFnZSBv
YmplY3QNCiAgICAgKiBAdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gSS9PIGV4Y2VwdGlvbg0K
ICAgICAqLw0KICAgIHB1YmxpYyBzdGF0aWMgRERTSW1hZ2UgcmVhZCggQnl0ZUJ1ZmZlciBidWYg
KSB0aHJvd3MgSU9FeGNlcHRpb24gew0KICAgICAgICBERFNJbWFnZSBpbWFnZSA9IG5ldyBERFNJ
bWFnZSgpOw0KICAgICAgICBpbWFnZS5yZWFkRnJvbUJ1ZmZlciggYnVmICk7DQogICAgICAgIHJl
dHVybiBpbWFnZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBDbG9zZXMgb3BlbiBmaWxlcyBh
bmQgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3Blbg0KICAgICAqIEREU0ltYWdlLiBO
byBvdGhlciBtZXRob2RzIG1heSBiZSBjYWxsZWQgb24gdGhpcyBvYmplY3Qgb25jZQ0KICAgICAq
IHRoaXMgaXMgY2FsbGVkLg0KICAgICAqLw0KICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgew0KICAg
ICAgICB0cnkgew0KICAgICAgICAgICAgaWYoIGNoYW4gIT0gbnVsbCApIHsNCiAgICAgICAgICAg
ICAgICBjaGFuLmNsb3NlKCk7DQogICAgICAgICAgICAgICAgY2hhbiA9IG51bGw7DQogICAgICAg
ICAgICB9DQogICAgICAgICAgICBpZiggZmlzICE9IG51bGwgKSB7DQogICAgICAgICAgICAgICAg
ZmlzLmNsb3NlKCk7DQogICAgICAgICAgICAgICAgZmlzID0gbnVsbDsNCiAgICAgICAgICAgIH0N
CiAgICAgICAgICAgIGJ1ZiA9IG51bGw7DQogICAgICAgIH0gY2F0Y2goIElPRXhjZXB0aW9uIGUg
KSB7DQogICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOw0KICAgICAgICB9DQogICAgfQ0K
DQogICAgLyoqDQogICAgICogQ3JlYXRlcyBhIG5ldyBERFNJbWFnZSBmcm9tIGRhdGEgc3VwcGxp
ZWQgYnkgdGhlIHVzZXIuIFRoZQ0KICAgICAqIHJlc3VsdGluZyBERFNJbWFnZSBjYW4gYmUgd3Jp
dHRlbiB0byBkaXNrIHVzaW5nIHRoZSB3cml0ZSgpDQogICAgICogbWV0aG9kLg0KICAgICAqDQog
ICAgICogQHBhcmFtIGQzZEZvcm1hdCAgdGhlIEQzREZNVF8gY29uc3RhbnQgZGVzY3JpYmluZyB0
aGUgZGF0YTsgaXQgaXMNCiAgICAgKiAgICAgICAgICAgICAgICAgICBhc3N1bWVkIHRoYXQgaXQg
aXMgcGFja2VkIHRpZ2h0bHkNCiAgICAgKiBAcGFyYW0gd2lkdGggICAgICB0aGUgd2lkdGggaW4g
cGl4ZWxzIG9mIHRoZSB0b3Btb3N0IG1pcG1hcCBpbWFnZQ0KICAgICAqIEBwYXJhbSBoZWlnaHQg
ICAgIHRoZSBoZWlnaHQgaW4gcGl4ZWxzIG9mIHRoZSB0b3Btb3N0IG1pcG1hcCBpbWFnZQ0KICAg
ICAqIEBwYXJhbSBtaXBtYXBEYXRhIHRoZSBkYXRhIGZvciBlYWNoIG1pcG1hcCBsZXZlbCBvZiB0
aGUgcmVzdWx0aW5nDQogICAgICogICAgICAgICAgICAgICAgICAgRERTSW1hZ2U7IGVpdGhlciBv
bmx5IG9uZSBtaXBtYXAgbGV2ZWwgc2hvdWxkDQogICAgICogICAgICAgICAgICAgICAgICAgYmUg
c3BlY2lmaWVkLCBvciB0aGV5IGFsbCBtdXN0IGJlDQogICAgICogQHRocm93cyBJbGxlZ2FsQXJn
dW1lbnRFeGNlcHRpb24gaWYgdGhlIGRhdGEgZG9lcyBub3QgbWF0Y2ggdGhlDQogICAgICogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGFyZ3VtZW50cw0KICAgICAq
IEByZXR1cm4gRERTIGltYWdlIG9iamVjdA0KICAgICAqLw0KICAgIHB1YmxpYyBzdGF0aWMgRERT
SW1hZ2UgY3JlYXRlRnJvbURhdGEoIGludCBkM2RGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdo
dCwgQnl0ZUJ1ZmZlcltdIG1pcG1hcERhdGEgKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0
aW9uIHsNCiAgICAgICAgRERTSW1hZ2UgaW1hZ2UgPSBuZXcgRERTSW1hZ2UoKTsNCiAgICAgICAg
aW1hZ2UuaW5pdEZyb21EYXRhKCBkM2RGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIG1pcG1hcERhdGEg
KTsNCiAgICAgICAgcmV0dXJuIGltYWdlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERldGVy
bWluZXMgZnJvbSB0aGUgbWFnaWMgbnVtYmVyIHdoZXRoZXIgdGhlIGdpdmVuIElucHV0U3RyZWFt
DQogICAgICogcG9pbnRzIHRvIGEgRERTIGltYWdlLiBUaGUgZ2l2ZW4gSW5wdXRTdHJlYW0gbXVz
dCByZXR1cm4gdHJ1ZQ0KICAgICAqIGZyb20gbWFya1N1cHBvcnRlZCgpIGFuZCBzdXBwb3J0IGEg
bWluaW11bSBvZiBmb3VyIGJ5dGVzIG9mDQogICAgICogcmVhZC1haGVhZC4NCiAgICAgKiBAcGFy
YW0gaW4gU3RyZWFtIHRvIGNoZWNrDQogICAgICogQHJldHVybiB0cnVlIGlmIGlucHV0IHN0cmVh
bSBpcyBERFMgaW1hZ2Ugb3IgZmFsc2Ugb3RoZXJ3aXNlDQogICAgICogQHRocm93cyBqYXZhLmlv
LklPRXhjZXB0aW9uIEkvTyBleGNlcHRpb24NCiAgICAgKi8NCiAgICBwdWJsaWMgc3RhdGljIGJv
b2xlYW4gaXNERFNJbWFnZSggSW5wdXRTdHJlYW0gaW4gKSB0aHJvd3MgSU9FeGNlcHRpb24gew0K
ICAgICAgICBpZiggISggaW4gaW5zdGFuY2VvZiBCdWZmZXJlZElucHV0U3RyZWFtICkgKSB7DQog
ICAgICAgICAgICBpbiA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKCBpbiApOw0KICAgICAgICB9
DQogICAgICAgIGlmKCAhaW4ubWFya1N1cHBvcnRlZCgpICkgew0KICAgICAgICAgICAgdGhyb3cg
bmV3IElPRXhjZXB0aW9uKCAiQ2FuIG5vdCB0ZXN0IG5vbi1kZXN0cnVjdGl2ZWx5IHdoZXRoZXIg
Z2l2ZW4gSW5wdXRTdHJlYW0gaXMgYSBERFMgaW1hZ2UiICk7DQogICAgICAgIH0NCiAgICAgICAg
aW4ubWFyayggNCApOw0KICAgICAgICBpbnQgbWFnaWMgPSAwOw0KICAgICAgICBmb3IoIGludCBp
ID0gMDsgaSA8IDQ7IGkrKyApIHsNCiAgICAgICAgICAgIGludCB0bXAgPSBpbi5yZWFkKCk7DQog
ICAgICAgICAgICBpZiggdG1wIDwgMCApIHsNCiAgICAgICAgICAgICAgICBpbi5yZXNldCgpOw0K
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAg
IG1hZ2ljID0gKCAoIG1hZ2ljID4+PiA4ICkgfCAoIHRtcCA8PCAyNCApICk7DQogICAgICAgIH0N
CiAgICAgICAgaW4ucmVzZXQoKTsNCiAgICAgICAgcmV0dXJuICggbWFnaWMgPT0gTUFHSUMgKTsN
CiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBXcml0ZXMgdGhpcyBERFNJbWFnZSB0byB0aGUgc3Bl
Y2lmaWVkIGZpbGUgbmFtZS4NCiAgICAgKiBAcGFyYW0gZmlsZW5hbWUgRmlsZSBuYW1lIHRvIHdy
aXRlIGluDQogICAgICogQHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIEkvTyBleGNlcHRpb24N
CiAgICAgKi8NCiAgICBwdWJsaWMgdm9pZCB3cml0ZSggU3RyaW5nIGZpbGVuYW1lICkgdGhyb3dz
IElPRXhjZXB0aW9uIHsNCiAgICAgICAgd3JpdGUoIG5ldyBGaWxlKCBmaWxlbmFtZSApICk7DQog
ICAgfQ0KDQogICAgLyoqDQogICAgICogV3JpdGVzIHRoaXMgRERTSW1hZ2UgdG8gdGhlIHNwZWNp
ZmllZCBmaWxlIG5hbWUuDQogICAgICogQHBhcmFtIGZpbGUgRmlsZSBvYmplY3QgdG8gd3JpdGUg
aW4NCiAgICAgKiBAdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gSS9PIGV4Y2VwdGlvbg0KICAg
ICAqLw0KICAgIHB1YmxpYyB2b2lkIHdyaXRlKCBGaWxlIGZpbGUgKSB0aHJvd3MgSU9FeGNlcHRp
b24gew0KICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIHN0cmVhbSA9IG5ldyBGaWxlT3V0cHV0U3Ry
ZWFtKCBmaWxlICk7DQogICAgICAgIEZpbGVDaGFubmVsIGNoYW4gPSBzdHJlYW0uZ2V0Q2hhbm5l
bCgpOw0KICAgICAgICAvLyBDcmVhdGUgQnl0ZUJ1ZmZlciBmb3IgaGVhZGVyIGluIGNhc2UgdGhl
IHN0YXJ0IG9mIG91cg0KICAgICAgICAvLyBCeXRlQnVmZmVyIGlzbid0IGFjdHVhbGx5IG1lbW9y
eS1tYXBwZWQNCiAgICAgICAgQnl0ZUJ1ZmZlciBoZHIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlKCBI
ZWFkZXIud3JpdHRlblNpemUoKSApOw0KICAgICAgICBoZHIub3JkZXIoIEJ5dGVPcmRlci5MSVRU
TEVfRU5ESUFOICk7DQogICAgICAgIGhlYWRlci53cml0ZSggaGRyICk7DQogICAgICAgIGhkci5y
ZXdpbmQoKTsNCiAgICAgICAgY2hhbi53cml0ZSggaGRyICk7DQogICAgICAgIGJ1Zi5wb3NpdGlv
biggSGVhZGVyLndyaXR0ZW5TaXplKCkgKTsNCiAgICAgICAgY2hhbi53cml0ZSggYnVmICk7DQog
ICAgICAgIGNoYW4uZm9yY2UoIHRydWUgKTsNCiAgICAgICAgY2hhbi5jbG9zZSgpOw0KICAgICAg
ICBzdHJlYW0uY2xvc2UoKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBUZXN0IGZvciBwcmVz
ZW5jZS9hYnNlbmNlIG9mIHN1cmZhY2UgZGVzY3JpcHRpb24gZmxhZ3MgKEREU0RfKikNCiAgICAg
KiBAcGFyYW0gZmxhZyBERFNEXyogZmxhZ3Mgc2V0IHRvIHRlc3QNCiAgICAgKiBAcmV0dXJuIHRy
dWUgaWYgZmxhZyBwcmVzZW50IG9yIGZhbHNlIG90aGVyd2lzZQ0KICAgICAqLw0KICAgIHB1Ymxp
YyBib29sZWFuIGlzU3VyZmFjZURlc2NGbGFnU2V0KCBpbnQgZmxhZyApIHsNCiAgICAgICAgcmV0
dXJuICggKCBoZWFkZXIuZmxhZ3MgJiBmbGFnICkgIT0gMCApOw0KICAgIH0NCg0KICAgIC8qKg0K
ICAgICAqIFRlc3QgZm9yIHByZXNlbmNlL2Fic2VuY2Ugb2YgcGl4ZWwgZm9ybWF0IGZsYWdzIChE
RFBGXyopDQogICAgICovDQogICAgcHVibGljIGJvb2xlYW4gaXNQaXhlbEZvcm1hdEZsYWdTZXQo
IGludCBmbGFnICkgew0KICAgICAgICByZXR1cm4gKCAoIGhlYWRlci5wZkZsYWdzICYgZmxhZyAp
ICE9IDAgKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBHZXRzIHRoZSBwaXhlbCBmb3JtYXQg
b2YgdGhpcyB0ZXh0dXJlIChEM0RGTVRfKikgYmFzZWQgb24gc29tZQ0KICAgICAqIGhldXJpc3Rp
Y3MuIFJldHVybnMgRDNERk1UX1VOS05PV04gaWYgY291bGQgbm90IHJlY29nbml6ZSB0aGUNCiAg
ICAgKiBwaXhlbCBmb3JtYXQuDQogICAgICovDQogICAgcHVibGljIGludCBnZXRQaXhlbEZvcm1h
dCgpIHsNCiAgICAgICAgaWYoIGlzQ29tcHJlc3NlZCgpICkgew0KICAgICAgICAgICAgcmV0dXJu
IGdldENvbXByZXNzaW9uRm9ybWF0KCk7DQogICAgICAgIH0gZWxzZSBpZiggaXNQaXhlbEZvcm1h
dEZsYWdTZXQoIEREUEZfUkdCICkgKSB7DQogICAgICAgICAgICBpZiggaXNQaXhlbEZvcm1hdEZs
YWdTZXQoIEREUEZfQUxQSEFQSVhFTFMgKSApIHsNCiAgICAgICAgICAgICAgICBpZiggZ2V0RGVw
dGgoKSA9PSAzMiAmJg0KICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLnBmUkJpdE1hc2sg
PT0gMHgwMEZGMDAwMCAmJg0KICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLnBmR0JpdE1h
c2sgPT0gMHgwMDAwRkYwMCAmJg0KICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLnBmQkJp
dE1hc2sgPT0gMHgwMDAwMDBGRiAmJg0KICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLnBm
QUJpdE1hc2sgPT0gMHhGRjAwMDAwMCApIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEQz
REZNVF9BOFI4RzhCODsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0K
ICAgICAgICAgICAgICAgIGlmKCBnZXREZXB0aCgpID09IDI0ICYmDQogICAgICAgICAgICAgICAg
ICAgICAgICBoZWFkZXIucGZSQml0TWFzayA9PSAweDAwRkYwMDAwICYmDQogICAgICAgICAgICAg
ICAgICAgICAgICBoZWFkZXIucGZHQml0TWFzayA9PSAweDAwMDBGRjAwICYmDQogICAgICAgICAg
ICAgICAgICAgICAgICBoZWFkZXIucGZCQml0TWFzayA9PSAweDAwMDAwMEZGICkgew0KICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gRDNERk1UX1I4RzhCODsNCiAgICAgICAgICAgICAgICB9IGVs
c2UgaWYoIGdldERlcHRoKCkgPT0gMzIgJiYNCiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRl
ci5wZlJCaXRNYXNrID09IDB4MDBGRjAwMDAgJiYNCiAgICAgICAgICAgICAgICAgICAgICAgIGhl
YWRlci5wZkdCaXRNYXNrID09IDB4MDAwMEZGMDAgJiYNCiAgICAgICAgICAgICAgICAgICAgICAg
IGhlYWRlci5wZkJCaXRNYXNrID09IDB4MDAwMDAwRkYgKSB7DQogICAgICAgICAgICAgICAgICAg
IHJldHVybiBEM0RGTVRfWDhSOEc4Qjg7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
fQ0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dOOw0KICAgIH0NCg0K
ICAgIC8qKg0KICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgdGV4dHVyZSBpcyBjdWJlbWFw
DQogICAgICogQHJldHVybiB0cnVlIGlmIGN1YmVtYXAgb3IgZmFsc2Ugb3RoZXJ3aXNlDQogICAg
ICovDQogICAgcHVibGljIGJvb2xlYW4gaXNDdWJlbWFwKCkgew0KICAgICAgICByZXR1cm4gKCAo
IGhlYWRlci5kZHNDYXBzMSAmIEREU0NBUFNfQ09NUExFWCApICE9IDAgKSAmJiAoICggaGVhZGVy
LmRkc0NhcHMyICYgRERTQ0FQUzJfQ1VCRU1BUCApICE9IDAgKTsNCiAgICB9DQoNCiAgICAvKioN
CiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlIHRoaXMgY3ViZW1hcCBzaWRlIHByZXNlbnQNCiAgICAg
KiBAcGFyYW0gc2lkZSBTaWRlIHRvIHRlc3QNCiAgICAgKiBAcmV0dXJuIHRydWUgaWYgc2lkZSBw
cmVzZW50IG9yIGZhbHNlIG90aGVyd2lzZQ0KICAgICAqLw0KICAgIHB1YmxpYyBib29sZWFuIGlz
Q3ViZW1hcFNpZGVQcmVzZW50KCBpbnQgc2lkZSkgew0KICAgICAgICByZXR1cm4gaXNDdWJlbWFw
KCkgJiYgKCBoZWFkZXIuZGRzQ2FwczIgJiBzaWRlICkgIT0gMDsNCiAgICB9DQoNCiAgICAvKioN
CiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIHRleHR1cmUgaXMgY29tcHJlc3NlZC4NCiAg
ICAgKi8NCiAgICBwdWJsaWMgYm9vbGVhbiBpc0NvbXByZXNzZWQoKSB7DQogICAgICAgIHJldHVy
biAoIGlzUGl4ZWxGb3JtYXRGbGFnU2V0KCBERFBGX0ZPVVJDQyApICk7DQogICAgfQ0KDQogICAg
LyoqDQogICAgICogSWYgdGhpcyBzdXJmYWNlIGlzIGNvbXByZXNzZWQsIHJldHVybnMgdGhlIGtp
bmQgb2YgY29tcHJlc3Npb24NCiAgICAgKiB1c2VkIChEWFQxLi5EWFQ1KS4NCiAgICAgKi8NCiAg
ICBwdWJsaWMgaW50IGdldENvbXByZXNzaW9uRm9ybWF0KCkgew0KICAgICAgICByZXR1cm4gaGVh
ZGVyLnBmRm91ckNDOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFdpZHRoIG9mIHRoZSB0ZXh0
dXJlIChvciB0aGUgdG9wLW1vc3QgbWlwbWFwIGlmIG1pcG1hcHMgYXJlDQogICAgICogcHJlc2Vu
dCkNCiAgICAgKi8NCiAgICBwdWJsaWMgaW50IGdldFdpZHRoKCkgew0KICAgICAgICByZXR1cm4g
aGVhZGVyLndpZHRoOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEhlaWdodCBvZiB0aGUgdGV4
dHVyZSAob3IgdGhlIHRvcC1tb3N0IG1pcG1hcCBpZiBtaXBtYXBzIGFyZQ0KICAgICAqIHByZXNl
bnQpDQogICAgICovDQogICAgcHVibGljIGludCBnZXRIZWlnaHQoKSB7DQogICAgICAgIHJldHVy
biBoZWFkZXIuaGVpZ2h0Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFRvdGFsIG51bWJlciBv
ZiBiaXRzIHBlciBwaXhlbC4gT25seSB2YWxpZCBpZiBERFBGX1JHQiBpcw0KICAgICAqIHByZXNl
bnQuIEZvciBBOFI4RzhCOCwgd291bGQgYmUgMzIuDQogICAgICovDQogICAgcHVibGljIGludCBn
ZXREZXB0aCgpIHsNCiAgICAgICAgcmV0dXJuIGhlYWRlci5wZlJHQkJpdENvdW50Ow0KICAgIH0N
Cg0KICAgIC8qKg0KICAgICAqIE51bWJlciBvZiBtaXAgbWFwcyBpbiB0aGUgdGV4dHVyZQ0KICAg
ICAqLw0KICAgIHB1YmxpYyBpbnQgZ2V0TnVtTWlwTWFwcygpIHsNCiAgICAgICAgaWYoICFpc1N1
cmZhY2VEZXNjRmxhZ1NldCggRERTRF9NSVBNQVBDT1VOVCApICkgew0KICAgICAgICAgICAgcmV0
dXJuIDA7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGhlYWRlci5taXBNYXBDb3VudE9yQXV4
Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEdldHMgdGhlIDxpPmk8L2k+dGggbWlwbWFwIGRh
dGEgKDAuLmdldE51bU1pcE1hcHMoKSAtIDEpDQogICAgICogQHBhcmFtIG1hcCBNaXBtYXAgaW5k
ZXgNCiAgICAgKiBAcmV0dXJuIEltYWdlIG9iamVjdA0KICAgICAqLw0KICAgIHB1YmxpYyBJbWFn
ZUluZm8gZ2V0TWlwTWFwKCBpbnQgbWFwICkgew0KICAgICAgICByZXR1cm4gZ2V0TWlwTWFwKCAw
LCBtYXAgKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBHZXRzIHRoZSA8aT5pPC9pPnRoIG1p
cG1hcCBkYXRhICgwLi5nZXROdW1NaXBNYXBzKCkgLSAxKQ0KICAgICAqIEBwYXJhbSBzaWRlIEN1
YmVtYXAgc2lkZSBvciAwIGZvciAyRCB0ZXh0dXJlDQogICAgICogQHBhcmFtIG1hcCBNaXBtYXAg
aW5kZXgNCiAgICAgKiBAcmV0dXJuIEltYWdlIG9iamVjdA0KICAgICAqLw0KICAgIHB1YmxpYyBJ
bWFnZUluZm8gZ2V0TWlwTWFwKCBpbnQgc2lkZSwgaW50IG1hcCApIHsNCiAgICAgICAgaWYgKCAh
aXNDdWJlbWFwKCkgJiYgKCBzaWRlICE9IDAgKSApIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBS
dW50aW1lRXhjZXB0aW9uKCAiSWxsZWdhbCBzaWRlIGZvciAyRCB0ZXh0dXJlOiAiICsgc2lkZSAp
Ow0KICAgICAgICB9DQogICAgICAgIGlmICggaXNDdWJlbWFwKCkgJiYgIWlzQ3ViZW1hcFNpZGVQ
cmVzZW50KCBzaWRlICkgKSB7DQogICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
biggIklsbGVnYWwgc2lkZSwgc2lkZSBub3QgcHJlc2VudDogIiArIHNpZGUgKTsNCiAgICAgICAg
fQ0KICAgICAgICBpZiggZ2V0TnVtTWlwTWFwcygpID4gMCAmJiAoICggbWFwIDwgMCApIHx8ICgg
bWFwID49IGdldE51bU1pcE1hcHMoKSApICkgKSB7DQogICAgICAgICAgICB0aHJvdyBuZXcgUnVu
dGltZUV4Y2VwdGlvbiggIklsbGVnYWwgbWlwbWFwIG51bWJlciAiICsgbWFwICsgIiAoMC4uIiAr
ICggZ2V0TnVtTWlwTWFwcygpIC0gMSApICsgIikiICk7DQogICAgICAgIH0NCg0KICAgICAgICAv
LyBGaWd1cmUgb3V0IGhvdyBmYXIgdG8gc2Vlaw0KICAgICAgICBpbnQgc2VlayA9IEhlYWRlci53
cml0dGVuU2l6ZSgpOw0KICAgICAgICBpZiAoIGlzQ3ViZW1hcCgpICkgew0KICAgICAgICAgICAg
c2VlayArPSBzaWRlU2hpZnRJbkJ5dGVzKCBzaWRlICk7DQogICAgICAgIH0NCiAgICAgICAgZm9y
KCBpbnQgaSA9IDA7IGkgPCBtYXA7IGkrKyApIHsNCiAgICAgICAgICAgIHNlZWsgKz0gbWlwTWFw
U2l6ZUluQnl0ZXMoIGkgKTsNCiAgICAgICAgfQ0KICAgICAgICBidWYubGltaXQoIHNlZWsgKyBt
aXBNYXBTaXplSW5CeXRlcyggbWFwICkgKTsNCiAgICAgICAgYnVmLnBvc2l0aW9uKCBzZWVrICk7
DQogICAgICAgIEJ5dGVCdWZmZXIgbmV4dCA9IGJ1Zi5zbGljZSgpOw0KICAgICAgICBidWYucG9z
aXRpb24oIDAgKTsNCiAgICAgICAgYnVmLmxpbWl0KCBidWYuY2FwYWNpdHkoKSApOw0KICAgICAg
ICByZXR1cm4gbmV3IEltYWdlSW5mbyggbmV4dCwgbWlwTWFwV2lkdGgoIG1hcCApLCBtaXBNYXBI
ZWlnaHQoIG1hcCApLCBpc0NvbXByZXNzZWQoKSwgZ2V0Q29tcHJlc3Npb25Gb3JtYXQoKSApOw0K
ICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgSW1hZ2VJbmZvcyBj
b3JyZXNwb25kaW5nIHRvIGFsbCBtaXBtYXANCiAgICAgKiBsZXZlbHMgb2YgdGhpcyBERFMgZmls
ZS4NCiAgICAgKiBAcmV0dXJuIE1pcG1hcCBpbWFnZSBvYmplY3RzIHNldA0KICAgICAqLw0KICAg
IHB1YmxpYyBJbWFnZUluZm9bXSBnZXRBbGxNaXBNYXBzKCkgew0KICAgICAgICByZXR1cm4gZ2V0
QWxsTWlwTWFwcyggMCApOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFJldHVybnMgYW4gYXJy
YXkgb2YgSW1hZ2VJbmZvcyBjb3JyZXNwb25kaW5nIHRvIGFsbCBtaXBtYXANCiAgICAgKiBsZXZl
bHMgb2YgdGhpcyBERFMgZmlsZS4NCiAgICAgKiBAcGFyYW0gc2lkZSBDdWJlbWFwIHNpZGUgb3Ig
MCBmb3IgMkQgdGV4dHVyZQ0KICAgICAqIEByZXR1cm4gTWlwbWFwIGltYWdlIG9iamVjdHMgc2V0
DQogICAgICovDQogICAgcHVibGljIEltYWdlSW5mb1tdIGdldEFsbE1pcE1hcHMoIGludCBzaWRl
ICkgew0KICAgICAgICBpbnQgbnVtTGV2ZWxzID0gZ2V0TnVtTWlwTWFwcygpOw0KICAgICAgICBp
ZiggbnVtTGV2ZWxzID09IDAgKSB7DQogICAgICAgICAgICBudW1MZXZlbHMgPSAxOw0KICAgICAg
ICB9DQogICAgICAgIEltYWdlSW5mb1tdIHJlc3VsdCA9IG5ldyBJbWFnZUluZm9bbnVtTGV2ZWxz
XTsNCiAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBudW1MZXZlbHM7IGkrKyApIHsNCiAgICAg
ICAgICAgIHJlc3VsdFtpXSA9IGdldE1pcE1hcCggc2lkZSwgaSApOw0KICAgICAgICB9DQogICAg
ICAgIHJldHVybiByZXN1bHQ7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQ29udmVydHMgZS5n
LiBEWFQxIGNvbXByZXNzaW9uIGZvcm1hdCBjb25zdGFudCAoc2VlIHtAbGluaw0KICAgICAqICNn
ZXRDb21wcmVzc2lvbkZvcm1hdH0pIGludG8gIkRYVDEiLg0KICAgICAqIEBwYXJhbSBjb21wcmVz
c2lvbkZvcm1hdCBDb21wcmVzc2lvbiBmb3JtYXQgY29uc3RhbnQNCiAgICAgKiBAcmV0dXJuIFN0
cmluZyBmb3JtYXQgY29kZQ0KICAgICAqLw0KICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENv
bXByZXNzaW9uRm9ybWF0TmFtZSggaW50IGNvbXByZXNzaW9uRm9ybWF0ICkgew0KICAgICAgICBT
dHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOw0KICAgICAgICBmb3IoIGludCBp
ID0gMDsgaSA8IDQ7IGkrKyApIHsNCiAgICAgICAgICAgIGNoYXIgYyA9ICggY2hhciApICggY29t
cHJlc3Npb25Gb3JtYXQgJiAweEZGICk7DQogICAgICAgICAgICBidWYuYXBwZW5kKCBjICk7DQog
ICAgICAgICAgICBjb21wcmVzc2lvbkZvcm1hdCA9IGNvbXByZXNzaW9uRm9ybWF0ID4+IDg7DQog
ICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOw0KICAgIH0NCg0KICAgIHB1
YmxpYyB2b2lkIGRlYnVnUHJpbnQoKSB7DQogICAgICAgIFByaW50U3RyZWFtIHR0eSA9IFN5c3Rl
bS5lcnI7DQogICAgICAgIHR0eS5wcmludGxuKCAiQ29tcHJlc3NlZCB0ZXh0dXJlOiAiICsgaXND
b21wcmVzc2VkKCkgKTsNCiAgICAgICAgaWYoIGlzQ29tcHJlc3NlZCgpICkgew0KICAgICAgICAg
ICAgaW50IGZtdCA9IGdldENvbXByZXNzaW9uRm9ybWF0KCk7DQogICAgICAgICAgICBTdHJpbmcg
bmFtZSA9IGdldENvbXByZXNzaW9uRm9ybWF0TmFtZSggZm10ICk7DQogICAgICAgICAgICB0dHku
cHJpbnRsbiggIkNvbXByZXNzaW9uIGZvcm1hdDogMHgiICsgSW50ZWdlci50b0hleFN0cmluZygg
Zm10ICkgKyAiICgiICsgbmFtZSArICIpIiApOw0KICAgICAgICB9DQogICAgICAgIHR0eS5wcmlu
dGxuKCAiV2lkdGg6ICIgKyBoZWFkZXIud2lkdGggKyAiIEhlaWdodDogIiArIGhlYWRlci5oZWln
aHQgKTsNCiAgICAgICAgdHR5LnByaW50bG4oICJoZWFkZXIucGl0Y2hPckxpbmVhclNpemU6ICIg
KyBoZWFkZXIucGl0Y2hPckxpbmVhclNpemUgKTsNCiAgICAgICAgdHR5LnByaW50bG4oICJoZWFk
ZXIucGZSQml0TWFzazogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyggaGVhZGVyLnBmUkJpdE1h
c2sgKSApOw0KICAgICAgICB0dHkucHJpbnRsbiggImhlYWRlci5wZkdCaXRNYXNrOiAweCIgKyBJ
bnRlZ2VyLnRvSGV4U3RyaW5nKCBoZWFkZXIucGZHQml0TWFzayApICk7DQogICAgICAgIHR0eS5w
cmludGxuKCAiaGVhZGVyLnBmQkJpdE1hc2s6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoIGhl
YWRlci5wZkJCaXRNYXNrICkgKTsNCiAgICAgICAgdHR5LnByaW50bG4oICJTdXJmYWNlRGVzYyBm
bGFnczoiICk7DQogICAgICAgIGJvb2xlYW4gcmVjb2duaXplZEFueTsNCiAgICAgICAgcmVjb2du
aXplZEFueSA9IHByaW50SWZSZWNvZ25pemVkKCB0dHksIGhlYWRlci5mbGFncywgRERTRF9DQVBT
LCAiRERTRF9DQVBTIiApOw0KICAgICAgICByZWNvZ25pemVkQW55IHw9IHByaW50SWZSZWNvZ25p
emVkKCB0dHksIGhlYWRlci5mbGFncywgRERTRF9IRUlHSFQsICJERFNEX0hFSUdIVCIgKTsNCiAg
ICAgICAgcmVjb2duaXplZEFueSB8PSBwcmludElmUmVjb2duaXplZCggdHR5LCBoZWFkZXIuZmxh
Z3MsIEREU0RfV0lEVEgsICJERFNEX1dJRFRIIiApOw0KICAgICAgICByZWNvZ25pemVkQW55IHw9
IHByaW50SWZSZWNvZ25pemVkKCB0dHksIGhlYWRlci5mbGFncywgRERTRF9QSVRDSCwgIkREU0Rf
UElUQ0giICk7DQogICAgICAgIHJlY29nbml6ZWRBbnkgfD0gcHJpbnRJZlJlY29nbml6ZWQoIHR0
eSwgaGVhZGVyLmZsYWdzLCBERFNEX0JBQ0tCVUZGRVJDT1VOVCwgIkREU0RfQkFDS0JVRkZFUkNP
VU5UIiApOw0KICAgICAgICByZWNvZ25pemVkQW55IHw9IHByaW50SWZSZWNvZ25pemVkKCB0dHks
IGhlYWRlci5mbGFncywgRERTRF9aQlVGRkVSQklUREVQVEgsICJERFNEX1pCVUZGRVJCSVRERVBU
SCIgKTsNCiAgICAgICAgcmVjb2duaXplZEFueSB8PSBwcmludElmUmVjb2duaXplZCggdHR5LCBo
ZWFkZXIuZmxhZ3MsIEREU0RfQUxQSEFCSVRERVBUSCwgIkREU0RfQUxQSEFCSVRERVBUSCIgKTsN
CiAgICAgICAgcmVjb2duaXplZEFueSB8PSBwcmludElmUmVjb2duaXplZCggdHR5LCBoZWFkZXIu
ZmxhZ3MsIEREU0RfTFBTVVJGQUNFLCAiRERTRF9MUFNVUkZBQ0UiICk7DQogICAgICAgIHJlY29n
bml6ZWRBbnkgfD0gcHJpbnRJZlJlY29nbml6ZWQoIHR0eSwgaGVhZGVyLmZsYWdzLCBERFNEX1BJ
WEVMRk9STUFULCAiRERTRF9QSVhFTEZPUk1BVCIgKTsNCiAgICAgICAgcmVjb2duaXplZEFueSB8
PSBwcmludElmUmVjb2duaXplZCggdHR5LCBoZWFkZXIuZmxhZ3MsIEREU0RfTUlQTUFQQ09VTlQs
ICJERFNEX01JUE1BUENPVU5UIiApOw0KICAgICAgICByZWNvZ25pemVkQW55IHw9IHByaW50SWZS
ZWNvZ25pemVkKCB0dHksIGhlYWRlci5mbGFncywgRERTRF9MSU5FQVJTSVpFLCAiRERTRF9MSU5F
QVJTSVpFIiApOw0KICAgICAgICByZWNvZ25pemVkQW55IHw9IHByaW50SWZSZWNvZ25pemVkKCB0
dHksIGhlYWRlci5mbGFncywgRERTRF9ERVBUSCwgIkREU0RfREVQVEgiICk7DQogICAgICAgIGlm
KCAhcmVjb2duaXplZEFueSApIHsNCiAgICAgICAgICAgIHR0eS5wcmludGxuKCAiKG5vbmUpIiAp
Ow0KICAgICAgICB9DQogICAgICAgIHR0eS5wcmludGxuKCAiUmF3IFN1cmZhY2VEZXNjIGZsYWdz
OiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKCBoZWFkZXIuZmxhZ3MgKSApOw0KICAgICAgICB0
dHkucHJpbnRsbiggIlBpeGVsIGZvcm1hdCBmbGFnczoiICk7DQogICAgICAgIHJlY29nbml6ZWRB
bnkgPSBwcmludElmUmVjb2duaXplZCggdHR5LCBoZWFkZXIucGZGbGFncywgRERQRl9BTFBIQVBJ
WEVMUywgIkREUEZfQUxQSEFQSVhFTFMiICk7DQogICAgICAgIHJlY29nbml6ZWRBbnkgfD0gcHJp
bnRJZlJlY29nbml6ZWQoIHR0eSwgaGVhZGVyLnBmRmxhZ3MsIEREUEZfQUxQSEEsICJERFBGX0FM
UEhBIiApOw0KICAgICAgICByZWNvZ25pemVkQW55IHw9IHByaW50SWZSZWNvZ25pemVkKCB0dHks
IGhlYWRlci5wZkZsYWdzLCBERFBGX0ZPVVJDQywgIkREUEZfRk9VUkNDIiApOw0KICAgICAgICBy
ZWNvZ25pemVkQW55IHw9IHByaW50SWZSZWNvZ25pemVkKCB0dHksIGhlYWRlci5wZkZsYWdzLCBE
RFBGX1BBTEVUVEVJTkRFWEVENCwgIkREUEZfUEFMRVRURUlOREVYRUQ0IiApOw0KICAgICAgICBy
ZWNvZ25pemVkQW55IHw9IHByaW50SWZSZWNvZ25pemVkKCB0dHksIGhlYWRlci5wZkZsYWdzLCBE
RFBGX1BBTEVUVEVJTkRFWEVEVE84LCAiRERQRl9QQUxFVFRFSU5ERVhFRFRPOCIgKTsNCiAgICAg
ICAgcmVjb2duaXplZEFueSB8PSBwcmludElmUmVjb2duaXplZCggdHR5LCBoZWFkZXIucGZGbGFn
cywgRERQRl9QQUxFVFRFSU5ERVhFRDgsICJERFBGX1BBTEVUVEVJTkRFWEVEOCIgKTsNCiAgICAg
ICAgcmVjb2duaXplZEFueSB8PSBwcmludElmUmVjb2duaXplZCggdHR5LCBoZWFkZXIucGZGbGFn
cywgRERQRl9SR0IsICJERFBGX1JHQiIgKTsNCiAgICAgICAgcmVjb2duaXplZEFueSB8PSBwcmlu
dElmUmVjb2duaXplZCggdHR5LCBoZWFkZXIucGZGbGFncywgRERQRl9DT01QUkVTU0VELCAiRERQ
Rl9DT01QUkVTU0VEIiApOw0KICAgICAgICByZWNvZ25pemVkQW55IHw9IHByaW50SWZSZWNvZ25p
emVkKCB0dHksIGhlYWRlci5wZkZsYWdzLCBERFBGX1JHQlRPWVVWLCAiRERQRl9SR0JUT1lVViIg
KTsNCiAgICAgICAgcmVjb2duaXplZEFueSB8PSBwcmludElmUmVjb2duaXplZCggdHR5LCBoZWFk
ZXIucGZGbGFncywgRERQRl9ZVVYsICJERFBGX1lVViIgKTsNCiAgICAgICAgcmVjb2duaXplZEFu
eSB8PSBwcmludElmUmVjb2duaXplZCggdHR5LCBoZWFkZXIucGZGbGFncywgRERQRl9aQlVGRkVS
LCAiRERQRl9aQlVGRkVSIiApOw0KICAgICAgICByZWNvZ25pemVkQW55IHw9IHByaW50SWZSZWNv
Z25pemVkKCB0dHksIGhlYWRlci5wZkZsYWdzLCBERFBGX1BBTEVUVEVJTkRFWEVEMSwgIkREUEZf
UEFMRVRURUlOREVYRUQxIiApOw0KICAgICAgICByZWNvZ25pemVkQW55IHw9IHByaW50SWZSZWNv
Z25pemVkKCB0dHksIGhlYWRlci5wZkZsYWdzLCBERFBGX1BBTEVUVEVJTkRFWEVEMiwgIkREUEZf
UEFMRVRURUlOREVYRUQyIiApOw0KICAgICAgICByZWNvZ25pemVkQW55IHw9IHByaW50SWZSZWNv
Z25pemVkKCB0dHksIGhlYWRlci5wZkZsYWdzLCBERFBGX1pQSVhFTFMsICJERFBGX1pQSVhFTFMi
ICk7DQogICAgICAgIGlmKCAhcmVjb2duaXplZEFueSApIHsNCiAgICAgICAgICAgIHR0eS5wcmlu
dGxuKCAiKG5vbmUpIiApOw0KICAgICAgICB9DQogICAgICAgIHR0eS5wcmludGxuKCAiUmF3IHBp
eGVsIGZvcm1hdCBmbGFnczogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyggaGVhZGVyLnBmRmxh
Z3MgKSApOw0KICAgICAgICB0dHkucHJpbnRsbiggIkRlcHRoOiAiICsgZ2V0RGVwdGgoKSApOw0K
ICAgICAgICB0dHkucHJpbnRsbiggIk51bWJlciBvZiBtaXAgbWFwczogIiArIGdldE51bU1pcE1h
cHMoKSApOw0KICAgICAgICBpbnQgZm10ID0gZ2V0UGl4ZWxGb3JtYXQoKTsNCiAgICAgICAgdHR5
LnByaW50KCAiUGl4ZWwgZm9ybWF0OiAiICk7DQogICAgICAgIHN3aXRjaCggZm10ICkgew0KICAg
ICAgICAgICAgY2FzZSBEM0RGTVRfUjhHOEI4Og0KICAgICAgICAgICAgICAgIHR0eS5wcmludGxu
KCAiRDNERk1UX1I4RzhCOCIgKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAg
IGNhc2UgRDNERk1UX0E4UjhHOEI4Og0KICAgICAgICAgICAgICAgIHR0eS5wcmludGxuKCAiRDNE
Rk1UX0E4UjhHOEI4IiApOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2Fz
ZSBEM0RGTVRfWDhSOEc4Qjg6DQogICAgICAgICAgICAgICAgdHR5LnByaW50bG4oICJEM0RGTVRf
WDhSOEc4QjgiICk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlIEQz
REZNVF9EWFQxOg0KICAgICAgICAgICAgICAgIHR0eS5wcmludGxuKCAiRDNERk1UX0RYVDEiICk7
DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlIEQzREZNVF9EWFQyOg0K
ICAgICAgICAgICAgICAgIHR0eS5wcmludGxuKCAiRDNERk1UX0RYVDIiICk7DQogICAgICAgICAg
ICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlIEQzREZNVF9EWFQzOg0KICAgICAgICAgICAg
ICAgIHR0eS5wcmludGxuKCAiRDNERk1UX0RYVDMiICk7DQogICAgICAgICAgICAgICAgYnJlYWs7
DQogICAgICAgICAgICBjYXNlIEQzREZNVF9EWFQ0Og0KICAgICAgICAgICAgICAgIHR0eS5wcmlu
dGxuKCAiRDNERk1UX0RYVDQiICk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAg
ICBjYXNlIEQzREZNVF9EWFQ1Og0KICAgICAgICAgICAgICAgIHR0eS5wcmludGxuKCAiRDNERk1U
X0RYVDUiICk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlIEQzREZN
VF9VTktOT1dOOg0KICAgICAgICAgICAgICAgIHR0eS5wcmludGxuKCAiRDNERk1UX1VOS05PV04i
ICk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBkZWZhdWx0Og0KICAgICAg
ICAgICAgICAgIHR0eS5wcmludGxuKCAiKHVua25vd24gcGl4ZWwgZm9ybWF0ICIgKyBmbXQgKyAi
KSIgKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQ0KICAgIC8vIEludGVybmFscyBvbmx5IGJlbG93IHRoaXMgcG9pbnQNCiAg
ICAvLw0KDQogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BR0lDID0gMHgyMDUzNDQ0NDsN
Cg0KICAgIHN0YXRpYyBjbGFzcyBIZWFkZXIgew0KICAgICAgICBpbnQgc2l6ZTsgICAgICAgICAg
ICAgICAgIC8vIHNpemUgb2YgdGhlIEREU1VSRkFDRURFU0Mgc3RydWN0dXJlDQogICAgICAgIGlu
dCBmbGFnczsgICAgICAgICAgICAgICAgLy8gZGV0ZXJtaW5lcyB3aGF0IGZpZWxkcyBhcmUgdmFs
aWQNCiAgICAgICAgaW50IGhlaWdodDsgICAgICAgICAgICAgICAvLyBoZWlnaHQgb2Ygc3VyZmFj
ZSB0byBiZSBjcmVhdGVkDQogICAgICAgIGludCB3aWR0aDsgICAgICAgICAgICAgICAgLy8gd2lk
dGggb2YgaW5wdXQgc3VyZmFjZQ0KICAgICAgICBpbnQgcGl0Y2hPckxpbmVhclNpemU7DQogICAg
ICAgIGludCBiYWNrQnVmZmVyQ291bnRPckRlcHRoOw0KICAgICAgICBpbnQgbWlwTWFwQ291bnRP
ckF1eDsgICAgIC8vIG51bWJlciBvZiBtaXAtbWFwIGxldmVscyByZXF1ZXN0ZWQgKGluIHRoaXMg
Y29udGV4dCkNCiAgICAgICAgaW50IGFscGhhQml0RGVwdGg7ICAgICAgICAvLyBkZXB0aCBvZiBh
bHBoYSBidWZmZXIgcmVxdWVzdGVkDQogICAgICAgIGludCByZXNlcnZlZDE7ICAgICAgICAgICAg
Ly8gcmVzZXJ2ZWQNCiAgICAgICAgaW50IHN1cmZhY2U7ICAgICAgICAgICAgICAvLyBwb2ludGVy
IHRvIHRoZSBhc3NvY2lhdGVkIHN1cmZhY2UgbWVtb3J5DQogICAgICAgIC8vIE5PVEU6IGZvbGxv
d2luZyB0d28gZW50cmllcyBhcmUgZnJvbSBERENPTE9SS0VZIGRhdGEgc3RydWN0dXJlDQogICAg
ICAgIC8vIEFyZSBvdmVybGFpZCB3aXRoIGNvbG9yIGZvciBlbXB0eSBjdWJlbWFwIGZhY2VzICh1
bnVzZWQgaW4gdGhpcyByZWFkZXIpDQogICAgICAgIGludCBjb2xvclNwYWNlTG93VmFsdWU7DQog
ICAgICAgIGludCBjb2xvclNwYWNlSGlnaFZhbHVlOw0KICAgICAgICBpbnQgZGVzdEJsdENvbG9y
U3BhY2VMb3dWYWx1ZTsNCiAgICAgICAgaW50IGRlc3RCbHRDb2xvclNwYWNlSGlnaFZhbHVlOw0K
ICAgICAgICBpbnQgc3JjT3ZlcmxheUNvbG9yU3BhY2VMb3dWYWx1ZTsNCiAgICAgICAgaW50IHNy
Y092ZXJsYXlDb2xvclNwYWNlSGlnaFZhbHVlOw0KICAgICAgICBpbnQgc3JjQmx0Q29sb3JTcGFj
ZUxvd1ZhbHVlOw0KICAgICAgICBpbnQgc3JjQmx0Q29sb3JTcGFjZUhpZ2hWYWx1ZTsNCiAgICAg
ICAgLy8gTk9URTogZm9sbG93aW5nIGVudHJpZXMgYXJlIGZyb20gRERQSVhFTEZPUk1BVCBkYXRh
IHN0cnVjdHVyZQ0KICAgICAgICAvLyBBcmUgb3ZlcmxhaWQgd2l0aCBmbGV4aWJsZSB2ZXJ0ZXgg
Zm9ybWF0IGRlc2NyaXB0aW9uIG9mIHZlcnRleA0KICAgICAgICAvLyBidWZmZXJzICh1bnVzZWQg
aW4gdGhpcyByZWFkZXIpDQogICAgICAgIGludCBwZlNpemU7ICAgICAgICAgICAgICAgICAvLyBz
aXplIG9mIEREUElYRUxGT1JNQVQgc3RydWN0dXJlDQogICAgICAgIGludCBwZkZsYWdzOyAgICAg
ICAgICAgICAgICAvLyBwaXhlbCBmb3JtYXQgZmxhZ3MNCiAgICAgICAgaW50IHBmRm91ckNDOyAg
ICAgICAgICAgICAgIC8vIChGT1VSQ0MgY29kZSkNCiAgICAgICAgLy8gRm9sbG93aW5nIGZpdmUg
ZW50cmllcyBoYXZlIG11bHRpcGxlIGludGVycHJldGF0aW9ucywgbm90IGp1c3QNCiAgICAgICAg
Ly8gUkdCQSAoYnV0IHRoYXQncyBhbGwgd2Ugc3VwcG9ydCByaWdodCBub3cpDQogICAgICAgIGlu
dCBwZlJHQkJpdENvdW50OyAgICAgICAgICAvLyBob3cgbWFueSBiaXRzIHBlciBwaXhlbA0KICAg
ICAgICBpbnQgcGZSQml0TWFzazsgICAgICAgICAgICAgLy8gbWFzayBmb3IgcmVkIGJpdHMNCiAg
ICAgICAgaW50IHBmR0JpdE1hc2s7ICAgICAgICAgICAgIC8vIG1hc2sgZm9yIGdyZWVuIGJpdHMN
CiAgICAgICAgaW50IHBmQkJpdE1hc2s7ICAgICAgICAgICAgIC8vIG1hc2sgZm9yIGJsdWUgYml0
cw0KICAgICAgICBpbnQgcGZBQml0TWFzazsgICAgICAgICAgICAgLy8gbWFzayBmb3IgYWxwaGEg
Y2hhbm5lbA0KICAgICAgICBpbnQgZGRzQ2FwczE7ICAgICAgICAgICAgICAgLy8gVGV4dHVyZSBh
bmQgbWlwLW1hcCBmbGFncw0KICAgICAgICBpbnQgZGRzQ2FwczI7ICAgICAgICAgICAgICAgLy8g
QWR2YW5jZWQgY2FwYWJpbGl0aWVzLCBub3QgeWV0IHVzZWQNCiAgICAgICAgaW50IGRkc0NhcHNS
ZXNlcnZlZDE7DQogICAgICAgIGludCBkZHNDYXBzUmVzZXJ2ZWQyOw0KICAgICAgICBpbnQgdGV4
dHVyZVN0YWdlOyAgICAgICAgICAgLy8gc3RhZ2UgaW4gbXVsdGl0ZXh0dXJlIGNhc2NhZGUNCg0K
ICAgICAgICB2b2lkIHJlYWQoIEJ5dGVCdWZmZXIgYnVmICkgdGhyb3dzIElPRXhjZXB0aW9uIHsN
CiAgICAgICAgICAgIGludCBtYWdpYyA9IGJ1Zi5nZXRJbnQoKTsNCiAgICAgICAgICAgIGlmKCBt
YWdpYyAhPSBNQUdJQyApIHsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24o
ICJJbmNvcnJlY3QgbWFnaWMgbnVtYmVyIDB4IiArDQogICAgICAgICAgICAgICAgICAgICAgICBJ
bnRlZ2VyLnRvSGV4U3RyaW5nKCBtYWdpYyApICsNCiAgICAgICAgICAgICAgICAgICAgICAgICIg
KGV4cGVjdGVkICIgKyBNQUdJQyArICIpIiApOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAg
ICBzaXplID0gYnVmLmdldEludCgpOw0KICAgICAgICAgICAgZmxhZ3MgPSBidWYuZ2V0SW50KCk7
DQogICAgICAgICAgICBoZWlnaHQgPSBidWYuZ2V0SW50KCk7DQogICAgICAgICAgICB3aWR0aCA9
IGJ1Zi5nZXRJbnQoKTsNCiAgICAgICAgICAgIHBpdGNoT3JMaW5lYXJTaXplID0gYnVmLmdldElu
dCgpOw0KICAgICAgICAgICAgYmFja0J1ZmZlckNvdW50T3JEZXB0aCA9IGJ1Zi5nZXRJbnQoKTsN
CiAgICAgICAgICAgIG1pcE1hcENvdW50T3JBdXggPSBidWYuZ2V0SW50KCk7DQogICAgICAgICAg
ICBhbHBoYUJpdERlcHRoID0gYnVmLmdldEludCgpOw0KICAgICAgICAgICAgcmVzZXJ2ZWQxID0g
YnVmLmdldEludCgpOw0KICAgICAgICAgICAgc3VyZmFjZSA9IGJ1Zi5nZXRJbnQoKTsNCiAgICAg
ICAgICAgIGNvbG9yU3BhY2VMb3dWYWx1ZSA9IGJ1Zi5nZXRJbnQoKTsNCiAgICAgICAgICAgIGNv
bG9yU3BhY2VIaWdoVmFsdWUgPSBidWYuZ2V0SW50KCk7DQogICAgICAgICAgICBkZXN0Qmx0Q29s
b3JTcGFjZUxvd1ZhbHVlID0gYnVmLmdldEludCgpOw0KICAgICAgICAgICAgZGVzdEJsdENvbG9y
U3BhY2VIaWdoVmFsdWUgPSBidWYuZ2V0SW50KCk7DQogICAgICAgICAgICBzcmNPdmVybGF5Q29s
b3JTcGFjZUxvd1ZhbHVlID0gYnVmLmdldEludCgpOw0KICAgICAgICAgICAgc3JjT3ZlcmxheUNv
bG9yU3BhY2VIaWdoVmFsdWUgPSBidWYuZ2V0SW50KCk7DQogICAgICAgICAgICBzcmNCbHRDb2xv
clNwYWNlTG93VmFsdWUgPSBidWYuZ2V0SW50KCk7DQogICAgICAgICAgICBzcmNCbHRDb2xvclNw
YWNlSGlnaFZhbHVlID0gYnVmLmdldEludCgpOw0KICAgICAgICAgICAgcGZTaXplID0gYnVmLmdl
dEludCgpOw0KICAgICAgICAgICAgcGZGbGFncyA9IGJ1Zi5nZXRJbnQoKTsNCiAgICAgICAgICAg
IHBmRm91ckNDID0gYnVmLmdldEludCgpOw0KICAgICAgICAgICAgcGZSR0JCaXRDb3VudCA9IGJ1
Zi5nZXRJbnQoKTsNCiAgICAgICAgICAgIHBmUkJpdE1hc2sgPSBidWYuZ2V0SW50KCk7DQogICAg
ICAgICAgICBwZkdCaXRNYXNrID0gYnVmLmdldEludCgpOw0KICAgICAgICAgICAgcGZCQml0TWFz
ayA9IGJ1Zi5nZXRJbnQoKTsNCiAgICAgICAgICAgIHBmQUJpdE1hc2sgPSBidWYuZ2V0SW50KCk7
DQogICAgICAgICAgICBkZHNDYXBzMSA9IGJ1Zi5nZXRJbnQoKTsNCiAgICAgICAgICAgIGRkc0Nh
cHMyID0gYnVmLmdldEludCgpOw0KICAgICAgICAgICAgZGRzQ2Fwc1Jlc2VydmVkMSA9IGJ1Zi5n
ZXRJbnQoKTsNCiAgICAgICAgICAgIGRkc0NhcHNSZXNlcnZlZDIgPSBidWYuZ2V0SW50KCk7DQog
ICAgICAgICAgICB0ZXh0dXJlU3RhZ2UgPSBidWYuZ2V0SW50KCk7DQogICAgICAgIH0NCg0KICAg
ICAgICAvLyBidWYgbXVzdCBiZSBpbiBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXINCiAgICAgICAg
dm9pZCB3cml0ZSggQnl0ZUJ1ZmZlciBidWYgKSB7DQogICAgICAgICAgICBidWYucHV0SW50KCBN
QUdJQyApOw0KICAgICAgICAgICAgYnVmLnB1dEludCggc2l6ZSApOw0KICAgICAgICAgICAgYnVm
LnB1dEludCggZmxhZ3MgKTsNCiAgICAgICAgICAgIGJ1Zi5wdXRJbnQoIGhlaWdodCApOw0KICAg
ICAgICAgICAgYnVmLnB1dEludCggd2lkdGggKTsNCiAgICAgICAgICAgIGJ1Zi5wdXRJbnQoIHBp
dGNoT3JMaW5lYXJTaXplICk7DQogICAgICAgICAgICBidWYucHV0SW50KCBiYWNrQnVmZmVyQ291
bnRPckRlcHRoICk7DQogICAgICAgICAgICBidWYucHV0SW50KCBtaXBNYXBDb3VudE9yQXV4ICk7
DQogICAgICAgICAgICBidWYucHV0SW50KCBhbHBoYUJpdERlcHRoICk7DQogICAgICAgICAgICBi
dWYucHV0SW50KCByZXNlcnZlZDEgKTsNCiAgICAgICAgICAgIGJ1Zi5wdXRJbnQoIHN1cmZhY2Ug
KTsNCiAgICAgICAgICAgIGJ1Zi5wdXRJbnQoIGNvbG9yU3BhY2VMb3dWYWx1ZSApOw0KICAgICAg
ICAgICAgYnVmLnB1dEludCggY29sb3JTcGFjZUhpZ2hWYWx1ZSApOw0KICAgICAgICAgICAgYnVm
LnB1dEludCggZGVzdEJsdENvbG9yU3BhY2VMb3dWYWx1ZSApOw0KICAgICAgICAgICAgYnVmLnB1
dEludCggZGVzdEJsdENvbG9yU3BhY2VIaWdoVmFsdWUgKTsNCiAgICAgICAgICAgIGJ1Zi5wdXRJ
bnQoIHNyY092ZXJsYXlDb2xvclNwYWNlTG93VmFsdWUgKTsNCiAgICAgICAgICAgIGJ1Zi5wdXRJ
bnQoIHNyY092ZXJsYXlDb2xvclNwYWNlSGlnaFZhbHVlICk7DQogICAgICAgICAgICBidWYucHV0
SW50KCBzcmNCbHRDb2xvclNwYWNlTG93VmFsdWUgKTsNCiAgICAgICAgICAgIGJ1Zi5wdXRJbnQo
IHNyY0JsdENvbG9yU3BhY2VIaWdoVmFsdWUgKTsNCiAgICAgICAgICAgIGJ1Zi5wdXRJbnQoIHBm
U2l6ZSApOw0KICAgICAgICAgICAgYnVmLnB1dEludCggcGZGbGFncyApOw0KICAgICAgICAgICAg
YnVmLnB1dEludCggcGZGb3VyQ0MgKTsNCiAgICAgICAgICAgIGJ1Zi5wdXRJbnQoIHBmUkdCQml0
Q291bnQgKTsNCiAgICAgICAgICAgIGJ1Zi5wdXRJbnQoIHBmUkJpdE1hc2sgKTsNCiAgICAgICAg
ICAgIGJ1Zi5wdXRJbnQoIHBmR0JpdE1hc2sgKTsNCiAgICAgICAgICAgIGJ1Zi5wdXRJbnQoIHBm
QkJpdE1hc2sgKTsNCiAgICAgICAgICAgIGJ1Zi5wdXRJbnQoIHBmQUJpdE1hc2sgKTsNCiAgICAg
ICAgICAgIGJ1Zi5wdXRJbnQoIGRkc0NhcHMxICk7DQogICAgICAgICAgICBidWYucHV0SW50KCBk
ZHNDYXBzMiApOw0KICAgICAgICAgICAgYnVmLnB1dEludCggZGRzQ2Fwc1Jlc2VydmVkMSApOw0K
ICAgICAgICAgICAgYnVmLnB1dEludCggZGRzQ2Fwc1Jlc2VydmVkMiApOw0KICAgICAgICAgICAg
YnVmLnB1dEludCggdGV4dHVyZVN0YWdlICk7DQogICAgICAgIH0NCg0KICAgICAgICBwcml2YXRl
IHN0YXRpYyBpbnQgc2l6ZSgpIHsNCiAgICAgICAgICAgIHJldHVybiAxMjQ7DQogICAgICAgIH0N
Cg0KICAgICAgICBwcml2YXRlIHN0YXRpYyBpbnQgcGZTaXplKCkgew0KICAgICAgICAgICAgcmV0
dXJuIDMyOw0KICAgICAgICB9DQoNCiAgICAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHdyaXR0ZW5T
aXplKCkgew0KICAgICAgICAgICAgcmV0dXJuIDEyODsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAg
IHByaXZhdGUgRERTSW1hZ2UoKSB7DQogICAgfQ0KDQogICAgcHJpdmF0ZSB2b2lkIHJlYWRGcm9t
RmlsZSggRmlsZSBmaWxlICkgdGhyb3dzIElPRXhjZXB0aW9uIHsNCiAgICAgICAgZmlzID0gbmV3
IEZpbGVJbnB1dFN0cmVhbSggZmlsZSApOw0KICAgICAgICBjaGFuID0gZmlzLmdldENoYW5uZWwo
KTsNCiAgICAgICAgQnl0ZUJ1ZmZlciBidWYgPSBjaGFuLm1hcCggRmlsZUNoYW5uZWwuTWFwTW9k
ZS5SRUFEX09OTFksIDAsICggaW50ICkgZmlsZS5sZW5ndGgoKSApOw0KICAgICAgICByZWFkRnJv
bUJ1ZmZlciggYnVmICk7DQogICAgfQ0KDQogICAgcHJpdmF0ZSB2b2lkIHJlYWRGcm9tQnVmZmVy
KCBCeXRlQnVmZmVyIGJ1ZiApIHRocm93cyBJT0V4Y2VwdGlvbiB7DQogICAgICAgIHRoaXMuYnVm
ID0gYnVmOw0KICAgICAgICBidWYub3JkZXIoIEJ5dGVPcmRlci5MSVRUTEVfRU5ESUFOICk7DQog
ICAgICAgIGhlYWRlciA9IG5ldyBIZWFkZXIoKTsNCiAgICAgICAgaGVhZGVyLnJlYWQoIGJ1ZiAp
Ow0KICAgICAgICBmaXh1cEhlYWRlcigpOw0KICAgIH0NCg0KICAgIHByaXZhdGUgdm9pZCBpbml0
RnJvbURhdGEoIGludCBkM2RGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgQnl0ZUJ1ZmZl
cltdIG1pcG1hcERhdGEgKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHsNCiAgICAg
ICAgLy8gQ2hlY2sgc2l6ZSBvZiBtaXBtYXAgZGF0YSBjb21wYXJlZCBhZ2FpbnN0IGZvcm1hdCwg
d2lkdGggYW5kDQogICAgICAgIC8vIGhlaWdodA0KICAgICAgICBpbnQgdG9wbW9zdE1pcG1hcFNp
emUgPSB3aWR0aCAqIGhlaWdodDsNCiAgICAgICAgaW50IHBpdGNoT3JMaW5lYXJTaXplID0gd2lk
dGg7DQogICAgICAgIGJvb2xlYW4gaXNDb21wcmVzc2VkID0gZmFsc2U7DQogICAgICAgIHN3aXRj
aCggZDNkRm9ybWF0ICkgew0KICAgICAgICAgICAgY2FzZSBEM0RGTVRfUjhHOEI4Og0KICAgICAg
ICAgICAgICAgIHRvcG1vc3RNaXBtYXBTaXplICo9IDM7DQogICAgICAgICAgICAgICAgcGl0Y2hP
ckxpbmVhclNpemUgKj0gMzsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNh
c2UgRDNERk1UX0E4UjhHOEI4Og0KICAgICAgICAgICAgICAgIHRvcG1vc3RNaXBtYXBTaXplICo9
IDQ7DQogICAgICAgICAgICAgICAgcGl0Y2hPckxpbmVhclNpemUgKj0gNDsNCiAgICAgICAgICAg
ICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4Og0KICAgICAgICAg
ICAgICAgIHRvcG1vc3RNaXBtYXBTaXplICo9IDQ7DQogICAgICAgICAgICAgICAgcGl0Y2hPckxp
bmVhclNpemUgKj0gNDsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2Ug
RDNERk1UX0RYVDE6DQogICAgICAgICAgICBjYXNlIEQzREZNVF9EWFQyOg0KICAgICAgICAgICAg
Y2FzZSBEM0RGTVRfRFhUMzoNCiAgICAgICAgICAgIGNhc2UgRDNERk1UX0RYVDQ6DQogICAgICAg
ICAgICBjYXNlIEQzREZNVF9EWFQ1Og0KICAgICAgICAgICAgICAgIHRvcG1vc3RNaXBtYXBTaXpl
ID0gY29tcHV0ZUNvbXByZXNzZWRCbG9ja1NpemUoIHdpZHRoLCBoZWlnaHQsIDEsIGQzZEZvcm1h
dCApOw0KICAgICAgICAgICAgICAgIHBpdGNoT3JMaW5lYXJTaXplID0gdG9wbW9zdE1pcG1hcFNp
emU7DQogICAgICAgICAgICAgICAgaXNDb21wcmVzc2VkID0gdHJ1ZTsNCiAgICAgICAgICAgICAg
ICBicmVhazsNCiAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3
IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggImQzZEZvcm1hdCBtdXN0IGJlIG9uZSBvZiB0aGUg
a25vd24gZm9ybWF0cyIgKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIE5vdyBjaGVjayB0aGUg
bWlwbWFwcyBhZ2FpbnN0IHRoaXMgc2l6ZQ0KICAgICAgICBpbnQgY3VyU2l6ZSA9IHRvcG1vc3RN
aXBtYXBTaXplOw0KICAgICAgICBpbnQgdG90YWxTaXplID0gMDsNCiAgICAgICAgZm9yKCBpbnQg
aSA9IDA7IGkgPCBtaXBtYXBEYXRhLmxlbmd0aDsgaSsrICkgew0KICAgICAgICAgICAgaWYoIG1p
cG1hcERhdGFbaV0ucmVtYWluaW5nKCkgIT0gY3VyU2l6ZSApIHsNCiAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiTWlwbWFwIGxldmVsICIgKyBpICsN
CiAgICAgICAgICAgICAgICAgICAgICAgICIgZGlkbid0IG1hdGNoIGV4cGVjdGVkIGRhdGEgc2l6
ZSAoZXhwZWN0ZWQgIiArIGN1clNpemUgKyAiLCBnb3QgIiArDQogICAgICAgICAgICAgICAgICAg
ICAgICBtaXBtYXBEYXRhW2ldLnJlbWFpbmluZygpICsgIikiICk7DQogICAgICAgICAgICB9DQog
ICAgICAgICAgICBjdXJTaXplIC89IDQ7DQogICAgICAgICAgICB0b3RhbFNpemUgKz0gbWlwbWFw
RGF0YVtpXS5yZW1haW5pbmcoKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIE9LLCBjcmVhdGUg
b25lIGxhcmdlIEJ5dGVCdWZmZXIgdG8gaG9sZCBhbGwgb2YgdGhlIG1pcG1hcCBkYXRhDQogICAg
ICAgIHRvdGFsU2l6ZSArPSBIZWFkZXIud3JpdHRlblNpemUoKTsNCiAgICAgICAgQnl0ZUJ1ZmZl
ciBidWYgPSBCeXRlQnVmZmVyLmFsbG9jYXRlKCB0b3RhbFNpemUgKTsNCiAgICAgICAgYnVmLnBv
c2l0aW9uKCBIZWFkZXIud3JpdHRlblNpemUoKSApOw0KICAgICAgICBmb3IoIEJ5dGVCdWZmZXIg
bWlwTGV2ZWwgOiBtaXBtYXBEYXRhICkgew0KICAgICAgICAgICAgYnVmLnB1dCggbWlwTGV2ZWwg
KTsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLmJ1ZiA9IGJ1ZjsNCg0KICAgICAgICAvLyBBbGxv
Y2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIEhlYWRlcg0KICAgICAgICBoZWFkZXIgPSBuZXcgSGVhZGVy
KCk7DQogICAgICAgIGhlYWRlci5zaXplID0gSGVhZGVyLnNpemUoKTsNCiAgICAgICAgaGVhZGVy
LmZsYWdzID0gRERTRF9DQVBTIHwgRERTRF9IRUlHSFQgfCBERFNEX1dJRFRIIHwgRERTRF9QSVhF
TEZPUk1BVDsNCiAgICAgICAgaWYoIG1pcG1hcERhdGEubGVuZ3RoID4gMSApIHsNCiAgICAgICAg
ICAgIGhlYWRlci5mbGFncyB8PSBERFNEX01JUE1BUENPVU5UOw0KICAgICAgICAgICAgaGVhZGVy
Lm1pcE1hcENvdW50T3JBdXggPSBtaXBtYXBEYXRhLmxlbmd0aDsNCiAgICAgICAgfQ0KICAgICAg
ICBoZWFkZXIud2lkdGggPSB3aWR0aDsNCiAgICAgICAgaGVhZGVyLmhlaWdodCA9IGhlaWdodDsN
CiAgICAgICAgaWYoIGlzQ29tcHJlc3NlZCApIHsNCiAgICAgICAgICAgIGhlYWRlci5mbGFncyB8
PSBERFNEX0xJTkVBUlNJWkU7DQogICAgICAgICAgICBoZWFkZXIucGZGbGFncyB8PSBERFBGX0ZP
VVJDQzsNCiAgICAgICAgICAgIGhlYWRlci5wZkZvdXJDQyA9IGQzZEZvcm1hdDsNCiAgICAgICAg
fSBlbHNlIHsNCiAgICAgICAgICAgIGhlYWRlci5mbGFncyB8PSBERFNEX1BJVENIOw0KICAgICAg
ICAgICAgLy8gRmlndXJlIG91dCB0aGUgdmFyaW91cyBzZXR0aW5ncyBmcm9tIHRoZSBwaXhlbCBm
b3JtYXQNCiAgICAgICAgICAgIGhlYWRlci5wZkZsYWdzIHw9IEREUEZfUkdCOw0KICAgICAgICAg
ICAgc3dpdGNoKCBkM2RGb3JtYXQgKSB7DQogICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfUjhH
OEI4Og0KICAgICAgICAgICAgICAgICAgICBoZWFkZXIucGZSR0JCaXRDb3VudCA9IDI0Ow0KICAg
ICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4
RzhCODoNCiAgICAgICAgICAgICAgICAgICAgaGVhZGVyLnBmUkdCQml0Q291bnQgPSAzMjsNCiAg
ICAgICAgICAgICAgICAgICAgaGVhZGVyLnBmRmxhZ3MgfD0gRERQRl9BTFBIQVBJWEVMUzsNCiAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfWDhS
OEc4Qjg6DQogICAgICAgICAgICAgICAgICAgIGhlYWRlci5wZlJHQkJpdENvdW50ID0gMzI7DQog
ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaGVh
ZGVyLnBmUkJpdE1hc2sgPSAweDAwRkYwMDAwOw0KICAgICAgICAgICAgaGVhZGVyLnBmR0JpdE1h
c2sgPSAweDAwMDBGRjAwOw0KICAgICAgICAgICAgaGVhZGVyLnBmQkJpdE1hc2sgPSAweDAwMDAw
MEZGOw0KICAgICAgICAgICAgaWYoIGQzZEZvcm1hdCA9PSBEM0RGTVRfQThSOEc4QjggKSB7DQog
ICAgICAgICAgICAgICAgaGVhZGVyLnBmQUJpdE1hc2sgPSAweEZGMDAwMDAwOw0KICAgICAgICAg
ICAgfQ0KICAgICAgICB9DQogICAgICAgIGhlYWRlci5waXRjaE9yTGluZWFyU2l6ZSA9IHBpdGNo
T3JMaW5lYXJTaXplOw0KICAgICAgICBoZWFkZXIucGZTaXplID0gSGVhZGVyLnBmU2l6ZSgpOw0K
ICAgICAgICAvLyBOb3Qgc3VyZSB3aGV0aGVyIHdlIGNhbiBnZXQgYXdheSB3aXRoIGxlYXZpbmcg
dGhlIHJlc3Qgb2YgdGhlDQogICAgICAgIC8vIGhlYWRlciBibGFuaw0KICAgIH0NCg0KICAgIC8v
IE1pY3Jvc29mdCBkb2Vzbid0IGZvbGxvdyB0aGVpciBvd24gc3BlY2lmaWNhdGlvbnMgYW5kIHRo
ZQ0KICAgIC8vIHNpbXBsZXN0IGNvbnZlcnNpb24gdXNpbmcgdGhlIER4VGV4IHRvb2wgdG8gZS5n
LiBhIERYVDMgdGV4dHVyZQ0KICAgIC8vIHJlc3VsdHMgaW4gYW4gaWxsZWdhbCAuZGRzIGZpbGUg
d2l0aG91dCBlaXRoZXIgRERTRF9QSVRDSCBvcg0KICAgIC8vIEREU0RfTElORUFSU0laRSBzZXQg
aW4gdGhlIGhlYWRlcidzIGZsYWdzLiBUaGlzIGNvZGUsIGFkYXB0ZWQNCiAgICAvLyBmcm9tIHRo
ZSBEZXZJTCBsaWJyYXJ5LCBmaXhlcyB1cCB0aGUgaGVhZGVyIGluIHRoZXNlIHNpdHVhdGlvbnMu
DQogICAgcHJpdmF0ZSB2b2lkIGZpeHVwSGVhZGVyKCkgew0KICAgICAgICBpZiggaXNDb21wcmVz
c2VkKCkgJiYgIWlzU3VyZmFjZURlc2NGbGFnU2V0KCBERFNEX0xJTkVBUlNJWkUgKSApIHsNCiAg
ICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgaG93IGJpZyB0aGUgbGluZWFyIHNpemUgc2hvdWxkIGJl
DQogICAgICAgICAgICBpbnQgZGVwdGggPSBoZWFkZXIuYmFja0J1ZmZlckNvdW50T3JEZXB0aDsN
CiAgICAgICAgICAgIGlmKCBkZXB0aCA9PSAwICkgew0KICAgICAgICAgICAgICAgIGRlcHRoID0g
MTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaGVhZGVyLnBpdGNoT3JMaW5lYXJTaXpl
ID0gY29tcHV0ZUNvbXByZXNzZWRCbG9ja1NpemUoIGdldFdpZHRoKCksIGdldEhlaWdodCgpLCBk
ZXB0aCwgZ2V0Q29tcHJlc3Npb25Gb3JtYXQoKSApOw0KICAgICAgICAgICAgaGVhZGVyLmZsYWdz
IHw9IEREU0RfTElORUFSU0laRTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHByaXZhdGUgc3Rh
dGljIGludCBjb21wdXRlQ29tcHJlc3NlZEJsb2NrU2l6ZSggaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCBpbnQgZGVwdGgsIGludCBjb21wcmVzc2lvbkZvcm1hdCApIHsNCiAgICAgICAgaW50IGJsb2Nr
U2l6ZSA9ICggKCB3aWR0aCArIDMgKSAvIDQgKSAqICggKCBoZWlnaHQgKyAzICkgLyA0ICkgKiAo
ICggZGVwdGggKyAzICkgLyA0ICk7DQogICAgICAgIHN3aXRjaCggY29tcHJlc3Npb25Gb3JtYXQg
KSB7DQogICAgICAgICAgICBjYXNlIEQzREZNVF9EWFQxOg0KICAgICAgICAgICAgICAgIGJsb2Nr
U2l6ZSAqPSA4Ow0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgZGVmYXVsdDoN
CiAgICAgICAgICAgICAgICBibG9ja1NpemUgKj0gMTY7DQogICAgICAgICAgICAgICAgYnJlYWs7
DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGJsb2NrU2l6ZTsNCiAgICB9DQoNCiAgICBwcml2
YXRlIGludCBtaXBNYXBXaWR0aCggaW50IG1hcCApIHsNCiAgICAgICAgaW50IHdpZHRoID0gZ2V0
V2lkdGgoKTsNCiAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGkgPCBtYXA7IGkrKyApIHsNCiAgICAg
ICAgICAgIHdpZHRoID4+PSAxOw0KICAgICAgICB9DQogICAgICAgIGlmKCB3aWR0aCA8PSAwICkg
ew0KICAgICAgICAgICAgcmV0dXJuIDE7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHdpZHRo
Ow0KICAgIH0NCg0KICAgIHByaXZhdGUgaW50IG1pcE1hcEhlaWdodCggaW50IG1hcCApIHsNCiAg
ICAgICAgaW50IGhlaWdodCA9IGdldEhlaWdodCgpOw0KICAgICAgICBmb3IoIGludCBpID0gMDsg
aSA8IG1hcDsgaSsrICkgew0KICAgICAgICAgICAgaGVpZ2h0ID4+PSAxOw0KICAgICAgICB9DQog
ICAgICAgIGlmKCBoZWlnaHQgPD0gMCApIHsNCiAgICAgICAgICAgIHJldHVybiAxOw0KICAgICAg
ICB9DQogICAgICAgIHJldHVybiBoZWlnaHQ7DQogICAgfQ0KDQogICAgcHJpdmF0ZSBpbnQgbWlw
TWFwU2l6ZUluQnl0ZXMoIGludCBtYXAgKSB7DQogICAgICAgIGludCB3aWR0aCA9IG1pcE1hcFdp
ZHRoKCBtYXAgKTsNCiAgICAgICAgaW50IGhlaWdodCA9IG1pcE1hcEhlaWdodCggbWFwICk7DQog
ICAgICAgIGlmKCBpc0NvbXByZXNzZWQoKSApIHsNCiAgICAgICAgICAgIGludCBibG9ja1NpemUg
PSAoIGdldENvbXByZXNzaW9uRm9ybWF0KCkgPT0gRDNERk1UX0RYVDEgPyA4IDogMTYgKTsNCiAg
ICAgICAgICAgIHJldHVybiAoICggd2lkdGggKyAzICkgLyA0ICkgKiAoICggaGVpZ2h0ICsgMyAp
IC8gNCApICogYmxvY2tTaXplOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJu
IHdpZHRoICogaGVpZ2h0ICogKCBnZXREZXB0aCgpIC8gOCApOw0KICAgICAgICB9DQogICAgfQ0K
DQogICAgcHJpdmF0ZSBpbnQgc2lkZVNpemVJbkJ5dGVzKCkgew0KICAgICAgICBpbnQgbnVtTGV2
ZWxzID0gZ2V0TnVtTWlwTWFwcygpOw0KICAgICAgICBpZiggbnVtTGV2ZWxzID09IDAgKSB7DQog
ICAgICAgICAgICBudW1MZXZlbHMgPSAxOw0KICAgICAgICB9DQoNCiAgICAgICAgaW50IHNpemUg
PSAwOw0KICAgICAgICBmb3IoIGludCBpID0gMDsgaSA8IG51bUxldmVsczsgaSsrICkgew0KICAg
ICAgICAgICAgc2l6ZSArPSBtaXBNYXBTaXplSW5CeXRlcyggaSApOw0KICAgICAgICB9DQoNCiAg
ICAgICAgcmV0dXJuIHNpemU7DQogICAgfQ0KDQogICAgcHJpdmF0ZSBpbnQgc2lkZVNoaWZ0SW5C
eXRlcyggaW50IHNpZGUgKSB7DQogICAgICAgIGludFtdIHNpZGVzID0gew0KICAgICAgICAgICAg
ICAgIEREU0NBUFMyX0NVQkVNQVBfUE9TSVRJVkVYLA0KICAgICAgICAgICAgICAgIEREU0NBUFMy
X0NVQkVNQVBfTkVHQVRJVkVYLA0KICAgICAgICAgICAgICAgIEREU0NBUFMyX0NVQkVNQVBfUE9T
SVRJVkVZLA0KICAgICAgICAgICAgICAgIEREU0NBUFMyX0NVQkVNQVBfTkVHQVRJVkVZLA0KICAg
ICAgICAgICAgICAgIEREU0NBUFMyX0NVQkVNQVBfUE9TSVRJVkVaLA0KICAgICAgICAgICAgICAg
IEREU0NBUFMyX0NVQkVNQVBfTkVHQVRJVkVaDQogICAgICAgIH07DQoNCiAgICAgICAgaW50IHNo
aWZ0ID0gMDsNCiAgICAgICAgaW50IHNpZGVTaXplID0gc2lkZVNpemVJbkJ5dGVzKCk7DQogICAg
ICAgIGZvciAoIGludCB0ZW1wIDogc2lkZXMgKSB7DQogICAgICAgICAgICBpZiAoICggdGVtcCAm
IHNpZGUgKSAhPSAwICkgew0KICAgICAgICAgICAgICAgIHJldHVybiBzaGlmdDsNCiAgICAgICAg
ICAgIH0NCg0KICAgICAgICAgICAgc2hpZnQgKz0gc2lkZVNpemU7DQogICAgICAgIH0NCg0KICAg
ICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiggIklsbGVnYWwgc2lkZTogIiArIHNpZGUg
KTsNCiAgICB9DQoNCiAgICBwcml2YXRlIGJvb2xlYW4gcHJpbnRJZlJlY29nbml6ZWQoIFByaW50
U3RyZWFtIHR0eSwgaW50IGZsYWdzLCBpbnQgZmxhZywgU3RyaW5nIHdoYXQgKSB7DQogICAgICAg
IGlmKCAoIGZsYWdzICYgZmxhZyApICE9IDAgKSB7DQogICAgICAgICAgICB0dHkucHJpbnRsbigg
d2hhdCApOw0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgICAgcmV0
dXJuIGZhbHNlOw0KICAgIH0NCn0NCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>