Immortalized Human Hair Follicle Inner Root Sheath Cell Line - SV40 + hTERT
Unit
1x106 cells / 1.0 ml
Request Quote
Worried about losing your cells due to growth or thawing difficulties, or even a random freezer breakdown? Enjoy peace of mind knowing that you can be covered under abm 's Cell Line Insurance .
Sale of this item is subjected to the completion of a Material Transfer Agreement (MTA) by the purchasing institution.
For for-profit organizations, please contact quotes@abmgood.com for pricing.
Cat. No.
T9233
Print
Name
Immortalized Human Hair Follicle Inner Root Sheath Cell Line - SV40 + hTERT
Organism
Human (H. sapiens)
Tissue
Hair Follicle
Growth Properties
Adherent, polygonal
Cell Type
Immortalized Cells
Unit
1x106 cells / 1.0 ml
Storage Condition
Vapor phase of liquid nitrogen, or below -130°C.
Shipping Conditions
Ship with dry ice.
Product Format
Frozen
Intended Use
This product is intended for laboratory research use only. It is not intended for any animal or human therapeutic use, any human or animal consumption, or any diagnostic use.
BioSafety
II
Certificate of Analysis
For batch-specific test results, refer to the applicable certificate of analysis that can be found at www.abmgood.com.
Growth Conditions
Use of PriCoat™ T25 Flasks (G299 ) or Applied Cell Extracellular Matrix (G422 ) is required for cell adhesion to the culture vessels. PriGrow III (TM003 ) + 10% FBS + 1% Penicillin/Streptomycin Solution (G255 ), 37.0°C, 5% CO₂
Unpacking and Storage Instructions
1. Visually examine the packaging containers for signs of leakage or breakage.
2. Immediately transfer frozen cells from dry ice packaging to a
temperature below -130°C, preferably in liquid nitrogen vapor phase
storage, until ready for use.
To ensure the highest level of viability, thaw the vial and initiate
culture as soon as possible upon receipt. If continued storage is
desired, the vial should only be stored below -130°C or in liquid
nitrogen vapor phase. Do not store at -70°C, as it will result in loss
of viability.
Thawing Protocol
1. Thaw cells quickly in a 37°C water bath while agitating gently
(maximum 2 minutes). The vial cap should be kept above the water level
to minimize the risk of contamination.
2. Decontaminate the vial by spraying and wiping the exterior of the
vial with 70% ethanol. From this point onwards, all operations should be
strictly carried out inside a biological safety cabinet using aseptic
conditions.
3. Transfer the cell suspension into a 15ml sterile conical tube
containing 5ml of pre-warmed, complete growth media. Centrifuge cells at
125xg for 5-7 minutes.
4. Aspirate the supernatant without disturbing the cell pellet.
Re-suspend the cell pellet in the recommended pre-warmed, complete
growth media and dispense into a T25 culture flask.
5. Incubate the cells at the recommended conditions.
Subculture Protocol
Volumes given below are for a T75 flask; proportionally increase or decrease the volume as required per culture vessel size. Subculture cells once the culture vessel is 80% confluent.
1. Aspirate the culture media, and add 2-3ml of pre-warmed 0.25% Trypsin-EDTA to the culture vessel.
2. Observe the cells under a microscope to confirm detachment (typically within 2-10 minutes). Cells that are difficult to detach can be put in 37°C, for several minutes to facilitate detachment.
3. Neutralize Trypsin-EDTA by adding an equal volume of the complete growth media into the culture vessel.
4. Transfer the culture suspension into a sterile centrifuge tube, and centrifuge at 125xg for 5 minutes. The actual centrifuge duration and speed may vary depending on the cell type.
5. Aspirate the supernatant, and re-suspend the pellet with pre-warmed fresh complete growth media. Add appropriate aliquots of the cell suspension to new culture vessels, as desired.
6. Incubate the cells at the recommended conditions.
Cryopreservation
Cryopreservation Medium (TM024), or complete growth media with 10% DMSO.
Seeding Density (cells/cm2 )
30,000
Population Doubling Time (h)
24 - 48
Immortalization Method
Serial passaging and infection with lentivirus carrying SV40 and hTERT genes
Warranty
abm warrants that cell lines shall be viable upon initiation of culture for a period of thirty (30) days after shipment and that they shall meet the specifications on the applicable abm Material Product Information sheet, certificate of analysis, and/or catalog description. Such thirty (30) day period is referred to herein as the "Warranty Period”.
Disclaimer
1. Sale of this item is subjected to the completion of a Material
Transfer Agreement (MTA) by the purchasing individual/institution for
each order. If you have any questions regarding this, please contact us
at licensing@abmgood.com .
2. All test parameters provided in the CoA are conducted using abm 's
standardized culture system and procedures. The stated values may vary
under the end-user's culture conditions. Please verify that the product
is suitable for your studies by referencing published papers or ordering
RNA (0.5 μg, Cat.# C207, $450.00) or cell lysate (100 μg, Cat.# C206,
$600.00) to perform preliminary experiments, or alternatively use our
Gene Expression Assay Service (Cat# C138). All sales are final.
3. We recommend live cell shipments for ease of cell transfer and this
option can be requested at the time of ordering. Please note that the
end-user will need to evaluate the feasibility of live cell shipment by
taking into account the final destination's temperature variation and
its geographical location. In addition, we thoroughly test our cell
lines for freeze-thaw recovery. If frozen cells were received and not
recovered in your lab under the exact, specified conditions (using
recommended culture vessel, media, additional supplements, and
atmospheric conditions), a live cell replacement is possible at a cost
(plus shipping).
4. All of abm 's cell biology products are for research use ONLY and NOT for therapeutic/diagnostic applications. abm
is not liable for any repercussions arising from the use of its cell
biology product(s) in therapeutic/diagnostic application(s). Please
contact a technical service representative for more information.
5. abm makes no warranties or representations as to
the accuracy of the information on this site. Citations from literature
and provided for informational purposes only. abm does not warrant that such information has been shown to be accurate.
6. abm warrants that cell lines shall be viable upon
initiation of culture for a period of thirty (30) days after shipment
and that they shall meet the specifications on the applicable abm
Material Product Information sheet, certificate of analysis, and/or
catalog description. Such thirty (30) day period is referred to herein
as the "Warranty Period."
Application
Research Use Only.
Material Citation
If use of this material results in a scientific publication, please cite the material in the following manner: Applied Biological Materials Inc, Cat. No. T9233
Why are these cells classified as biosafety level II?
We follow the CDC-NIH recommendations that all mammalian sourced products should be handled at the Biological Safety Level 2 to minimize exposure of potentially infectious products. This information can be found in 'Biosafety in Microbiological and Biomedical Laboratories' (1999). Your institution's Safety Officer or Technical Services will be able to make the call as to whether BioSafety Level I is possible with these cells at your site, if desired.
How long can I store frozen vials?
Cells that are properly frozen using an effective cryoprotective agent can be stored in liquid nitrogen vapor phase (or below -130°C) indefinitely without affecting viability.
My cells are not detaching, what method do you recommend to trypsinize the cells?
Gently wash adherent cells with PBS (1X, without calcium or magnesium) to remove trypsin inhibitors before adding the trypsinization agent.
Ensure the correct trypsin concentration is being used (i.e. 0.25%).
Do not use cold trypsin to detach cells as the proteolytic activity will be low. Pre-warm trypsin to 37°C for optimal enzymatic activity.
Incubate the cells with trypsin-edta agent at 37°C to facilitate cell detachment.
Gently tap the side of the culture vessel to facilitate mechanical detachment.
Why are cells not attaching and forming clumps after subculturing with trypsin?
Cells form clumps and display attachment issues when the trypsinization agent is not effectively neutralized. To completely neutralize the trypsin agent, add an equal amount of complete growth media prior to centrifugation. Subtle changes in culture conditions, particularly in pH and the quality of serum used in the growth medium, may also affect the amount of clumping exhibited by the cells.
Why are my cells forming clumps after plating?
It is important to ensure cell clumps are broken up through gentle re-suspension by pipetting up and down several times after pelleting cells by centrifugation. This will ensure a homogenous single cell suspension for even plating.
There are no references for this product yet!
This product has no review yet.
{"id":37021,"cat_no":"T9233","retired_cat_no":"","old_cat_no":"T9233","name":"Immortalized Human Hair Follicle Inner Root Sheath Cell Line - SV40 + hTERT","price":"0.0000","price_before_discount":"0.0000","academic_price":"4950.00","commercial_price":null,"distributor_price_note":null,"unit_quantity":"1x10\u003Csup\u003E6\u003C\/sup\u003E cells \/ 1.0 ml","category_id":19,"category_name":"Immortalized Cell Lines","frontend_category_id":22,"frontend_category_ids":"86,20,21,22","gene_id":0,"ncbi_id":0,"gene_name":"","gene_full_name":null,"alias":"","accession_number":null,"species_id":6,"species":"Human (H. sapiens)","real_species_id":0,"cell_type_id":1,"cell_type":"Immortalized Cells","product_type":null,"tissue_id":7,"tissue":"Hair Follicle","tissue_system":"Integumentary System","source":null,"keywords":"hair cells, hair follicle cells, inner root, inner roots","invisible_search_keywords":null,"filter_group_id":13,"filter_group_name":"Cell Lines","filter_name":"Immortalized Cells","search_filter_ids":"41,42,102,108","search_filter_keys":"41-42,102-108","temp_field":null,"filter_id":14,"customization":0,"filter_table_id":8307,"filter_table_name":"","related_group_id":8,"operator":null,"status":1,"is_ko":0,"need_remove":0,"units":null,"document_sort":"","price_old":"0.0000","price2024":"0.0000","created_at":null,"updated_at":"2024-12-23 17:52:22","points_rule":5,"Confirmed":"Tony Confirmed","application_no_use":null,"application_id_no_use":null,"raised_in":null,"raised_in_id":null,"geo_price_before_discount":"0.00","geo_titer7_price_before_discount":"149.00","cate_url":"Immortalized-Cell-Lines.html","frontendBreadcrumbs":[{"id":20,"pid":86,"name":"Cellular Materials","page_id":18,"page_type":"App\\Models\\Category","href":"","sort":20,"show_in_nav":1,"show_in_homepage":1,"has_children":1,"status":1,"related_table":null,"created_at":null,"updated_at":null,"url_key":"cellular-materials.html","url":"cellular-materials.html"},{"id":21,"pid":20,"name":"Cell Library Collections","page_id":221,"page_type":"App\\Models\\Category","href":null,"sort":21,"show_in_nav":1,"show_in_homepage":1,"has_children":1,"status":1,"related_table":null,"created_at":null,"updated_at":"2025-02-12 01:11:16","url_key":"cellular-collections.html","url":"cellular-collections.html"},{"id":22,"pid":21,"name":"Immortalized Cell Lines","page_id":19,"page_type":"App\\Models\\Category","href":null,"sort":22,"show_in_nav":1,"show_in_homepage":1,"has_children":0,"status":1,"related_table":null,"created_at":null,"updated_at":null,"url_key":"Immortalized-Cell-Lines.html","url":"Immortalized-Cell-Lines.html"}],"price_flag":0,"builderURL":"","builderViewerURL":"","mapURL":"","viewerURL":"","builderType":"","productType":"App\\Models\\CatalogBaseCells","info_family":"","geo_price":"Inquiry","geo_price_symbol":"Inquiry","category":{"id":19,"categories":"Immortalized Cell Lines","pid":18,"url_key":"Immortalized-Cell-Lines.html","css":null,"wid":0,"breadcrumbs":"[{\u0022url\u0022:\u0022https:\/\/www.abmgood.com\u0022,\u0022title\u0022:\u0022Home\u0022},{\u0022url\u0022:\u0022https:\/\/www.abmgood.com\/cellular-materials.html\u0022,\u0022title\u0022:\u0022Cellular Materials\u0022},{\u0022url\u0022:\u0022https:\/\/www.abmgood.com\/Immortalized-Cell-Lines.html\u0022,\u0022title\u0022:\u0022Immoralized Cell Lines\u0022}]","breadcrumbsIdJson":"\u003Cscript type=\u0022application\/ld+json\u0022\u003E{\u0022@context\u0022:\u0022https:\/\/schema.org\u0022,\u0022@type\u0022:\u0022BreadcrumbList\u0022,\u0022itemListElement\u0022:[{\u0022@type\u0022:\u0022ListItem\u0022,\u0022position\u0022:1,\u0022name\u0022:\u0022Home\u0022,\u0022item\u0022:\u0022https:\/\/www.abmgood.com\u0022},{\u0022@type\u0022:\u0022ListItem\u0022,\u0022position\u0022:2,\u0022name\u0022:\u0022Cellular Materials\u0022,\u0022item\u0022:\u0022https:\/\/www.abmgood.com\/cellular-materials.html\u0022},{\u0022@type\u0022:\u0022ListItem\u0022,\u0022position\u0022:3,\u0022name\u0022:\u0022Immoralized Cell Lines\u0022}]}\u003C\/script\u003E","breadcrumbsHtml":"\u003Cul class=\u0022abm-breadcrumb\u0022\u003E\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.abmgood.com\u0022\u003EHome\u003C\/a\u003E\u003C\/li\u003E\u003Cli\u003E\u003Ca href=\u0022https:\/\/www.abmgood.com\/cellular-materials.html\u0022\u003ECellular Materials\u003C\/a\u003E\u003C\/li\u003E\u003Cli class=\u0022active\u0022\u003EImmoralized Cell Lines\u003C\/li\u003E\u003C\/ul\u003E","description":"\u003Ch2 class=\u0022abm-categories-title-h2\u0022\u003EImmortalized Cell Lines\u003C\/h2\u003E\n\u003Cdiv class=\u0022abm-container-fluid abm-mb-5\u0022\u003E\n\u003Cp\u003E\u003Cstrong\u003Eabm Inc.\u003C\/strong\u003E was founded 20 years ago as the first in the industry to introduce cell immortalization technology, products, and services. This achievement established \u003Cstrong\u003Eabm\u003C\/strong\u003E as a pioneer and dominant leader in the cell immortalization field, culminating in a \u003Cstrong\u003EScience Journal technique report\u003C\/strong\u003E published on Nov. 21, 2014.\u003C\/p\u003E\n\u003Cp\u003EOver the past two decades, we have successfully developed the most comprehensive library of over 600 unique cell lines derived from human, mouse, and major pet primary cells. These cell lines have supported cutting-edge research and drug development in both the healthcare and pet industries. Examples include:\u003C\/p\u003E\n\u003Cul\u003E\n\u003Cli\u003ESkin cells for the beauty industry\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022\/mast-cell-lines.html\u0022 class=\u0022abm-text-bold abm-link\u0022\u003EMast cells\u003C\/a\u003E for allergy research\u003C\/li\u003E\n\u003Cli\u003E\u003Ca href=\u0022\/dermal-papilla-cells.html\u0022 class=\u0022abm-text-bold abm-link\u0022\u003EDermal papilla cell lines\u003C\/a\u003E from androgenetic alopecia for hair growth research and drug development\u003C\/li\u003E\n\u003Cli\u003ECow and chicken muscle cells for in \u003Ci\u003Evitro\u003C\/i\u003E meat production\u003C\/li\u003E\n\u003Cli\u003EImmortalized human hepatocytes for toxicity studies in new drug development\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003EIn addition to our extensive catalog, we also offer custom cell immortalization services to meet your specific needs. If you have any primary cells requiring immortalization, our team is ready to assist (Cell Immortalization Service).\u003C\/p\u003E\n\u003C\/div\u003E\n\u003Cdiv class=\u0022abm-container-fluid\u0022\u003E\n\u003Cdiv class=\u0022search-box\u0022 id=\u0022search-box\u0022\u003E\n\u003Cdiv class=\u0022search-sub-filter\u0022\u003E\n\u003Cdiv class=\u0022search-sub-filter-row\u0022\u003E\n\u003Cdiv class=\u0022search-sub-filter-col\u0022\u003E\n\u003Cdiv class=\u0022search-sub-filter-title\u0022\u003ESELECT CATEGORY\u003C\/div\u003E\n\u003Cdiv class=\u0022search-sub-filter-line\u0022\u003E\u003C\/div\u003E\n\u003Cdiv class=\u0022search-sub-filter-items\u0022\u003E\n\u003Cul\u003E\n\u003Cli class=\u0022search-sub-filter-item-radio\u0022\u003E\u003Clabel class=\u0022abm-radio\u0022\u003E\u003Cinput type=\u0022radio\u0022 name=\u0022search-filter_id\u0022 value=\u002214\u0022 \/\u003E\u003Cspan class=\u0022abm-radio-icon\u0022\u003E\u003C\/span\u003E\u003Cspan class=\u0022abm-radio-text\u0022\u003EImmortalized Cells\u003C\/span\u003E\u003C\/label\u003E\u003C\/li\u003E\n\u003Cli class=\u0022search-sub-filter-item-radio\u0022\u003E\u003Clabel class=\u0022abm-radio\u0022\u003E\u003Cinput type=\u0022radio\u0022 name=\u0022search-filter_id\u0022 value=\u002215\u0022 \/\u003E\u003Cspan class=\u0022abm-radio-icon\u0022\u003E\u003C\/span\u003E\u003Cspan class=\u0022abm-radio-text\u0022\u003ETumor Cells\u003C\/span\u003E\u003C\/label\u003E\u003C\/li\u003E\n\u003Cli class=\u0022search-sub-filter-item-radio\u0022\u003E\u003Clabel class=\u0022abm-radio\u0022\u003E\u003Cinput type=\u0022radio\u0022 name=\u0022search-filter_id\u0022 value=\u002216\u0022 checked=\u0022checked\u0022 \/\u003E\u003Cspan class=\u0022abm-radio-icon\u0022\u003E\u003C\/span\u003E\u003Cspan class=\u0022abm-radio-text\u0022\u003EPrimary Cells\u003C\/span\u003E\u003C\/label\u003E\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003C\/div\u003E\n\u003C\/div\u003E\n\u003Cdiv class=\u0022search-sub-filter-col\u0022\u003E\n\u003Cdiv class=\u0022search-sub-filter-title\u0022\u003ESPECIES\u003C\/div\u003E\n\u003Cdiv class=\u0022search-sub-filter-line\u0022\u003E\u003C\/div\u003E\n\u003Cdiv class=\u0022search-sub-filter-items\u0022 id=\u0022search-sub-filter-organism-box\u0022\u003E\u003C\/div\u003E\n\u003C\/div\u003E\n\u003Cdiv class=\u0022search-sub-filter-col\u0022\u003E\n\u003Cdiv class=\u0022search-sub-filter-title\u0022\u003EBIO SYSTEM\u003C\/div\u003E\n\u003Cdiv class=\u0022search-sub-filter-line\u0022\u003E\u003C\/div\u003E\n\u003Cdiv class=\u0022search-sub-filter-items\u0022 id=\u0022search-sub-filter-tissue_system-box\u0022\u003E\u003C\/div\u003E\n\u003C\/div\u003E\n\u003Cdiv class=\u0022search-sub-filter-col\u0022\u003E\n\u003Cdiv class=\u0022search-sub-filter-title\u0022\u003ECELL TYPE\u003C\/div\u003E\n\u003Cdiv class=\u0022search-sub-filter-line\u0022\u003E\u003C\/div\u003E\n\u003Cdiv class=\u0022search-sub-filter-items\u0022 id=\u0022search-sub-filter-tissue-box\u0022\u003E\u003C\/div\u003E\n\u003C\/div\u003E\n\u003C\/div\u003E\n\u003C\/div\u003E\n\u003Cdiv class=\u0022search-clear\u0022\u003E\u003Cbutton class=\u0022abm-btn\u0022\u003EClear All\u003C\/button\u003E\u003C\/div\u003E\n\u003C\/div\u003E\n\u003Cdiv class=\u0022result-box\u0022 id=\u0022result-box\u0022\u003E\n\u003Cdiv class=\u0022result-title\u0022\u003ESEARCH RESULT\u003C\/div\u003E\n\u003Cdiv class=\u0022result-line\u0022\u003E\u003C\/div\u003E\n\u003Cdiv id=\u0022result-container\u0022\u003E\u003C\/div\u003E\n\u003Cdiv id=\u0022paginate-container\u0022\u003E\u003C\/div\u003E\n\u003C\/div\u003E\n\u003C\/div\u003E\n\u003Cstyle\u003E\n .search-box *,\n .result-box .result-title {\n font-size: 14px;\n }\n\n .search-filter_id,\n .search-sub-filter {\n width: 100%;\n margin-bottom: 25px;\n }\n\n .search-filter_id-title,\n .search-sub-filter-title,\n .result-title {\n background-color: #EF6331;\n color: #fff;\n width: 100%;\n padding: 0 15px;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: keep-all;\n height: 32px;\n line-height: 32px;\n }\n\n .search-filter_id-line,\n .search-sub-filter-line,\n .result-line {\n width: 100%;\n height: 0;\n background-color: #EF6331;\n }\n\n .search-filter_id-items {\n display: flex;\n flex-wrap: wrap;\n border-top: none;\n align-items: center;\n justify-content: space-around;\n padding: 15px 20px;\n }\n\n .search-filter_id-vertical-line {\n width: 1px;\n font-size: 0;\n background-color: #cacaca;\n }\n\n .search-filter_id-items .abm-radio {\n margin: 5px 15px 5px 0;\n }\n\n .search-sub-filter-row {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr 1fr;\n }\n\n .search-sub-filter-col {\n display: flex;\n flex-direction: column;\n }\n\n .search-sub-filter-items {\n flex: 1;\n padding: 15px;\n border-left: 1px solid #ddd;\n border-bottom: 1px solid #ddd;\n }\n\n .search-sub-filter-col:last-child .search-sub-filter-items {\n border-right: 1px solid #ddd;\n }\n\n .search-sub-filter-items ::-webkit-scrollbar {\n width: 10px;\n }\n\n .search-sub-filter-items ::-webkit-scrollbar-track {\n background-color: #eee;\n \/*border-left: 1px solid #ddd;*\/\n \/*border-right: 1px solid #ddd;*\/\n border-radius: 5px;\n }\n\n .search-sub-filter-items ::-webkit-scrollbar-thumb {\n background-color: #ef6331;\n border-radius: 5px;\n }\n\n .search-sub-filter-items ul {\n min-height: 100%;\n height: 200px;\n overflow-x: hidden;\n overflow-y: auto;\n padding: 0;\n margin: -15px;\n }\n\n .search-sub-filter-item, \n .search-sub-filter-item-radio {\n list-style: none;\n padding: 2px 15px;\n cursor: pointer;\n position: relative;\n }\n\n .search-sub-filter-item:hover {\n background-color: #EEE;\n }\n\n .search-sub-filter-item.active,\n .search-sub-filter-item.selected {\n background-color: #CCC;\n }\n\n .search-sub-filter-item-radio label.abm-radio {\n margin-bottom: 0;\n }\n\n .search-sub-filter-item-clear {\n display: none;\n }\n\n .search-sub-filter-item.active .search-sub-filter-item-clear,\n .search-sub-filter-item.selected .search-sub-filter-item-clear {\n display: flex;\n align-items: center;\n position: absolute;\n top: 0;\n right: -1px;\n height: 100%;\n padding: 0 10px;\n background-color: #333;\n color: #fff;\n }\n\n .search-clear {\n text-align: right;\n }\n\n .search-clear button {\n padding: 8px 15px;\n border: 1px solid #EF6331;\n background-color: #EF6331;\n color: #fff;\n border-radius: 4px;\n cursor: pointer;\n opacity: 1;\n transition: .3s;\n }\n\n .search-clear button:not(:disabled):hover {\n opacity: .8;\n }\n\n .search-clear button:disabled {\n opacity: .5;\n cursor: not-allowed;\n }\n\n .result-box {\n margin-top: 50px;\n }\n\n #result-container {\n padding-top: 20px;\n }\n\n #result-container ul {\n list-style: none;\n padding: 0;\n }\n\n .search-result-notice {\n background-color: #f2f2f2;\n padding: 15px 20px;\n margin-bottom: 20px;\n border-radius: 6px;\n }\n\n\n \/* Radio *\/\n .abm-radio {\n display: flex;\n margin-right: 15px;\n align-items: center;\n }\n\n .abm-radio input {\n display: none;\n }\n\n .abm-radio .abm-radio-icon {\n display: block;\n width: 1em;\n height: 1em;\n border-radius: 50%;\n border: 2px solid #ccc;\n margin-right: 5px;\n position: relative;\n }\n\n .abm-radio .abm-radio-text {\n color: #333;\n font-weight: 700;\n }\n\n .abm-radio:hover .abm-radio-icon,\n .abm-radio input:checked+.abm-radio-icon {\n border-color: #EF6331;\n }\n\n .abm-radio:hover .abm-radio-text {\n color: #EF6331;\n }\n\n .abm-radio input:checked+.abm-radio-icon::after {\n content: \u0022\u0022;\n display: block;\n width: 0.5em;\n height: 0.5em;\n background-color: #EF6331;\n border-radius: 50%;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n\n .abm-radio input:checked+.abm-radio-icon+.abm-radio-text {\n color: #EF6331;\n }\n\n .loading {\n display: flex;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n }\n\n .loading-item {\n width: 5px;\n height: 20px;\n background-color: #EF6331;\n\n -webkit-animation: loading 1.2s infinite ease-in-out;\n animation: loading 1.2s infinite ease-in-out;\n }\n\n .loading-item+.loading-item {\n margin-left: 5px;\n }\n\n .loading-item:nth-child(2) {\n -webkit-animation-delay: .1s;\n animation-delay: .1s;\n }\n\n .loading-item:nth-child(3) {\n -webkit-animation-delay: .2s;\n animation-delay: .2s;\n }\n\n .loading-item:nth-child(4) {\n -webkit-animation-delay: .3s;\n animation-delay: .3s;\n }\n\n .loading-item:nth-child(5) {\n -webkit-animation-delay: .4s;\n animation-delay: .4s;\n }\n\n .abm-image-zoomable {\n cursor: zoom-in;\n }\n\n @-webkit-keyframes loading {\n\n 0%,\n 40%,\n 100% {\n -webkit-transform: scaleY(1);\n }\n\n 20% {\n -webkit-transform: scaleY(1.7);\n }\n }\n\n @keyframes loading {\n\n 0%,\n 40%,\n 100% {\n transform: scaleY(1);\n -webkit-transform: scaleY(1);\n }\n\n 20% {\n transform: scaleY(1.7);\n -webkit-transform: scaleY(1.7);\n }\n }\n\n @media screen and (max-width: 768px) {\n .search-sub-filter-row {\n grid-template-columns: 1fr;\n grid-gap: 15px;\n }\n\n .search-sub-filter-items {\n height: unset;\n border-right: 1px solid #ddd;\n }\n\n .abm-search-item-action {\n display: none;\n }\n }\n\u003C\/style\u003E\n\u003Cp\u003E\n\u003Cscript\u003E\n const API = \u0027\/product\/searchApi\u0027;\n\n const DEFAULT_FILTER_ID = 14;\n\n function jump(params = {}, id = \u0027search-box\u0027) {\n let url = generateURL(params, location.origin + location.pathname);\n if (id) {\n scrollToID(id);\n }\n history.pushState(params, \u0027\u0027, url);\n search();\n }\n\n function scrollToID(id) {\n const el = document.getElementById(id);\n if (el) {\n window.scrollTo(0, getOffsetTop(el));\n }\n }\n\n function getOffsetTop(el) {\n let result = el.offsetTop;\n if (el.offsetParent) {\n result += getOffsetTop(el.offsetParent);\n }\n return result;\n }\n\n function getParams(state) {\n const params = [];\n for (const key in state) {\n params.push(`${key}=${state[key]}`);\n }\n return params;\n }\n\n function generateURL(state, base = API) {\n const params = getParams(state);\n if (params \u0026\u0026 params.length) {\n base += \u0027?\u0027 + params.join(\u0027\u0026\u0027);\n }\n return base;\n }\n\n function getDefaultFilterId() {\n return getSearchValueByKey(\u0027filter_id\u0027, DEFAULT_FILTER_ID);\n }\n\n function getSearchValueByKey(key, defaultVal = \u0027\u0027) {\n const search = location.search;\n if (search) {\n const str = search.substring(1);\n const arr = str.split(\u0027\u0026\u0027);\n for (const item of arr) {\n const keyValue = item.split(\u0027=\u0027);\n if (keyValue[0] === key) {\n return keyValue[1];\n }\n }\n }\n return defaultVal;\n }\n\n function search() {\n const historyStateExists = !!history.state;\n\n let state = history.state;\n if (!state) {\n state = { filter_id: getDefaultFilterId() };\n } else if (!state.filter_id) {\n state.filter_id = getDefaultFilterId();\n }\n\n for (const item of [\u0027species_id\u0027, \u0027tissue_system\u0027, \u0027tissue_id\u0027, \u0027page\u0027]) {\n const value = getSearchValueByKey(item);\n if (!state[item] \u0026\u0026 value) {\n state[item] = value;\n }\n }\n\n if (!historyStateExists) {\n history.pushState(Object.assign({}, state), \u0027\u0027);\n }\n\n disableFilterSection();\n fetch(generateURL(state)).then(res =\u003E res.json()).then(res =\u003E {\n if (0 === res.code) {\n renderProducts(res.data.products, res.data.page);\n renderSubFilter({\n organism: res.data.species,\n tissue_system: res.data.tissue_system,\n tissue_id: res.data.tissue\n });\n renderPaginate(res.data.page, res.data.lastPage);\n\n const filterId = state.filter_id;\n document.querySelectorAll(\u0027input[name=\u0022search-filter_id\u0022]\u0027).forEach(el =\u003E {\n el.checked = el.value + \u0027\u0027 === filterId + \u0027\u0027;\n });\n }\n\n enableFilterSection();\n }).catch(() =\u003E {\n enableFilterSection();\n });\n }\n\n function renderProducts(products, currentPage = 1) {\n let html = \u0027\u0027;\n if (currentPage \u003E 1) {\n html += \u0027\u003Cdiv class=\u0022search-result-notice\u0022\u003EProduct not found? Click \u003Ca href=\u0022javascript:;\u0022 onclick=\u0022scrollToID(\\\u0027search-box\\\u0027)\u0022\u003Ehere\u003C\/a\u003E to refine the result.\u003C\/div\u003E\u0027;\n }\n html += \u0027\u003Cul\u003E\u0027;\n for (const product of products) {\n const url = getProductUrl(product);\n const price = getProductPrice(product);\n\n const mediaPart = generateMediaPart(product);\n const categoryPart = generateCategoryPart(product);\n\n html += `\n \u003Cli class=\u0022abm-search-item\u0022\u003E\n \u003Cdiv class=\u0022abm-search-item-container\u0022\u003E\n \u003Cdiv class=\u0022abm-search-item-header\u0022\u003E\n \u003Cdiv class=\u0022abm-search-item-title\u0022\u003E\n \u003Cdiv class=\u0022abm-search-item-name\u0022\u003E\n \u003Ca class=\u0022abm-link\u0022 href=\u0022${url}\u0022 title=\u0022${product.name}\u0022\u003E${product.name}\u003C\/a\u003E\n \u003C\/div\u003E\n ${categoryPart}\n \u003C\/div\u003E\n \u003Cdiv class=\u0022abm-search-item-action\u0022\u003E\n \u003Ca class=\u0022btn abm-btn btn-block\u0022 href=\u0022${url}\u0022 title=\u0022${product.name}\u0022\u003EView Product\u003C\/a\u003E\n \u003C\/div\u003E\n \u003C\/div\u003E\n \u003Chr class=\u0022abm-search-item-hr\u0022\u003E\n \u003Cdiv class=\u0022abm-search-item-body\u0022\u003E\n \u003Cdiv class=\u0022abm-search-item-content\u0022\u003E\n \u003Cul class=\u0022abm-search-item-content-base\u0022\u003E\n \u003Cli\u003E\n \u003Cspan class=\u0022attribute\u0022\u003ECat. No.:\u003C\/span\u003E\n \u003Cspan class=\u0022attribute-value\u0022\u003E${product.cat_no}\u003C\/span\u003E\n \u003C\/li\u003E\n \u003Cli\u003E\n \u003Cspan class=\u0022attribute\u0022\u003EPrice:\u003C\/span\u003E\n \u003Cspan class=\u0022attribute-value\u0022\u003E${price}\u003C\/span\u003E\n \u003C\/li\u003E\n \u003Cli\u003E\n \u003Cspan class=\u0022attribute\u0022\u003EUnit:\u003C\/span\u003E\n \u003Cspan class=\u0022attribute-value\u0022\u003E${product.unit_quantity}\u003C\/span\u003E\n \u003C\/li\u003E\n \u003C\/ul\u003E\n \u003C\/div\u003E\n ${mediaPart}\n \u003C\/div\u003E\n \u003C\/div\u003E\n \u003C\/li\u003E\n `;\n }\n html += \u0027\u003C\/ul\u003E\u0027;\n\n document.querySelector(\u0027#result-container\u0027).innerHTML = html;\n }\n\n function getProductUrl(product) {\n if (product.seo \u0026\u0026 product.seo.url_key) {\n return \u0027\/\u0027 + ltrim(product.seo.url_key, \u0027\/\u0027);\n }\n\n const type = product.model_type.substr(22).toLowerCase();\n return \u0027\/catalog\/products\/\u0027 + product.id + \u0027\/type\/\u0027 + type;\n }\n\n function getProductPrice(product) {\n return isNaN(Number(product.geo_price)) ? (product.geo_price || (\u0027$\u0027 + (Number(product.price) || 0).toFixed(2))) : (\u0027$\u0027 + (Number(product.geo_price) || 0).toFixed(2));\n }\n\n function generateMediaPart(product) {\n let html = \u0027\u0027;\n if (product.media \u0026\u0026 product.media.length) {\n html += \u0027\u003Cdiv class=\u0022abm-search-item-media abm-image-zoomable\u0022\u003E\u0027\n + \u0027\u003Cdiv class=\u0022carousel slide\u0022 data-ride=\u0022carousel\u0022\u003E\u0027\n + \u0027\u003Cdiv class=\u0022carousel-inner\u0022 role=\u0022listbox\u0022\u003E\u0027\n\n let active = true;\n for (const media of product.media) {\n html += `\n \u003Cdiv class=\u0022item ${active ? \u0027active\u0027 : \u0027\u0027}\u0022\u003E\n \u003Cimg src=\u0022\/assets\/product\/${media.file_path}\u0022 alt=\u0022\u0022\u003E\n \u003C\/div\u003E\n `;\n active = false;\n }\n html += \u0027\u003C\/div\u003E\u003C\/div\u003E\u003C\/div\u003E\u0027;\n }\n\n return html;\n }\n\n function generateCategoryPart(product) {\n return \u0027\u0027;\n let html = \u0027\u0027;\n if (product.category) {\n html += `\n \u003Cdiv class=\u0022abm-search-item-item-type\u0022\u003E\n \u003Ca href=\u0022${product.category.url_key}\u0022\u003E${product.category.categories}\u003C\/a\u003E\n \u003C\/div\u003E\n `;\n }\n return html;\n }\n\n function ltrim(str, charlist) {\n if (charlist === undefined)\n charlist = \u0022\\s\u0022;\n return str.replace(new RegExp(\u0022^[\u0022 + charlist + \u0022]+\u0022), \u0022\u0022);\n }\n\n function renderSubFilter(subFilter, selected = null) {\n const organism = subFilter.organism;\n const importantList = [];\n for (const item of organism) {\n if (isImportant(item)) {\n item.is_important = true;\n importantList.unshift(item);\n const pos = organism.indexOf(item);\n organism.splice(pos, 1);\n }\n }\n for (const item of importantList) {\n organism.unshift(item);\n }\n const organismHtml = renderFilterUl(organism, \u0027species_id\u0027);\n\n document.querySelector(\u0027#search-sub-filter-organism-box\u0027).innerHTML = organismHtml;\n\n const tissueId = subFilter.tissue_id;\n const tissueHtml = renderFilterUl(tissueId, \u0027tissue_id\u0027);\n\n document.querySelector(\u0027#search-sub-filter-tissue-box\u0027).innerHTML = tissueHtml;\n\n const tissueSystem = subFilter.tissue_system;\n const tissueSystemHtml = renderFilterUl(tissueSystem, \u0027tissue_system\u0027);\n document.querySelector(\u0027#search-sub-filter-tissue_system-box\u0027).innerHTML = tissueSystemHtml;\n\n eventListener(\u0027.search-sub-filter-item\u0027, \u0027click\u0027, handleSubFilterClick);\n eventListener(\u0027.search-sub-filter-item-clear\u0027, \u0027click\u0027, handleClearSubFilter);\n }\n\n function isImportant(item) {\n const importantList = [\u0027Human\u0027, \u0027Mouse\u0027, \u0027Rat\u0027];\n for (const importantItem of importantList) {\n if (item.value.includes(importantItem)) {\n return true;\n }\n }\n return false;\n }\n\n function eventListener(selector, event, callback) {\n document.querySelectorAll(selector).forEach(el =\u003E {\n el.removeEventListener(event, callback);\n el.addEventListener(event, callback);\n });\n }\n\n function handleSubFilterClick() {\n if (!this.classList.contains(\u0027active\u0027)) {\n const key = this.dataset.key;\n const value = this.dataset.id;\n\n const state = history.state || {};\n state[key] = value;\n if (state.page) {\n delete state.page;\n }\n jump(state);\n }\n }\n\n function handleClearSubFilter(e) {\n e.stopPropagation();\n const parent = this.parentNode;\n const key = parent.dataset.key;\n const state = history.state;\n if (state \u0026\u0026 state.hasOwnProperty(key)) {\n delete state[key];\n }\n jump(state);\n }\n\n function renderFilterUl(items, key) {\n let html = \u0027\u003Cul\u003E\u0027;\n for (const item of items) {\n if (item.id \u0026\u0026 item.count \u003E 0) {\n html += `\n \u003Cli class=\u0022search-sub-filter-item ${item.selected}\u0022 data-key=\u0022${key}\u0022 data-id=\u0022${item.id}\u0022\u003E\n \u003Cspan\u003E${item.is_important ? (\u0027\u003Cstrong\u003E\u0027 + item.value + \u0027\u003C\/strong\u003E\u0027) : item.value}\u003C\/span\u003E\n \u003Cdiv class=\u0022search-sub-filter-item-clear\u0022\u003EX\u003C\/div\u003E\n \u003C\/li\u003E\n `;\n }\n }\n html += \u0027\u003C\/ul\u003E\u0027;\n\n return html;\n }\n\n function renderPaginate(currentPage, totalPage) {\n let html = \u0027\u0027;\n currentPage = Math.min(Math.max(1, currentPage), totalPage);\n\n if (totalPage !== 1) {\n html = \u0027\u003Cnav aria-label=\u0022Page navigation\u0022\u003E\u003Cul class=\u0022pager\u0022\u003E\u0027 +\n \u0027\u003Cli class=\u0022previous\u0027 + (currentPage === 1 ? \u0027 disabled\u0027 : \u0027\u0027) + \u0027\u0022\u003E\u003Ca href=\u0022javascript:void(0);\u0022 data-page=\u0022\u0027 + (currentPage - 1) + \u0027\u0022\u003E\u003Cspan aria-hidden=\u0022true\u0022\u003E\u0026larr;\u003C\/span\u003E Previous\u003C\/a\u003E\u003C\/li\u003E\u0027 +\n \u0027\u003Cli class=\u0022next\u0027 + (currentPage === totalPage ? \u0027 disabled\u0027 : \u0027\u0027) + \u0027\u0022\u003E\u003Ca href=\u0022javascript:void(0);\u0022 data-page=\u0022\u0027 + (currentPage + 1) + \u0027\u0022\u003ENext \u003Cspan aria-hidden=\u0022true\u0022\u003E\u0026rarr;\u003C\/span\u003E\u003C\/a\u003E\u003C\/li\u003E\u0027 +\n \u0027\u003C\/ul\u003E\u003C\/nav\u003E\u0027;\n }\n\n document.getElementById(\u0027paginate-container\u0027).innerHTML = html;\n\n eventListener(\u0027#paginate-container a\u0027, \u0027click\u0027, handlePaginateClick);\n }\n\n function handlePaginateClick() {\n if (this.parentNode.classList.contains(\u0027disabled\u0027)) {\n return;\n }\n const state = history.state || {};\n state.page = this.dataset.page;\n jump(state, \u0027result-box\u0027);\n }\n\n function disableFilterSection() {\n const el = document.querySelector(\u0027.search-box\u0027);\n el.style.position = \u0027relative\u0027;\n addShadow(el, \u0027shadow-search-box\u0027, true);\n\n const elResult = document.querySelector(\u0027.result-box\u0027);\n elResult.style.position = \u0027relative\u0027;\n addShadow(elResult, \u0027shadow-result-box\u0027);\n\n document.querySelector(\u0027.search-clear button\u0027).disabled = false;\n }\n\n function addShadow(elem, id, addLoading = false) {\n const el = document.getElementById(id);\n if (el) {\n el.style.display = \u0027block\u0027;\n el.style.opacity = 1;\n return;\n }\n\n elem.insertAdjacentHTML(\u0027beforeEnd\u0027, genearteShadow(id, addLoading));\n }\n\n function removeShadow(id) {\n const el = document.getElementById(id);\n if (el) {\n el.style.opacity = 0;\n setTimeout(function () {\n el.style.display = \u0027none\u0027;\n }, 500);\n }\n }\n\n function genearteShadow(id, addLoading = false) {\n let html = `\u003Cdiv id=\u0022${id}\u0022 style=\u0022position: absolute; left: 0; top: 0; right: 0; bottom: 0; background-color: rgba(255, 255, 255, .9); z-index: 100; transition: .5s;\u0022\u003E`;\n if (addLoading) {\n html += \u0027\u003Cdiv class=\u0022loading\u0022\u003E\u003Cdiv class=\u0022loading-item\u0022\u003E\u003C\/div\u003E\u003Cdiv class=\u0022loading-item\u0022\u003E\u003C\/div\u003E\u003Cdiv class=\u0022loading-item\u0022\u003E\u003C\/div\u003E\u003Cdiv class=\u0022loading-item\u0022\u003E\u003C\/div\u003E\u003Cdiv class=\u0022loading-item\u0022\u003E\u003C\/div\u003E\u003C\/div\u003E\u0027\n }\n html += `\u003C\/div\u003E`;\n\n return html;\n }\n\n function enableFilterSection() {\n removeShadow(\u0027shadow-search-box\u0027);\n removeShadow(\u0027shadow-result-box\u0027);\n document.querySelector(\u0027.search-clear button\u0027).disabled = !document.querySelector(\u0027.search-sub-filter-item.active\u0027);\n }\n\n search();\n\n document.querySelectorAll(\u0027input[name=\u0022search-filter_id\u0022]\u0027).forEach(el =\u003E {\n el.addEventListener(\u0027change\u0027, function () {\n if (el.classList.contains(\u0027prevent\u0027)) {\n return false;\n }\n\n document.querySelector(\u0027input[name=\u0022search-filter_id\u0022][value=\u0022\u0027 + DEFAULT_FILTER_ID + \u0027\u0022]\u0027).checked = true;\n\n switch (el.value + \u0027\u0027) {\n case \u002714\u0027:\n location.href = \u0027\/Immortalized-Cell-Lines.html\u0027;\n break;\n case \u002715\u0027:\n location.href = \u0027\/Tumor-Cell-Lines.html\u0027;\n break;\n case \u002716\u0027:\n location.href = \u0027\/Primary-Cells.html\u0027;\n break;\n default:\n jump({ filter_id: el.value });\n }\n });\n });\n\n document.querySelector(\u0027.search-clear button\u0027).addEventListener(\u0027click\u0027, () =\u003E {\n jump({\n filter_id: getDefaultFilterId()\n });\n });\n\n \/\/----------------\n \/\/ \u56fe\u7247\u653e\u5927 START\n \/\/----------------\n document.addEventListener(\u0027click\u0027, (e) =\u003E {\n const elements = document.querySelectorAll(\u0027.abm-image-zoomable\u0027);\n let curr = null;\n for (const element of elements) {\n if (element.contains(e.target)) {\n curr = element;\n break;\n }\n }\n\n if (!curr) {\n return false;\n }\n\n abmImageZoom(curr);\n });\n\n function abmImageZoom(el) {\n const images = el.querySelectorAll(\u0027img\u0027);\n const id = \u0027abm-image-zoom-carousel-\u0027 + parseInt(new Date().getTime());\n let items = \u0027\u0027;\n let hasActive = false;\n let active = null;\n for (const image of images) {\n const parent = image.parentElement;\n if (parent \u0026\u0026 parent.classList.contains(\u0027active\u0027)) {\n active = image;\n break;\n }\n }\n\n for (const image of images) {\n let activeClass = \u0027\u0027;\n if (active) {\n activeClass = active === image ? \u0027active\u0027 : \u0027\u0027;\n } else {\n activeClass = hasActive ? \u0027\u0027 : \u0027active\u0027;\n }\n items += `\u003Cdiv class=\u0022item ${activeClass}\u0022\u003E\u003Cimg src=\u0022${image.src}\u0022\u003E\u003C\/div\u003E`;\n hasActive = true;\n }\n if (!items) {\n return false;\n }\n items += `\u003Cstyle\u003E#abm-image-zoomable-modal .modal-dialog { max-width: 1200px; }\n #${id} .carousel-inner .item { position: relative; width: 100%; padding-top: 66.67%; overflow: hidden; }\n #${id} .carousel-inner .item.active.left, #${id} .carousel-inner .item.active.right { position: absolute; top: 0; }\n #${id} .carousel-inner .item img { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); max-width: 100%; max-height: 100%; }\n #${id} .carousel-control { display: none; color: #EF6331; }`;\n if (images.length \u003E 1) {\n items += ` #${id}:hover .carousel-control { display: block; }`;\n }\n items += \u0027\u003C\/style\u003E\u0027;\n\n const zoomModalEl = document.createElement(\u0027div\u0027);\n zoomModalEl.id = \u0027abm-image-zoomable-modal\u0027;\n zoomModalEl.classList.add(\u0027modal\u0027, \u0027fade\u0027);\n zoomModalEl.setAttribute(\u0027tabindex\u0027, \u0027-1\u0027);\n zoomModalEl.setAttribute(\u0027role\u0027, \u0027dialog\u0027);\n zoomModalEl.setAttribute(\u0027aria-hidden\u0027, \u0027true\u0027);\n let html = `\n \u003Cdiv class=\u0022modal-dialog\u0022\u003E\n \u003Cdiv class=\u0022modal-content\u0022\u003E\n \u003Cdiv class=\u0022modal-body\u0022\u003E\n \u003Cdiv id=\u0022${id}\u0022 class=\u0022carousel slide\u0022 data-ride=\u0022carousel\u0022 data-interval=\u0022\u0022\u003E\n \u003C!-- Wrapper for slides --\u003E\n \u003Cdiv class=\u0022carousel-inner\u0022 role=\u0022listbox\u0022\u003E${items}\u003C\/div\u003E\n\n \u003C!-- Controls --\u003E\n \u003Ca class=\u0022left carousel-control\u0022 href=\u0022#${id}\u0022 role=\u0022button\u0022 data-slide=\u0022prev\u0022\u003E\n \u003Cspan class=\u0022glyphicon glyphicon-chevron-left\u0022 aria-hidden=\u0022true\u0022\u003E\u003C\/span\u003E\n \u003Cspan class=\u0022sr-only\u0022\u003EPrevious\u003C\/span\u003E\n \u003C\/a\u003E\n \u003Ca class=\u0022right carousel-control\u0022 href=\u0022#${id}\u0022 role=\u0022button\u0022 data-slide=\u0022next\u0022\u003E\n \u003Cspan class=\u0022glyphicon glyphicon-chevron-right\u0022 aria-hidden=\u0022true\u0022\u003E\u003C\/span\u003E\n \u003Cspan class=\u0022sr-only\u0022\u003ENext\u003C\/span\u003E\n \u003C\/a\u003E\n \u003C\/div\u003E\n \u003Cdiv class=\u0022abm-mt-3\u0022\u003E\n \u003Cbutton type=\u0022button\u0022 class=\u0022btn abm-btn abm-w-100\u0022 data-dismiss=\u0022modal\u0022\u003EClose\u003C\/button\u003E\n \u003C\/div\u003E\n \u003C\/div\u003E\n \u003C\/div\u003E\n \u003C\/div\u003E\n `;\n zoomModalEl.innerHTML = html;\n document.body.appendChild(zoomModalEl);\n const $el = $(zoomModalEl);\n $el.modal(\u0027show\u0027);\n $el.on(\u0027hidden.bs.modal\u0027, function () {\n zoomModalEl.remove();\n });\n }\n \/\/----------------\n \/\/ \u56fe\u7247\u653e\u5927 END\n \/\/----------------\n\n window.onpopstate = function () {\n \/\/ \u76f4\u63a5\u8fd4\u56de\u4e0a\u4e00\u7ea7\u9875\u9762\n history.back();\n return false;\n if (!history.state) {\n history.back();\n }\n search();\n }\n \u003C\/script\u003E\n\u003C\/p\u003E","meta_title":"Immortalized Cells","meta_keywords":"Immortalized cell lines, Cell biology, Cell culture, abm, Primary cells, Mycoplasma detection and elimination, Growth factors and cytokines, Cell immortalization service, Cell characterization, Cell culture methods","meta_description":"abm offers over 400 immortalized cell lines from various organisms, tissue systems, and tissues1. Discover our high-quality and affordable solutions for your cell biology research.","deleted_at":null,"enable":"Y","parent_list":"18","table_name":"abm_catalog_cellular","image":null,"independentPage":0,"top_type":1,"sort_order":201,"in_footer":1,"fid":18,"created_at":null,"updated_at":"2025-04-05 01:14:02"},"info":{"id":925,"cat_no_base":"T9233","parent_id":37021,"image":null,"price-original":null,"description":"","shipment_type":null,"internal_leadtime":"0","lysate_type":null,"small_image":null,"growth_factor_size":null,"gene_name_no_use":null,"mammalian_selection_marker":null,"mammalian_selection_text":null,"storage_condition":"Vapor phase of liquid nitrogen, or below -130\u00b0C.","str_profiles":null,"species_description":null,"cost":null,"note":null,"family":null,"overexpressed_gene":null,"diameter":null,"appearance":null,"pluripotency":null,"recommended_medium_volume":null,"medium":"DMEM + 10% FBS + 1% P\/S","alias":null,"tier_price":null,"operator_no_use":"Ryan-MassUpload-Sept2020","addtime":null,"cell_line":null,"price_type":null,"gallery":null,"cell_growth_area":null,"cell_morphology":"polygonal","expression_system_type":null,"gene_symbol":null,"insert_size":null,"msrp":null,"msrp_display_actual_price_type":"0","cell_morphology_specification":null,"tax_class_id":2,"inventory_location":null,"vector":null,"internal_note":"\u003Cp\u003Eprimary cells = T4200\u003C\/p\u003E","component":null,"quantity_and_stock_status":null,"vector_url":null,"application":"Research Use Only.","minimal_price":null,"seeding_density":null,"seeding_density_cm":"30,000","seeding_density_ml":null,"source":null,"source_catno":"\u003Cp\u003E4950\/8650\u003C\/p\u003E","osmolarity":null,"weight":null,"royalty_rates":null,"population_doubling_time":"24 - 48","source_price":null,"weight_type":null,"ph":null,"licensor_commission_rate":null,"supplier":null,"donor_gender":null,"appearance_general":null,"sterility":null,"molecular_weight":null,"endotoxin_level":null,"donor_age":null,"news_from_date":null,"news_to_date":null,"expression_system_general":null,"donor_disease":null,"purity":null,"country_of_manufacture":null,"donor_ethnicity":null,"image_label":null,"biological_activity_text":null,"cart2quote_quotable":"2","biosafety":"II","product_quote":0,"small_image_label":null,"immortalization_method":"\u003Cp\u003ESerial passaging and infection with lentivirus carrying SV40 and hTERT genes\u003C\/p\u003E","bioactivity_data":null,"formulation":null,"thumbnail_label":null,"mammalian_selection":null,"isolation_method":null,"function":null,"reconstitution":null,"growth_properties":"Adherent, polygonal","expression_profile":null,"storage":null,"propagation_method":null,"usage":null,"freeze_thaw_recovery":null,"str_profile":null,"str_markers":null,"subculture_protocol":"\u003Cp\u003EVolumes given below are for a T75 flask; proportionally increase or decrease the volume as required per culture vessel size. Subculture cells once the culture vessel is 80% confluent.\u003C\/p\u003E\u003Cp\u003E1. Aspirate the culture media, and add 2-3ml of pre-warmed 0.25% Trypsin-EDTA to the culture vessel.\u003C\/p\u003E\u003Cp\u003E2. Observe the cells under a microscope to confirm detachment (typically within 2-10 minutes). Cells that are difficult to detach can be put in 37\u00b0C, for several minutes to facilitate detachment.\u003C\/p\u003E\u003Cp\u003E3. Neutralize Trypsin-EDTA by adding an equal volume of the complete growth media into the culture vessel.\u003C\/p\u003E\u003Cp\u003E4. Transfer the culture suspension into a sterile centrifuge tube, and centrifuge at 125xg for 5 minutes. The actual centrifuge duration and speed may vary depending on the cell type.\u003C\/p\u003E\u003Cp\u003E5. Aspirate the supernatant, and re-suspend the pellet with pre-warmed fresh complete growth media. Add appropriate aliquots of the cell suspension to new culture vessels, as desired.\u003C\/p\u003E\u003Cp\u003E6. Incubate the cells at the recommended conditions.\u003C\/p\u003E","preservation_protocol":null,"passage_number":null,"qc":null,"shipping_conditions":"Ship with dry ice.","disclaimer_general":"\u003Cp\u003E1. Sale of this item is subjected to the completion of a Material \nTransfer Agreement (MTA) by the purchasing individual\/institution for \neach order. If you have any questions regarding this, please contact us \nat \u003Ca href=\u0022mailto:licensing@abmgood.com\u0022\u003Elicensing@abmgood.com\u003C\/a\u003E.\u003C\/p\u003E\u003Cp\u003E2. All test parameters provided in the CoA are conducted using \u003Cstrong\u003Eabm\u003C\/strong\u003E\u0026#39;s\n standardized culture system and procedures. The stated values may vary \nunder the end-user\u0026#39;s culture conditions. Please verify that the product \nis suitable for your studies by referencing published papers or ordering\n RNA (0.5 \u03bcg, Cat.# C207, $450.00) or cell lysate (100 \u03bcg, Cat.# C206, \n$600.00) to perform preliminary experiments, or alternatively use our \nGene Expression Assay Service (Cat# C138). All sales are final.\u003C\/p\u003E\u003Cp\u003E3. We recommend live cell shipments for ease of cell transfer and this \noption can be requested at the time of ordering. Please note that the \nend-user will need to evaluate the feasibility of live cell shipment by \ntaking into account the final destination\u0026#39;s temperature variation and \nits geographical location. In addition, we thoroughly test our cell \nlines for freeze-thaw recovery. If frozen cells were received and not \nrecovered in your lab under the exact, specified conditions (using \nrecommended culture vessel, media, additional supplements, and \natmospheric conditions), a live cell replacement is possible at a cost \n(plus shipping).\u003C\/p\u003E\u003Cp\u003E4. All of \u003Cstrong\u003Eabm\u003C\/strong\u003E\u0026#39;s cell biology products are for research use ONLY and NOT for therapeutic\/diagnostic applications. \u003Cstrong\u003Eabm\u003C\/strong\u003E\n is not liable for any repercussions arising from the use of its cell \nbiology product(s) in therapeutic\/diagnostic application(s). Please \ncontact a technical service representative for more information.\u003C\/p\u003E\u003Cp\u003E5. \u003Cstrong\u003Eabm\u003C\/strong\u003E makes no warranties or representations as to \nthe accuracy of the information on this site. Citations from literature \nand provided for informational purposes only. \u003Cstrong\u003Eabm\u003C\/strong\u003E does not warrant that such information has been shown to be accurate.\u003C\/p\u003E\u003Cp\u003E6. \u003Cstrong\u003Eabm\u003C\/strong\u003E warrants that cell lines shall be viable upon \ninitiation of culture for a period of thirty (30) days after shipment \nand that they shall meet the specifications on the applicable \u003Cstrong\u003Eabm\u003C\/strong\u003E\n Material Product Information sheet, certificate of analysis, and\/or \ncatalog description. Such thirty (30) day period is referred to herein \nas the \u0026quot;Warranty Period.\u0026quot;\u003C\/p\u003E","caution":null,"transfection_reagents_type":null,"licensed_by":null,"licensed_from":null,"licensing_institution":null,"guarantee":null,"depositor":null,"licensor_name":null,"licensor_contact_information":null,"contract_termination_date":"0000-00-00","links_purchased_separately":null,"samples_title":null,"links_title":null,"links_exist":null,"internal_supplier":"ABM","internal_product_note":null,"donor_history":null,"split_ratio":null,"expression":null,"growth_conditions":"\u003Cp\u003EUse of PriCoat\u2122 T25 Flasks (\u003Ca class=\u0022abm-link\u0022 href=\u0022\/pricoat-t25-flasks.html\u0022\u003EG299\u003C\/a\u003E) or Applied Cell Extracellular Matrix (\u003Ca class=\u0022abm-link\u0022 href=\u0022\/applied-cell-extracellular-matrix-g422.html \u0022\u003EG422\u003C\/a\u003E) is required for cell adhesion to the culture vessels. PriGrow III (\u003Ca class=\u0022abm-link\u0022 href=\u0022\/prigrow-iii-medium-tm003.html\u0022\u003ETM003\u003C\/a\u003E) + 10% FBS + 1% Penicillin\/Streptomycin Solution (\u003Ca class=\u0022abm-link\u0022 href=\u0022\/penicillin-streptomycin-solution-g255.html\u0022\u003EG255\u003C\/a\u003E), 37.0\u00b0C, 5% CO\u2082\u003C\/p\u003E","recommend":"\u003Cp\u003EWorried about losing your cells due to growth or thawing difficulties, or even a random freezer breakdown? Enjoy peace of mind knowing that you can be covered under\u00a0\u003Cstrong\u003Eabm\u003C\/strong\u003E\u0027s\u00a0\u003Ca class=\u0022abm-link\u0022 href=\u0022\/cell-line-insurance.html\u0022\u003ECell Line Insurance\u003C\/a\u003E.\u003C\/p\u003E\r\n\u003Cp\u003ESale of this item is subjected to the completion of a Material Transfer Agreement (MTA) by the purchasing institution.\u003C\/p\u003E\r\n\u003Cp\u003EFor for-profit organizations, please contact \u003Ca class=\u0022abm-link\u0022 href=\u0022mailto:quotes@abmgood.com\u0022\u003Equotes@abmgood.com\u003C\/a\u003E for pricing.\u003C\/p\u003E ","references":null,"cryopreservation":"\u003Cp\u003ECryopreservation Medium (TM024), or complete growth media with 10% DMSO.\u003C\/p\u003E","unpacking_storage_instructions":"\u003Cp\u003E1. Visually examine the packaging containers for signs of leakage or breakage.\u003C\/p\u003E\u003Cp\u003E2. Immediately transfer frozen cells from dry ice packaging to a \ntemperature below -130\u00b0C, preferably in liquid nitrogen vapor phase \nstorage, until ready for use.\u003C\/p\u003E\u003Cp\u003ETo ensure the highest level of viability, thaw the vial and initiate \nculture as soon as possible upon receipt. If continued storage is \ndesired, the vial should only be stored below -130\u00b0C or in liquid \nnitrogen vapor phase. Do not store at -70\u00b0C, as it will result in loss \nof viability.\u003C\/p\u003E\u003Cp\u003E\u003Cbr\/\u003E\u003C\/p\u003E","promotions":null,"sync_images":null,"thawing_protocol":"\u003Cp\u003E1. Thaw cells quickly in a 37\u00b0C water bath while agitating gently \n(maximum 2 minutes). The vial cap should be kept above the water level \nto minimize the risk of contamination.\u003C\/p\u003E\u003Cp\u003E2. Decontaminate the vial by spraying and wiping the exterior of the \nvial with 70% ethanol. From this point onwards, all operations should be\n strictly carried out inside a biological safety cabinet using aseptic \nconditions.\u003C\/p\u003E\u003Cp\u003E3. Transfer the cell suspension into a 15ml sterile conical tube \ncontaining 5ml of pre-warmed, complete growth media. Centrifuge cells at\n 125xg for 5-7 minutes.\u003C\/p\u003E\u003Cp\u003E4. Aspirate the supernatant without disturbing the cell pellet. \nRe-suspend the cell pellet in the recommended pre-warmed, complete \ngrowth media and dispense into a T25 culture flask.\u003C\/p\u003E\u003Cp\u003E5. Incubate the cells at the recommended conditions.\u003C\/p\u003E","type_online":null,"parental_cell_line":null,"mutation_and_validations":null,"knockout_method":null,"clone_no":null,"created_at":"2022-09-07 08:13:18","updated_at":"2025-02-06 17:45:11","concentration":null},"seo":{"id":68188,"catalog_id":37021,"catalog_type":"App\\Models\\CatalogBaseCells","url_key":"immortalized-human-hair-follicle-inner-root-sheath-cells-sv40-htert.html","meta_title":null,"meta_keywords":null,"meta_description":null,"created_at":"2022-09-23 06:53:13","updated_at":"2024-05-13 19:44:57"},"gene":null,"media":[{"id":385637,"parent_id":37021,"parent_type":"App\\Models\\CatalogBaseCells","file_path":"\/upload\/GMrQjTUcfOMeAfTbfzegBzVeSPyiEZ8fiOD6Spt3.png","title":null,"text":null,"file_type":"image","alt":null,"url":null,"position":null,"status":1,"entity_id_m2":null,"sku_in_m2":null,"value_id_m2":null,"attribute_id":0,"created_at":"2025-01-16 21:21:47","updated_at":"2025-01-16 21:21:47"}]}