(self.webpackChunktradingview = self.webpackChunktradingview || []).push([
    [59040, 44352, 52708, 38865, 79225], {
        650151: (e, t) => {
            "use strict";

            function n(e, t) {
                if (void 0 === e) throw new Error("".concat(null != t ? t : "Value", " is undefined"));
                return e
            }

            function r(e, t) {
                if (null === e) throw new Error("".concat(null != t ? t : "Value", " is null"));
                return e
            }
            t.ensureNotNull = t.ensureDefined = t.assert = void 0, t.assert = function(e, t) {
                if (!e) throw new Error("Assertion failed".concat(t ? ": ".concat(t) : ""))
            }, t.ensureDefined = n, t.ensureNotNull = r
        },
        91679: (e, t) => {
            "use strict";
            t.WatchedValue = void 0;
            var n = function() {
                function e(e, t) {
                    void 0 === t && (t = {}), this._listeners = [], void 0 !== e && (this._value = e), this._onDestroy = t.onDestroy
                }
                return e.prototype.destroy = function() {
                    this.unsubscribe(), delete this._value, delete this._readonlyInstance, this._onDestroy && this._onDestroy()
                }, e.prototype.value = function() {
                    return this._value
                }, e.prototype.setValue = function(e, t) {
                    var n = this._value === e || Number.isNaN(this._value) && Number.isNaN(e);
                    !t && n || (this._value = e, this._notifyListeners())
                }, e.prototype.subscribe = function(e, t) {
                    var n, r, i = this;
                    if (!(null === (n = null == t ? void 0 : t.signal) || void 0 === n ? void 0 : n.aborted)) {
                        if ((null == t ? void 0 : t.callWithLast) && void 0 !== this._value) {
                            try {
                                e(this._value)
                            } catch (e) {
                                t.onError && t.onError(e)
                            }
                            if (t.once) return
                        }(null == t ? void 0 : t.signal) && t.signal.addEventListener("abort", (function() {
                            i.unsubscribe(e)
                        }), {
                            once: !0
                        }), this._listeners.push({
                            callback: e,
                            signal: null == t ? void 0 : t.signal,
                            once: null !== (r = null == t ? void 0 : t.once) && void 0 !== r && r,
                            onError: null == t ? void 0 : t.onError
                        })
                    }
                }, e.prototype.unsubscribe = function(e) {
                    for (var t = this._listeners.length; t--;) {
                        e !== this._listeners[t].callback && void 0 !== e || this._listeners.splice(t, 1)
                    }
                }, e.prototype.readonly = function() {
                    return this._readonlyInstance || (this._readonlyInstance = new i(this)), this._readonlyInstance
                }, e.prototype.when = function(e, t) {
                    var n, r = this;
                    if (!e) return new Promise((function(e, t) {
                        if (void 0 === r._value) {
                            var n = function(t) {
                                void 0 !== t && (e(t), r.unsubscribe(n))
                            };
                            r.subscribe(n, {
                                onError: t
                            })
                        } else e(r._value)
                    }));
                    if (!(null === (n = null == t ? void 0 : t.signal) || void 0 === n ? void 0 : n.aborted))
                        if (void 0 === this._value) {
                            var i = function(t) {
                                void 0 !== t && (e(t), r.unsubscribe(i))
                            };
                            this.subscribe(i, t)
                        } else try {
                            e(this._value)
                        } catch (e) {
                            (null == t ? void 0 : t.onError) && t.onError(e)
                        }
                }, e.prototype._notifyListeners = function() {
                    for (var e, t, n = 0, r = this._listeners; n < r.length; n++) {
                        var i = r[n];
                        if ((i.once || (null === (e = i.signal) || void 0 === e ? void 0 : e.aborted)) && this.unsubscribe(i.callback), !(null === (t = i.signal) || void 0 === t ? void 0 : t.aborted)) try {
                            i.callback(this._value)
                        } catch (e) {
                            i.onError && i.onError(e)
                        }
                    }
                }, e
            }();
            t.WatchedValue = n;
            var r = "Using destroyed WatchedValueReadonly instance is not allowed",
                i = function() {
                    function e(e) {
                        this._owner = e
                    }
                    return e.prototype.value = function() {
                        var e;
                        if (!this._owner) throw new Error(r);
                        return null === (e = this._owner) || void 0 === e ? void 0 : e.value()
                    }, e.prototype.destroy = function() {
                        delete this._owner
                    }, e.prototype.subscribe = function(e, t) {
                        if (!this._owner) throw new Error(r);
                        this._owner.subscribe(e, t)
                    }, e.prototype.unsubscribe = function(e) {
                        if (!this._owner) throw new Error(r);
                        this._owner.unsubscribe(e)
                    }, e.prototype.when = function(e, t) {
                        if (!this._owner) throw new Error(r);
                        return void 0 !== e ? this._owner.when(e, t) : this._owner.when()
                    }, e
                }()
        },
        64531: (e, t) => {
            "use strict";
            var n, r = !("undefined" == typeof window || !window.document || !window.document.createElement);

            function i() {
                if (n) return n;
                if (!r || !window.document.body) return "indeterminate";
                var e = window.document.createElement("div");
                return e.appendChild(document.createTextNode("ABCD")), e.dir = "rtl", e.style.fontSize = "14px", e.style.width = "4px", e.style.height = "1px", e.style.position = "absolute", e.style.top = "-1000px", e.style.overflow = "scroll", document.body.appendChild(e), n = "reverse", e.scrollLeft > 0 ? n = "default" : (e.scrollLeft = 1, 0 === e.scrollLeft && (n = "negative")), document.body.removeChild(e), n
            }
        },
        778785: (e, t, n) => {
            "use strict";
            n.d(t, {
                mobiletouch: () => i,
                setClasses: () => o
            });
            var r = n(167175);
            const i = r.mobiletouch;
            r.touch;

            function o() {
                document.documentElement.classList.add(r.touch ? "feature-touch" : "feature-no-touch", r.mobiletouch ? "feature-mobiletouch" : "feature-no-mobiletouch")
            }
        },
        638456: (e, t, n) => {
            "use strict";
            n.r(t), n.d(t, {
                CheckMobile: () => d,
                appVersion: () => l,
                checkPageType: () => p,
                className: () => g,
                desktopAppVersion: () => c,
                isChrome: () => v,
                isDesktopApp: () => a,
                isEdge: () => b,
                isFF: () => w,
                isLinux: () => u,
                isMac: () => o,
                isSafari: () => y,
                isWindows: () => s,
                onGoPro: () => m,
                onMainPage: () => E,
                onWidget: () => f,
                supportTouch: () => h
            });
            var r = n(167175);
            const i = window.TradingView = window.TradingView || {};

            function o() {
                return r.isMac
            }

            function s() {
                return r.isWindows
            }

            function u() {
                return r.isLinux
            }

            function a() {
                return /TVDesktop/i.test(navigator.userAgent)
            }

            function c() {
                const e = navigator.userAgent.match(/TVDesktop\/([^\s]+)/);
                return e && e[1]
            }

            function l() {
                const e = navigator.userAgent.match(/TradingView\/([^\s]+)/);
                return e && e[1]
            }
            const d = {
                Android: () => r.isAndroid,
                BlackBerry: () => r.isBlackBerry,
                iOS: () => r.isIOS,
                Opera: () => r.isOperaMini,
                isIPad: () => r.isIPad,
                any: () => r.isAnyMobile
            };

            function f() {
                const e = ["^widgetembed/?$", "^cmewidgetembed/?$", "^([0-9a-zA-Z-]+)/widgetembed/?$", "^([0-9a-zA-Z-]+)/widgetstatic/?$", "^([0-9a-zA-Z-]+)?/?mediumwidgetembed/?$", "^twitter-chart/?$", "^embed(-static)?/([0-9a-zA-Z]{8})/?$", "^widgetpopup/?$", "^extension/?$", "^chatwidgetembed/?$", "^ideaswidgetembed/?$", "^ideas-widget/?$", "^view-idea-widget/([0-9a-zA-Z]{8})/?$", "^idea-popup/?$", "^hotlistswidgetembed/?$", "^([0-9a-zA-Z-]+)/hotlistswidgetembed/?$", "^marketoverviewwidgetembed/?$", "^([0-9a-zA-Z-]+)/marketoverviewwidgetembed/?$", "^eventswidgetembed/?$", "^tickerswidgetembed/?$", "^forexcrossrateswidgetembed/?$", "^forexheatmapwidgetembed/?$", "^marketquoteswidgetembed/?$", "^screenerwidget/?$", "^cryptomktscreenerwidget/?$", "^([0-9a-zA-Z-]+)/cryptomktscreenerwidget/?$", "^([0-9a-zA-Z-]+)/marketquoteswidgetembed/?$", "^technical-analysis-widget-embed/$", "^singlequotewidgetembed/?$", "^([0-9a-zA-Z-]+)/singlequotewidgetembed/?$", "^embed-widget/([0-9a-zA-Z-]+)/(([0-9a-zA-Z-]+)/)?$"],
                    t = window.location.pathname.replace(/^\//, "");
                let n;
                for (let r = e.length - 1; r >= 0; r--)
                    if (n = new RegExp(e[r]), n.test(t)) return !0;
                return !1
            }

            function h() {
                return r.mobiletouch || r.touch || r.isAnyMobile
            }

            function p(e) {
                return new URLSearchParams(window.location.search).get("page_type") === e
            }
            i.isMobile = d, i.onWidget = f;
            const v = r.isChrome,
                w = r.isFF,
                b = r.isEdge,
                y = r.isSafari;

            function g(e) {
                for (const [t, n] of Object.entries(i))
                    if (n === e) return t;
                return null
            }

            function m() {
                return "/gopro/" === window.location.pathname
            }

            function E() {
                return "/" === window.location.pathname
            }
            i.className = g
        },
        389137: function(e, t, n) {
            var r;
            e = n.nmd(e);
            var i = Array.isArray || function(e) {
                    return "[object Array]" === Object.prototype.toString.call(e)
                },
                o = function(e) {
                    return "object" == typeof e && null !== e
                };

            function s(e) {
                return "number" == typeof e && isFinite(e)
            }

            function u(e) {
                return null != e && e.constructor === Function
            }

            function a(e, t) {
                e.prototype = Object.create(t.prototype, {
                    constructor: {
                        value: e,
                        enumerable: !1,
                        writable: !0,
                        configurable: !0
                    }
                })
            }
            "undefined" != typeof window ? (r = window.TradingView = window.TradingView || {}, window.isNumber = s, window.isFunction = u, window.inherit = a, window.isArray = i) : r = this.TradingView = this.TradingView || {}, r.isNaN = function(e) {
                return !(e <= 0 || e > 0)
            }, r.isAbsent = function(e) {
                return null == e
            }, r.isExistent = function(e) {
                return null != e
            }, Number.isNaN = Number.isNaN || function(e) {
                return e != e
            }, r.isSameType = function(e, t) {
                return Number.isNaN(e) || Number.isNaN(t) ? Number.isNaN(e) === Number.isNaN(t) : {}.toString.call(e) === {}.toString.call(t)
            }, r.isInteger = function(e) {
                return "number" == typeof e && e % 1 == 0
            }, r.isString = function(e) {
                return null != e && e.constructor === String
            }, r.isInherited = function(e, t) {
                if (null == e || null == e.prototype) throw new TypeError("isInherited: child should be a constructor function");
                if (null == t || null == t.prototype) throw new TypeError("isInherited: parent should be a constructor function");
                return e.prototype instanceof t || e.prototype === t.prototype
            }, r.clone = function(e) {
                if (!e || "object" != typeof e) return e;
                var t, n, i;
                for (n in t = "function" == typeof e.pop ? [] : {}, e) e.hasOwnProperty(n) && (i = e[n], t[n] = i && "object" == typeof i ? r.clone(i) : i);
                return t
            }, r.deepEquals = function(e, t, n) {
                if (n || (n = ""), e === t) return [!0, n];
                if (u(e) && (e = void 0), u(t) && (t = void 0), void 0 === e && void 0 !== t) return [!1, n];
                if (void 0 === t && void 0 !== e) return [!1, n];
                if (null === e && null !== t) return [!1, n];
                if (null === t && null !== e) return [!1, n];
                if ("object" != typeof e && "object" != typeof t) return [e === t, n];
                if (Array.isArray(e) && Array.isArray(t)) {
                    var o = e.length;
                    if (o !== t.length) return [!1, n];
                    for (var s = 0; s < o; s++) {
                        if (!(c = r.deepEquals(e[s], t[s], n + "[" + s + "]"))[0]) return c
                    }
                    return [!0, n]
                }
                if (i(e) || i(t)) return [!1, n];
                if (Object.keys(e).length !== Object.keys(t).length) return [!1, n];
                for (var a in e) {
                    var c;
                    if (!(c = r.deepEquals(e[a], t[a], n + "[" + a + "]"))[0]) return c
                }
                return [!0, n]
            }, r.merge = function(e, t) {
                for (var n in t) null !== t[n] && "object" == typeof t[n] && e.hasOwnProperty(n) ? r.merge(e[n], t[n]) : e[n] = t[n];
                return e
            }, e && e.exports && (e.exports = {
                inherit: a,
                clone: r.clone,
                merge: r.merge,
                isNumber: s,
                isInteger: r.isInteger,
                isString: r.isString,
                isObject: o,
                isHashObject: function(e) {
                    return o(e) && -1 !== e.constructor.toString().indexOf("function Object")
                },
                isPromise: function(e) {
                    return o(e) && e.then
                },
                isNaN: r.isNaN,
                isAbsent: r.isAbsent,
                isExistent: r.isExistent,
                isSameType: r.isSameType,
                isArray: i,
                isFunction: u,
                parseBool: r.parseBool,
                deepEquals: r.deepEquals,
                notNull: function(e) {
                    return null !== e
                },
                notUndefined: function(e) {
                    return void 0 !== e
                },
                isEven: function(e) {
                    return e % 2 == 0
                },
                declareClassAsPureInterface: function(e, t) {
                    for (var n in e.prototype) "function" == typeof e.prototype[n] && e.prototype.hasOwnProperty(n) && (e.prototype[n] = function() {
                        throw new Error(t + "::" + n + " is an interface member declaration and must be overloaded in order to be called")
                    })
                },
                requireFullInterfaceImplementation: function(e, t, n, r) {
                    for (var i in n.prototype)
                        if ("function" == typeof n.prototype[i] && !e.prototype[i]) throw new Error("Interface implementation assertion failed: " + t + " does not implement " + r + "::" + i + " function")
                }
            })
        },
        586463: (e, t, n) => {
            "use strict";
            var r = n(389137);
            const i = /{(\w+)}/g,
                o = /{(\d+)}/g;
            String.prototype.format = function(...e) {
                const t = (0, r.isObject)(e[0]),
                    n = t ? i : o,
                    s = t ? (t, n) => {
                        const r = e[0];
                        return void 0 !== r[n] ? r[n] : t
                    } : (t, n) => {
                        const r = parseInt(n, 10),
                            i = e[r];
                        return void 0 !== i ? i : t
                    };
                return this.replace(n, s)
            }
        },
        685459: function(e, t, n) {
            var r;
            ! function(t) {
                "use strict";

                function i() {}
                var o = i.prototype,
                    s = t.EventEmitter;

                function u(e, t) {
                    for (var n = e.length; n--;)
                        if (e[n].listener === t) return n;
                    return -1
                }

                function a(e) {
                    return function() {
                        return this[e].apply(this, arguments)
                    }
                }

                function c(e) {
                    return "function" == typeof e || e instanceof RegExp || !(!e || "object" != typeof e) && c(e.listener)
                }
                o.getListeners = function(e) {
                    var t, n, r = this._getEvents();
                    if (e instanceof RegExp)
                        for (n in t = {}, r) r.hasOwnProperty(n) && e.test(n) && (t[n] = r[n]);
                    else t = r[e] || (r[e] = []);
                    return t
                }, o.flattenListeners = function(e) {
                    var t, n = [];
                    for (t = 0; t < e.length; t += 1) n.push(e[t].listener);
                    return n
                }, o.getListenersAsObject = function(e) {
                    var t, n = this.getListeners(e);
                    return n instanceof Array && ((t = {})[e] = n), t || n
                }, o.addListener = function(e, t) {
                    if (!c(t)) throw new TypeError("listener must be a function");
                    var n, r = this.getListenersAsObject(e),
                        i = "object" == typeof t;
                    for (n in r) r.hasOwnProperty(n) && -1 === u(r[n], t) && r[n].push(i ? t : {
                        listener: t,
                        once: !1
                    });
                    return this
                }, o.on = a("addListener"), o.addOnceListener = function(e, t) {
                    return this.addListener(e, {
                        listener: t,
                        once: !0
                    })
                }, o.once = a("addOnceListener"), o.defineEvent = function(e) {
                    return this.getListeners(e), this
                }, o.defineEvents = function(e) {
                    for (var t = 0; t < e.length; t += 1) this.defineEvent(e[t]);
                    return this
                }, o.removeListener = function(e, t) {
                    var n, r, i = this.getListenersAsObject(e);
                    for (r in i) i.hasOwnProperty(r) && -1 !== (n = u(i[r], t)) && i[r].splice(n, 1);
                    return this
                }, o.off = a("removeListener"), o.addListeners = function(e, t) {
                    return this.manipulateListeners(!1, e, t)
                }, o.removeListeners = function(e, t) {
                    return this.manipulateListeners(!0, e, t)
                }, o.manipulateListeners = function(e, t, n) {
                    var r, i, o = e ? this.removeListener : this.addListener,
                        s = e ? this.removeListeners : this.addListeners;
                    if ("object" != typeof t || t instanceof RegExp)
                        for (r = n.length; r--;) o.call(this, t, n[r]);
                    else
                        for (r in t) t.hasOwnProperty(r) && (i = t[r]) && ("function" == typeof i ? o.call(this, r, i) : s.call(this, r, i));
                    return this
                }, o.removeEvent = function(e) {
                    var t, n = typeof e,
                        r = this._getEvents();
                    if ("string" === n) delete r[e];
                    else if (e instanceof RegExp)
                        for (t in r) r.hasOwnProperty(t) && e.test(t) && delete r[t];
                    else delete this._events;
                    return this
                }, o.removeAllListeners = a("removeEvent"), o.emitEvent = function(e, t) {
                    var n, r, i, o, s = this.getListenersAsObject(e);
                    for (o in s)
                        if (s.hasOwnProperty(o))
                            for (n = s[o].slice(0), i = 0; i < n.length; i++) !0 === (r = n[i]).once && this.removeListener(e, r.listener), r.listener.apply(this, t || []) === this._getOnceReturnValue() && this.removeListener(e, r.listener);
                    return this
                }, o.trigger = a("emitEvent"), o.emit = function(e) {
                    var t = Array.prototype.slice.call(arguments, 1);
                    return this.emitEvent(e, t)
                }, o.setOnceReturnValue = function(e) {
                    return this._onceReturnValue = e, this
                }, o._getOnceReturnValue = function() {
                    return !this.hasOwnProperty("_onceReturnValue") || this._onceReturnValue
                }, o._getEvents = function() {
                    return this._events || (this._events = {})
                }, i.noConflict = function() {
                    return t.EventEmitter = s, i
                }, void 0 === (r = function() {
                    return i
                }.call(t, n, t, e)) || (e.exports = r)
            }(this || {})
        }
    }
]);