model template区别和example和sample有什么区别

Free& Templates
Free template can help business and individuals to create a standard documents with consistent style and format. For web designer and web owners, template is a crucial elements in building a professional looking website.
example can also server various purpose ranging from invitations to
certificates etc.
is a free open source online learning portal that can help you build a
online learning site. Moodle has a flexible template system that you can
easily change the layout and style of your sites. The free moodle
template we provide has a simple and clear design that you can easily
customize for your own needs.
Invitation Template
Invitation template can help organizations and individuals to create various invitations. Invitation is a written
request inviting someone to go somewhere or to do something. There are many occasions that we need to send out invitation in advance, for example, birthday invitation to ask your friends to join the party, baby shower invitation to
invite family members, wedding invitation etc.
Plan Template
Plan template is a sample plan document for business and individuals
to make business or personal plan for future tasks and activities.&
A plan template will give you instructions
on how to produce a well designed plan for different purpose.
Analysis &Template
Analysis template will analyze a particular situation for decision making. For example, a cost analysis template will give detail cost structure of a project, a
campaign etc. A market analysis will analyze the market trends, the
market potential, consumer etc.
Free Sample TemplateFrom BoofCV
Found matches for the cursor with and without a mask.
Match intensity for a template.
Template matching compares a smaller image (the template) against every possible location in a larger target image.
A match is declared the fit score is a local peak and above a threshold.
Typically template matching is only used in highly controlled environments and doesn't work to well in natural scenes.
It's also extremely computationally expensive and larger images/templates are likely to take an excessive amount of time to process.
The example below is intended to demonstrate the strengths and weaknesses of template matching.
For each template the number of matches returned needs to be specified.
If the number of matches is known then the results are good in this example, but if too many are requested the some of the results are noise.
The intensity image is shown for a match.
Notice how ambiguous the results are.
Example Code:
Template Matching
* Example of how to find objects inside an image using template matching.
Template matching works
* well when there is little noise in the image and the object's appearance is known and static.
* also be very slow to compute, depending on the image and template size.
* @author Peter Abeles
public class ExampleTemplateMatching {
* Demonstrates how to search for matches of a template inside an image
* @param image
Image being searched
* @param template
Template being looked for
* @param mask
Mask which determines the weight of each template pixel in the match score
* @param expectedMatches Number of expected matches it hopes to find
* @return List of match location and scores
private static List&Match& findMatches(GrayF32 image, GrayF32 template, GrayF32 mask,
int expectedMatches) {
// create template matcher.
TemplateMatching&GrayF32& matcher =
FactoryTemplateMatching.createMatcher(TemplateScoreType.SUM_DIFF_SQ, GrayF32.class);
// Find the points which match the template the best
matcher.setImage(image);
matcher.setTemplate(template, mask,expectedMatches);
matcher.process();
return matcher.getResults().toList();
* Computes the template match intensity image and displays the results. Brighter intensity indicates
* a better match to the template.
public static void showMatchIntensity(GrayF32 image, GrayF32 template, GrayF32 mask) {
// create algorithm for computing intensity image
TemplateMatchingIntensity&GrayF32& matchIntensity =
FactoryTemplateMatching.createIntensity(TemplateScoreType.SUM_DIFF_SQ, GrayF32.class);
// apply the template to the image
matchIntensity.setInputImage(image);
matchIntensity.process(template, mask);
// get the results
GrayF32 intensity = matchIntensity.getIntensity();
// adjust the intensity image so that white indicates a good match and black a poor match
// the scale is kept linear to highlight how ambiguous the solution is
float min = ImageStatistics.min(intensity);
float max = ImageStatistics.max(intensity);
float range = max - min;
PixelMath.plus(intensity, -min, intensity);
PixelMath.divide(intensity, range, intensity);
PixelMath.multiply(intensity, 255.0f, intensity);
BufferedImage output = new BufferedImage(image.width, image.height, BufferedImage.TYPE_INT_BGR);
VisualizeImageData.grayMagnitude(intensity, output, -1);
ShowImages.showWindow(output, &Match Intensity&, true);
public static void main(String args[]) {
// Load image and templates
String directory = UtilIO.pathExample(&template&);
GrayF32 image = UtilImageIO.loadImage(directory ,&desktop.png&, GrayF32.class);
GrayF32 templateCursor = UtilImageIO.loadImage(directory , &cursor.png&, GrayF32.class);
GrayF32 maskCursor = UtilImageIO.loadImage(directory , &cursor_mask.png&, GrayF32.class);
GrayF32 templatePaint = UtilImageIO.loadImage(directory , &paint.png&, GrayF32.class);
// create output image to show results
BufferedImage output = new BufferedImage(image.width, image.height, BufferedImage.TYPE_INT_BGR);
ConvertBufferedImage.convertTo(image, output);
Graphics2D g2 = output.createGraphics();
// Search for the cursor in the image.
For demonstration purposes it has been pasted 3 times
g2.setColor(Color.RED); g2.setStroke(new BasicStroke(5));
drawRectangles(g2, image, templateCursor, maskCursor, 3);
// show match intensity image for this template
showMatchIntensity(image, templateCursor, maskCursor);
// Now it's try finding the cursor without a mask.
it will get confused when the background is black
g2.setColor(Color.BLUE); g2.setStroke(new BasicStroke(2));
drawRectangles(g2, image, templateCursor, null, 3);
// Now it searches for a specific icon for which there is only one match
g2.setColor(Color.ORANGE); g2.setStroke(new BasicStroke(3));
drawRectangles(g2, image, templatePaint, null, 1);
ShowImages.showWindow(output, &Found Matches&,true);
* Helper function will is finds matches and displays the results as colored rectangles
private static void drawRectangles(Graphics2D g2,
GrayF32 image, GrayF32 template, GrayF32 mask,
int expectedMatches) {
List&Match& found = findMatches(image, template, mask, expectedMatches);
int r = 2;
int w = template.width + 2 * r;
int h = template.height + 2 * r;
for (Match m : found) {
System.out.println(&Match &+m.x+& &+m.y+&
score &+m.score);
// this demonstrates how to filter out false positives
// the meaning of score will depend on the template technique
if( m.score & -1000 )
// This line is commented out for demonstration purposes
// the return point is the template's top left corner
int x0 = m.x - r;
int y0 = m.y - r;
int x1 = x0 + w;
int y1 = y0 + h;
g2.drawLine(x0, y0, x1, y0);
g2.drawLine(x1, y0, x1, y1);
g2.drawLine(x1, y1, x0, y1);
g2.drawLine(x0, y1, x0, y0);
Navigation menu
This page was last modified on 1 December 2016, at 15:40.JSON Example
JSON Example
This page shows examples of
messages formatted using .
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO ",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
"GlossSee": "markup"
The same text expressed as :
&!DOCTYPE glossary PUBLIC "-//OASIS//DTD DocBook V3.1//EN"&
&glossary&&title&example glossary&/title&
&GlossDiv&&title&S&/title&
&GlossList&
&GlossEntry ID="SGML" SortAs="SGML"&
&GlossTerm&Standard Generalized Markup Language&/GlossTerm&
&Acronym&SGML&/Acronym&
&Abbrev&ISO &/Abbrev&
&GlossDef&
&para&A meta-markup language, used to create markup
languages such as DocBook.&/para&
&GlossSeeAlso OtherTerm="GML"&
&GlossSeeAlso OtherTerm="XML"&
&/GlossDef&
&GlossSee OtherTerm="markup"&
&/GlossEntry&
&/GlossList&
&/GlossDiv&
&/glossary&
{&menu&: {
&id&: &file&,
&value&: &File&,
&popup&: {
&menuitem&: [
{&value&: &New&, &onclick&: &CreateNewDoc()&},
{&value&: &Open&, &onclick&: &OpenDoc()&},
{&value&: &Close&, &onclick&: &CloseDoc()&}
The same text expressed as :
&menu id=&file& value=&File&&
&menuitem value=&New& onclick=&CreateNewDoc()& /&
&menuitem value=&Open& onclick=&OpenDoc()& /&
&menuitem value=&Close& onclick=&CloseDoc()& /&
{"widget": {
&debug&: &on&,
&window&: {
&title&: &Sample Konfabulator Widget&,
&name&: &main_window&,
&width&: 500,
&height&: 500
&image&: {
&src&: &Images/Sun.png&,
&name&: &sun1&,
&hOffset&: 250,
&vOffset&: 250,
&alignment&: &center&
&data&: &Click Here&,
&size&: 36,
&style&: &bold&,
&name&: &text1&,
&hOffset&: 250,
&vOffset&: 100,
&alignment&: &center&,
&onMouseUp&: &sun1.opacity = (sun1.opacity / 100) * 90;&
The same text expressed as :
&debug&on&/debug&
&window title=&Sample Konfabulator Widget&&
&name&main_window&/name&
&width&500&/width&
&height&500&/height&
&image src=&Images/Sun.png& name=&sun1&&
&hOffset&250&/hOffset&
&vOffset&250&/vOffset&
&alignment&center&/alignment&
&text data=&Click Here& size=&36& style=&bold&&
&name&text1&/name&
&hOffset&250&/hOffset&
&vOffset&100&/vOffset&
&alignment&center&/alignment&
&onMouseUp&
sun1.opacity = (sun1.opacity / 100) * 90;
&/onMouseUp&
&/text&&/widget&
{"web-app": {
"servlet": [
"servlet-name": "cofaxCDS",
"servlet-class": "org.cofax.cds.CDSServlet",
"init-param": {
"configGlossary:installationAt": "Philadelphia, PA",
"configGlossary:adminEmail": "",
"configGlossary:poweredBy": "Cofax",
"configGlossary:poweredByIcon": "/images/cofax.gif",
"configGlossary:staticPath": "/content/static",
"templateProcessorClass": "org.cofax.WysiwygTemplate",
"templateLoaderClass": "org.cofax.FilesTemplateLoader",
"templatePath": "templates",
"templateOverridePath": "",
"defaultListTemplate": "listTemplate.htm",
"defaultFileTemplate": "articleTemplate.htm",
"useJSP": false,
"jspListTemplate": "listTemplate.jsp",
"jspFileTemplate": "articleTemplate.jsp",
"cachePackageTagsTrack": 200,
"cachePackageTagsStore": 200,
"cachePackageTagsRefresh": 60,
"cacheTemplatesTrack": 100,
"cacheTemplatesStore": 50,
"cacheTemplatesRefresh": 15,
"cachePagesTrack": 200,
"cachePagesStore": 100,
"cachePagesRefresh": 10,
"cachePagesDirtyRead": 10,
"searchEngineListTemplate": "forSearchEnginesList.htm",
"searchEngineFileTemplate": "forSearchEngines.htm",
"searchEngineRobotsDb": "WEB-INF/robots.db",
"useDataStore": true,
"dataStoreClass": "org.cofax.SqlDataStore",
"redirectionClass": "org.cofax.SqlRedirection",
"dataStoreName": "cofax",
"dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver",
"dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon",
"dataStoreUser": "sa",
"dataStorePassword": "dataStoreTestQuery",
"dataStoreTestQuery": "SET NOCOUNT ON;select test='test';",
"dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log",
"dataStoreInitConns": 10,
"dataStoreMaxConns": 100,
"dataStoreConnUsageLimit": 100,
"dataStoreLogLevel": "debug",
"maxUrlLength": 500}},
"servlet-name": "cofaxEmail",
"servlet-class": "org.cofax.cds.EmailServlet",
"init-param": {
"mailHost": "mail1",
"mailHostOverride": "mail2"}},
"servlet-name": "cofaxAdmin",
"servlet-class": "org.cofax.cds.AdminServlet"},
"servlet-name": "fileServlet",
"servlet-class": "org.cofax.cds.FileServlet"},
"servlet-name": "cofaxTools",
"servlet-class": "org.cofax.cms.CofaxToolsServlet",
"init-param": {
"templatePath": "toolstemplates/",
"logLocation": "/usr/local/tomcat/logs/CofaxTools.log",
"logMaxSize": "",
"dataLog": 1,
"dataLogLocation": "/usr/local/tomcat/logs/dataLog.log",
"dataLogMaxSize": "",
"removePageCache": "/content/admin/remove?cache=pages&id=",
"removeTemplateCache": "/content/admin/remove?cache=templates&id=",
"fileTransferFolder": "/usr/local/tomcat/webapps/content/fileTransferFolder",
"lookInContext": 1,
"adminGroupID": 4,
"betaServer": true}}],
"servlet-mapping": {
"cofaxCDS": "/",
"cofaxEmail": "/cofaxutil/aemail/*",
"cofaxAdmin": "/admin/*",
"fileServlet": "/static/*",
"cofaxTools": "/tools/*"},
"taglib": {
"taglib-uri": "cofax.tld",
"taglib-location": "/WEB-INF/tlds/cofax.tld"}}}
The same file expressed as :
&?xml version="1.0" encoding="ISO-8859-1"?&
&!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"/j2ee/dtds/web-app_2.2.dtd"&
&servlet-name&
&/servlet-name&
&servlet-class&
org.cofax.cds.CDSServlet
&/servlet-class&
&init-param&
&param-name&configGlossary:installationAt&/param-name&
&param-value&Philadelphia, PA&/param-value&
&/init-param&
&init-param&
&param-name&configGlossary:adminEmail&/param-name&
&param-value&&/param-value&
&/init-param&
&init-param&
&param-name&configGlossary:poweredBy&/param-name&
&param-value&Cofax&/param-value&
&/init-param&
&init-param&
&param-name&configGlossary:poweredByIcon&/param-name&
&param-value&/images/cofax.gif&/param-value&
&/init-param&
&init-param&
&param-name&configGlossary:staticPath&/param-name&
&param-value&/content/static&/param-value&
&/init-param&
&init-param&
&param-name&templateProcessorClass&/param-name&
&param-value&org.cofax.WysiwygTemplate&/param-value&
&/init-param&
&init-param&
&param-name&templateLoaderClass&/param-name&
&param-value&org.cofax.FilesTemplateLoader&/param-value&
&/init-param&
&init-param&
&param-name&templatePath&/param-name&
&param-value&templates&/param-value&
&/init-param&
&init-param&
&param-name&templateOverridePath&/param-name&
&param-value&&/param-value&
&/init-param&
&init-param&
&param-name&defaultListTemplate&/param-name&
&param-value&listTemplate.htm&/param-value&
&/init-param&
&init-param&
&param-name&defaultFileTemplate&/param-name&
&param-value&articleTemplate.htm&/param-value&
&/init-param&
&init-param&
&param-name&useJSP&/param-name&
&param-value&false&/param-value&
&/init-param&
&init-param&
&param-name&jspListTemplate&/param-name&
&param-value&listTemplate.jsp&/param-value&
&/init-param&
&init-param&
&param-name&jspFileTemplate&/param-name&
&param-value&articleTemplate.jsp&/param-value&
&/init-param&
&init-param&
&param-name&cachePackageTagsTrack&/param-name&
&param-value&200&/param-value&
&/init-param&
&init-param&
&param-name&cachePackageTagsStore&/param-name&
&param-value&200&/param-value&
&/init-param&
&init-param&
&param-name&cachePackageTagsRefresh&/param-name&
&param-value&60&/param-value&
&/init-param&
&init-param&
&param-name&cacheTemplatesTrack&/param-name&
&param-value&100&/param-value&
&/init-param&
&init-param&
&param-name&cacheTemplatesStore&/param-name&
&param-value&50&/param-value&
&/init-param&
&init-param&
&param-name&cacheTemplatesRefresh&/param-name&
&param-value&15&/param-value&
&/init-param&
&init-param&
&param-name&cachePagesTrack&/param-name&
&param-value&200&/param-value&
&/init-param&
&init-param&
&param-name&cachePagesStore&/param-name&
&param-value&100&/param-value&
&/init-param&
&init-param&
&param-name&cachePagesRefresh&/param-name&
&param-value&10&/param-value&
&/init-param&
&init-param&
&param-name&cachePagesDirtyRead&/param-name&
&param-value&10&/param-value&
&/init-param&
&init-param&
&param-name&searchEngineListTemplate&/param-name&
&param-value&forSearchEnginesList.htm&/param-value&
&/init-param&
&init-param&
&param-name&searchEngineFileTemplate&/param-name&
&param-value&forSearchEngines.htm&/param-value&
&/init-param&
&init-param&
&param-name&searchEngineRobotsDb&/param-name&
&param-value&WEB-INF/robots.db&/param-value&
&/init-param&
&init-param&
&param-name&useDataStore&/param-name&
&param-value&true&/param-value&
&/init-param&
&init-param&
&param-name&dataStoreClass&/param-name&
&param-value&org.cofax.SqlDataStore&/param-value&
&/init-param&
&init-param&
&param-name&redirectionClass&/param-name&
&param-value&org.cofax.SqlRedirection&/param-value&
&/init-param&
&init-param&
&param-name&dataStoreName&/param-name&
&param-value&cofax&/param-value&
&/init-param&
&init-param&
&param-name&dataStoreDriver&/param-name&
&param-value&com.microsoft.jdbc.sqlserver.SQLServerDriver&/param-value&
&/init-param&
&init-param&
&param-name&dataStoreUrl&/param-name&
&param-value&jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon&/param-value&
&/init-param&
&init-param&
&param-name&dataStoreUser&/param-name&
&param-value&sa&/param-value&
&/init-param&
&init-param&
&param-name&dataStorePassword&/param-name&
&param-value&&/param-value&
&/init-param&
&init-param&
&param-name&dataStoreTestQuery&/param-name&
&param-value&SET NOCOUNT ON;select test='test';&/param-value&
&/init-param&
&init-param&
&param-name&dataStoreLogFile&/param-name&
&param-value&/usr/local/tomcat/logs/datastore.log&/param-value&
&/init-param&
&init-param&
&param-name&dataStoreInitConns&/param-name&
&param-value&10&/param-value&
&/init-param&
&init-param&
&param-name&dataStoreMaxConns&/param-name&
&param-value&100&/param-value&
&/init-param&
&init-param&
&param-name&dataStoreConnUsageLimit&/param-name&
&param-value&100&/param-value&
&/init-param&
&init-param&
&param-name&dataStoreLogLevel&/param-name&
&param-value&debug&/param-value&
&/init-param&
&init-param&
&param-name&maxUrlLength&/param-name&
&param-value&500&/param-value&
&/init-param&
&/servlet&
&servlet-name&
cofaxEmail
&/servlet-name&
&servlet-class&
org.cofax.cds.EmailServlet
&/servlet-class&
&init-param&
&param-name&mailHost&/param-name&
&param-value&mail1&/param-value&
&/init-param&
&init-param&
&param-name&mailHostOverride&/param-name&
&param-value&mail2&/param-value&
&/init-param&
&/servlet&
&servlet-name&
cofaxAdmin
&/servlet-name&
&servlet-class&
org.cofax.cds.AdminServlet
&/servlet-class&
&/servlet&
&servlet-name&
fileServlet
&/servlet-name&
&servlet-class&
org.cofax.cds.FileServlet
&/servlet-class&
&/servlet&
&servlet-name&
cofaxTools
&/servlet-name&
&servlet-class&
org.cofax.cms.CofaxToolsServlet
&/servlet-class&
&init-param&
&param-name&templatePath&/param-name&
&param-value&toolstemplates/&/param-value&
&/init-param&
&init-param&
&param-name&log&/param-name&
&param-value&1&/param-value&
&/init-param&
&init-param&
&param-name&logLocation&/param-name&
&param-value&/usr/local/tomcat/logs/CofaxTools.log&/param-value&
&/init-param&
&init-param&
&param-name&logMaxSize&/param-name&
&param-value&&/param-value&
&/init-param&
&init-param&
&param-name&dataLog&/param-name&
&param-value&1&/param-value&
&/init-param&
&init-param&
&param-name&dataLogLocation&/param-name&
&param-value&/usr/local/tomcat/logs/dataLog.log&/param-value&
&/init-param&
&init-param&
&param-name&dataLogMaxSize&/param-name&
&param-value&&/param-value&
&/init-param&
&init-param&
&param-name&removePageCache&/param-name&
&param-value&/content/admin/remove?cache=pages&id=&/param-value&
&/init-param&
&init-param&
&param-name&removeTemplateCache&/param-name&
&param-value&/content/admin/remove?cache=templates&id=&/param-value&
&/init-param&
&init-param&
&param-name&fileTransferFolder&/param-name&
&param-value&/usr/local/tomcat/webapps/content/fileTransferFolder&/param-value&
&/init-param&
&init-param&
&param-name&lookInContext&/param-name&
&param-value&1&/param-value&
&/init-param&
&init-param&
&param-name&adminGroupID&/param-name&
&param-value&4&/param-value&
&/init-param&
&init-param&
&param-name&betaServer&/param-name&
&param-value&true&/param-value&
&/init-param&
&/servlet&
&servlet-mapping&
&servlet-name&
&/servlet-name&
&url-pattern&
&/url-pattern&
&/servlet-mapping&
&servlet-mapping&
&servlet-name&
cofaxEmail
&/servlet-name&
&url-pattern&
/cofaxutil/aemail/*
&/url-pattern&
&/servlet-mapping&
&servlet-mapping&
&servlet-name&
cofaxAdmin
&/servlet-name&
&url-pattern&
&/url-pattern&
&/servlet-mapping&
&servlet-mapping&
&servlet-name&
fileServlet
&/servlet-name&
&url-pattern&
&/url-pattern&
&/servlet-mapping&
&servlet-mapping&
&servlet-name&
cofaxTools
&/servlet-name&
&url-pattern&
&/url-pattern&
&/servlet-mapping&
&taglib-uri&cofax.tld&/taglib-uri&
&taglib-location&/WEB-INF/tlds/cofax.tld&/taglib-location&
&/web-app&
The action and label values only need to be provided if they are not the same as the id.
{"menu": {
&header&: &SVG Viewer&,
&items&: [
{&id&: &Open&},
{&id&: &OpenNew&, &label&: &Open New&},
{&id&: &ZoomIn&, &label&: &Zoom In&},
{&id&: &ZoomOut&, &label&: &Zoom Out&},
{&id&: &OriginalView&, &label&: &Original View&},
{&id&: &Quality&},
{&id&: &Pause&},
{&id&: &Mute&},
{&id&: &Find&, &label&: &Find...&},
{&id&: &FindAgain&, &label&: &Find Again&},
{&id&: &Copy&},
{&id&: &CopyAgain&, &label&: &Copy Again&},
{&id&: &CopySVG&, &label&: &Copy SVG&},
{&id&: &ViewSVG&, &label&: &View SVG&},
{&id&: &ViewSource&, &label&: &View Source&},
{&id&: &SaveAs&, &label&: &Save As&},
{&id&: &Help&},
{&id&: &About&, &label&: &About Adobe CVG Viewer...&}
The same message expressed as :
&header&Adobe SVG Viewer&/header&
&item action=&Open& id=&Open&&Open&/item&
&item action=&OpenNew& id=&OpenNew&&Open New&/item&
&separator/&
&item action=&ZoomIn& id=&ZoomIn&&Zoom In&/item&
&item action=&ZoomOut& id=&ZoomOut&&Zoom Out&/item&
&item action=&OriginalView& id=&OriginalView&&Original View&/item&
&separator/&
&item action=&Quality& id=&Quality&&Quality&/item&
&item action=&Pause& id=&Pause&&Pause&/item&
&item action=&Mute& id=&Mute&&Mute&/item&
&separator/&
&item action=&Find& id=&Find&&Find...&/item&
&item action=&FindAgain& id=&FindAgain&&Find Again&/item&
&item action=&Copy& id=&Copy&&Copy&/item&
&item action=&CopyAgain& id=&CopyAgain&&Copy Again&/item&
&item action=&CopySVG& id=&CopySVG&&Copy SVG&/item&
&item action=&ViewSVG& id=&ViewSVG&&View SVG&/item&
&item action=&ViewSource& id=&ViewSource&&View Source&/item&
&item action=&SaveAs& id=&SaveAs&&Save As&/item&
&separator/&
&item action=&Help& id=&Help&&Help&/item&
&item action=&About& id=&About&&About Adobe CVG Viewer...&/item&

我要回帖

更多关于 sample template 的文章

 

随机推荐