您现在的位置是:主页 > news > 做效果图兼职的网站有哪些/什么是友情链接?

做效果图兼职的网站有哪些/什么是友情链接?

admin2025/5/2 21:17:23news

简介做效果图兼职的网站有哪些,什么是友情链接?,如何做做网站,设备外贸用哪个网站因为平时使用 System.Collections.CollectionBase 时候发现有些不足&#xff0c;故而作了一个扩展的 CollectionBaseEx&#xff0c;代码如下&#xff0c;因为注释较多&#xff0c;故不再解释。 /**//// <summary> /// 增强的 CollectionBase &#xff0c;支持排序&…

做效果图兼职的网站有哪些,什么是友情链接?,如何做做网站,设备外贸用哪个网站因为平时使用 System.Collections.CollectionBase 时候发现有些不足&#xff0c;故而作了一个扩展的 CollectionBaseEx&#xff0c;代码如下&#xff0c;因为注释较多&#xff0c;故不再解释。 /**//// <summary> /// 增强的 CollectionBase &#xff0c;支持排序&…

因为平时使用 System.Collections.CollectionBase 时候发现有些不足,故而作了一个扩展的 CollectionBaseEx,代码如下,因为注释较多,故不再解释。

ExpandedBlockStart.gifContractedBlock.gif    /**//// <summary>
InBlock.gif    
/// 增强的 CollectionBase ,支持排序,和更多的通知
ExpandedBlockEnd.gif    
/// </summary>

None.gif    public class CollectionBaseEx : IList
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        
private ArrayList m_InnerList;
InBlock.gif        
private bool m_Duplicated;        // 是否允许重复元素
InBlock.gif
        private bool m_Sorted;            // 是否允许排序
InBlock.gif
        private IComparer m_Comparer;    // 排序时候使用的比较器
InBlock.gif
        private bool m_SingleCheck;        // 是否在处理时候要处理单个元素,引发Include/Exclude事件
InBlock.gif

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 默认构造函数
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        protected CollectionBaseEx()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            m_InnerList 
= new ArrayList();
InBlock.gif            m_Duplicated 
= true;
InBlock.gif            m_Sorted 
= false;
InBlock.gif            m_Comparer 
= System.Collections.Comparer.Default;
InBlock.gif            m_SingleCheck 
= false;
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 构造函数
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="duplicated">是否允许重复元素</param>
InBlock.gif        
/// <param name="singleCheck">是否对每一个元素进行检查并发出通知</param>
InBlock.gif        
/// <param name="sorted">对值进行排序</param>
ExpandedSubBlockEnd.gif        
/// <param name="comparer">比较器</param>

InBlock.gif        protected CollectionBaseEx(bool duplicated, bool singleCheck, bool sorted, IComparer comparer) : this()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            m_Duplicated 
= duplicated;
InBlock.gif            m_Sorted 
= sorted;
InBlock.gif            m_Comparer 
= comparer;
InBlock.gif            m_SingleCheck 
= singleCheck;
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 操作接口,能够触发各种通知
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        protected IList List dot.gifget dot.gifreturn this; } }
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 实际存放数据的容器
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        protected ArrayList InnerList
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get dot.gifreturn m_InnerList; }
InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
if (value == null)
InBlock.gif                    
throw new ArgumentNullException("value can not be null""value");
InBlock.gif                m_InnerList 
= value;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 允许重复元素
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        protected bool Duplicated dot.gifget dot.gifreturn m_Duplicated; } set dot.gif{ m_Duplicated = value; } }
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 排序
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        protected bool Sorted dot.gifget dot.gifreturn m_Sorted; } set dot.gif{ m_Sorted = value; } }
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 对每一个元素进行检查并发出通知
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        protected bool SingleCheck dot.gifget dot.gifreturn m_SingleCheck; } set dot.gif{ m_SingleCheck = value; } }
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 比较器
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        protected IComparer Comparer dot.gifget dot.gifreturn m_Comparer; } set dot.gif{ m_Comparer = value; } }
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
callback#region callback
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 清除所有元素之前的通知
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        protected virtual void OnClear()dot.gif{}
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 所有元素清除成功之后的通知
ExpandedSubBlockEnd.gif        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        protected virtual void OnClearComplete()dot.gif{}
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 插入元素之前的通知
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="index">元素插入位置</param>
ExpandedSubBlockEnd.gif        
/// <param name="value">插入的值</param>

ExpandedSubBlockStart.gifContractedSubBlock.gif        protected virtual void OnInsert(int index, object value)dot.gif{}
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 元素插入成功之后的通知
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="index">元素插入位置</param>
ExpandedSubBlockEnd.gif        
/// <param name="value">插入的值</param>

ExpandedSubBlockStart.gifContractedSubBlock.gif        protected virtual void OnInsertComplete(int index, object value)dot.gif{}
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 删除元素之前的通知
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="index">要删除元素的位置</param>
ExpandedSubBlockEnd.gif        
/// <param name="value">要删除的元素</param>

ExpandedSubBlockStart.gifContractedSubBlock.gif        protected virtual void OnRemove(int index, object value)dot.gif{}
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 删除元素之后的通知
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="index">要删除元素的位置</param>
ExpandedSubBlockEnd.gif        
/// <param name="value">要删除的元素</param>

ExpandedSubBlockStart.gifContractedSubBlock.gif        protected virtual void OnRemoveComplete(int index, object value)dot.gif{}
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 设置元素的值之前的通知
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="index">元素的位置</param>
InBlock.gif        
/// <param name="oldValue">该位置的当前的值</param>
InBlock.gif        
/// <param name="newValue">将要存放到该位置的新值</param>
ExpandedSubBlockEnd.gif        
/// <remarks>如果<see cref="Sorted"/>为真,则设置成功之后的元素会移动到正确的位置上去</remarks>

ExpandedSubBlockStart.gifContractedSubBlock.gif        protected virtual void OnSet(int index, object oldValue, object newValue)dot.gif{}
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 设置元素的值成功之后的通知
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="index">元素位置</param>
InBlock.gif        
/// <param name="oldValue">该位置以前的值</param>
InBlock.gif        
/// <param name="newValue">该位置当前的值</param>
ExpandedSubBlockEnd.gif        
/// <remarks>如果<see cref="Sorted"/>为真,则设置成功之后的元素会移动到正确的位置上去</remarks>

ExpandedSubBlockStart.gifContractedSubBlock.gif        protected virtual void OnSetComplete(int index, object oldValue, object newValue)dot.gif{}
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 通知对元素进行正确性检查
InBlock.gif        
/// </summary>
ExpandedSubBlockEnd.gif        
/// <param name="value">将要存放的值</param>

ExpandedSubBlockStart.gifContractedSubBlock.gif        protected virtual void OnValidate(object value)dot.gif{}
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 将要把元素存放到容器之前的通知
InBlock.gif        
/// </summary>
ExpandedSubBlockEnd.gif        
/// <param name="value">将要存放的值</param>

ExpandedSubBlockStart.gifContractedSubBlock.gif        protected virtual void OnInclude(object value)dot.gif{}
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 将要把元素从容器中脱离之前的通知
InBlock.gif        
/// </summary>
ExpandedSubBlockEnd.gif        
/// <param name="value">将要脱离容器的值</param>

ExpandedSubBlockStart.gifContractedSubBlock.gif        protected virtual void OnExclude(object value)dot.gif{}
InBlock.gif
ExpandedSubBlockEnd.gif        
#endregion

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
internal logic#region internal logic
InBlock.gif
InBlock.gif        
private  void BeforeClear()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
if( m_SingleCheck )
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
int index = 0;
InBlock.gif                
try
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
while( index < m_InnerList.Count)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{
InBlock.gif                        OnExclude(m_InnerList[index]);
InBlock.gif                        
++ index;
ExpandedSubBlockEnd.gif                    }

ExpandedSubBlockEnd.gif                }

InBlock.gif                
catch(Exception)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
while--index >= 0 )
InBlock.gif                        OnInclude(m_InnerList[index]);
InBlock.gif                    
throw;
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            OnClear();
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
private  void AfterClearComplete()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            OnClearComplete();
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
private  void BeforeInsert(int index, object value)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
if( m_Sorted )
InBlock.gif                
throw new InvalidOperationException("排序状态下不能使用");
InBlock.gif            
ifthis.m_SingleCheck )
InBlock.gif                OnInclude(value);
InBlock.gif            OnInsert(index, value);
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
private  void AfterInsertComplete(int index, object value)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            OnInsertComplete(index, value);
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
private  void BeforeRemove(int index, object value)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
if( m_SingleCheck )
InBlock.gif                OnExclude(value);
InBlock.gif            OnRemove(index, value);
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
private  void AfterRemoveComplete(int index, object value)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            OnRemoveComplete(index, value);
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
private  void BeforeSet(int index, object oldValue, object newValue)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
if( m_SingleCheck )
InBlock.gif                OnInclude(newValue);
InBlock.gif            OnSet(index, oldValue, newValue);
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
private  void AfterSetComplete(int index, object oldValue, object newValue)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
if( m_SingleCheck )
InBlock.gif                OnExclude(oldValue);
InBlock.gif            OnSetComplete(index, oldValue, newValue);
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
private  void CheckValidate(object value)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
if (value == null)
InBlock.gif                
throw new ArgumentNullException("value can not be null""value");
InBlock.gif            
if!Duplicated 
InBlock.gif                
&& (( !m_Sorted && m_InnerList.IndexOf(value) != -1 ) 
InBlock.gif                    
|| (m_Sorted && m_InnerList.BinarySearch(value, m_Comparer) >= 0)
InBlock.gif                ))
InBlock.gif                
throw new ArgumentException("object exists");
InBlock.gif
InBlock.gif            OnValidate(value);
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockEnd.gif        
#endregion

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
IList 成员#region IList 成员
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
bool IList.IsReadOnly dot.gifget dot.gifreturn m_InnerList.IsReadOnly; } }
InBlock.gif
InBlock.gif        
object IList.this[int index]
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get dot.gifreturn m_InnerList[index]; }
InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                CheckValidate(value);
InBlock.gif                
object old = m_InnerList[index];
InBlock.gif                
this.BeforeSet(index, old, value);
InBlock.gif                m_InnerList[index] 
= value;
InBlock.gif                
try
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
this.AfterSetComplete(index, old, value);
InBlock.gif                    
if( m_Sorted )    // 移动到正确位置
ExpandedSubBlockStart.gifContractedSubBlock.gif
                    dot.gif{
InBlock.gif                        m_InnerList.RemoveAt(index);
InBlock.gif                        
int pos = m_InnerList.BinarySearch(value, m_Comparer);
InBlock.gif                        
if( pos < 0 ) pos = ~pos;
InBlock.gif                        m_InnerList.Insert(pos, value);
ExpandedSubBlockEnd.gif                    }

ExpandedSubBlockEnd.gif                }

InBlock.gif                
catch (Exception)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    m_InnerList[index] 
= old;
InBlock.gif                    
throw;
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public void RemoveAt(int index)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
object obj = m_InnerList[index];
InBlock.gif
InBlock.gif            
this.BeforeRemove(index, obj);
InBlock.gif            m_InnerList.RemoveAt(index);
InBlock.gif            
this.AfterRemoveComplete(index, obj);
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
void IList.Insert(int index, object value)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            CheckValidate(value);
InBlock.gif            
this.BeforeInsert(index, value);
InBlock.gif            m_InnerList.Insert(index, value);
InBlock.gif            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
this.AfterInsertComplete(index, value);
ExpandedSubBlockEnd.gif            }

InBlock.gif            
catch (Exception)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                m_InnerList.RemoveAt(index);
InBlock.gif                
throw;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
void IList.Remove(object value)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
int index = m_InnerList.IndexOf(value);
InBlock.gif            
if( index < 0 )
InBlock.gif                
throw new ArgumentException("object not found");
InBlock.gif            
this.BeforeRemove(index, value);
InBlock.gif            m_InnerList.Remove(value);
InBlock.gif            
this.AfterRemoveComplete(index, value);
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
bool IList.Contains(object value)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
return m_InnerList.Contains(value);
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public void Clear()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
this.BeforeClear();
InBlock.gif            m_InnerList.Clear();
InBlock.gif            
this.AfterClearComplete();
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
int IList.IndexOf(object value)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
return m_InnerList.IndexOf(value);
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
int IList.Add(object value)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            CheckValidate(value);
InBlock.gif            
int index = m_InnerList.Count;
InBlock.gif            
if( m_Sorted )
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                index 
= m_InnerList.BinarySearch(value, m_Comparer);
InBlock.gif                
if( index < 0 )    index = ~index;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
this.BeforeInsert(index, value);
InBlock.gif            
if!m_Sorted )
InBlock.gif                index 
= m_InnerList.Add(value);
InBlock.gif            
else
InBlock.gif                m_InnerList.Insert(index, value);
InBlock.gif
InBlock.gif            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
this.AfterInsertComplete(index, value);
ExpandedSubBlockEnd.gif            }

InBlock.gif            
catch (Exception)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                m_InnerList.RemoveAt(index);
InBlock.gif                
throw;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
return index;
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
bool IList.IsFixedSize dot.gifget dot.gifreturn m_InnerList.IsFixedSize; } }
InBlock.gif
ExpandedSubBlockEnd.gif        
#endregion

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
ICollection 成员#region ICollection 成员
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
bool ICollection.IsSynchronized dot.gifget dot.gifreturn m_InnerList.IsSynchronized; } }
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
public int Count dot.gifget dot.gifreturn m_InnerList.Count; } }
InBlock.gif
InBlock.gif        
void ICollection.CopyTo(Array array, int index)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            m_InnerList.CopyTo(array, index);
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
object ICollection.SyncRoot dot.gifget dot.gifreturn m_InnerList.SyncRoot; } }
InBlock.gif
InBlock.gif
ExpandedSubBlockEnd.gif        
#endregion

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
IEnumerable 成员#region IEnumerable 成员
InBlock.gif
InBlock.gif        
public IEnumerator GetEnumerator()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
return m_InnerList.GetEnumerator();
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockEnd.gif        
#endregion

InBlock.gif
InBlock.gif        
public IEnumerator GetEnumerator(int index, int count)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
return m_InnerList.GetEnumerator(index, count);
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedBlockEnd.gif    }

None.gif