2508 lines
159 KiB
Plaintext
2508 lines
159 KiB
Plaintext
<!doctype html>
|
|
<!--[if IE 9]><html class="ie9" lang={defaultLocale}><![endif]-->
|
|
<html lang="en-US">
|
|
<head>
|
|
<meta name="citation_pii" content="S2212017312002502" />
|
|
<meta name="citation_issn" content="2212-0173" />
|
|
<meta name="citation_volume" content="3" />
|
|
<meta name="citation_lastpage" content="204" />
|
|
<meta name="citation_publisher" content="Elsevier" />
|
|
<meta name="citation_firstpage" content="196" />
|
|
<meta name="citation_fulltext_world_readable" content />
|
|
<meta name="citation_journal_title" content="Procedia Technology" />
|
|
<meta name="citation_type" content="JOUR" />
|
|
<meta name="citation_doi" content="10.1016/j.protcy.2012.03.021" />
|
|
<meta name="dc.identifier" content="10.1016/j.protcy.2012.03.021" />
|
|
<meta name="citation_article_type" content="Full-length article" />
|
|
<meta property="og:description" content="In order to optimize the movements of a robot, every object found in the work environment must not just be identified, but located in reference to the …" />
|
|
<meta property="og:image" content="https://ars.els-cdn.com/content/image/1-s2.0-S2212017312X00045-cov150h.gif" />
|
|
<meta name="citation_title" content="Detecting objects using color and depth segmentation with Kinect sensor" />
|
|
<meta property="og:title" content="Detecting objects using color and depth segmentation with Kinect sensor" />
|
|
<meta name="citation_publication_date" content="2012/01/01" />
|
|
<meta name="citation_online_date" content="2012/05/23" />
|
|
<meta name="robots" content="INDEX,FOLLOW,NOARCHIVE,NOCACHE,NOODP,NOYDIR" />
|
|
<title>Detecting objects using color and depth segmentation with Kinect sensor - ScienceDirect</title>
|
|
<link rel="canonical" href="https://www.sciencedirect.com/science/article/pii/S2212017312002502" />
|
|
<meta property="og:type" content="article" />
|
|
<meta name="viewport" content="initial-scale=1" />
|
|
<meta name="SDTech" content="Proudly brought to you by the SD Technology team in London, Dayton, and Amsterdam" />
|
|
<script type="980a3173744142363f9804a3-text/javascript">(function newRelicBrowserProSPA() {
|
|
;
|
|
window.NREUM || (NREUM = {});
|
|
NREUM.init = {
|
|
privacy: {
|
|
cookies_enabled: false
|
|
},
|
|
ajax: {
|
|
deny_list: ["bam-cell.nr-data.net"]
|
|
}
|
|
};
|
|
;
|
|
NREUM.loader_config = {
|
|
accountID: "2128461",
|
|
trustKey: "2038175",
|
|
agentID: "1118783207",
|
|
licenseKey: "7ac4127487",
|
|
applicationID: "814813181"
|
|
};
|
|
;
|
|
NREUM.info = {
|
|
beacon: "bam.nr-data.net",
|
|
errorBeacon: "bam.nr-data.net",
|
|
licenseKey: "7ac4127487",
|
|
applicationID: "814813181",
|
|
sa: 1
|
|
};
|
|
; /*! For license information please see nr-loader-spa-1.238.0.min.js.LICENSE.txt */
|
|
(() => {
|
|
"use strict";
|
|
|
|
var e,
|
|
t,
|
|
r = {
|
|
5763: (e, t, r) => {
|
|
r.d(t, {
|
|
P_: () => f,
|
|
Mt: () => p,
|
|
C5: () => s,
|
|
DL: () => v,
|
|
OP: () => T,
|
|
lF: () => D,
|
|
Yu: () => y,
|
|
Dg: () => h,
|
|
CX: () => c,
|
|
GE: () => b,
|
|
sU: () => _
|
|
});
|
|
var n = r(8632),
|
|
i = r(9567);
|
|
const o = {
|
|
beacon: n.ce.beacon,
|
|
errorBeacon: n.ce.errorBeacon,
|
|
licenseKey: void 0,
|
|
applicationID: void 0,
|
|
sa: void 0,
|
|
queueTime: void 0,
|
|
applicationTime: void 0,
|
|
ttGuid: void 0,
|
|
user: void 0,
|
|
account: void 0,
|
|
product: void 0,
|
|
extra: void 0,
|
|
jsAttributes: {},
|
|
userAttributes: void 0,
|
|
atts: void 0,
|
|
transactionName: void 0,
|
|
tNamePlain: void 0
|
|
},
|
|
a = {};
|
|
function s(e) {
|
|
if (!e) throw new Error("All info objects require an agent identifier!");
|
|
if (!a[e]) throw new Error("Info for ".concat(e, " was never set"));
|
|
return a[e];
|
|
}
|
|
function c(e, t) {
|
|
if (!e) throw new Error("All info objects require an agent identifier!");
|
|
a[e] = (0, i.D)(t, o), (0, n.Qy)(e, a[e], "info");
|
|
}
|
|
var u = r(7056);
|
|
const d = () => {
|
|
const e = {
|
|
blockSelector: "[data-nr-block]",
|
|
maskInputOptions: {
|
|
password: !0
|
|
}
|
|
};
|
|
return {
|
|
allow_bfcache: !0,
|
|
privacy: {
|
|
cookies_enabled: !0
|
|
},
|
|
ajax: {
|
|
deny_list: void 0,
|
|
block_internal: !0,
|
|
enabled: !0,
|
|
harvestTimeSeconds: 10
|
|
},
|
|
distributed_tracing: {
|
|
enabled: void 0,
|
|
exclude_newrelic_header: void 0,
|
|
cors_use_newrelic_header: void 0,
|
|
cors_use_tracecontext_headers: void 0,
|
|
allowed_origins: void 0
|
|
},
|
|
session: {
|
|
domain: void 0,
|
|
expiresMs: u.oD,
|
|
inactiveMs: u.Hb
|
|
},
|
|
ssl: void 0,
|
|
obfuscate: void 0,
|
|
jserrors: {
|
|
enabled: !0,
|
|
harvestTimeSeconds: 10
|
|
},
|
|
metrics: {
|
|
enabled: !0
|
|
},
|
|
page_action: {
|
|
enabled: !0,
|
|
harvestTimeSeconds: 30
|
|
},
|
|
page_view_event: {
|
|
enabled: !0
|
|
},
|
|
page_view_timing: {
|
|
enabled: !0,
|
|
harvestTimeSeconds: 30,
|
|
long_task: !1
|
|
},
|
|
session_trace: {
|
|
enabled: !0,
|
|
harvestTimeSeconds: 10
|
|
},
|
|
harvest: {
|
|
tooManyRequestsDelay: 60
|
|
},
|
|
session_replay: {
|
|
enabled: !1,
|
|
harvestTimeSeconds: 60,
|
|
sampleRate: .1,
|
|
errorSampleRate: .1,
|
|
maskTextSelector: "*",
|
|
maskAllInputs: !0,
|
|
get blockClass() {
|
|
return "nr-block";
|
|
},
|
|
get ignoreClass() {
|
|
return "nr-ignore";
|
|
},
|
|
get maskTextClass() {
|
|
return "nr-mask";
|
|
},
|
|
get blockSelector() {
|
|
return e.blockSelector;
|
|
},
|
|
set blockSelector(t) {
|
|
e.blockSelector += ",".concat(t);
|
|
},
|
|
get maskInputOptions() {
|
|
return e.maskInputOptions;
|
|
},
|
|
set maskInputOptions(t) {
|
|
e.maskInputOptions = {
|
|
...t,
|
|
password: !0
|
|
};
|
|
}
|
|
},
|
|
spa: {
|
|
enabled: !0,
|
|
harvestTimeSeconds: 10
|
|
}
|
|
};
|
|
},
|
|
l = {};
|
|
function f(e) {
|
|
if (!e) throw new Error("All configuration objects require an agent identifier!");
|
|
if (!l[e]) throw new Error("Configuration for ".concat(e, " was never set"));
|
|
return l[e];
|
|
}
|
|
function h(e, t) {
|
|
if (!e) throw new Error("All configuration objects require an agent identifier!");
|
|
l[e] = (0, i.D)(t, d()), (0, n.Qy)(e, l[e], "config");
|
|
}
|
|
function p(e, t) {
|
|
if (!e) throw new Error("All configuration objects require an agent identifier!");
|
|
var r = f(e);
|
|
if (r) {
|
|
for (var n = t.split("."), i = 0; i < n.length - 1; i++) if ("object" != typeof (r = r[n[i]])) return;
|
|
r = r[n[n.length - 1]];
|
|
}
|
|
return r;
|
|
}
|
|
const g = {
|
|
accountID: void 0,
|
|
trustKey: void 0,
|
|
agentID: void 0,
|
|
licenseKey: void 0,
|
|
applicationID: void 0,
|
|
xpid: void 0
|
|
},
|
|
m = {};
|
|
function v(e) {
|
|
if (!e) throw new Error("All loader-config objects require an agent identifier!");
|
|
if (!m[e]) throw new Error("LoaderConfig for ".concat(e, " was never set"));
|
|
return m[e];
|
|
}
|
|
function b(e, t) {
|
|
if (!e) throw new Error("All loader-config objects require an agent identifier!");
|
|
m[e] = (0, i.D)(t, g), (0, n.Qy)(e, m[e], "loader_config");
|
|
}
|
|
const y = (0, n.mF)().o;
|
|
var w = r(385),
|
|
A = r(6818);
|
|
const x = {
|
|
buildEnv: A.Re,
|
|
bytesSent: {},
|
|
queryBytesSent: {},
|
|
customTransaction: void 0,
|
|
disabled: !1,
|
|
distMethod: A.gF,
|
|
isolatedBacklog: !1,
|
|
loaderType: void 0,
|
|
maxBytes: 3e4,
|
|
offset: Math.floor(w._A?.performance?.timeOrigin || w._A?.performance?.timing?.navigationStart || Date.now()),
|
|
onerror: void 0,
|
|
origin: "" + w._A.location,
|
|
ptid: void 0,
|
|
releaseIds: {},
|
|
session: void 0,
|
|
xhrWrappable: "function" == typeof w._A.XMLHttpRequest?.prototype?.addEventListener,
|
|
version: A.q4,
|
|
denyList: void 0
|
|
},
|
|
E = {};
|
|
function T(e) {
|
|
if (!e) throw new Error("All runtime objects require an agent identifier!");
|
|
if (!E[e]) throw new Error("Runtime for ".concat(e, " was never set"));
|
|
return E[e];
|
|
}
|
|
function _(e, t) {
|
|
if (!e) throw new Error("All runtime objects require an agent identifier!");
|
|
E[e] = (0, i.D)(t, x), (0, n.Qy)(e, E[e], "runtime");
|
|
}
|
|
function D(e) {
|
|
return function (e) {
|
|
try {
|
|
const t = s(e);
|
|
return !!t.licenseKey && !!t.errorBeacon && !!t.applicationID;
|
|
} catch (e) {
|
|
return !1;
|
|
}
|
|
}(e);
|
|
}
|
|
},
|
|
9567: (e, t, r) => {
|
|
r.d(t, {
|
|
D: () => i
|
|
});
|
|
var n = r(50);
|
|
function i(e, t) {
|
|
try {
|
|
if (!e || "object" != typeof e) return (0, n.Z)("Setting a Configurable requires an object as input");
|
|
if (!t || "object" != typeof t) return (0, n.Z)("Setting a Configurable requires a model to set its initial properties");
|
|
const r = Object.create(Object.getPrototypeOf(t), Object.getOwnPropertyDescriptors(t)),
|
|
o = 0 === Object.keys(r).length ? e : r;
|
|
for (let a in o) if (void 0 !== e[a]) try {
|
|
"object" == typeof e[a] && "object" == typeof t[a] ? r[a] = i(e[a], t[a]) : r[a] = e[a];
|
|
} catch (e) {
|
|
(0, n.Z)("An error occurred while setting a property of a Configurable", e);
|
|
}
|
|
return r;
|
|
} catch (e) {
|
|
(0, n.Z)("An error occured while setting a Configurable", e);
|
|
}
|
|
}
|
|
},
|
|
6818: (e, t, r) => {
|
|
r.d(t, {
|
|
Re: () => i,
|
|
gF: () => o,
|
|
q4: () => n
|
|
});
|
|
const n = "1.238.0",
|
|
i = "PROD",
|
|
o = "CDN";
|
|
},
|
|
385: (e, t, r) => {
|
|
r.d(t, {
|
|
FN: () => a,
|
|
IF: () => u,
|
|
Nk: () => l,
|
|
Tt: () => s,
|
|
_A: () => o,
|
|
il: () => n,
|
|
pL: () => c,
|
|
v6: () => i,
|
|
w1: () => d
|
|
});
|
|
const n = "undefined" != typeof window && !!window.document,
|
|
i = "undefined" != typeof WorkerGlobalScope && ("undefined" != typeof self && self instanceof WorkerGlobalScope && self.navigator instanceof WorkerNavigator || "undefined" != typeof globalThis && globalThis instanceof WorkerGlobalScope && globalThis.navigator instanceof WorkerNavigator),
|
|
o = n ? window : "undefined" != typeof WorkerGlobalScope && ("undefined" != typeof self && self instanceof WorkerGlobalScope && self || "undefined" != typeof globalThis && globalThis instanceof WorkerGlobalScope && globalThis),
|
|
a = "" + o?.location,
|
|
s = /iPad|iPhone|iPod/.test(navigator.userAgent),
|
|
c = s && "undefined" == typeof SharedWorker,
|
|
u = (() => {
|
|
const e = navigator.userAgent.match(/Firefox[/\s](\d+\.\d+)/);
|
|
return Array.isArray(e) && e.length >= 2 ? +e[1] : 0;
|
|
})(),
|
|
d = Boolean(n && window.document.documentMode),
|
|
l = !!navigator.sendBeacon;
|
|
},
|
|
1117: (e, t, r) => {
|
|
r.d(t, {
|
|
w: () => o
|
|
});
|
|
var n = r(50);
|
|
const i = {
|
|
agentIdentifier: "",
|
|
ee: void 0
|
|
};
|
|
class o {
|
|
constructor(e) {
|
|
try {
|
|
if ("object" != typeof e) return (0, n.Z)("shared context requires an object as input");
|
|
this.sharedContext = {}, Object.assign(this.sharedContext, i), Object.entries(e).forEach(e => {
|
|
let [t, r] = e;
|
|
Object.keys(i).includes(t) && (this.sharedContext[t] = r);
|
|
});
|
|
} catch (e) {
|
|
(0, n.Z)("An error occured while setting SharedContext", e);
|
|
}
|
|
}
|
|
}
|
|
},
|
|
8e3: (e, t, r) => {
|
|
r.d(t, {
|
|
L: () => d,
|
|
R: () => c
|
|
});
|
|
var n = r(8325),
|
|
i = r(1284),
|
|
o = r(4322),
|
|
a = r(3325);
|
|
const s = {};
|
|
function c(e, t) {
|
|
const r = {
|
|
staged: !1,
|
|
priority: a.p[t] || 0
|
|
};
|
|
u(e), s[e].get(t) || s[e].set(t, r);
|
|
}
|
|
function u(e) {
|
|
e && (s[e] || (s[e] = new Map()));
|
|
}
|
|
function d() {
|
|
let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "",
|
|
t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "feature";
|
|
if (u(e), !e || !s[e].get(t)) return a(t);
|
|
s[e].get(t).staged = !0;
|
|
const r = [...s[e]];
|
|
function a(t) {
|
|
const r = e ? n.ee.get(e) : n.ee,
|
|
a = o.X.handlers;
|
|
if (r.backlog && a) {
|
|
var s = r.backlog[t],
|
|
c = a[t];
|
|
if (c) {
|
|
for (var u = 0; s && u < s.length; ++u) l(s[u], c);
|
|
(0, i.D)(c, function (e, t) {
|
|
(0, i.D)(t, function (t, r) {
|
|
r[0].on(e, r[1]);
|
|
});
|
|
});
|
|
}
|
|
delete a[t], r.backlog[t] = null, r.emit("drain-" + t, []);
|
|
}
|
|
}
|
|
r.every(e => {
|
|
let [t, r] = e;
|
|
return r.staged;
|
|
}) && (r.sort((e, t) => e[1].priority - t[1].priority), r.forEach(e => {
|
|
let [t] = e;
|
|
a(t);
|
|
}));
|
|
}
|
|
function l(e, t) {
|
|
var r = e[1];
|
|
(0, i.D)(t[r], function (t, r) {
|
|
var n = e[0];
|
|
if (r[0] === n) {
|
|
var i = r[1],
|
|
o = e[3],
|
|
a = e[2];
|
|
i.apply(o, a);
|
|
}
|
|
});
|
|
}
|
|
},
|
|
8325: (e, t, r) => {
|
|
r.d(t, {
|
|
A: () => c,
|
|
ee: () => u
|
|
});
|
|
var n = r(8632),
|
|
i = r(2210),
|
|
o = r(5763);
|
|
class a {
|
|
constructor(e) {
|
|
this.contextId = e;
|
|
}
|
|
}
|
|
var s = r(3117);
|
|
const c = "nr@context:".concat(s.a),
|
|
u = function e(t, r) {
|
|
var n = {},
|
|
s = {},
|
|
d = {},
|
|
f = !1;
|
|
try {
|
|
f = 16 === r.length && (0, o.OP)(r).isolatedBacklog;
|
|
} catch (e) {}
|
|
var h = {
|
|
on: g,
|
|
addEventListener: g,
|
|
removeEventListener: function (e, t) {
|
|
var r = n[e];
|
|
if (!r) return;
|
|
for (var i = 0; i < r.length; i++) r[i] === t && r.splice(i, 1);
|
|
},
|
|
emit: function (e, r, n, i, o) {
|
|
!1 !== o && (o = !0);
|
|
if (u.aborted && !i) return;
|
|
t && o && t.emit(e, r, n);
|
|
for (var a = p(n), c = m(e), d = c.length, l = 0; l < d; l++) c[l].apply(a, r);
|
|
var f = b()[s[e]];
|
|
f && f.push([h, e, r, a]);
|
|
return a;
|
|
},
|
|
get: v,
|
|
listeners: m,
|
|
context: p,
|
|
buffer: function (e, t) {
|
|
const r = b();
|
|
if (t = t || "feature", h.aborted) return;
|
|
Object.entries(e || {}).forEach(e => {
|
|
let [n, i] = e;
|
|
s[i] = t, t in r || (r[t] = []);
|
|
});
|
|
},
|
|
abort: l,
|
|
aborted: !1,
|
|
isBuffering: function (e) {
|
|
return !!b()[s[e]];
|
|
},
|
|
debugId: r,
|
|
backlog: f ? {} : t && "object" == typeof t.backlog ? t.backlog : {}
|
|
};
|
|
return h;
|
|
function p(e) {
|
|
return e && e instanceof a ? e : e ? (0, i.X)(e, c, () => new a(c)) : new a(c);
|
|
}
|
|
function g(e, t) {
|
|
n[e] = m(e).concat(t);
|
|
}
|
|
function m(e) {
|
|
return n[e] || [];
|
|
}
|
|
function v(t) {
|
|
return d[t] = d[t] || e(h, t);
|
|
}
|
|
function b() {
|
|
return h.backlog;
|
|
}
|
|
}(void 0, "globalEE"),
|
|
d = (0, n.fP)();
|
|
function l() {
|
|
u.aborted = !0, u.backlog = {};
|
|
}
|
|
d.ee || (d.ee = u);
|
|
},
|
|
5546: (e, t, r) => {
|
|
r.d(t, {
|
|
E: () => n,
|
|
p: () => i
|
|
});
|
|
var n = r(8325).ee.get("handle");
|
|
function i(e, t, r, i, o) {
|
|
o ? (o.buffer([e], i), o.emit(e, t, r)) : (n.buffer([e], i), n.emit(e, t, r));
|
|
}
|
|
},
|
|
4322: (e, t, r) => {
|
|
r.d(t, {
|
|
X: () => o
|
|
});
|
|
var n = r(5546);
|
|
o.on = a;
|
|
var i = o.handlers = {};
|
|
function o(e, t, r, o) {
|
|
a(o || n.E, i, e, t, r);
|
|
}
|
|
function a(e, t, r, i, o) {
|
|
o || (o = "feature"), e || (e = n.E);
|
|
var a = t[o] = t[o] || {};
|
|
(a[r] = a[r] || []).push([e, i]);
|
|
}
|
|
},
|
|
3239: (e, t, r) => {
|
|
r.d(t, {
|
|
bP: () => s,
|
|
iz: () => c,
|
|
m$: () => a
|
|
});
|
|
var n = r(385);
|
|
let i = !1,
|
|
o = !1;
|
|
try {
|
|
const e = {
|
|
get passive() {
|
|
return i = !0, !1;
|
|
},
|
|
get signal() {
|
|
return o = !0, !1;
|
|
}
|
|
};
|
|
n._A.addEventListener("test", null, e), n._A.removeEventListener("test", null, e);
|
|
} catch (e) {}
|
|
function a(e, t) {
|
|
return i || o ? {
|
|
capture: !!e,
|
|
passive: i,
|
|
signal: t
|
|
} : !!e;
|
|
}
|
|
function s(e, t) {
|
|
let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2],
|
|
n = arguments.length > 3 ? arguments[3] : void 0;
|
|
window.addEventListener(e, t, a(r, n));
|
|
}
|
|
function c(e, t) {
|
|
let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2],
|
|
n = arguments.length > 3 ? arguments[3] : void 0;
|
|
document.addEventListener(e, t, a(r, n));
|
|
}
|
|
},
|
|
3117: (e, t, r) => {
|
|
r.d(t, {
|
|
a: () => n
|
|
});
|
|
const n = (0, r(4402).Rl)();
|
|
},
|
|
4402: (e, t, r) => {
|
|
r.d(t, {
|
|
Ht: () => u,
|
|
M: () => c,
|
|
Rl: () => a,
|
|
ky: () => s
|
|
});
|
|
var n = r(385);
|
|
const i = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";
|
|
function o(e, t) {
|
|
return e ? 15 & e[t] : 16 * Math.random() | 0;
|
|
}
|
|
function a() {
|
|
const e = n._A?.crypto || n._A?.msCrypto;
|
|
let t,
|
|
r = 0;
|
|
return e && e.getRandomValues && (t = e.getRandomValues(new Uint8Array(31))), i.split("").map(e => "x" === e ? o(t, ++r).toString(16) : "y" === e ? (3 & o() | 8).toString(16) : e).join("");
|
|
}
|
|
function s(e) {
|
|
const t = n._A?.crypto || n._A?.msCrypto;
|
|
let r,
|
|
i = 0;
|
|
t && t.getRandomValues && (r = t.getRandomValues(new Uint8Array(31)));
|
|
const a = [];
|
|
for (var s = 0; s < e; s++) a.push(o(r, ++i).toString(16));
|
|
return a.join("");
|
|
}
|
|
function c() {
|
|
return s(16);
|
|
}
|
|
function u() {
|
|
return s(32);
|
|
}
|
|
},
|
|
7056: (e, t, r) => {
|
|
r.d(t, {
|
|
Bq: () => n,
|
|
Hb: () => o,
|
|
oD: () => i
|
|
});
|
|
const n = "NRBA",
|
|
i = 144e5,
|
|
o = 18e5;
|
|
},
|
|
7894: (e, t, r) => {
|
|
function n() {
|
|
return Math.round(performance.now());
|
|
}
|
|
r.d(t, {
|
|
z: () => n
|
|
});
|
|
},
|
|
7243: (e, t, r) => {
|
|
r.d(t, {
|
|
e: () => o
|
|
});
|
|
var n = r(385),
|
|
i = {};
|
|
function o(e) {
|
|
if (e in i) return i[e];
|
|
if (0 === (e || "").indexOf("data:")) return {
|
|
protocol: "data"
|
|
};
|
|
let t;
|
|
var r = n._A?.location,
|
|
o = {};
|
|
if (n.il) t = document.createElement("a"), t.href = e;else try {
|
|
t = new URL(e, r.href);
|
|
} catch (e) {
|
|
return o;
|
|
}
|
|
o.port = t.port;
|
|
var a = t.href.split("://");
|
|
!o.port && a[1] && (o.port = a[1].split("/")[0].split("@").pop().split(":")[1]), o.port && "0" !== o.port || (o.port = "https" === a[0] ? "443" : "80"), o.hostname = t.hostname || r.hostname, o.pathname = t.pathname, o.protocol = a[0], "/" !== o.pathname.charAt(0) && (o.pathname = "/" + o.pathname);
|
|
var s = !t.protocol || ":" === t.protocol || t.protocol === r.protocol,
|
|
c = t.hostname === r.hostname && t.port === r.port;
|
|
return o.sameOrigin = s && (!t.hostname || c), "/" === o.pathname && (i[e] = o), o;
|
|
}
|
|
},
|
|
50: (e, t, r) => {
|
|
function n(e, t) {
|
|
"function" == typeof console.warn && (console.warn("New Relic: ".concat(e)), t && console.warn(t));
|
|
}
|
|
r.d(t, {
|
|
Z: () => n
|
|
});
|
|
},
|
|
2587: (e, t, r) => {
|
|
r.d(t, {
|
|
N: () => c,
|
|
T: () => u
|
|
});
|
|
var n = r(8325),
|
|
i = r(5546),
|
|
o = r(8e3),
|
|
a = r(3325);
|
|
const s = {
|
|
stn: [a.D.sessionTrace],
|
|
err: [a.D.jserrors, a.D.metrics],
|
|
ins: [a.D.pageAction],
|
|
spa: [a.D.spa],
|
|
sr: [a.D.sessionReplay, a.D.sessionTrace]
|
|
};
|
|
function c(e, t) {
|
|
const r = n.ee.get(t);
|
|
e && "object" == typeof e && (Object.entries(e).forEach(e => {
|
|
let [t, n] = e;
|
|
void 0 === u[t] && (s[t] ? s[t].forEach(e => {
|
|
n ? (0, i.p)("feat-" + t, [], void 0, e, r) : (0, i.p)("block-" + t, [], void 0, e, r), (0, i.p)("rumresp-" + t, [Boolean(n)], void 0, e, r);
|
|
}) : n && (0, i.p)("feat-" + t, [], void 0, void 0, r), u[t] = Boolean(n));
|
|
}), Object.keys(s).forEach(e => {
|
|
void 0 === u[e] && (s[e]?.forEach(t => (0, i.p)("rumresp-" + e, [!1], void 0, t, r)), u[e] = !1);
|
|
}), (0, o.L)(t, a.D.pageViewEvent));
|
|
}
|
|
const u = {};
|
|
},
|
|
2210: (e, t, r) => {
|
|
r.d(t, {
|
|
X: () => i
|
|
});
|
|
var n = Object.prototype.hasOwnProperty;
|
|
function i(e, t, r) {
|
|
if (n.call(e, t)) return e[t];
|
|
var i = r();
|
|
if (Object.defineProperty && Object.keys) try {
|
|
return Object.defineProperty(e, t, {
|
|
value: i,
|
|
writable: !0,
|
|
enumerable: !1
|
|
}), i;
|
|
} catch (e) {}
|
|
return e[t] = i, i;
|
|
}
|
|
},
|
|
1284: (e, t, r) => {
|
|
r.d(t, {
|
|
D: () => n
|
|
});
|
|
const n = (e, t) => Object.entries(e || {}).map(e => {
|
|
let [r, n] = e;
|
|
return t(r, n);
|
|
});
|
|
},
|
|
4351: (e, t, r) => {
|
|
r.d(t, {
|
|
P: () => o
|
|
});
|
|
var n = r(8325);
|
|
const i = () => {
|
|
const e = new WeakSet();
|
|
return (t, r) => {
|
|
if ("object" == typeof r && null !== r) {
|
|
if (e.has(r)) return;
|
|
e.add(r);
|
|
}
|
|
return r;
|
|
};
|
|
};
|
|
function o(e) {
|
|
try {
|
|
return JSON.stringify(e, i());
|
|
} catch (e) {
|
|
try {
|
|
n.ee.emit("internal-error", [e]);
|
|
} catch (e) {}
|
|
}
|
|
}
|
|
},
|
|
3960: (e, t, r) => {
|
|
r.d(t, {
|
|
K: () => a,
|
|
b: () => o
|
|
});
|
|
var n = r(3239);
|
|
function i() {
|
|
return "undefined" == typeof document || "complete" === document.readyState;
|
|
}
|
|
function o(e, t) {
|
|
if (i()) return e();
|
|
(0, n.bP)("load", e, t);
|
|
}
|
|
function a(e) {
|
|
if (i()) return e();
|
|
(0, n.iz)("DOMContentLoaded", e);
|
|
}
|
|
},
|
|
8632: (e, t, r) => {
|
|
r.d(t, {
|
|
EZ: () => u,
|
|
Qy: () => c,
|
|
ce: () => o,
|
|
fP: () => a,
|
|
gG: () => d,
|
|
mF: () => s
|
|
});
|
|
var n = r(7894),
|
|
i = r(385);
|
|
const o = {
|
|
beacon: "bam.nr-data.net",
|
|
errorBeacon: "bam.nr-data.net"
|
|
};
|
|
function a() {
|
|
return i._A.NREUM || (i._A.NREUM = {}), void 0 === i._A.newrelic && (i._A.newrelic = i._A.NREUM), i._A.NREUM;
|
|
}
|
|
function s() {
|
|
let e = a();
|
|
return e.o || (e.o = {
|
|
ST: i._A.setTimeout,
|
|
SI: i._A.setImmediate,
|
|
CT: i._A.clearTimeout,
|
|
XHR: i._A.XMLHttpRequest,
|
|
REQ: i._A.Request,
|
|
EV: i._A.Event,
|
|
PR: i._A.Promise,
|
|
MO: i._A.MutationObserver,
|
|
FETCH: i._A.fetch
|
|
}), e;
|
|
}
|
|
function c(e, t, r) {
|
|
let i = a();
|
|
const o = i.initializedAgents || {},
|
|
s = o[e] || {};
|
|
return Object.keys(s).length || (s.initializedAt = {
|
|
ms: (0, n.z)(),
|
|
date: new Date()
|
|
}), i.initializedAgents = {
|
|
...o,
|
|
[e]: {
|
|
...s,
|
|
[r]: t
|
|
}
|
|
}, i;
|
|
}
|
|
function u(e, t) {
|
|
a()[e] = t;
|
|
}
|
|
function d() {
|
|
return function () {
|
|
let e = a();
|
|
const t = e.info || {};
|
|
e.info = {
|
|
beacon: o.beacon,
|
|
errorBeacon: o.errorBeacon,
|
|
...t
|
|
};
|
|
}(), function () {
|
|
let e = a();
|
|
const t = e.init || {};
|
|
e.init = {
|
|
...t
|
|
};
|
|
}(), s(), function () {
|
|
let e = a();
|
|
const t = e.loader_config || {};
|
|
e.loader_config = {
|
|
...t
|
|
};
|
|
}(), a();
|
|
}
|
|
},
|
|
7956: (e, t, r) => {
|
|
r.d(t, {
|
|
N: () => i
|
|
});
|
|
var n = r(3239);
|
|
function i(e) {
|
|
let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1],
|
|
r = arguments.length > 2 ? arguments[2] : void 0,
|
|
i = arguments.length > 3 ? arguments[3] : void 0;
|
|
return void (0, n.iz)("visibilitychange", function () {
|
|
if (t) return void ("hidden" == document.visibilityState && e());
|
|
e(document.visibilityState);
|
|
}, r, i);
|
|
}
|
|
},
|
|
1214: (e, t, r) => {
|
|
r.d(t, {
|
|
em: () => b,
|
|
u5: () => j,
|
|
QU: () => O,
|
|
_L: () => I,
|
|
Gm: () => H,
|
|
Lg: () => L,
|
|
BV: () => G,
|
|
Kf: () => K
|
|
});
|
|
var n = r(8325),
|
|
i = r(3117);
|
|
const o = "nr@original:".concat(i.a);
|
|
var a = Object.prototype.hasOwnProperty,
|
|
s = !1;
|
|
function c(e, t) {
|
|
return e || (e = n.ee), r.inPlace = function (e, t, n, i, o) {
|
|
n || (n = "");
|
|
const a = "-" === n.charAt(0);
|
|
for (let s = 0; s < t.length; s++) {
|
|
const c = t[s],
|
|
u = e[c];
|
|
d(u) || (e[c] = r(u, a ? c + n : n, i, c, o));
|
|
}
|
|
}, r.flag = o, r;
|
|
function r(t, r, n, s, c) {
|
|
return d(t) ? t : (r || (r = ""), nrWrapper[o] = t, function (e, t, r) {
|
|
if (Object.defineProperty && Object.keys) try {
|
|
return Object.keys(e).forEach(function (r) {
|
|
Object.defineProperty(t, r, {
|
|
get: function () {
|
|
return e[r];
|
|
},
|
|
set: function (t) {
|
|
return e[r] = t, t;
|
|
}
|
|
});
|
|
}), t;
|
|
} catch (e) {
|
|
u([e], r);
|
|
}
|
|
for (var n in e) a.call(e, n) && (t[n] = e[n]);
|
|
}(t, nrWrapper, e), nrWrapper);
|
|
function nrWrapper() {
|
|
var o, a, d, l;
|
|
try {
|
|
a = this, o = [...arguments], d = "function" == typeof n ? n(o, a) : n || {};
|
|
} catch (t) {
|
|
u([t, "", [o, a, s], d], e);
|
|
}
|
|
i(r + "start", [o, a, s], d, c);
|
|
try {
|
|
return l = t.apply(a, o);
|
|
} catch (e) {
|
|
throw i(r + "err", [o, a, e], d, c), e;
|
|
} finally {
|
|
i(r + "end", [o, a, l], d, c);
|
|
}
|
|
}
|
|
}
|
|
function i(r, n, i, o) {
|
|
if (!s || t) {
|
|
var a = s;
|
|
s = !0;
|
|
try {
|
|
e.emit(r, n, i, t, o);
|
|
} catch (t) {
|
|
u([t, r, n, i], e);
|
|
}
|
|
s = a;
|
|
}
|
|
}
|
|
}
|
|
function u(e, t) {
|
|
t || (t = n.ee);
|
|
try {
|
|
t.emit("internal-error", e);
|
|
} catch (e) {}
|
|
}
|
|
function d(e) {
|
|
return !(e && e instanceof Function && e.apply && !e[o]);
|
|
}
|
|
var l = r(2210),
|
|
f = r(385);
|
|
const h = {},
|
|
p = f._A.XMLHttpRequest,
|
|
g = "addEventListener",
|
|
m = "removeEventListener",
|
|
v = "nr@wrapped:".concat(n.A);
|
|
function b(e) {
|
|
var t = function (e) {
|
|
return (e || n.ee).get("events");
|
|
}(e);
|
|
if (h[t.debugId]++) return t;
|
|
h[t.debugId] = 1;
|
|
var r = c(t, !0);
|
|
function i(e) {
|
|
r.inPlace(e, [g, m], "-", o);
|
|
}
|
|
function o(e, t) {
|
|
return e[1];
|
|
}
|
|
return "getPrototypeOf" in Object && (f.il && y(document, i), y(f._A, i), y(p.prototype, i)), t.on(g + "-start", function (e, t) {
|
|
var n = e[1];
|
|
if (null !== n && ("function" == typeof n || "object" == typeof n)) {
|
|
var i = (0, l.X)(n, v, function () {
|
|
var e = {
|
|
object: function () {
|
|
if ("function" != typeof n.handleEvent) return;
|
|
return n.handleEvent.apply(n, arguments);
|
|
},
|
|
function: n
|
|
}[typeof n];
|
|
return e ? r(e, "fn-", null, e.name || "anonymous") : n;
|
|
});
|
|
this.wrapped = e[1] = i;
|
|
}
|
|
}), t.on(m + "-start", function (e) {
|
|
e[1] = this.wrapped || e[1];
|
|
}), t;
|
|
}
|
|
function y(e, t) {
|
|
let r = e;
|
|
for (; "object" == typeof r && !Object.prototype.hasOwnProperty.call(r, g);) r = Object.getPrototypeOf(r);
|
|
for (var n = arguments.length, i = new Array(n > 2 ? n - 2 : 0), o = 2; o < n; o++) i[o - 2] = arguments[o];
|
|
r && t(r, ...i);
|
|
}
|
|
var w = "fetch-",
|
|
A = w + "body-",
|
|
x = ["arrayBuffer", "blob", "json", "text", "formData"],
|
|
E = f._A.Request,
|
|
T = f._A.Response,
|
|
_ = "prototype";
|
|
const D = {};
|
|
function j(e) {
|
|
const t = function (e) {
|
|
return (e || n.ee).get("fetch");
|
|
}(e);
|
|
if (!(E && T && f._A.fetch)) return t;
|
|
if (D[t.debugId]++) return t;
|
|
function r(e, r, i) {
|
|
var o = e[r];
|
|
"function" == typeof o && (e[r] = function () {
|
|
var e,
|
|
r = [...arguments],
|
|
a = {};
|
|
t.emit(i + "before-start", [r], a), a[n.A] && a[n.A].dt && (e = a[n.A].dt);
|
|
var s = o.apply(this, r);
|
|
return t.emit(i + "start", [r, e], s), s.then(function (e) {
|
|
return t.emit(i + "end", [null, e], s), e;
|
|
}, function (e) {
|
|
throw t.emit(i + "end", [e], s), e;
|
|
});
|
|
});
|
|
}
|
|
return D[t.debugId] = 1, x.forEach(e => {
|
|
r(E[_], e, A), r(T[_], e, A);
|
|
}), r(f._A, "fetch", w), t.on(w + "end", function (e, r) {
|
|
var n = this;
|
|
if (r) {
|
|
var i = r.headers.get("content-length");
|
|
null !== i && (n.rxSize = i), t.emit(w + "done", [null, r], n);
|
|
} else t.emit(w + "done", [e], n);
|
|
}), t;
|
|
}
|
|
const C = {},
|
|
N = ["pushState", "replaceState"];
|
|
function O(e) {
|
|
const t = function (e) {
|
|
return (e || n.ee).get("history");
|
|
}(e);
|
|
return !f.il || C[t.debugId]++ || (C[t.debugId] = 1, c(t).inPlace(window.history, N, "-")), t;
|
|
}
|
|
var S = r(3239);
|
|
const P = {},
|
|
R = ["appendChild", "insertBefore", "replaceChild"];
|
|
function I(e) {
|
|
const t = function (e) {
|
|
return (e || n.ee).get("jsonp");
|
|
}(e);
|
|
if (!f.il || P[t.debugId]) return t;
|
|
P[t.debugId] = !0;
|
|
var r = c(t),
|
|
i = /[?&](?:callback|cb)=([^&#]+)/,
|
|
o = /(.*)\.([^.]+)/,
|
|
a = /^(\w+)(\.|$)(.*)$/;
|
|
function s(e, t) {
|
|
if (!e) return t;
|
|
const r = e.match(a),
|
|
n = r[1];
|
|
return s(r[3], t[n]);
|
|
}
|
|
return r.inPlace(Node.prototype, R, "dom-"), t.on("dom-start", function (e) {
|
|
!function (e) {
|
|
if (!e || "string" != typeof e.nodeName || "script" !== e.nodeName.toLowerCase()) return;
|
|
if ("function" != typeof e.addEventListener) return;
|
|
var n = (a = e.src, c = a.match(i), c ? c[1] : null);
|
|
var a, c;
|
|
if (!n) return;
|
|
var u = function (e) {
|
|
var t = e.match(o);
|
|
if (t && t.length >= 3) return {
|
|
key: t[2],
|
|
parent: s(t[1], window)
|
|
};
|
|
return {
|
|
key: e,
|
|
parent: window
|
|
};
|
|
}(n);
|
|
if ("function" != typeof u.parent[u.key]) return;
|
|
var d = {};
|
|
function l() {
|
|
t.emit("jsonp-end", [], d), e.removeEventListener("load", l, (0, S.m$)(!1)), e.removeEventListener("error", f, (0, S.m$)(!1));
|
|
}
|
|
function f() {
|
|
t.emit("jsonp-error", [], d), t.emit("jsonp-end", [], d), e.removeEventListener("load", l, (0, S.m$)(!1)), e.removeEventListener("error", f, (0, S.m$)(!1));
|
|
}
|
|
r.inPlace(u.parent, [u.key], "cb-", d), e.addEventListener("load", l, (0, S.m$)(!1)), e.addEventListener("error", f, (0, S.m$)(!1)), t.emit("new-jsonp", [e.src], d);
|
|
}(e[0]);
|
|
}), t;
|
|
}
|
|
const k = {};
|
|
function H(e) {
|
|
const t = function (e) {
|
|
return (e || n.ee).get("mutation");
|
|
}(e);
|
|
if (!f.il || k[t.debugId]) return t;
|
|
k[t.debugId] = !0;
|
|
var r = c(t),
|
|
i = f._A.MutationObserver;
|
|
return i && (window.MutationObserver = function (e) {
|
|
return this instanceof i ? new i(r(e, "fn-")) : i.apply(this, arguments);
|
|
}, MutationObserver.prototype = i.prototype), t;
|
|
}
|
|
const z = {};
|
|
function L(e) {
|
|
const t = function (e) {
|
|
return (e || n.ee).get("promise");
|
|
}(e);
|
|
if (z[t.debugId]) return t;
|
|
z[t.debugId] = !0;
|
|
var r = t.context,
|
|
i = c(t),
|
|
a = f._A.Promise;
|
|
return a && function () {
|
|
function e(r) {
|
|
var n = t.context(),
|
|
o = i(r, "executor-", n, null, !1);
|
|
const s = Reflect.construct(a, [o], e);
|
|
return t.context(s).getCtx = function () {
|
|
return n;
|
|
}, s;
|
|
}
|
|
f._A.Promise = e, Object.defineProperty(e, "name", {
|
|
value: "Promise"
|
|
}), e.toString = function () {
|
|
return a.toString();
|
|
}, Object.setPrototypeOf(e, a), ["all", "race"].forEach(function (r) {
|
|
const n = a[r];
|
|
e[r] = function (e) {
|
|
let i = !1;
|
|
[...(e || [])].forEach(e => {
|
|
this.resolve(e).then(a("all" === r), a(!1));
|
|
});
|
|
const o = n.apply(this, arguments);
|
|
return o;
|
|
function a(e) {
|
|
return function () {
|
|
t.emit("propagate", [null, !i], o, !1, !1), i = i || !e;
|
|
};
|
|
}
|
|
};
|
|
}), ["resolve", "reject"].forEach(function (r) {
|
|
const n = a[r];
|
|
e[r] = function (e) {
|
|
const r = n.apply(this, arguments);
|
|
return e !== r && t.emit("propagate", [e, !0], r, !1, !1), r;
|
|
};
|
|
}), e.prototype = a.prototype;
|
|
const n = a.prototype.then;
|
|
a.prototype.then = function () {
|
|
var e = this,
|
|
o = r(e);
|
|
o.promise = e;
|
|
for (var a = arguments.length, s = new Array(a), c = 0; c < a; c++) s[c] = arguments[c];
|
|
s[0] = i(s[0], "cb-", o, null, !1), s[1] = i(s[1], "cb-", o, null, !1);
|
|
const u = n.apply(this, s);
|
|
return o.nextPromise = u, t.emit("propagate", [e, !0], u, !1, !1), u;
|
|
}, a.prototype.then[o] = n, t.on("executor-start", function (e) {
|
|
e[0] = i(e[0], "resolve-", this, null, !1), e[1] = i(e[1], "resolve-", this, null, !1);
|
|
}), t.on("executor-err", function (e, t, r) {
|
|
e[1](r);
|
|
}), t.on("cb-end", function (e, r, n) {
|
|
t.emit("propagate", [n, !0], this.nextPromise, !1, !1);
|
|
}), t.on("propagate", function (e, r, n) {
|
|
this.getCtx && !r || (this.getCtx = function () {
|
|
if (e instanceof Promise) var r = t.context(e);
|
|
return r && r.getCtx ? r.getCtx() : this;
|
|
});
|
|
});
|
|
}(), t;
|
|
}
|
|
const M = {},
|
|
B = "setTimeout",
|
|
F = "setInterval",
|
|
U = "clearTimeout",
|
|
q = "-start",
|
|
Z = "-",
|
|
V = [B, "setImmediate", F, U, "clearImmediate"];
|
|
function G(e) {
|
|
const t = function (e) {
|
|
return (e || n.ee).get("timer");
|
|
}(e);
|
|
if (M[t.debugId]++) return t;
|
|
M[t.debugId] = 1;
|
|
var r = c(t);
|
|
return r.inPlace(f._A, V.slice(0, 2), B + Z), r.inPlace(f._A, V.slice(2, 3), F + Z), r.inPlace(f._A, V.slice(3), U + Z), t.on(F + q, function (e, t, n) {
|
|
e[0] = r(e[0], "fn-", null, n);
|
|
}), t.on(B + q, function (e, t, n) {
|
|
this.method = n, this.timerDuration = isNaN(e[1]) ? 0 : +e[1], e[0] = r(e[0], "fn-", this, n);
|
|
}), t;
|
|
}
|
|
var W = r(50);
|
|
const X = {},
|
|
Q = ["open", "send"];
|
|
function K(e) {
|
|
var t = e || n.ee;
|
|
const r = function (e) {
|
|
return (e || n.ee).get("xhr");
|
|
}(t);
|
|
if (X[r.debugId]++) return r;
|
|
X[r.debugId] = 1, b(t);
|
|
var i = c(r),
|
|
o = f._A.XMLHttpRequest,
|
|
a = f._A.MutationObserver,
|
|
s = f._A.Promise,
|
|
u = f._A.setInterval,
|
|
d = "readystatechange",
|
|
l = ["onload", "onerror", "onabort", "onloadstart", "onloadend", "onprogress", "ontimeout"],
|
|
h = [],
|
|
p = f._A.XMLHttpRequest = function (e) {
|
|
const t = new o(e),
|
|
n = r.context(t);
|
|
try {
|
|
r.emit("new-xhr", [t], n), t.addEventListener(d, (a = n, function () {
|
|
var e = this;
|
|
e.readyState > 3 && !a.resolved && (a.resolved = !0, r.emit("xhr-resolved", [], e)), i.inPlace(e, l, "fn-", A);
|
|
}), (0, S.m$)(!1));
|
|
} catch (e) {
|
|
(0, W.Z)("An error occurred while intercepting XHR", e);
|
|
try {
|
|
r.emit("internal-error", [e]);
|
|
} catch (e) {}
|
|
}
|
|
var a;
|
|
return t;
|
|
};
|
|
function g(e, t) {
|
|
i.inPlace(t, ["onreadystatechange"], "fn-", A);
|
|
}
|
|
if (function (e, t) {
|
|
for (var r in e) t[r] = e[r];
|
|
}(o, p), p.prototype = o.prototype, i.inPlace(p.prototype, Q, "-xhr-", A), r.on("send-xhr-start", function (e, t) {
|
|
g(e, t), function (e) {
|
|
h.push(e), a && (m ? m.then(w) : u ? u(w) : (v = -v, y.data = v));
|
|
}(t);
|
|
}), r.on("open-xhr-start", g), a) {
|
|
var m = s && s.resolve();
|
|
if (!u && !s) {
|
|
var v = 1,
|
|
y = document.createTextNode(v);
|
|
new a(w).observe(y, {
|
|
characterData: !0
|
|
});
|
|
}
|
|
} else t.on("fn-end", function (e) {
|
|
e[0] && e[0].type === d || w();
|
|
});
|
|
function w() {
|
|
for (var e = 0; e < h.length; e++) g(0, h[e]);
|
|
h.length && (h = []);
|
|
}
|
|
function A(e, t) {
|
|
return t;
|
|
}
|
|
return r;
|
|
}
|
|
},
|
|
7825: (e, t, r) => {
|
|
r.d(t, {
|
|
t: () => n
|
|
});
|
|
const n = r(3325).D.ajax;
|
|
},
|
|
6660: (e, t, r) => {
|
|
r.d(t, {
|
|
t: () => n
|
|
});
|
|
const n = r(3325).D.jserrors;
|
|
},
|
|
3081: (e, t, r) => {
|
|
r.d(t, {
|
|
gF: () => o,
|
|
mY: () => i,
|
|
t9: () => n,
|
|
vz: () => s,
|
|
xS: () => a
|
|
});
|
|
const n = r(3325).D.metrics,
|
|
i = "sm",
|
|
o = "cm",
|
|
a = "storeSupportabilityMetrics",
|
|
s = "storeEventMetrics";
|
|
},
|
|
4649: (e, t, r) => {
|
|
r.d(t, {
|
|
t: () => n
|
|
});
|
|
const n = r(3325).D.pageAction;
|
|
},
|
|
7633: (e, t, r) => {
|
|
r.d(t, {
|
|
Dz: () => i,
|
|
OJ: () => a,
|
|
qw: () => o,
|
|
t9: () => n
|
|
});
|
|
const n = r(3325).D.pageViewEvent,
|
|
i = "firstbyte",
|
|
o = "domcontent",
|
|
a = "windowload";
|
|
},
|
|
9251: (e, t, r) => {
|
|
r.d(t, {
|
|
t: () => n
|
|
});
|
|
const n = r(3325).D.pageViewTiming;
|
|
},
|
|
3614: (e, t, r) => {
|
|
r.d(t, {
|
|
BST_RESOURCE: () => i,
|
|
END: () => s,
|
|
FEATURE_NAME: () => n,
|
|
FN_END: () => u,
|
|
FN_START: () => c,
|
|
PUSH_STATE: () => d,
|
|
RESOURCE: () => o,
|
|
START: () => a
|
|
});
|
|
const n = r(3325).D.sessionTrace,
|
|
i = "bstResource",
|
|
o = "resource",
|
|
a = "-start",
|
|
s = "-end",
|
|
c = "fn" + a,
|
|
u = "fn" + s,
|
|
d = "pushState";
|
|
},
|
|
7836: (e, t, r) => {
|
|
r.d(t, {
|
|
BODY: () => x,
|
|
CB_END: () => E,
|
|
CB_START: () => u,
|
|
END: () => A,
|
|
FEATURE_NAME: () => i,
|
|
FETCH: () => _,
|
|
FETCH_BODY: () => v,
|
|
FETCH_DONE: () => m,
|
|
FETCH_START: () => g,
|
|
FN_END: () => c,
|
|
FN_START: () => s,
|
|
INTERACTION: () => f,
|
|
INTERACTION_API: () => d,
|
|
INTERACTION_EVENTS: () => o,
|
|
JSONP_END: () => b,
|
|
JSONP_NODE: () => p,
|
|
JS_TIME: () => T,
|
|
MAX_TIMER_BUDGET: () => a,
|
|
REMAINING: () => l,
|
|
SPA_NODE: () => h,
|
|
START: () => w,
|
|
originalSetTimeout: () => y
|
|
});
|
|
var n = r(5763);
|
|
const i = r(3325).D.spa,
|
|
o = ["click", "submit", "keypress", "keydown", "keyup", "change"],
|
|
a = 999,
|
|
s = "fn-start",
|
|
c = "fn-end",
|
|
u = "cb-start",
|
|
d = "api-ixn-",
|
|
l = "remaining",
|
|
f = "interaction",
|
|
h = "spaNode",
|
|
p = "jsonpNode",
|
|
g = "fetch-start",
|
|
m = "fetch-done",
|
|
v = "fetch-body-",
|
|
b = "jsonp-end",
|
|
y = n.Yu.ST,
|
|
w = "-start",
|
|
A = "-end",
|
|
x = "-body",
|
|
E = "cb" + A,
|
|
T = "jsTime",
|
|
_ = "fetch";
|
|
},
|
|
5938: (e, t, r) => {
|
|
r.d(t, {
|
|
W: () => o
|
|
});
|
|
var n = r(5763),
|
|
i = r(8325);
|
|
class o {
|
|
constructor(e, t, r) {
|
|
this.agentIdentifier = e, this.aggregator = t, this.ee = i.ee.get(e, (0, n.OP)(this.agentIdentifier).isolatedBacklog), this.featureName = r, this.blocked = !1;
|
|
}
|
|
}
|
|
},
|
|
9144: (e, t, r) => {
|
|
r.d(t, {
|
|
j: () => m
|
|
});
|
|
var n = r(3325),
|
|
i = r(5763),
|
|
o = r(5546),
|
|
a = r(8325),
|
|
s = r(7894),
|
|
c = r(8e3),
|
|
u = r(3960),
|
|
d = r(385),
|
|
l = r(50),
|
|
f = r(3081),
|
|
h = r(8632);
|
|
function p() {
|
|
const e = (0, h.gG)();
|
|
["setErrorHandler", "finished", "addToTrace", "inlineHit", "addRelease", "addPageAction", "setCurrentRouteName", "setPageViewName", "setCustomAttribute", "interaction", "noticeError", "setUserId", "setApplicationVersion"].forEach(t => {
|
|
e[t] = function () {
|
|
for (var r = arguments.length, n = new Array(r), i = 0; i < r; i++) n[i] = arguments[i];
|
|
return function (t) {
|
|
for (var r = arguments.length, n = new Array(r > 1 ? r - 1 : 0), i = 1; i < r; i++) n[i - 1] = arguments[i];
|
|
let o = [];
|
|
return Object.values(e.initializedAgents).forEach(e => {
|
|
e.exposed && e.api[t] && o.push(e.api[t](...n));
|
|
}), o.length > 1 ? o : o[0];
|
|
}(t, ...n);
|
|
};
|
|
});
|
|
}
|
|
var g = r(2587);
|
|
function m(e) {
|
|
let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
|
|
m = arguments.length > 2 ? arguments[2] : void 0,
|
|
v = arguments.length > 3 ? arguments[3] : void 0,
|
|
{
|
|
init: b,
|
|
info: y,
|
|
loader_config: w,
|
|
runtime: A = {
|
|
loaderType: m
|
|
},
|
|
exposed: x = !0
|
|
} = t;
|
|
const E = (0, h.gG)();
|
|
y || (b = E.init, y = E.info, w = E.loader_config), (0, i.Dg)(e, b || {}), (0, i.GE)(e, w || {}), y.jsAttributes ??= {}, d.v6 && (y.jsAttributes.isWorker = !0), (0, i.CX)(e, y);
|
|
const T = (0, i.P_)(e);
|
|
A.denyList = [...(T.ajax?.deny_list || []), ...(T.ajax?.block_internal ? [y.beacon, y.errorBeacon] : [])], (0, i.sU)(e, A), p();
|
|
const _ = function (e, t) {
|
|
t || (0, c.R)(e, "api");
|
|
const h = {};
|
|
var p = a.ee.get(e),
|
|
g = p.get("tracer"),
|
|
m = "api-",
|
|
v = m + "ixn-";
|
|
function b(t, r, n, o) {
|
|
const a = (0, i.C5)(e);
|
|
return null === r ? delete a.jsAttributes[t] : (0, i.CX)(e, {
|
|
...a,
|
|
jsAttributes: {
|
|
...a.jsAttributes,
|
|
[t]: r
|
|
}
|
|
}), A(m, n, !0, o || null === r ? "session" : void 0)(t, r);
|
|
}
|
|
function y() {}
|
|
["setErrorHandler", "finished", "addToTrace", "inlineHit", "addRelease"].forEach(e => h[e] = A(m, e, !0, "api")), h.addPageAction = A(m, "addPageAction", !0, n.D.pageAction), h.setCurrentRouteName = A(m, "routeName", !0, n.D.spa), h.setPageViewName = function (t, r) {
|
|
if ("string" == typeof t) return "/" !== t.charAt(0) && (t = "/" + t), (0, i.OP)(e).customTransaction = (r || "http://custom.transaction") + t, A(m, "setPageViewName", !0)();
|
|
}, h.setCustomAttribute = function (e, t) {
|
|
let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2];
|
|
if ("string" == typeof e) {
|
|
if (["string", "number"].includes(typeof t) || null === t) return b(e, t, "setCustomAttribute", r);
|
|
(0, l.Z)("Failed to execute setCustomAttribute.\nNon-null value must be a string or number type, but a type of <".concat(typeof t, "> was provided."));
|
|
} else (0, l.Z)("Failed to execute setCustomAttribute.\nName must be a string type, but a type of <".concat(typeof e, "> was provided."));
|
|
}, h.setUserId = function (e) {
|
|
if ("string" == typeof e || null === e) return b("enduser.id", e, "setUserId", !0);
|
|
(0, l.Z)("Failed to execute setUserId.\nNon-null value must be a string type, but a type of <".concat(typeof e, "> was provided."));
|
|
}, h.setApplicationVersion = function (e) {
|
|
if ("string" == typeof e || null === e) return b("application.version", e, "setApplicationVersion", !1);
|
|
(0, l.Z)("Failed to execute setApplicationVersion. Expected <String | null>, but got <".concat(typeof e, ">."));
|
|
}, h.interaction = function () {
|
|
return new y().get();
|
|
};
|
|
var w = y.prototype = {
|
|
createTracer: function (e, t) {
|
|
var r = {},
|
|
i = this,
|
|
a = "function" == typeof t;
|
|
return (0, o.p)(v + "tracer", [(0, s.z)(), e, r], i, n.D.spa, p), function () {
|
|
if (g.emit((a ? "" : "no-") + "fn-start", [(0, s.z)(), i, a], r), a) try {
|
|
return t.apply(this, arguments);
|
|
} catch (e) {
|
|
throw g.emit("fn-err", [arguments, this, e], r), e;
|
|
} finally {
|
|
g.emit("fn-end", [(0, s.z)()], r);
|
|
}
|
|
};
|
|
}
|
|
};
|
|
function A(e, t, r, i) {
|
|
return function () {
|
|
return (0, o.p)(f.xS, ["API/" + t + "/called"], void 0, n.D.metrics, p), i && (0, o.p)(e + t, [(0, s.z)(), ...arguments], r ? null : this, i, p), r ? void 0 : this;
|
|
};
|
|
}
|
|
function x() {
|
|
r.e(111).then(r.bind(r, 7438)).then(t => {
|
|
let {
|
|
setAPI: r
|
|
} = t;
|
|
r(e), (0, c.L)(e, "api");
|
|
}).catch(() => (0, l.Z)("Downloading runtime APIs failed..."));
|
|
}
|
|
return ["actionText", "setName", "setAttribute", "save", "ignore", "onEnd", "getContext", "end", "get"].forEach(e => {
|
|
w[e] = A(v, e, void 0, n.D.spa);
|
|
}), h.noticeError = function (e, t) {
|
|
"string" == typeof e && (e = new Error(e)), (0, o.p)(f.xS, ["API/noticeError/called"], void 0, n.D.metrics, p), (0, o.p)("err", [e, (0, s.z)(), !1, t], void 0, n.D.jserrors, p);
|
|
}, d.il ? (0, u.b)(() => x(), !0) : x(), h;
|
|
}(e, v);
|
|
return (0, h.Qy)(e, _, "api"), (0, h.Qy)(e, x, "exposed"), (0, h.EZ)("activatedFeatures", g.T), _;
|
|
}
|
|
},
|
|
3325: (e, t, r) => {
|
|
r.d(t, {
|
|
D: () => n,
|
|
p: () => i
|
|
});
|
|
const n = {
|
|
ajax: "ajax",
|
|
jserrors: "jserrors",
|
|
metrics: "metrics",
|
|
pageAction: "page_action",
|
|
pageViewEvent: "page_view_event",
|
|
pageViewTiming: "page_view_timing",
|
|
sessionReplay: "session_replay",
|
|
sessionTrace: "session_trace",
|
|
spa: "spa"
|
|
},
|
|
i = {
|
|
[n.pageViewEvent]: 1,
|
|
[n.pageViewTiming]: 2,
|
|
[n.metrics]: 3,
|
|
[n.jserrors]: 4,
|
|
[n.ajax]: 5,
|
|
[n.sessionTrace]: 6,
|
|
[n.pageAction]: 7,
|
|
[n.spa]: 8,
|
|
[n.sessionReplay]: 9
|
|
};
|
|
}
|
|
},
|
|
n = {};
|
|
function i(e) {
|
|
var t = n[e];
|
|
if (void 0 !== t) return t.exports;
|
|
var o = n[e] = {
|
|
exports: {}
|
|
};
|
|
return r[e](o, o.exports, i), o.exports;
|
|
}
|
|
i.m = r, i.d = (e, t) => {
|
|
for (var r in t) i.o(t, r) && !i.o(e, r) && Object.defineProperty(e, r, {
|
|
enumerable: !0,
|
|
get: t[r]
|
|
});
|
|
}, i.f = {}, i.e = e => Promise.all(Object.keys(i.f).reduce((t, r) => (i.f[r](e, t), t), [])), i.u = e => "nr-spa.1097a448-1.238.0.min.js", i.o = (e, t) => Object.prototype.hasOwnProperty.call(e, t), e = {}, t = "NRBA-1.238.0.PROD:", i.l = (r, n, o, a) => {
|
|
if (e[r]) e[r].push(n);else {
|
|
var s, c;
|
|
if (void 0 !== o) for (var u = document.getElementsByTagName("script"), d = 0; d < u.length; d++) {
|
|
var l = u[d];
|
|
if (l.getAttribute("src") == r || l.getAttribute("data-webpack") == t + o) {
|
|
s = l;
|
|
break;
|
|
}
|
|
}
|
|
s || (c = !0, (s = document.createElement("script")).charset = "utf-8", s.timeout = 120, i.nc && s.setAttribute("nonce", i.nc), s.setAttribute("data-webpack", t + o), s.src = r), e[r] = [n];
|
|
var f = (t, n) => {
|
|
s.onerror = s.onload = null, clearTimeout(h);
|
|
var i = e[r];
|
|
if (delete e[r], s.parentNode && s.parentNode.removeChild(s), i && i.forEach(e => e(n)), t) return t(n);
|
|
},
|
|
h = setTimeout(f.bind(null, void 0, {
|
|
type: "timeout",
|
|
target: s
|
|
}), 12e4);
|
|
s.onerror = f.bind(null, s.onerror), s.onload = f.bind(null, s.onload), c && document.head.appendChild(s);
|
|
}
|
|
}, i.r = e => {
|
|
"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {
|
|
value: "Module"
|
|
}), Object.defineProperty(e, "__esModule", {
|
|
value: !0
|
|
});
|
|
}, i.p = "https://js-agent.newrelic.com/", (() => {
|
|
var e = {
|
|
801: 0,
|
|
92: 0
|
|
};
|
|
i.f.j = (t, r) => {
|
|
var n = i.o(e, t) ? e[t] : void 0;
|
|
if (0 !== n) if (n) r.push(n[2]);else {
|
|
var o = new Promise((r, i) => n = e[t] = [r, i]);
|
|
r.push(n[2] = o);
|
|
var a = i.p + i.u(t),
|
|
s = new Error();
|
|
i.l(a, r => {
|
|
if (i.o(e, t) && (0 !== (n = e[t]) && (e[t] = void 0), n)) {
|
|
var o = r && ("load" === r.type ? "missing" : r.type),
|
|
a = r && r.target && r.target.src;
|
|
s.message = "Loading chunk " + t + " failed.\n(" + o + ": " + a + ")", s.name = "ChunkLoadError", s.type = o, s.request = a, n[1](s);
|
|
}
|
|
}, "chunk-" + t, t);
|
|
}
|
|
};
|
|
var t = (t, r) => {
|
|
var n,
|
|
o,
|
|
[a, s, c] = r,
|
|
u = 0;
|
|
if (a.some(t => 0 !== e[t])) {
|
|
for (n in s) i.o(s, n) && (i.m[n] = s[n]);
|
|
if (c) c(i);
|
|
}
|
|
for (t && t(r); u < a.length; u++) o = a[u], i.o(e, o) && e[o] && e[o][0](), e[o] = 0;
|
|
},
|
|
r = self["webpackChunk:NRBA-1.238.0.PROD"] = self["webpackChunk:NRBA-1.238.0.PROD"] || [];
|
|
r.forEach(t.bind(null, 0)), r.push = t.bind(null, r.push.bind(r));
|
|
})(), (() => {
|
|
var e = i(50);
|
|
class t {
|
|
addPageAction(t, r) {
|
|
(0, e.Z)("Call to agent api addPageAction failed. The session trace feature is not currently initialized.");
|
|
}
|
|
setPageViewName(t, r) {
|
|
(0, e.Z)("Call to agent api setPageViewName failed. The page view feature is not currently initialized.");
|
|
}
|
|
setCustomAttribute(t, r, n) {
|
|
(0, e.Z)("Call to agent api setCustomAttribute failed. The js errors feature is not currently initialized.");
|
|
}
|
|
noticeError(t, r) {
|
|
(0, e.Z)("Call to agent api noticeError failed. The js errors feature is not currently initialized.");
|
|
}
|
|
setUserId(t) {
|
|
(0, e.Z)("Call to agent api setUserId failed. The js errors feature is not currently initialized.");
|
|
}
|
|
setApplicationVersion(t) {
|
|
(0, e.Z)("Call to agent api setApplicationVersion failed. The agent is not currently initialized.");
|
|
}
|
|
setErrorHandler(t) {
|
|
(0, e.Z)("Call to agent api setErrorHandler failed. The js errors feature is not currently initialized.");
|
|
}
|
|
finished(t) {
|
|
(0, e.Z)("Call to agent api finished failed. The page action feature is not currently initialized.");
|
|
}
|
|
addRelease(t, r) {
|
|
(0, e.Z)("Call to agent api addRelease failed. The agent is not currently initialized.");
|
|
}
|
|
}
|
|
var r = i(3325),
|
|
n = i(5763);
|
|
const o = Object.values(r.D);
|
|
function a(e) {
|
|
const t = {};
|
|
return o.forEach(r => {
|
|
t[r] = function (e, t) {
|
|
return !1 !== (0, n.Mt)(t, "".concat(e, ".enabled"));
|
|
}(r, e);
|
|
}), t;
|
|
}
|
|
var s = i(9144);
|
|
var c = i(5546),
|
|
u = i(385),
|
|
d = i(8e3),
|
|
l = i(5938),
|
|
f = i(3960);
|
|
class h extends l.W {
|
|
constructor(e, t, r) {
|
|
let n = !(arguments.length > 3 && void 0 !== arguments[3]) || arguments[3];
|
|
super(e, t, r), this.auto = n, this.abortHandler, this.featAggregate, this.onAggregateImported, n && (0, d.R)(e, r);
|
|
}
|
|
importAggregator() {
|
|
let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
|
|
if (this.featAggregate || !this.auto) return;
|
|
const r = u.il && !0 === (0, n.Mt)(this.agentIdentifier, "privacy.cookies_enabled");
|
|
let o;
|
|
this.onAggregateImported = new Promise(e => {
|
|
o = e;
|
|
});
|
|
const a = async () => {
|
|
let n;
|
|
try {
|
|
if (r) {
|
|
const {
|
|
setupAgentSession: e
|
|
} = await i.e(111).then(i.bind(i, 3228));
|
|
n = e(this.agentIdentifier);
|
|
}
|
|
} catch (t) {
|
|
(0, e.Z)("A problem occurred when starting up session manager. This page will not start or extend any session.", t);
|
|
}
|
|
try {
|
|
if (!this.shouldImportAgg(this.featureName, n)) return (0, d.L)(this.agentIdentifier, this.featureName), void o(!1);
|
|
const {
|
|
lazyFeatureLoader: e
|
|
} = await i.e(111).then(i.bind(i, 8582)),
|
|
{
|
|
Aggregate: r
|
|
} = await e(this.featureName, "aggregate");
|
|
this.featAggregate = new r(this.agentIdentifier, this.aggregator, t), o(!0);
|
|
} catch (t) {
|
|
(0, e.Z)("Downloading and initializing ".concat(this.featureName, " failed..."), t), this.abortHandler?.(), o(!1);
|
|
}
|
|
};
|
|
u.il ? (0, f.b)(() => a(), !0) : a();
|
|
}
|
|
shouldImportAgg(e, t) {
|
|
return e !== r.D.sessionReplay || !!n.Yu.MO && !1 !== (0, n.Mt)(this.agentIdentifier, "session_trace.enabled") && (!!t?.isNew || !!t?.state.sessionReplay);
|
|
}
|
|
}
|
|
var p = i(7633),
|
|
g = i(7894);
|
|
class m extends h {
|
|
static featureName = p.t9;
|
|
constructor(e, t) {
|
|
let i = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2];
|
|
if (super(e, t, p.t9, i), ("undefined" == typeof PerformanceNavigationTiming || u.Tt) && "undefined" != typeof PerformanceTiming) {
|
|
const t = (0, n.OP)(e);
|
|
t[p.Dz] = Math.max(Date.now() - t.offset, 0), (0, f.K)(() => t[p.qw] = Math.max((0, g.z)() - t[p.Dz], 0)), (0, f.b)(() => {
|
|
const e = (0, g.z)();
|
|
t[p.OJ] = Math.max(e - t[p.Dz], 0), (0, c.p)("timing", ["load", e], void 0, r.D.pageViewTiming, this.ee);
|
|
});
|
|
}
|
|
this.importAggregator();
|
|
}
|
|
}
|
|
var v = i(1117),
|
|
b = i(1284);
|
|
class y extends v.w {
|
|
constructor(e) {
|
|
super(e), this.aggregatedData = {};
|
|
}
|
|
store(e, t, r, n, i) {
|
|
var o = this.getBucket(e, t, r, i);
|
|
return o.metrics = function (e, t) {
|
|
t || (t = {
|
|
count: 0
|
|
});
|
|
return t.count += 1, (0, b.D)(e, function (e, r) {
|
|
t[e] = w(r, t[e]);
|
|
}), t;
|
|
}(n, o.metrics), o;
|
|
}
|
|
merge(e, t, r, n, i) {
|
|
var o = this.getBucket(e, t, n, i);
|
|
if (o.metrics) {
|
|
var a = o.metrics;
|
|
a.count += r.count, (0, b.D)(r, function (e, t) {
|
|
if ("count" !== e) {
|
|
var n = a[e],
|
|
i = r[e];
|
|
i && !i.c ? a[e] = w(i.t, n) : a[e] = function (e, t) {
|
|
if (!t) return e;
|
|
t.c || (t = A(t.t));
|
|
return t.min = Math.min(e.min, t.min), t.max = Math.max(e.max, t.max), t.t += e.t, t.sos += e.sos, t.c += e.c, t;
|
|
}(i, a[e]);
|
|
}
|
|
});
|
|
} else o.metrics = r;
|
|
}
|
|
storeMetric(e, t, r, n) {
|
|
var i = this.getBucket(e, t, r);
|
|
return i.stats = w(n, i.stats), i;
|
|
}
|
|
getBucket(e, t, r, n) {
|
|
this.aggregatedData[e] || (this.aggregatedData[e] = {});
|
|
var i = this.aggregatedData[e][t];
|
|
return i || (i = this.aggregatedData[e][t] = {
|
|
params: r || {}
|
|
}, n && (i.custom = n)), i;
|
|
}
|
|
get(e, t) {
|
|
return t ? this.aggregatedData[e] && this.aggregatedData[e][t] : this.aggregatedData[e];
|
|
}
|
|
take(e) {
|
|
for (var t = {}, r = "", n = !1, i = 0; i < e.length; i++) t[r = e[i]] = x(this.aggregatedData[r]), t[r].length && (n = !0), delete this.aggregatedData[r];
|
|
return n ? t : null;
|
|
}
|
|
}
|
|
function w(e, t) {
|
|
return null == e ? function (e) {
|
|
e ? e.c++ : e = {
|
|
c: 1
|
|
};
|
|
return e;
|
|
}(t) : t ? (t.c || (t = A(t.t)), t.c += 1, t.t += e, t.sos += e * e, e > t.max && (t.max = e), e < t.min && (t.min = e), t) : {
|
|
t: e
|
|
};
|
|
}
|
|
function A(e) {
|
|
return {
|
|
t: e,
|
|
min: e,
|
|
max: e,
|
|
sos: e * e,
|
|
c: 1
|
|
};
|
|
}
|
|
function x(e) {
|
|
return "object" != typeof e ? [] : (0, b.D)(e, E);
|
|
}
|
|
function E(e, t) {
|
|
return t;
|
|
}
|
|
var T = i(8632),
|
|
_ = i(4402),
|
|
D = i(4351);
|
|
var j = i(7956),
|
|
C = i(3239),
|
|
N = i(9251);
|
|
class O extends h {
|
|
static featureName = N.t;
|
|
constructor(e, t) {
|
|
let r = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2];
|
|
super(e, t, N.t, r), u.il && ((0, n.OP)(e).initHidden = Boolean("hidden" === document.visibilityState), (0, j.N)(() => (0, c.p)("docHidden", [(0, g.z)()], void 0, N.t, this.ee), !0), (0, C.bP)("pagehide", () => (0, c.p)("winPagehide", [(0, g.z)()], void 0, N.t, this.ee)), this.importAggregator());
|
|
}
|
|
}
|
|
var S = i(3081);
|
|
class P extends h {
|
|
static featureName = S.t9;
|
|
constructor(e, t) {
|
|
let r = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2];
|
|
super(e, t, S.t9, r), this.importAggregator();
|
|
}
|
|
}
|
|
var R = i(6660);
|
|
class I {
|
|
constructor(e, t, r, n) {
|
|
this.name = "UncaughtError", this.message = e, this.sourceURL = t, this.line = r, this.column = n;
|
|
}
|
|
}
|
|
class k extends h {
|
|
static featureName = R.t;
|
|
#e = new Set();
|
|
constructor(e, t) {
|
|
let n = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2];
|
|
super(e, t, R.t, n);
|
|
try {
|
|
this.removeOnAbort = new AbortController();
|
|
} catch (e) {}
|
|
this.ee.on("fn-err", (e, t, n) => {
|
|
this.abortHandler && !this.#e.has(n) && (this.#e.add(n), (0, c.p)("err", [this.#t(n), (0, g.z)()], void 0, r.D.jserrors, this.ee));
|
|
}), this.ee.on("internal-error", e => {
|
|
this.abortHandler && (0, c.p)("ierr", [this.#t(e), (0, g.z)(), !0], void 0, r.D.jserrors, this.ee);
|
|
}), u._A.addEventListener("unhandledrejection", e => {
|
|
this.abortHandler && (0, c.p)("err", [this.#r(e), (0, g.z)(), !1, {
|
|
unhandledPromiseRejection: 1
|
|
}], void 0, r.D.jserrors, this.ee);
|
|
}, (0, C.m$)(!1, this.removeOnAbort?.signal)), u._A.addEventListener("error", e => {
|
|
this.abortHandler && (this.#e.has(e.error) ? this.#e.delete(e.error) : (0, c.p)("err", [this.#n(e), (0, g.z)()], void 0, r.D.jserrors, this.ee));
|
|
}, (0, C.m$)(!1, this.removeOnAbort?.signal)), this.abortHandler = this.#i, this.importAggregator();
|
|
}
|
|
#i() {
|
|
this.removeOnAbort?.abort(), this.#e.clear(), this.abortHandler = void 0;
|
|
}
|
|
#t(e) {
|
|
return e instanceof Error ? e : void 0 !== e?.message ? new I(e.message, e.filename || e.sourceURL, e.lineno || e.line, e.colno || e.col) : new I("string" == typeof e ? e : (0, D.P)(e));
|
|
}
|
|
#r(e) {
|
|
let t = "Unhandled Promise Rejection: ";
|
|
if (e?.reason instanceof Error) try {
|
|
return e.reason.message = t + e.reason.message, e.reason;
|
|
} catch (t) {
|
|
return e.reason;
|
|
}
|
|
if (void 0 === e.reason) return new I(t);
|
|
const r = this.#t(e.reason);
|
|
return r.message = t + r.message, r;
|
|
}
|
|
#n(e) {
|
|
return e.error instanceof Error ? e.error : new I(e.message, e.filename, e.lineno, e.colno);
|
|
}
|
|
}
|
|
var H = i(2210);
|
|
let z = 1;
|
|
const L = "nr@id";
|
|
function M(e) {
|
|
const t = typeof e;
|
|
return !e || "object" !== t && "function" !== t ? -1 : e === u._A ? 0 : (0, H.X)(e, L, function () {
|
|
return z++;
|
|
});
|
|
}
|
|
function B(e) {
|
|
if ("string" == typeof e && e.length) return e.length;
|
|
if ("object" == typeof e) {
|
|
if ("undefined" != typeof ArrayBuffer && e instanceof ArrayBuffer && e.byteLength) return e.byteLength;
|
|
if ("undefined" != typeof Blob && e instanceof Blob && e.size) return e.size;
|
|
if (!("undefined" != typeof FormData && e instanceof FormData)) try {
|
|
return (0, D.P)(e).length;
|
|
} catch (e) {
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
var F = i(1214),
|
|
U = i(7243);
|
|
class q {
|
|
constructor(e) {
|
|
this.agentIdentifier = e;
|
|
}
|
|
generateTracePayload(e) {
|
|
if (!this.shouldGenerateTrace(e)) return null;
|
|
var t = (0, n.DL)(this.agentIdentifier);
|
|
if (!t) return null;
|
|
var r = (t.accountID || "").toString() || null,
|
|
i = (t.agentID || "").toString() || null,
|
|
o = (t.trustKey || "").toString() || null;
|
|
if (!r || !i) return null;
|
|
var a = (0, _.M)(),
|
|
s = (0, _.Ht)(),
|
|
c = Date.now(),
|
|
u = {
|
|
spanId: a,
|
|
traceId: s,
|
|
timestamp: c
|
|
};
|
|
return (e.sameOrigin || this.isAllowedOrigin(e) && this.useTraceContextHeadersForCors()) && (u.traceContextParentHeader = this.generateTraceContextParentHeader(a, s), u.traceContextStateHeader = this.generateTraceContextStateHeader(a, c, r, i, o)), (e.sameOrigin && !this.excludeNewrelicHeader() || !e.sameOrigin && this.isAllowedOrigin(e) && this.useNewrelicHeaderForCors()) && (u.newrelicHeader = this.generateTraceHeader(a, s, c, r, i, o)), u;
|
|
}
|
|
generateTraceContextParentHeader(e, t) {
|
|
return "00-" + t + "-" + e + "-01";
|
|
}
|
|
generateTraceContextStateHeader(e, t, r, n, i) {
|
|
return i + "@nr=0-1-" + r + "-" + n + "-" + e + "----" + t;
|
|
}
|
|
generateTraceHeader(e, t, r, n, i, o) {
|
|
if (!("function" == typeof u._A?.btoa)) return null;
|
|
var a = {
|
|
v: [0, 1],
|
|
d: {
|
|
ty: "Browser",
|
|
ac: n,
|
|
ap: i,
|
|
id: e,
|
|
tr: t,
|
|
ti: r
|
|
}
|
|
};
|
|
return o && n !== o && (a.d.tk = o), btoa((0, D.P)(a));
|
|
}
|
|
shouldGenerateTrace(e) {
|
|
return this.isDtEnabled() && this.isAllowedOrigin(e);
|
|
}
|
|
isAllowedOrigin(e) {
|
|
var t = !1,
|
|
r = {};
|
|
if ((0, n.Mt)(this.agentIdentifier, "distributed_tracing") && (r = (0, n.P_)(this.agentIdentifier).distributed_tracing), e.sameOrigin) t = !0;else if (r.allowed_origins instanceof Array) for (var i = 0; i < r.allowed_origins.length; i++) {
|
|
var o = (0, U.e)(r.allowed_origins[i]);
|
|
if (e.hostname === o.hostname && e.protocol === o.protocol && e.port === o.port) {
|
|
t = !0;
|
|
break;
|
|
}
|
|
}
|
|
return t;
|
|
}
|
|
isDtEnabled() {
|
|
var e = (0, n.Mt)(this.agentIdentifier, "distributed_tracing");
|
|
return !!e && !!e.enabled;
|
|
}
|
|
excludeNewrelicHeader() {
|
|
var e = (0, n.Mt)(this.agentIdentifier, "distributed_tracing");
|
|
return !!e && !!e.exclude_newrelic_header;
|
|
}
|
|
useNewrelicHeaderForCors() {
|
|
var e = (0, n.Mt)(this.agentIdentifier, "distributed_tracing");
|
|
return !!e && !1 !== e.cors_use_newrelic_header;
|
|
}
|
|
useTraceContextHeadersForCors() {
|
|
var e = (0, n.Mt)(this.agentIdentifier, "distributed_tracing");
|
|
return !!e && !!e.cors_use_tracecontext_headers;
|
|
}
|
|
}
|
|
var Z = i(7825),
|
|
V = ["load", "error", "abort", "timeout"],
|
|
G = V.length,
|
|
W = n.Yu.REQ,
|
|
X = n.Yu.XHR;
|
|
class Q extends h {
|
|
static featureName = Z.t;
|
|
constructor(e, t) {
|
|
let i = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2];
|
|
super(e, t, Z.t, i), (0, n.OP)(e).xhrWrappable && (this.dt = new q(e), this.handler = (e, t, r, n) => (0, c.p)(e, t, r, n, this.ee), (0, F.u5)(this.ee), (0, F.Kf)(this.ee), function (e, t, i, o) {
|
|
function a(e) {
|
|
var t = this;
|
|
t.totalCbs = 0, t.called = 0, t.cbTime = 0, t.end = E, t.ended = !1, t.xhrGuids = {}, t.lastSize = null, t.loadCaptureCalled = !1, t.params = this.params || {}, t.metrics = this.metrics || {}, e.addEventListener("load", function (r) {
|
|
_(t, e);
|
|
}, (0, C.m$)(!1)), u.IF || e.addEventListener("progress", function (e) {
|
|
t.lastSize = e.loaded;
|
|
}, (0, C.m$)(!1));
|
|
}
|
|
function s(e) {
|
|
this.params = {
|
|
method: e[0]
|
|
}, T(this, e[1]), this.metrics = {};
|
|
}
|
|
function c(t, r) {
|
|
var i = (0, n.DL)(e);
|
|
i.xpid && this.sameOrigin && r.setRequestHeader("X-NewRelic-ID", i.xpid);
|
|
var a = o.generateTracePayload(this.parsedOrigin);
|
|
if (a) {
|
|
var s = !1;
|
|
a.newrelicHeader && (r.setRequestHeader("newrelic", a.newrelicHeader), s = !0), a.traceContextParentHeader && (r.setRequestHeader("traceparent", a.traceContextParentHeader), a.traceContextStateHeader && r.setRequestHeader("tracestate", a.traceContextStateHeader), s = !0), s && (this.dt = a);
|
|
}
|
|
}
|
|
function d(e, r) {
|
|
var n = this.metrics,
|
|
i = e[0],
|
|
o = this;
|
|
if (n && i) {
|
|
var a = B(i);
|
|
a && (n.txSize = a);
|
|
}
|
|
this.startTime = (0, g.z)(), this.listener = function (e) {
|
|
try {
|
|
"abort" !== e.type || o.loadCaptureCalled || (o.params.aborted = !0), ("load" !== e.type || o.called === o.totalCbs && (o.onloadCalled || "function" != typeof r.onload) && "function" == typeof o.end) && o.end(r);
|
|
} catch (e) {
|
|
try {
|
|
t.emit("internal-error", [e]);
|
|
} catch (e) {}
|
|
}
|
|
};
|
|
for (var s = 0; s < G; s++) r.addEventListener(V[s], this.listener, (0, C.m$)(!1));
|
|
}
|
|
function l(e, t, r) {
|
|
this.cbTime += e, t ? this.onloadCalled = !0 : this.called += 1, this.called !== this.totalCbs || !this.onloadCalled && "function" == typeof r.onload || "function" != typeof this.end || this.end(r);
|
|
}
|
|
function f(e, t) {
|
|
var r = "" + M(e) + !!t;
|
|
this.xhrGuids && !this.xhrGuids[r] && (this.xhrGuids[r] = !0, this.totalCbs += 1);
|
|
}
|
|
function h(e, t) {
|
|
var r = "" + M(e) + !!t;
|
|
this.xhrGuids && this.xhrGuids[r] && (delete this.xhrGuids[r], this.totalCbs -= 1);
|
|
}
|
|
function p() {
|
|
this.endTime = (0, g.z)();
|
|
}
|
|
function m(e, r) {
|
|
r instanceof X && "load" === e[0] && t.emit("xhr-load-added", [e[1], e[2]], r);
|
|
}
|
|
function v(e, r) {
|
|
r instanceof X && "load" === e[0] && t.emit("xhr-load-removed", [e[1], e[2]], r);
|
|
}
|
|
function b(e, t, r) {
|
|
t instanceof X && ("onload" === r && (this.onload = !0), ("load" === (e[0] && e[0].type) || this.onload) && (this.xhrCbStart = (0, g.z)()));
|
|
}
|
|
function y(e, r) {
|
|
this.xhrCbStart && t.emit("xhr-cb-time", [(0, g.z)() - this.xhrCbStart, this.onload, r], r);
|
|
}
|
|
function w(e) {
|
|
var t,
|
|
r = e[1] || {};
|
|
if ("string" == typeof e[0] ? 0 === (t = e[0]).length && u.il && (t = "" + u._A.location.href) : e[0] && e[0].url ? t = e[0].url : u._A?.URL && e[0] && e[0] instanceof URL ? t = e[0].href : "function" == typeof e[0].toString && (t = e[0].toString()), "string" == typeof t && 0 !== t.length) {
|
|
t && (this.parsedOrigin = (0, U.e)(t), this.sameOrigin = this.parsedOrigin.sameOrigin);
|
|
var n = o.generateTracePayload(this.parsedOrigin);
|
|
if (n && (n.newrelicHeader || n.traceContextParentHeader)) if (e[0] && e[0].headers) s(e[0].headers, n) && (this.dt = n);else {
|
|
var i = {};
|
|
for (var a in r) i[a] = r[a];
|
|
i.headers = new Headers(r.headers || {}), s(i.headers, n) && (this.dt = n), e.length > 1 ? e[1] = i : e.push(i);
|
|
}
|
|
}
|
|
function s(e, t) {
|
|
var r = !1;
|
|
return t.newrelicHeader && (e.set("newrelic", t.newrelicHeader), r = !0), t.traceContextParentHeader && (e.set("traceparent", t.traceContextParentHeader), t.traceContextStateHeader && e.set("tracestate", t.traceContextStateHeader), r = !0), r;
|
|
}
|
|
}
|
|
function A(e, t) {
|
|
this.params = {}, this.metrics = {}, this.startTime = (0, g.z)(), this.dt = t, e.length >= 1 && (this.target = e[0]), e.length >= 2 && (this.opts = e[1]);
|
|
var r,
|
|
n = this.opts || {},
|
|
i = this.target;
|
|
"string" == typeof i ? r = i : "object" == typeof i && i instanceof W ? r = i.url : u._A?.URL && "object" == typeof i && i instanceof URL && (r = i.href), T(this, r);
|
|
var o = ("" + (i && i instanceof W && i.method || n.method || "GET")).toUpperCase();
|
|
this.params.method = o, this.txSize = B(n.body) || 0;
|
|
}
|
|
function x(e, t) {
|
|
var n;
|
|
this.endTime = (0, g.z)(), this.params || (this.params = {}), this.params.status = t ? t.status : 0, "string" == typeof this.rxSize && this.rxSize.length > 0 && (n = +this.rxSize);
|
|
var o = {
|
|
txSize: this.txSize,
|
|
rxSize: n,
|
|
duration: (0, g.z)() - this.startTime
|
|
};
|
|
i("xhr", [this.params, o, this.startTime, this.endTime, "fetch"], this, r.D.ajax);
|
|
}
|
|
function E(e) {
|
|
var t = this.params,
|
|
n = this.metrics;
|
|
if (!this.ended) {
|
|
this.ended = !0;
|
|
for (var o = 0; o < G; o++) e.removeEventListener(V[o], this.listener, !1);
|
|
t.aborted || (n.duration = (0, g.z)() - this.startTime, this.loadCaptureCalled || 4 !== e.readyState ? null == t.status && (t.status = 0) : _(this, e), n.cbTime = this.cbTime, i("xhr", [t, n, this.startTime, this.endTime, "xhr"], this, r.D.ajax));
|
|
}
|
|
}
|
|
function T(e, t) {
|
|
var r = (0, U.e)(t),
|
|
n = e.params;
|
|
n.hostname = r.hostname, n.port = r.port, n.protocol = r.protocol, n.host = r.hostname + ":" + r.port, n.pathname = r.pathname, e.parsedOrigin = r, e.sameOrigin = r.sameOrigin;
|
|
}
|
|
function _(e, t) {
|
|
e.params.status = t.status;
|
|
var r = function (e, t) {
|
|
var r = e.responseType;
|
|
return "json" === r && null !== t ? t : "arraybuffer" === r || "blob" === r || "json" === r ? B(e.response) : "text" === r || "" === r || void 0 === r ? B(e.responseText) : void 0;
|
|
}(t, e.lastSize);
|
|
if (r && (e.metrics.rxSize = r), e.sameOrigin) {
|
|
var n = t.getResponseHeader("X-NewRelic-App-Data");
|
|
n && (e.params.cat = n.split(", ").pop());
|
|
}
|
|
e.loadCaptureCalled = !0;
|
|
}
|
|
t.on("new-xhr", a), t.on("open-xhr-start", s), t.on("open-xhr-end", c), t.on("send-xhr-start", d), t.on("xhr-cb-time", l), t.on("xhr-load-added", f), t.on("xhr-load-removed", h), t.on("xhr-resolved", p), t.on("addEventListener-end", m), t.on("removeEventListener-end", v), t.on("fn-end", y), t.on("fetch-before-start", w), t.on("fetch-start", A), t.on("fn-start", b), t.on("fetch-done", x);
|
|
}(e, this.ee, this.handler, this.dt), this.importAggregator());
|
|
}
|
|
}
|
|
var K = i(3614);
|
|
const {
|
|
BST_RESOURCE: Y,
|
|
RESOURCE: J,
|
|
START: ee,
|
|
END: te,
|
|
FEATURE_NAME: re,
|
|
FN_END: ne,
|
|
FN_START: ie,
|
|
PUSH_STATE: oe
|
|
} = K;
|
|
var ae = i(7836);
|
|
const {
|
|
FEATURE_NAME: se,
|
|
START: ce,
|
|
END: ue,
|
|
BODY: de,
|
|
CB_END: le,
|
|
JS_TIME: fe,
|
|
FETCH: he,
|
|
FN_START: pe,
|
|
CB_START: ge,
|
|
FN_END: me
|
|
} = ae;
|
|
var ve = i(4649);
|
|
class be extends h {
|
|
static featureName = ve.t;
|
|
constructor(e, t) {
|
|
let r = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2];
|
|
super(e, t, ve.t, r), this.importAggregator();
|
|
}
|
|
}
|
|
new class extends t {
|
|
constructor(t) {
|
|
let r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : (0, _.ky)(16);
|
|
super(), u._A ? (this.agentIdentifier = r, this.sharedAggregator = new y({
|
|
agentIdentifier: this.agentIdentifier
|
|
}), this.features = {}, this.desiredFeatures = new Set(t.features || []), this.desiredFeatures.add(m), Object.assign(this, (0, s.j)(this.agentIdentifier, t, t.loaderType || "agent")), this.start()) : (0, e.Z)("Failed to initial the agent. Could not determine the runtime environment.");
|
|
}
|
|
get config() {
|
|
return {
|
|
info: (0, n.C5)(this.agentIdentifier),
|
|
init: (0, n.P_)(this.agentIdentifier),
|
|
loader_config: (0, n.DL)(this.agentIdentifier),
|
|
runtime: (0, n.OP)(this.agentIdentifier)
|
|
};
|
|
}
|
|
start() {
|
|
const t = "features";
|
|
try {
|
|
const n = a(this.agentIdentifier),
|
|
i = [...this.desiredFeatures];
|
|
i.sort((e, t) => r.p[e.featureName] - r.p[t.featureName]), i.forEach(t => {
|
|
if (n[t.featureName] || t.featureName === r.D.pageViewEvent) {
|
|
const i = function (e) {
|
|
switch (e) {
|
|
case r.D.ajax:
|
|
return [r.D.jserrors];
|
|
case r.D.sessionTrace:
|
|
return [r.D.ajax, r.D.pageViewEvent];
|
|
case r.D.sessionReplay:
|
|
return [r.D.sessionTrace];
|
|
case r.D.pageViewTiming:
|
|
return [r.D.pageViewEvent];
|
|
default:
|
|
return [];
|
|
}
|
|
}(t.featureName);
|
|
i.every(e => n[e]) || (0, e.Z)("".concat(t.featureName, " is enabled but one or more dependent features has been disabled (").concat((0, D.P)(i), "). This may cause unintended consequences or missing data...")), this.features[t.featureName] = new t(this.agentIdentifier, this.sharedAggregator);
|
|
}
|
|
}), (0, T.Qy)(this.agentIdentifier, this.features, t);
|
|
} catch (r) {
|
|
(0, e.Z)("Failed to initialize all enabled instrument classes (agent aborted) -", r);
|
|
for (const e in this.features) this.features[e].abortHandler?.();
|
|
const n = (0, T.fP)();
|
|
return delete n.initializedAgents[this.agentIdentifier]?.api, delete n.initializedAgents[this.agentIdentifier]?.[t], delete this.sharedAggregator, n.ee?.abort(), delete n.ee?.get(this.agentIdentifier), !1;
|
|
}
|
|
}
|
|
addToTrace(t) {
|
|
(0, e.Z)("Call to agent api addToTrace failed. The page action feature is not currently initialized.");
|
|
}
|
|
setCurrentRouteName(t) {
|
|
(0, e.Z)("Call to agent api setCurrentRouteName failed. The spa feature is not currently initialized.");
|
|
}
|
|
interaction() {
|
|
(0, e.Z)("Call to agent api interaction failed. The spa feature is not currently initialized.");
|
|
}
|
|
}({
|
|
features: [Q, m, O, class extends h {
|
|
static featureName = re;
|
|
constructor(e, t) {
|
|
if (super(e, t, re, !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]), !u.il) return;
|
|
const n = this.ee;
|
|
let i;
|
|
(0, F.QU)(n), this.eventsEE = (0, F.em)(n), this.eventsEE.on(ie, function (e, t) {
|
|
this.bstStart = (0, g.z)();
|
|
}), this.eventsEE.on(ne, function (e, t) {
|
|
(0, c.p)("bst", [e[0], t, this.bstStart, (0, g.z)()], void 0, r.D.sessionTrace, n);
|
|
}), n.on(oe + ee, function (e) {
|
|
this.time = (0, g.z)(), this.startPath = location.pathname + location.hash;
|
|
}), n.on(oe + te, function (e) {
|
|
(0, c.p)("bstHist", [location.pathname + location.hash, this.startPath, this.time], void 0, r.D.sessionTrace, n);
|
|
});
|
|
try {
|
|
i = new PerformanceObserver(e => {
|
|
const t = e.getEntries();
|
|
(0, c.p)(Y, [t], void 0, r.D.sessionTrace, n);
|
|
}), i.observe({
|
|
type: J,
|
|
buffered: !0
|
|
});
|
|
} catch (e) {}
|
|
this.importAggregator({
|
|
resourceObserver: i
|
|
});
|
|
}
|
|
}, P, be, k, class extends h {
|
|
static featureName = se;
|
|
constructor(e, t) {
|
|
if (super(e, t, se, !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]), !u.il) return;
|
|
if (!(0, n.OP)(e).xhrWrappable) return;
|
|
try {
|
|
this.removeOnAbort = new AbortController();
|
|
} catch (e) {}
|
|
let r,
|
|
i = 0;
|
|
const o = this.ee.get("tracer"),
|
|
a = (0, F._L)(this.ee),
|
|
s = (0, F.Lg)(this.ee),
|
|
c = (0, F.BV)(this.ee),
|
|
d = (0, F.Kf)(this.ee),
|
|
l = this.ee.get("events"),
|
|
f = (0, F.u5)(this.ee),
|
|
h = (0, F.QU)(this.ee),
|
|
p = (0, F.Gm)(this.ee);
|
|
function m(e, t) {
|
|
h.emit("newURL", ["" + window.location, t]);
|
|
}
|
|
function v() {
|
|
i++, r = window.location.hash, this[pe] = (0, g.z)();
|
|
}
|
|
function b() {
|
|
i--, window.location.hash !== r && m(0, !0);
|
|
var e = (0, g.z)();
|
|
this[fe] = ~~this[fe] + e - this[pe], this[me] = e;
|
|
}
|
|
function y(e, t) {
|
|
e.on(t, function () {
|
|
this[t] = (0, g.z)();
|
|
});
|
|
}
|
|
this.ee.on(pe, v), s.on(ge, v), a.on(ge, v), this.ee.on(me, b), s.on(le, b), a.on(le, b), this.ee.buffer([pe, me, "xhr-resolved"], this.featureName), l.buffer([pe], this.featureName), c.buffer(["setTimeout" + ue, "clearTimeout" + ce, pe], this.featureName), d.buffer([pe, "new-xhr", "send-xhr" + ce], this.featureName), f.buffer([he + ce, he + "-done", he + de + ce, he + de + ue], this.featureName), h.buffer(["newURL"], this.featureName), p.buffer([pe], this.featureName), s.buffer(["propagate", ge, le, "executor-err", "resolve" + ce], this.featureName), o.buffer([pe, "no-" + pe], this.featureName), a.buffer(["new-jsonp", "cb-start", "jsonp-error", "jsonp-end"], this.featureName), y(f, he + ce), y(f, he + "-done"), y(a, "new-jsonp"), y(a, "jsonp-end"), y(a, "cb-start"), h.on("pushState-end", m), h.on("replaceState-end", m), window.addEventListener("hashchange", m, (0, C.m$)(!0, this.removeOnAbort?.signal)), window.addEventListener("load", m, (0, C.m$)(!0, this.removeOnAbort?.signal)), window.addEventListener("popstate", function () {
|
|
m(0, i > 1);
|
|
}, (0, C.m$)(!0, this.removeOnAbort?.signal)), this.abortHandler = this.#i, this.importAggregator();
|
|
}
|
|
#i() {
|
|
this.removeOnAbort?.abort(), this.abortHandler = void 0;
|
|
}
|
|
}],
|
|
loaderType: "spa"
|
|
});
|
|
})();
|
|
})();
|
|
})()</script>
|
|
<link rel="shortcut icon" href="https://sdfestaticassets-eu-west-1.sciencedirectassets.com/shared-assets/13/images/favSD.ico" type="image/x-icon" />
|
|
<link rel="icon" href="https://sdfestaticassets-eu-west-1.sciencedirectassets.com/shared-assets/13/images/favSD.ico" type="image/x-icon">
|
|
<link rel="stylesheet" href="https://sdfestaticassets-eu-west-1.sciencedirectassets.com/prod/99e6b7efc6d7603db501d4cc94a9fb642a5bbddd/arp.css">
|
|
<link href="//cdn.pendo.io" rel="dns-prefetch" />
|
|
<link href="https://cdn.pendo.io" rel="preconnect" crossorigin="anonymous" />
|
|
<link rel="dns-prefetch" href="https://smetrics.elsevier.com">
|
|
<script type="980a3173744142363f9804a3-text/javascript">
|
|
var targetServerState = JSON.stringify({"4D6368F454EC41940A4C98A6@AdobeOrg":{"sdid":{"supplementalDataIDCurrent":"61559E26E5870FC3-4358F435373EAC4C","supplementalDataIDCurrentConsumed":{"payload:target-global-mbox":true},"supplementalDataIDLastConsumed":{}}}});
|
|
window.appData = window.appData || [];
|
|
window.pageTargeting = {"region":"eu-west-1","platform":"sdtech","entitled":true,"crawler":"","journal":"Procedia Technology","auth":"AE"};
|
|
window.arp = {
|
|
config: {"adobeSuite":"elsevier-sd-prod","arsUrl":"https://ars.els-cdn.com","bosTimeOut":60000,"bosUrl":"https://feedback.recs.d.elsevier.com/raw/events","googleMapsApiKey":"AIzaSyCBYU6I6lrbEU6wQXUEIte3NwGtm3jwHQc","mediaBaseUrl":"https://ars.els-cdn.com/content/image/","sendToEnhancedReader":true,"strictMode":false,"seamlessAccess":{"enableSeamlessAccess":true,"scriptUrl":"https://unpkg.com/@theidentityselector/thiss-ds@1.0.13/dist/thiss-ds.js","persistenceUrl":"https://service.seamlessaccess.org/ps/","persistenceContext":"seamlessaccess.org","scienceDirectUrl":"https://www.sciencedirect.com","shibAuthUrl":"https://auth.elsevier.com/ShibAuth/institutionLogin"},"universalPdf":{"enableUniversalPdf":true,"universalPdfUrl":"https://static.mendeley.com/view-pdf-component/0.8.9/dist/view-pdf-element.js","integratorId":{"other":8301,"accessbar":10879}},"reaxys":{"apiUrl":"https://reaxys-sdlc.reaxys.com","origin":"sciencedirect","queryBuilderHostPath":"https://www.reaxys.com/reaxys/secured/hopinto.do","url":"https://www.reaxys.com"},"oneTrustCookie":{"enabled":true},"ssrn":{"url":"https://papers.ssrn.com","path":"/sol3/papers.cfm"},"assetRoute":"https://sdfestaticassets-eu-west-1.sciencedirectassets.com/prod/99e6b7efc6d7603db501d4cc94a9fb642a5bbddd"},
|
|
subscriptions: [],
|
|
subscribe: function(cb) {
|
|
var self = this;
|
|
var i = this.subscriptions.push(cb) - 1;
|
|
return function unsubscribe() {
|
|
self.subscriptions.splice(i, 1);
|
|
}
|
|
},
|
|
};
|
|
window.addEventListener('beforeprint', () => pendo.onGuideDismissed());
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<noscript>
|
|
JavaScript is disabled on your browser.
|
|
Please enable JavaScript to use all the features on this page.
|
|
<img src=https://smetrics.elsevier.com/b/ss/elsevier-sd-prod/1/G.4--NS/1709731715546?pageName=sd%3Aproduct%3Ajournal%3Aarticle&c16=els%3Arp%3Ast&c2=sd&v185=img&v33=ae%3AANON_GUEST&c1=ae%3A228598&c12=ae%3A12975512 />
|
|
</noscript>
|
|
<a class="anchor sr-only sr-only-focusable u-display-inline anchor-default" href="#screen-reader-main-content" data-reactroot><span class="anchor-text">Skip to main content</span></a><a class="anchor sr-only sr-only-focusable u-display-inline anchor-default" href="#screen-reader-main-title" data-reactroot><span class="anchor-text">Skip to article</span></a>
|
|
<div data-iso-key="_0"><div class="App" id="app" data-aa-name="root"><div class="page"><div class="sd-flex-container"><div class="sd-flex-content"><header id="gh-cnt"><div id="gh-main-cnt" class="u-flex-center-ver u-position-relative u-padding-s-hor u-padding-l-hor-from-xl"><a id="gh-branding" class="u-flex-center-ver" href="/" aria-label="ScienceDirect home page" data-aa-region="header" data-aa-name="ScienceDirect"><img class="gh-logo" src="https://sdfestaticassets-eu-west-1.sciencedirectassets.com/shared-assets/24/images/elsevier-non-solus-new-grey.svg" alt="Elsevier logo" height="48" width="54" /><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="15" viewBox="0 0 190 23" role="img" class="gh-wordmark u-margin-s-left" aria-labelledby="gh-wm-science-direct" focusable="false" aria-hidden="true" alt="ScienceDirect Wordmark"><title id="gh-wm-science-direct">ScienceDirect</title><g><path fill="#EB6500" d="M3.81 6.9c0-1.48 0.86-3.04 3.7-3.04 1.42 0 3.1 0.43 4.65 1.32l0.13-2.64c-1.42-0.63-2.97-0.96-4.78-0.96 -4.62 0-6.6 2.44-6.6 5.45 0 5.61 8.78 6.14 8.78 9.93 0 1.48-1.15 3.04-3.86 3.04 -1.72 0-3.4-0.56-4.72-1.39l-0.36 2.64c1.55 0.76 3.57 1.06 5.15 1.06 4.26 0 6.7-2.48 6.7-5.51C12.59 11.49 3.81 10.76 3.81 6.9M20.27 9.01c0.23-0.13 0.69-0.26 1.72-0.26 1.72 0 2.41 0.3 2.41 1.58h2.38c0-0.36 0-0.79-0.03-1.09 -0.23-1.98-2.15-2.67-4.88-2.67 -3 0-6.7 2.31-6.7 7.76 0 5.22 2.77 7.99 6.63 7.99 1.68 0 3.47-0.36 4.95-1.39l-0.2-2.31c-0.99 0.82-2.84 1.52-4.06 1.52 -2.14 0-4.55-1.71-4.55-5.91C17.93 10.2 20.01 9.18 20.27 9.01"></path><rect x="29.42" y="6.97" fill="#EB6500" width="2.54" height="14.95"></rect><path fill="#EB6500" d="M30.67 0.7c-0.92 0-1.65 0.92-1.65 1.81 0 0.93 0.76 1.85 1.65 1.85 0.89 0 1.68-0.96 1.68-1.88C32.35 1.55 31.56 0.7 30.67 0.7M48.06 14.13c0-5.18-1.42-7.56-6.01-7.56 -3.86 0-6.67 2.77-6.67 7.92 0 4.92 2.97 7.82 6.73 7.82 2.81 0 4.36-0.63 5.68-1.42l-0.2-2.31c-0.89 0.79-2.94 1.55-4.69 1.55 -3.14 0-4.88-1.95-4.88-5.51v-0.49H48.06M39.91 9.18c0.17-0.17 1.29-0.46 1.98-0.46 2.48 0 3.76 0.53 3.86 3.43h-7.46C38.56 10.27 39.71 9.37 39.91 9.18zM58.82 6.57c-2.24 0-3.63 1.12-4.85 2.61l-0.4-2.21h-2.34l0.13 1.19c0.1 0.76 0.13 1.78 0.13 2.97v10.79h2.54V11.88c0.69-0.96 2.15-2.48 2.48-2.64 0.23-0.13 1.29-0.4 2.08-0.4 2.28 0 2.48 1.15 2.54 3.43 0.03 1.19 0.03 3.17 0.03 3.17 0.03 3-0.1 6.47-0.1 6.47h2.54c0 0 0.07-4.49 0.07-6.96 0-1.48 0.03-2.97-0.1-4.46C63.31 7.43 61.49 6.57 58.82 6.57M72.12 9.01c0.23-0.13 0.69-0.26 1.72-0.26 1.72 0 2.41 0.3 2.41 1.58h2.38c0-0.36 0-0.79-0.03-1.09 -0.23-1.98-2.15-2.67-4.88-2.67 -3 0-6.7 2.31-6.7 7.76 0 5.22 2.77 7.99 6.63 7.99 1.68 0 3.47-0.36 4.95-1.39l-0.2-2.31c-0.99 0.82-2.84 1.52-4.06 1.52 -2.15 0-4.55-1.71-4.55-5.91C69.77 10.2 71.85 9.18 72.12 9.01M92.74 14.13c0-5.18-1.42-7.56-6.01-7.56 -3.86 0-6.67 2.77-6.67 7.92 0 4.92 2.97 7.82 6.73 7.82 2.81 0 4.36-0.63 5.68-1.42l-0.2-2.31c-0.89 0.79-2.94 1.55-4.69 1.55 -3.14 0-4.88-1.95-4.88-5.51v-0.49H92.74M84.59 9.18c0.17-0.17 1.29-0.46 1.98-0.46 2.48 0 3.76 0.53 3.86 3.43h-7.46C83.24 10.27 84.39 9.37 84.59 9.18zM103.9 1.98h-7.13v19.93h6.83c7.26 0 9.77-5.68 9.77-10.03C113.37 7.33 110.93 1.98 103.9 1.98M103.14 19.8h-3.76V4.1h4.09c5.38 0 6.96 4.39 6.96 7.79C110.43 16.87 108.19 19.8 103.14 19.8zM118.38 0.7c-0.92 0-1.65 0.92-1.65 1.81 0 0.93 0.76 1.85 1.65 1.85 0.89 0 1.69-0.96 1.69-1.88C120.07 1.55 119.28 0.7 118.38 0.7"></path><rect x="117.13" y="6.97" fill="#EB6500" width="2.54" height="14.95"></rect><path fill="#EB6500" d="M130.2 6.6c-1.62 0-2.87 1.45-3.4 2.74l-0.43-2.37h-2.34l0.13 1.19c0.1 0.76 0.13 1.75 0.13 2.9v10.86h2.54v-9.51c0.53-1.29 1.72-3.7 3.17-3.7 0.96 0 1.06 0.99 1.06 1.22l2.08-0.6V9.18c0-0.03-0.03-0.17-0.06-0.4C132.8 7.36 131.91 6.6 130.2 6.6M145.87 14.13c0-5.18-1.42-7.56-6.01-7.56 -3.86 0-6.67 2.77-6.67 7.92 0 4.92 2.97 7.82 6.73 7.82 2.81 0 4.36-0.63 5.68-1.42l-0.2-2.31c-0.89 0.79-2.94 1.55-4.69 1.55 -3.14 0-4.89-1.95-4.89-5.51v-0.49H145.87M137.72 9.18c0.17-0.17 1.29-0.46 1.98-0.46 2.48 0 3.76 0.53 3.86 3.43h-7.46C136.37 10.27 137.52 9.37 137.72 9.18zM153.23 9.01c0.23-0.13 0.69-0.26 1.72-0.26 1.72 0 2.41 0.3 2.41 1.58h2.38c0-0.36 0-0.79-0.03-1.09 -0.23-1.98-2.14-2.67-4.88-2.67 -3 0-6.7 2.31-6.7 7.76 0 5.22 2.77 7.99 6.63 7.99 1.69 0 3.47-0.36 4.95-1.39l-0.2-2.31c-0.99 0.82-2.84 1.52-4.06 1.52 -2.15 0-4.55-1.71-4.55-5.91C150.89 10.2 152.97 9.18 153.23 9.01M170 19.44c-0.92 0.36-1.72 0.69-2.51 0.69 -1.16 0-1.58-0.66-1.58-2.34V8.95h3.93V6.97h-3.93V2.97h-2.48v3.99h-2.71v1.98h2.71v9.67c0 2.64 1.39 3.73 3.33 3.73 1.15 0 2.54-0.39 3.43-0.79L170 19.44M173.68 5.96c-1.09 0-2-0.87-2-1.97 0-1.1 0.91-1.97 2-1.97s1.98 0.88 1.98 1.98C175.66 5.09 174.77 5.96 173.68 5.96zM173.67 2.46c-0.85 0-1.54 0.67-1.54 1.52 0 0.85 0.69 1.54 1.54 1.54 0.85 0 1.54-0.69 1.54-1.54C175.21 3.13 174.52 2.46 173.67 2.46zM174.17 5.05c-0.09-0.09-0.17-0.19-0.25-0.3l-0.41-0.56h-0.16v0.87h-0.39V2.92c0.22-0.01 0.47-0.03 0.66-0.03 0.41 0 0.82 0.16 0.82 0.64 0 0.29-0.21 0.55-0.49 0.63 0.23 0.32 0.45 0.62 0.73 0.91H174.17zM173.56 3.22l-0.22 0.01v0.63h0.22c0.26 0 0.43-0.05 0.43-0.34C174 3.28 173.83 3.21 173.56 3.22z"></path></g></svg></a><div class="gh-nav-cnt u-hide-from-print"><div class="gh-nav-links-container gh-nav-links-container-h u-hide-from-print gh-nav-content-container"><nav aria-label="links" class="gh-nav gh-nav-links gh-nav-h"><ul class="gh-nav-list u-list-reset"><li class="gh-nav-item gh-move-to-spine"><a class="anchor gh-nav-action anchor-default" href="/browse/journals-and-books" data-aa-region="header" data-aa-name="Journals & Books"><span class="anchor-text">Journals & Books</span></a></li></ul></nav><nav aria-label="utilities" class="gh-nav gh-nav-utilities gh-nav-h"><ul class="gh-nav-list u-list-reset"><li class="gh-move-to-spine gh-help-button gh-help-icon gh-nav-item"><div class="popover" id="gh-help-icon-popover"><div id="popover-trigger-gh-help-icon-popover"><input type="hidden" /><button class="button-link gh-nav-help-icon gh-icon-btn button-link-primary button-link-icon-only" type="button" aria-expanded="false" aria-label="ScienceDirect Support Center links"><svg focusable="false" viewBox="0 0 114 128" aria-hidden="true" alt="ScienceDirect help page" width="21.375" height="24" class="icon icon-help gh-icon"><path d="m57 8c-14.7 0-28.5 5.72-38.9 16.1-10.38 10.4-16.1 24.22-16.1 38.9 0 30.32 24.68 55 55 55 14.68 0 28.5-5.72 38.88-16.1 10.4-10.4 16.12-24.2 16.12-38.9 0-30.32-24.68-55-55-55zm0 1e1c24.82 0 45 20.18 45 45 0 12.02-4.68 23.32-13.18 31.82s-19.8 13.18-31.82 13.18c-24.82 0-45-20.18-45-45 0-12.02 4.68-23.32 13.18-31.82s19.8-13.18 31.82-13.18zm-0.14 14c-11.55 0.26-16.86 8.43-16.86 18v2h1e1v-2c0-4.22 2.22-9.66 8-9.24 5.5 0.4 6.32 5.14 5.78 8.14-1.1 6.16-11.78 9.5-11.78 20.5v6.6h1e1v-5.56c0-8.16 11.22-11.52 12-21.7 0.74-9.86-5.56-16.52-16-16.74-0.39-0.01-0.76-0.01-1.14 0zm-4.86 5e1v1e1h1e1v-1e1h-1e1z"></path></svg></button></div></div></li><li class="gh-search-toggle gh-nav-item search-button-link search-with-button-link"><a class="anchor button-link-primary gh-nav-action gh-icon-btn search-input-fallback-link anchor-default anchor-icon-only" href="/search" data-aa-button="search-in-header-opened-from-article" aria-label="Search ScienceDirect" role="button"><svg focusable="false" viewBox="0 0 100 128" aria-hidden="true" alt="Search" width="18.75" height="24" class="icon icon-search gh-icon"><path d="m19.22 76.91c-5.84-5.84-9.05-13.6-9.05-21.85s3.21-16.01 9.05-21.85c5.84-5.83 13.59-9.05 21.85-9.05 8.25 0 16.01 3.22 21.84 9.05 5.84 5.84 9.05 13.6 9.05 21.85s-3.21 16.01-9.05 21.85c-5.83 5.83-13.59 9.05-21.84 9.05-8.26 0-16.01-3.22-21.85-9.05zm80.33 29.6l-26.32-26.32c5.61-7.15 8.68-15.9 8.68-25.13 0-10.91-4.25-21.17-11.96-28.88-7.72-7.71-17.97-11.96-28.88-11.96s-21.17 4.25-28.88 11.96c-7.72 7.71-11.97 17.97-11.97 28.88s4.25 21.17 11.97 28.88c7.71 7.71 17.97 11.96 28.88 11.96 9.23 0 17.98-3.07 25.13-8.68l26.32 26.32 7.03-7.03"></path></svg></a><a class="link-button link-button-small search-button-outline link-button-primary link-button-icon-right" href="/search" data-aa-button="search-in-header-opened-from-article" aria-label="Search ScienceDirect" role="button"><span class="link-button-text">Search</span><svg focusable="false" viewBox="0 0 100 128" aria-hidden="true" alt="Search" width="18.75" height="24" class="icon icon-search"><path d="m19.22 76.91c-5.84-5.84-9.05-13.6-9.05-21.85s3.21-16.01 9.05-21.85c5.84-5.83 13.59-9.05 21.85-9.05 8.25 0 16.01 3.22 21.84 9.05 5.84 5.84 9.05 13.6 9.05 21.85s-3.21 16.01-9.05 21.85c-5.83 5.83-13.59 9.05-21.84 9.05-8.26 0-16.01-3.22-21.85-9.05zm80.33 29.6l-26.32-26.32c5.61-7.15 8.68-15.9 8.68-25.13 0-10.91-4.25-21.17-11.96-28.88-7.72-7.71-17.97-11.96-28.88-11.96s-21.17 4.25-28.88 11.96c-7.72 7.71-11.97 17.97-11.97 28.88s4.25 21.17 11.97 28.88c7.71 7.71 17.97 11.96 28.88 11.96 9.23 0 17.98-3.07 25.13-8.68l26.32 26.32 7.03-7.03"></path></svg></a></li></ul></nav></div></div><div class="gh-profile-container gh-move-to-spine u-hide-from-print"><a class="link-button link-button-secondary link-button-small u-margin-s-right link-button-icon-left" href="/user/login?targetURL=%2Fscience%2Farticle%2Fpii%2FS2212017312002502&from=globalheader" id="gh-myaccount-btn" data-aa-region="header" data-aa-name="personalsignin"><svg focusable="false" viewBox="0 0 106 128" aria-hidden="true" width="19.875" height="24" class="icon icon-person"><path d="m11.07 1.2e2l0.84-9.29c1.97-18.79 23.34-22.93 41.09-22.93 17.74 0 39.11 4.13 41.08 22.84l0.84 9.38h10.04l-0.93-10.34c-2.15-20.43-20.14-31.66-51.03-31.66s-48.89 11.22-51.05 31.73l-0.91 10.27h10.03m41.93-102.29c-9.72 0-18.24 8.69-18.24 18.59 0 13.67 7.84 23.98 18.24 23.98s18.24-10.31 18.24-23.98c0-9.9-8.52-18.59-18.24-18.59zm0 52.29c-15.96 0-28-14.48-28-33.67 0-15.36 12.82-28.33 28-28.33s28 12.97 28 28.33c0 19.19-12.04 33.67-28 33.67"></path></svg><span class="link-button-text">My Account</span></a><a class="link-button link-button-primary link-button-small link-button-icon-left" href="/user/institution/login?targetURL=%2Fscience%2Farticle%2Fpii%2FS2212017312002502" id="gh-institutionalsignin-btn" data-aa-region="header" data-aa-name="institutionalsignin"><svg focusable="false" viewBox="0 0 106 128" aria-hidden="true" width="19.875" height="24" class="icon icon-institution"><path d="m84 98h1e1v1e1h-82v-1e1h1e1v-46h14v46h1e1v-46h14v46h1e1v-46h14v46zm-72-61.14l41-20.84 41 20.84v5.14h-82v-5.14zm92 15.14v-21.26l-51-25.94-51 25.94v21.26h1e1v36h-1e1v3e1h102v-3e1h-1e1v-36h1e1z"></path></svg><span class="link-button-text">Sign in</span></a></div><div id="gh-mobile-menu" class="mobile-menu u-hide-from-print"><div class="gh-hamburger u-fill-grey7 u-margin-m-left"><button class="button-link u-flex-center-ver button-link-primary button-link-icon-only" type="button" aria-label="Toggle mobile menu" aria-expanded="false"><svg class="gh-hamburger-svg-el gh-hamburger-closed" role="img" aria-hidden="true" height="18" width="40"><path d="M0 14h40v2H0zm0-7h40v2H0zm0-7h40v2H0z"></path></svg></button></div><div id="gh-overlay" class="mobile-menu-overlay u-overlay u-display-none" role="button" tabindex="-1"></div><div id="gh-drawer" aria-label="Mobile menu" class role="navigation"></div></div></div></header><div class="Article" id="mathjax-container" role="main"><div class="accessbar-sticky"><div id="screen-reader-main-content"></div><div role="region" aria-label="Download options and search"><div class="accessbar"><div class="accessbar-label"></div><ul aria-label="PDF Options"><li class="ViewPDF"><a class="link-button accessbar-utility-component accessbar-utility-link link-button-primary link-button-icon-left" target="_blank" aria-label="View PDF. Opens in a new window."><svg focusable="false" viewBox="0 0 32 32" height="24" width="24" class="icon icon-pdf-multicolor pdf-icon"><path d="M7 .362h17.875l6.763 6.1V31.64H6.948V16z" stroke="#000" stroke-width=".703" fill="#fff"></path><path d="M.167 2.592H22.39V9.72H.166z" fill="#da0000"></path><path fill="#fff9f9" d="M5.97 3.638h1.62c1.053 0 1.483.677 1.488 1.564.008.96-.6 1.564-1.492 1.564h-.644v1.66h-.977V3.64m.977.897v1.34h.542c.27 0 .596-.068.596-.673-.002-.6-.32-.667-.596-.667h-.542m3.8.036v2.92h.35c.933 0 1.223-.448 1.228-1.462.008-1.06-.316-1.45-1.23-1.45h-.347m-.977-.94h1.03c1.68 0 2.523.586 2.534 2.39.01 1.688-.607 2.4-2.534 2.4h-1.03V3.64m4.305 0h2.63v.934h-1.657v.894H16.6V6.4h-1.56v2.026h-.97V3.638"></path><path d="M19.462 13.46c.348 4.274-6.59 16.72-8.508 15.792-1.82-.85 1.53-3.317 2.92-4.366-2.864.894-5.394 3.252-3.837 3.93 2.113.895 7.048-9.25 9.41-15.394zM14.32 24.874c4.767-1.526 14.735-2.974 15.152-1.407.824-3.157-13.72-.37-15.153 1.407zm5.28-5.043c2.31 3.237 9.816 7.498 9.788 3.82-.306 2.046-6.66-1.097-8.925-4.164-4.087-5.534-2.39-8.772-1.682-8.732.917.047 1.074 1.307.67 2.442-.173-1.406-.58-2.44-1.224-2.415-1.835.067-1.905 4.46 1.37 9.065z" fill="#f91d0a"></path></svg><span class="link-button-text"><span>View <strong>PDF</strong></span></span></a></li><li class="DownloadFullIssue"><button type="button" class="button accessbar-utility-component accessbar-utility-button button-anchor" aria-disabled="false" aria-label="Download full issue"><span class="button-text"><span>Download full issue</span></span></button></li></ul><form class="QuickSearch" action="/search#submit" method="get" aria-label="form"><div class="search-input"><div class="search-input-container search-input-container-no-label"><label class="search-input-label u-hide-visually" for="article-quick-search">Search ScienceDirect</label><input type="search" id="article-quick-search" name="qs" value class="search-input-field" aria-label="Search ScienceDirect" aria-describedby="article-quick-search-description-message" placeholder="Search ScienceDirect" /></div><div class="search-input-message-container"><div aria-live="polite" class="search-input-validation-error"></div><div id="article-quick-search-description-message"></div></div></div><button type="submit" class="button small u-margin-xs-left button-primary button-icon-only" aria-disabled="false" aria-label="Submit search"><svg focusable="false" viewBox="0 0 100 128" height="20" width="18.75" class="icon icon-search"><path d="m19.22 76.91c-5.84-5.84-9.05-13.6-9.05-21.85s3.21-16.01 9.05-21.85c5.84-5.83 13.59-9.05 21.85-9.05 8.25 0 16.01 3.22 21.84 9.05 5.84 5.84 9.05 13.6 9.05 21.85s-3.21 16.01-9.05 21.85c-5.83 5.83-13.59 9.05-21.84 9.05-8.26 0-16.01-3.22-21.85-9.05zm80.33 29.6l-26.32-26.32c5.61-7.15 8.68-15.9 8.68-25.13 0-10.91-4.25-21.17-11.96-28.88-7.72-7.71-17.97-11.96-28.88-11.96s-21.17 4.25-28.88 11.96c-7.72 7.71-11.97 17.97-11.97 28.88s4.25 21.17 11.97 28.88c7.71 7.71 17.97 11.96 28.88 11.96 9.23 0 17.98-3.07 25.13-8.68l26.32 26.32 7.03-7.03"></path></svg></button><input type="hidden" name="origin" value="article" /><input type="hidden" name="zone" value="qSearch" /></form></div></div></div><div class="article-wrapper grid row"><div role="navigation" class="u-show-from-lg col-lg-6 u-padding-s-top sticky-table-of-contents" aria-label="Table of contents"><div class="TableOfContents text-s" lang="en"></div></div><article class="col-lg-12 col-md-16 pad-left pad-right u-padding-s-top" lang="en"><div class="Publication" id="publication"><div class="publication-brand u-show-from-sm"><a class="anchor anchor-default" href="/journal/procedia-technology" title="Go to Procedia Technology on ScienceDirect"><span class="anchor-text"><img class="publication-brand-image" src="https://sdfestaticassets-eu-west-1.sciencedirectassets.com/prod/99e6b7efc6d7603db501d4cc94a9fb642a5bbddd/image/elsevier-non-solus.png" alt="Elsevier" /></span></a></div><div class="publication-volume u-text-center"><h2 class="publication-title u-h3" id="publication-title"><a class="anchor publication-title-link anchor-navigation" href="/journal/procedia-technology" title="Go to Procedia Technology on ScienceDirect"><span class="anchor-text">Procedia Technology</span></a></h2><div class="text-xs"><a class="anchor anchor-default" href="/journal/procedia-technology/vol/3/suppl/C" title="Go to table of contents for this volume/issue"><span class="anchor-text">Volume 3</span></a>, <!-- -->2012<!-- -->, Pages 196-204</div></div><div class="publication-cover u-show-from-sm"><a class="anchor anchor-default" href="/journal/procedia-technology/vol/3/suppl/C"><span class="anchor-text"><img class="publication-cover-image" src="https://ars.els-cdn.com/content/image/1-s2.0-S2212017312X00045-cov150h.gif" alt="Procedia Technology" /></span></a></div></div><h1 id="screen-reader-main-title" class="Head u-font-serif u-h2 u-margin-s-ver"><span class="title-text">Detecting objects using color and depth segmentation with Kinect sensor</span></h1><div class="Banner" id="banner"><div class="wrapper truncated"><div class="AuthorGroups text-s"><div class="author-group" id="author-group"><span class="sr-only">Author links open overlay panel</span><button class="button-link button-link-primary" type="button" data-sd-ui-side-panel-opener="true" data-xocs-content-type="author" data-xocs-content-id="aep-author-id6"><span class="button-link-text"><span class="react-xocs-alternative-link"><span class="given-name">José-Juan</span> <span class="text surname">Hernández-López</span> </span><span class="author-ref" id="baff0005"><sup>a</sup></span><svg focusable="false" viewBox="0 0 102 128" title="Author email or social media contact details icon" width="20" height="20" class="icon icon-envelope react-xocs-author-icon"><path d="m55.8 57.2c-1.78 1.31-5.14 1.31-6.9 0l-31.32-23.2h69.54l-31.32 23.19zm-55.8-24.78l42.94 32.62c2.64 1.95 6.02 2.93 9.4 2.93s6.78-0.98 9.42-2.93l40.24-30.7v-10.34h-102zm92 56.48l-18.06-22.74-8.04 5.95 17.38 21.89h-64.54l18.38-23.12-8.04-5.96-19.08 24.02v-37.58l-1e1 -8.46v61.1h102v-59.18l-1e1 8.46v35.62"></path></svg></span></button>, <button class="button-link button-link-primary" type="button" data-sd-ui-side-panel-opener="true" data-xocs-content-type="author" data-xocs-content-id="aep-author-id7"><span class="button-link-text"><span class="react-xocs-alternative-link"><span class="given-name">Ana-Linnet</span> <span class="text surname">Quintanilla-Olvera</span> </span><span class="author-ref" id="baff0005"><sup>a</sup></span><svg focusable="false" viewBox="0 0 102 128" title="Author email or social media contact details icon" width="20" height="20" class="icon icon-envelope react-xocs-author-icon"><path d="m55.8 57.2c-1.78 1.31-5.14 1.31-6.9 0l-31.32-23.2h69.54l-31.32 23.19zm-55.8-24.78l42.94 32.62c2.64 1.95 6.02 2.93 9.4 2.93s6.78-0.98 9.42-2.93l40.24-30.7v-10.34h-102zm92 56.48l-18.06-22.74-8.04 5.95 17.38 21.89h-64.54l18.38-23.12-8.04-5.96-19.08 24.02v-37.58l-1e1 -8.46v61.1h102v-59.18l-1e1 8.46v35.62"></path></svg></span></button>, <button class="button-link button-link-primary" type="button" data-sd-ui-side-panel-opener="true" data-xocs-content-type="author" data-xocs-content-id="aep-author-id8"><span class="button-link-text"><span class="react-xocs-alternative-link"><span class="given-name">José-Luis</span> <span class="text surname">López-Ramírez</span> </span><span class="author-ref" id="baff0005"><sup>a</sup></span><svg focusable="false" viewBox="0 0 102 128" title="Author email or social media contact details icon" width="20" height="20" class="icon icon-envelope react-xocs-author-icon"><path d="m55.8 57.2c-1.78 1.31-5.14 1.31-6.9 0l-31.32-23.2h69.54l-31.32 23.19zm-55.8-24.78l42.94 32.62c2.64 1.95 6.02 2.93 9.4 2.93s6.78-0.98 9.42-2.93l40.24-30.7v-10.34h-102zm92 56.48l-18.06-22.74-8.04 5.95 17.38 21.89h-64.54l18.38-23.12-8.04-5.96-19.08 24.02v-37.58l-1e1 -8.46v61.1h102v-59.18l-1e1 8.46v35.62"></path></svg></span></button>, <button class="button-link button-link-primary" type="button" data-sd-ui-side-panel-opener="true" data-xocs-content-type="author" data-xocs-content-id="aep-author-id9"><span class="button-link-text"><span class="react-xocs-alternative-link"><span class="given-name">Francisco-Javier</span> <span class="text surname">Rangel-Butanda</span> </span><span class="author-ref" id="baff0005"><sup>a</sup></span><svg focusable="false" viewBox="0 0 102 128" title="Author email or social media contact details icon" width="20" height="20" class="icon icon-envelope react-xocs-author-icon"><path d="m55.8 57.2c-1.78 1.31-5.14 1.31-6.9 0l-31.32-23.2h69.54l-31.32 23.19zm-55.8-24.78l42.94 32.62c2.64 1.95 6.02 2.93 9.4 2.93s6.78-0.98 9.42-2.93l40.24-30.7v-10.34h-102zm92 56.48l-18.06-22.74-8.04 5.95 17.38 21.89h-64.54l18.38-23.12-8.04-5.96-19.08 24.02v-37.58l-1e1 -8.46v61.1h102v-59.18l-1e1 8.46v35.62"></path></svg></span></button>, <button class="button-link button-link-primary" type="button" data-sd-ui-side-panel-opener="true" data-xocs-content-type="author" data-xocs-content-id="aep-author-id10"><span class="button-link-text"><span class="react-xocs-alternative-link"><span class="given-name">Mario-Alberto</span> <span class="text surname">Ibarra-Manzano</span> </span><span class="author-ref" id="baff0005"><sup>a</sup></span><svg focusable="false" viewBox="0 0 102 128" title="Author email or social media contact details icon" width="20" height="20" class="icon icon-envelope react-xocs-author-icon"><path d="m55.8 57.2c-1.78 1.31-5.14 1.31-6.9 0l-31.32-23.2h69.54l-31.32 23.19zm-55.8-24.78l42.94 32.62c2.64 1.95 6.02 2.93 9.4 2.93s6.78-0.98 9.42-2.93l40.24-30.7v-10.34h-102zm92 56.48l-18.06-22.74-8.04 5.95 17.38 21.89h-64.54l18.38-23.12-8.04-5.96-19.08 24.02v-37.58l-1e1 -8.46v61.1h102v-59.18l-1e1 8.46v35.62"></path></svg></span></button>, <button class="button-link button-link-primary" type="button" data-sd-ui-side-panel-opener="true" data-xocs-content-type="author" data-xocs-content-id="aep-author-id11"><span class="button-link-text"><span class="react-xocs-alternative-link"><span class="given-name">Dora-Luz</span> <span class="text surname">Almanza-Ojeda</span> </span><span class="author-ref" id="baff0010"><sup>b</sup></span><svg focusable="false" viewBox="0 0 102 128" title="Author email or social media contact details icon" width="20" height="20" class="icon icon-envelope react-xocs-author-icon"><path d="m55.8 57.2c-1.78 1.31-5.14 1.31-6.9 0l-31.32-23.2h69.54l-31.32 23.19zm-55.8-24.78l42.94 32.62c2.64 1.95 6.02 2.93 9.4 2.93s6.78-0.98 9.42-2.93l40.24-30.7v-10.34h-102zm92 56.48l-18.06-22.74-8.04 5.95 17.38 21.89h-64.54l18.38-23.12-8.04-5.96-19.08 24.02v-37.58l-1e1 -8.46v61.1h102v-59.18l-1e1 8.46v35.62"></path></svg></span></button></div></div></div><button class="button-link button-link-secondary u-margin-s-ver text-s show-more-button button-link-icon-right" type="button" id="show-more-btn" data-aa-button="icon-expand"><span class="button-link-text">Show more</span><svg focusable="false" viewBox="0 0 92 128" height="20" width="17.25" class="icon icon-navigate-down"><path d="m1 51l7-7 38 38 38-38 7 7-45 45z"></path></svg></button><div class="banner-options u-padding-xs-bottom text-s"><button class="button-link AddToMendeley u-margin-s-right u-show-inline-from-md button-link-primary button-link-icon-left" type="button"><svg focusable="false" viewBox="0 0 86 128" height="16" width="16" class="icon icon-plus"><path d="m48 58v-38h-1e1v38h-38v1e1h38v38h1e1v-38h38v-1e1z"></path></svg><span class="button-link-text">Add to Mendeley</span></button><div class="Social u-display-inline-block" id="social"><div class="popover social-popover" id="social-popover"><div id="popover-trigger-social-popover"><button class="button-link u-margin-s-right button-link-primary button-link-icon-left" type="button" aria-expanded="false" aria-haspopup="true"><svg focusable="false" viewBox="0 0 128 128" height="16" width="16" class="icon icon-share"><path d="m9e1 112c-6.62 0-12-5.38-12-12s5.38-12 12-12 12 5.38 12 12-5.38 12-12 12zm-66-36c-6.62 0-12-5.38-12-12s5.38-12 12-12 12 5.38 12 12-5.38 12-12 12zm66-6e1c6.62 0 12 5.38 12 12s-5.38 12-12 12-12-5.38-12-12 5.38-12 12-12zm0 62c-6.56 0-12.44 2.9-16.48 7.48l-28.42-15.28c0.58-1.98 0.9-4.04 0.9-6.2s-0.32-4.22-0.9-6.2l28.42-15.28c4.04 4.58 9.92 7.48 16.48 7.48 12.14 0 22-9.86 22-22s-9.86-22-22-22-22 9.86-22 22c0 1.98 0.28 3.9 0.78 5.72l-28.64 15.38c-4.02-4.34-9.76-7.1-16.14-7.1-12.14 0-22 9.86-22 22s9.86 22 22 22c6.38 0 12.12-2.76 16.14-7.12l28.64 15.38c-0.5 1.84-0.78 3.76-0.78 5.74 0 12.14 9.86 22 22 22s22-9.86 22-22-9.86-22-22-22z"></path></svg><span class="button-link-text">Share</span></button></div></div></div><div class="ExportCitation u-display-inline-block" id="export-citation"><div class="popover export-citation-popover" id="export-citation-popover"><div id="popover-trigger-export-citation-popover"><button class="button-link button-link-primary button-link-icon-left" type="button" aria-expanded="false" aria-haspopup="true"><svg focusable="false" viewBox="0 0 106 128" height="16" width="16" class="icon icon-cited-by-66"><path xmlns="http://www.w3.org/2000/svg" d="m2 58.78v47.22h44v-42h-34v-5.22c0-18.5 17.08-26.78 34-26.78v-1e1c-25.9 0-44 15.12-44 36.78zm1e2 -26.78v-1e1c-25.9 0-44 15.12-44 36.78v47.22h44v-42h-34v-5.22c0-18.5 17.08-26.78 34-26.78z"></path></svg><span class="button-link-text">Cite</span></button></div></div></div></div></div><div class="ArticleIdentifierLinks u-margin-xs-bottom text-xs" id="article-identifier-links"><a class="anchor doi anchor-default" href="https://doi.org/10.1016/j.protcy.2012.03.021" target="_blank" rel="noreferrer noopener" aria-label="Persistent link using digital object identifier" title="Persistent link using digital object identifier"><span class="anchor-text">https://doi.org/10.1016/j.protcy.2012.03.021</span><svg focusable="false" viewBox="0 0 78 128" aria-label="Opens in new window" width="1em" height="1em" class="icon icon-arrow-up-right arrow-external-link"><path d="m4 36h57.07l-59.5 59.5 7.07 7.08 59.36-59.36v56.78h1e1v-74h-74z"></path></svg></a><a class="anchor rights-and-content anchor-default" href="https://s100.copyright.com/AppDispatchServlet?publisherName=ELS&contentID=S2212017312002502&orderBeanReset=true" target="_blank" rel="noreferrer noopener"><span class="anchor-text">Get rights and content</span><svg focusable="false" viewBox="0 0 78 128" aria-label="Opens in new window" width="1em" height="1em" class="icon icon-arrow-up-right arrow-external-link"><path d="m4 36h57.07l-59.5 59.5 7.07 7.08 59.36-59.36v56.78h1e1v-74h-74z"></path></svg></a></div><div class="LicenseInfo text-xs u-margin-xs-bottom"><div class="License"><span>Under a Creative Commons </span><a class="anchor anchor-default" href="http://creativecommons.org/licenses/by-nc-nd/3.0/" target="_blank" rel="noreferrer noopener"><span class="anchor-text">license</span><svg focusable="false" viewBox="0 0 78 128" aria-label="Opens in new window" width="1em" height="1em" class="icon icon-arrow-up-right arrow-external-link"><path d="m4 36h57.07l-59.5 59.5 7.07 7.08 59.36-59.36v56.78h1e1v-74h-74z"></path></svg></a></div><div class="OpenAccessLabel"><span class="access-indicator"></span>open access</div></div><section class="ReferencedArticles"></section><section class="ReferencedArticles"></section><div class="PageDivider"></div><div class="Abstracts u-font-serif text-s" id="abstracts"><div class="abstract author" id="aep-abstract-id12"><h2 class="section-title u-h4 u-margin-l-top u-margin-xs-bottom">Abstract</h2><div id="aep-abstract-sec-id13"><p id="spar0005">In order to optimize the movements of a robot, every object found in the work environment must not just be identified, but located in reference to the robot itself. Usually, object segmentation from an image is achieved using color segmentation. This segmentation can be achieved by processing the R, G and B chromatic components. However, this method has the disadvantage of been very sensitive to the changes on lighting. Converting the RGB image to the CIE-Lab color space avoids the lack of sensitivity by increasing the accuracy of the color segmentation. Unfortunately, if multiple objects of the same color are presented in the scene, is not possible to identify one of these objects using only this color space. Therefore, we need to consider an additional data source, in this case the depth, in order to discriminate objects that are not in the same plane as the object of interest. In this paper, we introduce an algorithm to detect objects, essentially on indoor environments, using CIE-Lab and depth segmentation techniques. We process the color and depth images provided by the Kinect sensor for proposing a visual strategy with real-time performance</p></div></div></div><ul id="issue-navigation" class="issue-navigation u-margin-s-bottom u-bg-grey1"><li class="previous move-left u-padding-s-ver u-padding-s-left"><button class="button-alternative button-alternative-tertiary button-alternative-icon-left" disabled type="button"><span class="button-alternative-icon"><svg focusable="false" viewBox="0 0 54 128" width="10.125" height="24" class="icon icon-navigate-left u-fill-grey8"><path d="m1 61l45-45 7 7-38 38 38 38-7 7z"></path></svg></span><span class="button-alternative-text">Previous<!-- --> <span class="extra-detail-1">article</span><span class="extra-detail-2"> in issue</span></span></button></li><li class="next move-right u-padding-s-ver u-padding-s-right"><button class="button-alternative button-alternative-tertiary button-alternative-icon-right" disabled type="button"><span class="button-alternative-text">Next<!-- --> <span class="extra-detail-1">article</span><span class="extra-detail-2"> in issue</span></span><span class="button-alternative-icon"><svg focusable="false" viewBox="0 0 54 128" width="10.125" height="24" class="icon icon-navigate-right u-fill-grey8"><path d="m1 99l38-38-38-38 7-7 45 45-45 45z"></path></svg></span></button></li></ul><div class="Keywords u-font-serif text-s"><div id="aep-keywords-id14" class="keywords-section"><h2 class="section-title u-h4 u-margin-l-top u-margin-xs-bottom">Keywords</h2><div class="keyword"><span>Kinect</span></div><div class="keyword"><span>Object detection</span></div><div class="keyword"><span>Mobile robotics</span></div><div class="keyword"><span>Color segmentation</span></div><div class="keyword"><span>Depth segmentation</span></div></div></div><div class="related-content-links u-hide-from-md"><button type="button" class="button button-anchor" aria-disabled="false"><span class="button-text">Recommended articles</span></button></div><div class="Tail text-s"></div><div id="section-cited-by"><section aria-label="Cited by" class="ListArticles preview"><div class="PageDivider"></div><header id="citing-articles-header"><h2 class="u-h4 u-margin-l-ver u-font-serif">Cited by (0)</h2></header><div aria-describedby="citing-articles-header"></div></section></div><div class="Copyright"><span class="copyright-line">Copyright © 2012 Published by Elsevier Ltd.</span></div></article><div class="u-show-from-md col-lg-6 col-md-8 pad-right u-padding-s-top"><aside class="RelatedContent u-clr-grey8" aria-label="Related content"><section class="RelatedContentPanel u-margin-s-bottom"><header id="recommended-articles-header" class="related-content-panel-header u-margin-s-bottom"><button class="button-link related-content-panel-toggle button-link-primary button-link-icon-right" type="button" aria-expanded="false" data-aa-button="sd:product:journal:article:location=recommended-articles:type=open"><span class="button-link-text"><h2 class="section-title u-h4"><span class="related-content-panel-title-text">Recommended articles</span></h2></span><svg focusable="false" viewBox="0 0 92 128" width="24" height="24" class="icon icon-navigate-down"><path d="m1 51l7-7 38 38 38-38 7 7-45 45z"></path></svg></button></header><div class="u-display-none" aria-hidden="true" aria-describedby="recommended-articles-header"><div class="u-margin-s-bottom"><span class="text-xs">No articles found.</span></div></div></section><section class="RelatedContentPanel u-margin-s-bottom hidden"><header id="metrics-header" class="related-content-panel-header u-margin-s-bottom"><button class="button-link related-content-panel-toggle is-up button-link-primary button-link-icon-right" type="button" aria-expanded="true"><span class="button-link-text"><h2 class="section-title u-h4"><span class="related-content-panel-title-text">Article Metrics</span></h2></span><svg focusable="false" viewBox="0 0 92 128" width="24" height="24" class="icon icon-navigate-down"><path d="m1 51l7-7 38 38 38-38 7 7-45 45z"></path></svg></button></header><div class aria-hidden="false" aria-describedby="metrics-header"><a href="https://plu.mx/plum/a/?doi=10.1016/j.protcy.2012.03.021" class="plumx-summary plum-sciencedirect-theme" data-pass-hidden-categories="true" data-hide-usage="true" data-orientation="vertical" data-hide-print="true" data-site="plum" data-on-success="onMetricsWidgetSuccess">View article metrics</a></div></section></aside></div></div></div></div><footer role="contentinfo" class="els-footer u-bg-white text-xs u-padding-s-hor u-padding-m-hor-from-sm u-padding-l-hor-from-md u-padding-l-ver u-margin-l-top u-margin-xl-top-from-sm u-margin-l-top-from-md"><div class="els-footer-elsevier u-margin-m-bottom u-margin-0-bottom-from-md u-margin-s-right u-margin-m-right-from-md u-margin-l-right-from-lg"><a class="anchor anchor-default anchor-icon-only" href="https://www.elsevier.com/" target="_blank" aria-label="Elsevier home page (opens in a new tab)" rel="nofollow"><img class="footer-logo" src="https://sdfestaticassets-eu-west-1.sciencedirectassets.com/shared-assets/47/images/elsevier-non-solus-new-with-wordmark.svg" alt="Elsevier logo with wordmark" height="64" width="58" loading="lazy" /></a></div><div class="els-footer-content"><div class="u-remove-if-print"><ul class="els-footer-links u-margin-xs-bottom" style="list-style:none"><li><a class="anchor u-display-block u-clr-grey8 u-margin-s-bottom u-margin-0-bottom-from-sm u-margin-m-right-from-sm u-margin-l-right-from-md anchor-default" href="https://www.elsevier.com/solutions/sciencedirect" target="_blank" id="els-footer-about-science-direct" rel="nofollow"><span class="anchor-text">About ScienceDirect</span><svg focusable="false" viewBox="0 0 78 128" aria-label="Opens in new window" width="1em" height="1em" class="icon icon-arrow-up-right arrow-external-link"><path d="m4 36h57.07l-59.5 59.5 7.07 7.08 59.36-59.36v56.78h1e1v-74h-74z"></path></svg></a></li><li><a class="anchor u-display-block u-clr-grey8 u-margin-s-bottom u-margin-0-bottom-from-sm u-margin-m-right-from-sm u-margin-l-right-from-md anchor-default" href="/user/institution/login?targetURL=%2Fscience%2Farticle%2Fpii%2FS2212017312002502" id="els-footer-remote-access" rel="nofollow"><span class="anchor-text">Remote access</span></a></li><li><a class="anchor u-display-block u-clr-grey8 u-margin-s-bottom u-margin-0-bottom-from-sm u-margin-m-right-from-sm u-margin-l-right-from-md anchor-default" href="https://sd-cart.elsevier.com/?" target="_blank" id="els-footer-shopping-cart" rel="nofollow"><span class="anchor-text">Shopping cart</span><svg focusable="false" viewBox="0 0 78 128" aria-label="Opens in new window" width="1em" height="1em" class="icon icon-arrow-up-right arrow-external-link"><path d="m4 36h57.07l-59.5 59.5 7.07 7.08 59.36-59.36v56.78h1e1v-74h-74z"></path></svg></a></li><li><a class="anchor u-display-block u-clr-grey8 u-margin-s-bottom u-margin-0-bottom-from-sm u-margin-m-right-from-sm u-margin-l-right-from-md anchor-default" href="http://elsmediakits.com" target="_blank" id="els-footer-advertise" rel="nofollow"><span class="anchor-text">Advertise</span><svg focusable="false" viewBox="0 0 78 128" aria-label="Opens in new window" width="1em" height="1em" class="icon icon-arrow-up-right arrow-external-link"><path d="m4 36h57.07l-59.5 59.5 7.07 7.08 59.36-59.36v56.78h1e1v-74h-74z"></path></svg></a></li><li><a class="anchor u-display-block u-clr-grey8 u-margin-s-bottom u-margin-0-bottom-from-sm u-margin-m-right-from-sm u-margin-l-right-from-md anchor-default" href="https://service.elsevier.com/app/contact/supporthub/sciencedirect/" target="_blank" id="els-footer-contact-support" rel="nofollow"><span class="anchor-text">Contact and support</span><svg focusable="false" viewBox="0 0 78 128" aria-label="Opens in new window" width="1em" height="1em" class="icon icon-arrow-up-right arrow-external-link"><path d="m4 36h57.07l-59.5 59.5 7.07 7.08 59.36-59.36v56.78h1e1v-74h-74z"></path></svg></a></li><li><a class="anchor u-display-block u-clr-grey8 u-margin-s-bottom u-margin-0-bottom-from-sm u-margin-m-right-from-sm u-margin-l-right-from-md anchor-default" href="https://www.elsevier.com/legal/elsevier-website-terms-and-conditions" target="_blank" id="els-footer-terms-condition" rel="nofollow"><span class="anchor-text">Terms and conditions</span><svg focusable="false" viewBox="0 0 78 128" aria-label="Opens in new window" width="1em" height="1em" class="icon icon-arrow-up-right arrow-external-link"><path d="m4 36h57.07l-59.5 59.5 7.07 7.08 59.36-59.36v56.78h1e1v-74h-74z"></path></svg></a></li><li><a class="anchor u-display-block u-clr-grey8 u-margin-s-bottom u-margin-0-bottom-from-sm u-margin-m-right-from-sm u-margin-l-right-from-md anchor-default" href="https://www.elsevier.com/legal/privacy-policy" target="_blank" id="els-footer-privacy-policy" rel="nofollow"><span class="anchor-text">Privacy policy</span><svg focusable="false" viewBox="0 0 78 128" aria-label="Opens in new window" width="1em" height="1em" class="icon icon-arrow-up-right arrow-external-link"><path d="m4 36h57.07l-59.5 59.5 7.07 7.08 59.36-59.36v56.78h1e1v-74h-74z"></path></svg></a></li></ul></div><p id="els-footer-cookie-message" class="u-remove-if-print">Cookies are used by this site. <!-- --> <button class="button-link ot-sdk-show-settings cookie-btn button-link-primary" type="button" id="ot-sdk-btn"><span class="button-link-text"><strong>Cookie Settings</strong></span></button></p><p id="els-footer-copyright">All content on this site: Copyright © <!-- -->2024<!-- --> Elsevier B.V., its licensors, and contributors. All rights are reserved, including those for text and data mining, AI training, and similar technologies. For all open access content, the Creative Commons licensing terms apply.</p></div><div class="els-footer-relx u-margin-0-top u-margin-m-top-from-xs u-margin-0-top-from-md"><a class="anchor anchor-default anchor-icon-only" href="https://www.relx.com/" target="_blank" aria-label="RELX home page (opens in a new tab)" id="els-footer-relx" rel="nofollow"><img loading="lazy" src="https://sdfestaticassets-eu-west-1.sciencedirectassets.com/shared-assets/60/images/logo-relx-tm.svg" width="93" height="20" alt="RELX group home page" /></a></div></footer></div></div></div></div>
|
|
<script type="application/json" data-iso-key="_0">{"abstracts":{"content":[{"$$":[{"#name":"section-title","_":"Abstract"},{"$$":[{"$":{"view":"all","id":"spar0005"},"#name":"simple-para","_":"In order to optimize the movements of a robot, every object found in the work environment must not just be identified, but located in reference to the robot itself. Usually, object segmentation from an image is achieved using color segmentation. This segmentation can be achieved by processing the R, G and B chromatic components. However, this method has the disadvantage of been very sensitive to the changes on lighting. Converting the RGB image to the CIE-Lab color space avoids the lack of sensitivity by increasing the accuracy of the color segmentation. Unfortunately, if multiple objects of the same color are presented in the scene, is not possible to identify one of these objects using only this color space. Therefore, we need to consider an additional data source, in this case the depth, in order to discriminate objects that are not in the same plane as the object of interest. In this paper, we introduce an algorithm to detect objects, essentially on indoor environments, using CIE-Lab and depth segmentation techniques. We process the color and depth images provided by the Kinect sensor for proposing a visual strategy with real-time performance"}],"$":{"id":"aep-abstract-sec-id13"},"#name":"abstract-sec"}],"$":{"id":"aep-abstract-id12","class":"author"},"#name":"abstract"}],"floats":[],"footnotes":[],"attachments":[]},"accessbarConfig":{"fallback":false,"id":"accessbar","version":"0.0.1","analytics":{"location":"accessbar","eventName":"ctaImpression"},"label":{},"ariaLabel":{"accessbar":"Download options and search","componentsList":"PDF Options"},"banner":{"id":"Banner"},"banners":[{"id":"Banner"},{"id":"BannerSsrn"}],"components":[{"target":"_blank","analytics":[{"ids":["accessbar:fta:single-article"],"eventName":"ctaClick"}],"label":"View **PDF**","ariaLabel":"View PDF. Opens in a new window.","id":"ViewPDF"},{"analytics":[{"ids":["accessbar:fta:full-issue"],"eventName":"ctaClick"}],"label":"Download full issue","id":"DownloadFullIssue"},{"id":"LinkResolver","analytics":[{"eventName":"navigationClick","ids":["sd:accessbar-linkresolver"]}],"rel":"noreferrer noopener","target":"_blank","href":"https://www.elsevier.com/?ctx_ver=Z39.88-2004&ctx_enc=info:ofi/enc:UTF-8&url_ver=Z39.88-2004&rfr_id=info:sid/Elsevier:SD&svc_val_fmt=info:ofi/fmt:kev:mtx:sch_svc&rft_val_fmt=info:ofi/fmt:kev:mtx:journal&rft.aulast=HERNANDEZLOPEZ&rft.auinit=J&rft.date=2012&rft.issn=22120173&rft.volume=3C&rft.spage=196&rft.epage=204&rft.title=Procedia%20Technology&rft.atitle=Detecting%20objects%20using%20color%20and%20depth%20segmentation%20with%20Kinect%20sensor&rft_id=info:doi/10.1016/j.protcy.2012.03.021","label":"Find it here!"}],"search":{"inputPlaceHolder":"Search ScienceDirect","ariaLabel":{"input":"Search ScienceDirect","submit":"Submit search"},"formAction":"/search#submit","analytics":[{"ids":["accessbar:search"],"eventName":"searchStart"}],"id":"QuickSearch"}},"adobeTarget":{"header-sign-in":{"variation":"#2","enabled":true}},"article":{"analyticsMetadata":{"accountId":"228598","accountName":"ScienceDirect Guests","loginStatus":"anonymous","userId":"12975512","isLoggedIn":false},"cid":"282073","content-family":"serial","copyright-line":"Copyright © 2012 Published by Elsevier Ltd.","cover-date-years":["2012"],"cover-date-start":"2012-01-01","cover-date-text":"2012","document-subtype":"fla","document-type":"article","entitledToken":"4A0045980858AC630E566458CA5F6F8D043FFED339E8F78D74A5F9A8065099E4702689A69460A0A7","eid":"1-s2.0-S2212017312002502","doi":"10.1016/j.protcy.2012.03.021","first-fp":"196","hub-eid":"1-s2.0-S2212017312X00045","issuePii":"S2212017312X00045","item-weight":"HEAD-AND-TAIL","language":"en","last-lp":"204","last-author":{"#name":"last-author","$":{"xmlns:ce":true,"xmlns:dm":true,"xmlns:sb":true},"$$":[{"#name":"author","$":{"id":"aep-author-id11"},"$$":[{"#name":"given-name","_":"Dora-Luz"},{"#name":"surname","_":"Almanza-Ojeda"},{"#name":"cross-ref","$":{"refid":"aff0010"},"$$":[{"#name":"sup","$":{"loc":"post"},"_":"b"}]},{"#name":"encoded-e-address","__encoded":"JTdCJTIyJTIzbmFtZSUyMiUzQSUyMmUtYWRkcmVzcyUyMiUyQyUyMiUyNCUyMiUzQSU3QiUyMnR5cGUlMjIlM0ElMjJlbWFpbCUyMiU3RCUyQyUyMl8lMjIlM0ElMjJsdXpkb3JhJTQwaWVlZS5vcmclMjIlN0Q="}]}]},"normalized-first-auth-initial":"J","normalized-first-auth-surname":"HERNANDEZLOPEZ","pages":[{"last-page":"204","first-page":"196"}],"pii":"S2212017312002502","srctitle":"Procedia Technology","suppl":"C","timestamp":"2015-05-15T07:33:56.630215-04:00","title":{"content":[{"#name":"title","_":"Detecting objects using color and depth segmentation with Kinect sensor"}],"floats":[],"footnotes":[],"attachments":[]},"vol-first":"3","vol-iss-suppl-text":"Volume 3","userSettings":{"forceAbstract":false,"creditCardPurchaseAllowed":true,"blockFullTextForAnonymousAccess":false,"disableWholeIssueDownload":false,"preventTransactionalAccess":false,"preventDocumentDelivery":true},"contentType":"JL","crossmark":false,"document-references":18,"freeHtmlGiven":false,"userProfile":{"departmentName":"ScienceDirect Guests","accessType":"GUEST","accountId":"228598","webUserId":"12975512","accountName":"ScienceDirect Guests","departmentId":"291352","userType":"NORMAL","hasMultipleOrganizations":false},"access":{"openAccess":true,"openArchive":false,"license":"http://creativecommons.org/licenses/by-nc-nd/3.0/"},"aipType":"none","articleEntitlement":{"entitled":true,"isCasaUser":false,"usageInfo":"(12975512,U|291352,D|228598,A|3,P|2,PL)(SDFE,CON|e8b9b15e894df4474d182718fc26c3aceb49gxrqb,SSO|ANON_GUEST,ACCESS_TYPE)"},"crawlerInformation":{"canCrawlPDFContent":false,"isCrawler":false},"dates":{"Available online":"23 May 2012","Revised":[],"Publication date":"1 January 2012"},"downloadFullIssue":true,"entitlementReason":"openaccess","hasBody":false,"has-large-authors":false,"hasScholarlyAbstract":true,"headerConfig":{"contactUrl":"https://service.elsevier.com/app/contact/supporthub/sciencedirect/","userName":"","userEmail":"","orgName":"ScienceDirect Guests","webUserId":"12975512","libraryBanner":{},"shib_regUrl":"","tick_regUrl":"","recentInstitutions":[],"canActivatePersonalization":false,"hasInstitutionalAssociation":false,"hasMultiOrg":false,"userType":"GUEST","userAnonymity":"ANON_GUEST","allowCart":true,"environment":"prod","cdnAssetsHost":"https://sdfestaticassets-eu-west-1.sciencedirectassets.com"},"isCorpReq":false,"isPdfFullText":true,"issn":"22120173","issn-primary-formatted":"2212-0173","issRange":"","isThirdParty":false,"pageCount":9,"pdfDownload":{"isPdfFullText":true,"urlMetadata":{"queryParams":{"md5":"133ba5d429bd9890f7b2d47a7449e54e","pid":"1-s2.0-S2212017312002502-main.pdf"},"pii":"S2212017312002502","pdfExtension":"/pdf","path":"science/article/pii"}},"publication-content":{"noElsevierLogo":false,"imprintPublisher":{"displayName":"Elsevier","id":"47"},"isSpecialIssue":true,"isSampleIssue":false,"transactionsBlocked":true,"publicationOpenAccess":{"oaStatus":"Full","oaArticleCount":2873,"openArchiveStatus":false,"openArchiveArticleCount":0,"openAccessStartDate":"","oaAllowsAuthorPaid":false},"issue-cover":{"attachment":[{"attachment-eid":"1-s2.0-S2212017312X00045-cov200h.gif","file-basename":"cov200h","extension":"gif","filename":"cov200h.gif","ucs-locator":["https://s3.amazonaws.com/prod-ucs-content-store-us-east/content/pii:S2212017312X00045/cover/DOWNSAMPLED200/image/gif/a9ebb36f92bde6d519392cc41e6637c7/cov200h.gif","https://s3-eu-west-1.amazonaws.com/prod-ucs-content-store-eu-west/content/pii:S2212017312X00045/cover/DOWNSAMPLED200/image/gif/a9ebb36f92bde6d519392cc41e6637c7/cov200h.gif"],"attachment-type":"IMAGE-COVER-H200","filesize":"14638","pixel-height":"200","pixel-width":"144"},{"attachment-eid":"1-s2.0-S2212017312X00045-cov150h.gif","file-basename":"cov150h","extension":"gif","filename":"cov150h.gif","ucs-locator":["https://s3.amazonaws.com/prod-ucs-content-store-us-east/content/pii:S2212017312X00045/cover/DOWNSAMPLED/image/gif/3cfccb30155f87071926da0214eb7946/cov150h.gif","https://s3-eu-west-1.amazonaws.com/prod-ucs-content-store-eu-west/content/pii:S2212017312X00045/cover/DOWNSAMPLED/image/gif/3cfccb30155f87071926da0214eb7946/cov150h.gif"],"attachment-type":"IMAGE-COVER-H150","filesize":"8609","pixel-height":"150","pixel-width":"108"}]},"smallCoverUrl":"https://ars.els-cdn.com/content/image/S22120173.gif","title":"procedia-technology","contentTypeCode":"JL","images":{"coverImage":"https://ars.els-cdn.com/content/image/1-s2.0-S2212017312X00045-cov150h.gif","logo":"https://sdfestaticassets-eu-west-1.sciencedirectassets.com/prod/99e6b7efc6d7603db501d4cc94a9fb642a5bbddd/image/elsevier-non-solus.png","logoAltText":"Elsevier"},"publicationCoverImageUrl":"https://ars.els-cdn.com/content/image/1-s2.0-S2212017312X00045-cov150h.gif"},"useEnhancedReader":true,"volRange":"3","features":["keywords","references"],"open-research":{},"self-archiving":{},"titleString":"Detecting objects using color and depth segmentation with Kinect sensor","ssrn":{},"renderingMode":"Article","isAbstract":false,"isContentVisible":false,"ajaxLinks":{"citingArticles":true,"referenceLinks":true,"references":true,"referredToBy":true,"toc":true,"specialIssueArticles":true,"recommendations":true,"authorMetadata":true},"eligibleForUniversalPdf":true,"pdfEmbed":true,"displayViewFullText":false},"authors":{"content":[{"#name":"author-group","$$":[{"#name":"author","$":{"id":"aep-author-id6"},"$$":[{"#name":"given-name","_":"José-Juan"},{"#name":"surname","_":"Hernández-López"},{"#name":"cross-ref","$":{"refid":"aff0005"},"$$":[{"#name":"sup","$":{"loc":"post"},"_":"a"}]},{"#name":"encoded-e-address","__encoded":"JTdCJTIyJTIzbmFtZSUyMiUzQSUyMmUtYWRkcmVzcyUyMiUyQyUyMiUyNCUyMiUzQSU3QiUyMnR5cGUlMjIlM0ElMjJlbWFpbCUyMiU3RCUyQyUyMl8lMjIlM0ElMjJqai5oZXJuYW5kZXpsb3BleiU0MHVndG8ubXglMjIlN0Q="}]},{"#name":"author","$":{"id":"aep-author-id7"},"$$":[{"#name":"given-name","_":"Ana-Linnet"},{"#name":"surname","_":"Quintanilla-Olvera"},{"#name":"cross-ref","$":{"refid":"aff0005"},"$$":[{"#name":"sup","$":{"loc":"post"},"_":"a"}]},{"#name":"encoded-e-address","__encoded":"JTdCJTIyJTIzbmFtZSUyMiUzQSUyMmUtYWRkcmVzcyUyMiUyQyUyMiUyNCUyMiUzQSU3QiUyMnR5cGUlMjIlM0ElMjJlbWFpbCUyMiU3RCUyQyUyMl8lMjIlM0ElMjJhbC5xdWludGFuaWxsYW9sdmVyYSU0MHVndG8ubXglMjIlN0Q="}]},{"#name":"author","$":{"id":"aep-author-id8"},"$$":[{"#name":"given-name","_":"José-Luis"},{"#name":"surname","_":"López-Ramírez"},{"#name":"cross-ref","$":{"refid":"aff0005"},"$$":[{"#name":"sup","$":{"loc":"post"},"_":"a"}]},{"#name":"encoded-e-address","__encoded":"JTdCJTIyJTIzbmFtZSUyMiUzQSUyMmUtYWRkcmVzcyUyMiUyQyUyMiUyNCUyMiUzQSU3QiUyMnR5cGUlMjIlM0ElMjJlbWFpbCUyMiU3RCUyQyUyMl8lMjIlM0ElMjJqbC5sb3BlenJhbWlyZXolNDB1Z3RvLm14JTIyJTdE"}]},{"#name":"author","$":{"id":"aep-author-id9"},"$$":[{"#name":"given-name","_":"Francisco-Javier"},{"#name":"surname","_":"Rangel-Butanda"},{"#name":"cross-ref","$":{"refid":"aff0005"},"$$":[{"#name":"sup","$":{"loc":"post"},"_":"a"}]},{"#name":"encoded-e-address","__encoded":"JTdCJTIyJTIzbmFtZSUyMiUzQSUyMmUtYWRkcmVzcyUyMiUyQyUyMiUyNCUyMiUzQSU3QiUyMnR5cGUlMjIlM0ElMjJlbWFpbCUyMiU3RCUyQyUyMl8lMjIlM0ElMjJmai5yYW5nZWxidXRhbmRhJTQwdWd0by5teCUyMiU3RA=="}]},{"#name":"author","$":{"id":"aep-author-id10"},"$$":[{"#name":"given-name","_":"Mario-Alberto"},{"#name":"surname","_":"Ibarra-Manzano"},{"#name":"cross-ref","$":{"refid":"aff0005"},"$$":[{"#name":"sup","$":{"loc":"post"},"_":"a"}]},{"#name":"encoded-e-address","__encoded":"JTdCJTIyJTIzbmFtZSUyMiUzQSUyMmUtYWRkcmVzcyUyMiUyQyUyMiUyNCUyMiUzQSU3QiUyMnR5cGUlMjIlM0ElMjJlbWFpbCUyMiU3RCUyQyUyMl8lMjIlM0ElMjJpYmFycmFtJTQwdWd0by5teCUyMiU3RA=="}]},{"#name":"author","$":{"id":"aep-author-id11"},"$$":[{"#name":"given-name","_":"Dora-Luz"},{"#name":"surname","_":"Almanza-Ojeda"},{"#name":"cross-ref","$":{"refid":"aff0010"},"$$":[{"#name":"sup","$":{"loc":"post"},"_":"b"}]},{"#name":"encoded-e-address","__encoded":"JTdCJTIyJTIzbmFtZSUyMiUzQSUyMmUtYWRkcmVzcyUyMiUyQyUyMiUyNCUyMiUzQSU3QiUyMnR5cGUlMjIlM0ElMjJlbWFpbCUyMiU3RCUyQyUyMl8lMjIlM0ElMjJsdXpkb3JhJTQwaWVlZS5vcmclMjIlN0Q="}]},{"#name":"affiliation","$":{"id":"aff0005"},"$$":[{"#name":"label","_":"a"},{"#name":"textfn","$$":[{"#name":"__text__","_":"Digital Signal Processing Laboratory; Electronics Department; DICIS; University of Guanajuato Carretera Salamanca-Valle de Santiago Km.3.5"},{"#name":"hsp","$":{"sp":"0.25"}},{"#name":"__text__","_":"+"},{"#name":"hsp","$":{"sp":"0.25"}},{"#name":"__text__","_":"1.8 Km, Comunidad Palo Blanco, 36885, Salamanca, Guanajuato, Mexico"}]}]},{"#name":"affiliation","$":{"id":"aff0010"},"$$":[{"#name":"label","_":"b"},{"#name":"textfn","_":"Departamento de Ingeniería Robótica; Universidad Politécnica de Guanajuato Av. Universidad Norte SN, Comunidad Juan Alonso, 38483, Cortazar, Guanajuato, Mexico"}]}]}],"floats":[],"footnotes":[],"affiliations":{"aff0005":{"#name":"affiliation","$":{"id":"aff0005"},"$$":[{"#name":"label","_":"a"},{"#name":"textfn","$$":[{"#name":"__text__","_":"Digital Signal Processing Laboratory; Electronics Department; DICIS; University of Guanajuato Carretera Salamanca-Valle de Santiago Km.3.5"},{"#name":"hsp","$":{"sp":"0.25"}},{"#name":"__text__","_":"+"},{"#name":"hsp","$":{"sp":"0.25"}},{"#name":"__text__","_":"1.8 Km, Comunidad Palo Blanco, 36885, Salamanca, Guanajuato, Mexico"}]}]},"aff0010":{"#name":"affiliation","$":{"id":"aff0010"},"$$":[{"#name":"label","_":"b"},{"#name":"textfn","_":"Departamento de Ingeniería Robótica; Universidad Politécnica de Guanajuato Av. Universidad Norte SN, Comunidad Juan Alonso, 38483, Cortazar, Guanajuato, Mexico"}]}},"attachments":[],"correspondences":{},"scopusAuthorIds":{},"articles":{}},"authorMetadata":[],"banner":{"expanded":false},"biographies":{},"body":{},"browser":{"name":"Chrome","engine":"Blink"},"chapters":{"toc":[],"isLoading":false},"changeViewLinks":{"showFullTextLink":false,"showAbstractLink":false},"citingArticles":{},"combinedContentItems":{"content":[{"#name":"keywords","$$":[{"#name":"keywords","$":{"xmlns:ce":true,"xmlns:aep":true,"xmlns:xoe":true,"xmlns:mml":true,"xmlns:xs":true,"xmlns:xlink":true,"xmlns:xocs":true,"xmlns:tb":true,"xmlns:xsi":true,"xmlns:cals":true,"xmlns:sb":true,"xmlns:ja":true,"xmlns":true,"class":"keyword","id":"aep-keywords-id14"},"$$":[{"#name":"section-title","_":"Keywords"},{"#name":"keyword","$$":[{"#name":"text","_":"Kinect"}]},{"#name":"keyword","$$":[{"#name":"text","_":"Object detection"}]},{"#name":"keyword","$$":[{"#name":"text","_":"Mobile robotics"}]},{"#name":"keyword","$$":[{"#name":"text","_":"Color segmentation"}]},{"#name":"keyword","$$":[{"#name":"text","_":"Depth segmentation"}]}]}]},{"#name":"title-editors-groups","$":{"xmlns:xocs":true,"xmlns:xoe":true,"xmlns:mml":true,"xmlns:ce":true,"xmlns:xs":true,"xmlns:xlink":true,"xmlns:tb":true,"xmlns:xsi":true,"xmlns:cals":true,"xmlns:sb":true,"xmlns:ja":true,"xmlns":true},"$$":[{"#name":"title","_":"The 2012 Iberoamerican Conference on Electronics Engineering and Computer Science"},{"#name":"editors","$$":[{"#name":"author-group","$$":[{"#name":"author","$$":[{"#name":"given-name","_":"Carlos"},{"#name":"surname","_":"A. Gutierrez"}]}]},{"#name":"author-group","$$":[{"#name":"author","$$":[{"#name":"given-name","_":"Carlos"},{"#name":"surname","_":"Delgado-Mata"}]}]},{"#name":"author-group","$$":[{"#name":"author","$$":[{"#name":"given-name","_":"Ramiro"},{"#name":"surname","_":"Velazquez"}]}]},{"#name":"author-group","$$":[{"#name":"author","$$":[{"#name":"given-name","_":"Luis"},{"#name":"surname","_":"Gutierrez Diaz de Leon"}]}]},{"#name":"author-group","$$":[{"#name":"author","$$":[{"#name":"given-name","_":"Carlos"},{"#name":"surname","_":"Franco-Reboreda"}]}]}]}]}],"floats":[],"footnotes":[],"attachments":[]},"crossMark":{"isOpen":false},"domainConfig":{"cdnAssetsHost":"https://sdfestaticassets-eu-west-1.sciencedirectassets.com","assetRoute":"https://sdfestaticassets-eu-west-1.sciencedirectassets.com/prod/99e6b7efc6d7603db501d4cc94a9fb642a5bbddd"},"downloadIssue":{"openOnPageLoad":false,"isOpen":false,"downloadCapOpen":false,"articles":[],"selected":[]},"enrichedContent":{"tableOfContents":false,"researchData":{"hasResearchData":false,"dataProfile":{},"openData":{},"mendeleyData":{},"databaseLinking":{}},"geospatialData":{"attachments":[]},"interactiveCaseInsights":{},"virtualMicroscope":{}},"entitledRecommendations":{"openOnPageLoad":false,"isOpen":false,"articles":[],"selected":[],"currentPage":1,"totalPages":1},"exam":{},"helpText":{"keyDates":{"html":"<div class=\"text-s key-dates-help\"><h3 class=\"u-margin-s-bottom u-h4\">Publication milestones</h3><p class=\"u-margin-m-bottom\">The dates displayed for an article provide information on when various publication milestones were reached at the journal that has published the article. Where applicable, activities on preceding journals at which the article was previously under consideration are not shown (for instance submission, revisions, rejection).</p><p class=\"u-margin-xs-bottom\">The publication milestones include:</p><ul class=\"key-dates-help-list u-margin-m-bottom u-padding-s-left\"><li><span class=\"u-text-italic\">Received</span>: The date the article was originally submitted to the journal.</li><li><span class=\"u-text-italic\">Revised</span>: The date the most recent revision of the article was submitted to the journal. Dates corresponding to intermediate revisions are not shown.</li><li><span class=\"u-text-italic\">Accepted</span>: The date the article was accepted for publication in the journal.</li><li><span class=\"u-text-italic\">Available online</span>: The date a version of the article was made available online in the journal.</li><li><span class=\"u-text-italic\">Version of Record</span>: The date the finalized version of the article was made available in the journal.</li></ul><p>More information on publishing policies can be found on the <a class=\"anchor u-display-inline anchor-alternative\" href=\"https://www.elsevier.com/about/policies-and-standards/publishing-ethics\" target=\"_blank\"><span class=\"anchor-text\">Publishing Ethics Policies</span></a> page. View our <a class=\"anchor u-display-inline anchor-alternative\" href=\"https://www.elsevier.com/researcher/author/submit-your-paper\" target=\"_blank\"><span class=\"anchor-text\">Publishing with Elsevier: step-by-step</span></a> page to learn more about the publishing process. For any questions on your own submission or other questions related to publishing an article, <a class=\"anchor u-display-inline anchor-alternative\" href=\"https://service.elsevier.com/app/phone/supporthub/publishing\" target=\"_blank\"><span class=\"anchor-text\">contact our Researcher support team.</span></a></p></div>","title":"What do these dates mean?"}},"glossary":{},"issueNavigation":{"previous":{},"next":{}},"linkingHubLinks":{},"metrics":{"isOpen":true},"preview":{},"questionsAndAnswers":{},"rawtext":"","recommendations":{},"references":{},"referenceLinks":{"internal":[],"external":[]},"refersTo":{},"referredToBy":{},"relatedContent":{"isModal":false,"isOpenSpecialIssueArticles":true,"isOpenVirtualSpecialIssueLink":false,"isOpenRecommendations":false,"isOpenSubstances":true,"citingArticles":[false,false,false,false,false,false],"recommendations":[false,false,false,false,false,false]},"seamlessAccess":{},"specialIssueArticles":{},"substances":{},"supplementaryFilesData":[],"tableOfContents":{"showEntitledTocLinks":true},"tail":{},"transientError":{"isOpen":false},"userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36","sidePanel":{"openState":1},"viewConfig":{"articleFeature":{"rightsAndContentLink":true},"pathPrefix":""},"virtualSpecialIssue":{"showVirtualSpecialIssueLink":false},"userCookiePreferences":{"STRICTLY_NECESSARY":true,"PERFORMANCE":false,"FUNCTIONAL":false,"TARGETING":false}}</script>
|
|
<script src="https://assets.adobedtm.com/4a848ae9611a/032db4f73473/launch-a6263b31083f.min.js" type="image/ot-performance" async></script>
|
|
<script type="980a3173744142363f9804a3-text/javascript">
|
|
window.pageData = {"content":[{"entitlementType":"openaccess","format":"MIME-XHTML","id":"sd:article:pii:S2212017312002502","type":"sd:article:JL:scope-full","detail":"sd:article:subtype:fla","publicationType":"journal","issn":"2212-0173","volumeNumber":"3","suppl":"C","provider":"elsevier"}],"page":{"businessUnit":"ELS:RP:ST","language":"en","name":"product:journal:article","noTracking":"false","productAppVersion":"full-direct","productName":"SD","type":"CP-CA","environment":"prod","loadTimestamp":1709731715536,"loadTime":""},"visitor":{"accessType":"ae:ANON_GUEST","accountId":"ae:228598","accountName":"ae:ScienceDirect Guests","loginStatus":"anonymous","userId":"ae:12975512","ipAddress":"79.132.216.7","appSessionId":"03e672bb-7314-45c3-af0e-1299ffb53ed2"}};
|
|
window.pageData.page.loadTime = performance ? Math.round(performance.now()).toString() : '';
|
|
|
|
try {
|
|
appData.push({
|
|
event: 'pageLoad',
|
|
page: pageData.page,
|
|
visitor: pageData.visitor,
|
|
content: pageData.content
|
|
})
|
|
} catch(e) {
|
|
console.warn("There was an error loading or running Adobe DTM: ", e);
|
|
}
|
|
</script>
|
|
<script nomodule src="https://sdfestaticassets-eu-west-1.sciencedirectassets.com/shared-assets/73/js/core-js/3.20.2/core-js.es.minified.js" type="980a3173744142363f9804a3-text/javascript"></script>
|
|
<script src="https://sdfestaticassets-eu-west-1.sciencedirectassets.com/shared-assets/100/js/react/16.14.0/react.production.min.js" type="980a3173744142363f9804a3-text/javascript"></script>
|
|
<script src="https://sdfestaticassets-eu-west-1.sciencedirectassets.com/shared-assets/100/js/react-dom/16.14.0/react-dom.production.min.js" type="980a3173744142363f9804a3-text/javascript"></script>
|
|
<script src="https://sdfestaticassets-eu-west-1.sciencedirectassets.com/prod/99e6b7efc6d7603db501d4cc94a9fb642a5bbddd/arp.js" async type="980a3173744142363f9804a3-text/javascript"></script>
|
|
<script type="980a3173744142363f9804a3-text/javascript">
|
|
const pendoData = {"visitor":{"pageName":"SD:product:journal:article","pageType":"CP-CA","pageProduct":"SD","pageLanguage":"en","pageEnvironment":"prod","accessType":"ae:ANON_GUEST","countryCode":"IR"},"account":{"id":"ae:228598","name":"ae:ScienceDirect Guests"},"events":{}};;
|
|
pendoData.events = {
|
|
ready: function () {
|
|
pendo.addAltText();
|
|
},
|
|
};
|
|
function runPendo(data, options) {
|
|
const {
|
|
firstDelay,
|
|
maxRetries,
|
|
urlPrefix,
|
|
urlSuffix,
|
|
apiKey
|
|
} = options;
|
|
(function (apiKey) {
|
|
(function (p, e, n, d, o) {
|
|
var v, w, x, y, z;
|
|
o = p[d] = p[d] || {};
|
|
o._q = [];
|
|
v = ['initialize', 'identify', 'updateOptions', 'pageLoad'];
|
|
for (w = 0, x = v.length; w < x; ++w) (function (m) {
|
|
o[m] = o[m] || function () {
|
|
o._q[m === v[0] ? 'unshift' : 'push']([m].concat([].slice.call(arguments, 0)));
|
|
};
|
|
})(v[w]);
|
|
y = e.createElement(n);
|
|
y.async = !0;
|
|
y.src = urlPrefix + apiKey + urlSuffix;
|
|
z = e.getElementsByTagName(n)[0];
|
|
z.parentNode.insertBefore(y, z);
|
|
})(window, document, 'script', 'pendo');
|
|
pendo.addAltText = function () {
|
|
var target = document.querySelector('body');
|
|
var observer = new MutationObserver(function (mutations) {
|
|
mutations.forEach(function (mutation) {
|
|
if (mutation?.addedNodes?.length) {
|
|
if (mutation.addedNodes[0]?.className?.includes("_pendo-badge")) {
|
|
const badge = mutation.addedNodes[0];
|
|
const altText = badge?.attributes['aria-label'].value ? badge?.attributes['aria-label'].value : 'Feedback';
|
|
const pendoBadgeImage = pendo.dom(`#${badge?.attributes?.id.value} img`);
|
|
if (pendoBadgeImage.length) {
|
|
pendoBadgeImage[0]?.setAttribute('alt', altText);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
});
|
|
var config = {
|
|
attributeFilter: ['data-layout'],
|
|
attributes: true,
|
|
childList: true,
|
|
characterData: true,
|
|
subtree: false
|
|
};
|
|
observer.observe(target, config);
|
|
};
|
|
})(apiKey);
|
|
(function watchAndSetPendo(nextDelay, retryAttempt) {
|
|
if (typeof pageDataTracker === 'object' && typeof pageDataTracker.getVisitorId === 'function' && pageDataTracker.getVisitorId()) {
|
|
data.visitor.id = pageDataTracker.getVisitorId();
|
|
console.debug(`initializing pendo`);
|
|
pendo.initialize(data);
|
|
} else {
|
|
if (retryAttempt > 0) {
|
|
return setTimeout(function () {
|
|
watchAndSetPendo(nextDelay * 2, retryAttempt - 1);
|
|
}, nextDelay);
|
|
}
|
|
pendo.initialize(data);
|
|
console.debug(`gave up ... pendo initialized`);
|
|
}
|
|
})(firstDelay, maxRetries);
|
|
}
|
|
runPendo(pendoData, {
|
|
firstDelay: 100,
|
|
maxRetries: 5,
|
|
urlPrefix: 'https://cdn.pendo.io/agent/static/',
|
|
urlSuffix: '/pendo.js',
|
|
apiKey: 'd6c1d995-bc7e-4e53-77f1-2ea4ecbb9565',
|
|
});
|
|
</script>
|
|
<span id="pendo-answer-rating"></span>
|
|
<script type="text/x-mathjax-config">
|
|
MathJax.Hub.Config({
|
|
displayAlign: 'left',
|
|
"fast-preview": {
|
|
disabled: true
|
|
},
|
|
CommonHTML: { linebreaks: { automatic: true } },
|
|
PreviewHTML: { linebreaks: { automatic: true } },
|
|
'HTML-CSS': { linebreaks: { automatic: true } },
|
|
SVG: {
|
|
scale: 90,
|
|
linebreaks: { automatic: true }
|
|
}
|
|
});
|
|
</script>
|
|
<script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=MML_SVG" type="980a3173744142363f9804a3-text/javascript"></script>
|
|
<script async src="https://www.googletagservices.com/tag/js/gpt.js" type="980a3173744142363f9804a3-text/javascript"></script>
|
|
<script async src="https://scholar.google.com/scholar_js/casa.js" type="980a3173744142363f9804a3-text/javascript"></script>
|
|
<script type="980a3173744142363f9804a3-module" src="https://static.mendeley.com/view-pdf-component/0.8.9/dist/view-pdf-element.js" crossorigin="anonymous" async></script>
|
|
<script data-cfasync="false">
|
|
(function initOneTrust() {
|
|
const monitor = {
|
|
init: () => {},
|
|
loaded: () => {},
|
|
};
|
|
function enableGroup(group) {
|
|
document.querySelectorAll(`script[type*="ot-${group}"]`).forEach(script => {
|
|
script.type = 'text/javascript';
|
|
document.head.appendChild(script);
|
|
});
|
|
}
|
|
function runOneTrustCookies(doClear, monitor) {
|
|
const oneTrustConsentSdkId = 'onetrust-consent-sdk';
|
|
const emptyNodeSelectors = 'h3.ot-host-name, h4.ot-host-desc, button.ot-host-box';
|
|
const ariaLabelledByButtonNodes = 'div.ot-accordion-layout > button';
|
|
const ariaAttribute = 'aria-labelledby';
|
|
function adjustOneTrustDOM() {
|
|
const oneTrustRoot = document.getElementById('onetrust-consent-sdk');
|
|
|
|
/* remove empty nodes */
|
|
[...(oneTrustRoot?.querySelectorAll(emptyNodeSelectors) ?? [])].filter(e => e.textContent === '').forEach(e => e.remove());
|
|
|
|
/* remove invalid aria-labelledby values */
|
|
oneTrustRoot?.querySelectorAll(ariaLabelledByButtonNodes).forEach(e => {
|
|
const presentIdValue = e.getAttribute(ariaAttribute)?.split(' ').filter(label => document.getElementById(label)).join(' ');
|
|
if (presentIdValue) {
|
|
e.setAttribute(ariaAttribute, presentIdValue);
|
|
}
|
|
});
|
|
}
|
|
function observeOneTrustLoaded(shouldSetOTDefaults, isConsentPresent) {
|
|
const cb = (mutationList, observer) => {
|
|
const oneTrustRoot = mutationList.filter(mutationRecord => mutationRecord.type === 'childList' && mutationRecord.addedNodes.length).map(mutationRecord => [...mutationRecord.addedNodes]).flat().find(e => e.id === oneTrustConsentSdkId);
|
|
if (oneTrustRoot && typeof OneTrust !== 'undefined') {
|
|
monitor.loaded(true);
|
|
OneTrust.OnConsentChanged(() => {
|
|
const perfAllowed = decodeURIComponent(document.cookie.match('(^| )OptanonConsent=([^;]+)')?.[2])?.match('groups=([0-9:0|1,?]+)&?')?.[1]?.match('2:([0|1])')[1] === '1';
|
|
if (perfAllowed) {
|
|
enableGroup('performance');
|
|
}
|
|
});
|
|
if (!isConsentPresent && (shouldSetOTDefaults || OneTrust.GetDomainData().ConsentModel.Name === 'implied consent')) {
|
|
OneTrust.AllowAll();
|
|
}
|
|
document.dispatchEvent(new CustomEvent('@sdtech/onetrust/loaded', {}));
|
|
observer.disconnect();
|
|
adjustOneTrustDOM();
|
|
}
|
|
};
|
|
const observer = new MutationObserver(cb);
|
|
observer.observe(document.querySelector('body'), {
|
|
childList: true
|
|
});
|
|
}
|
|
if (doClear) {
|
|
document.cookie = 'OptanonAlertBoxClosed=; expires=Thu, 01 Jan 1970 00:00:00 UTC; samesite=lax; path=/';
|
|
}
|
|
const isConsentPresent = !!decodeURIComponent(document.cookie.match('(^| )OptanonConsent=([^;]+)')?.[2])?.match('groups=([0-9:0|1,?]+)&?')?.[1];
|
|
const shouldSetOTDefaults = 'true' === 'false' && !document.cookie?.match('OptanonAlertBoxClosed=');
|
|
if (shouldSetOTDefaults) {
|
|
const date = new Date();
|
|
date.setFullYear(date.getFullYear() + 1);
|
|
document.cookie = `OptanonAlertBoxClosed=${new Date().toISOString()}; expires=${date.toUTCString()}; samesite=lax; path=/; domain=sciencedirect.com`;
|
|
}
|
|
observeOneTrustLoaded(shouldSetOTDefaults, isConsentPresent, monitor);
|
|
window.addOTScript = () => {
|
|
const otSDK = document.createElement('script');
|
|
otSDK.setAttribute('data-cfasync', 'false');
|
|
otSDK.setAttribute('src', 'https://cdn.cookielaw.org/scripttemplates/otSDKStub.js');
|
|
otSDK.setAttribute('data-document-language', 'true');
|
|
otSDK.setAttribute('data-domain-script', '865ea198-88cc-4e41-8952-1df75d554d02');
|
|
window.addOTScript = () => {};
|
|
document.head.appendChild(otSDK);
|
|
monitor.init();
|
|
};
|
|
window.addEventListener('load', () => window.addOTScript());
|
|
}
|
|
if (document.location.host.match(/.sciencedirect.com$/)) {
|
|
runOneTrustCookies(true, monitor);
|
|
}
|
|
else {
|
|
window.addEventListener('load', (event) => {
|
|
enableGroup('performance');
|
|
});
|
|
}
|
|
}());
|
|
</script>
|
|
<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="980a3173744142363f9804a3-|49" defer></script></body>
|
|
</html> |