text:
//------------------------------------------------------------------------------
// <copyright project="BEmu_cpp" file="src/ReferenceDataRequest/ReferenceRequestElementOverrideArray.cpp" company="Jordan Robinson">
//     Copyright (c) 2013 Jordan Robinson. All rights reserved.
//
//     The use of this software is governed by the Microsoft Public License
//     which is included with this distribution.
// </copyright>
//------------------------------------------------------------------------------

#include "ReferenceDataRequest/ReferenceRequestElementOverrideArray.h"
#include "ReferenceDataRequest/ReferenceRequestElementOverride.h"
#include "Types/IndentType.h"
#include "BloombergTypes/Name.h"

namespace BEmu
{
	namespace ReferenceDataRequest
	{
		ReferenceRequestElementOverrideArray::ReferenceRequestElementOverrideArray()
		{
		}

		ReferenceRequestElementOverrideArray::~ReferenceRequestElementOverrideArray()
		{
			this->_overrides.clear();
		}

		Name ReferenceRequestElementOverrideArray::name() const { return Name("overrides"); }
		size_t ReferenceRequestElementOverrideArray::numValues() const { return this->_overrides.size(); }
		size_t ReferenceRequestElementOverrideArray::numElements() const { return 0; }

		bool ReferenceRequestElementOverrideArray::isNull() const { return false; }
		bool ReferenceRequestElementOverrideArray::isArray() const { return true; }
		bool ReferenceRequestElementOverrideArray::isComplexType() const { return false; }

		boost::shared_ptr<ElementPtr> ReferenceRequestElementOverrideArray::getValueAsElement(int index) const
		{
			return boost::dynamic_pointer_cast<ElementPtr>(this->_overrides[index]);
		}

		boost::shared_ptr<ElementPtr> ReferenceRequestElementOverrideArray::appendElement()
		{
			boost::shared_ptr<ReferenceRequestElementOverride> elmP(new ReferenceRequestElementOverride());

			this->_overrides.push_back(elmP);
			return boost::dynamic_pointer_cast<ElementPtr>(elmP);
		}

		std::ostream& ReferenceRequestElementOverrideArray::print(std::ostream& stream, int level, int spacesPerLevel) const
		{
			std::string tabs(IndentType::Indent(level, spacesPerLevel));

			stream << tabs << "overrides[] = {" << std::endl;

			for(std::vector< boost::shared_ptr<ReferenceRequestElementOverride> >::const_iterator iter = this->_overrides.begin(); iter != this->_overrides.end(); iter++)
			{
				boost::shared_ptr<ReferenceRequestElementOverride> req = *iter;
				req->print(stream, level + 1, spacesPerLevel);
			}

			stream << tabs << '}' << std::endl;

			return stream;
		}

	}
}


text:
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>W29251_text</title>
        <link rel="stylesheet" type="text/css" href="style.css" />

                «

    <p class="styleSans13.0000<enum PANGO_WEIGHT_NORMAL of type PangoWeight><enum PANGO_STYLE_NORMAL of type PangoStyle>">8% ZAVAN NA
* l.l('
1200 17'" Street, Ste. 1100
Denver, CO 80202 Phfi: 303-595-8004 FAX": 303-595-9847
Date: June 13, 2014 (Mon) To: Matt Messana -NDIC (North Dakota Oil and Gas Division)
From: Jean Arnold -Sr. Prod. Tech.
RE: Frac Fluids Statement for: Sigurd 5-8 1TFH, 5-8 3H, 5-8 5 TFH, 5-8 7H. Sigurd 32-29 2H, 32.29 411:" 32 29 SH 32 29 8,": ' ' I ' H APD's

    <p class="styleSans16.0000<enum PANGO_WEIGHT_NORMAL of type PangoWeight><enum PANGO_STYLE_NORMAL of type PangoStyle>">N
Zavanna, LLC does not use diesel fuel in the form of an ' - Numbers: y compound 'demmed W'"' the fonowmg Chemical Abstract Service Registry

    <p class="styleSans9.0000<enum PANGO_WEIGHT_NORMAL of type PangoWeight><enum PANGO_STYLE_NORMAL of type PangoStyle>">68334-30-5 (Primary Name: Fuels. Diesel) 68476-34-6 (Primary Name: Fuels. Diesel. No. 2) 68476-30-2 (Primary Name: Fuel Oil No. 2) 68476-31-3 (Primary Name: Fuel Oil. No.4) 8008-20—06 (Primary Name: Kerosene)

    <p class="styleSans19.0000<enum PANGO_WEIGHT_NORMAL of type PangoWeight><enum PANGO_STYLE_NORMAL of type PangoStyle>">Zavanna LLC also acknowledges that it must obtain an Underground injection Co
ntrol, Class ll permit. from the NDIC prior to commencing any Hydraulic Fracturin stimulation in which any amount of diesel fuel is injected.

Cod Dur Zavgnna Completion Manager

redpajama_set_name: RedPajamaGithub


text:
package eu.qualimaster.common.signal;

import java.io.IOException;

import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.JobConfigurable;
import org.apache.hadoop.mapred.OutputFormat;
import org.apache.hadoop.mapred.RecordWriter;
import org.apache.hadoop.util.Progressable;

import eu.qualimaster.common.signal.AlgorithmSignalHandler.IAlgorithmHolder;

/**
 * An input format acting as a basic Hadoop signal sink.
 *
 * @param <T> the sink interface type
 * @param <K> the key type
 * @param <V> the value type
 * @author Holger Eichelberger
 */
public class DelegatingSignalOutputFormat<T extends OutputFormat<K, V>, K, V> extends DefaultHadoopSignalReceiver<T>
    implements OutputFormat<K, V>, JobConfigurable, IAlgorithmHolder<T> {

    private static final long serialVersionUID = 7357406882786827505L;
    private transient T sink;
    private HadoopSignalHandler signalHandler;

    /**
     * Creates an instance.
     */
    public DelegatingSignalOutputFormat() {
        initialize(this);
    }

    @Override
    public RecordWriter<K, V> getRecordWriter(FileSystem ignored, JobConf job, String name, Progressable progress)
        throws IOException {
        getAlgorithmHandler().execute();
        RecordWriter<K, V> result = null;
        if (null != sink) {
            result = sink.getRecordWriter(ignored, job, name, progress);
        }
        return result;
    }

    @Override
    public void checkOutputSpecs(FileSystem ignored, JobConf job) throws IOException {
        if (null != sink) {
            sink.checkOutputSpecs(ignored, job);
        }
    }

    @Override
    public void configure(JobConf job) {
        if (sink instanceof JobConfigurable) {
            ((JobConfigurable) sink).configure(job);
        }
        signalHandler = configure(HadoopSignalHandler.PREFIX_SINK, job, this);
    }

    /**
     * Adds a configurer.
     *
     * @param job the job configuration to modify
     * @param cls the configurer class
     */
    public static void setConfigurer(JobConf job, Class<? extends IConfigurer<?>> cls) {
        if (null != cls) {
            job.set(HadoopSignalHandler.getConfigurerKey(HadoopSignalHandler.PREFIX_SINK), cls.getName());
        }
    }

    /**
     * Returns the signal handler.
     *
     * @return the signal handler
     */
    protected HadoopSignalHandler getSignalHandler() {
        return signalHandler;
    }

    @Override
    public T getCurrentAlgorithm() {
        return sink;
    }

    @Override
    public void setCurrentAlgorithm(T sink) {
        this.sink = sink;
    }

}


text:
package org.apache.commons.bcel6.classfile;

import java.io.DataInput;
import java.io.IOException;

import org.apache.commons.bcel6.Constants;
import org.apache.commons.bcel6.generic.Type;
import org.apache.commons.bcel6.util.BCELComparator;

/**
 * This class represents the field info structure, i.e., the representation
 * for a variable in the class. See JVM specification for details.
 *
 * @version $Id$
 */
public final class Field extends FieldOrMethod {

    private static BCELComparator _cmp = new BCELComparator() {

        @Override
        public boolean equals( Object o1, Object o2 ) {
            Field THIS = (Field) o1;
            Field THAT = (Field) o2;
            return THIS.getName().equals(THAT.getName())
                    && THIS.getSignature().equals(THAT.getSignature());
        }

        @Override
        public int hashCode( Object o ) {
            Field THIS = (Field) o;
            return THIS.getSignature().hashCode() ^ THIS.getName().hashCode();
        }
    };

    /**
     * Initialize from another object. Note that both objects use the same
     * references (shallow copy). Use clone() for a physical copy.
     */
    public Field(Field c) {
        super(c);
    }

    /**
     * Construct object from file stream.
     * @param file Input stream
     */
    Field(DataInput file, ConstantPool constant_pool) throws IOException,
            ClassFormatException {
        super(file, constant_pool);
    }

    /**
     * @param access_flags Access rights of field
     * @param name_index Points to field name in constant pool
     * @param signature_index Points to encoded signature
     * @param attributes Collection of attributes
     * @param constant_pool Array of constants
     */
    public Field(int access_flags, int name_index, int signature_index, Attribute[] attributes,
            ConstantPool constant_pool) {
        super(access_flags, name_index, signature_index, attributes, constant_pool);
    }

    /**
     * Called by objects that are traversing the nodes of the tree implicitely
     * defined by the contents of a Java class. I.e., the hierarchy of methods,
     * fields, attributes, etc. spawns a tree of objects.
     *
     * @param v Visitor object
     */
    @Override
    public void accept( Visitor v ) {
        v.visitField(this);
    }

    /**
     * @return constant value associated with this field (may be null)
     */
    public final ConstantValue getConstantValue() {
        for (Attribute attribute : super.getAttributes()) {
            if (attribute.getTag() == Constants.ATTR_CONSTANT_VALUE) {
                return (ConstantValue) attribute;
            }
        }
        return null;
    }

    /**
     * Return string representation close to declaration format,
     * `public static final short MAX = 100', e.g..
     *
     * @return String representation of field, including the signature.
     */
    @Override
    public final String toString() {
        String name;
        String signature;
        String access; // Short cuts to constant pool

        // Get names from constant pool
        access = Utility.accessToString(super.getAccessFlags());
        access = access.equals("") ? "" : (access + " ");
        signature = Utility.signatureToString(getSignature());
        name = getName();
        StringBuilder buf = new StringBuilder(64); // CHECKSTYLE IGNORE MagicNumber
        buf.append(access).append(signature).append(" ").append(name);
        ConstantValue cv = getConstantValue();
        if (cv != null) {
            buf.append(" = ").append(cv);
        }
        for (Attribute attribute : super.getAttributes()) {
            if (!(attribute instanceof ConstantValue)) {
                buf.append(" [").append(attribute).append("]");
            }
        }
        return buf.toString();
    }

    /**
     * @return deep copy of this field
     */
    public final Field copy( ConstantPool _constant_pool ) {
        return (Field) copy_(_constant_pool);
    }

    /**
     * @return type of field
     */
    public Type getType() {
        return Type.getReturnType(getSignature());
    }

    /**
     * @return Comparison strategy object
     */
    public static BCELComparator getComparator() {
        return _cmp;
    }

    /**
     * @param comparator Comparison strategy object
     */
    public static void setComparator( BCELComparator comparator ) {
        _cmp = comparator;
    }

    /**
     * Return value as defined by given BCELComparator strategy.
     * By default two Field objects are said to be equal when
     * their names and signatures are equal.
     *
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals( Object obj ) {
        return _cmp.equals(this, obj);
    }

    /**
     * Return value as defined by given BCELComparator strategy.
     * By default return the hashcode of the field's name XOR signature.
     *
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
        return _cmp.hashCode(this);
    }
}


text:
@charset "UTF-8";

@media all
{
	.pageForm_description {
		font-size: 12px;
	}

	/* Tab-Box */
	.tabbox_tabs {
    	border-bottom: 1px solid #d3d3d3;
	}
	.tabbox_tabs ul {
    	list-style: none;
    	padding: 0;
    	margin: 0;
	}
	.tabbox_tabs li {
    	display: inline;
    	margin: 0 2px 0 0;
	}
	.tabbox_tabs a {
    	padding: 0 1em;
    	text-decoration: none;
    	color: black;
    	background: #d3d3d3;
    	border: 1px solid #d3d3d3;
	}
	.tabbox_tabs a:hover {
    	background: #fc0;
    	color: #540;
	}
	.tabbox_tabs .active a {
    	font-weight: bold;
    	color: #ff6600;
    	background: #ffffff;
	}

	.pnl_toolsarea fieldset, .pnl_listarea fieldset, .pnl_formsarea fieldset {
		border-top: 1px solid #949494;
		margin: 20px 0;
	}
	.pnl_toolsarea fieldset legend , .pnl_listarea fieldset legend {
		font-weight: bold;
		color: #6299c5;
	}
	.pnl_formarea fieldset {
		font-weight: bold;
	}

	/* hide line and legend when inside tabbed content */
	#tabbox_content * .pnl_toolsarea fieldset, #tabbox_content * .pnl_listarea fieldset, #tabbox_content * .pnl_formsarea fieldset { border: none !important; }
	#tabbox_content * .pnl_toolsarea fieldset legend, #tabbox_content * .pnl_listarea fieldset legend, #tabbox_content * .pnl_formsarea fieldset legend { display: none !important; }

	.codeview {
		margin:20px 0;
		padding:2px;
		border: 1px solid #ffcc00;
		background: #fffaea;
		font-family: Consolas, "Lucida Console", "Courier New", monospace;
		font-size: 0.9em;
	}

	/* Lists */
	table.list {
		width: 100%;
		border: 1px solid #d3d3d3 !important;
	}
	table.list thead th { font-size: 10px; }
	table.list tbody { border: 1px solid #d3d3d3 !important; }
	table.list tfoot td { text-align: center;  background: #f8f8f8 url("../../images/lists_tfoot_bg.png") repeat-x bottom left;  padding: 24px 8px 8px 8px; }
	table.list .tbl_row_even { background: #fcfcfc; }
	table.list .tbl_row_uneven { background: #f0f8ff; }
	table.list tr:hover { background: #fffacd; }
	table.list td { word-wrap:break-word;white-space:pre-wrap; }
	table.list td.tbl_col_buttons { word-wrap:normal;white-space:normal; }

        /* Password Strength */
        #passBar {
            width: 101px; height: 10px;
            background: url("../../images/meter_bg.gif") repeat-x bottom left;
            margin: 2px 0;
            float: left;
        }
        #passText {
            padding: 0;
            float: left;
        }

        /* Systemmonitor */
        .systemmonitor-server,
        .systemmonitor-ve,
        .systemmonitor-state {
            margin: 10px 5px;
            font-family: Consolas, "Lucida Console", "Courier New", monospace;
            font-size: 0.9em;
            float: left;
            width: 100%;
        }
        .systemmonitor-server:hover,
        .systemmonitor-vm:hover { background-color: #FFFACD; }
        .state-no_state,
        .state-no_state-ve {
            border-top: 4px solid #95A19F;
            background-color: #f8f8ff;
        }
        .state-unknown,
        .state-unknown-ve {
            border-top: 4px solid #30302e;
            background-color: #cecfc5;
        }
        .state-ok,
        .state-ok-ve {
            border-top: 4px solid #23fb00;
            background-color: #adffa2;
        }
        .state-info,
        .state-info-ve {
            border-top: 4px solid #183e99;
            background-color: #d4e2ff;
        }
        .state-warning,
        .state-warning-ve {
            border-top: 4px solid #ffa800;
            background-color: #ffda93;
        }
        .state-critical,
        .state-critical-ve {
            border-top: 4px solid #ff0000;
            background-color: #ffb9b9;
        }
        .state-error,
        .state-error-ve {
            border-top: 4px solid #ff0000;
            background-color: #ff7f7f;
        }
        div.icoDevice {
            float: left;
            width: 64px;
            height: 64px;
            margin: 5px;
            background: url("../../icons/device_sprite.png") no-repeat transparent;
        }
        .systemmonitor-server div.icoDevice { background-position: 0 0; }
        .systemmonitor-ve div.icoDevice { background-position: -64px 0; }
        .systemmonitor-network div.icoDevice { background-position: -128px -0; }
        div.statusDevice, div.statusMsg { float: left; }

        div.statusMsg p {
            float: left;
            padding: 5px;
        }
        .systemmonitor-state .status {
            margin: 5px;
        }
        .status {
            float: right;
            width: 32px;
            height: 32px;
            background: url("../../icons/x32_sprite.png") no-repeat transparent;
        }
        div.status {
            float: left !important;
        }
        .state-no_state .status,
        .state-no_state-ve .status,
        .state-unknown .status,
        .state-unknown-ve .status { background-position: 0 -207px; }

        .state-ok .status,
        .state-ok-ve .status { background-position: 0 -270px; }

        .state-info .status,
        .state-info-ve .status { background-position: 0 -336px; }

        .state-warning .status,
        .state-warning-ve .status { background-position: 0 -143px; }

        .state-critical .status,
        .state-critical-ve .status { background-position: 0 -463px; }

        .state-error .status,
        .state-error-ve .status { background-position: 0 -400px; }

        /* Usage unknown
        .systemmonitor-content table {
            border: none;
            margin-top: 10px;
        }

        .systemmonitor-content * .online {
            border: 1px solid #ffffff;
            background-color: #E3FFB8;
            color: #000000;
            padding:0px 5px;
        }
        .systemmonitor-content * .offline {
            border: 1px solid #ffffff;
            background-color: #d12f19;
            color:#ffffff;
            padding:0px 5px;
        }*/

        /* Dashboard */
        .dashboard-modules {
                float:left;
                width:60px;
                height: 60px;
                border:1px dotted #888888;
                background-color: #cccccc;
                margin:10px;
                background-position: center 5px;
                background-repeat: no-repeat;
                text-align: center;
        }

        .dashboard-modules a, .dashboard-modules a:hover{
                color:Black;
                display:block;
                font-weight:bold;
                height:30px;
                padding-top:42px;
                width:60px;
                text-decoration: none;
        }

        .dashboard-modules.admin { background-image: url("../../icons/x32/system.png") !important; }
        .dashboard-modules.vm { background-image: url("../../icons/x32/drawer.png") !important; }
        .dashboard-modules.client { background-image: url("../../icons/x32/client.png") !important; }
        .dashboard-modules.mail { background-image: url("../../icons/x32/email.png") !important; }
        .dashboard-modules.monitor { background-image: url("../../icons/x32/monitor.png") !important; }
        .dashboard-modules.dns { background-image: url("../../icons/x32/dns.png") !important; }
        .dashboard-modules.tools { background-image: url("../../icons/x32/tools.png") !important; }
        .dashboard-modules.help { background-image: url("../../icons/x32/help.png") !important; }
        .dashboard-modules.domain { background-image: url("../../icons/x32/domain.png") !important; }
        .dashboard-modules.sites { background-image: url("../../icons/x32/sites.png") !important; }
        .dashboard-modules.billing { background-image: url("../../icons/x32/calculator.png") !important; }

        .panel_dashboard h2 {
                font-size:20px;
        }

        /* Image-Replacement */
        .swap { background-repeat:no-repeat; }
        .swap span { display:none; height:16px; }
        #ir-HeaderLogo { background-image:url("../../images/header_logo.png"); height:32px;margin:0 0 0.2em; }
        #ir-Yes { background-image:url("../../icons/x16/tick_circle.png"); height:16px; }
        #ir-No { background-image:url("../../icons/x16/cross_circle.png"); height:16px; }

        /* BUTTONS */
        .buttons a, .buttons button{
            display:block;
            float:left;
            margin:0 7px 0 0;
            background-color:#f5f5f5;
            border:1px solid #777777;
            border-top: 1px solid #c8c8c8;
            border-left:1px solid #c8c8c8;

            font-family:"Lucida Grande", Tahoma, Arial, Verdana, sans-serif;
            font-size:90%;
            line-height:130%;
            text-decoration:none;
            font-weight:bold;
            color:#565656;
            cursor:pointer;
            padding:5px 10px 6px 7px; /* Links */
        }
        .buttons button{
            width:auto;
            overflow:visible;
            padding:4px 10px 3px 7px; /* IE6 */
        }
        .buttons button[type]{
            padding:5px 10px 5px 7px; /* Firefox */
            line-height:17px; /* Safari */
        }
        *:first-child+html button[type]{
            padding:4px 10px 3px 7px; /* IE7 */
        }
        .buttons button img, .buttons a img{
            margin:0 3px -3px 0 !important;
            padding:0;
            border:none;
            width:16px;
            height:16px;
        }

        /* BUTTONS STANDARD */
        button:hover, .buttons a:hover{
            background-color:#dff4ff;
            border:1px solid #c2e1ef;
            color:#336699;
        }
        .buttons a:active{
            background-color:#6299c5;
            border:1px solid #6299c5;
            color:#fff;
        }

        /* BUTTONS POSITIVE */
        button.positive, .buttons a.positive{
            color:#529214;
        }
        .buttons a.positive:hover, button.positive:hover{
            background-color:#E6EFC2;
            border:1px solid #C6D880;
            color:#529214;
        }
        .buttons a.positive:active{
            background-color:#529214;
            border:1px solid #529214;
            color:#fff;
        }

        /* BUTTONS NEGATIVE */
        .buttons a.negative, button.negative{
            color:#d12f19;
        }
        .buttons a.negative:hover, button.negative:hover{
            background-color:#fbe3e4;
            border:1px solid #fbc2c4;
            color:#d12f19;
        }
        .buttons a.negative:active{
            background-color:#d12f19;
            border:1px solid #d12f19;
            color:#fff;
        }

        /* Button with icon and text */
        .iconstxt {
                background-repeat: no-repeat;
                background-position: 4px center;
        }
        .iconstxt span { padding-left: 20px; }
        .iconstxt.icoPositive { background-image: url("../../icons/x16/tick_circle_frame.png"); }
        .iconstxt.icoNegative { background-image: url("../../icons/x16/cross_circle_frame.png"); }
        .iconstxt.icoAdd { background-image: url("../../icons/x16/plus_circle_frame.png"); }
        .iconstxt.icoKey { background-image: url("../../icons/x16/key.png"); }
        .iconstxt.icoDelete { background-image: url("../../icons/x16/minus_circle_frame.png"); }
        .iconstxt.icoDownload { background-image: url("../../icons/x16/arrow_270.png"); }
        .iconstxt.icoRestore { background-image: url("../../icons/x16/arrow_circle_225.png"); }

        /* Button with icon and without text */
        .icons16 span { display: none; }
        a.icons16 { height: 18px; width: 18px; padding: 0; background-repeat: no-repeat; background-position: 1px 1px;}
        button.icons16 { height: 20px; width: 20px; padding: 0; background-repeat: no-repeat; background-position: 1px 1px;}

        .icons16.icoDelete { background-image: url("../../icons/x16/minus_circle_frame.png"); }
        .icons16.icoFilter { background-image: url("../../icons/x16/funnel.png"); }
        .icons16.icoEdit { background-image: url("../../icons/x16/wrench.png"); }
        .icons16.icoDbAdmin { background-image: url("../../icons/x16/database.png"); }
        .icons16.icoLoginAs { background-image: url("../../icons/x16/user_go.png"); }
        .icons16.icoWebmailer { background-image: url("../../icons/x16/mails_arrow.png"); }
        .icons16.icoPDF { background-image: url("../../icons/x16/pdf.png"); }
        .icons16.icoAction { background-image: url("../../icons/x16/arrow.png"); }

        #ajaxloader {
                text-align:center;
                margin-top: 180px;
        }

        .blockLabel.email_at {
                width: 20px !important;
                margin: 1.6em 0.3em 0 0 !important
        }
        .textDisplay { display: block; }

        /* Form Length Classes */
        .textInput.formLengthBool { width: 25px !important; }
        .selectInput.formLengthBool { width: 60px !important; }
        .textInput.formLengthLimit { width: 50px !important; }
        .selectInput.formLengthLimit { width: 85px !important; }
        .formLengthDate { width: 75px !important; }
        .formLengthIPv4 { width: 125px !important; }
        .formLengthIPv6 { width: 100% !important; }
        .formLengthEmailUser { width: 30% !important; }
        .formLengthEmailDomain { width: 30% !important; }
        .formLengthHalf { width: 15% !important; }
        .formLengthDouble { width: 50% !important; }

        /* Individual Form Lengths */
        .textInput#username, .textInput#password, .textInput#passwort, .textInput#source_password { width: 100px; }
        .selectInput#language {	width: 75px; }
        .selectInput#client_group_id, .selectInput#default_group { width: 125px; }
        input#refresh, input#retry, input#expire, input#minimum, input#ttl { width: 50px !important; }

        /* --- */

        a[href $='#logout'] { padding-right: 18px; background: transparent url("../../icons/x16/logout.png") no-repeat right top !important;	}

        /* Select Menu with Images */
        select.withicons option {
                background-repeat:no-repeat;
                background-position: 1px;
                padding-left:24px;
        }
        select.flags option {
            background-image: url("../../icons/flags_sprite.png");
            background-repeat: no-repeat;
            padding: 1px 0 1px 30px;
        }

        select.flags option[value=EL] {background-position:0 -1475px}
        select.flags option[value=AD], select.flags option[value=ad] {background-position:0 -1px}
        select.flags option[value=AE], select.flags option[value=ae] {background-position:0 -23px}
        select.flags option[value=AF], select.flags option[value=af] {background-position:0 -45px}
        select.flags option[value=AG], select.flags option[value=ag] {background-position:0 -67px}
        select.flags option[value=AI], select.flags option[value=ai] {background-position:0 -89px}
        select.flags option[value=AL], select.flags option[value=al] {background-position:0 -111px}
        select.flags option[value=AM], select.flags option[value=am] {background-position:0 -133px}
        select.flags option[value=AN], select.flags option[value=an] {background-position:0 -155px}
        select.flags option[value=AO], select.flags option[value=ao] {background-position:0 -177px}
        select.flags option[value=AQ], select.flags option[value=aq] {background-position:0 -199px}
        select.flags option[value=AR], select.flags option[value=ar] {background-position:0 -221px}
        select.flags option[value=AS], select.flags option[value=as] {background-position:0 -243px}
        select.flags option[value=AT], select.flags option[value=at] {background-position:0 -265px}
        select.flags option[value=AU], select.flags option[value=au] {background-position:0 -287px}
        select.flags option[value=AW], select.flags option[value=aw] {background-position:0 -309px}
        select.flags option[value=AX], select.flags option[value=ax] {background-position:0 -331px}
        select.flags option[value=AZ], select.flags option[value=az] {background-position:0 -353px}
        select.flags option[value=BA], select.flags option[value=ba] {background-position:0 -375px}
        select.flags option[value=BB], select.flags option[value=bb] {background-position:0 -397px}
        select.flags option[value=BD], select.flags option[value=bd] {background-position:0 -419px}
        select.flags option[value=BE], select.flags option[value=be] {background-position:0 -441px}
        select.flags option[value=BF], select.flags option[value=bf] {background-position:0 -463px}
        select.flags option[value=BG], select.flags option[value=bg] {background-position:0 -485px}
        select.flags option[value=BH], select.flags option[value=bh] {background-position:0 -507px}
        select.flags option[value=BI], select.flags option[value=bi] {background-position:0 -529px}
        select.flags option[value=BJ], select.flags option[value=bj] {background-position:0 -551px}
        select.flags option[value=BM], select.flags option[value=bm] {background-position:0 -573px}
        select.flags option[value=BN], select.flags option[value=bn] {background-position:0 -595px}
        select.flags option[value=BO], select.flags option[value=bo] {background-position:0 -617px}
        select.flags option[value=BR], select.flags option[value=br] {background-position:0 -639px}
        select.flags option[value=BS], select.flags option[value=bs] {background-position:0 -661px}
        select.flags option[value=BT], select.flags option[value=bt] {background-position:0 -683px}
        select.flags option[value=BV], select.flags option[value=bv] {background-position:0 -705px}
        select.flags option[value=BW], select.flags option[value=bw] {background-position:0 -727px}
        select.flags option[value=BY], select.flags option[value=by] {background-position:0 -749px}
        select.flags option[value=BZ], select.flags option[value=bz] {background-position:0 -771px}
        select.flags option[value=CA], select.flags option[value=ca] {background-position:0 -793px}
        select.flags option[value=CC], select.flags option[value=cc] {background-position:0 -837px}
        select.flags option[value=CD], select.flags option[value=cd] {background-position:0 -859px}
        select.flags option[value=CF], select.flags option[value=cf] {background-position:0 -881px}
        select.flags option[value=CG], select.flags option[value=cg] {background-position:0 -903px}
        select.flags option[value=CH], select.flags option[value=ch] {background-position:0 -925px}
        select.flags option[value=CI], select.flags option[value=ci] {background-position:0 -947px}
        select.flags option[value=CK], select.flags option[value=ck] {background-position:0 -969px}
        select.flags option[value=CL], select.flags option[value=cl] {background-position:0 -991px}
        select.flags option[value=CM], select.flags option[value=cm] {background-position:0 -1013px}
        select.flags option[value=CN], select.flags option[value=cn] {background-position:0 -1035px}
        select.flags option[value=CO], select.flags option[value=co] {background-position:0 -1057px}
        select.flags option[value=CR], select.flags option[value=cr] {background-position:0 -1079px}
        select.flags option[value=CS], select.flags option[value=cs] {background-position:0 -1101px}
        select.flags option[value=CU], select.flags option[value=cu] {background-position:0 -1123px}
        select.flags option[value=CV], select.flags option[value=cv] {background-position:0 -1145px}
        select.flags option[value=CX], select.flags option[value=cx] {background-position:0 -1167px}
        select.flags option[value=CY], select.flags option[value=cy] {background-position:0 -1189px}
        select.flags option[value=CZ], select.flags option[value=cz] {background-position:0 -1211px}
        select.flags option[value=DE], select.flags option[value=de] {background-position:0 -1233px}
        select.flags option[value=DJ], select.flags option[value=dj] {background-position:0 -1255px}
        select.flags option[value=DK], select.flags option[value=dk] {background-position:0 -1277px}
        select.flags option[value=DM], select.flags option[value=dm] {background-position:0 -1299px}
        select.flags option[value=DO], select.flags option[value=do] {background-position:0 -1321px}
        select.flags option[value=DZ], select.flags option[value=dz] {background-position:0 -1343px}
        select.flags option[value=EC], select.flags option[value=ec] {background-position:0 -1365px}
        select.flags option[value=EE], select.flags option[value=ee] {background-position:0 -1387px}
        select.flags option[value=EG], select.flags option[value=eg] {background-position:0 -1409px}
        select.flags option[value=EH], select.flags option[value=eh] {background-position:0 -1431px}
        select.flags option[value=ER], select.flags option[value=er] {background-position:0 -1497px}
        select.flags option[value=ES], select.flags option[value=ET], select.flags option[value=es], select.flags option[value=et] {background-position:0 -1519px}
        select.flags option[value=FI], select.flags option[value=fi] {background-position:0 -1585px}
        select.flags option[value=FJ], select.flags option[value=fj] {background-position:0 -1607px}
        select.flags option[value=FK], select.flags option[value=fk] {background-position:0 -1629px}
        select.flags option[value=FM], select.flags option[value=fm] {background-position:0 -1651px}
        select.flags option[value=FO], select.flags option[value=fo] {background-position:0 -1673px}
        select.flags option[value=FR], select.flags option[value=fr] {background-position:0 -1695px}
        select.flags option[value=GA], select.flags option[value=ga] {background-position:0 -1717px}
        select.flags option[value=GB], select.flags option[value=en], select.flags option[value=gb] {background-position:0 -1739px}
        select.flags option[value=GD], select.flags option[value=gd] {background-position:0 -1761px}
        select.flags option[value=GE], select.flags option[value=ge] {background-position:0 -1783px}
        select.flags option[value=GF], select.flags option[value=gf] {background-position:0 -1805px}
        select.flags option[value=GH], select.flags option[value=gh] {background-position:0 -1827px}
        select.flags option[value=GI], select.flags option[value=gi] {background-position:0 -1849px}
        select.flags option[value=GL], select.flags option[value=gl] {background-position:0 -1871px}
        select.flags option[value=GM], select.flags option[value=gm] {background-position:0 -1893px}
        select.flags option[value=GN], select.flags option[value=gn] {background-position:0 -1915px}
        select.flags option[value=GP], select.flags option[value=gp] {background-position:0 -1937px}
        select.flags option[value=GQ], select.flags option[value=gq] {background-position:0 -1959px}
        select.flags option[value=GR], select.flags option[value=el], select.flags option[value=gr] {background-position:0 -1981px}
        select.flags option[value=GS], select.flags option[value=gs] {background-position:0 -2003px}
        select.flags option[value=GT], select.flags option[value=gt] {background-position:0 -2025px}
        select.flags option[value=GU], select.flags option[value=gu] {background-position:0 -2047px}
        select.flags option[value=GW], select.flags option[value=gw] {background-position:0 -2069px}
        select.flags option[value=GY], select.flags option[value=gy] {background-position:0 -2091px}
        select.flags option[value=HK], select.flags option[value=hk] {background-position:0 -2113px}
        select.flags option[value=HM], select.flags option[value=hm] {background-position:0 -2135px}
        select.flags option[value=HN], select.flags option[value=hn] {background-position:0 -2157px}
        select.flags option[value=HR], select.flags option[value=hr] {background-position:0 -2179px}
        select.flags option[value=HT], select.flags option[value=ht] {background-position:0 -2201px}
        select.flags option[value=HU], select.flags option[value=hu] {background-position:0 -2223px}
        select.flags option[value=ID], select.flags option[value=id] {background-position:0 -2245px}
        select.flags option[value=IE], select.flags option[value=ie] {background-position:0 -2267px}
        select.flags option[value=IL], select.flags option[value=il] {background-position:0 -2289px}
        select.flags option[value=IN], select.flags option[value=in] {background-position:0 -2311px}
        select.flags option[value=IO], select.flags option[value=io] {background-position:0 -2333px}
        select.flags option[value=IQ], select.flags option[value=iq] {background-position:0 -2355px}
        select.flags option[value=IR], select.flags option[value=ir] {background-position:0 -2377px}
        select.flags option[value=IS], select.flags option[value=is] {background-position:0 -2399px}
        select.flags option[value=IT], select.flags option[value=it] {background-position:0 -2421px}
        select.flags option[value=JM], select.flags option[value=jm] {background-position:0 -2443px}
        select.flags option[value=JO], select.flags option[value=jo] {background-position:0 -2465px}
        select.flags option[value=JP], select.flags option[value=ja], select.flags option[value=jp] {background-position:0 -2487px}
        select.flags option[value=KE], select.flags option[value=ke] {background-position:0 -2509px}
        select.flags option[value=KG], select.flags option[value=kg] {background-position:0 -2531px}
        select.flags option[value=KH], select.flags option[value=kh] {background-position:0 -2553px}
        select.flags option[value=KI], select.flags option[value=ki] {background-position:0 -2575px}
        select.flags option[value=KM], select.flags option[value=km] {background-position:0 -2597px}
        select.flags option[value=KN], select.flags option[value=kn] {background-position:0 -2619px}
        select.flags option[value=KP], select.flags option[value=kp] {background-position:0 -2641px}
        select.flags option[value=KR], select.flags option[value=kr] {background-position:0 -2663px}
        select.flags option[value=KW], select.flags option[value=kw] {background-position:0 -2685px}
        select.flags option[value=KY], select.flags option[value=ky] {background-position:0 -2707px}
        select.flags option[value=KZ], select.flags option[value=kz] {background-position:0 -2729px}
        select.flags option[value=LA], select.flags option[value=la] {background-position:0 -2751px}
        select.flags option[value=LB], select.flags option[value=lb] {background-position:0 -2773px}
        select.flags option[value=LC], select.flags option[value=lc] {background-position:0 -2795px}
        select.flags option[value=LI], select.flags option[value=li] {background-position:0 -2817px}
        select.flags option[value=LK], select.flags option[value=lk] {background-position:0 -2839px}
        select.flags option[value=LR], select.flags option[value=lr] {background-position:0 -2861px}
        select.flags option[value=LS], select.flags option[value=ls] {background-position:0 -2883px}
        select.flags option[value=LT], select.flags option[value=lt] {background-position:0 -2905px}
        select.flags option[value=LU], select.flags option[value=lu] {background-position:0 -2927px}
        select.flags option[value=LV], select.flags option[value=lv] {background-position:0 -2949px}
        select.flags option[value=LY], select.flags option[value=ly] {background-position:0 -2971px}
        select.flags option[value=MA], select.flags option[value=ma] {background-position:0 -2993px}
        select.flags option[value=MC], select.flags option[value=mc] {background-position:0 -3015px}
        select.flags option[value=MD], select.flags option[value=md] {background-position:0 -3037px}
        select.flags option[value=ME], select.flags option[value=me] {background-position:0 -3059px}
        select.flags option[value=MG], select.flags option[value=mg] {background-position:0 -3081px}
        select.flags option[value=MH], select.flags option[value=mh] {background-position:0 -3103px}
        select.flags option[value=MK], select.flags option[value=mk] {background-position:0 -3125px}
        select.flags option[value=ML], select.flags option[value=ml] {background-position:0 -3147px}
        select.flags option[value=MM], select.flags option[value=mm] {background-position:0 -3169px}
        select.flags option[value=MN], select.flags option[value=mn] {background-position:0 -3191px}
        select.flags option[value=MO], select.flags option[value=mo] {background-position:0 -3213px}
        select.flags option[value=MP], select.flags option[value=mp] {background-position:0 -3235px}
        select.flags option[value=MQ], select.flags option[value=mq] {background-position:0 -3257px}
        select.flags option[value=MR], select.flags option[value=mr] {background-position:0 -3279px}
        select.flags option[value=MS], select.flags option[value=ms] {background-position:0 -3301px}
        select.flags option[value=MT], select.flags option[value=mt] {background-position:0 -3323px}
        select.flags option[value=MU], select.flags option[value=mu] {background-position:0 -3345px}
        select.flags option[value=MV], select.flags option[value=mv] {background-position:0 -3367px}
        select.flags option[value=MW], select.flags option[value=mw] {background-position:0 -3389px}
        select.flags option[value=MX], select.flags option[value=mx] {background-position:0 -3411px}
        select.flags option[value=MY], select.flags option[value=my] {background-position:0 -3433px}
        select.flags option[value=MZ], select.flags option[value=mz] {background-position:0 -3455px}
        select.flags option[value=NA], select.flags option[value=na] {background-position:0 -3477px}
        select.flags option[value=NC], select.flags option[value=nc] {background-position:0 -3499px}
        select.flags option[value=NE], select.flags option[value=ne] {background-position:0 -3521px}
        select.flags option[value=NF], select.flags option[value=nf] {background-position:0 -3543px}
        select.flags option[value=NG], select.flags option[value=ng] {background-position:0 -3565px}
        select.flags option[value=NI], select.flags option[value=ni] {background-position:0 -3587px}
        select.flags option[value=NL], select.flags option[value=nl] {background-position:0 -3609px}
        select.flags option[value=NO], select.flags option[value=no] {background-position:0 -3631px}
        select.flags option[value=NP], select.flags option[value=np] {background-position:0 -3653px}
        select.flags option[value=NR], select.flags option[value=nr] {background-position:0 -3675px}
        select.flags option[value=NU], select.flags option[value=nu] {background-position:0 -3697px}
        select.flags option[value=NZ], select.flags option[value=nz] {background-position:0 -3719px}
        select.flags option[value=OM], select.flags option[value=om] {background-position:0 -3741px}
        select.flags option[value=PA], select.flags option[value=pa] {background-position:0 -3763px}
        select.flags option[value=PE], select.flags option[value=pe] {background-position:0 -3785px}
        select.flags option[value=PF], select.flags option[value=pf] {background-position:0 -3807px}
        select.flags option[value=PG], select.flags option[value=pg] {background-position:0 -3829px}
        select.flags option[value=PH], select.flags option[value=ph] {background-position:0 -3851px}
        select.flags option[value=PK], select.flags option[value=pk] {background-position:0 -3873px}
        select.flags option[value=PL], select.flags option[value=pl] {background-position:0 -3895px}
        select.flags option[value=PM], select.flags option[value=pm] {background-position:0 -3917px}
        select.flags option[value=PN], select.flags option[value=pn] {background-position:0 -3939px}
        select.flags option[value=PR], select.flags option[value=pr] {background-position:0 -3961px}
        select.flags option[value=PS], select.flags option[value=ps] {background-position:0 -3983px}
        select.flags option[value=PT], select.flags option[value=pt] {background-position:0 -4005px}
        select.flags option[value=PW], select.flags option[value=pw] {background-position:0 -4027px}
        select.flags option[value=PY], select.flags option[value=py] {background-position:0 -4049px}
        select.flags option[value=QA], select.flags option[value=qa] {background-position:0 -4071px}
        select.flags option[value=RE], select.flags option[value=re] {background-position:0 -4093px}
        select.flags option[value=RO], select.flags option[value=ro] {background-position:0 -4115px}
        select.flags option[value=RS], select.flags option[value=rs] {background-position:0 -4137px}
        select.flags option[value=RU], select.flags option[value=ru] {background-position:0 -4159px}
        select.flags option[value=RW], select.flags option[value=rw] {background-position:0 -4181px}
        select.flags option[value=SA], select.flags option[value=sa] {background-position:0 -4203px}
        select.flags option[value=SB], select.flags option[value=sb] {background-position:0 -4225px}
        select.flags option[value=SC], select.flags option[value=sc] {background-position:0 -4247px}
        select.flags option[value=SD], select.flags option[value=sd] {background-position:0 -4291px}
        select.flags option[value=SE], select.flags option[value=se] {background-position:0 -4313px}
        select.flags option[value=SG], select.flags option[value=sg] {background-position:0 -4335px}
        select.flags option[value=SH], select.flags option[value=sh] {background-position:0 -4357px}
        select.flags option[value=SI], select.flags option[value=si] {background-position:0 -4379px}
        select.flags option[value=SJ], select.flags option[value=sj] {background-position:0 -4401px}
        select.flags option[value=SK], select.flags option[value=sk] {background-position:0 -4423px}
        select.flags option[value=SL], select.flags option[value=sl] {background-position:0 -4445px}
        select.flags option[value=SM], select.flags option[value=sm] {background-position:0 -4467px}
        select.flags option[value=SN], select.flags option[value=sn] {background-position:0 -4489px}
        select.flags option[value=SO], select.flags option[value=so] {background-position:0 -4511px}
        select.flags option[value=SR], select.flags option[value=sr] {background-position:0 -4533px}
        select.flags option[value=ST], select.flags option[value=st] {background-position:0 -4555px}
        select.flags option[value=SV], select.flags option[value=sv] {background-position:0 -4577px}
        select.flags option[value=SY], select.flags option[value=sy] {background-position:0 -4599px}
        select.flags option[value=SZ], select.flags option[value=sz] {background-position:0 -4621px}
        select.flags option[value=TC], select.flags option[value=tc] {background-position:0 -4643px}
        select.flags option[value=TD], select.flags option[value=td] {background-position:0 -4665px}
        select.flags option[value=TF], select.flags option[value=tf] {background-position:0 -4687px}
        select.flags option[value=TG], select.flags option[value=tg] {background-position:0 -4709px}
        select.flags option[value=TH], select.flags option[value=th] {background-position:0 -4731px}
        select.flags option[value=TJ], select.flags option[value=tj] {background-position:0 -4753px}
        select.flags option[value=TK], select.flags option[value=tk] {background-position:0 -4775px}
        select.flags option[value=TL], select.flags option[value=tl] {background-position:0 -4797px}
        select.flags option[value=TM], select.flags option[value=tm] {background-position:0 -4819px}
        select.flags option[value=TN], select.flags option[value=tn] {background-position:0 -4841px}
        select.flags option[value=TO], select.flags option[value=to] {background-position:0 -4863px}
        select.flags option[value=TR], select.flags option[value=tr] {background-position:0 -4885px}
        select.flags option[value=TT], select.flags option[value=tt] {background-position:0 -4907px}
        select.flags option[value=TV], select.flags option[value=tv] {background-position:0 -4929px}
        select.flags option[value=TW], select.flags option[value=tw] {background-position:0 -4951px}
        select.flags option[value=TZ], select.flags option[value=tz] {background-position:0 -4973px}
        select.flags option[value=UA], select.flags option[value=ua] {background-position:0 -4995px}
        select.flags option[value=UG], select.flags option[value=ug] {background-position:0 -5017px}
        select.flags option[value=UM], select.flags option[value=um] {background-position:0 -5039px}
        select.flags option[value=US], select.flags option[value=us] {background-position:0 -5061px}
        select.flags option[value=UY], select.flags option[value=uy] {background-position:0 -5083px}
        select.flags option[value=UZ], select.flags option[value=uz] {background-position:0 -5105px}
        select.flags option[value=VA], select.flags option[value=va] {background-position:0 -5127px}
        select.flags option[value=VC], select.flags option[value=vc] {background-position:0 -5149px}
        select.flags option[value=VE], select.flags option[value=ve] {background-position:0 -5171px}
        select.flags option[value=VG], select.flags option[value=vg] {background-position:0 -5193px}
        select.flags option[value=VI], select.flags option[value=vi] {background-position:0 -5215px}
        select.flags option[value=VN], select.flags option[value=vn] {background-position:0 -5237px}
        select.flags option[value=VU], select.flags option[value=vu] {background-position:0 -5259px}
        select.flags option[value=WF], select.flags option[value=wf] {background-position:0 -5303px}
        select.flags option[value=WS], select.flags option[value=ws] {background-position:0 -5325px}
        select.flags option[value=YE], select.flags option[value=ye] {background-position:0 -5347px}
        select.flags option[value=YT], select.flags option[value=yt] {background-position:0 -5369px}
        select.flags option[value=ZA], select.flags option[value=za] {background-position:0 -5391px}
        select.flags option[value=ZM], select.flags option[value=zm] {background-position:0 -5413px}
        select.flags option[value=ZW], select.flags option[value=zw] {background-position:0 -5435px}

	.panel_login {
		max-width: 80%;
		min-width: 680px;
	}

	div.subsectiontoggle {
		border:1px solid #ccc;
		font-weight:bold;
		font-size:14px;
		padding-top:10px;
		padding-bottom:0;
		margin-top:5px;
		text-indent:15px;
		cursor:pointer;
		margin-bottom:10px;
		background-color:#f4f4f4;
		-moz-border-radius:5px;
		-webkit-border-radius:5px;
		-khtml-border-radius:5px;
		-o-border-radius:5px;
		-ms-border-radius:5px;
		border-radius:5px;
	}
	div.subsectiontoggle span{
		display:inline-block;
		margin-bottom:-3px;
		margin-right:10px;
		width:16px;
		height:16px;
		background:url("../../icons/x16/plus_circle_frame.png") top left no-repeat;
	}
	div.subsectiontoggle span.showing{
		background:url("../../icons/x16/minus_circle_frame.png") top left no-repeat;
	}
	div.subsectiontoggle em{
		display:block;
		position:relative;
		left:425px;
		top:-13px;
		margin-bottom:-3px;
		width:13px;
		height:13px;
		background:url("../../images/chevron.png") top left no-repeat;
		-webkit-transform:none;
		-moz-transform:none;
		-khtml-transform:none;
		-o-transform:none;
		-ms-transform:none;
		transform:none;
		-webkit-transition-duration: .2s;
		-moz-transition-duration: .2s;
		-khtml-transition-duration: .2s;
		-o-transition-duration: .2s;
		-ms-transition-duration: .2s;
		transition-duration: .2s;
		-webkit-transition-property: -webkit-transform;
		-moz-transition-property: -moz-transform;
		-khtml-transition-property: -khtml-transform;
		-o-transition-property: -o-transform;
		-ms-transition-property: -ms-transform;
		transition-property: transform;
	}
	div.subsectiontoggle em.showing{
		display:block;
		position:relative;
		left:425px;
		top:-13px;
		background:url("../../images/chevron.png") top left no-repeat;
		width:13px;
		height:13px;
		-webkit-transform:rotate(90deg);
		-moz-transform:rotate(90deg);
		-khtml-transform:rotate(90deg);
		-o-transform:rotate(90deg);
		-ms-transform:rotate(90deg);
		transform:rotate(90deg);
	}
	div.subsectiontoggle:hover em{
		-webkit-transform:rotate(90deg);
		-moz-transform:rotate(90deg);
		-khtml-transform:rotate(90deg);
		-o-transform:rotate(90deg);
		-ms-transform:rotate(90deg);
		transform:rotate(90deg);
	}

	div.gs-container{
		margin-top:10px;
	}
	div.gs-container *{
		margin: 0;
		padding: 0;
		background-position: 0 0;
		text-decoration: none;
		font-size: 1em;
	}
	div.gs-container input{
                background: url("../../icons/x16/magnifier_left.png") no-repeat 4px 3px #FFFFFF;
		height:20px;
		border:1px solid #444;
		padding:0 22px 2px;
		color:#444;
		-moz-border-radius:5px;
		-webkit-border-radius:5px;
		-khtml-border-radius:5px;
		-o-border-radius:5px;
		-ms-border-radius:5px;
		border-radius:5px;
	}
	input.gs-loading{
		background-image: url("../../icons/x16/loading.gif");
		background-repeat: no-repeat;
		background-position: center right;
	}
	ul.gs-resultbox{
		margin: 0 !important;
		padding: 0 !important;
		width: 300px;
		z-index: 999999;
		border: 1px solid #777;
		font-size: 11px;
		background: #fff;
		-moz-box-shadow: 2px 2px 5px 0 #c5c5c5;
		-webkit-box-shadow: 2px 2px 5px 0 #c5c5c5;
		-khtml-box-shadow: 2px 2px 5px 0 #c5c5c5;
		-o-box-shadow: 2px 2px 5px 0 #c5c5c5;
		-ms-box-shadow: 2px 2px 5px 0 #c5c5c5;
		box-shadow: 2px 2px 5px 0 #c5c5c5;
		list-style: none;
		-moz-border-radius:5px;
		-webkit-border-radius:5px;
		-khtml-border-radius:5px;
		-o-border-radius:5px;
		-ms-border-radius:5px;
		border-radius:5px;
                max-height:500px;
                overflow:auto;
	}
	ul.gs-resultbox li{
		float: left;
		width: 100%;
		clear: both;
		cursor: pointer;
	}
	ul.gs-resultbox li.gs-cheader{
		height: 13px;
		overflow: hidden;
		padding: 5px 0;
		color: #fff;
		background: #6ea6d1;
		cursor:default;
		padding-bottom:10px;
	}
	ul.gs-resultbox li.gs-cheader p.gs-cheader-title{
		margin: 0 !important;
		padding: 0 0 0 10px !important;
		float: left;
		font-size: 12px;
		font-weight: bold;
	}
	ul.gs-resultbox li.gs-cheader p.gs-cheader-limit{
		margin: 0 !important;
		padding: 0 10px 0 0 !important;
		float: right;
		font-size: 11px;
		font-weight: normal;
	}
	ul.gs-resultbox li.gs-cdata{
		margin: 0 !important;
		padding: 0 !important;
		border-bottom: 1px solid #c5c5c5;
	}
	ul.gs-resultbox li.gs-cdata:last-child{
		border-bottom: none;
	}
	ul.gs-resultbox li.gs-cdata:hover{
		background: #eaf4fd;
	}
	ul.gs-resultbox li.gs-cdata a{
		display: block;
		padding: 5px 10px;
		text-decoration: none !important;
		background: #fff;
	}
	ul.gs-resultbox li.gs-cdata a:hover{
		background: #cde0ff;
	}
	ul.gs-resultbox li.gs-cdata img{
		margin-right: 12px;
	}
	ul.gs-resultbox li.gs-cdata p{
		margin: 0 !important;
		padding: 0 !important;
		color: #444;
		font-size: 10px;
		min-height:30px;
	}
	ul.gs-resultbox li.gs-cdata p span.gs-cdata-title{
		display: inline !important;
		margin: 0 !important;
		padding: 0 !important;
		font-size: 11px;
		font-weight: bold;
		color: #000;
	}
	ul.gs-resultbox li:first-child{
		-moz-border-radius:5px 5px 0 0;
		-webkit-border-radius:5px 5px 0 0;
		-khtml-border-radius:5px 5px 0 0;
		-o-border-radius:5px 5px 0 0;
		-ms-border-radius:5px 5px 0 0;
		border-radius:5px 5px 0 0;
	}
	ul.gs-resultbox li:last-child{
		-moz-border-radius:0 0 5px 5px;
		-webkit-border-radius:0 0 5px 5px;
		-khtml-border-radius:0 0 5px 5px;
		-o-border-radius:0 0 5px 5px;
		-ms-border-radius:0 0 5px 5px;
		border-radius:0 0 5px 5px;
	}

	div.df-container{
	}
	div.df-container *{
		margin: 0;
		padding: 0;
		background-position: 0 0;
		text-decoration: none;
		font-size: 1em;
	}
	div.df-container input{
	}
	input.df-loading{
		background-image: url("../../icons/x16/loading.gif");
		background-repeat: no-repeat;
		background-position: center right;
	}
	ul.df-resultbox{
		margin: 0 !important;
		padding: 0 !important;
		min-width: 250px;
		max-width: 500px;
		z-index: 999999;
		border: 1px solid #777;
		font-size: 11px;
		background: #fff;
		-moz-box-shadow: 2px 2px 5px 0 #c5c5c5;
		-webkit-box-shadow: 2px 2px 5px 0 #c5c5c5;
		-khtml-box-shadow: 2px 2px 5px 0 #c5c5c5;
		-o-box-shadow: 2px 2px 5px 0 #c5c5c5;
		-ms-box-shadow: 2px 2px 5px 0 #c5c5c5;
		box-shadow: 2px 2px 5px 0 #c5c5c5;
		list-style: none;
		-moz-border-radius:5px;
		-webkit-border-radius:5px;
		-khtml-border-radius:5px;
		-o-border-radius:5px;
		-ms-border-radius:5px;
		border-radius:5px;
	}
	ul.df-resultbox li{
		float: left;
		width: 100%;
		clear: both;
		cursor: pointer;
	}
	ul.df-resultbox li.df-cheader{
		height: 13px;
		overflow: hidden;
		padding: 5px 0;
		color: #fff;
		background: #6ea6d1;
		cursor:default;
		padding-bottom:10px;
	}
	ul.df-resultbox li.df-cheader p.df-cheader-title{
		margin: 0 !important;
		padding: 0 0 0 10px !important;
		float: left;
		font-size: 12px;
		font-weight: bold;
	}
	ul.df-resultbox li.df-cheader p.df-cheader-limit{
		margin: 0 !important;
		padding: 0 10px 0 0 !important;
		float: right;
		font-size: 11px;
		font-weight: normal;
	}
	ul.df-resultbox li.df-cdata{
		margin: 0 !important;
		padding: 0 !important;
		border-bottom: 1px solid #c5c5c5;
	}
	ul.df-resultbox li.df-cdata:last-child{
		border-bottom: none;
	}
	ul.df-resultbox li.df-cdata:hover{
		background: #eaf4fd;
	}
	ul.df-resultbox li.df-cdata a{
		display: block;
		padding: 5px 10px;
		text-decoration: none !important;
		background: #fff;
	}
	ul.df-resultbox li.df-cdata a:hover{
		background: #cde0ff;
	}
	ul.df-resultbox li.df-cdata img{
		margin-right: 12px;
	}
	ul.df-resultbox li.df-cdata p{
		margin: 0 !important;
		padding: 0 !important;
		color: #444;
		font-size: 10px;
		min-height:30px;
	}
	ul.df-resultbox li.df-cdata p span.df-cdata-title{
		display: inline !important;
		margin: 0 !important;
		padding: 0 !important;
		font-size: 11px;
		font-weight: bold;
		color: #000;
	}
	ul.df-resultbox li:first-child{
		-moz-border-radius:5px 5px 0 0;
		-webkit-border-radius:5px 5px 0 0;
		-khtml-border-radius:5px 5px 0 0;
		-o-border-radius:5px 5px 0 0;
		-ms-border-radius:5px 5px 0 0;
		border-radius:5px 5px 0 0;
	}
	ul.df-resultbox li:last-child{
		-moz-border-radius:0 0 5px 5px;
		-webkit-border-radius:0 0 5px 5px;
		-khtml-border-radius:0 0 5px 5px;
		-o-border-radius:0 0 5px 5px;
		-ms-border-radius:0 0 5px 5px;
		border-radius:0 0 5px 5px;
	}

	span.icons16-empty{
		float:left;
		display:block;
		height:20px;
		width:20px;
		margin:0 7px 0 0;
	}

	.ttip{
		width:16px;
		height:16px;
		cursor:pointer;
		background: url("../../icons/x16/question_frame.png") no-repeat center center;
		float:right;
		display:inline;
		position:relative;
		right:-2px;
		top:-2px;
	}

        p.prefix {
            float: left;
            margin: 0;
            text-align: right;
        }
        p.label {
            float: left;
            margin: 5px 15px 0 0;
        }
        p.value {
            float:left;
            margin: 0 0 0 2px;
        }
        select.search_limit {
            width: 50px;
        }
}


text:
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "services/tracing/public/cpp/perfetto/perfetto_tracing_backend.h"

#include "base/containers/flat_map.h"
#include "base/containers/flat_set.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/task/post_task.h"
#include "base/tracing/tracing_tls.h"
#include "build/build_config.h"
#include "mojo/public/cpp/system/data_pipe_drainer.h"
#include "services/tracing/public/cpp/perfetto/perfetto_producer.h"
#include "services/tracing/public/cpp/perfetto/shared_memory.h"
#include "services/tracing/public/cpp/perfetto/trace_event_data_source.h"
#include "services/tracing/public/cpp/perfetto/trace_packet_tokenizer.h"
#include "services/tracing/public/mojom/perfetto_service.mojom.h"
#include "services/tracing/public/mojom/tracing_service.mojom.h"
#include "third_party/perfetto/include/perfetto/base/task_runner.h"
#include "third_party/perfetto/include/perfetto/ext/tracing/core/commit_data_request.h"
#include "third_party/perfetto/include/perfetto/ext/tracing/core/consumer.h"
#include "third_party/perfetto/include/perfetto/ext/tracing/core/producer.h"
#include "third_party/perfetto/include/perfetto/ext/tracing/core/shared_memory_arbiter.h"
#include "third_party/perfetto/include/perfetto/ext/tracing/core/trace_packet.h"
#include "third_party/perfetto/include/perfetto/ext/tracing/core/trace_stats.h"
#include "third_party/perfetto/include/perfetto/ext/tracing/core/trace_writer.h"
#include "third_party/perfetto/include/perfetto/ext/tracing/core/tracing_service.h"
#include "third_party/perfetto/include/perfetto/tracing/core/trace_config.h"

namespace tracing {
namespace {

// TODO(crbug.com/83907): Find a good compromise between performance and
// data granularity (mainly relevant to running with small buffer sizes
// when we use background tracing) on Android.
#if BUILDFLAG(IS_ANDROID)
constexpr size_t kDefaultSMBPageSizeBytes = 4 * 1024;
#else
constexpr size_t kDefaultSMBPageSizeBytes = 32 * 1024;
#endif

// TODO(crbug.com/839071): Figure out a good buffer size.
constexpr size_t kDefaultSMBSizeBytes = 4 * 1024 * 1024;

constexpr char kErrorTracingFailed[] = "Tracing failed";

}  // namespace

// Implements Perfetto's ProducerEndpoint interface on top of the
// PerfettoService mojo service.
class ProducerEndpoint : public perfetto::ProducerEndpoint,
                         public mojom::ProducerClient {
 public:
  ProducerEndpoint(PerfettoTracingBackend::Delegate& delegate,
                   const std::string& producer_name,
                   perfetto::Producer* producer,
                   perfetto::base::TaskRunner* producer_task_runner,
                   size_t shmem_size_hint_bytes,
                   size_t shmem_page_size_hint_bytes)
      : producer_(producer) {
    // The producers's task runner must match where the endpoint is
    // constructed; otherwise we can't safely use a weak pointer to send
    // events back to the producer. |producer_task_runner| is also assumed to
    // outlive this endpoint.
    DCHECK(producer_task_runner->RunsTasksOnCurrentThread());
    delegate.CreateProducerConnection(
        base::BindOnce(&ProducerEndpoint::OnConnected,
                       weak_factory_.GetWeakPtr(), producer_task_runner,
                       shmem_size_hint_bytes, shmem_page_size_hint_bytes));
  }

  ~ProducerEndpoint() override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    producer_->OnDisconnect();
  }

  // perfetto::ProducerEndpoint implementation:
  void RegisterDataSource(
      const perfetto::DataSourceDescriptor& descriptor) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    producer_host_->RegisterDataSource(descriptor);
  }

  void UpdateDataSource(
      const perfetto::DataSourceDescriptor& descriptor) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    NOTREACHED();
  }

  void UnregisterDataSource(const std::string& name) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    // TODO(skyostil): Implement data source unregistering. Data sources are
    // currently only unregistered in tests, and because the tracing service is
    // also torn down at the same time, we can ignore unregistrations here.
  }

  void RegisterTraceWriter(uint32_t writer_id,
                           uint32_t target_buffer) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    producer_host_->RegisterTraceWriter(writer_id, target_buffer);
  }

  void UnregisterTraceWriter(uint32_t writer_id) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    producer_host_->UnregisterTraceWriter(writer_id);
  }

  void CommitData(const perfetto::CommitDataRequest& commit,
                  CommitDataCallback callback = {}) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    auto commit_callback =
        callback
            ? base::BindOnce(
                  [](perfetto::ProducerEndpoint::CommitDataCallback callback) {
                    callback();
                  },
                  callback)
            : mojom::ProducerHost::CommitDataCallback();
    // We need to make sure the CommitData IPC is sent off without triggering
    // any trace events, as that could stall waiting for SMB chunks to be freed
    // up which requires the tracing service to receive the IPC.
    if (!base::tracing::GetThreadIsInTraceEventTLS()->Get()) {
      base::tracing::AutoThreadLocalBoolean thread_is_in_trace_event(
          base::tracing::GetThreadIsInTraceEventTLS());
      producer_host_->CommitData(commit, std::move(commit_callback));
      return;
    }
    producer_host_->CommitData(commit, std::move(commit_callback));
  }

  perfetto::SharedMemory* shared_memory() const override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    return shared_memory_.get();
  }

  size_t shared_buffer_page_size_kb() const override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    return shared_buffer_page_size_kb_;
  }

  std::unique_ptr<perfetto::TraceWriter> CreateTraceWriter(
      perfetto::BufferID target_buffer,
      perfetto::BufferExhaustedPolicy) override {
    // Can be called from any thread.
    // Chromium uses BufferExhaustedPolicy::kDrop to avoid stalling trace
    // writers when the chunks in the SMB are exhausted. Stalling could
    // otherwise lead to deadlocks in chromium, because a stalled mojo IPC
    // thread could prevent CommitRequest messages from reaching the perfetto
    // service.
    return MaybeSharedMemoryArbiter()->CreateTraceWriter(
        target_buffer, perfetto::BufferExhaustedPolicy::kDrop);
  }

  perfetto::SharedMemoryArbiter* MaybeSharedMemoryArbiter() override {
    // Can be called from any thread.
    return shared_memory_arbiter_.get();
  }

  bool IsShmemProvidedByProducer() const override { return true; }

  void NotifyFlushComplete(perfetto::FlushRequestID flush_request_id) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    perfetto::CommitDataRequest commit;
    commit.set_flush_request_id(flush_request_id);
    producer_host_->CommitData(commit,
                               mojom::ProducerHost::CommitDataCallback());
  }

  void NotifyDataSourceStarted(
      perfetto::DataSourceInstanceID instance_id) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    auto it = ds_start_callbacks_.find(instance_id);
    if (it == ds_start_callbacks_.end())
      return;
    auto callback = std::move(it->second);
    ds_start_callbacks_.erase(it);
    std::move(callback).Run();
  }

  void NotifyDataSourceStopped(
      perfetto::DataSourceInstanceID instance_id) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    auto it = ds_stop_callbacks_.find(instance_id);
    if (it == ds_stop_callbacks_.end())
      return;
    auto callback = std::move(it->second);
    ds_stop_callbacks_.erase(it);
    std::move(callback).Run();
  }

  void ActivateTriggers(const std::vector<std::string>&) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    // TODO(skyostil): Implement.
    NOTREACHED();
  }

  void Sync(std::function<void()> callback) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    // TODO(skyostil): Implement.
    NOTREACHED();
  }

  // mojom::ProducerClient implementation.
  void OnTracingStart() override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    producer_->OnTracingSetup();
  }

  void StartDataSource(uint64_t id,
                       const perfetto::DataSourceConfig& data_source_config,
                       StartDataSourceCallback callback) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    DCHECK(ds_start_callbacks_.find(id) == ds_start_callbacks_.end());
    ds_start_callbacks_[id] = std::move(callback);
    auto it_and_inserted = ds_instances_.insert(id);
    DCHECK(it_and_inserted.second);
    producer_->SetupDataSource(id, data_source_config);
    producer_->StartDataSource(id, data_source_config);
  }

  void StopDataSource(uint64_t id, StopDataSourceCallback callback) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    DCHECK(ds_stop_callbacks_.find(id) == ds_stop_callbacks_.end());
    ds_stop_callbacks_[id] = std::move(callback);
    ds_instances_.erase(id);
    producer_->StopDataSource(id);
  }

  void Flush(uint64_t flush_request_id,
             const std::vector<uint64_t>& data_source_ids) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    producer_->Flush(flush_request_id, data_source_ids.data(),
                     data_source_ids.size());
  }

  void ClearIncrementalState() override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    std::vector<perfetto::DataSourceInstanceID> ds_instances;
    for (auto id : ds_instances_)
      ds_instances.push_back(id);
    producer_->ClearIncrementalState(ds_instances.data(), ds_instances.size());
  }

 private:
  struct EndpointBindings {
    mojo::PendingReceiver<mojom::ProducerClient> client_receiver;
    mojo::PendingRemote<mojom::ProducerHost> host_remote;
    std::unique_ptr<MojoSharedMemory> shared_memory;
  };

  static void OnConnected(
      base::WeakPtr<ProducerEndpoint> weak_endpoint,
      perfetto::base::TaskRunner* producer_task_runner,
      size_t shmem_size_bytes,
      size_t shmem_page_size_bytes,
      mojo::PendingRemote<mojom::PerfettoService> perfetto_service) {
    // Called on the connection's sequence -- |this| may have been deleted.
    auto bindings = std::make_unique<EndpointBindings>();

    // TODO(skyostil): Make it possible to pass the shared memory allocation
    // from the client library to here (for startup tracing).
    if (!shmem_size_bytes)
      shmem_size_bytes = kDefaultSMBSizeBytes;
    if (!shmem_page_size_bytes)
      shmem_page_size_bytes = kDefaultSMBPageSizeBytes;
    bindings->shared_memory =
        std::make_unique<MojoSharedMemory>(shmem_size_bytes);

    if (!bindings->shared_memory->shared_buffer().is_valid()) {
      // There's no way to do tracing after an SMB allocation failure, so let's
      // disconnect Perfetto.
      // TODO(skyostil): Record failure in UMA.
      producer_task_runner->PostTask([weak_endpoint] {
        if (!weak_endpoint)
          return;
        DCHECK_CALLED_ON_VALID_SEQUENCE(weak_endpoint->sequence_checker_);
        weak_endpoint->producer_->OnDisconnect();
      });
      return;
    }

    mojo::PendingRemote<mojom::ProducerClient> client;
    bindings->client_receiver = client.InitWithNewPipeAndPassReceiver();
    mojo::Remote<mojom::PerfettoService>(std::move(perfetto_service))
        ->ConnectToProducerHost(
            std::move(client),
            bindings->host_remote.InitWithNewPipeAndPassReceiver(),
            bindings->shared_memory->Clone(), shmem_page_size_bytes);

    // Bind the interfaces on Perfetto's sequence so we can avoid extra thread
    // hops.
    producer_task_runner->PostTask([weak_endpoint, producer_task_runner,
                                    raw_bindings = bindings.release(),
                                    shmem_size_bytes, shmem_page_size_bytes]() {
      auto bindings = base::WrapUnique(raw_bindings);
      // Called on the endpoint's sequence -- |endpoint| may be deleted.
      if (!weak_endpoint)
        return;
      weak_endpoint->BindConnectionOnSequence(
          producer_task_runner, std::move(bindings), shmem_size_bytes,
          shmem_page_size_bytes);
    });
  }

  void BindConnectionOnSequence(
      perfetto::base::TaskRunner* producer_task_runner,
      std::unique_ptr<EndpointBindings> bindings,
      size_t shmem_size_bytes,
      size_t shmem_page_size_bytes) {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    producer_host_.Bind(std::move(bindings->host_remote));
    producer_host_.reset_on_disconnect();
    receiver_ = std::make_unique<mojo::Receiver<mojom::ProducerClient>>(
        this, std::move(bindings->client_receiver));
    receiver_->set_disconnect_handler(base::BindOnce(
        [](ProducerEndpoint* endpoint) { endpoint->receiver_->reset(); },
        base::Unretained(this)));

    shared_memory_ = std::move(bindings->shared_memory);
    shared_buffer_page_size_kb_ = shmem_size_bytes / 1024;
    shared_memory_arbiter_ = perfetto::SharedMemoryArbiter::CreateInstance(
        shared_memory_.get(), shmem_page_size_bytes, this,
        producer_task_runner);
    producer_->OnConnect();
  }

  SEQUENCE_CHECKER(sequence_checker_);

  const raw_ptr<perfetto::Producer> producer_;

  base::flat_map<perfetto::DataSourceInstanceID, StartDataSourceCallback>
      ds_start_callbacks_;
  base::flat_map<perfetto::DataSourceInstanceID, StopDataSourceCallback>
      ds_stop_callbacks_;
  base::flat_set<perfetto::DataSourceInstanceID> ds_instances_;

  std::unique_ptr<mojo::Receiver<mojom::ProducerClient>> receiver_;
  mojo::Remote<mojom::ProducerHost> producer_host_;

  size_t shared_buffer_page_size_kb_ = 0;

  // Accessed on arbitrary threads after setup.
  std::unique_ptr<MojoSharedMemory> shared_memory_;
  std::unique_ptr<perfetto::SharedMemoryArbiter> shared_memory_arbiter_;

  base::WeakPtrFactory<ProducerEndpoint> weak_factory_{this};
};

// Implements Perfetto's ConsumerEndpoint interface on top of the
// ConsumerHost mojo service.
class ConsumerEndpoint : public perfetto::ConsumerEndpoint,
                         public mojom::TracingSessionClient,
                         public mojo::DataPipeDrainer::Client {
 public:
  ConsumerEndpoint(PerfettoTracingBackend::Delegate& delegate,
                   perfetto::Consumer* consumer,
                   perfetto::base::TaskRunner* consumer_task_runner)
      : consumer_{consumer} {
    // To avoid extra thread hops, the consumer's task runner must match where
    // the endpoint is constructed.
    DCHECK(consumer_task_runner->RunsTasksOnCurrentThread());
    delegate.CreateConsumerConnection(
        base::BindOnce(&ConsumerEndpoint::OnConnected,
                       weak_factory_.GetWeakPtr(), consumer_task_runner));
  }

  ~ConsumerEndpoint() override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    consumer_->OnDisconnect();
  }

  // perfetto::ConsumerEndpoint implementation.
  void EnableTracing(const perfetto::TraceConfig& trace_config,
                     perfetto::base::ScopedFile file) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    trace_config_ = trace_config;
#if BUILDFLAG(IS_WIN)
    // TODO(crbug.com/1158482): Add support on Windows.
    DCHECK(!file)
        << "Tracing directly to a file isn't supported on Windows yet";
#else
    output_file_ = base::File(file.release());
#endif
    if (!trace_config.deferred_start())
      StartTracing();
  }

  void ChangeTraceConfig(const perfetto::TraceConfig& trace_config) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    trace_config_ = trace_config;
    tracing_session_host_->ChangeTraceConfig(trace_config);
  }

  void StartTracing() override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    tracing_failed_ = false;
    consumer_host_->EnableTracing(
        tracing_session_host_.BindNewPipeAndPassReceiver(),
        tracing_session_client_.BindNewPipeAndPassRemote(), trace_config_,
        std::move(output_file_));
    tracing_session_host_.set_disconnect_handler(base::BindOnce(
        &ConsumerEndpoint::OnTracingFailed, base::Unretained(this)));
    tracing_session_client_.set_disconnect_handler(base::BindOnce(
        &ConsumerEndpoint::OnTracingFailed, base::Unretained(this)));
  }

  void DisableTracing() override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    if (tracing_session_host_)
      tracing_session_host_->DisableTracing();
  }

  void Flush(uint32_t timeout_ms, FlushCallback callback) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    // TODO(skyostil): Implement flushing.
    NOTREACHED();
  }

  void ReadBuffers() override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    if (!tracing_session_host_ || !tracing_session_client_.is_bound()) {
      OnTracingFailed();
      return;
    }
    mojo::ScopedDataPipeProducerHandle producer_handle;
    mojo::ScopedDataPipeConsumerHandle consumer_handle;
    MojoResult result =
        mojo::CreateDataPipe(nullptr, producer_handle, consumer_handle);
    if (result != MOJO_RESULT_OK) {
      OnTracingFailed();
      return;
    }
    drainer_ = std::make_unique<mojo::DataPipeDrainer>(
        this, std::move(consumer_handle));
    trace_data_complete_ = false;
    read_buffers_complete_ = false;

    // Convert to legacy JSON if needed.
    for (const auto& data_source : trace_config_.data_sources()) {
      if (data_source.config().has_chrome_config() &&
          data_source.config().chrome_config().convert_to_legacy_json()) {
        tracing_session_host_->DisableTracingAndEmitJson(
            data_source.config().chrome_config().json_agent_label_filter(),
            std::move(producer_handle),
            data_source.config().chrome_config().privacy_filtering_enabled(),
            base::BindOnce(&ConsumerEndpoint::OnReadBuffersComplete,
                           base::Unretained(this)));
        return;
      }
    }

    tokenizer_ = std::make_unique<TracePacketTokenizer>();
    tracing_session_host_->ReadBuffers(
        std::move(producer_handle),
        base::BindOnce(&ConsumerEndpoint::OnReadBuffersComplete,
                       base::Unretained(this)));
  }

  void FreeBuffers() override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    tracing_session_host_.reset();
    tracing_session_client_.reset();
    drainer_.reset();
    tokenizer_.reset();
  }

  void Detach(const std::string& key) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    NOTREACHED() << "Detaching session not supported";
  }

  void Attach(const std::string& key) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    NOTREACHED() << "Attaching session not supported";
  }

  void GetTraceStats() override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    // Capturing |this| is safe, because the callback will be cancelled if the
    // connection terminates.
    tracing_session_host_->RequestBufferUsage(base::BindOnce(
        [](ConsumerEndpoint* endpoint, bool success, float percent_full,
           bool data_loss) {
          DCHECK_CALLED_ON_VALID_SEQUENCE(endpoint->sequence_checker_);
          // Since we only get a few basic stats from the service, synthesize
          // just enough trace statistics to be able to show a buffer usage
          // indicator.
          // TODO(skyostil): Plumb the entire TraceStats objects from the
          // service to avoid this.
          uint64_t buffer_size = 0;
          if (endpoint->trace_config_.buffers_size() >= 1) {
            buffer_size = endpoint->trace_config_.buffers()[0].size_kb() * 1024;
          }
          perfetto::TraceStats stats;
          if (success && buffer_size) {
            auto* buf_stats = stats.add_buffer_stats();
            buf_stats->set_buffer_size(buffer_size);
            buf_stats->set_bytes_written(
                static_cast<uint64_t>(percent_full * buffer_size));
            if (data_loss)
              buf_stats->set_trace_writer_packet_loss(1);
          }
          endpoint->consumer_->OnTraceStats(success, stats);
        },
        base::Unretained(this)));
  }

  void ObserveEvents(uint32_t events_mask) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    // Only some events are currently supported by this backend.
    DCHECK(!(events_mask &
             ~(perfetto::ObservableEvents::TYPE_DATA_SOURCES_INSTANCES |
               perfetto::ObservableEvents::TYPE_ALL_DATA_SOURCES_STARTED)));
    observed_events_mask_ = events_mask;
  }

  void QueryServiceState(QueryServiceStateCallback) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    // TODO(skyostil): Implement service state querying.
    NOTREACHED();
  }

  void QueryCapabilities(QueryCapabilitiesCallback) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    // TODO(skyostil): Implement capability querying.
    NOTREACHED();
  }

  void SaveTraceForBugreport(SaveTraceForBugreportCallback) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    // Not implemented yet.
    NOTREACHED();
  }

  // tracing::mojom::TracingSessionClient implementation:
  void OnTracingEnabled() override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    // TODO(skyostil): Wire up full data source state. For now Perfetto just
    // needs to know all data sources have started.
    if (observed_events_mask_ &
        (perfetto::ObservableEvents::TYPE_ALL_DATA_SOURCES_STARTED |
         perfetto::ObservableEvents::TYPE_DATA_SOURCES_INSTANCES)) {
      perfetto::ObservableEvents events;
      events.add_instance_state_changes()->set_state(
          perfetto::ObservableEvents::DATA_SOURCE_INSTANCE_STATE_STARTED);
      events.set_all_data_sources_started(true);
      consumer_->OnObservableEvents(events);
    }
  }

  void OnTracingDisabled(bool tracing_succeeded) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    // TODO(skyostil): Wire up full data source state. For now Perfetto just
    // needs to know all data sources have stopped.
    if (observed_events_mask_ &
        perfetto::ObservableEvents::TYPE_DATA_SOURCES_INSTANCES) {
      perfetto::ObservableEvents events;
      events.add_instance_state_changes()->set_state(
          perfetto::ObservableEvents::DATA_SOURCE_INSTANCE_STATE_STOPPED);
      consumer_->OnObservableEvents(events);
    }
    consumer_->OnTracingDisabled(
        tracing_succeeded && !tracing_failed_ ? "" : kErrorTracingFailed);
  }

  // mojo::DataPipeDrainer::Client implementation:
  void OnDataAvailable(const void* data, size_t num_bytes) override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    if (tokenizer_) {
      // Protobuf-format data.
      auto packets =
          tokenizer_->Parse(reinterpret_cast<const uint8_t*>(data), num_bytes);
      if (!packets.empty())
        consumer_->OnTraceData(std::move(packets), /*has_more=*/true);
    } else {
      // Legacy JSON-format data.
      std::vector<perfetto::TracePacket> packets;
      packets.emplace_back();
      packets.back().AddSlice(data, num_bytes);
      consumer_->OnTraceData(std::move(packets), /*has_more=*/true);
    }
  }

  void OnDataComplete() override {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    if (tokenizer_) {
      DCHECK(!tokenizer_->has_more());
      tokenizer_.reset();
    }
    trace_data_complete_ = true;
    MaybeFinishTraceData();
  }

 private:
  static void OnConnected(
      base::WeakPtr<ConsumerEndpoint> weak_endpoint,
      perfetto::base::TaskRunner* consumer_task_runner,
      mojo::PendingRemote<mojom::ConsumerHost> consumer_host_remote) {
    // Called on the connection's sequence -- |this| may have been deleted.
    auto wrapped_remote =
        std::make_unique<mojo::PendingRemote<mojom::ConsumerHost>>(
            std::move(consumer_host_remote));

    // Bind the interfaces on Perfetto's sequence so we can avoid extra thread
    // hops.
    consumer_task_runner->PostTask([weak_endpoint,
                                    raw_remote = wrapped_remote.release()]() {
      auto consumer_host_remote = base::WrapUnique(raw_remote);
      // Called on the endpoint's sequence -- |endpoint| may be deleted.
      if (!weak_endpoint)
        return;
      weak_endpoint->BindConnectionOnSequence(std::move(*consumer_host_remote));
    });
  }

  void BindConnectionOnSequence(
      mojo::PendingRemote<mojom::ConsumerHost> consumer_host_remote) {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    consumer_host_.Bind(std::move(consumer_host_remote));
    consumer_host_.reset_on_disconnect();
    consumer_->OnConnect();
  }

  void OnTracingFailed() {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    tracing_failed_ = true;
    tracing_session_host_.reset();
    tracing_session_client_.reset();
    drainer_.reset();
    tokenizer_.reset();
  }

  void OnReadBuffersComplete() {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    read_buffers_complete_ = true;
    MaybeFinishTraceData();
  }

  void MaybeFinishTraceData() {
    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
    if (!read_buffers_complete_ || !trace_data_complete_)
      return;
    consumer_->OnTraceData({}, /*has_more=*/false);
  }

  SEQUENCE_CHECKER(sequence_checker_);
  const raw_ptr<perfetto::Consumer> consumer_;
  mojo::Remote<tracing::mojom::ConsumerHost> consumer_host_;
  mojo::Remote<tracing::mojom::TracingSessionHost> tracing_session_host_;
  mojo::Receiver<tracing::mojom::TracingSessionClient> tracing_session_client_{
      this};
  std::unique_ptr<mojo::DataPipeDrainer> drainer_;
  perfetto::TraceConfig trace_config_;
  base::File output_file_;

  std::unique_ptr<TracePacketTokenizer> tokenizer_;
  bool tracing_failed_ = false;
  bool read_buffers_complete_ = false;
  bool trace_data_complete_ = false;
  uint32_t observed_events_mask_ = 0;

  base::WeakPtrFactory<ConsumerEndpoint> weak_factory_{this};
};

PerfettoTracingBackend::PerfettoTracingBackend(Delegate& delegate)
    : delegate_(delegate) {}

PerfettoTracingBackend::~PerfettoTracingBackend() = default;
PerfettoTracingBackend::Delegate::~Delegate() = default;

std::unique_ptr<perfetto::ConsumerEndpoint>
PerfettoTracingBackend::ConnectConsumer(const ConnectConsumerArgs& args) {
  return std::make_unique<ConsumerEndpoint>(delegate_, args.consumer,
                                            args.task_runner);
}

std::unique_ptr<perfetto::ProducerEndpoint>
PerfettoTracingBackend::ConnectProducer(const ConnectProducerArgs& args) {
  return std::make_unique<ProducerEndpoint>(
      delegate_, args.producer_name, args.producer, args.task_runner,
      args.shmem_size_hint_bytes, args.shmem_page_size_hint_bytes);
}

}  // namespace tracing


text:
> {%= description %}

The purpose of this lib is to do the fastest comparison possible of two objects when the values will predictably be primitives.

- only compares objects.
- only compares the first level of each object
- values must be primitives. If a value is not a primitive, even if the values are the same, `false` is returned.

{%= include("install-npm", {save: true}) %}

## Usage

```js
var equals = require('{%= name %}');
equals(object_a, object_b);
```

**Examples**

```js
equals({a: true, b: true}, {a: true, b: true});
//=> 'true'

equals({a: true, b: false}, {c: false, b: false});
//=> 'false'

equals({a: true, b: false}, {a: false, b: false});
//=> 'false'
```

Strict comparison for equality:

```js
equals({a: true, b: true}, {a: true, b: 'true'});
//=> 'false'
```

When values are not primitives, `false` is always returned:

```js
equals({ b: {}}, { b: {}});
//=> 'false'

equals({ b: []}, { b: []});
//=> 'false'
```

## Related projects
{%= verbiage.related.description %}
{%= related(verbiage.related.list) %}

## Running tests
{%= include("tests") %}

## Contributing
{%= include("contributing") %}

## Author
{%= include("author") %}

## License
{%= copyright() %}
{%= license() %}

***

{%= include("footer") %}


text:
// JSON C# Class Generator
// http://at-my-window.blogspot.com/?page=json-class-generator

using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace ZendeskApi_v2.Models.Macros
{

    public class GroupMacroResponse : GroupResponseBase
    {

        [JsonProperty("macros")]
        public IList<Macro> Macros { get; set; }
    }
}


text:
namespace StaticMap.Google
{
    #region Usings

    using System.Linq;
    using System.Text;
    using Core.Model;

    #endregion

    public static class MarkerExtensions
    {
        public static string Convert(this Marker marker)
        {
            var builder = new StringBuilder();
            builder.Append("&markers=");

            var first = false;
            if (!string.IsNullOrWhiteSpace(marker.DrawColor))
            {
                builder.AppendFormat("|color:{0}", marker.DrawColor);
                first = true;
            }
            if (!string.IsNullOrWhiteSpace(marker.Label))
            {
                builder.AppendFormat("{0}label:{1}", !first ? "|" : "", marker.Label.ToUpper()
                                                                             .First());
                first = true;
            }

            builder.AppendFormat("{0}{1}", first ? "|" : "", marker.Point.Convert());
            return builder.ToString();
        }
    }
}


text:
package org.eclipse.jface.text.quickassist;

import org.eclipse.swt.graphics.Color;

import org.eclipse.core.commands.IHandler;

import org.eclipse.jface.dialogs.IDialogSettings;

import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IInformationControlCreator;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.contentassist.ContentAssistant;
import org.eclipse.jface.text.contentassist.ICompletionListener;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
import org.eclipse.jface.text.contentassist.IContextInformation;
import org.eclipse.jface.text.contentassist.IContextInformationValidator;
import org.eclipse.jface.text.source.Annotation;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.TextInvocationContext;

/**
 * Default implementation of IQuickAssistAssistant.
 *
 * @since 3.2
 */
public class QuickAssistAssistant implements IQuickAssistAssistant, IQuickAssistAssistantExtension {

	private static final class QuickAssistAssistantImpl extends ContentAssistant {
		/*
		 * @see org.eclipse.jface.text.contentassist.ContentAssistant#possibleCompletionsClosed()
		 */
		public void possibleCompletionsClosed() {
			super.possibleCompletionsClosed();
		}

		/*
		 * @see org.eclipse.jface.text.contentassist.ContentAssistant#hide()
		 * @since 3.4
		 */
		protected void hide() {
			super.hide();
		}
	}

	private static final class ContentAssistProcessor implements IContentAssistProcessor {

		private IQuickAssistProcessor fQuickAssistProcessor;

		ContentAssistProcessor(IQuickAssistProcessor processor) {
			fQuickAssistProcessor= processor;
		}

		/*
		 * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeCompletionProposals(org.eclipse.jface.text.ITextViewer, int)
		 */
		public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int offset) {
			// panic code - should not happen
			if (!(viewer instanceof ISourceViewer))
				return null;

			return fQuickAssistProcessor.computeQuickAssistProposals(new TextInvocationContext((ISourceViewer)viewer, offset, -1));
		}

		/*
		 * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeContextInformation(org.eclipse.jface.text.ITextViewer, int)
		 */
		public IContextInformation[] computeContextInformation(ITextViewer viewer, int offset) {
			return null;
		}

		/*
		 * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getCompletionProposalAutoActivationCharacters()
		 */
		public char[] getCompletionProposalAutoActivationCharacters() {
			return null;
		}

		/*
		 * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationAutoActivationCharacters()
		 */
		public char[] getContextInformationAutoActivationCharacters() {
			return null;
		}

		/*
		 * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getErrorMessage()
		 */
		public String getErrorMessage() {
			return null;
		}

		/*
		 * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationValidator()
		 */
		public IContextInformationValidator getContextInformationValidator() {
			return null;
		}

	}

	private QuickAssistAssistantImpl fQuickAssistAssistantImpl;
	private IQuickAssistProcessor fQuickAssistProcessor;

	public QuickAssistAssistant() {
		fQuickAssistAssistantImpl= new QuickAssistAssistantImpl();
		fQuickAssistAssistantImpl.enableAutoActivation(false);
		fQuickAssistAssistantImpl.enableAutoInsert(false);
	}

	/*
	 * @see org.eclipse.jface.text.quickassist.IQuickAssistAssistant#showPossibleQuickAssists()
	 */
	public String showPossibleQuickAssists() {
		return fQuickAssistAssistantImpl.showPossibleCompletions();
	}

	/*
	 * @see org.eclipse.jface.text.quickassist.IQuickAssistAssistant#getQuickAssistProcessor(java.lang.String)
	 */
	public IQuickAssistProcessor getQuickAssistProcessor() {
		return fQuickAssistProcessor;
	}

	/*
	 * @see org.eclipse.jface.text.quickassist.IQuickAssistAssistant#setQuickAssistProcessor(org.eclipse.jface.text.quickassist.IQuickAssistProcessor)
	 */
	public void setQuickAssistProcessor(IQuickAssistProcessor processor) {
		fQuickAssistProcessor= processor;
		fQuickAssistAssistantImpl.setDocumentPartitioning("__" + getClass().getName() + "_partitioning"); //$NON-NLS-1$ //$NON-NLS-2$
		fQuickAssistAssistantImpl.setContentAssistProcessor(new ContentAssistProcessor(processor), IDocument.DEFAULT_CONTENT_TYPE);
	}

	/*
	 * @see org.eclipse.jface.text.quickassist.IQuickAssistAssistant#canFix(org.eclipse.jface.text.source.Annotation)
	 */
	public boolean canFix(Annotation annotation) {
		return fQuickAssistProcessor != null && fQuickAssistProcessor.canFix(annotation);
	}

	/*
	 * @see org.eclipse.jface.text.quickassist.IQuickAssistAssistant#canAssist(org.eclipse.jface.text.quickassist.IQuickAssistInvocationContext)
	 */
	public boolean canAssist(IQuickAssistInvocationContext invocationContext) {
		return fQuickAssistProcessor != null && fQuickAssistProcessor.canAssist(invocationContext);
	}

	/*
	 * @see org.eclipse.jface.text.quickassist.IQuickAssistAssistant#install(org.eclipse.jface.text.ITextViewer)
	 */
	public void install(ISourceViewer sourceViewer) {
		fQuickAssistAssistantImpl.install(sourceViewer);
	}

	/*
	 * @see org.eclipse.jface.text.quickassist.IQuickAssistAssistant#setInformationControlCreator(org.eclipse.jface.text.IInformationControlCreator)
	 */
	public void setInformationControlCreator(IInformationControlCreator creator) {
		fQuickAssistAssistantImpl.setInformationControlCreator(creator);
	}

	/*
	 * @see org.eclipse.jface.text.quickassist.IQuickAssistAssistant#uninstall()
	 */
	public void uninstall() {
		fQuickAssistAssistantImpl.uninstall();
	}

	/*
	 * @see org.eclipse.jface.text.quickassist.IQuickAssistAssistant#setProposalSelectorBackground(org.eclipse.swt.graphics.Color)
	 */
	public void setProposalSelectorBackground(Color background) {
		fQuickAssistAssistantImpl.setProposalSelectorBackground(background);
	}

	/*
	 * @see org.eclipse.jface.text.quickassist.IQuickAssistAssistant#setProposalSelectorForeground(org.eclipse.swt.graphics.Color)
	 */
	public void setProposalSelectorForeground(Color foreground) {
		fQuickAssistAssistantImpl.setProposalSelectorForeground(foreground);
	}

	/**
	 * Tells this assistant to open the proposal popup with the size
	 * contained in the given dialog settings and to store the control's last valid size in the
	 * given dialog settings.
	 *

	 * Note: This API is only valid if the information control implements
	 * {@link org.eclipse.jface.text.IInformationControlExtension3}. Not following this restriction
	 * will later result in an {@link UnsupportedOperationException}.
	 *

	 *

	 * The constants used to store the values are:
	 *

	 *
{@link ContentAssistant#STORE_SIZE_X}

	 *
{@link ContentAssistant#STORE_SIZE_Y}

	 *

	 *

	 *
	 * @param dialogSettings the dialog settings
	 * @since 3.7
	 */
	public void setRestoreCompletionProposalSize(IDialogSettings dialogSettings) {
		fQuickAssistAssistantImpl.setRestoreCompletionProposalSize(dialogSettings);
	}

	/**
	 * Callback to signal this quick assist assistant that the presentation of the
	 * possible completions has been stopped.
	 */
	protected void possibleCompletionsClosed() {
		fQuickAssistAssistantImpl.possibleCompletionsClosed();
	}

	/*
	 * @see org.eclipse.jface.text.quickassist.IQuickAssistAssistant#addCompletionListener(org.eclipse.jface.text.contentassist.ICompletionListener)
	 */
	public void addCompletionListener(ICompletionListener listener) {
		fQuickAssistAssistantImpl.addCompletionListener(listener);
	}

	/*
	 * @see org.eclipse.jface.text.quickassist.IQuickAssistAssistant#removeCompletionListener(org.eclipse.jface.text.contentassist.ICompletionListener)
	 */
	public void removeCompletionListener(ICompletionListener listener) {
		fQuickAssistAssistantImpl.removeCompletionListener(listener);
	}

	/*
	 * @see org.eclipse.jface.text.quickassist.IQuickAssistAssistant#setStatusLineVisible(boolean)
	 */
	public void setStatusLineVisible(boolean show) {
		fQuickAssistAssistantImpl.setStatusLineVisible(show);

	}

	/*
	 * @see org.eclipse.jface.text.quickassist.IQuickAssistAssistant#setStatusMessage(java.lang.String)
	 */
	public void setStatusMessage(String message) {
		fQuickAssistAssistantImpl.setStatusMessage(message);
	}

	/**
	 * {@inheritDoc}
	 *
	 * @since 3.4
	 */
	public final IHandler getHandler(String commandId) {
		return fQuickAssistAssistantImpl.getHandler(commandId);
	}

	/**
	 * Hides any open pop-ups.
	 *
	 * @since 3.4
	 */
	protected void hide() {
		fQuickAssistAssistantImpl.hide();
	}

	/**
	 * {@inheritDoc}
	 *
	 * @since 3.4
	 */
	public void enableColoredLabels(boolean isEnabled) {
		fQuickAssistAssistantImpl.enableColoredLabels(isEnabled);
	}

}