Tiêu dùng

Sách Làm Giàu Từ Chứng Khoán (William O’Neil) – Cẩm Nang Đầu Tư Hàng Đầu

(function(firebaseConfig, initialAuthToken, appId) {
window.__firebase_config = firebaseConfig;
window.__initial_auth_token = initialAuthToken;
window.__app_id = appId;
})(“n{n “apiKey”: “AIzaSyCqyCcs2R2e7AegGjvFAwG98wlamtbHvZY”,n “authDomain”: “bard-frontend.firebaseapp.com”,n “projectId”: “bard-frontend”,n “storageBucket”: “bard-frontend.firebasestorage.app”,n “messagingSenderId”: “175205271074”,n “appId”: “1:175205271074:web:2b7bd4d34d33bf38e6ec7b”n}n”,”eyJhbGciOiJSUzI1NiIsImtpZCI6IjExNjRiNzdiNDMzZDdhMDAyMWI4NjE4YjhjYTU3ZTMyZGI5MWUxMTMiLCJ0eXAiOiJKV1QifQ.eyJzdWIiOiJmaXJlYmFzZS1hZG1pbnNkay1mYnN2Y0BiYXJkLWZyb250ZW5kLmlhbS5nc2VydmljZWFjY291bnQuY29tIiwiYXVkIjoiaHR0cHM6Ly9pZGVudGl0eXRvb2xraXQuZ29vZ2xlYXBpcy5jb20vZ29vZ2xlLmlkZW50aXR5LmlkZW50aXR5dG9vbGtpdC52MS5JZGVudGl0eVRvb2xraXQiLCJ1aWQiOiIwOTkyMDU1MDE0NzUzNjUxNTA1MiIsImlzcyI6ImZpcmViYXNlLWFkbWluc2RrLWZic3ZjQGJhcmQtZnJvbnRlbmQuaWFtLmdzZXJ2aWNlYWNjb3VudC5jb20iLCJjbGFpbXMiOnsiYXBwSWQiOiJjXzVmYmFhNWY0NzQyNDcwOWRfY29tYm8tMy1zYWNoLWNodW5nLWtob2FuLWNhbnNsaW0uaHRtbC03MDQifSwiZXhwIjoxNzg5NTQ5MzMyLCJpYXQiOjE3ODk1NDU3MzIsImFsZyI6IlJTMjU2In0.f7LeENNkKZOD0wh3o6vw9viyVOhpNOvo1IIzBpwUKt3OmJh8fPGHHAy3gB93MtzcGnb44RsSI4n9XHXvix2QGq6MT0wd4nXf7AoguErhJhLq-LG-SvsXwBb_SDOAqhkRTW-tTpAkK-BH-2c8lezDwqGG3GXrij4PP9eh1uc_k38x9V2C3hrB0cqZ3GMPRZw6BW2NgCB1I1YcuLQNeMUQz3Q33GODIdOracbYDVx9IA35A3U_WyENBY9UQvuwWbdfHXgs2qr_B_5dNhfgw6yN3AGpFAE-7Fny0kJJjFPPUVp82wA3yKpV106574SVbRSVklwtJkvwu5QLGq4LKuTn3Q”,”c_5fbaa5f47424709d_combo-3-sach-chung-khoan-canslim.html-704″)
document.addEventListener(‘input’, (event) => {
if (event.target && (event.target.isContentEditable || event.target.hasAttribute(‘contenteditable’))) {
const clonedDoc = document.cloneNode(true);
const injectedScripts = clonedDoc.querySelectorAll(‘[data-bard-client-injected=”true”]’);
injectedScripts.forEach(el => el.remove());
window.parent.postMessage({
type: ‘inlineEdit’,
html: ‘n’ + clonedDoc.documentElement.outerHTML
}, ‘*’);
}
});
(function(){‘use strict’;window.addEventListener(“message”,a=>{a.data&&a.data.type===”SUPPLEMENTAL_DATA_UPDATE”&&window.dispatchEvent(new CustomEvent(“supplementaldataupdate”,{detail:a.data.data}))});}).call(this);
(function(){‘use strict’;var h=typeof Object.defineProperties==”function”?Object.defineProperty:function(a,c,d){if(a==Array.prototype||a==Object.prototype)return a;a[c]=d.value;return a};function l(a){a=[“object”==typeof globalThis&&globalThis,a,”object”==typeof window&&window,”object”==typeof self&&self,”object”==typeof global&&global];for(var c=0;c<a.length;++c){var d=a[c];if(d&&d.Math==Math)return d}throw Error("Cannot find global object");}var n=l(this);
function p(a,c){if(c)a:{var d=n;a=a.split(".");for(var b=0;b<a.length-1;b++){var e=a[b];if(!(e in d))break a;d=d[e]}a=a[a.length-1];b=d[a];c=c(b);c!=b&&c!=null&&h(d,a,{configurable:!0,writable:!0,value:c})}}function r(a){function c(b){return a.next(b)}function d(b){return a.throw(b)}return new Promise(function(b,e){function f(g){g.done?b(g.value):Promise.resolve(g.value).then(c,d).then(f,e)}f(a.next())})}function t(a){return r(a())}
p("Object.values",function(a){return a?a:function(c){var d=[],b;for(b in c)Object.prototype.hasOwnProperty.call(c,b)&&d.push(c[b]);return d}});p("Array.prototype.includes",function(a){return a?a:function(c,d){var b=this;b instanceof String&&(b=String(b));var e=b.length;d=d||0;for(d<0&&(d=Math.max(d+e,0));d{d[e]=b[e]})};var v=(()=>{var a=0;return()=>{a+=1;return`u${`0000${(Math.random()*1679616<<0).toString(36)}`.slice(-4)}${a}`}})();function w(a){var c=[];for(let d=0,b=a.length;d{var b=new Image;b.onload=()=>{b.decode().then(()=>{requestAnimationFrame(()=>c(b))})};b.onerror=d;b.crossOrigin=”anonymous”;b.decoding=”async”;b.src=a})}
function C(a){return t(function*(){return Promise.resolve().then(()=>(new XMLSerializer).serializeToString(a)).then(encodeURIComponent).then(c=>`data:image/svg+xml;charset=utf-8,${c}`)})}
function D(a,c,d){return t(function*(){var b=document.createElementNS(“http://www.w3.org/2000/svg”,”svg”),e=document.createElementNS(“http://www.w3.org/2000/svg”,”foreignObject”);b.setAttribute(“width”,`${c}`);b.setAttribute(“height”,`${d}`);b.setAttribute(“viewBox”,`0 0 ${c} ${d}`);e.setAttribute(“width”,”100%”);e.setAttribute(“height”,”100%”);e.setAttribute(“x”,”0″);e.setAttribute(“y”,”0″);e.setAttribute(“externalResourcesRequired”,”true”);b.appendChild(e);e.appendChild(a);return C(b)})}
var E=(a,c)=>{if(a instanceof c)return!0;a=Object.getPrototypeOf(a);return a===null?!1:a.constructor.name===c.name||E(a,c)};function aa(a,c){return y(c).map(d=>{var b=a.getPropertyValue(d),e=a.getPropertyPriority(d);return`${d}: ${b}${e?” !important”:””};`}).join(” “)}
function F(a,c,d,b){a=window.getComputedStyle(a,d);var e=a.getPropertyValue(“content”);if(e!==””&&e!==”none”){var f=v();try{c.className=`${c.className} ${f}`}catch(k){return}e=document.createElement(“style”);var g=e.appendChild;d=`.${f}:${d}`;a.cssText?(b=a.getPropertyValue(“content”),b=`${a.cssText} content: ‘${b.replace(/’|”/g,””)}’;`):b=aa(a,b);g.call(e,document.createTextNode(`${d}{${b}}`));c.appendChild(e)}};function G(a){return a.search(/^(data:)/)!==-1}function H(a,c,d){return t(function*(){var b=yield fetch(a,c);if(b.status===404)throw Error(`Resource “${b.url}” not found`);var e=yield b.blob();return new Promise((f,g)=>{var k=new FileReader;k.onerror=g;k.onloadend=()=>{try{f(d({A:b,result:k.result}))}catch(m){g(m)}};k.readAsDataURL(e)})})}const I={};function ba(a,c,d){var b=a.replace(/?.*/,””);d&&(b=a);/ttf|otf|eot|woff2?/i.test(b)&&(b=b.replace(/.*//,””));return c?`[${c}]${b}`:b}
function J(a,c,d){return t(function*(){var b=ba(a,c,d.G);if(I[b]!=null)return I[b];d.C&&(a+=(/?/.test(a)?”&”:”?”)+(new Date).getTime());try{let f=yield H(a,d.l,({A:g,result:k})=>{c||(c=g.headers.get(“Content-Type”)||””);return k.split(/,/)[1]});var e=`data:${c};base64,${f}`}catch(f){e=d.o||””}return I[b]=e})};const K={R:”application/font-woff”,S:”application/font-woff”,O:”application/font-truetype”,D:”application/vnd.ms-fontobject”,J:”image/png”,I:”image/jpeg”,H:”image/jpeg”,F:”image/gif”,N:”image/tiff”,M:”image/svg+xml”,P:”image/webp”};function L(a){return(a=/.([^./]*?)$/g.exec(a))?a[1]:””};function ca(a){return t(function*(){var c=a.toDataURL();return c===”data:,”?a.cloneNode(!1):B(c)})}function da(a,c){return t(function*(){if(a.currentSrc){var d=document.createElement(“canvas”);let b=d.getContext(“2d”);d.width=a.clientWidth;d.height=a.clientHeight;b==null||b.drawImage(a,0,0,d.width,d.height);d=d.toDataURL();return B(d)}d=a.poster;d=yield J(d,K[L(d).toLowerCase()]||””,c);return B(d)})}
function ea(a,c){return t(function*(){try{let d;if(a==null?0:(d=a.contentDocument)==null?0:d.body)return yield M(a.contentDocument.body,c,!0)}catch(d){}return a.cloneNode(!1)})}function fa(a,c){return t(function*(){return E(a,HTMLCanvasElement)?ca(a):E(a,HTMLVideoElement)?da(a,c):E(a,HTMLIFrameElement)?ea(a,c):a.cloneNode(a.tagName!=null&&a.tagName.toUpperCase()===”SVG”)})}
function ha(a,c,d){return t(function*(){if(c.tagName!=null&&c.tagName.toUpperCase()===”SVG”)return c;var b=[];if(a.tagName!=null&&a.tagName.toUpperCase()===”SLOT”&&a.assignedNodes)b=w(a.assignedNodes());else{let e;if(E(a,HTMLIFrameElement)&&((e=a.contentDocument)==null?0:e.body))b=w(a.contentDocument.body.childNodes);else{let f;b=w(((f=a.shadowRoot)!=null?f:a).childNodes)}}if(b.length===0||E(a,HTMLVideoElement))return c;yield b.reduce((e,f)=>e.then(()=>M(f,d)).then(g=>{g&&c.appendChild(g)}),Promise.resolve());
return c})}function ia(a,c,d){var b=c.style;if(b){var e=window.getComputedStyle(a);e.cssText?(b.cssText=e.cssText,b.transformOrigin=e.transformOrigin):y(d).forEach(f=>{var g=e.getPropertyValue(f);f===”font-size”&&g.endsWith(“px”)&&(g=`${Math.floor(parseFloat(g.substring(0,g.length-2)))-.1}px`);E(a,HTMLIFrameElement)&&f===”display”&&g===”inline”&&(g=”block”);f===”d”&&c.getAttribute(“d”)&&(g=`path(${c.getAttribute(“d”)})`);b.setProperty(f,g,e.getPropertyPriority(f))})}}
function ja(a,c){E(a,HTMLSelectElement)&&(c=Array.from(c.children).find(d=>a.value===d.getAttribute(“value”)))&&c.setAttribute(“selected”,””)}
function ka(a,c){return t(function*(){var d=a.querySelectorAll?a.querySelectorAll(“use”):[];if(d.length===0)return a;var b={};for(var e=0;e<d.length;e++){var f=d[e].getAttribute("xlink:href");if(f){let g=document.querySelector(f);a.querySelector(f)||!g||b[f]||(b[f]=yield M(g,c,!0))}}d=Object.values(b);if(d.length){b=document.createElementNS("http://www.w3.org/1999/xhtml","svg");b.setAttribute("xmlns","http://www.w3.org/1999/xhtml");b.style.position="absolute";b.style.width="0";b.style.height="0";
b.style.overflow="hidden";b.style.display="none";e=document.createElementNS("http://www.w3.org/1999/xhtml","defs");b.appendChild(e);for(f=0;ffa(b,c)).then(b=>ha(a,b,c)).then(b=>{E(b,Element)&&(ia(a,b,c),F(a,b,”:before”,c),F(a,b,”:after”,c),E(a,HTMLTextAreaElement)&&(b.textContent=a.value),E(a,HTMLInputElement)&&b.setAttribute(“value”,a.value),ja(a,b));return b}).then(b=>ka(b,c)):null})};const N=/url(([‘”]?)([^'”]+?)1)/g,la=/url([^)]+)s*format(([“‘]?)([^”‘]+)1)/g,ma=/src:s*(?:url([^)]+)s*format([^)]+)[,;]s*)+/g;function na(a){var c=[];a.replace(N,(d,b,e)=>{c.push(e);return d});return c.filter(d=>!G(d))}
function oa(a,c,d,b){return t(function*(){try{let e=d?(new URL(c,d||void 0)).toString():c,f;f=yield J(e,K[L(c).toLowerCase()]||””,b);return a.replace(new RegExp(`(url\([‘”]?)(${c.replace(/([.*+?^${}()|[]/\])/g,”\$1″)})([‘”]?\))`,”g”),`$1${f}$3`)}catch(e){}return a})}function pa(a,{K:c}){return c?a.replace(ma,d=>{for(;;){let [b,,e]=la.exec(d)||[];if(!e)return””;if(e===c)return`src: ${b};`}}):a}
function O(a,c,d){return t(function*(){if(a.search(N)===-1)return a;var b=pa(a,d);return na(b).reduce((e,f)=>e.then(g=>oa(g,f,c,d)),Promise.resolve(b))})};function P(a,c,d){return t(function*(){var b,e=(b=c.style)==null?void 0:b.getPropertyValue(a);return e?(b=yield O(e,null,d),c.style.setProperty(a,b,c.style.getPropertyPriority(a)),!0):!1})}function qa(a,c){return t(function*(){(yield P(“background”,a,c))||(yield P(“background-image”,a,c));(yield P(“mask”,a,c))||(yield P(“-webkit-mask”,a,c))||(yield P(“mask-image”,a,c))||(yield P(“-webkit-mask-image”,a,c))})}
function ra(a,c){return t(function*(){var d=E(a,HTMLImageElement);if(d&&!G(a.src)||E(a,SVGImageElement)&&!G(a.href.baseVal)){var b=d?a.src:a.href.baseVal,e=yield J(b,K[L(b).toLowerCase()]||””,c);yield new Promise((f,g)=>{a.onload=f;a.onerror=c.h?(…k)=>{try{f(c.h(…k))}catch(m){g(m)}}:g;a.decode&&(a.decode=f);a.loading===”lazy”&&(a.loading=”eager”);d?(a.srcset=””,a.src=e):a.href.baseVal=e})}})}
function sa(a,c){return t(function*(){var d=w(a.childNodes).map(b=>Q(b,c));yield Promise.all(d).then(()=>a)})}function Q(a,c){return t(function*(){E(a,Element)&&(yield qa(a,c),yield ra(a,c),yield sa(a,c))})};const R={};function S(a){return t(function*(){var c=R[a];if(c!=null)return c;c=yield(yield fetch(a)).text();c={url:a,cssText:c};return R[a]=c})}function T(a,c){return t(function*(){var d=a.cssText,b=/url([“‘]?([^”‘)]+)[“‘]?)/g,e=(d.match(/url([^)]+)/g)||[]).map(f=>t(function*(){var g=f.replace(b,”$1”);g.startsWith(“https://”)||(g=(new URL(g,a.url)).href);return H(g,c.l,({result:k})=>{d=d.replace(f,`url(${k})`);return[f,k]})}));return Promise.all(e).then(()=>d)})}
function U(a){if(a==null)return[];var c=[];a=a.replace(/(/*[sS]*?*/)/gi,””);for(var d=RegExp(“((@.*?keyframes [\s\S]*?){([\s\S]*?}\s*?)})”,”gi”);;){var b=d.exec(a);if(b===null)break;c.push(b[0])}a=a.replace(d,””);d=/@import[sS]*?url([^)]*)[sS]*?;/gi;for(b=RegExp(“((\s*?(?:\/\*[\s\S]*?\*\/)?\s*?@media[\s\S]*?){([\s\S]*?)}\s*?})|(([\s\S]*?){([\s\S]*?)})”,”gi”);;){let e=d.exec(a);if(e===null)if(e=b.exec(a),e===null)break;else d.lastIndex=b.lastIndex;else b.lastIndex=
d.lastIndex;c.push(e[0])}return c}
function ta(a,c){return t(function*(){var d=[],b=[];a.forEach(e=>{if(“cssRules”in e)try{w(e.cssRules||[]).forEach((f,g)=>{if(f.type===CSSRule.IMPORT_RULE){let k=g+1;f=S(f.href).then(m=>T(m,c)).then(m=>U(m).forEach(q=>{try{e.insertRule(q,q.startsWith(“@import”)?k+=1:e.cssRules.length)}catch(Ia){}})).catch(()=>{});b.push(f)}})}catch(f){let g=a.find(k=>k.href==null)||document.styleSheets[0];e.href!=null&&b.push(S(e.href).then(k=>T(k,c)).then(k=>U(k).forEach(m=>{g.insertRule(m,g.cssRules.length)})).catch(()=>
{}))}});return Promise.all(b).then(()=>{a.forEach(e=>{if(“cssRules”in e)try{w(e.cssRules||[]).forEach(f=>{d.push(f)})}catch(f){}});return d})})}function ua(a){return a.filter(c=>c.type===CSSRule.FONT_FACE_RULE).filter(c=>c.style.getPropertyValue(“src”).search(N)!==-1)}function va(a,c){return t(function*(){if(a.ownerDocument==null)throw Error(“Provided element is not within a Document”);var d=w(a.ownerDocument.styleSheets);d=yield ta(d,c);return ua(d)})}
function wa(a){function c(b){(b.style.fontFamily||getComputedStyle(b).fontFamily).split(“,”).forEach(e=>{d.add(e.trim().replace(/[“‘]/g,””))});Array.from(b.children).forEach(e=>{e instanceof HTMLElement&&c(e)})}var d=new Set;c(a);return d}function xa(a,c){return t(function*(){var d=yield va(a,c),b=wa(a);return(yield Promise.all(d.filter(e=>b.has(e.style.fontFamily.trim().replace(/[“‘]/g,””))).map(e=>O(e.cssText,e.parentStyleSheet?e.parentStyleSheet.href:null,c)))).join(“n”)})}
function ya(a,c){return t(function*(){var d=c.m!=null?c.m:c.B?null:yield xa(a,c);if(d){let b=document.createElement(“style”);b.appendChild(document.createTextNode(d));a.firstChild?a.insertBefore(b,a.firstChild):a.appendChild(b)}})};function za(a,c={}){return t(function*(){var {width:d,height:b}=A(a,c),e=yield M(a,c,!0);yield ya(e,c);yield Q(e,c);u(e,c);return yield D(e,d,b)})}
function Aa(a,c={}){return t(function*(){var {width:d,height:b}=A(a,c),e=yield za(a,c);e=yield B(e);var f=document.createElement(“canvas”),g=f.getContext(“2d”),k=c.v||window.devicePixelRatio||1,m=c.j||d,q=c.i||b;f.width=m*k;f.height=q*k;!c.L&&(f.width>16384||f.height>16384)&&(f.width>16384&&f.height>16384?f.width>f.height?(f.height*=16384/f.width,f.width=16384):(f.width*=16384/f.height,f.height=16384):f.width>16384?(f.height*=16384/f.width,f.width=16384):(f.width*=16384/f.height,f.height=16384));
f.style.width=`${m}`;f.style.height=`${q}`;c.backgroundColor&&(g.fillStyle=c.backgroundColor,g.fillRect(0,0,f.width,f.height));g.drawImage(e,0,0,f.width,f.height);return f})}function Ba(a,c={}){return t(function*(){return(yield Aa(a,c)).toDataURL()})};const Ca=[“gemini.google.com”,”corp.google.com”,”proxy.googlers.com”];function V(){return document.body.querySelectorAll(‘[class*=”animate”]’).length>0}function W(a,c){var d=document.createElement(“canvas”);d.width=a;d.height=c;return d.toDataURL(“image/png”)}const X=W(1,1);
function Da(a){a=a.querySelectorAll(“svg, svg *”);var c=[];for(let b of Array.from(a)){if(!(b instanceof SVGElement))continue;a=window.getComputedStyle(b);let e=b.getAttribute(“style”);a.fill&&(b.style.fill=a.fill);a.stroke&&(b.style.stroke=a.stroke);a.strokeWidth&&(b.style.strokeWidth=a.strokeWidth);a.strokeDasharray&&(b.style.strokeDasharray=a.strokeDasharray);a.strokeLinecap&&(b.style.strokeLinecap=a.strokeLinecap);a.strokeLinejoin&&(b.style.strokeLinejoin=a.strokeLinejoin);a.strokeOpacity&&(b.style.strokeOpacity=
a.strokeOpacity);a.fillOpacity&&(b.style.fillOpacity=a.fillOpacity);a.opacity&&(b.style.opacity=a.opacity);a.transform&&a.transform!==”none”&&(b.style.transform=a.transform);var d=b.tagName.toLowerCase();if(d===”text”||d===”tspan”||d===”textpath”){a.fontFamily&&(b.style.fontFamily=a.fontFamily);a.fontSize&&(b.style.fontSize=a.fontSize);a.fontWeight&&(b.style.fontWeight=a.fontWeight);a.fontStyle&&(b.style.fontStyle=a.fontStyle);a.letterSpacing&&(b.style.letterSpacing=a.letterSpacing);a.wordSpacing&&
(b.style.wordSpacing=a.wordSpacing);if((d=a.textAnchor||a.getPropertyValue(“text-anchor”))&&d!==”none”){b.style.textAnchor=d;let f=b.getAttribute(“text-anchor”);b.setAttribute(“text-anchor”,d);c.push(()=>{f===null?b.removeAttribute(“text-anchor”):b.setAttribute(“text-anchor”,f)})}if((d=a.dominantBaseline||a.getPropertyValue(“dominant-baseline”))&&d!==”none”){b.style.dominantBaseline=d;let f=b.getAttribute(“dominant-baseline”);b.setAttribute(“dominant-baseline”,d);c.push(()=>{f===null?b.removeAttribute(“dominant-baseline”):
b.setAttribute(“dominant-baseline”,f)})}if((d=a.alignmentBaseline||a.getPropertyValue(“alignment-baseline”))&&d!==”none”){b.style.alignmentBaseline=d;let f=b.getAttribute(“alignment-baseline”);b.setAttribute(“alignment-baseline”,d);c.push(()=>{f===null?b.removeAttribute(“alignment-baseline”):b.setAttribute(“alignment-baseline”,f)})}if(a=a.paintOrder||a.getPropertyValue(“paint-order”))b.style.paintOrder=a}c.push(()=>{e===null?b.removeAttribute(“style”):b.setAttribute(“style”,e)})}return()=>{for(let b of c)b()}}
function Ea(a){a=a.querySelectorAll(“*”);var c=[];for(let b of Array.from(a)){if(!(b instanceof HTMLElement))continue;if(b instanceof SVGElement)continue;a=b.tagName.toLowerCase();if(a===”script”||a===”style”||a===”canvas”||a===”img”||a===”svg”)continue;var d=window.getComputedStyle(b);if(d.display===”none”||d.visibility===”hidden”)continue;if(d.display===”flex”||d.display===”grid”||d.display===”table”)continue;let e;if((e=b.textContent)==null||!e.trim())continue;if(d.whiteSpace.startsWith(“pre”))continue;
if(Array.from(b.children).some(g=>{if(!(g instanceof HTMLElement))return!1;g=window.getComputedStyle(g).display;return g===”block”||g===”flex”||g===”grid”||g===”table”}))continue;d=Number(d.fontSize.replace(“px”,””))||16;let f=b.clientHeight;d=f>0&&f{b.style.whiteSpace=g;b.style.minWidth=k})}}return()=>{for(let b of c)b()}}function Y(){var a=document.body,c=Da(a),d=Ea(a);return()=>{d();c()}}
function Z(a){return t(function*(){var c=Math.max(2,window.devicePixelRatio||1),d=Math.max(a.offsetWidth,1),b=Math.max(a.offsetHeight,1);try{return yield Ba(a,{width:d*c,height:b*c,j:d*c,i:b*c,v:1,style:{transform:`scale(${c})`,transformOrigin:”top left”,width:`${d}px`,height:`${b}px`},B:!0,filter:e=>{if(e.tagName===”IMG”){let f=e.getAttribute(“src”);if(!f||f.trim()===””||e.style.display===”none”)return!1}return!0},o:X,h:()=>X})}catch(e){return W(d*c,b*c)}})}
function Fa(){return t(function*(){var a=document.body.offsetWidth,c=document.body.offsetHeight,d=document.body.cloneNode(!0),b=d.querySelectorAll(‘[class*=”animate”]’);for(let e of Array.from(b))e.classList.remove(…Array.from(e.classList).filter(f=>f.startsWith(“animate”)));d.style.width=`${a}px`;d.style.height=`${c}px`;return d})}
function Ga(a){return t(function*(){var c=Y();try{let d=document.body;if(V()){let e=yield Fa();d=e;document.body.appendChild(e)}let b=yield Z(d);V()&&document.body.removeChild(d);window.parent.postMessage({type:”SEND_SCREENSHOT”,image:b,topOffset:document.documentElement.scrollTop},a.origin)}finally{c()}})}
function Ha(a){return t(function*(){var c=Y();try{let d={type:”SEND_SCREENSHOT_FOR_DATA_VISUALIZATION”,image:yield Z(document.body),topOffset:0};window.parent.postMessage(d,a.origin)}finally{c()}})}window.addEventListener(“message”,a=>t(function*(){if(Ca.some(d=>a.origin.includes(d))){var c=a.data;c&&(c.type===”MAKE_SCREENSHOT”&&(yield Ga(a)),c.type===”MAKE_SCREENSHOT_FOR_DATA_VISUALIZATION”&&(yield Ha(a)))}}));
})();(function() {
// Ensure this script is executed only once
if (window.firebaseAuthBridgeScriptLoaded) {
return;
}
window.firebaseAuthBridgeScriptLoaded = true;

let nextTokenPromiseId = 0;

// Stores { resolve, reject } for ongoing token requests
const pendingTokenPromises = {};

// Listen for messages from the Host Application
window.addEventListener(‘message’, function(event) {

const messageData = event.data;

if (messageData && messageData.type === ‘RESOLVE_NEW_FIREBASE_TOKEN’) {
const { success, token, error, promiseId } = messageData ?? {};
if (pendingTokenPromises[promiseId]) {
if (success) {
pendingTokenPromises[promiseId].resolve(token);
} else {
pendingTokenPromises[promiseId].reject(new Error(error || ‘Token refresh failed from host.’));
}
delete pendingTokenPromises[promiseId];
}
}
});

// Expose a function for the Generated App to request a new Firebase token
window.requestNewFirebaseToken = function() {
const currentPromiseId = nextTokenPromiseId++;
const promise = new Promise((resolve, reject) => {
pendingTokenPromises[currentPromiseId] = { resolve, reject };
});
if (window.parent && window.parent !== window) {
window.parent.postMessage({
type: ‘REQUEST_NEW_FIREBASE_TOKEN’,
promiseId: currentPromiseId
}, ‘*’);
} else {
pendingTokenPromises[currentPromiseId].reject(new Error(‘No parent window to request token from.’));
delete pendingTokenPromises[currentPromiseId];
}
return promise;
};
})();
let realOriginalGetUserMedia = null;
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
realOriginalGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);
}

(function() {
if (navigator.mediaDevices && navigator.mediaDevices.__proto__) {
try {
Object.defineProperty(navigator.mediaDevices.__proto__, ‘getUserMedia’, {
get: function() {
return undefined; // Or throw an error
},
configurable: false
});
} catch (error) {
console.error(“Error defining prototype getter:”, error);
}
}
})();

(function() {
const pendingMediaResolvers = {};
let nextMediaPromiseId = 0;

function requestMediaPermissions(constraints) {
const mediaPromiseId = nextMediaPromiseId++;
const promise = new Promise((resolve, reject) => {
pendingMediaResolvers[mediaPromiseId] = (granted) => {
delete pendingMediaResolvers[mediaPromiseId];
resolve(granted);
};
});

window.parent.postMessage({
type: ‘requestMediaPermission’,
constraints: constraints,
promiseId: mediaPromiseId,
}, ‘*’);

return promise;
}

let originalGetUserMedia = realOriginalGetUserMedia;

function interceptGetUserMedia() {
if (navigator.mediaDevices) {
Object.defineProperty(navigator.mediaDevices, ‘getUserMedia’, {
value: function(constraints) {
return requestMediaPermissions(constraints).then((granted) => {
if (granted) {
if (originalGetUserMedia) {
return originalGetUserMedia(constraints);
} else {
throw new Error(“Original getUserMedia not available.”);
}
} else {
throw new DOMException(‘Permission denied’, ‘NotAllowedError’);
}
});
},
writable: false,
configurable: false
});
}
}

interceptGetUserMedia();

const observer = new MutationObserver(function(mutationsList, observer) {
for (const mutation of mutationsList) {
if (mutation.type === ‘reconfigured’ && mutation.name === ‘getUserMedia’ && mutation.object === navigator.mediaDevices) {
interceptGetUserMedia();
} else if (mutation.type === ‘attributes’ && mutation.attributeName === ‘getUserMedia’ && mutation.target === navigator.mediaDevices) {
interceptGetUserMedia();
} else if (mutation.type === ‘childList’ && mutation.addedNodes) {
mutation.addedNodes.forEach(node => {
if (node === navigator.mediaDevices) {
interceptGetUserMedia();
}
});
}
}
});

function interceptSpeechRecognition() {
if (!window.SpeechRecognition && !window.webkitSpeechRecognition) {
return;
}

const OriginalSpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;

const SpeechRecognitionWrapper = function(…args) {
const recognizer = new OriginalSpeechRecognition(…args);
const originalStart = recognizer.start.bind(recognizer);

recognizer.start = function() {
requestMediaPermissions({ audio: true }).then(granted => {
if (granted) {
originalStart();
} else {
const errorEvent = new SpeechRecognitionErrorEvent(‘error’);
errorEvent.error = ‘not-allowed’; // This is the standard error for permission denial.
recognizer.dispatchEvent(errorEvent);
}
});
};

return recognizer;
};

SpeechRecognitionWrapper.prototype = OriginalSpeechRecognition.prototype;
SpeechRecognitionWrapper.prototype.constructor = SpeechRecognitionWrapper;

if (window.SpeechRecognition) {
window.SpeechRecognition = SpeechRecognitionWrapper;
}
if (window.webkitSpeechRecognition) {
window.webkitSpeechRecognition = SpeechRecognitionWrapper;
}
}

interceptSpeechRecognition();

window.addEventListener(‘message’, function(event) {
if (event.data) {
if (event.data.type === ‘resolveMediaPermission’) {
const { promiseId, granted } = event.data;
if (pendingMediaResolvers[promiseId]) {
pendingMediaResolvers[promiseId](granted);
}
}
}
});

})();(function(){‘use strict’;var u=typeof Object.defineProperties==”function”?Object.defineProperty:function(b,d,e){if(b==Array.prototype||b==Object.prototype)return b;b[d]=e.value;return b};function v(b){b=[“object”==typeof globalThis&&globalThis,b,”object”==typeof window&&window,”object”==typeof self&&self,”object”==typeof global&&global];for(var d=0;d<b.length;++d){var e=b[d];if(e&&e.Math==Math)return e}throw Error("Cannot find global object");}var w=v(this);
function y(b,d){if(d)a:{var e=w;b=b.split(".");for(var h=0;h<b.length-1;h++){var k=b[h];if(!(k in e))break a;e=e[k]}b=b[b.length-1];h=e[b];d=d(h);d!=h&&d!=null&&u(e,b,{configurable:!0,writable:!0,value:d})}}function z(b){function d(h){return b.next(h)}function e(h){return b.throw(h)}return new Promise(function(h,k){function m(n){n.done?h(n.value):Promise.resolve(n.value).then(d,e).then(m,k)}m(b.next())})}y("globalThis",function(b){return b||w});/*

Copyright The Closure Library Authors.
SPDX-License-Identifier: Apache-2.0
*/
function A(b,d){function e(){}e.prototype=d.prototype;b.j=d.prototype;b.prototype=new e;b.prototype.constructor=b;b.h=function(h,k,m){for(var n=Array(arguments.length-2),p=2;p{if(a.data.type===”message”){a=new MessageEvent(“message”,{data:G.decode(a.data.data)});
let f;(f=c.onmessage)==null||f.call(c,a);c.dispatchEvent(a)}}}function n(){if(!t)throw Error(“Control port not captured yet.”);t.onmessage=a=>{switch(a.data.type){case “open”:l=1;var f=new Event(“open”),g;(g=c.onopen)==null||g.call(c,f);c.dispatchEvent(f);q.forEach(H=>{k(H)});q=[];break;case “close”:g=a.data;l=3;g=new CloseEvent(“close”,{code:g.code,reason:g.reason,wasClean:g.wasClean});(f=c.onclose)==null||f.call(c,g);c.dispatchEvent(g);break;case “error”:l=3;f=new Event(“error”);let x;(x=c.onerror)==
null||x.call(c,f);c.dispatchEvent(f)}}}function p(a){return z(function*(){var f=new MessageChannel;t=f.port1;var g=new MessageChannel;r=g.port1;n();m();window.parent.postMessage({type:”websocket_open”,portOrdering:[“control”,”data”],url:b,protocols:a||[],connectionId:I},e,[f.port2,g.port2])}())}var c=Reflect.construct(EventTarget,[],new.target);c.CONNECTING=0;c.OPEN=1;c.CLOSING=2;c.CLOSED=3;c.url=b;c.binaryType=”arraybuffer”;c.protocol=””;c.i=””;var l=0,t=null,r=null,q=[],F=new TextEncoder,G=new TextDecoder;
c.onopen=null;c.onmessage=null;c.onclose=null;c.onerror=null;Object.defineProperty(c,”readyState”,{get:()=>l,enumerable:!0,configurable:!0});Object.defineProperty(c,”bufferedAmount”,{get:()=>{var a=0;q.forEach(f=>{a+=typeof f===”string”?f.length:f.byteLength});return a},enumerable:!0,configurable:!0});var I=function(){var a;return((a=globalThis.crypto)==null?0:a.randomUUID)?globalThis.crypto.randomUUID():”xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx”.replace(/[xy]/g,f=>{var g=Math.random()*16|0;return(f===
“x”?g:g&3|8).toString(16)})}();c.send=a=>{if(l===1)a instanceof Blob?a.arrayBuffer().then(f=>{k(f)}):k(a);else if(l===0)if(typeof a===”string”)q.push(a);else if(a instanceof ArrayBuffer||ArrayBuffer.isView(a))q.push(h(a));else throw Error(“Sending Blob is not supported before the connection is open.”);else console.debug(“WebSocket send called in CLOSING or CLOSED state; ignored.”)};c.close=(a=1E3,f=””)=>{if(l!==2&&l!==3){l=2;a={type:”close”,code:a,reason:f,wasClean:a===1E3};var g;(g=t)==null||g.postMessage(a)}};
Promise.resolve().then(()=>p(d));return c}A(B,EventTarget);var C=document.currentScript,D=C==null?void 0:C.getAttribute(“ws-interception-config”);if(!D)throw Error(“WebSocket Interceptor: Missing ws-interception-config attribute in the script tag.”);var E=JSON.parse(D);if(!E.parentOrigin||typeof E.parentOrigin!==”string”)throw Error(“WebSocket Interceptor: Invalid parentOrigin in ws-interception-config”);
(function(b){var d=Object.getOwnPropertyDescriptor(window,”WebSocket”);if(!d||d.writable||d.configurable)d=Object.assign(function(e,h){try{let k=(new URL(e)).hostname;if(b.proxiedDomains.some(m=>k===m||k.endsWith(`.${m}`)))return new B(e,h,b.parentOrigin)}catch(k){throw window.parent.postMessage({type:”websocket_blocked”,url:e,reason:”blocked_invalid_url”},b.parentOrigin),new DOMException(`WebSocket connection to ‘${e}’ is not allowed in Canvas.`,”SecurityError”);}window.parent.postMessage({type:”websocket_blocked”,
url:e,reason:”blocked_domain_not_allowlisted”},b.parentOrigin);throw new DOMException(`WebSocket connection to ‘${e}’ is not allowed in Canvas.`,”SecurityError”);},{CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3}),Object.defineProperty(window,”WebSocket”,{value:d,writable:!1,configurable:!1})})({proxiedDomains:E.proxiedDomains||[],parentOrigin:E.parentOrigin});}).call(this);
((function(modelInformation) {
const originalFetch = window.fetch;
// TODO: b/421908508 – Move these out of the script and match all generative AI model calls.
let googleLlmBaseApiUrls = [
‘https://generativelanguage.googleapis.com/v1beta/models/’ + modelInformation.textModelName + ‘:streamGenerateContent’,
‘https://generativelanguage.googleapis.com/v1beta/models/’ + modelInformation.textModelName + ‘:generateContent’,
‘https://generativelanguage.googleapis.com/v1beta/models/’ + modelInformation.imageModelName + ‘:predict’,
‘https://generativelanguage.googleapis.com/v1beta/models/’ + modelInformation.imageModelName + ‘:predictLongRunning’,
‘https://generativelanguage.googleapis.com/v1beta/models/’ + modelInformation.imageEditModelName + ‘:generateContent’,
‘https://generativelanguage.googleapis.com/v1beta/models/’ + modelInformation.imageTransformModelName + ‘:generateContent’,
‘https://generativelanguage.googleapis.com/v1beta/models/’ + modelInformation.videoModelName + ‘:predict’,
‘https://generativelanguage.googleapis.com/v1beta/models/’ + modelInformation.videoModelName + ‘:predictLongRunning’,
‘https://generativelanguage.googleapis.com/v1beta/models/’ + modelInformation.ttsModelName + ‘:generateContent’,
];
modelInformation.deprecatedTextModelNames.forEach((modelName) => {
googleLlmBaseApiUrls.push(
‘https://generativelanguage.googleapis.com/v1beta/models/’ + modelName + ‘:streamGenerateContent’,
‘https://generativelanguage.googleapis.com/v1beta/models/’ + modelName + ‘:generateContent’,
);
});
modelInformation.deprecatedImageModelNames.forEach((modelName) => {
googleLlmBaseApiUrls.push(
‘https://generativelanguage.googleapis.com/v1beta/models/’ + modelName + ‘:predict’,
‘https://generativelanguage.googleapis.com/v1beta/models/’ + modelName + ‘:predictLongRunning’,
‘https://generativelanguage.googleapis.com/v1beta/models/’ + modelName + ‘:generateContent’,
‘https://generativelanguage.googleapis.com/v1beta/models/’ + modelName + ‘:streamGenerateContent’,
);
});
modelInformation.deprecatedGenerateImageModelNames.forEach((modelName) => {
googleLlmBaseApiUrls.push(
‘https://generativelanguage.googleapis.com/v1beta/models/’ + modelName + ‘:generateContent’,
‘https://generativelanguage.googleapis.com/v1beta/models/’ + modelName + ‘:streamGenerateContent’,
);
});
modelInformation.deprecatedImageTransformModelNames.forEach((modelName) => {
googleLlmBaseApiUrls.push(
‘https://generativelanguage.googleapis.com/v1beta/models/’ + modelName + ‘:generateContent’,
‘https://generativelanguage.googleapis.com/v1beta/models/’ + modelName + ‘:streamGenerateContent’,
);
});

const pendingFetchResolvers = {};
let nextPromiseId = 0;

function handleStringInput(input, optionsArgument) {
const actualUrl = input;
const fetchCallArgs = [actualUrl, optionsArgument];
const effectiveOptions = optionsArgument || {};
const bodyForApiKeyCheck = effectiveOptions.body;
const bodyForPostMessage = effectiveOptions.body;
return { actualUrl, fetchCallArgs, effectiveOptions, bodyForApiKeyCheck, bodyForPostMessage };
}

function handleRequestInput(input, optionsArgument) {
const actualUrl = input.url;
const fetchCallArgs = [input, optionsArgument];
const effectiveOptions = { method: input.method, headers: new Headers(input.headers) };
let bodyForApiKeyCheck;
let bodyForPostMessage;

if (optionsArgument) {
if (optionsArgument.method) effectiveOptions.method = optionsArgument.method;
if (optionsArgument.headers) effectiveOptions.headers = new Headers(optionsArgument.headers);
if (‘body’ in optionsArgument) {
bodyForApiKeyCheck = optionsArgument.body;
bodyForPostMessage = optionsArgument.body;
} else {
bodyForApiKeyCheck = undefined;
bodyForPostMessage = input.body;
}
} else {
bodyForApiKeyCheck = undefined;
bodyForPostMessage = input.body;
}
return { actualUrl, fetchCallArgs, effectiveOptions, bodyForApiKeyCheck, bodyForPostMessage };
}

window.fetch = function(input, optionsArgument) {
let actualUrl;
let fetchCallArgs;
let effectiveOptions = {};
let bodyForApiKeyCheck;
let bodyForPostMessage;

if (typeof input === ‘string’) {
({actualUrl, fetchCallArgs, effectiveOptions, bodyForApiKeyCheck, bodyForPostMessage} = handleStringInput(input, optionsArgument));
} else if (input instanceof Request) {
({actualUrl, fetchCallArgs, effectiveOptions, bodyForApiKeyCheck, bodyForPostMessage} = handleRequestInput(input, optionsArgument));
} else {
return originalFetch.apply(window, [input, optionsArgument]);
}

effectiveOptions.method = effectiveOptions.method || ‘GET’;
if (!effectiveOptions.headers) {
effectiveOptions.headers = new Headers();
}

if (typeof actualUrl === ‘string’ && googleLlmBaseApiUrls.some((url) => actualUrl.startsWith(url))) {
let apiKeyIsNull = true;

const regex = new RegExp(“models/([^:]+)”);
const modelNameMatch = actualUrl.match(regex);
const modelName = modelNameMatch ? modelNameMatch[1] : ‘unspecified’;

try {
const urlObject = new URL(actualUrl); // Use URL object for robust parsing
const apiKeyParam = urlObject.searchParams.get(‘key’);
if (apiKeyParam) {
apiKeyIsNull = false;
}
} catch (e) {
// Continue checks even if URL parsing fails
}

if (apiKeyIsNull && effectiveOptions.headers) {
const h = new Headers(effectiveOptions.headers);
const apiKeyHeaderValue = h.get(‘X-API-Key’) || h.get(‘x-api-key’);
if (apiKeyHeaderValue) {
apiKeyIsNull = false;
return originalFetch.apply(window, fetchCallArgs);
}
}

if (apiKeyIsNull && effectiveOptions.method && [‘POST’, ‘PUT’, ‘PATCH’].includes(effectiveOptions.method.toUpperCase()) && typeof bodyForApiKeyCheck === ‘string’) {
try {
const bodyData = JSON.parse(bodyForApiKeyCheck);
if (bodyData && bodyData.apiKey) {
apiKeyIsNull = false;
return originalFetch.apply(window, fetchCallArgs);
}
} catch (e) {
// Ignore JSON parsing errors
}
}

if(apiKeyIsNull) {
const promiseId = nextPromiseId++;
const promise = new Promise((resolve) => {
pendingFetchResolvers[promiseId] = (resolvedResponse) => {
delete pendingFetchResolvers[promiseId];
resolve(resolvedResponse);
};
});

let serializedBodyForPostMessage;
if (typeof bodyForPostMessage === ‘string’ || bodyForPostMessage == null) {
serializedBodyForPostMessage = bodyForPostMessage;
} else if (bodyForPostMessage instanceof ReadableStream) {
serializedBodyForPostMessage = null;
} else {
try {
serializedBodyForPostMessage = JSON.stringify(bodyForPostMessage);
} catch (e) {
serializedBodyForPostMessage = null;
}
}

const messageOptions = {
method: effectiveOptions.method,
headers: Object.fromEntries(new Headers(effectiveOptions.headers).entries()),
body: serializedBodyForPostMessage
};

window.parent.postMessage({
type: ‘requestFetch’,
url: actualUrl,
modelName: modelName,
options: messageOptions,
promiseId: promiseId,
}, ‘*’);

return promise;
}
return originalFetch.apply(window, fetchCallArgs);
}
return originalFetch.apply(window, fetchCallArgs);
};

window.addEventListener(‘message’, function(event) {
if (event.data && event.data.type === ‘resolveFetch’) {
const { promiseId, response } = event.data;
if (pendingFetchResolvers[promiseId]) {
try {
const reconstructedResponse = new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: new Headers(response.headers),
});
pendingFetchResolvers[promiseId](reconstructedResponse);
} catch (error) {
pendingFetchResolvers[promiseId](new Response(null, { status: 500, statusText: “Interceptor Response Reconstruction Error” }));
}
}
}
});

}))({“textModelName”:”gemini-3-flash-preview”,”imageModelName”:”imagen-4.0-generate-001″,”imageEditModelName”:”gemini-3.1-flash-image”,”imageTransformModelName”:”gemini-3-pro-image”,”videoModelName”:”veo-2.0-generate-001″,”ttsModelName”:”gemini-2.5-flash-preview-tts”,”deprecatedTextModelNames”:[“gemini-2.0-flash”,”gemini-2.5-flash”,”gemini-2.5-flash-preview-04-17″,”gemini-2.5-flash-preview-05-20″,”gemini-2.5-flash-preview-09-2025″],”deprecatedImageModelNames”:[“imagen-3.0-generate-001″,”imagen-3.0-generate-002″],”deprecatedGenerateImageModelNames”:[“gemini-2.5-flash-image-preview”,”gemini-2.5-flash-image”,”gemini-3.1-flash-image-preview”],”deprecatedImageTransformModelNames”:[“gemini-3-pro-image-preview-11-2025″]})(function(){‘use strict’;function a(){window.parent.postMessage({type:”interaction”},”*”)}window.addEventListener(“click”,a,{capture:!0,passive:!0});window.addEventListener(“touchstart”,a,{capture:!0,passive:!0});window.addEventListener(“keydown”,a,{capture:!0,passive:!0});}).call(this);
(function() {
const originalConsoleLog = console.log;
const originalConsoleError = console.error;

/**
* Normalizes an error event or a promise rejection reason into a structured error object.
* @param {*} errorEventOrReason The error object or reason.
* @return {object} Structured error data { message, name, stack }.
*/
function getErrorObject(errorEventOrReason) {
if (errorEventOrReason instanceof Error) {
return {
message: errorEventOrReason.message,
name: errorEventOrReason.name,
stack: errorEventOrReason.stack,
};
}
// Fallback for non-Error objects.
try {
return {
message: JSON.stringify(errorEventOrReason),
name: ‘UnknownErrorType’,
stack: null,
};
} catch (e) {
return {
message: String(errorEventOrReason),
name: ‘UnknownErrorTypeNonStringifiable’,
stack: null,
};
}
}

/**
* Converts an array of arguments (from log/error) into a single string.
* Handles Error objects specially to include their message and stack.
* @param {Array} args – Arguments passed to console methods.
* @return {string} A string representation of the arguments.
*/
function stringifyArgs(args) {
return args
.map((arg) => {
if (arg instanceof Error) {
const {message, stack} = arg;
return `Error: ${message}${stack ? (‘nStack: ‘ + stack) : ”}`;
}
if (typeof arg === ‘object’ && arg !== null) {
try {
return JSON.stringify(arg);
} catch (error) {
return ‘[Circular Object]’;
}
} else {
return String(arg);
}
})
.join(‘ ‘);
}

console.log = function(…args) {
const logString = stringifyArgs(args);
window.parent.postMessage({ type: ‘log’, message: logString }, ‘*’);
originalConsoleLog.apply(console, args);
};

console.error = function(…args) {
let errorData;
if (args.length > 0 && args[0] instanceof Error) {
const err = args[0];
// If the first arg is an Error, capture its details.
errorData = {
type: ‘error’,
source: ‘CONSOLE_ERROR’,
…getErrorObject(err),
rawArgsString: stringifyArgs(args.slice(1)),
timestamp: new Date().toISOString(),
};
} else {
// If not an Error object, treat all args as a general error message.
errorData = {
type: ‘error’,
source: ‘CONSOLE_ERROR’,
message: stringifyArgs(args),
name: ‘ConsoleLoggedError’,
stack: null,
timestamp: new Date().toISOString(),
};
}
window.parent.postMessage(errorData, ‘*’);
originalConsoleError.apply(console, args);
};

// Listen for global unhandled synchronous errors.
window.addEventListener(‘error’, function(event) {
const errorDetails = event.error ? getErrorObject(event.error) : {
message: event.message,
name: ‘GlobalError’,
stack: null,
filename: event.filename,
lineno: event.lineno,
colno: event.colno,
};

window.parent.postMessage({
type: ‘error’,
source: ‘global’,
…errorDetails,
message: errorDetails.message || event.message,
timestamp: new Date().toISOString(),
}, ‘*’);
});

// Listen for unhandled promise rejections (asynchronous errors).
window.addEventListener(‘unhandledrejection’, function(event) {
const errorDetails = getErrorObject(event.reason);

window.parent.postMessage({
type: ‘error’,
source: ‘unhandledrejection’,
…errorDetails,
message: errorDetails.message || ‘Unhandled Promise Rejection’,
timestamp: new Date().toISOString(),
}, ‘*’);
});

})();

Sách Làm Giàu Từ Chứng Khoán (William O’Neil) – Cẩm Nang Đầu Tư Hàng Đầu

tailwind.config = {
theme: {
extend: {
colors: {
primary: ‘#047857’,
primaryDark: ‘#065f46’,
accent: ‘#10b981’,
},
fontFamily: {
sans: [‘Inter’, ‘system-ui’, ‘-apple-system’, ‘Segoe UI’, ‘Roboto’, ‘sans-serif’] }
}
}
}

*, ::before, ::after{–tw-border-spacing-x:0;–tw-border-spacing-y:0;–tw-translate-x:0;–tw-translate-y:0;–tw-rotate:0;–tw-skew-x:0;–tw-skew-y:0;–tw-scale-x:1;–tw-scale-y:1;–tw-pan-x: ;–tw-pan-y: ;–tw-pinch-zoom: ;–tw-scroll-snap-strictness:proximity;–tw-gradient-from-position: ;–tw-gradient-via-position: ;–tw-gradient-to-position: ;–tw-ordinal: ;–tw-slashed-zero: ;–tw-numeric-figure: ;–tw-numeric-spacing: ;–tw-numeric-fraction: ;–tw-ring-inset: ;–tw-ring-offset-width:0px;–tw-ring-offset-color:#fff;–tw-ring-color:rgb(59 130 246 / 0.5);–tw-ring-offset-shadow:0 0 #0000;–tw-ring-shadow:0 0 #0000;–tw-shadow:0 0 #0000;–tw-shadow-colored:0 0 #0000;–tw-blur: ;–tw-brightness: ;–tw-contrast: ;–tw-grayscale: ;–tw-hue-rotate: ;–tw-invert: ;–tw-saturate: ;–tw-sepia: ;–tw-drop-shadow: ;–tw-backdrop-blur: ;–tw-backdrop-brightness: ;–tw-backdrop-contrast: ;–tw-backdrop-grayscale: ;–tw-backdrop-hue-rotate: ;–tw-backdrop-invert: ;–tw-backdrop-opacity: ;–tw-backdrop-saturate: ;–tw-backdrop-sepia: ;–tw-contain-size: ;–tw-contain-layout: ;–tw-contain-paint: ;–tw-contain-style: }::backdrop{–tw-border-spacing-x:0;–tw-border-spacing-y:0;–tw-translate-x:0;–tw-translate-y:0;–tw-rotate:0;–tw-skew-x:0;–tw-skew-y:0;–tw-scale-x:1;–tw-scale-y:1;–tw-pan-x: ;–tw-pan-y: ;–tw-pinch-zoom: ;–tw-scroll-snap-strictness:proximity;–tw-gradient-from-position: ;–tw-gradient-via-position: ;–tw-gradient-to-position: ;–tw-ordinal: ;–tw-slashed-zero: ;–tw-numeric-figure: ;–tw-numeric-spacing: ;–tw-numeric-fraction: ;–tw-ring-inset: ;–tw-ring-offset-width:0px;–tw-ring-offset-color:#fff;–tw-ring-color:rgb(59 130 246 / 0.5);–tw-ring-offset-shadow:0 0 #0000;–tw-ring-shadow:0 0 #0000;–tw-shadow:0 0 #0000;–tw-shadow-colored:0 0 #0000;–tw-blur: ;–tw-brightness: ;–tw-contrast: ;–tw-grayscale: ;–tw-hue-rotate: ;–tw-invert: ;–tw-saturate: ;–tw-sepia: ;–tw-drop-shadow: ;–tw-backdrop-blur: ;–tw-backdrop-brightness: ;–tw-backdrop-contrast: ;–tw-backdrop-grayscale: ;–tw-backdrop-hue-rotate: ;–tw-backdrop-invert: ;–tw-backdrop-opacity: ;–tw-backdrop-saturate: ;–tw-backdrop-sepia: ;–tw-contain-size: ;–tw-contain-layout: ;–tw-contain-paint: ;–tw-contain-style: }/* ! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com */*,::after,::before{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}::after,::before{–tw-content:”}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, “Liberation Mono”, “Courier New”, monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0px}.inset-x-0{left:0px;right:0px}.-bottom-16{bottom:-4rem}.-left-16{left:-4rem}.-right-16{right:-4rem}.-top-16{top:-4rem}.bottom-0{bottom:0px}.bottom-4{bottom:1rem}.left-4{left:1rem}.right-4{right:1rem}.top-0{top:0px}.top-4{top:1rem}.z-10{z-index:10}.z-50{z-index:50}.col-span-2{grid-column:span 2 / span 2}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:0.25rem}.ml-1{margin-left:0.25rem}.mt-0.5{margin-top:0.125rem}.mt-1{margin-top:0.25rem}.mt-16{margin-top:4rem}.mt-3{margin-top:0.75rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.h-10{height:2.5rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-20{height:5rem}.h-3.5{height:0.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-80{height:20rem}.h-auto{height:auto}.h-full{height:100%}.w-10{width:2.5rem}.w-14{width:3.5rem}.w-20{width:5rem}.w-3.5{width:0.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-80{width:20rem}.w-full{width:100%}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.border-collapse{border-collapse:collapse}.transform{transform:translate(var(–tw-translate-x), var(–tw-translate-y)) rotate(var(–tw-rotate)) skewX(var(–tw-skew-x)) skewY(var(–tw-skew-y)) scaleX(var(–tw-scale-x)) scaleY(var(–tw-scale-y))}@keyframes bounce{0%, 100%{transform:translateY(-25%);animation-timing-function:cubic-bezier(0.8,0,1,1)}50%{transform:none;animation-timing-function:cubic-bezier(0,0,0.2,1)}}.animate-bounce{animation:bounce 1s infinite}.cursor-pointer{cursor:pointer}.list-none{list-style-type:none}.grid-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr))}.grid-cols-4{grid-template-columns:repeat(4, minmax(0, 1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:0.25rem}.gap-1.5{gap:0.375rem}.gap-2{gap:0.5rem}.gap-3{gap:0.75rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.space-y-1 > :not([hidden]) ~ :not([hidden]){–tw-space-y-reverse:0;margin-top:calc(0.25rem * calc(1 – var(–tw-space-y-reverse)));margin-bottom:calc(0.25rem * var(–tw-space-y-reverse))}.space-y-10 > :not([hidden]) ~ :not([hidden]){–tw-space-y-reverse:0;margin-top:calc(2.5rem * calc(1 – var(–tw-space-y-reverse)));margin-bottom:calc(2.5rem * var(–tw-space-y-reverse))}.space-y-12 > :not([hidden]) ~ :not([hidden]){–tw-space-y-reverse:0;margin-top:calc(3rem * calc(1 – var(–tw-space-y-reverse)));margin-bottom:calc(3rem * var(–tw-space-y-reverse))}.space-y-2 > :not([hidden]) ~ :not([hidden]){–tw-space-y-reverse:0;margin-top:calc(0.5rem * calc(1 – var(–tw-space-y-reverse)));margin-bottom:calc(0.5rem * var(–tw-space-y-reverse))}.space-y-3 > :not([hidden]) ~ :not([hidden]){–tw-space-y-reverse:0;margin-top:calc(0.75rem * calc(1 – var(–tw-space-y-reverse)));margin-bottom:calc(0.75rem * var(–tw-space-y-reverse))}.space-y-4 > :not([hidden]) ~ :not([hidden]){–tw-space-y-reverse:0;margin-top:calc(1rem * calc(1 – var(–tw-space-y-reverse)));margin-bottom:calc(1rem * var(–tw-space-y-reverse))}.space-y-5 > :not([hidden]) ~ :not([hidden]){–tw-space-y-reverse:0;margin-top:calc(1.25rem * calc(1 – var(–tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(–tw-space-y-reverse))}.space-y-6 > :not([hidden]) ~ :not([hidden]){–tw-space-y-reverse:0;margin-top:calc(1.5rem * calc(1 – var(–tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(–tw-space-y-reverse))}.space-y-8 > :not([hidden]) ~ :not([hidden]){–tw-space-y-reverse:0;margin-top:calc(2rem * calc(1 – var(–tw-space-y-reverse)));margin-bottom:calc(2rem * var(–tw-space-y-reverse))}.divide-y > :not([hidden]) ~ :not([hidden]){–tw-divide-y-reverse:0;border-top-width:calc(1px * calc(1 – var(–tw-divide-y-reverse)));border-bottom-width:calc(1px * var(–tw-divide-y-reverse))}.divide-slate-100 > :not([hidden]) ~ :not([hidden]){–tw-divide-opacity:1;border-color:rgb(241 245 249 / var(–tw-divide-opacity, 1))}.self-start{align-self:flex-start}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.scroll-smooth{scroll-behavior:smooth}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:0.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:0.5rem}.rounded-xl{border-radius:0.75rem}.rounded-r-xl{border-top-right-radius:0.75rem;border-bottom-right-radius:0.75rem}.rounded-tl-2xl{border-top-left-radius:1rem}.rounded-tr-2xl{border-top-right-radius:1rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l-4{border-left-width:4px}.border-t{border-top-width:1px}.border-emerald-200{–tw-border-opacity:1;border-color:rgb(167 243 208 / var(–tw-border-opacity, 1))}.border-emerald-400/30{border-color:rgb(52 211 153 / 0.3)}.border-emerald-400/40{border-color:rgb(52 211 153 / 0.4)}.border-emerald-500/30{border-color:rgb(16 185 129 / 0.3)}.border-emerald-600{–tw-border-opacity:1;border-color:rgb(5 150 105 / var(–tw-border-opacity, 1))}.border-slate-100{–tw-border-opacity:1;border-color:rgb(241 245 249 / var(–tw-border-opacity, 1))}.border-slate-200{–tw-border-opacity:1;border-color:rgb(226 232 240 / var(–tw-border-opacity, 1))}.border-slate-300{–tw-border-opacity:1;border-color:rgb(203 213 225 / var(–tw-border-opacity, 1))}.border-slate-800{–tw-border-opacity:1;border-color:rgb(30 41 59 / var(–tw-border-opacity, 1))}.border-white/10{border-color:rgb(255 255 255 / 0.1)}.border-white/20{border-color:rgb(255 255 255 / 0.2)}.bg-black/25{background-color:rgb(0 0 0 / 0.25)}.bg-black/30{background-color:rgb(0 0 0 / 0.3)}.bg-black/40{background-color:rgb(0 0 0 / 0.4)}.bg-black/60{background-color:rgb(0 0 0 / 0.6)}.bg-emerald-100{–tw-bg-opacity:1;background-color:rgb(209 250 229 / var(–tw-bg-opacity, 1))}.bg-emerald-50{–tw-bg-opacity:1;background-color:rgb(236 253 245 / var(–tw-bg-opacity, 1))}.bg-emerald-50/80{background-color:rgb(236 253 245 / 0.8)}.bg-emerald-500/10{background-color:rgb(16 185 129 / 0.1)}.bg-emerald-500/20{background-color:rgb(16 185 129 / 0.2)}.bg-emerald-600{–tw-bg-opacity:1;background-color:rgb(5 150 105 / var(–tw-bg-opacity, 1))}.bg-orange-500{–tw-bg-opacity:1;background-color:rgb(249 115 22 / var(–tw-bg-opacity, 1))}.bg-red-100{–tw-bg-opacity:1;background-color:rgb(254 226 226 / var(–tw-bg-opacity, 1))}.bg-red-600{–tw-bg-opacity:1;background-color:rgb(220 38 38 / var(–tw-bg-opacity, 1))}.bg-slate-100{–tw-bg-opacity:1;background-color:rgb(241 245 249 / var(–tw-bg-opacity, 1))}.bg-slate-50{–tw-bg-opacity:1;background-color:rgb(248 250 252 / var(–tw-bg-opacity, 1))}.bg-slate-900{–tw-bg-opacity:1;background-color:rgb(15 23 42 / var(–tw-bg-opacity, 1))}.bg-slate-950/85{background-color:rgb(2 6 23 / 0.85)}.bg-teal-500/10{background-color:rgb(20 184 166 / 0.1)}.bg-white{–tw-bg-opacity:1;background-color:rgb(255 255 255 / var(–tw-bg-opacity, 1))}.bg-white/10{background-color:rgb(255 255 255 / 0.1)}.bg-white/5{background-color:rgb(255 255 255 / 0.05)}.bg-white/95{background-color:rgb(255 255 255 / 0.95)}.bg-gradient-to-r{background-image:linear-gradient(to right, var(–tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top, var(–tw-gradient-stops))}.bg-gradient-to-tr{background-image:linear-gradient(to top right, var(–tw-gradient-stops))}.from-black/90{–tw-gradient-from:rgb(0 0 0 / 0.9) var(–tw-gradient-from-position);–tw-gradient-to:rgb(0 0 0 / 0) var(–tw-gradient-to-position);–tw-gradient-stops:var(–tw-gradient-from), var(–tw-gradient-to)}.from-emerald-500{–tw-gradient-from:#10b981 var(–tw-gradient-from-position);–tw-gradient-to:rgb(16 185 129 / 0) var(–tw-gradient-to-position);–tw-gradient-stops:var(–tw-gradient-from), var(–tw-gradient-to)}.from-emerald-600{–tw-gradient-from:#059669 var(–tw-gradient-from-position);–tw-gradient-to:rgb(5 150 105 / 0) var(–tw-gradient-to-position);–tw-gradient-stops:var(–tw-gradient-from), var(–tw-gradient-to)}.from-emerald-900{–tw-gradient-from:#064e3b var(–tw-gradient-from-position);–tw-gradient-to:rgb(6 78 59 / 0) var(–tw-gradient-to-position);–tw-gradient-stops:var(–tw-gradient-from), var(–tw-gradient-to)}.from-red-600{–tw-gradient-from:#dc2626 var(–tw-gradient-from-position);–tw-gradient-to:rgb(220 38 38 / 0) var(–tw-gradient-to-position);–tw-gradient-stops:var(–tw-gradient-from), var(–tw-gradient-to)}.from-slate-900{–tw-gradient-from:#0f172a var(–tw-gradient-from-position);–tw-gradient-to:rgb(15 23 42 / 0) var(–tw-gradient-to-position);–tw-gradient-stops:var(–tw-gradient-from), var(–tw-gradient-to)}.from-teal-500{–tw-gradient-from:#14b8a6 var(–tw-gradient-from-position);–tw-gradient-to:rgb(20 184 166 / 0) var(–tw-gradient-to-position);–tw-gradient-stops:var(–tw-gradient-from), var(–tw-gradient-to)}.via-black/60{–tw-gradient-to:rgb(0 0 0 / 0) var(–tw-gradient-to-position);–tw-gradient-stops:var(–tw-gradient-from), rgb(0 0 0 / 0.6) var(–tw-gradient-via-position), var(–tw-gradient-to)}.via-emerald-950{–tw-gradient-to:rgb(2 44 34 / 0) var(–tw-gradient-to-position);–tw-gradient-stops:var(–tw-gradient-from), #022c22 var(–tw-gradient-via-position), var(–tw-gradient-to)}.via-rose-600{–tw-gradient-to:rgb(225 29 72 / 0) var(–tw-gradient-to-position);–tw-gradient-stops:var(–tw-gradient-from), #e11d48 var(–tw-gradient-via-position), var(–tw-gradient-to)}.via-teal-500{–tw-gradient-to:rgb(20 184 166 / 0) var(–tw-gradient-to-position);–tw-gradient-stops:var(–tw-gradient-from), #14b8a6 var(–tw-gradient-via-position), var(–tw-gradient-to)}.to-cyan-500{–tw-gradient-to:#06b6d4 var(–tw-gradient-to-position)}.to-cyan-600{–tw-gradient-to:#0891b2 var(–tw-gradient-to-position)}.to-emerald-500{–tw-gradient-to:#10b981 var(–tw-gradient-to-position)}.to-red-700{–tw-gradient-to:#b91c1c var(–tw-gradient-to-position)}.to-slate-900{–tw-gradient-to:#0f172a var(–tw-gradient-to-position)}.to-teal-500{–tw-gradient-to:#14b8a6 var(–tw-gradient-to-position)}.to-teal-600{–tw-gradient-to:#0d9488 var(–tw-gradient-to-position)}.to-transparent{–tw-gradient-to:transparent var(–tw-gradient-to-position)}.fill-emerald-400{fill:#34d399}.fill-white{fill:#fff}.object-cover{object-fit:cover}.p-1{padding:0.25rem}.p-1.5{padding:0.375rem}.p-3{padding:0.75rem}.p-3.5{padding:0.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.px-2{padding-left:0.5rem;padding-right:0.5rem}.px-2.5{padding-left:0.625rem;padding-right:0.625rem}.px-3{padding-left:0.75rem;padding-right:0.75rem}.px-3.5{padding-left:0.875rem;padding-right:0.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0.5{padding-top:0.125rem;padding-bottom:0.125rem}.py-1{padding-top:0.25rem;padding-bottom:0.25rem}.py-1.5{padding-top:0.375rem;padding-bottom:0.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:0.5rem;padding-bottom:0.5rem}.py-2.5{padding-top:0.625rem;padding-bottom:0.625rem}.py-3{padding-top:0.75rem;padding-bottom:0.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-3{padding-bottom:0.75rem}.pb-4{padding-bottom:1rem}.pb-8{padding-bottom:2rem}.pt-1{padding-top:0.25rem}.pt-2{padding-top:0.5rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, “Liberation Mono”, “Courier New”, monospace}.font-sans{font-family:Inter, system-ui, -apple-system, Segoe UI, Roboto, sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-[10px]{font-size:10px}.text-[11px]{font-size:11px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:0.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:0.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-0.025em}.tracking-wide{letter-spacing:0.025em}.tracking-wider{letter-spacing:0.05em}.tracking-widest{letter-spacing:0.1em}.text-emerald-300{–tw-text-opacity:1;color:rgb(110 231 183 / var(–tw-text-opacity, 1))}.text-emerald-400{–tw-text-opacity:1;color:rgb(52 211 153 / var(–tw-text-opacity, 1))}.text-emerald-500{–tw-text-opacity:1;color:rgb(16 185 129 / var(–tw-text-opacity, 1))}.text-emerald-600{–tw-text-opacity:1;color:rgb(5 150 105 / var(–tw-text-opacity, 1))}.text-emerald-700{–tw-text-opacity:1;color:rgb(4 120 87 / var(–tw-text-opacity, 1))}.text-emerald-800{–tw-text-opacity:1;color:rgb(6 95 70 / var(–tw-text-opacity, 1))}.text-emerald-900{–tw-text-opacity:1;color:rgb(6 78 59 / var(–tw-text-opacity, 1))}.text-red-200{–tw-text-opacity:1;color:rgb(254 202 202 / var(–tw-text-opacity, 1))}.text-red-600{–tw-text-opacity:1;color:rgb(220 38 38 / var(–tw-text-opacity, 1))}.text-slate-300{–tw-text-opacity:1;color:rgb(203 213 225 / var(–tw-text-opacity, 1))}.text-slate-400{–tw-text-opacity:1;color:rgb(148 163 184 / var(–tw-text-opacity, 1))}.text-slate-500{–tw-text-opacity:1;color:rgb(100 116 139 / var(–tw-text-opacity, 1))}.text-slate-600{–tw-text-opacity:1;color:rgb(71 85 105 / var(–tw-text-opacity, 1))}.text-slate-700{–tw-text-opacity:1;color:rgb(51 65 85 / var(–tw-text-opacity, 1))}.text-slate-800{–tw-text-opacity:1;color:rgb(30 41 59 / var(–tw-text-opacity, 1))}.text-slate-900{–tw-text-opacity:1;color:rgb(15 23 42 / var(–tw-text-opacity, 1))}.text-white{–tw-text-opacity:1;color:rgb(255 255 255 / var(–tw-text-opacity, 1))}.line-through{-webkit-text-decoration-line:line-through;text-decoration-line:line-through}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.shadow{–tw-shadow:0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);–tw-shadow-colored:0 1px 3px 0 var(–tw-shadow-color), 0 1px 2px -1px var(–tw-shadow-color);box-shadow:var(–tw-ring-offset-shadow, 0 0 #0000), var(–tw-ring-shadow, 0 0 #0000), var(–tw-shadow)}.shadow-2xl{–tw-shadow:0 25px 50px -12px rgb(0 0 0 / 0.25);–tw-shadow-colored:0 25px 50px -12px var(–tw-shadow-color);box-shadow:var(–tw-ring-offset-shadow, 0 0 #0000), var(–tw-ring-shadow, 0 0 #0000), var(–tw-shadow)}.shadow-lg{–tw-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);–tw-shadow-colored:0 10px 15px -3px var(–tw-shadow-color), 0 4px 6px -4px var(–tw-shadow-color);box-shadow:var(–tw-ring-offset-shadow, 0 0 #0000), var(–tw-ring-shadow, 0 0 #0000), var(–tw-shadow)}.shadow-md{–tw-shadow:0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);–tw-shadow-colored:0 4px 6px -1px var(–tw-shadow-color), 0 2px 4px -2px var(–tw-shadow-color);box-shadow:var(–tw-ring-offset-shadow, 0 0 #0000), var(–tw-ring-shadow, 0 0 #0000), var(–tw-shadow)}.shadow-sm{–tw-shadow:0 1px 2px 0 rgb(0 0 0 / 0.05);–tw-shadow-colored:0 1px 2px 0 var(–tw-shadow-color);box-shadow:var(–tw-ring-offset-shadow, 0 0 #0000), var(–tw-ring-shadow, 0 0 #0000), var(–tw-shadow)}.shadow-xl{–tw-shadow:0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);–tw-shadow-colored:0 20px 25px -5px var(–tw-shadow-color), 0 8px 10px -6px var(–tw-shadow-color);box-shadow:var(–tw-ring-offset-shadow, 0 0 #0000), var(–tw-ring-shadow, 0 0 #0000), var(–tw-shadow)}.ring-white/30{–tw-ring-color:rgb(255 255 255 / 0.3)}.blur-3xl{–tw-blur:blur(64px);filter:var(–tw-blur) var(–tw-brightness) var(–tw-contrast) var(–tw-grayscale) var(–tw-hue-rotate) var(–tw-invert) var(–tw-saturate) var(–tw-sepia) var(–tw-drop-shadow)}.backdrop-blur-md{–tw-backdrop-blur:blur(12px);-webkit-backdrop-filter:var(–tw-backdrop-blur) var(–tw-backdrop-brightness) var(–tw-backdrop-contrast) var(–tw-backdrop-grayscale) var(–tw-backdrop-hue-rotate) var(–tw-backdrop-invert) var(–tw-backdrop-opacity) var(–tw-backdrop-saturate) var(–tw-backdrop-sepia);backdrop-filter:var(–tw-backdrop-blur) var(–tw-backdrop-brightness) var(–tw-backdrop-contrast) var(–tw-backdrop-grayscale) var(–tw-backdrop-hue-rotate) var(–tw-backdrop-invert) var(–tw-backdrop-opacity) var(–tw-backdrop-saturate) var(–tw-backdrop-sepia)}.backdrop-blur-sm{–tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(–tw-backdrop-blur) var(–tw-backdrop-brightness) var(–tw-backdrop-contrast) var(–tw-backdrop-grayscale) var(–tw-backdrop-hue-rotate) var(–tw-backdrop-invert) var(–tw-backdrop-opacity) var(–tw-backdrop-saturate) var(–tw-backdrop-sepia);backdrop-filter:var(–tw-backdrop-blur) var(–tw-backdrop-brightness) var(–tw-backdrop-contrast) var(–tw-backdrop-grayscale) var(–tw-backdrop-hue-rotate) var(–tw-backdrop-invert) var(–tw-backdrop-opacity) var(–tw-backdrop-saturate) var(–tw-backdrop-sepia)}.transition{transition-property:color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-text-decoration-color, -webkit-backdrop-filter;transition-property:color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;transition-property:color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms}.duration-300{transition-duration:300ms}.duration-500{transition-duration:500ms}.selection:bg-emerald-500 *::selection{–tw-bg-opacity:1;background-color:rgb(16 185 129 / var(–tw-bg-opacity, 1))}.selection:text-white *::selection{–tw-text-opacity:1;color:rgb(255 255 255 / var(–tw-text-opacity, 1))}.selection:bg-emerald-500::selection{–tw-bg-opacity:1;background-color:rgb(16 185 129 / var(–tw-bg-opacity, 1))}.selection:text-white::selection{–tw-text-opacity:1;color:rgb(255 255 255 / var(–tw-text-opacity, 1))}.hover:-translate-y-0.5:hover{–tw-translate-y:-0.125rem;transform:translate(var(–tw-translate-x), var(–tw-translate-y)) rotate(var(–tw-rotate)) skewX(var(–tw-skew-x)) skewY(var(–tw-skew-y)) scaleX(var(–tw-scale-x)) scaleY(var(–tw-scale-y))}.hover:scale-110:hover{–tw-scale-x:1.1;–tw-scale-y:1.1;transform:translate(var(–tw-translate-x), var(–tw-translate-y)) rotate(var(–tw-rotate)) skewX(var(–tw-skew-x)) skewY(var(–tw-skew-y)) scaleX(var(–tw-scale-x)) scaleY(var(–tw-scale-y))}.hover:bg-emerald-100:hover{–tw-bg-opacity:1;background-color:rgb(209 250 229 / var(–tw-bg-opacity, 1))}.hover:bg-emerald-700:hover{–tw-bg-opacity:1;background-color:rgb(4 120 87 / var(–tw-bg-opacity, 1))}.hover:bg-orange-600:hover{–tw-bg-opacity:1;background-color:rgb(234 88 12 / var(–tw-bg-opacity, 1))}.hover:bg-red-500:hover{–tw-bg-opacity:1;background-color:rgb(239 68 68 / var(–tw-bg-opacity, 1))}.hover:bg-slate-100:hover{–tw-bg-opacity:1;background-color:rgb(241 245 249 / var(–tw-bg-opacity, 1))}.hover:bg-slate-200:hover{–tw-bg-opacity:1;background-color:rgb(226 232 240 / var(–tw-bg-opacity, 1))}.hover:bg-slate-50:hover{–tw-bg-opacity:1;background-color:rgb(248 250 252 / var(–tw-bg-opacity, 1))}.hover:bg-slate-800:hover{–tw-bg-opacity:1;background-color:rgb(30 41 59 / var(–tw-bg-opacity, 1))}.hover:from-emerald-600:hover{–tw-gradient-from:#059669 var(–tw-gradient-from-position);–tw-gradient-to:rgb(5 150 105 / 0) var(–tw-gradient-to-position);–tw-gradient-stops:var(–tw-gradient-from), var(–tw-gradient-to)}.hover:from-emerald-700:hover{–tw-gradient-from:#047857 var(–tw-gradient-from-position);–tw-gradient-to:rgb(4 120 87 / 0) var(–tw-gradient-to-position);–tw-gradient-stops:var(–tw-gradient-from), var(–tw-gradient-to)}.hover:from-teal-600:hover{–tw-gradient-from:#0d9488 var(–tw-gradient-from-position);–tw-gradient-to:rgb(13 148 136 / 0) var(–tw-gradient-to-position);–tw-gradient-stops:var(–tw-gradient-from), var(–tw-gradient-to)}.hover:to-cyan-600:hover{–tw-gradient-to:#0891b2 var(–tw-gradient-to-position)}.hover:to-cyan-700:hover{–tw-gradient-to:#0e7490 var(–tw-gradient-to-position)}.hover:to-emerald-600:hover{–tw-gradient-to:#059669 var(–tw-gradient-to-position)}.hover:to-teal-700:hover{–tw-gradient-to:#0f766e var(–tw-gradient-to-position)}.hover:text-slate-600:hover{–tw-text-opacity:1;color:rgb(71 85 105 / var(–tw-text-opacity, 1))}.hover:shadow-lg:hover{–tw-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);–tw-shadow-colored:0 10px 15px -3px var(–tw-shadow-color), 0 4px 6px -4px var(–tw-shadow-color);box-shadow:var(–tw-ring-offset-shadow, 0 0 #0000), var(–tw-ring-shadow, 0 0 #0000), var(–tw-shadow)}.focus:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus:ring-2:focus{–tw-ring-offset-shadow:var(–tw-ring-inset) 0 0 0 var(–tw-ring-offset-width) var(–tw-ring-offset-color);–tw-ring-shadow:var(–tw-ring-inset) 0 0 0 calc(2px + var(–tw-ring-offset-width)) var(–tw-ring-color);box-shadow:var(–tw-ring-offset-shadow), var(–tw-ring-shadow), var(–tw-shadow, 0 0 #0000)}.focus:ring-emerald-500:focus{–tw-ring-opacity:1;–tw-ring-color:rgb(16 185 129 / var(–tw-ring-opacity, 1))}.active:scale-95:active{–tw-scale-x:.95;–tw-scale-y:.95;transform:translate(var(–tw-translate-x), var(–tw-translate-y)) rotate(var(–tw-rotate)) skewX(var(–tw-skew-x)) skewY(var(–tw-skew-y)) scaleX(var(–tw-scale-x)) scaleY(var(–tw-scale-y))}.group[open] .group-open:rotate-180{–tw-rotate:180deg;transform:translate(var(–tw-translate-x), var(–tw-translate-y)) rotate(var(–tw-rotate)) skewX(var(–tw-skew-x)) skewY(var(–tw-skew-y)) scaleX(var(–tw-scale-x)) scaleY(var(–tw-scale-y))}.group:hover .group-hover:scale-105{–tw-scale-x:1.05;–tw-scale-y:1.05;transform:translate(var(–tw-translate-x), var(–tw-translate-y)) rotate(var(–tw-rotate)) skewX(var(–tw-skew-x)) skewY(var(–tw-skew-y)) scaleX(var(–tw-scale-x)) scaleY(var(–tw-scale-y))}.group:hover .group-hover:scale-110{–tw-scale-x:1.1;–tw-scale-y:1.1;transform:translate(var(–tw-translate-x), var(–tw-translate-y)) rotate(var(–tw-rotate)) skewX(var(–tw-skew-x)) skewY(var(–tw-skew-y)) scaleX(var(–tw-scale-x)) scaleY(var(–tw-scale-y))}.group:hover .group-hover:ring-8{–tw-ring-offset-shadow:var(–tw-ring-inset) 0 0 0 var(–tw-ring-offset-width) var(–tw-ring-offset-color);–tw-ring-shadow:var(–tw-ring-inset) 0 0 0 calc(8px + var(–tw-ring-offset-width)) var(–tw-ring-color);box-shadow:var(–tw-ring-offset-shadow), var(–tw-ring-shadow), var(–tw-shadow, 0 0 #0000)}@media (min-width: 640px){.sm:col-span-1{grid-column:span 1 / span 1}.sm:grid-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr))}.sm:flex-row{flex-direction:row}.sm:items-end{align-items:flex-end}.sm:gap-3{gap:0.75rem}.sm:gap-4{gap:1rem}.sm:self-auto{align-self:auto}.sm:p-10{padding:2.5rem}.sm:p-8{padding:2rem}.sm:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm:text-2xl{font-size:1.5rem;line-height:2rem}.sm:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm:text-4xl{font-size:2.25rem;line-height:2.5rem}.sm:text-base{font-size:1rem;line-height:1.5rem}.sm:text-lg{font-size:1.125rem;line-height:1.75rem}.sm:text-sm{font-size:0.875rem;line-height:1.25rem}}@media (min-width: 768px){.md:inline-flex{display:inline-flex}}@media (min-width: 1024px){.lg:col-span-4{grid-column:span 4 / span 4}.lg:col-span-5{grid-column:span 5 / span 5}.lg:col-span-7{grid-column:span 7 / span 7}.lg:col-span-8{grid-column:span 8 / span 8}.lg:grid-cols-12{grid-template-columns:repeat(12, minmax(0, 1fr))}.lg:gap-12{gap:3rem}.lg:p-10{padding:2.5rem}.lg:px-8{padding-left:2rem;padding-right:2rem}.lg:text-4xl{font-size:2.25rem;line-height:2.5rem}.lg:text-5xl{font-size:3rem;line-height:1}}

STOCKMASTER
Thư Viện Sách Đầu Tư & Phân Tích Chuyên Sâu



Tuyên Ngôn Cam Kết Tiêu Chuẩn Sách Đầu Tư Bản Gốc

Làm Giàu Từ Chứng Khoán: Cẩm Nang Tìm Kiếm Siêu Cổ Phiếu Vượt Trội

Đúc kết từ hành trình giao dịch huyền thoại của William J. O’Neil, phương pháp CANSLIM đã giúp hàng trăm nghìn nhà đầu tư chiến thắng thị trường nhờ sự kết hợp hoàn hảo giữa phân tích cơ bản doanh nghiệp và phân tích kỹ thuật dòng tiền.

Sách Thật Bản Gốc

Bìa chuẩn, giấy in cao cấp chống lóa, đầy đủ biểu đồ chi tiết sắc nét

Phương Pháp CANSLIM

Hệ thống chọn lọc siêu cổ phiếu số 1 được các quỹ đầu tư toàn cầu tin dùng

Tối Ưu Lợi Nhuận

Trang bị quy tắc cắt lỗ nghiêm ngặt và thời điểm mua bán chuẩn xác

Ưu Đãi Đặc Quyền Tháng Này
Giảm Giá Sốc 48%

Nhận ngay bộ biểu đồ thực hành CANSLIM độc quyền khi đặt mua trực tiếp trên Shopee hôm nay.

Sách Làm Giàu Từ Chứng Khoán William J O'Neil

GIẢM 48%

Đã bán 4.910+ bản tháng qua


4.9/5 (3.8k đánh giá)


Bestseller #1 Sách Đầu Tư Cổ Phiếu Tăng Trưởng

Làm Giàu Từ Chứng Khoán (How to Make Money in Stocks) – William J. O’Neil

Tác giả: William J. O’Neil. Sách phát hành chính hãng bìa đẹp, trang bên trong in ấn rõ nét.

Đánh giá từ chuyên gia quản lý quỹ tài chính:

“Không có cuốn sách nào khác trên thị trường cung cấp một phương pháp thực chiến trọn vẹn và khoa học như Làm Giàu Từ Chứng Khoán. Mô hình CANSLIM là bộ lọc tuyệt vời giúp bạn xác định đúng cổ phiếu dẫn dắt ngay trước khi chúng tăng giá phi mã.”

Giá thị trường niêm yết:
240.000 ₫
Giá ưu đãi trực tiếp hôm nay:
125.000 ₫
Tiết kiệm 115.000 ₫

Flash Sale Kết Thúc Sau:


Chỉ còn 19 suất ưu đãi
10
Giờ
22
Phút
12
Giây
78
Ms

SĂN GIÁ GIẢM TRÊN SHOPEE

Miễn phí vận chuyển toàn quốc
Đổi trả miễn phí 7 ngày

Bảng Tham Khảo So Sánh Giá Thực Tế

Top 10 Sách Chứng Khoán & Đầu Tư Kinh Điển Nên Đọc Cùng

Dữ liệu giá gốc, giá khuyến mại và mức giảm giá cập nhật mới nhất từ thị trường.

Đã kiểm định giá tốt nhất

STT & Tác phẩm Ảnh minh họa Nội dung cốt lõi Giá gốc Giá ưu đãi Mức giảm Tìm trên Shopee
1. Tư Duy Và Giao Dịch Như Một Nhà Vô Địch Đầu Tư (SEPA)
Mark Minervini
Mark Minervini Chiến lược giao dịch siêu lợi nhuận SEPA quản trị rủi ro hoàn hảo. 195.000 ₫ 115.000 ₫ -41%
SHOPEE

2. Payback Time – Ngày Đòi Nợ (Đầu Tư Giá Trị)
Phil Town
Payback Time Quy tắc 4 chữ M tìm kiếm doanh nghiệp tuyệt vời để đầu tư an toàn. 190.000 ₫ 128.000 ₫ -32%
SHOPEE

3. Phân Tích Chứng Khoán (Security Analysis – Bản Kinh Điển)
Benjamin Graham & David Dodd
Security Analysis Kinh thánh của phương pháp đầu tư giá trị và định giá doanh nghiệp. 350.000 ₫ 229.000 ₫ -34%
SHOPEE

4. Tâm Lý Học Tài Chính (The Psychology of Money)
Morgan Housel
Morgan Housel 20 bài học về sự giàu có, lòng tham và hành vi kiểm soát cảm xúc khi đầu tư. 160.000 ₫ 109.000 ₫ -32%
SHOPEE

5. Biến 10 Triệu Thành 1 Tỷ Trên Thị Trường Chứng Khoán
Phạm Sỹ Vương
10 Trieu 1 Ty Phương pháp tích lũy tài sản từ số vốn nhỏ dành cho nhà đầu tư F0 Việt Nam. 160.000 ₫ 105.000 ₫ -34%
SHOPEE

6. Cổ Phiếu Tăng Trưởng – Hướng Dẫn Thực Hành CANSLIM
Nhiều Tác Giả
Thuc Hanh CANSLIM Bộ câu hỏi kiểm tra biểu đồ và chỉ số tài chính theo chuẩn CANSLIM thực tế. 180.000 ₫ 119.000 ₫ -34%
SHOPEE

7. Giao Dịch Như Một Phù Thủy Chứng Khoán
Mark Minervini
Phu Thuy Chung Khoan Bí quyết đạt tỷ suất sinh lợi hàng trăm phần trăm từ nhà vô địch đầu tư Mỹ. 210.000 ₫ 138.000 ₫ -34%
SHOPEE

8. Hướng Dẫn Đầu Tư Chứng Khoán Cơ Bản Cho Người Mới
Đặng Đức Nam
Chung Khoan Co Ban Kiến thức nền tảng về bảng điện tử, đặt lệnh và đọc báo cáo tài chính cơ bản. 130.000 ₫ 85.000 ₫ -35%
SHOPEE

9. Phân Tích Kỹ Thuật Từ A Đến Z
Bruce M. Kamich
Phan Tich Ky Thuat Nghệ thuật đọc đồ thị giá, khối lượng và các chỉ báo động lượng thông dụng. 250.000 ₫ 165.000 ₫ -34%
SHOPEE

10. Bí Mật Định Giá Cổ Phiếu
Matthew Peterson
Dinh Gia Co Phieu Xác định giá trị thực của doanh nghiệp qua mô hình chiết khấu dòng tiền DCF. 170.000 ₫ 112.000 ₫ -34%
SHOPEE

Chuyên Mục: Sách Đầu Tư Chứng Khoán Chuyên Sâu
•
Thời gian đọc: 18 phút
•
Cập nhật mới nhất hôm nay

Phân Tích Chi Tiết Hệ Thống CANSLIM Trong “Làm Giàu Từ Chứng Khoán”

Thị trường chứng khoán không phải là sòng bạc nếu bạn tiếp cận nó với một phương pháp khoa học đã được kiểm chứng qua nhiều thập kỷ. Cuốn sách Làm Giàu Từ Chứng Khoán của William J. O’Neil không chỉ đơn thuần là lý thuyết mà là bộ cẩm nang thực chiến giúp nhà đầu tư nhận diện chính xác các siêu cổ phiếu tăng trưởng mạnh mẽ nhất.

C

C & A – Lợi Nhuận Quý Hiện Tại và Tăng Trưởng Hàng Năm Đột Phá

Tiêu chí đầu tiên trong mô hình CANSLIM yêu cầu lợi nhuận trên mỗi cổ phiếu (EPS) và doanh số quý gần nhất phải tăng trưởng mạnh (tối thiểu 20% đến 25% hoặc cao hơn so với cùng kỳ năm trước). William O’Neil chứng minh rằng những cổ phiếu dẫn dắt thị trường luôn có sự bứt phá đột ngột về kết quả kinh doanh trước khi giá cổ phiếu tăng bằng lần.

N

N – Sản Phẩm Mới, Ban Lãnh Đạo Mới Hoặc Thời Điểm Mới

Đổi mới là động lực cốt lõi của siêu cổ phiếu. Công ty phải tung ra sản phẩm hoặc dịch vụ đột phá, có sự thay đổi lớn trong ban quản trị hoặc hưởng lợi từ các chính sách vĩ mô mới. Đỉnh giá mới thường xuất hiện đi kèm với những câu chuyện tăng trưởng hoàn toàn mới mẻ trên thị trường.

S

S & L – Cung và Cầu, Cổ Phiếu Dẫn Dắt Hay Bị Bỏ Rơi

Quy luật cung cầu quyết định giá cổ phiếu. Những cổ phiếu có khối lượng giao dịch bùng nổ khi phá vỡ đỉnh (Breakout) cho thấy sự gom hàng mạnh mẽ của các nhà đầu tư tổ chức lớn. Hãy tập trung mua cổ phiếu dẫn dắt ngành (Top 1 hoặc Top 2 về sức mạnh giá), tuyệt đối tránh xa các cổ phiếu yếu kém ở nhóm ngành đi xuống.

Video Phân Tích & Tóm Tắt Sách Làm Giàu Từ Chứng Khoán

Xem video phân tích chi tiết về hệ thống CANSLIM và phương pháp đầu tư của William O’Neil (nhấn nút Play để mở xem trực tiếp trên YouTube):

Video Tóm tắt sách Làm Giàu Từ Chứng Khoán
Tóm tắt sách | Làm Giàu Từ Chứng Khoán (CANSLIM) – Hệ thống tìm siêu cổ phiếu
Nguồn: KBooks • Thời lượng: 59 phút

Nâng Tầm Kỹ Năng Giao Dịch Của Bạn Ngay Hôm Nay

Trang bị ngay cuốn sách kinh điển này để nắm vững phương pháp CANSLIM, tự tin chọn lựa cổ phiếu tăng trưởng và quản trị rủi ro chuyên nghiệp.

Câu Hỏi Thường Gặp Của Độc Giả (FAQ)

1. Người mới bắt đầu tham gia thị trường chứng khoán đọc sách này có hiểu được không?

Hoàn toàn phù hợp. Sách giải thích chi tiết từ các khái niệm cơ bản về biểu đồ giá, khối lượng giao dịch cho đến hệ thống đánh giá doanh nghiệp chuyên sâu.

2. Sách có phải bản in chính hãng không? Chất lượng giấy thế nào?

Cam kết sách thật xuất bản chính hãng, bìa cứng cáp, giấy chống lóa bảo vệ mắt và các biểu đồ phân tích kỹ thuật được in màu hoặc nét mực cực kỳ sắc sảo.

3. Thời gian giao hàng trên Shopee mất bao lâu?

Sách luôn có sẵn kho, vận chuyển nhanh chóng từ 1-3 ngày tùy khu vực trên toàn quốc, hỗ trợ kiểm hàng trước khi thanh toán.

STOCKMASTER VIETNAM

Trang phân tích đánh giá các tác phẩm đầu tư tài chính và chứng khoán hàng đầu. Định hướng tri thức giao dịch bền vững cho cộng đồng nhà đầu tư Việt Nam.

© 2026 StockMaster. Bảo lưu mọi quyền theo quy định.

lucide.createIcons();

let configEndpoint = “https://khuyendung.net/App/API/addNewPostFromGemini.php”;
let configSecretKey = “123456”;

function openApiModal() {
document.getElementById(‘apiEndpointInput’).value = configEndpoint;
document.getElementById(‘apiSecretKeyInput’).value = configSecretKey;
const modal = document.getElementById(‘apiConfigModal’);
modal.classList.remove(‘hidden’);
modal.classList.add(‘flex’);
}

function closeApiModal() {
const modal = document.getElementById(‘apiConfigModal’);
modal.classList.add(‘hidden’);
modal.classList.remove(‘flex’);
}

function saveApiConfig() {
configEndpoint = document.getElementById(‘apiEndpointInput’).value.trim();
configSecretKey = document.getElementById(‘apiSecretKeyInput’).value.trim();
closeApiModal();
showNotice(“Thành công”, “Đã lưu thông tin cấu hình API Export2Khuyendung!”, true);
}

function showNotice(title, message, isSuccess = true) {
const modal = document.getElementById(‘noticeModal’);
const iconDiv = document.getElementById(‘noticeIcon’);
document.getElementById(‘noticeTitle’).innerText = title;
document.getElementById(‘noticeMessage’).innerText = message;

if (isSuccess) {
iconDiv.className = “w-14 h-14 mx-auto rounded-full flex items-center justify-center text-emerald-600 bg-emerald-100″;
iconDiv.innerHTML = ”;
} else {
iconDiv.className = “w-14 h-14 mx-auto rounded-full flex items-center justify-center text-red-600 bg-red-100″;
iconDiv.innerHTML = ”;
}

modal.classList.remove(‘hidden’);
modal.classList.add(‘flex’);
}

function closeNoticeModal() {
const modal = document.getElementById(‘noticeModal’);
modal.classList.add(‘hidden’);
modal.classList.remove(‘flex’);
}

async function exportToKhuyendung() {
const articleTitle = document.title;
const pageHtmlContent = document.documentElement.outerHTML;

const payload = {
secret_key: configSecretKey,
title: articleTitle,
content: pageHtmlContent
};

try {
const response = await fetch(configEndpoint, {
method: “POST”,
headers: { “Content-Type”: “application/json” },
body: JSON.stringify(payload)
});

const textResp = await response.text();
let parsed;
try { parsed = JSON.parse(textResp); } catch(e) { parsed = textResp; }

const displayMsg = typeof parsed === ‘object’ ? JSON.stringify(parsed, null, 2) : parsed;
showNotice(“Phản Hồi Từ API”, `HTTP ${response.status}: ${displayMsg}`, response.ok);
} catch (error) {
showNotice(“Lỗi Kết Nối API”, `Không thể gửi dữ liệu: ${error.message}. Vui lòng kiểm tra lại cấu hình Endpoint hoặc mạng.`, false);
}
}

function copyArticleHtml() {
const content = document.getElementById(‘articleContent’).outerHTML;
const tempTextarea = document.createElement(‘textarea’);
tempTextarea.value = content;
tempTextarea.style.position = ‘fixed’;
tempTextarea.style.left = ‘-9999px’;
document.body.appendChild(tempTextarea);
tempTextarea.select();
try {
document.execCommand(‘copy’);
showNotice(“Sao Chép Thành Công”, “Đã copy toàn bộ mã HTML của bài viết vào bộ nhớ tạm (Clipboard)!”);
} catch (err) {
showNotice(“Lỗi Sao Chép”, “Không thể copy tự động, vui lòng thử lại!”, false);
}
document.body.removeChild(tempTextarea);
}

let totalSeconds = 10 * 3600 + 22 * 60 + 35;
let millis = 74;

setInterval(() => {
millis -= 7;
if (millis 0) totalSeconds–;
}

const hrs = Math.floor(totalSeconds / 3600);
const mins = Math.floor((totalSeconds % 3600) / 60);
const secs = totalSeconds % 60;

document.getElementById(‘hours’).innerText = hrs < 10 ? '0' + hrs : hrs;
document.getElementById('minutes').innerText = mins < 10 ? '0' + mins : mins;
document.getElementById('seconds').innerText = secs < 10 ? '0' + secs : secs;
document.getElementById('millis').innerText = millis < 10 ? '0' + millis : millis;
}, 70);

Back to top button