视频国产一区二区三区,中文字幕亚洲综合久久五月天色无吗'',在线精品亚洲一区二区http://www.aygfsteel.com/tambc/category/18607.htmlzh-cnTue, 06 Nov 2007 08:12:57 GMTTue, 06 Nov 2007 08:12:57 GMT60HttpClient和HtmlParser配合實現自動登陸系統抽取頁面信息http://www.aygfsteel.com/tambc/articles/95320.htmltambctambcMon, 22 Jan 2007 05:42:00 GMThttp://www.aygfsteel.com/tambc/articles/95320.htmlhttp://www.aygfsteel.com/tambc/comments/95320.htmlhttp://www.aygfsteel.com/tambc/articles/95320.html#Feedback0http://www.aygfsteel.com/tambc/comments/commentRss/95320.htmlhttp://www.aygfsteel.com/tambc/services/trackbacks/95320.html閱讀全文

tambc 2007-01-22 13:42 發表評論
]]>
Acegi+hibernate 動態實現基于角色的權限管理http://www.aygfsteel.com/tambc/articles/89905.htmltambctambcMon, 25 Dec 2006 06:51:00 GMThttp://www.aygfsteel.com/tambc/articles/89905.htmlhttp://www.aygfsteel.com/tambc/comments/89905.htmlhttp://www.aygfsteel.com/tambc/articles/89905.html#Feedback0http://www.aygfsteel.com/tambc/comments/commentRss/89905.htmlhttp://www.aygfsteel.com/tambc/services/trackbacks/89905.html閱讀全文

tambc 2006-12-25 14:51 發表評論
]]>
服務器是怎么要求客戶端強行彈出身份驗證窗口的http://www.aygfsteel.com/tambc/articles/89889.htmltambctambcMon, 25 Dec 2006 06:02:00 GMThttp://www.aygfsteel.com/tambc/articles/89889.htmlhttp://www.aygfsteel.com/tambc/comments/89889.htmlhttp://www.aygfsteel.com/tambc/articles/89889.html#Feedback0http://www.aygfsteel.com/tambc/comments/commentRss/89889.htmlhttp://www.aygfsteel.com/tambc/services/trackbacks/89889.html

用jmeter創建一個http request的sampler,再建一個view result tree的lisenter來看看服務器返回了些什么污七八糟的:

HTTP response headers:
HTTP/1.1 401 Unauthorized
Pragma: No-cache
Cache-Control: no-cache
Expires: Thu, 01 Jan 1970 08:00:00 CST
WWW-Authenticate: Basic realm="Tomcat Manager Application"
Content-Type: text/html;charset=utf-8
Content-Length: 954
Date: Thu, 30 Jun 2005 09:27:26 GMT
Server: Apache-Coyote/1.1


嘿嘿,原來是一個帶WWW-Authenticate的401錯誤啊。自己寫個jsp模擬一下看看怎么樣:

<%
response.addHeader("WWW-Authenticate","Basic realm=\"Tomcat Manager Application\"");
response.sendError(401,"Unauthorized");
%>

果然,一個一模一樣的登陸窗口跳出來了。不過身份驗證的具體過程要怎么做呢?google了一下,果然看到好東西了: http://www.chinadata.cn/showContent.asp?projectID=2083



按照說明構造了一個jsp文件:
<%
sun.misc.BASE64Decoder?decoder?
=?new?sun.misc.BASE64Decoder();
boolean?authenticated?=?false;
String?authorization?
=?request.getHeader("authorization");
System.out.println(
"authorization:"+authorization);
if?(authorization?!=?null)?{
??
if?(authorization.startsWith("Basic")){
????authorization?
=?authorization.substring(authorization.indexOf('?')+1);
????
byte[]?bytes?=?decoder.decodeBuffer(authorization);
????authorization?
=?new?String(bytes);
????String?userName?
=?authorization.substring(0,authorization.indexOf(':'));
????String?password?
=?authorization.substring(authorization.indexOf(':')+1);
????System.out.println(
"userName:"+userName);
????System.out.println(
"password:"+password);
????authenticated?
=userName.equals("abc")?&&?password.equals("abc");
??}
else?if?(authorization.startsWith("Digest")){
????String?userName?
=?authorization.substring(authorization.indexOf("username="));
????userName?
=?userName.substring("username=\"".length());
????userName?=?userName.substring(0,userName.indexOf('"'));
????String?password?
=?authorization.substring(authorization.indexOf("response="));
????password?
=?password.substring("response=\"".length());
????password?=?password.substring(0,password.indexOf('"'));
????authenticated?
=userName.equals("abc")?&&?password.equals("3cf1135d3b8e20dd9272d06288569a56");
??}

}

if?(!authenticated){
??
//???response.addHeader("WWW-Authenticate","Digest?realm=\"Tomcat?Manager?Application\"");
??response.addHeader("WWW-Authenticate","Basic?realm=\"Tomcat?Manager?Application\"");
??response.sendError(
401,"Unauthorized");
}
else{
??out.println(
"hello?abc");
}

%>
cool,和tomcat一模一樣的登陸頁面做出來了。

用戶名密碼均為abc,hard code在代碼里面了。不過還沒查到Digest方式的情況下是對哪些信息進行MD5的。

tambc 2006-12-25 14:02 發表評論
]]>
java的ubb類http://www.aygfsteel.com/tambc/articles/89556.htmltambctambcFri, 22 Dec 2006 08:22:00 GMThttp://www.aygfsteel.com/tambc/articles/89556.htmlhttp://www.aygfsteel.com/tambc/comments/89556.htmlhttp://www.aygfsteel.com/tambc/articles/89556.html#Feedback0http://www.aygfsteel.com/tambc/comments/commentRss/89556.htmlhttp://www.aygfsteel.com/tambc/services/trackbacks/89556.html閱讀全文

tambc 2006-12-22 16:22 發表評論
]]>
java版的escape和unescapehttp://www.aygfsteel.com/tambc/articles/89555.htmltambctambcFri, 22 Dec 2006 08:19:00 GMThttp://www.aygfsteel.com/tambc/articles/89555.htmlhttp://www.aygfsteel.com/tambc/comments/89555.htmlhttp://www.aygfsteel.com/tambc/articles/89555.html#Feedback0http://www.aygfsteel.com/tambc/comments/commentRss/89555.htmlhttp://www.aygfsteel.com/tambc/services/trackbacks/89555.html
  /**
  * JavaScript escape/unescape 編碼的 Java 實現
  * author jackyz
  * keep this copyright info while using this method by free
  */
  public class Escape {
  private final static String[] hex = {
  "00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F",
  "10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F",
  "20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F",
  "30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F",
  "40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F",
  "50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F",
  "60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F",
  "70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F",
  "80","81","82","83","84","85","86","87","88","89","8A","8B","8C","8D","8E","8F",
  "90","91","92","93","94","95","96","97","98","99","9A","9B","9C","9D","9E","9F",
  "A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","AA","AB","AC","AD","AE","AF",
  "B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","BA","BB","BC","BD","BE","BF",
  "C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","CE","CF",
  "D0","D1","D2","D3","D4","D5","D6","D7","D8","D9","DA","DB","DC","DD","DE","DF",
  "E0","E1","E2","E3","E4","E5","E6","E7","E8","E9","EA","EB","EC","ED","EE","EF",
  "F0","F1","F2","F3","F4","F5","F6","F7","F8","F9","FA","FB","FC","FD","FE","FF"
  };
  private final static byte[] val = {
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F
  };
  public static String escape(String s) {
  StringBuffer sbuf = new StringBuffer();
  int len = s.length();
  for (int i = 0; i < len; i++) {
  int ch = s.charAt(i);
  if (ch == ' ') {            // space : map to '+'
  sbuf.append('+');
  } else if ('A' <= ch && ch <= 'Z') {  // 'A'..'Z' : as it was
  sbuf.append((char)ch);
  } else if ('a' <= ch && ch <= 'z') {  // 'a'..'z' : as it was
  sbuf.append((char)ch);
  } else if ('0' <= ch && ch <= '9') {  // '0'..'9' : as it was
  sbuf.append((char)ch);
  } else if (ch == '-' || ch == '_'    // unreserved : as it was
  || ch == '.' || ch == '!'
  || ch == '~' || ch == '*'
  || ch == '\'' || ch == '('
  || ch == ')') {
  sbuf.append((char)ch);
  } else if (ch <= 0x007F) {       // other ASCII : map to %XX
  sbuf.append('%');
  sbuf.append(hex[ch]);
  } else {                // unicode : map to %uXXXX
  sbuf.append('%');
  sbuf.append('u');
  sbuf.append(hex[(ch >>> 8)]);
  sbuf.append(hex[(0x00FF & ch)]);
  }
  }
  return sbuf.toString();
  }
  public static String unescape(String s) {
  StringBuffer sbuf = new StringBuffer();
  int i = 0;
  int len = s.length();
  while (i < len) {
  int ch = s.charAt(i);
  if (ch == '+') {            // + : map to ' '
  sbuf.append(' ');
  } else if ('A' <= ch && ch <= 'Z') {  // 'A'..'Z' : as it was
  sbuf.append((char)ch);
  } else if ('a' <= ch && ch <= 'z') {  // 'a'..'z' : as it was
  sbuf.append((char)ch);
  } else if ('0' <= ch && ch <= '9') {  // '0'..'9' : as it was
  sbuf.append((char)ch);
  } else if (ch == '-' || ch == '_'    // unreserved : as it was
  || ch == '.' || ch == '!'
  || ch == '~' || ch == '*'
  || ch == '\'' || ch == '('
  || ch == ')') {
  sbuf.append((char)ch);
  } else if (ch == '%') {
  int cint = 0;
  if ('u' != s.charAt(i+1)) {     // %XX : map to ascii(XX)
  cint = (cint << 4) | val[s.charAt(i+1)];
  cint = (cint << 4) | val[s.charAt(i+2)];
  i+=2;
  } else {              // %uXXXX : map to unicode(XXXX)
  cint = (cint << 4) | val[s.charAt(i+2)];
  cint = (cint << 4) | val[s.charAt(i+3)];
  cint = (cint << 4) | val[s.charAt(i+4)];
  cint = (cint << 4) | val[s.charAt(i+5)];
  i+=5;
  }
  sbuf.append((char)cint);
  }
  i++;
  }
  return sbuf.toString();
  }
  public static void main(String[] args) {
  String stest = "中文1234 abcd[]()<+>,.~\\";
  System.out.println(stest);
  System.out.println(escape(stest));
  System.out.println(unescape(escape(stest)));
  }
  }




===========================================================================

class? EscapeUnescape
{
?public static String? escape (String src)
?{
??int i;
??char j;
??StringBuffer tmp = new StringBuffer();
??tmp.ensureCapacity(src.length()*6);

??for (i=0;i<src.length() ;i++ )
??{

???j = src.charAt(i);

???if (Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j))
????tmp.append(j);
???else
????if (j<256)
????{
????tmp.append( "%" );
????if (j<16)
?????tmp.append( "0" );
????tmp.append( Integer.toString(j,16) );
????}
????else
????{
????tmp.append( "%u" );
????tmp.append( Integer.toString(j,16) );
????}
??}
??return tmp.toString();
?}

?public static String? unescape (String src)
?{
??StringBuffer tmp = new StringBuffer();
??tmp.ensureCapacity(src.length());
??int? lastPos=0,pos=0;
??char ch;
??while (lastPos<src.length())
??{
???pos = src.indexOf("%",lastPos);
???if (pos == lastPos)
????{
????if (src.charAt(pos+1)=='u')
?????{
?????ch = (char)Integer.parseInt(src.substring(pos+2,pos+6),16);
?????tmp.append(ch);
?????lastPos = pos+6;
?????}
????else
?????{
?????ch = (char)Integer.parseInt(src.substring(pos+1,pos+3),16);
?????tmp.append(ch);
?????lastPos = pos+3;
?????}
????}
???else
????{
????if (pos == -1)
?????{
?????tmp.append(src.substring(lastPos));
?????lastPos=src.length();
?????}
????else
?????{
?????tmp.append(src.substring(lastPos,pos));
?????lastPos=pos;
?????}
????}
??}
??return tmp.toString();
?}

?public static void main(String[] args)
?{
??String tmp="~!@#$%^&*()_+|\\=-,./?><;'][{}\"";
??System.out.println("testing escape : "+tmp);
??tmp =escape(tmp);
??System.out.println(tmp);
??System.out.println("testing unescape :"+tmp);
??System.out.println(unescape(tmp));
?}
}



tambc 2006-12-22 16:19 發表評論
]]>
用java實現漢字的筆畫數(轉貼) http://www.aygfsteel.com/tambc/articles/89251.htmltambctambcThu, 21 Dec 2006 04:04:00 GMThttp://www.aygfsteel.com/tambc/articles/89251.htmlhttp://www.aygfsteel.com/tambc/comments/89251.htmlhttp://www.aygfsteel.com/tambc/articles/89251.html#Feedback0http://www.aygfsteel.com/tambc/comments/commentRss/89251.htmlhttp://www.aygfsteel.com/tambc/services/trackbacks/89251.htmlpublic class CnToStrokeCount {
?/**
? * 測試
? * @param args String[]
? */
?public static void main(String[] args) {

??String cnStr = "測試數據";
??char[] chars = cnStr.toCharArray();
??System.out.print("<" + cnStr + ">的筆畫數分別是:");
??for (int i = 0; i < chars.length; i++) {
???System.out.print("*" + CnToStrokeCount.getStrokeCount(chars[i]));
??}
??System.out.println("*");

??cnStr = "CSDN - 專家門診 - Java";
??chars = cnStr.toCharArray();
??System.out.print("<" + cnStr + ">的筆畫數分別是:");
??for (int i = 0; i < chars.length; i++) {
???System.out.print("*" + CnToStrokeCount.getStrokeCount(chars[i]));
??}
??System.out.println("*");

??cnStr = "=====提問技巧,請大家注意!!=====";
??chars = cnStr.toCharArray();
??System.out.print("<" + cnStr + ">的筆畫數分別是:");
??for (int i = 0; i < chars.length; i++) {
???System.out.print("*" + CnToStrokeCount.getStrokeCount(chars[i]));
??}
??System.out.println("*");

?}

?/**
?* 根據漢字字符獲得筆畫數,拼音和非法字符默認為0
?* @param charcator char
?* @return int
?*/
?public static int getStrokeCount(char charcator) {
??byte[] bytes = (String.valueOf(charcator)).getBytes();
??if (bytes == null || bytes.length > 2 || bytes.length <= 0) {
???//錯誤引用,非合法字符
???return 0;
??}
??if (bytes.length == 1) {
???//英文字符
???return 0;
??}
??if (bytes.length == 2) {
???//中文字符
???int highByte = 256 + bytes[0];
???int lowByte = 256 + bytes[1];
???return getStrokeCount(highByte, lowByte);
??}

??//未知錯誤
??return 0;
?}

?/**
?*
?* @param highByte int:高位字節
?* @param lowByte int:低位字節
?* @return int
?*/
?private static int getStrokeCount(int highByte, int lowByte) {
??if (highByte < 0xB0
???|| highByte > 0xF7
???|| lowByte < 0xA1
???|| lowByte > 0xFE) {
???//非GB2312合法字符
???return -1;
??}
??int offset = (highByte - 0xB0) * (0xFE - 0xA0) + (lowByte - 0xA1);
??return gb2312StrokeCount[offset];
?}
?

? //GB2312的字符集的筆劃列表,可以參考gb2312字符全集
? private static int[] gb2312StrokeCount = {
? /* B0 */
? 10, 7, 10, 10, 8, 10, 9, 11,
? 17, 14, 13, 5, 13, 10, 12, 15,
? 10, 6, 10, 9, 13, 8, 10, 10,
? 8, 8, 10, 5, 10, 14, 16, 9,
? 12, 12, 15, 15, 7, 10, 5, 5,
? 7, 10, 2, 9, 4, 8, 12, 13,
? 7, 10, 7, 21, 10, 8, 5, 9,
? 6, 13, 8, 8, 9, 13, 12, 10,
? 13, 7, 10, 10, 8, 8, 7, 8,
? 7, 19, 5, 4, 8, 5, 9, 10,
? 14, 14, 9, 12, 15, 10, 15, 12,
? 12, 8, 9, 5, 15, 10,
? /* B1 */
? 16, 13, 9, 12, 8, 8, 8, 7,
? 15, 10, 13, 19, 8, 13, 12, 8,
? 5, 12, 9, 4, 9, 10, 7, 8,
? 12, 12, 10, 8, 8, 5, 11, 11,
? 11, 9, 9, 18, 9, 12, 14, 4,
? 13, 10, 8, 14, 13, 14, 6, 10,
? 9, 4, 7, 13, 6, 11, 14, 5,
? 13, 16, 17, 16, 9, 18, 5, 12,
? 8, 9, 9, 8, 4, 16, 16, 17,
? 12, 9, 11, 15, 8, 19, 16, 7,
? 15, 11, 12, 16, 13, 10, 13, 7,
? 6, 9, 5, 8, 9, 9,
? /* B2 */
? 10, 6, 8, 11, 15, 8, 10, 8,
? 12, 9, 13, 10, 14, 7, 8, 11,
? 11, 14, 12, 8, 7, 10, 2, 10,
? 7, 11, 4, 5, 7, 19, 10, 8,
? 17, 11, 12, 7, 3, 7, 12, 15,
? 8, 11, 11, 14, 16, 8, 10, 9,
? 11, 11, 7, 7, 10, 4, 7, 17,
? 16, 16, 15, 11, 9, 8, 12, 8,
? 5, 9, 7, 19, 12, 3, 9, 9,
? 9, 14, 12, 14, 7, 9, 8, 8,
? 10, 10, 12, 11, 14, 12, 11, 13,
? 11, 6, 11, 19, 8, 11,
? /* B3 */
? 6, 9, 11, 4, 11, 7, 2, 12,
? 8, 11, 10, 12, 7, 9, 12, 15,
? 15, 11, 7, 8, 4, 7, 15, 12,
? 7, 15, 10, 6, 7, 6, 11, 7,
? 7, 7, 12, 8, 15, 10, 9, 16,
? 6, 7, 10, 12, 12, 15, 8, 8,
? 10, 10, 10, 6, 13, 9, 11, 6,
? 7, 6, 6, 10, 8, 8, 4, 7,
? 10, 5, 9, 6, 6, 6, 11, 8,
? 8, 13, 12, 14, 13, 13, 13, 4,
? 11, 14, 4, 10, 7, 5, 16, 12,
? 18, 12, 13, 12, 9, 13,
? /* B4 */
? 10, 12, 24, 13, 13, 5, 12, 3,
? 9, 13, 7, 11, 12, 7, 9, 12,
? 15, 7, 6, 6, 7, 8, 11, 13,
? 8, 9, 13, 15, 10, 11, 7, 21,
? 18, 11, 11, 9, 14, 14, 13, 13,
? 10, 7, 6, 8, 12, 6, 15, 12,
? 7, 5, 4, 5, 11, 11, 15, 17,
? 9, 19, 16, 12, 14, 11, 13, 10,
? 13, 14, 11, 14, 7, 6, 3, 14,
? 15, 12, 11, 10, 13, 12, 6, 12,
? 14, 5, 3, 7, 4, 12, 17, 9,
? 9, 5, 9, 11, 9, 11,
? /* B5 */
? 9, 10, 8, 4, 8, 10, 11, 9,
? 5, 12, 7, 11, 11, 8, 11, 11,
? 6, 9, 10, 9, 10, 2, 10, 17,
? 10, 7, 11, 6, 8, 15, 11, 12,
? 11, 15, 11, 8, 19, 6, 12, 12,
? 17, 14, 4, 12, 7, 14, 8, 10,
? 11, 7, 10, 14, 14, 8, 8, 6,
? 12, 11, 9, 7, 10, 12, 16, 11,
? 13, 13, 9, 8, 16, 9, 5, 7,
? 7, 8, 11, 12, 11, 13, 13, 5,
? 16, 10, 2, 11, 6, 8, 10, 12,
? 10, 14, 15, 8, 11, 13,
? /* B6 */
? 2, 7, 5, 7, 8, 12, 13, 8,
? 4, 6, 5, 5, 12, 15, 6, 9,
? 8, 9, 7, 9, 11, 7, 4, 9,
? 7, 10, 12, 10, 13, 9, 12, 9,
? 10, 11, 13, 12, 7, 14, 7, 9,
? 12, 7, 14, 12, 14, 9, 11, 12,
? 11, 7, 4, 5, 15, 7, 19, 12,
? 10, 7, 9, 9, 12, 11, 9, 6,
? 6, 9, 13, 6, 13, 11, 8, 12,
? 11, 13, 10, 12, 9, 15, 6, 10,
? 10, 4, 7, 12, 11, 10, 10, 6,
? 2, 6, 5, 9, 9, 2,
? /* B7 */
? 9, 5, 9, 12, 6, 4, 9, 8,
? 9, 18, 6, 12, 18, 15, 8, 8,
? 17, 3, 10, 4, 7, 8, 8, 5,
? 7, 7, 7, 7, 4, 8, 8, 6,
? 7, 6, 6, 7, 8, 11, 8, 11,
? 3, 8, 10, 10, 7, 8, 8, 8,
? 9, 7, 11, 7, 8, 4, 7, 7,
? 12, 7, 10, 8, 6, 8, 12, 12,
? 4, 9, 8, 13, 10, 12, 4, 9,
? 11, 10, 5, 13, 6, 8, 4, 7,
? 7, 4, 15, 8, 14, 7, 8, 13,
? 12, 9, 11, 6, 9, 8,
? /* B8 */
? 10, 11, 13, 11, 5, 7, 7, 11,
? 10, 10, 8, 11, 12, 8, 14, 9,
? 11, 18, 12, 9, 12, 5, 8, 4,
? 13, 6, 12, 4, 7, 6, 13, 8,
? 15, 14, 8, 7, 13, 9, 11, 12,
? 3, 5, 7, 9, 9, 7, 10, 13,
? 8, 11, 21, 4, 6, 9, 9, 7,
? 7, 7, 12, 7, 16, 10, 10, 14,
? 10, 16, 13, 15, 15, 7, 10, 14,
? 12, 4, 11, 10, 8, 12, 9, 12,
? 10, 12, 9, 12, 11, 3, 6, 9,
? 10, 13, 10, 7, 8, 19,
? /* B9 */
? 10, 10, 11, 3, 7, 5, 10, 11,
? 8, 10, 4, 9, 3, 6, 7, 9,
? 7, 6, 9, 4, 7, 8, 8, 9,
? 8, 8, 11, 12, 11, 8, 14, 7,
? 8, 8, 8, 13, 5, 11, 9, 7,
? 8, 9, 10, 8, 12, 8, 5, 9,
? 14, 9, 13, 8, 8, 8, 12, 6,
? 8, 9, 6, 14, 11, 23, 12, 20,
? 8, 6, 3, 10, 13, 8, 6, 11,
? 5, 7, 9, 6, 9, 8, 9, 10,
? 8, 13, 9, 8, 12, 13, 12, 12,
? 10, 8, 8, 14, 6, 9,
? 15, 9, 10, 10, 6, 10, 9, 12,
? 14, 7, 12, 7, 11, 12, 8, 12,
? 7, 16, 16, 10, 7, 16, 10, 11,
? 6, 5, 5, 8, 10, 17, 17, 14,
? 11, 9, 6, 10, 5, 10, 8, 12,
? 10, 11, 10, 5, 8, 7, 6, 11,
? 13, 9, 8, 11, 14, 14, 15, 9,
? 15, 12, 11, 9, 9, 9, 10, 7,
? 15, 16, 9, 8, 9, 10, 9, 11,
? 9, 7, 5, 6, 12, 9, 12, 7,
? 9, 10, 6, 8, 5, 8, 13, 10,
? 12, 9, 15, 8, 15, 12,
? /* BB */
? 8, 8, 11, 7, 4, 7, 4, 7,
? 9, 6, 12, 12, 8, 6, 4, 8,
? 13, 9, 7, 11, 7, 6, 8, 10,
? 7, 12, 10, 11, 10, 12, 13, 11,
? 10, 9, 4, 9, 12, 11, 16, 15,
? 17, 9, 11, 12, 13, 10, 13, 9,
? 11, 6, 9, 12, 17, 9, 12, 6,
? 13, 10, 15, 5, 12, 11, 10, 11,
? 6, 10, 5, 6, 9, 9, 9, 8,
? 11, 13, 9, 11, 17, 9, 6, 4,
? 10, 8, 12, 16, 8, 11, 5, 6,
? 11, 6, 13, 15, 10, 14,
? /* BC */
? 6, 5, 9, 16, 4, 7, 10, 11,
? 12, 6, 7, 12, 13, 20, 12, 3,
? 9, 10, 6, 7, 13, 6, 9, 2,
? 10, 3, 13, 7, 16, 8, 6, 11,
? 8, 11, 9, 11, 11, 4, 5, 9,
? 7, 7, 7, 10, 6, 14, 9, 6,
? 8, 10, 5, 9, 12, 10, 5, 10,
? 11, 15, 6, 9, 8, 13, 7, 10,
? 7, 6, 11, 7, 13, 10, 8, 8,
? 6, 12, 9, 11, 9, 14, 12, 8,
? 10, 13, 9, 11, 11, 9, 14, 13,
? 12, 9, 4, 13, 15, 6,
? /* BD */
? 10, 10, 9, 8, 11, 12, 10, 8,
? 15, 9, 9, 10, 6, 19, 12, 10,
? 9, 6, 6, 13, 8, 15, 12, 17,
? 12, 10, 6, 8, 9, 9, 9, 20,
? 12, 11, 11, 8, 11, 9, 7, 9,
? 16, 9, 13, 11, 14, 10, 10, 5,
? 12, 12, 11, 9, 11, 12, 6, 14,
? 7, 5, 10, 8, 11, 13, 14, 9,
? 9, 13, 8, 7, 17, 7, 9, 10,
? 4, 9, 9, 8, 3, 12, 4, 8,
? 4, 9, 18, 10, 13, 4, 13, 7,
? 13, 10, 13, 7, 10, 10,
? /* BE */
? 6, 7, 9, 14, 8, 13, 12, 16,
? 8, 11, 14, 13, 8, 4, 19, 12,
? 11, 14, 14, 12, 16, 8, 10, 13,
? 11, 10, 8, 9, 12, 12, 7, 5,
? 7, 9, 3, 7, 2, 10, 11, 11,
? 5, 6, 13, 8, 12, 8, 17, 8,
? 8, 10, 8, 8, 11, 7, 8, 9,
? 9, 8, 14, 7, 11, 4, 8, 11,
? 15, 13, 10, 5, 11, 8, 10, 10,
? 12, 10, 10, 11, 8, 10, 15, 23,
? 7, 11, 10, 17, 9, 6, 6, 9,
? 7, 11, 9, 6, 7, 10,
? /* BF */
? 9, 12, 10, 9, 10, 12, 8, 5,
? 9, 4, 12, 13, 8, 12, 5, 12,
? 11, 7, 9, 9, 11, 14, 17, 6,
? 7, 4, 8, 6, 9, 10, 15, 8,
? 8, 9, 12, 15, 14, 9, 7, 9,
? 5, 12, 7, 8, 9, 10, 8, 11,
? 9, 10, 7, 7, 8, 10, 4, 11,
? 7, 3, 6, 11, 9, 10, 13, 8,
? 14, 7, 12, 6, 9, 9, 13, 10,
? 7, 13, 8, 7, 10, 12, 6, 12,
? 7, 10, 8, 11, 7, 7, 3, 11,
? 8, 13, 12, 9, 13, 11,
? /* C0 */
? 12, 12, 12, 8, 8, 10, 7, 9,
? 6, 13, 12, 8, 8, 12, 14, 12,
? 14, 11, 10, 7, 13, 13, 11, 9,
? 8, 16, 12, 5, 15, 14, 12, 9,
? 16, 12, 9, 13, 11, 12, 10, 11,
? 8, 10, 10, 10, 7, 7, 6, 8,
? 9, 13, 10, 10, 11, 5, 13, 18,
? 16, 15, 11, 17, 9, 16, 6, 9,
? 8, 12, 13, 7, 9, 11, 11, 15,
? 16, 10, 10, 13, 11, 7, 7, 15,
? 5, 10, 9, 6, 10, 7, 5, 7,
? 10, 4, 7, 12, 8, 9,
? /* C1 */
? 12, 5, 11, 7, 8, 2, 14, 10,
? 9, 12, 10, 7, 18, 13, 8, 10,
? 8, 11, 11, 12, 10, 9, 8, 13,
? 10, 11, 13, 7, 7, 11, 12, 12,
? 9, 10, 15, 11, 14, 7, 16, 14,
? 5, 15, 2, 14, 17, 14, 10, 6,
? 12, 10, 6, 11, 12, 8, 17, 16,
? 9, 7, 20, 11, 15, 10, 7, 8,
? 9, 11, 13, 13, 10, 7, 11, 10,
? 7, 10, 8, 11, 5, 5, 13, 11,
? 14, 12, 13, 10, 6, 15, 10, 9,
? 4, 5, 11, 8, 11, 16,
? /* C2 */
? 11, 8, 8, 7, 13, 9, 12, 15,
? 14, 8, 7, 5, 11, 7, 8, 11,
? 7, 8, 12, 19, 13, 21, 13, 10,
? 11, 16, 12, 8, 7, 15, 7, 6,
? 11, 8, 10, 15, 12, 12, 10, 12,
? 9, 11, 13, 11, 9, 10, 9, 13,
? 7, 7, 11, 11, 7, 8, 6, 4,
? 7, 7, 6, 11, 17, 8, 11, 13,
? 14, 14, 13, 12, 9, 9, 9, 6,
? 11, 7, 8, 9, 3, 9, 14, 6,
? 10, 6, 7, 8, 6, 9, 15, 14,
? 12, 13, 14, 11, 14, 14,
? /* C3 */
? 13, 6, 9, 8, 8, 6, 10, 11,
? 8, 13, 4, 5, 10, 5, 8, 9,
? 12, 14, 9, 3, 8, 8, 11, 14,
? 15, 13, 7, 9, 12, 14, 7, 9,
? 9, 12, 8, 12, 3, 7, 5, 11,
? 13, 17, 13, 13, 11, 11, 8, 11,
? 15, 19, 17, 9, 11, 8, 6, 10,
? 8, 8, 14, 11, 12, 12, 10, 11,
? 11, 7, 9, 10, 12, 9, 8, 11,
? 13, 17, 9, 12, 8, 7, 14, 5,
? 5, 8, 5, 11, 10, 9, 8, 16,
? 8, 11, 6, 8, 13, 13,
? /* C4 */
? 14, 19, 14, 14, 16, 15, 20, 8,
? 5, 10, 15, 16, 8, 13, 13, 8,
? 11, 6, 9, 8, 7, 7, 8, 5,
? 13, 14, 13, 12, 14, 4, 5, 13,
? 8, 16, 10, 9, 7, 9, 6, 9,
? 7, 6, 2, 5, 9, 8, 9, 7,
? 10, 22, 9, 10, 9, 8, 11, 8,
? 10, 4, 14, 10, 8, 16, 10, 8,
? 5, 7, 7, 10, 13, 9, 13, 14,
? 8, 6, 15, 15, 11, 8, 10, 14,
? 5, 7, 10, 10, 19, 11, 15, 15,
? 10, 11, 9, 8, 16, 5,
? /* C5 */
? 8, 8, 4, 7, 9, 7, 10, 9,
? 6, 7, 5, 7, 9, 3, 13, 9,
? 8, 9, 17, 20, 10, 10, 8, 9,
? 8, 18, 7, 11, 7, 11, 9, 8,
? 8, 8, 12, 8, 11, 12, 11, 12,
? 9, 19, 15, 11, 15, 9, 10, 7,
? 9, 6, 8, 10, 16, 9, 7, 8,
? 7, 9, 10, 12, 8, 8, 9, 11,
? 14, 12, 10, 10, 8, 7, 12, 9,
? 10, 8, 11, 15, 12, 13, 12, 13,
? 16, 16, 8, 13, 11, 13, 8, 9,
? 21, 7, 8, 15, 12, 9,
? /* C6 */
? 11, 12, 10, 5, 4, 12, 15, 7,
? 20, 15, 11, 4, 12, 15, 14, 16,
? 11, 14, 16, 9, 13, 8, 9, 13,
? 6, 8, 8, 11, 5, 8, 10, 7,
? 9, 8, 8, 11, 11, 10, 14, 8,
? 11, 10, 5, 12, 4, 10, 12, 11,
? 13, 10, 6, 10, 12, 10, 14, 19,
? 18, 12, 12, 10, 11, 8, 2, 10,
? 14, 9, 7, 8, 12, 8, 8, 11,
? 11, 10, 6, 14, 8, 6, 11, 10,
? 6, 3, 6, 7, 9, 9, 16, 4,
? 6, 7, 7, 8, 5, 11,
? /* C7 */
? 9, 9, 9, 6, 8, 10, 3, 6,
? 13, 5, 12, 11, 16, 10, 10, 9,
? 15, 13, 8, 15, 11, 12, 4, 14,
? 8, 7, 12, 7, 14, 14, 12, 7,
? 16, 14, 14, 10, 10, 17, 6, 8,
? 5, 16, 15, 12, 10, 9, 10, 4,
? 8, 5, 8, 9, 9, 9, 9, 10,
? 12, 13, 7, 15, 12, 13, 7, 8,
? 9, 9, 10, 10, 11, 16, 12, 12,
? 11, 8, 10, 6, 12, 7, 9, 5,
? 7, 11, 7, 5, 9, 8, 12, 4,
? 11, 6, 11, 8, 7, 11,
? /* C8 */
? 8, 11, 17, 15, 5, 11, 23, 6,
? 16, 10, 6, 11, 10, 4, 8, 4,
? 10, 8, 16, 7, 13, 14, 12, 11,
? 12, 13, 12, 16, 5, 9, 22, 20,
? 20, 20, 5, 9, 7, 9, 12, 10,
? 4, 4, 2, 7, 7, 6, 4, 3,
? 7, 6, 5, 4, 4, 6, 9, 13,
? 9, 16, 14, 13, 10, 9, 4, 12,
? 9, 6, 9, 20, 16, 17, 6, 10,
? 8, 6, 2, 15, 8, 6, 15, 13,
? 12, 7, 10, 8, 10, 15, 9, 11,
? 13, 17, 13, 14, 3, 8,
? /* C9 */
? 6, 12, 10, 13, 8, 12, 12, 6,
? 12, 13, 6, 10, 12, 14, 10, 9,
? 6, 8, 7, 7, 13, 11, 13, 12,
? 10, 9, 8, 7, 3, 7, 14, 8,
? 5, 8, 16, 17, 16, 12, 6, 10,
? 15, 14, 6, 11, 12, 10, 3, 8,
? 14, 11, 10, 12, 10, 6, 3, 14,
? 4, 10, 7, 8, 11, 11, 11, 6,
? 8, 11, 13, 10, 13, 10, 7, 6,
? 10, 5, 8, 7, 7, 11, 10, 8,
? 9, 7, 8, 11, 9, 8, 13, 11,
? 7, 5, 12, 9, 4, 11,
? /* CA */
? 9, 11, 12, 9, 5, 6, 5, 9,
? 9, 12, 8, 3, 8, 2, 5, 9,
? 7, 4, 9, 9, 8, 7, 5, 5,
? 8, 9, 8, 8, 6, 5, 3, 5,
? 9, 8, 9, 14, 10, 8, 9, 13,
? 16, 9, 5, 8, 12, 8, 4, 5,
? 9, 9, 8, 8, 6, 4, 9, 6,
? 7, 11, 11, 8, 14, 11, 15, 8,
? 11, 10, 7, 13, 8, 12, 11, 12,
? 4, 12, 11, 15, 16, 12, 17, 13,
? 13, 12, 13, 12, 5, 8, 9, 7,
? 6, 9, 14, 11, 13, 14,
? /* CB */
? 10, 8, 9, 14, 10, 5, 5, 10,
? 9, 17, 4, 11, 10, 4, 13, 12,
? 7, 17, 9, 12, 9, 11, 10, 9,
? 12, 15, 15, 9, 7, 5, 5, 6,
? 13, 6, 13, 5, 7, 6, 8, 3,
? 8, 10, 8, 10, 9, 7, 6, 9,
? 12, 15, 16, 14, 7, 12, 9, 10,
? 10, 12, 14, 13, 13, 11, 7, 8,
? 14, 13, 14, 9, 11, 11, 10, 21,
? 13, 6, 17, 12, 14, 10, 6, 10,
? 10, 13, 11, 10, 14, 11, 10, 12,
? 8, 13, 5, 5, 6, 12,
? /* CC */
? 16, 9, 17, 15, 9, 8, 8, 5,
? 10, 11, 4, 8, 7, 7, 13, 8,
? 15, 13, 7, 17, 13, 15, 14, 10,
? 8, 12, 10, 14, 11, 5, 9, 6,
? 13, 13, 11, 12, 15, 10, 16, 10,
? 15, 11, 15, 10, 11, 10, 13, 10,
? 11, 10, 9, 11, 10, 5, 10, 10,
? 18, 13, 10, 13, 11, 10, 15, 12,
? 12, 15, 16, 12, 7, 12, 17, 11,
? 10, 9, 8, 4, 11, 13, 5, 11,
? 9, 14, 12, 9, 7, 8, 11, 13,
? 9, 10, 8, 4, 7, 9,
? /* CD */
? 5, 6, 11, 9, 9, 9, 12, 10,
? 10, 13, 17, 6, 11, 7, 12, 11,
? 10, 12, 9, 12, 11, 7, 5, 10,
? 5, 7, 9, 8, 10, 10, 10, 11,
? 3, 6, 8, 12, 6, 11, 13, 13,
? 13, 14, 9, 7, 4, 17, 8, 6,
? 11, 10, 7, 6, 8, 12, 7, 8,
? 12, 9, 9, 12, 9, 9, 4, 10,
? 9, 5, 15, 9, 12, 8, 10, 3,
? 11, 7, 13, 10, 11, 12, 11, 8,
? 11, 3, 12, 7, 4, 3, 8, 6,
? 8, 8, 11, 7, 6, 9,
? /* CE */
? 20, 13, 6, 4, 7, 10, 7, 11,
? 11, 4, 14, 11, 7, 11, 8, 6,
? 6, 7, 7, 5, 14, 8, 9, 9,
? 12, 17, 7, 12, 11, 11, 15, 3,
? 14, 12, 10, 4, 9, 7, 7, 14,
? 10, 6, 13, 10, 8, 9, 13, 10,
? 12, 7, 14, 8, 12, 7, 7, 7,
? 9, 4, 6, 9, 9, 4, 7, 11,
? 7, 7, 4, 8, 4, 10, 4, 14,
? 6, 9, 7, 5, 13, 11, 8, 4,
? 5, 10, 9, 8, 14, 8, 6, 11,
? 8, 12, 15, 6, 13, 10,
? /* CF */
? 12, 10, 7, 11, 15, 3, 11, 14,
? 11, 13, 6, 12, 17, 11, 10, 3,
? 13, 12, 11, 9, 7, 12, 6, 8,
? 15, 9, 7, 17, 14, 13, 9, 8,
? 9, 3, 12, 10, 6, 11, 13, 6,
? 5, 14, 6, 9, 8, 11, 11, 7,
? 9, 8, 13, 9, 9, 8, 13, 7,
? 13, 11, 12, 9, 10, 8, 8, 9,
? 11, 22, 9, 15, 17, 12, 3, 12,
? 10, 8, 13, 9, 8, 9, 9, 15,
? 13, 6, 11, 11, 12, 15, 9, 10,
? 18, 12, 10, 10, 11, 10,
? /* D0 */
? 3, 7, 10, 7, 11, 10, 10, 13,
? 8, 13, 15, 15, 6, 9, 13, 6,
? 11, 8, 11, 5, 11, 9, 19, 16,
? 8, 8, 12, 10, 16, 7, 12, 8,
? 7, 13, 7, 4, 9, 11, 9, 13,
? 12, 12, 6, 6, 9, 7, 6, 6,
? 16, 8, 7, 8, 8, 5, 4, 10,
? 6, 7, 12, 14, 6, 9, 10, 6,
? 13, 12, 7, 10, 10, 14, 6, 14,
? 11, 14, 9, 10, 6, 13, 11, 9,
? 6, 7, 10, 9, 12, 12, 11, 11,
? 7, 12, 9, 11, 11, 5,
? /* D1 */
? 9, 19, 10, 9, 13, 16, 8, 5,
? 11, 6, 9, 14, 12, 6, 8, 6,
? 6, 6, 10, 6, 5, 5, 9, 6,
? 6, 8, 9, 10, 7, 3, 7, 4,
? 10, 11, 13, 11, 12, 9, 6, 6,
? 11, 9, 11, 10, 11, 10, 7, 9,
? 12, 8, 7, 7, 15, 11, 8, 8,
? 8, 11, 11, 9, 14, 10, 12, 16,
? 6, 9, 12, 10, 9, 12, 10, 11,
? 10, 9, 5, 10, 10, 7, 6, 8,
? 8, 6, 9, 6, 10, 6, 11, 9,
? 10, 14, 16, 13, 7, 14,
? /* D2 */
? 13, 6, 13, 11, 12, 9, 9, 10,
? 9, 9, 20, 12, 15, 8, 6, 11,
? 7, 3, 6, 11, 5, 5, 6, 12,
? 8, 11, 1, 12, 7, 12, 11, 8,
? 6, 6, 13, 6, 12, 11, 5, 10,
? 14, 7, 8, 9, 18, 12, 9, 10,
? 3, 1, 7, 4, 4, 7, 8, 7,
? 6, 3, 7, 17, 11, 13, 9, 6,
? 13, 13, 15, 4, 3, 10, 13, 8,
? 5, 10, 7, 6, 17, 11, 8, 9,
? 9, 6, 10, 9, 6, 8, 7, 11,
? 11, 11, 7, 4, 4, 11,
? /* D3 */
? 5, 8, 15, 11, 18, 7, 14, 10,
? 11, 11, 9, 14, 7, 17, 9, 15,
? 13, 12, 9, 9, 8, 7, 17, 10,
? 11, 13, 14, 13, 8, 8, 10, 5,
? 11, 9, 5, 9, 6, 11, 7, 4,
? 5, 7, 10, 7, 8, 12, 7, 6,
? 4, 5, 7, 12, 9, 2, 5, 6,
? 11, 3, 8, 13, 13, 13, 14, 7,
? 9, 12, 8, 12, 12, 11, 11, 4,
? 10, 8, 3, 6, 9, 6, 9, 6,
? 5, 11, 6, 8, 6, 12, 12, 10,
? 12, 13, 11, 9, 8, 13,
? /* D4 */
? 10, 12, 12, 10, 15, 5, 10, 11,
? 10, 4, 9, 10, 10, 12, 14, 7,
? 7, 10, 13, 13, 12, 7, 8, 14,
? 9, 9, 4, 6, 12, 11, 9, 8,
? 12, 4, 10, 10, 10, 4, 9, 4,
? 9, 4, 7, 15, 11, 10, 13, 5,
? 5, 10, 6, 10, 9, 7, 10, 10,
? 6, 6, 9, 19, 12, 16, 10, 10,
? 12, 14, 17, 12, 19, 8, 6, 16,
? 9, 20, 16, 10, 7, 7, 17, 8,
? 8, 6, 8, 10, 9, 15, 15, 12,
? 16, 4, 12, 12, 5, 5,
? /* D5 */
? 11, 8, 9, 9, 14, 8, 5, 9,
? 7, 14, 10, 6, 10, 10, 14, 18,
? 9, 13, 11, 8, 10, 8, 14, 11,
? 10, 22, 9, 5, 9, 10, 12, 11,
? 15, 11, 14, 14, 7, 12, 10, 7,
? 3, 7, 8, 5, 8, 16, 13, 8,
? 9, 7, 8, 9, 13, 13, 6, 14,
? 5, 14, 7, 10, 12, 16, 8, 13,
? 14, 7, 10, 9, 13, 10, 13, 10,
? 16, 6, 7, 8, 8, 10, 7, 15,
? 10, 15, 6, 13, 9, 11, 8, 9,
? 6, 8, 16, 9, 5, 9,
? /* D6 */
? 9, 10, 8, 7, 6, 8, 4, 7,
? 14, 8, 8, 10, 5, 3, 8, 11,
? 8, 12, 12, 6, 10, 8, 7, 9,
? 4, 11, 5, 6, 7, 7, 10, 11,
? 6, 10, 13, 8, 9, 8, 12, 10,
? 13, 8, 8, 11, 12, 8, 11, 4,
? 9, 8, 9, 10, 8, 9, 8, 9,
? 6, 6, 6, 8, 6, 9, 7, 12,
? 9, 7, 8, 8, 10, 8, 9, 17,
? 10, 10, 12, 6, 11, 10, 8, 10,
? 6, 10, 12, 8, 17, 15, 5, 11,
? 9, 7, 11, 8, 12, 12,
? /* D7 */
? 7, 8, 9, 8, 7, 4, 9, 4,
? 9, 8, 15, 14, 15, 10, 6, 12,
? 6, 15, 6, 7, 12, 13, 9, 14,
? 7, 11, 10, 10, 10, 8, 8, 10,
? 12, 8, 10, 11, 11, 7, 9, 9,
? 9, 10, 9, 12, 11, 7, 12, 5,
? 9, 13, 3, 6, 11, 6, 18, 12,
? 15, 8, 11, 9, 7, 7, 7, 9,
? 12, 10, 7, 8, 11, 9, 7, 7,
? 8, 10, 20, 16, 15, 12, 13, 12,
? 15, 9, 5, 7, 9, 11, 7, 7,
? 10, 0, 0, 0, 0, 0,
? /* D8 */
? 3, 3, 3, 4, 4, 4, 5, 6,
? 6, 10, 10, 16, 1, 8, 1, 2,
? 3, 4, 4, 5, 5, 6, 9, 11,
? 14, 14, 19, 1, 8, 14, 2, 6,
? 4, 7, 7, 11, 14, 4, 6, 10,
? 11, 12, 14, 15, 16, 2, 5, 8,
? 11, 11, 15, 8, 7, 2, 4, 6,
? 7, 8, 8, 8, 9, 10, 10, 10,
? 13, 13, 14, 14, 15, 16, 2, 8,
? 2, 4, 4, 4, 5, 5, 5, 5,
? 6, 6, 6, 6, 6, 6, 6, 6,
? 6, 7, 7, 7, 7, 7,
? /* D9 */
? 7, 7, 7, 7, 8, 8, 8, 8,
? 8, 8, 8, 8, 8, 8, 8, 8,
? 9, 9, 9, 9, 9, 9, 9, 9,
? 9, 10, 10, 10, 10, 10, 10, 10,
? 10, 10, 10, 10, 10, 10, 11, 11,
? 11, 11, 11, 11, 11, 12, 12, 12,
? 13, 14, 14, 14, 14, 14, 14, 15,
? 15, 5, 6, 7, 7, 9, 17, 6,
? 8, 4, 12, 16, 17, 18, 21, 2,
? 9, 9, 11, 6, 6, 7, 2, 8,
? 10, 10, 11, 12, 12, 12, 13, 16,
? 19, 19, 2, 6, 8, 8,
? /* DA */
? 10, 2, 10, 10, 2, 5, 5, 5,
? 6, 6, 6, 7, 7, 7, 7, 7,
? 7, 8, 8, 8, 8, 8, 8, 8,
? 8, 8, 8, 8, 9, 9, 9, 9,
? 10, 10, 10, 10, 10, 10, 10, 11,
? 11, 11, 11, 11, 11, 11, 11, 11,
? 11, 11, 12, 12, 12, 12, 12, 13,
? 13, 14, 14, 14, 15, 15, 19, 2,
? 8, 2, 5, 5, 6, 6, 7, 7,
? 7, 7, 8, 9, 9, 10, 10, 10,
? 11, 11, 11, 16, 5, 5, 5, 5,
? 6, 6, 7, 7, 7, 7,
? /* DB */
? 7, 7, 8, 8, 8, 8, 8, 8,
? 8, 9, 9, 9, 9, 9, 10, 10,
? 11, 11, 13, 13, 13, 14, 14, 16,
? 19, 17, 5, 7, 5, 7, 7, 8,
? 10, 10, 11, 15, 9, 17, 20, 2,
? 2, 6, 10, 2, 5, 10, 12, 7,
? 9, 9, 14, 16, 16, 17, 6, 6,
? 6, 6, 6, 6, 6, 7, 7, 7,
? 8, 8, 8, 8, 8, 8, 8, 8,
? 8, 8, 9, 9, 9, 9, 9, 9,
? 9, 9, 9, 10, 10, 10, 10, 10,
? 10, 11, 11, 11, 11, 11,
? /* DC */
? 11, 11, 11, 11, 11, 12, 12, 12,
? 12, 13, 13, 14, 14, 14, 15, 20,
? 21, 22, 3, 5, 5, 6, 6, 6,
? 6, 6, 6, 6, 7, 7, 7, 7,
? 7, 7, 7, 7, 7, 7, 7, 7,
? 7, 7, 7, 7, 7, 7, 7, 7,
? 7, 7, 7, 8, 8, 8, 8, 8,
? 8, 8, 8, 8, 8, 8, 8, 8,
? 8, 8, 8, 8, 8, 8, 9, 9,
? 9, 9, 9, 9, 9, 9, 9, 9,
? 9, 9, 9, 9, 9, 9, 9, 9,
? 9, 9, 9, 9, 9, 9,
? /* DD */
? 9, 9, 9, 9, 9, 9, 9, 10,
? 10, 10, 10, 10, 10, 10, 10, 10,
? 10, 10, 10, 10, 10, 10, 10, 10,
? 10, 10, 10, 11, 11, 11, 11, 11,
? 11, 11, 11, 11, 11, 11, 11, 11,
? 11, 11, 11, 11, 11, 11, 11, 11,
? 11, 11, 11, 11, 11, 12, 12, 12,
? 12, 12, 12, 12, 12, 12, 12, 12,
? 12, 12, 12, 12, 12, 12, 12, 13,
? 13, 13, 13, 13, 13, 13, 13, 13,
? 13, 13, 13, 13, 13, 13, 13, 14,
? 14, 14, 14, 14, 14, 14,
? /* DE */
? 14, 14, 14, 14, 15, 15, 15, 15,
? 15, 15, 15, 15, 15, 16, 16, 16,
? 16, 16, 16, 16, 16, 16, 17, 17,
? 17, 17, 17, 18, 19, 19, 19, 20,
? 20, 22, 3, 9, 6, 7, 9, 9,
? 10, 10, 11, 3, 5, 5, 12, 3,
? 6, 7, 8, 8, 8, 8, 9, 9,
? 9, 10, 10, 10, 11, 11, 11, 11,
? 11, 11, 11, 11, 11, 11, 11, 11,
? 12, 12, 12, 12, 12, 12, 12, 12,
? 12, 12, 13, 13, 13, 13, 13, 13,
? 13, 13, 14, 14, 14, 14,
? /* DF */
? 14, 15, 15, 15, 15, 16, 16, 16,
? 17, 17, 19, 23, 25, 3, 7, 8,
? 12, 5, 5, 5, 5, 5, 5, 6,
? 6, 6, 7, 7, 7, 7, 7, 7,
? 7, 7, 7, 7, 7, 8, 8, 8,
? 8, 8, 8, 8, 8, 8, 8, 8,
? 9, 9, 9, 9, 9, 9, 9, 9,
? 9, 9, 9, 9, 9, 9, 9, 9,
? 9, 9, 9, 9, 9, 9, 9, 9,
? 10, 10, 10, 10, 10, 10, 10, 10,
? 10, 10, 10, 11, 11, 11, 11, 11,
? 11, 11, 11, 11, 11, 11,
? /* E0 */
? 11, 11, 11, 11, 11, 11, 11, 11,
? 12, 12, 12, 12, 12, 12, 12, 12,
? 12, 12, 12, 12, 12, 12, 12, 12,
? 12, 13, 13, 13, 13, 13, 13, 13,
? 13, 13, 13, 13, 13, 13, 13, 13,
? 13, 13, 13, 13, 13, 13, 14, 14,
? 14, 14, 14, 14, 14, 14, 14, 15,
? 15, 15, 15, 15, 15, 15, 15, 15,
? 15, 15, 16, 16, 16, 16, 16, 16,
? 17, 17, 19, 25, 3, 6, 6, 7,
? 7, 8, 9, 10, 11, 11, 16, 7,
? 8, 8, 8, 10, 11, 11,
? /* E1 */
? 11, 12, 14, 14, 15, 15, 6, 6,
? 7, 7, 7, 7, 7, 7, 7, 7,
? 7, 8, 8, 8, 8, 8, 8, 8,
? 8, 8, 8, 9, 9, 9, 9, 10,
? 10, 11, 11, 11, 11, 11, 11, 11,
? 12, 12, 12, 12, 12, 12, 12, 12,
? 12, 12, 13, 13, 13, 14, 15, 15,
? 17, 17, 19, 3, 7, 8, 9, 9,
? 9, 10, 11, 11, 12, 13, 15, 16,
? 24, 3, 3, 5, 6, 6, 6, 7,
? 7, 8, 8, 8, 9, 9, 9, 9,
? 10, 10, 10, 10, 10, 10,
? /* E2 */
? 10, 11, 11, 11, 11, 11, 11, 11,
? 12, 12, 12, 12, 12, 12, 14, 14,
? 15, 15, 16, 17, 20, 6, 14, 12,
? 14, 3, 3, 6, 7, 7, 7, 7,
? 7, 8, 9, 10, 10, 11, 12, 12,
? 13, 13, 14, 15, 15, 25, 5, 7,
? 7, 8, 9, 9, 11, 11, 11, 11,
? 12, 13, 14, 15, 16, 16, 17, 3,
? 5, 6, 6, 7, 7, 7, 7, 7,
? 7, 7, 7, 7, 7, 7, 8, 8,
? 8, 8, 8, 8, 8, 8, 8, 8,
? 8, 9, 9, 9, 9, 9,
? /* E3 */
? 9, 9, 10, 10, 10, 10, 10, 10,
? 10, 10, 11, 11, 11, 11, 11, 11,
? 11, 11, 12, 12, 12, 12, 12, 12,
? 12, 13, 13, 14, 15, 15, 15, 16,
? 16, 18, 8, 17, 4, 6, 7, 7,
? 7, 7, 9, 9, 10, 10, 10, 11,
? 11, 11, 11, 11, 11, 12, 12, 13,
? 13, 13, 14, 3, 4, 8, 3, 6,
? 6, 6, 7, 7, 7, 7, 7, 7,
? 7, 7, 7, 7, 7, 7, 8, 8,
? 8, 8, 8, 8, 8, 8, 8, 8,
? 8, 8, 8, 8, 8, 8,
? /* E4 */
? 9, 9, 9, 9, 9, 9, 9, 9,
? 9, 9, 9, 9, 9, 9, 9, 9,
? 9, 9, 10, 10, 10, 10, 10, 10,
? 10, 10, 10, 10, 10, 11, 11, 11,
? 11, 11, 11, 11, 11, 11, 11, 11,
? 11, 11, 11, 11, 12, 12, 12, 12,
? 12, 12, 12, 12, 12, 12, 12, 12,
? 13, 13, 13, 13, 13, 13, 13, 13,
? 13, 13, 13, 13, 13, 13, 13, 13,
? 13, 14, 14, 14, 14, 14, 14, 14,
? 14, 14, 14, 14, 14, 14, 14, 15,
? 15, 15, 15, 15, 15, 16,
? /* E5 */
? 16, 16, 16, 16, 16, 17, 17, 17,
? 17, 17, 19, 19, 19, 20, 20, 21,
? 24, 3, 5, 8, 8, 9, 10, 12,
? 13, 14, 14, 15, 16, 16, 17, 17,
? 3, 7, 7, 8, 8, 8, 8, 8,
? 8, 8, 9, 9, 10, 10, 10, 10,
? 10, 10, 11, 11, 11, 11, 12, 12,
? 12, 12, 13, 13, 13, 13, 15, 15,
? 16, 16, 17, 17, 18, 3, 11, 9,
? 12, 5, 9, 10, 10, 12, 14, 15,
? 21, 8, 8, 9, 11, 12, 22, 3,
? 6, 6, 7, 7, 7, 7,
? /* E6 */
? 7, 7, 7, 7, 7, 7, 8, 8,
? 8, 8, 9, 9, 9, 9, 9, 9,
? 9, 10, 10, 10, 10, 10, 10, 10,
? 10, 11, 11, 11, 11, 11, 11, 11,
? 12, 12, 12, 12, 13, 13, 13, 13,
? 13, 13, 14, 14, 14, 14, 14, 14,
? 14, 15, 16, 16, 17, 17, 20, 5,
? 9, 7, 8, 12, 3, 3, 8, 8,
? 8, 8, 8, 8, 8, 8, 9, 9,
? 9, 10, 11, 11, 11, 11, 12, 12,
? 13, 13, 13, 14, 14, 15, 19, 20,
? 3, 6, 6, 6, 6, 6,
? /* E7 */
? 7, 7, 7, 8, 8, 8, 8, 8,
? 8, 8, 9, 9, 9, 10, 10, 10,
? 11, 11, 11, 11, 11, 11, 11, 11,
? 11, 11, 11, 12, 12, 12, 12, 12,
? 12, 12, 12, 12, 12, 13, 13, 13,
? 13, 13, 13, 13, 13, 14, 14, 14,
? 14, 14, 15, 15, 15, 16, 16, 16,
? 16, 19, 3, 15, 3, 8, 10, 6,
? 6, 8, 8, 8, 9, 9, 9, 9,
? 9, 9, 9, 9, 10, 10, 10, 10,
? 10, 10, 10, 10, 10, 11, 12, 12,
? 12, 12, 12, 12, 12, 12,
? /* E8 */
? 12, 12, 13, 13, 13, 13, 13, 14,
? 14, 15, 15, 15, 15, 15, 15, 15,
? 16, 17, 17, 17, 18, 20, 20, 13,
? 13, 14, 7, 7, 7, 7, 7, 8,
? 8, 8, 8, 8, 8, 8, 8, 8,
? 8, 8, 8, 8, 9, 9, 9, 9,
? 9, 9, 9, 9, 9, 9, 9, 9,
? 9, 9, 9, 9, 9, 9, 9, 10,
? 10, 10, 10, 10, 10, 10, 10, 10,
? 10, 10, 10, 10, 10, 10, 10, 10,
? 10, 10, 11, 11, 11, 11, 11, 11,
? 11, 12, 12, 12, 12, 12,
? /* E9 */
? 12, 12, 12, 12, 12, 12, 12, 13,
? 13, 13, 13, 13, 13, 13, 13, 13,
? 13, 13, 13, 13, 13, 13, 13, 13,
? 13, 13, 14, 14, 14, 14, 14, 14,
? 14, 14, 14, 14, 14, 14, 14, 15,
? 15, 15, 15, 15, 15, 15, 15, 16,
? 16, 16, 16, 16, 16, 16, 16, 16,
? 16, 16, 17, 17, 17, 17, 18, 13,
? 14, 8, 9, 9, 9, 11, 11, 11,
? 12, 12, 14, 16, 7, 8, 9, 9,
? 9, 9, 9, 9, 9, 9, 9, 10,
? 10, 10, 10, 11, 12, 12,
? /* EA */
? 12, 12, 13, 15, 16, 10, 5, 8,
? 11, 12, 12, 13, 13, 13, 14, 14,
? 8, 9, 12, 16, 16, 17, 4, 6,
? 6, 7, 8, 8, 8, 8, 8, 8,
? 8, 9, 9, 9, 9, 9, 9, 10,
? 10, 10, 10, 10, 10, 11, 11, 12,
? 13, 13, 14, 14, 16, 18, 18, 20,
? 21, 9, 9, 9, 9, 10, 10, 10,
? 10, 11, 11, 11, 12, 12, 14, 9,
? 10, 11, 12, 13, 14, 15, 15, 9,
? 13, 6, 8, 9, 11, 11, 12, 12,
? 12, 13, 14, 10, 11, 12,
? /* EB */
? 14, 17, 10, 10, 12, 12, 12, 13,
? 15, 16, 16, 22, 5, 6, 7, 7,
? 9, 10, 10, 11, 13, 4, 11, 13,
? 12, 13, 15, 9, 15, 6, 7, 7,
? 7, 8, 8, 8, 8, 8, 8, 8,
? 8, 9, 9, 9, 9, 9, 9, 9,
? 9, 9, 9, 9, 9, 9, 10, 10,
? 10, 10, 10, 10, 10, 10, 10, 11,
? 11, 11, 11, 11, 11, 12, 12, 12,
? 12, 12, 12, 12, 13, 13, 13, 13,
? 13, 13, 13, 13, 14, 14, 14, 15,
? 15, 16, 17, 17, 17, 17,
? /* EC */
? 17, 16, 7, 11, 12, 13, 13, 16,
? 9, 9, 12, 13, 16, 16, 4, 13,
? 13, 17, 12, 15, 16, 8, 10, 10,
? 10, 11, 11, 13, 14, 7, 8, 8,
? 8, 9, 9, 9, 9, 9, 10, 10,
? 11, 11, 11, 12, 12, 13, 13, 13,
? 13, 13, 13, 13, 13, 14, 15, 15,
? 15, 15, 16, 16, 16, 18, 21, 30,
? 4, 11, 13, 16, 8, 8, 9, 11,
? 12, 4, 7, 8, 8, 9, 9, 9,
? 9, 9, 9, 9, 10, 10, 12, 12,
? 13, 14, 16, 21, 7, 7,
? /* ED */
? 9, 10, 10, 10, 10, 10, 10, 11,
? 13, 13, 14, 16, 16, 17, 17, 24,
? 4, 6, 8, 9, 12, 7, 8, 8,
? 9, 9, 9, 9, 9, 9, 9, 10,
? 10, 10, 10, 10, 10, 10, 10, 10,
? 10, 11, 11, 11, 11, 11, 11, 11,
? 11, 12, 13, 13, 13, 13, 13, 14,
? 14, 14, 14, 14, 15, 15, 15, 16,
? 16, 17, 17, 18, 19, 18, 21, 11,
? 12, 17, 19, 8, 9, 9, 9, 9,
? 9, 10, 10, 10, 11, 11, 11, 11,
? 12, 12, 12, 12, 13, 13,
? /* EE */
? 13, 13, 14, 14, 14, 14, 15, 15,
? 16, 16, 16, 17, 18, 7, 8, 9,
? 9, 9, 10, 12, 13, 17, 9, 10,
? 10, 12, 13, 14, 14, 16, 17, 17,
? 10, 16, 23, 5, 6, 6, 7, 7,
? 7, 8, 8, 8, 8, 8, 8, 9,
? 9, 9, 9, 9, 9, 9, 9, 9,
? 9, 10, 10, 10, 10, 10, 10, 10,
? 10, 10, 10, 10, 10, 10, 10, 10,
? 10, 10, 10, 10, 11, 11, 11, 11,
? 11, 11, 11, 11, 11, 11, 11, 11,
? 11, 11, 11, 11, 11, 11,
? /* EF */
? 11, 11, 11, 11, 11, 11, 11, 11,
? 12, 12, 12, 12, 12, 12, 12, 12,
? 12, 12, 12, 12, 12, 12, 12, 12,
? 12, 13, 13, 13, 13, 13, 13, 13,
? 13, 13, 13, 13, 13, 14, 14, 14,
? 14, 14, 14, 14, 14, 14, 14, 14,
? 14, 15, 15, 15, 15, 15, 15, 15,
? 15, 16, 16, 16, 16, 16, 16, 16,
? 16, 17, 17, 17, 17, 17, 17, 17,
? 17, 17, 17, 18, 18, 18, 19, 20,
? 14, 9, 12, 13, 9, 9, 10, 10,
? 11, 12, 12, 12, 13, 13,
? /* F0 */
? 15, 15, 16, 17, 18, 22, 9, 11,
? 12, 13, 17, 10, 11, 7, 7, 8,
? 9, 9, 10, 10, 10, 10, 10, 10,
? 11, 11, 11, 11, 11, 12, 12, 12,
? 12, 12, 12, 13, 13, 13, 13, 13,
? 14, 14, 14, 14, 14, 15, 15, 16,
? 16, 16, 17, 17, 17, 17, 18, 18,
? 22, 5, 7, 7, 8, 8, 9, 9,
? 10, 10, 10, 10, 10, 10, 10, 10,
? 11, 11, 12, 12, 12, 12, 12, 12,
? 13, 13, 13, 13, 13, 13, 13, 14,
? 14, 14, 14, 14, 14, 14,
? /* F1 */
? 15, 15, 15, 15, 16, 16, 16, 16,
? 16, 16, 16, 16, 17, 18, 18, 18,
? 18, 21, 23, 11, 12, 8, 8, 9,
? 9, 10, 11, 13, 13, 14, 14, 14,
? 15, 5, 8, 9, 9, 9, 9, 10,
? 11, 11, 11, 11, 12, 12, 12, 12,
? 13, 13, 13, 13, 13, 13, 14, 14,
? 14, 14, 14, 15, 15, 16, 17, 19,
? 24, 5, 9, 11, 12, 9, 6, 9,
? 10, 12, 12, 13, 14, 15, 15, 16,
? 16, 22, 12, 8, 11, 11, 11, 12,
? 15, 16, 12, 9, 10, 10,
? /* F2 */
? 12, 12, 12, 12, 13, 15, 15, 16,
? 16, 16, 18, 20, 21, 6, 10, 7,
? 8, 9, 9, 9, 9, 10, 10, 10,
? 10, 10, 10, 10, 10, 10, 10, 11,
? 11, 11, 11, 11, 11, 11, 11, 11,
? 11, 11, 12, 12, 12, 12, 12, 12,
? 12, 12, 12, 12, 12, 12, 13, 13,
? 13, 13, 13, 13, 13, 13, 14, 14,
? 14, 14, 14, 14, 14, 14, 14, 14,
? 14, 14, 14, 14, 15, 15, 15, 15,
? 15, 15, 15, 15, 15, 15, 15, 15,
? 15, 15, 16, 16, 16, 16,
? /* F3 */
? 16, 16, 16, 16, 16, 16, 17, 17,
? 17, 17, 17, 17, 17, 17, 17, 17,
? 17, 18, 18, 18, 18, 19, 19, 19,
? 19, 20, 21, 24, 26, 6, 14, 17,
? 17, 10, 8, 9, 9, 9, 10, 10,
? 10, 10, 10, 11, 11, 11, 11, 11,
? 11, 11, 11, 11, 11, 11, 11, 12,
? 12, 12, 12, 12, 12, 13, 13, 13,
? 13, 13, 13, 14, 14, 14, 14, 14,
? 14, 14, 14, 14, 14, 14, 14, 15,
? 15, 15, 15, 16, 16, 16, 16, 16,
? 17, 17, 17, 17, 17, 17,
? /* F4 */
? 18, 18, 18, 19, 19, 19, 8, 9,
? 11, 12, 10, 10, 9, 9, 9, 10,
? 10, 10, 10, 11, 11, 11, 11, 12,
? 13, 13, 14, 15, 17, 18, 19, 10,
? 10, 11, 13, 13, 19, 11, 11, 13,
? 15, 15, 16, 9, 10, 10, 11, 11,
? 12, 12, 13, 14, 14, 14, 15, 15,
? 15, 15, 15, 16, 18, 6, 15, 9,
? 11, 12, 14, 14, 15, 15, 16, 17,
? 6, 12, 14, 14, 17, 25, 11, 19,
? 9, 12, 13, 13, 23, 11, 15, 10,
? 11, 9, 10, 10, 10, 12,
? /* F5 */
? 12, 12, 13, 13, 13, 14, 14, 14,
? 14, 14, 15, 15, 16, 16, 16, 17,
? 17, 18, 19, 19, 19, 20, 20, 21,
? 7, 16, 10, 13, 14, 18, 18, 10,
? 10, 11, 11, 11, 12, 12, 12, 12,
? 12, 12, 12, 12, 13, 13, 13, 13,
? 13, 13, 13, 14, 14, 15, 15, 15,
? 15, 15, 15, 15, 15, 16, 16, 16,
? 16, 16, 16, 16, 16, 17, 17, 17,
? 19, 19, 19, 19, 19, 20, 21, 22,
? 22, 23, 24, 7, 12, 13, 13, 17,
? 17, 11, 11, 12, 12, 13,
? /* F6 */
? 13, 14, 15, 13, 18, 12, 11, 12,
? 12, 14, 14, 16, 16, 16, 19, 19,
? 20, 22, 10, 13, 13, 13, 14, 14,
? 15, 15, 17, 8, 12, 20, 8, 10,
? 10, 13, 14, 18, 18, 14, 14, 15,
? 16, 17, 18, 18, 21, 24, 12, 12,
? 13, 13, 13, 13, 13, 13, 13, 13,
? 14, 14, 14, 14, 14, 14, 14, 14,
? 15, 15, 15, 15, 15, 15, 15, 15,
? 15, 15, 16, 16, 16, 16, 16, 16,
? 16, 16, 16, 16, 16, 16, 17, 17,
? 17, 17, 17, 17, 17, 17,
? /* F7 */
? 18, 18, 18, 18, 18, 19, 19, 19,
? 19, 19, 19, 20, 20, 20, 21, 14,
? 14, 15, 15, 16, 18, 18, 18, 19,
? 19, 13, 13, 14, 14, 14, 15, 15,
? 17, 17, 18, 18, 19, 19, 22, 14,
? 14, 15, 16, 16, 17, 19, 12, 15,
? 18, 22, 22, 10, 13, 14, 15, 15,
? 16, 16, 16, 18, 19, 20, 23, 25,
? 14, 15, 17, 13, 16, 16, 17, 19,
? 19, 21, 23, 17, 17, 17, 18, 18,
? 19, 20, 20, 20, 20, 21, 17, 18,
? 20, 23, 23, 16, 17, 23,
? /* F8 */
? }
}



tambc 2006-12-21 12:04 發表評論
]]>
用Yale CAS Server 來實現單點登陸(SSO)http://www.aygfsteel.com/tambc/articles/89243.htmltambctambcThu, 21 Dec 2006 03:47:00 GMThttp://www.aygfsteel.com/tambc/articles/89243.htmlhttp://www.aygfsteel.com/tambc/comments/89243.htmlhttp://www.aygfsteel.com/tambc/articles/89243.html#Feedback0http://www.aygfsteel.com/tambc/comments/commentRss/89243.htmlhttp://www.aygfsteel.com/tambc/services/trackbacks/89243.html的SSO(single sign-on)的服務。

這里用一個簡單的例子來說明用CAS來實現單點登陸(SSO)。

Yale CAS Server 的配置過程

CAS (Central Authentication Service)是Yale大學的ITS開發的一套JAVA實現的開源
的SSO(single sign-on)的服務。該服務是以一個java web app(eg:cas.war)來進行服務的,
使用時需要將cas.war發布到一個servlet2.3兼容的服務器上,并且服務器需要支持SSL,
在需要使用該服務的其他服務器(客戶),只要進行簡單的配置就可以實現SSO了。

CAS 的客戶端可以有很多種,因為驗證的結果是以XML的格式返回的,CAS的客戶端已
打包進去的有java,perl,python,asp,apache module等好幾種客戶端示例,你還可以根據
需要實現一個自己的客戶端,非常簡單!~

下面我們以tomcat 5.0 作為CAS Server(server1),另外一臺tomcat5.0 為client(client1)
為例進行說明。

1.下載cas-server和cas-client(可選,建議使用)
http://www.yale.edu/tp/cas/cas-server-2.0.12.zip
http://www.yale.edu/tp/cas/cas-client-2.0.11.zip

2.將cas-server-2.0.12.zip解壓,并將lib/cas.war拷貝到server1的webapps下

3.產生SERVER的證書
keytool -genkey -alias my-alias-name -keyalg RSA -keystore keystore-file

4.在server1配置tomcat使用HTTPS

$CATALINA_HOME/conf/server.xml里

<Connector className="org.apache.coyote.tomcat5.CoyoteConnector"
port="8443" minProcessors="5" maxProcessors="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" debug="0" scheme="https"
secure="true">
<Factory className="org.apache.coyote.tomcat5.CoyoteServerSocketFactory"
keystoreFile="/path/to/your/keystore-file"
keystorePass="your-password" clientAuth="false" protocol="TLS" />
</Connector>

5.在要使用CAS的客戶端client1里設置(以servlets-examples這個APP為例),我們使用
ServletFilter(CAS client里提供的)來實現SSO的檢查。

修改servlets-examples/WEB-INF/web.xml

<filter>
<filter-name>CASFilter</filter-name>
<filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
<param-value>https://your.cas.server.name(eg:server1):port/cas/login</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://your.cas.server.name(eg:server1):port/cas/proxyValidate</param-value>
</init-param>

<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>your.client.server.name(eg:client1):port</param-value>
</init-param>

</filter>

<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>

6.將cas-client-2.0.11.zip解壓,把java/lib/casclient.jar拷貝到client1服務器上的
webapps/servlets-examples/WEB-INF/lib目錄下(如果沒有就建一個)

7.導出SERVER的證書,用來給所有需要用到的客戶端導入
keytool -export -file myserver.cert -alias my-alias-name -keystore keystore-file

8.在客戶端的JVM里導入信任的SERVER的證書(根據情況有可能需要管理員權限)
keytool -import -keystore $JAVA_HOME/jre/lib/security/cacerts -file myserver.cert -alias my-alias-name

9.test & done.
把server1和client1分別起來,檢查啟動的LOG是否正常,如果一切OK,就訪問
http://client1:8080/servlets-examples/servlet/HelloWorldExample
系統會自動跳轉到一個驗證頁面,隨便輸入一個相同的賬號,密碼,嚴正通過之后就會訪問
到真正的HelloWorldExample這個servlet了

更多信息請參考
http://www.yale.edu/tp/cas/
http://www-106.ibm.com/developerworks/web/library/wa-singlesign/


tambc 2006-12-21 11:47 發表評論
]]>
實現HTTP長連接(服務器推)http://www.aygfsteel.com/tambc/articles/89240.htmltambctambcThu, 21 Dec 2006 03:40:00 GMThttp://www.aygfsteel.com/tambc/articles/89240.htmlhttp://www.aygfsteel.com/tambc/comments/89240.htmlhttp://www.aygfsteel.com/tambc/articles/89240.html#Feedback0http://www.aygfsteel.com/tambc/comments/commentRss/89240.htmlhttp://www.aygfsteel.com/tambc/services/trackbacks/89240.html ?1 response.setContentType( " text/html " );?
?2 ??ServletOutputStream?os? = ?response.getOutputStream();?
?3 ??SimpleDateFormat?format? = ? new ?SimpleDateFormat( " yyyy-MM-dd?HH:mm:ss " );?
?4 ?? while ?( true )? {?
?5 ??? try ? {?
?6 ????String?str? = ?format.format( new ?java.util.Date());?
?7 ????str? = ? " 服務器當前時間: " ? + ?str? + ? " <BR> " ;?
?8 ???? byte []?pdu? = ?str.getBytes();?
?9 ????os.write(pdu);?
10 ????os.flush();?
11 ????System.out.println(Thread.currentThread().getName()? + ? " ??發送? " ? + ?str);?
12 ???? try ? {?
13 ?????Thread.sleep( 3000 );?
14 ????}
? catch ?(InterruptedException?ex)? {?
15 ????}
?
16 ???}
? catch ?(IOException?e)? {?
17 ????System.out.println(?
18 ?????Thread.currentThread().getName()? + ? " ??客戶端斷開連接 " );?
19 ???? break ;?
20 ???}
?
21 ??}


tambc 2006-12-21 11:40 發表評論
]]>
主站蜘蛛池模板: 东乡县| 民权县| 平阳县| 稻城县| 吴堡县| 忻州市| 博兴县| 黄大仙区| 蒙山县| 通道| 诏安县| 汝城县| 甘肃省| 吉林省| 兖州市| 平塘县| 宜君县| 年辖:市辖区| 朔州市| 白沙| 潮安县| 西峡县| 视频| 皮山县| 桐梓县| 西平县| 康保县| 玉林市| 安平县| 旺苍县| 乌兰浩特市| 乌鲁木齐市| 广河县| 汾阳市| 于都县| 宜都市| 岳阳市| 卓资县| 郎溪县| 永春县| 横峰县|