Overview

URL hareksaman999.com/
IP66.29.132.23
ASNNAMECHEAP-NET
Location United States
Report completed2022-09-13 03:53:53 UTC
StatusLoading report..
urlquery Alerts No alerts detected


Settings

UserAgentMozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Referer


Intrusion Detection Systems

Suricata /w Emerging Threats Pro  No alerts detected


Blocklists

OpenPhish  No alerts detected
PhishTank  No alerts detected
Fortinet's Web Filter
Scan Date Severity Indicator Comment
2022-09-13 2 hareksaman999.com/ Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/gtranslate/gtranslate-style24.css?ver=6.0.1 Phishing
2022-09-13 2 hareksaman999.com/wp-includes/css/dist/block-library/style.min.css?ver=6.0.1 Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/invoicing/vendor/ayecode/wp-ayecode-ui (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/woocommerce/packages/woocommerce-block (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/Perfect-Money-Custom-Payment-Getway-By (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/everest-forms/assets/css/everest-forms (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/add-to-cart-direct-checkout-for-woocom (...) Phishing
2022-09-13 2 hareksaman999.com/wp-includes/css/dashicons.min.css?ver=6.0.1 Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/woo-multi-currency/css/flags-64.min.cs (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/woocommerce-products-filter/css/front. (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/woocommerce-products-filter/js/icheck/ (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/woocommerce-products-filter/ext/label/ (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/woocommerce/assets/css/woocommerce-lay (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/woocommerce/assets/css/woocommerce.css (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/woocommerce-products-filter/ext/by_tex (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/themes/zakra/style.css?ver=2.1.3 Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/elementor/assets/lib/font-awesome/css/ (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/elementor/assets/lib/font-awesome/css/ (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/elementor/assets/lib/font-awesome/css/ (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/uploads/elementor/css/post-3049.css?ver=1662052575 Phishing
2022-09-13 2 hareksaman999.com/wp-content/uploads/elementor/css/post-646.css?ver=1662126955 Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/elementor/assets/css/frontend-lite.min (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/elementor/assets/lib/font-awesome/css/ (...) Phishing
2022-09-13 2 hareksaman999.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.3.2 Malware
2022-09-13 2 hareksaman999.com/wp-content/plugins/invoicing/vendor/ayecode/wp-ayecode-ui (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/woo-multi-currency/js/woo-multi-curren (...) Malware
2022-09-13 2 hareksaman999.com/wp-content/plugins/wp-optin-wheel/public/js/public.min.js (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/Perfect-Money-Custom-Payment-Getway-By (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/woocommerce-products-filter/js/tooltip (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/wp-optin-wheel/public/css/theme-deep-p (...) Phishing
2022-09-13 2 hareksaman999.com/ Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/woocommerce-products-filter/js/tooltip (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/woocommerce/assets/js/js-cookie/js.coo (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/invoicing/assets/js/payment-forms.js?v (...) Malware
2022-09-13 2 hareksaman999.com/wp-content/themes/zakra/assets/js/skip-link-focus-fix.min (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/themes/zakra/assets/js/navigation.min.js?ver=2 (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/woocommerce-products-filter/ext/by_ons (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/woocommerce-products-filter/js/icheck/ (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/woocommerce-products-filter/js/html_ty (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/click-to-chat-for-whatsapp/new/inc/ass (...) Malware
2022-09-13 2 hareksaman999.com/wp-content/plugins/woocommerce-products-filter/js/html_ty (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/woocommerce-products-filter/js/html_ty (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/woocommerce-products-filter/js/chosen/ (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/elementor-pro/assets/js/webpack-pro.ru (...) Malware
2022-09-13 2 hareksaman999.com/wp-content/plugins/woocommerce-products-filter/ext/label/ (...) Phishing
2022-09-13 2 hareksaman999.com/wp-includes/js/dist/i18n.min.js?ver=ebee46757c6a411e38fd0 (...) Malware
2022-09-13 2 hareksaman999.com/wp-content/plugins/elementor/assets/lib/waypoints/waypoin (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/elementor-pro/assets/js/frontend.min.j (...) Phishing
2022-09-13 2 hareksaman999.com/wp-includes/js/dist/vendor/wp-polyfill.min.js?ver=3.15.0 Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/elementor/assets/js/webpack.runtime.mi (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/mailchimp-for-wp/assets/js/forms.js?ve (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/elementor-pro/assets/js/elements-handl (...) Phishing
2022-09-13 2 hareksaman999.com/wp-includes/js/jquery/ui/core.min.js?ver=1.13.1 Malware
2022-09-13 2 hareksaman999.com/wp-content/plugins/elementor/assets/js/frontend.min.js?ve (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/invoicing/vendor/ayecode/wp-ayecode-ui (...) Malware
2022-09-13 2 hareksaman999.com/wp-content/plugins/woocommerce/assets/css/woocommerce-sma (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/elementor/assets/lib/font-awesome/webf (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/elementor/assets/lib/font-awesome/webf (...) Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/elementor/assets/lib/font-awesome/webf (...) Phishing
2022-09-13 2 hareksaman999.com/?wc-ajax=get_refreshed_fragments Phishing
2022-09-13 2 hareksaman999.com/wp-content/plugins/woocommerce-products-filter/js/front.j (...) Phishing
mnemonic secure dns  No alerts detected
Quad9 DNS  No alerts detected


Files

No files detected



Passive DNS (37)

Passive DNS Source Fully Qualifying Domain Name Rank First Seen Last Seen IP Comment
mnemonic passive DNS m.stripe.network (2) 1204 2018-06-23 22:39:58 UTC 2022-09-12 05:41:24 UTC 54.230.111.59
mnemonic passive DNS pagead2.googlesyndication.com (5) 101 2021-02-20 15:52:05 UTC 2022-09-12 21:19:38 UTC 216.58.211.2
mnemonic passive DNS js.stripe.com (2) 1149 2012-09-30 12:39:23 UTC 2022-09-12 05:15:15 UTC 151.101.84.176
mnemonic passive DNS img-getpocket.cdn.mozilla.net (5) 1631 2017-09-01 03:40:57 UTC 2022-09-12 12:46:20 UTC 34.120.237.76
mnemonic passive DNS m.stripe.com (1) 1092 2021-04-11 19:21:28 UTC 2022-09-12 05:41:36 UTC 52.43.178.180
mnemonic passive DNS googleads.g.doubleclick.net (1) 42 2021-02-20 15:43:32 UTC 2022-09-13 00:00:21 UTC 172.217.21.162
mnemonic passive DNS www.google-analytics.com (1) 40 2012-10-03 01:04:21 UTC 2022-09-12 22:41:05 UTC 142.250.74.174
mnemonic passive DNS translate.google.com (1) 1156 2012-05-30 01:30:32 UTC 2022-09-12 05:51:51 UTC 142.250.74.46
mnemonic passive DNS region1.google-analytics.com (1) 0 2022-03-17 11:26:33 UTC 2022-09-12 05:49:45 UTC 216.239.32.36 Domain (google-analytics.com) ranked at: 8401
mnemonic passive DNS translate-pa.googleapis.com (1) 1620 2021-11-04 06:37:42 UTC 2022-09-12 21:47:54 UTC 142.250.74.170
mnemonic passive DNS partner.googleadservices.com (1) 798 2012-10-03 01:04:21 UTC 2022-09-12 04:53:01 UTC 142.250.74.98
mnemonic passive DNS firefox.settings.services.mozilla.com (2) 867 2020-06-04 20:08:41 UTC 2022-09-12 18:42:19 UTC 143.204.55.36
mnemonic passive DNS r3.o.lencr.org (5) 344 2020-12-02 08:52:13 UTC 2022-09-12 04:51:47 UTC 23.33.119.27
mnemonic passive DNS translate.googleapis.com (1) 1005 2014-07-21 13:19:59 UTC 2022-09-12 19:30:44 UTC 142.250.74.74
mnemonic passive DNS adservice.google.no (1) 96969 2017-09-26 14:23:08 UTC 2022-09-12 04:53:04 UTC 142.250.74.66
mnemonic passive DNS www.google.com (1) 7 2016-08-04 12:36:31 UTC 2022-09-12 22:01:18 UTC 142.250.74.164
mnemonic passive DNS hareksaman999.com (100) 0 2021-06-22 10:19:07 UTC 2022-09-12 15:43:10 UTC 66.29.132.23 Unknown ranking
mnemonic passive DNS ocsp.pki.goog (15) 175 2017-06-14 07:23:31 UTC 2022-09-12 04:51:36 UTC 142.250.74.3
mnemonic passive DNS fonts.googleapis.com (2) 8877 2014-07-21 13:19:55 UTC 2022-09-13 00:21:49 UTC 142.250.74.10
mnemonic passive DNS c7.alamy.com (1) 137986 2018-11-15 09:47:15 UTC 2022-09-12 15:52:04 UTC 143.204.55.27
mnemonic passive DNS p.kindpng.com (1) 83309 2019-12-18 09:24:02 UTC 2022-09-12 12:51:59 UTC 208.110.80.14
mnemonic passive DNS t.paypal.com (1) 3487 2013-04-18 12:22:33 UTC 2022-09-12 22:11:38 UTC 151.101.129.35
mnemonic passive DNS content-signature-2.cdn.mozilla.net (1) 1152 2020-11-03 12:26:46 UTC 2022-09-12 21:02:00 UTC 143.204.55.110
mnemonic passive DNS contile.services.mozilla.com (1) 1114 2021-05-27 18:32:35 UTC 2022-09-12 04:53:23 UTC 34.117.237.239
mnemonic passive DNS use.fontawesome.com (1) 942 2017-01-30 04:43:25 UTC 2022-09-12 04:57:45 UTC 104.21.63.54
mnemonic passive DNS fonts.gstatic.com (8) 0 2014-08-29 13:43:22 UTC 2022-09-12 04:51:32 UTC 142.250.74.163 Domain (gstatic.com) ranked at: 540
mnemonic passive DNS analytics.tiktok.com (3) 1182 2020-02-29 13:09:05 UTC 2022-09-12 04:59:22 UTC 104.84.152.192
mnemonic passive DNS ocsp.sectigo.com (1) 487 2018-12-17 11:31:55 UTC 2022-09-12 23:49:39 UTC 172.64.155.188
mnemonic passive DNS push.services.mozilla.com (1) 2140 2015-09-03 10:29:36 UTC 2022-09-12 06:04:57 UTC 35.164.47.107
mnemonic passive DNS www.paypal.com (3) 2583 2012-09-05 05:46:24 UTC 2022-09-12 05:46:26 UTC 151.101.1.21
mnemonic passive DNS thumbs.dreamstime.com (1) 13316 2012-05-30 02:38:19 UTC 2022-09-12 14:09:08 UTC 192.229.233.122
mnemonic passive DNS www.googletagmanager.com (1) 75 2012-12-25 14:52:06 UTC 2022-09-12 04:57:45 UTC 142.250.74.72
mnemonic passive DNS zakrademos.com (2) 577975 2019-07-04 09:19:54 UTC 2022-09-11 07:36:36 UTC 66.42.70.242
mnemonic passive DNS adservice.google.com (1) 76 2021-02-20 16:10:48 UTC 2022-09-13 02:57:57 UTC 216.58.211.2
mnemonic passive DNS tpc.googlesyndication.com (2) 126 2015-02-20 14:12:31 UTC 2022-09-12 10:33:22 UTC 142.250.74.33
mnemonic passive DNS ocsp.digicert.com (3) 86 2012-05-21 07:02:23 UTC 2022-09-12 23:34:51 UTC 93.184.220.29
mnemonic passive DNS uploads.commoninja.com (1) 0 2020-09-22 17:09:39 UTC 2022-09-11 17:51:33 UTC 172.67.41.30 Domain (commoninja.com) ranked at: 149486


Recent reports on same IP/ASN/Domain/Screenshot

Last 4 reports on IP: 66.29.132.23

Date UQ / IDS / BL URL IP
2022-11-29 03:47:27 +0000
0 - 0 - 41 hubviews.com/ 66.29.132.23
2022-11-24 19:29:43 +0000
0 - 0 - 132 reno-connect.com/ 66.29.132.23
2022-09-21 04:20:12 +0000
0 - 0 - 4 pixelrolls.com/ 66.29.132.23
2022-09-13 03:53:53 +0000
0 - 0 - 62 hareksaman999.com/ 66.29.132.23

Last 5 reports on ASN: NAMECHEAP-NET

Date UQ / IDS / BL URL IP
2022-12-07 16:16:33 +0000
0 - 0 - 17 tronmoon.xyz/ 66.29.146.203
2022-12-07 14:57:16 +0000
0 - 0 - 6 skcllab.com/psus/index.php?ODRLMOE=9 198.54.115.35
2022-12-07 11:45:49 +0000
0 - 0 - 8 aidabishop.xyz/csf/index.php?QBOT.zip 162.0.209.89
2022-12-07 11:45:10 +0000
0 - 0 - 6 matirghar.com/iu/index.php?QBOT.zip 198.54.116.248
2022-12-07 11:44:34 +0000
0 - 0 - 6 shopexinn.com/msqu/index.php?QBOT.zip 162.0.229.249

Last 1 reports on domain: hareksaman999.com

Date UQ / IDS / BL URL IP
2022-09-13 03:53:53 +0000
0 - 0 - 62 hareksaman999.com/ 66.29.132.23

No other reports with similar screenshot



JavaScript

Executed Scripts (89)


Executed Evals (109)

#1 JavaScript::Eval (size: 2, repeated: 1) - SHA256: 961b6dd3ede3cb8ecbaacbd68de040cd78eb2ed5889130cceb4c49268ea4d506

                                        aa
                                    

#2 JavaScript::Eval (size: 79, repeated: 1) - SHA256: b8b126be065417a606b67fa8dc98b012f362e99a6644f0a721c71fb7122eb9d5

                                        0,
function(N, d, K, x, T) {
    y(N, (d = M((T = (x = D(N, (K = D(N, 58), 56)), M(x, N)), K), N), x), T + d)
}
                                    

#3 JavaScript::Eval (size: 66, repeated: 1) - SHA256: e2fb2d0968d8fe20816f10f44c4cbceda49c17cf38ee2151ccab471a368509f1

                                        0, Ar = function(X, p, m, l) {
    a(F(M((l = D(X, (m = D(X, 56), 58)), m), X), p), X, l)
}
                                    

#4 JavaScript::Eval (size: 93, repeated: 1) - SHA256: 15c3d8c462eda069b2d2aa93005284f32bfccf8f3561c5a1f6afa65449c7619b

                                        0,
function(N, d, K, x, T, E) {
    y((d = (T = D(N, (K = D(N, (x = D(N, 57), 40)), 58)), M)(K, N), E = M(x, N) == d, N), T, +E)
}
                                    

#5 JavaScript::Eval (size: 99, repeated: 1) - SHA256: 75c730eb00b888a6c445cedadfd19abdc19ebbc8035487ffb9d72617643c949b

                                        0,
function(N, d, K, x, T) {
    for (x = (d = (T = (K = D(N, 40), b(26, N, 128)), 0), []); d < T; d++) x.push(g(0, 8, N));
    y(N, K, x)
}
                                    

#6 JavaScript::Eval (size: 353, repeated: 1) - SHA256: decf5d2632956934282fdba721649af86cbe1f89d78e26866f946168eb8a0746

                                        cU = function(X, p, m, l, t, c, N, d, K, x, T, E, Z, k, B, w, q) {
    if (q = M(273, X), q >= X.B) throw [XG, 31];
    for (T = (d = (K = (E = m, X.X3.length), l), q); d > m;) k = T % 8, t = 8 - (k | m), B = t < d ? t : d, c = T >> 3, x = X.o[c], p && (w = X, w.Y != T >> 6 && (w.Y = T >> 6, Z = M(340, w), w.hj = Tx(8, 16, 2, 712, w.Y, [0, 0, Z[1], Z[2]], w.I)), x ^= X.hj[c & K]), E |= (x >> 8 - (k | m) - (B | m) & (1 << B) - 1) << (d | m) - (B | m), T += B, d -= B;
    return y(X, 273, (q | m) + (l | (N = E, m))), N
}
                                    

#7 JavaScript::Eval (size: 22, repeated: 1) - SHA256: 04a35497d2e533d42e04f34c91a9a8a03ee124906dec536cb5f5dc30d94ca6be

                                        0,
function(N) {
    Fl(7, N)
}
                                    

#8 JavaScript::Eval (size: 1, repeated: 1) - SHA256: 594e519ae499312b29433b7dd8a97ff068defcba9755b6d5d00e84c524d67b06

                                        z
                                    

#9 JavaScript::Eval (size: 47, repeated: 1) - SHA256: d4c9d2c1a13a7176222a076a9fb53ba0bf579a24b34e6eec57e6c66ba9fae7ff

                                        0,
function(N, d) {
    (d = M(D(N, 59), N), qA)(d, 273, N.J)
}
                                    

#10 JavaScript::Eval (size: 78, repeated: 1) - SHA256: abf16957b14f608eb0bf71abc02847af50949cc90022a98a3c827bb47ffe6949

                                        0,
function(N, d, K, x) {
    y(N, (x = D(N, (d = D(N, (K = D(N, 59), 40)), 59)), x), M(K, N) || M(d, N))
}
                                    

#11 JavaScript::Eval (size: 69, repeated: 1) - SHA256: cb7ea5b82368c64687c45aa8d4945c7c8d378e40d87768b7d6949df517f768d9

                                        0, qA = function(X, p, m) {
    y(m, (m.Ec.push(m.g.slice()), m.g[p] = void 0, p), X)
}
                                    

#12 JavaScript::Eval (size: 2, repeated: 1) - SHA256: 9a7955ea45b1c71fb367f3307178641813668a6bc48d58ba21fd687ddc591ea9

                                        mf
                                    

#13 JavaScript::Eval (size: 2, repeated: 1) - SHA256: bec0a556884bccbd08c5c8099ff46b046c20a4bc2faef440e8c6c38e84db6926

                                        $M
                                    

#14 JavaScript::Eval (size: 333, repeated: 1) - SHA256: 19334778f07e7786e689a3448b1be422d39c0bb87c79d1918d922ac6316b0d4e

                                        0, Wm = function(X, p, m, l, t, c, N, d, K, x, T, E, Z, k) {
    ((p.push((N = (K = X[0] << 24, Z = X[1] << 16, (K & Z) + ~(K & Z) - ~(K | Z)), E = X[2] << 8, -~E + 2 * (N ^ E) - 2 * (~N & E) + (~N | E)) | X[3]), p).push((x = (m = X[4] << 24 | X[5] << 16, k = X[6] << 8, (k | 0) - 1 - (~m | k)), t = X[7], -~(x & t) + 2 * (x ^ t) - (~x & t) + (~x | t))), p).push((l = (T = X[8] << 24, d = X[9] << 16, (T | 0) + ~(T & d) - ~d), c = X[10] << 8, (l | 0) + (l & c) + ~l - (~l ^ c)) | X[11])
}
                                    

#15 JavaScript::Eval (size: 70, repeated: 1) - SHA256: 16785fc186118c417a094f5af08f9e737e2a5fd19ff4807559f1144063e5e658

                                        0, OO = function(X, p) {
    for (p = []; X--;) p.push(255 * Math.random() | 0);
    return p
}
                                    

#16 JavaScript::Eval (size: 98, repeated: 1) - SHA256: aecf4779c87449d0cb32d0bf0e258c1d9e73ebaf29ff8deb703e0f914aa78420

                                        0,
function(N, d, K, x, T, E) {
    y((E = M((d = M((T = (x = D(N, (K = D(N, 58), 56)), D(N, 57)), K), N), x), N), N), T, d in E | 0)
}
                                    

#17 JavaScript::Eval (size: 10908, repeated: 1) - SHA256: 006fb5a66fcef7eb809ef663488a76fafc9a5922b9276fa7b556cef82beef69f

                                        var isMergeableObject = function isMergeableObject(value) {
    return isNonNullObject(value) && !isSpecial(value)
};

function isNonNullObject(value) {
    return !!value && typeof value === 'object'
}

function isSpecial(value) {
    var stringValue = Object.prototype.toString.call(value);

    return stringValue === '[object RegExp]' || stringValue === '[object Date]' || isReactElement(value)
}

// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25
var canUseSymbol = typeof Symbol === 'function' && Symbol.for;
var REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;

function isReactElement(value) {
    return value.$$typeof === REACT_ELEMENT_TYPE
}

function emptyTarget(val) {
    return Array.isArray(val) ? [] : {}
}

function cloneUnlessOtherwiseSpecified(value, options) {
    return (options.clone !== false && options.isMergeableObject(value)) ? deepmerge(emptyTarget(value), value, options) : value
}

function defaultArrayMerge(target, source, options) {
    return target.concat(source).map(function(element) {
        return cloneUnlessOtherwiseSpecified(element, options)
    })
}

function getMergeFunction(key, options) {
    if (!options.customMerge) {
        return deepmerge
    }
    var customMerge = options.customMerge(key);
    return typeof customMerge === 'function' ? customMerge : deepmerge
}

function getEnumerableOwnPropertySymbols(target) {
    return Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(target).filter(function(symbol) {
        return target.propertyIsEnumerable(symbol)
    }) : []
}

function getKeys(target) {
    return Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))
}

function propertyIsOnObject(object, property) {
    try {
        return property in object
    } catch (_) {
        return false
    }
}

// Protects from prototype poisoning and unexpected merging up the prototype chain.
function propertyIsUnsafe(target, key) {
    return propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,
        && !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,
            && Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.
}

function mergeObject(target, source, options) {
    var destination = {};
    if (options.isMergeableObject(target)) {
        getKeys(target).forEach(function(key) {
            destination[key] = cloneUnlessOtherwiseSpecified(target[key], options);
        });
    }
    getKeys(source).forEach(function(key) {
        if (propertyIsUnsafe(target, key)) {
            return
        }

        if (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {
            destination[key] = getMergeFunction(key, options)(target[key], source[key], options);
        } else {
            destination[key] = cloneUnlessOtherwiseSpecified(source[key], options);
        }
    });
    return destination
}

function deepmerge(target, source, options) {
    options = options || {};
    options.arrayMerge = options.arrayMerge || defaultArrayMerge;
    options.isMergeableObject = options.isMergeableObject || isMergeableObject;
    // cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()
    // implementations can use it. The caller may not replace it.
    options.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;

    var sourceIsArray = Array.isArray(source);
    var targetIsArray = Array.isArray(target);
    var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;

    if (!sourceAndTargetTypesMatch) {
        return cloneUnlessOtherwiseSpecified(source, options)
    } else if (sourceIsArray) {
        return options.arrayMerge(target, source, options)
    } else {
        return mergeObject(target, source, options)
    }
}

deepmerge.all = function deepmergeAll(array, options) {
    if (!Array.isArray(array)) {
        throw new Error('first argument should be an array')
    }

    return array.reduce(function(prev, next) {
        return deepmerge(prev, next, options)
    }, {})
};

var deepmerge_1 = deepmerge;

module.exports = deepmerge_1;
//# sourceURL=[module]
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTk2LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUUsSUFBSTtBQUNOOztBQUVBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcHBjLWJ1dHRvbi8uL25vZGVfbW9kdWxlcy9kZWVwbWVyZ2UvZGlzdC9janMuanM/M2M0ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBpc01lcmdlYWJsZU9iamVjdCA9IGZ1bmN0aW9uIGlzTWVyZ2VhYmxlT2JqZWN0KHZhbHVlKSB7XG5cdHJldHVybiBpc05vbk51bGxPYmplY3QodmFsdWUpXG5cdFx0JiYgIWlzU3BlY2lhbCh2YWx1ZSlcbn07XG5cbmZ1bmN0aW9uIGlzTm9uTnVsbE9iamVjdCh2YWx1ZSkge1xuXHRyZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG59XG5cbmZ1bmN0aW9uIGlzU3BlY2lhbCh2YWx1ZSkge1xuXHR2YXIgc3RyaW5nVmFsdWUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xuXG5cdHJldHVybiBzdHJpbmdWYWx1ZSA9PT0gJ1tvYmplY3QgUmVnRXhwXSdcblx0XHR8fCBzdHJpbmdWYWx1ZSA9PT0gJ1tvYmplY3QgRGF0ZV0nXG5cdFx0fHwgaXNSZWFjdEVsZW1lbnQodmFsdWUpXG59XG5cbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi9iNWFjOTYzZmI3OTFkMTI5OGU3ZjM5NjIzNjM4M2JjOTU1ZjkxNmMxL3NyYy9pc29tb3JwaGljL2NsYXNzaWMvZWxlbWVudC9SZWFjdEVsZW1lbnQuanMjTDIxLUwyNVxudmFyIGNhblVzZVN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBjYW5Vc2VTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgOiAweGVhYzc7XG5cbmZ1bmN0aW9uIGlzUmVhY3RFbGVtZW50KHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFXG59XG5cbmZ1bmN0aW9uIGVtcHR5VGFyZ2V0KHZhbCkge1xuXHRyZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpID8gW10gOiB7fVxufVxuXG5mdW5jdGlvbiBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZCh2YWx1ZSwgb3B0aW9ucykge1xuXHRyZXR1cm4gKG9wdGlvbnMuY2xvbmUgIT09IGZhbHNlICYmIG9wdGlvbnMuaXNNZXJnZWFibGVPYmplY3QodmFsdWUpKVxuXHRcdD8gZGVlcG1lcmdlKGVtcHR5VGFyZ2V0KHZhbHVlKSwgdmFsdWUsIG9wdGlvbnMpXG5cdFx0OiB2YWx1ZVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0QXJyYXlNZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuXHRyZXR1cm4gdGFyZ2V0LmNvbmNhdChzb3VyY2UpLm1hcChmdW5jdGlvbihlbGVtZW50KSB7XG5cdFx0cmV0dXJuIGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkKGVsZW1lbnQsIG9wdGlvbnMpXG5cdH0pXG59XG5cbmZ1bmN0aW9uIGdldE1lcmdlRnVuY3Rpb24oa2V5LCBvcHRpb25zKSB7XG5cdGlmICghb3B0aW9ucy5jdXN0b21NZXJnZSkge1xuXHRcdHJldHVybiBkZWVwbWVyZ2Vcblx0fVxuXHR2YXIgY3VzdG9tTWVyZ2UgPSBvcHRpb25zLmN1c3RvbU1lcmdlKGtleSk7XG5cdHJldHVybiB0eXBlb2YgY3VzdG9tTWVyZ2UgPT09ICdmdW5jdGlvbicgPyBjdXN0b21NZXJnZSA6IGRlZXBtZXJnZVxufVxuXG5mdW5jdGlvbiBnZXRFbnVtZXJhYmxlT3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkge1xuXHRyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc1xuXHRcdD8gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpLmZpbHRlcihmdW5jdGlvbihzeW1ib2wpIHtcblx0XHRcdHJldHVybiB0YXJnZXQucHJvcGVydHlJc0VudW1lcmFibGUoc3ltYm9sKVxuXHRcdH0pXG5cdFx0OiBbXVxufVxuXG5mdW5jdGlvbiBnZXRLZXlzKHRhcmdldCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXModGFyZ2V0KS5jb25jYXQoZ2V0RW51bWVyYWJsZU93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpKVxufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUlzT25PYmplY3Qob2JqZWN0LCBwcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdHJldHVybiBwcm9wZXJ0eSBpbiBvYmplY3Rcblx0fSBjYXRjaChfKSB7XG5cdFx0cmV0dXJuIGZhbHNlXG5cdH1cbn1cblxuLy8gUHJvdGVjdHMgZnJvbSBwcm90b3R5cGUgcG9pc29uaW5nIGFuZCB1bmV4cGVjdGVkIG1lcmdpbmcgdXAgdGhlIHByb3RvdHlwZSBjaGFpbi5cbmZ1bmN0aW9uIHByb3BlcnR5SXNVbnNhZmUodGFyZ2V0LCBrZXkpIHtcblx0cmV0dXJuIHByb3BlcnR5SXNPbk9iamVjdCh0YXJnZXQsIGtleSkgLy8gUHJvcGVydGllcyBhcmUgc2FmZSB0byBtZXJnZSBpZiB0aGV5IGRvbid0IGV4aXN0IGluIHRoZSB0YXJnZXQgeWV0LFxuXHRcdCYmICEoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBrZXkpIC8vIHVuc2FmZSBpZiB0aGV5IGV4aXN0IHVwIHRoZSBwcm90b3R5cGUgY2hhaW4sXG5cdFx0XHQmJiBPYmplY3QucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh0YXJnZXQsIGtleSkpIC8vIGFuZCBhbHNvIHVuc2FmZSBpZiB0aGV5J3JlIG5vbmVudW1lcmFibGUuXG59XG5cbmZ1bmN0aW9uIG1lcmdlT2JqZWN0KHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG5cdHZhciBkZXN0aW5hdGlvbiA9IHt9O1xuXHRpZiAob3B0aW9ucy5pc01lcmdlYWJsZU9iamVjdCh0YXJnZXQpKSB7XG5cdFx0Z2V0S2V5cyh0YXJnZXQpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG5cdFx0XHRkZXN0aW5hdGlvbltrZXldID0gY2xvbmVVbmxlc3NPdGhlcndpc2VTcGVjaWZpZWQodGFyZ2V0W2tleV0sIG9wdGlvbnMpO1xuXHRcdH0pO1xuXHR9XG5cdGdldEtleXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuXHRcdGlmIChwcm9wZXJ0eUlzVW5zYWZlKHRhcmdldCwga2V5KSkge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0aWYgKHByb3BlcnR5SXNPbk9iamVjdCh0YXJnZXQsIGtleSkgJiYgb3B0aW9ucy5pc01lcmdlYWJsZU9iamVjdChzb3VyY2Vba2V5XSkpIHtcblx0XHRcdGRlc3RpbmF0aW9uW2tleV0gPSBnZXRNZXJnZUZ1bmN0aW9uKGtleSwgb3B0aW9ucykodGFyZ2V0W2tleV0sIHNvdXJjZVtrZXldLCBvcHRpb25zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVzdGluYXRpb25ba2V5XSA9IGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkKHNvdXJjZVtrZXldLCBvcHRpb25zKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gZGVzdGluYXRpb25cbn1cblxuZnVuY3Rpb24gZGVlcG1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXHRvcHRpb25zLmFycmF5TWVyZ2UgPSBvcHRpb25zLmFycmF5TWVyZ2UgfHwgZGVmYXVsdEFycmF5TWVyZ2U7XG5cdG9wdGlvbnMuaXNNZXJnZWFibGVPYmplY3QgPSBvcHRpb25zLmlzTWVyZ2VhYmxlT2JqZWN0IHx8IGlzTWVyZ2VhYmxlT2JqZWN0O1xuXHQvLyBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZCBpcyBhZGRlZCB0byBgb3B0aW9uc2Agc28gdGhhdCBjdXN0b20gYXJyYXlNZXJnZSgpXG5cdC8vIGltcGxlbWVudGF0aW9ucyBjYW4gdXNlIGl0LiBUaGUgY2FsbGVyIG1heSBub3QgcmVwbGFjZSBpdC5cblx0b3B0aW9ucy5jbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZCA9IGNsb25lVW5sZXNzT3RoZXJ3aXNlU3BlY2lmaWVkO1xuXG5cdHZhciBzb3VyY2VJc0FycmF5ID0gQXJyYXkuaXNBcnJheShzb3VyY2UpO1xuXHR2YXIgdGFyZ2V0SXNBcnJheSA9IEFycmF5LmlzQXJyYXkodGFyZ2V0KTtcblx0dmFyIHNvdXJjZUFuZFRhcmdldFR5cGVzTWF0Y2ggPSBzb3VyY2VJc0FycmF5ID09PSB0YXJnZXRJc0FycmF5O1xuXG5cdGlmICghc291cmNlQW5kVGFyZ2V0VHlwZXNNYXRjaCkge1xuXHRcdHJldHVybiBjbG9uZVVubGVzc090aGVyd2lzZVNwZWNpZmllZChzb3VyY2UsIG9wdGlvbnMpXG5cdH0gZWxzZSBpZiAoc291cmNlSXNBcnJheSkge1xuXHRcdHJldHVybiBvcHRpb25zLmFycmF5TWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpXG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG1lcmdlT2JqZWN0KHRhcmdldCwgc291cmNlLCBvcHRpb25zKVxuXHR9XG59XG5cbmRlZXBtZXJnZS5hbGwgPSBmdW5jdGlvbiBkZWVwbWVyZ2VBbGwoYXJyYXksIG9wdGlvbnMpIHtcblx0aWYgKCFBcnJheS5pc0FycmF5KGFycmF5KSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignZmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5Jylcblx0fVxuXG5cdHJldHVybiBhcnJheS5yZWR1Y2UoZnVuY3Rpb24ocHJldiwgbmV4dCkge1xuXHRcdHJldHVybiBkZWVwbWVyZ2UocHJldiwgbmV4dCwgb3B0aW9ucylcblx0fSwge30pXG59O1xuXG52YXIgZGVlcG1lcmdlXzEgPSBkZWVwbWVyZ2U7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVlcG1lcmdlXzE7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=
//# sourceURL=webpack-internal:///996
                                    

#18 JavaScript::Eval (size: 40301, repeated: 1) - SHA256: c93fe6ab09f0441c3a8bb684ccbfeeae3b5bbdc624adc8a4da7157b1db4771e0

                                        //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjogMywic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiICJdLCJuYW1lcyI6WyJjbG9zdXJlRHluYW1pY0J1dHRvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEifQ==
(function() {
    var Y = function(X, p, m, l, t, c, N, d, K, x, T) {
            if (1 == (p ^ 84) >> 3) {
                for (d = (c = [], 0), N = 0; d < m.length; d++)
                    for (N += l, t = t << l | m[d]; 7 < N;) N -= 8, c.push(t >> N & 255);
                T = c
            }
            return (p ^ (2 == (p + 1 & 11) && (N = l, N ^= N << 13, N ^= N >> 17, N = (c = N << 5, (c | 0) - (N & c) + (N & ~c)), (N = -~(N & t) - -1 + 2 * (N & ~t) + 2 * (~N | t)) || (N = 1), T = m ^ N), 68)) & X || ("function" === typeof m ? T = m : (m[mZ] || (m[mZ] = function(E) {
                return m.handleEvent(E)
            }), T = m[mZ])), (p ^ 74) & 7 || (Array.isArray(c) && (c = c.join(" ")), K = "aria-" + N, "" === c || void 0 == c ? (NS || (d = {}, NS = (d.atomic = m, d.autocomplete = "none", d.dropeffect = "none", d.haspopup = m, d.live = "off", d.multiline = m, d.multiselectable = m, d.orientation = "vertical", d.readonly = m, d.relevant = "additions text", d.required = m, d.sort = "none", d.busy = m, d.disabled = m, d.hidden = m, d.invalid = l, d)), x = NS, N in x ? t.setAttribute(K, x[N]) : t.removeAttribute(K)) : t.setAttribute(K, c)), T
        },
        Xl = function(X, p, m, l, t, c, N, d, K) {
            return (m - X << 1 >= m && (m + X & 57) < m && (l.s = p, l.listener = null, l.proxy = null, l.src = null, l.Wt = null), 2 <= m + 4 >> X && 8 > ((m ^ 2) & 8)) && (p.s ? c = true : (N = new h(l, this), t = p.listener, d = p.Wt || p.src, p.j && $v("", 32, true, "on", p), c = t.call(d, N)), K = c), K
        },
        D = function(X, p, m, l, t, c, N, d, K, x, T, E) {
            return p + (5 <= (p + 5 & 15) && 4 > ((p ^ 37) & 8) && (N = [49, 79, -26, 88, 16, -93, N, -81, -37, -89], d = t & 7, T = oa, x = pY[c.L](c.oT), x[c.L] = function(Z) {
                d += 6 + 7 * (K = Z, t), d &= 7
            }, x.concat = function(Z, k, B, w, q) {
                return (Z = (w = l % m + 1, -w * K + (T() | 0) * w + N[d + 67 & 7] * l * w + 2 * l * l * w - -4424 * K + 56 * K * K + d - 112 * l * l * K - 4424 * l * K), q = N[Z], K = void 0, N)[B = d + 53 & 7, k = t & 2, -2 * ~(B & k) - 2 * (B & ~k) + X * (B ^ k) + 2 * (B | ~k)] = q, N[d + (2 * (t | 0) - (t | 2) - (t | -3) + (~t | 2))] = 79, q
            }, E = x), (p | 40) == p && (X.C ? E = tr(X.G, X) : (l = cU(X, true, 0, 8), l & 128 && (l ^= 128, m = cU(X, true, 0, 2), l = (l << 2) + (m | 0)), E = l)), 5) >> 1 < p && (p - 9 ^ 27) >= p && (l = pY[m.L](m.j9), l[m.L] = function() {
                return X
            }, l.concat = function(Z) {
                X = Z
            }, E = l), E
        },
        Tb = function(X, p, m, l, t, c, N, d) {
            return ((((2 == (p << 1 & 6) && (this.type = m, this.currentTarget = this.target = l, this.defaultPrevented = this.F = false), (p | 72) == p) && (KY.call(this), this.u = new O(this), this.Ko = this, this.Bt = null), p) & X) == p && (l = m[ii], d = l instanceof O ? l : null), p + 7 & 79) >= p && (p - 9 ^ 23) < p && (this.listener = t, this.proxy = null, this.src = m, this.type = N, this.capture = !!l, this.Wt = c, this.key = ++d7, this.s = this.j = false), d
        },
        S = function(X, p, m, l, t, c, N, d, K) {
            if (2 == (X << (9 <= (X - 7 & 14) && 7 > ((X | 4) & 16) && (m(function(x) {
                    x(p)
                }), K = [function() {
                    return p
                }]), 1) & 15) && (E3.call(this), p || Zx || (Zx = new kv), this.Gb = void 0, this.xW = false, this.wT = this.l6 = this.vt = this.NG = this.Aj = null), !(X - 6 >> 4)) a: {
                for (d = p; d < c.length; ++d)
                    if (N = c[d], !N.s && N.listener == m && N.capture == !!l && N.Wt == t) {
                        K = d;
                        break a
                    }
                K = -1
            }
            return 1 == (X - 5 & 11) && (l = typeof m, K = "object" == l && m != p || "function" == l), K
        },
        W = function(X, p, m, l, t, c, N, d) {
            if (4 > (p << 1 & 12) && 3 <= (p | 8) >> 4) a: {
                for (c in l)
                    if (t.call(void 0, l[c], c, l)) {
                        N = m;
                        break a
                    }
                N = X
            }
            return (p - 3 | 5) >= (p - 7 << 1 < ((p | 24) == p && ("string" == typeof l.className ? l.className = m : l.setAttribute && l.setAttribute(X, m)), p) && (p + 1 ^ 28) >= p && (d = function() {}, d.prototype = l.prototype, m.D = l.prototype, m.prototype = new d, m.prototype.constructor = m, m.qH = function(K, x, T) {
                for (var E = Array(arguments.length - X), Z = X; Z < arguments.length; Z++) E[Z - X] = arguments[Z];
                return l.prototype[x].apply(K, E)
            }), p) && (p + 2 ^ 18) < p && (m.X = ((m.X ? m.X + "~" : "E:") + l.message + ":" + l.stack).slice(X, 2048)), N
        },
        Yv = function(X, p, m, l, t, c, N, d, K, x, T, E, Z) {
            if (-33 <= (l | 8) && 3 > ((l | 8) & 6))
                if (d = p.u.W[String(m)]) {
                    for (x = (d = d.concat(), X), K = 0; K < d.length; ++K)(T = d[K]) && !T.s && T.capture == t && (E = T.Wt || T.src, N = T.listener, T.j && L(7, 0, T, p.u), x = false !== N.call(E, c) && x);
                    Z = x && !c.defaultPrevented
                } else Z = X;
            if (-65 <= (l ^ 37) && 2 > l + 6 >> 4)
                for (d = m.length, N = "string" === typeof m ? m.split(X) : m, c = p; c < d; c++) c in N && t.call(void 0, N[c], c, m);
            return Z
        },
        u = function(X, p, m, l, t, c, N, d, K, x, T, E, Z, k) {
            if ((m & 23) == m) {
                if (l = window.btoa) {
                    for (c = "", t = 0; t < X.length; t += 8192) c += String.fromCharCode.apply(null, X.slice(t, t + 8192));
                    p = l(c).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "")
                } else p = void 0;
                Z = p
            }
            if (((m | 64) == m && (k = function() {}, t = void 0, l = BU(X, function(B) {
                    k && (p && hr(p), t = B, k(), k = void 0)
                }, !!p)[0], Z = {
                    invoke: function(B, w, q, e, J) {
                        function P() {
                            t(function(C) {
                                hr(function() {
                                    B(C)
                                })
                            }, q)
                        }
                        if (!w) return e = l(q), B && B(e), e;
                        t ? P() : (J = k, k = function() {
                            J(), hr(P)
                        })
                    }
                }), 16 <= m + 3) && 21 > m >> 1)
                if (Array.isArray(N))
                    for (K = X; K < N.length; K++) u(0, null, 26, l, t, c, N[K], d);
                else T = S(54, p, c) ? !!c.capture : !!c, t = Y(15, 52, t), d && d[s3] ? d.u.remove(String(N), t, T, l) : d && (x = Tb(46, 10, d)) && (E = x.tj(t, T, l, N)) && $v("", 24, true, "on", E);
            return (m - 2 | 66) >= m && (m + 7 & 40) < m && (Z = p.classList ? p.classList : L(32, X, "", p).match(/\S+/g) || []), Z
        },
        r = function(X, p, m, l, t, c, N, d) {
            return (X | (1 == (X + 6 & ((X >> 1 & 15 || (t = n(47, p, l, m), (c = 0 <= t) && Array.prototype.splice.call(m, t, p), d = c), 3 == X - 1 >> 3) && G.call(this, p, m || Dx.gT(), l), 11)) && (d = !!(t = l.P, (t | p) + (m | p) - (t | m))), 72)) == X && (c.classList ? c.classList.remove(N) : w7(1, 16, m, 1, N, c) && W(t, 26, Array.prototype.filter.call(u(p, c, 12), function(K) {
                return K != N
            }).join(l), c)), d
        },
        f = function(X, p, m, l, t, c) {
            return 16 <= (((p ^ 68) >> 4 || (X.gT = function() {
                return X.Lo ? X.Lo : X.Lo = new X
            }, X.Lo = void 0), 8 > (p + 1 & 8) && 1 <= p - 6 >> 4 && l.l.splice(X, X, m), p) ^ 71) && 26 > p + 2 && (c = X && X.parentNode ? X.parentNode.removeChild(X) : null), (p | 48) == p && (c = !!(t = l.Wo, ~(t & m) - -1 - X * ~t + X * (~t | m))), c
        },
        L = function(X, p, m, l, t, c, N, d, K, x, T, E, Z, k, B, w) {
            if ((X & (1 == (X - 6 & 15) && (t = m.type, t in l.W && r(33, 1, l.W[t], m) && (Xl(3, true, 9, m), l.W[t].length == p && (delete l.W[t], l.S--))), 97)) == X && (w = typeof l.className == p ? l.className : l.getAttribute && l.getAttribute("class") || m), 27 > X >> 1 && 24 <= X >> 1) {
                if (((l.J = ((x = (N = (T = (Z = ((d = (k = t ? 255 : m ? 5 : 2, 0 < l.RT && l.ct && l.e9 && 1 >= l.XC && !l.C && !l.V && (!m || 1 < l.yr - c) && 0 == document.hidden), m) || l.m$++, l.m$ == p)) || d ? l.i() : l.K, T) - l.K, N) >> 14, l).I && (l.I = (K = l.I, B = x * (N << 2), (K | B) + ~B - (K | ~B))), x) || l.J, l).kW += x, Z) || d) l.m$ = 0, l.K = T;
                !d || T - l.U < l.RT - k ? w = false : (l.yr = c, E = M(m ? 103 : 273, l), y(l, 273, l.B), l.l.push([qS, E, m ? c + 1 : c]), l.V = hr, w = true)
            }
            return X - 8 >> 4 || (w = m in SZ ? SZ[m] : SZ[m] = p + m), w
        },
        WU = function(X, p, m, l, t, c, N, d) {
            if (7 <= (p << 2 & 15) && 20 > p >> 1 && (this.src = m, this.S = 0, this.W = {}), !((p ^ 59) >> 4))
                if (c = l.length, c > m) {
                    for (N = (t = Array(c), m); N < c; N++) t[N] = l[N];
                    d = t
                } else d = [];
            return (p ^ X) >> 4 || (t.IT(function(K) {
                c = K
            }, m, l), d = c), d
        },
        $v = function(X, p, m, l, t, c, N, d, K, x, T) {
            if ((((((p ^ 81) >> 3 || (N = typeof c, d = N != l ? N : c ? Array.isArray(c) ? "array" : N : "null", T = d == t || d == l && typeof c.length == m), p - 4) >> 4 || (eZ.call(this, m ? m.type : ""), this.relatedTarget = this.currentTarget = this.target = null, this.button = this.screenY = this.screenX = this.clientY = this.clientX = this.offsetY = this.offsetX = 0, this.key = X, this.charCode = this.keyCode = 0, this.metaKey = this.shiftKey = this.altKey = this.ctrlKey = false, this.state = null, this.pointerId = 0, this.pointerType = X, this.N = null, m && (N = this.type = m.type, t = m.changedTouches && m.changedTouches.length ? m.changedTouches[0] : null, this.target = m.target || m.srcElement, this.currentTarget = l, c = m.relatedTarget, c || ("mouseover" == N ? c = m.fromElement : "mouseout" == N && (c = m.toElement)), this.relatedTarget = c, t ? (this.clientX = void 0 !== t.clientX ? t.clientX : t.pageX, this.clientY = void 0 !== t.clientY ? t.clientY : t.pageY, this.screenX = t.screenX || 0, this.screenY = t.screenY || 0) : (this.offsetX = m.offsetX, this.offsetY = m.offsetY, this.clientX = void 0 !== m.clientX ? m.clientX : m.pageX, this.clientY = void 0 !== m.clientY ? m.clientY : m.pageY, this.screenX = m.screenX || 0, this.screenY = m.screenY || 0), this.button = m.button, this.keyCode = m.keyCode || 0, this.key = m.key || X, this.charCode = m.charCode || ("keypress" == N ? m.keyCode : 0), this.ctrlKey = m.ctrlKey, this.altKey = m.altKey, this.shiftKey = m.shiftKey, this.metaKey = m.metaKey, this.pointerId = m.pointerId || 0, this.pointerType = "string" === typeof m.pointerType ? m.pointerType : Jr[m.pointerType] || X, this.state = m.state, this.N = m, m.defaultPrevented && h.D.preventDefault.call(this))), (p & 56) == p && "number" !== typeof t && t && !t.s) && ((K = t.src) && K[s3] ? L(39, 0, t, K.u) : (c = t.type, N = t.proxy, K.removeEventListener ? K.removeEventListener(c, N, t.capture) : K.detachEvent ? K.detachEvent(L(8, l, c), N) : K.addListener && K.removeListener && K.removeListener(N), PU--, (d = Tb(46, 12, K)) ? (L(55, 0, t, d), 0 == d.S && (d.src = null, K[ii] = null)) : Xl(3, m, 11, t))), p) - 2 ^ 3) >= p && (p + 3 & 30) < p) {
                for (N = c = 0; c < m.length; c++) N += m.charCodeAt(c), N += N << 10, N ^= N >> 6;
                T = ((d = (N += N << 3, N = (K = N >> 11, (N | 0) - (N & K) + (~N & K)), N) + (N << 15) >>> 0, x = new Number(d & (1 << l) - 1), x)[0] = (d >>> l) % t, x)
            }
            return 2 <= p - 9 >> 3 && 18 > (p ^ 28) && (this.H = v.document || document), T
        },
        CY = function(X, p, m, l, t) {
            return 22 > m >> ((m - X | 7) < m && (m + 7 ^ 9) >= m && p.wT && p.wT.forEach(l, void 0), 1) && 14 <= (m ^ 31) && (t = pY[l](pY.prototype, {
                console: p,
                splice: p,
                call: p,
                document: p,
                length: p,
                floor: p,
                propertyIsEnumerable: p,
                replace: p,
                pop: p,
                stack: p,
                parent: p,
                prototype: p
            })), t
        },
        LY = function(X, p, m, l, t, c) {
            return ((m & 90) == m && (c = Math.floor(this.YW + (this.i() - this.U))), m - 5) >> 3 || (l.classList ? Array.prototype.forEach.call(t, function(N) {
                r(72, "string", 0, " ", "class", l, N)
            }) : W("class", 24, Array.prototype.filter.call(u("string", l, p), function(N) {
                return !(0 <= n(15, X, N, t))
            }).join(" "), l)), c
        },
        b = function(X, p, m, l, t, c, N, d, K, x, T, E, Z) {
            if (14 <= ((X ^ 56) & 19) && 27 > (X | 3))
                if (t = "array" === ui("splice", l, "array") ? l : [l], this.X) m(this.X);
                else try {
                    N = !this.l.length, c = [], f(0, 35, [VP, c, t], this), f(0, 38, [nY, m, c], this), p && !N || jZ(null, 0, p, this, true)
                } catch (k) {
                    W(0, 22, this, k), m(this.X)
                }
                if (1 == ((X + 6 & 15 || (l = g(0, 8, p), l & m && (l = 127 - ~l + ~(l | 127) | g(0, 8, p) << 7), Z = l), X >> 1 & 19) || (Z = (x = (K = (d = l[t] << 24, c = l[(t | 0) + 1] << m, -~(d & c) + -2 - (~d ^ c)), N = l[(t | 0) + 2] << p, (N | 0) + (K ^ N) + (~K ^ N) - (~K | N)), T = l[(t | 0) + 3], -~x + 2 * (~x & T) + (x | ~T))), X - 7) >> 3) {
                    for (N = D(p, 59), t = m; l > m; l--) t = (d = t << 8, c = g(0, 8, p), -(d & c) - 2 * ~d + (d ^ c) + 2 * (~d | c));
                    y(p, N, t)
                }
            return 4 == (X + 8 & 13) && (Z = E = function() {
                if (t.J == t) {
                    if (t.g) {
                        var k = [Gb, N, c, void 0, d, K, arguments];
                        if (l == p) var B = jZ(null, 0, (f(0, 34, k, t), m), t, m);
                        else if (1 == l) {
                            var w = !t.l.length;
                            f(0, 37, k, t), w && jZ(null, 0, m, t, m)
                        } else B = r7(t, 412, 25, k);
                        return B
                    }
                    d && K && d.removeEventListener(K, E, fY)
                }
            }), Z
        },
        n = function(X, p, m, l, t, c, N, d, K, x, T, E, Z, k, B) {
            if ((X & 77) == (3 > (X << 2 & 14) && -76 <= (X | 8) && (k = function(w) {
                    return p.call(k.src, k.listener, w)
                }, p = U3, B = k), X)) {
                if (!l) throw Error("Invalid event type");
                if (!((Z = Tb(46, 14, (T = S(22, m, c) ? !!c.capture : !!c, d))) || (d[ii] = Z = new O(d)), x = Z.add(l, K, N, T, t), x).proxy) {
                    if (((E = n(20), x).proxy = E, E).src = d, E.listener = x, d.addEventListener) QP || (c = T), void 0 === c && (c = p), d.addEventListener(l.toString(), E, c);
                    else if (d.attachEvent) d.attachEvent(L(9, "on", l.toString()), E);
                    else if (d.addListener && d.removeListener) d.addListener(E);
                    else throw Error("addEventListener and attachEvent are unavailable.");
                    PU++
                }
            }
            if ((X + 6 & 77) < X && (X - 6 ^ 10) >= X)
                if (l && l.once) MS(3, 36, p, true, t, c, d, l, N);
                else if (Array.isArray(d))
                for (K = 0; K < d.length; K++) n(11, null, false, l, t, c, N, d[K]);
            else N = Y(15, 20, N), t && t[s3] ? t.u.add(String(d), N, m, S(26, p, l) ? !!l.capture : !!l, c) : n(9, false, null, d, c, l, m, t, N);
            if (((X ^ 59) >> 4 || (B = p), X - 3 | 12) < X && (X - 8 ^ 23) >= X) a: if ("string" === typeof l) B = "string" !== typeof m || m.length != p ? -1 : l.indexOf(m, 0);
                else {
                    for (t = 0; t < l.length; t++)
                        if (t in l && l[t] === m) {
                            B = t;
                            break a
                        }
                    B = -1
                }
            return B
        },
        A = function(X, p, m, l, t, c, N, d, K, x, T) {
            if (2 == (t << 1 & ((t + 9 ^ 18) >= t && (t - 9 | X) < t && (T = f(2, 57, c, p) && r(15, 0, c, p) != l && (!(p.gv & c) || p.dispatchEvent(A(65, 64, 2, m, 64, 16, l, c))) && !p.Co), 14)))
                for (c in N = m, l.W) {
                    for (d = (K = m, l.W[c]); K < d.length; K++) ++N, Xl(3, p, 12, d[K]);
                    delete(l.S--, l.W)[c]
                }
            if (4 == (t ^ 7) >> 4) a: {
                switch (d) {
                    case 1:
                        T = N ? "disable" : "enable";
                        break a;
                    case m:
                        T = N ? "highlight" : "unhighlight";
                        break a;
                    case l:
                        T = N ? "activate" : "deactivate";
                        break a;
                    case 8:
                        T = N ? "select" : "unselect";
                        break a;
                    case c:
                        T = N ? "check" : "uncheck";
                        break a;
                    case 32:
                        T = N ? "focus" : "blur";
                        break a;
                    case p:
                        T = N ? "open" : "close";
                        break a
                }
                throw Error("Invalid component state");
            }
            if (!((t | 2) >> 4)) {
                if (!(yP.call(this, l), K = p)) {
                    for (c = this.constructor; c;) {
                        if (N = (d = w7(1, 58, c), vU[d])) break;
                        c = (x = Object.getPrototypeOf(c.prototype)) && x.constructor
                    }
                    K = N ? "function" === typeof N.gT ? N.gT() : new N : null
                }
                this.O = K
            }
            return (t & 58) == t && (T = (c = Ia[m.substring(0, 3) + "_"]) ? c(m.substring(3), p, l) : S(3, m, p)), T
        },
        MS = function(X, p, m, l, t, c, N, d, K, x, T) {
            if ((p - X ^ 32) < p && (p - 1 | 11) >= p)
                if (Array.isArray(N))
                    for (x = 0; x < N.length; x++) MS(3, 35, null, true, t, c, N[x], d, K);
                else K = Y(15, 36, K), t && t[s3] ? t.u.add(String(N), K, l, S(74, m, d) ? !!d.capture : !!d, c) : n(5, false, null, N, c, d, l, t, K);
            return (p & 78) == p && (this.Co = this.Co), T
        },
        w7 = function(X, p, m, l, t, c, N, d, K) {
            if (3 == ((p | ((p | (((p - 2 & 3) == X && (K = Math.floor(this.i())), p) << X & 14 || (c.classList ? N = c.classList.contains(t) : (d = u("string", c, 9), N = n(18, l, t, d) >= m), K = N), 56)) == p && (K = Object.prototype.hasOwnProperty.call(m, g7) && m[g7] || (m[g7] = ++Ra)), X)) & 11)) {
                if (!l) throw Error("Invalid class name " + l);
                if ("function" !== typeof m) throw Error("Invalid decorator function " + m);
            }
            return K
        },
        bi = function(X, p, m, l, t, c, N, d, K) {
            if ((l + (l + 4 >> 4 || (this.J = m), 7) & 26) < l && l - 8 << 2 >= l)
                if (m.classList) Array.prototype.forEach.call(t, function(x, T) {
                    m.classList ? m.classList.add(x) : w7(1, 8, 0, 1, x, m) || (T = L(33, "string", p, m), W("class", X, T + (0 < T.length ? " " + x : x), m))
                });
                else {
                    for (d in N = (Array.prototype.forEach.call(u("string", (c = {}, m), 11), function(x) {
                            c[x] = true
                        }), Array.prototype.forEach.call(t, function(x) {
                            c[x] = true
                        }), p), c) N += 0 < N.length ? " " + d : d;
                    W("class", 30, N, m)
                }
            return K
        },
        h = function(X, p, m, l, t) {
            return $v.call(this, "", 5, X, p, m, l, t)
        },
        O = function(X) {
            return WU.call(this, 72, 18, X)
        },
        Ar = function(X, p, m, l) {
            a(F(M((l = D(X, (m = D(X, 56), 58)), m), X), p), X, l)
        },
        Fl = function(X, p, m, l, t, c, N) {
            (N = (t = D((c = D(p, (m = (X | 4) - ~X + -5 - 2 * (l = X & 3, X & -5), 58)), p), 57), M)(c, p), m && (N = aa("" + N, 224)), l) && a(F(N.length, 2), p, t), a(N, p, t)
        },
        HU = function(X) {
            return n.call(this, 51, X)
        },
        zb = function(X, p, m, l, t) {
            if ((l = v.trustedTypes, t = m, !l) || !l.createPolicy) return t;
            try {
                t = l.createPolicy(p, {
                    createHTML: HU,
                    createScript: HU,
                    createScriptURL: HU
                })
            } catch (c) {
                if (v.console) v.console[X](c.message)
            }
            return t
        },
        mf = function(X, p, m, l, t) {
            if (3 == X.length) {
                for (t = 0; 3 > t; t++) p[t] += X[t];
                for (m = [13, 8, 13, 12, 16, 5, 3, (l = 0, 10), 15]; 9 > l; l++) p[3](p, l % 3, m[l])
            }
        },
        NA = function(X, p, m, l, t, c, N, d, K, x) {
            function T(E) {
                E && N.appendChild("string" === typeof E ? c.createTextNode(E) : E)
            }
            for (x = p; x < t.length; x++)
                if (K = t[x], !$v("", 80, "number", X, l, K) || S(58, null, K) && 0 < K.nodeType) T(K);
                else {
                    a: {
                        if (K && "number" == typeof K.length) {
                            if (S(42, null, K)) {
                                d = "function" == typeof K.item || "string" == typeof K.item;
                                break a
                            }
                            if ("function" === typeof K) {
                                d = "function" == typeof K.item;
                                break a
                            }
                        }
                        d = m
                    }
                    Yv("", 0, d ? WU(72, 48, 0, K) : K, 5, T)
                }
        },
        l8 = function(X, p, m, l, t, c, N, d) {
            if (!l.X) {
                l.XC++;
                try {
                    for (d = (t = 0, l.B), c = void 0; --m;) try {
                        if (N = void 0, l.C) c = tr(l.C, l);
                        else {
                            if ((t = M(273, l), t) >= d) break;
                            c = M((N = D((y(l, 103, t), l), 40), N), l)
                        }
                        L(48, 4, !(c && c.call ? c(l, m) : $M(l, [XG, 21, N], 0, ":"), 1), l, false, m)
                    } catch (K) {
                        M(71, l) ? $M(l, K, p, ":") : y(l, 71, K)
                    }
                    if (!m) {
                        if (l.S9) {
                            l8(22, X, (l.XC--, 111812526819), l);
                            return
                        }
                        $M(l, [XG, 33], 0, ":")
                    }
                } catch (K) {
                    try {
                        $M(l, K, p, ":")
                    } catch (x) {
                        W(0, 19, l, x)
                    }
                }
                l.XC--
            }
        },
        o3 = function(X, p, m, l, t) {
            return bi.call(this, 25, "", X, 25, p, m, l, t)
        },
        r7 = function(X, p, m, l, t, c, N, d, K, x) {
            if ((t = l[0], t) == VP) X.aT = m, X.Z(l);
            else if (t == nY) {
                x = l[1];
                try {
                    K = X.X || X.Z(l)
                } catch (T) {
                    W(0, 14, X, T), K = X.X
                }
                x(K)
            } else if (t == qS) X.Z(l);
            else if (t == pu) X.Z(l);
            else if (t == tw) {
                try {
                    for (d = 0; d < X.po.length; d++) try {
                        c = X.po[d], c[0][c[1]](c[2])
                    } catch (T) {}
                } catch (T) {}(0, l[X.po = [], 1])(function(T, E) {
                    X.IT(T, true, E)
                }, function(T) {
                    f(0, 32, (T = !X.l.length, [cm]), X), T && jZ(null, 0, true, X, false)
                })
            } else {
                if (t == Gb) return N = l[2], y(X, p, l[6]), y(X, 473, N), X.Z(l);
                t == cm ? (X.rT = [], X.o = [], X.g = null) : t == Ku && "loading" === v.document.readyState && (X.V = function(T, E) {
                    function Z() {
                        E || (E = true, T())
                    }(v.document.addEventListener("DOMContentLoaded", Z, (E = false, fY)), v).addEventListener("load", Z, fY)
                })
            }
        },
        i8 = function() {
            return WU.call(this, 72, 5)
        },
        tr = function(X, p, m) {
            return (m = X.create().shift(), p.C).create().length || p.G.create().length || (p.G = void 0, p.C = void 0), m
        },
        eZ = function(X, p) {
            return Tb.call(this, 46, 9, X, p)
        },
        kv = function() {
            return $v.call(this, "", 25)
        },
        H, aa = function(X, p, m, l, t, c, N, d, K, x, T, E, Z, k, B) {
            for (k = (K = X.replace(/\r\n/g, "\n"), c = 0), d = []; k < K.length; k++) N = K.charCodeAt(k), 128 > N ? d[c++] = N : (2048 > N ? d[c++] = (l = N >> 6, (l | 0) + 192 - (l & 192)) : (55296 == (N | 0) - -1 + (~N | 64512) && k + 1 < K.length && 56320 == (B = K.charCodeAt(k + 1), (B | 0) - -1 + (~B | 64512)) ? (N = (T = (N | 1023) - ~(N & 1023) + ~(N | 1023) << 10, 2 * (65536 & T) + -65537 + ~T - 2 * ~(65536 | T)) + (m = K.charCodeAt(++k), (m | 0) - -1 + (~m | 1023)), d[c++] = (Z = N >> 18, 242 + 3 * (Z & -241) + 2 * (~Z | 240)), d[c++] = (E = N >> 12 & 63, -~E + 2 * (~E & 128) + (E | -129))) : d[c++] = (t = N >> 12, -~(t & p) - 1 + (t ^ p)), d[c++] = (x = N >> 6 & 63, -2 - ~x - (x | -129))), d[c++] = N & 63 | 128);
            return d
        },
        M = function(X, p, m) {
            if (void 0 === (m = p.g[X], m)) throw [XG, 30, X];
            if (m.value) return m.create();
            return (m.create(2 * X * X + 79 * X + -79), m).prototype
        },
        $M = function(X, p, m, l, t, c, N, d, K, x, T, E) {
            if (!X.ZB) {
                if (3 < (0 == (N = M(491, ((E = void 0, p) && p[0] === XG && (m = p[1], E = p[2], p = void 0), X)), N.length) && (d = M(103, X) >> 3, N.push(m, (c = d >> 8, (c | 0) - -1 + (~c | 255)), d & 255), void 0 != E && N.push(E & 255)), K = "", p && (p.message && (K += p.message), p.stack && (K += l + p.stack)), t = M(160, X), t)) {
                    X.J = (K = (K = K.slice(0, (t | 0) - 3), t -= (T = K.length, 2 * (T & 3) + ~T - -4 + 2 * (T & -4)), aa(K, 224)), x = X.J, X);
                    try {
                        a(F(K.length, 2).concat(K), X, 248, 12)
                    } finally {
                        X.J = x
                    }
                }
                y(X, 160, t)
            }
        },
        dp = function() {
            return L.call(this, 24)
        },
        xM = function(X, p) {
            return LY.call(this, 1, 10, 5, X, p)
        },
        a = function(X, p, m, l, t, c, N, d, K) {
            if (p.J == p)
                for (t = M(m, p), 248 == m ? (N = function(x, T, E, Z, k, B) {
                        if (t.Uc != (Z = (B = t.length, -3 * ~B) + 3 * ~(B | 4) - (B & -5) + 2 * (B ^ 4) >> 3, Z)) {
                            E = (T = Z << 3, (k = [0, 0, K[1], K[2]], -1 - 2 * ~T + 2 * ~(T | 4)) - (~(t.Uc = Z, T) ^ 4));
                            try {
                                t.fo = Tx(8, 16, 2, 712, b(24, 8, 16, t, (E | 0) + 4), k, b(25, 8, 16, t, E))
                            } catch (w) {
                                throw w;
                            }
                        }
                        t.push(t.fo[-~(B & 7) + (~B & 7) + (B | -8)] ^ x)
                    }, K = M(287, p)) : N = function(x) {
                        t.push(x)
                    }, l && N(l & 255), d = X.length, c = 0; c < d; c++) N(X[c])
        },
        EO = function(X, p, m) {
            return r.call(this, 25, X, p, m)
        },
        ZP = function(X) {
            return f.call(this, X, 3)
        },
        YM = function(X, p) {
            for (var m, l = 1, t; l < arguments.length; l++) {
                for (m in t = arguments[l], t) X[m] = t[m];
                for (var c = 0; c < kM.length; c++) m = kM[c], Object.prototype.hasOwnProperty.call(t, m) && (X[m] = t[m])
            }
        },
        Bm = function(X, p, m, l, t, c) {
            try {
                l = X[(-2 - 2 * ~p - (p ^ 2) + 2 * (~p & 2)) % 3], X[p] = (c = X[p], t = X[(-2 * ~(p & 1) + -2 + (p ^ 1)) % 3], -~(c & t) + ~(c | t) + 2 * (c & ~t)) - (l | 0) ^ (1 == p ? l << m : l >>> m)
            } catch (N) {
                throw N;
            }
        },
        E3 = function() {
            return Tb.call(this, 46, 74)
        },
        hw = function() {
            return r.call(this, 3)
        },
        DP = function(X, p, m, l, t, c, N, d, K, x) {
            for (c = (N = D((d = D(t, (K = t[sO] || {}, X)), K.sc = D(t, 56), K.h = [], x = t.J == t ? (g(0, m, t) | 0) - l : 1, t), 56), 0); c < x; c++) K.h.push(D(t, p));
            for (; x--;) K.h[x] = M(K.h[x], t);
            return (K.FC = M(N, t), K).no = M(d, t), K
        },
        OO = function(X, p) {
            for (p = []; X--;) p.push(255 * Math.random() | 0);
            return p
        },
        wp = function(X, p, m, l, t) {
            return Tb.call(this, 46, 3, m, l, p, t, X)
        },
        qA = function(X, p, m) {
            y(m, (m.Ec.push(m.g.slice()), m.g[p] = void 0, p), X)
        },
        z = function(X, p, m) {
            m = this;
            try {
                So(X, p, this)
            } catch (l) {
                W(0, 20, this, l), X(function(t) {
                    t(m.X)
                })
            }
        },
        Wm = function(X, p, m, l, t, c, N, d, K, x, T, E, Z, k) {
            ((p.push((N = (K = X[0] << 24, Z = X[1] << 16, (K & Z) + ~(K & Z) - ~(K | Z)), E = X[2] << 8, -~E + 2 * (N ^ E) - 2 * (~N & E) + (~N | E)) | X[3]), p).push((x = (m = X[4] << 24 | X[5] << 16, k = X[6] << 8, (k | 0) - 1 - (~m | k)), t = X[7], -~(x & t) + 2 * (x ^ t) - (~x & t) + (~x | t))), p).push((l = (T = X[8] << 24, d = X[9] << 16, (T | 0) + ~(T & d) - ~d), c = X[10] << 8, (l | 0) + (l & c) + ~l - (~l ^ c)) | X[11])
        },
        So = function(X, p, m, l, t, c) {
            for (c = (m.j9 = (m.oT = CY(5, {get: function() {
                        return this.concat()
                    }
                }, 5, ((m.DA = (m.vo = Jw, eo), m).X3 = m[nY], m.L)), pY)[m.L](m.oT, {
                    value: {
                        value: {}
                    }
                }), 0), t = []; 128 > c; c++) t[c] = String.fromCharCode(c);
            jZ(null, 0, true, m, (f(0, ((f(0, (y((y(m, 473, (y(m, (y(m, (y(m, 297, ((y(m, ((y(m, 381, (y(m, 248, (y(m, (y(m, (y(m, 341, (y(m, (y(m, 135, (y(m, (y(m, (y(m, (y(m, 141, (y(m, ((y(m, (y(m, (y(m, 393, (y(m, 37, (m.iC = (y(m, 247, (y(m, 358, (y(m, (y(m, (new EO((y(m, (y(m, (y((y(m, 91, (y(m, 49, [165, (y(m, (y((y(m, 34, (y(m, (y(m, 373, (y(m, (m.XC = (m.rT = (m.Tb = (m.MG = function(N) {
                return bi.call(this, 25, "", N, 3)
            }, (m.tx = (m.o = [], 0), m.V = null, (m.po = (m.RT = 0, []), m.m$ = void 0, l = (m.hj = void 0, ((m.l = [], (m.G = void 0, m).e9 = false, m.yr = 8001, m).K = 0, m.C = (m.B = 0, void 0), m).kW = 1, m.aT = 25, (m.ct = false, window.performance) || {}), m.Ec = [], m.Y = (m.ZB = false, (m.I = void 0, m.J = m, m).X = void 0, void 0), m.YW = 0, m.U = 0, l).timeOrigin) || (l.timing || {}).navigationStart || 0), m.g = [], []), 0), 273), 0), y(m, 103, 0), function(N, d, K, x, T, E) {
                y((d = (T = D(N, (K = D(N, (x = D(N, 57), 40)), 58)), M)(K, N), E = M(x, N) == d, N), T, +E)
            })), 287), [0, 0, 0]), function(N, d, K, x, T, E, Z) {
                for (K = (d = (T = M(316, (Z = b(42, (E = D(N, 56), N), 128), x = "", N)), T).length, 0); Z--;) K = ((K | 0) + (b(58, N, 128) | 0)) % d, x += t[T[K]];
                y(N, E, x)
            })), m), 359, function(N) {
                b(19, N, 0, 4)
            }), 160), 2048), 0), 0]), function(N, d, K, x) {
                y(N, (x = g(0, 8, (d = D(N, 40), N)), K = D(N, 40), K), M(d, N) >>> x)
            })), m), 284, function(N, d, K, x, T) {
                for (x = (d = (T = (K = D(N, 40), b(26, N, 128)), 0), []); d < T; d++) x.push(g(0, 8, N));
                y(N, K, x)
            }), m.Ct = 0, 142), function(N, d, K, x) {
                L(49, 4, true, N, false, d) || (x = D(N, 57), K = D(N, 56), y(N, K, function(T) {
                    return eval(T)
                }(Pm(M(x, N.J)))))
            }), 71), 344), "Submit")), 491), []), 500), function(N, d, K) {
                y(N, (d = (K = D(N, 57), D(N, 57)), d), "" + M(K, N))
            }), function(N, d, K, x) {
                if (x = N.Ec.pop()) {
                    for (K = g(0, 8, N); 0 < K; K--) d = D(N, 59), x[d] = N.g[d];
                    x[160] = (x[491] = N.g[491], N.g[160]), N.g = x
                } else y(N, 273, N.B)
            })), function(N, d, K, x, T, E) {
                y((E = M((d = M((T = (x = D(N, (K = D(N, 58), 56)), D(N, 57)), K), N), x), N), N), T, d in E | 0)
            })), 0), function(N, d, K, x, T, E, Z) {
                (x = (E = D(N, (Z = D(N, 58), 57)), D)(N, 58), N.J) == N && (T = M(Z, N), K = M(E, N), d = M(x, N), T[K] = d, 340 == Z && (N.Y = void 0, 2 == K && (N.I = cU(N, false, 0, 32), N.Y = void 0)))
            })), function(N, d) {
                (d = M(D(N, 59), N), qA)(d, 273, N.J)
            })), 1), function(N, d, K, x, T, E, Z, k, B, w, q, e, J, P, C, R, I) {
                function U(V, Q) {
                    for (; R < V;) w |= g(0, 8, N) << R, R += 8;
                    return w >>= (Q = w & (1 << (R -= V, V)) - 1, V), Q
                }
                for (T = (Z = (R = w = (d = D(N, 59), 0), E = U(3), 4 + 2 * (E & -2) + (E | -2) + (~E | 1)), q = U(5), I = 0), B = []; I < q; I++) C = U(1), B.push(C), T += C ? 0 : 1;
                for (K = (x = (-2 * ~T + -4 - (T | -2) + (~T | 1)).toString(2).length, k = 0, []); k < q; k++) B[k] || (K[k] = U(x));
                for (J = 0; J < q; J++) B[J] && (K[J] = D(N, 40));
                for (P = (e = Z, []); e--;) P.push(M(D(N, 56), N));
                y(N, d, function(V, Q, xv, li, O3) {
                    for (xv = (li = 0, []), Q = []; li < q; li++) {
                        if (!B[O3 = K[li], li]) {
                            for (; O3 >= Q.length;) Q.push(D(V, 57));
                            O3 = Q[O3]
                        }
                        xv.push(O3)
                    }(V.C = D(P.slice(), 11, V), V).G = D(xv, 10, V)
                })
            }), 378), function(N) {
                Ar(N, 4)
            }), y)(m, 116, function() {}), 159), function(N) {
                Fl(3, N)
            }), function(N, d, K, x, T) {
                y(N, (d = M((T = (x = D(N, (K = D(N, 58), 56)), M(x, N)), K), N), x), T + d)
            })), 366), function(N) {
                Ar(N, 1)
            }), 480), v), 165), function(N, d, K, x, T, E, Z, k) {
                y(N, (T = (K = (E = (k = (x = D(N, (Z = D(N, (d = D(N, 56), 57)), 59)), D)(N, 40), M(x, N)), M)(k, N), M(Z, N)), d), b(30, 2, false, K, N, E, T))
            }), function(N, d, K, x, T, E, Z, k, B, w, q, e, J, P) {
                if (!L(52, 4, true, N, true, d)) {
                    if ("object" == ui((x = M((T = (e = (w = (J = D(N, (Z = D(N, (q = D((E = D(N, 58), N), 59), 40)), 40)), M(Z, N)), M(J, N)), M)(q, N), E), N), "splice"), x, "array")) {
                        for (K in k = [], x) k.push(K);
                        x = k
                    }
                    for (w = 0 < (P = 0, B = x.length, w) ? w : 1; P < B; P += w) T(x.slice(P, (P | 0) + (w | 0)), e)
                }
            })), 355), function(N, d, K, x, T) {
                y(N, (K = ui("splice", (x = (T = D(N, 58), D(N, 59)), d = M(T, N), d), "array"), x), K)
            }), function(N) {
                Fl(4, N)
            })), 376), function(N, d, K) {
                (d = D(N, 57), K = M(d, N.J), K)[0].removeEventListener(K[1], K[2], fY)
            }), y(m, 477, function(N, d, K, x, T, E) {
                y(N, (x = (K = M((E = D(N, (T = D(N, (d = D(N, 40), 57)), 56)), T), N), M(d, N)), E), x[K])
            }), 187), function(N, d, K, x) {
                0 != (d = (x = (K = D(N, 59), D(N, 59)), M(x, N)), M(K, N)) && y(N, 273, d)
            }), OO(4))), function(N, d, K, x, T, E, Z, k, B) {
                L(50, 4, true, N, false, d) || (Z = DP(59, 58, 8, 1, N.J), k = Z.h, E = Z.sc, K = k.length, x = Z.FC, T = Z.no, B = 0 == K ? new x[T] : 1 == K ? new x[T](k[0]) : 2 == K ? new x[T](k[0], k[1]) : 3 == K ? new x[T](k[0], k[1], k[2]) : 4 == K ? new x[T](k[0], k[1], k[2], k[3]) : 2(), y(N, E, B))
            })), m).Bo = 0, 181), function(N, d, K, x, T, E, Z, k, B, w) {
                (k = (x = (w = (E = (K = D((Z = D(N, 56), N), 58), T = D(N, 57), d = D(N, 58), M(d, N)), M(K, N)), M(T, N)), M(Z, N.J)), 0 !== k) && (B = b(28, 2, false, 1, N, E, x, k, w), k.addEventListener(w, B, fY), y(N, 206, [k, w, B]))
            }), y(m, 323, function(N, d, K, x, T) {
                !L(51, 4, true, N, false, d) && (K = DP(59, 58, 8, 1, N), T = K.FC, x = K.no, N.J == N || x == N.MG && T == N) && (y(N, K.sc, x.apply(T, K.h)), N.K = N.i())
            }), y)(m, 100, 0), function(N, d, K, x) {
                y(N, (x = D(N, (d = D(N, (K = D(N, 59), 40)), 59)), x), M(K, N) || M(d, N))
            })), 511), m), 206), 0), {})), m), 52, []), 33), [Ku], m), f)(0, 31, [pu, p], m), 36), [tw, X], m), true))
        },
        v = this || self,
        BU = function(X, p, m, l) {
            return A.call(this, 65, p, X, m, 16, l)
        },
        F = function(X, p, m, l) {
            for (l = (p | 0) - 1, m = []; 0 <= l; l--) m[-1 + (~p ^ 1) - 2 * (~p | 1) - (l | 0)] = X >> 8 * l & 255;
            return m
        },
        jZ = function(X, p, m, l, t, c, N, d) {
            if (l.l.length) {
                l.ct = (l.ct && p(), true), l.e9 = m;
                try {
                    N = l.i(), l.U = N, l.K = N, l.m$ = p, d = Cu(21, 412, 0, m, l, true, X), c = l.i() - l.U, l.YW += c, c < (t ? 0 : 10) || l.aT-- <= p || (c = Math.floor(c), l.rT.push(254 >= c ? c : 254))
                } finally {
                    l.ct = false
                }
                return d
            }
        },
        ui = function(X, p, m, l, t) {
            if (l = typeof p, "object" == l)
                if (p) {
                    if (p instanceof Array) return m;
                    if (p instanceof Object) return l;
                    if (t = Object.prototype.toString.call(p), "[object Window]" == t) return "object";
                    if ("[object Array]" == t || "number" == typeof p.length && "undefined" != typeof p.splice && "undefined" != typeof p.propertyIsEnumerable && !p.propertyIsEnumerable(X)) return m;
                    if ("[object Function]" == t || "undefined" != typeof p.call && "undefined" != typeof p.propertyIsEnumerable && !p.propertyIsEnumerable("call")) return "function"
                } else return "null";
            else if ("function" == l && "undefined" == typeof p.call) return "object";
            return l
        },
        KY = function() {
            return MS.call(this, 3, 6)
        },
        Dx = function() {
            return Y.call(this, 15, 8)
        },
        Lu = function(X, p, m, l, t, c) {
            return M(473, (y(l, (l8(22, t, m, ((c = M(X, l), l.o) && c < l.B ? (y(l, X, l.B), qA(p, X, l)) : y(l, X, p), l)), X), c), l))
        },
        Tx = function(X, p, m, l, t, c, N, d, K, x) {
            for (K = c[x = c[3] | (d = 0, 0), m] | 0; 15 > d; d++) t = t >>> X | t << 24, x = x >>> X | x << 24, t += N | 0, N = N << 3 | N >>> 29, x += K | 0, t ^= K + l, N ^= t, K = K << 3 | K >>> 29, x ^= d + l, K ^= x;
            return [N >>> 24 & 255, N >>> p & 255, N >>> X & 255, N >>> 0 & 255, t >>> 24 & 255, t >>> p & 255, t >>> X & 255, t >>> 0 & 255]
        },
        g = function(X, p, m) {
            return m.C ? tr(m.G, m) : cU(m, true, X, p)
        },
        yP = function(X) {
            return S.call(this, 25, X)
        },
        G = function(X, p, m, l, t, c, N, d) {
            return A.call(this, 65, p, X, m, 7, l, t, c, N, d)
        },
        U3 = function(X, p, m, l, t, c) {
            return Xl.call(this, 3, X, 16, p, m, l, t, c)
        },
        cU = function(X, p, m, l, t, c, N, d, K, x, T, E, Z, k, B, w, q) {
            if (q = M(273, X), q >= X.B) throw [XG, 31];
            for (T = (d = (K = (E = m, X.X3.length), l), q); d > m;) k = T % 8, t = 8 - (k | m), B = t < d ? t : d, c = T >> 3, x = X.o[c], p && (w = X, w.Y != T >> 6 && (w.Y = T >> 6, Z = M(340, w), w.hj = Tx(8, 16, 2, 712, w.Y, [0, 0, Z[1], Z[2]], w.I)), x ^= X.hj[c & K]), E |= (x >> 8 - (k | m) - (B | m) & (1 << B) - 1) << (d | m) - (B | m), T += B, d -= B;
            return y(X, 273, (q | m) + (l | (N = E, m))), N
        },
        y = function(X, p, m) {
            if (273 == p || 103 == p) X.g[p] ? X.g[p].concat(m) : X.g[p] = D(m, 9, X);
            else {
                if (X.ZB && 340 != p) return;
                49 == p || 248 == p || 52 == p || 491 == p || 287 == p ? X.g[p] || (X.g[p] = D(3, 3, 16, p, 102, X, m)) : X.g[p] = D(3, 5, 16, p, 9, X, m)
            }
            340 == p && (X.I = cU(X, false, 0, 32), X.Y = void 0)
        },
        u8 = function(X, p, m, l) {
            return u.call(this, X, p, 68, m, l)
        },
        Cu = function(X, p, m, l, t, c, N, d, K, x) {
            for (; t.l.length;) {
                x = (t.V = N, t.l.pop());
                try {
                    d = r7(t, p, 25, x)
                } catch (T) {
                    W(m, X, t, T)
                }
                if (l && t.V) {
                    K = t.V, K(function() {
                        jZ(null, m, c, t, c)
                    });
                    break
                }
            }
            return d
        },
        g7 = "closure_uid_" + (1E9 * Math.random() >>> 0),
        Ra = 0,
        Zx, QP = function(X, p) {
            if (!v.addEventListener || !Object.defineProperty) return false;
            X = Object.defineProperty({}, "passive", (p = false, {get: function() {
                    p = true
                }
            }));
            try {
                v.addEventListener("test", function() {}, X), v.removeEventListener("test", function() {}, X)
            } catch (m) {}
            return p
        }(),
        Jr = {
            2: (W(2, ((eZ.prototype.preventDefault = function() {
                this.defaultPrevented = true
            }, eZ.prototype).stopPropagation = (KY.prototype.Co = false, function() {
                this.F = true
            }), 5), h, eZ), "touch"),
            3: "pen",
            4: "mouse"
        },
        s3 = "closure_listenable_" + (1E6 * (h.prototype.preventDefault = function(X) {
            (X = (h.D.preventDefault.call(this), this.N), X).preventDefault ? X.preventDefault() : X.returnValue = false
        }, h.prototype.stopPropagation = function() {
            (h.D.stopPropagation.call(this), this.N).stopPropagation ? this.N.stopPropagation() : this.N.cancelBubble = true
        }, Math).random() | 0),
        d7 = 0,
        kM = "constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),
        ii = "closure_lm_" + (1E6 * ((O.prototype.remove = (O.prototype.add = function(X, p, m, l, t, c, N, d, K) {
            return c = S(7, 0, (d = (K = X.toString(), this).W[K], d || (d = this.W[K] = [], this.S++), p), l, t, d), -1 < c ? (N = d[c], m || (N.j = false)) : (N = new wp(K, p, this.src, !!l, t), N.j = m, d.push(N)), N
        }, function(X, p, m, l, t, c, N) {
            if (!((c = X.toString(), c) in this.W)) return false;
            return -(N = S(11, 0, p, (t = this.W[c], m), l, t), 1) < N ? (Xl(3, true, 10, t[N]), Array.prototype.splice.call(t, N, 1), 0 == t.length && (delete this.W[c], this.S--), true) : false
        }), O).prototype.tj = function(X, p, m, l, t, c) {
            return -1 < (t = -(c = this.W[l.toString()], 1), c && (t = S(8, 0, X, p, m, c)), t) ? c[t] : null
        }, O.prototype.hasListener = function(X, p, m, l, t) {
            return W(false, (t = (m = (l = void 0 !== X) ? X.toString() : "", void 0 !== p), 48), true, this.W, function(c, N) {
                for (N = 0; N < c.length; ++N)
                    if (!(l && c[N].type != m || t && c[N].capture != p)) return true;
                return false
            })
        }, Math.random()) | 0),
        PU = 0,
        SZ = {},
        mZ = "__closure_events_fn_" + (1E9 * Math.random() >>> 0);
    (((((H = ((W(2, 9, E3, KY), E3.prototype)[s3] = true, E3).prototype, H.b6 = function(X) {
        this.Bt = X
    }, H.addEventListener = function(X, p, m, l) {
        n(10, null, false, m, this, l, p, X)
    }, H).removeEventListener = function(X, p, m, l) {
        u(0, null, 25, l, p, m, X, this)
    }, H).dispatchEvent = function(X, p, m, l, t, c, N, d, K, x, T) {
        if (c = this.Bt)
            for (p = []; c; c = c.Bt) p.push(c);
        if ((t = (K = X, m = (T = p, this).Ko, K.type || K), "string" === typeof K) ? K = new eZ(K, m) : K instanceof eZ ? K.target = K.target || m : (x = K, K = new eZ(t, m), YM(K, x)), l = true, T)
            for (N = T.length - 1; !K.F && 0 <= N; N--) d = K.currentTarget = T[N], l = Yv(true, d, t, 27, true, K) && l;
        if (K.F || (d = K.currentTarget = m, l = Yv(true, d, t, 33, true, K) && l, K.F || (l = Yv(true, d, t, 26, false, K) && l)), T)
            for (N = 0; !K.F && N < T.length; N++) d = K.currentTarget = T[N], l = Yv(true, d, t, 32, false, K) && l;
        return l
    }, H).tj = function(X, p, m, l) {
        return this.u.tj(X, p, m, String(l))
    }, H).hasListener = function(X, p) {
        return this.u.hasListener(void 0 !== X ? String(X) : void 0, p)
    }, H = kv.prototype, H).R = function(X) {
        return "string" === typeof X ? this.H.getElementById(X) : X
    };
    var NS;
    (((H = (((f(dp, (H.getElementsByTagName = (H.canHaveChildren = function(X) {
        if (1 != X.nodeType) return false;
        switch (X.tagName) {
            case "APPLET":
            case "AREA":
            case "BASE":
            case "BR":
            case "COL":
            case "COMMAND":
            case "EMBED":
            case "FRAME":
            case "HR":
            case "IMG":
            case "INPUT":
            case "IFRAME":
            case "ISINDEX":
            case "KEYGEN":
            case "LINK":
            case "NOFRAMES":
            case "NOSCRIPT":
            case "META":
            case "OBJECT":
            case "PARAM":
            case "SCRIPT":
            case "SOURCE":
            case "STYLE":
            case "TRACK":
            case "WBR":
                return false
        }
        return true
    }, H.removeNode = ZP, H.appendChild = function(X, p) {
        X.appendChild(p)
    }, function(X, p) {
        return (p || this.H).getElementsByTagName(String(X))
    }), H.contains = function(X, p) {
        if (!X || !p) return false;
        if (X.contains && 1 == p.nodeType) return X == p || X.contains(p);
        if ("undefined" != typeof X.compareDocumentPosition) return X == p || !!(X.compareDocumentPosition(p) & 16);
        for (; p && X != p;) p = p.parentNode;
        return p == X
    }, ((H.append = function(X, p) {
        NA("object", 1, false, "array", arguments, 9 == X.nodeType ? X : X.ownerDocument || X.document, X)
    }, H).createTextNode = function(X) {
        return this.H.createTextNode(String(X))
    }, H).createElement = function(X, p, m) {
        return (m = (p = this.H, String(X)), "application/xhtml+xml" === p.contentType) && (m = m.toLowerCase()), p.createElement(m)
    }, 73)), dp.prototype.zb = "", dp.prototype).Jx = 0, W)(2, 6, yP, E3), yP).prototype, H).dT = dp.gT(), H.R = function() {
        return this.vt
    }, H.getParent = function() {
        return this.l6
    }, H).Jj = function() {
        (CY(5, this, 19, function(X) {
            X.xW && X.Jj()
        }), this).Gb && A(65, true, 0, this.Gb, 17), this.xW = false
    }, H.b6 = function(X) {
        if (this.l6 && this.l6 != X) throw Error("Method not supported");
        yP.D.b6.call(this, X)
    }, H).removeChild = function(X, p, m, l, t, c, N, d, K, x, T, E) {
        if (X && ("string" === typeof X ? E = X : ((d = X.NG) || (K = X.dT, T = X, c = K.zb + ":" + (K.Jx++).toString(36), d = T.NG = c), E = d), x = E, this.Aj && x ? (t = this.Aj, m = (null !== t && x in t ? t[x] : void 0) || null) : m = null, X = m, x && X)) {
            if (N = ((r(64, ((l = this.Aj, x) in l && delete l[x], 1), this.wT, X), p) && (X.Jj(), X.vt && ZP(X.vt)), X), null == N) throw Error("Unable to set parent component");
            (N.l6 = null, yP.D).b6.call(N, null)
        }
        if (!X) throw Error("Child is not in parent component");
        return X
    };
    var Vk, nu = {
            button: "pressed",
            checkbox: "checked",
            menuitem: "selected",
            menuitemcheckbox: "checked",
            menuitemradio: (f(hw, 71), "checked"),
            radio: "checked",
            tab: "selected",
            treeitem: "selected"
        },
        vU = ((f(i8, (W(2, 8, ((((((H = hw.prototype, H).v = function(X, p, m, l, t, c) {
            if (t = X.R()) this.Vr || (l = this.Qr(), l.replace(/\xa0|\s/g, " "), this.Vr = {
                1: l + "-disabled",
                2: l + "-hover",
                4: l + "-active",
                8: l + "-selected",
                16: l + "-checked",
                32: l + "-focused",
                64: l + "-open"
            }), (c = this.Vr[p]) && this.T(c, X, m), this.u6(t, p, m)
        }, H).Qr = function() {
            return "goog-control"
        }, H.T = function(X, p, m, l) {
            (l = p.R ? p.R() : p) && (m ? o3 : xM)(l, [X])
        }, H).DB = function(X) {
            return X.R()
        }, H).u6 = function(X, p, m, l, t, c, N) {
            (t = X.getAttribute((N = (Vk || (Vk = {
                1: "disabled",
                8: "selected",
                16: "checked",
                64: "expanded"
            }), Vk[p]), "role")) || null) ? (l = nu[t] || N, c = "checked" == N || "selected" == N ? l : N) : c = N, c && Y(15, 10, false, "false", X, m, c)
        }, H).i6 = function(X, p, m, l, t, c) {
            if (f(2, 56, 32, X) && (l = X.DB())) {
                if (!p && r(15, 0, 32, X)) {
                    try {
                        l.blur()
                    } catch (N) {}
                    r(63, 0, 32, X) && (X.Oc & 4 && f(2, 55, 4, X) && X.setActive(false), X.Oc & 32 && f(2, 59, 32, X) && A(65, X, 4, false, 91, 32) && X.v(32, false))
                }
                if (t = l.hasAttribute("tabindex")) m = l.tabIndex, t = "number" === typeof m && 0 <= m && 32768 > m;
                t != p && (c = l, p ? c.tabIndex = 0 : (c.tabIndex = -1, c.removeAttribute("tabIndex")))
            }
        }, i8), hw), 72)), i8.prototype.u6 = function(X, p, m) {
            switch (p) {
                case 8:
                case 16:
                    Y(15, 18, false, "false", X, m, "pressed");
                    break;
                default:
                case 64:
                case 1:
                    i8.D.u6.call(this, X, p, m)
            }
        }, i8).prototype.Qr = function() {
            return "goog-button"
        }, {});
    if ("function" !== ((((((((((H = (W(2, 7, G, yP), G).prototype, H.T = function(X, p) {
            X ? p && (this.A ? 0 <= n(17, 1, p, this.A) || this.A.push(p) : this.A = [p], this.O.T(p, this, true)) : p && this.A && r(65, 1, this.A, p) && (0 == this.A.length && (this.A = null), this.O.T(p, this, false))
        }, H.Jj = function() {
            ((G.D.Jj.call(this), this).Ht && this.Ht.detach(), this).isVisible() && this.isEnabled() && this.O.i6(this, false)
        }, H.Oc = 255, H).A = null, H).lC = true, H).gv = 0, H.DB = function() {
            return this.O.DB(this)
        }, H.Wo = 39, H).P = 0, H).isVisible = function() {
            return this.lC
        }, H.isEnabled = function() {
            return !r(47, 0, 1, this)
        }, H).isActive = function() {
            return r(43, 0, 4, this)
        }, H).setActive = function(X) {
            A(65, this, 4, X, 90, 4) && this.v(4, X)
        }, H).getState = function() {
            return this.P
        }, H).v = function(X, p, m, l, t, c, N) {
            m || 1 != X ? f(2, 58, X, this) && p != r(59, 0, X, this) && (this.O.v(this, X, p), this.P = p ? (N = this.P, 2 * (N & X) + ~(N & X) - (~N ^ X)) : (c = this.P, 2 * (c | 0) + ~c - (c ^ ~X) - (c | ~~X))) : (t = !p, l = this.getParent(), l && "function" == typeof l.isEnabled && !l.isEnabled() || !A(65, this, 4, !t, 88, 1) || (t || (this.setActive(false), A(65, this, 4, false, 87, 2) && this.v(2, false)), this.isVisible() && this.O.i6(this, t), this.v(1, !t, true)))
        }, typeof G)) throw Error("Invalid component class " + G);
    if ("function" !== typeof hw) throw Error("Invalid renderer class " + hw);
    var jo = w7(1, 57, G);
    w7(1, 6, function() {
        return new EO(null)
    }, (W(2, (((f(Dx, (W(2, 3, Dx, (vU[jo] = hw, w7(1, 18, function() {
        return new G(null)
    }, "goog-control"), i8)), 74)), Dx.prototype.u6 = function() {}, Dx).prototype.i6 = function() {}, Dx).prototype.v = function(X, p, m, l) {
        Dx.D.v.call(this, X, p, m), (l = X.R()) && 1 == p && (l.disabled = m)
    }, 10), EO, G), "goog-button"));
    var Ia, fY = {
            passive: true,
            capture: true
        },
        hr = v.requestIdleCallback ? function(X) {
            requestIdleCallback(function() {
                X()
            }, {
                timeout: 4
            })
        } : v.setImmediate ? function(X) {
            setImmediate(X)
        } : function(X) {
            setTimeout(X, 0)
        },
        sO = String.fromCharCode(105, 110, 116, 101, 103, 67, 104, 101, 99, 107, 66, 121, 112, 97, 115, 115),
        qS = (z.prototype.bC = void 0, z.prototype.qG = "toString", []),
        nY = [],
        cm = (z.prototype.S9 = false, []),
        XG = {},
        Gb = [],
        pu = (z.prototype.pt = void 0, []),
        VP = [],
        tw = [],
        Ku = [],
        pY = ((((H = (((Wm, function() {})(OO), Bm, function() {})(mf), z.prototype), H.Lt = function(X, p, m, l, t, c) {
            return Y.call(this, 15, 88, X, p, m, l, t, c)
        }, z.prototype.L = "create", H.kK = function(X, p, m, l, t, c, N, d) {
            return $v.call(this, "", 34, X, p, m, l, t, c, N, d)
        }, H.co = function(X, p, m, l, t) {
            return Y.call(this, 15, 5, X, p, m, l, t)
        }, H).i = (window.performance || {}).now ? function() {
            return this.Tb + window.performance.now()
        } : function() {
            return +new Date
        }, H.Ax = function() {
            return LY.call(this, 1, 10, 16)
        }, H).wv = function() {
            return w7.call(this, 1, 11)
        }, H).IT = function(X, p, m, l, t, c) {
            return b.call(this, 3, p, X, m, l, t, c)
        }, XG).constructor,
        oa = void 0,
        eo = ((z.prototype.Z = function(X, p) {
            return X = (oa = (p = {}, function() {
                    return X == p ? -79 : -91
                }), {}),
                function(m, l, t, c, N, d, K, x, T, E, Z, k, B, w, q, e, J, P, C, R, I, U, V, Q, xv) {
                    X = (q = X, p);
                    try {
                        if (E = m[0], E == pu) {
                            xv = m[1];
                            try {
                                for (Q = T = (d = atob(xv), 0), V = []; Q < d.length; Q++) e = d.charCodeAt(Q), 255 < e && (V[T++] = 255 - ~(e & 255) + ~(e | 255) + (e & -256), e >>= 8), V[T++] = e;
                                y(this, 340, [0, (this.B = (this.o = V, this.o.length << 3), 0), 0])
                            } catch (li) {
                                $M(this, li, 17, ":");
                                return
                            }
                            l8(22, 22, 8001, this)
                        } else if (E == VP) m[1].push(M(52, this).length, M(160, this), M(49, this).length, M(248, this).length), y(this, 473, m[2]), this.g[302] && Lu(273, M(302, this), 8001, this, 22);
                        else {
                            if (E == nY) {
                                this.J = (R = F(((k = m[2], M)(49, this).length | 0) + 2, 2), t = this.J, this);
                                try {
                                    l = M(491, this), 0 < l.length && a(F(l.length, 2).concat(l), this, 49, 15), a(F(this.kW, 1), this, 49, 104), a(F(this[nY].length, 1), this, 49), U = 0, U -= (N = M(49, this).length, -2 * ~N + (N & -6) - (~N ^ 5) + 3 * (~N | 5)), I = M(248, this), U += (B = M(100, this), -~(B & 2047) + (B & -2048) + (~B | 2047)), 4 < I.length && (U -= (P = I.length, -~(P & 3) + -2 - ~(P | 3))), 0 < U && a(F(U, 2).concat(OO(U)), this, 49, 10), 4 < I.length && a(F(I.length, 2).concat(I), this, 49, 153)
                                } finally {
                                    this.J = t
                                }
                                if (K = ((C = OO(2).concat(M(49, this)), C)[1] = C[0] ^ 3, C[3] = C[1] ^ R[0], C[4] = (x = C[1], J = R[1], 2 * (x & ~J) - (x | ~J) + (~x | J)), this.Pt(C))) K = "!" + K;
                                else
                                    for (K = "", w = 0; w < C.length; w++) Z = C[w][this.qG](16), 1 == Z.length && (Z = "0" + Z), K += Z;
                                return M(248, (M(49, (y(this, 160, (M(52, (c = K, this)).length = k.shift(), k.shift())), this)).length = k.shift(), this)).length = k.shift(), c
                            }
                            if (E == qS) Lu(273, m[1], m[2], this, 22);
                            else if (E == Gb) return Lu(273, m[1], 8001, this, 22)
                        }
                    } finally {
                        X = q
                    }
                }
        }(), z.prototype.YK = 0, z.prototype).Pt = function(X, p, m, l, t) {
            return u.call(this, X, p, 3, m, l, t)
        }, /./),
        Jw, Gx = (z.prototype[z.prototype.m0 = 0, tw] = [0, 0, 1, 1, 0, 1, 1], pu.pop.bind(z.prototype[VP])),
        Pm = ((Jw = CY(5, {get: Gx
        }, 6, (eo[z.prototype.qG] = Gx, z).prototype.L), z.prototype).uC = void 0, function(X, p) {
            return (p = zb("error", "bg", null)) && 1 === X.eval(p.createScript("1")) ? function(m) {
                return p.createScript(m)
            } : function(m) {
                return "" + m
            }
        }(v));
    (40 < (Ia = v.botguard || (v.botguard = {}), Ia.m) || (Ia.m = 41, Ia.bg = u8, Ia.a = BU), Ia).mBK_ = function(X, p, m) {
        return [(m = new z(p, X), function(l) {
            return WU(72, 64, false, l, m)
        })]
    };
}).call(this);
                                    

#19 JavaScript::Eval (size: 79, repeated: 1) - SHA256: 10b9f86db2a3459ae2bc51fc566b73431779e934c2e72098eeaddd19f2c1862a

                                        0,
function(N, d, K, x, T) {
    y(N, (d = M((T = (x = D(N, (K = D(N, 58), 56)), M(x, N)), K), N), x), T - d)
}
                                    

#20 JavaScript::Eval (size: 167, repeated: 1) - SHA256: bb7e16358d2d8f556e50902df41c1b4baf1b6db9aabb9378b1a250775c2aed53

                                        0,
function(N, d, K, x, T, E, Z) {
    (x = (E = D(N, (Z = D(N, 58), 57)), D)(N, 58), N.J) == N && (T = M(Z, N), K = M(E, N), d = M(x, N), T[K] = d, 340 == Z && (N.Y = void 0, 2 == K && (N.I = cU(N, false, 0, 32), N.Y = void 0)))
}
                                    

#21 JavaScript::Eval (size: 2, repeated: 1) - SHA256: 1ce3fb2cb03a19b8fd1afdb0e0bd4aa977b8254805e1d4e15d52b6f94cfd21c7

                                        Lu
                                    

#22 JavaScript::Eval (size: 22, repeated: 1) - SHA256: a0db6ba89ba306ee26908e377816a851a943cc60e6c63dea0656880b27674a5d

                                        0,
function(N) {
    Fl(3, N)
}
                                    

#23 JavaScript::Eval (size: 118, repeated: 1) - SHA256: cd347b90b07cce17ee3e8b743984ae13a10644d71553626ccdf881a2f71d8a3f

                                        0, tr = function(X, p, m) {
    return (m = X.create().shift(), p.C).create().length || p.G.create().length || (p.G = void 0, p.C = void 0), m
}
                                    

#24 JavaScript::Eval (size: 571, repeated: 1) - SHA256: 0e5c6839c8511e82d8a88e982235d47c645399192ee473b451e569cab0a97082

                                        0, aa = function(X, p, m, l, t, c, N, d, K, x, T, E, Z, k, B) {
    for (k = (K = X.replace(/\r\n/g, "\n"), c = 0), d = []; k < K.length; k++) N = K.charCodeAt(k), 128 > N ? d[c++] = N : (2048 > N ? d[c++] = (l = N >> 6, (l | 0) + 192 - (l & 192)) : (55296 == (N | 0) - -1 + (~N | 64512) && k + 1 < K.length && 56320 == (B = K.charCodeAt(k + 1), (B | 0) - -1 + (~B | 64512)) ? (N = (T = (N | 1023) - ~(N & 1023) + ~(N | 1023) << 10, 2 * (65536 & T) + -65537 + ~T - 2 * ~(65536 | T)) + (m = K.charCodeAt(++k), (m | 0) - -1 + (~m | 1023)), d[c++] = (Z = N >> 18, 242 + 3 * (Z & -241) + 2 * (~Z | 240)), d[c++] = (E = N >> 12 & 63, -~E + 2 * (~E & 128) + (E | -129))) : d[c++] = (t = N >> 12, -~(t & p) - 1 + (t ^ p)), d[c++] = (x = N >> 6 & 63, -2 - ~x - (x | -129))), d[c++] = N & 63 | 128);
    return d
}
                                    

#25 JavaScript::Eval (size: 142, repeated: 1) - SHA256: 1941364f6b6f73c916a578154965f4c2d27b27f9adc3d71df8d67d779dd84a65

                                        0,
function(X, p, m, l, t, c) {
    for (c = 0; c < X.length; c++) t = X.charAt ? (l = X.charCodeAt(c), -~(255 | l) - (-256 & l) + (-256 | l)) : X[c], p.push(t);
    p.d.push(X.length, m)
}
                                    

#26 JavaScript::Eval (size: 245, repeated: 1) - SHA256: 7e377fd0c1716e88e68acc0a74f05cf3f8d1b1cec0327ce3b83bf6e93c38bd4c

                                        y = function(X, p, m) {
    if (273 == p || 103 == p) X.g[p] ? X.g[p].concat(m) : X.g[p] = D(m, 9, X);
    else {
        if (X.ZB && 340 != p) return;
        49 == p || 248 == p || 52 == p || 491 == p || 287 == p ? X.g[p] || (X.g[p] = D(3, 3, 16, p, 102, X, m)) : X.g[p] = D(3, 5, 16, p, 9, X, m)
    }
    340 == p && (X.I = cU(X, false, 0, 32), X.Y = void 0)
}
                                    

#27 JavaScript::Eval (size: 148, repeated: 1) - SHA256: a3f3d1d8682dd0eb5999b60739b04db4d2a30d649c71d9e41c290fa8b29f38be

                                        0, Fl = function(X, p, m, l, t, c, N) {
    (N = (t = D((c = D(p, (m = (X | 4) - ~X + -5 - 2 * (l = X & 3, X & -5), 58)), p), 57), M)(c, p), m && (N = aa("" + N, 224)), l) && a(F(N.length, 2), p, t), a(N, p, t)
}
                                    

#28 JavaScript::Eval (size: 22, repeated: 1) - SHA256: 7856015679be46bd3b218474b3c36ae4df293ec26393780d68bdd5bf4cb1349b

                                        0,
function(N) {
    Fl(4, N)
}
                                    

#29 JavaScript::Eval (size: 35, repeated: 1) - SHA256: f2a353ed5469812b863c5fbeb58b4d46b864ba4e20a49f57f9c44c7cda45f46b

                                        document.createEvent('MouseEvents')
                                    

#30 JavaScript::Eval (size: 2, repeated: 1) - SHA256: 8bb7518fd7652c5405f70a864337b43cf9aa47152b61859fb185b1c3cba67854

                                        OO
                                    

#31 JavaScript::Eval (size: 203, repeated: 1) - SHA256: af10337381a7e19030bdbcf65a36cea35355c479edffd749c9352fae159896a9

                                        0,
function(N, d, K, x, T, E, Z, k, B, w) {
    (k = (x = (w = (E = (K = D((Z = D(N, 56), N), 58), T = D(N, 57), d = D(N, 58), M(d, N)), M(K, N)), M(T, N)), M(Z, N.J)), 0 !== k) && (B = b(28, 2, false, 1, N, E, x, k, w), k.addEventListener(w, B, fY), y(N, 206, [k, w, B]))
}
                                    

#32 JavaScript::Eval (size: 79, repeated: 1) - SHA256: f63137b4673499b654e9cc3727b044334d92c8323853b0d39b3c3d7080575285

                                        0,
function(N, d, K, x, T) {
    y(N, (d = M((T = (x = D(N, (K = D(N, 58), 56)), M(x, N)), K), N), x), T * d)
}
                                    

#33 JavaScript::Eval (size: 170, repeated: 1) - SHA256: df6824a856196a92d7a852ee9105335c4c0c6867b51e83ac81cbdde62f164f34

                                        Bm = function(X, p, m, l, t, c) {
    try {
        l = X[(-2 - 2 * ~p - (p ^ 2) + 2 * (~p & 2)) % 3], X[p] = (c = X[p], t = X[(-2 * ~(p & 1) + -2 + (p ^ 1)) % 3], -~(c & t) + ~(c | t) + 2 * (c & ~t)) - (l | 0) ^ (1 == p ? l << m : l >>> m)
    } catch (N) {
        throw N;
    }
}
                                    

#34 JavaScript::Eval (size: 215835, repeated: 1) - SHA256: ed76f43930957015d3f444e8047c5d2fe0bd4e6e0e743fddf8b4a7f3aa47fdca

                                        ; // CONCATENATED MODULE: ./resources/js/modules/ErrorHandler.js
class ErrorHandler {
    constructor(genericErrorText) {
        this.genericErrorText = genericErrorText;
        this.wrapper = document.querySelector('.woocommerce-notices-wrapper');
        this.messagesList = document.querySelector('ul.woocommerce-error');
    }

    genericError() {
        if (this.wrapper.classList.contains('ppcp-persist')) {
            return;
        }

        this.clear();
        this.message(this.genericErrorText);
    }

    appendPreparedErrorMessageElement(errorMessageElement) {
        if (this.messagesList === null) {
            this.prepareMessagesList();
        }

        this.messagesList.replaceWith(errorMessageElement);
    }

    message(text, persist = false) {
        if (!typeof String || text.length === 0) {
            throw new Error('A new message text must be a non-empty string.');
        }

        if (this.messagesList === null) {
            this.prepareMessagesList();
        }

        if (persist) {
            this.wrapper.classList.add('ppcp-persist');
        } else {
            this.wrapper.classList.remove('ppcp-persist');
        }

        let messageNode = this.prepareMessagesListItem(text);
        this.messagesList.appendChild(messageNode);
        jQuery.scroll_to_notices(jQuery('.woocommerce-notices-wrapper'));
    }

    prepareMessagesList() {
        if (this.messagesList === null) {
            this.messagesList = document.createElement('ul');
            this.messagesList.setAttribute('class', 'woocommerce-error');
            this.messagesList.setAttribute('role', 'alert');
            this.wrapper.appendChild(this.messagesList);
        }
    }

    prepareMessagesListItem(message) {
        const li = document.createElement('li');
        li.innerHTML = message;
        return li;
    }

    sanitize(text) {
        const textarea = document.createElement('textarea');
        textarea.innerHTML = text;
        return textarea.value.replace('Error: ', '');
    }

    clear() {
        if (this.messagesList === null) {
            return;
        }

        this.messagesList.innerHTML = '';
    }

}

/* harmony default export */
const modules_ErrorHandler = (ErrorHandler);; // CONCATENATED MODULE: ./resources/js/modules/OnApproveHandler/onApproveForContinue.js
const onApprove = (context, errorHandler) => {
    return (data, actions) => {
        return fetch(context.config.ajax.approve_order.endpoint, {
            method: 'POST',
            body: JSON.stringify({
                nonce: context.config.ajax.approve_order.nonce,
                order_id: data.orderID,
                funding_source: window.ppcpFundingSource
            })
        }).then(res => {
            return res.json();
        }).then(data => {
            if (!data.success) {
                errorHandler.genericError();
                return actions.restart().catch(err => {
                    errorHandler.genericError();
                });
            }

            location.href = context.config.redirect;
        });
    };
};

/* harmony default export */
const onApproveForContinue = (onApprove);; // CONCATENATED MODULE: ./resources/js/modules/Helper/PayerData.js
const payerData = () => {
    const payer = PayPalCommerceGateway.payer;

    if (!payer) {
        return null;
    }

    const phone = document.querySelector('#billing_phone') || typeof payer.phone !== 'undefined' ? {
        phone_type: "HOME",
        phone_number: {
            national_number: document.querySelector('#billing_phone') ? document.querySelector('#billing_phone').value : payer.phone.phone_number.national_number
        }
    } : null;
    const payerData = {
        email_address: document.querySelector('#billing_email') ? document.querySelector('#billing_email').value : payer.email_address,
        name: {
            surname: document.querySelector('#billing_last_name') ? document.querySelector('#billing_last_name').value : payer.name.surname,
            given_name: document.querySelector('#billing_first_name') ? document.querySelector('#billing_first_name').value : payer.name.given_name
        },
        address: {
            country_code: document.querySelector('#billing_country') ? document.querySelector('#billing_country').value : payer.address.country_code,
            address_line_1: document.querySelector('#billing_address_1') ? document.querySelector('#billing_address_1').value : payer.address.address_line_1,
            address_line_2: document.querySelector('#billing_address_2') ? document.querySelector('#billing_address_2').value : payer.address.address_line_2,
            admin_area_1: document.querySelector('#billing_state') ? document.querySelector('#billing_state').value : payer.address.admin_area_1,
            admin_area_2: document.querySelector('#billing_city') ? document.querySelector('#billing_city').value : payer.address.admin_area_2,
            postal_code: document.querySelector('#billing_postcode') ? document.querySelector('#billing_postcode').value : payer.address.postal_code
        }
    };

    if (phone) {
        payerData.phone = phone;
    }

    return payerData;
};; // CONCATENATED MODULE: ./resources/js/modules/Helper/CheckoutMethodState.js
const PaymentMethods = {
    PAYPAL: 'ppcp-gateway',
    CARDS: 'ppcp-credit-card-gateway',
    OXXO: 'ppcp-oxxo-gateway',
    CARD_BUTTON: 'ppcp-card-button-gateway'
};
const ORDER_BUTTON_SELECTOR = '#place_order';
const getCurrentPaymentMethod = () => {
    const el = document.querySelector('input[name="payment_method"]:checked');

    if (!el) {
        return null;
    }

    return el.value;
};
const isSavedCardSelected = () => {
    const savedCardList = document.querySelector('#saved-credit-card');
    return savedCardList && savedCardList.value !== '';
};; // CONCATENATED MODULE: ./resources/js/modules/ActionHandler/CartActionHandler.js




class CartActionHandler {
    constructor(config, errorHandler) {
        this.config = config;
        this.errorHandler = errorHandler;
    }

    configuration() {
        const createOrder = (data, actions) => {
            const payer = payerData();
            const bnCode = typeof this.config.bn_codes[this.config.context] !== 'undefined' ? this.config.bn_codes[this.config.context] : '';
            return fetch(this.config.ajax.create_order.endpoint, {
                method: 'POST',
                body: JSON.stringify({
                    nonce: this.config.ajax.create_order.nonce,
                    purchase_units: [],
                    payment_method: PaymentMethods.PAYPAL,
                    funding_source: window.ppcpFundingSource,
                    bn_code: bnCode,
                    payer,
                    context: this.config.context
                })
            }).then(function(res) {
                return res.json();
            }).then(function(data) {
                if (!data.success) {
                    console.error(data);
                    throw Error(data.data.message);
                }

                return data.data.id;
            });
        };

        return {
            createOrder,
            onApprove: onApproveForContinue(this, this.errorHandler),
                onError: error => {
                    this.errorHandler.genericError();
                }
        };
    }

}

/* harmony default export */
const ActionHandler_CartActionHandler = (CartActionHandler);; // CONCATENATED MODULE: ./resources/js/modules/ContextBootstrap/MiniCartBootstap.js



class MiniCartBootstap {
    constructor(gateway, renderer) {
        this.gateway = gateway;
        this.renderer = renderer;
        this.actionHandler = null;
    }

    init() {
        this.actionHandler = new ActionHandler_CartActionHandler(PayPalCommerceGateway, new modules_ErrorHandler(this.gateway.labels.error.generic));
        this.render();
        jQuery(document.body).on('wc_fragments_loaded wc_fragments_refreshed', () => {
            this.render();
        });
    }

    shouldRender() {
        return document.querySelector(this.gateway.button.mini_cart_wrapper) !== null || document.querySelector(this.gateway.hosted_fields.mini_cart_wrapper) !== null;
    }

    render() {
        if (!this.shouldRender()) {
            return;
        }

        this.renderer.render(this.actionHandler.configuration(), {
            button: {
                wrapper: this.gateway.button.mini_cart_wrapper,
                style: this.gateway.button.mini_cart_style
            }
        });
    }

}

/* harmony default export */
const ContextBootstrap_MiniCartBootstap = (MiniCartBootstap);; // CONCATENATED MODULE: ./resources/js/modules/Helper/UpdateCart.js


class UpdateCart {
    constructor(endpoint, nonce) {
            this.endpoint = endpoint;
            this.nonce = nonce;
        }
        /**
         *
         * @param onResolve
         * @param {Product[]} products
         * @returns {Promise<unknown>}
         */


    update(onResolve, products) {
        return new Promise((resolve, reject) => {
            fetch(this.endpoint, {
                method: 'POST',
                body: JSON.stringify({
                    nonce: this.nonce,
                    products
                })
            }).then(result => {
                return result.json();
            }).then(result => {
                if (!result.success) {
                    reject(result.data);
                    return;
                }

                const resolved = onResolve(result.data);
                resolve(resolved);
            });
        });
    }

}

/* harmony default export */
const Helper_UpdateCart = (UpdateCart);; // CONCATENATED MODULE: ./resources/js/modules/Helper/ButtonsToggleListener.js
/**
 * When you can't add something to the cart, the PayPal buttons should not show.
 * Therefore we listen for changes on the add to cart button and show/hide the buttons accordingly.
 */
class ButtonsToggleListener {
    constructor(element, showCallback, hideCallback) {
        this.element = element;
        this.showCallback = showCallback;
        this.hideCallback = hideCallback;
        this.observer = null;
    }

    init() {
        const config = {
            attributes: true
        };

        const callback = () => {
            if (this.element.classList.contains('disabled')) {
                this.hideCallback();
                return;
            }

            this.showCallback();
        };

        this.observer = new MutationObserver(callback);
        this.observer.observe(this.element, config);
        callback();
    }

    disconnect() {
        this.observer.disconnect();
    }

}

/* harmony default export */
const Helper_ButtonsToggleListener = (ButtonsToggleListener);; // CONCATENATED MODULE: ./resources/js/modules/Entity/Product.js
class Product {
    constructor(id, quantity, variations) {
        this.id = id;
        this.quantity = quantity;
        this.variations = variations;
    }

    data() {
        return {
            id: this.id,
            quantity: this.quantity,
            variations: this.variations
        };
    }

}

/* harmony default export */
const Entity_Product = (Product);; // CONCATENATED MODULE: ./resources/js/modules/ActionHandler/SingleProductActionHandler.js






class SingleProductActionHandler {
    constructor(config, updateCart, showButtonCallback, hideButtonCallback, formElement, errorHandler) {
        this.config = config;
        this.updateCart = updateCart;
        this.showButtonCallback = showButtonCallback;
        this.hideButtonCallback = hideButtonCallback;
        this.formElement = formElement;
        this.errorHandler = errorHandler;
    }

    configuration() {
        if (this.hasVariations()) {
            const observer = new Helper_ButtonsToggleListener(this.formElement.querySelector('.single_add_to_cart_button'), this.showButtonCallback, this.hideButtonCallback);
            observer.init();
        }

        return {
            createOrder: this.createOrder(),
            onApprove: onApproveForContinue(this, this.errorHandler),
            onError: error => {
                this.errorHandler.genericError();
            }
        };
    }

    createOrder() {
        var getProducts = null;

        if (!this.isGroupedProduct()) {
            getProducts = () => {
                const id = document.querySelector('[name="add-to-cart"]').value;
                const qty = document.querySelector('[name="quantity"]').value;
                const variations = this.variations();
                return [new Entity_Product(id, qty, variations)];
            };
        } else {
            getProducts = () => {
                const products = [];
                this.formElement.querySelectorAll('input[type="number"]').forEach(element => {
                    if (!element.value) {
                        return;
                    }

                    const elementName = element.getAttribute('name').match(/quantity\[([\d]*)\]/);

                    if (elementName.length !== 2) {
                        return;
                    }

                    const id = parseInt(elementName[1]);
                    const quantity = parseInt(element.value);
                    products.push(new Entity_Product(id, quantity, null));
                });
                return products;
            };
        }

        const createOrder = (data, actions) => {
            this.errorHandler.clear();

            const onResolve = purchase_units => {
                const payer = payerData();
                const bnCode = typeof this.config.bn_codes[this.config.context] !== 'undefined' ? this.config.bn_codes[this.config.context] : '';
                return fetch(this.config.ajax.create_order.endpoint, {
                    method: 'POST',
                    body: JSON.stringify({
                        nonce: this.config.ajax.create_order.nonce,
                        purchase_units,
                        payer,
                        bn_code: bnCode,
                        payment_method: PaymentMethods.PAYPAL,
                        funding_source: window.ppcpFundingSource,
                        context: this.config.context
                    })
                }).then(function(res) {
                    return res.json();
                }).then(function(data) {
                    if (!data.success) {
                        console.error(data);
                        throw Error(data.data.message);
                    }

                    return data.data.id;
                });
            };

            const promise = this.updateCart.update(onResolve, getProducts());
            return promise;
        };

        return createOrder;
    }

    variations() {
        if (!this.hasVariations()) {
            return null;
        }

        const attributes = [...this.formElement.querySelectorAll("[name^='attribute_']")].map(element => {
            return {
                value: element.value,
                name: element.name
            };
        });
        return attributes;
    }

    hasVariations() {
        return this.formElement.classList.contains('variations_form');
    }

    isGroupedProduct() {
        return this.formElement.classList.contains('grouped_form');
    }

}

/* harmony default export */
const ActionHandler_SingleProductActionHandler = (SingleProductActionHandler);; // CONCATENATED MODULE: ./resources/js/modules/ContextBootstrap/SingleProductBootstap.js




class SingleProductBootstap {
    constructor(gateway, renderer, messages) {
        this.gateway = gateway;
        this.renderer = renderer;
        this.messages = messages;
    }

    handleChange() {
        if (!this.shouldRender()) {
            this.renderer.hideButtons(this.gateway.hosted_fields.wrapper);
            this.renderer.hideButtons(this.gateway.button.wrapper);
            this.messages.hideMessages();
            return;
        }

        this.render();
    }

    init() {
        document.querySelector('form.cart').addEventListener('change', this.handleChange.bind(this));

        if (!this.shouldRender()) {
            this.renderer.hideButtons(this.gateway.hosted_fields.wrapper);
            this.messages.hideMessages();
            return;
        }

        this.render();
    }

    shouldRender() {
        return document.querySelector('form.cart') !== null && !this.priceAmountIsZero();
    }

    priceAmount() {
        let priceText = "0";

        if (document.querySelector('form.cart ins .woocommerce-Price-amount')) {
            priceText = document.querySelector('form.cart ins .woocommerce-Price-amount').innerText;
        } else if (document.querySelector('form.cart .woocommerce-Price-amount')) {
            priceText = document.querySelector('form.cart .woocommerce-Price-amount').innerText;
        } else if (document.querySelector('.product .woocommerce-Price-amount')) {
            priceText = document.querySelector('.product .woocommerce-Price-amount').innerText;
        }

        priceText = priceText.replace(/,/g, '.');
        return parseFloat(priceText.replace(/([^\d,\.\s]*)/g, ''));
    }

    priceAmountIsZero() {
        return this.priceAmount() === 0;
    }

    render() {
        const actionHandler = new ActionHandler_SingleProductActionHandler(this.gateway, new Helper_UpdateCart(this.gateway.ajax.change_cart.endpoint, this.gateway.ajax.change_cart.nonce), () => {
            this.renderer.showButtons(this.gateway.button.wrapper);
            this.renderer.showButtons(this.gateway.hosted_fields.wrapper);
            this.messages.renderWithAmount(this.priceAmount());
        }, () => {
            this.renderer.hideButtons(this.gateway.button.wrapper);
            this.renderer.hideButtons(this.gateway.hosted_fields.wrapper);
            this.messages.hideMessages();
        }, document.querySelector('form.cart'), new modules_ErrorHandler(this.gateway.labels.error.generic));
        this.renderer.render(actionHandler.configuration());
    }

}

/* harmony default export */
const ContextBootstrap_SingleProductBootstap = (SingleProductBootstap);; // CONCATENATED MODULE: ./resources/js/modules/ContextBootstrap/CartBootstap.js



class CartBootstrap {
    constructor(gateway, renderer) {
        this.gateway = gateway;
        this.renderer = renderer;
    }

    init() {
        if (!this.shouldRender()) {
            return;
        }

        this.render();
        jQuery(document.body).on('updated_cart_totals updated_checkout', () => {
            this.render();
        });
    }

    shouldRender() {
        return document.querySelector(this.gateway.button.wrapper) !== null || document.querySelector(this.gateway.hosted_fields.wrapper) !== null;
    }

    render() {
        const actionHandler = new ActionHandler_CartActionHandler(PayPalCommerceGateway, new modules_ErrorHandler(this.gateway.labels.error.generic));
        this.renderer.render(actionHandler.configuration());
    }

}

/* harmony default export */
const CartBootstap = (CartBootstrap);; // CONCATENATED MODULE: ./resources/js/modules/OnApproveHandler/onApproveForPayNow.js
const onApproveForPayNow_onApprove = (context, errorHandler, spinner) => {
    return (data, actions) => {
        spinner.block();
        errorHandler.clear();
        return fetch(context.config.ajax.approve_order.endpoint, {
            method: 'POST',
            body: JSON.stringify({
                nonce: context.config.ajax.approve_order.nonce,
                order_id: data.orderID,
                funding_source: window.ppcpFundingSource
            })
        }).then(res => {
            return res.json();
        }).then(data => {
            spinner.unblock();

            if (!data.success) {
                if (data.data.code === 100) {
                    errorHandler.message(data.data.message);
                } else {
                    errorHandler.genericError();
                }

                if (typeof actions !== 'undefined' && typeof actions.restart !== 'undefined') {
                    return actions.restart();
                }

                throw new Error(data.data.message);
            }

            document.querySelector('#place_order').click();
        });
    };
};

/* harmony default export */
const onApproveForPayNow = (onApproveForPayNow_onApprove);; // CONCATENATED MODULE: ./resources/js/modules/ActionHandler/CheckoutActionHandler.js




class CheckoutActionHandler {
    constructor(config, errorHandler, spinner) {
        this.config = config;
        this.errorHandler = errorHandler;
        this.spinner = spinner;
    }

    configuration() {
        const spinner = this.spinner;

        const createOrder = (data, actions) => {
            const payer = payerData();
            const bnCode = typeof this.config.bn_codes[this.config.context] !== 'undefined' ? this.config.bn_codes[this.config.context] : '';
            const errorHandler = this.errorHandler;
            const formSelector = this.config.context === 'checkout' ? 'form.checkout' : 'form#order_review';
            const formData = new FormData(document.querySelector(formSelector)); // will not handle fields with multiple values (checkboxes, <select multiple>), but we do not care about this here

            const formJsonObj = Object.fromEntries(formData);
            const createaccount = jQuery('#createaccount').is(":checked") ? true : false;
            const paymentMethod = getCurrentPaymentMethod();
            const fundingSource = window.ppcpFundingSource;
            return fetch(this.config.ajax.create_order.endpoint, {
                method: 'POST',
                body: JSON.stringify({
                    nonce: this.config.ajax.create_order.nonce,
                    payer,
                    bn_code: bnCode,
                    context: this.config.context,
                    order_id: this.config.order_id,
                    payment_method: paymentMethod,
                    funding_source: fundingSource,
                    form: formJsonObj,
                    createaccount: createaccount
                })
            }).then(function(res) {
                return res.json();
            }).then(function(data) {
                if (!data.success) {
                    spinner.unblock(); //handle both messages sent from Woocommerce (data.messages) and this plugin (data.data.message)

                    if (typeof data.messages !== 'undefined') {
                        const domParser = new DOMParser();
                        errorHandler.appendPreparedErrorMessageElement(domParser.parseFromString(data.messages, 'text/html').querySelector('ul'));
                    } else {
                        errorHandler.clear();

                        if (data.data.details.length > 0) {
                            errorHandler.message(data.data.details.map(d => `${d.issue} ${d.description}`).join('<br/>'), true);
                        } else {
                            errorHandler.message(data.data.message, true);
                        }
                    }

                    throw new Error(data.data.message);
                }

                const input = document.createElement('input');
                input.setAttribute('type', 'hidden');
                input.setAttribute('name', 'ppcp-resume-order');
                input.setAttribute('value', data.data.purchase_units[0].custom_id);
                document.querySelector(formSelector).append(input);
                return data.data.id;
            });
        };

        return {
            createOrder,
            onApprove: onApproveForPayNow(this, this.errorHandler, this.spinner),
                onCancel: () => {
                    spinner.unblock();
                },
                onError: () => {
                    this.errorHandler.genericError();
                    spinner.unblock();
                }
        };
    }

}

/* harmony default export */
const ActionHandler_CheckoutActionHandler = (CheckoutActionHandler);; // CONCATENATED MODULE: ./resources/js/modules/Helper/Hiding.js
const getElement = selectorOrElement => {
    if (typeof selectorOrElement === 'string') {
        return document.querySelector(selectorOrElement);
    }

    return selectorOrElement;
};

const isVisible = element => {
    return !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length);
};
const setVisible = (selectorOrElement, show, important = false) => {
    const element = getElement(selectorOrElement);

    if (!element) {
        return;
    }

    const currentValue = element.style.getPropertyValue('display');

    if (!show) {
        if (currentValue === 'none') {
            return;
        }

        element.style.setProperty('display', 'none', important ? 'important' : '');
    } else {
        if (currentValue === 'none') {
            element.style.removeProperty('display');
        } // still not visible (if something else added display: none in CSS)


        if (!isVisible(element)) {
            element.style.setProperty('display', 'block');
        }
    }
};
const hide = (selectorOrElement, important = false) => {
    setVisible(selectorOrElement, false, important);
};
const show = selectorOrElement => {
    setVisible(selectorOrElement, true);
};; // CONCATENATED MODULE: ./resources/js/modules/ContextBootstrap/CheckoutBootstap.js





class CheckoutBootstap {
    constructor(gateway, renderer, messages, spinner) {
        this.gateway = gateway;
        this.renderer = renderer;
        this.messages = messages;
        this.spinner = spinner;
        this.standardOrderButtonSelector = ORDER_BUTTON_SELECTOR;
        this.buttonChangeObserver = new MutationObserver(el => {
            this.updateUi();
        });
    }

    init() {
        this.render(); // Unselect saved card.
        // WC saves form values, so with our current UI it would be a bit weird
        // if the user paid with saved, then after some time tries to pay again,
        // but wants to enter a new card, and to do that they have to choose Select payment in the list.

        jQuery('#saved-credit-card').val(jQuery('#saved-credit-card option:first').val());
        jQuery(document.body).on('updated_checkout', () => {
            this.render();
        });
        jQuery(document.body).on('updated_checkout payment_method_selected', () => {
            this.updateUi();
        });
        jQuery(document).on('hosted_fields_loaded', () => {
            jQuery('#saved-credit-card').on('change', () => {
                this.updateUi();
            });
        });
        this.updateUi();
    }

    shouldRender() {
        if (document.querySelector(this.gateway.button.cancel_wrapper)) {
            return false;
        }

        return document.querySelector(this.gateway.button.wrapper) !== null || document.querySelector(this.gateway.hosted_fields.wrapper) !== null;
    }

    render() {
        if (!this.shouldRender()) {
            return;
        }

        if (document.querySelector(this.gateway.hosted_fields.wrapper + '>div')) {
            document.querySelector(this.gateway.hosted_fields.wrapper + '>div').setAttribute('style', '');
        }

        const actionHandler = new ActionHandler_CheckoutActionHandler(PayPalCommerceGateway, new modules_ErrorHandler(this.gateway.labels.error.generic), this.spinner);
        this.renderer.render(actionHandler.configuration());
        this.buttonChangeObserver.observe(document.querySelector(this.standardOrderButtonSelector), {
            attributes: true
        });
    }

    updateUi() {
        const currentPaymentMethod = getCurrentPaymentMethod();
        const isPaypal = currentPaymentMethod === PaymentMethods.PAYPAL;
        const isCard = currentPaymentMethod === PaymentMethods.CARDS;
        const isSeparateButtonGateway = [PaymentMethods.CARD_BUTTON].includes(currentPaymentMethod);
        const isSavedCard = isCard && isSavedCardSelected();
        const isNotOurGateway = !isPaypal && !isCard && !isSeparateButtonGateway;
        const isFreeTrial = PayPalCommerceGateway.is_free_trial_cart;
        const hasVaultedPaypal = PayPalCommerceGateway.vaulted_paypal_email !== '';
        const paypalButtonWrappers = {...Object.entries(PayPalCommerceGateway.separate_buttons).reduce((result, [k, data]) => {
                return {...result, [data.id]: data.wrapper
                };
            }, {})
        };
        setVisible(this.standardOrderButtonSelector, isPaypal && isFreeTrial && hasVaultedPaypal || isNotOurGateway || isSavedCard, true);
        setVisible('.ppcp-vaulted-paypal-details', isPaypal);
        setVisible(this.gateway.button.wrapper, isPaypal && !(isFreeTrial && hasVaultedPaypal));
        setVisible(this.gateway.messages.wrapper, isPaypal && !isFreeTrial);
        setVisible(this.gateway.hosted_fields.wrapper, isCard && !isSavedCard);

        for (const [gatewayId, wrapper] of Object.entries(paypalButtonWrappers)) {
            setVisible(wrapper, gatewayId === currentPaymentMethod);
        }

        if (isPaypal && !isFreeTrial) {
            this.messages.render();
        }

        if (isCard) {
            if (isSavedCard) {
                this.disableCreditCardFields();
            } else {
                this.enableCreditCardFields();
            }
        }
    }

    disableCreditCardFields() {
        jQuery('label[for="ppcp-credit-card-gateway-card-number"]').addClass('ppcp-credit-card-gateway-form-field-disabled');
        jQuery('#ppcp-credit-card-gateway-card-number').addClass('ppcp-credit-card-gateway-form-field-disabled');
        jQuery('label[for="ppcp-credit-card-gateway-card-expiry"]').addClass('ppcp-credit-card-gateway-form-field-disabled');
        jQuery('#ppcp-credit-card-gateway-card-expiry').addClass('ppcp-credit-card-gateway-form-field-disabled');
        jQuery('label[for="ppcp-credit-card-gateway-card-cvc"]').addClass('ppcp-credit-card-gateway-form-field-disabled');
        jQuery('#ppcp-credit-card-gateway-card-cvc').addClass('ppcp-credit-card-gateway-form-field-disabled');
        jQuery('label[for="vault"]').addClass('ppcp-credit-card-gateway-form-field-disabled');
        jQuery('#ppcp-credit-card-vault').addClass('ppcp-credit-card-gateway-form-field-disabled');
        jQuery('#ppcp-credit-card-vault').attr("disabled", true);
        this.renderer.disableCreditCardFields();
    }

    enableCreditCardFields() {
        jQuery('label[for="ppcp-credit-card-gateway-card-number"]').removeClass('ppcp-credit-card-gateway-form-field-disabled');
        jQuery('#ppcp-credit-card-gateway-card-number').removeClass('ppcp-credit-card-gateway-form-field-disabled');
        jQuery('label[for="ppcp-credit-card-gateway-card-expiry"]').removeClass('ppcp-credit-card-gateway-form-field-disabled');
        jQuery('#ppcp-credit-card-gateway-card-expiry').removeClass('ppcp-credit-card-gateway-form-field-disabled');
        jQuery('label[for="ppcp-credit-card-gateway-card-cvc"]').removeClass('ppcp-credit-card-gateway-form-field-disabled');
        jQuery('#ppcp-credit-card-gateway-card-cvc').removeClass('ppcp-credit-card-gateway-form-field-disabled');
        jQuery('label[for="vault"]').removeClass('ppcp-credit-card-gateway-form-field-disabled');
        jQuery('#ppcp-credit-card-vault').removeClass('ppcp-credit-card-gateway-form-field-disabled');
        jQuery('#ppcp-credit-card-vault').attr("disabled", false);
        this.renderer.enableCreditCardFields();
    }

}

/* harmony default export */
const ContextBootstrap_CheckoutBootstap = (CheckoutBootstap);; // CONCATENATED MODULE: ./resources/js/modules/Helper/Subscriptions.js
const isChangePaymentPage = () => {
    const urlParams = new URLSearchParams(window.location.search);
    return urlParams.has('change_payment_method');
};; // CONCATENATED MODULE: ./resources/js/modules/ContextBootstrap/PayNowBootstrap.js



class PayNowBootstrap extends ContextBootstrap_CheckoutBootstap {
    constructor(gateway, renderer, messages, spinner) {
        super(gateway, renderer, messages, spinner);
    }

    updateUi() {
        if (isChangePaymentPage()) {
            return;
        }

        super.updateUi();
    }

}

/* harmony default export */
const ContextBootstrap_PayNowBootstrap = (PayNowBootstrap);
// EXTERNAL MODULE: ./node_modules/deepmerge/dist/cjs.js
var cjs = __webpack_require__(996);
var cjs_default = /*#__PURE__*/ __webpack_require__.n(cjs);; // CONCATENATED MODULE: ./resources/js/modules/Renderer/Renderer.js


class Renderer {
    constructor(creditCardRenderer, defaultSettings, onSmartButtonClick, onSmartButtonsInit) {
        this.defaultSettings = defaultSettings;
        this.creditCardRenderer = creditCardRenderer;
        this.onSmartButtonClick = onSmartButtonClick;
        this.onSmartButtonsInit = onSmartButtonsInit;
        this.renderedSources = new Set();
    }

    render(contextConfig, settingsOverride = {}) {
        const settings = cjs_default()(this.defaultSettings, settingsOverride);
        const enabledSeparateGateways = Object.fromEntries(Object.entries(settings.separate_buttons).filter(([s, data]) => document.querySelector(data.wrapper)));
        const hasEnabledSeparateGateways = Object.keys(enabledSeparateGateways).length !== 0;

        if (!hasEnabledSeparateGateways) {
            this.renderButtons(settings.button.wrapper, settings.button.style, contextConfig, hasEnabledSeparateGateways);
        } else {
            // render each button separately
            for (const fundingSource of paypal.getFundingSources().filter(s => !(s in enabledSeparateGateways))) {
                let style = settings.button.style;

                if (fundingSource !== 'paypal') {
                    style = {
                        shape: style.shape
                    };
                }

                this.renderButtons(settings.button.wrapper, style, contextConfig, hasEnabledSeparateGateways, fundingSource);
            }
        }

        this.creditCardRenderer.render(settings.hosted_fields.wrapper, contextConfig);

        for (const [fundingSource, data] of Object.entries(enabledSeparateGateways)) {
            this.renderButtons(data.wrapper, data.style, contextConfig, hasEnabledSeparateGateways, fundingSource);
        }
    }

    renderButtons(wrapper, style, contextConfig, hasEnabledSeparateGateways, fundingSource = null) {
        if (!document.querySelector(wrapper) || this.isAlreadyRendered(wrapper, fundingSource, hasEnabledSeparateGateways) || 'undefined' === typeof paypal.Buttons) {
            return;
        }

        if (fundingSource) {
            contextConfig.fundingSource = fundingSource;
        }

        const btn = paypal.Buttons({
            style,
            ...contextConfig,
            onClick: this.onSmartButtonClick,
                onInit: this.onSmartButtonsInit
        });

        if (!btn.isEligible()) {
            return;
        }

        btn.render(wrapper);
        this.renderedSources.add(wrapper + fundingSource ? ? '');
    }

    isAlreadyRendered(wrapper, fundingSource, hasEnabledSeparateGateways) {
        // Simply check that has child nodes when we do not need to render buttons separately,
        // this will reduce the risk of breaking with different themes/plugins
        // and on the cart page (where we also do not need to render separately), which may fully reload this part of the page.
        // Ideally we should also find a way to detect such full reloads and remove the corresponding keys from the set.
        if (!hasEnabledSeparateGateways) {
            return document.querySelector(wrapper).hasChildNodes();
        }

        return this.renderedSources.has(wrapper + fundingSource ? ? '');
    }

    hideButtons(element) {
        const domElement = document.querySelector(element);

        if (!domElement) {
            return false;
        }

        domElement.style.display = 'none';
        return true;
    }

    showButtons(element) {
        const domElement = document.querySelector(element);

        if (!domElement) {
            return false;
        }

        domElement.style.display = 'block';
        return true;
    }

    disableCreditCardFields() {
        this.creditCardRenderer.disableFields();
    }

    enableCreditCardFields() {
        this.creditCardRenderer.enableFields();
    }

}

/* harmony default export */
const Renderer_Renderer = (Renderer);; // CONCATENATED MODULE: ./resources/js/modules/Helper/DccInputFactory.js
const dccInputFactory = original => {
    const styles = window.getComputedStyle(original);
    const newElement = document.createElement('span');
    newElement.setAttribute('id', original.id);
    newElement.setAttribute('class', original.className);
    Object.values(styles).forEach(prop => {
        if (!styles[prop] || !isNaN(prop) || prop === 'background-image') {
            return;
        }

        newElement.style.setProperty(prop, '' + styles[prop]);
    });
    return newElement;
};

/* harmony default export */
const DccInputFactory = (dccInputFactory);; // CONCATENATED MODULE: ./resources/js/modules/Renderer/CreditCardRenderer.js




class CreditCardRenderer {
    constructor(defaultConfig, errorHandler, spinner) {
        this.defaultConfig = defaultConfig;
        this.errorHandler = errorHandler;
        this.spinner = spinner;
        this.cardValid = false;
        this.formValid = false;
        this.currentHostedFieldsInstance = null;
    }

    render(wrapper, contextConfig) {
        if (this.defaultConfig.context !== 'checkout' && this.defaultConfig.context !== 'pay-now' || wrapper === null || document.querySelector(wrapper) === null) {
            return;
        }

        if (typeof paypal.HostedFields === 'undefined' || !paypal.HostedFields.isEligible()) {
            const wrapperElement = document.querySelector(wrapper);
            wrapperElement.parentNode.removeChild(wrapperElement);
            return;
        }

        const buttonSelector = wrapper + ' button';

        if (this.currentHostedFieldsInstance) {
            this.currentHostedFieldsInstance.teardown().catch(err => console.error(`Hosted fields teardown error: ${err}`));
            this.currentHostedFieldsInstance = null;
        }

        const gateWayBox = document.querySelector('.payment_box.payment_method_ppcp-credit-card-gateway');

        if (!gateWayBox) {
            return;
        }

        const oldDisplayStyle = gateWayBox.style.display;
        gateWayBox.style.display = 'block';
        const hideDccGateway = document.querySelector('#ppcp-hide-dcc');

        if (hideDccGateway) {
            hideDccGateway.parentNode.removeChild(hideDccGateway);
        }

        const cardNumberField = document.querySelector('#ppcp-credit-card-gateway-card-number');
        const stylesRaw = window.getComputedStyle(cardNumberField);
        let styles = {};
        Object.values(stylesRaw).forEach(prop => {
            if (!stylesRaw[prop]) {
                return;
            }

            styles[prop] = '' + stylesRaw[prop];
        });
        const cardNumber = DccInputFactory(cardNumberField);
        cardNumberField.parentNode.replaceChild(cardNumber, cardNumberField);
        const cardExpiryField = document.querySelector('#ppcp-credit-card-gateway-card-expiry');
        const cardExpiry = DccInputFactory(cardExpiryField);
        cardExpiryField.parentNode.replaceChild(cardExpiry, cardExpiryField);
        const cardCodeField = document.querySelector('#ppcp-credit-card-gateway-card-cvc');
        const cardCode = DccInputFactory(cardCodeField);
        cardCodeField.parentNode.replaceChild(cardCode, cardCodeField);
        gateWayBox.style.display = oldDisplayStyle;
        const formWrapper = '.payment_box payment_method_ppcp-credit-card-gateway';

        if (this.defaultConfig.enforce_vault && document.querySelector(formWrapper + ' .ppcp-credit-card-vault')) {
            document.querySelector(formWrapper + ' .ppcp-credit-card-vault').checked = true;
            document.querySelector(formWrapper + ' .ppcp-credit-card-vault').setAttribute('disabled', true);
        }

        paypal.HostedFields.render({
            createOrder: contextConfig.createOrder,
            styles: {
                'input': styles
            },
            fields: {
                number: {
                    selector: '#ppcp-credit-card-gateway-card-number',
                    placeholder: this.defaultConfig.hosted_fields.labels.credit_card_number
                },
                cvv: {
                    selector: '#ppcp-credit-card-gateway-card-cvc',
                    placeholder: this.defaultConfig.hosted_fields.labels.cvv
                },
                expirationDate: {
                    selector: '#ppcp-credit-card-gateway-card-expiry',
                    placeholder: this.defaultConfig.hosted_fields.labels.mm_yy
                }
            }
        }).then(hostedFields => {
            document.dispatchEvent(new CustomEvent("hosted_fields_loaded"));
            this.currentHostedFieldsInstance = hostedFields;
            hostedFields.on('inputSubmitRequest', () => {
                this._submit(contextConfig);
            });
            hostedFields.on('cardTypeChange', event => {
                if (!event.cards.length) {
                    this.cardValid = false;
                    return;
                }

                const validCards = this.defaultConfig.hosted_fields.valid_cards;
                this.cardValid = validCards.indexOf(event.cards[0].type) !== -1;

                const className = this._cardNumberFiledCLassNameByCardType(event.cards[0].type);

                this._recreateElementClassAttribute(cardNumber, cardNumberField.className);

                if (event.fields.number.isValid) {
                    cardNumber.classList.add(className);
                }
            });
            hostedFields.on('validityChange', event => {
                const formValid = Object.keys(event.fields).every(function(key) {
                    return event.fields[key].isValid;
                });

                const className = this._cardNumberFiledCLassNameByCardType(event.cards[0].type);

                event.fields.number.isValid ? cardNumber.classList.add(className) : this._recreateElementClassAttribute(cardNumber, cardNumberField.className);
                this.formValid = formValid;
            });
            show(buttonSelector);

            if (document.querySelector(wrapper).getAttribute('data-ppcp-subscribed') !== true) {
                document.querySelector(buttonSelector).addEventListener('click', event => {
                    event.preventDefault();

                    this._submit(contextConfig);
                });
                document.querySelector(wrapper).setAttribute('data-ppcp-subscribed', true);
            }
        });
        document.querySelector('#payment_method_ppcp-credit-card-gateway').addEventListener('click', () => {
            document.querySelector('label[for=ppcp-credit-card-gateway-card-number]').click();
        });
    }

    disableFields() {
        if (this.currentHostedFieldsInstance) {
            this.currentHostedFieldsInstance.setAttribute({
                field: 'number',
                attribute: 'disabled'
            });
            this.currentHostedFieldsInstance.setAttribute({
                field: 'cvv',
                attribute: 'disabled'
            });
            this.currentHostedFieldsInstance.setAttribute({
                field: 'expirationDate',
                attribute: 'disabled'
            });
        }
    }

    enableFields() {
        if (this.currentHostedFieldsInstance) {
            this.currentHostedFieldsInstance.removeAttribute({
                field: 'number',
                attribute: 'disabled'
            });
            this.currentHostedFieldsInstance.removeAttribute({
                field: 'cvv',
                attribute: 'disabled'
            });
            this.currentHostedFieldsInstance.removeAttribute({
                field: 'expirationDate',
                attribute: 'disabled'
            });
        }
    }

    _submit(contextConfig) {
        this.spinner.block();
        this.errorHandler.clear();

        if (this.formValid && this.cardValid) {
            const save_card = this.defaultConfig.can_save_vault_token ? true : false;
            let vault = document.getElementById('ppcp-credit-card-vault') ? document.getElementById('ppcp-credit-card-vault').checked : save_card;

            if (this.defaultConfig.enforce_vault) {
                vault = true;
            }

            const contingency = this.defaultConfig.hosted_fields.contingency;
            const hostedFieldsData = {
                vault: vault
            };

            if (contingency !== 'NO_3D_SECURE') {
                hostedFieldsData.contingencies = [contingency];
            }

            if (this.defaultConfig.payer) {
                hostedFieldsData.cardholderName = this.defaultConfig.payer.name.given_name + ' ' + this.defaultConfig.payer.name.surname;
            }

            if (!hostedFieldsData.cardholderName) {
                const firstName = document.getElementById('billing_first_name') ? document.getElementById('billing_first_name').value : '';
                const lastName = document.getElementById('billing_last_name') ? document.getElementById('billing_last_name').value : '';
                hostedFieldsData.cardholderName = firstName + ' ' + lastName;
            }

            this.currentHostedFieldsInstance.submit(hostedFieldsData).then(payload => {
                payload.orderID = payload.orderId;
                this.spinner.unblock();
                return contextConfig.onApprove(payload);
            }).catch(err => {
                this.spinner.unblock();
                this.errorHandler.clear();

                if (err.details) {
                    this.errorHandler.message(err.details.map(d => `${d.issue} ${d.description}`).join('<br/>'), true);
                }
            });
        } else {
            this.spinner.unblock();
            const message = !this.cardValid ? this.defaultConfig.hosted_fields.labels.card_not_supported : this.defaultConfig.hosted_fields.labels.fields_not_valid;
            this.errorHandler.message(message);
        }
    }

    _cardNumberFiledCLassNameByCardType(cardType) {
        return cardType === 'american-express' ? 'amex' : cardType.replace('-', '');
    }

    _recreateElementClassAttribute(element, newClassName) {
        element.removeAttribute('class');
        element.setAttribute('class', newClassName);
    }

}

/* harmony default export */
const Renderer_CreditCardRenderer = (CreditCardRenderer);; // CONCATENATED MODULE: ./resources/js/modules/DataClientIdAttributeHandler.js
const storageKey = 'ppcp-data-client-id';

const validateToken = (token, user) => {
    if (!token) {
        return false;
    }

    if (token.user !== user) {
        return false;
    }

    const currentTime = new Date().getTime();
    const isExpired = currentTime >= token.expiration * 1000;
    return !isExpired;
};

const storedTokenForUser = user => {
    const token = JSON.parse(sessionStorage.getItem(storageKey));

    if (validateToken(token, user)) {
        return token.token;
    }

    return null;
};

const storeToken = token => {
    sessionStorage.setItem(storageKey, JSON.stringify(token));
};

const dataClientIdAttributeHandler = (script, config) => {
    fetch(config.endpoint, {
        method: 'POST',
        body: JSON.stringify({
            nonce: config.nonce
        })
    }).then(res => {
        return res.json();
    }).then(data => {
        const isValid = validateToken(data, config.user);

        if (!isValid) {
            return;
        }

        storeToken(data);
        script.setAttribute('data-client-token', data.token);
        document.body.append(script);
    });
};

/* harmony default export */
const DataClientIdAttributeHandler = (dataClientIdAttributeHandler);; // CONCATENATED MODULE: ./resources/js/modules/Renderer/MessageRenderer.js
class MessageRenderer {
    constructor(config) {
        this.config = config;
    }

    render() {
        if (!this.shouldRender()) {
            return;
        }

        paypal.Messages({
            amount: this.config.amount,
            placement: this.config.placement,
            style: this.config.style
        }).render(this.config.wrapper);
        jQuery(document.body).on('updated_cart_totals', () => {
            paypal.Messages({
                amount: this.config.amount,
                placement: this.config.placement,
                style: this.config.style
            }).render(this.config.wrapper);
        });
    }

    renderWithAmount(amount) {
        if (!this.shouldRender()) {
            return;
        }

        const newWrapper = document.createElement('div');
        newWrapper.setAttribute('id', this.config.wrapper.replace('#', ''));
        const sibling = document.querySelector(this.config.wrapper).nextSibling;
        document.querySelector(this.config.wrapper).parentElement.removeChild(document.querySelector(this.config.wrapper));
        sibling.parentElement.insertBefore(newWrapper, sibling);
        paypal.Messages({
            amount,
            placement: this.config.placement,
                style: this.config.style
        }).render(this.config.wrapper);
    }

    shouldRender() {
        if (typeof paypal.Messages === 'undefined' || typeof this.config.wrapper === 'undefined') {
            return false;
        }

        if (!document.querySelector(this.config.wrapper)) {
            return false;
        }

        return true;
    }

    hideMessages() {
        const domElement = document.querySelector(this.config.wrapper);

        if (!domElement) {
            return false;
        }

        domElement.style.display = 'none';
        return true;
    }

}

/* harmony default export */
const Renderer_MessageRenderer = (MessageRenderer);; // CONCATENATED MODULE: ./resources/js/modules/Helper/Spinner.js
class Spinner {
    constructor(target = 'form.woocommerce-checkout') {
        this.target = target;
    }

    setTarget(target) {
        this.target = target;
    }

    block() {
        jQuery(this.target).block({
            message: null,
            overlayCSS: {
                background: '#fff',
                opacity: 0.6
            }
        });
    }

    unblock() {
        jQuery(this.target).unblock();
    }

}

/* harmony default export */
const Helper_Spinner = (Spinner);; // CONCATENATED MODULE: ./resources/js/modules/ActionHandler/FreeTrialHandler.js



class FreeTrialHandler {
    constructor(config, spinner, errorHandler) {
        this.config = config;
        this.spinner = spinner;
        this.errorHandler = errorHandler;
    }

    handle() {
        this.spinner.block();
        fetch(this.config.ajax.vault_paypal.endpoint, {
            method: 'POST',
            body: JSON.stringify({
                nonce: this.config.ajax.vault_paypal.nonce,
                return_url: location.href
            })
        }).then(res => {
            return res.json();
        }).then(data => {
            if (!data.success) {
                this.spinner.unblock();
                console.error(data);
                this.errorHandler.message(data.data.message);
                throw Error(data.data.message);
            }

            location.href = data.data.approve_link;
        }).catch(error => {
            this.spinner.unblock();
            console.error(error);
            this.errorHandler.genericError();
        });
    }

}

/* harmony default export */
const ActionHandler_FreeTrialHandler = (FreeTrialHandler);; // CONCATENATED MODULE: ./resources/js/button.js









// TODO: could be a good idea to have a separate spinner for each gateway,
// but I think we care mainly about the script loading, so one spinner should be enough.

const buttonsSpinner = new Helper_Spinner(document.querySelector('.ppc-button-wrapper'));
const cardsSpinner = new Helper_Spinner('#ppcp-hosted-fields');

const bootstrap = () => {
    const errorHandler = new modules_ErrorHandler(PayPalCommerceGateway.labels.error.generic);
    const spinner = new Helper_Spinner();
    const creditCardRenderer = new Renderer_CreditCardRenderer(PayPalCommerceGateway, errorHandler, spinner);
    const freeTrialHandler = new ActionHandler_FreeTrialHandler(PayPalCommerceGateway, spinner, errorHandler);

    const onSmartButtonClick = (data, actions) => {
        window.ppcpFundingSource = data.fundingSource;

        if (PayPalCommerceGateway.basic_checkout_validation_enabled) {
            // TODO: quick fix to get the error about empty form before attempting PayPal order
            // it should solve #513 for most of the users, but proper solution should be implemented later.
            const requiredFields = jQuery('form.woocommerce-checkout .validate-required:visible :input');
            requiredFields.each((i, input) => {
                jQuery(input).trigger('validate');
            });
            const invalidFields = Array.from(jQuery('form.woocommerce-checkout .validate-required.woocommerce-invalid:visible'));

            if (invalidFields.length) {
                const billingFieldsContainer = document.querySelector('.woocommerce-billing-fields');
                const shippingFieldsContainer = document.querySelector('.woocommerce-shipping-fields');
                const nameMessageMap = PayPalCommerceGateway.labels.error.required.elements;
                const messages = invalidFields.map(el => {
                    const name = el.querySelector('[name]') ? .getAttribute('name');

                    if (name && name in nameMessageMap) {
                        return nameMessageMap[name];
                    }

                    let label = el.querySelector('label').textContent.replaceAll('*', '').trim();

                    if (billingFieldsContainer ? .contains(el)) {
                        label = PayPalCommerceGateway.labels.billing_field.replace('%s', label);
                    }

                    if (shippingFieldsContainer ? .contains(el)) {
                        label = PayPalCommerceGateway.labels.shipping_field.replace('%s', label);
                    }

                    return PayPalCommerceGateway.labels.error.required.field.replace('%s', `<strong>${label}</strong>`);
                }).filter(s => s.length > 2);
                errorHandler.clear();

                if (messages.length) {
                    messages.forEach(s => errorHandler.message(s));
                } else {
                    errorHandler.message(PayPalCommerceGateway.labels.error.required.generic);
                }

                return actions.reject();
            }
        }

        const form = document.querySelector('form.woocommerce-checkout');

        if (form) {
            jQuery('#ppcp-funding-source-form-input').remove();
            form.insertAdjacentHTML('beforeend', `<input type="hidden" name="ppcp-funding-source" value="${data.fundingSource}" id="ppcp-funding-source-form-input">`);
        }

        const isFreeTrial = PayPalCommerceGateway.is_free_trial_cart;

        if (isFreeTrial && data.fundingSource !== 'card') {
            freeTrialHandler.handle();
            return actions.reject();
        }
    };

    const onSmartButtonsInit = () => {
        buttonsSpinner.unblock();
    };

    const renderer = new Renderer_Renderer(creditCardRenderer, PayPalCommerceGateway, onSmartButtonClick, onSmartButtonsInit);
    const messageRenderer = new Renderer_MessageRenderer(PayPalCommerceGateway.messages);
    const context = PayPalCommerceGateway.context;

    if (context === 'mini-cart' || context === 'product') {
        if (PayPalCommerceGateway.mini_cart_buttons_enabled === '1') {
            const miniCartBootstrap = new ContextBootstrap_MiniCartBootstap(PayPalCommerceGateway, renderer);
            miniCartBootstrap.init();
        }
    }

    if (context === 'product' && PayPalCommerceGateway.single_product_buttons_enabled === '1') {
        const singleProductBootstrap = new ContextBootstrap_SingleProductBootstap(PayPalCommerceGateway, renderer, messageRenderer);
        singleProductBootstrap.init();
    }

    if (context === 'cart') {
        const cartBootstrap = new CartBootstap(PayPalCommerceGateway, renderer);
        cartBootstrap.init();
    }

    if (context === 'checkout') {
        const checkoutBootstap = new ContextBootstrap_CheckoutBootstap(PayPalCommerceGateway, renderer, messageRenderer, spinner);
        checkoutBootstap.init();
    }

    if (context === 'pay-now') {
        const payNowBootstrap = new ContextBootstrap_PayNowBootstrap(PayPalCommerceGateway, renderer, messageRenderer, spinner);
        payNowBootstrap.init();
    }

    if (context !== 'checkout') {
        messageRenderer.render();
    }
};

document.addEventListener('DOMContentLoaded', () => {
    if (!typeof PayPalCommerceGateway) {
        console.error('PayPal button could not be configured.');
        return;
    }

    if (PayPalCommerceGateway.context !== 'checkout' && PayPalCommerceGateway.data_client_id.user === 0 && PayPalCommerceGateway.data_client_id.has_subscriptions) {
        return;
    }

    const paypalButtonGatewayIds = [PaymentMethods.PAYPAL, ...Object.entries(PayPalCommerceGateway.separate_buttons).map(([k, data]) => data.id)]; // Sometimes PayPal script takes long time to load,
    // so we additionally hide the standard order button here to avoid failed orders.
    // Normally it is hidden later after the script load.

    const hideOrderButtonIfPpcpGateway = () => {
        // only in checkout and pay now page, otherwise it may break things (e.g. payment via product page),
        // and also the loading spinner may look weird on other pages
        if (!['checkout', 'pay-now'].includes(PayPalCommerceGateway.context) || isChangePaymentPage() || PayPalCommerceGateway.is_free_trial_cart && PayPalCommerceGateway.vaulted_paypal_email !== '') {
            return;
        }

        const currentPaymentMethod = getCurrentPaymentMethod();
        const isPaypalButton = paypalButtonGatewayIds.includes(currentPaymentMethod);
        const isCards = currentPaymentMethod === PaymentMethods.CARDS;
        setVisible(ORDER_BUTTON_SELECTOR, !isPaypalButton && !isCards, true);

        if (isPaypalButton) {
            // stopped after the first rendering of the buttons, in onInit
            buttonsSpinner.block();
        } else {
            buttonsSpinner.unblock();
        }

        if (isCards) {
            cardsSpinner.block();
        } else {
            cardsSpinner.unblock();
        }
    };

    jQuery(document).on('hosted_fields_loaded', () => {
        cardsSpinner.unblock();
    });
    let bootstrapped = false;
    hideOrderButtonIfPpcpGateway();
    jQuery(document.body).on('updated_checkout payment_method_selected', () => {
        if (bootstrapped) {
            return;
        }

        hideOrderButtonIfPpcpGateway();
    });
    const script = document.createElement('script');
    script.addEventListener('load', event => {
        bootstrapped = true;
        bootstrap();
    });
    script.setAttribute('src', PayPalCommerceGateway.button.url);
    Object.entries(PayPalCommerceGateway.script_attributes).forEach(keyValue => {
        script.setAttribute(keyValue[0], keyValue[1]);
    });

    if (PayPalCommerceGateway.data_client_id.set_attribute) {
        DataClientIdAttributeHandler(script, PayPalCommerceGateway.data_client_id);
        return;
    }

    document.body.append(script);
}); //# sourceURL=[module]
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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MVosRUFBQUEsTUFBTSxDQUFDdEIsUUFBUSxDQUFDMkMsSUFBVixDQUFOLENBQXNCb0UsRUFBdEIsQ0FBeUIsMENBQXpCLEVBQXFFLE1BQU07QUFDdkUsUUFBSW9VLFlBQUosRUFBa0I7QUFDZDtBQUNIOztBQUVESCxJQUFBQSw0QkFBNEI7QUFDL0IsR0FORDtBQVFBLFFBQU14RCxNQUFNLEdBQUd4WCxRQUFRLENBQUN3QixhQUFULENBQXVCLFFBQXZCLENBQWY7QUFDQWdXLEVBQUFBLE1BQU0sQ0FBQ3JOLGdCQUFQLENBQXdCLE1BQXhCLEVBQWlDcUssS0FBRCxJQUFXO0FBQ3ZDMkcsSUFBQUEsWUFBWSxHQUFHLElBQWY7QUFFQXBDLElBQUFBLFNBQVM7QUFDWixHQUpEO0FBS0F2QixFQUFBQSxNQUFNLENBQUMvVixZQUFQLENBQW9CLEtBQXBCLEVBQTJCdUMscUJBQXFCLENBQUNpRCxNQUF0QixDQUE2Qm1VLEdBQXhEO0FBQ0E1UCxFQUFBQSxNQUFNLENBQUNtRCxPQUFQLENBQWUzSyxxQkFBcUIsQ0FBQ3FYLGlCQUFyQyxFQUF3RC9SLE9BQXhELENBQ0tnUyxRQUFELElBQWM7QUFDVjlELElBQUFBLE1BQU0sQ0FBQy9WLFlBQVAsQ0FBb0I2WixRQUFRLENBQUMsQ0FBRCxDQUE1QixFQUFpQ0EsUUFBUSxDQUFDLENBQUQsQ0FBekM7QUFDSCxHQUhMOztBQU1BLE1BQUl0WCxxQkFBcUIsQ0FBQzZXLGNBQXRCLENBQXFDVSxhQUF6QyxFQUF3RDtBQUNwRGhFLElBQUFBLDRCQUE0QixDQUFDQyxNQUFELEVBQVN4VCxxQkFBcUIsQ0FBQzZXLGNBQS9CLENBQTVCO0FBQ0E7QUFDSDs7QUFFRDdhLEVBQUFBLFFBQVEsQ0FBQzJDLElBQVQsQ0FBYzhKLE1BQWQsQ0FBcUIrSyxNQUFyQjtBQUNILENBMUZMIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcHBjLWJ1dHRvbi8uL3Jlc291cmNlcy9qcy9tb2R1bGVzL0Vycm9ySGFuZGxlci5qcz9lNjVhIiwid2VicGFjazovL3BwYy1idXR0b24vLi9yZXNvdXJjZXMvanMvbW9kdWxlcy9PbkFwcHJvdmVIYW5kbGVyL29uQXBwcm92ZUZvckNvbnRpbnVlLmpzP2M0NTQiLCJ3ZWJwYWNrOi8vcHBjLWJ1dHRvbi8uL3Jlc291cmNlcy9qcy9tb2R1bGVzL0hlbHBlci9QYXllckRhdGEuanM/MmFmMSIsIndlYnBhY2s6Ly9wcGMtYnV0dG9uLy4vcmVzb3VyY2VzL2pzL21vZHVsZXMvSGVscGVyL0NoZWNrb3V0TWV0aG9kU3RhdGUuanM/ODBhMyIsIndlYnBhY2s6Ly9wcGMtYnV0dG9uLy4vcmVzb3VyY2VzL2pzL21vZHVsZXMvQWN0aW9uSGFuZGxlci9DYXJ0QWN0aW9uSGFuZGxlci5qcz84MmNmIiwid2VicGFjazovL3BwYy1idXR0b24vLi9yZXNvdXJjZXMvanMvbW9kdWxlcy9Db250ZXh0Qm9vdHN0cmFwL01pbmlDYXJ0Qm9vdHN0YXAuanM/ZDU1MiIsIndlYnBhY2s6Ly9wcGMtYnV0dG9uLy4vcmVzb3VyY2VzL2pzL21vZHVsZXMvSGVscGVyL1VwZGF0ZUNhcnQuanM/ZTQyMiIsIndlYnBhY2s6Ly9wcGMtYnV0dG9uLy4vcmVzb3VyY2VzL2pzL21vZHVsZXMvSGVscGVyL0J1dHRvbnNUb2dnbGVMaXN0ZW5lci5qcz9lMTkzIiwid2VicGFjazovL3BwYy1idXR0b24vLi9yZXNvdXJjZXMvanMvbW9kdWxlcy9FbnRpdHkvUHJvZHVjdC5qcz85ZmZmIiwid2VicGFjazovL3BwYy1idXR0b24vLi9yZXNvdXJjZXMvanMvbW9kdWxlcy9BY3Rpb25IYW5kbGVyL1NpbmdsZVByb2R1Y3RBY3Rpb25IYW5kbGVyLmpzP2Q5YjciLCJ3ZWJwYWNrOi8vcHBjLWJ1dHRvbi8uL3Jlc291cmNlcy9qcy9tb2R1bGVzL0NvbnRleHRCb290c3RyYXAvU2luZ2xlUHJvZHVjdEJvb3RzdGFwLmpzPzdjMTkiLCJ3ZWJwYWNrOi8vcHBjLWJ1dHRvbi8uL3Jlc291cmNlcy9qcy9tb2R1bGVzL0NvbnRleHRCb290c3RyYXAvQ2FydEJvb3RzdGFwLmpzPzVlOTQiLCJ3ZWJwYWNrOi8vcHBjLWJ1dHRvbi8uL3Jlc291cmNlcy9qcy9tb2R1bGVzL09uQXBwcm92ZUhhbmRsZXIvb25BcHByb3ZlRm9yUGF5Tm93LmpzPzkzMDUiLCJ3ZWJwYWNrOi8vcHBjLWJ1dHRvbi8uL3Jlc291cmNlcy9qcy9tb2R1bGVzL0FjdGlvbkhhbmRsZXIvQ2hlY2tvdXRBY3Rpb25IYW5kbGVyLmpzPzg1MTUiLCJ3ZWJwYWNrOi8vcHBjLWJ1dHRvbi8uL3Jlc291cmNlcy9qcy9tb2R1bGVzL0hlbHBlci9IaWRpbmcuanM/MWQzNiIsIndlYnBhY2s6Ly9wcGMtYnV0dG9uLy4vcmVzb3VyY2VzL2pzL21vZHVsZXMvQ29udGV4dEJvb3RzdHJhcC9DaGVja291dEJvb3RzdGFwLmpzP2M4NTUiLCJ3ZWJwYWNrOi8vcHBjLWJ1dHRvbi8uL3Jlc291cmNlcy9qcy9tb2R1bGVzL0hlbHBlci9TdWJzY3JpcHRpb25zLmpzP2I4NzAiLCJ3ZWJwYWNrOi8vcHBjLWJ1dHRvbi8uL3Jlc291cmNlcy9qcy9tb2R1bGVzL0NvbnRleHRCb290c3RyYXAvUGF5Tm93Qm9vdHN0cmFwLmpzP2Q5ZjUiLCJ3ZWJwYWNrOi8vcHBjLWJ1dHRvbi8uL3Jlc291cmNlcy9qcy9tb2R1bGVzL1JlbmRlcmVyL1JlbmRlcmVyLmpzP2ZhOTMiLCJ3ZWJwYWNrOi8vcHBjLWJ1dHRvbi8uL3Jlc291cmNlcy9qcy9tb2R1bGVzL0hlbHBlci9EY2NJbnB1dEZhY3RvcnkuanM/MmEyZiIsIndlYnBhY2s6Ly9wcGMtYnV0dG9uLy4vcmVzb3VyY2VzL2pzL21vZHVsZXMvUmVuZGVyZXIvQ3JlZGl0Q2FyZFJlbmRlcmVyLmpzPzM4N2EiLCJ3ZWJwYWNrOi8vcHBjLWJ1dHRvbi8uL3Jlc291cmNlcy9qcy9tb2R1bGVzL0RhdGFDbGllbnRJZEF0dHJpYnV0ZUhhbmRsZXIuanM/ZWUwYiIsIndlYnBhY2s6Ly9wcGMtYnV0dG9uLy4vcmVzb3VyY2VzL2pzL21vZHVsZXMvUmVuZGVyZXIvTWVzc2FnZVJlbmRlcmVyLmpzP2NkMDIiLCJ3ZWJwYWNrOi8vcHBjLWJ1dHRvbi8uL3Jlc291cmNlcy9qcy9tb2R1bGVzL0hlbHBlci9TcGlubmVyLmpzPzE3MDgiLCJ3ZWJwYWNrOi8vcHBjLWJ1dHRvbi8uL3Jlc291cmNlcy9qcy9tb2R1bGVzL0FjdGlvbkhhbmRsZXIvRnJlZVRyaWFsSGFuZGxlci5qcz9hYjc3Iiwid2VicGFjazovL3BwYy1idXR0b24vLi9yZXNvdXJjZXMvanMvYnV0dG9uLmpzPzA2MGYiXSwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgRXJyb3JIYW5kbGVyIHtcblxuICAgIGNvbnN0cnVjdG9yKGdlbmVyaWNFcnJvclRleHQpXG4gICAge1xuICAgICAgICB0aGlzLmdlbmVyaWNFcnJvclRleHQgPSBnZW5lcmljRXJyb3JUZXh0O1xuICAgICAgICB0aGlzLndyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcud29vY29tbWVyY2Utbm90aWNlcy13cmFwcGVyJyk7XG4gICAgICAgIHRoaXMubWVzc2FnZXNMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndWwud29vY29tbWVyY2UtZXJyb3InKTtcbiAgICB9XG5cbiAgICBnZW5lcmljRXJyb3IoKSB7XG4gICAgICAgIGlmICh0aGlzLndyYXBwZXIuY2xhc3NMaXN0LmNvbnRhaW5zKCdwcGNwLXBlcnNpc3QnKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlKHRoaXMuZ2VuZXJpY0Vycm9yVGV4dClcbiAgICB9XG5cbiAgICBhcHBlbmRQcmVwYXJlZEVycm9yTWVzc2FnZUVsZW1lbnQoZXJyb3JNZXNzYWdlRWxlbWVudClcbiAgICB7XG4gICAgICAgIGlmKHRoaXMubWVzc2FnZXNMaXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVNZXNzYWdlc0xpc3QoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubWVzc2FnZXNMaXN0LnJlcGxhY2VXaXRoKGVycm9yTWVzc2FnZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIG1lc3NhZ2UodGV4dCwgcGVyc2lzdCA9IGZhbHNlKVxuICAgIHtcbiAgICAgICAgaWYoISB0eXBlb2YgU3RyaW5nIHx8IHRleHQubGVuZ3RoID09PSAwKXtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQSBuZXcgbWVzc2FnZSB0ZXh0IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5tZXNzYWdlc0xpc3QgPT09IG51bGwpe1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlTWVzc2FnZXNMaXN0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGVyc2lzdCkge1xuICAgICAgICAgICAgdGhpcy53cmFwcGVyLmNsYXNzTGlzdC5hZGQoJ3BwY3AtcGVyc2lzdCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53cmFwcGVyLmNsYXNzTGlzdC5yZW1vdmUoJ3BwY3AtcGVyc2lzdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1lc3NhZ2VOb2RlID0gdGhpcy5wcmVwYXJlTWVzc2FnZXNMaXN0SXRlbSh0ZXh0KTtcbiAgICAgICAgdGhpcy5tZXNzYWdlc0xpc3QuYXBwZW5kQ2hpbGQobWVzc2FnZU5vZGUpO1xuXG4gICAgICAgIGpRdWVyeS5zY3JvbGxfdG9fbm90aWNlcyhqUXVlcnkoJy53b29jb21tZXJjZS1ub3RpY2VzLXdyYXBwZXInKSlcbiAgICB9XG5cbiAgICBwcmVwYXJlTWVzc2FnZXNMaXN0KClcbiAgICB7XG4gICAgICAgIGlmKHRoaXMubWVzc2FnZXNMaXN0ID09PSBudWxsKXtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXNMaXN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndWwnKTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXNMaXN0LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnd29vY29tbWVyY2UtZXJyb3InKTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXNMaXN0LnNldEF0dHJpYnV0ZSgncm9sZScsICdhbGVydCcpO1xuICAgICAgICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMubWVzc2FnZXNMaXN0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByZXBhcmVNZXNzYWdlc0xpc3RJdGVtKG1lc3NhZ2UpXG4gICAge1xuICAgICAgICBjb25zdCBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7XG4gICAgICAgIGxpLmlubmVySFRNTCA9IG1lc3NhZ2U7XG5cbiAgICAgICAgcmV0dXJuIGxpO1xuICAgIH1cblxuICAgIHNhbml0aXplKHRleHQpXG4gICAge1xuICAgICAgICBjb25zdCB0ZXh0YXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgICAgIHRleHRhcmVhLmlubmVySFRNTCA9IHRleHQ7XG4gICAgICAgIHJldHVybiB0ZXh0YXJlYS52YWx1ZS5yZXBsYWNlKCdFcnJvcjogJywgJycpO1xuICAgIH1cblxuICAgIGNsZWFyKClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2VzTGlzdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tZXNzYWdlc0xpc3QuaW5uZXJIVE1MID0gJyc7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFcnJvckhhbmRsZXI7XG4iLCJjb25zdCBvbkFwcHJvdmUgPSAoY29udGV4dCwgZXJyb3JIYW5kbGVyKSA9PiB7XG4gICAgcmV0dXJuIChkYXRhLCBhY3Rpb25zKSA9PiB7XG4gICAgICAgIHJldHVybiBmZXRjaChjb250ZXh0LmNvbmZpZy5hamF4LmFwcHJvdmVfb3JkZXIuZW5kcG9pbnQsIHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIG5vbmNlOiBjb250ZXh0LmNvbmZpZy5hamF4LmFwcHJvdmVfb3JkZXIubm9uY2UsXG4gICAgICAgICAgICAgICAgb3JkZXJfaWQ6ZGF0YS5vcmRlcklELFxuICAgICAgICAgICAgICAgIGZ1bmRpbmdfc291cmNlOiB3aW5kb3cucHBjcEZ1bmRpbmdTb3VyY2UsXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KS50aGVuKChyZXMpPT57XG4gICAgICAgICAgICByZXR1cm4gcmVzLmpzb24oKTtcbiAgICAgICAgfSkudGhlbigoZGF0YSk9PntcbiAgICAgICAgICAgIGlmICghZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyLmdlbmVyaWNFcnJvcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25zLnJlc3RhcnQoKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIuZ2VuZXJpY0Vycm9yKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gY29udGV4dC5jb25maWcucmVkaXJlY3Q7XG4gICAgICAgIH0pO1xuXG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBvbkFwcHJvdmU7XG4iLCJleHBvcnQgY29uc3QgcGF5ZXJEYXRhID0gKCkgPT4ge1xuICAgIGNvbnN0IHBheWVyID0gUGF5UGFsQ29tbWVyY2VHYXRld2F5LnBheWVyO1xuICAgIGlmICghIHBheWVyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBob25lID0gKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNiaWxsaW5nX3Bob25lJykgfHwgdHlwZW9mIHBheWVyLnBob25lICE9PSAndW5kZWZpbmVkJykgP1xuICAgIHtcbiAgICAgICAgcGhvbmVfdHlwZTpcIkhPTUVcIixcbiAgICAgICAgICAgIHBob25lX251bWJlcjp7XG4gICAgICAgICAgICBuYXRpb25hbF9udW1iZXIgOiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2JpbGxpbmdfcGhvbmUnKSkgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYmlsbGluZ19waG9uZScpLnZhbHVlIDogcGF5ZXIucGhvbmUucGhvbmVfbnVtYmVyLm5hdGlvbmFsX251bWJlclxuICAgICAgICB9XG4gICAgfSA6IG51bGw7XG4gICAgY29uc3QgcGF5ZXJEYXRhID0ge1xuICAgICAgICBlbWFpbF9hZGRyZXNzOihkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYmlsbGluZ19lbWFpbCcpKSA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNiaWxsaW5nX2VtYWlsJykudmFsdWUgOiBwYXllci5lbWFpbF9hZGRyZXNzLFxuICAgICAgICBuYW1lIDoge1xuICAgICAgICAgICAgc3VybmFtZTogKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNiaWxsaW5nX2xhc3RfbmFtZScpKSA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNiaWxsaW5nX2xhc3RfbmFtZScpLnZhbHVlIDogcGF5ZXIubmFtZS5zdXJuYW1lLFxuICAgICAgICAgICAgZ2l2ZW5fbmFtZTogKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNiaWxsaW5nX2ZpcnN0X25hbWUnKSkgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYmlsbGluZ19maXJzdF9uYW1lJykudmFsdWUgOiBwYXllci5uYW1lLmdpdmVuX25hbWVcbiAgICAgICAgfSxcbiAgICAgICAgYWRkcmVzcyA6IHtcbiAgICAgICAgICAgIGNvdW50cnlfY29kZSA6IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYmlsbGluZ19jb3VudHJ5JykpID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2JpbGxpbmdfY291bnRyeScpLnZhbHVlIDogcGF5ZXIuYWRkcmVzcy5jb3VudHJ5X2NvZGUsXG4gICAgICAgICAgICBhZGRyZXNzX2xpbmVfMSA6IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYmlsbGluZ19hZGRyZXNzXzEnKSkgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYmlsbGluZ19hZGRyZXNzXzEnKS52YWx1ZSA6IHBheWVyLmFkZHJlc3MuYWRkcmVzc19saW5lXzEsXG4gICAgICAgICAgICBhZGRyZXNzX2xpbmVfMiA6IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYmlsbGluZ19hZGRyZXNzXzInKSkgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYmlsbGluZ19hZGRyZXNzXzInKS52YWx1ZSA6IHBheWVyLmFkZHJlc3MuYWRkcmVzc19saW5lXzIsXG4gICAgICAgICAgICBhZG1pbl9hcmVhXzEgOiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2JpbGxpbmdfc3RhdGUnKSkgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYmlsbGluZ19zdGF0ZScpLnZhbHVlIDogcGF5ZXIuYWRkcmVzcy5hZG1pbl9hcmVhXzEsXG4gICAgICAgICAgICBhZG1pbl9hcmVhXzIgOiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2JpbGxpbmdfY2l0eScpKSA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNiaWxsaW5nX2NpdHknKS52YWx1ZSA6IHBheWVyLmFkZHJlc3MuYWRtaW5fYXJlYV8yLFxuICAgICAgICAgICAgcG9zdGFsX2NvZGUgOiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2JpbGxpbmdfcG9zdGNvZGUnKSkgPyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYmlsbGluZ19wb3N0Y29kZScpLnZhbHVlIDogcGF5ZXIuYWRkcmVzcy5wb3N0YWxfY29kZVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGlmIChwaG9uZSkge1xuICAgICAgICBwYXllckRhdGEucGhvbmUgPSBwaG9uZTtcbiAgICB9XG4gICAgcmV0dXJuIHBheWVyRGF0YTtcbn1cbiIsImV4cG9ydCBjb25zdCBQYXltZW50TWV0aG9kcyA9IHtcbiAgICBQQVlQQUw6ICdwcGNwLWdhdGV3YXknLFxuICAgIENBUkRTOiAncHBjcC1jcmVkaXQtY2FyZC1nYXRld2F5JyxcbiAgICBPWFhPOiAncHBjcC1veHhvLWdhdGV3YXknLFxuICAgIENBUkRfQlVUVE9OOiAncHBjcC1jYXJkLWJ1dHRvbi1nYXRld2F5Jyxcbn07XG5cbmV4cG9ydCBjb25zdCBPUkRFUl9CVVRUT05fU0VMRUNUT1IgPSAnI3BsYWNlX29yZGVyJztcblxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRQYXltZW50TWV0aG9kID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT1cInBheW1lbnRfbWV0aG9kXCJdOmNoZWNrZWQnKTtcbiAgICBpZiAoIWVsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBlbC52YWx1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NhdmVkQ2FyZFNlbGVjdGVkID0gKCkgPT4ge1xuICAgIGNvbnN0IHNhdmVkQ2FyZExpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2F2ZWQtY3JlZGl0LWNhcmQnKTtcbiAgICByZXR1cm4gc2F2ZWRDYXJkTGlzdCAmJiBzYXZlZENhcmRMaXN0LnZhbHVlICE9PSAnJztcbn07XG4iLCJpbXBvcnQgb25BcHByb3ZlIGZyb20gJy4uL09uQXBwcm92ZUhhbmRsZXIvb25BcHByb3ZlRm9yQ29udGludWUuanMnO1xuaW1wb3J0IHtwYXllckRhdGF9IGZyb20gXCIuLi9IZWxwZXIvUGF5ZXJEYXRhXCI7XG5pbXBvcnQge1BheW1lbnRNZXRob2RzfSBmcm9tIFwiLi4vSGVscGVyL0NoZWNrb3V0TWV0aG9kU3RhdGVcIjtcblxuY2xhc3MgQ2FydEFjdGlvbkhhbmRsZXIge1xuXG4gICAgY29uc3RydWN0b3IoY29uZmlnLCBlcnJvckhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gZXJyb3JIYW5kbGVyO1xuICAgIH1cblxuICAgIGNvbmZpZ3VyYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZU9yZGVyID0gKGRhdGEsIGFjdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBheWVyID0gcGF5ZXJEYXRhKCk7XG4gICAgICAgICAgICBjb25zdCBibkNvZGUgPSB0eXBlb2YgdGhpcy5jb25maWcuYm5fY29kZXNbdGhpcy5jb25maWcuY29udGV4dF0gIT09ICd1bmRlZmluZWQnID9cbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5ibl9jb2Rlc1t0aGlzLmNvbmZpZy5jb250ZXh0XSA6ICcnO1xuICAgICAgICAgICAgcmV0dXJuIGZldGNoKHRoaXMuY29uZmlnLmFqYXguY3JlYXRlX29yZGVyLmVuZHBvaW50LCB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICBub25jZTogdGhpcy5jb25maWcuYWpheC5jcmVhdGVfb3JkZXIubm9uY2UsXG4gICAgICAgICAgICAgICAgICAgIHB1cmNoYXNlX3VuaXRzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgcGF5bWVudF9tZXRob2Q6IFBheW1lbnRNZXRob2RzLlBBWVBBTCxcbiAgICAgICAgICAgICAgICAgICAgZnVuZGluZ19zb3VyY2U6IHdpbmRvdy5wcGNwRnVuZGluZ1NvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgYm5fY29kZTpibkNvZGUsXG4gICAgICAgICAgICAgICAgICAgIHBheWVyLFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OnRoaXMuY29uZmlnLmNvbnRleHRcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24ocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcy5qc29uKCk7XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihkYXRhLmRhdGEubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGEuaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3JlYXRlT3JkZXIsXG4gICAgICAgICAgICBvbkFwcHJvdmU6IG9uQXBwcm92ZSh0aGlzLCB0aGlzLmVycm9ySGFuZGxlciksXG4gICAgICAgICAgICBvbkVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9ySGFuZGxlci5nZW5lcmljRXJyb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhcnRBY3Rpb25IYW5kbGVyO1xuIiwiaW1wb3J0IEVycm9ySGFuZGxlciBmcm9tICcuLi9FcnJvckhhbmRsZXInO1xuaW1wb3J0IENhcnRBY3Rpb25IYW5kbGVyIGZyb20gJy4uL0FjdGlvbkhhbmRsZXIvQ2FydEFjdGlvbkhhbmRsZXInO1xuXG5jbGFzcyBNaW5pQ2FydEJvb3RzdGFwIHtcbiAgICBjb25zdHJ1Y3RvcihnYXRld2F5LCByZW5kZXJlcikge1xuICAgICAgICB0aGlzLmdhdGV3YXkgPSBnYXRld2F5O1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMuYWN0aW9uSGFuZGxlciA9IG51bGw7XG4gICAgfVxuXG4gICAgaW5pdCgpIHtcblxuICAgICAgICB0aGlzLmFjdGlvbkhhbmRsZXIgPSBuZXcgQ2FydEFjdGlvbkhhbmRsZXIoXG4gICAgICAgICAgICBQYXlQYWxDb21tZXJjZUdhdGV3YXksXG4gICAgICAgICAgICBuZXcgRXJyb3JIYW5kbGVyKHRoaXMuZ2F0ZXdheS5sYWJlbHMuZXJyb3IuZ2VuZXJpYyksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG5cbiAgICAgICAgalF1ZXJ5KGRvY3VtZW50LmJvZHkpLm9uKCd3Y19mcmFnbWVudHNfbG9hZGVkIHdjX2ZyYWdtZW50c19yZWZyZXNoZWQnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzaG91bGRSZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZ2F0ZXdheS5idXR0b24ubWluaV9jYXJ0X3dyYXBwZXIpICE9PSBudWxsXG4gICAgICAgICAgICB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZ2F0ZXdheS5ob3N0ZWRfZmllbGRzLm1pbmlfY2FydF93cmFwcGVyKSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRSZW5kZXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW5kZXIoXG4gICAgICAgICAgICB0aGlzLmFjdGlvbkhhbmRsZXIuY29uZmlndXJhdGlvbigpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJ1dHRvbjoge1xuICAgICAgICAgICAgICAgICAgICB3cmFwcGVyOiB0aGlzLmdhdGV3YXkuYnV0dG9uLm1pbmlfY2FydF93cmFwcGVyLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogdGhpcy5nYXRld2F5LmJ1dHRvbi5taW5pX2NhcnRfc3R5bGUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1pbmlDYXJ0Qm9vdHN0YXA7XG4iLCJpbXBvcnQgUHJvZHVjdCBmcm9tIFwiLi4vRW50aXR5L1Byb2R1Y3RcIjtcbmNsYXNzIFVwZGF0ZUNhcnQge1xuXG4gICAgY29uc3RydWN0b3IoZW5kcG9pbnQsIG5vbmNlKVxuICAgIHtcbiAgICAgICAgdGhpcy5lbmRwb2ludCA9IGVuZHBvaW50O1xuICAgICAgICB0aGlzLm5vbmNlID0gbm9uY2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb25SZXNvbHZlXG4gICAgICogQHBhcmFtIHtQcm9kdWN0W119IHByb2R1Y3RzXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59XG4gICAgICovXG4gICAgdXBkYXRlKG9uUmVzb2x2ZSwgcHJvZHVjdHMpXG4gICAge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgZmV0Y2goXG4gICAgICAgICAgICAgICAgdGhpcy5lbmRwb2ludCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBub25jZTogdGhpcy5ub25jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RzLFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICkudGhlbihcbiAgICAgICAgICAgICAgICAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5qc29uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoISByZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QocmVzdWx0LmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gb25SZXNvbHZlKHJlc3VsdC5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNvbHZlZCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBVcGRhdGVDYXJ0OyIsIi8qKlxuICogV2hlbiB5b3UgY2FuJ3QgYWRkIHNvbWV0aGluZyB0byB0aGUgY2FydCwgdGhlIFBheVBhbCBidXR0b25zIHNob3VsZCBub3Qgc2hvdy5cbiAqIFRoZXJlZm9yZSB3ZSBsaXN0ZW4gZm9yIGNoYW5nZXMgb24gdGhlIGFkZCB0byBjYXJ0IGJ1dHRvbiBhbmQgc2hvdy9oaWRlIHRoZSBidXR0b25zIGFjY29yZGluZ2x5LlxuICovXG5cbmNsYXNzIEJ1dHRvbnNUb2dnbGVMaXN0ZW5lciB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCwgc2hvd0NhbGxiYWNrLCBoaWRlQ2FsbGJhY2spXG4gICAge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLnNob3dDYWxsYmFjayA9IHNob3dDYWxsYmFjaztcbiAgICAgICAgdGhpcy5oaWRlQ2FsbGJhY2sgPSBoaWRlQ2FsbGJhY2s7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGluaXQoKVxuICAgIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0geyBhdHRyaWJ1dGVzIDogdHJ1ZSB9O1xuICAgICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQ2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNob3dDYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjayk7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsZW1lbnQsIGNvbmZpZyk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgZGlzY29ubmVjdCgpXG4gICAge1xuICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbnNUb2dnbGVMaXN0ZW5lcjsiLCJjbGFzcyBQcm9kdWN0IHtcblxuICAgIGNvbnN0cnVjdG9yKGlkLCBxdWFudGl0eSwgdmFyaWF0aW9ucykge1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgIHRoaXMucXVhbnRpdHkgPSBxdWFudGl0eTtcbiAgICAgICAgdGhpcy52YXJpYXRpb25zID0gdmFyaWF0aW9ucztcbiAgICB9XG5cbiAgICBkYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6dGhpcy5pZCxcbiAgICAgICAgICAgIHF1YW50aXR5OnRoaXMucXVhbnRpdHksXG4gICAgICAgICAgICB2YXJpYXRpb25zOnRoaXMudmFyaWF0aW9uc1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQcm9kdWN0OyIsImltcG9ydCBCdXR0b25zVG9nZ2xlTGlzdGVuZXIgZnJvbSAnLi4vSGVscGVyL0J1dHRvbnNUb2dnbGVMaXN0ZW5lcic7XG5pbXBvcnQgUHJvZHVjdCBmcm9tICcuLi9FbnRpdHkvUHJvZHVjdCc7XG5pbXBvcnQgb25BcHByb3ZlIGZyb20gJy4uL09uQXBwcm92ZUhhbmRsZXIvb25BcHByb3ZlRm9yQ29udGludWUnO1xuaW1wb3J0IHtwYXllckRhdGF9IGZyb20gXCIuLi9IZWxwZXIvUGF5ZXJEYXRhXCI7XG5pbXBvcnQge1BheW1lbnRNZXRob2RzfSBmcm9tIFwiLi4vSGVscGVyL0NoZWNrb3V0TWV0aG9kU3RhdGVcIjtcblxuY2xhc3MgU2luZ2xlUHJvZHVjdEFjdGlvbkhhbmRsZXIge1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgdXBkYXRlQ2FydCxcbiAgICAgICAgc2hvd0J1dHRvbkNhbGxiYWNrLFxuICAgICAgICBoaWRlQnV0dG9uQ2FsbGJhY2ssXG4gICAgICAgIGZvcm1FbGVtZW50LFxuICAgICAgICBlcnJvckhhbmRsZXJcbiAgICApIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgIHRoaXMudXBkYXRlQ2FydCA9IHVwZGF0ZUNhcnQ7XG4gICAgICAgIHRoaXMuc2hvd0J1dHRvbkNhbGxiYWNrID0gc2hvd0J1dHRvbkNhbGxiYWNrO1xuICAgICAgICB0aGlzLmhpZGVCdXR0b25DYWxsYmFjayA9IGhpZGVCdXR0b25DYWxsYmFjaztcbiAgICAgICAgdGhpcy5mb3JtRWxlbWVudCA9IGZvcm1FbGVtZW50O1xuICAgICAgICB0aGlzLmVycm9ySGFuZGxlciA9IGVycm9ySGFuZGxlcjtcbiAgICB9XG5cbiAgICBjb25maWd1cmF0aW9uKClcbiAgICB7XG5cbiAgICAgICAgaWYgKCB0aGlzLmhhc1ZhcmlhdGlvbnMoKSApIHtcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEJ1dHRvbnNUb2dnbGVMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1FbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zaW5nbGVfYWRkX3RvX2NhcnRfYnV0dG9uJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93QnV0dG9uQ2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlQnV0dG9uQ2FsbGJhY2tcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBvYnNlcnZlci5pbml0KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3JlYXRlT3JkZXI6IHRoaXMuY3JlYXRlT3JkZXIoKSxcbiAgICAgICAgICAgIG9uQXBwcm92ZTogb25BcHByb3ZlKHRoaXMsIHRoaXMuZXJyb3JIYW5kbGVyKSxcbiAgICAgICAgICAgIG9uRXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLmdlbmVyaWNFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlT3JkZXIoKVxuICAgIHtcbiAgICAgICAgdmFyIGdldFByb2R1Y3RzID0gbnVsbDtcbiAgICAgICAgaWYgKCEgdGhpcy5pc0dyb3VwZWRQcm9kdWN0KCkgKSB7XG4gICAgICAgICAgICBnZXRQcm9kdWN0cyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPVwiYWRkLXRvLWNhcnRcIl0nKS52YWx1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBxdHkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbbmFtZT1cInF1YW50aXR5XCJdJykudmFsdWU7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9ucyA9IHRoaXMudmFyaWF0aW9ucygpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbbmV3IFByb2R1Y3QoaWQsIHF0eSwgdmFyaWF0aW9ucyldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UHJvZHVjdHMgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdHMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1FbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJudW1iZXJcIl0nKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghIGVsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50TmFtZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCduYW1lJykubWF0Y2goL3F1YW50aXR5XFxbKFtcXGRdKilcXF0vKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnROYW1lLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gcGFyc2VJbnQoZWxlbWVudE5hbWVbMV0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWFudGl0eSA9IHBhcnNlSW50KGVsZW1lbnQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0cy5wdXNoKG5ldyBQcm9kdWN0KGlkLCBxdWFudGl0eSwgbnVsbCkpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb2R1Y3RzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNyZWF0ZU9yZGVyID0gKGRhdGEsIGFjdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLmNsZWFyKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IG9uUmVzb2x2ZSA9IChwdXJjaGFzZV91bml0cykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBheWVyID0gcGF5ZXJEYXRhKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYm5Db2RlID0gdHlwZW9mIHRoaXMuY29uZmlnLmJuX2NvZGVzW3RoaXMuY29uZmlnLmNvbnRleHRdICE9PSAndW5kZWZpbmVkJyA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmJuX2NvZGVzW3RoaXMuY29uZmlnLmNvbnRleHRdIDogJyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoKHRoaXMuY29uZmlnLmFqYXguY3JlYXRlX29yZGVyLmVuZHBvaW50LCB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBub25jZTogdGhpcy5jb25maWcuYWpheC5jcmVhdGVfb3JkZXIubm9uY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXJjaGFzZV91bml0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm5fY29kZTpibkNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXltZW50X21ldGhvZDogUGF5bWVudE1ldGhvZHMuUEFZUEFMLFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuZGluZ19zb3VyY2U6IHdpbmRvdy5wcGNwRnVuZGluZ1NvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6dGhpcy5jb25maWcuY29udGV4dFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzLmpzb24oKTtcbiAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoZGF0YS5kYXRhLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmRhdGEuaWQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy51cGRhdGVDYXJ0LnVwZGF0ZShvblJlc29sdmUsIGdldFByb2R1Y3RzKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjcmVhdGVPcmRlcjtcbiAgICB9XG5cbiAgICB2YXJpYXRpb25zKClcbiAgICB7XG5cbiAgICAgICAgaWYgKCEgdGhpcy5oYXNWYXJpYXRpb25zKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbLi4udGhpcy5mb3JtRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW25hbWVePSdhdHRyaWJ1dGVfJ11cIildLm1hcChcbiAgICAgICAgICAgIChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTplbGVtZW50LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOmVsZW1lbnQubmFtZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfVxuXG4gICAgaGFzVmFyaWF0aW9ucygpXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3ZhcmlhdGlvbnNfZm9ybScpO1xuICAgIH1cblxuICAgIGlzR3JvdXBlZFByb2R1Y3QoKVxuICAgIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdncm91cGVkX2Zvcm0nKTtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBTaW5nbGVQcm9kdWN0QWN0aW9uSGFuZGxlcjtcbiIsImltcG9ydCBFcnJvckhhbmRsZXIgZnJvbSAnLi4vRXJyb3JIYW5kbGVyJztcbmltcG9ydCBVcGRhdGVDYXJ0IGZyb20gXCIuLi9IZWxwZXIvVXBkYXRlQ2FydFwiO1xuaW1wb3J0IFNpbmdsZVByb2R1Y3RBY3Rpb25IYW5kbGVyIGZyb20gXCIuLi9BY3Rpb25IYW5kbGVyL1NpbmdsZVByb2R1Y3RBY3Rpb25IYW5kbGVyXCI7XG5cbmNsYXNzIFNpbmdsZVByb2R1Y3RCb290c3RhcCB7XG4gICAgY29uc3RydWN0b3IoZ2F0ZXdheSwgcmVuZGVyZXIsIG1lc3NhZ2VzKSB7XG4gICAgICAgIHRoaXMuZ2F0ZXdheSA9IGdhdGV3YXk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5tZXNzYWdlcyA9IG1lc3NhZ2VzO1xuICAgIH1cblxuXG4gICAgaGFuZGxlQ2hhbmdlKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkUmVuZGVyKCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuaGlkZUJ1dHRvbnModGhpcy5nYXRld2F5Lmhvc3RlZF9maWVsZHMud3JhcHBlcik7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmhpZGVCdXR0b25zKHRoaXMuZ2F0ZXdheS5idXR0b24ud3JhcHBlcik7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzLmhpZGVNZXNzYWdlcygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBpbml0KCkge1xuXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Zvcm0uY2FydCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuaGFuZGxlQ2hhbmdlLmJpbmQodGhpcykpXG5cbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFJlbmRlcigpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmhpZGVCdXR0b25zKHRoaXMuZ2F0ZXdheS5ob3N0ZWRfZmllbGRzLndyYXBwZXIpO1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlcy5oaWRlTWVzc2FnZXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG5cbiAgICB9XG5cbiAgICBzaG91bGRSZW5kZXIoKSB7XG5cbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Zvcm0uY2FydCcpICE9PSBudWxsICYmICF0aGlzLnByaWNlQW1vdW50SXNaZXJvKCk7XG5cbiAgICB9XG5cbiAgICBwcmljZUFtb3VudCgpIHtcblxuICAgICAgICBsZXQgcHJpY2VUZXh0ID0gXCIwXCI7XG4gICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdmb3JtLmNhcnQgaW5zIC53b29jb21tZXJjZS1QcmljZS1hbW91bnQnKSkge1xuICAgICAgICAgICAgcHJpY2VUZXh0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZm9ybS5jYXJ0IGlucyAud29vY29tbWVyY2UtUHJpY2UtYW1vdW50JykuaW5uZXJUZXh0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Zvcm0uY2FydCAud29vY29tbWVyY2UtUHJpY2UtYW1vdW50JykpIHtcbiAgICAgICAgICAgIHByaWNlVGV4dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2Zvcm0uY2FydCAud29vY29tbWVyY2UtUHJpY2UtYW1vdW50JykuaW5uZXJUZXh0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wcm9kdWN0IC53b29jb21tZXJjZS1QcmljZS1hbW91bnQnKSkge1xuICAgICAgICAgICAgcHJpY2VUZXh0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnByb2R1Y3QgLndvb2NvbW1lcmNlLVByaWNlLWFtb3VudCcpLmlubmVyVGV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaWNlVGV4dCA9IHByaWNlVGV4dC5yZXBsYWNlKC8sL2csICcuJyk7XG5cbiAgICAgICAgcmV0dXJuICBwYXJzZUZsb2F0KHByaWNlVGV4dC5yZXBsYWNlKC8oW15cXGQsXFwuXFxzXSopL2csICcnKSk7XG4gICAgfVxuXG4gICAgcHJpY2VBbW91bnRJc1plcm8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaWNlQW1vdW50KCkgPT09IDA7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBhY3Rpb25IYW5kbGVyID0gbmV3IFNpbmdsZVByb2R1Y3RBY3Rpb25IYW5kbGVyKFxuICAgICAgICAgICAgdGhpcy5nYXRld2F5LFxuICAgICAgICAgICAgbmV3IFVwZGF0ZUNhcnQoXG4gICAgICAgICAgICAgICAgdGhpcy5nYXRld2F5LmFqYXguY2hhbmdlX2NhcnQuZW5kcG9pbnQsXG4gICAgICAgICAgICAgICAgdGhpcy5nYXRld2F5LmFqYXguY2hhbmdlX2NhcnQubm9uY2UsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2hvd0J1dHRvbnModGhpcy5nYXRld2F5LmJ1dHRvbi53cmFwcGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNob3dCdXR0b25zKHRoaXMuZ2F0ZXdheS5ob3N0ZWRfZmllbGRzLndyYXBwZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZXMucmVuZGVyV2l0aEFtb3VudCh0aGlzLnByaWNlQW1vdW50KCkpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuaGlkZUJ1dHRvbnModGhpcy5nYXRld2F5LmJ1dHRvbi53cmFwcGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmhpZGVCdXR0b25zKHRoaXMuZ2F0ZXdheS5ob3N0ZWRfZmllbGRzLndyYXBwZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZXMuaGlkZU1lc3NhZ2VzKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZm9ybS5jYXJ0JyksXG4gICAgICAgICAgICBuZXcgRXJyb3JIYW5kbGVyKHRoaXMuZ2F0ZXdheS5sYWJlbHMuZXJyb3IuZ2VuZXJpYyksXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW5kZXIoXG4gICAgICAgICAgICBhY3Rpb25IYW5kbGVyLmNvbmZpZ3VyYXRpb24oKVxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2luZ2xlUHJvZHVjdEJvb3RzdGFwO1xuIiwiaW1wb3J0IENhcnRBY3Rpb25IYW5kbGVyIGZyb20gJy4uL0FjdGlvbkhhbmRsZXIvQ2FydEFjdGlvbkhhbmRsZXInO1xuaW1wb3J0IEVycm9ySGFuZGxlciBmcm9tICcuLi9FcnJvckhhbmRsZXInO1xuXG5jbGFzcyBDYXJ0Qm9vdHN0cmFwIHtcbiAgICBjb25zdHJ1Y3RvcihnYXRld2F5LCByZW5kZXJlcikge1xuICAgICAgICB0aGlzLmdhdGV3YXkgPSBnYXRld2F5O1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgfVxuXG4gICAgaW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFJlbmRlcigpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbmRlcigpO1xuXG4gICAgICAgIGpRdWVyeShkb2N1bWVudC5ib2R5KS5vbigndXBkYXRlZF9jYXJ0X3RvdGFscyB1cGRhdGVkX2NoZWNrb3V0JywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2hvdWxkUmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmdhdGV3YXkuYnV0dG9uLndyYXBwZXIpICE9PVxuICAgICAgICAgICAgbnVsbCB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZ2F0ZXdheS5ob3N0ZWRfZmllbGRzLndyYXBwZXIpICE9PVxuICAgICAgICAgICAgbnVsbDtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbkhhbmRsZXIgPSBuZXcgQ2FydEFjdGlvbkhhbmRsZXIoXG4gICAgICAgICAgICBQYXlQYWxDb21tZXJjZUdhdGV3YXksXG4gICAgICAgICAgICBuZXcgRXJyb3JIYW5kbGVyKHRoaXMuZ2F0ZXdheS5sYWJlbHMuZXJyb3IuZ2VuZXJpYyksXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW5kZXIoXG4gICAgICAgICAgICBhY3Rpb25IYW5kbGVyLmNvbmZpZ3VyYXRpb24oKVxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FydEJvb3RzdHJhcDtcbiIsImNvbnN0IG9uQXBwcm92ZSA9IChjb250ZXh0LCBlcnJvckhhbmRsZXIsIHNwaW5uZXIpID0+IHtcbiAgICByZXR1cm4gKGRhdGEsIGFjdGlvbnMpID0+IHtcbiAgICAgICAgc3Bpbm5lci5ibG9jaygpO1xuICAgICAgICBlcnJvckhhbmRsZXIuY2xlYXIoKTtcblxuICAgICAgICByZXR1cm4gZmV0Y2goY29udGV4dC5jb25maWcuYWpheC5hcHByb3ZlX29yZGVyLmVuZHBvaW50LCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBub25jZTogY29udGV4dC5jb25maWcuYWpheC5hcHByb3ZlX29yZGVyLm5vbmNlLFxuICAgICAgICAgICAgICAgIG9yZGVyX2lkOmRhdGEub3JkZXJJRCxcbiAgICAgICAgICAgICAgICBmdW5kaW5nX3NvdXJjZTogd2luZG93LnBwY3BGdW5kaW5nU291cmNlLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSkudGhlbigocmVzKT0+e1xuICAgICAgICAgICAgcmV0dXJuIHJlcy5qc29uKCk7XG4gICAgICAgIH0pLnRoZW4oKGRhdGEpPT57XG4gICAgICAgICAgICBzcGlubmVyLnVuYmxvY2soKTtcbiAgICAgICAgICAgIGlmICghZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuZGF0YS5jb2RlID09PSAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyLm1lc3NhZ2UoZGF0YS5kYXRhLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlci5nZW5lcmljRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgYWN0aW9ucy5yZXN0YXJ0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9ucy5yZXN0YXJ0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmRhdGEubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjcGxhY2Vfb3JkZXInKS5jbGljaygpXG4gICAgICAgIH0pO1xuXG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBvbkFwcHJvdmU7XG4iLCJpbXBvcnQgb25BcHByb3ZlIGZyb20gJy4uL09uQXBwcm92ZUhhbmRsZXIvb25BcHByb3ZlRm9yUGF5Tm93LmpzJztcbmltcG9ydCB7cGF5ZXJEYXRhfSBmcm9tIFwiLi4vSGVscGVyL1BheWVyRGF0YVwiO1xuaW1wb3J0IHtnZXRDdXJyZW50UGF5bWVudE1ldGhvZH0gZnJvbSBcIi4uL0hlbHBlci9DaGVja291dE1ldGhvZFN0YXRlXCI7XG5cbmNsYXNzIENoZWNrb3V0QWN0aW9uSGFuZGxlciB7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb25maWcsIGVycm9ySGFuZGxlciwgc3Bpbm5lcikge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBlcnJvckhhbmRsZXI7XG4gICAgICAgIHRoaXMuc3Bpbm5lciA9IHNwaW5uZXI7XG4gICAgfVxuXG4gICAgY29uZmlndXJhdGlvbigpIHtcbiAgICAgICAgY29uc3Qgc3Bpbm5lciA9IHRoaXMuc3Bpbm5lcjtcbiAgICAgICAgY29uc3QgY3JlYXRlT3JkZXIgPSAoZGF0YSwgYWN0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF5ZXIgPSBwYXllckRhdGEoKTtcbiAgICAgICAgICAgIGNvbnN0IGJuQ29kZSA9IHR5cGVvZiB0aGlzLmNvbmZpZy5ibl9jb2Rlc1t0aGlzLmNvbmZpZy5jb250ZXh0XSAhPT0gJ3VuZGVmaW5lZCcgP1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmJuX2NvZGVzW3RoaXMuY29uZmlnLmNvbnRleHRdIDogJyc7XG5cbiAgICAgICAgICAgIGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuZXJyb3JIYW5kbGVyO1xuXG4gICAgICAgICAgICBjb25zdCBmb3JtU2VsZWN0b3IgPSB0aGlzLmNvbmZpZy5jb250ZXh0ID09PSAnY2hlY2tvdXQnID8gJ2Zvcm0uY2hlY2tvdXQnIDogJ2Zvcm0jb3JkZXJfcmV2aWV3JztcbiAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZm9ybVNlbGVjdG9yKSk7XG4gICAgICAgICAgICAvLyB3aWxsIG5vdCBoYW5kbGUgZmllbGRzIHdpdGggbXVsdGlwbGUgdmFsdWVzIChjaGVja2JveGVzLCA8c2VsZWN0IG11bHRpcGxlPiksIGJ1dCB3ZSBkbyBub3QgY2FyZSBhYm91dCB0aGlzIGhlcmVcbiAgICAgICAgICAgIGNvbnN0IGZvcm1Kc29uT2JqID0gT2JqZWN0LmZyb21FbnRyaWVzKGZvcm1EYXRhKTtcblxuICAgICAgICAgICAgY29uc3QgY3JlYXRlYWNjb3VudCA9IGpRdWVyeSgnI2NyZWF0ZWFjY291bnQnKS5pcyhcIjpjaGVja2VkXCIpID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCBwYXltZW50TWV0aG9kID0gZ2V0Q3VycmVudFBheW1lbnRNZXRob2QoKTtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmRpbmdTb3VyY2UgPSB3aW5kb3cucHBjcEZ1bmRpbmdTb3VyY2U7XG5cbiAgICAgICAgICAgIHJldHVybiBmZXRjaCh0aGlzLmNvbmZpZy5hamF4LmNyZWF0ZV9vcmRlci5lbmRwb2ludCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgbm9uY2U6IHRoaXMuY29uZmlnLmFqYXguY3JlYXRlX29yZGVyLm5vbmNlLFxuICAgICAgICAgICAgICAgICAgICBwYXllcixcbiAgICAgICAgICAgICAgICAgICAgYm5fY29kZTpibkNvZGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6dGhpcy5jb25maWcuY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJfaWQ6dGhpcy5jb25maWcub3JkZXJfaWQsXG4gICAgICAgICAgICAgICAgICAgIHBheW1lbnRfbWV0aG9kOiBwYXltZW50TWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICBmdW5kaW5nX3NvdXJjZTogZnVuZGluZ1NvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybTogZm9ybUpzb25PYmosXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWFjY291bnQ6IGNyZWF0ZWFjY291bnRcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcy5qc29uKCk7XG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bpbm5lci51bmJsb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vaGFuZGxlIGJvdGggbWVzc2FnZXMgc2VudCBmcm9tIFdvb2NvbW1lcmNlIChkYXRhLm1lc3NhZ2VzKSBhbmQgdGhpcyBwbHVnaW4gKGRhdGEuZGF0YS5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKGRhdGEubWVzc2FnZXMpICE9PSAndW5kZWZpbmVkJyApXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvbVBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ySGFuZGxlci5hcHBlbmRQcmVwYXJlZEVycm9yTWVzc2FnZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUGFyc2VyLnBhcnNlRnJvbVN0cmluZyhkYXRhLm1lc3NhZ2VzLCAndGV4dC9odG1sJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJ3VsJylcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRhdGEuZGV0YWlscy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyLm1lc3NhZ2UoZGF0YS5kYXRhLmRldGFpbHMubWFwKGQgPT4gYCR7ZC5pc3N1ZX0gJHtkLmRlc2NyaXB0aW9ufWApLmpvaW4oJzxici8+JyksIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIubWVzc2FnZShkYXRhLmRhdGEubWVzc2FnZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZGF0YS5kYXRhLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsICdwcGNwLXJlc3VtZS1vcmRlcicpO1xuICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgndmFsdWUnLCBkYXRhLmRhdGEucHVyY2hhc2VfdW5pdHNbMF0uY3VzdG9tX2lkKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGZvcm1TZWxlY3RvcikuYXBwZW5kKGlucHV0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5kYXRhLmlkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNyZWF0ZU9yZGVyLFxuICAgICAgICAgICAgb25BcHByb3ZlOm9uQXBwcm92ZSh0aGlzLCB0aGlzLmVycm9ySGFuZGxlciwgdGhpcy5zcGlubmVyKSxcbiAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3Bpbm5lci51bmJsb2NrKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25FcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLmdlbmVyaWNFcnJvcigpO1xuICAgICAgICAgICAgICAgIHNwaW5uZXIudW5ibG9jaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDaGVja291dEFjdGlvbkhhbmRsZXI7XG4iLCJjb25zdCBnZXRFbGVtZW50ID0gKHNlbGVjdG9yT3JFbGVtZW50KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBzZWxlY3Rvck9yRWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3JPckVsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0b3JPckVsZW1lbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBpc1Zpc2libGUgPSAoZWxlbWVudCkgPT4ge1xuICAgIHJldHVybiAhIShlbGVtZW50Lm9mZnNldFdpZHRoIHx8IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpO1xufVxuXG5leHBvcnQgY29uc3Qgc2V0VmlzaWJsZSA9IChzZWxlY3Rvck9yRWxlbWVudCwgc2hvdywgaW1wb3J0YW50ID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gZ2V0RWxlbWVudChzZWxlY3Rvck9yRWxlbWVudCk7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBlbGVtZW50LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2Rpc3BsYXknKTtcblxuICAgIGlmICghc2hvdykge1xuICAgICAgICBpZiAoY3VycmVudFZhbHVlID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJ2Rpc3BsYXknLCAnbm9uZScsIGltcG9ydGFudCA/ICdpbXBvcnRhbnQnIDogJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjdXJyZW50VmFsdWUgPT09ICdub25lJykge1xuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3RpbGwgbm90IHZpc2libGUgKGlmIHNvbWV0aGluZyBlbHNlIGFkZGVkIGRpc3BsYXk6IG5vbmUgaW4gQ1NTKVxuICAgICAgICBpZiAoIWlzVmlzaWJsZShlbGVtZW50KSkge1xuICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnZGlzcGxheScsICdibG9jaycpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGhpZGUgPSAoc2VsZWN0b3JPckVsZW1lbnQsIGltcG9ydGFudCA9IGZhbHNlKSA9PiB7XG4gICAgc2V0VmlzaWJsZShzZWxlY3Rvck9yRWxlbWVudCwgZmFsc2UsIGltcG9ydGFudCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2hvdyA9IChzZWxlY3Rvck9yRWxlbWVudCkgPT4ge1xuICAgIHNldFZpc2libGUoc2VsZWN0b3JPckVsZW1lbnQsIHRydWUpO1xufTtcbiIsImltcG9ydCBFcnJvckhhbmRsZXIgZnJvbSAnLi4vRXJyb3JIYW5kbGVyJztcbmltcG9ydCBDaGVja291dEFjdGlvbkhhbmRsZXIgZnJvbSAnLi4vQWN0aW9uSGFuZGxlci9DaGVja291dEFjdGlvbkhhbmRsZXInO1xuaW1wb3J0IHsgc2V0VmlzaWJsZSB9IGZyb20gJy4uL0hlbHBlci9IaWRpbmcnO1xuaW1wb3J0IHtcbiAgICBnZXRDdXJyZW50UGF5bWVudE1ldGhvZCxcbiAgICBpc1NhdmVkQ2FyZFNlbGVjdGVkLCBPUkRFUl9CVVRUT05fU0VMRUNUT1IsXG4gICAgUGF5bWVudE1ldGhvZHNcbn0gZnJvbSBcIi4uL0hlbHBlci9DaGVja291dE1ldGhvZFN0YXRlXCI7XG5cbmNsYXNzIENoZWNrb3V0Qm9vdHN0YXAge1xuICAgIGNvbnN0cnVjdG9yKGdhdGV3YXksIHJlbmRlcmVyLCBtZXNzYWdlcywgc3Bpbm5lcikge1xuICAgICAgICB0aGlzLmdhdGV3YXkgPSBnYXRld2F5O1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMubWVzc2FnZXMgPSBtZXNzYWdlcztcbiAgICAgICAgdGhpcy5zcGlubmVyID0gc3Bpbm5lcjtcblxuICAgICAgICB0aGlzLnN0YW5kYXJkT3JkZXJCdXR0b25TZWxlY3RvciA9IE9SREVSX0JVVFRPTl9TRUxFQ1RPUjtcblxuICAgICAgICB0aGlzLmJ1dHRvbkNoYW5nZU9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKGVsKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVVpKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluaXQoKSB7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG5cbiAgICAgICAgLy8gVW5zZWxlY3Qgc2F2ZWQgY2FyZC5cbiAgICAgICAgLy8gV0Mgc2F2ZXMgZm9ybSB2YWx1ZXMsIHNvIHdpdGggb3VyIGN1cnJlbnQgVUkgaXQgd291bGQgYmUgYSBiaXQgd2VpcmRcbiAgICAgICAgLy8gaWYgdGhlIHVzZXIgcGFpZCB3aXRoIHNhdmVkLCB0aGVuIGFmdGVyIHNvbWUgdGltZSB0cmllcyB0byBwYXkgYWdhaW4sXG4gICAgICAgIC8vIGJ1dCB3YW50cyB0byBlbnRlciBhIG5ldyBjYXJkLCBhbmQgdG8gZG8gdGhhdCB0aGV5IGhhdmUgdG8gY2hvb3NlIOKAnFNlbGVjdCBwYXltZW504oCdIGluIHRoZSBsaXN0LlxuICAgICAgICBqUXVlcnkoJyNzYXZlZC1jcmVkaXQtY2FyZCcpLnZhbChqUXVlcnkoJyNzYXZlZC1jcmVkaXQtY2FyZCBvcHRpb246Zmlyc3QnKS52YWwoKSk7XG5cbiAgICAgICAgalF1ZXJ5KGRvY3VtZW50LmJvZHkpLm9uKCd1cGRhdGVkX2NoZWNrb3V0JywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXIoKVxuICAgICAgICB9KTtcblxuICAgICAgICBqUXVlcnkoZG9jdW1lbnQuYm9keSkub24oJ3VwZGF0ZWRfY2hlY2tvdXQgcGF5bWVudF9tZXRob2Rfc2VsZWN0ZWQnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVVpKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGpRdWVyeShkb2N1bWVudCkub24oJ2hvc3RlZF9maWVsZHNfbG9hZGVkJywgKCkgPT4ge1xuICAgICAgICAgICAgalF1ZXJ5KCcjc2F2ZWQtY3JlZGl0LWNhcmQnKS5vbignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVWkoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlVWkoKTtcbiAgICB9XG5cbiAgICBzaG91bGRSZW5kZXIoKSB7XG4gICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZ2F0ZXdheS5idXR0b24uY2FuY2VsX3dyYXBwZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmdhdGV3YXkuYnV0dG9uLndyYXBwZXIpICE9PSBudWxsIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5nYXRld2F5Lmhvc3RlZF9maWVsZHMud3JhcHBlcikgIT09IG51bGw7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkUmVuZGVyKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmdhdGV3YXkuaG9zdGVkX2ZpZWxkcy53cmFwcGVyICsgJz5kaXYnKSkge1xuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmdhdGV3YXkuaG9zdGVkX2ZpZWxkcy53cmFwcGVyICsgJz5kaXYnKS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJycpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGlvbkhhbmRsZXIgPSBuZXcgQ2hlY2tvdXRBY3Rpb25IYW5kbGVyKFxuICAgICAgICAgICAgUGF5UGFsQ29tbWVyY2VHYXRld2F5LFxuICAgICAgICAgICAgbmV3IEVycm9ySGFuZGxlcih0aGlzLmdhdGV3YXkubGFiZWxzLmVycm9yLmdlbmVyaWMpLFxuICAgICAgICAgICAgdGhpcy5zcGlubmVyXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW5kZXIoXG4gICAgICAgICAgICBhY3Rpb25IYW5kbGVyLmNvbmZpZ3VyYXRpb24oKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuYnV0dG9uQ2hhbmdlT2JzZXJ2ZXIub2JzZXJ2ZShcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5zdGFuZGFyZE9yZGVyQnV0dG9uU2VsZWN0b3IpLFxuICAgICAgICAgICAge2F0dHJpYnV0ZXM6IHRydWV9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdXBkYXRlVWkoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYXltZW50TWV0aG9kID0gZ2V0Q3VycmVudFBheW1lbnRNZXRob2QoKTtcbiAgICAgICAgY29uc3QgaXNQYXlwYWwgPSBjdXJyZW50UGF5bWVudE1ldGhvZCA9PT0gUGF5bWVudE1ldGhvZHMuUEFZUEFMO1xuICAgICAgICBjb25zdCBpc0NhcmQgPSBjdXJyZW50UGF5bWVudE1ldGhvZCA9PT0gUGF5bWVudE1ldGhvZHMuQ0FSRFM7XG4gICAgICAgIGNvbnN0IGlzU2VwYXJhdGVCdXR0b25HYXRld2F5ID0gW1BheW1lbnRNZXRob2RzLkNBUkRfQlVUVE9OXS5pbmNsdWRlcyhjdXJyZW50UGF5bWVudE1ldGhvZCk7XG4gICAgICAgIGNvbnN0IGlzU2F2ZWRDYXJkID0gaXNDYXJkICYmIGlzU2F2ZWRDYXJkU2VsZWN0ZWQoKTtcbiAgICAgICAgY29uc3QgaXNOb3RPdXJHYXRld2F5ID0gIWlzUGF5cGFsICYmICFpc0NhcmQgJiYgIWlzU2VwYXJhdGVCdXR0b25HYXRld2F5O1xuICAgICAgICBjb25zdCBpc0ZyZWVUcmlhbCA9IFBheVBhbENvbW1lcmNlR2F0ZXdheS5pc19mcmVlX3RyaWFsX2NhcnQ7XG4gICAgICAgIGNvbnN0IGhhc1ZhdWx0ZWRQYXlwYWwgPSBQYXlQYWxDb21tZXJjZUdhdGV3YXkudmF1bHRlZF9wYXlwYWxfZW1haWwgIT09ICcnO1xuXG4gICAgICAgIGNvbnN0IHBheXBhbEJ1dHRvbldyYXBwZXJzID0ge1xuICAgICAgICAgICAgLi4uT2JqZWN0LmVudHJpZXMoUGF5UGFsQ29tbWVyY2VHYXRld2F5LnNlcGFyYXRlX2J1dHRvbnMpXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgocmVzdWx0LCBbaywgZGF0YV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsuLi5yZXN1bHQsIFtkYXRhLmlkXTogZGF0YS53cmFwcGVyfVxuICAgICAgICAgICAgICAgIH0sIHt9KSxcbiAgICAgICAgfTtcblxuICAgICAgICBzZXRWaXNpYmxlKHRoaXMuc3RhbmRhcmRPcmRlckJ1dHRvblNlbGVjdG9yLCAgKGlzUGF5cGFsICYmIGlzRnJlZVRyaWFsICYmIGhhc1ZhdWx0ZWRQYXlwYWwpIHx8IGlzTm90T3VyR2F0ZXdheSB8fCBpc1NhdmVkQ2FyZCwgdHJ1ZSk7XG4gICAgICAgIHNldFZpc2libGUoJy5wcGNwLXZhdWx0ZWQtcGF5cGFsLWRldGFpbHMnLCBpc1BheXBhbCk7XG4gICAgICAgIHNldFZpc2libGUodGhpcy5nYXRld2F5LmJ1dHRvbi53cmFwcGVyLCBpc1BheXBhbCAmJiAhKGlzRnJlZVRyaWFsICYmIGhhc1ZhdWx0ZWRQYXlwYWwpKTtcbiAgICAgICAgc2V0VmlzaWJsZSh0aGlzLmdhdGV3YXkubWVzc2FnZXMud3JhcHBlciwgaXNQYXlwYWwgJiYgIWlzRnJlZVRyaWFsKTtcbiAgICAgICAgc2V0VmlzaWJsZSh0aGlzLmdhdGV3YXkuaG9zdGVkX2ZpZWxkcy53cmFwcGVyLCBpc0NhcmQgJiYgIWlzU2F2ZWRDYXJkKTtcbiAgICAgICAgZm9yIChjb25zdCBbZ2F0ZXdheUlkLCB3cmFwcGVyXSBvZiBPYmplY3QuZW50cmllcyhwYXlwYWxCdXR0b25XcmFwcGVycykpIHtcbiAgICAgICAgICAgIHNldFZpc2libGUod3JhcHBlciwgZ2F0ZXdheUlkID09PSBjdXJyZW50UGF5bWVudE1ldGhvZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNQYXlwYWwgJiYgIWlzRnJlZVRyaWFsKSB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzLnJlbmRlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzQ2FyZCkge1xuICAgICAgICAgICAgaWYgKGlzU2F2ZWRDYXJkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlQ3JlZGl0Q2FyZEZpZWxkcygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZUNyZWRpdENhcmRGaWVsZHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRpc2FibGVDcmVkaXRDYXJkRmllbGRzKCkge1xuICAgICAgICBqUXVlcnkoJ2xhYmVsW2Zvcj1cInBwY3AtY3JlZGl0LWNhcmQtZ2F0ZXdheS1jYXJkLW51bWJlclwiXScpLmFkZENsYXNzKCdwcGNwLWNyZWRpdC1jYXJkLWdhdGV3YXktZm9ybS1maWVsZC1kaXNhYmxlZCcpXG4gICAgICAgIGpRdWVyeSgnI3BwY3AtY3JlZGl0LWNhcmQtZ2F0ZXdheS1jYXJkLW51bWJlcicpLmFkZENsYXNzKCdwcGNwLWNyZWRpdC1jYXJkLWdhdGV3YXktZm9ybS1maWVsZC1kaXNhYmxlZCcpXG4gICAgICAgIGpRdWVyeSgnbGFiZWxbZm9yPVwicHBjcC1jcmVkaXQtY2FyZC1nYXRld2F5LWNhcmQtZXhwaXJ5XCJdJykuYWRkQ2xhc3MoJ3BwY3AtY3JlZGl0LWNhcmQtZ2F0ZXdheS1mb3JtLWZpZWxkLWRpc2FibGVkJylcbiAgICAgICAgalF1ZXJ5KCcjcHBjcC1jcmVkaXQtY2FyZC1nYXRld2F5LWNhcmQtZXhwaXJ5JykuYWRkQ2xhc3MoJ3BwY3AtY3JlZGl0LWNhcmQtZ2F0ZXdheS1mb3JtLWZpZWxkLWRpc2FibGVkJylcbiAgICAgICAgalF1ZXJ5KCdsYWJlbFtmb3I9XCJwcGNwLWNyZWRpdC1jYXJkLWdhdGV3YXktY2FyZC1jdmNcIl0nKS5hZGRDbGFzcygncHBjcC1jcmVkaXQtY2FyZC1nYXRld2F5LWZvcm0tZmllbGQtZGlzYWJsZWQnKVxuICAgICAgICBqUXVlcnkoJyNwcGNwLWNyZWRpdC1jYXJkLWdhdGV3YXktY2FyZC1jdmMnKS5hZGRDbGFzcygncHBjcC1jcmVkaXQtY2FyZC1nYXRld2F5LWZvcm0tZmllbGQtZGlzYWJsZWQnKVxuICAgICAgICBqUXVlcnkoJ2xhYmVsW2Zvcj1cInZhdWx0XCJdJykuYWRkQ2xhc3MoJ3BwY3AtY3JlZGl0LWNhcmQtZ2F0ZXdheS1mb3JtLWZpZWxkLWRpc2FibGVkJylcbiAgICAgICAgalF1ZXJ5KCcjcHBjcC1jcmVkaXQtY2FyZC12YXVsdCcpLmFkZENsYXNzKCdwcGNwLWNyZWRpdC1jYXJkLWdhdGV3YXktZm9ybS1maWVsZC1kaXNhYmxlZCcpXG4gICAgICAgIGpRdWVyeSgnI3BwY3AtY3JlZGl0LWNhcmQtdmF1bHQnKS5hdHRyKFwiZGlzYWJsZWRcIiwgdHJ1ZSlcbiAgICAgICAgdGhpcy5yZW5kZXJlci5kaXNhYmxlQ3JlZGl0Q2FyZEZpZWxkcygpXG4gICAgfVxuXG4gICAgZW5hYmxlQ3JlZGl0Q2FyZEZpZWxkcygpIHtcbiAgICAgICAgalF1ZXJ5KCdsYWJlbFtmb3I9XCJwcGNwLWNyZWRpdC1jYXJkLWdhdGV3YXktY2FyZC1udW1iZXJcIl0nKS5yZW1vdmVDbGFzcygncHBjcC1jcmVkaXQtY2FyZC1nYXRld2F5LWZvcm0tZmllbGQtZGlzYWJsZWQnKVxuICAgICAgICBqUXVlcnkoJyNwcGNwLWNyZWRpdC1jYXJkLWdhdGV3YXktY2FyZC1udW1iZXInKS5yZW1vdmVDbGFzcygncHBjcC1jcmVkaXQtY2FyZC1nYXRld2F5LWZvcm0tZmllbGQtZGlzYWJsZWQnKVxuICAgICAgICBqUXVlcnkoJ2xhYmVsW2Zvcj1cInBwY3AtY3JlZGl0LWNhcmQtZ2F0ZXdheS1jYXJkLWV4cGlyeVwiXScpLnJlbW92ZUNsYXNzKCdwcGNwLWNyZWRpdC1jYXJkLWdhdGV3YXktZm9ybS1maWVsZC1kaXNhYmxlZCcpXG4gICAgICAgIGpRdWVyeSgnI3BwY3AtY3JlZGl0LWNhcmQtZ2F0ZXdheS1jYXJkLWV4cGlyeScpLnJlbW92ZUNsYXNzKCdwcGNwLWNyZWRpdC1jYXJkLWdhdGV3YXktZm9ybS1maWVsZC1kaXNhYmxlZCcpXG4gICAgICAgIGpRdWVyeSgnbGFiZWxbZm9yPVwicHBjcC1jcmVkaXQtY2FyZC1nYXRld2F5LWNhcmQtY3ZjXCJdJykucmVtb3ZlQ2xhc3MoJ3BwY3AtY3JlZGl0LWNhcmQtZ2F0ZXdheS1mb3JtLWZpZWxkLWRpc2FibGVkJylcbiAgICAgICAgalF1ZXJ5KCcjcHBjcC1jcmVkaXQtY2FyZC1nYXRld2F5LWNhcmQtY3ZjJykucmVtb3ZlQ2xhc3MoJ3BwY3AtY3JlZGl0LWNhcmQtZ2F0ZXdheS1mb3JtLWZpZWxkLWRpc2FibGVkJylcbiAgICAgICAgalF1ZXJ5KCdsYWJlbFtmb3I9XCJ2YXVsdFwiXScpLnJlbW92ZUNsYXNzKCdwcGNwLWNyZWRpdC1jYXJkLWdhdGV3YXktZm9ybS1maWVsZC1kaXNhYmxlZCcpXG4gICAgICAgIGpRdWVyeSgnI3BwY3AtY3JlZGl0LWNhcmQtdmF1bHQnKS5yZW1vdmVDbGFzcygncHBjcC1jcmVkaXQtY2FyZC1nYXRld2F5LWZvcm0tZmllbGQtZGlzYWJsZWQnKVxuICAgICAgICBqUXVlcnkoJyNwcGNwLWNyZWRpdC1jYXJkLXZhdWx0JykuYXR0cihcImRpc2FibGVkXCIsIGZhbHNlKVxuICAgICAgICB0aGlzLnJlbmRlcmVyLmVuYWJsZUNyZWRpdENhcmRGaWVsZHMoKVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tvdXRCb290c3RhcFxuIiwiZXhwb3J0IGNvbnN0IGlzQ2hhbmdlUGF5bWVudFBhZ2UgPSAoKSA9PiB7XG4gICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKVxuICAgIHJldHVybiB1cmxQYXJhbXMuaGFzKCdjaGFuZ2VfcGF5bWVudF9tZXRob2QnKTtcbn1cbiIsImltcG9ydCBDaGVja291dEJvb3RzdGFwIGZyb20gJy4vQ2hlY2tvdXRCb290c3RhcCdcbmltcG9ydCB7aXNDaGFuZ2VQYXltZW50UGFnZX0gZnJvbSBcIi4uL0hlbHBlci9TdWJzY3JpcHRpb25zXCI7XG5cbmNsYXNzIFBheU5vd0Jvb3RzdHJhcCBleHRlbmRzIENoZWNrb3V0Qm9vdHN0YXAge1xuICAgIGNvbnN0cnVjdG9yKGdhdGV3YXksIHJlbmRlcmVyLCBtZXNzYWdlcywgc3Bpbm5lcikge1xuICAgICAgICBzdXBlcihnYXRld2F5LCByZW5kZXJlciwgbWVzc2FnZXMsIHNwaW5uZXIpXG4gICAgfVxuXG4gICAgdXBkYXRlVWkoKSB7XG4gICAgICAgIGlmIChpc0NoYW5nZVBheW1lbnRQYWdlKCkpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIudXBkYXRlVWkoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBheU5vd0Jvb3RzdHJhcDtcbiIsImltcG9ydCBtZXJnZSBmcm9tIFwiZGVlcG1lcmdlXCI7XG5cbmNsYXNzIFJlbmRlcmVyIHtcbiAgICBjb25zdHJ1Y3RvcihjcmVkaXRDYXJkUmVuZGVyZXIsIGRlZmF1bHRTZXR0aW5ncywgb25TbWFydEJ1dHRvbkNsaWNrLCBvblNtYXJ0QnV0dG9uc0luaXQpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0U2V0dGluZ3MgPSBkZWZhdWx0U2V0dGluZ3M7XG4gICAgICAgIHRoaXMuY3JlZGl0Q2FyZFJlbmRlcmVyID0gY3JlZGl0Q2FyZFJlbmRlcmVyO1xuICAgICAgICB0aGlzLm9uU21hcnRCdXR0b25DbGljayA9IG9uU21hcnRCdXR0b25DbGljaztcbiAgICAgICAgdGhpcy5vblNtYXJ0QnV0dG9uc0luaXQgPSBvblNtYXJ0QnV0dG9uc0luaXQ7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlZFNvdXJjZXMgPSBuZXcgU2V0KCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKGNvbnRleHRDb25maWcsIHNldHRpbmdzT3ZlcnJpZGUgPSB7fSkge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IG1lcmdlKHRoaXMuZGVmYXVsdFNldHRpbmdzLCBzZXR0aW5nc092ZXJyaWRlKTtcblxuICAgICAgICBjb25zdCBlbmFibGVkU2VwYXJhdGVHYXRld2F5cyA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhcbiAgICAgICAgICAgIHNldHRpbmdzLnNlcGFyYXRlX2J1dHRvbnMpLmZpbHRlcigoW3MsIGRhdGFdKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGRhdGEud3JhcHBlcilcbiAgICAgICAgKSk7XG4gICAgICAgIGNvbnN0IGhhc0VuYWJsZWRTZXBhcmF0ZUdhdGV3YXlzID0gT2JqZWN0LmtleXMoZW5hYmxlZFNlcGFyYXRlR2F0ZXdheXMpLmxlbmd0aCAhPT0gMDtcblxuICAgICAgICBpZiAoIWhhc0VuYWJsZWRTZXBhcmF0ZUdhdGV3YXlzKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckJ1dHRvbnMoXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MuYnV0dG9uLndyYXBwZXIsXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MuYnV0dG9uLnN0eWxlLFxuICAgICAgICAgICAgICAgIGNvbnRleHRDb25maWcsXG4gICAgICAgICAgICAgICAgaGFzRW5hYmxlZFNlcGFyYXRlR2F0ZXdheXNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyByZW5kZXIgZWFjaCBidXR0b24gc2VwYXJhdGVseVxuICAgICAgICAgICAgZm9yIChjb25zdCBmdW5kaW5nU291cmNlIG9mIHBheXBhbC5nZXRGdW5kaW5nU291cmNlcygpLmZpbHRlcihzID0+ICEocyBpbiBlbmFibGVkU2VwYXJhdGVHYXRld2F5cykpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN0eWxlID0gc2V0dGluZ3MuYnV0dG9uLnN0eWxlO1xuICAgICAgICAgICAgICAgIGlmIChmdW5kaW5nU291cmNlICE9PSAncGF5cGFsJykge1xuICAgICAgICAgICAgICAgICAgICBzdHlsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlOiBzdHlsZS5zaGFwZSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckJ1dHRvbnMoXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmJ1dHRvbi53cmFwcGVyLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgaGFzRW5hYmxlZFNlcGFyYXRlR2F0ZXdheXMsXG4gICAgICAgICAgICAgICAgICAgIGZ1bmRpbmdTb3VyY2VcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jcmVkaXRDYXJkUmVuZGVyZXIucmVuZGVyKHNldHRpbmdzLmhvc3RlZF9maWVsZHMud3JhcHBlciwgY29udGV4dENvbmZpZyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBbZnVuZGluZ1NvdXJjZSwgZGF0YV0gb2YgT2JqZWN0LmVudHJpZXMoZW5hYmxlZFNlcGFyYXRlR2F0ZXdheXMpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckJ1dHRvbnMoXG4gICAgICAgICAgICAgICAgZGF0YS53cmFwcGVyLFxuICAgICAgICAgICAgICAgIGRhdGEuc3R5bGUsXG4gICAgICAgICAgICAgICAgY29udGV4dENvbmZpZyxcbiAgICAgICAgICAgICAgICBoYXNFbmFibGVkU2VwYXJhdGVHYXRld2F5cyxcbiAgICAgICAgICAgICAgICBmdW5kaW5nU291cmNlXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyQnV0dG9ucyh3cmFwcGVyLCBzdHlsZSwgY29udGV4dENvbmZpZywgaGFzRW5hYmxlZFNlcGFyYXRlR2F0ZXdheXMsIGZ1bmRpbmdTb3VyY2UgPSBudWxsKSB7XG4gICAgICAgIGlmICghIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iod3JhcHBlcikgfHwgdGhpcy5pc0FscmVhZHlSZW5kZXJlZCh3cmFwcGVyLCBmdW5kaW5nU291cmNlLCBoYXNFbmFibGVkU2VwYXJhdGVHYXRld2F5cykgfHwgJ3VuZGVmaW5lZCcgPT09IHR5cGVvZiBwYXlwYWwuQnV0dG9ucyApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmdW5kaW5nU291cmNlKSB7XG4gICAgICAgICAgICBjb250ZXh0Q29uZmlnLmZ1bmRpbmdTb3VyY2UgPSBmdW5kaW5nU291cmNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnRuID0gcGF5cGFsLkJ1dHRvbnMoe1xuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICAuLi5jb250ZXh0Q29uZmlnLFxuICAgICAgICAgICAgb25DbGljazogdGhpcy5vblNtYXJ0QnV0dG9uQ2xpY2ssXG4gICAgICAgICAgICBvbkluaXQ6IHRoaXMub25TbWFydEJ1dHRvbnNJbml0LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFidG4uaXNFbGlnaWJsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBidG4ucmVuZGVyKHdyYXBwZXIpO1xuXG4gICAgICAgIHRoaXMucmVuZGVyZWRTb3VyY2VzLmFkZCh3cmFwcGVyICsgZnVuZGluZ1NvdXJjZSA/PyAnJyk7XG4gICAgfVxuXG4gICAgaXNBbHJlYWR5UmVuZGVyZWQod3JhcHBlciwgZnVuZGluZ1NvdXJjZSwgaGFzRW5hYmxlZFNlcGFyYXRlR2F0ZXdheXMpIHtcbiAgICAgICAgLy8gU2ltcGx5IGNoZWNrIHRoYXQgaGFzIGNoaWxkIG5vZGVzIHdoZW4gd2UgZG8gbm90IG5lZWQgdG8gcmVuZGVyIGJ1dHRvbnMgc2VwYXJhdGVseSxcbiAgICAgICAgLy8gdGhpcyB3aWxsIHJlZHVjZSB0aGUgcmlzayBvZiBicmVha2luZyB3aXRoIGRpZmZlcmVudCB0aGVtZXMvcGx1Z2luc1xuICAgICAgICAvLyBhbmQgb24gdGhlIGNhcnQgcGFnZSAod2hlcmUgd2UgYWxzbyBkbyBub3QgbmVlZCB0byByZW5kZXIgc2VwYXJhdGVseSksIHdoaWNoIG1heSBmdWxseSByZWxvYWQgdGhpcyBwYXJ0IG9mIHRoZSBwYWdlLlxuICAgICAgICAvLyBJZGVhbGx5IHdlIHNob3VsZCBhbHNvIGZpbmQgYSB3YXkgdG8gZGV0ZWN0IHN1Y2ggZnVsbCByZWxvYWRzIGFuZCByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcga2V5cyBmcm9tIHRoZSBzZXQuXG4gICAgICAgIGlmICghaGFzRW5hYmxlZFNlcGFyYXRlR2F0ZXdheXMpIHtcbiAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHdyYXBwZXIpLmhhc0NoaWxkTm9kZXMoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlZFNvdXJjZXMuaGFzKHdyYXBwZXIgKyBmdW5kaW5nU291cmNlID8/ICcnKTtcbiAgICB9XG5cbiAgICBoaWRlQnV0dG9ucyhlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGRvbUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsZW1lbnQpO1xuICAgICAgICBpZiAoISBkb21FbGVtZW50ICkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGRvbUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc2hvd0J1dHRvbnMoZWxlbWVudCkge1xuICAgICAgICBjb25zdCBkb21FbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbGVtZW50KTtcbiAgICAgICAgaWYgKCEgZG9tRWxlbWVudCApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBkb21FbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBkaXNhYmxlQ3JlZGl0Q2FyZEZpZWxkcygpIHtcbiAgICAgICAgdGhpcy5jcmVkaXRDYXJkUmVuZGVyZXIuZGlzYWJsZUZpZWxkcygpO1xuICAgIH1cblxuICAgIGVuYWJsZUNyZWRpdENhcmRGaWVsZHMoKSB7XG4gICAgICAgIHRoaXMuY3JlZGl0Q2FyZFJlbmRlcmVyLmVuYWJsZUZpZWxkcygpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVuZGVyZXI7XG4iLCJjb25zdCBkY2NJbnB1dEZhY3RvcnkgPSAob3JpZ2luYWwpID0+IHtcbiAgICBjb25zdCBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvcmlnaW5hbCk7XG4gICAgY29uc3QgbmV3RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblxuICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKCdpZCcsIG9yaWdpbmFsLmlkKTtcbiAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBvcmlnaW5hbC5jbGFzc05hbWUpO1xuXG4gICAgT2JqZWN0LnZhbHVlcyhzdHlsZXMpLmZvckVhY2goIChwcm9wKSA9PiB7XG4gICAgICAgIGlmICghIHN0eWxlc1twcm9wXSB8fCAhIGlzTmFOKHByb3ApIHx8IHByb3AgPT09ICdiYWNrZ3JvdW5kLWltYWdlJyApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBuZXdFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHByb3AsJycgKyBzdHlsZXNbcHJvcF0pO1xuICAgIH0pO1xuICAgIHJldHVybiBuZXdFbGVtZW50O1xufVxuXG5leHBvcnQgZGVmYXVsdCBkY2NJbnB1dEZhY3Rvcnk7XG4iLCJpbXBvcnQgZGNjSW5wdXRGYWN0b3J5IGZyb20gXCIuLi9IZWxwZXIvRGNjSW5wdXRGYWN0b3J5XCI7XG5pbXBvcnQge3Nob3d9IGZyb20gXCIuLi9IZWxwZXIvSGlkaW5nXCI7XG5pbXBvcnQgUHJvZHVjdCBmcm9tIFwiLi4vRW50aXR5L1Byb2R1Y3RcIjtcblxuY2xhc3MgQ3JlZGl0Q2FyZFJlbmRlcmVyIHtcblxuICAgIGNvbnN0cnVjdG9yKGRlZmF1bHRDb25maWcsIGVycm9ySGFuZGxlciwgc3Bpbm5lcikge1xuICAgICAgICB0aGlzLmRlZmF1bHRDb25maWcgPSBkZWZhdWx0Q29uZmlnO1xuICAgICAgICB0aGlzLmVycm9ySGFuZGxlciA9IGVycm9ySGFuZGxlcjtcbiAgICAgICAgdGhpcy5zcGlubmVyID0gc3Bpbm5lcjtcbiAgICAgICAgdGhpcy5jYXJkVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mb3JtVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jdXJyZW50SG9zdGVkRmllbGRzSW5zdGFuY2UgPSBudWxsO1xuICAgIH1cblxuICAgIHJlbmRlcih3cmFwcGVyLCBjb250ZXh0Q29uZmlnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRDb25maWcuY29udGV4dCAhPT0gJ2NoZWNrb3V0J1xuICAgICAgICAgICAgICAgICYmIHRoaXMuZGVmYXVsdENvbmZpZy5jb250ZXh0ICE9PSAncGF5LW5vdydcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHx8IHdyYXBwZXIgPT09IG51bGxcbiAgICAgICAgICAgIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iod3JhcHBlcikgPT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIHBheXBhbC5Ib3N0ZWRGaWVsZHMgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICB8fCAhIHBheXBhbC5Ib3N0ZWRGaWVsZHMuaXNFbGlnaWJsZSgpXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHdyYXBwZXIpO1xuICAgICAgICAgICAgd3JhcHBlckVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh3cmFwcGVyRWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidXR0b25TZWxlY3RvciA9IHdyYXBwZXIgKyAnIGJ1dHRvbic7XG5cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEhvc3RlZEZpZWxkc0luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRIb3N0ZWRGaWVsZHNJbnN0YW5jZS50ZWFyZG93bigpXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiBjb25zb2xlLmVycm9yKGBIb3N0ZWQgZmllbGRzIHRlYXJkb3duIGVycm9yOiAke2Vycn1gKSk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRIb3N0ZWRGaWVsZHNJbnN0YW5jZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnYXRlV2F5Qm94ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnBheW1lbnRfYm94LnBheW1lbnRfbWV0aG9kX3BwY3AtY3JlZGl0LWNhcmQtZ2F0ZXdheScpO1xuICAgICAgICBpZighIGdhdGVXYXlCb3gpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9sZERpc3BsYXlTdHlsZSA9IGdhdGVXYXlCb3guc3R5bGUuZGlzcGxheTtcbiAgICAgICAgZ2F0ZVdheUJveC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcblxuICAgICAgICBjb25zdCBoaWRlRGNjR2F0ZXdheSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwcGNwLWhpZGUtZGNjJyk7XG4gICAgICAgIGlmIChoaWRlRGNjR2F0ZXdheSkge1xuICAgICAgICAgICAgaGlkZURjY0dhdGV3YXkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoaWRlRGNjR2F0ZXdheSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjYXJkTnVtYmVyRmllbGQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjcHBjcC1jcmVkaXQtY2FyZC1nYXRld2F5LWNhcmQtbnVtYmVyJyk7XG5cbiAgICAgICAgY29uc3Qgc3R5bGVzUmF3ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2FyZE51bWJlckZpZWxkKTtcbiAgICAgICAgbGV0IHN0eWxlcyA9IHt9O1xuICAgICAgICBPYmplY3QudmFsdWVzKHN0eWxlc1JhdykuZm9yRWFjaCggKHByb3ApID0+IHtcbiAgICAgICAgICAgIGlmICghIHN0eWxlc1Jhd1twcm9wXSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0eWxlc1twcm9wXSA9ICcnICsgc3R5bGVzUmF3W3Byb3BdO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBjYXJkTnVtYmVyID0gZGNjSW5wdXRGYWN0b3J5KGNhcmROdW1iZXJGaWVsZCk7XG4gICAgICAgIGNhcmROdW1iZXJGaWVsZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChjYXJkTnVtYmVyLCBjYXJkTnVtYmVyRmllbGQpO1xuXG4gICAgICAgIGNvbnN0IGNhcmRFeHBpcnlGaWVsZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwcGNwLWNyZWRpdC1jYXJkLWdhdGV3YXktY2FyZC1leHBpcnknKTtcbiAgICAgICAgY29uc3QgY2FyZEV4cGlyeSA9IGRjY0lucHV0RmFjdG9yeShjYXJkRXhwaXJ5RmllbGQpO1xuICAgICAgICBjYXJkRXhwaXJ5RmllbGQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoY2FyZEV4cGlyeSwgY2FyZEV4cGlyeUZpZWxkKTtcblxuICAgICAgICBjb25zdCBjYXJkQ29kZUZpZWxkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3BwY3AtY3JlZGl0LWNhcmQtZ2F0ZXdheS1jYXJkLWN2YycpO1xuICAgICAgICBjb25zdCBjYXJkQ29kZSA9IGRjY0lucHV0RmFjdG9yeShjYXJkQ29kZUZpZWxkKTtcbiAgICAgICAgY2FyZENvZGVGaWVsZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChjYXJkQ29kZSwgY2FyZENvZGVGaWVsZCk7XG5cbiAgICAgICAgZ2F0ZVdheUJveC5zdHlsZS5kaXNwbGF5ID0gb2xkRGlzcGxheVN0eWxlO1xuXG4gICAgICAgIGNvbnN0IGZvcm1XcmFwcGVyID0gJy5wYXltZW50X2JveCBwYXltZW50X21ldGhvZF9wcGNwLWNyZWRpdC1jYXJkLWdhdGV3YXknO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRDb25maWcuZW5mb3JjZV92YXVsdFxuICAgICAgICAgICAgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihmb3JtV3JhcHBlciArICcgLnBwY3AtY3JlZGl0LWNhcmQtdmF1bHQnKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZm9ybVdyYXBwZXIgKyAnIC5wcGNwLWNyZWRpdC1jYXJkLXZhdWx0JykuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGZvcm1XcmFwcGVyICsgJyAucHBjcC1jcmVkaXQtY2FyZC12YXVsdCcpLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBwYXlwYWwuSG9zdGVkRmllbGRzLnJlbmRlcih7XG4gICAgICAgICAgICBjcmVhdGVPcmRlcjogY29udGV4dENvbmZpZy5jcmVhdGVPcmRlcixcbiAgICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgICAgICdpbnB1dCc6IHN0eWxlc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgICAgIG51bWJlcjoge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcjogJyNwcGNwLWNyZWRpdC1jYXJkLWdhdGV3YXktY2FyZC1udW1iZXInLFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5kZWZhdWx0Q29uZmlnLmhvc3RlZF9maWVsZHMubGFiZWxzLmNyZWRpdF9jYXJkX251bWJlcixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGN2djoge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcjogJyNwcGNwLWNyZWRpdC1jYXJkLWdhdGV3YXktY2FyZC1jdmMnLFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5kZWZhdWx0Q29uZmlnLmhvc3RlZF9maWVsZHMubGFiZWxzLmN2dixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGV4cGlyYXRpb25EYXRlOiB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnI3BwY3AtY3JlZGl0LWNhcmQtZ2F0ZXdheS1jYXJkLWV4cGlyeScsXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmRlZmF1bHRDb25maWcuaG9zdGVkX2ZpZWxkcy5sYWJlbHMubW1feXksXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KS50aGVuKGhvc3RlZEZpZWxkcyA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImhvc3RlZF9maWVsZHNfbG9hZGVkXCIpKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEhvc3RlZEZpZWxkc0luc3RhbmNlID0gaG9zdGVkRmllbGRzO1xuXG4gICAgICAgICAgICBob3N0ZWRGaWVsZHMub24oJ2lucHV0U3VibWl0UmVxdWVzdCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdWJtaXQoY29udGV4dENvbmZpZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGhvc3RlZEZpZWxkcy5vbignY2FyZFR5cGVDaGFuZ2UnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoICEgZXZlbnQuY2FyZHMubGVuZ3RoICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcmRWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkQ2FyZHMgPSB0aGlzLmRlZmF1bHRDb25maWcuaG9zdGVkX2ZpZWxkcy52YWxpZF9jYXJkcztcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmRWYWxpZCA9IHZhbGlkQ2FyZHMuaW5kZXhPZihldmVudC5jYXJkc1swXS50eXBlKSAhPT0gLTE7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLl9jYXJkTnVtYmVyRmlsZWRDTGFzc05hbWVCeUNhcmRUeXBlKGV2ZW50LmNhcmRzWzBdLnR5cGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlY3JlYXRlRWxlbWVudENsYXNzQXR0cmlidXRlKGNhcmROdW1iZXIsIGNhcmROdW1iZXJGaWVsZC5jbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5maWVsZHMubnVtYmVyLmlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FyZE51bWJlci5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGhvc3RlZEZpZWxkcy5vbigndmFsaWRpdHlDaGFuZ2UnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtVmFsaWQgPSBPYmplY3Qua2V5cyhldmVudC5maWVsZHMpLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmZpZWxkc1trZXldLmlzVmFsaWQ7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLl9jYXJkTnVtYmVyRmlsZWRDTGFzc05hbWVCeUNhcmRUeXBlKGV2ZW50LmNhcmRzWzBdLnR5cGUpO1xuICAgICAgICAgICAgICAgIGV2ZW50LmZpZWxkcy5udW1iZXIuaXNWYWxpZFxuICAgICAgICAgICAgICAgICAgICA/IGNhcmROdW1iZXIuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5fcmVjcmVhdGVFbGVtZW50Q2xhc3NBdHRyaWJ1dGUoY2FyZE51bWJlciwgY2FyZE51bWJlckZpZWxkLmNsYXNzTmFtZSk7XG5cbiAgICAgICAgICAgICAgIHRoaXMuZm9ybVZhbGlkID0gZm9ybVZhbGlkO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc2hvdyhidXR0b25TZWxlY3Rvcik7XG5cbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHdyYXBwZXIpLmdldEF0dHJpYnV0ZSgnZGF0YS1wcGNwLXN1YnNjcmliZWQnKSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYnV0dG9uU2VsZWN0b3IpLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgICAgICdjbGljaycsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdWJtaXQoY29udGV4dENvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih3cmFwcGVyKS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcHBjcC1zdWJzY3JpYmVkJywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwYXltZW50X21ldGhvZF9wcGNwLWNyZWRpdC1jYXJkLWdhdGV3YXknKS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgJ2NsaWNrJyxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdsYWJlbFtmb3I9cHBjcC1jcmVkaXQtY2FyZC1nYXRld2F5LWNhcmQtbnVtYmVyXScpLmNsaWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICB9XG5cbiAgICBkaXNhYmxlRmllbGRzKCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50SG9zdGVkRmllbGRzSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEhvc3RlZEZpZWxkc0luc3RhbmNlLnNldEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZTogJ2Rpc2FibGVkJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEhvc3RlZEZpZWxkc0luc3RhbmNlLnNldEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdjdnYnLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZTogJ2Rpc2FibGVkJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEhvc3RlZEZpZWxkc0luc3RhbmNlLnNldEF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdleHBpcmF0aW9uRGF0ZScsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlOiAnZGlzYWJsZWQnXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZW5hYmxlRmllbGRzKCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50SG9zdGVkRmllbGRzSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEhvc3RlZEZpZWxkc0luc3RhbmNlLnJlbW92ZUF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZTogJ2Rpc2FibGVkJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEhvc3RlZEZpZWxkc0luc3RhbmNlLnJlbW92ZUF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdjdnYnLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZTogJ2Rpc2FibGVkJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEhvc3RlZEZpZWxkc0luc3RhbmNlLnJlbW92ZUF0dHJpYnV0ZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdleHBpcmF0aW9uRGF0ZScsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlOiAnZGlzYWJsZWQnXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3N1Ym1pdChjb250ZXh0Q29uZmlnKSB7XG4gICAgICAgIHRoaXMuc3Bpbm5lci5ibG9jaygpO1xuICAgICAgICB0aGlzLmVycm9ySGFuZGxlci5jbGVhcigpO1xuXG4gICAgICAgIGlmICh0aGlzLmZvcm1WYWxpZCAmJiB0aGlzLmNhcmRWYWxpZCkge1xuICAgICAgICAgICAgY29uc3Qgc2F2ZV9jYXJkID0gdGhpcy5kZWZhdWx0Q29uZmlnLmNhbl9zYXZlX3ZhdWx0X3Rva2VuID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgbGV0IHZhdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BwY3AtY3JlZGl0LWNhcmQtdmF1bHQnKSA/XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BwY3AtY3JlZGl0LWNhcmQtdmF1bHQnKS5jaGVja2VkIDogc2F2ZV9jYXJkO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdENvbmZpZy5lbmZvcmNlX3ZhdWx0KSB7XG4gICAgICAgICAgICAgICAgdmF1bHQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29udGluZ2VuY3kgPSB0aGlzLmRlZmF1bHRDb25maWcuaG9zdGVkX2ZpZWxkcy5jb250aW5nZW5jeTtcbiAgICAgICAgICAgIGNvbnN0IGhvc3RlZEZpZWxkc0RhdGEgPSB7XG4gICAgICAgICAgICAgICAgdmF1bHQ6IHZhdWx0XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGNvbnRpbmdlbmN5ICE9PSAnTk9fM0RfU0VDVVJFJykge1xuICAgICAgICAgICAgICAgIGhvc3RlZEZpZWxkc0RhdGEuY29udGluZ2VuY2llcyA9IFtjb250aW5nZW5jeV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRDb25maWcucGF5ZXIpIHtcbiAgICAgICAgICAgICAgICBob3N0ZWRGaWVsZHNEYXRhLmNhcmRob2xkZXJOYW1lID0gdGhpcy5kZWZhdWx0Q29uZmlnLnBheWVyLm5hbWUuZ2l2ZW5fbmFtZSArICcgJyArIHRoaXMuZGVmYXVsdENvbmZpZy5wYXllci5uYW1lLnN1cm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWhvc3RlZEZpZWxkc0RhdGEuY2FyZGhvbGRlck5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdE5hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmlsbGluZ19maXJzdF9uYW1lJykgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmlsbGluZ19maXJzdF9uYW1lJykudmFsdWUgOiAnJztcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0TmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiaWxsaW5nX2xhc3RfbmFtZScpID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JpbGxpbmdfbGFzdF9uYW1lJykudmFsdWUgOiAnJztcblxuICAgICAgICAgICAgICAgIGhvc3RlZEZpZWxkc0RhdGEuY2FyZGhvbGRlck5hbWUgPSBmaXJzdE5hbWUgKyAnICcgKyBsYXN0TmFtZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jdXJyZW50SG9zdGVkRmllbGRzSW5zdGFuY2Uuc3VibWl0KGhvc3RlZEZpZWxkc0RhdGEpLnRoZW4oKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLm9yZGVySUQgPSBwYXlsb2FkLm9yZGVySWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zcGlubmVyLnVuYmxvY2soKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dENvbmZpZy5vbkFwcHJvdmUocGF5bG9hZCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3Bpbm5lci51bmJsb2NrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIuY2xlYXIoKTtcblxuICAgICAgICAgICAgICAgIGlmIChlcnIuZGV0YWlscykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9ySGFuZGxlci5tZXNzYWdlKGVyci5kZXRhaWxzLm1hcChkID0+IGAke2QuaXNzdWV9ICR7ZC5kZXNjcmlwdGlvbn1gKS5qb2luKCc8YnIvPicpLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3Bpbm5lci51bmJsb2NrKCk7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gISB0aGlzLmNhcmRWYWxpZCA/IHRoaXMuZGVmYXVsdENvbmZpZy5ob3N0ZWRfZmllbGRzLmxhYmVscy5jYXJkX25vdF9zdXBwb3J0ZWQgOiB0aGlzLmRlZmF1bHRDb25maWcuaG9zdGVkX2ZpZWxkcy5sYWJlbHMuZmllbGRzX25vdF92YWxpZDtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyLm1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfY2FyZE51bWJlckZpbGVkQ0xhc3NOYW1lQnlDYXJkVHlwZShjYXJkVHlwZSkge1xuICAgICAgICByZXR1cm4gY2FyZFR5cGUgPT09ICdhbWVyaWNhbi1leHByZXNzJyA/ICdhbWV4JyA6IGNhcmRUeXBlLnJlcGxhY2UoJy0nLCAnJyk7XG4gICAgfVxuXG4gICAgX3JlY3JlYXRlRWxlbWVudENsYXNzQXR0cmlidXRlKGVsZW1lbnQsIG5ld0NsYXNzTmFtZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKVxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBuZXdDbGFzc05hbWUpO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IENyZWRpdENhcmRSZW5kZXJlcjtcbiIsImNvbnN0IHN0b3JhZ2VLZXkgPSAncHBjcC1kYXRhLWNsaWVudC1pZCc7XG5cbmNvbnN0IHZhbGlkYXRlVG9rZW4gPSAodG9rZW4sIHVzZXIpID0+IHtcbiAgICBpZiAoISB0b2tlbikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0b2tlbi51c2VyICE9PSB1c2VyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBjb25zdCBpc0V4cGlyZWQgPSBjdXJyZW50VGltZSA+PSB0b2tlbi5leHBpcmF0aW9uICogMTAwMDtcbiAgICByZXR1cm4gISBpc0V4cGlyZWQ7XG59XG5cbmNvbnN0IHN0b3JlZFRva2VuRm9yVXNlciA9ICh1c2VyKSA9PiB7XG4gICAgY29uc3QgdG9rZW4gPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oc3RvcmFnZUtleSkpO1xuICAgIGlmICh2YWxpZGF0ZVRva2VuKHRva2VuLCB1c2VyKSkge1xuICAgICAgICByZXR1cm4gdG9rZW4udG9rZW47XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBzdG9yZVRva2VuID0gKHRva2VuKSA9PiB7XG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShzdG9yYWdlS2V5LCBKU09OLnN0cmluZ2lmeSh0b2tlbikpO1xufVxuXG5jb25zdCBkYXRhQ2xpZW50SWRBdHRyaWJ1dGVIYW5kbGVyID0gKHNjcmlwdCwgY29uZmlnKSA9PiB7XG4gICAgZmV0Y2goY29uZmlnLmVuZHBvaW50LCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBub25jZTogY29uZmlnLm5vbmNlXG4gICAgICAgIH0pXG4gICAgfSkudGhlbigocmVzKT0+e1xuICAgICAgICByZXR1cm4gcmVzLmpzb24oKTtcbiAgICB9KS50aGVuKChkYXRhKT0+e1xuICAgICAgICBjb25zdCBpc1ZhbGlkID0gdmFsaWRhdGVUb2tlbihkYXRhLCBjb25maWcudXNlcik7XG4gICAgICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN0b3JlVG9rZW4oZGF0YSk7XG4gICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ2RhdGEtY2xpZW50LXRva2VuJywgZGF0YS50b2tlbik7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKHNjcmlwdCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRhdGFDbGllbnRJZEF0dHJpYnV0ZUhhbmRsZXI7XG4iLCJjbGFzcyBNZXNzYWdlUmVuZGVyZXIge1xuXG4gICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgaWYgKCEgdGhpcy5zaG91bGRSZW5kZXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcGF5cGFsLk1lc3NhZ2VzKHtcbiAgICAgICAgICAgIGFtb3VudDogdGhpcy5jb25maWcuYW1vdW50LFxuICAgICAgICAgICAgcGxhY2VtZW50OiB0aGlzLmNvbmZpZy5wbGFjZW1lbnQsXG4gICAgICAgICAgICBzdHlsZTogdGhpcy5jb25maWcuc3R5bGVcbiAgICAgICAgfSkucmVuZGVyKHRoaXMuY29uZmlnLndyYXBwZXIpO1xuXG4gICAgICAgIGpRdWVyeShkb2N1bWVudC5ib2R5KS5vbigndXBkYXRlZF9jYXJ0X3RvdGFscycsICgpID0+IHtcbiAgICAgICAgICAgIHBheXBhbC5NZXNzYWdlcyh7XG4gICAgICAgICAgICAgICAgYW1vdW50OiB0aGlzLmNvbmZpZy5hbW91bnQsXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50OiB0aGlzLmNvbmZpZy5wbGFjZW1lbnQsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHRoaXMuY29uZmlnLnN0eWxlXG4gICAgICAgICAgICB9KS5yZW5kZXIodGhpcy5jb25maWcud3JhcHBlcik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbmRlcldpdGhBbW91bnQoYW1vdW50KSB7XG5cbiAgICAgICAgaWYgKCEgdGhpcy5zaG91bGRSZW5kZXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBuZXdXcmFwcGVyLnNldEF0dHJpYnV0ZSgnaWQnLCB0aGlzLmNvbmZpZy53cmFwcGVyLnJlcGxhY2UoJyMnLCAnJykpO1xuXG4gICAgICAgIGNvbnN0IHNpYmxpbmcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuY29uZmlnLndyYXBwZXIpLm5leHRTaWJsaW5nO1xuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuY29uZmlnLndyYXBwZXIpLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmNvbmZpZy53cmFwcGVyKSk7XG4gICAgICAgIHNpYmxpbmcucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUobmV3V3JhcHBlciwgc2libGluZyk7XG4gICAgICAgIHBheXBhbC5NZXNzYWdlcyh7XG4gICAgICAgICAgICBhbW91bnQsXG4gICAgICAgICAgICBwbGFjZW1lbnQ6IHRoaXMuY29uZmlnLnBsYWNlbWVudCxcbiAgICAgICAgICAgIHN0eWxlOiB0aGlzLmNvbmZpZy5zdHlsZVxuICAgICAgICB9KS5yZW5kZXIodGhpcy5jb25maWcud3JhcHBlcik7XG4gICAgfVxuXG4gICAgc2hvdWxkUmVuZGVyKCkge1xuXG4gICAgICAgIGlmICh0eXBlb2YgcGF5cGFsLk1lc3NhZ2VzID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgdGhpcy5jb25maWcud3JhcHBlciA9PT0gJ3VuZGVmaW5lZCcgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmNvbmZpZy53cmFwcGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGhpZGVNZXNzYWdlcygpIHtcbiAgICAgICAgY29uc3QgZG9tRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5jb25maWcud3JhcHBlcik7XG4gICAgICAgIGlmICghIGRvbUVsZW1lbnQgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZG9tRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBNZXNzYWdlUmVuZGVyZXI7XG4iLCJjbGFzcyBTcGlubmVyIHtcblxuICAgIGNvbnN0cnVjdG9yKHRhcmdldCA9ICdmb3JtLndvb2NvbW1lcmNlLWNoZWNrb3V0Jykge1xuICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICB9XG5cbiAgICBzZXRUYXJnZXQodGFyZ2V0KSB7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgIH1cblxuICAgIGJsb2NrKCkge1xuXG4gICAgICAgIGpRdWVyeSggdGhpcy50YXJnZXQgKS5ibG9jayh7XG4gICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgb3ZlcmxheUNTUzoge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjZmZmJyxcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjZcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdW5ibG9jaygpIHtcblxuICAgICAgICBqUXVlcnkoIHRoaXMudGFyZ2V0ICkudW5ibG9jaygpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3Bpbm5lcjtcbiIsImltcG9ydCB7UGF5bWVudE1ldGhvZHN9IGZyb20gXCIuLi9IZWxwZXIvQ2hlY2tvdXRNZXRob2RTdGF0ZVwiO1xuaW1wb3J0IGVycm9ySGFuZGxlciBmcm9tIFwiLi4vRXJyb3JIYW5kbGVyXCI7XG5cbmNsYXNzIEZyZWVUcmlhbEhhbmRsZXIge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHNwaW5uZXIsXG4gICAgICAgIGVycm9ySGFuZGxlclxuICAgICkge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5zcGlubmVyID0gc3Bpbm5lcjtcbiAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBlcnJvckhhbmRsZXI7XG4gICAgfVxuXG4gICAgaGFuZGxlKClcbiAgICB7XG4gICAgICAgIHRoaXMuc3Bpbm5lci5ibG9jaygpO1xuXG4gICAgICAgIGZldGNoKHRoaXMuY29uZmlnLmFqYXgudmF1bHRfcGF5cGFsLmVuZHBvaW50LCB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBub25jZTogdGhpcy5jb25maWcuYWpheC52YXVsdF9wYXlwYWwubm9uY2UsXG4gICAgICAgICAgICAgICAgcmV0dXJuX3VybDogbG9jYXRpb24uaHJlZlxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZXMuanNvbigpO1xuICAgICAgICB9KS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKCFkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwaW5uZXIudW5ibG9jaygpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIubWVzc2FnZShkYXRhLmRhdGEubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoZGF0YS5kYXRhLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gZGF0YS5kYXRhLmFwcHJvdmVfbGluaztcbiAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5zcGlubmVyLnVuYmxvY2soKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIuZ2VuZXJpY0Vycm9yKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IEZyZWVUcmlhbEhhbmRsZXI7XG4iLCJpbXBvcnQgTWluaUNhcnRCb290c3RhcCBmcm9tICcuL21vZHVsZXMvQ29udGV4dEJvb3RzdHJhcC9NaW5pQ2FydEJvb3RzdGFwJztcbmltcG9ydCBTaW5nbGVQcm9kdWN0Qm9vdHN0YXAgZnJvbSAnLi9tb2R1bGVzL0NvbnRleHRCb290c3RyYXAvU2luZ2xlUHJvZHVjdEJvb3RzdGFwJztcbmltcG9ydCBDYXJ0Qm9vdHN0cmFwIGZyb20gJy4vbW9kdWxlcy9Db250ZXh0Qm9vdHN0cmFwL0NhcnRCb290c3RhcCc7XG5pbXBvcnQgQ2hlY2tvdXRCb290c3RhcCBmcm9tICcuL21vZHVsZXMvQ29udGV4dEJvb3RzdHJhcC9DaGVja291dEJvb3RzdGFwJztcbmltcG9ydCBQYXlOb3dCb290c3RyYXAgZnJvbSBcIi4vbW9kdWxlcy9Db250ZXh0Qm9vdHN0cmFwL1BheU5vd0Jvb3RzdHJhcFwiO1xuaW1wb3J0IFJlbmRlcmVyIGZyb20gJy4vbW9kdWxlcy9SZW5kZXJlci9SZW5kZXJlcic7XG5pbXBvcnQgRXJyb3JIYW5kbGVyIGZyb20gJy4vbW9kdWxlcy9FcnJvckhhbmRsZXInO1xuaW1wb3J0IENyZWRpdENhcmRSZW5kZXJlciBmcm9tIFwiLi9tb2R1bGVzL1JlbmRlcmVyL0NyZWRpdENhcmRSZW5kZXJlclwiO1xuaW1wb3J0IGRhdGFDbGllbnRJZEF0dHJpYnV0ZUhhbmRsZXIgZnJvbSBcIi4vbW9kdWxlcy9EYXRhQ2xpZW50SWRBdHRyaWJ1dGVIYW5kbGVyXCI7XG5pbXBvcnQgTWVzc2FnZVJlbmRlcmVyIGZyb20gXCIuL21vZHVsZXMvUmVuZGVyZXIvTWVzc2FnZVJlbmRlcmVyXCI7XG5pbXBvcnQgU3Bpbm5lciBmcm9tIFwiLi9tb2R1bGVzL0hlbHBlci9TcGlubmVyXCI7XG5pbXBvcnQge1xuICAgIGdldEN1cnJlbnRQYXltZW50TWV0aG9kLFxuICAgIE9SREVSX0JVVFRPTl9TRUxFQ1RPUixcbiAgICBQYXltZW50TWV0aG9kc1xufSBmcm9tIFwiLi9tb2R1bGVzL0hlbHBlci9DaGVja291dE1ldGhvZFN0YXRlXCI7XG5pbXBvcnQge2hpZGUsIHNldFZpc2libGV9IGZyb20gXCIuL21vZHVsZXMvSGVscGVyL0hpZGluZ1wiO1xuaW1wb3J0IHtpc0NoYW5nZVBheW1lbnRQYWdlfSBmcm9tIFwiLi9tb2R1bGVzL0hlbHBlci9TdWJzY3JpcHRpb25zXCI7XG5pbXBvcnQgRnJlZVRyaWFsSGFuZGxlciBmcm9tIFwiLi9tb2R1bGVzL0FjdGlvbkhhbmRsZXIvRnJlZVRyaWFsSGFuZGxlclwiO1xuXG4vLyBUT0RPOiBjb3VsZCBiZSBhIGdvb2QgaWRlYSB0byBoYXZlIGEgc2VwYXJhdGUgc3Bpbm5lciBmb3IgZWFjaCBnYXRld2F5LFxuLy8gYnV0IEkgdGhpbmsgd2UgY2FyZSBtYWlubHkgYWJvdXQgdGhlIHNjcmlwdCBsb2FkaW5nLCBzbyBvbmUgc3Bpbm5lciBzaG91bGQgYmUgZW5vdWdoLlxuY29uc3QgYnV0dG9uc1NwaW5uZXIgPSBuZXcgU3Bpbm5lcihkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucHBjLWJ1dHRvbi13cmFwcGVyJykpO1xuY29uc3QgY2FyZHNTcGlubmVyID0gbmV3IFNwaW5uZXIoJyNwcGNwLWhvc3RlZC1maWVsZHMnKTtcblxuY29uc3QgYm9vdHN0cmFwID0gKCkgPT4ge1xuICAgIGNvbnN0IGVycm9ySGFuZGxlciA9IG5ldyBFcnJvckhhbmRsZXIoUGF5UGFsQ29tbWVyY2VHYXRld2F5LmxhYmVscy5lcnJvci5nZW5lcmljKTtcbiAgICBjb25zdCBzcGlubmVyID0gbmV3IFNwaW5uZXIoKTtcbiAgICBjb25zdCBjcmVkaXRDYXJkUmVuZGVyZXIgPSBuZXcgQ3JlZGl0Q2FyZFJlbmRlcmVyKFBheVBhbENvbW1lcmNlR2F0ZXdheSwgZXJyb3JIYW5kbGVyLCBzcGlubmVyKTtcblxuICAgIGNvbnN0IGZyZWVUcmlhbEhhbmRsZXIgPSBuZXcgRnJlZVRyaWFsSGFuZGxlcihQYXlQYWxDb21tZXJjZUdhdGV3YXksIHNwaW5uZXIsIGVycm9ySGFuZGxlcik7XG5cbiAgICBjb25zdCBvblNtYXJ0QnV0dG9uQ2xpY2sgPSAoZGF0YSwgYWN0aW9ucykgPT4ge1xuICAgICAgICB3aW5kb3cucHBjcEZ1bmRpbmdTb3VyY2UgPSBkYXRhLmZ1bmRpbmdTb3VyY2U7XG5cbiAgICAgICAgaWYgKFBheVBhbENvbW1lcmNlR2F0ZXdheS5iYXNpY19jaGVja291dF92YWxpZGF0aW9uX2VuYWJsZWQpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IHF1aWNrIGZpeCB0byBnZXQgdGhlIGVycm9yIGFib3V0IGVtcHR5IGZvcm0gYmVmb3JlIGF0dGVtcHRpbmcgUGF5UGFsIG9yZGVyXG4gICAgICAgICAgICAvLyBpdCBzaG91bGQgc29sdmUgIzUxMyBmb3IgbW9zdCBvZiB0aGUgdXNlcnMsIGJ1dCBwcm9wZXIgc29sdXRpb24gc2hvdWxkIGJlIGltcGxlbWVudGVkIGxhdGVyLlxuICAgICAgICAgICAgY29uc3QgcmVxdWlyZWRGaWVsZHMgPSBqUXVlcnkoJ2Zvcm0ud29vY29tbWVyY2UtY2hlY2tvdXQgLnZhbGlkYXRlLXJlcXVpcmVkOnZpc2libGUgOmlucHV0Jyk7XG4gICAgICAgICAgICByZXF1aXJlZEZpZWxkcy5lYWNoKChpLCBpbnB1dCkgPT4ge1xuICAgICAgICAgICAgICAgIGpRdWVyeShpbnB1dCkudHJpZ2dlcigndmFsaWRhdGUnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgaW52YWxpZEZpZWxkcyA9IEFycmF5LmZyb20oalF1ZXJ5KCdmb3JtLndvb2NvbW1lcmNlLWNoZWNrb3V0IC52YWxpZGF0ZS1yZXF1aXJlZC53b29jb21tZXJjZS1pbnZhbGlkOnZpc2libGUnKSk7XG4gICAgICAgICAgICBpZiAoaW52YWxpZEZpZWxkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiaWxsaW5nRmllbGRzQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLndvb2NvbW1lcmNlLWJpbGxpbmctZmllbGRzJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hpcHBpbmdGaWVsZHNDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcud29vY29tbWVyY2Utc2hpcHBpbmctZmllbGRzJyk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lTWVzc2FnZU1hcCA9IFBheVBhbENvbW1lcmNlR2F0ZXdheS5sYWJlbHMuZXJyb3IucmVxdWlyZWQuZWxlbWVudHM7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBpbnZhbGlkRmllbGRzLm1hcChlbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBlbC5xdWVyeVNlbGVjdG9yKCdbbmFtZV0nKT8uZ2V0QXR0cmlidXRlKCduYW1lJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lICYmIG5hbWUgaW4gbmFtZU1lc3NhZ2VNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuYW1lTWVzc2FnZU1hcFtuYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgbGFiZWwgPSBlbC5xdWVyeVNlbGVjdG9yKCdsYWJlbCcpLnRleHRDb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZUFsbCgnKicsICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJpbGxpbmdGaWVsZHNDb250YWluZXI/LmNvbnRhaW5zKGVsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSBQYXlQYWxDb21tZXJjZUdhdGV3YXkubGFiZWxzLmJpbGxpbmdfZmllbGQucmVwbGFjZSgnJXMnLCBsYWJlbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNoaXBwaW5nRmllbGRzQ29udGFpbmVyPy5jb250YWlucyhlbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gUGF5UGFsQ29tbWVyY2VHYXRld2F5LmxhYmVscy5zaGlwcGluZ19maWVsZC5yZXBsYWNlKCclcycsIGxhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGF5UGFsQ29tbWVyY2VHYXRld2F5LmxhYmVscy5lcnJvci5yZXF1aXJlZC5maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJyVzJywgYDxzdHJvbmc+JHtsYWJlbH08L3N0cm9uZz5gKVxuICAgICAgICAgICAgICAgIH0pLmZpbHRlcihzID0+IHMubGVuZ3RoID4gMik7XG5cbiAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzLmZvckVhY2gocyA9PiBlcnJvckhhbmRsZXIubWVzc2FnZShzKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JIYW5kbGVyLm1lc3NhZ2UoUGF5UGFsQ29tbWVyY2VHYXRld2F5LmxhYmVscy5lcnJvci5yZXF1aXJlZC5nZW5lcmljKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9ucy5yZWplY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvcm0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdmb3JtLndvb2NvbW1lcmNlLWNoZWNrb3V0Jyk7XG4gICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICBqUXVlcnkoJyNwcGNwLWZ1bmRpbmctc291cmNlLWZvcm0taW5wdXQnKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIGZvcm0uaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgICAgICAgICAgICAgICdiZWZvcmVlbmQnLFxuICAgICAgICAgICAgICAgIGA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwcGNwLWZ1bmRpbmctc291cmNlXCIgdmFsdWU9XCIke2RhdGEuZnVuZGluZ1NvdXJjZX1cIiBpZD1cInBwY3AtZnVuZGluZy1zb3VyY2UtZm9ybS1pbnB1dFwiPmBcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzRnJlZVRyaWFsID0gUGF5UGFsQ29tbWVyY2VHYXRld2F5LmlzX2ZyZWVfdHJpYWxfY2FydDtcbiAgICAgICAgaWYgKGlzRnJlZVRyaWFsICYmIGRhdGEuZnVuZGluZ1NvdXJjZSAhPT0gJ2NhcmQnKSB7XG4gICAgICAgICAgICBmcmVlVHJpYWxIYW5kbGVyLmhhbmRsZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbnMucmVqZWN0KCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG9uU21hcnRCdXR0b25zSW5pdCA9ICgpID0+IHtcbiAgICAgICAgYnV0dG9uc1NwaW5uZXIudW5ibG9jaygpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoY3JlZGl0Q2FyZFJlbmRlcmVyLCBQYXlQYWxDb21tZXJjZUdhdGV3YXksIG9uU21hcnRCdXR0b25DbGljaywgb25TbWFydEJ1dHRvbnNJbml0KTtcbiAgICBjb25zdCBtZXNzYWdlUmVuZGVyZXIgPSBuZXcgTWVzc2FnZVJlbmRlcmVyKFBheVBhbENvbW1lcmNlR2F0ZXdheS5tZXNzYWdlcyk7XG4gICAgY29uc3QgY29udGV4dCA9IFBheVBhbENvbW1lcmNlR2F0ZXdheS5jb250ZXh0O1xuICAgIGlmIChjb250ZXh0ID09PSAnbWluaS1jYXJ0JyB8fCBjb250ZXh0ID09PSAncHJvZHVjdCcpIHtcbiAgICAgICAgaWYgKFBheVBhbENvbW1lcmNlR2F0ZXdheS5taW5pX2NhcnRfYnV0dG9uc19lbmFibGVkID09PSAnMScpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pbmlDYXJ0Qm9vdHN0cmFwID0gbmV3IE1pbmlDYXJ0Qm9vdHN0YXAoXG4gICAgICAgICAgICAgICAgUGF5UGFsQ29tbWVyY2VHYXRld2F5LFxuICAgICAgICAgICAgICAgIHJlbmRlcmVyXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBtaW5pQ2FydEJvb3RzdHJhcC5pbml0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29udGV4dCA9PT0gJ3Byb2R1Y3QnICYmIFBheVBhbENvbW1lcmNlR2F0ZXdheS5zaW5nbGVfcHJvZHVjdF9idXR0b25zX2VuYWJsZWQgPT09ICcxJykge1xuICAgICAgICBjb25zdCBzaW5nbGVQcm9kdWN0Qm9vdHN0cmFwID0gbmV3IFNpbmdsZVByb2R1Y3RCb290c3RhcChcbiAgICAgICAgICAgIFBheVBhbENvbW1lcmNlR2F0ZXdheSxcbiAgICAgICAgICAgIHJlbmRlcmVyLFxuICAgICAgICAgICAgbWVzc2FnZVJlbmRlcmVyLFxuICAgICAgICApO1xuXG4gICAgICAgIHNpbmdsZVByb2R1Y3RCb290c3RyYXAuaW5pdCgpO1xuICAgIH1cblxuICAgIGlmIChjb250ZXh0ID09PSAnY2FydCcpIHtcbiAgICAgICAgY29uc3QgY2FydEJvb3RzdHJhcCA9IG5ldyBDYXJ0Qm9vdHN0cmFwKFxuICAgICAgICAgICAgUGF5UGFsQ29tbWVyY2VHYXRld2F5LFxuICAgICAgICAgICAgcmVuZGVyZXIsXG4gICAgICAgICk7XG5cbiAgICAgICAgY2FydEJvb3RzdHJhcC5pbml0KCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQgPT09ICdjaGVja291dCcpIHtcbiAgICAgICAgY29uc3QgY2hlY2tvdXRCb290c3RhcCA9IG5ldyBDaGVja291dEJvb3RzdGFwKFxuICAgICAgICAgICAgUGF5UGFsQ29tbWVyY2VHYXRld2F5LFxuICAgICAgICAgICAgcmVuZGVyZXIsXG4gICAgICAgICAgICBtZXNzYWdlUmVuZGVyZXIsXG4gICAgICAgICAgICBzcGlubmVyXG4gICAgICAgICk7XG5cbiAgICAgICAgY2hlY2tvdXRCb290c3RhcC5pbml0KCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQgPT09ICdwYXktbm93JyApIHtcbiAgICAgICAgY29uc3QgcGF5Tm93Qm9vdHN0cmFwID0gbmV3IFBheU5vd0Jvb3RzdHJhcChcbiAgICAgICAgICAgIFBheVBhbENvbW1lcmNlR2F0ZXdheSxcbiAgICAgICAgICAgIHJlbmRlcmVyLFxuICAgICAgICAgICAgbWVzc2FnZVJlbmRlcmVyLFxuICAgICAgICAgICAgc3Bpbm5lclxuICAgICAgICApO1xuICAgICAgICBwYXlOb3dCb290c3RyYXAuaW5pdCgpO1xuICAgIH1cblxuICAgIGlmIChjb250ZXh0ICE9PSAnY2hlY2tvdXQnKSB7XG4gICAgICAgIG1lc3NhZ2VSZW5kZXJlci5yZW5kZXIoKTtcbiAgICB9XG59O1xuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAnRE9NQ29udGVudExvYWRlZCcsXG4gICAgKCkgPT4ge1xuICAgICAgICBpZiAoIXR5cGVvZiAoUGF5UGFsQ29tbWVyY2VHYXRld2F5KSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignUGF5UGFsIGJ1dHRvbiBjb3VsZCBub3QgYmUgY29uZmlndXJlZC4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIFBheVBhbENvbW1lcmNlR2F0ZXdheS5jb250ZXh0ICE9PSAnY2hlY2tvdXQnXG4gICAgICAgICAgICAmJiBQYXlQYWxDb21tZXJjZUdhdGV3YXkuZGF0YV9jbGllbnRfaWQudXNlciA9PT0gMFxuICAgICAgICAgICAgJiYgUGF5UGFsQ29tbWVyY2VHYXRld2F5LmRhdGFfY2xpZW50X2lkLmhhc19zdWJzY3JpcHRpb25zXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGF5cGFsQnV0dG9uR2F0ZXdheUlkcyA9IFtcbiAgICAgICAgICAgIFBheW1lbnRNZXRob2RzLlBBWVBBTCxcbiAgICAgICAgICAgIC4uLk9iamVjdC5lbnRyaWVzKFBheVBhbENvbW1lcmNlR2F0ZXdheS5zZXBhcmF0ZV9idXR0b25zKS5tYXAoKFtrLCBkYXRhXSkgPT4gZGF0YS5pZCksXG4gICAgICAgIF1cblxuICAgICAgICAvLyBTb21ldGltZXMgUGF5UGFsIHNjcmlwdCB0YWtlcyBsb25nIHRpbWUgdG8gbG9hZCxcbiAgICAgICAgLy8gc28gd2UgYWRkaXRpb25hbGx5IGhpZGUgdGhlIHN0YW5kYXJkIG9yZGVyIGJ1dHRvbiBoZXJlIHRvIGF2b2lkIGZhaWxlZCBvcmRlcnMuXG4gICAgICAgIC8vIE5vcm1hbGx5IGl0IGlzIGhpZGRlbiBsYXRlciBhZnRlciB0aGUgc2NyaXB0IGxvYWQuXG4gICAgICAgIGNvbnN0IGhpZGVPcmRlckJ1dHRvbklmUHBjcEdhdGV3YXkgPSAoKSA9PiB7XG4gICAgICAgICAgICAvLyBvbmx5IGluIGNoZWNrb3V0IGFuZCBwYXkgbm93IHBhZ2UsIG90aGVyd2lzZSBpdCBtYXkgYnJlYWsgdGhpbmdzIChlLmcuIHBheW1lbnQgdmlhIHByb2R1Y3QgcGFnZSksXG4gICAgICAgICAgICAvLyBhbmQgYWxzbyB0aGUgbG9hZGluZyBzcGlubmVyIG1heSBsb29rIHdlaXJkIG9uIG90aGVyIHBhZ2VzXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIVsnY2hlY2tvdXQnLCAncGF5LW5vdyddLmluY2x1ZGVzKFBheVBhbENvbW1lcmNlR2F0ZXdheS5jb250ZXh0KVxuICAgICAgICAgICAgICAgIHx8IGlzQ2hhbmdlUGF5bWVudFBhZ2UoKVxuICAgICAgICAgICAgICAgIHx8IChQYXlQYWxDb21tZXJjZUdhdGV3YXkuaXNfZnJlZV90cmlhbF9jYXJ0ICYmIFBheVBhbENvbW1lcmNlR2F0ZXdheS52YXVsdGVkX3BheXBhbF9lbWFpbCAhPT0gJycpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYXltZW50TWV0aG9kID0gZ2V0Q3VycmVudFBheW1lbnRNZXRob2QoKTtcbiAgICAgICAgICAgIGNvbnN0IGlzUGF5cGFsQnV0dG9uID0gcGF5cGFsQnV0dG9uR2F0ZXdheUlkcy5pbmNsdWRlcyhjdXJyZW50UGF5bWVudE1ldGhvZCk7XG4gICAgICAgICAgICBjb25zdCBpc0NhcmRzID0gY3VycmVudFBheW1lbnRNZXRob2QgPT09IFBheW1lbnRNZXRob2RzLkNBUkRTO1xuXG4gICAgICAgICAgICBzZXRWaXNpYmxlKE9SREVSX0JVVFRPTl9TRUxFQ1RPUiwgIWlzUGF5cGFsQnV0dG9uICYmICFpc0NhcmRzLCB0cnVlKTtcblxuICAgICAgICAgICAgaWYgKGlzUGF5cGFsQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgLy8gc3RvcHBlZCBhZnRlciB0aGUgZmlyc3QgcmVuZGVyaW5nIG9mIHRoZSBidXR0b25zLCBpbiBvbkluaXRcbiAgICAgICAgICAgICAgICBidXR0b25zU3Bpbm5lci5ibG9jaygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBidXR0b25zU3Bpbm5lci51bmJsb2NrKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc0NhcmRzKSB7XG4gICAgICAgICAgICAgICAgY2FyZHNTcGlubmVyLmJsb2NrKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhcmRzU3Bpbm5lci51bmJsb2NrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBqUXVlcnkoZG9jdW1lbnQpLm9uKCdob3N0ZWRfZmllbGRzX2xvYWRlZCcsICgpID0+IHtcbiAgICAgICAgICAgIGNhcmRzU3Bpbm5lci51bmJsb2NrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBib290c3RyYXBwZWQgPSBmYWxzZTtcblxuICAgICAgICBoaWRlT3JkZXJCdXR0b25JZlBwY3BHYXRld2F5KCk7XG5cbiAgICAgICAgalF1ZXJ5KGRvY3VtZW50LmJvZHkpLm9uKCd1cGRhdGVkX2NoZWNrb3V0IHBheW1lbnRfbWV0aG9kX3NlbGVjdGVkJywgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGJvb3RzdHJhcHBlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaGlkZU9yZGVyQnV0dG9uSWZQcGNwR2F0ZXdheSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgc2NyaXB0LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGJvb3RzdHJhcHBlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGJvb3RzdHJhcCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJywgUGF5UGFsQ29tbWVyY2VHYXRld2F5LmJ1dHRvbi51cmwpO1xuICAgICAgICBPYmplY3QuZW50cmllcyhQYXlQYWxDb21tZXJjZUdhdGV3YXkuc2NyaXB0X2F0dHJpYnV0ZXMpLmZvckVhY2goXG4gICAgICAgICAgICAoa2V5VmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBzY3JpcHQuc2V0QXR0cmlidXRlKGtleVZhbHVlWzBdLCBrZXlWYWx1ZVsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKFBheVBhbENvbW1lcmNlR2F0ZXdheS5kYXRhX2NsaWVudF9pZC5zZXRfYXR0cmlidXRlKSB7XG4gICAgICAgICAgICBkYXRhQ2xpZW50SWRBdHRyaWJ1dGVIYW5kbGVyKHNjcmlwdCwgUGF5UGFsQ29tbWVyY2VHYXRld2F5LmRhdGFfY2xpZW50X2lkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKHNjcmlwdCk7XG4gICAgfSxcbik7XG4iXSwibmFtZXMiOlsiRXJyb3JIYW5kbGVyIiwiY29uc3RydWN0b3IiLCJnZW5lcmljRXJyb3JUZXh0Iiwid3JhcHBlciIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsIm1lc3NhZ2VzTGlzdCIsImdlbmVyaWNFcnJvciIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwiY2xlYXIiLCJtZXNzYWdlIiwiYXBwZW5kUHJlcGFyZWRFcnJvck1lc3NhZ2VFbGVtZW50IiwiZXJyb3JNZXNzYWdlRWxlbWVudCIsInByZXBhcmVNZXNzYWdlc0xpc3QiLCJyZXBsYWNlV2l0aCIsInRleHQiLCJwZXJzaXN0IiwiU3RyaW5nIiwibGVuZ3RoIiwiRXJyb3IiLCJhZGQiLCJyZW1vdmUiLCJtZXNzYWdlTm9kZSIsInByZXBhcmVNZXNzYWdlc0xpc3RJdGVtIiwiYXBwZW5kQ2hpbGQiLCJqUXVlcnkiLCJzY3JvbGxfdG9fbm90aWNlcyIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJsaSIsImlubmVySFRNTCIsInNhbml0aXplIiwidGV4dGFyZWEiLCJ2YWx1ZSIsInJlcGxhY2UiLCJvbkFwcHJvdmUiLCJjb250ZXh0IiwiZXJyb3JIYW5kbGVyIiwiZGF0YSIsImFjdGlvbnMiLCJmZXRjaCIsImNvbmZpZyIsImFqYXgiLCJhcHByb3ZlX29yZGVyIiwiZW5kcG9pbnQiLCJtZXRob2QiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsIm5vbmNlIiwib3JkZXJfaWQiLCJvcmRlcklEIiwiZnVuZGluZ19zb3VyY2UiLCJ3aW5kb3ciLCJwcGNwRnVuZGluZ1NvdXJjZSIsInRoZW4iLCJyZXMiLCJqc29uIiwic3VjY2VzcyIsInJlc3RhcnQiLCJjYXRjaCIsImVyciIsImxvY2F0aW9uIiwiaHJlZiIsInJlZGlyZWN0IiwicGF5ZXJEYXRhIiwicGF5ZXIiLCJQYXlQYWxDb21tZXJjZUdhdGV3YXkiLCJwaG9uZSIsInBob25lX3R5cGUiLCJwaG9uZV9udW1iZXIiLCJuYXRpb25hbF9udW1iZXIiLCJlbWFpbF9hZGRyZXNzIiwibmFtZSIsInN1cm5hbWUiLCJnaXZlbl9uYW1lIiwiYWRkcmVzcyIsImNvdW50cnlfY29kZSIsImFkZHJlc3NfbGluZV8xIiwiYWRkcmVzc19saW5lXzIiLCJhZG1pbl9hcmVhXzEiLCJhZG1pbl9hcmVhXzIiLCJwb3N0YWxfY29kZSIsIlBheW1lbnRNZXRob2RzIiwiUEFZUEFMIiwiQ0FSRFMiLCJPWFhPIiwiQ0FSRF9CVVRUT04iLCJPUkRFUl9CVVRUT05fU0VMRUNUT1IiLCJnZXRDdXJyZW50UGF5bWVudE1ldGhvZCIsImVsIiwiaXNTYXZlZENhcmRTZWxlY3RlZCIsInNhdmVkQ2FyZExpc3QiLCJDYXJ0QWN0aW9uSGFuZGxlciIsImNvbmZpZ3VyYXRpb24iLCJjcmVhdGVPcmRlciIsImJuQ29kZSIsImJuX2NvZGVzIiwiY3JlYXRlX29yZGVyIiwicHVyY2hhc2VfdW5pdHMiLCJwYXltZW50X21ldGhvZCIsImJuX2NvZGUiLCJjb25zb2xlIiwiZXJyb3IiLCJpZCIsIm9uRXJyb3IiLCJNaW5pQ2FydEJvb3RzdGFwIiwiZ2F0ZXdheSIsInJlbmRlcmVyIiwiYWN0aW9uSGFuZGxlciIsImluaXQiLCJsYWJlbHMiLCJnZW5lcmljIiwicmVuZGVyIiwib24iLCJzaG91bGRSZW5kZXIiLCJidXR0b24iLCJtaW5pX2NhcnRfd3JhcHBlciIsImhvc3RlZF9maWVsZHMiLCJzdHlsZSIsIm1pbmlfY2FydF9zdHlsZSIsIlByb2R1Y3QiLCJVcGRhdGVDYXJ0IiwidXBkYXRlIiwib25SZXNvbHZlIiwicHJvZHVjdHMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlc3VsdCIsInJlc29sdmVkIiwiQnV0dG9uc1RvZ2dsZUxpc3RlbmVyIiwiZWxlbWVudCIsInNob3dDYWxsYmFjayIsImhpZGVDYWxsYmFjayIsIm9ic2VydmVyIiwiYXR0cmlidXRlcyIsImNhbGxiYWNrIiwiTXV0YXRpb25PYnNlcnZlciIsIm9ic2VydmUiLCJkaXNjb25uZWN0IiwicXVhbnRpdHkiLCJ2YXJpYXRpb25zIiwiU2luZ2xlUHJvZHVjdEFjdGlvbkhhbmRsZXIiLCJ1cGRhdGVDYXJ0Iiwic2hvd0J1dHRvbkNhbGxiYWNrIiwiaGlkZUJ1dHRvbkNhbGxiYWNrIiwiZm9ybUVsZW1lbnQiLCJoYXNWYXJpYXRpb25zIiwiZ2V0UHJvZHVjdHMiLCJpc0dyb3VwZWRQcm9kdWN0IiwicXR5IiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giLCJlbGVtZW50TmFtZSIsImdldEF0dHJpYnV0ZSIsIm1hdGNoIiwicGFyc2VJbnQiLCJwdXNoIiwicHJvbWlzZSIsIm1hcCIsIlNpbmdsZVByb2R1Y3RCb290c3RhcCIsIm1lc3NhZ2VzIiwiaGFuZGxlQ2hhbmdlIiwiaGlkZUJ1dHRvbnMiLCJoaWRlTWVzc2FnZXMiLCJhZGRFdmVudExpc3RlbmVyIiwiYmluZCIsInByaWNlQW1vdW50SXNaZXJvIiwicHJpY2VBbW91bnQiLCJwcmljZVRleHQiLCJpbm5lclRleHQiLCJwYXJzZUZsb2F0IiwiY2hhbmdlX2NhcnQiLCJzaG93QnV0dG9ucyIsInJlbmRlcldpdGhBbW91bnQiLCJDYXJ0Qm9vdHN0cmFwIiwic3Bpbm5lciIsImJsb2NrIiwidW5ibG9jayIsImNvZGUiLCJjbGljayIsIkNoZWNrb3V0QWN0aW9uSGFuZGxlciIsImZvcm1TZWxlY3RvciIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJmb3JtSnNvbk9iaiIsIk9iamVjdCIsImZyb21FbnRyaWVzIiwiY3JlYXRlYWNjb3VudCIsImlzIiwicGF5bWVudE1ldGhvZCIsImZ1bmRpbmdTb3VyY2UiLCJmb3JtIiwiZG9tUGFyc2VyIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiZGV0YWlscyIsImQiLCJpc3N1ZSIsImRlc2NyaXB0aW9uIiwiam9pbiIsImlucHV0IiwiY3VzdG9tX2lkIiwiYXBwZW5kIiwib25DYW5jZWwiLCJnZXRFbGVtZW50Iiwic2VsZWN0b3JPckVsZW1lbnQiLCJpc1Zpc2libGUiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsImdldENsaWVudFJlY3RzIiwic2V0VmlzaWJsZSIsInNob3ciLCJpbXBvcnRhbnQiLCJjdXJyZW50VmFsdWUiLCJnZXRQcm9wZXJ0eVZhbHVlIiwic2V0UHJvcGVydHkiLCJyZW1vdmVQcm9wZXJ0eSIsImhpZGUiLCJDaGVja291dEJvb3RzdGFwIiwic3RhbmRhcmRPcmRlckJ1dHRvblNlbGVjdG9yIiwiYnV0dG9uQ2hhbmdlT2JzZXJ2ZXIiLCJ1cGRhdGVVaSIsInZhbCIsImNhbmNlbF93cmFwcGVyIiwiY3VycmVudFBheW1lbnRNZXRob2QiLCJpc1BheXBhbCIsImlzQ2FyZCIsImlzU2VwYXJhdGVCdXR0b25HYXRld2F5IiwiaW5jbHVkZXMiLCJpc1NhdmVkQ2FyZCIsImlzTm90T3VyR2F0ZXdheSIsImlzRnJlZVRyaWFsIiwiaXNfZnJlZV90cmlhbF9jYXJ0IiwiaGFzVmF1bHRlZFBheXBhbCIsInZhdWx0ZWRfcGF5cGFsX2VtYWlsIiwicGF5cGFsQnV0dG9uV3JhcHBlcnMiLCJlbnRyaWVzIiwic2VwYXJhdGVfYnV0dG9ucyIsInJlZHVjZSIsImsiLCJnYXRld2F5SWQiLCJkaXNhYmxlQ3JlZGl0Q2FyZEZpZWxkcyIsImVuYWJsZUNyZWRpdENhcmRGaWVsZHMiLCJhZGRDbGFzcyIsImF0dHIiLCJyZW1vdmVDbGFzcyIsImlzQ2hhbmdlUGF5bWVudFBhZ2UiLCJ1cmxQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJzZWFyY2giLCJoYXMiLCJQYXlOb3dCb290c3RyYXAiLCJtZXJnZSIsIlJlbmRlcmVyIiwiY3JlZGl0Q2FyZFJlbmRlcmVyIiwiZGVmYXVsdFNldHRpbmdzIiwib25TbWFydEJ1dHRvbkNsaWNrIiwib25TbWFydEJ1dHRvbnNJbml0IiwicmVuZGVyZWRTb3VyY2VzIiwiU2V0IiwiY29udGV4dENvbmZpZyIsInNldHRpbmdzT3ZlcnJpZGUiLCJzZXR0aW5ncyIsImVuYWJsZWRTZXBhcmF0ZUdhdGV3YXlzIiwiZmlsdGVyIiwicyIsImhhc0VuYWJsZWRTZXBhcmF0ZUdhdGV3YXlzIiwia2V5cyIsInJlbmRlckJ1dHRvbnMiLCJwYXlwYWwiLCJnZXRGdW5kaW5nU291cmNlcyIsInNoYXBlIiwiaXNBbHJlYWR5UmVuZGVyZWQiLCJCdXR0b25zIiwiYnRuIiwib25DbGljayIsIm9uSW5pdCIsImlzRWxpZ2libGUiLCJoYXNDaGlsZE5vZGVzIiwiZG9tRWxlbWVudCIsImRpc3BsYXkiLCJkaXNhYmxlRmllbGRzIiwiZW5hYmxlRmllbGRzIiwiZGNjSW5wdXRGYWN0b3J5Iiwib3JpZ2luYWwiLCJzdHlsZXMiLCJnZXRDb21wdXRlZFN0eWxlIiwibmV3RWxlbWVudCIsImNsYXNzTmFtZSIsInZhbHVlcyIsInByb3AiLCJpc05hTiIsIkNyZWRpdENhcmRSZW5kZXJlciIsImRlZmF1bHRDb25maWciLCJjYXJkVmFsaWQiLCJmb3JtVmFsaWQiLCJjdXJyZW50SG9zdGVkRmllbGRzSW5zdGFuY2UiLCJIb3N0ZWRGaWVsZHMiLCJ3cmFwcGVyRWxlbWVudCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsImJ1dHRvblNlbGVjdG9yIiwidGVhcmRvd24iLCJnYXRlV2F5Qm94Iiwib2xkRGlzcGxheVN0eWxlIiwiaGlkZURjY0dhdGV3YXkiLCJjYXJkTnVtYmVyRmllbGQiLCJzdHlsZXNSYXciLCJjYXJkTnVtYmVyIiwicmVwbGFjZUNoaWxkIiwiY2FyZEV4cGlyeUZpZWxkIiwiY2FyZEV4cGlyeSIsImNhcmRDb2RlRmllbGQiLCJjYXJkQ29kZSIsImZvcm1XcmFwcGVyIiwiZW5mb3JjZV92YXVsdCIsImNoZWNrZWQiLCJmaWVsZHMiLCJudW1iZXIiLCJzZWxlY3RvciIsInBsYWNlaG9sZGVyIiwiY3JlZGl0X2NhcmRfbnVtYmVyIiwiY3Z2IiwiZXhwaXJhdGlvbkRhdGUiLCJtbV95eSIsImhvc3RlZEZpZWxkcyIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsIl9zdWJtaXQiLCJldmVudCIsImNhcmRzIiwidmFsaWRDYXJkcyIsInZhbGlkX2NhcmRzIiwiaW5kZXhPZiIsInR5cGUiLCJfY2FyZE51bWJlckZpbGVkQ0xhc3NOYW1lQnlDYXJkVHlwZSIsIl9yZWNyZWF0ZUVsZW1lbnRDbGFzc0F0dHJpYnV0ZSIsImlzVmFsaWQiLCJldmVyeSIsImtleSIsInByZXZlbnREZWZhdWx0IiwiZmllbGQiLCJhdHRyaWJ1dGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJzYXZlX2NhcmQiLCJjYW5fc2F2ZV92YXVsdF90b2tlbiIsInZhdWx0IiwiZ2V0RWxlbWVudEJ5SWQiLCJjb250aW5nZW5jeSIsImhvc3RlZEZpZWxkc0RhdGEiLCJjb250aW5nZW5jaWVzIiwiY2FyZGhvbGRlck5hbWUiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsInN1Ym1pdCIsInBheWxvYWQiLCJvcmRlcklkIiwiY2FyZF9ub3Rfc3VwcG9ydGVkIiwiZmllbGRzX25vdF92YWxpZCIsImNhcmRUeXBlIiwibmV3Q2xhc3NOYW1lIiwic3RvcmFnZUtleSIsInZhbGlkYXRlVG9rZW4iLCJ0b2tlbiIsInVzZXIiLCJjdXJyZW50VGltZSIsIkRhdGUiLCJnZXRUaW1lIiwiaXNFeHBpcmVkIiwiZXhwaXJhdGlvbiIsInN0b3JlZFRva2VuRm9yVXNlciIsInBhcnNlIiwic2Vzc2lvblN0b3JhZ2UiLCJnZXRJdGVtIiwic3RvcmVUb2tlbiIsInNldEl0ZW0iLCJkYXRhQ2xpZW50SWRBdHRyaWJ1dGVIYW5kbGVyIiwic2NyaXB0IiwiTWVzc2FnZVJlbmRlcmVyIiwiTWVzc2FnZXMiLCJhbW91bnQiLCJwbGFjZW1lbnQiLCJuZXdXcmFwcGVyIiwic2libGluZyIsIm5leHRTaWJsaW5nIiwicGFyZW50RWxlbWVudCIsImluc2VydEJlZm9yZSIsIlNwaW5uZXIiLCJ0YXJnZXQiLCJzZXRUYXJnZXQiLCJvdmVybGF5Q1NTIiwiYmFja2dyb3VuZCIsIm9wYWNpdHkiLCJGcmVlVHJpYWxIYW5kbGVyIiwiaGFuZGxlIiwidmF1bHRfcGF5cGFsIiwicmV0dXJuX3VybCIsImFwcHJvdmVfbGluayIsImJ1dHRvbnNTcGlubmVyIiwiY2FyZHNTcGlubmVyIiwiYm9vdHN0cmFwIiwiZnJlZVRyaWFsSGFuZGxlciIsImJhc2ljX2NoZWNrb3V0X3ZhbGlkYXRpb25fZW5hYmxlZCIsInJlcXVpcmVkRmllbGRzIiwiZWFjaCIsImkiLCJ0cmlnZ2VyIiwiaW52YWxpZEZpZWxkcyIsIkFycmF5IiwiZnJvbSIsImJpbGxpbmdGaWVsZHNDb250YWluZXIiLCJzaGlwcGluZ0ZpZWxkc0NvbnRhaW5lciIsIm5hbWVNZXNzYWdlTWFwIiwicmVxdWlyZWQiLCJlbGVtZW50cyIsImxhYmVsIiwidGV4dENvbnRlbnQiLCJyZXBsYWNlQWxsIiwidHJpbSIsImJpbGxpbmdfZmllbGQiLCJzaGlwcGluZ19maWVsZCIsImluc2VydEFkamFjZW50SFRNTCIsIm1lc3NhZ2VSZW5kZXJlciIsIm1pbmlfY2FydF9idXR0b25zX2VuYWJsZWQiLCJtaW5pQ2FydEJvb3RzdHJhcCIsInNpbmdsZV9wcm9kdWN0X2J1dHRvbnNfZW5hYmxlZCIsInNpbmdsZVByb2R1Y3RCb290c3RyYXAiLCJjYXJ0Qm9vdHN0cmFwIiwiY2hlY2tvdXRCb290c3RhcCIsInBheU5vd0Jvb3RzdHJhcCIsImRhdGFfY2xpZW50X2lkIiwiaGFzX3N1YnNjcmlwdGlvbnMiLCJwYXlwYWxCdXR0b25HYXRld2F5SWRzIiwiaGlkZU9yZGVyQnV0dG9uSWZQcGNwR2F0ZXdheSIsImlzUGF5cGFsQnV0dG9uIiwiaXNDYXJkcyIsImJvb3RzdHJhcHBlZCIsInVybCIsInNjcmlwdF9hdHRyaWJ1dGVzIiwia2V5VmFsdWUiLCJzZXRfYXR0cmlidXRlIl0sInNvdXJjZVJvb3QiOiIifQ==
//# sourceURL=webpack-internal:///536
                                    

#35 JavaScript::Eval (size: 2, repeated: 1) - SHA256: dc5f8effd972f18365ee7653da936889a00b91045ecc37ab49401b904b7b4482

                                        zb
                                    

#36 JavaScript::Eval (size: 92, repeated: 1) - SHA256: 9d57e673636f7abdf396b62e6d113551065f5ef93fa8a42792e5760daad3385a

                                        0,
function(N, d, K, x, T, E) {
    y((d = (T = D(N, (K = D(N, (x = D(N, 57), 40)), 58)), M)(K, N), E = M(x, N) > d, N), T, +E)
}
                                    

#37 JavaScript::Eval (size: 141, repeated: 1) - SHA256: a0a9b1a36ef24c642792d5f41de7e81cbc032f38b67949474bbe70f27f6683bb

                                        0,
function(N, d, K, x, T) {
    !L(51, 4, true, N, false, d) && (K = DP(59, 58, 8, 1, N), T = K.FC, x = K.no, N.J == N || x == N.MG && T == N) && (y(N, K.sc, x.apply(T, K.h)), N.K = N.i())
}
                                    

#38 JavaScript::Eval (size: 172, repeated: 1) - SHA256: 0a07a805ea1c6459d33bc2fe5bb84118c7e140b33102a607f66210829319c1b1

                                        0, Bm = function(X, p, m, l, t, c) {
    try {
        l = X[(-2 - 2 * ~p - (p ^ 2) + 2 * (~p & 2)) % 3], X[p] = (c = X[p], t = X[(-2 * ~(p & 1) + -2 + (p ^ 1)) % 3], -~(c & t) + ~(c | t) + 2 * (c & ~t)) - (l | 0) ^ (1 == p ? l << m : l >>> m)
    } catch (N) {
        throw N;
    }
}
                                    

#39 JavaScript::Eval (size: 79, repeated: 1) - SHA256: 36046be11d2a56f02a0ce28e67e84a3010a8831d44c3ec71465d7a03f81bff46

                                        0,
function(N, d, K, x, T) {
    y(N, (d = M((T = (x = D(N, (K = D(N, 58), 56)), M(x, N)), K), N), x), T % d)
}
                                    

#40 JavaScript::Eval (size: 846, repeated: 1) - SHA256: e4f717cbe65eba065fbe137a71c3f7b031f329fb5d26eed5bcedf5ee2bd8a854

                                        b = function(X, p, m, l, t, c, N, d, K, x, T, E, Z) {
    if (14 <= ((X ^ 56) & 19) && 27 > (X | 3))
        if (t = "array" === ui("splice", l, "array") ? l : [l], this.X) m(this.X);
        else try {
            N = !this.l.length, c = [], f(0, 35, [VP, c, t], this), f(0, 38, [nY, m, c], this), p && !N || jZ(null, 0, p, this, true)
        } catch (k) {
            W(0, 22, this, k), m(this.X)
        }
        if (1 == ((X + 6 & 15 || (l = g(0, 8, p), l & m && (l = 127 - ~l + ~(l | 127) | g(0, 8, p) << 7), Z = l), X >> 1 & 19) || (Z = (x = (K = (d = l[t] << 24, c = l[(t | 0) + 1] << m, -~(d & c) + -2 - (~d ^ c)), N = l[(t | 0) + 2] << p, (N | 0) + (K ^ N) + (~K ^ N) - (~K | N)), T = l[(t | 0) + 3], -~x + 2 * (~x & T) + (x | ~T))), X - 7) >> 3) {
            for (N = D(p, 59), t = m; l > m; l--) t = (d = t << 8, c = g(0, 8, p), -(d & c) - 2 * ~d + (d ^ c) + 2 * (~d | c));
            y(p, N, t)
        }
    return 4 == (X + 8 & 13) && (Z = E = function() {
        if (t.J == t) {
            if (t.g) {
                var k = [Gb, N, c, void 0, d, K, arguments];
                if (l == p) var B = jZ(null, 0, (f(0, 34, k, t), m), t, m);
                else if (1 == l) {
                    var w = !t.l.length;
                    f(0, 37, k, t), w && jZ(null, 0, m, t, m)
                } else B = r7(t, 412, 25, k);
                return B
            }
            d && K && d.removeEventListener(K, E, fY)
        }
    }), Z
}
                                    

#41 JavaScript::Eval (size: 585, repeated: 1) - SHA256: 68bd137cd5a61fdfb5f696ab9e157ff75eeb95628298bf1717878f59df0fe99c

                                        0,
function(N, d, K, x, T, E, Z, k, B, w, q, e, J, P, C, R, I) {
    function U(V, Q) {
        for (; R < V;) w |= g(0, 8, N) << R, R += 8;
        return w >>= (Q = w & (1 << (R -= V, V)) - 1, V), Q
    }
    for (T = (Z = (R = w = (d = D(N, 59), 0), E = U(3), 4 + 2 * (E & -2) + (E | -2) + (~E | 1)), q = U(5), I = 0), B = []; I < q; I++) C = U(1), B.push(C), T += C ? 0 : 1;
    for (K = (x = (-2 * ~T + -4 - (T | -2) + (~T | 1)).toString(2).length, k = 0, []); k < q; k++) B[k] || (K[k] = U(x));
    for (J = 0; J < q; J++) B[J] && (K[J] = D(N, 40));
    for (P = (e = Z, []); e--;) P.push(M(D(N, 56), N));
    y(N, d, function(V, Q, xv, li, O3) {
        for (xv = (li = 0, []), Q = []; li < q; li++) {
            if (!B[O3 = K[li], li]) {
                for (; O3 >= Q.length;) Q.push(D(V, 57));
                O3 = Q[O3]
            }
            xv.push(O3)
        }(V.C = D(P.slice(), 11, V), V).G = D(xv, 10, V)
    })
}
                                    

#42 JavaScript::Eval (size: 19, repeated: 1) - SHA256: 5421715bbdaf2550e31d10fc28d444310a8fe7147bbddecf0abb490358a1553b

                                        /.*\d:\d\d | \d+$/g
                                    

#43 JavaScript::Eval (size: 620, repeated: 1) - SHA256: 1bf40ee472f765b9b43e6a5a80758c9418e66114c957168e4f32d8f1e4207271

                                        D = function(X, p, m, l, t, c, N, d, K, x, T, E) {
    return p + (5 <= (p + 5 & 15) && 4 > ((p ^ 37) & 8) && (N = [49, 79, -26, 88, 16, -93, N, -81, -37, -89], d = t & 7, T = oa, x = pY[c.L](c.oT), x[c.L] = function(Z) {
        d += 6 + 7 * (K = Z, t), d &= 7
    }, x.concat = function(Z, k, B, w, q) {
        return (Z = (w = l % m + 1, -w * K + (T() | 0) * w + N[d + 67 & 7] * l * w + 2 * l * l * w - -4424 * K + 56 * K * K + d - 112 * l * l * K - 4424 * l * K), q = N[Z], K = void 0, N)[B = d + 53 & 7, k = t & 2, -2 * ~(B & k) - 2 * (B & ~k) + X * (B ^ k) + 2 * (B | ~k)] = q, N[d + (2 * (t | 0) - (t | 2) - (t | -3) + (~t | 2))] = 79, q
    }, E = x), (p | 40) == p && (X.C ? E = tr(X.G, X) : (l = cU(X, true, 0, 8), l & 128 && (l ^= 128, m = cU(X, true, 0, 2), l = (l << 2) + (m | 0)), E = l)), 5) >> 1 < p && (p - 9 ^ 27) >= p && (l = pY[m.L](m.j9), l[m.L] = function() {
        return X
    }, l.concat = function(Z) {
        X = Z
    }, E = l), E
}
                                    

#44 JavaScript::Eval (size: 72, repeated: 1) - SHA256: c1d7f2661a97bbab35b913d5423c97cca88c75082c327ef40bf69ce90994d02b

                                        0,
function(N, d, K, x) {
    y(N, (K = (d = D(N, (x = D(N, 40), 56)), N.g)[x] && M(x, N), d), K)
}
                                    

#45 JavaScript::Eval (size: 2, repeated: 1) - SHA256: 29f94193b135c8842b64a72126ec8145a2b47c7d346e6919fa6a8ba1331d352f

                                        Ar
                                    

#46 JavaScript::Eval (size: 72, repeated: 1) - SHA256: eead51f8003733acad15d2eaa959dcd9b2140c1ebf5a72d0647efd4e48fd4fbf

                                        0,
function(N, d, K, x) {
    y(N, (x = g(0, 8, (d = D(N, 40), N)), K = D(N, 40), K), M(d, N) << x)
}
                                    

#47 JavaScript::Eval (size: 138, repeated: 1) - SHA256: 4bb1bb93cdc22736aac04494cd7a1de486f24ea1718c16c60623cc3da60afd0d

                                        0,
function(N, d, K, x, T, E, Z, k) {
    y(N, (T = (K = (E = (k = (x = D(N, (Z = D(N, (d = D(N, 56), 57)), 59)), D)(N, 40), M(x, N)), M)(k, N), M(Z, N)), d), b(30, 2, false, K, N, E, T))
}
                                    

#48 JavaScript::Eval (size: 130, repeated: 1) - SHA256: 26b4b8b42cf1306de1236293869c1d05d94921a59d5da4878e4930f3be915e38

                                        mf = function(X, p, m, l, t) {
    if (3 == X.length) {
        for (t = 0; 3 > t; t++) p[t] += X[t];
        for (m = [13, 8, 13, 12, 16, 5, 3, (l = 0, 10), 15]; 9 > l; l++) p[3](p, l % 3, m[l])
    }
}
                                    

#49 JavaScript::Eval (size: 77, repeated: 1) - SHA256: 7be1b3838505cf2485b327b84fa96800174ca1bc231bbd0ee2a3952d38a82786

                                        0,
function(N, d, K, x) {
    0 != (d = (x = (K = D(N, 59), D(N, 59)), M(x, N)), M(K, N)) && y(N, 273, d)
}
                                    

#50 JavaScript::Eval (size: 1, repeated: 1) - SHA256: ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb

                                        a
                                    

#51 JavaScript::Eval (size: 210, repeated: 1) - SHA256: 84bd60e14ed2405306ef512c6dc7424a335cf6e7c146c25d0d623a0b0e15dbe9

                                        0, zb = function(X, p, m, l, t) {
    if ((l = v.trustedTypes, t = m, !l) || !l.createPolicy) return t;
    try {
        t = l.createPolicy(p, {
            createHTML: HU,
            createScript: HU,
            createScriptURL: HU
        })
    } catch (c) {
        if (v.console) v.console[X](c.message)
    }
    return t
}
                                    

#52 JavaScript::Eval (size: 2, repeated: 1) - SHA256: 4cc0c8b95e0a2bda6705b53b9cd1ef9cab386de466cdd4b5898b7b3c6a788e01

                                        qA
                                    

#53 JavaScript::Eval (size: 622, repeated: 1) - SHA256: ab0304b8edf856ffeddb1032f7101dba1cb28179f31e6a9c7be66551a12006d1

                                        0, D = function(X, p, m, l, t, c, N, d, K, x, T, E) {
    return p + (5 <= (p + 5 & 15) && 4 > ((p ^ 37) & 8) && (N = [49, 79, -26, 88, 16, -93, N, -81, -37, -89], d = t & 7, T = oa, x = pY[c.L](c.oT), x[c.L] = function(Z) {
        d += 6 + 7 * (K = Z, t), d &= 7
    }, x.concat = function(Z, k, B, w, q) {
        return (Z = (w = l % m + 1, -w * K + (T() | 0) * w + N[d + 67 & 7] * l * w + 2 * l * l * w - -4424 * K + 56 * K * K + d - 112 * l * l * K - 4424 * l * K), q = N[Z], K = void 0, N)[B = d + 53 & 7, k = t & 2, -2 * ~(B & k) - 2 * (B & ~k) + X * (B ^ k) + 2 * (B | ~k)] = q, N[d + (2 * (t | 0) - (t | 2) - (t | -3) + (~t | 2))] = 79, q
    }, E = x), (p | 40) == p && (X.C ? E = tr(X.G, X) : (l = cU(X, true, 0, 8), l & 128 && (l ^= 128, m = cU(X, true, 0, 2), l = (l << 2) + (m | 0)), E = l)), 5) >> 1 < p && (p - 9 ^ 27) >= p && (l = pY[m.L](m.j9), l[m.L] = function() {
        return X
    }, l.concat = function(Z) {
        X = Z
    }, E = l), E
}
                                    

#54 JavaScript::Eval (size: 134, repeated: 1) - SHA256: ccf6029aec694abdbdf845a750ab91a703afad408ea2ac010baffbc583c1cad7

                                        0, M = function(X, p, m) {
    if (void 0 === (m = p.g[X], m)) throw [XG, 30, X];
    if (m.value) return m.create();
    return (m.create(2 * X * X + 79 * X + -79), m).prototype
}
                                    

#55 JavaScript::Eval (size: 91, repeated: 1) - SHA256: f408733b4982e7e82dffff5ab3d41e92550c4258432adbd66ec4a441191dc29c

                                        0,
function(N, d, K, x, T) {
    y(N, (K = ui("splice", (x = (T = D(N, 58), D(N, 59)), d = M(T, N), d), "array"), x), K)
}
                                    

#56 JavaScript::Eval (size: 1, repeated: 1) - SHA256: a1fce4363854ff888cff4b8e7875d600c2682390412a8cf79b37d0b11148b0fa

                                        y
                                    

#57 JavaScript::Eval (size: 247, repeated: 1) - SHA256: f8c6346300c2bd469a27bb09a3e2295f2a4cebaaa82c837e05b5aa64ca783f8d

                                        0, y = function(X, p, m) {
    if (273 == p || 103 == p) X.g[p] ? X.g[p].concat(m) : X.g[p] = D(m, 9, X);
    else {
        if (X.ZB && 340 != p) return;
        49 == p || 248 == p || 52 == p || 491 == p || 287 == p ? X.g[p] || (X.g[p] = D(3, 3, 16, p, 102, X, m)) : X.g[p] = D(3, 5, 16, p, 9, X, m)
    }
    340 == p && (X.I = cU(X, false, 0, 32), X.Y = void 0)
}
                                    

#58 JavaScript::Eval (size: 2, repeated: 1) - SHA256: 5b9e8d7c728d0b2b84ae148e096e14df85e239fae9b74d73532ac3ec0ee14291

                                        Tx
                                    

#59 JavaScript::Eval (size: 256, repeated: 1) - SHA256: b7d71923c305b31239b09620c81f887efc4ad4707f77b4276fc4064aa56d1856

                                        0, Tx = function(X, p, m, l, t, c, N, d, K, x) {
    for (K = c[x = c[3] | (d = 0, 0), m] | 0; 15 > d; d++) t = t >>> X | t << 24, x = x >>> X | x << 24, t += N | 0, N = N << 3 | N >>> 29, x += K | 0, t ^= K + l, N ^= t, K = K << 3 | K >>> 29, x ^= d + l, K ^= x;
    return [N >>> 24 & 255, N >>> p & 255, N >>> X & 255, N >>> 0 & 255, t >>> 24 & 255, t >>> p & 255, t >>> X & 255, t >>> 0 & 255]
}
                                    

#60 JavaScript::Eval (size: 2, repeated: 1) - SHA256: bfaa1dbaa0d9861ab810b6b031a98e0d3a5086449030224c5bb75d80741ca18a

                                        Wm
                                    

#61 JavaScript::Eval (size: 22, repeated: 1) - SHA256: 2d2bf0943712f631d936723e0827d39b2c644ebb7aa763b55c62133a59a29635

                                        0,
function(N) {
    Ar(N, 2)
}
                                    

#62 JavaScript::Eval (size: 848, repeated: 1) - SHA256: de774d414b18b9c069e230c564eb62dd2807be5e536bf2ac006126c34b2e6e02

                                        0, b = function(X, p, m, l, t, c, N, d, K, x, T, E, Z) {
    if (14 <= ((X ^ 56) & 19) && 27 > (X | 3))
        if (t = "array" === ui("splice", l, "array") ? l : [l], this.X) m(this.X);
        else try {
            N = !this.l.length, c = [], f(0, 35, [VP, c, t], this), f(0, 38, [nY, m, c], this), p && !N || jZ(null, 0, p, this, true)
        } catch (k) {
            W(0, 22, this, k), m(this.X)
        }
        if (1 == ((X + 6 & 15 || (l = g(0, 8, p), l & m && (l = 127 - ~l + ~(l | 127) | g(0, 8, p) << 7), Z = l), X >> 1 & 19) || (Z = (x = (K = (d = l[t] << 24, c = l[(t | 0) + 1] << m, -~(d & c) + -2 - (~d ^ c)), N = l[(t | 0) + 2] << p, (N | 0) + (K ^ N) + (~K ^ N) - (~K | N)), T = l[(t | 0) + 3], -~x + 2 * (~x & T) + (x | ~T))), X - 7) >> 3) {
            for (N = D(p, 59), t = m; l > m; l--) t = (d = t << 8, c = g(0, 8, p), -(d & c) - 2 * ~d + (d ^ c) + 2 * (~d | c));
            y(p, N, t)
        }
    return 4 == (X + 8 & 13) && (Z = E = function() {
        if (t.J == t) {
            if (t.g) {
                var k = [Gb, N, c, void 0, d, K, arguments];
                if (l == p) var B = jZ(null, 0, (f(0, 34, k, t), m), t, m);
                else if (1 == l) {
                    var w = !t.l.length;
                    f(0, 37, k, t), w && jZ(null, 0, m, t, m)
                } else B = r7(t, 412, 25, k);
                return B
            }
            d && K && d.removeEventListener(K, E, fY)
        }
    }), Z
}
                                    

#63 JavaScript::Eval (size: 80, repeated: 1) - SHA256: 52504bde4c97d4e0137251c31c531e2a919a8c435bcc11748646c55f09afe16b

                                        0,
function(N, d, K) {
    (d = D(N, 57), K = M(d, N.J), K)[0].removeEventListener(K[1], K[2], fY)
}
                                    

#64 JavaScript::Eval (size: 26, repeated: 1) - SHA256: 5eae4fa13de449b1cc199587cc9df8bf856240a902da26a9f813a1146ccd4613

                                        0,
function(N) {
    b(18, N, 0, 2)
}
                                    

#65 JavaScript::Eval (size: 77, repeated: 1) - SHA256: 63fc5d597b60d8ad68efcfe1cb6dad6035238ffe80914c86cd59a0314fd621c5

                                        0,
function(N, d, K, x) {
    y(N, (x = D(N, (d = D(N, (K = D(N, 59), 40)), 59)), x), M(K, N) | M(d, N))
}
                                    

#66 JavaScript::Eval (size: 94, repeated: 1) - SHA256: 7d323b5f4986777966bd903bc6b7a20c61484878f07de5fc23a6c4881ebe5a08

                                        0,
function(N, d, K, x, T, E) {
    y(N, (x = (K = M((E = D(N, (T = D(N, (d = D(N, 40), 57)), 56)), T), N), M(d, N)), E), x[K])
}
                                    

#67 JavaScript::Eval (size: 29, repeated: 1) - SHA256: 53e5b7d706a350fe98d52499058624e15cddc1541f17370f94a899a386c50255

                                        document.createElement('img')
                                    

#68 JavaScript::Eval (size: 31, repeated: 1) - SHA256: 6e4c074bba968f3a2899edcbccf9e893ebdad7a5a533463e4d9630f28f3baed1

                                        (a = 0) => {
    let b;
    const c = class {};
}
                                    

#69 JavaScript::Eval (size: 2, repeated: 1) - SHA256: 67d46702379bdb2fb7c228f2c63d639bbabce3d18f4c42915ee0ee09180a7d47

                                        DP
                                    

#70 JavaScript::Eval (size: 1, repeated: 1) - SHA256: 3f39d5c348e5b79d06e842c114e6cc571583bbf44e4b0ebfda1a01ec05745d43

                                        D
                                    

#71 JavaScript::Eval (size: 132, repeated: 1) - SHA256: 8dfc6b977485d59c097fc3be27f14e1a45860be2c2bece5d4f137ddf0fe73006

                                        0, mf = function(X, p, m, l, t) {
    if (3 == X.length) {
        for (t = 0; 3 > t; t++) p[t] += X[t];
        for (m = [13, 8, 13, 12, 16, 5, 3, (l = 0, 10), 15]; 9 > l; l++) p[3](p, l % 3, m[l])
    }
}
                                    

#72 JavaScript::Eval (size: 295, repeated: 1) - SHA256: e24be182f9d05d8252566d1aa2c99c6d602101cd3cc892e57f48268654817137

                                        0,
function(N, d, K, x, T, E, Z, k, B, w, q, e, J, P) {
    if (!L(52, 4, true, N, true, d)) {
        if ("object" == ui((x = M((T = (e = (w = (J = D(N, (Z = D(N, (q = D((E = D(N, 58), N), 59), 40)), 40)), M(Z, N)), M(J, N)), M)(q, N), E), N), "splice"), x, "array")) {
            for (K in k = [], x) k.push(K);
            x = k
        }
        for (w = 0 < (P = 0, B = x.length, w) ? w : 1; P < B; P += w) T(x.slice(P, (P | 0) + (w | 0)), e)
    }
}
                                    

#73 JavaScript::Eval (size: 35, repeated: 1) - SHA256: 1e3606d95ce27d593157594820335681a9380f51a96147303cd8000e60a95e12

                                        document.createElement('div').style
                                    

#74 JavaScript::Eval (size: 132, repeated: 1) - SHA256: 7d02a40769b048f169f2fbe06784aeb8c782e7774aa86864a89e0054f0cf6bee

                                        M = function(X, p, m) {
    if (void 0 === (m = p.g[X], m)) throw [XG, 30, X];
    if (m.value) return m.create();
    return (m.create(2 * X * X + 79 * X + -79), m).prototype
}
                                    

#75 JavaScript::Eval (size: 26, repeated: 1) - SHA256: f9e449f4f50765aa16b3f1b01120cd36db0958b76b08f0fbcf4add8e227aee18

                                        0,
function(N) {
    b(19, N, 0, 4)
}
                                    

#76 JavaScript::Eval (size: 83, repeated: 1) - SHA256: 0cb21d1de060008bab472c15c63e6f15828de601f85deff00d701d26c0f6819a

                                        0,
function(_, $) {
    while (_._ += !(_.$[_[_._] = _[$._]] && _.M.push(_._, _[$._])), $.$ ^ ++$._);
}
                                    

#77 JavaScript::Eval (size: 1, repeated: 1) - SHA256: 3e23e8160039594a33894f6564e1b1348bbd7a0088d42c4acb73eeaed59c009d

                                        b
                                    

#78 JavaScript::Eval (size: 1, repeated: 1) - SHA256: cd0aa9856147b6c5b4ff2b7dfee5da20aa38253099ef1b4a64aced233c9afe29

                                        g
                                    

#79 JavaScript::Eval (size: 22, repeated: 1) - SHA256: 11b222119bcbbcd085c9e770a9373d66b7ed177f0932ac1542a842957252615b

                                        0,
function(N) {
    Fl(0, N)
}
                                    

#80 JavaScript::Eval (size: 355, repeated: 1) - SHA256: 814ce733c46566993084a93752a5e0eeff0353dd624a3e84b7c8945075239ae0

                                        0, cU = function(X, p, m, l, t, c, N, d, K, x, T, E, Z, k, B, w, q) {
    if (q = M(273, X), q >= X.B) throw [XG, 31];
    for (T = (d = (K = (E = m, X.X3.length), l), q); d > m;) k = T % 8, t = 8 - (k | m), B = t < d ? t : d, c = T >> 3, x = X.o[c], p && (w = X, w.Y != T >> 6 && (w.Y = T >> 6, Z = M(340, w), w.hj = Tx(8, 16, 2, 712, w.Y, [0, 0, Z[1], Z[2]], w.I)), x ^= X.hj[c & K]), E |= (x >> 8 - (k | m) - (B | m) & (1 << B) - 1) << (d | m) - (B | m), T += B, d -= B;
    return y(X, 273, (q | m) + (l | (N = E, m))), N
}
                                    

#81 JavaScript::Eval (size: 16, repeated: 1) - SHA256: 49efa81af0708f175b9d7fc090fe28b969521239e7480ff62947a6644436705a

                                        woof_init_text()
                                    

#82 JavaScript::Eval (size: 18, repeated: 1) - SHA256: a3ce9c01558767aecb2bc21610bf9c7a59cf07ae0c469c55a6097302731cc5b5

                                        woof_init_labels()
                                    

#83 JavaScript::Eval (size: 146, repeated: 1) - SHA256: 0b72ca1a0d0ca4846d277f00997d6ea2342adab7c9183f6a51947aea8ccfd923

                                        0,
function(N, d, K, x, T, E, Z) {
    for (K = (d = (T = M(316, (Z = b(42, (E = D(N, 56), N), 128), x = "", N)), T).length, 0); Z--;) K = ((K | 0) + (b(58, N, 128) | 0)) % d, x += t[T[K]];
    y(N, E, x)
}
                                    

#84 JavaScript::Eval (size: 2, repeated: 1) - SHA256: 7817bb812e82168bd48fe1ea6783078d42be37e8db9bdaafdac5c45804aca64f

                                        tr
                                    

#85 JavaScript::Eval (size: 22, repeated: 1) - SHA256: ef10c15820aa74a5533afc7b44a9877c2db6f8bd1568fabdc97d56f1e256768c

                                        0,
function(N) {
    Ar(N, 1)
}
                                    

#86 JavaScript::Eval (size: 449, repeated: 1) - SHA256: 6e806264b8cb42f5bd1760335dc864609d008daa5fff2ae26fedc4706a58b721

                                        0, $M = function(X, p, m, l, t, c, N, d, K, x, T, E) {
    if (!X.ZB) {
        if (3 < (0 == (N = M(491, ((E = void 0, p) && p[0] === XG && (m = p[1], E = p[2], p = void 0), X)), N.length) && (d = M(103, X) >> 3, N.push(m, (c = d >> 8, (c | 0) - -1 + (~c | 255)), d & 255), void 0 != E && N.push(E & 255)), K = "", p && (p.message && (K += p.message), p.stack && (K += l + p.stack)), t = M(160, X), t)) {
            X.J = (K = (K = K.slice(0, (t | 0) - 3), t -= (T = K.length, 2 * (T & 3) + ~T - -4 + 2 * (T & -4)), aa(K, 224)), x = X.J, X);
            try {
                a(F(K.length, 2).concat(K), X, 248, 12)
            } finally {
                X.J = x
            }
        }
        y(X, 160, t)
    }
}
                                    

#87 JavaScript::Eval (size: 56, repeated: 1) - SHA256: ad12d62c6ffc9277537c0df7ba6d4910fd9a6339a9186ba33a4484c5eb76e439

                                        0, g = function(X, p, m) {
    return m.C ? tr(m.G, m) : cU(m, true, X, p)
}
                                    

#88 JavaScript::Eval (size: 2, repeated: 1) - SHA256: e101a3ab8cf72bfdea06d23e6a96ad3af09ca88fc42f22765930f6b2e57d4963

                                        Bm
                                    

#89 JavaScript::Eval (size: 125, repeated: 1) - SHA256: 83452f01c0ea494b36ac43d2c1cfbb2aa4dfc5252c939b9edc96dba9b3c79812

                                        0, Lu = function(X, p, m, l, t, c) {
    return M(473, (y(l, (l8(22, t, m, ((c = M(X, l), l.o) && c < l.B ? (y(l, X, l.B), qA(p, X, l)) : y(l, X, p), l)), X), c), l))
}
                                    

#90 JavaScript::Eval (size: 26, repeated: 1) - SHA256: eea3e8a2f0e323c7f54df5be30d6c2bd2e71b0d7910d836ba738afd572c468e5

                                        0,
function(N) {
    b(20, N, 0, 1)
}
                                    

#91 JavaScript::Eval (size: 212, repeated: 1) - SHA256: ce8c6540e50c1a156e2552adde532f1b42bfb1191077edb048d2fa76e221fa7d

                                        DP = function(X, p, m, l, t, c, N, d, K, x) {
    for (c = (N = D((d = D(t, (K = t[sO] || {}, X)), K.sc = D(t, 56), K.h = [], x = t.J == t ? (g(0, m, t) | 0) - l : 1, t), 56), 0); c < x; c++) K.h.push(D(t, p));
    for (; x--;) K.h[x] = M(K.h[x], t);
    return (K.FC = M(N, t), K).no = M(d, t), K
}
                                    

#92 JavaScript::Eval (size: 331, repeated: 1) - SHA256: 63efb90e7c9b7770903462bfe3c929e62dcd5d6421fb650f114b8b167966f446

                                        Wm = function(X, p, m, l, t, c, N, d, K, x, T, E, Z, k) {
    ((p.push((N = (K = X[0] << 24, Z = X[1] << 16, (K & Z) + ~(K & Z) - ~(K | Z)), E = X[2] << 8, -~E + 2 * (N ^ E) - 2 * (~N & E) + (~N | E)) | X[3]), p).push((x = (m = X[4] << 24 | X[5] << 16, k = X[6] << 8, (k | 0) - 1 - (~m | k)), t = X[7], -~(x & t) + 2 * (x ^ t) - (~x & t) + (~x | t))), p).push((l = (T = X[8] << 24, d = X[9] << 16, (T | 0) + ~(T & d) - ~d), c = X[10] << 8, (l | 0) + (l & c) + ~l - (~l ^ c)) | X[11])
}
                                    

#93 JavaScript::Eval (size: 59, repeated: 1) - SHA256: 8db7228a773d692ab7f5b95c915e7f13e0804eb25785573d76471fa5bd69ffbc

                                        0,
function(N, d, K) {
    y(N, (d = (K = D(N, 57), D(N, 57)), d), "" + M(K, N))
}
                                    

#94 JavaScript::Eval (size: 1, repeated: 1) - SHA256: f67ab10ad4e4c53121b6a5fe4da9c10ddee905b978d3788d2723d7bfacbe28a9

                                        F
                                    

#95 JavaScript::Eval (size: 2, repeated: 1) - SHA256: edfec06e9dfe9c422a8cb1e8af4ecca284082c0b9a16676099d7b73b2df8a78e

                                        l8
                                    

#96 JavaScript::Eval (size: 2, repeated: 1) - SHA256: f00ba4043daa22284ddcff7a215c3a2792bb7dd934362ee1ffe41e68120ccaab

                                        cU
                                    

#97 JavaScript::Eval (size: 1, repeated: 1) - SHA256: 08f271887ce94707da822d5263bae19d5519cb3614e0daedc4c7ce5dab7473f1

                                        M
                                    

#98 JavaScript::Eval (size: 416, repeated: 1) - SHA256: 73a457ce1728cfe19041851c63673ae487ba18fd1eed7c4801ad4a56e1fa5604

                                        0, l8 = function(X, p, m, l, t, c, N, d) {
    if (!l.X) {
        l.XC++;
        try {
            for (d = (t = 0, l.B), c = void 0; --m;) try {
                if (N = void 0, l.C) c = tr(l.C, l);
                else {
                    if ((t = M(273, l), t) >= d) break;
                    c = M((N = D((y(l, 103, t), l), 40), N), l)
                }
                L(48, 4, !(c && c.call ? c(l, m) : $M(l, [XG, 21, N], 0, ":"), 1), l, false, m)
            } catch (K) {
                M(71, l) ? $M(l, K, p, ":") : y(l, 71, K)
            }
            if (!m) {
                if (l.S9) {
                    l8(22, X, (l.XC--, 111812526819), l);
                    return
                }
                $M(l, [XG, 33], 0, ":")
            }
        } catch (K) {
            try {
                $M(l, K, p, ":")
            } catch (x) {
                W(0, 19, l, x)
            }
        }
        l.XC--
    }
}
                                    

#99 JavaScript::Eval (size: 253, repeated: 1) - SHA256: 5feaf10d8a3c894a66362cd38d4eba62482aac71ebe570d8241b1de0945e2e1b

                                        0,
function(N, d, K, x, T, E, Z, k, B) {
    L(50, 4, true, N, false, d) || (Z = DP(59, 58, 8, 1, N.J), k = Z.h, E = Z.sc, K = k.length, x = Z.FC, T = Z.no, B = 0 == K ? new x[T] : 1 == K ? new x[T](k[0]) : 2 == K ? new x[T](k[0], k[1]) : 3 == K ? new x[T](k[0], k[1], k[2]) : 4 == K ? new x[T](k[0], k[1], k[2], k[3]) : 2(), y(N, E, B))
}
                                    

#100 JavaScript::Eval (size: 413, repeated: 1) - SHA256: ea761e51fa679abfb1d709ef0c26bb25e330aef04a16a7866e7191bfda7de63a

                                        0, a = function(X, p, m, l, t, c, N, d, K) {
    if (p.J == p)
        for (t = M(m, p), 248 == m ? (N = function(x, T, E, Z, k, B) {
                if (t.Uc != (Z = (B = t.length, -3 * ~B) + 3 * ~(B | 4) - (B & -5) + 2 * (B ^ 4) >> 3, Z)) {
                    E = (T = Z << 3, (k = [0, 0, K[1], K[2]], -1 - 2 * ~T + 2 * ~(T | 4)) - (~(t.Uc = Z, T) ^ 4));
                    try {
                        t.fo = Tx(8, 16, 2, 712, b(24, 8, 16, t, (E | 0) + 4), k, b(25, 8, 16, t, E))
                    } catch (w) {
                        throw w;
                    }
                }
                t.push(t.fo[-~(B & 7) + (~B & 7) + (B | -8)] ^ x)
            }, K = M(287, p)) : N = function(x) {
                t.push(x)
            }, l && N(l & 255), d = X.length, c = 0; c < d; c++) N(X[c])
}
                                    

#101 JavaScript::Eval (size: 214, repeated: 1) - SHA256: 58c9bc3de1e5c34d26fd19e556aa94e2b736b2f36198741de3f03e636df8b869

                                        0, DP = function(X, p, m, l, t, c, N, d, K, x) {
    for (c = (N = D((d = D(t, (K = t[sO] || {}, X)), K.sc = D(t, 56), K.h = [], x = t.J == t ? (g(0, m, t) | 0) - l : 1, t), 56), 0); c < x; c++) K.h.push(D(t, p));
    for (; x--;) K.h[x] = M(K.h[x], t);
    return (K.FC = M(N, t), K).no = M(d, t), K
}
                                    

#102 JavaScript::Eval (size: 19, repeated: 1) - SHA256: 3dc9a012faf39db2b4ea3ebd9af185079b780ee6a4a13c62872f556e3f72fabd

                                        woof_init_onsales()
                                    

#103 JavaScript::Eval (size: 292, repeated: 1) - SHA256: a5f6423e88e39296b91ccb6e5c0f33d9993d2ccc36310b051a92537ebe413db2

                                        0,
function(N, d, K, x, T, E, Z, k, B) {
    for (E = 0, k = [], K = d = 0; d < N.d.length;) {
        for (Z = "", T = N.d[d++]; Z.length != T;) {
            for (; N.M[E] == K;) Z += t[N.M[++E]], E++;
            if (Z.length == T) break;
            Z += t[N[K++]]
        }
        if (B = N.d[d++]) x = 1 == B ? Z : B.match(/=$/) ? B + Z : "this." + B + "=" + Z, k.push(eval(Pm("0," + x)))
    }
    return (delete N.M, delete N.d, N).length = 0, k
}
                                    

#104 JavaScript::Eval (size: 22, repeated: 1) - SHA256: 0925ce7c4216fa0de191ad604a2275d9ecc3c82928b41c76ae2f8eca45637f57

                                        0,
function(N) {
    Ar(N, 4)
}
                                    

#105 JavaScript::Eval (size: 73, repeated: 1) - SHA256: 5a0ff074ddbf8186bead6120ec039498964f6cd81f2dfd6c80869a0c03148f4e

                                        0,
function(N, d, K, x) {
    y(N, (x = g(0, 8, (d = D(N, 40), N)), K = D(N, 40), K), M(d, N) >>> x)
}
                                    

#106 JavaScript::Eval (size: 140, repeated: 1) - SHA256: 0d3bc26d8e007773905f3965cabd9c12b654d4f9aa53ed7567dd579e87ddab60

                                        0,
function(N, d, K, x) {
    if (x = N.Ec.pop()) {
        for (K = g(0, 8, N); 0 < K; K--) d = D(N, 59), x[d] = N.g[d];
        x[160] = (x[491] = N.g[491], N.g[160]), N.g = x
    } else y(N, 273, N.B)
}
                                    

#107 JavaScript::Eval (size: 54, repeated: 1) - SHA256: 598259e42872d057177e3bac5ab339e011125da92c0622ef73d71e1d05701bcf

                                        g = function(X, p, m) {
    return m.C ? tr(m.G, m) : cU(m, true, X, p)
}
                                    

#108 JavaScript::Eval (size: 2, repeated: 1) - SHA256: 477655c5416b627f19ddd7c6e61ea828d34dcef0f42603319d1c5fdb6ee1eea3

                                        Fl
                                    

#109 JavaScript::Eval (size: 115, repeated: 1) - SHA256: 845f0a89c9d1c8d216c97173a4b07cb46bcba05f2f38f8e491dd330e4577a5d9

                                        0,
function(N, d, K, x) {
    L(49, 4, true, N, false, d) || (x = D(N, 57), K = D(N, 56), y(N, K, function(T) {
        return eval(T)
    }(Pm(M(x, N.J)))))
}
                                    

Executed Writes (0)



HTTP Transactions (181)


Request Response
                                        
                                            GET /v1/ HTTP/1.1 
Host: firefox.settings.services.mozilla.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site

                                         
                                         143.204.55.36
HTTP/1.1 200 OK
Content-Type: application/json
                                        
Content-Length: 939
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: Content-Length, Content-Type, Alert, Backoff, Retry-After
Content-Security-Policy: default-src 'none'; frame-ancestors 'none'; base-uri 'none';
Date: Tue, 13 Sep 2022 03:08:39 GMT
Strict-Transport-Security: max-age=31536000
X-Content-Type-Options: nosniff
X-Cache: Hit from cloudfront
Via: 1.1 9dd61138197a68f8d69f12574aab6930.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: OSL50-C1
X-Amz-Cf-Id: vHZC4OON4NJNUxpQAAkrFr9g0quOot4B0QaIxMirLr7IbFbPCTV-lQ==
Age: 2703


--- Additional Info ---
Magic:  JSON data\012- , ASCII text, with very long lines (939), with no line terminators
Size:   939
Md5:    91dd975a7b17b2922dd23c0e49314e40
Sha1:   57a2ece1e3cee7c4ebf927f2ba92f52cac395fe2
Sha256: 09966873bbf317f8910c59544cfde2a6d46e8acd2905797cc7c85c6b4d18ea8a
                                        
                                            POST / HTTP/1.1 
Host: r3.o.lencr.org
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/ocsp-request
Content-Length: 85
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

                                         
                                         23.33.119.27
HTTP/1.1 200 OK
Content-Type: application/ocsp-response
                                        
Server: nginx
Content-Length: 503
ETag: "D16DE6CC9EB0E1297F53DC1137BB764BF5C21A7727BE32AD05AFEBD1FE9501ED"
Last-Modified: Sat, 10 Sep 2022 18:00:00 UTC
Cache-Control: public, no-transform, must-revalidate, max-age=8270
Expires: Tue, 13 Sep 2022 06:11:32 GMT
Date: Tue, 13 Sep 2022 03:53:42 GMT
Connection: keep-alive

                                        
                                            GET /chains/remote-settings.content-signature.mozilla.org-2022-10-09-23-18-04.chain HTTP/1.1 
Host: content-signature-2.cdn.mozilla.net
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: cross-site

                                         
                                         143.204.55.110
HTTP/2 200 OK
content-type: binary/octet-stream
                                        
content-length: 5348
last-modified: Sat, 20 Aug 2022 23:18:05 GMT
content-disposition: attachment
accept-ranges: bytes
server: AmazonS3
date: Mon, 12 Sep 2022 07:17:13 GMT
etag: "742edb4038f38bc533514982f3d2e861"
x-cache: Hit from cloudfront
via: 1.1 057fdebf738f5915bf38a78949190758.cloudfront.net (CloudFront)
x-amz-cf-pop: OSL50-C1
x-amz-cf-id: zcSBJ9xU-SvJd_QIUyft1VqNS9CiecHv8ii3YNsjpHnjJ5xDowh_CA==
age: 74190
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  PEM certificate\012- , ASCII text
Size:   5348
Md5:    742edb4038f38bc533514982f3d2e861
Sha1:   cc3a20c8dc2a8c632ef9387a2744253f1e3fdef1
Sha256: b6bfa49d3d135035701231db2fffc0c0643444394009a94c6a1b4d829d6b8345
                                        
                                            GET / HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1

                                         
                                         66.29.132.23
HTTP/1.1 301 Moved Permanently
content-type: text/html
                                        
keep-alive: timeout=5, max=100
content-length: 707
date: Tue, 13 Sep 2022 03:53:42 GMT
server: LiteSpeed
location: https://hareksaman999.com/
x-turbo-charged-by: LiteSpeed


--- Additional Info ---
Magic:  HTML document text\012- HTML document text\012- HTML document text\012- HTML document text\012- exported SGML document, ASCII text, with CRLF, LF line terminators
Size:   707
Md5:    1304294c0823ca486542ba408ed761e3
Sha1:   b2a70fb2d810ca13985882e6981f33998823e83e
Sha256: 3bbe72f3baa8ec61de17a1d767fca58704769684b7abe9161d0c4eaf4c8f0982

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /v1/tiles HTTP/1.1 
Host: contile.services.mozilla.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site

                                         
                                         34.117.237.239
HTTP/2 200 OK
content-type: application/json
                                        
server: nginx
date: Tue, 13 Sep 2022 03:53:42 GMT
content-length: 12
strict-transport-security: max-age=31536000
via: 1.1 google
alt-svc: clear
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  JSON data\012- , ASCII text, with no line terminators
Size:   12
Md5:    23e88fb7b99543fb33315b29b1fad9d6
Sha1:   a48926c4ec03c7c8a4e8dffcd31e5a6cdda417ce
Sha256: 7d8f1de8b7de7bc21dfb546a1d0c51bf31f16eee5fad49dbceae1e76da38e5c3
                                        
                                            GET /v1/buckets/main/collections/ms-language-packs/records/cfr-v1-en-US HTTP/1.1 
Host: firefox.settings.services.mozilla.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: application/json
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/json
Connection: keep-alive
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site

                                         
                                         143.204.55.36
HTTP/1.1 200 OK
Content-Type: application/json
                                        
Content-Length: 329
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: ETag, Expires, Content-Length, Cache-Control, Pragma, Content-Type, Alert, Backoff, Last-Modified, Retry-After
Content-Security-Policy: default-src 'none'; frame-ancestors 'none'; base-uri 'none';
Last-Modified: Fri, 25 Mar 2022 17:45:46 GMT
Strict-Transport-Security: max-age=31536000
X-Content-Type-Options: nosniff
Date: Tue, 13 Sep 2022 03:03:22 GMT
Cache-Control: max-age=3600
Expires: Tue, 13 Sep 2022 03:59:26 GMT
ETag: "1648230346554"
X-Cache: Hit from cloudfront
Via: 1.1 41dc61beb3fe8e8c2c299a2522d8330c.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: OSL50-C1
X-Amz-Cf-Id: S3ZAS9IACNdh-rqVi6K5SnNYdKN-IcQp1rW3pj3P7vSdOqKO-7KRxg==
Age: 3020


--- Additional Info ---
Magic:  JSON data\012- , ASCII text, with very long lines (329), with no line terminators
Size:   329
Md5:    0333b0655111aa68de771adfcc4db243
Sha1:   63f295a144ac87a7c8e23417626724eeca68a7eb
Sha256: 60636eb1dc67c9ed000fe0b49f03777ad6f549cb1d2b9ff010cf198465ae6300
                                        
                                            POST / HTTP/1.1 
Host: ocsp.sectigo.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/ocsp-request
Content-Length: 84
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

                                         
                                         172.64.155.188
HTTP/1.1 200 OK
Content-Type: application/ocsp-response
                                        
Date: Tue, 13 Sep 2022 03:53:42 GMT
Content-Length: 472
Connection: keep-alive
Last-Modified: Sat, 10 Sep 2022 07:43:50 GMT
Expires: Sat, 17 Sep 2022 07:43:49 GMT
Etag: "0eed8db6743c791ae6c076f2fb31f3f3424b8a06"
Cache-Control: max-age=358806,s-maxage=1800,public,no-transform,must-revalidate
X-CCACDN-Proxy-ID: mcdpinlb1
X-Frame-Options: SAMEORIGIN
CF-Cache-Status: DYNAMIC
Server: cloudflare
CF-RAY: 749deffa2a220b69-OSL

                                        
                                            POST / HTTP/1.1 
Host: ocsp.digicert.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/ocsp-request
Content-Length: 83
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

                                         
                                         93.184.220.29
HTTP/1.1 200 OK
Content-Type: application/ocsp-response
                                        
Accept-Ranges: bytes
Age: 1015
Cache-Control: 'max-age=158059'
Date: Tue, 13 Sep 2022 03:53:43 GMT
Last-Modified: Tue, 13 Sep 2022 03:36:48 GMT
Server: ECS (ska/F6FD)
X-Cache: HIT
Content-Length: 471

                                        
                                            GET / HTTP/1.1 
Host: push.services.mozilla.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Sec-WebSocket-Version: 13
Origin: wss://push.services.mozilla.com/
Sec-WebSocket-Protocol: push-notification
Sec-WebSocket-Extensions: permessage-deflate
Sec-WebSocket-Key: EE+IHclEU1JgH7DSUB24RA==
Connection: keep-alive, Upgrade
Sec-Fetch-Dest: websocket
Sec-Fetch-Mode: websocket
Sec-Fetch-Site: cross-site
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket

                                         
                                         35.164.47.107
HTTP/1.1 101 Switching Protocols
                                        
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: jjIu8vn1F/TE8/qubD4sF2UiLnk=

                                        
                                            POST /gts1c3 HTTP/1.1 
Host: ocsp.pki.goog
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/ocsp-request
Content-Length: 84
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

                                         
                                         142.250.74.3
HTTP/1.1 200 OK
Content-Type: application/ocsp-response
                                        
Date: Tue, 13 Sep 2022 03:53:43 GMT
Cache-Control: public, max-age=14400
Server: ocsp_responder
Content-Length: 472
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN

                                        
                                            POST /gts1c3 HTTP/1.1 
Host: ocsp.pki.goog
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/ocsp-request
Content-Length: 84
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

                                         
                                         142.250.74.3
HTTP/1.1 200 OK
Content-Type: application/ocsp-response
                                        
Date: Tue, 13 Sep 2022 03:53:43 GMT
Cache-Control: public, max-age=14400
Server: ocsp_responder
Content-Length: 472
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN

                                        
                                            GET /css?family=Poppins%3A400%2C600%2C500%2C700&1&display=swap&ver=2.1.3 HTTP/1.1 
Host: fonts.googleapis.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: cross-site

                                         
                                         142.250.74.10
HTTP/2 200 OK
content-type: text/css; charset=utf-8
                                        
access-control-allow-origin: *
timing-allow-origin: *
link: <https://fonts.gstatic.com>; rel=preconnect; crossorigin
strict-transport-security: max-age=31536000
expires: Tue, 13 Sep 2022 03:53:43 GMT
date: Tue, 13 Sep 2022 03:53:43 GMT
cache-control: private, max-age=86400
cross-origin-opener-policy: same-origin-allow-popups
cross-origin-resource-policy: cross-origin
content-encoding: gzip
server: ESF
x-xss-protection: 0
x-frame-options: SAMEORIGIN
x-content-type-options: nosniff
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
X-Firefox-Spdy: h2

                                        
                                            GET /b/paypal-logo-printed-paper-chisinau-moldova-september-internet-based-digital-money-transfer-service-128373487.jpg HTTP/1.1 
Host: thumbs.dreamstime.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: image/avif,image/webp,*/*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: image
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: cross-site

                                         
                                         192.229.233.122
HTTP/2 200 OK
content-type: image/jpeg
                                        
accept-ranges: bytes
access-control-allow-origin: *
age: 24735860
cache-control: max-age=31536000
date: Tue, 13 Sep 2022 03:53:43 GMT
etag: "3845584727"
expires: Wed, 13 Sep 2023 03:53:43 GMT
last-modified: Tue, 09 Oct 2018 20:03:41 GMT
server: ECS (ska/F6FC)
x-cache: HIT
content-length: 29840
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  JPEG image data, JFIF standard 1.01, resolution (DPI), density 300x300, segment length 16, progressive, precision 8, 800x801, components 3\012- data
Size:   29840
Md5:    6db00812e549040c8ff8976e44fb6cb2
Sha1:   3f4e101a09a8ac1ff7a819898a61900ee97f220b
Sha256: 21769a8016f92aded3008e282fd509c1c326f54950b96968fa1ab08f1817315e
                                        
                                            POST /gts1c3 HTTP/1.1 
Host: ocsp.pki.goog
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/ocsp-request
Content-Length: 84
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

                                         
                                         142.250.74.3
HTTP/1.1 200 OK
Content-Type: application/ocsp-response
                                        
Date: Tue, 13 Sep 2022 03:53:43 GMT
Cache-Control: public, max-age=14400
Server: ocsp_responder
Content-Length: 472
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN

                                        
                                            POST / HTTP/1.1 
Host: ocsp.digicert.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/ocsp-request
Content-Length: 83
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

                                         
                                         93.184.220.29
HTTP/1.1 200 OK
Content-Type: application/ocsp-response
                                        
Accept-Ranges: bytes
Age: 4261
Cache-Control: 'max-age=158059'
Date: Tue, 13 Sep 2022 03:53:43 GMT
Last-Modified: Tue, 13 Sep 2022 02:42:43 GMT
Server: ECS (ska/F6FD)
X-Cache: HIT
Content-Length: 471

                                        
                                            GET /gtag/js?id=UA-228914276-1 HTTP/1.1 
Host: www.googletagmanager.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: cross-site

                                         
                                         142.250.74.72
HTTP/2 200 OK
content-type: application/javascript; charset=UTF-8
                                        
access-control-allow-origin: *
access-control-allow-credentials: true
access-control-allow-headers: Cache-Control
content-encoding: br
vary: Accept-Encoding
date: Tue, 13 Sep 2022 03:53:43 GMT
expires: Tue, 13 Sep 2022 03:53:43 GMT
cache-control: private, max-age=900
last-modified: Tue, 13 Sep 2022 03:00:00 GMT
strict-transport-security: max-age=31536000; includeSubDomains
cross-origin-resource-policy: cross-origin
server: Google Tag Manager
content-length: 41968
x-xss-protection: 0
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (1615)
Size:   41968
Md5:    8c62be7e91be91d83f02b31c83a5929f
Sha1:   cc7915618700456b1db17527f9f2567f763ceebd
Sha256: fdb9e59600b96c8c59783cb9c79432911bceb6ebec0d12e6662a4e5d3836eab0
                                        
                                            GET /v3/?ver=1.4.6 HTTP/1.1 
Host: js.stripe.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: cross-site

                                         
                                         151.101.84.176
HTTP/2 200 OK
content-type: text/javascript; charset=utf-8
                                        
last-modified: Mon, 12 Sep 2022 20:53:26 GMT
etag: "36f589ca79cbbf198e9d4ac96dfa46be"
cache-control: max-age=60
strict-transport-security: max-age=31556926; includeSubDomains; preload
x-content-type-options: nosniff
access-control-allow-origin: *
server: Fastly
content-encoding: br
accept-ranges: bytes
date: Tue, 13 Sep 2022 03:53:43 GMT
via: 1.1 varnish
age: 19
x-request-id: 65bbaa3d-96e0-4009-89a4-b7ebddbf5623
x-served-by: cache-bma1658-BMA
x-cache: HIT
x-cache-hits: 1
vary: Accept-Encoding
timing-allow-origin: *
content-length: 83016
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (65536), with no line terminators
Size:   83016
Md5:    527416ab796bd758e836f950a8a1860a
Sha1:   c7f9bffc82f3e6256bb906fab7b5af6c431d82a5
Sha256: e840c73e40fcc1cc29526180e10147bb63528b9eca379157811bad54be61dae4
                                        
                                            POST /gts1c3 HTTP/1.1 
Host: ocsp.pki.goog
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/ocsp-request
Content-Length: 84
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

                                         
                                         142.250.74.3
HTTP/1.1 200 OK
Content-Type: application/ocsp-response
                                        
Date: Tue, 13 Sep 2022 03:53:43 GMT
Cache-Control: public, max-age=14400
Server: ocsp_responder
Content-Length: 472
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN

                                        
                                            GET /wp-content/plugins/gtranslate/gtranslate-style24.css?ver=6.0.1 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Thu, 04 Aug 2022 07:11:47 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 237
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text
Size:   237
Md5:    83042c9c72bc38390b52906120f81c35
Sha1:   98a9789c05c0f981dca01d2c3622b5e458ba7589
Sha256: a193b2efbe3e706cc8c633fff822f5a64eb0ee5f692c4a3495f3c7e58e8b7637

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-includes/css/dist/block-library/style.min.css?ver=6.0.1 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Tue, 02 Aug 2022 21:40:58 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 10946
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (43771)
Size:   10946
Md5:    d45207ee05c1f0c57dfa075e61405ccd
Sha1:   a8d35143a2d828a739ea0fdde75f97d33621e7ec
Sha256: a9a4adbbcee31ec277f1bdd573eef97dc4341f29f2db3b5685a02dfe4d2fe9bb

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/woocommerce/packages/woocommerce-blocks/build/wc-blocks-vendors-style.css?ver=8.0.0 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Wed, 19 Jan 2022 02:24:34 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 1109
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (4933), with no line terminators
Size:   1109
Md5:    8f2da34c6f082c7bec00f9cca661fd59
Sha1:   d0de5b6b29a9788a64826b833465a9d08f7c2ab7
Sha256: d461fea6636b26aab698f636b2518709cb79416c7d3916d6b03497c4d75befdd
                                        
                                            GET /wp-content/plugins/invoicing/vendor/ayecode/wp-ayecode-ui/assets/css/ayecode-ui-compatibility.css?ver=0.1.72 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Wed, 22 Jun 2022 12:21:18 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 32985
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (65067)
Size:   32985
Md5:    77ab55385c33a3da2a1bcf571cedc783
Sha1:   35f61cfad3b914cc62e55c1d18da73b1727c6802
Sha256: 4f04cd8650c51d8f1dae3005e1f9a8ddbde1e69e2153b53bfb41f2b17f02ab58

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /searchengine/wordpress/esewa.png HTTP/1.1 
Host: uploads.commoninja.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: image/avif,image/webp,*/*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: image
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: cross-site

                                         
                                         172.67.41.30
HTTP/2 200 OK
content-type: image/png
                                        
date: Tue, 13 Sep 2022 03:53:44 GMT
content-length: 5946
last-modified: Tue, 04 May 2021 10:24:49 GMT
etag: "6631bb45c903abbc48ca34cd8e15fa04"
cache-control: max-age=31536000
x-cache: Hit from cloudfront
via: 1.1 c2b101e67ac25a2f0013450d56ecac38.cloudfront.net (CloudFront)
x-amz-cf-pop: OSL50-P1
x-amz-cf-id: OM_Atl2kTM9wn9Csb4L2EKy45hGsDzZpcGIPLzaIXIssA5Nazj0Tfg==
cf-cache-status: MISS
accept-ranges: bytes
vary: Accept-Encoding
server: cloudflare
cf-ray: 749defff4c51b529-OSL
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  PNG image data, 256 x 255, 8-bit/color RGBA, non-interlaced\012- data
Size:   5946
Md5:    6631bb45c903abbc48ca34cd8e15fa04
Sha1:   397ea79abdea8c4ba7da2a62528df4ce4018f100
Sha256: e0e90364d4fec3bfae48dccee0c6dc6251e06fb19280027738e7cf1fbc13d146
                                        
                                            GET /wp-content/plugins/woocommerce/packages/woocommerce-blocks/build/wc-blocks-style.css?ver=8.0.0 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Tue, 26 Jul 2022 07:28:46 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 20786
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  Unicode text, UTF-8 text, with very long lines (65527), with no line terminators
Size:   20786
Md5:    844842439ba060ee255a40ec00e69ff5
Sha1:   a37c3b78aeea3c7d58a6e59bfa99ff3d81ec5b8c
Sha256: 169af0ea951379b0d2a47976e8e76c6684fb2c92146e23c31e57079b9cacdba2

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/Perfect-Money-Custom-Payment-Getway-By-mdazizul.com_/css/style.css?ver=6.0.1 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Thu, 04 Aug 2022 11:57:51 GMT
accept-ranges: bytes
content-length: 173
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text
Size:   173
Md5:    d4ed8928e0ec1ba709cb82a552074cef
Sha1:   9683266fd8d020395b19eb436b58e9707de6c59f
Sha256: 8af9da4b89d8406be2692e744a5d144865f505369e54275b9288becc0f2a662f

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/everest-forms/assets/css/everest-forms.css?ver=1.9.2 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Thu, 03 Feb 2022 15:47:28 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 3656
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (31693), with no line terminators
Size:   3656
Md5:    850cb80039a0c9e97f6a64e7be629fe2
Sha1:   7130e825db863c36d6f3994fbbbbe5ad940e83c0
Sha256: 1e53bcf1ee63baa2a75f6ac1cfc8256a6b85208e2cd861aabf6e2bd151439b13

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/add-to-cart-direct-checkout-for-woocommerce/public/css/pi-dcw-public.css?ver=2.1.33 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Wed, 14 Apr 2021 08:48:28 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 294
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with CRLF line terminators
Size:   294
Md5:    e52994b2f95d8cf696d0f6080875cebe
Sha1:   ed50472c8a2768889869f1a5fac82728682b174d
Sha256: 71496e13203d537ccbe993281143b9b686cc297d9e6a63fdf1dc92f2850478c4

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/woo-multi-currency/css/woo-multi-currency.min.css?ver=2.1.23 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Thu, 02 Jun 2022 08:17:48 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 2038
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  Unicode text, UTF-8 text, with very long lines (13451), with no line terminators
Size:   2038
Md5:    b11408ee636e62f2e36cdf26745ddbb5
Sha1:   479d8da82e4801df5fe622f1f10192ab67628957
Sha256: 22c5d9899a4c54b482e745cf4e0257eb0763d5c75aeefce73d9cbdba9aae9a29
                                        
                                            GET /wp-includes/css/dashicons.min.css?ver=6.0.1 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Thu, 04 Mar 2021 07:46:22 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 35110
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (58981)
Size:   35110
Md5:    54c5bfb8a890d87139d9abfe01662c83
Sha1:   f9eddf5b8a3269e6d6fa40b4f13083705e6267c6
Sha256: 9685e5cabe4efc8c85e986725af8009b306416aad3ecc9086ca5bb12b84ce4ef

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/woo-multi-currency/css/flags-64.min.css?ver=6.0.1 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Mon, 20 Jun 2022 11:27:30 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 1173
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (14739), with no line terminators
Size:   1173
Md5:    b80bd1a7c686d5f2e06e43f77614b55b
Sha1:   c0f9de2777e079f151dbbc6442f55ef410c00b08
Sha256: 8f465f4931fc3107b427bdecc12e164bbb9993fc577d38d9c239f7819ea2ea94

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/woocommerce-products-filter/css/front.css?ver=1.2.9.2 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Tue, 21 Jun 2022 14:01:22 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 4742
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text
Size:   4742
Md5:    3bb3505a7313fd3f22253d4d4d2601d9
Sha1:   225e45eb1f74e359eb1e976e224233e39e8469f3
Sha256: 7db6012d53de03f79ae6b502488144dad085fbd86f7e7fb44e741a01c18a4d0d

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/woocommerce-products-filter/js/icheck/skins/square/blue.css?ver=1.2.9.2 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Wed, 04 Aug 2021 02:31:18 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 374
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text
Size:   374
Md5:    49f3c42606c699a26fbd8d5061465c96
Sha1:   c7b7c74bef242a00f8fc66832696ec9af9704502
Sha256: 14e899427a89ea5a2f22a05a6b8e947d3b7370981d5b88692a0de2eaebee7723

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/woocommerce-products-filter/js/chosen/chosen.min.css?ver=1.2.9.2 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Tue, 21 Jun 2022 14:01:22 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 1898
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (372)
Size:   1898
Md5:    0602c912830844719cf5132c86066e8e
Sha1:   1a1b17a9672c6efadf66e32c0a2db9db9fb448a8
Sha256: a4afd9a6f79e825c9bb15b034f9e75e7a41b7e20f8b693f376c368b4e0d5b88b
                                        
                                            GET /wp-content/plugins/woocommerce-products-filter/ext/by_onsales/css/by_onsales.css?ver=1.2.9.2 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Mon, 23 Sep 2019 16:18:06 GMT
accept-ranges: bytes
content-length: 57
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text
Size:   57
Md5:    cf3a71f4f059554809a6c493edab94b3
Sha1:   9e60e866175163112070257aee5019a825c8a024
Sha256: 46c9eb24d0df1f5ebcc4885f9b7eedc7de9998fd9052116b25a5f0fd2a90bc97
                                        
                                            GET /wp-content/plugins/woocommerce-products-filter/ext/label/css/html_types/label.css?ver=1.2.9.2 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Tue, 21 Jun 2022 14:01:22 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 344
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text
Size:   344
Md5:    88830c96068a2ae24d2b79773f723fc6
Sha1:   e17ff5f2c6669aa94714dc7b48070eb8158cc343
Sha256: e4a00fd7450a9709046662bcf0a18f370cbd05219858344e36d35f5a919083cd

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/woocommerce/assets/css/woocommerce-layout.css?ver=6.8.0 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Wed, 22 Dec 2021 00:24:58 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 2329
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (17809), with no line terminators
Size:   2329
Md5:    09d93f4de720fc11a2944fea38fcafcd
Sha1:   e46cf6a8d3373c7fa5feba0b30cd9b9983f719b2
Sha256: cf900721be13309b96cf6c6f56b1c0a40194e8aea1b0a0361739219c9c0f9998

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/themes/zakra/assets/css/woocommerce.css?ver=2.1.3 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Thu, 11 Aug 2022 09:30:48 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 1970
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (522)
Size:   1970
Md5:    19c02208b3af384a58b2b9717027072a
Sha1:   acbd88cf91eac48ec12289282c8aa8866e2dce63
Sha256: 0aa7cd0deb7137ac5334ea8547d1dd0b1f424a748fb37fb7c088275bfc0100c2
                                        
                                            GET /wp-content/plugins/woocommerce/assets/css/woocommerce.css?ver=6.8.0 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Wed, 22 Dec 2021 00:24:58 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 8432
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  Unicode text, UTF-8 text, with very long lines (62753), with no line terminators
Size:   8432
Md5:    60aea8fe062ea93aa6dfa342ea23b7fd
Sha1:   bf9a4843acf8f1f116ef2cae7fb40a9a2f37253a
Sha256: 7db430ef3124de87a8a33cf0ffe134a86bff67de803eea16f4b3ed4d2d569d4f

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/woocommerce-products-filter/ext/by_text/assets/css/front.css?ver=1.2.9.2 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Fri, 15 Jul 2022 02:57:08 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 1190
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text
Size:   1190
Md5:    4c6cd7ec2afc77161c9e8cc6e4a987f4
Sha1:   4a85cecdff2c926fad0f84836e4fdd98418de694
Sha256: c1d3b560fd41e4c36d71646846ca79e18b19d27907170f5f713321664afa4522

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/themes/zakra/style.css?ver=2.1.3 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Thu, 11 Aug 2022 09:30:48 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 9461
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (1208)
Size:   9461
Md5:    8938872d51823ebabf99b7637e9537ee
Sha1:   5a7074a3bddfaef7d87447f3bf06af8adbb83f19
Sha256: 24a9b7b2f9298cbb910645e0d1955160236d38a7f8f36fd7fb070c4e66414901

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/elementor/assets/lib/font-awesome/css/v4-shims.min.css?ver=3.7.1 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Thu, 17 Jun 2021 14:07:24 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 3987
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (26516)
Size:   3987
Md5:    32699c444a181cd316ee6cb56688144a
Sha1:   1366537c3db165e86947a2e963407283a1ea5b58
Sha256: 6b6910bbb4dacf40ae040c445dd7dd1871097c97a1520b6d5f528d7d88c072a4

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/elementor-pro/assets/css/frontend-lite.min.css?ver=3.6.5 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Wed, 11 May 2022 23:32:23 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 1505
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (11362)
Size:   1505
Md5:    18aae71c1a70ffd06aeb9df0e1cfbe0f
Sha1:   6638ca18792459391a21f0f3ac867dd919d99b8c
Sha256: dbdf44256dbb506f3921c9beaccd92ec124b58d8c5e7ceae96712cc4fed4f403
                                        
                                            GET /wp-content/plugins/elementor/assets/lib/font-awesome/css/regular.min.css?ver=5.15.3 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Thu, 17 Jun 2021 14:07:24 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 283
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (491)
Size:   283
Md5:    453a93dc816be89f942ebb253ff199fb
Sha1:   01563d6019803e3ff2a94c5397e7e771ee6f440d
Sha256: 36beebcd3778e04c8973faa581d07c7e7dc0bac2a77f637379e7d110383ab5d7

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/elementor/assets/lib/font-awesome/css/all.min.css?ver=3.7.1 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Thu, 17 Jun 2021 14:07:24 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 12380
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (59158)
Size:   12380
Md5:    178f113615fea1b059cb42a9fcc9bb3d
Sha1:   a309d33fbab460ecc17467c18f99825c03ce039c
Sha256: 9fc6c8540b2078cfcec74cbd21ef6cedf7e2a4ec99d46a4868111eb601572859
                                        
                                            GET /wp-content/plugins/elementor/assets/lib/font-awesome/css/fontawesome.min.css?ver=5.15.3 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Thu, 17 Jun 2021 14:07:24 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 12133
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (57726)
Size:   12133
Md5:    f463afd8661ddc733305df1f0cbdaff2
Sha1:   77262f0209e75e340eb7014aba9cd8d69966032f
Sha256: c4b6541be58a0ca61549cd4562850315077880c459c019f01e835cf2d7b764de

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/uploads/elementor/css/post-3049.css?ver=1662052575 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Sun, 14 Aug 2022 10:59:33 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 335
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (1184), with no line terminators
Size:   335
Md5:    5d41ce99726e0a9eef7c2bc5959bd8f5
Sha1:   bbd376a7650f8ffad7eda66c773465e98230bff7
Sha256: 1a6389bec41e5c400f71fd42836570fe913a7135f38ede1138cbd91f1a0028ab

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/uploads/elementor/css/post-646.css?ver=1662126955 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Mon, 15 Aug 2022 23:24:46 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 3011
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (40157), with no line terminators
Size:   3011
Md5:    bc6268f03e12e975801dd951b305bda5
Sha1:   ade5ae374cf2936aa58416335f593808e558d512
Sha256: b8276800cadaff1f1d30fd48871ad62b79093232c880e182b52d1ff7f6739b7a

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-includes/js/jquery/jquery.min.js?ver=3.6.0 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: application/javascript
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Thu, 11 Mar 2021 01:37:24 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 31197
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (65447)
Size:   31197
Md5:    5a89c75f360a565913ca3e205dc4ff3d
Sha1:   aece59c9d5c4b275a1949f8cf7d590e618bb963c
Sha256: b10c72db6a3abcda513cb9bb8d4449b8602a1458f78b9b6378a3ae15f82752ae
                                        
                                            GET /wp-content/plugins/elementor/assets/lib/eicons/css/elementor-icons.min.css?ver=5.16.0 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Mon, 01 Aug 2022 04:11:38 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 3629
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (19233)
Size:   3629
Md5:    af3bdf44d09914e8adb51fec560d8816
Sha1:   84bb225e096bab405868dd504e62133ba75cf1c1
Sha256: 4325dab21d3eb9efb8e285a0926be743f27e46446ccf5f9be65bb4b60c024152
                                        
                                            GET /wp-content/plugins/elementor/assets/css/frontend-lite.min.css?ver=3.7.1 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Sun, 14 Aug 2022 12:28:38 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 12973
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (65497)
Size:   12973
Md5:    80c032eb52bb330e7ab101fb2cecf890
Sha1:   190742b7dc21eef1c09319ecc56a35cd058bc6aa
Sha256: 27e4ce44e91f44ac81759eae985b981f237012d9374437e73f1e5612314f2fcd

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/elementor/assets/lib/font-awesome/css/solid.min.css?ver=5.15.3 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Thu, 17 Jun 2021 14:07:24 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 286
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (483)
Size:   286
Md5:    8828fa3c5bdcfa66615714a2b8c9d807
Sha1:   4f556d0b005ac7754af607418df445f8cf98e8b1
Sha256: 16950dcce60bc3ee2613b60439c99e7ed74d10245f59fe6f68346b7e72dd95e7

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            POST / HTTP/1.1 
Host: r3.o.lencr.org
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/ocsp-request
Content-Length: 85
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

                                         
                                         23.33.119.27
HTTP/1.1 200 OK
Content-Type: application/ocsp-response
                                        
Server: nginx
Content-Length: 503
ETag: "EC9DDD9D47E4CD14BD7471042CE3060C1D119038DAC5D1F02A4040C617228B0D"
Last-Modified: Mon, 12 Sep 2022 20:00:00 UTC
Cache-Control: public, no-transform, must-revalidate, max-age=6491
Expires: Tue, 13 Sep 2022 05:41:55 GMT
Date: Tue, 13 Sep 2022 03:53:44 GMT
Connection: keep-alive

                                        
                                            POST / HTTP/1.1 
Host: r3.o.lencr.org
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/ocsp-request
Content-Length: 85
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

                                         
                                         23.33.119.27
HTTP/1.1 200 OK
Content-Type: application/ocsp-response
                                        
Server: nginx
Content-Length: 503
ETag: "EC9DDD9D47E4CD14BD7471042CE3060C1D119038DAC5D1F02A4040C617228B0D"
Last-Modified: Mon, 12 Sep 2022 20:00:00 UTC
Cache-Control: public, no-transform, must-revalidate, max-age=6491
Expires: Tue, 13 Sep 2022 05:41:55 GMT
Date: Tue, 13 Sep 2022 03:53:44 GMT
Connection: keep-alive

                                        
                                            POST / HTTP/1.1 
Host: r3.o.lencr.org
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/ocsp-request
Content-Length: 85
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

                                         
                                         23.33.119.27
HTTP/1.1 200 OK
Content-Type: application/ocsp-response
                                        
Server: nginx
Content-Length: 503
ETag: "EC9DDD9D47E4CD14BD7471042CE3060C1D119038DAC5D1F02A4040C617228B0D"
Last-Modified: Mon, 12 Sep 2022 20:00:00 UTC
Cache-Control: public, no-transform, must-revalidate, max-age=6491
Expires: Tue, 13 Sep 2022 05:41:55 GMT
Date: Tue, 13 Sep 2022 03:53:44 GMT
Connection: keep-alive

                                        
                                            GET /296x148/filters:format(jpeg):quality(60):no_upscale():strip_exif()/https%3A%2F%2Fs3.amazonaws.com%2Fpocket-curatedcorpusapi-prod-images%2Fcb9bab12-4fd5-4be7-b453-25dfb0d4c606.jpeg HTTP/1.1 
Host: img-getpocket.cdn.mozilla.net
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: image/avif,image/webp,*/*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Origin: null
Connection: keep-alive
Sec-Fetch-Dest: image
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site

                                         
                                         34.120.237.76
HTTP/2 200 OK
content-type: image/jpeg
                                        
server: nginx
content-length: 9606
x-amzn-requestid: bf72ce8c-1272-42df-8958-d392210106c5
x-xss-protection: 1; mode=block
access-control-allow-origin: *
strict-transport-security: max-age=63072000; includeSubdomains; preload
x-frame-options: DENY
content-security-policy: default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'
x-amz-apigw-id: YIR7NFh2oAMFXIQ=
x-content-type-options: nosniff
x-amzn-trace-id: Root=1-631996ad-4646091a428db21e2dce1a61;Sampled=0
x-amzn-remapped-date: Thu, 08 Sep 2022 07:15:58 GMT
x-amz-cf-pop: SEA73-P1
x-cache: Hit from cloudfront
x-amz-cf-id: 4skZVE5BinFMAJV196j5-qtDez6m26DtU8NZvU6K2VuhFnC7E1zXWw==
via: 1.1 0bb842bd5868b86440983b936bb0adee.cloudfront.net (CloudFront), 1.1 91356d2137f5a7345e93da4516c49ec4.cloudfront.net (CloudFront), 1.1 google
date: Mon, 12 Sep 2022 22:49:29 GMT
age: 18255
etag: "bbab791971056750a46dd6ed9c5d7c8e12ab457e"
cache-control: max-age=3600,public,public
alt-svc: clear
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, progressive, precision 8, 296x148, components 3\012- data
Size:   9606
Md5:    6c824a7db30839607b01c7a164f6f6ec
Sha1:   bbab791971056750a46dd6ed9c5d7c8e12ab457e
Sha256: 872262a28a383a9eafd1f453014a3edfde4872160b772874271be6358a47449f
                                        
                                            GET /296x148/filters:format(jpeg):quality(60):no_upscale():strip_exif()/https%3A%2F%2Fs3.amazonaws.com%2Fpocket-curatedcorpusapi-prod-images%2F2830e2cb-8887-441e-8c0c-906b8fbb2366.jpeg HTTP/1.1 
Host: img-getpocket.cdn.mozilla.net
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: image/avif,image/webp,*/*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Origin: null
Connection: keep-alive
Sec-Fetch-Dest: image
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site

                                         
                                         34.120.237.76
HTTP/2 200 OK
content-type: image/jpeg
                                        
server: nginx
content-length: 9945
x-amzn-requestid: a347749f-a63a-4533-a274-7151b9f235ff
x-xss-protection: 1; mode=block
access-control-allow-origin: *
strict-transport-security: max-age=63072000; includeSubdomains; preload
x-frame-options: DENY
content-security-policy: default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'
x-amz-apigw-id: YXcX8HAKoAMF5EQ=
x-content-type-options: nosniff
x-amzn-trace-id: Root=1-631fa765-56cff18515b2a5b3397231df;Sampled=0
x-amzn-remapped-date: Mon, 12 Sep 2022 21:40:53 GMT
x-amz-cf-pop: HIO50-C1, SEA73-P1
x-cache: Miss from cloudfront
x-amz-cf-id: 43wWNADffkA0e8T-SYvAMjp266nAE5hrDjNMQQsuYeT0i6xQt7wLVg==
via: 1.1 d1151317ba32afe0e6370fd69fed222e.cloudfront.net (CloudFront), 1.1 35575576af8067e30cfb17c6b9fde8e2.cloudfront.net (CloudFront), 1.1 google
date: Mon, 12 Sep 2022 21:55:34 GMT
age: 21490
etag: "744fee4a0baa22ba3aa352d60620a916972b47dd"
cache-control: max-age=3600,public,public
alt-svc: clear
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, progressive, precision 8, 296x148, components 3\012- data
Size:   9945
Md5:    c9ab2ec10c79b91d15edb1d1e3dc763c
Sha1:   744fee4a0baa22ba3aa352d60620a916972b47dd
Sha256: f7bb66f5bb572d73f936fc74823f51ede1f2c4e309a939b39d9529ff8f757fbe
                                        
                                            GET /296x148/filters:format(jpeg):quality(60):no_upscale():strip_exif()/https%3A%2F%2Fs3.amazonaws.com%2Fpocket-curatedcorpusapi-prod-images%2F898fa8c6-1f06-4fa4-88d0-333a32c1a7a8.jpeg HTTP/1.1 
Host: img-getpocket.cdn.mozilla.net
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: image/avif,image/webp,*/*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Origin: null
Connection: keep-alive
Sec-Fetch-Dest: image
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site

                                         
                                         34.120.237.76
HTTP/2 200 OK
content-type: image/jpeg
                                        
server: nginx
content-length: 10245
x-amzn-requestid: 20d58a44-c942-46a8-9136-a824d775275c
x-xss-protection: 1; mode=block
access-control-allow-origin: *
strict-transport-security: max-age=63072000; includeSubdomains; preload
x-frame-options: DENY
content-security-policy: default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'
x-amz-apigw-id: YLNZPFsjoAMFv7g=
x-content-type-options: nosniff
x-amzn-trace-id: Root=1-631ac2a1-24d2272a61fd0f39088251b4;Sampled=0
x-amzn-remapped-date: Fri, 09 Sep 2022 04:35:45 GMT
x-amz-cf-pop: SEA73-P1
x-cache: Hit from cloudfront
x-amz-cf-id: 2E2yaVqFHLXdfuJns8hs9DNomHNQWVNVSeZSCMdD2W7bGMMgA0QoZQ==
via: 1.1 024f97192fe648974da2251fbcc71f38.cloudfront.net (CloudFront), 1.1 91356d2137f5a7345e93da4516c49ec4.cloudfront.net (CloudFront), 1.1 google
date: Mon, 12 Sep 2022 22:17:59 GMT
age: 20145
etag: "ec2e96359ef3a236514cab21af80ea5b9420e9c3"
cache-control: max-age=3600,public,public
alt-svc: clear
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, progressive, precision 8, 296x148, components 3\012- data
Size:   10245
Md5:    019416755742a78ddf35671ba5eaccc7
Sha1:   ec2e96359ef3a236514cab21af80ea5b9420e9c3
Sha256: a6b0e0ec56c2ce2f94dae8032e0deb297236c35f7a8928a14a254e3fdb2a255a
                                        
                                            GET /296x148/filters:format(jpeg):quality(60):no_upscale():strip_exif()/https%3A%2F%2Fs3.amazonaws.com%2Fpocket-curatedcorpusapi-prod-images%2F106eeeca-4365-4ffc-b701-f952d0b09dcb.jpeg HTTP/1.1 
Host: img-getpocket.cdn.mozilla.net
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: image/avif,image/webp,*/*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Origin: null
Connection: keep-alive
Sec-Fetch-Dest: image
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site

                                         
                                         34.120.237.76
HTTP/2 200 OK
content-type: image/jpeg
                                        
server: nginx
content-length: 7965
x-amzn-requestid: c0ddd7c6-9709-4251-8e7b-4a551f9a7d2f
x-xss-protection: 1; mode=block
access-control-allow-origin: *
strict-transport-security: max-age=63072000; includeSubdomains; preload
x-frame-options: DENY
content-security-policy: default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'
x-amz-apigw-id: YBro8EjxIAMFi0g=
x-content-type-options: nosniff
x-amzn-trace-id: Root=1-6316f305-26023e0714937dca063dcbfa;Sampled=0
x-amzn-remapped-date: Tue, 06 Sep 2022 07:13:09 GMT
x-amz-cf-pop: SEA73-P1
x-cache: Hit from cloudfront
x-amz-cf-id: M8hApWUPiRtGNRAjsaGnjo2w9myX6knC1Rk0-reejbUO7aVqYPttRw==
via: 1.1 000f4a2f631bace380a0afa747a82482.cloudfront.net (CloudFront), 1.1 9c675215120a4ade8754c4357ef2f3ea.cloudfront.net (CloudFront), 1.1 google
date: Mon, 12 Sep 2022 23:23:42 GMT
age: 16202
etag: "7a1f13d32de956fd50fccba0f813fb71bda79f63"
cache-control: max-age=3600,public,public
alt-svc: clear
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, progressive, precision 8, 296x148, components 3\012- data
Size:   7965
Md5:    47e1f64348aa12d707bf070f39877c7e
Sha1:   7a1f13d32de956fd50fccba0f813fb71bda79f63
Sha256: 9b3cee8039a2adb1291006a9ad55cd5032a2a6c10de3c5f57222692b02c0faac
                                        
                                            GET /296x148/filters:format(jpeg):quality(60):no_upscale():strip_exif()/https%3A%2F%2Fs3.amazonaws.com%2Fpocket-curatedcorpusapi-prod-images%2F909eacf9-8e5f-4cbb-aa74-803702af05cc.jpeg HTTP/1.1 
Host: img-getpocket.cdn.mozilla.net
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: image/avif,image/webp,*/*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Origin: null
Connection: keep-alive
Sec-Fetch-Dest: image
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site

                                         
                                         34.120.237.76
HTTP/2 200 OK
content-type: image/jpeg
                                        
server: nginx
content-length: 7170
x-amzn-requestid: 00af58fc-9faf-4c4e-8650-f9f7013a0708
x-xss-protection: 1; mode=block
access-control-allow-origin: *
strict-transport-security: max-age=63072000; includeSubdomains; preload
x-frame-options: DENY
content-security-policy: default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'
x-amz-apigw-id: YXbw2HqjoAMFjVg=
x-content-type-options: nosniff
x-amzn-trace-id: Root=1-631fa66b-42d241ad62d240b10368efb1;Sampled=0
x-amzn-remapped-date: Mon, 12 Sep 2022 21:36:43 GMT
x-amz-cf-pop: HIO50-C1, SEA73-P1
x-cache: Hit from cloudfront
x-amz-cf-id: XxHrSf4TfYOv8k2DrepWg3Mdm1za4uxiwhP4tF0nbJamiRbOPeBp3A==
via: 1.1 010c0731b9775a983eceaec0f5fa6a2e.cloudfront.net (CloudFront), 1.1 e95ec8f1dc02e32f0cb9e113963ceb4e.cloudfront.net (CloudFront), 1.1 google
date: Mon, 12 Sep 2022 21:47:05 GMT
age: 21999
etag: "b92938c3202d126a14c2b5188a10bff2a6e5cdbb"
cache-control: max-age=3600,public,public
alt-svc: clear
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, progressive, precision 8, 296x148, components 3\012- data
Size:   7170
Md5:    72d299fa183dd450fc6a065c6705d8f8
Sha1:   b92938c3202d126a14c2b5188a10bff2a6e5cdbb
Sha256: 33e34e0f624b1a8e1a502ce9087b507f631a3debe0c7c5e62ba528114b1e0cd8
                                        
                                            GET /comp/3/bc7aa0fa8df2475680977c9679e5413e/f4a4k1.jpg HTTP/1.1 
Host: c7.alamy.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: image/avif,image/webp,*/*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: image
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: cross-site

                                         
                                         143.204.55.27
HTTP/2 200 OK
content-type: image/jpeg
                                        
date: Tue, 13 Sep 2022 03:35:50 GMT
cache-control: max-age=604800
access-control-allow-origin: *
last-modified: Tue Oct 19 2021 00:00:00 GMT+0000 (Coordinated Universal Time)
x-cache: Hit from cloudfront
via: 1.1 8ddb6d7670d8c5a85c04a10525a71b90.cloudfront.net (CloudFront)
x-amz-cf-pop: OSL50-C1
x-amz-cf-id: hiw1YFTbEfMRyL3fTEczdzurBlDMp1zAc3cCcNyuGrr3EUGJeNyWEw==
age: 1073
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  JPEG image data, JFIF standard 1.01, resolution (DPI), density 72x72, segment length 16, baseline, precision 8, 300x320, components 3\012- data
Size:   25739
Md5:    06023cbe72cc0736e3727bf758cb428a
Sha1:   eedad0954c4ef22e746b0a44db9942d9294276ab
Sha256: bb0106ba1c729e7a86c5848ba2307c44bc5ee88b15cb4c5ef936e8718d380bf0
                                        
                                            GET /wp-includes/js/jquery/jquery-migrate.min.js?ver=3.3.2 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: application/javascript
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Wed, 18 Nov 2020 19:36:06 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 4917
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (11126)
Size:   4917
Md5:    eebb65c2a0bfcbbb2e9d9c427477ad5d
Sha1:   5cfed73f11838d6c5018a993e5ee89e58ac2b9f4
Sha256: ac879952243e1f83fb4804302692a191a1caa9604641992daaff824ec69cd461

Alerts:
  Blocklists:
    - fortinet: Malware
                                        
                                            GET /wp-content/plugins/invoicing/vendor/ayecode/wp-ayecode-ui/assets/js/bootstrap.bundle.min.js?ver=0.1.72 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: application/javascript
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Wed, 30 Mar 2022 17:16:18 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 29232
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (32016)
Size:   29232
Md5:    1ffef1d95ef25685da29fae232057ddb
Sha1:   4290daa331cc3a8b3659039e0c954b31de30df5e
Sha256: 223569da7d483e06ae823b56361ccc79ca55cd0eb366f8075e42bade8e309220

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/add-to-cart-direct-checkout-for-woocommerce/public/js/pi-dcw-public.js?ver=2.1.33 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: application/javascript
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Mon, 21 Feb 2022 07:18:24 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 1915
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (1787), with CRLF line terminators
Size:   1915
Md5:    f30556923a2e76b3fee595b94765c83e
Sha1:   d1ed1253fe01c7f6cc87d73568dc5887f603cc67
Sha256: cb22aa8d4e54dd9de1a01c29e22adda4286e1131cb07ae59b3ca223995bafc5d
                                        
                                            GET /wp-content/plugins/elementor/assets/lib/font-awesome/css/brands.min.css?ver=5.15.3 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Thu, 17 Jun 2021 14:07:24 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 284
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (489)
Size:   284
Md5:    dc279c928e2924b07a4a7575f8070ee8
Sha1:   0196756cacdb61ef40483af7ea982b699b0933de
Sha256: 80b6d9e3f0304f4199350c6015fd96084646c2a0121332bcb5a46d3956b7df5c
                                        
                                            GET /wp-content/plugins/woo-multi-currency/js/woo-multi-currency.min.js?ver=2.1.23 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: application/javascript
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Sat, 18 Jun 2022 13:01:00 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 2297
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (5942), with no line terminators
Size:   2297
Md5:    cfbcdef17ffcf555a0e660f7e341bdf5
Sha1:   52626e5c1536d85c130cc844a83398e2522d8263
Sha256: 6f3ff643d5a5b8e8148b326ae3ad6d9b6753df33caa9434df6bd1efa3251d92d

Alerts:
  Blocklists:
    - fortinet: Malware
                                        
                                            GET /wp-content/plugins/elementor/assets/lib/font-awesome/js/v4-shims.min.js?ver=3.7.1 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: application/javascript
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Thu, 07 Jan 2021 21:38:58 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 4979
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (16656)
Size:   4979
Md5:    a9cb54c063d17b78524dcf388da5a08b
Sha1:   78fe23ecef15f2aa2d0ce8fbf5937d13320a9f6b
Sha256: d84c38cf17ca671711574971d722aaad76ff10964dc010851098018f539c15da
                                        
                                            GET /wp-content/plugins/elementor-pro/assets/css/widget-woocommerce.min.css HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Wed, 11 May 2022 23:32:23 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 14893
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (65493)
Size:   14893
Md5:    13e122ddaa40cd3ccf7265806e525985
Sha1:   3f2bbac484b96bcd5fa7b881aa91db6cb3c2f273
Sha256: 117cb5dbde86fc493f14545c1c138339a9dc866bc021327987ec80392e833dee
                                        
                                            GET /wp-content/plugins/wp-optin-wheel/public/js/public.min.js?ver=1.3.6 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: application/javascript
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Thu, 04 Aug 2022 10:07:03 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 3982
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (3126)
Size:   3982
Md5:    2790c6114e69311be91404864243b305
Sha1:   7121749ab6e4c12f440498f7ed97e5e5c950bfbd
Sha256: 6fab614bae07d0c09b1a8415e424ea9a74dab1eb6da4af4a45d2042184b23ad0

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-includes/js/wp-emoji-release.min.js?ver=6.0.1 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: application/javascript
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Tue, 02 Aug 2022 21:40:58 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 5529
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (15660)
Size:   5529
Md5:    db376ccdba8938ef007d31853f9f6e67
Sha1:   f26492f7fed8db0f783f78082c5d0ff5332064cd
Sha256: 2d075b476f15f49a11706a74a40d7d3a3f9d7ba19011257119310eb122a81724
                                        
                                            GET /wp-content/plugins/Perfect-Money-Custom-Payment-Getway-By-mdazizul.com_/js/scripts.js?ver=1.0 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: application/javascript
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Thu, 04 Aug 2022 11:57:51 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 1000
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (1791), with CRLF line terminators
Size:   1000
Md5:    2e7c9a2df256e60855bb24dba3cb456f
Sha1:   fa89933d7de3bd6614bdc70989f45462e34fdef4
Sha256: 5a2a30245a4804873b33add733f5ae2a16c2aed0bc895b2920211a3c0dce466d

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js?ver=6.8.0 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: application/javascript
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Tue, 19 Jul 2022 23:16:40 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 974
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  HTML document, ASCII text, with very long lines (3037), with no line terminators
Size:   974
Md5:    fd8b126d3265cc6afc5b672273f78531
Sha1:   5058e579885cccf36c44bdeb5b7318bd75952af9
Sha256: 72da6709db061566cb5f67322f674a77f68acb69ac6181d37f9ca4a1bb7287b7
                                        
                                            GET /wp-content/plugins/woocommerce-products-filter/js/tooltip/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-noir.min.css?ver=1.2.9.2 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Mon, 29 Oct 2018 21:01:34 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 245
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (1324), with no line terminators
Size:   245
Md5:    9104e0bf878b49b4c1ed04430bb60175
Sha1:   2838e2a7ffe68d951d62f6784fc808b2c98b266c
Sha256: f913940f64b9734b3a61012479cfac4a85731e9a0fda755a73c3f7d48a3006e5

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/wp-optin-wheel/public/css/theme-deep-purple.css?ver=1.3.6 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Thu, 04 Aug 2022 10:07:03 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 147
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (543), with no line terminators
Size:   147
Md5:    b51bc7bed5e360397c6dae6f330bfcba
Sha1:   f8bdc4dd6a77ee4b6458649123e84410c1929aea
Sha256: 1773b8d595370cfd68647df6fb578bd1878d7bbc80746144b98a763b427fd49a

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /releases/v6.2.0/css/all.css?wpfas=true HTTP/1.1 
Host: use.fontawesome.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: cross-site

                                         
                                         104.21.63.54
HTTP/2 200 OK
content-type: text/css
                                        
date: Tue, 13 Sep 2022 03:53:43 GMT
x-amz-id-2: rcjdRn1L0sPqEvOS10AHMAVCN8VKf/mDvOVmg9E/1FUe7rs9ZBgY6fCoEen81q/C8oj+yxRnghg=
x-amz-request-id: F0TSVZ8A3RWD6CJK
last-modified: Tue, 30 Aug 2022 16:39:37 GMT
etag: W/"6cb5a85b30082e3d59d7e371e002ce8d"
cache-control: max-age=31556926
cf-cache-status: HIT
age: 1060879
report-to: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=%2BF5dEdiY5uU1RFlXxu5F07tqeDE6T1kxUonqQXQyamfoUwLsPa5qorUZ16JNemyIN2RN%2F2kirmAOB2V%2FyGnJqH%2FgwR2ajzi3uu7GuyVhCXd60K26aL%2Fl9Ar99cX7%2Bj6OPPPPeUP4"}],"group":"cf-nel","max_age":604800}
nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
vary: Accept-Encoding
server: cloudflare
cf-ray: 749deffe98dfb515-OSL
content-encoding: br
alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (65317)
Size:   26339
Md5:    f3449041864f8e804e53a3d7cfc466c9
Sha1:   46c7857262d495fdfb0e4ac93ab332446bf7b7c1
Sha256: 23366ac986ab5ad95d103af6c8f21ae4459b567be61bb5c3188f4beb8a3471a3
                                        
                                            GET / HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/html; charset=UTF-8
                                        
x-powered-by: PHP/7.4.30
link: <https://hareksaman999.com/wp-json/>; rel="https://api.w.org/", <https://hareksaman999.com/wp-json/wp/v2/pages/646>; rel="alternate"; type="application/json", <https://hareksaman999.com/>; rel=shortlink
etag: "10-1663037495;br"
x-litespeed-cache: hit
content-encoding: br
vary: Accept-Encoding
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  HTML document text\012- HTML document text\012- HTML document text\012- HTML document text\012- HTML document text\012- exported SGML document text\012- exported SGML document, Unicode text, UTF-8 text, with very long lines (21194), with CRLF, LF line terminators
Size:   42926
Md5:    62c17eb0f1a6b58223056f0a115d0b33
Sha1:   015e95f9b990f8f04a95ec873cad2b7f53b521b5
Sha256: 9a225d7abab1443e6330082f303ac2ed84ef4e67ecc5fd4a686c441d57e50345

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/woocommerce-products-filter/js/tooltip/css/tooltipster.bundle.min.css?ver=1.2.9.2 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Mon, 29 Oct 2018 21:01:34 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 989
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (6495), with no line terminators
Size:   989
Md5:    c00ebc5ec5da17ab205229ba51fbb310
Sha1:   b23f9bb753c3d412d9ce07eac4ca4ed50d25ca3a
Sha256: 195f2a6de0f22d0d177a8aacb23986ab3296480ff68caddf9e6faa9113345afd

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.6.8.0 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: application/javascript
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Wed, 20 Jan 2021 04:55:30 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 899
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (1668)
Size:   899
Md5:    22d65ba38528349e705d912ce26bf8ac
Sha1:   c89ba006009043d93b88ff155b4fec8797330550
Sha256: 6253bcb85e4267ad3ba843145534e729ee2c1d7e85e5b4ab5b2e074ae636bca3

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/plugins/woocommerce/assets/js/frontend/cart-fragments.min.js?ver=6.8.0 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: application/javascript
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Wed, 24 Nov 2021 03:30:14 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 934
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (2938), with no line terminators
Size:   934
Md5:    cf25dd071a208312bdc07f34d2cee027
Sha1:   76119563119eaae392ecc8903c989d98d0b93002
Sha256: 8635ba2cad8f887e72779bd526f8738ff6343c74cba715caf2eddea383ba7ce6
                                        
                                            GET /wp-content/plugins/invoicing/assets/js/payment-forms.js?ver=1660129254 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: application/javascript
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Wed, 10 Aug 2022 11:00:54 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 6075
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (24022), with no line terminators
Size:   6075
Md5:    fdae0a7a08f7a0fc19bdabb5a08787d8
Sha1:   8b46499242ec07822f6aeaa24855dc468ec9c563
Sha256: 4ea630cde528f3e6c28cf1d95471a5cf506264f87d4bd2b33485ab0a690aac8c

Alerts:
  Blocklists:
    - fortinet: Malware
                                        
                                            GET /wp-content/plugins/wp-optin-wheel/public/css/public.min.css?ver=1.3.6 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: style
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: text/css
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Thu, 04 Aug 2022 10:07:03 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 1861
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (9537), with no line terminators
Size:   1861
Md5:    a805eb4e50e983c292681e3cb0df31c4
Sha1:   aa0def40475853281445ca62d7b80b5013b04968
Sha256: a39d6ba15c243a9b5df462493166bff70d3e0ee0ecbe7f674f7f6505e45c6e80
                                        
                                            GET /wp-content/themes/zakra/assets/js/skip-link-focus-fix.min.js?ver=20151215 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: application/javascript
                                        
cache-control: public, max-age=604800
expires: Tue, 20 Sep 2022 03:53:43 GMT
last-modified: Wed, 09 Jun 2021 16:59:44 GMT
accept-ranges: bytes
content-encoding: br
vary: Accept-Encoding
content-length: 1066
date: Tue, 13 Sep 2022 03:53:43 GMT
server: LiteSpeed
x-turbo-charged-by: LiteSpeed
X-Firefox-Spdy: h2


--- Additional Info ---
Magic:  ASCII text, with very long lines (2114), with no line terminators
Size:   1066
Md5:    a709e33491a3e4f121087bb2aba9e8ff
Sha1:   8eb8e59c1679c3f035371a07844db51904bdca8d
Sha256: 0a983325cddb2c27f5254bb4bb48f672f545c31ffc075644ae5fa1b7a12798ed

Alerts:
  Blocklists:
    - fortinet: Phishing
                                        
                                            GET /wp-content/themes/zakra/assets/js/zakra-custom.min.js?ver=6.0.1 HTTP/1.1 
Host: hareksaman999.com
                                        
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://hareksaman999.com/
Sec-Fetch-Dest: script
Sec-Fetch-Mode: no-cors
Sec-Fetch-Site: same-origin
TE: trailers

                                         
                                         66.29.132.23
HTTP/2 200 OK
content-type: application/javascript
                                        
cache-control: public, max-age=604800