1function h(t){if(typeof t=="number"&&Number.isFinite(t))return t;if(typeof t=="string"&&t.trim()!==""){const e=Number(t);return Number.isFinite(e)?e:null}return null}function y(t){const e=(t||"").toLowerCase();return e?e==="ok"?"Strong match â account named":e==="stub_ml"||e==="stub"?"Opened before live detection â re-run Decode to try naming an account":e==="no_candidate"?"No account mark found in this copy":e==="margin_below_threshold"?"Signal too weak to name an account safely":e==="not_in_subscriber_db"?"Mark found, but it is not on your account list":"Not confident enough to name an account":"Not enough signal to name an account"}function C(t,e,a){var u;if(a)return a;if(e)return"ok";if(!t||typeof t!="object")return null;const r=t.extra||((u=t.bundle)==null?void 0:u.extra)||null,o=t.gate||(r==null?void 0:r.gate)||null;if(o&&typeof o.reason=="string")return o.reason;const n=t.bundle||t,l=t.video_decode||t.video||n.video_decode||n.video||{},s=l.accusation;return s&&typeof s.reason=="string"?s.reason:l.mode==="stub"||t.mode==="stub"?"stub_ml":null}function P(t,e){var b,k,g;if(!t||typeof t!="object")return e?[{ok:!0,text:"Trace found a strong enough match to name an account"}]:[{ok:!1,text:"Not enough signal to name an account confidently"}];const a=[],r=t.bundle||t,o=r.video_decode||r.video||t.video_decode||t.video||{};if(o.mode==="stub"||t.mode==="stub")return a.push({ok:!1,text:"This case used demo detection â no account can be named from these saved results"}),a;const n=h(o.joint_margin)??h(t.joint_margin)??h(t.margin);n!=null&&a.push({ok:n>=.15||e,text:n>=.25?"Signal strength looks strong":n>=.15?"Signal strength is moderate":"Signal strength is weak"});const l=r.extra||t.extra||{},s=l.decode_channel||o.decode_channel||null,u=String((s==null?void 0:s.detect_mode)||o.detect_mode||t.detect_mode||"").toLowerCase();if(u==="trustmark")a.push({ok:!0,text:"Channel: TrustMark still photo (digital JPEG path)"});else if(u==="screen_capture"||u==="phone"){const c=String((s==null?void 0:s.phone_channel)||((b=o.screen_quad)==null?void 0:b.channel)||"");a.push({ok:e,text:c?`Channel: phone-of-screen decode (${c}) â lab-gated claim`:"Channel: phone-of-screen decode â lab-gated claim"})}else if(u==="global"||u){const c=String((s==null?void 0:s.decode_path)||o.decode_path||"");a.push({ok:e||!!c,text:c?`Channel: VideoSeal digital (${c})`:"Channel: VideoSeal digital video"})}const d=l.attack_signature||o.attack_signature;d&&typeof d.plain=="string"&&d.plain&&a.push({ok:String(d.primary||"")!=="inconclusive",text:String(d.plain)});const p=l.capture_quality||o.capture_quality;if(p&&typeof p.hint=="string"&&p.hint){const c=h(p.score);a.push({ok:c==null||c>=.4,text:p.hint})}const S=t.crc_ok===!0||t.checksum_ok===!0||o.crc_ok===!0||typeof t.crc=="string"&&t.crc.toLowerCase()==="ok",T=t.crc_ok===!1||t.checksum_ok===!1;S?a.push({ok:!0,text:"Checksum looks OK"}):T&&a.push({ok:!1,text:"Checksum did not line up"}),t.on_roster===!0||t.subscriber_active===!0||t.roster_hit===!0||e&&t.accused_watermark_id!=null?a.push({ok:!0,text:"Matched ID is on your account list"}):t.on_roster===!1&&a.push({ok:!1,text:"Matched ID is not on your account list"});const f=C(t,e);f&&f!=="ok"&&!a.some(c=>!c.ok)&&a.push({ok:!1,text:y(f)});const i=t.corner_scrub||((k=t.extra)==null?void 0:k.corner_scrub)||((g=r.extra)==null?void 0:g.corner_scrub)||o.corner_scrub;if(i&&typeof i=="object"){const c=String(i.status||""),_=typeof i.note=="string"&&i.note?i.note:c==="altered"?"Corner mark region looks altered vs marked copy":c==="consistent"?"Corner region still consistent with marked copy":null;_&&c!=="unavailable"&&a.push({ok:c==="consistent",text:_})}return a.length||a.push(e?{ok:!0,text:"Trace found a strong enough match to name an account"}:{ok:!1,text:"Not enough signal to name an account confidently"}),a}function U(t,e,a,r,o){const n=["CreatorSense Trace â case summary",`Case: ${t}`,""];return o!=null&&o.createdAt&&n.push(`Opened: ${o.createdAt}`),a&&e?n.push(`Result: This content matches account â${e}â â the delivery account this copy was prepared for (not a legal identity; one login can be shared).`):n.push(`Result: ${y(o==null?void 0:o.gateReason)}`),r&&n.push(`Source: ${r}`),n.push("","Trace attributes digital copies. It does not lock files or remove reuploads."),n.join(` 2`)}const m=[{id:"onlyfans",label:"OnlyFans",salutation:"Dear OnlyFans Trust & Safety team,",supportUrl:"https://onlyfans.com/help",mailto:"[email protected]"},{id:"fansly",label:"Fansly",salutation:"Dear Fansly Support / Legal team,",supportUrl:"https://help.fansly.com/en/",mailto:"[email protected]"},{id:"loyalfans",label:"LoyalFans",salutation:"Dear LoyalFans Support / Trust & Safety team,",supportUrl:"https://loyalfans.zendesk.com/hc/en-us/requests/new",mailto:"[email protected]"},{id:"patreon",label:"Patreon",salutation:"Dear Patreon Trust & Safety team,",supportUrl:"https://support.patreon.com/hc/en-us/requests/new",mailto:null},{id:"manyvids",label:"ManyVids",salutation:"Dear ManyVids Support team,",supportUrl:"https://www.manyvids.com/Help/",mailto:null},{id:"custom",label:"Other / custom",salutation:"Dear Support team,",supportUrl:null,mailto:null}],$=["Attach the evidence ZIP you just downloaded.","Paste the platform letter from your clipboard into the support form or email.","Submit on their form â Trace prepares the pack; it does not file the ticket for you."],R="https://stopncii.org/",N=["Open StopNCII.org and create a free account (or use a participating partner portal).","Upload the leaked file there â hashing happens on your device; StopNCII does not keep your media.","Participating platforms (Meta, TikTok, Reddit, Pornhub, OnlyFans, and others) can block re-uploads that match the hash.","Keep your Trace evidence ZIP â StopNCII slows re-spread; it does not take down copies already online."];function w(t){return m.find(e=>e.id===t)||m[m.length-1]}function D(t,e){const a=w(t);if(a.supportUrl)return window.open(a.supportUrl,"_blank","noopener,noreferrer"),!0;if(a.mailto){const r=encodeURIComponent((e==null?void 0:e.subject)||"Creator leak report â Trace evidence"),o=encodeURIComponent(((e==null?void 0:e.letterBody)||"").slice(0,1800));return window.open(`mailto:${a.mailto}?subject=${r}&body=${o}
2`,"_blank"),!0}return!1}function I(t){switch((t||"").toLowerCase()){case"fansly":return"Fansly Help Center ticket â content theft / redistribution / copyright, or email [email protected] ([email protected] for copyright). Paste this letter and attach the evidence ZIP.";case"loyalfans":return"LoyalFans Zendesk form (content / AUP), or email [email protected] / [email protected]. On-platform copyright: [email protected]. Paste this letter and attach the evidence ZIP.";case"onlyfans":return"OnlyFans Help Center â report / copyright, or email [email protected]. Paste this letter and attach the evidence ZIP.";default:return"Open that platformâs support form, paste this letter, and attach the evidence ZIP."}}function F(t){var n,l;const e=w(t.platformId),a=!!(t.gatePassed&&t.fanLabel),r=a?t.fanLabel:null,o=[e.salutation,"","I am writing to report a leak of my paid content and to request enforcement under your creator policies.","","This package was prepared with CreatorSense Trace (forensic attribution). It is not a DMCA takedown filing and Trace does not remove content from the open web.","","Case details",`⢠Case ID: ${t.caseId}`,`⢠Platform addressed: ${e.label}`];if(t.createdAt&&o.push(`⢠Case opened: ${t.createdAt}`),t.creatorDisplayName&&o.push(`⢠Creator account name (as known to you): ${t.creatorDisplayName}`),a&&r?o.push(`⢠Matched account (my label / handle on my roster): ${r}`,"⢠Attribution: Trace matched this file to the marked copy prepared for that account (confidence checks passed). One platform login can be used by more than one person â Trace names the account, not a legal identity."):o.push("⢠Matched account: none â Trace will not name an account without a strong match.",`⢠Note: ${y(t.gateReason)}`),t.sourceUrl&&o.push(`⢠Leak URL / source submitted: ${t.sourceUrl}`),(n=t.bullets)!=null&&n.length){o.push("","Authenticity checks from Trace:");for(const s of t.bullets)o.push(`⢠[${s.ok?"ok":"weak"}] ${s.text}`)}return o.push("","How I am submitting this on your platform",`⢠${I(t.platformId)}`),e.supportUrl&&o.push(`⢠Help / ticket URL: ${e.supportUrl}`),e.mailto&&o.push(`⢠Email (if preferred): ${e.mailto}`),o.push("","Attachments","⢠Trace platform support pack (custody hashes + accusation status)","⢠Trace evidence ZIP for this case (hashes, custody notes, and redacted or full summary as applicable).","","Requested actions","1. Review the attached evidence against the subscriber account named above (when an account is named).","2. Take the enforcement steps available under your terms (restrict, ban, or other account action).","3. Confirm receipt if your process allows.","","I remain available to provide additional context. Thank you for your help protecting creators on your platform.","","Kind regards,",((l=t.creatorDisplayName)==null?void 0:l.trim())||"[Your creator name]","","â","Generated by CreatorSense Trace. Not legal advice. For search scrubbing use a separate DMCA/takedown service."),o.join(` 3`)}function O(t){const e=(t||"").toLowerCase();return e.includes("upload the file")||e.includes("upload_fallback")||e.includes("fetch_failed")||e.includes("host not")||e.includes("lead_allowed")||e.includes("telegram")||e.includes("disallowed content-type")||e.includes("yt-dlp")||e.includes("could not fetch")||e.includes("fetch leak")||e.includes("only http")}export{$ as G,N as S,m as T,C as a,R as b,U as c,P as e,y as g,O as i,D as o,F as p,w as r};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.