public class OrderLineType extends Object implements Serializable
<?xml version="1.0" encoding="UTF-8"?><ccts:Component xmlns:ccts="urn:un:unece:uncefact:documentation:2" xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><ccts:ComponentType>ABIE</ccts:ComponentType><ccts:DictionaryEntryName>Order Line. Details</ccts:DictionaryEntryName><ccts:Definition>Information about an Order Line.</ccts:Definition><ccts:ObjectClass>Order Line</ccts:ObjectClass></ccts:Component>
Java class for OrderLineType complex type.
The following schema fragment specifies the expected content contained within this class.
<complexType name="OrderLineType">
<complexContent>
<restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
<sequence>
<element ref="{urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2}SubstitutionStatusCode" minOccurs="0"/>
<element ref="{urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2}Note" minOccurs="0"/>
<element ref="{urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2}LineItem"/>
<element ref="{urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2}SellerProposedSubstituteLineItem" maxOccurs="unbounded" minOccurs="0"/>
<element ref="{urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2}SellerSubstitutedLineItem" maxOccurs="unbounded" minOccurs="0"/>
<element ref="{urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2}BuyerProposedSubstituteLineItem" maxOccurs="unbounded" minOccurs="0"/>
<element ref="{urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2}CatalogueLineReference" minOccurs="0"/>
<element ref="{urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2}QuotationLineReference" minOccurs="0"/>
<element ref="{urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2}DocumentReference" maxOccurs="unbounded" minOccurs="0"/>
</sequence>
</restriction>
</complexContent>
</complexType>
| Constructor and Description |
|---|
OrderLineType()
Default constructor
Created by ph-ubl-jaxb-plugin -Xph-ubl-value
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
equals(Object o)
Created by ph-jaxb22-plugin -Xph-equalshashcode
|
List<LineItemType> |
getBuyerProposedSubstituteLineItem()
<?
|
LineItemType |
getBuyerProposedSubstituteLineItemAtIndex(int index)
Created by ph-jaxb22-plugin -Xph-list-extension
|
int |
getBuyerProposedSubstituteLineItemCount()
Created by ph-jaxb22-plugin -Xph-list-extension
|
LineReferenceType |
getCatalogueLineReference()
<?
|
List<DocumentReferenceType> |
getDocumentReference()
<?
|
DocumentReferenceType |
getDocumentReferenceAtIndex(int index)
Created by ph-jaxb22-plugin -Xph-list-extension
|
int |
getDocumentReferenceCount()
Created by ph-jaxb22-plugin -Xph-list-extension
|
LineItemType |
getLineItem()
<?
|
NoteType |
getNote()
<?
|
String |
getNoteValue()
Get the value of the contained NoteType object
Created by ph-ubl-jaxb-plugin -Xph-ubl-value
|
LineReferenceType |
getQuotationLineReference()
<?
|
List<LineItemType> |
getSellerProposedSubstituteLineItem()
<?
|
LineItemType |
getSellerProposedSubstituteLineItemAtIndex(int index)
Created by ph-jaxb22-plugin -Xph-list-extension
|
int |
getSellerProposedSubstituteLineItemCount()
Created by ph-jaxb22-plugin -Xph-list-extension
|
List<LineItemType> |
getSellerSubstitutedLineItem()
<?
|
LineItemType |
getSellerSubstitutedLineItemAtIndex(int index)
Created by ph-jaxb22-plugin -Xph-list-extension
|
int |
getSellerSubstitutedLineItemCount()
Created by ph-jaxb22-plugin -Xph-list-extension
|
SubstitutionStatusCodeType |
getSubstitutionStatusCode()
<?
|
String |
getSubstitutionStatusCodeValue()
Get the value of the contained SubstitutionStatusCodeType object
Created by ph-ubl-jaxb-plugin -Xph-ubl-value
|
boolean |
hasBuyerProposedSubstituteLineItemEntries()
Created by ph-jaxb22-plugin -Xph-list-extension
|
boolean |
hasDocumentReferenceEntries()
Created by ph-jaxb22-plugin -Xph-list-extension
|
int |
hashCode()
Created by ph-jaxb22-plugin -Xph-equalshashcode
|
boolean |
hasNoBuyerProposedSubstituteLineItemEntries()
Created by ph-jaxb22-plugin -Xph-list-extension
|
boolean |
hasNoDocumentReferenceEntries()
Created by ph-jaxb22-plugin -Xph-list-extension
|
boolean |
hasNoSellerProposedSubstituteLineItemEntries()
Created by ph-jaxb22-plugin -Xph-list-extension
|
boolean |
hasNoSellerSubstitutedLineItemEntries()
Created by ph-jaxb22-plugin -Xph-list-extension
|
boolean |
hasSellerProposedSubstituteLineItemEntries()
Created by ph-jaxb22-plugin -Xph-list-extension
|
boolean |
hasSellerSubstitutedLineItemEntries()
Created by ph-jaxb22-plugin -Xph-list-extension
|
void |
setBuyerProposedSubstituteLineItem(List<LineItemType> aList)
Created by ph-jaxb22-plugin -Xph-list-extension
|
void |
setCatalogueLineReference(LineReferenceType value)
Sets the value of the catalogueLineReference property.
|
void |
setDocumentReference(List<DocumentReferenceType> aList)
Created by ph-jaxb22-plugin -Xph-list-extension
|
void |
setLineItem(LineItemType value)
Sets the value of the lineItem property.
|
void |
setNote(NoteType value)
Sets the value of the note property.
|
NoteType |
setNote(String valueParam)
Special setter with value of type String
Created by ph-ubl-jaxb-plugin -Xph-ubl-value
|
void |
setQuotationLineReference(LineReferenceType value)
Sets the value of the quotationLineReference property.
|
void |
setSellerProposedSubstituteLineItem(List<LineItemType> aList)
Created by ph-jaxb22-plugin -Xph-list-extension
|
void |
setSellerSubstitutedLineItem(List<LineItemType> aList)
Created by ph-jaxb22-plugin -Xph-list-extension
|
SubstitutionStatusCodeType |
setSubstitutionStatusCode(String valueParam)
Special setter with value of type String
Created by ph-ubl-jaxb-plugin -Xph-ubl-value
|
void |
setSubstitutionStatusCode(SubstitutionStatusCodeType value)
Sets the value of the substitutionStatusCode property.
|
String |
toString()
Created by ph-jaxb22-plugin -Xph-tostring
|
public OrderLineType()
@Nullable public SubstitutionStatusCodeType getSubstitutionStatusCode()
<?xml version="1.0" encoding="UTF-8"?><ccts:Component xmlns:ccts="urn:un:unece:uncefact:documentation:2" xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><ccts:ComponentType>BBIE</ccts:ComponentType><ccts:DictionaryEntryName>Order Line. Substitution Status Code. Code</ccts:DictionaryEntryName><ccts:Definition>A code indicating the substitution status of the Order Line. Order Line may indicate that a substitute is proposed by the buyer or by the seller (in Order Response) or that a substitution has been made by the seller (in Order Response).</ccts:Definition><ccts:Cardinality>0..1</ccts:Cardinality><ccts:ObjectClass>Order Line</ccts:ObjectClass><ccts:PropertyTerm>Substitution Status Code</ccts:PropertyTerm><ccts:RepresentationTerm>Code</ccts:RepresentationTerm><ccts:DataType>Substitution Status_ Code. Type</ccts:DataType></ccts:Component>
SubstitutionStatusCodeTypepublic void setSubstitutionStatusCode(@Nullable SubstitutionStatusCodeType value)
value - allowed object is
SubstitutionStatusCodeType@Nullable public NoteType getNote()
<?xml version="1.0" encoding="UTF-8"?><ccts:Component xmlns:ccts="urn:un:unece:uncefact:documentation:2" xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><ccts:ComponentType>BBIE</ccts:ComponentType><ccts:DictionaryEntryName>Order Line. Note. Text</ccts:DictionaryEntryName><ccts:Definition>Free-form text applying to the Order Line. This element may contain notes or any other similar information that is not contained explicitly in another structure.</ccts:Definition><ccts:Cardinality>0..1</ccts:Cardinality><ccts:ObjectClass>Order Line</ccts:ObjectClass><ccts:PropertyTerm>Note</ccts:PropertyTerm><ccts:RepresentationTerm>Text</ccts:RepresentationTerm><ccts:DataType>Text. Type</ccts:DataType></ccts:Component>
NoteTypepublic void setNote(@Nullable NoteType value)
value - allowed object is
NoteType@Nullable public LineItemType getLineItem()
<?xml version="1.0" encoding="UTF-8"?><ccts:Component xmlns:ccts="urn:un:unece:uncefact:documentation:2" xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><ccts:ComponentType>ASBIE</ccts:ComponentType><ccts:DictionaryEntryName>Order Line. Line Item</ccts:DictionaryEntryName><ccts:Definition>An association to Line Item.</ccts:Definition><ccts:Cardinality>1</ccts:Cardinality><ccts:ObjectClass>Order Line</ccts:ObjectClass><ccts:PropertyTerm>Line Item</ccts:PropertyTerm><ccts:AssociatedObjectClass>Line Item</ccts:AssociatedObjectClass></ccts:Component>
LineItemTypepublic void setLineItem(@Nullable LineItemType value)
value - allowed object is
LineItemType@Nonnull @ReturnsMutableObject(reason="JAXB implementation style") public List<LineItemType> getSellerProposedSubstituteLineItem()
<?xml version="1.0" encoding="UTF-8"?><ccts:Component xmlns:ccts="urn:un:unece:uncefact:documentation:2" xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><ccts:ComponentType>ASBIE</ccts:ComponentType><ccts:DictionaryEntryName>Order Line. Seller Proposed Substitute_ Line Item. Line Item</ccts:DictionaryEntryName><ccts:Definition>Substitute Line Items proposed by the seller (in Order Response).</ccts:Definition><ccts:Cardinality>0..n</ccts:Cardinality><ccts:ObjectClass>Order Line</ccts:ObjectClass><ccts:PropertyTermQualifier>Seller Proposed Substitute</ccts:PropertyTermQualifier><ccts:PropertyTerm>Line Item</ccts:PropertyTerm><ccts:AssociatedObjectClass>Line Item</ccts:AssociatedObjectClass></ccts:Component>Gets the value of the sellerProposedSubstituteLineItem property.
This accessor method returns a reference to the live list,
not a snapshot. Therefore any modification you make to the
returned list will be present inside the JAXB object.
This is why there is not a set method for the sellerProposedSubstituteLineItem property.
For example, to add a new item, do as follows:
getSellerProposedSubstituteLineItem().add(newItem);
Objects of the following type(s) are allowed in the list
LineItemType
@Nonnull @ReturnsMutableObject(reason="JAXB implementation style") public List<LineItemType> getSellerSubstitutedLineItem()
<?xml version="1.0" encoding="UTF-8"?><ccts:Component xmlns:ccts="urn:un:unece:uncefact:documentation:2" xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><ccts:ComponentType>ASBIE</ccts:ComponentType><ccts:DictionaryEntryName>Order Line. Seller Substituted_ Line Item. Line Item</ccts:DictionaryEntryName><ccts:Definition>Item(s) replaced by the seller. The original ordered quantity and pricing may be different from the substituted item. However, when an item is substituted by the seller, it is assumed that other information, such as shipment details, will be the same.</ccts:Definition><ccts:Cardinality>0..n</ccts:Cardinality><ccts:ObjectClass>Order Line</ccts:ObjectClass><ccts:PropertyTermQualifier>Seller Substituted</ccts:PropertyTermQualifier><ccts:PropertyTerm>Line Item</ccts:PropertyTerm><ccts:AssociatedObjectClass>Line Item</ccts:AssociatedObjectClass></ccts:Component>Gets the value of the sellerSubstitutedLineItem property.
This accessor method returns a reference to the live list,
not a snapshot. Therefore any modification you make to the
returned list will be present inside the JAXB object.
This is why there is not a set method for the sellerSubstitutedLineItem property.
For example, to add a new item, do as follows:
getSellerSubstitutedLineItem().add(newItem);
Objects of the following type(s) are allowed in the list
LineItemType
@Nonnull @ReturnsMutableObject(reason="JAXB implementation style") public List<LineItemType> getBuyerProposedSubstituteLineItem()
<?xml version="1.0" encoding="UTF-8"?><ccts:Component xmlns:ccts="urn:un:unece:uncefact:documentation:2" xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><ccts:ComponentType>ASBIE</ccts:ComponentType><ccts:DictionaryEntryName>Order Line. Buyer Proposed Substitute_ Line Item. Line Item</ccts:DictionaryEntryName><ccts:Definition>Possible alternatives, proposed by the buyer, to the Line Item.</ccts:Definition><ccts:Cardinality>0..n</ccts:Cardinality><ccts:ObjectClass>Order Line</ccts:ObjectClass><ccts:PropertyTermQualifier>Buyer Proposed Substitute</ccts:PropertyTermQualifier><ccts:PropertyTerm>Line Item</ccts:PropertyTerm><ccts:AssociatedObjectClass>Line Item</ccts:AssociatedObjectClass></ccts:Component>Gets the value of the buyerProposedSubstituteLineItem property.
This accessor method returns a reference to the live list,
not a snapshot. Therefore any modification you make to the
returned list will be present inside the JAXB object.
This is why there is not a set method for the buyerProposedSubstituteLineItem property.
For example, to add a new item, do as follows:
getBuyerProposedSubstituteLineItem().add(newItem);
Objects of the following type(s) are allowed in the list
LineItemType
@Nullable public LineReferenceType getCatalogueLineReference()
<?xml version="1.0" encoding="UTF-8"?><ccts:Component xmlns:ccts="urn:un:unece:uncefact:documentation:2" xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><ccts:ComponentType>ASBIE</ccts:ComponentType><ccts:DictionaryEntryName>Order Line. Catalogue_ Line Reference. Line Reference</ccts:DictionaryEntryName><ccts:Definition>An associative reference to Catalogue Line.</ccts:Definition><ccts:Cardinality>0..1</ccts:Cardinality><ccts:ObjectClass>Order Line</ccts:ObjectClass><ccts:PropertyTermQualifier>Catalogue</ccts:PropertyTermQualifier><ccts:PropertyTerm>Line Reference</ccts:PropertyTerm><ccts:AssociatedObjectClass>Line Reference</ccts:AssociatedObjectClass></ccts:Component>
LineReferenceTypepublic void setCatalogueLineReference(@Nullable LineReferenceType value)
value - allowed object is
LineReferenceType@Nullable public LineReferenceType getQuotationLineReference()
<?xml version="1.0" encoding="UTF-8"?><ccts:Component xmlns:ccts="urn:un:unece:uncefact:documentation:2" xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><ccts:ComponentType>ASBIE</ccts:ComponentType><ccts:DictionaryEntryName>Order Line. Quotation_ Line Reference. Line Reference</ccts:DictionaryEntryName><ccts:Definition>an associative reference to Quotation Line.</ccts:Definition><ccts:Cardinality>0..1</ccts:Cardinality><ccts:ObjectClass>Order Line</ccts:ObjectClass><ccts:PropertyTermQualifier>Quotation</ccts:PropertyTermQualifier><ccts:PropertyTerm>Line Reference</ccts:PropertyTerm><ccts:AssociatedObjectClass>Line Reference</ccts:AssociatedObjectClass></ccts:Component>
LineReferenceTypepublic void setQuotationLineReference(@Nullable LineReferenceType value)
value - allowed object is
LineReferenceType@Nonnull @ReturnsMutableObject(reason="JAXB implementation style") public List<DocumentReferenceType> getDocumentReference()
<?xml version="1.0" encoding="UTF-8"?><ccts:Component xmlns:ccts="urn:un:unece:uncefact:documentation:2" xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><ccts:ComponentType>ASBIE</ccts:ComponentType><ccts:DictionaryEntryName>Order Line. Document Reference</ccts:DictionaryEntryName><ccts:Definition>An association to Document Reference.</ccts:Definition><ccts:Cardinality>0..n</ccts:Cardinality><ccts:ObjectClass>Order Line</ccts:ObjectClass><ccts:PropertyTerm>Document Reference</ccts:PropertyTerm><ccts:AssociatedObjectClass>Document Reference</ccts:AssociatedObjectClass></ccts:Component>Gets the value of the documentReference property.
This accessor method returns a reference to the live list,
not a snapshot. Therefore any modification you make to the
returned list will be present inside the JAXB object.
This is why there is not a set method for the documentReference property.
For example, to add a new item, do as follows:
getDocumentReference().add(newItem);
Objects of the following type(s) are allowed in the list
DocumentReferenceType
public boolean equals(Object o)
public int hashCode()
public String toString()
public void setSellerProposedSubstituteLineItem(@Nullable List<LineItemType> aList)
aList - The new list member to set. May be null.public void setSellerSubstitutedLineItem(@Nullable List<LineItemType> aList)
aList - The new list member to set. May be null.public void setBuyerProposedSubstituteLineItem(@Nullable List<LineItemType> aList)
aList - The new list member to set. May be null.public void setDocumentReference(@Nullable List<DocumentReferenceType> aList)
aList - The new list member to set. May be null.public boolean hasSellerProposedSubstituteLineItemEntries()
true if at least one item is contained, false otherwise.public boolean hasNoSellerProposedSubstituteLineItemEntries()
true if no item is contained, false otherwise.@Nonnegative public int getSellerProposedSubstituteLineItemCount()
@Nullable public LineItemType getSellerProposedSubstituteLineItemAtIndex(@Nonnegative int index)
index - The index to retrievenullArrayIndexOutOfBoundsException - if the index is invalid!public boolean hasSellerSubstitutedLineItemEntries()
true if at least one item is contained, false otherwise.public boolean hasNoSellerSubstitutedLineItemEntries()
true if no item is contained, false otherwise.@Nonnegative public int getSellerSubstitutedLineItemCount()
@Nullable public LineItemType getSellerSubstitutedLineItemAtIndex(@Nonnegative int index)
index - The index to retrievenullArrayIndexOutOfBoundsException - if the index is invalid!public boolean hasBuyerProposedSubstituteLineItemEntries()
true if at least one item is contained, false otherwise.public boolean hasNoBuyerProposedSubstituteLineItemEntries()
true if no item is contained, false otherwise.@Nonnegative public int getBuyerProposedSubstituteLineItemCount()
@Nullable public LineItemType getBuyerProposedSubstituteLineItemAtIndex(@Nonnegative int index)
index - The index to retrievenullArrayIndexOutOfBoundsException - if the index is invalid!public boolean hasDocumentReferenceEntries()
true if at least one item is contained, false otherwise.public boolean hasNoDocumentReferenceEntries()
true if no item is contained, false otherwise.@Nonnegative public int getDocumentReferenceCount()
@Nullable public DocumentReferenceType getDocumentReferenceAtIndex(@Nonnegative int index)
index - The index to retrievenullArrayIndexOutOfBoundsException - if the index is invalid!@Nonnull public NoteType setNote(@Nullable String valueParam)
valueParam - The value to be set. May be null.null@Nonnull public SubstitutionStatusCodeType setSubstitutionStatusCode(@Nullable String valueParam)
valueParam - The value to be set. May be null.null@Nullable public String getSubstitutionStatusCodeValue()
nullCopyright © 2014 Philip Helger. All rights reserved.