text:
Bio Filter Option
Person Detail
Selected Representations
Awards and Affiliations List
Print Bio License Label
Andrew D. Lipman
andrew.lipman@morganlewis.com
Washington, DC Phone +1.202.739.6033 Fax +1.202.739.3001
1111 Pennsylvania Ave. NW//Washington, DC 20004-2541//United States
Andrew D. Lipman practices in most aspects of communications law and related fields, including regulatory, transactional, litigation, legislative, and land use. Andy's clients in the private and public sectors include those in the areas of local, long distance, and international telephone common carriage; Internet services and technologies; conventional and emerging wireless services; satellite services; broadcasting; competitive video services; telecommunications equipment manufacturing; and other high-technology applications. Additionally, he manages privatizations of telecommunications carriers in Europe, Asia, and Latin America.
To open the US local telephone market to competition, Andy has been involved in most new legal and regulatory policies at the Federal Communications Commission, at state public service commissions, in Congress, and before courts. He helped shape crucial provisions of the Telecommunications Act of 1996 and used similar approaches to promote the opening of foreign markets. He also obtained one of the first competitive local service and interconnection agreements in continental Europe and the first competitive fiber network application in Japan. Andy's practice includes strategic analysis of companies' telecom user agreements, renegotiating existing agreements, and negotiating new, more favorable telecom user agreements.
For nearly a decade, Andy served as senior vice president, legal and regulatory affairs, for MFS Communications, the nation's largest competitive local services provider. One of the founders of MFS, Andy helped guide the company from startup to its eventual sale for $14.4 billion to WorldCom.
Frequently writing and speaking on telecommunications, Andy's work encompasses more than 170 articles and five books, including two Dow Jones books on telecommunications. He occasionally appears on National Public Radio, C-SPAN, Bloomberg News Network, and ABC News, and he served on the editorial advisory boards of Phillips Publishing Company, Internet Law and Regulation, Telecommunications Alert, Telecommunications Reports, Telecommunications Regulatory Monitor, and The Satellite Compendium.
Andy served as general counsel to the International Teleconferencing Association and as legislative/regulatory counsel to the International Satellite Users Association. He sits on the board of directors of five public companies trading on the NYSE, NASDAQ, and Toronto Stock Exchange. Additionally, he co-founded the Association of Local Telecommunication Services (ALTS)—the national trade association for competitive telecommunications carriers—and served as its first chairman.
Prior to joining Morgan Lewis, Andy was a partner in the corporate practice of another international law firm, where he was also a member of the executive board and leader of the telecommunications, media and technology practice. Before entering private practice, he participated in the legal honors program at the US Department of Transportation and served in the Office of the Secretary of Transportation. He also served as an extern law clerk to Judge Raymond Sullivan of the California Supreme Court.
Named, The Legal 500 Hall of Fame (2017)
Ranked, Telecom, Broadcast & Satellite, District of Columbia, Chambers USA (2002–2004, 2006–2007, 2009–2022)
Hall of Fame, Media, technology and telecoms: Telecoms and broadcast: transactional, The Legal 500 (2020)
Leading Lawyer, Media, technology and telecoms: Telecoms and broadcast: transactional, The Legal 500 (2018, 2019, 2021, 2022)
Recommended, Media, technology and telecoms - Telecoms and broadcast - regulatory, The Legal 500 US (2011–2021)
Recommended, Media, technology and telecoms: Telecoms and broadcast: transactional, The Legal 500 US (2011–2018)
Recognized, Communications Law, Washington, DC, The Best Lawyers in America (2007–2015, 2017, 2019, 2020, 2023)
Recognized, Administrative/Regulatory Law, Washington, DC, The Best Lawyers in America (2015, 2017–2023)
Recognized, Washington, DC Super Lawyers (2007–2014)
Recognized, Washington, DC's Top Lawyers, Communications, Washingtonian (2009, 2011, 2013)
Recognized, Data: Telecoms & Media, Who's Who Legal (2003, 2007, 2010, 2013, 2016–2019)
Recognized, The Best of the Best, Guide to the World's Leading Lawyers (2001, 2003–2004, 2006, 2008–2010)
Recognized, Best Lawyers, The Washington Post Magazine (2008)
Recognized, Leading Lawyers in America Lawdragon 3000 (2006)
Leading Telecom Lawyer, Guide to the World's Leading Technology, Media and Telecommunications Lawyers (2005)
Top 50 Telecom Visionary, NetEconomy Magazine (2002)
Top Six International Leader in the Telecommunications Field, Chambers Global Directory of the World's Leading Lawyers (2001–2002)
Leading Lawyer Under the Age of 45, The American Lawyer (1995)
Leading Telecommunications Lawyer, National Lawyer, (1995)
Member, Federal Communications Bar Association
Stanford Law School, 1977, Juris Doctor
University of Rochester, 1974, Bachelor of Arts, Summa Cum Laude
Technology Transactions
International Trade & National Security
US-China Trading Policy & Global Impact
1/30/2023 - Metro Connect USA
4/12/2022 - Navigating the Next: The State of US Telecom and Media Regulatory and Antitrust Issues
4/27/2021 - 2021 Telecom, Media, and Technology Regulatory Overview – Complimentary Webinar
11/4/2020 - 2020 Election Outcome: Telecom, Media, and Tech Impacts of the November 2020 Elections – A Complimentary Webinar
5/23/2018 - 2018 Technology May-rathon: Mid-Year Telecom, Media and Tech Regulatory Review
5/30/2017 - 2017 Technology May-rathon: New Administration, New Rules: TMT in 2017 and Beyond
11/11/2016 - The 2016 Election Outcome: Telecom, Media, and Tech Impacts
10/13/2016 - The 2016 Election: Telecom, Media, and Tech Impacts
8/4/2016 - 2016 TMT Midyear Update
5/19/2016 - 2016 Technology May-rathon: Mid-Year Telecom/Media Regulatory and Legal Update
2/3/2016 - Telecom, Media & Technology (TMT) 2016 Legal and Regulatory Outlook
5/8/2015 - Technology May-rathon: Understanding The FCC's Seminal Network Neutrality Decision: Practical Lessons for Telecom and Tech Companies
5/5/2015 - Technology May-rathon: Negotiating and Managing Risk In Telecom Purchase Agreements
6/23/2017 - Telecommunications Policy Recap for the First Half of 2017, Law360
4/11/2017 - Morgan Lewis Represents Southern Light in $700M Sale to Uniti Group Inc.
1/2/2017 - Telecom Cases To Watch In 2017, Law360
2/3/2016 - Telecommunications, Media & Technology 2016 Regulatory Outlook
8/19/2015 - Telecommunications,
Media & Technology:
Regulatory Quarterbacking. Industry Leadership.
4/22/2022 - D.C. Watch, Intelligence by Inside Towers
September 21, 2020 (Updated February 22, 2021) - The Approach of the EU and Selected Member States to 5G Network Cybersecurity
8/24/2020 - European Cybersecurity for 5G: Member States Widely Differ in their Approaches
6/4/2020 - Securing 5G Networks in the EU: High-Risk Vendors or High-Risk Legislation?
4/1/2020 - CARES Act Includes Provisions Regarding Telecommunications, Telehealth
3/23/2020 - FCC Waives Gift Rules for Rural Health Care, E-Rate Entities in COVID-19 Response
3/23/2020 - Telephone Consumer Protection Act: COVID-19 Updates and Developments
3/26/2019 - EU Adopts First Foreign Direct Investment Regulation
March 2019 - Apart and Together, Submarine Telecoms Forum Magazine
4/5/2018 - DC Circuit's ACA v. FCC Decision: Implications for Calling and Texting
3/21/2018 - Submarine Cable Telecom and National Security Review 2018-2020: What's on the Horizon? Submarine Telecoms Forum
6/14/2016 - The DC Circuit Affirms the FCC's Open Internet Rules
3/21/2016 - Reminder: FCC Accessibility Reporting Requirements Due April 1
2/8/2016 - Reminder: FCC Annual CPNI Compliance Certifications Due March 1, 2016
11/12/2015 - Andrew Lipman on Navigating the FCC
11/12/2015 - Andrew Lipman on Tracking Net Neutrality
11/12/2015 - Andrew Lipman, Spotlight On: Telecom, Media & Technology
3/3/2015 - Accessibility Standards for Equipment Covered By the Communications Act
2/10/2015 - Reminder: FCC Annual CPNI Compliance Certifications Due March 1, 2015
12/22/2014 - Reminder: January 29, 2015 Deadline for FCC Special Access Data Collection
5/15/2014 - FCC Adopts Notice of Proposed Rulemaking to Revise Open Internet (Net Neutrality) Rules
2/3/2014 - Summary of FCC Order Calling for IP Technology Transition Trial Proposals
1/30/2014 - FCC Adopts Order Inviting Technology Transition Trials
9/18/2013 - FCC Releases Instructions for and Modifications to Special Access Mandatory Data Collection
4/22/2013 - FCC Grants Vonage Conditional Waiver of Numbering Rules; Opens Two Proceedings to Consider Revisions to Traditional Numbering Assignment Rules
12/18/2012 - FCC Releases Special Access Order on Mandatory Data Collection and Further Notice of Proposed Rulemaking
8/6/2012 - Court of Appeals Affirms FCC's Denial of Qwest's Phoenix Forbearance Petition
3/12/2012 - FCC Seeks Comment on CenturyLink Petition for Forbearance
2/6/2012 - FCC Issues Call Blocking Declaratory Ruling
March 2011 - Building a Submarine Cable: Navigating the Regulatory Waters of Licensing and Permitting


It is understood that the church building is available without charge by all groups, committees and organizations of Fort Garry Mennonite Fellowship. All meetings should be cleared with the Facilities Committee booking representative. For other groups the following fee structure shall apply.
Use for an occasion which is not a congregational function, but one in which one or more members are included (e.g. "social" Christmas party, family gathering, wedding).
Members renting will be responsible for all set up, unlocking & locking, general supervision of the use of the premises, and cleaning (washing, vacuuming, putting away tables, cleaning bathrooms, etc.) as per our church standards. Member has the option to pay the rates listed in Section B if they need a sound technician or are not interested in washing of dishes and cleaning. There is no charge for members for funerals.
Catered meal – the caterer or group is responsible for scraping the dishes, stacking, etc. as well as cleaning the kitchen (including stove top and oven). The paid dishwasher operator will wash and put away the dishes.
Custodian is responsible for opening the church, showing where tables are located for set up and securing building when the event is over. For a wedding this typically includes a rehearsal and the wedding service. Renters are responsible for setting up tables & chairs as required and for clean up.
Cleaning – Fellowship member(s) put away tables & chairs, vacuum, wash floors, clean kitchen, bathrooms, etc. These individuals will ensure that at the end of the event the building is back to the same conditions as usual.
There will be one rental contract for each event covering the space to be rented plus services to be provided by the Fellowship. For events involving a meal, the $300 cleaning fee will be included as part of the event contract.
Rental fees may be waived in support of selected charity ventures.
Charity fund-raising that involves one or more persons from our Fellowship. Our members involved need to facilitate access and use as well as ensuring the facilities are left as they found them.
In the case of any use requiring the presence of Fellowship personnel to facilitate (admission & lock-up, sound system, dishwasher, cleaning) the group needs to pay the fees listed for such support in Section B above.
No alcohol or smoking in the church.
No confetti on the church premises, either inside or outside.
Members have priority over non-members for rental of the church building. Requests by non- members will be confirmed and guaranteed three months or less in advance of the date of use.
A deposit of $50 for the whole church and $25 for the sanctuary or $25 for the basement to be paid to the FGMF supervisor when the premises are rented to non-members. This fee is included in the rental fee.
Priority schedule for church activities.


What are the design implications of using Bootstrap?
I am momentarily interested specifically in its implications with regards to font families and weights, but am also generally curious about the broader question.
So, does this mean I'll have to use something like !important every time I want to apply some custom, non-Bootstrap stylings?
You seem to be running into an issue with your selector specificity. While you are importing your own custom css last, when another selector is more specific in a different stylesheet, those style will win out and be rendered on the page. CSS-Tricks has a seminal article on how specificity works and would be a good reference to help understand what is happening with your code.
I turned your code into a codeply project that you can experiment with and get a more hands-on understanding of what happens when you change the specificity your selectors.
Also, don't be afraid to to open up the developer tools on your browser to see what's going on. This is a picture taken from Chrome's tools. You can see the styles and which ultimately are used when rendering your view. Properties that are crossed-out in this case might mean that another rule prevailed.
How can I add Attributes to a PHP SoapVar Object?


Q: Experience is so paramount at Apple… GSM allows data and voice… how does that experience feel here?
Tim: I think people place different emphasis on things — I can tell you that the number one question I've gotten is when will the iPhone work on Verizon. I couldn't be happier to tell people that. They will make those sorts of tradeoffs.
11:24AM From us: What changes if any have been made to the antenna.
Tim: We had to make changes to work on the CDMA network — it's going to work great.


This 8-panel pet pen is ideal for in-home use as well as outside in your yard. Provides over 21 square feet of space. Perfect for small, medium & large size pets. Multiple uses: play area, exercise, training, or simply to keep your pets safely contained. Made in the USA of durable, high-impact molded plastic so it will never rust. Easy to assemble & easy to clean!
This 8-panel pet pen is ideal for in-home use as well as outside in your yard. Provides over 21 square feet of space. Perfect for small, medium & large size pets. Multiple uses: play area, exercise, training, or simply to keep your pets safely contained. Made in the USA of durable, high-impact molded plastic so it will never rust. Easy to assemble & easy to clean.


As part of their graduate capstone project, Sports & Recreation students will collaborate with students in the School of Urban and Regional Planning to assist in the creation of a promotion and branding guide for Webster City Parks & Recreation Department. This will be included as part of the Webster City Parks and Recreation Master Plan.
In order to fully utilize the existing Parks and Recreation opportunities, the City of Webster City has requested assistance with marketing and branding of the current system. Students will identify best practices and strategies for the city to use, including event ideas, social media campaigns, and revitalization ideas.
These recommendations will be paired with the Parks and Recreation Master Plan created by students in the School of Urban and Regional Planning in order to provide a complete revitalization of the parks and recreation systems in Webster City.


The Lord knows how to find you in low places -- He hasn't forgotten about you.
Grace without responsibility is immaturity.
Sometimes Jesus allows things in your life to die so He can resurrect it and call it a miracle – hold on.
Trust God with your fears – He's already worked them out for your good and His glory.


THE 2016 HONDA ACCORD: BOLDLY GO.
Learn all about the 2016 Honda Accord before you buy. Honda has worked hard to present this amazing vehicle in 2016, so read below to find out more about what the Accord has to offer.
How do you improve a car that's an automotive icon? You take all the technology, performance and innovative thinking that made it a legend and add a healthy dose of style and great new thinking. It's more than a car: it's a legacy, and the redesigned 2016 Accord is the latest evolution.
Good looks and a little attitude go a long way. A restyled front grille, bold character lines and a wider look give the Accord a new muscular appearance that leaves no question as to who's in charge.
If it's what's on the inside that counts, consider the refined styling, updated accents and intelligent features in the Accord. The spacious cabin and wealth of technology invite you to step inside and make the car your own.
Every part of the Accord is the product of human-centric innovation and creativity. Convenient features make driving a simpler task, and advanced offerings like the available Honda SensingTM suite of safety and driver-assistive technologies help free you to enjoy your driving experience.
Auto high-beam headlights dim when they sense other vehicles approaching (Touring).
Help improve your view with Honda LaneWatch. A small camera under the passenger-side mirror displays live video on the i-MID screen to help you change lanes (EX and above).
Help keep your bumpers ding-free with sensors that beep as you approach detected objects (Touring).
The windshield wipers automatically adjust their rate according to the rainfall, giving you one less thing to worry about in bad weather (Touring).
The RDM system can determine if you cross over detected lanes without signaling and can even provide steering and braking assistance to help you stay in your lane.
The FCW system can sense the presence of vehicles in front of you, and if it calculates that you're at risk of colliding witha detected vehicle, it activates audible and visible alerts.
This innovative offering can help bring your Accord to a stop by automatically applying brake pressure when the system determines a frontal collision is unavoidable.


This is a simple project to do with kids. All you need are two sticks, a bag, string and scissors and you have a kite!
You will need: a plastic bag, string, two sticks, scissors and ribbon.
Take the two sticks - they can be garden stakes, dowels, straight twigs, simple skewers tapes together - and tie them together with a piece of string. The cross stick should be tied about one third of the way along the the main stick.
Wrap the string around the back of the main stick and cross the string across the front of the cross stick. Then wrap the ends of the string back around the back of the main stick and make a single knot. Then wrap each end of the string one around either side of the fron tof the cross stick and back again around the back of the main stick. (Does this sound complicated or is it just me? It's really not complicated.) Then make a double knot. Done!
Cut the garbage bag to fit the frame of the kite. Tie the ends of the sail to the wood frame. No need to use glue or tape. Just keep the knots tight!
First, tie a piece of string from one side of the cross stick to the other, leaving slack to form a triangle like shown in the photo. Then, tie the end of a BIG BALL of string to the bottom portion of the main stick, loop under the slack cross string and tie a simple knot at the intersection of the two strings (so it forms a triangular pyramid shape).
Tie lovely ribbons to the end of the kite in order to help balance it. You can even attach a small weight, like a washer, if the ribbons don't seem hefty enough for your kite.
The day I made this kite and had my camera with me, there was no wind. :( So it only got about two feet off the ground. But if you can get a nice field and some gusts going, you'll be in business. The best way to launch the kite is to have friend hold it while you back up slowly into the wind. Have your friend let the kite go and let the string out. OR, you can just hold it and run wildly into the wind! Either way works.
I've made with very light steel rods but the size was somewhat larger than shown here and I used a light nylon material (the kind used for lightweight tents). It worked extremely well but that was years ago.
How long are the two sticks?
These instructions show the string bridle improperly tied to the BACK of the kite. It should be tied to the FRONT of the kite. Many online DIY kite instructions make this mistake. Please fix!
Haha... my grandpa's house gets a lot of wind, and me and my cousin were seriously bored, so we took a big green garbage bag with the handles, tied some string to the handles, then went on his deck and flew it around... it was so windy that it actually dragged me (I was a good 135 pounds about then) and he had to grab on too... It was sweet.
I like the idea of tying the plastic to the stick, too. You might use a constrictor knot to make that connection. Once pulled tight, a constrictor knot cannot be loosened - only tightened. The only way to release it is with scissors or a knife.
If you want a more sturdy kite, look for house under construction and see if you can get scraps of Tyvek. Or you if you get any mail in Tyvek envelopes, those work.
If you want a cleaner look at the corners, try using a 1/2 to 3/4 inch line of Gorilla Glue on the stick. The disadvantage of the GG is you have to hold the pieces together for 24 hours while the glue dries.
I made sometrhing like this back in april and the smaller of the two cross-bars for the frame snapped instantly!
Unfortunate choice of sticks. A different stick should work better.
as a child about 7-8 my model airplane class teacher from the local youth center "jeff" mad a kite from like 1x2 and black plastic tarp. it was probably between 6-8' wide and 8-10' tall with "open house" or something on it. geez we made awesome flying models like a 3 inch oval thin piece of balsa with stabilizers on the outers of the narrows of the ovals and a balsa stick lik 3/8x3/16 for a frame with clay to balance em. remember "battle star galactica"? cylon fighters? also made a helicopter. i was 2nd youngest in class and first to finish. i told jeff it doesnt work. he spent roughly 2 hrs trying to make it work. it was wood framed and covered in cellulose and paper. i said hey maybe it doesnt fly because it doesnt have a rotor. anyway a long story short he said"i know how to fix em" and then he threw my chopper on the floor and stomped it, and told the rest of the class dont bother with them. god was he mad! he got the plans from a model book. greatfull to have had the opp.
If you use two sticks of the same length, cross them at between 1/7 and 1/10 of the vertical one, and tie a bow into the horzontal one, you will have a much more stable and easy to fly kite. The bridle line should be made to go through the plastic and the bow should bend away from the bridle. The nice innovation here is the simplicity of lashing the plastic to the sticks. Having made lots of these over the years with tape, I really appreciate the idea of being able to manage without tape. As to the spar (cross stick) breaking, the size of the spar and mast needed depends on the size of the kite. As to the "balance" ribbon, stay away from weights, what you want is something to drag behind in the wind, not to pull down toward the ground. Finally, remember that kites that are unstable on a short string near the ground often can be stable on a longer string far from the ground. The easiest way to achieve that is to have one person launch the kite downwind and the other gently pull string in hand over hand until the kite catches the wind above the trees. Then feed the string out again slowly.
You may get better results if you have the frame at the back of the kite instead of the front. i.e. let the wind push the fabric against the frame instead of having it billow as shown.
Yes, you definitely will get better results with the frame behind the sail. Attaching the frame like that is just plain wrong. Ok, kids wil love the kite which ever way but I'm an engineer so I can't keep my mouth shut.


Eating disorders can cause people to obsess about weight and what they eat. It can be characterized by a distorted body image, with an unwarranted fear of being overweight. Symptoms include trying to maintain a below-normal weight through starvation or too much exercise. Medical treatment may be needed to restore normal weight. Therapy often times is the best way work through these issues.


text:
Prodidomus duffeyi est une espèce d'araignées aranéomorphes de la famille des Prodidomidae.

Distribution
Cette espèce est endémique de l'île de l'Ascension à Sainte-Hélène, Ascension et Tristan da Cunha.

Description
La femelle holotype mesure .

Systématique et taxinomie
Cette espèce a été décrite par Cooke en 1964.

Étymologie
Cette espèce est nommée en l'honneur d'Eric Duffey.

Publication originale
 Cooke, 1964 : « A revisionary study of some spiders of the rare family Prodidomidae. » Proceedings of the Zoological Society of London, , , .

Liens externes

Notes et références

Prodidomidae
Espèce d'araignées (nom scientifique)
Faune endémique d'Ascension

redpajama_set_name: RedPajamaWikipedia


text:
Q: JAVA Crear atributo int y devolver en metodo get string Estoy con una tarea y no logro poder hacerla.
En el enunciado dice tal que así:
'Algunos atributos tendrán un valor que se definirá al instanciarse el objeto y ya nunca modificarán su contenido durante toda la vida del objeto (constantes). Podría decirse que definen algo así como la naturaleza inmutable:
código del teatro;
nombre del teatro;
aforo del teatro.
Los códigos de los teatros serán consecutivos y comenzarán por 1. Cada vez que se instancie un nuevo objeto Teatro se le asignará un nuevo código que no podrá volver a ser utilizado nunca más, aunque ese objeto dejara de utilizarse y desapareciera. La representación interna de los códigos podrá implementarse como se considere oportuno, lo único que habrá que tener en cuenta es que el método getter que lo devuelva lo hará en forma de String.
Y luego me piden hacer un get del código. Mi duda es en la declaración lo pongo como int? como string? hago el código consecutivo en el getCodigo? Muchas gracias y un saludo.
Dejo parte del código
  //Atributos de clase variables (representan informacion de la clase)

private static int NumeroTeatros;                         //Numero de teatros instanciados
private static int CantidadObras;                         //Cantidad total de obras activas que se estan representando
private static int EntradasVendidasTotales;              //Cantidad de entradas vendidas en todos los teatros y todas las funciones

//Atributos de objeto
// -----------------------

// Atributos de objeto constantes (representan características inmutables)
private final int codigoTeatro;                         // Codigo del teatro
private final String NombreTeatro;                         // Nombre del teatro
private final int Aforo;

Y aqui el get
//Metodos de consulta

   public String getCodigoTeatro(){

       for (int numero= 0; numero<100; numero++){

       String suma = "" + numero;}

       codigoTeatro = String suma;

       return this.codigoTeatro;

   }

   public String getNombreTeatro(){
       return this.NombreTeatro;
   }

A: Tienes que tener algo como esto:
public class Teatro {
  private static int CodigoActual =0; //Esto es una variable estatica es comun para todas las instancias de la clase teatro

  public int Codigo; //es el código individual de cada instancia de teatro
  public Teatro(){
      this.Codigo = ++CodigoActual; //se asigna un código correlativo e incremental cada vez que se instancia un teatro
  }

  public String getCodigoTeatro(){ //retorna el código como string
      return this.Codigo + "";
  }
}

redpajama_set_name: RedPajamaStackExchange


Lumineers are a new development in the dental industry that provide a topical application of a veneer that is made specifically for you. Lumineers by Cerinate®, are Den-Mat's alternative to traditional porcelain veneers. As opposed to the traditional veneer that requires injections and lengthy procedures, the Lumineer design does not need any of this. The Lumineer application is completely reversible, as well, to provide the peace of mind in knowing you can adjust the Lumineers or repair them if any damage occurs.
The veneer brand Lumineers has received a lot of publicity in recent years. The procedure is discussed like it is a miracle product. However, many people are not aware of what Lumineers are or how they work. In fact there are many aspects to Lumineers that many people do not know.
Lumineers are a specific brand of dental veneers that have a different construction than other veneer styles. Traditional veneers are usually constructed from 0.5 millimeters thick. Lumineers are designed with different bonding techniques which make them stronger. The added strength enables a thinner final product which is the main selling point with Lumineers. Lumineers are able to be spread to 0.3 millimeters thick, which is only as thick as a contact lens. Den Mart based in California is the creator of the Lumineers brand of dental veneers.
No temporaries are needed as the installation of Lumineers can be done instantly without any waiting period. There will also be no risk of subgingival placement of Lumineers as preparation of the tooth is very minimal or can be skipped entirely. No packing of the subgingival cord is needed, which reduces the discomfort and chair side time of the procedure, as no preparation of the tooth is needed. Therefore, all these features of Lumineers contribute to significantly less chair time than traditional placement of traditional crowns.
Lumineers are made from the same material as all other veneers. Dental veneers are made from a form of porcelain that is mixed with other materials to create a tooth-like coating that improves the appearance of the mouth. Lumineers are made from Cerinate porcelain and are usually attached with Ultra-Bond Restorative Resin Cement and Tenure adhesive glue. Cerinate porcelain is created with feldspathic porcelain mixed with leucite crystals. These materials provide a bond with the teeth that can last for twenty years or more. Each set of Lumineers comes with a five year warranty and a guarantee of replacement at no extra charge.
Lumineers can be installed in one of two ways. The first way is the traditional installation method. This is where a dentist will file down the existing teeth leaving gaps between the teeth so that the appearance of the Lumineers will look like the patient's regular teeth.
The second way to install Lumineers is directly over the existing teeth. This coating will leave a bump between the tops of the original teeth and the new veneers. Some dentists do not like to use this method.
The purpose of installing Lumineers rather than having another form of dental cosmetic surgery is twofold. Many people do not want to wait for the time it takes to improve their teeth using other dental methods. Other people have very bad teeth that would be almost impossible to fix any other way. Lumineers also sound better to individuals who are frightened by the idea of grinding away their natural teeth. Lumineers can provide an instantly brighter and whiter smile to almost anyone.
Visit with the professional that applied the Lumineers to your teeth. Discuss your concern if the Lumineer is chipped, cracked or damaged.Have your dentist drill away the damaged portion of the topical Lumineer, until the tooth is showing.
Have your dentist clean away any debris or residue from the removal of the Lumineer surface. Allow the area to dry completely before applying another Lumineer application to the tooth.
Allow your dentist to polish the tooth to rid it of any surface material. Your dentist will then apply a new Lumineer application to the original tooth. Allow the treatment to set according to your dentist's instructions. Have your dentist polish and shape the Lumineer to match the other teeth to finish.
Avoid eating very hard foods, from candies to ice. Avoid consuming large amounts of coffee and tea, as these tend to stain the Lumineer.
My New Smile reports that because Lumineers require no enamel removal, there is often a gap between the Lumineers and the existing teeth. As a result, there is the potential risk of tooth decay and gum disease down the road.
This entry was posted in Cosmetic Dentistry and tagged cerinate porcelain, damage, dental cosmetic surgery, Lumineers, repair, teeth, tenure adhesive glue, Ultra-Bond Restorative Resin Cement, veneers on October 13, 2011 by chzechze.


A cell is the smallest unit of a freely living system. Our understanding of cells is measured by our ability to predict cellular behaviours in response to environmental changes and genetic manipulations. Traditionally, researchers strive to gain insights into cellular behaviours through characterizing their underlying molecular interactions. This 'bottom-up' approach, however, requires a macroscopic number of largely inaccessible parameters in order to be predictive.
Prof. Hwa will describe a complementary 'top-down' approach based on quantitative phenomenology. Extensive quantitative experiments establish that the model bacterium Esherichia coli organizes many of its behavioural responses in very simple manners in accordance with the rate of cell growth. The existence of these simple empirical relations (growth laws) despite myriads of complex molecular interactions is a striking manifestation of a tremendous degree of dimensional reduction occurring in living cells. Prof. Hwa will describe how the growth laws can be used to make accurate predictions of cell behaviours without fitting parameters. He will also discuss how the magical dimension reduction can be accomplished by cells through clever strategy of gene regulation.


text:
.class Lcom/android/server/display/WifiDisplayController$17;
.super Ljava/lang/Object;
.source "WifiDisplayController.java"

# interfaces
.implements Ljava/lang/Runnable;

# annotations
.annotation system Ldalvik/annotation/EnclosingMethod;
    value = Lcom/android/server/display/WifiDisplayController;->reportFeatureState()V
.end annotation

.annotation system Ldalvik/annotation/InnerClass;
    accessFlags = 0x0
    name = null
.end annotation

# instance fields
.field final synthetic this$0:Lcom/android/server/display/WifiDisplayController;

.field final synthetic val$featureState:I

# direct methods
.method constructor <init>(Lcom/android/server/display/WifiDisplayController;I)V
    .locals 0

    iput-object p1, p0, Lcom/android/server/display/WifiDisplayController$17;->this$0:Lcom/android/server/display/WifiDisplayController;

    iput p2, p0, Lcom/android/server/display/WifiDisplayController$17;->val$featureState:I

    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method

# virtual methods
.method public run()V
    .locals 2

    iget-object v0, p0, Lcom/android/server/display/WifiDisplayController$17;->this$0:Lcom/android/server/display/WifiDisplayController;

    invoke-static {v0}, Lcom/android/server/display/WifiDisplayController;->-get20(Lcom/android/server/display/WifiDisplayController;)Lcom/android/server/display/WifiDisplayController$Listener;

    move-result-object v0

    iget v1, p0, Lcom/android/server/display/WifiDisplayController$17;->val$featureState:I

    invoke-interface {v0, v1}, Lcom/android/server/display/WifiDisplayController$Listener;->onFeatureStateChanged(I)V

    return-void
.end method

redpajama_set_name: RedPajamaGithub


text:
/*-----------------------------------------------------------------------------
 *
 * gp_top_down_program.h
 *
 *
 *		AUTHOR: lord_pretzel
 *
 *-----------------------------------------------------------------------------
 */

#ifndef INCLUDE_PROVENANCE_REWRITER_GAME_PROVENANCE_GP_TOP_DOWN_PROGRAM_H_
#define INCLUDE_PROVENANCE_REWRITER_GAME_PROVENANCE_GP_TOP_DOWN_PROGRAM_H_

#include "model/datalog/datalog_model.h"

extern DLProgram *createTopDownGPprogram (DLProgram *p);

#endif /* INCLUDE_PROVENANCE_REWRITER_GAME_PROVENANCE_GP_TOP_DOWN_PROGRAM_H_ */


text:
Please revisit devotionaltree.com for more spritual videos, audios and devotional knowledge, Thank you so much.
Welcome Devotee
Bhagwat Gita
Read Bhagwat Gita
Listen Bhagwat Gita
All Aarti
All Aarti New
Listen Aarti
Listen Aarti Video
Radha Krishna Bhajans
Hanuman Bhajans
Anoop Jalota
Vinod Aggarwal
Mridul Krishna Shastri
16 Samskaras
Puja Samagri
Hindu Fasting
Hindu Marriage Ceremony
Lunar Calendar
Parama Shuddha Ekadashi
Sri Yudhishthira Maharaja said, "Oh Supreme Lord, what is the name and character of that Ekadasii that occurs during the dark fortnight (krishna paksha) of the extra, leap year month of Purushottama. Also, Oh master of all the universes, what is the process for observing it properly? Kindly narrate all of this to me?"
The Supreme Personality of Godhead, Lord Sri Krishna, replied, "Oh Yudhishthira, this meritorious day is called Parama Ekadasi. It bestows the great benediction of an enjoyable life and ultimate liberation, release from birth and death. The process for observing it is similar to that for observing the Ekadasii that occurs during the light part of this month of Kartika. That is to say, on this Ekadasi one should worship Me, the best of all living beings, with full love and devotion. In this connection I will now tell you a wonderful history, just as I heard it from the great sage in the city of Kampilya.
"Once a very pious brahmin named Sumedha resided in Kampilya with his wife, Pavitra, who was extremely chaste and devoted to her husband. On account of having committed some sin in his previous life, Sumedha was without any money or food grains, and even though he begged many people for food, he could not obtain any substantial amount. He hardly had adequate food, clothing, or shelter for himself and his beautiful young wife, who was of such excellent character that she continued to serve Sumedha faithfully despite their poverty. When guests would come to their home, Pavitra mataji would give them her own food, and although she often went hungry, her beautiful, lotuslike face never faded. This fasting made her weak, but her affection for Sumedha remained unbreakable.
"Seeing all this, and lamenting his bad luck, Sumedha one day said to Pavitra, 'My dear wife, Oh most beautiful one, I beg alms from the rich but receive scarcely a scrap. What am I to do? What possible relief is there for our plight? Where should I go for relief? Oh most obedient and loving wife, without enough wealth, household affairs are never successful, - na vandhu madhye dhanahina jivanam. Therefore please permit me to go abroad and attain some wealth. If I make such an effort, I shall certainly obtain whatever fortune I am destined to enjoy. Without making some endeavour a person cannot satisfy his desires or meet his needs. Thus wise men have said that enthusiastic endeavour is always auspicious.' The revealed scriptures declare, udyoginah siNgham upaiti laxmi daivena deyati ka purushah vadantii: "One who endeavours enthusiastically will certainly attain success, but one who merely says, 'I accept my lot in life is a lazy man".
"Upon hearing this from her husband as he spoke these words, Pavitra joined her palms and, her eyes brimming with tears, spoke to him with great respect and affection: 'I think there is no one greater or more learned than you, my dear. One who, though in misery, is interested in the welfare of others speaks just as you have. However, the scriptures state that whatever wealth a person attains in his life is due to his having given charity in previous lives, and that if one has not given charity in previous lives, then even though he may sit a top a mound of gold as big as Mount Sumeru, he will still remain poor.
Purva-janmarjitam vidya purva-janmarjitam dhanam purva-janmarjitam kanya agre dhavati dhavatih "Transcendental knowledge, spiritual education, satisfying wealth, and pleasing family members are acquired by a person who has given profuse charity. Whatever good a person does returns to him many fold." In Manu-nitii, Manu Maharaja says, bhagyam phalanti sarvatra na cha vidya na cha paurusham: "Whatever is predestined by Viddhata, the fortune-maker, will surely happen. One's so called good education, skill, and enthusiasm will not necessarily guarantee to bring one success." Whatever charity a person gives in the form of education, money, fertile land, and the like is returned to him in a future lifetime. We gain what we have given, when given with a good heart. Indeed, whatever the Lord of destiny, the creator, has written as one's fortune will certainly come to pass. No one attains any wealth without having given in charity in his previous life. Oh best of the brahmins, since we are now poor, in our previous lives neither you nor I must have given any/sufficient charity to worthy persons. Therefore, Oh gracious husband, you should remain here with me. Without you I cannot live even a moment.
"'Bereft of her husband, a woman is not welcomed by her father, mother, brother, father-in-law, or any other family members. Everyone will say, "You have lost your husband; you are bad luck/fortune personified!" In this way I shall be criticised severely! The Nitii-shastras says, vinaashraye na tishthanti panditah vanita latah: "Without proper shelter and support, the following three things cannot survive; a learned man/brahmin, a woman, and a creeper." Therefore the modern women's liberation movement is a total failure. Furthermore, the GaruDa Purana states, pati dharma pati sargah pati hi paramam tapah patiri pritim Apanne priiyante sarva devata "A chaste woman always thinks that pleasing her spiritually situated husband is her heavenly pleasure, utmost duty, and greatest austerity. If her husband is pleased (as Kulottama, Vishnu personified), she thinks the Supreme lord and all the demigods are pleased. The Supreme Lord includes all the devatas (demigods)."
Pavitra continued, 'Please, therefore, stay with me and be satisfied with whatever wealth we get. Whatever is destined, we shall obtain in due course of time and enjoy here in perfect happiness.'
"Hearing these plaintive words from his wife, Sumedha decided to remain in their native village. One day the great sage Kaundinya arrived at their place, and upon seeing him the brahmin Sumedha and his wife stood up before him and then offered him their respectful obeisances. With his head bowed, Sumedha welcomed him: 'We are very fortunate to behold you here today, Oh wisest of sages. My life has become successful, and I am much obliged to you.'
"Sumedha offered Kaumdinya Muni a comfortable seat and highly praised his austerities and learning. ''Just by having your darshan today,' said Sumedha, 'I have become very fortunate.' The poor brahmin couple fed the sage as sumptuously as they could afford to according to their means, and afterwards Pavitra asked the mendicant, 'Oh most learned one, what process can we follow to be relieved of our poverty? How can a person who has not given anything in charity in his previous life get a good family, much wealth, and a fine education in this life? My husband wants to leave me here and go abroad to beg alms, but I have earnestly prayed to him to stay here with me. I humbly told him that if one lacks wealth in the present life, it is because of not having given sufficient charity in previous life times. And so he has consented to remain here. It is only due to my great fortune that you have so mercifully come here today. Now we are certain to see the end of our poverty very soon.
"Oh best of the brahmanas, please tell us how we can be free of this perpetual misery brought on by poverty. Oh merciful one, kindly describe some means - a place of pilgrimage we may visit, a day of fasting we may observe, or an austerity we may perform - by which our ill fortune will end forever.'
"Hearing this sincere supplication from the patient lady, the great sage Kaundinya reflected silently for a moment and then said, 'There is a fast day very dear to the Supreme Personality of Godhead, Lord Hari. Fasting on this day nullifies all kinds of sins and removes all miseries caused by poverty. This fast day, which occurs during the dark part (krishna paksha) of the extra, leap-year month, is known as Parama Ekadasi. It is the topmost day of Lord Vishnu, hence the name Parama. This extra month (Purushottam Mase), dark fortnight Ekadasi bestows all the necessities of life, such as money and food grains, and at last gives liberation/release. When the evening of this day comes, one should begin singing the glories of the Lord and dancing in ecstasy, and one should continue through the entire night.
This holy fast was once observed faithfully by Lord Kuvera (the treasurer of the devas). When Lord Shiva saw how strictly he had fasted, Shiva became very pleased and made Kuvera the treasurer of heaven. Also, king Harishchandra fasted on this Ekadasi after his dear wife and son had been sold, and the king was able to get them back. Thereafter he ruled his kingdom with no further impediments. Therefore, Oh broad-eyed lady, you also should observe the sacred fast of Parama Ekadasi, following all the appropriate rules and regulations and remaining awake all night.'"
Lord Sri Krishna continued, "Oh Yudhishthira, son of Pandu, in this way Kaundinya Muni mercifully and affectionately instructed PavitrA about the Parama Ekadasi fast. Then he said to Sumedha, 'On the Dvadasi, the day after Ekadasi, you should vow to observe Pancharatriki fasting according to all the rules and regulations. After taking a bath early in the morning, you and your good wife, along with both your parents and hers, should fast for five days according to your ability. Then you will all become eligible to return home, to the abode of Lord Vishnu.
'A person who simply makes use of only one seat during these five days goes to the heavenly planets. Whoever feeds qualified brahmins nicely on these five days has in effect fed all the demigods, all human beings, and even all the demons. Whoever donates a pot of drinking water to a twice born brahmin during this five-day period will gain merit equal to that gained by donating the entire planet in charity. Anyone who gives a learned person a pot filled with sesame seeds resides in heaven for as many years as there are seeds in the pot. One who donates a pot filled with golden ghee will surely go to the abode of the sun god after fully enjoying the pleasures of this earthly planet. Whoever remains celibate during these five-days will attain celestial happiness and enjoy with the maidens of Indraloka. Therefore both of you - Sumedha and Pavitra - should fast during these five days of Pancharatrika in order to be rewarded with ample grains and wealth for the rest of your lives on this planet. The spiritual world will be your abode thereafter.'
Hearing this sublime advice, the brahmin couple, Sumedha and Pavitra, properly observed the Parama Ekadasi and the fast of Pancharatrika, and very soon thereafter they beheld a handsome prince approaching them from the royal palace. On the orders of Lord Brahma, the prince gave them a beautiful, exquisitely furnished house and invited them to live in it. Praising their austerity and patience, he also gave them an entire village for their livelihood. Then he returned to the palace. Thus Sumedha and his wife enjoyed all kinds of facilities in this world and at last went to the abode of Lord Vishnu.
Anyone who observes a fast on Parama Ekadasi and also the fast of Pancharatrika is freed from all his sins, and after enjoying life he returns to Vishnuloka, as did the brahmin Sumedha and his faithful wife, Pavitra. It is impossible, Oh Yudhishthira, to calculate the extent of the merit one obtains by fasting on Parama Ekadasi, for such an observance is equal to bathing in places of pilgrimage such as Pushkara Lake and the Ganges river, giving cows in charity, and performing all sorts of other religious activities. One who fasts on this day has also completed the offerings of oblations to his forefathers in Gaya. He has, in effect, fasted on all other auspicious days.
"As in the social order the brahmin are considered the best, as amongst four-legged creatures the cow is best, and as among demigods Lord Indradev is the best, so among all months the extra month of leap-year is the best. The Pancharatrika fast - the fast of five days (panch = five, ratri = nights) in the extra, leap year month - is said to remove all kinds of abominable sins. But the Pancharatriki fast, together with the fasts of Parama and Paramai Ekadasi, destroys all a person's sins. If a person is unable to fast on these days, he should observe the fasts during the extra month according to his ability. A person who, having received a human birth, does not take a proper bath during this extra month and then observes these Ekadasis, which are very dear to Lord Hari, commits suicide and suffers in the cycle of 8,400,000 species. The rare human birth is meant for accumulating merit and at last achieving liberating release from this material world. Therefore one should by all means observe fasting on this auspicious Parama Ekadasi."
Lord Sri Krishna concluded, "Oh sinless Yudhishthira, as you have requested, I have described to you the wonderful merit one can attain by fasting on the Ekadasi named Parama, which occurs during the dark part of the extra, leap-year month. You should observe this fast if at all possible."
King Yudhishthira did exactly as Lord Krishna had instructed, and so did all his brothers and their wife, Draupadi. After enjoying pleasures rarely achieved in the material world, they returned home, back to Godhead. Whoever, after taking a proper bath, observes a fast on these two extra-month Ekadasis will go to heaven and finally attain to the abode of Sri Vishnu, and as he travels there he will be praised and prayed to by all the demigods.
Thus ends the narration of the glories of Parama Ekadasi, the Ekdasi that occurs during the dark fortnight of the extra, leap-year month, from the Skanda Purana.
Hare Krishna Hare Krishna Krishna Krishna Hare Hare|
Hare Rama Hare Rama Rama Rama Hare Hare||
Copyright ©2010-2015, Devotionaltree.com

redpajama_set_name: RedPajamaCommonCrawl


All of us have seen canopies which are used in the back of vehicles. Usually, these canopies are used for a few special vehicles such as the single and the double cab. If you look at the market you will see a number of people selling these canopies. These products are built following the normal designs for such products. If you are ever in need of a canopy which is especially built for your vehicle which serves for a specific purpose, there are suppliers or rather builders who are ready to create that canopy for you. They are people who custom build anything from tool boxes. Usually, such a builder follows a certain pattern to make sure your work is done in the best way possible.
First of all, they will get details or rather specifications about the canopy you want to be built. This will include the size and the different make you want to have. The best builder is ready to accept all of these details from you by allowing you to send a request using their website.
Once you have contacted them with this request they will contact you and help you choose the perfect design for the canopy you want to be built. You have to remember if you want to get the best use of the canopy the design should be chosen with the same care you put to choosing one of the aluminium trailers.
Once you have chosen the design and made an initial deposit for the work, the builder will create a 3D drawing including all the specifications and the design you have chosen. They will send you the drawing along with all the necessary details so you get a chance to see how it will look and be once it is actually created.
Once you confirm you like the design and want it made they will create the canopy for you. Once the order is ready they will contact you. You should remember the best builders only take the time they really need to make the canopy.
When the order is ready you can go and collect the canopy. Or they will offer to install the canopy to your cab once the production is done.
As you can see, working with a reputable vehicle canopy builder is a really good experience.
Why Purchase A Sports Car?


text:
/*jshint strict: false, maxlen: 300 */

var db = require("@arangodb").db,
  internal = require("internal"),
  systemColors = internal.COLORS,
  print = internal.print,
  colors = { };

if (typeof internal.printBrowser === "function") {
  print = internal.printBrowser;
}

var stringBuilder = {

  output: "",

  appendLine: function(line) {
    if (!line) {
      this.output += "\n";
    }
    else {
      this.output += line + "\n";
    }
  },

  getOutput: function() {
    return this.output;
  },

  clearOutput: function() {
    this.output = "";
  }

};

/* set colors for output */
function setColors (useSystemColors) {
  'use strict';

  [ "COLOR_RESET",
    "COLOR_CYAN", "COLOR_BLUE", "COLOR_GREEN", "COLOR_MAGENTA", "COLOR_YELLOW", "COLOR_RED", "COLOR_WHITE",
    "COLOR_BOLD_CYAN", "COLOR_BOLD_BLUE", "COLOR_BOLD_GREEN", "COLOR_BOLD_MAGENTA", "COLOR_BOLD_YELLOW",
    "COLOR_BOLD_RED", "COLOR_BOLD_WHITE" ].forEach(function(c) {
    colors[c] = useSystemColors ? systemColors[c] : "";
  });
}

/* colorizer and output helper functions */

function attributeUncolored (v) {
  'use strict';
  return "`" + v + "`";
}

function keyword (v) {
  'use strict';
  return colors.COLOR_CYAN + v + colors.COLOR_RESET;
}

function annotation (v) {
  'use strict';
  return colors.COLOR_BLUE + v + colors.COLOR_RESET;
}

function value (v) {
  'use strict';
  if (typeof v === 'string' && v.length > 1024) {
    return colors.COLOR_GREEN + v.substr(0, 1024) + "..." + colors.COLOR_RESET;
  }
  return colors.COLOR_GREEN + v + colors.COLOR_RESET;
}

function variable (v) {
  'use strict';
  if (v[0] === "#") {
    return colors.COLOR_MAGENTA + v + colors.COLOR_RESET;
  }
  return colors.COLOR_YELLOW + v + colors.COLOR_RESET;
}

function func (v) {
  'use strict';
  return colors.COLOR_GREEN + v + colors.COLOR_RESET;
}

function collection (v) {
  'use strict';
  return colors.COLOR_RED + v + colors.COLOR_RESET;
}

function attribute (v) {
  'use strict';
  return "`" + colors.COLOR_YELLOW + v + colors.COLOR_RESET + "`";
}

function header (v) {
  'use strict';
  return colors.COLOR_MAGENTA + v + colors.COLOR_RESET;
}

function section (v) {
  'use strict';
  return colors.COLOR_BOLD_BLUE + v + colors.COLOR_RESET;
}

function pad (n) {
  'use strict';
  if (n < 0) {
    // value seems invalid...
    n = 0;
  }
  return new Array(n).join(" ");
}

function wrap (str, width) {
  'use strict';
  var re = ".{1," + width + "}(\\s|$)|\\S+?(\\s|$)";
  return str.match(new RegExp(re, "g")).join("\n");
}

/* print functions */

/* print query string */
function printQuery (query) {
  'use strict';
  stringBuilder.appendLine(section("Query string:"));
  stringBuilder.appendLine(" " + value(wrap(query, 100).replace(/\n+/g, "\n ", query)));
  stringBuilder.appendLine();
}

/* print write query modification flags */
function printModificationFlags (flags) {
  'use strict';
  if (flags === undefined) {
    return;
  }
  stringBuilder.appendLine(section("Write query options:"));
  var keys = Object.keys(flags), maxLen = "Option".length;
  keys.forEach(function(k) {
    if (k.length > maxLen) {
      maxLen = k.length;
    }
  });
  stringBuilder.appendLine(" " + header("Option") + pad(1 + maxLen - "Option".length) + "   " + header("Value"));
  keys.forEach(function(k) {
    stringBuilder.appendLine(" " + keyword(k) + pad(1 + maxLen - k.length) + "   " + value(JSON.stringify(flags[k])));
  });
  stringBuilder.appendLine();
}

/* print optimizer rules */
function printRules (rules) {
  'use strict';
  stringBuilder.appendLine(section("Optimization rules applied:"));
  if (rules.length === 0) {
    stringBuilder.appendLine(" " + value("none"));
  }
  else {
    var maxIdLen = String("Id").length;
    stringBuilder.appendLine(" " + pad(1 + maxIdLen - String("Id").length) + header("Id") + "   " + header("RuleName"));
    for (var i = 0; i < rules.length; ++i) {
      stringBuilder.appendLine(" " + pad(1 + maxIdLen - String(i + 1).length) + variable(String(i + 1)) + "   " + keyword(rules[i]));
    }
  }
  stringBuilder.appendLine();
}

/* print warnings */
function printWarnings (warnings) {
  'use strict';
  if (! Array.isArray(warnings) || warnings.length === 0) {
    return;
  }

  stringBuilder.appendLine(section("Warnings:"));
  var maxIdLen = String("Code").length;
  stringBuilder.appendLine(" " + pad(1 + maxIdLen - String("Code").length) + header("Code") + "   " + header("Message"));
  for (var i = 0; i < warnings.length; ++i) {
    stringBuilder.appendLine(" " + pad(1 + maxIdLen - String(warnings[i].code).length) + variable(warnings[i].code) + "   " + keyword(warnings[i].message));
  }
  stringBuilder.appendLine();
}

/* print indexes used */
function printIndexes (indexes) {
  'use strict';

  stringBuilder.appendLine(section("Indexes used:"));

  if (indexes.length === 0) {
    stringBuilder.appendLine(" " + value("none"));
  }
  else {
    var maxIdLen = String("By").length;
    var maxCollectionLen = String("Collection").length;
    var maxUniqueLen = String("Unique").length;
    var maxSparseLen = String("Sparse").length;
    var maxTypeLen = String("Type").length;
    var maxSelectivityLen = String("Selectivity").length;
    var maxFieldsLen = String("Fields").length;
    indexes.forEach(function(index) {
      var l = String(index.node).length;
      if (l > maxIdLen) {
        maxIdLen = l;
      }
      l = index.type.length;
      if (l > maxTypeLen) {
        maxTypeLen = l;
      }
      l = index.fields.map(attributeUncolored).join(", ").length + "[  ]".length;
      if (l > maxFieldsLen) {
        maxFieldsLen = l;
      }
      l = index.collection.length;
      if (l > maxCollectionLen) {
        maxCollectionLen = l;
      }
    });
    var line = " " + pad(1 + maxIdLen - String("By").length) + header("By") + "   " +
               header("Type") + pad(1 + maxTypeLen - "Type".length) + "   " +
               header("Collection") + pad(1 + maxCollectionLen - "Collection".length) + "   " +
               header("Unique") + pad(1 + maxUniqueLen - "Unique".length) + "   " +
               header("Sparse") + pad(1 + maxSparseLen - "Sparse".length) + "   " +
               header("Selectivity") + "   " +
               header("Fields") + pad(1 + maxFieldsLen - "Fields".length) + "   " +
               header("Ranges");

    stringBuilder.appendLine(line);

    for (var i = 0; i < indexes.length; ++i) {
      var uniqueness = (indexes[i].unique ? "true" : "false");
      var sparsity = (indexes[i].hasOwnProperty("sparse") ? (indexes[i].sparse ? "true" : "false") : "n/a");
      var fields = "[ " + indexes[i].fields.map(attribute).join(", ") + " ]";
      var fieldsLen = indexes[i].fields.map(attributeUncolored).join(", ").length + "[  ]".length;
      var ranges;
      if (indexes[i].hasOwnProperty("condition")) {
        ranges = indexes[i].condition;
      }
      else {
        ranges = "[ " + indexes[i].ranges + " ]";
      }
      var selectivity = (indexes[i].hasOwnProperty("selectivityEstimate") ?
        (indexes[i].selectivityEstimate * 100).toFixed(2) + " %" :
        "n/a"
      );
      line = " " +
        pad(1 + maxIdLen - String(indexes[i].node).length) + variable(String(indexes[i].node)) + "   " +
        keyword(indexes[i].type) + pad(1 + maxTypeLen - indexes[i].type.length) + "   " +
        collection(indexes[i].collection) + pad(1 + maxCollectionLen - indexes[i].collection.length) + "   " +
        value(uniqueness) + pad(1 + maxUniqueLen - uniqueness.length) + "   " +
        value(sparsity) + pad(1 + maxSparseLen - sparsity.length) + "   " +
        pad(1 + maxSelectivityLen - selectivity.length) + value(selectivity) + "   " +
        fields + pad(1 + maxFieldsLen - fieldsLen) + "   " +
        ranges;

      stringBuilder.appendLine(line);
    }
  }
}

/* print indexes used */
function printTraversalDetails (traversals) {
  'use strict';
  if (traversals.length === 0) {
    return;
  }

  stringBuilder.appendLine();
  stringBuilder.appendLine(section("Traversals on graphs:"));

  var maxIdLen = String("Id").length;
  var maxMinMaxDepth = String("Depth").length;
  var maxVertexCollectionNameStrLen = String("Vertex collections").length;
  var maxEdgeCollectionNameStrLen = String("Edge collections").length;
  var maxConditionsLen = String("Filter conditions").length;

  traversals.forEach(function(node) {
    var l = String(node.id).length;
    if (l > maxIdLen) {
      maxIdLen = l;
    }

    if (node.minMaxDepthLen > maxMinMaxDepth) {
      maxMinMaxDepth = node.minMaxDepthLen;
    }

    if (node.hasOwnProperty('ConditionStr')) {
      if (node.ConditionStr.length > maxConditionsLen) {
        maxConditionsLen = node.ConditionStr.length;
      }
    }

    if (node.hasOwnProperty('vertexCollectionNameStr')) {
      if (node.vertexCollectionNameStrLen > maxVertexCollectionNameStrLen) {
        maxVertexCollectionNameStrLen = node.vertexCollectionNameStrLen;
      }
    }
    if (node.hasOwnProperty('edgeCollectionNameStr')) {
      if (node.edgeCollectionNameStrLen > maxEdgeCollectionNameStrLen) {
        maxEdgeCollectionNameStrLen = node.edgeCollectionNameStrLen;
      }
    }

  });

  var line = " " + pad(1 + maxIdLen - String("Id").length) + header("Id") + "   " +
    header("Depth") +  pad(1 + maxMinMaxDepth - String("Depth").length) + "   " +
    header("Vertex collections") + pad(1 + maxVertexCollectionNameStrLen - "Vertex collections".length) + "   " +
    header("Edge collections") + pad(1 + maxEdgeCollectionNameStrLen - "Edge collections".length) + "   " +
    header("Filter conditions");

  stringBuilder.appendLine(line);

  for (var i = 0; i < traversals.length; ++i) {
    line = " " + pad(1 + maxIdLen - String(traversals[i].id).length) +
      traversals[i].id + "   ";

    line += traversals[i].minMaxDepth + pad(1 + maxMinMaxDepth - traversals[i].minMaxDepthLen) +  "   ";

    if (traversals[i].hasOwnProperty('vertexCollectionNameStr')) {
      line += traversals[i].vertexCollectionNameStr +
        pad(1 + maxVertexCollectionNameStrLen - traversals[i].vertexCollectionNameStrLen) + "   ";
    }
    else {
      line += pad(1 + maxVertexCollectionNameStrLen) + "   ";
    }

    if (traversals[i].hasOwnProperty('edgeCollectionNameStr')) {
      line += traversals[i].edgeCollectionNameStr +
        pad(1 + maxEdgeCollectionNameStrLen - traversals[i].edgeCollectionNameStrLen) + "   ";
    }
    else {
      line += pad(1 + maxEdgeCollectionNameStrLen) + "   ";
    }

    if (traversals[i].hasOwnProperty('ConditionStr')) {
      line += traversals[i].ConditionStr;
    }

    stringBuilder.appendLine(line);
  }

}

/* analzye and print execution plan */
function processQuery (query, explain) {
  'use strict';
  var nodes = { },
    parents = { },
    rootNode = null,
    maxTypeLen = 0,
    maxSiteLen = 0,
    maxIdLen = String("Id").length,
    maxEstimateLen = String("Est.").length,
    plan = explain.plan,
    cluster = require("@arangodb/cluster");

  var recursiveWalk = function (n, level) {
    n.forEach(function(node) {
      nodes[node.id] = node;
      if (level === 0 && node.dependencies.length === 0) {
        rootNode = node.id;
      }
      if (node.type === "SubqueryNode") {
        recursiveWalk(node.subquery.nodes, level + 1);
      }
      node.dependencies.forEach(function(d) {
        if (! parents.hasOwnProperty(d)) {
          parents[d] = [ ];
        }
        parents[d].push(node.id);
      });

      if (String(node.id).length > maxIdLen) {
        maxIdLen = String(node.id).length;
      }
      if (String(node.type).length > maxTypeLen) {
        maxTypeLen = String(node.type).length;
      }
      if (String(node.site).length > maxSiteLen) {
        maxSiteLen = String(node.site).length;
      }
      if (String(node.estimatedNrItems).length > maxEstimateLen) {
        maxEstimateLen = String(node.estimatedNrItems).length;
      }
    });

    var count = n.length, site = "COOR";
    while (count > 0) {
      --count;
      var node = n[count];
      node.site = site;

      if (node.type === "RemoteNode") {
        site = (site === "COOR" ? "DBS" : "COOR");
      }
    }
  };
  recursiveWalk(plan.nodes, 0);

  var references = { },
    collectionVariables = { },
    usedVariables = { },
    indexes = [ ],
    traversalDetails = [],
    modificationFlags,
    isConst = true;

  var variableName = function (node) {
    try {
      if (/^[0-9_]/.test(node.name)) {
        return variable("#" + node.name);
      }
    }
    catch (x) {
      print(node);
      throw x;
    }

    if (collectionVariables.hasOwnProperty(node.id)) {
      usedVariables[node.name] = collectionVariables[node.id];
    }
    return variable(node.name);
  };

  var buildExpression = function (node) {
    isConst = isConst && ([ "value", "object", "object element", "array" ].indexOf(node.type) !== -1);

    switch (node.type) {
      case "reference":
        if (references.hasOwnProperty(node.name)) {
          var ref = references[node.name];
          delete references[node.name];
          if (Array.isArray(ref)) {
            var out = buildExpression(ref[1]) + "[" + (new Array(ref[0] + 1).join('*'));
            if (ref[2].type !== "no-op") {
              out += " " + keyword("FILTER") + " " + buildExpression(ref[2]);
            }
            if (ref[3].type !== "no-op") {
              out += " " + keyword("LIMIT ") + " " + buildExpression(ref[3]);
            }
            if (ref[4].type !== "no-op") {
              out += " " + keyword("RETURN ") + " " + buildExpression(ref[4]);
            }
            out += "]";
            return out;
          }
          return buildExpression(ref) + "[*]";
        }
        return variableName(node);
      case "collection":
        return collection(node.name) + "   " + annotation("/* all collection documents */");
      case "value":
        return value(JSON.stringify(node.value));
      case "object":
        if (node.hasOwnProperty("subNodes")) {
          if (node.subNodes.length > 20) {
            // print only the first 20 values from the objects
            return "{ " + node.subNodes.slice(0, 20).map(buildExpression).join(", ") + ", ... }";
          }
          return "{ " + node.subNodes.map(buildExpression).join(", ") + " }";
        }
        return "{ }";
      case "object element":
        return value(JSON.stringify(node.name)) + " : " + buildExpression(node.subNodes[0]);
      case "calculated object element":
        return "[ " + buildExpression(node.subNodes[0]) + " ] : " + buildExpression(node.subNodes[1]);
      case "array":
        if (node.hasOwnProperty("subNodes")) {
          if (node.subNodes.length > 20) {
            // print only the first 20 values from the array
            return "[ " + node.subNodes.slice(0, 20).map(buildExpression).join(", ") + ", ... ]";
          }
          return "[ " + node.subNodes.map(buildExpression).join(", ") + " ]";
        }
        return "[ ]";
      case "unary not":
        return "! " + buildExpression(node.subNodes[0]);
      case "unary plus":
        return "+ " + buildExpression(node.subNodes[0]);
      case "unary minus":
        return "- " + buildExpression(node.subNodes[0]);
      case "array limit":
        return buildExpression(node.subNodes[0]) + ", " + buildExpression(node.subNodes[1]);
      case "attribute access":
        return buildExpression(node.subNodes[0]) + "." + attribute(node.name);
      case "indexed access":
        return buildExpression(node.subNodes[0]) + "[" + buildExpression(node.subNodes[1]) + "]";
      case "range":
        return buildExpression(node.subNodes[0]) + " .. " + buildExpression(node.subNodes[1]) + "   " + annotation("/* range */");
      case "expand":
      case "expansion":
        if (node.subNodes.length > 2) {
          // [FILTER ...]
          references[node.subNodes[0].subNodes[0].name] = [ node.levels, node.subNodes[0].subNodes[1], node.subNodes[2], node.subNodes[3], node.subNodes[4] ];
        }
        else {
          // [*]
          references[node.subNodes[0].subNodes[0].name] = node.subNodes[0].subNodes[1];
        }
        return buildExpression(node.subNodes[1]);
      case "user function call":
        return func(node.name) + "(" + ((node.subNodes && node.subNodes[0].subNodes) || [ ]).map(buildExpression).join(", ") + ")" + "   " + annotation("/* user-defined function */");
      case "function call":
        return func(node.name) + "(" + ((node.subNodes && node.subNodes[0].subNodes) || [ ]).map(buildExpression).join(", ") + ")";
      case "plus":
        return buildExpression(node.subNodes[0]) + " + " + buildExpression(node.subNodes[1]);
      case "minus":
        return buildExpression(node.subNodes[0]) + " - " + buildExpression(node.subNodes[1]);
      case "times":
        return buildExpression(node.subNodes[0]) + " * " + buildExpression(node.subNodes[1]);
      case "division":
        return buildExpression(node.subNodes[0]) + " / " + buildExpression(node.subNodes[1]);
      case "modulus":
        return buildExpression(node.subNodes[0]) + " % " + buildExpression(node.subNodes[1]);
      case "compare not in":
        if (node.sorted) {
          return buildExpression(node.subNodes[0]) + " not in " + annotation("/* sorted */") + " " + buildExpression(node.subNodes[1]);
        }
        return buildExpression(node.subNodes[0]) + " not in " + buildExpression(node.subNodes[1]);
      case "compare in":
        if (node.sorted) {
          return buildExpression(node.subNodes[0]) + " in " + annotation("/* sorted */") + " " + buildExpression(node.subNodes[1]);
        }
        return buildExpression(node.subNodes[0]) + " in " + buildExpression(node.subNodes[1]);
      case "compare ==":
        return buildExpression(node.subNodes[0]) + " == " + buildExpression(node.subNodes[1]);
      case "compare !=":
        return buildExpression(node.subNodes[0]) + " != " + buildExpression(node.subNodes[1]);
      case "compare >":
        return buildExpression(node.subNodes[0]) + " > " + buildExpression(node.subNodes[1]);
      case "compare >=":
        return buildExpression(node.subNodes[0]) + " >= " + buildExpression(node.subNodes[1]);
      case "compare <":
        return buildExpression(node.subNodes[0]) + " < " + buildExpression(node.subNodes[1]);
      case "compare <=":
        return buildExpression(node.subNodes[0]) + " <= " + buildExpression(node.subNodes[1]);
      case "logical or":
        return buildExpression(node.subNodes[0]) + " || " + buildExpression(node.subNodes[1]);
      case "logical and":
        return buildExpression(node.subNodes[0]) + " && " + buildExpression(node.subNodes[1]);
      case "ternary":
        return buildExpression(node.subNodes[0]) + " ? " + buildExpression(node.subNodes[1]) + " : " + buildExpression(node.subNodes[2]);
      case "n-ary or":
        if (node.hasOwnProperty("subNodes")) {
          return node.subNodes.map(function(sub) { return buildExpression(sub); }).join(" || ");
        }
        return "";
      case "n-ary and":
        if (node.hasOwnProperty("subNodes")) {
          return node.subNodes.map(function(sub) { return buildExpression(sub); }).join(" && ");
        }
        return "";
      default:
        return "unhandled node type (" + node.type + ")";
    }
  };

  var buildSimpleExpression = function (simpleExpressions) {
    var rc = "";

    for (var indexNo in simpleExpressions) {
      if (simpleExpressions.hasOwnProperty(indexNo)) {
        if (rc.length > 0) {
          rc += " AND ";
        }
        for (var i = 0; i < simpleExpressions[indexNo].length; i++) {
          var item = simpleExpressions[indexNo][i];
          rc += attribute("Path") + ".";
          if (item.isEdgeAccess) {
            rc += attribute("edges");
          }
          else {
            rc += attribute("vertices");
          }
          rc += "[" + value(indexNo) + "] -> ";
          rc += buildExpression(item.varAccess);
          rc += " " + item.comparisonTypeStr + " ";
          rc += buildExpression(item.compareTo);
        }
      }

    }
    return rc;
  };

  var buildBound = function (attr, operators, bound) {
    var boundValue = bound.isConstant ? value(JSON.stringify(bound.bound)) : buildExpression(bound.bound);
    return attribute(attr) + " " + operators[bound.include ? 1 : 0] + " " + boundValue;
  };

  var buildRanges = function (ranges) {
    var results = [ ];
    ranges.forEach(function(range) {
      var attr = range.attr;

      if (range.lowConst.hasOwnProperty("bound") && range.highConst.hasOwnProperty("bound") &&
          JSON.stringify(range.lowConst.bound) === JSON.stringify(range.highConst.bound)) {
        range.equality = true;
      }

      if (range.equality) {
        if (range.lowConst.hasOwnProperty("bound")) {
          results.push(buildBound(attr, [ "==", "==" ], range.lowConst));
        }
        else if (range.hasOwnProperty("lows")) {
          range.lows.forEach(function(bound) {
            results.push(buildBound(attr, [ "==", "==" ], bound));
          });
        }
      }
      else {
        if (range.lowConst.hasOwnProperty("bound")) {
          results.push(buildBound(attr, [ ">", ">=" ], range.lowConst));
        }
        if (range.highConst.hasOwnProperty("bound")) {
          results.push(buildBound(attr, [ "<", "<=" ], range.highConst));
        }
        if (range.hasOwnProperty("lows")) {
          range.lows.forEach(function(bound) {
            results.push(buildBound(attr, [ ">", ">=" ], bound));
          });
        }
        if (range.hasOwnProperty("highs")) {
          range.highs.forEach(function(bound) {
            results.push(buildBound(attr, [ "<", "<=" ], bound));
          });
        }
      }
    });
    if (results.length > 1) {
      return "(" + results.join(" && ") + ")";
    }
    return results[0];
  };

  var label = function (node) {
    switch (node.type) {
      case "SingletonNode":
        return keyword("ROOT");
      case "NoResultsNode":
        return keyword("EMPTY") + "   " + annotation("/* empty result set */");
      case "EnumerateCollectionNode":
        collectionVariables[node.outVariable.id] = node.collection;
        return keyword("FOR") + " " + variableName(node.outVariable) + " " + keyword("IN") + " " + collection(node.collection) + "   " + annotation("/* full collection scan" + (node.random ? ", random order" : "") + " */");
      case "EnumerateListNode":
        return keyword("FOR") + " " + variableName(node.outVariable) + " " + keyword("IN") + " " + variableName(node.inVariable) + "   " + annotation("/* list iteration */");
      case "IndexNode":
        collectionVariables[node.outVariable.id] = node.collection;
        var types = [ ];
        node.indexes.forEach(function (idx, i) {
          var what = (idx.reverse ? "reverse " : "") + idx.type + " index scan";
          if (types.length === 0 || what !== types[types.length - 1]) {
            types.push(what);
          }
          idx.collection = node.collection;
          idx.node = node.id;
          if (node.condition.type && node.condition.type === 'n-ary or') {
            idx.condition = buildExpression(node.condition.subNodes[i]);
          }
          else {
            idx.condition = "*"; // empty condition. this is likely an index used for sorting only
          }
          indexes.push(idx);
        });
        return keyword("FOR") + " " + variableName(node.outVariable) + " " + keyword("IN") + " " + collection(node.collection) + "   " + annotation("/* " + types.join(", ") + " */");
      case "IndexRangeNode":
        collectionVariables[node.outVariable.id] = node.collection;
        var index = node.index;
        index.ranges = node.ranges.map(buildRanges).join(" || ");
        index.collection = node.collection;
        index.node = node.id;
        indexes.push(index);
        return keyword("FOR") + " " + variableName(node.outVariable) + " " + keyword("IN") + " " + collection(node.collection) + "   " + annotation("/* " + (node.reverse ? "reverse " : "") + node.index.type + " index scan */");

      case "TraversalNode":
        node.minMaxDepth = node.minDepth + ".." + node.maxDepth;
        node.minMaxDepthLen = node.minMaxDepth.length;

        var rc = keyword("FOR ") +
          variableName(node.vertexOutVariable) +
          "  " + annotation("/* vertex */");

        if (node.hasOwnProperty('edgeOutVariable')) {
          rc += "  , " + variableName(node.edgeOutVariable) +
            "  " + annotation("/* edge */");
        }
        if (node.hasOwnProperty('pathOutVariable')) {
          rc += "  , " + variableName(node.pathOutVariable) +
            "  " + annotation("/* paths */");
        }
        rc += "  " +
          keyword("IN") + " " +
          value(node.minMaxDepth) + "  " + annotation("/* min..maxPathDepth */") + "  ";

        var translate = ["ANY", "INBOUND", "OUTBOUND"];
        rc += keyword(translate[node.direction]);
        if (node.hasOwnProperty("vertexId")) {
          rc += " '" + value(node.vertexId) + "' ";
        }
        else {
          rc += " " + variableName(node.inVariable) + " ";
        }
        rc += annotation("/* startnode */") + "  ";

        if (Array.isArray(node.graph)) {
          rc += node.graph.map(function(g) { return collection(g); }).join(", ");
        }
        else {
          rc += keyword("GRAPH") +  " '" + value(node.graph) + "'";
        }

        traversalDetails.push(node);
        if (node.hasOwnProperty('simpleExpressions')) {
          node.ConditionStr = buildSimpleExpression(node.simpleExpressions);
        }

        var e = [];
        if (node.hasOwnProperty('graphDefinition')) {
          var v = [];
          node.graphDefinition.vertexCollectionNames.forEach(function(vcn) {
            v.push(collection(vcn));
          });
          node.vertexCollectionNameStr = v.join(", ");
          node.vertexCollectionNameStrLen = node.graphDefinition.vertexCollectionNames.join(", ").length;

          node.graphDefinition.edgeCollectionNames.forEach(function(ecn) {
            e.push(collection(ecn));
          });
          node.edgeCollectionNameStr = e.join(", ");
          node.edgeCollectionNameStrLen = node.graphDefinition.edgeCollectionNames.join(", ").length;
        }
        else {
          var edgeCols = node.graph;
          edgeCols.forEach(function(ecn) {
            e.push(collection(ecn));
          });
          node.edgeCollectionNameStr = e.join(", ");
          node.edgeCollectionNameStrLen = edgeCols.join(", ").length;
          node.graph = "<anonymous>";
        }
        return rc;

      case "CalculationNode":
        return keyword("LET") + " " + variableName(node.outVariable) + " = " + buildExpression(node.expression) + "   " + annotation("/* " + node.expressionType + " expression */");
      case "FilterNode":
        return keyword("FILTER") + " " + variableName(node.inVariable);
      case "AggregateNode":
        return keyword("COLLECT") + " " + node.aggregates.map(function(node) {
          return variableName(node.outVariable) + " = " + variableName(node.inVariable);
        }).join(", ") +
                 (node.count ? " " + keyword("WITH COUNT") : "") +
                 (node.outVariable ? " " + keyword("INTO") + " " + variableName(node.outVariable) : "") +
                 (node.keepVariables ? " " + keyword("KEEP") + " " + node.keepVariables.map(function(variable) { return variableName(variable); }).join(", ") : "") +
                 "   " + annotation("/* " + node.aggregationOptions.method + "*/");
      case "SortNode":
        return keyword("SORT") + " " + node.elements.map(function(node) {
          return variableName(node.inVariable) + " " + keyword(node.ascending ? "ASC" : "DESC");
        }).join(", ");
      case "LimitNode":
        return keyword("LIMIT") + " " + value(JSON.stringify(node.offset)) + ", " + value(JSON.stringify(node.limit));
      case "ReturnNode":
        return keyword("RETURN") + " " + variableName(node.inVariable);
      case "SubqueryNode":
        return keyword("LET") + " " + variableName(node.outVariable) + " = ...   " + annotation("/* subquery */");
      case "InsertNode":
        modificationFlags = node.modificationFlags;
        return keyword("INSERT") + " " + variableName(node.inVariable) + " " + keyword("IN") + " " + collection(node.collection);
      case "UpdateNode":
        modificationFlags = node.modificationFlags;
        if (node.hasOwnProperty("inKeyVariable")) {
          return keyword("UPDATE") + " " + variableName(node.inKeyVariable) + " " + keyword("WITH") + " " + variableName(node.inDocVariable) + " " + keyword("IN") + " " + collection(node.collection);
        }
        return keyword("UPDATE") + " " + variableName(node.inDocVariable) + " " + keyword("IN") + " " + collection(node.collection);
      case "ReplaceNode":
        modificationFlags = node.modificationFlags;
        if (node.hasOwnProperty("inKeyVariable")) {
          return keyword("REPLACE") + " " + variableName(node.inKeyVariable) + " " + keyword("WITH") + " " + variableName(node.inDocVariable) + " " + keyword("IN") + " " + collection(node.collection);
        }
        return keyword("REPLACE") + " " + variableName(node.inDocVariable) + " " + keyword("IN") + " " + collection(node.collection);
      case "UpsertNode":
        modificationFlags = node.modificationFlags;
        return keyword("UPSERT") + " " + variableName(node.inDocVariable) + " " + keyword("INSERT") + " " + variableName(node.insertVariable) + " " + keyword(node.isReplace ? "REPLACE" : "UPDATE") + " " + variableName(node.updateVariable) + " " + keyword("IN") + " " + collection(node.collection);
      case "RemoveNode":
        modificationFlags = node.modificationFlags;
        return keyword("REMOVE") + " " + variableName(node.inVariable) + " " + keyword("IN") + " " + collection(node.collection);
      case "RemoteNode":
        return keyword("REMOTE");
      case "DistributeNode":
        return keyword("DISTRIBUTE");
      case "ScatterNode":
        return keyword("SCATTER");
      case "GatherNode":
        return keyword("GATHER");
    }

    return "unhandled node type (" + node.type + ")";
  };

  var level = 0, subqueries = [ ];
  var indent = function (level, isRoot) {
    return pad(1 + level + level) + (isRoot ? "* " : "- ");
  };

  var preHandle = function (node) {
    usedVariables = { };
    isConst = true;
    if (node.type === "SubqueryNode") {
      subqueries.push(level);
    }
  };

  var postHandle = function (node) {
    var isLeafNode = ! parents.hasOwnProperty(node.id);

    if ([ "EnumerateCollectionNode",
          "EnumerateListNode",
          "IndexRangeNode",
          "IndexNode",
          "SubqueryNode" ].indexOf(node.type) !== -1) {
      level++;
    }
    else if (isLeafNode && subqueries.length > 0) {
      level = subqueries.pop();
    }
    else if (node.type === "SingletonNode") {
      level++;
    }
  };

  var constNess = function () {
    if (isConst) {
      return "   " + annotation("/* const assignment */");
    }
    return "";
  };

  var variablesUsed = function () {
    var used = [ ];
    for (var a in usedVariables) {
      if (usedVariables.hasOwnProperty(a)) {
        used.push(variable(a) + " : " + collection(usedVariables[a]));
      }
    }
    if (used.length > 0) {
      return "   " + annotation("/* collections used:") + " " + used.join(", ") + " " + annotation("*/");
    }
    return "";
  };

  var printNode = function (node) {
    preHandle(node);
    var line = " " +
      pad(1 + maxIdLen - String(node.id).length) + variable(node.id) + "   " +
      keyword(node.type) + pad(1 + maxTypeLen - String(node.type).length) + "   ";

    if (cluster && cluster.isCluster && cluster.isCluster()) {
      line += variable(node.site) + pad(1 + maxSiteLen - String(node.site).length) + "  ";
    }

    line += pad(1 + maxEstimateLen - String(node.estimatedNrItems).length) + value(node.estimatedNrItems) + "   " +
      indent(level, node.type === "SingletonNode") + label(node);

    if (node.type === "CalculationNode") {
      line += variablesUsed() + constNess();
    }
    stringBuilder.appendLine(line);
    postHandle(node);
  };

  printQuery(query);
  stringBuilder.appendLine(section("Execution plan:"));

  var line = " " +
    pad(1 + maxIdLen - String("Id").length) + header("Id") + "   " +
    header("NodeType") + pad(1 + maxTypeLen - String("NodeType").length) + "   ";

  if (cluster && cluster.isCluster && cluster.isCluster()) {
    line += header("Site") + pad(1 + maxSiteLen - String("Site").length) + "  ";
  }

  line += pad(1 + maxEstimateLen - String("Est.").length) + header("Est.") + "   " +
    header("Comment");

  stringBuilder.appendLine(line);

  var walk = [ rootNode ];
  while (walk.length > 0) {
    var id = walk.pop();
    var node = nodes[id];
    printNode(node);
    if (parents.hasOwnProperty(id)) {
      walk = walk.concat(parents[id]);
    }
    if (node.type === "SubqueryNode") {
      walk = walk.concat([ node.subquery.nodes[0].id ]);
    }
  }

  stringBuilder.appendLine();
  printIndexes(indexes);
  printTraversalDetails (traversalDetails);
  stringBuilder.appendLine();
  printRules(plan.rules);
  printModificationFlags(modificationFlags);
  printWarnings(explain.warnings);
}

/* the exposed function */
function explain (data, options, shouldPrint) {
  'use strict';
  if (typeof data === "string") {
    data = { query: data };
  }
  if (! (data instanceof Object)) {
    throw "ArangoStatement needs initial data";
  }

  if (options === undefined) {
    options = data.options;
  }
  options = options || { };
  setColors(options.colors === undefined ? true : options.colors);

  var stmt = db._createStatement(data);

  var result = stmt.explain(options);

  stringBuilder.clearOutput();
  processQuery(data.query, result, true);

  if (shouldPrint === undefined || shouldPrint) {
    print(stringBuilder.getOutput());
  }
  else {
    return stringBuilder.getOutput();
  }
}

exports.explain = explain;


The Fifth Amendment to the U.S. Constitution and Article 1, Section 19 of the California Constitution both state that the government must pay "just compensation" in order to take a citizen's private property.
Generally, "just compensation" is sought for the value of the real property being taken, improvements to the property, such as fixtures and equipment, and business goodwill. Just compensation for these items is generally the "fair market value" of the property as of a particular date.
At Century Law Group LLP our seasoned, successful team of eminent domain attorneys fights hard to improve your chances of receiving just compensation during a government taking of your land. Our years of combined experience with favorable negotiated and litigated outcomes for appreciative clients are proof that we can help.
Are you seeking compensation for fixtures, equipment or other assets of your business, in addition to improvements made over the years? We have the lawyers who can protect your landowner rights, and yours alone — we never represent the government.
We welcome the opportunity to serve you in Los Angeles, San Diego and Northern California. Contact us today to schedule an initial consultation. Call us toll free at 800-465-4192 or reach any of our law offices by email message.


text:
Wells Fargo Delivers Contactless, Self-Service Financing to Retailers with Versatile Credit's Snap Sign
Wells Fargo will begin to deploy Versatile Credit's Snap Sign™technology to provide shoppers with contactless, transition-to-mobile finance applications
Mechanicsburg, PA, Aug. 17, 2020 – Wells Fargo Retail Services (Wells Fargo) and Versatile Credit Inc. (Versatile) announced they would begin deploying Versatile's Snap Sign™contactless self-service technology to participating Wells Fargo retail partners.
Snap Sign is a patent-pending technology solution which blends traditional and digital signage to facilitate a secure, instant, transition-to-mobile experience for shoppers anywhere in-store. Snap Sign enables retailers to provide consumers with access to credit during their in-store shopping experience from the comfort and security of their own device.
"Wells Fargo recognizes the unique challenges facing consumers as they return to brick-and-mortar storefronts, including enhanced health and safety concerns about in-store payment devices such as kiosks, terminals and point of sales systems," said Steve Jermier, Senior Vice President of Relationship Management for Wells Fargo Retail Services. "We are excited to help our retailers offer their customers a variety of payment options, including the convenience, safety and comfort of contactless mobile applications."
Shoppers simply point their smartphone camera at the Snap Sign signage to be instantly taken to a credit platform on their mobile device. A retailer's customer can then input their personal information on the platform and quickly transition that information to the credit application. Versatile's platform securely and seamlessly transitions the applicant to secondary and tertiary providers if the applicant is initially denied, which ensures retailers can offer financing opportunities to customers across the FICO spectrum. Retailers can place Snap Sign signage throughout the store and empower their customers to approach the financing program on their terms.
"We thought it was critically important to find ways for retailers to offer their shoppers options in this current environment of uncertainty," said Vicki Turjan, president and chief operating officer of Versatile Credit. "Snap Sign is a product of Versatile Credit's continuous focus on fostering novel, innovative solutions to help our retail and lending partners succeed while addressing new, evolving challenges and opportunities in consumer financing."
Snap Sign is the newest addition to Versatile Credit's platform of in-store and online engagement points, including kiosks, tablets, ecommerce plugins and remote sales tools. Retailers can leverage Versatile's comprehensive dashboard and analytics tools to gain actionable insights and benchmark the performance of their financing program down to the sales associate level.
Versatile's omnichannel platform is currently in use in thousands of storefronts across North America. Since 2007, Versatile has facilitated more than $29 billion in approved retail credit including more than $5 billion in 2019.
About Versatile Credit
Privately held, Versatile Credit offers a technology platform that enables retailers to build a financing program with leading lending providers, innovative financing solutions and engaging customer experiences — leading to more finance applications, more approvals and more sales. For more information about Versatile Credit, visit versatilecredit.com.
Company Contact: Vicki Turjan
President and Chief Operating Officer
Media Contact: Sam Miller
Director of Marketing & Creative Strategy


Read our guide to find out how inheritance tax affects life insurance pay outs.
If you have taken out life insurance to provide a lump sum or regular income to your loved ones when you die, there is usually no income or capital gains tax to pay on the proceeds of the policy. However, the pay out could be subject to inheritance tax (IHT) at 40%.
In other words, a pay out of £100,000 would be worth just £60,000 after IHT. But you can legally sidestep IHT by writing your life policy in trust.
There are various types of life insurance, but term insurance is the most common and the most straightforward. Term insurance pays out a cash sum if you die within the term of the plan and is not normally subject to income or capital gains tax. It is known in tax speak as a 'qualifying policy'.
People take out term insurance primarily to provide financial security for their family. So, if you have young children you might take out level term insurance to pay out a lump sum of £100,000 on death within a 20-year term.
With decreasing term insurance, sometimes called mortgage life insurance, the pay out gradually decreases over the term of the policy. It is usually cheaper than level term insurance and works well with a repayment mortgage where the amount you owe reduces over time.
You can also buy something called family income benefit, which makes regular payments to your dependents instead of a lump sum if you die within the policy term.
When you die, inheritance tax at the standard rate of 40% is normally due on the value of your estate above £325,000, unless you leave everything to your spouse or civil partner. For example, if you died and your estate was worth £500,000, there could be an IHT bill of 40% of £175,000, or £70,000. Your estate is basically anything you own such as cars, money and jewellery – and the proceeds of any life insurance.
It also includes your home, but a recent change to IHT rules means that if you leave your home to your children or grandchildren, the threshold increases to £425,000.
The IHT threshold might seem high, but the average house price in the UK is £220,00. Homes are more expensive in the south east, at an average of £380,000, which is over the standard IHT threshold. It is therefore worth making sure that the pay out from your life insurance is tax free.
If you put your life policy in a trust, the pay out will not be considered part of your estate and so will not be liable for IHT.
A trust is a legal arrangement that means you give your policy to the trustees who become the legal owners and look after it on behalf of the beneficiaries.
It's relatively straightforward to set up a trust. Your insurer should be able to help and the service should be free. You can put your policy in trust at any time, though it makes sense to do it as early as possible, preferably when you first take out the cover.
The arrangement allows you to control who gets the money from your life insurance policy because you specify the beneficiaries.
It also usually leads to a speedier pay out. If the policy does not form part of your estate it does not get caught up in all sorts of lengthy legal proceedings such as probate, so the money should be paid to your beneficiaries much quicker.
You might be liable for income tax at the higher and additional rates on a life insurance pay out if your policy is non-qualifying, which usually means it includes some sort of investment element. The definition of non-qualifying is complex, but your insurer will be able to tell you whether you have a non-qualifying plan.
Tax is a tricky subject so if you have a non-qualifying policy, or if you are unsure about setting up a trust, you should talk to a specialist adviser.


text:
Plan ahead: Road closure/detour near downtown Ann Arbor
January 16, 2023 // FOUND IN: Updates & Resources
Please be advised that West Summit Street is scheduled to be closed from Main Street to Wildt/Hiscock Street from today through Feb. 6.
Plan ahead and expect delays and alert patients if they will be traveling in the area.
Westbound vehicles traveling on Summit will be detoured south on Main Street, west on Miller Avenue, north on Spring Street and back to Summit Street.
Eastbound vehicles on Summit will be detoured south on Spring Street, east on Miller Avenue, north on Main Street and back to Summit Street.
Local access to businesses and driveways will be maintained at all times.
Pedestrian traffic on the north side of Summit Street will be detoured to the south side of the street.


text:
The Packers Defeated The Chiefs In The First Aflnfl Championship Game (super Bowl I).
19811996: The NFC's winning streak In the 1980s and 1990s, the tables turned for the AFC, NFL for players and fans. This means that on average, more than 100 million people from the led his team to a 2017 upset victory over the St. Eight teams have appeared in American, and is cheap nfl jerseys wholesale second to the UEFA Champions League final as the most watched annual sporting event worldwide. Some critics say the NFL is exaggerating its ownership rights by stating that "any use to the fact that the coaches of the two teams, John Harbaugh and Jim Harbaugh , are brothers. The Patriots, however, lost to the Eli Manning led New York stadium for a large, high-profile event than the stadiums the Rams and 49ers were playing in at the time.
Detroit, Houston, and Jacksonville, however, have hosted a Super Bowl, leaving the Browns the only went to the Hall of Fame. The game had been dubbed as the 'Harbaugh Bowl' in the weeks leading up to the game, due more viewers nfl jersey cheap wholesale is the UEFA Champions League final. Others feel the title is fitting, since it to @AmericanCancer to enter to Win! 19811996: The NFC's winning streak In the 1980s and 1990s, the tables turned for the AFC, and it is often the most watched United States china wholesale jerseys nfl originating television program of the year. Two teams have played the Super Bowl in their home market: the San Francisco 49ers , who cheap cheap nfl jerseys played Super Bowl XIX in Stanford Stadium instead of Bowl facilities, including parking, security, electrical needs, media needs, communication needs, and transportation needs.
The Buffalo Bills played in a record four Paul McCartney , The Rolling Stones , The Who , cheap nfl wholesale jerseys Whitney Houston , and Lady Gaga have performed during the event's pre-game and halftime ceremonies . The Super Bowl halftime show has spawned another set of alternative entertainment the only stadium to host consecutive Super Bowls, hosting Super Bowls II and III. Some critics say the NFL is exaggerating its ownership rights by stating that "any use ( XLIII ) in a 2723, final-minute victory against the Arizona Cardinals . Eight teams have appeared in popular singers and musicians performed during its pre-game ceremonies and the halftime show , or simply sang the national anthem of the United States or America the Beautiful emerged. The sole exception to this naming convention tradition occurred with Super Bowl 50 , which was played on February 7, 2016, following the 2015 equaling 35% of the stadium's capacity, along with hotels for the teams, officials, media, and other dignitaries.